summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MAINTAINERS29
-rw-r--r--classes/angstrom-mirrors.bbclass4
-rw-r--r--classes/autotools.bbclass2
-rw-r--r--classes/base.bbclass31
-rw-r--r--classes/binconfig.bbclass2
-rw-r--r--classes/cmake.bbclass10
-rw-r--r--classes/concatenated-image.bbclass38
-rw-r--r--classes/debian.bbclass8
-rw-r--r--classes/efl_base.bbclass2
-rw-r--r--classes/image.bbclass11
-rw-r--r--classes/insane.bbclass167
-rw-r--r--classes/java-library.bbclass37
-rw-r--r--classes/java.bbclass62
-rw-r--r--classes/kernel-arch.bbclass2
-rw-r--r--classes/kernel.bbclass43
-rw-r--r--classes/module-base.bbclass4
-rw-r--r--classes/module.bbclass3
-rw-r--r--classes/native.bbclass6
-rw-r--r--classes/nslu2-mirrors.bbclass4
-rw-r--r--classes/nylon-mirrors.bbclass4
-rw-r--r--classes/openmoko-base.bbclass2
-rw-r--r--classes/opie_i18n.bbclass20
-rw-r--r--classes/oplinux-mirrors.bbclass8
-rw-r--r--classes/own-mirrors.bbclass2
-rw-r--r--classes/package.bbclass16
-rw-r--r--classes/package_ipk.bbclass1
-rw-r--r--classes/patch.bbclass2
-rw-r--r--classes/qmake2.bbclass7
-rw-r--r--classes/qpf.bbclass32
-rw-r--r--classes/qtopia4core.bbclass7
-rw-r--r--classes/rootfs_deb.bbclass10
-rw-r--r--classes/rootfs_ipk.bbclass2
-rw-r--r--classes/sanity.bbclass13
-rw-r--r--classes/scons.bbclass1
-rw-r--r--classes/sdl.bbclass36
-rw-r--r--classes/sip.bbclass2
-rw-r--r--classes/sourcepkg.bbclass2
-rw-r--r--classes/xilinx-bsp.bbclass2
-rw-r--r--conf/bitbake.conf3
-rw-r--r--conf/checksums.ini184
-rw-r--r--conf/distro/amsdelta-oe.conf2
-rw-r--r--conf/distro/angstrom-2007.1-legacy.conf9
-rw-r--r--conf/distro/angstrom-2007.1.conf253
-rw-r--r--conf/distro/angstrom-2008.1-legacy.conf9
-rw-r--r--conf/distro/angstrom-2008.1.conf53
-rw-r--r--conf/distro/chinook-compat.conf175
-rw-r--r--conf/distro/foonas.conf2
-rw-r--r--conf/distro/generic-uclibc.conf4
-rw-r--r--conf/distro/generic.conf48
-rw-r--r--conf/distro/include/angstrom-2007-for-openmoko.inc260
-rw-r--r--conf/distro/include/angstrom-2007-preferred-versions.inc53
-rw-r--r--conf/distro/include/angstrom-uclibc.inc5
-rw-r--r--conf/distro/include/angstrom.inc8
-rw-r--r--conf/distro/include/moko-autorev.inc31
-rw-r--r--conf/distro/include/preferred-om-2008-versions.inc1
-rw-r--r--conf/distro/include/preferred-opie-versions-1.2.4-pre.inc2
-rw-r--r--conf/distro/include/sane-srcdates.inc5
-rw-r--r--conf/distro/include/sane-srcrevs.inc50
-rw-r--r--conf/distro/include/slugos.inc7
-rw-r--r--conf/distro/maemo-1.0.conf38
-rw-r--r--conf/distro/mokoslug.conf2
-rw-r--r--conf/distro/openmoko.conf10
-rw-r--r--conf/distro/openprotium.conf101
-rw-r--r--conf/distro/openwrt-sdk.conf29
-rw-r--r--conf/distro/slugos.conf2
-rw-r--r--conf/distro/unslung.conf4
-rw-r--r--conf/documentation.conf8
-rw-r--r--conf/local.conf.sample15
-rw-r--r--conf/machine/at32stk1000.conf5
-rw-r--r--conf/machine/atngw100.conf5
-rw-r--r--conf/machine/chumby.conf30
-rw-r--r--conf/machine/cm-x270.conf2
-rw-r--r--conf/machine/collie.conf12
-rw-r--r--conf/machine/dht-walnut.conf1
-rw-r--r--conf/machine/fic-gta01.conf7
-rw-r--r--conf/machine/fic-gta02.conf13
-rw-r--r--conf/machine/gesbc-9302.conf29
-rw-r--r--conf/machine/h1910.conf2
-rw-r--r--conf/machine/h1940.conf2
-rw-r--r--conf/machine/h2200.conf7
-rw-r--r--conf/machine/h3600.conf2
-rw-r--r--conf/machine/h3800.conf2
-rw-r--r--conf/machine/h3900.conf2
-rw-r--r--conf/machine/h4000.conf2
-rw-r--r--conf/machine/h5000.conf12
-rw-r--r--conf/machine/h6300.conf2
-rw-r--r--conf/machine/htcalpine.conf2
-rw-r--r--conf/machine/htcapache.conf2
-rw-r--r--conf/machine/htcblueangel.conf2
-rw-r--r--conf/machine/htchimalaya.conf2
-rw-r--r--conf/machine/htcsable.conf2
-rw-r--r--conf/machine/htctornado.conf2
-rw-r--r--conf/machine/htcuniversal.conf2
-rw-r--r--conf/machine/htcwallaby.conf2
-rw-r--r--conf/machine/hx2000.conf2
-rw-r--r--conf/machine/hx4700.conf20
-rw-r--r--conf/machine/include/collie-2.6.inc6
-rw-r--r--conf/machine/include/ixp4xx.inc4
-rw-r--r--conf/machine/include/motorola-ezx-base.inc4
-rw-r--r--conf/machine/include/palm.inc2
-rw-r--r--conf/machine/include/poodle-2.6.inc1
-rw-r--r--conf/machine/include/qemu.inc1
-rw-r--r--conf/machine/include/tune-strongarm.inc6
-rw-r--r--conf/machine/include/zaurus-2.6.inc21
-rw-r--r--conf/machine/include/zaurus-clamshell.inc2
-rw-r--r--conf/machine/ixp4xx.conf5
-rw-r--r--conf/machine/jornada6xx.conf2
-rw-r--r--conf/machine/jornada7xx.conf2
-rw-r--r--conf/machine/looxc550.conf2
-rw-r--r--conf/machine/magician.conf25
-rw-r--r--conf/machine/mainstone.conf3
-rw-r--r--conf/machine/mpc8313e-rdb.conf2
-rw-r--r--conf/machine/mx31moboard.conf33
-rwxr-xr-xconf/machine/netbook-pro.conf2
-rw-r--r--conf/machine/nokia770.conf4
-rw-r--r--conf/machine/nokia800.conf4
-rw-r--r--conf/machine/nslu2.conf5
-rw-r--r--conf/machine/nslu2be.conf2
-rw-r--r--conf/machine/nslu2le.conf2
-rw-r--r--conf/machine/qemux86.conf1
-rw-r--r--conf/machine/rx1950.conf2
-rw-r--r--conf/machine/rx3000.conf2
-rw-r--r--conf/machine/simpad.conf2
-rw-r--r--conf/machine/storcenter.conf26
-rwxr-xr-xcontrib/angstrom/build-feeds.sh77
-rwxr-xr-xcontrib/angstrom/build-release.sh51
-rw-r--r--contrib/deploy/.mtn2git_empty (renamed from contrib/distro-packages/debian/openembedded-essential-1.2/.mtn2git_empty)0
-rw-r--r--contrib/deploy/README2
-rw-r--r--contrib/deploy/nfs/.mtn2git_empty (renamed from contrib/distro-packages/debian/openembedded-essential-1.2/debian/.mtn2git_empty)0
-rw-r--r--contrib/deploy/nfs/exports.sample2
-rwxr-xr-xcontrib/deploy/nfs/oe-nfs-deploy-image51
-rw-r--r--contrib/distro-packages/debian/openembedded-essential-1.2/debian/changelog19
-rw-r--r--contrib/distro-packages/debian/openembedded-essential-1.2/debian/control17
-rw-r--r--contrib/distro-packages/debian/openembedded-essential-1.4/.mtn2git_empty (renamed from packages/atk/atk-1.2.0/.mtn2git_empty)0
-rw-r--r--contrib/distro-packages/debian/openembedded-essential-1.4/debian/.mtn2git_empty (renamed from packages/atk/atk-1.6.0/.mtn2git_empty)0
-rw-r--r--contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog34
-rw-r--r--contrib/distro-packages/debian/openembedded-essential-1.4/debian/compat (renamed from contrib/distro-packages/debian/openembedded-essential-1.2/debian/compat)0
-rw-r--r--contrib/distro-packages/debian/openembedded-essential-1.4/debian/control17
-rw-r--r--contrib/distro-packages/debian/openembedded-essential-1.4/debian/copyright (renamed from contrib/distro-packages/debian/openembedded-essential-1.2/debian/copyright)0
-rwxr-xr-xcontrib/distro-packages/debian/openembedded-essential-1.4/debian/rules (renamed from contrib/distro-packages/debian/openembedded-essential-1.2/debian/rules)0
-rw-r--r--contrib/distro-packages/debian/openembedded-essential-1.4/ubuntu.patch22
-rw-r--r--contrib/distro-packages/rpm/openembedded-essential-1.1.spec35
-rw-r--r--contrib/distro-packages/rpm/openembedded-essential-1.4.spec41
-rw-r--r--contrib/feed-browser/includes/config.inc1031
-rw-r--r--contrib/feed-browser/update.php10
-rwxr-xr-xcontrib/mtn2cl/mtn2cl.sh2
-rwxr-xr-xcontrib/mtn2git/mtn2git.py405
-rw-r--r--contrib/mtn2git/status.py11
-rwxr-xr-xcontrib/python/generate-manifest-2.5.py12
-rw-r--r--delete.txt27
-rw-r--r--files/device_table-minimal-add-md.txt32
-rw-r--r--packages/agg/agg_2.5.bb11
-rw-r--r--packages/alsa/alsa-state.bb6
-rw-r--r--packages/alsa/alsa-state/fic-gta02/.mtn2git_empty (renamed from packages/base-files/base-files/ghi270/.mtn2git_empty)0
-rw-r--r--packages/alsa/alsa-state/fic-gta02/asound.state875
-rw-r--r--packages/alsa/alsa-state/fic-gta02/stereoout.state875
-rw-r--r--packages/altboot/altboot.inc2
-rw-r--r--packages/altboot/altboot_1.0.8+1.0.9_pre1.bb2
-rw-r--r--packages/altboot/altboot_1.1.1+wip-SVNR69.bb76
-rw-r--r--packages/altboot/altboot_1.1.1+wip-SVNR78.bb76
-rw-r--r--packages/angstrom/angstrom-feed-configs.bb9
-rw-r--r--packages/angstrom/angstrom-gpe-task-base.bb3
-rw-r--r--packages/apache/apache_2.0.54.bb2
-rw-r--r--packages/apache2/apache2-native_2.2.3.bb4
-rw-r--r--packages/apex/apex-env_1.5.13.bb24
-rw-r--r--packages/apex/apex-env_1.5.8.bb6
-rw-r--r--packages/apex/apex-nslu2-1.5.13/.mtn2git_empty (renamed from packages/bluez/files/ghi270/.mtn2git_empty)0
-rw-r--r--packages/apex/apex-nslu2-1.5.13/defconfig165
-rw-r--r--packages/apex/apex-nslu2-1.5.8/.mtn2git_empty (renamed from packages/bluez/files/r1000/.mtn2git_empty)0
-rw-r--r--packages/apex/apex-nslu2-1.5.8/defconfig (renamed from packages/apex/files/defconfig)0
-rw-r--r--packages/apex/apex-nslu2-16mb-1.5.13/.mtn2git_empty (renamed from packages/dbus/dbus-1.0.1/.mtn2git_empty)0
-rw-r--r--packages/apex/apex-nslu2-16mb-1.5.13/defconfig165
-rw-r--r--packages/apex/apex-nslu2-16mb-1.5.8/.mtn2git_empty (renamed from packages/dbus/dbus-glib-native/.mtn2git_empty)0
-rw-r--r--packages/apex/apex-nslu2-16mb-1.5.8/defconfig (renamed from packages/apex/files/defconfig-16mb)0
-rw-r--r--packages/apex/apex-nslu2-16mb_1.5.13.bb63
-rw-r--r--packages/apex/apex-nslu2-16mb_1.5.8.bb8
-rw-r--r--packages/apex/apex-nslu2_1.5.13.bb63
-rw-r--r--packages/apex/files/find-apex-partition.patch34
-rw-r--r--packages/apmd/apm-wifi-suspendfix_0.1.bb10
-rw-r--r--packages/apmd/apmd_3.2.2.bb2
-rw-r--r--packages/apmd/files/.mtn2git_empty (renamed from packages/dbus/dbus/.mtn2git_empty)0
-rw-r--r--packages/apmd/files/90-wifi-off12
-rw-r--r--packages/apr/apr-util_1.2.7.bb9
-rw-r--r--packages/apr/apr_1.2.7.bb3
-rw-r--r--packages/asterisk/asterisk-1.4.10/init2
-rw-r--r--packages/asterisk/asterisk-1.4.11/init2
-rw-r--r--packages/asterisk/asterisk-1.4.17/.mtn2git_empty (renamed from packages/efl1/etk-native/.mtn2git_empty)0
-rw-r--r--packages/asterisk/asterisk-1.4.17/Makefile.patch20
-rw-r--r--packages/asterisk/asterisk-1.4.17/init77
-rw-r--r--packages/asterisk/asterisk-1.4.17/logrotate12
-rw-r--r--packages/asterisk/asterisk-1.4.17/sounds.xml.patch18
-rw-r--r--packages/asterisk/asterisk-1.4.17/volatiles7
-rw-r--r--packages/asterisk/asterisk-core-sounds-en-alaw_1.4.7.bb46
-rw-r--r--packages/asterisk/asterisk-core-sounds-en-g729_1.4.7.bb46
-rw-r--r--packages/asterisk/asterisk-core-sounds-en-gsm_1.4.7.bb48
-rw-r--r--packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.7.bb46
-rw-r--r--packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.6.bb37
-rw-r--r--packages/asterisk/asterisk-extra-sounds-en-g729_1.4.6.bb37
-rw-r--r--packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.6.bb37
-rw-r--r--packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.6.bb37
-rw-r--r--packages/asterisk/asterisk-moh-freeplay-alaw_0.0.0.bb22
-rw-r--r--packages/asterisk/asterisk-moh-freeplay-g729_0.0.0.bb20
-rw-r--r--packages/asterisk/asterisk-moh-freeplay-gsm_0.0.0.bb20
-rw-r--r--packages/asterisk/asterisk-moh-freeplay-ulaw_0.0.0.bb22
-rw-r--r--packages/asterisk/asterisk_1.4.17.bb171
-rw-r--r--packages/asterisk/files/init2
-rw-r--r--packages/atftp/atftp_0.7.bb4
-rw-r--r--packages/atk/atk-1.2.0/m4.patch2458
-rw-r--r--packages/atk/atk-1.6.0/gtk-doc.patch56
-rw-r--r--packages/atk/atk.inc9
-rw-r--r--packages/atk/atk_1.10.3.bb8
-rw-r--r--packages/atk/atk_1.18.0.bb8
-rw-r--r--packages/atk/atk_1.19.3.bb10
-rw-r--r--packages/atk/atk_1.2.0.bb35
-rw-r--r--packages/atk/atk_1.20.0.bb12
-rw-r--r--packages/atk/atk_1.6.0.bb35
-rw-r--r--packages/atk/atk_1.6.1.bb8
-rw-r--r--packages/atk/atk_1.9.0.bb8
-rw-r--r--packages/atmelwlandriver/atmelwlandriver_3.4.1.0.bb2
-rw-r--r--packages/audiofile/audiofile_0.2.6.bb16
-rw-r--r--packages/avahi/avahi-ui_0.6.21.bb2
-rw-r--r--packages/avahi/avahi.inc11
-rw-r--r--packages/avahi/avahi_0.6.21.bb1
-rw-r--r--packages/avahi/avahi_0.6.22.bb5
-rw-r--r--packages/avahi/files/avr32-ipv6-fix.patch42
-rw-r--r--packages/avetanabt/avetanabt_20060413.bb6
-rw-r--r--packages/avetanabt/avetanabt_cvs.bb6
-rw-r--r--packages/backsaver/.mtn2git_empty (renamed from packages/fakeroot/fakeroot-1.8.3/.mtn2git_empty)0
-rw-r--r--packages/backsaver/backsaver_1.0.bb14
-rw-r--r--packages/backsaver/files/.mtn2git_empty (renamed from packages/fakeroot/fakeroot-native-1.8.3/.mtn2git_empty)0
-rw-r--r--packages/backsaver/files/Makefile8
-rw-r--r--packages/backsaver/files/backsaver.c256
-rw-r--r--packages/base-files/base-files/fic-gta01/fstab2
-rw-r--r--packages/base-files/base-files/fic-gta02/fstab2
-rw-r--r--packages/base-files/base-files/openprotium/.mtn2git_empty (renamed from packages/fbvncserver/.mtn2git_empty)0
-rw-r--r--packages/base-files/base-files/openprotium/fstab11
-rw-r--r--packages/base-files/base-files_3.0.14.bb2
-rw-r--r--packages/beep/beep_1.2.2.bb2
-rw-r--r--packages/binutils/binutils-2.17/503-avr32-fix-got-offset-init.patch12
-rw-r--r--packages/binutils/binutils-cross-sdk_2.18.bb4
-rw-r--r--packages/binutils/binutils_2.17.bb3
-rw-r--r--packages/bluez/bluez-cups-backend_3.18.bb1
-rw-r--r--packages/bluez/bluez-cups-backend_3.19.bb1
-rw-r--r--packages/bluez/bluez-cups-backend_3.20.bb1
-rw-r--r--packages/bluez/bluez-cups-backend_3.22.bb1
-rw-r--r--packages/bluez/bluez-cups-backend_3.23.bb3
-rw-r--r--packages/bluez/bluez-cups-backend_3.24.bb27
-rw-r--r--packages/bluez/bluez-dtl1-workaround/.mtn2git_empty (renamed from packages/fbvncserver/files/.mtn2git_empty)0
-rw-r--r--packages/bluez/bluez-dtl1-workaround/02dtl1_cs.sh (renamed from packages/bluez/files/02dtl1_cs.sh)0
-rw-r--r--packages/bluez/bluez-gnome_0.15.bb14
-rw-r--r--packages/bluez/bluez-gstreamer-plugin_3.19.bb1
-rw-r--r--packages/bluez/bluez-gstreamer-plugin_3.20.bb1
-rw-r--r--packages/bluez/bluez-gstreamer-plugin_3.22.bb1
-rw-r--r--packages/bluez/bluez-gstreamer-plugin_3.23.bb3
-rw-r--r--packages/bluez/bluez-gstreamer-plugin_3.24.bb27
-rw-r--r--packages/bluez/bluez-libs_3.24.bb4
-rw-r--r--packages/bluez/bluez-utils-3.23/.mtn2git_empty (renamed from packages/glibc/eglibc-svn/.mtn2git_empty)0
-rw-r--r--packages/bluez/bluez-utils-3.23/hciattach-ti-bts.patch477
-rw-r--r--packages/bluez/bluez-utils-3.24/.mtn2git_empty (renamed from packages/gnuplot/gnuplot-4.2.0/.mtn2git_empty)0
-rw-r--r--packages/bluez/bluez-utils-3.24/hciattach-ti-bts.patch477
-rw-r--r--packages/bluez/bluez-utils-3.x/.mtn2git_empty (renamed from packages/gnutls/gnutls/.mtn2git_empty)0
-rw-r--r--packages/bluez/bluez-utils-3.x/hciattach-ti-bts.patch (renamed from packages/bluez/files/hciattach-ti-bts.patch)0
-rw-r--r--packages/bluez/bluez-utils-3.x/hcid.conf (renamed from packages/bluez/files/hcid.conf)0
-rw-r--r--packages/bluez/bluez-utils-alsa_3.18.bb1
-rw-r--r--packages/bluez/bluez-utils-alsa_3.19.bb1
-rw-r--r--packages/bluez/bluez-utils-alsa_3.20.bb1
-rw-r--r--packages/bluez/bluez-utils-alsa_3.22.bb1
-rw-r--r--packages/bluez/bluez-utils-alsa_3.23.bb2
-rw-r--r--packages/bluez/bluez-utils-alsa_3.24.bb25
-rw-r--r--packages/bluez/bluez-utils/hciattach-ti-bts.patch489
-rw-r--r--packages/bluez/bluez-utils3.inc11
-rw-r--r--packages/bluez/bluez-utils_3.23.bb1
-rw-r--r--packages/bluez/bluez-utils_3.24.bb30
-rw-r--r--packages/boost-asio/boost-asio_0.3.7.bb2
-rw-r--r--packages/bt950-cs/bt950-cs_0.1.bb2
-rw-r--r--packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty (renamed from packages/gtk+/gtk+-2.2.4/.mtn2git_empty)0
-rw-r--r--packages/busybox/busybox-1.2.1/avr32/defconfig643
-rw-r--r--packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch53
-rw-r--r--packages/busybox/busybox_1.00.bb2
-rw-r--r--packages/busybox/busybox_1.2.1.bb1
-rw-r--r--packages/busybox/files/install-should-unlink-dest-if-it-exists.patch53
-rw-r--r--packages/busybox/slingbox-1.3.1/trylink-bash.patch8
-rw-r--r--packages/busybox/slingbox_1.00.bb1
-rw-r--r--packages/busybox/slingbox_1.1.3.bb1
-rw-r--r--packages/busybox/slingbox_1.2.2.bb1
-rw-r--r--packages/busybox/slingbox_1.3.1.bb4
-rw-r--r--packages/cacao/cacao-cldc.inc64
-rw-r--r--packages/cacao/cacao-cldc_0.98.bb42
-rw-r--r--packages/cacao/cacao-initial_0.98.bb34
-rw-r--r--packages/cacao/cacao-native.inc27
-rw-r--r--packages/cacao/cacao-native_0.98+hg20071001.bb5
-rw-r--r--packages/cacao/cacao.inc51
-rw-r--r--packages/cacao/cacao_0.98+hg20071001.bb22
-rw-r--r--packages/cacao/cacaoh-cldc-native_0.98.bb25
-rw-r--r--packages/cacao/cacaoh-native.inc27
-rw-r--r--packages/cacao/cacaoh-native_0.98+hg20071001.bb5
-rw-r--r--packages/cacao/files/cacao-0.98+hg-arm-cacheflush-fix.patch18
-rw-r--r--packages/cacao/files/cacao-0.98+hg-arm-cacheflush-workaround.patch50
-rw-r--r--packages/cacao/files/cacao-0.98+hg-attachthread.patch89
-rw-r--r--packages/cacao/files/cacao-0.98+svn-classpath_var.patch56
-rw-r--r--packages/cacao/files/cacao-0.98+svn-libdir.diff30
-rw-r--r--packages/cacao/files/cacao-0.98-initial.patch45
-rw-r--r--packages/callweaver/.mtn2git_empty (renamed from packages/gtk+/gtk+-2.4.13/.mtn2git_empty)0
-rw-r--r--packages/callweaver/callweaver-perl.bb23
-rw-r--r--packages/callweaver/callweaver_1.2.0-rc5.bb141
-rw-r--r--packages/callweaver/files/.mtn2git_empty (renamed from packages/jamvm/jamvm-1.3.0/.mtn2git_empty)0
-rw-r--r--packages/callweaver/files/bootstrap.patch13
-rw-r--r--packages/callweaver/files/init75
-rw-r--r--packages/callweaver/files/logrotate13
-rw-r--r--packages/callweaver/files/volatiles6
-rw-r--r--packages/chumby/.mtn2git_empty (renamed from packages/jamvm/jamvm/.mtn2git_empty)0
-rw-r--r--packages/chumby/chumby-firmware_1.2.bb34
-rw-r--r--packages/classpath/classpath-gtk_0.93.bb9
-rw-r--r--packages/classpath/classpath-gtk_cvs.bb30
-rw-r--r--packages/classpath/classpath-initial_0.93.bb28
-rw-r--r--packages/classpath/classpath-minimal-native_0.93.bb23
-rw-r--r--packages/classpath/classpath-minimal_0.90.bb9
-rw-r--r--packages/classpath/classpath-minimal_0.95.bb40
-rw-r--r--packages/classpath/classpath-minimal_0.96.1.bb17
-rw-r--r--packages/classpath/classpath-native.inc32
-rw-r--r--packages/classpath/classpath-native_0.96.1.bb6
-rw-r--r--packages/classpath/classpath.inc60
-rw-r--r--packages/classpath/classpath_0.14.bb10
-rw-r--r--packages/classpath/classpath_0.15.bb10
-rw-r--r--packages/classpath/classpath_0.17.bb10
-rw-r--r--packages/classpath/classpath_0.18.bb10
-rw-r--r--packages/classpath/classpath_0.19.bb10
-rw-r--r--packages/classpath/classpath_0.20.bb10
-rw-r--r--packages/classpath/classpath_0.95.bb20
-rw-r--r--packages/classpath/classpath_0.96.1.bb20
-rw-r--r--packages/classpath/classpath_cvs.bb35
-rw-r--r--packages/classpath/files/gjar-prefix-patch.diff40
-rw-r--r--packages/cmake/cmake-native_2.2.3.bb20
-rw-r--r--packages/cmake/cmake-native_2.4.8.bb3
-rw-r--r--packages/cmake/cmake.inc18
-rw-r--r--packages/cmake/cmake_2.4.8.bb2
-rw-r--r--packages/conserver/conserver.inc2
-rw-r--r--packages/cups/cups.inc8
-rw-r--r--packages/cups/cups_1.2.10.bb2
-rw-r--r--packages/cups/cups_1.2.12.bb2
-rw-r--r--packages/curl/curl_7.16.4.bb5
-rw-r--r--packages/db/db3_3.2.9.bb2
-rw-r--r--packages/db/db_4.3.29.bb4
-rw-r--r--packages/dbench/dbench_3.04.bb2
-rw-r--r--packages/dbus-java/.mtn2git_empty (renamed from packages/libmutil/.mtn2git_empty)0
-rw-r--r--packages/dbus-java/dbus-java_2.3.bb98
-rw-r--r--packages/dbus/dbus-1.0.1/dbus-1.init96
-rw-r--r--packages/dbus/dbus-1.0.1/dbus-exploit-fix.patch21
-rw-r--r--packages/dbus/dbus-1.0.2/tmpdir.patch (renamed from packages/dbus/dbus/tmpdir.patch)0
-rw-r--r--packages/dbus/dbus-1.1.4/.mtn2git_empty (renamed from packages/libopieobex/files/.mtn2git_empty)0
-rw-r--r--packages/dbus/dbus-1.1.4/cross.patch (renamed from packages/dbus/dbus-1.0.1/cross.patch)0
-rw-r--r--packages/dbus/dbus-1.1.4/dbus-1.init110
-rw-r--r--packages/dbus/dbus-1.1.4/fix-install-daemon.patch (renamed from packages/dbus/dbus-1.0.1/fix-install-daemon.patch)0
-rw-r--r--packages/dbus/dbus-1.1.4/tmpdir.patch30
-rw-r--r--packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch32
-rw-r--r--packages/dbus/dbus-native_1.0.1.bb31
-rw-r--r--packages/dbus/dbus-native_1.0.2.bb28
-rw-r--r--packages/dbus/dbus-native_1.1.4.bb25
-rw-r--r--packages/dbus/dbus-python_0.71.bb10
-rw-r--r--packages/dbus/dbus.inc32
-rw-r--r--packages/dbus/dbus/0.23.1.diff308
-rw-r--r--packages/dbus/dbus/config.diff17
-rw-r--r--packages/dbus/dbus/cross.patch15
-rw-r--r--packages/dbus/dbus/dbus-1.init86
-rw-r--r--packages/dbus/dbus/dbus-monitor.patch150
-rw-r--r--packages/dbus/dbus/dbus-quiesce-startup-errors.patch23
-rw-r--r--packages/dbus/dbus/dbussend.patch399
-rw-r--r--packages/dbus/dbus/gettext.patch164
-rw-r--r--packages/dbus/dbus/no-bindings.patch12
-rw-r--r--packages/dbus/dbus/no-examples.patch8
-rw-r--r--packages/dbus/dbus/no-introspect.patch19
-rw-r--r--packages/dbus/dbus/no-static.patch22
-rw-r--r--packages/dbus/dbus/spawn-priority.diff17
-rw-r--r--packages/dbus/dbus/tools.diff12
-rw-r--r--packages/dbus/dbus_1.0.1.bb5
-rw-r--r--packages/dbus/dbus_1.0.2.bb10
-rw-r--r--packages/dbus/dbus_1.1.4.bb3
-rw-r--r--packages/devio/devio.inc1
-rw-r--r--packages/dhcp/dhcp_3.0.1.bb2
-rw-r--r--packages/directfb/directfb.inc76
-rw-r--r--packages/directfb/directfb_1.0.0.bb4
-rw-r--r--packages/directfb/directfb_1.1.0.bb76
-rw-r--r--packages/distcc/distcc_2.18.3.bb15
-rw-r--r--packages/distcc/files/distcc2
-rw-r--r--packages/distcc/files/distcc-avahi.patch12305
-rw-r--r--packages/distcc/files/no-man.patch11
-rw-r--r--packages/docbook-dsssl-stylesheets/.mtn2git_empty (renamed from packages/libvncserver/.mtn2git_empty)0
-rw-r--r--packages/docbook-dsssl-stylesheets/docbook-dsssl-stylesheets-native_1.79.bb35
-rw-r--r--packages/docbook-sgml-dtd/.mtn2git_empty (renamed from packages/libxml/files/.mtn2git_empty)0
-rw-r--r--packages/docbook-sgml-dtd/docbook-sgml-dtd-3.1-native.bb12
-rw-r--r--packages/docbook-sgml-dtd/docbook-sgml-dtd-4.1-native.bb12
-rw-r--r--packages/docbook-sgml-dtd/docbook-sgml-dtd-4.4-native.bb10
-rw-r--r--packages/docbook-sgml-dtd/docbook-sgml-dtd-native.inc31
-rw-r--r--packages/docbook-utils/docbook-utils-native_0.6.13.bb2
-rw-r--r--packages/docbook-utils/docbook-utils-native_0.6.14.bb41
-rw-r--r--packages/docbook-utils/docbook-utils_0.6.13.bb3
-rw-r--r--packages/docbook-utils/docbook-utils_0.6.14.bb10
-rw-r--r--packages/dpkg/dpkg.inc4
-rw-r--r--packages/dtnrg/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/.mtn2git_empty)0
-rw-r--r--packages/dtnrg/dtn_2.5.0.bb67
-rw-r--r--packages/e17/e-utils_cvs.bb2
-rw-r--r--packages/e17/e-wm_0.16.999.038.bb48
-rw-r--r--packages/e17/e-wm_0.16.999.041.bb48
-rw-r--r--packages/e17/e-wm_cvs.bb61
-rw-r--r--packages/e17/edje-editor_cvs.bb2
-rw-r--r--packages/e17/edje-viewer/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/asus620/.mtn2git_empty)0
-rw-r--r--packages/e17/edje-viewer/no-minimal-size.patch27
-rw-r--r--packages/e17/edje-viewer_cvs.bb7
-rw-r--r--packages/e17/enna_cvs.bb15
-rw-r--r--packages/e17/enna_svn.bb16
-rw-r--r--packages/e17/entice_cvs.bb2
-rw-r--r--packages/e17/entrance_0.9.0.010.bb2
-rw-r--r--packages/e17/examine_cvs.bb2
-rw-r--r--packages/e17/exhibit_cvs.bb2
-rw-r--r--packages/e17/expedite_cvs.bb20
-rw-r--r--packages/e17/rage_0.2.0.005.bb11
-rw-r--r--packages/e17/rage_cvs.bb13
-rw-r--r--packages/e2fsprogs/e2fsprogs_1.38.bb6
-rw-r--r--packages/ecj/ecj-bootstrap-native_3.3.bb38
-rw-r--r--packages/ecj/ecj-initial_3.3.bb84
-rw-r--r--packages/ecj/ecj-native_3.2.2.bb17
-rw-r--r--packages/ecj/ecj-native_3.3.bb17
-rwxr-xr-xpackages/ecj/files/ecj.in1
-rw-r--r--packages/ecj/files/ecj.sh3
-rw-r--r--packages/efl1/ecore-native_cvs.bb12
-rw-r--r--packages/efl1/ecore.inc20
-rw-r--r--packages/efl1/ecore_cvs.bb17
-rw-r--r--packages/efl1/edb_cvs.bb7
-rw-r--r--packages/efl1/edbus_cvs.bb13
-rw-r--r--packages/efl1/edje-native_cvs.bb1
-rw-r--r--packages/efl1/edje_cvs.bb11
-rw-r--r--packages/efl1/eet_cvs.bb9
-rw-r--r--packages/efl1/efreet_cvs.bb7
-rw-r--r--packages/efl1/embryo_cvs.bb10
-rw-r--r--packages/efl1/emotion_cvs.bb6
-rw-r--r--packages/efl1/epdf/fix-plugin-path-check.patch24
-rw-r--r--packages/efl1/epdf_cvs.bb7
-rw-r--r--packages/efl1/epsilon_cvs.bb4
-rw-r--r--packages/efl1/esmart_cvs.bb4
-rw-r--r--packages/efl1/etk_cvs.bb3
-rw-r--r--packages/efl1/evas.inc30
-rw-r--r--packages/efl1/evas_cvs.bb23
-rw-r--r--packages/efl1/ewl_cvs.bb13
-rw-r--r--packages/efl1/imlib2_1.4.0.002.bb26
-rw-r--r--packages/efl1/imlib2_1.4.1.000.bb26
-rw-r--r--packages/elfkickers/elfkickers_2.0a.bb2
-rw-r--r--packages/elvis/elvis-tiny_2.2.0.bb1
-rw-r--r--packages/elvis/elvis_2.2.0.bb2
-rw-r--r--packages/emacs/emacs-x11_20060801.bb4
-rw-r--r--packages/emacs/emacs-x11_cvs.bb3
-rw-r--r--packages/emacs/emacs_20060801.bb2
-rw-r--r--packages/emacs/emacs_cvs.bb12
-rw-r--r--packages/enca/enca_1.9.bb6
-rw-r--r--packages/espeak/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/asus730/.mtn2git_empty)0
-rw-r--r--packages/espeak/espeak_1.30.bb52
-rw-r--r--packages/ez-ipupdate/ez-ipupdate_3.0.10.bb2
-rw-r--r--packages/faac/faac_1.24.bb2
-rw-r--r--packages/fakeroot/fakeroot-native-1.8.3/configure-libtool.patch18
-rw-r--r--packages/fakeroot/fakeroot-native_1.8.3.bb20
-rw-r--r--packages/fakeroot/fakeroot-native_1.9.1.bb21
-rw-r--r--packages/fakeroot/fakeroot_1.8.3.bb17
-rw-r--r--packages/fakeroot/fakeroot_1.9.1.bb18
-rw-r--r--packages/fakeroot/files/configure-libtool.patch (renamed from packages/fakeroot/fakeroot-1.8.3/configure-libtool.patch)0
-rw-r--r--packages/fastjar/fastjar-native_0.95.bb7
-rw-r--r--packages/fbreader/fbreader_0.7.3d.bb2
-rw-r--r--packages/fbreader/fbreader_0.7.4q.bb2
-rw-r--r--packages/fbreader/fbreader_0.8.2a.bb2
-rw-r--r--packages/fbvncserver/fbvncserver_0.9.4.bb55
-rw-r--r--packages/flite/flite-1.3/flite-1.3-Makefile.patch405
-rw-r--r--packages/flite/flite-1.3/flite-1.3-configure-with-audio.patch12
-rw-r--r--packages/flite/flite-1.3/flite-1.3-fix-read-only-assignments.patch15
-rw-r--r--packages/flite/flite-alsa-1.2/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/aximx50/.mtn2git_empty)0
-rw-r--r--packages/flite/flite-alsa-1.2/flite-1.2-alsa_support-1.2.diff (renamed from packages/flite/flite-1.2/flite-1.2-alsa_support-1.2.diff)0
-rw-r--r--packages/flite/flite-alsa-1.2/flite-alsa-1.2-configure-with-audio.patch12
-rw-r--r--packages/flite/flite-alsa-1.3/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/eteng500/.mtn2git_empty)0
-rw-r--r--packages/flite/flite-alsa-1.3/flite-1.3-alsa_support-1.2.diff (renamed from packages/flite/flite-1.3/flite-1.3-alsa_support-1.2.diff)0
-rw-r--r--packages/flite/flite-alsa-1.3/flite-alsa-1.3-configure-with-audio.patch12
-rw-r--r--packages/flite/flite-alsa_1.2.bb10
-rw-r--r--packages/flite/flite-alsa_1.3.bb11
-rw-r--r--packages/flite/flite.inc9
-rw-r--r--packages/flite/flite_1.2.bb9
-rw-r--r--packages/flite/flite_1.3.bb10
-rw-r--r--packages/flumotion/flumotion_0.4.1.bb16
-rw-r--r--packages/fmtools/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/ghi270/.mtn2git_empty)0
-rw-r--r--packages/fmtools/files/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/h1910/.mtn2git_empty)0
-rw-r--r--packages/fmtools/files/makefile.patch11
-rw-r--r--packages/fmtools/fmtools_1.0.2.bb15
-rw-r--r--packages/font-update-common/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/h2200/.mtn2git_empty)0
-rw-r--r--packages/font-update-common/files/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/h3600/.mtn2git_empty)0
-rw-r--r--packages/font-update-common/files/update-fonts4
-rw-r--r--packages/font-update-common/font-update-common_0.1.bb13
-rw-r--r--packages/fontconfig/files/01fc-cache4
-rw-r--r--packages/fontconfig/fontconfig.inc42
-rw-r--r--packages/fontconfig/fontconfig_2.2.95.bb41
-rw-r--r--packages/fontconfig/fontconfig_2.3.91.bb41
-rw-r--r--packages/fontconfig/fontconfig_2.3.95.bb39
-rw-r--r--packages/fontconfig/fontconfig_2.4.1.bb38
-rw-r--r--packages/foonas-init/foonas-init_0.10.bb1
-rw-r--r--packages/freenote/freenote_1.12.0.bb2
-rw-r--r--packages/freesmartphone/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/h3800/.mtn2git_empty)0
-rw-r--r--packages/freesmartphone/gsm0710muxd_svn.bb20
-rw-r--r--packages/freesmartphone/python-fso-pyproto_svn.bb13
-rw-r--r--packages/fstests/fstests.bb4
-rwxr-xr-xpackages/ftpd-topfield/ftpd-topfield_0.7.4.bb1
-rw-r--r--packages/gaim/pidgin.inc2
-rw-r--r--packages/gallery/gallery_1.5.5.bb2
-rw-r--r--packages/gammu/gammu_1.17.0.bb (renamed from packages/gammu/gammu_1.13.0.bb)0
-rw-r--r--packages/gcc/files/gcc4-mtune-compat.patch14
-rw-r--r--packages/gcc/gcc-4.2.2/fortran-cross-compile-hack.patch30
-rw-r--r--packages/gcc/gcc-4.2.2/fortran-static-linking.patch48
-rw-r--r--packages/gcc/gcc-4.2.2/gcc-4.0.2-e300c2c3.patch311
-rw-r--r--packages/gcc/gcc-cross-kernel-3.3.4_3.3.4.bb2
-rw-r--r--packages/gcc/gcc-cross-sdk_3.4.4.bb2
-rw-r--r--packages/gcc/gcc-cross-sdk_4.2.2.bb21
-rw-r--r--packages/gcc/gcc-cross_3.4.4.bb2
-rw-r--r--packages/gcc/gcc-cross_4.1.2.bb2
-rw-r--r--packages/gcc/gcc-cross_4.2.2.bb2
-rw-r--r--packages/gcc/gcc-native.inc28
-rw-r--r--packages/gcc/gcc-native_3.4.4.bb3
-rw-r--r--packages/gcc/gcc-package-cross.inc10
-rw-r--r--packages/gcc/gcc-package.inc6
-rw-r--r--packages/gcc/gcc_3.4.4.bb5
-rw-r--r--packages/gcc/gcc_4.1.2.bb19
-rw-r--r--packages/gcc/gcc_4.2.1.bb28
-rw-r--r--packages/gcc/gcc_4.2.2.bb12
-rw-r--r--packages/gettext/gettext_0.14.1.bb16
-rw-r--r--packages/gimp/babl_svn.bb2
-rw-r--r--packages/git/files/git-gui-install-mode-arg-spaces.patch32
-rw-r--r--packages/git/git.inc4
-rw-r--r--packages/glibc/eglibc-package.bbclass12
-rw-r--r--packages/glibc/eglibc_svn.bb4
-rw-r--r--packages/glibc/files/glibc-2.5-local-dynamic-resolvconf.patch44
-rw-r--r--[-rwxr-xr-x]packages/glibc/files/glibc-2.5-soft-fp-separate-strong-alias.patch0
-rw-r--r--packages/glibc/glibc-2.2.5/glibc-2.2.5-allow-gcc-4.x-configure.patch21
-rw-r--r--packages/glibc/glibc-2.2.5/glibc-2.3.2-allow-solaris.patch41
-rw-r--r--packages/glibc/glibc-package.bbclass10
-rw-r--r--packages/glibc/glibc_2.2.5.bb7
-rw-r--r--packages/glibc/glibc_2.5.bb83
-rw-r--r--packages/glibc/glibc_2.6.1.bb73
-rw-r--r--packages/glibmm/glibmm.inc24
-rw-r--r--packages/glibmm/glibmm_2.12.10.bb24
-rw-r--r--packages/glibmm/glibmm_2.14.2.bb3
-rw-r--r--packages/gnome-mplayer/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/h3900/.mtn2git_empty)0
-rw-r--r--packages/gnome-mplayer/files/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/h4000/.mtn2git_empty)0
-rw-r--r--packages/gnome-mplayer/files/1.patch37
-rw-r--r--packages/gnome-mplayer/files/ac-gthread.patch12
-rw-r--r--packages/gnome-mplayer/files/non-utf8-id3-fallback.patch22
-rw-r--r--packages/gnome-mplayer/files/uchar-for-utf8-check.patch22
-rw-r--r--packages/gnome-mplayer/gnome-mplayer_0.5.3.bb14
-rw-r--r--packages/gnome-mplayer/gnome-mplayer_cvs.bb18
-rw-r--r--packages/gnome/gconf-dbus_svn.bb3
-rw-r--r--packages/gnome/kanjipad_svn.bb19
-rw-r--r--packages/gnome/libart-lgpl.inc30
-rw-r--r--packages/gnome/libart-lgpl/armeb/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/h5000/.mtn2git_empty)0
-rw-r--r--packages/gnome/libart-lgpl/armeb/art_config.h10
-rw-r--r--packages/gnome/libart-lgpl_2.3.16.bb31
-rw-r--r--packages/gnome/libart-lgpl_2.3.19.bb31
-rw-r--r--packages/gnu-config/gnu-config_20050701.bb1
-rw-r--r--packages/gnuplot/files/subdirs.patch13
-rw-r--r--packages/gnuplot/files/term.patch14
-rw-r--r--packages/gnuplot/gnuplot-4.0.0/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/htcalpine/.mtn2git_empty)0
-rw-r--r--packages/gnuplot/gnuplot-4.0.0/debian-separate-x11-package.patch (renamed from packages/gnuplot/files/debian-separate-x11-package.patch)0
-rw-r--r--packages/gnuplot/gnuplot-4.0.0/matrix.patch (renamed from packages/gnuplot/files/matrix.patch)0
-rw-r--r--packages/gnuplot/gnuplot-4.0.0/subdirs.patch16
-rw-r--r--packages/gnuplot/gnuplot-4.0.0/term.patch20
-rw-r--r--packages/gnuplot/gnuplot-4.2.0/subdirs.patch11
-rw-r--r--packages/gnuplot/gnuplot-4.2.0/term.patch20
-rw-r--r--packages/gnuplot/gnuplot_4.2.0.bb10
-rw-r--r--packages/gnuplot/gnuplot_4.2.2.bb10
-rw-r--r--packages/gnuplot/gnuplot_cvs.bb17
-rw-r--r--packages/gnutls/gnutls-1.6.3/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/htcapache/.mtn2git_empty)0
-rw-r--r--packages/gnutls/gnutls-1.6.3/configure_madness.patch (renamed from packages/gnutls/gnutls/configure_madness.patch)0
-rw-r--r--packages/gnutls/gnutls-1.6.3/gnutls-openssl.patch (renamed from packages/gnutls/gnutls/gnutls-openssl.patch)0
-rw-r--r--packages/gnutls/gnutls-1.6.3/gnutls-texinfo-euro.patch (renamed from packages/gnutls/gnutls/gnutls-texinfo-euro.patch)0
-rw-r--r--packages/gnutls/gnutls.inc5
-rw-r--r--packages/gnutls/gnutls_1.6.3.bb7
-rw-r--r--packages/gpe-conf/gpe-conf_svn.bb2
-rw-r--r--packages/gpe-contacts/files/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/htcbeetles/.mtn2git_empty)0
-rw-r--r--packages/gpe-contacts/files/handle-import-categories.patch39
-rw-r--r--packages/gpe-contacts/gpe-contacts_svn.bb5
-rw-r--r--packages/gpe-filemanager/gpe-filemanager_0.31.bb13
-rw-r--r--packages/gpe-login/files/c-locale.patch11
-rw-r--r--packages/gpe-login/gpe-login_0.90.bb3
-rw-r--r--packages/gpe-mini-browser/files/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/htcblueangel/.mtn2git_empty)0
-rw-r--r--packages/gpe-mini-browser/files/mini-browser-desktop-fix.patch16
-rw-r--r--packages/gpe-mini-browser/gpe-mini-browser_0.21.bb4
-rw-r--r--packages/gpe-nmf/gpe-nmf.inc2
-rw-r--r--packages/gpe-nmf/gpe-nmf_0.22.bb2
-rw-r--r--packages/gpe-scap/gpe-scap-1.3/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/htchimalaya/.mtn2git_empty)0
-rw-r--r--packages/gpe-scap/gpe-scap-1.3/allow-glade-2.4.0.patch26
-rw-r--r--packages/gpe-scap/gpe-scap_1.3.bb2
-rw-r--r--packages/gpe-session-scripts/files/angstrom/matchbox-session8
-rw-r--r--packages/gpe-session-scripts/files/matchbox-session8
-rw-r--r--packages/gpe-session-scripts/gpe-session-scripts_0.67.bb4
-rw-r--r--packages/gpephone/addressbook_svn.bb2
-rw-r--r--packages/gpephone/almmgrd_svn.bb15
-rw-r--r--packages/gpephone/calendar2/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/htcsable/.mtn2git_empty)0
-rw-r--r--packages/gpephone/calendar2/disable-broken-tests.patch9
-rw-r--r--packages/gpephone/calendar2_svn.bb17
-rw-r--r--packages/gpephone/contact_svn.bb2
-rw-r--r--packages/gpephone/dialer_svn.bb20
-rw-r--r--packages/gpephone/firewall_svn.bb2
-rw-r--r--packages/gpephone/gpe-applauncher_0.11.bb4
-rw-r--r--packages/gpephone/gpe-applauncher_svn.bb6
-rw-r--r--packages/gpephone/libabenabler2_svn.bb6
-rw-r--r--packages/gpephone/libabenabler_svn.bb2
-rw-r--r--packages/gpephone/libalmmgr_svn.bb17
-rw-r--r--packages/gpephone/libcalenabler2_svn.bb11
-rw-r--r--packages/gpephone/libgemwidget_svn.bb19
-rw-r--r--packages/gpephone/libgpephone_svn.bb16
-rw-r--r--packages/gpephone/libiac2/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/htcuniversal/.mtn2git_empty)0
-rw-r--r--packages/gpephone/libiac2/disable-tests.patch25
-rw-r--r--packages/gpephone/libiac2_svn.bb20
-rw-r--r--packages/gpephone/libiac_svn.bb17
-rw-r--r--packages/gpephone/libim2/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/htcwallaby/.mtn2git_empty)0
-rw-r--r--packages/gpephone/libim2/disable-tests.patch11
-rw-r--r--packages/gpephone/libim2_svn.bb22
-rw-r--r--packages/gpephone/liblipsevent2_svn.bb17
-rw-r--r--packages/gpephone/libmsgenabler2_svn.bb23
-rw-r--r--packages/gpephone/libmsgenabler_1.0.bb4
-rw-r--r--packages/gpephone/libmsgenabler_svn.bb21
-rw-r--r--packages/gpephone/librecord2_svn.bb2
-rw-r--r--packages/gpephone/libsettings_svn.bb2
-rw-r--r--packages/gpephone/libtapi_svn.bb17
-rw-r--r--packages/gpephone/libvoc_svn.bb17
-rw-r--r--packages/gpephone/machined_svn.bb2
-rw-r--r--packages/gpephone/ptim-engine_svn.bb2
-rw-r--r--packages/gpephone/ptim-headers_svn.bb2
-rw-r--r--packages/gpephone/ptim-helper_svn.bb2
-rw-r--r--packages/gpephone/ptim-manager_svn.bb2
-rw-r--r--packages/gpephone/quickdial_svn.bb5
-rw-r--r--packages/gpephone/useen_svn.bb2
-rw-r--r--packages/gpsd/files/fic-gta01/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/hx4700/.mtn2git_empty)0
-rw-r--r--packages/gpsd/files/fic-gta01/gps-hardware41
-rw-r--r--packages/gpsd/files/fic-gta01/gpsd-default3
-rw-r--r--packages/gpsd/files/fic-gta01/restart_gllin.sh6
-rw-r--r--packages/gpsd/files/gps-hardware2
-rwxr-xr-xpackages/gpsd/files/gpsd11
-rw-r--r--packages/gpsd/gpsd.inc40
-rw-r--r--packages/gpsd/gpsd_2.28.bb2
-rw-r--r--packages/gpsd/gpsd_2.34.bb2
-rw-r--r--packages/gpsd/gpsd_2.36.bb3
-rw-r--r--packages/gpsdrive/gpsdrive-pda/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/looxc550/.mtn2git_empty)0
-rw-r--r--packages/gpsdrive/gpsdrive-pda/makefile.patch16
-rw-r--r--packages/gpsdrive/gpsdrive-pda_2.10pre2.bb34
-rw-r--r--packages/gsm/files/default14
-rw-r--r--packages/gsm/gsmd.inc2
-rw-r--r--packages/gstreamer/gst-meta-base_0.10.bb2
-rw-r--r--packages/gstreamer/gst-plugin-pulse_0.9.4.bb2
-rw-r--r--packages/gtk+/gtk+-2.10.14/small-gtkfilechooser.patch222
-rw-r--r--packages/gtk+/gtk+-2.12.3/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/magician/.mtn2git_empty)0
-rw-r--r--packages/gtk+/gtk+-2.12.3/cellrenderer-cairo.patch32
-rw-r--r--packages/gtk+/gtk+-2.12.3/combo-arrow-size.patch67
-rw-r--r--packages/gtk+/gtk+-2.12.3/disable-print.patch26
-rw-r--r--packages/gtk+/gtk+-2.12.3/entry-cairo.patch103
-rw-r--r--packages/gtk+/gtk+-2.12.3/gtklabel-resize-patch (renamed from packages/gtk+/gtk+-2.4.13/gtklabel-resize-patch)0
-rw-r--r--packages/gtk+/gtk+-2.12.3/hardcoded_libtool.patch29
-rw-r--r--packages/gtk+/gtk+-2.12.3/menu-deactivate.patch51
-rw-r--r--packages/gtk+/gtk+-2.12.3/no-demos.patch10
-rw-r--r--packages/gtk+/gtk+-2.12.3/pangoxft2.10.6.diff2456
-rw-r--r--packages/gtk+/gtk+-2.12.3/range-no-redraw.patch127
-rw-r--r--packages/gtk+/gtk+-2.12.3/run-iconcache.patch19
-rw-r--r--packages/gtk+/gtk+-2.12.3/scrolled-placement.patch22
-rw-r--r--packages/gtk+/gtk+-2.12.3/toggle-font.diff100
-rw-r--r--packages/gtk+/gtk+-2.12.3/xsettings.patch (renamed from packages/gtk+/gtk+-2.4.13/xsettings.patch)0
-rw-r--r--packages/gtk+/gtk+-2.2.4/automake-lossage.patch446
-rw-r--r--packages/gtk+/gtk+-2.2.4/configure-lossage.patch12
-rw-r--r--packages/gtk+/gtk+-2.2.4/glib-2.0.m4212
-rw-r--r--packages/gtk+/gtk+-2.2.4/glib-gettext.m4380
-rw-r--r--packages/gtk+/gtk+-2.2.4/libtool-lossage.patch20
-rw-r--r--packages/gtk+/gtk+-2.2.4/no-demos.patch15
-rw-r--r--packages/gtk+/gtk+-2.2.4/no-xwc.patch148
-rw-r--r--packages/gtk+/gtk+-2.4.13/automake-lossage.patch24
-rw-r--r--packages/gtk+/gtk+-2.4.13/disable-tooltips.patch11
-rw-r--r--packages/gtk+/gtk+-2.4.13/gtk+-handhelds.patch236
-rw-r--r--packages/gtk+/gtk+-2.4.13/gtk-doc.m453
-rw-r--r--packages/gtk+/gtk+-2.4.13/hardcoded_libtool.patch29
-rw-r--r--packages/gtk+/gtk+-2.4.13/menu-deactivate.patch50
-rw-r--r--packages/gtk+/gtk+-2.4.13/no-demos.patch10
-rw-r--r--packages/gtk+/gtk+-2.4.13/no-xwc.patch148
-rw-r--r--packages/gtk+/gtk+-2.4.13/scroll-timings.patch15
-rw-r--r--packages/gtk+/gtk+-2.4.13/single-click.patch48
-rw-r--r--packages/gtk+/gtk+-2.4.13/small-gtkfilesel.patch267
-rw-r--r--packages/gtk+/gtk+-2.4.13/spinbutton.patch128
-rw-r--r--packages/gtk+/gtk+.inc2
-rw-r--r--packages/gtk+/gtk+_2.10.14.bb3
-rw-r--r--packages/gtk+/gtk+_2.12.3.bb48
-rw-r--r--packages/gtk+/gtk+_2.2.4.bb77
-rw-r--r--packages/gtk+/gtk+_2.4.13.bb78
-rw-r--r--packages/gtk-engines/gtk-clearlooks-engine_0.6.2.bb2
-rw-r--r--packages/gtk-engines/gtk-industrial-engine_0.2.46.0.bb2
-rw-r--r--packages/gtk-engines/gtk-sato-engine_0.1.bb2
-rw-r--r--packages/gtk-engines/gtk-sato-engine_svn.bb2
-rw-r--r--packages/gtk-sharp/gtk-sharp_2.10.2.bb6
-rw-r--r--packages/gtk-webcore/midori_0.0.13.bb11
-rw-r--r--packages/gtk-webcore/midori_0.0.15.bb11
-rw-r--r--packages/gtkmm/gtkmm.inc6
-rw-r--r--packages/gtkmm/gtkmm_2.10.11.bb (renamed from packages/gtkmm/gtkmm_2.10.10.bb)0
-rw-r--r--packages/guile/guile-native_1.6.4.bb1
-rw-r--r--packages/guile/guile-native_1.8.2.bb1
-rw-r--r--packages/hal/hal_0.5.9.bb16
-rw-r--r--packages/helloworld/helloworld_1.0.0.bb2
-rw-r--r--packages/hostap/hostap-modules.inc5
-rw-r--r--packages/hostap/hostap-modules_0.3.10.bb2
-rw-r--r--packages/hostap/hostap-modules_0.3.7.bb2
-rw-r--r--packages/hostap/hostap-modules_0.3.9.bb2
-rw-r--r--packages/hostap/hostap-modules_0.4.4.bb2
-rw-r--r--packages/hostap/hostap-modules_0.4.7.bb2
-rw-r--r--packages/hwdata/hwdata_0.191.bb6
-rw-r--r--packages/imagemagick/imagemagick-native_6.3.5-10.bb3
-rw-r--r--packages/images/base-image.bb84
-rw-r--r--packages/images/initramfs-minimal-image.bb3
-rw-r--r--packages/images/minimal-gpe-image.bb25
-rw-r--r--packages/images/minimal-openmoko-image.bb21
-rw-r--r--packages/images/nas-server-image.bb53
-rw-r--r--packages/images/nslu2-base-image.bb14
-rw-r--r--packages/images/nslu2-minimal-image.bb14
-rw-r--r--packages/images/nylon-image-base.bb2
-rw-r--r--packages/images/openmoko-python-devel-image.bb6
-rw-r--r--packages/images/openprotium-image.bb134
-rw-r--r--packages/images/opie-image-16mb.bb45
-rw-r--r--packages/images/opie-image.bb47
-rw-r--r--packages/images/qtopia-core-console-image.bb19
-rw-r--r--packages/images/qtopia-core-gui-image.bb20
-rw-r--r--packages/images/unslung-image.bb14
-rw-r--r--packages/images/x11-sato-image.bb29
-rw-r--r--packages/initrdscripts/devimage_0.1.bb3
-rw-r--r--packages/initrdscripts/files/30-bootmenu.sh4
-rw-r--r--packages/initrdscripts/files/80-nfsboot.sh2
-rw-r--r--packages/initrdscripts/initramfs-module-bootmenu_1.0.bb6
-rw-r--r--packages/initrdscripts/initramfs-module-nfs_1.0.bb4
-rw-r--r--packages/initscripts/initscripts-1.0/functions4
-rwxr-xr-xpackages/initscripts/initscripts-1.0/openprotium/checkroot.sh2
-rw-r--r--packages/initscripts/initscripts-1.0/openprotium/mountall.sh27
-rwxr-xr-xpackages/initscripts/initscripts-1.0/openprotium/umountfs27
-rw-r--r--packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh11
-rw-r--r--packages/initscripts/initscripts-openprotium_1.0.bb18
-rw-r--r--packages/initscripts/initscripts-slugos_1.0.bb2
-rw-r--r--packages/initscripts/initscripts_1.0.bb2
-rw-r--r--packages/inputpipe/inputpipe_svn.bb2
-rw-r--r--packages/ipaq-sleep/files/unbreak.patch11
-rw-r--r--packages/ipaq-sleep/ipaq-sleep_0.9.bb4
-rw-r--r--packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb2
-rw-r--r--packages/ipkg/ipkg-native_0.99.163.bb3
-rw-r--r--packages/ixp4xx/ixp4xx-csr_2.0.bb1
-rw-r--r--packages/ixp4xx/ixp4xx-csr_2.1.1.bb1
-rw-r--r--packages/ixp4xx/ixp4xx-csr_2.1.bb1
-rw-r--r--packages/ixp4xx/ixp4xx-npe-2.4/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/rx1950/.mtn2git_empty)0
-rw-r--r--packages/ixp4xx/ixp4xx-npe-2.4/Intel40
-rw-r--r--packages/ixp4xx/ixp4xx-npe_2.4.bb9
-rw-r--r--packages/jamvm/files/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/rx3000/.mtn2git_empty)0
-rw-r--r--packages/jamvm/files/jamvm-1.3.1-size-defaults.patch (renamed from packages/jamvm/jamvm/jamvm-1.3.1-size-defaults.patch)0
-rw-r--r--packages/jamvm/files/jamvm_1.5.0-initial.patch82
-rw-r--r--packages/jamvm/jamvm-initial_1.5.0.bb36
-rw-r--r--packages/jamvm/jamvm.inc22
-rw-r--r--packages/jamvm/jamvm/sh3sh4-support.patch11
-rw-r--r--packages/jamvm/jamvm_1.4.5.bb24
-rw-r--r--packages/jamvm/jamvm_1.5.0.bb5
-rw-r--r--packages/jikes/jikes-initial.bb23
-rw-r--r--packages/jikes/jikes-native_1.21.bb1
-rw-r--r--packages/juce/juce_1.29.bb2
-rw-r--r--packages/kaffe/kaffe-gtk_1.1.5.bb2
-rw-r--r--packages/kaffe/kaffe-gtk_cvs.bb2
-rw-r--r--packages/kaffe/kaffe.inc10
-rw-r--r--packages/kanjipad/kanjipad_svn.bb12
-rw-r--r--packages/kdepimpi/kdepimpi-base.inc4
-rw-r--r--packages/kdepimpi/pwmpi.inc1
-rw-r--r--packages/kexec/kexec-tools-1.101/kexec-arm-atags.patch294
-rw-r--r--packages/kexec/kexec-tools_1.101.bb9
-rw-r--r--packages/keyring/keyring_0.6.8.bb2
-rw-r--r--packages/kismet/kismet_2007-10-R1.bb4
-rw-r--r--packages/klibc/klibc.inc2
-rw-r--r--packages/knights/knights_1.14.bb2
-rw-r--r--packages/kxml2/files/.mtn2git_empty (renamed from packages/linux/linux-rp-2.6.16/.mtn2git_empty)0
-rw-r--r--packages/kxml2/files/makefile.patch421
-rw-r--r--packages/kxml2/kxml2_2.3.0.bb45
-rw-r--r--packages/liba52/liba52_0.7.4.bb4
-rw-r--r--packages/libao/libao-alsa_0.8.6.bb2
-rw-r--r--packages/libao/libao-plugin-alsa_0.8.6.bb2
-rw-r--r--packages/libdbi/libdbi-drivers_0.7.1.bb2
-rw-r--r--packages/libdotconf/.mtn2git_empty (renamed from packages/linux/linux-rp-2.6.17/.mtn2git_empty)0
-rw-r--r--packages/libdotconf/files/.mtn2git_empty (renamed from packages/linux/linux-rp-2.6.19+git/.mtn2git_empty)0
-rw-r--r--packages/libdotconf/files/srcMakefile.am_00.patch9
-rw-r--r--packages/libdotconf/libdotconf_1.0.13.bb25
-rw-r--r--packages/libffi/libffi_2.0+gcc3.4.1.bb2
-rw-r--r--packages/libgcrypt/libgcrypt_1.4.0.bb22
-rw-r--r--packages/libgpepimc/files/.mtn2git_empty (renamed from packages/linux/linux-rp-2.6.20/.mtn2git_empty)0
-rw-r--r--packages/libgpepimc/files/get-category-by-name.patch45
-rw-r--r--packages/libgpepimc/libgpepimc_0.9.bb3
-rw-r--r--packages/libmad/files/.mtn2git_empty (renamed from packages/linux/linux-rp-2.6.21/.mtn2git_empty)0
-rw-r--r--packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch2922
-rw-r--r--packages/libmad/libmad_0.15.1b.bb4
-rw-r--r--packages/libmatthew/.mtn2git_empty (renamed from packages/linux/linux-rp-2.6.22/.mtn2git_empty)0
-rw-r--r--packages/libmatthew/libmatthew_0.5.bb54
-rw-r--r--packages/libmimedir/libmimedir_0.3.1.bb7
-rw-r--r--packages/libnet/libnet_1.1.2.1.bb2
-rw-r--r--packages/libogg/libogg_1.1.3.bb17
-rw-r--r--packages/libogg/libtheora_0.9+1.0alpha7.bb2
-rw-r--r--packages/libpng/libpng_1.2.12.bb2
-rw-r--r--packages/libpng/libpng_1.2.19.bb2
-rw-r--r--packages/libpng/libpng_1.2.20.bb2
-rw-r--r--packages/libpng/libpng_1.2.8.bb2
-rw-r--r--packages/libqanava/libqanava_0.0.7.bb6
-rw-r--r--packages/librcf/librcf_0.4.bb2
-rw-r--r--packages/libsdl/libsdl-mixer_1.2.6.bb6
-rw-r--r--packages/libshout/.mtn2git_empty (renamed from packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/.mtn2git_empty)0
-rw-r--r--packages/libshout/files/.mtn2git_empty (renamed from packages/llvm/files/.mtn2git_empty)0
-rw-r--r--packages/libshout/files/no-host-includes.ac13
-rw-r--r--packages/libshout/libshout.inc20
-rw-r--r--packages/libshout/libshout_2.2.2.bb1
-rw-r--r--packages/libtiff/tiff_3.7.2.bb4
-rw-r--r--packages/libtool/libtool-1.5.6/.mtn2git_empty (renamed from packages/nonworking/redboot-utils/.mtn2git_empty)0
-rw-r--r--packages/libtool/libtool-1.5.6/autotools.patch127
-rw-r--r--packages/libtool/libtool_1.5.10.bb2
-rw-r--r--packages/libtool/libtool_1.5.22.bb2
-rw-r--r--packages/libtool/libtool_1.5.24.bb2
-rw-r--r--packages/libtool/libtool_1.5.6.bb38
-rw-r--r--packages/libvncserver/libvncserver_0.8.2.bb32
-rw-r--r--packages/libvorbis/libvorbis_1.2.0.bb30
-rw-r--r--packages/libxml/files/no-testapi.patch51
-rw-r--r--packages/libxml/libxml2.inc29
-rw-r--r--packages/libxml/libxml2_2.6.27.bb3
-rw-r--r--packages/libxml/libxml2_2.6.29.bb34
-rw-r--r--packages/libxosd/libxosd_svn.bb2
-rw-r--r--packages/linux-libc-headers/linux-libc-headers_2.6.18.bb6
-rw-r--r--packages/linux-libc-headers/linux-libc-headers_2.6.20.bb6
-rw-r--r--packages/linux-libc-headers/linux-libc-headers_2.6.22.bb6
-rw-r--r--packages/linux-libc-headers/linux-libc-headers_2.6.23.bb6
-rw-r--r--packages/linux/chumby-kernel/.mtn2git_empty (renamed from packages/openmoko-panel-plugins/files/.mtn2git_empty)0
-rw-r--r--packages/linux/chumby-kernel/chumby-override-cmdline.patch13
-rw-r--r--packages/linux/chumby-kernel/defconfig1248
-rw-r--r--packages/linux/chumby-kernel/disable-fbchanging.patch10
-rw-r--r--packages/linux/chumby-kernel_2.6.16-chumby-1.2.bb45
-rw-r--r--packages/linux/em-x270_2.6.23.bb4
-rw-r--r--packages/linux/linux-2.6.18/.mtn2git_empty (renamed from packages/openpbx/.mtn2git_empty)0
-rwxr-xr-xpackages/linux/linux-2.6.18/0001-AVR32-Fix-compile-error-with-gcc-4.1.patch71
-rw-r--r--packages/linux/linux-2.6.18/add-all-parameters-to-smc-driver.patch73
-rw-r--r--packages/linux/linux-2.6.18/add-default-atngw-defconfig.patch975
-rw-r--r--packages/linux/linux-2.6.18/add-flush_buffer-operation-to-uart_ops.patch71
-rw-r--r--packages/linux/linux-2.6.18/add-hmatrix-support.patch414
-rw-r--r--packages/linux/linux-2.6.18/add-ide-header.patch41
-rw-r--r--packages/linux/linux-2.6.18/add-intc_pending_irq-to-intc.patch10
-rw-r--r--packages/linux/linux-2.6.18/add-mach-specific-kconfig.patch30
-rw-r--r--packages/linux/linux-2.6.18/at32-dac-oss-driver-clk-fix.patch175
-rw-r--r--packages/linux/linux-2.6.18/at32-dac-oss-driver.patch819
-rw-r--r--packages/linux/linux-2.6.18/at32ap7000-dmac-driver.patch855
-rw-r--r--packages/linux/linux-2.6.18/at32ap7000-platform_device-definitions.patch445
-rw-r--r--packages/linux/linux-2.6.18/at32stk1000/.mtn2git_empty (renamed from packages/openpbx/files/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-2.6.18/at32stk1000/defconfig990
-rw-r--r--packages/linux/linux-2.6.18/at73c213-alsa-driver.patch1485
-rw-r--r--packages/linux/linux-2.6.18/atmel-ac97c-alsa-driver.patch1383
-rw-r--r--packages/linux/linux-2.6.18/atmel-husb2-udc-driver.patch2488
-rw-r--r--packages/linux/linux-2.6.18/atmel-lcdc-framebuffer-driver.patch1192
-rw-r--r--packages/linux/linux-2.6.18/atmel-macb-ethernet-driver.patch1614
-rw-r--r--packages/linux/linux-2.6.18/atmel-mci-debugfs.patch278
-rw-r--r--packages/linux/linux-2.6.18/atmel-mci-init-nr_blocks-in-dma-request.patch47
-rw-r--r--packages/linux/linux-2.6.18/atmel-mmc-host-driver.patch986
-rw-r--r--packages/linux/linux-2.6.18/atmel-spi-master-driver.patch990
-rw-r--r--packages/linux/linux-2.6.18/atmel-twi-driver.patch521
-rw-r--r--packages/linux/linux-2.6.18/atmel-usart3-driver.patch1443
-rw-r--r--packages/linux/linux-2.6.18/atmel-version.patch17
-rw-r--r--packages/linux/linux-2.6.18/atmel_spi-handle-rx-overrun.patch200
-rw-r--r--packages/linux/linux-2.6.18/atmel_spi-send-zeroes-when-tx_buf-is-not-set.patch48
-rw-r--r--packages/linux/linux-2.6.18/atngw100/.mtn2git_empty (renamed from packages/openpbx/openpbx.org-1.2_rc3/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-2.6.18/atngw100/defconfig970
-rw-r--r--packages/linux/linux-2.6.18/atstk1000-add-platform-data-for-mmc.patch25
-rw-r--r--packages/linux/linux-2.6.18/atstk1000-board-fix-fbmem-setup.patch14
-rw-r--r--packages/linux/linux-2.6.18/atstk1000-instantiate-devices.patch103
-rw-r--r--packages/linux/linux-2.6.18/avr32-arch-neutral-gpio-api.patch598
-rw-r--r--packages/linux/linux-2.6.18/avr32-arch.patch19628
-rw-r--r--packages/linux/linux-2.6.18/avr32-checkstack.patch35
-rw-r--r--packages/linux/linux-2.6.18/avr32-dma-controller-framework.patch241
-rw-r--r--packages/linux/linux-2.6.18/avr32-dont-include-asm-delay-h.patch47
-rw-r--r--packages/linux/linux-2.6.18/avr32-drop-GFP_COMP-for-DMA-memory-allocations.patch27
-rw-r--r--packages/linux/linux-2.6.18/avr32-fix-oprofile-interrupts.patch109
-rw-r--r--packages/linux/linux-2.6.18/avr32-gpio-dev.patch548
-rw-r--r--packages/linux/linux-2.6.18/avr32-increment-pointer-when-parsing-for-fbmem_start.patch16
-rw-r--r--packages/linux/linux-2.6.18/avr32-little-endian-read-write-bwl.patch128
-rw-r--r--packages/linux/linux-2.6.18/avr32-move-ethernet-tag-parsing-to-board-specific-code.patch94
-rw-r--r--packages/linux/linux-2.6.18/avr32-network-gateway-support.patch233
-rw-r--r--packages/linux/linux-2.6.18/avr32-oprofile.patch610
-rw-r--r--packages/linux/linux-2.6.18/avr32-sound.patch51
-rw-r--r--packages/linux/linux-2.6.18/avr32-time-add-shared-interrupts.patch30
-rw-r--r--packages/linux/linux-2.6.18/avr32-unistd-h-move-ifdef-kernel.patch39
-rw-r--r--packages/linux/linux-2.6.18/avr32_defconfig1036
-rw-r--r--packages/linux/linux-2.6.18/dmac-add-explicit-blockcount-to-dma_request_sg.patch66
-rw-r--r--packages/linux/linux-2.6.18/dmac-stopping-idle-channel-is-not-fatal.patch93
-rw-r--r--packages/linux/linux-2.6.18/dont-include-map-h-from-physmap-h.patch33
-rw-r--r--packages/linux/linux-2.6.18/fix-alpha-color-bitfield.patch21
-rw-r--r--packages/linux/linux-2.6.18/fix-gpio-prototypes.patch75
-rw-r--r--packages/linux/linux-2.6.18/fix-lcd-display-off-by-two-problem.patch17
-rw-r--r--packages/linux/linux-2.6.18/fix-usart3-rx-BUG.patch25
-rw-r--r--packages/linux/linux-2.6.18/gpio-define-pio-none.patch11
-rw-r--r--packages/linux/linux-2.6.18/gpio-dev-blocking-read.patch187
-rw-r--r--packages/linux/linux-2.6.18/gpio-dev-robustness.patch204
-rw-r--r--packages/linux/linux-2.6.18/husb2_udc-test-mode.patch267
-rw-r--r--packages/linux/linux-2.6.18/jffs2_can_mark_obsolete-should-return-0-for-dataflash.patch37
-rw-r--r--packages/linux/linux-2.6.18/kbuild-add-unifdef.patch1020
-rw-r--r--packages/linux/linux-2.6.18/kbuild-replace-use-of-strlcpy-with-a-dedicated-implmentation-in-unifdef.patch30
-rw-r--r--packages/linux/linux-2.6.18/kbuild-use-in-kernel-unifdef.patch56
-rw-r--r--packages/linux/linux-2.6.18/lcdc-do-not-clear-mem-if-fbmem_start-is-set.patch16
-rw-r--r--packages/linux/linux-2.6.18/lcdc-fix-possible-null-pointer-and-match-guard-time-to-uboot.patch38
-rw-r--r--packages/linux/linux-2.6.18/lcdc-wait-for-vsync.patch152
-rw-r--r--packages/linux/linux-2.6.18/ltv350qv-add-initial_power_state-param.patch25
-rw-r--r--packages/linux/linux-2.6.18/ltv350qv-lcd-driver.patch355
-rw-r--r--packages/linux/linux-2.6.18/mmc-add-bit-manipulating-macros.patch321
-rw-r--r--packages/linux/linux-2.6.18/mmc-add-detect-card-and-wp-support.patch159
-rw-r--r--packages/linux/linux-2.6.18/mmc-add-platform-data.patch185
-rw-r--r--packages/linux/linux-2.6.18/mmc-core-dma-fix.patch33
-rw-r--r--packages/linux/linux-2.6.18/mtd-fix-atmel-pri-for-cmdset-0001-and-cmdset-0002.patch99
-rw-r--r--packages/linux/linux-2.6.18/mtd-unlock-nor-flash-automatically-where-necessary.patch75
-rw-r--r--packages/linux/linux-2.6.18/ngw-fix-usart-initialization.patch32
-rw-r--r--packages/linux/linux-2.6.18/ngw100-change-spi-clock-on-dataflash.patch13
-rw-r--r--packages/linux/linux-2.6.18/pio-deglitch.patch40
-rw-r--r--packages/linux/linux-2.6.18/pio-interrupt-controller.patch108
-rw-r--r--packages/linux/linux-2.6.18/rename-ttyUS-to-ttyS-or-ttyAT.patch74
-rw-r--r--packages/linux/linux-2.6.18/renumber-usart-devices.patch228
-rw-r--r--packages/linux/linux-2.6.18/spi-fix-spi-busnum-to-master-buffer-and-bus_num-0.patch50
-rw-r--r--packages/linux/linux-2.6.18/spi-reduce-dlybs-and-dlybct.patch19
-rw-r--r--packages/linux/linux-2.6.18/spi-set-kset-of-master-class-dev-explicitly.patch34
-rw-r--r--packages/linux/linux-2.6.18/update-atstk1002_defconfig.patch563
-rw-r--r--packages/linux/linux-2.6.18/usart-make-rx-timeout-baudrate-independent.patch83
-rw-r--r--packages/linux/linux-2.6.18/usb-ethernet-align-all-descriptors-on-a-word-boundary.patch171
-rw-r--r--packages/linux/linux-2.6.18/usb-ethernet-define-cdc-capability-for-husb2.patch27
-rw-r--r--packages/linux/linux-2.6.18/usb-file-storage-align-all-descriptors-on-a-word-boundary.patch107
-rw-r--r--packages/linux/linux-2.6.18/usb-serial-align-all-descriptors-on-a-word-boundary.patch140
-rw-r--r--packages/linux/linux-2.6.18/usb-zero-align-all-descriptors-on-a-word-boundary.patch107
-rw-r--r--packages/linux/linux-2.6.22.6/mx31moboard/.mtn2git_empty (renamed from packages/opie-bluetoothapplet/files/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-2.6.22.6/mx31moboard/defconfig1492
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/.mtn2git_empty (renamed from packages/pimlico/contacts-0.7/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/alix/.mtn2git_empty (renamed from packages/pimlico/tasks-0.12/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/alix/defconfig1836
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/.mtn2git_empty (renamed from packages/prelink/prelink-20060712/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0001-cm-x270-match-type.patch25
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0002-ramdisk_load.patch81
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0003-mmcsd_large_cards-r0.patch36
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0004-cm-x270-nand-simplify-name.patch25
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0005-cmx270-pci.patch150
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/defconfig1258
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/gesbc-9302/.mtn2git_empty (renamed from packages/python/python-formencode/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/gesbc-9302/0001-gesbc-nand.patch306
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc5/gesbc-9302/defconfig1125
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc6/.mtn2git_empty (renamed from packages/qemu/files/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/.mtn2git_empty (renamed from packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/0001-2.6.23-at91.patch16686
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/0002-at91sam9260ek_defconfig.patch959
-rw-r--r--packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/defconfig1129
-rw-r--r--packages/linux/linux-2.6.23/at32stk1000/.mtn2git_empty (renamed from packages/qmake/qmake2-native-2.10a/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-2.6.23/at32stk1000/defconfig1078
-rw-r--r--packages/linux/linux-2.6.23/atngw100/.mtn2git_empty (renamed from packages/qpobox/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-2.6.23/atngw100/defconfig1130
-rw-r--r--packages/linux/linux-2.6.23/kallsyms-missing-include.patch19
-rw-r--r--packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig4
-rw-r--r--packages/linux/linux-2.6.23/mpc8313e-rdb/mpc8313e-rdb-leds.patch138
-rw-r--r--packages/linux/linux-2.6.23/mpc8323e-rdb/defconfig4
-rw-r--r--packages/linux/linux-bd-neon-2.6_2.6.22.bb4
-rw-r--r--packages/linux/linux-dht-walnut-2.6.20/dht-walnut/.mtn2git_empty (renamed from packages/qt/qt4-x11-free-4.1.2/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-dht-walnut-2.6.20/dht-walnut/defconfig (renamed from packages/linux/linux-dht-walnut-2.6.20/dht-walnut_defconfig)0
-rw-r--r--packages/linux/linux-dht-walnut/.mtn2git_empty (renamed from packages/qt/qt4-x11-free-4.3.2/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-dht-walnut/dht-walnut/.mtn2git_empty (renamed from packages/qte-fonts-common/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-dht-walnut/dht-walnut/defconfig2353
-rw-r--r--packages/linux/linux-dht-walnut/remove-todc.patch920
-rw-r--r--packages/linux/linux-dht-walnut_2.6.20.bb48
-rw-r--r--packages/linux/linux-dht-walnut_2.6.23.bb56
-rw-r--r--packages/linux/linux-efika_2.6.20.20.bb8
-rw-r--r--packages/linux/linux-efika_2.6.20.bb8
-rw-r--r--packages/linux/linux-efika_2.6.21+git.bb8
-rw-r--r--packages/linux/linux-ezx-2.6.24/.mtn2git_empty (renamed from packages/qte-fonts-common/qte-fonts-common/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-ezx-2.6.24/a1200/.mtn2git_empty (renamed from packages/qte/qtopia-core/.mtn2git_empty)0
-rwxr-xr-xpackages/linux/linux-ezx-2.6.24/a1200/defconfig1208
-rw-r--r--packages/linux/linux-ezx-2.6.24/a780/.mtn2git_empty (renamed from packages/quilt/quilt-0.39/.mtn2git_empty)0
-rwxr-xr-xpackages/linux/linux-ezx-2.6.24/a780/defconfig1502
-rw-r--r--packages/linux/linux-ezx-2.6.24/e680/.mtn2git_empty (renamed from packages/timezones/.mtn2git_empty)0
-rwxr-xr-xpackages/linux/linux-ezx-2.6.24/e680/defconfig1584
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/.mtn2git_empty (renamed from packages/uboot/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX77
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch20
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch47
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch98
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch124
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-pcap.patch66
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch38
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch46
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch90
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-leds.patch187
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch125
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch90
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch102
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/asoc-fix-loopback.patch14
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch755
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/binutils-buildid-arm.patch (renamed from packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/binutils-buildid-arm.patch)0
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/defconfig-a12001205
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/defconfig-a7801502
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/defconfig-e21188
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/defconfig-e61200
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/defconfig-e6801211
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log299
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e6-eoc.patch20
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch124
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch66
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch38
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch93
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch300
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch45
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch126
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch90
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch39
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch1302
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch203
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch351
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch1042
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch269
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-enable-stuart.patch99
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-eoc.patch295
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch309
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-pcap.patch852
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-pm.patch108
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch45
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-fix-init-errorpath.patch20
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-fix-makefile.patch14
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-fix-tty-driver.patch125
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-fix.patch164
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-ifdef-ezx-features.patch99
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch297
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-remove-flipbuffers.patch269
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-remove-get_halted_bit.patch22
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux-remove-usbh_finished_resume.patch22
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux_cli.patch5396
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/mux_debug.patch551
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pcap-ts.patch363
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxa-kbd.patch547
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch45
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch3114
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxa27x_overlay-r8.patch2439
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml1204
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml1330
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml282
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml781
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml882
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml100
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml113
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/series105
-rw-r--r--packages/linux/linux-ezx-2.6.24/rokre2/.mtn2git_empty (renamed from packages/uboot/files/.mtn2git_empty)0
-rwxr-xr-xpackages/linux/linux-ezx-2.6.24/rokre2/defconfig1189
-rw-r--r--packages/linux/linux-ezx-2.6.24/rokre6/.mtn2git_empty (renamed from packages/uboot/u-boot-1.1.2/.mtn2git_empty)0
-rwxr-xr-xpackages/linux/linux-ezx-2.6.24/rokre6/defconfig1203
-rw-r--r--packages/linux/linux-ezx-2.6.24/update_patches.sh16
-rw-r--r--packages/linux/linux-ezx_2.6.24.bb111
-rw-r--r--packages/linux/linux-gumstix_2.6.15.bb4
-rw-r--r--packages/linux/linux-hackndev-2.6_git.bb4
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/.mtn2git_empty (renamed from packages/uboot/u-boot-1.1.4/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/asus620/.mtn2git_empty (renamed from packages/uboot/u-boot-1.1.6/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig1339
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/asus730/.mtn2git_empty (renamed from packages/uboot/u-boot-1.2.0/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig1459
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/aximx50/.mtn2git_empty (renamed from packages/uboot/u-boot-1.2.0/fic-gta01/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig1322
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/eteng500/.mtn2git_empty (renamed from packages/uboot/u-boot-1.2.0/turbostation/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig1313
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h1910/.mtn2git_empty (renamed from packages/uboot/u-boot-mkimage-openmoko-native/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig1392
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h2200/.mtn2git_empty (renamed from packages/uboot/u-boot-omap2430sdp-1.1.4/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig1794
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h3600/.mtn2git_empty (renamed from packages/x11vnc/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig1311
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h3800/.mtn2git_empty (renamed from packages/xcursor-transparent-theme/xcursor-transparent-theme-0.1.1/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig1309
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h3900/.mtn2git_empty (renamed from packages/xserver-common/files/ghi270/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig1428
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h4000/.mtn2git_empty (renamed from packages/xserver-kdrive-common/xserver-kdrive-common/etc/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig1555
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h5000/.mtn2git_empty (renamed from packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig1685
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/.mtn2git_empty (renamed from packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/Xsession.d/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig1332
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcapache/.mtn2git_empty (renamed from packages/zroadmap/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig1423
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/.mtn2git_empty (renamed from packages/zroadmap/files/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig1339
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig1574
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig1335
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcsable/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig1450
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig1456
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig1309
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/hx4700/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig1811
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/looxc550/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig1335
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/magician/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig1664
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/rx1950/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig1370
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/rx3000/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig1494
-rw-r--r--packages/linux/linux-handhelds-2.6.inc2
-rw-r--r--packages/linux/linux-handhelds-2.6/asus620/defconfig1280
-rw-r--r--packages/linux/linux-handhelds-2.6/asus730/defconfig1399
-rw-r--r--packages/linux/linux-handhelds-2.6/aximx50/defconfig1263
-rw-r--r--packages/linux/linux-handhelds-2.6/eteng500/defconfig1254
-rw-r--r--packages/linux/linux-handhelds-2.6/h1910/defconfig1333
-rw-r--r--packages/linux/linux-handhelds-2.6/h2200/defconfig1734
-rw-r--r--packages/linux/linux-handhelds-2.6/h3600/defconfig1252
-rw-r--r--packages/linux/linux-handhelds-2.6/h3800/defconfig1249
-rw-r--r--packages/linux/linux-handhelds-2.6/h3900/defconfig1367
-rw-r--r--packages/linux/linux-handhelds-2.6/h4000/defconfig1493
-rw-r--r--packages/linux/linux-handhelds-2.6/h5000/defconfig1369
-rw-r--r--packages/linux/linux-handhelds-2.6/htcalpine/defconfig1273
-rw-r--r--packages/linux/linux-handhelds-2.6/htcapache/defconfig1359
-rw-r--r--packages/linux/linux-handhelds-2.6/htcbeetles/defconfig1280
-rw-r--r--packages/linux/linux-handhelds-2.6/htcblueangel/defconfig1514
-rw-r--r--packages/linux/linux-handhelds-2.6/htchimalaya/defconfig1276
-rw-r--r--packages/linux/linux-handhelds-2.6/htcsable/defconfig1386
-rw-r--r--packages/linux/linux-handhelds-2.6/htcuniversal/defconfig1394
-rw-r--r--packages/linux/linux-handhelds-2.6/htcwallaby/defconfig1251
-rw-r--r--packages/linux/linux-handhelds-2.6/hx4700/defconfig1751
-rw-r--r--packages/linux/linux-handhelds-2.6/looxc550/defconfig1276
-rw-r--r--packages/linux/linux-handhelds-2.6/magician/defconfig1604
-rw-r--r--packages/linux/linux-handhelds-2.6/rx1950/defconfig1311
-rw-r--r--packages/linux/linux-handhelds-2.6/rx3000/defconfig1428
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh16.bb11
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh17.bb4
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh18.bb4
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh19.bb11
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb15
-rw-r--r--packages/linux/linux-handhelds-2.6_cvs.bb6
-rw-r--r--packages/linux/linux-ixp4xx.inc2
-rw-r--r--packages/linux/linux-ixp4xx/defconfig-2.6.21.7 (renamed from packages/linux/linux-ixp4xx/defconfig-2.6.21.6)0
-rw-r--r--packages/linux/linux-ixp4xx/defconfig-2.6.23.14 (renamed from packages/linux/linux-ixp4xx/defconfig-2.6.23.8)0
-rw-r--r--packages/linux/linux-ixp4xx/defconfig-2.6.241940
-rw-r--r--packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.21.7 (renamed from packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.21.6)0
-rw-r--r--packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.23.141940
-rw-r--r--packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.241940
-rw-r--r--packages/linux/linux-ixp4xx_2.6.21.6.bb24
-rw-r--r--packages/linux/linux-ixp4xx_2.6.21.7.bb24
-rw-r--r--packages/linux/linux-ixp4xx_2.6.23.14.bb41
-rw-r--r--packages/linux/linux-ixp4xx_2.6.23.8.bb31
-rw-r--r--packages/linux/linux-ixp4xx_2.6.24.bb45
-rw-r--r--packages/linux/linux-linkstationarm_2.6.12.bb1
-rw-r--r--packages/linux/linux-linkstationppc_2.6.21-rc5.bb2
-rw-r--r--packages/linux/linux-magicbox_2.6.18.6.bb8
-rw-r--r--packages/linux/linux-magicbox_2.6.19.2.bb10
-rw-r--r--packages/linux/linux-ml403-mvista-2.6.x_git.bb8
-rw-r--r--packages/linux/linux-ml403-slab-2.6.x_git.bb8
-rw-r--r--packages/linux/linux-omap.inc2
-rw-r--r--packages/linux/linux-omap2-git/omap2430sdp/.mtn2git_empty0
-rw-r--r--packages/linux/linux-omap2-git/omap2430sdp/defconfig (renamed from packages/linux/linux-omap2-git/defconfig)0
-rw-r--r--packages/linux/linux-omap2-git/omap2430sdp/defconfig.eabi (renamed from packages/linux/linux-omap2-git/defconfig.eabi)0
-rw-r--r--packages/linux/linux-openmoko-devel/defconfig-2.6.24-rc61814
-rw-r--r--packages/linux/linux-openmoko-devel_2.6.23+2.6.24-rc7.bb59
-rw-r--r--packages/linux/linux-openmoko-devel_git.bb46
-rw-r--r--packages/linux/linux-openmoko-devel_svn+2.6.23.1.bb68
-rw-r--r--packages/linux/linux-openmoko.inc30
-rw-r--r--packages/linux/linux-openmoko/gta02-sound.patch2
-rw-r--r--packages/linux/linux-openmoko_2.6.22.5.bb4
-rw-r--r--packages/linux/linux-rp-2.6.16/00-hostap.patch45
-rw-r--r--packages/linux/linux-rp-2.6.16/10-pcnet.patch27
-rw-r--r--packages/linux/linux-rp-2.6.16/add-oz-release-string.patch24
-rw-r--r--packages/linux/linux-rp-2.6.16/defconfig-akita1572
-rw-r--r--packages/linux/linux-rp-2.6.16/defconfig-c7x01608
-rw-r--r--packages/linux/linux-rp-2.6.16/defconfig-collie1154
-rw-r--r--packages/linux/linux-rp-2.6.16/defconfig-hx20001028
-rw-r--r--packages/linux/linux-rp-2.6.16/defconfig-poodle1556
-rw-r--r--packages/linux/linux-rp-2.6.16/defconfig-qemuarm941
-rw-r--r--packages/linux/linux-rp-2.6.16/defconfig-spitz1572
-rw-r--r--packages/linux/linux-rp-2.6.16/defconfig-tosa1608
-rw-r--r--packages/linux/linux-rp-2.6.16/hrw-pcmcia-ids-r5.patch63
-rw-r--r--packages/linux/linux-rp-2.6.16/locomo-kbd-hotkeys.patch48
-rw-r--r--packages/linux/linux-rp-2.6.16/locomo-lcd-def-bightness.patch11
-rw-r--r--packages/linux/linux-rp-2.6.16/locomo-sysrq+keyrepeat.patch49
-rw-r--r--packages/linux/linux-rp-2.6.16/maxpower-message.patch55
-rw-r--r--packages/linux/linux-rp-2.6.16/pxa-serial-hack.patch73
-rw-r--r--packages/linux/linux-rp-2.6.16/rmk-mmc1.patch61
-rw-r--r--packages/linux/linux-rp-2.6.16/rmk-mmc2.patch26
-rw-r--r--packages/linux/linux-rp-2.6.16/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch155
-rw-r--r--packages/linux/linux-rp-2.6.16/squashfs3.0-2.6.15.patch4174
-rw-r--r--packages/linux/linux-rp-2.6.17/00-hostap.patch45
-rw-r--r--packages/linux/linux-rp-2.6.17/10-pcnet.patch27
-rw-r--r--packages/linux/linux-rp-2.6.17/add-oz-release-string.patch24
-rw-r--r--packages/linux/linux-rp-2.6.17/asoc-v0.12.4_2.6.17.patch31713
-rw-r--r--packages/linux/linux-rp-2.6.17/connectplus-remove-ide-HACK.patch12
-rw-r--r--packages/linux/linux-rp-2.6.17/defconfig-akita1572
-rw-r--r--packages/linux/linux-rp-2.6.17/defconfig-c7x01608
-rw-r--r--packages/linux/linux-rp-2.6.17/defconfig-collie1641
-rw-r--r--packages/linux/linux-rp-2.6.17/defconfig-hx20001028
-rw-r--r--packages/linux/linux-rp-2.6.17/defconfig-poodle1655
-rw-r--r--packages/linux/linux-rp-2.6.17/defconfig-qemuarm1190
-rw-r--r--packages/linux/linux-rp-2.6.17/defconfig-qemux861562
-rw-r--r--packages/linux/linux-rp-2.6.17/defconfig-spitz1603
-rw-r--r--packages/linux/linux-rp-2.6.17/defconfig-tosa1609
-rw-r--r--packages/linux/linux-rp-2.6.17/hrw-pcmcia-ids-r5.patch63
-rw-r--r--packages/linux/linux-rp-2.6.17/orinoco-remove-all-which-are-in-hostap-HACK.patch88
-rw-r--r--packages/linux/linux-rp-2.6.17/pxa-serial-hack.patch73
-rw-r--r--packages/linux/linux-rp-2.6.17/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch155
-rw-r--r--packages/linux/linux-rp-2.6.17/squashfs3.0-2.6.15.patch4174
-rw-r--r--packages/linux/linux-rp-2.6.17/tosa-lcdnoise-r0.patch157
-rw-r--r--packages/linux/linux-rp-2.6.17/vesafb-tng-1.0-rc2-git-20060629.patch3089
-rw-r--r--packages/linux/linux-rp-2.6.17/wm9712-reset-loop-r2.patch44
-rw-r--r--packages/linux/linux-rp-2.6.17/wm9712-suspend-cold-res-r2.patch16
-rw-r--r--packages/linux/linux-rp-2.6.17/wm97xx-lcdnoise-r0.patch208
-rw-r--r--packages/linux/linux-rp-2.6.19+git/add-oz-release-string.patch28
-rw-r--r--packages/linux/linux-rp-2.6.19+git/connectplus-remove-ide-HACK.patch12
-rw-r--r--packages/linux/linux-rp-2.6.19+git/defconfig-akita1572
-rw-r--r--packages/linux/linux-rp-2.6.19+git/defconfig-c7x01608
-rw-r--r--packages/linux/linux-rp-2.6.19+git/defconfig-collie1641
-rw-r--r--packages/linux/linux-rp-2.6.19+git/defconfig-hx20001161
-rw-r--r--packages/linux/linux-rp-2.6.19+git/defconfig-poodle1655
-rw-r--r--packages/linux/linux-rp-2.6.19+git/defconfig-qemuarm1193
-rw-r--r--packages/linux/linux-rp-2.6.19+git/defconfig-qemux861566
-rw-r--r--packages/linux/linux-rp-2.6.19+git/defconfig-spitz1603
-rw-r--r--packages/linux/linux-rp-2.6.19+git/defconfig-tosa1608
-rw-r--r--packages/linux/linux-rp-2.6.19+git/hrw-pcmcia-ids-r5.patch63
-rw-r--r--packages/linux/linux-rp-2.6.19+git/pxa-serial-hack.patch80
-rw-r--r--packages/linux/linux-rp-2.6.19+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch155
-rw-r--r--packages/linux/linux-rp-2.6.19+git/sharpsl-pm-postresume-r1.patch30
-rw-r--r--packages/linux/linux-rp-2.6.19+git/squashfs3.0-2.6.15.patch4191
-rw-r--r--packages/linux/linux-rp-2.6.19+git/tmio-nand-r7.patch593
-rw-r--r--packages/linux/linux-rp-2.6.19+git/tmio-ohci-r6.patch929
-rw-r--r--packages/linux/linux-rp-2.6.19+git/tmio-tc6393-r8.patch800
-rw-r--r--packages/linux/linux-rp-2.6.19+git/tosa-keyboard-r18.patch515
-rw-r--r--packages/linux/linux-rp-2.6.19+git/tosa-lcdnoise-r1.patch157
-rw-r--r--packages/linux/linux-rp-2.6.19+git/tosa-tmio-lcd-r10.patch472
-rw-r--r--packages/linux/linux-rp-2.6.19+git/wm9712-reset-loop-r2.patch44
-rw-r--r--packages/linux/linux-rp-2.6.19+git/wm9712-suspend-cold-res-r2.patch16
-rw-r--r--packages/linux/linux-rp-2.6.19+git/wm97xx-lcdnoise-r0.patch208
-rw-r--r--packages/linux/linux-rp-2.6.20/add-oz-release-string.patch28
-rw-r--r--packages/linux/linux-rp-2.6.20/connectplus-remove-ide-HACK.patch12
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-akita1739
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-c7x01786
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-collie1739
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-hx20001165
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-poodle1656
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-qemuarm1193
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-qemux861567
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-spitz1739
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-spitz.flash1604
-rw-r--r--packages/linux/linux-rp-2.6.20/defconfig-tosa1612
-rw-r--r--packages/linux/linux-rp-2.6.20/orinoco-remove-all-which-are-in-hostap-HACK.patch88
-rw-r--r--packages/linux/linux-rp-2.6.20/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch155
-rw-r--r--packages/linux/linux-rp-2.6.20/sharpsl-rc-r1.patch519
-rw-r--r--packages/linux/linux-rp-2.6.20/squashfs3.0-2.6.15.patch4191
-rw-r--r--packages/linux/linux-rp-2.6.20/vesafb-tng-1.0-rc2-2.6.20-rc2.patch3141
-rw-r--r--packages/linux/linux-rp-2.6.20/wm97xx-lcdnoise-r0.patch208
-rw-r--r--packages/linux/linux-rp-2.6.21/connectplus-remove-ide-HACK.patch12
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-akita1744
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-bootcdx861606
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-c7x01787
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-collie1739
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-hx20001166
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-poodle1657
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-qemuarm1194
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-qemux861568
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-spitz1781
-rw-r--r--packages/linux/linux-rp-2.6.21/defconfig-tosa1613
-rw-r--r--packages/linux/linux-rp-2.6.21/hostap-monitor-mode.patch209
-rw-r--r--packages/linux/linux-rp-2.6.21/orinoco-remove-all-which-are-in-hostap-HACK.patch88
-rw-r--r--packages/linux/linux-rp-2.6.21/pxa-serial-hack.patch90
-rw-r--r--packages/linux/linux-rp-2.6.21/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch155
-rw-r--r--packages/linux/linux-rp-2.6.21/sharpsl-rc-r1.patch519
-rw-r--r--packages/linux/linux-rp-2.6.21/squashfs3.0-2.6.15.patch4191
-rw-r--r--packages/linux/linux-rp-2.6.21/vesafb-tng-1.0-rc2-2.6.20-rc2.patch3141
-rw-r--r--packages/linux/linux-rp-2.6.21/wm97xx-lcdnoise-r0.patch208
-rw-r--r--packages/linux/linux-rp-2.6.22/connectplus-remove-ide-HACK.patch12
-rw-r--r--packages/linux/linux-rp-2.6.22/defconfig-akita1747
-rw-r--r--packages/linux/linux-rp-2.6.22/defconfig-bootcdx861607
-rw-r--r--packages/linux/linux-rp-2.6.22/defconfig-c7x01789
-rw-r--r--packages/linux/linux-rp-2.6.22/defconfig-collie1741
-rw-r--r--packages/linux/linux-rp-2.6.22/defconfig-htcuniversal1305
-rw-r--r--packages/linux/linux-rp-2.6.22/defconfig-hx20001168
-rw-r--r--packages/linux/linux-rp-2.6.22/defconfig-poodle1659
-rw-r--r--packages/linux/linux-rp-2.6.22/defconfig-qemuarm1194
-rw-r--r--packages/linux/linux-rp-2.6.22/defconfig-qemux861568
-rw-r--r--packages/linux/linux-rp-2.6.22/defconfig-spitz1723
-rw-r--r--packages/linux/linux-rp-2.6.22/defconfig-tosa1620
-rw-r--r--packages/linux/linux-rp-2.6.22/hostap-monitor-mode.patch209
-rw-r--r--packages/linux/linux-rp-2.6.22/htcuni-acx.patch33526
-rw-r--r--packages/linux/linux-rp-2.6.22/htcuni.patch8480
-rw-r--r--packages/linux/linux-rp-2.6.22/pda-power.patch3373
-rw-r--r--packages/linux/linux-rp-2.6.22/pxa-serial-hack.patch90
-rw-r--r--packages/linux/linux-rp-2.6.22/sharpsl-pm-postresume-r1.patch30
-rw-r--r--packages/linux/linux-rp-2.6.22/squashfs3.0-2.6.15.patch4189
-rw-r--r--packages/linux/linux-rp-2.6.22/tmio-fb-r6-fix-r0.patch45
-rw-r--r--packages/linux/linux-rp-2.6.22/tmio-nand-r8.patch594
-rw-r--r--packages/linux/linux-rp-2.6.22/tmio-ohci-r6.patch929
-rw-r--r--packages/linux/linux-rp-2.6.22/tmio-tc6393-r8.patch800
-rw-r--r--packages/linux/linux-rp-2.6.22/tosa-keyboard-r19.patch514
-rw-r--r--packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1-fix-r0.patch135
-rw-r--r--packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1.patch158
-rw-r--r--packages/linux/linux-rp-2.6.22/tosa-power-r18-fix-r0.patch59
-rw-r--r--packages/linux/linux-rp-2.6.22/tosa-pxaac97-r6-fix-r0.patch29
-rw-r--r--packages/linux/linux-rp-2.6.22/tosa-tmio-lcd-r10-fix-r0.patch35
-rw-r--r--packages/linux/linux-rp-2.6.22/tosa-tmio-lcd-r10.patch472
-rw-r--r--packages/linux/linux-rp-2.6.22/usb-ohci-hooks-r2.patch180
-rw-r--r--packages/linux/linux-rp-2.6.22/vesafb-tng-1.0-rc2-2.6.20-rc2.patch3141
-rw-r--r--packages/linux/linux-rp-2.6.22/wm9712-reset-loop-r2.patch44
-rw-r--r--packages/linux/linux-rp-2.6.22/wm9712-suspend-cold-res-r2.patch16
-rw-r--r--packages/linux/linux-rp-2.6.22/wm97xx-lg13-r0-fix-r0.patch128
-rw-r--r--packages/linux/linux-rp-2.6.22/wm97xx-lg13-r0.patch2899
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/arm_pxa_20070923.patch5877
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/connectplus-remove-ide-HACK.patch12
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-akita1678
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-bootcdx861607
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-c7x01695
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-collie1741
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-htcuniversal1281
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-hx20001168
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-poodle1659
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemuarm1194
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemux861568
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-spitz1690
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-tosa1614
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-zylonite1457
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/hostap-monitor-mode.patch209
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni-acx.patch33526
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni.patch8044
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/mmcsd_no_scr_check-r2.patch29
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pda-power.patch3373
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pxa-serial-hack.patch90
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch155
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/squashfs3.0-2.6.15.patch4189
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/uvesafb-0.1-rc3-2.6.22.patch2590
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/vt_ioctl_race.patch46
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/w100fb-unused-var.patch17
-rw-r--r--packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/wm97xx-lcdnoise-r0.patch208
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-akita58
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-bootcdx8673
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-c7x060
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-collie55
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-htcuniversal70
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-hx200075
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-poodle878
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-qemuarm705
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-qemux86822
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-spitz78
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-tosa74
-rw-r--r--packages/linux/linux-rp-2.6.23/defconfig-zylonite73
-rw-r--r--packages/linux/linux-rp-2.6.23/hrw-add-wcf11-to-hostap.patch31
-rw-r--r--packages/linux/linux-rp-2.6.23/mmcsd_no_scr_check-r2.patch29
-rw-r--r--packages/linux/linux-rp-2.6.23/pda-power.patch3373
-rw-r--r--packages/linux/linux-rp-2.6.23/tmio-ohci-r9.patch135
-rw-r--r--packages/linux/linux-rp-2.6.23/versatile-armv6.patch19
-rw-r--r--packages/linux/linux-rp-2.6.23/vt_ioctl_race.patch46
-rw-r--r--packages/linux/linux-rp-2.6.23/w100fb-unused-var.patch17
-rw-r--r--packages/linux/linux-rp-2.6.24/.mtn2git_empty0
-rw-r--r--packages/linux/linux-rp-2.6.24/binutils-buildid-arm.patch16
-rw-r--r--packages/linux/linux-rp-2.6.24/connectplus-prevent-oops-HACK.patch (renamed from packages/linux/linux-rp-2.6.21/connectplus-prevent-oops-HACK.patch)0
-rw-r--r--packages/linux/linux-rp-2.6.24/connectplus-remove-ide-HACK.patch (renamed from packages/linux/linux-rp-2.6.16/connectplus-remove-ide-HACK.patch)0
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-akita1740
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-bootcdx861994
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-c7x01746
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-collie1370
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-htcuniversal1307
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-hx20001733
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-poodle1752
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-qemuarm1582
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-qemux861993
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-spitz1740
-rw-r--r--packages/linux/linux-rp-2.6.24/defconfig-zylonite1740
-rw-r--r--packages/linux/linux-rp-2.6.24/hostap-monitor-mode.patch (renamed from packages/linux/linux-rp-2.6.20/hostap-monitor-mode.patch)0
-rw-r--r--packages/linux/linux-rp-2.6.24/htcuni-acx.patch33527
-rw-r--r--packages/linux/linux-rp-2.6.24/htcuni.patch7928
-rw-r--r--packages/linux/linux-rp-2.6.24/poodle_ts.patch22
-rw-r--r--packages/linux/linux-rp-2.6.24/pxa-serial-hack.patch (renamed from packages/linux/linux-rp-2.6.20/pxa-serial-hack.patch)0
-rw-r--r--packages/linux/linux-rp-2.6.24/pxa_fb_overlay.patch (renamed from packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pxa_fb_overlay.patch)0
-rw-r--r--packages/linux/linux-rp-2.6.24/pxafb.patch26
-rw-r--r--packages/linux/linux-rp-2.6.24/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch (renamed from packages/linux/linux-rp-2.6.22/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch)0
-rw-r--r--packages/linux/linux-rp-2.6.24/squashfs3.3.patch4234
-rw-r--r--packages/linux/linux-rp-2.6.24/versatile-armv6.patch19
-rw-r--r--packages/linux/linux-rp-2.6.24/zylonite-boot.patch (renamed from packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/zylonite-boot.patch)0
-rw-r--r--packages/linux/linux-rp.inc37
-rw-r--r--packages/linux/linux-rp_2.6.16.bb156
-rw-r--r--packages/linux/linux-rp_2.6.17.bb127
-rw-r--r--packages/linux/linux-rp_2.6.19+git.bb106
-rw-r--r--packages/linux/linux-rp_2.6.20.bb122
-rw-r--r--packages/linux/linux-rp_2.6.21.bb119
-rw-r--r--packages/linux/linux-rp_2.6.22.bb121
-rw-r--r--packages/linux/linux-rp_2.6.23+2.6.24-rc0+git.bb128
-rw-r--r--packages/linux/linux-rp_2.6.23.bb56
-rw-r--r--packages/linux/linux-rp_2.6.24.bb148
-rw-r--r--packages/linux/linux-sequoia_2.6.21.bb8
-rw-r--r--packages/linux/linux-storcenter/defconfig-2.6.15.71176
-rw-r--r--packages/linux/linux-storcenter/kernel.patch-2.6.15.71181
-rw-r--r--packages/linux/linux-storcenter_2.6.15.7.bb36
-rw-r--r--packages/linux/linux-tornado-omap2/htctornado/defconfig5
-rw-r--r--packages/linux/linux-tornado-omap2_2.6.16.16.bb1
-rw-r--r--packages/linux/linux-turbostation_2.6.20.2.bb4
-rw-r--r--packages/linux/linux.inc28
-rw-r--r--packages/linux/linux/atngw100/.mtn2git_empty0
-rw-r--r--packages/linux/linux/atngw100/defconfig849
-rw-r--r--packages/linux/linux/simpad/defconfig44
-rw-r--r--packages/linux/linux_2.6.18.bb108
-rw-r--r--packages/linux/linux_2.6.21.bb2
-rw-r--r--packages/linux/linux_2.6.22+2.6.23-rc3.bb4
-rw-r--r--packages/linux/linux_2.6.22.6.bb3
-rw-r--r--packages/linux/linux_2.6.23+2.6.24-rc5.bb78
-rw-r--r--packages/linux/linux_2.6.23+2.6.24-rc6.bb32
-rw-r--r--packages/linux/linux_2.6.23.bb20
-rw-r--r--packages/linux/mainstone-kernel/flash-unlock.patch14
-rw-r--r--packages/linux/mainstone-kernel/mainstone/.mtn2git_empty0
-rw-r--r--packages/linux/mainstone-kernel/mainstone/defconfig1276
-rw-r--r--packages/linux/mainstone-kernel/mainstone_defconfig972
-rw-r--r--packages/linux/mainstone-kernel_2.6.18.bb31
-rw-r--r--packages/linux/unslung-kernel_2.4.22.l2.3r63.bb6
-rw-r--r--packages/lm_sensors/lmsensors-apps_2.10.1.bb4
-rw-r--r--packages/lua/lua-gtk2_0.3.bb4
-rw-r--r--packages/lua/lua.inc4
-rw-r--r--packages/madwifi/madwifi-modules_0.9.3.bb2
-rw-r--r--packages/madwifi/madwifi-modules_cvs-bsd.bb2
-rw-r--r--packages/madwifi/madwifi-modules_cvs.bb2
-rw-r--r--packages/madwifi/madwifi-ng_r.inc2
-rw-r--r--packages/madwifi/madwifi-ng_r2702-20070903.bb2
-rw-r--r--packages/madwifi/madwifi-ng_r2826-20071105.bb1
-rw-r--r--packages/man-pages/man-pages_2.41.bb1
-rw-r--r--packages/matchbox-applet-cards/matchbox-applet-cards_1.0.2.bb2
-rw-r--r--packages/matchbox-applet-startup-monitor/files/.mtn2git_empty0
-rwxr-xr-xpackages/matchbox-applet-startup-monitor/files/85mb-applet-startup-monitor2
-rw-r--r--packages/matchbox-applet-startup-monitor/matchbox-applet-startup-monitor_0.1.bb11
-rw-r--r--packages/matchbox-common/matchbox_0.9.1.bb1
-rw-r--r--packages/matchbox-desktop-sato/.mtn2git_empty0
-rw-r--r--packages/matchbox-desktop-sato/matchbox-desktop-sato_svn.bb14
-rw-r--r--packages/matchbox-keyboard/files/fic-gta01-font-size.patch8
-rw-r--r--packages/matchbox-keyboard/matchbox-keyboard-inputmethod_svn.bb17
-rw-r--r--packages/matchbox-sato/.mtn2git_empty0
-rw-r--r--packages/matchbox-sato/matchbox-sato/.mtn2git_empty0
-rw-r--r--packages/matchbox-sato/matchbox-sato/etc/.mtn2git_empty0
-rw-r--r--packages/matchbox-sato/matchbox-sato/etc/matchbox/.mtn2git_empty0
-rwxr-xr-xpackages/matchbox-sato/matchbox-sato/etc/matchbox/session15
-rw-r--r--packages/matchbox-sato/matchbox-sato/matchbox-session24
-rw-r--r--packages/matchbox-sato/matchbox-sato_0.1.bb29
-rw-r--r--packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb2
-rw-r--r--packages/meta/external-toolchain.bb10
-rw-r--r--packages/meta/meta-angstrom-2007.bb32
-rw-r--r--packages/meta/meta-nas-server.bb10
-rw-r--r--packages/meta/meta-toolchain-gpe-sbox.bb1
-rw-r--r--packages/meta/meta-toolchain-gpe.bb1
-rw-r--r--packages/meta/meta-toolchain-openmoko.bb7
-rw-r--r--packages/meta/meta-toolchain-sbox.bb2
-rw-r--r--packages/meta/meta-toolchain.bb15
-rw-r--r--packages/meta/nylon-feed.inc2
-rw-r--r--packages/meta/openprotium-packages.bb24
-rw-r--r--packages/meta/oplinux-packages.bb4
-rw-r--r--packages/meta/slugos-packages.bb24
-rw-r--r--packages/meta/unslung-binary-kernel-packages.bb19
-rw-r--r--packages/mgetty/mgetty_1.1.30.bb2
-rw-r--r--packages/midpath/midpath-alsa_0.1.bb1
-rw-r--r--packages/midpath/midpath-cldc-native_0.1.bb5
-rw-r--r--packages/midpath/midpath-cldc-sdl_0.1.bb1
-rw-r--r--packages/midpath/midpath-cldc-x11_0.1.bb3
-rw-r--r--packages/midpath/midpath-cldc_0.1.bb16
-rw-r--r--packages/midpath/midpath-gtk_0.1.bb1
-rw-r--r--packages/midpath/midpath-pulseaudio_0.1.bb1
-rw-r--r--packages/midpath/midpath-qt3x11_0.1.bb1
-rw-r--r--packages/midpath/midpath-qte_0.1.bb1
-rw-r--r--packages/midpath/midpath-test_0.1.bb1
-rw-r--r--packages/midpath/midpath.inc8
-rw-r--r--packages/midpath/midpath_0.1.bb1
-rw-r--r--packages/mime-support/mime-support_3.28.bb2
-rw-r--r--packages/misc-binary-only/prism-firmware.bb1
-rw-r--r--packages/mkbot/mkbot_0.3.bb2
-rw-r--r--packages/modphp/modphp5.inc2
-rw-r--r--packages/modutils/modutils_2.4.27.bb2
-rw-r--r--packages/monit/.mtn2git_empty0
-rw-r--r--packages/monit/files/.mtn2git_empty0
-rw-r--r--packages/monit/files/init42
-rw-r--r--packages/monit/monit-4.10.1/.mtn2git_empty0
-rw-r--r--packages/monit/monit-4.10.1/init42
-rw-r--r--packages/monit/monit_4.10.1.bb24
-rw-r--r--packages/mono-xsp/mono-xsp_1.2.5.bb14
-rw-r--r--packages/mono/files/mono-libgc-configure.patch20
-rw-r--r--packages/mono/mono-1.2.6/.mtn2git_empty0
-rw-r--r--packages/mono/mono-1.2.6/configure.patch23
-rw-r--r--packages/mono/mono-mcs-intermediate_1.2.6.bb10
-rw-r--r--packages/mono/mono_1.2.5.1-files.inc244
-rw-r--r--packages/mono/mono_1.2.6.bb78
-rw-r--r--packages/mono/mono_1.2.6.inc13
-rw-r--r--packages/monotone/monotone-6_0.26.bb2
-rw-r--r--packages/monotone/monotone-6_0.27.bb2
-rw-r--r--packages/monotone/monotone-6_0.31.bb2
-rw-r--r--packages/monotone/monotone-6_0.33.bb2
-rw-r--r--packages/monotone/monotone-6_0.34.bb2
-rw-r--r--packages/monotone/monotone-6_0.37.bb2
-rw-r--r--packages/monotone/monotone.inc2
-rw-r--r--packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch6444
-rw-r--r--packages/mplayer/mplayer_0.0+1.0rc1.bb8
-rw-r--r--packages/mtd/mtd-utils_1.0.0+git.bb6
-rw-r--r--packages/musicbrainz/libmusicbrainz_2.1.5.bb13
-rw-r--r--packages/musicbrainz/libmusicbrainz_3.0.1.bb4
-rw-r--r--packages/mysql/mysql-native_4.1.18.bb8
-rw-r--r--packages/mysql/mysql_4.1.18.bb12
-rw-r--r--packages/navit/files/compile-fix.patch8
-rw-r--r--packages/navit/files/navit.desktop12
-rw-r--r--packages/navit/files/navit.launcher30
-rw-r--r--packages/navit/files/navit.xml-so.patch13
-rw-r--r--packages/navit/navit.inc27
-rw-r--r--packages/navit/navit_0.0.1.bb13
-rw-r--r--packages/navit/navit_0.0.2.bb13
-rw-r--r--packages/navit/navit_0.0.3.bb5
-rw-r--r--packages/navit/navit_cvs.bb18
-rw-r--r--packages/nbd/nbd_2.8.7.bb4
-rw-r--r--packages/ncurses/ncurses.inc22
-rw-r--r--packages/ncurses/ncurses/visibility.patch6
-rw-r--r--packages/ncurses/ncurses_5.3.bb2
-rw-r--r--packages/ncurses/ncurses_5.4.bb2
-rw-r--r--packages/netbase/netbase/interfaces17
-rw-r--r--packages/netbase/netbase/mx31moboard/.mtn2git_empty0
-rw-r--r--packages/netbase/netbase/mx31moboard/interfaces14
-rw-r--r--packages/netbase/netbase_4.21.bb2
-rw-r--r--packages/nonworking/efl/edb-utils_1.0.5.007.bb2
-rw-r--r--packages/nonworking/efl/edje-utils_0.5.0.038.bb2
-rw-r--r--packages/nonworking/efl/embryo-utils_0.9.1.038.bb2
-rw-r--r--packages/nonworking/imkit/imkit_0.4.5.bb2
-rw-r--r--packages/nonworking/libmikey/libmikey0_0.3.2.bb1
-rw-r--r--packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb1
-rw-r--r--packages/nonworking/libmsip/libmsip0_0.2.2.bb1
-rw-r--r--packages/notification-daemon/notification-daemon_0.3.6.bb1
-rw-r--r--packages/notification-daemon/notification-daemon_0.3.7.bb1
-rw-r--r--packages/nslu2-binary-only/nslu2-linksys-libs_2.3r63.bb1
-rw-r--r--packages/nslu2-binary-only/nslu2-linksys-ramdisk_2.3r63.bb1
-rw-r--r--packages/nslu2-binary-only/nslu2-linksys-sambacodepages_2.3r63.bb1
-rw-r--r--packages/nslu2-binary-only/unslung-rootfs/NOTES18
-rw-r--r--packages/nslu2-binary-only/unslung-rootfs/README415
-rwxr-xr-xpackages/nslu2-binary-only/unslung-rootfs/linuxrc8
-rw-r--r--packages/nslu2-binary-only/unslung-rootfs/telnet.htm2
-rw-r--r--packages/nslu2-binary-only/unslung-rootfs/upgrade.htm7
-rw-r--r--packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb3
-rw-r--r--packages/ntpclient/ntpclient_2007_365.bb34
-rw-r--r--packages/nunome/nunome_1.0.2.bb8
-rw-r--r--packages/nut/.mtn2git_empty0
-rw-r--r--packages/nut/files/.mtn2git_empty0
-rw-r--r--packages/nut/files/libm.patch21
-rw-r--r--packages/nut/nut_2.2.1.bb14
-rw-r--r--packages/obsolete/classpath/.mtn2git_empty0
-rw-r--r--packages/obsolete/classpath/classpath-gtk_0.93.bb9
-rw-r--r--packages/obsolete/classpath/classpath-gtk_cvs.bb30
-rw-r--r--packages/obsolete/classpath/classpath-minimal-native_0.93.bb23
-rw-r--r--packages/obsolete/classpath/classpath-minimal-native_0.95.bb (renamed from packages/classpath/classpath-minimal-native_0.95.bb)0
-rw-r--r--packages/obsolete/classpath/classpath-minimal_0.90.bb9
-rw-r--r--packages/obsolete/classpath/classpath-minimal_0.95.bb40
-rw-r--r--packages/obsolete/classpath/classpath.inc30
-rw-r--r--packages/obsolete/classpath/classpath_0.14.bb10
-rw-r--r--packages/obsolete/classpath/classpath_0.15.bb10
-rw-r--r--packages/obsolete/classpath/classpath_0.17.bb10
-rw-r--r--packages/obsolete/classpath/classpath_0.18.bb10
-rw-r--r--packages/obsolete/classpath/classpath_0.19.bb10
-rw-r--r--packages/obsolete/classpath/classpath_0.20.bb10
-rw-r--r--packages/obsolete/classpath/classpath_cvs.bb35
-rw-r--r--packages/obsolete/classpath/files/.mtn2git_empty0
-rw-r--r--packages/obsolete/classpath/files/disable-automake-checks-v2.patch (renamed from packages/classpath/files/disable-automake-checks-v2.patch)0
-rw-r--r--packages/obsolete/classpath/files/disable-automake-checks.patch (renamed from packages/classpath/files/disable-automake-checks.patch)0
-rw-r--r--packages/obsolete/classpath/files/fix-endian-arm-floats.patch (renamed from packages/classpath/files/fix-endian-arm-floats.patch)0
-rw-r--r--packages/obsolete/classpath/files/gconf_version.patch (renamed from packages/classpath/files/gconf_version.patch)0
-rw-r--r--packages/obsolete/jamvm/.mtn2git_empty0
-rw-r--r--packages/obsolete/jamvm/files/.mtn2git_empty0
-rw-r--r--packages/obsolete/jamvm/files/jamvm-1.3.1-size-defaults.patch12
-rw-r--r--packages/obsolete/jamvm/jamvm-1.3.0/.mtn2git_empty0
-rw-r--r--packages/obsolete/jamvm/jamvm-1.3.0/heap-size.patch (renamed from packages/jamvm/jamvm-1.3.0/heap-size.patch)0
-rw-r--r--packages/obsolete/jamvm/jamvm_1.3.0.bb (renamed from packages/jamvm/jamvm_1.3.0.bb)0
-rw-r--r--packages/obsolete/jamvm/jamvm_1.3.1.bb (renamed from packages/jamvm/jamvm_1.3.1.bb)0
-rw-r--r--packages/obsolete/jamvm/jamvm_1.3.2.bb (renamed from packages/jamvm/jamvm_1.3.2.bb)0
-rw-r--r--packages/obsolete/jamvm/jamvm_1.4.1.bb (renamed from packages/jamvm/jamvm_1.4.1.bb)0
-rw-r--r--packages/obsolete/quilt/.mtn2git_empty0
-rw-r--r--packages/obsolete/quilt/quilt-0.39/.mtn2git_empty0
-rw-r--r--packages/obsolete/quilt/quilt-0.39/non-gnu.patch (renamed from packages/quilt/quilt-0.39/non-gnu.patch)0
-rw-r--r--packages/obsolete/quilt/quilt-0.39/nostrip.patch (renamed from packages/quilt/quilt-0.39/nostrip.patch)0
-rw-r--r--packages/obsolete/quilt/quilt-native_0.39.bb (renamed from packages/quilt/quilt-native_0.39.bb)0
-rw-r--r--packages/obsolete/quilt/quilt_0.39.bb (renamed from packages/quilt/quilt_0.39.bb)0
-rw-r--r--packages/obsolete/quilt/quilt_0.39.inc (renamed from packages/quilt/quilt_0.39.inc)0
-rw-r--r--packages/obsolete/tasks/task-bootstrap-unionroot.bb1
-rw-r--r--packages/obsolete/tasks/task-bootstrap.bb1
-rw-r--r--packages/octave/octave.inc12
-rw-r--r--packages/octave/octave_2.1.73.bb2
-rw-r--r--packages/octave/octave_2.9.17.bb27
-rw-r--r--packages/octave/octave_2.9.19.bb27
-rw-r--r--packages/octave/octave_3.0.0.bb27
-rw-r--r--packages/openchrome/openchrome_svn.bb4
-rw-r--r--packages/openjade/openjade-1.3.2/oj-native-libosp-fix.patch12
-rw-r--r--packages/openjade/openjade-native_1.3.2.bb23
-rw-r--r--packages/openmoko-apps/openmoko-gps_0.0.1+svnr9.bb33
-rw-r--r--packages/openmoko-base/openmoko-libs_svn.bb8
-rw-r--r--packages/openmoko-spaces/openmoko-toolchain-scripts_svn.bb13
-rw-r--r--packages/openmoko2/libjana_svn.bb4
-rw-r--r--packages/openmoko2/moko-gtk-engine_svn.bb2
-rw-r--r--packages/openmoko2/openmoko-dialer2_svn.bb4
-rw-r--r--packages/openmoko2/openmoko-messages2_svn.bb2
-rw-r--r--packages/openmoko2/openmoko-sample2_svn.bb6
-rw-r--r--packages/openmoko2/openmoko-terminal2_svn.bb8
-rw-r--r--packages/openmoko2/settingsgui_0.7+0.8-beta.bb11
-rw-r--r--packages/openntpd/openntpd_3.7p1.bb5
-rw-r--r--packages/openntpd/openntpd_3.9p1.bb5
-rw-r--r--packages/openpbx/files/init75
-rw-r--r--packages/openpbx/files/logrotate13
-rw-r--r--packages/openpbx/files/volatiles6
-rw-r--r--packages/openpbx/openpbx.org-1.2_rc3/bootstrap.patch37
-rw-r--r--packages/openpbx/openpbx.org-1.2_rc3/openssl.m4.patch46
-rw-r--r--packages/openpbx/openpbx.org-perl.bb24
-rw-r--r--packages/openpbx/openpbx.org_1.2_rc3.bb139
-rw-r--r--packages/openprotium-init/files/boot/disk3
-rw-r--r--packages/openprotium-init/files/functions8
-rw-r--r--packages/openprotium-init/files/initscripts/zleds29
-rw-r--r--packages/openprotium-init/openprotium-init_0.10.bb6
-rw-r--r--packages/opensp/opensp-native_1.5.bb21
-rw-r--r--packages/openssl/openssl-0.9.7g/avr32.patch10
-rw-r--r--packages/openssl/openssl_0.9.7g.bb5
-rw-r--r--packages/opie-citytime/opie-citytime.inc3
-rw-r--r--packages/opie-i18n/opie-i18n.inc2
-rw-r--r--packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb1
-rw-r--r--packages/opie-reader/uqtreader_cvs.bb2
-rw-r--r--packages/opie-taskbar/opie-taskbar-images.inc7
-rw-r--r--packages/opie-taskbar/opie-taskbar/firstuse-path.patch11
-rw-r--r--packages/opie-taskbar/opie-taskbar_1.2.3.bb1
-rw-r--r--packages/opie-taskbar/opie-taskbar_cvs.bb3
-rw-r--r--packages/opie-ttf-support/opie-ttf-support_1.1.bb16
-rw-r--r--packages/orinoco/orinoco-modules.inc22
-rw-r--r--packages/orinoco/orinoco-modules_0.13e.bb24
-rw-r--r--packages/orinoco/orinoco-modules_0.15rc1.bb25
-rw-r--r--packages/orinoco/orinoco-modules_0.15rc2.bb28
-rw-r--r--packages/orinoco/orinoco-modules_cvs.bb25
-rw-r--r--packages/php/php-native_4.4.4.bb1
-rw-r--r--packages/php/php-native_5.2.0.bb2
-rw-r--r--packages/php/php.inc12
-rw-r--r--packages/php/php_4.4.4.bb7
-rw-r--r--packages/php/php_5.1.4.bb19
-rw-r--r--packages/php/php_5.2.0.bb35
-rw-r--r--packages/pimlico/contacts-0.8/.mtn2git_empty0
-rw-r--r--packages/pimlico/contacts-0.8/contacts-owl-window-menu.patch (renamed from packages/pimlico/contacts-0.7/contacts-owl-window-menu.patch)0
-rw-r--r--packages/pimlico/contacts_0.8.bb (renamed from packages/pimlico/contacts_0.7.bb)0
-rw-r--r--packages/pimlico/contacts_svn.bb4
-rw-r--r--packages/pimlico/dates_0.4.5.bb (renamed from packages/pimlico/dates_0.4.4.bb)0
-rw-r--r--packages/pimlico/dates_svn.bb2
-rw-r--r--packages/pimlico/files/dates-owl-window-menu.patch87
-rw-r--r--packages/pimlico/tasks-0.13/.mtn2git_empty0
-rw-r--r--packages/pimlico/tasks-0.13/tasks-owl.diff (renamed from packages/pimlico/tasks-0.12/tasks-owl.diff)0
-rw-r--r--packages/pimlico/tasks_0.13.bb (renamed from packages/pimlico/tasks_0.12.bb)0
-rw-r--r--packages/pimlico/tasks_svn.bb3
-rw-r--r--packages/pine/pine_4.64.bb2
-rw-r--r--packages/pngcrush/.mtn2git_empty0
-rw-r--r--packages/pngcrush/pngcrush-native_1.6.4.bb9
-rw-r--r--packages/pngcrush/pngcrush_1.6.4.bb14
-rw-r--r--packages/poboxserver/poboxserver_1.2.5.bb4
-rw-r--r--packages/pointercal/files/e680/.mtn2git_empty0
-rw-r--r--packages/pointercal/files/e680/pointercal1
-rw-r--r--packages/pointercal/files/fic-gta02/pointercalbin46 -> 46 bytes
-rw-r--r--packages/pointercal/pointercal_0.0.bb2
-rw-r--r--packages/poppler/poppler0.6_cvs.bb6
-rw-r--r--packages/portaudio/portaudio-v19_20071207.bb27
-rw-r--r--packages/portaudio/portaudio_0.0.19.bb2
-rw-r--r--packages/portmap/portmap_6.0.bb4
-rw-r--r--packages/ppp-dialin/ppp-dialin_0.1.bb3
-rw-r--r--packages/ppp-dsl/files/.mtn2git_empty0
-rw-r--r--packages/ppp-dsl/files/dsl-provider (renamed from packages/ppp-dsl/dsl-provider)0
-rwxr-xr-xpackages/ppp-dsl/files/ppp_on_boot.dsl (renamed from packages/ppp-dsl/ppp_on_boot.dsl)0
-rw-r--r--packages/ppp-dsl/ppp-dsl_0.1-monolithic.bb5
-rw-r--r--packages/ppp-dsl/ppp-dsl_0.1.bb6
-rw-r--r--packages/ppp/ppp-gprs/.mtn2git_empty0
-rw-r--r--packages/ppp/ppp-gprs/chats/.mtn2git_empty0
-rw-r--r--packages/ppp/ppp-gprs/chats/chat-gprs9
-rw-r--r--packages/ppp/ppp-gprs/peers/.mtn2git_empty0
-rw-r--r--packages/ppp/ppp-gprs/peers/_gprs68
-rw-r--r--packages/ppp/ppp-gprs/peers/_gprs-ap-internet3
-rw-r--r--packages/ppp/ppp-gprs_1.0.bb22
-rw-r--r--packages/prelink/prelink-20060712/arm_eabi.patch286
-rw-r--r--packages/prelink/prelink-20061027/.mtn2git_empty0
-rw-r--r--packages/prelink/prelink-20061027/arm_eabi.patch297
-rw-r--r--packages/prelink/prelink-20061027/prelink.conf (renamed from packages/prelink/prelink-20060712/prelink.conf)0
-rw-r--r--packages/prelink/prelink-20061027/prelink.cron.daily (renamed from packages/prelink/prelink-20060712/prelink.cron.daily)0
-rw-r--r--packages/prelink/prelink-20061027/prelink.default (renamed from packages/prelink/prelink-20060712/prelink.default)0
-rw-r--r--packages/prelink/prelink_20060712.bb46
-rw-r--r--packages/prelink/prelink_20061027.bb46
-rw-r--r--packages/prismstumbler/prismstumbler_0.7.2.bb2
-rw-r--r--packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb2
-rw-r--r--packages/prismstumbler/prismstumbler_0.7.3.bb2
-rw-r--r--packages/psmisc/psmisc.inc2
-rw-r--r--packages/psmisc/psmisc_20.2.bb2
-rw-r--r--packages/psplash/files/psplash-init11
-rw-r--r--packages/psplash/psplash_svn.bb3
-rw-r--r--packages/pulseaudio/pulse.inc3
-rw-r--r--packages/pulseaudio/pulseaudio_0.9.6.bb2
-rw-r--r--packages/pulseaudio/pulseaudio_0.9.8.bb17
-rw-r--r--packages/pulseaudio/pulseaudio_0.9.9.bb18
-rw-r--r--packages/pwsafe/.mtn2git_empty0
-rw-r--r--packages/pwsafe/pwsafe_0.2.0.bb18
-rw-r--r--packages/python/python-2.5-manifest.inc116
-rw-r--r--packages/python/python-2.5.1/sitecustomize.py45
-rw-r--r--packages/python/python-dbus_0.81.1.bb6
-rw-r--r--packages/python/python-ecore_cvs.bb3
-rw-r--r--packages/python/python-edbus_cvs.bb8
-rw-r--r--packages/python/python-edje_cvs.bb3
-rw-r--r--packages/python/python-efl-examples.bb10
-rw-r--r--packages/python/python-efl.bb4
-rw-r--r--packages/python/python-efl.inc21
-rw-r--r--packages/python/python-emotion_cvs.bb3
-rw-r--r--packages/python/python-epsilon_cvs.bb3
-rw-r--r--packages/python/python-evas_cvs.bb3
-rw-r--r--packages/python/python-gammu_0.24.bb (renamed from packages/python/python-gammu_0.21.bb)0
-rw-r--r--packages/python/python-gsmd_svn.bb15
-rw-r--r--packages/python/python-pydirectfb/.mtn2git_empty0
-rw-r--r--packages/python/python-pydirectfb/fix-directfb-detection.patch16
-rw-r--r--packages/python/python-pygtk_2.10.4.bb8
-rw-r--r--packages/python/python-pyqt/assistantclient-fix.patch13
-rw-r--r--packages/python/python-pyqt_4.3.1.bb71
-rw-r--r--packages/python/python-pyqt_4.3.3.bb72
-rw-r--r--packages/python/python-sip_4.7.3.bb (renamed from packages/python/python-sip_4.7.1.bb)0
-rw-r--r--packages/python/python24-pyqt2_3.13.bb2
-rw-r--r--packages/python/python24-pyqwt2_3.10.bb2
-rw-r--r--packages/python/python_2.5.1.bb48
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch (renamed from packages/qemu/files/02_snapshot_use_tmpdir.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch (renamed from packages/qemu/files/03_machines_list_no_error.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch (renamed from packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch (renamed from packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch (renamed from packages/qemu/files/06_exit_segfault.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch (renamed from packages/qemu/files/10_signal_jobs.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch (renamed from packages/qemu/files/11_signal_sigaction.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch (renamed from packages/qemu/files/12_signal_powerpc_support.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch (renamed from packages/qemu/files/22_net_tuntap_stall.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch (renamed from packages/qemu/files/30_syscall_ipc.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch (renamed from packages/qemu/files/31_syscalls.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch (renamed from packages/qemu/files/32_syscall_sysctl.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch (renamed from packages/qemu/files/33_syscall_ppc_clone.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch (renamed from packages/qemu/files/39_syscall_fadvise64.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch (renamed from packages/qemu/files/41_arm_fpa_sigfpe.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch (renamed from packages/qemu/files/52_ne2000_return.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch (renamed from packages/qemu/files/61_safe_64bit_int.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch (renamed from packages/qemu/files/63_sparc_build.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch (renamed from packages/qemu/files/64_ppc_asm_constraints.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch (renamed from packages/qemu/files/65_kfreebsd.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch (renamed from packages/qemu/files/66_tls_ld.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch (renamed from packages/qemu/files/91-oh-sdl-cursor.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch (renamed from packages/qemu/files/93-oh-pl110-rgb.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch (renamed from packages/qemu/files/arm_nptl.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/compiler.patch (renamed from packages/qemu/files/compiler.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/configure.patch (renamed from packages/qemu/files/configure.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch (renamed from packages/qemu/files/fix_segfault.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/makefile.patch (renamed from packages/qemu/files/makefile.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/no-strip.patch (renamed from packages/qemu/files/no-strip.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch (renamed from packages/qemu/files/pl110_rgb-r0.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch (renamed from packages/qemu/files/qemu-0.9.0-nptl-update.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch (renamed from packages/qemu/files/qemu-0.9.0-nptl.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch (renamed from packages/qemu/files/qemu-amd64-32b-mapping-0.9.0.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch (renamed from packages/qemu/files/qemu-pci-irq-sharing.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch (renamed from packages/qemu/files/qemu-sdl-cursor.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch (renamed from packages/qemu/files/qemu-usb-wacom-0.8.2.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch (renamed from packages/qemu/files/qemu-usb-wacom-buttons.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch (renamed from packages/qemu/files/qemu-usb-wacom-pressure.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch (renamed from packages/qemu/files/workaround_bad_futex_headers.patch)0
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch853
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch12
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch217
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch881
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch21
-rw-r--r--packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch12
-rw-r--r--packages/qemu/qemu-0.9.1/.mtn2git_empty0
-rw-r--r--packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch23
-rw-r--r--packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch26
-rw-r--r--packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch17
-rw-r--r--packages/qemu/qemu-0.9.1/06_exit_segfault.patch45
-rw-r--r--packages/qemu/qemu-0.9.1/10_signal_jobs.patch26
-rw-r--r--packages/qemu/qemu-0.9.1/11_signal_sigaction.patch21
-rw-r--r--packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch18
-rw-r--r--packages/qemu/qemu-0.9.1/31_syscalls.patch48
-rw-r--r--packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch55
-rw-r--r--packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch22
-rw-r--r--packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch21
-rw-r--r--packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch104
-rw-r--r--packages/qemu/qemu-0.9.1/52_ne2000_return.patch17
-rw-r--r--packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch27
-rw-r--r--packages/qemu/qemu-0.9.1/63_sparc_build.patch18
-rw-r--r--packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch18
-rw-r--r--packages/qemu/qemu-0.9.1/65_kfreebsd.patch35
-rw-r--r--packages/qemu/qemu-0.9.1/66_tls_ld.patch55
-rw-r--r--packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch18
-rw-r--r--packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch28
-rw-r--r--packages/qemu/qemu-0.9.1/disable-error-in-configure.patch17
-rw-r--r--packages/qemu/qemu-0.9.1/fix_segfault.patch37
-rw-r--r--packages/qemu/qemu-0.9.1/no-strip.patch22
-rw-r--r--packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch219
-rw-r--r--packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch929
-rw-r--r--packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch37
-rw-r--r--packages/qemu/qemu-0.9.1/series25
-rw-r--r--packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch25
-rw-r--r--packages/qemu/qemu-gcc3-check.inc19
-rw-r--r--packages/qemu/qemu-native.inc8
-rw-r--r--packages/qemu/qemu-native_0.9.0+cvs.bb3
-rw-r--r--packages/qemu/qemu-native_0.9.1.bb2
-rw-r--r--packages/qemu/qemu-native_20070613.bb5
-rw-r--r--packages/qemu/qemu-native_cvs.bb1
-rw-r--r--packages/qemu/qemu_0.9.0+cvs.bb22
-rw-r--r--packages/qemu/qemu_0.9.1.bb48
-rw-r--r--packages/qemu/qemu_20070613.bb10
-rw-r--r--packages/qemu/qemu_cvs.bb67
-rw-r--r--packages/qmake/qmake2-native-2.10a/0001-fix-mkspecs.patch123
-rw-r--r--packages/qmake/qmake2-native.inc68
-rw-r--r--packages/qmake/qmake2-native/.mtn2git_empty0
-rw-r--r--packages/qmake/qmake2-native/0001-fix-mkspecs.patch146
-rw-r--r--packages/qmake/qmake2-native/0008-backport-qt-lib-infix.patch33
-rw-r--r--packages/qmake/qmake2-native/linux-oe-qmake.conf (renamed from packages/qmake/qmake2-native-2.10a/linux-oe-qmake.conf)0
-rw-r--r--packages/qmake/qmake2-native/qt-config.patch27
-rw-r--r--packages/qmake/qmake2-native/use-lflags-last.patch (renamed from packages/qmake/qmake2-native-2.10a/use-lflags-last.patch)0
-rw-r--r--packages/qmake/qmake2-native_2.10a.bb69
-rw-r--r--packages/qpe-games/crossword_0.0.3.bb2
-rw-r--r--packages/qpegps/files/qpegps.desktop3
-rw-r--r--packages/qpegps/qpegps.inc6
-rw-r--r--packages/qpegps/qpegps_0.9.2.3.3.bb2
-rw-r--r--packages/qpegps/qpegps_0.9.3.1.bb8
-rw-r--r--packages/qpegps/qpegps_0.9.3.bb1
-rw-r--r--packages/qpegps/qpegps_svn.bb15
-rw-r--r--packages/qpf-fonts/qpf-arabic_1.0.bb17
-rw-r--r--packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb29
-rw-r--r--packages/qpf-fonts/qpf-bitstream-vera_1.10.bb25
-rw-r--r--packages/qpf-fonts/qpf-font-common_1.0.bb8
-rw-r--r--packages/qpf-fonts/qpf-freemono_1.0.bb17
-rw-r--r--packages/qpf-fonts/qpf-freeserif_1.0.bb18
-rw-r--r--packages/qpf-fonts/qpf-helvetica_1.0.bb17
-rw-r--r--packages/qpf-fonts/qpf-hunkysans_0.3.0.bb18
-rw-r--r--packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb18
-rw-r--r--packages/qpf-fonts/qpf-qte_2.3.10.bb12
-rw-r--r--packages/qpf-fonts/qpf-qte_3.3.5.bb57
-rw-r--r--packages/qpf-fonts/qpf-terminus.bb10
-rw-r--r--packages/qpf-fonts/qpf-unifont_1.0.bb16
-rw-r--r--packages/qpf-fonts/qpf-unismall_1.0.0.bb21
-rw-r--r--packages/qpf-fonts/qpf-utopia_1.0.bb18
-rw-r--r--packages/qpf-fonts/qpf.inc32
-rw-r--r--packages/qpf-fonts/terminus.bb18
-rw-r--r--packages/qsvn/qsvn-qte_0.3.0.bb3
-rw-r--r--packages/qsvn/qsvn.inc25
-rw-r--r--packages/qsvn/qsvn_0.3.0.bb22
-rw-r--r--packages/qt/qt4-x11-free-4.3.2/0005-fix-mkspecs.patch123
-rw-r--r--packages/qt/qt4-x11-free_4.1.2.bb140
-rw-r--r--packages/qt/qt4-x11-free_4.3.2.bb186
-rw-r--r--packages/qt/qt4_arch.inc13
-rw-r--r--packages/qt4/.mtn2git_empty0
-rw-r--r--packages/qt4/files/.mtn2git_empty0
-rw-r--r--packages/qt4/files/0001-cross-compile.patch (renamed from packages/qt/qt4-x11-free-4.3.2/0001-cross-compile.patch)0
-rw-r--r--packages/qt4/files/0003-no-tools.patch (renamed from packages/qt/qt4-x11-free-4.3.2/0003-no-tools.patch)0
-rw-r--r--packages/qt4/files/0005-fix-mkspecs.patch133
-rw-r--r--packages/qt4/files/0008-backport-qt-lib-infix.patch166
-rw-r--r--packages/qt4/qt4-x11-free-4.1.2/.mtn2git_empty0
-rw-r--r--packages/qt4/qt4-x11-free-4.1.2/configurable-cpu-extensions.patch (renamed from packages/qt/qt4-x11-free-4.1.2/configurable-cpu-extensions.patch)0
-rw-r--r--packages/qt4/qt4-x11-free-4.1.2/cross-compile.patch (renamed from packages/qt/qt4-x11-free-4.1.2/cross-compile.patch)0
-rw-r--r--packages/qt4/qt4-x11-free-4.1.2/fix-asm-constraints.patch (renamed from packages/qt/qt4-x11-free-4.1.2/fix-asm-constraints.patch)0
-rw-r--r--packages/qt4/qt4-x11-free-4.1.2/fix-mkspecs.patch (renamed from packages/qt/qt4-x11-free-4.1.2/fix-mkspecs.patch)0
-rw-r--r--packages/qt4/qt4-x11-free-4.1.2/fix-resinit-declaration.patch (renamed from packages/qt/qt4-x11-free-4.1.2/fix-resinit-declaration.patch)0
-rw-r--r--packages/qt4/qt4-x11-free-4.1.2/gcc4_1.patch (renamed from packages/qt/qt4-x11-free-4.1.2/gcc4_1.patch)0
-rw-r--r--packages/qt4/qt4-x11-free-4.1.2/no-qmake.patch (renamed from packages/qt/qt4-x11-free-4.1.2/no-qmake.patch)0
-rw-r--r--packages/qt4/qt4-x11-free-4.1.2/no-tools.patch (renamed from packages/qt/qt4-x11-free-4.1.2/no-tools.patch)0
-rw-r--r--packages/qt4/qt4-x11-free-4.3.3/.mtn2git_empty0
-rw-r--r--packages/qt4/qt4-x11-free-4.3.3/0002-fix-resinit-declaration.patch (renamed from packages/qt/qt4-x11-free-4.3.2/0002-fix-resinit-declaration.patch)0
-rw-r--r--packages/qt4/qt4-x11-free-4.3.3/0004-no-qmake.patch (renamed from packages/qt/qt4-x11-free-4.3.2/0004-no-qmake.patch)0
-rw-r--r--packages/qt4/qt4-x11-free-4.3.3/0006-freetype-host-includes.patch (renamed from packages/qt/qt4-x11-free-4.3.2/0006-freetype-host-includes.patch)0
-rw-r--r--packages/qt4/qt4-x11-free-4.3.3/0007-openssl-host-includes.patch (renamed from packages/qt/qt4-x11-free-4.3.2/0007-openssl-host-includes.patch)0
-rw-r--r--packages/qt4/qt4-x11-free.inc28
-rw-r--r--packages/qt4/qt4-x11-free_4.1.2.bb141
-rw-r--r--packages/qt4/qt4-x11-free_4.3.3.bb5
-rw-r--r--packages/qt4/qt4_arch.inc23
-rw-r--r--packages/qt4/qt_configuration.inc82
-rw-r--r--packages/qt4/qt_depends.inc3
-rw-r--r--packages/qt4/qt_packaging.inc182
-rw-r--r--packages/qt4/qt_staging.inc40
-rw-r--r--packages/qt4/qtopia-core-4.3.3/.mtn2git_empty0
-rw-r--r--packages/qt4/qtopia-core-4.3.3/0006-freetype-host-includes.patch23
-rw-r--r--packages/qt4/qtopia-core-4.3.3/0007-openssl-host-includes.patch23
-rw-r--r--packages/qt4/qtopia-core-4.3.3/allow-configure-plugins.patch62
-rw-r--r--packages/qt4/qtopia-core-4.3.3/qconfig-oe.h45
-rw-r--r--packages/qt4/qtopia-core.inc43
-rw-r--r--packages/qt4/qtopia-core/.mtn2git_empty0
-rw-r--r--packages/qt4/qtopia-core/0004-no-qmake.patch25
-rw-r--r--packages/qt4/qtopia-core/build-tools.patch28
-rw-r--r--packages/qt4/qtopia-core/linux-oe-qmake.conf (renamed from packages/qte/qtopia-core/linux-oe-qmake.conf)0
-rw-r--r--packages/qt4/qtopia-core_4.3.3.bb6
-rwxr-xr-xpackages/qte-fonts-common/qte-fonts-common/update-qtfontdir74
-rw-r--r--packages/qte-fonts-common/qte-fonts-common_3.3.5.bb228
-rw-r--r--packages/qte/qte-common_2.3.10.inc2
-rw-r--r--packages/qte/qtopia-core_4.2.0.bb218
-rw-r--r--packages/qte/qtopia-core_4.3.2.bb222
-rw-r--r--packages/quilt/files/non-gnu.patch (renamed from packages/quilt/quilt-0.45/non-gnu.patch)0
-rw-r--r--packages/quilt/quilt-0.45/install.patch (renamed from packages/quilt/files/install.patch)0
-rw-r--r--packages/quilt/quilt-0.46/.mtn2git_empty0
-rw-r--r--packages/quilt/quilt-0.46/aclocal.patch126
-rw-r--r--packages/quilt/quilt-0.46/install.patch13
-rw-r--r--packages/quilt/quilt-native.inc2
-rw-r--r--packages/quilt/quilt-native_0.45.bb1
-rw-r--r--packages/quilt/quilt-native_0.46.bb1
-rw-r--r--packages/quilt/quilt-package.inc19
-rw-r--r--packages/quilt/quilt.inc5
-rw-r--r--packages/quilt/quilt_0.45.bb8
-rw-r--r--packages/quilt/quilt_0.45.inc3
-rw-r--r--packages/quilt/quilt_0.46.bb1
-rw-r--r--packages/qxmp/qxmp_1.0.bb2
-rw-r--r--packages/reiserfsprogs/reiserfsprogs_3.6.19.bb4
-rw-r--r--packages/roadmap/files/options.mk.patch34
-rw-r--r--packages/roadmap/files/qt/.mtn2git_empty0
-rw-r--r--packages/roadmap/files/qt/qt2-fixes.patch10
-rw-r--r--packages/roadmap/files/qt/qt_canvas.patch20
-rw-r--r--packages/roadmap/files/qt/qt_main.patch61
-rw-r--r--packages/roadmap/files/qt/roadmap_main.patch16
-rw-r--r--packages/roadmap/files/roadmap.desktop.patch16
-rw-r--r--packages/roadmap/files/roadmap_path.patch57
-rw-r--r--packages/roadmap/files/zroadgps.png (renamed from packages/zroadmap/files/zroadgps.png)bin1949 -> 1949 bytes
-rw-r--r--packages/roadmap/roadmap-gtk2.inc11
-rw-r--r--packages/roadmap/roadmap-gtk2_1.1.0.bb12
-rw-r--r--packages/roadmap/roadmap-gtk2_cvs.bb45
-rw-r--r--packages/roadmap/roadmap.inc18
-rw-r--r--packages/roadmap/zroadmap.inc23
-rw-r--r--packages/roadmap/zroadmap_1.1.0.bb16
-rw-r--r--packages/roadmap/zroadmap_cvs.bb13
-rw-r--r--packages/rp-pppoe/rp-pppoe-3.8/dont-swallow-errors.patch11
-rw-r--r--packages/rp-pppoe/rp-pppoe_3.8.bb3
-rw-r--r--packages/rt2x00/rt73-chumby_1.2.bb21
-rw-r--r--packages/rt2x00/rt73-k2wrlz_1.0.0.bb8
-rw-r--r--packages/rt2x00/rt73-k2wrlz_2.0.1.bb8
-rw-r--r--packages/sablevm/sablevm-classpath_1.1.9.bb2
-rw-r--r--packages/sablevm/sablevm-classpath_1.11.3.bb2
-rw-r--r--packages/sablevm/sablevm-classpath_1.12.bb2
-rw-r--r--packages/sablevm/sablevm_1.1.9.bb2
-rw-r--r--packages/sablevm/sablevm_1.11.3.bb2
-rw-r--r--packages/sablevm/sablevm_1.12.bb2
-rw-r--r--packages/sccd/files/scc.h2
-rw-r--r--packages/sccd/sccd_1.0.bb6
-rw-r--r--packages/schedstat-utils/schedstat-utils.bb2
-rw-r--r--packages/screen/screen_4.0.2.bb4
-rw-r--r--packages/settings-daemon/settings-daemon_svn.bb4
-rw-r--r--packages/sgml-common/sgml-common-native_0.6.3.bb25
-rw-r--r--packages/sgml-common/sgml-common_0.6.3.bb26
-rw-r--r--packages/sgmlspl/.mtn2git_empty0
-rw-r--r--packages/sgmlspl/files/.mtn2git_empty0
-rw-r--r--packages/sgmlspl/files/combined.patch454
-rw-r--r--packages/sgmlspl/sgmlspl-native_1.03ii.bb21
-rw-r--r--packages/shared-mime-info/shared-mime-info.inc2
-rw-r--r--packages/shared-mime-info/shared-mime-info_0.22.bb1
-rw-r--r--packages/sip/sip-native_4.7.3.bb (renamed from packages/sip/sip-native_4.7.1.bb)0
-rw-r--r--packages/slugos-init/files/leds62
-rw-r--r--packages/slugos-init/slugos-init_0.10.bb1
-rw-r--r--packages/slugos-init/slugos-init_4.8.bb148
-rw-r--r--packages/slutils/slutils_0.1.0.bb2
-rw-r--r--packages/spandsp/spandsp_0.0.3+0.0.4pre16.bb24
-rw-r--r--packages/spandsp/spandsp_0.0.3+0.0.4pre3.bb24
-rw-r--r--packages/spandsp/spandsp_0.0.3.bb13
-rw-r--r--packages/speech-dispatcher/.mtn2git_empty0
-rw-r--r--packages/speech-dispatcher/files/.mtn2git_empty0
-rw-r--r--packages/speech-dispatcher/files/configSpeechd.conf.in_00.patch31
-rw-r--r--packages/speech-dispatcher/files/speech-dispatcher.init42
-rw-r--r--packages/speech-dispatcher/files/srcMakefile.am.patch60
-rw-r--r--packages/speech-dispatcher/speech-dispatcher_0.6.5.bb56
-rw-r--r--packages/speex/speex_1.0.4.bb1
-rw-r--r--packages/speex/speex_1.1.12+1.2beta1.bb5
-rw-r--r--packages/speex/speex_1.1.12.bb5
-rw-r--r--packages/speex/speex_1.1.7.bb5
-rw-r--r--packages/sphyrna/sphyrna_svn.bb2
-rw-r--r--packages/supertux/files/.mtn2git_empty0
-rw-r--r--packages/supertux/files/gp2x.patch2614
-rw-r--r--packages/supertux/files/img-resize.sh28
-rw-r--r--packages/supertux/files/supertux-smallsize-data.tar.bz2bin0 -> 41782 bytes
-rw-r--r--packages/supertux/files/supertux.desktop20
-rw-r--r--packages/supertux/files/supertux.pngbin0 -> 4097 bytes
-rw-r--r--packages/supertux/supertux-qvga_0.1.3.bb57
-rw-r--r--packages/supertux/supertux_0.1.2.bb16
-rw-r--r--packages/supertux/supertux_0.1.3.bb22
-rw-r--r--packages/swt/.mtn2git_empty0
-rw-r--r--packages/swt/files/.mtn2git_empty0
-rw-r--r--packages/swt/files/Makefile78
-rw-r--r--packages/swt/files/swt-hildon.patch128
-rw-r--r--packages/swt/swt-gtk.inc58
-rw-r--r--packages/swt/swt3.3-gtk_3.3.1.bb10
-rw-r--r--packages/swt/swt3.4-gtk-hildon_3.3+3.4M3.bb7
-rw-r--r--packages/swt/swt3.4-gtk_3.3+3.4M3.bb12
-rw-r--r--packages/sylpheed/claws-plugin-mailmbox_1.14.bb2
-rw-r--r--packages/sysfsutils/sysfsutils_2.0.0.bb4
-rw-r--r--packages/tasks/task-base.bb17
-rw-r--r--packages/tasks/task-boot.bb2
-rw-r--r--packages/tasks/task-devimage.bb3
-rw-r--r--packages/tasks/task-nas-server.bb102
-rw-r--r--packages/tasks/task-openmoko-base.bb29
-rw-r--r--packages/tasks/task-openmoko-debug.bb3
-rw-r--r--packages/tasks/task-openmoko-examples.bb6
-rw-r--r--packages/tasks/task-openmoko-feed.bb6
-rw-r--r--packages/tasks/task-openmoko-games.bb14
-rw-r--r--packages/tasks/task-openmoko-linux.bb24
-rw-r--r--packages/tasks/task-openmoko-net.bb15
-rw-r--r--packages/tasks/task-openmoko-phone.bb18
-rw-r--r--packages/tasks/task-openmoko-pim.bb23
-rw-r--r--packages/tasks/task-openmoko-python-devel.bb11
-rw-r--r--packages/tasks/task-openmoko-toolchain-host.bb13
-rw-r--r--packages/tasks/task-openmoko-toolchain-target.bb30
-rw-r--r--packages/tasks/task-openmoko-ui.bb57
-rw-r--r--packages/tasks/task-openmoko.bb140
-rw-r--r--packages/tasks/task-openprotium.bb52
-rw-r--r--packages/tasks/task-opie-16mb.bb2
-rw-r--r--packages/tasks/task-opie.bb2
-rw-r--r--packages/tasks/task-python-everything.bb6
-rw-r--r--packages/tasks/task-qpe.bb2
-rw-r--r--packages/tasks/task-qtopia-core-console.bb13
-rw-r--r--packages/tasks/task-qtopia-core-gui.bb11
-rw-r--r--packages/tasks/task-slugos.bb39
-rw-r--r--packages/tasks/task-toolchain-openmoko-sdk.bb31
-rw-r--r--packages/tcp-wrappers/tcp-wrappers_7.6.bb2
-rw-r--r--packages/tea/tea_17.3.5.bb3
-rw-r--r--packages/telepathy/telepathy-mission-control_4.21.bb6
-rw-r--r--packages/telepathy/telepathy-mission-control_4.22.bb6
-rw-r--r--packages/telepathy/telepathy-mission-control_4.45.bb6
-rw-r--r--packages/termcap/termcap_11.0.1.bb2
-rw-r--r--packages/tetex/tetex-texmf_3.0.bb2
-rw-r--r--packages/texmaker/texmaker_1.3.bb2
-rw-r--r--packages/timezones/timezones_1.2.0.bb32
-rw-r--r--packages/tmake/tmake_1.11.bb2
-rw-r--r--packages/tn5250/tn5250_0.16.5.bb2
-rw-r--r--packages/ttf-fonts/ttf-bitstream-vera_1.10.bb14
-rw-r--r--packages/ttf-fonts/ttf-dejavu_2.18.bb10
-rw-r--r--packages/ttf-fonts/ttf-gentium_1.02.bb10
-rw-r--r--packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb11
-rw-r--r--packages/ttf-fonts/ttf-liberation_0.2.bb9
-rw-r--r--packages/ttf-fonts/ttf-sazanami_20040629.bb4
-rw-r--r--packages/ttf-fonts/ttf.inc22
-rw-r--r--packages/twisted/twisted_2.5.0.bb2
-rw-r--r--packages/tzcode/tzcode-native_2007k.bb (renamed from packages/tzcode/tzcode-native_2007e.bb)0
-rw-r--r--packages/tzdata/tzdata_2007e.bb158
-rw-r--r--packages/tzdata/tzdata_2007k.bb161
-rw-r--r--packages/u-boot/.mtn2git_empty0
-rw-r--r--packages/u-boot/files/.mtn2git_empty0
-rw-r--r--packages/u-boot/files/arm_flags.patch (renamed from packages/uboot/files/arm_flags.patch)0
-rw-r--r--packages/u-boot/files/boot-menu-gfx-fix-openmoko-bug-1140.patch29
-rw-r--r--packages/u-boot/files/fix-arm920t-eabi.patch (renamed from packages/uboot/files/fix-arm920t-eabi.patch)0
-rw-r--r--packages/u-boot/files/fix-data-abort-from-sd-ombug799.patch11
-rw-r--r--packages/u-boot/files/makefile-no-dirafter.patch (renamed from packages/uboot/files/makefile-no-dirafter.patch)0
-rw-r--r--packages/u-boot/files/u-boot-20061030-ext2load_hex.patch (renamed from packages/uboot/files/u-boot-20061030-ext2load_hex.patch)0
-rw-r--r--packages/u-boot/files/uboot-20070311-tools_makefile_ln_sf.patch (renamed from packages/uboot/files/uboot-20070311-tools_makefile_ln_sf.patch)0
-rw-r--r--packages/u-boot/files/uboot-eabi-fix-HACK.patch (renamed from packages/uboot/files/uboot-eabi-fix-HACK.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.2/.mtn2git_empty0
-rw-r--r--packages/u-boot/u-boot-1.1.2/arm_flags.patch (renamed from packages/uboot/u-boot-1.1.2/arm_flags.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.2/cmd-arm-linux.patch (renamed from packages/uboot/u-boot-1.1.2/cmd-arm-linux.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.2/command-names.patch (renamed from packages/uboot/u-boot-1.1.2/command-names.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.2/mnci-jffs2.patch (renamed from packages/uboot/u-boot-1.1.2/mnci-jffs2.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.2/mnci.patch (renamed from packages/uboot/u-boot-1.1.2/mnci.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch (renamed from packages/uboot/u-boot-1.1.2/u-boot-1.1.2-neon.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.2/u-boot-emetec.patch (renamed from packages/uboot/u-boot-1.1.2/u-boot-emetec.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/.mtn2git_empty0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-autoscript.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-autoscript.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-base.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-base.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-crc-warning-not-so-scary.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-crc-warning-not-so-scary.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-dht-walnut-df2.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-dht-walnut-df2.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-flash-protect-fixup.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-flash-protect-fixup.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-fw_printenv.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-fw_printenv.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-install.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-install.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-jerase-cmd.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-jerase-cmd.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-jffs2-new-nodetypes.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-jffs2-new-nodetypes.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-loadb-safe.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-loadb-safe.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-make381-fix.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-make381-fix.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-mmc-init.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-mmc-init.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-mmcclk-alternate.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-mmcclk-alternate.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-smc91x-multi.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-smc91x-multi.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.4/u-boot-zzz-osx.patch (renamed from packages/uboot/u-boot-1.1.4/u-boot-zzz-osx.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.6/.mtn2git_empty0
-rw-r--r--packages/u-boot/u-boot-1.1.6/devkit-idp.patch (renamed from packages/uboot/u-boot-1.1.6/devkit-idp.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.6/sarge-uboot.patch (renamed from packages/uboot/u-boot-1.1.6/sarge-uboot.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-83xx-optimizations.patch (renamed from packages/uboot/u-boot-1.1.6/u-boot-1.1.6-83xx-optimizations.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-support-for-the-MPC832XEMDS-board.patch (renamed from packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-support-for-the-MPC832XEMDS-board.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-the-MPC832XEMDS-board-readme.patch (renamed from packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-the-MPC832XEMDS-board-readme.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Added-MPC8323E-RDB-board-support-2.patch (renamed from packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Added-MPC8323E-RDB-board-support-2.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Fix-the-UEC-driver-bug-of-QE.patch (renamed from packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Fix-the-UEC-driver-bug-of-QE.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-UEC-remove-udelay.patch (renamed from packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-UEC-remove-udelay.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-mpc83xx-20061206.patch (renamed from packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-mpc83xx-20061206.patch)0
-rw-r--r--packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-streamline-the-83xx-immr-head-file.patch (renamed from packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-streamline-the-83xx-immr-head-file.patch)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/.mtn2git_empty0
-rw-r--r--packages/u-boot/u-boot-1.2.0/defconfig_lsppchd (renamed from packages/uboot/u-boot-1.2.0/defconfig_lsppchd)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/defconfig_lsppchg (renamed from packages/uboot/u-boot-1.2.0/defconfig_lsppchg)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/env-Makefile.patch19
-rw-r--r--packages/u-boot/u-boot-1.2.0/fic-gta01/.mtn2git_empty0
-rw-r--r--packages/u-boot/u-boot-1.2.0/fic-gta01/fw_env.config (renamed from packages/uboot/u-boot-1.2.0/fic-gta01/fw_env.config)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/fw_env.c.patch (renamed from packages/uboot/u-boot-1.2.0/fw_env.c.patch)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/fw_env.config (renamed from packages/uboot/u-boot-1.2.0/fw_env.config)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/kurobox_powerpc-20061105_target.gitdiff (renamed from packages/uboot/u-boot-1.2.0/kurobox_powerpc-20061105_target.gitdiff)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/qnap.diff (renamed from packages/uboot/u-boot-1.2.0/qnap.diff)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/tools-Makefile.patch (renamed from packages/uboot/u-boot-1.2.0/tools-Makefile.patch)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/turbostation/.mtn2git_empty0
-rw-r--r--packages/u-boot/u-boot-1.2.0/turbostation/fw_env.config (renamed from packages/uboot/u-boot-1.2.0/turbostation/fw_env.config)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/u-boot-kurobox-fdt.patch (renamed from packages/uboot/u-boot-1.2.0/u-boot-kurobox-fdt.patch)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/u-boot-kurobox.patch (renamed from packages/uboot/u-boot-1.2.0/u-boot-kurobox.patch)0
-rw-r--r--packages/u-boot/u-boot-1.2.0/uboot-qnap.diff (renamed from packages/uboot/u-boot-1.2.0/uboot-qnap.diff)0
-rw-r--r--packages/u-boot/u-boot-1.3.1/.mtn2git_empty0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/.mtn2git_empty0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/bbt-create-optional.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/bbt-create-optional.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/bbt-scan-second.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/bbt-scan-second.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/boot-from-ram-and-nand.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-and-nand.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/boot-from-ram-reloc.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-reloc.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/boot-menu.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/boot-menu.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/cmd-unzip.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/cmd-unzip.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/console-ansi.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/console-ansi.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/default-env.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/default-env.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/dontask.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/dontask.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/dynenv-harden.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/dynenv-harden.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/early-powerdown.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/early-powerdown.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/enable-splash-bmp.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/enable-splash-bmp.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/env_nand_oob.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/ext2load_hex.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/ext2load_hex.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/lowlevel_foo.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/lowlevel_foo.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/mmcinit-power-up.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/mmcinit-power-up.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/nand-badisbad.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/nand-badisbad.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/nand-createbbt.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/nand-createbbt.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/nand-dynamic_partitions.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/nand-dynamic_partitions.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/nand-otp.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/nand-otp.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/nand-read_write_oob.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/nand-read_write_oob.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/neo1973-chargefast.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/neo1973-chargefast.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/preboot-override.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/preboot-override.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/raise-limits.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/raise-limits.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/series (renamed from packages/uboot/u-boot-mkimage-openmoko-native/series)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/splashimage-command.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/splashimage-command.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-20061030-qt2410.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-qt2410.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-arm920_s3c2410_irq_demux.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920_s3c2410_irq_demux.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-arm920t-gd_in_irq.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920t-gd_in_irq.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-bbt-quiet.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-bbt-quiet.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-cmd_s3c2410.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-cmd_s3c2410.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-cramfs_but_no_jffs2.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-cramfs_but_no_jffs2.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-dfu.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-dfu.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-gta02.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-gta02.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-hxd8.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-hxd8.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-license.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-license.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-machtypes.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-machtypes.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-mokoversion.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-mokoversion.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-nand-markbad-reallybad.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-nand-markbad-reallybad.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-neo1973-defaultenv.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-defaultenv.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-neo1973-resume.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-resume.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-misccr-definitions.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-misccr-definitions.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-mmc.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-mmc.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-nand.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-nand.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-norelocate_irqvec_cpy.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-norelocate_irqvec_cpy.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-warnings-fix.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-warnings-fix.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410_fb.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_fb.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410_udc.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_udc.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2440.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2440.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2443.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2443.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-smdk2440.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2440.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-smdk2443.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2443.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-strtoul.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-strtoul.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/uboot-usbtty-acm.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/uboot-usbtty-acm.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/unbusy-i2c.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/unbusy-i2c.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/usbdcore-multiple_configs.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/usbdcore-multiple_configs.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native/wakeup-reason-nand-only.patch (renamed from packages/uboot/u-boot-mkimage-openmoko-native/wakeup-reason-nand-only.patch)0
-rw-r--r--packages/u-boot/u-boot-mkimage-openmoko-native_oe.bb86
-rw-r--r--packages/u-boot/u-boot-omap2430sdp-1.1.4/.mtn2git_empty0
-rw-r--r--packages/u-boot/u-boot-omap2430sdp-1.1.4/u-boot-makefile-3.81.patch (renamed from packages/uboot/u-boot-omap2430sdp-1.1.4/u-boot-makefile-3.81.patch)0
-rw-r--r--packages/u-boot/u-boot-omap2430sdp_1.1.4.bb (renamed from packages/uboot/u-boot-omap2430sdp_1.1.4.bb)0
-rw-r--r--packages/u-boot/u-boot-openmoko-devel_git.bb70
-rw-r--r--packages/u-boot/u-boot-openmoko_1.2.0+git+svn.bb86
-rw-r--r--packages/u-boot/u-boot-openmoko_1.3.1+git+svn.bb85
-rw-r--r--packages/u-boot/u-boot-openmoko_svn.bb79
-rw-r--r--packages/u-boot/u-boot-utils-native_1.2.0.bb27
-rw-r--r--packages/u-boot/u-boot-utils_1.2.0.bb38
-rw-r--r--packages/u-boot/u-boot.inc (renamed from packages/uboot/u-boot.inc)0
-rw-r--r--packages/u-boot/u-boot_1.1.2.bb (renamed from packages/uboot/u-boot_1.1.2.bb)0
-rw-r--r--packages/u-boot/u-boot_1.1.4.bb (renamed from packages/uboot/u-boot_1.1.4.bb)0
-rw-r--r--packages/u-boot/u-boot_1.1.6.bb (renamed from packages/uboot/u-boot_1.1.6.bb)0
-rw-r--r--packages/u-boot/u-boot_1.2.0.bb (renamed from packages/uboot/u-boot_1.2.0.bb)0
-rw-r--r--packages/u-boot/u-boot_1.3.0.bb (renamed from packages/uboot/u-boot_1.3.0.bb)0
-rw-r--r--packages/u-boot/u-boot_1.3.1.bb9
-rw-r--r--packages/u-boot/u-boot_git.bb (renamed from packages/uboot/u-boot_git.bb)0
-rw-r--r--packages/uboot/files/glamo-ram-init.patch21
-rw-r--r--packages/uboot/u-boot-1.2.0/env-Makefile.patch24
-rw-r--r--packages/uboot/u-boot-mkimage-openmoko-native_oe.bb83
-rw-r--r--packages/uboot/uboot-openmoko_1.2.0+gitf34024d4a328e6edd906456da98d2c537155c4f7+svn2943.bb86
-rw-r--r--packages/uboot/uboot-openmoko_svn.bb88
-rw-r--r--packages/uboot/uboot-utils_1.2.0.bb25
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch2135
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch40
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch1139
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch24
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch30
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch19
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch25
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch24
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch107
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch526
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch23
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch40
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch23
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch28
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch105
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch27
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch48
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch54
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch4322
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch4080
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/uClibc.config31
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec41
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch14
-rw-r--r--packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch16
-rw-r--r--packages/uclibc/uclibc.inc15
-rw-r--r--packages/uclibc/uclibc_0.9.28.bb30
-rw-r--r--packages/udhcp/udhcp_0.9.8.bb2
-rw-r--r--packages/uicmoc/files/.mtn2git_empty0
-rw-r--r--packages/uicmoc/files/configure-fix.patch13
-rw-r--r--packages/uicmoc/uicmoc-native_2.3.10.bb2
-rw-r--r--packages/uicmoc/uicmoc4-native.inc30
-rw-r--r--packages/uicmoc/uicmoc4-native_4.3.3.bb (renamed from packages/uicmoc/uicmoc4-native_4.3.2.bb)0
-rw-r--r--packages/upslug/upslug2.inc1
-rw-r--r--packages/usrp/usrp_0.12.bb2
-rw-r--r--packages/util-linux-ng/.mtn2git_empty0
-rw-r--r--packages/util-linux-ng/util-linux-ng.inc216
-rw-r--r--packages/util-linux-ng/util-linux-ng_2.13.1.bb7
-rw-r--r--packages/util-linux/files/fdiskbsdlabel-avr32.patch11
-rw-r--r--packages/util-linux/util-linux_2.12r.bb3
-rw-r--r--packages/vala/vala-native_0.1.4.bb5
-rw-r--r--packages/vala/vala-native_0.1.5.bb5
-rw-r--r--packages/vala/vala_0.1.5.bb (renamed from packages/vala/vala_0.1.4.bb)0
-rw-r--r--packages/vlc/vlc-gpe_0.7.2.bb4
-rw-r--r--packages/vlc/vlc-gpe_0.8.1.bb4
-rw-r--r--packages/vlc/vlc-gpe_0.8.4.bb4
-rw-r--r--packages/vnc/fbvncserver-kmodule_0.9.4.bb (renamed from packages/fbvncserver/fbvncserver-kmodule_0.9.4.bb)0
-rw-r--r--packages/vnc/fbvncserver_0.9.4.bb51
-rw-r--r--packages/vnc/files/.mtn2git_empty0
-rw-r--r--packages/vnc/files/buildfix.patch (renamed from packages/fbvncserver/files/buildfix.patch)0
-rw-r--r--packages/vnc/files/init (renamed from packages/fbvncserver/files/init)0
-rw-r--r--packages/vnc/files/ipaq.patch (renamed from packages/fbvncserver/files/ipaq.patch)0
-rw-r--r--packages/vnc/files/kernelinclude.patch (renamed from packages/fbvncserver/files/kernelinclude.patch)0
-rw-r--r--packages/vnc/files/libvncs0.6.patch (renamed from packages/fbvncserver/files/libvncs0.6.patch)0
-rw-r--r--packages/vnc/files/paths.patch (renamed from packages/fbvncserver/files/paths.patch)0
-rw-r--r--packages/vnc/libvncserver/.mtn2git_empty0
-rw-r--r--packages/vnc/libvncserver/configure_ac.patch15
-rw-r--r--packages/vnc/libvncserver_0.9.1.bb25
-rw-r--r--packages/vnc/libvncserver_0.9.bb32
-rw-r--r--packages/vnc/x11vnc_0.9.3.bb (renamed from packages/x11vnc/x11vnc_0.9.3.bb)0
-rw-r--r--packages/vsftpd/vsftpd-charconv-2.0.5/.mtn2git_empty0
-rw-r--r--packages/vsftpd/vsftpd-charconv-2.0.5/vsftpd-charconv.patch4365
-rw-r--r--packages/vsftpd/vsftpd-charconv_2.0.5.bb50
-rw-r--r--packages/vte/vte.inc15
-rw-r--r--packages/vte/vte_0.16.8.bb16
-rw-r--r--packages/vte/vte_0.16.9.bb2
-rw-r--r--packages/webkit/files/GNUmakefile.am314
-rw-r--r--packages/webkit/files/WebKit.pri47
-rw-r--r--packages/webkit/files/WebKit.pro14
-rw-r--r--packages/webkit/files/autogen.sh40
-rw-r--r--packages/webkit/files/configure.ac384
-rw-r--r--packages/webkit/webkit-gtk_svn.bb12
-rw-r--r--packages/webkit/webkit-qt.inc2
-rw-r--r--packages/webkit/webkit.inc8
-rw-r--r--packages/wifistix/wifistix-modules/sk_buff.patch18
-rw-r--r--packages/wifistix/wifistix-modules_5.0.16.p0.bb1
-rw-r--r--packages/wlan-ng/wlan-ng-modules.inc2
-rw-r--r--packages/wrt/wrt-utils.bb2
-rw-r--r--packages/xapian/.mtn2git_empty0
-rw-r--r--packages/xapian/xapian-core_1.0.5.bb16
-rw-r--r--packages/xapian/xapian-quickstartindex_1.0.bb18
-rw-r--r--packages/xautomation/.mtn2git_empty0
-rw-r--r--packages/xautomation/files/.mtn2git_empty0
-rw-r--r--packages/xautomation/files/remove-man.patch8
-rw-r--r--packages/xautomation/xautomation.inc9
-rw-r--r--packages/xautomation/xautomation_1.00.bb3
-rw-r--r--packages/xcb/libxcb_0.9.bb2
-rw-r--r--packages/xcursor-transparent-theme/files/.mtn2git_empty0
-rw-r--r--packages/xcursor-transparent-theme/files/fix_watch_cursor.patch (renamed from packages/xcursor-transparent-theme/xcursor-transparent-theme-0.1.1/fix_watch_cursor.patch)0
-rw-r--r--packages/xcursor-transparent-theme/files/use-relative-symlinks.patch (renamed from packages/xcursor-transparent-theme/xcursor-transparent-theme-0.1.1/use-relative-symlinks.patch)0
-rw-r--r--packages/xcursor-transparent-theme/xcursor-transparent-theme_0.1.1.bb6
-rw-r--r--packages/xcursor-transparent-theme/xcursor-watchonly-theme/.mtn2git_empty0
-rwxr-xr-xpackages/xcursor-transparent-theme/xcursor-watchonly-theme/20xcursor-transparent7
-rw-r--r--packages/xcursor-transparent-theme/xcursor-watchonly-theme/skip_watch_cursor.patch23
-rw-r--r--packages/xcursor-transparent-theme/xcursor-watchonly-theme_0.1.1.bb23
-rw-r--r--packages/xerces-c/xerces-c_2.6.0.bb47
-rw-r--r--packages/xerces-c/xerces-c_2.7.0.bb47
-rw-r--r--packages/xerces-c/xerces-c_2.8.0.bb36
-rw-r--r--packages/xmlpull/.mtn2git_empty0
-rw-r--r--packages/xmlpull/files/.mtn2git_empty0
-rw-r--r--packages/xmlpull/files/makefile.patch411
-rw-r--r--packages/xmlpull/xmlpull_1.1.3.4c.bb35
-rw-r--r--packages/xmms/xmms-mad_0.10.bb2
-rw-r--r--packages/xmms/xmms-tremor_1.0.bb2
-rw-r--r--packages/xorg-app/bdftopcf-native_1.0.0.bb13
-rw-r--r--packages/xorg-app/bitmap_1.0.2.bb5
-rw-r--r--packages/xorg-app/fslsfonts_1.0.1.bb5
-rw-r--r--packages/xorg-app/fstobdf_1.0.2.bb5
-rw-r--r--packages/xorg-app/lbxproxy_1.0.1.bb7
-rw-r--r--packages/xorg-app/listres_1.0.1.bb5
-rw-r--r--packages/xorg-app/mkcfm_1.0.1.bb5
-rw-r--r--packages/xorg-app/oclock_1.0.1.bb5
-rw-r--r--packages/xorg-app/proxymngr_1.0.1.bb5
-rw-r--r--packages/xorg-app/rgb_1.0.1.bb8
-rw-r--r--packages/xorg-app/rstart_1.0.2.bb5
-rw-r--r--packages/xorg-app/scripts_1.0.1.bb6
-rw-r--r--packages/xorg-app/showfont_1.0.1.bb5
-rw-r--r--packages/xorg-app/smproxy_1.0.2.bb5
-rw-r--r--packages/xorg-app/viewres_1.0.1.bb5
-rw-r--r--packages/xorg-app/xbiff_1.0.1.bb5
-rw-r--r--packages/xorg-app/xcalc_1.0.1.bb5
-rw-r--r--packages/xorg-app/xclipboard_1.0.1.bb5
-rw-r--r--packages/xorg-app/xclock_1.0.2.bb5
-rw-r--r--packages/xorg-app/xcmsdb_1.0.1.bb5
-rw-r--r--packages/xorg-app/xconsole_1.0.2.bb5
-rw-r--r--packages/xorg-app/xcursorgen_1.0.1.bb5
-rw-r--r--packages/xorg-app/xditview_1.0.1.bb5
-rw-r--r--packages/xorg-app/xdriinfo_1.0.1.bb5
-rw-r--r--packages/xorg-app/xedit_1.0.2.bb5
-rw-r--r--packages/xorg-app/xeyes_1.0.1.bb4
-rw-r--r--packages/xorg-app/xfd_1.0.1.bb5
-rw-r--r--packages/xorg-app/xfindproxy_1.0.1.bb5
-rw-r--r--packages/xorg-app/xfsinfo_1.0.1.bb5
-rw-r--r--packages/xorg-app/xfwp_1.0.1.bb5
-rw-r--r--packages/xorg-app/xgamma_1.0.1.bb5
-rw-r--r--packages/xorg-app/xgc_1.0.1.bb5
-rw-r--r--packages/xorg-app/xkbevd_1.0.2.bb5
-rw-r--r--packages/xorg-app/xkbprint_1.0.1.bb5
-rw-r--r--packages/xorg-app/xkill_1.0.1.bb5
-rw-r--r--packages/xorg-app/xload_1.0.1.bb5
-rw-r--r--packages/xorg-app/xlogo_1.0.1.bb5
-rw-r--r--packages/xorg-app/xlsatoms_1.0.1.bb5
-rw-r--r--packages/xorg-app/xlsclients_1.0.1.bb5
-rw-r--r--packages/xorg-app/xmag_1.0.1.bb5
-rw-r--r--packages/xorg-app/xman_1.0.2.bb7
-rw-r--r--packages/xorg-app/xmessage_1.0.1.bb7
-rw-r--r--packages/xorg-app/xmh_1.0.1.bb5
-rw-r--r--packages/xorg-app/xmore_1.0.1.bb5
-rw-r--r--packages/xorg-app/xphelloworld_1.0.1.bb5
-rw-r--r--packages/xorg-app/xplsprinters_1.0.1.bb5
-rw-r--r--packages/xorg-app/xpr_1.0.1.bb5
-rw-r--r--packages/xorg-app/xprehashprinterlist_1.0.1.bb5
-rw-r--r--packages/xorg-app/xrefresh_1.0.2.bb5
-rw-r--r--packages/xorg-app/xrx_1.0.1.bb5
-rw-r--r--packages/xorg-app/xsetmode_1.0.0.bb5
-rw-r--r--packages/xorg-app/xsetpointer_1.0.0.bb5
-rw-r--r--packages/xorg-app/xsm_1.0.1.bb7
-rw-r--r--packages/xorg-app/xstdcmap_1.0.1.bb5
-rw-r--r--packages/xorg-app/xtrap_1.0.2.bb5
-rw-r--r--packages/xorg-app/xvidtune_1.0.1.bb5
-rw-r--r--packages/xorg-app/xwd_1.0.1.bb5
-rw-r--r--packages/xorg-app/xwininfo_1.0.2.bb5
-rw-r--r--packages/xorg-app/xwud_1.0.1.bb5
-rw-r--r--packages/xorg-data/xcursor-themes_1.0.1.bb5
-rw-r--r--packages/xorg-data/xkbdata_1.0.1.bb7
-rw-r--r--packages/xorg-doc/xorg-doc-common.inc5
-rw-r--r--packages/xorg-doc/xorg-docs_1.0.1.bb11
-rw-r--r--packages/xorg-doc/xorg-docs_1.2.bb11
-rw-r--r--packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb4
-rw-r--r--packages/xorg-doc/xorg-sgml-doctools_1.2.bb4
-rw-r--r--packages/xorg-driver/xf86-input-acecad_1.1.0.bb3
-rw-r--r--packages/xorg-driver/xf86-input-aiptek_1.0.1.bb2
-rw-r--r--packages/xorg-driver/xf86-input-calcomp_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-input-citron_2.2.0.bb3
-rw-r--r--packages/xorg-driver/xf86-input-digitaledge_1.1.0.bb3
-rw-r--r--packages/xorg-driver/xf86-input-dmc_1.1.0.bb3
-rw-r--r--packages/xorg-driver/xf86-input-dynapro_1.1.0.bb3
-rw-r--r--packages/xorg-driver/xf86-input-elo2300_1.1.0.bb3
-rw-r--r--packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb2
-rw-r--r--packages/xorg-driver/xf86-input-fpit_1.1.0.bb3
-rw-r--r--packages/xorg-driver/xf86-input-hyperpen_1.1.0.bb3
-rw-r--r--packages/xorg-driver/xf86-input-jamstudio_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-input-joystick_1.1.0.bb3
-rw-r--r--packages/xorg-driver/xf86-input-magellan_1.1.0.bb3
-rw-r--r--packages/xorg-driver/xf86-input-magictouch_1.0.0.5.bb3
-rw-r--r--packages/xorg-driver/xf86-input-microtouch_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-input-mutouch_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-input-palmax_1.1.0.bb3
-rw-r--r--packages/xorg-driver/xf86-input-spaceorb_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-input-summa_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-input-tek4957_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-input-ur98_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-input-vmmouse_12.4.0.bb7
-rw-r--r--packages/xorg-driver/xf86-input-void_1.1.0.bb3
-rw-r--r--packages/xorg-driver/xf86-video-apm_1.1.1.bb7
-rw-r--r--packages/xorg-driver/xf86-video-ark_0.6.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-ast_0.81.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-chips_1.1.1.bb2
-rw-r--r--packages/xorg-driver/xf86-video-cirrus_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-cyrix_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-dummy_0.2.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-glint_1.1.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-i128_1.1.0.5.bb5
-rw-r--r--packages/xorg-driver/xf86-video-i740_1.1.0.bb5
-rw-r--r--packages/xorg-driver/xf86-video-imstt_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-mga_1.4.1.bb2
-rw-r--r--packages/xorg-driver/xf86-video-neomagic_1.1.1.bb8
-rw-r--r--packages/xorg-driver/xf86-video-s3virge_1.9.1.bb2
-rw-r--r--packages/xorg-driver/xf86-video-sisusb_0.8.1.bb6
-rw-r--r--packages/xorg-driver/xf86-video-sunbw2_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-suncg14_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-suncg3_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-suncg6_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-sunffb_1.1.0.bb4
-rw-r--r--packages/xorg-driver/xf86-video-sunleo_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-suntcx_1.1.0.bb2
-rw-r--r--packages/xorg-driver/xf86-video-tga_1.1.0.bb8
-rw-r--r--packages/xorg-driver/xf86-video-v4l_0.1.1.bb5
-rw-r--r--packages/xorg-driver/xf86-video-vga_4.1.0.bb2
-rw-r--r--packages/xorg-driver/xorg-driver-common.inc3
-rw-r--r--packages/xorg-font/font-adobe-100dpi_1.0.0.bb3
-rw-r--r--packages/xorg-font/font-adobe-75dpi_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb5
-rw-r--r--packages/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb6
-rw-r--r--packages/xorg-font/font-adobe-utopia-type1_1.0.1.bb6
-rw-r--r--packages/xorg-font/font-alias_1.0.1.bb8
-rw-r--r--packages/xorg-font/font-arabic-misc_1.0.0.bb7
-rw-r--r--packages/xorg-font/font-bh-100dpi_1.0.0.bb3
-rw-r--r--packages/xorg-font/font-bh-75dpi_1.0.0.bb3
-rw-r--r--packages/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb3
-rw-r--r--packages/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb3
-rw-r--r--packages/xorg-font/font-bh-ttf_1.0.0.bb3
-rw-r--r--packages/xorg-font/font-bh-type1_1.0.0.bb3
-rw-r--r--packages/xorg-font/font-bitstream-100dpi_1.0.0.bb3
-rw-r--r--packages/xorg-font/font-bitstream-75dpi_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-bitstream-speedo_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-bitstream-type1_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-cronyx-cyrillic_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-cursor-misc_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-daewoo-misc_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-dec-misc_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-ibm-type1_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-isas-misc_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-jis-misc_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-micro-misc_1.0.0.bb4
-rw-r--r--packages/xorg-font/font-misc-cyrillic_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-misc-ethiopic_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-misc-meltho_1.0.0.bb5
-rw-r--r--packages/xorg-font/font-mutt-misc_1.0.0.bb7
-rw-r--r--packages/xorg-font/font-schumacher-misc_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-screen-cyrillic_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-sony-misc_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-sun-misc_1.0.0.bb2
-rw-r--r--packages/xorg-font/font-util-native_1.0.1.bb13
-rw-r--r--packages/xorg-font/font-util_1.0.1.bb9
-rw-r--r--packages/xorg-font/font-winitzki-cyrillic_1.0.0.bb3
-rw-r--r--packages/xorg-font/font-xfree86-type1_1.0.0.bb3
-rw-r--r--packages/xorg-font/xfonts-xorg_6.8.bb2
-rw-r--r--packages/xorg-font/xorg-font-common.inc3
-rw-r--r--packages/xorg-xserver/files/.mtn2git_empty0
-rw-r--r--packages/xorg-xserver/files/xorg-avr32-support.diff19
-rw-r--r--packages/xorg-xserver/xorg-xserver-common.inc2
-rw-r--r--packages/xorg-xserver/xserver-kdrive-1.3.0.0/tosa-fbdev.patch13
-rw-r--r--packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb9
-rw-r--r--packages/xorg-xserver/xserver-kdrive_1.4.bb6
-rw-r--r--packages/xrestop/xrestop_0.4.bb3
-rw-r--r--packages/xscreensaver/xscreensaver-4.22/configure.in-includedir.patch72
-rw-r--r--packages/xscreensaver/xscreensaver_4.22.bb5
-rw-r--r--packages/xserver-common/files/unbreak-simpad.patch18
-rw-r--r--packages/xserver-common/xserver-common_1.18.bb4
-rw-r--r--packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver5
-rw-r--r--packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb2
-rw-r--r--packages/zaurus-updater/zaurus-updater.bb6
-rw-r--r--packages/zaurus-updater/zaurus-updater/updater.sh246
-rw-r--r--packages/zaurusd/files/alsa-6000x-default.state.patch750
-rw-r--r--packages/zaurusd/files/zaurus-hinge.bl-off15
-rw-r--r--packages/zaurusd/files/zaurus-hinge.bl-on51
-rw-r--r--packages/zaurusd/zaurusd_svn.bb3
-rw-r--r--packages/zbedic/libbedic_1.1.bb (renamed from packages/zbedic/libbedic_1.0.bb)0
-rw-r--r--packages/zbedic/zbedic_1.2.bb (renamed from packages/zbedic/zbedic_1.0.bb)0
-rw-r--r--packages/zroadmap/files/qt2-fixes-r1.patch36
-rw-r--r--packages/zroadmap/files/qt2-fixes.patch25
-rw-r--r--packages/zroadmap/zroadmap_1.0.12.bb53
-rw-r--r--packages/zroadmap/zroadmap_cvs.bb54
-rw-r--r--site/arm-linux3
-rw-r--r--site/avr32-common22
2453 files changed, 306843 insertions, 350261 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 53c4380116..089cf6e67c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1,4 +1,4 @@
-OpenEmbedded Maintainers List
+OpenEmbedded Maintainers List
Please put you full name and email-address here for the areas of OE you want to support.
@@ -38,7 +38,7 @@ Person: Cliff Brake
Mail: cbrake@bec-systems.com
Website: http://bec-systems.com
Interests: Support in OE for single board computers, web application support
-Machines: compulab-pxa270, logicpd-pxa270,
+Machines: cm-x270, logicpd-pxa270, em-x270, gesbc-9302
Recipes: mono argtable
Person: Erik Hovland
@@ -74,7 +74,7 @@ Person: Holger Hans Peter Freyther
Mail: zecke@selfish.org
Website: http://www.openembedded.org/~zecke
Interests: icecream, insanity, QA
-Recipes: qtopia*, sqlite3, xine
+Recipes: qtopia*, qt*, qmake*, sqlite3, xine
Person: Jamie Lenehan
Mail: lenehan@twibble.org
@@ -86,6 +86,12 @@ Recipes: quagga, iputils, ndic6, hping2, lilo-sh, conserver, ipsec-tools,
Recipes: lilo-sh, clamav, havp, p3scan, clamsmtp, librsync, rdiff-backup,
Recipes: net-snmp, ebtables, ethtool, arpwatch, lib*-perl
+Person: Jan Luebbe
+Mail: jluebbe@lasnet.de
+Website: http://sicherheitsschwankung.de
+Machines: chumby
+Recipes: chumby-*, initramfs-chumby
+
Person: Joaquim Duran
Mail: joaquinduran@adtelecom.es
Recipes: gtk+, gtkmm
@@ -146,22 +152,27 @@ Recipes: ttf-fonts/*
Person: Matthias 'CoreDump' Hentges
Website: http://www.hentges.net
+Distros: Sonkei
Machines: collie, spitz
Recipes: altboot, webcam-server
Person: Michael 'Mickey' Lauer
Mail: mlauer@vanille-media.de
-Distros: Ångström, generic
-Machines: poodle, c7x0, spitz, nokia770, x86, qemuarm, qemux86
-Interests: Core OE infrastructure, Python, GUI-Toolkits
-Recipes: python*, qt*, qte*, sip*
+Distros: OpenMoko, Ångström, Generic
+Machines: fic-gta01, fic-gta02, nokia810, x86, qemuarm, qemux86
+Interests: Core OE infrastructure, everything Python, EFL, E17, Qt4
+Recipes: *python*, efl/*, e17*
+
+Person: Patrick Gfeller
+Mail: gfellerpatrik@gmx.net
+Recipes: libvncserver, fbvncserver
Person: Paul Sokolovsky
Mail: pmiscml@gmail.com
Machines: h3900, h4000, hx4700
Interests: PocketPC and Palm devices support, Win32 support
Interests: Cross-machine unification
-Recipes: linux-handhelds-2.6, opie-*
+Recipes: linux-handhelds-2.6, opie-*, initramfs-*, gnome-mplayer
Person: Philip Balister
Mail: Crofton@balister.org
@@ -197,7 +208,7 @@ Person: Rolf 'Laibsch' Leggewie
Mail: OE-recipes@rolf.leggewie.biz
Website: http://oz.leggewie.org
Interests: Japanese on the Zaurus
-Distros: Ångström
+Distros: Sonkei
Machines: collie, spitz
Recipes: anthy, nunome, uim*, granule, qpobox*, qte-font-unifont*
Recipes: qpf-unismall, qpobox, poboxserver, imkit*, scim, zten
diff --git a/classes/angstrom-mirrors.bbclass b/classes/angstrom-mirrors.bbclass
index e44a78c983..10bf75044f 100644
--- a/classes/angstrom-mirrors.bbclass
+++ b/classes/angstrom-mirrors.bbclass
@@ -1,4 +1,4 @@
MIRRORS_append () {
-ftp://.*/.*/ http://www.angstrom-distribution.org/unstable/sources/
-https?$://.*/.*/ http://www.angstrom-distribution.org/unstable/sources/
+ftp://.*/.* http://www.angstrom-distribution.org/unstable/sources/
+https?$://.*/.* http://www.angstrom-distribution.org/unstable/sources/
}
diff --git a/classes/autotools.bbclass b/classes/autotools.bbclass
index 8e4fba9400..991e472b14 100644
--- a/classes/autotools.bbclass
+++ b/classes/autotools.bbclass
@@ -174,6 +174,8 @@ autotools_stage_all() {
fi
if [ -d ${STAGE_TEMP}/${libdir} ]
then
+ find ${STAGE_TEMP}/${libdir} -name '*.la' -exec sed -i s,installed=yes,installed=no, {} \;
+
for i in ${STAGE_TEMP}/${libdir}/*.la
do
if [ ! -f "$i" ]; then
diff --git a/classes/base.bbclass b/classes/base.bbclass
index 7526dff65e..c8ee75627f 100644
--- a/classes/base.bbclass
+++ b/classes/base.bbclass
@@ -128,6 +128,14 @@ def base_less_or_equal(variable, checkvalue, truevalue, falsevalue, d):
else:
return falsevalue
+def base_version_less_or_equal(variable, checkvalue, truevalue, falsevalue, d):
+ import bb
+ result = bb.vercmp(bb.data.getVar(variable,d,True), checkvalue)
+ if result <= 0:
+ return truevalue
+ else:
+ return falsevalue
+
def base_contains(variable, checkvalues, truevalue, falsevalue, d):
import bb
matches = 0
@@ -848,6 +856,12 @@ def base_after_parse(d):
bb.data.delVarFlag('MACHINE', 'export', d)
bb.data.setVarFlag('MACHINE', 'unexport', 1, d)
+ # Make sure TARGET_ARCH isn't exported
+ # (breaks Makefiles using implicit rules, e.g. quilt, as GNU make has this
+ # in them, undocumented)
+ bb.data.delVarFlag('TARGET_ARCH', 'export', d)
+ bb.data.setVarFlag('TARGET_ARCH', 'unexport', 1, d)
+
# Make sure DISTRO isn't exported
# (breaks sysvinit at least)
bb.data.delVarFlag('DISTRO', 'export', d)
@@ -896,6 +910,23 @@ python () {
base_after_parse(d)
}
+def check_app_exists(app, d):
+ from bb import which, data
+
+ app = data.expand(app, d)
+ path = data.getVar('PATH', d, 1)
+ return len(which(path, app)) != 0
+
+def check_gcc3(data):
+
+ gcc3_versions = 'gcc-3.4 gcc34 gcc-3.4.4 gcc-3.4.6 gcc-3.4.7 gcc-3.3 gcc33 gcc-3.3.6 gcc-3.2 gcc32'
+
+ for gcc3 in gcc3_versions.split():
+ if check_app_exists(gcc3, data):
+ return gcc3
+
+ return False
+
# Patch handling
inherit patch
diff --git a/classes/binconfig.bbclass b/classes/binconfig.bbclass
index 4e425a76d6..5ce9ff6f0d 100644
--- a/classes/binconfig.bbclass
+++ b/classes/binconfig.bbclass
@@ -20,6 +20,8 @@ def get_binconfig_mangle(d):
s += " -e 's:OEEXECPREFIX:${STAGING_DIR_HOST}${layout_exec_prefix}:'"
s += " -e 's:-I${WORKDIR}:-I${STAGING_INCDIR}:'"
s += " -e 's:-L${WORKDIR}:-L${STAGING_LIBDIR}:'"
+ if bb.data.getVar("OE_BINCONFIG_EXTRA_MANGLE", d):
+ s += bb.data.getVar("OE_BINCONFIG_EXTRA_MANGLE", d)
return s
BINCONFIG_GLOB ?= "*-config"
diff --git a/classes/cmake.bbclass b/classes/cmake.bbclass
new file mode 100644
index 0000000000..823635c24d
--- /dev/null
+++ b/classes/cmake.bbclass
@@ -0,0 +1,10 @@
+DEPENDS += " cmake-native "
+
+# We want the staging and installing functions from autotools
+inherit autotools
+
+cmake_do_configure() {
+ cmake . -DCMAKE_INSTALL_PREFIX:PATH=${prefix}
+}
+
+EXPORT_FUNCTIONS do_configure
diff --git a/classes/concatenated-image.bbclass b/classes/concatenated-image.bbclass
new file mode 100644
index 0000000000..5cf8d33c05
--- /dev/null
+++ b/classes/concatenated-image.bbclass
@@ -0,0 +1,38 @@
+
+#
+# define the FLASH_KERNEL_SIZE and FLASH_ROOT_SIZE in your machine.conf,
+# and this class builds a simple, padded concatenated image of
+# <kernel><padding><rootfs> and performs error checking that either
+# kernel or rootfs isn't too large to fit.
+#
+concat_pack_image() {
+ # find latest kernel - is there a more general way to do this?
+ KERNEL=`ls -tr ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}* | tail -n 1`
+ if [ -z "$KERNEL" ]; then
+ oefatal "No kernel found in ${DEPLOY_DIR_IMAGE}. Was expecting a ${KERNEL_IMAGETYPE}\* file."
+ exit 1
+ fi
+ ROOTFS=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2
+ OUTPUT=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.flash.img
+ PADFILE=${DEPLOY_DIR_IMAGE}/padfile.zzz
+ KERNEL_SIZE_MAX_DEC=`echo ${FLASH_KERNEL_SIZE} | awk --non-decimal-data '{printf "%d\n", $1}' `
+ ROOT_SIZE_MAX_DEC=`echo ${FLASH_ROOT_SIZE} | awk --non-decimal-data '{printf "%d\n", $1}' `
+ KERNEL_SIZE=`ls -l $KERNEL | awk '{print $5}'`
+ if [ $KERNEL_SIZE -gt $KERNEL_SIZE_MAX_DEC ]; then
+ oefatal "Kernel too large at $KERNEL_SIZE bytes. Max is $KERNEL_SIZE_MAX_DEC."
+ exit 1
+ fi
+ ROOT_SIZE=`ls -l $ROOTFS | awk '{print $5}'`
+ if [ $ROOT_SIZE -gt $ROOT_SIZE_MAX_DEC ]; then
+ oefatal "Rootfs is too large at $ROOT_SIZE bytes. Max is $ROOT_SIZE_MAX_DEC."
+ exit 1
+ fi
+ PAD_SIZE=`echo "$KERNEL_SIZE_MAX_DEC - $KERNEL_SIZE" | bc `
+ dd if=/dev/zero of=$PADFILE bs=$PAD_SIZE count=1 2>>/dev/null
+ cat $KERNEL $PADFILE $ROOTFS > $OUTPUT
+ rm -f $PADFILE
+ ls -l $OUTPUT
+}
+
+IMAGE_POSTPROCESS_COMMAND += "concat_pack_image; "
+
diff --git a/classes/debian.bbclass b/classes/debian.bbclass
index dd0789adae..0afe9fcc39 100644
--- a/classes/debian.bbclass
+++ b/classes/debian.bbclass
@@ -3,6 +3,9 @@
# before building the current package to make the packages runtime
# depends are correct
#
+# Custom library package names can be defined setting
+# DEBIANNAME_ + pkgname to the desired name.
+#
# Better expressed as ensure all RDEPENDS package before we package
# This means we can't have circular RDEPENDS/RRECOMMENDS
do_package_write_ipk[rdeptask] = "do_package"
@@ -88,7 +91,10 @@ python debian_package_name_hook () {
for pkg in packages.split():
if (bb.data.getVar('PKG_' + pkg, d) or bb.data.getVar('DEBIAN_NOAUTONAME_' + pkg, d)):
continue
- if pkg == orig_pkg:
+ debian_pn = bb.data.getVar('DEBIANNAME_' + pkg, d)
+ if debian_pn:
+ newpkg = debian_pn
+ elif pkg == orig_pkg:
newpkg = pkgname
else:
newpkg = pkg.replace(orig_pkg, devname, 1)
diff --git a/classes/efl_base.bbclass b/classes/efl_base.bbclass
index 3865441779..023b2edf74 100644
--- a/classes/efl_base.bbclass
+++ b/classes/efl_base.bbclass
@@ -3,7 +3,7 @@ inherit autotools pkgconfig
SECTION = "e/libs"
HOMEPAGE = "http://www.enlightenment.org"
SRCNAME = "${@bb.data.getVar('PN', d, 1).replace('-native', '')}"
-SRC_URI = "http://download.enlightenment.org/snapshots/2007-07-10/${SRCNAME}-${PV}.tar.gz"
+SRC_URI = "http://download.enlightenment.org/snapshots/2008-01-25/${SRCNAME}-${PV}.tar.gz"
S = "${WORKDIR}/${SRCNAME}-${PV}"
do_stage() {
diff --git a/classes/image.bbclass b/classes/image.bbclass
index 312307c831..ca9c9458e1 100644
--- a/classes/image.bbclass
+++ b/classes/image.bbclass
@@ -125,6 +125,17 @@ insert_feed_uris () {
# insert new feed-sources
echo "src/gz $feed_name $feed_uri" >> ${IMAGE_ROOTFS}/etc/ipkg/${feed_name}-feed.conf
done
+
+ # Allow to use package deploy directory contents as quick devel-testing
+ # feed. This creates individual feed configs for each arch subdir of those
+ # specified as compatible for the current machine.
+ # NOTE: Development-helper feature, NOT a full-fledged feed.
+ if [ -n "${FEED_DEPLOYDIR_BASE_URI}" ]; then
+ for arch in ${PACKAGE_ARCHS}
+ do
+ echo "src/gz local-$arch ${FEED_DEPLOYDIR_BASE_URI}/$arch" >> ${IMAGE_ROOTFS}/etc/ipkg/local-$arch-feed.conf
+ done
+ fi
}
log_check() {
diff --git a/classes/insane.bbclass b/classes/insane.bbclass
index 473fe6ebbf..97cf036dd9 100644
--- a/classes/insane.bbclass
+++ b/classes/insane.bbclass
@@ -8,28 +8,25 @@
# -Check the RUNTIME path for the $TMPDIR
# -Check if .la files wrongly point to workdir
# -Check if .pc files wrongly point to workdir
-# -Check if packages contains .debug directories or .so files where they should be in -dev or -dbg
+# -Check if packages contains .debug directories or .so files
+# where they should be in -dev or -dbg
# -Check if config.log contains traces to broken autoconf tests
-#
#
# We need to have the scanelf utility as soon as
-# possible and this is contained within the pax-utils-native
+# possible and this is contained within the pax-utils-native.
+# The package.bbclass can help us here.
#
-
-
-# We play a special package function
inherit package
PACKAGE_DEPENDS += "pax-utils-native desktop-file-utils-native"
-#PACKAGE_DEPENDS += chrpath-native"
PACKAGEFUNCS += " do_package_qa "
#
# dictionary for elf headers
#
-# feel free to add and correct.
+# feel free to add and correct.
#
# TARGET_OS TARGET_ARCH MACHINE, OSABI, ABIVERSION, Little Endian, 32bit?
def package_qa_get_machine_dict():
@@ -75,7 +72,7 @@ def package_qa_get_machine_dict():
"arm" : (40, 0, 0, True, True),
"armeb" : (40, 0, 0, False, True),
},
-
+
}
# factory for a class, embedded in a method
@@ -102,11 +99,10 @@ def package_qa_get_elf(path, bits32):
ELFDATA2LSB = 1
ELFDATA2MSB = 2
- def my_assert(expectation, result):
+ def my_assert(self, expectation, result):
if not expectation == result:
- #print "'%x','%x'" % (ord(expectation), ord(result))
+ #print "'%x','%x' %s" % (ord(expectation), ord(result), self.name)
raise Exception("This does not work as expected")
- my_assert = staticmethod(my_assert)
def __init__(self, name):
self.name = name
@@ -115,16 +111,16 @@ def package_qa_get_elf(path, bits32):
self.file = file(self.name, "r")
self.data = self.file.read(ELFFile.EI_NIDENT+4)
- ELFFile.my_assert(len(self.data), ELFFile.EI_NIDENT+4)
- ELFFile.my_assert(self.data[0], chr(0x7f) )
- ELFFile.my_assert(self.data[1], 'E')
- ELFFile.my_assert(self.data[2], 'L')
- ELFFile.my_assert(self.data[3], 'F')
+ self.my_assert(len(self.data), ELFFile.EI_NIDENT+4)
+ self.my_assert(self.data[0], chr(0x7f) )
+ self.my_assert(self.data[1], 'E')
+ self.my_assert(self.data[2], 'L')
+ self.my_assert(self.data[3], 'F')
if bits32 :
- ELFFile.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS32)) # only 32 bits
+ self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS32))
else:
- ELFFile.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS64)) # only 64 bits
- ELFFile.my_assert(self.data[ELFFile.EI_VERSION], chr(ELFFile.EV_CURRENT) )
+ self.my_assert(self.data[ELFFile.EI_CLASS], chr(ELFFile.ELFCLASS64))
+ self.my_assert(self.data[ELFFile.EI_VERSION], chr(ELFFile.EV_CURRENT) )
self.sex = self.data[ELFFile.EI_DATA]
if self.sex == chr(ELFFile.ELFDATANONE):
@@ -160,20 +156,19 @@ def package_qa_get_elf(path, bits32):
return ELFFile(path)
-#
-#
# Known Error classes
# 0 - non dev contains .so
# 1 - package contains a dangerous RPATH
# 2 - package depends on debug package
# 3 - non dbg contains .so
# 4 - wrong architecture
-# 5 - .la contains installed=yes or reference to the workdir
+# 5 - .la contains installed=yes
# 6 - .pc contains reference to /usr/include or workdir
-#
-#
+# 7 - the desktop file is not valid
+# 8 - .la contains reference to the workdir
def package_qa_clean_path(path,d):
+ """ Remove the common prefix from the path. In this case it is the TMPDIR"""
import bb
return path.replace(bb.data.getVar('TMPDIR',d,True),"")
@@ -183,14 +178,15 @@ def package_qa_make_fatal_error(error_class, name, path,d):
TODO: Load a whitelist of known errors
"""
- if error_class == 0:
- return False
- else:
- return True
+ return not error_class in [0, 5, 7, 8]
def package_qa_write_error(error_class, name, path, d):
+ """
+ Log the error
+ """
import bb, os
if not bb.data.getVar('QA_LOG', d):
+ bb.note("a QA error occured but will not be logged because QA_LOG is not set")
return
ERROR_NAMES =[
@@ -201,44 +197,45 @@ def package_qa_write_error(error_class, name, path, d):
"wrong architecture",
"evil hides inside the .la",
"evil hides inside the .pc",
+ "the desktop file is not valid",
+ ".la contains reference to the workdir",
]
-
log_path = os.path.join( bb.data.getVar('T', d, True), "log.qa_package" )
f = file( log_path, "a+")
- print >> f, "%s, %s, %s" % (ERROR_NAMES[error_class], name, package_qa_clean_path(path,d))
+ print >> f, "%s, %s, %s" % \
+ (ERROR_NAMES[error_class], name, package_qa_clean_path(path,d))
f.close()
+def package_qa_handle_error(error_class, error_msg, name, path, d):
+ import bb
+ bb.error("QA Issue: %s" % error_msg)
+ package_qa_write_error(error_class, name, path, d)
+ return not package_qa_make_fatal_error(error_class, name, path, d)
def package_qa_check_rpath(file,name,d):
"""
Check for dangerous RPATHs
"""
import bb, os
+ sane = True
scanelf = os.path.join(bb.data.getVar('STAGING_BINDIR_NATIVE',d,True),'scanelf')
- #chrpath = os.path.join(bb.data.getVar('STAGING_BINDIR_NATIVE',d,True),'chrpath')
bad_dir = bb.data.getVar('TMPDIR', d, True) + "/work"
bad_dir_test = bb.data.getVar('TMPDIR', d, True)
if not os.path.exists(scanelf):
bb.fatal("Can not check RPATH, scanelf (part of pax-utils-native) not found")
- #if not os.path.exists(chrpath):
- # bb.fatal("Can not fix RPATH, chrpath (part of chrpath-native) not found")
+
if not bad_dir in bb.data.getVar('WORKDIR', d, True):
bb.fatal("This class assumed that WORKDIR is ${TMPDIR}/work... Not doing any check")
- #bb.note("%s -B -F%%r#F %s" % (scanelf,file))
output = os.popen("%s -B -F%%r#F '%s'" % (scanelf,file))
txt = output.readline().split()
- #bb.note("???%s???" % bad_dir_test)
for line in txt:
- #bb.note("===%s===" % line)
if bad_dir in line:
- package_qa_write_error( 1, name, file, d)
- bb.error("QA Issue package %s contains bad RPATH %s in file %s" % (name, line, file))
- #bb.note("Fixing RPATH for you in %s" % file)
- #os.popen("%s -r /lib %s" % (chrpath,file))
- #return False
- return True
+ error_msg = "package %s contains bad RPATH %s in file %s" % (name, line, file)
+ sane = package_qa_handle_error(1, error_msg, name, file, d)
+
+ return sane
def package_qa_check_devdbg(path, name,d):
"""
@@ -251,17 +248,15 @@ def package_qa_check_devdbg(path, name,d):
if not "-dev" in name:
if path[-3:] == ".so" and os.path.islink(path):
- package_qa_write_error( 0, name, path, d )
- bb.error("QA Issue: non -dev package contains symlink .so: %s path '%s'" % (name, package_qa_clean_path(path,d)))
- if package_qa_make_fatal_error( 0, name, path, d ):
- sane = False
+ error_msg = "non -dev package contains symlink .so: %s path '%s'" % \
+ (name, package_qa_clean_path(path,d))
+ sane = package_qa_handle_error(0, error_msg, name, path, d)
if not "-dbg" in name:
if '.debug' in path:
- package_qa_write_error( 3, name, path, d )
- bb.error("QA Issue: non debug package contains .debug directory: %s path %s" % (name, package_qa_clean_path(path,d)))
- if package_qa_make_fatal_error( 3, name, path, d ):
- sane = False
+ error_msg = "non debug package contains .debug directory: %s path %s" % \
+ (name, package_qa_clean_path(path,d))
+ sane = package_qa_handle_error(3, error_msg, name, path, d)
return sane
@@ -277,9 +272,10 @@ def package_qa_check_arch(path,name,d):
Check if archs are compatible
"""
import bb, os
+ sane = True
target_os = bb.data.getVar('TARGET_OS', d, True)
target_arch = bb.data.getVar('TARGET_ARCH', d, True)
-
+
# FIXME: Cross package confuse this check, so just skip them
if bb.data.inherits_class('cross', d) or bb.data.inherits_class('sdk', d):
return True
@@ -290,29 +286,24 @@ def package_qa_check_arch(path,name,d):
return True
#if this will throw an exception, then fix the dict above
- (machine, osabi, abiversion, littleendian, bits32) = package_qa_get_machine_dict()[target_os][target_arch]
+ (machine, osabi, abiversion, littleendian, bits32) \
+ = package_qa_get_machine_dict()[target_os][target_arch]
elf = package_qa_get_elf(path, bits32)
try:
elf.open()
except:
- # just for debbugging to check the parser, remove once convinced...
return True
+ # Check the architecture and endiannes of the binary
if not machine == elf.machine():
- bb.error("Architecture did not match (%d to %d) on %s" %(machine, elf.machine(), package_qa_clean_path(path,d)))
- return not package_qa_make_fatal_error( 4, name, path, d )
+ error_msg = "Architecture did not match (%d to %d) on %s" % \
+ (machine, elf.machine(), package_qa_clean_path(path,d))
+ sane = package_qa_handle_error(4, error_msg, name, path, d)
elif not littleendian == elf.isLittleEndian():
- bb.error("Endiannes did not match (%d to %d) on %s" % (littleendian, elf.isLittleEndian(), package_qa_clean_path(path,d)))
- return not package_qa_make_fatal_error( 4, name, path, d )
-
- return True
+ error_msg = "Endiannes did not match (%d to %d) on %s" % \
+ (littleendian, elf.isLittleEndian(), package_qa_clean_path(path,d))
+ sane = package_qa_handle_error(4, error_msg, name, path, d)
-def package_qa_check_pcla(path,name,d):
- """
- .pc and .la files should not point to the WORKDIR
- """
- sane = True
- # TODO
return sane
def package_qa_check_desktop(path, name, d):
@@ -320,13 +311,15 @@ def package_qa_check_desktop(path, name, d):
Run all desktop files through desktop-file-validate.
"""
import bb, os
+ sane = True
if path.endswith(".desktop"):
- validate = os.path.join(bb.data.getVar('STAGING_BINDIR_NATIVE',d,True), 'desktop-file-validate')
+ validate = os.path.join(bb.data.getVar('STAGING_BINDIR_NATIVE',d,True), \
+ 'desktop-file-validate')
output = os.popen("%s %s" % (validate, path))
- # This only produces output on errors
for l in output:
- bb.error(l.strip())
- return True
+ sane = package_qa_handle_error(7, l.strip(), name, path, d)
+
+ return sane
def package_qa_check_staged(path,d):
"""
@@ -355,16 +348,17 @@ def package_qa_check_staged(path,d):
path = os.path.join(root,file)
if file[-2:] == "la":
file_content = open(path).read()
- if installed in file_content or workdir in file_content:
- bb.error("QA issue: %s failed sanity test (reference to workdir or installed)" % file )
- if package_qa_make_fatal_error( 5, "staging", path, d):
- sane = True
+ if installed in file_content:
+ error_msg = "%s failed sanity test (installed) in path %s" % (file,root)
+ sane = package_qa_handle_error(5, error_msg, "staging", path, d)
+ if workdir in file_content:
+ error_msg = "%s failed sanity test (workdir) in path %s" % (file,root)
+ sane = package_qa_handle_error(8, error_msg, "staging", path, d)
elif file[-2:] == "pc":
file_content = open(path).read()
if workdir in file_content:
- bb.error("QA issue: %s failed sanity test (reference to workdir)" % file )
- if package_qa_make_fatal_error( 6, "staging", path, d):
- sane = False
+ error_msg = "%s failed sanity test (workdir) in path %s" % (file,root)
+ sane = package_qa_handle_error(6, error_msg, "staging", path, d)
return sane
@@ -382,7 +376,6 @@ def package_qa_walk(path, funcs, package,d):
return sane
-
def package_qa_check_rdepends(pkg, workdir, d):
import bb
sane = True
@@ -414,10 +407,8 @@ def package_qa_check_rdepends(pkg, workdir, d):
# Now do the sanity check!!!
for rdepend in rdepends:
if "-dbg" in rdepend:
- package_qa_write_error( 2, pkgname, rdepend, d )
- bb.error("QA issue: %s rdepends on %s" % (pkgname,rdepend))
- if package_qa_make_fatal_error( 2, pkgname, rdepend, d ):
- sane = False
+ error_msg = "%s rdepends on %s" % (pkgname,rdepend)
+ sane = package_qa_handle_error(2, error_msg, pkgname, rdepend, d)
return sane
@@ -431,6 +422,9 @@ python do_package_qa () {
if not packages:
return
+ checks = [package_qa_check_rpath, package_qa_check_devdbg,
+ package_qa_check_perm, package_qa_check_arch,
+ package_qa_check_desktop]
walk_sane = True
rdepends_sane = True
for package in packages.split():
@@ -440,7 +434,7 @@ python do_package_qa () {
bb.note("Checking Package: %s" % package)
path = "%s/install/%s" % (workdir, package)
- if not package_qa_walk(path, [package_qa_check_rpath, package_qa_check_devdbg, package_qa_check_perm, package_qa_check_arch, package_qa_check_desktop], package, d):
+ if not package_qa_walk(path, checks, package, d):
walk_sane = False
if not package_qa_check_rdepends(package, workdir, d):
rdepends_sane = False
@@ -466,7 +460,10 @@ python do_qa_configure() {
bb.note("Checking sanity of the config.log file")
import os
for root, dirs, files in os.walk(bb.data.getVar('WORKDIR', d, True)):
+ statement = "grep 'CROSS COMPILE Badness:' %s > /dev/null" % \
+ os.path.join(root,"config.log")
if "config.log" in files:
- if os.system("grep 'CROSS COMPILE Badness:' %s > /dev/null" % (os.path.join(root,"config.log"))) == 0:
- bb.fatal("This autoconf log indicates errors, it looked at host includes. Rerun configure task after fixing this. Path was '%s'" % root)
+ if os.system(statement) == 0:
+ bb.fatal("""This autoconf log indicates errors, it looked at host includes.
+Rerun configure task after fixing this. The path was '%s'""" % root)
}
diff --git a/classes/java-library.bbclass b/classes/java-library.bbclass
new file mode 100644
index 0000000000..8aecfef1b9
--- /dev/null
+++ b/classes/java-library.bbclass
@@ -0,0 +1,37 @@
+# Inherit this bbclass for each java recipe that builds a Java library (jar file[s]).
+#
+# It automatically adds important build dependencies, defines JPN (Java Package Name)
+# a package named ${JPN} whose contents are those of ${datadir}/java (the jar location).
+#
+# The JPN is basically lib${PN}-java but takes care of the fact that ${PN} already
+# starts with "lib" and/or ends with "-java". In case the "lib" prefix is part of
+# your package's normal name (e.g. liberator) the guessing is wrong and you have
+# to set JPN manually!
+
+inherit java
+
+def java_package_name(d):
+ import bb;
+
+ pre=""
+ post=""
+
+ pn = bb.data.getVar('PN', d, 1)
+ if not pn.startswith("lib"):
+ pre='lib'
+
+ if not pn.endswith("-java"):
+ post='-java'
+
+ return pre + pn + post
+
+JPN ?= "${@java_package_name(d)}"
+
+DEPENDS_prepend = "virtual/javac-native fastjar-native "
+
+PACKAGES = "${JPN}"
+
+PACKAGE_ARCH_${JPN} = "all"
+
+FILES_${JPN} = "${datadir_java}"
+
diff --git a/classes/java.bbclass b/classes/java.bbclass
new file mode 100644
index 0000000000..7fa6dc1786
--- /dev/null
+++ b/classes/java.bbclass
@@ -0,0 +1,62 @@
+# Defines the commonly used target directories and provides a convenience
+# function to install jar files.
+
+# Jar location on target
+datadir_java ?= ${datadir}/java
+
+# JNI library location on target
+libdir_jni ?= ${libdir}/jni
+
+STAGING_DATADIR_JAVA ?= ${STAGING_DATADIR}/java
+STAGING_LIBDIR_JNI ?= ${STAGING_LIBDIR}/jni
+
+oe_jarinstall() {
+ # Purpose: Install a jar file and create all the given symlinks to it.
+ # Example:
+ # oe_jarinstall foo-1.3.jar foo.jar
+ # Installs foo-1.3.jar and creates symlink foo.jar.
+ #
+ # oe_jarinstall -s foo-1.3.jar foo.jar
+ # Installs foo-1.3.jar to staging and creates symlink foo.jar.
+ #
+ # oe_jarinstall -r foo-1.3.jar foo_1_3.jar foo.jar
+ # Installs foo_1_3.jar as foo-1.3.jar and creates a symlink to this.
+ #
+ dir=${D}${datadir_java}
+ destname=""
+ while [ "$#" -gt 0 ]; do
+ case "$1" in
+ -s)
+ dir=${STAGING_DATADIR_JAVA}
+ ;;
+ -r)
+ shift
+ destname=$1
+ ;;
+ -*)
+ oefatal "oe_jarinstall: unknown option: $1"
+ ;;
+ *)
+ break;
+ ;;
+ esac
+ shift
+ done
+
+ jarname=$1
+ destname=${destname:-`basename $jarname`}
+ shift
+
+ install -d $dir
+ install -m 0644 $jarname $dir/$destname
+
+ # Creates symlinks out of the remaining arguments.
+ while [ "$#" -gt 0 ]; do
+ if [ -e $dir/$1 ]; then
+ oewarn "file was in the way. removing:" $dir/$1
+ rm $dir/$1
+ fi
+ ln -s $destname $dir/$1
+ shift
+ done
+}
diff --git a/classes/kernel-arch.bbclass b/classes/kernel-arch.bbclass
index 9208c3507a..b45f3f9696 100644
--- a/classes/kernel-arch.bbclass
+++ b/classes/kernel-arch.bbclass
@@ -5,7 +5,7 @@
#
valid_archs = "alpha cris ia64 \
- x86_64,i386 \
+ x86_64,i386 x86 \
m68knommu m68k ppc powerpc ppc64 \
sparc sparc64 \
arm arm26 \
diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass
index c00d0f3f58..047a3ec047 100644
--- a/classes/kernel.bbclass
+++ b/classes/kernel.bbclass
@@ -80,25 +80,12 @@ kernel_do_stage() {
mkdir -p ${STAGING_KERNEL_DIR}/include/pcmcia
cp -fR include/pcmcia/* ${STAGING_KERNEL_DIR}/include/pcmcia/
- if [ -d drivers/crypto ]; then
- mkdir -p ${STAGING_KERNEL_DIR}/drivers/crypto
- cp -fR drivers/crypto/* ${STAGING_KERNEL_DIR}/drivers/crypto/
- fi
-
- if [ -d include/media ]; then
- mkdir -p ${STAGING_KERNEL_DIR}/include/media
- cp -fR include/media/* ${STAGING_KERNEL_DIR}/include/media/
- fi
-
- if [ -d include/acpi ]; then
- mkdir -p ${STAGING_KERNEL_DIR}/include/acpi
- cp -fR include/acpi/* ${STAGING_KERNEL_DIR}/include/acpi/
- fi
-
- if [ -d include/sound ]; then
- mkdir -p ${STAGING_KERNEL_DIR}/include/sound
- cp -fR include/sound/* ${STAGING_KERNEL_DIR}/include/sound/
- fi
+ for entry in drivers/crypto include/media include/acpi include/sound include/video; do
+ if [ -d $entry ]; then
+ mkdir -p ${STAGING_KERNEL_DIR}/$entry
+ cp -fR $entry/* ${STAGING_KERNEL_DIR}/$entry/
+ fi
+ done
if [ -d drivers/sound ]; then
# 2.4 alsa needs some headers from this directory
@@ -193,6 +180,8 @@ FILES_kernel-image = "/boot/${KERNEL_IMAGETYPE}*"
FILES_kernel-dev = "/boot/System.map* /boot/config*"
FILES_kernel-vmlinux = "/boot/vmlinux*"
RDEPENDS_kernel = "kernel-base"
+RRECOMMENDS_kernel-module-hostap-cs += '${@base_version_less_or_equal("KERNEL_VERSION", "2.6.17", "", "apm-wifi-suspendfix", d)}'
+RRECOMMENDS_kernel-module-orinoco-cs += '${@base_version_less_or_equal("KERNEL_VERSION", "2.6.17", "", "apm-wifi-suspendfix", d)}'
# Allow machines to override this dependency if kernel image files are
# not wanted in images as standard
RDEPENDS_kernel-base ?= "kernel-image"
@@ -244,6 +233,8 @@ module_autoload_ipsec = "ipsec"
module_autoload_ircomm-tty = "ircomm-tty"
module_autoload_rfcomm = "rfcomm"
module_autoload_sa1100-rtc = "sa1100-rtc"
+# sa1100-rtc was renamed in 2.6.23 onwards
+module_autoload_rtc-sa1100 = "rtc-sa1100"
# alias defaults (alphabetically sorted)
module_conf_af_packet = "alias net-pf-17 af_packet"
@@ -418,3 +409,17 @@ python populate_packages_prepend () {
packages.append(metapkg)
bb.data.setVar('PACKAGES', ' '.join(packages), d)
}
+
+# Support checking the kernel size since some kernels need to reside in partitions
+# with a fixed length or there is a limit in transferring the kernel to memory
+do_sizecheck() {
+ if [ ! -z "${KERNEL_IMAGE_MAXSIZE}" ]; then
+ size=`ls -l arch/${ARCH}/boot/${KERNEL_IMAGETYPE} | awk '{ print $5}'`
+ if [ $size -ge ${KERNEL_IMAGE_MAXSIZE} ]; then
+ rm arch/${ARCH}/boot/${KERNEL_IMAGETYPE}
+ die "This kernel (size=$size > ${KERNEL_IMAGE_MAXSIZE}) is too big for your device. Please reduce the size of the kernel by making more of it modular."
+ fi
+ fi
+}
+
+addtask sizecheck before do_install after do_compile
diff --git a/classes/module-base.bbclass b/classes/module-base.bbclass
index da5bd01dae..c98baceeab 100644
--- a/classes/module-base.bbclass
+++ b/classes/module-base.bbclass
@@ -10,6 +10,7 @@ export KERNEL_SOURCE = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-source')
KERNEL_OBJECT_SUFFIX = "${@[".o", ".ko"][base_read_file('${STAGING_KERNEL_DIR}/kernel-abiversion') > "2.6.0"]}"
KERNEL_CCSUFFIX = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-ccsuffix')}"
KERNEL_LDSUFFIX = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-ldsuffix')}"
+KERNEL_ARSUFFIX = "${@base_read_file('${STAGING_KERNEL_DIR}/kernel-arsuffix')}"
# Set TARGET_??_KERNEL_ARCH in the machine .conf to set architecture
# specific options necessary for building the kernel and modules.
@@ -17,9 +18,12 @@ TARGET_CC_KERNEL_ARCH ?= ""
HOST_CC_KERNEL_ARCH ?= "${TARGET_CC_KERNEL_ARCH}"
TARGET_LD_KERNEL_ARCH ?= ""
HOST_LD_KERNEL_ARCH ?= "${TARGET_LD_KERNEL_ARCH}"
+TARGET_AR_KERNEL_ARCH ?= ""
+HOST_AR_KERNEL_ARCH ?= "${TARGET_AR_KERNEL_ARCH}"
KERNEL_CC = "${CCACHE}${HOST_PREFIX}gcc${KERNEL_CCSUFFIX} ${HOST_CC_KERNEL_ARCH}"
KERNEL_LD = "${LD}${KERNEL_LDSUFFIX} ${HOST_LD_KERNEL_ARCH}"
+KERNEL_AR = "${AR}${KERNEL_ARSUFFIX} ${HOST_AR_KERNEL_ARCH}"
# kernel modules are generally machine specific
PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/classes/module.bbclass b/classes/module.bbclass
index 7083076b5f..1d0f1dd4f8 100644
--- a/classes/module.bbclass
+++ b/classes/module.bbclass
@@ -9,7 +9,8 @@ module_do_compile() {
KERNEL_SRC=${STAGING_KERNEL_DIR} \
KERNEL_VERSION=${KERNEL_VERSION} \
CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
- ${MAKE_TARGETS}
+ AR="${KERNEL_AR}" \
+ ${MAKE_TARGETS}
}
module_do_install() {
diff --git a/classes/native.bbclass b/classes/native.bbclass
index d51c675909..934303cc0c 100644
--- a/classes/native.bbclass
+++ b/classes/native.bbclass
@@ -49,9 +49,9 @@ export STRIP = "${HOST_PREFIX}strip"
# Path prefixes
-base_prefix = "${exec_prefix}"
-prefix = "${STAGING_DIR}"
-exec_prefix = "${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}"
+base_prefix = "${STAGING_DIR}/${BUILD_ARCH}-${BUILD_OS}"
+prefix = "${base_prefix}"
+exec_prefix = "${base_prefix}"
# Base paths
base_bindir = "${base_prefix}/bin"
diff --git a/classes/nslu2-mirrors.bbclass b/classes/nslu2-mirrors.bbclass
index 1181edc716..b5ad01adea 100644
--- a/classes/nslu2-mirrors.bbclass
+++ b/classes/nslu2-mirrors.bbclass
@@ -1,4 +1,4 @@
MIRRORS_append () {
-ftp://.*/.*/ http://sources.nslu2-linux.org/sources/
-http://.*/.*/ http://sources.nslu2-linux.org/sources/
+ftp://.*/.* http://sources.nslu2-linux.org/sources/
+https?://.*/.* http://sources.nslu2-linux.org/sources/
}
diff --git a/classes/nylon-mirrors.bbclass b/classes/nylon-mirrors.bbclass
index 2986bd8f80..25a8b87d9b 100644
--- a/classes/nylon-mirrors.bbclass
+++ b/classes/nylon-mirrors.bbclass
@@ -1,6 +1,6 @@
MIRRORS_append () {
ftp://.*/.*/ http://meshcube.org/nylon/stable/sources/
-http://.*/.*/ http://meshcube.org/nylon/stable/sources/
+https?://.*/.*/ http://meshcube.org/nylon/stable/sources/
ftp://.*/.*/ http://meshcube.org/nylon/unstable/sources/
-http://.*/.*/ http://meshcube.org/nylon/unstable/sources/
+https?://.*/.*/ http://meshcube.org/nylon/unstable/sources/
} \ No newline at end of file
diff --git a/classes/openmoko-base.bbclass b/classes/openmoko-base.bbclass
index 8643daa7a4..184477b1c0 100644
--- a/classes/openmoko-base.bbclass
+++ b/classes/openmoko-base.bbclass
@@ -1,6 +1,6 @@
HOMEPAGE = "http://www.openmoko.org"
LICENSE ?= "GPL"
-OPENMOKO_RELEASE ?= "OM-2007"
+OPENMOKO_RELEASE ?= "OM-2007.2"
OPENMOKO_MIRROR ?= "svn://svn.openmoko.org/trunk"
def openmoko_base_get_subdir(d):
diff --git a/classes/opie_i18n.bbclass b/classes/opie_i18n.bbclass
index cb3d07de75..107d090451 100644
--- a/classes/opie_i18n.bbclass
+++ b/classes/opie_i18n.bbclass
@@ -13,7 +13,7 @@ SRC_URI += "${HANDHELDS_CVS};module=opie/i18n"
DEPENDS += "opie-i18n"
die () {
- echo -e "opie_18n: ERROR: $1"
+ printf "opie_18n: ERROR: $1\n"
exit 1
}
@@ -60,21 +60,21 @@ do_build_opie_i18n () {
package_name2="`echo "${PN}"| sed "s/^opie\-//;s/\-//"`"
test "$package_name" != "$package_name2" && I18N_FILES="${package_name}.ts lib${package_name}.ts opie-${package_name}.ts ${package_name2}.ts lib${package_name2}.ts opie-${package_name2}.ts"
test "$package_name" = "$package_name2" && I18N_FILES="${package_name}.ts lib${package_name}.ts opie-${package_name}.ts"
- echo -e "I18N Datafiles: ${I18N_FILES} (auto-detected)\nYou can overide the auto-detection by setting I18N_FILES in your .oe file"
+ printf "I18N Datafiles: ${I18N_FILES} (auto-detected)\nYou can overide the auto-detection by setting I18N_FILES in your .oe file\n"
else
echo "I18N Datafiles: ${I18N_FILES} (provided by .bb)"
fi
rm -f "${WORKDIR}/FILES.tmp" "${WORKDIR}/PACKAGES.tmp"
- echo -e "\nFILES is set to [${FILES}]\n"
+ printf "\nFILES is set to [${FILES}]\n\n"
for file in ${I18N_FILES}
do
echo "Working on [$file]"
for ts_file in `ls -1 */*.ts | egrep "/$file"`
do
- echo -e "\tCompiling [$ts_file]"
+ printf "\tCompiling [$ts_file]\n"
cd "${WORKDIR}/i18n/`dirname $ts_file`" || die "[${WORKDIR}/i18n/`dirname $ts_file`] not found"
opie-lrelease "`basename $ts_file`" || die "lrelease failed! Make sure that <inherit opie_i18n> or <inherit opie> is *below* <DEPENDS =>!"
@@ -82,7 +82,7 @@ do_build_opie_i18n () {
# to allow packaging as "_" is not allowed in a package name
lang="`echo "$ts_file" | sed -n "s#\(.*\)/\(.*\)#\1#p"`"
lang_sane="`echo "$ts_file" | sed -n "s#\(.*\)/\(.*\)#\1#p"|sed s/\_/\-/`"
- echo -e "\tPackaging [`basename $ts_file`] for language [$lang]"
+ printf "\tPackaging [`basename $ts_file`] for language [$lang]\n"
install -d ${D}${palmtopdir}/i18n/$lang
install -m 0644 ${WORKDIR}/i18n/$lang/.directory ${D}${palmtopdir}/i18n/$lang/
@@ -93,14 +93,14 @@ do_build_opie_i18n () {
# function do_build_opie_i18n_data() which sets the variables FILES_* and
# PACKAGES as needed.
echo -n "${PN}-${lang_sane} " >> "${WORKDIR}/PACKAGES.tmp"
- echo -e "${PN}-${lang_sane}#${palmtopdir}/i18n/$lang" >> "${WORKDIR}/FILES.tmp"
+ printf "${PN}-${lang_sane}#${palmtopdir}/i18n/$lang" >> "${WORKDIR}/FILES.tmp\n"
ts_found_something=1
done
if test "$ts_found_something" != 1
then
- echo -e "\tNo translations found"
+ printf "\tNo translations found\n"
else
ts_found_something=""
ts_found="$ts_found $file"
@@ -109,7 +109,7 @@ do_build_opie_i18n () {
# Only used for debugging purposes
test "${I18N_STATS}" = 1 && cd "${WORKDIR}/i18n"
- echo -e "Completed [$file]\n\n"
+ printf "Completed [$file]\n\n\n"
done
qt_dirs="apps bin etc lib pics plugins share sounds"
@@ -125,7 +125,7 @@ do_build_opie_i18n () {
if (echo "${FILES}" | egrep "${palmtopdir}/? |${palmtopdir}/?$") &>/dev/null
then
echo "NOTE: FILES was set to ${palmtopdir} which would include the i18n directory"
- echo -e "\n\nI'll remove ${palmtopdir} from FILES and replace it with all directories"
+ printf "\n\nI'll remove ${palmtopdir} from FILES and replace it with all directories\n"
echo "below QtPalmtop, except i18n ($qt_dirs). See classes/opie_i18n.oeclass for details"
# Removes /opt/QtPalmtop from FILES but keeps /opt/QtPalmtop/$some_dir
@@ -138,7 +138,7 @@ do_build_opie_i18n () {
if test -z "${FILES}"
then
echo "NOTE:"
- echo -e "Since FILES is empty, i'll add all directories below ${palmtopdir} to it,\nexcluding i18n: ( $qt_dirs )"
+ printf "Since FILES is empty, i'll add all directories below ${palmtopdir} to it,\nexcluding i18n: ( $qt_dirs )\n"
echo "${PN}#$FILES $dir_" >> "${WORKDIR}/FILES.tmp"
fi
diff --git a/classes/oplinux-mirrors.bbclass b/classes/oplinux-mirrors.bbclass
index 076cd6f1fe..c76e822ce3 100644
--- a/classes/oplinux-mirrors.bbclass
+++ b/classes/oplinux-mirrors.bbclass
@@ -3,12 +3,12 @@
MIRRORS_append () {
ftp://.*/.*/ http://digital-opsis.com/oplinux/stable/sources/
-http://.*/.*/ http://digital-opsis.com/oplinux/stable/sources/
+https?://.*/.*/ http://digital-opsis.com/oplinux/stable/sources/
ftp://.*/.*/ http://digital-opsis.com/oplinux/unstable/sources/
-http://.*/.*/ http://digital-opsis.com/oplinux/unstable/sources/
+https?://.*/.*/ http://digital-opsis.com/oplinux/unstable/sources/
ftp://.*/.*/ http://digital-opsis.com/oplinux-uclibc/stable/sources/
-http://.*/.*/ http://digital-opsis.com/oplinux-uclibc/stable/sources/
+https?://.*/.*/ http://digital-opsis.com/oplinux-uclibc/stable/sources/
ftp://.*/.*/ http://digital-opsis.com/oplinux-uclibc/unstable/sources/
-http://.*/.*/ http://digital-opsis.com/oplinux-uclibc/unstable/sources/
+https?://.*/.*/ http://digital-opsis.com/oplinux-uclibc/unstable/sources/
}
diff --git a/classes/own-mirrors.bbclass b/classes/own-mirrors.bbclass
index 32763ed24f..e8a0f481d7 100644
--- a/classes/own-mirrors.bbclass
+++ b/classes/own-mirrors.bbclass
@@ -1,4 +1,4 @@
PREMIRRORS() {
-http://.*/.* ${SOURCE_MIRROR_URL}
+https?://.*/.* ${SOURCE_MIRROR_URL}
ftp://.*/.* ${SOURCE_MIRROR_URL}
}
diff --git a/classes/package.bbclass b/classes/package.bbclass
index 67aeb33a13..ec8c3d97e2 100644
--- a/classes/package.bbclass
+++ b/classes/package.bbclass
@@ -149,6 +149,12 @@ def runstrip(file, d):
bb.debug(1, "runstrip: skip %s" % file)
return 0
+ # If the file is in a .debug directory it was already stripped,
+ # don't do it again...
+ if os.path.dirname(file).endswith(".debug"):
+ bb.note("Already run strip")
+ return 0
+
strip = bb.data.getVar("STRIP", d, 1)
objcopy = bb.data.getVar("OBJCOPY", d, 1)
@@ -694,6 +700,16 @@ python package_do_shlibs() {
for l in lines:
shlib_provider[l.rstrip()] = (dep_pkg, lib_ver)
+ assumed_libs = bb.data.getVar('ASSUME_SHLIBS', d, 1)
+ if assumed_libs:
+ for e in assumed_libs.split():
+ l, dep_pkg = e.split(":")
+ lib_ver = None
+ dep_pkg = dep_pkg.rsplit("_", 1)
+ if len(dep_pkg) == 2:
+ lib_ver = dep_pkg[1]
+ dep_pkg = dep_pkg[0]
+ shlib_provider[l] = (dep_pkg, lib_ver)
for pkg in packages.split():
bb.debug(2, "calculating shlib requirements for %s" % pkg)
diff --git a/classes/package_ipk.bbclass b/classes/package_ipk.bbclass
index 16d6050573..087bbcbfb4 100644
--- a/classes/package_ipk.bbclass
+++ b/classes/package_ipk.bbclass
@@ -323,4 +323,5 @@ python do_package_write_ipk () {
bb.build.exec_func("do_package_ipk", d)
}
do_package_write_ipk[dirs] = "${D}"
+do_package_write_ipk[depends] = "ipkg-utils-native:do_populate_staging"
addtask package_write_ipk before do_package_write after do_package
diff --git a/classes/patch.bbclass b/classes/patch.bbclass
index 0cc202820f..6f83d9c88b 100644
--- a/classes/patch.bbclass
+++ b/classes/patch.bbclass
@@ -526,7 +526,7 @@ python patch_do_patch() {
bb.note("Patch '%s' applies to earlier revisions" % pname)
continue
- bb.note("Applying patch '%s'" % pname)
+ bb.note("Applying patch '%s' (%s)" % (pname, unpacked))
try:
patchset.Import({"file":unpacked, "remote":url, "strippath": pnum}, True)
except:
diff --git a/classes/qmake2.bbclass b/classes/qmake2.bbclass
index d0f59d2cd4..cf3419f824 100644
--- a/classes/qmake2.bbclass
+++ b/classes/qmake2.bbclass
@@ -5,8 +5,7 @@ inherit qmake_base
DEPENDS_prepend = "qmake2-native uicmoc4-native "
-export QTDIR = "${STAGING_DIR}/${HOST_SYS}/qt4"
-export QMAKESPEC = "${QTDIR}/mkspecs/${TARGET_OS}-oe-g++"
+export QMAKESPEC = "${CROSS_DATADIR}/qt4/mkspecs/${TARGET_OS}-oe-g++"
export OE_QMAKE_UIC = "${STAGING_BINDIR_NATIVE}/uic4"
export OE_QMAKE_UIC3 = "${STAGING_BINDIR_NATIVE}/uic34"
export OE_QMAKE_MOC = "${STAGING_BINDIR_NATIVE}/moc4"
@@ -14,7 +13,7 @@ export OE_QMAKE_RCC = "${STAGING_BINDIR_NATIVE}/rcc4"
export OE_QMAKE_QMAKE = "${STAGING_BINDIR_NATIVE}/qmake2"
export OE_QMAKE_LINK = "${CXX}"
export OE_QMAKE_CXXFLAGS = "${CXXFLAGS}"
-export OE_QMAKE_INCDIR_QT = "${QTDIR}/include"
-export OE_QMAKE_LIBDIR_QT = "${QTDIR}/lib"
+export OE_QMAKE_INCDIR_QT = "${STAGING_INCDIR}/qt4"
+export OE_QMAKE_LIBDIR_QT = "${STAGING_LIBDIR}/qt4"
export OE_QMAKE_LIBS_QT = "qt"
export OE_QMAKE_LIBS_X11 = "-lXext -lX11 -lm"
diff --git a/classes/qpf.bbclass b/classes/qpf.bbclass
deleted file mode 100644
index 67761bd4be..0000000000
--- a/classes/qpf.bbclass
+++ /dev/null
@@ -1,32 +0,0 @@
-PACKAGE_ARCH = "all"
-
-do_configure() {
- :
-}
-
-do_compile() {
- :
-}
-
-pkg_postinst_fonts() {
-. /etc/profile
-${sbindir}/update-qtfontdir
-}
-
-pkg_postrm_fonts() {
-. /etc/profile
-${sbindir}/update-qtfontdir -f
-}
-
-python populate_packages_prepend() {
- postinst = bb.data.getVar('pkg_postinst_fonts', d, 1)
- postrm = bb.data.getVar('pkg_postrm_fonts', d, 1)
- fontdir = bb.data.getVar('palmtopdir', d, 1) + '/lib/fonts'
- pkgregex = "^([a-z-]*_[0-9]*).*.qpf$"
- pkgpattern = bb.data.getVar('QPF_PKGPATTERN', d, 1) or 'qpf-%s'
- pkgdescription = bb.data.getVar('QPF_DESCRIPTION', d, 1) or 'QPF font %s'
-
- do_split_packages(d, root=fontdir, file_regex=pkgregex, output_pattern=pkgpattern,
- description=pkgdescription, postinst=postinst, postrm=postrm, recursive=True, hook=None,
- extra_depends='qpf-font-common')
-}
diff --git a/classes/qtopia4core.bbclass b/classes/qtopia4core.bbclass
index 86bc7afc2f..fd8939a23f 100644
--- a/classes/qtopia4core.bbclass
+++ b/classes/qtopia4core.bbclass
@@ -4,8 +4,9 @@ inherit qmake2
#
# override variables set by qmake-base to compile QtopiaCore apps
#
-export OE_QMAKE_INCDIR_QT = "${STAGING_INCDIR}/qtopiacore4"
-export OE_QMAKE_LIBDIR_QT = "${STAGING_LIBDIR}/qtopiacore4/"
+export OE_QMAKE_INCDIR_QT = "${STAGING_INCDIR}/qtopia"
+export OE_QMAKE_LIBDIR_QT = "${STAGING_LIBDIR}/qtopia"
export OE_QMAKE_LIBS_QT = "qt"
export OE_QMAKE_LIBS_X11 = ""
-EXTRA_QMAKEVARS_POST += "LIBS+=-lQtNetwork "
+export OE_QMAKE_EXTRA_MODULES = "network"
+EXTRA_QMAKEVARS_PRE += " QT_LIBINFIX=E "
diff --git a/classes/rootfs_deb.bbclass b/classes/rootfs_deb.bbclass
index 935ef6e3f7..c2c4a764e4 100644
--- a/classes/rootfs_deb.bbclass
+++ b/classes/rootfs_deb.bbclass
@@ -10,8 +10,12 @@ fakeroot rootfs_deb_do_rootfs () {
mkdir -p ${IMAGE_ROOTFS}/var/dpkg/info
mkdir -p ${IMAGE_ROOTFS}/var/dpkg/updates
+ mkdir -p ${STAGING_ETCDIR_NATIVE}/apt/
+
rm -f ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev
rm -f ${STAGING_ETCDIR_NATIVE}/apt/preferences
+ > ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev
+ > ${STAGING_ETCDIR_NATIVE}/apt/preferences
> ${IMAGE_ROOTFS}/var/dpkg/status
> ${IMAGE_ROOTFS}/var/dpkg/available
# > ${STAGING_DIR}/var/dpkg/status
@@ -36,9 +40,9 @@ fakeroot rootfs_deb_do_rootfs () {
priority=$(expr $priority + 5)
done
- tac ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev > ${STAGING_ETCDIR_NATIVE}/apt/sources.list
+ tac ${STAGING_ETCDIR_NATIVE}/apt/sources.list.rev > ${STAGING_DIR}/etc/apt/sources.list
- cat "${STAGING_ETCDIR_NATIVE}/apt/apt.conf.sample" \
+ cat "${STAGING_DIR}/etc/apt/apt.conf.sample" \
| sed -e 's#Architecture ".*";#Architecture "${TARGET_ARCH}";#' \
> "${STAGING_ETCDIR_NATIVE}/apt/apt-rootfs.conf"
@@ -141,7 +145,7 @@ rootfs_deb_log_check() {
if (echo "$lf_txt" | grep -v log_check | grep "$keyword_die") >/dev/null 2>&1
then
echo "log_check: There were error messages in the logfile"
- echo -e "log_check: Matched keyword: [$keyword_die]\n"
+ printf "log_check: Matched keyword: [$keyword_die]\n"
echo "$lf_txt" | grep -v log_check | grep -C 5 -i "$keyword_die"
echo ""
do_exit=1
diff --git a/classes/rootfs_ipk.bbclass b/classes/rootfs_ipk.bbclass
index c6e2099e7c..28ba03d675 100644
--- a/classes/rootfs_ipk.bbclass
+++ b/classes/rootfs_ipk.bbclass
@@ -71,7 +71,7 @@ rootfs_ipk_log_check() {
if (echo "$lf_txt" | grep -v log_check | grep "$keyword_die") >/dev/null 2>&1
then
echo "log_check: There were error messages in the logfile"
- echo -e "log_check: Matched keyword: [$keyword_die]\n"
+ printf "log_check: Matched keyword: [$keyword_die]\n"
echo "$lf_txt" | grep -v log_check | grep -i "$keyword_die" -C1
echo ""
do_exit=1
diff --git a/classes/sanity.bbclass b/classes/sanity.bbclass
index 479abce7fa..9994febf0d 100644
--- a/classes/sanity.bbclass
+++ b/classes/sanity.bbclass
@@ -24,14 +24,6 @@ def check_conf_exists(fn, data):
return True
return False
-def check_app_exists(app, d):
- from bb import which, data
-
- app = data.expand(app, d)
- path = data.getVar('PATH', d)
- return len(which(path, app)) != 0
-
-
def check_sanity(e):
from bb import note, error, data, __version__
from bb.event import Handled, NotHandled, getName
@@ -70,8 +62,9 @@ def check_sanity(e):
if "diffstat-native" not in assume_provided:
messages = messages + 'Please use ASSUME_PROVIDED +=, not ASSUME_PROVIDED = in your local.conf\n'
- # Check that the MACHINE is valid
- if not check_conf_exists("conf/machine/${MACHINE}.conf", e.data):
+ # Check that the MACHINE is valid, if it is set
+ if data.getVar('MACHINE', e.data, True):
+ if not check_conf_exists("conf/machine/${MACHINE}.conf", e.data):
messages = messages + 'Please set a valid MACHINE in your local.conf\n'
# Check that the DISTRO is valid
diff --git a/classes/scons.bbclass b/classes/scons.bbclass
index 534b3bd4c7..6d0a783dc2 100644
--- a/classes/scons.bbclass
+++ b/classes/scons.bbclass
@@ -6,6 +6,7 @@ scons_do_compile() {
}
scons_do_install() {
+ install -d ${D}${prefix}
${STAGING_BINDIR_NATIVE}/scons PREFIX=${D}${prefix} prefix=${D}${prefix} install || \
oefatal "scons install execution failed."
}
diff --git a/classes/sdl.bbclass b/classes/sdl.bbclass
index d478d97f18..23cbf10919 100644
--- a/classes/sdl.bbclass
+++ b/classes/sdl.bbclass
@@ -4,41 +4,41 @@
DEPENDS += "virtual/libsdl libsdl-mixer libsdl-image"
-APPDESKTOP ?= "${PN}.desktop"
+APPDESKTOP ?= "${WORKDIR}/${PN}.desktop"
APPNAME ?= "${PN}"
-APPIMAGE ?= "${PN}.png"
+APPIMAGE ?= "${WORKDIR}/${PN}.png"
sdl_do_sdl_install() {
- install -d ${D}${palmtopdir}/bin
- install -d ${D}${palmtopdir}/pics
- install -d ${D}${palmtopdir}/apps/Games
- ln -sf ${bindir}/${APPNAME} ${D}${palmtopdir}/bin/${APPNAME}
- install -m 0644 ${APPIMAGE} ${D}${palmtopdir}/pics/${PN}.png
+ install -d ${D}${datadir}/applications
+ install -d ${D}${datadir}/pixmaps
+
+ install -m 0644 ${APPIMAGE} ${D}${datadir}/pixmaps/${PN}.png
if [ -e "${APPDESKTOP}" ]
then
- echo ${APPDESKTOP} present, installing to palmtopdir...
- install -m 0644 ${APPDESKTOP} ${D}${palmtopdir}/apps/Games/${PN}.desktop
+ echo ${APPDESKTOP} present, using it...
+ install -m 0644 ${APPDESKTOP} ${D}${datadir}/applications/
else
echo ${APPDESKTOP} not present, creating one on-the-fly...
- cat >${D}${palmtopdir}/apps/Games/${PN}.desktop <<EOF
+ cat >${D}${datadir}/applications/${PN}.desktop <<EOF
[Desktop Entry]
-Note=Auto Generated... this may be not what you want
+Name=${PN}
Comment=${DESCRIPTION}
+Note=Auto Generated by OE SDL bbclass
Exec=${APPNAME}
Icon=${PN}.png
Type=Application
-Name=${PN}
+Categories=Games
EOF
fi
}
EXPORT_FUNCTIONS do_sdl_install
-addtask sdl_install after do_compile before do_populate_staging
+addtask sdl_install after do_install before do_package
-SECTION = "x11/games"
-SECTION_${PN}-opie = "opie/games"
+#SECTION = "x11/games"
+#SECTION_${PN}-opie = "opie/games"
-PACKAGES += "${PN}-opie"
-RDEPENDS_${PN}-opie += "${PN}"
-FILES_${PN}-opie = "${palmtopdir}"
+#PACKAGES += "${PN}-opie"
+#RDEPENDS_${PN}-opie += "${PN}"
+#FILES_${PN}-opie = "${palmtopdir}"
diff --git a/classes/sip.bbclass b/classes/sip.bbclass
index 6f77f460dc..ae186bd04a 100644
--- a/classes/sip.bbclass
+++ b/classes/sip.bbclass
@@ -4,7 +4,7 @@
# yes, python-sip is actually a build-time dependency, since
# the recipe installs sip.h
-DEPENDS =+ "sip-native python-sip"
+DEPENDS += "sip-native python-sip"
# default stuff, do not uncomment
# EXTRA_SIPTAGS = "-tWS_X11 -tQt_4_3_0"
diff --git a/classes/sourcepkg.bbclass b/classes/sourcepkg.bbclass
index 390d3684d4..bbc9f187ec 100644
--- a/classes/sourcepkg.bbclass
+++ b/classes/sourcepkg.bbclass
@@ -106,6 +106,6 @@ EXPORT_FUNCTIONS do_create_orig_tgz do_archive_bb do_dumpdata do_create_diff_gz
addtask create_orig_tgz after do_unpack before do_patch
addtask archive_bb after do_patch before do_dumpdata
-addtask dumpdata after archive_bb before do_create_diff_gz
+addtask dumpdata after do_archive_bb before do_create_diff_gz
addtask create_diff_gz after do_dump_data before do_configure
diff --git a/classes/xilinx-bsp.bbclass b/classes/xilinx-bsp.bbclass
index fd09946061..f657e5be94 100644
--- a/classes/xilinx-bsp.bbclass
+++ b/classes/xilinx-bsp.bbclass
@@ -34,7 +34,7 @@ fi
case "${XILINX_BOARD}" in
ML403)
oenote "ML403 board setup"
- cp -a ${XILINX_BSP_PATH}/ppc405_0/libsrc/linux_2_6_v1_00_a/linux/arch/ppc/platforms/4xx/xparameters/xparameters_ml40x.h \
+ cp -pPR ${XILINX_BSP_PATH}/ppc405_0/libsrc/linux_2_6_v1_00_a/linux/arch/ppc/platforms/4xx/xparameters/xparameters_ml40x.h \
${S}/arch/ppc/platforms/4xx/xparameters/xparameters_ml403.h
;;
diff --git a/conf/bitbake.conf b/conf/bitbake.conf
index 123d9ce7a7..ac2d281123 100644
--- a/conf/bitbake.conf
+++ b/conf/bitbake.conf
@@ -82,7 +82,7 @@ HOST_SYS = "${HOST_ARCH}${HOST_VENDOR}-${HOST_OS}"
HOST_PREFIX = "${TARGET_PREFIX}"
HOST_CC_ARCH = "${TARGET_CC_ARCH}"
-TARGET_ARCH = "INVALID"
+TARGET_ARCH ?= "INVALID"
TARGET_OS = "INVALID"
TARGET_VENDOR = "${BUILD_VENDOR}"
TARGET_SYS = "${TARGET_ARCH}${TARGET_VENDOR}${@['-' + bb.data.getVar('TARGET_OS', d, 1), ''][bb.data.getVar('TARGET_OS', d, 1) == ('' or 'custom')]}"
@@ -588,6 +588,7 @@ COMBINED_FEATURES = "\
${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "alsa", d)} \
${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "bluetooth", d)} \
${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "ext2", d)} \
+ ${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "vfat", d)} \
${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "irda", d)} \
${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "pcmcia", d)} \
${@base_both_contain("DISTRO_FEATURES", "MACHINE_FEATURES", "pci", d)} \
diff --git a/conf/checksums.ini b/conf/checksums.ini
index afa2a95e2b..36b7a8f4bf 100644
--- a/conf/checksums.ini
+++ b/conf/checksums.ini
@@ -222,6 +222,10 @@ sha256=137f50a30461d51eb9af5aac737bc788d536354cf47b26129b97bde6e41fb85f
md5=61beda590bfc5b4a12e979d5f2d70d7a
sha256=dcacf4c18af89b57e66dc7ba39e24c3b74ff6f83b8745bcc1390170a4190eebd
+[http://downloads.sourceforge.net/mesa3d/MesaLib-7.0.2.tar.bz2]
+md5=93e6ed7924ff069a4f883b4fce5349dc
+sha256=9d4707b556960f6aef14480f91fcd4f868720f64321947ab1b2fd20e85ce7f9e
+
[http://search.cpan.org/CPAN/authors/id/K/KW/KWILLIAMS/Module-Build-0.2805.tar.gz]
md5=598bb59b86c2c4842eeffb03392fab5b
sha256=8fd609d1e6b460b5c95ad5612cb823aa863d51360ed55caea987909a9bab50f5
@@ -590,6 +594,10 @@ sha256=0aa0084a74f912f4002f1c40a815ce62ac13331ec84787a954d8bea06e1c96c5
md5=9d7cde75aecf4b85478c0e47343d4293
sha256=0aa0084a74f912f4002f1c40a815ce62ac13331ec84787a954d8bea06e1c96c5
+[http://files.chumby.com/source/ironforge/build396/align.pl]
+md5=d1cbac52c52b956d9cbe6277a7f9a8c5
+sha256=67695e9af2b0938b6406eeed41954bf8317693aa7ef8ad2e30fcea5bea59777f
+
[ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.11.tar.bz2]
md5=ef7ae78a0ef08cbeacb295f2518886ab
sha256=6b25f3d22cdb2476233f6dd74880fd88fb65124d4c282704bb9f0bf3fbd4c8d2
@@ -602,6 +610,10 @@ sha256=7a17403ac478cae0d837461b7efcd9075b17c6e7f3e2221fe1f2fdbd14f11dcf
md5=1ef39fb723f9209109134d6f4860cb21
sha256=01e693daf4c0e2af2e10082a635559d390f9127556a86d25105abfa646a9b0a3
+[ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.15.tar.bz2]
+md5=94254ea0d2c966a58184b134e9da29ff
+sha256=f24272f3a32262c5285fc5bae0b9aa65494e8b22ac536313dbb60b8e4231e952
+
[ftp://ftp.alsa-project.org/pub/oss-lib/alsa-oss-1.0.11.tar.bz2]
md5=3106c2d59a329263867fa3dd44133dda
sha256=6b688a3895a14945d0622e16cfdb9292ef9f953ab2d195b08595736f76e5a790
@@ -622,6 +634,10 @@ sha256=d7fe8a7995bc74331c89fbc1937a0682d239339d6659a402cd7b8e4b96c050f0
md5=6d3009c157ac6fc803696d6590a48366
sha256=307d630f0ed15e7e92fa35dc0c961737fa9aed22bd7a4a6054a72f85145fa5cb
+[ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.15.tar.bz2]
+md5=287f46f891581c15018de4f8c0731575
+sha256=3bb546e873df39159812168180eeff14b13620c653d90739ac0a0912e898aeac
+
[http://osdn.dl.sourceforge.jp/anthy/20510/anthy-7811.tar.gz]
md5=e3619c07bd175ce5f73d67388c0c2ea5
sha256=140828e8aa7d690d8f2a9a54faeac38bcbf40ea18c1f44a186af51bd6964cd13
@@ -1110,6 +1126,10 @@ sha256=fe6de9ccfab9e9fbdbe1a2cbe4a9ea771d1a2efc7f2122a2350214394587ff39
md5=9d7e02ea9a4c43d8f030500f282ee8bf
sha256=cf37ac1eb3ec0c473e527f11f068fc5fcc7452d688acc89a0e52553f51fc36bb
+[http://bluez.sourceforge.net/download/bluez-libs-3.23.tar.gz]
+md5=8f0368c6213abef36f1e563b44b2eed4
+sha256=3ea7817c91b8cff9cacba23392f4a4163412d92ee09236997622e0d19cad884e
+
[http://bluez.sourceforge.net/download/bluez-libs-3.4.tar.gz]
md5=8b73b0ccbcef6a4270468487b1309990
sha256=6c40f8b2dcf9359cc7f6afa803fc5744652c1d95669c134b975758a8748a87e8
@@ -1134,6 +1154,10 @@ sha256=f8f242c6835ae826bf1f4eaee6c50d47d6208715e45450ba42c1769094c3f296
md5=ef596746d656ed034ed64596f72ef3c2
sha256=5ed4245e31fa43789a3090d02a25ed90eaee95819cce30cda59d4d09f4fc0db0
+[http://bluez.sourceforge.net/download/bluez-utils-3.23.tar.gz]
+md5=767ad814bff4e1806f873ecf2434ba89
+sha256=4f3d52cc207e438018b3a4c307d9969862bf25c35b1e281c0d6201b624acd103
+
[http://bluez.sourceforge.net/download/bluez-utils-3.4.tar.gz]
md5=f63b440396baee7dee9259395a205d48
sha256=44a50104072a39e4f941ab68b6ffce5feb2fec7a94f3dd32f0945939d09eca39
@@ -1270,6 +1294,26 @@ sha256=984b7974670d4f0291094ea2a36ee21fe46591f36cb51f95292dbe143c1eeab4
md5=158ccadd830fe6cb3d21a109f398e037
sha256=08ef1e87c7198fb6d7c0a5f830fc2d99e5fd077dbb7d4ca1b66117ae924f6df3
+[http://www.busybox.net/downloads/busybox-1.7.2.tar.gz]
+md5=34c76dc55004d8d5dcea884e0e99bc21
+sha256=e0eb7d59ba996a58608999998ad630c67b93c05af4eafea29770c4839c0e5461
+
+[http://busybox.net/downloads/fixes-1.7.2/busybox-1.7.2-ash.patch]
+md5=4149857c0b2c7f3d52a1f2cec5d7778d
+sha256=73706e7d77144a6270da02ede61cde3c2e3b0e716d879737ac9d478b29233ba9
+
+[http://busybox.net/downloads/fixes-1.7.2/busybox-1.7.2-iptun.patch]
+md5=6c5f498e0677fd91b5b0e85ec5ac3b23
+sha256=b80a8c173c7a7a40a504585c6af5c74396c8fdbbb1cec179de9edcc030aa6a9a
+
+[http://busybox.net/downloads/fixes-1.7.2/busybox-1.7.2-logger.patch]
+md5=43c292e93bf92623aaa29dd0e243e9a9
+sha256=5117584a563c512b68cd9678d3cf54e6186f5a062836398791385f8ed73cca86
+
+[http://busybox.net/downloads/fixes-1.7.2/busybox-1.7.2-tail.patch]
+md5=c211189556c59a2665af45bffe5a5878
+sha256=f44c3c2d7d9b3fc8a5f9fb6ac587ae4170d2515d72f9e76deb8c071ce9847abe
+
[http://downloads.sourceforge.net/bvi/bvi-1.3.1.src.tar.gz]
md5=b9d77c57bda2e019207a1874d9bb4dea
sha256=c94dbfa293cbc61b8571d025e90fd1f06a34f8d4e5b11a59856bfc1f13014de3
@@ -1318,6 +1362,10 @@ sha256=594e78a66044898c321e378d47faf43b665b23ba638834d2787e344ba13e5132
md5=b254633046eafe603776d0bee791b751
sha256=7cf292ae376e7120ec548ad6a807a2f0f4f0539a304229a3bd98921453becd47
+[http://cairographics.org/releases/cairo-1.4.8.tar.gz]
+md5=5b9db574c9fbb94ce52047600190a1ba
+sha256=a3e9b0f07910ee325406118cf3e136fc78a5155c47fdb19e66e895a3c587bc51
+
[http://gpephone.linuxtogo.org/download/gpephone/calendar-1.0/calendar-1.0.tar.gz]
md5=eb7be3b85955a1bbe7a0154cbf2f70f9
sha256=7e6425b688a2d4bbeef0904cac52737b232d03fdc4d35866fd03359f2d5f1794
@@ -1506,6 +1554,10 @@ sha256=80fd209d065887729fdeb81f5a91638626e7ed31dabab40c446bd12042df9057
md5=c0b57a115e24005f9828ca7b53908779
sha256=f0127ba9cd9936b08f982999f6fd9004c8c4b97401e68bda4d91eec29300d8bd
+[http://www.cmake.org/files/v2.4/cmake-2.4.8.tar.gz]
+md5=f5dd061c31765a49dc17ae8bdc986779
+sha256=f20607d4f33376ea648307681630574662d0c3f59d88a7a02ad547b6320631f1
+
[ftp://ftp.logilab.fr/pub/common/common-0.4.4.tar.gz]
md5=4cd3ce38efbd27c6cf4223f0ced2a5b5
sha256=21341f1900b0fe919a2ad057c334f5d7172588e4262b3d1b0904da03a9db0cff
@@ -1870,6 +1922,10 @@ sha256=49c8303f58abf3a0efbbd42decdc5968688df32c154cffb20a1c3c1ae8b92048
md5=074cf116cc2c7194f2d100bc5f743833
sha256=963cc8a1f7e73a0929b7b527f6b4cfc5f78c932d673b5c13c889108d3182811a
+[https://stage.maemo.org/svn/maemo/projects/haf/trunk/fontconfig/device_symbols.h]
+md5=c0124afc760d4fe8c24ffcf15ba7f391
+sha256=4e0c1726f9c565deec6d6af9eebda47ca6dea473f3280cc89beb321ae33ff962
+
[http://downloads.sourceforge.net/devio/devio-1.0.tar.gz]
md5=3f421c80bce00b8bfe68ef9f453932b7
sha256=25380c3722c75b993d530c09d48f5941c0a640a4382f6a0e1878c4ee8459dd16
@@ -2378,10 +2434,22 @@ sha256=4b891e1d58c8cdf397737ac81a9328d8c663743b41f835bb2267831866d75a3e
md5=cf25d5d4c943ebf2293fe6f23ecba0fd
sha256=6f51ebdf0e18bea58d18f79e8ffebb797fe57bdf44b96dff9d84b70467af7841
+[ftp://ftp.debian.org/debian/pool/main/f/fakeroot/fakeroot_1.7.1.tar.gz]
+md5=3654bbbf01deeb0d804df194e1b1a2b3
+sha256=52b31fa70151b97ef871d44ad9214e90279f7cbd95144c6b40da49079ed0f1ce
+
[ftp://ftp.pl.debian.org/pub/debian/pool/main/f/fakeroot/fakeroot_1.7.1.tar.gz]
md5=3654bbbf01deeb0d804df194e1b1a2b3
sha256=52b31fa70151b97ef871d44ad9214e90279f7cbd95144c6b40da49079ed0f1ce
+[ftp://ftp.debian.org/debian/pool/main/f/fakeroot/fakeroot_1.8.3.tar.gz]
+md5=f123ffb457eb3577fcbb5e2c2432a922
+sha256=fd2ae24fc5bc14bfe63e0be551134a0f7906659f45803a427a2377b67d193867
+
+[ftp://ftp.debian.org/debian/pool/main/f/fakeroot/fakeroot_1.9.1.tar.gz]
+md5=163a846e51b39fd626b43548c2cdda7c
+sha256=6a3a993ab90540719e47b4968f60f8023a3cbb93f2a1ce611cd7a2d52ac1c38e
+
[ftp://oss.sgi.com/projects/fam/download/stable/fam-2.6.10.tar.gz]
md5=1c5a2ea659680bdd1e238d7828a857a7
sha256=885ced3480aef3cee519a459a572e31cd2fd5e24bcd35b1d0c8833361699026e
@@ -3054,6 +3122,10 @@ sha256=cfc0efbcc6fcde0d416a32dfb246c9df022515a312683fac412578c4fd09a9bc
md5=ac6d19831220c4aeef4475492725486f
sha256=98bdb26cd2644f2290e34453d9115b88bcff940bd1feb88db5a0fc557ec0ea5e
+[ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.2.2/gcc-4.2.2.tar.bz2]
+md5=7ae33781417a35a2eb03ee098a9f4490
+sha256=673b85d780a082c014ded4ac11f8269a3fe893b4dbb584d65b8602d50b3872b1
+
[http://xorg.freedesktop.org/releases/individual/util/gccmakedep-1.0.2.tar.gz]
md5=fc49f45251c1336fe1dad5dba1c83fcd
sha256=fdd3963294e80b27416f902a5c029c033d321f03310d3cafa3afb62b50ddce92
@@ -3222,6 +3294,10 @@ sha256=142d5d4795bef093eb9cfd50e384ae87ba9b9934d22b667174535d377ad47f1b
md5=b3f6a2a318610af6398b3445f1a2d6c6
sha256=10113e7b91f858557c7edb4b611cc009855c5ff8663af54977a65acb69445058
+[http://ftp.gnome.org/pub/GNOME/sources/glib/2.14/glib-2.14.0.tar.bz2]
+md5=6fabf21f68631043bc6924e01398e3af
+sha256=92e0aed2b5816bfcdfcd943215a7b59e9000f89ae7824218b7959c90161560a8
+
[http://ftp.gnome.org/pub/GNOME/sources/glib/2.14/glib-2.14.1.tar.bz2]
md5=196d7944a8ddc1f7c3d1e9c7146dd560
sha256=6f36ca624a12dce03cdea59c9eb900eda49ea2f463b329737eb9f2a8f3ac144d
@@ -3270,10 +3346,18 @@ sha256=0ae1b1dc1ee870d307ae6ad4546778377b04055520d3771dab1290e60ab13286
md5=1fb29764a6a650a4d5b409dda227ac9f
sha256=9b2e12bb1eafb55ab2e5a868532b8e6ec39216c66c25b8998d7474bc4d4eb529
+[ftp://ftp.gnu.org/pub/gnu/glibc/glibc-2.6.1.tar.bz2]
+md5=11cf6d3fc86dbe0890b8d00372eb6286
+sha256=3ded3a3c3ba2cf02d72479a5cc0829c7c261a9d0934e49a79233de9fa276ec22
+
[ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-2.5.tar.bz2]
md5=8787868ba8962d9b125997ec2f25ac01
sha256=de77e49e0beee6061d4c6e480f322566ba25d4e5e018c456a18ea4a8da5c0ede
+[ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-2.6.1.tar.bz2]
+md5=503f1315afd808728ebaa75b3d87a7d9
+sha256=67c98ca1299f5f25eaece256d033e0e63bcf6876b920ca62a1fe61ac62c5c451
+
[ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.5.tar.gz]
md5=c766a79a51668d7fa33f175a249655b4
sha256=c027824ee6593a838e0883bdd4bf8bd455b3dcf4ff0aa77fe82452819d882f47
@@ -3290,6 +3374,10 @@ sha256=2d7af8211cda81abde3e0bb8ccedbd18924a27b244ff35d4eacafcf899038c56
md5=183f6d46e8fa5e4b2aff240ab1586c2e
sha256=80c38a005325e7539012bd665fb8e06af9ee9bfc74efb236ebff121265bfd463
+[ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-2.6.1.tar.bz2]
+md5=53d88ca624642dd267752ccce77b19d0
+sha256=d094028bc6d6691f56b4efeff7cd7e1c7ca10733e0cb5efc36e8fb08d8324bf1
+
[ftp://ftp.gnome.org/pub/GNOME/sources/glibmm/2.8/glibmm-2.8.4.tar.bz2]
md5=952cdde2d6aef201c528d431036d71e1
sha256=7ff592b6687caefa367b33d8cb8f66f3c0273fa86d4b688c0758d0d9fee7a2cb
@@ -4382,6 +4470,10 @@ sha256=d02344239d048390ba02fcfd7de4f9efc0dfb51e7b06dfa46a6314d666ea4de2
md5=20d763198efb38263b22dee347f69da6
sha256=3aab107fb97a280b77fa30d07540e325d1511907bbce1e7efa5b4db2dffa28a3
+[http://download.gnome.org/sources/gtk+/2.12/gtk+-2.12.0.tar.bz2]
+md5=e9c280afec29b11772af5a7c807abf41
+sha256=faa1dc73f8077f72849ade14963202d8af22b51469c1e8e88e20c69d330fd2fd
+
[http://handhelds.org/packages/gtk-2.0/gtk+-2.2.4.diff.bz2]
md5=c6697665e06cad01e87c2cf8d0913725
sha256=2a768a45adea587c4a7d6e3c3567ad7961bf7509e118ae62ce32f5369b1aeeb0
@@ -4550,6 +4642,10 @@ sha256=5dc5cf08502510a00cecd6e04ef006a74ba7ed4b31d25187b5efadd70a78733b
md5=a6f532770cf9286e1de38d6570cbc6bc
sha256=65d8f8eeb61e7609a8c5001b6660d90e7a482c4b74b4e226d09b433dc1a80c9d
+[http://people.freedesktop.org/~david/dist/hal-info-20070618.tar.gz]
+md5=c7005ccb1765d8359fd2348350770495
+sha256=bec1b0ad166b6c4d5269e7aa6d7bdbd0eb05c8f2c30042e4dca18993ba5682f0
+
[http://downloads.sourceforge.net/haserl/haserl-0.8.0.tar.gz]
md5=bd9195d086566f56634c0bcbbbcbebea
sha256=ba261a21539e1f204ba74590d313c501007e546b54aa9ae7210a99eaf3c097be
@@ -4930,6 +5026,10 @@ sha256=913ff534aa777e3c36f3e9fe3e8638c3ccfe398daeb7532fa917e7bcd6fed07d
md5=e2c4cf4c2ad59d1e27f09381f6b4a3c3
sha256=62ba68a056daa89f5b21a02b27f6a4c858933e1c5547c9d16985d9ed182014e6
+[http://xorg.freedesktop.org/releases/individual/proto/inputproto-1.4.2.1.tar.bz2]
+md5=aa948a7469168ddd9c33f11c5dff55ac
+sha256=9b6db77037de7c52b9a17862b99bc435bd5c20e5d3faf5aec943b206cdaff3ed
+
[http://xorg.freedesktop.org/releases/individual/proto/inputproto-1.4.tar.gz]
md5=3faf4bc1e2bb9353590d7b1fe50ec306
sha256=5360e221354bbdfd67bf9834c2c1d7a0d83f22c17e057f92194411911fbb81f5
@@ -5330,6 +5430,10 @@ sha256=15bedd7f892fbb130e2b9c17d4f927c4904362a7be5b73d07d56d8aa7025f6f1
md5=071f96648ac25c8e87a3de11a7de2d8a
sha256=ffd46270dae30cad147d73559142a701a8ff8d0658f4abfb2341edefabb8161d
+[http://xorg.freedesktop.org/releases/individual/lib/libICE-1.0.4.tar.bz2]
+md5=4ab4e67e0b8845aa201e984153087f4a
+sha256=13055e2f4c645cbd135ce97a7974a5866f9ba3ed8988e686b552f55c30514f04
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libICE-X11R7.0-1.0.0.tar.bz2]
md5=c778084b135311726da8dc74a16b3555
sha256=e37cffdb45bbb193e5cb75e74e7e0410554f4b3c3a1fe436debea907778e6aac
@@ -5382,6 +5486,10 @@ sha256=5359db57793430429786b648ac570d4ab205797306e049bf1e8675250af21541
md5=710bf38a9477a5a1b235bc94f1d0593c
sha256=b77e4fd2bbd4092e7e78d0964760ad8ab160caccd4bc6d7d0c87a23febaea85e
+[http://xorg.freedesktop.org/releases/individual/lib/libX11-1.1.3.tar.bz2]
+md5=4d43d3e472c552d2f191ecdd4e75112c
+sha256=4a2f566e2ea5dd955c875cb8fa9c18dd725324fc5cf4e23c803442e31ab8917a
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libX11-X11R7.0-1.0.0.tar.bz2]
md5=dcf59f148c978816ebbe3fbc5c9ef0e1
sha256=89a3c2d8324ff9d0d91682503407310f7df30a74915cd253be3a75247b044248
@@ -5454,6 +5562,10 @@ sha256=142cd1c1958e2cb92ff2975a092a2c519dd5f4c433c9d1d8b6cc9ca967aad283
md5=ec2acd10a7736a85dd1e1ed9ea5bec96
sha256=8f039f81af52c88d583fba48b878abd074542221cb0030638ad52336b4ae1377
+[http://xorg.freedesktop.org/releases/individual/lib/libXcursor-1.1.9.tar.bz2]
+md5=99b7554037a92b260891091e81815a0a
+sha256=1dffb3542271c8ce964066d561474caec5b639d6588b257b21cfb8225a15d2b4
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libXcursor-X11R7.0-1.1.5.2.tar.bz2]
md5=048e15b725d8e081ac520e021af9a62c
sha256=52bbd6e05de84e94ec11f2734029183411c91e2297779098fb17e162aca5e191
@@ -5578,6 +5690,10 @@ sha256=7e6339539d3d0a4fc95cc23ca2b13ae67dd783e011b3cc5ca76040e376bff57f
md5=9c4dd85f3e2a75bfb60bd288502bc288
sha256=4deda13613f03e4524d3cf0ac14b9e20be5044d415cb8478713ecbe47f4de862
+[http://xorg.freedesktop.org/releases/individual/lib/libXi-1.1.3.tar.bz2]
+md5=7c510abb0cad8dc20493fb27ff7859d8
+sha256=c77a5bbe97d0d0a6493adefcf1bd57aca91bc33279633b3f6cf1d2bb8812153f
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libXi-X11R7.0-1.0.0.tar.bz2]
md5=99503799b4d52ec0cac8e203341bb7b3
sha256=64e8ece13fc778b9dd86ef93c4b782de9a1176a005ed7d895552a73acb103d9b
@@ -5650,6 +5766,10 @@ sha256=ba5adedc37da835a5c9e5a5d457dce13feead64fc364bc4719c41720ca0a3c50
md5=5860360f5b038cc728f388f875ce525d
sha256=2d2df642eb8e0527936cdf4ed1c096f69df53e9b95e2532c8ed0cabd06a45407
+[http://xorg.freedesktop.org/releases/individual/lib/libXrandr-1.2.2.tar.bz2]
+md5=1b244b5d19f0ccab01d7083436cd3558
+sha256=206f8dc850f12b1213fb73dbef09fafa1bb8fb8c3ddfe4d39721c1e2dec12a98
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libXrandr-X11R7.0-1.1.0.2.tar.bz2]
md5=e10aed44c2e1e5d9e6848a62ff2c90c7
sha256=6b6a3fcf44621bf163ba2db6dbcc518bff4e8cf74695d1b86595387a3ff3c6fb
@@ -5662,6 +5782,10 @@ sha256=5cfaac877aca06e3be09380037a68c6d2c4a57641fa6994bc14f07c0105cca25
md5=2f1b2c6e8dcbcb6d760e59f445abd92c
sha256=0f749183ab1a0ece14d33c3299b3f70893122349c0bfa9d7bd0e66ce19d1802a
+[http://xorg.freedesktop.org/releases/individual/lib/libXrender-0.9.4.tar.bz2]
+md5=dc266e850c51368f964e0d67bf5fb5e6
+sha256=5682d343dd4e7ef291a6577e956c331946ce5801d8fa076284a01b41de3017ec
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/lib/libXrender-X11R7.0-0.9.0.2.tar.bz2]
md5=3f0fa590dd84df07568631c91fbe68ab
sha256=f240490ce348cedcf09c2c5d170c7d79002790d72ea5dc3d7d702005684ff713
@@ -6518,6 +6642,10 @@ sha256=920fa2a0924d66884825d36a2e843de069cfdf1af01945d05da25999bbd6396c
md5=461d7097bf47864b872085a94ff94e10
sha256=01453d561255b5fcb361997904752860e4f8c6b9742f290578a44615fcc94356
+[http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz]
+md5=eaf7dc6ebbff30975de7527a80831585
+sha256=bae29e79fbc50bbedf1235852094b71c8c910a1ef0cd42fe4163b7b545630b65
+
[http://liboil.freedesktop.org/download/liboil-0.3.10.tar.gz]
md5=770f656bca8166dab33b322d5886a4bf
sha256=4587753a023550a066abe59a7e467c1af35b9f5e81bfb40a12463ad2df8f088c
@@ -6702,6 +6830,10 @@ sha256=835265bb0d39689e8a8580b5ffb53222b3f5f483d58aa533a5c7ebfc3d273d50
md5=ddc52cc8196f9f0bf48a5c7569b6bb38
sha256=83e82b9afe296584a6c9f1f8b3e3a70d324209021e0049f68d28bd1de8c18136
+[http://downloads.us.xiph.org/releases/libshout/libshout-2.2.2.tar.gz]
+md5=4f75fc9901c724b712c371c9a1e782d3
+sha256=912a1fdb12d31af757e7881db49321e5b5240bd8bd4199e9fb0ce16d66568160
+
[http://www.geocities.com/SiliconValley/Lakes/5147/sidplay/packages/libsidplay-1.36.59.tgz]
md5=37c51ba4bd57164b1b0bb7b43b9adece
sha256=3da9b38d4eb5bf9e936b9604ba92da0594ef38047d50cf806a8e11c400008024
@@ -6790,6 +6922,10 @@ sha256=2be78a947bdbfd24aa4f35ae97d2b7bafa60162c5e824cf3dd085b40eddee8ff
md5=2cbbbeaf97c154a7fb9b088b95deb70e
sha256=53e8740a3a36ece8078b371b95c79646dc69f0ad3ee2665e5fb659412c0baf35
+[http://downloads.xiph.org/releases/theora/libtheora-1.0alpha7.tar.gz]
+md5=55ee3c6db3e0927e7918309891a8f52b
+sha256=f5c7730ded0273a8615b12b46a32b800bbcb9e861e3a18aa92b1c062981a2fef
+
[http://downloads.sourceforge.net/tilp/libticables-3.9.2.tar.gz]
md5=354675bfbd881082a9447efde9935226
sha256=1c091859f09d5a38c76f0d64a93db46aa2b5d637c8a7370d348f21e7be324c37
@@ -6858,6 +6994,10 @@ sha256=748a9a5a1b2e6bf1db4cc767742acf58d836e551e56a493bd34ad759d3bb4f53
md5=4d6726fd02ce02f6e24824e594b0949a
sha256=20b3cbdb4b05322d470404a7d2e8cdae1e0ce5372113218ae3cada3b29da70f7
+[http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.0.tar.gz]
+md5=478646358c49f34aedcce58948793619
+sha256=6eb7040048e35448fe224fa3fd993eb4e49a905c57893886082f1674d43b0e73
+
[http://ftp.gnome.org/pub/GNOME/sources/libwnck/2.10/libwnck-2.10.2.tar.bz2]
md5=d8276da50ce560c5e66ed94e4238d9ef
sha256=d03295e5cb22ed7d086ce1ce754c498ed6bc2388c45e4547417d922580d3cd7c
@@ -7090,6 +7230,10 @@ sha256=727b55291a2c52f9f6b9f7ef03b2cd9fc54f7d4d1b0b2baed4c3dd6d9a890c71
md5=66d02cbd723876c6d69846a067875a22
sha256=cc56285834bed461fd405c00a34d3c3095673333b94621580eeeb0c65237af15
+[http://files.chumby.com/source/ironforge/build396/linux-2.6.16-chumby-1.2.tar.gz]
+md5=efb128aed7aba5d47b72bfa8d42d97c4
+sha256=69468ffe7dade5448c498230bd67fd5a9b843ef1b11ea3fe7161b2c7fc26ea77
+
[http://kernel.org//pub/linux/kernel/v2.6/linux-2.6.16.tar.bz2]
md5=9a91b2719949ff0856b40bc467fd47be
sha256=1200dcc7e60fcdaf68618dba991917a47e41e67099e8b22143976ec972e2cad7
@@ -7806,6 +7950,10 @@ sha256=8447eb112e0e42db59e490fa98b0a1c9ed90ff3660b99734fe5119061eddce8e
md5=b67ef657b83ca26249d7b9e9c5e7da69
sha256=d68f597c303678c3f325f552a0e2780b613dbf34d093c2269c002127be4953e5
+[http://go-mono.com/sources/mono/mono-1.2.6.tar.bz2]
+md5=391f85b4f962269e044ceac2b5235310
+sha256=24cc4f396cac3053c7ba3fe68bc1b80359d75dc4f54a85f39a73cabc3d3f560f
+
[http://venge.net/monotone/downloads/monotone-0.20.tar.gz]
md5=3bdf4da35ff576a401483815952f4045
sha256=56a5c5afd838f90146205ee4769b83988c6bafc85826c0fbcad982f1e0333d93
@@ -7894,6 +8042,10 @@ sha256=9416376952812e5b479745d67a2bf874fbcad10137517314ce7de37abb756df8
md5=843422d90349800ee721f6710d051c87
sha256=df551fb075d5e6d0824b74d231962cf0e104c43f646e233675d952ef3c03debc
+[http://www.mpfr.org/mpfr-2.3.0/mpfr-2.3.0.tar.bz2]
+md5=cf7c743e4be122e63eb6f372fc58b657
+sha256=359f0d344f92d1f145ddcd37adf54f9b8069aa2ce89c4a19603d080ef17d2d48
+
[http://downloads.sourceforge.net/mpg321/mpg321-0.2.10.tar.gz]
md5=bb403b35c2d25655d55f0f616b8f47bb
sha256=db0c299592b8f1f704f41bd3fc3a2bf138658108588d51af61638c551af1b0d4
@@ -8654,6 +8806,10 @@ sha256=46e20652ae4b9ceab5879ab939ec3eb2e57de742ea734272749ca53c93a20339
md5=6a33888e34c23f7fde09a6e94e4f5950
sha256=6e3549b8586d8ac3ae8b2251b6cff9065f12a5d648c9c464543988ddb670545b
+[http://cyberelk.net/tim/data/patchutils/stable/patchutils-0.2.31.tar.bz2]
+md5=3aa902cb7a57a4aa09427de603ebf17b
+sha256=3d087c88f6e2cc8fde8d2ab12ff2f85ca3ecb2c67754d0483d158f2e5802b015
+
[http://distro.ibiblio.org/pub/linux/distributions/gentoo/distfiles/pax-utils-0.1.13.tar.bz2]
md5=5f09df47a16e83462384b44b75310539
sha256=72f3cdad93b5436070dcc63b67764a06c594f324ccc001e8bfb974a8d1a86f36
@@ -8734,7 +8890,7 @@ sha256=6eb45f17b50d864157dac2028ee5d45f4f54548825f5a732e1a430d5aa2dd889
md5=195b684e025ff5c15617d6f757cf631f
sha256=e14546d11e899e7e9f06ca58979fee14b273d53c637eb268d7c6fe3bf78d564d
-[http://de3.php.net/distributions/php-4.4.4.tar.bz2]
+[http://museum.php.net/php4/php-4.4.4.tar.bz2]
md5=bc6fa8908e2ac36e93bab9f7d42cda3a
sha256=9f0742fce014a255f8453c1264afee5de289a9e9dcd57c448c77b46978f6a76b
@@ -8774,6 +8930,10 @@ sha256=468f25a70ef2dac90088caa6599c41ade6768e0cdc328dc3e82ab578903e69d4
md5=f9fea77e46ec7a3a16e925e137f146e7
sha256=a9d4545b5dfc018cdd33fd21bc73c3f1b3c9c207f1bb6843606cc180eb10c6c8
+[http://cairographics.org/releases/pixman-0.9.6.tar.gz]
+md5=d2b1071cdbb0b8da18039111ba2dfd22
+sha256=179abc613f5100081cdef833f24a35fe7b646b8a4f0c79647d9609f6bf8222d8
+
[http://pkgconfig.freedesktop.org/releases/pkg-config-0.22.tar.gz]
md5=fd5c547e9d66ba49bc735ccb8c791f2a
sha256=7e0761b47d604847006e7c6caa9b9cf044530a516ff84395450edcfa3c2febe6
@@ -9442,13 +9602,17 @@ sha256=c163e72cb002435d1d261a47acdcb23e59c10e4263f983a5f2c2d2ca40ede75b
md5=8012acea71b35c18247bd92c4721589d
sha256=abc37774d327a9b1d1d35e223f014c7e92168cd6c7baf66156badca68f8f1440
+[ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-4.3.3.tar.gz]
+md5=19678fe35170559cd6a6fa531c57799c
+sha256=89934bacc5cee5cb35a231275b0f9948f29483faf9082bed0e7255ce41751570
+
[ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-4.2.0.tar.gz]
md5=9519eccf0638c9962f73a7b20da77e0e
sha256=8fdbc7da376b22796879d6e3b756f71a8800ed1b35fc88aa76cddffd6f1fd883
-[ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-4.3.2.tar.gz]
-md5=70b729dd5dd8b2b432d685918e1971f1
-sha256=38af7b39e7805d8e3ba81091aa29af8bd38ce7cbbf8e721c8bb7ab810c38d963
+[ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-4.3.3.tar.gz]
+md5=f7022c57ec4cf4f1d5f5c8b8a70a9e5f
+sha256=2ed9f5006ac9f63db08bce409a3626141d5f6e8d562e25df5bd97cebc65ec10d
[http://keepcool.kf.tu-berlin.de/public/mitarbeiter/sadowski/qtopia-squeak-3.4-2_patched.tar.gz]
md5=0e2bab65b62784d8714057624373f70d
@@ -9478,6 +9642,10 @@ sha256=06b32d6f8fe7065b4c2c8142a244374e1be963757125bac20ba016b92231b5bf
md5=5f8dd5a041ca7c700b16620228f922aa
sha256=de7290f334baf631a14d031df304ee94cfb550aa69e7512aa589d21c2381c7d8
+[http://download.savannah.gnu.org/releases/quilt/quilt-0.46.tar.gz]
+md5=4508546d1ed0257ef7c128b6121b7208
+sha256=47bf030565bb462840db694acc183273455714028c74974c5b3a3bd4ad29ad89
+
[http://downloads.sourceforge.net/qwt/qwt-4.2.0rc1.tgz]
md5=142b10ab27e837c3c4603cf9a7e9343b
sha256=3b6db68d53441119dced27e5bad26ec087294cb9d878d37bcea61e1f1e4849a1
@@ -9578,6 +9746,10 @@ sha256=779317ca2e99f02b394af0c6f77f16def56de3b71a5d9f9ac6e5e9cfb65192e1
md5=28fbe8a59ebd31f098b90ec64f3d133a
sha256=7754dfbbb1e3818f28720fa9647b8a593e9d54626a7896771c2bfac7f75e2726
+[http://xorg.freedesktop.org/releases/individual/proto/renderproto-0.9.3.tar.bz2]
+md5=598bc9a493deee2e48e4434e94467189
+sha256=c98a08b877e98a8fa7daa04be472de7e0cb38a99593faca8b987effcea2dd45b
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/proto/renderproto-X11R7.0-0.9.2.tar.bz2]
md5=a7f3be0960c92ecb6a06a1022fe957df
sha256=a875741d110a73952119460fac31e1bb7d0b0aff16f59c2a0a04bcd434c74f41
@@ -9682,6 +9854,10 @@ sha256=d7d5a3d17f492049fceb2b9ea22c4c2af7243506219d83f7005b77ae410add29
md5=f4131d670920a878b4d4a0f5d4d8b93a
sha256=a677291149687339396fed06c46cc08fd76fcb62d0f4459cae02c6cf54b4eb39
+[http://files.chumby.com/source/ironforge/build396/rt73-chumby-1.2.tar.gz]
+md5=0340e1ceba72330111e6fc85679c75bf
+sha256=94beb93da6dabd16892c899f496eeec745fc69b856abd0d19896b2a4b0fb7c72
+
[http://music.mcgill.ca/~gary/rtaudio/release/rtaudio-3.0.1.tar.gz]
md5=5b60500bc9605d2409b71124e48aa929
sha256=59cc003bab753335b3ce14a908e663ea782514b3531dc7030379ff753ef1a78c
diff --git a/conf/distro/amsdelta-oe.conf b/conf/distro/amsdelta-oe.conf
index 6d3ad7bd6b..25b07e0038 100644
--- a/conf/distro/amsdelta-oe.conf
+++ b/conf/distro/amsdelta-oe.conf
@@ -2,7 +2,7 @@ DISTRO = "amsdelta-oe"
DISTRO_NAME = "AmsDelta Linux"
DISTRO_VERSION = "unstable-${DATE}"
-require conf/distro/angstrom-2007.1.conf
+require conf/distro/angstrom-2008.1.conf
DISTRO_TYPE = "debug"
diff --git a/conf/distro/angstrom-2007.1-legacy.conf b/conf/distro/angstrom-2007.1-legacy.conf
deleted file mode 100644
index 298c8589e3..0000000000
--- a/conf/distro/angstrom-2007.1-legacy.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-#this is a special version of angstrom for legacy (e.g. kernel 2.4) software
-# that means:
-# * no udev
-# * no sysfs
-# * no EABI for ARM
-
-require conf/distro/angstrom-2007.1.conf
-
-# We'll have to fill this in as we go.
diff --git a/conf/distro/angstrom-2007.1.conf b/conf/distro/angstrom-2007.1.conf
deleted file mode 100644
index 4c9a254cd9..0000000000
--- a/conf/distro/angstrom-2007.1.conf
+++ /dev/null
@@ -1,253 +0,0 @@
-#@--------------------------------------------------------------------
-#@TYPE: Distribution
-#@NAME: Angstrom <http://www.angstrom-distribution.org>
-#@DESCRIPTION: The Linux Distribution for Kernel 2.6 based devices
-#@MAINTAINER: Koen Kooi <koen@openembedded.org>
-#@MAINTAINER: Michael 'Mickey' Lauer <mickey@Vanille.de>
-#@--------------------------------------------------------------------
-
-#DISTRO_VERSION = "2007.9"
-DISTRO_VERSION = "2007.9-test-${DATE}"
-DISTRO_REVISION = "46"
-
-require conf/distro/include/sane-srcdates.inc
-require conf/distro/include/sane-srcrevs.inc
-
-#Images built can have to modes:
-# 'debug': empty rootpassword, strace included
-# 'release' no root password, no strace and gdb by default
-DISTRO_TYPE ?= "debug"
-#DISTRO_TYPE = "release"
-
-# Ship just basic locale by default. Locales are big (~1Mb uncompr.), so
-# shipping some adhoc subset will be still useless and size burden for
-# users of all other languages/countries. Instead, worth to make it easy
-# to install additional languages: installer/wizard + metapackages which
-# will RRECOMMEND as much as possible content for a given language
-# (locales, UI transalations, help, etc. - useless for pros, but really
-# helpful for common users).
-# Also, it appears that no locales fit in 16Mb for now. "C" locale rules!
-IMAGE_LINGUAS = '${@base_less_or_equal("ROOT_FLASH_SIZE", "16", "", "en-gb", d)}'
-
-# These will be put under package management soon
-#FEED_URIS += " \
-# no-arch##${ANGSTROM_URI}/unstable/feed/all \
-# base##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/base \
-# perl##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/perl \
-# python##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/python \
-# debug##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/debug \
-# gstreamer##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/gstreamer \
-# ${MACHINE}##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/machine/${MACHINE}"
-# base##${ANGSTROM_URI}/releases/${DISTRO_VERSION}/feed/${FEED_ARCH}/base \
-# ${MACHINE}##${ANGSTROM_URI}/releases/${DISTRO_VERSION}/feed/${FEED_ARCH}/machine/${MACHINE} \
-# updates##${ANGSTROM_URI}/releases/${DISTRO_VERSION}/feed/${FEED_ARCH}/updates"
-
-
-# set feed path variables
-FEED_BASEPATH = "feeds/2007/${ANGSTROM_PKG_FORMAT}/${ANGSTROM_MODE}/"
-
-
-#The angstrom-mirrors.bbclass should have everything, but we can use this as a fallback
-CVS_TARBALL_STASH ?= "\
- http://www.angstrom-distribution.org/unstable/sources/ \
- http://ewi546.ewi.utwente.nl/mirror/www.openzaurus.org/official/unstable/3.5.4/sources/ \
- "
-
-
-#Make sure we use 2.6 on machines with a 2.4/2.6 selector
-KERNEL = "kernel26"
-MACHINE_KERNEL_VERSION = "2.6"
-PCMCIA_MANAGER = "pcmciautils"
-
-#Preferred version for the kernel on various machines
-PREFERRED_VERSION_linux-handhelds-2.6 ?= "2.6.21-hh19"
-PREFERRED_VERSION_linux-ixp4xx ?= "2.6.21.6+svnr${SRCREV}"
-RDEPENDS_kernel-base_hx4700 = ""
-RDEPENDS_kernel-base_htcuniversal = ""
-
-PREFERRED_PROVIDER_libgsmd = "libgsmd"
-
-# older gtk-webcore releases don't work on ARM/EABI
-# We need to switch to a fixed SRCDATE or release as soon as possible
-PREFERRED_VERSION_osb-browser = "0.5.0+svn${SRCDATE}"
-PREFERRED_VERSION_osb-jscore = "0.5.2+svn${SRCDATE}"
-PREFERRED_VERSION_osb-nrcit = "0.5.2+svn${SRCDATE}"
-PREFERRED_VERSION_osb-nrcore = "0.5.2+svn${SRCDATE}"
-
-PREFERRED_PROVIDER_avahi = "avahi"
-
-#Small machines prefer kdrive, but we might ship full Xorg in other images
-PREFERRED_PROVIDER_virtual/xserver ?= "xserver-kdrive"
-PREFERRED_PROVIDER_xserver ?= "xserver-kdrive"
-
-#use EABI ready toolchain
-PREFERRED_VERSION_gcc ?= "4.1.2"
-PREFERRED_VERSION_gcc-cross ?= "4.1.2"
-PREFERRED_VERSION_gcc-cross-sdk ?= "4.1.2"
-PREFERRED_VERSION_gcc-cross-initial ?= "4.1.2"
-
-PREFERRED_VERSION_gcc_dht-walnut ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross_dht-walnut ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross-sdk_dht-walnut ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross-initial_dht-walnut ?= "4.1.1"
-
-PREFERRED_VERSION_gcc_xilinx-ml403 ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross_xilinx-ml403 ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross-sdk_xilinx-ml403 ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross-initial_xilinx-ml403 ?= "4.1.1"
-
-PREFERRED_VERSION_gcc_mpc8323e-rdb ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross_mpc8323e-rdb ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross-sdk_mpc8323e-rdb ?= "4.1.1"
-PREFERRED_VERSION_gcc-cross-initial_mpc8323e-rdb ?= "4.1.1"
-
-PREFERRED_VERSION_binutils ?= "2.18"
-PREFERRED_VERSION_binutils-cross ?= "2.18"
-PREFERRED_VERSION_binutils-cross-sdk ?= "2.18"
-
-#avr32 only has patches for binutils 2.17 and gcc 4.1.2 in OE
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc_avr32 = "avr32-gcc-cross"
-PREFERRED_VERSION_avr32-gcc = "4.1.2"
-PREFERRED_VERSION_avr32-gcc-cross = "4.1.2"
-PREFERRED_VERSION_gcc-cross-sdk_avr32 = "4.0.2"
-PREFERRED_VERSION_gcc-cross-initial_avr32 = "4.0.2"
-
-PREFERRED_VERSION_binutils_avr32 = "2.17"
-PREFERRED_VERSION_binutils-cross_avr32 = "2.17"
-PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17"
-
-#This is unrelated to the kernel version, but userspace apps (e.g. HAL) require a recent version to build against
-PREFERRED_VERSION_linux-libc-headers ?= "2.6.20"
-PREFERRED_VERSION_linux-libc-headers_bfin = "2.6.21"
-
-#Prefer glibc 2.5 and uclibc 0.9.29, these have had the most testing.
-PREFERRED_VERSION_glibc ?= "2.5"
-PREFERRED_VERSION_uclibc ?= "0.9.29"
-PREFERRED_VERSION_uclibc-initial ?= "0.9.29"
-
-#there's is no avr32 patch for 0.9.29
-PREFERRED_VERSION_uclibc_avr32 = "0.9.28"
-PREFERRED_VERSION_uclibc-initial_avr32 = "0.9.28"
-
-PREFERRED_VERSION_glibc-intermediate_i686 ?= "2.4"
-PREFERRED_VERSION_glibc-intermediate ?= "2.5"
-
-PREFERRED_VERSION_glibc-initial ?= "2.5"
-
-# To use an EABI compatible version 3 series gcc, either uncomment
-# the lines below or set them in local.conf:
-#
-# PREFERRED_VERSION_gcc-cross = "3.4.4+csl-arm-2005q3"
-# PREFERRED_VERSION_gcc-cross-initial = "3.4.4+csl-arm-2005q3"
-
-#Loads preferred versions from files, these have weak assigments (?=), so put them at the bottom
-require conf/distro/include/preferred-xorg-versions.inc
-require conf/distro/include/angstrom-2007-preferred-versions.inc
-require conf/distro/include/preferred-gpe-versions-2.8.inc
-require conf/distro/include/preferred-e-versions.inc
-
-
-# Virtuals:
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
-
-#Set preferred provider for the C library that is used to build the crosscompiler (NPTL voodoo)
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc-intermediate"
-PREFERRED_PROVIDER_virtual/arm-angstrom-linux-gnueabi-libc-for-gcc = "glibc-intermediate"
-PREFERRED_PROVIDER_virtual/armeb-angstrom-linux-gnueabi-libc-for-gcc = "glibc-intermediate"
-PREFERRED_PROVIDER_virtual/arm-angstrom-linux-libc-for-gcc = "glibc-intermediate"
-PREFERRED_PROVIDER_virtual/powerpc-angstrom-linux-libc-for-gcc = "glibc-intermediate"
-PREFERRED_PROVIDER_virtual/mipsel-angstrom-linux-libc-for-gcc = "glibc-intermediate"
-PREFERRED_PROVIDER_virtual/sparc-angstrom-linux-libc-for-gcc = "glibc-intermediate"
-
-PREFERRED_PROVIDER_virtual/arm-angstrom-linux-uclibcgnueabi-libc-for-gcc = "uclibc-initial"
-PREFERRED_PROVIDER_virtual/armeb-angstrom-linux-uclibcgnueabi-libc-for-gcc = "uclibc-initial"
-
-# hostap stuff, we prefer the in-kernel modules, but those don't work for all machines
-PREFERRED_PROVIDER_hostap-conf ?= "hostap-conf"
-PREFERRED_PROVIDER_hostap-modules_h2200 ?= "hostap-modules"
-PREFERRED_PROVIDER_hostap-modules_hx4700 ?= "hostap-modules"
-
-PREFERRED_PROVIDER_virtual/db ?= "db"
-PREFERRED_PROVIDER_virtual/db-native ?= "db-native"
-PREFERRED_PROVIDER_virtual/libsdl ?= "libsdl-x11"
-PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
-PREFERRED_PROVIDER_virtual/libxine ?= "libxine-x11"
-PREFERRED_PROVIDER_virtual/xserver ?= "xserver-kdrive"
-
-# Others:
-PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
-PREFERRED_PROVIDER_dbus-glib = "dbus-glib"
-PREFERRED_PROVIDER_esound ?= "pulseaudio"
-PREFERRED_PROVIDER_gconf ?= "gconf-dbus"
-PREFERRED_PROVIDER_gnome-vfs ?= "gnome-vfs"
-PREFERRED_PROVIDER_gnome-vfs-plugin-file ?= "gnome-vfs"
-PREFERRED_PROVIDER_tslib ?= "tslib"
-PREFERRED_PROVIDER_tslib-conf ?= "tslib"
-PREFERRED_PROVIDER_libgpewidget ?= "libgpewidget"
-PREFERRED_PROVIDER_ntp ?= "ntp"
-PREFERRED_PROVIDER_hotplug = "udev"
-PREFERRED_PROVIDER_libxss = "libxss"
-
-# we don't ship gtk-directfb by default
-PREFERRED_PROVIDER_gtk+ ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ani ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-gif ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ico ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-png ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ras ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-tga ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm ?= "gtk+"
-
-
-#Silence a warning during parsing
-PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
-
-#This is needed to get a correct PACKAGE_ARCH for packages that have PACKAGE_ARCH = ${MACHINE_ARCH}
-ARM_ABI ?= "${@['','oabi'][bb.data.getVar('MACHINE',d) in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}"
-require conf/distro/include/angstrom${ARM_ABI}.inc
-
-# do some task-base stuff here
-
-# We want to ship extra debug utils in the rootfs when doing a debug build
-DEBUG_APPS ?= ""
-DEBUG_APPS += '${@base_conditional("DISTRO_TYPE", "release", "", "strace procps",d)}'
-
-#this should go away soon
-EXTRA_STUFF ?= ""
-
-
-# Angstrom want to ship some extra stuff. This should be moved into task-base eventually
-# contains ipkg specific stuff as well :(
-
-#work around a bitbake bug where mtd-utils-native isn't created so do_rootfs fails
-DISTRO_EXTRA_DEPENDS += " \
- mtd-utils-native \
- "
-
-DISTRO_EXTRA_RDEPENDS += "\
- update-modules \
- ${@base_contains("MACHINE_FEATURES", "screen", "psplash", "",d)} \
- angstrom-version \
- ipkg ipkg-collateral ${ANGSTROM_FEED_CONFIGS} \
- util-linux-mount util-linux-umount \
- ${EXTRA_STUFF} \
- ${DEBUG_APPS} \
- "
-
-DISTRO_EXTRA_RRECOMMENDS += " \
- kernel-module-vfat \
- kernel-module-ext2 \
- kernel-module-af-packet \
- avahi-daemon \
- avahi-autoipd \
- openssh-sftp-server \
- "
diff --git a/conf/distro/angstrom-2008.1-legacy.conf b/conf/distro/angstrom-2008.1-legacy.conf
new file mode 100644
index 0000000000..358ed06cf2
--- /dev/null
+++ b/conf/distro/angstrom-2008.1-legacy.conf
@@ -0,0 +1,9 @@
+#this is a special version of angstrom for legacy (e.g. kernel 2.4) software
+# that means:
+# * no udev
+# * no sysfs
+# * no EABI for ARM
+
+require conf/distro/angstrom-2008.1.conf
+
+# We'll have to fill this in as we go.
diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf
index 145c463751..ec8a5b9b30 100644
--- a/conf/distro/angstrom-2008.1.conf
+++ b/conf/distro/angstrom-2008.1.conf
@@ -6,11 +6,15 @@
#@MAINTAINER: Michael 'Mickey' Lauer <mickey@Vanille-media.de>
#@--------------------------------------------------------------------
-# This is a testbed for unstable and/or untested things, while angstrom-2007.1
-# is aiming for stability and a release.
+# This is a aimed to be the next stable angstrom release.
+# If you want something stable *right now*, use angstrom-2007.1
+# with the org.openembedded.angstrom-2007.12-stable branch
+#
# Use this at your own risk, we welcome bugreports filed at
# http://bugs.openembedded.org
-# In doubt, use DISTRO="angstrom-2007.1"
+#
+# Again, in doubt, use DISTRO="angstrom-2007.1" with the
+# org.openembedded.angstrom-2007.12-stable branch
#DISTRO_VERSION = "2008.1"
DISTRO_VERSION = "2008.1-test-${DATE}"
@@ -35,14 +39,6 @@ DISTRO_TYPE ?= "debug"
# Also, it appears that no locales fit in 16Mb for now. "C" locale rules!
IMAGE_LINGUAS = '${@base_less_or_equal("ROOT_FLASH_SIZE", "16", "", "en-gb", d)}'
-FEED_URIS += " \
- no-arch##${ANGSTROM_URI}/unstable/feed/all \
- base##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/base \
- perl##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/perl \
- python##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/python \
- debug##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/debug \
- gstreamer##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/gstreamer \
- ${MACHINE}##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/machine/${MACHINE}"
# set feed path variables
FEED_BASEPATH = "feeds/2008/${ANGSTROM_PKG_FORMAT}/${ANGSTROM_MODE}/"
@@ -61,7 +57,7 @@ MACHINE_KERNEL_VERSION = "2.6"
PCMCIA_MANAGER = "pcmciautils"
#Preferred version for the kernel on various machines
-PREFERRED_VERSION_linux-handhelds-2.6 ?= "2.6.21-hh18"
+PREFERRED_VERSION_linux-handhelds-2.6 ?= "2.6.21-hh20"
#This is unrelated to the kernel version, but userspace apps (e.g. HAL) require a recent version to build against
PREFERRED_VERSION_linux-libc-headers = "2.6.23"
@@ -91,16 +87,44 @@ PREFERRED_PROVIDER_avahi = "avahi"
PREFERRED_PROVIDER_virtual/xserver ?= "xserver-kdrive"
PREFERRED_PROVIDER_xserver ?= "xserver-kdrive"
+#powerpc needs additional patches to gcc
+PREFERRED_VERSION_gcc_dht-walnut ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross_dht-walnut ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-sdk_dht-walnut ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-initial_dht-walnut ?= "4.1.1"
+
+PREFERRED_VERSION_gcc_xilinx-ml403 ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross_xilinx-ml403 ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-sdk_xilinx-ml403 ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-initial_xilinx-ml403 ?= "4.1.1"
+
+PREFERRED_VERSION_gcc_mpc8323e-rdb ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross_mpc8323e-rdb ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-sdk_mpc8323e-rdb ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-initial_mpc8323e-rdb ?= "4.1.1"
+
PREFERRED_VERSION_gcc ?= "4.2.2"
PREFERRED_VERSION_gcc-cross ?= "4.2.2"
PREFERRED_VERSION_gcc-cross-sdk ?= "4.2.2"
PREFERRED_VERSION_gcc-cross-initial ?= "4.2.2"
+
#Loads preferred versions from files, these have weak assigments (?=), so put them at the bottom
require conf/distro/include/preferred-gpe-versions-2.8.inc
require conf/distro/include/preferred-e-versions.inc
require conf/distro/include/preferred-xorg-versions-X11R7.3.inc
+#avr32 only has patches for binutils 2.17 and gcc 4.1.2 in OE
+PREFERRED_VERSION_gcc_avr32 = "4.1.2"
+PREFERRED_VERSION_gcc-cross_avr32 = "4.1.2"
+PREFERRED_VERSION_gcc-cross-sdk_avr32 = "4.1.2"
+PREFERRED_VERSION_gcc-cross-initial_avr32 = "4.1.2"
+PREFERRED_VERSION_binutils_avr32 = "2.17"
+PREFERRED_VERSION_binutils-cross_avr32 = "2.17"
+PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17"
+#there's is no avr32 patch for 0.9.29
+PREFERRED_VERSION_uclibc_avr32 = "0.9.28"
+PREFERRED_VERSION_uclibc-initial_avr32 = "0.9.28"
# Virtuals:
PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
@@ -182,7 +206,7 @@ DISTRO_EXTRA_RDEPENDS += "\
update-modules \
${@base_contains("MACHINE_FEATURES", "screen", "psplash", "",d)} \
angstrom-version \
- ipkg ipkg-collateral \
+ ipkg ipkg-collateral ${ANGSTROM_FEED_CONFIGS} \
util-linux-mount util-linux-umount \
${DEBUG_APPS} \
"
@@ -195,3 +219,6 @@ DISTRO_EXTRA_RRECOMMENDS += " \
avahi-autoipd \
openssh-sftp-server \
"
+
+SEPPUKU_NEWREPORT = "http://bugs.openembedded.org/post_bug.cgi?bug_file_loc=http%3A%2F%2F&version=Angstrom%202008.x&priority=P2&bug_severity=normal&op_sys=Linux&rep_platform=Other&"
+
diff --git a/conf/distro/chinook-compat.conf b/conf/distro/chinook-compat.conf
new file mode 100644
index 0000000000..f0e1ec2ad8
--- /dev/null
+++ b/conf/distro/chinook-compat.conf
@@ -0,0 +1,175 @@
+#@--------------------------------------------------------------------
+#@TYPE: Distribution
+#@NAME: Chinook-compatible
+#@DESCRIPTION: Distribution which allows building packages compatible to OS 2008
+#@--------------------------------------------------------------------
+
+# Note: This is not a complete distribution. Just some definitions to make
+# it possible to build packages that are compatible to Nokia's OS2008.
+# You should *not* replace core libraries of the operating system (glibc,
+# glib, gtk+, ..) with those you build in OE.
+#
+# Furthermore it may be possible that OpenEmbedded lacks specific versions
+# of some packages. If you encounter such a problem please provide a recipe
+# or file a bug!
+
+DISTRO = "chinook-compat"
+DISTRO_NAME = "Chinook-compat"
+DISTRO_VERSION = "test-${DATE}"
+DISTRO_TYPE = "debug"
+#DISTRO_TYPE = "release"
+
+require conf/distro/include/angstrom-glibc.inc
+FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -O1"
+
+INHERIT += "package_deb debian"
+TARGET_OS = "linux-gnueabi"
+
+TARGET_FPU_nokia770 = "soft"
+TARGET_FPU_nokia800 = "hard"
+
+DPKG_ARCH_nokia770 = "armel"
+DPKG_ARCH_nokia800 = "armel"
+
+FEED_ARCH_nokia770 = "armv5te"
+
+# Actually n800 is armv6 but we are using armv5te because qemu does not emulate
+# armv6 yet.
+FEED_ARCH_nokia800 = "armv5te"
+#FEED_ARCH_nokia800 = "armv6"
+
+#Make sure we use 2.6 on machines with a 2.4/2.6 selector
+KERNEL = "kernel26"
+MACHINE_KERNEL_VERSION = "2.6"
+
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial"
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc:gcc-cross"
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}g++:gcc-cross"
+
+PREFERRED_PROVIDER_virtual/libc = "glibc"
+
+# NPTL stuff
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_virtual/arm-linux-gnueabi-libc-for-gcc = "glibc-intermediate"
+
+PREFERRED_PROVIDER_virtual/arm-linux-gnueabi-binutils = "binutils-cross"
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-header"
+
+PREFERRED_VERSION_automake-native = "1.9.6"
+
+PREFERRED_VERSION_binutils = "2.17.50.0.12"
+PREFERRED_VERSION_binutils-cross = "2.18"
+
+PREFERRED_VERSION_gcc = "3.4.4+csl-arm-2005q3"
+PREFERRED_VERSION_gcc-cross = "3.4.4+csl-arm-2005q3"
+PREFERRED_VERSION_gcc-cross-initial = "3.4.4+csl-arm-2005q3"
+
+# Use recent enough version of the headers to let HAL build successfully.
+PREFERRED_VERSION_linux-libc-headers = "2.6.20"
+
+PREFERRED_VERSION_glibc = "2.5"
+PREFERRED_VERSION_glibc-intermediate = "2.5"
+PREFERRED_VERSION_glibc-initial = "2.5"
+
+PREFERRED_VERSION_libtool = "1.5.6"
+
+require conf/distro/include/sane-srcrevs.inc
+
+PREFERRED_VERSION_fontconfig = "2.4.1"
+PREFERRED_VERSION_freetype = "2.2.1"
+PREFERRED_VERSION_freetype-native = "2.2.1"
+PREFERRED_VERSION_cairo = "1.4.10"
+PREFERRED_VERSION_glib-2.0 = "2.12.12"
+PREFERRED_VERSION_pango = "1.16.4"
+PREFERRED_VERSION_atk = "1.18.0"
+PREFERRED_VERSION_gtk+ = "2.10.14"
+
+PREFERRED_VERSION_gnome-vfs = "2.16"
+# 3.9.1 would be correct
+PREFERRED_VERSION_gtkhtml-3.8 = "3.8.2"
+PREFERRED_VERSION_libxml2 = "2.6.27"
+# 2.16 would be correct
+PREFERRED_VERSION_gconf = "2.6.1"
+
+# gstreamer
+# 0.10.13 would be correct (+ maemo patches)
+PREFERRED_VERSION_gstreamer = "0.10.14"
+PREFERRED_VERSION_gst-plugins-good = "0.10.6"
+# 0.10.13 would be correct (+ maemo patches)
+PREFERRED_VERSION_gst-plugins-base = "0.10.14"
+# 0.11.3 would be correct ( + maemo patches)
+PREFERRED_VERSION_gst-ffmpeg = "0.10.2"
+
+PREFERRED_PROVIDER_virtual/db = "db"
+PREFERRED_PROVIDER_virtual/db-native = "db-native"
+PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
+
+# This is a hack to avoid building mesa which crashes the compiler
+PREFERRED_PROVIDER_virtual/libsdl = "libsdl-directfb"
+
+PREFERRED_PROVIDER_xserver = "xserver-kdrive"
+
+PREFERRED_VERSION_xserver-kdrive = "1.3.0.0"
+PREFERRED_VERSION_libxrandr = "1.2.1"
+PREFERRED_VERSION_xrandr = "1.2.0"
+PREFERRED_VERSION_randrproto = "1.2.1"
+
+PREFERRED_VERSION_libgnomeui = "2.18.1"
+
+PREFERRED_PROVIDER_gtk+ = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ani = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-gif = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ico = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-png = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ras = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-tga = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm = "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm = "gtk+"
+
+PREFERRED_PROVIDER_gconf = "gconf"
+
+PREFERRED_VERSION_pixman = "0.9.6"
+
+PREFERRED_PROVIDER_virtual/libqte2 = "qte-mt"
+PREFERRED_PROVIDER_avahi = "avahi"
+
+# Prevent chosing jikes-native (until java bootstrap patch is merged).
+PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
+
+PREFERRED_PROVIDER_swt3.4-gtk = "swt3.4-gtk-hildon"
+
+PREFERRED_VERSION_libsoup = "2.2.7"
+PREFERRED_VERSION_libglade = "2.4.2"
+PREFERRED_VERSION_gnutls = "1.4.5"
+PREFERRED_VERSION_libgpg-error = "1.0"
+PREFERRED_VERSION_libgcrypt = "1.2.3"
+
+PREFERRED_VERSION_gpe-scap = "1.3"
+
+# Does not compile with the CodeSourcery compiler .. :(
+PREFERRED_VERSION_kaffe = "1.1.8+cvs20080120"
+PREFERRED_VERSION_kaffeh-native = "1.1.8+cvs20080120"
+
+# WARNING: If you change these values after the respective package has
+# been built the change will have no effect. Edit the package's file in
+# ${STAGING}/pkgdata/runtime then.
+PKG_ncurses = "libncurses5"
+PKG_ncurses-tools = "ncurses-bin"
+PKG_ncurses-terminfo = "ncurses-base"
+
+PKG_gtk+ = "libgtk2.0-0"
+PKG_pango = "libpango1.0-0"
+PKG_atk = "libatk1.0-0"
+PKG_glib-2.0 = "libglib2.0-0"
+PKG_gconf = "libgconf2-6"
+DEBIANNAME_dbus_pn-dbus = "dbus"
+PKG_hildon-1 = "libhildon1"
+
+PKG_zlib = "zlib1g"
+PKG_libglade = "libglade2-0"
+PKG_libsoup = "libsoup2.2-8"
diff --git a/conf/distro/foonas.conf b/conf/distro/foonas.conf
index 234c92f62a..fe079db92d 100644
--- a/conf/distro/foonas.conf
+++ b/conf/distro/foonas.conf
@@ -8,7 +8,7 @@
FOONAS_MODE ?= "glibc"
ANGSTROM_MODE = ${FOONAS_MODE}
-require conf/distro/angstrom-2007.1.conf
+require conf/distro/angstrom-2008.1.conf
DISTRO = "foonas"
DISTRO_NAME = "foonas"
diff --git a/conf/distro/generic-uclibc.conf b/conf/distro/generic-uclibc.conf
index b77b3e9c87..26e78f89c1 100644
--- a/conf/distro/generic-uclibc.conf
+++ b/conf/distro/generic-uclibc.conf
@@ -21,5 +21,9 @@ DISTRO_NAME = "generic-uClibC"
TARGET_OS = "linux-uclibc"
TARGET_FPU_arm = "soft"
TARGET_FPU_armeb = "soft"
+PREFERRED_PROVIDER_virtual/libc = "uclibc"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "uclibc"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
PREFERRED_PROVIDER_virtual/libiconv = "libiconv"
PREFERRED_PROVIDER_virtual/libintl = "libintl"
diff --git a/conf/distro/generic.conf b/conf/distro/generic.conf
index 7ab7818393..d67be1d738 100644
--- a/conf/distro/generic.conf
+++ b/conf/distro/generic.conf
@@ -36,30 +36,34 @@ MACHINE_KERNEL_VERSION = "2.6"
#
# Binutils & Compiler
#
-PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial"
-PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc:gcc-cross"
-PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}g++:gcc-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
+PREFERRED_PROVIDER_virtual/arm-linux-binutils = "binutils-cross"
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
PREFERRED_VERSION_gcc ?= "4.1.1"
PREFERRED_VERSION_gcc-cross ?= "4.1.1"
PREFERRED_VERSION_gcc-cross-initial ?= "4.1.1"
-PREFERRED_VERSION_binutils ?= "2.17.50.0.5"
-PREFERRED_VERSION_binutils-cross ?= "2.17.50.0.5"
+PREFERRED_VERSION_binutils ?= "2.18"
+PREFERRED_VERSION_binutils-cross ?= "2.18"
#
# Target OS & FPU system
-#
+#
TARGET_OS = "linux"
TARGET_FPU_arm = "soft"
TARGET_FPU_armeb = "soft"
+#
+# C library
+#
PREFERRED_PROVIDER_virtual/libiconv = "glibc"
PREFERRED_PROVIDER_virtual/libintl = "glibc"
PREFERRED_PROVIDER_virtual/libc = "glibc"
-PREFERRED_PROVIDER_virtual/arm-linux-libc-for-gcc = "glibc-intermediate"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}-libc-for-gcc = "glibc-intermediate"
-PREFERRED_PROVIDER_virtual/${TARGET_ARCH}-${TARGET_OS}-libc-for-gcc = "glibc-intermediate"
-PREFERRED_VERSION_linux-libc-headers ?= "2.6.18"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
+PREFERRED_VERSION_linux-libc-headers ?= "2.6.23"
PREFERRED_VERSION_glibc ?= "2.5"
PREFERRED_VERSION_glibc-intermediate ?= "2.5"
@@ -67,28 +71,12 @@ PREFERRED_VERSION_glibc-intermediate ?= "2.5"
# Bootstrap & Init
#
PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
-require conf/distro/include/sane-srcdates.inc
-
-#
-# Framebuffer & X
-#
-PREFERRED_PROVIDER_virtual/libx11 ?= "diet-x11"
-PREFERRED_PROVIDER_tslib ?= "tslib"
-require conf/distro/include/preferred-xorg-versions-X11R7.2.inc
#
-# GPE
+# Preferred versions
#
-require conf/distro/include/preferred-gpe-versions-2.8.inc
-#
-# Opie
-#
-QTE_VERSION = "2.3.10"
-PALMTOP_USE_MULTITHREADED_QTE = "yes"
-require conf/distro/include/preferred-opie-versions.inc
+require conf/distro/include/sane-srcdates.inc
+require conf/distro/include/sane-srcrevs.inc
-#
-# Enlightenment
-#
-require conf/distro/include/preferred-e-versions.inc
+PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
diff --git a/conf/distro/include/angstrom-2007-for-openmoko.inc b/conf/distro/include/angstrom-2007-for-openmoko.inc
new file mode 100644
index 0000000000..380c882c2c
--- /dev/null
+++ b/conf/distro/include/angstrom-2007-for-openmoko.inc
@@ -0,0 +1,260 @@
+#@--------------------------------------------------------------------
+#@TYPE: Distribution
+#@NAME: Angstrom <http://www.angstrom-distribution.org>
+#@DESCRIPTION: The Linux Distribution for Kernel 2.6 based devices
+#@MAINTAINER: Koen Kooi <koen@openembedded.org>
+#@MAINTAINER: Michael 'Mickey' Lauer <mickey@Vanille.de>
+#@--------------------------------------------------------------------
+
+# If you want to use the angstrom 2007.12 release or if
+# you want to base you distro on angstrom 2007, switch to
+# the org.openembedded.angstrom-2007.12-stable branch
+# THIS FILE WILL GO AWAY IN JANUARY 2008!!
+
+DISTRO_VERSION = "2007.11RC3"
+DISTRO_REVISION = "51"
+
+require conf/distro/include/sane-srcdates.inc
+require conf/distro/include/sane-srcrevs.inc
+
+#Images built can have to modes:
+# 'debug': empty rootpassword, strace included
+# 'release' no root password, no strace and gdb by default
+DISTRO_TYPE ?= "debug"
+#DISTRO_TYPE = "release"
+
+# Ship just basic locale by default. Locales are big (~1Mb uncompr.), so
+# shipping some adhoc subset will be still useless and size burden for
+# users of all other languages/countries. Instead, worth to make it easy
+# to install additional languages: installer/wizard + metapackages which
+# will RRECOMMEND as much as possible content for a given language
+# (locales, UI transalations, help, etc. - useless for pros, but really
+# helpful for common users).
+# Also, it appears that no locales fit in 16Mb for now. "C" locale rules!
+IMAGE_LINGUAS = '${@base_less_or_equal("ROOT_FLASH_SIZE", "16", "", "en-gb", d)}'
+
+# These will be put under package management soon
+#FEED_URIS += " \
+# no-arch##${ANGSTROM_URI}/unstable/feed/all \
+# base##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/base \
+# perl##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/perl \
+# python##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/python \
+# debug##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/debug \
+# gstreamer##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/gstreamer \
+# ${MACHINE}##${ANGSTROM_URI}/unstable/feed/${FEED_ARCH}/machine/${MACHINE}"
+# base##${ANGSTROM_URI}/releases/${DISTRO_VERSION}/feed/${FEED_ARCH}/base \
+# ${MACHINE}##${ANGSTROM_URI}/releases/${DISTRO_VERSION}/feed/${FEED_ARCH}/machine/${MACHINE} \
+# updates##${ANGSTROM_URI}/releases/${DISTRO_VERSION}/feed/${FEED_ARCH}/updates"
+
+
+# set feed path variables
+FEED_BASEPATH = "feeds/2007/${ANGSTROM_PKG_FORMAT}/${ANGSTROM_MODE}/"
+
+
+#The angstrom-mirrors.bbclass should have everything, but we can use this as a fallback
+CVS_TARBALL_STASH ?= "\
+ http://www.angstrom-distribution.org/unstable/sources/ \
+ http://ewi546.ewi.utwente.nl/mirror/www.openzaurus.org/official/unstable/3.5.4/sources/ \
+ "
+
+
+#Make sure we use 2.6 on machines with a 2.4/2.6 selector
+KERNEL = "kernel26"
+MACHINE_KERNEL_VERSION = "2.6"
+PCMCIA_MANAGER = "pcmciautils"
+
+#Preferred version for the kernel on various machines
+PREFERRED_VERSION_linux-handhelds-2.6 ?= "2.6.21-hh20"
+PREFERRED_VERSION_linux-ixp4xx ?= "2.6.21.6+svnr${SRCREV}"
+RDEPENDS_kernel-base_hx4700 = ""
+RDEPENDS_kernel-base_htcuniversal = ""
+
+PREFERRED_PROVIDER_libgsmd = "libgsmd"
+
+# older gtk-webcore releases don't work on ARM/EABI
+# We need to switch to a fixed SRCDATE or release as soon as possible
+PREFERRED_VERSION_osb-browser = "0.5.0+svn${SRCDATE}"
+PREFERRED_VERSION_osb-jscore = "0.5.2+svn${SRCDATE}"
+PREFERRED_VERSION_osb-nrcit = "0.5.2+svn${SRCDATE}"
+PREFERRED_VERSION_osb-nrcore = "0.5.2+svn${SRCDATE}"
+
+PREFERRED_PROVIDER_avahi = "avahi"
+
+#Small machines prefer kdrive, but we might ship full Xorg in other images
+PREFERRED_PROVIDER_virtual/xserver ?= "xserver-kdrive"
+PREFERRED_PROVIDER_xserver ?= "xserver-kdrive"
+
+#use EABI ready toolchain
+PREFERRED_VERSION_gcc ?= "4.1.2"
+PREFERRED_VERSION_gcc-cross ?= "4.1.2"
+PREFERRED_VERSION_gcc-cross-sdk ?= "4.1.2"
+PREFERRED_VERSION_gcc-cross-initial ?= "4.1.2"
+
+PREFERRED_VERSION_gcc_dht-walnut ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross_dht-walnut ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-sdk_dht-walnut ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-initial_dht-walnut ?= "4.1.1"
+
+PREFERRED_VERSION_gcc_xilinx-ml403 ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross_xilinx-ml403 ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-sdk_xilinx-ml403 ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-initial_xilinx-ml403 ?= "4.1.1"
+
+PREFERRED_VERSION_gcc_mpc8323e-rdb ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross_mpc8323e-rdb ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-sdk_mpc8323e-rdb ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross-initial_mpc8323e-rdb ?= "4.1.1"
+
+PREFERRED_VERSION_binutils ?= "2.18"
+PREFERRED_VERSION_binutils-cross ?= "2.18"
+PREFERRED_VERSION_binutils-cross-sdk ?= "2.18"
+
+#avr32 only has patches for binutils 2.17 and gcc 4.1.2 in OE
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc_avr32 = "avr32-gcc-cross"
+PREFERRED_VERSION_avr32-gcc = "4.1.2"
+PREFERRED_VERSION_avr32-gcc-cross = "4.1.2"
+PREFERRED_VERSION_gcc-cross-sdk_avr32 = "4.0.2"
+PREFERRED_VERSION_gcc-cross-initial_avr32 = "4.0.2"
+
+PREFERRED_VERSION_binutils_avr32 = "2.17"
+PREFERRED_VERSION_binutils-cross_avr32 = "2.17"
+PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17"
+
+#This is unrelated to the kernel version, but userspace apps (e.g. HAL) require a recent version to build against
+PREFERRED_VERSION_linux-libc-headers ?= "2.6.20"
+PREFERRED_VERSION_linux-libc-headers_bfin = "2.6.21"
+
+#Prefer glibc 2.5 and uclibc 0.9.29, these have had the most testing.
+PREFERRED_VERSION_glibc ?= "2.5"
+PREFERRED_VERSION_uclibc ?= "0.9.29"
+PREFERRED_VERSION_uclibc-initial ?= "0.9.29"
+
+#there's is no avr32 patch for 0.9.29
+PREFERRED_VERSION_uclibc_avr32 = "0.9.28"
+PREFERRED_VERSION_uclibc-initial_avr32 = "0.9.28"
+
+PREFERRED_VERSION_glibc-intermediate_i686 ?= "2.4"
+PREFERRED_VERSION_glibc-intermediate ?= "2.5"
+
+PREFERRED_VERSION_glibc-initial ?= "2.5"
+
+# To use an EABI compatible version 3 series gcc, either uncomment
+# the lines below or set them in local.conf:
+#
+# PREFERRED_VERSION_gcc-cross = "3.4.4+csl-arm-2005q3"
+# PREFERRED_VERSION_gcc-cross-initial = "3.4.4+csl-arm-2005q3"
+
+#Loads preferred versions from files, these have weak assigments (?=), so put them at the bottom
+require conf/distro/include/preferred-xorg-versions.inc
+require conf/distro/include/angstrom-2007-preferred-versions.inc
+require conf/distro/include/preferred-gpe-versions-2.8.inc
+require conf/distro/include/preferred-e-versions.inc
+
+
+# Virtuals:
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
+
+#Set preferred provider for the C library that is used to build the crosscompiler (NPTL voodoo)
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_virtual/arm-angstrom-linux-gnueabi-libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_virtual/armeb-angstrom-linux-gnueabi-libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_virtual/arm-angstrom-linux-libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_virtual/powerpc-angstrom-linux-libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_virtual/mipsel-angstrom-linux-libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_virtual/sparc-angstrom-linux-libc-for-gcc = "glibc-intermediate"
+
+PREFERRED_PROVIDER_virtual/arm-angstrom-linux-uclibcgnueabi-libc-for-gcc = "uclibc-initial"
+PREFERRED_PROVIDER_virtual/armeb-angstrom-linux-uclibcgnueabi-libc-for-gcc = "uclibc-initial"
+
+# hostap stuff, we prefer the in-kernel modules, but those don't work for all machines
+PREFERRED_PROVIDER_hostap-conf ?= "hostap-conf"
+PREFERRED_PROVIDER_hostap-modules_h2200 ?= "hostap-modules"
+PREFERRED_PROVIDER_hostap-modules_hx4700 ?= "hostap-modules"
+
+PREFERRED_PROVIDER_virtual/db ?= "db"
+PREFERRED_PROVIDER_virtual/db-native ?= "db-native"
+PREFERRED_PROVIDER_virtual/libsdl ?= "libsdl-x11"
+PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
+PREFERRED_PROVIDER_virtual/libxine ?= "libxine-x11"
+PREFERRED_PROVIDER_virtual/xserver ?= "xserver-kdrive"
+
+# Others:
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
+PREFERRED_PROVIDER_dbus-glib = "dbus-glib"
+PREFERRED_PROVIDER_esound ?= "pulseaudio"
+PREFERRED_PROVIDER_gconf ?= "gconf-dbus"
+PREFERRED_PROVIDER_gnome-vfs ?= "gnome-vfs"
+PREFERRED_PROVIDER_gnome-vfs-plugin-file ?= "gnome-vfs"
+PREFERRED_PROVIDER_tslib ?= "tslib"
+PREFERRED_PROVIDER_tslib-conf ?= "tslib"
+PREFERRED_PROVIDER_libgpewidget ?= "libgpewidget"
+PREFERRED_PROVIDER_ntp ?= "ntp"
+PREFERRED_PROVIDER_hotplug = "udev"
+PREFERRED_PROVIDER_libxss = "libxss"
+
+# we don't ship gtk-directfb by default
+PREFERRED_PROVIDER_gtk+ ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ani ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-gif ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ico ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-png ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ras ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-tga ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm ?= "gtk+"
+
+
+#Silence a warning during parsing
+PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
+
+#This is needed to get a correct PACKAGE_ARCH for packages that have PACKAGE_ARCH = ${MACHINE_ARCH}
+ARM_ABI ?= "${@['','oabi'][bb.data.getVar('MACHINE',d) in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}"
+require conf/distro/include/angstrom${ARM_ABI}.inc
+
+# do some task-base stuff here
+
+# We want to ship extra debug utils in the rootfs when doing a debug build
+DEBUG_APPS ?= ""
+DEBUG_APPS += '${@base_conditional("DISTRO_TYPE", "release", "", "strace procps",d)}'
+
+#this should go away soon
+EXTRA_STUFF ?= ""
+
+
+# Angstrom want to ship some extra stuff. This should be moved into task-base eventually
+# contains ipkg specific stuff as well :(
+
+#work around a bitbake bug where mtd-utils-native isn't created so do_rootfs fails
+DISTRO_EXTRA_DEPENDS += " \
+ mtd-utils-native \
+ "
+
+DISTRO_EXTRA_RDEPENDS += "\
+ update-modules \
+ ${@base_contains("MACHINE_FEATURES", "screen", "psplash", "",d)} \
+ angstrom-version \
+ ipkg ipkg-collateral ${ANGSTROM_FEED_CONFIGS} \
+ util-linux-mount util-linux-umount \
+ ${EXTRA_STUFF} \
+ ${DEBUG_APPS} \
+ "
+
+DISTRO_EXTRA_RRECOMMENDS += " \
+ kernel-module-vfat \
+ kernel-module-ext2 \
+ kernel-module-af-packet \
+ avahi-daemon \
+ avahi-autoipd \
+ openssh-sftp-server \
+ "
+
+SEPPUKU_NEWREPORT = "http://bugs.openembedded.org/post_bug.cgi?bug_file_loc=http%3A%2F%2F&version=Angstrom%202007.12&priority=P2&bug_severity=normal&op_sys=Linux&rep_platform=Other&"
+
diff --git a/conf/distro/include/angstrom-2007-preferred-versions.inc b/conf/distro/include/angstrom-2007-preferred-versions.inc
index 72533c65e5..02e2399e4e 100644
--- a/conf/distro/include/angstrom-2007-preferred-versions.inc
+++ b/conf/distro/include/angstrom-2007-preferred-versions.inc
@@ -97,14 +97,14 @@ PREFERRED_VERSION_bison-native ?= "2.0"
PREFERRED_VERSION_bitbake ?= "1.8.6"
PREFERRED_VERSION_bitchx ?= "1.1"
PREFERRED_VERSION_bluesnarfer ?= "0.1"
-PREFERRED_VERSION_bluez-cups-backend ?= "3.22"
+PREFERRED_VERSION_bluez-cups-backend ?= "3.23"
PREFERRED_VERSION_bluez-dtl1-workaround ?= "1.0"
PREFERRED_VERSION_bluez-gnome ?= "0.14"
-PREFERRED_VERSION_bluez-gstreamer-plugin ?= "3.22"
+PREFERRED_VERSION_bluez-gstreamer-plugin ?= "3.23"
PREFERRED_VERSION_bluez-hcidump ?= "1.38"
-PREFERRED_VERSION_bluez-libs ?= "3.22"
-PREFERRED_VERSION_bluez-utils ?= "3.22"
-PREFERRED_VERSION_bluez-utils-alsa ?= "3.22"
+PREFERRED_VERSION_bluez-libs ?= "3.23"
+PREFERRED_VERSION_bluez-utils ?= "3.23"
+PREFERRED_VERSION_bluez-utils-alsa ?= "3.23"
PREFERRED_VERSION_bmon ?= "2.1.0"
PREFERRED_VERSION_boa ?= "0.94.13"
PREFERRED_VERSION_bochs ?= "2.1"
@@ -174,7 +174,7 @@ PREFERRED_VERSION_classpath-minimal ?= "0.95"
PREFERRED_VERSION_classpath-minimal-native ?= "0.95"
PREFERRED_VERSION_clearsilver ?= "0.10.3"
PREFERRED_VERSION_clish ?= "0.7.1"
-PREFERRED_VERSION_cmake-native ?= "2.2.3"
+PREFERRED_VERSION_cmake-native ?= "2.4.7"
PREFERRED_VERSION_cms92init ?= "0.1"
PREFERRED_VERSION_compositeproto ?= "0.4"
PREFERRED_VERSION_comprec ?= "0.02"
@@ -422,7 +422,7 @@ PREFERRED_VERSION_galago-daemon ?= "0.3.4"
PREFERRED_VERSION_galculator ?= "1.2.3"
PREFERRED_VERSION_gallery ?= "1.5.5"
PREFERRED_VERSION_gamin ?= "0.1.8"
-PREFERRED_VERSION_gammu ?= "1.13.0"
+PREFERRED_VERSION_gammu ?= "1.17.0"
PREFERRED_VERSION_gawk ?= "3.1.4"
PREFERRED_VERSION_gawk-native ?= "3.1.4"
PREFERRED_VERSION_gcalctool ?= "5.7.32"
@@ -509,7 +509,7 @@ PREFERRED_VERSION_gnomesword ?= "2.1.2"
PREFERRED_VERSION_gnuchess ?= "5.05"
PREFERRED_VERSION_gnumeric ?= "1.6.3"
PREFERRED_VERSION_gnupg ?= "1.4.2.2"
-PREFERRED_VERSION_gnuplot ?= "4.2.0"
+PREFERRED_VERSION_gnuplot ?= "4.2.2"
PREFERRED_VERSION_gnuradio ?= "3.0.4"
PREFERRED_VERSION_gnutls ?= "1.6.3"
PREFERRED_VERSION_gob2 ?= "2.0.14"
@@ -709,11 +709,6 @@ PREFERRED_VERSION_imlib ?= "1.9.15"
PREFERRED_VERSION_imlib2 ?= "1.4.0.002"
PREFERRED_VERSION_imposter ?= "0.3"
PREFERRED_VERSION_inetutils ?= "1.4.2"
-PREFERRED_VERSION_initramfs-jffs2 ?= "0.1"
-PREFERRED_VERSION_initramfs-module-block ?= "0.1"
-PREFERRED_VERSION_initramfs-module-loop ?= "0.1"
-PREFERRED_VERSION_initramfs-module-nfs ?= "0.1"
-PREFERRED_VERSION_initramfs-uniboot ?= "0.2"
PREFERRED_VERSION_initscripts ?= "1.0"
PREFERRED_VERSION_initscripts-openprotium ?= "1.0"
PREFERRED_VERSION_initscripts-slugos ?= "1.0"
@@ -838,7 +833,7 @@ PREFERRED_VERSION_libcompress-zlib-perl-native ?= "1.42"
PREFERRED_VERSION_libcontactsdb ?= "0.5"
PREFERRED_VERSION_libcroco ?= "0.6.1"
PREFERRED_VERSION_libcwd ?= "0.99.47"
-PREFERRED_VERSION_libdaemon ?= "0.11"
+PREFERRED_VERSION_libdaemon ?= "0.12"
PREFERRED_VERSION_libdata-optlist-perl ?= "0.101"
PREFERRED_VERSION_libdata-optlist-perl-native ?= "0.101"
PREFERRED_VERSION_libdbi ?= "0.7.2"
@@ -995,7 +990,7 @@ PREFERRED_VERSION_libpcl ?= "1.4"
PREFERRED_VERSION_libpcre ?= "4.4"
PREFERRED_VERSION_libpcre-native ?= "4.4"
PREFERRED_VERSION_libperl6-junction-perl ?= "1.10"
-PREFERRED_VERSION_libpixman ?= "0.1.6"
+PREFERRED_VERSION_libpixman ?= "0.9.6"
PREFERRED_VERSION_libpng ?= "1.2.20"
PREFERRED_VERSION_libpng-native ?= "1.2.20"
PREFERRED_VERSION_libpthread-stubs ?= "0.1"
@@ -1074,7 +1069,7 @@ PREFERRED_VERSION_libwindowswm ?= "1.0.0"
PREFERRED_VERSION_libwnck ?= "2.13.5"
PREFERRED_VERSION_libwpd ?= "0.8.6"
PREFERRED_VERSION_libx11 ?= "1.1.3"
-PREFERRED_VERSION_libx11-native ?= "1.0.1"
+PREFERRED_VERSION_libx11-native = "1.0.3"
PREFERRED_VERSION_libxau ?= "1.0.3"
PREFERRED_VERSION_libxau-native ?= "1.0.3"
PREFERRED_VERSION_libxaw ?= "1.0.4"
@@ -1169,7 +1164,6 @@ PREFERRED_VERSION_m4-native ?= "1.4.8"
PREFERRED_VERSION_macchanger ?= "1.5.0"
PREFERRED_VERSION_madfu ?= "1.2"
PREFERRED_VERSION_madplay ?= "0.15.2b"
-PREFERRED_VERSION_madwifi-ng ?= "r2518-20070626"
PREFERRED_VERSION_mahjongg ?= "1.0.0"
PREFERRED_VERSION_mailutils ?= "0.3.1"
PREFERRED_VERSION_mailx ?= "8.1.2-0.20050715cvs"
@@ -1236,7 +1230,7 @@ PREFERRED_VERSION_miau ?= "0.5.3"
PREFERRED_VERSION_micro-emacs ?= "20060909"
PREFERRED_VERSION_microcom ?= "1.02"
PREFERRED_VERSION_microwindows ?= "0.90"
-PREFERRED_VERSION_midori ?= "0.0.10"
+PREFERRED_VERSION_midori ?= "0.0.13"
PREFERRED_VERSION_midpath ?= "0.1"
PREFERRED_VERSION_midpath-alsa ?= "0.1"
PREFERRED_VERSION_midpath-cldc ?= "0.1"
@@ -1274,6 +1268,7 @@ PREFERRED_VERSION_modutils-cross ?= "2.4.27"
PREFERRED_VERSION_modutils-initscripts ?= "1.0"
PREFERRED_VERSION_moin ?= "1.5.8"
PREFERRED_VERSION_mono ?= "1.2.5.1"
+PREFERRED_VERSION_mono-mcs-intermediate ?= "1.2.5.1"
PREFERRED_VERSION_mono-native ?= "1.2.5.1"
PREFERRED_VERSION_monotone-4 ?= "0.19"
PREFERRED_VERSION_monotone-5 ?= "0.25.2"
@@ -1310,7 +1305,7 @@ PREFERRED_VERSION_nano ?= "2.0.6"
PREFERRED_VERSION_nasm-native ?= "0.98.38"
PREFERRED_VERSION_nautilus ?= "2.12.2"
PREFERRED_VERSION_nautilus-cd-burner ?= "2.8.5"
-PREFERRED_VERSION_navit ?= "0.0.1"
+PREFERRED_VERSION_navit ?= "0.0.3"
PREFERRED_VERSION_nbd ?= "2.8.7"
PREFERRED_VERSION_ncftp ?= "3.2.0"
PREFERRED_VERSION_ncmpc ?= "0.11.1"
@@ -1352,7 +1347,7 @@ PREFERRED_VERSION_obby ?= "0.4.1"
PREFERRED_VERSION_obexftp ?= "0.20"
PREFERRED_VERSION_obexpush ?= "1.0.0"
PREFERRED_VERSION_obexpush-native ?= "1.0.0"
-PREFERRED_VERSION_octave ?= "2.9.14"
+PREFERRED_VERSION_octave ?= "2.1.73"
PREFERRED_VERSION_offlineimap ?= "4.0.14"
PREFERRED_VERSION_olsr ?= "0.3-1"
PREFERRED_VERSION_olsrd ?= "0.5.3"
@@ -1438,7 +1433,7 @@ PREFERRED_VERSION_pine ?= "4.64"
PREFERRED_VERSION_pipeman ?= "1.0.0"
PREFERRED_VERSION_pipepanic ?= "0.1.1"
PREFERRED_VERSION_pivotinit ?= "1.0.0"
-PREFERRED_VERSION_pixman ?= "0.9.5"
+PREFERRED_VERSION_pixman ?= "0.9.6"
PREFERRED_VERSION_pixops-test ?= "1.0"
PREFERRED_VERSION_pkgconfig ?= "0.22"
PREFERRED_VERSION_pkgconfig-native ?= "0.22"
@@ -1501,7 +1496,7 @@ PREFERRED_VERSION_python-dbus ?= "0.81.1"
PREFERRED_VERSION_python-fam ?= "1.1.1"
PREFERRED_VERSION_python-fnorb ?= "1.3"
PREFERRED_VERSION_python-fpconst ?= "0.6.0"
-PREFERRED_VERSION_python-gammu ?= "0.21"
+PREFERRED_VERSION_python-gammu ?= "0.24"
PREFERRED_VERSION_python-gmpy ?= "1.0.1"
PREFERRED_VERSION_python-gnosis ?= "1.2.2"
PREFERRED_VERSION_python-gst ?= "0.10.8"
@@ -1543,7 +1538,6 @@ PREFERRED_VERSION_python-pylinda ?= "0.6"
PREFERRED_VERSION_python-pylint ?= "0.13.2"
PREFERRED_VERSION_python-pymetar ?= "0.11"
PREFERRED_VERSION_python-pymp3 ?= "0.3.4"
-PREFERRED_VERSION_python-pyqt ?= "4.3"
PREFERRED_VERSION_python-pyrad ?= "0.8"
PREFERRED_VERSION_python-pyraf ?= "1.4"
PREFERRED_VERSION_python-pyreverse ?= "0.5.2"
@@ -1565,7 +1559,6 @@ PREFERRED_VERSION_python-scons-native ?= "0.97"
PREFERRED_VERSION_python-setuptools ?= "0.6c6"
PREFERRED_VERSION_python-sgmlop ?= "1.1"
PREFERRED_VERSION_python-simplejson ?= "1.7.1"
-PREFERRED_VERSION_python-sip ?= "4.7"
PREFERRED_VERSION_python-snmplib ?= "0.1.1"
PREFERRED_VERSION_python-soappy ?= "0.11.6"
PREFERRED_VERSION_python-spydi ?= "0.9.7"
@@ -1599,7 +1592,7 @@ PREFERRED_VERSION_qpe-inputhelper-applet ?= "1.0.0"
PREFERRED_VERSION_qpe-libgaim ?= "1.5.0"
PREFERRED_VERSION_qpealarmclock ?= "1.0.9"
PREFERRED_VERSION_qpealarmclockapplet ?= "1.0.9"
-PREFERRED_VERSION_qpegps ?= "0.9.3"
+PREFERRED_VERSION_qpegps ?= "0.9.3.1"
PREFERRED_VERSION_qpenmapfe ?= "1.0.0"
PREFERRED_VERSION_qpf-arabic ?= "1.0"
PREFERRED_VERSION_qpf-bitstream-vera ?= "1.10"
@@ -1621,7 +1614,7 @@ PREFERRED_VERSION_qscintilla ?= "1.65-gpl-1.6"
PREFERRED_VERSION_qsvn ?= "0.3.0"
PREFERRED_VERSION_qt-x11-free ?= "3.3.7"
PREFERRED_VERSION_qt-x11-free-native ?= "3.3.5"
-PREFERRED_VERSION_qt4-x11-free ?= "4.3.2"
+PREFERRED_VERSION_qt4-x11-free ?= "4.3.3"
PREFERRED_VERSION_qtplot ?= "0.2"
PREFERRED_VERSION_quagga ?= "0.99.8"
PREFERRED_VERSION_quake1 ?= "0.0.1"
@@ -1659,6 +1652,7 @@ PREFERRED_VERSION_rfakeap ?= "0.2"
PREFERRED_VERSION_rglueap ?= "0.1"
PREFERRED_VERSION_rhythmbox ?= "0.8.7"
PREFERRED_VERSION_rlpr ?= "2.05"
+PREFERRED_VERSION_roadmap-gtk2 ?= "1.1.0"
PREFERRED_VERSION_rott ?= "1.0"
PREFERRED_VERSION_rox-filer ?= "2.5"
PREFERRED_VERSION_rp-pppoe ?= "3.8"
@@ -1725,7 +1719,6 @@ PREFERRED_VERSION_sidplayer ?= "1.5.0"
PREFERRED_VERSION_silo ?= "1.4.8"
PREFERRED_VERSION_simh ?= "3.7-1"
PREFERRED_VERSION_simpad-utilities ?= "1.0"
-PREFERRED_VERSION_sip-native ?= "4.7"
PREFERRED_VERSION_sip3-native ?= "4.0.1"
PREFERRED_VERSION_sipsak ?= "0.9.6"
PREFERRED_VERSION_skippy-xd ?= "0.5.0"
@@ -1890,14 +1883,14 @@ PREFERRED_VERSION_u-boot-omap2430sdp ?= "1.1.4"
PREFERRED_VERSION_u2nl ?= "1.3"
PREFERRED_VERSION_uae4all ?= "0.7.1"
PREFERRED_VERSION_ubahnnav ?= "0.4.1"
-PREFERRED_VERSION_uboot-utils ?= "1.2.0"
+PREFERRED_VERSION_u-boot-utils ?= "1.2.0"
PREFERRED_VERSION_udev ?= "092"
PREFERRED_VERSION_udev-hostap-cs-vcc-workaround ?= "1.0"
PREFERRED_VERSION_udhcp ?= "0.9.8"
PREFERRED_VERSION_ufraw ?= "0.12"
PREFERRED_VERSION_uicmoc-native ?= "2.3.10"
PREFERRED_VERSION_uicmoc3-native ?= "3.3.5"
-PREFERRED_VERSION_uicmoc4-native ?= "4.3.2"
+PREFERRED_VERSION_uicmoc4-native ?= "4.3.3"
PREFERRED_VERSION_uim ?= "1.3.1"
PREFERRED_VERSION_uim-native ?= "1.3.1"
PREFERRED_VERSION_uim-tomoe-gtk ?= "0.2.0"
@@ -2126,7 +2119,7 @@ PREFERRED_VERSION_zmerlin ?= "0.9.1"
PREFERRED_VERSION_zope ?= "3.3.1"
PREFERRED_VERSION_zrally ?= "0.90"
PREFERRED_VERSION_zrev7 ?= "1.0.1"
-PREFERRED_VERSION_zroadmap ?= "1.0.12"
+PREFERRED_VERSION_zroadmap ?= "1.1.0"
PREFERRED_VERSION_zsafe ?= "2.1.3"
PREFERRED_VERSION_zsh ?= "4.1.1"
PREFERRED_VERSION_zshopi ?= "0.2"
diff --git a/conf/distro/include/angstrom-uclibc.inc b/conf/distro/include/angstrom-uclibc.inc
index 59d40957d5..7e8e60d7dd 100644
--- a/conf/distro/include/angstrom-uclibc.inc
+++ b/conf/distro/include/angstrom-uclibc.inc
@@ -14,5 +14,10 @@ TARGET_OS = "${@['${TARGET_OS_UC}', 'uclinux-uclibc'][bb.data.getVar('TARGET_ARC
#Please see http://free-electrons.com/doc/embedded_linux_optimizations/img47.html for some more info
FULL_OPTIMIZATION = "-fexpensive-optimizations -fomit-frame-pointer -frename-registers -Os"
BUILD_OPTIMIZATION = "-Os"
+
+#Gcc will die with 'internal consistency error when using the above optimizations
+FULL_OPTIMIZATION_avr32 = ""
+BUILD_OPTIMIZATION_avr32 = ""
+
CXXFLAGS += "-fvisibility-inlines-hidden"
diff --git a/conf/distro/include/angstrom.inc b/conf/distro/include/angstrom.inc
index 510a752211..fe216800c3 100644
--- a/conf/distro/include/angstrom.inc
+++ b/conf/distro/include/angstrom.inc
@@ -50,6 +50,8 @@ TARGET_FPU_arm ?= "soft"
TARGET_FPU_armeb ?= "soft"
TARGET_FPU_ixp4xx ?= "soft"
+TARGET_FPU_dht-walnut ?= "soft"
+
#Set the right arch for the feeds
#Alphabetically sorted
@@ -151,6 +153,7 @@ FEED_ARCH_nslu2be = "armv5teb"
# armv6
FEED_ARCH_mx31ads = "armv6"
+FEED_ARCH_mx31moboard = "armv6"
FEED_ARCH_nokia800 = "armv6"
FEED_ARCH_omap2420h4 = "armv6"
FEED_ARCH_omap2430sdp = "armv6"
@@ -256,7 +259,7 @@ TINDER_REPORT = "1"
# seppuku bbclass
SEPPUKU_LOGIN = "http://bugs.openembedded.org/query.cgi?"
SEPPUKU_QUERY = "http://bugs.openembedded.org/buglist.cgi?"
-SEPPUKU_NEWREPORT = "http://bugs.openembedded.org/post_bug.cgi?bug_file_loc=http%3A%2F%2F&version=Angstrom&priority=P2&bug_severity=normal&op_sys=Linux&rep_platform=Other&"
+SEPPUKU_NEWREPORT = "http://bugs.openembedded.org/post_bug.cgi?bug_file_loc=http%3A%2F%2F&version=Angstrom%20unstable&priority=P2&bug_severity=normal&op_sys=Linux&rep_platform=Other&"
SEPPUKU_ADDCOMMENT = "http://bugs.openembedded.org/process_bug.cgi?bug_file_loc=http%3A%2F%2F&version=Angstrom&priority=P2&bug_severity=normal&op_sys=Linux&rep_platform=Other&"
SEPPUKU_ATTACHMENT = "http://bugs.openembedded.org/attachment.cgi?"
SEPPUKU_AUTOBUILD = "1"
@@ -269,5 +272,4 @@ SEPPUKU_COMPONENT = "build"
# We want images supporting the following features (for task-base)
-DISTRO_FEATURES = "nfs smbfs wifi ppp alsa bluetooth ext2 irda pcmcia usbgadget usbhost pci"
-DISTRO_FEATURES_nslu2 = "nfs smbfs alsa bluetooth ext2 usbhost pci"
+DISTRO_FEATURES = "nfs smbfs wifi ppp alsa bluetooth ext2 vfat irda pcmcia usbgadget usbhost pci"
diff --git a/conf/distro/include/moko-autorev.inc b/conf/distro/include/moko-autorev.inc
index 316fc5a4de..c5390811c6 100644
--- a/conf/distro/include/moko-autorev.inc
+++ b/conf/distro/include/moko-autorev.inc
@@ -10,67 +10,46 @@ SRCREV_pn-linux-openmoko-devel ?= "${AUTOREV}"
SRCREV_pn-moko-gtk-engine ?= "${AUTOREV}"
SRCREV_pn-neod ?= "${AUTOREV}"
-SRCREV_pn-openmoko-appmanager ?= "${AUTOREV}"
SRCREV_pn-openmoko-appmanager2 ?= "${AUTOREV}"
SRCREV_pn-openmoko-appearance ?= "${AUTOREV}"
SRCREV_pn-openmoko-browser2 ?= "${AUTOREV}"
-SRCREV_pn-openmoko-calculator ?= "${AUTOREV}"
SRCREV_pn-openmoko-calculator2 ?= "${AUTOREV}"
-SRCREV_pn-openmoko-common ?= "${AUTOREV}"
SRCREV_pn-openmoko-common2 ?= "${AUTOREV}"
-SRCREV_pn-openmoko-contacts ?= "${AUTOREV}"
SRCREV_pn-openmoko-contacts2 ?= "${AUTOREV}"
-SRCREV_pn-openmoko-dates ?= "${AUTOREV}"
SRCREV_pn-openmoko-dates2 ?= "${AUTOREV}"
-SRCREV_pn-openmoko-dialer ?= "${AUTOREV}"
SRCREV_pn-openmoko-dialer2 ?= "${AUTOREV}"
SRCREV_pn-openmoko-feedreader2 ?= "${AUTOREV}"
-SRCREV_pn-openmoko-finger-demo ?= "${AUTOREV}"
SRCREV_pn-openmoko-firststart2 ?= "${AUTOREV}"
-SRCREV_pn-openmoko-footer ?= "${AUTOREV}"
-SRCREV_pn-openmoko-icon-theme-standard ?= "${AUTOREV}"
SRCREV_pn-openmoko-icon-theme-standard2 ?= "${AUTOREV}"
SRCREV_pn-openmoko-icon-theme-standard2-qvga ?= "${AUTOREV}"
-SRCREV_pn-openmoko-keyboard ?= "${AUTOREV}"
-SRCREV_pn-openmoko-libs ?= "${AUTOREV}"
SRCREV_pn-openmoko-mediaplayer2 ?= "${AUTOREV}"
-SRCREV_pn-openmoko-messages ?= "${AUTOREV}"
SRCREV_pn-openmoko-messages2 ?= "${AUTOREV}"
SRCREV_pn-openmoko-panel-battery ?= "${AUTOREV}"
SRCREV_pn-openmoko-panel-bt ?= "${AUTOREV}"
SRCREV_pn-openmoko-panel-clock ?= "${AUTOREV}"
-SRCREV_pn-openmoko-panel-demo ?= "${AUTOREV}"
-SRCREV_pn-openmoko-panel-demo-simple ?= "${AUTOREV}"
SRCREV_pn-openmoko-panel-gps ?= "${AUTOREV}"
SRCREV_pn-openmoko-panel-gsm ?= "${AUTOREV}"
SRCREV_pn-openmoko-panel-mainmenu ?= "${AUTOREV}"
SRCREV_pn-openmoko-panel-usb ?= "${AUTOREV}"
SRCREV_pn-openmoko-sample2 ?= "${AUTOREV}"
-SRCREV_pn-openmoko-session ?= "${AUTOREV}"
-SRCREV_pn-openmoko-simplemediaplayer ?= "${AUTOREV}"
-SRCREV_pn-openmoko-sound-theme-standard ?= "${AUTOREV}"
SRCREV_pn-openmoko-sound-theme-standard2 ?= "${AUTOREV}"
-SRCREV_pn-openmoko-stylus-demo ?= "${AUTOREV}"
-SRCREV_pn-openmoko-stylus-demo-simple ?= "${AUTOREV}"
-SRCREV_pn-openmoko-taskmanager ?= "${AUTOREV}"
-SRCREV_pn-openmoko-tasks ?= "${AUTOREV}"
SRCREV_pn-openmoko-tasks2 ?= "${AUTOREV}"
SRCREV_pn-openmoko-terminal2 ?= "${AUTOREV}"
-SRCREV_pn-openmoko-theme-standard ?= "${AUTOREV}"
-SRCREV_pn-openmoko-theme-standard-qvga ?= "${AUTOREV}"
SRCREV_pn-openmoko-theme-standard2 ?= "${AUTOREV}"
SRCREV_pn-openmoko-theme-standard2-qvga ?= "${AUTOREV}"
-SRCREV_pn-openmoko-today ?= "${AUTOREV}"
SRCREV_pn-openmoko-today2 ?= "${AUTOREV}"
SRCREV_pn-openmoko-today2-folders ?= "${AUTOREV}"
+SRCREV_pn-openmoko-toolchain-scripts ?= "${AUTOREV}"
SRCREV_pn-openmoko-worldclock2 ?= "${AUTOREV}"
SRCREV_pn-openocd ?= "${AUTOREV}"
SRCREV_pn-openocd-native ?= "${AUTOREV}"
-SRCREV_pn-uboot-openmoko ?= "${AUTOREV}"
+SRCREV_pn-python-gsmd ?= "${AUTOREV}"
+
+SRCREV_pn-u-boot-openmoko ?= "${AUTOREV}"
+SRCREV_pn-u-boot-openmoko-devel ?= "${AUTOREV}"
SRCREV_pn-dfu-util ?= "${AUTOREV}"
SRCREV_pn-dfu-util-native ?= "${AUTOREV}"
SRCREV_pn-usbpath ?= "${AUTOREV}"
SRCREV_pn-usbpath-native ?= "${AUTOREV}"
-
diff --git a/conf/distro/include/preferred-om-2008-versions.inc b/conf/distro/include/preferred-om-2008-versions.inc
new file mode 100644
index 0000000000..2c2e0acb03
--- /dev/null
+++ b/conf/distro/include/preferred-om-2008-versions.inc
@@ -0,0 +1 @@
+PREFERRED_VERSION_vte = "0.16.10"
diff --git a/conf/distro/include/preferred-opie-versions-1.2.4-pre.inc b/conf/distro/include/preferred-opie-versions-1.2.4-pre.inc
index 324f4dd80c..0a95b1ff67 100644
--- a/conf/distro/include/preferred-opie-versions-1.2.4-pre.inc
+++ b/conf/distro/include/preferred-opie-versions-1.2.4-pre.inc
@@ -3,7 +3,7 @@
QTE_VERSION ?= "2.3.10"
PALMTOP_USE_MULTITHREADED_QT ?= "yes"
-OPIE_SRCDATE ?= "20070727"
+OPIE_SRCDATE ?= "20080127"
OPIE_VERSION ?= "1.2.3+cvs${OPIE_SRCDATE}"
OPIE_CVS_PV ?= "1.2.3+cvs${OPIE_SRCDATE}"
diff --git a/conf/distro/include/sane-srcdates.inc b/conf/distro/include/sane-srcdates.inc
index b3b47093b7..aaf7b02a09 100644
--- a/conf/distro/include/sane-srcdates.inc
+++ b/conf/distro/include/sane-srcdates.inc
@@ -53,7 +53,7 @@ SRCDATE_gtkhtml2 ?= "20060323"
# Enlightenment Foundation Libraries
# Caution: This is not alphabetically, but (roughly) dependency-sorted.
# Please leave it like that.
-EFL_SRCDATE = "20071206"
+EFL_SRCDATE = "20080129"
SRCDATE_edb-native ?= "${EFL_SRCDATE}"
SRCDATE_edb ?= "${EFL_SRCDATE}"
SRCDATE_eet-native ?= "${EFL_SRCDATE}"
@@ -88,6 +88,7 @@ SRCDATE_eflpp ?= "${EFL_SRCDATE}"
SRCDATE_python-evas ?= "${EFL_SRCDATE}"
SRCDATE_python-ecore ?= "${EFL_SRCDATE}"
SRCDATE_python-edje ?= "${EFL_SRCDATE}"
+SRCDATE_python-edbus ?= "${EFL_SRCDATE}"
SRCDATE_python-emotion ?= "${EFL_SRCDATE}"
SRCDATE_python-epsilon ?= "${EFL_SRCDATE}"
SRCDATE_python-ewl ?= "${EFL_SRCDATE}"
@@ -108,6 +109,7 @@ SRCDATE_e-utils ?= "${EFL_SRCDATE}"
SRCDATE_e-wm ?= "${EFL_SRCDATE}"
SRCDATE_enna ?= "${EFL_SRCDATE}"
SRCDATE_exquisite ?= "${EFL_SRCDATE}"
+SRCDATE_rage ?= "${EFL_SRCDATE}"
# Misc packages, sorted by alphabet
SRCDATE_avetanabt ?= "20060814"
@@ -148,7 +150,6 @@ SRCDATE_xcompmgr ?= "20060814"
SRCDATE_xirssi ?= "20060814"
SRCDATE_xsvg ?= "20060814"
SRCDATE_yamonenv ?= "20060814"
-SRCDATE_zroadmap ?= "20060814"
# Freedesktop.org
SRCDATE_poppler0.6 = "20070708"
diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc
index a65f477296..50ba415363 100644
--- a/conf/distro/include/sane-srcrevs.inc
+++ b/conf/distro/include/sane-srcrevs.inc
@@ -14,7 +14,7 @@ SRCREV_pn-dbus-c++-native ?= "13131"
SRCREV_pn-dbus-c++ ?= "13131"
SRCREV_pn-dfu-util ?= "2866"
SRCREV_pn-dfu-util-native ?= "2866"
-SRCREV_pn-eds-dbus ?= "628"
+SRCREV_pn-eds-dbus ?= "659"
SRCREV_pn-eglibc ?= "4355"
SRCREV_pn-eglibc-initial ?= "4355"
SRCREV_pn-eglibc-intermediate ?= "4355"
@@ -25,25 +25,27 @@ SRCREV_pn-fbgrab-viewer-native ?= "1943"
SRCREV_pn-fstests ?= "204"
SRCREV_pn-gconf-dbus ?= "606"
SRCREV_pn-gnuradio ?= "6377"
+SRCREV_pn-gpe-contacts ?= "9312"
+SRCREV_pn-gsm0710muxd ?= "42"
SRCREV_pn-gypsy ?= "56"
SRCREV_pn-hildon-1 ?= "14429"
SRCREV_pn-kismet ?= "2285"
SRCREV_pn-kismet-newcore ?= "2285"
SRCREV_pn-libcalenabler2 ?= "1410"
SRCREV_pn-libfakekey ?= "1455"
-SRCREV_pn-libgsmd ?= "3519"
+SRCREV_pn-libgsmd ?= "3684"
SRCREV_pn-libgsmd-devel ?= "3293"
-SRCREV_pn-libjana ?= "697"
-SRCREV_pn-libmokogsmd2 ?= "3378"
+SRCREV_pn-libjana ?= "700"
+SRCREV_pn-libmokogsmd2 ?= "3663"
SRCREV_pn-libmokojournal2 ?= "3217"
SRCREV_pn-libmokopanelui2 ?= "3349"
-SRCREV_pn-libmokoui2 ?= "3229"
+SRCREV_pn-libmokoui2 ?= "3688"
SRCREV_pn-libowl ?= "277"
SRCREV_pn-libxosd ?= "627"
SRCREV_pn-linux-bfin ?= "3758"
SRCREV_pn-linux-hackndev-2.6 ?= "1308"
-SRCREV_pn-linux-ixp4xx ?= "927"
-SRCREV_pn-linux-openmoko ?= "3238"
+SRCREV_pn-linux-ixp4xx ?= "1021"
+SRCREV_pn-linux-openmoko ?= "3801"
SRCREV_pn-llvm-gcc4 ?= "374"
SRCREV_pn-llvm-gcc4-cross ?= "374"
SRCREV_pn-maemo-mapper ?= "118"
@@ -62,18 +64,18 @@ SRCREV_pn-osb-nrcore ?= "126"
SRCREV_pn-openmoko-appearance ?= "3239"
SRCREV_pn-openmoko-appmanager ?= "1851"
SRCREV_pn-openmoko-appmanager2 ?= "3442"
-SRCREV_pn-openmoko-browser2 ?= "3249"
+SRCREV_pn-openmoko-browser2 ?= "3646"
SRCREV_pn-openmoko-calculator ?= "2404"
-SRCREV_pn-openmoko-calculator2 ?= "3235"
+SRCREV_pn-openmoko-calculator2 ?= "3655"
SRCREV_pn-openmoko-common ?= "397"
SRCREV_pn-openmoko-common2 ?= "3259"
SRCREV_pn-openmoko-contacts ?= "2298"
-SRCREV_pn-openmoko-contacts2 ?= "374"
+SRCREV_pn-openmoko-contacts2 ?= "387"
SRCREV_pn-openmoko-dates ?= "467"
-SRCREV_pn-openmoko-dates2 ?= "661"
+SRCREV_pn-openmoko-dates2 ?= "673"
SRCREV_pn-openmoko-dialer ?= "2811"
-SRCREV_pn-openmoko-dialer2 ?= "3522"
-SRCREV_pn-openmoko-feedreader2 ?= "3080"
+SRCREV_pn-openmoko-dialer2 ?= "3689"
+SRCREV_pn-openmoko-feedreader2 ?= "3645"
SRCREV_pn-openmoko-finger-demo ?= "1671"
SRCREV_pn-openmoko-firststart2 ?= "3158"
SRCREV_pn-openmoko-footer ?= "2354"
@@ -82,18 +84,19 @@ SRCREV_pn-openmoko-icon-theme-standard2 ?= "3247"
SRCREV_pn-openmoko-icon-theme-standard2-qvga ?= "3247"
SRCREV_pn-openmoko-keyboard ?= "1631"
SRCREV_pn-openmoko-libs ?= "2367"
-SRCREV_pn-openmoko-mediaplayer2 ?= "3345"
+SRCREV_pn-openmoko-mediaplayer2 ?= "3583"
SRCREV_pn-openmoko-messages ?= "2276"
-SRCREV_pn-openmoko-messages2 ?= "3477"
+SRCREV_pn-openmoko-messages2 ?= "3712"
SRCREV_pn-openmoko-panel-battery ?= "3360"
SRCREV_pn-openmoko-panel-bt ?= "3149"
SRCREV_pn-openmoko-panel-clock ?= "2567"
SRCREV_pn-openmoko-panel-demo ?= "1622"
SRCREV_pn-openmoko-panel-demo-simple ?= "1328"
SRCREV_pn-openmoko-panel-gps ?= "2900"
-SRCREV_pn-openmoko-panel-gsm ?= "3256"
+SRCREV_pn-openmoko-panel-gsm ?= "3664"
SRCREV_pn-openmoko-panel-mainmenu ?= "2567"
SRCREV_pn-openmoko-panel-usb ?= "3360"
+SRCREV_pn-openmoko-sample2 ?= "3528"
SRCREV_pn-openmoko-session ?= "152"
SRCREV_pn-openmoko-sample2 ?= "3537"
SRCREV_pn-openmoko-simplemediaplayer ?= "1688"
@@ -102,28 +105,31 @@ SRCREV_pn-openmoko-stylus-demo ?= "2324"
SRCREV_pn-openmoko-stylus-demo-simple ?= "1818"
SRCREV_pn-openmoko-taskmanager ?= "1663"
SRCREV_pn-openmoko-tasks ?= "320"
-SRCREV_pn-openmoko-tasks2 ?= "348"
-SRCREV_pn-openmoko-terminal2 ?= "3435"
+SRCREV_pn-openmoko-tasks2 ?= "361"
+SRCREV_pn-openmoko-terminal2 ?= "3764"
SRCREV_pn-openmoko-theme-standard ?= "2370"
SRCREV_pn-openmoko-theme-standard-qvga ?= "2370"
SRCREV_pn-openmoko-theme-standard2 ?= "3425"
SRCREV_pn-openmoko-theme-standard2-qvga ?= "3425"
SRCREV_pn-openmoko-today ?= "3056"
-SRCREV_pn-openmoko-today2 ?= "3478"
+SRCREV_pn-openmoko-today2 ?= "3609"
SRCREV_pn-openmoko-today2-folders ?= "3414"
+SRCREV_pn-openmoko-toolchain-scripts ?= "3767"
SRCREV_pn-openmoko-worldclock2 ?= "3365"
SRCREV_pn-openocd ?= "206"
SRCREV_pn-openocd-native ?= "206"
SRCREV_pn-oprofileui ?= "160"
SRCREV_pn-psplash ?= "249"
SRCREV_pn-python-formencode = "3148"
+SRCREV_pn-python-fso-pyproto = "49"
+SRCREV_pn-python-gsmd = "127"
SRCREV_pn-settings-daemon ?= "1755"
SRCREV_pn-sjf2410-linux-native ?= "933"
SRCREV_pn-sphyrna ?= "45"
SRCREV_pn-tmut ?= "60"
-SRCREV_pn-webkit-gtk ?= "27222"
-SRCREV_pn-webkit-qt ?= "27222"
-SRCREV_pn-webkit-qtopia ?= "27222"
+SRCREV_pn-webkit-gtk ?= "28656"
+SRCREV_pn-webkit-qt ?= "28656"
+SRCREV_pn-webkit-qtopia ?= "28656"
SRCREV_pn-wesnoth ?= "22021"
SRCREV_pn-xoo ?= "1623"
SRCREV_pn-mplayer ?= "24587"
diff --git a/conf/distro/include/slugos.inc b/conf/distro/include/slugos.inc
index ab80719646..c13c9b6c75 100644
--- a/conf/distro/include/slugos.inc
+++ b/conf/distro/include/slugos.inc
@@ -16,7 +16,7 @@
#TARGET_OS "linux" or "linux-uclibc"
# The following may be overridden to make sub-versions
-SLUGOS_VERSION = "4.7"
+SLUGOS_VERSION = "4.9"
DISTRO_REVISION ?= ""
DISTRO_VERSION ?= "${SLUGOS_VERSION}${DISTRO_REVISION}-${DISTRO_TYPE}"
# For release (only):
@@ -119,11 +119,6 @@ PREFERRED_VERSION_glibc ?= "2.5"
PREFERRED_VERSION_glibc-intermediate ?= "2.5"
PREFERRED_VERSION_glibc-initial ?= "2.5"
-# Select the correct versions of the kernel and modules (these are the
-# defaults, override in the conf/distro top-level distro file).
-PREFERRED_PROVIDER_virtual/kernel ?= "linux-ixp4xx"
-PREFERRED_VERSION_ixp4xx-kernel ?= "2.6.21.6"
-
# Select the smallest provider of x11 libraries
PREFERRED_PROVIDER_virtual/libx11 ?= "diet-x11"
SRCDATE_diet-x11 ?= "20060106"
diff --git a/conf/distro/maemo-1.0.conf b/conf/distro/maemo-1.0.conf
deleted file mode 100644
index b8592fdf68..0000000000
--- a/conf/distro/maemo-1.0.conf
+++ /dev/null
@@ -1,38 +0,0 @@
-require conf/distro/include/familiar.inc
-
-DISTRO = "maemo"
-DISTRO_NAME = "Maemo Linux"
-DISTRO_VERSION = "v1.0b-${DATE}"
-
-DISTRO_TYPE = "debug"
-#DISTRO_TYPE = "release"
-
-FEED_URIS += " \
- "
-#SRCDATE = 20050331
-
-PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial"
-PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}gcc:gcc-cross"
-PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}g++:gcc-cross"
-
-#PREFERRED_VERSION_binutils-cross = "2.15.91.0.2"
-#PREFERRED_VERSION_gcc-cross = "3.4.4"
-#PREFERRED_VERSION_gcc-cross-initial = "3.4.4
-#PREFERRED_VERSION_libtool-native = "1.5.6"
-#PREFERRED_VERSION_libtool-cross= "1.5.6"
-
-#
-# GPE
-#
-
-PREFERRED_PROVIDERS += "virtual/xserver:xserver-kdrive"
-PREFERRED_PROVIDERS += "virtual/gconf:gconf-dbus"
-PREFERRED_PROVIDER_virtual/libx11 = "diet-x11"
-
-require conf/distro/include/preferred-gpe-versions.inc
-
-#
-# Maemo
-#
-
-require conf/distro/include/maemo-preferred.inc
diff --git a/conf/distro/mokoslug.conf b/conf/distro/mokoslug.conf
index 2c039dbcce..d68a03fa2b 100644
--- a/conf/distro/mokoslug.conf
+++ b/conf/distro/mokoslug.conf
@@ -6,7 +6,7 @@
#@--------------------------------------------------------------------
# MokoSlug is based on Angstrom, and would hopefully just be done by features one day ...
-require conf/distro/angstrom-2007.1.conf
+require conf/distro/angstrom-2008.1.conf
DISTRO = "mokoslug"
DISTRO_NAME = "MokoSlug"
diff --git a/conf/distro/openmoko.conf b/conf/distro/openmoko.conf
index f2007c231f..dd6c2e0b7e 100644
--- a/conf/distro/openmoko.conf
+++ b/conf/distro/openmoko.conf
@@ -4,7 +4,8 @@
#@DESCRIPTION: Linux Distribution Configuration for the OpenMoko Platform
#-----------------------------------------------------------------------------
-require conf/distro/angstrom-2007.1.conf
+require conf/distro/include/preferred-om-2008-versions.inc
+require conf/distro/include/angstrom-2007-for-openmoko.inc
#
# Header
@@ -47,11 +48,8 @@ PREFERRED_PROVIDER_libgsmd = "libgsmd"
# Same kernel runs on both these machines
PACKAGE_ARCH_pn-linux-openmoko_fic-gta01 = "${MACHINE_CLASS}"
PACKAGE_ARCH_pn-linux-openmoko_fic-gta02 = "${MACHINE_CLASS}"
-# Same touchscreen on both these machines
-PACKAGE_ARCH_pn-pointercal_fic-gta01 = "${MACHINE_CLASS}"
-PACKAGE_ARCH_pn-pointercal_fic-gta02 = "${MACHINE_CLASS}"
-SRC_URI_OVERRIDES_PACKAGE_ARCH_pn-pointercal_fic-gta01 = "0"
-SRC_URI_OVERRIDES_PACKAGE_ARCH_pn-pointercal_fic-gta02 = "0"
+PACKAGE_ARCH_pn-linux-openmoko-devel_fic-gta01 = "${MACHINE_CLASS}"
+PACKAGE_ARCH_pn-linux-openmoko-devel_fic-gta02 = "${MACHINE_CLASS}"
# Same kernel so same usb
PACKAGE_ARCH_pn-usb-gadget-mode_fic-gta01 = "${MACHINE_CLASS}"
PACKAGE_ARCH_pn-usb-gadget-mode_fic-gta02 = "${MACHINE_CLASS}"
diff --git a/conf/distro/openprotium.conf b/conf/distro/openprotium.conf
index 928817d815..533b41526b 100644
--- a/conf/distro/openprotium.conf
+++ b/conf/distro/openprotium.conf
@@ -1,69 +1,84 @@
#
-# Open Iomega distribution - based on openslug and generic confs
+# OpenProtium distribution - based upon openslug and generic confs
#
DISTRO_NAME = "openprotium"
-DISTRO_VERSION = ".dev-snapshot-${SRCDATE}"
-DISTRO_TYPE = "alpha"
+DISTRO_VERSION = "1.3"
+DISTRO_TYPE ?= "alpha"
+TARGET_OS = "linux"
+#
+# Basic configuration
+#
+DISTRO_DEV_MANAGER = "udev"
+DISTRO_SSH_DAEMON = "dropbear"
+DISTRO_INIT_MANAGER = "sysvinit"
+DISTRO_LOGIN_MANAGER = "tinylogin"
+MACHINE_TASK_PROVIDER = "task-openprotium"
#
# Naming schemes
#
-INHERIT += "debian"
+INHERIT += "debian multimachine"
#
# Packaging and output format
#
INHERIT += "package_ipk"
-IMAGE_BASENAME = "openprotium"
-IMAGE_FSTYPES = "jffs2"
-FEED_URIS = "openprotium##http://www.openprotium.org/ipkg.ppc.v1.0"
+IMAGE_FSTYPES = "jffs2 tar.gz"
+OPENPROTIUM_URI = "http://www.openprotium.org"
+FEED_ARCH_storcenter = ppc603e
+FEED_ARCH_turbostation = ppc603e
+FEED_URIS = "\
+ no-arch##${OPENPROTIUM_URI}/releases/${DISTRO_VERSION}/all \
+ base##${OPENPROTIUM_URI}/releases/${DISTRO_VERSION}/${FEED_ARCH} \
+ ${MACHINE}##${OPENPROTIUM_URI}/releases/${DISTRO_VERSION}/${MACHINE} \
+ "
# For protium on the turbostation
+IMAGE_BASENAME = "openprotium"
IMAGE_BASENAME_turbostation = "openprotium-ts"
-#
-# binutils and compilers
-#
-PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial"
-PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}gcc:gcc-cross"
-PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}g++:gcc-cross"
-#conflict between this and the last below.
-#PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}libc-for-gcc:glibc"
-# Select 2.6 versions of the depmod support
-PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}depmod:module-init-tools-cross"
-PREFERRED_PROVIDERS += "virtual/${TARGET_PREFIX}libc-for-gcc:glibc-intermediate"
+# versions
+PREFERRED_VERSION_binutils ?= "2.18"
+PREFERRED_VERSION_binutils-cross ?= "2.18"
-PREFERRED_VERSION_binutils = "2.16"
-PREFERRED_VERSION_binutils-cross = "2.16"
+PREFERRED_VERSION_gcc ?= "4.1.1"
+PREFERRED_VERSION_gcc-cross ?= "4.1.2"
+PREFERRED_VERSION_gcc-cross-sdk ?= "4.1.2"
+PREFERRED_VERSION_gcc-cross-initial ?= "4.1.2"
-PREFERRED_VERSION_gcc = "4.1.1"
-PREFERRED_VERSION_gcc-cross = "4.1.1"
-PREFERRED_VERSION_gcc-cross-initial = "4.1.1"
+PREFERRED_VERSION_glibc = "2.6.1"
+PREFERRED_VERSION_glibc-intermediate = "2.6.1"
+PREFERRED_VERSION_glibc-initial = "2.6.1"
-PREFERRED_VERSION_glibc = "2.5"
-PREFERRED_VERSION_glibc-intermediate = "2.5"
-PREFERRED_VERSION_glibc-initial = "2.3.2"
+PREFERRED_VERSION_linux-libc-headers = "2.6.11.1"
-#
-# Target OS & FPU system
#
-USE_NLS ?= "no"
-TARGET_OS = "linux"
-HOTPLUG = "udev"
-PREFERRED_PROVIDER_virtual/libiconv = "glibc"
-PREFERRED_PROVIDER_virtual/libintl = "glibc"
-
+# Providers...
#
-# Bootstrap & Init
+# binutils and compilers
#
-#PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
-require conf/distro/include/sane-srcdates.inc
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-initial"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross"
+
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_virtual/powerpc-linux-libc-for-gcc = "glibc-intermediate"
+PREFERRED_PROVIDER_virtual/powerpc-linux-libc-initial = "glibc-initial"
+
+PREFERRED_PROVIDER_virtual/libc = "glibc"
+PREFERRED_PROVIDER_virtual/libiconv = "glibc"
+PREFERRED_PROVIDER_virtual/libintl = "glibc"
+
+#silence a warning message...
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers"
+
#
+# Misc items.
#
-# Ensure consistency across all SlugOS builds for the provider of a
-# relational database - use the latest version of the SleepyCat
-# Berkeley database
-PREFERRED_PROVIDER_virtual/db = "db"
-PREFERRED_PROVIDER_virtual/db-native = "db-native"
+PREFERRED_PROVIDER_virtual/db ?= "db"
+PREFERRED_PROVIDER_virtual/db-native ?= "db-native"
+PREFERRED_PROVIDER_gconf ?= "gconf"
-CMDLINE_DEBUG = "noirqdebug"
+require conf/distro/include/sane-srcdates.inc
+require conf/distro/include/sane-srcrevs.inc
diff --git a/conf/distro/openwrt-sdk.conf b/conf/distro/openwrt-sdk.conf
new file mode 100644
index 0000000000..92e5ac5b39
--- /dev/null
+++ b/conf/distro/openwrt-sdk.conf
@@ -0,0 +1,29 @@
+#-----------------------------------------------------------------------------
+#@TYPE: Distribution
+#@NAME: OpenWRT-SDK
+#@DESCRIPTION: Building packages for OpenWRT using its official SDK.
+#
+#@COMMENT: This allows to build packages only, not the whole images.
+#@COMMENT: You should install and have in path an SDK from the www.openwrt.org.
+#@COMMENT: SDK installers are both host and target specific (so look in download
+#@COMMENT: dir for your target). If there is no SDK for your host arch,
+#@COMMENT: you can also look at downloads of x-wrt.org, a sister project.
+#@COMMENT: To build a package, use command like:
+#@COMMENT: DISTRO=openwrt-sdk TARGET_ARCH=<arch> bitbake <package>
+#-----------------------------------------------------------------------------
+
+require conf/distro/generic-uclibc.conf
+
+#
+# Header
+#
+DISTRO_NAME = "OpenWRT"
+DISTRO_REVISION = "2"
+
+IPKGBUILDCMD = "ipkg-build -c -o 0 -g 0"
+
+# This is what lives in SDK
+ASSUME_PROVIDED += "virtual/${TARGET_PREFIX}gcc virtual/libc"
+
+# Make sure that we have correct package dependencies for SDK-provided libs.
+ASSUME_SHLIBS += "libc.so.0:uclibc libm.so.0:uclibc libgcc_s.so.1:libgcc"
diff --git a/conf/distro/slugos.conf b/conf/distro/slugos.conf
index 29c96ce384..012081f143 100644
--- a/conf/distro/slugos.conf
+++ b/conf/distro/slugos.conf
@@ -8,7 +8,7 @@
DISTRO_NAME = "SlugOS"
# DISTRO_VERSION = "${SLUGOS_VERSION}${DISTRO_REVISION}-${DISTRO_TYPE}"
# DISTRO_FEED = "unstable"
-DISTRO_TYPE = "beta"
+DISTRO_TYPE = "alpha"
TARGET_ARCH ?= "armeb"
ARM_INSTRUCTION_SET = "arm"
TARGET_OS = "linux"
diff --git a/conf/distro/unslung.conf b/conf/distro/unslung.conf
index ad75fffe11..5246df3990 100644
--- a/conf/distro/unslung.conf
+++ b/conf/distro/unslung.conf
@@ -3,7 +3,7 @@
#@DESCRIPTION: Unslung Linux Distribution for the NSLU2
DISTRO_NAME = "Unslung"
-DISTRO_VERSION = "6.9-alpha"
+DISTRO_VERSION = "6.11-beta"
DISTRO_TYPE = "beta"
FEED_URIS = "cross##http://ipkg.nslu2-linux.org/feeds/optware/nslu2/cross/stable"
@@ -45,7 +45,9 @@ PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial"
PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc:gcc-cross"
PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}g++:gcc-cross"
PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}libc-for-gcc:glibc"
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}binutils:binutils-cross"
PREFERRED_PROVIDERS += " virtual/libc:glibc"
+PREFERRED_PROVIDERS += " linux-libc-headers:linux-libc-headers"
PREFERRED_PROVIDER_libc6-unslung = "glibc"
diff --git a/conf/documentation.conf b/conf/documentation.conf
index 44a174a01b..6c71bc00c7 100644
--- a/conf/documentation.conf
+++ b/conf/documentation.conf
@@ -34,6 +34,11 @@ TARGET_CC_ARCH[doc] = "FIXME"
TARGET_FPU[doc] = "Floating point option (mostly for FPU-less systems), can be 'soft' or empty \
for hardware floating point instructions."
+ASSUME_PROVIDED[doc] = "List of packages (recipes actually) which are assumed to be implicitly available.\
+ These packages won't be built by bitbake."
+ASSUME_SHLIBS[doc] = "List of shlib:package[_version] mappings. Useful for lib packages in ASSUME_PROVIDED,\
+ for which automatic shlib dependency tracking doesn't work."
+
PACKAGE_ARCH[doc] = 'The architecture needed for using a resulting package. If you have \
machine dependant configuration options in your bitbake file add a \
PACKAGE_ARCH = "${MACHINE_ARCH}" to the file.'
@@ -98,6 +103,9 @@ PCMCIA_MANAGER[doc] = "Specify which package(s) to install to handle PCMCIA slot
SYSVINIT_ENABLED_GETTYS[doc] = "Specify which VTs should be running a getty, the default is 1"
+FEED_URIS[doc] = "List of ipkg feed records to put into generated image."
+FEED_DEPLOYDIR_BASE_URI[doc] = "Allow to serve ipk deploy dir as an adhoc feed (bogofeed). Set to base URL of the dir as exported by HTTP. Set of adhoc feed configs will be generated in image."
+
# insane bbclass
QA_LOG[doc] = "Enable logging of QA errors to log.qa_package. Default is not to log."
diff --git a/conf/local.conf.sample b/conf/local.conf.sample
index 0fa2b7d122..4d60fa729b 100644
--- a/conf/local.conf.sample
+++ b/conf/local.conf.sample
@@ -33,12 +33,19 @@ BBMASK = ""
# Uncomment this if you want to use a prebuilt toolchain. You will need to
# provide packages for toolchain and additional libraries yourself. You also
# have to set PATH in your environment to make sure BitBake finds additional binaries.
-# Note: You will definitely need to say:
-# ASSUME_PROVIDED += "virtual/arm-linux-gcc-2.95"
-# to build any of two Linux 2.4 Embedix kernels,
+# ASSUME_PROVIDED += "virtual/${TARGET_PREFIX}gcc virtual/libc"
+
+# Uncomment this if you're building for an arch that uses emulated locale
+# generation under qemu (mainly arm glibc) and have an external gcc 3.x compiler
+# that OE recognises. This will mean the gcc-native build is skipped, speeding
+# builds up.
+# ASSUME_PROVIDED += "gcc-native3"
+
+# Uncomment this if you are building Linux 2.4 Embedix kernels.
# i.e. openzaurus-sa-2.4.18 and openzaurus-pxa-2.4.18 - and don't forget
# to rename the binaries as instructed in the Wiki.
-# ASSUME_PROVIDED += "virtual/${TARGET_PREFIX}gcc virtual/libc"
+# Most users do not need this anymore thankfully!
+# ASSUME_PROVIDED += "virtual/arm-linux-gcc-2.95"
# Select between multiple alternative providers, if more than one is eligible.
PREFERRED_PROVIDERS = "virtual/qte:qte virtual/libqpe:libqpe-opie"
diff --git a/conf/machine/at32stk1000.conf b/conf/machine/at32stk1000.conf
index 2231f80ed2..4c3112df78 100644
--- a/conf/machine/at32stk1000.conf
+++ b/conf/machine/at32stk1000.conf
@@ -11,7 +11,7 @@ PREFERRED_PROVIDER_xserver = "xserver-kdrive"
#don't try to access tty1
USE_VT = "0"
-MACHINE_FEATURES = "kernel26 alsa ext2 usbhost usbgadget screen"
+MACHINE_FEATURES = "kernel26 alsa ext2 usbgadget touchscreen screen"
# used by sysvinit_2
SERIAL_CONSOLE = "115200"
@@ -21,3 +21,6 @@ ROOT_FLASH_SIZE = "8"
EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536"
KERNEL_IMAGETYPE = "uImage"
+PREFERRED_VERSION_u-boot = "1.1.4"
+
+
diff --git a/conf/machine/atngw100.conf b/conf/machine/atngw100.conf
index 4df1030570..21e256b04a 100644
--- a/conf/machine/atngw100.conf
+++ b/conf/machine/atngw100.conf
@@ -9,7 +9,8 @@ PREFERRED_PROVIDER_xserver = "xserver-kdrive"
#don't try to access tty1
USE_VT = "0"
-MACHINE_FEATURES = "kernel26 ext2 usbhost usbgadget"
+MACHINE_FEATURES = "kernel26 ext2 usbgadget"
+PREFERRED_PROVIDER_virtual/kernel = "linux"
# used by sysvinit_2
SERIAL_CONSOLE = "115200"
@@ -18,4 +19,6 @@ SERIAL_CONSOLE = "115200"
ROOT_FLASH_SIZE = "8"
EXTRA_IMAGECMD_jffs2 = " --big-endian --pagesize=4096 --eraseblock=65536"
+PREFERRED_VERSION_u-boot = "1.1.4"
KERNEL_IMAGETYPE = "uImage"
+
diff --git a/conf/machine/chumby.conf b/conf/machine/chumby.conf
new file mode 100644
index 0000000000..a1d6d43600
--- /dev/null
+++ b/conf/machine/chumby.conf
@@ -0,0 +1,30 @@
+#@TYPE: Machine
+#@Name: Chumby
+#@DESCRIPTION: Machine configuration for the Chumby
+
+TARGET_ARCH = "arm"
+
+MACHINE_FEATURES = "kernel26 apm alsa bluetooth ext2 vfat touchscreen usbhost usbgadget wifi"
+
+GUI_MACHINE_CLASS = "smallscreen"
+PACKAGE_EXTRA_ARCHS = "arm armv4t armv5te"
+
+PREFERRED_PROVIDER_virtual/kernel = "${MACHINE}-kernel"
+
+MACHINE_EXTRA_RRECOMMENDS = "\
+ kernel-modules \
+ rt73-k2wrlz \
+"
+
+require conf/machine/include/tune-arm926ejs.inc
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "38400 ttyS0"
+
+# used by opie-collections.inc
+ROOT_FLASH_SIZE = "22"
+
+# extra jffs2 tweaks
+EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x4000 --pad -n"
+
+IMAGE_FSTYPES += "cramfs"
diff --git a/conf/machine/cm-x270.conf b/conf/machine/cm-x270.conf
index 2522897042..1b6188753e 100644
--- a/conf/machine/cm-x270.conf
+++ b/conf/machine/cm-x270.conf
@@ -6,7 +6,7 @@ TARGET_ARCH = "arm"
GUI_MACHINE_CLASS ?= "bigscreen"
PREFERRED_PROVIDER_virtual/kernel = "linux"
-PREFERRED_VERSION_linux = "2.6.23"
+PREFERRED_VERSION_linux ?= "2.6.23"
PACKAGE_EXTRA_ARCHS = "armv4 armv4t armv5te iwmmxt"
diff --git a/conf/machine/collie.conf b/conf/machine/collie.conf
index c91bdcfc92..5170f8993e 100644
--- a/conf/machine/collie.conf
+++ b/conf/machine/collie.conf
@@ -5,22 +5,14 @@
TARGET_ARCH = "arm"
MACHINE_KERNEL_VERSION ?= "2.6"
-require conf/machine/include/collie-${MACHINE_KERNEL_VERSION}.inc
+require conf/machine/include/zaurus-${MACHINE_KERNEL_VERSION}.inc
+require conf/machine/include/tune-strongarm.inc
PREFERRED_PROVIDER_xserver = "xserver-kdrive"
-# This is needed for the ramdisk script to work
-MACHINE_EXTRA_RDEPENDS += "e2fsprogs-mke2fs"
-
EXTRA_IMAGECMD_jffs2 = "--pad=14680064 --little-endian --eraseblock=0x20000 -n"
-
IMAGE_LINGUAS = ""
-
IMAGE_FSTYPES ?= "jffs2 tar.gz"
-require conf/machine/include/tune-strongarm.inc
-
ROOT_FLASH_SIZE = "14"
# actually 14680064, see EXTRA_IMAGECMD above
-
-GUI_MACHINE_CLASS_poodle = "smallscreen"
diff --git a/conf/machine/dht-walnut.conf b/conf/machine/dht-walnut.conf
index a8a2d60c17..6eeb08825b 100644
--- a/conf/machine/dht-walnut.conf
+++ b/conf/machine/dht-walnut.conf
@@ -20,6 +20,7 @@ USE_VT = "0"
SERIAL_CONSOLE = "115200 ttyS0"
PREFERRED_VERSION_u-boot = "1.1.4"
+KERNEL_IMAGETYPE = "uImage"
#tune for the 405 cpu
require conf/machine/include/tune-ppc405.inc
diff --git a/conf/machine/fic-gta01.conf b/conf/machine/fic-gta01.conf
index 09517fd11d..ad0c64bef2 100644
--- a/conf/machine/fic-gta01.conf
+++ b/conf/machine/fic-gta01.conf
@@ -11,7 +11,7 @@ PACKAGE_EXTRA_ARCHS = "armv4t ${MACHINE_CLASS}"
PREFERRED_PROVIDER_virtual/kernel = "linux-openmoko"
UBOOT_ENTRYPOINT = "30008000"
-MACHINE_FEATURES = "kernel26 apm alsa bluetooth gps usbgadget usbhost phone"
+MACHINE_FEATURES = "kernel26 apm alsa bluetooth gps usbgadget usbhost phone vfat ext2"
MACHINE_DISPLAY_WIDTH_PIXELS = "480"
MACHINE_DISPLAY_HEIGHT_PIXELS = "640"
MACHINE_DISPLAY_ORIENTATION = "0"
@@ -25,12 +25,8 @@ MACHINE_EXTRA_RRECOMMENDS = "\
kernel-module-gta01-pm-gsm \
kernel-module-gta01kbd \
kernel-module-s3cmci \
- kernel-module-ext2 \
- kernel-module-vfat \
kernel-module-snd-soc-neo1973-wm8753 \
kernel-module-snd-soc-smdk2440 \
- kernel-module-nls-iso8859-1 \
- kernel-module-nls-cp437 \
"
# do not outcomment, we bypass the sysvinit.bb logic here -- see FIC GTA01 inittab
@@ -47,3 +43,4 @@ EXTRA_IMAGEDEPENDS += "dfu-util-native"
# tune for S3C24x0
include conf/machine/include/tune-arm920t.inc
+
diff --git a/conf/machine/fic-gta02.conf b/conf/machine/fic-gta02.conf
index 4cad7924f1..bd9621413a 100644
--- a/conf/machine/fic-gta02.conf
+++ b/conf/machine/fic-gta02.conf
@@ -11,7 +11,7 @@ PACKAGE_EXTRA_ARCHS = "armv4t ${MACHINE_CLASS}"
PREFERRED_PROVIDER_virtual/kernel = "linux-openmoko"
UBOOT_ENTRYPOINT = "30008000"
-MACHINE_FEATURES = "kernel26 apm alsa bluetooth gps usbgadget usbhost phone wifi"
+MACHINE_FEATURES = "kernel26 apm alsa bluetooth gps usbgadget usbhost phone wifi vfat ext2"
MACHINE_DISPLAY_WIDTH_PIXELS = "480"
MACHINE_DISPLAY_HEIGHT_PIXELS = "640"
MACHINE_DISPLAY_ORIENTATION = "0"
@@ -25,12 +25,8 @@ MACHINE_EXTRA_RRECOMMENDS = "\
kernel-module-gta01-pm-gsm \
kernel-module-gta01kbd \
kernel-module-s3cmci \
- kernel-module-ext2 \
- kernel-module-vfat \
kernel-module-snd-soc-neo1973-gta02-wm8753 \
kernel-module-snd-soc-smdk2440 \
- kernel-module-nls-iso8859-1 \
- kernel-module-nls-cp437 \
"
SERIAL_CONSOLE = "115200 ttySAC2"
@@ -39,7 +35,11 @@ SERIAL_CONSOLE = "115200 ttySAC2"
ROOT_FLASH_SIZE = "256"
# extra jffs2 tweaks
-EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x4000 --pad -n"
+EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=0x20000 --pagesize=0x800 \
+ --no-cleanmarkers --pad -n ; sumtool --eraseblock=0x20000 --no-cleanmarkers \
+ --littleendian --pad \
+ -i ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \
+ -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2.summary"
# build / upload tools
EXTRA_IMAGEDEPENDS += "sjf2410-linux-native dfu-util-native"
@@ -49,3 +49,4 @@ include conf/machine/include/tune-arm920t.inc
# build YAFFS2
IMAGE_FSTYPES ?= "jffs2 yaffs2"
+
diff --git a/conf/machine/gesbc-9302.conf b/conf/machine/gesbc-9302.conf
new file mode 100644
index 0000000000..ce45606dbd
--- /dev/null
+++ b/conf/machine/gesbc-9302.conf
@@ -0,0 +1,29 @@
+#@TYPE: Machine
+#@Name: Glomation GESBC-9302 single board computer
+#@DESCRIPTION: Low cost SBC based on Cirrus Logic EP9302 CPU
+
+TARGET_ARCH = "arm"
+PACKAGE_EXTRA_ARCHS = "armv4t"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux"
+PREFERRED_VERSION_linux ?= "2.6.23+2.6.24-rc5"
+
+#don't try to access tty1
+USE_VT = "0"
+
+MACHINE_FEATURES = "kernel26 apm alsa ext2 pcmcia usbhost screen"
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "57600 ttyAM0"
+
+# used by some images
+ROOT_FLASH_SIZE = "8"
+#extra jffs2 tweaks
+EXTRA_IMAGECMD_jffs2 = "--eraseblock=0x40000 --pad=0x500000 "
+
+#tune for ep93xx cpus
+#can be used for crunch support later on
+#require conf/machine/include/tune-ep9312.inc
+
+require conf/machine/include/tune-arm920t.inc
+
diff --git a/conf/machine/h1910.conf b/conf/machine/h1910.conf
index 15390d2d56..439c484970 100644
--- a/conf/machine/h1910.conf
+++ b/conf/machine/h1910.conf
@@ -15,7 +15,7 @@ ROOT_FLASH_SIZE = "16"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda usbgadget screen vfat"
#
# Software/packages selection
diff --git a/conf/machine/h1940.conf b/conf/machine/h1940.conf
index 409eacaed5..99e82d28f4 100644
--- a/conf/machine/h1940.conf
+++ b/conf/machine/h1940.conf
@@ -13,7 +13,7 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-h1940"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm bluetooth irda usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm bluetooth irda usbgadget screen vfat"
# Some extra configuration
diff --git a/conf/machine/h2200.conf b/conf/machine/h2200.conf
index c149da18fa..cad7d0393c 100644
--- a/conf/machine/h2200.conf
+++ b/conf/machine/h2200.conf
@@ -17,7 +17,7 @@ ROOT_FLASH_SIZE = "32"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia bluetooth irda usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia bluetooth irda usbgadget screen vfat"
#
# Software/packages selection
@@ -26,7 +26,8 @@ PCMCIA_MANAGER = "pcmciautils"
PREFERRED_PROVIDER_xserver = "xserver-kdrive"
PREFERRED_PROVIDER_virtual/kernel = "linux-handhelds-2.6"
-MACHINE_EXTRA_RDEPENDS = "h2200-bootloader udev-hostap-cs-vcc-workaround"
+MACHINE_ESSENTIAL_EXTRA_RDEPENDS = " h2200-bootloader "
+MACHINE_EXTRA_RDEPENDS = " udev-hostap-cs-vcc-workaround "
MACHINE_EXTRA_RRECOMMENDS = "\
kernel-module-snd-h2200-audio \
kernel-module-i2c-pxa \
@@ -39,7 +40,7 @@ EXTRA_IMAGECMD_jffs2 = "--pad --eraseblock=0x4000"
#
module_autoload_snd-pcm-oss = "snd-pcm-oss"
module_autoload_snd-mixer-oss = "snd-mixer-oss"
-module_autoload_snd-h2000-audio = "snd-h2000-audio"
+module_autoload_snd-h2200-audio = "snd-h2200-audio"
SERIAL_CONSOLE = "115200 ttyS0 vt100"
USE_VT = "0"
diff --git a/conf/machine/h3600.conf b/conf/machine/h3600.conf
index 1fcaf664d4..c037226154 100644
--- a/conf/machine/h3600.conf
+++ b/conf/machine/h3600.conf
@@ -17,7 +17,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda usbgadget screen vfat"
#
# Software/packages selection
diff --git a/conf/machine/h3800.conf b/conf/machine/h3800.conf
index 173f2a5c8f..a13ed48d4a 100644
--- a/conf/machine/h3800.conf
+++ b/conf/machine/h3800.conf
@@ -3,6 +3,6 @@
#@DESCRIPTION: Machine configuration for the Compaq iPAQ 38xx devices
#this machine will be primarily focussed on the 2.6 port
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia bluetooth irda usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia bluetooth irda usbgadget screen vfat"
require conf/machine/h3600.conf
diff --git a/conf/machine/h3900.conf b/conf/machine/h3900.conf
index f475e20c46..5db7abd3d4 100644
--- a/conf/machine/h3900.conf
+++ b/conf/machine/h3900.conf
@@ -15,7 +15,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth usbgadget screen vfat"
#
# Software/packages selection
diff --git a/conf/machine/h4000.conf b/conf/machine/h4000.conf
index 0683498c5f..03dccedccc 100644
--- a/conf/machine/h4000.conf
+++ b/conf/machine/h4000.conf
@@ -15,7 +15,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen vfat"
#
# Software/packages selection
diff --git a/conf/machine/h5000.conf b/conf/machine/h5000.conf
index 6ed836c1de..c4c1237bae 100644
--- a/conf/machine/h5000.conf
+++ b/conf/machine/h5000.conf
@@ -6,7 +6,7 @@
# Hardware-based properties
#
TARGET_ARCH = "arm"
-PACKAGE_EXTRA_ARCHS = "armv4 armv4t armv5e armv5te h5xxx"
+PACKAGE_EXTRA_ARCHS = "armv4 armv4t armv5e armv5te"
require conf/machine/include/tune-xscale.inc
@@ -15,7 +15,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia bluetooth irda wifi usbgadget usbhost screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia bluetooth irda wifi usbgadget usbhost screen vfat"
#
# Software/packages selection
@@ -26,10 +26,16 @@ EXTRA_IMAGECMD_jffs2 = "-e 0x40000 -p ; echo '${IMAGE_NAME} ${IMAGE_NAME}.rootf
MACHINE_EXTRA_RDEPENDS = "kernel ipaq-boot-params"
MACHINE_EXTRA_RRECOMMENDS = " kernel-module-h5400-lcd \
- kernel-module-h5400-battery"
+ kernel-module-h5400-battery \
+ kernel-module-snd-soc-h5000"
#
# Modules autoload and other boot properties
#
+module_autoload_snd-pcm-oss = "snd-pcm-oss"
+module_autoload_snd-mixer-oss = "snd-mixer-oss"
+module_autoload_snd-soc-h5000 = "snd-soc-h5000"
+module_autoload_g_ether = "g_ether"
+
SERIAL_CONSOLE = "115200 ttyS0 vt100"
USE_VT = "0"
diff --git a/conf/machine/h6300.conf b/conf/machine/h6300.conf
index 711ffd314c..65a82d1e0b 100644
--- a/conf/machine/h6300.conf
+++ b/conf/machine/h6300.conf
@@ -15,7 +15,7 @@ require conf/machine/include/tune-arm9tdmi.inc
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen vfat"
#
# Software/packages selection
diff --git a/conf/machine/htcalpine.conf b/conf/machine/htcalpine.conf
index 63ab097a89..f7f025413d 100644
--- a/conf/machine/htcalpine.conf
+++ b/conf/machine/htcalpine.conf
@@ -15,7 +15,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia irda bluetooth usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia irda bluetooth usbgadget screen vfat phone"
#
# Software/packages selection
diff --git a/conf/machine/htcapache.conf b/conf/machine/htcapache.conf
index 1b44742874..b3debb633c 100644
--- a/conf/machine/htcapache.conf
+++ b/conf/machine/htcapache.conf
@@ -15,7 +15,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia irda bluetooth usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia irda bluetooth usbgadget screen vfat phone"
#
# Software/packages selection
diff --git a/conf/machine/htcblueangel.conf b/conf/machine/htcblueangel.conf
index 44454f3902..f95cb70833 100644
--- a/conf/machine/htcblueangel.conf
+++ b/conf/machine/htcblueangel.conf
@@ -15,7 +15,7 @@ VOLATILE_STORAGE_SIZE = "128"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen vfat phone"
#
# Software/packages selection
diff --git a/conf/machine/htchimalaya.conf b/conf/machine/htchimalaya.conf
index 8430cb57d4..472e5d69e6 100644
--- a/conf/machine/htchimalaya.conf
+++ b/conf/machine/htchimalaya.conf
@@ -15,7 +15,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda usbgadget screen vfat phone"
#
# Software/packages selection
diff --git a/conf/machine/htcsable.conf b/conf/machine/htcsable.conf
index f9326475e6..2ae1419bae 100644
--- a/conf/machine/htcsable.conf
+++ b/conf/machine/htcsable.conf
@@ -15,7 +15,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "240"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda usbgadget screen vfat phone"
#
# Software/packages selection
diff --git a/conf/machine/htctornado.conf b/conf/machine/htctornado.conf
index af91bcbb9f..b311afe1b4 100644
--- a/conf/machine/htctornado.conf
+++ b/conf/machine/htctornado.conf
@@ -9,7 +9,7 @@ PACKAGE_EXTRA_ARCHS = "armv4t armv5te"
PREFERRED_PROVIDER_virtual/kernel = "linux-tornado-omap2"
-MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget"
+MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget vfat phone"
MACHINE_EXTRA_RDEPENDS = "alsa-state"
diff --git a/conf/machine/htcuniversal.conf b/conf/machine/htcuniversal.conf
index b7b9b5cdc0..55a6757e7c 100644
--- a/conf/machine/htcuniversal.conf
+++ b/conf/machine/htcuniversal.conf
@@ -17,7 +17,7 @@ require conf/machine/include/tune-xscale.inc
MACHINE_GUI_CLASS = "bigscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "480"
MACHINE_DISPLAY_HEIGHT_PIXELS = "640"
-MACHINE_FEATURES = "kernel26 apm alsa irda usbgadget usbhost keyboard touchscreen screen wifi bluetooth phone"
+MACHINE_FEATURES = "kernel26 apm alsa irda usbgadget usbhost keyboard touchscreen screen wifi bluetooth phone vfat"
MACHINE_FEATURES += "iwmmxt"
#
diff --git a/conf/machine/htcwallaby.conf b/conf/machine/htcwallaby.conf
index 38b0c011be..34255a1536 100644
--- a/conf/machine/htcwallaby.conf
+++ b/conf/machine/htcwallaby.conf
@@ -15,7 +15,7 @@ VOLATILE_STORAGE_SIZE = "32"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda usbgadget screen phone"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda usbgadget screen phone vfat"
#
# Software/packages selection
diff --git a/conf/machine/hx2000.conf b/conf/machine/hx2000.conf
index c0d9016407..84733217d1 100644
--- a/conf/machine/hx2000.conf
+++ b/conf/machine/hx2000.conf
@@ -19,7 +19,7 @@ IMAGE_FSTYPES ?= "jffs2 tar.bz2"
MODUTILS = "26"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia bluetooth irda wifi usbgadget usbhost screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia bluetooth irda wifi usbgadget usbhost screen vfat"
PCMCIA_MANAGER = "pcmciautils"
diff --git a/conf/machine/hx4700.conf b/conf/machine/hx4700.conf
index daa74866b2..0d3a9bbcf0 100644
--- a/conf/machine/hx4700.conf
+++ b/conf/machine/hx4700.conf
@@ -1,5 +1,5 @@
#@TYPE: Machine
-#@NAME: iPAQ hx47xx
+#@NAME: HP iPAQ hx47xx
#@DESCRIPTION: Machine configuration for the hx4700 iPAQ with a pxa27x CPU
#
@@ -19,7 +19,9 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "bigscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "480"
MACHINE_DISPLAY_HEIGHT_PIXELS = "640"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia bluetooth irda wifi usbgadget screen"
+MACHINE_DISPLAY_ORIENTATION = "0"
+MACHINE_DISPLAY_PPI = "200"
+MACHINE_FEATURES = "alsa apm bluetooth irda kernel26 pcmcia screen touchscreen usbgadget wifi vfat"
MACHINE_FEATURES += "iwmmxt"
#
@@ -35,13 +37,13 @@ PREFERRED_VERSION_orinoco-modules = "0.15rc1"
MACHINE_EXTRA_RDEPENDS = "tiinit acx-firmware"
MACHINE_EXTRA_RRECOMMENDS = "\
- kernel-module-i2c-pxa \
- kernel-module-pxa27x-voltage \
- kernel-module-pxa27x-voltage-max158xx \
- kernel-module-acx \
- kernel-module-hx4700-acx \
- kernel-module-hx4700-bt \
- kernel-module-snd-hx4700-audio"
+ kernel-module-i2c-pxa \
+ kernel-module-pxa27x-voltage \
+ kernel-module-pxa27x-voltage-max158xx \
+ kernel-module-acx \
+ kernel-module-hx4700-acx \
+ kernel-module-hx4700-bt \
+ kernel-module-snd-hx4700-audio"
#write out a reflash.ctl with the appriate entries for the rootfs, the ones for the kernel should already be there
EXTRA_IMAGECMD_jffs2 = "; sumtool -i ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \
diff --git a/conf/machine/include/collie-2.6.inc b/conf/machine/include/collie-2.6.inc
deleted file mode 100644
index f22ffce6c2..0000000000
--- a/conf/machine/include/collie-2.6.inc
+++ /dev/null
@@ -1,6 +0,0 @@
-PREFERRED_PROVIDER_virtual/kernel = "linux-rp"
-
-SERIAL_CONSOLE = "115200 ttySA0"
-MACHINE_FEATURES = "kernel26 apm pcmcia screen irda usbgadget keyboard touchscreen wifi"
-
-MACHINE_EXTRA_RDEPENDS = "kernel-modules"
diff --git a/conf/machine/include/ixp4xx.inc b/conf/machine/include/ixp4xx.inc
index 6e7d303586..924fb54f1e 100644
--- a/conf/machine/include/ixp4xx.inc
+++ b/conf/machine/include/ixp4xx.inc
@@ -3,11 +3,11 @@
#@DESCRIPTION: genric machine configuration for ixp4xx platforms
# Set default for common ixp4xx-based machines
-MACHINE_FEATURES ?= "kernel26 usbhost ext2 redboot apex"
+MACHINE_FEATURES ?= "kernel26 usbhost ext2 vfat redboot apex"
# Select an appropriate default kernel
PREFERRED_PROVIDER_virtual/kernel ?= "linux-ixp4xx"
-PREFERRED_VERSION_linux-ixp4xx ?= "2.6.21.6+svnr${SRCREV}"
+PREFERRED_VERSION_linux-ixp4xx ?= "2.6.23.14+svnr${SRCREV}"
# Add packages required for basic networking support
MACHINE_ESSENTIAL_EXTRA_RDEPENDS ?= "ixp4xx-npe"
diff --git a/conf/machine/include/motorola-ezx-base.inc b/conf/machine/include/motorola-ezx-base.inc
index 87571c0db0..da88b1494f 100644
--- a/conf/machine/include/motorola-ezx-base.inc
+++ b/conf/machine/include/motorola-ezx-base.inc
@@ -11,8 +11,8 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-ezx"
#mtd2: 00580000 00020000 "VFM_Filesystem"
#mtd3: 00020000 00020000 "Logo"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa bluetooth usbgadget usbhost keyboard screen"
-MACHINE_FEATURES += "iwmmxt"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa bluetooth usbgadget usbhost keyboard screen phone"
+MACHINE_FEATURES += " iwmmxt"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
diff --git a/conf/machine/include/palm.inc b/conf/machine/include/palm.inc
index 5eb7806f6f..22c6ad4233 100644
--- a/conf/machine/include/palm.inc
+++ b/conf/machine/include/palm.inc
@@ -10,7 +10,7 @@ SERIAL_CONSOLE = "115200 ttyS0"
# Use tune-xscale per default. Machine independent feeds should be built with tune-strongarm.
require conf/machine/include/tune-xscale.inc
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa bluetooth irda usbgadget screen ext2"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa bluetooth irda usbgadget screen ext2 vfat"
#
# Software/packages selection
diff --git a/conf/machine/include/poodle-2.6.inc b/conf/machine/include/poodle-2.6.inc
deleted file mode 100644
index fa24a3281b..0000000000
--- a/conf/machine/include/poodle-2.6.inc
+++ /dev/null
@@ -1 +0,0 @@
-require conf/machine/include/zaurus-2.6.inc
diff --git a/conf/machine/include/qemu.inc b/conf/machine/include/qemu.inc
index d84f1efb26..26d1e3f8ca 100644
--- a/conf/machine/include/qemu.inc
+++ b/conf/machine/include/qemu.inc
@@ -1,7 +1,6 @@
PCMCIA_MANAGER = "pcmciautils"
PREFERRED_PROVIDER_xserver = "xserver-kdrive"
GUI_MACHINE_CLASS = "bigscreen"
-GPE_EXTRA_INSTALL += "gaim sylpheed"
MACHINE_FEATURES = "kernel26 apm alsa pcmcia bluetooth irda usbgadget screen"
diff --git a/conf/machine/include/tune-strongarm.inc b/conf/machine/include/tune-strongarm.inc
index 8654c996ef..448b28c91f 100644
--- a/conf/machine/include/tune-strongarm.inc
+++ b/conf/machine/include/tune-strongarm.inc
@@ -1,2 +1,6 @@
-TARGET_CC_ARCH = "-march=armv4 -mtune=xscale"
+# This machine lists common configuration options for Strongarm devices
+# gcc does not differentiate between the different Strongarm versions, so neither do we
+# http://lists.linuxtogo.org/pipermail/openembedded-devel/2008-January/004031.html
+
+TARGET_CC_ARCH = "-march=armv4 -mtune=strongarm"
diff --git a/conf/machine/include/zaurus-2.6.inc b/conf/machine/include/zaurus-2.6.inc
index 7e41da0783..f6d1ec0d8e 100644
--- a/conf/machine/include/zaurus-2.6.inc
+++ b/conf/machine/include/zaurus-2.6.inc
@@ -1,8 +1,9 @@
-# Zaurus Clamshell specific configuration for kernel 2.6
-# Don't forget to include zaurus-clamshell.inc as well
+# Zaurus specific configuration for kernel 2.6
+# Additionally, clamshell specific stuff in zaurus-clamshell.inc
TARGET_ARCH = "arm"
PACKAGE_EXTRA_ARCHS = "armv4 armv4t armv5e armv5te"
+PACKAGE_EXTRA_ARCHS_collie = ""
MACHINE_KERNEL_VERSION = "2.6"
@@ -10,23 +11,18 @@ ERASEBLOCKSIZE = "0x4000"
ERASEBLOCKSIZE_akita = "0x20000"
EXTRA_IMAGECMD_jffs2 = "--little-endian --eraseblock=${ERASEBLOCKSIZE} --pad --faketime -n"
-
IMAGE_CMD_jffs2 = "mkfs.jffs2 -x lzo --root=${IMAGE_ROOTFS} --output=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 ${EXTRA_IMAGECMD}"
-
EXTRA_IMAGEDEPENDS += "zaurus-updater"
-# Use tune-xscale per default. Machine independent feeds should be built with tune-strongarm.
-include conf/machine/include/tune-xscale.inc
-
SERIAL_CONSOLE = "115200 ttyS0"
+SERIAL_CONSOLE_collie = "115200 ttySA0"
PREFERRED_PROVIDER_virtual/kernel = "linux-rp"
PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
-
PCMCIA_MANAGER ?= "pcmciautils"
-MACHINE_FEATURES = "kernel26 apm alsa pcmcia irda usbgadget keyboard touchscreen screen"
+MACHINE_FEATURES = "kernel26 apm alsa pcmcia irda usbgadget keyboard touchscreen screen vfat"
MACHINE_FEATURES_append_tosa = " usbhost wifi "
MACHINE_FEATURES_append_akita = " usbhost "
MACHINE_FEATURES_append_spitz = " usbhost ext2 "
@@ -36,11 +32,16 @@ MACHINE_EXTRA_RRECOMMENDS_c7x0 = "kernel-module-snd-soc-corgi kernel-module-px
MACHINE_EXTRA_RRECOMMENDS_akita = "kernel-module-snd-soc-spitz kernel-module-pxa2xx-cs kernel-module-pcmcia"
MACHINE_EXTRA_RRECOMMENDS_spitz = "kernel-module-snd-soc-spitz"
MACHINE_EXTRA_RRECOMMENDS_poodle = "kernel-module-snd-soc-poodle"
+MACHINE_EXTRA_RRECOMMENDS_collie = "kernel-module-locomo-spi kernel-module-sa1100-cs kernel-module-mmc-block \
+ kernel-module-collie-ts kernel-module-leds-locomo kernel-module-locomokbd"
GUI_MACHINE_CLASS = "bigscreen"
GUI_MACHINE_CLASS_collie = "smallscreen"
GUI_MACHINE_CLASS_poodle = "smallscreen"
+KERNEL_IMAGE_MAXSIZE = "1294336"
+KERNEL_IMAGE_MAXSIZE_collie = "1048576"
+
MACHINE_POSTPROCESS_COMMAND = "zaurus_make_installkit"
zaurus_make_installkit () {
@@ -49,7 +50,7 @@ zaurus_make_installkit () {
mkdir ${IMAGE_NAME}-installkit/
# Get the latest kernel using the zImage-<machine>.bin symlink
- cp zImage-${MACHINE}.bin ${IMAGE_NAME}-installkit/zImage.bin
+ cp zImage-${MACHINE}.bin ${IMAGE_NAME}-installkit/zImage
if [ "${MACHINE}" = "spitz" ]; then
cp gnu-tar ${IMAGE_NAME}-installkit/
diff --git a/conf/machine/include/zaurus-clamshell.inc b/conf/machine/include/zaurus-clamshell.inc
index f66502eff1..4fa9f75eb3 100644
--- a/conf/machine/include/zaurus-clamshell.inc
+++ b/conf/machine/include/zaurus-clamshell.inc
@@ -1,3 +1,5 @@
+include conf/machine/include/tune-xscale.inc
+
EXTRA_IMAGEDEPENDS += "sharp-flash-header-c700"
IMAGE_CMD_jffs2 = "mkfs.jffs2 --root=${IMAGE_ROOTFS} --faketime -m favourlzo \
diff --git a/conf/machine/ixp4xx.conf b/conf/machine/ixp4xx.conf
deleted file mode 100644
index 0a1e54c324..0000000000
--- a/conf/machine/ixp4xx.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-#@TYPE: Machine
-#@NAME: Generic IXP4XX kernel
-#@DESCRIPTION: Machine configuration for a generic ixp4xx board
-
-MACHINE_CHECK := ${@bb.fatal('You must set MACHINE to ixp4xxle or ixp4xxbe.')}
diff --git a/conf/machine/jornada6xx.conf b/conf/machine/jornada6xx.conf
index a322f1a60c..3735bc0312 100644
--- a/conf/machine/jornada6xx.conf
+++ b/conf/machine/jornada6xx.conf
@@ -9,4 +9,4 @@ require conf/machine/include/tune-sh3.inc
PREFERRED_PROVIDER_virtual/kernel = "linux-jlime-jornada6xx"
PCMCIA_MANAGER = "pcmciautils"
-MACHINE_FEATURES = "kernel26 pcmcia irda keyboard touchscreen screen"
+MACHINE_FEATURES = "kernel26 pcmcia irda keyboard touchscreen screen vfat"
diff --git a/conf/machine/jornada7xx.conf b/conf/machine/jornada7xx.conf
index 461d0c8326..8741eb4ff6 100644
--- a/conf/machine/jornada7xx.conf
+++ b/conf/machine/jornada7xx.conf
@@ -8,5 +8,5 @@ require conf/machine/include/tune-strongarm.inc
PREFERRED_PROVIDER_virtual/kernel = "linux-jlime-jornada7xx"
PCMCIA_MANAGER = "pcmciautils"
-MACHINE_FEATURES = "kernel26 apm alsa pcmcia irda keyboard touchscreen screen"
+MACHINE_FEATURES = "kernel26 apm alsa pcmcia irda keyboard touchscreen screen vfat"
MACHINE_EXTRA_RDEPENDS = "kernel-modules"
diff --git a/conf/machine/looxc550.conf b/conf/machine/looxc550.conf
index f4fd23eec9..1792cda280 100644
--- a/conf/machine/looxc550.conf
+++ b/conf/machine/looxc550.conf
@@ -15,7 +15,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "bigscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "480"
MACHINE_DISPLAY_HEIGHT_PIXELS = "640"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia irda bluetooth usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa pcmcia irda bluetooth usbgadget screen vfat"
#
# Software/packages selection
diff --git a/conf/machine/magician.conf b/conf/machine/magician.conf
index e099825a40..ac565559aa 100644
--- a/conf/machine/magician.conf
+++ b/conf/machine/magician.conf
@@ -21,15 +21,9 @@ MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
MACHINE_DISPLAY_ORIENTATION = "0"
MACHINE_DISPLAY_PPI = "142"
-MACHINE_FEATURES = "alsa apm bluetooth irda kernel26 phone screen touchscreen usbgadget usbhost"
+MACHINE_FEATURES = "alsa apm bluetooth irda kernel26 phone screen touchscreen usbgadget usbhost vfat"
MACHINE_FEATURES += "iwmmxt"
-
-#
-# We don't support jffs2 installations (yet).
-#
-IMAGE_FSTYPES = "tar.bz2"
-
#
# Software/packages selection
#
@@ -44,32 +38,31 @@ MACHINE_EXTRA_RRECOMMENDS = " \
kernel-module-i2c-pxa \
kernel-module-pxa27x-voltage \
kernel-module-pxa27x-voltage-max158xx \
- kernel-module-leds-magician \
kernel-module-magician-ts \
- kernel-module-magician-flash \
- kernel-module-magician-ds1wm \
- kernel-module-magician-battery \
kernel-module-magician-phone \
kernel-module-magician-pm \
kernel-module-n-tihtc \
kernel-module-snd-soc-magician"
+#write out a reflash.ctl with the appriate entries for the rootfs, the ones for the kernel should already be there
+EXTRA_IMAGECMD_jffs2 = "; sumtool -i ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \
+ -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs-summary.jffs2 \
+ -e 256KiB -p ; echo '${IMAGE_NAME} ${IMAGE_NAME}.rootfs.jffs2 - root' >> ${DEPLOY_DIR_IMAGE}/reflash.ctl"
+
#
# Modules autoload and other boot properties
#
-module_autoload_magician_ts = "magician_ts"
-module_autoload_leds-magician = "leds-magician"
module_autoload_snd-pcm-oss = "snd-pcm-oss"
module_autoload_snd-mixer-oss = "snd-mixer-oss"
+module_autoload_hci_usb = "hci_usb"
module_autoload_pxa27x_udc = "pxa27x_udc"
-module_autoload_magician_ds1wm = "magician_ds1wm"
-module_autoload_magician-battery = "magician-battery"
+module_autoload_magician_ts = "magician_ts"
+module_autoload_leds-magician = "leds-magician"
module_autoload_magician_phone = "magician_phone"
module_autoload_magician_pm = "magician_pm"
module_autoload_n_tihtc = "n_tihtc"
module_autoload_snd-soc-magician = "snd-soc-magician"
-module_autoload_hci_usb = "hci_usb"
#FIXME: this should be controlled by a userspace utility later.
module_autoload_g_ether = "g_ether"
diff --git a/conf/machine/mainstone.conf b/conf/machine/mainstone.conf
index a6681a9030..af3e5a5cc3 100644
--- a/conf/machine/mainstone.conf
+++ b/conf/machine/mainstone.conf
@@ -15,6 +15,7 @@ require conf/machine/include/tune-xscale.inc
SERIAL_CONSOLE = "115200 ttyS0"
# used by opie-collections.inc
-ROOT_FLASH_SIZE = "32"
+ROOT_FLASH_SIZE = "16"
MACHINE_FEATURES = "kernel26 pcmcia usbhost usbgadget pcmcia touchscreen keyboard alsa irda"
+EXTRA_IMAGECMD_jffs2 = "--pad --little-endian -e 0x40000 --pad=0x01000000"
diff --git a/conf/machine/mpc8313e-rdb.conf b/conf/machine/mpc8313e-rdb.conf
index 81c3e29e91..3bc18e3f9e 100644
--- a/conf/machine/mpc8313e-rdb.conf
+++ b/conf/machine/mpc8313e-rdb.conf
@@ -10,7 +10,7 @@ PREFERRED_VERSION_u-boot = "git"
MACHINE_FEATURES = "kernel26 usbhost ext2"
-PREFERRED_VERSION_u-boot = "1.3.0"
+PREFERRED_VERSION_u-boot = "1.3.1"
UBOOT_MACHINE = "MPC8313ERDB_33_config"
#rootfs on NAND flash
diff --git a/conf/machine/mx31moboard.conf b/conf/machine/mx31moboard.conf
new file mode 100644
index 0000000000..c918404d6c
--- /dev/null
+++ b/conf/machine/mx31moboard.conf
@@ -0,0 +1,33 @@
+#@TYPE: Machine
+#@Name: EPFL mx31MoBoard
+#@DESCRIPTION: Machine configuration for EPFL MX31MoBoard
+#@Website: http://mobots.epfl.ch/mx31MoBoard.html
+
+TARGET_ARCH = "arm"
+TARGET_FPU_arm = "hard"
+
+MACHINE_FEATURES = "kernel26 alsa ext2 usbhost usbgadget"
+
+GUI_MACHINE_CLASS = "smallscreen"
+PACKAGE_EXTRA_ARCHS = "arm armv4t armv5te armv6"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux"
+
+require conf/machine/include/tune-arm1136jf-s.inc
+
+#
+# usb networking
+#
+module_conf_g_ether = "alias usb0 g_ether"
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "-L 115200 ttymxc0 vt100"
+
+# used by opie-collections.inc
+ROOT_FLASH_SIZE = "32"
+
+# to avoid annoying jffs2 messages
+EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000"
+
+IMAGE_FSTYPES += "tar.gz"
+
diff --git a/conf/machine/netbook-pro.conf b/conf/machine/netbook-pro.conf
index 1c9fc7af9d..330a1287e4 100755
--- a/conf/machine/netbook-pro.conf
+++ b/conf/machine/netbook-pro.conf
@@ -15,7 +15,7 @@ USE_VT = "0"
#use the epson xserver
XSERVER = "xserver-kdrive-epson"
-MACHINE_FEATURES = "kernel26 touchscreen keyboard apm alsa pcmcia bluetooth irda usbhost screen"
+MACHINE_FEATURES = "kernel26 touchscreen keyboard apm alsa pcmcia bluetooth irda usbhost screen vfat"
# used by sysvinit_2
SERIAL_CONSOLE = "115200 ttySA0 vt100"
diff --git a/conf/machine/nokia770.conf b/conf/machine/nokia770.conf
index 0e308b0a67..4e36c6d38a 100644
--- a/conf/machine/nokia770.conf
+++ b/conf/machine/nokia770.conf
@@ -12,6 +12,8 @@ XSERVER = "xserver-kdrive-xomap"
# 800x480 is big enough for me
GUI_MACHINE_CLASS = "bigscreen"
+MACHINE_DISPLAY_WIDTH_PIXELS = "800"
+MACHINE_DISPLAY_HEIGHT_PIXELS = "480"
# Use tune-arm926 per default. Machine independent feeds should be built with tune-strongarm.
require conf/machine/include/tune-arm926ejs.inc
@@ -30,7 +32,7 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-nokia800"
#use this if you are using the nokia initfs
ROOTFS_POSTPROCESS_COMMAND += " remove_init_link; "
-MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget usbhost screen"
+MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget usbhost screen vfat"
MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "nokia770-init"
# build tools
diff --git a/conf/machine/nokia800.conf b/conf/machine/nokia800.conf
index 703fc1984d..144df2ed08 100644
--- a/conf/machine/nokia800.conf
+++ b/conf/machine/nokia800.conf
@@ -8,6 +8,8 @@ PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive-xomap"
XSERVER = "xserver-kdrive-xomap"
GUI_MACHINE_CLASS = "bigscreen"
+MACHINE_DISPLAY_WIDTH_PIXELS = "800"
+MACHINE_DISPLAY_HEIGHT_PIXELS = "480"
TARGET_FPU = "hard"
include conf/machine/include/tune-arm1136jf-s.inc
@@ -24,7 +26,7 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-nokia800"
#use this if you are using the nokia initfs
ROOTFS_POSTPROCESS_COMMAND += " remove_init_link; "
-MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget usbhost"
+MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget usbhost vfat"
MACHINE_ESSENTIAL_EXTRA_RDEPENDS = "nokia770-init"
# build tools
diff --git a/conf/machine/nslu2.conf b/conf/machine/nslu2.conf
deleted file mode 100644
index 7e45825f69..0000000000
--- a/conf/machine/nslu2.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-#@TYPE: Machine
-#@NAME: Linksys NSLU2
-#@DESCRIPTION: Machine configuration for the Linksys NSLU2 product
-
-MACHINE_CHECK := ${@bb.fatal('You must set MACHINE to nslu2le or nslu2be.')}
diff --git a/conf/machine/nslu2be.conf b/conf/machine/nslu2be.conf
index 3162eb3342..360e397e04 100644
--- a/conf/machine/nslu2be.conf
+++ b/conf/machine/nslu2be.conf
@@ -6,8 +6,6 @@ TARGET_ARCH = "armeb"
PACKAGE_EXTRA_ARCHS = "armv4b armv4tb armv5eb armv5teb ixp4xxbe"
-MACHINE_ARCH = "ixp4xxbe"
-
OVERRIDES = "local:${MACHINE}:nslu2:ixp4xx:${DISTRO}:${TARGET_OS}:${TARGET_ARCH}:build-${BUILD_OS}:fail-fast:pn-${PN}"
ROOT_FLASH_SIZE ?= "6"
diff --git a/conf/machine/nslu2le.conf b/conf/machine/nslu2le.conf
index 1aced19de2..1ad9bdd96a 100644
--- a/conf/machine/nslu2le.conf
+++ b/conf/machine/nslu2le.conf
@@ -6,8 +6,6 @@ TARGET_ARCH = "arm"
PACKAGE_EXTRA_ARCHS = "armv4 armv4t armv5e armv5te ixp4xxle"
-MACHINE_ARCH = "ixp4xxle"
-
OVERRIDES = "local:${MACHINE}:nslu2:ixp4xx:${DISTRO}:${TARGET_OS}:${TARGET_ARCH}:build-${BUILD_OS}:fail-fast:pn-${PN}"
ROOT_FLASH_SIZE ?= "6"
diff --git a/conf/machine/qemux86.conf b/conf/machine/qemux86.conf
index fe811ba54e..7fbdbfb1a7 100644
--- a/conf/machine/qemux86.conf
+++ b/conf/machine/qemux86.conf
@@ -3,6 +3,7 @@
#@DESCRIPTION: Machine configuration for running an x86 system under qemu emulation
TARGET_ARCH = "i586"
+TARGET_CC_ARCH = "-march=i586"
PACKAGE_EXTRA_ARCHS = "x86"
require conf/machine/include/qemu.inc
diff --git a/conf/machine/rx1950.conf b/conf/machine/rx1950.conf
index ba2c956d87..f8ca7ec033 100644
--- a/conf/machine/rx1950.conf
+++ b/conf/machine/rx1950.conf
@@ -16,7 +16,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen vfat
#
# Software/packages selection
diff --git a/conf/machine/rx3000.conf b/conf/machine/rx3000.conf
index 4b3acc0a85..2531f984f0 100644
--- a/conf/machine/rx3000.conf
+++ b/conf/machine/rx3000.conf
@@ -16,7 +16,7 @@ VOLATILE_STORAGE_SIZE = "64"
MACHINE_GUI_CLASS = "smallscreen"
MACHINE_DISPLAY_WIDTH_PIXELS = "240"
MACHINE_DISPLAY_HEIGHT_PIXELS = "320"
-MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen"
+MACHINE_FEATURES = "kernel26 touchscreen apm alsa irda bluetooth wifi usbgadget screen vfat"
#
# Software/packages selection
diff --git a/conf/machine/simpad.conf b/conf/machine/simpad.conf
index ab3da912ba..6334d34171 100644
--- a/conf/machine/simpad.conf
+++ b/conf/machine/simpad.conf
@@ -6,7 +6,7 @@ MACHINE_KERNEL_VERSION ?= "2.6"
TARGET_ARCH = "arm"
-MACHINE_FEATURES = " apm pcmcia irda screen touchscreen "
+MACHINE_FEATURES = "apm pcmcia irda screen touchscreen vfat"
include conf/machine/include/simpad-${MACHINE_KERNEL_VERSION}.inc
require conf/machine/include/tune-strongarm.inc
diff --git a/conf/machine/storcenter.conf b/conf/machine/storcenter.conf
index 519c565061..5b69bbdc9a 100644
--- a/conf/machine/storcenter.conf
+++ b/conf/machine/storcenter.conf
@@ -1,23 +1,27 @@
TARGET_ARCH = "powerpc"
-TARGET_OS = "linux"
TARGET_FPU = "hard"
-PACKAGE_EXTRA_ARCHS = "ppc ppc603e"
-
-INHERIT += "storcenter-image"
+PACKAGE_EXTRA_ARCHS = "ppc603e"
# terminal specs - console, but no other ports
-SERIAL_CONSOLE="115200 console"
+SERIAL_CONSOLE="115200 ttyS0"
USE_VT="0"
-MODUTILS=26
-MACHINE_FEATURES= "kernel26 usbhost pci ext2 uboot"
+# uboot switches
+UBOOT_MACHINE="Sandpoint8240_config"
+
+# plug in other tasks - not "really" used unless we are using task-boot
+MACHINE_FEATURES= "kernel26 usbhost pci ext2"
PREFERRED_PROVIDER_virtual/kernel = "linux-storcenter"
+PREFERRED_VERSION_udev = "115"
-# We want udev support in the image
-udevdir = "/dev"
+# the StorCenter Control Daemon provides cmdline fan and light control
+MACHINE_EXTRA_RDEPENDS = "sccd"
-EXTRA_IMAGECMD = "--big-endian"
-ERASEBLOCK_SIZE = "0x10000"
IMAGE_FSTYPES = "jffs2"
+KERNEL_IMAGETYPE ?= uImage
+EXTRA_IMAGECMD_jffs2 += "--pad --big-endian --eraseblock=0x10000"
+# must be in HEX
+FLASH_KERNEL_SIZE=0x170000
+FLASH_ROOT_SIZE=0x590000
require conf/machine/include/tune-ppc603e.inc
diff --git a/contrib/angstrom/build-feeds.sh b/contrib/angstrom/build-feeds.sh
new file mode 100755
index 0000000000..c5d343205f
--- /dev/null
+++ b/contrib/angstrom/build-feeds.sh
@@ -0,0 +1,77 @@
+#!/bin/bash
+
+DO_UCLIBC=1
+
+do_build() {
+ echo "MACHINE = \"$BUILD_MACHINE\"" > conf/auto.conf
+
+ BUILD_MODE="glibc"
+ if [ "$BUILD_CLEAN" != "" ]
+ then
+ bitbake -c clean $BUILD_CLEAN
+ fi
+
+ for target in $BUILD_TARGETS
+ do
+ bitbake $target && do_report_success
+ done
+
+ if [ $DO_UCLIBC = 1 ]
+ then
+ BUILD_MODE="uclibc"
+ echo 'ANGSTROM_MODE = "uclibc"' >> conf/auto.conf
+
+ if [ "$BUILD_CLEAN" != "" ]
+ then
+ bitbake -c clean $BUILD_CLEAN
+ fi
+
+ for target in $BUILD_TARGETS
+ do
+ bitbake $target && do_report_success
+ done
+ fi
+}
+
+do_report_success() {
+
+ echo "$(date -u +%s) $target $BUILD_MODE $machine" >> autobuilder-feed.log
+}
+
+for machine in ep93xx gumstix-connex gumstix-verdex efika dht-walnut omap5912osk ixp4xxle ixp4xxbe c7x0 poodle tosa akita spitz collie simpad fic-gta01 a780 at91sam9263ek qemuarm h2200 h3900 h4000 hx4700
+do
+ BUILD_MACHINE=$machine
+ BUILD_CLEAN="libtool-cross qmake-native qmake2-native"
+ BUILD_TARGETS="texinfo flex bison gperf gcc binutils make automake autoconf m4 pkgconfig distcc \
+ usbutils pciutils mtd-utils usbview hal \
+ task-proper-tools mc screen findutils \
+ mono perl python ruby \
+ gtk+ qt-x11-free qt4-x11-free \
+ gpe-mini-browser midori minimo openmoko-browser2 webkit-gtklauncher \
+ samba meta-nas-server \
+ apache2 boa cherokee lighttpd thttpd \
+ gpe-gallery gpe-scap notecase \
+ pidgin irssi \
+ roadmap-gtk2 gpsdrive navit \
+ xmms mplayer quasar vlc-gpe gnome-mplayer \
+ wpa-gui wifi-radar kismet aircrack-ng dsniff \
+ nmap iptables iperf \
+ gpe-login ipaq-sleep \
+ gpe-bluetooth bluez-gnome python-pybluez \
+ abiword gnumeric evince epdfview gimp \
+ scummvm \
+ flite \
+ ctorrent \
+ asterisk \
+ gnuradio gnuplot mpfr gmp fftw fftwf fftwl \
+ gphoto2 gqview imagemagick ufraw \
+ tzdata \
+ xserver-kdrive xserver-xorg \
+ xf86-video-fbdev xf86-video-ati xf86-video-vesa \
+ xf86-input-evdev xf86-input-keyboard xf86-input-mouse \
+ task-opie \
+ task-openmoko-base task-openmoko-debug task-openmoko-examples task-openmoko-feed task-openmoko-games task-openmoko-linux task-openmoko-native-sdk task-openmoko-net task-openmoko-phone task-openmoko-pim task-openmoko-ui \
+ "
+ do_build
+done
+
diff --git a/contrib/angstrom/build-release.sh b/contrib/angstrom/build-release.sh
index efaaecf110..2f882450c8 100755
--- a/contrib/angstrom/build-release.sh
+++ b/contrib/angstrom/build-release.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-DO_UCLIBC=0
+DO_UCLIBC=1
do_build() {
echo "MACHINE = \"$BUILD_MACHINE\"" > conf/auto.conf
@@ -20,6 +20,12 @@ do_build() {
then
BUILD_MODE="uclibc"
echo 'ANGSTROM_MODE = "uclibc"' >> conf/auto.conf
+
+ if [ "$BUILD_CLEAN" != "" ]
+ then
+ bitbake -c clean $BUILD_CLEAN
+ fi
+
for target in $BUILD_TARGETS
do
bitbake $target && do_report_success
@@ -32,43 +38,57 @@ do_report_success() {
echo "$(date -u +%s) $target $BUILD_MODE $machine" >> autobuilder.log
}
+#cross toolchain
+#for machine in ep93xx a780 efika collie ixp4xxbe
+#do
+# BUILD_MACHINE=$machine
+# BUILD_TARGETS="meta-toolchain"
+# BUILD_CLEAN="meta-toolchain"
+# do_build
+#done
+
+
# No graphics
-for machine in ep93xx gumstix-connex gumstix-verdex efika omap5912osk
+for machine in ep93xx gumstix-connex gumstix-verdex efika dht-walnut omap5912osk
do
BUILD_MACHINE=$machine
- BUILD_TARGETS="minimal-image console-image"
+ BUILD_CLEAN="libtool-cross base-files"
+ BUILD_TARGETS="base-image console-image"
do_build
done
for machine in ixp4xxle ixp4xxbe
do
+ BUILD_CLEAN="base-files"
BUILD_MACHINE=$machine
- BUILD_TARGETS="nslu2-minimal-image"
+ BUILD_TARGETS="base-image nslu2-base-image nas-server-image"
do_build
done
# build altboot images for zaurus
for machine in c7x0 poodle tosa akita spitz collie
do
+ BUILD_CLEAN="base-files"
BUILD_MACHINE=$machine
BUILD_TARGETS="altboot-console-image"
do_build
done
# graphics, flash storage
-for machine in fic-gta01 a780 at91sam9263ek qemuarm h2200 h4000 poodle tosa hx4700 c7x0 spitz akita collie
+for machine in fic-gta01 a780 at91sam9263ek qemuarm h2200 h3900 h4000 h5000 poodle tosa hx4700 c7x0 spitz akita collie simpad
do
+ BUILD_CLEAN="base-files"
BUILD_MACHINE=$machine
- BUILD_TARGETS="minimal-image console-image x11-image"
+ BUILD_TARGETS="base-image console-image minimal-gpe-image x11-image"
do_build
done
# graphics, disk storage
for machine in spitz
do
+ BUILD_CLEAN="base-files"
BUILD_MACHINE=$machine
BUILD_TARGETS="x11-gpe-image x11-pimlico-image x11-office-image"
- BUILD_CLEAN="qmake2-native"
do_build
done
@@ -76,16 +96,15 @@ done
for machine in fic-gta01 a780
do
BUILD_MACHINE=$machine
- BUILD_TARGETS="openmoko-image"
- BUILD_CLEAN="qmake2-native"
+ BUILD_TARGETS="minimal-openmoko-image openmoko-image"
do_build
done
-#native toolchain
-for machine in ep93xx a780 efika collie ixp4xxbe
-do
- BUILD_MACHINE=$machine
- BUILD_TARGETS="gcc binutils pkgconfig make automake autoconf libtool m4 perl python gdb strace screen"
- do_build
-done
+# populate feeds
+#for machine in ep93xx a780 efika collie ixp4xxbe
+#do
+# BUILD_MACHINE=$machine
+# BUILD_TARGETS="meta-angstrom-2007"
+# do_build
+#done
diff --git a/contrib/distro-packages/debian/openembedded-essential-1.2/.mtn2git_empty b/contrib/deploy/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/contrib/distro-packages/debian/openembedded-essential-1.2/.mtn2git_empty
+++ b/contrib/deploy/.mtn2git_empty
diff --git a/contrib/deploy/README b/contrib/deploy/README
new file mode 100644
index 0000000000..a285a7f75a
--- /dev/null
+++ b/contrib/deploy/README
@@ -0,0 +1,2 @@
+This directory contains script for deploying OE-generated images for various
+devices and boot methods.
diff --git a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/.mtn2git_empty b/contrib/deploy/nfs/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/.mtn2git_empty
+++ b/contrib/deploy/nfs/.mtn2git_empty
diff --git a/contrib/deploy/nfs/exports.sample b/contrib/deploy/nfs/exports.sample
new file mode 100644
index 0000000000..6d82f49202
--- /dev/null
+++ b/contrib/deploy/nfs/exports.sample
@@ -0,0 +1,2 @@
+# /etc/exports: NFS file systems being exported. See exports(5).
+/srv/nfs/oe 192.168.0.0/16(rw,insecure,no_root_squash)
diff --git a/contrib/deploy/nfs/oe-nfs-deploy-image b/contrib/deploy/nfs/oe-nfs-deploy-image
new file mode 100755
index 0000000000..ee540696d7
--- /dev/null
+++ b/contrib/deploy/nfs/oe-nfs-deploy-image
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+# Wonder what the heck is /srv ? Read Filesystem Hierarchy Standard,
+# http://www.pathname.com/fhs/pub/fhs-2.3.html#SRVDATAFORSERVICESPROVIDEDBYSYSTEM
+# So, /srv/nfs is root of all NFS exports your system offers, and /srv/nfs/oe is
+# OpenEmbedded's subset (think security).
+NFS_ROOT=/srv/nfs/oe
+
+if [ -z "$1" ]; then
+ echo "$0 - Deploy OpenEmbedded-generated image for device NFS boot"
+ echo "Usage: $0 <image> | -l"
+ exit
+fi
+
+if [ "$1" == "-l" ]; then
+ if [ -n "$2" ]; then
+ extra="-name *$2*"
+ fi
+ find tmp/deploy/ -regextype posix-extended -wholename '*/images/*' -regex '.+\.(tar\.bz2|tar\.gz|cpio\.gz)$' $extra | xargs ls -l
+ exit
+fi
+
+if [ ! -f $1 ]; then
+ echo "Cannot find image $1"
+ exit
+fi
+
+ext=`echo $1 | sed -r -e 's/.+\.([^.]+\.[^.]+)/\1/'`
+basename=`basename $1 .$ext`
+
+if [ -z "$basename" ]; then
+ echo "Assertion failed"
+ exit 100
+fi
+
+echo "Deploying to: $NFS_ROOT/$basename"
+
+rm -rf $NFS_ROOT/$basename
+
+mkdir -p $NFS_ROOT/$basename
+
+if [ "$ext" == "tar.bz2" ]; then
+ tar -xj -f $1 -C $NFS_ROOT/$basename
+elif [ "$ext" == "tar.gz" ]; then
+ tar -xz -f $1 -C $NFS_ROOT/$basename
+else
+ FPATH=`pwd`
+ cd $NFS_ROOT/$basename
+ bash -c "gzip -d -c $FPATH/$1 | cpio -i --no-absolute-filenames"
+ cd $FPATH
+fi
diff --git a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/changelog b/contrib/distro-packages/debian/openembedded-essential-1.2/debian/changelog
deleted file mode 100644
index c0eb3d660c..0000000000
--- a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/changelog
+++ /dev/null
@@ -1,19 +0,0 @@
-openembedded-essential (1.2) unstable; urgency=low
-
- * fixed packaging to make lintian happy
- * switched to native numbering
-
- -- Marcin Juszkiewicz <hrw@openembedded.org> Wed, 8 Nov 2006 11:17:42 +0100
-
-openembedded-essential (1.1) unstable; urgency=low
-
- * added gawk
-
- -- Marcin Juszkiewicz <hrw@openembedded.org> Wed, 8 Nov 2006 11:17:42 +0100
-
-openembedded-essential (1.0-1) unstable; urgency=low
-
- * Initial release
-
- -- Marcin Juszkiewicz <hrw@openembedded.org> Tue, 17 Oct 2006 12:05:35 +0200
-
diff --git a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/control b/contrib/distro-packages/debian/openembedded-essential-1.2/debian/control
deleted file mode 100644
index c7a7e5b9f7..0000000000
--- a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/control
+++ /dev/null
@@ -1,17 +0,0 @@
-Source: openembedded-essential
-Section: devel
-Priority: optional
-Maintainer: Marcin Juszkiewicz <hrw@openembedded.org>
-Build-Depends: debhelper (>= 5)
-Standards-Version: 3.7.2
-
-Package: openembedded-essential
-Architecture: all
-Depends: python (>= 2.3), ccache, build-essential, quilt, bison, wget, cvs, subversion, git-core, monotone, coreutils, unzip, texi2html, texinfo, libsdl1.2-dev, docbook-utils, gawk
-Description: Metapackage to install all needed packages to start using OpenEmbedded
- OpenEmbedded is a full-featured development environment allowing users to
- target a wide variety of devices. Supporting multiple build, release paths and
- configurations, OpenEmbedded extends the capabilities of your build and
- release engineers. OpenEmbedded uses compilation and configuration caching at
- most levels to increase developer productivity.
- This metapackage depends on all software required by OpenEmbedded.
diff --git a/packages/atk/atk-1.2.0/.mtn2git_empty b/contrib/distro-packages/debian/openembedded-essential-1.4/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/atk/atk-1.2.0/.mtn2git_empty
+++ b/contrib/distro-packages/debian/openembedded-essential-1.4/.mtn2git_empty
diff --git a/packages/atk/atk-1.6.0/.mtn2git_empty b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/atk/atk-1.6.0/.mtn2git_empty
+++ b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/.mtn2git_empty
diff --git a/contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog
new file mode 100644
index 0000000000..8485f3e720
--- /dev/null
+++ b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog
@@ -0,0 +1,34 @@
+openembedded-essential (1.4) unstable; urgency=low
+
+ * remove gfortran from dependency after a5c7b007eaa675cc904f5285291d2f8a597efc84 caused controversy.
+ Ultimately it was decided that OE should not depend on gfortran and that another solution ought
+ to be found. The gfortran check in sanity.bbclass was dropped in 63c7ad87655c2781ad8b9c81af430596f48a24a6
+ * add bc and python-pysqlite2 for rpm
+
+ -- Rolf Leggewie <oe-devel@rolf.leggewie.biz> Mon, 19 Jan 2008 14:25:00 +0100
+
+openembedded-essential (1.3) unstable; urgency=low
+
+ * add gfortran as dependency to complement a5c7b007eaa675cc904f5285291d2f8a597efc84
+
+ -- Rolf Leggewie <oe-devel@rolf.leggewie.biz> Mon, 7 Jan 2008 20:25:00 +0100
+
+openembedded-essential (1.2) unstable; urgency=low
+
+ * fixed packaging to make lintian happy
+ * switched to native numbering
+
+ -- Marcin Juszkiewicz <hrw@openembedded.org> Wed, 8 Nov 2006 11:17:42 +0100
+
+openembedded-essential (1.1) unstable; urgency=low
+
+ * added gawk
+
+ -- Marcin Juszkiewicz <hrw@openembedded.org> Wed, 8 Nov 2006 11:17:42 +0100
+
+openembedded-essential (1.0-1) unstable; urgency=low
+
+ * Initial release
+
+ -- Marcin Juszkiewicz <hrw@openembedded.org> Tue, 17 Oct 2006 12:05:35 +0200
+
diff --git a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/compat b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/compat
index 7ed6ff82de..7ed6ff82de 100644
--- a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/compat
+++ b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/compat
diff --git a/contrib/distro-packages/debian/openembedded-essential-1.4/debian/control b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/control
new file mode 100644
index 0000000000..583a13e292
--- /dev/null
+++ b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/control
@@ -0,0 +1,17 @@
+Source: openembedded-essential
+Section: devel
+Priority: optional
+Maintainer: Marcin Juszkiewicz <hrw@openembedded.org>
+Build-Depends: debhelper (>= 5)
+Standards-Version: 3.7.2
+
+Package: openembedded-essential
+Architecture: all
+Depends: python (>= 2.3), ccache, build-essential, quilt, bison, wget, cvs, subversion, git-core, monotone, coreutils, unzip, texi2html, texinfo, libsdl1.2-dev, docbook-utils, gawk, bc, python-pysqlite2
+Description: Metapackage to install all needed packages to start using OpenEmbedded
+ OpenEmbedded is a full-featured development environment allowing users to
+ target a wide variety of devices. Supporting multiple build, release paths and
+ configurations, OpenEmbedded extends the capabilities of your build and
+ release engineers. OpenEmbedded uses compilation and configuration caching at
+ most levels to increase developer productivity.
+ This metapackage depends on all software required by OpenEmbedded.
diff --git a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/copyright b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/copyright
index 9e4905f97e..9e4905f97e 100644
--- a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/copyright
+++ b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/copyright
diff --git a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/rules b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/rules
index 586b2ff42f..586b2ff42f 100755
--- a/contrib/distro-packages/debian/openembedded-essential-1.2/debian/rules
+++ b/contrib/distro-packages/debian/openembedded-essential-1.4/debian/rules
diff --git a/contrib/distro-packages/debian/openembedded-essential-1.4/ubuntu.patch b/contrib/distro-packages/debian/openembedded-essential-1.4/ubuntu.patch
new file mode 100644
index 0000000000..80863d59fe
--- /dev/null
+++ b/contrib/distro-packages/debian/openembedded-essential-1.4/ubuntu.patch
@@ -0,0 +1,22 @@
+#
+# old_revision [63896b37ec0e055133c2e295f7c89e4677091511]
+#
+# patch "contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog"
+# from [b1e7c5d0ed3dddbab736f23b57df2386b6937e4d]
+# to [bb02f8caa6f5eaa903b4d65150392583072c7bea]
+#
+============================================================
+--- contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog
+b1e7c5d0ed3dddbab736f23b57df2386b6937e4d
++++ contrib/distro-packages/debian/openembedded-essential-1.4/debian/changelog
+bb02f8caa6f5eaa903b4d65150392583072c7bea
+@@ -1,3 +1,9 @@
++openembedded-essential (1.4ubuntu1) gutsy; urgency=low
++
++ * prepare ubuntu package
++
++ -- Rolf Leggewie <oe-devel@rolf.leggewie.biz> Thu, 24 Jan 2008 13:49:26 +0100
++
+ openembedded-essential (1.4) unstable; urgency=low
+
+ * remove gfortran from dependency after a5c7b007eaa675cc904f5285291d2f8a597efc84 caused controversy.
diff --git a/contrib/distro-packages/rpm/openembedded-essential-1.1.spec b/contrib/distro-packages/rpm/openembedded-essential-1.1.spec
deleted file mode 100644
index 2ffa7c413e..0000000000
--- a/contrib/distro-packages/rpm/openembedded-essential-1.1.spec
+++ /dev/null
@@ -1,35 +0,0 @@
-Summary: Metapackage to install all needed packages to start using OpenEmbedded
-Name: openembedded-essential
-Version: 1.1
-Release: 1
-License: MIT
-Group: Devel
-BuildArch: noarch
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
-Requires: python, ccache, quilt, sed, bison, wget, cvs, subversion, git-core, monotone, coreutils, unzip, texi2html, texinfo, docbook-utils, gawk
-
-%description
-OpenEmbedded is a full-featured development environment allowing users to
-target a wide variety of devices. Supporting multiple build, release paths and
-configurations, OpenEmbedded extends the capabilities of your build and
-release engineers. OpenEmbedded uses compilation and configuration caching at
-most levels to increase developer productivity.
-This metapackage depends on all software required by OpenEmbedded.
-
-
-
-%changelog
-* Tue Nov 19 2006 Marcin Juszkiewicz <hrw@openembedded.org>
-
-openembedded-essential (1.1-1) unstable; urgency=low
-
- * Added gawk
-
-* Tue Oct 17 2006 Marcin Juszkiewicz <hrw@openembedded.org>
-
-openembedded-essential (1.0-1) unstable; urgency=low
-
- * Initial release
-
-%files
-/rpm/openembedded-essential-1.1.spec
diff --git a/contrib/distro-packages/rpm/openembedded-essential-1.4.spec b/contrib/distro-packages/rpm/openembedded-essential-1.4.spec
new file mode 100644
index 0000000000..f7f47b05d9
--- /dev/null
+++ b/contrib/distro-packages/rpm/openembedded-essential-1.4.spec
@@ -0,0 +1,41 @@
+Summary: Metapackage to install all needed packages to start using OpenEmbedded
+Name: openembedded-essential
+Version: 1.4
+Release: 1
+License: MIT
+Group: Devel
+BuildArch: noarch
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
+Requires: python, ccache, quilt, sed, bison, wget, cvs, subversion, git-core, monotone, coreutils, unzip, texi2html, texinfo, docbook-utils, gawk, bc, python-pysqlite2
+
+%description
+OpenEmbedded is a full-featured development environment allowing users to
+target a wide variety of devices. Supporting multiple build, release paths and
+configurations, OpenEmbedded extends the capabilities of your build and
+release engineers. OpenEmbedded uses compilation and configuration caching at
+most levels to increase developer productivity.
+This metapackage depends on all software required by OpenEmbedded.
+
+
+
+%changelog
+* Sun Jan 19 16 2007 Rolf 'Laibsch' Leggewie
+
+openembedded-essential (1.4) unstable; urgency=low
+
+ * added bc and python-pysqlite2
+
+* Tue Nov 19 2006 Marcin Juszkiewicz <hrw@openembedded.org>
+
+openembedded-essential (1.1-1) unstable; urgency=low
+
+ * Added gawk
+
+* Tue Oct 17 2006 Marcin Juszkiewicz <hrw@openembedded.org>
+
+openembedded-essential (1.0-1) unstable; urgency=low
+
+ * Initial release
+
+%files
+/rpm/openembedded-essential-1.1.spec
diff --git a/contrib/feed-browser/includes/config.inc b/contrib/feed-browser/includes/config.inc
index c4a9fc0fc3..c2414b8013 100644
--- a/contrib/feed-browser/includes/config.inc
+++ b/contrib/feed-browser/includes/config.inc
@@ -1,301 +1,746 @@
<?php
-define('DB_FILENAME', './feeds.db');
+define('DB_FILENAME', '/home/angstrom/website/repo/feeds.db');
+$feed_base_url = "http://www.angstrom-distribution.org/unstable/feed/";
$feeds = array(
- array(
- 'distro_name'=>'OpenZaurus',
- 'distro_version'=>'3.5.4',
- 'feed_base_url'=>'http://ewi546.ewi.utwente.nl/mirror/www.openzaurus.org/official/unstable/3.5.4/feed/',
- 'feeds'=>array(
+ array(
+ 'distro_name'=>'Ångström',
+ 'distro_version'=>'unstable',
+ 'feed_base_url'=>'http://www.angstrom-distribution.org/unstable/feed/',
+ 'feeds'=>
array(
- 'name'=>'base',
- 'url'=>'base',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'opie',
- 'url'=>'opie',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'x11',
- 'url'=>'x11',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'upgrades',
- 'url'=>'upgrades',
- 'type'=>'upgrades',
- ),
- array(
- 'name'=>'perl',
- 'url'=>'perl',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'python',
- 'url'=>'python',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'Collie upgrades',
- 'url'=>'upgrades/machine/collie',
- 'type'=>'upgrades',
- ),
- array(
- 'name'=>'Tosa upgrades',
- 'url'=>'upgrades/machine/tosa',
- 'type'=>'upgrades',
- ),
- array(
- 'name'=>'Poodle upgrades',
- 'url'=>'upgrades/machine/poodle',
- 'type'=>'upgrades',
- ),
- array(
- 'name'=>'Poodle',
- 'url'=>'machine/poodle',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'Collie',
- 'url'=>'machine/collie',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'Tosa',
- 'url'=>'machine/tosa',
- 'type'=>'normal',
- )
- )
- ),
- array(
- 'distro_name'=>'OpenZaurus',
- 'distro_version'=>'3.5.4.1',
- 'feed_base_url'=>'http://ewi546.ewi.utwente.nl/mirror/www.openzaurus.org/official/unstable/3.5.4.1/feed/',
- 'feeds'=>array(
- array(
- 'name'=>'base',
- 'url'=>'base',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'opie',
- 'url'=>'opie',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'perl',
- 'url'=>'perl',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'python',
- 'url'=>'python',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'upgrades',
- 'url'=>'upgrades',
- 'type'=>'upgrades',
- ),
- array(
- 'name'=>'x11',
- 'url'=>'x11',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'C7x0',
- 'url'=>'machine/c7x0',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'Spitz',
- 'url'=>'machine/spitz',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'Akita',
- 'url'=>'machine/akita',
- 'type'=>'normal',
- ),
- array(
- 'name'=>'Akita upgrades',
- 'url'=>'upgrades/machine/akita',
- 'type'=>'upgrades',
- ),
- array(
- 'name'=>'C7x0 upgrades',
- 'url'=>'upgrades/machine/c7x0',
- 'type'=>'upgrades',
- ),
- array(
- 'name'=>'Spitz upgrades',
- 'url'=>'upgrades/machine/spitz',
- 'type'=>'upgrades',
- )
- )
- )
-);
+ array(
+ 'name'=>'All architectures',
+ 'url'=>'all',
+ ),
+ array(
+ 'name'=>'avr32 base',
+ 'url'=>'avr32/base',
+ ),
+ array(
+ 'name'=>'blackfin base',
+ 'url'=>'blackfin/base',
+ ),
+
+ array(
+ 'name'=>'armv5te base',
+ 'url'=>'armv5te/base',
+ ),
+ array(
+ 'name'=>'iwmmxt base',
+ 'url'=>'iwmmxt/base',
+ ),
+ array(
+ 'name'=>'armv5teb base',
+ 'url'=>'armv5teb/base',
+ ),
+ array(
+ 'name'=>'arm-oabi base',
+ 'url'=>'arm-oabi/base',
+ ),
+
+ array(
+ 'name'=>'i586 base',
+ 'url'=>'i586/base',
+ ),
+ array(
+ 'name'=>'i686 base',
+ 'url'=>'i686/base',
+ ),
+
+ array(
+ 'name'=>'armv4t base',
+ 'url'=>'armv4t/base',
+ ),
+ array(
+ 'name'=>'armv6 base',
+ 'url'=>'armv6/base',
+ ),
+ array(
+ 'name'=>'ppc603e base',
+ 'url'=>'ppc603e/base',
+ ),
+ array(
+ 'name'=>'ppc405 base',
+ 'url'=>'ppc405/base',
+ ),
+
+ array(
+ 'name'=>'armv5te perl',
+ 'url'=>'armv5te/perl',
+ ),
+ array(
+ 'name'=>'armv5te python',
+ 'url'=>'armv5te/python',
+ ),
+ array(
+ 'name'=>'armv5te debug',
+ 'url'=>'armv5te/debug',
+ ),
+ array(
+ 'name'=>'armv5te gstreamer',
+ 'url'=>'armv5te/gstreamer',
+ ),
+ array(
+ 'name'=>'avr32 perl',
+ 'url'=>'avr32/perl',
+ ),
+ array(
+ 'name'=>'avr32 python',
+ 'url'=>'avr32/python',
+ ),
+ array(
+ 'name'=>'avr32 debug',
+ 'url'=>'avr32/debug',
+ ),
+ array(
+ 'name'=>'avr32 gstreamer',
+ 'url'=>'avr32/gstreamer',
+ ),
+
+ array(
+ 'name'=>'blackfin perl',
+ 'url'=>'blackfin/perl',
+ ),
+ array(
+ 'name'=>'blackfin python',
+ 'url'=>'blackfin/python',
+ ),
+ array(
+ 'name'=>'blackfin debug',
+ 'url'=>'blackfin/debug',
+ ),
+ array(
+ 'name'=>'blackfin gstreamer',
+ 'url'=>'blackfin/gstreamer',
+ ),
+ array(
+ 'name'=>'armv4t perl',
+ 'url'=>'armv4t/perl',
+ ),
+ array(
+ 'name'=>'armv4t python',
+ 'url'=>'armv4t/python',
+ ),
+ array(
+ 'name'=>'armv4t debug',
+ 'url'=>'armv4t/debug',
+ ),
+ array(
+ 'name'=>'armv4t gstreamer',
+ 'url'=>'armv4t/gstreamer',
+ ),
+
+ array(
+ 'name'=>'armv6 perl',
+ 'url'=>'armv6/perl',
+ ),
+ array(
+ 'name'=>'armv6 python',
+ 'url'=>'armv6/python',
+ ),
+ array(
+ 'name'=>'armv6 debug',
+ 'url'=>'armv6/debug',
+ ),
+ array(
+ 'name'=>'armv6 gstreamer',
+ 'url'=>'armv6/gstreamer',
+ ),
+
+ array(
+ 'name'=>'i686 perl',
+ 'url'=>'i686/perl',
+ ),
+ array(
+ 'name'=>'i686 python',
+ 'url'=>'i686/python',
+ ),
+ array(
+ 'name'=>'i686 debug',
+ 'url'=>'i686/debug',
+ ),
+ array(
+ 'name'=>'i686 gstreamer',
+ 'url'=>'i686/gstreamer',
+ ),
+ array(
+ 'name'=>'ppc603e perl',
+ 'url'=>'ppc603e/perl',
+ ),
+ array(
+ 'name'=>'ppc603e python',
+ 'url'=>'ppc603e/python',
+ ),
+ array(
+ 'name'=>'ppc603e debug',
+ 'url'=>'ppc603e/debug',
+ ),
+ array(
+ 'name'=>'ppc603e gstreamer',
+ 'url'=>'ppc603e/gstreamer',
+ ),
+
+ array(
+ 'name'=>'Motorola A780',
+ 'url'=>'armv5te/machine/a780',
+ ),
+ array(
+ 'name'=>'HP iPAQ h2200',
+ 'url'=>'armv5te/machine/h2200',
+ ),
+
+ array(
+ 'name'=>'HP iPAQ h4000',
+ 'url'=>'armv5te/machine/h4000',
+ ),
+
+ array(
+ 'name'=>'HTC universal/ iMate jasjar',
+ 'url'=>'armv5te/machine/htcuniversal',
+ ),
+ array(
+ 'name'=>'HP iPAQ hx4700',
+ 'url'=>'armv5te/machine/hx4700',
+ ),
+ array(
+ 'name'=>'HP iPAQ hx2000 series',
+ 'url'=>'armv5te/machine/hx2000',
+ ),
+
+ array(
+ 'name'=>'Psion Teklogix NetBook Pro',
+ 'url'=>'armv5te/machine/netbook-pro',
+ ),
+ array(
+ 'name'=>'HTC Magician',
+ 'url'=>'armv5te/machine/magician',
+ ),
+ array(
+ 'name'=>'Nokia 770 internet tablet',
+ 'url'=>'armv5te/machine/nokia770',
+ ),
+ array(
+ 'name'=>'Sharp Zaurus 5600 (Poodle)',
+ 'url'=>'armv5te/machine/poodle',
+ ),
+ array(
+ 'name'=>'Sharp Zaurus c7x0 (Corgi, Boxer, Husky, Shepher)',
+ 'url'=>'armv5te/machine/c7x0',
+ ),
+ array(
+ 'name'=>'Sharp Zaurus SL-C1000 (akita)',
+ 'url'=>'armv5te/machine/akita',
+ ),
+ array(
+ 'name'=>'HP iPAQ h5xxx series',
+ 'url'=>'armv5te/machine/h5xxx',
+ ),
+ array(
+ 'name'=>'Sharp Zaurus SL-C6000 (Tosa)',
+ 'url'=>'armv5te/machine/tosa',
+ ),
+ array(
+ 'name'=>'Sharp Zaurus SL-C3xxx (Spitz, Borzoi, Terrier)',
+ 'url'=>'armv5te/machine/spitz',
+ ),
+ array(
+ 'name'=>'Cirrus Logic ep93xx boards',
+ 'url'=>'armv4t/machine/ep93xx',
+ ),
+ array(
+ 'name'=>'FIC gta01/Neo1973 phone',
+ 'url'=>'armv4t/machine/fic-gta01',
+ ),
+ array(
+ 'name'=>'HP iPAQ h6300',
+ 'url'=>'armv4t/machine/h6300',
+ ),
+ array(
+ 'name'=>'Freescale i.mx31 ADS development board',
+ 'url'=>'armv6/machine/mx31ads',
+ ),
-$ipkpath = "/var/www/angstrom/unstable/feed/unsorted";
-$cpu_archs = array('arm-oabi', 'armv4', 'armv4t', 'armv5te', 'armv6', 'armv7', 'avr32', 'bfin', 'i386', 'i486', 'i586', 'i686', 'iwmmxt', 'ppc405', 'ppc603e', 'sparc');
-$device_archs = array(
- "a1200" => "armv5te",
- "a780"=> "armv5te",
- "acern30",
- "adsp-bf537-stamp" => "bfin",
- "adzs-bf538f-ezlite" => "bfin",
- "akita" => "armv5te",
- "alix",
- "amsdelta",
- "asus620",
- "asus730",
- "at32stk1000" => "avr32",
- "at91sam9260ek" => "armv5te",
- "at91sam9261ek" => "armv5te",
- "at91sam9263ek" => "armv5te",
- "atngw100" => "avr32",
- "aximx50" => "armv5te",
- "aximx50v" => "armv5te",
- "borzoi" => "armv5te",
- "boxer" => "armv5te",
- "c7x0" => "armv5te",
- "colinux",
- "collie",
- "compulab-pxa270" => "armv5te",
- "corgi" => "armv5te",
- "davinci-dvevm",
- "db1200",
- "devkitidp-pxa255" => "armv5te",
- "dht-walnut" => "ppc405",
- "e680" => "armv5te",
- "efika" => "ppc603e",
- "ep93xx" => "armv4t",
- "epia",
- "er0100" => "armv5te",
- "eteng500" => "armv5te",
- "fic-gta01" => "armv4t",
- "fic-gta02" => "armv4t",
- "fsg3be",
- "geodegx",
- "geodelx",
- "guinness",
- "gumstix-connex" => "armv5te",
- "gumstix-verdex" => "armv5te",
- "h1910",
- "h1940",
- "h2200" => "armv5te",
- "h3600" => "arm-oabi",
- "h3800" => "arm-oabi",
- "h3900" => "armv5te",
- "h4000" => "armv5te",
- "h5000" => "armv5te",
- "h6300" => "armv4t",
- "htcalpine",
- "htcapache",
- "htcblueangel",
- "htchimalaya",
- "htcsable",
- "htctornado",
- "htcuniversal" => "armv5te",
- "htcwallaby",
- "husky" => "armv5te",
- "hx2000" => "armv5te",
- "hx4700" => "armv5te",
- "i586-generic" => "i586",
- "i686-generic" => "i586",
- "ixp4xx",
- "ixp4xxbe" => "armv5teb",
- "ixp4xxle" => "armv5te",
- "jornada56x",
- "jornada6xx",
- "jornada7xx",
- "kb9202" => "armv4t",
- "ks8695",
- "lite5200",
- "logicpd-pxa270" => "armv5te",
- "looxc550",
- "lsarm",
- "lsppchd",
- "lsppchg",
- "magicbox",
- "magician" => "armv5te",
- "mainstone" => "armv5te",
- "mnci",
- "mtx-1",
- "mtx-2",
- "mtx-3",
- "mtx-3a",
- "mx21ads" => "armv5te",
- "mx31ads" => "armv6",
- "n2100",
- "native",
- "navman-icn330",
- "netbook-pro" => "armv5te",
- "netvista",
- "nokia770" => "armv5te",
- "nokia800",
- "nslu2" => "armv5te",
- "nslu2be" => "armv5teb",
- "nslu2le" => "armv5te",
- "omap1510inn" => "armv5te",
- "omap1610h2" => "armv5te",
- "omap1710h3" => "armv5te",
- "omap2420h4",
- "omap2430sdp",
- "omap5912osk" => "armv5te",
- "palmld" => "armv5te",
- "palmt650" => "armv5te",
- "palmt680",
- "palmtc",
- "palmtt",
- "palmtt2",
- "palmtt3",
- "palmtt5",
- "palmtx",
- "palmz31",
- "palmz71",
- "palmz72",
- "poodle" => "armv5te",
- "progear",
- "qemuarm" => "armv5te",
- "qemux86",
- "rb500",
- "rokre2" => "armv5te",
- "rokre6" => "armv5te",
- "rt3000",
- "rx1950",
- "rx3000",
- "sarge-at91" => "armv4t",
- "sequoia",
- "shark" => "arm-oabi",
- "shepherd" => "armv5te",
- "simpad" => "arm-oabi",
- "smdk2440" => "armv4t",
- "smdk2443" => "armv4t",
- "spitz" => "armv5te",
- "storcenter",
- "sun4cdm",
- "terrier" => "armv5te",
- "titan",
- "tosa" => "armv5te",
- "triton",
- "ts72xx",
- "turbostation",
- "wgt634u",
- "wl500g",
- "wrap",
- "wrt54",
- "x86-32-nocona",
- "x86-prescott",
- "x86-uml",
- "x86",
- "xilinx-ml403",
- "xilinx-ml410",
- "xxs1500",
- );
+ array(
+ 'name'=>'Tyan thunder K7 s2462 mainboard (guinness)',
+ 'url'=>'i686/machine/guinness',
+ ),
+ array(
+ 'name'=>'Progear webpad',
+ 'url'=>'i686/machine/progear',
+ ),
+ array(
+ 'name'=>'Genesi Efika',
+ 'url'=>'ppc603e/machine/efika',
+ ),
-?>
+ )// end distro[feeds]
+ ), //end distro
+ array(
+ 'distro_name'=>'Ångström',
+ 'distro_version'=>'2007.12',
+ 'feed_base_url'=>'http://www.angstrom-distribution.org/feeds/2007/ipk/glibc/',
+ 'feeds'=>
+ array(
+ array(
+ 'name'=>'noarch feed',
+ 'url'=>'all',
+ ),
+ array(
+ 'name'=>'arm-oabi architecture base feed',
+ 'url'=>'arm-oabi/base',
+ ),
+ array(
+ 'name'=>'arm-oabi architecture gstreamer feed',
+ 'url'=>'arm-oabi/gstreamer',
+ ),
+ array(
+ 'name'=>'arm-oabi architecture perl feed',
+ 'url'=>'arm-oabi/perl',
+ ),
+ array(
+ 'name'=>'arm-oabi architecture python feed',
+ 'url'=>'arm-oabi/python',
+ ),
+ array(
+ 'name'=>'arm-oabi architecture debug feed',
+ 'url'=>'arm-oabi/debug',
+ ),
+ array(
+ 'name'=>'armv4t architecture base feed',
+ 'url'=>'armv4t/base',
+ ),
+ array(
+ 'name'=>'armv4t architecture gstreamer feed',
+ 'url'=>'armv4t/gstreamer',
+ ),
+ array(
+ 'name'=>'armv4t architecture perl feed',
+ 'url'=>'armv4t/perl',
+ ),
+ array(
+ 'name'=>'armv4t architecture python feed',
+ 'url'=>'armv4t/python',
+ ),
+ array(
+ 'name'=>'armv4t architecture debug feed',
+ 'url'=>'armv4t/debug',
+ ),
+ array(
+ 'name'=>'armv5te architecture base feed',
+ 'url'=>'armv5te/base',
+ ),
+ array(
+ 'name'=>'armv5te architecture gstreamer feed',
+ 'url'=>'armv5te/gstreamer',
+ ),
+ array(
+ 'name'=>'armv5te architecture perl feed',
+ 'url'=>'armv5te/perl',
+ ),
+ array(
+ 'name'=>'armv5te architecture python feed',
+ 'url'=>'armv5te/python',
+ ),
+ array(
+ 'name'=>'armv5te architecture debug feed',
+ 'url'=>'armv5te/debug',
+ ),
+ array(
+ 'name'=>'armv5teb architecture base feed',
+ 'url'=>'armv5teb/base',
+ ),
+ array(
+ 'name'=>'armv5teb architecture gstreamer feed',
+ 'url'=>'armv5teb/gstreamer',
+ ),
+ array(
+ 'name'=>'armv5teb architecture perl feed',
+ 'url'=>'armv5teb/perl',
+ ),
+ array(
+ 'name'=>'armv5teb architecture python feed',
+ 'url'=>'armv5teb/python',
+ ),
+ array(
+ 'name'=>'armv5teb architecture debug feed',
+ 'url'=>'armv5teb/debug',
+ ),
+ array(
+ 'name'=>'armv6 architecture base feed',
+ 'url'=>'armv6/base',
+ ),
+ array(
+ 'name'=>'armv6 architecture gstreamer feed',
+ 'url'=>'armv6/gstreamer',
+ ),
+ array(
+ 'name'=>'armv6 architecture perl feed',
+ 'url'=>'armv6/perl',
+ ),
+ array(
+ 'name'=>'armv6 architecture python feed',
+ 'url'=>'armv6/python',
+ ),
+ array(
+ 'name'=>'armv6 architecture debug feed',
+ 'url'=>'armv6/debug',
+ ),
+ array(
+ 'name'=>'i486 architecture base feed',
+ 'url'=>'i486/base',
+ ),
+ array(
+ 'name'=>'i486 architecture gstreamer feed',
+ 'url'=>'i486/gstreamer',
+ ),
+ array(
+ 'name'=>'i486 architecture perl feed',
+ 'url'=>'i486/perl',
+ ),
+ array(
+ 'name'=>'i486 architecture python feed',
+ 'url'=>'i486/python',
+ ),
+ array(
+ 'name'=>'i486 architecture debug feed',
+ 'url'=>'i486/debug',
+ ),
+ array(
+ 'name'=>'i586 architecture base feed',
+ 'url'=>'i586/base',
+ ),
+ array(
+ 'name'=>'i586 architecture gstreamer feed',
+ 'url'=>'i586/gstreamer',
+ ),
+ array(
+ 'name'=>'i586 architecture perl feed',
+ 'url'=>'i586/perl',
+ ),
+ array(
+ 'name'=>'i586 architecture python feed',
+ 'url'=>'i586/python',
+ ),
+ array(
+ 'name'=>'i586 architecture debug feed',
+ 'url'=>'i586/debug',
+ ),
+ array(
+ 'name'=>'i686 architecture base feed',
+ 'url'=>'i686/base',
+ ),
+ array(
+ 'name'=>'i686 architecture gstreamer feed',
+ 'url'=>'i686/gstreamer',
+ ),
+ array(
+ 'name'=>'i686 architecture perl feed',
+ 'url'=>'i686/perl',
+ ),
+ array(
+ 'name'=>'i686 architecture python feed',
+ 'url'=>'i686/python',
+ ),
+ array(
+ 'name'=>'i686 architecture debug feed',
+ 'url'=>'i686/debug',
+ ),
+ array(
+ 'name'=>'iwmmxt architecture base feed',
+ 'url'=>'iwmmxt/base',
+ ),
+ array(
+ 'name'=>'iwmmxt architecture gstreamer feed',
+ 'url'=>'iwmmxt/gstreamer',
+ ),
+ array(
+ 'name'=>'iwmmxt architecture perl feed',
+ 'url'=>'iwmmxt/perl',
+ ),
+ array(
+ 'name'=>'iwmmxt architecture python feed',
+ 'url'=>'iwmmxt/python',
+ ),
+ array(
+ 'name'=>'iwmmxt architecture debug feed',
+ 'url'=>'iwmmxt/debug',
+ ),
+ array(
+ 'name'=>'ppc405 architecture base feed',
+ 'url'=>'ppc405/base',
+ ),
+ array(
+ 'name'=>'ppc405 architecture gstreamer feed',
+ 'url'=>'ppc405/gstreamer',
+ ),
+ array(
+ 'name'=>'ppc405 architecture perl feed',
+ 'url'=>'ppc405/perl',
+ ),
+ array(
+ 'name'=>'ppc405 architecture python feed',
+ 'url'=>'ppc405/python',
+ ),
+ array(
+ 'name'=>'ppc405 architecture debug feed',
+ 'url'=>'ppc405/debug',
+ ),
+ array(
+ 'name'=>'ppc603e architecture base feed',
+ 'url'=>'ppc603e/base',
+ ),
+ array(
+ 'name'=>'ppc603e architecture gstreamer feed',
+ 'url'=>'ppc603e/gstreamer',
+ ),
+ array(
+ 'name'=>'ppc603e architecture perl feed',
+ 'url'=>'ppc603e/perl',
+ ),
+ array(
+ 'name'=>'ppc603e architecture python feed',
+ 'url'=>'ppc603e/python',
+ ),
+ array(
+ 'name'=>'ppc603e architecture debug feed',
+ 'url'=>'ppc603e/debug',
+ )
+ ) // end distro['feeds']
+ ), //end distro
+ array(
+ 'distro_name'=>'Ångström',
+ 'distro_version'=>'2008.6',
+ 'feed_base_url'=>'http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/',
+ 'feeds'=>
+ array(
+ array(
+ 'name'=>'noarch feed',
+ 'url'=>'all',
+ ),
+ array(
+ 'name'=>'arm-oabi architecture base feed',
+ 'url'=>'arm-oabi/base',
+ ),
+ array(
+ 'name'=>'arm-oabi architecture gstreamer feed',
+ 'url'=>'arm-oabi/gstreamer',
+ ),
+ array(
+ 'name'=>'arm-oabi architecture perl feed',
+ 'url'=>'arm-oabi/perl',
+ ),
+ array(
+ 'name'=>'arm-oabi architecture python feed',
+ 'url'=>'arm-oabi/python',
+ ),
+ array(
+ 'name'=>'arm-oabi architecture debug feed',
+ 'url'=>'arm-oabi/debug',
+ ),
+ array(
+ 'name'=>'armv4t architecture base feed',
+ 'url'=>'armv4t/base',
+ ),
+ array(
+ 'name'=>'armv4t architecture gstreamer feed',
+ 'url'=>'armv4t/gstreamer',
+ ),
+ array(
+ 'name'=>'armv4t architecture perl feed',
+ 'url'=>'armv4t/perl',
+ ),
+ array(
+ 'name'=>'armv4t architecture python feed',
+ 'url'=>'armv4t/python',
+ ),
+ array(
+ 'name'=>'armv4t architecture debug feed',
+ 'url'=>'armv4t/debug',
+ ),
+ array(
+ 'name'=>'armv5te architecture base feed',
+ 'url'=>'armv5te/base',
+ ),
+ array(
+ 'name'=>'armv5te architecture gstreamer feed',
+ 'url'=>'armv5te/gstreamer',
+ ),
+ array(
+ 'name'=>'armv5te architecture perl feed',
+ 'url'=>'armv5te/perl',
+ ),
+ array(
+ 'name'=>'armv5te architecture python feed',
+ 'url'=>'armv5te/python',
+ ),
+ array(
+ 'name'=>'armv5te architecture debug feed',
+ 'url'=>'armv5te/debug',
+ ),
+ array(
+ 'name'=>'armv5teb architecture base feed',
+ 'url'=>'armv5teb/base',
+ ),
+ array(
+ 'name'=>'armv5teb architecture gstreamer feed',
+ 'url'=>'armv5teb/gstreamer',
+ ),
+ array(
+ 'name'=>'armv5teb architecture perl feed',
+ 'url'=>'armv5teb/perl',
+ ),
+ array(
+ 'name'=>'armv5teb architecture python feed',
+ 'url'=>'armv5teb/python',
+ ),
+ array(
+ 'name'=>'armv5teb architecture debug feed',
+ 'url'=>'armv5teb/debug',
+ ),
+ array(
+ 'name'=>'armv6 architecture base feed',
+ 'url'=>'armv6/base',
+ ),
+ array(
+ 'name'=>'armv6 architecture gstreamer feed',
+ 'url'=>'armv6/gstreamer',
+ ),
+ array(
+ 'name'=>'armv6 architecture perl feed',
+ 'url'=>'armv6/perl',
+ ),
+ array(
+ 'name'=>'armv6 architecture python feed',
+ 'url'=>'armv6/python',
+ ),
+ array(
+ 'name'=>'armv6 architecture debug feed',
+ 'url'=>'armv6/debug',
+ ),
+ array(
+ 'name'=>'i486 architecture base feed',
+ 'url'=>'i486/base',
+ ),
+ array(
+ 'name'=>'i486 architecture gstreamer feed',
+ 'url'=>'i486/gstreamer',
+ ),
+ array(
+ 'name'=>'i486 architecture perl feed',
+ 'url'=>'i486/perl',
+ ),
+ array(
+ 'name'=>'i486 architecture python feed',
+ 'url'=>'i486/python',
+ ),
+ array(
+ 'name'=>'i486 architecture debug feed',
+ 'url'=>'i486/debug',
+ ),
+ array(
+ 'name'=>'i586 architecture base feed',
+ 'url'=>'i586/base',
+ ),
+ array(
+ 'name'=>'i586 architecture gstreamer feed',
+ 'url'=>'i586/gstreamer',
+ ),
+ array(
+ 'name'=>'i586 architecture perl feed',
+ 'url'=>'i586/perl',
+ ),
+ array(
+ 'name'=>'i586 architecture python feed',
+ 'url'=>'i586/python',
+ ),
+ array(
+ 'name'=>'i586 architecture debug feed',
+ 'url'=>'i586/debug',
+ ),
+ array(
+ 'name'=>'i686 architecture base feed',
+ 'url'=>'i686/base',
+ ),
+ array(
+ 'name'=>'i686 architecture gstreamer feed',
+ 'url'=>'i686/gstreamer',
+ ),
+ array(
+ 'name'=>'i686 architecture perl feed',
+ 'url'=>'i686/perl',
+ ),
+ array(
+ 'name'=>'i686 architecture python feed',
+ 'url'=>'i686/python',
+ ),
+ array(
+ 'name'=>'i686 architecture debug feed',
+ 'url'=>'i686/debug',
+ ),
+ array(
+ 'name'=>'iwmmxt architecture base feed',
+ 'url'=>'iwmmxt/base',
+ ),
+ array(
+ 'name'=>'iwmmxt architecture gstreamer feed',
+ 'url'=>'iwmmxt/gstreamer',
+ ),
+ array(
+ 'name'=>'iwmmxt architecture perl feed',
+ 'url'=>'iwmmxt/perl',
+ ),
+ array(
+ 'name'=>'iwmmxt architecture python feed',
+ 'url'=>'iwmmxt/python',
+ ),
+ array(
+ 'name'=>'iwmmxt architecture debug feed',
+ 'url'=>'iwmmxt/debug',
+ ),
+ array(
+ 'name'=>'ppc405 architecture base feed',
+ 'url'=>'ppc405/base',
+ ),
+ array(
+ 'name'=>'ppc405 architecture gstreamer feed',
+ 'url'=>'ppc405/gstreamer',
+ ),
+ array(
+ 'name'=>'ppc405 architecture perl feed',
+ 'url'=>'ppc405/perl',
+ ),
+ array(
+ 'name'=>'ppc405 architecture python feed',
+ 'url'=>'ppc405/python',
+ ),
+ array(
+ 'name'=>'ppc405 architecture debug feed',
+ 'url'=>'ppc405/debug',
+ ),
+ array(
+ 'name'=>'ppc603e architecture base feed',
+ 'url'=>'ppc603e/base',
+ ),
+ array(
+ 'name'=>'ppc603e architecture gstreamer feed',
+ 'url'=>'ppc603e/gstreamer',
+ ),
+ array(
+ 'name'=>'ppc603e architecture perl feed',
+ 'url'=>'ppc603e/perl',
+ ),
+ array(
+ 'name'=>'ppc603e architecture python feed',
+ 'url'=>'ppc603e/python',
+ ),
+ array(
+ 'name'=>'ppc603e architecture debug feed',
+ 'url'=>'ppc603e/debug',
+ )
+ )// end distro[feeds]s
+ )// end distro
+ ); //end $feeds
+?>
diff --git a/contrib/feed-browser/update.php b/contrib/feed-browser/update.php
index 53317ebb03..98751ea26c 100644
--- a/contrib/feed-browser/update.php
+++ b/contrib/feed-browser/update.php
@@ -46,9 +46,15 @@ if(!check_database())
$feeds = db_query("SELECT f_id, f_name, f_uri FROM feeds");
-if($argc > 1 AND $argv[1] == 'upgrades')
+if($argc == 2)
{
- $feeds = db_query("SELECT f_id, f_name, f_uri FROM feeds WHERE f_type = 'upgrades'");
+ $feeds = db_query("SELECT f_id, f_name, f_uri FROM feeds WHERE f_uri = '${argv[1]}'");
+} else if ($argc == 3 && $argv[1] == "--type") {
+ $feeds = db_query("SELECT f_id, f_name, f_uri FROM feeds WHERE f_type = '${argv[2]}'");
+}
+
+if (!$feeds) {
+ die("Cannot find feed(s) in the DB\n");
}
$start = time();
diff --git a/contrib/mtn2cl/mtn2cl.sh b/contrib/mtn2cl/mtn2cl.sh
index 416d393ccd..15d2722a8b 100755
--- a/contrib/mtn2cl/mtn2cl.sh
+++ b/contrib/mtn2cl/mtn2cl.sh
@@ -11,7 +11,7 @@ else
export OLD_REV="l:\"1 week ago\""
fi
-for i in `mtn log --brief --no-graph --no-merges --to ${OLD_REV} --from ${REV_NOW}| awk '{print $2 ":" $1}'` ; do \
+for i in `mtn log --brief --no-graph --no-merges --to "${OLD_REV}" --from "${REV_NOW}"| awk '{print $2 ":" $1}'` ; do \
export REV=`echo $i | awk -F: '{print $2}'`
export AUTHOR=`echo $i | awk -F: '{print $1}'`
export CL=`mtn ls certs ${REV} | grep -A 1 changelog | grep -v changelog | gawk -F'Value : ' '{ print $2 }'`
diff --git a/contrib/mtn2git/mtn2git.py b/contrib/mtn2git/mtn2git.py
index cda4f39fca..1de3010756 100755
--- a/contrib/mtn2git/mtn2git.py
+++ b/contrib/mtn2git/mtn2git.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
"""
- Copyright (C) 2006, 2007 Holger Hans Peter Freyther
+ Copyright (C) 2006, 2007, 2008 Holger Hans Peter Freyther
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -27,18 +27,6 @@
# -tag handling
# -work with n-merges
#
-# DISCUSSION:
-# -For some reason the get_revision information might be inaccurate
-# and I should consider just comparing the manifests.
-# I would use the manifests of the parents and consider all files deleted
-# and then remove every dir/file that is inside the new manifest from this
-# list.
-# Benefits:
-# - 1:1 match of the manifest regardles of get_revision information
-# - Renaming is handled by git anyway
-# Downsides:
-# - The size of the import will grow.
-#
import mtn
import os
@@ -48,6 +36,17 @@ import email.Utils
import status
+# Interesting revisions:
+# Rename with dest==src: 24cba5923360fef7c5cc81d51000e30b90355eb9
+# Recursive rename: fca159c5c00ae4158c289f5aabce995378d4e41b
+# Delete+Rename: 91da98265a39c93946e00adf5d7bf92b341de847
+#
+#
+#
+
+# Our manifest/tree fifo construct
+cached_tree = {}
+cached_fifo = []
def get_mark(revision):
"""
@@ -104,21 +103,6 @@ def reset_git(ops, revision):
cmd += [""]
print "\n".join(cmd)
-def filter_renamed(manifest, renamed):
- """
- If we base from a revision that has already done
- the move, git-fast-import will complain that the file
- has been already moved
- """
- if len(renamed) == 0:
- return renamed
-
- for line in manifest:
- if line[0] == "file":
- renamed = filter(lambda (to,from_,manifest): to != line[1], renamed)
-
- return renamed
-
def get_git_date(revision):
"""
Convert the "date" cert of monotone to a time understandable by git. No timezone
@@ -127,135 +111,90 @@ def get_git_date(revision):
dt = datetime.datetime.strptime(revision["date"], "%Y-%m-%dT%H:%M:%S").strftime("%a, %d %b %Y %H:%M:%S +0000")
return dt
-def recursively_delete(ops, manifest, revision, dir_name, to_delete):
- """
- Recursively delete all files that dir_name inside the name
- """
- for line in manifest:
- if line[0] == "dir" or line[0] == "file":
- if line[1].startswith(dir_name):
- print >> sys.stderr, "Deleting '%s'" % line[1]
- to_delete.add((line[1], revision))
- elif line[0] in ["format_version"]:
- assert(line[1] == "1")
- else:
- print >> sys.stderr, line[0]
- assert(False)
+def is_executable_attribute_set(attributes, rev):
+ assert(len(attributes) % 3 == 0), rev
- return to_delete
+ if len(attributes) >= 3:
+ for i in range(0, len(attributes)%3+1):
+ if attributes[i] == "attr" and attributes[i+1] == "mtn:execute" and attributes[i+2] == "true":
+ return True
+ return False
-def recursively_rename(ops, manifest, revision, old_name, new_name, to_add_dirs, to_add_files, to_remove_items, files_deleted, files_sticky):
- """
- mtn has a rename command and can rename entrie directories. For git we will have to do the recursive renaming
- ourselves. Basicly we will get all files and replace old_name with new_name but only:
- If the file of the old_manifest is not in our to be deleted list
- """
- old_dir = old_name + "/"
- for line in manifest:
- if line[1].startswith(old_dir) or line[1] == old_name:
- already_handled = False
- for (deleted,_) in files_deleted:
- if line[1] == deleted:
- already_handled = True
- break
-
- # Don't rename files that should be in the same directory
- if line[1] in files_sticky:
- already_handled = True
-
- if already_handled:
- pass
- elif line[0] == "file":
- print >> sys.stderr, "Will add '%s' old: '%s' new: '%s' => result: '%s'" % (line[1], old_name, new_name, line[1].replace(old_name, new_name, 1))
- to_add_files.add((line[1].replace(old_name, new_name, 1), None, revision))
- elif line[0] == "dir":
- to_add_dirs.add((line[1].replace(old_name, new_name, 1), revision))
- elif line[0] in ["format_version"]:
- assert(line[1] == "1")
- else:
- print >> sys.stderr, line[0]
- assert(False)
-
- return (to_add_files, to_add_dirs)
+def build_tree(manifest, rev):
+ """Assemble a filesystem tree from a given manifest"""
-#
-# We need to recursively rename the directories. Now the difficult part is to undo certain operations.
-#
-# e.g we rename the whole dir and then rename a file back. We could revive a directory that was marked
-# for deletion.
-#
-# rename "weird/two/three"
-# to "unweird/four"
-#
-# rename "weird/two/three/four"
-# to "weird/two/three"
-#
-# Here we would schedule weird/two/three for deletion but then revive it again. So three does not
-# get copied to unweird/four/three
-# """
-def recursively_rename_directories(ops, manifests, rename_commands, files_deleted, files_moved_sticky):
- to_add_directories = set()
- to_add_files = set()
- to_remove_items = set()
-
- for (old_name, new_name, old_revision) in rename_commands:
- # Check if we have the above case and rename a more specific directory
- # and then we will alter the result...
- inner_rename = False
- for (other_old_name, other_new_name, other_rev) in rename_commands:
- if old_name.startswith(other_old_name + "/") and other_old_name != old_name:
- inner_rename = True
- print >> sys.stderr, "Inner rename detected", old_name, other_old_name
- # Fixup the renaming
- def rename(filename, filerev, rev, would_be_new_name):
- if filename.startswith(would_be_new_name + "/"):
- return filename.replace(would_be_new_name, new_name, 1), filerev, rev
- return filename, filerev, rev
-
- would_be_new_name = other_new_name + "/" + old_name[len(other_old_name)+1:]
- to_remove_items = set(filter(lambda (item,_): item != new_name, to_remove_items))
- to_add_directories = set(filter(lambda (item,_): item != would_be_new_name, to_add_directories))
- to_add_directories.add((new_name, old_revision))
- to_add_files = set(map(lambda (fn, fr, r): rename(fn, fr, r, would_be_new_name), to_add_files))
-
- if not inner_rename:
- to_remove_items.add((old_name, old_revision))
- recursively_delete(ops, manifests[old_revision], old_revision, old_name + "/", to_remove_items)
- recursively_rename(ops, manifests[old_revision], old_revision, old_name, new_name, to_add_directories, to_add_files, to_remove_items, files_deleted, files_moved_sticky)
-
- return (to_add_directories, to_add_files, to_remove_items)
-
-
-def build_tree(manifest):
- dirs = {}
- files = {}
+ class tree:
+ def __init__(self):
+ self.dirs = {}
+ self.files= {}
+
+ tree = tree()
for line in manifest:
if line[0] == "file":
- files[line[1]] = (line[3],line[4:])
+ tree.files[line[1]] = (line[3], is_executable_attribute_set(line[4:], rev))
elif line[0] == "dir":
- dirs[line[1]] = 1
+ tree.dirs[line[1]] = 1
elif line[0] != "format_version":
- print >> sys.stderr, line[0]
- assert(False)
- return (dirs,files)
+ assert(False), "Rev: %s: Line[0]: '%s'" % (rev, line[0])
-def compare_with_manifest(all_added, all_modified, all_deleted, new_manifest, old_manifests):
- """
- Sanity check that the difference between the old and the new manifest is the one
- we have in all_added, all_modified, all_deleted
- """
- old_trees = {}
- really_added = {}
- really_modified = {}
- really_removed = {}
+ return tree
+
+def get_and_cache_tree(ops, revision):
+ """Simple FIFO to cache a number of trees"""
+ global cached_tree, cached_fifo
+
+ if revision in cached_tree:
+ return cached_tree[revision]
- current_dirs, current_files = build_tree(new_manifest)
+ tree = build_tree([line for line in ops.get_manifest_of(revision)], revision)
+ cached_tree[revision] = tree
+ cached_fifo.append(revision)
+
+ # Shrink
+ if len(cached_fifo) > 100:
+ old_name = cached_fifo[0]
+ cached_fifo = cached_fifo[1:]
+ del cached_tree[old_name]
+
+ return tree
+
+def diff_manifest(old_tree, new_tree):
+ """Find additions, modifications and deletions"""
+ added = set()
+ modified = set()
+ deleted = set()
+
+ # Removed dirs
+ for dir in old_tree.dirs.keys():
+ if not dir in new_tree.dirs:
+ deleted.add((dir,True))
+
+ # New dirs
+ for dir in new_tree.dirs.keys():
+ if not dir in old_tree.dirs:
+ added.add(dir)
+
+ # Deleted files
+ for file in old_tree.files.keys():
+ if not file in new_tree.files:
+ deleted.add((file,False))
+
+ # Added files, goes to modifications
+ for file in new_tree.files.keys():
+ if not file in old_tree.files:
+ modified.add((file, new_tree.files[file][0]))
+ continue
+
+ # The file changed, either contents or executable attribute
+ old = old_tree.files[file]
+ new = new_tree.files[file]
+ if old != new:
+ modified.add((file, new_tree.files[file][0]))
+
- for parent in old_manifests.keys():
- old_trees[parent] = build_tree(old_manifests[parent])
+ return (added, modified, deleted)
- print >> sys.stderr, len(old_manifests)
def fast_import(ops, revision):
"""Import a revision into git using git-fast-import.
@@ -292,27 +231,28 @@ def fast_import(ops, revision):
return
# Use the manifest to find dirs and files
- manifest = [line for line in ops.get_manifest_of(revision["revision"])]
- manifests = {}
- dirs = {}
- for parent in revision["parent"]:
- manifests[parent] = [line for line in ops.get_manifest_of(parent)]
- for line in manifests[parent]:
- if line[0] == "dir":
- if not parent in dirs:
- dirs[parent] = {}
- dirs[parent][line[1]] = 1
+ current_tree = get_and_cache_tree(ops, revision["revision"])
- # We can not just change the mode of a file but we need to modifiy the whole file. We
- # will simply add it to the modified list and ask to retrieve the status from the manifest
- for (file, attribute, value, rev) in revision["set_attributes"]:
- if attribute == "mtn:execute":
- revision["modified"].append((file, None, rev))
- for (file, attribute, rev) in revision["clear_attributes"]:
- if attribute == "mtn:execute":
- revision["modified"].append((file, None, rev))
+ all_added = set()
+ all_modifications = set()
+ all_deleted = set()
+
+ # Now diff the manifests
+ for parent in revision["parent"]:
+ (added, modified, deleted) = diff_manifest(get_and_cache_tree(ops, parent), current_tree)
+ all_added = all_added.union(added)
+ all_modifications = all_modifications.union(modified)
+ all_deleted = all_deleted.union(deleted)
+ if len(revision["parent"]) == 0:
+ (added, modified, deleted) = diff_manifest(build_tree([],""), current_tree)
+ all_added = all_added.union(added)
+ all_modifications = all_modifications.union(modified)
+ all_deleted = all_deleted.union(deleted)
+ # TODO:
+ # Readd the sanity check to see if we deleted and modified an entry. This
+ # could probably happen if we have more than one parent (on a merge)?
cmd = []
cmd += ["commit refs/heads/%s" % branch]
@@ -322,97 +262,28 @@ def fast_import(ops, revision):
cmd += ["data %d" % len(revision["changelog"])]
cmd += ["%s" % revision["changelog"]]
- # Emulation for renaming. We will split them into two lists
- file_renamed_del = set()
- file_renamed_new = set()
- file_moved_sticky = set()
-
if len(revision["parent"]) != 0:
cmd += ["from :%s" % get_mark(revision["parent"][0])]
- renamed = revision["renamed"]
-
- to_rename_directories = []
- for (new_name, old_name, old_revision) in renamed:
- # 24cba5923360fef7c5cc81d51000e30b90355eb9 is a rev where src == dest but the
- # directory got renamed, so this means this file got added to the new directory
- # TODO, XXX, FIXME check if this can be done for directories as well
- if new_name == old_name and not old_name in dirs[old_revision]:
- print >> sys.stderr, "Bogus rename in %s (%s, %s)?" % (revision["revision"], new_name, old_name)
- file_moved_sticky.add(old_name)
-
- # Check if the old_name was a directory in the old manifest
- # If we rename a directory we will need to recursively remove and recursively
- # add...
- # Add the '/' otherwise we might rename the wrong directory which shares the
- # same prefix.
- # fca159c5c00ae4158c289f5aabce995378d4e41b is quite funny. It renames a directory
- # and then renames another directory within the renamed one and in the worse case
- # we will revive a deleted directory, file...
- elif old_name in dirs[old_revision]:
- print >> sys.stderr, "Detected directory rename '%s' => '%s'" % (old_name, new_name)
- assert(old_revision in manifests)
- to_rename_directories.append((old_name, new_name, old_revision))
- else:
- print >> sys.stderr, "Renaming %s => %s" % (old_name, new_name)
- file_renamed_new.add((new_name, None, revision["revision"]))
- file_renamed_del.add((old_name, old_revision))
# The first parent is our from.
for parent in revision["parent"][1:]:
cmd += ["merge :%s" % get_mark(parent)]
- # Do the renaming now
- (renamed_dirs, renamed_new, renamed_old) = recursively_rename_directories(ops, manifests, to_rename_directories, file_renamed_del.union(set(revision["removed"])), file_moved_sticky)
-
- # Sanity check, don't remove anything we modify
- all_added = set(revision["added_dirs"]).union(renamed_dirs)
- all_modifications = set(revision["modified"]).union(set(revision["added_files"])).union(renamed_new).union(file_renamed_new)
- all_deleted = set(revision["removed"]).union(renamed_old).union(file_renamed_del)
- all_deleted_new = all_deleted
-
- # Check if we delete and add at the same time
- for (deleted,rev) in all_deleted:
- for (added,_) in all_added:
- if added == deleted:
- print >> sys.stderr, "Added and Deleted", added, deleted
- all_deleted_new = set(filter(lambda (dele,_): dele != added, all_deleted_new))
- assert((added,rev) not in all_deleted_new)
-
- for (modified,_,_) in all_modifications:
- if modified == deleted:
- print >> sys.stderr, "Modified and Deleted", modified, deleted
- all_deleted_new = set(filter(lambda (dele,_): dele != modified, all_deleted_new))
- assert((modified,rev) not in all_deleted_new)
-
- # Filtered list of to be deleted items
- all_deleted = all_deleted_new
- # Check if we delete but the manifest has a file like this
- for line in manifest:
- if line[0] == "dir" or line[0] == "file":
- for (deleted,rev) in all_deleted:
- if line[1] == deleted:
- # 91da98265a39c93946e00adf5d7bf92b341de847 of mtn has a delete + rename
- print >> sys.stderr, "Trying to delete a file which is in the new manifest", line[1], deleted
- assert(False)
-
- compare_with_manifest(all_added, all_modifications, all_deleted, manifest, manifests)
-
- for (dir_name, rev) in all_added:
+ for dir_name in all_added:
cmd += ["M 644 inline %s" % os.path.join(dir_name, ".mtn2git_empty")]
cmd += ["data <<EOF"]
cmd += ["EOF"]
cmd += [""]
- for (file_name, file_revision, rev) in all_modifications:
- (mode, file) = get_file_and_mode(ops, manifest, file_name, file_revision, revision["revision"])
+ for (file_name, file_revision) in all_modifications:
+ (mode, file) = get_file_and_mode(ops, current_tree, file_name, file_revision, revision["revision"])
cmd += ["M %d inline %s" % (mode, file_name)]
cmd += ["data %d" % len(file)]
cmd += ["%s" % file]
- for (path, rev) in all_deleted:
- assert(rev in dirs)
- if path in dirs[rev]:
+ for (path, is_dir) in all_deleted:
+ if is_dir:
cmd += ["D %s" % os.path.join(path, ".mtn2git_empty")]
else:
cmd += ["D %s" % path]
@@ -428,33 +299,20 @@ def is_trusted(operations, revision):
return False
return True
-def get_file_and_mode(operations, manifest, file_name, _file_revision, rev = None):
- mode = 644
+def get_file_and_mode(operations, file_tree, file_name, _file_revision, rev = None):
+ assert file_name in file_tree.files, "get_file_and_mode: Revision '%s', file_name='%s' " % (rev, file_name)
- file_revision = None
- for line in manifest:
- if line[0] == "file" and line[1] == file_name:
- assert(line[1] == file_name)
- assert(line[2] == "content")
-
- if _file_revision:
- assert(line[3] == _file_revision)
- file_revision = line[3]
-
- attributes = line[4:]
- assert(len(attributes) % 3 == 0)
- if len(attributes) >= 3:
- for i in range(0, len(attributes)%3+1):
- if attributes[i] == "attr" and attributes[i+1] == "mtn:execute" and attributes[i+2] == "true":
- mode = 755
- break
+ (file_revision, executable) = file_tree.files[file_name]
+ if _file_revision:
+ assert _file_revision == file_revision, "Same filerevision for file_name='%s' in rev='%s' (%s,%s)" % (file_name, rev, file_revision, _file_revision)
- assert(file_revision)
- file = "".join([file for file in operations.get_file(file_revision)])
- return (mode, file)
+ if executable:
+ mode = 755
+ else:
+ mode = 644
- print >> sys.stderr, file_name, rev
- assert(False)
+ file = "".join([file for file in operations.get_file(file_revision)])
+ return (mode, file)
def parse_revision(operations, revision):
@@ -491,20 +349,12 @@ def parse_revision(operations, revision):
old_rev = line[1]
elif line[0] == "new_manifest":
revision_description["manifest"] = line[1]
- elif line[0] == "rename":
- revision_description["renamed"].append((line[3], line[1], old_rev))
- elif line[0] == "patch":
- revision_description["modified"].append((line[1], line[5], old_rev))
- elif line[0] == "delete":
- revision_description["removed"].append((line[1], old_rev))
- elif line[0] == "add_dir":
- revision_description["added_dirs"].append((line[1], old_rev))
- elif line[0] == "add_file":
- revision_description["added_files"].append((line[1], line[3], old_rev))
elif line[0] == "clear":
revision_description["clear_attributes"].append((line[1], line[3], old_rev))
elif line[0] == "set":
revision_description["set_attributes"].append((line[1], line[3], line[5], old_rev))
+ elif line[0] in ["rename", "patch", "delete", "add_dir", "add_file"]:
+ pass
else:
print >> sys.stderr, line
assert(False)
@@ -519,7 +369,7 @@ def parse_revision(operations, revision):
revision_description["committer"] = cert[1]
else:
print >> sys.stderr, "Unknown Cert: Ignoring", cert[5], cert[7]
- assert(False)
+ #assert(False)
return revision_description
@@ -565,25 +415,31 @@ def main(mtn_cli, db, rev):
ops.automate.stop()
all_revs = []
+ branch_heads = {}
for branch in branches:
heads = [head for head in ops.heads(branch)]
+ if len(heads) != 1:
+ print >> sys.stderr, "Skipping branch '%s' due multiple heads" % (branch)
+ continue
+
if branch in status.former_heads:
old_heads = status.former_heads[branch]
else:
old_heads = []
for head in heads:
+ print >> sys.stderr, old_heads, head
all_revs += ops.ancestry_difference(head, old_heads)
status.former_heads[branch] = heads
+
sorted_revs = [rev for rev in ops.toposort(all_revs)]
for rev in sorted_revs:
if has_mark(rev):
- print >> sys.stderr, "Already having commit '%s'" % rev
+ print >> sys.stderr, "B: Already having commit '%s'" % rev
else:
print >> sys.stderr, "Going to import revision ", rev
fast_import(ops, parse_revision(ops, rev))
-
if __name__ == "__main__":
import optparse
@@ -608,3 +464,4 @@ if __name__ == "__main__":
print >> sys.stderr, "Failed to open the status file"
main(options.mtn, options.database, options.rev)
status.store(options.status)
+
diff --git a/contrib/mtn2git/status.py b/contrib/mtn2git/status.py
index 47d06b51fd..bd83f85acf 100644
--- a/contrib/mtn2git/status.py
+++ b/contrib/mtn2git/status.py
@@ -20,7 +20,7 @@
THE SOFTWARE.
"""
-import pickle
+import os, pickle
marks = {}
last_mark = 0
@@ -39,9 +39,16 @@ def load(status_name):
def store(status_name):
global marks, last_mark, mark_file, former_heads, same_revisions
- file = open(status_name, "wb")
+ file = open("%s.tmp-foo" % status_name, "wb")
pickle.dump(marks, file)
pickle.dump(last_mark, file)
pickle.dump(former_heads, file)
pickle.dump(same_revisions, file)
file.close()
+
+ # Almost atomic rename, without the risk to destroy something
+ try:
+ os.remove(status_name)
+ except:
+ pass
+ os.rename("%s.tmp-foo" % status_name, status_name)
diff --git a/contrib/python/generate-manifest-2.5.py b/contrib/python/generate-manifest-2.5.py
index 440434229c..3419cab2e5 100755
--- a/contrib/python/generate-manifest-2.5.py
+++ b/contrib/python/generate-manifest-2.5.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# generate Python Manifest for the OpenEmbedded build system
-# (C) 2002-2007 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
+# (C) 2002-2008 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
# (C) 2007 Jeremy Laine
# licensed under MIT, see COPYING.MIT
@@ -10,11 +10,11 @@ import sys
import time
VERSION = "2.5.1"
-# increase when touching python-core, this should be the same ml version as in python_2.5.1.bb
-BASEREV = 5
+# increase when touching python-core, this should be the same ml version as in python_2.5.x.bb
+BASEREV = 7
-__author__ = "Michael 'Mickey' Lauer <mickey@Vanille.de>"
-__version__ = "20071205"
+__author__ = "Michael 'Mickey' Lauer <mlauer@vanille-media.de>"
+__version__ = "20080122"
class MakefileMaker:
@@ -24,7 +24,7 @@ class MakefileMaker:
self.targetPrefix = "${libdir}/python%s/" % VERSION[:3]
self.output = outfile
self.out( "#" * 120 )
- self.out( "### AUTO-GENERATED by '%s' [(C) 2002-2007 Michael 'Mickey' Lauer <mlauer@vanille-media.de>] on %s" % ( sys.argv[0], time.asctime() ) )
+ self.out( "### AUTO-GENERATED by '%s' [(C) 2002-2008 Michael 'Mickey' Lauer <mlauer@vanille-media.de>] on %s" % ( sys.argv[0], time.asctime() ) )
self.out( "###" )
self.out( "### Visit THE Python for Embedded Systems Site => http://www.Vanille.de/projects/python.spy" )
self.out( "###" )
diff --git a/delete.txt b/delete.txt
deleted file mode 100644
index 7c9dc251aa..0000000000
--- a/delete.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Packages to be removed from OpenEmbedded if no one will fix them.
-
-Dropping stuff from metadata is not best way so this file will be filled
-with informations about which parts of metadata will be removed.
-
-Please sort by removal date
-
-Package Name: recipe, directory or subsystem name
-Removal Date: YYYY-MM-DD
-Maintainer: Surname Name + e-mail
-Reason: description why it will get removed
-Proposed by: person which want entry to be removed
-
------------------------------------------------------------------------------
-
-Package Name: Maemo
-Removal Date: 2006-12-15
-Maintainer: none
-Reason: Unfetchable, obsoleted by IT2006 release.
-Proposed by: Marcin 'Hrw' Juszkiewicz
-
-Package Name: task-bootstrap*
-Removal Date: 2006-12-22
-Maintainer: None
-Reason: Obsoleted by task-base
-Proposed by: Koen Kooi
-Note: Moved to packages/obsolete/tasks on 2006-12-22
diff --git a/files/device_table-minimal-add-md.txt b/files/device_table-minimal-add-md.txt
new file mode 100644
index 0000000000..a78ca76605
--- /dev/null
+++ b/files/device_table-minimal-add-md.txt
@@ -0,0 +1,32 @@
+#<path> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>
+#/dev/mem c 640 0 0 1 1 0 0 -
+#
+#type can be one of:
+# f A regular file
+# d Directory
+# c Character special device file
+# b Block special device file
+# p Fifo (named pipe)
+
+/dev d 755 0 0 - - - - -
+/dev/initctl p 600 0 0 - - - - -
+/dev/apm_bios c 660 0 46 10 134 - - -
+/dev/fb0 c 600 0 0 29 0 - - -
+/dev/hda b 660 0 6 3 0 - - -
+/dev/hda b 660 0 6 3 1 1 1 5
+/dev/kmem c 640 0 15 1 2 - - -
+/dev/mem c 640 0 15 1 1 - - -
+/dev/null c 666 0 0 1 3 - - -
+/dev/ram b 640 0 0 1 0 0 1 4
+/dev/tty c 662 0 5 5 0 - - -
+/dev/tty c 666 0 5 4 0 0 1 9
+/dev/ttyS c 640 0 5 4 64 0 1 2
+/dev/ttySA c 640 0 5 204 5 0 1 1
+/dev/zero c 644 0 0 1 5 - - -
+/dev/mtd c 660 0 6 90 0 0 2 8
+/dev/mtdblock b 640 0 0 31 0 0 1 8
+/dev/console c 662 0 5 5 1 - - -
+/dev/random c 644 0 0 1 8 - - -
+/dev/urandom c 644 0 0 1 9 - - -
+/dev/ptmx c 644 0 0 5 2 - - -
+/dev/md b 644 0 0 9 0 0 1 4
diff --git a/packages/agg/agg_2.5.bb b/packages/agg/agg_2.5.bb
index a3cf4b9557..ba76a7b4c6 100644
--- a/packages/agg/agg_2.5.bb
+++ b/packages/agg/agg_2.5.bb
@@ -5,7 +5,7 @@ SECTION = "libs"
LICENSE = "AGG License"
DEPENDS = "virtual/libx11 virtual/libsdl freetype"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://www.antigrain.com/${P}.tar.gz"
S = "${WORKDIR}/${P}"
@@ -32,6 +32,12 @@ do_stage() {
oe_libinstall -a -so libaggplatformsdl ${STAGING_LIBDIR}
install -m 0644 libagg.m4 ${STAGING_DATADIR}/aclocal/
install -d ${STAGING_INCDIR}/agg2
+
+ for f in font_freetype font_win32_tt gpc
+ do
+ install -m 0644 ${S}/$f/*.h ${STAGING_INCDIR}/agg2/
+ done
+
cd include
headers=`find . -name "*.h"`
for f in $headers
@@ -39,6 +45,3 @@ do_stage() {
install -D -m 0644 $f ${STAGING_INCDIR}/agg2/$f
done
}
-
-
-
diff --git a/packages/alsa/alsa-state.bb b/packages/alsa/alsa-state.bb
index 2707aa224a..02957aebe9 100644
--- a/packages/alsa/alsa-state.bb
+++ b/packages/alsa/alsa-state.bb
@@ -8,7 +8,7 @@ DESCRIPTION = "Default ALSA configuration"
LICENSE = "GPL"
RRECOMMENDS_alsa-state = "alsa-states"
PV = "0.1.0"
-PR = "r7"
+PR = "r9"
SRC_URI = " \
file://asoundrc \
@@ -26,6 +26,10 @@ SRC_URI_append_fic-gta01 = " \
file://voip-handset.state \
file://voip-headset.state"
+SRC_URI_append_fic-gta02 = "\
+ file://stereoout.state \
+ "
+
inherit update-rc.d
INITSCRIPT_NAME = "alsa-state"
diff --git a/packages/base-files/base-files/ghi270/.mtn2git_empty b/packages/alsa/alsa-state/fic-gta02/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/base-files/base-files/ghi270/.mtn2git_empty
+++ b/packages/alsa/alsa-state/fic-gta02/.mtn2git_empty
diff --git a/packages/alsa/alsa-state/fic-gta02/asound.state b/packages/alsa/alsa-state/fic-gta02/asound.state
new file mode 100644
index 0000000000..df824b66b6
--- /dev/null
+++ b/packages/alsa/alsa-state/fic-gta02/asound.state
@@ -0,0 +1,875 @@
+state.neo1973gta02 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'PCM Volume'
+ value.0 255
+ value.1 255
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'ADC Capture Volume'
+ value.0 195
+ value.1 195
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Speaker Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Mono Playback Volume'
+ value 121
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Bypass Playback Volume'
+ value 2
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Sidetone Playback Volume'
+ value 2
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Voice Playback Volume'
+ value 2
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Linear Control'
+ comment.item.1 'Adaptive Boost'
+ iface MIXER
+ name 'Bass Boost'
+ value 'Linear Control'
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '130Hz @ 48kHz'
+ comment.item.1 '200Hz @ 48kHz'
+ comment.item.2 '100Hz @ 16kHz'
+ comment.item.3 '400Hz @ 48kHz'
+ comment.item.4 '100Hz @ 8kHz'
+ comment.item.5 '200Hz @ 8kHz'
+ iface MIXER
+ name 'Bass Filter'
+ value '130Hz @ 48kHz'
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'Bass Volume'
+ value 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'Treble Volume'
+ value 0
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8kHz'
+ comment.item.1 '4kHz'
+ iface MIXER
+ name 'Treble Cut-off'
+ value '8kHz'
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Capture Volume'
+ value.0 2
+ value.1 2
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Sidetone Capture Volume'
+ value 2
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 false
+ value.1 false
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '3.4Hz @ 48kHz'
+ comment.item.1 '82Hz @ 16k'
+ comment.item.2 '82Hz @ 8kHz'
+ comment.item.3 '170Hz @ 8kHz'
+ iface MIXER
+ name 'Capture Filter Select'
+ value '3.4Hz @ 48kHz'
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 HiFi
+ comment.item.1 Voice
+ iface MIXER
+ name 'Capture Filter Cut-off'
+ value HiFi
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture Filter Switch'
+ value true
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Target Volume'
+ value 3
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Max Volume'
+ value 7
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 Right
+ comment.item.2 Left
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Capture Function'
+ value Off
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture ZC Switch'
+ value false
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Hold Time'
+ value 15
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Decay Time'
+ value 12
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Attack Time'
+ value 2
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'ALC Capture NG Threshold'
+ value 0
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Constant PGA Gain'
+ comment.item.1 'Mute ADC Output'
+ iface MIXER
+ name 'ALC Capture NG Type'
+ value 'Constant PGA Gain'
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture NG Switch'
+ value false
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Capture
+ comment.item.1 Playback
+ iface MIXER
+ name '3D Function'
+ value Capture
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '2.2kHz'
+ comment.item.1 '1.5kHz'
+ iface MIXER
+ name '3D Upper Cut-off'
+ value '2.2kHz'
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '200Hz'
+ comment.item.1 '500Hz'
+ iface MIXER
+ name '3D Lower Cut-off'
+ value '200Hz'
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name '3D Volume'
+ value 0
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Switch'
+ value false
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture 6dB Attenuate'
+ value false
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback 6dB Attenuate'
+ value false
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32kHz'
+ comment.item.2 '44.1kHz'
+ comment.item.3 '48kHz'
+ iface MIXER
+ name De-emphasis
+ value None
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 Mono
+ iface MIXER
+ name 'Playback Mono Mix'
+ value Stereo
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Non Inverted'
+ comment.item.1 Inverted
+ iface MIXER
+ name 'Playback Phase'
+ value 'Non Inverted'
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic2 Capture Volume'
+ value 0
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic1 Capture Volume'
+ value 0
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'DAI 0'
+ comment.item.1 'DAI 1'
+ comment.item.2 'DAI 2'
+ comment.item.3 'DAI 3'
+ iface MIXER
+ name 'DAI Mode'
+ value 'DAI 0'
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Left ADC'
+ comment.item.2 'Right ADC'
+ comment.item.3 'Channel Swap'
+ iface MIXER
+ name 'ADC Data Select'
+ value Stereo
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Mic 1'
+ comment.item.1 'Mic 2'
+ comment.item.2 'Mic 3'
+ iface MIXER
+ name 'Mic Selection Mux'
+ value 'Mic 1'
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'RXP - RXN'
+ comment.item.1 'RXP + RXN'
+ comment.item.2 RXP
+ comment.item.3 RXN
+ iface MIXER
+ name 'Rx Mixer'
+ value 'RXP - RXN'
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1 + 2'
+ comment.item.1 'Line 1 - 2'
+ comment.item.2 'Line 1'
+ comment.item.3 'Line 2'
+ iface MIXER
+ name 'Line Mixer'
+ value 'Line 1 + 2'
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line Mix'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Mono Mux'
+ value 'Line Mix'
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 2'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Right Mux'
+ value 'Line 2'
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Left Mux'
+ value 'Line 1'
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Line Capture Switch'
+ value false
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic2 Capture Switch'
+ value false
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic1 Capture Switch'
+ value false
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Rx Capture Switch'
+ value false
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Left PGA'
+ comment.item.1 'Mic 1'
+ comment.item.2 'Mic 2'
+ comment.item.3 'Right PGA'
+ iface MIXER
+ name 'Mic Sidetone Mux'
+ value 'Left PGA'
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Sidetone
+ iface MIXER
+ name 'Capture Right Mux'
+ value PGA
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Line
+ iface MIXER
+ name 'Capture Left Mux'
+ value PGA
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Right Mixer'
+ value Stereo
+ }
+ control.66 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Left Mixer'
+ value Stereo
+ }
+ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Voice Capture Sw'
+ value false
+ }
+ control.68 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Left Capture Swi'
+ value false
+ }
+ control.69 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Right Capture Sw'
+ value false
+ }
+ control.70 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 'Capture ST'
+ comment.item.2 LOUT2
+ iface MIXER
+ name 'Out4 Mux'
+ value VREF
+ }
+ control.71 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 ROUT2
+ comment.item.2 'Left + Right'
+ iface MIXER
+ name 'Out3 Mux'
+ value VREF
+ }
+ control.72 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Inverted Mono 1'
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 'Left + Right'
+ iface MIXER
+ name 'Mono 2 Mux'
+ value 'Inverted Mono 1'
+ }
+ control.73 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Left Playback Switch'
+ value false
+ }
+ control.74 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Right Playback Switc'
+ value false
+ }
+ control.75 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Voice Playback Switc'
+ value false
+ }
+ control.76 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.77 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Bypass Playback Swit'
+ value false
+ }
+ control.78 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Voice Playback Swit'
+ value false
+ }
+ control.79 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Sidetone Playback S'
+ value false
+ }
+ control.80 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Right Playback Swit'
+ value true
+ }
+ control.81 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Bypass Playback Swi'
+ value false
+ }
+ control.82 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Voice Playback Switc'
+ value false
+ }
+ control.83 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.84 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Left Playback Switch'
+ value true
+ }
+ control.85 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Bypass Playback Swit'
+ value false
+ }
+ control.86 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM Stereo Out Switch'
+ value true
+ }
+ control.87 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM GSM Line Out Switch'
+ value false
+ }
+ control.88 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM GSM Line In Switch'
+ value false
+ }
+ control.89 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM Headset Mic Switch'
+ value false
+ }
+ control.90 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM Handset Mic Switch'
+ value false
+ }
+ control.91 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM Handset Spk Switch'
+ value false
+ }
+ control.92 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp State Switch'
+ value true
+ }
+ control.93 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Spk Switch'
+ value true
+ }
+}
diff --git a/packages/alsa/alsa-state/fic-gta02/stereoout.state b/packages/alsa/alsa-state/fic-gta02/stereoout.state
new file mode 100644
index 0000000000..df824b66b6
--- /dev/null
+++ b/packages/alsa/alsa-state/fic-gta02/stereoout.state
@@ -0,0 +1,875 @@
+state.neo1973gta02 {
+ control.1 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'PCM Volume'
+ value.0 255
+ value.1 255
+ }
+ control.2 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 255'
+ iface MIXER
+ name 'ADC Capture Volume'
+ value.0 195
+ value.1 195
+ }
+ control.3 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Headphone Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.4 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Speaker Playback Volume'
+ value.0 121
+ value.1 121
+ }
+ control.5 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 127'
+ iface MIXER
+ name 'Mono Playback Volume'
+ value 121
+ }
+ control.6 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Bypass Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.7 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.8 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Playback Volume'
+ value.0 2
+ value.1 2
+ }
+ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Headphone Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.10 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Bypass Playback Volume'
+ value 2
+ }
+ control.12 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Sidetone Playback Volume'
+ value 2
+ }
+ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mono Voice Playback Volume'
+ value 2
+ }
+ control.14 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Linear Control'
+ comment.item.1 'Adaptive Boost'
+ iface MIXER
+ name 'Bass Boost'
+ value 'Linear Control'
+ }
+ control.16 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '130Hz @ 48kHz'
+ comment.item.1 '200Hz @ 48kHz'
+ comment.item.2 '100Hz @ 16kHz'
+ comment.item.3 '400Hz @ 48kHz'
+ comment.item.4 '100Hz @ 8kHz'
+ comment.item.5 '200Hz @ 8kHz'
+ iface MIXER
+ name 'Bass Filter'
+ value '130Hz @ 48kHz'
+ }
+ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'Bass Volume'
+ value 0
+ }
+ control.18 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'Treble Volume'
+ value 0
+ }
+ control.19 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '8kHz'
+ comment.item.1 '4kHz'
+ iface MIXER
+ name 'Treble Cut-off'
+ value '8kHz'
+ }
+ control.20 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Sidetone Capture Volume'
+ value.0 2
+ value.1 2
+ }
+ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Voice Sidetone Capture Volume'
+ value 2
+ }
+ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+ value.0 23
+ value.1 23
+ }
+ control.23 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture ZC Switch'
+ value.0 false
+ value.1 false
+ }
+ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 2
+ iface MIXER
+ name 'Capture Switch'
+ value.0 false
+ value.1 false
+ }
+ control.25 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '3.4Hz @ 48kHz'
+ comment.item.1 '82Hz @ 16k'
+ comment.item.2 '82Hz @ 8kHz'
+ comment.item.3 '170Hz @ 8kHz'
+ iface MIXER
+ name 'Capture Filter Select'
+ value '3.4Hz @ 48kHz'
+ }
+ control.26 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 HiFi
+ comment.item.1 Voice
+ iface MIXER
+ name 'Capture Filter Cut-off'
+ value HiFi
+ }
+ control.27 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture Filter Switch'
+ value true
+ }
+ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Target Volume'
+ value 3
+ }
+ control.29 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'ALC Capture Max Volume'
+ value 7
+ }
+ control.30 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Off
+ comment.item.1 Right
+ comment.item.2 Left
+ comment.item.3 Stereo
+ iface MIXER
+ name 'ALC Capture Function'
+ value Off
+ }
+ control.31 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture ZC Switch'
+ value false
+ }
+ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Hold Time'
+ value 15
+ }
+ control.33 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Decay Time'
+ value 12
+ }
+ control.34 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Capture Attack Time'
+ value 2
+ }
+ control.35 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 31'
+ iface MIXER
+ name 'ALC Capture NG Threshold'
+ value 0
+ }
+ control.36 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Constant PGA Gain'
+ comment.item.1 'Mute ADC Output'
+ iface MIXER
+ name 'ALC Capture NG Type'
+ value 'Constant PGA Gain'
+ }
+ control.37 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Capture NG Switch'
+ value false
+ }
+ control.38 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Capture
+ comment.item.1 Playback
+ iface MIXER
+ name '3D Function'
+ value Capture
+ }
+ control.39 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '2.2kHz'
+ comment.item.1 '1.5kHz'
+ iface MIXER
+ name '3D Upper Cut-off'
+ value '2.2kHz'
+ }
+ control.40 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 '200Hz'
+ comment.item.1 '500Hz'
+ iface MIXER
+ name '3D Lower Cut-off'
+ value '200Hz'
+ }
+ control.41 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name '3D Volume'
+ value 0
+ }
+ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name '3D Switch'
+ value false
+ }
+ control.43 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Capture 6dB Attenuate'
+ value false
+ }
+ control.44 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback 6dB Attenuate'
+ value false
+ }
+ control.45 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 None
+ comment.item.1 '32kHz'
+ comment.item.2 '44.1kHz'
+ comment.item.3 '48kHz'
+ iface MIXER
+ name De-emphasis
+ value None
+ }
+ control.46 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 Mono
+ iface MIXER
+ name 'Playback Mono Mix'
+ value Stereo
+ }
+ control.47 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Non Inverted'
+ comment.item.1 Inverted
+ iface MIXER
+ name 'Playback Phase'
+ value 'Non Inverted'
+ }
+ control.48 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic2 Capture Volume'
+ value 0
+ }
+ control.49 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 3'
+ iface MIXER
+ name 'Mic1 Capture Volume'
+ value 0
+ }
+ control.50 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'DAI 0'
+ comment.item.1 'DAI 1'
+ comment.item.2 'DAI 2'
+ comment.item.3 'DAI 3'
+ iface MIXER
+ name 'DAI Mode'
+ value 'DAI 0'
+ }
+ control.51 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Left ADC'
+ comment.item.2 'Right ADC'
+ comment.item.3 'Channel Swap'
+ iface MIXER
+ name 'ADC Data Select'
+ value Stereo
+ }
+ control.52 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Mic 1'
+ comment.item.1 'Mic 2'
+ comment.item.2 'Mic 3'
+ iface MIXER
+ name 'Mic Selection Mux'
+ value 'Mic 1'
+ }
+ control.53 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'RXP - RXN'
+ comment.item.1 'RXP + RXN'
+ comment.item.2 RXP
+ comment.item.3 RXN
+ iface MIXER
+ name 'Rx Mixer'
+ value 'RXP - RXN'
+ }
+ control.54 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1 + 2'
+ comment.item.1 'Line 1 - 2'
+ comment.item.2 'Line 1'
+ comment.item.3 'Line 2'
+ iface MIXER
+ name 'Line Mixer'
+ value 'Line 1 + 2'
+ }
+ control.55 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line Mix'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Mono Mux'
+ value 'Line Mix'
+ }
+ control.56 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 2'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Right Mux'
+ value 'Line 2'
+ }
+ control.57 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Line 1'
+ comment.item.1 'Rx Mix'
+ iface MIXER
+ name 'Line Left Mux'
+ value 'Line 1'
+ }
+ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Line Capture Switch'
+ value false
+ }
+ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic2 Capture Switch'
+ value false
+ }
+ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Mic1 Capture Switch'
+ value false
+ }
+ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'ALC Mixer Rx Capture Switch'
+ value false
+ }
+ control.62 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Left PGA'
+ comment.item.1 'Mic 1'
+ comment.item.2 'Mic 2'
+ comment.item.3 'Right PGA'
+ iface MIXER
+ name 'Mic Sidetone Mux'
+ value 'Left PGA'
+ }
+ control.63 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Sidetone
+ iface MIXER
+ name 'Capture Right Mux'
+ value PGA
+ }
+ control.64 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 PGA
+ comment.item.1 'Line or RXP-RXN'
+ comment.item.2 Line
+ iface MIXER
+ name 'Capture Left Mux'
+ value PGA
+ }
+ control.65 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Right Mixer'
+ value Stereo
+ }
+ control.66 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 Stereo
+ comment.item.1 'Analogue Mix Left'
+ comment.item.2 'Analogue Mix Right'
+ comment.item.3 'Digital Mono Mix'
+ iface MIXER
+ name 'Capture Left Mixer'
+ value Stereo
+ }
+ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Voice Capture Sw'
+ value false
+ }
+ control.68 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Left Capture Swi'
+ value false
+ }
+ control.69 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Playback Mixer Right Capture Sw'
+ value false
+ }
+ control.70 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 'Capture ST'
+ comment.item.2 LOUT2
+ iface MIXER
+ name 'Out4 Mux'
+ value VREF
+ }
+ control.71 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 VREF
+ comment.item.1 ROUT2
+ comment.item.2 'Left + Right'
+ iface MIXER
+ name 'Out3 Mux'
+ value VREF
+ }
+ control.72 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+ comment.item.0 'Inverted Mono 1'
+ comment.item.1 Left
+ comment.item.2 Right
+ comment.item.3 'Left + Right'
+ iface MIXER
+ name 'Mono 2 Mux'
+ value 'Inverted Mono 1'
+ }
+ control.73 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Left Playback Switch'
+ value false
+ }
+ control.74 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Right Playback Switc'
+ value false
+ }
+ control.75 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Voice Playback Switc'
+ value false
+ }
+ control.76 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.77 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Mono Mixer Bypass Playback Swit'
+ value false
+ }
+ control.78 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Voice Playback Swit'
+ value false
+ }
+ control.79 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Sidetone Playback S'
+ value false
+ }
+ control.80 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Right Playback Swit'
+ value true
+ }
+ control.81 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Right Mixer Bypass Playback Swi'
+ value false
+ }
+ control.82 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Voice Playback Switc'
+ value false
+ }
+ control.83 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Sidetone Playback Sw'
+ value false
+ }
+ control.84 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Left Playback Switch'
+ value true
+ }
+ control.85 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Left Mixer Bypass Playback Swit'
+ value false
+ }
+ control.86 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM Stereo Out Switch'
+ value true
+ }
+ control.87 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM GSM Line Out Switch'
+ value false
+ }
+ control.88 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM GSM Line In Switch'
+ value false
+ }
+ control.89 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM Headset Mic Switch'
+ value false
+ }
+ control.90 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM Handset Mic Switch'
+ value false
+ }
+ control.91 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'DAPM Handset Spk Switch'
+ value false
+ }
+ control.92 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp State Switch'
+ value true
+ }
+ control.93 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Amp Spk Switch'
+ value true
+ }
+}
diff --git a/packages/altboot/altboot.inc b/packages/altboot/altboot.inc
index 9e0b3e3df9..8a1eae87e8 100644
--- a/packages/altboot/altboot.inc
+++ b/packages/altboot/altboot.inc
@@ -11,7 +11,7 @@ S = "${WORKDIR}/trunk/"
PACKAGE_ARCH_${PN} = "${MACHINE}"
PACKAGE_ARCH_${PN}-doc = "all"
PACKAGE_ARCH_${PN}-conf = "${MACHINE}"
-PACKAGES = "${PN}-conf ${PN}-doc ${PN}"
+PACKAGES = "${PN}-dbg ${PN}-conf ${PN}-doc ${PN}"
FILES_${PN}-conf = "/etc/altboot*cfg"
diff --git a/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb b/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb
index 4611d345e2..3128e794b9 100644
--- a/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb
+++ b/packages/altboot/altboot_1.0.8+1.0.9_pre1.bb
@@ -71,6 +71,6 @@ do_rm_work() {
PACKAGE_ARCH_${PN} = "all"
PACKAGE_ARCH_${PN}-doc = "all"
PACKAGE_ARCH_${PN}-conf = "${MACHINE}"
-PACKAGES = "${PN}-conf ${PN}-doc ${PN}"
+PACKAGES = "${PN}-dbg ${PN}-conf ${PN}-doc ${PN}"
FILES_${PN}-conf = "/etc/altboot*.cfg"
diff --git a/packages/altboot/altboot_1.1.1+wip-SVNR69.bb b/packages/altboot/altboot_1.1.1+wip-SVNR69.bb
deleted file mode 100644
index b9ee96d048..0000000000
--- a/packages/altboot/altboot_1.1.1+wip-SVNR69.bb
+++ /dev/null
@@ -1,76 +0,0 @@
-require altboot.inc
-
-PR = "r0"
-
-SVN_REV = "69"
-SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV} \
- "
-
-do_install() {
- install -d ${D}/sbin
- install -d ${D}/etc/altboot-menu
- install -d ${D}/etc/altboot.rc
- install -d ${D}/usr/share/doc/altboot
- install -d ${D}/usr/share/sounds
-
- if test -d ${S}/${MACHINE_DIR}
- then
- install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/
- else
- install -m 0644 ${S}/altboot*.cfg ${D}/etc/
- fi
-
- install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds
- install -m 0644 ${S}/altboot.func ${D}/etc
- install -m 0644 ${S}/altboot.sbin ${D}/etc
- install -m 0644 ${S}/altbootctl.conf ${D}/etc
- install -m 0755 ${S}/init.altboot ${D}/sbin
- install -m 0755 ${S}/altbootctl ${D}/sbin
-
- ln -s /sbin/init.altboot ${D}/sbin/altboot
-
- if test -d ${S}/${MACHINE_DIR}/altboot-menu
- then
- install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu
-
- if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced
- then
- install -d ${D}/etc/altboot-menu/Advanced
- install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
- fi
- else
- install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu
-
- if test -d ${S}/altboot-menu/Advanced
- then
- install -d ${D}/etc/altboot-menu/Advanced
- install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
- fi
- fi
-
- if test -d ${S}/${MACHINE_DIR}/altboot.rc
- then
- install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc
- else
- install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc
- install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc
- fi
-}
-
-do_configure() {
- cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_
- mv ${S}/init.altboot_ ${S}/init.altboot
-}
-
-pkg_postinst_${PN}() {
- test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55
-
- update-alternatives --install /sbin/init init /sbin/init.altboot 55
-}
-
-pkg_postrm_${PN}() {
- test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot
-
- update-alternatives --remove init /sbin/init.altboot
-}
diff --git a/packages/altboot/altboot_1.1.1+wip-SVNR78.bb b/packages/altboot/altboot_1.1.1+wip-SVNR78.bb
new file mode 100644
index 0000000000..b74bc7baa4
--- /dev/null
+++ b/packages/altboot/altboot_1.1.1+wip-SVNR78.bb
@@ -0,0 +1,76 @@
+require altboot.inc
+
+PR = "r0"
+
+SVN_REV = "78"
+SRC_URI = "svn://hentges.net/public/altboot;module=trunk;rev=${SVN_REV} \
+ "
+
+do_install() {
+ install -d ${D}/sbin
+ install -d ${D}/etc/altboot-menu
+ install -d ${D}/etc/altboot.rc
+ install -d ${D}/usr/share/doc/altboot
+ install -d ${D}/usr/share/sounds
+
+ if test -d ${S}/${MACHINE_DIR}
+ then
+ install -m 0644 ${S}/${MACHINE_DIR}/altboot*.cfg ${D}/etc/
+ else
+ install -m 0644 ${S}/altboot*.cfg ${D}/etc/
+ fi
+
+ install -m 0644 ${S}/beep.raw ${D}/usr/share/sounds
+ install -m 0644 ${S}/altboot.func ${D}/etc
+ install -m 0644 ${S}/altboot.sbin ${D}/etc
+ install -m 0644 ${S}/altbootctl.conf ${D}/etc
+ install -m 0755 ${S}/init.altboot ${D}/sbin
+ install -m 0755 ${S}/altbootctl ${D}/sbin
+
+ ln -s /sbin/init.altboot ${D}/sbin/altboot
+
+ if test -d ${S}/${MACHINE_DIR}/altboot-menu
+ then
+ install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/*-* ${D}/etc/altboot-menu
+
+ if test -d ${S}/${MACHINE_DIR}/altboot-menu/Advanced
+ then
+ install -d ${D}/etc/altboot-menu/Advanced
+ install -m 0755 ${S}/${MACHINE_DIR}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
+ fi
+ else
+ install -m 0755 ${S}/altboot-menu/*-* ${D}/etc/altboot-menu
+
+ if test -d ${S}/altboot-menu/Advanced
+ then
+ install -d ${D}/etc/altboot-menu/Advanced
+ install -m 0755 ${S}/altboot-menu/Advanced/*-* ${D}/etc/altboot-menu/Advanced
+ fi
+ fi
+
+ if test -d ${S}/${MACHINE_DIR}/altboot.rc
+ then
+ install -m 0755 ${S}/${MACHINE_DIR}/altboot.rc/*.sh ${D}/etc/altboot.rc
+ install -m 0644 ${S}/${MACHINE_DIR}/altboot.rc/*.txt ${D}/etc/altboot.rc
+ else
+ install -m 0755 ${S}/altboot.rc/*.sh ${D}/etc/altboot.rc
+ install -m 0644 ${S}/altboot.rc/*.txt ${D}/etc/altboot.rc
+ fi
+}
+
+do_configure() {
+ cat ${S}/init.altboot | sed "s/^VERSION=.*/VERSION=\"${PV}-${PR}\"/" > ${S}/init.altboot_
+ mv ${S}/init.altboot_ ${S}/init.altboot
+}
+
+pkg_postinst_${PN}() {
+ test -L /linuxrc && update-alternatives --install /linuxrc linuxrc /sbin/init.altboot 55
+
+ update-alternatives --install /sbin/init init /sbin/init.altboot 55
+}
+
+pkg_postrm_${PN}() {
+ test -L /linuxrc && update_alternatives --remove linuxrc /sbin/init.altboot
+
+ update-alternatives --remove init /sbin/init.altboot
+}
diff --git a/packages/angstrom/angstrom-feed-configs.bb b/packages/angstrom/angstrom-feed-configs.bb
index 9d94747179..1415080fbd 100644
--- a/packages/angstrom/angstrom-feed-configs.bb
+++ b/packages/angstrom/angstrom-feed-configs.bb
@@ -1,11 +1,13 @@
DESCRIPTION = "Configuration files for online package repositories aka feeds"
#PV = "${DISTRO_VERSION}"
-PR = "r2"
+PR = "r3"
PACKAGE_ARCH = "${MACHINE_ARCH}"
FEED_BASEPATH ?= "unstable/feed/"
+IWMMXT_FEED = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', 'iwmmxt', '',d)}"
+
do_compile() {
mkdir -p ${S}/${sysconfdir}/ipkg
for feed in base debug perl python gstreamer ; do
@@ -14,6 +16,11 @@ do_compile() {
echo "src/gz ${MACHINE_ARCH} ${ANGSTROM_URI}/${FEED_BASEPATH}${FEED_ARCH}/machine/${MACHINE_ARCH}" > ${S}/${sysconfdir}/ipkg/${MACHINE_ARCH}-feed.conf
echo "src/gz no-arch ${ANGSTROM_URI}/${FEED_BASEPATH}/all" > ${S}/${sysconfdir}/ipkg/noarch-feed.conf
+
+ # iwmmxt is a special case, add the iwmmxt feed for machine that have 'iwmmxt' in MACHINE_FEATURES
+ if [ "${IWMMXT_FEED}" = "iwmmxt" ] ; then
+ echo "src/gz iwmmxt ${ANGSTROM_URI}/${FEED_BASEPATH}iwmmxt/base" > ${S}/${sysconfdir}/ipkg/iwmmxt-feed.conf
+ fi
}
diff --git a/packages/angstrom/angstrom-gpe-task-base.bb b/packages/angstrom/angstrom-gpe-task-base.bb
index cc3d08972f..036f1af75a 100644
--- a/packages/angstrom/angstrom-gpe-task-base.bb
+++ b/packages/angstrom/angstrom-gpe-task-base.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Task packages for the Angstrom distribution"
-PR = "r33"
+PR = "r34"
inherit task
@@ -8,6 +8,7 @@ PACKAGE_ARCH = "${MACHINE_ARCH}"
RDEPENDS_${PN} = "\
matchbox \
matchbox-panel-hacks \
+ matchbox-applet-startup-monitor \
xcursor-transparent-theme \
rxvt-unicode \
gpe-terminal \
diff --git a/packages/apache/apache_2.0.54.bb b/packages/apache/apache_2.0.54.bb
index 2522658d32..c1f1303d56 100644
--- a/packages/apache/apache_2.0.54.bb
+++ b/packages/apache/apache_2.0.54.bb
@@ -26,7 +26,7 @@ CONFFILES_${PN} = "${sysconfdir}/apache/httpd.conf \
${datadir}/apache/htdocs/apache_pb.gif \
"
-PACKAGES = "libaprutil libapr apache-dev apache-doc apache"
+PACKAGES = "${PN}-dbg libaprutil libapr apache-dev apache-doc apache"
FILES_libapr = "${libdir}/libapr*.so.0* ${libdir}/apr.exp"
FILES_libaprutil = "${libdir}/libaprutil*.so.0* ${libdir}/aprutil.exp"
diff --git a/packages/apache2/apache2-native_2.2.3.bb b/packages/apache2/apache2-native_2.2.3.bb
index b58aa41756..d5fb0cff21 100644
--- a/packages/apache2/apache2-native_2.2.3.bb
+++ b/packages/apache2/apache2-native_2.2.3.bb
@@ -1,9 +1,9 @@
SECTION = "net"
DEPENDS = "expat pcre"
-inherit native
+inherit cross
-PR="r5"
+PR="r6"
SRC_URI = "http://www.apache.org/dist/httpd/httpd-${PV}.tar.bz2"
S = "${WORKDIR}/httpd-${PV}"
diff --git a/packages/apex/apex-env_1.5.13.bb b/packages/apex/apex-env_1.5.13.bb
new file mode 100644
index 0000000000..aad0b12af9
--- /dev/null
+++ b/packages/apex/apex-env_1.5.13.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "APEX Boot Loader Environment User Modification Tool"
+SECTION = "util"
+PRIORITY = "optional"
+HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
+ file://find-apex-partition.patch;patch=1 \
+ "
+S = ${WORKDIR}/apex-${PV}/usr
+
+EXTRA_OEMAKE_append = " CROSS_COMPILE=${CROSS_DIR}/bin/${HOST_PREFIX}"
+
+oe_runmake() {
+ oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@"
+ make ${PARALLEL_MAKE} LDFLAGS= CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@" || die "oe_runmake failed"
+}
+
+do_install() {
+ ${STRIP} ${S}/apex-env
+ install -d ${D}/${sbindir}
+ install -m 755 ${S}/apex-env ${D}/${sbindir}
+}
diff --git a/packages/apex/apex-env_1.5.8.bb b/packages/apex/apex-env_1.5.8.bb
index 0f310f107e..a0e44346bb 100644
--- a/packages/apex/apex-env_1.5.8.bb
+++ b/packages/apex/apex-env_1.5.8.bb
@@ -3,9 +3,11 @@ SECTION = "util"
PRIORITY = "optional"
HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
LICENSE = "GPL"
-# PR = "r1"
+PR = "r1"
-SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz"
+SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
+ file://find-apex-partition.patch;patch=1 \
+ "
S = ${WORKDIR}/apex-${PV}/usr
EXTRA_OEMAKE_append = " CROSS_COMPILE=${CROSS_DIR}/bin/${HOST_PREFIX}"
diff --git a/packages/bluez/files/ghi270/.mtn2git_empty b/packages/apex/apex-nslu2-1.5.13/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/bluez/files/ghi270/.mtn2git_empty
+++ b/packages/apex/apex-nslu2-1.5.13/.mtn2git_empty
diff --git a/packages/apex/apex-nslu2-1.5.13/defconfig b/packages/apex/apex-nslu2-1.5.13/defconfig
new file mode 100644
index 0000000000..264f8539fc
--- /dev/null
+++ b/packages/apex/apex-nslu2-1.5.13/defconfig
@@ -0,0 +1,165 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version:
+# Mon Dec 24 14:54:47 2007
+#
+CONFIG_ARM=y
+CONFIG_CPU_ARMV5=y
+CONFIG_CPU_XSCALE=y
+# CONFIG_ARCH_LH7952X is not set
+# CONFIG_ARCH_LH7A40X is not set
+CONFIG_ARCH_IXP42X=y
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_MX3 is not set
+CONFIG_EXPERIMENTAL=y
+# CONFIG_SMALL is not set
+
+#
+# General Setup
+#
+CONFIG_TARGET_DESCRIPTION="SlugOS NSLU2 (bigendian)"
+CONFIG_CROSS_COMPILE=""
+CONFIG_AEABI=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_CC_OPTIMIZE_FOR_SPEED is not set
+# CONFIG_CC_NO_OPTIMIZATION is not set
+CONFIG_STARTUP_UART=y
+# CONFIG_DEBUG_LL is not set
+CONFIG_SPINNER=y
+CONFIG_ATAG=y
+CONFIG_MMU=y
+# CONFIG_FORCE_WRITETHROUGH_DCACHE is not set
+CONFIG_DISABLE_MMU_AT_BOOT=y
+# CONFIG_INTERRUPTS is not set
+CONFIG_SDRAMBOOT_REPORT=y
+CONFIG_STACK_SIZE=0x1000
+CONFIG_STACKLIMIT=y
+# CONFIG_BOOTSTRAP_MEMTEST is not set
+CONFIG_ATAG_PHYS=0x00000100
+CONFIG_ARCH_NUMBER=597
+CONFIG_APEX_VMA=0x00200000
+CONFIG_KERNEL_LMA=0x00008000
+# CONFIG_USE_RAMDISK is not set
+CONFIG_SDRAM_BANK0=y
+# CONFIG_SDRAM_BANK1 is not set
+CONFIG_NOR_BUSWIDTH=16
+CONFIG_NOR_BANK0=y
+CONFIG_NOR_BANK0_START=0x50000000
+CONFIG_NOR_BANK0_LENGTH=0x00800000
+CONFIG_MACH="ixp42x"
+CONFIG_MACH_NSLU2=y
+# CONFIG_MACH_NAS100D is not set
+# CONFIG_MACH_DSMG600 is not set
+# CONFIG_MACH_FSG3 is not set
+# CONFIG_MACH_AVILA2347 is not set
+# CONFIG_USER_DEFAULTENDIAN is not set
+# CONFIG_USER_BIGENDIAN is not set
+# CONFIG_USER_LITTLEENDIAN is not set
+
+#
+# Platform Setup
+#
+CONFIG_SDRAM_BANK_LENGTH=0x02000000
+# CONFIG_DISABLE_SECOND_UART_INIT is not set
+CONFIG_ARCH_IXP420=y
+
+#
+# Commands
+#
+CONFIG_ALLHELP=y
+CONFIG_ALPHABETIZE_COMMANDS=y
+CONFIG_DEL_IS_BS=y
+CONFIG_ANSI_KEYS=y
+CONFIG_COMMAND_HISTORY=y
+CONFIG_COMMAND_EDITING=y
+# CONFIG_TIME_COMMANDS is not set
+CONFIG_CMD_ALIAS=y
+CONFIG_CMD_CHECKSUM=y
+CONFIG_CMD_COPY=y
+CONFIG_CMD_COMPARE=y
+CONFIG_CMD_DRVINFO=y
+CONFIG_CMD_DUMP=y
+CONFIG_CMD_ENV=y
+CONFIG_CMD_SETENV=y
+CONFIG_CMD_ERASE=y
+CONFIG_CMD_FILL=y
+CONFIG_CMD_GO=y
+CONFIG_CMD_INFO=y
+# CONFIG_CMD_PAUSE is not set
+CONFIG_CMD_WAIT=y
+CONFIG_CMD_XRECEIVE=y
+CONFIG_CMD_MEMLIMIT=y
+CONFIG_CMD_MEMSCAN=y
+CONFIG_CMD_MEMTEST=y
+
+#
+# Generic Drivers
+#
+# CONFIG_DRIVER_FAT is not set
+# CONFIG_DRIVER_EXT2 is not set
+# CONFIG_DRIVER_JFFS2 is not set
+CONFIG_DRIVER_FIS=y
+CONFIG_DRIVER_FIS_BLOCKDEVICE="nor:0x7e0000+4k"
+CONFIG_DRIVER_NOR_CFI=y
+# CONFIG_DRIVER_NOR_CFI_NO_BUFFERED is not set
+# CONFIG_DRIVER_NOR_CFI_USE_CACHE is not set
+CONFIG_DRIVER_NOR_CFI_TYPE_INTEL=y
+# CONFIG_DRIVER_NOR_CFI_TYPE_SPANSION is not set
+# CONFIG_DRIVER_ONENAND is not set
+# CONFIG_DRIVER_IXP4XX_NPE_ETH is not set
+CONFIG_USES_NOR_CFI=y
+CONFIG_USES_PATHNAME_PARSER=y
+CONFIG_USES_IXP4XX_NPE_ETH=y
+
+#
+# Environment
+#
+CONFIG_ENV=y
+CONFIG_ENV_LINK=y
+CONFIG_ENV_MUTABLE=y
+CONFIG_ENV_REGION="nor:0x7c000+15k"
+# CONFIG_ENV_SAVEATONCE is not set
+CONFIG_ENV_CHECK_LEN=1024
+CONFIG_VARIATIONS=y
+CONFIG_VARIATION_SUFFIX="-alt"
+# CONFIG_NO_BOOTSTRAP is not set
+CONFIG_NOR_BOOT=y
+# CONFIG_NAND_BOOT is not set
+# CONFIG_ONENAND_BOOT is not set
+# CONFIG_COMPANION_EVT1_BOOT is not set
+# CONFIG_COMPANION_EVT2_BOOT is not set
+
+#
+# Default Startup
+#
+CONFIG_AUTOBOOT=y
+CONFIG_AUTOBOOT_DELAY=10
+CONFIG_ENV_STARTUP_KERNEL_COPY=y
+# CONFIG_ENV_REGION_KERNEL_SWAP is not set
+CONFIG_ENV_STARTUP_PREFIX_P=y
+CONFIG_ENV_STARTUP_PREFIX="sdram-init; memscan -u 0+256m"
+
+#
+# Regions
+#
+CONFIG_ENV_REGION_KERNEL="fis://kernel"
+CONFIG_ENV_REGION_KERNEL_ALT_P=y
+CONFIG_ENV_REGION_KERNEL_ALT="fis://kernel"
+
+#
+# Overrides
+#
+CONFIG_ENV_DEFAULT_CMDLINE_OVERRIDE=y
+CONFIG_ENV_DEFAULT_CMDLINE="root=/dev/mtdblock4 rootfstype=jffs2 console=ttyS0,115200"
+CONFIG_ENV_DEFAULT_CMDLINE_ALT_P=y
+CONFIG_ENV_DEFAULT_CMDLINE_ALT="root=/dev/mtdblock4 rootfstype=jffs2 console=ttyS0,115200"
+# CONFIG_ENV_DEFAULT_STARTUP_OVERRIDE is not set
+# CONFIG_ENV_DEFAULT_STARTUP_ALT_P is not set
+CONFIG_USES_NOR_BOOTFLASH=y
+CONFIG_RELOCATE_SIMPLE=y
+CONFIG_INLINE_PLATFORM_INITIALIZATION=y
+CONFIG_INLINE_PLATFORM_INITIALIZATION_SDRAM_PRE_OVERRIDE=y
+# CONFIG_BIGENDIAN is not set
+# CONFIG_LITTLEENDIAN is not set
+CONFIG_CLEAR_STACKS=y
+CONFIG_ALIASES=y
diff --git a/packages/bluez/files/r1000/.mtn2git_empty b/packages/apex/apex-nslu2-1.5.8/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/bluez/files/r1000/.mtn2git_empty
+++ b/packages/apex/apex-nslu2-1.5.8/.mtn2git_empty
diff --git a/packages/apex/files/defconfig b/packages/apex/apex-nslu2-1.5.8/defconfig
index 3c8522e2e8..3c8522e2e8 100644
--- a/packages/apex/files/defconfig
+++ b/packages/apex/apex-nslu2-1.5.8/defconfig
diff --git a/packages/dbus/dbus-1.0.1/.mtn2git_empty b/packages/apex/apex-nslu2-16mb-1.5.13/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/dbus/dbus-1.0.1/.mtn2git_empty
+++ b/packages/apex/apex-nslu2-16mb-1.5.13/.mtn2git_empty
diff --git a/packages/apex/apex-nslu2-16mb-1.5.13/defconfig b/packages/apex/apex-nslu2-16mb-1.5.13/defconfig
new file mode 100644
index 0000000000..11658813d5
--- /dev/null
+++ b/packages/apex/apex-nslu2-16mb-1.5.13/defconfig
@@ -0,0 +1,165 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version:
+# Mon Dec 24 15:00:01 2007
+#
+CONFIG_ARM=y
+CONFIG_CPU_ARMV5=y
+CONFIG_CPU_XSCALE=y
+# CONFIG_ARCH_LH7952X is not set
+# CONFIG_ARCH_LH7A40X is not set
+CONFIG_ARCH_IXP42X=y
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_MX3 is not set
+CONFIG_EXPERIMENTAL=y
+# CONFIG_SMALL is not set
+
+#
+# General Setup
+#
+CONFIG_TARGET_DESCRIPTION="SlugOS NSLU2/BE (16MiB Flash)"
+CONFIG_CROSS_COMPILE=""
+CONFIG_AEABI=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_CC_OPTIMIZE_FOR_SPEED is not set
+# CONFIG_CC_NO_OPTIMIZATION is not set
+CONFIG_STARTUP_UART=y
+# CONFIG_DEBUG_LL is not set
+CONFIG_SPINNER=y
+CONFIG_ATAG=y
+CONFIG_MMU=y
+# CONFIG_FORCE_WRITETHROUGH_DCACHE is not set
+CONFIG_DISABLE_MMU_AT_BOOT=y
+# CONFIG_INTERRUPTS is not set
+CONFIG_SDRAMBOOT_REPORT=y
+CONFIG_STACK_SIZE=0x1000
+CONFIG_STACKLIMIT=y
+# CONFIG_BOOTSTRAP_MEMTEST is not set
+CONFIG_ATAG_PHYS=0x00000100
+CONFIG_ARCH_NUMBER=597
+CONFIG_APEX_VMA=0x00200000
+CONFIG_KERNEL_LMA=0x00008000
+# CONFIG_USE_RAMDISK is not set
+CONFIG_SDRAM_BANK0=y
+# CONFIG_SDRAM_BANK1 is not set
+CONFIG_NOR_BUSWIDTH=16
+CONFIG_NOR_BANK0=y
+CONFIG_NOR_BANK0_START=0x50000000
+CONFIG_NOR_BANK0_LENGTH=0x01000000
+CONFIG_MACH="ixp42x"
+CONFIG_MACH_NSLU2=y
+# CONFIG_MACH_NAS100D is not set
+# CONFIG_MACH_DSMG600 is not set
+# CONFIG_MACH_FSG3 is not set
+# CONFIG_MACH_AVILA2347 is not set
+# CONFIG_USER_DEFAULTENDIAN is not set
+# CONFIG_USER_BIGENDIAN is not set
+# CONFIG_USER_LITTLEENDIAN is not set
+
+#
+# Platform Setup
+#
+CONFIG_SDRAM_BANK_LENGTH=0x02000000
+# CONFIG_DISABLE_SECOND_UART_INIT is not set
+CONFIG_ARCH_IXP420=y
+
+#
+# Commands
+#
+CONFIG_ALLHELP=y
+CONFIG_ALPHABETIZE_COMMANDS=y
+CONFIG_DEL_IS_BS=y
+CONFIG_ANSI_KEYS=y
+CONFIG_COMMAND_HISTORY=y
+CONFIG_COMMAND_EDITING=y
+# CONFIG_TIME_COMMANDS is not set
+CONFIG_CMD_ALIAS=y
+CONFIG_CMD_CHECKSUM=y
+CONFIG_CMD_COPY=y
+CONFIG_CMD_COMPARE=y
+CONFIG_CMD_DRVINFO=y
+CONFIG_CMD_DUMP=y
+CONFIG_CMD_ENV=y
+CONFIG_CMD_SETENV=y
+CONFIG_CMD_ERASE=y
+CONFIG_CMD_FILL=y
+CONFIG_CMD_GO=y
+CONFIG_CMD_INFO=y
+# CONFIG_CMD_PAUSE is not set
+CONFIG_CMD_WAIT=y
+CONFIG_CMD_XRECEIVE=y
+CONFIG_CMD_MEMLIMIT=y
+CONFIG_CMD_MEMSCAN=y
+CONFIG_CMD_MEMTEST=y
+
+#
+# Generic Drivers
+#
+# CONFIG_DRIVER_FAT is not set
+# CONFIG_DRIVER_EXT2 is not set
+# CONFIG_DRIVER_JFFS2 is not set
+CONFIG_DRIVER_FIS=y
+CONFIG_DRIVER_FIS_BLOCKDEVICE="nor:0xfe0000+4k"
+CONFIG_DRIVER_NOR_CFI=y
+# CONFIG_DRIVER_NOR_CFI_NO_BUFFERED is not set
+# CONFIG_DRIVER_NOR_CFI_USE_CACHE is not set
+CONFIG_DRIVER_NOR_CFI_TYPE_INTEL=y
+# CONFIG_DRIVER_NOR_CFI_TYPE_SPANSION is not set
+# CONFIG_DRIVER_ONENAND is not set
+# CONFIG_DRIVER_IXP4XX_NPE_ETH is not set
+CONFIG_USES_NOR_CFI=y
+CONFIG_USES_PATHNAME_PARSER=y
+CONFIG_USES_IXP4XX_NPE_ETH=y
+
+#
+# Environment
+#
+CONFIG_ENV=y
+CONFIG_ENV_LINK=y
+CONFIG_ENV_MUTABLE=y
+CONFIG_ENV_REGION="nor:0x7c000+15k"
+# CONFIG_ENV_SAVEATONCE is not set
+CONFIG_ENV_CHECK_LEN=1024
+CONFIG_VARIATIONS=y
+CONFIG_VARIATION_SUFFIX="-alt"
+# CONFIG_NO_BOOTSTRAP is not set
+CONFIG_NOR_BOOT=y
+# CONFIG_NAND_BOOT is not set
+# CONFIG_ONENAND_BOOT is not set
+# CONFIG_COMPANION_EVT1_BOOT is not set
+# CONFIG_COMPANION_EVT2_BOOT is not set
+
+#
+# Default Startup
+#
+CONFIG_AUTOBOOT=y
+CONFIG_AUTOBOOT_DELAY=10
+CONFIG_ENV_STARTUP_KERNEL_COPY=y
+# CONFIG_ENV_REGION_KERNEL_SWAP is not set
+CONFIG_ENV_STARTUP_PREFIX_P=y
+CONFIG_ENV_STARTUP_PREFIX="sdram-init; memscan -u 0+256m"
+
+#
+# Regions
+#
+CONFIG_ENV_REGION_KERNEL="fis://kernel"
+CONFIG_ENV_REGION_KERNEL_ALT_P=y
+CONFIG_ENV_REGION_KERNEL_ALT="fis://kernel"
+
+#
+# Overrides
+#
+CONFIG_ENV_DEFAULT_CMDLINE_OVERRIDE=y
+CONFIG_ENV_DEFAULT_CMDLINE="root=/dev/mtdblock4 rootfstype=jffs2 console=ttyS0,115200"
+CONFIG_ENV_DEFAULT_CMDLINE_ALT_P=y
+CONFIG_ENV_DEFAULT_CMDLINE_ALT="root=/dev/mtdblock4 rootfstype=jffs2 console=ttyS0,115200"
+# CONFIG_ENV_DEFAULT_STARTUP_OVERRIDE is not set
+# CONFIG_ENV_DEFAULT_STARTUP_ALT_P is not set
+CONFIG_USES_NOR_BOOTFLASH=y
+CONFIG_RELOCATE_SIMPLE=y
+CONFIG_INLINE_PLATFORM_INITIALIZATION=y
+CONFIG_INLINE_PLATFORM_INITIALIZATION_SDRAM_PRE_OVERRIDE=y
+# CONFIG_BIGENDIAN is not set
+# CONFIG_LITTLEENDIAN is not set
+CONFIG_CLEAR_STACKS=y
+CONFIG_ALIASES=y
diff --git a/packages/dbus/dbus-glib-native/.mtn2git_empty b/packages/apex/apex-nslu2-16mb-1.5.8/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/dbus/dbus-glib-native/.mtn2git_empty
+++ b/packages/apex/apex-nslu2-16mb-1.5.8/.mtn2git_empty
diff --git a/packages/apex/files/defconfig-16mb b/packages/apex/apex-nslu2-16mb-1.5.8/defconfig
index c9688e3d75..c9688e3d75 100644
--- a/packages/apex/files/defconfig-16mb
+++ b/packages/apex/apex-nslu2-16mb-1.5.8/defconfig
diff --git a/packages/apex/apex-nslu2-16mb_1.5.13.bb b/packages/apex/apex-nslu2-16mb_1.5.13.bb
new file mode 100644
index 0000000000..2937876c03
--- /dev/null
+++ b/packages/apex/apex-nslu2-16mb_1.5.13.bb
@@ -0,0 +1,63 @@
+DESCRIPTION = "APEX Boot Loader"
+SECTION = ""
+PRIORITY = "optional"
+HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
+LICENSE = "GPL"
+PR = "r2"
+
+SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
+ file://defconfig"
+S = ${WORKDIR}/apex-${PV}
+
+CMDLINE_CONSOLE = "console=${@bb.data.getVar("KERNEL_CONSOLE",d,1) or "ttyS0"}"
+
+CMDLINE_ROOT ?= "root=/dev/mtdblock4 rootfstype=jffs2 rw"
+
+CMDLINE_DEBUG ?= ""
+
+EXTRA_OEMAKE_append = " CROSS_COMPILE=${CROSS_DIR}/bin/${HOST_PREFIX}"
+
+oe_runmake() {
+ oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@"
+ make ${PARALLEL_MAKE} LDFLAGS= CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@" || die "oe_runmake failed"
+}
+
+# Set the correct CONFIG_USER_xxx_ENDIAN and CONFIG_CMDLINE at the head
+# of the .config file and remove any settings in defconfig then append
+# defconfig to .config
+do_configure() {
+ rm -f ${S}/.config
+ . ${CONFIG_SITE}
+ if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
+ sed -e 's/.*CONFIG_USER_BIGENDIAN.*/CONFIG_USER_BIGENDIAN=y/' \
+ -e 's/.*CONFIG_BIGENDIAN.*/CONFIG_BIGENDIAN=y/' \
+ -e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2\/BE (16MiB Flash)\"/' \
+ -e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
+ -e 's|CONFIG_ENV_DEFAULT_CMDLINE_ALT=|CONFIG_ENV_DEFAULT_CMDLINE_ALT=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
+ ${WORKDIR}/defconfig > ${S}/.config
+ elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
+ sed -e 's/.*CONFIG_USER_LITTLEENDIAN.*/CONFIG_USER_LITTLEENDIAN=y/' \
+ -e 's/.*CONFIG_LITTLEENDIAN.*/CONFIG_LITTLEENDIAN=y/' \
+ -e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2\/LE (16MiB Flash)\"/' \
+ -e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
+ -e 's|CONFIG_ENV_DEFAULT_CMDLINE_ALT=|CONFIG_ENV_DEFAULT_CMDLINE_ALT=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
+ ${WORKDIR}/defconfig > ${S}/.config
+ else
+ oefatal do_configure cannot determine endianess
+ fi
+ oe_runmake oldconfig
+}
+
+DEPENDS += "devio-native"
+
+do_populate_staging() {
+ install -d ${STAGING_LOADER_DIR}
+ . ${CONFIG_SITE}
+ if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
+ cp src/arch-arm/rom/apex.bin ${STAGING_LOADER_DIR}/apex-nslu2-16mb.bin
+ elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
+ devio '<<'src/arch-arm/rom/apex.bin >${STAGING_LOADER_DIR}/apex-nslu2-16mb.bin 'xp $,4'
+ else
+ oefatal do_populate_staging cannot determine endianess
+ fi
+}
diff --git a/packages/apex/apex-nslu2-16mb_1.5.8.bb b/packages/apex/apex-nslu2-16mb_1.5.8.bb
index 48b8412088..6289d7c104 100644
--- a/packages/apex/apex-nslu2-16mb_1.5.8.bb
+++ b/packages/apex/apex-nslu2-16mb_1.5.8.bb
@@ -3,10 +3,10 @@ SECTION = ""
PRIORITY = "optional"
HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
LICENSE = "GPL"
-PR = "r2"
+PR = "r3"
SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
- file://defconfig-16mb"
+ file://defconfig"
S = ${WORKDIR}/apex-${PV}
CMDLINE_CONSOLE = "console=${@bb.data.getVar("KERNEL_CONSOLE",d,1) or "ttyS0"}"
@@ -33,13 +33,13 @@ do_configure() {
-e 's/.*CONFIG_BIGENDIAN.*/CONFIG_BIGENDIAN=y/' \
-e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2\/BE (16MiB Flash)\"/' \
-e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
- ${WORKDIR}/defconfig-16mb > ${S}/.config
+ ${WORKDIR}/defconfig > ${S}/.config
elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
sed -e 's/.*CONFIG_USER_LITTLEENDIAN.*/CONFIG_USER_LITTLEENDIAN=y/' \
-e 's/.*CONFIG_LITTLEENDIAN.*/CONFIG_LITTLEENDIAN=y/' \
-e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2\/LE (16MiB Flash)\"/' \
-e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
- ${WORKDIR}/defconfig-16mb > ${S}/.config
+ ${WORKDIR}/defconfig > ${S}/.config
else
oefatal do_configure cannot determine endianess
fi
diff --git a/packages/apex/apex-nslu2_1.5.13.bb b/packages/apex/apex-nslu2_1.5.13.bb
new file mode 100644
index 0000000000..7fc7ea65b6
--- /dev/null
+++ b/packages/apex/apex-nslu2_1.5.13.bb
@@ -0,0 +1,63 @@
+DESCRIPTION = "APEX Boot Loader"
+SECTION = ""
+PRIORITY = "optional"
+HOMEPAGE = "http://wiki.buici.com/twiki/bin/view/Main/ApexBootloader"
+LICENSE = "GPL"
+PR = "r2"
+
+SRC_URI = "ftp://ftp.buici.com/pub/apex/apex-${PV}.tar.gz \
+ file://defconfig"
+S = ${WORKDIR}/apex-${PV}
+
+CMDLINE_CONSOLE = "console=${@bb.data.getVar("KERNEL_CONSOLE",d,1) or "ttyS0"}"
+
+CMDLINE_ROOT ?= "root=/dev/mtdblock4 rootfstype=jffs2 rw"
+
+CMDLINE_DEBUG ?= ""
+
+EXTRA_OEMAKE_append = " CROSS_COMPILE=${CROSS_DIR}/bin/${HOST_PREFIX}"
+
+oe_runmake() {
+ oenote make ${PARALLEL_MAKE} CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@"
+ make ${PARALLEL_MAKE} LDFLAGS= CROSS_COMPILE=${CROSS_DIR}/bin/${TARGET_PREFIX} "$@" || die "oe_runmake failed"
+}
+
+# Set the correct CONFIG_USER_xxx_ENDIAN and CONFIG_CMDLINE at the head
+# of the .config file and remove any settings in defconfig then append
+# defconfig to .config
+do_configure() {
+ rm -f ${S}/.config
+ . ${CONFIG_SITE}
+ if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
+ sed -e 's/.*CONFIG_USER_BIGENDIAN.*/CONFIG_USER_BIGENDIAN=y/' \
+ -e 's/.*CONFIG_BIGENDIAN.*/CONFIG_BIGENDIAN=y/' \
+ -e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2\/BE (8MiB Flash)\"/' \
+ -e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
+ -e 's|CONFIG_ENV_DEFAULT_CMDLINE_ALT=|CONFIG_ENV_DEFAULT_CMDLINE_ALT=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
+ ${WORKDIR}/defconfig > ${S}/.config
+ elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
+ sed -e 's/.*CONFIG_USER_LITTLEENDIAN.*/CONFIG_USER_LITTLEENDIAN=y/' \
+ -e 's/.*CONFIG_LITTLEENDIAN.*/CONFIG_LITTLEENDIAN=y/' \
+ -e 's/.*CONFIG_TARGET_DESCRIPTION.*/CONFIG_TARGET_DESCRIPTION=\"OpenEmbedded NSLU2\/LE (8MiB Flash)\"/' \
+ -e 's|CONFIG_ENV_DEFAULT_CMDLINE=|CONFIG_ENV_DEFAULT_CMDLINE=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
+ -e 's|CONFIG_ENV_DEFAULT_CMDLINE_ALT=|CONFIG_ENV_DEFAULT_CMDLINE_ALT=\"${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_DEBUG}\"|' \
+ ${WORKDIR}/defconfig > ${S}/.config
+ else
+ oefatal do_configure cannot determine endianess
+ fi
+ oe_runmake oldconfig
+}
+
+DEPENDS += "devio-native"
+
+do_populate_staging() {
+ install -d ${STAGING_LOADER_DIR}
+ . ${CONFIG_SITE}
+ if [ "x$ac_cv_c_bigendian" = "xyes" -o "x$ac_cv_c_littleendian" = "xno" ]; then
+ cp src/arch-arm/rom/apex.bin ${STAGING_LOADER_DIR}/apex-nslu2.bin
+ elif [ "x$ac_cv_c_littleendian" = "xyes" -o "x$ac_cv_c_bigendian" = "xno" ]; then
+ devio '<<'src/arch-arm/rom/apex.bin >${STAGING_LOADER_DIR}/apex-nslu2.bin 'xp $,4'
+ else
+ oefatal do_populate_staging cannot determine endianess
+ fi
+}
diff --git a/packages/apex/files/find-apex-partition.patch b/packages/apex/files/find-apex-partition.patch
new file mode 100644
index 0000000000..3aa62a186a
--- /dev/null
+++ b/packages/apex/files/find-apex-partition.patch
@@ -0,0 +1,34 @@
+*** usr/link.cc.orig Sun Dec 23 20:31:49 2007
+--- usr/link.cc Sun Dec 23 20:32:46 2007
+***************
+*** 278,285 ****
+ fixed-up env_link structure, scanning for the environment variables
+ and their defaults, and opening the flash instance of the
+ environment. It first looks for the "Loader" partition. If there
+! is none, it uses the first partition with the assumption that APEX
+! may be the primary boot loader.
+
+ */
+
+--- 278,286 ----
+ fixed-up env_link structure, scanning for the environment variables
+ and their defaults, and opening the flash instance of the
+ environment. It first looks for the "Loader" partition. If there
+! is none, it then looks for the "apex" partition. If there is none,
+! it uses the first partition with the assumption that APEX may be
+! the primary boot loader.
+
+ */
+
+***************
+*** 289,294 ****
+--- 290,298 ----
+ MTDPartition mtd = MTDPartition::find ("Loader");
+
+ if (!mtd.is ())
++ mtd = MTDPartition::find ("apex");
++
++ if (!mtd.is ())
+ mtd = MTDPartition::first ();
+
+ bool fFound = mtd.is () && open_apex (mtd);
diff --git a/packages/apmd/apm-wifi-suspendfix_0.1.bb b/packages/apmd/apm-wifi-suspendfix_0.1.bb
new file mode 100644
index 0000000000..ab9959f3f1
--- /dev/null
+++ b/packages/apmd/apm-wifi-suspendfix_0.1.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Hacky workaround for bug 3664 (some wifi cards don't recover from suspend) until a real fix is found"
+AUTHOR = "Rolf Leggewie"
+PR = "r0"
+
+SRC_URI = "file://90-wifi-off"
+
+do_install() {
+ install -d ${D}${sysconfdir}/apm/suspend.d
+ install -m 0755 ${WORKDIR}/90-wifi-off ${D}${sysconfdir}/apm/suspend.d
+}
diff --git a/packages/apmd/apmd_3.2.2.bb b/packages/apmd/apmd_3.2.2.bb
index c3fce375d3..eede501d5b 100644
--- a/packages/apmd/apmd_3.2.2.bb
+++ b/packages/apmd/apmd_3.2.2.bb
@@ -3,7 +3,7 @@ SECTION = "base"
PRIORITY = "required"
DEPENDS = "libtool-cross"
LICENSE = "GPL"
-PR = "r8"
+PR = "r10"
SRC_URI = "${DEBIAN_MIRROR}/main/a/apmd/apmd_${PV}.orig.tar.gz \
file://debian.patch;patch=1 \
diff --git a/packages/dbus/dbus/.mtn2git_empty b/packages/apmd/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/dbus/dbus/.mtn2git_empty
+++ b/packages/apmd/files/.mtn2git_empty
diff --git a/packages/apmd/files/90-wifi-off b/packages/apmd/files/90-wifi-off
new file mode 100644
index 0000000000..c54936c4be
--- /dev/null
+++ b/packages/apmd/files/90-wifi-off
@@ -0,0 +1,12 @@
+#!/bin/sh
+#Author: Rolf Leggewie
+#
+# turn off wifi cards before suspend so they are fully reloaded upon resume
+
+wifislot = `pccardctl ls|egrep '(hostap|orinoco)'|cut -f 2 -d " "`
+if test $wifislot
+then
+ for slot in $wifislot; do
+ pccardctl eject $wifislot
+ done
+fi
diff --git a/packages/apr/apr-util_1.2.7.bb b/packages/apr/apr-util_1.2.7.bb
index ea81607953..904e41f8a3 100644
--- a/packages/apr/apr-util_1.2.7.bb
+++ b/packages/apr/apr-util_1.2.7.bb
@@ -14,12 +14,19 @@ EXTRA_OECONF = "--with-apr=${STAGING_BINDIR_CROSS} --with-dbm=gdbm \
--without-sqlite3 \
--with-expat=${STAGING_DIR_HOST}${layout_prefix}"
+
inherit autotools lib_package binconfig
+OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'"
+
do_configure() {
+ cp ${STAGING_DATADIR}/apr_rules.mk ${S}/build/rules.mk
oe_runconf
}
do_stage() {
- autotools_stage_all
+ autotools_stage_all
+ sed -i s,/usr/lib/libgdbm.la,-lgdbm,g ${STAGING_LIBDIR}/libaprutil-1.la
+ sed -i s,/usr/lib/libexpat.la,-lexpat,g ${STAGING_LIBDIR}/libaprutil-1.la
+ sed -i s,/usr/lib/libapr-1.la,-lapr-1,g ${STAGING_LIBDIR}/libaprutil-1.la
}
diff --git a/packages/apr/apr_1.2.7.bb b/packages/apr/apr_1.2.7.bb
index 2016ca0126..d0f2916bfa 100644
--- a/packages/apr/apr_1.2.7.bb
+++ b/packages/apr/apr_1.2.7.bb
@@ -9,10 +9,13 @@ SRC_URI = "${APACHE_MIRROR}/apr/${P}.tar.bz2"
inherit autotools lib_package binconfig
+OE_BINCONFIG_EXTRA_MANGLE = " -e 's:location=source:location=installed:'"
+
do_configure() {
oe_runconf
}
do_stage() {
autotools_stage_all
+ cp ${S}/build/apr_rules.mk ${STAGING_DATADIR}
}
diff --git a/packages/asterisk/asterisk-1.4.10/init b/packages/asterisk/asterisk-1.4.10/init
index f26ad38db3..d53a9a1e5e 100644
--- a/packages/asterisk/asterisk-1.4.10/init
+++ b/packages/asterisk/asterisk-1.4.10/init
@@ -1,7 +1,7 @@
#! /bin/sh
#
# This is an init script for openembedded
-# Copy it to /etc/init.d/openpbx and type
+# Copy it to /etc/init.d/callweaver and type
# > update-rc.d asterisk defaults 60
#
asterisk=/usr/sbin/asterisk
diff --git a/packages/asterisk/asterisk-1.4.11/init b/packages/asterisk/asterisk-1.4.11/init
index f26ad38db3..d53a9a1e5e 100644
--- a/packages/asterisk/asterisk-1.4.11/init
+++ b/packages/asterisk/asterisk-1.4.11/init
@@ -1,7 +1,7 @@
#! /bin/sh
#
# This is an init script for openembedded
-# Copy it to /etc/init.d/openpbx and type
+# Copy it to /etc/init.d/callweaver and type
# > update-rc.d asterisk defaults 60
#
asterisk=/usr/sbin/asterisk
diff --git a/packages/efl1/etk-native/.mtn2git_empty b/packages/asterisk/asterisk-1.4.17/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/efl1/etk-native/.mtn2git_empty
+++ b/packages/asterisk/asterisk-1.4.17/.mtn2git_empty
diff --git a/packages/asterisk/asterisk-1.4.17/Makefile.patch b/packages/asterisk/asterisk-1.4.17/Makefile.patch
new file mode 100644
index 0000000000..a6d630949e
--- /dev/null
+++ b/packages/asterisk/asterisk-1.4.17/Makefile.patch
@@ -0,0 +1,20 @@
+--- asterisk-1.4.5/Makefile 2007-05-24 15:05:08.000000000 -0400
++++ asterisk-1.4.5/Makefile.new 2007-06-17 05:36:44.000000000 -0400
+@@ -115,7 +115,7 @@ else
+ ASTSBINDIR=$(sbindir)
+ ASTSPOOLDIR=$(localstatedir)/spool/asterisk
+ ASTLOGDIR=$(localstatedir)/log/asterisk
+- ASTVARRUNDIR=$(localstatedir)/run
++ ASTVARRUNDIR=$(localstatedir)/run/asterisk
+ ASTMANDIR=$(mandir)
+ ifeq ($(OSARCH),FreeBSD)
+ ASTVARLIBDIR=$(prefix)/share/asterisk
+@@ -468,7 +468,7 @@ oldmodcheck:
+ echo " WARNING WARNING WARNING" ;\
+ fi
+
+-install: datafiles bininstall $(SUBDIRS_INSTALL)
++install: datafiles bininstall $(SUBDIRS_INSTALL) samples
+ @if [ -x /usr/sbin/asterisk-post-install ]; then \
+ /usr/sbin/asterisk-post-install $(DESTDIR) . ; \
+ fi
diff --git a/packages/asterisk/asterisk-1.4.17/init b/packages/asterisk/asterisk-1.4.17/init
new file mode 100644
index 0000000000..d53a9a1e5e
--- /dev/null
+++ b/packages/asterisk/asterisk-1.4.17/init
@@ -0,0 +1,77 @@
+#! /bin/sh
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/callweaver and type
+# > update-rc.d asterisk defaults 60
+#
+asterisk=/usr/sbin/asterisk
+pidfile=/var/run/asterisk/asterisk.pid
+asterisk_args="-npqT -U asterisk -G asterisk"
+
+test -x "$asterisk" || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting Asterisk"
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping Asterisk"
+ $asterisk -rx "stop gracefully"
+ sleep 4
+ if [ -f $pidfile ]; then
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ fi
+ echo "."
+ ;;
+ force-stop)
+ echo -n "Stopping Asterisk"
+ $asterisk -rx "stop now"
+ sleep 2
+ if [ -f $pidfile ]; then
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ fi
+ echo "."
+ ;;
+ restart)
+ echo -n "Restarting Asterisk"
+ if [ -f $pidfile ]; then
+ $asterisk -rx "restart gracefully"
+ sleep 2
+ else
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ fi
+ echo "."
+ ;;
+ force-restart)
+ echo -n "Forcibly Restarting Asterisk"
+ if [ -f $pidfile ]; then
+ $asterisk -rx "restart now"
+ sleep 2
+ else
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ fi
+ echo "."
+ ;;
+ reload)
+ echo -n "Reloading Asterisk Configuration"
+ if [ -f $pidfile ]; then
+ $asterisk -rx "reload"
+ else
+ start-stop-daemon --start --quiet --exec $asterisk -- $asterisk_args
+ fi
+ echo "."
+ ;;
+ logger-reload)
+ if [ -f $pidfile ]; then
+ $asterisk -rx "logger reload"
+ fi
+ ;;
+ *)
+ echo "Usage: /etc/init.d/asterisk {start|stop|force-stop|restart|force-restart|reload|logger-reload}"
+ exit 1
+esac
+
+exit 0
+
diff --git a/packages/asterisk/asterisk-1.4.17/logrotate b/packages/asterisk/asterisk-1.4.17/logrotate
new file mode 100644
index 0000000000..dfd25ee55c
--- /dev/null
+++ b/packages/asterisk/asterisk-1.4.17/logrotate
@@ -0,0 +1,12 @@
+/var/log/asterisk/cdr-csv/Master.csv /var/log/asterisk/cdr-custom/Master.csv /var/log/asterisk/queue_log /var/log/asterisk/event_log /var/log/asterisk/messages {
+ daily
+ missingok
+ compress
+ delaycompress
+ rotate 30
+ sharedscripts
+ postrotate
+ /etc/init.d/asterisk logger-reload
+ endscript
+}
+
diff --git a/packages/asterisk/asterisk-1.4.17/sounds.xml.patch b/packages/asterisk/asterisk-1.4.17/sounds.xml.patch
new file mode 100644
index 0000000000..b549fea132
--- /dev/null
+++ b/packages/asterisk/asterisk-1.4.17/sounds.xml.patch
@@ -0,0 +1,18 @@
+--- asterisk-1.4.4/sounds/sounds.xml 2007-05-24 17:00:45.000000000 -0400
++++ asterisk-1.4.4/sounds/sounds.xml.new 2007-05-25 13:23:41.000000000 -0400
+@@ -6,7 +6,6 @@
+ <member name="CORE-SOUNDS-EN-ALAW" displayname="English, a-Law format">
+ </member>
+ <member name="CORE-SOUNDS-EN-GSM" displayname="English, GSM format" >
+- <defaultenabled>yes</defaultenabled>
+ </member>
+ <member name="CORE-SOUNDS-EN-G729" displayname="English, G.729 format">
+ </member>
+@@ -39,7 +38,6 @@
+ </category>
+ <category name="MENUSELECT_MOH" displayname="Music On Hold File Packages" positive_output="yes">
+ <member name="MOH-FREEPLAY-WAV" displayname="FreePlay Music On Hold Files, WAV format" >
+- <defaultenabled>yes</defaultenabled>
+ </member>
+ <member name="MOH-FREEPLAY-ULAW" displayname="FreePlay Music On Hold Files, mu-Law format" >
+ </member>
diff --git a/packages/asterisk/asterisk-1.4.17/volatiles b/packages/asterisk/asterisk-1.4.17/volatiles
new file mode 100644
index 0000000000..c68e786c90
--- /dev/null
+++ b/packages/asterisk/asterisk-1.4.17/volatiles
@@ -0,0 +1,7 @@
+d asterisk asterisk 0775 /var/run/asterisk none
+d asterisk asterisk 0775 /var/lib/asterisk none
+d asterisk asterisk 0775 /var/log/asterisk none
+d asterisk asterisk 0775 /var/log/asterisk/cdr-csv none
+d asterisk asterisk 0775 /var/log/asterisk/cdr-custom none
+d asterisk asterisk 0775 /var/spool/asterisk/outgoing none
+d asterisk asterisk 0775 /var/spool/asterisk/voicemail none
diff --git a/packages/asterisk/asterisk-core-sounds-en-alaw_1.4.7.bb b/packages/asterisk/asterisk-core-sounds-en-alaw_1.4.7.bb
new file mode 100644
index 0000000000..f1b3d12cd7
--- /dev/null
+++ b/packages/asterisk/asterisk-core-sounds-en-alaw_1.4.7.bb
@@ -0,0 +1,46 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-alaw-${PV}.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/sounds
+ #install -m 644 ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate
+ #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/
+ mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits
+ #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/
+ mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme
+ #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/
+ mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters
+ #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/
+ mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic
+ #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/
+ mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence
+ #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/
+ mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/
+}
+
+
diff --git a/packages/asterisk/asterisk-core-sounds-en-g729_1.4.7.bb b/packages/asterisk/asterisk-core-sounds-en-g729_1.4.7.bb
new file mode 100644
index 0000000000..205c8ff067
--- /dev/null
+++ b/packages/asterisk/asterisk-core-sounds-en-g729_1.4.7.bb
@@ -0,0 +1,46 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-g729-${PV}.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/sounds
+ #install -m 644 ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate
+ #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/
+ mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits
+ #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/
+ mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme
+ #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/
+ mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters
+ #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/
+ mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic
+ #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/
+ mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence
+ #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/
+ mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/
+}
+
+
diff --git a/packages/asterisk/asterisk-core-sounds-en-gsm_1.4.7.bb b/packages/asterisk/asterisk-core-sounds-en-gsm_1.4.7.bb
new file mode 100644
index 0000000000..2a46c74f84
--- /dev/null
+++ b/packages/asterisk/asterisk-core-sounds-en-gsm_1.4.7.bb
@@ -0,0 +1,48 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-gsm-${PV}.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/sounds
+ #install -m 644 ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate
+ #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/
+ mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits
+ #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/
+ mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme
+ #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/
+ mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters
+ #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/
+ mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic
+ #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/
+ mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence
+ #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/
+ mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/
+}
+
+
diff --git a/packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.7.bb b/packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.7.bb
new file mode 100644
index 0000000000..c29ae60f99
--- /dev/null
+++ b/packages/asterisk/asterisk-core-sounds-en-ulaw_1.4.7.bb
@@ -0,0 +1,46 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-core-sounds-en-ulaw-${PV}.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/sounds
+ #install -m 644 ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/CREDITS* ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/core-sounds-en.txt ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/dictate
+ #install -m 644 ${WORKDIR}/dictate/* ${D}${localstatedir}/lib/asterisk/sounds/dictate/
+ mv ${WORKDIR}/dictate ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/digits
+ #install -m 644 ${WORKDIR}/digits/* ${D}${localstatedir}/lib/asterisk/sounds/digits/
+ mv ${WORKDIR}/digits ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/followme
+ #install -m 644 ${WORKDIR}/followme/* ${D}${localstatedir}/lib/asterisk/sounds/followme/
+ mv ${WORKDIR}/followme ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/letters
+ #install -m 644 ${WORKDIR}/letters/* ${D}${localstatedir}/lib/asterisk/sounds/letters/
+ mv ${WORKDIR}/letters ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic
+ #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/
+ mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/silence
+ #install -m 644 ${WORKDIR}/silence/* ${D}${localstatedir}/lib/asterisk/sounds/silence/
+ mv ${WORKDIR}/silence ${D}${localstatedir}/lib/asterisk/sounds/
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/
+}
+
+
diff --git a/packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.6.bb b/packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.6.bb
new file mode 100644
index 0000000000..f18d46258f
--- /dev/null
+++ b/packages/asterisk/asterisk-extra-sounds-en-alaw_1.4.6.bb
@@ -0,0 +1,37 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-alaw-${PV}.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/sounds
+ # HACK: moving the files in chunkes (too many of them)
+ rm ${WORKDIR}/conf-thereare.alaw
+ rm ${WORKDIR}/invalid.alaw
+ mv ${WORKDIR}/[a-d]*.alaw ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/[e-l]*.alaw ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha
+ #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/
+ mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic
+ #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/
+ mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx
+ #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/
+ mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/
+}
+
+
diff --git a/packages/asterisk/asterisk-extra-sounds-en-g729_1.4.6.bb b/packages/asterisk/asterisk-extra-sounds-en-g729_1.4.6.bb
new file mode 100644
index 0000000000..48fabbbdc4
--- /dev/null
+++ b/packages/asterisk/asterisk-extra-sounds-en-g729_1.4.6.bb
@@ -0,0 +1,37 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-g729-${PV}.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/sounds
+ # HACK: moving the files in chunks (too many files)
+ rm ${WORKDIR}/conf-thereare.g729
+ rm ${WORKDIR}/invalid.g729
+ mv ${WORKDIR}/[a-d]*.g729 ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/[e-l]*.g729 ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha
+ #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/
+ mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic
+ #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/
+ mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx
+ #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/
+ mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/
+}
+
+
diff --git a/packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.6.bb b/packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.6.bb
new file mode 100644
index 0000000000..da463391b1
--- /dev/null
+++ b/packages/asterisk/asterisk-extra-sounds-en-gsm_1.4.6.bb
@@ -0,0 +1,37 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-gsm-${PV}.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/sounds
+ # HACK: moving the files in chunks (too many files)
+ rm ${WORKDIR}/conf-thereare.gsm
+ rm ${WORKDIR}/invalid.gsm
+ mv ${WORKDIR}/[a-d]*.gsm ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/[e-l]*.gsm ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha
+ #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/
+ mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic
+ #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/
+ mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx
+ #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/
+ mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/
+}
+
+
diff --git a/packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.6.bb b/packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.6.bb
new file mode 100644
index 0000000000..6a6f3f5fba
--- /dev/null
+++ b/packages/asterisk/asterisk-extra-sounds-en-ulaw_1.4.6.bb
@@ -0,0 +1,37 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-extra-sounds-en-ulaw-${PV}.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/sounds
+ # HACK: moving the files in chunkes (too many of them)
+ rm ${WORKDIR}/conf-thereare.ulaw
+ rm ${WORKDIR}/invalid.ulaw
+ mv ${WORKDIR}/[a-d]*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/[e-l]*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/
+ mv ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/
+ #install -m 644 ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/sounds/
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/ha
+ #install -m 644 ${WORKDIR}/ha/* ${D}${localstatedir}/lib/asterisk/sounds/ha/
+ mv ${WORKDIR}/ha ${D}${localstatedir}/lib/asterisk/sounds
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/phonetic
+ #install -m 644 ${WORKDIR}/phonetic/* ${D}${localstatedir}/lib/asterisk/sounds/phonetic/
+ mv ${WORKDIR}/phonetic ${D}${localstatedir}/lib/asterisk/sounds
+
+ #install -d ${D}${localstatedir}/lib/asterisk/sounds/wx
+ #install -m 644 ${WORKDIR}/wx/* ${D}${localstatedir}/lib/asterisk/sounds/wx/
+ mv ${WORKDIR}/wx ${D}${localstatedir}/lib/asterisk/sounds
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/sounds/
+}
+
+
diff --git a/packages/asterisk/asterisk-moh-freeplay-alaw_0.0.0.bb b/packages/asterisk/asterisk-moh-freeplay-alaw_0.0.0.bb
new file mode 100644
index 0000000000..96c662444e
--- /dev/null
+++ b/packages/asterisk/asterisk-moh-freeplay-alaw_0.0.0.bb
@@ -0,0 +1,22 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-moh-freeplay-alaw.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/moh
+ #install -m 644 ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/moh/
+ #install -m 644 ${WORKDIR}/LICENSE-* ${D}${localstatedir}/lib/asterisk/moh/
+ mv ${WORKDIR}/*.alaw ${D}${localstatedir}/lib/asterisk/moh/
+ mv ${WORKDIR}/LICENSE-* ${D}${localstatedir}/lib/asterisk/moh/
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/moh/
+}
+
+
diff --git a/packages/asterisk/asterisk-moh-freeplay-g729_0.0.0.bb b/packages/asterisk/asterisk-moh-freeplay-g729_0.0.0.bb
new file mode 100644
index 0000000000..581e6bf84f
--- /dev/null
+++ b/packages/asterisk/asterisk-moh-freeplay-g729_0.0.0.bb
@@ -0,0 +1,20 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-moh-freeplay-g729.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/moh
+ install -m 644 ${WORKDIR}/*.g729 ${D}${localstatedir}/lib/asterisk/moh/
+ install -m 644 ${WORKDIR}/LICENSE-* ${D}${localstatedir}/lib/asterisk/moh/
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/moh/
+}
+
+
diff --git a/packages/asterisk/asterisk-moh-freeplay-gsm_0.0.0.bb b/packages/asterisk/asterisk-moh-freeplay-gsm_0.0.0.bb
new file mode 100644
index 0000000000..e45c3eec4e
--- /dev/null
+++ b/packages/asterisk/asterisk-moh-freeplay-gsm_0.0.0.bb
@@ -0,0 +1,20 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-moh-freeplay-gsm.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/moh
+ install -m 644 ${WORKDIR}/*.gsm ${D}${localstatedir}/lib/asterisk/moh/
+ install -m 644 ${WORKDIR}/LICENSE-* ${D}${localstatedir}/lib/asterisk/moh/
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/moh/
+}
+
+
diff --git a/packages/asterisk/asterisk-moh-freeplay-ulaw_0.0.0.bb b/packages/asterisk/asterisk-moh-freeplay-ulaw_0.0.0.bb
new file mode 100644
index 0000000000..e0e0293c34
--- /dev/null
+++ b/packages/asterisk/asterisk-moh-freeplay-ulaw_0.0.0.bb
@@ -0,0 +1,22 @@
+DESCRIPTION="The Asterisk open source software PBX"
+HOMEPAGE="http://www.asterisk.org"
+SECTION = "voip"
+LICENSE="GPL"
+#DEPENDS="asterisk"
+#PR = "r1"
+
+SRC_URI="http://downloads.digium.com/pub/telephony/sounds/releases/asterisk-moh-freeplay-ulaw.tar.gz"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/asterisk/moh
+ #install -m 644 ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/moh/
+ #install -m 644 ${WORKDIR}/LICENSE-* ${D}${localstatedir}/lib/asterisk/moh/
+ mv ${WORKDIR}/*.ulaw ${D}${localstatedir}/lib/asterisk/moh/
+ mv ${WORKDIR}/LICENSE-* ${D}${localstatedir}/lib/asterisk/moh/
+}
+
+pkg_postinst_prepend() {
+ chown -R asterisk:asterisk ${localstatedir}/lib/asterisk/moh/
+}
+
+
diff --git a/packages/asterisk/asterisk_1.4.17.bb b/packages/asterisk/asterisk_1.4.17.bb
new file mode 100644
index 0000000000..fb64581364
--- /dev/null
+++ b/packages/asterisk/asterisk_1.4.17.bb
@@ -0,0 +1,171 @@
+# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+DESCRIPTION = "The Asterisk open source software PBX"
+HOMEPAGE = "http://www.asterisk.org"
+SECTION = "voip"
+LICENSE = "GPLv2"
+PRIORITY = "optional"
+SECTION = "console/telephony"
+DEPENDS = "speex readline zlib openssl curl popt gnutls sqlite libogg libvorbis"
+#RRECOMMENDS_${PN} = "logrotate"
+PR = "r0"
+
+
+SRC_URI="http://ftp.digium.com/pub/asterisk/releases/asterisk-${PV}.tar.gz\
+ file://sounds.xml.patch;patch=1\
+ file://Makefile.patch;patch=1\
+ file://logrotate \
+ file://volatiles \
+ file://init"
+
+ARCH_efika="ppc"
+ARCH_dht-walnut="ppc"
+ARCH_magicbox="ppc"
+ARCH_sequoia="ppc"
+
+
+
+
+INITSCRIPT_NAME = "asterisk"
+INITSCRIPT_PARAMS = "defaults 60"
+
+inherit autotools update-rc.d
+
+EXTRA_OECONF = "--with-ssl=${STAGING_DIR}/${TARGET_SYS}\
+ --with-z=${STAGING_DIR}/${TARGET_SYS}\
+ --with-curl=${STAGING_DIR}/${TARGET_SYS}\
+ --with-termcap=${STAGING_DIR}/${TARGET_SYS}\
+ --with-ogg=${STAGING_DIR}/${TARGET_SYS}\
+ --with-vorbis=${STAGING_DIR}/${TARGET_SYS}\
+ --with-sqlite=${STAGING_DIR}/${TARGET_SYS}\
+ --with-popt=${STAGING_DIR}/${TARGET_SYS}\
+ --with-gnutls=${STAGING_DIR}/${TARGET_SYS}\
+ --without-curses\
+ --with-ncurses=${STAGING_DIR}/${TARGET_SYS}\
+ --without-imap\
+ --without-netsnmp\
+ --without-odbc\
+ --without-osptk\
+ --without-nbs\
+ --without-pwlib\
+ --without-radius\
+ --without-tds\
+ --without-postgres\
+ --without-zaptel\
+ "
+
+#export NOISY_BUILD=yes
+
+export ASTCFLAGS = "-fsigned-char -I${STAGING_INCDIR} -DPATH_MAX=4096"
+export ASTLDFLAGS="${LDFLAGS} -lpthread -ldl -lresolv "
+export PROC="${ARCH}"
+
+do_configure_prepend () {
+ sed -i 's:/var:${localstatedir}:' ${WORKDIR}/logrotate
+ sed -i 's:/etc/init.d:${sysconfdir}/init.d:' ${WORKDIR}/logrotate
+ sed -i 's:/var:${localstatedir}:' ${WORKDIR}/volatiles
+}
+
+do_configure () {
+ # Looks like rebuilding configure doesn't work, so we are skipping
+ # that and are just using the shipped one
+ gnu-configize
+ libtoolize --force
+ oe_runconf
+}
+
+
+do_compile() {
+ (
+ #make sure that menuselect gets build using host toolchain
+ unset CC LD CXX CCLD CFLAGS CPPFLAGS LDFLAGS CXXFLAGS
+ cd menuselect
+ ./configure
+ oe_runmake
+ cd ../
+ ) || exit 1
+ oe_runmake
+}
+
+
+
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/asterisk
+ install -c -D -m 644 ${WORKDIR}/logrotate ${D}${sysconfdir}/logrotate.d/asterisk
+ install -c -D -m 644 ${WORKDIR}/volatiles ${D}${sysconfdir}/default/volatiles/asterisk
+}
+
+pkg_postinst_prepend() {
+ grep -q asterisk ${sysconfdir}/group || addgroup --system asterisk
+ grep -q asterisk ${sysconfdir}/passwd || adduser --system --home ${localstatedir}/run/asterisk --no-create-home --disabled-password --ingroup asterisk -s ${base_bindir}/false asterisk
+ chown -R asterisk:asterisk ${libdir}/asterisk ${localstatedir}/lib/asterisk ${localstatedir}/spool/asterisk ${localstatedir}/log/asterisk ${localstatedir}/run/asterisk ${sysconfdir}/asterisk
+}
+
+FILES_${PN} += "${libdir}/asterisk/modules/*"
+FILES_${PN}-dbg += "${libdir}/asterisk/modules/.debug \
+ ${localstatedir}/lib/asterisk/*/.debug"
+
+CONFFILES_${PN} += "${sysconfdir}/asterisk/adsi.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/adtranvofr.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/agents.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/alarmreceiver.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/alsa.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/amd.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/asterisk.adsi"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/asterisk.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr_custom.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr_manager.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr_odbc.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr_pgsql.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/cdr_tds.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/codecs.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/dnsmgr.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/dundi.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/enum.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/extconfig.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/extensions.ael"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/extensions.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/features.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/festival.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/followme.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/func_odbc.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/gtalk.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/h323.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/http.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/iax.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/iaxprov.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/indications.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/jabber.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/logger.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/manager.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/meetme.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/mgcp.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/misdn.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/modules.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/musiconhold.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/muted.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/osp.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/oss.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/phone.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/privacy.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/queues.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/res_odbc.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/res_snmp.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/rpt.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/rtp.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/say.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/sip.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/sip_notify.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/skinny.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/sla.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/smdi.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/telcordia-1.adsi"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/udptl.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/users.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/voicemail.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/vpb.conf"
+CONFFILES_${PN} += "${sysconfdir}/asterisk/zapata.conf"
+CONFFILES_${PN} += "${sysconfdir}/logrotate.d/asterisk"
diff --git a/packages/asterisk/files/init b/packages/asterisk/files/init
index 1ece638c22..e54b2342f1 100644
--- a/packages/asterisk/files/init
+++ b/packages/asterisk/files/init
@@ -1,7 +1,7 @@
#! /bin/sh
#
# This is an init script for openembedded
-# Copy it to /etc/init.d/openpbx and type
+# Copy it to /etc/init.d/callweaver and type
# > update-rc.d asterisk14 defaults 60
#
asterisk=/usr/sbin/asterisk
diff --git a/packages/atftp/atftp_0.7.bb b/packages/atftp/atftp_0.7.bb
index 23bdfaf64b..07040562dd 100644
--- a/packages/atftp/atftp_0.7.bb
+++ b/packages/atftp/atftp_0.7.bb
@@ -3,10 +3,10 @@ SECTION = "network"
PRIORITY = "optional"
HOMEPAGE = "http://packages.debian.org/atftp"
LICENSE = "GPL"
-PR = "r2"
+PR = "r3"
SRC_URI = "${DEBIAN_MIRROR}/main/a/atftp/atftp_${PV}.orig.tar.gz \
- ${DEBIAN_MIRROR}/main/a/atftp/atftp_${PV}-7.diff.gz;patch=1 \
+ ${DEBIAN_MIRROR}/main/a/atftp/atftp_${PV}.dfsg-3.diff.gz;patch=1 \
file://atftpd.init"
S = "${WORKDIR}/atftp-${PV}"
diff --git a/packages/atk/atk-1.2.0/m4.patch b/packages/atk/atk-1.2.0/m4.patch
deleted file mode 100644
index 8f373364e4..0000000000
--- a/packages/atk/atk-1.2.0/m4.patch
+++ /dev/null
@@ -1,2458 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- /dev/null
-+++ atk-1.2.0/m4/codeset.m4
-@@ -0,0 +1,23 @@
-+# codeset.m4 serial AM1 (gettext-0.10.40)
-+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl From Bruno Haible.
-+
-+AC_DEFUN([AM_LANGINFO_CODESET],
-+[
-+ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
-+ [AC_TRY_LINK([#include <langinfo.h>],
-+ [char* cs = nl_langinfo(CODESET);],
-+ am_cv_langinfo_codeset=yes,
-+ am_cv_langinfo_codeset=no)
-+ ])
-+ if test $am_cv_langinfo_codeset = yes; then
-+ AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
-+ [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
-+ fi
-+])
---- /dev/null
-+++ atk-1.2.0/m4/gettext.m4
-@@ -0,0 +1,587 @@
-+# gettext.m4 serial 17 (gettext-0.11.5)
-+dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+dnl
-+dnl This file can can be used in projects which are not available under
-+dnl the GNU General Public License or the GNU Library General Public
-+dnl License but which still want to provide support for the GNU gettext
-+dnl functionality.
-+dnl Please note that the actual code of the GNU gettext library is covered
-+dnl by the GNU Library General Public License, and the rest of the GNU
-+dnl gettext package package is covered by the GNU General Public License.
-+dnl They are *not* in the public domain.
-+
-+dnl Authors:
-+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
-+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2002.
-+
-+dnl Macro to add for using GNU gettext.
-+
-+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
-+dnl default (if it is not specified or empty) is 'no-libtool'.
-+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
-+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
-+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
-+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
-+dnl depending on --{enable,disable}-{shared,static} and on the presence of
-+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
-+dnl $(top_builddir)/intl/libintl.a will be created.
-+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
-+dnl implementations (in libc or libintl) without the ngettext() function
-+dnl will be ignored. If NEEDSYMBOL is specified and is
-+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
-+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
-+dnl INTLDIR is used to find the intl libraries. If empty,
-+dnl the value `$(top_builddir)/intl/' is used.
-+dnl
-+dnl The result of the configuration is one of three cases:
-+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
-+dnl and used.
-+dnl Catalog format: GNU --> install in $(datadir)
-+dnl Catalog extension: .mo after installation, .gmo in source tree
-+dnl 2) GNU gettext has been found in the system's C library.
-+dnl Catalog format: GNU --> install in $(datadir)
-+dnl Catalog extension: .mo after installation, .gmo in source tree
-+dnl 3) No internationalization, always use English msgid.
-+dnl Catalog format: none
-+dnl Catalog extension: none
-+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
-+dnl The use of .gmo is historical (it was needed to avoid overwriting the
-+dnl GNU format catalogs when building on a platform with an X/Open gettext),
-+dnl but we keep it in order not to force irrelevant filename changes on the
-+dnl maintainers.
-+dnl
-+AC_DEFUN([AM_GNU_GETTEXT],
-+[
-+ dnl Argument checking.
-+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
-+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-+])])])])])
-+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
-+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
-+])])])])
-+ define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
-+ define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
-+
-+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
-+ ifelse(gt_included_intl, yes, [
-+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
-+ ])
-+
-+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
-+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-+ AC_REQUIRE([AC_LIB_RPATH])
-+
-+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
-+ dnl Ideally we would do this search only after the
-+ dnl if test "$USE_NLS" = "yes"; then
-+ dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then
-+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
-+ dnl the configure script would need to contain the same shell code
-+ dnl again, outside any 'if'. There are two solutions:
-+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
-+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
-+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
-+ dnl documented, we avoid it.
-+ ifelse(gt_included_intl, yes, , [
-+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
-+ ])
-+
-+ AC_MSG_CHECKING([whether NLS is requested])
-+ dnl Default is enabled NLS
-+ AC_ARG_ENABLE(nls,
-+ [ --disable-nls do not use Native Language Support],
-+ USE_NLS=$enableval, USE_NLS=yes)
-+ AC_MSG_RESULT($USE_NLS)
-+ AC_SUBST(USE_NLS)
-+
-+ ifelse(gt_included_intl, yes, [
-+ BUILD_INCLUDED_LIBINTL=no
-+ USE_INCLUDED_LIBINTL=no
-+ ])
-+ LIBINTL=
-+ LTLIBINTL=
-+ POSUB=
-+
-+ dnl If we use NLS figure out what method
-+ if test "$USE_NLS" = "yes"; then
-+ gt_use_preinstalled_gnugettext=no
-+ ifelse(gt_included_intl, yes, [
-+ AC_MSG_CHECKING([whether included gettext is requested])
-+ AC_ARG_WITH(included-gettext,
-+ [ --with-included-gettext use the GNU gettext library included here],
-+ nls_cv_force_use_gnu_gettext=$withval,
-+ nls_cv_force_use_gnu_gettext=no)
-+ AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
-+
-+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
-+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
-+ ])
-+ dnl User does not insist on using GNU NLS library. Figure out what
-+ dnl to use. If GNU gettext is available we use this. Else we have
-+ dnl to fall back to GNU NLS library.
-+
-+ dnl Add a version number to the cache macros.
-+ define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
-+ define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
-+ define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
-+
-+ AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
-+ [AC_TRY_LINK([#include <libintl.h>
-+]ifelse([$2], [need-formatstring-macros],
-+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-+#endif
-+changequote(,)dnl
-+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-+changequote([,])dnl
-+], [])[extern int _nl_msg_cat_cntr;
-+extern int *_nl_domain_bindings;],
-+ [bindtextdomain ("", "");
-+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
-+ gt_cv_func_gnugettext_libc=yes,
-+ gt_cv_func_gnugettext_libc=no)])
-+
-+ if test "$gt_cv_func_gnugettext_libc" != "yes"; then
-+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
-+ ifelse(gt_included_intl, yes, , [
-+ AM_ICONV_LINK
-+ ])
-+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
-+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
-+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
-+ dnl even if libiconv doesn't exist.
-+ AC_LIB_LINKFLAGS_BODY([intl])
-+ AC_CACHE_CHECK([for GNU gettext in libintl],
-+ gt_cv_func_gnugettext_libintl,
-+ [gt_save_CPPFLAGS="$CPPFLAGS"
-+ CPPFLAGS="$CPPFLAGS $INCINTL"
-+ gt_save_LIBS="$LIBS"
-+ LIBS="$LIBS $LIBINTL"
-+ dnl Now see whether libintl exists and does not depend on libiconv.
-+ AC_TRY_LINK([#include <libintl.h>
-+]ifelse([$2], [need-formatstring-macros],
-+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-+#endif
-+changequote(,)dnl
-+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-+changequote([,])dnl
-+], [])[extern int _nl_msg_cat_cntr;
-+extern
-+#ifdef __cplusplus
-+"C"
-+#endif
-+const char *_nl_expand_alias ();],
-+ [bindtextdomain ("", "");
-+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
-+ gt_cv_func_gnugettext_libintl=yes,
-+ gt_cv_func_gnugettext_libintl=no)
-+ dnl Now see whether libintl exists and depends on libiconv.
-+ if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
-+ LIBS="$LIBS $LIBICONV"
-+ AC_TRY_LINK([#include <libintl.h>
-+]ifelse([$2], [need-formatstring-macros],
-+[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-+#endif
-+changequote(,)dnl
-+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-+changequote([,])dnl
-+], [])[extern int _nl_msg_cat_cntr;
-+extern
-+#ifdef __cplusplus
-+"C"
-+#endif
-+const char *_nl_expand_alias ();],
-+ [bindtextdomain ("", "");
-+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
-+ [LIBINTL="$LIBINTL $LIBICONV"
-+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
-+ gt_cv_func_gnugettext_libintl=yes
-+ ])
-+ fi
-+ CPPFLAGS="$gt_save_CPPFLAGS"
-+ LIBS="$gt_save_LIBS"])
-+ fi
-+
-+ dnl If an already present or preinstalled GNU gettext() is found,
-+ dnl use it. But if this macro is used in GNU gettext, and GNU
-+ dnl gettext is already preinstalled in libintl, we update this
-+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
-+ if test "$gt_cv_func_gnugettext_libc" = "yes" \
-+ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
-+ && test "$PACKAGE" != gettext; }; then
-+ gt_use_preinstalled_gnugettext=yes
-+ else
-+ dnl Reset the values set by searching for libintl.
-+ LIBINTL=
-+ LTLIBINTL=
-+ INCINTL=
-+ fi
-+
-+ ifelse(gt_included_intl, yes, [
-+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
-+ dnl GNU gettext is not found in the C library.
-+ dnl Fall back on included GNU gettext library.
-+ nls_cv_use_gnu_gettext=yes
-+ fi
-+ fi
-+
-+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
-+ dnl Mark actions used to generate GNU NLS library.
-+ INTLOBJS="\$(GETTOBJS)"
-+ BUILD_INCLUDED_LIBINTL=yes
-+ USE_INCLUDED_LIBINTL=yes
-+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
-+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
-+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
-+ fi
-+
-+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
-+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
-+ dnl Mark actions to use GNU gettext tools.
-+ CATOBJEXT=.gmo
-+ fi
-+ ])
-+
-+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
-+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
-+ AC_DEFINE(ENABLE_NLS, 1,
-+ [Define to 1 if translation of program messages to the user's native language
-+ is requested.])
-+ else
-+ USE_NLS=no
-+ fi
-+ fi
-+
-+ if test "$USE_NLS" = "yes"; then
-+
-+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
-+ if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
-+ AC_MSG_CHECKING([how to link with libintl])
-+ AC_MSG_RESULT([$LIBINTL])
-+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
-+ fi
-+
-+ dnl For backward compatibility. Some packages may be using this.
-+ AC_DEFINE(HAVE_GETTEXT, 1,
-+ [Define if the GNU gettext() function is already present or preinstalled.])
-+ AC_DEFINE(HAVE_DCGETTEXT, 1,
-+ [Define if the GNU dcgettext() function is already present or preinstalled.])
-+ fi
-+
-+ dnl We need to process the po/ directory.
-+ POSUB=po
-+ fi
-+
-+ ifelse(gt_included_intl, yes, [
-+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
-+ dnl to 'yes' because some of the testsuite requires it.
-+ if test "$PACKAGE" = gettext; then
-+ BUILD_INCLUDED_LIBINTL=yes
-+ fi
-+
-+ dnl Make all variables we use known to autoconf.
-+ AC_SUBST(BUILD_INCLUDED_LIBINTL)
-+ AC_SUBST(USE_INCLUDED_LIBINTL)
-+ AC_SUBST(CATOBJEXT)
-+ AC_SUBST(INTLOBJS)
-+
-+ dnl For backward compatibility. Some configure.ins may be using this.
-+ nls_cv_header_intl=
-+ nls_cv_header_libgt=
-+
-+ dnl For backward compatibility. Some Makefiles may be using this.
-+ DATADIRNAME=share
-+ AC_SUBST(DATADIRNAME)
-+
-+ dnl For backward compatibility. Some Makefiles may be using this.
-+ INSTOBJEXT=.mo
-+ AC_SUBST(INSTOBJEXT)
-+
-+ dnl For backward compatibility. Some Makefiles may be using this.
-+ GENCAT=gencat
-+ AC_SUBST(GENCAT)
-+
-+ dnl Enable libtool support if the surrounding package wishes it.
-+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
-+ AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
-+ ])
-+
-+ dnl For backward compatibility. Some Makefiles may be using this.
-+ INTLLIBS="$LIBINTL"
-+ AC_SUBST(INTLLIBS)
-+
-+ dnl Make all documented variables known to autoconf.
-+ AC_SUBST(LIBINTL)
-+ AC_SUBST(LTLIBINTL)
-+ AC_SUBST(POSUB)
-+])
-+
-+
-+dnl Checks for all prerequisites of the po subdirectory,
-+dnl except for USE_NLS.
-+AC_DEFUN([AM_PO_SUBDIRS],
-+[
-+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-+ AC_REQUIRE([AC_PROG_INSTALL])dnl
-+ AC_REQUIRE([AM_MKINSTALLDIRS])dnl
-+
-+ dnl Perform the following tests also if --disable-nls has been given,
-+ dnl because they are needed for "make dist" to work.
-+
-+ dnl Search for GNU msgfmt in the PATH.
-+ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
-+ dnl The second test excludes FreeBSD msgfmt.
-+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
-+ [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
-+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
-+ :)
-+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-+
-+ dnl Search for GNU xgettext 0.11 or newer in the PATH.
-+ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
-+ dnl The second test excludes FreeBSD xgettext.
-+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
-+ [$ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 &&
-+ (if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
-+ :)
-+ dnl Remove leftover from FreeBSD xgettext call.
-+ rm -f messages.po
-+
-+ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
-+ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
-+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :)
-+
-+ dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
-+ dnl Test whether we really found GNU msgfmt.
-+ if test "$GMSGFMT" != ":"; then
-+ dnl If it is no GNU msgfmt we define it as : so that the
-+ dnl Makefiles still can work.
-+ if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
-+ (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
-+ : ;
-+ else
-+ GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
-+ AC_MSG_RESULT(
-+ [found $GMSGFMT program is not GNU msgfmt; ignore it])
-+ GMSGFMT=":"
-+ fi
-+ fi
-+
-+ dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
-+ dnl Test whether we really found GNU xgettext.
-+ if test "$XGETTEXT" != ":"; then
-+ dnl If it is no GNU xgettext we define it as : so that the
-+ dnl Makefiles still can work.
-+ if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 &&
-+ (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
-+ : ;
-+ else
-+ AC_MSG_RESULT(
-+ [found xgettext program is not GNU xgettext; ignore it])
-+ XGETTEXT=":"
-+ fi
-+ dnl Remove leftover from FreeBSD xgettext call.
-+ rm -f messages.po
-+ fi
-+
-+ AC_OUTPUT_COMMANDS([
-+ for ac_file in $CONFIG_FILES; do
-+ # Support "outfile[:infile[:infile...]]"
-+ case "$ac_file" in
-+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-+ esac
-+ # PO directories have a Makefile.in generated from Makefile.in.in.
-+ case "$ac_file" in */Makefile.in)
-+ # Adjust a relative srcdir.
-+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
-+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
-+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
-+ # In autoconf-2.13 it is called $ac_given_srcdir.
-+ # In autoconf-2.50 it is called $srcdir.
-+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
-+ case "$ac_given_srcdir" in
-+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
-+ /*) top_srcdir="$ac_given_srcdir" ;;
-+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
-+ esac
-+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
-+ rm -f "$ac_dir/POTFILES"
-+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
-+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
-+ # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
-+ # on $ac_dir but don't depend on user-specified configuration
-+ # parameters.
-+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
-+ # The LINGUAS file contains the set of available languages.
-+ if test -n "$ALL_LINGUAS"; then
-+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
-+ fi
-+ ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
-+ # Hide the ALL_LINGUAS assigment from automake.
-+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
-+ fi
-+ case "$ac_given_srcdir" in
-+ .) srcdirpre= ;;
-+ *) srcdirpre='$(srcdir)/' ;;
-+ esac
-+ POFILES=
-+ GMOFILES=
-+ UPDATEPOFILES=
-+ DUMMYPOFILES=
-+ for lang in $ALL_LINGUAS; do
-+ POFILES="$POFILES $srcdirpre$lang.po"
-+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
-+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
-+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
-+ done
-+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
-+ # environment variable.
-+ INST_LINGUAS=
-+ if test -n "$ALL_LINGUAS"; then
-+ for presentlang in $ALL_LINGUAS; do
-+ useit=no
-+ if test "%UNSET%" != "$LINGUAS"; then
-+ desiredlanguages="$LINGUAS"
-+ else
-+ desiredlanguages="$ALL_LINGUAS"
-+ fi
-+ for desiredlang in $desiredlanguages; do
-+ # Use the presentlang catalog if desiredlang is
-+ # a. equal to presentlang, or
-+ # b. a variant of presentlang (because in this case,
-+ # presentlang can be used as a fallback for messages
-+ # which are not translated in the desiredlang catalog).
-+ case "$desiredlang" in
-+ "$presentlang"*) useit=yes;;
-+ esac
-+ done
-+ if test $useit = yes; then
-+ INST_LINGUAS="$INST_LINGUAS $presentlang"
-+ fi
-+ done
-+ fi
-+ CATALOGS=
-+ if test -n "$INST_LINGUAS"; then
-+ for lang in $INST_LINGUAS; do
-+ CATALOGS="$CATALOGS $lang.gmo"
-+ done
-+ fi
-+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
-+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
-+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
-+ if test -f "$f"; then
-+ case "$f" in
-+ *.orig | *.bak | *~) ;;
-+ *) cat "$f" >> "$ac_dir/Makefile" ;;
-+ esac
-+ fi
-+ done
-+ fi
-+ ;;
-+ esac
-+ done],
-+ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
-+ # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
-+ # from automake.
-+ eval 'ALL_LINGUAS''="$ALL_LINGUAS"'
-+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
-+ LINGUAS="${LINGUAS-%UNSET%}"
-+ ])
-+])
-+
-+
-+dnl Checks for all prerequisites of the intl subdirectory,
-+dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
-+dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
-+AC_DEFUN([AM_INTL_SUBDIR],
-+[
-+ AC_REQUIRE([AC_PROG_INSTALL])dnl
-+ AC_REQUIRE([AM_MKINSTALLDIRS])dnl
-+ AC_REQUIRE([AC_PROG_CC])dnl
-+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
-+ AC_REQUIRE([AC_PROG_RANLIB])dnl
-+ AC_REQUIRE([AC_ISC_POSIX])dnl
-+ AC_REQUIRE([AC_HEADER_STDC])dnl
-+ AC_REQUIRE([AC_C_CONST])dnl
-+ AC_REQUIRE([AC_C_INLINE])dnl
-+ AC_REQUIRE([AC_TYPE_OFF_T])dnl
-+ AC_REQUIRE([AC_TYPE_SIZE_T])dnl
-+ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
-+ AC_REQUIRE([AC_FUNC_MMAP])dnl
-+ AC_REQUIRE([jm_GLIBC21])dnl
-+ AC_REQUIRE([gt_INTDIV0])dnl
-+ AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
-+ AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
-+ AC_REQUIRE([gt_INTTYPES_PRI])dnl
-+
-+ AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
-+stdlib.h string.h unistd.h sys/param.h])
-+ AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \
-+geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \
-+strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
-+
-+ AM_ICONV
-+ AM_LANGINFO_CODESET
-+ if test $ac_cv_header_locale_h = yes; then
-+ AM_LC_MESSAGES
-+ fi
-+
-+ dnl intl/plural.c is generated from intl/plural.y. It requires bison,
-+ dnl because plural.y uses bison specific features. It requires at least
-+ dnl bison-1.26 because earlier versions generate a plural.c that doesn't
-+ dnl compile.
-+ dnl bison is only needed for the maintainer (who touches plural.y). But in
-+ dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
-+ dnl the rule in general Makefile. Now, some people carelessly touch the
-+ dnl files or have a broken "make" program, hence the plural.c rule will
-+ dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
-+ dnl present or too old.
-+ AC_CHECK_PROGS([INTLBISON], [bison])
-+ if test -z "$INTLBISON"; then
-+ ac_verc_fail=yes
-+ else
-+ dnl Found it, now check the version.
-+ AC_MSG_CHECKING([version of bison])
-+changequote(<<,>>)dnl
-+ ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
-+ case $ac_prog_version in
-+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
-+ 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
-+changequote([,])dnl
-+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
-+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
-+ esac
-+ AC_MSG_RESULT([$ac_prog_version])
-+ fi
-+ if test $ac_verc_fail = yes; then
-+ INTLBISON=:
-+ fi
-+])
-+
-+
-+AC_DEFUN([AM_MKINSTALLDIRS],
-+[
-+ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
-+ dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
-+ dnl Try to locate is.
-+ MKINSTALLDIRS=
-+ if test -n "$ac_aux_dir"; then
-+ MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
-+ fi
-+ if test -z "$MKINSTALLDIRS"; then
-+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
-+ fi
-+ AC_SUBST(MKINSTALLDIRS)
-+])
-+
-+
-+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
-+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
---- /dev/null
-+++ atk-1.2.0/m4/glib-2.0.m4
-@@ -0,0 +1,212 @@
-+# Configure paths for GLIB
-+# Owen Taylor 1997-2001
-+
-+dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
-+dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or
-+dnl gthread is specified in MODULES, pass to pkg-config
-+dnl
-+AC_DEFUN(AM_PATH_GLIB_2_0,
-+[dnl
-+dnl Get the cflags and libraries from pkg-config
-+dnl
-+AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program],
-+ , enable_glibtest=yes)
-+
-+ pkg_config_args=glib-2.0
-+ for module in . $4
-+ do
-+ case "$module" in
-+ gmodule)
-+ pkg_config_args="$pkg_config_args gmodule-2.0"
-+ ;;
-+ gobject)
-+ pkg_config_args="$pkg_config_args gobject-2.0"
-+ ;;
-+ gthread)
-+ pkg_config_args="$pkg_config_args gthread-2.0"
-+ ;;
-+ esac
-+ done
-+
-+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-+
-+ no_glib=""
-+
-+ if test x$PKG_CONFIG != xno ; then
-+ if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
-+ :
-+ else
-+ echo *** pkg-config too old; version 0.7 or better required.
-+ no_glib=yes
-+ PKG_CONFIG=no
-+ fi
-+ else
-+ no_glib=yes
-+ fi
-+
-+ min_glib_version=ifelse([$1], ,2.0.0,$1)
-+ AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
-+
-+ if test x$PKG_CONFIG != xno ; then
-+ ## don't try to run the test against uninstalled libtool libs
-+ if $PKG_CONFIG --uninstalled $pkg_config_args; then
-+ echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
-+ enable_glibtest=no
-+ fi
-+
-+ if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
-+ :
-+ else
-+ no_glib=yes
-+ fi
-+ fi
-+
-+ if test x"$no_glib" = x ; then
-+ GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
-+ GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
-+ GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
-+
-+ GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
-+ GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
-+ glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
-+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
-+ glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
-+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
-+ glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
-+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
-+ if test "x$enable_glibtest" = "xyes" ; then
-+ ac_save_CFLAGS="$CFLAGS"
-+ ac_save_LIBS="$LIBS"
-+ CFLAGS="$CFLAGS $GLIB_CFLAGS"
-+ LIBS="$GLIB_LIBS $LIBS"
-+dnl
-+dnl Now check if the installed GLIB is sufficiently new. (Also sanity
-+dnl checks the results of pkg-config to some extent)
-+dnl
-+ rm -f conf.glibtest
-+ AC_TRY_RUN([
-+#include <glib.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+int
-+main ()
-+{
-+ int major, minor, micro;
-+ char *tmp_version;
-+
-+ system ("touch conf.glibtest");
-+
-+ /* HP/UX 9 (%@#!) writes to sscanf strings */
-+ tmp_version = g_strdup("$min_glib_version");
-+ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
-+ printf("%s, bad version string\n", "$min_glib_version");
-+ exit(1);
-+ }
-+
-+ if ((glib_major_version != $glib_config_major_version) ||
-+ (glib_minor_version != $glib_config_minor_version) ||
-+ (glib_micro_version != $glib_config_micro_version))
-+ {
-+ printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n",
-+ $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
-+ glib_major_version, glib_minor_version, glib_micro_version);
-+ printf ("*** was found! If pkg-config was correct, then it is best\n");
-+ printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
-+ printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
-+ printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
-+ printf("*** required on your system.\n");
-+ printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
-+ printf("*** to point to the correct configuration files\n");
-+ }
-+ else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
-+ (glib_minor_version != GLIB_MINOR_VERSION) ||
-+ (glib_micro_version != GLIB_MICRO_VERSION))
-+ {
-+ printf("*** GLIB header files (version %d.%d.%d) do not match\n",
-+ GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
-+ printf("*** library (version %d.%d.%d)\n",
-+ glib_major_version, glib_minor_version, glib_micro_version);
-+ }
-+ else
-+ {
-+ if ((glib_major_version > major) ||
-+ ((glib_major_version == major) && (glib_minor_version > minor)) ||
-+ ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
-+ {
-+ return 0;
-+ }
-+ else
-+ {
-+ printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
-+ glib_major_version, glib_minor_version, glib_micro_version);
-+ printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
-+ major, minor, micro);
-+ printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
-+ printf("***\n");
-+ printf("*** If you have already installed a sufficiently new version, this error\n");
-+ printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
-+ printf("*** being found. The easiest way to fix this is to remove the old version\n");
-+ printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
-+ printf("*** correct copy of pkg-config. (In this case, you will have to\n");
-+ printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
-+ printf("*** so that the correct libraries are found at run-time))\n");
-+ }
-+ }
-+ return 1;
-+}
-+],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
-+ CFLAGS="$ac_save_CFLAGS"
-+ LIBS="$ac_save_LIBS"
-+ fi
-+ fi
-+ if test "x$no_glib" = x ; then
-+ AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
-+ ifelse([$2], , :, [$2])
-+ else
-+ AC_MSG_RESULT(no)
-+ if test "$PKG_CONFIG" = "no" ; then
-+ echo "*** A new enough version of pkg-config was not found."
-+ echo "*** See http://www.freedesktop.org/software/pkgconfig/"
-+ else
-+ if test -f conf.glibtest ; then
-+ :
-+ else
-+ echo "*** Could not run GLIB test program, checking why..."
-+ ac_save_CFLAGS="$CFLAGS"
-+ ac_save_LIBS="$LIBS"
-+ CFLAGS="$CFLAGS $GLIB_CFLAGS"
-+ LIBS="$LIBS $GLIB_LIBS"
-+ AC_TRY_LINK([
-+#include <glib.h>
-+#include <stdio.h>
-+], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
-+ [ echo "*** The test program compiled, but did not run. This usually means"
-+ echo "*** that the run-time linker is not finding GLIB or finding the wrong"
-+ echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
-+ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
-+ echo "*** to the installed location Also, make sure you have run ldconfig if that"
-+ echo "*** is required on your system"
-+ echo "***"
-+ echo "*** If you have an old version installed, it is best to remove it, although"
-+ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
-+ [ echo "*** The test program failed to compile or link. See the file config.log for the"
-+ echo "*** exact error that occured. This usually means GLIB is incorrectly installed."])
-+ CFLAGS="$ac_save_CFLAGS"
-+ LIBS="$ac_save_LIBS"
-+ fi
-+ fi
-+ GLIB_CFLAGS=""
-+ GLIB_LIBS=""
-+ GLIB_GENMARSHAL=""
-+ GOBJECT_QUERY=""
-+ GLIB_MKENUMS=""
-+ ifelse([$3], , :, [$3])
-+ fi
-+ AC_SUBST(GLIB_CFLAGS)
-+ AC_SUBST(GLIB_LIBS)
-+ AC_SUBST(GLIB_GENMARSHAL)
-+ AC_SUBST(GOBJECT_QUERY)
-+ AC_SUBST(GLIB_MKENUMS)
-+ rm -f conf.glibtest
-+])
---- /dev/null
-+++ atk-1.2.0/m4/glibc21.m4
-@@ -0,0 +1,32 @@
-+# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)
-+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+# Test for the GNU C Library, version 2.1 or newer.
-+# From Bruno Haible.
-+
-+AC_DEFUN([jm_GLIBC21],
-+ [
-+ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
-+ ac_cv_gnu_library_2_1,
-+ [AC_EGREP_CPP([Lucky GNU user],
-+ [
-+#include <features.h>
-+#ifdef __GNU_LIBRARY__
-+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
-+ Lucky GNU user
-+ #endif
-+#endif
-+ ],
-+ ac_cv_gnu_library_2_1=yes,
-+ ac_cv_gnu_library_2_1=no)
-+ ]
-+ )
-+ AC_SUBST(GLIBC21)
-+ GLIBC21="$ac_cv_gnu_library_2_1"
-+ ]
-+)
---- /dev/null
-+++ atk-1.2.0/m4/glib-gettext.m4
-@@ -0,0 +1,284 @@
-+# Macro to add for using GNU gettext.
-+# Ulrich Drepper <drepper@cygnus.com>, 1995, 1996
-+#
-+# Modified to never use included libintl.
-+# Owen Taylor <otaylor@redhat.com>, 12/15/1998
-+#
-+#
-+# This file can be copied and used freely without restrictions. It can
-+# be used in projects which are not available under the GNU Public License
-+# but which still want to provide support for the GNU gettext functionality.
-+# Please note that the actual code is *not* freely available.
-+#
-+#
-+# If you make changes to this file, you MUST update the copy in
-+# acinclude.m4. [ aclocal dies on duplicate macros, so if
-+# we run 'aclocal -I macros/' then we'll run into problems
-+# once we've installed glib-gettext.m4 :-( ]
-+#
-+
-+AC_DEFUN([AM_GLIB_LC_MESSAGES],
-+ [if test $ac_cv_header_locale_h = yes; then
-+ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
-+ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
-+ am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
-+ if test $am_cv_val_LC_MESSAGES = yes; then
-+ AC_DEFINE(HAVE_LC_MESSAGES, 1,
-+ [Define if your <locale.h> file defines LC_MESSAGES.])
-+ fi
-+ fi])
-+
-+dnl AM_GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-+AC_DEFUN([AM_GLIB_PATH_PROG_WITH_TEST],
-+[# Extract the first word of "$2", so it can be a program name with args.
-+set dummy $2; ac_word=[$]2
-+AC_MSG_CHECKING([for $ac_word])
-+AC_CACHE_VAL(ac_cv_path_$1,
-+[case "[$]$1" in
-+ /*)
-+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f $ac_dir/$ac_word; then
-+ if [$3]; then
-+ ac_cv_path_$1="$ac_dir/$ac_word"
-+ break
-+ fi
-+ fi
-+ done
-+ IFS="$ac_save_ifs"
-+dnl If no 4th arg is given, leave the cache variable unset,
-+dnl so AC_PATH_PROGS will keep looking.
-+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
-+])dnl
-+ ;;
-+esac])dnl
-+$1="$ac_cv_path_$1"
-+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
-+ AC_MSG_RESULT([$]$1)
-+else
-+ AC_MSG_RESULT(no)
-+fi
-+AC_SUBST($1)dnl
-+])
-+
-+# serial 5
-+
-+AC_DEFUN(AM_GLIB_WITH_NLS,
-+ dnl NLS is obligatory
-+ [USE_NLS=yes
-+ AC_SUBST(USE_NLS)
-+
-+ dnl Figure out what method
-+ nls_cv_force_use_gnu_gettext="no"
-+
-+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
-+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
-+ dnl User does not insist on using GNU NLS library. Figure out what
-+ dnl to use. If gettext or catgets are available (in this order) we
-+ dnl use this. Else we have to fall back to GNU NLS library.
-+ dnl catgets is only used if permitted by option --with-catgets.
-+ nls_cv_header_intl=
-+ nls_cv_header_libgt=
-+ CATOBJEXT=NONE
-+ XGETTEXT=:
-+
-+ AC_CHECK_HEADER(libintl.h,
-+ [AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc,
-+ [AC_TRY_LINK([#include <libintl.h>], [return (int) dgettext ("","")],
-+ gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no)])
-+
-+ gt_cv_func_dgettext_libintl="no"
-+ libintl_extra_libs=""
-+
-+ if test "$gt_cv_func_dgettext_libc" != "yes" ; then
-+ AC_CHECK_LIB(intl, bindtextdomain,
-+ [AC_CHECK_LIB(intl, dgettext,
-+ gt_cv_func_dgettext_libintl=yes)])
-+
-+ if test "$gt_cv_func_dgettext_libc" != "yes" ; then
-+ AC_MSG_CHECKING([if -liconv is needed to use gettext])
-+ AC_MSG_RESULT([])
-+ AC_CHECK_LIB(intl, dcgettext,
-+ [gt_cv_func_dgettext_libintl=yes
-+ libintl_extra_libs=-liconv],
-+ :,-liconv)
-+ fi
-+ fi
-+
-+ if test "$gt_cv_func_dgettext_libintl" = "yes"; then
-+ LIBS="$LIBS -lintl $libintl_extra_libs";
-+ fi
-+
-+ if test "$gt_cv_func_dgettext_libc" = "yes" \
-+ || test "$gt_cv_func_dgettext_libintl" = "yes"; then
-+ AC_DEFINE(HAVE_GETTEXT,1,
-+ [Define if the GNU gettext() function is already present or preinstalled.])
-+ AM_GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
-+ [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
-+ if test "$MSGFMT" != "no"; then
-+ AC_CHECK_FUNCS(dcgettext)
-+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-+ AM_GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
-+ [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
-+ AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
-+ return _nl_msg_cat_cntr],
-+ [CATOBJEXT=.gmo
-+ DATADIRNAME=share],
-+ [CATOBJEXT=.mo
-+ DATADIRNAME=lib])
-+ INSTOBJEXT=.mo
-+ fi
-+ fi
-+
-+ # Added by Martin Baulig 12/15/98 for libc5 systems
-+ if test "$gt_cv_func_dgettext_libc" != "yes" \
-+ && test "$gt_cv_func_dgettext_libintl" = "yes"; then
-+ INTLLIBS="-lintl $libintl_extra_libs"
-+ LIBS=`echo $LIBS | sed -e 's/-lintl//'`
-+ fi
-+ ])
-+
-+ if test "$CATOBJEXT" = "NONE"; then
-+ dnl Neither gettext nor catgets in included in the C library.
-+ dnl Fall back on GNU gettext library.
-+ nls_cv_use_gnu_gettext=yes
-+ fi
-+ fi
-+
-+ if test "$nls_cv_use_gnu_gettext" != "yes"; then
-+ AC_DEFINE(ENABLE_NLS, 1,
-+ [always defined to indicate that i18n is enabled])
-+ else
-+ dnl Unset this variable since we use the non-zero value as a flag.
-+ CATOBJEXT=
-+ fi
-+
-+ dnl Test whether we really found GNU xgettext.
-+ if test "$XGETTEXT" != ":"; then
-+ dnl If it is no GNU xgettext we define it as : so that the
-+ dnl Makefiles still can work.
-+ if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
-+ : ;
-+ else
-+ AC_MSG_RESULT(
-+ [found xgettext program is not GNU xgettext; ignore it])
-+ XGETTEXT=":"
-+ fi
-+ fi
-+
-+ # We need to process the po/ directory.
-+ POSUB=po
-+
-+ AC_OUTPUT_COMMANDS(
-+ [case "$CONFIG_FILES" in *po/Makefile.in*)
-+ sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
-+ esac])
-+
-+ dnl These rules are solely for the distribution goal. While doing this
-+ dnl we only have to keep exactly one list of the available catalogs
-+ dnl in configure.in.
-+ for lang in $ALL_LINGUAS; do
-+ GMOFILES="$GMOFILES $lang.gmo"
-+ POFILES="$POFILES $lang.po"
-+ done
-+
-+ dnl Make all variables we use known to autoconf.
-+ AC_SUBST(CATALOGS)
-+ AC_SUBST(CATOBJEXT)
-+ AC_SUBST(DATADIRNAME)
-+ AC_SUBST(GMOFILES)
-+ AC_SUBST(INSTOBJEXT)
-+ AC_SUBST(INTLDEPS)
-+ AC_SUBST(INTLLIBS)
-+ AC_SUBST(INTLOBJS)
-+ AC_SUBST(POFILES)
-+ AC_SUBST(POSUB)
-+ ])
-+
-+AC_DEFUN(AM_GLIB_GNU_GETTEXT,
-+ [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-+ AC_REQUIRE([AC_PROG_CC])dnl
-+ AC_REQUIRE([AC_PROG_RANLIB])dnl
-+ AC_REQUIRE([AC_HEADER_STDC])dnl
-+ AC_REQUIRE([AC_C_CONST])dnl
-+ AC_REQUIRE([AC_C_INLINE])dnl
-+ AC_REQUIRE([AC_TYPE_OFF_T])dnl
-+ AC_REQUIRE([AC_TYPE_SIZE_T])dnl
-+ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
-+ AC_REQUIRE([AC_FUNC_MMAP])dnl
-+
-+ AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
-+unistd.h sys/param.h])
-+ AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
-+strdup __argz_count __argz_stringify __argz_next])
-+
-+ AM_GLIB_LC_MESSAGES
-+ AM_GLIB_WITH_NLS
-+
-+ if test "x$CATOBJEXT" != "x"; then
-+ if test "x$ALL_LINGUAS" = "x"; then
-+ LINGUAS=
-+ else
-+ AC_MSG_CHECKING(for catalogs to be installed)
-+ NEW_LINGUAS=
-+ for lang in ${LINGUAS=$ALL_LINGUAS}; do
-+ case "$ALL_LINGUAS" in
-+ *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
-+ esac
-+ done
-+ LINGUAS=$NEW_LINGUAS
-+ AC_MSG_RESULT($LINGUAS)
-+ fi
-+
-+ dnl Construct list of names of catalog files to be constructed.
-+ if test -n "$LINGUAS"; then
-+ for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
-+ fi
-+ fi
-+
-+ dnl Determine which catalog format we have (if any is needed)
-+ dnl For now we know about two different formats:
-+ dnl Linux libc-5 and the normal X/Open format
-+ test -d po || mkdir po
-+ if test "$CATOBJEXT" = ".cat"; then
-+ AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
-+
-+ dnl Transform the SED scripts while copying because some dumb SEDs
-+ dnl cannot handle comments.
-+ sed -e '/^#/d' $srcdir/po/$msgformat-msg.sed > po/po2msg.sed
-+ fi
-+
-+ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
-+ dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
-+ dnl Try to locate is.
-+ MKINSTALLDIRS=
-+ if test -n "$ac_aux_dir"; then
-+ MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
-+ fi
-+ if test -z "$MKINSTALLDIRS"; then
-+ MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
-+ fi
-+ AC_SUBST(MKINSTALLDIRS)
-+
-+ dnl Generate list of files to be processed by xgettext which will
-+ dnl be included in po/Makefile.
-+ test -d po || mkdir po
-+ if test "x$srcdir" != "x."; then
-+ if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
-+ posrcprefix="$srcdir/"
-+ else
-+ posrcprefix="../$srcdir/"
-+ fi
-+ else
-+ posrcprefix="../"
-+ fi
-+ rm -f po/POTFILES
-+ sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
-+ < $srcdir/po/POTFILES.in > po/POTFILES
-+ ])
-+
---- /dev/null
-+++ atk-1.2.0/m4/iconv.m4
-@@ -0,0 +1,103 @@
-+# iconv.m4 serial AM4 (gettext-0.11.3)
-+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl From Bruno Haible.
-+
-+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
-+[
-+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
-+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-+ AC_REQUIRE([AC_LIB_RPATH])
-+
-+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
-+ dnl accordingly.
-+ AC_LIB_LINKFLAGS_BODY([iconv])
-+])
-+
-+AC_DEFUN([AM_ICONV_LINK],
-+[
-+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
-+ dnl those with the standalone portable GNU libiconv installed).
-+
-+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
-+ dnl accordingly.
-+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
-+
-+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
-+ dnl because if the user has installed libiconv and not disabled its use
-+ dnl via --without-libiconv-prefix, he wants to use it. The first
-+ dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
-+ am_save_CPPFLAGS="$CPPFLAGS"
-+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
-+
-+ AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
-+ am_cv_func_iconv="no, consider installing GNU libiconv"
-+ am_cv_lib_iconv=no
-+ AC_TRY_LINK([#include <stdlib.h>
-+#include <iconv.h>],
-+ [iconv_t cd = iconv_open("","");
-+ iconv(cd,NULL,NULL,NULL,NULL);
-+ iconv_close(cd);],
-+ am_cv_func_iconv=yes)
-+ if test "$am_cv_func_iconv" != yes; then
-+ am_save_LIBS="$LIBS"
-+ LIBS="$LIBS $LIBICONV"
-+ AC_TRY_LINK([#include <stdlib.h>
-+#include <iconv.h>],
-+ [iconv_t cd = iconv_open("","");
-+ iconv(cd,NULL,NULL,NULL,NULL);
-+ iconv_close(cd);],
-+ am_cv_lib_iconv=yes
-+ am_cv_func_iconv=yes)
-+ LIBS="$am_save_LIBS"
-+ fi
-+ ])
-+ if test "$am_cv_func_iconv" = yes; then
-+ AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
-+ fi
-+ if test "$am_cv_lib_iconv" = yes; then
-+ AC_MSG_CHECKING([how to link with libiconv])
-+ AC_MSG_RESULT([$LIBICONV])
-+ else
-+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
-+ dnl either.
-+ CPPFLAGS="$am_save_CPPFLAGS"
-+ LIBICONV=
-+ LTLIBICONV=
-+ fi
-+ AC_SUBST(LIBICONV)
-+ AC_SUBST(LTLIBICONV)
-+])
-+
-+AC_DEFUN([AM_ICONV],
-+[
-+ AM_ICONV_LINK
-+ if test "$am_cv_func_iconv" = yes; then
-+ AC_MSG_CHECKING([for iconv declaration])
-+ AC_CACHE_VAL(am_cv_proto_iconv, [
-+ AC_TRY_COMPILE([
-+#include <stdlib.h>
-+#include <iconv.h>
-+extern
-+#ifdef __cplusplus
-+"C"
-+#endif
-+#if defined(__STDC__) || defined(__cplusplus)
-+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-+#else
-+size_t iconv();
-+#endif
-+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
-+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
-+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-+ AC_MSG_RESULT([$]{ac_t:-
-+ }[$]am_cv_proto_iconv)
-+ AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
-+ [Define as const if the declaration of iconv() needs const.])
-+ fi
-+])
---- /dev/null
-+++ atk-1.2.0/m4/intdiv0.m4
-@@ -0,0 +1,72 @@
-+# intdiv0.m4 serial 1 (gettext-0.11.3)
-+dnl Copyright (C) 2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl From Bruno Haible.
-+
-+AC_DEFUN([gt_INTDIV0],
-+[
-+ AC_REQUIRE([AC_PROG_CC])dnl
-+ AC_REQUIRE([AC_CANONICAL_HOST])dnl
-+
-+ AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
-+ gt_cv_int_divbyzero_sigfpe,
-+ [
-+ AC_TRY_RUN([
-+#include <stdlib.h>
-+#include <signal.h>
-+
-+static void
-+#ifdef __cplusplus
-+sigfpe_handler (int sig)
-+#else
-+sigfpe_handler (sig) int sig;
-+#endif
-+{
-+ /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */
-+ exit (sig != SIGFPE);
-+}
-+
-+int x = 1;
-+int y = 0;
-+int z;
-+int nan;
-+
-+int main ()
-+{
-+ signal (SIGFPE, sigfpe_handler);
-+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */
-+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
-+ signal (SIGTRAP, sigfpe_handler);
-+#endif
-+/* Linux/SPARC yields signal SIGILL. */
-+#if defined (__sparc__) && defined (__linux__)
-+ signal (SIGILL, sigfpe_handler);
-+#endif
-+
-+ z = x / y;
-+ nan = y / y;
-+ exit (1);
-+}
-+], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
-+ [
-+ # Guess based on the CPU.
-+ case "$host_cpu" in
-+ alpha* | i[34567]86 | m68k | s390*)
-+ gt_cv_int_divbyzero_sigfpe="guessing yes";;
-+ *)
-+ gt_cv_int_divbyzero_sigfpe="guessing no";;
-+ esac
-+ ])
-+ ])
-+ case "$gt_cv_int_divbyzero_sigfpe" in
-+ *yes) value=1;;
-+ *) value=0;;
-+ esac
-+ AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
-+ [Define if integer division by zero raises signal SIGFPE.])
-+])
---- /dev/null
-+++ atk-1.2.0/m4/inttypes_h.m4
-@@ -0,0 +1,28 @@
-+# inttypes_h.m4 serial 4 (gettext-0.11.4)
-+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl From Paul Eggert.
-+
-+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
-+# doesn't clash with <sys/types.h>, and declares uintmax_t.
-+
-+AC_DEFUN([jm_AC_HEADER_INTTYPES_H],
-+[
-+ AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h,
-+ [AC_TRY_COMPILE(
-+ [#include <sys/types.h>
-+#include <inttypes.h>],
-+ [uintmax_t i = (uintmax_t) -1;],
-+ jm_ac_cv_header_inttypes_h=yes,
-+ jm_ac_cv_header_inttypes_h=no)])
-+ if test $jm_ac_cv_header_inttypes_h = yes; then
-+ AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
-+[Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
-+ and declares uintmax_t. ])
-+ fi
-+])
---- /dev/null
-+++ atk-1.2.0/m4/inttypes.m4
-@@ -0,0 +1,27 @@
-+# inttypes.m4 serial 1 (gettext-0.11.4)
-+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl From Paul Eggert.
-+
-+# Define HAVE_INTTYPES_H if <inttypes.h> exists and doesn't clash with
-+# <sys/types.h>.
-+
-+AC_DEFUN([gt_HEADER_INTTYPES_H],
-+[
-+ AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h,
-+ [
-+ AC_TRY_COMPILE(
-+ [#include <sys/types.h>
-+#include <inttypes.h>],
-+ [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no)
-+ ])
-+ if test $gt_cv_header_inttypes_h = yes; then
-+ AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,
-+ [Define if <inttypes.h> exists and doesn't clash with <sys/types.h>.])
-+ fi
-+])
---- /dev/null
-+++ atk-1.2.0/m4/inttypes-pri.m4
-@@ -0,0 +1,32 @@
-+# inttypes-pri.m4 serial 1 (gettext-0.11.4)
-+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl From Bruno Haible.
-+
-+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
-+# macros to non-string values. This is the case on AIX 4.3.3.
-+
-+AC_DEFUN([gt_INTTYPES_PRI],
-+[
-+ AC_REQUIRE([gt_HEADER_INTTYPES_H])
-+ if test $gt_cv_header_inttypes_h = yes; then
-+ AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
-+ gt_cv_inttypes_pri_broken,
-+ [
-+ AC_TRY_COMPILE([#include <inttypes.h>
-+#ifdef PRId32
-+char *p = PRId32;
-+#endif
-+], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
-+ ])
-+ fi
-+ if test "$gt_cv_inttypes_pri_broken" = yes; then
-+ AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
-+ [Define if <inttypes.h> exists and defines unusable PRI* macros.])
-+ fi
-+])
---- /dev/null
-+++ atk-1.2.0/m4/isc-posix.m4
-@@ -0,0 +1,26 @@
-+# isc-posix.m4 serial 2 (gettext-0.11.2)
-+dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+# This file is not needed with autoconf-2.53 and newer. Remove it in 2005.
-+
-+# This test replaces the one in autoconf.
-+# Currently this macro should have the same name as the autoconf macro
-+# because gettext's gettext.m4 (distributed in the automake package)
-+# still uses it. Otherwise, the use in gettext.m4 makes autoheader
-+# give these diagnostics:
-+# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
-+# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
-+
-+undefine([AC_ISC_POSIX])
-+
-+AC_DEFUN([AC_ISC_POSIX],
-+ [
-+ dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
-+ AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
-+ ]
-+)
---- /dev/null
-+++ atk-1.2.0/m4/lcmessage.m4
-@@ -0,0 +1,32 @@
-+# lcmessage.m4 serial 3 (gettext-0.11.3)
-+dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+dnl
-+dnl This file can can be used in projects which are not available under
-+dnl the GNU General Public License or the GNU Library General Public
-+dnl License but which still want to provide support for the GNU gettext
-+dnl functionality.
-+dnl Please note that the actual code of the GNU gettext library is covered
-+dnl by the GNU Library General Public License, and the rest of the GNU
-+dnl gettext package package is covered by the GNU General Public License.
-+dnl They are *not* in the public domain.
-+
-+dnl Authors:
-+dnl Ulrich Drepper <drepper@cygnus.com>, 1995.
-+
-+# Check whether LC_MESSAGES is available in <locale.h>.
-+
-+AC_DEFUN([AM_LC_MESSAGES],
-+[
-+ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
-+ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
-+ am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
-+ if test $am_cv_val_LC_MESSAGES = yes; then
-+ AC_DEFINE(HAVE_LC_MESSAGES, 1,
-+ [Define if your <locale.h> file defines LC_MESSAGES.])
-+ fi
-+])
---- /dev/null
-+++ atk-1.2.0/m4/lib-ld.m4
-@@ -0,0 +1,97 @@
-+# lib-ld.m4 serial 1 (gettext-0.11)
-+dnl Copyright (C) 1996-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl Subroutines of libtool.m4,
-+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-+dnl with libtool.m4.
-+
-+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
-+AC_DEFUN([AC_LIB_PROG_LD_GNU],
-+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
-+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
-+ acl_cv_prog_gnu_ld=yes
-+else
-+ acl_cv_prog_gnu_ld=no
-+fi])
-+with_gnu_ld=$acl_cv_prog_gnu_ld
-+])
-+
-+dnl From libtool-1.4. Sets the variable LD.
-+AC_DEFUN([AC_LIB_PROG_LD],
-+[AC_ARG_WITH(gnu-ld,
-+[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-+AC_REQUIRE([AC_PROG_CC])dnl
-+AC_REQUIRE([AC_CANONICAL_HOST])dnl
-+ac_prog=ld
-+if test "$GCC" = yes; then
-+ # Check if gcc -print-prog-name=ld gives a path.
-+ AC_MSG_CHECKING([for ld used by GCC])
-+ case $host in
-+ *-*-mingw*)
-+ # gcc leaves a trailing carriage return which upsets mingw
-+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
-+ *)
-+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
-+ esac
-+ case $ac_prog in
-+ # Accept absolute paths.
-+ [[\\/]* | [A-Za-z]:[\\/]*)]
-+ [re_direlt='/[^/][^/]*/\.\./']
-+ # Canonicalize the path of ld
-+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
-+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
-+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
-+ done
-+ test -z "$LD" && LD="$ac_prog"
-+ ;;
-+ "")
-+ # If it fails, then pretend we aren't using GCC.
-+ ac_prog=ld
-+ ;;
-+ *)
-+ # If it is relative, then search for the first ld in PATH.
-+ with_gnu_ld=unknown
-+ ;;
-+ esac
-+elif test "$with_gnu_ld" = yes; then
-+ AC_MSG_CHECKING([for GNU ld])
-+else
-+ AC_MSG_CHECKING([for non-GNU ld])
-+fi
-+AC_CACHE_VAL(acl_cv_path_LD,
-+[if test -z "$LD"; then
-+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
-+ for ac_dir in $PATH; do
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
-+ acl_cv_path_LD="$ac_dir/$ac_prog"
-+ # Check to see if the program is GNU ld. I'd rather use --version,
-+ # but apparently some GNU ld's only accept -v.
-+ # Break only if it was the GNU/non-GNU ld that we prefer.
-+ if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
-+ test "$with_gnu_ld" != no && break
-+ else
-+ test "$with_gnu_ld" != yes && break
-+ fi
-+ fi
-+ done
-+ IFS="$ac_save_ifs"
-+else
-+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
-+fi])
-+LD="$acl_cv_path_LD"
-+if test -n "$LD"; then
-+ AC_MSG_RESULT($LD)
-+else
-+ AC_MSG_RESULT(no)
-+fi
-+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-+AC_LIB_PROG_LD_GNU
-+])
---- /dev/null
-+++ atk-1.2.0/m4/lib-link.m4
-@@ -0,0 +1,554 @@
-+# lib-link.m4 serial 3 (gettext-0.11.3)
-+dnl Copyright (C) 2001-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl From Bruno Haible.
-+
-+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
-+dnl the libraries corresponding to explicit and implicit dependencies.
-+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
-+dnl augments the CPPFLAGS variable.
-+AC_DEFUN([AC_LIB_LINKFLAGS],
-+[
-+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-+ AC_REQUIRE([AC_LIB_RPATH])
-+ define([Name],[translit([$1],[./-], [___])])
-+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
-+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
-+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
-+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
-+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
-+ ])
-+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
-+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
-+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
-+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-+ AC_SUBST([LIB]NAME)
-+ AC_SUBST([LTLIB]NAME)
-+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
-+ dnl results of this search when this library appears as a dependency.
-+ HAVE_LIB[]NAME=yes
-+ undefine([Name])
-+ undefine([NAME])
-+])
-+
-+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
-+dnl searches for libname and the libraries corresponding to explicit and
-+dnl implicit dependencies, together with the specified include files and
-+dnl the ability to compile and link the specified testcode. If found, it
-+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
-+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
-+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
-+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
-+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
-+[
-+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-+ AC_REQUIRE([AC_LIB_RPATH])
-+ define([Name],[translit([$1],[./-], [___])])
-+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-+
-+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
-+ dnl accordingly.
-+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
-+
-+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
-+ dnl because if the user has installed lib[]Name and not disabled its use
-+ dnl via --without-lib[]Name-prefix, he wants to use it.
-+ ac_save_CPPFLAGS="$CPPFLAGS"
-+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-+
-+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
-+ ac_save_LIBS="$LIBS"
-+ LIBS="$LIBS $LIB[]NAME"
-+ AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
-+ LIBS="$ac_save_LIBS"
-+ ])
-+ if test "$ac_cv_lib[]Name" = yes; then
-+ HAVE_LIB[]NAME=yes
-+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
-+ AC_MSG_CHECKING([how to link with lib[]$1])
-+ AC_MSG_RESULT([$LIB[]NAME])
-+ else
-+ HAVE_LIB[]NAME=no
-+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
-+ dnl $INC[]NAME either.
-+ CPPFLAGS="$ac_save_CPPFLAGS"
-+ LIB[]NAME=
-+ LTLIB[]NAME=
-+ fi
-+ AC_SUBST([HAVE_LIB]NAME)
-+ AC_SUBST([LIB]NAME)
-+ AC_SUBST([LTLIB]NAME)
-+ undefine([Name])
-+ undefine([NAME])
-+])
-+
-+dnl Determine the platform dependent parameters needed to use rpath:
-+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
-+dnl hardcode_direct, hardcode_minus_L,
-+dnl sys_lib_search_path_spec, sys_lib_dlsearch_path_spec.
-+AC_DEFUN([AC_LIB_RPATH],
-+[
-+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
-+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
-+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
-+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
-+ AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
-+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
-+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
-+ . ./conftest.sh
-+ rm -f ./conftest.sh
-+ acl_cv_rpath=done
-+ ])
-+ wl="$acl_cv_wl"
-+ libext="$acl_cv_libext"
-+ shlibext="$acl_cv_shlibext"
-+ hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
-+ hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
-+ hardcode_direct="$acl_cv_hardcode_direct"
-+ hardcode_minus_L="$acl_cv_hardcode_minus_L"
-+ sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec"
-+ sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec"
-+ dnl Determine whether the user wants rpath handling at all.
-+ AC_ARG_ENABLE(rpath,
-+ [ --disable-rpath do not hardcode runtime library paths],
-+ :, enable_rpath=yes)
-+])
-+
-+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
-+dnl the libraries corresponding to explicit and implicit dependencies.
-+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
-+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
-+[
-+ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
-+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-+ dnl By default, look in $includedir and $libdir.
-+ use_additional=yes
-+ AC_LIB_WITH_FINAL_PREFIX([
-+ eval additional_includedir=\"$includedir\"
-+ eval additional_libdir=\"$libdir\"
-+ ])
-+ AC_ARG_WITH([lib$1-prefix],
-+[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
-+ --without-lib$1-prefix don't search for lib$1 in includedir and libdir],
-+[
-+ if test "X$withval" = "Xno"; then
-+ use_additional=no
-+ else
-+ if test "X$withval" = "X"; then
-+ AC_LIB_WITH_FINAL_PREFIX([
-+ eval additional_includedir=\"$includedir\"
-+ eval additional_libdir=\"$libdir\"
-+ ])
-+ else
-+ additional_includedir="$withval/include"
-+ additional_libdir="$withval/lib"
-+ fi
-+ fi
-+])
-+ dnl Search the library and its dependencies in $additional_libdir and
-+ dnl $LDFLAGS. Using breadth-first-seach.
-+ LIB[]NAME=
-+ LTLIB[]NAME=
-+ INC[]NAME=
-+ rpathdirs=
-+ ltrpathdirs=
-+ names_already_handled=
-+ names_next_round='$1 $2'
-+ while test -n "$names_next_round"; do
-+ names_this_round="$names_next_round"
-+ names_next_round=
-+ for name in $names_this_round; do
-+ already_handled=
-+ for n in $names_already_handled; do
-+ if test "$n" = "$name"; then
-+ already_handled=yes
-+ break
-+ fi
-+ done
-+ if test -z "$already_handled"; then
-+ names_already_handled="$names_already_handled $name"
-+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
-+ dnl or AC_LIB_HAVE_LINKFLAGS call.
-+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
-+ eval value=\"\$HAVE_LIB$uppername\"
-+ if test -n "$value"; then
-+ if test "$value" = yes; then
-+ eval value=\"\$LIB$uppername\"
-+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
-+ eval value=\"\$LTLIB$uppername\"
-+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
-+ else
-+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
-+ dnl that this library doesn't exist. So just drop it.
-+ :
-+ fi
-+ else
-+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
-+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
-+ found_dir=
-+ found_la=
-+ found_so=
-+ found_a=
-+ if test $use_additional = yes; then
-+ if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
-+ found_dir="$additional_libdir"
-+ found_so="$additional_libdir/lib$name.$shlibext"
-+ if test -f "$additional_libdir/lib$name.la"; then
-+ found_la="$additional_libdir/lib$name.la"
-+ fi
-+ else
-+ if test -f "$additional_libdir/lib$name.$libext"; then
-+ found_dir="$additional_libdir"
-+ found_a="$additional_libdir/lib$name.$libext"
-+ if test -f "$additional_libdir/lib$name.la"; then
-+ found_la="$additional_libdir/lib$name.la"
-+ fi
-+ fi
-+ fi
-+ fi
-+ if test "X$found_dir" = "X"; then
-+ for x in $LDFLAGS $LTLIB[]NAME; do
-+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+ case "$x" in
-+ -L*)
-+ dir=`echo "X$x" | sed -e 's/^X-L//'`
-+ if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
-+ found_dir="$dir"
-+ found_so="$dir/lib$name.$shlibext"
-+ if test -f "$dir/lib$name.la"; then
-+ found_la="$dir/lib$name.la"
-+ fi
-+ else
-+ if test -f "$dir/lib$name.$libext"; then
-+ found_dir="$dir"
-+ found_a="$dir/lib$name.$libext"
-+ if test -f "$dir/lib$name.la"; then
-+ found_la="$dir/lib$name.la"
-+ fi
-+ fi
-+ fi
-+ ;;
-+ esac
-+ if test "X$found_dir" != "X"; then
-+ break
-+ fi
-+ done
-+ fi
-+ if test "X$found_dir" != "X"; then
-+ dnl Found the library.
-+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
-+ if test "X$found_so" != "X"; then
-+ dnl Linking with a shared library. We attempt to hardcode its
-+ dnl directory into the executable's runpath, unless it's the
-+ dnl standard /usr/lib.
-+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
-+ dnl No hardcoding is needed.
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-+ else
-+ dnl Use an explicit option to hardcode DIR into the resulting
-+ dnl binary.
-+ dnl Potentially add DIR to ltrpathdirs.
-+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
-+ haveit=
-+ for x in $ltrpathdirs; do
-+ if test "X$x" = "X$found_dir"; then
-+ haveit=yes
-+ break
-+ fi
-+ done
-+ if test -z "$haveit"; then
-+ ltrpathdirs="$ltrpathdirs $found_dir"
-+ fi
-+ dnl The hardcoding into $LIBNAME is system dependent.
-+ if test "$hardcode_direct" = yes; then
-+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
-+ dnl resulting binary.
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-+ else
-+ if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
-+ dnl Use an explicit option to hardcode DIR into the resulting
-+ dnl binary.
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-+ dnl Potentially add DIR to rpathdirs.
-+ dnl The rpathdirs will be appended to $LIBNAME at the end.
-+ haveit=
-+ for x in $rpathdirs; do
-+ if test "X$x" = "X$found_dir"; then
-+ haveit=yes
-+ break
-+ fi
-+ done
-+ if test -z "$haveit"; then
-+ rpathdirs="$rpathdirs $found_dir"
-+ fi
-+ else
-+ dnl Rely on "-L$found_dir".
-+ dnl But don't add it if it's already contained in the LDFLAGS
-+ dnl or the already constructed $LIBNAME
-+ haveit=
-+ for x in $LDFLAGS $LIB[]NAME; do
-+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+ if test "X$x" = "X-L$found_dir"; then
-+ haveit=yes
-+ break
-+ fi
-+ done
-+ if test -z "$haveit"; then
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
-+ fi
-+ if test "$hardcode_minus_L" != no; then
-+ dnl FIXME: Not sure whether we should use
-+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
-+ dnl here.
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
-+ else
-+ dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
-+ dnl here, because this doesn't fit in flags passed to the
-+ dnl compiler. So give up. No hardcoding. This affects only
-+ dnl very old systems.
-+ dnl FIXME: Not sure whether we should use
-+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
-+ dnl here.
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
-+ fi
-+ fi
-+ fi
-+ fi
-+ else
-+ if test "X$found_a" != "X"; then
-+ dnl Linking with a static library.
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
-+ else
-+ dnl We shouldn't come here, but anyway it's good to have a
-+ dnl fallback.
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
-+ fi
-+ fi
-+ dnl Assume the include files are nearby.
-+ additional_includedir=
-+ case "$found_dir" in
-+ */lib | */lib/)
-+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
-+ additional_includedir="$basedir/include"
-+ ;;
-+ esac
-+ if test "X$additional_includedir" != "X"; then
-+ dnl Potentially add $additional_includedir to $INCNAME.
-+ dnl But don't add it
-+ dnl 1. if it's the standard /usr/include,
-+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
-+ dnl 3. if it's already present in $CPPFLAGS or the already
-+ dnl constructed $INCNAME,
-+ dnl 4. if it doesn't exist as a directory.
-+ if test "X$additional_includedir" != "X/usr/include"; then
-+ haveit=
-+ if test "X$additional_includedir" = "X/usr/local/include"; then
-+ if test -n "$GCC"; then
-+ case $host_os in
-+ linux*) haveit=yes;;
-+ esac
-+ fi
-+ fi
-+ if test -z "$haveit"; then
-+ for x in $CPPFLAGS $INC[]NAME; do
-+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+ if test "X$x" = "X-I$additional_includedir"; then
-+ haveit=yes
-+ break
-+ fi
-+ done
-+ if test -z "$haveit"; then
-+ if test -d "$additional_includedir"; then
-+ dnl Really add $additional_includedir to $INCNAME.
-+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
-+ fi
-+ fi
-+ fi
-+ fi
-+ fi
-+ dnl Look for dependencies.
-+ if test -n "$found_la"; then
-+ dnl Read the .la file. It defines the variables
-+ dnl dlname, library_names, old_library, dependency_libs, current,
-+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
-+ save_libdir="$libdir"
-+ case "$found_la" in
-+ */* | *\\*) . "$found_la" ;;
-+ *) . "./$found_la" ;;
-+ esac
-+ libdir="$save_libdir"
-+ dnl We use only dependency_libs.
-+ for dep in $dependency_libs; do
-+ case "$dep" in
-+ -L*)
-+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
-+ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
-+ dnl But don't add it
-+ dnl 1. if it's the standard /usr/lib,
-+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
-+ dnl 3. if it's already present in $LDFLAGS or the already
-+ dnl constructed $LIBNAME,
-+ dnl 4. if it doesn't exist as a directory.
-+ if test "X$additional_libdir" != "X/usr/lib"; then
-+ haveit=
-+ if test "X$additional_libdir" = "X/usr/local/lib"; then
-+ if test -n "$GCC"; then
-+ case $host_os in
-+ linux*) haveit=yes;;
-+ esac
-+ fi
-+ fi
-+ if test -z "$haveit"; then
-+ haveit=
-+ for x in $LDFLAGS $LIB[]NAME; do
-+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+ if test "X$x" = "X-L$additional_libdir"; then
-+ haveit=yes
-+ break
-+ fi
-+ done
-+ if test -z "$haveit"; then
-+ if test -d "$additional_libdir"; then
-+ dnl Really add $additional_libdir to $LIBNAME.
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
-+ fi
-+ fi
-+ haveit=
-+ for x in $LDFLAGS $LTLIB[]NAME; do
-+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+ if test "X$x" = "X-L$additional_libdir"; then
-+ haveit=yes
-+ break
-+ fi
-+ done
-+ if test -z "$haveit"; then
-+ if test -d "$additional_libdir"; then
-+ dnl Really add $additional_libdir to $LTLIBNAME.
-+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
-+ fi
-+ fi
-+ fi
-+ fi
-+ ;;
-+ -R*)
-+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
-+ if test "$enable_rpath" != no; then
-+ dnl Potentially add DIR to rpathdirs.
-+ dnl The rpathdirs will be appended to $LIBNAME at the end.
-+ haveit=
-+ for x in $rpathdirs; do
-+ if test "X$x" = "X$dir"; then
-+ haveit=yes
-+ break
-+ fi
-+ done
-+ if test -z "$haveit"; then
-+ rpathdirs="$rpathdirs $dir"
-+ fi
-+ dnl Potentially add DIR to ltrpathdirs.
-+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
-+ haveit=
-+ for x in $ltrpathdirs; do
-+ if test "X$x" = "X$dir"; then
-+ haveit=yes
-+ break
-+ fi
-+ done
-+ if test -z "$haveit"; then
-+ ltrpathdirs="$ltrpathdirs $dir"
-+ fi
-+ fi
-+ ;;
-+ -l*)
-+ dnl Handle this in the next round.
-+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
-+ ;;
-+ *.la)
-+ dnl Handle this in the next round. Throw away the .la's
-+ dnl directory; it is already contained in a preceding -L
-+ dnl option.
-+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
-+ ;;
-+ *)
-+ dnl Most likely an immediate library name.
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
-+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
-+ ;;
-+ esac
-+ done
-+ fi
-+ else
-+ dnl Didn't find the library; assume it is in the system directories
-+ dnl known to the linker and runtime loader. (All the system
-+ dnl directories known to the linker should also be known to the
-+ dnl runtime loader, otherwise the system is severely misconfigured.)
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
-+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
-+ fi
-+ fi
-+ fi
-+ done
-+ done
-+ if test "X$rpathdirs" != "X"; then
-+ if test -n "$hardcode_libdir_separator"; then
-+ dnl Weird platform: only the last -rpath option counts, the user must
-+ dnl pass all path elements in one option. We can arrange that for a
-+ dnl single library, but not when more than one $LIBNAMEs are used.
-+ alldirs=
-+ for found_dir in $rpathdirs; do
-+ alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
-+ done
-+ dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
-+ acl_save_libdir="$libdir"
-+ libdir="$alldirs"
-+ eval flag=\"$hardcode_libdir_flag_spec\"
-+ libdir="$acl_save_libdir"
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
-+ else
-+ dnl The -rpath options are cumulative.
-+ for found_dir in $rpathdirs; do
-+ acl_save_libdir="$libdir"
-+ libdir="$found_dir"
-+ eval flag=\"$hardcode_libdir_flag_spec\"
-+ libdir="$acl_save_libdir"
-+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
-+ done
-+ fi
-+ fi
-+ if test "X$ltrpathdirs" != "X"; then
-+ dnl When using libtool, the option that works for both libraries and
-+ dnl executables is -R. The -R options are cumulative.
-+ for found_dir in $ltrpathdirs; do
-+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
-+ done
-+ fi
-+])
-+
-+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
-+dnl unless already present in VAR.
-+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
-+dnl contains two or three consecutive elements that belong together.
-+AC_DEFUN([AC_LIB_APPENDTOVAR],
-+[
-+ for element in [$2]; do
-+ haveit=
-+ for x in $[$1]; do
-+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+ if test "X$x" = "X$element"; then
-+ haveit=yes
-+ break
-+ fi
-+ done
-+ if test -z "$haveit"; then
-+ [$1]="${[$1]}${[$1]:+ }$element"
-+ fi
-+ done
-+])
---- /dev/null
-+++ atk-1.2.0/m4/lib-prefix.m4
-@@ -0,0 +1,148 @@
-+# lib-prefix.m4 serial 1 (gettext-0.11)
-+dnl Copyright (C) 2001-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl From Bruno Haible.
-+
-+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-+dnl to access previously installed libraries. The basic assumption is that
-+dnl a user will want packages to use other packages he previously installed
-+dnl with the same --prefix option.
-+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-+dnl libraries, but is otherwise very convenient.
-+AC_DEFUN([AC_LIB_PREFIX],
-+[
-+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
-+ AC_REQUIRE([AC_PROG_CC])
-+ AC_REQUIRE([AC_CANONICAL_HOST])
-+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
-+ dnl By default, look in $includedir and $libdir.
-+ use_additional=yes
-+ AC_LIB_WITH_FINAL_PREFIX([
-+ eval additional_includedir=\"$includedir\"
-+ eval additional_libdir=\"$libdir\"
-+ ])
-+ AC_ARG_WITH([lib-prefix],
-+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
-+ --without-lib-prefix don't search for libraries in includedir and libdir],
-+[
-+ if test "X$withval" = "Xno"; then
-+ use_additional=no
-+ else
-+ if test "X$withval" = "X"; then
-+ AC_LIB_WITH_FINAL_PREFIX([
-+ eval additional_includedir=\"$includedir\"
-+ eval additional_libdir=\"$libdir\"
-+ ])
-+ else
-+ additional_includedir="$withval/include"
-+ additional_libdir="$withval/lib"
-+ fi
-+ fi
-+])
-+ if test $use_additional = yes; then
-+ dnl Potentially add $additional_includedir to $CPPFLAGS.
-+ dnl But don't add it
-+ dnl 1. if it's the standard /usr/include,
-+ dnl 2. if it's already present in $CPPFLAGS,
-+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
-+ dnl 4. if it doesn't exist as a directory.
-+ if test "X$additional_includedir" != "X/usr/include"; then
-+ haveit=
-+ for x in $CPPFLAGS; do
-+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+ if test "X$x" = "X-I$additional_includedir"; then
-+ haveit=yes
-+ break
-+ fi
-+ done
-+ if test -z "$haveit"; then
-+ if test "X$additional_includedir" = "X/usr/local/include"; then
-+ if test -n "$GCC"; then
-+ case $host_os in
-+ linux*) haveit=yes;;
-+ esac
-+ fi
-+ fi
-+ if test -z "$haveit"; then
-+ if test -d "$additional_includedir"; then
-+ dnl Really add $additional_includedir to $CPPFLAGS.
-+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
-+ fi
-+ fi
-+ fi
-+ fi
-+ dnl Potentially add $additional_libdir to $LDFLAGS.
-+ dnl But don't add it
-+ dnl 1. if it's the standard /usr/lib,
-+ dnl 2. if it's already present in $LDFLAGS,
-+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
-+ dnl 4. if it doesn't exist as a directory.
-+ if test "X$additional_libdir" != "X/usr/lib"; then
-+ haveit=
-+ for x in $LDFLAGS; do
-+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
-+ if test "X$x" = "X-L$additional_libdir"; then
-+ haveit=yes
-+ break
-+ fi
-+ done
-+ if test -z "$haveit"; then
-+ if test "X$additional_libdir" = "X/usr/local/lib"; then
-+ if test -n "$GCC"; then
-+ case $host_os in
-+ linux*) haveit=yes;;
-+ esac
-+ fi
-+ fi
-+ if test -z "$haveit"; then
-+ if test -d "$additional_libdir"; then
-+ dnl Really add $additional_libdir to $LDFLAGS.
-+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
-+ fi
-+ fi
-+ fi
-+ fi
-+ fi
-+])
-+
-+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-+dnl acl_final_exec_prefix, containing the values to which $prefix and
-+dnl $exec_prefix will expand at the end of the configure script.
-+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
-+[
-+ dnl Unfortunately, prefix and exec_prefix get only finally determined
-+ dnl at the end of configure.
-+ if test "X$prefix" = "XNONE"; then
-+ acl_final_prefix="$ac_default_prefix"
-+ else
-+ acl_final_prefix="$prefix"
-+ fi
-+ if test "X$exec_prefix" = "XNONE"; then
-+ acl_final_exec_prefix='${prefix}'
-+ else
-+ acl_final_exec_prefix="$exec_prefix"
-+ fi
-+ acl_save_prefix="$prefix"
-+ prefix="$acl_final_prefix"
-+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
-+ prefix="$acl_save_prefix"
-+])
-+
-+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-+dnl variables prefix and exec_prefix bound to the values they will have
-+dnl at the end of the configure script.
-+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
-+[
-+ acl_save_prefix="$prefix"
-+ prefix="$acl_final_prefix"
-+ acl_save_exec_prefix="$exec_prefix"
-+ exec_prefix="$acl_final_exec_prefix"
-+ $1
-+ exec_prefix="$acl_save_exec_prefix"
-+ prefix="$acl_save_prefix"
-+])
---- /dev/null
-+++ atk-1.2.0/m4/progtest.m4
-@@ -0,0 +1,59 @@
-+# progtest.m4 serial 2 (gettext-0.10.40)
-+dnl Copyright (C) 1996-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+dnl
-+dnl This file can can be used in projects which are not available under
-+dnl the GNU General Public License or the GNU Library General Public
-+dnl License but which still want to provide support for the GNU gettext
-+dnl functionality.
-+dnl Please note that the actual code of the GNU gettext library is covered
-+dnl by the GNU Library General Public License, and the rest of the GNU
-+dnl gettext package package is covered by the GNU General Public License.
-+dnl They are *not* in the public domain.
-+
-+dnl Authors:
-+dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
-+
-+# Search path for a program which passes the given test.
-+
-+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
-+[# Extract the first word of "$2", so it can be a program name with args.
-+set dummy $2; ac_word=[$]2
-+AC_MSG_CHECKING([for $ac_word])
-+AC_CACHE_VAL(ac_cv_path_$1,
-+[case "[$]$1" in
-+ /*)
-+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
-+ ;;
-+ *)
-+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
-+ test -z "$ac_dir" && ac_dir=.
-+ if test -f $ac_dir/$ac_word; then
-+ if [$3]; then
-+ ac_cv_path_$1="$ac_dir/$ac_word"
-+ break
-+ fi
-+ fi
-+ done
-+ IFS="$ac_save_ifs"
-+dnl If no 4th arg is given, leave the cache variable unset,
-+dnl so AC_PATH_PROGS will keep looking.
-+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
-+])dnl
-+ ;;
-+esac])dnl
-+$1="$ac_cv_path_$1"
-+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
-+ AC_MSG_RESULT([$]$1)
-+else
-+ AC_MSG_RESULT(no)
-+fi
-+AC_SUBST($1)dnl
-+])
---- /dev/null
-+++ atk-1.2.0/m4/stdint_h.m4
-@@ -0,0 +1,28 @@
-+# stdint_h.m4 serial 2 (gettext-0.11.4)
-+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl From Paul Eggert.
-+
-+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
-+# doesn't clash with <sys/types.h>, and declares uintmax_t.
-+
-+AC_DEFUN([jm_AC_HEADER_STDINT_H],
-+[
-+ AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h,
-+ [AC_TRY_COMPILE(
-+ [#include <sys/types.h>
-+#include <stdint.h>],
-+ [uintmax_t i = (uintmax_t) -1;],
-+ jm_ac_cv_header_stdint_h=yes,
-+ jm_ac_cv_header_stdint_h=no)])
-+ if test $jm_ac_cv_header_stdint_h = yes; then
-+ AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
-+[Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
-+ and declares uintmax_t. ])
-+ fi
-+])
---- /dev/null
-+++ atk-1.2.0/m4/uintmax_t.m4
-@@ -0,0 +1,29 @@
-+# uintmax_t.m4 serial 6 (gettext-0.11)
-+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl From Paul Eggert.
-+
-+AC_PREREQ(2.13)
-+
-+# Define uintmax_t to `unsigned long' or `unsigned long long'
-+# if <inttypes.h> does not exist.
-+
-+AC_DEFUN([jm_AC_TYPE_UINTMAX_T],
-+[
-+ AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
-+ AC_REQUIRE([jm_AC_HEADER_STDINT_H])
-+ if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then
-+ AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
-+ test $ac_cv_type_unsigned_long_long = yes \
-+ && ac_type='unsigned long long' \
-+ || ac_type='unsigned long'
-+ AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
-+ [Define to unsigned long or unsigned long long
-+ if <inttypes.h> and <stdint.h> don't define.])
-+ fi
-+])
---- /dev/null
-+++ atk-1.2.0/m4/ulonglong.m4
-@@ -0,0 +1,23 @@
-+# ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40)
-+dnl Copyright (C) 1999-2002 Free Software Foundation, Inc.
-+dnl This file is free software, distributed under the terms of the GNU
-+dnl General Public License. As a special exception to the GNU General
-+dnl Public License, this file may be distributed as part of a program
-+dnl that contains a configuration script generated by Autoconf, under
-+dnl the same distribution terms as the rest of that program.
-+
-+dnl From Paul Eggert.
-+
-+AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG],
-+[
-+ AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
-+ [AC_TRY_LINK([unsigned long long ull = 1; int i = 63;],
-+ [unsigned long long ullmax = (unsigned long long) -1;
-+ return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
-+ ac_cv_type_unsigned_long_long=yes,
-+ ac_cv_type_unsigned_long_long=no)])
-+ if test $ac_cv_type_unsigned_long_long = yes; then
-+ AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
-+ [Define if you have the unsigned long long type.])
-+ fi
-+])
diff --git a/packages/atk/atk-1.6.0/gtk-doc.patch b/packages/atk/atk-1.6.0/gtk-doc.patch
deleted file mode 100644
index 04770290e1..0000000000
--- a/packages/atk/atk-1.6.0/gtk-doc.patch
+++ /dev/null
@@ -1,56 +0,0 @@
---- /dev/null 2004-02-02 20:32:13.000000000 +0000
-+++ atk/acinclude.m4 2003-07-21 03:26:44.000000000 +0100
-@@ -0,0 +1,53 @@
-+dnl -*- mode: autoconf -*-
-+
-+# serial 1
-+
-+dnl Usage:
-+dnl GTK_DOC_CHECK([minimum-gtk-doc-version])
-+AC_DEFUN([GTK_DOC_CHECK],
-+[
-+ AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
-+ AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
-+ dnl for overriding the documentation installation directory
-+ AC_ARG_WITH(html-dir,
-+ AC_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
-+ [with_html_dir='${datadir}/gtk-doc/html'])
-+ HTML_DIR="$with_html_dir"
-+ AC_SUBST(HTML_DIR)
-+
-+ dnl enable/disable documentation building
-+ AC_ARG_ENABLE(gtk-doc,
-+ AC_HELP_STRING([--enable-gtk-doc],
-+ [use gtk-doc to build documentation [default=no]]),,
-+ enable_gtk_doc=no)
-+
-+ have_gtk_doc=no
-+ if test -z "$PKG_CONFIG"; then
-+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-+ fi
-+ if test "$PKG_CONFIG" != "no" && $PKG_CONFIG --exists gtk-doc; then
-+ have_gtk_doc=yes
-+ fi
-+
-+ dnl do we want to do a version check?
-+ifelse([$1],[],,
-+ [gtk_doc_min_version=$1
-+ if test "$have_gtk_doc" = yes; then
-+ AC_MSG_CHECKING([gtk-doc version >= $gtk_doc_min_version])
-+ if $PKG_CONFIG --atleast-version $gtk_doc_min_version gtk-doc; then
-+ AC_MSG_RESULT(yes)
-+ else
-+ AC_MSG_RESULT(no)
-+ have_gtk_doc=no
-+ fi
-+ fi
-+])
-+ if test x$enable_gtk_doc = xyes; then
-+ if test "$have_gtk_doc" != yes; then
-+ enable_gtk_doc=no
-+ fi
-+ fi
-+
-+ AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
-+ AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, test -n "$LIBTOOL")
-+])
diff --git a/packages/atk/atk.inc b/packages/atk/atk.inc
index e47a431e5c..5f81cdf67e 100644
--- a/packages/atk/atk.inc
+++ b/packages/atk/atk.inc
@@ -1,13 +1,14 @@
-DEPENDS = "glib-2.0 gtk-doc-native"
DESCRIPTION = "An accessibility toolkit for GNOME."
SECTION = "x11/libs"
PRIORITY = "optional"
LICENSE = "LGPL"
+DEPENDS = "glib-2.0 gtk-doc-native"
+
inherit autotools pkgconfig
EXTRA_OECONF = "--disable-glibtest"
-CFLAGS_append = " -I${STAGING_INCDIR}/glib-2.0 \
- -I${STAGING_INCDIR}/glib-2.0/glib \
- -I${STAGING_INCDIR}/glib-2.0/gobject"
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/atk/atk_1.10.3.bb b/packages/atk/atk_1.10.3.bb
deleted file mode 100644
index ab359172a1..0000000000
--- a/packages/atk/atk_1.10.3.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require atk.inc
-
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.8/atk-${PV}.tar.bz2"
-
-do_stage () {
- oe_libinstall -so -C atk libatk-1.0 ${STAGING_LIBDIR}
- autotools_stage_includes
-}
diff --git a/packages/atk/atk_1.18.0.bb b/packages/atk/atk_1.18.0.bb
new file mode 100644
index 0000000000..116d8cabff
--- /dev/null
+++ b/packages/atk/atk_1.18.0.bb
@@ -0,0 +1,8 @@
+require atk.inc
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/atk/1.18/atk-${PV}.tar.bz2"
+
+do_stage () {
+ oe_libinstall -so -C atk libatk-1.0 ${STAGING_LIBDIR}
+ autotools_stage_includes
+}
diff --git a/packages/atk/atk_1.19.3.bb b/packages/atk/atk_1.19.3.bb
index 52136682d7..28adc02ea9 100644
--- a/packages/atk/atk_1.19.3.bb
+++ b/packages/atk/atk_1.19.3.bb
@@ -2,7 +2,13 @@ require atk.inc
SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/atk/1.19/atk-${PV}.tar.bz2"
+CFLAGS_append = "\
+ -I${STAGING_INCDIR}/glib-2.0 \
+ -I${STAGING_INCDIR}/glib-2.0/glib \
+ -I${STAGING_INCDIR}/glib-2.0/gobject \
+ "
+
do_stage () {
- oe_libinstall -so -C atk libatk-1.0 ${STAGING_LIBDIR}
- autotools_stage_includes
+ oe_libinstall -so -C atk libatk-1.0 ${STAGING_LIBDIR}
+ autotools_stage_includes
}
diff --git a/packages/atk/atk_1.2.0.bb b/packages/atk/atk_1.2.0.bb
deleted file mode 100644
index 767c13fb4d..0000000000
--- a/packages/atk/atk_1.2.0.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-require atk.inc
-
-SRC_URI = "${GNOME_MIRROR}/atk/1.2/atk-${PV}.tar.bz2 \
- file://m4.patch;patch=1"
-
-do_stage () {
- oe_libinstall -so -C atk libatk-1.0 ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/atk
- install -m 0644 atk/atkaction.h ${STAGING_INCDIR}/atk/atkaction.h
- install -m 0644 atk/atkcomponent.h ${STAGING_INCDIR}/atk/atkcomponent.h
- install -m 0644 atk/atkdocument.h ${STAGING_INCDIR}/atk/atkdocument.h
- install -m 0644 atk/atkeditabletext.h ${STAGING_INCDIR}/atk/atkeditabletext.h
- install -m 0644 atk/atk-enum-types.h ${STAGING_INCDIR}/atk/atk-enum-types.h
- install -m 0644 atk/atkgobjectaccessible.h ${STAGING_INCDIR}/atk/atkgobjectaccessible.h
- install -m 0644 atk/atk.h ${STAGING_INCDIR}/atk/atk.h
- install -m 0644 atk/atkhyperlink.h ${STAGING_INCDIR}/atk/atkhyperlink.h
- install -m 0644 atk/atkhypertext.h ${STAGING_INCDIR}/atk/atkhypertext.h
- install -m 0644 atk/atkimage.h ${STAGING_INCDIR}/atk/atkimage.h
- install -m 0644 atk/atknoopobjectfactory.h ${STAGING_INCDIR}/atk/atknoopobjectfactory.h
- install -m 0644 atk/atknoopobject.h ${STAGING_INCDIR}/atk/atknoopobject.h
- install -m 0644 atk/atkobjectfactory.h ${STAGING_INCDIR}/atk/atkobjectfactory.h
- install -m 0644 atk/atkobject.h ${STAGING_INCDIR}/atk/atkobject.h
- install -m 0644 atk/atkregistry.h ${STAGING_INCDIR}/atk/atkregistry.h
- install -m 0644 atk/atkrelation.h ${STAGING_INCDIR}/atk/atkrelation.h
- install -m 0644 atk/atkrelationset.h ${STAGING_INCDIR}/atk/atkrelationset.h
- install -m 0644 atk/atkrelationtype.h ${STAGING_INCDIR}/atk/atkrelationtype.h
- install -m 0644 atk/atkselection.h ${STAGING_INCDIR}/atk/atkselection.h
- install -m 0644 atk/atkstate.h ${STAGING_INCDIR}/atk/atkstate.h
- install -m 0644 atk/atkstateset.h ${STAGING_INCDIR}/atk/atkstateset.h
- install -m 0644 atk/atkstreamablecontent.h ${STAGING_INCDIR}/atk/atkstreamablecontent.h
- install -m 0644 atk/atktable.h ${STAGING_INCDIR}/atk/atktable.h
- install -m 0644 atk/atktext.h ${STAGING_INCDIR}/atk/atktext.h
- install -m 0644 atk/atkutil.h ${STAGING_INCDIR}/atk/atkutil.h
- install -m 0644 atk/atkvalue.h ${STAGING_INCDIR}/atk/atkvalue.h
-}
diff --git a/packages/atk/atk_1.20.0.bb b/packages/atk/atk_1.20.0.bb
index a909e0eb61..bb64492337 100644
--- a/packages/atk/atk_1.20.0.bb
+++ b/packages/atk/atk_1.20.0.bb
@@ -1,16 +1,6 @@
-DESCRIPTION = "An accessibility toolkit for GNOME."
-SECTION = "x11/libs"
-PRIORITY = "optional"
-LICENSE = "LGPL"
-
-DEPENDS = "glib-2.0 gtk-doc-native"
+require atk.inc
SRC_URI = "http://download.gnome.org/sources/atk/1.20/${PN}-${PV}.tar.bz2"
-inherit autotools pkgconfig
-EXTRA_OECONF = "--disable-glibtest"
-do_stage () {
- autotools_stage_all
-}
diff --git a/packages/atk/atk_1.6.0.bb b/packages/atk/atk_1.6.0.bb
deleted file mode 100644
index 320a205d9f..0000000000
--- a/packages/atk/atk_1.6.0.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-require atk.inc
-
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.4/atk-${PV}.tar.bz2 \
- file://gtk-doc.patch;patch=1"
-
-do_stage () {
- oe_libinstall -so -C atk libatk-1.0 ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/atk
- install -m 0644 atk/atkaction.h ${STAGING_INCDIR}/atk/atkaction.h
- install -m 0644 atk/atkcomponent.h ${STAGING_INCDIR}/atk/atkcomponent.h
- install -m 0644 atk/atkdocument.h ${STAGING_INCDIR}/atk/atkdocument.h
- install -m 0644 atk/atkeditabletext.h ${STAGING_INCDIR}/atk/atkeditabletext.h
- install -m 0644 atk/atk-enum-types.h ${STAGING_INCDIR}/atk/atk-enum-types.h
- install -m 0644 atk/atkgobjectaccessible.h ${STAGING_INCDIR}/atk/atkgobjectaccessible.h
- install -m 0644 atk/atk.h ${STAGING_INCDIR}/atk/atk.h
- install -m 0644 atk/atkhyperlink.h ${STAGING_INCDIR}/atk/atkhyperlink.h
- install -m 0644 atk/atkhypertext.h ${STAGING_INCDIR}/atk/atkhypertext.h
- install -m 0644 atk/atkimage.h ${STAGING_INCDIR}/atk/atkimage.h
- install -m 0644 atk/atknoopobjectfactory.h ${STAGING_INCDIR}/atk/atknoopobjectfactory.h
- install -m 0644 atk/atknoopobject.h ${STAGING_INCDIR}/atk/atknoopobject.h
- install -m 0644 atk/atkobjectfactory.h ${STAGING_INCDIR}/atk/atkobjectfactory.h
- install -m 0644 atk/atkobject.h ${STAGING_INCDIR}/atk/atkobject.h
- install -m 0644 atk/atkregistry.h ${STAGING_INCDIR}/atk/atkregistry.h
- install -m 0644 atk/atkrelation.h ${STAGING_INCDIR}/atk/atkrelation.h
- install -m 0644 atk/atkrelationset.h ${STAGING_INCDIR}/atk/atkrelationset.h
- install -m 0644 atk/atkrelationtype.h ${STAGING_INCDIR}/atk/atkrelationtype.h
- install -m 0644 atk/atkselection.h ${STAGING_INCDIR}/atk/atkselection.h
- install -m 0644 atk/atkstate.h ${STAGING_INCDIR}/atk/atkstate.h
- install -m 0644 atk/atkstateset.h ${STAGING_INCDIR}/atk/atkstateset.h
- install -m 0644 atk/atkstreamablecontent.h ${STAGING_INCDIR}/atk/atkstreamablecontent.h
- install -m 0644 atk/atktable.h ${STAGING_INCDIR}/atk/atktable.h
- install -m 0644 atk/atktext.h ${STAGING_INCDIR}/atk/atktext.h
- install -m 0644 atk/atkutil.h ${STAGING_INCDIR}/atk/atkutil.h
- install -m 0644 atk/atkvalue.h ${STAGING_INCDIR}/atk/atkvalue.h
-}
diff --git a/packages/atk/atk_1.6.1.bb b/packages/atk/atk_1.6.1.bb
deleted file mode 100644
index afc21753d5..0000000000
--- a/packages/atk/atk_1.6.1.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require atk.inc
-
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.4/atk-${PV}.tar.bz2"
-
-do_stage () {
- oe_libinstall -so -C atk libatk-1.0 ${STAGING_LIBDIR}
- autotools_stage_includes
-}
diff --git a/packages/atk/atk_1.9.0.bb b/packages/atk/atk_1.9.0.bb
deleted file mode 100644
index 557858318d..0000000000
--- a/packages/atk/atk_1.9.0.bb
+++ /dev/null
@@ -1,8 +0,0 @@
-require atk.inc
-
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.6/atk-${PV}.tar.bz2"
-
-do_stage () {
- oe_libinstall -so -C atk libatk-1.0 ${STAGING_LIBDIR}
- autotools_stage_includes
-}
diff --git a/packages/atmelwlandriver/atmelwlandriver_3.4.1.0.bb b/packages/atmelwlandriver/atmelwlandriver_3.4.1.0.bb
index 705ab532fc..136f6ca42a 100644
--- a/packages/atmelwlandriver/atmelwlandriver_3.4.1.0.bb
+++ b/packages/atmelwlandriver/atmelwlandriver_3.4.1.0.bb
@@ -12,7 +12,7 @@ PR = "r2"
inherit module
SECTION = "base"
-PACKAGES = "atmelwlandriver-pcmcia atmelwlandriver-usb"
+PACKAGES = "${PN}-dbg atmelwlandriver-pcmcia atmelwlandriver-usb"
FILES_atmelwlandriver-pcmcia = "${base_libdir}/modules/${KERNEL_VERSION}/drivers/net/wireless/atmel/pcmf502rd.o ${sysconfdir}/pcmcia/pcmf502rd.conf"
FILES_atmelwlandriver-usb = "${base_libdir}/modules/${KERNEL_VERSION}/drivers/net/wireless/atmel/usbvnetr.o"
diff --git a/packages/audiofile/audiofile_0.2.6.bb b/packages/audiofile/audiofile_0.2.6.bb
index bfa113dc2d..64a078c43b 100644
--- a/packages/audiofile/audiofile_0.2.6.bb
+++ b/packages/audiofile/audiofile_0.2.6.bb
@@ -1,16 +1,11 @@
-PR = "r6"
-SECTION = "libs"
-LICENSE = "LGPL GPL"
DESCRIPTION = "The Audio File Library provides a uniform and elegant \
API for accessing a variety of audio file formats, such as AIFF/AIFF-C, \
WAVE, NeXT/Sun .snd/.au, Berkeley/IRCAM/CARL Sound File, Audio Visual \
Research, Amiga IFF/8SVX, and NIST SPHERE."
-
-PACKAGES += "${PN}-bin"
-FILES_${PN} = "${libdir}/libaudiofile*.so.*"
-FILES_${PN}-dev += "${bindir}/*-config"
-FILES_${PN}-bin += "${bindir}"
+SECTION = "libs"
+LICENSE = "LGPL GPL"
RPROVIDES_${PN} += "audiofile"
+PR = "r6"
SRC_URI = "http://www.68k.org/~michael/audiofile/audiofile-${PV}.tar.gz"
@@ -21,3 +16,8 @@ do_stage () {
oe_libinstall -C libaudiofile libaudiofile ${STAGING_LIBDIR}
install -m 0644 audiofile.m4 ${STAGING_DATADIR}/aclocal/
}
+
+PACKAGES += "${PN}-bin"
+FILES_${PN} = "${libdir}/libaudiofile*.so.*"
+FILES_${PN}-dev += "${bindir}/*-config"
+FILES_${PN}-bin += "${bindir}"
diff --git a/packages/avahi/avahi-ui_0.6.21.bb b/packages/avahi/avahi-ui_0.6.21.bb
index 1159b8ead4..add8de4db4 100644
--- a/packages/avahi/avahi-ui_0.6.21.bb
+++ b/packages/avahi/avahi-ui_0.6.21.bb
@@ -17,4 +17,4 @@ do_stage() {
PACKAGES = "${PN} ${PN}-dbg"
FILES_${PN} = "${libdir}/libavahi-ui*.so.*"
-FILES_${PN}-dbg = "${libdir}/.debug/libavah-ui*"
+FILES_${PN}-dbg += "${libdir}/.debug/libavah-ui*"
diff --git a/packages/avahi/avahi.inc b/packages/avahi/avahi.inc
index 3864dc5135..ae03d00e05 100644
--- a/packages/avahi/avahi.inc
+++ b/packages/avahi/avahi.inc
@@ -6,7 +6,7 @@ PRIORITY = "optional"
LICENSE = "GPL"
PR = "r5"
-DEPENDS = "expat libdaemon dbus glib-2.0"
+DEPENDS = "expat virtual/libintl libdaemon dbus glib-2.0"
# uclibc has no nss
RRECOMMENDS_avahi-daemon_append_linux = "libnss-mdns"
@@ -22,10 +22,14 @@ inherit autotools pkgconfig update-rc.d
RDEPENDS_append = ""
# TODO: build and enable all the extra stuff avahi offers
-EXTRA_OECONF = "--with-distro=debian --disable-gdbm ${AVAHI_GTK} --disable-mono --disable-monodoc --disable-qt3 --disable-qt4 ${AVAHI_PYTHON}"
+EXTRA_OECONF = "--with-distro=debian --disable-nls --disable-gdbm ${AVAHI_GTK} --disable-mono --disable-monodoc --disable-qt3 --disable-qt4 ${AVAHI_PYTHON}"
AVAHI_PYTHON = "--disable-python"
AVAHI_GTK = "--disable-gtk"
+LDFLAGS_append_linux-uclibc = " -lintl"
+LDFLAGS_append_linux-uclibcgnueabi = " -lintl "
+LDFLAGS_append_uclinux-uclibc = " -lintl"
+
PACKAGES =+ "avahi-daemon avahi-discover libavahi-common libavahi-core libavahi-client avahi-dnsconfd libavahi-glib libavahi-ui avahi-discover-standalone avahi-autoipd avahi-utils"
FILES_libavahi-common = "${libdir}/libavahi-common.so.*"
@@ -45,10 +49,11 @@ FILES_avahi-dnsconfd = "${sbindir}/avahi-dnsconfd \
${sysconfdir}/avahi/avahi-dnsconfd.action \
${sysconfdir}/init.d/avahi-dnsconfd"
FILES_libavahi-glib = "${libdir}/libavahi-glib.so.*"
+FILES_libavahi-gobject = "${libdir}/libavahi-gobject.so.*"
FILES_avahi-utils = "${bindir}/avahi-*"
FILES_avahi-autoipd = "${sbindir}/avahi-autoipd \
${sysconfdir}/avahi/avahi-autoipd.action \
- ${sysconfdir}/udhcpc.d/*avahi-autoipd"
+ ${sysconfdir}/udhcpc.d/*avahi-autoipd"
FILES_python-avahi = "${libdir}/python*/site-packages/avahi/*"
FILES_avahi-discover = "${bindir}/avahi-discover \
${datadir}/applications/avahi-discover.desktop \
diff --git a/packages/avahi/avahi_0.6.21.bb b/packages/avahi/avahi_0.6.21.bb
index fa3fef039e..2c30fbc2c8 100644
--- a/packages/avahi/avahi_0.6.21.bb
+++ b/packages/avahi/avahi_0.6.21.bb
@@ -2,3 +2,4 @@ require avahi.inc
PR = "r1"
SRC_URI += "file://dbus-pre-1.1.1-support.patch;patch=1"
+SRC_URI += "file://avr32-ipv6-fix.patch;patch=1"
diff --git a/packages/avahi/avahi_0.6.22.bb b/packages/avahi/avahi_0.6.22.bb
new file mode 100644
index 0000000000..15f56ffa95
--- /dev/null
+++ b/packages/avahi/avahi_0.6.22.bb
@@ -0,0 +1,5 @@
+require avahi.inc
+
+DEPENDS += "intltool-native"
+
+PACKAGES =+ "libavahi-gobject"
diff --git a/packages/avahi/files/avr32-ipv6-fix.patch b/packages/avahi/files/avr32-ipv6-fix.patch
new file mode 100644
index 0000000000..f0710a1002
--- /dev/null
+++ b/packages/avahi/files/avr32-ipv6-fix.patch
@@ -0,0 +1,42 @@
+--- /tmp/socket.c 2007-09-14 14:03:01.395330465 +0200
++++ avahi-0.6.21/avahi-core/socket.c 2007-09-14 14:08:42.081140297 +0200
+@@ -66,6 +66,39 @@
+ #endif
+ #endif
+
++#define IPV6_ADDRFORM 1
++#define IPV6_2292PKTINFO 2
++#define IPV6_2292HOPOPTS 3
++#define IPV6_2292DSTOPTS 4
++#define IPV6_2292RTHDR 5
++#define IPV6_2292PKTOPTIONS 6
++#define IPV6_CHECKSUM 7
++#define IPV6_2292HOPLIMIT 8
++#define IPV6_NEXTHOP 9
++#define IPV6_AUTHHDR 10 /* obsolete */
++#define IPV6_FLOWINFO 11
++
++#define IPV6_UNICAST_HOPS 16
++#define IPV6_MULTICAST_IF 17
++#define IPV6_MULTICAST_HOPS 18
++#define IPV6_MULTICAST_LOOP 19
++#define IPV6_ADD_MEMBERSHIP 20
++#define IPV6_DROP_MEMBERSHIP 21
++#define IPV6_ROUTER_ALERT 22
++#define IPV6_MTU_DISCOVER 23
++#define IPV6_MTU 24
++#define IPV6_RECVERR 25
++#define IPV6_V6ONLY 26
++#define IPV6_JOIN_ANYCAST 27
++#define IPV6_LEAVE_ANYCAST 28
++
++/* IPV6_MTU_DISCOVER values */
++#define IPV6_PMTUDISC_DONT 0
++#define IPV6_PMTUDISC_WANT 1
++#define IPV6_PMTUDISC_DO 2
++#define IPV6_PMTUDISC_PROBE 3
++
++
+ static void mdns_mcast_group_ipv4(struct sockaddr_in *ret_sa) {
+ assert(ret_sa);
+
diff --git a/packages/avetanabt/avetanabt_20060413.bb b/packages/avetanabt/avetanabt_20060413.bb
index 54e3d845bb..cee5fc0849 100644
--- a/packages/avetanabt/avetanabt_20060413.bb
+++ b/packages/avetanabt/avetanabt_20060413.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "avetanaBT: Bluetooth API implementation for Java (JSR-82)"
SECTION = "devel"
-DEPENDS = "findutils-native jikes-native kaffeh-native fastjar-native bluez-libs classpath"
+DEPENDS = "findutils-native virtual/javac-native kaffeh-native fastjar-native bluez-libs classpath"
LICENSE = "GPL"
HOMEPAGE = "http://sourceforge.net/projects/avetanabt/"
@@ -10,7 +10,6 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/avetanabt/avetanaBluetooth-${PV}.tgz"
S = "${WORKDIR}/avetanabt"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/libavetanaBT.so ${datadir}/avetanabt/avetanaBT.jar"
do_compile() {
@@ -22,9 +21,8 @@ do_compile() {
rm -fr build/*
# generate classes
- # javac -> jikes
${STAGING_BINDIR_NATIVE}/find {de,javax,com} -iname *.java > file.list
- ${STAGING_BINDIR_NATIVE}/jikes -verbose --bootclasspath ${STAGING_DATADIR_NATIVE}/kaffeh/rt.jar -d build @file.list
+ ${STAGING_BINDIR_NATIVE}/javac -verbose -bootclasspath ${STAGING_DATADIR_NATIVE}/kaffeh/rt.jar -d build @file.list
# create own version.xml (add version information available at runtime)
head -n 4 version.xml >> build/version.xml
diff --git a/packages/avetanabt/avetanabt_cvs.bb b/packages/avetanabt/avetanabt_cvs.bb
index a8f795989b..44c91666be 100644
--- a/packages/avetanabt/avetanabt_cvs.bb
+++ b/packages/avetanabt/avetanabt_cvs.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "avetanaBT: Bluetooth API implementation for Java (JSR-82)"
SECTION = "devel"
-DEPENDS = "findutils-native jikes-native kaffeh-native fastjar-native bluez-libs classpath"
+DEPENDS = "findutils-native virtual/javac-native kaffeh-native fastjar-native bluez-libs classpath"
LICENSE = "GPL"
HOMEPAGE = "http://sourceforge.net/projects/avetanabt/"
@@ -13,7 +13,6 @@ SRC_URI = "cvs://anonymous@avetanabt.cvs.sourceforge.net/cvsroot/avetanabt;modul
S = "${WORKDIR}/avetanabt"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/libavetanaBT.so ${datadir}/avetanabt/avetanaBT.jar"
do_compile() {
@@ -25,9 +24,8 @@ do_compile() {
rm -fr build/*
# generate classes
- # javac -> jikes
${STAGING_BINDIR_NATIVE}/find {de,javax,com} -iname *.java > file.list
- ${STAGING_BINDIR_NATIVE}/jikes -verbose --bootclasspath ${STAGING_DATADIR_NATIVE}/kaffeh/rt.jar -d build @file.list
+ ${STAGING_BINDIR_NATIVE}/javac -verbose -bootclasspath ${STAGING_DATADIR_NATIVE}/kaffeh/rt.jar -d build @file.list
# create own version.xml (add version information available at runtime)
head -n 4 version.xml >> build/version.xml
diff --git a/packages/fakeroot/fakeroot-1.8.3/.mtn2git_empty b/packages/backsaver/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/fakeroot/fakeroot-1.8.3/.mtn2git_empty
+++ b/packages/backsaver/.mtn2git_empty
diff --git a/packages/backsaver/backsaver_1.0.bb b/packages/backsaver/backsaver_1.0.bb
new file mode 100644
index 0000000000..a63f9d7f60
--- /dev/null
+++ b/packages/backsaver/backsaver_1.0.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Lightweight backlight saver daemon"
+SECTION = "base"
+LICENSE="GPL"
+
+PR = "r0"
+
+SRC_URI = "file://Makefile \
+ file://backsaver.c"
+
+S = ${WORKDIR}
+
+do_install () {
+ oe_runmake 'prefix=${D}' install
+}
diff --git a/packages/fakeroot/fakeroot-native-1.8.3/.mtn2git_empty b/packages/backsaver/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/fakeroot/fakeroot-native-1.8.3/.mtn2git_empty
+++ b/packages/backsaver/files/.mtn2git_empty
diff --git a/packages/backsaver/files/Makefile b/packages/backsaver/files/Makefile
new file mode 100644
index 0000000000..dd4d2b0875
--- /dev/null
+++ b/packages/backsaver/files/Makefile
@@ -0,0 +1,8 @@
+backsaver: backsaver.o
+
+backsaver.o: backsaver.c
+
+install:
+ install -d ${prefix}/usr/bin/
+ # Needs to be installed suid to access sysfs & dev/input
+ install -m 4755 backsaver ${prefix}/usr/bin/
diff --git a/packages/backsaver/files/backsaver.c b/packages/backsaver/files/backsaver.c
new file mode 100644
index 0000000000..3f030b9dd9
--- /dev/null
+++ b/packages/backsaver/files/backsaver.c
@@ -0,0 +1,256 @@
+/*
+ * backsaver - Small backlight power saver daemon
+ *
+ * This app relies on contemporary Linux 2.6 intefaces, like
+ * backlight class dev and generic input devices. Legacy interfaces
+ * are not supported by design.
+ *
+ * Copyright (C) 2007, 2008 Paul Sokolovsky <pmiscml@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <getopt.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int opt_verbose;
+int opt_timeout = 2;
+int opt_power;
+int opt_brightness = -1;
+
+char readbuf[256];
+fd_set read_fds;
+fd_set work_fds;
+int fds[32];
+
+int bl_state = 1;
+
+#define BL_PATH "/sys/class/backlight/"
+
+/* Backlight device properties */
+char bldev_brightness_path[256] = BL_PATH;
+char bldev_power_path[256] = BL_PATH;
+int bldev_max_brightness;
+int bldev_saved_brightness;
+int bldev_dim_brightness;
+
+void fatal(char *msg)
+{
+ fprintf(stderr, "%s\n", msg);
+ exit(1);
+}
+
+int sysfs_get_value(char *fname)
+{
+ char buf[64];
+ int fd = open(fname, O_RDONLY);
+ int sz = read(fd, buf, sizeof(buf) - 1);
+ buf[sz] = 0;
+ close(fd);
+ return atoi(buf);
+}
+
+void sysfs_set_value(char *fname, int val)
+{
+ char buf[64];
+ int fd = open(fname, O_WRONLY);
+ int sz = sprintf(buf, "%d\n", val);
+ write(fd, buf, sz);
+ close(fd);
+}
+
+char *bldev_scan()
+{
+ static char name[256];
+ DIR *dir;
+ struct dirent *de;
+ int more_than_one = 0;
+
+ dir = opendir(BL_PATH);
+ if (!dir)
+ fatal("Backlight device class does not seem to be support by kernel (" BL_PATH " is absent)");
+
+ *name = 0;
+ while (de = readdir(dir)) {
+ if (de->d_name[0] == '.')
+ continue;
+ if (*name == 0) {
+ strcpy(name, de->d_name);
+ } else {
+ more_than_one = 1;
+ break;
+ }
+ }
+
+ closedir(dir);
+ if (*name == 0)
+ fatal("There does not seem to be any backlight device available (" BL_PATH " is empty)");
+ if (more_than_one)
+ fatal("There seems to be several backlight devices available, use --device= option");
+
+ return name;
+}
+
+void bldev_init(char *bldev)
+{
+ strcat(bldev_brightness_path, bldev);
+ strcat(bldev_brightness_path, "/brightness");
+ strcat(bldev_power_path, bldev);
+ strcat(bldev_power_path, "/power");
+
+ char buf[PATH_MAX];
+ memcpy(buf, BL_PATH, sizeof(BL_PATH));
+ strcat(buf, bldev);
+ strcat(buf, "/max_brightness");
+ bldev_max_brightness = sysfs_get_value(buf);
+
+ bldev_dim_brightness = bldev_max_brightness * opt_brightness / 100;
+}
+
+void set_backlight(int state)
+{
+ if (!bl_state) {
+ if (opt_verbose)
+ printf("BL off\n");
+ if (opt_power) {
+ sysfs_set_value(bldev_power_path, 4);
+ } else {
+ bldev_saved_brightness = sysfs_get_value(bldev_brightness_path);
+ sysfs_set_value(bldev_brightness_path, bldev_dim_brightness);
+ }
+ } else {
+ if (opt_verbose)
+ printf("BL on\n");
+ if (opt_power) {
+ sysfs_set_value(bldev_power_path, 0);
+ } else {
+ sysfs_set_value(bldev_brightness_path, bldev_saved_brightness);
+ }
+ }
+}
+
+#define INPUT_PATH "/dev/input/"
+
+int main_loop(int argc, char *argv[], int argstart)
+{
+ fd_set read_fds;
+ struct timeval timeout;
+ int i, maxfd = 0, numfd = 0;
+
+ FD_ZERO(&read_fds);
+
+ if (argstart == argc) {
+ static char path[256] = INPUT_PATH;
+ DIR *dir;
+ struct dirent *de;
+ struct stat stat;
+
+ dir = opendir(INPUT_PATH);
+ if (!dir)
+ fatal("Cannot open generic input device directory (" INPUT_PATH " is absent)");
+
+ while (de = readdir(dir)) {
+ if (de->d_name[0] == '.')
+ continue;
+ strcpy(path + sizeof(INPUT_PATH) - 1, de->d_name);
+
+ if (lstat(path, &stat))
+ fatal("Cannot stat input device to monitor");
+ if (S_ISLNK(stat.st_mode)) {
+ if (opt_verbose)
+ printf("Skipping symlink %s\n", path);
+ continue;
+ }
+ if (opt_verbose)
+ printf("Using %s\n", path);
+
+ int fd = open(path, O_RDONLY);
+ if (fd == -1)
+ fatal("Cannot open input device to monitor");
+ if (fd > maxfd)
+ maxfd = fd;
+ fds[numfd++] = fd;
+ FD_SET(fd, &read_fds);
+ }
+
+ closedir(dir);
+ } else {
+ for (i = argstart; i < argc; i++) {
+ if (opt_verbose)
+ printf("Using: %s\n", argv[i]);
+ int fd = open(argv[i], O_RDONLY);
+ if (fd == -1)
+ fatal("Cannot open input device to monitor");
+ if (fd > maxfd)
+ maxfd = fd;
+ fds[numfd++] = fd;
+ FD_SET(fd, &read_fds);
+ }
+ }
+
+ timeout.tv_usec = 0;
+
+ while (1) {
+ memcpy(&work_fds, &read_fds, sizeof(read_fds));
+ timeout.tv_sec = opt_timeout;
+ i = select(maxfd + 1, &work_fds, NULL, NULL, &timeout);
+ if (opt_verbose)
+ printf("Select returned: %d\n", i);
+ if (i > 0) {
+ if (!bl_state) {
+ bl_state = 1;
+ set_backlight(bl_state);
+ }
+ for (i = 0; i < numfd; i++) {
+ if (FD_ISSET(fds[i], &work_fds)) {
+ int sz = read(fds[i], readbuf, sizeof(readbuf));
+ if (opt_verbose)
+ printf("Discarded %d bytes from fd %d\n", sz, fds[i]);
+ }
+ }
+ } else {
+ if (bl_state) {
+ bl_state = 0;
+ set_backlight(bl_state);
+ }
+ }
+
+ }
+}
+
+struct option options[] = {
+ { "verbose", no_argument, &opt_verbose, 1 },
+ { "timeout", required_argument, NULL, 't' },
+ { "power", no_argument, &opt_power, 1 },
+ { "brightness", required_argument, NULL, 'b' },
+ NULL
+};
+int main(int argc, char *argv[])
+{
+ int opt;
+ while ((opt = getopt_long(argc, argv, "?h", options, NULL)) != -1) {
+ switch (opt) {
+ case 't':
+ opt_timeout = atoi(optarg);
+ break;
+ case 'b':
+ opt_brightness = atoi(optarg);
+ break;
+ }
+ }
+ printf("%d\n", optind);
+
+ char *bldev = bldev_scan();
+ bldev_init(bldev);
+
+ return main_loop(argc, argv, optind);
+}
diff --git a/packages/base-files/base-files/fic-gta01/fstab b/packages/base-files/base-files/fic-gta01/fstab
index 4a0cc7750d..e5acb6a1eb 100644
--- a/packages/base-files/base-files/fic-gta01/fstab
+++ b/packages/base-files/base-files/fic-gta01/fstab
@@ -6,10 +6,8 @@ proc /proc proc defaults 0 0
# usb?
# Temporary
-tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /dev/shm tmpfs mode=0777 0 0
-tmpfs /media/ram tmpfs defaults 0 0
# microSD slot
/dev/mmcblk0p1 /media/card auto defaults,async,noauto 0 0
diff --git a/packages/base-files/base-files/fic-gta02/fstab b/packages/base-files/base-files/fic-gta02/fstab
index 4a0cc7750d..e5acb6a1eb 100644
--- a/packages/base-files/base-files/fic-gta02/fstab
+++ b/packages/base-files/base-files/fic-gta02/fstab
@@ -6,10 +6,8 @@ proc /proc proc defaults 0 0
# usb?
# Temporary
-tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/volatile tmpfs mode=0755 0 0
tmpfs /dev/shm tmpfs mode=0777 0 0
-tmpfs /media/ram tmpfs defaults 0 0
# microSD slot
/dev/mmcblk0p1 /media/card auto defaults,async,noauto 0 0
diff --git a/packages/fbvncserver/.mtn2git_empty b/packages/base-files/base-files/openprotium/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/fbvncserver/.mtn2git_empty
+++ b/packages/base-files/base-files/openprotium/.mtn2git_empty
diff --git a/packages/base-files/base-files/openprotium/fstab b/packages/base-files/base-files/openprotium/fstab
new file mode 100644
index 0000000000..96b0e2adb8
--- /dev/null
+++ b/packages/base-files/base-files/openprotium/fstab
@@ -0,0 +1,11 @@
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbfs /proc/bus/usb usbfs defaults 0 0
+#tmpfs /var/volatile tmpfs defaults 0 0
+tmpfs /dev/shm tmpfs mode=0777 0 0
+#tmpfs /media/ram tmpfs defaults 0 0
+
+# uncomment this if your device has a SD/MMC/Transflash slot
+#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
+
diff --git a/packages/base-files/base-files_3.0.14.bb b/packages/base-files/base-files_3.0.14.bb
index 21a83e98e5..8bfbb6702e 100644
--- a/packages/base-files/base-files_3.0.14.bb
+++ b/packages/base-files/base-files_3.0.14.bb
@@ -142,7 +142,7 @@ do_install_append_netbook-pro () {
mkdir -p ${D}/initrd
}
-PACKAGES = "${PN}-doc ${PN}"
+PACKAGES = "${PN}-dbg ${PN}-doc ${PN}"
FILES_${PN} = "/*"
FILES_${PN}-doc = "${docdir} ${datadir}/common-licenses"
diff --git a/packages/beep/beep_1.2.2.bb b/packages/beep/beep_1.2.2.bb
index 87c9ee16d6..759f74f8a0 100644
--- a/packages/beep/beep_1.2.2.bb
+++ b/packages/beep/beep_1.2.2.bb
@@ -10,7 +10,7 @@ SRC_URI = "http://johnath.com/beep/beep-${PV}.tar.gz"
SRC_URI += "file://linux-input.patch;patch=1"
S = "${WORKDIR}/beep-${PV}"
-PACKAGES = "${PN} ${PN}-doc"
+PACKAGES += "${PN} ${PN}-doc"
inherit autotools
diff --git a/packages/binutils/binutils-2.17/503-avr32-fix-got-offset-init.patch b/packages/binutils/binutils-2.17/503-avr32-fix-got-offset-init.patch
new file mode 100644
index 0000000000..66add3a47b
--- /dev/null
+++ b/packages/binutils/binutils-2.17/503-avr32-fix-got-offset-init.patch
@@ -0,0 +1,12 @@
+stelios@Athena:~/proj/oplinux-0.2/org.openembedded.dev/packages/binutils$ cat binutils-2.17/503-avr32-fix-got-offset-init.patch
+--- a/bfd/elf32-avr32.c 2007-05-31 17:00:13.000000000 +0200
++++ b/bfd/elf32-avr32.c 2007-05-30 14:07:25.000000000 +0200
+@@ -395,6 +395,8 @@ avr32_elf_link_hash_table_create(bfd *ab
+ /* Prevent the BFD core from creating bogus got_entry pointers */
+ ret->root.init_got_refcount.glist = NULL;
+ ret->root.init_plt_refcount.glist = NULL;
++ ret->root.init_got_offset.glist = NULL;
++ ret->root.init_plt_offset.glist = NULL;
+
+ return &ret->root.root;
+ } \ No newline at end of file
diff --git a/packages/binutils/binutils-cross-sdk_2.18.bb b/packages/binutils/binutils-cross-sdk_2.18.bb
index a045d9bc9c..81c84229b0 100644
--- a/packages/binutils/binutils-cross-sdk_2.18.bb
+++ b/packages/binutils/binutils-cross-sdk_2.18.bb
@@ -5,7 +5,9 @@ DEPENDS += "flex-native bison-native"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/binutils-${PV}"
EXTRA_OECONF = "--with-sysroot=${prefix}/${TARGET_SYS} \
--program-prefix=${TARGET_PREFIX}"
-PR = "r2"
+PR = "r3"
+
+FILES_${PN}-dbg += "${prefix}/${TARGET_SYS}/bin/.debug"
do_stage() {
:
diff --git a/packages/binutils/binutils_2.17.bb b/packages/binutils/binutils_2.17.bb
index 8d38f3a459..69e11497c2 100644
--- a/packages/binutils/binutils_2.17.bb
+++ b/packages/binutils/binutils_2.17.bb
@@ -1,6 +1,6 @@
require binutils.inc
-PR = "r1"
+PR = "r2"
SRC_URI = \
"http://ftp.gnu.org/gnu/binutils/binutils-${PV}.tar.bz2 \
@@ -21,6 +21,7 @@ SRC_URI += "\
http://avr32linux.org/twiki/pub/Main/DevelopmentTools/500-avr32.patch.gz;patch=1 \
http://avr32linux.org/twiki/pub/Main/DevelopmentTools/501-avr32-sreldyn-fix.patch.gz;patch=1 \
http://avr32linux.org/twiki/pub/Main/DevelopmentTools/502-avr32-bfd-dont-allow-direct-refs-to-bss.patch.gz;patch=1 \
+ file://503-avr32-fix-got-offset-init.patch;patch=1 \
"
# Zecke's OSX fixes
diff --git a/packages/bluez/bluez-cups-backend_3.18.bb b/packages/bluez/bluez-cups-backend_3.18.bb
index 64884fa904..d92b53220f 100644
--- a/packages/bluez/bluez-cups-backend_3.18.bb
+++ b/packages/bluez/bluez-cups-backend_3.18.bb
@@ -20,7 +20,6 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/cups/backend/bluetooth"
RDEPENDS_${PN} = "cups" \ No newline at end of file
diff --git a/packages/bluez/bluez-cups-backend_3.19.bb b/packages/bluez/bluez-cups-backend_3.19.bb
index 64884fa904..d92b53220f 100644
--- a/packages/bluez/bluez-cups-backend_3.19.bb
+++ b/packages/bluez/bluez-cups-backend_3.19.bb
@@ -20,7 +20,6 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/cups/backend/bluetooth"
RDEPENDS_${PN} = "cups" \ No newline at end of file
diff --git a/packages/bluez/bluez-cups-backend_3.20.bb b/packages/bluez/bluez-cups-backend_3.20.bb
index 64884fa904..d92b53220f 100644
--- a/packages/bluez/bluez-cups-backend_3.20.bb
+++ b/packages/bluez/bluez-cups-backend_3.20.bb
@@ -20,7 +20,6 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/cups/backend/bluetooth"
RDEPENDS_${PN} = "cups" \ No newline at end of file
diff --git a/packages/bluez/bluez-cups-backend_3.22.bb b/packages/bluez/bluez-cups-backend_3.22.bb
index 64884fa904..d92b53220f 100644
--- a/packages/bluez/bluez-cups-backend_3.22.bb
+++ b/packages/bluez/bluez-cups-backend_3.22.bb
@@ -20,7 +20,6 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/cups/backend/bluetooth"
RDEPENDS_${PN} = "cups" \ No newline at end of file
diff --git a/packages/bluez/bluez-cups-backend_3.23.bb b/packages/bluez/bluez-cups-backend_3.23.bb
index 64884fa904..46ca0becf0 100644
--- a/packages/bluez/bluez-cups-backend_3.23.bb
+++ b/packages/bluez/bluez-cups-backend_3.23.bb
@@ -1,5 +1,5 @@
require bluez-utils3.inc
-
+PR = "r1"
DEPENDS += "cups"
# see bluez-utils3.inc for the explanation of these option
@@ -20,7 +20,6 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/cups/backend/bluetooth"
RDEPENDS_${PN} = "cups" \ No newline at end of file
diff --git a/packages/bluez/bluez-cups-backend_3.24.bb b/packages/bluez/bluez-cups-backend_3.24.bb
new file mode 100644
index 0000000000..40e099642a
--- /dev/null
+++ b/packages/bluez/bluez-cups-backend_3.24.bb
@@ -0,0 +1,27 @@
+require bluez-utils3.inc
+
+PR = "r1"
+
+DEPENDS += "cups"
+
+# see bluez-utils3.inc for the explanation of these option
+EXTRA_OECONF = " \
+ --enable-bccmd \
+ --enable-hid2hci \
+ --disable-alsa \
+ --enable-cups \
+ --enable-glib \
+ --disable-sdpd \
+ --enable-network \
+ --enable-serial \
+ --enable-input \
+ --enable-audio \
+ --enable-echo \
+ --enable-configfile \
+ --enable-initscripts \
+ --enable-test \
+ "
+
+
+FILES_${PN} = "${libdir}/cups/backend/bluetooth"
+RDEPENDS_${PN} = "cups"
diff --git a/packages/fbvncserver/files/.mtn2git_empty b/packages/bluez/bluez-dtl1-workaround/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/fbvncserver/files/.mtn2git_empty
+++ b/packages/bluez/bluez-dtl1-workaround/.mtn2git_empty
diff --git a/packages/bluez/files/02dtl1_cs.sh b/packages/bluez/bluez-dtl1-workaround/02dtl1_cs.sh
index fefc72e07a..fefc72e07a 100644
--- a/packages/bluez/files/02dtl1_cs.sh
+++ b/packages/bluez/bluez-dtl1-workaround/02dtl1_cs.sh
diff --git a/packages/bluez/bluez-gnome_0.15.bb b/packages/bluez/bluez-gnome_0.15.bb
new file mode 100644
index 0000000000..e3aaeafeb3
--- /dev/null
+++ b/packages/bluez/bluez-gnome_0.15.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Bluetooth configuration applet"
+LICENSE = "GPL+LGPL"
+
+PR = "r1"
+
+DEPENDS = "dbus-glib gconf libnotify gtk+"
+RRECOMMENDS = "gnome-icon-theme"
+
+SRC_URI = "http://bluez.sourceforge.net/download/${P}.tar.gz"
+
+inherit autotools pkgconfig gconf
+
+FILES_${PN} += "${datadir}/gconf"
+
diff --git a/packages/bluez/bluez-gstreamer-plugin_3.19.bb b/packages/bluez/bluez-gstreamer-plugin_3.19.bb
index c5a1a9acee..123259b3a7 100644
--- a/packages/bluez/bluez-gstreamer-plugin_3.19.bb
+++ b/packages/bluez/bluez-gstreamer-plugin_3.19.bb
@@ -21,6 +21,5 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/gstreamer-0.10/libgstbluetooth.so"
diff --git a/packages/bluez/bluez-gstreamer-plugin_3.20.bb b/packages/bluez/bluez-gstreamer-plugin_3.20.bb
index c5a1a9acee..123259b3a7 100644
--- a/packages/bluez/bluez-gstreamer-plugin_3.20.bb
+++ b/packages/bluez/bluez-gstreamer-plugin_3.20.bb
@@ -21,6 +21,5 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/gstreamer-0.10/libgstbluetooth.so"
diff --git a/packages/bluez/bluez-gstreamer-plugin_3.22.bb b/packages/bluez/bluez-gstreamer-plugin_3.22.bb
index c5a1a9acee..123259b3a7 100644
--- a/packages/bluez/bluez-gstreamer-plugin_3.22.bb
+++ b/packages/bluez/bluez-gstreamer-plugin_3.22.bb
@@ -21,6 +21,5 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/gstreamer-0.10/libgstbluetooth.so"
diff --git a/packages/bluez/bluez-gstreamer-plugin_3.23.bb b/packages/bluez/bluez-gstreamer-plugin_3.23.bb
index c5a1a9acee..36e9ca3d91 100644
--- a/packages/bluez/bluez-gstreamer-plugin_3.23.bb
+++ b/packages/bluez/bluez-gstreamer-plugin_3.23.bb
@@ -1,5 +1,5 @@
require bluez-utils3.inc
-
+PR = "r1"
DEPENDS += "gstreamer gst-plugins-base "
# see bluez-utils3.inc for the explanation of these option
@@ -21,6 +21,5 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/gstreamer-0.10/libgstbluetooth.so"
diff --git a/packages/bluez/bluez-gstreamer-plugin_3.24.bb b/packages/bluez/bluez-gstreamer-plugin_3.24.bb
new file mode 100644
index 0000000000..53b7eb86f2
--- /dev/null
+++ b/packages/bluez/bluez-gstreamer-plugin_3.24.bb
@@ -0,0 +1,27 @@
+require bluez-utils3.inc
+
+PR = "r1"
+
+DEPENDS += "gstreamer gst-plugins-base "
+
+# see bluez-utils3.inc for the explanation of these option
+EXTRA_OECONF = " \
+ --enable-bccmd \
+ --enable-hid2hci \
+ --enable-alsa \
+ --disable-cups \
+ --enable-glib \
+ --enable-gstreamer \
+ --disable-sdpd \
+ --enable-network \
+ --enable-serial \
+ --enable-input \
+ --enable-audio \
+ --enable-echo \
+ --enable-configfile \
+ --enable-initscripts \
+ --enable-test \
+ "
+
+
+FILES_${PN} = "${libdir}/gstreamer-0.10/libgstbluetooth.so"
diff --git a/packages/bluez/bluez-libs_3.24.bb b/packages/bluez/bluez-libs_3.24.bb
new file mode 100644
index 0000000000..eb515b4aba
--- /dev/null
+++ b/packages/bluez/bluez-libs_3.24.bb
@@ -0,0 +1,4 @@
+require bluez-libs.inc
+
+PR = "r1"
+
diff --git a/packages/glibc/eglibc-svn/.mtn2git_empty b/packages/bluez/bluez-utils-3.23/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/glibc/eglibc-svn/.mtn2git_empty
+++ b/packages/bluez/bluez-utils-3.23/.mtn2git_empty
diff --git a/packages/bluez/bluez-utils-3.23/hciattach-ti-bts.patch b/packages/bluez/bluez-utils-3.23/hciattach-ti-bts.patch
new file mode 100644
index 0000000000..1b208f7979
--- /dev/null
+++ b/packages/bluez/bluez-utils-3.23/hciattach-ti-bts.patch
@@ -0,0 +1,477 @@
+--- bluez-utils-3.1/tools/hciattach.c.orig 2006-07-23 14:02:14.000000000 +0200
++++ bluez-utils-3.1/tools/hciattach.c 2006-07-23 14:06:29.000000000 +0200
+@@ -60,6 +60,8 @@
+ #define HCI_UART_3WIRE 2
+ #define HCI_UART_H4DS 3
+
++#include "ti_bts.h"
++
+ struct uart_t {
+ char *type;
+ int m_id;
+@@ -70,6 +72,7 @@
+ int flags;
+ char *bdaddr;
+ int (*init) (int fd, struct uart_t *u, struct termios *ti);
++ char *bts; /* bluetooth script */
+ };
+
+ #define FLOW_CTL 0x0001
+@@ -279,6 +282,114 @@
+ return 0;
+ }
+
++static int brf6150(int fd, struct uart_t *u, struct termios *ti)
++{
++ bts_t *bfp;
++ int i;
++ unsigned long vers;
++ unsigned char actionbuf[256];
++ unsigned char resp[128]; /* Response */
++ unsigned long count;
++ unsigned short atype;
++
++ if (u->bts == NULL) /* no script, ignore */
++ return 0;
++
++ bfp = bts_load_script( u->bts, &vers );
++ if (bfp == NULL)
++ return -1;
++
++ fprintf( stderr, "Loading BTS script version %lu\n", vers );
++
++ while ((count = bts_next_action( bfp, actionbuf,
++ sizeof actionbuf - 1, &atype )) != 0) {
++ if (atype == ACTION_REMARKS) {
++ if (actionbuf[0] != 0)
++ fprintf( stderr, "%s\n", actionbuf );
++ }
++ else if (atype == ACTION_SEND_COMMAND) {
++#if 0
++ fprintf( stderr, "ACTION_SEND_COMMAND: ", (int)atype );
++ for (i=0; i<count; i++) {
++ fprintf( stderr, "0x%02x ", actionbuf[i] );
++ }
++ fprintf( stderr, "\n" );
++#endif
++ int n;
++ n = write(fd, actionbuf, count);
++ if (n < 0 || n < count) {
++ perror("Failed to write TI action command");
++ return -1;
++ }
++ }
++ else if (atype == ACTION_WAIT_EVENT) {
++ action_wait_t *wait = (action_wait_t *)actionbuf;
++#if 0
++ fprintf( stderr, "ACTION_WAIT_EVENT: %u msec, %u size, data = ", wait->msec, wait->size );
++ for (i=0; i<wait->size; i++) {
++ fprintf( stderr, "0x%02x ", wait->data[i] );
++ }
++ fprintf( stderr, "\n" );
++#endif
++ usleep(wait->msec); /* seems they give usec, not msec */
++ /* Read reply. */
++ if ((count = read_hci_event(fd, resp, sizeof resp)) < 0) {
++ perror("Failed to read TI command response");
++ return -1;
++ }
++ if (count < wait->size) {
++ fprintf( stderr, "TI command response is short.");
++ }
++ for (i=0; i<wait->size; i++) {
++ if (i == 3) continue; /* ignore */
++ if (resp[i] != wait->data[i]) {
++ fprintf( stderr, "TI command response does not match expected result.\n" );
++ }
++ }
++ }
++ else if (atype == ACTION_SERIAL_PORT_PARAMETERS) {
++ action_serial_t *sercmd = (action_serial_t *)actionbuf;
++
++ /* Set actual baudrate */
++ fprintf( stderr,
++ "BTS changing baud rate to %u, flow control to %u\n",
++ sercmd->baud, sercmd->flow_control );
++
++ tcflush(fd, TCIOFLUSH);
++
++ if (sercmd->flow_control)
++ ti->c_cflag |= CRTSCTS;
++ else
++ ti->c_cflag &= ~CRTSCTS;
++ if (tcsetattr(fd, TCSANOW, ti) < 0) {
++ perror("Can't set port settings");
++ return -1;
++ }
++
++ u->speed = sercmd->baud;
++
++ tcflush(fd, TCIOFLUSH);
++ if (set_speed(fd, ti, sercmd->baud) < 0) {
++ perror("Can't set baud rate");
++ return -1;
++ }
++ }
++ else if (atype == ACTION_DELAY) {
++ action_delay_t *delay = (action_delay_t *)actionbuf;
++ usleep(delay->msec); /* seems they give usec, not msec */
++ }
++ else {
++ fprintf( stderr, "BTS action type = %d: ", (int)atype );
++ for (i=0; i<count; i++) {
++ fprintf( stderr, "0x%02x ", actionbuf[i] );
++ }
++ fprintf( stderr, "\n" );
++ }
++ }
++ bts_unload_script( bfp );
++ return 0;
++}
++
+ static int texas(int fd, struct uart_t *u, struct termios *ti)
+ {
+ struct timespec tm = {0, 50000};
+@@ -328,6 +439,17 @@
+ /* Print LMP subversion */
+ fprintf(stderr, "Texas module LMP sub-version : 0x%02x%02x\n", resp[14] & 0xFF, resp[13] & 0xFF);
+
++ if ((resp[14] >> 2) == 3) {
++ /* BRF6150 */
++ int err;
++
++ nanosleep(&tm, NULL);
++ if ((err = brf6150(fd, u, ti)) != 0) {
++ fprintf(stderr, "Texas module script failed (err=%d)\n", err);
++ return -1;
++ }
++ }
++
+ nanosleep(&tm, NULL);
+ return 0;
+ }
+@@ -1204,7 +1326,7 @@
+ {
+ printf("hciattach - HCI UART driver initialization utility\n");
+ printf("Usage:\n");
+- printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [bdaddr]\n");
++ printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [-S bts-script] <tty> <type | id> [speed] [flow|noflow] [bdaddr]\n");
+ printf("\thciattach -l\n");
+ }
+
+@@ -1219,11 +1341,12 @@
+ struct sigaction sa;
+ struct pollfd p;
+ char dev[PATH_MAX];
++ char *bts = NULL;
+
+ detach = 1;
+ printpid = 0;
+
+- while ((opt=getopt(argc, argv, "bnpt:s:l")) != EOF) {
++ while ((opt=getopt(argc, argv, "bnpt:s:S:l")) != EOF) {
+ switch(opt) {
+ case 'b':
+ send_break = 1;
+@@ -1245,6 +1368,10 @@
+ init_speed = atoi(optarg);
+ break;
+
++ case 'S':
++ bts = optarg;
++ break;
++
+ case 'l':
+ for (i = 0; uart[i].type; i++) {
+ printf("%-10s0x%04x,0x%04x\n", uart[i].type,
+@@ -1320,6 +1447,8 @@
+ if (init_speed)
+ u->init_speed = init_speed;
+
++ u->bts = bts;
++
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_flags = SA_NOCLDSTOP;
+ sa.sa_handler = sig_alarm;
+--- bluez-utils-3.1/tools/ti_bts.h.orig 2006-07-23 14:07:26.000000000 +0200
++++ bluez-utils-3.1/tools/ti_bts.h 2006-07-23 14:07:46.000000000 +0200
+@@ -0,0 +1,116 @@
++/*
++ * Copyright (c) 2005 Texas Instruments, Inc.
++ * Ported by SDG Systems, LLC
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation;
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++ *
++ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ * SOFTWARE IS DISCLAIMED.
++ *
++ */
++
++#ifndef BT_SCRIPT_H
++#define BT_SCRIPT_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/*
++ * Define the interface of Bluetooth Script
++ */
++
++typedef void bts_t;
++
++
++#define ACTION_SEND_COMMAND 1 /* Send out raw data (as is) */
++#define ACTION_WAIT_EVENT 2 /* Wait for data */
++#define ACTION_SERIAL_PORT_PARAMETERS 3
++#define ACTION_DELAY 4
++#define ACTION_RUN_SCRIPT 5
++#define ACTION_REMARKS 6
++
++/*
++ * Structure for ACTION_SEND_COMMAND
++ */
++typedef struct tagCActionCommand
++{
++ unsigned char data[1]; /* Data to send */
++} action_command_t;
++
++/*
++ * Structure for ACTION_WAIT_EVENT
++ */
++typedef struct tagCActionWaitEvent
++{
++ unsigned long msec; /* in milliseconds */
++ unsigned long size;
++ unsigned char data[1]; /* Data to wait for */
++} action_wait_t;
++
++
++/*
++ * Structure for ACTION_SERIAL_PORT_PARAMETERS
++ */
++typedef struct tagCActionSerialPortParameters
++{
++ unsigned long baud;
++ unsigned long flow_control;
++} action_serial_t;
++
++/* Flow Control Type */
++#define FCT_NONE 0
++#define FCT_HARDWARE 1
++
++#define DONT_CHANGE 0xFFFFFFFF /* For both baud rate and flow control */
++
++
++/*
++ * Structure for ACTION_DELAY
++ */
++typedef struct tagCActionDelay
++{
++ unsigned long msec; /* in milliseconds */
++} action_delay_t;
++
++/*
++ * Structure for ACTION_RUN_SCRIPT
++ */
++typedef struct tagCActionRunScript
++{
++ char filename[1];
++} action_run_t;
++
++/*
++ * Structure for ACTION_REMARKS
++ */
++typedef struct tagCActionRemarks
++{
++ char m_szRemarks[1];
++} action_remarks_t;
++
++
++const char *cis_create_filename(const unsigned char* cmdparms);
++bts_t * bts_load_script(const char* fname, unsigned long* version);
++unsigned long bts_next_action(const bts_t* bts_fp, unsigned char* action_buf,
++ unsigned long nMaxSize, unsigned short* ptype);
++void bts_unload_script(bts_t* bts_fp);
++
++#ifdef __cplusplus
++};
++#endif
++
++#endif /* BT_SCRIPT_H */
++
+--- bluez-utils-3.1/tools/ti_bts.c.orig 2006-07-23 14:07:28.000000000 +0200
++++ bluez-utils-3.1/tools/ti_bts.c 2006-07-23 14:07:46.000000000 +0200
+@@ -0,0 +1,149 @@
++/*
++ * Copyright (c) 2005 Texas Instruments, Inc.
++ * Ported by SDG Systems, LLC
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation;
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++ *
++ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ * SOFTWARE IS DISCLAIMED.
++ *
++ */
++
++
++#include <stdio.h>
++#include <stdlib.h>
++#include "ti_bts.h"
++
++#ifndef MAKEWORD
++#define MAKEWORD(a, b) ((unsigned short)(((unsigned char)(a)) | ((unsigned short)((unsigned char)(b))) << 8))
++#endif
++
++#define TI_MANUFACTURER_ID 13
++
++/*
++ * Common Init Script specific
++ */
++const char *
++cis_create_filename(const unsigned char* cmdparms)
++{
++ static char bts_file[50];
++
++ /* Check for TI's id */
++ unsigned short manfid = MAKEWORD(cmdparms[8], cmdparms[9]);
++
++ if (TI_MANUFACTURER_ID == manfid) {
++ unsigned short version = MAKEWORD(cmdparms[10], cmdparms[11]);
++
++ unsigned short chip = (version & 0x7C00) >> 10;
++ unsigned short min_ver = (version & 0x007F);
++ unsigned short maj_ver = (version & 0x0380) >> 7;
++
++ if (0 != (version & 0x8000)) {
++ maj_ver |= 0x0008;
++ }
++
++ sprintf( bts_file, "TIInit_%d.%d.%d.bts",
++ (int)chip, (int)maj_ver, (int)min_ver);
++
++ return &bts_file[0];
++ }
++ return NULL;
++}
++
++typedef struct tagCHeader
++{
++ unsigned long magic;
++ unsigned long version;
++ unsigned char future[24];
++} cheader_t;
++
++
++/* The value 0x42535442 stands for (in ASCII) BTSB */
++/* which is Bluetooth Script Binary */
++#define FILE_HEADER_MAGIC 0x42535442
++
++
++bts_t *
++bts_load_script(const char* fname, unsigned long* version)
++{
++ bts_t* bts = NULL;
++ FILE* fp = fopen(fname, "rb");
++
++ if (NULL != fp) {
++ /* Read header */
++ cheader_t header;
++
++ /* Read header */
++ if (1 == fread(&header, sizeof(header), 1, fp)) {
++ /* Check magic number for correctness */
++ if (header.magic == FILE_HEADER_MAGIC) {
++ /* If user wants the version number */
++ if (NULL != version) {
++ *version = header.version;
++ }
++ bts = (bts_t*)fp;
++ }
++ }
++ /* If failed reading the file, close it */
++ if (NULL == bts) {
++ fclose(fp);
++ }
++ }
++ return bts;
++}
++
++unsigned long
++bts_next_action(const bts_t* bts_fp, unsigned char* action_buf,
++ unsigned long nMaxSize, unsigned short* ptype)
++{
++ unsigned long bytes = 0;
++ FILE* fp = (FILE*)bts_fp;
++ unsigned char action_hdr[4];
++
++ if (bts_fp == NULL)
++ return 0;
++
++ /* Each Action has the following: */
++ /* UINT16 type of this action */
++ /* UINT16 size of rest */
++ /* BYTE[] action buffer (for HCI, includes the type byte e.g. 1 for hci command) */
++
++ if (1 == fread(&action_hdr[0], sizeof(action_hdr), 1, fp)) {
++ unsigned short type = *(unsigned short*)&action_hdr[0];
++ unsigned short size = *(unsigned short*)&action_hdr[2];
++
++ if (size <= nMaxSize) {
++ int nread = fread(action_buf, sizeof(action_buf[0]), size, fp);
++
++ if (nread == size) {
++ *ptype = type;
++ bytes = (unsigned long)size;
++ }
++ }
++ }
++
++ return bytes;
++}
++
++void
++bts_unload_script(bts_t* bts_fp)
++{
++ FILE* fp = (FILE*)bts_fp;
++
++ if (NULL != fp) {
++ fclose(fp);
++ }
++}
++
+--- bluez-utils-3.1/tools/Makefile.am.orig 2006-07-23 14:06:59.000000000 +0200
++++ bluez-utils-3.1/tools/Makefile.am 2006-07-23 14:07:18.000000000 +0200
+@@ -45,7 +45,7 @@
+
+ noinst_PROGRAMS = hcisecfilter ppporc
+
+-hciattach_SOURCES = hciattach.c hciattach_st.c
++hciattach_SOURCES = hciattach.c hciattach_st.c ti_bts.h ti_bts.c
+ hciattach_LDADD = @BLUEZ_LIBS@
+
+ hciconfig_SOURCES = hciconfig.c csr.h csr.c
diff --git a/packages/gnuplot/gnuplot-4.2.0/.mtn2git_empty b/packages/bluez/bluez-utils-3.24/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gnuplot/gnuplot-4.2.0/.mtn2git_empty
+++ b/packages/bluez/bluez-utils-3.24/.mtn2git_empty
diff --git a/packages/bluez/bluez-utils-3.24/hciattach-ti-bts.patch b/packages/bluez/bluez-utils-3.24/hciattach-ti-bts.patch
new file mode 100644
index 0000000000..1b208f7979
--- /dev/null
+++ b/packages/bluez/bluez-utils-3.24/hciattach-ti-bts.patch
@@ -0,0 +1,477 @@
+--- bluez-utils-3.1/tools/hciattach.c.orig 2006-07-23 14:02:14.000000000 +0200
++++ bluez-utils-3.1/tools/hciattach.c 2006-07-23 14:06:29.000000000 +0200
+@@ -60,6 +60,8 @@
+ #define HCI_UART_3WIRE 2
+ #define HCI_UART_H4DS 3
+
++#include "ti_bts.h"
++
+ struct uart_t {
+ char *type;
+ int m_id;
+@@ -70,6 +72,7 @@
+ int flags;
+ char *bdaddr;
+ int (*init) (int fd, struct uart_t *u, struct termios *ti);
++ char *bts; /* bluetooth script */
+ };
+
+ #define FLOW_CTL 0x0001
+@@ -279,6 +282,114 @@
+ return 0;
+ }
+
++static int brf6150(int fd, struct uart_t *u, struct termios *ti)
++{
++ bts_t *bfp;
++ int i;
++ unsigned long vers;
++ unsigned char actionbuf[256];
++ unsigned char resp[128]; /* Response */
++ unsigned long count;
++ unsigned short atype;
++
++ if (u->bts == NULL) /* no script, ignore */
++ return 0;
++
++ bfp = bts_load_script( u->bts, &vers );
++ if (bfp == NULL)
++ return -1;
++
++ fprintf( stderr, "Loading BTS script version %lu\n", vers );
++
++ while ((count = bts_next_action( bfp, actionbuf,
++ sizeof actionbuf - 1, &atype )) != 0) {
++ if (atype == ACTION_REMARKS) {
++ if (actionbuf[0] != 0)
++ fprintf( stderr, "%s\n", actionbuf );
++ }
++ else if (atype == ACTION_SEND_COMMAND) {
++#if 0
++ fprintf( stderr, "ACTION_SEND_COMMAND: ", (int)atype );
++ for (i=0; i<count; i++) {
++ fprintf( stderr, "0x%02x ", actionbuf[i] );
++ }
++ fprintf( stderr, "\n" );
++#endif
++ int n;
++ n = write(fd, actionbuf, count);
++ if (n < 0 || n < count) {
++ perror("Failed to write TI action command");
++ return -1;
++ }
++ }
++ else if (atype == ACTION_WAIT_EVENT) {
++ action_wait_t *wait = (action_wait_t *)actionbuf;
++#if 0
++ fprintf( stderr, "ACTION_WAIT_EVENT: %u msec, %u size, data = ", wait->msec, wait->size );
++ for (i=0; i<wait->size; i++) {
++ fprintf( stderr, "0x%02x ", wait->data[i] );
++ }
++ fprintf( stderr, "\n" );
++#endif
++ usleep(wait->msec); /* seems they give usec, not msec */
++ /* Read reply. */
++ if ((count = read_hci_event(fd, resp, sizeof resp)) < 0) {
++ perror("Failed to read TI command response");
++ return -1;
++ }
++ if (count < wait->size) {
++ fprintf( stderr, "TI command response is short.");
++ }
++ for (i=0; i<wait->size; i++) {
++ if (i == 3) continue; /* ignore */
++ if (resp[i] != wait->data[i]) {
++ fprintf( stderr, "TI command response does not match expected result.\n" );
++ }
++ }
++ }
++ else if (atype == ACTION_SERIAL_PORT_PARAMETERS) {
++ action_serial_t *sercmd = (action_serial_t *)actionbuf;
++
++ /* Set actual baudrate */
++ fprintf( stderr,
++ "BTS changing baud rate to %u, flow control to %u\n",
++ sercmd->baud, sercmd->flow_control );
++
++ tcflush(fd, TCIOFLUSH);
++
++ if (sercmd->flow_control)
++ ti->c_cflag |= CRTSCTS;
++ else
++ ti->c_cflag &= ~CRTSCTS;
++ if (tcsetattr(fd, TCSANOW, ti) < 0) {
++ perror("Can't set port settings");
++ return -1;
++ }
++
++ u->speed = sercmd->baud;
++
++ tcflush(fd, TCIOFLUSH);
++ if (set_speed(fd, ti, sercmd->baud) < 0) {
++ perror("Can't set baud rate");
++ return -1;
++ }
++ }
++ else if (atype == ACTION_DELAY) {
++ action_delay_t *delay = (action_delay_t *)actionbuf;
++ usleep(delay->msec); /* seems they give usec, not msec */
++ }
++ else {
++ fprintf( stderr, "BTS action type = %d: ", (int)atype );
++ for (i=0; i<count; i++) {
++ fprintf( stderr, "0x%02x ", actionbuf[i] );
++ }
++ fprintf( stderr, "\n" );
++ }
++ }
++ bts_unload_script( bfp );
++ return 0;
++}
++
+ static int texas(int fd, struct uart_t *u, struct termios *ti)
+ {
+ struct timespec tm = {0, 50000};
+@@ -328,6 +439,17 @@
+ /* Print LMP subversion */
+ fprintf(stderr, "Texas module LMP sub-version : 0x%02x%02x\n", resp[14] & 0xFF, resp[13] & 0xFF);
+
++ if ((resp[14] >> 2) == 3) {
++ /* BRF6150 */
++ int err;
++
++ nanosleep(&tm, NULL);
++ if ((err = brf6150(fd, u, ti)) != 0) {
++ fprintf(stderr, "Texas module script failed (err=%d)\n", err);
++ return -1;
++ }
++ }
++
+ nanosleep(&tm, NULL);
+ return 0;
+ }
+@@ -1204,7 +1326,7 @@
+ {
+ printf("hciattach - HCI UART driver initialization utility\n");
+ printf("Usage:\n");
+- printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [bdaddr]\n");
++ printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [-S bts-script] <tty> <type | id> [speed] [flow|noflow] [bdaddr]\n");
+ printf("\thciattach -l\n");
+ }
+
+@@ -1219,11 +1341,12 @@
+ struct sigaction sa;
+ struct pollfd p;
+ char dev[PATH_MAX];
++ char *bts = NULL;
+
+ detach = 1;
+ printpid = 0;
+
+- while ((opt=getopt(argc, argv, "bnpt:s:l")) != EOF) {
++ while ((opt=getopt(argc, argv, "bnpt:s:S:l")) != EOF) {
+ switch(opt) {
+ case 'b':
+ send_break = 1;
+@@ -1245,6 +1368,10 @@
+ init_speed = atoi(optarg);
+ break;
+
++ case 'S':
++ bts = optarg;
++ break;
++
+ case 'l':
+ for (i = 0; uart[i].type; i++) {
+ printf("%-10s0x%04x,0x%04x\n", uart[i].type,
+@@ -1320,6 +1447,8 @@
+ if (init_speed)
+ u->init_speed = init_speed;
+
++ u->bts = bts;
++
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_flags = SA_NOCLDSTOP;
+ sa.sa_handler = sig_alarm;
+--- bluez-utils-3.1/tools/ti_bts.h.orig 2006-07-23 14:07:26.000000000 +0200
++++ bluez-utils-3.1/tools/ti_bts.h 2006-07-23 14:07:46.000000000 +0200
+@@ -0,0 +1,116 @@
++/*
++ * Copyright (c) 2005 Texas Instruments, Inc.
++ * Ported by SDG Systems, LLC
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation;
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++ *
++ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ * SOFTWARE IS DISCLAIMED.
++ *
++ */
++
++#ifndef BT_SCRIPT_H
++#define BT_SCRIPT_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/*
++ * Define the interface of Bluetooth Script
++ */
++
++typedef void bts_t;
++
++
++#define ACTION_SEND_COMMAND 1 /* Send out raw data (as is) */
++#define ACTION_WAIT_EVENT 2 /* Wait for data */
++#define ACTION_SERIAL_PORT_PARAMETERS 3
++#define ACTION_DELAY 4
++#define ACTION_RUN_SCRIPT 5
++#define ACTION_REMARKS 6
++
++/*
++ * Structure for ACTION_SEND_COMMAND
++ */
++typedef struct tagCActionCommand
++{
++ unsigned char data[1]; /* Data to send */
++} action_command_t;
++
++/*
++ * Structure for ACTION_WAIT_EVENT
++ */
++typedef struct tagCActionWaitEvent
++{
++ unsigned long msec; /* in milliseconds */
++ unsigned long size;
++ unsigned char data[1]; /* Data to wait for */
++} action_wait_t;
++
++
++/*
++ * Structure for ACTION_SERIAL_PORT_PARAMETERS
++ */
++typedef struct tagCActionSerialPortParameters
++{
++ unsigned long baud;
++ unsigned long flow_control;
++} action_serial_t;
++
++/* Flow Control Type */
++#define FCT_NONE 0
++#define FCT_HARDWARE 1
++
++#define DONT_CHANGE 0xFFFFFFFF /* For both baud rate and flow control */
++
++
++/*
++ * Structure for ACTION_DELAY
++ */
++typedef struct tagCActionDelay
++{
++ unsigned long msec; /* in milliseconds */
++} action_delay_t;
++
++/*
++ * Structure for ACTION_RUN_SCRIPT
++ */
++typedef struct tagCActionRunScript
++{
++ char filename[1];
++} action_run_t;
++
++/*
++ * Structure for ACTION_REMARKS
++ */
++typedef struct tagCActionRemarks
++{
++ char m_szRemarks[1];
++} action_remarks_t;
++
++
++const char *cis_create_filename(const unsigned char* cmdparms);
++bts_t * bts_load_script(const char* fname, unsigned long* version);
++unsigned long bts_next_action(const bts_t* bts_fp, unsigned char* action_buf,
++ unsigned long nMaxSize, unsigned short* ptype);
++void bts_unload_script(bts_t* bts_fp);
++
++#ifdef __cplusplus
++};
++#endif
++
++#endif /* BT_SCRIPT_H */
++
+--- bluez-utils-3.1/tools/ti_bts.c.orig 2006-07-23 14:07:28.000000000 +0200
++++ bluez-utils-3.1/tools/ti_bts.c 2006-07-23 14:07:46.000000000 +0200
+@@ -0,0 +1,149 @@
++/*
++ * Copyright (c) 2005 Texas Instruments, Inc.
++ * Ported by SDG Systems, LLC
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation;
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++ *
++ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ * SOFTWARE IS DISCLAIMED.
++ *
++ */
++
++
++#include <stdio.h>
++#include <stdlib.h>
++#include "ti_bts.h"
++
++#ifndef MAKEWORD
++#define MAKEWORD(a, b) ((unsigned short)(((unsigned char)(a)) | ((unsigned short)((unsigned char)(b))) << 8))
++#endif
++
++#define TI_MANUFACTURER_ID 13
++
++/*
++ * Common Init Script specific
++ */
++const char *
++cis_create_filename(const unsigned char* cmdparms)
++{
++ static char bts_file[50];
++
++ /* Check for TI's id */
++ unsigned short manfid = MAKEWORD(cmdparms[8], cmdparms[9]);
++
++ if (TI_MANUFACTURER_ID == manfid) {
++ unsigned short version = MAKEWORD(cmdparms[10], cmdparms[11]);
++
++ unsigned short chip = (version & 0x7C00) >> 10;
++ unsigned short min_ver = (version & 0x007F);
++ unsigned short maj_ver = (version & 0x0380) >> 7;
++
++ if (0 != (version & 0x8000)) {
++ maj_ver |= 0x0008;
++ }
++
++ sprintf( bts_file, "TIInit_%d.%d.%d.bts",
++ (int)chip, (int)maj_ver, (int)min_ver);
++
++ return &bts_file[0];
++ }
++ return NULL;
++}
++
++typedef struct tagCHeader
++{
++ unsigned long magic;
++ unsigned long version;
++ unsigned char future[24];
++} cheader_t;
++
++
++/* The value 0x42535442 stands for (in ASCII) BTSB */
++/* which is Bluetooth Script Binary */
++#define FILE_HEADER_MAGIC 0x42535442
++
++
++bts_t *
++bts_load_script(const char* fname, unsigned long* version)
++{
++ bts_t* bts = NULL;
++ FILE* fp = fopen(fname, "rb");
++
++ if (NULL != fp) {
++ /* Read header */
++ cheader_t header;
++
++ /* Read header */
++ if (1 == fread(&header, sizeof(header), 1, fp)) {
++ /* Check magic number for correctness */
++ if (header.magic == FILE_HEADER_MAGIC) {
++ /* If user wants the version number */
++ if (NULL != version) {
++ *version = header.version;
++ }
++ bts = (bts_t*)fp;
++ }
++ }
++ /* If failed reading the file, close it */
++ if (NULL == bts) {
++ fclose(fp);
++ }
++ }
++ return bts;
++}
++
++unsigned long
++bts_next_action(const bts_t* bts_fp, unsigned char* action_buf,
++ unsigned long nMaxSize, unsigned short* ptype)
++{
++ unsigned long bytes = 0;
++ FILE* fp = (FILE*)bts_fp;
++ unsigned char action_hdr[4];
++
++ if (bts_fp == NULL)
++ return 0;
++
++ /* Each Action has the following: */
++ /* UINT16 type of this action */
++ /* UINT16 size of rest */
++ /* BYTE[] action buffer (for HCI, includes the type byte e.g. 1 for hci command) */
++
++ if (1 == fread(&action_hdr[0], sizeof(action_hdr), 1, fp)) {
++ unsigned short type = *(unsigned short*)&action_hdr[0];
++ unsigned short size = *(unsigned short*)&action_hdr[2];
++
++ if (size <= nMaxSize) {
++ int nread = fread(action_buf, sizeof(action_buf[0]), size, fp);
++
++ if (nread == size) {
++ *ptype = type;
++ bytes = (unsigned long)size;
++ }
++ }
++ }
++
++ return bytes;
++}
++
++void
++bts_unload_script(bts_t* bts_fp)
++{
++ FILE* fp = (FILE*)bts_fp;
++
++ if (NULL != fp) {
++ fclose(fp);
++ }
++}
++
+--- bluez-utils-3.1/tools/Makefile.am.orig 2006-07-23 14:06:59.000000000 +0200
++++ bluez-utils-3.1/tools/Makefile.am 2006-07-23 14:07:18.000000000 +0200
+@@ -45,7 +45,7 @@
+
+ noinst_PROGRAMS = hcisecfilter ppporc
+
+-hciattach_SOURCES = hciattach.c hciattach_st.c
++hciattach_SOURCES = hciattach.c hciattach_st.c ti_bts.h ti_bts.c
+ hciattach_LDADD = @BLUEZ_LIBS@
+
+ hciconfig_SOURCES = hciconfig.c csr.h csr.c
diff --git a/packages/gnutls/gnutls/.mtn2git_empty b/packages/bluez/bluez-utils-3.x/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gnutls/gnutls/.mtn2git_empty
+++ b/packages/bluez/bluez-utils-3.x/.mtn2git_empty
diff --git a/packages/bluez/files/hciattach-ti-bts.patch b/packages/bluez/bluez-utils-3.x/hciattach-ti-bts.patch
index 8fe37de9d3..8fe37de9d3 100644
--- a/packages/bluez/files/hciattach-ti-bts.patch
+++ b/packages/bluez/bluez-utils-3.x/hciattach-ti-bts.patch
diff --git a/packages/bluez/files/hcid.conf b/packages/bluez/bluez-utils-3.x/hcid.conf
index 44e9c46fb0..44e9c46fb0 100644
--- a/packages/bluez/files/hcid.conf
+++ b/packages/bluez/bluez-utils-3.x/hcid.conf
diff --git a/packages/bluez/bluez-utils-alsa_3.18.bb b/packages/bluez/bluez-utils-alsa_3.18.bb
index e2f48fba49..5c4a07e8ab 100644
--- a/packages/bluez/bluez-utils-alsa_3.18.bb
+++ b/packages/bluez/bluez-utils-alsa_3.18.bb
@@ -20,5 +20,4 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/alsa-lib/libasound*"
diff --git a/packages/bluez/bluez-utils-alsa_3.19.bb b/packages/bluez/bluez-utils-alsa_3.19.bb
index e2f48fba49..5c4a07e8ab 100644
--- a/packages/bluez/bluez-utils-alsa_3.19.bb
+++ b/packages/bluez/bluez-utils-alsa_3.19.bb
@@ -20,5 +20,4 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/alsa-lib/libasound*"
diff --git a/packages/bluez/bluez-utils-alsa_3.20.bb b/packages/bluez/bluez-utils-alsa_3.20.bb
index e2f48fba49..5c4a07e8ab 100644
--- a/packages/bluez/bluez-utils-alsa_3.20.bb
+++ b/packages/bluez/bluez-utils-alsa_3.20.bb
@@ -20,5 +20,4 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/alsa-lib/libasound*"
diff --git a/packages/bluez/bluez-utils-alsa_3.22.bb b/packages/bluez/bluez-utils-alsa_3.22.bb
index e2f48fba49..5c4a07e8ab 100644
--- a/packages/bluez/bluez-utils-alsa_3.22.bb
+++ b/packages/bluez/bluez-utils-alsa_3.22.bb
@@ -20,5 +20,4 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/alsa-lib/libasound*"
diff --git a/packages/bluez/bluez-utils-alsa_3.23.bb b/packages/bluez/bluez-utils-alsa_3.23.bb
index e2f48fba49..0d7836fa65 100644
--- a/packages/bluez/bluez-utils-alsa_3.23.bb
+++ b/packages/bluez/bluez-utils-alsa_3.23.bb
@@ -1,4 +1,5 @@
require bluez-utils3.inc
+PR = "r1"
DEPENDS += "alsa-lib"
@@ -20,5 +21,4 @@ EXTRA_OECONF = " \
--enable-test \
"
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/alsa-lib/libasound*"
diff --git a/packages/bluez/bluez-utils-alsa_3.24.bb b/packages/bluez/bluez-utils-alsa_3.24.bb
new file mode 100644
index 0000000000..a1e3e85818
--- /dev/null
+++ b/packages/bluez/bluez-utils-alsa_3.24.bb
@@ -0,0 +1,25 @@
+require bluez-utils3.inc
+
+PR = "r1"
+
+DEPENDS += "alsa-lib"
+
+# see bluez-utils3.inc for the explanation of these option
+EXTRA_OECONF = " \
+ --enable-bccmd \
+ --disable-hid2hci \
+ --enable-alsa \
+ --disable-cups \
+ --enable-glib \
+ --disable-sdpd \
+ --enable-network \
+ --enable-serial \
+ --enable-input \
+ --enable-audio \
+ --enable-echo \
+ --enable-configfile \
+ --enable-initscripts \
+ --enable-test \
+ "
+
+FILES_${PN} = "${libdir}/alsa-lib/libasound*"
diff --git a/packages/bluez/bluez-utils/hciattach-ti-bts.patch b/packages/bluez/bluez-utils/hciattach-ti-bts.patch
deleted file mode 100644
index 217c32619d..0000000000
--- a/packages/bluez/bluez-utils/hciattach-ti-bts.patch
+++ /dev/null
@@ -1,489 +0,0 @@
---- bluez-utils-3.1/tools/hciattach.c.orig 2006-07-23 14:02:14.000000000 +0200
-+++ bluez-utils-3.1/tools/hciattach.c 2006-07-23 14:06:29.000000000 +0200
-@@ -58,6 +58,8 @@
- #define HCI_UART_3WIRE 2
- #define HCI_UART_H4DS 3
-
-+#include "ti_bts.h"
-+
- struct uart_t {
- char *type;
- int m_id;
-@@ -67,6 +69,7 @@
- int speed;
- int flags;
- int (*init) (int fd, struct uart_t *u, struct termios *ti);
-+ char *bts; /* bluetooth script */
- };
-
- #define FLOW_CTL 0x0001
-@@ -256,6 +259,114 @@
- return 0;
- }
-
-+static int brf6150(int fd, struct uart_t *u, struct termios *ti)
-+{
-+ bts_t *bfp;
-+ int i;
-+ unsigned long vers;
-+ unsigned char actionbuf[256];
-+ unsigned char resp[128]; /* Response */
-+ unsigned long count;
-+ unsigned short atype;
-+
-+ if (u->bts == NULL) /* no script, ignore */
-+ return 0;
-+
-+ bfp = bts_load_script( u->bts, &vers );
-+ if (bfp == NULL)
-+ return -1;
-+
-+ fprintf( stderr, "Loading BTS script version %lu\n", vers );
-+
-+ while ((count = bts_next_action( bfp, actionbuf,
-+ sizeof actionbuf - 1, &atype )) != 0) {
-+ if (atype == ACTION_REMARKS) {
-+ if (actionbuf[0] != 0)
-+ fprintf( stderr, "%s\n", actionbuf );
-+ }
-+ else if (atype == ACTION_SEND_COMMAND) {
-+#if 0
-+ fprintf( stderr, "ACTION_SEND_COMMAND: ", (int)atype );
-+ for (i=0; i<count; i++) {
-+ fprintf( stderr, "0x%02x ", actionbuf[i] );
-+ }
-+ fprintf( stderr, "\n" );
-+#endif
-+ int n;
-+ n = write(fd, actionbuf, count);
-+ if (n < 0 || n < count) {
-+ perror("Failed to write TI action command");
-+ return -1;
-+ }
-+ }
-+ else if (atype == ACTION_WAIT_EVENT) {
-+ action_wait_t *wait = (action_wait_t *)actionbuf;
-+#if 0
-+ fprintf( stderr, "ACTION_WAIT_EVENT: %u msec, %u size, data = ", wait->msec, wait->size );
-+ for (i=0; i<wait->size; i++) {
-+ fprintf( stderr, "0x%02x ", wait->data[i] );
-+ }
-+ fprintf( stderr, "\n" );
-+#endif
-+ usleep(wait->msec); /* seems they give usec, not msec */
-+ /* Read reply. */
-+ if ((count = read_hci_event(fd, resp, sizeof resp)) < 0) {
-+ perror("Failed to read TI command response");
-+ return -1;
-+ }
-+ if (count < wait->size) {
-+ fprintf( stderr, "TI command response is short.");
-+ }
-+ for (i=0; i<wait->size; i++) {
-+ if (i == 3) continue; /* ignore */
-+ if (resp[i] != wait->data[i]) {
-+ fprintf( stderr, "TI command response does not match expected result.\n" );
-+ }
-+ }
-+ }
-+ else if (atype == ACTION_SERIAL_PORT_PARAMETERS) {
-+ action_serial_t *sercmd = (action_serial_t *)actionbuf;
-+
-+ /* Set actual baudrate */
-+ fprintf( stderr,
-+ "BTS changing baud rate to %u, flow control to %u\n",
-+ sercmd->baud, sercmd->flow_control );
-+
-+ tcflush(fd, TCIOFLUSH);
-+
-+ if (sercmd->flow_control)
-+ ti->c_cflag |= CRTSCTS;
-+ else
-+ ti->c_cflag &= ~CRTSCTS;
-+ if (tcsetattr(fd, TCSANOW, ti) < 0) {
-+ perror("Can't set port settings");
-+ return -1;
-+ }
-+
-+ u->speed = sercmd->baud;
-+
-+ tcflush(fd, TCIOFLUSH);
-+ if (set_speed(fd, ti, sercmd->baud) < 0) {
-+ perror("Can't set baud rate");
-+ return -1;
-+ }
-+ }
-+ else if (atype == ACTION_DELAY) {
-+ action_delay_t *delay = (action_delay_t *)actionbuf;
-+ usleep(delay->msec); /* seems they give usec, not msec */
-+ }
-+ else {
-+ fprintf( stderr, "BTS action type = %d: ", (int)atype );
-+ for (i=0; i<count; i++) {
-+ fprintf( stderr, "0x%02x ", actionbuf[i] );
-+ }
-+ fprintf( stderr, "\n" );
-+ }
-+ }
-+ bts_unload_script( bfp );
-+ return 0;
-+}
-+
- static int texas(int fd, struct uart_t *u, struct termios *ti)
- {
- struct timespec tm = {0, 50000};
-@@ -296,15 +407,26 @@
- } while (resp[4] != cmd[1] && resp[5] != cmd[2]);
-
- /* Verify manufacturer */
-- if ((resp[11] & 0xFF) != 0x0d)
-+ if (resp[11] != 0x0d)
- fprintf(stderr,"WARNING : module's manufacturer is not Texas Instrument\n");
-
- /* Print LMP version */
-- fprintf(stderr, "Texas module LMP version : 0x%02x\n", resp[10] & 0xFF);
-+ fprintf(stderr, "TI module LMP version : 0x%02x\n", resp[10]);
-
- /* Print LMP subversion */
-- fprintf(stderr, "Texas module LMP sub-version : 0x%02x%02x\n", resp[14] & 0xFF, resp[13] & 0xFF);
-+ fprintf(stderr, "TI module LMP sub-version : 0x%02x%02x\n", resp[14], resp[13]);
-+ if ((resp[14] >> 2) == 3) {
-+ int err;
-+ nanosleep(&tm, NULL);
-
-+ /* BRF6150 */
-+ if ((err=brf6150( fd, u, ti )) != 0) {
-+ fprintf( stderr, "TI script failed (err=%d)\n",
-+ err );
-+ return -1;
-+ }
-+ }
-+
- nanosleep(&tm, NULL);
- return 0;
- }
-@@ -1103,7 +1225,7 @@
- {
- printf("hciattach - HCI UART driver initialization utility\n");
- printf("Usage:\n");
-- printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow]\n");
-+ printf("\thciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] [-S bts-script] <tty> <type | id> [speed] [flow|noflow]\n");
- printf("\thciattach -l\n");
- }
-
-@@ -1118,11 +1240,12 @@
- struct sigaction sa;
- struct pollfd p;
- char dev[PATH_MAX];
-+ char *bts = NULL;
-
- detach = 1;
- printpid = 0;
-
-- while ((opt=getopt(argc, argv, "bnpt:s:l")) != EOF) {
-+ while ((opt=getopt(argc, argv, "bnpt:s:S:l")) != EOF) {
- switch(opt) {
- case 'b':
- send_break = 1;
-@@ -1144,6 +1267,10 @@
- init_speed = atoi(optarg);
- break;
-
-+ case 'S':
-+ bts = optarg;
-+ break;
-+
- case 'l':
- for (i = 0; uart[i].type; i++) {
- printf("%-10s0x%04x,0x%04x\n", uart[i].type,
-@@ -1215,6 +1342,8 @@
- if (init_speed)
- u->init_speed = init_speed;
-
-+ u->bts = bts;
-+
- memset(&sa, 0, sizeof(sa));
- sa.sa_flags = SA_NOCLDSTOP;
- sa.sa_handler = sig_alarm;
---- bluez-utils-3.1/tools/Makefile.am.orig 2006-07-23 14:06:59.000000000 +0200
-+++ bluez-utils-3.1/tools/Makefile.am 2006-07-23 14:07:18.000000000 +0200
-@@ -37,7 +37,7 @@
-
- noinst_PROGRAMS = hcisecfilter ppporc
-
--hciattach_SOURCES = hciattach.c hciattach_st.c
-+hciattach_SOURCES = hciattach.c hciattach_st.c ti_bts.h ti_bts.c
-
- hciconfig_SOURCES = hciconfig.c csr.h csr.c
- hciconfig_LDADD = @BLUEZ_LIBS@ $(top_builddir)/common/libhelper.a
---- bluez-utils-3.1/tools/ti_bts.h.orig 2006-07-23 14:07:26.000000000 +0200
-+++ bluez-utils-3.1/tools/ti_bts.h 2006-07-23 14:07:46.000000000 +0200
-@@ -0,0 +1,116 @@
-+/*
-+ * Copyright (c) 2005 Texas Instruments, Inc.
-+ * Ported by SDG Systems, LLC
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation;
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
-+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
-+ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
-+ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
-+ * SOFTWARE IS DISCLAIMED.
-+ *
-+ */
-+
-+#ifndef BT_SCRIPT_H
-+#define BT_SCRIPT_H
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+/*
-+ * Define the interface of Bluetooth Script
-+ */
-+
-+typedef void bts_t;
-+
-+
-+#define ACTION_SEND_COMMAND 1 /* Send out raw data (as is) */
-+#define ACTION_WAIT_EVENT 2 /* Wait for data */
-+#define ACTION_SERIAL_PORT_PARAMETERS 3
-+#define ACTION_DELAY 4
-+#define ACTION_RUN_SCRIPT 5
-+#define ACTION_REMARKS 6
-+
-+/*
-+ * Structure for ACTION_SEND_COMMAND
-+ */
-+typedef struct tagCActionCommand
-+{
-+ unsigned char data[1]; /* Data to send */
-+} action_command_t;
-+
-+/*
-+ * Structure for ACTION_WAIT_EVENT
-+ */
-+typedef struct tagCActionWaitEvent
-+{
-+ unsigned long msec; /* in milliseconds */
-+ unsigned long size;
-+ unsigned char data[1]; /* Data to wait for */
-+} action_wait_t;
-+
-+
-+/*
-+ * Structure for ACTION_SERIAL_PORT_PARAMETERS
-+ */
-+typedef struct tagCActionSerialPortParameters
-+{
-+ unsigned long baud;
-+ unsigned long flow_control;
-+} action_serial_t;
-+
-+/* Flow Control Type */
-+#define FCT_NONE 0
-+#define FCT_HARDWARE 1
-+
-+#define DONT_CHANGE 0xFFFFFFFF /* For both baud rate and flow control */
-+
-+
-+/*
-+ * Structure for ACTION_DELAY
-+ */
-+typedef struct tagCActionDelay
-+{
-+ unsigned long msec; /* in milliseconds */
-+} action_delay_t;
-+
-+/*
-+ * Structure for ACTION_RUN_SCRIPT
-+ */
-+typedef struct tagCActionRunScript
-+{
-+ char filename[1];
-+} action_run_t;
-+
-+/*
-+ * Structure for ACTION_REMARKS
-+ */
-+typedef struct tagCActionRemarks
-+{
-+ char m_szRemarks[1];
-+} action_remarks_t;
-+
-+
-+const char *cis_create_filename(const unsigned char* cmdparms);
-+bts_t * bts_load_script(const char* fname, unsigned long* version);
-+unsigned long bts_next_action(const bts_t* bts_fp, unsigned char* action_buf,
-+ unsigned long nMaxSize, unsigned short* ptype);
-+void bts_unload_script(bts_t* bts_fp);
-+
-+#ifdef __cplusplus
-+};
-+#endif
-+
-+#endif /* BT_SCRIPT_H */
-+
---- bluez-utils-3.1/tools/ti_bts.c.orig 2006-07-23 14:07:28.000000000 +0200
-+++ bluez-utils-3.1/tools/ti_bts.c 2006-07-23 14:07:46.000000000 +0200
-@@ -0,0 +1,149 @@
-+/*
-+ * Copyright (c) 2005 Texas Instruments, Inc.
-+ * Ported by SDG Systems, LLC
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation;
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
-+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
-+ * CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+ *
-+ * ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
-+ * COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
-+ * SOFTWARE IS DISCLAIMED.
-+ *
-+ */
-+
-+
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include "ti_bts.h"
-+
-+#ifndef MAKEWORD
-+#define MAKEWORD(a, b) ((unsigned short)(((unsigned char)(a)) | ((unsigned short)((unsigned char)(b))) << 8))
-+#endif
-+
-+#define TI_MANUFACTURER_ID 13
-+
-+/*
-+ * Common Init Script specific
-+ */
-+const char *
-+cis_create_filename(const unsigned char* cmdparms)
-+{
-+ static char bts_file[50];
-+
-+ /* Check for TI's id */
-+ unsigned short manfid = MAKEWORD(cmdparms[8], cmdparms[9]);
-+
-+ if (TI_MANUFACTURER_ID == manfid) {
-+ unsigned short version = MAKEWORD(cmdparms[10], cmdparms[11]);
-+
-+ unsigned short chip = (version & 0x7C00) >> 10;
-+ unsigned short min_ver = (version & 0x007F);
-+ unsigned short maj_ver = (version & 0x0380) >> 7;
-+
-+ if (0 != (version & 0x8000)) {
-+ maj_ver |= 0x0008;
-+ }
-+
-+ sprintf( bts_file, "TIInit_%d.%d.%d.bts",
-+ (int)chip, (int)maj_ver, (int)min_ver);
-+
-+ return &bts_file[0];
-+ }
-+ return NULL;
-+}
-+
-+typedef struct tagCHeader
-+{
-+ unsigned long magic;
-+ unsigned long version;
-+ unsigned char future[24];
-+} cheader_t;
-+
-+
-+/* The value 0x42535442 stands for (in ASCII) BTSB */
-+/* which is Bluetooth Script Binary */
-+#define FILE_HEADER_MAGIC 0x42535442
-+
-+
-+bts_t *
-+bts_load_script(const char* fname, unsigned long* version)
-+{
-+ bts_t* bts = NULL;
-+ FILE* fp = fopen(fname, "rb");
-+
-+ if (NULL != fp) {
-+ /* Read header */
-+ cheader_t header;
-+
-+ /* Read header */
-+ if (1 == fread(&header, sizeof(header), 1, fp)) {
-+ /* Check magic number for correctness */
-+ if (header.magic == FILE_HEADER_MAGIC) {
-+ /* If user wants the version number */
-+ if (NULL != version) {
-+ *version = header.version;
-+ }
-+ bts = (bts_t*)fp;
-+ }
-+ }
-+ /* If failed reading the file, close it */
-+ if (NULL == bts) {
-+ fclose(fp);
-+ }
-+ }
-+ return bts;
-+}
-+
-+unsigned long
-+bts_next_action(const bts_t* bts_fp, unsigned char* action_buf,
-+ unsigned long nMaxSize, unsigned short* ptype)
-+{
-+ unsigned long bytes = 0;
-+ FILE* fp = (FILE*)bts_fp;
-+ unsigned char action_hdr[4];
-+
-+ if (bts_fp == NULL)
-+ return 0;
-+
-+ /* Each Action has the following: */
-+ /* UINT16 type of this action */
-+ /* UINT16 size of rest */
-+ /* BYTE[] action buffer (for HCI, includes the type byte e.g. 1 for hci command) */
-+
-+ if (1 == fread(&action_hdr[0], sizeof(action_hdr), 1, fp)) {
-+ unsigned short type = *(unsigned short*)&action_hdr[0];
-+ unsigned short size = *(unsigned short*)&action_hdr[2];
-+
-+ if (size <= nMaxSize) {
-+ int nread = fread(action_buf, sizeof(action_buf[0]), size, fp);
-+
-+ if (nread == size) {
-+ *ptype = type;
-+ bytes = (unsigned long)size;
-+ }
-+ }
-+ }
-+
-+ return bytes;
-+}
-+
-+void
-+bts_unload_script(bts_t* bts_fp)
-+{
-+ FILE* fp = (FILE*)bts_fp;
-+
-+ if (NULL != fp) {
-+ fclose(fp);
-+ }
-+}
-+
diff --git a/packages/bluez/bluez-utils3.inc b/packages/bluez/bluez-utils3.inc
index 8f787292ba..3932d722ee 100644
--- a/packages/bluez/bluez-utils3.inc
+++ b/packages/bluez/bluez-utils3.inc
@@ -8,10 +8,13 @@ RREPLACES = "bluez-utils-dbus"
RCONFLICTS_${PN} = "bluez-utils-nodbus"
LICENSE = "GPL"
-# ti patch doesn't apply, people using it should rediff it and send it upstream
+FILESPATH = "${FILE_DIRNAME}/bluez-utils-${PV}:${FILE_DIRNAME}/bluez-utils"
+
+# ti patch should be sent it upstream!
SRC_URI = "http://bluez.sourceforge.net/download/bluez-utils-${PV}.tar.gz \
- file://hcid.conf "
-# file://hciattach-ti-bts.patch;patch=1 \
+ file://hcid.conf \
+ file://hciattach-ti-bts.patch;patch=1"
+
S = "${WORKDIR}/bluez-utils-${PV}"
@@ -68,6 +71,8 @@ EXTRA_OECONF = " \
#disable it:
# --disable-hid2hci
+OE_LT_RPATH_ALLOW = "any"
+OE_LT_RPATH_ALLOW[export]="1"
do_install_append() {
install -d ${D}${base_sbindir} ${D}${base_bindir}/ ${D}${sysconfdir}/apm/event.d/
diff --git a/packages/bluez/bluez-utils_3.23.bb b/packages/bluez/bluez-utils_3.23.bb
index 48f147aa69..37365f67fc 100644
--- a/packages/bluez/bluez-utils_3.23.bb
+++ b/packages/bluez/bluez-utils_3.23.bb
@@ -1,4 +1,5 @@
require bluez-utils3.inc
+PR = "r2"
# see bluez-utils3.inc for the explanation of these option
EXTRA_OECONF = " \
diff --git a/packages/bluez/bluez-utils_3.24.bb b/packages/bluez/bluez-utils_3.24.bb
new file mode 100644
index 0000000000..37365f67fc
--- /dev/null
+++ b/packages/bluez/bluez-utils_3.24.bb
@@ -0,0 +1,30 @@
+require bluez-utils3.inc
+PR = "r2"
+
+# see bluez-utils3.inc for the explanation of these option
+EXTRA_OECONF = " \
+ --enable-bccmd \
+ --enable-hid2hci \
+ --disable-alsa \
+ --disable-cups \
+ --enable-glib \
+ --disable-sdpd \
+ --enable-network \
+ --enable-serial \
+ --enable-input \
+ --enable-audio \
+ --enable-echo \
+ --enable-configfile \
+ --enable-initscripts \
+ --enable-test \
+ "
+
+CONFFILES_${PN} = " \
+ ${sysconfdir}/bluetooth/hcid.conf \
+ ${sysconfdir}/default/bluetooth \
+ "
+
+CONFFILES_${PN}-compat = " \
+ ${sysconfdir}/bluetooth/rfcomm.conf \
+ "
+
diff --git a/packages/boost-asio/boost-asio_0.3.7.bb b/packages/boost-asio/boost-asio_0.3.7.bb
index 947f89cae2..a27001e576 100644
--- a/packages/boost-asio/boost-asio_0.3.7.bb
+++ b/packages/boost-asio/boost-asio_0.3.7.bb
@@ -32,5 +32,5 @@ do_stage() {
cp -dpR boost ${STAGING_INCDIR}
}
-PACKAGES = "${PN}-dev"
+PACKAGES = "${PN}-dbg ${PN}-dev"
FILES_${PN}-dev = "/usr/include"
diff --git a/packages/bt950-cs/bt950-cs_0.1.bb b/packages/bt950-cs/bt950-cs_0.1.bb
index dfd288e50a..66820a7e7d 100644
--- a/packages/bt950-cs/bt950-cs_0.1.bb
+++ b/packages/bt950-cs/bt950-cs_0.1.bb
@@ -11,7 +11,7 @@ file://makefile.patch;patch=1"
S = "${WORKDIR}/bt950-${PV}"
-PACKAGES = "kernel-module-bt950-cs"
+PACKAGES = "${PN}-dbg kernel-module-bt950-cs"
FILES_kernel-module-bt950-cs = "/etc/pcmcia/bt950.conf /lib/modules/${KERNEL_VERSION}/kernel/drivers/bluetooth/bt950_cs.o"
inherit module
diff --git a/packages/gtk+/gtk+-2.2.4/.mtn2git_empty b/packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gtk+/gtk+-2.2.4/.mtn2git_empty
+++ b/packages/busybox/busybox-1.2.1/avr32/.mtn2git_empty
diff --git a/packages/busybox/busybox-1.2.1/avr32/defconfig b/packages/busybox/busybox-1.2.1/avr32/defconfig
new file mode 100644
index 0000000000..b15f162a7d
--- /dev/null
+++ b/packages/busybox/busybox-1.2.1/avr32/defconfig
@@ -0,0 +1,643 @@
+#
+# Automatically generated make config: don't edit
+#
+HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_NITPICK is not set
+# CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_SHOW_USAGE=y
+# CONFIG_FEATURE_VERBOSE_USAGE is not set
+# CONFIG_FEATURE_COMPRESS_USAGE is not set
+# CONFIG_FEATURE_INSTALLER is not set
+CONFIG_LOCALE_SUPPORT=y
+CONFIG_GETOPT_LONG=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+# CONFIG_FEATURE_SUID is not set
+# CONFIG_FEATURE_SUID_CONFIG is not set
+# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set
+# CONFIG_SELINUX is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_FULL_LIBBUSYBOX is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+USING_CROSS_COMPILER=y
+CROSS_COMPILER_PREFIX="avr32-angstrom-linux-uclibc-"
+CONFIG_BUILD_AT_ONCE=y
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_NO_DEBUG_LIB is not set
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+CONFIG_DEBUG_YANK_SUSv2=y
+
+#
+# Installation Options
+#
+# CONFIG_INSTALL_NO_USR is not set
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_MD5_SIZE_VS_SPEED=2
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_BUNZIP2=y
+CONFIG_CPIO=y
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+# CONFIG_FEATURE_GUNZIP_UNCOMPRESS is not set
+CONFIG_GZIP=y
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_BZIP2=y
+# CONFIG_FEATURE_TAR_LZMA is not set
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_GZIP=y
+# CONFIG_FEATURE_TAR_COMPRESS is not set
+# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
+# CONFIG_UNCOMPRESS is not set
+# CONFIG_UNLZMA is not set
+# CONFIG_FEATURE_LZMA_FAST is not set
+CONFIG_UNZIP=y
+
+#
+# Common options for cpio and tar
+#
+# CONFIG_FEATURE_UNARCHIVE_TAPE is not set
+# CONFIG_FEATURE_DEB_TAR_GZ is not set
+# CONFIG_FEATURE_DEB_TAR_BZ2 is not set
+# CONFIG_FEATURE_DEB_TAR_LZMA is not set
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+# CONFIG_CAL is not set
+CONFIG_CAT=y
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_CHROOT=y
+# CONFIG_CKSUM is not set
+# CONFIG_CMP is not set
+# CONFIG_COMM is not set
+CONFIG_CP=y
+CONFIG_CUT=y
+CONFIG_DATE=y
+# CONFIG_FEATURE_DATE_ISOFMT is not set
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+# CONFIG_FEATURE_DD_IBS_OBS is not set
+CONFIG_DF=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_BINARY=y
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_FEATURE_DIFF_MINIMAL is not set
+CONFIG_DIRNAME=y
+# CONFIG_DOS2UNIX is not set
+# CONFIG_UNIX2DOS is not set
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_FEATURE_ENV_LONG_OPTIONS=y
+CONFIG_EXPR=y
+# CONFIG_EXPR_MATH_SUPPORT_64 is not set
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_HEAD=y
+# CONFIG_FEATURE_FANCY_HEAD is not set
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+# CONFIG_INSTALL is not set
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+# CONFIG_LENGTH is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+# CONFIG_MD5SUM is not set
+CONFIG_MKDIR=y
+CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+# CONFIG_FEATURE_MV_LONG_OPTIONS is not set
+# CONFIG_NICE is not set
+CONFIG_NOHUP=y
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_SEQ=y
+# CONFIG_SHA1SUM is not set
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_STAT is not set
+# CONFIG_FEATURE_STAT_FORMAT is not set
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+# CONFIG_FEATURE_TEE_USE_BLOCK_IO is not set
+CONFIG_TEST=y
+# CONFIG_FEATURE_TEST_64 is not set
+CONFIG_TOUCH=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+CONFIG_WATCH=y
+CONFIG_WC=y
+CONFIG_WHO=y
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+# CONFIG_SETKEYCODES is not set
+# CONFIG_SETLOGCONS is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_RUN_PARTS=y
+# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_MATH=y
+# CONFIG_ED is not set
+CONFIG_PATCH=y
+CONFIG_SED=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+# CONFIG_FEATURE_VI_DOT_CMD is not set
+# CONFIG_FEATURE_VI_READONLY is not set
+# CONFIG_FEATURE_VI_SETOPTS is not set
+# CONFIG_FEATURE_VI_SET is not set
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_NEWER=y
+# CONFIG_FEATURE_FIND_INUM is not set
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set
+# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set
+
+#
+# Init Utilities
+#
+# CONFIG_INIT is not set
+# CONFIG_DEBUG_INIT is not set
+# CONFIG_FEATURE_USE_INITTAB is not set
+# CONFIG_FEATURE_INIT_SCTTY is not set
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+# CONFIG_FEATURE_INITRD is not set
+# CONFIG_HALT is not set
+# CONFIG_MESG is not set
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
+# CONFIG_USE_BB_SHADOW is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_ADDGROUP is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_ADDUSER is not set
+# CONFIG_DELUSER is not set
+# CONFIG_GETTY is not set
+CONFIG_FEATURE_UTMP=y
+# CONFIG_FEATURE_WTMP is not set
+# CONFIG_LOGIN is not set
+# CONFIG_FEATURE_SECURETTY is not set
+# CONFIG_PASSWD is not set
+# CONFIG_SU is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_E2FSCK=y
+CONFIG_FSCK=y
+# CONFIG_LSATTR is not set
+CONFIG_MKE2FS=y
+# CONFIG_TUNE2FS is not set
+# CONFIG_E2LABEL is not set
+# CONFIG_FINDFS is not set
+
+#
+# Linux Module Utilities
+#
+CONFIG_INSMOD=y
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_MODPROBE=y
+CONFIG_FEATURE_MODPROBE_MULTIPLE_OPTIONS=y
+
+#
+# Options common to multiple modutils
+#
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+# CONFIG_FEATURE_2_4_MODULES is not set
+CONFIG_FEATURE_2_6_MODULES=y
+# CONFIG_FEATURE_QUERY_MODULE_INTERFACE is not set
+
+#
+# Linux System Utilities
+#
+CONFIG_DMESG=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+FDISK_SUPPORT_LARGE_DISKS=y
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FREERAMDISK is not set
+CONFIG_FSCK_MINIX=y
+CONFIG_MKFS_MINIX=y
+
+#
+# Minix filesystem support
+#
+CONFIG_FEATURE_MINIX2=y
+# CONFIG_GETOPT is not set
+CONFIG_HEXDUMP=y
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y
+CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_V0 is not set
+CONFIG_MORE=y
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_MOUNT=y
+CONFIG_FEATURE_MOUNT_NFS=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+# CONFIG_READPROFILE is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+CONFIG_SWITCH_ROOT=y
+CONFIG_UMOUNT=y
+# CONFIG_FEATURE_UMOUNT_ALL is not set
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_CROND is not set
+# CONFIG_DEBUG_CROND_OPTION is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+# CONFIG_CRONTAB is not set
+CONFIG_DC=y
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+# CONFIG_EJECT is not set
+# CONFIG_LAST is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+# CONFIG_FEATURE_LESS_FLAGCS is not set
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_HDPARM is not set
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+CONFIG_STRINGS=y
+# CONFIG_SETSID is not set
+# CONFIG_TASKSET is not set
+CONFIG_TIME=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+CONFIG_FEATURE_IPV6=y
+# CONFIG_ARPING is not set
+# CONFIG_DNSD is not set
+# CONFIG_ETHER_WAKE is not set
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_WITHOUT_INETD is not set
+# CONFIG_FEATURE_HTTPD_RELOAD_CONFIG_SIGHUP is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+CONFIG_FEATURE_IFCONFIG_HW=y
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+CONFIG_IFUPDOWN=y
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+# CONFIG_FEATURE_IFUPDOWN_IPX is not set
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+# CONFIG_NAMEIF is not set
+CONFIG_NC=y
+# CONFIG_NC_GAPING_SECURITY_HOLE is not set
+CONFIG_NETSTAT=y
+CONFIG_NSLOOKUP=y
+CONFIG_PING=y
+CONFIG_FEATURE_FANCY_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING6=y
+CONFIG_ROUTE=y
+CONFIG_TELNET=y
+# CONFIG_FEATURE_TELNET_TTYPE is not set
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_INETD is not set
+CONFIG_TFTP=y
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set
+# CONFIG_DEBUG_TFTP is not set
+CONFIG_TRACEROUTE=y
+# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set
+# CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set
+# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
+
+#
+# udhcp Server/Client
+#
+CONFIG_APP_UDHCPD=y
+CONFIG_APP_UDHCPC=y
+CONFIG_APP_DUMPLEASES=y
+CONFIG_FEATURE_UDHCP_SYSLOG=y
+# CONFIG_FEATURE_UDHCP_DEBUG is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_IP6_LITERAL=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+# CONFIG_ZCIP is not set
+
+#
+# Process Utilities
+#
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+CONFIG_PIDOF=y
+# CONFIG_FEATURE_PIDOF_SINGLE is not set
+# CONFIG_FEATURE_PIDOF_OMIT is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_UPTIME=y
+
+#
+# Shells
+#
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_LASH is not set
+# CONFIG_FEATURE_SH_IS_MSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+CONFIG_ASH=y
+
+#
+# Ash Shell Options
+#
+CONFIG_ASH_JOB_CONTROL=y
+# CONFIG_ASH_READ_NCHARS is not set
+# CONFIG_ASH_READ_TIMEOUT is not set
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_MATH_SUPPORT=y
+# CONFIG_ASH_MATH_SUPPORT_64 is not set
+CONFIG_ASH_GETOPTS=y
+# CONFIG_ASH_BUILTIN_ECHO is not set
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+CONFIG_ASH_EXPAND_PRMT=y
+# CONFIG_HUSH is not set
+# CONFIG_LASH is not set
+# CONFIG_MSH is not set
+
+#
+# Bourne Shell Options
+#
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE_SHELL is not set
+CONFIG_FEATURE_COMMAND_EDITING=y
+# CONFIG_FEATURE_COMMAND_EDITING_VI is not set
+CONFIG_FEATURE_COMMAND_HISTORY=63
+# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set
+CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y
+# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set
+CONFIG_FEATURE_SH_FANCY_PROMPT=y
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=16
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+CONFIG_KLOGD=y
+CONFIG_LOGGER=y
diff --git a/packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch b/packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch
new file mode 100644
index 0000000000..4bec313f0e
--- /dev/null
+++ b/packages/busybox/busybox-1.2.1/install-should-unlink-dest-if-it-exists.patch
@@ -0,0 +1,53 @@
+---
+ coreutils/install.c | 2 +-
+ include/libbb.h | 3 ++-
+ libbb/copy_file.c | 9 +++++++++
+ 3 files changed, 12 insertions(+), 2 deletions(-)
+
+Index: busybox-1.2.1/coreutils/install.c
+===================================================================
+--- busybox-1.2.1.orig/coreutils/install.c 2006-10-19 16:33:48.000000000 +0200
++++ busybox-1.2.1/coreutils/install.c 2006-10-19 16:35:58.000000000 +0200
+@@ -59,7 +59,7 @@ int install_main(int argc, char **argv)
+ char *gid_str = "-1";
+ char *uid_str = "-1";
+ char *mode_str = "0755";
+- int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE;
++ int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE | FILEUTILS_NO_TRUNC;
+ int ret = EXIT_SUCCESS, flags, i, isdir;
+
+ #if ENABLE_FEATURE_INSTALL_LONG_OPTIONS
+Index: busybox-1.2.1/include/libbb.h
+===================================================================
+--- busybox-1.2.1.orig/include/libbb.h 2006-10-19 16:24:50.000000000 +0200
++++ busybox-1.2.1/include/libbb.h 2006-10-19 16:32:40.000000000 +0200
+@@ -345,7 +345,8 @@ enum { /* DO NOT CHANGE THESE VALUES! c
+ FILEUTILS_DEREFERENCE = 2,
+ FILEUTILS_RECUR = 4,
+ FILEUTILS_FORCE = 8,
+- FILEUTILS_INTERACTIVE = 16
++ FILEUTILS_INTERACTIVE = 16,
++ FILEUTILS_NO_TRUNC = 32
+ };
+
+ extern const char *bb_applet_name;
+Index: busybox-1.2.1/libbb/copy_file.c
+===================================================================
+--- busybox-1.2.1.orig/libbb/copy_file.c 2006-10-19 16:26:53.000000000 +0200
++++ busybox-1.2.1/libbb/copy_file.c 2006-10-19 16:32:28.000000000 +0200
+@@ -136,6 +136,15 @@ int copy_file(const char *source, const
+ }
+ }
+
++ if (flags & FILEUTILS_NO_TRUNC) {
++ if (unlink(dest) < 0) {
++ bb_perror_msg("unable to remove `%s'", dest);
++ close(src_fd);
++ return -1;
++ }
++ goto dest_removed;
++ }
++
+ dst_fd = open(dest, O_WRONLY|O_TRUNC);
+ if (dst_fd == -1) {
+ if (!(flags & FILEUTILS_FORCE)) {
diff --git a/packages/busybox/busybox_1.00.bb b/packages/busybox/busybox_1.00.bb
index ca2db7e760..262d6afff1 100644
--- a/packages/busybox/busybox_1.00.bb
+++ b/packages/busybox/busybox_1.00.bb
@@ -94,7 +94,7 @@ pkg_prerm_${PN} () {
# providing its files, this will make update-alternatives work, but the update-rc.d part
# for syslog, httpd and/or udhcpd will fail if there is no other package providing sh
tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX`
- cp -a /bin/busybox $tmpdir/
+ cp -pPR /bin/busybox $tmpdir/
ln -s /bin/busybox $tmpdir/[
ln -s /bin/busybox $tmpdir/test
ln -s /bin/busybox $tmpdir/head
diff --git a/packages/busybox/busybox_1.2.1.bb b/packages/busybox/busybox_1.2.1.bb
index 325111c22f..3b7016a42c 100644
--- a/packages/busybox/busybox_1.2.1.bb
+++ b/packages/busybox/busybox_1.2.1.bb
@@ -5,6 +5,7 @@ PR = "r15"
SRC_URI += "file://wget-long-options.patch;patch=1 \
file://df_rootfs.patch;patch=1 \
file://defconfig"
+SRC_URI_append_avr32 = " file://install-should-unlink-dest-if-it-exists.patch;patch=1"
do_configure () {
install -m 0644 ${WORKDIR}/defconfig ${S}/.config.oe
diff --git a/packages/busybox/files/install-should-unlink-dest-if-it-exists.patch b/packages/busybox/files/install-should-unlink-dest-if-it-exists.patch
new file mode 100644
index 0000000000..4bec313f0e
--- /dev/null
+++ b/packages/busybox/files/install-should-unlink-dest-if-it-exists.patch
@@ -0,0 +1,53 @@
+---
+ coreutils/install.c | 2 +-
+ include/libbb.h | 3 ++-
+ libbb/copy_file.c | 9 +++++++++
+ 3 files changed, 12 insertions(+), 2 deletions(-)
+
+Index: busybox-1.2.1/coreutils/install.c
+===================================================================
+--- busybox-1.2.1.orig/coreutils/install.c 2006-10-19 16:33:48.000000000 +0200
++++ busybox-1.2.1/coreutils/install.c 2006-10-19 16:35:58.000000000 +0200
+@@ -59,7 +59,7 @@ int install_main(int argc, char **argv)
+ char *gid_str = "-1";
+ char *uid_str = "-1";
+ char *mode_str = "0755";
+- int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE;
++ int copy_flags = FILEUTILS_DEREFERENCE | FILEUTILS_FORCE | FILEUTILS_NO_TRUNC;
+ int ret = EXIT_SUCCESS, flags, i, isdir;
+
+ #if ENABLE_FEATURE_INSTALL_LONG_OPTIONS
+Index: busybox-1.2.1/include/libbb.h
+===================================================================
+--- busybox-1.2.1.orig/include/libbb.h 2006-10-19 16:24:50.000000000 +0200
++++ busybox-1.2.1/include/libbb.h 2006-10-19 16:32:40.000000000 +0200
+@@ -345,7 +345,8 @@ enum { /* DO NOT CHANGE THESE VALUES! c
+ FILEUTILS_DEREFERENCE = 2,
+ FILEUTILS_RECUR = 4,
+ FILEUTILS_FORCE = 8,
+- FILEUTILS_INTERACTIVE = 16
++ FILEUTILS_INTERACTIVE = 16,
++ FILEUTILS_NO_TRUNC = 32
+ };
+
+ extern const char *bb_applet_name;
+Index: busybox-1.2.1/libbb/copy_file.c
+===================================================================
+--- busybox-1.2.1.orig/libbb/copy_file.c 2006-10-19 16:26:53.000000000 +0200
++++ busybox-1.2.1/libbb/copy_file.c 2006-10-19 16:32:28.000000000 +0200
+@@ -136,6 +136,15 @@ int copy_file(const char *source, const
+ }
+ }
+
++ if (flags & FILEUTILS_NO_TRUNC) {
++ if (unlink(dest) < 0) {
++ bb_perror_msg("unable to remove `%s'", dest);
++ close(src_fd);
++ return -1;
++ }
++ goto dest_removed;
++ }
++
+ dst_fd = open(dest, O_WRONLY|O_TRUNC);
+ if (dst_fd == -1) {
+ if (!(flags & FILEUTILS_FORCE)) {
diff --git a/packages/busybox/slingbox-1.3.1/trylink-bash.patch b/packages/busybox/slingbox-1.3.1/trylink-bash.patch
new file mode 100644
index 0000000000..a1b00f6ddb
--- /dev/null
+++ b/packages/busybox/slingbox-1.3.1/trylink-bash.patch
@@ -0,0 +1,8 @@
+--- busybox-1.3.1/scripts/trylink~ 2006-12-27 15:23:24.000000000 +1030
++++ busybox-1.3.1/scripts/trylink 2007-12-19 15:03:20.000000000 +1030
+@@ -1,4 +1,4 @@
+-#!/bin/sh
++#!/bin/bash
+
+ debug=false
+
diff --git a/packages/busybox/slingbox_1.00.bb b/packages/busybox/slingbox_1.00.bb
index 2d2d88317c..e52a1b4eb6 100644
--- a/packages/busybox/slingbox_1.00.bb
+++ b/packages/busybox/slingbox_1.00.bb
@@ -17,7 +17,6 @@ S = "${WORKDIR}/busybox-${PV}"
export EXTRA_CFLAGS = "${CFLAGS}"
EXTRA_OEMAKE_append = " CROSS=${HOST_PREFIX}"
-PACKAGES = "${PN}"
FILES_${PN} = "/"
FILES_${PN}-doc = ""
FILES_${PN}-dev = ""
diff --git a/packages/busybox/slingbox_1.1.3.bb b/packages/busybox/slingbox_1.1.3.bb
index 2a86748f28..b290841eed 100644
--- a/packages/busybox/slingbox_1.1.3.bb
+++ b/packages/busybox/slingbox_1.1.3.bb
@@ -19,7 +19,6 @@ S = "${WORKDIR}/busybox-${PV}"
export EXTRA_CFLAGS = "${CFLAGS}"
EXTRA_OEMAKE_append = " CROSS=${HOST_PREFIX}"
-PACKAGES = "${PN}"
FILES_${PN} = "/"
FILES_${PN}-doc = ""
FILES_${PN}-dev = ""
diff --git a/packages/busybox/slingbox_1.2.2.bb b/packages/busybox/slingbox_1.2.2.bb
index 523e2199f5..1a3eaa3985 100644
--- a/packages/busybox/slingbox_1.2.2.bb
+++ b/packages/busybox/slingbox_1.2.2.bb
@@ -21,7 +21,6 @@ S = "${WORKDIR}/busybox-${PV}"
export EXTRA_CFLAGS = "${CFLAGS}"
EXTRA_OEMAKE_append = " CROSS=${HOST_PREFIX}"
-PACKAGES = "${PN}"
FILES_${PN} = "/"
FILES_${PN}-doc = ""
FILES_${PN}-dev = ""
diff --git a/packages/busybox/slingbox_1.3.1.bb b/packages/busybox/slingbox_1.3.1.bb
index 62d150a9fe..a680efc843 100644
--- a/packages/busybox/slingbox_1.3.1.bb
+++ b/packages/busybox/slingbox_1.3.1.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "http://www.busybox.net"
LICENSE = "GPL"
SECTION = "base"
PRIORITY = "required"
-PR = "r1"
+PR = "r2"
COMPATIBLE_MACHINE = "nslu2"
SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
@@ -14,6 +14,7 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
file://lazy_umount.patch;patch=1 \
file://halt.patch;patch=1 \
file://fdisk-readhex.patch;patch=1 \
+ file://trylink-bash.patch;patch=1 \
file://slingbox_name.patch;patch=1 \
file://slingbox.patch;patch=1"
@@ -22,7 +23,6 @@ S = "${WORKDIR}/busybox-${PV}"
export EXTRA_CFLAGS = "${CFLAGS}"
EXTRA_OEMAKE_append = " V=1 ARCH=arm CROSS_COMPILE=${TARGET_PREFIX}"
-PACKAGES = "${PN}"
FILES_${PN} = "/"
FILES_${PN}-doc = ""
FILES_${PN}-dev = ""
diff --git a/packages/cacao/cacao-cldc.inc b/packages/cacao/cacao-cldc.inc
new file mode 100644
index 0000000000..0a6e5249e7
--- /dev/null
+++ b/packages/cacao/cacao-cldc.inc
@@ -0,0 +1,64 @@
+DESCRIPTION = "Cacao-cldc is a Java Virtual Machine, which uses MIDPath CLDC as default Java core library"
+HOMEPAGE = "http://www.cacaojvm.org/"
+LICENSE = "GPL"
+PRIORITY = "optional"
+SECTION = "interpreters"
+
+DEPENDS = "zlib libtool classpath midpath-cldc cacaoh-cldc-native virtual/javac-native"
+
+# Avoid version number here, otherwise dpkg will expect a package name
+# and cannot be satisfied with a package that provides classpath.
+RDEPENDS = "midpath-cldc"
+
+PROVIDES = "cacao-cldc virtual/java-cldc"
+RPROVIDES_cacao-cldc = "java-cldc-runtime"
+
+inherit autotools update-alternatives
+
+EXTRA_OECONF = "\
+ ${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \
+ --enable-debug \
+ --enable-jni \
+ --disable-libjvm \
+ --enable-java=cldc1.1 \
+ --with-classpath=cldc1.1 \
+ --with-classpath-classes=${STAGING_DATADIR}/midpath-cldc/midpath-cldc1.1.jar \
+ --with-target-classpath-classes=${datadir}/midpath-cldc/midpath-cldc1.1.jar \
+ --with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh-cldc-${PV} \
+ --with-classpath-libdir=${STAGING_LIBDIR}/classpath \
+ --with-classpath-includedir=${STAGING_INCDIR}/classpath \
+ --with-vm-zip=${datadir}/cacao-cldc/vm.zip \
+ --libdir=${libdir}/cacao-cldc \
+ --program-suffix=-cldc \
+ "
+
+S = "${WORKDIR}/cacao-${PV}"
+
+PACKAGES = "${PN} ${PN}-doc ${PN}-dbg"
+
+FILES_${PN} = "${bindir}/${PN} ${libdir}/lib*.so* ${datadir}/${PN}"
+FILES_${PN}-doc = "${datadir}/man"
+FILES_${PN}-dbg += "${bindir}/.debug ${libdir}/.debug/lib*.so*"
+
+ALTERNATIVE_NAME = "java-cldc"
+ALTERNATIVE_LINK = "${bindir}/${ALTERNATIVE_NAME}"
+ALTERNATIVE_PATH = "${bindir}/cacao-cldc"
+ALTERNATIVE_PRIORITY = "10"
+
+do_configure_prepend() {
+ # Replaces the placeholder OE_LIBDIR_JNI with the JNI library directory
+ # configured in OE.
+ if [ -e src/vm/properties.c ]; then
+ sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/properties.c
+ fi
+
+ if [ -e src/vm/properties.c ]; then
+ sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/vm.c
+ fi
+}
+
+do_configure_append() {
+ # Fix the executable name in the wrapper script.
+ sed -i -e "s|exec cacao|exec cacao-cldc|" src/scripts/java.in
+}
+
diff --git a/packages/cacao/cacao-cldc_0.98.bb b/packages/cacao/cacao-cldc_0.98.bb
index 0f6af678f5..f5a48c40a9 100644
--- a/packages/cacao/cacao-cldc_0.98.bb
+++ b/packages/cacao/cacao-cldc_0.98.bb
@@ -1,35 +1,17 @@
+# Compatible with GNU Classpath 0.95 only!
-require cacao.inc
+require cacao-cldc.inc
-SRC_URI +="file://midpath.patch;patch=1 \
- file://offsets_make.patch;patch=1 \
- file://classpath_var.patch;patch=1 \
- file://libmath.patch;patch=1 \
- file://arm_mmap.patch;patch=1 \
- "
-SRC_URI_append_arm = "file://offset.h_arm.patch;patch=1"
-
-DEPENDS = "cacaoh-cldc-native ecj-native classpath-minimal-native virtual/cldc-api-1.1 libtool zlib"
-RDEPENDS = "virtual/cldc-api-1.1 libltdl"
-RPROVIDES = "virtual/java"
+PR = "r1"
-EXTRA_OECONF += "--with-classpath-libdir=${STAGING_DATADIR}/classpath-minimal \
- --with-classpath-includedir=${STAGING_INCDIR}/classpath-minimal \
- --enable-jni \
- --enable-java=cldc1.1 \
- --with-classpath=cldc1.1 \
- --with-classpath-classes=${STAGING_DATADIR}/java/cldc1.1.jar \
- --with-target-classpath-classes=${datadir}/java/cldc1.1.jar \
- --with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh \
- --disable-libjvm \
- "
+SRC_URI += "\
+ http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=8b8907c8b925761c9410bcadb9705346 \
+ file://midpath.patch;patch=1 \
+ file://offsets_make.patch;patch=1 \
+ file://classpath_var.patch;patch=1 \
+ file://libmath.patch;patch=1 \
+ file://arm_mmap.patch;patch=1 \
+ "
-PACKAGES = "${PN} ${PN}-doc ${PN}-dbg"
-
-FILES_${PN} = "${bindir}/cacao"
-FILES_${PN}-doc = "${datadir}/man"
-FILES_${PN}-dbg = "${bindir}/.debug"
+SRC_URI_append_arm = "file://offset.h_arm.patch;patch=1"
-ALTERNATIVE_NAME = "java"
-ALTERNATIVE_PATH = "${bindir}/cacao"
-ALTERNATIVE_PRIORITY = "10"
diff --git a/packages/cacao/cacao-initial_0.98.bb b/packages/cacao/cacao-initial_0.98.bb
new file mode 100644
index 0000000000..08abf41c33
--- /dev/null
+++ b/packages/cacao/cacao-initial_0.98.bb
@@ -0,0 +1,34 @@
+require cacao-native.inc
+
+PROVIDES = "virtual/java-initial"
+
+DEPENDS = "zlib-native libtool-native fastjar-native classpath-initial jikes-initial"
+
+PR = "r0"
+
+SRC_URI = "\
+ http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2; \
+ file://cacao-0.98-initial.patch;patch=1;pnum=1 \
+ "
+
+# libjvm disabled - it would conflict with cacao-native installations
+EXTRA_OECONF = "\
+ --enable-debug \
+ --with-classpath-libdir=${libdir} \
+ --with-classpath-includedir=${includedir}/classpath-initial \
+ --with-classpath-classes=${datadir}/classpath-initial/glibj.zip \
+ --with-vm-zip=${datadir}/cacao-initial/vm.zip \
+ --program-suffix=-initial \
+ --disable-libjvm \
+ "
+
+# enforces the usage of jikes-initial
+export JAVAC=jikes-initial
+
+# enforces the usage of fastjar
+export JAR=fastjar
+
+do_configure_append() {
+ # Fix the executable name in the wrapper script.
+ sed -i -e "s|exec cacao|exec cacao-initial|" src/scripts/java.in
+}
diff --git a/packages/cacao/cacao-native.inc b/packages/cacao/cacao-native.inc
new file mode 100644
index 0000000000..26d3d37f58
--- /dev/null
+++ b/packages/cacao/cacao-native.inc
@@ -0,0 +1,27 @@
+DESCRIPTION = "CacaoVM for use as OpenEmbedded's Java VM"
+HOMEPAGE = "http://www.cacaojvm.org/"
+LICENSE = "GPL"
+PRIORITY = "optional"
+SECTION = "interpreters"
+
+DEPENDS = "zlib-native libtool-native classpath-native ecj-initial fastjar-native"
+
+PROVIDES = "virtual/java-native"
+
+S = "${WORKDIR}/cacao-${PV}"
+
+inherit native autotools
+
+EXTRA_OECONF = "\
+ --enable-debug \
+ --with-classpath-libdir=${libdir} \
+ --with-classpath-includedir=${includedir}/classpath \
+ --with-classpath-classes=${datadir}/classpath/glibj.zip \
+ --with-vm-zip=${datadir}/cacao/vm.zip \
+ "
+
+# force usage of ecj-initial (but Java5-compatible class library)
+export JAVAC="${STAGING_BINDIR_NATIVE}/ecj-initial -bootclasspath ${STAGING_DATADIR_NATIVE}/classpath/glibj.zip"
+
+# force usage of fastjar
+export JAR=fastjar
diff --git a/packages/cacao/cacao-native_0.98+hg20071001.bb b/packages/cacao/cacao-native_0.98+hg20071001.bb
new file mode 100644
index 0000000000..409d2c7858
--- /dev/null
+++ b/packages/cacao/cacao-native_0.98+hg20071001.bb
@@ -0,0 +1,5 @@
+require cacao-native.inc
+
+PR = "r1"
+
+SRC_URI = "http://jalimo.evolvis.org/repository/sources/cacao-${PV}.tar.bz2;md5sum=9ff10c929bd0cbf15909107c1aff7518"
diff --git a/packages/cacao/cacao.inc b/packages/cacao/cacao.inc
index 9315babfb9..09fc741579 100644
--- a/packages/cacao/cacao.inc
+++ b/packages/cacao/cacao.inc
@@ -1,16 +1,51 @@
-DESCRIPTION = "cacao is a Java Virtual Machine, which uses GNU Classpath as default Java core library"
+DESCRIPTION = "Cacao is a Java Virtual Machine, which uses GNU Classpath as default Java core library"
HOMEPAGE = "http://www.cacaojvm.org/"
LICENSE = "GPL"
PRIORITY = "optional"
SECTION = "interpreters"
-PR = "r1"
-inherit autotools
+DEPENDS = "zlib libtool classpath cacaoh-native virtual/javac-native"
-SRC_URI = "http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-0.98/cacao-${PV}.tar.bz2;md5sum=8b8907c8b925761c9410bcadb9705346"
+# Avoid version number here, otherwise dpkg will expect a package name
+# and cannot be satisfied with a package that provides classpath.
+RDEPENDS = "classpath"
-S = "${WORKDIR}/cacao-${PV}"
+PROVIDES = "cacao virtual/java"
+RPROVIDES_cacao = "java2-runtime"
+
+inherit autotools update-alternatives
+
+EXTRA_OECONF = "\
+ ${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \
+ --enable-debug \
+ --with-cacaoh=${STAGING_BINDIR_NATIVE}/cacaoh-${PV} \
+ --with-classpath-includedir=${STAGING_INCDIR}/classpath \
+ --with-classpath-classes=${STAGING_DATADIR}/classpath/glibj.zip \
+ --with-target-classpath-classes=${datadir}/classpath/glibj.zip \
+ --with-vm-zip=${datadir}/cacao/vm.zip \
+ --with-classpath-libdir=${libdir} \
+ "
+
+PACKAGES = "${PN} ${PN}-doc ${PN}-dbg"
+
+FILES_${PN} = "${bindir}/${PN} ${libdir}/lib*.so* ${datadir}/${PN}"
+FILES_${PN}-doc = "${datadir}/man"
+FILES_${PN}-dbg += "${bindir}/.debug ${libdir}/.debug/lib*.so*"
+
+ALTERNATIVE_NAME = "java"
+ALTERNATIVE_LINK = "${bindir}/${ALTERNATIVE_NAME}"
+ALTERNATIVE_PATH = "${bindir}/cacao"
+ALTERNATIVE_PRIORITY = "10"
+
+do_configure_prepend() {
+ # Replaces the placeholder OE_LIBDIR_JNI with the JNI library directory
+ # configured in OE.
+ if [ -e src/vm/properties.c ]; then
+ sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/properties.c
+ fi
+
+ if [ -e src/vm/properties.c ]; then
+ sed -i -e "s|OE_LIBDIR_JNI|${libdir}/jni|" src/vm/vm.c
+ fi
+}
-EXTRA_OECONF = "--disable-debug \
- ${@['','--enable-softfloat'][bb.data.getVar('TARGET_FPU',d,1) == 'soft']} \
- "
diff --git a/packages/cacao/cacao_0.98+hg20071001.bb b/packages/cacao/cacao_0.98+hg20071001.bb
new file mode 100644
index 0000000000..94919ad24a
--- /dev/null
+++ b/packages/cacao/cacao_0.98+hg20071001.bb
@@ -0,0 +1,22 @@
+require cacao.inc
+
+PR = "r7"
+
+SRC_URI = "\
+ http://jalimo.evolvis.org/repository/sources/cacao-${PV}.tar.bz2;md5sum=9ff10c929bd0cbf15909107c1aff7518 \
+ file://cacao-0.98+svn-libdir.diff;patch=1 \
+ file://cacao-0.98+svn-classpath_var.patch;patch=1 \
+ file://cacao-0.98+hg-arm-cacheflush-fix.patch;patch=1 \
+ file://cacao-0.98+hg-attachthread.patch;patch=1 \
+ "
+
+EXTRA_OECONF += "\
+ --enable-annotations \
+ "
+
+# Quirks for Nokia N800:
+# - with mfloat-abi=softfp the runtime fails to run anything
+# - without --enable-softfloat it cannot find files within Jars
+TARGET_CC_ARCH_nokia800 = "-march=armv6j -mtune=arm1136jf-s -mfpu=vfp -mfloat-abi=soft"
+
+EXTRA_OECONF_append_nokia800 = "--enable-softfloat"
diff --git a/packages/cacao/cacaoh-cldc-native_0.98.bb b/packages/cacao/cacaoh-cldc-native_0.98.bb
index 7ea7cad5dd..e2c92cc328 100644
--- a/packages/cacao/cacaoh-cldc-native_0.98.bb
+++ b/packages/cacao/cacaoh-cldc-native_0.98.bb
@@ -1,16 +1,19 @@
+require cacaoh-native.inc
-require cacao.inc
+DEPENDS += "midpath-cldc-native"
-DEPENDS = "ecj-native classpath-minimal-native virtual/cldc-api-1.1-native libtool-native zlib-native"
+SRC_URI = "\
+ http://www.complang.tuwien.ac.at/cacaojvm/download/cacao-${PV}/cacao-${PV}.tar.bz2;md5sum=8b8907c8b925761c9410bcadb9705346 \
+ "
-inherit native
-
-EXTRA_OECONF += "--with-classpath-includedir=${STAGING_INCDIR}/classpath-minimal \
- --enable-jni \
- --enable-java=cldc1.1 \
- --with-classpath=cldc1.1 \
- --with-classpath-classes=${STAGING_DATADIR}/java/cldc1.1.jar \
- "
+EXTRA_OECONF += "\
+ --with-classpath-includedir=${STAGING_INCDIR}/classpath \
+ --enable-jni \
+ --enable-java=cldc1.1 \
+ --with-classpath=cldc1.1 \
+ --with-classpath-classes=${STAGING_DATADIR}/midpath-cldc/midpath-cldc1.1.jar \
+"
+
do_stage() {
- install -m 0755 src/cacaoh/.libs/cacaoh ${STAGING_BINDIR}/
+ install -m 0755 src/cacaoh/.libs/cacaoh ${STAGING_BINDIR}/cacaoh-cldc-${PV}
}
diff --git a/packages/cacao/cacaoh-native.inc b/packages/cacao/cacaoh-native.inc
new file mode 100644
index 0000000000..3e7fdd60c6
--- /dev/null
+++ b/packages/cacao/cacaoh-native.inc
@@ -0,0 +1,27 @@
+DESCRIPTION = "Header generator for Cacao JVM - Needed for cross-compilation builds"
+HOMEPAGE = "http://www.cacaojvm.org/"
+LICENSE = "GPL"
+
+DEPENDS = "libtool-native zlib-native virtual/javac-native classpath-native"
+
+S = "${WORKDIR}/cacao-${PV}"
+
+PR = "r1"
+
+inherit autotools native
+
+EXTRA_OECONF = " \
+ --with-classpath-includedir=${STAGING_INCDIR}/classpath \
+ --with-classpath-classes=${STAGING_DATADIR}/classpath/glibj.zip \
+ "
+
+do_compile() {
+ # Compile the header generator only (and what is needed for it).
+ oe_runmake -C src/toolbox libtoolbox.la
+ oe_runmake -C src/vmcore libvmcore.la
+ oe_runmake -C src/cacaoh cacaoh
+}
+
+do_stage() {
+ install -m 0755 src/cacaoh/.libs/cacaoh ${STAGING_BINDIR}/cacaoh-${PV}
+}
diff --git a/packages/cacao/cacaoh-native_0.98+hg20071001.bb b/packages/cacao/cacaoh-native_0.98+hg20071001.bb
new file mode 100644
index 0000000000..cb552df827
--- /dev/null
+++ b/packages/cacao/cacaoh-native_0.98+hg20071001.bb
@@ -0,0 +1,5 @@
+require cacaoh-native.inc
+
+SRC_URI = "http://jalimo.evolvis.org/repository/sources/cacao-${PV}.tar.bz2;md5sum=9ff10c929bd0cbf15909107c1aff7518"
+
+
diff --git a/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-fix.patch b/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-fix.patch
new file mode 100644
index 0000000000..4e63f501ff
--- /dev/null
+++ b/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-fix.patch
@@ -0,0 +1,18 @@
+diff -r df1b780317c3 src/vm/jit/arm/asmpart.S
+--- a/src/vm/jit/arm/asmpart.S Thu Jan 17 01:01:35 2008 +0100
++++ b/src/vm/jit/arm/asmpart.S Mon Jan 21 00:14:41 2008 +0100
+@@ -323,10 +323,11 @@ asm_cacheflush:
+ mov a1, #0xff000000
+ #endif
+
++#if defined(__ARM_EABI__)
++ swi 0x0
++ ldmfd sp!, {r7}
++#else
+ swi sys_cacheflush
+-
+-#if defined(__ARM_EABI__)
+- ldmfd sp!, {r7}
+ #endif
+
+ mov pc, lr
diff --git a/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-workaround.patch b/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-workaround.patch
new file mode 100644
index 0000000000..813cb683f6
--- /dev/null
+++ b/packages/cacao/files/cacao-0.98+hg-arm-cacheflush-workaround.patch
@@ -0,0 +1,50 @@
+Index: cacao-0.98+hg7750/src/vm/jit/arm/asmpart.S
+===================================================================
+--- cacao-0.98+hg7750.orig/src/vm/jit/arm/asmpart.S 2007-11-28 10:14:51.000000000 +0100
++++ cacao-0.98+hg7750/src/vm/jit/arm/asmpart.S 2007-11-28 10:15:31.000000000 +0100
+@@ -302,35 +302,21 @@
+ * *
+ *******************************************************************************/
+
+-.equ sys_cacheflush,__ARM_NR_cacheflush /* syscall number for cache flushing */
+-
++.equ sys_cacheflush, 0x9f0002
+ asm_cacheflush:
+- add a1, a0, a1
+- mov a2, #0
+-
+-#if defined(__ARM_EABI__)
+- /* According to EABI, the syscall number should be passed via R7,
+- see "http://wiki.debian.org/ArmEabiPort" for additional details. */
+-
+- stmfd sp!, {r7}
+- mov r7, #0x0f0000
+- add r7, r7, #0x000002
+-#endif
++ add a1, a0, a1
++ mov a2, #0
+
+ #if 0
+- /* TWISTI: required on iyonix, maybe a linux-2.4 bug */
+- mov a0, #0x0
+- mov a1, #0xff000000
++ /* TWISTI: required on iyonix, maybe a linux-2.4 bug */
++ /* TODO: repeair this! */
++ /* cacheflush is messed up beyond all repair! */
++ mov a0, #0x0
++ mov a1, #0xff000000
+ #endif
+
+- swi sys_cacheflush
+-
+-#if defined(__ARM_EABI__)
+- ldmfd sp!, {r7}
+-#endif
+-
+- mov pc, lr
+-
++ swi #sys_cacheflush
++ mov pc, lr
+
+ /* disable exec-stacks ********************************************************/
+
diff --git a/packages/cacao/files/cacao-0.98+hg-attachthread.patch b/packages/cacao/files/cacao-0.98+hg-attachthread.patch
new file mode 100644
index 0000000000..cda01bcfb2
--- /dev/null
+++ b/packages/cacao/files/cacao-0.98+hg-attachthread.patch
@@ -0,0 +1,89 @@
+# Makes the JNI function AttachCurrentThread work properly.
+
+Index: cacao-0.98+hg20071001/src/mm/boehm-gc/include/gc.h
+===================================================================
+--- cacao-0.98+hg20071001.orig/src/mm/boehm-gc/include/gc.h 2008-01-15 14:45:41.000000000 +0100
++++ cacao-0.98+hg20071001/src/mm/boehm-gc/include/gc.h 2008-01-15 14:46:30.000000000 +0100
+@@ -905,6 +905,8 @@
+ /* in returned list. */
+ extern void GC_thr_init GC_PROTO((void));/* Needed for Solaris/X86 */
+
++extern void GC_thr_init_foreign GC_PROTO((void));/* Needed for Solaris/X86 */
++
+ #endif /* THREADS && !SRC_M3 */
+
+ #if defined(GC_WIN32_THREADS) && !defined(__CYGWIN32__) && !defined(__CYGWIN__)
+Index: cacao-0.98+hg20071001/src/mm/boehm-gc/pthread_support.c
+===================================================================
+--- cacao-0.98+hg20071001.orig/src/mm/boehm-gc/pthread_support.c 2008-01-15 14:45:41.000000000 +0100
++++ cacao-0.98+hg20071001/src/mm/boehm-gc/pthread_support.c 2008-01-15 14:46:30.000000000 +0100
+@@ -864,6 +864,27 @@
+ }
+ #endif /* GC_NETBSD_THREADS */
+
++void GC_thr_init_foreign()
++{
++# ifndef GC_DARWIN_THREADS
++ int dummy;
++# endif
++ GC_thread t;
++ LOCK();
++
++ /* Add the initial thread, so we can stop it. */
++ t = GC_new_thread(pthread_self());
++# ifdef GC_DARWIN_THREADS
++ t -> stop_info.mach_thread = mach_thread_self();
++# else
++ t -> stop_info.stack_ptr = (ptr_t)(&dummy);
++# endif
++ t -> flags = DETACHED;
++
++ UNLOCK();
++
++}
++
+ /* We hold the allocation lock. */
+ void GC_thr_init()
+ {
+Index: cacao-0.98+hg20071001/src/mm/boehm.c
+===================================================================
+--- cacao-0.98+hg20071001.orig/src/mm/boehm.c 2008-01-15 14:45:41.000000000 +0100
++++ cacao-0.98+hg20071001/src/mm/boehm.c 2008-01-15 14:46:30.000000000 +0100
+@@ -108,6 +108,10 @@
+ GC_expand_hp(heapstartsize - heapcurrentsize);
+ }
+
++void gc_init_foreign()
++{
++ GC_thr_init_foreign();
++}
+
+ static void gc_ignore_warnings(char *msg, GC_word arg)
+ {
+Index: cacao-0.98+hg20071001/src/mm/gc-common.h
+===================================================================
+--- cacao-0.98+hg20071001.orig/src/mm/gc-common.h 2008-01-15 14:45:41.000000000 +0100
++++ cacao-0.98+hg20071001/src/mm/gc-common.h 2008-01-15 14:46:30.000000000 +0100
+@@ -74,6 +74,7 @@
+ void gc_finalize_all(void);
+ void *gc_out_of_memory(size_t bytes_requested);
+
++void gc_init_foreign();
+
+ /* inlined functions **********************************************************/
+
+Index: cacao-0.98+hg20071001/src/threads/native/threads.c
+===================================================================
+--- cacao-0.98+hg20071001.orig/src/threads/native/threads.c 2008-01-15 14:45:41.000000000 +0100
++++ cacao-0.98+hg20071001/src/threads/native/threads.c 2008-01-15 16:01:22.000000000 +0100
+@@ -1392,7 +1392,10 @@
+
+ /* thread is completely initialized */
+
++ gc_init_foreign();
++
+ threads_thread_state_runnable(thread);
++ threads_set_current_threadobject(thread);
+
+ DEBUGTHREADS("attaching", thread);
+
diff --git a/packages/cacao/files/cacao-0.98+svn-classpath_var.patch b/packages/cacao/files/cacao-0.98+svn-classpath_var.patch
new file mode 100644
index 0000000000..255281d386
--- /dev/null
+++ b/packages/cacao/files/cacao-0.98+svn-classpath_var.patch
@@ -0,0 +1,56 @@
+Index: cacao-trunk/src/vm/properties.c
+===================================================================
+--- cacao-trunk.orig/src/vm/properties.c 2007-08-31 13:28:53.000000000 +0200
++++ cacao-trunk/src/vm/properties.c 2007-09-03 00:36:14.000000000 +0200
+@@ -294,14 +294,14 @@
+ len =
+ strlen(CACAO_VM_ZIP) +
+ strlen(":") +
+- strlen(CLASSPATH_CLASSES) +
++ strlen(TARGET_CLASSPATH_CLASSES) +
+ strlen("0");
+
+ boot_class_path = MNEW(char, len);
+
+ strcpy(boot_class_path, CACAO_VM_ZIP);
+ strcat(boot_class_path, ":");
+- strcat(boot_class_path, CLASSPATH_CLASSES);
++ strcat(boot_class_path, TARGET_CLASSPATH_CLASSES);
+
+ # elif defined(WITH_CLASSPATH_SUN)
+
+Index: cacao-trunk/configure.ac
+===================================================================
+--- cacao-trunk.orig/configure.ac 2007-08-31 13:22:03.000000000 +0200
++++ cacao-trunk/configure.ac 2007-08-31 13:30:44.000000000 +0200
+@@ -851,6 +851,7 @@
+ AC_CHECK_WITH_CLASSPATH
+ AC_CHECK_WITH_CLASSPATH_PREFIX
+ AC_CHECK_WITH_CLASSPATH_CLASSES
++AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES
+ AC_CHECK_WITH_CLASSPATH_LIBDIR
+ AC_CHECK_WITH_CLASSPATH_INCLUDEDIR
+
+Index: cacao-trunk/m4/classpath.m4
+===================================================================
+--- cacao-trunk.orig/m4/classpath.m4 2007-08-31 13:22:21.000000000 +0200
++++ cacao-trunk/m4/classpath.m4 2007-08-31 13:30:55.000000000 +0200
+@@ -98,6 +98,18 @@
+ AC_SUBST(CLASSPATH_CLASSES)
+ ])
+
++dnl where are Java core library classes installed on the target
++
++AC_DEFUN([AC_CHECK_WITH_TARGET_CLASSPATH_CLASSES],[
++AC_MSG_CHECKING(where Java core library classes are installed on the target)
++AC_ARG_WITH([target-classpath-classes],
++ [AS_HELP_STRING(--with-target-classpath-classes=<path>,path to Java core library classes (includes the name of the file and may be flat) [[default=/usr/local/classpath/share/classpath/glibj.zip]])],
++ [TARGET_CLASSPATH_CLASSES=${withval}],
++ [TARGET_CLASSPATH_CLASSES=${CLASSPATH_PREFIX}/share/classpath/glibj.zip])
++AC_MSG_RESULT(${TARGET_CLASSPATH_CLASSES})
++AC_DEFINE_UNQUOTED([TARGET_CLASSPATH_CLASSES], "${TARGET_CLASSPATH_CLASSES}", [Java core library classes on the target])
++AC_SUBST(TARGET_CLASSPATH_CLASSES)
++])
+
+ dnl where are Java core library native libraries installed
+
diff --git a/packages/cacao/files/cacao-0.98+svn-libdir.diff b/packages/cacao/files/cacao-0.98+svn-libdir.diff
new file mode 100644
index 0000000000..f5cf9ba5a1
--- /dev/null
+++ b/packages/cacao/files/cacao-0.98+svn-libdir.diff
@@ -0,0 +1,30 @@
+Index: cacao-trunk/src/vm/properties.c
+===================================================================
+--- cacao-trunk.orig/src/vm/properties.c 2007-08-31 13:20:41.000000000 +0200
++++ cacao-trunk/src/vm/properties.c 2007-09-04 14:54:19.000000000 +0200
+@@ -210,15 +210,22 @@
+
+ # if defined(WITH_CLASSPATH_GNU)
+
+- boot_library_path = CLASSPATH_LIBDIR"/classpath";
++ boot_library_path = CLASSPATH_LIBDIR"/classpath:OE_LIBDIR_JNI";
+
+ # elif defined(WITH_CLASSPATH_SUN)
+
+- boot_library_path = CLASSPATH_LIBDIR;
++ boot_library_path = CLASSPATH_LIBDIR":OE_LIBDIR_JNI";
+
+ # elif defined(WITH_CLASSPATH_CLDC1_1)
+
+- /* No boot_library_path required. */
++ /* No boot_library_path required.
++ Well, don't be that strict on Debian-like
++ environments. Setting this to /usr/lib/jni
++ makes it unneccessary to fumble with
++ LD_LIBRARY_PATH to get things like MIDPath
++ running.
++ */
++ boot_library_path = "OE_LIBDIR_JNI";
+
+ # else
+ # error unknown classpath configuration
diff --git a/packages/cacao/files/cacao-0.98-initial.patch b/packages/cacao/files/cacao-0.98-initial.patch
new file mode 100644
index 0000000000..30b6d147e8
--- /dev/null
+++ b/packages/cacao/files/cacao-0.98-initial.patch
@@ -0,0 +1,45 @@
+Index: cacao-0.98/configure.ac
+===================================================================
+--- cacao-0.98.orig/configure.ac 2007-12-19 22:07:55.000000000 +0100
++++ cacao-0.98/configure.ac 2007-12-19 22:08:02.000000000 +0100
+@@ -27,7 +27,7 @@
+ dnl Process this file with autoconf to produce a configure script.
+
+
+-AC_INIT(cacao, 0.98, cacao@cacaojvm.org)
++AC_INIT(cacao-initial, 0.98, cacao@cacaojvm.org)
+ AC_CONFIG_SRCDIR(src/cacao/cacao.c)
+ AC_CANONICAL_HOST
+ AC_PREREQ(2.59)
+Index: cacao-0.98/src/vm/vm.c
+===================================================================
+--- cacao-0.98.orig/src/vm/vm.c 2007-12-19 22:31:19.000000000 +0100
++++ cacao-0.98/src/vm/vm.c 2007-12-19 22:32:36.000000000 +0100
+@@ -623,7 +623,7 @@
+ #else
+ puts(" java.boot.class.path : "CLASSPATH_CLASSES"");
+ #endif
+- puts(" gnu.classpath.boot.library.path: "CLASSPATH_LIBDIR"/classpath\n");
++ puts(" gnu.classpath.boot.library.path: "CLASSPATH_LIBDIR"/classpath-initial\n");
+
+ puts("Runtime variables:\n");
+ printf(" maximum heap size : %d\n", opt_heapmaxsize);
+@@ -828,15 +828,15 @@
+
+ /* and finally set the path to GNU Classpath libraries */
+
+- len = strlen(cacao_prefix) + strlen("/lib/classpath") + strlen("0");
++ len = strlen(cacao_prefix) + strlen("/lib/classpath-initial") + strlen("0");
+
+ classpath_libdir = MNEW(char, len);
+ strcpy(classpath_libdir, cacao_prefix);
+- strcat(classpath_libdir, "/lib/classpath");
++ strcat(classpath_libdir, "/lib/classpath-initial");
+ #else
+ cacao_prefix = CACAO_PREFIX;
+ cacao_libjvm = CACAO_LIBDIR"/libjvm";
+- classpath_libdir = CLASSPATH_LIBDIR"/classpath";
++ classpath_libdir = CLASSPATH_LIBDIR"/classpath-initial";
+ #endif
+
+ /* set the bootclasspath */
diff --git a/packages/gtk+/gtk+-2.4.13/.mtn2git_empty b/packages/callweaver/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/gtk+/gtk+-2.4.13/.mtn2git_empty
+++ b/packages/callweaver/.mtn2git_empty
diff --git a/packages/callweaver/callweaver-perl.bb b/packages/callweaver/callweaver-perl.bb
new file mode 100644
index 0000000000..99e2fb73bf
--- /dev/null
+++ b/packages/callweaver/callweaver-perl.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Callweaver::OGI Perl Gateway Interface Module"
+HOMEPAGE = "http://www.callweaver.org"
+SECTION = "libs"
+LICENSE = "GPL"
+DEPENDS = "install-native"
+RDEPENDS = "perl callweaver-ogi"
+PR = "r0"
+S = "${WORKDIR}/callweaver-1.2-${CWRCV}/contrib/ogi-perl/callweaver-perl-0.0.1"
+
+CWRCV = "rc5"
+
+SRC_URI = "http://devs.callweaver.org/release/callweaver-1.2.0-${CWRCV}.tar.bz2"
+
+inherit cpan
+
+do_install_append () {
+ install -d ${D}${datadir}/callweaver/ogi/perl
+ install ${S}/examples/* ${D}${datadir}/callweaver/ogi/perl
+}
+
+PACKAGES =+ "${PN}-examples"
+
+FILES_${PN}-examples = "${datadir}/callweaver/ogi/perl"
diff --git a/packages/callweaver/callweaver_1.2.0-rc5.bb b/packages/callweaver/callweaver_1.2.0-rc5.bb
new file mode 100644
index 0000000000..608181f96c
--- /dev/null
+++ b/packages/callweaver/callweaver_1.2.0-rc5.bb
@@ -0,0 +1,141 @@
+DESCRIPTION = "A flexible VOIP soft switch/PBX."
+DESCRIPTION_${PN}-ogi = "Callweaver Gateway Interface for scripted PBX call processing"
+DESCRIPTION_${PN}-fax = "Fax send/receive file and T.38 support for Callweaver"
+DESCRIPTION_${PN}-ldap = "LDAP Directory services interface for Callweaver"
+DESCRIPTION_${PN}-sounds = "Standard set of audio prompts for Callweaver"
+HOMEPAGE = "http://www.callweaver.org"
+RDEPENDS = "ssmtp"
+SECTION = "voip"
+LICENSE = "GPL"
+DEPENDS = "openssl zlib tiff libcap spandsp (>= 0.0.3+0.0.4pre10) speex readline js \
+ sox-native findutils-native"
+RRECOMMENDS = "logrotate"
+RRECOMMENDS_${PN}-ogi = "perl perl-module-strict callweaver-perl"
+PR = "r0"
+S = "${WORKDIR}/callweaver-1.2-rc5"
+
+CWRCV = "rc5"
+
+SRC_URI = "http://devs.callweaver.org/release/callweaver-1.2.0-${CWRCV}.tar.bz2 \
+ svn://svn.callweaver.org/callweaver-sounds/trunk/sounds/en_US;module=MelanieTaylor;proto=https;rev=4466 \
+ file://bootstrap.patch;patch=1 \
+ file://logrotate \
+ file://volatiles \
+ file://init"
+
+PARALLEL_MAKE = ""
+INITSCRIPT_NAME = "callweaver"
+INITSCRIPT_PARAMS = "defaults 60"
+
+inherit autotools update-rc.d
+
+EXTRA_OECONF = " --with-ssl=${STAGING_DIR}/${HOST_SYS} --enable-low_memory \
+ --disable-zaptel --with-directory-layout=lsb --enable-t38 \
+ --with-codec-speex=${STAGING_DIR}/${HOST_SYS} \
+ --with-perl-shebang='#!${bindir}/perl' --with-jabber --with-res_jabber \
+ --with-javascript --with-res_js \
+ --bindir=${bindir} --datadir=${datadir} --sysconfdir=${sysconfdir} \
+ --includedir=${includedir} --infodir=${infodir} --mandir=${mandir} \
+ --localstatedir=${localstatedir} --libdir=${libdir}"
+
+do_configure_prepend () {
+ ${S}/bootstrap.sh
+ # Fix some stupidness with the VoiceMail app naming. Case Matters!
+ sed -i 's:Voicemail:VoiceMail:' ${S}/configs/extensions.conf.sample
+ sed -i 's:/var:${localstatedir}:' ${WORKDIR}/volatiles
+ sed -i 's:/var:${localstatedir}:' ${WORKDIR}/logrotate
+ sed -i 's:/etc/init.d:${sysconfdir}/init.d:' ${WORKDIR}/logrotate
+}
+
+do_install_append() {
+ install -c -D -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/callweaver
+ install -c -D -m 644 ${WORKDIR}/logrotate ${D}${sysconfdir}/logrotate.d/callweaver
+ install -c -D -m 644 ${WORKDIR}/volatiles ${D}${sysconfdir}/default/volatiles/callweaver
+ # And now for sounds...
+ for file in `find ${WORKDIR}/MelanieTaylor -name \*.wav`; do
+ echo $file
+ sox -V $file -t raw -s -r 8000 -c 1 -w `echo $file|sed -e s/\.wav$/.sln/` resample -ql;
+ sox -V $file -t raw -U -r 8000 -c 1 -b `echo $file|sed -e s/\.wav$/.ulaw/` resample -ql;
+ sox -V $file -t raw -A -r 8000 -c 1 -b `echo $file|sed -e s/\.wav$/.alaw/` resample -ql;
+ sox -V $file -t gsm -r 8000 -c 1 -b `echo $file|sed -e s/\.wav$/.gsm/` resample -ql;
+ relfile=`echo $file|sed -e s:^${WORKDIR}/MelanieTaylor/::`
+ relfile2=`echo $relfile|sed -e s:\.wav$::`
+ install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.sln ${D}${datadir}/callweaver/sounds/$relfile2.sln
+ install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.ulaw ${D}${datadir}/callweaver/sounds/$relfile2.ulaw
+ install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.alaw ${D}${datadir}/callweaver/sounds/$relfile2.alaw
+ install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.gsm ${D}${datadir}/callweaver/sounds/$relfile2.gsm
+ done
+}
+
+pkg_postinst_prepend() {
+ grep -q callweaver ${sysconfdir}/group || addgroup --system callweaver
+ grep -q callweaver ${sysconfdir}/passwd || adduser --system --home ${localstatedir}/run/callweaver --no-create-home --disabled-password --ingroup callweaver -s ${base_bindir}/false callweaver
+ chown -R callweaver:callweaver ${libdir}/callweaver ${localstatedir}/lib/callweaver ${localstatedir}/spool/callweaver ${localstatedir}/log/callweaver ${localstatedir}/run/callweaver ${sysconfdir}/callweaver ${datadir}/callweaver
+ /etc/init.d/populate-volatile.sh update
+}
+
+pkg_postinst_${PN}-fax () {
+ chown -R callweaver:callweaver ${libdir}/callweaver
+}
+
+pkg_postinst_${PN}-ldap () {
+ chown -R callweaver:callweaver ${libdir}/callweaver
+}
+
+pkg_postinst_${PN}-sounds () {
+ chown -R callweaver:callweaver ${datadir}/callweaver
+}
+
+CONFFILES_${PN} += "${sysconfdir}/callweaver/musiconhold.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/adsi.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/adtranvofr.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/agents.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/cdr.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/callweaver.adsi"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/callweaver.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/cdr_custom.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/cdr_manager.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/cdr_tds.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/codecs.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/dnsmgr.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/dundi.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/enum.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/extconfig.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/extensions.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/extensions.ael"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/features.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/iax.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/indications.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/logger.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/manager.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/meetme.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/mgcp.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/modem.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/modules.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/muted.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/osp.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/privacy.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/queues.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/rpt.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/rtp.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/sip.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/sip_notify.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/udptl.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/voicemail.conf"
+CONFFILES_${PN} += "${sysconfdir}/callweaver/woomera.conf"
+
+PACKAGES = "${PN}-dbg ${PN}-sounds ${PN}-fax ${PN}-ogi ${PN}-ldap ${PN}-doc ${PN}-dev ${PN}"
+
+FILES_${PN}-dbg += "${datadir}/callweaver/ogi/.debug ${libdir}/callweaver/modules/.debug"
+FILES_${PN}-sounds += "${datadir}/callweaver/sounds/*"
+FILES_${PN}-dev += "${libdir}/callweaver/modules/*.la \
+ ${libdir}/callweaver/*.la \
+ ${libdir}/callweaver/*.so \
+ ${includedir}/callweaver/*"
+FILES_${PN}-fax += "${libdir}/callweaver/modules/app_backgrounddetect.so \
+ ${libdir}/callweaver/modules/app_faxdetect.so \
+ ${libdir}/callweaver/modules/app_rxfax.so \
+ ${libdir}/callweaver/modules/app_txfax.so"
+FILES_${PN}-ogi += "${libdir}/callweaver/modules/res_ogi.so \
+ ${datadir}/callweaver/ogi/*"
+FILES_${PN}-ldap += "${libdir}/callweaver/modules/app_ldap.*"
diff --git a/packages/jamvm/jamvm-1.3.0/.mtn2git_empty b/packages/callweaver/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/jamvm/jamvm-1.3.0/.mtn2git_empty
+++ b/packages/callweaver/files/.mtn2git_empty
diff --git a/packages/callweaver/files/bootstrap.patch b/packages/callweaver/files/bootstrap.patch
new file mode 100644
index 0000000000..b3a021cd8d
--- /dev/null
+++ b/packages/callweaver/files/bootstrap.patch
@@ -0,0 +1,13 @@
+Index: callweaver-1.2-rc5/bootstrap.sh
+===================================================================
+--- callweaver-1.2-rc5.orig/bootstrap.sh 2008-01-18 10:47:41.000000000 +0100
++++ callweaver-1.2-rc5/bootstrap.sh 2008-01-18 10:48:02.000000000 +0100
+@@ -36,7 +36,7 @@
+ debug "Found $COMMAND"
+ fi
+
+- INS_VER=`$COMMAND --version | head -1 | sed 's/[^0-9]*//' | cut -d' ' -f1`
++ INS_VER=`$COMMAND --version | head -n 1 | sed 's/[^0-9]*//' | cut -d' ' -f1`
+ INS_MAJOR=`echo $INS_VER | cut -d. -f1 | sed s/[a-zA-Z\-].*//g`
+ INS_MINOR=`echo $INS_VER | cut -d. -f2 | sed s/[a-zA-Z\-].*//g`
+ INS_MICRO=`echo $INS_VER | cut -d. -f3 | sed s/[a-zA-Z\-].*//g`
diff --git a/packages/callweaver/files/init b/packages/callweaver/files/init
new file mode 100644
index 0000000000..02cc3c1b0e
--- /dev/null
+++ b/packages/callweaver/files/init
@@ -0,0 +1,75 @@
+#! /bin/sh
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/callweaver and type
+# > update-rc.d callweaver defaults 60
+#
+callweaver=/usr/sbin/callweaver
+pidfile=/var/run/callweaver/callweaver.pid
+
+test -x "$callweaver" || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting Callweaver"
+ start-stop-daemon --start --quiet --exec $callweaver -- -npq
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping Callweaver"
+ $callweaver -rx "stop gracefully"
+ sleep 4
+ if [ -f $pidfile ]; then
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ fi
+ echo "."
+ ;;
+ force-stop)
+ echo -n "Stopping Callweaver"
+ $callweaver -rx "stop now"
+ sleep 2
+ if [ -f $pidfile ]; then
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ fi
+ echo "."
+ ;;
+ restart)
+ echo -n "Restarting Callweaver"
+ if [ -f $pidfile ]; then
+ $callweaver -rx "restart gracefully"
+ sleep 2
+ else
+ start-stop-daemon --start --quiet --exec $callweaver -- -npq
+ fi
+ ;;
+ force-restart)
+ echo -n "Forcibly Restarting Callweaver"
+ if [ -f $pidfile ]; then
+ $callweaver -rx "restart now"
+ sleep 2
+ else
+ start-stop-daemon --start --quiet --exec $callweaver -- -npq
+ fi
+ ;;
+ reload)
+ echo -n "Reloading Callweaver Configuration"
+ if [ -f $pidfile ]; then
+ $callweaver -rx "reload"
+ else
+ start-stop-daemon --start --quiet --exec $callweaver -- -npq
+ fi
+ echo "."
+ ;;
+ logger-reload)
+# echo -n "Restating Callweaver Logger"
+ if [ -f $pidfile ]; then
+ $callweaver -rx "logger reload"
+ fi
+# echo "."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/callweaver {start|stop|force-stop|restart|force-restart|reload|logger-reload}"
+ exit 1
+esac
+
+exit 0
diff --git a/packages/callweaver/files/logrotate b/packages/callweaver/files/logrotate
new file mode 100644
index 0000000000..438f5f16bd
--- /dev/null
+++ b/packages/callweaver/files/logrotate
@@ -0,0 +1,13 @@
+/var/log/callweaver/cdr-csv/Master.csv /var/log/callweaver/queue_log /var/log/callweaver/event_log /var/log/callweaver/messages
+/var/log/callweaver/full {
+ daily
+ missingok
+ compress
+ delaycompress
+ rotate 30
+ sharedscripts
+ postrotate
+ /etc/init.d/callweaver logger-reload
+ endscript
+}
+
diff --git a/packages/callweaver/files/volatiles b/packages/callweaver/files/volatiles
new file mode 100644
index 0000000000..c978630ffe
--- /dev/null
+++ b/packages/callweaver/files/volatiles
@@ -0,0 +1,6 @@
+d callweaver callweaver 0775 /var/run/callweaver none
+d callweaver callweaver 0775 /var/lib/callweaver none
+d callweaver callweaver 0775 /var/log/callweaver/cdr-csv none
+d callweaver callweaver 0775 /var/log/callweaver/cdr-custom none
+d callweaver callweaver 0775 /var/spool/callweaver/outgoing none
+d callweaver callweaver 0775 /var/spool/callweaver/voicemail none
diff --git a/packages/jamvm/jamvm/.mtn2git_empty b/packages/chumby/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/jamvm/jamvm/.mtn2git_empty
+++ b/packages/chumby/.mtn2git_empty
diff --git a/packages/chumby/chumby-firmware_1.2.bb b/packages/chumby/chumby-firmware_1.2.bb
new file mode 100644
index 0000000000..73e3a4a7a9
--- /dev/null
+++ b/packages/chumby/chumby-firmware_1.2.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "Binary Chumby firmware for kexec"
+PACKAGES = "${PN}-k2 ${PN}-rfs2 ${PN}-bl ${PN}-psp ${PN}-k1 ${PN}-rfs1"
+PR = "r1"
+
+SRC_URI = "http://files.chumby.com/resources/chumby_fw_1_2.zip"
+S = ${WORKDIR}
+
+PACKAGE_ARCH = "chumby"
+COMPATIBLE_MACHINES = "chumby"
+
+do_install () {
+ cd ${S}/update1 && unzip k2.bin.zip
+ cd ${S}/update1 && unzip rfs2.bin.zip
+ cd ${S}/update2 && unzip bl.bin.zip
+ cd ${S}/update2 && unzip psp.bin.zip
+ cd ${S}/update2 && unzip k1.bin.zip
+ cd ${S}/update2 && unzip rfs1.bin.zip
+
+ install -d ${D}/boot/chumby-firmware/
+ install -m 0644 ${S}/update1/k2.bin ${D}/boot/chumby-firmware/
+ install -m 0644 ${S}/update1/rfs2.bin ${D}/boot/chumby-firmware/
+ install -m 0644 ${S}/update2/bl.bin ${D}/boot/chumby-firmware/
+ install -m 0644 ${S}/update2/psp.bin ${D}/boot/chumby-firmware/
+ install -m 0644 ${S}/update2/k1.bin ${D}/boot/chumby-firmware/
+ install -m 0644 ${S}/update2/rfs1.bin ${D}/boot/chumby-firmware/
+}
+
+FILES_${PN}-k2 = "/boot/chumby-firmware/k2.bin"
+FILES_${PN}-rfs2 = "/boot/chumby-firmware/rfs2.bin"
+FILES_${PN}-bl = "/boot/chumby-firmware/bl.bin"
+FILES_${PN}-psp = "/boot/chumby-firmware/psp.bin"
+FILES_${PN}-k1 = "/boot/chumby-firmware/k1.bin"
+FILES_${PN}-rfs1 = "/boot/chumby-firmware/rfs1.bin"
+
diff --git a/packages/classpath/classpath-gtk_0.93.bb b/packages/classpath/classpath-gtk_0.93.bb
deleted file mode 100644
index a3b39d92f8..0000000000
--- a/packages/classpath/classpath-gtk_0.93.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require classpath.inc
-
-DEPENDS = "glib-2.0 gtk+ cairo gconf libart-lgpl pango libxtst jikes-native zip-native"
-RDEPENDS_${PN} = "classpath-common (>= ${PV})"
-RCONFLICTS_${PN} = "classpath-minimal"
-
-SRC_URI += "file://disable-automake-checks-v2.patch;patch=1"
-
-EXTRA_OECONF = "--with-jikes --disable-plugin --disable-dssi"
diff --git a/packages/classpath/classpath-gtk_cvs.bb b/packages/classpath/classpath-gtk_cvs.bb
deleted file mode 100644
index 18d79decae..0000000000
--- a/packages/classpath/classpath-gtk_cvs.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-require classpath.inc
-
-PR = "r2"
-
-SRCDATE_${PN} ?= "20070501"
-PV = "0.93+cvs${SRCDATE}"
-
-### note from Laibsch: bug 2523 has information on how to build this package
-DEPENDS = "glib-2.0 gtk+ cairo gconf ecj-native zip-native virtual/java-native libxtst"
-RDEPENDS_${PN} = "classpath-common (>= ${PV})"
-RCONFLICTS_${PN} = "classpath-minimal"
-
-SRC_URI = "cvs://anonymous@cvs.savannah.gnu.org/sources/classpath;module=classpath \
- file://disable-automake-checks-v2.patch;patch=1"
-
-S = "${WORKDIR}/classpath"
-
-EXTRA_OECONF = "--with-ecj=${STAGING_BINDIR_NATIVE}/ecj --with-ecj-jar=${STAGING_BINDIR_NATIVE}/ecj.jar --disable-plugin --disable-dssi --disable-alsa"
-
-do_stage() {
- install -d ${STAGING_INCDIR}/classpath
- install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
- install -d ${STAGING_DATADIR}/classpath
- install -m 0755 lib/glibj.zip ${STAGING_DATADIR}/classpath/
-}
-
-do_install() {
- autotools_do_install
- mv ${D}${libdir}/security ${D}${libdir}/${PN}
-}
diff --git a/packages/classpath/classpath-initial_0.93.bb b/packages/classpath/classpath-initial_0.93.bb
new file mode 100644
index 0000000000..9e303f6eba
--- /dev/null
+++ b/packages/classpath/classpath-initial_0.93.bb
@@ -0,0 +1,28 @@
+# No later version of Classpath may be used because this is the latest that can be compiled
+# by jikes!
+
+require classpath-native.inc
+
+DESCRIPTION="Java1.4-compatible GNU Classpath variant that is used as bootclasspath for jikes-native."
+
+PR = "r0"
+
+DEPENDS = "zip-native fastjar-native jikes-native"
+
+EXTRA_OECONF = "\
+ --with-jikes=jikes \
+ --with-fastjar=fastjar \
+ --with-glibj \
+ --disable-local-sockets \
+ --disable-alsa \
+ --disable-gconf-peer \
+ --disable-gtk-peer \
+ --disable-plugin \
+ --disable-dssi \
+ --disable-examples \
+ --disable-tools \
+ --with-glibj-dir=${STAGING_DATADIR}/classpath-initial \
+ --with-native-libdir=${STAGING_LIBDIR}/classpath-initial \
+ --includedir=${STAGING_INCDIR}/classpath-initial \
+ "
+
diff --git a/packages/classpath/classpath-minimal-native_0.93.bb b/packages/classpath/classpath-minimal-native_0.93.bb
deleted file mode 100644
index 83cb60142c..0000000000
--- a/packages/classpath/classpath-minimal-native_0.93.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-require classpath.inc
-
-DEPENDS = "glib-2.0 libart-lgpl pango libxtst jikes-native zip-native"
-PR = "r1"
-
-SRC_URI += "file://disable-automake-checks-v2.patch;patch=1"
-
-S = "${WORKDIR}/classpath-${PV}"
-
-inherit native
-
-EXTRA_OECONF = "--with-jikes --disable-gconf-peer --disable-gtk-peer --disable-plugin --disable-dssi --disable-examples"
-
-do_stage() {
- install -d ${STAGING_INCDIR}/classpath
- install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
- install -d ${STAGING_DATADIR}/classpath
- install -m 0755 lib/glibj.zip ${STAGING_DATADIR}/classpath/
-}
-
-do_install() {
- :
-}
diff --git a/packages/classpath/classpath-minimal_0.90.bb b/packages/classpath/classpath-minimal_0.90.bb
deleted file mode 100644
index 8d9554c999..0000000000
--- a/packages/classpath/classpath-minimal_0.90.bb
+++ /dev/null
@@ -1,9 +0,0 @@
-require classpath.inc
-
-DEPENDS = "jikes-native zip-native"
-RDEPENDS_${PBN}-minimal = "${PBN}-common (>= ${PV})"
-RCONFLICTS_${PBN}-minimal = "${PBN}-gtk"
-
-SRC_URI += "file://disable-automake-checks.patch;patch=1"
-
-EXTRA_OECONF = "--with-jikes --without-x --with-glibj --disable-gtk-peer --disable-alsa"
diff --git a/packages/classpath/classpath-minimal_0.95.bb b/packages/classpath/classpath-minimal_0.95.bb
deleted file mode 100644
index bca7a46919..0000000000
--- a/packages/classpath/classpath-minimal_0.95.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-DESCRIPTION = "GNU Classpath standard Java libraries"
-HOMEPAGE = "http://www.gnu.org/software/classpath/"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "Classpath"
-PROVIDES = "classpath"
-RPROVIDES = "classpath"
-PR = "r1"
-
-S = "${WORKDIR}/classpath-${PV}"
-
-SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz"
-
-DEPENDS = "ecj-native zip-native"
-
-inherit autotools
-
-
-EXTRA_OECONF = "--with-glibj \
- --with-ecj=${STAGING_BINDIR_NATIVE}/ecj \
- --disable-alsa \
- --disable-gconf-peer \
- --disable-gtk-peer \
- --disable-plugin \
- --disable-dssi \
- --disable-examples \
- "
-do_install() {
- :
-}
-
-do_stage() {
- install -d ${STAGING_INCDIR}/classpath-minimal/
- install -m 0644 include/jni.h ${STAGING_INCDIR}/classpath-minimal/
- install -m 0644 include/jni_md.h ${STAGING_INCDIR}/classpath-minimal/
- install -d ${STAGING_DATADIR}/java/classpath-minimal/
- install -m 0644 lib/glibj.zip ${STAGING_DATADIR}/java/classpath-minimal/
-}
-
-PACKAGES = " "
diff --git a/packages/classpath/classpath-minimal_0.96.1.bb b/packages/classpath/classpath-minimal_0.96.1.bb
new file mode 100644
index 0000000000..0597274915
--- /dev/null
+++ b/packages/classpath/classpath-minimal_0.96.1.bb
@@ -0,0 +1,17 @@
+require classpath.inc
+
+PR = "r3"
+
+SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0"
+
+PROVIDES = "${PN} classpath"
+
+EXTRA_OECONF += "\
+ --enable-local-sockets \
+ --disable-alsa \
+ --disable-gconf-peer \
+ --disable-gtk-peer \
+ --disable-plugin \
+ --disable-dssi \
+ --disable-examples \
+ "
diff --git a/packages/classpath/classpath-native.inc b/packages/classpath/classpath-native.inc
new file mode 100644
index 0000000000..bb5abaf178
--- /dev/null
+++ b/packages/classpath/classpath-native.inc
@@ -0,0 +1,32 @@
+DESCRIPTION = "GNU Classpath standard Java libraries - For native Java-dependent programs"
+HOMEPAGE = "http://www.gnu.org/software/classpath/"
+LICENSE = "Classpath"
+
+S = "${WORKDIR}/classpath-${PV}"
+
+SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz"
+
+DEPENDS = "ecj-initial fastjar-native zip-native"
+
+inherit autotools native
+
+EXTRA_OECONF = "\
+ --with-glibj \
+ --with-ecj=${STAGING_BINDIR_NATIVE}/ecj-initial \
+ --with-fastjar=fastjar \
+ --enable-local-sockets \
+ --disable-alsa \
+ --disable-gconf-peer \
+ --disable-gtk-peer \
+ --disable-plugin \
+ --disable-dssi \
+ --enable-examples \
+ --enable-tools \
+ --includedir=${STAGING_INCDIR}/classpath \
+ --with-vm=java \
+ "
+
+do_stage() {
+ oe_runmake install
+}
+
diff --git a/packages/classpath/classpath-native_0.96.1.bb b/packages/classpath/classpath-native_0.96.1.bb
new file mode 100644
index 0000000000..e7d1d07a81
--- /dev/null
+++ b/packages/classpath/classpath-native_0.96.1.bb
@@ -0,0 +1,6 @@
+require classpath-native.inc
+
+PR = "r1"
+
+SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0"
+
diff --git a/packages/classpath/classpath.inc b/packages/classpath/classpath.inc
index d9498c99d5..97c081af89 100644
--- a/packages/classpath/classpath.inc
+++ b/packages/classpath/classpath.inc
@@ -3,28 +3,62 @@ HOMEPAGE = "http://www.gnu.org/software/classpath/"
SECTION = "libs"
PRIORITY = "optional"
LICENSE = "Classpath"
-PROVIDES = "classpath"
-RPROVIDES = "classpath"
+PBN = "classpath"
-SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz \
- file://gconf_version.patch;patch=1 \
- file://fix-endian-arm-floats.patch;patch=1"
+DEPENDS = "virtual/javac-native fastjar-native zip-native"
+RPROVIDES = ""
+
+RDEPENDS_${PN} = "${PBN}-common (>= ${PV})"
+
+RPROVIDES_${PN} = "${PBN}"
+RPROVIDES_${PN}-gtk = "${PBN}-awt"
+
+SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz"
+
+S = "${WORKDIR}/${PBN}-${PV}"
+
+EXTRA_OECONF = "\
+ --with-glibj \
+ --with-ecj=javac \
+ --with-fastjar=fastjar \
+ --includedir=${includedir}/classpath \
+ --with-vm=java \
+ "
inherit autotools
do_stage() {
install -d ${STAGING_INCDIR}/classpath
- install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
+ install -m 0644 include/jni* ${STAGING_INCDIR}/classpath
+ install -m 0644 include/jni_md.h ${STAGING_INCDIR}/classpath/
+
+ install -d ${STAGING_DATADIR}/classpath
+ install -m 0644 lib/glibj.zip ${STAGING_DATADIR}/classpath
}
do_install() {
autotools_do_install
- mv ${D}${libdir}/security ${D}${libdir}/${PN}
+ mv ${D}${libdir}/security ${D}${libdir}/${PBN}
}
-PACKAGES =+ "classpath-common classpath-examples classpath-tools"
-FILES_classpath-common += "${datadir}/classpath/glibj.zip"
-FILES_classpath-examples += "${datadir}/classpath/examples"
-FILES_classpath-tools += "${datadir}/classpath/tools.zip ${datadir}/classpath/tools"
-FILES_classpath-dev += "${libdir}/*.so"
-FILES_classpath-dbg += "${libdir}/classpath/.debug"
+PACKAGES =+ "${PBN}-common ${PN}-examples \
+ ${PN}-tools ${PN}-tools-doc \
+ ${PN}-gtk ${PN}-gconf "
+
+FILES_${PN}-dev += "${libdir}/${PBN}/*.la ${incdir}/${PBN}"
+
+FILES_${PBN}-common = "${datadir}/${PBN}/glibj.zip ${libdir}/logging.properties ${libdir}/${PBN}/security"
+FILES_${PN}-examples = "${datadir}/${PBN}/examples"
+
+FILES_${PN}-tools = "${datadir}/${PBN}/tools.zip ${bindir}"
+FILES_${PN}-tools-doc = "${mandir}"
+
+FILES_${PN}-dbg += "${libdir}/${PBN}/.debug"
+FILES_${PN}-doc = "${infodir}"
+
+# gcjwebplugin - not built yet
+#FILES_${PN}-gcjwebplugin = "${libdir}/${PBN}/libgcjwebplugin.so"
+FILES_${PN}-gtk = "${libdir}/${PBN}/libgtkpeer.so ${libdir}/${PBN}/libjawt.so"
+FILES_${PN}-gconf = "${libdir}/${PBN}/libgconfpeer.so"
+FILES_${PN} = "${libdir}/${PBN}/lib*so*"
+
diff --git a/packages/classpath/classpath_0.14.bb b/packages/classpath/classpath_0.14.bb
deleted file mode 100644
index e4d73bbd3a..0000000000
--- a/packages/classpath/classpath_0.14.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require classpath.inc
-
-DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
-RDEPENDS_${PN} = "${PN}-common (${PV})"
-PR = "r2"
-
-SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
- file://disable-automake-checks.patch;patch=1"
-
-EXTRA_OECONF = "--with-jikes"
diff --git a/packages/classpath/classpath_0.15.bb b/packages/classpath/classpath_0.15.bb
deleted file mode 100644
index e4d73bbd3a..0000000000
--- a/packages/classpath/classpath_0.15.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require classpath.inc
-
-DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
-RDEPENDS_${PN} = "${PN}-common (${PV})"
-PR = "r2"
-
-SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
- file://disable-automake-checks.patch;patch=1"
-
-EXTRA_OECONF = "--with-jikes"
diff --git a/packages/classpath/classpath_0.17.bb b/packages/classpath/classpath_0.17.bb
deleted file mode 100644
index e4d73bbd3a..0000000000
--- a/packages/classpath/classpath_0.17.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require classpath.inc
-
-DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
-RDEPENDS_${PN} = "${PN}-common (${PV})"
-PR = "r2"
-
-SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
- file://disable-automake-checks.patch;patch=1"
-
-EXTRA_OECONF = "--with-jikes"
diff --git a/packages/classpath/classpath_0.18.bb b/packages/classpath/classpath_0.18.bb
deleted file mode 100644
index 9b9e8c3451..0000000000
--- a/packages/classpath/classpath_0.18.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require classpath.inc
-
-DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
-RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
-PR = "r1"
-
-SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
- file://disable-automake-checks.patch;patch=1"
-
-EXTRA_OECONF = "--with-jikes"
diff --git a/packages/classpath/classpath_0.19.bb b/packages/classpath/classpath_0.19.bb
deleted file mode 100644
index 9b9e8c3451..0000000000
--- a/packages/classpath/classpath_0.19.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require classpath.inc
-
-DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
-RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
-PR = "r1"
-
-SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
- file://disable-automake-checks.patch;patch=1"
-
-EXTRA_OECONF = "--with-jikes"
diff --git a/packages/classpath/classpath_0.20.bb b/packages/classpath/classpath_0.20.bb
deleted file mode 100644
index 9b9e8c3451..0000000000
--- a/packages/classpath/classpath_0.20.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require classpath.inc
-
-DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
-RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
-PR = "r1"
-
-SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
- file://disable-automake-checks.patch;patch=1"
-
-EXTRA_OECONF = "--with-jikes"
diff --git a/packages/classpath/classpath_0.95.bb b/packages/classpath/classpath_0.95.bb
new file mode 100644
index 0000000000..6b167a2d47
--- /dev/null
+++ b/packages/classpath/classpath_0.95.bb
@@ -0,0 +1,20 @@
+require classpath.inc
+
+SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0"
+
+PR = "r2"
+
+DEPENDS += "gtk+ gconf libxtst"
+
+EXTRA_OECONF += "\
+ --disable-alsa \
+ --disable-dssi \
+ --disable-qt4-peer \
+ --disable-plugin \
+ --enable-gconf-peer \
+ --enable-gtk-peer \
+ --enable-local-sockets \
+ --with-vm=java \
+ "
+
+
diff --git a/packages/classpath/classpath_0.96.1.bb b/packages/classpath/classpath_0.96.1.bb
new file mode 100644
index 0000000000..6b167a2d47
--- /dev/null
+++ b/packages/classpath/classpath_0.96.1.bb
@@ -0,0 +1,20 @@
+require classpath.inc
+
+SRC_URI += "file://gjar-prefix-patch.diff;patch=1;pnum=0"
+
+PR = "r2"
+
+DEPENDS += "gtk+ gconf libxtst"
+
+EXTRA_OECONF += "\
+ --disable-alsa \
+ --disable-dssi \
+ --disable-qt4-peer \
+ --disable-plugin \
+ --enable-gconf-peer \
+ --enable-gtk-peer \
+ --enable-local-sockets \
+ --with-vm=java \
+ "
+
+
diff --git a/packages/classpath/classpath_cvs.bb b/packages/classpath/classpath_cvs.bb
deleted file mode 100644
index 9e5ac2f000..0000000000
--- a/packages/classpath/classpath_cvs.bb
+++ /dev/null
@@ -1,35 +0,0 @@
-DESCRIPTION = "GNU Classpath standard Java libraries"
-HOMEPAGE = "http://www.gnu.org/software/classpath/"
-LICENSE = "Classpath"
-PRIORITY = "optional"
-SECTION = "libs"
-PV = "0.20+cvs${SRCDATE}"
-
-DEFAULT_PREFERENCE = "-1"
-
-DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
-RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
-
-SRC_URI = "cvs://anoncvs@cvs.gnu.org/cvsroot/classpath;method=pserver;rsh=ssh;module=classpath \
- file://disable-automake-checks.patch;patch=1"
-S = "${WORKDIR}/classpath"
-
-inherit autotools
-
-EXTRA_OECONF = "--with-jikes"
-
-PACKAGES += " ${PN}-common ${PN}-examples"
-
-FILES_${PN} = "${libdir}/${PN}"
-FILES_${PN}-common = "${datadir}/${PN}/glibj.zip"
-FILES_${PN}-examples = "${datadir}/${PN}/examples"
-
-do_stage() {
- install -d ${STAGING_INCDIR}/classpath
- install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
-}
-
-do_install() {
- autotools_do_install
- mv ${D}${libdir}/security ${D}${libdir}/${PN}
-}
diff --git a/packages/classpath/files/gjar-prefix-patch.diff b/packages/classpath/files/gjar-prefix-patch.diff
new file mode 100644
index 0000000000..64b262cb41
--- /dev/null
+++ b/packages/classpath/files/gjar-prefix-patch.diff
@@ -0,0 +1,40 @@
+Index: tools/gnu/classpath/tools/jar/Entry.java
+===================================================================
+RCS file: /sources/classpath/classpath/tools/gnu/classpath/tools/jar/Entry.java,v
+retrieving revision 1.1
+diff -u -r1.1 Entry.java
+--- tools/gnu/classpath/tools/jar/Entry.java 8 May 2006 18:38:20 -0000 1.1
++++ tools/gnu/classpath/tools/jar/Entry.java 10 Dec 2007 22:20:05 -0000
+@@ -1,5 +1,5 @@
+ /* Entry.java - represent a single file to write to a jar
+- Copyright (C) 2006 Free Software Foundation, Inc.
++ Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+@@ -49,12 +49,22 @@
+ public Entry(File file, String name)
+ {
+ this.file = file;
+- this.name = name;
++
++ /* Removes any './' prefixes automatically. Those caused trouble
++ * in (boot) classpath use-cases. See #32516.
++ */
++ int start = 0;
++ while (name.length() > start + 2
++ && name.codePointAt(start) == '.'
++ && name.codePointAt(start + 1) == File.separatorChar)
++ start += 2;
++
++ this.name = name.substring(start);
+ }
+
+ public Entry(File file)
+ {
+- this.file = file;
+- this.name = file.toString();
++ this(file, file.toString());
+ }
++
+ }
diff --git a/packages/cmake/cmake-native_2.2.3.bb b/packages/cmake/cmake-native_2.2.3.bb
deleted file mode 100644
index b4e84cc093..0000000000
--- a/packages/cmake/cmake-native_2.2.3.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-# cppunit OE build file
-# Copyright (C) 2005, Koninklijke Philips Electronics NV. All Rights Reserved
-# Released under the MIT license (see packages/COPYING)
-
-DESCRIPTION = "A cross-platform, open-source make system"
-HOMEPAGE = "http://www.cmake.org/"
-LICENSE = "Berkely-style license"
-SECTION = "console/utils"
-
-SRC_URI = "http://www.cmake.org/files/v2.2/cmake-${PV}.tar.gz"
-
-inherit autotools
-
-S = "${WORKDIR}/cmake-${PV}"
-
-inherit native
-
-do_configure () {
- ./configure --prefix=${base_prefix} || die "./bootstrap failed"
-}
diff --git a/packages/cmake/cmake-native_2.4.8.bb b/packages/cmake/cmake-native_2.4.8.bb
new file mode 100644
index 0000000000..fcfdda1c1a
--- /dev/null
+++ b/packages/cmake/cmake-native_2.4.8.bb
@@ -0,0 +1,3 @@
+CMAKE_MAJOR_VERSION="2.4"
+require cmake.inc
+inherit native
diff --git a/packages/cmake/cmake.inc b/packages/cmake/cmake.inc
new file mode 100644
index 0000000000..83475bb5eb
--- /dev/null
+++ b/packages/cmake/cmake.inc
@@ -0,0 +1,18 @@
+# cppunit OE build file
+# Copyright (C) 2005, Koninklijke Philips Electronics NV. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+DESCRIPTION = "A cross-platform, open-source make system"
+HOMEPAGE = "http://www.cmake.org/"
+LICENSE = "Berkely-style license"
+SECTION = "console/utils"
+
+SRC_URI = "http://www.cmake.org/files/v${CMAKE_MAJOR_VERSION}/cmake-${PV}.tar.gz"
+
+inherit autotools
+
+S = "${WORKDIR}/cmake-${PV}"
+
+do_configure () {
+ ./configure --prefix=${base_prefix} || die "./bootstrap failed"
+}
diff --git a/packages/cmake/cmake_2.4.8.bb b/packages/cmake/cmake_2.4.8.bb
new file mode 100644
index 0000000000..619aea9701
--- /dev/null
+++ b/packages/cmake/cmake_2.4.8.bb
@@ -0,0 +1,2 @@
+CMAKE_MAJOR_VERSION="2.4"
+require cmake.inc
diff --git a/packages/conserver/conserver.inc b/packages/conserver/conserver.inc
index ff8314fc6e..d4d1ab6d38 100644
--- a/packages/conserver/conserver.inc
+++ b/packages/conserver/conserver.inc
@@ -25,7 +25,7 @@ FILES_${PN}-doc += "${datadir}/examples/conserver"
# Make sure .debug files end up in the correct place
FILES_${PN} = "${sysconfdir} ${bindir}/* ${libdir}/${PN}/* ${sbindir}/*"
-FILES_${PN}-dbg = "${bindir}/.debug ${sbindir}/.debug ${libdir}/${PN}/.debug"
+FILES_${PN}-dbg += "${bindir}/.debug ${sbindir}/.debug ${libdir}/${PN}/.debug"
# Indicate that the default file is a configuation file
CONFFILES_${PN} = "${sysconfdir}/default/conserver"
diff --git a/packages/cups/cups.inc b/packages/cups/cups.inc
index 20cc8c39c3..bbf2377ced 100644
--- a/packages/cups/cups.inc
+++ b/packages/cups/cups.inc
@@ -64,6 +64,12 @@ python do_package_append() {
os.system('chmod 0511 %s/install/cups/var/run/cups/certs' % workdir)
}
+PACKAGES =+ "${PN}-lib ${PN}-libimage"
+
+FILES_${PN}-lib = "${libdir}/libcups.so.*"
+
+FILES_${PN}-libimage = "${libdir}/libcupsimage.so.*"
+
FILES_${PN}-dbg += "${libdir}/cups/backend/.debug \
${libdir}/cups/cgi-bin/.debug \
${libdir}/cups/filter/.debug \
@@ -79,5 +85,3 @@ FILES_${PN} += "${datadir}/doc/cups/images \
${datadir}/icons/ \
"
-LEAD_SONAME = "libcups.so.*"
-
diff --git a/packages/cups/cups_1.2.10.bb b/packages/cups/cups_1.2.10.bb
index 125fc51caf..2361565a91 100644
--- a/packages/cups/cups_1.2.10.bb
+++ b/packages/cups/cups_1.2.10.bb
@@ -1,4 +1,4 @@
require cups.inc
-PR = "r2"
+PR = "r3"
diff --git a/packages/cups/cups_1.2.12.bb b/packages/cups/cups_1.2.12.bb
index 4a4512d790..662f0ec8ff 100644
--- a/packages/cups/cups_1.2.12.bb
+++ b/packages/cups/cups_1.2.12.bb
@@ -1,5 +1,5 @@
require cups.inc
-PR = "r0"
+PR = "r1"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/curl/curl_7.16.4.bb b/packages/curl/curl_7.16.4.bb
index f59d32d17a..0053a12fdb 100644
--- a/packages/curl/curl_7.16.4.bb
+++ b/packages/curl/curl_7.16.4.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Command line tool and library for client-side URL transfers."
LICENSE = "MIT"
DEPENDS = "zlib gnutls"
SECTION = "console/network"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://curl.haxx.se/download/curl-${PV}.tar.bz2"
S = "${WORKDIR}/curl-${PV}"
@@ -12,8 +12,9 @@ inherit autotools pkgconfig binconfig
EXTRA_OECONF = "--with-zlib=${STAGING_LIBDIR}/../ \
--with-gnutls=${STAGING_BINDIR_CROSS}/ \
--without-ssl \
+ --without-libssh2 \
--with-random=/dev/urandom \
- --without-idn \
+ --without-libidn \
--enable-crypto-auth \
"
diff --git a/packages/db/db3_3.2.9.bb b/packages/db/db3_3.2.9.bb
index a130d89bd5..7edba4f543 100644
--- a/packages/db/db3_3.2.9.bb
+++ b/packages/db/db3_3.2.9.bb
@@ -23,7 +23,7 @@ EXTRA_OEMAKE = "'SHELL=/bin/sh' 'ar=`which ${AR}` cr' 'chmod=`which chmod`' \
'cp=`which cp`' 'ln=`which ln`' 'mkdir=`which mkdir`' 'ranlib=`which ${RANLIB}`' \
'rm=`which rm`' 'strip=`which ${STRIP}`'"
-PACKAGES = "${PN} ${PN}-bin ${PN}-dev ${PN}-doc ${PN}-locale"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-bin ${PN}-dev ${PN}-doc ${PN}-locale"
FILES_${PN} = "${libdir}/libdb-3.2*so*"
FILES_${PN}-bin = "${bindir}"
diff --git a/packages/db/db_4.3.29.bb b/packages/db/db_4.3.29.bb
index 750822fafe..026b45bd67 100644
--- a/packages/db/db_4.3.29.bb
+++ b/packages/db/db_4.3.29.bb
@@ -14,7 +14,7 @@ HOMEPAGE = "http://www.sleepycat.com"
LICENSE = "BSD Sleepycat"
VIRTUAL_NAME ?= "virtual/db"
CONFLICTS = "db3"
-PR = "r8"
+PR = "r9"
SRC_URI = "http://downloads.sleepycat.com/db-${PV}.tar.gz"
#SRC_URI_MD5 = "http://downloads.sleepycat.com/db-${PV}.tar.gz.md5"
@@ -44,7 +44,7 @@ B = "${WORKDIR}/db-${PV}/build_unix"
PACKAGES += " ${PN}-bin"
# Package contents
-FILES_${PN} = "${libdir}/libdb-4*so*"
+FILES_${PN} = "${libdir}/libdb-4.*.so*"
FILES_${PN}-bin = "${bindir}/*"
# The dev package has the .so link (as in db3) and the .a's -
# it is therefore incompatible (cannot be installed at the
diff --git a/packages/dbench/dbench_3.04.bb b/packages/dbench/dbench_3.04.bb
index 5eec719b95..1f6b703ba8 100644
--- a/packages/dbench/dbench_3.04.bb
+++ b/packages/dbench/dbench_3.04.bb
@@ -13,4 +13,4 @@ inherit autotools
PACKAGES =+ "tbench tbench-dbg"
FILES_tbench = "${bindir}/tbench*"
-FILES_tbench-dbg = "${bindir}/.debug/tbench*"
+FILES_tbench-dbg += "${bindir}/.debug/tbench*"
diff --git a/packages/libmutil/.mtn2git_empty b/packages/dbus-java/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libmutil/.mtn2git_empty
+++ b/packages/dbus-java/.mtn2git_empty
diff --git a/packages/dbus-java/dbus-java_2.3.bb b/packages/dbus-java/dbus-java_2.3.bb
new file mode 100644
index 0000000000..72d99c3854
--- /dev/null
+++ b/packages/dbus-java/dbus-java_2.3.bb
@@ -0,0 +1,98 @@
+DESCRIPTION = "A pure Java D-Bus Implementation"
+DESCRIPTION_dbus-java-viewer = "${DESCRIPTION} (DBusViewer Binary)"
+DESCRIPTION_dbus-java-bin = "${DESCRIPTION} (Binaries)"
+
+LICENSE = "GPLv2 AFL"
+SECTION = "libs"
+MAINTAINER = "Fabian Koester, tarent GmbH Bonn <f.koester@tarent.de>"
+HOMEPAGE = "http://jalimo.org"
+AUTHOR = "Matthew Johnson <dbus@matthew.ath.cx>"
+
+PR = "r2"
+
+inherit java-library
+
+SRC_URI = "http://dbus.freedesktop.org/releases/dbus-java/dbus-java-${PV}.tar.gz"
+
+S = "${WORKDIR}/dbus-java-${PV}"
+
+DEPENDS = "libmatthew docbook-utils-native docbook-sgml-dtd-4.1-native"
+RSUGGESTS_libdbus-java = "libmatthew-java dbus"
+RDEPENDS_dbus-java-viewer = "java2-runtime libmatthew-java ${JPN}"
+RDEPENDS_dbus-java-bin = "java2-runtime libmatthew-java ${JPN}"
+
+do_compile () {
+ # run target .binclasses first to fix a brokenness in the Makefile
+ oe_runmake \
+ JCFLAGS="-source 1.5" \
+ JAVAC="javac" \
+ JARPREFIX="${STAGING_DATADIR}/java" \
+ JAVAUNIXJARDIR="${STAGING_DATADIR}/java" \
+ CLASSPATH="${S}/classes" \
+ JAR="fastjar" \
+ .binclasses
+
+ oe_runmake \
+ JCFLAGS="-source 1.5" \
+ JAVAC="javac" \
+ JARPREFIX="${STAGING_DATADIR}/java" \
+ JAVAUNIXJARDIR="${STAGING_DATADIR}/java" \
+ CLASSPATH="${S}/classes" \
+ JAR="fastjar" \
+ all
+
+ # Generated shell scripts will have staging paths inside them.
+ rm bin/*
+
+ # Generate them again with target paths.
+ oe_runmake \
+ JAVAC="oefatal \"No Java compilation expected here.\"" \
+ JAR="oefatal \"No jar invocation expected here.\"" \
+ JARPREFIX=${datadir}/java \
+ JAVAUNIXPATH=${datadir}/java \
+ all
+
+ # Trigger generation of all documentation files to prevent this
+ # being happen at the target 'install-man' in do_install.
+ oe_runmake \
+ JAVAC="oefatal \"No Java compilation expected here.\"" \
+ JAR="oefatal \"No jar invocation expected here.\"" \
+ JARPREFIX=${datadir}/java \
+ JAVAUNIXPATH=${datadir}/java \
+ CreateInterface.1 ListDBus.1 DBusDaemon.1 DBusViewer.1 changelog AUTHORS COPYING README INSTALL DBusCall.1
+}
+
+do_staging () {
+ oe_jarinstall -s ${JPN}-${PV}.jar ${JPN}.jar
+}
+
+do_install () {
+ oe_jarinstall ${JPN}-${PV}.jar ${JPN}.jar
+ oe_jarinstall dbus-java-viewer-${PV}.jar dbus-java-viewer.jar
+ oe_jarinstall dbus-java-bin-${PV}.jar dbus-java-bin.jar
+
+ install -d ${D}${bindir}
+ install bin/DBusViewer ${D}${bindir}
+ install bin/DBusCall ${D}${bindir}
+ install bin/CreateInterface ${D}${bindir}
+ install bin/ListDBus ${D}${bindir}
+ install bin/DBusDaemon ${D}${bindir}
+
+ oe_runmake \
+ JAVAC="oefatal \"No Java compilation expected here.\"" \
+ JAR="oefatal \"No jar invocation expected here.\"" \
+ MANPREFIX=${D}${mandir} \
+ DOCPREFIX=${D}${docdir}/${JPN} \
+ install-man
+}
+
+# ${JPN} must be last otherwise it would pick up dbus-viewer*.jar
+# and dbus-bin*.jar
+PACKAGES = "dbus-java-viewer dbus-java-viewer-doc dbus-java-bin dbus-java-bin-doc ${JPN}"
+
+PACKAGE_ARCH = "all"
+
+FILES_dbus-java-viewer = "${datadir}/java/dbus-java-viewer*.jar ${bindir}/DBusViewer"
+FILES_dbus-java-viewer-doc = "${mandir}/DBusViewer*"
+FILES_dbus-java-bin = "${datadir}/java/dbus-java-bin*.jar ${bindir}"
+FILES_dbus-java-bin-doc = "${mandir} ${docdir}/${JPN}"
diff --git a/packages/dbus/dbus-1.0.1/dbus-1.init b/packages/dbus/dbus-1.0.1/dbus-1.init
deleted file mode 100644
index 38e7574ad5..0000000000
--- a/packages/dbus/dbus-1.0.1/dbus-1.init
+++ /dev/null
@@ -1,96 +0,0 @@
-#! /bin/sh
-# -*- coding: utf-8 -*-
-# Debian init.d script for D-BUS
-# Copyright © 2003 Colin Walters <walters@debian.org>
-
-set -e
-
-DAEMON=/usr/bin/dbus-daemon
-NAME=dbus
-DAEMONUSER=messagebus
-PIDDIR=/var/run/dbus
-PIDFILE=$PIDDIR/pid
-UUIDDIR=/var/lib/dbus
-DESC="system message bus"
-EVENTDIR=/etc/dbus-1/event.d
-
-test -x $DAEMON || exit 0
-
-# Source defaults file; edit that file to configure this script.
-ENABLED=1
-PARAMS=""
-if [ -e /etc/default/dbus ]; then
- . /etc/default/dbus
-fi
-
-test "$ENABLED" != "0" || exit 0
-
-start_it_up()
-{
- if [ ! -d $PIDDIR ]; then
- mkdir -p $PIDDIR
- chown $DAEMONUSER $PIDDIR
- chgrp $DAEMONUSER $PIDDIR
- fi
- if [ -e $PIDFILE ]; then
- PIDDIR=/proc/$(cat $PIDFILE)
- if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
- echo "$DESC already started; not starting."
- else
- echo "Removing stale PID file $PIDFILE."
- rm -f $PIDFILE
- fi
- fi
-
- if [ ! -d $UUIDDIR ]; then
- mkdir -p $UUIDDIR
- chown $DAEMONUSER $UUIDDIR
- chgrp $DAEMONUSER $UUIDDIR
- fi
-
- dbus-uuidgen --ensure
-
- echo -n "Starting $DESC: "
- start-stop-daemon --start --quiet --pidfile $PIDFILE \
- --user $DAEMONUSER --exec $DAEMON -- --system $PARAMS
- echo "$NAME."
- if [ -d $EVENTDIR ]; then
- run-parts --arg=start $EVENTDIR
- fi
-}
-
-shut_it_down()
-{
- if [ -d $EVENTDIR ]; then
- run-parts --reverse --arg=stop $EVENTDIR
- fi
- echo -n "Stopping $DESC: "
- start-stop-daemon --stop --quiet --pidfile $PIDFILE \
- --user $DAEMONUSER
- # We no longer include these arguments so that start-stop-daemon
- # can do its job even given that we may have been upgraded.
- # We rely on the pidfile being sanely managed
- # --exec $DAEMON -- --system $PARAMS
- echo "$NAME."
- rm -f $PIDFILE
-}
-
-case "$1" in
- start)
- start_it_up
- ;;
- stop)
- shut_it_down
- ;;
- restart|force-reload)
- shut_it_down
- sleep 1
- start_it_up
- ;;
- *)
- echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
- exit 1
- ;;
-esac
-
-exit 0
diff --git a/packages/dbus/dbus-1.0.1/dbus-exploit-fix.patch b/packages/dbus/dbus-1.0.1/dbus-exploit-fix.patch
deleted file mode 100644
index 7d36dbdf22..0000000000
--- a/packages/dbus/dbus-1.0.1/dbus-exploit-fix.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-https://bugs.freedesktop.org/show_bug.cgi?id=9142
-
-[..] the use case was the following. There
-are three processes A, B, and C. All of them add the same match (same value). A
-is started first, then B, and lastly C. Now, B and C are closed: if B is closed
-before C, A's match is removed; but if C is closed before B, A's match is not
-removed (no buggy behaviour). (B and C call dbus_bus_remove_match on exit.)
-
-diff -pur 0.61-osso23/bus/signals.c 0.61-osso23.new/bus/signals.c
---- 0.61-osso23/bus/signals.c 2006-11-23 16:46:52.589602192 +0200
-+++ 0.61-osso23.new/bus/signals.c 2006-11-23 16:49:28.873843376 +0200
-@@ -1067,6 +1067,9 @@ match_rule_equal (BusMatchRule *a,
- if (a->flags != b->flags)
- return FALSE;
-
-+ if (a->matches_go_to != b->matches_go_to)
-+ return FALSE;
-+
- if ((a->flags & BUS_MATCH_MESSAGE_TYPE) &&
- a->message_type != b->message_type)
- return FALSE;
diff --git a/packages/dbus/dbus/tmpdir.patch b/packages/dbus/dbus-1.0.2/tmpdir.patch
index 838b903f0a..838b903f0a 100644
--- a/packages/dbus/dbus/tmpdir.patch
+++ b/packages/dbus/dbus-1.0.2/tmpdir.patch
diff --git a/packages/libopieobex/files/.mtn2git_empty b/packages/dbus/dbus-1.1.4/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libopieobex/files/.mtn2git_empty
+++ b/packages/dbus/dbus-1.1.4/.mtn2git_empty
diff --git a/packages/dbus/dbus-1.0.1/cross.patch b/packages/dbus/dbus-1.1.4/cross.patch
index 268a3ae3de..268a3ae3de 100644
--- a/packages/dbus/dbus-1.0.1/cross.patch
+++ b/packages/dbus/dbus-1.1.4/cross.patch
diff --git a/packages/dbus/dbus-1.1.4/dbus-1.init b/packages/dbus/dbus-1.1.4/dbus-1.init
new file mode 100644
index 0000000000..0725083c69
--- /dev/null
+++ b/packages/dbus/dbus-1.1.4/dbus-1.init
@@ -0,0 +1,110 @@
+#! /bin/sh
+# -*- coding: utf-8 -*-
+# Debian init.d script for D-BUS
+# Copyright © 2003 Colin Walters <walters@debian.org>
+
+set -e
+
+DAEMON=/usr/bin/dbus-daemon
+NAME=dbus
+DAEMONUSER=messagebus
+PIDDIR=/var/run/dbus
+PIDFILE=$PIDDIR/pid
+UUIDDIR=/var/lib/dbus
+DESC="system message bus"
+EVENTDIR=/etc/dbus-1/event.d
+
+test -x $DAEMON || exit 0
+
+# Source defaults file; edit that file to configure this script.
+ENABLED=1
+PARAMS=""
+if [ -e /etc/default/dbus ]; then
+ . /etc/default/dbus
+fi
+
+test "$ENABLED" != "0" || exit 0
+
+start_it_up()
+{
+ if [ ! -d $PIDDIR ]; then
+ mkdir -p $PIDDIR
+ chown $DAEMONUSER $PIDDIR
+ chgrp $DAEMONUSER $PIDDIR
+ fi
+ if [ -e $PIDFILE ]; then
+ PIDDIR=/proc/$(cat $PIDFILE)
+ if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
+ echo "$DESC already started; not starting."
+ else
+ echo "Removing stale PID file $PIDFILE."
+ rm -f $PIDFILE
+ fi
+ fi
+
+ if [ ! -d $UUIDDIR ]; then
+ mkdir -p $UUIDDIR
+ chown $DAEMONUSER $UUIDDIR
+ chgrp $DAEMONUSER $UUIDDIR
+ fi
+
+ dbus-uuidgen --ensure
+
+ echo -n "Starting $DESC: "
+ start-stop-daemon --start --quiet --pidfile $PIDFILE \
+ --user $DAEMONUSER --exec $DAEMON -- --system $PARAMS
+ echo "$NAME."
+ if [ -d $EVENTDIR ]; then
+ run-parts --arg=start $EVENTDIR
+ fi
+}
+
+shut_it_down()
+{
+ if [ -d $EVENTDIR ]; then
+ # TODO: --reverse when busybox supports it
+ run-parts --arg=stop $EVENTDIR
+ fi
+ echo -n "Stopping $DESC: "
+ start-stop-daemon --stop --quiet --pidfile $PIDFILE \
+ --user $DAEMONUSER
+ # We no longer include these arguments so that start-stop-daemon
+ # can do its job even given that we may have been upgraded.
+ # We rely on the pidfile being sanely managed
+ # --exec $DAEMON -- --system $PARAMS
+ echo "$NAME."
+ rm -f $PIDFILE
+}
+
+reload_it()
+{
+ echo -n "Reloading $DESC config: "
+ dbus-send --print-reply --system --type=method_call \
+ --dest=org.freedesktop.DBus \
+ / org.freedesktop.DBus.ReloadConfig > /dev/null
+ # hopefully this is enough time for dbus to reload it's config file.
+ echo "done."
+}
+
+case "$1" in
+ start)
+ start_it_up
+ ;;
+ stop)
+ shut_it_down
+ ;;
+ reload|force-reload)
+ reload_it
+ ;;
+ restart)
+ shut_it_down
+ sleep 1
+ start_it_up
+ ;;
+ *)
+ echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/packages/dbus/dbus-1.0.1/fix-install-daemon.patch b/packages/dbus/dbus-1.1.4/fix-install-daemon.patch
index c31786357d..c31786357d 100644
--- a/packages/dbus/dbus-1.0.1/fix-install-daemon.patch
+++ b/packages/dbus/dbus-1.1.4/fix-install-daemon.patch
diff --git a/packages/dbus/dbus-1.1.4/tmpdir.patch b/packages/dbus/dbus-1.1.4/tmpdir.patch
new file mode 100644
index 0000000000..838b903f0a
--- /dev/null
+++ b/packages/dbus/dbus-1.1.4/tmpdir.patch
@@ -0,0 +1,30 @@
+--- dbus-0.22/configure.in.orig 2004-08-13 00:57:16.000000000 +0200
++++ dbus-0.22/configure.in 2004-12-30 21:15:57.000000000 +0100
+@@ -1047,15 +1048,18 @@
+ AC_SUBST(ABSOLUTE_TOP_BUILDDIR)
+
+ #### Find socket directories
+-if ! test -z "$TMPDIR" ; then
+- DEFAULT_SOCKET_DIR=$TMPDIR
+-elif ! test -z "$TEMP" ; then
+- DEFAULT_SOCKET_DIR=$TEMP
+-elif ! test -z "$TMP" ; then
+- DEFAULT_SOCKET_DIR=$TMP
+-else
+- DEFAULT_SOCKET_DIR=/tmp
+-fi
++#if ! test -z "$TMPDIR" ; then
++# DEFAULT_SOCKET_DIR=$TMPDIR
++#elif ! test -z "$TEMP" ; then
++# DEFAULT_SOCKET_DIR=$TEMP
++#elif ! test -z "$TMP" ; then
++# DEFAULT_SOCKET_DIR=$TMP
++#else
++# DEFAULT_SOCKET_DIR=/tmp
++#fi
++
++# checks disabled to avoid expanding this at build time
++DEFAULT_SOCKET_DIR=/tmp
+
+ if ! test -z "$with_test_socket_dir" ; then
+ TEST_SOCKET_DIR="$with_test_socket_dir"
diff --git a/packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch b/packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch
deleted file mode 100644
index 186abdb56b..0000000000
--- a/packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch
+++ /dev/null
@@ -1,32 +0,0 @@
---- dbus-glib-0.71/tools/Makefile.am.orig 2006-08-27 12:54:34.351198198 +0200
-+++ dbus-glib-0.71/tools/Makefile.am 2006-08-27 12:55:12.533584373 +0200
-@@ -9,7 +9,7 @@
- BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml
-
- dbus-bus-introspect.xml:
-- DBUS_TOP_BUILDDIR=$(top_builddir) dbus-send --system --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.Introspectable.Introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml
-+ DBUS_TOP_BUILDDIR=$(top_builddir) ./run-with-tmp-session-bus.sh dbus-send --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.Introspectable.Introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml
-
- EXTRA_DIST = run-with-tmp-session-bus.sh
-
---- dbus-glib-0.71/tools/run-with-tmp-session-bus.sh.orig 2006-08-27 11:52:17.497666746 +0200
-+++ dbus-glib-0.71/tools/run-with-tmp-session-bus.sh 2006-08-27 12:53:22.626715838 +0200
-@@ -27,16 +27,15 @@
- echo "escaped service dir is: $ESCAPED_SERVICE_DIR" >&2
-
- ## create a configuration file based on the standard session.conf
--cat $DBUS_TOP_BUILDDIR/tools/session.conf | \
-+cat $datadir/dbus/session.conf | \
- sed -e 's/<servicedir>.*$/<servicedir>'$ESCAPED_SERVICE_DIR'<\/servicedir>/g' | \
- sed -e 's/<include.*$//g' \
- > $CONFIG_FILE
-
- echo "Created configuration file $CONFIG_FILE" >&2
-
--export PATH=$DBUS_TOP_BUILDDIR/bus:$PATH
- ## the libtool script found by the path search should already do this, but
--export LD_LIBRARY_PATH=$DBUS_TOP_BUILDDIR/dbus/.libs:$LD_LIBRARY_PATH
-+export LD_LIBRARY_PATH=$libdir:$LD_LIBRARY_PATH
-
- unset DBUS_SESSION_BUS_ADDRESS
- unset DBUS_SESSION_BUS_PID
diff --git a/packages/dbus/dbus-native_1.0.1.bb b/packages/dbus/dbus-native_1.0.1.bb
deleted file mode 100644
index 1ad5cf246a..0000000000
--- a/packages/dbus/dbus-native_1.0.1.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-DESCRIPTION = "Message bus system for applications to talk to one another"
-HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
-LICENSE = "GPL"
-SECTION = "base"
-
-PR = "r0"
-
-DEPENDS = "glib-2.0-native libxml2-native expat-native"
-
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-1.0.1"
-SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \
- file://cross.patch;patch=1 \
- "
-
-inherit autotools pkgconfig gettext native
-
-S = "${WORKDIR}/dbus-${PV}"
-
-EXTRA_OECONF = "--disable-qt --disable-qt3 --disable-gtk --disable-tests \
- --disable-checks --disable-xml-docs --disable-doxygen-docs \
- --with-xml=expat --without-x"
-
-do_stage () {
- oe_runmake install
- autotools_stage_all
-
- # for dbus-glib-native introspection generation
- install -d ${STAGING_DATADIR}/dbus
- install -m 0644 bus/session.conf ${STAGING_DATADIR}/dbus/session.conf
-}
diff --git a/packages/dbus/dbus-native_1.0.2.bb b/packages/dbus/dbus-native_1.0.2.bb
new file mode 100644
index 0000000000..ebd57b2876
--- /dev/null
+++ b/packages/dbus/dbus-native_1.0.2.bb
@@ -0,0 +1,28 @@
+require dbus.inc
+DEFAULT_PREFERENCE = "1"
+
+inherit native
+
+DEPENDS = "glib-2.0-native libxml2-native expat-native"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-${PV}"
+
+SRC_URI = "\
+ http://freedesktop.org/software/dbus/releases/dbus-${PV}.tar.gz \
+ file://cross.patch;patch=1 \
+ file://tmpdir.patch;patch=1 \
+ file://dbus-1.init \
+"
+
+do_stage() {
+ oe_runmake install
+ autotools_stage_all
+
+ # for dbus-glib-native introspection generation
+ install -d ${STAGING_DATADIR}/dbus
+ install -m 0644 bus/session.conf ${STAGING_DATADIR}/dbus/session.conf
+}
+
+do_install() {
+ :
+}
+
diff --git a/packages/dbus/dbus-native_1.1.4.bb b/packages/dbus/dbus-native_1.1.4.bb
new file mode 100644
index 0000000000..a006965a32
--- /dev/null
+++ b/packages/dbus/dbus-native_1.1.4.bb
@@ -0,0 +1,25 @@
+require dbus.inc
+inherit native
+
+DEPENDS = "glib-2.0-native libxml2-native expat-native"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-${PV}"
+
+SRC_URI = "\
+ http://freedesktop.org/software/dbus/releases/dbus-${PV}.tar.gz \
+ file://cross.patch;patch=1 \
+ file://tmpdir.patch;patch=1 \
+ file://dbus-1.init \
+"
+
+do_stage() {
+ oe_runmake install
+ autotools_stage_all
+
+ # for dbus-glib-native introspection generation
+ install -d ${STAGING_DATADIR}/dbus
+ install -m 0644 bus/session.conf ${STAGING_DATADIR}/dbus/session.conf
+}
+
+do_install() {
+ :
+}
diff --git a/packages/dbus/dbus-python_0.71.bb b/packages/dbus/dbus-python_0.71.bb
deleted file mode 100644
index ed586b7f4b..0000000000
--- a/packages/dbus/dbus-python_0.71.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-DESCRIPTION = "Message bus system for applications to talk to one another - python bindings"
-HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
-LICENSE = "GPL"
-SECTION = "devel/python"
-DEPENDS = "python-pyrex-native dbus dbus-glib"
-PR = "r0"
-
-SRC_URI = "http://freedesktop.org/software/dbus/releases/dbus-python-${PV}.tar.gz"
-
-inherit distutils
diff --git a/packages/dbus/dbus.inc b/packages/dbus/dbus.inc
index 21316c2d09..09fc7e389a 100644
--- a/packages/dbus/dbus.inc
+++ b/packages/dbus/dbus.inc
@@ -1,16 +1,18 @@
-SECTION = "base"
-HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
+HOMEPAGE = "http://dbus.freedesktop.org"
DESCRIPTION = "Message bus system for applications to talk to one another"
LICENSE = "GPL"
DEPENDS = "expat glib-2.0 virtual/libintl"
DEFAULT_PREFERENCE = "-1"
-SRC_URI = "http://freedesktop.org/software/dbus/releases/dbus-${PV}.tar.gz \
- file://cross.patch;patch=1 \
- file://tmpdir.patch;patch=1 \
- file://dbus-1.init \
- "
+SRC_URI = "\
+ http://freedesktop.org/software/dbus/releases/dbus-${PV}.tar.gz \
+ file://cross.patch;patch=1 \
+ file://tmpdir.patch;patch=1 \
+ file://fix-install-daemon.patch;patch=1 \
+ file://dbus-1.init \
+"
+S = "${WORKDIR}/dbus-${PV}"
inherit autotools pkgconfig update-rc.d gettext
@@ -19,7 +21,12 @@ INITSCRIPT_PARAMS = "defaults"
CONFFILES_${PN} = "${sysconfdir}/dbus-1/system.conf ${sysconfdir}/dbus-1/session.conf"
-FILES_${PN} = "${bindir}/dbus-daemon* ${bindir}/dbus-uuidgen ${bindir}/dbus-launch ${bindir}/dbus-cleanup-sockets ${bindir}/dbus-send ${bindir}/dbus-monitor ${sysconfdir} ${datadir}/dbus-1/services ${libdir}/lib*.so.*"
+DEBIANNAME_${PN} = "dbus-1"
+
+PACKAGES += "${PN}-lib"
+
+FILES_${PN} = "${bindir}/dbus-daemon* ${bindir}/dbus-uuidgen ${bindir}/dbus-launch ${bindir}/dbus-cleanup-sockets ${bindir}/dbus-send ${bindir}/dbus-monitor ${sysconfdir} ${datadir}/dbus-1/services"
+FILES_${PN}-lib = "${libdir}/lib*.so.*"
FILES_${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-glib-tool"
pkg_postinst_dbus() {
@@ -46,7 +53,7 @@ EXTRA_OECONF = "--disable-qt --disable-qt3 --disable-gtk --disable-tests \
--with-xml=expat --without-x"
-do_stage () {
+do_stage() {
oe_libinstall -so -C dbus libdbus-1 ${STAGING_LIBDIR}
autotools_stage_includes
@@ -55,12 +62,7 @@ do_stage () {
install -m 0644 dbus/dbus-arch-deps.h ${STAGING_LIBDIR}/dbus-1.0/include/dbus/
}
-do_install_append () {
+do_install_append() {
install -d ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/dbus-1.init ${D}${sysconfdir}/init.d/dbus-1
}
-
-python populate_packages_prepend () {
- if (bb.data.getVar('DEBIAN_NAMES', d, 1)):
- bb.data.setVar('PKG_dbus', 'dbus-1', d)
-}
diff --git a/packages/dbus/dbus/0.23.1.diff b/packages/dbus/dbus/0.23.1.diff
deleted file mode 100644
index d56e1afc9c..0000000000
--- a/packages/dbus/dbus/0.23.1.diff
+++ /dev/null
@@ -1,308 +0,0 @@
-diff -ur dbus-0.23/ChangeLog dbus-0.23.1/ChangeLog
---- dbus-0.23/ChangeLog 2005-01-13 00:48:43.000000000 +0200
-+++ dbus-0.23.1/ChangeLog 2005-02-11 20:25:48.000000000 +0200
-@@ -1,3 +1,33 @@
-+2005-02-11 Joe Shaw <joeshaw@novell.com>
-+
-+ * NEWS: Update for 0.23.1
-+
-+ * configure.in: Release 0.23.1
-+
-+2005-02-10 Joe Shaw <joeshaw@novell.com>
-+
-+ * dbus/dbus-connection.c
-+ (_dbus_connection_queue_received_message_link,
-+ _dbus_connection_message_sent): Add the path to
-+ the verbose output.
-+ (_dbus_connection_send_preallocated_and_unlock): Added. Calls
-+ _dbus_connection_send_preallocated_unlocked(), updated the
-+ dispatch status, and unlocks. Fixes a bug where certain
-+ situations (like a broken pipe) could cause a Disconnect message
-+ to not be sent, tricking the bus into thinking a service was still
-+ there when the process had quit.
-+ (_dbus_connection_send_preallocated): Call
-+ _dbus_connection_send_preallocated_and_unlock().
-+ (_dbus_connection_send_and_unlock): Added. Calls
-+ _dbus_connection_send_preallocated_and_unlock().
-+ (dbus_connection_send): Call _dbus_connection_send_and_unlock().
-+ (dbus_connection_send_with_reply): Update the dispatch status and
-+ unlock.
-+
-+ * mono/Service.cs (~Service): Added. Removes the filter so that
-+ we don't get unmanaged code calling back into a GCed delegate.
-+ (RemoveFilter); Added.
-+
- 2005-01-12 Joe Shaw <joeshaw@novell.com>
-
- * NEWS: Update for 0.23.
-diff -ur dbus-0.23/NEWS dbus-0.23.1/NEWS
---- dbus-0.23/NEWS 2005-01-13 00:20:40.000000000 +0200
-+++ dbus-0.23.1/NEWS 2005-02-11 20:25:16.000000000 +0200
-@@ -1,3 +1,11 @@
-+D-BUS 0.23.1 (11 Feb 2005)
-+===
-+- fix a bug in which the bus daemon wouldn't recognize that a service
-+ owner quit
-+- fix a bug in the mono bindings that would cause unmanaged code to
-+ call back into a delegate that had been garbage collected and
-+ crashed.
-+
- D-BUS 0.23 (11 Jan 2005)
- ===
-
-diff -ur dbus-0.23/configure dbus-0.23.1/configure
---- dbus-0.23/configure 2005-01-13 00:21:25.000000000 +0200
-+++ dbus-0.23.1/configure 2005-02-11 19:53:33.000000000 +0200
-@@ -1826,7 +1826,7 @@
-
- # Define the identity of the package.
- PACKAGE=dbus
-- VERSION=0.23
-+ VERSION=0.23.1
-
-
- cat >>confdefs.h <<_ACEOF
-diff -ur dbus-0.23/configure.in dbus-0.23.1/configure.in
---- dbus-0.23/configure.in 2005-01-13 00:20:40.000000000 +0200
-+++ dbus-0.23.1/configure.in 2005-02-11 19:53:09.000000000 +0200
-@@ -3,7 +3,7 @@
-
- AC_INIT(dbus/dbus.h)
-
--AM_INIT_AUTOMAKE(dbus, 0.23)
-+AM_INIT_AUTOMAKE(dbus, 0.23.1)
-
- AM_CONFIG_HEADER(config.h)
-
-diff -ur dbus-0.23/dbus/dbus-connection.c dbus-0.23.1/dbus/dbus-connection.c
---- dbus-0.23/dbus/dbus-connection.c 2005-01-11 21:31:56.000000000 +0200
-+++ dbus-0.23.1/dbus/dbus-connection.c 2005-02-11 19:52:47.000000000 +0200
-@@ -358,9 +358,10 @@
-
- _dbus_connection_wakeup_mainloop (connection);
-
-- _dbus_verbose ("Message %p (%d %s %s '%s') added to incoming queue %p, %d incoming\n",
-+ _dbus_verbose ("Message %p (%d %s %s %s '%s') added to incoming queue %p, %d incoming\n",
- message,
- dbus_message_get_type (message),
-+ dbus_message_get_path (message),
- dbus_message_get_interface (message) ?
- dbus_message_get_interface (message) :
- "no interface",
-@@ -473,9 +474,10 @@
-
- connection->n_outgoing -= 1;
-
-- _dbus_verbose ("Message %p (%d %s %s '%s') removed from outgoing queue %p, %d left to send\n",
-+ _dbus_verbose ("Message %p (%d %s %s %s '%s') removed from outgoing queue %p, %d left to send\n",
- message,
- dbus_message_get_type (message),
-+ dbus_message_get_path (message),
- dbus_message_get_interface (message) ?
- dbus_message_get_interface (message) :
- "no interface",
-@@ -1572,9 +1574,10 @@
- }
- #endif
-
-- _dbus_verbose ("Message %p (%d %s %s '%s') added to outgoing queue %p, %d pending to send\n",
-+ _dbus_verbose ("Message %p (%d %s %s %s '%s') added to outgoing queue %p, %d pending to send\n",
- message,
- dbus_message_get_type (message),
-+ dbus_message_get_path (message),
- dbus_message_get_interface (message) ?
- dbus_message_get_interface (message) :
- "no interface",
-@@ -1606,12 +1609,30 @@
- _dbus_connection_do_iteration (connection,
- DBUS_ITERATION_DO_WRITING,
- -1);
--
-+
- /* If stuff is still queued up, be sure we wake up the main loop */
- if (connection->n_outgoing > 0)
- _dbus_connection_wakeup_mainloop (connection);
- }
-
-+static void
-+_dbus_connection_send_preallocated_and_unlock (DBusConnection *connection,
-+ DBusPreallocatedSend *preallocated,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial)
-+{
-+ DBusDispatchStatus status;
-+
-+ _dbus_connection_send_preallocated_unlocked (connection,
-+ preallocated,
-+ message, client_serial);
-+
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ /* this calls out to user code */
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+}
-+
- /**
- * Sends a message using preallocated resources. This function cannot fail.
- * It works identically to dbus_connection_send() in other respects.
-@@ -1642,10 +1663,9 @@
- dbus_message_get_member (message) != NULL));
-
- CONNECTION_LOCK (connection);
-- _dbus_connection_send_preallocated_unlocked (connection,
-- preallocated,
-- message, client_serial);
-- CONNECTION_UNLOCK (connection);
-+ _dbus_connection_send_preallocated_and_unlock (connection,
-+ preallocated,
-+ message, client_serial);
- }
-
- static dbus_bool_t
-@@ -1670,6 +1690,27 @@
- return TRUE;
- }
-
-+static dbus_bool_t
-+_dbus_connection_send_and_unlock (DBusConnection *connection,
-+ DBusMessage *message,
-+ dbus_uint32_t *client_serial)
-+{
-+ DBusPreallocatedSend *preallocated;
-+
-+ _dbus_assert (connection != NULL);
-+ _dbus_assert (message != NULL);
-+
-+ preallocated = _dbus_connection_preallocate_send_unlocked (connection);
-+ if (preallocated == NULL)
-+ return FALSE;
-+
-+ _dbus_connection_send_preallocated_and_unlock (connection,
-+ preallocated,
-+ message,
-+ client_serial);
-+ return TRUE;
-+}
-+
- /**
- * Adds a message to the outgoing message queue. Does not block to
- * write the message to the network; that happens asynchronously. To
-@@ -1698,14 +1739,9 @@
-
- CONNECTION_LOCK (connection);
-
-- if (!_dbus_connection_send_unlocked (connection, message, client_serial))
-- {
-- CONNECTION_UNLOCK (connection);
-- return FALSE;
-- }
--
-- CONNECTION_UNLOCK (connection);
-- return TRUE;
-+ return _dbus_connection_send_and_unlock (connection,
-+ message,
-+ client_serial);
- }
-
- static dbus_bool_t
-@@ -1784,6 +1820,7 @@
- DBusMessage *reply;
- DBusList *reply_link;
- dbus_int32_t serial = -1;
-+ DBusDispatchStatus status;
-
- _dbus_return_val_if_fail (connection != NULL, FALSE);
- _dbus_return_val_if_fail (message != NULL, FALSE);
-@@ -1845,8 +1882,11 @@
- else
- dbus_pending_call_unref (pending);
-
-- CONNECTION_UNLOCK (connection);
--
-+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
-+
-+ /* this calls out to user code */
-+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
-+
- return TRUE;
-
- error:
-@@ -2256,9 +2296,10 @@
- link = _dbus_list_pop_first_link (&connection->incoming_messages);
- connection->n_incoming -= 1;
-
-- _dbus_verbose ("Message %p (%d %s %s '%s') removed from incoming queue %p, %d incoming\n",
-+ _dbus_verbose ("Message %p (%d %s %s %s '%s') removed from incoming queue %p, %d incoming\n",
- link->data,
- dbus_message_get_type (link->data),
-+ dbus_message_get_path (link->data),
- dbus_message_get_interface (link->data) ?
- dbus_message_get_interface (link->data) :
- "no interface",
-diff -ur dbus-0.23/mono/Service.cs dbus-0.23.1/mono/Service.cs
---- dbus-0.23/mono/Service.cs 2004-08-31 06:59:14.000000000 +0300
-+++ dbus-0.23.1/mono/Service.cs 2005-02-11 19:52:47.000000000 +0200
-@@ -23,6 +23,9 @@
- private static AssemblyBuilder proxyAssembly;
- private ModuleBuilder module = null;
-
-+ // Add a match for signals. FIXME: Can we filter the service?
-+ private const string MatchRule = "type='signal'";
-+
- internal Service(string name, Connection connection)
- {
- this.name = name;
-@@ -47,6 +50,12 @@
- this.local = true;
- }
-
-+ ~Service ()
-+ {
-+ if (this.filterCalled != null)
-+ RemoveFilter ();
-+ }
-+
- public static bool Exists(Connection connection, string name)
- {
- Error error = new Error();
-@@ -113,9 +122,17 @@
- IntPtr.Zero))
- throw new OutOfMemoryException();
-
-- // Add a match for signals. FIXME: Can we filter the service?
-- string rule = "type='signal'";
-- dbus_bus_add_match(connection.RawConnection, rule, IntPtr.Zero);
-+ dbus_bus_add_match(connection.RawConnection, MatchRule, IntPtr.Zero);
-+ }
-+
-+ private void RemoveFilter()
-+ {
-+ dbus_connection_remove_filter (Connection.RawConnection,
-+ this.filterCalled,
-+ IntPtr.Zero);
-+ this.filterCalled = null;
-+
-+ dbus_bus_remove_match (connection.RawConnection, MatchRule, IntPtr.Zero);
- }
-
- private int Service_FilterCalled(IntPtr rawConnection,
-@@ -200,9 +217,19 @@
- IntPtr freeData);
-
- [DllImport("dbus-1")]
-+ private extern static void dbus_connection_remove_filter(IntPtr rawConnection,
-+ DBusHandleMessageFunction filter,
-+ IntPtr userData);
-+
-+ [DllImport("dbus-1")]
- private extern static void dbus_bus_add_match(IntPtr rawConnection,
- string rule,
- IntPtr erro);
-
-+ [DllImport("dbus-1")]
-+ private extern static void dbus_bus_remove_match(IntPtr rawConnection,
-+ string rule,
-+ IntPtr erro);
-+
- }
- }
diff --git a/packages/dbus/dbus/config.diff b/packages/dbus/dbus/config.diff
deleted file mode 100644
index b67c8d72fe..0000000000
--- a/packages/dbus/dbus/config.diff
+++ /dev/null
@@ -1,17 +0,0 @@
-Only in /home/kihamala/svn/dbus/bus: .svn
-diff -ur bus/session.conf.in /home/kihamala/svn/dbus/bus/session.conf.in
---- bus/session.conf.in 2004-10-25 21:48:58.000000000 +0300
-+++ /home/kihamala/svn/dbus/bus/session.conf.in 2005-02-15 11:03:26.000000000 +0200
-@@ -8,9 +8,10 @@
- <!-- Our well-known bus type, don't change this -->
- <type>session</type>
-
-- <listen>unix:tmpdir=@DBUS_SESSION_SOCKET_DIR@</listen>
-+ <listen>unix:path=/tmp/session_bus_socket</listen>
-
-- <servicedir>@EXPANDED_DATADIR@/dbus-1/services</servicedir>
-+ <servicedir>@EXPANDED_LIBDIR@/dbus-1.0/services</servicedir>
-+ <!-- <servicedir>/var/lib/install/usr/lib/dbus-1.0/services</servicedir> -->
-
- <policy context="default">
- <!-- Allow everything to be sent -->
diff --git a/packages/dbus/dbus/cross.patch b/packages/dbus/dbus/cross.patch
deleted file mode 100644
index 6d1d9d8e7e..0000000000
--- a/packages/dbus/dbus/cross.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- dbus-0.20/configure.in~cross
-+++ dbus-0.20/configure.in
-@@ -466,6 +466,7 @@
- exit (0);
- ]])],
- [have_abstract_sockets=yes],
-+ [have_abstract_sockets=no],
- [have_abstract_sockets=no])
- AC_LANG_POP(C)
- AC_MSG_RESULT($have_abstract_sockets)
diff --git a/packages/dbus/dbus/dbus-1.init b/packages/dbus/dbus/dbus-1.init
deleted file mode 100644
index adefe7c5b1..0000000000
--- a/packages/dbus/dbus/dbus-1.init
+++ /dev/null
@@ -1,86 +0,0 @@
-#! /bin/sh
-# -*- coding: utf-8 -*-
-# Debian init.d script for D-BUS
-# Copyright © 2003 Colin Walters <walters@debian.org>
-
-set -e
-
-DAEMON=/usr/bin/dbus-daemon-1
-NAME=dbus-1
-DAEMONUSER=messagebus
-PIDDIR=/var/run/dbus
-PIDFILE=$PIDDIR/pid
-DESC="system message bus"
-EVENTDIR=/etc/dbus-1/event.d
-
-test -x $DAEMON || exit 0
-
-# Source defaults file; edit that file to configure this script.
-ENABLED=1
-PARAMS=""
-if [ -e /etc/default/dbus-1 ]; then
- . /etc/default/dbus-1
-fi
-
-test "$ENABLED" != "0" || exit 0
-
-start_it_up()
-{
- if [ ! -d $PIDDIR ]; then
- mkdir -p $PIDDIR
- chown $DAEMONUSER $PIDDIR
- chgrp $DAEMONUSER $PIDDIR
- fi
- if [ -e $PIDFILE ]; then
- PIDDIR=/proc/$(cat $PIDFILE)
- if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
- echo "$DESC already started; not starting."
- else
- echo "Removing stale PID file $PIDFILE."
- rm -f $PIDFILE
- fi
- fi
- echo -n "Starting $DESC: "
- start-stop-daemon --start --quiet --pidfile $PIDFILE \
- --user $DAEMONUSER --exec $DAEMON -- --system $PARAMS
- echo "$NAME."
- if [ -d $EVENTDIR ]; then
- run-parts --arg=start $EVENTDIR
- fi
-}
-
-shut_it_down()
-{
- if [ -d $EVENTDIR ]; then
- run-parts --reverse --arg=stop $EVENTDIR
- fi
- echo -n "Stopping $DESC: "
- start-stop-daemon --stop --quiet --pidfile $PIDFILE \
- --user $DAEMONUSER
- # We no longer include these arguments so that start-stop-daemon
- # can do its job even given that we may have been upgraded.
- # We rely on the pidfile being sanely managed
- # --exec $DAEMON -- --system $PARAMS
- echo "$NAME."
- rm -f $PIDFILE
-}
-
-case "$1" in
- start)
- start_it_up
- ;;
- stop)
- shut_it_down
- ;;
- restart|force-reload)
- shut_it_down
- sleep 1
- start_it_up
- ;;
- *)
- echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
- exit 1
- ;;
-esac
-
-exit 0
diff --git a/packages/dbus/dbus/dbus-monitor.patch b/packages/dbus/dbus/dbus-monitor.patch
deleted file mode 100644
index c2f90c885b..0000000000
--- a/packages/dbus/dbus/dbus-monitor.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-diff -urN dbus-0.22.orig/tools/dbus-monitor.1 dbus-0.22/tools/dbus-monitor.1
---- dbus-0.22.orig/tools/dbus-monitor.1 2004-10-10 20:47:19.906823680 +1000
-+++ dbus-0.22/tools/dbus-monitor.1 2004-10-10 20:47:27.791625008 +1000
-@@ -9,6 +9,7 @@
- .PP
- .B dbus-monitor
- [\-\-system | \-\-session]
-+[watch expressions]
-
- .SH DESCRIPTION
-
-@@ -25,6 +26,11 @@
- monitor the system or session buses respectively. If neither is
- specified, \fIdbus-monitor\fP monitors the session bus.
-
-+.PP
-+In order to get \fIdbus-monitor\fP to see the messages you are interested
-+in, you should specify a set of watch expressions as you would expect to
-+be passed to the \fIdbus_bus_add_watch\fP function.
-+
- .PP
- The message bus configuration may keep \fIdbus-monitor\fP from seeing
- all messages, especially if you run the monitor as a non-root user.
-@@ -37,6 +43,15 @@
- .I "--session"
- Monitor the session message bus. (This is the default.)
-
-+.SH EXAMPLE
-+Here is an example of using dbus-monitor to watch for the gnome typing
-+monitor to say things
-+.nf
-+
-+ dbus-monitor "type='signal',sender='org.gnome.TypingMonitor',interface='org.gnome.TypingMonitor'"
-+
-+.fi
-+
- .SH AUTHOR
- dbus-monitor was written by Philip Blundell.
-
---- dbus-0.22-1ubuntu1/tools/dbus-monitor.c 2004-08-10 13:03:37.000000000 +1000
-+++ dbus-0.22/tools/dbus-monitor.c 2004-10-10 21:38:08.532362152 +1000
-@@ -45,7 +45,7 @@
- static void
- usage (char *name, int ecode)
- {
-- fprintf (stderr, "Usage: %s [--system | --session]\n", name);
-+ fprintf (stderr, "Usage: %s [--system | --session] [watch expressions]\n", name);
- exit (ecode);
- }
-
-@@ -56,8 +56,8 @@
- DBusError error;
- DBusBusType type = DBUS_BUS_SESSION;
- GMainLoop *loop;
-- int i;
--
-+ int i = 0, j = 0, numFilters = 0;
-+ char **filters = NULL;
- for (i = 1; i < argc; i++)
- {
- char *arg = argv[i];
-@@ -69,14 +69,18 @@
- else if (!strcmp (arg, "--help"))
- usage (argv[0], 0);
- else if (!strcmp (arg, "--"))
-- break;
-+ continue;
- else if (arg[0] == '-')
- usage (argv[0], 1);
-+ else {
-+ numFilters++;
-+ filters = (char **)realloc(filters, numFilters * sizeof(char *));
-+ filters[j] = (char *)malloc((strlen(arg) + 1) * sizeof(char *));
-+ snprintf(filters[j], strlen(arg) + 1, "%s", arg);
-+ j++;
-+ }
- }
-
-- if (argc > 2)
-- usage (argv[0], 1);
--
- loop = g_main_loop_new (NULL, FALSE);
-
- dbus_error_init (&error);
-@@ -92,26 +102,45 @@
-
- dbus_connection_setup_with_g_main (connection, NULL);
-
-- dbus_bus_add_match (connection,
-- "type='signal'",
-- &error);
-- if (dbus_error_is_set (&error))
-- goto lose;
-- dbus_bus_add_match (connection,
-- "type='method_call'",
-- &error);
-- if (dbus_error_is_set (&error))
-- goto lose;
-- dbus_bus_add_match (connection,
-- "type='method_return'",
-- &error);
-- if (dbus_error_is_set (&error))
-- goto lose;
-- dbus_bus_add_match (connection,
-- "type='error'",
-- &error);
-- if (dbus_error_is_set (&error))
-- goto lose;
-+ if (numFilters)
-+ {
-+ for (i = 0; i < j; i++)
-+ {
-+ dbus_bus_add_match (connection, filters[i], &error);
-+ if (dbus_error_is_set (&error))
-+ {
-+ fprintf (stderr, "Failed to setup match \"%s\": %s\n",
-+ filters[i], error.message);
-+ dbus_error_free (&error);
-+ exit (1);
-+ }
-+ free(filters[i]);
-+ }
-+ }
-+ else
-+ {
-+ dbus_bus_add_match (connection,
-+ "type='signal'",
-+ &error);
-+ if (dbus_error_is_set (&error))
-+ goto lose;
-+ dbus_bus_add_match (connection,
-+ "type='method_call'",
-+ &error);
-+ if (dbus_error_is_set (&error))
-+ goto lose;
-+ dbus_bus_add_match (connection,
-+ "type='method_return'",
-+ &error);
-+ if (dbus_error_is_set (&error))
-+ goto lose;
-+ dbus_bus_add_match (connection,
-+ "type='error'",
-+ &error);
-+ if (dbus_error_is_set (&error))
-+ goto lose;
-+ }
-+
- if (!dbus_connection_add_filter (connection, filter_func, NULL, NULL)) {
- fprintf (stderr, "Couldn't add filter!\n");
- exit (1);
diff --git a/packages/dbus/dbus/dbus-quiesce-startup-errors.patch b/packages/dbus/dbus/dbus-quiesce-startup-errors.patch
deleted file mode 100644
index ba5142af2f..0000000000
--- a/packages/dbus/dbus/dbus-quiesce-startup-errors.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- dbus-0.20-virgin-patches/bus/config-parser.c 2003-10-14 21:30:21.000000000 +0100
-+++ dbus-0.20/bus/config-parser.c 2004-02-10 00:40:05.000000000 +0000
-@@ -1710,8 +1710,18 @@
- {
- if (!include_file (parser, &full_path, TRUE, error))
- {
-- _dbus_string_free (&full_path);
-- goto failed;
-+ /* Debian patch to skip malformed /etc/dbus-1/system.d entries */
-+ /*
-+ * _dbus_string_free (&full_path);
-+ * goto failed;
-+ */
-+ if (dbus_error_is_set (error))
-+ {
-+ _dbus_warn("\nEncountered error '%s' while parsing '%s'\n",
-+ error->message,
-+ _dbus_string_get_const_data(&full_path));
-+ dbus_error_free (error);
-+ }
- }
- }
-
diff --git a/packages/dbus/dbus/dbussend.patch b/packages/dbus/dbus/dbussend.patch
deleted file mode 100644
index 49a251bbb0..0000000000
--- a/packages/dbus/dbus/dbussend.patch
+++ /dev/null
@@ -1,399 +0,0 @@
-Index: dbus-send.1
-===================================================================
---- tools/dbus-send.1 (revision 691)
-+++ tools/dbus-send.1 (working copy)
-@@ -36,8 +36,8 @@
- specified. Following arguments, if any, are the message contents
- (message arguments). These are given as a type name, a colon, and
- then the value of the argument. The possible type names are: string,
--int32, uint32, double, byte, boolean. (D-BUS supports more types than
--these, but \fIdbus-send\fP currently does not.)
-+int32, uint32, double, byte, boolean, array. (D-BUS supports more types
-+than these, but \fIdbus-send\fP currently does not.)
-
- .PP
- Here is an example invocation:
-@@ -46,7 +46,8 @@
- dbus-send \-\-dest='org.freedesktop.ExampleService' \\
- /org/freedesktop/sample/object/name \\
- org.freedesktop.ExampleInterface.ExampleMethod \\
-- int32:47 string:'hello world' double:65.32
-+ int32:47 string:'hello world' double:65.32 \\
-+ array:byte[0,1,2]
-
- .fi
-
-Index: dbus-print-message.c
-===================================================================
---- tools/dbus-print-message.c (revision 691)
-+++ tools/dbus-print-message.c (working copy)
-@@ -39,6 +39,78 @@
- }
- }
-
-+static void
-+iterate (DBusMessageIter* iter, int entry_type)
-+{
-+ do
-+ {
-+ char *str;
-+ dbus_uint32_t uint32;
-+ dbus_int32_t int32;
-+ double d;
-+ unsigned char byte;
-+ dbus_bool_t boolean;
-+ int type = dbus_message_iter_get_arg_type (iter);
-+
-+ DBusMessageIter array_iter;
-+ int array_type = DBUS_TYPE_INVALID;
-+
-+ if (type == DBUS_TYPE_INVALID)
-+ {
-+ if (entry_type == DBUS_TYPE_INVALID)
-+ break;
-+ else
-+ type == entry_type;
-+ }
-+
-+ switch (type)
-+ {
-+ case DBUS_TYPE_STRING:
-+ str = dbus_message_iter_get_string (iter);
-+ printf ("string:%s\n", str);
-+ break;
-+
-+ case DBUS_TYPE_INT32:
-+ int32 = dbus_message_iter_get_int32 (iter);
-+ printf ("int32:%d\n", int32);
-+ break;
-+
-+ case DBUS_TYPE_UINT32:
-+ uint32 = dbus_message_iter_get_uint32 (iter);
-+ printf ("int32:%u\n", uint32);
-+ break;
-+
-+ case DBUS_TYPE_DOUBLE:
-+ d = dbus_message_iter_get_double (iter);
-+ printf ("double:%f\n", d);
-+ break;
-+
-+ case DBUS_TYPE_BYTE:
-+ byte = dbus_message_iter_get_byte (iter);
-+ printf ("byte:%d\n", byte);
-+ break;
-+
-+ case DBUS_TYPE_BOOLEAN:
-+ boolean = dbus_message_iter_get_boolean (iter);
-+ printf ("boolean:%s\n", boolean ? "true" : "false");
-+ break;
-+
-+ case DBUS_TYPE_ARRAY:
-+ dbus_message_iter_init_array_iterator (iter,
-+ &array_iter,
-+ &array_type);
-+ printf ("array[\n");
-+ iterate (&array_iter, array_type);
-+ printf ("]\n");
-+ break;
-+
-+ default:
-+ printf ("(unknown arg type %d)\n", type);
-+ break;
-+ }
-+ } while (dbus_message_iter_next (iter));
-+}
-+
- void
- print_message (DBusMessage *message)
- {
-@@ -81,55 +153,6 @@
-
- dbus_message_iter_init (message, &iter);
-
-- do
-- {
-- int type = dbus_message_iter_get_arg_type (&iter);
-- char *str;
-- dbus_uint32_t uint32;
-- dbus_int32_t int32;
-- double d;
-- unsigned char byte;
-- dbus_bool_t boolean;
--
-- if (type == DBUS_TYPE_INVALID)
-- break;
--
-- switch (type)
-- {
-- case DBUS_TYPE_STRING:
-- str = dbus_message_iter_get_string (&iter);
-- printf ("string:%s\n", str);
-- break;
--
-- case DBUS_TYPE_INT32:
-- int32 = dbus_message_iter_get_int32 (&iter);
-- printf ("int32:%d\n", int32);
-- break;
--
-- case DBUS_TYPE_UINT32:
-- uint32 = dbus_message_iter_get_uint32 (&iter);
-- printf ("int32:%u\n", uint32);
-- break;
--
-- case DBUS_TYPE_DOUBLE:
-- d = dbus_message_iter_get_double (&iter);
-- printf ("double:%f\n", d);
-- break;
--
-- case DBUS_TYPE_BYTE:
-- byte = dbus_message_iter_get_byte (&iter);
-- printf ("byte:%d\n", byte);
-- break;
--
-- case DBUS_TYPE_BOOLEAN:
-- boolean = dbus_message_iter_get_boolean (&iter);
-- printf ("boolean:%s\n", boolean ? "true" : "false");
-- break;
--
-- default:
-- printf ("(unknown arg type %d)\n", type);
-- break;
-- }
-- } while (dbus_message_iter_next (&iter));
-+ iterate (&iter, DBUS_TYPE_INVALID);
- }
-
-Index: dbus-send.c
-===================================================================
---- tools/dbus-send.c (revision 691)
-+++ tools/dbus-send.c (working copy)
-@@ -34,6 +34,146 @@
- exit (ecode);
- }
-
-+
-+static int
-+get_type (char **argv, char *arg)
-+{
-+ int type;
-+
-+ if (arg[0] == 0 || !strcmp (arg, "string"))
-+ type = DBUS_TYPE_STRING;
-+ else if (!strcmp (arg, "int32"))
-+ type = DBUS_TYPE_INT32;
-+ else if (!strcmp (arg, "uint32"))
-+ type = DBUS_TYPE_UINT32;
-+ else if (!strcmp (arg, "double"))
-+ type = DBUS_TYPE_DOUBLE;
-+ else if (!strcmp (arg, "byte"))
-+ type = DBUS_TYPE_BYTE;
-+ else if (!strcmp (arg, "boolean"))
-+ type = DBUS_TYPE_BOOLEAN;
-+ else if (!strcmp (arg, "array"))
-+ type = DBUS_TYPE_ARRAY;
-+ else
-+ {
-+ fprintf (stderr, "%s: Unknown type \"%s\"\n", argv[0], arg);
-+ exit (1);
-+ }
-+
-+ return type;
-+}
-+
-+
-+static void
-+append (char **argv, char *arg, char *c, DBusMessageIter *iter)
-+{
-+ int type, atype = 0;
-+ dbus_uint32_t uint32;
-+ dbus_int32_t int32;
-+ double d;
-+ unsigned char byte;
-+ DBusMessageIter array_iter;
-+ int end_found = 0;
-+ char *next;
-+
-+ /* FIXME - we are ignoring OOM returns on all these functions */
-+
-+ type = get_type(argv, arg);
-+ if (type == DBUS_TYPE_ARRAY)
-+ {
-+ arg = c;
-+ c = strchr (c, '[');
-+ if (c == NULL)
-+ {
-+ fprintf (stderr, "%s: Data item \"%s\" is badly formed\n", argv[0], arg);
-+ exit (1);
-+ }
-+
-+ if (strchr(c, ']') == NULL)
-+ {
-+ fprintf (stderr, "%s: Data item \"%s\" is badly formed\n", argv[0], arg);
-+ exit (1);
-+ }
-+
-+ *(c++) = 0;
-+
-+ atype = get_type(argv, arg);
-+ }
-+
-+
-+ switch (type)
-+ {
-+ case DBUS_TYPE_BYTE:
-+ byte = strtoul (c, NULL, 0);
-+ dbus_message_iter_append_byte (iter, byte);
-+ break;
-+
-+ case DBUS_TYPE_DOUBLE:
-+ d = strtod (c, NULL);
-+ dbus_message_iter_append_double (iter, d);
-+ break;
-+
-+ case DBUS_TYPE_INT32:
-+ int32 = strtol (c, NULL, 0);
-+ dbus_message_iter_append_int32 (iter, int32);
-+ break;
-+
-+ case DBUS_TYPE_UINT32:
-+ uint32 = strtoul (c, NULL, 0);
-+ dbus_message_iter_append_uint32 (iter, uint32);
-+ break;
-+
-+ case DBUS_TYPE_STRING:
-+ dbus_message_iter_append_string (iter, c);
-+ break;
-+
-+ case DBUS_TYPE_BOOLEAN:
-+ if (strcmp(c, "true") == 0)
-+ dbus_message_iter_append_boolean (iter, TRUE);
-+ else if (strcmp(c, "false") == 0)
-+ dbus_message_iter_append_boolean (iter, FALSE);
-+ else
-+ {
-+ fprintf (stderr, "%s: Expected \"true\" or \"false\" instead of \"%s\"\n", argv[0], c);
-+ exit (1);
-+ }
-+ break;
-+
-+ case DBUS_TYPE_ARRAY:
-+ /* Decompose parameters and put it as array */
-+ dbus_message_iter_append_array(iter, &array_iter, atype);
-+
-+ while(!end_found)
-+ {
-+ next = strchr(c, ',');
-+ if (next == NULL)
-+ {
-+ next = strchr(c, ']');
-+
-+ if (next != NULL)
-+ next[0] = 0;
-+ else
-+ break;
-+
-+ end_found = 1;
-+ }
-+ else
-+ {
-+ next[0] = 0;
-+ next++;
-+ }
-+
-+ append (argv, arg, c, &array_iter);
-+ c = next;
-+ }
-+ break;
-+
-+ default:
-+ fprintf (stderr, "%s: Unsupported data type\n", argv[0]);
-+ exit (1);
-+ }
-+}
-+
- int
- main (int argc, char *argv[])
- {
-@@ -174,12 +314,7 @@
- {
- char *arg;
- char *c;
-- int type;
-- dbus_uint32_t uint32;
-- dbus_int32_t int32;
-- double d;
-- unsigned char byte;
--
-+
- type = DBUS_TYPE_INVALID;
- arg = argv[i++];
- c = strchr (arg, ':');
-@@ -192,67 +327,7 @@
-
- *(c++) = 0;
-
-- if (arg[0] == 0 || !strcmp (arg, "string"))
-- type = DBUS_TYPE_STRING;
-- else if (!strcmp (arg, "int32"))
-- type = DBUS_TYPE_INT32;
-- else if (!strcmp (arg, "uint32"))
-- type = DBUS_TYPE_UINT32;
-- else if (!strcmp (arg, "double"))
-- type = DBUS_TYPE_DOUBLE;
-- else if (!strcmp (arg, "byte"))
-- type = DBUS_TYPE_BYTE;
-- else if (!strcmp (arg, "boolean"))
-- type = DBUS_TYPE_BOOLEAN;
-- else
-- {
-- fprintf (stderr, "%s: Unknown type \"%s\"\n", argv[0], arg);
-- exit (1);
-- }
--
-- /* FIXME - we are ignoring OOM returns on all these functions */
-- switch (type)
-- {
-- case DBUS_TYPE_BYTE:
-- byte = strtoul (c, NULL, 0);
-- dbus_message_iter_append_byte (&iter, byte);
-- break;
--
-- case DBUS_TYPE_DOUBLE:
-- d = strtod (c, NULL);
-- dbus_message_iter_append_double (&iter, d);
-- break;
--
-- case DBUS_TYPE_INT32:
-- int32 = strtol (c, NULL, 0);
-- dbus_message_iter_append_int32 (&iter, int32);
-- break;
--
-- case DBUS_TYPE_UINT32:
-- uint32 = strtoul (c, NULL, 0);
-- dbus_message_iter_append_uint32 (&iter, uint32);
-- break;
--
-- case DBUS_TYPE_STRING:
-- dbus_message_iter_append_string (&iter, c);
-- break;
--
-- case DBUS_TYPE_BOOLEAN:
-- if (strcmp(c, "true") == 0)
-- dbus_message_iter_append_boolean (&iter, TRUE);
-- else if (strcmp(c, "false") == 0)
-- dbus_message_iter_append_boolean (&iter, FALSE);
-- else
-- {
-- fprintf (stderr, "%s: Expected \"true\" or \"false\" instead of \"%s\"\n", argv[0], c);
-- exit (1);
-- }
-- break;
--
-- default:
-- fprintf (stderr, "%s: Unsupported data type\n", argv[0]);
-- exit (1);
-- }
-+ append (argv, arg, c, &iter);
- }
-
- if (print_reply)
diff --git a/packages/dbus/dbus/gettext.patch b/packages/dbus/dbus/gettext.patch
deleted file mode 100644
index 7042bd0903..0000000000
--- a/packages/dbus/dbus/gettext.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-Index: dbus-0.23/configure.in
-===================================================================
---- dbus-0.23.orig/configure.in 2005-04-02 17:14:37.780040976 -0500
-+++ dbus-0.23/configure.in 2005-04-02 17:14:38.024003888 -0500
-@@ -22,6 +22,9 @@
- AC_ISC_POSIX
- AC_HEADER_STDC
-
-+AM_GNU_GETTEXT_VERSION(0.11.5)
-+AM_GNU_GETTEXT([external], [need-ngettext])
-+
- AC_ARG_ENABLE(qt, [ --enable-qt enable Qt-friendly client library],enable_qt=$enableval,enable_qt=auto)
- AC_ARG_ENABLE(glib, [ --enable-glib enable GLib-friendly client library],enable_glib=$enableval,enable_glib=auto)
- AC_ARG_ENABLE(gtk, [ --enable-gtk enable GTK-requiring executables],enable_gtk=$enableval,enable_gtk=auto)
-Index: dbus-0.23/glib/Makefile.am
-===================================================================
---- dbus-0.23.orig/glib/Makefile.am 2004-07-29 04:00:45.000000000 -0400
-+++ dbus-0.23/glib/Makefile.am 2005-04-02 17:22:27.302662688 -0500
-@@ -15,7 +15,7 @@
- dbus-gvalue.c \
- dbus-gvalue.h
-
--libdbus_glib_1_la_LIBADD= $(DBUS_GLIB_LIBS) $(top_builddir)/dbus/libdbus-1.la
-+libdbus_glib_1_la_LIBADD= $(DBUS_GLIB_LIBS) $(LIBINTL) $(top_builddir)/dbus/libdbus-1.la
- ## don't export symbols that start with "_" (we use this
- ## convention for internal symbols)
- libdbus_glib_1_la_LDFLAGS= -export-symbols-regex "^[^_].*"
-Index: dbus-0.23/glib/dbus-glib-tool.c
-===================================================================
---- dbus-0.23.orig/glib/dbus-glib-tool.c 2004-08-09 23:07:00.000000000 -0400
-+++ dbus-0.23/glib/dbus-glib-tool.c 2005-04-02 17:14:38.024003888 -0500
-@@ -26,8 +26,13 @@
- #include "dbus-gparser.h"
- #include "dbus-gutils.h"
- #include <locale.h>
-+
-+#ifdef HAVE_GETTEXT
- #include <libintl.h>
- #define _(x) dgettext (GETTEXT_PACKAGE, x)
-+#else
-+#define _(x) x
-+#endif
- #define N_(x) x
- #include <stdio.h>
- #include <stdlib.h>
-Index: dbus-0.23/glib/dbus-glib.c
-===================================================================
---- dbus-0.23.orig/glib/dbus-glib.c 2004-08-09 23:07:00.000000000 -0400
-+++ dbus-0.23/glib/dbus-glib.c 2005-04-02 17:14:38.024003888 -0500
-@@ -27,8 +27,12 @@
- #include "dbus-gtest.h"
- #include "dbus-gutils.h"
-
-+#ifdef HAVE_GETTEXT
- #include <libintl.h>
- #define _(x) dgettext (GETTEXT_PACKAGE, x)
-+#else
-+#define _(x) x
-+#endif
- #define N_(x) x
-
- /**
-Index: dbus-0.23/glib/dbus-gmain.c
-===================================================================
---- dbus-0.23.orig/glib/dbus-gmain.c 2004-11-13 02:07:47.000000000 -0500
-+++ dbus-0.23/glib/dbus-gmain.c 2005-04-02 17:14:38.025003736 -0500
-@@ -27,8 +27,12 @@
- #include "dbus-gtest.h"
- #include "dbus-gutils.h"
-
-+#ifdef HAVE_GETTEXT
- #include <libintl.h>
- #define _(x) dgettext (GETTEXT_PACKAGE, x)
-+#else
-+#define _(x) x
-+#endif
- #define N_(x) x
-
- /**
-Index: dbus-0.23/glib/dbus-gparser.c
-===================================================================
---- dbus-0.23.orig/glib/dbus-gparser.c 2004-08-09 23:07:00.000000000 -0400
-+++ dbus-0.23/glib/dbus-gparser.c 2005-04-02 17:14:38.025003736 -0500
-@@ -20,12 +20,18 @@
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-+
-+#include <config.h>
- #include "dbus-gparser.h"
- #include "dbus-gidl.h"
- #include <string.h>
-
-+#ifdef HAVE_GETTEXT
- #include <libintl.h>
- #define _(x) gettext ((x))
-+#else
-+#define _(x) x
-+#endif
- #define N_(x) x
-
- #ifndef DOXYGEN_SHOULD_SKIP_THIS
-Index: dbus-0.23/tools/Makefile.am
-===================================================================
---- dbus-0.23.orig/tools/Makefile.am 2004-04-21 17:29:07.000000000 -0400
-+++ dbus-0.23/tools/Makefile.am 2005-04-02 17:22:00.712704976 -0500
-@@ -37,8 +37,8 @@
-
- dbus_send_LDADD= $(top_builddir)/dbus/libdbus-1.la
- dbus_monitor_LDADD= $(top_builddir)/glib/libdbus-glib-1.la
--dbus_launch_LDADD= $(DBUS_X_LIBS)
--dbus_viewer_LDADD= $(DBUS_GLIB_TOOL_LIBS) $(top_builddir)/glib/libdbus-gtool.la $(DBUS_GTK_LIBS)
-+dbus_launch_LDADD= $(DBUS_X_LIBS) $(LIBINTL)
-+dbus_viewer_LDADD= $(DBUS_GLIB_TOOL_LIBS) $(LIBINTL) $(top_builddir)/glib/libdbus-gtool.la $(DBUS_GTK_LIBS)
-
- man_MANS = dbus-send.1 dbus-monitor.1 dbus-launch.1 dbus-cleanup-sockets.1
- EXTRA_DIST = $(man_MANS)
-Index: dbus-0.23/tools/dbus-launch.c
-===================================================================
---- dbus-0.23.orig/tools/dbus-launch.c 2004-08-09 23:07:01.000000000 -0400
-+++ dbus-0.23/tools/dbus-launch.c 2005-04-02 17:14:38.026003584 -0500
-@@ -22,6 +22,8 @@
- */
- #include <config.h>
- #include <stdlib.h>
-+#include <sys/time.h>
-+#include <sys/types.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <signal.h>
-Index: dbus-0.23/tools/dbus-tree-view.c
-===================================================================
---- dbus-0.23.orig/tools/dbus-tree-view.c 2004-08-09 23:07:01.000000000 -0400
-+++ dbus-0.23/tools/dbus-tree-view.c 2005-04-02 17:14:38.026003584 -0500
-@@ -24,8 +24,12 @@
- #include <config.h>
- #include "dbus-tree-view.h"
-
-+#ifdef HAVE_GETTEXT
- #include <libintl.h>
- #define _(x) dgettext (GETTEXT_PACKAGE, x)
-+#else
-+#define _(x) x
-+#endif
- #define N_(x) x
-
- enum
-Index: dbus-0.23/tools/dbus-viewer.c
-===================================================================
---- dbus-0.23.orig/tools/dbus-viewer.c 2004-08-09 23:07:01.000000000 -0400
-+++ dbus-0.23/tools/dbus-viewer.c 2005-04-02 17:14:38.027003432 -0500
-@@ -30,8 +30,12 @@
- #include <glib/dbus-gparser.h>
- #include <glib/dbus-gutils.h>
-
-+#ifdef HAVE_GETTEXT
- #include <libintl.h>
- #define _(x) dgettext (GETTEXT_PACKAGE, x)
-+#else
-+#define _(x) x
-+#endif
- #define N_(x) x
-
- typedef struct
diff --git a/packages/dbus/dbus/no-bindings.patch b/packages/dbus/dbus/no-bindings.patch
deleted file mode 100644
index 12ba00ff70..0000000000
--- a/packages/dbus/dbus/no-bindings.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- dbus-0.34/tools/Makefile.am.old 2005-06-27 21:48:44.000000000 +0100
-+++ dbus-0.34/tools/Makefile.am 2005-06-27 21:49:04.000000000 +0100
-@@ -6,9 +6,6 @@
- nodist_libdbus_glib_HEADERS = dbus-glib-bindings.h
- libdbus_glibdir = $(includedir)/dbus-1.0/dbus
-
--dbus-glib-bindings.h: dbus-bus-introspect.xml $(top_builddir)/glib/dbus-binding-tool
-- $(top_builddir)/glib/dbus-binding-tool --mode=glib-client --output=dbus-glib-bindings.h dbus-bus-introspect.xml
--
- BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml
-
- else
diff --git a/packages/dbus/dbus/no-examples.patch b/packages/dbus/dbus/no-examples.patch
deleted file mode 100644
index 8767705cee..0000000000
--- a/packages/dbus/dbus/no-examples.patch
+++ /dev/null
@@ -1,8 +0,0 @@
---- dbus-0.36.2/glib/Makefile.am.orig 2005-09-06 17:30:26 +0200
-+++ dbus-0.36.2/glib/Makefile.am 2005-09-06 17:30:34 +0200
-@@ -1,4 +1,4 @@
--SUBDIRS = . examples
-+SUBDIRS = .
-
- INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_GLIB_CFLAGS) $(DBUS_GLIB_TOOL_CFLAGS) -DDBUS_COMPILATION=1 -DDBUS_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\"
-
diff --git a/packages/dbus/dbus/no-introspect.patch b/packages/dbus/dbus/no-introspect.patch
deleted file mode 100644
index d7ae8e4cad..0000000000
--- a/packages/dbus/dbus/no-introspect.patch
+++ /dev/null
@@ -1,19 +0,0 @@
---- dbus-0.34/tools/Makefile.am.old 2005-06-27 20:54:36.000000000 +0100
-+++ dbus-0.34/tools/Makefile.am 2005-06-27 20:54:43.000000000 +0100
-@@ -21,16 +21,6 @@
- GTK_TOOLS=
- endif
-
--if HAVE_GLIB
--noinst_PROGRAMS = print-introspect
--
--print_introspect_SOURCES = print-introspect.c
--print_introspect_LDADD = $(top_builddir)/glib/libdbus-glib-1.la
--
--dbus-bus-introspect.xml: $(top_builddir)/bus/dbus-daemon dbus-launch print-introspect $(top_builddir)/bus/dbus-daemon
-- DBUS_TOP_BUILDDIR=$(top_builddir) $(srcdir)/run-with-tmp-session-bus.sh ./print-introspect org.freedesktop.DBus /org/freedesktop/DBus > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml
--endif
--
- bin_PROGRAMS=dbus-send $(GLIB_TOOLS) dbus-launch dbus-cleanup-sockets $(GTK_TOOLS)
-
- dbus_send_SOURCES= \
diff --git a/packages/dbus/dbus/no-static.patch b/packages/dbus/dbus/no-static.patch
deleted file mode 100644
index a28a582681..0000000000
--- a/packages/dbus/dbus/no-static.patch
+++ /dev/null
@@ -1,22 +0,0 @@
---- dbus-0.23.4/bus/Makefile.am.old 2006-02-04 11:51:26.000000000 +0000
-+++ dbus-0.23.4/bus/Makefile.am 2006-02-04 11:51:27.000000000 +0000
-@@ -63,7 +63,7 @@
- dbus_daemon_1_LDADD= \
- $(EFENCE) \
- $(DBUS_BUS_LIBS) \
-- $(top_builddir)/dbus/libdbus-convenience.la
-+ $(top_builddir)/dbus/libdbus-1.la $(top_builddir)/dbus/libdbus-convenience.la
-
- ## note that TESTS has special meaning (stuff to use in make check)
- ## so if adding tests not to be run in make check, don't add them to
---- dbus-0.23.4/dbus/Makefile.am.old 2006-02-04 13:27:03.000000000 +0000
-+++ dbus-0.23.4/dbus/Makefile.am 2006-02-04 13:27:04.000000000 +0000
-@@ -144,7 +144,7 @@
- libdbus_1_la_LIBADD= $(DBUS_CLIENT_LIBS)
- ## don't export symbols that start with "_" (we use this
- ## convention for internal symbols)
--libdbus_1_la_LDFLAGS= -export-symbols-regex "^[^_].*"
-+#libdbus_1_la_LDFLAGS= -export-symbols-regex "^[^_].*"
-
- ## note that TESTS has special meaning (stuff to use in make check)
- ## so if adding tests not to be run in make check, don't add them to
diff --git a/packages/dbus/dbus/spawn-priority.diff b/packages/dbus/dbus/spawn-priority.diff
deleted file mode 100644
index 954d2512fa..0000000000
--- a/packages/dbus/dbus/spawn-priority.diff
+++ /dev/null
@@ -1,17 +0,0 @@
-diff -ur dbus/dbus/dbus-spawn.c dbus.work/dbus/dbus-spawn.c
---- dbus/dbus/dbus-spawn.c 2005-03-14 14:25:02.849823496 +0200
-+++ dbus.work/dbus/dbus-spawn.c 2005-03-14 14:34:43.947483224 +0200
-@@ -1117,6 +1117,12 @@
- }
- else if (grandchild_pid == 0)
- {
-+ int p;
-+ errno = 0;
-+ p = getpriority(PRIO_PROCESS, 0);
-+ if (!errno && p < 0) {
-+ setpriority(PRIO_PROCESS, 0, 0);
-+ }
- do_exec (child_err_report_pipe[WRITE_END],
- argv,
- child_setup, user_data);
-Only in dbus.work/dbus: dbus-spawn.c~
diff --git a/packages/dbus/dbus/tools.diff b/packages/dbus/dbus/tools.diff
deleted file mode 100644
index d9e8712983..0000000000
--- a/packages/dbus/dbus/tools.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-Only in /home/kihamala/svn/dbus/tools: .svn
-diff -ur tools/dbus-launch.c /home/kihamala/svn/dbus/tools/dbus-launch.c
---- tools/dbus-launch.c 2004-08-10 06:07:01.000000000 +0300
-+++ /home/kihamala/svn/dbus/tools/dbus-launch.c 2005-02-09 17:59:05.000000000 +0200
-@@ -20,6 +20,7 @@
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-+#include <sys/select.h>
- #include <config.h>
- #include <stdlib.h>
- #include <unistd.h>
diff --git a/packages/dbus/dbus_1.0.1.bb b/packages/dbus/dbus_1.0.1.bb
deleted file mode 100644
index f5e4aa16ea..0000000000
--- a/packages/dbus/dbus_1.0.1.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require dbus.inc
-
-SRC_URI += "file://dbus-exploit-fix.patch;patch=1"
-
-PR = "r4"
diff --git a/packages/dbus/dbus_1.0.2.bb b/packages/dbus/dbus_1.0.2.bb
index f51265e434..e803cb7189 100644
--- a/packages/dbus/dbus_1.0.2.bb
+++ b/packages/dbus/dbus_1.0.2.bb
@@ -1,14 +1,6 @@
require dbus.inc
-
DEFAULT_PREFERENCE = "1"
-PR = "r8"
-
-SRC_URI = "http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \
- file://tmpdir.patch;patch=1 \
- file://dbus-1.init \
- file://cross.patch;patch=1 \
- file://fix-install-daemon.patch;patch=1"
-
+PR = "r9"
diff --git a/packages/dbus/dbus_1.1.4.bb b/packages/dbus/dbus_1.1.4.bb
new file mode 100644
index 0000000000..f331b140aa
--- /dev/null
+++ b/packages/dbus/dbus_1.1.4.bb
@@ -0,0 +1,3 @@
+include dbus.inc
+
+PR = "r0"
diff --git a/packages/devio/devio.inc b/packages/devio/devio.inc
index 4cba2d5cc0..b2d09e81f0 100644
--- a/packages/devio/devio.inc
+++ b/packages/devio/devio.inc
@@ -10,7 +10,6 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/devio/devio-${PV}.tar.gz"
S = "${WORKDIR}/devio-${PV}"
# Just the one package at present
-PACKAGES = "${PN}"
# Set the install dir to /sbin, not /usr/sbin, because devio is used
# during bootstrap (we want it to be posible to mount /usr separately)
diff --git a/packages/dhcp/dhcp_3.0.1.bb b/packages/dhcp/dhcp_3.0.1.bb
index 1536aea914..650de1391d 100644
--- a/packages/dhcp/dhcp_3.0.1.bb
+++ b/packages/dhcp/dhcp_3.0.1.bb
@@ -35,7 +35,7 @@ do_install() {
install -m 0644 ${WORKDIR}/dhcpd.conf ${D}${sysconfdir}/dhcp/dhcpd.conf
}
-PACKAGES = "dhcp-server dhcp-client dhcp-relay dhcp-omshell dhcp-dev dhcp-doc"
+PACKAGES = "${PN}-dbg dhcp-server dhcp-client dhcp-relay dhcp-omshell dhcp-dev dhcp-doc"
FILES_dhcp-server = "${sbindir}/dhcpd /etc/init.d/dhcp-server /etc/default/dhcp-server /etc/dhcp/dhcpd.conf"
FILES_dhcp-relay = "${sbindir}/dhcrelay /etc/init.d/dhcp-relay /etc/default/dhcp-relay"
FILES_dhcp-client = "/sbin/ /etc/dhcp/dhclient.conf"
diff --git a/packages/directfb/directfb.inc b/packages/directfb/directfb.inc
new file mode 100644
index 0000000000..0843f36198
--- /dev/null
+++ b/packages/directfb/directfb.inc
@@ -0,0 +1,76 @@
+DESCRIPTION = "DirectFB is a thin library that provides developers \
+with hardware graphics acceleration, input device handling and \
+abstraction, an integrated windowing system with support for \
+translucent windows and multiple display layers on top of the \
+Linux framebuffer device."
+SECTION = "libs"
+LICENSE = "LGPL"
+HOMEPAGE = "http://directfb.org"
+DEPENDS = "jpeg libpng freetype zlib tslib"
+RV = "1.0-0"
+PR = "r4"
+
+SRC_URI = " \
+ http://www.directfb.org/download/DirectFB/DirectFB-${PV}.tar.gz \
+ file://fix-pkgconfig-cflags.patch;patch=1 \
+ file://fix-font-missing-char.patch;patch=1 \
+ file://getpagesize.patch;patch=1 \
+ file://fix-includes.patch;patch=1 \
+ file://mkdfiff.patch;patch=1 \
+"
+S = "${WORKDIR}/DirectFB-${PV}"
+
+LDFLAGS_append =" -lts -lm"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "\
+ --with-gfxdrivers=none \
+ --enable-libmpeg3=no \
+ --enable-freetype=yes \
+ --enable-sdl=no \
+ --enable-vnc=no \
+ --disable-x11 \
+"
+
+do_stage() {
+ autotools_stage_all
+}
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install
+}
+
+
+#PACKAGES_DYNAMIC = "directfb-inputdrivers-*"
+#
+#python populate_packages_prepend () {
+# import os.path
+# inputdrivers_libdir = bb.data.expand('${libdir}/directfb-${RV}/inputdrivers', d)
+# do_split_packages(d, inputdrivers_libdir, '*.so$', 'directfb-inputdrivers-%s', 'Directfb plugin for %s')
+#}
+
+# NOTE: monolithic packaging for now, should improve that eventually
+
+
+
+FILES_${PN}-dbg += "\
+ ${libdir}/directfb-${RV}/*/*/.debug/*.so \
+ ${libdir}/directfb-${RV}/*/.debug/*.so \
+"
+
+FILES_${PN}-dev += "\
+ ${bindir}/directfb-config \
+ ${libdir}/directfb-${RV}/systems/*.la \
+ ${libdir}/directfb-${RV}/inputdrivers/*.la \
+ ${libdir}/directfb-${RV}/interfaces/*/*.la \
+ ${libdir}/directfb-${RV}/wm/*.la \
+"
+
+FILES_${PN} += "\
+ ${libdir}/directfb-${RV}/systems/*.so \
+ ${libdir}/directfb-${RV}/inputdrivers/*.so \
+ ${libdir}/directfb-${RV}/interfaces/*/*.so \
+ ${libdir}/directfb-${RV}/wm/*.so \
+ ${datadir}/directfb-${PV} \
+"
diff --git a/packages/directfb/directfb_1.0.0.bb b/packages/directfb/directfb_1.0.0.bb
new file mode 100644
index 0000000000..5b4690fe93
--- /dev/null
+++ b/packages/directfb/directfb_1.0.0.bb
@@ -0,0 +1,4 @@
+require directfb.inc
+
+RV = "1.0-0"
+PR = "r4"
diff --git a/packages/directfb/directfb_1.1.0.bb b/packages/directfb/directfb_1.1.0.bb
index 8fe4fd418a..39002fdb5d 100644
--- a/packages/directfb/directfb_1.1.0.bb
+++ b/packages/directfb/directfb_1.1.0.bb
@@ -1,76 +1,4 @@
-DESCRIPTION = "DirectFB is a thin library that provides developers \
-with hardware graphics acceleration, input device handling and \
-abstraction, an integrated windowing system with support for \
-translucent windows and multiple display layers on top of the \
-Linux framebuffer device."
-SECTION = "libs"
-LICENSE = "LGPL"
-HOMEPAGE = "http://directfb.org"
-DEPENDS = "jpeg libpng freetype zlib tslib"
+require directfb.inc
+
RV = "1.1-0"
PR = "r3"
-
-SRC_URI = " \
- http://www.directfb.org/download/DirectFB/DirectFB-${PV}.tar.gz \
- file://fix-pkgconfig-cflags.patch;patch=1 \
- file://fix-font-missing-char.patch;patch=1 \
- file://getpagesize.patch;patch=1 \
- file://fix-includes.patch;patch=1 \
- file://mkdfiff.patch;patch=1 \
-"
-S = "${WORKDIR}/DirectFB-${PV}"
-
-LDFLAGS_append =" -lts -lm"
-
-inherit autotools pkgconfig
-
-EXTRA_OECONF = "\
- --with-gfxdrivers=none \
- --enable-libmpeg3=no \
- --enable-freetype=yes \
- --enable-sdl=no \
- --enable-vnc=no \
- --disable-x11 \
-"
-
-do_stage() {
- autotools_stage_all
-}
-
-do_install() {
- oe_runmake 'DESTDIR=${D}' install
-}
-
-
-#PACKAGES_DYNAMIC = "directfb-inputdrivers-*"
-#
-#python populate_packages_prepend () {
-# import os.path
-# inputdrivers_libdir = bb.data.expand('${libdir}/directfb-${RV}/inputdrivers', d)
-# do_split_packages(d, inputdrivers_libdir, '*.so$', 'directfb-inputdrivers-%s', 'Directfb plugin for %s')
-#}
-
-# NOTE: monolithic packaging for now, should improve that eventually
-
-
-
-FILES_${PN}-dbg += "\
- ${libdir}/directfb-${RV}/*/*/.debug/*.so \
- ${libdir}/directfb-${RV}/*/.debug/*.so \
-"
-
-FILES_${PN}-dev += "\
- ${bindir}/directfb-config \
- ${libdir}/directfb-${RV}/systems/*.la \
- ${libdir}/directfb-${RV}/inputdrivers/*.la \
- ${libdir}/directfb-${RV}/interfaces/*/*.la \
- ${libdir}/directfb-${RV}/wm/*.la \
-"
-
-FILES_${PN} += "\
- ${libdir}/directfb-${RV}/systems/*.so \
- ${libdir}/directfb-${RV}/inputdrivers/*.so \
- ${libdir}/directfb-${RV}/interfaces/*/*.so \
- ${libdir}/directfb-${RV}/wm/*.so \
- ${datadir}/directfb-${PV} \
-"
diff --git a/packages/distcc/distcc_2.18.3.bb b/packages/distcc/distcc_2.18.3.bb
index 7f557c41d1..ebf02e17ee 100644
--- a/packages/distcc/distcc_2.18.3.bb
+++ b/packages/distcc/distcc_2.18.3.bb
@@ -2,14 +2,15 @@ DESCRIPTION = "distcc is a parallel build system that distributes \
compilation of C/C++/ObjC code across machines on a network."
SECTION = "devel"
LICENSE = "GPLv2"
-PR = "r1"
+PR = "r3"
DEPENDS = "avahi gtk+"
RRECOMMENDS = "avahi-daemon"
SRC_URI = "http://distcc.samba.org/ftp/distcc/distcc-${PV}.tar.bz2 \
- http://0pointer.de/public/distcc-avahi.patch;patch=1 \
- file://default \
+ file://distcc-avahi.patch;patch=1 \
+ file://no-man.patch;patch=1 \
+ file://default \
file://distcc"
inherit autotools pkgconfig update-rc.d
@@ -21,8 +22,10 @@ EXTRA_OECONF = " --with-gtk "
do_install_append() {
install -d ${D}${sysconfdir}/init.d/
install -d ${D}${sysconfdir}/default
+ install -d ${D}${sysconfdir}/distcc
install -m 0755 ${WORKDIR}/distcc ${D}${sysconfdir}/init.d/
install -m 0755 ${WORKDIR}/default ${D}${sysconfdir}/default/distcc
+ echo "+zeroconf" > ${D}${sysconfdir}/distcc/hosts
}
PACKAGES += "distcc-distmon-gnome"
@@ -31,5 +34,11 @@ FILES_${PN} = " ${sysconfdir} \
${bindir}/distcc \
${bindir}/distccd \
${bindir}/distccmon-text"
+
+CONFFILES_${PN} += "${sysconfdir}/default/distcc \
+ ${sysconfdir}/distcc/hosts \
+ ${sysconfdir}/init.d/distcc \
+ "
+
FILES_distcc-distmon-gnome = " ${bindir}/distccmon-gnome \
${datadir}/distcc"
diff --git a/packages/distcc/files/distcc b/packages/distcc/files/distcc
index bbd4707497..d700e38de0 100644
--- a/packages/distcc/files/distcc
+++ b/packages/distcc/files/distcc
@@ -16,7 +16,7 @@ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/distccd
NAME=distcc
DESC="Distributed Compiler Daemon"
-DAEMON_ARGS="--pid-file=/var/run/$NAME.pid --daemon"
+DAEMON_ARGS="--pid-file=/var/run/$NAME.pid --daemon --zeroconf"
# please change those variables by overriding them in /etc/defaults/distcc
ALLOWEDNETS="127.0.0.1"
diff --git a/packages/distcc/files/distcc-avahi.patch b/packages/distcc/files/distcc-avahi.patch
new file mode 100644
index 0000000000..4444196fbe
--- /dev/null
+++ b/packages/distcc/files/distcc-avahi.patch
@@ -0,0 +1,12305 @@
+--- distcc-2.18.3/aclocal.m4 1970-01-01 01:00:00.000000000 +0100
++++ distcc-2.18.3.lennart/aclocal.m4 2007-12-30 13:55:27.000000000 +0100
+@@ -0,0 +1,171 @@
++# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
++
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
++# 2005 Free Software Foundation, Inc.
++# This file is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
++
++# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
++#
++# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++#
++# As a special exception to the GNU General Public License, if you
++# distribute this file as part of a program that contains a
++# configuration script generated by Autoconf, you may include it under
++# the same distribution terms that you use for the rest of that program.
++
++# PKG_PROG_PKG_CONFIG([MIN-VERSION])
++# ----------------------------------
++AC_DEFUN([PKG_PROG_PKG_CONFIG],
++[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
++m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
++AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
++if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
++ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
++fi
++if test -n "$PKG_CONFIG"; then
++ _pkg_min_version=m4_default([$1], [0.9.0])
++ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
++ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
++ AC_MSG_RESULT([yes])
++ else
++ AC_MSG_RESULT([no])
++ PKG_CONFIG=""
++ fi
++
++fi[]dnl
++])# PKG_PROG_PKG_CONFIG
++
++# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
++#
++# Check to see whether a particular set of modules exists. Similar
++# to PKG_CHECK_MODULES(), but does not set variables or print errors.
++#
++#
++# Similar to PKG_CHECK_MODULES, make sure that the first instance of
++# this or PKG_CHECK_MODULES is called, or make sure to call
++# PKG_CHECK_EXISTS manually
++# --------------------------------------------------------------
++AC_DEFUN([PKG_CHECK_EXISTS],
++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
++if test -n "$PKG_CONFIG" && \
++ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
++ m4_ifval([$2], [$2], [:])
++m4_ifvaln([$3], [else
++ $3])dnl
++fi])
++
++
++# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
++# ---------------------------------------------
++m4_define([_PKG_CONFIG],
++[if test -n "$PKG_CONFIG"; then
++ if test -n "$$1"; then
++ pkg_cv_[]$1="$$1"
++ else
++ PKG_CHECK_EXISTS([$3],
++ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
++ [pkg_failed=yes])
++ fi
++else
++ pkg_failed=untried
++fi[]dnl
++])# _PKG_CONFIG
++
++# _PKG_SHORT_ERRORS_SUPPORTED
++# -----------------------------
++AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
++ _pkg_short_errors_supported=yes
++else
++ _pkg_short_errors_supported=no
++fi[]dnl
++])# _PKG_SHORT_ERRORS_SUPPORTED
++
++
++# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
++# [ACTION-IF-NOT-FOUND])
++#
++#
++# Note that if there is a possibility the first call to
++# PKG_CHECK_MODULES might not happen, you should be sure to include an
++# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
++#
++#
++# --------------------------------------------------------------
++AC_DEFUN([PKG_CHECK_MODULES],
++[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
++AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
++AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
++
++pkg_failed=no
++AC_MSG_CHECKING([for $1])
++
++_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
++_PKG_CONFIG([$1][_LIBS], [libs], [$2])
++
++m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
++and $1[]_LIBS to avoid the need to call pkg-config.
++See the pkg-config man page for more details.])
++
++if test $pkg_failed = yes; then
++ _PKG_SHORT_ERRORS_SUPPORTED
++ if test $_pkg_short_errors_supported = yes; then
++ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
++ else
++ $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
++ fi
++ # Put the nasty error message in config.log where it belongs
++ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
++
++ ifelse([$4], , [AC_MSG_ERROR(dnl
++[Package requirements ($2) were not met:
++
++$$1_PKG_ERRORS
++
++Consider adjusting the PKG_CONFIG_PATH environment variable if you
++installed software in a non-standard prefix.
++
++_PKG_TEXT
++])],
++ [$4])
++elif test $pkg_failed = untried; then
++ ifelse([$4], , [AC_MSG_FAILURE(dnl
++[The pkg-config script could not be found or is too old. Make sure it
++is in your PATH or set the PKG_CONFIG environment variable to the full
++path to pkg-config.
++
++_PKG_TEXT
++
++To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.])],
++ [$4])
++else
++ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
++ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
++ AC_MSG_RESULT([yes])
++ ifelse([$3], , :, [$3])
++fi[]dnl
++])# PKG_CHECK_MODULES
++
++m4_include([acinclude.m4])
+--- distcc-2.18.3/configure.ac 2004-11-30 12:34:32.000000000 +0100
++++ distcc-2.18.3.lennart/configure.ac 2007-12-30 15:45:58.000000000 +0100
+@@ -386,6 +386,18 @@ AC_CHECK_MEMBER([struct sockaddr_storage
+ AC_DEFINE(HAVE_SOCKADDR_STORAGE, 1, [define if you have struct sockaddr_storage]),,
+ [#include <sys/socket.h>])
+
++dnl check for avahi
++PKG_CHECK_MODULES(AVAHI, [avahi-client >= 0.6.5],
++[AC_DEFINE(HAVE_AVAHI, 1, [defined if Avahi is available])
++CFLAGS="$CFLAGS $AVAHI_CFLAGS"
++LIBS="$LIBS $AVAHI_LIBS"
++ZEROCONF_DISTCC_OBJS="src/zeroconf.o src/gcc-id.o"
++ZEROCONF_DISTCCD_OBJS="src/zeroconf-reg.o src/gcc-id.o"],
++[ZEROCONF_DISTCC_OBJS=""
++ZEROCONF_DISTCCD_OBJS=""])
++AC_SUBST(ZEROCONF_DISTCC_OBJS)
++AC_SUBST(ZEROCONF_DISTCCD_OBJS)
++
+ dnl ##### Output
+ AC_SUBST(docdir)
+ AC_SUBST(CFLAGS)
+--- distcc-2.18.3/configure 2004-11-30 12:34:40.000000000 +0100
++++ distcc-2.18.3.lennart/configure 2007-12-30 16:20:44.000000000 +0100
+@@ -1,27 +1,56 @@
+ #! /bin/sh
+ # Guess values for system-dependent variables and create Makefiles.
+-# Generated by GNU Autoconf 2.59 for distcc 2.18.3.
++# Generated by GNU Autoconf 2.61 for distcc 2.18.3.
+ #
+ # Report bugs to <distcc@lists.samba.org>.
+ #
+-# Copyright (C) 2003 Free Software Foundation, Inc.
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
++# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ # This configure script is free software; the Free Software Foundation
+ # gives unlimited permission to copy, distribute and modify it.
+ ## --------------------- ##
+ ## M4sh Initialization. ##
+ ## --------------------- ##
+
+-# Be Bourne compatible
++# Be more Bourne compatible
++DUALCASE=1; export DUALCASE # for MKS sh
+ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+- set -o posix
++ setopt NO_GLOB_SUBST
++else
++ case `(set -o) 2>/dev/null` in
++ *posix*) set -o posix ;;
++esac
++
++fi
++
++
++
++
++# PATH needs CR
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
++
++# The user is always right.
++if test "${PATH_SEPARATOR+set}" != set; then
++ echo "#! /bin/sh" >conf$$.sh
++ echo "exit 0" >>conf$$.sh
++ chmod +x conf$$.sh
++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
++ PATH_SEPARATOR=';'
++ else
++ PATH_SEPARATOR=:
++ fi
++ rm -f conf$$.sh
+ fi
+-DUALCASE=1; export DUALCASE # for MKS sh
+
+ # Support unset when possible.
+ if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+@@ -31,8 +60,43 @@ else
+ fi
+
+
++# IFS
++# We need space, tab and new line, in precisely that order. Quoting is
++# there to prevent editors from complaining about space-tab.
++# (If _AS_PATH_WALK were called with IFS unset, it would disable word
++# splitting by setting IFS to empty value.)
++as_nl='
++'
++IFS=" "" $as_nl"
++
++# Find who we are. Look in the path if we contain no directory separator.
++case $0 in
++ *[\\/]* ) as_myself=$0 ;;
++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++done
++IFS=$as_save_IFS
++
++ ;;
++esac
++# We did not find ourselves, most probably we were run as `sh COMMAND'
++# in which case we are not to be found in the path.
++if test "x$as_myself" = x; then
++ as_myself=$0
++fi
++if test ! -f "$as_myself"; then
++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
++ { (exit 1); exit 1; }
++fi
++
+ # Work around bugs in pre-3.0 UWIN ksh.
+-$as_unset ENV MAIL MAILPATH
++for as_var in ENV MAIL MAILPATH
++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++done
+ PS1='$ '
+ PS2='> '
+ PS4='+ '
+@@ -46,18 +110,19 @@ do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+- $as_unset $as_var
++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ fi
+ done
+
+ # Required to use basename.
+-if expr a : '\(a\)' >/dev/null 2>&1; then
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+ else
+ as_expr=false
+ fi
+
+-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+ else
+ as_basename=false
+@@ -65,157 +130,388 @@ fi
+
+
+ # Name of the executable.
+-as_me=`$as_basename "$0" ||
++as_me=`$as_basename -- "$0" ||
+ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+- X"$0" : 'X\(/\)$' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X/"$0" |
+- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+- /^X\/\(\/\/\)$/{ s//\1/; q; }
+- /^X\/\(\/\).*/{ s//\1/; q; }
+- s/.*/./; q'`
++ sed '/^.*\/\([^/][^/]*\)\/*$/{
++ s//\1/
++ q
++ }
++ /^X\/\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\/\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
+
++# CDPATH.
++$as_unset CDPATH
+
+-# PATH needs CR, and LINENO needs CR and PATH.
+-# Avoid depending upon Character Ranges.
+-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+-as_cr_digits='0123456789'
+-as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+-# The user is always right.
+-if test "${PATH_SEPARATOR+set}" != set; then
+- echo "#! /bin/sh" >conf$$.sh
+- echo "exit 0" >>conf$$.sh
+- chmod +x conf$$.sh
+- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+- PATH_SEPARATOR=';'
+- else
+- PATH_SEPARATOR=:
+- fi
+- rm -f conf$$.sh
++if test "x$CONFIG_SHELL" = x; then
++ if (eval ":") 2>/dev/null; then
++ as_have_required=yes
++else
++ as_have_required=no
++fi
++
++ if test $as_have_required = yes && (eval ":
++(as_func_return () {
++ (exit \$1)
++}
++as_func_success () {
++ as_func_return 0
++}
++as_func_failure () {
++ as_func_return 1
++}
++as_func_ret_success () {
++ return 0
++}
++as_func_ret_failure () {
++ return 1
++}
++
++exitcode=0
++if as_func_success; then
++ :
++else
++ exitcode=1
++ echo as_func_success failed.
+ fi
+
++if as_func_failure; then
++ exitcode=1
++ echo as_func_failure succeeded.
++fi
+
+- as_lineno_1=$LINENO
+- as_lineno_2=$LINENO
+- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+- test "x$as_lineno_1" != "x$as_lineno_2" &&
+- test "x$as_lineno_3" = "x$as_lineno_2" || {
+- # Find who we are. Look in the path if we contain no path at all
+- # relative or not.
+- case $0 in
+- *[\\/]* ) as_myself=$0 ;;
+- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+-done
++if as_func_ret_success; then
++ :
++else
++ exitcode=1
++ echo as_func_ret_success failed.
++fi
+
+- ;;
+- esac
+- # We did not find ourselves, most probably we were run as `sh COMMAND'
+- # in which case we are not to be found in the path.
+- if test "x$as_myself" = x; then
+- as_myself=$0
+- fi
+- if test ! -f "$as_myself"; then
+- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+- { (exit 1); exit 1; }; }
+- fi
+- case $CONFIG_SHELL in
+- '')
++if as_func_ret_failure; then
++ exitcode=1
++ echo as_func_ret_failure succeeded.
++fi
++
++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
++ :
++else
++ exitcode=1
++ echo positional parameters were not saved.
++fi
++
++test \$exitcode = 0) || { (exit 1); exit 1; }
++
++(
++ as_lineno_1=\$LINENO
++ as_lineno_2=\$LINENO
++ test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
++ test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
++") 2> /dev/null; then
++ :
++else
++ as_candidate_shells=
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+ for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+- for as_base in sh bash ksh sh5; do
+- case $as_dir in
++ case $as_dir in
+ /*)
+- if ("$as_dir/$as_base" -c '
++ for as_base in sh bash ksh sh5; do
++ as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
++ done;;
++ esac
++done
++IFS=$as_save_IFS
++
++
++ for as_shell in $as_candidate_shells $SHELL; do
++ # Try only shells that exist, to save several forks.
++ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
++ { ("$as_shell") 2> /dev/null <<\_ASEOF
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++ emulate sh
++ NULLCMD=:
++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '${1+"$@"}'='"$@"'
++ setopt NO_GLOB_SUBST
++else
++ case `(set -o) 2>/dev/null` in
++ *posix*) set -o posix ;;
++esac
++
++fi
++
++
++:
++_ASEOF
++}; then
++ CONFIG_SHELL=$as_shell
++ as_have_required=yes
++ if { "$as_shell" 2> /dev/null <<\_ASEOF
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++ emulate sh
++ NULLCMD=:
++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '${1+"$@"}'='"$@"'
++ setopt NO_GLOB_SUBST
++else
++ case `(set -o) 2>/dev/null` in
++ *posix*) set -o posix ;;
++esac
++
++fi
++
++
++:
++(as_func_return () {
++ (exit $1)
++}
++as_func_success () {
++ as_func_return 0
++}
++as_func_failure () {
++ as_func_return 1
++}
++as_func_ret_success () {
++ return 0
++}
++as_func_ret_failure () {
++ return 1
++}
++
++exitcode=0
++if as_func_success; then
++ :
++else
++ exitcode=1
++ echo as_func_success failed.
++fi
++
++if as_func_failure; then
++ exitcode=1
++ echo as_func_failure succeeded.
++fi
++
++if as_func_ret_success; then
++ :
++else
++ exitcode=1
++ echo as_func_ret_success failed.
++fi
++
++if as_func_ret_failure; then
++ exitcode=1
++ echo as_func_ret_failure succeeded.
++fi
++
++if ( set x; as_func_ret_success y && test x = "$1" ); then
++ :
++else
++ exitcode=1
++ echo positional parameters were not saved.
++fi
++
++test $exitcode = 0) || { (exit 1); exit 1; }
++
++(
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+- CONFIG_SHELL=$as_dir/$as_base
+- export CONFIG_SHELL
+- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+- fi;;
+- esac
+- done
+-done
+-;;
+- esac
++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
++
++_ASEOF
++}; then
++ break
++fi
++
++fi
++
++ done
++
++ if test "x$CONFIG_SHELL" != x; then
++ for as_var in BASH_ENV ENV
++ do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++ done
++ export CONFIG_SHELL
++ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
++fi
++
++
++ if test $as_have_required = no; then
++ echo This script requires a shell more modern than all the
++ echo shells that I found on your system. Please install a
++ echo modern shell, or manually run the script under such a
++ echo shell if you do have one.
++ { (exit 1); exit 1; }
++fi
++
++
++fi
++
++fi
++
++
++
++(eval "as_func_return () {
++ (exit \$1)
++}
++as_func_success () {
++ as_func_return 0
++}
++as_func_failure () {
++ as_func_return 1
++}
++as_func_ret_success () {
++ return 0
++}
++as_func_ret_failure () {
++ return 1
++}
++
++exitcode=0
++if as_func_success; then
++ :
++else
++ exitcode=1
++ echo as_func_success failed.
++fi
++
++if as_func_failure; then
++ exitcode=1
++ echo as_func_failure succeeded.
++fi
++
++if as_func_ret_success; then
++ :
++else
++ exitcode=1
++ echo as_func_ret_success failed.
++fi
++
++if as_func_ret_failure; then
++ exitcode=1
++ echo as_func_ret_failure succeeded.
++fi
++
++if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
++ :
++else
++ exitcode=1
++ echo positional parameters were not saved.
++fi
++
++test \$exitcode = 0") || {
++ echo No shell found that supports shell functions.
++ echo Please tell autoconf@gnu.org about your system,
++ echo including any error possibly output before this
++ echo message
++}
++
++
++
++ as_lineno_1=$LINENO
++ as_lineno_2=$LINENO
++ test "x$as_lineno_1" != "x$as_lineno_2" &&
++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+- # line-number line before each line; the second 'sed' does the real
+- # work. The second script uses 'N' to pair each line-number line
+- # with the numbered line, and appends trailing '-' during
+- # substitution so that $LINENO is not a special case at line end.
++ # line-number line after each line using $LINENO; the second 'sed'
++ # does the real work. The second script uses 'N' to pair each
++ # line-number line with the line containing $LINENO, and appends
++ # trailing '-' during substitution so that $LINENO is not a special
++ # case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+- sed '=' <$as_myself |
++ # scripts with optimization help from Paolo Bonzini. Blame Lee
++ # E. McMahon (1931-1989) for sed's syntax. :-)
++ sed -n '
++ p
++ /[$]LINENO/=
++ ' <$as_myself |
+ sed '
++ s/[$]LINENO.*/&-/
++ t lineno
++ b
++ :lineno
+ N
+- s,$,-,
+- : loop
+- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
++ :loop
++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+- s,-$,,
+- s,^['$as_cr_digits']*\n,,
++ s/-\n.*//
+ ' >$as_me.lineno &&
+- chmod +x $as_me.lineno ||
++ chmod +x "$as_me.lineno" ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+- # original and so on. Autoconf is especially sensible to this).
+- . ./$as_me.lineno
++ # original and so on. Autoconf is especially sensitive to this).
++ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+ }
+
+
+-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+- *c*,-n*) ECHO_N= ECHO_C='
+-' ECHO_T=' ' ;;
+- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
++ as_dirname=dirname
++else
++ as_dirname=false
++fi
++
++ECHO_C= ECHO_N= ECHO_T=
++case `echo -n x` in
++-n*)
++ case `echo 'x\c'` in
++ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
++ *) ECHO_C='\c';;
++ esac;;
++*)
++ ECHO_N='-n';;
+ esac
+
+-if expr a : '\(a\)' >/dev/null 2>&1; then
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+ else
+ as_expr=false
+ fi
+
+ rm -f conf$$ conf$$.exe conf$$.file
++if test -d conf$$.dir; then
++ rm -f conf$$.dir/conf$$.file
++else
++ rm -f conf$$.dir
++ mkdir conf$$.dir
++fi
+ echo >conf$$.file
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+- # We could just check for DJGPP; but this test a) works b) is more generic
+- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+- if test -f conf$$.exe; then
+- # Don't use ln at all; we don't have any links
++ as_ln_s='ln -s'
++ # ... but there are two gotchas:
++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
++ # In both cases, we have to default to `cp -p'.
++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+- else
+- as_ln_s='ln -s'
+- fi
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+-rm -f conf$$ conf$$.exe conf$$.file
++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
++rmdir conf$$.dir 2>/dev/null
+
+ if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+@@ -224,7 +520,28 @@ else
+ as_mkdir_p=false
+ fi
+
+-as_executable_p="test -f"
++if test -x / >/dev/null 2>&1; then
++ as_test_x='test -x'
++else
++ if ls -dL / >/dev/null 2>&1; then
++ as_ls_L_option=L
++ else
++ as_ls_L_option=
++ fi
++ as_test_x='
++ eval sh -c '\''
++ if test -d "$1"; then
++ test -d "$1/.";
++ else
++ case $1 in
++ -*)set "./$1";;
++ esac;
++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
++ ???[sx]*):;;*)false;;esac;fi
++ '\'' sh
++ '
++fi
++as_executable_p=$as_test_x
+
+ # Sed expression to map a string onto a valid CPP name.
+ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+@@ -233,39 +550,27 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P
+ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+-# IFS
+-# We need space, tab and new line, in precisely that order.
+-as_nl='
+-'
+-IFS=" $as_nl"
+-
+-# CDPATH.
+-$as_unset CDPATH
+
++exec 7<&0 </dev/null 6>&1
+
+ # Name of the host.
+ # hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+ # so uname gets run too.
+ ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+-exec 6>&1
+-
+ #
+ # Initializations.
+ #
+ ac_default_prefix=/usr/local
++ac_clean_files=
+ ac_config_libobj_dir=.
++LIBOBJS=
+ cross_compiling=no
+ subdirs=
+ MFLAGS=
+ MAKEFLAGS=
+ SHELL=${CONFIG_SHELL-/bin/sh}
+
+-# Maximum number of lines to put in a shell here document.
+-# This variable seems obsolete. It should probably be removed, and
+-# only ac_max_sed_lines should be used.
+-: ${ac_max_here_lines=38}
+-
+ # Identity of this package.
+ PACKAGE_NAME='distcc'
+ PACKAGE_TARNAME='distcc'
+@@ -276,42 +581,127 @@ PACKAGE_BUGREPORT='distcc@lists.samba.or
+ # Factoring default headers for most tests.
+ ac_includes_default="\
+ #include <stdio.h>
+-#if HAVE_SYS_TYPES_H
++#ifdef HAVE_SYS_TYPES_H
+ # include <sys/types.h>
+ #endif
+-#if HAVE_SYS_STAT_H
++#ifdef HAVE_SYS_STAT_H
+ # include <sys/stat.h>
+ #endif
+-#if STDC_HEADERS
++#ifdef STDC_HEADERS
+ # include <stdlib.h>
+ # include <stddef.h>
+ #else
+-# if HAVE_STDLIB_H
++# ifdef HAVE_STDLIB_H
+ # include <stdlib.h>
+ # endif
+ #endif
+-#if HAVE_STRING_H
+-# if !STDC_HEADERS && HAVE_MEMORY_H
++#ifdef HAVE_STRING_H
++# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+ # include <memory.h>
+ # endif
+ # include <string.h>
+ #endif
+-#if HAVE_STRINGS_H
++#ifdef HAVE_STRINGS_H
+ # include <strings.h>
+ #endif
+-#if HAVE_INTTYPES_H
++#ifdef HAVE_INTTYPES_H
+ # include <inttypes.h>
+-#else
+-# if HAVE_STDINT_H
+-# include <stdint.h>
+-# endif
+ #endif
+-#if HAVE_UNISTD_H
++#ifdef HAVE_STDINT_H
++# include <stdint.h>
++#endif
++#ifdef HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif"
+
+-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os docdir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT GNOME_PACKAGES GNOME_CFLAGS GNOME_LIBS INSTALL_GNOME SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PYTHON CPP EGREP BUILD_POPT GNOME_BIN LIBOBJS LTLIBOBJS'
++ac_subst_vars='SHELL
++PATH_SEPARATOR
++PACKAGE_NAME
++PACKAGE_TARNAME
++PACKAGE_VERSION
++PACKAGE_STRING
++PACKAGE_BUGREPORT
++exec_prefix
++prefix
++program_transform_name
++bindir
++sbindir
++libexecdir
++datarootdir
++datadir
++sysconfdir
++sharedstatedir
++localstatedir
++includedir
++oldincludedir
++docdir
++infodir
++htmldir
++dvidir
++pdfdir
++psdir
++libdir
++localedir
++mandir
++DEFS
++ECHO_C
++ECHO_N
++ECHO_T
++LIBS
++build_alias
++host_alias
++target_alias
++build
++build_cpu
++build_vendor
++build_os
++host
++host_cpu
++host_vendor
++host_os
++CC
++CFLAGS
++LDFLAGS
++CPPFLAGS
++ac_ct_CC
++EXEEXT
++OBJEXT
++GNOME_PACKAGES
++GNOME_CFLAGS
++GNOME_LIBS
++INSTALL_GNOME
++SET_MAKE
++INSTALL_PROGRAM
++INSTALL_SCRIPT
++INSTALL_DATA
++PYTHON
++CPP
++GREP
++EGREP
++PKG_CONFIG
++AVAHI_CFLAGS
++AVAHI_LIBS
++ZEROCONF_DISTCC_OBJS
++ZEROCONF_DISTCCD_OBJS
++BUILD_POPT
++GNOME_BIN
++LIBOBJS
++LTLIBOBJS'
+ ac_subst_files=''
++ ac_precious_vars='build_alias
++host_alias
++target_alias
++CC
++CFLAGS
++LDFLAGS
++LIBS
++CPPFLAGS
++PYTHON
++CPP
++PKG_CONFIG
++AVAHI_CFLAGS
++AVAHI_LIBS'
++
+
+ # Initialize some variables set by options.
+ ac_init_help=
+@@ -338,34 +728,48 @@ x_libraries=NONE
+ # and all the variables that are supposed to be based on exec_prefix
+ # by default will actually change.
+ # Use braces instead of parens because sh, perl, etc. also accept them.
++# (The list follows the same order as the GNU Coding Standards.)
+ bindir='${exec_prefix}/bin'
+ sbindir='${exec_prefix}/sbin'
+ libexecdir='${exec_prefix}/libexec'
+-datadir='${prefix}/share'
++datarootdir='${prefix}/share'
++datadir='${datarootdir}'
+ sysconfdir='${prefix}/etc'
+ sharedstatedir='${prefix}/com'
+ localstatedir='${prefix}/var'
+-libdir='${exec_prefix}/lib'
+ includedir='${prefix}/include'
+ oldincludedir='/usr/include'
+-infodir='${prefix}/info'
+-mandir='${prefix}/man'
++docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
++infodir='${datarootdir}/info'
++htmldir='${docdir}'
++dvidir='${docdir}'
++pdfdir='${docdir}'
++psdir='${docdir}'
++libdir='${exec_prefix}/lib'
++localedir='${datarootdir}/locale'
++mandir='${datarootdir}/man'
+
+ ac_prev=
++ac_dashdash=
+ for ac_option
+ do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+- eval "$ac_prev=\$ac_option"
++ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+- ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
++ case $ac_option in
++ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
++ *) ac_optarg=yes ;;
++ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+- case $ac_option in
++ case $ac_dashdash$ac_option in
++ --)
++ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+@@ -387,33 +791,45 @@ do
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+- -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
++ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+- | --da=*)
++ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
++ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
++ | --dataroo | --dataro | --datar)
++ ac_prev=datarootdir ;;
++ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
++ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
++ datarootdir=$ac_optarg ;;
++
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+- eval "enable_$ac_feature=no" ;;
++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
++ eval enable_$ac_feature=no ;;
++
++ -docdir | --docdir | --docdi | --doc | --do)
++ ac_prev=docdir ;;
++ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
++ docdir=$ac_optarg ;;
++
++ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
++ ac_prev=dvidir ;;
++ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
++ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
++ expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+- ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+- case $ac_option in
+- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+- *) ac_optarg=yes ;;
+- esac
+- eval "enable_$ac_feature='$ac_optarg'" ;;
++ ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
++ eval enable_$ac_feature=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+@@ -440,6 +856,12 @@ do
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
++ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
++ ac_prev=htmldir ;;
++ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
++ | --ht=*)
++ htmldir=$ac_optarg ;;
++
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+@@ -464,13 +886,16 @@ do
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
++ -localedir | --localedir | --localedi | --localed | --locale)
++ ac_prev=localedir ;;
++ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
++ localedir=$ac_optarg ;;
++
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+- | --localstate | --localstat | --localsta | --localst \
+- | --locals | --local | --loca | --loc | --lo)
++ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+- | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
++ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+@@ -535,6 +960,16 @@ do
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
++ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
++ ac_prev=pdfdir ;;
++ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
++ pdfdir=$ac_optarg ;;
++
++ -psdir | --psdir | --psdi | --psd | --ps)
++ ac_prev=psdir ;;
++ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
++ psdir=$ac_optarg ;;
++
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+@@ -587,24 +1022,20 @@ do
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+- ac_package=`echo $ac_package| sed 's/-/_/g'`
+- case $ac_option in
+- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+- *) ac_optarg=yes ;;
+- esac
+- eval "with_$ac_package='$ac_optarg'" ;;
++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
++ eval with_$ac_package=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
++ expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+- ac_package=`echo $ac_package | sed 's/-/_/g'`
+- eval "with_$ac_package=no" ;;
++ ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
++ eval with_$ac_package=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+@@ -635,8 +1066,7 @@ Try \`$0 --help' for more information."
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+- eval "$ac_envvar='$ac_optarg'"
++ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+@@ -656,27 +1086,19 @@ if test -n "$ac_prev"; then
+ { (exit 1); exit 1; }; }
+ fi
+
+-# Be sure to have absolute paths.
+-for ac_var in exec_prefix prefix
++# Be sure to have absolute directory names.
++for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
++ datadir sysconfdir sharedstatedir localstatedir includedir \
++ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
++ libdir localedir mandir
+ do
+- eval ac_val=$`echo $ac_var`
++ eval ac_val=\$$ac_var
+ case $ac_val in
+- [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+- { (exit 1); exit 1; }; };;
+- esac
+-done
+-
+-# Be sure to have absolute paths.
+-for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+- localstatedir libdir includedir oldincludedir infodir mandir
+-do
+- eval ac_val=$`echo $ac_var`
+- case $ac_val in
+- [\\/$]* | ?:[\\/]* ) ;;
+- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+- { (exit 1); exit 1; }; };;
++ [\\/$]* | ?:[\\/]* ) continue;;
++ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
++ { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
++ { (exit 1); exit 1; }; }
+ done
+
+ # There might be people who depend on the old broken behavior: `$host'
+@@ -703,79 +1125,77 @@ test -n "$host_alias" && ac_tool_prefix=
+ test "$silent" = yes && exec 6>/dev/null
+
+
++ac_pwd=`pwd` && test -n "$ac_pwd" &&
++ac_ls_di=`ls -di .` &&
++ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
++ { echo "$as_me: error: Working directory cannot be determined" >&2
++ { (exit 1); exit 1; }; }
++test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
++ { echo "$as_me: error: pwd does not report name of working directory" >&2
++ { (exit 1); exit 1; }; }
++
++
+ # Find the source files, if location was not specified.
+ if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+- # Try the directory containing this script, then its parent.
+- ac_confdir=`(dirname "$0") 2>/dev/null ||
++ # Try the directory containing this script, then the parent directory.
++ ac_confdir=`$as_dirname -- "$0" ||
+ $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+- X"$0" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$0" |
+- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+- /^X\(\/\/\)$/{ s//\1/; q; }
+- /^X\(\/\).*/{ s//\1/; q; }
+- s/.*/./; q'`
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
+ srcdir=$ac_confdir
+- if test ! -r $srcdir/$ac_unique_file; then
++ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+ else
+ ac_srcdir_defaulted=no
+ fi
+-if test ! -r $srcdir/$ac_unique_file; then
+- if test "$ac_srcdir_defaulted" = yes; then
+- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
++if test ! -r "$srcdir/$ac_unique_file"; then
++ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
++ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+- else
+- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+- { (exit 1); exit 1; }; }
+- fi
+ fi
+-(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+- { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
++ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
++ac_abs_confdir=`(
++ cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+ { (exit 1); exit 1; }; }
+-srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+-ac_env_build_alias_set=${build_alias+set}
+-ac_env_build_alias_value=$build_alias
+-ac_cv_env_build_alias_set=${build_alias+set}
+-ac_cv_env_build_alias_value=$build_alias
+-ac_env_host_alias_set=${host_alias+set}
+-ac_env_host_alias_value=$host_alias
+-ac_cv_env_host_alias_set=${host_alias+set}
+-ac_cv_env_host_alias_value=$host_alias
+-ac_env_target_alias_set=${target_alias+set}
+-ac_env_target_alias_value=$target_alias
+-ac_cv_env_target_alias_set=${target_alias+set}
+-ac_cv_env_target_alias_value=$target_alias
+-ac_env_CC_set=${CC+set}
+-ac_env_CC_value=$CC
+-ac_cv_env_CC_set=${CC+set}
+-ac_cv_env_CC_value=$CC
+-ac_env_CFLAGS_set=${CFLAGS+set}
+-ac_env_CFLAGS_value=$CFLAGS
+-ac_cv_env_CFLAGS_set=${CFLAGS+set}
+-ac_cv_env_CFLAGS_value=$CFLAGS
+-ac_env_LDFLAGS_set=${LDFLAGS+set}
+-ac_env_LDFLAGS_value=$LDFLAGS
+-ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+-ac_cv_env_LDFLAGS_value=$LDFLAGS
+-ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+-ac_env_CPPFLAGS_value=$CPPFLAGS
+-ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+-ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+-ac_env_PYTHON_set=${PYTHON+set}
+-ac_env_PYTHON_value=$PYTHON
+-ac_cv_env_PYTHON_set=${PYTHON+set}
+-ac_cv_env_PYTHON_value=$PYTHON
+-ac_env_CPP_set=${CPP+set}
+-ac_env_CPP_value=$CPP
+-ac_cv_env_CPP_set=${CPP+set}
+-ac_cv_env_CPP_value=$CPP
+-
++ pwd)`
++# When building in place, set srcdir=.
++if test "$ac_abs_confdir" = "$ac_pwd"; then
++ srcdir=.
++fi
++# Remove unnecessary trailing slashes from srcdir.
++# Double slashes in file names in object file debugging info
++# mess up M-x gdb in Emacs.
++case $srcdir in
++*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
++esac
++for ac_var in $ac_precious_vars; do
++ eval ac_env_${ac_var}_set=\${${ac_var}+set}
++ eval ac_env_${ac_var}_value=\$${ac_var}
++ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
++ eval ac_cv_env_${ac_var}_value=\$${ac_var}
++done
++
+ #
+ # Report the --help message.
+ #
+@@ -803,9 +1223,6 @@ Configuration:
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+-_ACEOF
+-
+- cat <<_ACEOF
+ Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+@@ -823,15 +1240,22 @@ Fine tuning of the installation director
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+- --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+- --infodir=DIR info documentation [PREFIX/info]
+- --mandir=DIR man documentation [PREFIX/man]
++ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
++ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
++ --infodir=DIR info documentation [DATAROOTDIR/info]
++ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
++ --mandir=DIR man documentation [DATAROOTDIR/man]
++ --docdir=DIR documentation root [DATAROOTDIR/doc/distcc]
++ --htmldir=DIR html documentation [DOCDIR]
++ --dvidir=DIR dvi documentation [DOCDIR]
++ --pdfdir=DIR pdf documentation [DOCDIR]
++ --psdir=DIR ps documentation [DOCDIR]
+ _ACEOF
+
+ cat <<\_ACEOF
+@@ -868,130 +1292,101 @@ Some influential environment variables:
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+- CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+- headers in a nonstandard directory <include dir>
++ LIBS libraries to pass to the linker, e.g. -l<library>
++ CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
++ you have headers in a nonstandard directory <include dir>
+ PYTHON Python interpreter to use for running tests
+ CPP C preprocessor
++ PKG_CONFIG path to pkg-config utility
++ AVAHI_CFLAGS
++ C compiler flags for AVAHI, overriding pkg-config
++ AVAHI_LIBS linker flags for AVAHI, overriding pkg-config
+
+ Use these variables to override the choices made by `configure' or to help
+ it to find libraries and programs with nonstandard names/locations.
+
+ Report bugs to <distcc@lists.samba.org>.
+ _ACEOF
++ac_status=$?
+ fi
+
+ if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+- ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+- test -d $ac_dir || continue
++ test -d "$ac_dir" || continue
+ ac_builddir=.
+
+-if test "$ac_dir" != .; then
++case "$ac_dir" in
++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
++*)
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+- # A "../" for each directory in $ac_dir_suffix.
+- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+-else
+- ac_dir_suffix= ac_top_builddir=
+-fi
++ # A ".." for each directory in $ac_dir_suffix.
++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
++ case $ac_top_builddir_sub in
++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
++ esac ;;
++esac
++ac_abs_top_builddir=$ac_pwd
++ac_abs_builddir=$ac_pwd$ac_dir_suffix
++# for backward compatibility:
++ac_top_builddir=$ac_top_build_prefix
+
+ case $srcdir in
+- .) # No --srcdir option. We are building in place.
++ .) # We are building in place.
+ ac_srcdir=.
+- if test -z "$ac_top_builddir"; then
+- ac_top_srcdir=.
+- else
+- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+- fi ;;
+- [\\/]* | ?:[\\/]* ) # Absolute path.
++ ac_top_srcdir=$ac_top_builddir_sub
++ ac_abs_top_srcdir=$ac_pwd ;;
++ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+- ac_top_srcdir=$srcdir ;;
+- *) # Relative path.
+- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+- ac_top_srcdir=$ac_top_builddir$srcdir ;;
+-esac
+-
+-# Do not use `cd foo && pwd` to compute absolute paths, because
+-# the directories may not exist.
+-case `pwd` in
+-.) ac_abs_builddir="$ac_dir";;
+-*)
+- case "$ac_dir" in
+- .) ac_abs_builddir=`pwd`;;
+- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+- *) ac_abs_builddir=`pwd`/"$ac_dir";;
+- esac;;
+-esac
+-case $ac_abs_builddir in
+-.) ac_abs_top_builddir=${ac_top_builddir}.;;
+-*)
+- case ${ac_top_builddir}. in
+- .) ac_abs_top_builddir=$ac_abs_builddir;;
+- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+- esac;;
+-esac
+-case $ac_abs_builddir in
+-.) ac_abs_srcdir=$ac_srcdir;;
+-*)
+- case $ac_srcdir in
+- .) ac_abs_srcdir=$ac_abs_builddir;;
+- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+- esac;;
+-esac
+-case $ac_abs_builddir in
+-.) ac_abs_top_srcdir=$ac_top_srcdir;;
+-*)
+- case $ac_top_srcdir in
+- .) ac_abs_top_srcdir=$ac_abs_builddir;;
+- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+- esac;;
++ ac_top_srcdir=$srcdir
++ ac_abs_top_srcdir=$srcdir ;;
++ *) # Relative name.
++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
++ ac_top_srcdir=$ac_top_build_prefix$srcdir
++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+ esac
++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+- cd $ac_dir
+- # Check for guested configure; otherwise get Cygnus style configure.
+- if test -f $ac_srcdir/configure.gnu; then
+- echo
+- $SHELL $ac_srcdir/configure.gnu --help=recursive
+- elif test -f $ac_srcdir/configure; then
+- echo
+- $SHELL $ac_srcdir/configure --help=recursive
+- elif test -f $ac_srcdir/configure.ac ||
+- test -f $ac_srcdir/configure.in; then
+- echo
+- $ac_configure --help
++ cd "$ac_dir" || { ac_status=$?; continue; }
++ # Check for guested configure.
++ if test -f "$ac_srcdir/configure.gnu"; then
++ echo &&
++ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
++ elif test -f "$ac_srcdir/configure"; then
++ echo &&
++ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+- fi
+- cd "$ac_popdir"
++ fi || ac_status=$?
++ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+ fi
+
+-test -n "$ac_init_help" && exit 0
++test -n "$ac_init_help" && exit $ac_status
+ if $ac_init_version; then
+ cat <<\_ACEOF
+ distcc configure 2.18.3
+-generated by GNU Autoconf 2.59
++generated by GNU Autoconf 2.61
+
+-Copyright (C) 2003 Free Software Foundation, Inc.
++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
++2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ This configure script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it.
+ _ACEOF
+- exit 0
++ exit
+ fi
+-exec 5>config.log
+-cat >&5 <<_ACEOF
++cat >config.log <<_ACEOF
+ This file contains any messages produced by compilers while
+ running configure, to aid debugging if configure makes a mistake.
+
+ It was created by distcc $as_me 2.18.3, which was
+-generated by GNU Autoconf 2.59. Invocation command line was
++generated by GNU Autoconf 2.61. Invocation command line was
+
+ $ $0 $@
+
+ _ACEOF
++exec 5>>config.log
+ {
+ cat <<_ASUNAME
+ ## --------- ##
+@@ -1010,7 +1405,7 @@ uname -v = `(uname -v) 2>/dev/null || ec
+ /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+ /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+ /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+-hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
++/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+ /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+ /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+ /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+@@ -1024,6 +1419,7 @@ do
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+ done
++IFS=$as_save_IFS
+
+ } >&5
+
+@@ -1045,7 +1441,6 @@ _ACEOF
+ ac_configure_args=
+ ac_configure_args0=
+ ac_configure_args1=
+-ac_sep=
+ ac_must_keep_next=false
+ for ac_pass in 1 2
+ do
+@@ -1056,7 +1451,7 @@ do
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
++ *\'*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+@@ -1078,9 +1473,7 @@ do
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+- # Get rid of the leading space.
+- ac_sep=" "
++ ac_configure_args="$ac_configure_args '$ac_arg'"
+ ;;
+ esac
+ done
+@@ -1091,8 +1484,8 @@ $as_unset ac_configure_args1 || test "${
+ # When interrupted or exit'd, cleanup temporary files, and complete
+ # config.log. We remove comments because anyway the quotes in there
+ # would cause problems or look ugly.
+-# WARNING: Be sure not to use single quotes in there, as some shells,
+-# such as our DU 5.0 friend, will then `close' the trap.
++# WARNING: Use '\'' to represent an apostrophe within the trap.
++# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+ trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+@@ -1105,20 +1498,34 @@ trap 'exit_status=$?
+ _ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+-{
++(
++ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
++ eval ac_val=\$$ac_var
++ case $ac_val in #(
++ *${as_nl}*)
++ case $ac_var in #(
++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
++ esac
++ case $ac_var in #(
++ _ | IFS | as_nl) ;; #(
++ *) $as_unset $ac_var ;;
++ esac ;;
++ esac
++ done
+ (set) 2>&1 |
+- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+- *ac_space=\ *)
++ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
++ *${as_nl}ac_space=\ *)
+ sed -n \
+- "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+- ;;
++ "s/'\''/'\''\\\\'\'''\''/g;
++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
++ ;; #(
+ *)
+- sed -n \
+- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+- esac;
+-}
++ esac |
++ sort
++)
+ echo
+
+ cat <<\_ASBOX
+@@ -1129,22 +1536,28 @@ _ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+- eval ac_val=$`echo $ac_var`
+- echo "$ac_var='"'"'$ac_val'"'"'"
++ eval ac_val=\$$ac_var
++ case $ac_val in
++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
++ esac
++ echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+-## ------------- ##
+-## Output files. ##
+-## ------------- ##
++## ------------------- ##
++## File substitutions. ##
++## ------------------- ##
+ _ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+- eval ac_val=$`echo $ac_var`
+- echo "$ac_var='"'"'$ac_val'"'"'"
++ eval ac_val=\$$ac_var
++ case $ac_val in
++ *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
++ esac
++ echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+@@ -1156,26 +1569,24 @@ _ASBOX
+ ## ----------- ##
+ _ASBOX
+ echo
+- sed "/^$/d" confdefs.h | sort
++ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+- rm -f core *.core &&
+- rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
++ rm -f core *.core core.conftest.* &&
++ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+- ' 0
++' 0
+ for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+ done
+ ac_signal=0
+
+ # confdefs.h avoids OS command line length limits that DEFS can exceed.
+-rm -rf conftest* confdefs.h
+-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+-echo >confdefs.h
++rm -f -r conftest* confdefs.h
+
+ # Predefined preprocessor variables.
+
+@@ -1206,14 +1617,17 @@ _ACEOF
+
+ # Let the site file select an alternate cache file if it wants to.
+ # Prefer explicitly selected file to automatically selected ones.
+-if test -z "$CONFIG_SITE"; then
+- if test "x$prefix" != xNONE; then
+- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+- else
+- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+- fi
++if test -n "$CONFIG_SITE"; then
++ set x "$CONFIG_SITE"
++elif test "x$prefix" != xNONE; then
++ set x "$prefix/share/config.site" "$prefix/etc/config.site"
++else
++ set x "$ac_default_prefix/share/config.site" \
++ "$ac_default_prefix/etc/config.site"
+ fi
+-for ac_site_file in $CONFIG_SITE; do
++shift
++for ac_site_file
++do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+ echo "$as_me: loading site script $ac_site_file" >&6;}
+@@ -1229,8 +1643,8 @@ if test -r "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+ echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+- [\\/]* | ?:[\\/]* ) . $cache_file;;
+- *) . ./$cache_file;;
++ [\\/]* | ?:[\\/]* ) . "$cache_file";;
++ *) . "./$cache_file";;
+ esac
+ fi
+ else
+@@ -1242,12 +1656,11 @@ fi
+ # Check that the precious variables saved in the cache have kept the same
+ # value.
+ ac_cache_corrupted=false
+-for ac_var in `(set) 2>&1 |
+- sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
++for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+- eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+- eval ac_new_val="\$ac_env_${ac_var}_value"
++ eval ac_old_val=\$ac_cv_env_${ac_var}_value
++ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+@@ -1272,8 +1685,7 @@ echo "$as_me: current value: $ac_new_v
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
++ *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+@@ -1290,12 +1702,6 @@ echo "$as_me: error: run \`make distclea
+ { (exit 1); exit 1; }; }
+ fi
+
+-ac_ext=c
+-ac_cpp='$CPP $CPPFLAGS'
+-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+-
+
+
+
+@@ -1320,87 +1726,127 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+- ac_config_headers="$ac_config_headers src/config.h"
++ac_config_headers="$ac_config_headers src/config.h"
+
+ ac_aux_dir=
+-for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+- if test -f $ac_dir/install-sh; then
++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
++ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+- elif test -f $ac_dir/install.sh; then
++ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+- elif test -f $ac_dir/shtool; then
++ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+ done
+ if test -z "$ac_aux_dir"; then
+- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+-echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
++ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
++echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+-ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+-ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+-ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
++
++# These three variables are undocumented and unsupported,
++# and are intended to be withdrawn in a future Autoconf release.
++# They can cause serious problems if a builder's source tree is in a directory
++# whose full name contains unusual characters.
++ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
++ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
++ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
++
+
+ # Make sure we can run config.sub.
+-$ac_config_sub sun4 >/dev/null 2>&1 ||
+- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+-echo "$as_me: error: cannot run $ac_config_sub" >&2;}
++$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
++ { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
++echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+-echo "$as_me:$LINENO: checking build system type" >&5
+-echo $ECHO_N "checking build system type... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking build system type" >&5
++echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
+ if test "${ac_cv_build+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+- ac_cv_build_alias=$build_alias
+-test -z "$ac_cv_build_alias" &&
+- ac_cv_build_alias=`$ac_config_guess`
+-test -z "$ac_cv_build_alias" &&
++ ac_build_alias=$build_alias
++test "x$ac_build_alias" = x &&
++ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
++test "x$ac_build_alias" = x &&
+ { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+ echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+-echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
++ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+-echo "${ECHO_T}$ac_cv_build" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
++echo "${ECHO_T}$ac_cv_build" >&6; }
++case $ac_cv_build in
++*-*-*) ;;
++*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
++echo "$as_me: error: invalid value of canonical build" >&2;}
++ { (exit 1); exit 1; }; };;
++esac
+ build=$ac_cv_build
+-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
++ac_save_IFS=$IFS; IFS='-'
++set x $ac_cv_build
++shift
++build_cpu=$1
++build_vendor=$2
++shift; shift
++# Remember, the first character of IFS is used to create $*,
++# except with old shells:
++build_os=$*
++IFS=$ac_save_IFS
++case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+-echo "$as_me:$LINENO: checking host system type" >&5
+-echo $ECHO_N "checking host system type... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking host system type" >&5
++echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
+ if test "${ac_cv_host+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+- ac_cv_host_alias=$host_alias
+-test -z "$ac_cv_host_alias" &&
+- ac_cv_host_alias=$ac_cv_build_alias
+-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+-echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
++ if test "x$host_alias" = x; then
++ ac_cv_host=$ac_cv_build
++else
++ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
++ { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
++echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
++fi
+
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+-echo "${ECHO_T}$ac_cv_host" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
++echo "${ECHO_T}$ac_cv_host" >&6; }
++case $ac_cv_host in
++*-*-*) ;;
++*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
++echo "$as_me: error: invalid value of canonical host" >&2;}
++ { (exit 1); exit 1; }; };;
++esac
+ host=$ac_cv_host
+-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
++ac_save_IFS=$IFS; IFS='-'
++set x $ac_cv_host
++shift
++host_cpu=$1
++host_vendor=$2
++shift; shift
++# Remember, the first character of IFS is used to create $*,
++# except with old shells:
++host_os=$*
++IFS=$ac_save_IFS
++case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+@@ -1417,11 +1863,11 @@ host_os=`echo $ac_cv_host | sed 's/^\([^
+
+
+
+-# Check whether --with-docdir or --without-docdir was given.
++# Check whether --with-docdir was given.
+ if test "${with_docdir+set}" = set; then
+- withval="$with_docdir"
+- with_docdir=$withval
+-fi;
++ withval=$with_docdir; with_docdir=$withval
++fi
++
+ if test "x$with_docdir" = "x" ; then
+ docdir='${datadir}/doc/distcc'
+ else
+@@ -1440,8 +1886,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gcc; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -1454,32 +1900,34 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- echo "$as_me:$LINENO: result: $CC" >&5
+-echo "${ECHO_T}$CC" >&6
++ { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
++
+ fi
+ if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -1492,36 +1940,51 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+-echo "${ECHO_T}$ac_ct_CC" >&6
++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
++echo "${ECHO_T}$ac_ct_CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
+- CC=$ac_ct_CC
++ if test "x$ac_ct_CC" = x; then
++ CC=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet. If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet. If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++ CC=$ac_ct_CC
++ fi
+ else
+ CC="$ac_cv_prog_CC"
+ fi
+
+ if test -z "$CC"; then
+- if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}cc; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -1534,74 +1997,34 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- echo "$as_me:$LINENO: result: $CC" >&5
+-echo "${ECHO_T}$CC" >&6
+-else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
+-fi
+-
+-fi
+-if test -z "$ac_cv_prog_CC"; then
+- ac_ct_CC=$CC
+- # Extract the first word of "cc", so it can be a program name with args.
+-set dummy cc; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+- echo $ECHO_N "(cached) $ECHO_C" >&6
+-else
+- if test -n "$ac_ct_CC"; then
+- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+-else
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_CC="cc"
+- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+- break 2
+- fi
+-done
+-done
+-
+-fi
+-fi
+-ac_ct_CC=$ac_cv_prog_ac_ct_CC
+-if test -n "$ac_ct_CC"; then
+- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+-echo "${ECHO_T}$ac_ct_CC" >&6
++ { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
+- CC=$ac_ct_CC
+-else
+- CC="$ac_cv_prog_CC"
+-fi
+
++ fi
+ fi
+ if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -1615,7 +2038,7 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+@@ -1626,6 +2049,7 @@ do
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+@@ -1643,22 +2067,23 @@ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- echo "$as_me:$LINENO: result: $CC" >&5
+-echo "${ECHO_T}$CC" >&6
++ { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
++
+ fi
+ if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+- for ac_prog in cl
++ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -1671,36 +2096,38 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- echo "$as_me:$LINENO: result: $CC" >&5
+-echo "${ECHO_T}$CC" >&6
++ { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
++
+ test -n "$CC" && break
+ done
+ fi
+ if test -z "$CC"; then
+ ac_ct_CC=$CC
+- for ac_prog in cl
++ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -1713,29 +2140,45 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+-echo "${ECHO_T}$ac_ct_CC" >&6
++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
++echo "${ECHO_T}$ac_ct_CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
++
+ test -n "$ac_ct_CC" && break
+ done
+
+- CC=$ac_ct_CC
++ if test "x$ac_ct_CC" = x; then
++ CC=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet. If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet. If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++ CC=$ac_ct_CC
++ fi
+ fi
+
+ fi
+@@ -1748,21 +2191,35 @@ See \`config.log' for more details." >&2
+ { (exit 1); exit 1; }; }
+
+ # Provide some information about the compiler.
+-echo "$as_me:$LINENO:" \
+- "checking for C compiler version" >&5
++echo "$as_me:$LINENO: checking for C compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+- (eval $ac_compiler --version </dev/null >&5) 2>&5
++{ (ac_try="$ac_compiler --version >&5"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compiler --version >&5") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+- (eval $ac_compiler -v </dev/null >&5) 2>&5
++{ (ac_try="$ac_compiler -v >&5"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compiler -v >&5") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+- (eval $ac_compiler -V </dev/null >&5) 2>&5
++{ (ac_try="$ac_compiler -V >&5"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compiler -V >&5") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+@@ -1787,47 +2244,77 @@ ac_clean_files="$ac_clean_files a.out a.
+ # Try to create an executable without -o first, disregard a.out.
+ # It will help us diagnose broken compilers, and finding out an intuition
+ # of exeext.
+-echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
++echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
+ ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+-if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+- (eval $ac_link_default) 2>&5
++#
++# List of possible output files, starting from the most likely.
++# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
++# only as a last resort. b.out is created by i960 compilers.
++ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
++#
++# The IRIX 6 linker writes into existing files which may not be
++# executable, retaining their permissions. Remove them first so a
++# subsequent execution test works.
++ac_rmfiles=
++for ac_file in $ac_files
++do
++ case $ac_file in
++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
++ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
++ esac
++done
++rm -f $ac_rmfiles
++
++if { (ac_try="$ac_link_default"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+- # Find the output, starting from the most likely. This scheme is
+-# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+-# resort.
+-
+-# Be careful to initialize this variable, since it used to be cached.
+-# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+-ac_cv_exeext=
+-# b.out is created by i960 compilers.
+-for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
++ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
++# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
++# in a Makefile. We should not override ac_cv_exeext if it was cached,
++# so that the user can short-circuit this test for compilers unknown to
++# Autoconf.
++for ac_file in $ac_files ''
+ do
+ test -f "$ac_file" || continue
+ case $ac_file in
+- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+- ;;
+- conftest.$ac_ext )
+- # This is the source file.
++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+- # FIXME: I believe we export ac_cv_exeext for Libtool,
+- # but it would be cool to find out if it's true. Does anybody
+- # maintain Libtool? --akim.
+- export ac_cv_exeext
++ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
++ then :; else
++ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
++ fi
++ # We set ac_cv_exeext here because the later test for it is not
++ # safe: cross compilers may not add the suffix if given an `-o'
++ # argument, so we may need to know it at that point already.
++ # Even if this section looks crufty: it has the advantage of
++ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+ done
++test "$ac_cv_exeext" = no && ac_cv_exeext=
++
+ else
++ ac_file=''
++fi
++
++{ echo "$as_me:$LINENO: result: $ac_file" >&5
++echo "${ECHO_T}$ac_file" >&6; }
++if test -z "$ac_file"; then
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+@@ -1839,19 +2326,21 @@ See \`config.log' for more details." >&2
+ fi
+
+ ac_exeext=$ac_cv_exeext
+-echo "$as_me:$LINENO: result: $ac_file" >&5
+-echo "${ECHO_T}$ac_file" >&6
+
+-# Check the compiler produces executables we can run. If not, either
++# Check that the compiler produces executables we can run. If not, either
+ # the compiler is broken, or we cross compile.
+-echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
++echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
+ # FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+ # If not cross compiling, check that we can run a simple program.
+ if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
++ { (case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+@@ -1870,22 +2359,27 @@ See \`config.log' for more details." >&2
+ fi
+ fi
+ fi
+-echo "$as_me:$LINENO: result: yes" >&5
+-echo "${ECHO_T}yes" >&6
++{ echo "$as_me:$LINENO: result: yes" >&5
++echo "${ECHO_T}yes" >&6; }
+
+ rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ ac_clean_files=$ac_clean_files_save
+-# Check the compiler produces executables we can run. If not, either
++# Check that the compiler produces executables we can run. If not, either
+ # the compiler is broken, or we cross compile.
+-echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+-echo "$as_me:$LINENO: result: $cross_compiling" >&5
+-echo "${ECHO_T}$cross_compiling" >&6
+-
+-echo "$as_me:$LINENO: checking for suffix of executables" >&5
+-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
++echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
++{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
++echo "${ECHO_T}$cross_compiling" >&6; }
++
++{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
++echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+@@ -1896,9 +2390,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_l
+ for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+- export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+@@ -1912,14 +2405,14 @@ See \`config.log' for more details." >&2
+ fi
+
+ rm -f conftest$ac_cv_exeext
+-echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+-echo "${ECHO_T}$ac_cv_exeext" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
++echo "${ECHO_T}$ac_cv_exeext" >&6; }
+
+ rm -f conftest.$ac_ext
+ EXEEXT=$ac_cv_exeext
+ ac_exeext=$EXEEXT
+-echo "$as_me:$LINENO: checking for suffix of object files" >&5
+-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
++echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
+ if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -1939,14 +2432,20 @@ main ()
+ }
+ _ACEOF
+ rm -f conftest.o conftest.obj
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>&5
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
++ for ac_file in conftest.o conftest.obj conftest.*; do
++ test -f "$ac_file" || continue;
+ case $ac_file in
+- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+@@ -1964,12 +2463,12 @@ fi
+
+ rm -f conftest.$ac_cv_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+-echo "${ECHO_T}$ac_cv_objext" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
++echo "${ECHO_T}$ac_cv_objext" >&6; }
+ OBJEXT=$ac_cv_objext
+ ac_objext=$OBJEXT
+-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+ if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -1992,49 +2491,49 @@ main ()
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_compiler_gnu=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_compiler_gnu=no
++ ac_compiler_gnu=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
+ GCC=`test $ac_compiler_gnu = yes && echo yes`
+ ac_test_CFLAGS=${CFLAGS+set}
+ ac_save_CFLAGS=$CFLAGS
+-CFLAGS="-g"
+-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+- cat >conftest.$ac_ext <<_ACEOF
++ ac_save_c_werror_flag=$ac_c_werror_flag
++ ac_c_werror_flag=yes
++ ac_cv_prog_cc_g=no
++ CFLAGS="-g"
++ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -2050,37 +2549,118 @@ main ()
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_cv_prog_cc_g=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ CFLAGS=""
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ :
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_c_werror_flag=$ac_save_c_werror_flag
++ CFLAGS="-g"
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_g=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_prog_cc_g=no
++
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ ac_c_werror_flag=$ac_save_c_werror_flag
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+ elif test $ac_cv_prog_cc_g = yes; then
+@@ -2096,12 +2676,12 @@ else
+ CFLAGS=
+ fi
+ fi
+-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+-if test "${ac_cv_prog_cc_stdc+set}" = set; then
++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
++if test "${ac_cv_prog_cc_c89+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+- ac_cv_prog_cc_stdc=no
++ ac_cv_prog_cc_c89=no
+ ac_save_CC=$CC
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -2135,12 +2715,17 @@ static char *f (char * (*g) (char **, in
+ /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+- as 'x'. The following induces an error, until -std1 is added to get
++ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+- that's true only with -std1. */
++ that's true only with -std. */
+ int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
++ inside strings and character constants. */
++#define FOO(x) 'x'
++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
++
+ int test (int i, double x);
+ struct s1 {int (*f) (int a);};
+ struct s2 {int (*f) (double a);};
+@@ -2155,271 +2740,125 @@ return f (e, argv, 0) != argv[0] || f
+ return 0;
+ }
+ _ACEOF
+-# Don't try gcc -ansi; that turns off useful extensions and
+-# breaks some systems' header files.
+-# AIX -qlanglvl=ansi
+-# Ultrix and OSF/1 -std1
+-# HP-UX 10.20 and later -Ae
+-# HP-UX older versions -Aa -D_HPUX_SOURCE
+-# SVR4 -Xc -D__EXTENSIONS__
+-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+ do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_prog_cc_stdc=$ac_arg
+-break
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_cv_prog_cc_c89=$ac_arg
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
++
+ fi
+-rm -f conftest.err conftest.$ac_objext
++
++rm -f core conftest.err conftest.$ac_objext
++ test "x$ac_cv_prog_cc_c89" != "xno" && break
+ done
+-rm -f conftest.$ac_ext conftest.$ac_objext
++rm -f conftest.$ac_ext
+ CC=$ac_save_CC
+
+ fi
+-
+-case "x$ac_cv_prog_cc_stdc" in
+- x|xno)
+- echo "$as_me:$LINENO: result: none needed" >&5
+-echo "${ECHO_T}none needed" >&6 ;;
++# AC_CACHE_VAL
++case "x$ac_cv_prog_cc_c89" in
++ x)
++ { echo "$as_me:$LINENO: result: none needed" >&5
++echo "${ECHO_T}none needed" >&6; } ;;
++ xno)
++ { echo "$as_me:$LINENO: result: unsupported" >&5
++echo "${ECHO_T}unsupported" >&6; } ;;
+ *)
+- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+- CC="$CC $ac_cv_prog_cc_stdc" ;;
++ CC="$CC $ac_cv_prog_cc_c89"
++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+ esac
+
+-# Some people use a C++ compiler to compile C. Since we use `exit',
+-# in C++ we need to declare it. In case someone uses the same compiler
+-# for both compiling C and C++ we need to have the C++ compiler decide
+-# the declaration of exit, since it's the most demanding environment.
+-cat >conftest.$ac_ext <<_ACEOF
+-#ifndef __cplusplus
+- choke me
+-#endif
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- for ac_declaration in \
+- '' \
+- 'extern "C" void std::exit (int) throw (); using std::exit;' \
+- 'extern "C" void std::exit (int); using std::exit;' \
+- 'extern "C" void exit (int) throw ();' \
+- 'extern "C" void exit (int);' \
+- 'void exit (int);'
+-do
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++{ echo "$as_me:$LINENO: checking for socklen_t" >&5
++echo $ECHO_N "checking for socklen_t... $ECHO_C" >&6; }
++if test "${ac_cv_type_socklen_t+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+-$ac_declaration
+-#include <stdlib.h>
++#include <sys/types.h>
++#include <sys/socket.h>
++
++typedef socklen_t ac__type_new_;
+ int
+ main ()
+ {
+-exit (42);
++if ((ac__type_new_ *) 0)
++ return 0;
++if (sizeof (ac__type_new_))
++ return 0;
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- :
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_cv_type_socklen_t=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-continue
++ ac_cv_type_socklen_t=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_declaration
+-int
+-main ()
+-{
+-exit (42);
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- break
+-else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+-done
+-rm -f conftest*
+-if test -n "$ac_declaration"; then
+- echo '#ifdef __cplusplus' >>confdefs.h
+- echo $ac_declaration >>confdefs.h
+- echo '#endif' >>confdefs.h
+-fi
+-
+-else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+-ac_ext=c
+-ac_cpp='$CPP $CPPFLAGS'
+-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+-
+-
+-echo "$as_me:$LINENO: checking for socklen_t" >&5
+-echo $ECHO_N "checking for socklen_t... $ECHO_C" >&6
+-if test "${ac_cv_type_socklen_t+set}" = set; then
+- echo $ECHO_N "(cached) $ECHO_C" >&6
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <sys/types.h>
+-#include <sys/socket.h>
+-
+-int
+-main ()
+-{
+-if ((socklen_t *) 0)
+- return 0;
+-if (sizeof (socklen_t))
+- return 0;
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_type_socklen_t=yes
+-else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_type_socklen_t=no
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+-fi
+-echo "$as_me:$LINENO: result: $ac_cv_type_socklen_t" >&5
+-echo "${ECHO_T}$ac_cv_type_socklen_t" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_type_socklen_t" >&5
++echo "${ECHO_T}$ac_cv_type_socklen_t" >&6; }
+ if test $ac_cv_type_socklen_t = yes; then
+ :
+ else
+
+- echo "$as_me:$LINENO: checking for socklen_t equivalent" >&5
+-echo $ECHO_N "checking for socklen_t equivalent... $ECHO_C" >&6
++ { echo "$as_me:$LINENO: checking for socklen_t equivalent" >&5
++echo $ECHO_N "checking for socklen_t equivalent... $ECHO_C" >&6; }
+ if test "${dcc_cv_socklen_t_equiv+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -2453,26 +2892,22 @@ getpeername(0,0,&len);
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+
+ dcc_cv_socklen_t_equiv="$t"
+ break
+@@ -2481,8 +2916,10 @@ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
++
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+ done
+
+@@ -2494,8 +2931,8 @@ echo "$as_me: error: Cannot find a type
+
+ fi
+
+- echo "$as_me:$LINENO: result: $dcc_cv_socklen_t_equiv" >&5
+-echo "${ECHO_T}$dcc_cv_socklen_t_equiv" >&6
++ { echo "$as_me:$LINENO: result: $dcc_cv_socklen_t_equiv" >&5
++echo "${ECHO_T}$dcc_cv_socklen_t_equiv" >&6; }
+
+ cat >>confdefs.h <<_ACEOF
+ #define socklen_t $dcc_cv_socklen_t_equiv
+@@ -2509,29 +2946,29 @@ fi
+ ### Checks for configure options
+
+
+-# Check whether --with-included-popt or --without-included-popt was given.
++# Check whether --with-included-popt was given.
+ if test "${with_included_popt+set}" = set; then
+- withval="$with_included_popt"
++ withval=$with_included_popt;
++fi
+
+-fi;
+
+-# Check whether --enable-rfc2553 or --disable-rfc2553 was given.
++# Check whether --enable-rfc2553 was given.
+ if test "${enable_rfc2553+set}" = set; then
+- enableval="$enable_rfc2553"
+-
++ enableval=$enable_rfc2553;
+ cat >>confdefs.h <<\_ACEOF
+ #define ENABLE_RFC2553 1
+ _ACEOF
+
+-fi;
++fi
++
+
+
+
+-# Check whether --with-gnome or --without-gnome was given.
++# Check whether --with-gnome was given.
+ if test "${with_gnome+set}" = set; then
+- withval="$with_gnome"
++ withval=$with_gnome;
++fi
+
+-fi;
+
+ if test x"$with_gnome" = xyes
+ then
+@@ -2544,11 +2981,11 @@ _ACEOF
+ fi
+
+
+-# Check whether --with-gtk or --without-gtk was given.
++# Check whether --with-gtk was given.
+ if test "${with_gtk+set}" = set; then
+- withval="$with_gtk"
++ withval=$with_gtk;
++fi
+
+-fi;
+ if test x"$with_gtk" = xyes
+ then
+ GNOME_BIN=distccmon-gnome
+@@ -2559,11 +2996,11 @@ _ACEOF
+
+ fi
+
+-# Check whether --enable-profile or --disable-profile was given.
++# Check whether --enable-profile was given.
+ if test "${enable_profile+set}" = set; then
+- enableval="$enable_profile"
++ enableval=$enable_profile;
++fi
+
+-fi;
+
+ if test x"$enable_profile" = xyes
+ then
+@@ -2585,12 +3022,12 @@ fi
+
+ for pkg in $GNOME_PACKAGES
+ do
+- echo "$as_me:$LINENO: checking version of $pkg" >&5
+-echo $ECHO_N "checking version of $pkg... $ECHO_C" >&6
++ { echo "$as_me:$LINENO: checking version of $pkg" >&5
++echo $ECHO_N "checking version of $pkg... $ECHO_C" >&6; }
+ if gnomevers=`pkg-config --modversion $pkg`
+ then
+- echo "$as_me:$LINENO: result: $gnomevers" >&5
+-echo "${ECHO_T}$gnomevers" >&6
++ { echo "$as_me:$LINENO: result: $gnomevers" >&5
++echo "${ECHO_T}$gnomevers" >&6; }
+ else
+ { { echo "$as_me:$LINENO: error: $pkg was not found by pkg-config" >&5
+ echo "$as_me: error: $pkg was not found by pkg-config" >&2;}
+@@ -2601,21 +3038,21 @@ done
+ if test x${with_gnome} = xyes -o x${with_gtk} = xyes
+ then
+ INSTALL_GNOME="install-gnome-data"
+- echo "$as_me:$LINENO: checking GNOME/GTK+ cflags" >&5
+-echo $ECHO_N "checking GNOME/GTK+ cflags... $ECHO_C" >&6
++ { echo "$as_me:$LINENO: checking GNOME/GTK+ cflags" >&5
++echo $ECHO_N "checking GNOME/GTK+ cflags... $ECHO_C" >&6; }
+ GNOME_CFLAGS="`pkg-config --cflags $GNOME_PACKAGES`" || { { echo "$as_me:$LINENO: error: failed to get cflags" >&5
+ echo "$as_me: error: failed to get cflags" >&2;}
+ { (exit 1); exit 1; }; }
+- echo "$as_me:$LINENO: result: ${GNOME_CFLAGS}" >&5
+-echo "${ECHO_T}${GNOME_CFLAGS}" >&6
++ { echo "$as_me:$LINENO: result: ${GNOME_CFLAGS}" >&5
++echo "${ECHO_T}${GNOME_CFLAGS}" >&6; }
+
+- echo "$as_me:$LINENO: checking GNOME/GTK+ libraries" >&5
+-echo $ECHO_N "checking GNOME/GTK+ libraries... $ECHO_C" >&6
++ { echo "$as_me:$LINENO: checking GNOME/GTK+ libraries" >&5
++echo $ECHO_N "checking GNOME/GTK+ libraries... $ECHO_C" >&6; }
+ GNOME_LIBS="`pkg-config --libs $GNOME_PACKAGES`" || { { echo "$as_me:$LINENO: error: failed to get libs" >&5
+ echo "$as_me: error: failed to get libs" >&2;}
+ { (exit 1); exit 1; }; }
+- echo "$as_me:$LINENO: result: ${GNOME_LIBS}" >&5
+-echo "${ECHO_T}${GNOME_LIBS}" >&6
++ { echo "$as_me:$LINENO: result: ${GNOME_LIBS}" >&5
++echo "${ECHO_T}${GNOME_LIBS}" >&6; }
+ fi
+
+
+@@ -2631,8 +3068,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}gcc; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -2645,32 +3082,34 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- echo "$as_me:$LINENO: result: $CC" >&5
+-echo "${ECHO_T}$CC" >&6
++ { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
++
+ fi
+ if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+ set dummy gcc; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -2683,36 +3122,51 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+-echo "${ECHO_T}$ac_ct_CC" >&6
++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
++echo "${ECHO_T}$ac_ct_CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
+- CC=$ac_ct_CC
++ if test "x$ac_ct_CC" = x; then
++ CC=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet. If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet. If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++ CC=$ac_ct_CC
++ fi
+ else
+ CC="$ac_cv_prog_CC"
+ fi
+
+ if test -z "$CC"; then
+- if test -n "$ac_tool_prefix"; then
+- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+ set dummy ${ac_tool_prefix}cc; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -2725,74 +3179,34 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- echo "$as_me:$LINENO: result: $CC" >&5
+-echo "${ECHO_T}$CC" >&6
+-else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
+-fi
+-
+-fi
+-if test -z "$ac_cv_prog_CC"; then
+- ac_ct_CC=$CC
+- # Extract the first word of "cc", so it can be a program name with args.
+-set dummy cc; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+- echo $ECHO_N "(cached) $ECHO_C" >&6
+-else
+- if test -n "$ac_ct_CC"; then
+- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+-else
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_ac_ct_CC="cc"
+- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+- break 2
+- fi
+-done
+-done
+-
+-fi
+-fi
+-ac_ct_CC=$ac_cv_prog_ac_ct_CC
+-if test -n "$ac_ct_CC"; then
+- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+-echo "${ECHO_T}$ac_ct_CC" >&6
++ { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
+- CC=$ac_ct_CC
+-else
+- CC="$ac_cv_prog_CC"
+-fi
+
++ fi
+ fi
+ if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+ set dummy cc; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -2806,7 +3220,7 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+@@ -2817,6 +3231,7 @@ do
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+@@ -2834,22 +3249,23 @@ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- echo "$as_me:$LINENO: result: $CC" >&5
+-echo "${ECHO_T}$CC" >&6
++ { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
++
+ fi
+ if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+- for ac_prog in cl
++ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -2862,36 +3278,38 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ fi
+ fi
+ CC=$ac_cv_prog_CC
+ if test -n "$CC"; then
+- echo "$as_me:$LINENO: result: $CC" >&5
+-echo "${ECHO_T}$CC" >&6
++ { echo "$as_me:$LINENO: result: $CC" >&5
++echo "${ECHO_T}$CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
++
+ test -n "$CC" && break
+ done
+ fi
+ if test -z "$CC"; then
+ ac_ct_CC=$CC
+- for ac_prog in cl
++ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -2904,29 +3322,45 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ fi
+ fi
+ ac_ct_CC=$ac_cv_prog_ac_ct_CC
+ if test -n "$ac_ct_CC"; then
+- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+-echo "${ECHO_T}$ac_ct_CC" >&6
++ { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
++echo "${ECHO_T}$ac_ct_CC" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
++
+ test -n "$ac_ct_CC" && break
+ done
+
+- CC=$ac_ct_CC
++ if test "x$ac_ct_CC" = x; then
++ CC=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet. If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet. If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++ CC=$ac_ct_CC
++ fi
+ fi
+
+ fi
+@@ -2939,27 +3373,41 @@ See \`config.log' for more details." >&2
+ { (exit 1); exit 1; }; }
+
+ # Provide some information about the compiler.
+-echo "$as_me:$LINENO:" \
+- "checking for C compiler version" >&5
++echo "$as_me:$LINENO: checking for C compiler version" >&5
+ ac_compiler=`set X $ac_compile; echo $2`
+-{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+- (eval $ac_compiler --version </dev/null >&5) 2>&5
++{ (ac_try="$ac_compiler --version >&5"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compiler --version >&5") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+- (eval $ac_compiler -v </dev/null >&5) 2>&5
++{ (ac_try="$ac_compiler -v >&5"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compiler -v >&5") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+-{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+- (eval $ac_compiler -V </dev/null >&5) 2>&5
++{ (ac_try="$ac_compiler -V >&5"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compiler -V >&5") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+-echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
++echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+ if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -2982,49 +3430,49 @@ main ()
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_compiler_gnu=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_compiler_gnu=no
++ ac_compiler_gnu=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
++echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
+ GCC=`test $ac_compiler_gnu = yes && echo yes`
+ ac_test_CFLAGS=${CFLAGS+set}
+ ac_save_CFLAGS=$CFLAGS
+-CFLAGS="-g"
+-echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
++echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+- cat >conftest.$ac_ext <<_ACEOF
++ ac_save_c_werror_flag=$ac_c_werror_flag
++ ac_c_werror_flag=yes
++ ac_cv_prog_cc_g=no
++ CFLAGS="-g"
++ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -3040,37 +3488,118 @@ main ()
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_cv_prog_cc_g=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ CFLAGS=""
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ :
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_c_werror_flag=$ac_save_c_werror_flag
++ CFLAGS="-g"
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_cv_prog_cc_g=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_prog_cc_g=no
++
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ ac_c_werror_flag=$ac_save_c_werror_flag
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
++echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+ if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+ elif test $ac_cv_prog_cc_g = yes; then
+@@ -3086,12 +3615,12 @@ else
+ CFLAGS=
+ fi
+ fi
+-echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+-echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+-if test "${ac_cv_prog_cc_stdc+set}" = set; then
++{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
++echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
++if test "${ac_cv_prog_cc_c89+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+- ac_cv_prog_cc_stdc=no
++ ac_cv_prog_cc_c89=no
+ ac_save_CC=$CC
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -3125,12 +3654,17 @@ static char *f (char * (*g) (char **, in
+ /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+- as 'x'. The following induces an error, until -std1 is added to get
++ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+- that's true only with -std1. */
++ that's true only with -std. */
+ int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
++ inside strings and character constants. */
++#define FOO(x) 'x'
++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
++
+ int test (int i, double x);
+ struct s1 {int (*f) (int a);};
+ struct s2 {int (*f) (double a);};
+@@ -3145,337 +3679,152 @@ return f (e, argv, 0) != argv[0] || f
+ return 0;
+ }
+ _ACEOF
+-# Don't try gcc -ansi; that turns off useful extensions and
+-# breaks some systems' header files.
+-# AIX -qlanglvl=ansi
+-# Ultrix and OSF/1 -std1
+-# HP-UX 10.20 and later -Ae
+-# HP-UX older versions -Aa -D_HPUX_SOURCE
+-# SVR4 -Xc -D__EXTENSIONS__
+-for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+ do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_prog_cc_stdc=$ac_arg
+-break
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_cv_prog_cc_c89=$ac_arg
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
++
+ fi
+-rm -f conftest.err conftest.$ac_objext
++
++rm -f core conftest.err conftest.$ac_objext
++ test "x$ac_cv_prog_cc_c89" != "xno" && break
+ done
+-rm -f conftest.$ac_ext conftest.$ac_objext
++rm -f conftest.$ac_ext
+ CC=$ac_save_CC
+
+ fi
+-
+-case "x$ac_cv_prog_cc_stdc" in
+- x|xno)
+- echo "$as_me:$LINENO: result: none needed" >&5
+-echo "${ECHO_T}none needed" >&6 ;;
++# AC_CACHE_VAL
++case "x$ac_cv_prog_cc_c89" in
++ x)
++ { echo "$as_me:$LINENO: result: none needed" >&5
++echo "${ECHO_T}none needed" >&6; } ;;
++ xno)
++ { echo "$as_me:$LINENO: result: unsupported" >&5
++echo "${ECHO_T}unsupported" >&6; } ;;
+ *)
+- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+-echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+- CC="$CC $ac_cv_prog_cc_stdc" ;;
++ CC="$CC $ac_cv_prog_cc_c89"
++ { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
++echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+ esac
+
+-# Some people use a C++ compiler to compile C. Since we use `exit',
+-# in C++ we need to declare it. In case someone uses the same compiler
+-# for both compiling C and C++ we need to have the C++ compiler decide
+-# the declaration of exit, since it's the most demanding environment.
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++if test x"$GCC" = xyes
++then
++ CFLAGS="$CFLAGS -W -Wall -Wimplicit \
++-Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings \
++-Waggregate-return -Wstrict-prototypes -Wmissing-prototypes \
++-Wnested-externs -Wconversion -Wpointer-arith -Wmissing-declarations"
++ { echo "$as_me:$LINENO: Adding gcc options: $CFLAGS" >&5
++echo "$as_me: Adding gcc options: $CFLAGS" >&6;}
++fi
++{ echo "$as_me:$LINENO: checking for library containing strerror" >&5
++echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; }
++if test "${ac_cv_search_strerror+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ ac_func_search_save_LIBS=$LIBS
+ cat >conftest.$ac_ext <<_ACEOF
+-#ifndef __cplusplus
+- choke me
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
+ #endif
++char strerror ();
++int
++main ()
++{
++return strerror ();
++ ;
++ return 0;
++}
+ _ACEOF
+-rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++for ac_lib in '' cposix; do
++ if test -z "$ac_lib"; then
++ ac_res="none required"
++ else
++ ac_res=-l$ac_lib
++ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
++ fi
++ rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- for ac_declaration in \
+- '' \
+- 'extern "C" void std::exit (int) throw (); using std::exit;' \
+- 'extern "C" void std::exit (int); using std::exit;' \
+- 'extern "C" void exit (int) throw ();' \
+- 'extern "C" void exit (int);' \
+- 'void exit (int);'
+-do
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_declaration
+-#include <stdlib.h>
+-int
+-main ()
+-{
+-exit (42);
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- :
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
++ ac_cv_search_strerror=$ac_res
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-continue
+-fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-$ac_declaration
+-int
+-main ()
+-{
+-exit (42);
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- break
+-else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+-done
+-rm -f conftest*
+-if test -n "$ac_declaration"; then
+- echo '#ifdef __cplusplus' >>confdefs.h
+- echo $ac_declaration >>confdefs.h
+- echo '#endif' >>confdefs.h
+-fi
+-
+-else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+-ac_ext=c
+-ac_cpp='$CPP $CPPFLAGS'
+-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+-if test x"$GCC" = xyes
+-then
+- CFLAGS="$CFLAGS -W -Wall -Wimplicit \
+--Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings \
+--Waggregate-return -Wstrict-prototypes -Wmissing-prototypes \
+--Wnested-externs -Wconversion -Wpointer-arith -Wmissing-declarations"
+- { echo "$as_me:$LINENO: Adding gcc options: $CFLAGS" >&5
+-echo "$as_me: Adding gcc options: $CFLAGS" >&6;}
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++ conftest$ac_exeext
++ if test "${ac_cv_search_strerror+set}" = set; then
++ break
+ fi
+-echo "$as_me:$LINENO: checking for library containing strerror" >&5
+-echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6
++done
+ if test "${ac_cv_search_strerror+set}" = set; then
+- echo $ECHO_N "(cached) $ECHO_C" >&6
+-else
+- ac_func_search_save_LIBS=$LIBS
+-ac_cv_search_strerror=no
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-
+-/* Override any gcc2 internal prototype to avoid an error. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+-char strerror ();
+-int
+-main ()
+-{
+-strerror ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_search_strerror="none required"
+-else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-fi
+-rm -f conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+-if test "$ac_cv_search_strerror" = no; then
+- for ac_lib in cposix; do
+- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-
+-/* Override any gcc2 internal prototype to avoid an error. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+-char strerror ();
+-int
+-main ()
+-{
+-strerror ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_search_strerror="-l$ac_lib"
+-break
++ :
+ else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-fi
+-rm -f conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+- done
++ ac_cv_search_strerror=no
+ fi
++rm conftest.$ac_ext
+ LIBS=$ac_func_search_save_LIBS
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+-echo "${ECHO_T}$ac_cv_search_strerror" >&6
+-if test "$ac_cv_search_strerror" != no; then
+- test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS"
++{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
++echo "${ECHO_T}$ac_cv_search_strerror" >&6; }
++ac_res=$ac_cv_search_strerror
++if test "$ac_res" != no; then
++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+ fi
+
+@@ -3496,32 +3845,33 @@ CPPFLAGS="$CPPFLAGS -DHAVE_CONFIG_H"
+ # there.
+ CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+
+-echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+-if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
++echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
++set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
++if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.make <<\_ACEOF
++SHELL = /bin/sh
+ all:
+- @echo 'ac_maketemp="$(MAKE)"'
++ @echo '@@@%%%=$(MAKE)=@@@%%%'
+ _ACEOF
+ # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+-eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+-if test -n "$ac_maketemp"; then
+- eval ac_cv_prog_make_${ac_make}_set=yes
+-else
+- eval ac_cv_prog_make_${ac_make}_set=no
+-fi
++case `${MAKE-make} -f conftest.make 2>/dev/null` in
++ *@@@%%%=?*=@@@%%%*)
++ eval ac_cv_prog_make_${ac_make}_set=yes;;
++ *)
++ eval ac_cv_prog_make_${ac_make}_set=no;;
++esac
+ rm -f conftest.make
+ fi
+-if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+- echo "$as_me:$LINENO: result: yes" >&5
+-echo "${ECHO_T}yes" >&6
++if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
++ { echo "$as_me:$LINENO: result: yes" >&5
++echo "${ECHO_T}yes" >&6; }
+ SET_MAKE=
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+ fi
+
+@@ -3538,8 +3888,8 @@ fi
+ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+ # OS/2's system install, which has a completely different semantic
+ # ./install, which can be erroneously created by make from ./install.sh.
+-echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
++echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+ if test -z "$INSTALL"; then
+ if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+@@ -3561,7 +3911,7 @@ case $as_dir/ in
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+@@ -3580,21 +3930,22 @@ case $as_dir/ in
+ ;;
+ esac
+ done
++IFS=$as_save_IFS
+
+
+ fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+- # As a last resort, use the slow shell script. We don't cache a
+- # path for INSTALL within a source directory, because that will
++ # As a last resort, use the slow shell script. Don't cache a
++ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+- # removed, or if the path is relative.
++ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+ fi
+-echo "$as_me:$LINENO: result: $INSTALL" >&5
+-echo "${ECHO_T}$INSTALL" >&6
++{ echo "$as_me:$LINENO: result: $INSTALL" >&5
++echo "${ECHO_T}$INSTALL" >&6; }
+
+ # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+ # It thinks the first close brace ends the variable substitution.
+@@ -3614,8 +3965,8 @@ for ac_prog in python2.2 python-2.2 pyth
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+-echo "$as_me:$LINENO: checking for $ac_word" >&5
+-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+ if test "${ac_cv_prog_PYTHON+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -3628,25 +3979,27 @@ do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_PYTHON="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+ done
+ done
++IFS=$as_save_IFS
+
+ fi
+ fi
+ PYTHON=$ac_cv_prog_PYTHON
+ if test -n "$PYTHON"; then
+- echo "$as_me:$LINENO: result: $PYTHON" >&5
+-echo "${ECHO_T}$PYTHON" >&6
++ { echo "$as_me:$LINENO: result: $PYTHON" >&5
++echo "${ECHO_T}$PYTHON" >&6; }
+ else
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
++
+ test -n "$PYTHON" && break
+ done
+
+@@ -3654,8 +4007,8 @@ done
+ # NB: Cannot use AC_CONFIG_LIBOBJ_DIR here, because it's not present
+ # in autoconf 2.53.
+
+-echo "$as_me:$LINENO: checking for inline" >&5
+-echo $ECHO_N "checking for inline... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for inline" >&5
++echo $ECHO_N "checking for inline... $ECHO_C" >&6; }
+ if test "${ac_cv_c_inline+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -3675,38 +4028,37 @@ $ac_kw foo_t foo () {return 0; }
+
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_c_inline=$ac_kw; break
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_cv_c_inline=$ac_kw
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
++
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ test "$ac_cv_c_inline" != no && break
+ done
+
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+-echo "${ECHO_T}$ac_cv_c_inline" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
++echo "${ECHO_T}$ac_cv_c_inline" >&6; }
+
+
+ case $ac_cv_c_inline in
+@@ -3735,8 +4087,8 @@ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+-echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
++echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+ # On Suns, sometimes $CPP names a directory.
+ if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+@@ -3770,24 +4122,22 @@ cat >>conftest.$ac_ext <<_ACEOF
+ #endif
+ Syntax error
+ _ACEOF
+-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null; then
+- if test -s conftest.err; then
+- ac_cpp_err=$ac_c_preproc_warn_flag
+- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+- else
+- ac_cpp_err=
+- fi
+-else
+- ac_cpp_err=yes
+-fi
+-if test -z "$ac_cpp_err"; then
++ (exit $ac_status); } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then
+ :
+ else
+ echo "$as_me: failed program was:" >&5
+@@ -3796,9 +4146,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
+ # Broken: fails on valid input.
+ continue
+ fi
++
+ rm -f conftest.err conftest.$ac_ext
+
+- # OK, works on sane cases. Now check whether non-existent headers
++ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -3808,24 +4159,22 @@ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <ac_nonexistent.h>
+ _ACEOF
+-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null; then
+- if test -s conftest.err; then
+- ac_cpp_err=$ac_c_preproc_warn_flag
+- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+- else
+- ac_cpp_err=
+- fi
+-else
+- ac_cpp_err=yes
+-fi
+-if test -z "$ac_cpp_err"; then
++ (exit $ac_status); } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then
+ # Broken: success on invalid input.
+ continue
+ else
+@@ -3836,6 +4185,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
+ ac_preproc_ok=:
+ break
+ fi
++
+ rm -f conftest.err conftest.$ac_ext
+
+ done
+@@ -3853,8 +4203,8 @@ fi
+ else
+ ac_cv_prog_CPP=$CPP
+ fi
+-echo "$as_me:$LINENO: result: $CPP" >&5
+-echo "${ECHO_T}$CPP" >&6
++{ echo "$as_me:$LINENO: result: $CPP" >&5
++echo "${ECHO_T}$CPP" >&6; }
+ ac_preproc_ok=false
+ for ac_c_preproc_warn_flag in '' yes
+ do
+@@ -3877,24 +4227,22 @@ cat >>conftest.$ac_ext <<_ACEOF
+ #endif
+ Syntax error
+ _ACEOF
+-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null; then
+- if test -s conftest.err; then
+- ac_cpp_err=$ac_c_preproc_warn_flag
+- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+- else
+- ac_cpp_err=
+- fi
+-else
+- ac_cpp_err=yes
+-fi
+-if test -z "$ac_cpp_err"; then
++ (exit $ac_status); } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then
+ :
+ else
+ echo "$as_me: failed program was:" >&5
+@@ -3903,9 +4251,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
+ # Broken: fails on valid input.
+ continue
+ fi
++
+ rm -f conftest.err conftest.$ac_ext
+
+- # OK, works on sane cases. Now check whether non-existent headers
++ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+@@ -3915,24 +4264,22 @@ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <ac_nonexistent.h>
+ _ACEOF
+-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null; then
+- if test -s conftest.err; then
+- ac_cpp_err=$ac_c_preproc_warn_flag
+- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+- else
+- ac_cpp_err=
+- fi
+-else
+- ac_cpp_err=yes
+-fi
+-if test -z "$ac_cpp_err"; then
++ (exit $ac_status); } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then
+ # Broken: success on invalid input.
+ continue
+ else
+@@ -3943,6 +4290,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
+ ac_preproc_ok=:
+ break
+ fi
++
+ rm -f conftest.err conftest.$ac_ext
+
+ done
+@@ -3965,80 +4313,224 @@ ac_link='$CC -o conftest$ac_exeext $CFLA
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+-echo "$as_me:$LINENO: checking for egrep" >&5
+-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+-if test "${ac_cv_prog_egrep+set}" = set; then
++{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
++echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
++if test "${ac_cv_path_GREP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+- if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+- then ac_cv_prog_egrep='grep -E'
+- else ac_cv_prog_egrep='egrep'
++ # Extract the first word of "grep ggrep" to use in msg output
++if test -z "$GREP"; then
++set dummy grep ggrep; ac_prog_name=$2
++if test "${ac_cv_path_GREP+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ ac_path_GREP_found=false
++# Loop through the user's path and test for each of PROGNAME-LIST
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_prog in grep ggrep; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
++ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
++ # Check for GNU ac_path_GREP and select it if it is found.
++ # Check for GNU $ac_path_GREP
++case `"$ac_path_GREP" --version 2>&1` in
++*GNU*)
++ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
++*)
++ ac_count=0
++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
++ while :
++ do
++ cat "conftest.in" "conftest.in" >"conftest.tmp"
++ mv "conftest.tmp" "conftest.in"
++ cp "conftest.in" "conftest.nl"
++ echo 'GREP' >> "conftest.nl"
++ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
++ ac_count=`expr $ac_count + 1`
++ if test $ac_count -gt ${ac_path_GREP_max-0}; then
++ # Best one so far, save it but keep looking for a better one
++ ac_cv_path_GREP="$ac_path_GREP"
++ ac_path_GREP_max=$ac_count
+ fi
+-fi
+-echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+- EGREP=$ac_cv_prog_egrep
++ # 10*(2^10) chars as input seems more than enough
++ test $ac_count -gt 10 && break
++ done
++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
++esac
+
+
+-echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+-if test "${ac_cv_header_stdc+set}" = set; then
+- echo $ECHO_N "(cached) $ECHO_C" >&6
+-else
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-#include <stdlib.h>
+-#include <stdarg.h>
+-#include <string.h>
+-#include <float.h>
++ $ac_path_GREP_found && break 3
++ done
++done
+
+-int
+-main ()
+-{
++done
++IFS=$as_save_IFS
+
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_header_stdc=yes
+-else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_header_stdc=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+-if test $ac_cv_header_stdc = yes; then
+- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
++GREP="$ac_cv_path_GREP"
++if test -z "$GREP"; then
++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
++ { (exit 1); exit 1; }; }
++fi
++
++else
++ ac_cv_path_GREP=$GREP
++fi
++
++
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
++echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
++ GREP="$ac_cv_path_GREP"
++
++
++{ echo "$as_me:$LINENO: checking for egrep" >&5
++echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
++if test "${ac_cv_path_EGREP+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
++ then ac_cv_path_EGREP="$GREP -E"
++ else
++ # Extract the first word of "egrep" to use in msg output
++if test -z "$EGREP"; then
++set dummy egrep; ac_prog_name=$2
++if test "${ac_cv_path_EGREP+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ ac_path_EGREP_found=false
++# Loop through the user's path and test for each of PROGNAME-LIST
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_prog in egrep; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
++ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
++ # Check for GNU ac_path_EGREP and select it if it is found.
++ # Check for GNU $ac_path_EGREP
++case `"$ac_path_EGREP" --version 2>&1` in
++*GNU*)
++ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
++*)
++ ac_count=0
++ echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
++ while :
++ do
++ cat "conftest.in" "conftest.in" >"conftest.tmp"
++ mv "conftest.tmp" "conftest.in"
++ cp "conftest.in" "conftest.nl"
++ echo 'EGREP' >> "conftest.nl"
++ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
++ ac_count=`expr $ac_count + 1`
++ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
++ # Best one so far, save it but keep looking for a better one
++ ac_cv_path_EGREP="$ac_path_EGREP"
++ ac_path_EGREP_max=$ac_count
++ fi
++ # 10*(2^10) chars as input seems more than enough
++ test $ac_count -gt 10 && break
++ done
++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
++esac
++
++
++ $ac_path_EGREP_found && break 3
++ done
++done
++
++done
++IFS=$as_save_IFS
++
++
++fi
++
++EGREP="$ac_cv_path_EGREP"
++if test -z "$EGREP"; then
++ { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
++echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
++ { (exit 1); exit 1; }; }
++fi
++
++else
++ ac_cv_path_EGREP=$EGREP
++fi
++
++
++ fi
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
++echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
++ EGREP="$ac_cv_path_EGREP"
++
++
++{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
++echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
++if test "${ac_cv_header_stdc+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
++cat confdefs.h >>conftest.$ac_ext
++cat >>conftest.$ac_ext <<_ACEOF
++/* end confdefs.h. */
++#include <stdlib.h>
++#include <stdarg.h>
++#include <string.h>
++#include <float.h>
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
++ ac_status=$?
++ grep -v '^ *+' conftest.er1 >conftest.err
++ rm -f conftest.er1
++ cat conftest.err >&5
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_cv_header_stdc=yes
++else
++ echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_cv_header_stdc=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++if test $ac_cv_header_stdc = yes; then
++ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
++ cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h. */
++_ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+@@ -4088,6 +4580,7 @@ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <ctype.h>
++#include <stdlib.h>
+ #if ((' ' & 0x0FF) == 0x020)
+ # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+ # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+@@ -4107,18 +4600,27 @@ main ()
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+- exit(2);
+- exit (0);
++ return 2;
++ return 0;
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
++ { (case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+@@ -4131,12 +4633,14 @@ sed 's/^/| /' conftest.$ac_ext >&5
+ ( exit $ac_status )
+ ac_cv_header_stdc=no
+ fi
+-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
++
++
+ fi
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+-echo "${ECHO_T}$ac_cv_header_stdc" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
++echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+ if test $ac_cv_header_stdc = yes; then
+
+ cat >>confdefs.h <<\_ACEOF
+@@ -4159,9 +4663,9 @@ for ac_header in sys/types.h sys/stat.h
+ inttypes.h stdint.h unistd.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-echo "$as_me:$LINENO: checking for $ac_header" >&5
+-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -4175,37 +4679,35 @@ $ac_includes_default
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-eval "$as_ac_Header=no"
++ eval "$as_ac_Header=no"
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+@@ -4223,18 +4725,19 @@ done
+ for ac_header in unistd.h sys/types.h sys/sendfile.h sys/signal.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+- echo "$as_me:$LINENO: checking for $ac_header" >&5
+-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ else
+ # Is the header compilable?
+-echo "$as_me:$LINENO: checking $ac_header usability" >&5
+-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -4245,40 +4748,37 @@ $ac_includes_default
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_header_compiler=no
++ ac_header_compiler=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+-echo "${ECHO_T}$ac_header_compiler" >&6
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+ # Is the header present?
+-echo "$as_me:$LINENO: checking $ac_header presence" >&5
+-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -4287,24 +4787,22 @@ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <$ac_header>
+ _ACEOF
+-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null; then
+- if test -s conftest.err; then
+- ac_cpp_err=$ac_c_preproc_warn_flag
+- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+- else
+- ac_cpp_err=
+- fi
+-else
+- ac_cpp_err=yes
+-fi
+-if test -z "$ac_cpp_err"; then
++ (exit $ac_status); } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then
+ ac_header_preproc=yes
+ else
+ echo "$as_me: failed program was:" >&5
+@@ -4312,9 +4810,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+ fi
++
+ rm -f conftest.err conftest.$ac_ext
+-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+-echo "${ECHO_T}$ac_header_preproc" >&6
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+ # So? What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+@@ -4338,25 +4837,24 @@ echo "$as_me: WARNING: $ac_header: s
+ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+- (
+- cat <<\_ASBOX
++ ( cat <<\_ASBOX
+ ## ------------------------------------- ##
+ ## Report this to distcc@lists.samba.org ##
+ ## ------------------------------------- ##
+ _ASBOX
+- ) |
+- sed "s/^/$as_me: WARNING: /" >&2
++ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+ esac
+-echo "$as_me:$LINENO: checking for $ac_header" >&5
+-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ eval "$as_ac_Header=\$ac_header_preproc"
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+
+ fi
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+@@ -4375,18 +4873,19 @@ done
+ for ac_header in ctype.h sys/resource.h sys/socket.h sys/select.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+- echo "$as_me:$LINENO: checking for $ac_header" >&5
+-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ else
+ # Is the header compilable?
+-echo "$as_me:$LINENO: checking $ac_header usability" >&5
+-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -4397,40 +4896,37 @@ $ac_includes_default
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_header_compiler=no
++ ac_header_compiler=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+-echo "${ECHO_T}$ac_header_compiler" >&6
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+ # Is the header present?
+-echo "$as_me:$LINENO: checking $ac_header presence" >&5
+-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -4439,24 +4935,22 @@ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <$ac_header>
+ _ACEOF
+-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null; then
+- if test -s conftest.err; then
+- ac_cpp_err=$ac_c_preproc_warn_flag
+- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+- else
+- ac_cpp_err=
+- fi
+-else
+- ac_cpp_err=yes
+-fi
+-if test -z "$ac_cpp_err"; then
++ (exit $ac_status); } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then
+ ac_header_preproc=yes
+ else
+ echo "$as_me: failed program was:" >&5
+@@ -4464,9 +4958,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+ fi
++
+ rm -f conftest.err conftest.$ac_ext
+-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+-echo "${ECHO_T}$ac_header_preproc" >&6
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+ # So? What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+@@ -4490,25 +4985,24 @@ echo "$as_me: WARNING: $ac_header: s
+ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+- (
+- cat <<\_ASBOX
++ ( cat <<\_ASBOX
+ ## ------------------------------------- ##
+ ## Report this to distcc@lists.samba.org ##
+ ## ------------------------------------- ##
+ _ASBOX
+- ) |
+- sed "s/^/$as_me: WARNING: /" >&2
++ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+ esac
+-echo "$as_me:$LINENO: checking for $ac_header" >&5
+-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ eval "$as_ac_Header=\$ac_header_preproc"
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+
+ fi
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+@@ -4524,9 +5018,9 @@ done
+ for ac_header in netinet/in.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-echo "$as_me:$LINENO: checking for $ac_header" >&5
+-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -4543,37 +5037,35 @@ cat >>conftest.$ac_ext <<_ACEOF
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-eval "$as_ac_Header=no"
++ eval "$as_ac_Header=no"
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+@@ -4587,9 +5079,9 @@ done
+ for ac_header in arpa/nameser.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-echo "$as_me:$LINENO: checking for $ac_header" >&5
+-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -4606,37 +5098,35 @@ cat >>conftest.$ac_ext <<_ACEOF
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-eval "$as_ac_Header=no"
++ eval "$as_ac_Header=no"
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+@@ -4650,9 +5140,9 @@ done
+ for ac_header in resolv.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-echo "$as_me:$LINENO: checking for $ac_header" >&5
+-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -4675,37 +5165,35 @@ cat >>conftest.$ac_ext <<_ACEOF
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-eval "$as_ac_Header=no"
++ eval "$as_ac_Header=no"
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+@@ -4724,18 +5212,19 @@ done
+ for ac_header in float.h mcheck.h alloca.h sys/mman.h sys/loadavg.h
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
+- echo "$as_me:$LINENO: checking for $ac_header" >&5
+-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
++ { echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ else
+ # Is the header compilable?
+-echo "$as_me:$LINENO: checking $ac_header usability" >&5
+-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
++echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -4746,40 +5235,37 @@ $ac_includes_default
+ #include <$ac_header>
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_header_compiler=no
++ ac_header_compiler=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+-echo "${ECHO_T}$ac_header_compiler" >&6
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+ # Is the header present?
+-echo "$as_me:$LINENO: checking $ac_header presence" >&5
+-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
++echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -4788,24 +5274,22 @@ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <$ac_header>
+ _ACEOF
+-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null; then
+- if test -s conftest.err; then
+- ac_cpp_err=$ac_c_preproc_warn_flag
+- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+- else
+- ac_cpp_err=
+- fi
+-else
+- ac_cpp_err=yes
+-fi
+-if test -z "$ac_cpp_err"; then
++ (exit $ac_status); } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then
+ ac_header_preproc=yes
+ else
+ echo "$as_me: failed program was:" >&5
+@@ -4813,9 +5297,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+ fi
++
+ rm -f conftest.err conftest.$ac_ext
+-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+-echo "${ECHO_T}$ac_header_preproc" >&6
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+ # So? What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+@@ -4839,25 +5324,24 @@ echo "$as_me: WARNING: $ac_header: s
+ echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+- (
+- cat <<\_ASBOX
++ ( cat <<\_ASBOX
+ ## ------------------------------------- ##
+ ## Report this to distcc@lists.samba.org ##
+ ## ------------------------------------- ##
+ _ASBOX
+- ) |
+- sed "s/^/$as_me: WARNING: /" >&2
++ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+ esac
+-echo "$as_me:$LINENO: checking for $ac_header" >&5
+-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_Header+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_header" >&5
++echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
++if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ eval "$as_ac_Header=\$ac_header_preproc"
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
++ac_res=`eval echo '${'$as_ac_Header'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+
+ fi
+ if test `eval echo '${'$as_ac_Header'}'` = yes; then
+@@ -4872,8 +5356,8 @@ done
+
+ ######################################################################
+
+-echo "$as_me:$LINENO: checking for in_port_t" >&5
+-echo $ECHO_N "checking for in_port_t... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for in_port_t" >&5
++echo $ECHO_N "checking for in_port_t... $ECHO_C" >&6; }
+ if test "${ac_cv_type_in_port_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -4898,49 +5382,47 @@ cat >>conftest.$ac_ext <<_ACEOF
+ #endif
+
+
++typedef in_port_t ac__type_new_;
+ int
+ main ()
+ {
+-if ((in_port_t *) 0)
++if ((ac__type_new_ *) 0)
+ return 0;
+-if (sizeof (in_port_t))
++if (sizeof (ac__type_new_))
+ return 0;
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_cv_type_in_port_t=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_type_in_port_t=no
++ ac_cv_type_in_port_t=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_type_in_port_t" >&5
+-echo "${ECHO_T}$ac_cv_type_in_port_t" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_type_in_port_t" >&5
++echo "${ECHO_T}$ac_cv_type_in_port_t" >&6; }
+ if test $ac_cv_type_in_port_t = yes; then
+
+ cat >>confdefs.h <<_ACEOF
+@@ -4949,8 +5431,8 @@ _ACEOF
+
+
+ fi
+-echo "$as_me:$LINENO: checking for in_addr_t" >&5
+-echo $ECHO_N "checking for in_addr_t... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for in_addr_t" >&5
++echo $ECHO_N "checking for in_addr_t... $ECHO_C" >&6; }
+ if test "${ac_cv_type_in_addr_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -4975,49 +5457,47 @@ cat >>conftest.$ac_ext <<_ACEOF
+ #endif
+
+
++typedef in_addr_t ac__type_new_;
+ int
+ main ()
+ {
+-if ((in_addr_t *) 0)
++if ((ac__type_new_ *) 0)
+ return 0;
+-if (sizeof (in_addr_t))
++if (sizeof (ac__type_new_))
+ return 0;
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_cv_type_in_addr_t=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_type_in_addr_t=no
++ ac_cv_type_in_addr_t=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_type_in_addr_t" >&5
+-echo "${ECHO_T}$ac_cv_type_in_addr_t" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_type_in_addr_t" >&5
++echo "${ECHO_T}$ac_cv_type_in_addr_t" >&6; }
+ if test $ac_cv_type_in_addr_t = yes; then
+
+ cat >>confdefs.h <<_ACEOF
+@@ -5039,13 +5519,12 @@ fi
+ # libsocket.so which has a bad implementation of gethostbyname (it
+ # only looks in /etc/hosts), so we only look for -lsocket if we need
+ # it.
+-echo "$as_me:$LINENO: checking for library containing gethostent" >&5
+-echo $ECHO_N "checking for library containing gethostent... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for library containing gethostent" >&5
++echo $ECHO_N "checking for library containing gethostent... $ECHO_C" >&6; }
+ if test "${ac_cv_search_gethostent+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ ac_func_search_save_LIBS=$LIBS
+-ac_cv_search_gethostent=no
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -5053,123 +5532,165 @@ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+
+-/* Override any gcc2 internal prototype to avoid an error. */
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+ char gethostent ();
+ int
+ main ()
+ {
+-gethostent ();
++return gethostent ();
+ ;
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
++for ac_lib in '' nsl; do
++ if test -z "$ac_lib"; then
++ ac_res="none required"
++ else
++ ac_res=-l$ac_lib
++ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
++ fi
++ rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_search_gethostent="none required"
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
++ ac_cv_search_gethostent=$ac_res
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
++
+ fi
+-rm -f conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+-if test "$ac_cv_search_gethostent" = no; then
+- for ac_lib in nsl; do
+- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+- cat >conftest.$ac_ext <<_ACEOF
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++ conftest$ac_exeext
++ if test "${ac_cv_search_gethostent+set}" = set; then
++ break
++fi
++done
++if test "${ac_cv_search_gethostent+set}" = set; then
++ :
++else
++ ac_cv_search_gethostent=no
++fi
++rm conftest.$ac_ext
++LIBS=$ac_func_search_save_LIBS
++fi
++{ echo "$as_me:$LINENO: result: $ac_cv_search_gethostent" >&5
++echo "${ECHO_T}$ac_cv_search_gethostent" >&6; }
++ac_res=$ac_cv_search_gethostent
++if test "$ac_res" != no; then
++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
++
++fi
++
++{ echo "$as_me:$LINENO: checking for library containing setsockopt" >&5
++echo $ECHO_N "checking for library containing setsockopt... $ECHO_C" >&6; }
++if test "${ac_cv_search_setsockopt+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ ac_func_search_save_LIBS=$LIBS
++cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+
+-/* Override any gcc2 internal prototype to avoid an error. */
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+-char gethostent ();
++char setsockopt ();
+ int
+ main ()
+ {
+-gethostent ();
++return setsockopt ();
+ ;
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
++for ac_lib in '' socket; do
++ if test -z "$ac_lib"; then
++ ac_res="none required"
++ else
++ ac_res=-l$ac_lib
++ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
++ fi
++ rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_search_gethostent="-l$ac_lib"
+-break
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
++ ac_cv_search_setsockopt=$ac_res
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
++
+ fi
+-rm -f conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+- done
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++ conftest$ac_exeext
++ if test "${ac_cv_search_setsockopt+set}" = set; then
++ break
++fi
++done
++if test "${ac_cv_search_setsockopt+set}" = set; then
++ :
++else
++ ac_cv_search_setsockopt=no
+ fi
++rm conftest.$ac_ext
+ LIBS=$ac_func_search_save_LIBS
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_search_gethostent" >&5
+-echo "${ECHO_T}$ac_cv_search_gethostent" >&6
+-if test "$ac_cv_search_gethostent" != no; then
+- test "$ac_cv_search_gethostent" = "none required" || LIBS="$ac_cv_search_gethostent $LIBS"
++{ echo "$as_me:$LINENO: result: $ac_cv_search_setsockopt" >&5
++echo "${ECHO_T}$ac_cv_search_setsockopt" >&6; }
++ac_res=$ac_cv_search_setsockopt
++if test "$ac_res" != no; then
++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+ fi
+
+-echo "$as_me:$LINENO: checking for library containing setsockopt" >&5
+-echo $ECHO_N "checking for library containing setsockopt... $ECHO_C" >&6
+-if test "${ac_cv_search_setsockopt+set}" = set; then
++{ echo "$as_me:$LINENO: checking for library containing hstrerror" >&5
++echo $ECHO_N "checking for library containing hstrerror... $ECHO_C" >&6; }
++if test "${ac_cv_search_hstrerror+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ ac_func_search_save_LIBS=$LIBS
+-ac_cv_search_setsockopt=no
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -5177,247 +5698,82 @@ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+
+-/* Override any gcc2 internal prototype to avoid an error. */
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+-char setsockopt ();
++char hstrerror ();
+ int
+ main ()
+ {
+-setsockopt ();
++return hstrerror ();
+ ;
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
++for ac_lib in '' resolv; do
++ if test -z "$ac_lib"; then
++ ac_res="none required"
++ else
++ ac_res=-l$ac_lib
++ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
++ fi
++ rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_search_setsockopt="none required"
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
++ ac_cv_search_hstrerror=$ac_res
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
++
+ fi
+-rm -f conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+-if test "$ac_cv_search_setsockopt" = no; then
+- for ac_lib in socket; do
+- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-
+-/* Override any gcc2 internal prototype to avoid an error. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+-char setsockopt ();
+-int
+-main ()
+-{
+-setsockopt ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_search_setsockopt="-l$ac_lib"
+-break
+-else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-fi
+-rm -f conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+- done
+-fi
+-LIBS=$ac_func_search_save_LIBS
+-fi
+-echo "$as_me:$LINENO: result: $ac_cv_search_setsockopt" >&5
+-echo "${ECHO_T}$ac_cv_search_setsockopt" >&6
+-if test "$ac_cv_search_setsockopt" != no; then
+- test "$ac_cv_search_setsockopt" = "none required" || LIBS="$ac_cv_search_setsockopt $LIBS"
+
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++ conftest$ac_exeext
++ if test "${ac_cv_search_hstrerror+set}" = set; then
++ break
+ fi
+-
+-echo "$as_me:$LINENO: checking for library containing hstrerror" >&5
+-echo $ECHO_N "checking for library containing hstrerror... $ECHO_C" >&6
++done
+ if test "${ac_cv_search_hstrerror+set}" = set; then
+- echo $ECHO_N "(cached) $ECHO_C" >&6
+-else
+- ac_func_search_save_LIBS=$LIBS
+-ac_cv_search_hstrerror=no
+-cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-
+-/* Override any gcc2 internal prototype to avoid an error. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+-char hstrerror ();
+-int
+-main ()
+-{
+-hstrerror ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_search_hstrerror="none required"
+-else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-fi
+-rm -f conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+-if test "$ac_cv_search_hstrerror" = no; then
+- for ac_lib in resolv; do
+- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+-
+-/* Override any gcc2 internal prototype to avoid an error. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+-char hstrerror ();
+-int
+-main ()
+-{
+-hstrerror ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_search_hstrerror="-l$ac_lib"
+-break
++ :
+ else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
+-
+-fi
+-rm -f conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+- done
++ ac_cv_search_hstrerror=no
+ fi
++rm conftest.$ac_ext
+ LIBS=$ac_func_search_save_LIBS
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_search_hstrerror" >&5
+-echo "${ECHO_T}$ac_cv_search_hstrerror" >&6
+-if test "$ac_cv_search_hstrerror" != no; then
+- test "$ac_cv_search_hstrerror" = "none required" || LIBS="$ac_cv_search_hstrerror $LIBS"
++{ echo "$as_me:$LINENO: result: $ac_cv_search_hstrerror" >&5
++echo "${ECHO_T}$ac_cv_search_hstrerror" >&6; }
++ac_res=$ac_cv_search_hstrerror
++if test "$ac_res" != no; then
++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+ fi
+
+-echo "$as_me:$LINENO: checking for library containing inet_aton" >&5
+-echo $ECHO_N "checking for library containing inet_aton... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for library containing inet_aton" >&5
++echo $ECHO_N "checking for library containing inet_aton... $ECHO_C" >&6; }
+ if test "${ac_cv_search_inet_aton+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ ac_func_search_save_LIBS=$LIBS
+-ac_cv_search_inet_aton=no
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -5425,113 +5781,73 @@ cat confdefs.h >>conftest.$ac_ext
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+
+-/* Override any gcc2 internal prototype to avoid an error. */
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+ char inet_aton ();
+ int
+ main ()
+ {
+-inet_aton ();
++return inet_aton ();
+ ;
+ return 0;
+ }
+ _ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
++for ac_lib in '' resolv; do
++ if test -z "$ac_lib"; then
++ ac_res="none required"
++ else
++ ac_res=-l$ac_lib
++ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
++ fi
++ rm -f conftest.$ac_objext conftest$ac_exeext
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_search_inet_aton="none required"
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
++ ac_cv_search_inet_aton=$ac_res
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-fi
+-rm -f conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+-if test "$ac_cv_search_inet_aton" = no; then
+- for ac_lib in resolv; do
+- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+- cat >conftest.$ac_ext <<_ACEOF
+-/* confdefs.h. */
+-_ACEOF
+-cat confdefs.h >>conftest.$ac_ext
+-cat >>conftest.$ac_ext <<_ACEOF
+-/* end confdefs.h. */
+
+-/* Override any gcc2 internal prototype to avoid an error. */
+-#ifdef __cplusplus
+-extern "C"
+-#endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+-char inet_aton ();
+-int
+-main ()
+-{
+-inet_aton ();
+- ;
+- return 0;
+-}
+-_ACEOF
+-rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
+- ac_status=$?
+- grep -v '^ *+' conftest.er1 >conftest.err
+- rm -f conftest.er1
+- cat conftest.err >&5
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_search_inet_aton="-l$ac_lib"
+-break
+-else
+- echo "$as_me: failed program was:" >&5
+-sed 's/^/| /' conftest.$ac_ext >&5
++fi
+
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
++ conftest$ac_exeext
++ if test "${ac_cv_search_inet_aton+set}" = set; then
++ break
+ fi
+-rm -f conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+- done
++done
++if test "${ac_cv_search_inet_aton+set}" = set; then
++ :
++else
++ ac_cv_search_inet_aton=no
+ fi
++rm conftest.$ac_ext
+ LIBS=$ac_func_search_save_LIBS
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_search_inet_aton" >&5
+-echo "${ECHO_T}$ac_cv_search_inet_aton" >&6
+-if test "$ac_cv_search_inet_aton" != no; then
+- test "$ac_cv_search_inet_aton" = "none required" || LIBS="$ac_cv_search_inet_aton $LIBS"
++{ echo "$as_me:$LINENO: result: $ac_cv_search_inet_aton" >&5
++echo "${ECHO_T}$ac_cv_search_inet_aton" >&6; }
++ac_res=$ac_cv_search_inet_aton
++if test "$ac_res" != no; then
++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+ fi
+
+@@ -5542,17 +5858,17 @@ then
+ # People might have the library but not the header, in which case we
+ # still need to use the included copy.
+ if test "${ac_cv_header_popt_h+set}" = set; then
+- echo "$as_me:$LINENO: checking for popt.h" >&5
+-echo $ECHO_N "checking for popt.h... $ECHO_C" >&6
++ { echo "$as_me:$LINENO: checking for popt.h" >&5
++echo $ECHO_N "checking for popt.h... $ECHO_C" >&6; }
+ if test "${ac_cv_header_popt_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_header_popt_h" >&5
+-echo "${ECHO_T}$ac_cv_header_popt_h" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_header_popt_h" >&5
++echo "${ECHO_T}$ac_cv_header_popt_h" >&6; }
+ else
+ # Is the header compilable?
+-echo "$as_me:$LINENO: checking popt.h usability" >&5
+-echo $ECHO_N "checking popt.h usability... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking popt.h usability" >&5
++echo $ECHO_N "checking popt.h usability... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -5563,40 +5879,37 @@ $ac_includes_default
+ #include <popt.h>
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_header_compiler=no
++ ac_header_compiler=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+-echo "${ECHO_T}$ac_header_compiler" >&6
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
++echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+ # Is the header present?
+-echo "$as_me:$LINENO: checking popt.h presence" >&5
+-echo $ECHO_N "checking popt.h presence... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking popt.h presence" >&5
++echo $ECHO_N "checking popt.h presence... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -5605,24 +5918,22 @@ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <popt.h>
+ _ACEOF
+-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
++if { (ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } >/dev/null; then
+- if test -s conftest.err; then
+- ac_cpp_err=$ac_c_preproc_warn_flag
+- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+- else
+- ac_cpp_err=
+- fi
+-else
+- ac_cpp_err=yes
+-fi
+-if test -z "$ac_cpp_err"; then
++ (exit $ac_status); } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then
+ ac_header_preproc=yes
+ else
+ echo "$as_me: failed program was:" >&5
+@@ -5630,9 +5941,10 @@ sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+ fi
++
+ rm -f conftest.err conftest.$ac_ext
+-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+-echo "${ECHO_T}$ac_header_preproc" >&6
++{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
++echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+ # So? What about this header?
+ case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+@@ -5656,25 +5968,23 @@ echo "$as_me: WARNING: popt.h: secti
+ echo "$as_me: WARNING: popt.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: popt.h: in the future, the compiler will take precedence" >&5
+ echo "$as_me: WARNING: popt.h: in the future, the compiler will take precedence" >&2;}
+- (
+- cat <<\_ASBOX
++ ( cat <<\_ASBOX
+ ## ------------------------------------- ##
+ ## Report this to distcc@lists.samba.org ##
+ ## ------------------------------------- ##
+ _ASBOX
+- ) |
+- sed "s/^/$as_me: WARNING: /" >&2
++ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+ esac
+-echo "$as_me:$LINENO: checking for popt.h" >&5
+-echo $ECHO_N "checking for popt.h... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for popt.h" >&5
++echo $ECHO_N "checking for popt.h... $ECHO_C" >&6; }
+ if test "${ac_cv_header_popt_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ ac_cv_header_popt_h=$ac_header_preproc
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_header_popt_h" >&5
+-echo "${ECHO_T}$ac_cv_header_popt_h" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_header_popt_h" >&5
++echo "${ECHO_T}$ac_cv_header_popt_h" >&6; }
+
+ fi
+ if test $ac_cv_header_popt_h = yes; then
+@@ -5703,64 +6013,83 @@ _ACEOF
+
+ # The following way of writing the cache mishandles newlines in values,
+ # but we know of no workaround that is simple, portable, and efficient.
+-# So, don't put newlines in cache variables' values.
++# So, we kill variables containing newlines.
+ # Ultrix sh set writes to stderr and can't be redirected directly,
+ # and sets the high bit in the cache file unless we assign to the vars.
+-{
++(
++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
++ eval ac_val=\$$ac_var
++ case $ac_val in #(
++ *${as_nl}*)
++ case $ac_var in #(
++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
++ esac
++ case $ac_var in #(
++ _ | IFS | as_nl) ;; #(
++ *) $as_unset $ac_var ;;
++ esac ;;
++ esac
++ done
++
+ (set) 2>&1 |
+- case `(ac_space=' '; set | grep ac_space) 2>&1` in
+- *ac_space=\ *)
++ case $as_nl`(ac_space=' '; set) 2>&1` in #(
++ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+- ;;
++ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+- sed -n \
+- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+- esac;
+-} |
++ esac |
++ sort
++) |
+ sed '
++ /^ac_cv_env_/b end
+ t clear
+- : clear
++ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+- : end' >>confcache
+-if diff $cache_file confcache >/dev/null 2>&1; then :; else
+- if test -w $cache_file; then
+- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
++ :end' >>confcache
++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
++ if test -w "$cache_file"; then
++ test "x$cache_file" != "x/dev/null" &&
++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5
++echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+- echo "not updating unwritable cache $cache_file"
++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
++echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+ fi
+ rm -f confcache
+
+-echo "$as_me:$LINENO: checking whether to use included libpopt" >&5
+-echo $ECHO_N "checking whether to use included libpopt... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking whether to use included libpopt" >&5
++echo $ECHO_N "checking whether to use included libpopt... $ECHO_C" >&6; }
+ if test x"$with_included_popt" = x"yes"
+ then
+- echo "$as_me:$LINENO: result: $srcdir/popt" >&5
+-echo "${ECHO_T}$srcdir/popt" >&6
++ { echo "$as_me:$LINENO: result: $srcdir/popt" >&5
++echo "${ECHO_T}$srcdir/popt" >&6; }
+ # popt_OBJS gets appended to distccd object list
+ BUILD_POPT='$(popt_OBJS)'
+ CPPFLAGS="$CPPFLAGS -I$srcdir/popt"
+ else
+ LIBS="$LIBS -lpopt"
+- echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+
+
+
+ ########################################################################
+ # Check for types
+-echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+-echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking return type of signal handlers" >&5
++echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6; }
+ if test "${ac_cv_type_signal+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -5772,55 +6101,44 @@ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h. */
+ #include <sys/types.h>
+ #include <signal.h>
+-#ifdef signal
+-# undef signal
+-#endif
+-#ifdef __cplusplus
+-extern "C" void (*signal (int, void (*)(int)))(int);
+-#else
+-void (*signal ()) ();
+-#endif
+
+ int
+ main ()
+ {
+-int i;
++return *(signal (0, 0)) (0) == 1;
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- ac_cv_type_signal=void
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ ac_cv_type_signal=int
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_type_signal=int
++ ac_cv_type_signal=void
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+-echo "${ECHO_T}$ac_cv_type_signal" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
++echo "${ECHO_T}$ac_cv_type_signal" >&6; }
+
+ cat >>confdefs.h <<_ACEOF
+ #define RETSIGTYPE $ac_cv_type_signal
+@@ -5844,9 +6162,9 @@ CPPFLAGS="$CPPFLAGS -I$srcdir/src"
+ for ac_func in sendfile setsid flock lockf hstrerror strerror setuid setreuid
+ do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+-echo "$as_me:$LINENO: checking for $ac_func" >&5
+-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_var+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -5872,67 +6190,60 @@ cat >>conftest.$ac_ext <<_ACEOF
+
+ #undef $ac_func
+
+-/* Override any gcc2 internal prototype to avoid an error. */
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
+ #ifdef __cplusplus
+ extern "C"
+-{
+ #endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+ char $ac_func ();
+ /* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++#if defined __stub_$ac_func || defined __stub___$ac_func
+ choke me
+-#else
+-char (*f) () = $ac_func;
+-#endif
+-#ifdef __cplusplus
+-}
+ #endif
+
+ int
+ main ()
+ {
+-return f != $ac_func;
++return $ac_func ();
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-eval "$as_ac_var=no"
++ eval "$as_ac_var=no"
+ fi
+-rm -f conftest.err conftest.$ac_objext \
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
++ac_res=`eval echo '${'$as_ac_var'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+@@ -5952,9 +6263,9 @@ done
+ for ac_func in getuid geteuid mcheck wait4 wait3 waitpid setgroups getcwd
+ do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+-echo "$as_me:$LINENO: checking for $ac_func" >&5
+-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_var+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -5980,67 +6291,60 @@ cat >>conftest.$ac_ext <<_ACEOF
+
+ #undef $ac_func
+
+-/* Override any gcc2 internal prototype to avoid an error. */
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
+ #ifdef __cplusplus
+ extern "C"
+-{
+ #endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+ char $ac_func ();
+ /* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++#if defined __stub_$ac_func || defined __stub___$ac_func
+ choke me
+-#else
+-char (*f) () = $ac_func;
+-#endif
+-#ifdef __cplusplus
+-}
+ #endif
+
+ int
+ main ()
+ {
+-return f != $ac_func;
++return $ac_func ();
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-eval "$as_ac_var=no"
++ eval "$as_ac_var=no"
+ fi
+-rm -f conftest.err conftest.$ac_objext \
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
++ac_res=`eval echo '${'$as_ac_var'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+@@ -6058,9 +6362,9 @@ done
+ for ac_func in snprintf vsnprintf vasprintf asprintf getcwd getwd
+ do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+-echo "$as_me:$LINENO: checking for $ac_func" >&5
+-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_var+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -6086,67 +6390,60 @@ cat >>conftest.$ac_ext <<_ACEOF
+
+ #undef $ac_func
+
+-/* Override any gcc2 internal prototype to avoid an error. */
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
+ #ifdef __cplusplus
+ extern "C"
+-{
+ #endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+ char $ac_func ();
+ /* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++#if defined __stub_$ac_func || defined __stub___$ac_func
+ choke me
+-#else
+-char (*f) () = $ac_func;
+-#endif
+-#ifdef __cplusplus
+-}
+ #endif
+
+ int
+ main ()
+ {
+-return f != $ac_func;
++return $ac_func ();
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-eval "$as_ac_var=no"
++ eval "$as_ac_var=no"
+ fi
+-rm -f conftest.err conftest.$ac_objext \
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
++ac_res=`eval echo '${'$as_ac_var'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+@@ -6161,9 +6458,9 @@ done
+ for ac_func in getrusage strsignal gettimeofday
+ do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+-echo "$as_me:$LINENO: checking for $ac_func" >&5
+-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_var+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -6189,67 +6486,60 @@ cat >>conftest.$ac_ext <<_ACEOF
+
+ #undef $ac_func
+
+-/* Override any gcc2 internal prototype to avoid an error. */
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
+ #ifdef __cplusplus
+ extern "C"
+-{
+ #endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+ char $ac_func ();
+ /* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++#if defined __stub_$ac_func || defined __stub___$ac_func
+ choke me
+-#else
+-char (*f) () = $ac_func;
+-#endif
+-#ifdef __cplusplus
+-}
+ #endif
+
+ int
+ main ()
+ {
+-return f != $ac_func;
++return $ac_func ();
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-eval "$as_ac_var=no"
++ eval "$as_ac_var=no"
+ fi
+-rm -f conftest.err conftest.$ac_objext \
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
++ac_res=`eval echo '${'$as_ac_var'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+@@ -6265,9 +6555,9 @@ done
+ for ac_func in getaddrinfo getnameinfo inet_ntop inet_ntoa
+ do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+-echo "$as_me:$LINENO: checking for $ac_func" >&5
+-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_var+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -6293,67 +6583,60 @@ cat >>conftest.$ac_ext <<_ACEOF
+
+ #undef $ac_func
+
+-/* Override any gcc2 internal prototype to avoid an error. */
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
+ #ifdef __cplusplus
+ extern "C"
+-{
+ #endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+ char $ac_func ();
+ /* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++#if defined __stub_$ac_func || defined __stub___$ac_func
+ choke me
+-#else
+-char (*f) () = $ac_func;
+-#endif
+-#ifdef __cplusplus
+-}
+ #endif
+
+ int
+ main ()
+ {
+-return f != $ac_func;
++return $ac_func ();
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-eval "$as_ac_var=no"
++ eval "$as_ac_var=no"
+ fi
+-rm -f conftest.err conftest.$ac_objext \
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
++ac_res=`eval echo '${'$as_ac_var'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+@@ -6368,9 +6651,9 @@ done
+ for ac_func in strndup mmap strlcpy
+ do
+ as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+-echo "$as_me:$LINENO: checking for $ac_func" >&5
+-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+-if eval "test \"\${$as_ac_var+set}\" = set"; then
++{ echo "$as_me:$LINENO: checking for $ac_func" >&5
++echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
++if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+@@ -6396,67 +6679,60 @@ cat >>conftest.$ac_ext <<_ACEOF
+
+ #undef $ac_func
+
+-/* Override any gcc2 internal prototype to avoid an error. */
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
+ #ifdef __cplusplus
+ extern "C"
+-{
+ #endif
+-/* We use char because int might match the return type of a gcc2
+- builtin and then its argument prototype would still apply. */
+ char $ac_func ();
+ /* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
++#if defined __stub_$ac_func || defined __stub___$ac_func
+ choke me
+-#else
+-char (*f) () = $ac_func;
+-#endif
+-#ifdef __cplusplus
+-}
+ #endif
+
+ int
+ main ()
+ {
+-return f != $ac_func;
++return $ac_func ();
+ ;
+ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-eval "$as_ac_var=no"
++ eval "$as_ac_var=no"
+ fi
+-rm -f conftest.err conftest.$ac_objext \
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
++ac_res=`eval echo '${'$as_ac_var'}'`
++ { echo "$as_me:$LINENO: result: $ac_res" >&5
++echo "${ECHO_T}$ac_res" >&6; }
+ if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+ #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+@@ -6466,8 +6742,8 @@ fi
+ done
+
+
+-echo "$as_me:$LINENO: checking whether snprintf is declared" >&5
+-echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking whether snprintf is declared" >&5
++echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6; }
+ if test "${ac_cv_have_decl_snprintf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -6482,7 +6758,7 @@ int
+ main ()
+ {
+ #ifndef snprintf
+- char *p = (char *) snprintf;
++ (void) snprintf;
+ #endif
+
+ ;
+@@ -6490,37 +6766,34 @@ main ()
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_snprintf=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_have_decl_snprintf=no
++ ac_cv_have_decl_snprintf=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5
+-echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5
++echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6; }
+ if test $ac_cv_have_decl_snprintf = yes; then
+
+ cat >>confdefs.h <<_ACEOF
+@@ -6535,8 +6808,8 @@ _ACEOF
+
+
+ fi
+-echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5
+-echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5
++echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6; }
+ if test "${ac_cv_have_decl_vsnprintf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -6551,7 +6824,7 @@ int
+ main ()
+ {
+ #ifndef vsnprintf
+- char *p = (char *) vsnprintf;
++ (void) vsnprintf;
+ #endif
+
+ ;
+@@ -6559,37 +6832,34 @@ main ()
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_vsnprintf=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_have_decl_vsnprintf=no
++ ac_cv_have_decl_vsnprintf=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5
+-echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5
++echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6; }
+ if test $ac_cv_have_decl_vsnprintf = yes; then
+
+ cat >>confdefs.h <<_ACEOF
+@@ -6604,8 +6874,8 @@ _ACEOF
+
+
+ fi
+-echo "$as_me:$LINENO: checking whether vasprintf is declared" >&5
+-echo $ECHO_N "checking whether vasprintf is declared... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking whether vasprintf is declared" >&5
++echo $ECHO_N "checking whether vasprintf is declared... $ECHO_C" >&6; }
+ if test "${ac_cv_have_decl_vasprintf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -6620,7 +6890,7 @@ int
+ main ()
+ {
+ #ifndef vasprintf
+- char *p = (char *) vasprintf;
++ (void) vasprintf;
+ #endif
+
+ ;
+@@ -6628,37 +6898,34 @@ main ()
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_vasprintf=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_have_decl_vasprintf=no
++ ac_cv_have_decl_vasprintf=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_have_decl_vasprintf" >&5
+-echo "${ECHO_T}$ac_cv_have_decl_vasprintf" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_vasprintf" >&5
++echo "${ECHO_T}$ac_cv_have_decl_vasprintf" >&6; }
+ if test $ac_cv_have_decl_vasprintf = yes; then
+
+ cat >>confdefs.h <<_ACEOF
+@@ -6673,8 +6940,8 @@ _ACEOF
+
+
+ fi
+-echo "$as_me:$LINENO: checking whether asprintf is declared" >&5
+-echo $ECHO_N "checking whether asprintf is declared... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking whether asprintf is declared" >&5
++echo $ECHO_N "checking whether asprintf is declared... $ECHO_C" >&6; }
+ if test "${ac_cv_have_decl_asprintf+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -6689,7 +6956,7 @@ int
+ main ()
+ {
+ #ifndef asprintf
+- char *p = (char *) asprintf;
++ (void) asprintf;
+ #endif
+
+ ;
+@@ -6697,37 +6964,34 @@ main ()
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_asprintf=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_have_decl_asprintf=no
++ ac_cv_have_decl_asprintf=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_have_decl_asprintf" >&5
+-echo "${ECHO_T}$ac_cv_have_decl_asprintf" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_asprintf" >&5
++echo "${ECHO_T}$ac_cv_have_decl_asprintf" >&6; }
+ if test $ac_cv_have_decl_asprintf = yes; then
+
+ cat >>confdefs.h <<_ACEOF
+@@ -6742,8 +7006,8 @@ _ACEOF
+
+
+ fi
+-echo "$as_me:$LINENO: checking whether strndup is declared" >&5
+-echo $ECHO_N "checking whether strndup is declared... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking whether strndup is declared" >&5
++echo $ECHO_N "checking whether strndup is declared... $ECHO_C" >&6; }
+ if test "${ac_cv_have_decl_strndup+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -6758,7 +7022,7 @@ int
+ main ()
+ {
+ #ifndef strndup
+- char *p = (char *) strndup;
++ (void) strndup;
+ #endif
+
+ ;
+@@ -6766,37 +7030,34 @@ main ()
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_cv_have_decl_strndup=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_have_decl_strndup=no
++ ac_cv_have_decl_strndup=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_have_decl_strndup" >&5
+-echo "${ECHO_T}$ac_cv_have_decl_strndup" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_strndup" >&5
++echo "${ECHO_T}$ac_cv_have_decl_strndup" >&6; }
+ if test $ac_cv_have_decl_strndup = yes; then
+
+ cat >>confdefs.h <<_ACEOF
+@@ -6814,8 +7075,8 @@ fi
+
+
+
+-echo "$as_me:$LINENO: checking if mmap() supports MAP_FAILED" >&5
+-echo $ECHO_N "checking if mmap() supports MAP_FAILED... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking if mmap() supports MAP_FAILED" >&5
++echo $ECHO_N "checking if mmap() supports MAP_FAILED... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -6841,26 +7102,22 @@ if (mmap (NULL, 0, 0, 0, 0, 0) == MAP_FA
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ :
+ else
+ echo "$as_me: failed program was:" >&5
+@@ -6874,13 +7131,14 @@ _ACEOF
+
+
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+-echo "$as_me:$LINENO: result: " >&5
+-echo "${ECHO_T}" >&6
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ echo "$as_me:$LINENO: result: " >&5
++echo "${ECHO_T}" >&6; }
+
+
+-echo "$as_me:$LINENO: checking for vararg macro support" >&5
+-echo $ECHO_N "checking for vararg macro support... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for vararg macro support" >&5
++echo $ECHO_N "checking for vararg macro support... $ECHO_C" >&6; }
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+@@ -6897,28 +7155,24 @@ func("a"); func("a", "b"); func("a", "b"
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
+- echo "$as_me:$LINENO: result: yes" >&5
+-echo "${ECHO_T}yes" >&6
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
++ { echo "$as_me:$LINENO: result: yes" >&5
++echo "${ECHO_T}yes" >&6; }
+
+ cat >>confdefs.h <<\_ACEOF
+ #define HAVE_VARARG_MACROS
+@@ -6928,13 +7182,14 @@ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-echo "$as_me:$LINENO: result: no" >&5
+-echo "${ECHO_T}no" >&6
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+-echo "$as_me:$LINENO: checking for __va_copy" >&5
+-echo $ECHO_N "checking for __va_copy... $ECHO_C" >&6
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++{ echo "$as_me:$LINENO: checking for __va_copy" >&5
++echo $ECHO_N "checking for __va_copy... $ECHO_C" >&6; }
+ if test "${samba_cv_HAVE_VA_COPY+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -6956,38 +7211,36 @@ __va_copy(ap1,ap2);
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>conftest.er1
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext &&
++ $as_test_x conftest$ac_exeext; then
+ samba_cv_HAVE_VA_COPY=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-samba_cv_HAVE_VA_COPY=no
++ samba_cv_HAVE_VA_COPY=no
+ fi
+-rm -f conftest.err conftest.$ac_objext \
++
++rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: $samba_cv_HAVE_VA_COPY" >&5
+-echo "${ECHO_T}$samba_cv_HAVE_VA_COPY" >&6
++{ echo "$as_me:$LINENO: result: $samba_cv_HAVE_VA_COPY" >&5
++echo "${ECHO_T}$samba_cv_HAVE_VA_COPY" >&6; }
+ if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
+
+ cat >>confdefs.h <<\_ACEOF
+@@ -6996,8 +7249,8 @@ _ACEOF
+
+ fi
+
+-echo "$as_me:$LINENO: checking for C99 vsnprintf" >&5
+-echo $ECHO_N "checking for C99 vsnprintf... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for C99 vsnprintf" >&5
++echo $ECHO_N "checking for C99 vsnprintf... $ECHO_C" >&6; }
+ if test "${rsync_cv_HAVE_C99_VSNPRINTF+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -7032,13 +7285,22 @@ main() { foo("hello"); }
+
+ _ACEOF
+ rm -f conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
++ { (case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+@@ -7051,11 +7313,13 @@ sed 's/^/| /' conftest.$ac_ext >&5
+ ( exit $ac_status )
+ rsync_cv_HAVE_C99_VSNPRINTF=no
+ fi
+-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
++
++
+ fi
+-echo "$as_me:$LINENO: result: $rsync_cv_HAVE_C99_VSNPRINTF" >&5
+-echo "${ECHO_T}$rsync_cv_HAVE_C99_VSNPRINTF" >&6
++{ echo "$as_me:$LINENO: result: $rsync_cv_HAVE_C99_VSNPRINTF" >&5
++echo "${ECHO_T}$rsync_cv_HAVE_C99_VSNPRINTF" >&6; }
+ if test x"$rsync_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
+
+ cat >>confdefs.h <<\_ACEOF
+@@ -7065,8 +7329,8 @@ _ACEOF
+ fi
+
+
+-echo "$as_me:$LINENO: checking for working socketpair" >&5
+-echo $ECHO_N "checking for working socketpair... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for working socketpair" >&5
++echo $ECHO_N "checking for working socketpair... $ECHO_C" >&6; }
+ if test "${rsync_cv_HAVE_SOCKETPAIR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -7090,13 +7354,22 @@ main() {
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+-if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+- (eval $ac_link) 2>&5
++if { (ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
++ { (case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+@@ -7109,11 +7382,13 @@ sed 's/^/| /' conftest.$ac_ext >&5
+ ( exit $ac_status )
+ rsync_cv_HAVE_SOCKETPAIR=no
+ fi
+-rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
++
++
+ fi
+-echo "$as_me:$LINENO: result: $rsync_cv_HAVE_SOCKETPAIR" >&5
+-echo "${ECHO_T}$rsync_cv_HAVE_SOCKETPAIR" >&6
++{ echo "$as_me:$LINENO: result: $rsync_cv_HAVE_SOCKETPAIR" >&5
++echo "${ECHO_T}$rsync_cv_HAVE_SOCKETPAIR" >&6; }
+ if test x"$rsync_cv_HAVE_SOCKETPAIR" = x"yes"; then
+
+ cat >>confdefs.h <<\_ACEOF
+@@ -7122,8 +7397,8 @@ _ACEOF
+
+ fi
+
+-echo "$as_me:$LINENO: checking for struct sockaddr_storage.ss_family" >&5
+-echo $ECHO_N "checking for struct sockaddr_storage.ss_family... $ECHO_C" >&6
++{ echo "$as_me:$LINENO: checking for struct sockaddr_storage.ss_family" >&5
++echo $ECHO_N "checking for struct sockaddr_storage.ss_family... $ECHO_C" >&6; }
+ if test "${ac_cv_member_struct_sockaddr_storage_ss_family+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+@@ -7146,32 +7421,28 @@ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_cv_member_struct_sockaddr_storage_ss_family=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-cat >conftest.$ac_ext <<_ACEOF
++ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h. */
+ _ACEOF
+ cat confdefs.h >>conftest.$ac_ext
+@@ -7190,39 +7461,37 @@ return 0;
+ }
+ _ACEOF
+ rm -f conftest.$ac_objext
+-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+- (eval $ac_compile) 2>conftest.er1
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
++ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); } &&
+- { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; } &&
+- { ac_try='test -s conftest.$ac_objext'
+- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+- (eval $ac_try) 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; }; then
++ (exit $ac_status); } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then
+ ac_cv_member_struct_sockaddr_storage_ss_family=yes
+ else
+ echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+
+-ac_cv_member_struct_sockaddr_storage_ss_family=no
++ ac_cv_member_struct_sockaddr_storage_ss_family=no
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+-echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_storage_ss_family" >&5
+-echo "${ECHO_T}$ac_cv_member_struct_sockaddr_storage_ss_family" >&6
++{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_storage_ss_family" >&5
++echo "${ECHO_T}$ac_cv_member_struct_sockaddr_storage_ss_family" >&6; }
+ if test $ac_cv_member_struct_sockaddr_storage_ss_family = yes; then
+
+ cat >>confdefs.h <<\_ACEOF
+@@ -7234,6 +7503,208 @@ fi
+
+
+
++if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
++set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ case $PKG_CONFIG in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++PKG_CONFIG=$ac_cv_path_PKG_CONFIG
++if test -n "$PKG_CONFIG"; then
++ { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
++echo "${ECHO_T}$PKG_CONFIG" >&6; }
++else
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_PKG_CONFIG"; then
++ ac_pt_PKG_CONFIG=$PKG_CONFIG
++ # Extract the first word of "pkg-config", so it can be a program name with args.
++set dummy pkg-config; ac_word=$2
++{ echo "$as_me:$LINENO: checking for $ac_word" >&5
++echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
++if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
++ echo $ECHO_N "(cached) $ECHO_C" >&6
++else
++ case $ac_pt_PKG_CONFIG in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
++ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
++if test -n "$ac_pt_PKG_CONFIG"; then
++ { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
++echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; }
++else
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++fi
++
++ if test "x$ac_pt_PKG_CONFIG" = x; then
++ PKG_CONFIG=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet. If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&5
++echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
++whose name does not start with the host triplet. If you think this
++configuration is useful to you, please write to autoconf@gnu.org." >&2;}
++ac_tool_warned=yes ;;
++esac
++ PKG_CONFIG=$ac_pt_PKG_CONFIG
++ fi
++else
++ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
++fi
++
++fi
++if test -n "$PKG_CONFIG"; then
++ _pkg_min_version=0.9.0
++ { echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
++echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; }
++ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
++ { echo "$as_me:$LINENO: result: yes" >&5
++echo "${ECHO_T}yes" >&6; }
++ else
++ { echo "$as_me:$LINENO: result: no" >&5
++echo "${ECHO_T}no" >&6; }
++ PKG_CONFIG=""
++ fi
++
++fi
++
++pkg_failed=no
++{ echo "$as_me:$LINENO: checking for AVAHI" >&5
++echo $ECHO_N "checking for AVAHI... $ECHO_C" >&6; }
++
++if test -n "$PKG_CONFIG"; then
++ if test -n "$AVAHI_CFLAGS"; then
++ pkg_cv_AVAHI_CFLAGS="$AVAHI_CFLAGS"
++ else
++ if test -n "$PKG_CONFIG" && \
++ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"avahi-client >= 0.6.5\"") >&5
++ ($PKG_CONFIG --exists --print-errors "avahi-client >= 0.6.5") 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ pkg_cv_AVAHI_CFLAGS=`$PKG_CONFIG --cflags "avahi-client >= 0.6.5" 2>/dev/null`
++else
++ pkg_failed=yes
++fi
++ fi
++else
++ pkg_failed=untried
++fi
++if test -n "$PKG_CONFIG"; then
++ if test -n "$AVAHI_LIBS"; then
++ pkg_cv_AVAHI_LIBS="$AVAHI_LIBS"
++ else
++ if test -n "$PKG_CONFIG" && \
++ { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"avahi-client >= 0.6.5\"") >&5
++ ($PKG_CONFIG --exists --print-errors "avahi-client >= 0.6.5") 2>&5
++ ac_status=$?
++ echo "$as_me:$LINENO: \$? = $ac_status" >&5
++ (exit $ac_status); }; then
++ pkg_cv_AVAHI_LIBS=`$PKG_CONFIG --libs "avahi-client >= 0.6.5" 2>/dev/null`
++else
++ pkg_failed=yes
++fi
++ fi
++else
++ pkg_failed=untried
++fi
++
++
++
++if test $pkg_failed = yes; then
++
++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
++ _pkg_short_errors_supported=yes
++else
++ _pkg_short_errors_supported=no
++fi
++ if test $_pkg_short_errors_supported = yes; then
++ AVAHI_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "avahi-client >= 0.6.5"`
++ else
++ AVAHI_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "avahi-client >= 0.6.5"`
++ fi
++ # Put the nasty error message in config.log where it belongs
++ echo "$AVAHI_PKG_ERRORS" >&5
++
++ ZEROCONF_DISTCC_OBJS=""
++ZEROCONF_DISTCCD_OBJS=""
++elif test $pkg_failed = untried; then
++ ZEROCONF_DISTCC_OBJS=""
++ZEROCONF_DISTCCD_OBJS=""
++else
++ AVAHI_CFLAGS=$pkg_cv_AVAHI_CFLAGS
++ AVAHI_LIBS=$pkg_cv_AVAHI_LIBS
++ { echo "$as_me:$LINENO: result: yes" >&5
++echo "${ECHO_T}yes" >&6; }
++
++cat >>confdefs.h <<\_ACEOF
++#define HAVE_AVAHI 1
++_ACEOF
++
++CFLAGS="$CFLAGS $AVAHI_CFLAGS"
++LIBS="$LIBS $AVAHI_LIBS"
++ZEROCONF_DISTCC_OBJS="src/zeroconf.o src/gcc-id.o"
++ZEROCONF_DISTCCD_OBJS="src/zeroconf-reg.o src/gcc-id.o"
++fi
++
++
++
++
++
+
+
+
+@@ -7243,7 +7714,8 @@ cat >>confdefs.h <<_ACEOF
+ #define GNU_HOST "$host"
+ _ACEOF
+
+- ac_config_files="$ac_config_files Makefile popt/.stamp-conf lzo/.stamp-conf"
++ac_config_files="$ac_config_files Makefile popt/.stamp-conf lzo/.stamp-conf"
++
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+ # tests run on this system so they can be shared between configure
+@@ -7262,39 +7734,58 @@ _ACEOF
+
+ # The following way of writing the cache mishandles newlines in values,
+ # but we know of no workaround that is simple, portable, and efficient.
+-# So, don't put newlines in cache variables' values.
++# So, we kill variables containing newlines.
+ # Ultrix sh set writes to stderr and can't be redirected directly,
+ # and sets the high bit in the cache file unless we assign to the vars.
+-{
++(
++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
++ eval ac_val=\$$ac_var
++ case $ac_val in #(
++ *${as_nl}*)
++ case $ac_var in #(
++ *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
++echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
++ esac
++ case $ac_var in #(
++ _ | IFS | as_nl) ;; #(
++ *) $as_unset $ac_var ;;
++ esac ;;
++ esac
++ done
++
+ (set) 2>&1 |
+- case `(ac_space=' '; set | grep ac_space) 2>&1` in
+- *ac_space=\ *)
++ case $as_nl`(ac_space=' '; set) 2>&1` in #(
++ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+- ;;
++ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+- sed -n \
+- "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+- esac;
+-} |
++ esac |
++ sort
++) |
+ sed '
++ /^ac_cv_env_/b end
+ t clear
+- : clear
++ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+- /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+- : end' >>confcache
+-if diff $cache_file confcache >/dev/null 2>&1; then :; else
+- if test -w $cache_file; then
+- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
++ :end' >>confcache
++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
++ if test -w "$cache_file"; then
++ test "x$cache_file" != "x/dev/null" &&
++ { echo "$as_me:$LINENO: updating cache $cache_file" >&5
++echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+- echo "not updating unwritable cache $cache_file"
++ { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
++echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+ fi
+ rm -f confcache
+@@ -7303,32 +7794,18 @@ test "x$prefix" = xNONE && prefix=$ac_de
+ # Let make expand exec_prefix.
+ test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+-# VPATH may cause trouble with some makes, so we remove $(srcdir),
+-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+-# trailing colons and then remove the whole line if VPATH becomes empty
+-# (actually we leave an empty line to preserve line numbers).
+-if test "x$srcdir" = x.; then
+- ac_vpsub='/^[ ]*VPATH[ ]*=/{
+-s/:*\$(srcdir):*/:/;
+-s/:*\${srcdir}:*/:/;
+-s/:*@srcdir@:*/:/;
+-s/^\([^=]*=[ ]*\):*/\1/;
+-s/:*$//;
+-s/^[^=]*=[ ]*$//;
+-}'
+-fi
+-
+ DEFS=-DHAVE_CONFIG_H
+
+ ac_libobjs=
+ ac_ltlibobjs=
+ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+- ac_i=`echo "$ac_i" |
+- sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+- # 2. Add them.
+- ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
++ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
++ ac_i=`echo "$ac_i" | sed "$ac_script"`
++ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
++ # will be set to the directory where LIBOBJS objects are built.
++ ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
++ ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+ done
+ LIBOBJS=$ac_libobjs
+
+@@ -7359,17 +7836,45 @@ cat >>$CONFIG_STATUS <<\_ACEOF
+ ## M4sh Initialization. ##
+ ## --------------------- ##
+
+-# Be Bourne compatible
++# Be more Bourne compatible
++DUALCASE=1; export DUALCASE # for MKS sh
+ if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+-elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+- set -o posix
++ setopt NO_GLOB_SUBST
++else
++ case `(set -o) 2>/dev/null` in
++ *posix*) set -o posix ;;
++esac
++
++fi
++
++
++
++
++# PATH needs CR
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
++
++# The user is always right.
++if test "${PATH_SEPARATOR+set}" != set; then
++ echo "#! /bin/sh" >conf$$.sh
++ echo "exit 0" >>conf$$.sh
++ chmod +x conf$$.sh
++ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
++ PATH_SEPARATOR=';'
++ else
++ PATH_SEPARATOR=:
++ fi
++ rm -f conf$$.sh
+ fi
+-DUALCASE=1; export DUALCASE # for MKS sh
+
+ # Support unset when possible.
+ if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+@@ -7379,33 +7884,69 @@ else
+ fi
+
+
+-# Work around bugs in pre-3.0 UWIN ksh.
+-$as_unset ENV MAIL MAILPATH
+-PS1='$ '
+-PS2='> '
+-PS4='+ '
++# IFS
++# We need space, tab and new line, in precisely that order. Quoting is
++# there to prevent editors from complaining about space-tab.
++# (If _AS_PATH_WALK were called with IFS unset, it would disable word
++# splitting by setting IFS to empty value.)
++as_nl='
++'
++IFS=" "" $as_nl"
+
+-# NLS nuisances.
+-for as_var in \
+- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
++# Find who we are. Look in the path if we contain no directory separator.
++case $0 in
++ *[\\/]* ) as_myself=$0 ;;
++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++done
++IFS=$as_save_IFS
++
++ ;;
++esac
++# We did not find ourselves, most probably we were run as `sh COMMAND'
++# in which case we are not to be found in the path.
++if test "x$as_myself" = x; then
++ as_myself=$0
++fi
++if test ! -f "$as_myself"; then
++ echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
++ { (exit 1); exit 1; }
++fi
++
++# Work around bugs in pre-3.0 UWIN ksh.
++for as_var in ENV MAIL MAILPATH
++do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
++done
++PS1='$ '
++PS2='> '
++PS4='+ '
++
++# NLS nuisances.
++for as_var in \
++ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
++ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+ do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+- $as_unset $as_var
++ ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+ fi
+ done
+
+ # Required to use basename.
+-if expr a : '\(a\)' >/dev/null 2>&1; then
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+ else
+ as_expr=false
+ fi
+
+-if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+ else
+ as_basename=false
+@@ -7413,159 +7954,120 @@ fi
+
+
+ # Name of the executable.
+-as_me=`$as_basename "$0" ||
++as_me=`$as_basename -- "$0" ||
+ $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+- X"$0" : 'X\(/\)$' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X/"$0" |
+- sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+- /^X\/\(\/\/\)$/{ s//\1/; q; }
+- /^X\/\(\/\).*/{ s//\1/; q; }
+- s/.*/./; q'`
+-
+-
+-# PATH needs CR, and LINENO needs CR and PATH.
+-# Avoid depending upon Character Ranges.
+-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+-as_cr_digits='0123456789'
+-as_cr_alnum=$as_cr_Letters$as_cr_digits
++ sed '/^.*\/\([^/][^/]*\)\/*$/{
++ s//\1/
++ q
++ }
++ /^X\/\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\/\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
+
+-# The user is always right.
+-if test "${PATH_SEPARATOR+set}" != set; then
+- echo "#! /bin/sh" >conf$$.sh
+- echo "exit 0" >>conf$$.sh
+- chmod +x conf$$.sh
+- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+- PATH_SEPARATOR=';'
+- else
+- PATH_SEPARATOR=:
+- fi
+- rm -f conf$$.sh
+-fi
++# CDPATH.
++$as_unset CDPATH
+
+
+- as_lineno_1=$LINENO
+- as_lineno_2=$LINENO
+- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+- test "x$as_lineno_1" != "x$as_lineno_2" &&
+- test "x$as_lineno_3" = "x$as_lineno_2" || {
+- # Find who we are. Look in the path if we contain no path at all
+- # relative or not.
+- case $0 in
+- *[\\/]* ) as_myself=$0 ;;
+- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+-done
+
+- ;;
+- esac
+- # We did not find ourselves, most probably we were run as `sh COMMAND'
+- # in which case we are not to be found in the path.
+- if test "x$as_myself" = x; then
+- as_myself=$0
+- fi
+- if test ! -f "$as_myself"; then
+- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+-echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+- { (exit 1); exit 1; }; }
+- fi
+- case $CONFIG_SHELL in
+- '')
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for as_base in sh bash ksh sh5; do
+- case $as_dir in
+- /*)
+- if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+- CONFIG_SHELL=$as_dir/$as_base
+- export CONFIG_SHELL
+- exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+- fi;;
+- esac
+- done
+-done
+-;;
+- esac
++ test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+- # line-number line before each line; the second 'sed' does the real
+- # work. The second script uses 'N' to pair each line-number line
+- # with the numbered line, and appends trailing '-' during
+- # substitution so that $LINENO is not a special case at line end.
++ # line-number line after each line using $LINENO; the second 'sed'
++ # does the real work. The second script uses 'N' to pair each
++ # line-number line with the line containing $LINENO, and appends
++ # trailing '-' during substitution so that $LINENO is not a special
++ # case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+- sed '=' <$as_myself |
++ # scripts with optimization help from Paolo Bonzini. Blame Lee
++ # E. McMahon (1931-1989) for sed's syntax. :-)
++ sed -n '
++ p
++ /[$]LINENO/=
++ ' <$as_myself |
+ sed '
++ s/[$]LINENO.*/&-/
++ t lineno
++ b
++ :lineno
+ N
+- s,$,-,
+- : loop
+- s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
++ :loop
++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+- s,-$,,
+- s,^['$as_cr_digits']*\n,,
++ s/-\n.*//
+ ' >$as_me.lineno &&
+- chmod +x $as_me.lineno ||
+- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+-echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
++ chmod +x "$as_me.lineno" ||
++ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+- # original and so on. Autoconf is especially sensible to this).
+- . ./$as_me.lineno
++ # original and so on. Autoconf is especially sensitive to this).
++ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+ }
+
+
+-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+- *c*,-n*) ECHO_N= ECHO_C='
+-' ECHO_T=' ' ;;
+- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
++ as_dirname=dirname
++else
++ as_dirname=false
++fi
++
++ECHO_C= ECHO_N= ECHO_T=
++case `echo -n x` in
++-n*)
++ case `echo 'x\c'` in
++ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
++ *) ECHO_C='\c';;
++ esac;;
++*)
++ ECHO_N='-n';;
+ esac
+
+-if expr a : '\(a\)' >/dev/null 2>&1; then
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+ else
+ as_expr=false
+ fi
+
+ rm -f conf$$ conf$$.exe conf$$.file
++if test -d conf$$.dir; then
++ rm -f conf$$.dir/conf$$.file
++else
++ rm -f conf$$.dir
++ mkdir conf$$.dir
++fi
+ echo >conf$$.file
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+- # We could just check for DJGPP; but this test a) works b) is more generic
+- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+- if test -f conf$$.exe; then
+- # Don't use ln at all; we don't have any links
++ as_ln_s='ln -s'
++ # ... but there are two gotchas:
++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
++ # In both cases, we have to default to `cp -p'.
++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+- else
+- as_ln_s='ln -s'
+- fi
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+-rm -f conf$$ conf$$.exe conf$$.file
++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
++rmdir conf$$.dir 2>/dev/null
+
+ if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+@@ -7574,7 +8076,28 @@ else
+ as_mkdir_p=false
+ fi
+
+-as_executable_p="test -f"
++if test -x / >/dev/null 2>&1; then
++ as_test_x='test -x'
++else
++ if ls -dL / >/dev/null 2>&1; then
++ as_ls_L_option=L
++ else
++ as_ls_L_option=
++ fi
++ as_test_x='
++ eval sh -c '\''
++ if test -d "$1"; then
++ test -d "$1/.";
++ else
++ case $1 in
++ -*)set "./$1";;
++ esac;
++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
++ ???[sx]*):;;*)false;;esac;fi
++ '\'' sh
++ '
++fi
++as_executable_p=$as_test_x
+
+ # Sed expression to map a string onto a valid CPP name.
+ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+@@ -7583,31 +8106,14 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P
+ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+-# IFS
+-# We need space, tab and new line, in precisely that order.
+-as_nl='
+-'
+-IFS=" $as_nl"
+-
+-# CDPATH.
+-$as_unset CDPATH
+-
+ exec 6>&1
+
+-# Open the log real soon, to keep \$[0] and so on meaningful, and to
++# Save the log message, to keep $[0] and so on meaningful, and to
+ # report actual input values of CONFIG_FILES etc. instead of their
+-# values after options handling. Logging --version etc. is OK.
+-exec 5>>config.log
+-{
+- echo
+- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+-## Running $as_me. ##
+-_ASBOX
+-} >&5
+-cat >&5 <<_CSEOF
+-
++# values after options handling.
++ac_log="
+ This file was extended by distcc $as_me 2.18.3, which was
+-generated by GNU Autoconf 2.59. Invocation command line was
++generated by GNU Autoconf 2.61. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+@@ -7615,30 +8121,19 @@ generated by GNU Autoconf 2.59. Invocat
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+-_CSEOF
+-echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+-echo >&5
++on `(hostname || uname -n) 2>/dev/null | sed 1q`
++"
++
+ _ACEOF
+
++cat >>$CONFIG_STATUS <<_ACEOF
+ # Files that config.status was made for.
+-if test -n "$ac_config_files"; then
+- echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+-fi
+-
+-if test -n "$ac_config_headers"; then
+- echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+-fi
++config_files="$ac_config_files"
++config_headers="$ac_config_headers"
+
+-if test -n "$ac_config_links"; then
+- echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+-fi
+-
+-if test -n "$ac_config_commands"; then
+- echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+-fi
++_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+-
+ ac_cs_usage="\
+ \`$as_me' instantiates files from templates according to the
+ current configuration.
+@@ -7646,7 +8141,7 @@ current configuration.
+ Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+- -V, --version print version number, then exit
++ -V, --version print version number and configuration settings, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+@@ -7662,19 +8157,21 @@ Configuration headers:
+ $config_headers
+
+ Report bugs to <bug-autoconf@gnu.org>."
+-_ACEOF
+
++_ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF
+ ac_cs_version="\\
+ distcc config.status 2.18.3
+-configured by $0, generated by GNU Autoconf 2.59,
+- with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
++configured by $0, generated by GNU Autoconf 2.61,
++ with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+-Copyright (C) 2003 Free Software Foundation, Inc.
++Copyright (C) 2006 Free Software Foundation, Inc.
+ This config.status script is free software; the Free Software Foundation
+ gives unlimited permission to copy, distribute and modify it."
+-srcdir=$srcdir
+-INSTALL="$INSTALL"
++
++ac_pwd='$ac_pwd'
++srcdir='$srcdir'
++INSTALL='$INSTALL'
+ _ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+@@ -7685,39 +8182,24 @@ while test $# != 0
+ do
+ case $1 in
+ --*=*)
+- ac_option=`expr "x$1" : 'x\([^=]*\)='`
+- ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
++ ac_option=`expr "X$1" : 'X\([^=]*\)='`
++ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+- -*)
++ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+- *) # This is not an option, so the user has probably given explicit
+- # arguments.
+- ac_option=$1
+- ac_need_defaults=false;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+-_ACEOF
+-cat >>$CONFIG_STATUS <<\_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+- --version | --vers* | -V )
+- echo "$ac_cs_version"; exit 0 ;;
+- --he | --h)
+- # Conflict between --help and --header
+- { { echo "$as_me:$LINENO: error: ambiguous option: $1
+-Try \`$0 --help' for more information." >&5
+-echo "$as_me: error: ambiguous option: $1
+-Try \`$0 --help' for more information." >&2;}
+- { (exit 1); exit 1; }; };;
+- --help | --hel | -h )
+- echo "$ac_cs_usage"; exit 0 ;;
+- --debug | --d* | -d )
++ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
++ echo "$ac_cs_version"; exit ;;
++ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+@@ -7727,18 +8209,24 @@ Try \`$0 --help' for more information."
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
++ --he | --h)
++ # Conflict between --help and --header
++ { echo "$as_me: error: ambiguous option: $1
++Try \`$0 --help' for more information." >&2
++ { (exit 1); exit 1; }; };;
++ --help | --hel | -h )
++ echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+-Try \`$0 --help' for more information." >&5
+-echo "$as_me: error: unrecognized option: $1
+-Try \`$0 --help' for more information." >&2;}
++ -*) { echo "$as_me: error: unrecognized option: $1
++Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; } ;;
+
+- *) ac_config_targets="$ac_config_targets $1" ;;
++ *) ac_config_targets="$ac_config_targets $1"
++ ac_need_defaults=false ;;
+
+ esac
+ shift
+@@ -7754,31 +8242,45 @@ fi
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF
+ if \$ac_cs_recheck; then
+- echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+- exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
++ echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
++ CONFIG_SHELL=$SHELL
++ export CONFIG_SHELL
++ exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ fi
+
+ _ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF
++exec 5>>config.log
++{
++ echo
++ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
++## Running $as_me. ##
++_ASBOX
++ echo "$ac_log"
++} >&5
+
+-
+-
+-
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF
++_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
++
++# Handling of arguments.
+ for ac_config_target in $ac_config_targets
+ do
+- case "$ac_config_target" in
+- # Handling of arguments.
+- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+- "popt/.stamp-conf" ) CONFIG_FILES="$CONFIG_FILES popt/.stamp-conf" ;;
+- "lzo/.stamp-conf" ) CONFIG_FILES="$CONFIG_FILES lzo/.stamp-conf" ;;
+- "src/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;;
++ case $ac_config_target in
++ "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;;
++ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
++ "popt/.stamp-conf") CONFIG_FILES="$CONFIG_FILES popt/.stamp-conf" ;;
++ "lzo/.stamp-conf") CONFIG_FILES="$CONFIG_FILES lzo/.stamp-conf" ;;
++
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+ echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+ done
+
++
+ # If the user did not use the arguments to specify the items to instantiate,
+ # then the envvar interface is used. Set only those that are not.
+ # We use the long form for the default assignment because of an extremely
+@@ -7789,569 +8291,525 @@ if $ac_need_defaults; then
+ fi
+
+ # Have a temporary directory for convenience. Make it in the build tree
+-# simply because there is no reason to put it here, and in addition,
++# simply because there is no reason against having it here, and in addition,
+ # creating and moving files from /tmp can sometimes cause problems.
+-# Create a temporary directory, and hook for its removal unless debugging.
++# Hook for its removal unless debugging.
++# Note that there is a small window in which the directory will not be cleaned:
++# after its creation but before its name has been assigned to `$tmp'.
+ $debug ||
+ {
+- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
++ tmp=
++ trap 'exit_status=$?
++ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
++' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+ }
+-
+ # Create a (secure) tmp directory for tmp files.
+
+ {
+- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
++ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+ } ||
+ {
+- tmp=./confstat$$-$RANDOM
+- (umask 077 && mkdir $tmp)
++ tmp=./conf$$-$RANDOM
++ (umask 077 && mkdir "$tmp")
+ } ||
+ {
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+ }
+
+-_ACEOF
+-
+-cat >>$CONFIG_STATUS <<_ACEOF
+-
+ #
+-# CONFIG_FILES section.
++# Set up the sed scripts for CONFIG_FILES section.
+ #
+
+ # No need to generate the scripts if there are no CONFIG_FILES.
+ # This happens for instance when ./config.status config.h
+-if test -n "\$CONFIG_FILES"; then
+- # Protect against being on the right side of a sed subst in config.status.
+- sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+- s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+-s,@SHELL@,$SHELL,;t t
+-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+-s,@exec_prefix@,$exec_prefix,;t t
+-s,@prefix@,$prefix,;t t
+-s,@program_transform_name@,$program_transform_name,;t t
+-s,@bindir@,$bindir,;t t
+-s,@sbindir@,$sbindir,;t t
+-s,@libexecdir@,$libexecdir,;t t
+-s,@datadir@,$datadir,;t t
+-s,@sysconfdir@,$sysconfdir,;t t
+-s,@sharedstatedir@,$sharedstatedir,;t t
+-s,@localstatedir@,$localstatedir,;t t
+-s,@libdir@,$libdir,;t t
+-s,@includedir@,$includedir,;t t
+-s,@oldincludedir@,$oldincludedir,;t t
+-s,@infodir@,$infodir,;t t
+-s,@mandir@,$mandir,;t t
+-s,@build_alias@,$build_alias,;t t
+-s,@host_alias@,$host_alias,;t t
+-s,@target_alias@,$target_alias,;t t
+-s,@DEFS@,$DEFS,;t t
+-s,@ECHO_C@,$ECHO_C,;t t
+-s,@ECHO_N@,$ECHO_N,;t t
+-s,@ECHO_T@,$ECHO_T,;t t
+-s,@LIBS@,$LIBS,;t t
+-s,@build@,$build,;t t
+-s,@build_cpu@,$build_cpu,;t t
+-s,@build_vendor@,$build_vendor,;t t
+-s,@build_os@,$build_os,;t t
+-s,@host@,$host,;t t
+-s,@host_cpu@,$host_cpu,;t t
+-s,@host_vendor@,$host_vendor,;t t
+-s,@host_os@,$host_os,;t t
+-s,@docdir@,$docdir,;t t
+-s,@CC@,$CC,;t t
+-s,@CFLAGS@,$CFLAGS,;t t
+-s,@LDFLAGS@,$LDFLAGS,;t t
+-s,@CPPFLAGS@,$CPPFLAGS,;t t
+-s,@ac_ct_CC@,$ac_ct_CC,;t t
+-s,@EXEEXT@,$EXEEXT,;t t
+-s,@OBJEXT@,$OBJEXT,;t t
+-s,@GNOME_PACKAGES@,$GNOME_PACKAGES,;t t
+-s,@GNOME_CFLAGS@,$GNOME_CFLAGS,;t t
+-s,@GNOME_LIBS@,$GNOME_LIBS,;t t
+-s,@INSTALL_GNOME@,$INSTALL_GNOME,;t t
+-s,@SET_MAKE@,$SET_MAKE,;t t
+-s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+-s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+-s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+-s,@PYTHON@,$PYTHON,;t t
+-s,@CPP@,$CPP,;t t
+-s,@EGREP@,$EGREP,;t t
+-s,@BUILD_POPT@,$BUILD_POPT,;t t
+-s,@GNOME_BIN@,$GNOME_BIN,;t t
+-s,@LIBOBJS@,$LIBOBJS,;t t
+-s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+-CEOF
+-
+-_ACEOF
+-
+- cat >>$CONFIG_STATUS <<\_ACEOF
+- # Split the substitutions into bite-sized pieces for seds with
+- # small command number limits, like on Digital OSF/1 and HP-UX.
+- ac_max_sed_lines=48
+- ac_sed_frag=1 # Number of current file.
+- ac_beg=1 # First line for current file.
+- ac_end=$ac_max_sed_lines # Line after last line for current file.
+- ac_more_lines=:
+- ac_sed_cmds=
+- while $ac_more_lines; do
+- if test $ac_beg -gt 1; then
+- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+- else
+- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+- fi
+- if test ! -s $tmp/subs.frag; then
+- ac_more_lines=false
+- else
+- # The purpose of the label and of the branching condition is to
+- # speed up the sed processing (if there are no `@' at all, there
+- # is no need to browse any of the substitutions).
+- # These are the two extra sed commands mentioned above.
+- (echo ':t
+- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+- if test -z "$ac_sed_cmds"; then
+- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+- else
+- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+- fi
+- ac_sed_frag=`expr $ac_sed_frag + 1`
+- ac_beg=$ac_end
+- ac_end=`expr $ac_end + $ac_max_sed_lines`
+- fi
+- done
+- if test -z "$ac_sed_cmds"; then
+- ac_sed_cmds=cat
++if test -n "$CONFIG_FILES"; then
++
++_ACEOF
++
++
++
++ac_delim='%!_!# '
++for ac_last_try in false false false false false :; do
++ cat >conf$$subs.sed <<_ACEOF
++SHELL!$SHELL$ac_delim
++PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
++PACKAGE_NAME!$PACKAGE_NAME$ac_delim
++PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
++PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
++PACKAGE_STRING!$PACKAGE_STRING$ac_delim
++PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
++exec_prefix!$exec_prefix$ac_delim
++prefix!$prefix$ac_delim
++program_transform_name!$program_transform_name$ac_delim
++bindir!$bindir$ac_delim
++sbindir!$sbindir$ac_delim
++libexecdir!$libexecdir$ac_delim
++datarootdir!$datarootdir$ac_delim
++datadir!$datadir$ac_delim
++sysconfdir!$sysconfdir$ac_delim
++sharedstatedir!$sharedstatedir$ac_delim
++localstatedir!$localstatedir$ac_delim
++includedir!$includedir$ac_delim
++oldincludedir!$oldincludedir$ac_delim
++docdir!$docdir$ac_delim
++infodir!$infodir$ac_delim
++htmldir!$htmldir$ac_delim
++dvidir!$dvidir$ac_delim
++pdfdir!$pdfdir$ac_delim
++psdir!$psdir$ac_delim
++libdir!$libdir$ac_delim
++localedir!$localedir$ac_delim
++mandir!$mandir$ac_delim
++DEFS!$DEFS$ac_delim
++ECHO_C!$ECHO_C$ac_delim
++ECHO_N!$ECHO_N$ac_delim
++ECHO_T!$ECHO_T$ac_delim
++LIBS!$LIBS$ac_delim
++build_alias!$build_alias$ac_delim
++host_alias!$host_alias$ac_delim
++target_alias!$target_alias$ac_delim
++build!$build$ac_delim
++build_cpu!$build_cpu$ac_delim
++build_vendor!$build_vendor$ac_delim
++build_os!$build_os$ac_delim
++host!$host$ac_delim
++host_cpu!$host_cpu$ac_delim
++host_vendor!$host_vendor$ac_delim
++host_os!$host_os$ac_delim
++CC!$CC$ac_delim
++CFLAGS!$CFLAGS$ac_delim
++LDFLAGS!$LDFLAGS$ac_delim
++CPPFLAGS!$CPPFLAGS$ac_delim
++ac_ct_CC!$ac_ct_CC$ac_delim
++EXEEXT!$EXEEXT$ac_delim
++OBJEXT!$OBJEXT$ac_delim
++GNOME_PACKAGES!$GNOME_PACKAGES$ac_delim
++GNOME_CFLAGS!$GNOME_CFLAGS$ac_delim
++GNOME_LIBS!$GNOME_LIBS$ac_delim
++INSTALL_GNOME!$INSTALL_GNOME$ac_delim
++SET_MAKE!$SET_MAKE$ac_delim
++INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
++INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
++INSTALL_DATA!$INSTALL_DATA$ac_delim
++PYTHON!$PYTHON$ac_delim
++CPP!$CPP$ac_delim
++GREP!$GREP$ac_delim
++EGREP!$EGREP$ac_delim
++PKG_CONFIG!$PKG_CONFIG$ac_delim
++AVAHI_CFLAGS!$AVAHI_CFLAGS$ac_delim
++AVAHI_LIBS!$AVAHI_LIBS$ac_delim
++ZEROCONF_DISTCC_OBJS!$ZEROCONF_DISTCC_OBJS$ac_delim
++ZEROCONF_DISTCCD_OBJS!$ZEROCONF_DISTCCD_OBJS$ac_delim
++BUILD_POPT!$BUILD_POPT$ac_delim
++GNOME_BIN!$GNOME_BIN$ac_delim
++LIBOBJS!$LIBOBJS$ac_delim
++LTLIBOBJS!$LTLIBOBJS$ac_delim
++_ACEOF
++
++ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 73; then
++ break
++ elif $ac_last_try; then
++ { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
++echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
++ { (exit 1); exit 1; }; }
++ else
++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+-fi # test -n "$CONFIG_FILES"
++done
++
++ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
++if test -n "$ac_eof"; then
++ ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
++ ac_eof=`expr $ac_eof + 1`
++fi
+
++cat >>$CONFIG_STATUS <<_ACEOF
++cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+ _ACEOF
++sed '
++s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
++s/^/s,@/; s/!/@,|#_!!_#|/
++:n
++t n
++s/'"$ac_delim"'$/,g/; t
++s/$/\\/; p
++N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
++' >>$CONFIG_STATUS <conf$$subs.sed
++rm -f conf$$subs.sed
++cat >>$CONFIG_STATUS <<_ACEOF
++:end
++s/|#_!!_#|//g
++CEOF$ac_eof
++_ACEOF
++
++
++# VPATH may cause trouble with some makes, so we remove $(srcdir),
++# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
++# trailing colons and then remove the whole line if VPATH becomes empty
++# (actually we leave an empty line to preserve line numbers).
++if test "x$srcdir" = x.; then
++ ac_vpsub='/^[ ]*VPATH[ ]*=/{
++s/:*\$(srcdir):*/:/
++s/:*\${srcdir}:*/:/
++s/:*@srcdir@:*/:/
++s/^\([^=]*=[ ]*\):*/\1/
++s/:*$//
++s/^[^=]*=[ ]*$//
++}'
++fi
++
+ cat >>$CONFIG_STATUS <<\_ACEOF
+-for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+- case $ac_file in
+- - | *:- | *:-:* ) # input from stdin
+- cat >$tmp/stdin
+- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+- * ) ac_file_in=$ac_file.in ;;
++fi # test -n "$CONFIG_FILES"
++
++
++for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS
++do
++ case $ac_tag in
++ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
++ case $ac_mode$ac_tag in
++ :[FHL]*:*);;
++ :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
++echo "$as_me: error: Invalid tag $ac_tag." >&2;}
++ { (exit 1); exit 1; }; };;
++ :[FH]-) ac_tag=-:-;;
++ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
++ esac
++ ac_save_IFS=$IFS
++ IFS=:
++ set x $ac_tag
++ IFS=$ac_save_IFS
++ shift
++ ac_file=$1
++ shift
++
++ case $ac_mode in
++ :L) ac_source=$1;;
++ :[FH])
++ ac_file_inputs=
++ for ac_f
++ do
++ case $ac_f in
++ -) ac_f="$tmp/stdin";;
++ *) # Look for the file first in the build tree, then in the source tree
++ # (if the path is not absolute). The absolute path cannot be DOS-style,
++ # because $ac_f cannot contain `:'.
++ test -f "$ac_f" ||
++ case $ac_f in
++ [\\/$]*) false;;
++ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
++ esac ||
++ { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
++echo "$as_me: error: cannot find input file: $ac_f" >&2;}
++ { (exit 1); exit 1; }; };;
++ esac
++ ac_file_inputs="$ac_file_inputs $ac_f"
++ done
+
+- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
++ # Let's still pretend it is `configure' which instantiates (i.e., don't
++ # use $as_me), people would be surprised to read:
++ # /* config.h. Generated by config.status. */
++ configure_input="Generated from "`IFS=:
++ echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
++ if test x"$ac_file" != x-; then
++ configure_input="$ac_file. $configure_input"
++ { echo "$as_me:$LINENO: creating $ac_file" >&5
++echo "$as_me: creating $ac_file" >&6;}
++ fi
++
++ case $ac_tag in
++ *:-:* | *:-) cat >"$tmp/stdin";;
++ esac
++ ;;
++ esac
++
++ ac_dir=`$as_dirname -- "$ac_file" ||
+ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+- X"$ac_file" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$ac_file" |
+- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+- /^X\(\/\/\)$/{ s//\1/; q; }
+- /^X\(\/\).*/{ s//\1/; q; }
+- s/.*/./; q'`
+- { if $as_mkdir_p; then
+- mkdir -p "$ac_dir"
+- else
+- as_dir="$ac_dir"
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++ { as_dir="$ac_dir"
++ case $as_dir in #(
++ -*) as_dir=./$as_dir;;
++ esac
++ test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+ as_dirs=
+- while test ! -d "$as_dir"; do
+- as_dirs="$as_dir $as_dirs"
+- as_dir=`(dirname "$as_dir") 2>/dev/null ||
++ while :; do
++ case $as_dir in #(
++ *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
++ *) as_qdir=$as_dir;;
++ esac
++ as_dirs="'$as_qdir' $as_dirs"
++ as_dir=`$as_dirname -- "$as_dir" ||
+ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+- X"$as_dir" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$as_dir" |
+- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+- /^X\(\/\/\)$/{ s//\1/; q; }
+- /^X\(\/\).*/{ s//\1/; q; }
+- s/.*/./; q'`
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++ test -d "$as_dir" && break
+ done
+- test ! -n "$as_dirs" || mkdir $as_dirs
+- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
++ test -z "$as_dirs" || eval "mkdir $as_dirs"
++ } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
++echo "$as_me: error: cannot create directory $as_dir" >&2;}
+ { (exit 1); exit 1; }; }; }
+-
+ ac_builddir=.
+
+-if test "$ac_dir" != .; then
++case "$ac_dir" in
++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
++*)
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+- # A "../" for each directory in $ac_dir_suffix.
+- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+-else
+- ac_dir_suffix= ac_top_builddir=
+-fi
++ # A ".." for each directory in $ac_dir_suffix.
++ ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
++ case $ac_top_builddir_sub in
++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
++ esac ;;
++esac
++ac_abs_top_builddir=$ac_pwd
++ac_abs_builddir=$ac_pwd$ac_dir_suffix
++# for backward compatibility:
++ac_top_builddir=$ac_top_build_prefix
+
+ case $srcdir in
+- .) # No --srcdir option. We are building in place.
++ .) # We are building in place.
+ ac_srcdir=.
+- if test -z "$ac_top_builddir"; then
+- ac_top_srcdir=.
+- else
+- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+- fi ;;
+- [\\/]* | ?:[\\/]* ) # Absolute path.
++ ac_top_srcdir=$ac_top_builddir_sub
++ ac_abs_top_srcdir=$ac_pwd ;;
++ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+- ac_top_srcdir=$srcdir ;;
+- *) # Relative path.
+- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+- ac_top_srcdir=$ac_top_builddir$srcdir ;;
++ ac_top_srcdir=$srcdir
++ ac_abs_top_srcdir=$srcdir ;;
++ *) # Relative name.
++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
++ ac_top_srcdir=$ac_top_build_prefix$srcdir
++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+ esac
++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+-# Do not use `cd foo && pwd` to compute absolute paths, because
+-# the directories may not exist.
+-case `pwd` in
+-.) ac_abs_builddir="$ac_dir";;
+-*)
+- case "$ac_dir" in
+- .) ac_abs_builddir=`pwd`;;
+- [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+- *) ac_abs_builddir=`pwd`/"$ac_dir";;
+- esac;;
+-esac
+-case $ac_abs_builddir in
+-.) ac_abs_top_builddir=${ac_top_builddir}.;;
+-*)
+- case ${ac_top_builddir}. in
+- .) ac_abs_top_builddir=$ac_abs_builddir;;
+- [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+- esac;;
+-esac
+-case $ac_abs_builddir in
+-.) ac_abs_srcdir=$ac_srcdir;;
+-*)
+- case $ac_srcdir in
+- .) ac_abs_srcdir=$ac_abs_builddir;;
+- [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+- esac;;
+-esac
+-case $ac_abs_builddir in
+-.) ac_abs_top_srcdir=$ac_top_srcdir;;
+-*)
+- case $ac_top_srcdir in
+- .) ac_abs_top_srcdir=$ac_abs_builddir;;
+- [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+- esac;;
+-esac
+
++ case $ac_mode in
++ :F)
++ #
++ # CONFIG_FILE
++ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+- *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
++ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
++_ACEOF
+
+- # Let's still pretend it is `configure' which instantiates (i.e., don't
+- # use $as_me), people would be surprised to read:
+- # /* config.h. Generated by config.status. */
+- if test x"$ac_file" = x-; then
+- configure_input=
+- else
+- configure_input="$ac_file. "
+- fi
+- configure_input=$configure_input"Generated from `echo $ac_file_in |
+- sed 's,.*/,,'` by configure."
+-
+- # First look for the input files in the build tree, otherwise in the
+- # src tree.
+- ac_file_inputs=`IFS=:
+- for f in $ac_file_in; do
+- case $f in
+- -) echo $tmp/stdin ;;
+- [\\/$]*)
+- # Absolute (can't be DOS-style, as IFS=:)
+- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+-echo "$as_me: error: cannot find input file: $f" >&2;}
+- { (exit 1); exit 1; }; }
+- echo "$f";;
+- *) # Relative
+- if test -f "$f"; then
+- # Build tree
+- echo "$f"
+- elif test -f "$srcdir/$f"; then
+- # Source tree
+- echo "$srcdir/$f"
+- else
+- # /dev/null tree
+- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+-echo "$as_me: error: cannot find input file: $f" >&2;}
+- { (exit 1); exit 1; }; }
+- fi;;
+- esac
+- done` || { (exit 1); exit 1; }
+-
+- if test x"$ac_file" != x-; then
+- { echo "$as_me:$LINENO: creating $ac_file" >&5
+-echo "$as_me: creating $ac_file" >&6;}
+- rm -f "$ac_file"
+- fi
++cat >>$CONFIG_STATUS <<\_ACEOF
++# If the template does not know about datarootdir, expand it.
++# FIXME: This hack should be removed a few years after 2.60.
++ac_datarootdir_hack=; ac_datarootdir_seen=
++
++case `sed -n '/datarootdir/ {
++ p
++ q
++}
++/@datadir@/p
++/@docdir@/p
++/@infodir@/p
++/@localedir@/p
++/@mandir@/p
++' $ac_file_inputs` in
++*datarootdir*) ac_datarootdir_seen=yes;;
++*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
++ { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
++echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+ _ACEOF
+ cat >>$CONFIG_STATUS <<_ACEOF
++ ac_datarootdir_hack='
++ s&@datadir@&$datadir&g
++ s&@docdir@&$docdir&g
++ s&@infodir@&$infodir&g
++ s&@localedir@&$localedir&g
++ s&@mandir@&$mandir&g
++ s&\\\${datarootdir}&$datarootdir&g' ;;
++esac
++_ACEOF
++
++# Neutralize VPATH when `$srcdir' = `.'.
++# Shell code in configure.ac might set extrasub.
++# FIXME: do we really want to maintain this feature?
++cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+ $extrasub
+ _ACEOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ :t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+-s,@configure_input@,$configure_input,;t t
+-s,@srcdir@,$ac_srcdir,;t t
+-s,@abs_srcdir@,$ac_abs_srcdir,;t t
+-s,@top_srcdir@,$ac_top_srcdir,;t t
+-s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+-s,@builddir@,$ac_builddir,;t t
+-s,@abs_builddir@,$ac_abs_builddir,;t t
+-s,@top_builddir@,$ac_top_builddir,;t t
+-s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+-s,@INSTALL@,$ac_INSTALL,;t t
+-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+- rm -f $tmp/stdin
+- if test x"$ac_file" != x-; then
+- mv $tmp/out $ac_file
+- else
+- cat $tmp/out
+- rm -f $tmp/out
+- fi
+-
+-done
+-_ACEOF
+-cat >>$CONFIG_STATUS <<\_ACEOF
+-
+-#
+-# CONFIG_HEADER section.
+-#
+-
+-# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+-# NAME is the cpp macro being defined and VALUE is the value it is being given.
+-#
+-# ac_d sets the value in "#define NAME VALUE" lines.
+-ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+-ac_dB='[ ].*$,\1#\2'
+-ac_dC=' '
+-ac_dD=',;t'
+-# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+-ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+-ac_uB='$,\1#\2define\3'
+-ac_uC=' '
+-ac_uD=',;t'
++s&@configure_input@&$configure_input&;t t
++s&@top_builddir@&$ac_top_builddir_sub&;t t
++s&@srcdir@&$ac_srcdir&;t t
++s&@abs_srcdir@&$ac_abs_srcdir&;t t
++s&@top_srcdir@&$ac_top_srcdir&;t t
++s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
++s&@builddir@&$ac_builddir&;t t
++s&@abs_builddir@&$ac_abs_builddir&;t t
++s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
++s&@INSTALL@&$ac_INSTALL&;t t
++$ac_datarootdir_hack
++" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
++
++test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
++ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
++ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
++ { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++which seems to be undefined. Please make sure it is defined." >&5
++echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++which seems to be undefined. Please make sure it is defined." >&2;}
+
+-for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
++ rm -f "$tmp/stdin"
+ case $ac_file in
+- - | *:- | *:-:* ) # input from stdin
+- cat >$tmp/stdin
+- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+- * ) ac_file_in=$ac_file.in ;;
++ -) cat "$tmp/out"; rm -f "$tmp/out";;
++ *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+ esac
++ ;;
++ :H)
++ #
++ # CONFIG_HEADER
++ #
++_ACEOF
++
++# Transform confdefs.h into a sed script `conftest.defines', that
++# substitutes the proper values into config.h.in to produce config.h.
++rm -f conftest.defines conftest.tail
++# First, append a space to every undef/define line, to ease matching.
++echo 's/$/ /' >conftest.defines
++# Then, protect against being on the right side of a sed subst, or in
++# an unquoted here document, in config.status. If some macros were
++# called several times there might be several #defines for the same
++# symbol, which is useless. But do not sort them, since the last
++# AC_DEFINE must be honored.
++ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
++# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
++# NAME is the cpp macro being defined, VALUE is the value it is being given.
++# PARAMS is the parameter list in the macro definition--in most cases, it's
++# just an empty string.
++ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*'
++ac_dB='\\)[ (].*,\\1define\\2'
++ac_dC=' '
++ac_dD=' ,'
+
+- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+-echo "$as_me: creating $ac_file" >&6;}
+-
+- # First look for the input files in the build tree, otherwise in the
+- # src tree.
+- ac_file_inputs=`IFS=:
+- for f in $ac_file_in; do
+- case $f in
+- -) echo $tmp/stdin ;;
+- [\\/$]*)
+- # Absolute (can't be DOS-style, as IFS=:)
+- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+-echo "$as_me: error: cannot find input file: $f" >&2;}
+- { (exit 1); exit 1; }; }
+- # Do quote $f, to prevent DOS paths from being IFS'd.
+- echo "$f";;
+- *) # Relative
+- if test -f "$f"; then
+- # Build tree
+- echo "$f"
+- elif test -f "$srcdir/$f"; then
+- # Source tree
+- echo "$srcdir/$f"
+- else
+- # /dev/null tree
+- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+-echo "$as_me: error: cannot find input file: $f" >&2;}
+- { (exit 1); exit 1; }; }
+- fi;;
+- esac
+- done` || { (exit 1); exit 1; }
+- # Remove the trailing spaces.
+- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+-
+-_ACEOF
+-
+-# Transform confdefs.h into two sed scripts, `conftest.defines' and
+-# `conftest.undefs', that substitutes the proper values into
+-# config.h.in to produce config.h. The first handles `#define'
+-# templates, and the second `#undef' templates.
+-# And first: Protect against being on the right side of a sed subst in
+-# config.status. Protect against being in an unquoted here document
+-# in config.status.
+-rm -f conftest.defines conftest.undefs
+-# Using a here document instead of a string reduces the quoting nightmare.
+-# Putting comments in sed scripts is not portable.
+-#
+-# `end' is used to avoid that the second main sed command (meant for
+-# 0-ary CPP macros) applies to n-ary macro definitions.
+-# See the Autoconf documentation for `clear'.
+-cat >confdef2sed.sed <<\_ACEOF
+-s/[\\&,]/\\&/g
+-s,[\\$`],\\&,g
+-t clear
+-: clear
+-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+-t end
+-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+-: end
+-_ACEOF
+-# If some macros were called several times there might be several times
+-# the same #defines, which is useless. Nevertheless, we may not want to
+-# sort them, since we want the *last* AC-DEFINE to be honored.
+-uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+-sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+-rm -f confdef2sed.sed
++uniq confdefs.h |
++ sed -n '
++ t rset
++ :rset
++ s/^[ ]*#[ ]*define[ ][ ]*//
++ t ok
++ d
++ :ok
++ s/[\\&,]/\\&/g
++ s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
++ s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
++ ' >>conftest.defines
+
+-# This sed command replaces #undef with comments. This is necessary, for
++# Remove the space that was appended to ease matching.
++# Then replace #undef with comments. This is necessary, for
+ # example, in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+-cat >>conftest.undefs <<\_ACEOF
+-s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
++# (The regexp can be short, since the line contains either #define or #undef.)
++echo 's/ $//
++s,^[ #]*u.*,/* & */,' >>conftest.defines
++
++# Break up conftest.defines:
++ac_max_sed_lines=50
++
++# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1"
++# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2"
++# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1"
++# et cetera.
++ac_in='$ac_file_inputs'
++ac_out='"$tmp/out1"'
++ac_nxt='"$tmp/out2"'
++
++while :
++do
++ # Write a here document:
++ cat >>$CONFIG_STATUS <<_ACEOF
++ # First, check the format of the line:
++ cat >"\$tmp/defines.sed" <<\\CEOF
++/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def
++/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def
++b
++:def
+ _ACEOF
+-
+-# Break up conftest.defines because some shells have a limit on the size
+-# of here documents, and old seds have small limits too (100 cmds).
+-echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+-echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+-echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+-echo ' :' >>$CONFIG_STATUS
+-rm -f conftest.tail
+-while grep . conftest.defines >/dev/null
+-do
+- # Write a limited-size here document to $tmp/defines.sed.
+- echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+- # Speed up: don't consider the non `#define' lines.
+- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+- # Work around the forget-to-reset-the-flag bug.
+- echo 't clr' >>$CONFIG_STATUS
+- echo ': clr' >>$CONFIG_STATUS
+- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
++ sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+- sed -f $tmp/defines.sed $tmp/in >$tmp/out
+- rm -f $tmp/in
+- mv $tmp/out $tmp/in
+-' >>$CONFIG_STATUS
+- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
++ sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
++ ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
++ sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
++ grep . conftest.tail >/dev/null || break
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+ done
+-rm -f conftest.defines
+-echo ' fi # grep' >>$CONFIG_STATUS
+-echo >>$CONFIG_STATUS
+-
+-# Break up conftest.undefs because some shells have a limit on the size
+-# of here documents, and old seds have small limits too (100 cmds).
+-echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
+-rm -f conftest.tail
+-while grep . conftest.undefs >/dev/null
+-do
+- # Write a limited-size here document to $tmp/undefs.sed.
+- echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+- # Speed up: don't consider the non `#undef'
+- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+- # Work around the forget-to-reset-the-flag bug.
+- echo 't clr' >>$CONFIG_STATUS
+- echo ': clr' >>$CONFIG_STATUS
+- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+- echo 'CEOF
+- sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+- rm -f $tmp/in
+- mv $tmp/out $tmp/in
+-' >>$CONFIG_STATUS
+- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+- rm -f conftest.undefs
+- mv conftest.tail conftest.undefs
+-done
+-rm -f conftest.undefs
++rm -f conftest.defines conftest.tail
+
++echo "ac_result=$ac_in" >>$CONFIG_STATUS
+ cat >>$CONFIG_STATUS <<\_ACEOF
+- # Let's still pretend it is `configure' which instantiates (i.e., don't
+- # use $as_me), people would be surprised to read:
+- # /* config.h. Generated by config.status. */
+- if test x"$ac_file" = x-; then
+- echo "/* Generated by configure. */" >$tmp/config.h
+- else
+- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
+- fi
+- cat $tmp/in >>$tmp/config.h
+- rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
++ echo "/* $configure_input */" >"$tmp/config.h"
++ cat "$ac_result" >>"$tmp/config.h"
++ if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+ echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+- ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$ac_file" : 'X\(//\)[^/]' \| \
+- X"$ac_file" : 'X\(//\)$' \| \
+- X"$ac_file" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
+-echo X"$ac_file" |
+- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+- /^X\(\/\/\)$/{ s//\1/; q; }
+- /^X\(\/\).*/{ s//\1/; q; }
+- s/.*/./; q'`
+- { if $as_mkdir_p; then
+- mkdir -p "$ac_dir"
+- else
+- as_dir="$ac_dir"
+- as_dirs=
+- while test ! -d "$as_dir"; do
+- as_dirs="$as_dir $as_dirs"
+- as_dir=`(dirname "$as_dir") 2>/dev/null ||
+-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+- X"$as_dir" : 'X\(//\)[^/]' \| \
+- X"$as_dir" : 'X\(//\)$' \| \
+- X"$as_dir" : 'X\(/\)' \| \
+- . : '\(.\)' 2>/dev/null ||
+-echo X"$as_dir" |
+- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+- /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+- /^X\(\/\/\)$/{ s//\1/; q; }
+- /^X\(\/\).*/{ s//\1/; q; }
+- s/.*/./; q'`
+- done
+- test ! -n "$as_dirs" || mkdir $as_dirs
+- fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+-echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+- { (exit 1); exit 1; }; }; }
+-
+ rm -f $ac_file
+- mv $tmp/config.h $ac_file
++ mv "$tmp/config.h" $ac_file
+ fi
+ else
+- cat $tmp/config.h
+- rm -f $tmp/config.h
++ echo "/* $configure_input */"
++ cat "$ac_result"
+ fi
+-done
+-_ACEOF
++ rm -f "$tmp/out12"
++ ;;
++
++
++ esac
++
++done # for ac_tag
+
+-cat >>$CONFIG_STATUS <<\_ACEOF
+
+ { (exit 0); exit 0; }
+ _ACEOF
+--- distcc-2.18.3/Makefile.in 2004-10-24 07:05:48.000000000 +0200
++++ distcc-2.18.3.lennart/Makefile.in 2007-12-30 16:05:58.000000000 +0100
+@@ -180,6 +180,7 @@ distcc_obj = src/backoff.o \
+ src/ssh.o src/state.o src/strip.o \
+ src/timefile.o src/traceenv.o \
+ src/where.o \
++ @ZEROCONF_DISTCC_OBJS@ \
+ $(common_obj)
+
+ distccd_obj = src/access.o \
+@@ -187,6 +188,7 @@ distccd_obj = src/access.o \
+ src/ncpus.o \
+ src/prefork.o \
+ src/serve.o src/setuid.o src/srvnet.o src/srvrpc.o src/state.o \
++ @ZEROCONF_DISTCCD_OBJS@ \
+ $(common_obj) @BUILD_POPT@
+
+ # Objects that need to be linked in to build monitors
+@@ -257,7 +259,7 @@ HEADERS = src/access.h \
+ src/util.h \
+ src/exec.h src/lock.h src/where.h src/srvnet.h
+
+-man1_MEN = man/distcc.1 man/distccd.1 man/distccmon-text.1
++man1_MEN = man/distcc.1 man/distccd.1 man/distccmon-text.1 man/distccmon-gnome.1
+ man_HTML = man/distcc_1.html man/distccd_1.html man/distccmon_text_1.html
+ MEN = $(man1_MEN)
+
+--- distcc-2.18.3/src/distcc.c 2004-10-02 02:47:07.000000000 +0200
++++ distcc-2.18.3.lennart/src/distcc.c 2007-12-30 13:55:27.000000000 +0100
+@@ -83,6 +83,9 @@ static void dcc_show_usage(void)
+ " COMPILER defaults to \"cc\"\n"
+ " --help explain usage and exit\n"
+ " --version show version and exit\n"
++" --show-hosts show host list and exit\n"
++" -j calculate the concurrency level from\n"
++" the host list.\n"
+ "\n"
+ "Environment variables:\n"
+ " See the manual page for a complete list.\n"
+@@ -135,7 +138,46 @@ static void dcc_client_catch_signals(voi
+ signal(SIGHUP, &dcc_client_signalled);
+ }
+
++static void dcc_free_hostlist(struct dcc_hostdef *list) {
++ while (list) {
++ struct dcc_hostdef *l = list;
++ list = list->next;
++ dcc_free_hostdef(l);
++ }
++}
++
++static void dcc_show_hosts(void) {
++ struct dcc_hostdef *list, *l;
++ int nhosts;
++
++ if (dcc_get_hostlist(&list, &nhosts) != 0) {
++ rs_log_crit("Failed to get host list");
++ return;
++ }
++
++ for (l = list; l; l = l->next)
++ printf("%s\n", l->hostdef_string);
++
++ dcc_free_hostlist(list);
++}
++
++static void dcc_concurrency_level(void) {
++ struct dcc_hostdef *list, *l;
++ int nhosts;
++ int nslots = 0;
++
++ if (dcc_get_hostlist(&list, &nhosts) != 0) {
++ rs_log_crit("Failed to get host list");
++ return;
++ }
++
++ for (l = list; l; l = l->next)
++ nslots += l->n_slots;
+
++ dcc_free_hostlist(list);
++
++ printf("%i\n", nslots);
++}
+
+ /**
+ * distcc client entry point.
+@@ -182,6 +224,18 @@ int main(int argc, char **argv)
+ ret = 0;
+ goto out;
+ }
++
++ if (!strcmp(argv[1], "--show-hosts")) {
++ dcc_show_hosts();
++ ret = 0;
++ goto out;
++ }
++
++ if (!strcmp(argv[1], "-j")) {
++ dcc_concurrency_level();
++ ret = 0;
++ goto out;
++ }
+
+ dcc_find_compiler(argv, &compiler_args);
+ /* compiler_args is now respectively either "cc -c hello.c" or
+--- distcc-2.18.3/src/distcc.h 2004-11-21 19:36:30.000000000 +0100
++++ distcc-2.18.3.lennart/src/distcc.h 2007-12-30 13:55:27.000000000 +0100
+@@ -112,7 +112,7 @@ int dcc_parse_hosts_env(struct dcc_hostd
+ int *ret_nhosts);
+ int dcc_parse_hosts(const char *where, const char *source_name,
+ struct dcc_hostdef **ret_list,
+- int *ret_nhosts);
++ int *ret_nhosts, struct dcc_hostdef **ret_prev);
+
+ /* ncpu.c */
+ int dcc_ncpus(int *);
+@@ -226,6 +226,7 @@ int dcc_get_tempdir(const char **);
+ int dcc_make_tmpnam(const char *, const char *suffix, char **);
+
+ int dcc_mkdir(const char *path) WARN_UNUSED;
++int dcc_get_subdir(const char *name, char **path_ret) WARN_UNUSED;
+ int dcc_get_lock_dir(char **path_ret) WARN_UNUSED;
+ int dcc_get_state_dir(char **path_ret) WARN_UNUSED;
+ int dcc_get_top_dir(char **path_ret) WARN_UNUSED;
+--- distcc-2.18.3/src/dopt.c 2004-10-24 07:05:48.000000000 +0200
++++ distcc-2.18.3.lennart/src/dopt.c 2007-12-30 13:55:27.000000000 +0100
+@@ -93,6 +93,10 @@ enum {
+ opt_log_level
+ };
+
++#ifdef HAVE_AVAHI
++/* Flag for enabling/disabling Zeroconf using Avahi */
++int opt_zeroconf = 0;
++#endif
+
+ const struct poptOption options[] = {
+ { "allow", 'a', POPT_ARG_STRING, 0, 'a', 0, 0 },
+@@ -115,6 +119,9 @@ const struct poptOption options[] = {
+ { "verbose", 0, POPT_ARG_NONE, 0, 'v', 0, 0 },
+ { "version", 0, POPT_ARG_NONE, 0, 'V', 0, 0 },
+ { "wizard", 'W', POPT_ARG_NONE, 0, 'W', 0, 0 },
++#ifdef HAVE_AVAHI
++ { "zeroconf", 0, POPT_ARG_NONE, &opt_zeroconf, 0, 0, 0 },
++#endif
+ { 0, 0, 0, 0, 0, 0, 0 }
+ };
+
+@@ -137,6 +144,9 @@ static void distccd_show_usage(void)
+ " -p, --port PORT TCP port to listen on\n"
+ " --listen ADDRESS IP address to listen on\n"
+ " -a, --allow IP[/BITS] client address access control\n"
++#ifdef HAVE_AVAHI
++" --zeroconf register via mDNS/DNS-SD\n"
++#endif
+ " Debug and trace:\n"
+ " --log-level=LEVEL set detail level for log file\n"
+ " levels: critical, error, warning, notice, info, debug\n"
+--- distcc-2.18.3/src/dopt.h 2004-07-30 03:12:13.000000000 +0200
++++ distcc-2.18.3.lennart/src/dopt.h 2007-12-30 13:55:27.000000000 +0100
+@@ -38,3 +38,7 @@ extern int opt_log_stderr;
+ extern int opt_lifetime;
+ extern char *opt_listen_addr;
+ extern int opt_niceness;
++
++#ifdef HAVE_AVAHI
++extern int opt_zeroconf;
++#endif
+--- distcc-2.18.3/src/dparent.c 2004-10-24 07:05:48.000000000 +0200
++++ distcc-2.18.3.lennart/src/dparent.c 2007-12-30 13:55:27.000000000 +0100
+@@ -70,6 +70,7 @@
+ #include "types.h"
+ #include "daemon.h"
+ #include "netutil.h"
++#include "zeroconf.h"
+
+ static void dcc_nofork_parent(int listen_fd) NORETURN;
+ static void dcc_detach(void);
+@@ -94,6 +95,9 @@ int dcc_standalone_server(void)
+ int listen_fd;
+ int n_cpus;
+ int ret;
++#ifdef HAVE_AVAHI
++ void *avahi = NULL;
++#endif
+
+ if ((ret = dcc_socket_listen(arg_port, &listen_fd, opt_listen_addr)) != 0)
+ return ret;
+@@ -131,6 +135,14 @@ int dcc_standalone_server(void)
+ /* Don't catch signals until we've detached or created a process group. */
+ dcc_daemon_catch_signals();
+
++#ifdef HAVE_AVAHI
++ /* Zeroconf registration */
++ if (opt_zeroconf) {
++ if (!(avahi = dcc_zeroconf_register((uint16_t) arg_port, n_cpus)))
++ return EXIT_CONNECT_FAILED;
++ }
++#endif
++
+ /* This is called in the master daemon, whether that is detached or
+ * not. */
+ dcc_master_pid = getpid();
+@@ -138,10 +150,21 @@ int dcc_standalone_server(void)
+ if (opt_no_fork) {
+ dcc_log_daemon_started("non-forking daemon");
+ dcc_nofork_parent(listen_fd);
++ ret = 0;
+ } else {
+ dcc_log_daemon_started("preforking daemon");
+- return dcc_preforking_parent(listen_fd);
++ ret = dcc_preforking_parent(listen_fd);
+ }
++
++#ifdef HAVE_AVAHI
++ /* Remove zeroconf registration */
++ if (opt_zeroconf) {
++ if (dcc_zeroconf_unregister(avahi) != 0)
++ return EXIT_CONNECT_FAILED;
++ }
++#endif
++
++ return ret;
+ }
+
+
+--- distcc-2.18.3/src/tempfile.c 2004-07-30 03:12:14.000000000 +0200
++++ distcc-2.18.3.lennart/src/tempfile.c 2007-12-30 13:55:27.000000000 +0100
+@@ -161,7 +161,7 @@ int dcc_get_top_dir(char **path_ret)
+ * Return a subdirectory of the DISTCC_DIR of the given name, making
+ * sure that the directory exists.
+ **/
+-static int dcc_get_subdir(const char *name,
++int dcc_get_subdir(const char *name,
+ char **dir_ret)
+ {
+ int ret;
+--- distcc-2.18.3/src/zeroconf.c 1970-01-01 01:00:00.000000000 +0100
++++ distcc-2.18.3.lennart/src/zeroconf.c 2007-12-30 15:13:05.000000000 +0100
+@@ -0,0 +1,616 @@
++#include "config.h"
++
++#include <assert.h>
++#include <stdio.h>
++#include <sys/select.h>
++#include <signal.h>
++#include <sys/file.h>
++#include <sys/time.h>
++#include <time.h>
++#include <sys/stat.h>
++#include <string.h>
++#include <errno.h>
++#include <unistd.h>
++#include <stdlib.h>
++#include <limits.h>
++
++#include <avahi-common/domain.h>
++#include <avahi-common/error.h>
++#include <avahi-common/malloc.h>
++#include <avahi-common/address.h>
++#include <avahi-common/simple-watch.h>
++#include <avahi-client/lookup.h>
++
++#include "distcc.h"
++#include "hosts.h"
++#include "zeroconf.h"
++#include "trace.h"
++#include "exitcode.h"
++
++/* How long shall the background daemon be idle before i terminates itself? */
++#define MAX_IDLE_TIME 20
++
++/* Maxium size of host file to load */
++#define MAX_FILE_SIZE (1024*100)
++
++/* General daemon data */
++struct daemon_data {
++ struct host *hosts;
++ int fd;
++ int n_slots;
++
++ AvahiClient *client;
++ AvahiServiceBrowser *browser;
++ AvahiSimplePoll *simple_poll;
++};
++
++/* Zeroconf service wrapper */
++struct host {
++ struct daemon_data *daemon_data;
++ struct host *next;
++
++ AvahiIfIndex interface;
++ AvahiProtocol protocol;
++ char *service;
++ char *domain;
++
++ AvahiAddress address;
++ uint16_t port;
++ int n_cpus;
++
++ AvahiServiceResolver *resolver;
++};
++
++/* A generic, system independant lock routine, similar to sys_lock,
++ * but more powerful:
++ * rw: if non-zero: r/w lock instead of r/o lock
++ * enable: lock or unlock
++ * block: block when locking */
++static int generic_lock(int fd, int rw, int enable, int block) {
++#if defined(F_SETLK)
++ struct flock lockparam;
++
++ lockparam.l_type = enable ? (rw ? F_WRLCK : F_RDLCK) : F_UNLCK;
++ lockparam.l_whence = SEEK_SET;
++ lockparam.l_start = 0;
++ lockparam.l_len = 0; /* whole file */
++
++ return fcntl(fd, block ? F_SETLKW : F_SETLK, &lockparam);
++#elif defined(HAVE_FLOCK)
++ return flock(fd, (enable ? (rw ? LOCK_EX : LOCK_SH) : LOCK_UN) | (block ? LOCK_NB : 0));
++#elif defined(HAVE_LOCKF)
++ return lockf(fd, (enable ? (block ? F_LOCK : F_TLOCK) : F_ULOCK));
++#else
++# error "No supported lock method. Please port this code."
++#endif
++}
++
++/* Return the number of seconds, when the specified file was last
++ * read. If the atime of that file is < clip_time, use clip_time
++ * instead */
++static time_t fd_last_used(int fd, time_t clip_time) {
++ struct stat st;
++ time_t now, ft;
++ assert(fd >= 0);
++
++ if (fstat(fd, &st) < 0) {
++ rs_log_crit("fstat() failed: %s\n", strerror(errno));
++ return -1;
++ }
++
++ if ((now = time(NULL)) == (time_t) -1) {
++ rs_log_crit("time() failed: %s\n", strerror(errno));
++ return -1;
++ }
++
++ ft = clip_time ? (st.st_atime < clip_time ? clip_time : st.st_atime) : st.st_atime;
++ assert(ft <= now);
++
++ return now - ft;
++}
++
++/* Write host data to host file */
++static int write_hosts(struct daemon_data *d) {
++ struct host *h;
++ int r = 0;
++ assert(d);
++
++ rs_log_info("writing zeroconf data.\n");
++
++ if (generic_lock(d->fd, 1, 1, 1) < 0) {
++ rs_log_crit("lock failed: %s\n", strerror(errno));
++ return -1;
++ }
++
++ if (lseek(d->fd, 0, SEEK_SET) < 0) {
++ rs_log_crit("lseek() failed: %s\n", strerror(errno));
++ return -1;
++ }
++
++ if (ftruncate(d->fd, 0) < 0) {
++ rs_log_crit("ftruncate() failed: %s\n", strerror(errno));
++ return -1;
++ }
++
++ for (h = d->hosts; h; h = h->next) {
++ char t[256], a[AVAHI_ADDRESS_STR_MAX];
++
++ if (h->resolver)
++ /* Not yet fully resolved */
++ continue;
++
++ snprintf(t, sizeof(t), "%s:%u/%i\n", avahi_address_snprint(a, sizeof(a), &h->address), h->port, d->n_slots * h->n_cpus);
++
++ if (dcc_writex(d->fd, t, strlen(t)) != 0) {
++ rs_log_crit("write() failed: %s\n", strerror(errno));
++ goto finish;
++ }
++ }
++
++ r = 0;
++
++finish:
++
++ generic_lock(d->fd, 1, 0, 1);
++ return r;
++
++};
++
++/* Free host data */
++static void free_host(struct host *h) {
++ assert(h);
++
++ if (h->resolver)
++ avahi_service_resolver_free(h->resolver);
++
++ free(h->service);
++ free(h->domain);
++ free(h);
++}
++
++/* Remove a service from the host list */
++static void remove_service(struct daemon_data *d, AvahiIfIndex interface, AvahiProtocol protocol, const char *name, const char *domain) {
++ struct host *h, *p = NULL;
++ assert(d);
++
++ for (h = d->hosts; h; h = h->next) {
++ if (h->interface == interface &&
++ h->protocol == protocol &&
++ !strcmp(h->service, name) &&
++ avahi_domain_equal(h->domain, domain)) {
++
++ if (p)
++ p->next = h->next;
++ else
++ d->hosts = h->next;
++
++ free_host(h);
++
++ break;
++ } else
++ p = h;
++ }
++}
++
++/* Called when a resolve call completes */
++static void resolve_reply(
++ AvahiServiceResolver *UNUSED(r),
++ AvahiIfIndex UNUSED(interface),
++ AvahiProtocol UNUSED(protocol),
++ AvahiResolverEvent event,
++ const char *name,
++ const char *UNUSED(type),
++ const char *UNUSED(domain),
++ const char *UNUSED(host_name),
++ const AvahiAddress *a,
++ uint16_t port,
++ AvahiStringList *txt,
++ AvahiLookupResultFlags UNUSED(flags),
++ void *userdata) {
++
++ struct host *h = userdata;
++
++ switch (event) {
++
++ case AVAHI_RESOLVER_FOUND: {
++ AvahiStringList *i;
++
++ /* Look for the number of CPUs in TXT RRs */
++ for (i = txt; i; i = i->next) {
++ char *key, *value;
++
++ if (avahi_string_list_get_pair(i, &key, &value, NULL) < 0)
++ continue;
++
++ if (!strcmp(key, "cpus"))
++ if ((h->n_cpus = atoi(value)) <= 0)
++ h->n_cpus = 1;
++
++ avahi_free(key);
++ avahi_free(value);
++ }
++
++ h->address = *a;
++ h->port = port;
++
++ avahi_service_resolver_free(h->resolver);
++ h->resolver = NULL;
++
++ /* Write modified hosts file */
++ write_hosts(h->daemon_data);
++
++ break;
++ }
++
++ case AVAHI_RESOLVER_FAILURE:
++
++ rs_log_warning("Failed to resolve service '%s': %s\n", name,
++ avahi_strerror(avahi_client_errno(h->daemon_data->client)));
++
++ free_host(h);
++ break;
++ }
++
++}
++
++/* Called whenever a new service is found or removed */
++static void browse_reply(
++ AvahiServiceBrowser *UNUSED(b),
++ AvahiIfIndex interface,
++ AvahiProtocol protocol,
++ AvahiBrowserEvent event,
++ const char *name,
++ const char *type,
++ const char *domain,
++ AvahiLookupResultFlags UNUSED(flags),
++ void *userdata) {
++
++ struct daemon_data *d = userdata;
++ assert(d);
++
++ switch (event) {
++ case AVAHI_BROWSER_NEW: {
++ struct host *h;
++
++ h = malloc(sizeof(struct host));
++ assert(h);
++
++ rs_log_info("new service: %s\n", name);
++
++ if (!(h->resolver = avahi_service_resolver_new(d->client,
++ interface,
++ protocol,
++ name,
++ type,
++ domain,
++ AVAHI_PROTO_UNSPEC,
++ 0,
++ resolve_reply,
++ h))) {
++ rs_log_warning("Failed to create service resolver for '%s': %s\n", name,
++ avahi_strerror(avahi_client_errno(d->client)));
++
++ free(h);
++
++ } else {
++
++ /* Fill in missing data */
++ h->service = strdup(name);
++ assert(h->service);
++ h->domain = strdup(domain);
++ assert(h->domain);
++ h->daemon_data = d;
++ h->interface = interface;
++ h->protocol = protocol;
++ h->next = d->hosts;
++ h->n_cpus = 1;
++ d->hosts = h;
++ }
++
++ break;
++ }
++
++ case AVAHI_BROWSER_REMOVE:
++
++ rs_log_info("Removed service: %s\n", name);
++
++ remove_service(d, interface, protocol, name, domain);
++ write_hosts(d);
++ break;
++
++ case AVAHI_BROWSER_FAILURE:
++ rs_log_crit("Service Browser failure '%s': %s\n", name,
++ avahi_strerror(avahi_client_errno(d->client)));
++
++ avahi_simple_poll_quit(d->simple_poll);
++ break;
++
++ case AVAHI_BROWSER_CACHE_EXHAUSTED:
++ case AVAHI_BROWSER_ALL_FOR_NOW:
++ ;
++
++ }
++}
++
++static void client_callback(AvahiClient *client, AvahiClientState state, void *userdata) {
++ struct daemon_data *d = userdata;
++
++ switch (state) {
++
++ case AVAHI_CLIENT_FAILURE:
++ rs_log_crit("Client failure: %s\n", avahi_strerror(avahi_client_errno(client)));
++ avahi_simple_poll_quit(d->simple_poll);
++ break;
++
++ case AVAHI_CLIENT_S_COLLISION:
++ case AVAHI_CLIENT_S_REGISTERING:
++ case AVAHI_CLIENT_S_RUNNING:
++ case AVAHI_CLIENT_CONNECTING:
++ ;
++ }
++}
++
++/* The main function of the background daemon */
++static int daemon_proc(const char *host_file, const char *lock_file, int n_slots) {
++ int ret = 1;
++ int lock_fd = -1;
++ struct daemon_data d;
++ time_t clip_time;
++ int error;
++ char machine[64], version[64], stype[128];
++
++ rs_add_logger(rs_logger_syslog, RS_LOG_DEBUG, NULL, 0);
++
++ /* Prepare daemon data structure */
++ d.fd = -1;
++ d.hosts = NULL;
++ d.n_slots = n_slots;
++ d.simple_poll = NULL;
++ d.browser = NULL;
++ d.client = NULL;
++ clip_time = time(NULL);
++
++ rs_log_info("Zeroconf daemon running.\n");
++
++ /* Open daemon lock file and lock it */
++ if ((lock_fd = open(lock_file, O_RDWR|O_CREAT, 0666)) < 0) {
++ rs_log_crit("open('%s') failed: %s\n", lock_file, strerror(errno));
++ goto finish;
++ }
++
++ if (generic_lock(lock_fd, 1, 1, 0) < 0) {
++ /* lock failed, there's probably already another daemon running */
++ goto finish;
++ }
++
++ /* Open host file */
++ if ((d.fd = open(host_file, O_RDWR|O_CREAT, 0666)) < 0) {
++ rs_log_crit("open('%s') failed: %s\n", host_file, strerror(errno));
++ goto finish;
++ }
++
++ /* Clear host file */
++ write_hosts(&d);
++
++ if (!(d.simple_poll = avahi_simple_poll_new())) {
++ rs_log_crit("Failed to create simple poll object.\n");
++ goto finish;
++ }
++
++ if (!(d.client = avahi_client_new(
++ avahi_simple_poll_get(d.simple_poll),
++ 0,
++ client_callback,
++ &d,
++ &error))) {
++ rs_log_crit("Failed to create Avahi client object: %s\n", avahi_strerror(error));
++ goto finish;
++ }
++
++ if (dcc_get_gcc_version(version, sizeof(version)) &&
++ dcc_get_gcc_machine(machine, sizeof(machine))) {
++
++ dcc_make_dnssd_subtype(stype, sizeof(stype), version, machine);
++ } else {
++ rs_log_warning("Warning, failed to get CC version and machine type.\n");
++
++ strncpy(stype, DCC_DNS_SERVICE_TYPE, sizeof(stype));
++ stype[sizeof(stype)-1] = 0;
++ }
++
++ rs_log_info("Browsing for '%s'.\n", stype);
++
++ if (!(d.browser = avahi_service_browser_new(
++ d.client,
++ AVAHI_IF_UNSPEC,
++ AVAHI_PROTO_UNSPEC,
++ stype,
++ NULL,
++ 0,
++ browse_reply,
++ &d))) {
++ rs_log_crit("Failed to create service browser object: %s\n", avahi_strerror(avahi_client_errno(d.client)));
++ goto finish;
++ }
++
++ /* Check whether the host file has been used recently */
++ while (fd_last_used(d.fd, clip_time) <= MAX_IDLE_TIME) {
++
++ /* Iterate the main loop for 5s */
++ if (avahi_simple_poll_iterate(d.simple_poll, 5000) != 0) {
++ rs_log_crit("Event loop exited abnormaly.\n");
++ goto finish;
++ }
++ }
++
++ /* Wer are idle */
++ rs_log_info("Zeroconf daemon unused.\n");
++
++ ret = 0;
++
++finish:
++
++ /* Cleanup */
++ if (lock_fd >= 0) {
++ generic_lock(lock_fd, 1, 0, 0);
++ close(lock_fd);
++ }
++
++ if (d.fd >= 0)
++ close(d.fd);
++
++ while (d.hosts) {
++ struct host *h = d.hosts;
++ d.hosts = d.hosts->next;
++ free_host(h);
++ }
++
++ if (d.client)
++ avahi_client_free(d.client);
++
++ if (d.simple_poll)
++ avahi_simple_poll_free(d.simple_poll);
++
++ rs_log_info("zeroconf daemon ended.\n");
++
++ return ret;
++}
++
++/* Return path to the zeroconf directory in ~/.distcc */
++static int get_zeroconf_dir(char **dir_ret) {
++ static char *cached;
++ int ret;
++
++ if (cached) {
++ *dir_ret = cached;
++ return 0;
++ } else {
++ ret = dcc_get_subdir("zeroconf", dir_ret);
++ if (ret == 0)
++ cached = *dir_ret;
++ return ret;
++ }
++}
++
++/* Get the host list from zeroconf */
++int dcc_zeroconf_add_hosts(struct dcc_hostdef **ret_list, int *ret_nhosts, int n_slots, struct dcc_hostdef **ret_prev) {
++ char host_file[PATH_MAX], lock_file[PATH_MAX], *s = NULL;
++ int lock_fd = -1, host_fd = -1;
++ int fork_daemon = 0;
++ int r = -1;
++ char *dir;
++ struct stat st;
++
++ if (get_zeroconf_dir(&dir) != 0) {
++ rs_log_crit("failed to get zeroconf dir.\n");
++ goto finish;
++ }
++
++ snprintf(lock_file, sizeof(lock_file), "%s/lock", dir);
++ snprintf(host_file, sizeof(host_file), "%s/hosts", dir);
++
++ /* Open lock file */
++ if ((lock_fd = open(lock_file, O_RDWR|O_CREAT, 0666)) < 0) {
++ rs_log_crit("open('%s') failed: %s\n", lock_file, strerror(errno));
++ goto finish;
++ }
++
++ /* Try to lock the lock file */
++ if (generic_lock(lock_fd, 1, 1, 0) >= 0) {
++ /* The lock succeeded => there's no daemon running yet! */
++ fork_daemon = 1;
++ generic_lock(lock_fd, 1, 0, 0);
++ }
++
++ close(lock_fd);
++
++ /* Shall we fork a new daemon? */
++ if (fork_daemon) {
++ pid_t pid;
++
++ rs_log_info("Spawning zeroconf daemon.\n");
++
++ if ((pid = fork()) == -1) {
++ rs_log_crit("fork() failed: %s\n", strerror(errno));
++ goto finish;
++ } else if (pid == 0) {
++ int fd;
++ /* Child */
++
++ /* Close file descriptors and replace them by /dev/null */
++ close(0);
++ close(1);
++ close(2);
++ fd = open("/dev/null", O_RDWR);
++ assert(fd == 0);
++ fd = dup(0);
++ assert(fd == 1);
++ fd = dup(0);
++ assert(fd == 2);
++
++#ifdef HAVE_SETSID
++ setsid();
++#endif
++
++ chdir("/");
++ rs_add_logger(rs_logger_syslog, RS_LOG_DEBUG, NULL, 0);
++ _exit(daemon_proc(host_file, lock_file, n_slots));
++ }
++
++ /* Parent */
++
++ /* Wait some time for initial host gathering */
++ usleep(1000000); /* 1000 ms */
++ }
++
++ /* Open host list read-only */
++ if ((host_fd = open(host_file, O_RDONLY)) < 0) {
++ rs_log_crit("open('%s') failed: %s\n", host_file, strerror(errno));
++ goto finish;
++ }
++
++ /* A read lock */
++ if (generic_lock(host_fd, 0, 1, 1) < 0) {
++ rs_log_crit("lock failed: %s\n", strerror(errno));
++ goto finish;
++ }
++
++ /* Get file size */
++ if (fstat(host_fd, &st) < 0) {
++ rs_log_crit("stat() failed: %s\n", strerror(errno));
++ goto finish;
++ }
++
++ if (st.st_size >= MAX_FILE_SIZE) {
++ rs_log_crit("file too large.\n");
++ goto finish;
++ }
++
++ /* read file data */
++ s = malloc((size_t) st.st_size+1);
++ assert(s);
++
++ if (dcc_readx(host_fd, s, (size_t) st.st_size) != 0) {
++ rs_log_crit("failed to read from file.\n");
++ goto finish;
++ }
++ s[st.st_size] = 0;
++
++ /* Parse host data */
++ if (dcc_parse_hosts(s, host_file, ret_list, ret_nhosts, ret_prev) != 0) {
++ rs_log_crit("failed to parse host file.\n");
++ goto finish;
++ }
++
++ r = 0;
++
++finish:
++ if (host_fd >= 0) {
++ generic_lock(host_fd, 0, 0, 1);
++ close(host_fd);
++ }
++
++ free(s);
++
++ return r;
++}
+--- distcc-2.18.3/src/zeroconf.h 1970-01-01 01:00:00.000000000 +0100
++++ distcc-2.18.3.lennart/src/zeroconf.h 2007-12-30 15:09:58.000000000 +0100
+@@ -0,0 +1,18 @@
++#ifndef foozeroconfhfoo
++#define foozeroconfhfoo
++
++#include <inttypes.h>
++
++int dcc_zeroconf_add_hosts(struct dcc_hostdef **re_list, int *ret_nhosts, int slots, struct dcc_hostdef **ret_prev);
++
++void *dcc_zeroconf_register(uint16_t port, int n_cpus);
++int dcc_zeroconf_unregister(void*);
++
++char* dcc_get_gcc_version(char *s, size_t nbytes);
++char* dcc_get_gcc_machine(char *s, size_t nbytes);
++
++char* dcc_make_dnssd_subtype(char *stype, size_t nbytes, const char *v, const char *m);
++
++#define DCC_DNS_SERVICE_TYPE "_distcc._tcp"
++
++#endif
+--- distcc-2.18.3/src/zeroconf-reg.c 1970-01-01 01:00:00.000000000 +0100
++++ distcc-2.18.3.lennart/src/zeroconf-reg.c 2007-12-30 15:17:29.000000000 +0100
+@@ -0,0 +1,265 @@
++#include "config.h"
++
++#include <assert.h>
++#include <stdio.h>
++#include <sys/select.h>
++#include <signal.h>
++#include <sys/file.h>
++#include <sys/time.h>
++#include <time.h>
++#include <sys/stat.h>
++#include <sys/poll.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <string.h>
++#include <errno.h>
++
++#include <avahi-common/thread-watch.h>
++#include <avahi-common/error.h>
++#include <avahi-common/alternative.h>
++#include <avahi-common/malloc.h>
++#include <avahi-client/publish.h>
++
++#include "distcc.h"
++#include "zeroconf.h"
++#include "trace.h"
++#include "exitcode.h"
++
++struct context {
++ char *name;
++ AvahiThreadedPoll *threaded_poll;
++ AvahiClient *client;
++ AvahiEntryGroup *group;
++ uint16_t port;
++ int n_cpus;
++};
++
++static void publish_reply(AvahiEntryGroup *g, AvahiEntryGroupState state, void *userdata);
++
++static void register_stuff(struct context *ctx) {
++
++ if (!ctx->group) {
++
++ if (!(ctx->group = avahi_entry_group_new(ctx->client, publish_reply, ctx))) {
++ rs_log_crit("Failed to create entry group: %s\n", avahi_strerror(avahi_client_errno(ctx->client)));
++ goto fail;
++ }
++
++ }
++
++ if (avahi_entry_group_is_empty(ctx->group)) {
++ char cpus[32], machine[64] = "cc_machine=", version[64] = "cc_version=", *m, *v;
++
++ snprintf(cpus, sizeof(cpus), "cpus=%i", ctx->n_cpus);
++ v = dcc_get_gcc_version(version+11, sizeof(version)-11);
++ m = dcc_get_gcc_machine(machine+11, sizeof(machine)-11);
++
++ /* Register our service */
++
++ if (avahi_entry_group_add_service(
++ ctx->group,
++ AVAHI_IF_UNSPEC,
++ AVAHI_PROTO_UNSPEC,
++ 0,
++ ctx->name,
++ DCC_DNS_SERVICE_TYPE,
++ NULL,
++ NULL,
++ ctx->port,
++ "txtvers=1",
++ cpus,
++ "distcc="PACKAGE_VERSION,
++ "gnuhost="GNU_HOST,
++ v ? version : NULL,
++ m ? machine : NULL,
++ NULL) < 0) {
++ rs_log_crit("Failed to add service: %s\n", avahi_strerror(avahi_client_errno(ctx->client)));
++ goto fail;
++ }
++
++ if (v && m) {
++ char stype[128];
++
++ dcc_make_dnssd_subtype(stype, sizeof(stype), v, m);
++
++ if (avahi_entry_group_add_service_subtype(
++ ctx->group,
++ AVAHI_IF_UNSPEC,
++ AVAHI_PROTO_UNSPEC,
++ 0,
++ ctx->name,
++ DCC_DNS_SERVICE_TYPE,
++ NULL,
++ stype) < 0) {
++ rs_log_crit("Failed to add service: %s\n", avahi_strerror(avahi_client_errno(ctx->client)));
++ goto fail;
++ }
++ } else
++ rs_log_warning("Failed to determine CC version, not registering DNS-SD service subtype!");
++
++ if (avahi_entry_group_commit(ctx->group) < 0) {
++ rs_log_crit("Failed to commit entry group: %s\n", avahi_strerror(avahi_client_errno(ctx->client)));
++ goto fail;
++ }
++
++ }
++
++ return;
++
++fail:
++ avahi_threaded_poll_quit(ctx->threaded_poll);
++}
++
++/* Called when publishing of service data completes */
++static void publish_reply(AvahiEntryGroup *UNUSED(g), AvahiEntryGroupState state, void *userdata) {
++ struct context *ctx = userdata;
++
++ switch (state) {
++
++ case AVAHI_ENTRY_GROUP_COLLISION: {
++ char *n;
++
++ /* Pick a new name for our service */
++
++ n = avahi_alternative_service_name(ctx->name);
++ assert(n);
++
++ avahi_free(ctx->name);
++ ctx->name = n;
++
++ register_stuff(ctx);
++ break;
++ }
++
++ case AVAHI_ENTRY_GROUP_FAILURE:
++ rs_log_crit("Failed to register service: %s\n", avahi_strerror(avahi_client_errno(ctx->client)));
++ avahi_threaded_poll_quit(ctx->threaded_poll);
++ break;
++
++ case AVAHI_ENTRY_GROUP_UNCOMMITED:
++ case AVAHI_ENTRY_GROUP_REGISTERING:
++ case AVAHI_ENTRY_GROUP_ESTABLISHED:
++ ;
++ }
++}
++
++static void client_callback(AvahiClient *client, AvahiClientState state, void *userdata) {
++ struct context *ctx = userdata;
++
++ ctx->client = client;
++
++ switch (state) {
++
++ case AVAHI_CLIENT_S_RUNNING:
++
++ register_stuff(ctx);
++ break;
++
++ case AVAHI_CLIENT_S_COLLISION:
++ case AVAHI_CLIENT_S_REGISTERING:
++
++ if (ctx->group)
++ avahi_entry_group_reset(ctx->group);
++
++ break;
++
++ case AVAHI_CLIENT_FAILURE:
++
++ if (avahi_client_errno(client) == AVAHI_ERR_DISCONNECTED) {
++ int error;
++
++ avahi_client_free(ctx->client);
++ ctx->client = NULL;
++ ctx->group = NULL;
++
++ /* Reconnect to the server */
++
++ if (!(ctx->client = avahi_client_new(
++ avahi_threaded_poll_get(ctx->threaded_poll),
++ AVAHI_CLIENT_NO_FAIL,
++ client_callback,
++ ctx,
++ &error))) {
++
++ rs_log_crit("Failed to contact server: %s\n", avahi_strerror(error));
++ avahi_threaded_poll_quit(ctx->threaded_poll);
++ }
++
++ } else {
++ rs_log_crit("Client failure: %s\n", avahi_strerror(avahi_client_errno(client)));
++ avahi_threaded_poll_quit(ctx->threaded_poll);
++ }
++
++ break;
++
++ case AVAHI_CLIENT_CONNECTING:
++ ;
++ }
++}
++
++/* register a distcc service in DNS-SD/mDNS with the given port and number of CPUs */
++void* dcc_zeroconf_register(uint16_t port, int n_cpus) {
++ struct context *ctx = NULL;
++ char service[256] = "distcc@";
++ int error;
++
++ ctx = malloc(sizeof(struct context));
++ assert(ctx);
++ ctx->client = NULL;
++ ctx->group = NULL;
++ ctx->threaded_poll = NULL;
++ ctx->port = port;
++ ctx->n_cpus = n_cpus;
++
++ /* Prepare service name */
++ gethostname(service+7, sizeof(service)-8);
++ service[sizeof(service)-1] = 0;
++
++ ctx->name = strdup(service);
++ assert(ctx->name);
++
++ if (!(ctx->threaded_poll = avahi_threaded_poll_new())) {
++ rs_log_crit("Failed to create event loop object.\n");
++ goto fail;
++ }
++
++ if (!(ctx->client = avahi_client_new(avahi_threaded_poll_get(ctx->threaded_poll), AVAHI_CLIENT_NO_FAIL, client_callback, ctx, &error))) {
++ rs_log_crit("Failed to create client object: %s\n", avahi_strerror(avahi_client_errno(ctx->client)));
++ goto fail;
++ }
++
++ /* Create the mDNS event handler */
++ if (avahi_threaded_poll_start(ctx->threaded_poll) < 0) {
++ rs_log_crit("Failed to create thread.\n");
++ goto fail;
++ }
++
++ return ctx;
++
++fail:
++
++ if (ctx)
++ dcc_zeroconf_unregister(ctx);
++
++ return NULL;
++}
++
++/* Unregister this server from DNS-SD/mDNS */
++int dcc_zeroconf_unregister(void *u) {
++ struct context *ctx = u;
++
++ if (ctx->threaded_poll)
++ avahi_threaded_poll_stop(ctx->threaded_poll);
++
++ if (ctx->client)
++ avahi_client_free(ctx->client);
++
++ if (ctx->threaded_poll)
++ avahi_threaded_poll_free(ctx->threaded_poll);
++
++ avahi_free(ctx->name);
++
++ free(ctx);
++
++ return 0;
++}
+--- distcc-2.18.3/src/help.c 2004-07-30 03:12:13.000000000 +0200
++++ distcc-2.18.3.lennart/src/help.c 2007-12-30 13:55:27.000000000 +0100
+@@ -62,6 +62,9 @@ int dcc_show_version(const char *prog)
+ "distcc comes with ABSOLUTELY NO WARRANTY. distcc is free software, and\n"
+ "you may use, modify and redistribute it under the terms of the GNU \n"
+ "General Public License version 2 or later.\n"
++#ifdef HAVE_AVAHI
++"\nBuilt with Zeroconf support.\n"
++#endif
+ "\n"
+ ,
+ prog, PACKAGE_VERSION, GNU_HOST, DISTCC_DEFAULT_PORT,
+--- distcc-2.18.3/src/hosts.c 2004-10-24 07:05:47.000000000 +0200
++++ distcc-2.18.3.lennart/src/hosts.c 2007-12-30 13:55:27.000000000 +0100
+@@ -96,6 +96,10 @@
+ #include "hosts.h"
+ #include "exitcode.h"
+ #include "snprintf.h"
++#ifdef HAVE_AVAHI
++#include "zeroconf.h"
++#define ZEROCONF_MAGIC "+zeroconf"
++#endif
+
+ const int dcc_default_port = DISTCC_DEFAULT_PORT;
+
+@@ -134,9 +138,12 @@ int dcc_get_hostlist(struct dcc_hostdef
+ char *path, *top;
+ int ret;
+
++ *ret_list = NULL;
++ *ret_nhosts = 0;
++
+ if ((env = getenv("DISTCC_HOSTS")) != NULL) {
+ rs_trace("read hosts from environment");
+- return dcc_parse_hosts(env, "$DISTCC_HOSTS", ret_list, ret_nhosts);
++ return dcc_parse_hosts(env, "$DISTCC_HOSTS", ret_list, ret_nhosts, NULL);
+ }
+
+ /* $DISTCC_DIR or ~/.distcc */
+@@ -163,7 +170,7 @@ int dcc_get_hostlist(struct dcc_hostdef
+ rs_trace("not reading %s: %s", path, strerror(errno));
+ free(path);
+ }
+-
++
+ /* FIXME: Clearer message? */
+ rs_log_warning("no hostlist is set; can't distribute work");
+
+@@ -346,17 +353,19 @@ static int dcc_parse_localhost(struct dc
+ **/
+ int dcc_parse_hosts(const char *where, const char *source_name,
+ struct dcc_hostdef **ret_list,
+- int *ret_nhosts)
++ int *ret_nhosts, struct dcc_hostdef **ret_prev)
+ {
+ int ret;
+- struct dcc_hostdef *prev, *curr;
++ struct dcc_hostdef *curr, *_prev;
++
++ if (!ret_prev) {
++ ret_prev = &_prev;
++ _prev = NULL;
++ }
+
+ /* TODO: Check for '/' in places where it might cause trouble with
+ * a lock file name. */
+
+- prev = NULL;
+- *ret_list = NULL;
+- *ret_nhosts = 0;
+ /* A simple, hardcoded scanner. Some of the GNU routines might be
+ * useful here, but they won't work on less capable systems.
+ *
+@@ -390,6 +399,15 @@ int dcc_parse_hosts(const char *where, c
+ token_start = where;
+ token_len = strcspn(where, " #\t\n\f\r");
+
++#ifdef HAVE_AVAHI
++ if (token_len == sizeof(ZEROCONF_MAGIC)-1 &&
++ !strncmp(token_start, ZEROCONF_MAGIC, (unsigned) token_len)) {
++ if ((ret = dcc_zeroconf_add_hosts(ret_list, ret_nhosts, 4, ret_prev) != 0))
++ return ret;
++ goto skip;
++ }
++#endif
++
+ /* Allocate new list item */
+ curr = calloc(1, sizeof(struct dcc_hostdef));
+ if (!curr) {
+@@ -404,8 +422,8 @@ int dcc_parse_hosts(const char *where, c
+ }
+
+ /* Link into list */
+- if (prev) {
+- prev->next = curr;
++ if (*ret_prev) {
++ (*ret_prev)->next = curr;
+ } else {
+ *ret_list = curr; /* first */
+ }
+@@ -434,10 +452,15 @@ int dcc_parse_hosts(const char *where, c
+ return ret;
+ }
+
++ (*ret_nhosts)++;
++ *ret_prev = curr;
++
++#ifdef HAVE_AVAHI
++ skip:
++#endif
++
+ /* continue to next token if any */
+ where = token_start + token_len;
+- prev = curr;
+- (*ret_nhosts)++;
+ }
+
+ if (*ret_nhosts) {
+--- distcc-2.18.3/src/io.c 2004-10-24 07:05:48.000000000 +0200
++++ distcc-2.18.3.lennart/src/io.c 2007-12-30 13:55:27.000000000 +0100
+@@ -160,7 +160,7 @@ int dcc_readx(int fd, void *buf, size_t
+ return ret;
+ else
+ continue;
+- } else if (r == -1 && errno == EAGAIN) {
++ } else if (r == -1 && errno == EINTR) {
+ continue;
+ } else if (r == -1) {
+ rs_log_error("failed to read: %s", strerror(errno));
+@@ -202,9 +202,6 @@ int dcc_writex(int fd, const void *buf,
+ } else if (r == -1) {
+ rs_log_error("failed to write: %s", strerror(errno));
+ return EXIT_IO_ERROR;
+- } else if (r == 0) {
+- rs_log_error("unexpected eof on fd%d", fd);
+- return EXIT_TRUNCATED;
+ } else {
+ buf = &((char *) buf)[r];
+ len -= r;
+--- distcc-2.18.3/src/hostfile.c 2004-10-24 07:05:48.000000000 +0200
++++ distcc-2.18.3.lennart/src/hostfile.c 2007-12-30 13:55:27.000000000 +0100
+@@ -59,7 +59,7 @@ int dcc_parse_hosts_file(const char *fna
+ if ((ret = dcc_load_file_string(fname, &body)) != 0)
+ return ret;
+
+- ret = dcc_parse_hosts(body, fname, ret_list, ret_nhosts);
++ ret = dcc_parse_hosts(body, fname, ret_list, ret_nhosts, NULL);
+
+ free(body);
+
+--- distcc-2.18.3/src/gcc-id.c 1970-01-01 01:00:00.000000000 +0100
++++ distcc-2.18.3.lennart/src/gcc-id.c 2007-12-30 15:14:31.000000000 +0100
+@@ -0,0 +1,84 @@
++#include "config.h"
++
++#include <ctype.h>
++#include <string.h>
++#include <stdio.h>
++#include <errno.h>
++
++#include "distcc.h"
++#include "hosts.h"
++#include "zeroconf.h"
++#include "trace.h"
++
++static char *strip_bad_chars(char *s) {
++ char *k;
++
++ for (k = s; *k; k++) {
++
++ if (*k >= 'a' && *k <= 'z')
++ continue;
++
++ if (*k >= '0' && *k <= '9')
++ continue;
++
++ if (*k >= 'A' && *k <= 'Z')
++ *k = tolower(*k);
++ else
++ *k = '-';
++ }
++
++ return s;
++}
++
++static char* read_string_from_popen(const char *cmdline, char *s, size_t nbytes) {
++ FILE *p = NULL;
++ char *ret = NULL;
++
++ errno = 0;
++ if (!(p = popen(cmdline, "r"))) {
++ rs_log_crit("Failed to read string from C compiler: %s\n", errno ? strerror(errno) : "failure");
++ goto fail;
++ }
++
++ if (!fgets(s, (int) nbytes, p)) {
++ rs_log_crit("Failed to read string from C compiler.\n");
++ goto fail;
++ }
++
++ s[nbytes-1] = 0;
++ s[strcspn(s, " \t\n\r")] = 0;
++
++ ret = s;
++
++fail:
++
++ if (p)
++ pclose(p);
++
++ return ret;
++}
++
++char* dcc_get_gcc_version(char *s, size_t nbytes) {
++ return read_string_from_popen("cc -dumpversion", s, nbytes);
++}
++
++char* dcc_get_gcc_machine(char *s, size_t nbytes) {
++ return read_string_from_popen("cc -dumpmachine", s, nbytes);
++}
++
++char* dcc_make_dnssd_subtype(char *stype, size_t nbytes, const char *v, const char *m) {
++ char version[64], machine[64];
++
++ strncpy(version, v, sizeof(version)-1);
++ version[sizeof(version)-1] = 0;
++ strncpy(machine, m, sizeof(machine)-1);
++ machine[sizeof(machine)-1] = 0;
++
++ strip_bad_chars(version);
++ strip_bad_chars(machine);
++
++ snprintf(stype, nbytes, "_%s--%s._sub." DCC_DNS_SERVICE_TYPE, machine, version);
++ stype[nbytes-1] = 0;
++
++ return stype;
++}
+--- distcc-2.18.3/src/config.h.in 2004-11-30 12:32:54.000000000 +0100
++++ distcc-2.18.3.lennart/src/config.h.in 2007-12-30 15:40:52.000000000 +0100
+@@ -15,6 +15,9 @@
+ /* Define to 1 if you have the `asprintf' function. */
+ #undef HAVE_ASPRINTF
+
++/* defined if Avahi is available */
++#undef HAVE_AVAHI
++
+ /* define if vsnprintf is C99 compliant */
+ #undef HAVE_C99_VSNPRINTF
+
+--- distcc-2.18.3/src/config.h 1970-01-01 01:00:00.000000000 +0100
++++ distcc-2.18.3.lennart/src/config.h 2007-12-30 16:06:25.000000000 +0100
+@@ -0,0 +1,253 @@
++/* src/config.h. Generated from config.h.in by configure. */
++/* src/config.h.in. Generated from configure.ac by autoheader. */
++
++/* Use getaddrinfo(), getnameinfo(), etc */
++#define ENABLE_RFC2553 1
++
++/* Your gnu-style host triple */
++#define GNU_HOST "i486-pc-linux-gnu"
++
++/* Define to 1 if you have the <alloca.h> header file. */
++#define HAVE_ALLOCA_H 1
++
++/* Define to 1 if you have the <arpa/nameser.h> header file. */
++#define HAVE_ARPA_NAMESER_H 1
++
++/* Define to 1 if you have the `asprintf' function. */
++#define HAVE_ASPRINTF 1
++
++/* defined if Avahi is available */
++#define HAVE_AVAHI 1
++
++/* define if vsnprintf is C99 compliant */
++#define HAVE_C99_VSNPRINTF 1
++
++/* Define to 1 if you have the <ctype.h> header file. */
++#define HAVE_CTYPE_H 1
++
++/* Define to 1 if you have the declaration of `asprintf', and to 0 if you
++ don't. */
++#define HAVE_DECL_ASPRINTF 1
++
++/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
++ don't. */
++#define HAVE_DECL_SNPRINTF 1
++
++/* Define to 1 if you have the declaration of `strndup', and to 0 if you
++ don't. */
++#define HAVE_DECL_STRNDUP 1
++
++/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you
++ don't. */
++#define HAVE_DECL_VASPRINTF 1
++
++/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
++ don't. */
++#define HAVE_DECL_VSNPRINTF 1
++
++/* Define to 1 if you have the <float.h> header file. */
++#define HAVE_FLOAT_H 1
++
++/* Define to 1 if you have the `flock' function. */
++#define HAVE_FLOCK 1
++
++/* Define to 1 if you have the `getaddrinfo' function. */
++#define HAVE_GETADDRINFO 1
++
++/* Define to 1 if you have the `getcwd' function. */
++#define HAVE_GETCWD 1
++
++/* Define to 1 if you have the `geteuid' function. */
++#define HAVE_GETEUID 1
++
++/* Define to 1 if you have the `getnameinfo' function. */
++#define HAVE_GETNAMEINFO 1
++
++/* Define to 1 if you have the `getrusage' function. */
++#define HAVE_GETRUSAGE 1
++
++/* Define to 1 if you have the `gettimeofday' function. */
++#define HAVE_GETTIMEOFDAY 1
++
++/* Define to 1 if you have the `getuid' function. */
++#define HAVE_GETUID 1
++
++/* Define to 1 if you have the `getwd' function. */
++#define HAVE_GETWD 1
++
++/* Define to 1 if you have the `hstrerror' function. */
++#define HAVE_HSTRERROR 1
++
++/* Define to 1 if you have the `inet_ntoa' function. */
++#define HAVE_INET_NTOA 1
++
++/* Define to 1 if you have the `inet_ntop' function. */
++#define HAVE_INET_NTOP 1
++
++/* Define to 1 if you have the <inttypes.h> header file. */
++#define HAVE_INTTYPES_H 1
++
++/* Define to 1 if the system has the type `in_addr_t'. */
++#define HAVE_IN_ADDR_T 1
++
++/* Define to 1 if the system has the type `in_port_t'. */
++#define HAVE_IN_PORT_T 1
++
++/* Define to 1 if you have the `lockf' function. */
++#define HAVE_LOCKF 1
++
++/* Define to 1 if you have the `mcheck' function. */
++#define HAVE_MCHECK 1
++
++/* Define to 1 if you have the <mcheck.h> header file. */
++#define HAVE_MCHECK_H 1
++
++/* Define to 1 if you have the <memory.h> header file. */
++#define HAVE_MEMORY_H 1
++
++/* Define to 1 if you have the `mmap' function. */
++#define HAVE_MMAP 1
++
++/* Define to 1 if you have the <netinet/in.h> header file. */
++#define HAVE_NETINET_IN_H 1
++
++/* Define to 1 if you have the <resolv.h> header file. */
++#define HAVE_RESOLV_H 1
++
++/* Define to 1 if you have the `sendfile' function. */
++#define HAVE_SENDFILE 1
++
++/* Define to 1 if you have the `setgroups' function. */
++#define HAVE_SETGROUPS 1
++
++/* Define to 1 if you have the `setreuid' function. */
++#define HAVE_SETREUID 1
++
++/* Define to 1 if you have the `setsid' function. */
++#define HAVE_SETSID 1
++
++/* Define to 1 if you have the `setuid' function. */
++#define HAVE_SETUID 1
++
++/* Define to 1 if you have the `snprintf' function. */
++#define HAVE_SNPRINTF 1
++
++/* define if you have struct sockaddr_storage */
++#define HAVE_SOCKADDR_STORAGE 1
++
++/* define if you have a working socketpair */
++#define HAVE_SOCKETPAIR 1
++
++/* Define to 1 if you have the <stdint.h> header file. */
++#define HAVE_STDINT_H 1
++
++/* Define to 1 if you have the <stdlib.h> header file. */
++#define HAVE_STDLIB_H 1
++
++/* Define to 1 if you have the `strerror' function. */
++#define HAVE_STRERROR 1
++
++/* Define to 1 if you have the <strings.h> header file. */
++#define HAVE_STRINGS_H 1
++
++/* Define to 1 if you have the <string.h> header file. */
++#define HAVE_STRING_H 1
++
++/* Define to 1 if you have the `strlcpy' function. */
++/* #undef HAVE_STRLCPY */
++
++/* Define to 1 if you have the `strndup' function. */
++#define HAVE_STRNDUP 1
++
++/* Define to 1 if you have the `strsignal' function. */
++#define HAVE_STRSIGNAL 1
++
++/* Define to 1 if you have the <sys/loadavg.h> header file. */
++/* #undef HAVE_SYS_LOADAVG_H */
++
++/* Define to 1 if you have the <sys/mman.h> header file. */
++#define HAVE_SYS_MMAN_H 1
++
++/* Define to 1 if you have the <sys/resource.h> header file. */
++#define HAVE_SYS_RESOURCE_H 1
++
++/* Define to 1 if you have the <sys/select.h> header file. */
++#define HAVE_SYS_SELECT_H 1
++
++/* Define to 1 if you have the <sys/sendfile.h> header file. */
++#define HAVE_SYS_SENDFILE_H 1
++
++/* Define to 1 if you have the <sys/signal.h> header file. */
++#define HAVE_SYS_SIGNAL_H 1
++
++/* Define to 1 if you have the <sys/socket.h> header file. */
++#define HAVE_SYS_SOCKET_H 1
++
++/* Define to 1 if you have the <sys/stat.h> header file. */
++#define HAVE_SYS_STAT_H 1
++
++/* Define to 1 if you have the <sys/types.h> header file. */
++#define HAVE_SYS_TYPES_H 1
++
++/* Define to 1 if you have the <unistd.h> header file. */
++#define HAVE_UNISTD_H 1
++
++/* Define if your cpp has vararg macros */
++#define HAVE_VARARG_MACROS
++
++/* Define to 1 if you have the `vasprintf' function. */
++#define HAVE_VASPRINTF 1
++
++/* Whether __va_copy() is available */
++#define HAVE_VA_COPY 1
++
++/* Define to 1 if you have the `vsnprintf' function. */
++#define HAVE_VSNPRINTF 1
++
++/* Define to 1 if you have the `wait3' function. */
++#define HAVE_WAIT3 1
++
++/* Define to 1 if you have the `wait4' function. */
++#define HAVE_WAIT4 1
++
++/* Define to 1 if you have the `waitpid' function. */
++#define HAVE_WAITPID 1
++
++/* Define if MAP_FAILED constant not available */
++#define MAP_FAILED (void *)-1L
++
++/* Define to the address where bug reports for this package should be sent. */
++#define PACKAGE_BUGREPORT "distcc@lists.samba.org"
++
++/* Define to the full name of this package. */
++#define PACKAGE_NAME "distcc"
++
++/* Define to the full name and version of this package. */
++#define PACKAGE_STRING "distcc 2.18.3"
++
++/* Define to the one symbol short name of this package. */
++#define PACKAGE_TARNAME "distcc"
++
++/* Define to the version of this package. */
++#define PACKAGE_VERSION "2.18.3"
++
++/* Define as the return type of signal handlers (`int' or `void'). */
++#define RETSIGTYPE void
++
++/* Define to 1 if you have the ANSI C header files. */
++#define STDC_HEADERS 1
++
++/* Use GNOME */
++#define WITH_GNOME 1
++
++/* Use GTK+ */
++/* #undef WITH_GTK */
++
++/* Define to `__inline__' or `__inline' if that's what the C compiler
++ calls it, or to nothing if 'inline' is not supported under any name. */
++#ifndef __cplusplus
++/* #undef inline */
++#endif
++
++/* type to use in place of socklen_t if not defined */
++/* #undef socklen_t */
diff --git a/packages/distcc/files/no-man.patch b/packages/distcc/files/no-man.patch
new file mode 100644
index 0000000000..ac1c18ac96
--- /dev/null
+++ b/packages/distcc/files/no-man.patch
@@ -0,0 +1,11 @@
+--- /tmp/Makefile.in 2008-01-06 16:44:45.696595605 +0100
++++ distcc-2.18.3/Makefile.in 2008-01-06 16:44:56.879181132 +0100
+@@ -556,7 +556,7 @@
+ # install-sh can't handle multiple arguments, but we don't need any
+ # tricky features so mkinstalldirs and cp will do
+
+-install: showpaths install-doc install-man install-programs install-example @INSTALL_GNOME@
++install: showpaths install-doc install-programs install-example @INSTALL_GNOME@
+
+ install-programs: $(bin_PROGRAMS)
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
diff --git a/packages/libvncserver/.mtn2git_empty b/packages/docbook-dsssl-stylesheets/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libvncserver/.mtn2git_empty
+++ b/packages/docbook-dsssl-stylesheets/.mtn2git_empty
diff --git a/packages/docbook-dsssl-stylesheets/docbook-dsssl-stylesheets-native_1.79.bb b/packages/docbook-dsssl-stylesheets/docbook-dsssl-stylesheets-native_1.79.bb
new file mode 100644
index 0000000000..1be79d7cc5
--- /dev/null
+++ b/packages/docbook-dsssl-stylesheets/docbook-dsssl-stylesheets-native_1.79.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "DSSSL stylesheets used to transform SGML and XML DocBook files"
+
+# Simple persmissive
+LICENSE = "DSSSL"
+
+DEPENDS = "sgml-common-native"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/docbook/docbook-dsssl-${PV}.tar.bz2"
+
+S = "${WORKDIR}/docbook-dsssl-${PV}"
+
+inherit native
+
+do_stage () {
+ # Refer to http://www.linuxfromscratch.org/blfs/view/stable/pst/docbook-dsssl.html
+ # for details.
+ install -d ${STAGING_BINDIR_NATIVE}
+ install -m 0755 bin/collateindex.pl ${STAGING_BINDIR_NATIVE}
+
+ install -d ${STAGING_DATADIR}/sgml/docbook/dsssl-stylesheets-${PV}
+ install -m 0644 catalog ${STAGING_DATADIR}/sgml/docbook/dsssl-stylesheets-${PV}
+ cp -dpr common ${STAGING_DATADIR}/sgml/docbook/dsssl-stylesheets-${PV}
+
+ install-catalog --add ${sysconfdir}/sgml/dsssl-docbook-stylesheets.cat \
+ ${STAGING_DATADIR}/sgml/docbook/dsssl-stylesheets-${PV}/catalog
+
+ install-catalog --add ${sysconfdir}/sgml/dsssl-docbook-stylesheets.cat \
+ ${STAGING_DATADIR}/sgml/docbook/dsssl-stylesheets-${PV}/common/catalog
+
+ install-catalog --add ${sysconfdir}/sgml/sgml-docbook.cat \
+ ${sysconfdir}/sgml/dsssl-docbook-stylesheets.cat
+
+}
+
+PACKAGES = ""
diff --git a/packages/libxml/files/.mtn2git_empty b/packages/docbook-sgml-dtd/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/libxml/files/.mtn2git_empty
+++ b/packages/docbook-sgml-dtd/.mtn2git_empty
diff --git a/packages/docbook-sgml-dtd/docbook-sgml-dtd-3.1-native.bb b/packages/docbook-sgml-dtd/docbook-sgml-dtd-3.1-native.bb
new file mode 100644
index 0000000000..4b0e4629b8
--- /dev/null
+++ b/packages/docbook-sgml-dtd/docbook-sgml-dtd-3.1-native.bb
@@ -0,0 +1,12 @@
+require docbook-sgml-dtd-native.inc
+
+DTD_VERSION = "3.1"
+
+SRC_URI = "http://www.docbook.org/sgml/3.1/docbk31.zip;md5sum=432749c0c806dbae81c8bcb70da3b5d3"
+
+do_compile() {
+ # Refer to http://www.linuxfromscratch.org/blfs/view/stable/pst/sgml-dtd-3.html
+ # for details.
+ sed -i -e '/ISO 8879/d' -e 's|DTDDECL "-//OASIS//DTD DocBook V3.1//EN"|SGMLDECL|g' docbook.cat
+}
+
diff --git a/packages/docbook-sgml-dtd/docbook-sgml-dtd-4.1-native.bb b/packages/docbook-sgml-dtd/docbook-sgml-dtd-4.1-native.bb
new file mode 100644
index 0000000000..bd75d6ad68
--- /dev/null
+++ b/packages/docbook-sgml-dtd/docbook-sgml-dtd-4.1-native.bb
@@ -0,0 +1,12 @@
+require docbook-sgml-dtd-native.inc
+
+DTD_VERSION = "4.1"
+
+SRC_URI = "http://docbook.org/sgml/4.1/docbk41.zip"
+
+do_compile() {
+ # Refer to http://www.linuxfromscratch.org/blfs/view/stable/pst/sgml-dtd.html
+ # for details.
+ sed -i -e '/ISO 8879/d' -e '/gml/d' docbook.cat
+}
+
diff --git a/packages/docbook-sgml-dtd/docbook-sgml-dtd-4.4-native.bb b/packages/docbook-sgml-dtd/docbook-sgml-dtd-4.4-native.bb
new file mode 100644
index 0000000000..4ff48b7940
--- /dev/null
+++ b/packages/docbook-sgml-dtd/docbook-sgml-dtd-4.4-native.bb
@@ -0,0 +1,10 @@
+require docbook-sgml-dtd-native.inc
+
+DTD_VERSION = "4.4"
+
+do_compile() {
+ # Refer to http://www.linuxfromscratch.org/blfs/view/stable/pst/sgml-dtd.html
+ # for details.
+ sed -i -e '/ISO 8879/d' -e '/gml/d' docbook.cat
+}
+
diff --git a/packages/docbook-sgml-dtd/docbook-sgml-dtd-native.inc b/packages/docbook-sgml-dtd/docbook-sgml-dtd-native.inc
new file mode 100644
index 0000000000..69c9811d8a
--- /dev/null
+++ b/packages/docbook-sgml-dtd/docbook-sgml-dtd-native.inc
@@ -0,0 +1,31 @@
+# The DTDs of the various versions have to be installed in parallel and should
+# not replace each other. The installation step is common for all versions
+# and just differs in the DTD_VERSION.
+#
+# However the DTDs need some quirks (see LFS documentation).
+
+DESCRIPTION = "Document type definitions for verification of SGML data files against the DocBook rule set"
+
+DEPENDS = "sgml-common-native"
+
+SRC_URI = "http://www.docbook.org/sgml/${DTD_VERSION}/docbook-${DTD_VERSION}.zip"
+
+S = "${WORKDIR}"
+
+inherit native
+
+do_stage () {
+ # Refer to http://www.linuxfromscratch.org/blfs/view/stable/pst/sgml-dtd.html
+ # for details.
+ install -d -m 755 ${STAGING_DATADIR}/sgml/docbook/sgml-dtd-${DTD_VERSION}
+ install docbook.cat ${STAGING_DATADIR}/sgml/docbook/sgml-dtd-${DTD_VERSION}/catalog
+ cp -dpr *.dtd *.mod *.dcl ${STAGING_DATADIR}/sgml/docbook/sgml-dtd-${DTD_VERSION}
+
+ install-catalog --add ${sysconfdir}/sgml/sgml-docbook-dtd-${DTD_VERSION}.cat \
+ ${STAGING_DATADIR}/sgml/docbook/sgml-dtd-${DTD_VERSION}/catalog
+
+ install-catalog --add ${sysconfdir}/sgml/sgml-docbook-dtd-${DTD_VERSION}.cat \
+ ${sysconfdir}/sgml/sgml-docbook.cat
+}
+
+PACKAGES = ""
diff --git a/packages/docbook-utils/docbook-utils-native_0.6.13.bb b/packages/docbook-utils/docbook-utils-native_0.6.13.bb
index a8b6f6a4d6..19aa327107 100644
--- a/packages/docbook-utils/docbook-utils-native_0.6.13.bb
+++ b/packages/docbook-utils/docbook-utils-native_0.6.13.bb
@@ -1,6 +1,6 @@
SECTION = "console/utils"
LICENSE = "GPL"
-DEPENDS = "openjade-native"
+DEPENDS = "openjade-native docbook-sgml-dtd-3.1-native docbook-dsssl-stylesheets-native"
SRC_URI = "ftp://sources.redhat.com/pub/docbook-tools/new-trials/SOURCES/docbook-utils-${PV}.tar.gz"
S = "${WORKDIR}/docbook-utils-${PV}"
diff --git a/packages/docbook-utils/docbook-utils-native_0.6.14.bb b/packages/docbook-utils/docbook-utils-native_0.6.14.bb
new file mode 100644
index 0000000000..af1113b331
--- /dev/null
+++ b/packages/docbook-utils/docbook-utils-native_0.6.14.bb
@@ -0,0 +1,41 @@
+SECTION = "console/utils"
+LICENSE = "GPL"
+
+PR = "r1"
+
+DEPENDS = "openjade-native sgmlspl-native docbook-dsssl-stylesheets-native docbook-sgml-dtd-3.1-native"
+
+SRC_URI = "ftp://sources.redhat.com/pub/docbook-tools/new-trials/SOURCES/docbook-utils-${PV}.tar.gz"
+S = "${WORKDIR}/docbook-utils-${PV}"
+
+inherit autotools native
+
+do_configure_prepend() {
+ # Prevents the jw script to search on the build system.
+ sed -i -e "s|/etc/sgml|${sysconfdir}/sgml|g" bin/jw.in
+
+ sed -i -e "s|/etc/sgml|${sysconfdir}/sgml|g" doc/man/Makefile.am
+ sed -i -e "s|/etc/sgml|${sysconfdir}/sgml|g" doc/HTML/Makefile.am
+}
+
+do_stage () {
+ install -d ${STAGING_BINDIR_NATIVE}/
+
+ # Installs the binaries and a bunch of other commonly used names for them.
+ for doctype in html ps dvi man pdf rtf tex texi txt
+ do
+ install -m 0755 ${S}/bin/docbook2$doctype ${STAGING_BINDIR_NATIVE}/
+ ln -sf docbook2$doctype ${STAGING_BINDIR_NATIVE}/db2$doctype
+ ln -sf docbook2$doctype ${STAGING_BINDIR_NATIVE}/docbook-to-$doctype
+ done
+ install -m 0755 ${S}/bin/jw ${STAGING_BINDIR_NATIVE}/
+
+ for i in backends/dvi backends/html backends/man \
+ backends/pdf backends/ps backends/rtf backends/tex \
+ backends/texi backends/txt frontends/docbook \
+ helpers/docbook2man-spec.pl helpers/docbook2texi-spec.pl \
+ docbook-utils.dsl; do
+ install -d ${STAGING_DATADIR}/sgml/docbook/utils-${PV}/`dirname $i`
+ install ${S}/$i ${STAGING_DATADIR}/sgml/docbook/utils-${PV}/$i
+ done
+}
diff --git a/packages/docbook-utils/docbook-utils_0.6.13.bb b/packages/docbook-utils/docbook-utils_0.6.13.bb
index c22d9053bf..ab27062970 100644
--- a/packages/docbook-utils/docbook-utils_0.6.13.bb
+++ b/packages/docbook-utils/docbook-utils_0.6.13.bb
@@ -5,6 +5,9 @@ DESCRIPTION = "docbook-utils contains scripts for easy conversion \
from DocBook SGML files to other formats (for example, HTML, RTF, \
and PostScript), and for comparing SGML files."
+# Not tested.
+DEFAULT_PREFERENCE = "-1"
+
SRC_URI = "ftp://sources.redhat.com/pub/docbook-tools/new-trials/SOURCES/docbook-utils-${PV}.tar.gz"
inherit autotools
diff --git a/packages/docbook-utils/docbook-utils_0.6.14.bb b/packages/docbook-utils/docbook-utils_0.6.14.bb
new file mode 100644
index 0000000000..c22d9053bf
--- /dev/null
+++ b/packages/docbook-utils/docbook-utils_0.6.14.bb
@@ -0,0 +1,10 @@
+SECTION = "console/utils"
+LICENSE = "GPL"
+DEPENDS = ""
+DESCRIPTION = "docbook-utils contains scripts for easy conversion \
+from DocBook SGML files to other formats (for example, HTML, RTF, \
+and PostScript), and for comparing SGML files."
+
+SRC_URI = "ftp://sources.redhat.com/pub/docbook-tools/new-trials/SOURCES/docbook-utils-${PV}.tar.gz"
+
+inherit autotools
diff --git a/packages/dpkg/dpkg.inc b/packages/dpkg/dpkg.inc
index 5fab2a7e3a..1065f2c186 100644
--- a/packages/dpkg/dpkg.inc
+++ b/packages/dpkg/dpkg.inc
@@ -22,9 +22,9 @@ pkg_postinst_dpkg () {
if [ "x$D" != "x" ]; then
install -d ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d
# this happens at S98 where our good 'ole packages script used to run
- echo -e "#!/bin/sh
+ printf "#!/bin/sh
dpkg --configure -a
-" > ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d/S${DPKG_INIT_POSITION}configure
+\n" > ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d/S${DPKG_INIT_POSITION}configure
chmod 0755 ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d/S${DPKG_INIT_POSITION}configure
fi
}
diff --git a/packages/linux/linux-handhelds-2.6/.mtn2git_empty b/packages/dtnrg/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/.mtn2git_empty
+++ b/packages/dtnrg/.mtn2git_empty
diff --git a/packages/dtnrg/dtn_2.5.0.bb b/packages/dtnrg/dtn_2.5.0.bb
new file mode 100644
index 0000000000..5975a29e7c
--- /dev/null
+++ b/packages/dtnrg/dtn_2.5.0.bb
@@ -0,0 +1,67 @@
+DESCRIPTION = "Delay Tolerant Networking Package"
+HOMEPAGE = "http://www.dtnrg.org/wiki"
+SECTION = "libs"
+DEPENDS = "db openssl python-native xerces-c"
+LICENSE = "Apache"
+SRC_URI = "http://www.dtnrg.org/docs/code/dtn_${PV}.tgz"
+PR = "r2"
+
+inherit autotools
+
+EXTRA_OECONF = "\
+ --with-python=${STAGING_BINDIR_NATIVE}/python \
+ --with-db=${STAGING_DIR} \
+ --with-tcl=${STAGING_DIR} \
+ --without-google-perftools \
+ --without-bluez \
+ --without-bonjour \
+ --with-expat=${STAGING_DIR} \
+ --with-xerces-c=${STAGING_DIR} \
+ --without-tclreadline \
+ --with-zlib=${STAGING_DIR} \
+ --without-xsd-tool \
+ --with-db=${STAGING_DIR} \
+ --enable-ecl \
+ --enable-edp \
+ --without-mysql \
+ --without-postgres \
+ --with-openssl=${STAGING_DIR} \
+"
+
+def dtn_python_dir(d):
+ import os, bb
+ staging_incdir = bb.data.getVar( "STAGING_INCDIR", d, 1 )
+ if os.path.exists( "%s/python2.5" % staging_incdir ): return "python2.5"
+ if os.path.exists( "%s/python2.4" % staging_incdir ): return "python2.4"
+ if os.path.exists( "%s/python2.3" % staging_incdir ): return "python2.3"
+ raise "No Python in STAGING_INCDIR. Forgot to build python-native ?"
+
+PYTHON_DIR = "${@dtn_python_dir(d)}"
+
+# use this syntax once everyone has at least bitbake 1.8.9
+#export BUILD_SYS
+#export HOST_SYS
+
+export BUILD_SYS:="${BUILD_SYS}"
+export HOST_SYS:="${HOST_SYS}"
+
+do_configure_prepend() {
+ for i in aclocal/*.ac oasys/aclocal/*.ac; do
+ install -m 0644 $i ${STAGING_DATADIR}/aclocal/`basename $i`.m4
+ done
+ autotools_do_configure
+}
+
+do_install_append() {
+ cd applib/python
+ INCDIR=../.. LIBDIR=.. VERSION=${PV} python setup.py install --prefix=${D}/${prefix} --install-data=${D}/${datadir}
+}
+
+PACKAGES =+ "${PN}-lib"
+FILES_${PN}-lib = "${libdir}/*.so*"
+PACKAGES += "python-dtn"
+DESCRIPTION_python-dtn = "Python bindings to the DTN API"
+PR_python-dtn = "ml2"
+FILES_python-dtn = "${libdir}/${PYTHON_DIR}"
+RDEPENDS_python-dtn = "python-core dtn-lib"
+FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/.debug"
diff --git a/packages/e17/e-utils_cvs.bb b/packages/e17/e-utils_cvs.bb
index ea27040ab2..6335f03b43 100644
--- a/packages/e17/e-utils_cvs.bb
+++ b/packages/e17/e-utils_cvs.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Enlightenment Window Manager Utilities"
DEPENDS = "eet evas ecore edje esmart ewl engrave"
-LICENSE = "MIT"
+LICENSE = "MIT BSD"
PV = "0.0.0+cvs${SRCDATE}"
PR = "r0"
diff --git a/packages/e17/e-wm_0.16.999.038.bb b/packages/e17/e-wm_0.16.999.038.bb
deleted file mode 100644
index 12784ea18f..0000000000
--- a/packages/e17/e-wm_0.16.999.038.bb
+++ /dev/null
@@ -1,48 +0,0 @@
-DESCRIPTION = "E17 - the Enlightenment Window Mananger"
-DEPENDS = "eet evas ecore edje efreet"
-LICENSE = "MIT"
-PR = "r7"
-
-inherit e update-alternatives
-
-SRC_URI = "${E_URI}/enlightenment-${PV}.tar.gz \
- file://fix-configure.patch;patch=1 \
- file://set-autoscroll-defaults.patch;patch=1 \
- file://Xsession.d/98enlightenment \
- file://applications.menu \
- "
-
-S = "${WORKDIR}/enlightenment-${PV}"
-
-PROFILE = "LOWRES_PDA"
-PROFILE_c7x0 = "HIRES_PDA"
-PROFILE_tosa = "HIRES_PDA"
-PROFILE_spitz = "HIRES_PDA"
-PROFILE_akita = "HIRES_PDA"
-
-EXTRA_OECONF = "--with-profile=${PROFILE} \
- --with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \
- --x-includes=${STAGING_INCDIR}/X11 \
- --x-libraries=${STAGING_LIBDIR}"
-
-FILES_${PN} = "${bindir}/* ${libdir}/enlightenment/modules/*/*.edj ${libdir}/enlightenment/modules/*/*.desktop ${libdir}/enlightenment/modules/*/*/*.so ${libdir}/enlightenment/preload/*.so ${datadir} ${sysconfdir} ${libdir}/enlightenment/modules/cpufreq/*/freqset"
-FILES_${PN}-dev += "${libdir}/enlightenment/modules/*/*/*.a ${libdir}/enlightenment/modules/*/*/*.la ${libdir}/enlightenment/preload/*.a ${libdir}/enlightenment/preload/*.la"
-FILES_${PN}-dbg += "${libdir}/enlightenment/modules/*/*/.debug/ ${libdir}/enlightenment/preload/.debug/"
-
-do_compile_prepend() {
- find ${S} -name Makefile | xargs sed -i 's:/usr/include:${STAGING_INCDIR}:'
- find ${S} -name Makefile | xargs sed -i 's:/usr/X11R6/include:${STAGING_INCDIR}:'
-}
-
-do_install_append() {
- install -d ${D}/${sysconfdir}/X11/Xsession.d
- install -m 755 ${WORKDIR}/Xsession.d/98enlightenment ${D}/${sysconfdir}/X11/Xsession.d
-
- install -d ${D}/${sysconfdir}/xdg/menus
- install -m 644 ${WORKDIR}/applications.menu ${D}/${sysconfdir}/xdg/menus/
-}
-
-ALTERNATIVE_PATH = "${bindir}/enlightenment_start"
-ALTERNATIVE_NAME = "x-window-manager"
-ALTERNATIVE_LINK = "${bindir}/x-window-manager"
-ALTERNATIVE_PRIORITY = "16"
diff --git a/packages/e17/e-wm_0.16.999.041.bb b/packages/e17/e-wm_0.16.999.041.bb
deleted file mode 100644
index 4e6457cc2e..0000000000
--- a/packages/e17/e-wm_0.16.999.041.bb
+++ /dev/null
@@ -1,48 +0,0 @@
-DESCRIPTION = "E17 - the Enlightenment Window Mananger"
-DEPENDS = "eet evas ecore edje efreet"
-LICENSE = "MIT"
-PR = "r0"
-
-inherit e update-alternatives
-
-SRC_URI = "http://download.enlightenment.org/snapshots/2007-08-26/enlightenment-${PV}.tar.gz \
- file://fix-configure.patch;patch=1 \
- file://set-autoscroll-defaults.patch;patch=1 \
- file://Xsession.d/98enlightenment \
- file://applications.menu \
- "
-
-S = "${WORKDIR}/enlightenment-${PV}"
-
-PROFILE = "LOWRES_PDA"
-PROFILE_c7x0 = "HIRES_PDA"
-PROFILE_tosa = "HIRES_PDA"
-PROFILE_spitz = "HIRES_PDA"
-PROFILE_akita = "HIRES_PDA"
-
-EXTRA_OECONF = "--with-profile=${PROFILE} \
- --with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \
- --x-includes=${STAGING_INCDIR}/X11 \
- --x-libraries=${STAGING_LIBDIR}"
-
-FILES_${PN} = "${bindir}/* ${libdir}/enlightenment/modules/*/*.edj ${libdir}/enlightenment/modules/*/*.desktop ${libdir}/enlightenment/modules/*/*/*.so ${libdir}/enlightenment/preload/*.so ${datadir} ${sysconfdir} ${libdir}/enlightenment/modules/cpufreq/*/freqset"
-FILES_${PN}-dev += "${libdir}/enlightenment/modules/*/*/*.a ${libdir}/enlightenment/modules/*/*/*.la ${libdir}/enlightenment/preload/*.a ${libdir}/enlightenment/preload/*.la"
-FILES_${PN}-dbg += "${libdir}/enlightenment/modules/*/*/.debug/ ${libdir}/enlightenment/preload/.debug/"
-
-do_compile_prepend() {
- find ${S} -name Makefile | xargs sed -i 's:/usr/include:${STAGING_INCDIR}:'
- find ${S} -name Makefile | xargs sed -i 's:/usr/X11R6/include:${STAGING_INCDIR}:'
-}
-
-do_install_append() {
- install -d ${D}/${sysconfdir}/X11/Xsession.d
- install -m 755 ${WORKDIR}/Xsession.d/98enlightenment ${D}/${sysconfdir}/X11/Xsession.d
-
- install -d ${D}/${sysconfdir}/xdg/menus
- install -m 644 ${WORKDIR}/applications.menu ${D}/${sysconfdir}/xdg/menus/
-}
-
-ALTERNATIVE_PATH = "${bindir}/enlightenment_start"
-ALTERNATIVE_NAME = "x-window-manager"
-ALTERNATIVE_LINK = "${bindir}/x-window-manager"
-ALTERNATIVE_PRIORITY = "16"
diff --git a/packages/e17/e-wm_cvs.bb b/packages/e17/e-wm_cvs.bb
new file mode 100644
index 0000000000..e7af400a1c
--- /dev/null
+++ b/packages/e17/e-wm_cvs.bb
@@ -0,0 +1,61 @@
+DESCRIPTION = "The Enlightenment Window Mananger Version 17"
+DEPENDS = "eet evas ecore edje efreet"
+LICENSE = "MIT BSD"
+PV = "0.16.999.042+cvs${SRCDATE}"
+PR = "r0"
+
+inherit e update-alternatives
+
+SRC_URI = "${E_CVS};module=e17/apps/e \
+ file://Xsession.d/98enlightenment \
+ file://applications.menu \
+ file://Makefile.in.in \
+"
+S = "${WORKDIR}/e"
+
+EXTRA_OECONF = "\
+ --with-edje-cc=${STAGING_BINDIR_NATIVE}/edje_cc \
+ --x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} \
+ --enable-simple-x11 \
+"
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/Makefile.in.in po/
+ echo "install -d $*" >./mkinstalldirs
+ chmod a+rx ./mkinstalldirs
+}
+
+do_stage() {
+ autotools_stage_all
+ for I in `find ${STAGING_LIBDIR}/enlightenment -name "*.la" -print`; do rm -f $I; done
+ for I in `find ${STAGING_LIBDIR}/enlightenment -name "*.a" -print`; do rm -f $I; done
+ for I in `find ${STAGING_LIBDIR_CROSS}/enlightenment -name "*.la" -print`; do rm -f $I; done
+ for I in `find ${STAGING_LIBDIR_CROSS}/enlightenment -name "*.a" -print`; do rm -f $I; done
+}
+
+do_install_append() {
+ # customising - should rather make this simple upstream
+ install -d ${D}/${sysconfdir}/X11/Xsession.d
+ install -m 755 ${WORKDIR}/Xsession.d/98enlightenment ${D}/${sysconfdir}/X11/Xsession.d
+ install -d ${D}/${sysconfdir}/xdg/menus
+ install -m 644 ${WORKDIR}/applications.menu ${D}/${sysconfdir}/xdg/menus/
+}
+
+FILES_${PN} = "\
+ ${bindir}/* \
+ ${libdir}/enlightenment/modules/*/*.* \
+ ${libdir}/enlightenment/modules/*/*/* \
+ ${libdir}/enlightenment/preload/*.so \
+ ${datadir} \
+ ${sysconfdir} \
+"
+FILES_${PN}-dbg += "\
+ ${libdir}/enlightenment/modules/*/*/.debug/ \
+ ${libdir}/enlightenment/preload/.debug/ \
+"
+
+ALTERNATIVE_PATH = "${bindir}/enlightenment_start"
+ALTERNATIVE_NAME = "x-window-manager"
+ALTERNATIVE_LINK = "${bindir}/x-window-manager"
+ALTERNATIVE_PRIORITY = "16"
diff --git a/packages/e17/edje-editor_cvs.bb b/packages/e17/edje-editor_cvs.bb
index b2483f2bfb..62cda08e14 100644
--- a/packages/e17/edje-editor_cvs.bb
+++ b/packages/e17/edje-editor_cvs.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Edje-Editor is just that."
-LICENSE = "MIT"
+LICENSE = "MIT BSD"
DEPENDS = "etk"
PV = "0.0.0+cvs${SRCDATE}"
PR = "r0"
diff --git a/packages/linux/linux-handhelds-2.6/asus620/.mtn2git_empty b/packages/e17/edje-viewer/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/asus620/.mtn2git_empty
+++ b/packages/e17/edje-viewer/.mtn2git_empty
diff --git a/packages/e17/edje-viewer/no-minimal-size.patch b/packages/e17/edje-viewer/no-minimal-size.patch
new file mode 100644
index 0000000000..944447c03f
--- /dev/null
+++ b/packages/e17/edje-viewer/no-minimal-size.patch
@@ -0,0 +1,27 @@
+--- A/src/bin/etk_gui.c 2008-01-13 20:08:45.000000000 +0100
++++ B/src/bin/etk_gui.c.patched 2008-01-13 20:50:06.000000000 +0100
+@@ -147,21 +147,21 @@
+ etk_tree_col_model_add(col2, etk_tree_model_checkbox_new());
+ etk_tree_build(ETK_TREE(gui->tree));
+ etk_tree_col_sort_set(col2, gui_visibility_col_sort_cb, NULL);
+- etk_widget_size_request_set(gui->tree, 300, 0);
++ etk_widget_size_request_set(gui->tree, 0, 0);
+ etk_signal_connect_by_code(ETK_WIDGET_KEY_DOWN_SIGNAL,
+ ETK_OBJECT(gui->tree),
+ ETK_CALLBACK(_gui_tree_key_down_cb), gui);
+ etk_paned_child1_set(ETK_PANED(paned), gui->tree, ETK_FALSE);
+
+ gui->canvas = etk_canvas_new();
+- etk_widget_size_request_set(gui->canvas, 500, 500);
++ etk_widget_size_request_set(gui->canvas, 50, 50);
+ etk_object_notification_callback_add(ETK_OBJECT(gui->canvas), "geometry",
+ canvas_resize_cb, NULL);
+ etk_paned_child2_set(ETK_PANED(paned), gui->canvas, ETK_TRUE);
+
+ gui->output = etk_tree_new();
+ etk_tree_headers_visible_set(ETK_TREE(gui->output), ETK_TRUE);
+- col = etk_tree_col_new(ETK_TREE(gui->output), _("Output"), 200, 0.0);
++ col = etk_tree_col_new(ETK_TREE(gui->output), _("Output"), 100, 0.0);
+ etk_tree_col_model_add(col, etk_tree_model_text_new());
+ etk_tree_col_expand_set(col, ETK_TRUE);
+ etk_tree_build(ETK_TREE(gui->output));
diff --git a/packages/e17/edje-viewer_cvs.bb b/packages/e17/edje-viewer_cvs.bb
index 1a15746ca4..8ffd96992a 100644
--- a/packages/e17/edje-viewer_cvs.bb
+++ b/packages/e17/edje-viewer_cvs.bb
@@ -1,12 +1,13 @@
DESCRIPTION = "Edje_Viewer is just that."
DEPENDS = "etk"
-LICENSE = "MIT"
+LICENSE = "MIT BSD"
PV = "0.0.0+cvs${SRCDATE}"
-PR = "r0"
+PR = "r3"
inherit e
-SRC_URI = "${E_CVS};module=e17/apps/edje_viewer"
+SRC_URI = "${E_CVS};module=e17/apps/edje_viewer \
+ file://no-minimal-size.patch;patch=1"
S = "${WORKDIR}/edje_viewer"
FILES_${PN} = "${bindir}/* ${libdir}/* ${datadir} ${sysconfdir} ${sbindir}"
diff --git a/packages/e17/enna_cvs.bb b/packages/e17/enna_cvs.bb
new file mode 100644
index 0000000000..7f2c6eb632
--- /dev/null
+++ b/packages/e17/enna_cvs.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Enna is a media center application based on EFL"
+LICENSE = "GPL"
+DEPENDS = "curl dbus eet evas edje ecore edbus emotion libmusicbrainz libxml2 taglibc"
+SECTION = "x11/multimedia"
+PV = "0.2.0+cvs${SRCDATE}"
+
+inherit e
+
+SRC_URI = "${E_CVS};module=misc/enna \
+ file://locale-is-broken.patch;patch=1"
+S = "${WORKDIR}/enna"
+
+do_configure_prepend() {
+ touch po/Makefile.in.in
+}
diff --git a/packages/e17/enna_svn.bb b/packages/e17/enna_svn.bb
deleted file mode 100644
index 49e1caeab0..0000000000
--- a/packages/e17/enna_svn.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-DESCRIPTION = "Enna is a media center application based on EFL"
-LICENSE = "GPL"
-DEPENDS = "curl dbus eet evas edje ecore edbus emotion libmusicbrainz libxml2 taglibc"
-SECTION = "x11/multimedia"
-PV = "0.2.0+svn${SRCDATE}"
-
-inherit e
-
-SRC_URI = "svn://enna.svn.sourceforge.net/svnroot/enna/trunk;module=enna;proto=http \
- file://locale-is-broken.patch;patch=1"
-S = "${WORKDIR}/enna"
-
-do_configure_prepend() {
- touch po/Makefile.in.in
-}
-
diff --git a/packages/e17/entice_cvs.bb b/packages/e17/entice_cvs.bb
index 62a80ead47..f0a7335d6c 100644
--- a/packages/e17/entice_cvs.bb
+++ b/packages/e17/entice_cvs.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Entice is the E17 picture viewer"
# can also depend on GIMP for editing
-LICENSE = "MIT"
+LICENSE = "MIT BSD"
DEPENDS = "edb evas ecore edje epsilon esmart"
PV = "0.0.0+cvs${SRCDATE}"
PR = "r0"
diff --git a/packages/e17/entrance_0.9.0.010.bb b/packages/e17/entrance_0.9.0.010.bb
index 4c47f1d2ab..a831a1515b 100644
--- a/packages/e17/entrance_0.9.0.010.bb
+++ b/packages/e17/entrance_0.9.0.010.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Entrance is the Enlightenment login manager"
-LICENSE = "MIT"
+LICENSE = "MIT BSD"
# can also use pam and crypt
DEPENDS = "evas ecore edje esmart bash keylaunch xserver-common login-manager"
RDEPENDS += "glibc-gconv-iso8859-1 entrance-themes"
diff --git a/packages/e17/examine_cvs.bb b/packages/e17/examine_cvs.bb
index 89d0dd5755..38e062ffa9 100644
--- a/packages/e17/examine_cvs.bb
+++ b/packages/e17/examine_cvs.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Examine, the program configurator"
DEPENDS = "ewl"
-LICENSE = "MIT"
+LICENSE = "MIT BSD"
PV = "0.0.0+cvs${SRCDATE}"
PR = "r0"
diff --git a/packages/e17/exhibit_cvs.bb b/packages/e17/exhibit_cvs.bb
index ccf93ded9f..7fdd7449d6 100644
--- a/packages/e17/exhibit_cvs.bb
+++ b/packages/e17/exhibit_cvs.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Exhibit is the ETK picture viewer"
DEPENDS = "evas ecore epsilon edje eet etk efreet"
-LICENSE = "MIT"
+LICENSE = "MIT BSD"
PV = "0.0.0+cvs${SRCDATE}"
PR = "r0"
diff --git a/packages/e17/expedite_cvs.bb b/packages/e17/expedite_cvs.bb
index 7eae0ea9a4..271ed62d66 100644
--- a/packages/e17/expedite_cvs.bb
+++ b/packages/e17/expedite_cvs.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Expedite is a comprehensive benchmarking suite for Evas"
DEPENDS = "eet evas"
RDEPENDS = "libevas-engine-buffer libevas-engine-fb libevas-engine-software-generic libevas-engine-software-x11 libevas-loader-png"
-LICENSE = "MIT"
+LICENSE = "MIT BSD"
PV = "0.6.0+cvs${SRCDATE}"
PR = "r0"
@@ -11,9 +11,25 @@ SRC_URI = "${E_CVS};module=e17/apps/expedite \
file://hack-disable-opengl.patch;patch=1"
S = "${WORKDIR}/${PN}"
+EXTRA_OECONF = "\
+ --x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} \
+ --enable-simple-x11 \
+\
+ --disable-opengl-glew \
+ --disable-opengl-x11 \
+ --enable-software-x11 \
+ --enable-xrender-x11 \
+ --enable-software-16-x11 \
+ --enable-fb \
+ --disable-software-ddraw \
+ --disable-software-16-ddraw \
+ --disable-direct3d \
+ --disable-software-sdl \
+"
+
do_configure_append() {
find ${S} -name Makefile | xargs sed -i s:'-I$(includedir)':'-I.':g
}
FILES_${PN} += "${datadir}"
-
diff --git a/packages/e17/rage_0.2.0.005.bb b/packages/e17/rage_0.2.0.005.bb
deleted file mode 100644
index e5b5032b10..0000000000
--- a/packages/e17/rage_0.2.0.005.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "Rage is a media center application based on EFL"
-AUTHOR = "Carsten 'The Rasterman' Heitzler"
-HOMEPAGE = "http://www.rasterman.com"
-LICENSE = "GPL"
-DEPENDS = "evas ecore edje"
-SECTION = "x11/multimedia"
-
-SRC_URI = "http://download.enlightenment.org/snapshots/2007-08-26/rage-${PV}.tar.gz"
-
-inherit autotools
-
diff --git a/packages/e17/rage_cvs.bb b/packages/e17/rage_cvs.bb
new file mode 100644
index 0000000000..3b7bed7a11
--- /dev/null
+++ b/packages/e17/rage_cvs.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Rage is a media center application based on EFL"
+AUTHOR = "Carsten 'The Rasterman' Heitzler"
+HOMEPAGE = "http://www.rasterman.com"
+LICENSE = "MIT BSD"
+DEPENDS = "evas ecore edje"
+SECTION = "x11/multimedia"
+PV = "0.3.0.042+cvs${SRCDATE}"
+
+inherit autotools
+
+SRC_URI = "${E_CVS};module=misc/rage"
+S = "${WORKDIR}/rage"
+
diff --git a/packages/e2fsprogs/e2fsprogs_1.38.bb b/packages/e2fsprogs/e2fsprogs_1.38.bb
index 4f6f62bb12..91a391975f 100644
--- a/packages/e2fsprogs/e2fsprogs_1.38.bb
+++ b/packages/e2fsprogs/e2fsprogs_1.38.bb
@@ -1,10 +1,12 @@
require e2fsprogs.inc
-PR = "r10"
+PR = "r11"
SRC_URI += "file://no-hardlinks.patch;patch=1"
-EXTRA_OECONF += " --sbindir=${base_sbindir}"
+EXTRA_OECONF += " --sbindir=${base_sbindir} \
+ --disable-nls \
+ "
do_compile_prepend () {
find ./ -print|xargs chmod u=rwX
diff --git a/packages/ecj/ecj-bootstrap-native_3.3.bb b/packages/ecj/ecj-bootstrap-native_3.3.bb
new file mode 100644
index 0000000000..bd4347457c
--- /dev/null
+++ b/packages/ecj/ecj-bootstrap-native_3.3.bb
@@ -0,0 +1,38 @@
+# ECJ as a bootstrap compiler is a drop-in replacement for Sun's javac. It offers no more
+# and no less features.
+#
+# Since the VM running the compiler has no effect on the produced bytecode this recipe
+# uses the jar created by ecj-initial and creates a start script that runs it with a different
+# VM.
+
+DESCRIPTION = "JDT Core Batch Compiler - Bootstrap variant"
+HOMEPAGE = "http://www.eclipse.org/"
+SECTION = "devel"
+PRIORITY = "optional"
+LICENSE = "EPL"
+
+DEPENDS = "ecj-initial virtual/java-native"
+
+PROVIDES = "virtual/javac-native"
+
+SRC_URI = "file://ecj.in"
+
+S = "${WORKDIR}"
+
+JAR = "ecj-bootstrap-${PV}.jar"
+
+inherit native
+
+do_compile() {
+ # Create the start script
+ echo "#!/bin/sh" > ecj-bootstrap
+ echo "ECJ_JAR=${STAGING_DATADIR}/java/${JAR}" >> ecj-bootstrap
+ echo "RUNTIME=java" >> ecj-bootstrap
+ cat ecj.in >> ecj-bootstrap
+}
+
+do_stage() {
+ install -d ${STAGING_BINDIR}
+ install -m 755 ${S}/ecj-bootstrap ${STAGING_BINDIR}
+ install -m 755 ${S}/ecj-bootstrap ${STAGING_BINDIR}/javac
+}
diff --git a/packages/ecj/ecj-initial_3.3.bb b/packages/ecj/ecj-initial_3.3.bb
new file mode 100644
index 0000000000..7b65daef99
--- /dev/null
+++ b/packages/ecj/ecj-initial_3.3.bb
@@ -0,0 +1,84 @@
+# ECJ as a bootstrap compiler is a drop-in replacement for Sun's javac. It offers no more
+# and no less features.
+
+# This variant runs on the initial (not Java5-compatible runtime).
+
+DESCRIPTION = "JDT Core Batch Compiler - Bootstrap variant"
+HOMEPAGE = "http://www.eclipse.org/"
+LICENSE = "EPL"
+
+DEPENDS = "fastjar-native jikes-initial virtual/java-initial"
+
+SRC_URI = "\
+ http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.3-200706251500/ecjsrc.zip \
+ file://ecj.in \
+ "
+
+S = "${WORKDIR}"
+
+inherit native
+
+JAR = "ecj-bootstrap-${PV}.jar"
+
+do_unpackpost() {
+ if [ ! -d source ]; then
+ mkdir source
+ fi
+
+ if [ ! -d build ]; then
+ mkdir build
+ fi
+
+ # Remove crap.
+ rm about.html build.xml
+ rm -rf META-INF
+
+ # Move source into separate subdir.
+ mv org source/
+
+ # Remove stuff unneeded for the bootstrap compiler.
+ rm -rf source/org/eclipse/jdt/internal/compiler/apt
+ rm -rf source/org/eclipse/jdt/internal/compiler/tool
+ rm -rf source/org/eclipse/jdt/internal/antadapter
+ rm source/org/eclipse/jdt/core/JDTCompilerAdapter.java
+
+ # Make a copy of the remaining source to get the embedded
+ # resources.
+ cp -r source/org build/
+
+ # Remove source code and other stuff.
+ find build -name '*.java' -exec rm -f {} \;
+ find build -name '*.html' -exec rm -f {} \;
+}
+
+addtask unpackpost after do_unpack before do_patch
+
+do_compile() {
+ find source -name '*.java' > sourcefiles
+ split -l 25 sourcefiles ecj-sources.
+
+ # Compiling in place is done because the sources contain
+ # property files which need to be available at runtime.
+ for list in `find . -name 'ecj-sources.*'`; do
+ echo "building files in $list ...";
+ echo jikes-initial -d build -source 1.4 -sourcepath source `cat $list`;
+ jikes-initial \
+ -d build -source 1.4 -sourcepath source `cat $list`;
+ done
+
+ fastjar -c -C build . -f ${JAR}
+
+ # Create the start script
+ echo "#!/bin/sh" > ecj-initial
+ echo "ECJ_JAR=${STAGING_DATADIR}/java/${JAR}" >> ecj-initial
+ echo "RUNTIME=java-initial" >> ecj-initial
+ cat ecj.in >> ecj-initial
+}
+
+do_stage() {
+ install -d ${STAGING_DATADIR}/java
+ install -m 755 ${S}/${JAR} ${STAGING_DATADIR}/java
+
+ install -d ${STAGING_BINDIR}
+ install -m 755 ${S}/ecj-initial ${STAGING_BINDIR}
+}
diff --git a/packages/ecj/ecj-native_3.2.2.bb b/packages/ecj/ecj-native_3.2.2.bb
deleted file mode 100644
index 8afa2653ca..0000000000
--- a/packages/ecj/ecj-native_3.2.2.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "JDT Core Batch Compiler"
-HOMEPAGE = "http://www.eclipse.org/"
-PRIORITY = "optional"
-SECTION = "devel"
-LICENSE = "EPL"
-PR = "r0"
-
-inherit native
-
-SRC_URI = "http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.2.2-200702121330/ecj.jar \
- file://ecj.sh"
-
-do_stage() {
- install -d ${STAGING_BINDIR_NATIVE}
- install -m 755 ${S}/../ecj.jar ${STAGING_BINDIR_NATIVE}
- install -m 755 ${S}/../ecj.sh ${STAGING_BINDIR_NATIVE}/ecj
-}
diff --git a/packages/ecj/ecj-native_3.3.bb b/packages/ecj/ecj-native_3.3.bb
deleted file mode 100644
index ff2eb5f49e..0000000000
--- a/packages/ecj/ecj-native_3.3.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "JDT Core Batch Compiler"
-HOMEPAGE = "http://www.eclipse.org/"
-PRIORITY = "optional"
-SECTION = "devel"
-LICENSE = "EPL"
-PR = "r0"
-
-inherit native
-
-SRC_URI = "http://mirrors.ibiblio.org/pub/mirrors/eclipse/eclipse/downloads/drops/R-3.3-200706251500/ecj.jar \
- file://ecj.sh"
-
-do_stage() {
- install -d ${STAGING_BINDIR_NATIVE}
- install -m 755 ${S}/../ecj.jar ${STAGING_BINDIR_NATIVE}
- install -m 755 ${S}/../ecj.sh ${STAGING_BINDIR_NATIVE}/ecj
-}
diff --git a/packages/ecj/files/ecj.in b/packages/ecj/files/ecj.in
new file mode 100755
index 0000000000..2099991cef
--- /dev/null
+++ b/packages/ecj/files/ecj.in
@@ -0,0 +1 @@
+${RUNTIME} -Xmx512m -cp ${ECJ_JAR} org.eclipse.jdt.internal.compiler.batch.Main ${1+"$@"}
diff --git a/packages/ecj/files/ecj.sh b/packages/ecj/files/ecj.sh
deleted file mode 100644
index 75aa2c2287..0000000000
--- a/packages/ecj/files/ecj.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-java -Xmx512m -jar $0.jar "$@"
diff --git a/packages/efl1/ecore-native_cvs.bb b/packages/efl1/ecore-native_cvs.bb
index 92a30397e1..52855d99a8 100644
--- a/packages/efl1/ecore-native_cvs.bb
+++ b/packages/efl1/ecore-native_cvs.bb
@@ -4,7 +4,11 @@ DEPENDS = "eet-native evas-native"
PR = "r2"
EXTRA_OECONF = "\
+ --x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} \
+ \
--enable-ecore-txt \
+ --disable-ecore-config \
--disable-ecore-x-xcb \
--disable-ecore-x \
--enable-ecore-job \
@@ -12,7 +16,7 @@ EXTRA_OECONF = "\
--disable-ecore-sdl \
--enable-ecore-fb \
--enable-ecore-evas \
- --disable-ecore-evas-gl \
+ --disable-ecore-evas-x11-gl \
--disable-ecore-evas-xrender \
--disable-ecore-evas-dfb \
--disable-openssl \
@@ -24,6 +28,6 @@ EXTRA_OECONF = "\
--disable-poll \
--disable-curl \
--disable-ecore-desktop \
- --x-includes=${STAGING_INCDIR}/X11 \
- --x-libraries=${STAGING_LIBDIR} "
-
+ --disable-ecore-imf \
+ --disable-ecore-imf_evas \
+"
diff --git a/packages/efl1/ecore.inc b/packages/efl1/ecore.inc
index b71a4b7582..6175c605c0 100644
--- a/packages/efl1/ecore.inc
+++ b/packages/efl1/ecore.inc
@@ -1,18 +1,12 @@
-DESCRIPTION = "Ecore is the core event abstraction layer for the enlightenment \
-foundation libraries. It makes makes doing selections, drag and drop, event loops, \
-timeouts and idle handlers fast, optimized, and convenient."
-LICENSE = "MIT"
-DEPENDS = "curl directfb eet evas tslib"
+DESCRIPTION = "Ecore is the Enlightenment application framework library"
+LICENSE = "MIT BSD"
+DEPENDS = "curl eet evas tslib"
# optional
-# DEPENDS += "openssl virtual/libiconv"
-PV = "0.9.9.041+cvs${SRCDATE}"
+# DEPENDS += "directfb libsdl-x11 openssl virtual/libiconv"
+PV = "0.9.9.042+cvs${SRCDATE}"
inherit efl_library
-# SRC_URI += "file://configure.patch;patch=1 \
-# file://fix-tslib-configure.patch;patch=1 \
-# file://fix-directfb-include.patch;patch=1"
-
SRC_URI += "file://fix-directfb-include.patch;patch=1"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/ecore"
@@ -26,6 +20,8 @@ PACKAGES += "\
${PN}-evas \
${PN}-fb \
${PN}-file \
+ ${PN}-imf \
+ ${PN}-imf-evas \
${PN}-ipc \
${PN}-job \
${PN}-txt \
@@ -40,6 +36,8 @@ FILES_${PN}-sdl = "${libdir}/libecore_sdl.so.*"
FILES_${PN}-evas = "${libdir}/libecore_evas.so.*"
FILES_${PN}-fb = "${libdir}/libecore_fb.so.*"
FILES_${PN}-file = "${libdir}/libecore_file.so.*"
+FILES_${PN}-imf = "${libdir}/libecore_imf.so.*"
+FILES_${PN}-imf-evas = "${libdir}/libecore_imf_evas.so.*"
FILES_${PN}-ipc = "${libdir}/libecore_ipc.so.*"
FILES_${PN}-job = "${libdir}/libecore_job.so.*"
FILES_${PN}-txt = "${libdir}/libecore_txt.so.*"
diff --git a/packages/efl1/ecore_cvs.bb b/packages/efl1/ecore_cvs.bb
index 53ee8642d8..b0a2a24f98 100644
--- a/packages/efl1/ecore_cvs.bb
+++ b/packages/efl1/ecore_cvs.bb
@@ -1,8 +1,13 @@
require ecore.inc
-PR = "r5"
+PR = "r0"
EXTRA_OECONF = "\
+ --x-includes=${STAGING_INCDIR}/X11 \
+ --x-libraries=${STAGING_LIBDIR} \
+ --enable-simple-x11 \
+\
--enable-ecore-txt \
+ --enable-ecore-config \
--disable-ecore-x-xcb \
--enable-ecore-x \
--enable-ecore-job \
@@ -10,9 +15,10 @@ EXTRA_OECONF = "\
--disable-ecore-sdl \
--enable-ecore-fb \
--enable-ecore-evas \
- --disable-ecore-evas-gl \
+ --enable-ecore-evas-x11-16 \
+ --disable-ecore-evas-x11-gl \
--enable-ecore-evas-xrender \
- --enable-ecore-evas-dfb \
+ --disable-ecore-evas-dfb \
--disable-openssl \
--enable-abstract-sockets \
--enable-ecore-con \
@@ -21,6 +27,5 @@ EXTRA_OECONF = "\
--enable-inotify \
--disable-poll \
--enable-curl \
- --enable-ecore-desktop \
- --x-includes=${STAGING_INCDIR}/X11 \
- --x-libraries=${STAGING_LIBDIR} "
+ --disable-ecore-desktop \
+"
diff --git a/packages/efl1/edb_cvs.bb b/packages/efl1/edb_cvs.bb
index b7c85e8663..97dafb3931 100644
--- a/packages/efl1/edb_cvs.bb
+++ b/packages/efl1/edb_cvs.bb
@@ -1,5 +1,6 @@
-DESCRIPTION = "Edb is a database library"
-LICENSE = "MIT"
-PV = "0.0.0+cvs${SRCDATE}"
+DESCRIPTION = "Edb is the Enlightenment database library"
+LICENSE = "MIT BSD"
+DEPENDS = "zlib"
+PV = "1.0.5.042+cvs${SRCDATE}"
inherit efl_library
diff --git a/packages/efl1/edbus_cvs.bb b/packages/efl1/edbus_cvs.bb
index db1547c3d4..28bcbb1816 100644
--- a/packages/efl1/edbus_cvs.bb
+++ b/packages/efl1/edbus_cvs.bb
@@ -1,12 +1,15 @@
DESCRIPTION = "DBus and HAL convenience wrappers for EFL"
DEPENDS = "dbus ecore"
-LICENSE = "MIT"
-PR = "r0"
+LICENSE = "MIT BSD"
+PR = "r2"
inherit efl_library
-SRC_URI = "${E_CVS};module=e17/proto/e_dbus"
+SRC_URI = "${E_CVS};module=e17/libs/e_dbus"
S = "${WORKDIR}/e_dbus"
-# TODO increase package granularity
-
+PACKAGES =+ "${PN}-enotify ${PN}-edbus ${PN}-enm ${PN}-ehal"
+FILES_${PN}-enotify = "${libdir}/libenotify.so.*"
+FILES_${PN}-edbus = "${libdir}/libedbus.so.*"
+FILES_${PN}-enm = "${libdir}/libenm.so.*"
+FILES_${PN}-ehal = "${libdir}/libehal.so.*"
diff --git a/packages/efl1/edje-native_cvs.bb b/packages/efl1/edje-native_cvs.bb
index 2c52b69a0c..519476be72 100644
--- a/packages/efl1/edje-native_cvs.bb
+++ b/packages/efl1/edje-native_cvs.bb
@@ -3,7 +3,6 @@ inherit native
PR = "r0"
DEPENDS = "evas-native ecore-native eet-native embryo-native"
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/edje"
do_configure_prepend() {
sed -i 's:EMBRYO_PREFIX"/bin:"${STAGING_BINDIR}:' ${S}/src/bin/edje_cc_out.c
diff --git a/packages/efl1/edje_cvs.bb b/packages/efl1/edje_cvs.bb
index 0a5521f929..e930fc4795 100644
--- a/packages/efl1/edje_cvs.bb
+++ b/packages/efl1/edje_cvs.bb
@@ -1,11 +1,10 @@
-DESCRIPTION = "Edje is a complex graphical design & layout library."
-# can also install vim data files
+DESCRIPTION = "Edje is the Enlightenment graphical design & layout library"
DEPENDS = "eet evas ecore embryo edje-native"
-LICENSE = "MIT"
-PV = "0.5.0.41+cvs${SRCDATE}"
+LICENSE = "MIT BSD"
+PV = "0.5.0.042+cvs${SRCDATE}"
PR = "r0"
inherit efl_library
-# NOTE: Packaging needs work. edje_cc should actually be in the -dev package etc.
-
+PACKAGES =+ "${PN}-tools"
+FILES_${PN}-tools = "${bindir}/edje_*"
diff --git a/packages/efl1/eet_cvs.bb b/packages/efl1/eet_cvs.bb
index cd12daf245..370b385bf8 100644
--- a/packages/efl1/eet_cvs.bb
+++ b/packages/efl1/eet_cvs.bb
@@ -1,10 +1,7 @@
-DESCRIPTION = "EET is a tiny library designed to write an \
-arbitary set of chunks of data to a file and optionally compress \
-each chunk (very much like a zip file) and allow fast \
-random-access reading of the file later on."
+DESCRIPTION = "EET is the Enlightenment data storage library"
DEPENDS = "zlib jpeg"
-LICENSE = "BSD"
-PV = "0.9.10.041+cvs${SRCDATE}"
+LICENSE = "MIT BSD"
+PV = "0.9.10.042+cvs${SRCDATE}"
PR = "r0"
inherit efl_library
diff --git a/packages/efl1/efreet_cvs.bb b/packages/efl1/efreet_cvs.bb
index 3f903d3484..a1a027fc8f 100644
--- a/packages/efl1/efreet_cvs.bb
+++ b/packages/efl1/efreet_cvs.bb
@@ -1,8 +1,7 @@
-DESCRIPTION = "An implementation of freedesktop.org specs for the \
-Enlightenment Foundation Libraries"
+DESCRIPTION = "The Enlightenment freedesktop.org library"
DEPENDS = "ecore"
-LICENSE = "BSD"
-PV = "0.0.3.003+cvs${SRCDATE}"
+LICENSE = "MIT BSD"
+PV = "0.0.3.042+cvs${SRCDATE}"
PR = "r0"
inherit efl_library
diff --git a/packages/efl1/embryo_cvs.bb b/packages/efl1/embryo_cvs.bb
index dcba8557a8..2f5ab176ce 100644
--- a/packages/efl1/embryo_cvs.bb
+++ b/packages/efl1/embryo_cvs.bb
@@ -1,10 +1,6 @@
-DESCRIPTION = "Embryo implements a C like scripting language used in various parts \
-of the Enlightenment project, namely Edje. Embryo's scripting language is based on \
-CompuPhase's Small language that was introduced in Dr Dobb's Journal in 1999. \
-Embryo allows scripting capabilities in places that otherwise wouldn't support \
-basic programming structures such as in Edje EDCs."
-LICENSE = "MIT"
-PV = "0.9.1.041+cvs${SRCDATE}"
+DESCRIPTION = "The Enlightenment C-like scripting language for Edje"
+LICENSE = "MIT BSD"
+PV = "0.9.1.042+cvs${SRCDATE}"
PR = "r0"
inherit efl_library
diff --git a/packages/efl1/emotion_cvs.bb b/packages/efl1/emotion_cvs.bb
index 84302e4793..36a5065e7a 100644
--- a/packages/efl1/emotion_cvs.bb
+++ b/packages/efl1/emotion_cvs.bb
@@ -1,9 +1,9 @@
-DESCRIPTION = "Emotion is a multimedia library with backends: gstreamer and libxine"
-LICENSE = "MIT"
+DESCRIPTION = "The Enlightenment multimedia library"
+LICENSE = "MIT BSD"
# we no longer build the libxine backend, since the gstreamer backend seems more promising
DEPENDS = "eet evas ecore edje gstreamer gst-plugins-base"
RRECOMMENDS_${PN} = "emotion-backend-gstreamer"
-PV = "0.0.1+cvs${SRCDATE}"
+PV = "0.1.0+cvs${SRCDATE}"
PR = "r0"
inherit efl_library
diff --git a/packages/efl1/epdf/fix-plugin-path-check.patch b/packages/efl1/epdf/fix-plugin-path-check.patch
index dd5469c286..b218fffb7a 100644
--- a/packages/efl1/epdf/fix-plugin-path-check.patch
+++ b/packages/efl1/epdf/fix-plugin-path-check.patch
@@ -2,18 +2,18 @@ Index: epdf/configure.in
===================================================================
--- epdf.orig/configure.in
+++ epdf/configure.in
-@@ -27,8 +27,8 @@ PKG_CHECK_MODULES(EWL,
- [
- have_ewl="yes"
- requirements="$requirements ewl"
-- EWL_TEST_LIBS_DIR="`$PKG_CONFIG --variable=testsdir ewl`"
-- EWL_TEST_SOURCE_DIR="`$PKG_CONFIG --variable=testssrcdir ewl`"
-+ EWL_TEST_LIBS_DIR="/usr/lib/ewl/tests/"
-+ EWL_TEST_SOURCE_DIR="/usr/share/ewl/examples/"
- AC_SUBST(EWL_TEST_LIBS_DIR)
- AC_SUBST(EWL_TEST_SOURCE_DIR)
- ],
-@@ -55,7 +55,7 @@ PKG_CHECK_MODULES(EPSILON,
+@@ -95,8 +95,8 @@
+ [
+ have_ewl="yes"
+ requirements="$requirements ewl"
+- EWL_TEST_LIBS_DIR="`$PKG_CONFIG --variable=testsdir ewl`"
+- EWL_TEST_SOURCE_DIR="`$PKG_CONFIG --variable=testssrcdir ewl`"
++ EWL_TEST_LIBS_DIR="/usr/lib/ewl/tests/"
++ EWL_TEST_SOURCE_DIR="/usr/share/ewl/examples/"
+ AC_SUBST(EWL_TEST_LIBS_DIR)
+ AC_SUBST(EWL_TEST_SOURCE_DIR)
+ ],
+@@ -144,7 +144,7 @@
[
have_epsilon="yes"
requirements="$requirements epsilon imlib2"
diff --git a/packages/efl1/epdf_cvs.bb b/packages/efl1/epdf_cvs.bb
index 8426b75a17..fa4f4282e1 100644
--- a/packages/efl1/epdf_cvs.bb
+++ b/packages/efl1/epdf_cvs.bb
@@ -1,9 +1,8 @@
DESCRIPTION = "Epdf is the glue between EFL and libpoppler"
-LICENSE = "BSD"
-DEPENDS = "poppler0.6 evas ecore etk ewl"
+LICENSE = "MIT BSD"
+DEPENDS = "poppler evas ecore etk ewl"
PV = "0.1.0+cvs${SRCDATE}"
-
-PR = "r1"
+PR = "r0"
inherit efl_library
diff --git a/packages/efl1/epsilon_cvs.bb b/packages/efl1/epsilon_cvs.bb
index be2934dec8..8c71ef3e3d 100644
--- a/packages/efl1/epsilon_cvs.bb
+++ b/packages/efl1/epsilon_cvs.bb
@@ -1,9 +1,9 @@
DESCRIPTION = "Epsilon is a flexible and powerful image thumbnailing library \
that is compliant with the freedesktop.org Thumbnail Managing Standard."
-LICENSE = "BSD"
+LICENSE = "MIT BSD"
# can also depend on xine for movie thumbnails
DEPENDS = "imlib2 epeg libpng evas ecore edje perl-native"
-PV = "0.3.0+cvs${SRCDATE}"
+PV = "0.3.0.012+cvs${SRCDATE}"
inherit efl_library
diff --git a/packages/efl1/esmart_cvs.bb b/packages/efl1/esmart_cvs.bb
index 17e1f42b95..fa35d60d30 100644
--- a/packages/efl1/esmart_cvs.bb
+++ b/packages/efl1/esmart_cvs.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "ESmart is a collection of smart Evas objects"
-LICENSE = "MIT"
+LICENSE = "MIT BSD"
DEPENDS = "evas ecore edje imlib2 epsilon libtool"
-PV = "0.9.0+cvs${SRCDATE}"
+PV = "0.9.0.042+cvs${SRCDATE}"
inherit efl_library
diff --git a/packages/efl1/etk_cvs.bb b/packages/efl1/etk_cvs.bb
index ad959edef6..90df74e61c 100644
--- a/packages/efl1/etk_cvs.bb
+++ b/packages/efl1/etk_cvs.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Etk is an advanced widget toolkit based on the Enlightenment Foundation Libraries."
DEPENDS = "evas ecore edje"
LICENSE = "MIT"
-PV = "0.1.0+cvs${SRCDATE}"
+PV = "0.1.0.042+cvs${SRCDATE}"
PR = "r0"
inherit efl_library
@@ -15,3 +15,4 @@ FILES_${PN}-engines = "${libdir}/etk/engines/*.so ${datadir}"
FILES_${PN}-dev += "${libdir}/etk/engines/*.a ${libdir}/etk/engines/*.la"
FILES_${PN}-dbg += "${libdir}/etk/engines/.debug/"
+RRECOMMENDS_${PN} = "${PN}-engines"
diff --git a/packages/efl1/evas.inc b/packages/efl1/evas.inc
index 179f03b0d8..77ec2db308 100644
--- a/packages/efl1/evas.inc
+++ b/packages/efl1/evas.inc
@@ -1,18 +1,12 @@
-DESCRIPTION = "Evas is a hardware-accelerated canvas API that can draw \
-anti-aliased text, smooth super and sub-images, alpha-blend, as well as drop \
-down to using normal X11 primitives such as pixmaps, lines and rectangles if \
-your CPU or graphics hardware are too slow."
-LICENSE = "MIT"
+DESCRIPTION = "Evas is the Enlightenment canvas API"
+LICENSE = "MIT BSD"
# can also depend on valgrind, libsdl-x11, directfb
-DEPENDS = "eet freetype jpeg virtual/libx11 libxext libxrender"
-PV = "0.9.9.041+cvs${SRCDATE}"
+DEPENDS = "eet freetype jpeg libpng virtual/libx11 libxext libxrender"
+PV = "0.9.9.042+cvs${SRCDATE}"
inherit efl_library
-# SRC_URI += "file://fix-configure.patch;patch=1"
-
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/evas"
-
EXTRA_OECONF = "<override me>"
python populate_packages_prepend () {
@@ -35,3 +29,19 @@ FILES_${PN}-dbg += "${libdir}/evas/modules/*/*/*/.debug/"
FILES_${PN} = "${libdir}/libevas*.so*"
PACKAGES_DYNAMIC = "libevas-engine-* libevas-loader-* libevas-saver-*"
+
+RRECOMMENDS_${PN} = "\
+ libevas-engine-buffer \
+ libevas-engine-fb \
+ libevas-engine-software-generic \
+ libevas-engine-software-x11 \
+ libevas-engine-software-16 \
+ libevas-engine-software-16-x11 \
+ libevas-engine-xrender-x11 \
+ \
+ libevas-loader-png \
+ libevas-loader-jpeg \
+ libevas-loader-eet \
+ libevas-loader-svg \
+"
+
diff --git a/packages/efl1/evas_cvs.bb b/packages/efl1/evas_cvs.bb
index 1bacbe3d1c..862cc51370 100644
--- a/packages/efl1/evas_cvs.bb
+++ b/packages/efl1/evas_cvs.bb
@@ -1,5 +1,5 @@
require evas.inc
-PR = "r3"
+PR = "r0"
EXTRA_OECONF = "\
--x-includes=${STAGING_INCDIR}/X11 \
@@ -10,6 +10,7 @@ EXTRA_OECONF = "\
--enable-buffer \
--disable-software-ddraw \
--disable-software-qtopia \
+ --enable-simple-x11 \
--enable-software-x11 \
--enable-software-16-x11 \
--disable-software-xcb \
@@ -45,15 +46,15 @@ EXTRA_OECONF = "\
--disable-convert-16-rgb-444 \
--disable-convert-16-rgb-ipq \
--enable-convert-16-rgb-rot-0 \
- --disable-convert-16-rgb-rot-90 \
+ --enable-convert-16-rgb-rot-90 \
--enable-convert-16-rgb-rot-270 \
- --disable-convert-24-rgb-888 \
- --disable-convert-24-bgr-888 \
- --disable-convert-32-rgb-8888 \
- --disable-convert-32-rgbx-8888 \
- --disable-convert-32-bgr-8888 \
- --disable-convert-32-bgrx-8888 \
- --disable-convert-32-rgb-rot-0 \
- --disable-convert-32-rgb-rot-90 \
- --disable-convert-32-rgb-rot-270"
+ --enable-convert-24-rgb-888 \
+ --enable-convert-24-bgr-888 \
+ --enable-convert-32-rgb-8888 \
+ --enable-convert-32-rgbx-8888 \
+ --enable-convert-32-bgr-8888 \
+ --enable-convert-32-bgrx-8888 \
+ --enable-convert-32-rgb-rot-0 \
+ --enable-convert-32-rgb-rot-90 \
+ --enable-convert-32-rgb-rot-270"
diff --git a/packages/efl1/ewl_cvs.bb b/packages/efl1/ewl_cvs.bb
index 8fb8521d62..15a777df67 100644
--- a/packages/efl1/ewl_cvs.bb
+++ b/packages/efl1/ewl_cvs.bb
@@ -1,11 +1,8 @@
-DESCRIPTION = "The Enlightened Widget Library, \
-a simple-to-use general purpose widget library \
-based on the enlightenment foundation libraries."
+DESCRIPTION = "The Enlightened Widget Library"
DEPENDS = "evas ecore edje emotion efreet epsilon"
-RSUGGESTS_${PN} += "ewl-themes"
-LICENSE = "MIT"
-PV = "0.5.1+cvs${SRCDATE}"
-PR = "r1"
+LICENSE = "MIT BSD"
+PV = "0.5.2.042+cvs${SRCDATE}"
+PR = "r0"
inherit efl_library
@@ -31,3 +28,5 @@ FILES_${PN}-dbg += "${libdir}/ewl/*/.debug"
FILES_${PN}-engines = "${libdir}/ewl/engines/*.so*"
FILES_${PN}-plugins = "${libdir}/ewl/plugins/*.so*"
+
+RRECOMMENDS_${PN} = "${PN}-engines ${PN}-plugins ewl-themes"
diff --git a/packages/efl1/imlib2_1.4.0.002.bb b/packages/efl1/imlib2_1.4.0.002.bb
deleted file mode 100644
index baee4b62b0..0000000000
--- a/packages/efl1/imlib2_1.4.0.002.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-DESCRIPTION = "A graphic library for file loading, saving, rendering, and manipulation."
-LICENSE = "BSD"
-# can also depend on tiff34, ungif or gif, z, bz2, id3tag
-DEPENDS = "freetype libpng jpeg virtual/libx11 libxext"
-PR = "r2"
-
-inherit efl_library
-
-SRC_URI += "file://remove-local-includes.patch;patch=1"
-
-EXTRA_OECONF = "--with-x"
-
-# TODO: Use more fine granular version
-#OE_LT_RPATH_ALLOW=":${libdir}/imlib2/loaders:${libdir}/imlib2/filters:"
-OE_LT_RPATH_ALLOW = "any"
-OE_LT_RPATH_ALLOW[export]="1"
-
-PACKAGES =+ "imlib2-loaders-dbg imlib2-filters-dbg imlib2-loaders imlib2-filters"
-FILES_${PN} = "${libdir}/lib*.so.* ${libdir}/imlib2/*/*.so"
-FILES_${PN}-dbg = "${libdir}/.debug/ ${bindir}/.debug/"
-FILES_${PN}-dev += "${bindir}/imlib2-config ${libdir}/*.so ${includedir}"
-FILES_${PN}-bin = "${bindir}"
-FILES_imlib2-loaders = "${libdir}/imlib2/loaders/*.so"
-FILES_imlib2-filters = "${libdir}/imlib2/filters/*.so"
-FILES_imlib2-loaders-dbg += "${libdir}/imlib2/loaders/.debug"
-FILES_imlib2-filters-dbg += "${libdir}/imlib2/filters/.debug"
diff --git a/packages/efl1/imlib2_1.4.1.000.bb b/packages/efl1/imlib2_1.4.1.000.bb
new file mode 100644
index 0000000000..b0db13b5ce
--- /dev/null
+++ b/packages/efl1/imlib2_1.4.1.000.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "A graphic library for file loading, saving, rendering, and manipulation."
+LICENSE = "BSD"
+# can also depend on tiff34, ungif or gif, z, bz2, id3tag
+DEPENDS = "freetype libpng jpeg virtual/libx11 libxext"
+PR = "r0"
+
+inherit efl_library
+
+SRC_URI += "file://remove-local-includes.patch;patch=1"
+
+EXTRA_OECONF = "--with-x"
+
+# TODO: Use more fine granular version
+#OE_LT_RPATH_ALLOW=":${libdir}/imlib2/loaders:${libdir}/imlib2/filters:"
+OE_LT_RPATH_ALLOW = "any"
+OE_LT_RPATH_ALLOW[export]="1"
+
+PACKAGES =+ "imlib2-loaders-dbg imlib2-filters-dbg imlib2-loaders imlib2-filters"
+FILES_${PN} = "${libdir}/lib*.so.* ${libdir}/imlib2/*/*.so"
+FILES_${PN}-dbg = "${libdir}/.debug/ ${bindir}/.debug/"
+FILES_${PN}-dev += "${bindir}/imlib2-config ${libdir}/*.so ${includedir}"
+FILES_${PN}-bin = "${bindir}"
+FILES_imlib2-loaders = "${libdir}/imlib2/loaders/*.so"
+FILES_imlib2-filters = "${libdir}/imlib2/filters/*.so"
+FILES_imlib2-loaders-dbg += "${libdir}/imlib2/loaders/.debug"
+FILES_imlib2-filters-dbg += "${libdir}/imlib2/filters/.debug"
diff --git a/packages/elfkickers/elfkickers_2.0a.bb b/packages/elfkickers/elfkickers_2.0a.bb
index 6f18da5960..b369b8690c 100644
--- a/packages/elfkickers/elfkickers_2.0a.bb
+++ b/packages/elfkickers/elfkickers_2.0a.bb
@@ -11,7 +11,7 @@ S = "${WORKDIR}/ELFkickers"
ELFPKGS = "ebfc elfls elftoc \
rebind sstrip"
-PACKAGES = "${ELFPKGS}"
+PACKAGES = "${PN}-dbg ${ELFPKGS}"
FILES_ebfc = "${bindir}/ebfc"
FILES_elfls = "${bindir}/elfls"
FILES_elftoc = "${bindir}/elftoc"
diff --git a/packages/elvis/elvis-tiny_2.2.0.bb b/packages/elvis/elvis-tiny_2.2.0.bb
index 0e26c0126a..a5e42bf07c 100644
--- a/packages/elvis/elvis-tiny_2.2.0.bb
+++ b/packages/elvis/elvis-tiny_2.2.0.bb
@@ -16,5 +16,4 @@ do_install_append() {
sed -i -e "s/^set\(.*lptype.*\)/\"set\1/" ${D}/etc/elvis/elvis.ini
}
-PACKAGES = "${PN}"
FILES_${PN} = "/usr/bin/elvis /etc/elvis"
diff --git a/packages/elvis/elvis_2.2.0.bb b/packages/elvis/elvis_2.2.0.bb
index 738822b139..c0f92627bf 100644
--- a/packages/elvis/elvis_2.2.0.bb
+++ b/packages/elvis/elvis_2.2.0.bb
@@ -54,7 +54,7 @@ pkg_prerm_${PN} () {
update-alternatives --remove vi /usr/bin/elvis
}
-PACKAGES = "${PN} ${PN}-doc ${PN}-tools"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-tools"
FILES_${PN}-doc = "/usr/share/elvis/manual /usr/share/elvis/README"
FILES_${PN}-tools = "/usr/bin/elvfmt /usr/bin/elvtags /usr/bin/ref"
FILES_${PN} = "/usr/bin/elvis /etc/elvis /usr/share/elvis/scripts /usr/share/elvis/README /usr/share/elvis/*.*"
diff --git a/packages/emacs/emacs-x11_20060801.bb b/packages/emacs/emacs-x11_20060801.bb
index 8b598bf21f..3878c42536 100644
--- a/packages/emacs/emacs-x11_20060801.bb
+++ b/packages/emacs/emacs-x11_20060801.bb
@@ -1,3 +1,5 @@
require emacs-x11_cvs.bb
-SRCDATE = "${PV}"
+
+SRCDATE = "20060801"
+
DEFAULT_PREFERENCE = "0"
diff --git a/packages/emacs/emacs-x11_cvs.bb b/packages/emacs/emacs-x11_cvs.bb
index 8fdba95742..809176a3c3 100644
--- a/packages/emacs/emacs-x11_cvs.bb
+++ b/packages/emacs/emacs-x11_cvs.bb
@@ -1,5 +1,8 @@
require emacs_cvs.bb
+
# full X (non-diet) is needed for X support
DEPENDS += "libx11"
+
EXTRA_OECONF = "--without-sound"
+
RREPLACES = "emacs"
diff --git a/packages/emacs/emacs_20060801.bb b/packages/emacs/emacs_20060801.bb
index aa72944eca..834e5b6239 100644
--- a/packages/emacs/emacs_20060801.bb
+++ b/packages/emacs/emacs_20060801.bb
@@ -1,3 +1,3 @@
require emacs_cvs.bb
-SRCDATE = "${PV}"
+SRCDATE = "20060801"
DEFAULT_PREFERENCE = "0"
diff --git a/packages/emacs/emacs_cvs.bb b/packages/emacs/emacs_cvs.bb
index ef58dfa5b6..e8f263d1a9 100644
--- a/packages/emacs/emacs_cvs.bb
+++ b/packages/emacs/emacs_cvs.bb
@@ -7,7 +7,9 @@ DEPENDS += "qemu-native"
#NOTE: I have found that this only works with qemu-0.8.0. If I use 0.8.1 or 0.8.2
# the build gets hung up on compiling certain .el files
-PR = "r7"
+PV = "22.0.50+cvs${SRCDATE}"
+PE = "1"
+PR = "r9"
DEFAULT_PREFERENCE = "-1"
@@ -17,14 +19,14 @@ S = "${WORKDIR}/emacs"
inherit autotools
-PACKAGES = "${PN}-el ${PN}-dbg ${PN} ${PN}-doc ${PN}-dev ${PN}-locale"
+PACKAGES =+ "${PN}-el"
-FILES_${PN}-el = "${datadir}/emacs/22.0.50/*/*.el.gz \
- ${datadir}/emacs/22.0.50/*/*/*.el.gz"
+FILES_${PN}-el = "${datadir}/emacs/*/*/*.el.gz \
+ ${datadir}/emacs/*/*/*/*.el.gz"
FILES_${PN} += "${datadir}/emacs"
-QEMU = "qemu-arm -L ${STAGING_DIR}/${TARGET_SYS}"
+QEMU = "qemu-${TARGET_ARCH} -L ${STAGING_DIR}/${TARGET_SYS}"
LDFLAGS += "-L${CROSS_DIR}/${TARGET_SYS}/lib"
EXTRA_OECONF = "--without-sound --without-x"
diff --git a/packages/enca/enca_1.9.bb b/packages/enca/enca_1.9.bb
index 7f84ebe4fe..ddd7acef82 100644
--- a/packages/enca/enca_1.9.bb
+++ b/packages/enca/enca_1.9.bb
@@ -1,11 +1,11 @@
DESCRIPTION = "Enca is an Extremely Naive Charset Analyser"
-LICENSE = "GPL2"
SECTION = "libs"
PRIORITY = "optional"
+LICENSE = "GPLv2"
HOMEPAGE = "http://trific.ath.cx/software/enca/"
-PR = "r2"
+PR = "r3"
-SRC_URI = "http://trific.ath.cx/Ftp//enca/enca-${PV}.tar.bz2 \
+SRC_URI = "http://www.sourcefiles.org/Networking/Tools/Miscellanenous/enca-${PV}.tar.bz2 \
file://configure-hack.patch;patch=1 \
file://dont-run-tests.patch;patch=1 \
file://configure-remove-dumbness.patch;patch=1 \
diff --git a/packages/linux/linux-handhelds-2.6/asus730/.mtn2git_empty b/packages/espeak/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/asus730/.mtn2git_empty
+++ b/packages/espeak/.mtn2git_empty
diff --git a/packages/espeak/espeak_1.30.bb b/packages/espeak/espeak_1.30.bb
new file mode 100644
index 0000000000..a460b5b4ba
--- /dev/null
+++ b/packages/espeak/espeak_1.30.bb
@@ -0,0 +1,52 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2008
+# License: MIT (see http://www.opensource.org/licenses/mit-license.php
+# for a copy of the license)
+#
+# Filename: espeak_1.30.bb
+# Date: 20080104 (YMD)
+
+DESCRIPTION = "eSpeak is a compact open source software speech synthesizer"
+SECTION = "base"
+LICENSE = "GPL"
+
+DEPENDS = "portaudio-v19"
+
+######################################################################################
+
+PR = "r1"
+
+SRC_URI = "http://kent.dl.sourceforge.net/sourceforge/espeak/espeak-${PV}-source.zip"
+
+S = "${WORKDIR}/${PN}-${PV}-source"
+
+FILES_${PN} += " /usr/share/espeak-data/ "
+
+do_configure() {
+ # espeak supports portaudio in APIs V18 and V19
+ cp ${S}/src/portaudio19.h ${S}/src/portaudio.h
+}
+
+do_compile() {
+ cd src
+ oe_runmake
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -d ${D}${libdir}
+ install -d ${D}${includedir}
+ install -d ${D}/usr/share/espeak-data
+
+ install -m 0755 ${S}/src/espeak ${D}${bindir}
+ oe_libinstall -so -C src libespeak ${D}${libdir}
+
+ cp -prf ${S}/espeak-data/* ${D}/usr/share/espeak-data
+}
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/espeak
+ install -m 0644 ${S}/src/speak_lib.h ${STAGING_INCDIR}/espeak/
+ oe_libinstall -so -C src libespeak ${STAGING_LIBDIR}
+}
diff --git a/packages/ez-ipupdate/ez-ipupdate_3.0.10.bb b/packages/ez-ipupdate/ez-ipupdate_3.0.10.bb
index 2b9c578125..fbf5f61a39 100644
--- a/packages/ez-ipupdate/ez-ipupdate_3.0.10.bb
+++ b/packages/ez-ipupdate/ez-ipupdate_3.0.10.bb
@@ -22,7 +22,7 @@ CONFFILES_${PN} = "${sysconfdir}/ipupdate.conf"
inherit autotools update-rc.d
-PACKAGES = "ez-ipupdate"
+PACKAGES += "ez-ipupdate"
do_install_append() {
install -d "${D}${sysconfdir}/init.d"
diff --git a/packages/faac/faac_1.24.bb b/packages/faac/faac_1.24.bb
index 253310d1c5..f6ba784389 100644
--- a/packages/faac/faac_1.24.bb
+++ b/packages/faac/faac_1.24.bb
@@ -9,7 +9,7 @@ inherit autotools
SRC_URI = "${SOURCEFORGE_MIRROR}/faac/${PN}-${PV}.tar.gz"
S="${WORKDIR}/${PN}"
-PACKAGES = "${PN} lib${PN} lib${PN}-dev"
+PACKAGES = "${PN}-dbg ${PN} lib${PN} lib${PN}-dev"
FILES_${PN} = " ${bindir}/faac "
FILES_lib${PN} = " ${libdir}/libfaac.so.0 ${libdir}/libfaac.so.0.0.0 "
diff --git a/packages/fakeroot/fakeroot-native-1.8.3/configure-libtool.patch b/packages/fakeroot/fakeroot-native-1.8.3/configure-libtool.patch
deleted file mode 100644
index 8830328eb5..0000000000
--- a/packages/fakeroot/fakeroot-native-1.8.3/configure-libtool.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- fakeroot-1.8.3/configure.ac.orig 2007-10-31 00:17:27.000000000 -0500
-+++ fakeroot-1.8.3/configure.ac 2007-10-31 00:18:12.000000000 -0500
-@@ -1,14 +1,12 @@
- dnl Process this file with autoconf to produce a configure script.
- AC_INIT([fakeroot],[FAKEROOT_VERSION],[schizo@debian.org],[fakeroot])
- AC_PREREQ(2.61)
--LT_PREREQ(2.1a)
- AC_CANONICAL_TARGET
- AM_INIT_AUTOMAKE
- AM_MAINTAINER_MODE
- AC_CONFIG_HEADERS([config.h])
- AC_PROG_MAKE_SET
--LT_INIT
--LT_LANG(C)
-+AC_PROG_LIBTOOL
-
- AC_ARG_WITH([ipc],
- AS_HELP_STRING([--with-ipc@<:@=IPCTYPE@:>@],
diff --git a/packages/fakeroot/fakeroot-native_1.8.3.bb b/packages/fakeroot/fakeroot-native_1.8.3.bb
deleted file mode 100644
index 8b3d2a1590..0000000000
--- a/packages/fakeroot/fakeroot-native_1.8.3.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-SECTION = "base"
-require fakeroot_${PV}.bb
-inherit native
-RDEPENDS="util-linux-native"
-
-SRC_URI += "file://fix-prefix.patch;patch=1 "
-S = "${WORKDIR}/fakeroot-${PV}"
-
-EXTRA_OECONF = " --program-prefix="
-
-# Compatability for the rare systems not using or having SYSV
-python () {
- if bb.data.getVar('HOST_NONSYSV', d, True) and bb.data.getVar('HOST_NONSYSV', d, True) != '0':
- bb.data.setVar('EXTRA_OECONF', ' --with-ipc=tcp --program-prefix= ', d)
-}
-
-do_stage_append () {
- oe_libinstall -so libfakeroot ${STAGING_LIBDIR}/libfakeroot/
-}
-
diff --git a/packages/fakeroot/fakeroot-native_1.9.1.bb b/packages/fakeroot/fakeroot-native_1.9.1.bb
new file mode 100644
index 0000000000..77d6f58651
--- /dev/null
+++ b/packages/fakeroot/fakeroot-native_1.9.1.bb
@@ -0,0 +1,21 @@
+require fakeroot_${PV}.bb
+
+RDEPENDS="util-linux-native"
+
+SRC_URI += "file://fix-prefix.patch;patch=1 "
+S = "${WORKDIR}/fakeroot-${PV}"
+
+inherit native
+
+EXTRA_OECONF = " --program-prefix="
+
+# Compatability for the rare systems not using or having SYSV
+python () {
+ if bb.data.getVar('HOST_NONSYSV', d, True) and bb.data.getVar('HOST_NONSYSV', d, True) != '0':
+ bb.data.setVar('EXTRA_OECONF', ' --with-ipc=tcp --program-prefix= ', d)
+}
+
+do_stage_append () {
+ oe_libinstall -so libfakeroot ${STAGING_LIBDIR}/libfakeroot/
+}
+
diff --git a/packages/fakeroot/fakeroot_1.8.3.bb b/packages/fakeroot/fakeroot_1.8.3.bb
deleted file mode 100644
index ef4d1ba55c..0000000000
--- a/packages/fakeroot/fakeroot_1.8.3.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-DESCRIPTION = "Gives a fake root environment"
-SECTION = "base"
-LICENSE = "GPL"
-# fakeroot needs getopt which is provided by the util-linux package
-RDEPENDS = "util-linux"
-PR = "r1"
-
-SRC_URI = "ftp://ftp.debian.org/debian/pool/main/f/fakeroot/fakeroot_${PV}.tar.gz \
- file://configure-libtool.patch;patch=1"
-
-inherit autotools
-
-do_stage() {
- install -d ${STAGING_INCDIR}/fakeroot
- install -m 644 *.h ${STAGING_INCDIR}/fakeroot
- autotools_stage_all
-}
diff --git a/packages/fakeroot/fakeroot_1.9.1.bb b/packages/fakeroot/fakeroot_1.9.1.bb
new file mode 100644
index 0000000000..aaf696d79d
--- /dev/null
+++ b/packages/fakeroot/fakeroot_1.9.1.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Gives a fake root environment"
+HOMEPAGE = "http://fakeroot.alioth.debian.org/"
+SECTION = "base"
+LICENSE = "GPL"
+# fakeroot needs getopt which is provided by the util-linux package
+RDEPENDS = "util-linux"
+PR = "r1"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/f/fakeroot/fakeroot_${PV}.tar.gz \
+ file://configure-libtool.patch;patch=1"
+
+inherit autotools
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/fakeroot
+ install -m 644 *.h ${STAGING_INCDIR}/fakeroot
+ autotools_stage_all
+}
diff --git a/packages/fakeroot/fakeroot-1.8.3/configure-libtool.patch b/packages/fakeroot/files/configure-libtool.patch
index 8830328eb5..8830328eb5 100644
--- a/packages/fakeroot/fakeroot-1.8.3/configure-libtool.patch
+++ b/packages/fakeroot/files/configure-libtool.patch
diff --git a/packages/fastjar/fastjar-native_0.95.bb b/packages/fastjar/fastjar-native_0.95.bb
index 520235d799..3d003306b8 100644
--- a/packages/fastjar/fastjar-native_0.95.bb
+++ b/packages/fastjar/fastjar-native_0.95.bb
@@ -4,6 +4,8 @@ SECTION = "devel"
PRIORITY = "optional"
LICENSE = "GPL"
+PR = "r1"
+
DEPENDS = "zlib-native"
SRC_URI = "http://download.savannah.nongnu.org/releases/fastjar/fastjar-${PV}.tar.gz"
@@ -20,7 +22,8 @@ do_configure () {
}
do_stage() {
+ #we should teach autotools.bbclass:autotools_stage_all() about ${STAGING_BINDIR}
install -d ${STAGING_BINDIR}
- install -m 755 fastjar ${STAGING_BINDIR}/fastjar
- install -m 755 grepjar ${STAGING_BINDIR}
+ install -m 755 .libs/fastjar ${STAGING_BINDIR}/fastjar
+ install -m 755 .libs/grepjar ${STAGING_BINDIR}
}
diff --git a/packages/fbreader/fbreader_0.7.3d.bb b/packages/fbreader/fbreader_0.7.3d.bb
index 9fe9c3190c..a326180997 100644
--- a/packages/fbreader/fbreader_0.7.3d.bb
+++ b/packages/fbreader/fbreader_0.7.3d.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "FBreader is an ebook reader"
-LICENSE = "GPL2"
+LICENSE = "GPLv2"
HOMEPAGE = "http://only.mawhrin.net/fbreader/"
SECTION = "x11/utils"
PRIORITY = "optional"
diff --git a/packages/fbreader/fbreader_0.7.4q.bb b/packages/fbreader/fbreader_0.7.4q.bb
index bcea83a4a1..de2bf358a4 100644
--- a/packages/fbreader/fbreader_0.7.4q.bb
+++ b/packages/fbreader/fbreader_0.7.4q.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "FBreader is an ebook reader"
-LICENSE = "GPL2"
+LICENSE = "GPLv2"
HOMEPAGE = "http://only.mawhrin.net/fbreader/"
SECTION = "x11/utils"
PRIORITY = "optional"
diff --git a/packages/fbreader/fbreader_0.8.2a.bb b/packages/fbreader/fbreader_0.8.2a.bb
index ca25bdc620..fa982040f9 100644
--- a/packages/fbreader/fbreader_0.8.2a.bb
+++ b/packages/fbreader/fbreader_0.8.2a.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "FBreader is an ebook reader"
-LICENSE = "GPL2"
+LICENSE = "GPLv2"
HOMEPAGE = "http://only.mawhrin.net/fbreader/"
SECTION = "x11/utils"
PRIORITY = "optional"
diff --git a/packages/fbvncserver/fbvncserver_0.9.4.bb b/packages/fbvncserver/fbvncserver_0.9.4.bb
deleted file mode 100644
index e7c8151e18..0000000000
--- a/packages/fbvncserver/fbvncserver_0.9.4.bb
+++ /dev/null
@@ -1,55 +0,0 @@
-DESCRIPTION = "Framebuffer VNC server"
-LICENSE = "GPL"
-SECTION = "console/utils"
-#DEPENDS = "libvncserver jpeg zlib"
-# using older version due of error with libvncserver-0.7.1
-# fbvncserver.c:577: error: structure has no member named `rfbAlwaysShared'
-# fbvncserver.c:602: error: structure has no member named `rfbClientHead'
-DEPENDS = "libvncserver-0.6 jpeg zlib"
-RDEPENDS = "fbvncserver-kmodule libvncserver-storepasswd libvncserver-javaapplet"
-PR = "r2"
-
-SRC_URI = "http://sdgsystems.com/download/fbvncserver-${PV}.tar.gz \
- file://libvncs0.6.patch;patch=1 \
- file://paths.patch;patch=1 \
- file://kernelinclude.patch;patch=1 \
- file://buildfix.patch;patch=1 \
- file://ipaq.patch;patch=1 \
- file://init"
-
-S = "${WORKDIR}/fbvncserver-${PV}"
-
-export INCLUDES = "-I${STAGING_INCDIR}"
-
-export LIBS = "-L${STAGING_LIBDIR} -lpthread"
-export VNCSERVER_DIR = "${STAGING_LIBDIR}"
-export ZAURUS_ZLIB_LIBS = "${STAGING_LIBDIR}"
-export ZAURUS_JPEG_LIBS = "${STAGING_LIBDIR}"
-
-inherit update-rc.d
-
-INITSCRIPT_NAME = "fbvncinput"
-INITSCRIPT_PARAMS = "defaults 97"
-
-FBVNCSERVER_SYSTEM = "zaurus"
-FBVNCSERVER_SYSTEM_h3600 = "ipaq"
-FBVNCSERVER_SYSTEM_h3900 = "ipaq"
-
-do_compile () {
- oe_runmake ${FBVNCSERVER_SYSTEM}_fbvncserver ${FBVNCSERVER_SYSTEM}_tssimd
-}
-
-do_install () {
- install -d ${D}${bindir}
- install -m 0755 ${FBVNCSERVER_SYSTEM}_fbvncserver ${D}${bindir}/fbvncserver
- install -m 0755 ${FBVNCSERVER_SYSTEM}_tssimd ${D}${bindir}/tssimd
-
- install -d ${D}${datadir}/fbvncserver
- install -m 0644 ${FBVNCSERVER_SYSTEM}_panel.jpg ${D}${datadir}/fbvncserver/
-
- install -d ${D}${sysconfdir}/init.d
- install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/fbvncinput
-}
-
-FILES_${PN} += " /usr/share/fbvncserver/*.jpg"
-
diff --git a/packages/flite/flite-1.3/flite-1.3-Makefile.patch b/packages/flite/flite-1.3/flite-1.3-Makefile.patch
new file mode 100644
index 0000000000..9a1a82e13b
--- /dev/null
+++ b/packages/flite/flite-1.3/flite-1.3-Makefile.patch
@@ -0,0 +1,405 @@
+Index: lang/usenglish/Makefile
+===================================================================
+--- flite-1.3-release/lang/usenglish/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/lang/usenglish/Makefile (.../release-1.2) (revision 7)
+@@ -38,6 +38,7 @@
+ DIRNAME=lang/usenglish
+ BUILD_DIRS =
+ ALL_DIRS=
++include $(TOP)/config/config
+ H = usenglish.h us_int_accent_cart.h us_int_tone_cart.h us_durz_cart.h \
+ us_ffeatures.h us_phrasing_cart.h us_text.h us_f0.h us_nums_cart.h
+ SRCS = us_int_accent_cart.c us_int_tone_cart.c us_f0_model.c \
+@@ -45,7 +46,11 @@
+ us_phoneset.c us_ffeatures.c us_phrasing_cart.c \
+ us_gpos.c us_text.c us_expand.c us_postlex.c \
+ us_nums_cart.c us_aswd.c usenglish.c
+-OBJS = $(SRCS:.c=.o)
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ SCM=
+ FILES = Makefile $(SCM) $(SRCS) $(H)
+ LIBNAME = flite_usenglish
+
+Index: lang/cmu_us_kal/Makefile
+===================================================================
+--- flite-1.3-release/lang/cmu_us_kal/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/lang/cmu_us_kal/Makefile (.../release-1.2) (revision 7)
+@@ -43,7 +43,12 @@
+ cmu_us_kal_lpc.c \
+ cmu_us_kal_res.c \
+ cmu_us_kal_residx.c
+-OBJS = $(SRCS:.c=.o)
++include $(TOP)/config/config
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ SCM=
+ FILES = Makefile $(SCM) $(SRCS) $(H)
+ LIBNAME = flite_cmu_us_kal
+
+Index: lang/cmu_us_kal16/Makefile
+===================================================================
+--- flite-1.3-release/lang/cmu_us_kal16/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/lang/cmu_us_kal16/Makefile (.../release-1.2) (revision 7)
+@@ -44,7 +44,12 @@
+ cmu_us_kal16_lpc.c \
+ cmu_us_kal16_res.c \
+ cmu_us_kal16_residx.c
+-OBJS = $(SRCS:.c=.o)
++include $(TOP)/config/config
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ SCM=
+ FILES = Makefile $(SCM) $(SRCS) $(H)
+ LIBNAME = flite_cmu_us_kal16
+
+Index: lang/cmu_time_awb/Makefile
+===================================================================
+--- flite-1.3-release/lang/cmu_time_awb/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/lang/cmu_time_awb/Makefile (.../release-1.2) (revision 7)
+@@ -45,7 +45,12 @@
+ cmu_time_awb_mcep.c \
+ cmu_time_awb_lpc.c \
+ cmu_time_awb_lex_entry.c
+-OBJS = $(SRCS:.c=.o)
++include $(TOP)/config/config
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ SCM=
+ FILES = Makefile $(SCM) $(SRCS) $(H)
+ LIBNAME = flite_cmu_time_awb
+
+Index: lang/cmulex/Makefile
+===================================================================
+--- flite-1.3-release/lang/cmulex/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/lang/cmulex/Makefile (.../release-1.2) (revision 7)
+@@ -38,13 +38,20 @@
+ DIRNAME=lang/cmulex
+ BUILD_DIRS =
+ ALL_DIRS=
++
+ H = cmu_lts_model.h cmulex.h
+ SRCS = cmu_lts_rules.c cmu_lts_model.c \
+ cmu_lex.c cmu_lex_entries.c cmu_lex_data.c
+ LEX_DATA_INCLUDES = cmu_lex_data_raw.c cmu_lex_num_bytes.c \
+ cmu_lex_phones_huff_table.c cmu_lex_entries_huff_table.c
+
+-OBJS = $(SRCS:.c=.o)
++include $(TOP)/config/config
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
++
+ SCRIPTS=make_cmulex
+
+ SCM=
+
+Index: src/hrg/Makefile
+===================================================================
+--- flite-1.3-release/src/hrg/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/src/hrg/Makefile (.../release-1.2) (revision 7)
+@@ -39,9 +39,14 @@
+ BUILD_DIRS =
+ ALL_DIRS=
+ H =
++include $(TOP)/config/config
+ SRCS = cst_utterance.c cst_relation.c cst_item.c cst_ffeature.c \
+ cst_rel_io.c
+-OBJS = $(SRCS:.c=.o)
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ FILES = Makefile $(H) $(SRCS)
+ LIBNAME = flite
+
+Index: src/utils/Makefile
+===================================================================
+--- flite-1.3-release/src/utils/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/src/utils/Makefile (.../release-1.2) (revision 7)
+@@ -44,8 +44,13 @@
+ cst_tokenstream.c cst_val.c cst_features.c \
+ cst_endian.c cst_socket.c cst_val_const.c \
+ cst_val_user.c cst_args.c
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os) $(MMAPTYPE:%=cst_mmap_%.os) \
++ $(STDIOTYPE:%=cst_file_%.os)
++else
+ OBJS := $(SRCS:.c=.o) $(MMAPTYPE:%=cst_mmap_%.o) \
+ $(STDIOTYPE:%=cst_file_%.o)
++endif
+ FILES = Makefile $(H) $(SRCS) \
+ cst_mmap_posix.c cst_mmap_win32.c cst_mmap_none.c \
+ cst_file_stdio.c cst_file_wince.c cst_file_palmos.c
+
+Index: src/audio/Makefile
+===================================================================
+--- flite-1.3-release/src/audio/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/src/audio/Makefile (.../release-1.2) (revision 7)
+@@ -43,9 +43,13 @@
+
+ BASESRCS = auclient.c auserver.c audio.c
+ SRCS = $(BASESRCS) $(AUDIODRIVER:%=au_%.c)
+-OBJS = $(SRCS:.c=.o)
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ FILES = Makefile $(H) $(BASESRCS) au_command.c au_none.c \
+- au_oss.c au_sun.c au_wince.c au_palmos.c
++ au_oss.c au_sun.c au_wince.c au_palmos.c au_alsa.c
+ LIBNAME = flite
+
+ LOCAL_INCLUDES = -I. $(AUDIODEFS)
+
+Index: src/lexicon/Makefile
+===================================================================
+--- flite-1.3-release/src/lexicon/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/src/lexicon/Makefile (.../release-1.2) (revision 7)
+@@ -38,8 +38,13 @@
+ DIRNAME=src/lexicon
+ BUILD_DIRS =
+ ALL_DIRS=
++include $(TOP)/config/config
+ SRCS = cst_lexicon.c cst_lts.c cst_lts_rewrites.c
+-OBJS = $(SRCS:.c=.o)
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ FILES = Makefile $(SRCS)
+ LIBNAME = flite
+
+Index: src/synth/Makefile
+===================================================================
+--- flite-1.3-release/src/synth/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/src/synth/Makefile (.../release-1.2) (revision 7)
+@@ -38,9 +38,14 @@
+ DIRNAME=src/synth
+ BUILD_DIRS =
+ ALL_DIRS=
++include $(TOP)/config/config
+ SRCS = cst_synth.c cst_utt_utils.c cst_voice.c cst_phoneset.c \
+ flite.c
+-OBJS = $(SRCS:.c=.o)
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ FILES = Makefile $(SRCS)
+ LIBNAME = flite
+
+Index: src/speech/Makefile
+===================================================================
+--- flite-1.3-release/src/speech/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/src/speech/Makefile (.../release-1.2) (revision 7)
+@@ -39,9 +39,14 @@
+ BUILD_DIRS =
+ ALL_DIRS=
+ H =
++include $(TOP)/config/config
+ SRCS = cst_wave.c cst_wave_io.c cst_track.c cst_track_io.c \
+ cst_wave_utils.c cst_lpcres.c rateconv.c
+-OBJS = $(SRCS:.c=.o)
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ FILES = Makefile $(H) $(SRCS)
+ LIBNAME = flite
+
+Index: src/wavesynth/Makefile
+===================================================================
+--- flite-1.3-release/src/wavesynth/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/src/wavesynth/Makefile (.../release-1.2) (revision 7)
+@@ -38,9 +38,14 @@
+ DIRNAME=src/wavesynth
+ BUILD_DIRS =
+ ALL_DIRS=
++include $(TOP)/config/config
+ SRCS = cst_units.c cst_sigpr.c cst_clunits.c cst_diphone.c \
+ cst_sigprFP.c cst_sts.c cst_reflpc.c
+-OBJS = $(SRCS:.c=.o)
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ LIBNAME = flite
+ FILES = Makefile $(SRCS)
+
+Index: src/regex/Makefile
+===================================================================
+--- flite-1.3-release/src/regex/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/src/regex/Makefile (.../release-1.2) (revision 7)
+@@ -42,8 +42,13 @@
+ DIRNAME=src/regex
+ BUILD_DIRS =
+ ALL_DIRS=
++include $(TOP)/config/config
+ SRCS = cst_regex.c regexp.c regsub.c
+-OBJS = $(SRCS:.c=.o)
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ FILES = Makefile $(H) $(SRCS)
+ LIBNAME = flite
+
+Index: src/stats/Makefile
+===================================================================
+--- flite-1.3-release/src/stats/Makefile (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/src/stats/Makefile (.../release-1.2) (revision 7)
+@@ -39,8 +39,13 @@
+ BUILD_DIRS =
+ ALL_DIRS=
+ H =
++include $(TOP)/config/config
+ SRCS = cst_cart.c cst_viterbi.c cst_ss.c
+-OBJS = $(SRCS:.c=.o)
++ifdef SHFLAGS
++OBJS := $(SRCS:.c=.os)
++else
++OBJS := $(SRCS:.c=.o)
++endif
+ FILES = Makefile $(H) $(SRCS)
+ LIBNAME = flite
+
+Index: config/common_make_rules
+===================================================================
+--- flite-1.3-release/config/common_make_rules (.../flite-1.3-orig) (revision 7)
++++ flite-1.3-release/config/common_make_rules (.../release-1.2) (revision 7)
+@@ -73,12 +73,13 @@
+ ifdef SHFLAGS
+ SOOBJS = $(OBJS:.o=.os)
+ FULLSHOBJS = $(SOOBJS:%=$(OBJDIR)/%)
+-ifdef LIBNAME
+-ALL += $(OBJDIR)/.build_so
++#ifdef LIBNAME
++#ALL += $(OBJDIR)/.build_so
++#endif
+ endif
+-endif
+ ifdef LIBNAME
+ ALL += $(OBJDIR)/.build_lib
++ALL += $(OBJDIR)/.build_so
+ endif
+ # Only do some directories when you are not cross compiling
+ ifeq ($(HOST_PLATFORM),$(TARGET_PLATFORM))
+@@ -117,14 +118,17 @@
+ @ touch $(OBJDIR)/.build_so
+
+ # Used in the lib/ directory and in building new voices
+-$(OBJDIR)/%.so: %.shared.a
++#$(OBJDIR)/%.so: %.shared.a
++%.so: %.shared.a
+ @ echo making $@
+ @ rm -rf shared_os && mkdir shared_os
+ @ rm -f $@ $(LIBDIR)/$@.${PROJECT_VERSION} $(LIBDIR)/$@.${PROJECT_SHLIB_VERSION}
+ @ (cd shared_os && ar x ../$<)
+ @ (cd shared_os && $(CC) -shared -Wl,-soname,$@.${PROJECT_SHLIB_VERSION} -o ../$@.${PROJECT_VERSION} *.os)
+- @ ln -s $(LIBDIR)/$@.${PROJECT_VERSION} $(LIBDIR)/$@.${PROJECT_SHLIB_VERSION}
+- @ ln -s $(LIBDIR)/$@.${PROJECT_SHLIB_VERSION} $(LIBDIR)/$@
++ #@ ln -s $(LIBDIR)/$@.${PROJECT_VERSION} $(LIBDIR)/$@.${PROJECT_SHLIB_VERSION}
++ #@ ln -s $(LIBDIR)/$@.${PROJECT_SHLIB_VERSION} $(LIBDIR)/$@
++ @ ln -s $@.${PROJECT_VERSION} $@.${PROJECT_SHLIB_VERSION}
++ @ ln -s $@.${PROJECT_SHLIB_VERSION} $@
+ @ rm -rf shared_os
+
+ $(OBJDIR)/.make_build_dirs:
+
+Index: lib/Makefile
+===================================================================
+--- flite-1.3-release/lib/Makefile (.../flite-1.3-orig) (revision 0)
++++ flite-1.3-release/lib/Makefile (.../release-1.2) (revision 7)
+@@ -0,0 +1,70 @@
++###########################################################################
++## ##
++## Language Technologies Institute ##
++## Carnegie Mellon University ##
++## Copyright (c) 1999 ##
++## All Rights Reserved. ##
++## ##
++## Permission is hereby granted, free of charge, to use and distribute ##
++## this software and its documentation without restriction, including ##
++## without limitation the rights to use, copy, modify, merge, publish, ##
++## distribute, sublicense, and/or sell copies of this work, and to ##
++## permit persons to whom this work is furnished to do so, subject to ##
++## the following conditions: ##
++## 1. The code must retain the above copyright notice, this list of ##
++## conditions and the following disclaimer. ##
++## 2. Any modifications must be clearly marked as such. ##
++## 3. Original authors' names are not deleted. ##
++## 4. The authors' names are not used to endorse or promote products ##
++## derived from this software without specific prior written ##
++## permission. ##
++## ##
++## CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK ##
++## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ##
++## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ##
++## SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE ##
++## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ##
++## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ##
++## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ##
++## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ##
++## THIS SOFTWARE. ##
++## ##
++###########################################################################
++## ##
++## FLITE libraries ##
++## ##
++###########################################################################
++TOP=..
++DIRNAME=lib
++BUILD_DIRS =
++ALL_DIRS=
++FILES = Makefile
++LIBNAMES = flite flite_cmulex flite_usenglish \
++ flite_cmu_us_kal flite_cmu_us_kal16 flite_cmu_time_awb
++
++STATICLIBS= $(LIBNAMES:%=lib%.a)
++SHAREDARLIBS= $(LIBNAMES:%=lib%.shared.a)
++#SHAREDLIBS = $(LIBNAMES:%=lib%.so)
++SHAREDLIBS = $(SHAREDARLIBS:%.shared.a=%.so)
++VERSIONSHAREDLIBS = $(SHAREDLIBS:%=%.${PROJECT_VERSION}) \
++ $(SHAREDLIBS:%=%.${PROJECT_SHLIB_VERSION})
++ALL_LIBS = $(STATICLIBS) $(SHAREDLIBS) $(VERSIONSHAREDLIBS)
++
++ALL = shared_libs
++
++LOCAL_CLEAN=*.a *.so *.so.${PROJECT_VERSION} *.so.${PROJECT_SHLIB_VERSION}
++
++include $(TOP)/config/common_make_rules
++
++ifdef SHFLAGS
++shared_libs: $(SHAREDLIBS)
++else
++shared_libs: nothing
++endif
++
++install:
++ @ cp -vf $(LIBDIR)/* .
++ @ $(MAKE) shared_libs
++ @ echo ARLIBS: $(SHAREDARLIBS)
++ @ echo SHARLIBS: $(SHAREDLIBS)
++ @ tar cvf - $(ALL_LIBS) | ( cd $(INSTALLLIBDIR) && tar xf -)
diff --git a/packages/flite/flite-1.3/flite-1.3-configure-with-audio.patch b/packages/flite/flite-1.3/flite-1.3-configure-with-audio.patch
new file mode 100644
index 0000000000..3c077530f6
--- /dev/null
+++ b/packages/flite/flite-1.3/flite-1.3-configure-with-audio.patch
@@ -0,0 +1,12 @@
+--- flite-1.3-release/configure.in.old 2008-01-05 10:14:57.000000000 -0600
++++ flite-1.3-release/configure.in 2008-01-05 10:15:38.000000000 -0600
+@@ -220,7 +220,8 @@ dnl allow the user to override the one d
+ dnl
+ AC_ARG_WITH( audio,
+ [ --with-audio with specific audio support (none linux freebsd etc) ],
+- AUDIODRIVER=$with_audio )
++ [AUDIODRIVER=$with_audio
++ AUDIODEFS=])
+
+ if test "x$AUDIODEFS" = x; then
+ case "$AUDIODRIVER" in
diff --git a/packages/flite/flite-1.3/flite-1.3-fix-read-only-assignments.patch b/packages/flite/flite-1.3/flite-1.3-fix-read-only-assignments.patch
new file mode 100644
index 0000000000..da8c88370f
--- /dev/null
+++ b/packages/flite/flite-1.3/flite-1.3-fix-read-only-assignments.patch
@@ -0,0 +1,15 @@
+--- flite-1.3-release/include/cst_sts.h.old 2008-01-05 10:09:35.000000000 -0600
++++ flite-1.3-release/include/cst_sts.h 2008-01-05 10:08:38.000000000 -0600
+@@ -45,9 +45,9 @@
+ /* else where, this information plus the indexes in the Unit relation */
+ /* allow reconstruction of the signal itself */
+ struct cst_sts_struct {
+- const unsigned short *frame;
+- const int size; /* in samples */
+- const unsigned char *residual;
++ unsigned short *frame;
++ int size; /* in samples */
++ unsigned char *residual;
+ };
+ typedef struct cst_sts_struct cst_sts;
+
diff --git a/packages/linux/linux-handhelds-2.6/aximx50/.mtn2git_empty b/packages/flite/flite-alsa-1.2/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/aximx50/.mtn2git_empty
+++ b/packages/flite/flite-alsa-1.2/.mtn2git_empty
diff --git a/packages/flite/flite-1.2/flite-1.2-alsa_support-1.2.diff b/packages/flite/flite-alsa-1.2/flite-1.2-alsa_support-1.2.diff
index 3d2753a01f..3d2753a01f 100644
--- a/packages/flite/flite-1.2/flite-1.2-alsa_support-1.2.diff
+++ b/packages/flite/flite-alsa-1.2/flite-1.2-alsa_support-1.2.diff
diff --git a/packages/flite/flite-alsa-1.2/flite-alsa-1.2-configure-with-audio.patch b/packages/flite/flite-alsa-1.2/flite-alsa-1.2-configure-with-audio.patch
new file mode 100644
index 0000000000..b344877d04
--- /dev/null
+++ b/packages/flite/flite-alsa-1.2/flite-alsa-1.2-configure-with-audio.patch
@@ -0,0 +1,12 @@
+--- flite-1.2-release/configure.in.old 2008-01-06 02:30:57.000000000 -0600
++++ flite-1.2-release/configure.in 2008-01-06 02:31:32.000000000 -0600
+@@ -145,7 +145,8 @@ dnl allow the user to override the one d
+ dnl
+ AC_ARG_WITH( audio,
+ [ --with-audio with specific audio support (none linux freebsd etc) ],
+- AUDIODRIVER=$with_audio )
++ [AUDIODRIVER=$with_audio
++ AUDIODEFS=])
+
+ if test "x$AUDIODEFS" = x; then
+ case "$AUDIODRIVER" in
diff --git a/packages/linux/linux-handhelds-2.6/eteng500/.mtn2git_empty b/packages/flite/flite-alsa-1.3/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/eteng500/.mtn2git_empty
+++ b/packages/flite/flite-alsa-1.3/.mtn2git_empty
diff --git a/packages/flite/flite-1.3/flite-1.3-alsa_support-1.2.diff b/packages/flite/flite-alsa-1.3/flite-1.3-alsa_support-1.2.diff
index b3e4b7aae4..b3e4b7aae4 100644
--- a/packages/flite/flite-1.3/flite-1.3-alsa_support-1.2.diff
+++ b/packages/flite/flite-alsa-1.3/flite-1.3-alsa_support-1.2.diff
diff --git a/packages/flite/flite-alsa-1.3/flite-alsa-1.3-configure-with-audio.patch b/packages/flite/flite-alsa-1.3/flite-alsa-1.3-configure-with-audio.patch
new file mode 100644
index 0000000000..e1e7aed508
--- /dev/null
+++ b/packages/flite/flite-alsa-1.3/flite-alsa-1.3-configure-with-audio.patch
@@ -0,0 +1,12 @@
+--- flite-1.3-release/configure.in.old 2008-01-06 02:17:47.000000000 -0600
++++ flite-1.3-release/configure.in 2008-01-06 02:19:56.000000000 -0600
+@@ -220,7 +220,8 @@ dnl allow the user to override the one d
+ dnl
+ AC_ARG_WITH( audio,
+ [ --with-audio with specific audio support (none linux freebsd etc) ],
+- AUDIODRIVER=$with_audio )
++ [AUDIODRIVER=$with_audio
++ AUDIODEFS=])
+
+ if test "x$AUDIODEFS" = x; then
+ case "$AUDIODRIVER" in
diff --git a/packages/flite/flite-alsa_1.2.bb b/packages/flite/flite-alsa_1.2.bb
new file mode 100644
index 0000000000..92db8c34f9
--- /dev/null
+++ b/packages/flite/flite-alsa_1.2.bb
@@ -0,0 +1,10 @@
+require flite.inc
+
+PR = "r1"
+
+EXTRA_OECONF = "--with-audio=alsa --enable-shared"
+
+SRC_URI = "http://www.speech.cs.cmu.edu/flite/packed/flite-${PV}/flite-${PV}-release.tar.bz2 \
+# file://fix-read-only-assignments.patch;patch=1 \ # included in the alsa patch
+#source http://homepage.hispeed.ch/loehrer/downloads/flite-1.2-alsa_support-1.2.diff.bz2 \
+ file://flite-1.2-alsa_support-1.2.diff;patch=1"
diff --git a/packages/flite/flite-alsa_1.3.bb b/packages/flite/flite-alsa_1.3.bb
new file mode 100644
index 0000000000..438fe38e0e
--- /dev/null
+++ b/packages/flite/flite-alsa_1.3.bb
@@ -0,0 +1,11 @@
+require flite.inc
+
+PR = "r1"
+
+EXTRA_OECONF = "--with-audio=alsa --enable-shared"
+
+SRC_URI = "http://www.speech.cs.cmu.edu/flite/packed/flite-${PV}/flite-${PV}-release.tar.gz \
+# file://fix-read-only-assignments.patch;patch=1 \ # fixed elsewhere in 1.3 release?
+#source http://homepage.hispeed.ch/loehrer/downloads/flite-1.3-alsa_support-1.2.diff.bz2 \
+ file://flite-1.3-alsa_support-1.2.diff;patch=1 \
+ file://flite-alsa-1.3-configure-with-audio.patch;patch=1"
diff --git a/packages/flite/flite.inc b/packages/flite/flite.inc
index 59373ba60d..60a9d04419 100644
--- a/packages/flite/flite.inc
+++ b/packages/flite/flite.inc
@@ -9,9 +9,9 @@ PARALLEL_MAKE = ""
S = "${WORKDIR}/flite-${PV}-release"
-inherit autotools
+CFLAGS += " -lasound "
-EXTRA_OECONF = "--with-audio=alsa --enable-shared"
+inherit autotools
PACKAGES += "lib${PN} lib${PN}-vox8 lib${PN}-vox16"
@@ -32,9 +32,10 @@ do_install() {
oe_runmake INSTALLBINDIR="${D}${bindir}" INSTALLLIBDIR="${D}${libdir}" INSTALLINCDIR="${D}${includedir}" install
}
-
do_stage () {
- install -m 0644 ${S}/include/*.h ${STAGING_INCDIR}/
+ install -d ${STAGING_INCDIR}/flite
+ install -m 0644 ${S}/include/*.h ${STAGING_INCDIR}/flite/
+
oe_libinstall -C lib -a -so libflite ${STAGING_LIBDIR}
oe_libinstall -C lib -a -so libflite_cmu_time_awb ${STAGING_LIBDIR}
oe_libinstall -C lib -a -so libflite_cmulex ${STAGING_LIBDIR}
diff --git a/packages/flite/flite_1.2.bb b/packages/flite/flite_1.2.bb
index e5a165eb97..7169663ce7 100644
--- a/packages/flite/flite_1.2.bb
+++ b/packages/flite/flite_1.2.bb
@@ -1,8 +1,9 @@
require flite.inc
-PR = "r3"
+PR = "r5"
+
+EXTRA_OECONF = "--with-audio=oss --enable-shared"
SRC_URI = "http://www.speech.cs.cmu.edu/flite/packed/flite-${PV}/flite-${PV}-release.tar.bz2 \
-# http://homepage.hispeed.ch/loehrer/downloads/flite-1.2-alsa_support-1.2.diff.bz2 \
- file://flite-1.2-alsa_support-1.2.diff;patch=1"
-# file://configure-with-audio.patch;patch=1 \
+ file://fix-read-only-assignments.patch;patch=1 \
+ file://configure-with-audio.patch;patch=1"
diff --git a/packages/flite/flite_1.3.bb b/packages/flite/flite_1.3.bb
index 85154b2b36..360ccb0c23 100644
--- a/packages/flite/flite_1.3.bb
+++ b/packages/flite/flite_1.3.bb
@@ -1,8 +1,10 @@
require flite.inc
-PR = "r0"
+PR = "r3"
+
+EXTRA_OECONF = "--with-audio=oss --enable-shared"
SRC_URI = "http://www.speech.cs.cmu.edu/flite/packed/flite-${PV}/flite-${PV}-release.tar.gz \
-# http://homepage.hispeed.ch/loehrer/downloads/flite-1.3-alsa_support-1.2.diff.bz2 \
- file://flite-1.3-alsa_support-1.2.diff;patch=1"
-# file://fix-read-only-assignments.patch;patch=1 \
+ file://flite-1.3-Makefile.patch;patch=1 \
+# file://flite-1.3-fix-read-only-assignments.patch;patch=1 \ # fixed elsewhere in 1.3 release?
+ file://flite-1.3-configure-with-audio.patch;patch=1"
diff --git a/packages/flumotion/flumotion_0.4.1.bb b/packages/flumotion/flumotion_0.4.1.bb
index aad4eb3382..f709086846 100644
--- a/packages/flumotion/flumotion_0.4.1.bb
+++ b/packages/flumotion/flumotion_0.4.1.bb
@@ -1,13 +1,19 @@
DESCRIPTION = "Fluendo Streaming Server"
LICENSE = "GPL"
-DEPENDS = "gstreamer python-imaging python-gst twisted python-pygtk2"
-RDEPENDS = " python-resource python-pprint python-threading python-imaging python-xml python-curses python-compression python-fcntl python-pygobject python-pickle python-netclient python-datetime python-crypt python-twisted-core python-twisted-web python-lang python-zopeinterface python-textutils python-core python-gst python-misc"
-RDEPENDS_${PN}-gui = "${PN} python-pygtk2 python-pycairo "
-PR = "r7"
+DEPENDS = "gstreamer python-imaging python-gst twisted python-pygtk"
+RDEPENDS = "python-resource python-pprint python-threading \
+ python-imaging python-xml python-curses \
+ python-compression python-fcntl python-pygobject \
+ python-pickle python-netclient python-datetime \
+ python-crypt python-twisted-core python-twisted-web \
+ python-lang python-zopeinterface python-textutils \
+ python-gst python-misc"
+RDEPENDS_${PN}-gui = "${PN} python-pygtk python-pycairo"
+PR = "r9"
SRC_URI = "http://www.flumotion.net/src/flumotion/flumotion-${PV}.tar.bz2 \
file://python-path.patch;patch=1 \
- file://no-check-for-python-stuff.patch;patch=1"
+ file://no-check-for-python-stuff.patch;patch=1"
inherit autotools distutils-base pkgconfig
diff --git a/packages/linux/linux-handhelds-2.6/ghi270/.mtn2git_empty b/packages/fmtools/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/ghi270/.mtn2git_empty
+++ b/packages/fmtools/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/h1910/.mtn2git_empty b/packages/fmtools/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/h1910/.mtn2git_empty
+++ b/packages/fmtools/files/.mtn2git_empty
diff --git a/packages/fmtools/files/makefile.patch b/packages/fmtools/files/makefile.patch
new file mode 100644
index 0000000000..41c0086b82
--- /dev/null
+++ b/packages/fmtools/files/makefile.patch
@@ -0,0 +1,11 @@
+--- fmtools-1.0.2/Makefile 2002-08-17 06:05:09.000000000 +0200
++++ fmtools-1.0.2p/Makefile 2007-12-22 21:45:28.000000000 +0100
+@@ -1,8 +1,5 @@
+ # fmtools Makefile - just the basics for now
+
+-CC = gcc
+-CFLAGS = -Wall -O2
+-
+ INSTALL = /usr/bin/install
+
+ # Since fmtools doesn't use configure, these paths are provided here
diff --git a/packages/fmtools/fmtools_1.0.2.bb b/packages/fmtools/fmtools_1.0.2.bb
new file mode 100644
index 0000000000..a1f9fb0f39
--- /dev/null
+++ b/packages/fmtools/fmtools_1.0.2.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "fmtools - programs for Video for Linux radio cards"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://www.stanford.edu/~blp/fmtools/fmtools-1.0.2.tar.gz \
+ file://makefile.patch;patch=1"
+
+inherit autotools
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/fm ${D}${bindir}/fm
+ install -m 0755 ${S}/fmscan ${D}${bindir}/fmscan
+}
+
diff --git a/packages/linux/linux-handhelds-2.6/h2200/.mtn2git_empty b/packages/font-update-common/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/h2200/.mtn2git_empty
+++ b/packages/font-update-common/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/h3600/.mtn2git_empty b/packages/font-update-common/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/h3600/.mtn2git_empty
+++ b/packages/font-update-common/files/.mtn2git_empty
diff --git a/packages/font-update-common/files/update-fonts b/packages/font-update-common/files/update-fonts
new file mode 100644
index 0000000000..19e3157d2f
--- /dev/null
+++ b/packages/font-update-common/files/update-fonts
@@ -0,0 +1,4 @@
+#!/bin/sh
+#Author: Rolf Leggewie
+
+run-parts /etc/update-fonts-common.d/
diff --git a/packages/font-update-common/font-update-common_0.1.bb b/packages/font-update-common/font-update-common_0.1.bb
new file mode 100644
index 0000000000..eae0a8a55f
--- /dev/null
+++ b/packages/font-update-common/font-update-common_0.1.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Scripts to be called when fonts are installed or removed \
+to make them known to the WM, whether X11 or Opie"
+AUTHOR = "Rolf Leggewie <oe-devel@rolf.leggewie.biz"
+
+SRC_URI = "file://update-fonts"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -d ${D}${sysconfdir}/update-fonts-common.d/
+ install -m 0755 ${WORKDIR}/update-fonts ${D}${bindir}
+}
+
+PACKAGE_ARCH = "all"
diff --git a/packages/fontconfig/files/01fc-cache b/packages/fontconfig/files/01fc-cache
new file mode 100644
index 0000000000..963aaec8ca
--- /dev/null
+++ b/packages/fontconfig/files/01fc-cache
@@ -0,0 +1,4 @@
+#!/bin/sh
+# Author: Rolf Leggewie
+
+fc-cache
diff --git a/packages/fontconfig/fontconfig.inc b/packages/fontconfig/fontconfig.inc
new file mode 100644
index 0000000000..252b843340
--- /dev/null
+++ b/packages/fontconfig/fontconfig.inc
@@ -0,0 +1,42 @@
+DESCRIPTION = "A library for configuring and customizing font access."
+SECTION = "libs"
+LICENSE = "BSD"
+DEPENDS = "expat freetype freetype-native zlib"
+
+# Work around past breakage in debian.bbclass
+RPROVIDES_fontconfig-utils = "libfontconfig-utils"
+RREPLACES_fontconfig-utils = "libfontconfig-utils"
+RCONFLICTS_fontconfig-utils = "libfontconfig-utils"
+DEBIAN_NOAUTONAME_fontconfig-utils = "1"
+
+SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz \
+ file://01fc-cache"
+
+S = "${WORKDIR}/fontconfig-${PV}"
+
+inherit autotools pkgconfig
+
+export HASDOCBOOK="no"
+
+EXTRA_OECONF = " --disable-docs"
+EXTRA_OEMAKE = "FC_LANG=fc-lang FC_GLYPHNAME=fc-glyphname"
+
+# The tarball has some of the patched files as read only, which
+# patch doesn't like at all
+
+fontconfig_do_unpack() {
+ chmod -R u+rw ${S}
+}
+
+python do_unpack () {
+ bb.build.exec_func('base_do_unpack', d)
+ bb.build.exec_func('fontconfig_do_unpack', d)
+}
+
+fontconfig-utils_do_install_prepend() {
+ install -m 0755 ${WORKDIR}/01fc-cache ${D}${sysconfdir}/update-fonts-common.d/
+}
+
+PACKAGES =+ "fontconfig-utils-dbg fontconfig-utils "
+FILES_fontconfig-utils-dbg += "${bindir}/*.dbg"
+FILES_fontconfig-utils = "${bindir}/*"
diff --git a/packages/fontconfig/fontconfig_2.2.95.bb b/packages/fontconfig/fontconfig_2.2.95.bb
index e1cc319f16..d1aab24951 100644
--- a/packages/fontconfig/fontconfig_2.2.95.bb
+++ b/packages/fontconfig/fontconfig_2.2.95.bb
@@ -1,45 +1,12 @@
-SECTION = "libs"
-LICENSE = "BSD"
-DESCRIPTION = "A library for configuring and customizing font access."
-DEPENDS = "expat freetype freetype-native zlib fontconfig-native"
+require fontconfig.inc
-SRC_URI = "http://freedesktop.org/fontconfig/release/fontconfig-${PV}.tar.gz \
- file://fc-glyphname.patch;patch=1 \
+DEPENDS += "fontconfig-native"
+
+SRC_URI += "file://fc-glyphname.patch;patch=1 \
file://fc-lang.patch;patch=1 \
file://local.conf"
PR = "r8"
-PACKAGES =+ "fontconfig-utils-dbg fontconfig-utils "
-FILES_fontconfig-utils-dbg = "${bindir}/*.dbg"
-FILES_fontconfig-utils = "${bindir}/*"
-
-# Work around past breakage in debian.bbclass
-RPROVIDES_fontconfig-utils = "libfontconfig-utils"
-RREPLACES_fontconfig-utils = "libfontconfig-utils"
-RCONFLICTS_fontconfig-utils = "libfontconfig-utils"
-DEBIAN_NOAUTONAME_fontconfig-utils = "1"
-
-S = "${WORKDIR}/fontconfig-${PV}"
-
-inherit autotools pkgconfig
-
-export HASDOCBOOK="no"
-
-EXTRA_OECONF = " --disable-docs "
-EXTRA_OEMAKE = "FC_LANG=fc-lang FC_GLYPHNAME=fc-glyphname"
-
-# The tarball has some of the patched files as read only, which
-# patch doesn't like at all
-
-fontconfig_do_unpack() {
- chmod -R u+rw ${S}
-}
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('fontconfig_do_unpack', d)
-}
-
do_stage () {
oe_libinstall -so -a -C src libfontconfig ${STAGING_LIBDIR}
install -d ${STAGING_INCDIR}/fontconfig
diff --git a/packages/fontconfig/fontconfig_2.3.91.bb b/packages/fontconfig/fontconfig_2.3.91.bb
index 220f11d1c9..ec6ef8e037 100644
--- a/packages/fontconfig/fontconfig_2.3.91.bb
+++ b/packages/fontconfig/fontconfig_2.3.91.bb
@@ -1,47 +1,14 @@
-SECTION = "libs"
-LICENSE = "BSD"
-DESCRIPTION = "A library for configuring and customizing font access."
-DEPENDS = "expat freetype freetype-native zlib fontconfig-native"
+require fontconfig.inc
-SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz \
- file://fc-glyphname.patch;patch=1 \
+DEPENDS += "fontconfig-native"
+
+SRC_URI += "file://fc-glyphname.patch;patch=1 \
file://fc-lang.patch;patch=1 \
file://one-j-too-many.patch;patch=1 \
file://local.conf"
PR = "r3"
-PACKAGES =+ "fontconfig-utils-dbg fontconfig-utils "
-FILES_fontconfig-utils-dbg = "${bindir}/*.dbg"
-FILES_fontconfig-utils = "${bindir}/*"
-
-# Work around past breakage in debian.bbclass
-RPROVIDES_fontconfig-utils = "libfontconfig-utils"
-RREPLACES_fontconfig-utils = "libfontconfig-utils"
-RCONFLICTS_fontconfig-utils = "libfontconfig-utils"
-DEBIAN_NOAUTONAME_fontconfig-utils = "1"
-
-S = "${WORKDIR}/fontconfig-${PV}"
-
-inherit autotools pkgconfig
-
-export HASDOCBOOK="no"
-
-EXTRA_OECONF = " --disable-docs "
-EXTRA_OEMAKE = "FC_LANG=fc-lang FC_GLYPHNAME=fc-glyphname"
-
-# The tarball has some of the patched files as read only, which
-# patch doesn't like at all
-
-fontconfig_do_unpack() {
- chmod -R u+rw ${S}
-}
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('fontconfig_do_unpack', d)
-}
-
do_stage () {
oe_libinstall -so -a -C src libfontconfig ${STAGING_LIBDIR}
install -d ${STAGING_INCDIR}/fontconfig
diff --git a/packages/fontconfig/fontconfig_2.3.95.bb b/packages/fontconfig/fontconfig_2.3.95.bb
index adbd0ad558..035f8467ed 100644
--- a/packages/fontconfig/fontconfig_2.3.95.bb
+++ b/packages/fontconfig/fontconfig_2.3.95.bb
@@ -1,44 +1,9 @@
-SECTION = "libs"
-LICENSE = "BSD"
-DESCRIPTION = "A library for configuring and customizing font access."
-DEPENDS = "expat freetype freetype-native zlib"
+require fontconfig.inc
-SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz \
- file://one-j-too-many.patch;patch=1"
+SRC_URI += "file://one-j-too-many.patch;patch=1"
PR = "r2"
-PACKAGES =+ "fontconfig-utils-dbg fontconfig-utils "
-FILES_fontconfig-utils-dbg = "${bindir}/*.dbg"
-FILES_fontconfig-utils = "${bindir}/*"
-
-# Work around past breakage in debian.bbclass
-RPROVIDES_fontconfig-utils = "libfontconfig-utils"
-RREPLACES_fontconfig-utils = "libfontconfig-utils"
-RCONFLICTS_fontconfig-utils = "libfontconfig-utils"
-DEBIAN_NOAUTONAME_fontconfig-utils = "1"
-
-S = "${WORKDIR}/fontconfig-${PV}"
-
-inherit autotools pkgconfig
-
-export HASDOCBOOK="no"
-
-EXTRA_OECONF = " --disable-docs "
-EXTRA_OEMAKE = "FC_LANG=fc-lang FC_GLYPHNAME=fc-glyphname"
-
-# The tarball has some of the patched files as read only, which
-# patch doesn't like at all
-
-fontconfig_do_unpack() {
- chmod -R u+rw ${S}
-}
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('fontconfig_do_unpack', d)
-}
-
do_stage () {
oe_libinstall -so -a -C src libfontconfig ${STAGING_LIBDIR}
install -d ${STAGING_INCDIR}/fontconfig
diff --git a/packages/fontconfig/fontconfig_2.4.1.bb b/packages/fontconfig/fontconfig_2.4.1.bb
index cc64f9ec4c..0e6e008f42 100644
--- a/packages/fontconfig/fontconfig_2.4.1.bb
+++ b/packages/fontconfig/fontconfig_2.4.1.bb
@@ -1,42 +1,10 @@
-SECTION = "libs"
-LICENSE = "BSD"
-DESCRIPTION = "A library for configuring and customizing font access."
-DEPENDS = "expat freetype freetype-native zlib"
+require fontconfig.inc
-SRC_URI = "http://fontconfig.org/release/fontconfig-${PV}.tar.gz \
- https://stage.maemo.org/svn/maemo/projects/haf/trunk/fontconfig/device_symbols.h"
PR = "r2"
-PACKAGES =+ "fontconfig-utils-dbg fontconfig-utils "
-FILES_fontconfig-utils-dbg = "${bindir}/*.dbg"
-FILES_fontconfig-utils = "${bindir}/*"
+SRC_URI += "https://stage.maemo.org/svn/maemo/projects/haf/trunk/fontconfig/device_symbols.h"
-# Work around past breakage in debian.bbclass
-RPROVIDES_fontconfig-utils = "libfontconfig-utils"
-RREPLACES_fontconfig-utils = "libfontconfig-utils"
-RCONFLICTS_fontconfig-utils = "libfontconfig-utils"
-DEBIAN_NOAUTONAME_fontconfig-utils = "1"
-
-S = "${WORKDIR}/fontconfig-${PV}"
-
-inherit autotools pkgconfig
-
-export HASDOCBOOK="no"
-
-EXTRA_OECONF = " --disable-docs --with-arch=${HOST_ARCH}"
-EXTRA_OEMAKE = "FC_LANG=fc-lang FC_GLYPHNAME=fc-glyphname"
-
-# The tarball has some of the patched files as read only, which
-# patch doesn't like at all
-
-fontconfig_do_unpack() {
- chmod -R u+rw ${S}
-}
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('fontconfig_do_unpack', d)
-}
+EXTRA_OECONF += " --with-arch=${HOST_ARCH}"
do_stage () {
cp ${WORKDIR}/device_symbols.h ${S}/fontconfig/
diff --git a/packages/foonas-init/foonas-init_0.10.bb b/packages/foonas-init/foonas-init_0.10.bb
index c8a1b05232..7c51606e7e 100644
--- a/packages/foonas-init/foonas-init_0.10.bb
+++ b/packages/foonas-init/foonas-init_0.10.bb
@@ -118,5 +118,4 @@ pkg_postrm_foonas-init() {
done
}
-PACKAGES = "${PN}"
FILES_${PN} = "/"
diff --git a/packages/freenote/freenote_1.12.0.bb b/packages/freenote/freenote_1.12.0.bb
index 72610c306c..e28689ebf0 100644
--- a/packages/freenote/freenote_1.12.0.bb
+++ b/packages/freenote/freenote_1.12.0.bb
@@ -15,7 +15,7 @@ inherit opie
do_configure_prepend() {
mv -f FreeNote subdir1
mv -f FreeNoteSetup subdir2
- echo -e "TEMPLATE=subdirs\nSUBDIRS=subdir1 subdir2\n" >> freenote.pro
+ printf "TEMPLATE=subdirs\nSUBDIRS=subdir1 subdir2\n" >> freenote.pro
pushd ${S}/subdir1 && rm *.pro && qmake -project && echo "TARGET=FreeNote" >> subdir1.pro && popd
pushd ${S}/subdir2 && rm *.pro && qmake -project && echo "TARGET=FreeNoteSetup" >> subdir2.pro && popd
}
diff --git a/packages/linux/linux-handhelds-2.6/h3800/.mtn2git_empty b/packages/freesmartphone/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/h3800/.mtn2git_empty
+++ b/packages/freesmartphone/.mtn2git_empty
diff --git a/packages/freesmartphone/gsm0710muxd_svn.bb b/packages/freesmartphone/gsm0710muxd_svn.bb
new file mode 100644
index 0000000000..f451f7814c
--- /dev/null
+++ b/packages/freesmartphone/gsm0710muxd_svn.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "gsm.07.10 muxer userspace daemon"
+AUTHOR = "M. Dietrich"
+SECTION = "console/network"
+DEPENDS = "intltool-native dbus"
+LICENSE = "GPL"
+PV = "0.0+svnr${SRCREV}"
+PR = "r1"
+
+SRC_URI = "svn://projects.linuxtogo.org/svn/smartphones/trunk/software;module=gsm0710muxd"
+S = "${WORKDIR}/gsm0710muxd"
+
+inherit autotools update-rc.d
+
+INITSCRIPT_NAME = "gsm0710muxd"
+INITSCRIPT_PARAMS = "defaults 35"
+
+do_install_append() {
+ chmod a+rx ${D}${sysconfdir}/init.d/gsm0710muxd
+}
+
diff --git a/packages/freesmartphone/python-fso-pyproto_svn.bb b/packages/freesmartphone/python-fso-pyproto_svn.bb
new file mode 100644
index 0000000000..9d4503d351
--- /dev/null
+++ b/packages/freesmartphone/python-fso-pyproto_svn.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "FreeSmartPhone.org Python Prototypes"
+AUTHOR = "M. Dietrich"
+SECTION = "console/network"
+RDEPENDS = "python-serial python-lang"
+LICENSE = "GPL"
+PV = "0.0+svnr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "svn://projects.linuxtogo.org/svn/smartphones/trunk/software;module=py-proto"
+S = "${WORKDIR}/py-proto"
+
+inherit distutils
+
diff --git a/packages/fstests/fstests.bb b/packages/fstests/fstests.bb
index a84237f263..027a990200 100644
--- a/packages/fstests/fstests.bb
+++ b/packages/fstests/fstests.bb
@@ -3,7 +3,9 @@ HOMEPAGE = "http://www.o-hand.com"
SECTION = "devel"
LICENSE = "GPL"
PV = "0.0+svn${SRCDATE}"
-PR = "r1"
+PR = "r2"
+
+DEPENDS = "gtk+"
inherit autotools
diff --git a/packages/ftpd-topfield/ftpd-topfield_0.7.4.bb b/packages/ftpd-topfield/ftpd-topfield_0.7.4.bb
index 75d963f6da..356a6018a2 100755
--- a/packages/ftpd-topfield/ftpd-topfield_0.7.4.bb
+++ b/packages/ftpd-topfield/ftpd-topfield_0.7.4.bb
@@ -17,7 +17,6 @@ INITSCRIPT_NAME = "ftpd-topfield"
INITSCRIPT_PARAMS = "defaults"
# Just the one package at present
-PACKAGES = "${PN}"
inherit autotools
diff --git a/packages/gaim/pidgin.inc b/packages/gaim/pidgin.inc
index 4184848daa..a2ef61a508 100644
--- a/packages/gaim/pidgin.inc
+++ b/packages/gaim/pidgin.inc
@@ -29,7 +29,7 @@ LEAD_SONAME = "libpurple.so.0"
FILES_libpurple = "${libdir}/libpurple*.so.* /usr/bin/purple-* /etc/gconf/schemas/purple*"
FILES_libpurple-dev = "${libdir}/libpurple* \
${libdir}/purple-2/*.la "
-FILES_libpurple-dbg = "${libdir}/.debug/libpurple* \
+FILES_libpurple-dbg += "${libdir}/.debug/libpurple* \
${libdir}/purple-2/.debug"
FILES_libpurple-liboscar = "${libdir}/purple-2/liboscar.so.*"
FILES_libpurple-libjabber = "${libdir}/purple-2/libjabber.so.*"
diff --git a/packages/gallery/gallery_1.5.5.bb b/packages/gallery/gallery_1.5.5.bb
index 9aba2a2f0a..5756e98567 100644
--- a/packages/gallery/gallery_1.5.5.bb
+++ b/packages/gallery/gallery_1.5.5.bb
@@ -32,7 +32,7 @@ do_compile() {
#
do_install() {
mkdir -p ${D}/${DEST_DIR} ${D}/etc/apache2/modules.d
- cp -a ${S} ${D}/${DEST_DIR}
+ cp -pPR ${S} ${D}/${DEST_DIR}
cp ${FILESDIR}/gallery.conf ${D}/etc/apache2/modules.d/95_gallery.conf
}
diff --git a/packages/gammu/gammu_1.13.0.bb b/packages/gammu/gammu_1.17.0.bb
index fc7adb1b79..fc7adb1b79 100644
--- a/packages/gammu/gammu_1.13.0.bb
+++ b/packages/gammu/gammu_1.17.0.bb
diff --git a/packages/gcc/files/gcc4-mtune-compat.patch b/packages/gcc/files/gcc4-mtune-compat.patch
new file mode 100644
index 0000000000..0da2811d37
--- /dev/null
+++ b/packages/gcc/files/gcc4-mtune-compat.patch
@@ -0,0 +1,14 @@
+Patch for gcc3 to support gcc4-compatible (and consistent) values for -mtune= option.
+
+--- gcc-3.4.4/gcc/config/arm/arm.c.org 2007-12-15 23:58:35.000000000 +0200
++++ gcc-3.4.4/gcc/config/arm/arm.c 2007-12-16 00:20:39.000000000 +0200
+@@ -432,7 +432,9 @@
+ {"arm10tdmi", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_ARCH5 },
+ {"arm1020t", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_ARCH5 },
+ {"arm926ejs", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E },
++ {"arm926ej-s", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E },
+ {"arm1026ejs", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E },
++ {"arm1026ej-s", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_ARCH5 | FL_ARCH5E },
+ {"xscale", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_STRONG | FL_ARCH5 | FL_ARCH5E | FL_XSCALE },
+ {"iwmmxt", FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB | FL_LDSCHED | FL_STRONG | FL_ARCH5 | FL_ARCH5E | FL_XSCALE | FL_IWMMXT },
+ /* V6 Architecture Processors */
diff --git a/packages/gcc/gcc-4.2.2/fortran-cross-compile-hack.patch b/packages/gcc/gcc-4.2.2/fortran-cross-compile-hack.patch
new file mode 100644
index 0000000000..b3d38ad983
--- /dev/null
+++ b/packages/gcc/gcc-4.2.2/fortran-cross-compile-hack.patch
@@ -0,0 +1,30 @@
+* Fortran would have searched for arm-angstrom-gnueabi-gfortran but would have used
+ used gfortan. For gcc_4.2.2.bb we want to use the gfortran compiler from our cross
+ directory.
+
+diff --git a/libgfortran/configure b/libgfortran/configure
+index f7d86fb..d0966ec 100755
+--- a/libgfortran/configure
++++ b/libgfortran/configure
+@@ -4475,6 +4475,6 @@ exec 5>>./config.log
+
+ # We need gfortran to compile parts of the library
+ #AC_PROG_FC(gfortran)
+-FC="$GFORTRAN"
++#FC="$GFORTRAN"
+ ac_ext=${FC_SRCEXT-f}
+ ac_compile='$FC -c $FCFLAGS $FCFLAGS_SRCEXT conftest.$ac_ext >&5'
+\ No newline at end of file
+diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac
+index 4661306..9f83e55 100644
+--- a/libgfortran/configure.ac
++++ b/libgfortran/configure.ac
+@@ -140,7 +140,7 @@ AC_SUBST(enable_static)
+
+ # We need gfortran to compile parts of the library
+ #AC_PROG_FC(gfortran)
+-FC="$GFORTRAN"
++#FC="$GFORTRAN"
+ AC_PROG_FC(gfortran)
+
+ # extra LD Flags which are required for targets
diff --git a/packages/gcc/gcc-4.2.2/fortran-static-linking.patch b/packages/gcc/gcc-4.2.2/fortran-static-linking.patch
new file mode 100644
index 0000000000..3dd6321dc3
--- /dev/null
+++ b/packages/gcc/gcc-4.2.2/fortran-static-linking.patch
@@ -0,0 +1,48 @@
+f951 (fortran) links to MPFR and GMP of our staging area but when executing
+the command the libs can not be found. Use rpath like all the other apps in
+our staging bin/ directory.
+
+Patch the configure to avoid the regeneration...
+
+Index: gcc-4.2.2/configure
+===================================================================
+--- gcc-4.2.2.orig/configure 2008-01-15 23:23:41.000000000 +0100
++++ gcc-4.2.2/configure 2008-01-15 23:25:20.000000000 +0100
+@@ -2278,14 +2278,14 @@
+
+
+ if test "x$with_mpfr" != x; then
+- gmplibs="-L$with_mpfr/lib $gmplibs"
++ gmplibs="-static -L$with_mpfr/lib $gmplibs"
+ gmpinc="-I$with_mpfr/include"
+ fi
+ if test "x$with_mpfr_include" != x; then
+ gmpinc="-I$with_mpfr_include"
+ fi
+ if test "x$with_mpfr_lib" != x; then
+- gmplibs="-L$with_mpfr_lib $gmplibs"
++ gmplibs="-static -L$with_mpfr_lib $gmplibs"
+ fi
+
+ # Specify a location for gmp
+Index: gcc-4.2.2/configure.in
+===================================================================
+--- gcc-4.2.2.orig/configure.in 2008-01-15 23:23:41.000000000 +0100
++++ gcc-4.2.2/configure.in 2008-01-15 23:24:36.000000000 +0100
+@@ -1066,14 +1066,14 @@
+ AC_ARG_WITH(mpfr_lib, [ --with-mpfr-lib=PATH Specify the directory for the installed MPFR library])
+
+ if test "x$with_mpfr" != x; then
+- gmplibs="-L$with_mpfr/lib $gmplibs"
++ gmplibs="-static -L$with_mpfr/lib $gmplibs"
+ gmpinc="-I$with_mpfr/include"
+ fi
+ if test "x$with_mpfr_include" != x; then
+ gmpinc="-I$with_mpfr_include"
+ fi
+ if test "x$with_mpfr_lib" != x; then
+- gmplibs="-L$with_mpfr_lib $gmplibs"
++ gmplibs="-static -L$with_mpfr_lib $gmplibs"
+ fi
+
+ # Specify a location for gmp
diff --git a/packages/gcc/gcc-4.2.2/gcc-4.0.2-e300c2c3.patch b/packages/gcc/gcc-4.2.2/gcc-4.0.2-e300c2c3.patch
new file mode 100644
index 0000000000..736ac4b6b6
--- /dev/null
+++ b/packages/gcc/gcc-4.2.2/gcc-4.0.2-e300c2c3.patch
@@ -0,0 +1,311 @@
+Adds support for Freescale Power architecture e300c2 and e300c3 cores.
+http://www.bitshrine.org/gpp/tc-fsl-x86lnx-e300c3-nptl-4.0.2-2.src.rpm
+
+Leon Woestenberg <leonw@mailcan.com>
+
+Index: gcc-4.1.2/gcc/config/rs6000/e300c2c3.md
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.1.2/gcc/config/rs6000/e300c2c3.md 2007-10-18 15:32:51.000000000 +0200
+@@ -0,0 +1,189 @@
++;; Pipeline description for Motorola PowerPC e300c3 core.
++;; Copyright (C) 2003 Free Software Foundation, Inc.
++;;
++;; This file is part of GCC.
++
++;; GCC is free software; you can redistribute it and/or modify it
++;; under the terms of the GNU General Public License as published
++;; by the Free Software Foundation; either version 2, or (at your
++;; option) any later version.
++
++;; GCC is distributed in the hope that it will be useful, but WITHOUT
++;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
++;; License for more details.
++
++;; You should have received a copy of the GNU General Public License
++;; along with GCC; see the file COPYING. If not, write to the
++;; Free Software Foundation, 59 Temple Place - Suite 330, Boston,
++;; MA 02111-1307, USA.
++
++(define_automaton "ppce300c3_most,ppce300c3_long,ppce300c3_retire")
++(define_cpu_unit "ppce300c3_decode_0,ppce300c3_decode_1" "ppce300c3_most")
++
++;; We don't simulate general issue queue (GIC). If we have SU insn
++;; and then SU1 insn, they can not be issued on the same cycle
++;; (although SU1 insn and then SU insn can be issued) because the SU
++;; insn will go to SU1 from GIC0 entry. Fortunately, the first cycle
++;; multipass insn scheduling will find the situation and issue the SU1
++;; insn and then the SU insn.
++(define_cpu_unit "ppce300c3_issue_0,ppce300c3_issue_1" "ppce300c3_most")
++
++;; We could describe completion buffers slots in combination with the
++;; retirement units and the order of completion but the result
++;; automaton would behave in the same way because we can not describe
++;; real latency time with taking in order completion into account.
++;; Actually we could define the real latency time by querying reserved
++;; automaton units but the current scheduler uses latency time before
++;; issuing insns and making any reservations.
++;;
++;; So our description is aimed to achieve a insn schedule in which the
++;; insns would not wait in the completion buffer.
++(define_cpu_unit "ppce300c3_retire_0,ppce300c3_retire_1" "ppce300c3_retire")
++
++;; Branch unit:
++(define_cpu_unit "ppce300c3_bu" "ppce300c3_most")
++
++;; IU:
++(define_cpu_unit "ppce300c3_iu0_stage0,ppce300c3_iu1_stage0" "ppce300c3_most")
++
++;; IU: This used to describe non-pipelined division.
++(define_cpu_unit "ppce300c3_mu_div" "ppce300c3_long")
++
++;; SRU:
++(define_cpu_unit "ppce300c3_sru_stage0" "ppce300c3_most")
++
++;; Here we simplified LSU unit description not describing the stages.
++(define_cpu_unit "ppce300c3_lsu" "ppce300c3_most")
++
++;; FPU:
++(define_cpu_unit "ppce300c3_fpu" "ppce300c3_most")
++
++;; The following units are used to make automata deterministic
++(define_cpu_unit "present_ppce300c3_decode_0" "ppce300c3_most")
++(define_cpu_unit "present_ppce300c3_issue_0" "ppce300c3_most")
++(define_cpu_unit "present_ppce300c3_retire_0" "ppce300c3_retire")
++(define_cpu_unit "present_ppce300c3_iu0_stage0" "ppce300c3_most")
++
++;; The following sets to make automata deterministic when option ndfa is used.
++(presence_set "present_ppce300c3_decode_0" "ppce300c3_decode_0")
++(presence_set "present_ppce300c3_issue_0" "ppce300c3_issue_0")
++(presence_set "present_ppce300c3_retire_0" "ppce300c3_retire_0")
++(presence_set "present_ppce300c3_iu0_stage0" "ppce300c3_iu0_stage0")
++
++;; Some useful abbreviations.
++(define_reservation "ppce300c3_decode"
++ "ppce300c3_decode_0|ppce300c3_decode_1+present_ppce300c3_decode_0")
++(define_reservation "ppce300c3_issue"
++ "ppce300c3_issue_0|ppce300c3_issue_1+present_ppce300c3_issue_0")
++(define_reservation "ppce300c3_retire"
++ "ppce300c3_retire_0|ppce300c3_retire_1+present_ppce300c3_retire_0")
++(define_reservation "ppce300c3_iu_stage0"
++ "ppce300c3_iu0_stage0|ppce300c3_iu1_stage0+present_ppce300c3_iu0_stage0")
++
++;; Compares can be executed either one of the IU or SRU
++(define_insn_reservation "ppce300c3_cmp" 1
++ (and (eq_attr "type" "cmp,compare,delayed_compare,fast_compare")
++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++ "ppce300c3_decode,ppce300c3_issue+(ppce300c3_iu_stage0|ppce300c3_sru_stage0) \
++ +ppce300c3_retire")
++
++;; Other one cycle IU insns
++(define_insn_reservation "ppce300c3_iu" 1
++ (and (eq_attr "type" "integer,insert_word")
++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_retire")
++
++;; Branch. Actually this latency time is not used by the scheduler.
++(define_insn_reservation "ppce300c3_branch" 1
++ (and (eq_attr "type" "jmpreg,branch")
++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++ "ppce300c3_decode,ppce300c3_bu,ppce300c3_retire")
++
++;; Multiply is non-pipelined but can be executed in any IU
++(define_insn_reservation "ppce300c3_multiply" 2
++ (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0, \
++ ppce300c3_iu_stage0+ppce300c3_retire")
++
++;; Divide. We use the average latency time here. We omit reserving a
++;; retire unit because of the result automata will be huge.
++(define_insn_reservation "ppce300c3_divide" 20
++ (and (eq_attr "type" "idiv")
++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_iu_stage0+ppce300c3_mu_div,\
++ ppce300c3_mu_div*19")
++
++;; CR logical
++(define_insn_reservation "ppce300c3_cr_logical" 1
++ (and (eq_attr "type" "cr_logical,delayed_cr")
++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
++
++;; Mfcr
++(define_insn_reservation "ppce300c3_mfcr" 1
++ (and (eq_attr "type" "mfcr")
++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
++
++;; Mtcrf
++(define_insn_reservation "ppce300c3_mtcrf" 1
++ (and (eq_attr "type" "mtcr")
++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
++
++;; Mtjmpr
++(define_insn_reservation "ppce300c3_mtjmpr" 1
++ (and (eq_attr "type" "mtjmpr,mfjmpr")
++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_sru_stage0+ppce300c3_retire")
++
++;; Float point instructions
++(define_insn_reservation "ppce300c3_fpcompare" 3
++ (and (eq_attr "type" "fpcompare")
++ (eq_attr "cpu" "ppce300c3"))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire")
++
++(define_insn_reservation "ppce300c3_fp" 3
++ (and (eq_attr "type" "fp")
++ (eq_attr "cpu" "ppce300c3"))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,nothing,ppce300c3_retire")
++
++(define_insn_reservation "ppce300c3_dmul" 4
++ (and (eq_attr "type" "dmul")
++ (eq_attr "cpu" "ppce300c3"))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu,nothing,ppce300c3_retire")
++
++; Divides are not pipelined
++(define_insn_reservation "ppce300c3_sdiv" 18
++ (and (eq_attr "type" "sdiv")
++ (eq_attr "cpu" "ppce300c3"))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*17")
++
++(define_insn_reservation "ppce300c3_ddiv" 33
++ (and (eq_attr "type" "ddiv")
++ (eq_attr "cpu" "ppce300c3"))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_fpu,ppce300c3_fpu*32")
++
++;; Loads
++(define_insn_reservation "ppce300c3_load" 2
++ (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u")
++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
++
++(define_insn_reservation "ppce300c3_fpload" 2
++ (and (eq_attr "type" "fpload,fpload_ux,fpload_u")
++ (eq_attr "cpu" "ppce300c3"))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
++
++;; Stores.
++(define_insn_reservation "ppce300c3_store" 2
++ (and (eq_attr "type" "store,store_ux,store_u")
++ (ior (eq_attr "cpu" "ppce300c2") (eq_attr "cpu" "ppce300c3")))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
++
++(define_insn_reservation "ppce300c3_fpstore" 2
++ (and (eq_attr "type" "fpstore,fpstore_ux,fpstore_u")
++ (eq_attr "cpu" "ppce300c3"))
++ "ppce300c3_decode,ppce300c3_issue+ppce300c3_lsu,ppce300c3_retire")
+Index: gcc-4.1.2/gcc/config/rs6000/rs6000.c
+===================================================================
+--- gcc-4.1.2.orig/gcc/config/rs6000/rs6000.c 2006-12-16 20:24:56.000000000 +0100
++++ gcc-4.1.2/gcc/config/rs6000/rs6000.c 2007-10-18 15:34:26.000000000 +0200
+@@ -557,6 +557,21 @@
+ COSTS_N_INSNS (29), /* ddiv */
+ };
+
++/* Instruction costs on E300C2 and E300C3 cores. */
++static const
++struct processor_costs ppce300c2c3_cost = {
++ COSTS_N_INSNS (4), /* mulsi */
++ COSTS_N_INSNS (4), /* mulsi_const */
++ COSTS_N_INSNS (4), /* mulsi_const9 */
++ COSTS_N_INSNS (4), /* muldi */
++ COSTS_N_INSNS (19), /* divsi */
++ COSTS_N_INSNS (19), /* divdi */
++ COSTS_N_INSNS (3), /* fp */
++ COSTS_N_INSNS (4), /* dmul */
++ COSTS_N_INSNS (18), /* sdiv */
++ COSTS_N_INSNS (33), /* ddiv */
++};
++
+ /* Instruction costs on POWER4 and POWER5 processors. */
+ static const
+ struct processor_costs power4_cost = {
+@@ -1140,6 +1155,8 @@
+ /* 8548 has a dummy entry for now. */
+ {"8548", PROCESSOR_PPC8540,
+ POWERPC_BASE_MASK | MASK_PPC_GFXOPT | MASK_STRICT_ALIGN},
++ {"e300c2", PROCESSOR_PPCE300C2, POWERPC_BASE_MASK | MASK_SOFT_FLOAT},
++ {"e300c3", PROCESSOR_PPCE300C3, POWERPC_BASE_MASK},
+ {"860", PROCESSOR_MPCCORE, POWERPC_BASE_MASK | MASK_SOFT_FLOAT},
+ {"970", PROCESSOR_POWER4,
+ POWERPC_7400_MASK | MASK_PPC_GPOPT | MASK_MFCRF | MASK_POWERPC64},
+@@ -1529,6 +1546,11 @@
+ rs6000_cost = &ppc8540_cost;
+ break;
+
++ case PROCESSOR_PPCE300C2:
++ case PROCESSOR_PPCE300C3:
++ rs6000_cost = &ppce300c2c3_cost;
++ break;
++
+ case PROCESSOR_POWER4:
+ case PROCESSOR_POWER5:
+ rs6000_cost = &power4_cost;
+@@ -16647,6 +16669,8 @@
+ case CPU_PPC750:
+ case CPU_PPC7400:
+ case CPU_PPC8540:
++ case CPU_PPCE300C2:
++ case CPU_PPCE300C3:
+ return 2;
+ case CPU_RIOS2:
+ case CPU_PPC604:
+Index: gcc-4.1.2/gcc/config/rs6000/rs6000.h
+===================================================================
+--- gcc-4.1.2.orig/gcc/config/rs6000/rs6000.h 2006-11-18 01:25:49.000000000 +0100
++++ gcc-4.1.2/gcc/config/rs6000/rs6000.h 2007-10-18 15:32:51.000000000 +0200
+@@ -111,6 +111,8 @@
+ %{mcpu=970: -mpower4 -maltivec} \
+ %{mcpu=G5: -mpower4 -maltivec} \
+ %{mcpu=8540: -me500} \
++%{mcpu=e300c2: -mppc} \
++%{mcpu=e300c3: -mppc -mpmr} \
+ %{maltivec: -maltivec} \
+ -many"
+
+@@ -211,6 +213,8 @@
+ PROCESSOR_PPC7400,
+ PROCESSOR_PPC7450,
+ PROCESSOR_PPC8540,
++ PROCESSOR_PPCE300C2,
++ PROCESSOR_PPCE300C3,
+ PROCESSOR_POWER4,
+ PROCESSOR_POWER5
+ };
+Index: gcc-4.1.2/gcc/config/rs6000/rs6000.md
+===================================================================
+--- gcc-4.1.2.orig/gcc/config/rs6000/rs6000.md 2006-12-16 20:24:56.000000000 +0100
++++ gcc-4.1.2/gcc/config/rs6000/rs6000.md 2007-10-18 15:32:51.000000000 +0200
+@@ -103,7 +103,7 @@
+ ;; Processor type -- this attribute must exactly match the processor_type
+ ;; enumeration in rs6000.h.
+
+-(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,power4,power5"
++(define_attr "cpu" "rios1,rios2,rs64a,mpccore,ppc403,ppc405,ppc440,ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,ppc750,ppc7400,ppc7450,ppc8540,ppce300c2,ppce300c3,power4,power5"
+ (const (symbol_ref "rs6000_cpu_attr")))
+
+ (automata_option "ndfa")
+@@ -119,6 +119,7 @@
+ (include "7xx.md")
+ (include "7450.md")
+ (include "8540.md")
++(include "e300c2c3.md")
+ (include "power4.md")
+ (include "power5.md")
+
+Index: gcc-4.1.2/gcc/config.gcc
+===================================================================
+--- gcc-4.1.2.orig/gcc/config.gcc 2007-10-18 15:26:23.000000000 +0200
++++ gcc-4.1.2/gcc/config.gcc 2007-10-18 15:32:51.000000000 +0200
+@@ -2710,7 +2710,7 @@
+ | rios | rios1 | rios2 | rsc | rsc1 | rs64a \
+ | 401 | 403 | 405 | 405fp | 440 | 440fp | 505 \
+ | 601 | 602 | 603 | 603e | ec603e | 604 \
+- | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 \
++ | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 | e300c[23] \
+ | 854[08] | 801 | 821 | 823 | 860 | 970 | G3 | G4 | G5)
+ # OK
+ ;;
diff --git a/packages/gcc/gcc-cross-kernel-3.3.4_3.3.4.bb b/packages/gcc/gcc-cross-kernel-3.3.4_3.3.4.bb
index 7f274bee30..ba89452187 100644
--- a/packages/gcc/gcc-cross-kernel-3.3.4_3.3.4.bb
+++ b/packages/gcc/gcc-cross-kernel-3.3.4_3.3.4.bb
@@ -12,6 +12,6 @@ do_install () {
do_stage () {
cd gcc
- oe_runmake install-common install-headers install-libgcc
+ oe_runmake install-libgcc install-common install-headers
install -m 0755 xgcc ${CROSS_DIR}/bin/${TARGET_PREFIX}gcc-${PV}
}
diff --git a/packages/gcc/gcc-cross-sdk_3.4.4.bb b/packages/gcc/gcc-cross-sdk_3.4.4.bb
index a8e9a67a96..038d39040b 100644
--- a/packages/gcc/gcc-cross-sdk_3.4.4.bb
+++ b/packages/gcc/gcc-cross-sdk_3.4.4.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://www.gnu.org/software/gcc/"
SECTION = "devel"
LICENSE = "GPL"
require gcc_${PV}.bb
-PR = "r1"
+PR = "r2"
inherit sdk
diff --git a/packages/gcc/gcc-cross-sdk_4.2.2.bb b/packages/gcc/gcc-cross-sdk_4.2.2.bb
new file mode 100644
index 0000000000..2fdaa7dc27
--- /dev/null
+++ b/packages/gcc/gcc-cross-sdk_4.2.2.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "The GNU cc and gcc C compilers."
+HOMEPAGE = "http://www.gnu.org/software/gcc/"
+SECTION = "devel"
+LICENSE = "GPL"
+PR = "r2"
+
+inherit sdk
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}"
+
+PACKAGES = "${PN}"
+
+require gcc_${PV}.bb
+require gcc4-build-sdk.inc
+require gcc-package-sdk.inc
+
+DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native"
+
+EXTRA_OECONF += "--disable-libunwind-exceptions --disable-libssp \
+ --disable-libgomp --disable-libmudflap \
+ --with-mpfr=${STAGING_DIR_NATIVE}${layout_exec_prefix}"
diff --git a/packages/gcc/gcc-cross_3.4.4.bb b/packages/gcc/gcc-cross_3.4.4.bb
index 7021b0fdd3..83c0055017 100644
--- a/packages/gcc/gcc-cross_3.4.4.bb
+++ b/packages/gcc/gcc-cross_3.4.4.bb
@@ -5,7 +5,7 @@ inherit cross
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}"
# NOTE: split PR. If the main .oe changes something that affects its *build*
# remember to increment this one too.
-PR = "r6"
+PR = "r7"
DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc"
PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++"
diff --git a/packages/gcc/gcc-cross_4.1.2.bb b/packages/gcc/gcc-cross_4.1.2.bb
index 0f63487f2c..306cf9539c 100644
--- a/packages/gcc/gcc-cross_4.1.2.bb
+++ b/packages/gcc/gcc-cross_4.1.2.bb
@@ -17,4 +17,6 @@ require gcc-package-cross.inc
SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 "
+EXTRA_OECONF_append_avr32= " --disable-libmudflap "
+
EXTRA_OECONF += "--disable-libunwind-exceptions --with-mpfr=${STAGING_DIR_NATIVE}${layout_exec_prefix}"
diff --git a/packages/gcc/gcc-cross_4.2.2.bb b/packages/gcc/gcc-cross_4.2.2.bb
index ec169072af..daf0e65003 100644
--- a/packages/gcc/gcc-cross_4.2.2.bb
+++ b/packages/gcc/gcc-cross_4.2.2.bb
@@ -5,7 +5,7 @@ inherit cross
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}"
# NOTE: split PR. If the main .oe changes something that affects its *build*
# remember to increment this one too.
-PR = "r2"
+PR = "r3"
DEPENDS = "virtual/${TARGET_PREFIX}binutils virtual/${TARGET_PREFIX}libc-for-gcc gmp-native mpfr-native"
PROVIDES = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++"
diff --git a/packages/gcc/gcc-native.inc b/packages/gcc/gcc-native.inc
new file mode 100644
index 0000000000..3cf20a4589
--- /dev/null
+++ b/packages/gcc/gcc-native.inc
@@ -0,0 +1,28 @@
+DEPENDS = ""
+PACKAGES = ""
+PROVIDES = "gcc-native-${PV}"
+
+inherit native
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/gcc-${PV}"
+
+# This is intended to be a -very- basic config
+EXTRA_OECONF = "--with-local-prefix=${STAGING_DIR_TARGET}${layout_prefix} \
+ --with-newlib \
+ --disable-shared \
+ --disable-threads \
+ --disable-multilib \
+ --disable-__cxa_atexit \
+ --enable-languages=c \
+ --enable-target-optspace \
+ --program-prefix=${TARGET_PREFIX}"
+
+do_install () {
+ :
+}
+
+do_stage () {
+ cd gcc
+ oe_runmake install-common install-headers install-libgcc
+ install -m 0755 xgcc ${STAGING_BINDIR}/gcc-${PV}
+}
diff --git a/packages/gcc/gcc-native_3.4.4.bb b/packages/gcc/gcc-native_3.4.4.bb
new file mode 100644
index 0000000000..d70a4f5464
--- /dev/null
+++ b/packages/gcc/gcc-native_3.4.4.bb
@@ -0,0 +1,3 @@
+require gcc_${PV}.bb
+require gcc-native.inc
+PROVIDES += "gcc3-native"
diff --git a/packages/gcc/gcc-package-cross.inc b/packages/gcc/gcc-package-cross.inc
index 5c6b370d82..51a45cd633 100644
--- a/packages/gcc/gcc-package-cross.inc
+++ b/packages/gcc/gcc-package-cross.inc
@@ -43,12 +43,12 @@ do_install () {
# Already in the right location
:
elif [ -f ${D}${prefix}/lib/libgcc_s.so.? ]; then
- mv -f ${D}${prefix}/lib/libgcc_s.so* ${D}${target_base_libdir}
+ mv -f ${D}${prefix}/lib/libgcc_s.so* ${D}${target_base_libdir} || true
elif [ -f ${D}${prefix}/*/lib/nof/libgcc_s.so.? ]; then
mv -f ${D}${prefix}/*/lib/nof/libgcc_s.so* ${D}${target_base_libdir}
else
- mv -f ${D}${prefix}/*/lib/libgcc_s.so* ${D}${target_base_libdir}
+ mv -f ${D}${prefix}/*/lib/libgcc_s.so* ${D}${target_base_libdir} || true
fi
@@ -58,12 +58,12 @@ do_install () {
if [ -f ${D}${prefix}/*/lib/nof/libstdc++.so ]; then
- mv -f ${D}${prefix}/*/lib/nof/libstdc++.so* ${D}${target_libdir}
+ mv -f ${D}${prefix}/*/lib/nof/libstdc++.so* ${D}${target_libdir} || true
mv -f ${D}${prefix}/*/lib/nof/libg2c.so* ${D}${target_libdir} || true
mv -f ${D}${prefix}/*/lib/nof/libgfortran*.so* ${D}${target_libdir} || true
else
- mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir}
+ mv -f ${D}${prefix}/*/lib/libstdc++.so* ${D}${target_libdir} || true
mv -f ${D}${prefix}/*/lib/libg2c.so* ${D}${target_libdir} || true
mv -f ${D}${prefix}/*/lib/libgfortran*.so* ${D}${target_libdir} || true
fi
@@ -75,7 +75,7 @@ do_install () {
if [ "x${OLD_INHIBIT_PACKAGE_STRIP}" != "x1" ]; then
${TARGET_PREFIX}strip ${D}${target_libdir}/libstdc++.so.*
${TARGET_PREFIX}strip ${D}${target_libdir}/libg2c.so.* || true
- ${TARGET_PREFIX}strip ${D}${target_base_libdir}/libgcc_s.so.*
+ ${TARGET_PREFIX}strip ${D}${target_base_libdir}/libgcc_s.so.* || true
${TARGET_PREFIX}strip ${D}${target_libdir}/libgfortran*.so* || true
fi
diff --git a/packages/gcc/gcc-package.inc b/packages/gcc/gcc-package.inc
index 96f1604997..d1b4607de5 100644
--- a/packages/gcc/gcc-package.inc
+++ b/packages/gcc/gcc-package.inc
@@ -92,7 +92,11 @@ do_install () {
# Move libgcc_s into /lib
mkdir -p ${D}${base_libdir}
- mv ${D}${libdir}/libgcc_s.so.* ${D}${base_libdir}
+ if [ -f ${D}${libdir}/nof/libgcc_s.so ]; then
+ mv ${D}${libdir}/nof/libgcc_s.so.* ${D}${base_libdir}
+ else
+ mv ${D}${libdir}/libgcc_s.so.* ${D}${base_libdir}
+ fi
rm -f ${D}${libdir}/libgcc_s.so
ln -sf `echo ${libdir}/gcc/${TARGET_SYS}/${BINV} \
| tr -s / \
diff --git a/packages/gcc/gcc_3.4.4.bb b/packages/gcc/gcc_3.4.4.bb
index e9e073b1ae..4694d3ac5e 100644
--- a/packages/gcc/gcc_3.4.4.bb
+++ b/packages/gcc/gcc_3.4.4.bb
@@ -1,4 +1,4 @@
-PR = "r6"
+PR = "r7"
DESCRIPTION = "The GNU cc and gcc C compilers."
HOMEPAGE = "http://www.gnu.org/software/gcc/"
SECTION = "devel"
@@ -23,7 +23,8 @@ SRC_URI = "${GNU_MIRROR}/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \
file://15342.patch;patch=1 \
file://always-fixincperm.patch;patch=1 \
file://GCOV_PREFIX_STRIP-cross-profile_3.4.patch;patch=1 \
- file://zecke-xgcc-cpp.patch;patch=1 "
+ file://zecke-xgcc-cpp.patch;patch=1 \
+ file://gcc4-mtune-compat.patch;patch=1"
SRC_URI += "file://gcc34-configure.in.patch;patch=1"
SRC_URI += "file://gcc34-thumb-support.patch;patch=1"
diff --git a/packages/gcc/gcc_4.1.2.bb b/packages/gcc/gcc_4.1.2.bb
index e0801d3c7f..b3eb0100e8 100644
--- a/packages/gcc/gcc_4.1.2.bb
+++ b/packages/gcc/gcc_4.1.2.bb
@@ -39,6 +39,25 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.1.2/gcc-4.1.2.tar.bz2 \
SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 "
+SRC_URI_avr32 = "http://www.angstrom-distribution.org/unstable/sources/gcc-4.1.2-atmel.1.1.0.tar.gz \
+# file://100-uclibc-conf.patch;patch=1 \
+# file://200-uclibc-locale.patch;patch=1 \
+# file://300-libstdc++-pic.patch;patch=1 \
+ file://301-missing-execinfo_h.patch;patch=1 \
+ file://302-c99-snprintf.patch;patch=1 \
+ file://303-c99-complex-ugly-hack.patch;patch=1 \
+ file://304-index_macro.patch;patch=1 \
+ file://602-sdk-libstdc++-includes.patch;patch=1 \
+ file://gcc41-configure.in.patch;patch=1 \
+ file://ldflags.patch;patch=1 \
+ file://zecke-xgcc-cpp.patch;patch=1 \
+ file://cache-amnesia.patch;patch=1 \
+ "
+
+do_compile_prepend_avr32() {
+ ln -sf ${S}/libstdc++-v3/config/os/uclibc/ ${S}/libstdc++-v3/config/os/uclibc-linux
+}
+
#Set the fortran bits
# ',fortran' or '', not 'f77' like gcc3 had
FORTRAN = ""
diff --git a/packages/gcc/gcc_4.2.1.bb b/packages/gcc/gcc_4.2.1.bb
index 5d049398e4..688ccdaeb8 100644
--- a/packages/gcc/gcc_4.2.1.bb
+++ b/packages/gcc/gcc_4.2.1.bb
@@ -42,6 +42,32 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \
file://pr34130.patch;patch=1 \
"
+SRC_URI_avr32 = " http://ewi546.ewi.utwente.nl/tmp/avr32-gcc-4.2.1-atmel.1.0.1.tar.gz \
+ file://100-uclibc-conf.patch;patch=1 \
+ file://103-uclibc-conf-noupstream.patch;patch=1 \
+ file://200-uclibc-locale.patch;patch=1 \
+ file://203-uclibc-locale-no__x.patch;patch=1 \
+ file://204-uclibc-locale-wchar_fix.patch;patch=1 \
+ file://205-uclibc-locale-update.patch;patch=1 \
+ file://300-libstdc++-pic.patch;patch=1 \
+ file://301-missing-execinfo_h.patch;patch=1 \
+ file://302-c99-snprintf.patch;patch=1 \
+ file://303-c99-complex-ugly-hack.patch;patch=1 \
+ file://304-index_macro.patch;patch=1 \
+ file://305-libmudflap-susv3-legacy.patch;patch=1 \
+ file://306-libstdc++-namespace.patch;patch=1 \
+ file://307-locale_facets.patch;patch=1 \
+ file://402-libbackend_dep_gcov-iov.h.patch;patch=1 \
+ file://602-sdk-libstdc++-includes.patch;patch=1 \
+ file://740-sh-pr24836.patch;patch=1 \
+ file://904-flatten-switch-stmt-00.patch;patch=1 \
+ file://gcc41-configure.in.patch;patch=1 \
+ file://ldflags.patch;patch=1 \
+ file://zecke-xgcc-cpp.patch;patch=1 \
+ file://cache-amnesia.patch;patch=1 \
+ file://gfortran.patch;patch=1 \
+"
+
SRC_URI_append_ep93xx = " \
file://arm-crunch-saveregs.patch;patch=1 \
file://arm-crunch-20000320.patch;patch=1 \
@@ -80,5 +106,5 @@ require gcc3-build.inc
ARCH_FLAGS_FOR_TARGET=-isystem${STAGING_INCDIR}
-EXTRA_OECONF += " --disable-libssp --disable-bootstrap "
+EXTRA_OECONF += " --disable-libgomp --disable-libssp --disable-bootstrap "
diff --git a/packages/gcc/gcc_4.2.2.bb b/packages/gcc/gcc_4.2.2.bb
index de3b65ce7f..15a25c9c6a 100644
--- a/packages/gcc/gcc_4.2.2.bb
+++ b/packages/gcc/gcc_4.2.2.bb
@@ -1,4 +1,4 @@
-PR = "r2"
+PR = "r3"
DESCRIPTION = "The GNU cc and gcc C compilers."
HOMEPAGE = "http://www.gnu.org/software/gcc/"
SECTION = "devel"
@@ -39,7 +39,9 @@ SRC_URI = "ftp://ftp.gnu.org/pub/gnu/gcc/gcc-${PV}/gcc-${PV}.tar.bz2 \
file://fix-ICE-in-arm_unwind_emit_set.diff;patch=1 \
file://cache-amnesia.patch;patch=1 \
file://gfortran.patch;patch=1 \
+ file://gcc-4.0.2-e300c2c3.patch;patch=1 \
file://pr34130.patch;patch=1 \
+ file://fortran-static-linking.patch;patch=1 \
"
SRC_URI_append_ep93xx = " \
@@ -71,6 +73,8 @@ SRC_URI_append_sh3 = " file://sh3-installfix-fixheaders.patch;patch=1 "
FORTRAN = ""
FORTRAN_linux-gnueabi = ",fortran"
+DEPENDS += " gmp mpfr "
+
#Set the java bits
JAVA = ""
JAVA_arm = ""
@@ -82,3 +86,9 @@ ARCH_FLAGS_FOR_TARGET=-isystem${STAGING_INCDIR}
EXTRA_OECONF += " --disable-libssp --disable-bootstrap "
+# We know some one is including us, but we only want to apply this fortran hack for the real gcc
+python __anonymous () {
+ import bb
+ if bb.data.getVar('PN', d, True) == "gcc":
+ bb.data.setVar('SRC_URI_append', ' file://fortran-cross-compile-hack.patch;patch=1', d)
+}
diff --git a/packages/gettext/gettext_0.14.1.bb b/packages/gettext/gettext_0.14.1.bb
index 960db30b56..2184b8c863 100644
--- a/packages/gettext/gettext_0.14.1.bb
+++ b/packages/gettext/gettext_0.14.1.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "The GNU internationalization library."
HOMEPAGE = "http://www.gnu.org/software/gettext/gettext.html"
SECTION = "libs"
LICENSE = "GPL"
-PR = "r6"
+PR = "r7"
PROVIDES = "virtual/libintl"
SRC_URI = "${GNU_MIRROR}/gettext/gettext-${PV}.tar.gz \
@@ -28,6 +28,20 @@ do_configure_prepend() {
install -m 0644 ${STAGING_DATADIR}/aclocal/libtool.m4 ${S}/config/m4/
}
+# these lack the .x behind the .so, but shouldn't be in the -dev package
+# Otherwise you get the following results:
+# 7.4M glibc/images/ep93xx/Angstrom-console-image-glibc-ipk-2008.1-test-20080104-ep93xx.rootfs.tar.gz
+# 25M uclibc/images/ep93xx/Angstrom-console-image-uclibc-ipk-2008.1-test-20080104-ep93xx.rootfs.tar.gz
+# because gettext depends on gettext-dev, which pulls in more -dev packages:
+# 15228 KiB /ep93xx/libstdc++-dev_4.2.2-r2_ep93xx.ipk
+# 1300 KiB /ep93xx/uclibc-dev_0.9.29-r8_ep93xx.ipk
+# 140 KiB /armv4t/gettext-dev_0.14.1-r6_armv4t.ipk
+# 4 KiB /ep93xx/libgcc-s-dev_4.2.2-r2_ep93xx.ipk
+
+PACKAGES =+ "libgettextlib libgettextsrc"
+FILES_libgettextlib = "${libdir}/libgettextlib-*.so*"
+FILES_libgettextsrc = "${libdir}/libgettextsrc-*.so*"
+
do_stage () {
autotools_stage_includes
oe_libinstall -so -C gettext-tools/lib libgettextlib ${STAGING_LIBDIR}/
diff --git a/packages/gimp/babl_svn.bb b/packages/gimp/babl_svn.bb
index a32d6ce31a..d53acf46f8 100644
--- a/packages/gimp/babl_svn.bb
+++ b/packages/gimp/babl_svn.bb
@@ -16,6 +16,6 @@ do_stage() {
FILES_${PN} += "${libdir}/babl-0.0/"
-FILES_${PN}-dbg = "${libdir}/babl-0.0/.debug/"
+FILES_${PN}-dbg += "${libdir}/babl-0.0/.debug/"
diff --git a/packages/git/files/git-gui-install-mode-arg-spaces.patch b/packages/git/files/git-gui-install-mode-arg-spaces.patch
new file mode 100644
index 0000000000..10e4eb2e1c
--- /dev/null
+++ b/packages/git/files/git-gui-install-mode-arg-spaces.patch
@@ -0,0 +1,32 @@
+--- git/git-gui/Makefile.orig 2007-12-26 17:16:42.000000000 +1030
++++ git/git-gui/Makefile 2007-12-26 17:17:16.000000000 +1030
+@@ -31,11 +31,11 @@
+ INSTALL = install
+ endif
+
+-INSTALL_D0 = $(INSTALL) -d -m755 # space is required here
++INSTALL_D0 = $(INSTALL) -d -m 755 # space is required here
+ INSTALL_D1 =
+-INSTALL_R0 = $(INSTALL) -m644 # space is required here
++INSTALL_R0 = $(INSTALL) -m 644 # space is required here
+ INSTALL_R1 =
+-INSTALL_X0 = $(INSTALL) -m755 # space is required here
++INSTALL_X0 = $(INSTALL) -m 755 # space is required here
+ INSTALL_X1 =
+ INSTALL_L0 = rm -f # space is required here
+ INSTALL_L1 = && ln # space is required here
+@@ -50,11 +50,11 @@
+ QUIET_2DEVNULL = 2>/dev/null
+
+ INSTALL_D0 = dir=
+- INSTALL_D1 = && echo ' ' DEST $$dir && $(INSTALL) -d -m755 "$$dir"
++ INSTALL_D1 = && echo ' ' DEST $$dir && $(INSTALL) -d -m 755 "$$dir"
+ INSTALL_R0 = src=
+- INSTALL_R1 = && echo ' ' INSTALL 644 `basename $$src` && $(INSTALL) -m644 $$src
++ INSTALL_R1 = && echo ' ' INSTALL 644 `basename $$src` && $(INSTALL) -m 644 $$src
+ INSTALL_X0 = src=
+- INSTALL_X1 = && echo ' ' INSTALL 755 `basename $$src` && $(INSTALL) -m755 $$src
++ INSTALL_X1 = && echo ' ' INSTALL 755 `basename $$src` && $(INSTALL) -m 755 $$src
+
+ INSTALL_L0 = dst=
+ INSTALL_L1 = && src=
diff --git a/packages/git/git.inc b/packages/git/git.inc
index 7115d44b35..3a80c5d950 100644
--- a/packages/git/git.inc
+++ b/packages/git/git.inc
@@ -3,7 +3,9 @@ SECTION = "console/utils"
LICENSE = "GPL"
SRC_URI = "http://www.kernel.org/pub/software/scm/git/git-${PV}.tar.bz2 \
- file://autotools.patch;patch=1"
+ file://autotools.patch;patch=1 \
+ file://git-gui-install-mode-arg-spaces.patch;patch=1 \
+ "
S = "${WORKDIR}/git-${PV}"
EXTRA_OEMAKE = "NO_TCLTL=1"
diff --git a/packages/glibc/eglibc-package.bbclass b/packages/glibc/eglibc-package.bbclass
index 0cb8497733..702d354591 100644
--- a/packages/glibc/eglibc-package.bbclass
+++ b/packages/glibc/eglibc-package.bbclass
@@ -27,7 +27,7 @@ ENABLE_BINARY_LOCALE_GENERATION ?= "0"
BINARY_LOCALE_ARCHES ?= "arm.*"
PACKAGES = "eglibc-dbg eglibc catchsegv sln nscd ldd localedef eglibc-utils eglibc-dev eglibc-doc eglibc-locale libsegfault eglibc-extra-nss eglibc-thread-db eglibc-pcprofile"
-PACKAGES_DYNAMIC = "eglibc-gconv-* eglibc-charmap-* eglibc-localedata-*"
+PACKAGES_DYNAMIC = "glibc-gconv-* glibc-charmap-* glibc-localedata-* eglibc-gconv-* eglibc-charmap-* eglibc-localedata-*"
RPROVIDES_eglibc = "glibc"
RPROVIDES_eglibc-utils = "glibc-utils"
@@ -150,14 +150,14 @@ do_prep_locale_tree() {
treedir=${WORKDIR}/locale-tree
rm -rf $treedir
mkdir -p $treedir/bin $treedir/lib $treedir/${datadir} $treedir/${libdir}/locale
- cp -a ${D}${datadir}/i18n $treedir/${datadir}/i18n
+ cp -pPR ${D}${datadir}/i18n $treedir/${datadir}/i18n
# unzip to avoid parsing errors
for i in $treedir/${datadir}/i18n/charmaps/*gz; do
gunzip $i
done
- ls ${D}/lib/* | xargs -iBLAH cp -a BLAH $treedir/lib
+ ls ${D}/lib/* | xargs -iBLAH cp -pPR BLAH $treedir/lib
if [ -f ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.* ]; then
- cp -a ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.* $treedir/lib
+ cp -pPR ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.* $treedir/lib
fi
install -m 0755 ${D}${bindir}/localedef $treedir/bin
}
@@ -166,7 +166,7 @@ do_collect_bins_from_locale_tree() {
treedir=${WORKDIR}/locale-tree
mkdir -p ${D}${libdir}
- cp -a $treedir/${libdir}/locale ${D}${libdir}
+ cp -pPR $treedir/${libdir}/locale ${D}${libdir}
}
python package_do_split_gconvs () {
@@ -210,6 +210,7 @@ python package_do_split_gconvs () {
f.close()
if deps != []:
bb.data.setVar('RDEPENDS_%s' % pkg, " ".join(deps), d)
+ bb.data.setVar('RPROVIDES_%s' % pkg, 'glibc-localedata-%s' % group, d)
do_split_packages(d, locales_dir, file_regex='(.*)', output_pattern='eglibc-localedata-%s', description='locale definition for %s', hook=calc_locale_deps, extra_depends='')
bb.data.setVar('PACKAGES', bb.data.getVar('PACKAGES', d) + ' eglibc-gconv', d)
@@ -261,6 +262,7 @@ python package_do_split_gconvs () {
else:
eglibc_name = name
bb.data.setVar('RDEPENDS_%s' % pkgname, legitimize_package_name('eglibc-binary-localedata-%s' % eglibc_name), d)
+ bb.data.setVar('RPROVIDES_%s' % pkgname, 'glibc-binary-localedata-%s' % group, d)
rprovides = 'virtual-locale-%s' % legitimize_package_name(name)
m = re.match("(.*)_(.*)", name)
if m:
diff --git a/packages/glibc/eglibc_svn.bb b/packages/glibc/eglibc_svn.bb
index da33cca3fa..ff68185bcc 100644
--- a/packages/glibc/eglibc_svn.bb
+++ b/packages/glibc/eglibc_svn.bb
@@ -2,8 +2,8 @@ require glibc.inc
DEFAULT_PREFERENCE = "-1"
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/eglibc-svn"
-PV = "2.6+svnr${SRCREV}"
-PR = "r1"
+PV = "2.7+svnr${SRCREV}"
+PR = "r2"
SRC_URI = "svn://svn.eglibc.org;module=trunk \
file://etc/ld.so.conf \
file://generate-supported.mk"
diff --git a/packages/glibc/files/glibc-2.5-local-dynamic-resolvconf.patch b/packages/glibc/files/glibc-2.5-local-dynamic-resolvconf.patch
new file mode 100644
index 0000000000..bab3747b1a
--- /dev/null
+++ b/packages/glibc/files/glibc-2.5-local-dynamic-resolvconf.patch
@@ -0,0 +1,44 @@
+--- glibc-2.5.orig/debian/patches/any/local-dynamic-resolvconf.diff
++++ glibc-2.5/debian/patches/any/local-dynamic-resolvconf.diff
+@@ -0,0 +1,41 @@
++# All lines beginning with `# DP:' are a description of the patch.
++# DP: Description: allow dynamic long-running processes to
++# DP: re-read a dynamically updated resolv.conf on the fly
++# DP: Dpatch author: Adam Conrad <adconrad@ubuntu.com>
++# DP: Patch author: Thorsten Kukuk <kukuk@suse.de>
++# DP: Upstream status: Ubuntu-Specific
++# DP: Date: 2006-01-13 08:14:21 UTC
++
++Index: resolv/res_libc.c
++===================================================================
++--- resolv/res_libc.c.orig
+++++ resolv/res_libc.c
++@@ -22,7 +22,7 @@
++ #include <arpa/nameser.h>
++ #include <resolv.h>
++ #include <bits/libc-lock.h>
++-
+++#include <sys/stat.h>
++
++ /* The following bit is copied from res_data.c (where it is #ifdef'ed
++ out) since res_init() should go into libc.so but the rest of that
++@@ -94,8 +94,17 @@
++ int
++ __res_maybe_init (res_state resp, int preinit)
++ {
++- if (resp->options & RES_INIT) {
++- if (__res_initstamp != resp->_u._ext.initstamp) {
+++ static time_t last_mtime;
+++ struct stat statbuf;
+++ int ret;
+++
+++
+++ if (resp->options & RES_INIT) {
+++ ret = stat (_PATH_RESCONF, &statbuf);
+++ if (__res_initstamp != resp->_u._ext.initstamp
+++ || (ret == 0) && (last_mtime != statbuf.st_mtime))
+++ {
+++ last_mtime = statbuf.st_mtime;
++ if (resp->nscount > 0) {
++ __res_iclose (resp, true);
++ return __res_vinit (resp, 1);
diff --git a/packages/glibc/files/glibc-2.5-soft-fp-separate-strong-alias.patch b/packages/glibc/files/glibc-2.5-soft-fp-separate-strong-alias.patch
index e41c1b7d96..e41c1b7d96 100755..100644
--- a/packages/glibc/files/glibc-2.5-soft-fp-separate-strong-alias.patch
+++ b/packages/glibc/files/glibc-2.5-soft-fp-separate-strong-alias.patch
diff --git a/packages/glibc/glibc-2.2.5/glibc-2.2.5-allow-gcc-4.x-configure.patch b/packages/glibc/glibc-2.2.5/glibc-2.2.5-allow-gcc-4.x-configure.patch
new file mode 100644
index 0000000000..138c5414cb
--- /dev/null
+++ b/packages/glibc/glibc-2.2.5/glibc-2.2.5-allow-gcc-4.x-configure.patch
@@ -0,0 +1,21 @@
+Fixes
+checking version of powerpc-405-linux-gnu-gcc ... 4.0.0, bad
+checking for gnumake... no
+checking for gmake... no
+checking for make... make
+checking version of make... 3.80, ok
+configure: error:
+*** These critical programs are missing or too old:gcc
+
+
+--- glibc-2.2.5/configure.old 2005-03-10 00:23:46.374213600 -0800
++++ glibc-2.2.5/configure 2005-03-10 00:25:13.313996744 -0800
+@@ -1476,7 +1476,7 @@
+ ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`
+ case $ac_prog_version in
+ '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+- *gcc-2.9[5-9].*|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|3.[0-9]*|cygnus-2.9[1-9]*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]|sgicc-*)
++ *gcc-2.9[5-9].*|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|3.[0-9]*|4.[0-9]*|cygnus-2.9[1-9]*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]|sgicc-*)
+ ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+ *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+
diff --git a/packages/glibc/glibc-2.2.5/glibc-2.3.2-allow-solaris.patch b/packages/glibc/glibc-2.2.5/glibc-2.3.2-allow-solaris.patch
new file mode 100644
index 0000000000..bda01b4267
--- /dev/null
+++ b/packages/glibc/glibc-2.2.5/glibc-2.3.2-allow-solaris.patch
@@ -0,0 +1,41 @@
+See http://sources.redhat.com/ml/crossgcc/2003-11/msg00111.html
+Might fix error
+... gcc-3.2.3-glibc-2.3.2/build-glibc/csu/version-info.h:8: too many decimal points in floating constant
+make[2]: ***
+when building on Solaris. I haven't seen this be needed yet, but what the heck,
+here it is in case someone needs it.
+
+Retrieved with http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/csu/Makefile.diff?r1=1.70&r2=1.71&cvsroot=glibc
+
+Revision 1.71, Thu Sep 25 20:29:39 2003 UTC (8 months, 2 weeks ago) by drepper
+Branch: MAIN
+CVS Tags: glibc-2_3_3
+
+($(objpfx)version-info.h): Fix sed script to handle banners.
+
+===================================================================
+RCS file: /cvs/glibc/libc/csu/Makefile,v
+retrieving revision 1.70
+retrieving revision 1.71
+diff -u -r1.70 -r1.71
+--- libc/csu/Makefile 2003/06/26 07:27:39 1.70
++++ libc/csu/Makefile 2003/09/25 20:29:39 1.71
+@@ -222,14 +222,14 @@
+ if [ -z "$$os" ]; then \
+ os=Linux; \
+ fi; \
+- echo "\"Compiled on a $$os $$version system" \
+- "on `date +%Y-%m-%d`.\\n\"" ;; \
++ printf '"Compiled on a %s %s system on %s.\\n"\n' \
++ "$os" "$version" "`date +%Y-%m-%d`" ;; \
+ *) ;; \
+ esac; \
+ files="$(all-Banner-files)"; \
+ if test -n "$$files"; then \
+- echo "\"Available extensions:\\n\""; \
++ printf '"Available extensions:\\n"\n'; \
+ sed -e '/^#/d' -e 's/^[[:space:]]*/ /' \
+- -e 's/\(^.*$$\)/\"\1\\n\"/' $$files; \
++ -e 's/^\(.*\)$$/\"\1\\n\"/' $$files; \
+ fi) > $@T
+ mv -f $@T $@
diff --git a/packages/glibc/glibc-package.bbclass b/packages/glibc/glibc-package.bbclass
index b96aae37b9..50fae44bf3 100644
--- a/packages/glibc/glibc-package.bbclass
+++ b/packages/glibc/glibc-package.bbclass
@@ -141,17 +141,17 @@ do_prep_locale_tree() {
treedir=${WORKDIR}/locale-tree
rm -rf $treedir
mkdir -p $treedir/bin $treedir/lib $treedir/${datadir} $treedir/${libdir}/locale
- cp -a ${D}${datadir}/i18n $treedir/${datadir}/i18n
+ cp -pPR ${D}${datadir}/i18n $treedir/${datadir}/i18n
# unzip to avoid parsing errors
for i in $treedir/${datadir}/i18n/charmaps/*gz; do
gunzip $i
done
- ls ${D}/lib/* | xargs -iBLAH cp -a BLAH $treedir/lib
+ ls ${D}/lib/* | xargs -iBLAH cp -pPR BLAH $treedir/lib
if [ -f ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.so ]; then
- cp -a ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.so $treedir/lib
+ cp -pPR ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.so $treedir/lib
fi
if [ -f ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.so.* ]; then
- cp -a ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.so.* $treedir/lib
+ cp -pPR ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.so.* $treedir/lib
fi
install -m 0755 ${D}${bindir}/localedef $treedir/bin
}
@@ -160,7 +160,7 @@ do_collect_bins_from_locale_tree() {
treedir=${WORKDIR}/locale-tree
mkdir -p ${D}${libdir}
- cp -a $treedir/${libdir}/locale ${D}${libdir}
+ cp -pPR $treedir/${libdir}/locale ${D}${libdir}
}
python package_do_split_gconvs () {
diff --git a/packages/glibc/glibc_2.2.5.bb b/packages/glibc/glibc_2.2.5.bb
index 7b5eca2432..2a3bfd26df 100644
--- a/packages/glibc/glibc_2.2.5.bb
+++ b/packages/glibc/glibc_2.2.5.bb
@@ -1,7 +1,7 @@
require glibc.inc
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs"
-PR = "r11"
+PR = "r13"
DEFAULT_PREFERENCE_sh3 = "-99"
@@ -63,6 +63,7 @@ SRC_URI = "${GNU_MIRROR}/glibc/glibc-${PV}.tar.gz \
file://errlist-arm.patch;patch=1 \
file://glibc-2.2.5-allow-gcc-3.4-fixup.patch;patch=1 \
file://glibc-2.2.5-allow-gcc-3.4-grp.patch;patch=1 \
+ file://glibc-2.2.5-allow-gcc-4.x-configure.patch;patch=1 \
file://glibc-2.2.5-alpha-pwrite64.patch;patch=1 \
file://glibc-2.2.5-arm-pwrite64.patch;patch=1 \
file://glibc-2.2.5-crosstest.patch;patch=1 \
@@ -95,6 +96,7 @@ SRC_URI = "${GNU_MIRROR}/glibc/glibc-${PV}.tar.gz \
file://threadparam.patch;patch=1 \
file://initfini-flags.patch;patch=1 \
file://pt-initfini-flags.patch;patch=1 \
+ file://glibc-2.3.2-allow-solaris.patch;patch=1 \
\
file://etc/ld.so.conf \
file://generate-supported.mk"
@@ -161,7 +163,7 @@ do_stage() {
rm -f ${STAGING_DIR_HOST}${layout_base_libdir}/libc.so.6
oe_runmake 'install_root=${STAGING_DIR_HOST}' \
'includedir=${layout_includedir}' 'libdir=${layout_libdir}' 'slibdir=${layout_base_libdir}' \
- '${STAGING_DIR_HOST}${layout_base_libdir}libc.so.6' \
+ '${STAGING_DIR_HOST}${layout_base_libdir}/libc.so.6' \
'${STAGING_INCDIR}/bits/errno.h' \
'${STAGING_INCDIR}/bits/libc-lock.h' \
'${STAGING_INCDIR}/gnu/stubs.h' \
@@ -199,6 +201,7 @@ require glibc-package.bbclass
PACKAGES_unslung = "libc6-unslung"
PACKAGE_ARCH_unslung = "nslu2"
+PACKAGE_NO_GCONV_unslung = "1"
RDEPENDS_libc6-unslung = "nslu2-linksys-libs"
RPROVIDES_libc6-unslung = "libc6"
diff --git a/packages/glibc/glibc_2.5.bb b/packages/glibc/glibc_2.5.bb
index e30d357121..f50c85b1d0 100644
--- a/packages/glibc/glibc_2.5.bb
+++ b/packages/glibc/glibc_2.5.bb
@@ -1,17 +1,15 @@
require glibc.inc
+PR = "r9"
ARM_INSTRUCTION_SET = "arm"
PACKAGES_DYNAMIC = "libc6*"
RPROVIDES_${PN}-dev = "libc6-dev"
-PR = "r8"
-
# the -isystem in bitbake.conf screws up glibc do_stage
BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}"
-
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-2.4"
GLIBC_ADDONS ?= "ports,nptl,libidn"
@@ -36,57 +34,52 @@ python __anonymous () {
RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-# file://noinfo.patch;patch=1
-# file://ldconfig.patch;patch=1;pnum=0
-# file://arm-machine-gmon.patch;patch=1;pnum=0 \
-# \
-# file://arm-ioperm.patch;patch=1;pnum=0 \
-# file://ldd.patch;patch=1;pnum=0 \
-SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \
- ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-${PV}.tar.bz2 \
- ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-${PV}.tar.bz2 \
- file://arm-memcpy.patch;patch=1 \
- file://arm-longlong.patch;patch=1 \
- file://fhs-linux-paths.patch;patch=1 \
- file://dl-cache-libcmp.patch;patch=1 \
- file://ldsocache-varrun.patch;patch=1 \
- file://nptl-crosscompile.patch;patch=1 \
- file://glibc-check_pf.patch;patch=1;pnum=0 \
-# file://glibc-2.4-compile.patch;patch=1 \
-# file://glibc-2.4-openat-3.patch;patch=1 \
-# file://fixup-aeabi-syscalls.patch;patch=1 \
- file://zecke-sane-readelf.patch;patch=1 \
- file://ldd-unbash.patch;patch=1 \
- file://generic-bits_select.h \
- file://generic-bits_types.h \
- file://generic-bits_typesizes.h \
- file://generic-bits_time.h \
- file://etc/ld.so.conf \
- file://generate-supported.mk"
-
+SRC_URI = "\
+ ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \
+ ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-${PV}.tar.bz2 \
+ ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-${PV}.tar.bz2 \
+ file://arm-memcpy.patch;patch=1 \
+ file://arm-longlong.patch;patch=1 \
+ file://fhs-linux-paths.patch;patch=1 \
+ file://dl-cache-libcmp.patch;patch=1 \
+ file://ldsocache-varrun.patch;patch=1 \
+ file://nptl-crosscompile.patch;patch=1 \
+ file://glibc-2.5-local-dynamic-resolvconf.patch;patch=1 \
+ file://glibc-check_pf.patch;patch=1;pnum=0 \
+ file://zecke-sane-readelf.patch;patch=1 \
+ file://ldd-unbash.patch;patch=1 \
+ file://generic-bits_select.h \
+ file://generic-bits_types.h \
+ file://generic-bits_typesizes.h \
+ file://generic-bits_time.h \
+ file://etc/ld.so.conf \
+ file://generate-supported.mk \
+"
# Build fails on sh3 and sh4 without additional patches
SRC_URI_append_sh3 = " file://no-z-defs.patch;patch=1"
SRC_URI_append_sh4 = " file://no-z-defs.patch;patch=1"
-#powerpc patches to add support for soft-float
-SRC_URI_append_powerpc= " file://ppc-sfp-machine.patch;patch=1 \
- file://ppc-soft-fp-20070115.patch;patch=1 \
- file://ppc-ld-nofpu-20070104.patch;patch=1 \
- file://ppc-ports-ld-nofpu-20070114.patch;patch=1 \
- file://powerpc-sqrt-hack.diff;patch=1 \
- file://glibc-2.5-soft-fp-separate-strong-alias.patch;patch=1"
+# Powerpc patches to add support for soft-float
+SRC_URI_append_powerpc = " file://ppc-sfp-machine.patch;patch=1 \
+ file://ppc-soft-fp-20070115.patch;patch=1 \
+ file://ppc-ld-nofpu-20070104.patch;patch=1 \
+ file://ppc-ports-ld-nofpu-20070114.patch;patch=1 \
+ file://powerpc-sqrt-hack.diff;patch=1 \
+ file://glibc-2.5-soft-fp-separate-strong-alias.patch;patch=1"
S = "${WORKDIR}/glibc-${PV}"
B = "${WORKDIR}/build-${TARGET_SYS}"
-EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
- --without-cvs --disable-profile --disable-debug --without-gd \
- --enable-clocale=gnu \
- --enable-add-ons=${GLIBC_ADDONS} \
- --with-headers=${STAGING_INCDIR} \
- --without-selinux \
- ${GLIBC_EXTRA_OECONF}"
+EXTRA_OECONF = "\
+ --enable-kernel=${OLDEST_KERNEL} \
+ --without-cvs --disable-profile --disable-debug --without-gd \
+ --enable-clocale=gnu \
+ --enable-add-ons=${GLIBC_ADDONS} \
+ --with-headers=${STAGING_INCDIR} \
+ --without-selinux \
+ ${GLIBC_EXTRA_OECONF} \
+"
EXTRA_OECONF += "${@get_glibc_fpu_setting(bb, d)}"
diff --git a/packages/glibc/glibc_2.6.1.bb b/packages/glibc/glibc_2.6.1.bb
index 46b56a0a65..d2816f83b1 100644
--- a/packages/glibc/glibc_2.6.1.bb
+++ b/packages/glibc/glibc_2.6.1.bb
@@ -1,12 +1,11 @@
require glibc.inc
+PR = "r2"
ARM_INSTRUCTION_SET = "arm"
PACKAGES_DYNAMIC = "libc6*"
RPROVIDES_${PN}-dev = "libc6-dev"
-PR = "r1"
-
# the -isystem in bitbake.conf screws up glibc do_stage
BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}"
@@ -36,53 +35,47 @@ python __anonymous () {
RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-# file://noinfo.patch;patch=1
-# file://ldconfig.patch;patch=1;pnum=0
-# file://arm-machine-gmon.patch;patch=1;pnum=0 \
-# \
-# file://arm-ioperm.patch;patch=1;pnum=0 \
-# file://ldd.patch;patch=1;pnum=0 \
-SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \
- ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-${PV}.tar.bz2 \
- ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-${PV}.tar.bz2 \
- file://arm-memcpy.patch;patch=1 \
- file://arm-longlong.patch;patch=1 \
- file://fhs-linux-paths.patch;patch=1 \
- file://dl-cache-libcmp.patch;patch=1 \
- file://ldsocache-varrun.patch;patch=1 \
- file://nptl-crosscompile.patch;patch=1 \
- file://glibc-check_pf.patch;patch=1;pnum=0 \
-# file://glibc-2.4-compile.patch;patch=1 \
-# file://glibc-2.4-openat-3.patch;patch=1 \
-# file://fixup-aeabi-syscalls.patch;patch=1 \
- file://zecke-sane-readelf.patch;patch=1 \
- file://ldd-unbash.patch;patch=1 \
- file://generic-bits_select.h \
- file://generic-bits_types.h \
- file://generic-bits_typesizes.h \
- file://generic-bits_time.h \
- file://etc/ld.so.conf \
- file://generate-supported.mk"
-
+SRC_URI = "\
+ ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2 \
+ ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-${PV}.tar.bz2 \
+ ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-${PV}.tar.bz2 \
+ file://arm-memcpy.patch;patch=1 \
+ file://arm-longlong.patch;patch=1 \
+ file://fhs-linux-paths.patch;patch=1 \
+ file://dl-cache-libcmp.patch;patch=1 \
+ file://ldsocache-varrun.patch;patch=1 \
+ file://nptl-crosscompile.patch;patch=1 \
+ file://glibc-2.5-local-dynamic-resolvconf.patch;patch=1 \
+ file://glibc-check_pf.patch;patch=1;pnum=0 \
+ file://zecke-sane-readelf.patch;patch=1 \
+ file://ldd-unbash.patch;patch=1 \
+ file://generic-bits_select.h \
+ file://generic-bits_types.h \
+ file://generic-bits_typesizes.h \
+ file://generic-bits_time.h \
+ file://etc/ld.so.conf \
+ file://generate-supported.mk \
+"
# Build fails on sh3 and sh4 without additional patches
SRC_URI_append_sh3 = " file://no-z-defs.patch;patch=1"
SRC_URI_append_sh4 = " file://no-z-defs.patch;patch=1"
-#powerpc patches to add support for soft-float
-SRC_URI_append_powerpc= " \
- file://powerpc-sqrt-hack.diff;patch=1""
+# PowerPC Patches to add support for soft-float
+SRC_URI_append_powerpc = "file://powerpc-sqrt-hack.diff;patch=1"
S = "${WORKDIR}/glibc-${PV}"
B = "${WORKDIR}/build-${TARGET_SYS}"
-EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
- --without-cvs --disable-profile --disable-debug --without-gd \
- --enable-clocale=gnu \
- --enable-add-ons=${GLIBC_ADDONS} \
- --with-headers=${STAGING_INCDIR} \
- --without-selinux \
- ${GLIBC_EXTRA_OECONF}"
+EXTRA_OECONF = "\
+ --enable-kernel=${OLDEST_KERNEL} \
+ --without-cvs --disable-profile --disable-debug --without-gd \
+ --enable-clocale=gnu \
+ --enable-add-ons=${GLIBC_ADDONS} \
+ --with-headers=${STAGING_INCDIR} \
+ --without-selinux \
+ ${GLIBC_EXTRA_OECONF} \
+"
EXTRA_OECONF += "${@get_glibc_fpu_setting(bb, d)}"
diff --git a/packages/glibmm/glibmm.inc b/packages/glibmm/glibmm.inc
new file mode 100644
index 0000000000..c33d3151ae
--- /dev/null
+++ b/packages/glibmm/glibmm.inc
@@ -0,0 +1,24 @@
+DESCRIPTION = "C++ bindings for the glib library."
+HOMEPAGE = "http://www.gtkmm.org/"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+DEPENDS = "glib-2.0 libsigc++-2.0"
+PR = "r0"
+SHRT_VER = "${@bb.data.getVar('PV',d,1).split('.')[0]}.${@bb.data.getVar('PV',d,1).split('.')[1]}"
+
+SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/glibmm/${SHRT_VER}/glibmm-${PV}.tar.bz2"
+
+inherit autotools pkgconfig flow-lossage
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${libdir}/glibmm-2.4/include/"
+
+LIBV = "2.4.0"
+
+do_stage () {
+ autotools_stage_all
+
+ install -m 0644 glib/glibmmconfig.h ${STAGING_INCDIR}/glibmm-2.4
+ install -m 0644 scripts/glibmm_check_perl.m4 ${STAGING_DATADIR}/aclocal/
+}
diff --git a/packages/glibmm/glibmm_2.12.10.bb b/packages/glibmm/glibmm_2.12.10.bb
index a62d4eb145..90a053fb36 100644
--- a/packages/glibmm/glibmm_2.12.10.bb
+++ b/packages/glibmm/glibmm_2.12.10.bb
@@ -1,23 +1 @@
-DESCRIPTION = "C++ bindings for the glib library."
-HOMEPAGE = "http://www.gtkmm.org/"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "LGPL"
-DEPENDS = "glib-2.0 libsigc++-2.0"
-PR = "r0"
-
-SRC_URI = "ftp://ftp.gnome.org/pub/GNOME/sources/glibmm/2.12/glibmm-${PV}.tar.bz2"
-
-inherit autotools pkgconfig flow-lossage
-
-FILES_${PN} = "${libdir}/lib*.so.*"
-FILES_${PN}-dev += "${libdir}/glibmm-2.4/include/"
-
-LIBV = "2.4.0"
-
-do_stage () {
- autotools_stage_all
-
- install -m 0644 glib/glibmmconfig.h ${STAGING_INCDIR}/glibmm-2.4
- install -m 0644 scripts/glibmm_check_perl.m4 ${STAGING_DATADIR}/aclocal/
-}
+require glibmm.inc
diff --git a/packages/glibmm/glibmm_2.14.2.bb b/packages/glibmm/glibmm_2.14.2.bb
new file mode 100644
index 0000000000..aeadede939
--- /dev/null
+++ b/packages/glibmm/glibmm_2.14.2.bb
@@ -0,0 +1,3 @@
+require glibmm.inc
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/linux/linux-handhelds-2.6/h3900/.mtn2git_empty b/packages/gnome-mplayer/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/h3900/.mtn2git_empty
+++ b/packages/gnome-mplayer/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/h4000/.mtn2git_empty b/packages/gnome-mplayer/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/h4000/.mtn2git_empty
+++ b/packages/gnome-mplayer/files/.mtn2git_empty
diff --git a/packages/gnome-mplayer/files/1.patch b/packages/gnome-mplayer/files/1.patch
new file mode 100644
index 0000000000..77e03365f4
--- /dev/null
+++ b/packages/gnome-mplayer/files/1.patch
@@ -0,0 +1,37 @@
+# HG changeset patch
+# User "Paul Sokolovsky <pfalcon@users.sourceforge.net>"
+# Date 1199174323 -7200
+# Node ID d630a2e72d3fa094a330f5bd6351b0cf7c9690a6
+# Parent 4b4820fa6fff9dbb8c6c8e1bd23eed54faf10982
+gui.c: Add vertical pane layout for main i/f vs playlist.
+Decision which layout to use is based on screen aspect.
+This change will allow sane layout on PDA devices, many
+of which have vertical layout by default. Possible
+improvements:
+1. Add menu check item for users to be able to select layout
+as they see fit.
+
+diff -r 4b4820fa6fff -r d630a2e72d3f src/gui.c
+--- a/src/gui.c Tue Jan 01 09:29:28 2008 +0200
++++ b/src/gui.c Tue Jan 01 09:58:43 2008 +0200
+@@ -3071,8 +3071,20 @@ GtkWidget *create_window(gint windowid)
+
+ gtk_widget_show(menubar);
+ gtk_widget_show(drawing_area);
++ if (gdk_screen_width() > gdk_screen_height()) {
+ pane = gtk_hpaned_new();
+ gtk_paned_pack1(GTK_PANED(pane),vbox,TRUE,TRUE);
++ } else {
++ GtkRequisition menu_size;
++ GtkRequisition vbox_size;
++ pane = gtk_vpaned_new();
++ gtk_paned_pack1(GTK_PANED(pane),vbox,TRUE,FALSE); /* No shrink beyond size request*/
++
++ gtk_widget_size_request(menubar, &menu_size);
++ gtk_widget_size_request(vbox, &vbox_size);
++ /* 5 is adhox compensation for layout issues ;-( */
++ gtk_widget_set_size_request(vbox, -1, menu_size.height + vbox_size.height - 5);
++ }
+
+ gtk_container_add(GTK_CONTAINER(window), pane);
+
diff --git a/packages/gnome-mplayer/files/ac-gthread.patch b/packages/gnome-mplayer/files/ac-gthread.patch
new file mode 100644
index 0000000000..ea4abf143d
--- /dev/null
+++ b/packages/gnome-mplayer/files/ac-gthread.patch
@@ -0,0 +1,12 @@
+diff -r d630a2e72d3f configure.in
+--- a/configure.in Tue Jan 01 09:58:43 2008 +0200
++++ b/configure.in Tue Jan 01 10:16:44 2008 +0200
+@@ -32,7 +32,7 @@ AM_PROG_LIBTOOL
+ #AC_SUBST(GNOME_CFLAGS)
+ #AC_SUBST(GNOME_LIBS)
+
+-PKG_CHECK_MODULES(GTK, [gtk+-2.0 glib-2.0])
++PKG_CHECK_MODULES(GTK, [gtk+-2.0 glib-2.0 gthread-2.0])
+ AC_SUBST(GTK_CFLAGS)
+ AC_SUBST(GTK_LIBS)
+
diff --git a/packages/gnome-mplayer/files/non-utf8-id3-fallback.patch b/packages/gnome-mplayer/files/non-utf8-id3-fallback.patch
new file mode 100644
index 0000000000..3b13bf0015
--- /dev/null
+++ b/packages/gnome-mplayer/files/non-utf8-id3-fallback.patch
@@ -0,0 +1,22 @@
+I found that on ARM/glibc 2.5/glib 2.12.something test in strip_unicode() doesn't
+really catch invalid utf-8 chars. Also, let's tell user where problem lies straight.
+
+Paul Sokolovsky <pmiscml@gmail.com>
+--- a/src/thread.c.org 2007-12-24 00:10:15.000000000 +0200
++++ a/src/thread.c 2008-01-04 22:04:30.000000000 +0200
+@@ -349,13 +349,11 @@
+ //g_idle_add(set_media_info, idledata);
+ utf8name = g_locale_to_utf8(parse[name],-1, NULL, NULL,NULL);
+ if (utf8name == NULL) {
+- strip_unicode(parse[name],strlen(parse[name]));
+- utf8name = g_strdup(parse[name]);
++ utf8name = g_strdup("<cannot convert to utf-8>");
+ }
+ utf8artist = g_locale_to_utf8(parse[artist],-1, NULL, NULL,NULL);
+ if (utf8artist == NULL) {
+- strip_unicode(parse[artist],strlen(parse[artist]));
+- utf8artist = g_strdup(parse[artist]);
++ utf8artist = g_strdup("<cannot convert to utf-8>");
+ }
+
+ message = g_markup_printf_escaped(_("<small>\n<b>Title:</b>\t%s\n<b>Artist:</b>\t%s\n<b>File:</b>\t%s\n</small>"),utf8name,utf8artist,idledata->info);
diff --git a/packages/gnome-mplayer/files/uchar-for-utf8-check.patch b/packages/gnome-mplayer/files/uchar-for-utf8-check.patch
new file mode 100644
index 0000000000..f19d20716e
--- /dev/null
+++ b/packages/gnome-mplayer/files/uchar-for-utf8-check.patch
@@ -0,0 +1,22 @@
+--- a/src/support.c.org 2007-12-18 20:39:09.000000000 +0200
++++ a/src/support.c 2008-01-04 22:12:32.000000000 +0200
+@@ -24,7 +24,7 @@
+
+ #include "support.h"
+
+-void strip_unicode(gchar * data, gsize len)
++void strip_unicode(guchar * data, gsize len)
+ {
+ gsize i = 0;
+
+--- a/src/support.h.org 2007-12-17 18:21:46.000000000 +0200
++++ a/src/support.h 2008-01-04 22:24:15.000000000 +0200
+@@ -31,7 +31,7 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+
+-void strip_unicode(gchar * data, gsize len);
++void strip_unicode(guchar * data, gsize len);
+ gint play_file(gchar * filename, gint playlist);
+ gint detect_playlist(gchar * filename);
+ gint parse_playlist(gchar * filename);
diff --git a/packages/gnome-mplayer/gnome-mplayer_0.5.3.bb b/packages/gnome-mplayer/gnome-mplayer_0.5.3.bb
new file mode 100644
index 0000000000..c01152cfb8
--- /dev/null
+++ b/packages/gnome-mplayer/gnome-mplayer_0.5.3.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Simple MPlayer frontend with lite Gnome integration"
+HOMEPAGE = "http://dekorte.homeip.net/download/gnome-mplayer/"
+LICENSE = "GPL"
+DEPENDS = "gtk+ gconf dbus-glib"
+RDEPENDS = "mplayer"
+PR = "r3"
+
+inherit autotools pkgconfig gconf
+
+SRC_URI = "http://dekorte.homeip.net/download/${PN}/${P}.tar.gz \
+ file://ac-gthread.patch;patch=1 \
+ file://1.patch;patch=1 \
+ file://uchar-for-utf8-check.patch;patch=1 \
+ file://non-utf8-id3-fallback.patch;patch=1"
diff --git a/packages/gnome-mplayer/gnome-mplayer_cvs.bb b/packages/gnome-mplayer/gnome-mplayer_cvs.bb
new file mode 100644
index 0000000000..fb7ad0d0ea
--- /dev/null
+++ b/packages/gnome-mplayer/gnome-mplayer_cvs.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Simple MPlayer frontend with lite Gnome integration"
+HOMEPAGE = "http://dekorte.homeip.net/download/gnome-mplayer/"
+LICENSE = "GPL"
+DEPENDS = "gtk+ gconf dbus-glib"
+RDEPENDS = "mplayer"
+SRCDATE = "20080101"
+PV = "0.5.3+cvs${SRCDATE}"
+PR = "r4"
+
+inherit autotools pkgconfig gconf
+
+S = "${WORKDIR}/${PN}"
+
+SRC_URI = "cvs://anonymous@dekorte.homeip.net/data/cvs;module=${PN} \
+ file://ac-gthread.patch;patch=1 \
+ file://1.patch;patch=1 \
+ file://uchar-for-utf8-check.patch;patch=1 \
+ file://non-utf8-id3-fallback.patch;patch=1"
diff --git a/packages/gnome/gconf-dbus_svn.bb b/packages/gnome/gconf-dbus_svn.bb
index cc69079c3a..e7875dc72e 100644
--- a/packages/gnome/gconf-dbus_svn.bb
+++ b/packages/gnome/gconf-dbus_svn.bb
@@ -7,7 +7,7 @@ RPROVIDES_${PN} = "gconf"
RPROVIDES_${PN}-dev = "gconf-dev"
PV = "2.16.0+svnr${SRCREV}"
-PR = "r4"
+PR = "r5"
SRC_URI = "svn://developer.imendio.com/svn/gconf-dbus;module=trunk;proto=http \
file://69gconfd-dbus"
@@ -19,6 +19,7 @@ PARALLEL_MAKE = ""
FILES_${PN} = "${libdir}/GConf-dbus/2/*.so ${libdir}/dbus-1.0 ${sysconfdir} ${datadir}/dbus* ${libdir}/*.so.* ${bindir}/* ${libexecdir}/*"
FILES_${PN}-dbg += " ${libdir}/GConf-dbus/2/.debug"
+FILES_${PN}-dev += "${libdir}/GConf-dbus/2/*.la ${datadir}/sgml/gconf/gconf-1.0.dtd"
EXTRA_OECONF = " --with-ipc=dbus --disable-gtk-doc --disable-gtk --enable-shared --disable-static"
diff --git a/packages/gnome/kanjipad_svn.bb b/packages/gnome/kanjipad_svn.bb
deleted file mode 100644
index 1e0d943da7..0000000000
--- a/packages/gnome/kanjipad_svn.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-DESCRIPTION = "KanjiPad is a very simple program for handwriting recognition"
-LICENSE = "GPLv2"
-
-DEPENDS = "gtk+ perl-native"
-
-PV = "2.0.0+svn${SRCDATE}"
-
-inherit pkgconfig
-
-SRC_URI = "svn://svn.gnome.org/svn/${PN}/;module=trunk"
-
-S = "${WORKDIR}/trunk"
-
-do_compile_prepend() {
- export CFLAGS='${TARGET_CFLAGS} -DFOR_PILOT_COMPAT -DKP_LIBDIR="${libdir}/kanjipad" -DBINDIR="${bindir}" `pkg-config --cflags gtk+-2.0` `pkg-config --cflags glib-2.0`'
-}
-
-
-
diff --git a/packages/gnome/libart-lgpl.inc b/packages/gnome/libart-lgpl.inc
new file mode 100644
index 0000000000..a37b392593
--- /dev/null
+++ b/packages/gnome/libart-lgpl.inc
@@ -0,0 +1,30 @@
+DESCRIPTION = "Library of functions for 2D graphics"
+SECTION = "x11/gnome"
+LICENSE = "LGPL"
+
+ART_CONFIG = "${HOST_ARCH}/art_config.h"
+
+# can't use gnome.oeclass due to _ in filename
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libart_lgpl/2.3/libart_lgpl-${PV}.tar.bz2 \
+ file://${ART_CONFIG} \
+ file://Makefile.am.patch;patch=1"
+
+inherit autotools pkgconfig
+
+DEPENDS = ""
+
+FILES_${PN} = "${libdir}/*.so.*"
+FILES_${PN}-dev += "${bindir}/libart2-config"
+
+S = "${WORKDIR}/libart_lgpl-${PV}"
+
+do_configure_prepend() {
+ cp ${WORKDIR}/${ART_CONFIG} ${S}/art_config.h
+}
+
+EXTRA_OECONF = "--disable-gtk-doc"
+
+do_stage() {
+ autotools_stage_includes
+ oe_libinstall -a -so libart_lgpl_2 ${STAGING_LIBDIR}
+}
diff --git a/packages/linux/linux-handhelds-2.6/h5000/.mtn2git_empty b/packages/gnome/libart-lgpl/armeb/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/h5000/.mtn2git_empty
+++ b/packages/gnome/libart-lgpl/armeb/.mtn2git_empty
diff --git a/packages/gnome/libart-lgpl/armeb/art_config.h b/packages/gnome/libart-lgpl/armeb/art_config.h
new file mode 100644
index 0000000000..b0e74ad6ae
--- /dev/null
+++ b/packages/gnome/libart-lgpl/armeb/art_config.h
@@ -0,0 +1,10 @@
+/* Automatically generated by gen_art_config.c */
+
+#define ART_SIZEOF_CHAR 1
+#define ART_SIZEOF_SHORT 2
+#define ART_SIZEOF_INT 4
+#define ART_SIZEOF_LONG 4
+
+typedef unsigned char art_u8;
+typedef unsigned short art_u16;
+typedef unsigned int art_u32;
diff --git a/packages/gnome/libart-lgpl_2.3.16.bb b/packages/gnome/libart-lgpl_2.3.16.bb
index 8028c8ef3f..3605a384cd 100644
--- a/packages/gnome/libart-lgpl_2.3.16.bb
+++ b/packages/gnome/libart-lgpl_2.3.16.bb
@@ -1,30 +1,3 @@
-DESCRIPTION = "Library of functions for 2D graphics"
-SECTION = "x11/gnome"
-LICENSE = "LGPL"
-PR = "r2"
-ART_CONFIG = "${HOST_ARCH}/art_config.h"
-
-# can't use gnome.oeclass due to _ in filename
-SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libart_lgpl/2.3/libart_lgpl-${PV}.tar.bz2 \
- file://${ART_CONFIG} \
- file://Makefile.am.patch;patch=1"
-
-inherit autotools pkgconfig
-
-DEPENDS = ""
-
-FILES_${PN} = "${libdir}/*.so.*"
-FILES_${PN}-dev += "${bindir}/libart2-config"
+require libart-lgpl.inc
-S = "${WORKDIR}/libart_lgpl-${PV}"
-
-do_configure_prepend() {
- cp ${WORKDIR}/${ART_CONFIG} ${S}/art_config.h
-}
-
-EXTRA_OECONF = "--disable-gtk-doc"
-
-do_stage() {
- autotools_stage_includes
- oe_libinstall -a -so libart_lgpl_2 ${STAGING_LIBDIR}
-}
+PR = "r2"
diff --git a/packages/gnome/libart-lgpl_2.3.19.bb b/packages/gnome/libart-lgpl_2.3.19.bb
index a37b392593..3605a384cd 100644
--- a/packages/gnome/libart-lgpl_2.3.19.bb
+++ b/packages/gnome/libart-lgpl_2.3.19.bb
@@ -1,30 +1,3 @@
-DESCRIPTION = "Library of functions for 2D graphics"
-SECTION = "x11/gnome"
-LICENSE = "LGPL"
+require libart-lgpl.inc
-ART_CONFIG = "${HOST_ARCH}/art_config.h"
-
-# can't use gnome.oeclass due to _ in filename
-SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libart_lgpl/2.3/libart_lgpl-${PV}.tar.bz2 \
- file://${ART_CONFIG} \
- file://Makefile.am.patch;patch=1"
-
-inherit autotools pkgconfig
-
-DEPENDS = ""
-
-FILES_${PN} = "${libdir}/*.so.*"
-FILES_${PN}-dev += "${bindir}/libart2-config"
-
-S = "${WORKDIR}/libart_lgpl-${PV}"
-
-do_configure_prepend() {
- cp ${WORKDIR}/${ART_CONFIG} ${S}/art_config.h
-}
-
-EXTRA_OECONF = "--disable-gtk-doc"
-
-do_stage() {
- autotools_stage_includes
- oe_libinstall -a -so libart_lgpl_2 ${STAGING_LIBDIR}
-}
+PR = "r2"
diff --git a/packages/gnu-config/gnu-config_20050701.bb b/packages/gnu-config/gnu-config_20050701.bb
index 2f1b6eb785..8ee0a32120 100644
--- a/packages/gnu-config/gnu-config_20050701.bb
+++ b/packages/gnu-config/gnu-config_20050701.bb
@@ -29,5 +29,4 @@ do_install () {
install -m 0644 config.guess config.sub ${D}${datadir}/gnu-config/
}
-PACKAGES = "${PN}"
FILES_${PN} = "${bindir} ${datadir}/gnu-config"
diff --git a/packages/gnuplot/files/subdirs.patch b/packages/gnuplot/files/subdirs.patch
index 69c7753973..8c7d1f0d35 100644
--- a/packages/gnuplot/files/subdirs.patch
+++ b/packages/gnuplot/files/subdirs.patch
@@ -1,16 +1,11 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- gnuplot-4.0.0/Makefile.am~nodocs
-+++ gnuplot-4.0.0/Makefile.am
+--- /tmp/Makefile.am 2007-08-23 13:10:15.560659023 +0200
++++ gnuplot-4.2.0/Makefile.am 2007-08-23 13:10:34.961764629 +0200
@@ -1,7 +1,7 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*-
AUTOMAKE_OPTIONS = foreign 1.2h
--SUBDIRS = config m4 term src docs lisp man demo tutorial
-+SUBDIRS = config m4 term src man tutorial
+-SUBDIRS = config m4 term src docs $(LISPDIR) man demo tutorial share
++SUBDIRS = config m4 term src $(LISPDIR) man share
EXTRA_DIST = BUGS CodeStyle Copyright FAQ GNUmakefile INSTALL INSTALL.gnu \
Makefile.maint PATCHLEVEL PGPKEYS PORTING README README.1ST README.exp \
diff --git a/packages/gnuplot/files/term.patch b/packages/gnuplot/files/term.patch
index 2979b5ec9e..41aa8e7a97 100644
--- a/packages/gnuplot/files/term.patch
+++ b/packages/gnuplot/files/term.patch
@@ -1,14 +1,14 @@
---- gnuplot-4.0.0/src/term.h.old 2005-03-01 15:17:46.424111687 +0000
-+++ gnuplot-4.0.0/src/term.h 2005-03-01 15:18:50.961405665 +0000
-@@ -54,6 +54,7 @@
+--- gnuplot-4.2.0/src/term.h.old 2007-11-16 01:21:09.000000000 -0600
++++ gnuplot-4.2.0/src/term.h 2007-11-16 01:22:45.000000000 -0600
+@@ -70,6 +70,7 @@
*/
#ifdef SHORT_TERMLIST
# include "dumb.trm" /* dumb terminal */
+# include "qtopia.trm" /* QTopia terminal */
- # include "post.trm" /* postscript */
- # include "table.trm" /* built-in, but used for the documentation */
- # if !(defined(OS2) || defined(MSDOS) || defined(_Windows) || defined(ATARI) || defined(MTOS) || defined(AMIGA))
-@@ -432,6 +433,9 @@
+
+ # ifdef GP_ENH_EST
+ # include "estimate.trm" /* used for enhanced text processing */
+@@ -436,6 +437,9 @@
/* TeXDraw drawing package for LaTeX */
#include "texdraw.trm"
diff --git a/packages/linux/linux-handhelds-2.6/htcalpine/.mtn2git_empty b/packages/gnuplot/gnuplot-4.0.0/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/htcalpine/.mtn2git_empty
+++ b/packages/gnuplot/gnuplot-4.0.0/.mtn2git_empty
diff --git a/packages/gnuplot/files/debian-separate-x11-package.patch b/packages/gnuplot/gnuplot-4.0.0/debian-separate-x11-package.patch
index 7afa0ee00e..7afa0ee00e 100644
--- a/packages/gnuplot/files/debian-separate-x11-package.patch
+++ b/packages/gnuplot/gnuplot-4.0.0/debian-separate-x11-package.patch
diff --git a/packages/gnuplot/files/matrix.patch b/packages/gnuplot/gnuplot-4.0.0/matrix.patch
index 10f56d9f6a..10f56d9f6a 100644
--- a/packages/gnuplot/files/matrix.patch
+++ b/packages/gnuplot/gnuplot-4.0.0/matrix.patch
diff --git a/packages/gnuplot/gnuplot-4.0.0/subdirs.patch b/packages/gnuplot/gnuplot-4.0.0/subdirs.patch
new file mode 100644
index 0000000000..69c7753973
--- /dev/null
+++ b/packages/gnuplot/gnuplot-4.0.0/subdirs.patch
@@ -0,0 +1,16 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- gnuplot-4.0.0/Makefile.am~nodocs
++++ gnuplot-4.0.0/Makefile.am
+@@ -1,7 +1,7 @@
+ ## Process this file with automake to produce Makefile.in -*-Makefile-*-
+ AUTOMAKE_OPTIONS = foreign 1.2h
+
+-SUBDIRS = config m4 term src docs lisp man demo tutorial
++SUBDIRS = config m4 term src man tutorial
+
+ EXTRA_DIST = BUGS CodeStyle Copyright FAQ GNUmakefile INSTALL INSTALL.gnu \
+ Makefile.maint PATCHLEVEL PGPKEYS PORTING README README.1ST README.exp \
diff --git a/packages/gnuplot/gnuplot-4.0.0/term.patch b/packages/gnuplot/gnuplot-4.0.0/term.patch
new file mode 100644
index 0000000000..2979b5ec9e
--- /dev/null
+++ b/packages/gnuplot/gnuplot-4.0.0/term.patch
@@ -0,0 +1,20 @@
+--- gnuplot-4.0.0/src/term.h.old 2005-03-01 15:17:46.424111687 +0000
++++ gnuplot-4.0.0/src/term.h 2005-03-01 15:18:50.961405665 +0000
+@@ -54,6 +54,7 @@
+ */
+ #ifdef SHORT_TERMLIST
+ # include "dumb.trm" /* dumb terminal */
++# include "qtopia.trm" /* QTopia terminal */
+ # include "post.trm" /* postscript */
+ # include "table.trm" /* built-in, but used for the documentation */
+ # if !(defined(OS2) || defined(MSDOS) || defined(_Windows) || defined(ATARI) || defined(MTOS) || defined(AMIGA))
+@@ -432,6 +433,9 @@
+ /* TeXDraw drawing package for LaTeX */
+ #include "texdraw.trm"
+
++/* Qtopia */
++#include "qtopia.trm"
++
+ /* METAFONT */
+ #include "metafont.trm"
+
diff --git a/packages/gnuplot/gnuplot-4.2.0/subdirs.patch b/packages/gnuplot/gnuplot-4.2.0/subdirs.patch
deleted file mode 100644
index 8c7d1f0d35..0000000000
--- a/packages/gnuplot/gnuplot-4.2.0/subdirs.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- /tmp/Makefile.am 2007-08-23 13:10:15.560659023 +0200
-+++ gnuplot-4.2.0/Makefile.am 2007-08-23 13:10:34.961764629 +0200
-@@ -1,7 +1,7 @@
- ## Process this file with automake to produce Makefile.in -*-Makefile-*-
- AUTOMAKE_OPTIONS = foreign 1.2h
-
--SUBDIRS = config m4 term src docs $(LISPDIR) man demo tutorial share
-+SUBDIRS = config m4 term src $(LISPDIR) man share
-
- EXTRA_DIST = BUGS CodeStyle Copyright FAQ GNUmakefile INSTALL INSTALL.gnu \
- Makefile.maint PATCHLEVEL PGPKEYS PORTING README README.1ST README.exp \
diff --git a/packages/gnuplot/gnuplot-4.2.0/term.patch b/packages/gnuplot/gnuplot-4.2.0/term.patch
deleted file mode 100644
index 41aa8e7a97..0000000000
--- a/packages/gnuplot/gnuplot-4.2.0/term.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- gnuplot-4.2.0/src/term.h.old 2007-11-16 01:21:09.000000000 -0600
-+++ gnuplot-4.2.0/src/term.h 2007-11-16 01:22:45.000000000 -0600
-@@ -70,6 +70,7 @@
- */
- #ifdef SHORT_TERMLIST
- # include "dumb.trm" /* dumb terminal */
-+# include "qtopia.trm" /* QTopia terminal */
-
- # ifdef GP_ENH_EST
- # include "estimate.trm" /* used for enhanced text processing */
-@@ -436,6 +437,9 @@
- /* TeXDraw drawing package for LaTeX */
- #include "texdraw.trm"
-
-+/* Qtopia */
-+#include "qtopia.trm"
-+
- /* METAFONT */
- #include "metafont.trm"
-
diff --git a/packages/gnuplot/gnuplot_4.2.0.bb b/packages/gnuplot/gnuplot_4.2.0.bb
deleted file mode 100644
index 1df0c9fa21..0000000000
--- a/packages/gnuplot/gnuplot_4.2.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require gnuplot.inc
-
-PR = "r1"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/gnuplot/${PN}-${PV}.tar.gz \
- http://www.mneuroth.de/privat/zaurus/qtplot-0.2.tar.gz \
- file://subdirs.patch;patch=1 \
- file://term.patch;patch=1 \
- file://gnuplot.desktop \
- file://gnuplot.png"
diff --git a/packages/gnuplot/gnuplot_4.2.2.bb b/packages/gnuplot/gnuplot_4.2.2.bb
new file mode 100644
index 0000000000..478f6e2b0f
--- /dev/null
+++ b/packages/gnuplot/gnuplot_4.2.2.bb
@@ -0,0 +1,10 @@
+require gnuplot.inc
+
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/gnuplot/${PN}-${PV}.tar.gz \
+ http://www.mneuroth.de/privat/zaurus/qtplot-0.2.tar.gz \
+ file://subdirs.patch;patch=1 \
+ file://term.patch;patch=1 \
+ file://gnuplot.desktop \
+ file://gnuplot.png"
diff --git a/packages/gnuplot/gnuplot_cvs.bb b/packages/gnuplot/gnuplot_cvs.bb
new file mode 100644
index 0000000000..d63d31a492
--- /dev/null
+++ b/packages/gnuplot/gnuplot_cvs.bb
@@ -0,0 +1,17 @@
+require gnuplot.inc
+
+PV = "4.3.0+cvs${SRCDATE}"
+PR = "r0"
+
+SRC_URI = "cvs://anonymous@gnuplot.cvs.sourceforge.net/cvsroot/${PN};module=${PN} \
+ http://www.mneuroth.de/privat/zaurus/qtplot-0.2.tar.gz \
+ file://subdirs.patch;patch=1 \
+ file://term.patch;patch=1 \
+ file://gnuplot.desktop \
+ file://gnuplot.png"
+
+S = "${WORKDIR}/${PN}"
+
+do_configure_prepend() {
+ ./prepare
+}
diff --git a/packages/linux/linux-handhelds-2.6/htcapache/.mtn2git_empty b/packages/gnutls/gnutls-1.6.3/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/htcapache/.mtn2git_empty
+++ b/packages/gnutls/gnutls-1.6.3/.mtn2git_empty
diff --git a/packages/gnutls/gnutls/configure_madness.patch b/packages/gnutls/gnutls-1.6.3/configure_madness.patch
index 26111dfe96..26111dfe96 100644
--- a/packages/gnutls/gnutls/configure_madness.patch
+++ b/packages/gnutls/gnutls-1.6.3/configure_madness.patch
diff --git a/packages/gnutls/gnutls/gnutls-openssl.patch b/packages/gnutls/gnutls-1.6.3/gnutls-openssl.patch
index e2c189592f..e2c189592f 100644
--- a/packages/gnutls/gnutls/gnutls-openssl.patch
+++ b/packages/gnutls/gnutls-1.6.3/gnutls-openssl.patch
diff --git a/packages/gnutls/gnutls/gnutls-texinfo-euro.patch b/packages/gnutls/gnutls-1.6.3/gnutls-texinfo-euro.patch
index e2a2762424..e2a2762424 100644
--- a/packages/gnutls/gnutls/gnutls-texinfo-euro.patch
+++ b/packages/gnutls/gnutls-1.6.3/gnutls-texinfo-euro.patch
diff --git a/packages/gnutls/gnutls.inc b/packages/gnutls/gnutls.inc
index 2211d5f798..d08b0ca931 100644
--- a/packages/gnutls/gnutls.inc
+++ b/packages/gnutls/gnutls.inc
@@ -4,10 +4,7 @@ DEPENDS = "zlib libgcrypt lzo"
LICENSE = "LGPL"
-SRC_URI = "ftp://ftp.gnutls.org/pub/gnutls/gnutls-${PV}.tar.bz2 \
- file://gnutls-openssl.patch;patch=1 \
- file://gnutls-texinfo-euro.patch;patch=1 \
- file://configure_madness.patch;patch=1 "
+SRC_URI = "ftp://ftp.gnutls.org/pub/gnutls/gnutls-${PV}.tar.bz2"
inherit autotools binconfig pkgconfig
diff --git a/packages/gnutls/gnutls_1.6.3.bb b/packages/gnutls/gnutls_1.6.3.bb
index a5b5341156..ddaef1dea3 100644
--- a/packages/gnutls/gnutls_1.6.3.bb
+++ b/packages/gnutls/gnutls_1.6.3.bb
@@ -1,2 +1,9 @@
require gnutls.inc
+
+SRC_URI += "\
+ file://gnutls-openssl.patch;patch=1 \
+ file://gnutls-texinfo-euro.patch;patch=1 \
+ file://configure_madness.patch;patch=1 \
+ "
+
PR = "r3"
diff --git a/packages/gpe-conf/gpe-conf_svn.bb b/packages/gpe-conf/gpe-conf_svn.bb
index 266053073a..dfa7a8bce6 100644
--- a/packages/gpe-conf/gpe-conf_svn.bb
+++ b/packages/gpe-conf/gpe-conf_svn.bb
@@ -18,7 +18,7 @@ SRC_URI = "${GPE_SVN}"
S = "${WORKDIR}/${PN}"
-PACKAGES = "gpe-conf gpe-conf-panel"
+PACKAGES = "${PN}-dbg gpe-conf gpe-conf-panel"
FILES_${PN} = "${sysconfdir} ${bindir} ${datadir}/pixmaps \
${datadir}/applications/gpe-conf-* ${datadir}/gpe/pixmaps \
diff --git a/packages/linux/linux-handhelds-2.6/htcbeetles/.mtn2git_empty b/packages/gpe-contacts/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/htcbeetles/.mtn2git_empty
+++ b/packages/gpe-contacts/files/.mtn2git_empty
diff --git a/packages/gpe-contacts/files/handle-import-categories.patch b/packages/gpe-contacts/files/handle-import-categories.patch
new file mode 100644
index 0000000000..f64b1f6bbf
--- /dev/null
+++ b/packages/gpe-contacts/files/handle-import-categories.patch
@@ -0,0 +1,39 @@
+diff -r abc014466432 import-vcard.c
+--- a/import-vcard.c Mon Jan 21 01:55:53 2008 +0200
++++ b/import-vcard.c Mon Jan 21 02:31:28 2008 +0200
+@@ -77,6 +77,35 @@ do_import_vcard (MIMEDirVCard *card)
+ {
+ gpe_tag_pair *t = i->data;
+
++ if (!strcasecmp(t->tag, "CATEGORY"))
++ {
++ char *p, *e;
++ int cat_id;
++
++ for (p = t->value; p; p = e)
++ {
++ while (*p == ' ')
++ p++;
++ e = strchr(p, ',');
++ if (e)
++ *e++ = 0;
++ cat_id = gpe_pim_category_id(p);
++ if (!cat_id)
++ {
++ if (!gpe_pim_category_new (p, &cat_id))
++ {
++ gpe_error_box ("Unable to create category for imported item");
++ sqlite_close (db);
++ return -2;
++ }
++ }
++ sqlite_exec_printf (db, "insert into contacts values ('%d', 'CATEGORY', '%d')", NULL, NULL, NULL,
++ id, cat_id);
++ }
++
++ }
++
++
+ sqlite_exec_printf (db, "insert into contacts values ('%d', '%q', '%q')", NULL, NULL, NULL,
+ id, t->tag, t->value);
+
diff --git a/packages/gpe-contacts/gpe-contacts_svn.bb b/packages/gpe-contacts/gpe-contacts_svn.bb
index b5a22ebad2..9a626572a5 100644
--- a/packages/gpe-contacts/gpe-contacts_svn.bb
+++ b/packages/gpe-contacts/gpe-contacts_svn.bb
@@ -3,12 +3,13 @@ SECTION = "gpe"
LICENSE = "GPL"
DEPENDS = "libcontactsdb libgpewidget libgpepimc libdisplaymigration libgpevtype dbus"
RDEPENDS = "gpe-icons"
-PV = "0.43+svn${SRCDATE}"
-PR = "r0"
+PV = "0.47+svnr${SRCREV}"
+PR = "r2"
inherit autotools gpe
SRC_URI = "${GPE_SVN}"
+SRC_URI += "file://handle-import-categories.patch;patch=1"
S = "${WORKDIR}/${PN}"
diff --git a/packages/gpe-filemanager/gpe-filemanager_0.31.bb b/packages/gpe-filemanager/gpe-filemanager_0.31.bb
new file mode 100644
index 0000000000..84bf2d3d2f
--- /dev/null
+++ b/packages/gpe-filemanager/gpe-filemanager_0.31.bb
@@ -0,0 +1,13 @@
+
+GPE_TARBALL_SUFFIX = "bz2"
+inherit autotools gpe
+
+PR = "r0"
+LICENSE = "GPL"
+DESCRIPTION = "GPE file manager"
+DEPENDS = "libgpewidget gnome-vfs dbus-glib"
+SECTION = "gpe"
+RDEPENDS = "gpe-icons"
+RRECOMMENDS = "gnome-vfs-plugin-file gnome-vfs-plugin-smb gnome-vfs-plugin-ftp gnome-vfs-plugin-computer gnome-vfs-plugin-network gnome-vfs-plugin-sftp gnome-vfs-plugin-http"
+
+FILES_${PN} += " ${datadir}/gpe"
diff --git a/packages/gpe-login/files/c-locale.patch b/packages/gpe-login/files/c-locale.patch
new file mode 100644
index 0000000000..109825b53b
--- /dev/null
+++ b/packages/gpe-login/files/c-locale.patch
@@ -0,0 +1,11 @@
+--- a/gpe-login.c.org 2007-11-29 16:11:53.000000000 +0200
++++ a/gpe-login.c 2008-01-02 20:13:27.000000000 +0200
+@@ -1180,7 +1180,7 @@
+ language_menu = gtk_option_menu_new ();
+
+ c_locale = g_malloc (sizeof (locale_item_t));
+- c_locale->name = "English";
++ c_locale->name = "English(C locale)";
+ c_locale->locale = "C";
+ locale_system_list = g_slist_append (NULL, c_locale);
+
diff --git a/packages/gpe-login/gpe-login_0.90.bb b/packages/gpe-login/gpe-login_0.90.bb
index 253d581953..c22d259a9f 100644
--- a/packages/gpe-login/gpe-login_0.90.bb
+++ b/packages/gpe-login/gpe-login_0.90.bb
@@ -5,7 +5,7 @@ LICENSE = "GPL"
DEPENDS = "gtk+ libgpewidget gpe-ownerinfo xkbd"
RDEPENDS = "xkbd gpe-theme-clearlooks"
RPROVIDES_${PN} = "gpe-session-starter"
-PR = "r5"
+PR = "r6"
SRC_URI_OVERRIDES_PACKAGE_ARCH = "1"
@@ -19,6 +19,7 @@ SRC_URI += " file://chvt-keylaunch.patch;patch=1 "
SRC_URI += " file://lock-on-supend.patch;patch=1 "
SRC_URI += " file://gpe-xcalibrate-rises-from-dead.patch;patch=1 "
SRC_URI += " file://size-autolock-properly.patch;patch=1 "
+SRC_URI += " file://c-locale.patch;patch=1 "
SRC_URI_append_spitz = "file://brightness-adjust-keyluanchrc.patch;patch=1"
SRC_URI_append_akita = "file://brightness-adjust-keyluanchrc.patch;patch=1"
diff --git a/packages/linux/linux-handhelds-2.6/htcblueangel/.mtn2git_empty b/packages/gpe-mini-browser/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/htcblueangel/.mtn2git_empty
+++ b/packages/gpe-mini-browser/files/.mtn2git_empty
diff --git a/packages/gpe-mini-browser/files/mini-browser-desktop-fix.patch b/packages/gpe-mini-browser/files/mini-browser-desktop-fix.patch
new file mode 100644
index 0000000000..4912abb23b
--- /dev/null
+++ b/packages/gpe-mini-browser/files/mini-browser-desktop-fix.patch
@@ -0,0 +1,16 @@
+--- gpe-mini-browser-0.21.old/gpe-mini-browser-0.21//gpe-mini-browser.desktop.in.in 2007-01-09 14:53:31.000000000 +0200
++++ gpe-mini-browser-0.21/gpe-mini-browser.desktop.in.in 2007-12-11 20:45:04.749584640 +0200
+@@ -2,9 +2,8 @@
+ _Name=Mini Web Browser
+ _Comment=Browse the web
+ Exec=gpe-mini-browser
+-Terminal=0
++Terminal=false
+ Type=Application
+-Icon=gpe-mini-browser.png
+-Categories=Application;PIM;GPE
+-StartupNotify=True
+-
++Icon=gpe-mini-browser
++Categories=X-GPE;X-PIM;X-Internet;X-Browser;
++StartupNotify=true
diff --git a/packages/gpe-mini-browser/gpe-mini-browser_0.21.bb b/packages/gpe-mini-browser/gpe-mini-browser_0.21.bb
index 20732ea5b2..2a9249818b 100644
--- a/packages/gpe-mini-browser/gpe-mini-browser_0.21.bb
+++ b/packages/gpe-mini-browser/gpe-mini-browser_0.21.bb
@@ -4,7 +4,9 @@ SRC_URI = "http://gpe.linuxtogo.org/download/source/gpe-mini-browser-${PV}.tar.g
DEPENDS = "osb-nrcit sqlite libgpewidget"
RRECOMMENDS = "gdk-pixbuf-loader-gif gdk-pixbuf-loader-png gdk-pixbuf-loader-jpeg"
-PR = "r0"
+PR = "r1"
+
+SRC_URI += "file://mini-browser-desktop-fix.patch;patch=0"
S = "${WORKDIR}/gpe-mini-browser-${PV}"
diff --git a/packages/gpe-nmf/gpe-nmf.inc b/packages/gpe-nmf/gpe-nmf.inc
index d3b39abdcf..b7992e824a 100644
--- a/packages/gpe-nmf/gpe-nmf.inc
+++ b/packages/gpe-nmf/gpe-nmf.inc
@@ -1,5 +1,5 @@
DESCRIPTION = "GPE audio player"
-SECTION = "gpe"
+SECTION = "gpe/multimedia"
PRIORITY = "optional"
LICENSE = "GPL"
DEPENDS = "gtk+ libgpewidget gstreamer gst-plugins"
diff --git a/packages/gpe-nmf/gpe-nmf_0.22.bb b/packages/gpe-nmf/gpe-nmf_0.22.bb
index 8b70d83c6b..98b7683232 100644
--- a/packages/gpe-nmf/gpe-nmf_0.22.bb
+++ b/packages/gpe-nmf/gpe-nmf_0.22.bb
@@ -2,7 +2,7 @@ require gpe-nmf.inc
RDEPENDS += "gst-plugin-decodebin"
RRECOMMENDS += "gst-plugin-ivorbis gst-plugin-tcp"
-PR = "r2"
+PR = "r3"
SRC_URI += " file://playlist-segfault.patch;patch=1;pnum=0 \
file://fix-includepath.patch;patch=1"
diff --git a/packages/linux/linux-handhelds-2.6/htchimalaya/.mtn2git_empty b/packages/gpe-scap/gpe-scap-1.3/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/htchimalaya/.mtn2git_empty
+++ b/packages/gpe-scap/gpe-scap-1.3/.mtn2git_empty
diff --git a/packages/gpe-scap/gpe-scap-1.3/allow-glade-2.4.0.patch b/packages/gpe-scap/gpe-scap-1.3/allow-glade-2.4.0.patch
new file mode 100644
index 0000000000..766c5a51d9
--- /dev/null
+++ b/packages/gpe-scap/gpe-scap-1.3/allow-glade-2.4.0.patch
@@ -0,0 +1,26 @@
+Index: gpe-scap-1.3/configure
+===================================================================
+--- gpe-scap-1.3.orig/configure 2008-01-17 17:01:49.000000000 +0100
++++ gpe-scap-1.3/configure 2008-01-17 17:03:01.000000000 +0100
+@@ -6327,7 +6327,7 @@
+
+
+
+-GLADE_MODULES="libglade-2.0 >= 2.4.2"
++GLADE_MODULES="libglade-2.0 >= 2.4.0"
+
+ pkg_failed=no
+ { echo "$as_me:$LINENO: checking for GLADE" >&5
+Index: gpe-scap-1.3/configure.ac
+===================================================================
+--- gpe-scap-1.3.orig/configure.ac 2008-01-17 17:35:15.000000000 +0100
++++ gpe-scap-1.3/configure.ac 2008-01-17 17:35:20.000000000 +0100
+@@ -29,7 +29,7 @@
+ AC_SUBST(GTK_CFLAGS)
+ AC_SUBST(GTK_LIBS)
+
+-GLADE_MODULES="libglade-2.0 >= 2.4.2"
++GLADE_MODULES="libglade-2.0 >= 2.4.0"
+ PKG_CHECK_MODULES(GLADE, $GLADE_MODULES)
+ AC_SUBST(GLADE_CFLAGS)
+ AC_SUBST(GLADE_LIBS)
diff --git a/packages/gpe-scap/gpe-scap_1.3.bb b/packages/gpe-scap/gpe-scap_1.3.bb
index aec5819e6e..438a80f4a3 100644
--- a/packages/gpe-scap/gpe-scap_1.3.bb
+++ b/packages/gpe-scap/gpe-scap_1.3.bb
@@ -11,3 +11,5 @@ DEPENDS = "glib-2.0 gtk+ libgpewidget libglade libsoup"
GPE_TARBALL_SUFFIX = "bz2"
inherit gpe autotools
+
+SRC_URI += " file://allow-glade-2.4.0.patch;patch=1"
diff --git a/packages/gpe-session-scripts/files/angstrom/matchbox-session b/packages/gpe-session-scripts/files/angstrom/matchbox-session
index b0bec8c742..d48b9ed308 100644
--- a/packages/gpe-session-scripts/files/angstrom/matchbox-session
+++ b/packages/gpe-session-scripts/files/angstrom/matchbox-session
@@ -1,8 +1,6 @@
#!/bin/sh
-XRES=`xdpyinfo | awk '/dimensions/ { print $2 }' | cut -dx -f1`
-
- matchbox-desktop &
-
-matchbox-panel --no-flip --orientation south &
+#XRES=`xdpyinfo | awk '/dimensions/ { print $2 }' | cut -dx -f1`
+matchbox-desktop &
+matchbox-panel --no-flip --orientation south &
diff --git a/packages/gpe-session-scripts/files/matchbox-session b/packages/gpe-session-scripts/files/matchbox-session
index e4c0e0c68e..77d5db9df8 100644
--- a/packages/gpe-session-scripts/files/matchbox-session
+++ b/packages/gpe-session-scripts/files/matchbox-session
@@ -1,8 +1,6 @@
#!/bin/sh
-XRES=`xdpyinfo | awk '/dimensions/ { print $2 }' | cut -dx -f1`
-
- matchbox-desktop &
-
-MB_MENU_PANEL_DISABLED=1 matchbox-panel --orientation south &
+#XRES=`xdpyinfo | awk '/dimensions/ { print $2 }' | cut -dx -f1`
+matchbox-desktop &
+MB_MENU_PANEL_DISABLED=1 matchbox-panel --orientation south &
diff --git a/packages/gpe-session-scripts/gpe-session-scripts_0.67.bb b/packages/gpe-session-scripts/gpe-session-scripts_0.67.bb
index 75b79ec870..bab26e7df0 100644
--- a/packages/gpe-session-scripts/gpe-session-scripts_0.67.bb
+++ b/packages/gpe-session-scripts/gpe-session-scripts_0.67.bb
@@ -11,7 +11,7 @@ DEPENDS = "matchbox-wm matchbox-panel xtscal gpe-question matchbox-applet-inputm
SRC_URI += "file://matchbox-session \
file://disable-composite.xsettings"
-PR = "r10"
+PR = "r11"
#apply a patch to set the fontsize for bigdpi (200+) devices to 5
SRC_URI_append_hx4700 = " file://highdpifontfix.patch;patch=1"
@@ -35,7 +35,7 @@ do_install_append() {
fi
install -d ${D}${sysconfdir}/matchbox
install ${WORKDIR}/matchbox-session ${D}${sysconfdir}/matchbox/session
- echo -e "exec matchbox-window-manager ${CURSOR_HIDE} \$@ \n" >> ${D}${sysconfdir}/matchbox/session
+ printf "exec matchbox-window-manager ${CURSOR_HIDE} \$@ \n" >> ${D}${sysconfdir}/matchbox/session
install -d ${D}${sysconfdir}/gpe/xsettings-default.d
diff --git a/packages/gpephone/addressbook_svn.bb b/packages/gpephone/addressbook_svn.bb
index 663c38c09c..cb913bc663 100644
--- a/packages/gpephone/addressbook_svn.bb
+++ b/packages/gpephone/addressbook_svn.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "LiPS address book"
SECTION = "gpe"
PRIORITY = "optional"
PR = "r0"
-PV = "0.1+svn-${SRCDATE}"
+PV = "0.1+svnr-${SRCREV}"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpephone/almmgrd_svn.bb b/packages/gpephone/almmgrd_svn.bb
new file mode 100644
index 0000000000..70d02ff018
--- /dev/null
+++ b/packages/gpephone/almmgrd_svn.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Alarm manager daemon"
+SECTION = "gpephone"
+PRIORITY = "required"
+LICENSE = "LiPS"
+DEPENDS = "glib-2.0 libiac sqlite3 libcalenabler2 libalmmgr"
+PV = "0.0+svnr-${SRCREV}"
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = "${WORKDIR}/${PN}"
diff --git a/packages/linux/linux-handhelds-2.6/htcsable/.mtn2git_empty b/packages/gpephone/calendar2/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/htcsable/.mtn2git_empty
+++ b/packages/gpephone/calendar2/.mtn2git_empty
diff --git a/packages/gpephone/calendar2/disable-broken-tests.patch b/packages/gpephone/calendar2/disable-broken-tests.patch
new file mode 100644
index 0000000000..fa3102f5a0
--- /dev/null
+++ b/packages/gpephone/calendar2/disable-broken-tests.patch
@@ -0,0 +1,9 @@
+--- calendar2/Makefile.am~ 2008-01-24 16:54:38.000000000 +0100
++++ calendar2/Makefile.am 2008-01-24 16:54:38.000000000 +0100
+@@ -1,5 +1,5 @@
+ #SUBDIRS = src announce atd schedule test res po
+-SUBDIRS = src test res po
++SUBDIRS = src res po
+
+ desktopdir = $(GPE_DIR)/share/applications
+ desktop_in_files = cal.desktop.in
diff --git a/packages/gpephone/calendar2_svn.bb b/packages/gpephone/calendar2_svn.bb
new file mode 100644
index 0000000000..c066fc77c0
--- /dev/null
+++ b/packages/gpephone/calendar2_svn.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Calendar application for GPE Phone Edition"
+LICENSE = "LiPS"
+SECTION = "gpe"
+PRIORITY = "optional"
+PV = "0.0+svnr-${SRCREV}"
+PR = "r1"
+
+DEPENDS = "gtk+ libgpewidget libgpephone libgemwidget dbus-glib libcalenabler2 libiac"
+
+inherit gpephone autotools
+
+SRC_URI = "${GPEPHONE_SVN} \
+ file://disable-broken-tests.patch;patch=1"
+
+S = ${WORKDIR}/${PN}
+
+FILES_${PN} += "${datadir}/database ${datadir}/res"
diff --git a/packages/gpephone/contact_svn.bb b/packages/gpephone/contact_svn.bb
index 0b785ac9f0..ef4d2707ab 100644
--- a/packages/gpephone/contact_svn.bb
+++ b/packages/gpephone/contact_svn.bb
@@ -3,7 +3,7 @@ SECTION = "gpe"
PRIORITY = "optional"
LICENSE = "LiPS"
DEPENDS = "gtk+ libgpephone dbus-glib libabenabler2 librecord2 libgemwidget"
-PV = "0.0+svn-${SRCREV}"
+PV = "0.0+svnr-${SRCREV}"
PR = "r0"
inherit gpephone autotools
diff --git a/packages/gpephone/dialer_svn.bb b/packages/gpephone/dialer_svn.bb
new file mode 100644
index 0000000000..7b1b883652
--- /dev/null
+++ b/packages/gpephone/dialer_svn.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "GPE Phone Edition phone dialer"
+SECTION = "gpe"
+PRIORITY = "optional"
+LICENSE = "LiPS"
+DEPENDS = "gtk+ libgpephone libgemwidget"
+PV = "0.0+svnr-${SRCREV}"
+PR = "r0"
+
+inherit gpephone autotools
+
+SRC_URI = ${GPEPHONE_SVN}
+
+EXTRA_OECONF = "--disable-hiker"
+
+S = "${WORKDIR}/${PN}"
+
+
+FILES_${PN} += "${datadir}"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpephone/firewall_svn.bb b/packages/gpephone/firewall_svn.bb
index 77b2122449..b3d7aee848 100644
--- a/packages/gpephone/firewall_svn.bb
+++ b/packages/gpephone/firewall_svn.bb
@@ -5,8 +5,6 @@ PRIORITY = "optional"
PR = "r0"
PV = "0.0+svnr-${SRCREV}"
-SRCREV_pn-${PN} ?= "1400"
-
DEFAULT_PREFERENCE = "-1"
DEPENDS = "gtk+ libmsgenabler libabenabler libiac libgpewidget libgpephone gconf-dbus"
diff --git a/packages/gpephone/gpe-applauncher_0.11.bb b/packages/gpephone/gpe-applauncher_0.11.bb
index 1efcd793e0..204f7828f9 100644
--- a/packages/gpephone/gpe-applauncher_0.11.bb
+++ b/packages/gpephone/gpe-applauncher_0.11.bb
@@ -2,7 +2,7 @@ LICENSE = "GPL"
DESCRIPTION = "A cellphone application launcher."
SECTION = "gpe"
PRIORITY = "optional"
-PR = "r1"
+PR = "r2"
SRC_URI_OVERRIDES_PACKAGE_ARCH = "0"
@@ -18,7 +18,7 @@ inherit gpephone autotools
SRC_URI += "file://hotkeys.conf \
file://softkeys.conf"
-EXTRA_OECONF = "--disable-gridlayout"
+EXTRA_OECONF = "--enable-gridlayout"
FILES_${PN} = '${datadir} ${bindir}'
FILES_gpe-applauncher-config = '${sysconfdir}/gpe/'
diff --git a/packages/gpephone/gpe-applauncher_svn.bb b/packages/gpephone/gpe-applauncher_svn.bb
index 4fe82877e3..9360c6f6d3 100644
--- a/packages/gpephone/gpe-applauncher_svn.bb
+++ b/packages/gpephone/gpe-applauncher_svn.bb
@@ -2,8 +2,8 @@ LICENSE = "GPL"
DESCRIPTION = "A cellphone application launcher."
SECTION = "gpe"
PRIORITY = "optional"
-PR = "r0"
-PV = "0.11+svn-${SRCREV}"
+PR = "r1"
+PV = "0.11+svnr-${SRCREV}"
SRC_URI_OVERRIDES_PACKAGE_ARCH = "0"
DEFAULT_PREFERENCE = "-1"
@@ -24,7 +24,7 @@ RDEPENDS_${PN} += "gpe-applauncher-config"
SRC_URI += "file://hotkeys.conf \
file://softkeys.conf"
-EXTRA_OECONF = "--disable-gridlayout"
+EXTRA_OECONF = "--enable-gridlayout"
FILES_${PN} = '${datadir} ${bindir}'
FILES_gpe-applauncher-config = '${sysconfdir}/gpe/'
diff --git a/packages/gpephone/libabenabler2_svn.bb b/packages/gpephone/libabenabler2_svn.bb
index ea070092a2..004ba3ec46 100644
--- a/packages/gpephone/libabenabler2_svn.bb
+++ b/packages/gpephone/libabenabler2_svn.bb
@@ -3,15 +3,15 @@ SECTION = "gpe/libs"
PRIORITY = "optional"
LICENSE = "LGPL"
DEPENDS = "glib-2.0 librecord2 gconf sqlite3"
-PV = "0.0+svn-${SRCDATE}"
+PV = "0.0+svnr-${SRCREV}"
PR = "r0"
+inherit gpephone pkgconfig autotools
+
SRC_URI = "${GPEPHONE_SVN}"
S = "${WORKDIR}/${PN}"
-inherit gpephone pkgconfig autotools
-
do_stage () {
autotools_stage_all
}
diff --git a/packages/gpephone/libabenabler_svn.bb b/packages/gpephone/libabenabler_svn.bb
index f362c853d6..4468c3580e 100644
--- a/packages/gpephone/libabenabler_svn.bb
+++ b/packages/gpephone/libabenabler_svn.bb
@@ -4,7 +4,7 @@ SECTION = "gpe/libs"
PRIORITY = "optional"
DEPENDS = "glib-2.0 librecord liblipsevent libim sqlite3"
PR = "r0"
-PV = "0.1+svn-${SRCDATE}"
+PV = "0.1+svnr-${SRCREV}"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpephone/libalmmgr_svn.bb b/packages/gpephone/libalmmgr_svn.bb
new file mode 100644
index 0000000000..cbae037109
--- /dev/null
+++ b/packages/gpephone/libalmmgr_svn.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "LiPS alarm framework library."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+LICENSE = "LiPS"
+DEPENDS = "glib-2.0 libiac"
+PV = "0.0+svnr-${SRCREV}"
+PR = "r0"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = ${WORKDIR}/${PN}
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/libcalenabler2_svn.bb b/packages/gpephone/libcalenabler2_svn.bb
index 6144e055de..e3bf129ab1 100644
--- a/packages/gpephone/libcalenabler2_svn.bb
+++ b/packages/gpephone/libcalenabler2_svn.bb
@@ -2,17 +2,16 @@ DESCRIPTION = "LiPS calendar API."
SECTION = "gpe/libs"
PRIORITY = "optional"
LICENSE = "LiPS"
-DEPENDS = "glib-2.0 sqlite3 libical"
-PV = "0.0+svn-${SRCREV}"
+DEPENDS = "glib-2.0 sqlite3 libical libalmmgr"
+PV = "0.0+svnr-${SRCREV}"
PR = "r0"
-SRC_URI = "${GPEPHONE_SVN}"
-S = "${WORKDIR}/${PN}"
+inherit gpephone pkgconfig autotools
-GPE_TARBALL_SUFFIX = "bz2"
+SRC_URI = "${GPEPHONE_SVN}"
-inherit gpephone pkgconfig autotools
+S = "${WORKDIR}/${PN}"
do_stage () {
autotools_stage_all
diff --git a/packages/gpephone/libgemwidget_svn.bb b/packages/gpephone/libgemwidget_svn.bb
new file mode 100644
index 0000000000..f4e2e350d8
--- /dev/null
+++ b/packages/gpephone/libgemwidget_svn.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Extended widget library for GPE phone environment."
+LICENSE = "LiPS"
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "gtk+ libiac libgpephone gnome-vfs libxdamage libxcomposite libgpewidget"
+PV = "1.0+svnr-${SRCREV}"
+PR = "r0"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = ${WORKDIR}/${PN}
+
+FILES_${PN} += "${datadir}/gem"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/libgpephone_svn.bb b/packages/gpephone/libgpephone_svn.bb
new file mode 100644
index 0000000000..ce960ac3cc
--- /dev/null
+++ b/packages/gpephone/libgpephone_svn.bb
@@ -0,0 +1,16 @@
+LICENSE = "LGPL"
+DESCRIPTION = "Base library for GPE phone environment."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "gtk+ gtk-doc dbus-glib"
+PV = "0.4+svnr-${SRCREV}"
+PR = "r0"
+
+inherit gpephone pkgconfig autotools
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/linux/linux-handhelds-2.6/htcuniversal/.mtn2git_empty b/packages/gpephone/libiac2/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/htcuniversal/.mtn2git_empty
+++ b/packages/gpephone/libiac2/.mtn2git_empty
diff --git a/packages/gpephone/libiac2/disable-tests.patch b/packages/gpephone/libiac2/disable-tests.patch
new file mode 100644
index 0000000000..5345d1cc97
--- /dev/null
+++ b/packages/gpephone/libiac2/disable-tests.patch
@@ -0,0 +1,25 @@
+--- Makefile.am~ 2008-01-10 17:43:18.000000000 +0100
++++ Makefile.am 2008-01-10 17:43:18.000000000 +0100
+@@ -1,4 +1,4 @@
+-SUBDIRS = src include test po
++SUBDIRS = src include po
+
+ if BUILD_DAEMON
+ SUBDIRS += daemon
+--- configure.ac~ 2008-01-10 17:50:03.000000000 +0100
++++ configure.ac 2008-01-10 17:50:03.000000000 +0100
+@@ -40,14 +40,11 @@
+ AM_CONDITIONAL(BUILD_DAEMON,
+ test x$enable_daemon = xyes)
+
+-AM_PATH_CUNIT
+-
+ AC_CONFIG_FILES([
+ Makefile
+ daemon/Makefile
+ src/Makefile
+ include/Makefile
+-test/Makefile
+ po/Makefile.in
+ libiac2.pc
+ ])
diff --git a/packages/gpephone/libiac2_svn.bb b/packages/gpephone/libiac2_svn.bb
new file mode 100644
index 0000000000..7ae0c7b693
--- /dev/null
+++ b/packages/gpephone/libiac2_svn.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "LiPS IPC library."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+LICENSE = "LiPS"
+DEPENDS = "gtk+ gtk-doc dbus-glib"
+PV = "0.0+svnr-${SRCREV}"
+PR = "r0"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN} \
+ file://disable-tests.patch;patch=1;pnum=0"
+
+EXTRA_OECONF = "--enable-gui --enable-test=no --with-cuint=no"
+
+S = ${WORKDIR}/${PN}
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/libiac_svn.bb b/packages/gpephone/libiac_svn.bb
new file mode 100644
index 0000000000..0cd1d6487d
--- /dev/null
+++ b/packages/gpephone/libiac_svn.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "LiPS IPC library."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+LICENSE = "LiPS"
+DEPENDS = "gtk+ gtk-doc"
+PV = "1.0+svnr-${SRCREV}"
+PR = "r0"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = ${WORKDIR}/${PN}
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/linux/linux-handhelds-2.6/htcwallaby/.mtn2git_empty b/packages/gpephone/libim2/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/htcwallaby/.mtn2git_empty
+++ b/packages/gpephone/libim2/.mtn2git_empty
diff --git a/packages/gpephone/libim2/disable-tests.patch b/packages/gpephone/libim2/disable-tests.patch
new file mode 100644
index 0000000000..c794abd777
--- /dev/null
+++ b/packages/gpephone/libim2/disable-tests.patch
@@ -0,0 +1,11 @@
+--- libim2/Makefile.am~ 2008-01-12 01:24:42.000000000 +0100
++++ libim2/Makefile.am 2008-01-12 01:24:42.000000000 +0100
+@@ -2,7 +2,7 @@
+ # have all needed files, that a GNU package needs
+ AUTOMAKE_OPTIONS = foreign 1.4
+
+-SUBDIRS = src include test
++SUBDIRS = src include
+
+ #servicesdir = @DBUS_SERVICES_DIR@
+ #services_DATA = improxy.service
diff --git a/packages/gpephone/libim2_svn.bb b/packages/gpephone/libim2_svn.bb
new file mode 100644
index 0000000000..510877ce3e
--- /dev/null
+++ b/packages/gpephone/libim2_svn.bb
@@ -0,0 +1,22 @@
+LICENSE = "LGPL"
+DESCRIPTION = "LiPS instant messenger library."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "glib-2.0 librecord2 libabenabler2 liblipsevent2 telepathy-glib telepathy-mission-control"
+PV = "0.0+svnr-${SRCREV}"
+PR = "r1"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN} \
+ file://disable-tests.patch;patch=1"
+
+EXTRA_OECONF = "--enable-test=no"
+
+S = ${WORKDIR}/libim2
+
+FILES_${PN} += " ${datadir}/dbus-1"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/liblipsevent2_svn.bb b/packages/gpephone/liblipsevent2_svn.bb
new file mode 100644
index 0000000000..5d2330c671
--- /dev/null
+++ b/packages/gpephone/liblipsevent2_svn.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "LiPS event model library."
+LICENSE = "LiPS"
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "glib-2.0"
+PV = "0.0+svnr-${SRCREV}"
+PR = "r0"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = ${WORKDIR}/${PN}
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/libmsgenabler2_svn.bb b/packages/gpephone/libmsgenabler2_svn.bb
new file mode 100644
index 0000000000..a294dc93b7
--- /dev/null
+++ b/packages/gpephone/libmsgenabler2_svn.bb
@@ -0,0 +1,23 @@
+LICENSE = "LiPS"
+DESCRIPTION = "LiPS message backend library."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "glib-2.0 dbus-glib librecord2 liblipsevent2 telepathy-mission-control libgsmd-lips"
+PV = "0.0+svnr-${SRCREV}"
+PR = "r2"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = ${WORKDIR}/${PN}
+
+FILES_${PN} += "${datadir}/libmsgenabler2 ${libdir}/msg-providers/*.0"
+FILES_${PN}-dev += "${libdir}/msg-providers/*.so ${libdir}/msg-providers/*a"
+FILES_${PN}-dbg += "${libdir}/msg-providers/.debug"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/libmsgenabler_1.0.bb b/packages/gpephone/libmsgenabler_1.0.bb
index 0522507db0..b8d202a5dd 100644
--- a/packages/gpephone/libmsgenabler_1.0.bb
+++ b/packages/gpephone/libmsgenabler_1.0.bb
@@ -3,12 +3,14 @@ DESCRIPTION = "LiPS message backend library."
SECTION = "gpe/libs"
PRIORITY = "optional"
DEPENDS = "glib-2.0 dbus-glib librecord sqlite3"
-PR = "r0"
+PR = "r1"
GPE_TARBALL_SUFFIX = "bz2"
inherit gpephone pkgconfig autotools
+FILES_${PN} += "$(datadir)/libmsgenabler"
+
do_stage () {
autotools_stage_all
}
diff --git a/packages/gpephone/libmsgenabler_svn.bb b/packages/gpephone/libmsgenabler_svn.bb
new file mode 100644
index 0000000000..c8672e143e
--- /dev/null
+++ b/packages/gpephone/libmsgenabler_svn.bb
@@ -0,0 +1,21 @@
+LICENSE = "LiPS"
+DESCRIPTION = "LiPS message backend library."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "glib-2.0 dbus-glib librecord sqlite3"
+PV = "1.0+svnr-${SRCREV}"
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+FILES_${PN} += "$(datadir)/libmsgenabler"
+
+S = "${WORKDIR}/${PN}"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/librecord2_svn.bb b/packages/gpephone/librecord2_svn.bb
index 6580f6566f..378032dabf 100644
--- a/packages/gpephone/librecord2_svn.bb
+++ b/packages/gpephone/librecord2_svn.bb
@@ -4,7 +4,7 @@ SECTION = "gpe/libs"
PRIORITY = "optional"
DEPENDS = "glib-2.0 e2fsprogs-libs sqlite3"
PR = "r0"
-PV = "0.1+svn-${SRCDATE}"
+PV = "0.1+svnr-${SRCREV}"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpephone/libsettings_svn.bb b/packages/gpephone/libsettings_svn.bb
index e436849d74..74e1190c5a 100644
--- a/packages/gpephone/libsettings_svn.bb
+++ b/packages/gpephone/libsettings_svn.bb
@@ -3,7 +3,7 @@ SECTION = "gpe/libs"
PRIORITY = "required"
LICENSE = "LiPS"
DEPENDS = "glib-2.0 gconf-dbus"
-PV = "0.0+svn-${SRCDATE}"
+PV = "0.0+svnr-${SRCREV}"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpephone/libtapi_svn.bb b/packages/gpephone/libtapi_svn.bb
new file mode 100644
index 0000000000..68e578728a
--- /dev/null
+++ b/packages/gpephone/libtapi_svn.bb
@@ -0,0 +1,17 @@
+LICENSE = "LiPS"
+DESCRIPTION = "LiPS telephony library."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "gtk+ libglade libgsmd"
+PV = "0.0+svnr-${SRCREV}"
+PR = "r0"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/libvoc_svn.bb b/packages/gpephone/libvoc_svn.bb
new file mode 100644
index 0000000000..3389c7d10a
--- /dev/null
+++ b/packages/gpephone/libvoc_svn.bb
@@ -0,0 +1,17 @@
+LICENSE = "LiPS"
+DESCRIPTION = "LiPS voice call library."
+SECTION = "gpe/libs"
+PRIORITY = "optional"
+DEPENDS = "gtk+ libglade libgsmd"
+PV = "0.0+svnr-${SRCREV}"
+PR = "r0"
+
+inherit gpephone pkgconfig autotools
+
+SRC_URI = "${GPEPHONE_SVN}"
+
+S = "${WORKDIR}/${PN}"
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/gpephone/machined_svn.bb b/packages/gpephone/machined_svn.bb
index 5c96cfa97c..0c5ccfff51 100644
--- a/packages/gpephone/machined_svn.bb
+++ b/packages/gpephone/machined_svn.bb
@@ -3,7 +3,7 @@ SECTION = "gpephone"
PRIORITY = "required"
LICENSE = "GPL"
DEPENDS = "glib-2.0 dbus-glib gtk+"
-PV = "0.1+svn-${SRCDATE}"
+PV = "0.1+svnr-${SRCREV}"
PR = "r0"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpephone/ptim-engine_svn.bb b/packages/gpephone/ptim-engine_svn.bb
index 37c99f7dd1..281ee72c26 100644
--- a/packages/gpephone/ptim-engine_svn.bb
+++ b/packages/gpephone/ptim-engine_svn.bb
@@ -3,7 +3,7 @@ SECTION = "gpephone"
PRIORITY = "optional"
LICENSE = "LiPS"
DEPENDS = "gtk+ ptim-headers"
-PV = "0.1+svn-${SRCDATE}"
+PV = "0.1+svnr-${SRCREV}"
PR = "r1"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpephone/ptim-headers_svn.bb b/packages/gpephone/ptim-headers_svn.bb
index 304c103505..4384feccbd 100644
--- a/packages/gpephone/ptim-headers_svn.bb
+++ b/packages/gpephone/ptim-headers_svn.bb
@@ -3,7 +3,7 @@ SECTION = "gpephone"
PRIORITY = "optional"
LICENSE = "LiPS"
DEPENDS = "gtk+"
-PV = "0.1+svn-${SRCDATE}"
+PV = "0.1+svnr-${SRCREV}"
inherit gpephone pkgconfig autotools
diff --git a/packages/gpephone/ptim-helper_svn.bb b/packages/gpephone/ptim-helper_svn.bb
index 3461de6225..71b004e92b 100644
--- a/packages/gpephone/ptim-helper_svn.bb
+++ b/packages/gpephone/ptim-helper_svn.bb
@@ -3,7 +3,7 @@ SECTION = "gpephone"
PRIORITY = "optional"
LICENSE = "LiPS"
DEPENDS = "gtk+ ptim-headers"
-PV = "0.1+svn-${SRCDATE}"
+PV = "0.1+svnr-${SRCREV}"
PR = "r1"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpephone/ptim-manager_svn.bb b/packages/gpephone/ptim-manager_svn.bb
index 5c8042c5d5..da0f4e6af4 100644
--- a/packages/gpephone/ptim-manager_svn.bb
+++ b/packages/gpephone/ptim-manager_svn.bb
@@ -3,7 +3,7 @@ SECTION = "gpephone"
PRIORITY = "optional"
LICENSE = "LiPS"
DEPENDS = "gtk+ ptim-headers libiac"
-PV = "0.1+svn-${SRCDATE}"
+PV = "0.1+svnr-${SRCREV}"
PR = "r2"
DEFAULT_PREFERENCE = "-1"
diff --git a/packages/gpephone/quickdial_svn.bb b/packages/gpephone/quickdial_svn.bb
index 4533bf4ee8..2a52510d86 100644
--- a/packages/gpephone/quickdial_svn.bb
+++ b/packages/gpephone/quickdial_svn.bb
@@ -5,11 +5,9 @@ PRIORITY = "optional"
PR = "r0"
PV = "0.0+svnr-${SRCREV}"
-SRCREV_pn-${PN} ?= "1393"
-
DEFAULT_PREFERENCE = "-1"
-DEPENDS = "gtk+ librecord2 libgpephone hiker"
+DEPENDS = "gtk+ librecord2 libgpephone"
inherit gpephone autotools pkgconfig
@@ -17,5 +15,6 @@ SRC_URI = "${GPEPHONE_SVN}"
S = "${WORKDIR}/${PN}"
+EXTRA_OECONF = "--disable-hiker"
FILES_${PN} += "${datadir}/qdial/database"
diff --git a/packages/gpephone/useen_svn.bb b/packages/gpephone/useen_svn.bb
index 93d180ba52..1a180683a7 100644
--- a/packages/gpephone/useen_svn.bb
+++ b/packages/gpephone/useen_svn.bb
@@ -5,8 +5,6 @@ PRIORITY = "optional"
PR = "r0"
PV = "0.0+svnr-${SRCREV}"
-SRCREV_pn-${PN} ?= "1400"
-
DEFAULT_PREFERENCE = "-1"
DEPENDS = "glib-2.0"
diff --git a/packages/linux/linux-handhelds-2.6/hx4700/.mtn2git_empty b/packages/gpsd/files/fic-gta01/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/hx4700/.mtn2git_empty
+++ b/packages/gpsd/files/fic-gta01/.mtn2git_empty
diff --git a/packages/gpsd/files/fic-gta01/gps-hardware b/packages/gpsd/files/fic-gta01/gps-hardware
new file mode 100644
index 0000000000..6490f52c27
--- /dev/null
+++ b/packages/gpsd/files/fic-gta01/gps-hardware
@@ -0,0 +1,41 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2008
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: gps-hardware
+# Date: 20080103 (YMD)
+#
+#################################################################################
+#
+# 20080103 - v0.0.1 - Initial release
+
+if ! test -e /home/root/gllin/gllin
+then
+ echo -e "\n\ngllin GPS driver for Neo1973 not found,"
+ echo "please install the gllin package from"
+ echo "http://3rdparty.downloads.openmoko.org/gllin/"
+ echo ""
+ exit 1
+fi
+
+
+do_start() {
+ /home/root/gllin/gllin >/var/log/gllin.log 2>&1 &
+ sleep 1
+}
+
+do_stop() {
+ gllin_PIDs="`ps ax | grep "/home/root/gllin" | grep -v grep | awk '{print $1}'`"
+ test -n "$gllin_PIDs" && kill $gllin_PIDs
+}
+
+do_status() {
+ ps ax | grep -v grep | grep -q gllin && echo "ready" || echo "unknown"
+}
+
+case "$1" in
+ start) do_start ;;
+ stop) do_stop ;;
+ status) do_status ;;
+esac
diff --git a/packages/gpsd/files/fic-gta01/gpsd-default b/packages/gpsd/files/fic-gta01/gpsd-default
new file mode 100644
index 0000000000..abd35927e5
--- /dev/null
+++ b/packages/gpsd/files/fic-gta01/gpsd-default
@@ -0,0 +1,3 @@
+# If you must specify a non-NMEA driver, uncomment and modify the next line
+#GPSD_OPTS=
+GPS_DEV="/tmp/nmeaNP"
diff --git a/packages/gpsd/files/fic-gta01/restart_gllin.sh b/packages/gpsd/files/fic-gta01/restart_gllin.sh
new file mode 100644
index 0000000000..50810c3583
--- /dev/null
+++ b/packages/gpsd/files/fic-gta01/restart_gllin.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+/etc/init.d/gps-hardware stop
+sleep 1
+/etc/init.d/gps-hardware start
+
diff --git a/packages/gpsd/files/gps-hardware b/packages/gpsd/files/gps-hardware
new file mode 100644
index 0000000000..ff2ddb3650
--- /dev/null
+++ b/packages/gpsd/files/gps-hardware
@@ -0,0 +1,2 @@
+# This is a dummy file. Some machines use it to bring up integrated GPS
+# devices on demand.
diff --git a/packages/gpsd/files/gpsd b/packages/gpsd/files/gpsd
index 3a14867f8a..e536837e1c 100755
--- a/packages/gpsd/files/gpsd
+++ b/packages/gpsd/files/gpsd
@@ -29,9 +29,18 @@ start() {
# 2. We don't need all the logging crud that daemon/initlog sets
# up -- gpsd does its own syslog calls.
#
+
+ if test -x /etc/init.d/gps-hardware
+ then
+ if ! ( /etc/init.d/gps-hardware status | grep -q "ready" )
+ then
+ /etc/init.d/gps-hardware start
+ fi
+ fi
+
if [ -e "${GPS_DEV}" ]
then
- gpsd ${GPSD_OPTS} -p ${GPS_DEV}
+ gpsd ${GPSD_OPTS} ${GPS_DEV}
echo "success"
else
# User needs to symlink ${GPS_DEV} to the right thing
diff --git a/packages/gpsd/gpsd.inc b/packages/gpsd/gpsd.inc
index d493b2bca7..237971c9c7 100644
--- a/packages/gpsd/gpsd.inc
+++ b/packages/gpsd/gpsd.inc
@@ -3,6 +3,7 @@ SECTION = "console/network"
PRIORITY = "optional"
LICENSE = "GPL"
DEPENDS = "dbus-glib ncurses python"
+RDEPENDS = "gpsd-conf"
EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
--x-libraries=${STAGING_LIBDIR} \
@@ -11,8 +12,13 @@ EXTRA_OECONF = "--x-includes=${STAGING_INCDIR}/X11 \
SRC_URI = "http://download.berlios.de/gpsd/gpsd-${PV}.tar.gz \
file://gpsd-default \
+ file://gps-hardware \
file://gpsd"
+SRC_URI_append_fic-gta01 = " \
+ file://restart_gllin.sh \
+ "
+
inherit autotools update-rc.d
INITSCRIPT_NAME = "gpsd"
@@ -32,25 +38,43 @@ do_install_prepend() {
}
do_stage() {
- oe_libinstall -so -C ${S}/.libs libgps ${STAGING_LIBDIR}
- install -m 0655 ${S}/libgps.la ${STAGING_LIBDIR}
- install -m 0655 ${S}/gps.h ${STAGING_INCDIR}
- install -m 0655 ${S}/gpsd.h ${STAGING_INCDIR}
+ oe_libinstall -so libgps ${STAGING_LIBDIR}
+ install -m 0644 ${S}/gps.h ${STAGING_INCDIR}
+ install -m 0644 ${S}/gpsd.h ${STAGING_INCDIR}
}
do_install_append() {
install -d ${D}/${sysconfdir}/init.d
install -d ${D}/dev
install -m 0755 ${WORKDIR}/gpsd ${D}/${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/gps-hardware ${D}/${sysconfdir}/init.d/gps-hardware.default
install -d ${D}/${sysconfdir}/default
- install -m 0644 ${WORKDIR}/gpsd-default ${D}/${sysconfdir}/default/gpsd
+ install -m 0644 ${WORKDIR}/gpsd-default ${D}/${sysconfdir}/default/gpsd.default
}
-PACKAGES =+ "libgps python-pygps"
+do_install_append_fic-gta01() {
+ install -d ${D}/${sysconfdir}/apm/resume.d
+ install -m 755 ${WORKDIR}/restart_gllin.sh ${D}/${sysconfdir}/apm/resume.d
+}
+
+pkg_postinst_${PN}-conf() {
+ update-alternatives --install ${sysconfdir}/default/gpsd gpsd-defaults ${sysconfdir}/default/gpsd.default 10
+ update-alternatives --install ${sysconfdir}/init.d/gps-hardware gps-hardware ${sysconfdir}/init.d/gps-hardware.default 10
+}
+
+pkg_postrm_${PN}-conf() {
+ update-alternatives --remove gpsd-defaults ${sysconfdir}/default/gpsd.default
+ update-alternatives --remove gps-hardware ${sysconfdir}/init.d/gps-hardware.default
+}
+
+SRC_URI_OVERRIDES_PACKAGE_ARCH = "0"
+
+PACKAGES =+ "libgps python-pygps gpsd-conf"
+
+PACKAGE_ARCH_gpsd-conf = "${MACHINE_ARCH}"
-FILES_${PN} += "${sysconfdir}"
FILES_libgps = "${libdir}/*.so.*"
-CONFFILES_${PN} = "${sysconfdir}/default/gpsd"
+FILES_gpsd-conf = "${sysconfdir}"
DESCRIPTION_python-pygps = "Python bindings to gpsd"
FILES_python-pygps = "${libdir}/*/site-packages/*"
diff --git a/packages/gpsd/gpsd_2.28.bb b/packages/gpsd/gpsd_2.28.bb
index c16de2e951..7094893b99 100644
--- a/packages/gpsd/gpsd_2.28.bb
+++ b/packages/gpsd/gpsd_2.28.bb
@@ -1,2 +1,2 @@
require gpsd.inc
-PR = "r4"
+PR = "r8"
diff --git a/packages/gpsd/gpsd_2.34.bb b/packages/gpsd/gpsd_2.34.bb
index 32cb4b925d..ea9fe4f550 100644
--- a/packages/gpsd/gpsd_2.34.bb
+++ b/packages/gpsd/gpsd_2.34.bb
@@ -1,4 +1,4 @@
require gpsd.inc
-PR = "r5"
+PR = "r8"
diff --git a/packages/gpsd/gpsd_2.36.bb b/packages/gpsd/gpsd_2.36.bb
new file mode 100644
index 0000000000..726ba42481
--- /dev/null
+++ b/packages/gpsd/gpsd_2.36.bb
@@ -0,0 +1,3 @@
+require gpsd.inc
+
+PR = "r2"
diff --git a/packages/linux/linux-handhelds-2.6/looxc550/.mtn2git_empty b/packages/gpsdrive/gpsdrive-pda/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/looxc550/.mtn2git_empty
+++ b/packages/gpsdrive/gpsdrive-pda/.mtn2git_empty
diff --git a/packages/gpsdrive/gpsdrive-pda/makefile.patch b/packages/gpsdrive/gpsdrive-pda/makefile.patch
new file mode 100644
index 0000000000..2ec4f6a6d8
--- /dev/null
+++ b/packages/gpsdrive/gpsdrive-pda/makefile.patch
@@ -0,0 +1,16 @@
+--- gpsdrive-2.10pre2-ipaq/Makefile 2007-11-11 13:29:10.000000000 +0300
++++ gpsdrive-2.10pre2-ipaq.patched/Makefile 2008-01-12 19:18:46.000000000 +0300
+@@ -5,11 +5,11 @@
+ STRIP = arm-linux-strip
+
+ DEFS = -DLOCALEDIR=\"/usr/share/locale\" -DDATADIR=\"/usr/share\"
+-INCLUDES = -I. -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/glib-2.0/ -I/usr/lib/glib-2.0/include -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo
++INCLUDES = -I. `pkg-config gtk+-2.0 --cflags`
+
+ CFLAGS = -O2 -pipe
+
+-LIBRARIES = -L/usr/lib -lcrypt -lpthread -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lm -lc
++LIBRARIES = -lcrypt -lpthread -lm -lc `pkg-config gtk+-2.0 --libs`
+ LDFLAGS =
+
+ SOURCES = gpsdrive.c speech_out.c track.c settings.c splash.c gpsserial.c gpsmisc.c \
diff --git a/packages/gpsdrive/gpsdrive-pda_2.10pre2.bb b/packages/gpsdrive/gpsdrive-pda_2.10pre2.bb
new file mode 100644
index 0000000000..6350053768
--- /dev/null
+++ b/packages/gpsdrive/gpsdrive-pda_2.10pre2.bb
@@ -0,0 +1,34 @@
+inherit autotools pkgconfig
+
+PR = "r1"
+DESCRIPTION = "GPS navigation/map display software, PDA-optimized version"
+HOMEPAGE = "http://www.gedanken.demon.co.uk/gpsdrive-ipaq/"
+DEPENDS = "virtual/libc gtk+ libpcre gpsd"
+RDEPENDS_${PN} = "gdk-pixbuf-loader-gif gpsd"
+SECTION = "x11"
+PRIORITY = "optional"
+LICENSE = "GPL"
+
+inherit pkgconfig
+
+SRC_URI = "http://www.gedanken.demon.co.uk/gpsdrive-ipaq/gpsdrive-2.10pre2-ipaq-r4.tar.gz \
+ file://makefile.patch;patch=1 "
+
+S = "${WORKDIR}/gpsdrive-2.10pre2-ipaq"
+
+FILES_${PN} = "${bindir}/gpsdrive ${datadir}/gpsdrive ${datadir}/pixmaps ${datadir}/applications"
+FILES_${PN} += "${datadir}/${PN}"
+
+do_compile () {
+ oe_runmake "CC=${CC}" "LD=${CC}" "STRIP=${STRIP}" all
+}
+
+do_install () {
+ mkdir -p ${D}${datadir}
+ cp -a ipkg-data/usr/share/* ${D}${datadir}/
+ cp -a README.iPAQ.txt ${D}${datadir}/gpsdrive
+ cp -a COPYING ${D}${datadir}/gpsdrive
+ cp -a original-docs ${D}${datadir}/gpsdrive
+ mkdir -p ${D}${bindir}
+ install -m 0755 gpsdrive ${D}${bindir}/
+}
diff --git a/packages/gsm/files/default b/packages/gsm/files/default
index 761100f702..f113d8bab0 100644
--- a/packages/gsm/files/default
+++ b/packages/gsm/files/default
@@ -2,30 +2,30 @@
. /etc/init.d/functions
-case `cpuinfo_id` in
- "GTA01"|"GTA02")
+case `machine_id` in
+ "gta01"|"gta02")
GSMD_OPTS="-s 115200 -F"
GSM_POW="/sys/bus/platform/devices/gta01-pm-gsm.0/power_on"
GSM_RES="/sys/bus/platform/devices/gta01-pm-gsm.0/reset"
GSM_DEV="/dev/ttySAC0"
;;
- "HTC Apache"|"HTC Blueangel"|"HTC Universal")
+ "htc_apache"|"htc_blueangel"|"htc_universal")
GSMD_OPTS="-s 115200 -F"
GSM_DEV="/dev/ttyS0"
;;
- "HTC Himalaya")
+ "htc_himalaya")
GSMD_OPTS="-s 115200 -F"
GSM_DEV="/dev/ttyS2"
;;
- "HTC Magician")
+ "htc_magician")
GSMD_OPTS="-s 115200 -F"
GSM_DEV="/dev/ttyS1"
;;
- "Palm Treo 650")
+ "palm_treo_650")
GSMD_OPTS="-s 460800 -F -w 1"
GSM_DEV="/dev/ttyS0"
;;
- "Motorola Ezx Platform")
+ "motorola_ezx_platform")
GSMD_OPTS="-s 115200 -F -v ti"
GSM_DEV="/dev/mux0"
;;
diff --git a/packages/gsm/gsmd.inc b/packages/gsm/gsmd.inc
index c8167d648e..f7d609e2c9 100644
--- a/packages/gsm/gsmd.inc
+++ b/packages/gsm/gsmd.inc
@@ -5,7 +5,7 @@ SECTION = "libs/gsm"
PROVIDES += "gsmd"
RPROVIDES_${PN} = "libgsmd0 libgsmd gsmd gsmd-devel"
PV = "0.1+svnr${SRCREV}"
-PR = "r39"
+PR = "r40"
SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gsm;proto=http \
file://gsmd \
diff --git a/packages/gstreamer/gst-meta-base_0.10.bb b/packages/gstreamer/gst-meta-base_0.10.bb
index 3a33b2086c..a37623210b 100644
--- a/packages/gstreamer/gst-meta-base_0.10.bb
+++ b/packages/gstreamer/gst-meta-base_0.10.bb
@@ -4,7 +4,7 @@ DESCRIPTION = "Gstreamer package groups"
DEPENDS = "gstreamer gst-plugins-base gst-plugins-bad gst-plugins-good gst-plugins-ugly"
PR = "r10"
-PACKAGES = "\
+PACKAGES = "${PN}-dbg \
gst-meta-base \
gst-meta-audio \
gst-meta-debug \
diff --git a/packages/gstreamer/gst-plugin-pulse_0.9.4.bb b/packages/gstreamer/gst-plugin-pulse_0.9.4.bb
index f88cb66ff4..a91e482358 100644
--- a/packages/gstreamer/gst-plugin-pulse_0.9.4.bb
+++ b/packages/gstreamer/gst-plugin-pulse_0.9.4.bb
@@ -24,5 +24,5 @@ FILES_${PN}-dev = "\
${libdir}/gstreamer-0.10/libgstpulse.a \
${libdir}/gstreamer-0.10/libgstpulse.la \
${libdir}/gstreamer-0.10/libgstpulse.so*"
-FILES_${PN}-dbg = "${libdir}/gstreamer-0.10/.debug"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
diff --git a/packages/gtk+/gtk+-2.10.14/small-gtkfilechooser.patch b/packages/gtk+/gtk+-2.10.14/small-gtkfilechooser.patch
new file mode 100644
index 0000000000..7681f1170f
--- /dev/null
+++ b/packages/gtk+/gtk+-2.10.14/small-gtkfilechooser.patch
@@ -0,0 +1,222 @@
+diff -ur gtk+-2.10.14.org/gtk/gtkfilechooserdefault.c gtk+-2.10.14/gtk/gtkfilechooserdefault.c
+--- gtk+-2.10.14.org/gtk/gtkfilechooserdefault.c 2007-07-16 22:44:17.000000000 +0300
++++ gtk+-2.10.14/gtk/gtkfilechooserdefault.c 2008-01-05 01:32:58.000000000 +0200
+@@ -243,7 +243,9 @@
+ /* Icon size for if we can't get it from the theme */
+ #define FALLBACK_ICON_SIZE 16
+
+-#define PREVIEW_HBOX_SPACING 12
++#define PREVIEW_HBOX_SPACING 2
++#define NORMAL_SPACING 2
++#define DOUBLE_SPACING 2
+ #define NUM_LINES 45
+ #define NUM_CHARS 60
+
+@@ -425,6 +427,17 @@
+ static void location_switch_to_path_bar (GtkFileChooserDefault *impl);
+ static void settings_load (GtkFileChooserDefault *impl);
+
++int
++_gtk_is_pda_mode()
++{
++ /* PDA mode is when we have small screen width, plus small overall screen area
++ too. What we want to do when it is active is to prefer vertical packing over
++ horizontal (so we can show user filenames of as long length as possible), yet
++ still layout vertical space in such way so user can be able to see as many
++ files as possible. And of course, we save space overall - no big spacings and
++ borders. */
++ return gdk_screen_width() < 490;
++}
+
+
+ /* Drag and drop interface declarations */
+@@ -689,7 +702,7 @@
+ impl->pending_select_paths = NULL;
+ impl->location_mode = LOCATION_MODE_PATH_BAR;
+
+- gtk_box_set_spacing (GTK_BOX (impl), 12);
++ gtk_box_set_spacing (GTK_BOX (impl), DOUBLE_SPACING);
+
+ impl->tooltips = gtk_tooltips_new ();
+ g_object_ref_sink (impl->tooltips);
+@@ -3603,8 +3616,9 @@
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *widget;
++ gboolean is_pda = _gtk_is_pda_mode();
+
+- vbox = gtk_vbox_new (FALSE, 6);
++ vbox = (is_pda?gtk_hbox_new:gtk_vbox_new) (FALSE, NORMAL_SPACING);
+ gtk_widget_show (vbox);
+
+ /* Shortcuts tree */
+@@ -3614,7 +3628,7 @@
+
+ /* Box for buttons */
+
+- hbox = gtk_hbox_new (TRUE, 6);
++ hbox = (is_pda?gtk_vbox_new:gtk_hbox_new) (TRUE, NORMAL_SPACING);
+ gtk_size_group_add_widget (size_group, hbox);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+ gtk_widget_show (hbox);
+@@ -3622,7 +3636,7 @@
+ /* Add bookmark button */
+
+ impl->browse_shortcuts_add_button = button_new (impl,
+- _("_Add"),
++ "",
+ GTK_STOCK_ADD,
+ FALSE,
+ TRUE,
+@@ -3634,14 +3648,22 @@
+ /* Remove bookmark button */
+
+ impl->browse_shortcuts_remove_button = button_new (impl,
+- _("_Remove"),
++ "",
+ GTK_STOCK_REMOVE,
+ FALSE,
+ TRUE,
+ G_CALLBACK (remove_bookmark_button_clicked_cb));
++ if (!is_pda) {
++ /* Remove button is pretty reduntant, as that choice is available from popup menu (and would
++ be intuitively expected to be there; compare that with the "Add to shortucts" in popup
++ in files pane - most users would never try that and never new what shortcuts are).
++ If we suspect we can be short of screen space (PDA device is what often has portrait
++ layout), don't pack it, to allow more visually pleasing layout when minimizing location
++ pane. Note that we still instantiate it, as it is referenced thruout the code. */
+ gtk_box_pack_start (GTK_BOX (hbox), impl->browse_shortcuts_remove_button, TRUE, TRUE, 0);
+ gtk_tooltips_set_tip (impl->tooltips, impl->browse_shortcuts_remove_button,
+ _("Remove the selected bookmark"), NULL);
++ }
+
+ return vbox;
+ }
+@@ -4221,7 +4243,7 @@
+ GtkWidget *hbox;
+ GtkWidget *widget;
+
+- vbox = gtk_vbox_new (FALSE, 6);
++ vbox = gtk_vbox_new (FALSE, NORMAL_SPACING);
+ gtk_widget_show (vbox);
+
+ /* Box for lists and preview */
+@@ -4237,13 +4259,13 @@
+
+ /* Preview */
+
+- impl->preview_box = gtk_vbox_new (FALSE, 12);
++ impl->preview_box = gtk_vbox_new (FALSE, DOUBLE_SPACING);
+ gtk_box_pack_start (GTK_BOX (hbox), impl->preview_box, FALSE, FALSE, 0);
+ /* Don't show preview box initially */
+
+ /* Filter combo */
+
+- impl->filter_combo_hbox = gtk_hbox_new (FALSE, 12);
++ impl->filter_combo_hbox = gtk_hbox_new (FALSE, DOUBLE_SPACING);
+
+ widget = filter_create (impl);
+
+@@ -4336,13 +4358,13 @@
+
+ location_switch_to_path_bar (impl);
+
+- vbox = gtk_vbox_new (FALSE, 12);
++ vbox = gtk_vbox_new (FALSE, DOUBLE_SPACING);
+
+ table = gtk_table_new (2, 2, FALSE);
+ gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
+ gtk_widget_show (table);
+- gtk_table_set_row_spacings (GTK_TABLE (table), 12);
+- gtk_table_set_col_spacings (GTK_TABLE (table), 12);
++ gtk_table_set_row_spacings (GTK_TABLE (table), DOUBLE_SPACING);
++ gtk_table_set_col_spacings (GTK_TABLE (table), DOUBLE_SPACING);
+
+ /* Label */
+
+@@ -4653,10 +4675,10 @@
+
+ /* size group is used by the [+][-] buttons and the filter combo */
+ size_group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
+- vbox = gtk_vbox_new (FALSE, 12);
++ vbox = gtk_vbox_new (FALSE, DOUBLE_SPACING);
+
+ /* Location widgets */
+- hbox = gtk_hbox_new (FALSE, 12);
++ hbox = gtk_hbox_new (FALSE, DOUBLE_SPACING);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+ gtk_widget_show (hbox);
+
+@@ -4678,7 +4700,7 @@
+
+ /* Box for the location label and entry */
+
+- impl->location_entry_box = gtk_hbox_new (FALSE, 12);
++ impl->location_entry_box = gtk_hbox_new (FALSE, DOUBLE_SPACING);
+ gtk_box_pack_start (GTK_BOX (vbox), impl->location_entry_box, FALSE, FALSE, 0);
+
+ impl->location_label = gtk_label_new_with_mnemonic (_("_Location:"));
+@@ -4686,12 +4708,16 @@
+ gtk_box_pack_start (GTK_BOX (impl->location_entry_box), impl->location_label, FALSE, FALSE, 0);
+
+ /* Paned widget */
+- hpaned = gtk_hpaned_new ();
++ if (_gtk_is_pda_mode())
++ hpaned = gtk_vpaned_new ();
++ else
++ hpaned = gtk_hpaned_new ();
++
+ gtk_widget_show (hpaned);
+ gtk_box_pack_start (GTK_BOX (vbox), hpaned, TRUE, TRUE, 0);
+
+ widget = shortcuts_pane_create (impl, size_group);
+- gtk_paned_pack1 (GTK_PANED (hpaned), widget, FALSE, FALSE);
++ gtk_paned_pack1 (GTK_PANED (hpaned), widget, FALSE, TRUE); /* Shortcuts can shrink beyond requested size */
+ widget = file_pane_create (impl, size_group);
+ gtk_paned_pack2 (GTK_PANED (hpaned), widget, TRUE, FALSE);
+
+diff -ur gtk+-2.10.14.org/gtk/gtkfilechooserdialog.c gtk+-2.10.14/gtk/gtkfilechooserdialog.c
+--- gtk+-2.10.14.org/gtk/gtkfilechooserdialog.c 2007-07-16 22:44:16.000000000 +0300
++++ gtk+-2.10.14/gtk/gtkfilechooserdialog.c 2008-01-05 01:28:35.000000000 +0200
+@@ -32,8 +32,12 @@
+
+ #include <stdarg.h>
+
++#define NORMAL_SPACING 2
++#define DOUBLE_SPACING 2
++
+ #define GTK_FILE_CHOOSER_DIALOG_GET_PRIVATE(o) (GTK_FILE_CHOOSER_DIALOG (o)->priv)
+
++extern int _gtk_is_pda_mode(void);
+ static void gtk_file_chooser_dialog_finalize (GObject *object);
+
+ static GObject* gtk_file_chooser_dialog_constructor (GType type,
+@@ -162,8 +166,13 @@
+
+ gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
+
+- if (width)
+- *width = MIN (*width, (monitor.width * 3) / 4);
++ if (width) {
++ if (_gtk_is_pda_mode())
++ /* If width is physically small, use it all */
++ *width = monitor.width;
++ else
++ *width = MIN (*width, (monitor.width * 3) / 4);
++ }
+
+ if (height)
+ *height = MIN (*height, (monitor.height * 3) / 4);
+@@ -430,8 +439,8 @@
+ * http://developer.gnome.org/projects/gup/hig/1.0/windows.html#alert-spacing
+ */
+
+- gtk_container_set_border_width (GTK_CONTAINER (dialog->vbox), 12);
+- gtk_box_set_spacing (GTK_BOX (dialog->vbox), 24);
++ gtk_container_set_border_width (GTK_CONTAINER (dialog->vbox), DOUBLE_SPACING);
++ gtk_box_set_spacing (GTK_BOX (dialog->vbox), DOUBLE_SPACING * 2);
+
+ gtk_container_set_border_width (GTK_CONTAINER (dialog->action_area), 0);
+ gtk_box_set_spacing (GTK_BOX (dialog->action_area), 6);
+Only in gtk+-2.10.14/.pc/migration.patch/gtk: gtkmigration.c
+Only in gtk+-2.10.14: small-gtkfilechooser.patch
diff --git a/packages/linux/linux-handhelds-2.6/magician/.mtn2git_empty b/packages/gtk+/gtk+-2.12.3/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/magician/.mtn2git_empty
+++ b/packages/gtk+/gtk+-2.12.3/.mtn2git_empty
diff --git a/packages/gtk+/gtk+-2.12.3/cellrenderer-cairo.patch b/packages/gtk+/gtk+-2.12.3/cellrenderer-cairo.patch
new file mode 100644
index 0000000000..4439e69fb6
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/cellrenderer-cairo.patch
@@ -0,0 +1,32 @@
+Index: gtk/gtkcellrenderer.c
+===================================================================
+RCS file: /cvs/gnome/gtk+/gtk/gtkcellrenderer.c,v
+retrieving revision 1.55
+diff -u -r1.55 gtkcellrenderer.c
+--- gtk/gtkcellrenderer.c 14 May 2006 04:25:28 -0000 1.55
++++ gtk/gtkcellrenderer.c 30 Jun 2006 10:57:43 -0000
+@@ -551,6 +551,7 @@
+
+ if (cell->cell_background_set && !selected)
+ {
++#ifdef USE_CAIRO_INTERNALLY
+ cairo_t *cr = gdk_cairo_create (window);
+
+ gdk_cairo_rectangle (cr, background_area);
+@@ -558,6 +559,16 @@
+ cairo_fill (cr);
+
+ cairo_destroy (cr);
++#else
++ GdkGC *gc;
++
++ gc = gdk_gc_new (window);
++ gdk_gc_set_rgb_fg_color (gc, &priv->cell_background);
++ gdk_draw_rectangle (window, gc, TRUE,
++ background_area->x, background_area->y,
++ background_area->width, background_area->height);
++ g_object_unref (gc);
++#endif
+ }
+
+ GTK_CELL_RENDERER_GET_CLASS (cell)->render (cell,
diff --git a/packages/gtk+/gtk+-2.12.3/combo-arrow-size.patch b/packages/gtk+/gtk+-2.12.3/combo-arrow-size.patch
new file mode 100644
index 0000000000..d44c454ce3
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/combo-arrow-size.patch
@@ -0,0 +1,67 @@
+Index: gtk/gtkcombobox.c
+===================================================================
+RCS file: /cvs/gnome/gtk+/gtk/gtkcombobox.c,v
+retrieving revision 1.185
+diff -u -p -r1.185 gtkcombobox.c
+--- gtk/gtkcombobox.c 12 Oct 2006 13:48:07 -0000 1.185
++++ gtk/gtkcombobox.c 1 Nov 2006 19:01:09 -0000
+@@ -756,6 +756,25 @@ gtk_combo_box_class_init (GtkComboBoxCla
+ FALSE,
+ GTK_PARAM_READABLE));
+
++ /**
++ * GtkComboBox:arrow-size:
++ *
++ * Sets the minimum size of the arrow in the combo box. Note
++ * that the arrow size is coupled to the font size, so in case
++ * a larger font is used, the arrow will be larger than set
++ * by arrow size.
++ *
++ * Since: 2.12
++ */
++ gtk_widget_class_install_style_property (widget_class,
++ g_param_spec_int ("arrow-size",
++ P_("Arrow Size"),
++ P_("The minimum size of the arrow in the combo box"),
++ 0,
++ G_MAXINT,
++ 15,
++ GTK_PARAM_READABLE));
++
+ g_type_class_add_private (object_class, sizeof (GtkComboBoxPrivate));
+ }
+
+@@ -1897,7 +1916,12 @@ gtk_combo_box_size_request (GtkWidget
+ {
+ gint width, height;
+ gint focus_width, focus_pad;
++ gint font_size;
++ gint arrow_size;
+ GtkRequisition bin_req;
++ PangoContext *context;
++ PangoFontMetrics *metrics;
++ PangoFontDescription *font_desc;
+
+ GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
+
+@@ -1910,7 +1934,20 @@ gtk_combo_box_size_request (GtkWidget
+ gtk_widget_style_get (GTK_WIDGET (widget),
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_pad,
++ "arrow-size", &arrow_size,
+ NULL);
++
++ font_desc = GTK_BIN (widget)->child->style->font_desc;
++ context = gtk_widget_get_pango_context (widget);
++ metrics = pango_context_get_metrics (context, font_desc,
++ pango_context_get_language (context));
++ font_size = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics) +
++ pango_font_metrics_get_descent (metrics));
++ pango_font_metrics_unref (metrics);
++
++ arrow_size = MAX (arrow_size, font_size);
++
++ gtk_widget_set_size_request (combo_box->priv->arrow, arrow_size, arrow_size);
+
+ if (!combo_box->priv->tree_view)
+ {
diff --git a/packages/gtk+/gtk+-2.12.3/disable-print.patch b/packages/gtk+/gtk+-2.12.3/disable-print.patch
new file mode 100644
index 0000000000..21a4be4da8
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/disable-print.patch
@@ -0,0 +1,26 @@
+--- gtk+-2.12.0/configure.in~ 2006-07-05 18:11:44.000000000 +0200
++++ gtk+-2.12.0/configure.in 2006-07-05 18:11:44.000000000 +0200
+@@ -1554,22 +1554 @@
+-AC_PATH_PROG(CUPS_CONFIG, cups-config, no)
+-if test "x$CUPS_CONFIG" != "xno"; then
+- CUPS_CFLAGS=`cups-config --cflags | sed 's/-O[0-9]*//' | sed 's/-m[^\t]*//g'`
+- CUPS_LIBS=`cups-config --libs`
+-
+- CUPS_API_VERSION=`cups-config --api-version`
+- CUPS_API_MAJOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $1}'`
+- CUPS_API_MINOR=`echo -n $CUPS_API_VERSION | awk -F. '{print $2}'`
+-
+- if test $CUPS_API_MAJOR -gt 1 -o \
+- $CUPS_API_MAJOR -eq 1 -a $CUPS_API_MINOR -ge 2; then
+- AC_DEFINE(HAVE_CUPS_API_1_2)
+- fi
+-
+- AC_SUBST(CUPS_API_MAJOR)
+- AC_SUBST(CUPS_API_MINOR)
+- AC_SUBST(CUPS_CFLAGS)
+- AC_SUBST(CUPS_LIBS)
+-
+- AC_CHECK_HEADER(cups/cups.h,,AC_MSG_ERROR([[*** Sorry, cups-config present but cups/cups.h missing.]]))
+-fi
+-AM_CONDITIONAL(HAVE_CUPS, test "x$CUPS_CONFIG" != "xno")
++AM_CONDITIONAL(HAVE_CUPS, false)
diff --git a/packages/gtk+/gtk+-2.12.3/entry-cairo.patch b/packages/gtk+/gtk+-2.12.3/entry-cairo.patch
new file mode 100644
index 0000000000..3313e7f132
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/entry-cairo.patch
@@ -0,0 +1,103 @@
+Index: gtk/gtkentry.c
+===================================================================
+RCS file: /cvs/gnome/gtk+/gtk/gtkentry.c,v
+retrieving revision 1.317
+diff -u -r1.317 gtkentry.c
+--- gtk/gtkentry.c 29 Jun 2006 09:18:05 -0000 1.317
++++ gtk/gtkentry.c 2 Jul 2006 14:14:24 -0000
+@@ -3337,7 +3337,9 @@
+ if (GTK_WIDGET_DRAWABLE (entry))
+ {
+ PangoLayout *layout = gtk_entry_ensure_layout (entry, TRUE);
++#ifdef USE_CAIRO_INTERNALLY
+ cairo_t *cr;
++#endif
+ gint x, y;
+ gint start_pos, end_pos;
+
+@@ -3345,23 +3347,35 @@
+
+ get_layout_position (entry, &x, &y);
+
++#ifdef USE_CAIRO_INTERNALLY
+ cr = gdk_cairo_create (entry->text_area);
+
+ cairo_move_to (cr, x, y);
+ gdk_cairo_set_source_color (cr, &widget->style->text [widget->state]);
+ pango_cairo_show_layout (cr, layout);
++#else
++ gdk_draw_layout (entry->text_area, widget->style->text_gc [widget->state],
++ x, y,
++ layout);
++#endif
+
+ if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_pos, &end_pos))
+ {
+ gint *ranges;
+ gint n_ranges, i;
+ PangoRectangle logical_rect;
+- GdkColor *selection_color, *text_color;
+ GtkBorder inner_border;
++#ifdef USE_CAIRO_INTERNALLY
++ GdkColor *selection_color, *text_color;
++#else
++ GdkGC *selection_gc, *text_gc;
++ GdkRegion *clip_region;
++#endif
+
+ pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
+ gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges);
+
++#ifdef USE_CAIRO_INTERNALLY
+ if (GTK_WIDGET_HAS_FOCUS (entry))
+ {
+ selection_color = &widget->style->base [GTK_STATE_SELECTED];
+@@ -3390,11 +3404,46 @@
+ cairo_move_to (cr, x, y);
+ gdk_cairo_set_source_color (cr, text_color);
+ pango_cairo_show_layout (cr, layout);
+-
++#else
++ if (GTK_WIDGET_HAS_FOCUS (entry))
++ {
++ selection_gc = widget->style->base_gc [GTK_STATE_SELECTED];
++ text_gc = widget->style->text_gc [GTK_STATE_SELECTED];
++ }
++ else
++ {
++ selection_gc = widget->style->base_gc [GTK_STATE_ACTIVE];
++ text_gc = widget->style->text_gc [GTK_STATE_ACTIVE];
++ }
++
++ clip_region = gdk_region_new ();
++ for (i = 0; i < n_ranges; ++i)
++ {
++ GdkRectangle rect;
++
++ rect.x = inner_border.left - entry->scroll_offset + ranges[2 * i];
++ rect.y = y;
++ rect.width = ranges[2 * i + 1];
++ rect.height = logical_rect.height;
++
++ gdk_draw_rectangle (entry->text_area, selection_gc, TRUE,
++ rect.x, rect.y, rect.width, rect.height);
++
++ gdk_region_union_with_rect (clip_region, &rect);
++ }
++
++ gdk_gc_set_clip_region (text_gc, clip_region);
++ gdk_draw_layout (entry->text_area, text_gc,
++ x, y,
++ layout);
++ gdk_gc_set_clip_region (text_gc, NULL);
++ gdk_region_destroy (clip_region);
++#endif
+ g_free (ranges);
+ }
+-
++#ifdef USE_CAIRO_INTERNALLY
+ cairo_destroy (cr);
++#endif
+ }
+ }
+
diff --git a/packages/gtk+/gtk+-2.4.13/gtklabel-resize-patch b/packages/gtk+/gtk+-2.12.3/gtklabel-resize-patch
index df29656343..df29656343 100644
--- a/packages/gtk+/gtk+-2.4.13/gtklabel-resize-patch
+++ b/packages/gtk+/gtk+-2.12.3/gtklabel-resize-patch
diff --git a/packages/gtk+/gtk+-2.12.3/hardcoded_libtool.patch b/packages/gtk+/gtk+-2.12.3/hardcoded_libtool.patch
new file mode 100644
index 0000000000..6adb0cfef6
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/hardcoded_libtool.patch
@@ -0,0 +1,29 @@
+--- /tmp/configure.in 2007-01-08 17:50:49.000000000 +0100
++++ gtk+-2.10.7/configure.in 2007-01-08 17:52:33.495251000 +0100
+@@ -371,7 +371,7 @@
+ case $enable_explicit_deps in
+ auto)
+ export SED
+- deplibs_check_method=`(./libtool --config; echo 'eval echo $deplibs_check_method') | sh`
++ deplibs_check_method=`(./$host_alias-libtool --config; echo 'eval echo $deplibs_check_method') | sh`
+ if test "x$deplibs_check_method" '!=' xpass_all || test "x$enable_static" = xyes ; then
+ enable_explicit_deps=yes
+ else
+@@ -773,7 +773,7 @@
+ dnl Now we check to see if our libtool supports shared lib deps
+ dnl (in a rather ugly way even)
+ if $dynworks; then
+- pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./libtool --config"
++ pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./$host_alias-libtool --config"
+ pixbuf_deplibs_check=`$pixbuf_libtool_config | \
+ grep '^[[a-z_]]*check[[a-z_]]*_method=[['\''"]]' | \
+ sed 's/.*[['\''"]]\(.*\)[['\''"]]$/\1/'`
+@@ -1611,7 +1611,7 @@
+ # We are using gmodule-no-export now, but I'm leaving the stripping
+ # code in place for now, since pango and atk still require gmodule.
+ export SED
+-export_dynamic=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
++export_dynamic=`(./$host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
+ if test -n "$export_dynamic"; then
+ GDK_PIXBUF_DEP_LIBS=`echo $GDK_PIXBUF_DEP_LIBS | sed -e "s/$export_dynamic//"`
+ GDK_PIXBUF_XLIB_DEP_LIBS=`echo $GDK_PIXBUF_XLIB_DEP_LIBS | sed -e "s/$export_dynamic//"`
diff --git a/packages/gtk+/gtk+-2.12.3/menu-deactivate.patch b/packages/gtk+/gtk+-2.12.3/menu-deactivate.patch
new file mode 100644
index 0000000000..cfb8849e9f
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/menu-deactivate.patch
@@ -0,0 +1,51 @@
+--- gtk+-2.10.0/gtk/gtkmenushell.c.orig 2006-07-05 17:17:34.000000000 +0200
++++ gtk+-2.10.0/gtk/gtkmenushell.c 2006-07-05 17:19:01.000000000 +0200
+@@ -42,7 +42,7 @@
+ #include "gtkintl.h"
+ #include "gtkalias.h"
+
+-#define MENU_SHELL_TIMEOUT 500
++#define MENU_SHELL_TIMEOUT 2000
+
+ #define PACK_DIRECTION(m) \
+ (GTK_IS_MENU_BAR (m) \
+@@ -203,6 +203,8 @@
+
+ G_DEFINE_TYPE (GtkMenuShell, gtk_menu_shell, GTK_TYPE_CONTAINER)
+
++static int last_crossing_time;
++
+ static void
+ gtk_menu_shell_class_init (GtkMenuShellClass *klass)
+ {
+@@ -517,6 +519,7 @@
+ gtk_grab_add (GTK_WIDGET (menu_shell));
+ menu_shell->have_grab = TRUE;
+ menu_shell->active = TRUE;
++ last_crossing_time = 0;
+ }
+ }
+
+@@ -669,6 +672,13 @@
+ menu_shell->activate_time = 0;
+ deactivate = FALSE;
+ }
++
++ if (last_crossing_time != 0
++ && ((event->time - last_crossing_time) < 500))
++ {
++ last_crossing_time = 0;
++ deactivate = FALSE;
++ }
+
+ if (deactivate)
+ {
+@@ -716,6 +726,8 @@
+ {
+ menu_item = gtk_get_event_widget ((GdkEvent*) event);
+
++ last_crossing_time = event->time;
++
+ if (!menu_item ||
+ (GTK_IS_MENU_ITEM (menu_item) &&
+ !_gtk_menu_item_is_selectable (menu_item)))
diff --git a/packages/gtk+/gtk+-2.12.3/no-demos.patch b/packages/gtk+/gtk+-2.12.3/no-demos.patch
new file mode 100644
index 0000000000..0fc4c48d1a
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/no-demos.patch
@@ -0,0 +1,10 @@
+--- gtk+-2.10.1/Makefile.am.orig 2006-08-08 12:37:30.000000000 +0100
++++ gtk+-2.10.1/Makefile.am 2006-08-08 12:37:48.000000000 +0100
+@@ -1,6 +1,6 @@
+ ## Makefile.am for GTK+
+
+-SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
++SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests perf contrib
+ SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
+
+ # require automake 1.4
diff --git a/packages/gtk+/gtk+-2.12.3/pangoxft2.10.6.diff b/packages/gtk+/gtk+-2.12.3/pangoxft2.10.6.diff
new file mode 100644
index 0000000000..63828cec63
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/pangoxft2.10.6.diff
@@ -0,0 +1,2456 @@
+http://mail.gnome.org/archives/performance-list/2006-October/msg00063.html
+
+From: Xan Lópe
+To: ext Matt Hoosier
+Cc: performance-list gnome org
+Subject: Re: [patch] Remove pangocairo from Gtk+ 2.8.20
+Date: Mon, 30 Oct 2006 14:31:56 +0200
+Hi,
+
+I've upgraded your patch against GTK+ 2.10.6, and we are getting great
+performance figures compared to GTK+ 2.10.6 with pangocairo too
+(basically at the level of GTK+ 2.6.10 again). Right now I'm working on
+a python/cairo script to get some nice graphics from a torture test
+session with several GTK+s, hope to get it ready soon.
+
+Index: gtk+-2.10.6/configure.in
+===================================================================
+--- gtk+-2.10.6.orig/configure.in 2006-10-30 12:59:28.000000000 +0000
++++ gtk+-2.10.6/configure.in 2006-10-30 12:59:30.000000000 +0000
+@@ -1435,7 +1435,7 @@
+ if test "x$gdktarget" = "xwin32"; then
+ PANGO_PACKAGES="pangowin32 pangocairo"
+ else
+- PANGO_PACKAGES="pango pangocairo"
++ PANGO_PACKAGES="pango pangocairo pangoxft"
+ fi
+
+ AC_MSG_CHECKING(Pango flags)
+Index: gtk+-2.10.6/gdk/gdkaliasdef.c
+===================================================================
+--- gtk+-2.10.6.orig/gdk/gdkaliasdef.c 2006-10-30 12:58:29.000000000 +0000
++++ gtk+-2.10.6/gdk/gdkaliasdef.c 2006-10-30 12:59:30.000000000 +0000
+@@ -1799,9 +1799,6 @@
+ #undef gdk_pango_context_get
+ extern __typeof (gdk_pango_context_get) gdk_pango_context_get __attribute((alias("IA__gdk_pango_context_get"), visibility("default")));
+
+-#undef gdk_pango_context_get_for_screen
+-extern __typeof (gdk_pango_context_get_for_screen) gdk_pango_context_get_for_screen __attribute((alias("IA__gdk_pango_context_get_for_screen"), visibility("default")));
+-
+ #ifndef GDK_DISABLE_DEPRECATED
+ #undef gdk_pango_context_set_colormap
+ extern __typeof (gdk_pango_context_set_colormap) gdk_pango_context_set_colormap __attribute((alias("IA__gdk_pango_context_set_colormap"), visibility("default")));
+@@ -1836,6 +1833,13 @@
+
+ #endif
+ #endif
++#if IN_HEADER(__GDK_PANGO_H__)
++#if IN_FILE(__GDK_PANGO_X11_C__)
++#undef gdk_pango_context_get_for_screen
++extern __typeof (gdk_pango_context_get_for_screen) gdk_pango_context_get_for_screen __attribute((alias("IA__gdk_pango_context_get_for_screen"), visibility("default")));
++
++#endif
++#endif
+ #if IN_HEADER(__GDK_PIXBUF_H__)
+ #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__)
+ #undef gdk_pixbuf_get_from_drawable
+Index: gtk+-2.10.6/gdk/gdkalias.h
+===================================================================
+--- gtk+-2.10.6.orig/gdk/gdkalias.h 2006-10-30 12:58:29.000000000 +0000
++++ gtk+-2.10.6/gdk/gdkalias.h 2006-10-30 12:59:30.000000000 +0000
+@@ -1796,9 +1796,6 @@
+ extern __typeof (gdk_pango_context_get) IA__gdk_pango_context_get __attribute((visibility("hidden")));
+ #define gdk_pango_context_get IA__gdk_pango_context_get
+
+-extern __typeof (gdk_pango_context_get_for_screen) IA__gdk_pango_context_get_for_screen __attribute((visibility("hidden")));
+-#define gdk_pango_context_get_for_screen IA__gdk_pango_context_get_for_screen
+-
+ #ifndef GDK_DISABLE_DEPRECATED
+ extern __typeof (gdk_pango_context_set_colormap) IA__gdk_pango_context_set_colormap __attribute((visibility("hidden")));
+ #define gdk_pango_context_set_colormap IA__gdk_pango_context_set_colormap
+@@ -1833,6 +1830,13 @@
+
+ #endif
+ #endif
++#if IN_HEADER(__GDK_PANGO_H__)
++#if IN_FILE(__GDK_PANGO_X11_C__)
++extern __typeof (gdk_pango_context_get_for_screen) IA__gdk_pango_context_get_for_screen __attribute((visibility("hidden")));
++#define gdk_pango_context_get_for_screen IA__gdk_pango_context_get_for_screen
++
++#endif
++#endif
+ #if IN_HEADER(__GDK_PIXBUF_H__)
+ #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__)
+ extern __typeof (gdk_pixbuf_get_from_drawable) IA__gdk_pixbuf_get_from_drawable __attribute((visibility("hidden")));
+Index: gtk+-2.10.6/gdk/gdkdraw.c
+===================================================================
+--- gtk+-2.10.6.orig/gdk/gdkdraw.c 2006-10-30 12:58:29.000000000 +0000
++++ gtk+-2.10.6/gdk/gdkdraw.c 2006-10-30 12:59:30.000000000 +0000
+@@ -909,9 +909,9 @@
+ {
+ g_return_if_fail (GDK_IS_DRAWABLE (drawable));
+ g_return_if_fail (GDK_IS_GC (gc));
+-
+- real_draw_glyphs (drawable, gc, NULL, font,
+- x, y, glyphs);
++
++
++ GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs (drawable, gc, font, x, y, glyphs);
+ }
+
+ /**
+@@ -949,8 +949,9 @@
+ g_return_if_fail (GDK_IS_DRAWABLE (drawable));
+ g_return_if_fail (GDK_IS_GC (gc));
+
+- real_draw_glyphs (drawable, gc, matrix, font,
+- x / PANGO_SCALE, y / PANGO_SCALE, glyphs);
++ if (GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs_transformed)
++ GDK_DRAWABLE_GET_CLASS (drawable)->draw_glyphs_transformed (drawable, gc, matrix,
++ font, x, y, glyphs);
+ }
+
+ /**
+@@ -974,28 +975,12 @@
+ GdkTrapezoid *trapezoids,
+ gint n_trapezoids)
+ {
+- cairo_t *cr;
+- int i;
+-
+ g_return_if_fail (GDK_IS_DRAWABLE (drawable));
+ g_return_if_fail (GDK_IS_GC (gc));
+ g_return_if_fail (n_trapezoids == 0 || trapezoids != NULL);
+
+- cr = gdk_cairo_create (drawable);
+- _gdk_gc_update_context (gc, cr, NULL, NULL, TRUE);
+-
+- for (i = 0; i < n_trapezoids; i++)
+- {
+- cairo_move_to (cr, trapezoids[i].x11, trapezoids[i].y1);
+- cairo_line_to (cr, trapezoids[i].x21, trapezoids[i].y1);
+- cairo_line_to (cr, trapezoids[i].x22, trapezoids[i].y2);
+- cairo_line_to (cr, trapezoids[i].x21, trapezoids[i].y2);
+- cairo_close_path (cr);
+- }
+-
+- cairo_fill (cr);
+-
+- cairo_destroy (cr);
++ GDK_DRAWABLE_GET_CLASS (drawable)->draw_trapezoids (drawable, gc,
++ trapezoids, n_trapezoids);
+ }
+
+ /**
+Index: gtk+-2.10.6/gdk/gdkpango.c
+===================================================================
+--- gtk+-2.10.6.orig/gdk/gdkpango.c 2006-10-30 12:58:29.000000000 +0000
++++ gtk+-2.10.6/gdk/gdkpango.c 2006-10-30 12:59:30.000000000 +0000
+@@ -50,19 +50,34 @@
+ GdkBitmap *stipple[MAX_RENDER_PART + 1];
+ gboolean embossed;
+
+- cairo_t *cr;
+- PangoRenderPart last_part;
++ /* When switching between the normal and shadow copies when
++ * drawing shadows we can get unexpected recursion into the
++ * drawing functions; the 'in_emboss' flag guards against that.
++ */
++ gboolean in_emboss;
+
+ /* Current target */
+ GdkDrawable *drawable;
+ GdkGC *base_gc;
+
+ gboolean gc_changed;
++
++ /* Cached GC, derived from base_gc */
++ GdkGC *gc;
++ PangoColor gc_color;
++ gboolean gc_color_set;
++ GdkBitmap *gc_stipple;
++
++ /* we accumulate trapezoids for the same PangoRenderPart */
++ GArray *trapezoids;
++ PangoRenderPart trapezoid_part;
+ };
+
+ static PangoAttrType gdk_pango_attr_stipple_type;
+ static PangoAttrType gdk_pango_attr_embossed_type;
+
++static void flush_trapezoids (GdkPangoRenderer *gdk_renderer);
++
+ enum {
+ PROP_0,
+ PROP_SCREEN
+@@ -77,6 +92,10 @@
+ GdkPangoRendererPrivate *priv = gdk_renderer->priv;
+ int i;
+
++ if (priv->gc)
++ g_object_unref (priv->gc);
++ if (priv->gc_stipple)
++ g_object_unref (priv->gc_stipple);
+ if (priv->base_gc)
+ g_object_unref (priv->base_gc);
+ if (priv->drawable)
+@@ -86,6 +105,8 @@
+ if (priv->stipple[i])
+ g_object_unref (priv->stipple[i]);
+
++ g_array_free (priv->trapezoids, TRUE);
++
+ G_OBJECT_CLASS (gdk_pango_renderer_parent_class)->finalize (object);
+ }
+
+@@ -112,25 +133,6 @@
+ return object;
+ }
+
+-/* Adjusts matrix and color for the renderer to draw the secondary
+- * "shadow" copy for embossed text */
+-static void
+-emboss_context (cairo_t *cr)
+-{
+- cairo_matrix_t tmp_matrix;
+-
+- /* The gymnastics here to adjust the matrix are because we want
+- * to offset by +1,+1 in device-space, not in user-space,
+- * so we can't just draw the layout at x + 1, y + 1
+- */
+- cairo_get_matrix (cr, &tmp_matrix);
+- tmp_matrix.x0 += 1.0;
+- tmp_matrix.y0 += 1.0;
+- cairo_set_matrix (cr, &tmp_matrix);
+-
+- cairo_set_source_rgb (cr, 1.0, 1.0, 1.0);
+-}
+-
+ static inline gboolean
+ color_equal (PangoColor *c1, PangoColor *c2)
+ {
+@@ -146,74 +148,154 @@
+ return FALSE;
+ }
+
+-static cairo_t *
+-get_cairo_context (GdkPangoRenderer *gdk_renderer,
+- PangoRenderPart part)
++/* Adjusts matrix and color for the renderer to draw the secondar
++ * "shadow" copy for embossed text */
++static void
++emboss_renderer (PangoRenderer *renderer,
++ PangoRenderPart part,
++ PangoMatrix **save_matrix,
++ PangoColor **save_color)
++{
++ GdkPangoRendererPrivate *priv = GDK_PANGO_RENDERER(renderer)->priv;
++ static const PangoColor white = { 0xffff, 0xffff, 0xffff };
++ PangoMatrix tmp_matrix = PANGO_MATRIX_INIT;
++
++ priv->in_emboss = TRUE;
++
++ *save_color = pango_renderer_get_color (renderer, part);
++ if (*save_color)
++ *save_color = pango_color_copy (*save_color);
++
++ *save_matrix = renderer->matrix;
++ if (*save_matrix)
++ {
++ *save_matrix = pango_matrix_copy (*save_matrix);
++ tmp_matrix = **save_matrix;
++ }
++
++ /* The gymnastics here to adjust the matrix are because we want
++ * to offset by +1,+1 in device-space, not in user-space,
++ * so we can't just draw the layout at x + 1, y + 1
++ */
++ tmp_matrix.x0 += 1;
++ tmp_matrix.y0 += 1;
++
++ pango_renderer_set_matrix (renderer, &tmp_matrix);
++ pango_renderer_set_color (renderer, part, &white);
++}
++
++/* Restores from emboss_renderer() */
++static void
++unemboss_renderer (PangoRenderer *renderer,
++ PangoRenderPart part,
++ PangoMatrix **save_matrix,
++ PangoColor **save_color)
++{
++ GdkPangoRendererPrivate *priv = GDK_PANGO_RENDERER(renderer)->priv;
++ pango_renderer_set_matrix (renderer, *save_matrix);
++ pango_renderer_set_color (renderer, part, *save_color);
++
++ if (*save_matrix)
++ pango_matrix_free (*save_matrix);
++ if (*save_color)
++ pango_color_free (*save_color);
++
++ priv->in_emboss = FALSE;
++}
++
++/* Gets the GC for drawing @part. This make involve copying the base GC
++ * for the renderer, in which case we keep a one-GC cache. */
++static GdkGC *
++get_gc (GdkPangoRenderer *gdk_renderer,
++ PangoRenderPart part)
+ {
+ PangoRenderer *renderer = PANGO_RENDERER (gdk_renderer);
++ PangoColor *color;
++ GdkBitmap *stipple;
+ GdkPangoRendererPrivate *priv = gdk_renderer->priv;
+
+- if (!priv->cr)
++ color = pango_renderer_get_color (renderer, part);
++
++ if (part <= MAX_RENDER_PART)
++ stipple = priv->stipple[part];
++ else
++ stipple = NULL;
++
++ if (!color && !stipple) /* nothing override, use base_gc */
++ return priv->base_gc;
++ else
+ {
+- const PangoMatrix *matrix;
++ gboolean new_stipple = FALSE;
++ gboolean new_color = FALSE;
+
+- priv->cr = gdk_cairo_create (priv->drawable);
++ if (stipple != priv->gc_stipple)
++ new_stipple = TRUE;
+
+- matrix = pango_renderer_get_matrix (renderer);
+- if (matrix)
++ if ((priv->gc_color_set && !color) ||
++ (!priv->gc_color_set && color) ||
++ priv->gc_color.red != color->red ||
++ priv->gc_color.green != color->green ||
++ priv->gc_color.blue != color->blue)
++ new_color = TRUE;
++
++ if (!priv->gc)
+ {
+- cairo_matrix_t cairo_matrix;
+-
+- cairo_matrix_init (&cairo_matrix,
+- matrix->xx, matrix->yx,
+- matrix->xy, matrix->yy,
+- matrix->x0, matrix->y0);
+- cairo_set_matrix (priv->cr, &cairo_matrix);
++ priv->gc = gdk_gc_new (priv->drawable);
++ gdk_gc_copy (priv->gc, priv->base_gc);
++ }
++ else if (new_color && priv->gc_color_set && !color)
++ {
++ /* We have to recopy the original GC onto the cached GC
++ * to get the default color */
++ new_stipple = TRUE;
++ gdk_gc_copy (priv->gc, priv->base_gc);
++ }
++ else if (new_stipple && priv->gc_stipple && !stipple)
++ {
++ /* Similarly, we need to make a new copy to restore to the
++ * default stipple state (the caller may have set a stipple
++ * on the GC, and even if not, gdk_gc_set_stipple (gc, NULL)
++ * doesn't work currently to restore to the default X stipple) */
++ new_color = TRUE;
++ gdk_gc_copy (priv->gc, priv->base_gc);
+ }
+- }
+-
+- if (part != priv->last_part)
+- {
+- PangoColor *pango_color;
+- GdkColor *color;
+- GdkColor tmp_color;
+- gboolean changed;
+
+- pango_color = pango_renderer_get_color (renderer, part);
+-
+- if (priv->last_part != -1)
+- changed = priv->gc_changed ||
+- priv->stipple[priv->last_part] != priv->stipple[part] ||
+- !color_equal (pango_color,
+- pango_renderer_get_color (renderer, priv->last_part));
+- else
+- changed = TRUE;
+-
+- if (changed)
++ if (new_color)
+ {
+- if (pango_color)
++ if (color)
+ {
+- tmp_color.red = pango_color->red;
+- tmp_color.green = pango_color->green;
+- tmp_color.blue = pango_color->blue;
++ GdkColor gdk_color;
++
++ gdk_color.red = color->red;
++ gdk_color.green = color->green;
++ gdk_color.blue = color->blue;
+
+- color = &tmp_color;
++ gdk_gc_set_rgb_fg_color (priv->gc, &gdk_color);
++
++ priv->gc_color = *color;
++ priv->gc_color_set = TRUE;
+ }
+ else
+- color = NULL;
++ priv->gc_color_set = FALSE;
++ }
+
+- _gdk_gc_update_context (priv->base_gc,
+- priv->cr,
+- color,
+- priv->stipple[part],
+- priv->gc_changed);
++ if (new_stipple)
++ {
++ if (priv->gc_stipple)
++ g_object_unref (priv->gc_stipple);
++
++ if (stipple)
++ {
++ gdk_gc_set_stipple (priv->gc, stipple);
++ gdk_gc_set_fill (priv->gc, GDK_STIPPLED);
++ priv->gc_stipple = g_object_ref (stipple);
++ }
++ else
++ priv->gc_stipple = NULL;
+ }
+
+- priv->last_part = part;
+- priv->gc_changed = FALSE;
++ return priv->gc;
+ }
+-
+- return priv->cr;
+ }
+
+ static void
+@@ -225,133 +307,78 @@
+ {
+ GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
+ GdkPangoRendererPrivate *priv = gdk_renderer->priv;
+- cairo_t *cr;
+
+- cr = get_cairo_context (gdk_renderer,
+- PANGO_RENDER_PART_FOREGROUND);
++ flush_trapezoids (gdk_renderer);
+
+- if (priv->embossed)
++ if (!priv->in_emboss && priv->embossed)
+ {
+- cairo_save (cr);
+- emboss_context (cr);
+- cairo_move_to (cr, (double)x / PANGO_SCALE, (double)y / PANGO_SCALE);
+- pango_cairo_show_glyph_string (cr, font, glyphs);
+- cairo_restore (cr);
+- }
+-
+- cairo_move_to (cr, (double)x / PANGO_SCALE, (double)y / PANGO_SCALE);
+- pango_cairo_show_glyph_string (cr, font, glyphs);
+-}
+-
+-/* Draws an error underline that looks like one of:
+- * H E H
+- * /\ /\ /\ /\ /\ -
+- * A/ \ / \ / \ A/ \ / \ |
+- * \ \ / \ / /D \ \ / \ |
+- * \ \/ C \/ / \ \/ C \ | height = HEIGHT_SQUARES * square
+- * \ /\ F / \ F /\ \ |
+- * \ / \ / \ / \ \G |
+- * \ / \ / \ / \ / |
+- * \/ \/ \/ \/ -
+- * B B
+- * |----|
+- * unit_width = (HEIGHT_SQUARES - 1) * square
+- *
+- * The x, y, width, height passed in give the desired bounding box;
+- * x/width are adjusted to make the underline a integer number of units
+- * wide.
+- */
+-#define HEIGHT_SQUARES 2.5
++ PangoMatrix *save_matrix;
++ PangoColor *save_color;
+
+-/* Cut-and-pasted between here and pango/pango/pangocairo-render.c */
++ emboss_renderer (renderer, PANGO_RENDER_PART_FOREGROUND, &save_matrix, &save_color);
++ gdk_draw_glyphs_transformed (priv->drawable,
++ get_gc (gdk_renderer, PANGO_RENDER_PART_FOREGROUND),
++ renderer->matrix, font, x, y, glyphs);
++ unemboss_renderer (renderer, PANGO_RENDER_PART_FOREGROUND, &save_matrix, &save_color);
++ }
++
++ gdk_draw_glyphs_transformed (priv->drawable,
++ get_gc (gdk_renderer, PANGO_RENDER_PART_FOREGROUND),
++ renderer->matrix, font, x, y, glyphs);
++}
++
++/* Outputs any pending trapezoids, we do this when the part or
++ * part color changes, when we are about to draw text, etc. */
+ static void
+-draw_error_underline (cairo_t *cr,
+- double x,
+- double y,
+- double width,
+- double height)
+-{
+- double square = height / HEIGHT_SQUARES;
+- double unit_width = (HEIGHT_SQUARES - 1) * square;
+- int width_units = (width + unit_width / 2) / unit_width;
+- double y_top, y_bottom;
+- int i;
++flush_trapezoids (GdkPangoRenderer *gdk_renderer)
++{
++ GdkPangoRendererPrivate *priv = gdk_renderer->priv;
+
+- x += (width - width_units * unit_width) / 2;
+- width = width_units * unit_width;
++ if (!priv->trapezoids || priv->trapezoids->len == 0)
++ return;
+
+- y_top = y;
+- y_bottom = y + height;
+-
+- /* Bottom of squiggle */
+- cairo_move_to (cr, x - square / 2, y_top + square / 2); /* A */
+- for (i = 0; i < width_units; i += 2)
+- {
+- double x_middle = x + (i + 1) * unit_width;
+- double x_right = x + (i + 2) * unit_width;
+-
+- cairo_line_to (cr, x_middle, y_bottom); /* B */
+-
+- if (i + 1 == width_units)
+- /* Nothing */;
+- else if (i + 2 == width_units)
+- cairo_line_to (cr, x_right + square / 2, y_top + square / 2); /* D */
+- else
+- cairo_line_to (cr, x_right, y_top + square); /* C */
+- }
+-
+- /* Top of squiggle */
+- for (i -= 2; i >= 0; i -= 2)
+- {
+- double x_left = x + i * unit_width;
+- double x_middle = x + (i + 1) * unit_width;
+- double x_right = x + (i + 2) * unit_width;
+-
+- if (i + 1 == width_units)
+- cairo_line_to (cr, x_middle + square / 2, y_bottom - square / 2); /* G */
+- else {
+- if (i + 2 == width_units)
+- cairo_line_to (cr, x_right, y_top); /* E */
+- cairo_line_to (cr, x_middle, y_bottom - square); /* F */
+- }
+-
+- cairo_line_to (cr, x_left, y_top); /* H */
+- }
++ gdk_draw_trapezoids (priv->drawable,
++ get_gc (gdk_renderer, priv->trapezoid_part),
++ (GdkTrapezoid *)priv->trapezoids->data,
++ priv->trapezoids->len);
+
+- cairo_close_path (cr);
+- cairo_fill (cr);
++ g_array_set_size (priv->trapezoids, 0);
+ }
+
++/* Draws a single trapezoid ... we don't draw it immediately, but rather
++ * cache it to join together with other trapezoids that form part of the
++ * same logical shape */
+ static void
+-gdk_pango_renderer_draw_rectangle (PangoRenderer *renderer,
+- PangoRenderPart part,
+- int x,
+- int y,
+- int width,
+- int height)
++gdk_pango_renderer_draw_trapezoid (PangoRenderer *renderer,
++ PangoRenderPart part,
++ double y1,
++ double x11,
++ double x21,
++ double y2,
++ double x12,
++ double x22)
+ {
+ GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
+- GdkPangoRendererPrivate *priv = gdk_renderer->priv;
+- cairo_t *cr;
+-
+- cr = get_cairo_context (gdk_renderer, part);
+-
+- if (priv->embossed && part != PANGO_RENDER_PART_BACKGROUND)
+- {
+- cairo_save (cr);
+- emboss_context (cr);
+- cairo_rectangle (cr,
+- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
+- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
++ GdkTrapezoid trap;
+
+- cairo_fill (cr);
+- cairo_restore (cr);
+- }
++ if (!gdk_renderer->priv->trapezoids)
++ gdk_renderer->priv->trapezoids = g_array_new (FALSE, FALSE,
++ sizeof (GdkTrapezoid));
++
++ if (gdk_renderer->priv->trapezoids->len > 0 &&
++ gdk_renderer->priv->trapezoid_part != part)
++ flush_trapezoids (gdk_renderer);
++
++ gdk_renderer->priv->trapezoid_part = part;
++
++ trap.y1 = y1;
++ trap.x11 = x11 / 2;
++ trap.x21 = x21;
++ trap.y2 = y2;
++ trap.x12 = x12;
++ trap.x22 = x22;
+
+- cairo_rectangle (cr,
+- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
+- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
+- cairo_fill (cr);
++ g_array_append_val (gdk_renderer->priv->trapezoids, trap);
+ }
+
+ static void
+@@ -363,23 +390,51 @@
+ {
+ GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
+ GdkPangoRendererPrivate *priv = gdk_renderer->priv;
+- cairo_t *cr;
+-
+- cr = get_cairo_context (gdk_renderer, PANGO_RENDER_PART_UNDERLINE);
+-
+- if (priv->embossed)
++
++ if (!priv->in_emboss && priv->embossed)
+ {
+- cairo_save (cr);
+- emboss_context (cr);
+- draw_error_underline (cr,
+- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
+- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
+- cairo_restore (cr);
++ PangoMatrix *save_matrix;
++ PangoColor *save_color;
++
++ emboss_renderer (renderer, PANGO_RENDER_PART_UNDERLINE, &save_matrix, &save_color);
++ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_error_underline (renderer,
++ x, y, width, height);
++ unemboss_renderer (renderer, PANGO_RENDER_PART_UNDERLINE, &save_matrix, &save_color);
+ }
+
+- draw_error_underline (cr,
+- (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
+- (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
++ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_error_underline (renderer,
++ x, y, width, height);
++}
++
++/* We can't handle embossing at the level of trapezoids, because when an
++ * underline is split into multiple trapezoids, the normal and shadow
++ * trapezoids will be drawn mixed together. Instead, we have to emboss
++ * and entire rectangle or error underline
++ */
++static void
++gdk_pango_renderer_draw_rectangle (PangoRenderer *renderer,
++ PangoRenderPart part,
++ int x,
++ int y,
++ int width,
++ int height)
++{
++ GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
++ GdkPangoRendererPrivate *priv = gdk_renderer->priv;
++
++ if (!priv->in_emboss && priv->embossed && part != PANGO_RENDER_PART_BACKGROUND)
++ {
++ PangoMatrix *save_matrix;
++ PangoColor *save_color;
++
++ emboss_renderer (renderer, part, &save_matrix, &save_color);
++ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_rectangle (renderer, part,
++ x, y, width, height);
++ unemboss_renderer (renderer, part, &save_matrix, &save_color);
++ }
++
++ PANGO_RENDERER_CLASS (gdk_pango_renderer_parent_class)->draw_rectangle (renderer, part,
++ x, y, width, height);
+ }
+
+ static void
+@@ -388,8 +443,8 @@
+ {
+ GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
+
+- if (gdk_renderer->priv->last_part == part)
+- gdk_renderer->priv->last_part = (PangoRenderPart)-1;
++ if (part == gdk_renderer->priv->trapezoid_part)
++ flush_trapezoids (gdk_renderer);
+ }
+
+ static void
+@@ -410,13 +465,8 @@
+ {
+ GdkPangoRenderer *gdk_renderer = GDK_PANGO_RENDERER (renderer);
+ GdkPangoRendererPrivate *priv = gdk_renderer->priv;
+-
+- if (priv->cr)
+- {
+- cairo_destroy (priv->cr);
+- priv->cr = NULL;
+- }
+- priv->last_part = (PangoRenderPart)-1;
++
++ flush_trapezoids (gdk_renderer);
+ }
+
+ static void
+@@ -515,7 +565,6 @@
+ GDK_TYPE_PANGO_RENDERER,
+ GdkPangoRendererPrivate);
+
+- renderer->priv->last_part = (PangoRenderPart)-1;
+ renderer->priv->gc_changed = TRUE;
+ }
+
+@@ -527,6 +576,7 @@
+ PangoRendererClass *renderer_class = PANGO_RENDERER_CLASS (klass);
+
+ renderer_class->draw_glyphs = gdk_pango_renderer_draw_glyphs;
++ renderer_class->draw_trapezoid = gdk_pango_renderer_draw_trapezoid;
+ renderer_class->draw_rectangle = gdk_pango_renderer_draw_rectangle;
+ renderer_class->draw_error_underline = gdk_pango_renderer_draw_error_underline;
+ renderer_class->part_changed = gdk_pango_renderer_part_changed;
+@@ -647,6 +697,8 @@
+
+ priv = gdk_renderer->priv;
+
++ flush_trapezoids (gdk_renderer);
++
+ if (priv->drawable != drawable)
+ {
+ if (priv->drawable)
+@@ -681,6 +733,8 @@
+
+ priv = gdk_renderer->priv;
+
++ flush_trapezoids (gdk_renderer);
++
+ if (priv->base_gc != gc)
+ {
+ if (priv->base_gc)
+@@ -689,6 +743,20 @@
+ if (priv->base_gc)
+ g_object_ref (priv->base_gc);
+
++ if (priv->gc)
++ {
++ g_object_unref (priv->gc);
++ priv->gc = NULL;
++ }
++
++ priv->gc_color_set = FALSE;
++
++ if (priv->gc_stipple)
++ {
++ g_object_unref (priv->gc_stipple);
++ priv->gc_stipple = NULL;
++ }
++
+ priv->gc_changed = TRUE;
+ }
+ }
+@@ -1414,50 +1482,5 @@
+ return gdk_pango_context_get_for_screen (gdk_screen_get_default ());
+ }
+
+-/**
+- * gdk_pango_context_get_for_screen:
+- * @screen: the #GdkScreen for which the context is to be created.
+- *
+- * Creates a #PangoContext for @screen.
+- *
+- * The context must be freed when you're finished with it.
+- *
+- * When using GTK+, normally you should use gtk_widget_get_pango_context()
+- * instead of this function, to get the appropriate context for
+- * the widget you intend to render text onto.
+- *
+- * The newly created context will have the default font options
+- * (see #cairo_font_options_t) for the screen; if these options
+- * change it will not be updated. Using gtk_widget_get_pango_context()
+- * is more convenient if you want to keep a context around and track
+- * changes to the screen's font rendering settings.
+- *
+- * Return value: a new #PangoContext for @screen
+- *
+- * Since: 2.2
+- **/
+-PangoContext *
+-gdk_pango_context_get_for_screen (GdkScreen *screen)
+-{
+- PangoFontMap *fontmap;
+- PangoContext *context;
+- const cairo_font_options_t *options;
+- double dpi;
+-
+- g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
+-
+- fontmap = pango_cairo_font_map_get_default ();
+-
+- context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
+-
+- options = gdk_screen_get_font_options (screen);
+- pango_cairo_context_set_font_options (context, options);
+-
+- dpi = gdk_screen_get_resolution (screen);
+- pango_cairo_context_set_resolution (context, dpi);
+-
+- return context;
+-}
+-
+ #define __GDK_PANGO_C__
+ #include "gdkaliasdef.c"
+Index: gtk+-2.10.6/gdk/gdk.symbols
+===================================================================
+--- gtk+-2.10.6.orig/gdk/gdk.symbols 2006-10-30 12:58:29.000000000 +0000
++++ gtk+-2.10.6/gdk/gdk.symbols 2006-10-30 12:59:30.000000000 +0000
+@@ -861,7 +861,6 @@
+ gdk_pango_attr_embossed_new
+ gdk_pango_attr_stipple_new
+ gdk_pango_context_get
+-gdk_pango_context_get_for_screen
+ #ifndef GDK_DISABLE_DEPRECATED
+ gdk_pango_context_set_colormap
+ #endif
+@@ -877,6 +876,12 @@
+ #endif
+ #endif
+
++#if IN_HEADER(__GDK_PANGO_H__)
++#if IN_FILE(__GDK_PANGO_X11_C__)
++gdk_pango_context_get_for_screen
++#endif
++#endif
++
+ #if IN_HEADER(__GDK_PIXBUF_H__)
+ #if IN_FILE(__GDK_PIXBUF_DRAWABLE_C__)
+ gdk_pixbuf_get_from_drawable
+Index: gtk+-2.10.6/gdk/gdkwindow.c
+===================================================================
+--- gtk+-2.10.6.orig/gdk/gdkwindow.c 2006-10-30 12:58:29.000000000 +0000
++++ gtk+-2.10.6/gdk/gdkwindow.c 2006-10-30 12:59:30.000000000 +0000
+@@ -1834,9 +1834,14 @@
+ }
+ else
+ {
+- method->cr = cairo_create (paint->surface);
++ /*method->cr = cairo_create (paint->surface);
+
+- gdk_cairo_set_source_color (method->cr, &private->bg_color);
++ gdk_cairo_set_source_color (method->cr, &private->bg_color);*/
++ GdkGC *gc = _gdk_drawable_get_scratch_gc (paint->pixmap, FALSE);
++
++ gdk_gc_set_foreground (gc, &(private->bg_color));
++
++ method->gc = g_object_ref (gc);
+ }
+ }
+
+Index: gtk+-2.10.6/gdk/x11/gdkdisplay-x11.c
+===================================================================
+--- gtk+-2.10.6.orig/gdk/x11/gdkdisplay-x11.c 2006-10-30 12:58:29.000000000 +0000
++++ gtk+-2.10.6/gdk/x11/gdkdisplay-x11.c 2006-10-30 12:59:30.000000000 +0000
+@@ -190,7 +190,8 @@
+ display_x11->leader_window_title_set = FALSE;
+
+ display_x11->have_render = GDK_UNKNOWN;
+-
++ display_x11->have_render_with_trapezoids = GDK_UNKNOWN;
++
+ #ifdef HAVE_XFIXES
+ if (XFixesQueryExtension (display_x11->xdisplay,
+ &display_x11->xfixes_event_base,
+Index: gtk+-2.10.6/gdk/x11/gdkdisplay-x11.h
+===================================================================
+--- gtk+-2.10.6.orig/gdk/x11/gdkdisplay-x11.h 2006-10-30 12:58:29.000000000 +0000
++++ gtk+-2.10.6/gdk/x11/gdkdisplay-x11.h 2006-10-30 12:59:30.000000000 +0000
+@@ -78,6 +78,7 @@
+ gboolean use_xshm;
+ gboolean have_shm_pixmaps;
+ GdkTristate have_render;
++ GdkTristate have_render_with_trapezoids;
+ gboolean have_xfixes;
+ gint xfixes_event_base;
+
+Index: gtk+-2.10.6/gdk/x11/gdkdrawable-x11.c
+===================================================================
+--- gtk+-2.10.6.orig/gdk/x11/gdkdrawable-x11.c 2006-10-30 12:58:30.000000000 +0000
++++ gtk+-2.10.6/gdk/x11/gdkdrawable-x11.c 2006-10-30 12:59:30.000000000 +0000
+@@ -26,6 +26,8 @@
+
+ #include <config.h>
+
++#include <pango/pangoxft.h>
++
+ #include "gdkx.h"
+ #include "gdkregion-generic.h"
+
+@@ -106,7 +108,21 @@
+ GdkGC *gc,
+ GdkPoint *points,
+ gint npoints);
+-
++
++static void gdk_x11_draw_glyphs (GdkDrawable *drawable,
++ GdkGC *gc,
++ PangoFont *font,
++ gint x,
++ gint y,
++ PangoGlyphString *glyphs);
++static void gdk_x11_draw_glyphs_transformed (GdkDrawable *drawable,
++ GdkGC *gc,
++ PangoMatrix *matrix,
++ PangoFont *font,
++ gint x,
++ gint y,
++ PangoGlyphString *glyphs);
++
+ static void gdk_x11_draw_image (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkImage *image,
+@@ -129,6 +145,11 @@
+ gint x_dither,
+ gint y_dither);
+
++static void gdk_x11_draw_trapezoids (GdkDrawable *drawable,
++ GdkGC *gc,
++ GdkTrapezoid *trapezoids,
++ gint n_trapezoids);
++
+ static cairo_surface_t *gdk_x11_ref_cairo_surface (GdkDrawable *drawable);
+
+ static void gdk_x11_set_colormap (GdkDrawable *drawable,
+@@ -163,8 +184,11 @@
+ drawable_class->draw_points = gdk_x11_draw_points;
+ drawable_class->draw_segments = gdk_x11_draw_segments;
+ drawable_class->draw_lines = gdk_x11_draw_lines;
++ drawable_class->draw_glyphs = gdk_x11_draw_glyphs;
++ drawable_class->draw_glyphs_transformed = gdk_x11_draw_glyphs_transformed;
+ drawable_class->draw_image = gdk_x11_draw_image;
+ drawable_class->draw_pixbuf = gdk_x11_draw_pixbuf;
++ drawable_class->draw_trapezoids = gdk_x11_draw_trapezoids;
+
+ drawable_class->ref_cairo_surface = gdk_x11_ref_cairo_surface;
+
+@@ -327,6 +351,72 @@
+ return x11display->have_render == GDK_YES;
+ }
+
++gboolean
++_gdk_x11_have_render_with_trapezoids (GdkDisplay *display)
++{
++ Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
++ GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display);
++
++ if (x11display->have_render_with_trapezoids == GDK_UNKNOWN)
++ {
++ x11display->have_render_with_trapezoids = GDK_NO;
++ if (_gdk_x11_have_render (display))
++ {
++ /*
++ * Require protocol >= 0.4 for CompositeTrapezoids support.
++ */
++ int major_version, minor_version;
++
++#define XRENDER_TETRAPEZOIDS_MAJOR 0
++#define XRENDER_TETRAPEZOIDS_MINOR 4
++
++ if (XRenderQueryVersion (xdisplay, &major_version,
++ &minor_version))
++ if ((major_version == XRENDER_TETRAPEZOIDS_MAJOR) &&
++ (minor_version >= XRENDER_TETRAPEZOIDS_MINOR))
++ x11display->have_render_with_trapezoids = GDK_YES;
++ }
++ }
++
++ return x11display->have_render_with_trapezoids == GDK_YES;
++}
++
++static XftDraw *
++gdk_x11_drawable_get_xft_draw (GdkDrawable *drawable)
++{
++ GdkDrawableImplX11 *impl = GDK_DRAWABLE_IMPL_X11 (drawable);
++
++ if (impl->xft_draw == NULL)
++ {
++ GdkColormap *colormap = gdk_drawable_get_colormap (drawable);
++
++ if (colormap)
++ {
++ GdkVisual *visual;
++
++ visual = gdk_colormap_get_visual (colormap);
++
++ impl->xft_draw = XftDrawCreate (GDK_SCREEN_XDISPLAY (impl->screen), impl->xid,
++ GDK_VISUAL_XVISUAL (visual), GDK_COLORMAP_XCOLORMAP (colormap));
++ }
++ else if (gdk_drawable_get_depth (drawable) == 1)
++ {
++ impl->xft_draw = XftDrawCreateBitmap (GDK_SCREEN_XDISPLAY (impl->screen), impl->xid);
++ }
++ else
++ {
++ g_warning ("Using Xft rendering requires the drawable argument to\n"
++ "have a specified colormap. All windows have a colormap,\n"
++ "however, pixmaps only have colormap by default if they\n"
++ "were created with a non-NULL window argument. Otherwise\n"
++ "a colormap must be set on them with gdk_drawable_set_colormap");
++ return NULL;
++ }
++ }
++
++ return impl->xft_draw;
++}
++
+ static Picture
+ gdk_x11_drawable_get_picture (GdkDrawable *drawable)
+ {
+@@ -393,6 +483,57 @@
+ }
+ }
+
++static void
++gdk_x11_drawable_update_xft_clip (GdkDrawable *drawable,
++ GdkGC *gc)
++{
++ XftDraw *xft_draw = gdk_x11_drawable_get_xft_draw (drawable);
++ GdkRegion *clip_region = _gdk_gc_get_clip_region (gc);
++
++ if (gc && clip_region)
++ {
++ GdkRegionBox *boxes = clip_region->rects;
++ gint n_boxes = clip_region->numRects;
++#if 0 /* Until XftDrawSetClipRectangles is there */
++ XRectangle *rects = g_new (XRectangle, n_boxes);
++ int i;
++
++ for (i=0; i < n_boxes; i++)
++ {
++ rects[i].x = CLAMP (boxes[i].x1 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT);
++ rects[i].y = CLAMP (boxes[i].y1 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT);
++ rects[i].width = CLAMP (boxes[i].x2 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT) - rects[i].x;
++ rects[i].height = CLAMP (boxes[i].y2 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT) - rects[i].y;
++ }
++ XftDrawSetClipRectangles (xft_draw, 0, 0, rects, n_boxes);
++
++ g_free (rects);
++#else
++ Region xregion = XCreateRegion ();
++ int i;
++
++ for (i=0; i < n_boxes; i++)
++ {
++ XRectangle rect;
++
++ rect.x = CLAMP (boxes[i].x1 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT);
++ rect.y = CLAMP (boxes[i].y1 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT);
++ rect.width = CLAMP (boxes[i].x2 + gc->clip_x_origin, G_MINSHORT, G_MAXSHORT) - rect.x;
++ rect.height = CLAMP (boxes[i].y2 + gc->clip_y_origin, G_MINSHORT, G_MAXSHORT) - rect.y;
++
++ XUnionRectWithRegion (&rect, xregion, xregion);
++ }
++
++ XftDrawSetClip (xft_draw, xregion);
++ XDestroyRegion (xregion);
++#endif
++ }
++ else
++ {
++ XftDrawSetClip (xft_draw, NULL);
++ }
++}
++
+ /*****************************************************
+ * X11 specific implementations of generic functions *
+ *****************************************************/
+@@ -780,6 +921,45 @@
+ }
+
+ static void
++gdk_x11_draw_glyphs (GdkDrawable *drawable,
++ GdkGC *gc,
++ PangoFont *font,
++ gint x,
++ gint y,
++ PangoGlyphString *glyphs)
++{
++ gdk_x11_draw_glyphs_transformed (drawable, gc, NULL,
++ font,
++ x * PANGO_SCALE,
++ y * PANGO_SCALE,
++ glyphs);
++}
++
++static void
++gdk_x11_draw_glyphs_transformed (GdkDrawable *drawable,
++ GdkGC *gc,
++ PangoMatrix *matrix,
++ PangoFont *font,
++ gint x,
++ gint y,
++ PangoGlyphString *glyphs)
++{
++ GdkDrawableImplX11 *impl;
++ PangoRenderer *renderer;
++
++ impl = GDK_DRAWABLE_IMPL_X11 (drawable);
++
++ g_return_if_fail (PANGO_XFT_IS_FONT (font));
++
++ renderer = _gdk_x11_renderer_get (drawable, gc);
++ if (matrix)
++ pango_renderer_set_matrix (renderer, matrix);
++ pango_renderer_draw_glyphs (renderer, font, glyphs, x, y);
++ if (matrix)
++ pango_renderer_set_matrix (renderer, NULL);
++}
++
++static void
+ gdk_x11_draw_image (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkImage *image,
+@@ -1444,6 +1624,47 @@
+ }
+
+ static void
++gdk_x11_draw_trapezoids (GdkDrawable *drawable,
++ GdkGC *gc,
++ GdkTrapezoid *trapezoids,
++ gint n_trapezoids)
++{
++ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
++ GdkDisplay *display = gdk_screen_get_display (screen);
++ XTrapezoid *xtrapezoids;
++ gint i;
++
++ if (!_gdk_x11_have_render_with_trapezoids (display))
++ {
++ GdkDrawable *wrapper = GDK_DRAWABLE_IMPL_X11 (drawable)->wrapper;
++ GDK_DRAWABLE_CLASS (_gdk_drawable_impl_x11_parent_class)->draw_trapezoids (wrapper, gc,
++ trapezoids, n_trapezoids);
++ return;
++ }
++
++ xtrapezoids = g_new (XTrapezoid, n_trapezoids);
++
++ for (i = 0; i < n_trapezoids; i++)
++ {
++ xtrapezoids[i].top = XDoubleToFixed (trapezoids[i].y1);
++ xtrapezoids[i].bottom = XDoubleToFixed (trapezoids[i].y2);
++ xtrapezoids[i].left.p1.x = XDoubleToFixed (trapezoids[i].x11);
++ xtrapezoids[i].left.p1.y = XDoubleToFixed (trapezoids[i].y1);
++ xtrapezoids[i].left.p2.x = XDoubleToFixed (trapezoids[i].x12);
++ xtrapezoids[i].left.p2.y = XDoubleToFixed (trapezoids[i].y2);
++ xtrapezoids[i].right.p1.x = XDoubleToFixed (trapezoids[i].x21);
++ xtrapezoids[i].right.p1.y = XDoubleToFixed (trapezoids[i].y1);
++ xtrapezoids[i].right.p2.x = XDoubleToFixed (trapezoids[i].x22);
++ xtrapezoids[i].right.p2.y = XDoubleToFixed (trapezoids[i].y2);
++ }
++
++ _gdk_x11_drawable_draw_xtrapezoids (drawable, gc,
++ xtrapezoids, n_trapezoids);
++
++ g_free (xtrapezoids);
++}
++
++static void
+ gdk_x11_cairo_surface_destroy (void *data)
+ {
+ GdkDrawableImplX11 *impl = data;
+@@ -1498,5 +1719,89 @@
+ return impl->cairo_surface;
+ }
+
++void
++_gdk_x11_drawable_draw_xtrapezoids (GdkDrawable *drawable,
++ GdkGC *gc,
++ XTrapezoid *xtrapezoids,
++ int n_trapezoids)
++{
++ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
++ GdkDisplay *display = gdk_screen_get_display (screen);
++ GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display);
++
++ XftDraw *draw;
++
++ if (!_gdk_x11_have_render_with_trapezoids (display))
++ {
++ /* This is the case of drawing the borders of the unknown glyph box
++ * without render on the display, we need to feed it back to
++ * fallback code. Not efficient, but doesn't matter.
++ */
++ GdkTrapezoid *trapezoids = g_new (GdkTrapezoid, n_trapezoids);
++ int i;
++
++ for (i = 0; i < n_trapezoids; i++)
++ {
++ trapezoids[i].y1 = XFixedToDouble (xtrapezoids[i].top);
++ trapezoids[i].y2 = XFixedToDouble (xtrapezoids[i].bottom);
++ trapezoids[i].x11 = XFixedToDouble (xtrapezoids[i].left.p1.x);
++ trapezoids[i].x12 = XFixedToDouble (xtrapezoids[i].left.p2.x);
++ trapezoids[i].x21 = XFixedToDouble (xtrapezoids[i].right.p1.x);
++ trapezoids[i].x22 = XFixedToDouble (xtrapezoids[i].right.p2.x);
++ }
++
++ gdk_x11_draw_trapezoids (drawable, gc, trapezoids, n_trapezoids);
++ g_free (trapezoids);
++
++ return;
++ }
++
++ gdk_x11_drawable_update_xft_clip (drawable, gc);
++ draw = gdk_x11_drawable_get_xft_draw (drawable);
++
++ if (!x11display->mask_format)
++ x11display->mask_format = XRenderFindStandardFormat (x11display->xdisplay,
++ PictStandardA8);
++
++ XRenderCompositeTrapezoids (x11display->xdisplay, PictOpOver,
++ _gdk_x11_gc_get_fg_picture (gc),
++ XftDrawPicture (draw),
++ x11display->mask_format,
++ - gc->ts_x_origin, - gc->ts_y_origin,
++ xtrapezoids, n_trapezoids);
++}
++
++void
++_gdk_x11_drawable_draw_xft_glyphs (GdkDrawable *drawable,
++ GdkGC *gc,
++ XftFont *xft_font,
++ XftGlyphSpec *glyphs,
++ gint n_glyphs)
++{
++ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
++ GdkDisplay *display = gdk_screen_get_display (screen);
++ GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display);
++ XftDraw *draw;
++
++ gdk_x11_drawable_update_xft_clip (drawable, gc);
++ draw = gdk_x11_drawable_get_xft_draw (drawable);
++
++ if (_gdk_x11_have_render (display))
++ {
++ XftGlyphSpecRender (x11display->xdisplay, PictOpOver,
++ _gdk_x11_gc_get_fg_picture (gc),
++ xft_font,
++ XftDrawPicture (draw),
++ - gc->ts_x_origin, - gc->ts_y_origin,
++ glyphs, n_glyphs);
++ }
++ else
++ {
++ XftColor color;
++
++ _gdk_gc_x11_get_fg_xft_color (gc, &color);
++ XftDrawGlyphSpec (draw, &color, xft_font, glyphs, n_glyphs);
++ }
++}
+ #define __GDK_DRAWABLE_X11_C__
+ #include "gdkaliasdef.c"
+Index: gtk+-2.10.6/gdk/x11/gdkdrawable-x11.h
+===================================================================
+--- gtk+-2.10.6.orig/gdk/x11/gdkdrawable-x11.h 2006-10-30 12:58:30.000000000 +0000
++++ gtk+-2.10.6/gdk/x11/gdkdrawable-x11.h 2006-10-30 12:59:30.000000000 +0000
+@@ -33,6 +33,7 @@
+
+ #include <X11/Xlib.h>
+ #include <X11/extensions/Xrender.h>
++#include <X11/Xft/Xft.h>
+
+ G_BEGIN_DECLS
+
+@@ -68,6 +69,8 @@
+ Window xid;
+ GdkScreen *screen;
+
++ XftDraw *xft_draw;
++
+ Picture picture;
+ cairo_surface_t *cairo_surface;
+ };
+@@ -92,7 +95,15 @@
+ /* Note that the following take GdkDrawableImplX11, not the wrapper drawable */
+ void _gdk_x11_drawable_finish (GdkDrawable *drawable);
+ void _gdk_x11_drawable_update_size (GdkDrawable *drawable);
+-
++void _gdk_x11_drawable_draw_xtrapezoids (GdkDrawable *drawable,
++ GdkGC *gc,
++ XTrapezoid *xtrapezoids,
++ int n_trapezoids);
++void _gdk_x11_drawable_draw_xft_glyphs (GdkDrawable *drawable,
++ GdkGC *gc,
++ XftFont *xft_font,
++ XftGlyphSpec *glyphs,
++ gint n_glyphs);
+ G_END_DECLS
+
+ #endif /* __GDK_DRAWABLE_X11_H__ */
+Index: gtk+-2.10.6/gdk/x11/gdkgc-x11.c
+===================================================================
+--- gtk+-2.10.6.orig/gdk/x11/gdkgc-x11.c 2006-10-30 12:58:30.000000000 +0000
++++ gtk+-2.10.6/gdk/x11/gdkgc-x11.c 2006-10-30 12:59:30.000000000 +0000
+@@ -80,7 +80,10 @@
+ gdk_gc_x11_finalize (GObject *object)
+ {
+ GdkGCX11 *x11_gc = GDK_GC_X11 (object);
+-
++
++ if (x11_gc->fg_picture != None)
++ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), x11_gc->fg_picture);
++
+ XFreeGC (GDK_GC_XDISPLAY (x11_gc), GDK_GC_XGC (x11_gc));
+
+ G_OBJECT_CLASS (_gdk_gc_x11_parent_class)->finalize (object);
+@@ -110,7 +113,7 @@
+
+ private->dirty_mask = 0;
+ private->have_clip_mask = FALSE;
+-
++
+ private->screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
+
+ private->depth = gdk_drawable_get_depth (drawable);
+@@ -339,6 +342,18 @@
+ }
+
+ static void
++clear_fg_picture (GdkGC *gc)
++{
++ GdkGCX11 *x11_gc = GDK_GC_X11 (gc);
++
++ if (x11_gc->fg_picture != None)
++ {
++ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), x11_gc->fg_picture);
++ x11_gc->fg_picture = None;
++ }
++}
++
++static void
+ gdk_x11_gc_set_values (GdkGC *gc,
+ GdkGCValues *values,
+ GdkGCValuesMask values_mask)
+@@ -367,6 +382,29 @@
+ x11_gc->have_clip_mask = values->clip_mask != NULL;
+ }
+
++ if (values_mask & GDK_GC_BACKGROUND)
++ {
++ if (_gdk_gc_get_fill (gc) == GDK_OPAQUE_STIPPLED)
++ clear_fg_picture (gc);
++ }
++
++ if (values_mask & GDK_GC_FILL)
++ {
++ clear_fg_picture (gc);
++ }
++
++ if (values_mask & GDK_GC_STIPPLE)
++ {
++ if (_gdk_gc_get_fill (gc) == GDK_STIPPLED || _gdk_gc_get_fill (gc) == GDK_OPAQUE_STIPPLED)
++ clear_fg_picture (gc);
++ }
++
++ if (values_mask & GDK_GC_TILE)
++ {
++ if (_gdk_gc_get_fill (gc) == GDK_TILED)
++ clear_fg_picture (gc);
++ }
++
+ gdk_x11_gc_values_to_xvalues (values, values_mask, &xvalues, &xvalues_mask);
+
+ XChangeGC (GDK_GC_XDISPLAY (gc),
+@@ -642,6 +680,8 @@
+ x11_dst_gc->dirty_mask = x11_src_gc->dirty_mask;
+ x11_dst_gc->have_clip_region = x11_src_gc->have_clip_region;
+ x11_dst_gc->have_clip_mask = x11_src_gc->have_clip_mask;
++
++ clear_fg_picture (dst_gc);
+ }
+
+ /**
+@@ -701,5 +741,359 @@
+ return gc_x11->xgc;
+ }
+
++/* Various bits of the below are roughly cribbed from XFree86
++ * lib/Xft/xftdraw.c, Copyright 2000, Keith Packard
++ */
++
++static XRenderPictFormat *
++foreground_format (GdkGC *gc)
++{
++ XRenderPictFormat pf;
++
++ pf.type = PictTypeDirect;
++ pf.depth = 32;
++ pf.direct.redMask = 0xff;
++ pf.direct.greenMask = 0xff;
++ pf.direct.blueMask = 0xff;
++ pf.direct.alphaMask = 0xff;
++
++ return XRenderFindFormat (GDK_GC_XDISPLAY (gc),
++ (PictFormatType |
++ PictFormatDepth |
++ PictFormatRedMask |
++ PictFormatGreenMask |
++ PictFormatBlueMask |
++ PictFormatAlphaMask),
++ &pf,
++ 0);
++}
++
++static Picture
++make_fg_tile_picture (GdkGC *gc)
++{
++ GdkGCX11 *x11_gc = GDK_GC_X11 (gc);
++ GdkVisual *visual = gdk_drawable_get_visual (_gdk_gc_get_tile (gc));
++ XRenderPictFormat *format = NULL;
++
++ if (visual)
++ {
++ format = XRenderFindVisualFormat (GDK_GC_XDISPLAY (gc),
++ GDK_VISUAL_XVISUAL (visual));
++ }
++ else if (x11_gc->depth == 1)
++ {
++ format = XRenderFindStandardFormat (GDK_GC_XDISPLAY (gc),
++ PictStandardA1);
++ }
++
++ if (format)
++ {
++ XRenderPictureAttributes pa;
++ pa.repeat = True;
++
++ return XRenderCreatePicture (GDK_GC_XDISPLAY (gc),
++ GDK_PIXMAP_XID (_gdk_gc_get_tile (gc)),
++ format,
++ CPRepeat, &pa);
++ }
++
++ return None;
++}
++
++static Picture
++make_stipple_picture (GdkGC *gc)
++{
++ XRenderPictFormat *format = NULL;
++ XRenderPictureAttributes pa;
++
++ format = XRenderFindStandardFormat (GDK_GC_XDISPLAY (gc),
++ PictStandardA1);
++
++ pa.repeat = True;
++ return XRenderCreatePicture (GDK_GC_XDISPLAY (gc),
++ GDK_PIXMAP_XID (_gdk_gc_get_stipple (gc)),
++ format,
++ CPRepeat, &pa);
++}
++
++static Picture
++make_color_picture (GdkGC *gc,
++ XRenderColor *color)
++{
++ GdkGCX11 *x11_gc = GDK_GC_X11 (gc);
++ XRenderPictureAttributes pa;
++ XRenderPictFormat *pix_format = foreground_format (gc);
++ Pixmap pix;
++ Picture picture;
++
++ if (!pix_format)
++ return None;
++
++ pix = XCreatePixmap (GDK_GC_XDISPLAY (gc),
++ GDK_SCREEN_XROOTWIN (x11_gc->screen),
++ 1, 1, pix_format->depth);
++ pa.repeat = True;
++ picture = XRenderCreatePicture (GDK_GC_XDISPLAY (gc),
++ pix,
++ pix_format,
++ CPRepeat, &pa);
++ XFreePixmap (GDK_GC_XDISPLAY (gc), pix);
++
++ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc,
++ picture, color,
++ 0, 0, 1, 1);
++
++ return picture;
++}
++
++static void
++get_bg_color (GdkGC *gc,
++ XRenderColor *render_color)
++{
++ GdkColormap *cmap;
++
++ cmap = gdk_gc_get_colormap (gc);
++
++ if (cmap)
++ {
++ GdkColor color;
++
++ gdk_colormap_query_color (cmap, _gdk_gc_get_bg_pixel (gc), &color);
++
++ render_color->alpha = 0xffff;
++ render_color->red = color.red;
++ render_color->green = color.green;
++ render_color->blue = color.blue;
++ }
++ else /* Not worth warning, just use black */
++ {
++ render_color->alpha = 0xffff;
++ render_color->red = 0;
++ render_color->green = 0;
++ render_color->blue = 0;
++ }
++}
++
++/**
++ * _gdk_x11_gc_get_fg_picture:
++ * @gc: a #GdkGC
++ *
++ * Gets a Xrender Picture object suitable for being the source
++ * drawable for drawing with the foreground the graphics context.
++ *
++ * Return value: a Picture, owned by the GC; this cannot be
++ * used over subsequent modification of the GC.
++ **/
++Picture
++_gdk_x11_gc_get_fg_picture (GdkGC *gc)
++{
++ GdkGCX11 *x11_gc;
++ gboolean new = FALSE;
++ XftColor xftcolor;
++ GdkFill fill;
++ int width, height;
++
++ g_return_val_if_fail (GDK_IS_GC_X11 (gc), None);
++
++ if (!_gdk_x11_have_render (GDK_GC_DISPLAY (gc)))
++ return None;
++
++ x11_gc = GDK_GC_X11 (gc);
++
++ fill = GDK_SOLID;
++ width = 1;
++ height = 1;
++
++ switch (_gdk_gc_get_fill (gc))
++ {
++ case GDK_SOLID:
++ break;
++ case GDK_TILED:
++ if (_gdk_gc_get_tile (gc))
++ {
++ if (!x11_gc->fg_picture)
++ x11_gc->fg_picture = make_fg_tile_picture (gc);
++
++ if (x11_gc->fg_picture != None)
++ return x11_gc->fg_picture;
++ }
++ break;
++ case GDK_STIPPLED:
++ case GDK_OPAQUE_STIPPLED:
++ if (_gdk_gc_get_stipple (gc))
++ {
++ gdk_drawable_get_size (_gdk_gc_get_stipple (gc), &width, &height);
++ fill = _gdk_gc_get_fill (gc);
++ }
++ break;
++ }
++
++ if (x11_gc->fg_picture == None)
++ {
++ XRenderPictureAttributes pa;
++ XRenderPictFormat *pix_format = foreground_format (gc);
++ Pixmap pix;
++
++ if (!pix_format)
++ return None;
++
++ pix = XCreatePixmap (GDK_GC_XDISPLAY (gc),
++ GDK_SCREEN_XROOTWIN (x11_gc->screen),
++ width, height, pix_format->depth);
++ pa.repeat = True;
++ x11_gc->fg_picture = XRenderCreatePicture (GDK_GC_XDISPLAY (gc),
++ pix,
++ pix_format,
++ CPRepeat, &pa);
++ XFreePixmap (GDK_GC_XDISPLAY (gc), pix);
++
++ new = TRUE;
++ }
++
++ _gdk_gc_x11_get_fg_xft_color (gc, &xftcolor);
++
++ if (x11_gc->fg_picture_color.alpha != 0xffff ||
++ x11_gc->fg_picture_color.red != xftcolor.color.red ||
++ x11_gc->fg_picture_color.green != xftcolor.color.green ||
++ x11_gc->fg_picture_color.blue != xftcolor.color.blue)
++ {
++ x11_gc->fg_picture_color.alpha = 0xffff;
++ x11_gc->fg_picture_color.red = xftcolor.color.red;
++ x11_gc->fg_picture_color.green = xftcolor.color.green;
++ x11_gc->fg_picture_color.blue = xftcolor.color.blue;
++
++ new = TRUE;
++ }
++
++ switch (fill)
++ {
++ case GDK_SOLID:
++ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc,
++ x11_gc->fg_picture, &x11_gc->fg_picture_color,
++ 0, 0, width, height);
++ break;
++ case GDK_STIPPLED:
++ {
++ Picture stipple_picture = make_stipple_picture (gc);
++
++ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc,
++ x11_gc->fg_picture, &x11_gc->fg_picture_color,
++ 0, 0, width, height);
++ XRenderComposite (GDK_GC_XDISPLAY (gc),
++ PictOpInReverse,
++ stipple_picture, None, x11_gc->fg_picture,
++ 0, 0, 0, 0, 0, 0, width, height);
++
++ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), stipple_picture);
++ }
++ break;
++ case GDK_OPAQUE_STIPPLED:
++ {
++ XRenderColor bg_color;
++
++ Picture stipple_picture = make_stipple_picture (gc);
++ Picture fg_picture = make_color_picture (gc, &x11_gc->fg_picture_color);
++
++ get_bg_color (gc, &bg_color);
++
++ XRenderFillRectangle (GDK_GC_XDISPLAY (gc), PictOpSrc,
++ x11_gc->fg_picture, &bg_color,
++ 0, 0, width, height);
++ XRenderComposite (GDK_GC_XDISPLAY (gc),
++ PictOpOver,
++ fg_picture, stipple_picture, x11_gc->fg_picture,
++ 0, 0, 0, 0, 0, 0, width, height);
++
++ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), stipple_picture);
++ XRenderFreePicture (GDK_GC_XDISPLAY (x11_gc), fg_picture);
++ }
++ break;
++ case GDK_TILED:
++ g_assert_not_reached (); /* handled above */
++ break;
++ }
++
++ return x11_gc->fg_picture;
++}
++
++/**
++ * _gdk_gc_x11_get_fg_xft_color:
++ * @gc: a #GdkGC
++ * @xftcolor: location to store the color
++ *
++ * Gets the foreground color of the GC as a XftColor.
++ **/
++void
++_gdk_gc_x11_get_fg_xft_color (GdkGC *gc,
++ XftColor *xftcolor)
++{
++ GdkGCX11 *x11_gc;
++ GdkColormap *cmap;
++ GdkColor color;
++
++ g_return_if_fail (GDK_IS_GC_X11 (gc));
++
++ x11_gc = GDK_GC_X11 (gc);
++
++ cmap = gdk_gc_get_colormap (gc);
++
++ xftcolor->pixel = _gdk_gc_get_fg_pixel (gc);
++
++ if (cmap)
++ {
++ gdk_colormap_query_color (cmap, xftcolor->pixel, &color);
++ xftcolor->color.alpha = 0xffff;
++ xftcolor->color.red = color.red;
++ xftcolor->color.green = color.green;
++ xftcolor->color.blue = color.blue;
++ }
++ else if (x11_gc->depth == 1)
++ {
++ /* Drawing with Xft on a bitmap is a bit bizzare; it
++ * takes alpha >= 0x8000 to mean 'set to 1' and
++ * alpha < 0x8000 to mean 'set to 0'.
++ */
++ if (xftcolor->pixel)
++ {
++ xftcolor->color.red = 0xffff;
++ xftcolor->color.green = 0xffff;
++ xftcolor->color.blue = 0xffff;
++ xftcolor->color.alpha = 0xffff;
++ }
++ else
++ {
++ xftcolor->color.red = 0;
++ xftcolor->color.green = 0;
++ xftcolor->color.blue = 0;
++ xftcolor->color.alpha = 0;
++ }
++ }
++ else
++ {
++ g_warning ("Using Xft rendering requires the GC argument to have a\n"
++ "specified colormap. If the GC was created for a drawable\n"
++ "with a colormap, the colormap will be set on the GC\n"
++ "automatically. Otherwise, a colormap must be set on it with"
++ "gdk_gc_set_colormap");
++ }
++}
++
++void
++_gdk_windowing_gc_get_foreground (GdkGC *gc,
++ GdkColor *color)
++{
++ GdkColormap *cmap;
++
++ g_return_if_fail (GDK_IS_GC_X11 (gc));
++
++ color->pixel = _gdk_gc_get_fg_pixel (gc);
++
++ cmap = gdk_gc_get_colormap (gc);
++
++ if (cmap)
++ gdk_colormap_query_color (cmap, _gdk_gc_get_fg_pixel (gc), color);
++ else
++ g_warning ("No colormap in _gdk_windowing_gc_get_foreground");
++}
+ #define __GDK_GC_X11_C__
+ #include "gdkaliasdef.c"
+Index: gtk+-2.10.6/gdk/x11/gdkprivate-x11.h
+===================================================================
+--- gtk+-2.10.6.orig/gdk/x11/gdkprivate-x11.h 2006-10-30 12:58:30.000000000 +0000
++++ gtk+-2.10.6/gdk/x11/gdkprivate-x11.h 2006-10-30 12:59:30.000000000 +0000
+@@ -63,6 +63,9 @@
+ guint have_clip_region : 1;
+ guint have_clip_mask : 1;
+ guint depth : 8;
++
++ Picture fg_picture;
++ XRenderColor fg_picture_color;
+ };
+
+ struct _GdkGCX11Class
+@@ -102,6 +105,11 @@
+ GType _gdk_gc_x11_get_type (void);
+
+ gboolean _gdk_x11_have_render (GdkDisplay *display);
++gboolean _gdk_x11_have_render_with_trapezoids (GdkDisplay *display);
++
++Picture _gdk_x11_gc_get_fg_picture (GdkGC *gc);
++void _gdk_gc_x11_get_fg_xft_color (GdkGC *gc,
++ XftColor *xftcolor);
+
+ GdkGC *_gdk_x11_gc_new (GdkDrawable *drawable,
+ GdkGCValues *values,
+Index: gtk+-2.10.6/gdk/x11/gdkwindow-x11.c
+===================================================================
+--- gtk+-2.10.6.orig/gdk/x11/gdkwindow-x11.c 2006-10-30 12:58:30.000000000 +0000
++++ gtk+-2.10.6/gdk/x11/gdkwindow-x11.c 2006-10-30 12:59:30.000000000 +0000
+@@ -1114,7 +1114,8 @@
+ {
+ GdkWindowObject *private = (GdkWindowObject *)window;
+ GdkToplevelX11 *toplevel;
+-
++ GdkDrawableImplX11 *draw_impl;
++
+ g_return_if_fail (GDK_IS_WINDOW (window));
+
+ _gdk_selection_window_destroyed (window);
+@@ -1126,6 +1127,11 @@
+ if (toplevel)
+ gdk_toplevel_x11_free_contents (GDK_WINDOW_DISPLAY (window), toplevel);
+
++ draw_impl = GDK_DRAWABLE_IMPL_X11 (private->impl);
++
++ if (draw_impl->xft_draw)
++ XftDrawDestroy (draw_impl->xft_draw);
++
+ _gdk_x11_drawable_finish (private->impl);
+
+ if (!recursing && !foreign_destroy)
+Index: gtk+-2.10.6/gdk/x11/Makefile.am
+===================================================================
+--- gtk+-2.10.6.orig/gdk/x11/Makefile.am 2006-10-30 12:58:30.000000000 +0000
++++ gtk+-2.10.6/gdk/x11/Makefile.am 2006-10-30 12:59:30.000000000 +0000
+@@ -37,6 +37,7 @@
+ gdkinput.c \
+ gdkkeys-x11.c \
+ gdkmain-x11.c \
++ gdkpango-x11.c \
+ gdkpixmap-x11.c \
+ gdkpixmap-x11.h \
+ gdkproperty-x11.c \
+Index: gtk+-2.10.6/gtk/gtkcalendar.c
+===================================================================
+--- gtk+-2.10.6.orig/gtk/gtkcalendar.c 2006-10-30 12:58:30.000000000 +0000
++++ gtk+-2.10.6/gtk/gtkcalendar.c 2006-10-30 12:59:30.000000000 +0000
+@@ -1821,7 +1821,7 @@
+ }
+ }
+
+-
++
+ /****************************************
+ * Repainting *
+ ****************************************/
+@@ -1831,7 +1831,7 @@
+ {
+ GtkWidget *widget = GTK_WIDGET (calendar);
+ GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
+- cairo_t *cr;
++ GdkGC *gc;
+ char buffer[255];
+ int x, y;
+ gint header_width;
+@@ -1849,7 +1849,7 @@
+ else
+ year_left = !priv->year_before;
+
+- cr = gdk_cairo_create (priv->header_win);
++ gc = calendar->gc;
+
+ header_width = widget->allocation.width - 2 * widget->style->xthickness;
+
+@@ -1902,9 +1902,9 @@
+ - (max_year_width - logical_rect.width)/2);
+
+
+- gdk_cairo_set_source_color (cr, HEADER_FG_COLOR (GTK_WIDGET (calendar)));
+- cairo_move_to (cr, x, y);
+- pango_cairo_show_layout (cr, layout);
++ gdk_gc_set_foreground (gc, HEADER_FG_COLOR (GTK_WIDGET (calendar)));
++ gdk_draw_layout (priv->header_win, gc, x, y, layout);
++
+
+ /* Draw month */
+ g_snprintf (buffer, sizeof (buffer), "%s", default_monthname[calendar->month]);
+@@ -1924,19 +1924,19 @@
+ else
+ x = 3 + priv->arrow_width + (max_month_width - logical_rect.width)/2;
+
+- cairo_move_to (cr, x, y);
+- pango_cairo_show_layout (cr, layout);
+-
++ gdk_draw_layout (priv->header_win, gc, x, y, layout);
++
++ gdk_gc_set_foreground (gc, BACKGROUND_COLOR (GTK_WIDGET (calendar)));
++
+ g_object_unref (layout);
+- cairo_destroy (cr);
+ }
+
+ static void
+ calendar_paint_day_names (GtkCalendar *calendar)
+ {
+ GtkWidget *widget = GTK_WIDGET (calendar);
++ GdkGC *gc;
+ GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
+- cairo_t *cr;
+ char buffer[255];
+ int day,i;
+ int day_width, cal_width;
+@@ -1946,8 +1946,7 @@
+ gint focus_padding;
+ gint focus_width;
+
+- cr = gdk_cairo_create (priv->day_name_win);
+-
++ gc = calendar->gc;
+ gtk_widget_style_get (GTK_WIDGET (widget),
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_padding,
+@@ -1961,22 +1960,19 @@
+ * Draw rectangles as inverted background for the labels.
+ */
+
+- gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget));
+- cairo_rectangle (cr,
+- CALENDAR_MARGIN, CALENDAR_MARGIN,
+- cal_width-CALENDAR_MARGIN * 2,
+- priv->day_name_h - CALENDAR_MARGIN);
+- cairo_fill (cr);
+-
++ gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (widget));
++ gdk_draw_rectangle (priv->day_name_win, gc, TRUE,
++ CALENDAR_MARGIN, CALENDAR_MARGIN,
++ cal_width-CALENDAR_MARGIN * 2,
++ priv->day_name_h - CALENDAR_MARGIN);
++
+ if (calendar->display_flags & GTK_CALENDAR_SHOW_WEEK_NUMBERS)
+- {
+- cairo_rectangle (cr,
+- CALENDAR_MARGIN,
+- priv->day_name_h - CALENDAR_YSEP,
+- priv->week_width - CALENDAR_YSEP - CALENDAR_MARGIN,
+- CALENDAR_YSEP);
+- cairo_fill (cr);
+- }
++ gdk_draw_rectangle (priv->day_name_win, gc, TRUE,
++ CALENDAR_MARGIN,
++ priv->day_name_h - CALENDAR_YSEP,
++ priv->week_width - CALENDAR_YSEP - CALENDAR_MARGIN,
++ CALENDAR_YSEP);
++
+
+ /*
+ * Write the labels
+@@ -1984,7 +1980,7 @@
+
+ layout = gtk_widget_create_pango_layout (widget, NULL);
+
+- gdk_cairo_set_source_color (cr, SELECTED_FG_COLOR (widget));
++ gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (widget));
+ for (i = 0; i < 7; i++)
+ {
+ if (gtk_widget_get_direction (GTK_WIDGET (calendar)) == GTK_TEXT_DIR_RTL)
+@@ -1997,19 +1993,18 @@
+ pango_layout_set_text (layout, buffer, -1);
+ pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
+
+- cairo_move_to (cr,
+- (CALENDAR_MARGIN +
+- + (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR ?
+- (priv->week_width + (priv->week_width ? CALENDAR_XSEP : 0))
+- : 0)
+- + day_wid_sep * i
+- + (day_width - logical_rect.width)/2),
+- CALENDAR_MARGIN + focus_width + focus_padding + logical_rect.y);
+- pango_cairo_show_layout (cr, layout);
++ gdk_draw_layout (priv->day_name_win, gc,
++ (CALENDAR_MARGIN +
++ + (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_LTR ?
++ (priv->week_width + (priv->week_width ? CALENDAR_XSEP : 0))
++ : 0)
++ + day_wid_sep * i
++ + (day_width - logical_rect.width)/2),
++ CALENDAR_MARGIN + focus_width + focus_padding + logical_rect.y,
++ layout);
+ }
+
+ g_object_unref (layout);
+- cairo_destroy (cr);
+ }
+
+ static void
+@@ -2017,7 +2012,7 @@
+ {
+ GtkWidget *widget = GTK_WIDGET (calendar);
+ GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
+- cairo_t *cr;
++ GdkGC *gc;
+ gint row, week = 0, year;
+ gint x_loc;
+ char buffer[32];
+@@ -2027,7 +2022,7 @@
+ gint focus_padding;
+ gint focus_width;
+
+- cr = gdk_cairo_create (priv->week_win);
++ gc = calendar->gc;
+
+ gtk_widget_style_get (GTK_WIDGET (widget),
+ "focus-line-width", &focus_width,
+@@ -2038,20 +2033,20 @@
+ * Draw a rectangle as inverted background for the labels.
+ */
+
+- gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget));
++ gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (widget));
+ if (priv->day_name_win)
+- cairo_rectangle (cr,
+- CALENDAR_MARGIN,
+- 0,
+- priv->week_width - CALENDAR_MARGIN,
+- priv->main_h - CALENDAR_MARGIN);
++ gdk_draw_rectangle (priv->week_win, gc, TRUE,
++ CALENDAR_MARGIN,
++ 0,
++ priv->week_width - CALENDAR_MARGIN,
++ priv->main_h - CALENDAR_MARGIN);
+ else
+- cairo_rectangle (cr,
+- CALENDAR_MARGIN,
+- CALENDAR_MARGIN,
+- priv->week_width - CALENDAR_MARGIN,
+- priv->main_h - 2 * CALENDAR_MARGIN);
+- cairo_fill (cr);
++ gdk_draw_rectangle (priv->week_win, gc, TRUE,
++ CALENDAR_MARGIN,
++ CALENDAR_MARGIN,
++ priv->week_width - CALENDAR_MARGIN,
++ priv->main_h - 2 * CALENDAR_MARGIN);
++
+
+ /*
+ * Write the labels
+@@ -2059,7 +2054,7 @@
+
+ layout = gtk_widget_create_pango_layout (widget, NULL);
+
+- gdk_cairo_set_source_color (cr, SELECTED_FG_COLOR (widget));
++ gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (widget));
+ day_height = calendar_row_height (calendar);
+ for (row = 0; row < 6; row++)
+ {
+@@ -2095,12 +2090,10 @@
+ - logical_rect.width
+ - CALENDAR_XSEP - focus_padding - focus_width);
+
+- cairo_move_to (cr, x_loc, y_loc);
+- pango_cairo_show_layout (cr, layout);
++ gdk_draw_layout (priv->week_win, gc, x_loc, y_loc, layout);
+ }
+
+ g_object_unref (layout);
+- cairo_destroy (cr);
+ }
+
+ static void
+@@ -2149,7 +2142,7 @@
+ {
+ GtkWidget *widget = GTK_WIDGET (calendar);
+ GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
+- cairo_t *cr;
++ GdkGC *gc;
+ GdkColor *text_color;
+ gchar buffer[32];
+ gint day;
+@@ -2162,7 +2155,7 @@
+ g_return_if_fail (row < 6);
+ g_return_if_fail (col < 7);
+
+- cr = gdk_cairo_create (priv->main_win);
++ gc = calendar->gc;
+
+ day = calendar->day[row][col];
+
+@@ -2170,11 +2163,11 @@
+
+ if (calendar->day_month[row][col] == MONTH_PREV)
+ {
+- text_color = PREV_MONTH_COLOR (widget);
++ gdk_gc_set_foreground (gc, PREV_MONTH_COLOR (GTK_WIDGET (calendar)));
+ }
+ else if (calendar->day_month[row][col] == MONTH_NEXT)
+ {
+- text_color = NEXT_MONTH_COLOR (widget);
++ gdk_gc_set_foreground (gc, NEXT_MONTH_COLOR (GTK_WIDGET (calendar)));
+ }
+ else
+ {
+@@ -2188,16 +2181,16 @@
+ #endif
+ if (calendar->selected_day == day)
+ {
+- gdk_cairo_set_source_color (cr, SELECTED_BG_COLOR (widget));
+- gdk_cairo_rectangle (cr, &day_rect);
+- cairo_fill (cr);
++ gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (GTK_WIDGET (calendar)));
++ gdk_draw_rectangle (priv->main_win, gc, TRUE, day_rect.x, day_rect.y,
++ day_rect.width, day_rect.height);
+ }
+ if (calendar->selected_day == day)
+- text_color = SELECTED_FG_COLOR (widget);
++ gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (GTK_WIDGET (calendar)));
+ else if (calendar->marked_date[day-1])
+- text_color = MARKED_COLOR (widget);
++ gdk_gc_set_foreground (gc, MARKED_COLOR (GTK_WIDGET (calendar)));
+ else
+- text_color = NORMAL_DAY_COLOR (widget);
++ gdk_gc_set_foreground (gc, NORMAL_DAY_COLOR (GTK_WIDGET (calendar)));
+ }
+
+ /* Translators: this defines whether the day numbers should use
+@@ -2219,16 +2212,13 @@
+ x_loc -= logical_rect.width;
+ y_loc = day_rect.y + (day_rect.height - logical_rect.height) / 2;
+
+- gdk_cairo_set_source_color (cr, text_color);
+- cairo_move_to (cr, x_loc, y_loc);
+- pango_cairo_show_layout (cr, layout);
++ gdk_draw_layout (priv->main_win, gc,
++ x_loc, y_loc, layout);
+
+ if (calendar->marked_date[day-1]
+ && calendar->day_month[row][col] == MONTH_CURRENT)
+- {
+- cairo_move_to (cr, x_loc - 1, y_loc);
+- pango_cairo_show_layout (cr, layout);
+- }
++ gdk_draw_layout (priv->main_win, gc,
++ x_loc-1, y_loc, layout);
+
+ if (GTK_WIDGET_HAS_FOCUS (calendar)
+ && calendar->focus_row == row && calendar->focus_col == col)
+@@ -2253,7 +2243,6 @@
+ }
+
+ g_object_unref (layout);
+- cairo_destroy (cr);
+ }
+
+ static void
+Index: gtk+-2.10.6/gtk/gtkentry.c
+===================================================================
+--- gtk+-2.10.6.orig/gtk/gtkentry.c 2006-10-30 12:58:30.000000000 +0000
++++ gtk+-2.10.6/gtk/gtkentry.c 2006-10-30 12:59:30.000000000 +0000
+@@ -3333,7 +3333,6 @@
+ if (GTK_WIDGET_DRAWABLE (entry))
+ {
+ PangoLayout *layout = gtk_entry_ensure_layout (entry, TRUE);
+- cairo_t *cr;
+ gint x, y;
+ gint start_pos, end_pos;
+
+@@ -3341,56 +3340,60 @@
+
+ get_layout_position (entry, &x, &y);
+
+- cr = gdk_cairo_create (entry->text_area);
+-
+- cairo_move_to (cr, x, y);
+- gdk_cairo_set_source_color (cr, &widget->style->text [widget->state]);
+- pango_cairo_show_layout (cr, layout);
+-
++ gdk_draw_layout (entry->text_area, widget->style->text_gc [widget->state],
++ x, y,
++ layout);
++
+ if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_pos, &end_pos))
+ {
+ gint *ranges;
+ gint n_ranges, i;
+ PangoRectangle logical_rect;
+- GdkColor *selection_color, *text_color;
++ GdkGC *selection_gc, *text_gc;
+ GtkBorder inner_border;
+-
++ GdkRegion *clip_region;
++
+ pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
+ gtk_entry_get_pixel_ranges (entry, &ranges, &n_ranges);
+
+ if (GTK_WIDGET_HAS_FOCUS (entry))
+ {
+- selection_color = &widget->style->base [GTK_STATE_SELECTED];
+- text_color = &widget->style->text [GTK_STATE_SELECTED];
++ selection_gc = widget->style->base_gc [GTK_STATE_SELECTED];
++ text_gc = widget->style->text_gc [GTK_STATE_SELECTED];
+ }
+ else
+ {
+- selection_color = &widget->style->base [GTK_STATE_ACTIVE];
+- text_color = &widget->style->text [GTK_STATE_ACTIVE];
++ selection_gc = widget->style->base_gc [GTK_STATE_ACTIVE];
++ text_gc = widget->style->text_gc [GTK_STATE_ACTIVE];
+ }
+-
++
++ clip_region = gdk_region_new ();
+ _gtk_entry_effective_inner_border (entry, &inner_border);
+
+ for (i = 0; i < n_ranges; ++i)
+- cairo_rectangle (cr,
+- inner_border.left - entry->scroll_offset + ranges[2 * i],
+- y,
+- ranges[2 * i + 1],
+- logical_rect.height);
++ {
++ GdkRectangle rect;
+
+- cairo_clip (cr);
+-
+- gdk_cairo_set_source_color (cr, selection_color);
+- cairo_paint (cr);
++ rect.x = inner_border.left - entry->scroll_offset + ranges[2 * i];
++ rect.y = y;
++ rect.width = ranges[2 * i + 1];
++ rect.height = logical_rect.height;
++
++ gdk_draw_rectangle (entry->text_area, selection_gc, TRUE,
++ rect.x, rect.y, rect.width, rect.height);
+
+- cairo_move_to (cr, x, y);
+- gdk_cairo_set_source_color (cr, text_color);
+- pango_cairo_show_layout (cr, layout);
++ gdk_region_union_with_rect (clip_region, &rect);
++ }
+
++ gdk_gc_set_clip_region (text_gc, clip_region);
++ gdk_draw_layout (entry->text_area, text_gc,
++ x, y,
++ layout);
++ gdk_gc_set_clip_region (text_gc, NULL);
++
++ gdk_region_destroy (clip_region);
+ g_free (ranges);
+ }
+-
+- cairo_destroy (cr);
+ }
+ }
+
+Index: gtk+-2.10.6/gtk/gtkwidget.c
+===================================================================
+--- gtk+-2.10.6.orig/gtk/gtkwidget.c 2006-10-30 12:58:30.000000000 +0000
++++ gtk+-2.10.6/gtk/gtkwidget.c 2006-10-30 12:59:30.000000000 +0000
+@@ -5445,7 +5445,8 @@
+ GdkScreen *screen;
+
+ update_pango_context (widget, context);
+-
++/* TODO: Figure out the proper way to handle this in a pangoxft setting
++
+ screen = gtk_widget_get_screen_unchecked (widget);
+ if (screen)
+ {
+@@ -5453,7 +5454,7 @@
+ gdk_screen_get_resolution (screen));
+ pango_cairo_context_set_font_options (context,
+ gdk_screen_get_font_options (screen));
+- }
++ }*/
+ }
+ }
+
+Index: gtk+-2.10.6/gdk/x11/gdkpango-x11.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gtk+-2.10.6/gdk/x11/gdkpango-x11.c 2006-10-30 12:59:30.000000000 +0000
+@@ -0,0 +1,174 @@
++/* GDK - The GIMP Drawing Kit
++ * Copyright (C) 2000 Red Hat, Inc.
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#include <config.h>
++#include <stdlib.h>
++
++#include "gdkx.h"
++#include "gdkdisplay-x11.h"
++#include "gdkpango.h"
++#include <pango/pangoxft.h>
++#include <pango/pangoxft-render.h>
++#include "gdkalias.h"
++
++#include <math.h>
++
++typedef struct _GdkX11Renderer GdkX11Renderer;
++typedef struct _GdkX11RendererClass GdkX11RendererClass;
++
++#define GDK_TYPE_X11_RENDERER (_gdk_x11_renderer_get_type())
++#define GDK_X11_RENDERER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_X11_RENDERER, GdkX11Renderer))
++#define GDK_IS_X11_RENDERER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_X11_RENDERER))
++#define GDK_X11_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_X11_RENDERER, GdkX11RendererClass))
++#define GDK_IS_X11_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_X11_RENDERER))
++#define GDK_X11_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_X11_RENDERER, GdkX11RendererClass))
++
++#define MAX_RENDER_PART PANGO_RENDER_PART_STRIKETHROUGH
++
++struct _GdkX11Renderer
++{
++ PangoXftRenderer parent_instance;
++
++ XRenderPictFormat *mask_format;
++
++ GdkDrawable *drawable;
++ GdkGC *gc;
++};
++
++struct _GdkX11RendererClass
++{
++ PangoXftRendererClass parent_class;
++};
++
++G_DEFINE_TYPE (GdkX11Renderer, _gdk_x11_renderer, PANGO_TYPE_XFT_RENDERER)
++
++static void
++gdk_x11_renderer_finalize (GObject *object)
++{
++ G_OBJECT_CLASS (_gdk_x11_renderer_parent_class)->finalize (object);
++}
++
++static void
++gdk_x11_renderer_composite_trapezoids (PangoXftRenderer *xftrenderer,
++ PangoRenderPart part,
++ XTrapezoid *trapezoids,
++ int n_trapezoids)
++{
++ /* Because we only use this renderer for "draw_glyphs()" calls, we
++ * won't hit this code path much. However, it is hit for drawing
++ * the "unknown glyph" hex squares. We can safely ignore the part,
++ */
++ GdkX11Renderer *x11_renderer = GDK_X11_RENDERER (xftrenderer);
++
++ _gdk_x11_drawable_draw_xtrapezoids (x11_renderer->drawable,
++ x11_renderer->gc,
++ trapezoids, n_trapezoids);
++
++}
++
++static void
++gdk_x11_renderer_composite_glyphs (PangoXftRenderer *xftrenderer,
++ XftFont *xft_font,
++ XftGlyphSpec *glyphs,
++ gint n_glyphs)
++{
++ GdkX11Renderer *x11_renderer = GDK_X11_RENDERER (xftrenderer);
++
++ _gdk_x11_drawable_draw_xft_glyphs (x11_renderer->drawable,
++ x11_renderer->gc,
++ xft_font, glyphs, n_glyphs);
++}
++
++static void
++_gdk_x11_renderer_init (GdkX11Renderer *renderer)
++{
++}
++
++static void
++_gdk_x11_renderer_class_init (GdkX11RendererClass *klass)
++{
++ PangoXftRendererClass *xftrenderer_class = PANGO_XFT_RENDERER_CLASS (klass);
++ GObjectClass *object_class = G_OBJECT_CLASS (klass);
++
++ xftrenderer_class->composite_glyphs = gdk_x11_renderer_composite_glyphs;
++ xftrenderer_class->composite_trapezoids = gdk_x11_renderer_composite_trapezoids;
++
++ object_class->finalize = gdk_x11_renderer_finalize;
++}
++
++PangoRenderer *
++_gdk_x11_renderer_get (GdkDrawable *drawable,
++ GdkGC *gc)
++{
++ GdkScreen *screen = GDK_DRAWABLE_IMPL_X11 (drawable)->screen;
++ GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
++ GdkX11Renderer *x11_renderer;
++
++ if (!screen_x11->renderer)
++ {
++ screen_x11->renderer = g_object_new (GDK_TYPE_X11_RENDERER,
++ "display", GDK_SCREEN_XDISPLAY (screen),
++ "screen", GDK_SCREEN_XNUMBER (screen),
++ NULL);
++ }
++
++ x11_renderer = GDK_X11_RENDERER (screen_x11->renderer);
++
++ x11_renderer->drawable = drawable;
++ x11_renderer->gc = gc;
++
++ return screen_x11->renderer;
++}
++
++/**
++ * gdk_pango_context_get_for_screen:
++ * @screen: the #GdkScreen for which the context is to be created.
++ *
++ * Creates a #PangoContext for @screen.
++ *
++ * The context must be freed when you're finished with it.
++ *
++ * When using GTK+, normally you should use gtk_widget_get_pango_context()
++ * instead of this function, to get the appropriate context for
++ * the widget you intend to render text onto.
++ *
++ * Return value: a new #PangoContext for @screen
++ *
++ * Since: 2.2
++ **/
++PangoContext *
++gdk_pango_context_get_for_screen (GdkScreen *screen)
++{
++ PangoContext *context;
++
++ g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
++
++ if (screen->closed)
++ return NULL;
++
++ context = pango_xft_get_context (GDK_SCREEN_XDISPLAY (screen),
++ GDK_SCREEN_X11 (screen)->screen_num);
++
++ g_object_set_data (G_OBJECT (context), "gdk-pango-screen", screen);
++
++ return context;
++}
++
++#define __GDK_PANGO_X11_C__
++#include "gdkaliasdef.c"
+Index: gtk+-2.10.6/gdk/x11/gdkpixmap-x11.c
+===================================================================
+--- gtk+-2.10.6.orig/gdk/x11/gdkpixmap-x11.c 2006-10-30 12:58:30.000000000 +0000
++++ gtk+-2.10.6/gdk/x11/gdkpixmap-x11.c 2006-10-30 12:59:30.000000000 +0000
+@@ -119,6 +119,9 @@
+ {
+ GdkDrawableImplX11 *draw_impl = GDK_DRAWABLE_IMPL_X11 (impl);
+
++ if (draw_impl->xft_draw)
++ XftDrawDestroy (draw_impl->xft_draw);
++
+ _gdk_x11_drawable_finish (GDK_DRAWABLE (draw_impl));
+ }
+
+--- gtk+-2.10.6.orig/gtk/gtkcalendar.c.orig 2006-11-14 14:39:34.000000000 -0800
++++ gtk+-2.10.6/gtk/gtkcalendar.c 2006-11-14 14:37:34.000000000 -0800
+@@ -1495,6 +1495,10 @@ gtk_calendar_realize (GtkWidget *widget)
+ BACKGROUND_COLOR ( GTK_WIDGET ( calendar)));
+ gdk_window_show (priv->main_win);
+ gdk_window_set_user_data (priv->main_win, widget);
++
++ /* Set widgets gc */
++ calendar->gc = gdk_gc_new (widget->window);
++
+ gdk_window_set_background (widget->window, BACKGROUND_COLOR (widget));
+ gdk_window_show (widget->window);
+ gdk_window_set_user_data (widget->window, widget);
diff --git a/packages/gtk+/gtk+-2.12.3/range-no-redraw.patch b/packages/gtk+/gtk+-2.12.3/range-no-redraw.patch
new file mode 100644
index 0000000000..14387b8a2e
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/range-no-redraw.patch
@@ -0,0 +1,127 @@
+5f084ea0849d5967a3c22821542ecaaa8accb398
+diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
+index bd95351..64e0e59 100644
+--- gtk/gtkrange.c
++++ gtk/gtkrange.c
+@@ -109,6 +109,8 @@ struct _GtkRangeLayout
+ GtkSensitivityType upper_sensitivity;
+
+ gdouble fill_level;
++
++ guint motion_idle_id;
+ };
+
+
+@@ -205,6 +207,8 @@ static gboolean gtk_range_real_change_value (GtkRange *range,
+ static void gtk_range_update_value (GtkRange *range);
+ static gboolean gtk_range_key_press (GtkWidget *range,
+ GdkEventKey *event);
++static void gtk_range_add_motion_idle (GtkRange *range);
++static void gtk_range_remove_motion_idle (GtkRange *range);
+
+
+ static guint signals[LAST_SIGNAL];
+@@ -1167,6 +1171,7 @@ gtk_range_destroy (GtkObject *object)
+
+ gtk_range_remove_step_timer (range);
+ gtk_range_remove_update_timer (range);
++ gtk_range_remove_motion_idle (range);
+
+ if (range->adjustment)
+ {
+@@ -1276,6 +1281,7 @@ gtk_range_unrealize (GtkWidget *widget)
+
+ gtk_range_remove_step_timer (range);
+ gtk_range_remove_update_timer (range);
++ gtk_range_remove_motion_idle (range);
+
+ gdk_window_set_user_data (range->event_window, NULL);
+ gdk_window_destroy (range->event_window);
+@@ -2165,7 +2171,7 @@ gtk_range_motion_notify (GtkWidget *widget,
+ gtk_widget_queue_draw (widget);
+
+ if (range->layout->grab_location == MOUSE_SLIDER)
+- update_slider_position (range, x, y);
++ gtk_range_add_motion_idle (range);
+
+ /* We handled the event if the mouse was in the range_rect */
+ return range->layout->mouse_location != MOUSE_OUTSIDE;
+@@ -3335,9 +3341,10 @@ initial_timeout (gpointer data)
+ g_object_get (settings, "gtk-timeout-repeat", &timeout, NULL);
+
+ range = GTK_RANGE (data);
+- range->timer->timeout_id = gdk_threads_add_timeout (timeout * SCROLL_DELAY_FACTOR,
+- second_timeout,
+- range);
++ range->timer->timeout_id =
++ gdk_threads_add_timeout (timeout * SCROLL_DELAY_FACTOR,
++ second_timeout,
++ range);
+ /* remove self */
+ return FALSE;
+ }
+@@ -3357,9 +3364,8 @@ gtk_range_add_step_timer (GtkRange *range,
+
+ range->timer = g_new (GtkRangeStepTimer, 1);
+
+- range->timer->timeout_id = gdk_threads_add_timeout (timeout,
+- initial_timeout,
+- range);
++ range->timer->timeout_id =
++ gdk_threads_add_timeout (timeout, initial_timeout, range);
+ range->timer->step = step;
+
+ gtk_range_scroll (range, range->timer->step);
+@@ -3397,9 +3403,8 @@ gtk_range_reset_update_timer (GtkRange *range)
+ {
+ gtk_range_remove_update_timer (range);
+
+- range->update_timeout_id = gdk_threads_add_timeout (UPDATE_DELAY,
+- update_timeout,
+- range);
++ range->update_timeout_id =
++ gdk_threads_add_timeout (UPDATE_DELAY, update_timeout, range);
+ }
+
+ static void
+@@ -3412,5 +3417,40 @@ gtk_range_remove_update_timer (GtkRange *range)
+ }
+ }
+
++static gboolean
++motion_idle (gpointer data)
++{
++ GtkRange *range = data;
++ GtkRangeLayout *layout = range->layout;
++
++ update_slider_position (range, layout->mouse_x, layout->mouse_y);
++
++ layout->motion_idle_id = 0;
++
++ return FALSE;
++}
++
++static void
++gtk_range_add_motion_idle (GtkRange *range)
++{
++ if (!range->layout->motion_idle_id)
++ {
++ range->layout->motion_idle_id =
++ gdk_threads_add_idle_full (GDK_PRIORITY_REDRAW,
++ motion_idle, range,
++ NULL);
++ }
++}
++
++static void
++gtk_range_remove_motion_idle (GtkRange *range)
++{
++ if (range->layout->motion_idle_id != 0)
++ {
++ g_source_remove (range->layout->motion_idle_id);
++ range->layout->motion_idle_id = 0;
++ }
++}
++
+ #define __GTK_RANGE_C__
+ #include "gtkaliasdef.c"
diff --git a/packages/gtk+/gtk+-2.12.3/run-iconcache.patch b/packages/gtk+/gtk+-2.12.3/run-iconcache.patch
new file mode 100644
index 0000000000..ac15e9ab24
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/run-iconcache.patch
@@ -0,0 +1,19 @@
+--- /tmp/Makefile.am 2007-01-08 17:44:47.000000000 +0100
++++ gtk+-2.10.7/gtk/Makefile.am 2007-01-08 17:45:17.025251000 +0100
+@@ -1128,11 +1128,11 @@
+ ./gtk-update-icon-cache
+ endif
+
+-gtkbuiltincache.h: @REBUILD@ stamp-icons
+- $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache$(EXEEXT)
+- $(gtk_update_icon_cache_program) --force --ignore-theme-index \
+- --source builtin_icons stock-icons > gtkbuiltincache.h.tmp && \
+- mv gtkbuiltincache.h.tmp gtkbuiltincache.h
++#gtkbuiltincache.h: @REBUILD@ stamp-icons
++# $(MAKE) $(AM_MAKEFLAGS) gtk-update-icon-cache$(EXEEXT)
++# $(gtk_update_icon_cache_program) --force --ignore-theme-index \
++# --source builtin_icons stock-icons > gtkbuiltincache.h.tmp && \
++# mv gtkbuiltincache.h.tmp gtkbuiltincache.h
+
+ EXTRA_DIST += \
+ $(STOCK_ICONS) \
diff --git a/packages/gtk+/gtk+-2.12.3/scrolled-placement.patch b/packages/gtk+/gtk+-2.12.3/scrolled-placement.patch
new file mode 100644
index 0000000000..a0b50c8cac
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/scrolled-placement.patch
@@ -0,0 +1,22 @@
+Index: gdk/x11/gdksettings.c
+===================================================================
+--- gdk/x11/gdksettings.c (revision 18493)
++++ gdk/x11/gdksettings.c (working copy)
+@@ -65,7 +65,8 @@
+ "Xft/RGBA\0" "gtk-xft-rgba\0"
+ "Xft/DPI\0" "gtk-xft-dpi\0"
+ "Net/FallbackIconTheme\0" "gtk-fallback-icon-theme\0"
+- "Gtk/TouchscreenMode\0" "gtk-touchscreen-mode\0";
++ "Gtk/TouchscreenMode\0" "gtk-touchscreen-mode\0"
++ "Gtk/ScrolledWindowPlacement\0" "gtk-scrolled-window-placement\0";
+
+ static const struct
+ {
+@@ -107,5 +108,6 @@
+ { 1197, 1206 },
+ { 1219, 1227 },
+ { 1239, 1261 },
+- { 1285, 1305 }
++ { 1285, 1305 },
++ { 1326, 1354 }
+ };
diff --git a/packages/gtk+/gtk+-2.12.3/toggle-font.diff b/packages/gtk+/gtk+-2.12.3/toggle-font.diff
new file mode 100644
index 0000000000..59ad150b2f
--- /dev/null
+++ b/packages/gtk+/gtk+-2.12.3/toggle-font.diff
@@ -0,0 +1,100 @@
+Index: gtk/gtkcellrenderertoggle.c
+===================================================================
+--- gtk/gtkcellrenderertoggle.c (revision 18523)
++++ gtk/gtkcellrenderertoggle.c (working copy)
+@@ -71,6 +71,8 @@
+ PROP_INDICATOR_SIZE
+ };
+
++/* This is a hard-coded default which promptly gets overridden by a size
++ calculated from the font size. */
+ #define TOGGLE_WIDTH 13
+
+ static guint toggle_cell_signals[LAST_SIGNAL] = { 0 };
+@@ -80,8 +82,9 @@
+ typedef struct _GtkCellRendererTogglePrivate GtkCellRendererTogglePrivate;
+ struct _GtkCellRendererTogglePrivate
+ {
+- gint indicator_size;
+-
++ gint indicator_size; /* This is the real size */
++ gint override_size; /* This is the size set from the indicator-size property */
++ GtkWidget *cached_widget;
+ guint inconsistent : 1;
+ };
+
+@@ -104,6 +107,7 @@
+ GTK_CELL_RENDERER (celltoggle)->ypad = 2;
+
+ priv->indicator_size = TOGGLE_WIDTH;
++ priv->override_size = 0;
+ priv->inconsistent = FALSE;
+ }
+
+@@ -210,7 +214,7 @@
+ g_value_set_boolean (value, celltoggle->radio);
+ break;
+ case PROP_INDICATOR_SIZE:
+- g_value_set_int (value, priv->indicator_size);
++ g_value_set_int (value, priv->override_size ? priv->override_size : priv->indicator_size);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+@@ -245,7 +249,7 @@
+ celltoggle->radio = g_value_get_boolean (value);
+ break;
+ case PROP_INDICATOR_SIZE:
+- priv->indicator_size = g_value_get_int (value);
++ priv->override_size = g_value_get_int (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+@@ -273,6 +277,27 @@
+ }
+
+ static void
++on_widget_style_set (GtkWidget *widget, GtkStyle *previous, gpointer user_data)
++{
++ GtkCellRendererTogglePrivate *priv = user_data;
++ PangoContext *context;
++ PangoFontMetrics *metrics;
++ int height;
++
++ context = gtk_widget_get_pango_context (widget);
++ metrics = pango_context_get_metrics (context,
++ widget->style->font_desc,
++ pango_context_get_language (context));
++
++ height = pango_font_metrics_get_ascent (metrics) +
++ pango_font_metrics_get_descent (metrics);
++
++ pango_font_metrics_unref (metrics);
++
++ priv->indicator_size = PANGO_PIXELS (height * 0.85);
++}
++
++static void
+ gtk_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
+ GtkWidget *widget,
+ GdkRectangle *cell_area,
+@@ -287,6 +312,20 @@
+
+ priv = GTK_CELL_RENDERER_TOGGLE_GET_PRIVATE (cell);
+
++ if (priv->override_size) {
++ priv->indicator_size = priv->override_size;
++ } else if (priv->cached_widget != widget) {
++ if (priv->cached_widget) {
++ g_object_remove_weak_pointer (widget, &priv->cached_widget);
++ g_signal_handlers_disconnect_by_func (priv->cached_widget, on_widget_style_set, priv);
++ }
++ priv->cached_widget = widget;
++ g_object_add_weak_pointer (widget, &priv->cached_widget);
++ g_signal_connect (widget, "style-set", on_widget_style_set, priv);
++
++ on_widget_style_set (widget, NULL, priv);
++ }
++
+ calc_width = (gint) cell->xpad * 2 + priv->indicator_size;
+ calc_height = (gint) cell->ypad * 2 + priv->indicator_size;
+
diff --git a/packages/gtk+/gtk+-2.4.13/xsettings.patch b/packages/gtk+/gtk+-2.12.3/xsettings.patch
index b63e262d34..b63e262d34 100644
--- a/packages/gtk+/gtk+-2.4.13/xsettings.patch
+++ b/packages/gtk+/gtk+-2.12.3/xsettings.patch
diff --git a/packages/gtk+/gtk+-2.2.4/automake-lossage.patch b/packages/gtk+/gtk+-2.2.4/automake-lossage.patch
deleted file mode 100644
index 9560abf9ba..0000000000
--- a/packages/gtk+/gtk+-2.2.4/automake-lossage.patch
+++ /dev/null
@@ -1,446 +0,0 @@
---- gtk/Makefile.am.old 2003-09-03 20:50:06.000000000 +0100
-+++ gtk/Makefile.am 2004-03-07 12:17:29.000000000 +0000
-@@ -2,7 +2,7 @@
-
- SUBDIRS=stock-icons theme-bits
-
--INCLUDES = @STRIP_BEGIN@ \
-+INCLUDES = \
- -DG_LOG_DOMAIN=\"Gtk\" \
- -DGTK_LIBDIR=\"$(libdir)\" \
- -DGTK_DATA_PREFIX=\"$(prefix)\" \
-@@ -20,8 +20,7 @@
- -DGDK_DISABLE_DEPRECATED \
- -DGTK_DISABLE_DEPRECATED \
- @GTK_DEBUG_FLAGS@ \
-- @GTK_DEP_CFLAGS@ \
--@STRIP_END@
-+ @GTK_DEP_CFLAGS@
-
- gtarget=@gdktarget@
-
-@@ -67,7 +66,7 @@
- # since automake doesn't support conditionalized libsomething_la_LDFLAGS
- # we use the general approach here
- libgtkincludedir = $(includedir)/gtk-2.0/gtk
--LDFLAGS = @STRIP_BEGIN@ \
-+AM_LDFLAGS = \
- @LDFLAGS@ \
- -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
- -export-dynamic \
-@@ -77,8 +76,8 @@
- $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
- $(top_builddir)/gdk/@gdktargetlib@ \
- $(libgtk_target_ldflags) \
-- @GTK_DEP_LIBS@ \
--@STRIP_END@
-+ @GTK_DEP_LIBS@
-+
-
- #
- # setup source file variables
-@@ -86,7 +85,7 @@
-
- # GTK+ header files for public installation (non-generated, or generated
- # by configure)
--gtk_public_h_sources = @STRIP_BEGIN@ \
-+gtk_public_h_sources = \
- gtk.h \
- gtkaccelgroup.h \
- gtkaccellabel.h \
-@@ -228,10 +227,10 @@
- gtkvscrollbar.h \
- gtkvseparator.h \
- gtkwidget.h \
-- gtkwindow.h \
--@STRIP_END@
-+ gtkwindow.h
-+
- # GTK+ header files that don't get installed
--gtk_private_h_sources = @STRIP_BEGIN@ \
-+gtk_private_h_sources = \
- gtkrbtree.h \
- gtktextbtree.h \
- gtktextchildprivate.h \
-@@ -244,8 +243,7 @@
- gtkthemes.h \
- gtktreedatalist.h \
- gtktreeprivate.h \
-- gtkwindow-decorate.h \
--@STRIP_END@
-+ gtkwindow-decorate.h
-
- # GTK+ C sources to build the library from
-
-@@ -257,7 +255,7 @@
- gtktreeitem.c
- endif
-
--gtk_c_sources = @STRIP_BEGIN@ \
-+gtk_c_sources = \
- gtkaccelgroup.c \
- gtkaccelmap.c \
- gtkaccellabel.c \
-@@ -410,15 +408,13 @@
- gtkwindow-decorate.c \
- fnmatch.c \
- xembed.h \
-- ${crufty_gtk_c_sources} \
--@STRIP_END@
-+ ${crufty_gtk_c_sources}
-
--gtk_plug_c_sources = @STRIP_BEGIN@ \
-+gtk_plug_c_sources = \
- gtkplug.c \
- gtksocket.c \
- gtkxembed.c \
-- gtkxembed.h \
--@STRIP_END@
-+ gtkxembed.h
-
- # we use our own built_sources variable rules to avoid automake's
- # BUILT_SOURCES oddities
-@@ -427,35 +423,34 @@
- # content
-
- # built sources that get installed with the header files
--gtk_built_public_sources = @STRIP_BEGIN@ \
-+gtk_built_public_sources = \
- gtkmarshal.h \
-- gtktypebuiltins.h \
--@STRIP_END@
--gtk_built_private_headers = @STRIP_BEGIN@ \
-- gtkmarshalers.h \
--@STRIP_END@
-+ gtktypebuiltins.h
-+
-+gtk_built_private_headers = \
-+ gtkmarshalers.h
-+
- # built sources that don't get installed
--gtk_built_sources = @STRIP_BEGIN@ \
-+gtk_built_sources = \
- gtktypebuiltins.c \
- gtkmarshalers.c \
- gtkmarshalers.h \
- gtkmarshal.c \
- ${gtk_built_private_headers} \
-- ${gtk_built_public_sources} \
--@STRIP_END@
--stamp_files = @STRIP_BEGIN@ \
-+ ${gtk_built_public_sources}
-+
-+stamp_files = \
- stamp-gtkmarshalers.h \
- stamp-gtkmarshal.h \
-- stamp-gtktypebuiltins.h \
--@STRIP_END@
-+ stamp-gtktypebuiltins.h
-+
- # non-header sources (headers should be specified in the above variables)
- # that don't serve as direct make target sources, i.e. they don't have
- # their own .lo rules and don't get publically installed
--gtk_extra_sources = @STRIP_BEGIN@ \
-+gtk_extra_sources = \
- gtkversion.h.in \
- gtkmarshalers.list \
-- gtkmarshal.list \
--@STRIP_END@
-+ gtkmarshal.list
-
- #
- # setup GTK+ sources and their dependencies
-@@ -592,11 +587,10 @@
-
- TEST_DEPS = $(DEPS) gtk.immodules
-
--LDADDS = @STRIP_BEGIN@ \
-+LDADDS = \
- $(gtktargetlib) \
- $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
-- $(top_builddir)/gdk/$(gdktargetlib) \
--@STRIP_END@
-+ $(top_builddir)/gdk/$(gdktargetlib)
-
- #
- # Installed tools
-@@ -615,7 +609,7 @@
- echo $$p; \
- done
-
--EXTRA_DIST += @STRIP_BEGIN@ \
-+EXTRA_DIST += \
- line-arrow.xbm \
- line-wrap.xbm \
- tree_plus.xbm \
-@@ -629,9 +623,8 @@
- gtkrc.key.default \
- gtkrc.key.emacs \
- makefile.msc \
-- makefile.msc.in \
--@STRIP_END@
-+ makefile.msc.in
-
- install-data-local:
-
-
---- gdk/Makefile.am.old 2003-09-03 20:49:25.000000000 +0100
-+++ gdk/Makefile.am 2004-03-07 12:18:18.000000000 +0000
-@@ -10,7 +10,7 @@
- makeenums.pl \
- makefile.msc
-
--common_includes = @STRIP_BEGIN@ \
-+common_includes = \
- -DG_LOG_DOMAIN=\"Gdk\" \
- -DGDK_COMPILATION \
- -I$(top_srcdir) \
-@@ -20,8 +20,7 @@
- -DGDK_PIXBUF_DISABLE_DEPRECATED \
- -DGDK_DISABLE_DEPRECATED \
- @GTK_DEBUG_FLAGS@ \
-- @GDK_DEP_CFLAGS@ \
--@STRIP_END@
-+ @GDK_DEP_CFLAGS@
-
- INCLUDES = $(common_includes)
- gtarget=@gdktarget@
-@@ -69,7 +68,7 @@
- # libtool stuff: set version and export symbols for resolving
- # since automake doesn't support conditionalized libsomething_la_LDFLAGS
- # we use the general approach here
--LDFLAGS = @STRIP_BEGIN@ \
-+AM_LDFLAGS = \
- @LDFLAGS@ \
- -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
- -export-dynamic \
-@@ -77,8 +76,7 @@
- $(no_undefined) \
- @LIBTOOL_EXPORT_OPTIONS@ \
- $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
-- $(gdk_win32_symbols) \
--@STRIP_END@
-+ $(gdk_win32_symbols)
-
- #
- # setup source file variables
-@@ -88,7 +86,7 @@
- #
- # Note: files added here may need to be be propagated to gdk_headers in gtk/Makefile.am
- #
--gdk_public_h_sources = @STRIP_BEGIN@ \
-+gdk_public_h_sources = \
- gdk.h \
- gdkcolor.h \
- gdkcursor.h \
-@@ -114,16 +112,14 @@
- gdkselection.h \
- gdktypes.h \
- gdkvisual.h \
-- gdkwindow.h \
--@STRIP_END@
-+ gdkwindow.h
-
--gdk_headers = @STRIP_BEGIN@ \
-+gdk_headers = \
- $(gdk_public_h_sources) \
- gdkenumtypes.h \
-- gdkprivate.h \
--@STRIP_END@
-+ gdkprivate.h
-
--gdk_c_sources = @STRIP_BEGIN@ \
-+gdk_c_sources = \
- gdk.c \
- gdkcolor.c \
- gdkcursor.c \
-@@ -153,8 +149,7 @@
- gdkscreen.c \
- gdkselection.c \
- gdkvisual.c \
-- gdkwindow.c \
--@STRIP_END@
-+ gdkwindow.c
-
- #
- # setup GDK sources and their dependencies
-@@ -164,11 +159,10 @@
- gdkinclude_HEADERS = $(gdk_headers)
-
- # gdkmarshalers.c is not here becuase it is currently an empty file
--common_sources = @STRIP_BEGIN@ \
-+common_sources = \
- $(gdk_c_sources) \
- gdkenumtypes.c \
-- gdkmarshalers.h \
--@STRIP_END@
-+ gdkmarshalers.h
-
- libgdk_x11_2_0_la_SOURCES = $(common_sources)
- libgdk_linux_fb_2_0_la_SOURCES = $(common_sources) gdkkeynames.c
---- gdk-pixbuf/Makefile.am.old 2003-01-27 23:19:07.000000000 +0000
-+++ gdk-pixbuf/Makefile.am 2004-03-07 12:19:11.000000000 +0000
-@@ -238,7 +238,7 @@
- endif
-
- DEPS = libgdk_pixbuf-$(GTK_API_VERSION).la
--INCLUDES = @STRIP_BEGIN@ \
-+INCLUDES = \
- -DG_LOG_DOMAIN=\"GdkPixbuf\" \
- -I$(top_srcdir) -I$(top_builddir) \
- -I$(top_srcdir)/gdk-pixbuf \
-@@ -252,8 +252,7 @@
- @INCLUDED_LOADER_DEFINE@ \
- @GTK_DEBUG_FLAGS@ \
- @GDK_PIXBUF_DEP_CFLAGS@ \
-- -DGDK_PIXBUF_ENABLE_BACKEND \
--@STRIP_END@
-+ -DGDK_PIXBUF_ENABLE_BACKEND
-
- AM_CPPFLAGS = "-DPIXBUF_LIBDIR=\"$(loaderdir)\"" "-DBUILT_MODULES_DIR=\"$(srcdir)/.libs\""
- LDADDS = libgdk_pixbuf-$(GTK_API_VERSION).la
-@@ -281,7 +280,7 @@
- # The GdkPixBuf library
- #
- libgdk_pixbufincludedir = $(includedir)/gtk-2.0/gdk-pixbuf
--libgdk_pixbuf_2_0_la_SOURCES = @STRIP_BEGIN@ \
-+libgdk_pixbuf_2_0_la_SOURCES = \
- gdk-pixbuf-i18n.h \
- gdk-pixbuf.c \
- gdk-pixbuf-animation.c \
-@@ -291,14 +290,13 @@
- gdk-pixbuf-scale.c \
- gdk-pixbuf-util.c \
- gdk-pixdata.c \
-- $(gdk_pixbuf_built_cfiles) \
--@STRIP_END@
--libgdk_pixbuf_2_0_la_LDFLAGS = @STRIP_BEGIN@ \
-+ $(gdk_pixbuf_built_cfiles)
-+
-+libgdk_pixbuf_2_0_la_LDFLAGS = \
- -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
- @LIBTOOL_EXPORT_OPTIONS@ \
- $(no_undefined) \
-- $(gdk_pixbuf_symbols) \
--@STRIP_END@
-+ $(gdk_pixbuf_symbols)
-
- libgdk_pixbuf_2_0_la_LIBADD = pixops/libpixops.la $(builtin_objs) $(gdk_pixbuf_win32res_lo) $(GDK_PIXBUF_DEP_LIBS)
- libgdk_pixbuf_2_0_la_DEPENDENCIES = pixops/libpixops.la $(builtin_objs) $(gdk_pixbuf_def) $(gdk_pixbuf_win32res_lo)
---- demos/Makefile.am.old 2003-06-06 01:52:59.000000000 +0100
-+++ demos/Makefile.am 2004-03-07 12:20:23.000000000 +0000
-@@ -2,7 +2,7 @@
-
- SUBDIRS = gtk-demo
-
--INCLUDES = @STRIP_BEGIN@ \
-+INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_builddir)/gdk \
- -DG_DISABLE_DEPRECATED \
-@@ -10,19 +10,17 @@
- -DGDK_DISABLE_DEPRECATED \
- -DGTK_DISABLE_DEPRECATED \
- @GTK_DEBUG_FLAGS@ \
-- @GTK_DEP_CFLAGS@ \
--@STRIP_END@
-+ @GTK_DEP_CFLAGS@
-
- DEPS = \
- $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
- $(top_builddir)/gdk/@gdktargetlib@ \
- $(top_builddir)/gtk/@gtktargetlib@
-
--LDADDS = @STRIP_BEGIN@ \
-+LDADDS = \
- $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
- $(top_builddir)/gdk/@gdktargetlib@ \
-- $(top_builddir)/gtk/@gtktargetlib@ \
--@STRIP_END@
-+ $(top_builddir)/gtk/@gtktargetlib@
-
- noinst_PROGRAMS = \
- testpixbuf \
---- docs/faq/Makefile.am.old 2002-03-06 03:59:12.000000000 +0000
-+++ docs/faq/Makefile.am 2004-03-07 12:23:40.000000000 +0000
-@@ -14,15 +14,6 @@
- dist-hook: html
- cp -Rp $(srcdir)/html $(distdir)
- else
--html:
-- echo "***"
-- echo "*** Warning: FAQ not built"
-- echo "***"
--
--pdf:
-- echo "***"
-- echo "*** Warning: FAQ not built"
-- echo "***"
-
- dist-hook:
- echo "***"
---- docs/tutorial/Makefile.am.old 2002-03-06 03:59:12.000000000 +0000
-+++ docs/tutorial/Makefile.am 2004-03-07 12:24:42.000000000 +0000
-@@ -49,15 +49,6 @@
- dist-hook: html
- cp -Rp $(srcdir)/html $(distdir)
- else
--html:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "***"
--
--pdf:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "***"
-
- dist-hook:
- echo "***"
---- demos/gtk-demo/Makefile.am.old 2003-06-09 22:58:32.000000000 +0100
-+++ demos/gtk-demo/Makefile.am 2004-03-07 12:25:47.000000000 +0000
-@@ -4,7 +4,7 @@
-
- ## These should be in the order you want them to appear in the
- ## demo app, which means alphabetized by demo title, not filename
--demos = @STRIP_BEGIN@ \
-+demos = \
- appwindow.c \
- button_box.c \
- changedisplay.c \
-@@ -21,10 +21,9 @@
- sizegroup.c \
- stock_browser.c \
- textview.c \
-- tree_store.c \
--@STRIP_END@
-+ tree_store.c
-
--INCLUDES = @STRIP_BEGIN@ \
-+INCLUDES = \
- -DDEMOCODEDIR="\"$(democodedir)\"" \
- -I$(top_srcdir) \
- -I$(top_builddir)/gdk \
-@@ -33,19 +32,17 @@
- -DGDK_DISABLE_DEPRECATED \
- -DGTK_DISABLE_DEPRECATED \
- @GTK_DEBUG_FLAGS@ \
-- @GTK_DEP_CFLAGS@ \
--@STRIP_END@
-+ @GTK_DEP_CFLAGS@
-
- DEPS = \
- $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
- $(top_builddir)/gdk/@gdktargetlib@ \
- $(top_builddir)/gtk/@gtktargetlib@
-
--LDADDS = @STRIP_BEGIN@ \
-+LDADDS = \
- $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
- $(top_builddir)/gdk/@gdktargetlib@ \
-- $(top_builddir)/gtk/@gtktargetlib@ \
--@STRIP_END@
-+ $(top_builddir)/gtk/@gtktargetlib@
-
- bin_PROGRAMS = gtk-demo
-
diff --git a/packages/gtk+/gtk+-2.2.4/configure-lossage.patch b/packages/gtk+/gtk+-2.2.4/configure-lossage.patch
deleted file mode 100644
index 04b789675d..0000000000
--- a/packages/gtk+/gtk+-2.2.4/configure-lossage.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- configure.in~ 2003-09-04 18:06:42.000000000 +0100
-+++ configure.in 2004-03-07 12:28:12.000000000 +0000
-@@ -963,7 +963,8 @@
-
- AC_MSG_CHECKING([For sufficiently new FreeType (at least 2.0.1)])
- AC_TRY_COMPILE([
--#include <freetype/freetype.h>
-+#include <ft2build.h>
-+#include FT_FREETYPE_H
- #include FT_ERRORS_H
- ],
- [(void)1;],:,have_freetype=false)
diff --git a/packages/gtk+/gtk+-2.2.4/glib-2.0.m4 b/packages/gtk+/gtk+-2.2.4/glib-2.0.m4
deleted file mode 100644
index 28ccef4a5f..0000000000
--- a/packages/gtk+/gtk+-2.2.4/glib-2.0.m4
+++ /dev/null
@@ -1,212 +0,0 @@
-# Configure paths for GLIB
-# Owen Taylor 1997-2001
-
-dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
-dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or
-dnl gthread is specified in MODULES, pass to pkg-config
-dnl
-AC_DEFUN(AM_PATH_GLIB_2_0,
-[dnl
-dnl Get the cflags and libraries from pkg-config
-dnl
-AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program],
- , enable_glibtest=yes)
-
- pkg_config_args=glib-2.0
- for module in . $4
- do
- case "$module" in
- gmodule)
- pkg_config_args="$pkg_config_args gmodule-2.0"
- ;;
- gobject)
- pkg_config_args="$pkg_config_args gobject-2.0"
- ;;
- gthread)
- pkg_config_args="$pkg_config_args gthread-2.0"
- ;;
- esac
- done
-
- AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-
- no_glib=""
-
- if test x$PKG_CONFIG != xno ; then
- if $PKG_CONFIG --atleast-pkgconfig-version 0.7 ; then
- :
- else
- echo *** pkg-config too old; version 0.7 or better required.
- no_glib=yes
- PKG_CONFIG=no
- fi
- else
- no_glib=yes
- fi
-
- min_glib_version=ifelse([$1], ,2.0.0,$1)
- AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
-
- if test x$PKG_CONFIG != xno ; then
- ## don't try to run the test against uninstalled libtool libs
- if $PKG_CONFIG --uninstalled $pkg_config_args; then
- echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
- enable_glibtest=no
- fi
-
- if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
- :
- else
- no_glib=yes
- fi
- fi
-
- if test x"$no_glib" = x ; then
- GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
- GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
- GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
-
- GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
- GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
- glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
- glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
- glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
- sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
- if test "x$enable_glibtest" = "xyes" ; then
- ac_save_CFLAGS="$CFLAGS"
- ac_save_LIBS="$LIBS"
- CFLAGS="$CFLAGS $GLIB_CFLAGS"
- LIBS="$GLIB_LIBS $LIBS"
-dnl
-dnl Now check if the installed GLIB is sufficiently new. (Also sanity
-dnl checks the results of pkg-config to some extent)
-dnl
- rm -f conf.glibtest
- AC_TRY_RUN([
-#include <glib.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-int
-main ()
-{
- int major, minor, micro;
- char *tmp_version;
-
- system ("touch conf.glibtest");
-
- /* HP/UX 9 (%@#!) writes to sscanf strings */
- tmp_version = g_strdup("$min_glib_version");
- if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
- printf("%s, bad version string\n", "$min_glib_version");
- exit(1);
- }
-
- if ((glib_major_version != $glib_config_major_version) ||
- (glib_minor_version != $glib_config_minor_version) ||
- (glib_micro_version != $glib_config_micro_version))
- {
- printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n",
- $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
- glib_major_version, glib_minor_version, glib_micro_version);
- printf ("*** was found! If pkg-config was correct, then it is best\n");
- printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
- printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
- printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
- printf("*** required on your system.\n");
- printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
- printf("*** to point to the correct configuration files\n");
- }
- else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
- (glib_minor_version != GLIB_MINOR_VERSION) ||
- (glib_micro_version != GLIB_MICRO_VERSION))
- {
- printf("*** GLIB header files (version %d.%d.%d) do not match\n",
- GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
- printf("*** library (version %d.%d.%d)\n",
- glib_major_version, glib_minor_version, glib_micro_version);
- }
- else
- {
- if ((glib_major_version > major) ||
- ((glib_major_version == major) && (glib_minor_version > minor)) ||
- ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
- {
- return 0;
- }
- else
- {
- printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
- glib_major_version, glib_minor_version, glib_micro_version);
- printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
- major, minor, micro);
- printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
- printf("***\n");
- printf("*** If you have already installed a sufficiently new version, this error\n");
- printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
- printf("*** being found. The easiest way to fix this is to remove the old version\n");
- printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
- printf("*** correct copy of pkg-config. (In this case, you will have to\n");
- printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
- printf("*** so that the correct libraries are found at run-time))\n");
- }
- }
- return 1;
-}
-],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
- CFLAGS="$ac_save_CFLAGS"
- LIBS="$ac_save_LIBS"
- fi
- fi
- if test "x$no_glib" = x ; then
- AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
- ifelse([$2], , :, [$2])
- else
- AC_MSG_RESULT(no)
- if test "$PKG_CONFIG" = "no" ; then
- echo "*** A new enough version of pkg-config was not found."
- echo "*** See http://www.freedesktop.org/software/pkgconfig/"
- else
- if test -f conf.glibtest ; then
- :
- else
- echo "*** Could not run GLIB test program, checking why..."
- ac_save_CFLAGS="$CFLAGS"
- ac_save_LIBS="$LIBS"
- CFLAGS="$CFLAGS $GLIB_CFLAGS"
- LIBS="$LIBS $GLIB_LIBS"
- AC_TRY_LINK([
-#include <glib.h>
-#include <stdio.h>
-], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
- [ echo "*** The test program compiled, but did not run. This usually means"
- echo "*** that the run-time linker is not finding GLIB or finding the wrong"
- echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
- echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
- echo "*** to the installed location Also, make sure you have run ldconfig if that"
- echo "*** is required on your system"
- echo "***"
- echo "*** If you have an old version installed, it is best to remove it, although"
- echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
- [ echo "*** The test program failed to compile or link. See the file config.log for the"
- echo "*** exact error that occured. This usually means GLIB is incorrectly installed."])
- CFLAGS="$ac_save_CFLAGS"
- LIBS="$ac_save_LIBS"
- fi
- fi
- GLIB_CFLAGS=""
- GLIB_LIBS=""
- GLIB_GENMARSHAL=""
- GOBJECT_QUERY=""
- GLIB_MKENUMS=""
- ifelse([$3], , :, [$3])
- fi
- AC_SUBST(GLIB_CFLAGS)
- AC_SUBST(GLIB_LIBS)
- AC_SUBST(GLIB_GENMARSHAL)
- AC_SUBST(GOBJECT_QUERY)
- AC_SUBST(GLIB_MKENUMS)
- rm -f conf.glibtest
-])
diff --git a/packages/gtk+/gtk+-2.2.4/glib-gettext.m4 b/packages/gtk+/gtk+-2.2.4/glib-gettext.m4
deleted file mode 100644
index 862db40a93..0000000000
--- a/packages/gtk+/gtk+-2.2.4/glib-gettext.m4
+++ /dev/null
@@ -1,380 +0,0 @@
-# Copyright (C) 1995-2002 Free Software Foundation, Inc.
-# Copyright (C) 2001-2003 Red Hat, Inc.
-#
-# This file is free software, distributed under the terms of the GNU
-# General Public License. As a special exception to the GNU General
-# Public License, this file may be distributed as part of a program
-# that contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# This file can be copied and used freely without restrictions. It can
-# be used in projects which are not available under the GNU Public License
-# but which still want to provide support for the GNU gettext functionality.
-#
-# Macro to add for using GNU gettext.
-# Ulrich Drepper <drepper@cygnus.com>, 1995, 1996
-#
-# Modified to never use included libintl.
-# Owen Taylor <otaylor@redhat.com>, 12/15/1998
-#
-# Major rework to remove unused code
-# Owen Taylor <otaylor@redhat.com>, 12/11/2002
-#
-# Added better handling of ALL_LINGUAS from GNU gettext version
-# written by Bruno Haible, Owen Taylor <otaylor.redhat.com> 5/30/3002
-
-#
-# We need this here as well, since someone might use autoconf-2.5x
-# to configure GLib then an older version to configure a package
-# using AM_GLIB_GNU_GETTEXT
-AC_PREREQ(2.53)
-
-dnl
-dnl We go to great lengths to make sure that aclocal won't
-dnl try to pull in the installed version of these macros
-dnl when running aclocal in the glib directory.
-dnl
-m4_copy([AC_DEFUN],[glib_DEFUN])
-m4_copy([AC_REQUIRE],[glib_REQUIRE])
-dnl
-dnl At the end, if we're not within glib, we'll define the public
-dnl definitions in terms of our private definitions.
-dnl
-
-# GLIB_LC_MESSAGES
-#--------------------
-glib_DEFUN([GLIB_LC_MESSAGES],
- [AC_CHECK_HEADERS([locale.h])
- if test $ac_cv_header_locale_h = yes; then
- AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
- [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
- am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
- if test $am_cv_val_LC_MESSAGES = yes; then
- AC_DEFINE(HAVE_LC_MESSAGES, 1,
- [Define if your <locale.h> file defines LC_MESSAGES.])
- fi
- fi])
-
-# GLIB_PATH_PROG_WITH_TEST
-#----------------------------
-dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-glib_DEFUN([GLIB_PATH_PROG_WITH_TEST],
-[# Extract the first word of "$2", so it can be a program name with args.
-set dummy $2; ac_word=[$]2
-AC_MSG_CHECKING([for $ac_word])
-AC_CACHE_VAL(ac_cv_path_$1,
-[case "[$]$1" in
- /*)
- ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
- ;;
- *)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in ifelse([$5], , $PATH, [$5]); do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if [$3]; then
- ac_cv_path_$1="$ac_dir/$ac_word"
- break
- fi
- fi
- done
- IFS="$ac_save_ifs"
-dnl If no 4th arg is given, leave the cache variable unset,
-dnl so AC_PATH_PROGS will keep looking.
-ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
-])dnl
- ;;
-esac])dnl
-$1="$ac_cv_path_$1"
-if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
- AC_MSG_RESULT([$]$1)
-else
- AC_MSG_RESULT(no)
-fi
-AC_SUBST($1)dnl
-])
-
-# GLIB_WITH_NLS
-#-----------------
-glib_DEFUN([GLIB_WITH_NLS],
- dnl NLS is obligatory
- [USE_NLS=yes
- AC_SUBST(USE_NLS)
-
- gt_cv_have_gettext=no
-
- CATOBJEXT=NONE
- XGETTEXT=:
- INTLLIBS=
-
- AC_CHECK_HEADER(libintl.h,
- [gt_cv_func_dgettext_libintl="no"
- libintl_extra_libs=""
-
- #
- # First check in libc
- #
- AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc,
- [AC_TRY_LINK([
-#include <libintl.h>
-],
- [return (int) dgettext ("","")],
- gt_cv_func_dgettext_libc=yes,
- gt_cv_func_dgettext_libc=no)
- ])
-
- if test "$gt_cv_func_dgettext_libc" = "yes" ; then
- AC_CHECK_FUNCS(bind_textdomain_codeset)
- fi
-
- #
- # If we don't have everything we want, check in libintl
- #
- if test "$gt_cv_func_dgettext_libc" != "yes" \
- || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then
-
- AC_CHECK_LIB(intl, bindtextdomain,
- [AC_CHECK_LIB(intl, dgettext,
- gt_cv_func_dgettext_libintl=yes)])
-
- if test "$gt_cv_func_dgettext_libintl" != "yes" ; then
- AC_MSG_CHECKING([if -liconv is needed to use gettext])
- AC_MSG_RESULT([])
- AC_CHECK_LIB(intl, dcgettext,
- [gt_cv_func_dgettext_libintl=yes
- libintl_extra_libs=-liconv],
- :,-liconv)
- fi
-
- #
- # If we found libintl, then check in it for bind_textdomain_codeset();
- # we'll prefer libc if neither have bind_textdomain_codeset(),
- # and both have dgettext
- #
- if test "$gt_cv_func_dgettext_libintl" = "yes" ; then
- glib_save_LIBS="$LIBS"
- LIBS="$LIBS -lintl $libintl_extra_libs"
- unset ac_cv_func_bind_textdomain_codeset
- AC_CHECK_FUNCS(bind_textdomain_codeset)
- LIBS="$glib_save_LIBS"
-
- if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then
- gt_cv_func_dgettext_libc=no
- else
- if test "$gt_cv_func_dgettext_libc" = "yes"; then
- gt_cv_func_dgettext_libintl=no
- fi
- fi
- fi
- fi
-
- if test "$gt_cv_func_dgettext_libc" = "yes" \
- || test "$gt_cv_func_dgettext_libintl" = "yes"; then
- gt_cv_have_gettext=yes
- fi
-
- if test "$gt_cv_func_dgettext_libintl" = "yes"; then
- INTLLIBS="-lintl $libintl_extra_libs"
- fi
-
- if test "$gt_cv_have_gettext" = "yes"; then
- AC_DEFINE(HAVE_GETTEXT,1,
- [Define if the GNU gettext() function is already present or preinstalled.])
- GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
- if test "$MSGFMT" != "no"; then
- glib_save_LIBS="$LIBS"
- LIBS="$LIBS $INTLLIBS"
- AC_CHECK_FUNCS(dcgettext)
- AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
- GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
- AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
- return _nl_msg_cat_cntr],
- [CATOBJEXT=.gmo
- DATADIRNAME=share],
- [case $host in
- *-*-solaris*)
- dnl On Solaris, if bind_textdomain_codeset is in libc,
- dnl GNU format message catalog is always supported,
- dnl since both are added to the libc all together.
- dnl Hence, we'd like to go with DATADIRNAME=share and
- dnl and CATOBJEXT=.gmo in this case.
- AC_CHECK_FUNC(bind_textdomain_codeset,
- [CATOBJEXT=.gmo
- DATADIRNAME=share],
- [CATOBJEXT=.mo
- DATADIRNAME=lib])
- ;;
- *)
- CATOBJEXT=.mo
- DATADIRNAME=lib
- ;;
- esac])
- LIBS="$glib_save_LIBS"
- INSTOBJEXT=.mo
- else
- gt_cv_have_gettext=no
- fi
- fi
- ])
-
- if test "$gt_cv_have_gettext" = "yes" ; then
- AC_DEFINE(ENABLE_NLS, 1,
- [always defined to indicate that i18n is enabled])
- fi
-
- dnl Test whether we really found GNU xgettext.
- if test "$XGETTEXT" != ":"; then
- dnl If it is not GNU xgettext we define it as : so that the
- dnl Makefiles still can work.
- if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
- : ;
- else
- AC_MSG_RESULT(
- [found xgettext program is not GNU xgettext; ignore it])
- XGETTEXT=":"
- fi
- fi
-
- # We need to process the po/ directory.
- POSUB=po
-
- AC_OUTPUT_COMMANDS(
- [case "$CONFIG_FILES" in *po/Makefile.in*)
- sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
- esac])
-
- dnl These rules are solely for the distribution goal. While doing this
- dnl we only have to keep exactly one list of the available catalogs
- dnl in configure.in.
- for lang in $ALL_LINGUAS; do
- GMOFILES="$GMOFILES $lang.gmo"
- POFILES="$POFILES $lang.po"
- done
-
- dnl Make all variables we use known to autoconf.
- AC_SUBST(CATALOGS)
- AC_SUBST(CATOBJEXT)
- AC_SUBST(DATADIRNAME)
- AC_SUBST(GMOFILES)
- AC_SUBST(INSTOBJEXT)
- AC_SUBST(INTLLIBS)
- AC_SUBST(PO_IN_DATADIR_TRUE)
- AC_SUBST(PO_IN_DATADIR_FALSE)
- AC_SUBST(POFILES)
- AC_SUBST(POSUB)
- ])
-
-# AM_GLIB_GNU_GETTEXT
-# -------------------
-# Do checks necessary for use of gettext. If a suitable implementation
-# of gettext is found in either in libintl or in the C library,
-# it will set INTLLIBS to the libraries needed for use of gettext
-# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable
-# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST()
-# on various variables needed by the Makefile.in.in installed by
-# glib-gettextize.
-dnl
-glib_DEFUN(GLIB_GNU_GETTEXT,
- [AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_HEADER_STDC])dnl
-
- GLIB_LC_MESSAGES
- GLIB_WITH_NLS
-
- if test "$gt_cv_have_gettext" = "yes"; then
- if test "x$ALL_LINGUAS" = "x"; then
- LINGUAS=
- else
- AC_MSG_CHECKING(for catalogs to be installed)
- NEW_LINGUAS=
- for presentlang in $ALL_LINGUAS; do
- useit=no
- if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then
- desiredlanguages="$LINGUAS"
- else
- desiredlanguages="$ALL_LINGUAS"
- fi
- for desiredlang in $desiredlanguages; do
- # Use the presentlang catalog if desiredlang is
- # a. equal to presentlang, or
- # b. a variant of presentlang (because in this case,
- # presentlang can be used as a fallback for messages
- # which are not translated in the desiredlang catalog).
- case "$desiredlang" in
- "$presentlang"*) useit=yes;;
- esac
- done
- if test $useit = yes; then
- NEW_LINGUAS="$NEW_LINGUAS $presentlang"
- fi
- done
- LINGUAS=$NEW_LINGUAS
- AC_MSG_RESULT($LINGUAS)
- fi
-
- dnl Construct list of names of catalog files to be constructed.
- if test -n "$LINGUAS"; then
- for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
- fi
- fi
-
- dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
- dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
- dnl Try to locate is.
- MKINSTALLDIRS=
- if test -n "$ac_aux_dir"; then
- MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
- fi
- if test -z "$MKINSTALLDIRS"; then
- MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
- fi
- AC_SUBST(MKINSTALLDIRS)
-
- dnl Generate list of files to be processed by xgettext which will
- dnl be included in po/Makefile.
- test -d po || mkdir po
- if test "x$srcdir" != "x."; then
- if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
- posrcprefix="$srcdir/"
- else
- posrcprefix="../$srcdir/"
- fi
- else
- posrcprefix="../"
- fi
- rm -f po/POTFILES
- sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
- < $srcdir/po/POTFILES.in > po/POTFILES
- ])
-
-# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE)
-# -------------------------------
-# Define VARIABLE to the location where catalog files will
-# be installed by po/Makefile.
-glib_DEFUN(GLIB_DEFINE_LOCALEDIR,
-[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl
-glib_save_prefix="$prefix"
-glib_save_exec_prefix="$exec_prefix"
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-test "x$exec_prefix" = xNONE && exec_prefix=$prefix
-if test "x$CATOBJEXT" = "x.mo" ; then
- localedir=`eval echo "${libdir}/locale"`
-else
- localedir=`eval echo "${datadir}/locale"`
-fi
-prefix="$glib_save_prefix"
-exec_prefix="$glib_save_exec_prefix"
-AC_DEFINE_UNQUOTED($1, "$localedir",
- [Define the location where the catalogs will be installed])
-])
-
-dnl
-dnl Now the definitions that aclocal will find
-dnl
-ifdef(glib_configure_in,[],[
-AC_DEFUN(AM_GLIB_GNU_GETTEXT,[GLIB_GNU_GETTEXT($@)])
-AC_DEFUN(AM_GLIB_DEFINE_LOCALEDIR,[GLIB_DEFINE_LOCALEDIR($@)])
-])dnl
diff --git a/packages/gtk+/gtk+-2.2.4/libtool-lossage.patch b/packages/gtk+/gtk+-2.2.4/libtool-lossage.patch
deleted file mode 100644
index d291cbdd69..0000000000
--- a/packages/gtk+/gtk+-2.2.4/libtool-lossage.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- configure.in.orig 2004-03-14 23:30:31.000000000 +0000
-+++ configure.in 2004-03-15 00:00:51.000000000 +0000
-@@ -340,7 +340,7 @@
- AC_MSG_CHECKING([Whether to write dependencies into .pc files])
- case $enable_explicit_deps in
- auto)
-- deplib_check_method=`(./libtool --config; echo eval echo \\$deplib_check_method) | sh`
-+ deplib_check_method=`($host_alias-libtool --config; echo eval echo \\$deplib_check_method) | sh`
- if test "X$deplib_check_method" = Xnone || test "x$enable_static" = xyes ; then
- enable_explicit_deps=yes
- else
-@@ -664,7 +664,7 @@
- dnl Now we check to see if our libtool supports shared lib deps
- dnl (in a rather ugly way even)
- if $dynworks; then
-- pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./libtool --config"
-+ pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} $host_alias-libtool --config"
- pixbuf_deplibs_check=`$pixbuf_libtool_config | \
- grep '^[[a-z_]]*check[[a-z_]]*_method=[['\''"]]' | \
- sed 's/.*[['\''"]]\(.*\)[['\''"]]$/\1/'`
diff --git a/packages/gtk+/gtk+-2.2.4/no-demos.patch b/packages/gtk+/gtk+-2.2.4/no-demos.patch
deleted file mode 100644
index 7a44943d4a..0000000000
--- a/packages/gtk+/gtk+-2.2.4/no-demos.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
---- gtk+-2.2.4/Makefile.am~no-demos 2003-01-30 22:40:35.000000000 +0100
-+++ gtk+-2.2.4/Makefile.am 2004-03-11 11:49:43.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests contrib
- SUBDIRS = po $(SRC_SUBDIRS) docs build m4macros
-
- # require automake 1.4
diff --git a/packages/gtk+/gtk+-2.2.4/no-xwc.patch b/packages/gtk+/gtk+-2.2.4/no-xwc.patch
deleted file mode 100644
index e1ee5cb5c8..0000000000
--- a/packages/gtk+/gtk+-2.2.4/no-xwc.patch
+++ /dev/null
@@ -1,148 +0,0 @@
---- gdk/x11/gdkdrawable-x11.c~ 2003-08-18 17:02:39.000000000 +0100
-+++ gdk/x11/gdkdrawable-x11.c 2004-03-29 21:30:17.000000000 +0100
-@@ -636,12 +636,14 @@
- GDK_GC_GET_XGC (gc), x, y, (XChar2b *) text, text_length / 2);
- }
- }
-+#ifdef HAVE_XWC
- else if (font->type == GDK_FONT_FONTSET)
- {
- XFontSet fontset = (XFontSet) GDK_FONT_XFONT (font);
- XmbDrawString (xdisplay, impl->xid,
- fontset, GDK_GC_GET_XGC (gc), x, y, text, text_length);
- }
-+#endif
- else
- g_error("undefined font type\n");
- }
-@@ -673,6 +675,7 @@
- GDK_GC_GET_XGC (gc), x, y, text_8bit, text_length);
- g_free (text_8bit);
- }
-+#ifdef HAVE_XWC
- else if (font->type == GDK_FONT_FONTSET)
- {
- if (sizeof(GdkWChar) == sizeof(wchar_t))
-@@ -693,7 +696,8 @@
- g_free (text_wchar);
- }
- }
-+#endif
- else
- g_error("undefined font type\n");
- }
-
---- gdk/x11/gdkim-x11.c~ 2002-11-01 00:45:32.000000000 +0000
-+++ gdk/x11/gdkim-x11.c 2004-03-29 21:28:30.000000000 +0100
-@@ -51,6 +51,7 @@
- void
- _gdk_x11_initialize_locale (void)
- {
-+#ifdef HAVE_XWC
- wchar_t result;
- gchar *current_locale;
- static char *last_locale = NULL;
-@@ -96,6 +97,7 @@
- GDK_NOTE (XIM,
- g_message ("%s multi-byte string functions.",
- gdk_use_mb ? "Using" : "Not using"));
-+#endif
-
- return;
- }
-@@ -139,6 +141,7 @@
- {
- gchar *mbstr;
-
-+#ifdef HAVE_XWC
- if (gdk_use_mb)
- {
- GdkDisplay *display = find_a_display ();
-@@ -177,6 +180,7 @@
- XFree (tpr.value);
- }
- else
-+#endif
- {
- gint length = 0;
- gint i;
-@@ -209,6 +213,7 @@
- gint
- gdk_mbstowcs (GdkWChar *dest, const gchar *src, gint dest_max)
- {
-+#ifdef HAVE_XWC
- if (gdk_use_mb)
- {
- GdkDisplay *display = find_a_display ();
-@@ -241,7 +246,8 @@
- return len_cpy;
- }
- else
-+#endif
- {
- gint i;
-
-
---- gdk/x11/gdkfont-x11.c~ 2003-03-06 20:17:55.000000000 +0000
-+++ gdk/x11/gdkfont-x11.c 2004-03-29 21:29:40.000000000 +0100
-@@ -594,10 +594,12 @@
- width = XTextWidth16 (xfont, (XChar2b *) text, text_length / 2);
- }
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- width = XmbTextEscapement (fontset, text, text_length);
- break;
-+#endif
- default:
- width = 0;
- }
-@@ -647,6 +649,7 @@
- width = 0;
- }
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- if (sizeof(GdkWChar) == sizeof(wchar_t))
- {
-@@ -664,6 +667,7 @@
- g_free (text_wchar);
- }
- break;
-+#endif
- default:
- width = 0;
- }
-@@ -736,6 +740,7 @@
- if (descent)
- *descent = overall.descent;
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- XmbTextExtents (fontset, text, text_length, &ink, &logical);
-@@ -750,6 +755,7 @@
- if (descent)
- *descent = ink.y + ink.height;
- break;
-+#endif
- }
-
- }
-@@ -822,6 +828,7 @@
- *descent = overall.descent;
- break;
- }
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
-
-@@ -849,6 +856,7 @@
- if (descent)
- *descent = ink.y + ink.height;
- break;
-+#endif
- }
-
- }
diff --git a/packages/gtk+/gtk+-2.4.13/automake-lossage.patch b/packages/gtk+/gtk+-2.4.13/automake-lossage.patch
deleted file mode 100644
index 0d423ddbb9..0000000000
--- a/packages/gtk+/gtk+-2.4.13/automake-lossage.patch
+++ /dev/null
@@ -1,24 +0,0 @@
---- gtk+-2.4.1/docs/tutorial/Makefile.am~ 2003-05-06 22:54:20.000000000 +0100
-+++ gtk+-2.4.1/docs/tutorial/Makefile.am 2004-05-08 12:31:41.000000000 +0100
-@@ -52,21 +52,5 @@
-
- dist-hook: html
- cp -Rp $(srcdir)/html $(distdir)
--else
--html:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "***"
--
--pdf:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "***"
--
--dist-hook:
-- echo "***"
-- echo "*** Warning: Tutorial not built"
-- echo "*** DISTRIBUTION IS INCOMPLETE"
-- echo "***"
- endif
-
diff --git a/packages/gtk+/gtk+-2.4.13/disable-tooltips.patch b/packages/gtk+/gtk+-2.4.13/disable-tooltips.patch
deleted file mode 100644
index d71d839c3c..0000000000
--- a/packages/gtk+/gtk+-2.4.13/disable-tooltips.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- gtk+-2.4.3/gtk/gtktooltips.c.old 2004-07-04 18:52:04.000000000 +0100
-+++ gtk+-2.4.3/gtk/gtktooltips.c 2004-07-04 18:52:08.000000000 +0100
-@@ -118,7 +118,7 @@
- tooltips->tips_data_list = NULL;
-
- tooltips->delay = DEFAULT_DELAY;
-- tooltips->enabled = TRUE;
-+ tooltips->enabled = FALSE;
- tooltips->timer_tag = 0;
- tooltips->use_sticky_delay = FALSE;
- tooltips->last_popdown.tv_sec = -1;
diff --git a/packages/gtk+/gtk+-2.4.13/gtk+-handhelds.patch b/packages/gtk+/gtk+-2.4.13/gtk+-handhelds.patch
deleted file mode 100644
index 20481f059b..0000000000
--- a/packages/gtk+/gtk+-2.4.13/gtk+-handhelds.patch
+++ /dev/null
@@ -1,236 +0,0 @@
---- gtk+-2.4.1/gtk/gtkarrow.c 2004-03-13 09:51:13.000000000 +1100
-+++ gtk+-2.4.1/gtk/gtkarrow.c 2004-05-26 14:52:17.000000000 +1000
-@@ -29,7 +29,7 @@
- #include "gtkarrow.h"
- #include "gtkintl.h"
-
--#define MIN_ARROW_SIZE 15
-+#define MIN_ARROW_SIZE 7
-
- enum {
- PROP_0,
-@@ -53,6 +53,8 @@
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-+static void gtk_arrow_size_request (GtkWidget *arrow,
-+ GtkRequisition *requisition);
-
- GType
- gtk_arrow_get_type (void)
-@@ -111,6 +113,7 @@
- G_PARAM_READABLE | G_PARAM_WRITABLE));
-
- widget_class->expose_event = gtk_arrow_expose;
-+ widget_class->size_request = gtk_arrow_size_request;
- }
-
- static void
-@@ -166,13 +169,18 @@
- }
-
- static void
-+gtk_arrow_size_request (GtkWidget *arrow,
-+ GtkRequisition *requisition)
-+{
-+ requisition->width = MIN_ARROW_SIZE + GTK_MISC (arrow)->xpad * 2;
-+ requisition->height = MIN_ARROW_SIZE + GTK_MISC (arrow)->ypad * 2;
-+}
-+
-+static void
- gtk_arrow_init (GtkArrow *arrow)
- {
- GTK_WIDGET_SET_FLAGS (arrow, GTK_NO_WINDOW);
-
-- GTK_WIDGET (arrow)->requisition.width = MIN_ARROW_SIZE + GTK_MISC (arrow)->xpad * 2;
-- GTK_WIDGET (arrow)->requisition.height = MIN_ARROW_SIZE + GTK_MISC (arrow)->ypad * 2;
--
- arrow->arrow_type = GTK_ARROW_RIGHT;
- arrow->shadow_type = GTK_SHADOW_OUT;
- }
---- gtk+-2.4.1/gtk/gtkcalendar.c 2004-03-06 14:37:26.000000000 +1100
-+++ gtk+-2.4.1/gtk/gtkcalendar.c 2004-05-26 14:58:57.000000000 +1000
-@@ -340,6 +340,9 @@
- static void gtk_calendar_select_and_focus_day (GtkCalendar *calendar,
- guint day);
-
-+static void gtk_calendar_do_select_day (GtkCalendar *calendar,
-+ guint day);
-+
- static void gtk_calendar_paint_arrow (GtkWidget *widget,
- guint arrow);
- static void gtk_calendar_paint_day_num (GtkWidget *widget,
-@@ -861,13 +864,13 @@
- if (month_len < calendar->selected_day)
- {
- calendar->selected_day = 0;
-- gtk_calendar_select_day (calendar, month_len);
-+ gtk_calendar_do_select_day (calendar, month_len);
- }
- else
- {
- if (calendar->selected_day < 0)
- calendar->selected_day = calendar->selected_day + 1 + month_length[leap (calendar->year)][calendar->month + 1];
-- gtk_calendar_select_day (calendar, calendar->selected_day);
-+ gtk_calendar_do_select_day (calendar, calendar->selected_day);
- }
-
- gtk_widget_queue_draw (GTK_WIDGET (calendar));
-@@ -908,10 +911,10 @@
- if (month_len < calendar->selected_day)
- {
- calendar->selected_day = 0;
-- gtk_calendar_select_day (calendar, month_len);
-+ gtk_calendar_do_select_day (calendar, month_len);
- }
- else
-- gtk_calendar_select_day (calendar, calendar->selected_day);
-+ gtk_calendar_do_select_day (calendar, calendar->selected_day);
-
- gtk_widget_queue_draw (GTK_WIDGET (calendar));
- gtk_calendar_thaw (calendar);
-@@ -939,10 +942,10 @@
- if (month_len < calendar->selected_day)
- {
- calendar->selected_day = 0;
-- gtk_calendar_select_day (calendar, month_len);
-+ gtk_calendar_do_select_day (calendar, month_len);
- }
- else
-- gtk_calendar_select_day (calendar, calendar->selected_day);
-+ gtk_calendar_do_select_day (calendar, calendar->selected_day);
-
- gtk_widget_queue_draw (GTK_WIDGET (calendar));
- gtk_calendar_thaw (calendar);
-@@ -974,10 +977,10 @@
- if (month_len < calendar->selected_day)
- {
- calendar->selected_day = 0;
-- gtk_calendar_select_day (calendar, month_len);
-+ gtk_calendar_do_select_day (calendar, month_len);
- }
- else
-- gtk_calendar_select_day (calendar, calendar->selected_day);
-+ gtk_calendar_do_select_day (calendar, calendar->selected_day);
-
- gtk_widget_queue_draw (GTK_WIDGET (calendar));
- gtk_calendar_thaw (calendar);
-@@ -2480,9 +2483,9 @@
- return TRUE;
- }
-
--void
--gtk_calendar_select_day (GtkCalendar *calendar,
-- guint day)
-+static void
-+gtk_calendar_do_select_day (GtkCalendar *calendar,
-+ guint day)
- {
- g_return_if_fail (GTK_IS_CALENDAR (calendar));
- g_return_if_fail (day <= 31);
-@@ -2499,6 +2502,13 @@
- if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
- gtk_calendar_paint_day_num (GTK_WIDGET (calendar), selected_day);
- }
-+}
-+
-+void
-+gtk_calendar_select_day (GtkCalendar *calendar,
-+ guint day)
-+{
-+ gtk_calendar_do_select_day (calendar, day);
-
- calendar->selected_day = day;
-
---- gtk+-2.4.1/gtk/gtkentry.c 2004-04-22 08:08:08.000000000 +1000
-+++ gtk+-2.4.1/gtk/gtkentry.c 2004-05-26 14:52:17.000000000 +1000
-@@ -557,6 +557,15 @@
- 0.0,
- G_PARAM_READABLE | G_PARAM_WRITABLE));
-
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_int ("min_width",
-+ _("Minimum width"),
-+ _("Minimum width of the entry field"),
-+ 0,
-+ G_MAXINT,
-+ MIN_ENTRY_WIDTH,
-+ G_PARAM_READABLE));
-+
- signals[POPULATE_POPUP] =
- g_signal_new ("populate_popup",
- G_OBJECT_CLASS_TYPE (gobject_class),
-@@ -1124,7 +1133,7 @@
- {
- GtkEntry *entry = GTK_ENTRY (widget);
- PangoFontMetrics *metrics;
-- gint xborder, yborder;
-+ gint xborder, yborder, min_width;
- PangoContext *context;
-
- gtk_widget_ensure_style (widget);
-@@ -1140,9 +1149,11 @@
-
- xborder += INNER_BORDER;
- yborder += INNER_BORDER;
--
-+
-+ gtk_widget_style_get (widget, "min_width", &min_width, NULL);
-+
- if (entry->width_chars < 0)
-- requisition->width = MIN_ENTRY_WIDTH + xborder * 2;
-+ requisition->width = min_width + xborder * 2;
- else
- {
- gint char_width = pango_font_metrics_get_approximate_char_width (metrics);
---- gtk+-2.4.1/gtk/gtkrange.c 2004-03-06 14:38:08.000000000 +1100
-+++ gtk+-2.4.1/gtk/gtkrange.c 2004-05-26 14:52:17.000000000 +1000
-@@ -180,6 +180,7 @@
- static GtkWidgetClass *parent_class = NULL;
- static guint signals[LAST_SIGNAL];
-
-+static GdkAtom recognize_protocols_atom, atom_atom;
-
- GType
- gtk_range_get_type (void)
-@@ -220,6 +221,9 @@
- object_class = (GtkObjectClass*) class;
- widget_class = (GtkWidgetClass*) class;
-
-+ recognize_protocols_atom = gdk_atom_intern ("RECOGNIZE_PROTOCOLS", FALSE);
-+ atom_atom = gdk_atom_intern ("ATOM", FALSE);
-+
- parent_class = g_type_class_peek_parent (class);
-
- gobject_class->set_property = gtk_range_set_property;
-@@ -815,6 +819,12 @@
- &attributes, attributes_mask);
- gdk_window_set_user_data (range->event_window, range);
-
-+ gdk_property_change (range->event_window,
-+ recognize_protocols_atom,
-+ atom_atom,
-+ 32, GDK_PROP_MODE_REPLACE,
-+ NULL, 0);
-+
- widget->style = gtk_style_attach (widget->style, widget->window);
- }
-
-@@ -1186,7 +1196,7 @@
-
- /* ignore presses when we're already doing something else. */
- if (range->layout->grab_location != MOUSE_OUTSIDE)
-- return FALSE;
-+ return TRUE;
-
- range->layout->mouse_x = event->x;
- range->layout->mouse_y = event->y;
-@@ -1364,7 +1374,7 @@
- return TRUE;
- }
-
-- return FALSE;
-+ return TRUE;
- }
-
- /**
diff --git a/packages/gtk+/gtk+-2.4.13/gtk-doc.m4 b/packages/gtk+/gtk+-2.4.13/gtk-doc.m4
deleted file mode 100644
index 3ec41666b2..0000000000
--- a/packages/gtk+/gtk+-2.4.13/gtk-doc.m4
+++ /dev/null
@@ -1,53 +0,0 @@
-dnl -*- mode: autoconf -*-
-
-# serial 1
-
-dnl Usage:
-dnl GTK_DOC_CHECK([minimum-gtk-doc-version])
-AC_DEFUN([GTK_DOC_CHECK],
-[
- AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
- AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
- dnl for overriding the documentation installation directory
- AC_ARG_WITH(html-dir,
- AC_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
- [with_html_dir='${datadir}/gtk-doc/html'])
- HTML_DIR="$with_html_dir"
- AC_SUBST(HTML_DIR)
-
- dnl enable/disable documentation building
- AC_ARG_ENABLE(gtk-doc,
- AC_HELP_STRING([--enable-gtk-doc],
- [use gtk-doc to build documentation [default=no]]),,
- enable_gtk_doc=no)
-
- have_gtk_doc=no
- if test -z "$PKG_CONFIG"; then
- AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
- fi
- if test "$PKG_CONFIG" != "no" && $PKG_CONFIG --exists gtk-doc; then
- have_gtk_doc=yes
- fi
-
- dnl do we want to do a version check?
-ifelse([$1],[],,
- [gtk_doc_min_version=$1
- if test "$have_gtk_doc" = yes; then
- AC_MSG_CHECKING([gtk-doc version >= $gtk_doc_min_version])
- if $PKG_CONFIG --atleast-version $gtk_doc_min_version gtk-doc; then
- AC_MSG_RESULT(yes)
- else
- AC_MSG_RESULT(no)
- have_gtk_doc=no
- fi
- fi
-])
- if test x$enable_gtk_doc = xyes; then
- if test "$have_gtk_doc" != yes; then
- enable_gtk_doc=no
- fi
- fi
-
- AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
- AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, test -n "$LIBTOOL")
-])
diff --git a/packages/gtk+/gtk+-2.4.13/hardcoded_libtool.patch b/packages/gtk+/gtk+-2.4.13/hardcoded_libtool.patch
deleted file mode 100644
index 9da8dd8cf1..0000000000
--- a/packages/gtk+/gtk+-2.4.13/hardcoded_libtool.patch
+++ /dev/null
@@ -1,29 +0,0 @@
---- gtk+-2.4.1/configure.in 2004-05-01 02:02:06.000000000 +1000
-+++ gtk+-2.4.1/configure.in 2004-06-03 13:26:41.000000000 +1000
-@@ -350,7 +350,7 @@
- AC_MSG_CHECKING([Whether to write dependencies into .pc files])
- case $enable_explicit_deps in
- auto)
-- deplib_check_method=`(./libtool --config; echo eval echo \\$deplib_check_method) | sh`
-+ deplib_check_method=`($host_alias-libtool --config; echo eval echo \\$deplib_check_method) | sh`
- if test "X$deplib_check_method" = Xnone || test "x$enable_static" = xyes ; then
- enable_explicit_deps=yes
- else
-@@ -669,7 +669,7 @@
- dnl Now we check to see if our libtool supports shared lib deps
- dnl (in a rather ugly way even)
- if $dynworks; then
-- pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} ./libtool --config"
-+ pixbuf_libtool_config="${CONFIG_SHELL-/bin/sh} $host_alias-libtool --config"
- pixbuf_deplibs_check=`$pixbuf_libtool_config | \
- grep '^[[a-z_]]*check[[a-z_]]*_method=[['\''"]]' | \
- sed 's/.*[['\''"]]\(.*\)[['\''"]]$/\1/'`
-@@ -1441,7 +1441,7 @@
- # export list from -export-symbols-regex is ignored and everything
- # is exported
- #
--export_dynamic=`(./libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
-+export_dynamic=`($host_alias-libtool --config; echo eval echo \\$export_dynamic_flag_spec) | sh`
- if test -n "$export_dynamic"; then
- GDK_PIXBUF_DEP_LIBS=`echo $GDK_PIXBUF_DEP_LIBS | sed -e "s/$export_dynamic//"`
- GDK_PIXBUF_XLIB_DEP_LIBS=`echo $GDK_PIXBUF_XLIB_DEP_LIBS | sed -e "s/$export_dynamic//"`
diff --git a/packages/gtk+/gtk+-2.4.13/menu-deactivate.patch b/packages/gtk+/gtk+-2.4.13/menu-deactivate.patch
deleted file mode 100644
index 29e665fbf3..0000000000
--- a/packages/gtk+/gtk+-2.4.13/menu-deactivate.patch
+++ /dev/null
@@ -1,50 +0,0 @@
---- gtk+-2.4.4/gtk/gtkmenushell.c.old Thu Aug 26 23:45:28 2004
-+++ gtk+-2.4.4/gtk/gtkmenushell.c Fri Aug 27 00:13:33 2004
-@@ -37,7 +37,7 @@
- #include "gtktearoffmenuitem.h"
- #include "gtkwindow.h"
-
--#define MENU_SHELL_TIMEOUT 500
-+#define MENU_SHELL_TIMEOUT 2000
-
- enum {
- DEACTIVATE,
-@@ -156,6 +156,7 @@
- static GtkContainerClass *parent_class = NULL;
- static guint menu_shell_signals[LAST_SIGNAL] = { 0 };
-
-+static int last_crossing_time;
-
- GType
- gtk_menu_shell_get_type (void)
-@@ -418,6 +419,7 @@
- gtk_grab_add (GTK_WIDGET (menu_shell));
- menu_shell->have_grab = TRUE;
- menu_shell->active = TRUE;
-+ last_crossing_time = 0;
- }
- }
-
-@@ -545,6 +547,13 @@
- menu_shell->activate_time = 0;
- deactivate = FALSE;
- }
-+
-+ if (last_crossing_time != 0
-+ && ((event->time - last_crossing_time) < 500))
-+ {
-+ last_crossing_time = 0;
-+ deactivate = FALSE;
-+ }
-
- if (deactivate)
- {
-@@ -597,6 +606,8 @@
- if (menu_shell->active)
- {
- menu_item = gtk_get_event_widget ((GdkEvent*) event);
-+
-+ last_crossing_time = event->time;
-
- if (!menu_item ||
- (GTK_IS_MENU_ITEM (menu_item) &&
diff --git a/packages/gtk+/gtk+-2.4.13/no-demos.patch b/packages/gtk+/gtk+-2.4.13/no-demos.patch
deleted file mode 100644
index 2f10a30dda..0000000000
--- a/packages/gtk+/gtk+-2.4.13/no-demos.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- gtk+-2.4.1/Makefile.am~ 2004-01-17 22:15:56.000000000 +0000
-+++ gtk+-2.4.1/Makefile.am 2004-05-08 12:25:32.000000000 +0100
-@@ -1,6 +1,6 @@
- ## Makefile.am for GTK+
-
--SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests contrib
-+SRC_SUBDIRS = gdk-pixbuf gdk gtk modules tests contrib
- SUBDIRS = po po-properties $(SRC_SUBDIRS) docs build m4macros
-
- # require automake 1.4
diff --git a/packages/gtk+/gtk+-2.4.13/no-xwc.patch b/packages/gtk+/gtk+-2.4.13/no-xwc.patch
deleted file mode 100644
index e1ee5cb5c8..0000000000
--- a/packages/gtk+/gtk+-2.4.13/no-xwc.patch
+++ /dev/null
@@ -1,148 +0,0 @@
---- gdk/x11/gdkdrawable-x11.c~ 2003-08-18 17:02:39.000000000 +0100
-+++ gdk/x11/gdkdrawable-x11.c 2004-03-29 21:30:17.000000000 +0100
-@@ -636,12 +636,14 @@
- GDK_GC_GET_XGC (gc), x, y, (XChar2b *) text, text_length / 2);
- }
- }
-+#ifdef HAVE_XWC
- else if (font->type == GDK_FONT_FONTSET)
- {
- XFontSet fontset = (XFontSet) GDK_FONT_XFONT (font);
- XmbDrawString (xdisplay, impl->xid,
- fontset, GDK_GC_GET_XGC (gc), x, y, text, text_length);
- }
-+#endif
- else
- g_error("undefined font type\n");
- }
-@@ -673,6 +675,7 @@
- GDK_GC_GET_XGC (gc), x, y, text_8bit, text_length);
- g_free (text_8bit);
- }
-+#ifdef HAVE_XWC
- else if (font->type == GDK_FONT_FONTSET)
- {
- if (sizeof(GdkWChar) == sizeof(wchar_t))
-@@ -693,7 +696,8 @@
- g_free (text_wchar);
- }
- }
-+#endif
- else
- g_error("undefined font type\n");
- }
-
---- gdk/x11/gdkim-x11.c~ 2002-11-01 00:45:32.000000000 +0000
-+++ gdk/x11/gdkim-x11.c 2004-03-29 21:28:30.000000000 +0100
-@@ -51,6 +51,7 @@
- void
- _gdk_x11_initialize_locale (void)
- {
-+#ifdef HAVE_XWC
- wchar_t result;
- gchar *current_locale;
- static char *last_locale = NULL;
-@@ -96,6 +97,7 @@
- GDK_NOTE (XIM,
- g_message ("%s multi-byte string functions.",
- gdk_use_mb ? "Using" : "Not using"));
-+#endif
-
- return;
- }
-@@ -139,6 +141,7 @@
- {
- gchar *mbstr;
-
-+#ifdef HAVE_XWC
- if (gdk_use_mb)
- {
- GdkDisplay *display = find_a_display ();
-@@ -177,6 +180,7 @@
- XFree (tpr.value);
- }
- else
-+#endif
- {
- gint length = 0;
- gint i;
-@@ -209,6 +213,7 @@
- gint
- gdk_mbstowcs (GdkWChar *dest, const gchar *src, gint dest_max)
- {
-+#ifdef HAVE_XWC
- if (gdk_use_mb)
- {
- GdkDisplay *display = find_a_display ();
-@@ -241,7 +246,8 @@
- return len_cpy;
- }
- else
-+#endif
- {
- gint i;
-
-
---- gdk/x11/gdkfont-x11.c~ 2003-03-06 20:17:55.000000000 +0000
-+++ gdk/x11/gdkfont-x11.c 2004-03-29 21:29:40.000000000 +0100
-@@ -594,10 +594,12 @@
- width = XTextWidth16 (xfont, (XChar2b *) text, text_length / 2);
- }
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- width = XmbTextEscapement (fontset, text, text_length);
- break;
-+#endif
- default:
- width = 0;
- }
-@@ -647,6 +649,7 @@
- width = 0;
- }
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- if (sizeof(GdkWChar) == sizeof(wchar_t))
- {
-@@ -664,6 +667,7 @@
- g_free (text_wchar);
- }
- break;
-+#endif
- default:
- width = 0;
- }
-@@ -736,6 +740,7 @@
- if (descent)
- *descent = overall.descent;
- break;
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- XmbTextExtents (fontset, text, text_length, &ink, &logical);
-@@ -750,6 +755,7 @@
- if (descent)
- *descent = ink.y + ink.height;
- break;
-+#endif
- }
-
- }
-@@ -822,6 +828,7 @@
- *descent = overall.descent;
- break;
- }
-+#ifdef HAVE_XWC
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
-
-@@ -849,6 +856,7 @@
- if (descent)
- *descent = ink.y + ink.height;
- break;
-+#endif
- }
-
- }
diff --git a/packages/gtk+/gtk+-2.4.13/scroll-timings.patch b/packages/gtk+/gtk+-2.4.13/scroll-timings.patch
deleted file mode 100644
index a38b21dcc2..0000000000
--- a/packages/gtk+/gtk+-2.4.13/scroll-timings.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- gtk+-2.4.4/gtk/gtkrange.c~ 2004-08-23 01:50:22.000000000 +0100
-+++ gtk+-2.4.4/gtk/gtkrange.c 2004-08-27 15:48:49.000000000 +0100
-@@ -35,9 +35,9 @@
- #include "gtkintl.h"
- #include "gtkscrollbar.h"
-
--#define SCROLL_INITIAL_DELAY 250 /* must hold button this long before ... */
--#define SCROLL_LATER_DELAY 100 /* ... it starts repeating at this rate */
--#define UPDATE_DELAY 300 /* Delay for queued update */
-+#define SCROLL_INITIAL_DELAY 500 /* must hold button this long before ... */
-+#define SCROLL_LATER_DELAY 200 /* ... it starts repeating at this rate */
-+#define UPDATE_DELAY 1000 /* Delay for queued update */
-
- enum {
- PROP_0,
diff --git a/packages/gtk+/gtk+-2.4.13/single-click.patch b/packages/gtk+/gtk+-2.4.13/single-click.patch
deleted file mode 100644
index 21adb9b7b0..0000000000
--- a/packages/gtk+/gtk+-2.4.13/single-click.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-diff -urNd ../gtk+-2.4.4-r7/gtk+-2.4.4/gtk/gtkcalendar.c gtk+-2.4.4/gtk/gtkcalendar.c
---- ../gtk+-2.4.4-r7/gtk+-2.4.4/gtk/gtkcalendar.c 2004-07-10 05:02:10.000000000 +0100
-+++ gtk+-2.4.4/gtk/gtkcalendar.c 2004-09-18 12:41:28.000000000 +0100
-@@ -1026,9 +1026,8 @@
- private_data->drag_start_y = y;
-
- gtk_calendar_select_and_focus_day (calendar, day);
-- }
-- else if (event->type == GDK_2BUTTON_PRESS)
-- {
-+
-+ // Double-click action follows
- private_data->in_drag = 0;
- if (day_month == MONTH_CURRENT)
- g_signal_emit (calendar,
-diff -urNd ../gtk+-2.4.4-r7/gtk+-2.4.4/gtk/gtktreeview.c gtk+-2.4.4/gtk/gtktreeview.c
---- ../gtk+-2.4.4-r7/gtk+-2.4.4/gtk/gtktreeview.c 2004-07-10 05:02:11.000000000 +0100
-+++ gtk+-2.4.4/gtk/gtktreeview.c 2004-09-18 13:49:23.000000000 +0100
-@@ -2180,7 +2180,8 @@
- tree_view->priv->focus_column = column;
-
- /* decide if we edit */
-- if (event->type == GDK_BUTTON_PRESS && event->button == 1 &&
-+ /* Changed from button 1 to 2 so as not to conflict with the single-click activation */
-+ if (event->type == GDK_BUTTON_PRESS && event->button == 2 &&
- !(event->state & gtk_accelerator_get_default_mod_mask ()))
- {
- GtkTreePath *anchor;
-@@ -2305,16 +2306,13 @@
- /* Test if a double click happened on the same row. */
- if (event->button == 1)
- {
-- /* We also handle triple clicks here, because a user could have done
-- * a first click and a second double click on different rows.
-+ /* Replaced double/triple click with single-click for PDAs.
- */
-- if ((event->type == GDK_2BUTTON_PRESS
-- || event->type == GDK_3BUTTON_PRESS)
-- && tree_view->priv->last_button_press)
-+ if (event->type == GDK_BUTTON_PRESS)
- {
- GtkTreePath *lsc;
-
-- lsc = gtk_tree_row_reference_get_path (tree_view->priv->last_button_press);
-+ lsc = gtk_tree_row_reference_get_path (tree_view->priv->cursor);
-
- if (lsc)
- {
diff --git a/packages/gtk+/gtk+-2.4.13/small-gtkfilesel.patch b/packages/gtk+/gtk+-2.4.13/small-gtkfilesel.patch
deleted file mode 100644
index 20bf4cf366..0000000000
--- a/packages/gtk+/gtk+-2.4.13/small-gtkfilesel.patch
+++ /dev/null
@@ -1,267 +0,0 @@
-diff -urNd ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c gtk+-2.4.4/gtk/gtkfilesel.c
---- ../gtk+-2.4.4-r5/gtk+-2.4.4/gtk/gtkfilesel.c 2004-07-10 05:02:10.000000000 +0100
-+++ gtk+-2.4.4/gtk/gtkfilesel.c 2004-09-13 13:40:09.000000000 +0100
-@@ -68,6 +68,7 @@
- #include "gtkprivate.h"
- #include "gtkscrolledwindow.h"
- #include "gtkstock.h"
-+#include "gtksignal.h"
- #include "gtktreeselection.h"
- #include "gtktreeview.h"
- #include "gtkvbox.h"
-@@ -77,6 +78,7 @@
- #include "gtkmessagedialog.h"
- #include "gtkdnd.h"
- #include "gtkeventbox.h"
-+#include "gtkimage.h"
-
- #undef GTK_DISABLE_DEPRECATED
- #include "gtkoptionmenu.h"
-@@ -245,7 +247,8 @@
- };
-
- enum {
-- DIR_COLUMN
-+ DIR_COLUMN,
-+ ISFILE_COLUMN
- };
-
- enum {
-@@ -400,6 +403,12 @@
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- gpointer user_data);
-+
-+static void gtk_file_selection_activate (GtkTreeView *tree_view,
-+ GtkTreePath *path,
-+ GtkTreeViewColumn *column,
-+ gpointer user_data);
-+
- static void gtk_file_selection_file_changed (GtkTreeSelection *selection,
- gpointer user_data);
- static void gtk_file_selection_dir_activate (GtkTreeView *tree_view,
-@@ -419,6 +428,7 @@
- static void gtk_file_selection_create_dir (GtkWidget *widget, gpointer data);
- static void gtk_file_selection_delete_file (GtkWidget *widget, gpointer data);
- static void gtk_file_selection_rename_file (GtkWidget *widget, gpointer data);
-+static void gtk_file_selection_style_set (GtkWidget *widget, GtkStyle *prev_style);
-
- static void free_selected_names (GPtrArray *names);
-
-@@ -578,6 +588,23 @@
- G_PARAM_WRITABLE));
- object_class->destroy = gtk_file_selection_destroy;
- widget_class->map = gtk_file_selection_map;
-+ widget_class->style_set = gtk_file_selection_style_set;
-+
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_boolean ("show_fileops_default",
-+ _("Show fileop buttons by default"),
-+ _("Whether file operation buttons are shown by default"),
-+ TRUE,
-+ G_PARAM_READABLE));
-+
-+ gtk_widget_class_install_style_property (widget_class,
-+ g_param_spec_int ("border_width",
-+ _("Border width"),
-+ _("Width of border around the main dialog area"),
-+ 0,
-+ G_MAXINT,
-+ 10,
-+ G_PARAM_READABLE));
- }
-
- static void gtk_file_selection_set_property (GObject *object,
-@@ -649,7 +676,29 @@
- gtk_widget_grab_default (widget);
- return FALSE;
- }
--
-+
-+static void
-+gtk_file_selection_style_set (GtkWidget *filesel,
-+ GtkStyle *prev_style)
-+{
-+ gboolean show_fileops;
-+ gint border_width;
-+
-+ gtk_widget_style_get (filesel,
-+ "show_fileops_default",
-+ &show_fileops,
-+ "border_width",
-+ &border_width,
-+ NULL);
-+
-+ gtk_container_set_border_width (GTK_CONTAINER (filesel), border_width);
-+
-+ if (show_fileops)
-+ gtk_file_selection_show_fileop_buttons (GTK_FILE_SELECTION (filesel));
-+ else
-+ gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (filesel));
-+}
-+
- static void
- gtk_file_selection_init (GtkFileSelection *filesel)
- {
-@@ -674,17 +723,15 @@
-
- /* The dialog-sized vertical box */
- filesel->main_vbox = dialog->vbox;
-- gtk_container_set_border_width (GTK_CONTAINER (filesel), 10);
-
- /* The horizontal box containing create, rename etc. buttons */
- filesel->button_area = gtk_hbutton_box_new ();
- gtk_button_box_set_layout (GTK_BUTTON_BOX (filesel->button_area), GTK_BUTTONBOX_START);
-- gtk_box_set_spacing (GTK_BOX (filesel->button_area), 0);
- gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->button_area,
- FALSE, FALSE, 0);
- gtk_widget_show (filesel->button_area);
-
-- gtk_file_selection_show_fileop_buttons (filesel);
-+ gtk_file_selection_style_set (GTK_WIDGET (filesel), NULL);
-
- /* hbox for pulldown menu */
- pulldown_hbox = gtk_hbox_new (TRUE, 5);
-@@ -723,25 +770,32 @@
-
- /* The directories list */
-
-- model = gtk_list_store_new (1, G_TYPE_STRING);
-+ model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN); /* MA */
- filesel->dir_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
- g_object_unref (model);
-
-- column = gtk_tree_view_column_new_with_attributes (_("Folders"),
-+ column = gtk_tree_view_column_new_with_attributes (/*_("Folders")*/ NULL,
- gtk_cell_renderer_text_new (),
- "text", DIR_COLUMN,
- NULL);
- label = gtk_label_new_with_mnemonic (_("Fol_ders"));
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->dir_list);
- gtk_widget_show (label);
-- gtk_tree_view_column_set_widget (column, label);
-+
-+ /* gtk_tree_view_column_set_widget (column, label); */
-+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (filesel->dir_list), FALSE);
-+
- gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
- gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->dir_list), column);
-
- gtk_widget_set_size_request (filesel->dir_list,
- DIR_LIST_WIDTH, DIR_LIST_HEIGHT);
- g_signal_connect (filesel->dir_list, "row_activated",
-- G_CALLBACK (gtk_file_selection_dir_activate), filesel);
-+ G_CALLBACK (gtk_file_selection_activate), filesel);
-+
-+ g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->dir_list)), "changed",
-+ G_CALLBACK (gtk_file_selection_file_changed), filesel);
-+
-
- /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->dir_list)); */
-
-@@ -758,41 +812,6 @@
- gtk_widget_show (filesel->dir_list);
- gtk_widget_show (scrolled_win);
-
-- /* The files list */
-- model = gtk_list_store_new (1, G_TYPE_STRING);
-- filesel->file_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
-- g_object_unref (model);
--
-- column = gtk_tree_view_column_new_with_attributes (_("Files"),
-- gtk_cell_renderer_text_new (),
-- "text", FILE_COLUMN,
-- NULL);
-- label = gtk_label_new_with_mnemonic (_("_Files"));
-- gtk_label_set_mnemonic_widget (GTK_LABEL (label), filesel->file_list);
-- gtk_widget_show (label);
-- gtk_tree_view_column_set_widget (column, label);
-- gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
-- gtk_tree_view_append_column (GTK_TREE_VIEW (filesel->file_list), column);
--
-- gtk_widget_set_size_request (filesel->file_list,
-- FILE_LIST_WIDTH, FILE_LIST_HEIGHT);
-- g_signal_connect (filesel->file_list, "row_activated",
-- G_CALLBACK (gtk_file_selection_file_activate), filesel);
-- g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (filesel->file_list)), "changed",
-- G_CALLBACK (gtk_file_selection_file_changed), filesel);
--
-- /* gtk_clist_column_titles_passive (GTK_CLIST (filesel->file_list)); */
--
-- scrolled_win = gtk_scrolled_window_new (NULL, NULL);
-- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_win), GTK_SHADOW_IN);
-- gtk_container_add (GTK_CONTAINER (scrolled_win), filesel->file_list);
-- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
-- GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
-- gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 0);
-- gtk_container_add (GTK_CONTAINER (list_container), scrolled_win);
-- gtk_widget_show (filesel->file_list);
-- gtk_widget_show (scrolled_win);
--
- /* action area for packing buttons into. */
- filesel->action_area = gtk_hbox_new (TRUE, 0);
- gtk_box_pack_start (GTK_BOX (filesel->main_vbox), filesel->action_area,
-@@ -2008,6 +2027,23 @@
- }
-
- static void
-+gtk_file_selection_activate (GtkTreeView *tree_view,
-+ GtkTreePath *path,
-+ GtkTreeViewColumn *column,
-+ gpointer user_data)
-+{
-+ GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
-+ GtkTreeIter iter;
-+ gboolean is_file;
-+
-+ gtk_tree_model_get_iter (model, &iter, path);
-+ gtk_tree_model_get (model, &iter, ISFILE_COLUMN, &is_file, -1);
-+
-+ if (! is_file)
-+ gtk_file_selection_dir_activate (tree_view, path, column, user_data);
-+}
-+
-+static void
- gtk_file_selection_file_activate (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
-@@ -2103,7 +2139,6 @@
- PossibleCompletion* poss;
- GtkTreeIter iter;
- GtkListStore *dir_model;
-- GtkListStore *file_model;
- gchar* filename;
- gchar* rem_path = rel_path;
- gchar* sel_text;
-@@ -2125,10 +2160,8 @@
- g_assert (cmpl_state->reference_dir);
-
- dir_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->dir_list)));
-- file_model = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (fs->file_list)));
-
- gtk_list_store_clear (dir_model);
-- gtk_list_store_clear (file_model);
-
- /* Set the dir list to include ./ and ../ */
- gtk_list_store_append (dir_model, &iter);
-@@ -2150,13 +2183,17 @@
- strcmp (filename, ".." G_DIR_SEPARATOR_S) != 0)
- {
- gtk_list_store_append (dir_model, &iter);
-- gtk_list_store_set (dir_model, &iter, DIR_COLUMN, filename, -1);
-+ gtk_list_store_set (dir_model, &iter,
-+ DIR_COLUMN, filename,
-+ ISFILE_COLUMN, FALSE, -1);
- }
- }
- else
- {
-- gtk_list_store_append (file_model, &iter);
-- gtk_list_store_set (file_model, &iter, DIR_COLUMN, filename, -1);
-+ gtk_list_store_append (dir_model, &iter);
-+ gtk_list_store_set (dir_model, &iter,
-+ DIR_COLUMN, filename,
-+ ISFILE_COLUMN, TRUE, -1);
- }
- }
-
diff --git a/packages/gtk+/gtk+-2.4.13/spinbutton.patch b/packages/gtk+/gtk+-2.4.13/spinbutton.patch
deleted file mode 100644
index 8ad7507af0..0000000000
--- a/packages/gtk+/gtk+-2.4.13/spinbutton.patch
+++ /dev/null
@@ -1,128 +0,0 @@
---- gtk+-2.4.3/gtk/gtkspinbutton.c.old 2004-04-22 14:49:27.000000000 +0100
-+++ gtk+-2.4.3/gtk/gtkspinbutton.c 2004-06-30 21:48:18.000000000 +0100
-@@ -733,7 +733,7 @@
-
- spin = GTK_SPIN_BUTTON (widget);
- arrow_size = spin_button_get_arrow_size (spin);
-- panel_width = arrow_size + 2 * widget->style->xthickness;
-+ panel_width = (2 * arrow_size) + 4 * widget->style->xthickness;
-
- widget->allocation = *allocation;
-
-@@ -866,19 +866,16 @@
- {
- width = spin_button_get_arrow_size (spin_button) + 2 * widget->style->xthickness;
-
-+ y = widget->style->ythickness;
-+ height = widget->requisition.height - (2 * y);
-+
- if (arrow_type == GTK_ARROW_UP)
- {
- x = 0;
-- y = 0;
--
-- height = widget->requisition.height / 2;
- }
- else
- {
-- x = 0;
-- y = widget->requisition.height / 2;
--
-- height = (widget->requisition.height + 1) / 2;
-+ x = width;
- }
-
- if (spin_button_at_limit (spin_button, arrow_type))
-@@ -908,32 +905,17 @@
- shadow_type = GTK_SHADOW_OUT;
- }
- }
--
-+
- gtk_paint_box (widget->style, spin_button->panel,
- state_type, shadow_type,
- NULL, widget,
-- (arrow_type == GTK_ARROW_UP)? "spinbutton_up" : "spinbutton_down",
-+ NULL,
- x, y, width, height);
-
- height = widget->requisition.height;
-
-- if (arrow_type == GTK_ARROW_DOWN)
-- {
-- y = height / 2;
-- height = height - y - 2;
-- }
-- else
-- {
-- y = 2;
-- height = height / 2 - 2;
-- }
--
- width -= 3;
--
-- if (widget && gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
-- x = 2;
-- else
-- x = 1;
-+ height -= 3;
-
- w = width / 2;
- w -= w % 2 - 1; /* force odd */
-@@ -1108,7 +1090,7 @@
- if (GTK_ENTRY (widget)->editable)
- gtk_spin_button_update (spin);
-
-- if (event->y <= widget->requisition.height / 2)
-+ if (event->x <= (spin_button_get_arrow_size (spin) + widget->style->xthickness))
- {
- if (event->button == 1)
- start_spinning (spin, GTK_ARROW_UP, spin->adjustment->step_increment);
-@@ -1143,44 +1125,11 @@
-
- arrow_size = spin_button_get_arrow_size (spin);
-
-- if (event->button == spin->button)
-- {
-- int click_child = spin->click_child;
-+ gtk_spin_button_stop_spinning (spin);
-
-- gtk_spin_button_stop_spinning (spin);
--
-- if (event->button == 3)
-- {
-- if (event->y >= 0 && event->x >= 0 &&
-- event->y <= widget->requisition.height &&
-- event->x <= arrow_size + 2 * widget->style->xthickness)
-- {
-- if (click_child == GTK_ARROW_UP &&
-- event->y <= widget->requisition.height / 2)
-- {
-- gdouble diff;
--
-- diff = spin->adjustment->upper - spin->adjustment->value;
-- if (diff > EPSILON)
-- gtk_spin_button_real_spin (spin, diff);
-- }
-- else if (click_child == GTK_ARROW_DOWN &&
-- event->y > widget->requisition.height / 2)
-- {
-- gdouble diff;
--
-- diff = spin->adjustment->value - spin->adjustment->lower;
-- if (diff > EPSILON)
-- gtk_spin_button_real_spin (spin, -diff);
-- }
-- }
-- }
-- spin_button_redraw (spin);
-+ spin_button_redraw (spin);
-
-- return TRUE;
-- }
-- else
-- return GTK_WIDGET_CLASS (parent_class)->button_release_event (widget, event);
-+ return TRUE;
- }
-
- static gint
diff --git a/packages/gtk+/gtk+.inc b/packages/gtk+/gtk+.inc
index 14b5026cc6..1a8236aa34 100644
--- a/packages/gtk+/gtk+.inc
+++ b/packages/gtk+/gtk+.inc
@@ -4,7 +4,7 @@ HOMEPAGE = "http://www.gtk.org"
SECTION = "libs"
LICENSE = "LGPL"
PRIORITY = "optional"
-DEPENDS = "glib-2.0 tiff pango atk jpeg libpng libxext libxcursor gtk-doc libgcrypt"
+DEPENDS = "glib-2.0 tiff pango atk jpeg libpng libxext libxcursor gtk-doc libgcrypt cups"
inherit autotools pkgconfig
diff --git a/packages/gtk+/gtk+_2.10.14.bb b/packages/gtk+/gtk+_2.10.14.bb
index 3efe492d34..d8ae8ae9ba 100644
--- a/packages/gtk+/gtk+_2.10.14.bb
+++ b/packages/gtk+/gtk+_2.10.14.bb
@@ -1,6 +1,6 @@
require gtk-2.10.inc
-PR = "r7"
+PR = "r8"
SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \
file://no-xwc.patch;patch=1 \
@@ -11,6 +11,7 @@ SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-${PV}.tar.bz2 \
file://xsettings.patch;patch=1 \
file://scroll-timings.patch;patch=1 \
file://small-gtkfilesel.patch;patch=1 \
+ file://small-gtkfilechooser.patch;patch=1 \
file://migration.patch;patch=1;pnum=0 \
file://run-iconcache.patch;patch=1 \
file://hardcoded_libtool.patch;patch=1 \
diff --git a/packages/gtk+/gtk+_2.12.3.bb b/packages/gtk+/gtk+_2.12.3.bb
new file mode 100644
index 0000000000..689071d776
--- /dev/null
+++ b/packages/gtk+/gtk+_2.12.3.bb
@@ -0,0 +1,48 @@
+require gtk+.inc
+
+PR = "r0"
+
+DEPENDS += "cairo"
+
+# disable per default - untested and not all patches included.
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "http://download.gnome.org/sources/gtk+/2.12/gtk+-${PV}.tar.bz2 \
+ file://xsettings.patch;patch=1 \
+ file://run-iconcache.patch;patch=1 \
+ file://hardcoded_libtool.patch;patch=1 \
+ file://no-demos.patch;patch=1 \
+ file://cellrenderer-cairo.patch;patch=1;pnum=0 \
+ file://entry-cairo.patch;patch=1;pnum=0 \
+ file://toggle-font.diff;patch=1;pnum=0 \
+ file://scrolled-placement.patch;patch=1;pnum=0"
+# temporary
+# file://gtklabel-resize-patch;patch=1 \
+# file://menu-deactivate.patch;patch=1 \
+# file://combo-arrow-size.patch;patch=1;pnum=0 \
+# die die die
+# file://pangoxft2.10.6.diff;patch=1"
+
+EXTRA_OECONF = "--with-libtiff --disable-xkb --disable-glibtest --enable-display-migration"
+
+LIBV = "2.10.0"
+
+PACKAGES_DYNAMIC = "gdk-pixbuf-loader-* gtk-immodule-* gtk-printbackend-*"
+
+python populate_packages_prepend () {
+ import os.path
+
+ prologue = bb.data.getVar("postinst_prologue", d, 1)
+
+ gtk_libdir = bb.data.expand('${libdir}/gtk-2.0/${LIBV}', d)
+ loaders_root = os.path.join(gtk_libdir, 'loaders')
+ immodules_root = os.path.join(gtk_libdir, 'immodules')
+ printmodules_root = os.path.join(gtk_libdir, 'printbackends');
+
+ do_split_packages(d, loaders_root, '^libpixbufloader-(.*)\.so$', 'gdk-pixbuf-loader-%s', 'GDK pixbuf loader for %s', prologue + 'gdk-pixbuf-query-loaders > /etc/gtk-2.0/gdk-pixbuf.loaders')
+ do_split_packages(d, immodules_root, '^im-(.*)\.so$', 'gtk-immodule-%s', 'GTK input module for %s', prologue + 'gtk-query-immodules-2.0 > /etc/gtk-2.0/gtk.immodules')
+ do_split_packages(d, printmodules_root, '^libprintbackend-(.*)\.so$', 'gtk-printbackend-%s', 'GTK printbackend module for %s')
+
+ if (bb.data.getVar('DEBIAN_NAMES', d, 1)):
+ bb.data.setVar('PKG_${PN}', 'libgtk-2.0', d)
+}
diff --git a/packages/gtk+/gtk+_2.2.4.bb b/packages/gtk+/gtk+_2.2.4.bb
deleted file mode 100644
index eb308edca2..0000000000
--- a/packages/gtk+/gtk+_2.2.4.bb
+++ /dev/null
@@ -1,77 +0,0 @@
-LICENSE = "LGPL"
-DESCRIPTION = "GTK+ is a multi-platform toolkit for creating graphical user interfaces. Offering a complete \
-set of widgets, GTK+ is suitable for projects ranging from small one-off projects to complete application suites."
-HOMEPAGE = "http://www.gtk.org"
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "pango atk jpeg libpng libxext"
-
-SRC_URI = "http://ftp.gnome.org/pub/gnome/sources/gtk+/2.2/gtk+-${PV}.tar.bz2 \
- http://handhelds.org/packages/gtk-2.0/gtk+-2.2.4.diff.bz2;patch=1;pnum=1 \
- file://automake-lossage.patch;patch=1;pnum=0 \
- file://configure-lossage.patch;patch=1;pnum=0 \
- file://no-demos.patch;patch=1 \
- file://libtool-lossage.patch;patch=1;pnum=0 \
- file://no-xwc.patch;patch=1;pnum=0 \
- file://glib-2.0.m4 \
- file://glib-gettext.m4"
-
-inherit autotools pkgconfig
-
-do_configure_prepend() {
- install -d m4
- install ${WORKDIR}/glib-2.0.m4 m4/
- install ${WORKDIR}/glib-gettext.m4 m4/
-}
-
-EXTRA_OECONF = "--without-libtiff --enable-debug=no --disable-cruft"
-
-LIBV = "2.2.0"
-
-gtk_include = "gtk.h gtkaccelgroup.h gtkaccellabel.h gtkaccelmap.h gtkaccessible.h gtkadjustment.h gtkalignment.h gtkarrow.h gtkaspectframe.h gtkbbox.h gtkbin.h gtkbindings.h gtkbox.h gtkbutton.h gtkcalendar.h gtkcelleditable.h gtkcellrenderer.h gtkcellrendererpixbuf.h gtkcellrenderertext.h gtkcellrenderertoggle.h gtkcheckbutton.h gtkcheckmenuitem.h gtkclipboard.h gtkclist.h gtkcolorsel.h gtkcolorseldialog.h gtkcombo.h gtkcontainer.h gtkctree.h gtkcurve.h gtkdebug.h gtkdialog.h gtkdnd.h gtkdrawingarea.h gtkeditable.h gtkentry.h gtkenums.h gtkeventbox.h gtkfilesel.h gtkfixed.h gtkfontsel.h gtkframe.h gtkgamma.h gtkgc.h gtkhandlebox.h gtkhbbox.h gtkhbox.h gtkhpaned.h gtkhruler.h gtkhscale.h gtkhscrollbar.h gtkhseparator.h gtkiconfactory.h gtkimage.h gtkimagemenuitem.h gtkimcontext.h gtkimcontextsimple.h gtkimmodule.h gtkimmulticontext.h gtkinputdialog.h gtkinvisible.h gtkitem.h gtkitemfactory.h gtklabel.h gtklayout.h gtklist.h gtklistitem.h gtkliststore.h gtkmain.h gtkmarshal.h gtkmenu.h gtkmenubar.h gtkmenuitem.h gtkmenushell.h gtkmessagedialog.h gtkmisc.h gtknotebook.h gtkobject.h gtkoldeditable.h gtkoptionmenu.h gtkpaned.h gtkpixmap.h gtkplug.h gtkpreview.h gtkprivate.h gtkprogress.h gtkprogressbar.h gtkradiobutton.h gtkradiomenuitem.h gtkrange.h gtkrc.h gtkruler.h gtkscale.h gtkscrollbar.h gtkscrolledwindow.h gtkselection.h gtkseparator.h gtkseparatormenuitem.h gtksettings.h gtksignal.h gtksizegroup.h gtksocket.h gtkspinbutton.h gtkstatusbar.h gtkstock.h gtkstyle.h gtktable.h gtktearoffmenuitem.h gtktext.h gtktextbuffer.h gtktextchild.h gtktextdisplay.h gtktextiter.h gtktextlayout.h gtktextmark.h gtktexttag.h gtktexttagtable.h gtktextview.h gtktipsquery.h gtktogglebutton.h gtktoolbar.h gtktooltips.h gtktree.h gtktreednd.h gtktreeitem.h gtktreemodel.h gtktreemodelsort.h gtktreeselection.h gtktreesortable.h gtktreestore.h gtktreeview.h gtktreeviewcolumn.h gtktypebuiltins.h gtktypeutils.h gtkvbbox.h gtkvbox.h gtkversion.h gtkviewport.h gtkvpaned.h gtkvruler.h gtkvscale.h gtkvscrollbar.h gtkvseparator.h gtkwidget.h gtkwindow.h"
-gdk_include = "gdk.h gdkcolor.h gdkcursor.h gdkdisplay.h gdkdisplaymanager.h gdkdnd.h gdkdrawable.h gdkenumtypes.h gdkevents.h gdkfont.h gdkgc.h gdki18n.h gdkimage.h gdkinput.h gdkkeys.h gdkkeysyms.h gdkpango.h gdkpixbuf.h gdkpixmap.h gdkprivate.h gdkproperty.h gdkregion.h gdkrgb.h gdkscreen.h gdkselection.h gdktypes.h gdkvisual.h gdkwindow.h x11/gdkx.h"
-gdk_pixbuf_include = "gdk-pixbuf-animation.h gdk-pixbuf-enum-types.h gdk-pixbuf-features.h gdk-pixbuf-io.h gdk-pixbuf-loader.h gdk-pixbuf-marshal.h gdk-pixbuf.h gdk-pixdata.h"
-
-do_stage () {
- oe_libinstall -so -C gtk libgtk-x11-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C gdk libgdk-x11-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C contrib/gdk-pixbuf-xlib libgdk_pixbuf_xlib-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C gdk-pixbuf libgdk_pixbuf-2.0 ${STAGING_LIBDIR}
-
- mkdir -p ${STAGING_INCDIR}/gtk-2.0/gtk
- for i in ${gtk_include}; do
- install -m 0644 gtk/$i ${STAGING_INCDIR}/gtk-2.0/gtk/$i
- done
-
- mkdir -p ${STAGING_INCDIR}/gtk-2.0/gdk
- for i in ${gdk_include}; do
- install -m 0644 gdk/$i ${STAGING_INCDIR}/gtk-2.0/gdk/`basename $i`
- done
-
- mkdir -p ${STAGING_INCDIR}/gtk-2.0/gdk-pixbuf
- for i in ${gdk_pixbuf_include}; do
- install -m 0644 gdk-pixbuf/$i ${STAGING_INCDIR}/gtk-2.0/gdk-pixbuf/$i
- done
-
- mkdir -p ${STAGING_LIBDIR}/gtk-2.0/include
- install -m 0644 gdk/gdkconfig.h ${STAGING_LIBDIR}/gtk-2.0/include/gdkconfig.h
-
- install -m 0644 m4macros/gtk-2.0.m4 ${STAGING_DATADIR}/aclocal/
-}
-
-do_install_append () {
- install -d ${D}${sysconfdir}/gtk-2.0
-}
-
-PACKAGES_DYNAMIC = "gdk-pixbuf-loader-* gtk-immodule-*"
-
-python populate_packages_prepend () {
- import os.path
-
- gtk_libdir = bb.data.expand('${libdir}/gtk-2.0/${LIBV}', d)
- loaders_root = os.path.join(gtk_libdir, 'loaders')
- immodules_root = os.path.join(gtk_libdir, 'immodules')
-
- do_split_packages(d, loaders_root, '^libpixbufloader-(.*)\.so$', 'gdk-pixbuf-loader-%s', 'GDK pixbuf loader for %s', 'gdk-pixbuf-query-loaders > /etc/gtk-2.0/gdk-pixbuf.loaders')
- do_split_packages(d, immodules_root, '^im-(.*)\.so$', 'gtk-immodule-%s', 'GTK input module for %s', 'gtk-query-immodules > /etc/gtk-2.0/gtk.immodules')
-}
diff --git a/packages/gtk+/gtk+_2.4.13.bb b/packages/gtk+/gtk+_2.4.13.bb
deleted file mode 100644
index 83f6be1982..0000000000
--- a/packages/gtk+/gtk+_2.4.13.bb
+++ /dev/null
@@ -1,78 +0,0 @@
-LICENSE = "LGPL"
-DESCRIPTION = "GTK+ is a multi-platform toolkit for creating graphical user interfaces. Offering a complete \
-set of widgets, GTK+ is suitable for projects ranging from small one-off projects to complete application suites."
-HOMEPAGE = "http://www.gtk.org"
-SECTION = "libs"
-PRIORITY = "optional"
-DEPENDS = "glib-2.0 pango atk jpeg libpng libxext libxcursor"
-PR = "r7"
-
-SRC_URI = "ftp://ftp.gtk.org/pub/gtk/v2.4/gtk+-${PV}.tar.bz2 \
- file://no-demos.patch;patch=1 \
- file://no-xwc.patch;patch=1;pnum=0 \
- file://automake-lossage.patch;patch=1 \
- file://gtk+-handhelds.patch;patch=1 \
- file://hardcoded_libtool.patch;patch=1 \
- file://spinbutton.patch;patch=1 \
- file://disable-tooltips.patch;patch=1 \
- file://gtklabel-resize-patch;patch=1 \
- file://menu-deactivate.patch;patch=1 \
- file://xsettings.patch;patch=1 \
- file://scroll-timings.patch;patch=1 \
- file://gtk-doc.m4 \
- file://small-gtkfilesel.patch;patch=1 \
- file://single-click.patch;patch=1"
-
-inherit autotools pkgconfig flow-lossage
-
-do_configure_prepend() {
- install -d m4
- install ${WORKDIR}/gtk-doc.m4 m4/
-}
-
-FILES_${PN} = "${bindir}/gdk-pixbuf-query-loaders \
- ${bindir}/gtk-query-immodules-2.0 \
- ${libdir}/lib*.so.* \
- ${datadir}/themes ${sysconfdir}"
-FILES_${PN}-dev += "${datadir}/gtk-2.0/include ${libdir}/gtk-2.0/include ${bindir}/gdk-pixbuf-csource"
-
-RRECOMMENDS_${PN} = "glibc-gconv-iso8859-1 ttf-dejavu-sans"
-
-EXTRA_OECONF = "--without-libtiff --disable-xkb"
-# --disable-cruft
-
-LIBV = "2.4.0"
-
-do_stage () {
- oe_libinstall -so -C gtk libgtk-x11-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C gdk libgdk-x11-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C contrib/gdk-pixbuf-xlib libgdk_pixbuf_xlib-2.0 ${STAGING_LIBDIR}
- oe_libinstall -so -C gdk-pixbuf libgdk_pixbuf-2.0 ${STAGING_LIBDIR}
-
- autotools_stage_includes
-
- mkdir -p ${STAGING_LIBDIR}/gtk-2.0/include
- install -m 0644 gdk/gdkconfig.h ${STAGING_LIBDIR}/gtk-2.0/include/gdkconfig.h
-
- install -m 0644 m4macros/gtk-2.0.m4 ${STAGING_DATADIR}/aclocal/
-}
-
-do_install_append () {
- install -d ${D}${sysconfdir}/gtk-2.0
-}
-
-PACKAGES_DYNAMIC = "gdk-pixbuf-loader-* gtk-immodule-*"
-
-python populate_packages_prepend () {
- import os.path
-
- gtk_libdir = bb.data.expand('${libdir}/gtk-2.0/${LIBV}', d)
- loaders_root = os.path.join(gtk_libdir, 'loaders')
- immodules_root = os.path.join(gtk_libdir, 'immodules')
-
- do_split_packages(d, loaders_root, '^libpixbufloader-(.*)\.so$', 'gdk-pixbuf-loader-%s', 'GDK pixbuf loader for %s', 'gdk-pixbuf-query-loaders > /etc/gtk-2.0/gdk-pixbuf.loaders')
- do_split_packages(d, immodules_root, '^im-(.*)\.so$', 'gtk-immodule-%s', 'GTK input module for %s', 'gtk-query-immodules > /etc/gtk-2.0/gtk.immodules')
-
- if (bb.data.getVar('DEBIAN_NAMES', d, 1)):
- bb.data.setVar('PKG_${PN}', 'libgtk-2.0', d)
-}
diff --git a/packages/gtk-engines/gtk-clearlooks-engine_0.6.2.bb b/packages/gtk-engines/gtk-clearlooks-engine_0.6.2.bb
index 6b07f78074..1b009b5380 100644
--- a/packages/gtk-engines/gtk-clearlooks-engine_0.6.2.bb
+++ b/packages/gtk-engines/gtk-clearlooks-engine_0.6.2.bb
@@ -1,6 +1,6 @@
SECTION = "x11/base"
DESCRIPTION = "Clearlooks theme engine for GTK"
-LICENSE = "GPL2"
+LICENSE = "GPLv2"
DEPENDS = "gtk+"
PR = "r1"
diff --git a/packages/gtk-engines/gtk-industrial-engine_0.2.46.0.bb b/packages/gtk-engines/gtk-industrial-engine_0.2.46.0.bb
index 68a5119aa1..d6e6de5037 100644
--- a/packages/gtk-engines/gtk-industrial-engine_0.2.46.0.bb
+++ b/packages/gtk-engines/gtk-industrial-engine_0.2.46.0.bb
@@ -1,6 +1,6 @@
SECTION = "x11/base"
DESCRIPTION = "Industrial theme engine for GTK"
-LICENSE = "GPL2"
+LICENSE = "GPLv2"
DEPENDS = "gtk+"
SRC_URI = "${DEBIAN_MIRROR}/main/g/gtk-industrial-engine/gtk-industrial-engine_${PV}.tar.gz \
diff --git a/packages/gtk-engines/gtk-sato-engine_0.1.bb b/packages/gtk-engines/gtk-sato-engine_0.1.bb
index 4429b21cc9..85720fbdd2 100644
--- a/packages/gtk-engines/gtk-sato-engine_0.1.bb
+++ b/packages/gtk-engines/gtk-sato-engine_0.1.bb
@@ -18,7 +18,7 @@ do_configure_prepend() {
PACKAGES += "gtk-theme-sato"
FILES_${PN} = "${libdir}/gtk-2.0/*/engines/*.so "
FILES_${PN}-dev = "${libdir}/gtk-2.0/*/engines/*"
-FILES_${PN}-dbg = "${libdir}/gtk-2.0/*/engines/.debug"
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/engines/.debug"
FILES_gtk-theme-sato = "${datadir}/icons ${datadir}/themes"
RDEPENDS_gtk-theme-sato = "${PN}"
diff --git a/packages/gtk-engines/gtk-sato-engine_svn.bb b/packages/gtk-engines/gtk-sato-engine_svn.bb
index c3d760c829..39829984d3 100644
--- a/packages/gtk-engines/gtk-sato-engine_svn.bb
+++ b/packages/gtk-engines/gtk-sato-engine_svn.bb
@@ -17,7 +17,7 @@ inherit autotools pkgconfig
PACKAGES += "gtk-theme-sato"
FILES_${PN} = "${libdir}/gtk-2.0/*/engines/*.so "
FILES_${PN}-dev = "${libdir}/gtk-2.0/*/engines/*"
-FILES_${PN}-dbg = "${libdir}/gtk-2.0/*/engines/.debug"
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/engines/.debug"
FILES_gtk-theme-sato = "${datadir}/icons ${datadir}/themes"
RDEPENDS_gtk-theme-sato = "${PN}"
diff --git a/packages/gtk-sharp/gtk-sharp_2.10.2.bb b/packages/gtk-sharp/gtk-sharp_2.10.2.bb
index ddb209e15c..28b50e13c7 100644
--- a/packages/gtk-sharp/gtk-sharp_2.10.2.bb
+++ b/packages/gtk-sharp/gtk-sharp_2.10.2.bb
@@ -36,7 +36,7 @@ FILES_libgtk2.0-cil-dev = "/usr/lib/pkgconfig/gtk-sharp-2.0.pc \
/usr/share/gapi-2.0/atk-api.xml \
/usr/share/gapi-2.0/gdk-api.xml \
/usr/share/gapi-2.0/gtk-api.xml"
-FILES_libgtk2.0-cil-dbg = "/usr/lib/.debug/libgtksharpglue-2.so \
+FILES_libgtk2.0-cil-dbg += "/usr/lib/.debug/libgtksharpglue-2.so \
/usr/lib/.debug/libgdksharpglue-2.so \
/usr/lib/.debug/libpangosharpglue-2.so"
@@ -46,7 +46,7 @@ FILES_libglib2.0-cil = "/usr/lib/mono/gac/glib-sharp \
/usr/lib/mono/gac/policy.2.*.glib-sharp/ \
/usr/lib/mono/gtk-sharp-2.0/policy.2.*.glib-sharp.dll"
FILES_libglib2.0-cil-dev = "/usr/lib/pkgconfig/glib-sharp-2.0.pc"
-FILES_libglib2.0-cil-dbg = "/usr/lib/.debug/libglibsharpglue-2.so"
+FILES_libglib2.0-cil-dbg += "/usr/lib/.debug/libglibsharpglue-2.so"
FILES_libglade2.0-cil = "/usr/lib/mono/gac/glade-sharp \
/usr/lib/libgladesharpglue-2.so \
@@ -55,7 +55,7 @@ FILES_libglade2.0-cil = "/usr/lib/mono/gac/glade-sharp \
/usr/lib/mono/gtk-sharp-2.0/policy.2.*.glade-sharp.dll"
FILES_libglade2.0-cil-dev = "/usr/lib/pkgconfig/glade-sharp-2.0.pc \
/usr/share/gapi-2.0/glade-api.xml"
-FILES_libglade2.0-cil-dbg = "/usr/lib/.debug/libgladesharpglue-2.so"
+FILES_libglade2.0-cil-dbg += "/usr/lib/.debug/libgladesharpglue-2.so"
FILES_gtk-sharp-gapi2 = " \
/usr/bin/gapi2-* \
diff --git a/packages/gtk-webcore/midori_0.0.13.bb b/packages/gtk-webcore/midori_0.0.13.bb
new file mode 100644
index 0000000000..23d0179375
--- /dev/null
+++ b/packages/gtk-webcore/midori_0.0.13.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Midori is a lightweight web browser."
+LICENSE = "GPLv2"
+
+DEPENDS = "webkit-gtk libsexy"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://software.twotoasts.de/media/midori/midori-${PV}.tar.gz \
+ "
+
+
diff --git a/packages/gtk-webcore/midori_0.0.15.bb b/packages/gtk-webcore/midori_0.0.15.bb
new file mode 100644
index 0000000000..23d0179375
--- /dev/null
+++ b/packages/gtk-webcore/midori_0.0.15.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Midori is a lightweight web browser."
+LICENSE = "GPLv2"
+
+DEPENDS = "webkit-gtk libsexy"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://software.twotoasts.de/media/midori/midori-${PV}.tar.gz \
+ "
+
+
diff --git a/packages/gtkmm/gtkmm.inc b/packages/gtkmm/gtkmm.inc
index 9dd1e43d54..139d95239d 100644
--- a/packages/gtkmm/gtkmm.inc
+++ b/packages/gtkmm/gtkmm.inc
@@ -7,9 +7,6 @@ DEPENDS = "atk glibmm gtk+ cairomm"
inherit gnome autotools pkgconfig flow-lossage
-FILES_${PN} = "${libdir}/lib*.so.*"
-FILES_${PN}-dev += "${libdir}/glibmm-2.4/include/"
-
LIBV = "2.4.0"
do_stage () {
@@ -19,3 +16,6 @@ do_stage () {
install -m 0644 gdk/gdkmmconfig.h ${STAGING_INCDIR}/gtkmm-2.4
install -m 0644 gtk/gtkmmconfig.h ${STAGING_INCDIR}/gtkmm-2.4
}
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${libdir}/*/include ${libdir}/*/proc/m4"
diff --git a/packages/gtkmm/gtkmm_2.10.10.bb b/packages/gtkmm/gtkmm_2.10.11.bb
index b8ba69f50e..b8ba69f50e 100644
--- a/packages/gtkmm/gtkmm_2.10.10.bb
+++ b/packages/gtkmm/gtkmm_2.10.11.bb
diff --git a/packages/guile/guile-native_1.6.4.bb b/packages/guile/guile-native_1.6.4.bb
index 96763730ec..4a3bc5e74e 100644
--- a/packages/guile/guile-native_1.6.4.bb
+++ b/packages/guile/guile-native_1.6.4.bb
@@ -1,5 +1,6 @@
SECTION = "unknown"
LICENSE = "GPL"
+DEPENDS = "gmp-native"
SRC_URI = "http://ftp.gnu.org/pub/gnu/guile/guile-${PV}.tar.gz \
file://guile-amd64.patch;patch=1"
diff --git a/packages/guile/guile-native_1.8.2.bb b/packages/guile/guile-native_1.8.2.bb
index 99d77b0da0..ac2b189d37 100644
--- a/packages/guile/guile-native_1.8.2.bb
+++ b/packages/guile/guile-native_1.8.2.bb
@@ -1,5 +1,6 @@
SECTION = "unknown"
LICENSE = "GPL"
+DEPENDS = "gmp-native"
SRC_URI = "http://ftp.gnu.org/pub/gnu/guile/guile-${PV}.tar.gz \
"
diff --git a/packages/hal/hal_0.5.9.bb b/packages/hal/hal_0.5.9.bb
index 03c45623a4..e835f80434 100644
--- a/packages/hal/hal_0.5.9.bb
+++ b/packages/hal/hal_0.5.9.bb
@@ -1,16 +1,18 @@
require hal.inc
-DEPENDS = "virtual/kernel dbus-glib udev intltool expat libusb"
+DEPENDS = "virtual/kernel dbus-glib udev intltool intltool-native expat libusb"
RDEPENDS += "udev hal-info"
#RDEPENDS_hal-device-manager = "python hal python-pygnome"
RRECOMMENDS = "udev-utils"
-PR = "r3"
+PR = "r5"
SRC_URI += "file://99_hal \
file://20hal \
"
+LEAD_SONAME = "libhal.so"
+
# machines with pci and acpi get a machine dependant hal
EXTRA_OECONF = "--with-hwdata=${datadir}/hwdata \
--with-expat=${STAGING_LIBDIR}/.. \
@@ -36,10 +38,12 @@ do_install_append() {
}
do_stage() {
- autotools_stage_all
- install -d ${STAGING_LIBDIR}
- install -m 755 libhal/.libs/libhal.so.1.0.0 ${STAGING_LIBDIR}/libhal.so
- install -m 755 libhal-storage/.libs/libhal-storage.so.1.0.0 ${STAGING_LIBDIR}/libhal-storage.so
+ oe_libinstall -C libhal -a -so libhal ${STAGING_LIBDIR}
+ oe_libinstall -C libhal-storage -a -so libhal-storage ${STAGING_LIBDIR}
+
+ install -d ${STAGING_INCDIR}/hal
+ install -m 0644 libhal/libhal.h ${STAGING_INCDIR}/hal
+ install -m 0644 libhal-storage/libhal-storage.h ${STAGING_INCDIR}/hal
}
# At the time the postinst runs, dbus might not be setup so only restart if running
diff --git a/packages/helloworld/helloworld_1.0.0.bb b/packages/helloworld/helloworld_1.0.0.bb
index da4daa408d..af29a7769a 100644
--- a/packages/helloworld/helloworld_1.0.0.bb
+++ b/packages/helloworld/helloworld_1.0.0.bb
@@ -7,7 +7,7 @@ S = "${WORKDIR}/${P}"
do_fetch () {
mkdir -p ${WORKDIR}/${P}
cd ${WORKDIR}/${P}
- echo -e "#include <stdio.h>\nint main(void)\n{\n\tprintf(\"Hello world!\\\n\");\twhile(1);\n\treturn 0;\n}\n" >helloworld.c
+ printf "#include <stdio.h>\nint main(void)\n{\n\tprintf(\"Hello world!\\\n\");\twhile(1);\n\treturn 0;\n}\n" >helloworld.c
}
do_compile () {
diff --git a/packages/hostap/hostap-modules.inc b/packages/hostap/hostap-modules.inc
index 9a928210c6..3184f00fb3 100644
--- a/packages/hostap/hostap-modules.inc
+++ b/packages/hostap/hostap-modules.inc
@@ -2,14 +2,13 @@ DESCRIPTION = "A driver for wireless LAN cards based on Intersil's Prism2/2.5/3
SECTION = "kernel/modules"
PRIORITY = "optional"
LICENSE = "GPL"
+RRECOMMENDS = "apm-wifi-suspendfix"
SRC_URI = "http://hostap.epitest.fi/releases/hostap-driver-${PV}.tar.gz"
-
SRC_URI_append_mtx-1 = " file://mtx_compat.diff;patch=1;pnum=0 \
file://mtx_hostap_deferred_irq.diff;patch=1;pnum=0"
SRC_URI_append_mtx-2 = " file://mtx_compat.diff;patch=1;pnum=0 \
file://mtx_hostap_deferred_irq.diff;patch=1;pnum=0"
-
SRC_URI_append_h3900 = " file://ipaq_compat.patch;patch=1 "
S = "${WORKDIR}/hostap-driver-${PV}"
@@ -32,7 +31,7 @@ do_install() {
install -m 0644 driver/modules/hostap_cs${KERNEL_OBJECT_SUFFIX} ${D}${base_libdir}/modules/${KERNEL_VERSION}/pcmcia/
}
-PACKAGES = "hostap-modules-cs hostap-modules-pci hostap-modules"
+PACKAGES = "${PN}-dbg hostap-modules-cs hostap-modules-pci hostap-modules"
FILES_hostap-modules-cs = "/lib/modules/${KERNEL_VERSION}/pcmcia/ /${sysconfdir}/pcmcia/"
FILES_hostap-modules-pci = "/lib/modules/${KERNEL_VERSION}/net/hostap_pci${KERNEL_OBJECT_SUFFIX}"
FILES_hostap-modules = "/lib/modules/"
diff --git a/packages/hostap/hostap-modules_0.3.10.bb b/packages/hostap/hostap-modules_0.3.10.bb
index 1935d4ed22..7a76a0c1fa 100644
--- a/packages/hostap/hostap-modules_0.3.10.bb
+++ b/packages/hostap/hostap-modules_0.3.10.bb
@@ -1,5 +1,5 @@
require hostap-modules.inc
-PR = "r8"
+PR = "r9"
SRC_URI += "file://Makefile.patch;patch=1 \
file://add_event.patch;patch=1 \
diff --git a/packages/hostap/hostap-modules_0.3.7.bb b/packages/hostap/hostap-modules_0.3.7.bb
index 9bf337078a..8daa3455d8 100644
--- a/packages/hostap/hostap-modules_0.3.7.bb
+++ b/packages/hostap/hostap-modules_0.3.7.bb
@@ -1,5 +1,5 @@
require hostap-modules.inc
-PR = "r8"
+PR = "r9"
SRC_URI += "file://Makefile.patch;patch=1 \
file://add_event.patch;patch=1 \
diff --git a/packages/hostap/hostap-modules_0.3.9.bb b/packages/hostap/hostap-modules_0.3.9.bb
index 051afadca0..aa1dfde03a 100644
--- a/packages/hostap/hostap-modules_0.3.9.bb
+++ b/packages/hostap/hostap-modules_0.3.9.bb
@@ -1,5 +1,5 @@
require hostap-modules.inc
-PR = "r10"
+PR = "r11"
SRC_URI += "file://Makefile.patch;patch=1 \
file://add_event.patch;patch=1 \
diff --git a/packages/hostap/hostap-modules_0.4.4.bb b/packages/hostap/hostap-modules_0.4.4.bb
index 74f39d8b58..f415d31614 100644
--- a/packages/hostap/hostap-modules_0.4.4.bb
+++ b/packages/hostap/hostap-modules_0.4.4.bb
@@ -1,4 +1,4 @@
require hostap-modules.inc
-PR = "r6"
+PR = "r7"
SRC_URI += "file://kernel_updates.patch;patch=1"
diff --git a/packages/hostap/hostap-modules_0.4.7.bb b/packages/hostap/hostap-modules_0.4.7.bb
index e4a34c1916..369240cfe4 100644
--- a/packages/hostap/hostap-modules_0.4.7.bb
+++ b/packages/hostap/hostap-modules_0.4.7.bb
@@ -1,4 +1,4 @@
require hostap-modules.inc
-PR = "r4"
+PR = "r5"
SRC_URI += "file://kernel_updates.patch;patch=1"
diff --git a/packages/hwdata/hwdata_0.191.bb b/packages/hwdata/hwdata_0.191.bb
index 2dfe1433bf..5d607ddc1a 100644
--- a/packages/hwdata/hwdata_0.191.bb
+++ b/packages/hwdata/hwdata_0.191.bb
@@ -1,14 +1,16 @@
DESCRIPTION = "This package contains various hardware identification and configuration data, such as the pci.ids database, or the XFree86/xorg Cards database. It's needed for the kudzu hardware detection."
LICENSE = "GPL + X11"
+PR = "r1"
+
SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/main/h/hwdata/hwdata_0.191.orig.tar.gz \
http://archive.ubuntu.com/ubuntu/pool/main/h/hwdata/hwdata_0.191-1.diff.gz;patch=1 \
"
PACKAGE_ARCH = "all"
-
+FILES_${PN} = "${datadir}"
do_install() {
mkdir -p ${D}${datadir}/hwdata
- install -m644 MonitorsDB pci* usb.ids video* upgradelist ${D}${datadir}/hwdata
+ install -m 644 MonitorsDB pci* usb.ids video* upgradelist ${D}${datadir}/hwdata
}
diff --git a/packages/imagemagick/imagemagick-native_6.3.5-10.bb b/packages/imagemagick/imagemagick-native_6.3.5-10.bb
new file mode 100644
index 0000000000..b03e18e9c1
--- /dev/null
+++ b/packages/imagemagick/imagemagick-native_6.3.5-10.bb
@@ -0,0 +1,3 @@
+require imagemagick_${PV}.bb
+DEPENDS ="libtool-native"
+inherit native
diff --git a/packages/images/base-image.bb b/packages/images/base-image.bb
new file mode 100644
index 0000000000..9afa682d2c
--- /dev/null
+++ b/packages/images/base-image.bb
@@ -0,0 +1,84 @@
+# This image is intended to provide a basic configuration that allows
+# you to access a newly flashed device over the network or via the
+# native console, and use ipkg to install (from feeds accessible via
+# the network) any further features you require into internal flash
+# memory or onto attached storage.
+
+# It should be as small as possible, while still achieving that goal.
+
+# The rationale for naming it 'base-image' is that this image is the
+# base upon which you can install any other functionality you desire.
+
+# See the end of this file for further rationale and policy regarding
+# the contents of this image, and the criteria which are used to make
+# decisions about adding and removing packages from this image.
+
+# Although it is only fully tested with the Angstrom distro, this
+# image is intended to be distro-agnostic.
+
+DISTRO_SSH_DAEMON ?= "dropbear"
+
+DISTRO_PACKAGE_MANAGER ?= "ipkg ipkg-collateral"
+
+# FIXME: We need a distro-indendent way of specifying feed configs.
+# Once the RFC for the DISTRO_FEED_CONFIGS variable name is approved,
+# we can remove this default definition and set it in the distro config.
+DISTRO_FEED_CONFIGS ?= "${ANGSTROM_FEED_CONFIGS}"
+
+DEPENDS = "\
+ task-boot \
+ ${DISTRO_SSH_DAEMON} \
+ ${DISTRO_PACKAGE_MANAGER} \
+ ${DISTRO_FEED_CONFIGS} \
+ ${@base_contains('MACHINE_FEATURES', 'ext2', 'task-base-ext2', '', d)} \
+ ${@base_contains('MACHINE_FEATURES', 'usbhost', 'task-base-usbhost', '', d)} \
+ "
+
+IMAGE_INSTALL = "\
+ task-boot \
+ ${DISTRO_SSH_DAEMON} \
+ ${DISTRO_PACKAGE_MANAGER} \
+ ${DISTRO_FEED_CONFIGS} \
+ ${@base_contains('MACHINE_FEATURES', 'ext2', 'task-base-ext2', '', d)} \
+ ${@base_contains('MACHINE_FEATURES', 'usbhost', 'task-base-usbhost', '', d)} \
+ "
+
+export IMAGE_BASENAME = "base-image"
+IMAGE_LINGUAS = ""
+
+inherit image
+
+# Key features of this image are:
+
+# 1) Must be able to mount attached storage devices like SD cards, CF
+# cards, internal disks, external USB disks, etc. Should support
+# various filesystem choices, but ext2 at a minimum. The rationale
+# for this is that you need storage to be able to install significant
+# new functionality.
+
+# 2) Must be able to boot from internal flash, or directly from a
+# filesystem stored on the attached storage. The rationale for this
+# is that you will want to boot from attached storage instead of
+# messing around with ipkg-link.
+
+# Rationale and policy:
+
+# 'base-image' is the smallest possible image which allows you to ssh
+# into a device via it's native network interface, and install
+# packages from feeds across the network into internal flash or onto
+# an attached storage device.
+
+# It is "larger" than minimal-image (which is strictly only that which
+# is required to boot and get ssh access to the device, and nothing
+# else), but is "smaller" than console-image (which has a whole lot of
+# stuff in it which could easily be ipkg installed after boot rather
+# than being in the initial rootfs).
+
+# It is required to always be small enough to fit in the internal
+# flash rootfs partition of an NSLU2 (as an example of the smaller end
+# of flash sizes that OE supports), and features will be removed from
+# the image to ensure that this is always the case. Any feature that
+# can be installed over the network using the package manager after
+# the first boot is always fair game for removal at any time, and
+# patches are welcome to make base-image as small as possible while
+# still retaining the ability to subsequently install that feature.
diff --git a/packages/images/initramfs-minimal-image.bb b/packages/images/initramfs-minimal-image.bb
index 1aa928b2a9..d696468913 100644
--- a/packages/images/initramfs-minimal-image.bb
+++ b/packages/images/initramfs-minimal-image.bb
@@ -1,7 +1,6 @@
# Sample initramfs image
-#IMAGE_INSTALL = "initramfs-boot busybox kernel-module-uinput uclibc libgcc1"
-IMAGE_INSTALL = "initramfs-nfsboot busybox-static kernel-module-uinput"
+IMAGE_INSTALL = "initramfs-module-nfs busybox-static"
export IMAGE_BASENAME = "initramfs-image"
IMAGE_LINGUAS = ""
diff --git a/packages/images/minimal-gpe-image.bb b/packages/images/minimal-gpe-image.bb
new file mode 100644
index 0000000000..64583741cd
--- /dev/null
+++ b/packages/images/minimal-gpe-image.bb
@@ -0,0 +1,25 @@
+#Angstrom minimal gpe image
+# This image provides a barebone dm and 'desktop'
+# Very angstrom and ipkg centric
+
+XSERVER ?= "xserver-kdrive-fbdev"
+
+export IMAGE_BASENAME = "minimalist-gpe-image"
+
+PR = "r2"
+
+DEPENDS = "task-boot"
+IMAGE_INSTALL = "\
+ ${XSERVER} \
+ task-boot \
+ gpe-dm gpe-session-scripts gpe-login \
+ matchbox-wm \
+ gpe-terminal \
+ angstrom-feed-configs \
+ ipkg \
+ "
+
+#zap root password for release images
+ROOTFS_POSTPROCESS_COMMAND += '${@base_conditional("DISTRO_TYPE", "release", "zap_root_password; ", "",d)}'
+
+inherit image
diff --git a/packages/images/minimal-openmoko-image.bb b/packages/images/minimal-openmoko-image.bb
new file mode 100644
index 0000000000..6ab4935c24
--- /dev/null
+++ b/packages/images/minimal-openmoko-image.bb
@@ -0,0 +1,21 @@
+#------------------------------------------------------
+# Minimal OpenMoko Image Recipe
+# This should only have the base system + dialer
+# #------------------------------------------------------
+
+IMAGE_LINGUAS = ""
+ANGSTROM_EXTRA_INSTALL ?= ""
+
+IMAGE_INSTALL = "\
+ task-base \
+ ${ANGSTROM_EXTRA_INSTALL} \
+ task-openmoko-linux \
+ task-openmoko-net \
+ task-openmoko-ui \
+ task-openmoko-base \
+ task-openmoko-phone \
+ "
+
+inherit image
+
+ROOTFS_POSTPROCESS_COMMAND += 'date "+%m%d%H%M%Y" >${IMAGE_ROOTFS}/etc/timestamp'
diff --git a/packages/images/nas-server-image.bb b/packages/images/nas-server-image.bb
new file mode 100644
index 0000000000..ca8f94e749
--- /dev/null
+++ b/packages/images/nas-server-image.bb
@@ -0,0 +1,53 @@
+# This image is intended to provide a configuration
+# for a network attached storage server device.
+
+# Key features are:
+#
+# 1) Must be able to mount attached storage devices like
+# internal disks, external USB disks, etc. Should support
+# various filesystem choices, but ext2 at a minimum.
+#
+# 2) Must be able to boot from internal flash, or directly
+# from a filesystem stored on the attached storage.
+#
+# 3) Must be able to share that storage across the network
+# using various protocols like Samba, NFS, etc.
+#
+# 4) Bonus points for being able to support other central
+# network services like a central gateway machine might.
+
+# Although it is tested with the Angstrom distro, it is
+# intended to be distro-agnostic.
+
+DISTRO_SSH_DAEMON ?= "dropbear"
+DISTRO_PACKAGE_MANAGER ?= "ipkg ipkg-collateral"
+
+DEPENDS = "\
+ task-boot \
+ ${@base_contains('MACHINE_FEATURES', 'apex', 'task-base-apex', '', d)} \
+ task-distro-base task-machine-base \
+ ${DISTRO_SSH_DAEMON} \
+ ${DISTRO_PACKAGE_MANAGER} \
+ ${@base_contains('MACHINE_FEATURES', 'ext2', 'task-base-ext2', '', d)} \
+ ${@base_contains('MACHINE_FEATURES', 'usbhost', 'task-base-usbhost', '', d)} \
+ task-nas-server-everything \
+ "
+
+IMAGE_INSTALL_TASKS = "\
+ task-nas-server-everything \
+ "
+
+IMAGE_INSTALL = "\
+ task-boot \
+ ${@base_contains('MACHINE_FEATURES', 'apex', 'task-base-apex', '', d)} \
+ ${DISTRO_SSH_DAEMON} \
+ ${DISTRO_PACKAGE_MANAGER} \
+ ${@base_contains('MACHINE_FEATURES', 'ext2', 'task-base-ext2', '', d)} \
+ ${@base_contains('MACHINE_FEATURES', 'usbhost', 'task-base-usbhost', '', d)} \
+ ${IMAGE_INSTALL_TASKS} \
+ "
+
+export IMAGE_BASENAME = "nas-server-image"
+IMAGE_LINGUAS = ""
+
+inherit image
diff --git a/packages/images/nslu2-base-image.bb b/packages/images/nslu2-base-image.bb
new file mode 100644
index 0000000000..444e9f6a49
--- /dev/null
+++ b/packages/images/nslu2-base-image.bb
@@ -0,0 +1,14 @@
+# Note that this package is intended to create an *identical*
+# kernel and rootfs as the normal base-image.bb
+
+# The only reason for the existence of this .bb file is to
+# create the 8MB and 16MB flashable NSLU2 firmware images.
+
+# Please do not add anything other than the following two
+# lines to this file, and please do not do anything in
+# the nslu2-image class which might affect the kernel
+# or rootfs.
+
+require base-image.bb
+
+inherit nslu2-image
diff --git a/packages/images/nslu2-minimal-image.bb b/packages/images/nslu2-minimal-image.bb
deleted file mode 100644
index 5a601b2995..0000000000
--- a/packages/images/nslu2-minimal-image.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-# Note that this package is intended to create an *identical*
-# kernel and rootfs as the normal minimal-image.bb
-
-# The only reason for the existence of this .bb file is to
-# create the 8MB and 16MB flashable NSLU2 firmware images.
-
-# Please do not add anything other than the following two
-# lines to this file, and please do not do anything in
-# the nslu2-image.bb class which might affect the kernel
-# or rootfs.
-
-require minimal-image.bb
-
-inherit nslu2-image
diff --git a/packages/images/nylon-image-base.bb b/packages/images/nylon-image-base.bb
index b4913097be..27dc165800 100644
--- a/packages/images/nylon-image-base.bb
+++ b/packages/images/nylon-image-base.bb
@@ -8,7 +8,7 @@ NYLON_BASE = "base-files base-passwd bash busybox \
mtd-utils \
nano ncurses netbase \
openssh sysvinit \
- timezones tinylogin udev"
+ tzdata tinylogin udev"
DEPENDS += "virtual/kernel less nano"
IMAGE_INSTALL = "kernel less nano elvis-tiny \
diff --git a/packages/images/openmoko-python-devel-image.bb b/packages/images/openmoko-python-devel-image.bb
new file mode 100644
index 0000000000..9d2a8db2c6
--- /dev/null
+++ b/packages/images/openmoko-python-devel-image.bb
@@ -0,0 +1,6 @@
+require openmoko-image.bb
+
+IMAGE_INSTALL += "\
+ task-openmoko-python-devel \
+"
+
diff --git a/packages/images/openprotium-image.bb b/packages/images/openprotium-image.bb
index 818fd0b186..0f64ba2052 100644
--- a/packages/images/openprotium-image.bb
+++ b/packages/images/openprotium-image.bb
@@ -1,128 +1,28 @@
DESCRIPTION = "OpenProtium image"
HOMEPAGE = "http://www.openprotium.com"
-DEPENDS = "${MACHINE_TASK_PROVIDER}"
-EXTRA_IMAGECMD_jffs2 = "--pad --big-endian --eraseblock=0x10000 -D ${SLUGOS_DEVICE_TABLE}"
+DEPENDS = "task-openprotium"
+IMAGE_INSTALL = "task-openprotium"
IMAGE_LINGUAS = ""
-# Setting USE_DEVFS prevents *any* entries being created initially
-# in /dev
-USE_DEVFS = "1"
+IMAGE_NAME = "${IMAGE_BASENAME}-${MACHINE}-${DISTRO_VERSION}"
+PACKAGE_REMOVE = "kernel-image-* task-openprotium"
-# This is passed to the image command to build the correct /dev
-# directory (because only the image program can make actual
-# dev entries!)
-SLUGOS_DEVICE_TABLE = "${@bb.which(bb.data.getVar('BBPATH', d, 1), 'files/device_table-slugos.txt')}"
+USE_DEVFS = "1"
+OPENPROTIUM_DEVICE_TABLE = "${@bb.which(bb.data.getVar('BBPATH', d, 1), 'files/device_table-minimal-add-md.txt')}"
+EXTRA_IMAGECMD_jffs2 += " -D ${OPENPROTIUM_DEVICE_TABLE}"
-# IMAGE_PREPROCESS_COMMAND is run before making the image.
-# We use this to do a few things:
-# . remove the uImage, which is in a separate part of the flash already.
-# . adjust the default run level (sysvinit is 5 by default, we like 3)
-# . set a default root password, which is no more secure than a blank one
-# (since it is documented, in case you were wondering)
-# . make the boot more verbose
-#
-IMAGE_PREPROCESS_COMMAND += "rm ${IMAGE_ROOTFS}/boot/uImage-*;"
-IMAGE_PREPROCESS_COMMAND += "sed -i -es,^id:5:initdefault:,id:3:initdefault:, ${IMAGE_ROOTFS}/etc/inittab;"
+IMAGE_PREPROCESS_COMMAND += "install -c -m 644 ${OPENPROTIUM_DEVICE_TABLE} ${IMAGE_ROOTFS}/etc/device_table;"
+IMAGE_PREPROCESS_COMMAND += "sed -i -es,^id:5:initdefault:,id:3:initdefault:, ${IMAGE_ROOTFS}/etc/inittab;"
IMAGE_PREPROCESS_COMMAND += "sed -i -es,^root::0,root:BTMzOOAQfESg6:0, ${IMAGE_ROOTFS}/etc/passwd;"
IMAGE_PREPROCESS_COMMAND += "sed -i -es,^VERBOSE=no,VERBOSE=very, ${IMAGE_ROOTFS}/etc/default/rcS;"
+IMAGE_PREPROCESS_COMMAND += "sed -i -es,^VOLATILE_ENABLE_CACHE=yes,VOLATILE_ENABLE_CACHE=no, ${IMAGE_ROOTFS}/etc/default/rcS;"
+IMAGE_PREPROCESS_COMMAND += "sed -i -es,/dev/tty0,/dev/console, ${IMAGE_ROOTFS}/etc/init.d/populate-volatile.sh;"
+IMAGE_PREPROCESS_COMMAND += "echo /dev/md >> ${IMAGE_ROOTFS}/etc/udev/mount.blacklist;"
+IMAGE_PREPROCESS_COMMAND += "echo /dev/hd >> ${IMAGE_ROOTFS}/etc/udev/mount.blacklist;"
+IMAGE_PREPROCESS_COMMAND += "echo /dev/mtd3 0x30000 0x10000 0x10000 > ${IMAGE_ROOTFS}/etc/fw_env.config;"
-# Always just make a new flash image.
-PACK_IMAGE = 'storcenter_pack_image;'
-IMAGE_POSTPROCESS_COMMAND += "${PACK_IMAGE}"
-PACK_IMAGE_DEPENDS = ""
-#EXTRA_IMAGEDEPENDS += "${PACK_IMAGE_DEPENDS}"
-
-# This hack removes '${MACHINE}' from the end of the arch.conf for ipk,
-# preventing _mach.ipk (with no byte sex) taking precedence over everything
-# else.
-# but we want 'storcenter' in there so kernel modules work correctly.
-#
-#ROOTFS_POSTPROCESS_COMMAND += "sed -i '$d' '${IMAGE_ROOTFS}/etc/ipkg/arch.conf';"
-
-# These depends define native utilities - they do not get put in the flash and
-# are not required to build the image.
-IMAGE_TOOLS = ""
-#EXTRA_IMAGEDEPENDS += "${IMAGE_TOOLS}"
-
-# CONFIG:
-# SLUGOS_EXTRA_RDEPENDS: set in conf, things to add to the image
-# SLUGOS_SUPPORT: set to here, see below, added to the image.
-# SLUGOS_KERNEL: set here, kernel modules added to the image
-#
-# Do not override the last two unless you really know what you
-# are doing - there is more information below.
-
-# diff, cpio and find are required for reflash and turnup ram.
-# Removing these probably leaves the system bootable, but standard
-# openslug and ucslugc stuff won't work, so only take these out in
-# very non-standard turnkey slugos builds.
-#
-# udev is the default way of handling devices, there is no guarantee
-# that the static device table is completely correct (it is just
-# known to be sufficient for boot.)
-# we'ere still on 2.6.12 devfs....
-#OPENPROTIUM_SUPPORT ?= "diffutils cpio findutils udev"
-#
-OPENPROTIUM_SUPPORT ?= "diffutils cpio findutils uboot-utils"
-
-# kernel-module-af-packet must be in the image for DHCP to work
-# kernel-module-netconsole is here because it is small and is
-# highly useful on minimal systems (which really don't have anywhere
-# other than the network to output error messages!)
-SLUGOS_KERNEL ?= "kernel-module-af-packet kernel-module-netconsole \
- kernel-module-mii "
-
-# this gets /lib/modules made....
-OPENPROTIUM_KERNEL = "kernel-module-dummy \
- kernel-module-af-packet "
-
-IMAGE_INSTALL = " \
- kernel base-files base-passwd netbase \
- busybox initscripts-openprotium openprotium-init \
- update-modules sysvinit tinylogin \
- module-init-tools-depmod modutils-initscripts \
- ipkg-collateral ipkg ipkg-link \
- libgcc1 \
- portmap \
- dropbear \
- e2fsprogs-blkid \
- mdadm \
- hdparm \
- mtd-utils \
- ${OPENPROTIUM_SUPPORT} \
- ${OPENPROTIUM_KERNEL} "
-# ${SLUGOS_EXTRA_RDEPENDS}"
-
-inherit image
+ROOTFS_POSTPROCESS_COMMAND += "ipkg-cl ${IPKG_ARGS} -force-depends \
+ remove ${PACKAGE_REMOVE};"
-storcenter_pack_image() {
- # find latest kernel
- KERNEL=`ls -tr ${DEPLOY_DIR_IMAGE}/uImage* | tail -1`
- if [ -z "$KERNEL" ]; then
- oefatal "No kernel found in ${DEPLOY_DIR_IMAGE}. Bitbake linux-storcenter to create one."
- exit 1
- fi
- ROOTFS=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2
- OUTPUT=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.flash.img
- PADFILE=${DEPLOY_DIR_IMAGE}/padfile.zzz
- HEX_MAX_KERN_SIZE=170000
- DEC_MAX_KERN_SIZE=`echo "ibase=16; $HEX_MAX_KERN_SIZE" | bc `
- HEX_MAX_ROOT_SIZE=590000
- DEC_MAX_ROOT_SIZE=`echo "ibase=16; $HEX_MAX_ROOT_SIZE" | bc `
- KERNEL_SIZE=`ls -l $KERNEL | awk '{print $5}'`
- if [ $KERNEL_SIZE -gt $DEC_MAX_KERN_SIZE ]; then
- oefatal "Kernel too large at $KERNEL_SIZE bytes. Max is $DEC_MAX_KERN_SIZE."
- exit 1
- fi
- ROOT_SIZE=`ls -l $ROOTFS | awk '{print $5}'`
- if [ $ROOT_SIZE -gt $DEC_MAX_ROOT_SIZE ]; then
- oefatal "Rootfs is too large at $ROOT_SIZE bytes. Max is $DEC_MAX_ROOT_SIZE."
- exit 1
- fi
- PAD_SIZE=`echo "$DEC_MAX_KERN_SIZE - $KERNEL_SIZE" | bc `
- dd if=/dev/zero of=$PADFILE bs=$PAD_SIZE count=1 2>>/dev/null
- cat $KERNEL $PADFILE $ROOTFS > $OUTPUT
- rm -f $PADFILE
- ls -l $OUTPUT
-}
+inherit image concatenated-image
diff --git a/packages/images/opie-image-16mb.bb b/packages/images/opie-image-16mb.bb
index 06bcdad7e8..42bf611880 100644
--- a/packages/images/opie-image-16mb.bb
+++ b/packages/images/opie-image-16mb.bb
@@ -13,50 +13,7 @@ IMAGE_INSTALL = "task-boot \
task-opie-16mb-pim \
task-opie-irda"
-# merge feed-sources into ipkg.conf for opie-aqpkg as it can't handle feed-sources outside of ipkg.conf.
-merge_feeds() {
-
- if ! test -z "${FEED_URIS}"
- then
- # Die gracefully if ipkg-collateral failed
- if ! test -e "${IMAGE_ROOTFS}/etc/ipkg.conf"
- then
- echo "[${IMAGE_ROOTFS}/etc/ipkg.conf] is missing!"
- exit 1
- fi
-
- # comment out existing feed-sources inserted by ipkg-collateral
- cat ${IMAGE_ROOTFS}/etc/ipkg.conf | sed "s/^src\ /#src\ /" > ${IMAGE_ROOTFS}/etc/ipkg.conf_
- rm ${IMAGE_ROOTFS}/etc/ipkg.conf && mv ${IMAGE_ROOTFS}/etc/ipkg.conf_ ${IMAGE_ROOTFS}/etc/ipkg.conf
-
- # extract, then delete destinations
- cat ${IMAGE_ROOTFS}/etc/ipkg.conf | egrep "^dest\ " > ${IMAGE_ROOTFS}/etc/ipkg.conf.dest
- cat ${IMAGE_ROOTFS}/etc/ipkg.conf | egrep -v "^dest\ " > ${IMAGE_ROOTFS}/etc/ipkg.conf_
- rm ${IMAGE_ROOTFS}/etc/ipkg.conf && mv ${IMAGE_ROOTFS}/etc/ipkg.conf_ ${IMAGE_ROOTFS}/etc/ipkg.conf
-
-
- for line in ${FEED_URIS}
- do
- # strip leading and trailing spaces/tabs, then split into name and uri
- line_clean="`echo "$line"|sed 's/^[ \t]*//;s/[ \t]*$//'`"
- feed_name="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\1/p'`"
- feed_uri="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\2/p'`"
-
- # insert new feed-sources
- echo "src/gz $feed_name $feed_uri" >> ${IMAGE_ROOTFS}/etc/ipkg.conf
- done
-
- # remove temporary files and rebuild ipkg.conf
- echo "" >> ${IMAGE_ROOTFS}/etc/ipkg.conf
- cat ${IMAGE_ROOTFS}/etc/ipkg.conf.dest >> ${IMAGE_ROOTFS}/etc/ipkg.conf
- rm ${IMAGE_ROOTFS}/etc/ipkg.conf.dest
-
- # remove -feed.conf files which are no longer needed
- cd ${IMAGE_ROOTFS}/etc/ipkg/ && rm -- *-feed.conf
- fi
-}
-
-# merge feed-sources into ipkg.conf and create /etc/timestamp from build date
+# create /etc/timestamp from build date
IMAGE_PREPROCESS_COMMAND = "merge_feeds; create_etc_timestamp"
inherit image
diff --git a/packages/images/opie-image.bb b/packages/images/opie-image.bb
index 1f1130204a..04c1f260e8 100644
--- a/packages/images/opie-image.bb
+++ b/packages/images/opie-image.bb
@@ -9,50 +9,7 @@ IMAGE_INSTALL = "${MACHINE_TASK_PROVIDER} task-opie-base task-opie-base-applets
task-opie-extra-settings \
task-opie-bluetooth task-opie-irda "
-# merge feed-sources into ipkg.conf for opie-aqpkg as it can't handle feed-sources outside of ipkg.conf.
-merge_feeds() {
-
- if ! test -z "${FEED_URIS}"
- then
- # Die gracefully if ipkg-collateral failed
- if ! test -e "${IMAGE_ROOTFS}/etc/ipkg.conf"
- then
- echo "[${IMAGE_ROOTFS}/etc/ipkg.conf] is missing!"
- exit 1
- fi
-
- # comment out existing feed-sources inserted by ipkg-collateral
- cat ${IMAGE_ROOTFS}/etc/ipkg.conf | sed "s/^src\ /#src\ /" > ${IMAGE_ROOTFS}/etc/ipkg.conf_
- rm ${IMAGE_ROOTFS}/etc/ipkg.conf && mv ${IMAGE_ROOTFS}/etc/ipkg.conf_ ${IMAGE_ROOTFS}/etc/ipkg.conf
-
- # extract, then delete destinations
- cat ${IMAGE_ROOTFS}/etc/ipkg.conf | egrep "^dest\ " > ${IMAGE_ROOTFS}/etc/ipkg.conf.dest
- cat ${IMAGE_ROOTFS}/etc/ipkg.conf | egrep -v "^dest\ " > ${IMAGE_ROOTFS}/etc/ipkg.conf_
- rm ${IMAGE_ROOTFS}/etc/ipkg.conf && mv ${IMAGE_ROOTFS}/etc/ipkg.conf_ ${IMAGE_ROOTFS}/etc/ipkg.conf
-
-
- for line in ${FEED_URIS}
- do
- # strip leading and trailing spaces/tabs, then split into name and uri
- line_clean="`echo "$line"|sed 's/^[ \t]*//;s/[ \t]*$//'`"
- feed_name="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\1/p'`"
- feed_uri="`echo "$line_clean" | sed -n 's/\(.*\)##\(.*\)/\2/p'`"
-
- # insert new feed-sources
- echo "src/gz $feed_name $feed_uri" >> ${IMAGE_ROOTFS}/etc/ipkg.conf
- done
-
- # remove temporary files and rebuild ipkg.conf
- echo "" >> ${IMAGE_ROOTFS}/etc/ipkg.conf
- cat ${IMAGE_ROOTFS}/etc/ipkg.conf.dest >> ${IMAGE_ROOTFS}/etc/ipkg.conf
- rm ${IMAGE_ROOTFS}/etc/ipkg.conf.dest
-
- # remove -feed.conf files which are no longer needed
- cd ${IMAGE_ROOTFS}/etc/ipkg/ && rm -- *-feed.conf
- fi
-}
-
-# merge feed-sources into ipkg.conf and create /etc/timestamp from build date
-IMAGE_PREPROCESS_COMMAND = "merge_feeds; create_etc_timestamp"
+# create /etc/timestamp from build date
+IMAGE_PREPROCESS_COMMAND = "create_etc_timestamp"
inherit image
diff --git a/packages/images/qtopia-core-console-image.bb b/packages/images/qtopia-core-console-image.bb
new file mode 100644
index 0000000000..62382cd11f
--- /dev/null
+++ b/packages/images/qtopia-core-console-image.bb
@@ -0,0 +1,19 @@
+#QtopiaCore 'console' image
+#gives you a small images with ssh access
+
+ANGSTROM_EXTRA_INSTALL ?= ""
+DISTRO_SSH_DAEMON ?= "dropbear"
+DEPENDS = "task-boot"
+
+IMAGE_INSTALL = "task-boot \
+ util-linux-mount util-linux-umount \
+ ${DISTRO_SSH_DAEMON} \
+ angstrom-version \
+ task-qtopia-core-console \
+ "
+
+export IMAGE_BASENAME = "trolltech-qtopia-core-console-image"
+IMAGE_LINGUAS = ""
+
+inherit image
+
diff --git a/packages/images/qtopia-core-gui-image.bb b/packages/images/qtopia-core-gui-image.bb
new file mode 100644
index 0000000000..6f3e594e62
--- /dev/null
+++ b/packages/images/qtopia-core-gui-image.bb
@@ -0,0 +1,20 @@
+#QtopiaCore 'console' image
+#gives you a small images with ssh access
+
+ANGSTROM_EXTRA_INSTALL ?= ""
+DISTRO_SSH_DAEMON ?= "dropbear"
+DEPENDS = "task-boot task-qtopia-core-gui task-qtopia-core-gui"
+
+IMAGE_INSTALL = "task-boot \
+ util-linux-mount util-linux-umount \
+ ${DISTRO_SSH_DAEMON} \
+ angstrom-version \
+ task-qtopia-core-console \
+ task-qtopia-core-gui \
+ "
+
+export IMAGE_BASENAME = "trolltech-qtopia-core-gui-image"
+IMAGE_LINGUAS = ""
+
+inherit image
+
diff --git a/packages/images/unslung-image.bb b/packages/images/unslung-image.bb
index c6d4e73718..c258f4250a 100644
--- a/packages/images/unslung-image.bb
+++ b/packages/images/unslung-image.bb
@@ -87,3 +87,17 @@ unslung_clean_image () {
# #### End of Hack!
}
+
+
+# Override this function for unslung, since we don't need Apex.
+
+nslu2_pack_image () {
+ slugimage -p \
+ -b ${STAGING_LIBDIR}/nslu2-binaries/RedBoot \
+ -s ${STAGING_LIBDIR}/nslu2-binaries/SysConf \
+ -k ${DEPLOY_DIR_IMAGE}/zImage-${MACHINE}.bin \
+ -r Ramdisk:1,Flashdisk:${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.jffs2 \
+ -m ${STAGING_FIRMWARE_DIR}/NPE-B \
+ -t ${STAGING_LIBDIR}/nslu2-binaries/Trailer \
+ -o ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}-nslu2.bin
+}
diff --git a/packages/images/x11-sato-image.bb b/packages/images/x11-sato-image.bb
new file mode 100644
index 0000000000..1204f22496
--- /dev/null
+++ b/packages/images/x11-sato-image.bb
@@ -0,0 +1,29 @@
+DISTRO_SSH_DAEMON ?= "dropbear"
+DISTRO_PACKAGE_MANAGER ?= "ipkg ipkg-collateral"
+
+IMAGE_INSTALL = "\
+ task-base-extended \
+ ${DISTRO_SSH_DAEMON} \
+ ${DISTRO_PACKAGE_MANAGER} \
+ pointercal \
+ matchbox-wm \
+ matchbox-keyboard matchbox-keyboard-applet matchbox-keyboard-im \
+ matchbox-desktop \
+ ${XSERVER} \
+ xserver-kdrive-common xserver-nodm-init \
+ ttf-liberation \
+ xauth xhost xset xrandr \
+ matchbox-sato \
+ matchbox-config-gtk \
+ matchbox-themes-gtk \
+ matchbox-applet-startup-monitor \
+ xcursor-transparent-theme \
+ sato-icon-theme \
+ settings-daemon \
+"
+
+export IMAGE_BASENAME = "${PN}"
+IMAGE_LINGUAS = ""
+
+inherit image
+
diff --git a/packages/initrdscripts/devimage_0.1.bb b/packages/initrdscripts/devimage_0.1.bb
index 8eb6fa2d83..08949b9515 100644
--- a/packages/initrdscripts/devimage_0.1.bb
+++ b/packages/initrdscripts/devimage_0.1.bb
@@ -1,5 +1,6 @@
+DESCRIPTION = "Set of files to initialize bare system suitable for kernel, etc. testing."
SRC_URI = "file://devimage.sh file://passwd file://dropbear_rsa_host_key"
-PR = "r1"
+PR = "r2"
do_install() {
install -m 0755 ${WORKDIR}/devimage.sh ${D}/init
diff --git a/packages/initrdscripts/files/30-bootmenu.sh b/packages/initrdscripts/files/30-bootmenu.sh
index 1bb53d20a3..319f85aa6e 100644
--- a/packages/initrdscripts/files/30-bootmenu.sh
+++ b/packages/initrdscripts/files/30-bootmenu.sh
@@ -94,7 +94,7 @@ while read maj min nblk dev; do
add_menu_item "$dev ($fstype)"
done < /proc/partitions
-add_menu_item "NFS (nfsroot=192.168.2.200:/nfs/image)"
+add_menu_item "NFS (nfsroot=192.168.2.200:/srv/nfs/oe/image)"
total=`echo -e $list | wc -l`
num=0
@@ -145,7 +145,7 @@ path=`expr "$sel" : '[^/]*\([^ ]*\).*'`
if [ "$dev" == "NFS" ]; then
ROOT_DEVICE="/dev/nfs"
- CMDLINE="$CMDLINE nfsroot=192.168.2.200:/nfs/image"
+ CMDLINE="$CMDLINE nfsroot=192.168.2.200:/srv/nfs/oe/image"
elif [ -n "$path" ]; then
ROOT_DEVICE="/dev/loop"
CMDLINE="looproot=/dev/$dev:$path"
diff --git a/packages/initrdscripts/files/80-nfsboot.sh b/packages/initrdscripts/files/80-nfsboot.sh
index 5129a53ebb..e1588c16a8 100644
--- a/packages/initrdscripts/files/80-nfsboot.sh
+++ b/packages/initrdscripts/files/80-nfsboot.sh
@@ -31,10 +31,12 @@ if [ "$ROOT_DEVICE" = "/dev/nfs" ]; then
usb*)
echo "USB"
modprobe g_ether
+ sleep 5
;;
esac
ifconfig $device $client_ip
+ ping -c 2 $server_ip
)
echo "booting from NFS: $nfsroot"
diff --git a/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb b/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb
index 002acff0a9..19e7403b83 100644
--- a/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb
+++ b/packages/initrdscripts/initramfs-module-bootmenu_1.0.bb
@@ -1,7 +1,9 @@
SRC_URI = "file://30-bootmenu.sh"
-PR = "r3"
-RDEPENDS = "klibc-utils-fstype initramfs-uniboot initramfs-module-block initramfs-module-loop"
+PR = "r7"
DESCRIPTION = "An initramfs module with UI for selection of boot device."
+RDEPENDS = "klibc-utils-fstype initramfs-uniboot initramfs-module-block initramfs-module-loop initramfs-module-nfs"
+# For VFAT mounting.
+RRECOMMENDS = "kernel-module-nls-cp437 kernel-module-nls-iso8859-1"
do_install() {
install -d ${D}/initrd.d
diff --git a/packages/initrdscripts/initramfs-module-nfs_1.0.bb b/packages/initrdscripts/initramfs-module-nfs_1.0.bb
index acf71adb92..77c38799f3 100644
--- a/packages/initrdscripts/initramfs-module-nfs_1.0.bb
+++ b/packages/initrdscripts/initramfs-module-nfs_1.0.bb
@@ -1,5 +1,5 @@
SRC_URI = "file://80-nfsboot.sh"
-PR = "r1"
+PR = "r2"
DESCRIPTION = "An initramfs module for booting via NFS."
RDEPENDS = "initramfs-uniboot"
RRECOMMENDS = "kernel-module-g-ether kernel-module-nfs"
@@ -10,4 +10,4 @@ do_install() {
}
PACKAGE_ARCH = "all"
-FILES_${PN} += " /initrd.d/nfs "
+FILES_${PN} += " /initrd.d/* "
diff --git a/packages/initscripts/initscripts-1.0/functions b/packages/initscripts/initscripts-1.0/functions
index 358fc6edb3..fb9a914e4d 100644
--- a/packages/initscripts/initscripts-1.0/functions
+++ b/packages/initscripts/initscripts-1.0/functions
@@ -4,8 +4,8 @@
# shell scripts in the /etc/init.d directory.
#
-cpuinfo_id() { # return the Hardware module ID
- awk 'BEGIN { FS=": " } /Hardware/ { print $2 } ' </proc/cpuinfo
+machine_id() { # return the machine ID
+ awk 'BEGIN { FS=": " } /Hardware/ { gsub(" ", "_", $2); print tolower($2) } ' </proc/cpuinfo
}
killproc() { # kill the named process(es)
diff --git a/packages/initscripts/initscripts-1.0/openprotium/checkroot.sh b/packages/initscripts/initscripts-1.0/openprotium/checkroot.sh
index c69a773482..6b63b07188 100755
--- a/packages/initscripts/initscripts-1.0/openprotium/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/openprotium/checkroot.sh
@@ -205,7 +205,7 @@ then
: > /etc/mtab
fi
mount -f -o remount /
- mount -f /proc
+ grep -q '^proc /proc' /etc/mtab || mount -f /proc
test "$devfs" && grep -q '^devfs /dev' /proc/mounts && mount -f "$devfs"
fi
diff --git a/packages/initscripts/initscripts-1.0/openprotium/mountall.sh b/packages/initscripts/initscripts-1.0/openprotium/mountall.sh
new file mode 100644
index 0000000000..94ea8217fd
--- /dev/null
+++ b/packages/initscripts/initscripts-1.0/openprotium/mountall.sh
@@ -0,0 +1,27 @@
+#
+# mountall.sh Mount all filesystems.
+#
+# Version: @(#)mountall.sh 2.83-2 01-Nov-2001 miquels@cistron.nl
+#
+. /etc/default/rcS
+
+#
+# Mount local filesystems in /etc/fstab. For some reason, people
+# might want to mount "proc" several times, and mount -v complains
+# about this. So we mount "proc" filesystems without -v.
+#
+test "$VERBOSE" != no && echo "Mounting local filesystems..."
+mount -at nonfs,nosmbfs,noncpfs 2>/dev/null
+
+#
+# We might have mounted something over /dev, see if /dev/initctl is there.
+#
+if test ! -p /dev/initctl
+then
+ rm -f /dev/initctl
+ mknod -m 600 /dev/initctl p
+fi
+kill -USR1 1
+
+: exit 0
+
diff --git a/packages/initscripts/initscripts-1.0/openprotium/umountfs b/packages/initscripts/initscripts-1.0/openprotium/umountfs
new file mode 100755
index 0000000000..e489c4c1cd
--- /dev/null
+++ b/packages/initscripts/initscripts-1.0/openprotium/umountfs
@@ -0,0 +1,27 @@
+#! /bin/sh
+#
+# umountfs Turn off swap and unmount all local filesystems.
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+echo "Deactivating swap..."
+swapoff -a
+
+# We leave /proc mounted.
+echo "Unmounting local filesystems..."
+# umount anything not a pseudo file system, and not root
+# doesn't work for nested mounts at a non-root mount point
+while read device mountpt fstype options
+do
+ echo "$device" | grep -q "^/"
+ if [ $? -eq 0 ]; then
+ if [ "$mountpt" != "/" ] && [ "$mountpt" != "/dev/" ]; then
+ umount $mountpt
+ fi
+ fi
+done</proc/mounts
+
+mount -o remount,ro /
+
+: exit 0
diff --git a/packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh b/packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh
new file mode 100644
index 0000000000..6ee0d50e84
--- /dev/null
+++ b/packages/initscripts/initscripts-1.0/openprotium/umountinitrd.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+# umount the static dev - we'd probably never use it.
+#
+[ -d /dev/.static/dev ] && umount /dev/.static/dev
+#
+# if a root is found on an ext* filesystem, umount the old initrd
+#
+grep -q "/ ext" /proc/mounts
+if [ $? -eq 0 ]; then
+ umount /initrd
+fi
diff --git a/packages/initscripts/initscripts-openprotium_1.0.bb b/packages/initscripts/initscripts-openprotium_1.0.bb
index 83e89ef7a1..1ae398e962 100644
--- a/packages/initscripts/initscripts-openprotium_1.0.bb
+++ b/packages/initscripts/initscripts-openprotium_1.0.bb
@@ -15,7 +15,7 @@ PR := "${PR}.11"
FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/${P}', '${FILE_DIRNAME}/initscripts-${PV}', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
-PACKAGES = "${PN}"
+PACKAGES = "${PN}-dbg ${PN}"
SRC_URI += "file://openprotium/devfs.sh"
SRC_URI += "file://openprotium/domainname.sh"
@@ -24,16 +24,16 @@ SRC_URI += "file://openprotium/halt"
SRC_URI += "file://openprotium/reboot"
SRC_URI += "file://openprotium/flashclean"
SRC_URI += "file://openprotium/checkroot.sh"
+SRC_URI += "file://openprotium/mountall.sh"
+SRC_URI += "file://openprotium/umountinitrd.sh"
+SRC_URI += "file://openprotium/umountfs"
# Without this it is not possible to patch checkroot.sh
S = "${WORKDIR}"
do_install_append() {
- # the image build command now installs this for slugos
- # except that mine doesn't. we don't need it, but we turnup
- # expects it to at least exist
- rm ${D}${sysconfdir}/device_table
- touch ${D}${sysconfdir}/device_table
+ #rm ${D}${sysconfdir}/device_table
+ #touch ${D}${sysconfdir}/device_table
# openprotium specific scripts
# install -m 0755 ${WORKDIR}/alignment.sh ${D}${sysconfdir}/init.d
@@ -44,6 +44,8 @@ do_install_append() {
install -m 0755 ${WORKDIR}/openprotium/devices ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/openprotium/flashclean ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/openprotium/checkroot.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/openprotium/mountall.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/openprotium/umountinitrd.sh ${D}${sysconfdir}/init.d
# Remove the do install links (this detects a change to the
# initscripts .bb file - it will cause a build failure here.)
@@ -130,7 +132,7 @@ do_install_append() {
# slugos network syslog starts here (44)
update-rc.d -r ${D} mountnfs.sh start 45 S .
- update-rc.d -r ${D} bootmisc.sh start 55 S .
+ # update-rc.d -r ${D} bootmisc.sh start 55 S .
# urandom is currently disabled from S 55 (and won't work with tmpfs /var)
# ipkg-cl configure runs at S 98
@@ -158,7 +160,7 @@ do_install_append() {
# This is the special, correct, slugos umountnfs.sh (it looks in
# the /proc/mounts information, not /etc/fstab)
update-rc.d -r ${D} umountnfs.sh start 31 0 6 .
- update-rc.d -r ${D} save-rtc.sh start 25 0 6 .
+ # update-rc.d -r ${D} save-rtc.sh start 25 0 6 .
# portmap stops at 32
# slugos network syslog stops here (39)
# networking stops at 40 (nothing else does, believe me.)
diff --git a/packages/initscripts/initscripts-slugos_1.0.bb b/packages/initscripts/initscripts-slugos_1.0.bb
index 76d88f4627..0608db714d 100644
--- a/packages/initscripts/initscripts-slugos_1.0.bb
+++ b/packages/initscripts/initscripts-slugos_1.0.bb
@@ -14,7 +14,7 @@ PR := "${PR}.12"
FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/${P}', '${FILE_DIRNAME}/initscripts-${PV}', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
-PACKAGES = "${PN}"
+PACKAGES = "${PN}-dbg ${PN}"
SRC_URI += "file://alignment.sh"
SRC_URI += "file://domainname.sh"
diff --git a/packages/initscripts/initscripts_1.0.bb b/packages/initscripts/initscripts_1.0.bb
index 7fab41858b..4433d12318 100644
--- a/packages/initscripts/initscripts_1.0.bb
+++ b/packages/initscripts/initscripts_1.0.bb
@@ -4,7 +4,7 @@ PRIORITY = "required"
DEPENDS = "makedevs"
RDEPENDS = "makedevs"
LICENSE = "GPL"
-PR = "r103"
+PR = "r104"
SRC_URI = "file://functions \
file://halt \
diff --git a/packages/inputpipe/inputpipe_svn.bb b/packages/inputpipe/inputpipe_svn.bb
index 3274e9a5eb..40d78f9139 100644
--- a/packages/inputpipe/inputpipe_svn.bb
+++ b/packages/inputpipe/inputpipe_svn.bb
@@ -18,7 +18,7 @@ do_install() {
install inputpipe-client ${D}${bindir}
}
-PACKAGES = "inputpipe-server inputpipe-client"
+PACKAGES = "${PN}-dbg inputpipe-server inputpipe-client"
FILES_inputpipe-client = "${bindir}/inputpipe-client"
FILES_inputpipe-server = "${bindir}/inputpipe-server"
diff --git a/packages/ipaq-sleep/files/unbreak.patch b/packages/ipaq-sleep/files/unbreak.patch
new file mode 100644
index 0000000000..5116e9957f
--- /dev/null
+++ b/packages/ipaq-sleep/files/unbreak.patch
@@ -0,0 +1,11 @@
+--- a/ipaq-sleep.c.org 2006-01-20 19:43:14.000000000 +0200
++++ a/ipaq-sleep.c 2007-12-26 06:26:32.000000000 +0200
+@@ -108,7 +111,7 @@
+ if (fgets (buf, 32, input))
+ {
+ if (!strncmp (buf, "on ", 3))
+- r = atoi (buf + 4);
++ r = atoi (buf + 3);
+ else
+ r = -1;
+ }
diff --git a/packages/ipaq-sleep/ipaq-sleep_0.9.bb b/packages/ipaq-sleep/ipaq-sleep_0.9.bb
index d41cacdf58..a3fcbdf270 100644
--- a/packages/ipaq-sleep/ipaq-sleep_0.9.bb
+++ b/packages/ipaq-sleep/ipaq-sleep_0.9.bb
@@ -8,8 +8,10 @@ RDEPENDS = "apm"
SRC_URI_append = " file://init-script-busybox.patch;patch=1"
SRC_URI_append = " file://install-fix.patch;patch=1"
+SRC_URI_append = " file://unbreak.patch;patch=1"
-PR = "r1"
+PR = "r6"
DESCRIPTION = "Automatic sleep/suspend control daemon"
+CONFFILES_${PN} += "${sysconfdir}/ipaq-sleep.conf"
diff --git a/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb b/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb
index 23d73ebae6..3101ecb3be 100644
--- a/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb
+++ b/packages/ipkg-utils/ipkg-utils-native_1.6+cvs20050404.bb
@@ -8,7 +8,7 @@ inherit native
# Avoid circular dependencies from package_ipk.bbclass
PACKAGES = ""
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/ipkg-utils"
-INSTALL += "ipkg-list-fields arfile.py"
+INSTALL += "arfile.py"
do_stage() {
for i in ${INSTALL}; do
diff --git a/packages/ipkg/ipkg-native_0.99.163.bb b/packages/ipkg/ipkg-native_0.99.163.bb
index c8e7d08588..7a95b28159 100644
--- a/packages/ipkg/ipkg-native_0.99.163.bb
+++ b/packages/ipkg/ipkg-native_0.99.163.bb
@@ -2,7 +2,7 @@ S = "${WORKDIR}/ipkg-${PV}"
#require ipkg_${PV}.bb
require ipkg-native.inc
-PR = "r3"
+PR = "r4"
inherit autotools pkgconfig native
@@ -10,6 +10,5 @@ SRC_URI = "http://www.handhelds.org/pub/packages/ipkg/ipkg-${PV}.tar.gz \
file://is-processing.patch;patch=1 \
file://1-pkg-parse--Optimize-inefficient-parsing.patch;patch=1 \
file://2-pkg-vec--Optimize-gross-inefficiency.patch;patch=1 \
- file://ipkg_bugfix.patch;patch=1 \
"
diff --git a/packages/ixp4xx/ixp4xx-csr_2.0.bb b/packages/ixp4xx/ixp4xx-csr_2.0.bb
index a160fe4609..e462c505fb 100644
--- a/packages/ixp4xx/ixp4xx-csr_2.0.bb
+++ b/packages/ixp4xx/ixp4xx-csr_2.0.bb
@@ -82,7 +82,6 @@ do_stage () {
install -m 0644 src/include/*.h ${STAGING_INCDIR}/linux/ixp4xx-csr/
}
-PACKAGES = "${PN}"
do_install () {
install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/ixp400
diff --git a/packages/ixp4xx/ixp4xx-csr_2.1.1.bb b/packages/ixp4xx/ixp4xx-csr_2.1.1.bb
index cc063b523e..32685d30f6 100644
--- a/packages/ixp4xx/ixp4xx-csr_2.1.1.bb
+++ b/packages/ixp4xx/ixp4xx-csr_2.1.1.bb
@@ -113,7 +113,6 @@ do_stage () {
fi
}
-PACKAGES = "${PN}"
do_install () {
install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/ixp400
diff --git a/packages/ixp4xx/ixp4xx-csr_2.1.bb b/packages/ixp4xx/ixp4xx-csr_2.1.bb
index e72de05071..e95f807107 100644
--- a/packages/ixp4xx/ixp4xx-csr_2.1.bb
+++ b/packages/ixp4xx/ixp4xx-csr_2.1.bb
@@ -105,7 +105,6 @@ do_stage () {
fi
}
-PACKAGES = "${PN}"
do_install () {
install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/kernel/drivers/ixp400
diff --git a/packages/linux/linux-handhelds-2.6/rx1950/.mtn2git_empty b/packages/ixp4xx/ixp4xx-npe-2.4/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/rx1950/.mtn2git_empty
+++ b/packages/ixp4xx/ixp4xx-npe-2.4/.mtn2git_empty
diff --git a/packages/ixp4xx/ixp4xx-npe-2.4/Intel b/packages/ixp4xx/ixp4xx-npe-2.4/Intel
new file mode 100644
index 0000000000..2d57fedc15
--- /dev/null
+++ b/packages/ixp4xx/ixp4xx-npe-2.4/Intel
@@ -0,0 +1,40 @@
+The ixp4xx-npe package (which installs unmodified Intel NPE microcode
+files in /lib/firmware/NPE-B and /lib/firmware/NPE-C) is licensed
+according to the following Intel Software License Agreement:
+
+INTEL SOFTWARE LICENSE AGREEMENT
+
+Copyright (c) 2007, Intel Corporation.
+All rights reserved.
+
+Redistribution. Redistribution and use in binary form, without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions must reproduce the above copyright notice and the
+following disclaimer in the documentation and/or other materials
+provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its suppliers
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+* No reverse engineering, decompilation, or disassembly of this software is permitted.
+
+Limited patent license. Intel Corporation grants a world-wide,
+royalty-free, non-exclusive license under patents it now or hereafter
+owns or controls to make, have made, use, import, offer to sell and
+sell (.Utilize.) this software, but solely to the extent that any such
+patent is necessary to Utilize the software alone. The patent license
+shall not apply to any combinations which include this software. No
+hardware per se is licensed hereunder.
+
+DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
diff --git a/packages/ixp4xx/ixp4xx-npe_2.4.bb b/packages/ixp4xx/ixp4xx-npe_2.4.bb
index 71dc71e274..1d999e3d4b 100644
--- a/packages/ixp4xx/ixp4xx-npe_2.4.bb
+++ b/packages/ixp4xx/ixp4xx-npe_2.4.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "NPE firmware for the IXP4xx line of devices"
-LICENSE = "Intel Software Licence Agreement"
-PR = "r0"
+LICENSE = "Intel"
+PR = "r1"
DEPENDS = "ixp4xx-npe-native"
# You need to download the IPL_ixp400NpeLibrary-2_4.zip file (without crypto) from:
@@ -9,7 +9,8 @@ DEPENDS = "ixp4xx-npe-native"
# and put it in your downloads directory so bitbake will find it.
# Make sure you *read* and accept the license - it is not a standard one.
-SRC_URI = "http://You-Have-To-Download-The-Microcode-Manually-So-Please-Read-ixp4xx-npe_2.4.bb-For-Instructions/IPL_ixp400NpeLibrary-2_4.zip"
+SRC_URI = "http://You-Have-To-Download-The-Microcode-Manually-So-Please-Read-ixp4xx-npe_2.4.bb-For-Instructions/IPL_ixp400NpeLibrary-2_4.zip \
+ file://Intel"
S = "${WORKDIR}/ixp400_xscale_sw/src/npeDl"
COMPATIBLE_MACHINE = "(nslu2|ixp4xx)"
@@ -28,6 +29,8 @@ do_install() {
rm ${S}/NPE-C
mv ${S}/NPE-C.* ${S}/NPE-C
install ${S}/NPE-C ${D}/${base_libdir}/firmware/
+ install -d ${D}/${datadir}/common-licenses/
+ install -m 0644 ${WORKDIR}/Intel ${D}${datadir}/common-licenses/
}
do_populate_staging() {
diff --git a/packages/linux/linux-handhelds-2.6/rx3000/.mtn2git_empty b/packages/jamvm/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/rx3000/.mtn2git_empty
+++ b/packages/jamvm/files/.mtn2git_empty
diff --git a/packages/jamvm/jamvm/jamvm-1.3.1-size-defaults.patch b/packages/jamvm/files/jamvm-1.3.1-size-defaults.patch
index a41beee982..a41beee982 100644
--- a/packages/jamvm/jamvm/jamvm-1.3.1-size-defaults.patch
+++ b/packages/jamvm/files/jamvm-1.3.1-size-defaults.patch
diff --git a/packages/jamvm/files/jamvm_1.5.0-initial.patch b/packages/jamvm/files/jamvm_1.5.0-initial.patch
new file mode 100644
index 0000000000..9b972da014
--- /dev/null
+++ b/packages/jamvm/files/jamvm_1.5.0-initial.patch
@@ -0,0 +1,82 @@
+Index: jamvm-1.5.0/configure.ac
+===================================================================
+--- jamvm-1.5.0.orig/configure.ac 2007-12-20 00:01:08.000000000 +0100
++++ jamvm-1.5.0/configure.ac 2007-12-20 00:03:40.000000000 +0100
+@@ -22,7 +22,7 @@
+ dnl Process this file with autoconf to produce a configure script.
+
+ AC_INIT(src/jam.c)
+-AM_INIT_AUTOMAKE(jamvm, 1.5.0)
++AM_INIT_AUTOMAKE(jamvm-initial, 1.5.0)
+ AC_CONFIG_HEADERS([src/config.h])
+ AC_PREFIX_DEFAULT(/usr/local/jamvm)
+
+Index: jamvm-1.5.0/java-initial
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ jamvm-1.5.0/java-initial 2007-12-20 00:03:27.000000000 +0100
+@@ -0,0 +1,5 @@
++#!/bin/sh
++#
++# Wrapper script inspired by the one provided by cacao.
++
++exec jamvm-initial ${1+"$@"}
+Index: jamvm-1.5.0/lib/Makefile.am
+===================================================================
+--- jamvm-1.5.0.orig/lib/Makefile.am 2007-12-20 00:05:24.000000000 +0100
++++ jamvm-1.5.0/lib/Makefile.am 2007-12-20 00:05:28.000000000 +0100
+@@ -19,7 +19,7 @@
+ ## Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ ##
+
+-CP_LIB_DIR = ${with_classpath_install_dir}/share/classpath
++CP_LIB_DIR = ${with_classpath_install_dir}/share/classpath-initial
+ GLIBJ_ZIP = ${CP_LIB_DIR}/glibj.zip
+
+ SUBDIRS = jamvm java gnu sun
+Index: jamvm-1.5.0/src/class.h
+===================================================================
+--- jamvm-1.5.0.orig/src/class.h 2007-12-20 00:06:34.000000000 +0100
++++ jamvm-1.5.0/src/class.h 2007-12-20 00:16:41.000000000 +0100
+@@ -39,11 +39,11 @@
+ separate class files in a directory structure */
+
+ #ifdef USE_ZIP
+-#define JAMVM_CLASSES INSTALL_DIR"/share/jamvm/classes.zip"
+-#define CLASSPATH_CLASSES CLASSPATH_INSTALL_DIR"/share/classpath/glibj.zip"
++#define JAMVM_CLASSES CLASSPATH_INSTALL_DIR"/share/jamvm-initial/classes.zip"
++#define CLASSPATH_CLASSES CLASSPATH_INSTALL_DIR"/share/classpath-initial/glibj.zip"
+ #else
+-#define JAMVM_CLASSES INSTALL_DIR"/share/jamvm/classes"
+-#define CLASSPATH_CLASSES CLASSPATH_INSTALL_DIR"/share/classpath"
++#define JAMVM_CLASSES CLASSPATH_INSTALL_DIR"/share/jamvm-initial/classes"
++#define CLASSPATH_CLASSES CLASSPATH_INSTALL_DIR"/share/classpath-initial"
+ #endif
+
+ #define DFLT_BCP JAMVM_CLASSES":"CLASSPATH_CLASSES
+Index: jamvm-1.5.0/src/dll.c
+===================================================================
+--- jamvm-1.5.0.orig/src/dll.c 2007-12-20 00:01:24.000000000 +0100
++++ jamvm-1.5.0/src/dll.c 2007-12-20 00:03:27.000000000 +0100
+@@ -294,7 +294,7 @@
+ }
+
+ char *getBootDllPath() {
+- return CLASSPATH_INSTALL_DIR"/lib/classpath";
++ return CLASSPATH_INSTALL_DIR"/lib/classpath-initial";
+ }
+
+ char *getDllName(char *name) {
+Index: jamvm-1.5.0/src/Makefile.am
+===================================================================
+--- jamvm-1.5.0.orig/src/Makefile.am 2007-12-20 00:21:37.000000000 +0100
++++ jamvm-1.5.0/src/Makefile.am 2007-12-20 00:21:46.000000000 +0100
+@@ -23,7 +23,7 @@
+ DIST_SUBDIRS = os arch interp
+
+ bin_PROGRAMS = jamvm
+-include_HEADERS = jni.h
++noinst_HEADERS = jni.h
+
+ lib_LTLIBRARIES = libjvm.la
+ noinst_LTLIBRARIES = libcore.la
diff --git a/packages/jamvm/jamvm-initial_1.5.0.bb b/packages/jamvm/jamvm-initial_1.5.0.bb
new file mode 100644
index 0000000000..3369733340
--- /dev/null
+++ b/packages/jamvm/jamvm-initial_1.5.0.bb
@@ -0,0 +1,36 @@
+SUMMARY = "A compact Java Virtual Machine which conforms to the JVM specification version 2."
+HOMEPAGE = "http://jamvm.sourceforge.net/"
+LICENSE = "GPL"
+
+DEPENDS = "zlib-native classpath-initial jikes-initial"
+
+PROVIDES = "virtual/java-initial"
+
+S = "${WORKDIR}/jamvm-${PV}"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/jamvm/jamvm-${PV}.tar.gz \
+ file://jamvm_${PV}-initial.patch;patch=1;pnum=1 \
+ "
+
+# This uses 32 bit arm, so force the instruction set to arm, not thumb
+ARM_INSTRUCTION_SET = "arm"
+
+inherit native autotools
+
+EXTRA_OECONF = "\
+ --with-classpath-install-dir=${STAGING_DIR_NATIVE}\
+ --program-suffix=-initial \
+ "
+
+CFLAGS += "-DDEFAULT_MAX_HEAP=16*MB"
+
+do_compile() {
+ oe_runmake \
+ JAVAC=jikes-initial \
+ GLIBJ_ZIP=${STAGING_DATADIR_NATIVE}/classpath-initial/glibj.zip
+}
+
+do_stage_append() {
+ install -d ${STAGING_BINDIR}
+ install -m 0755 java-initial ${STAGING_BINDIR}
+}
diff --git a/packages/jamvm/jamvm.inc b/packages/jamvm/jamvm.inc
new file mode 100644
index 0000000000..36378370c5
--- /dev/null
+++ b/packages/jamvm/jamvm.inc
@@ -0,0 +1,22 @@
+DESCRIPTION = "A compact Java Virtual Machine which conforms to the JVM specification version 2."
+HOMEPAGE = "http://jamvm.sourceforge.net/"
+LICENSE = "GPL"
+
+DEPENDS = "zlib classpath virtual/javac-native"
+RDEPENDS = "classpath"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/jamvm/jamvm-${PV}.tar.gz"
+
+RPROVIDES_jamvm = "java2-runtime"
+
+# This uses 32 bit arm, so force the instruction set to arm, not thumb
+ARM_INSTRUCTION_SET = "arm"
+
+inherit autotools update-alternatives
+
+EXTRA_OECONF = "--with-classpath-install-dir=${prefix}"
+CFLAGS += "-DDEFAULT_MAX_HEAP=16*MB"
+
+ALTERNATIVE_NAME = "java"
+ALTERNATIVE_PATH = "${bindir}/jamvm"
+ALTERNATIVE_PRIORITY = "10"
diff --git a/packages/jamvm/jamvm/sh3sh4-support.patch b/packages/jamvm/jamvm/sh3sh4-support.patch
deleted file mode 100644
index 8fa0d8c161..0000000000
--- a/packages/jamvm/jamvm/sh3sh4-support.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- configure.ac_orig 2006-05-10 21:48:31.000000000 +0000
-+++ configure.ac 2006-05-10 21:49:56.000000000 +0000
-@@ -66,6 +66,8 @@
- arm*-*-linux*) host_cpu=arm host_os=linux ;;
- arm*-*-openbsd*) host_cpu=arm host_os=linux libdl_needed=no ;;
- arm*-*-freebsd*) host_cpu=arm host_os=linux libdl_needed=no ;;
-+sh3-*-linux*) host_cpu=sh3 host_os=linux libdl_needed=no ;;
-+sh4-*-linux*) host_cpu=sh4 host_os=linux libdl_needed=no ;;
- powerpc*-*-linux*) host_cpu=powerpc host_os=linux ;;
- powerpc*-*-openbsd*) host_cpu=powerpc host_os=linux libdl_needed=no ;;
- powerpc*-*-freebsd*) host_cpu=powerpc host_os=linux libdl_needed=no ;;
diff --git a/packages/jamvm/jamvm_1.4.5.bb b/packages/jamvm/jamvm_1.4.5.bb
index 489b4fb94b..3cc0431266 100644
--- a/packages/jamvm/jamvm_1.4.5.bb
+++ b/packages/jamvm/jamvm_1.4.5.bb
@@ -1,24 +1,4 @@
-DESCRIPTION = "A compact Java Virtual Machine which conforms to the JVM specification version 2."
-HOMEPAGE = "http://jamvm.sourceforge.net/"
-LICENSE = "GPL"
-PRIORITY = "optional"
-SECTION = "interpreters"
+require jamvm.inc
-DEPENDS = "zlib classpath"
-RDEPENDS = "classpath (>= 0.18) classpath-common (>= 0.18)"
+SRC_URI += "file://jamvm-1.3.1-size-defaults.patch;patch=1"
-SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz \
- file://jamvm-1.3.1-size-defaults.patch;patch=1"
-
-# This uses 32 bit arm, so force the instruction set to arm, not thumb
-ARM_INSTRUCTION_SET = "arm"
-
-inherit autotools update-alternatives
-
-EXTRA_OECONF = "--with-classpath-install-dir=${prefix}"
-CFLAGS += "-DDEFAULT_MAX_HEAP=16*MB"
-
-PROVIDES = "virtual/java"
-ALTERNATIVE_NAME = "java"
-ALTERNATIVE_PATH = "${bindir}/jamvm"
-ALTERNATIVE_PRIORITY = "10"
diff --git a/packages/jamvm/jamvm_1.5.0.bb b/packages/jamvm/jamvm_1.5.0.bb
new file mode 100644
index 0000000000..efa959f0f9
--- /dev/null
+++ b/packages/jamvm/jamvm_1.5.0.bb
@@ -0,0 +1,5 @@
+require jamvm.inc
+
+PR = "r0"
+
+
diff --git a/packages/jikes/jikes-initial.bb b/packages/jikes/jikes-initial.bb
new file mode 100644
index 0000000000..0e2f4d0748
--- /dev/null
+++ b/packages/jikes/jikes-initial.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Initial Java 1.4-compatible (and not higher) compiler"
+
+DEPENDS = "jikes-native classpath-initial"
+
+SRC_URI = ""
+
+S = "${WORKDIR}"
+
+inherit native
+
+do_configure() {
+ :
+}
+
+do_compile() {
+ echo "#!/bin/sh" > jikes-initial
+ echo "${STAGING_BINDIR_NATIVE}/jikes -bootclasspath ${STAGING_DATADIR_NATIVE}/classpath-initial/glibj.zip \$@" >> jikes-initial
+}
+
+do_stage() {
+ install -d ${STAGING_BINDIR}
+ install -m 0755 jikes-initial ${STAGING_BINDIR}
+}
diff --git a/packages/jikes/jikes-native_1.21.bb b/packages/jikes/jikes-native_1.21.bb
index 2996046639..b95cbfcd75 100644
--- a/packages/jikes/jikes-native_1.21.bb
+++ b/packages/jikes/jikes-native_1.21.bb
@@ -1,7 +1,6 @@
inherit native
require jikes_${PV}.bb
-PROVIDES = "virtual/javac-native"
S = "${WORKDIR}/jikes-${PV}"
do_stage() {
diff --git a/packages/juce/juce_1.29.bb b/packages/juce/juce_1.29.bb
index c5a920a0dc..59fd25f2b8 100644
--- a/packages/juce/juce_1.29.bb
+++ b/packages/juce/juce_1.29.bb
@@ -28,6 +28,6 @@ do_install() {
install -m 0655 demo/build/linux/build/jucedemo ${D}${bindir}
}
-PACKAGES = "jucedemo"
+PACKAGES = "${PN}-dbg jucedemo"
FILES_jucedemo = "${bindir}"
diff --git a/packages/kaffe/kaffe-gtk_1.1.5.bb b/packages/kaffe/kaffe-gtk_1.1.5.bb
index 2e53f1938b..4dcc916e86 100644
--- a/packages/kaffe/kaffe-gtk_1.1.5.bb
+++ b/packages/kaffe/kaffe-gtk_1.1.5.bb
@@ -4,6 +4,6 @@ S = "${WORKDIR}/kaffe-${PV}"
require kaffe.inc
-DEPENDS += "glib-2.0 gmp gtk+ libart-lgpl pango zlib libxtst kaffeh-native"
+DEPENDS += "glib-2.0 gmp gtk+ pango zlib libxtst kaffeh-native"
EXTRA_OECONF += ""
diff --git a/packages/kaffe/kaffe-gtk_cvs.bb b/packages/kaffe/kaffe-gtk_cvs.bb
index c48f48f1cc..d75eb63319 100644
--- a/packages/kaffe/kaffe-gtk_cvs.bb
+++ b/packages/kaffe/kaffe-gtk_cvs.bb
@@ -7,6 +7,6 @@ S = "${WORKDIR}/kaffe"
require kaffe.inc
-DEPENDS += "glib-2.0 gmp gtk+ libart-lgpl pango zlib libxtst kaffeh-native"
+DEPENDS += "glib-2.0 gmp gtk+ pango zlib libxtst kaffeh-native"
EXTRA_OECONF += ""
diff --git a/packages/kaffe/kaffe.inc b/packages/kaffe/kaffe.inc
index 2d536b3dea..7863f733c0 100644
--- a/packages/kaffe/kaffe.inc
+++ b/packages/kaffe/kaffe.inc
@@ -2,7 +2,7 @@ DESCRIPTION = "Kaffe is a clean room implementation of the Java Virtual Machine"
HOMEPAGE = "http://www.kaffe.org/"
LICENSE = "GPL LGPL W3C Classpath BSD"
-DEPENDS = "jikes-native fastjar-native libffi zip-native"
+DEPENDS = "virtual/javac-native fastjar-native libffi zip-native libart-lgpl"
RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
SRC_URI += "file://disable-automake-checks.patch;patch=1"
@@ -44,10 +44,6 @@ oe_runconf () {
fi
}
-PACKAGES =+ "${PN}-common"
-FILES_${PN} += "${libdir}/${PN}"
-FILES_${PN}-common = "${libdir}/${PN}/jre/lib/*.jar"
-
do_install () {
autotools_do_install
@@ -84,3 +80,7 @@ pkg_postrm_${PN} () {
update-alternatives --remove $name ${libdir}/${PN}/jre/bin/$name
done
}
+
+PACKAGES =+ "${PN}-common"
+FILES_${PN} += "${libdir}/${PN}"
+FILES_${PN}-common = "${libdir}/${PN}/jre/lib/*.jar"
diff --git a/packages/kanjipad/kanjipad_svn.bb b/packages/kanjipad/kanjipad_svn.bb
new file mode 100644
index 0000000000..73c6ddba0f
--- /dev/null
+++ b/packages/kanjipad/kanjipad_svn.bb
@@ -0,0 +1,12 @@
+require kanjipad.inc
+
+DEPENDS += "perl-native"
+PV = "2.0.0+svn${SRCDATE}"
+PR = "r1"
+
+SRC_URI = "svn://svn.gnome.org/svn/${PN}/;module=trunk"
+S = "${WORKDIR}/trunk"
+
+do_compile_prepend() {
+ export CFLAGS='${TARGET_CFLAGS} -DFOR_PILOT_COMPAT -DKP_LIBDIR="${libdir}/kanjipad" -DBINDIR="${bindir}" `pkg-config --cflags gtk+-2.0` `pkg-config --cflags glib-2.0`'
+}
diff --git a/packages/kdepimpi/kdepimpi-base.inc b/packages/kdepimpi/kdepimpi-base.inc
index 5a50be3de7..250cab0614 100644
--- a/packages/kdepimpi/kdepimpi-base.inc
+++ b/packages/kdepimpi/kdepimpi-base.inc
@@ -53,7 +53,7 @@ inherit palmtop
do_configure_prepend() {
mv ${S}/kabc/formats/binary/kabcformat_binaryE.pro ${S}/kabc/formats/binary/binaryE.pro
- echo -e "TEMPLATE=subdirs\nSUBDIRS=${SUBDIRS}\n" >all.pro
+ printf "TEMPLATE=subdirs\nSUBDIRS=${SUBDIRS}\n" >all.pro
for d in ${SUBDIRS}
do
if [ -f ${d}/`basename ${d}`E.pro ];
@@ -150,7 +150,7 @@ do_install() {
}
-PACKAGES = "libmicrokcal libmicrokabc kopi-applet kopi kapi libmicrokdelibs kammu libmicrokammu"
+PACKAGES = "${PN}-dbg libmicrokcal libmicrokabc kopi-applet kopi kapi libmicrokdelibs kammu libmicrokammu"
FILES_kopi = "${bindir}/kopi ${palmtopdir}/apps/1Pim/korganizer.desktop ${palmtopdir}/pics/kdepim/korganizer/* "
FILES_kapi = "${bindir}/kapi ${palmtopdir}/apps/1Pim/kaddressbook.desktop ${palmtopdir}/pics/kdepim/kaddressbook/* ${palmtopdir}/lib/libmicrokabc_* ${palmtopdir}/lib/libmicrokabcformat_binary*"
diff --git a/packages/kdepimpi/pwmpi.inc b/packages/kdepimpi/pwmpi.inc
index 3866b70977..9e3cd8eae7 100644
--- a/packages/kdepimpi/pwmpi.inc
+++ b/packages/kdepimpi/pwmpi.inc
@@ -36,5 +36,4 @@ do_install() {
install -m 0755 ${S}/dest/pwmpi ${D}${bindir}
}
-PACKAGES = "${PN}"
FILES_${PN} = "${palmtopdir} ${bindir}"
diff --git a/packages/kexec/kexec-tools-1.101/kexec-arm-atags.patch b/packages/kexec/kexec-tools-1.101/kexec-arm-atags.patch
new file mode 100644
index 0000000000..bf6f640035
--- /dev/null
+++ b/packages/kexec/kexec-tools-1.101/kexec-arm-atags.patch
@@ -0,0 +1,294 @@
+---
+ kexec/arch/arm/kexec-zImage-arm.c | 259 ++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 252 insertions(+), 7 deletions(-)
+
+Index: kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c
+===================================================================
+--- kexec-tools-1.101.orig/kexec/arch/arm/kexec-zImage-arm.c 2007-12-26 21:17:07.000000000 +0000
++++ kexec-tools-1.101/kexec/arch/arm/kexec-zImage-arm.c 2007-12-27 01:24:25.000000000 +0000
+@@ -1,11 +1,83 @@
++/*
++ * - 08/21/2007 ATAG support added by Uli Luckas <u.luckas@road.de>
++ *
++ */
+ #define _GNU_SOURCE
+ #include <stdio.h>
+ #include <string.h>
+ #include <stdlib.h>
+ #include <errno.h>
+ #include <limits.h>
++#include <stdint.h>
++#include <getopt.h>
++#include <arch/options.h>
++#include <asm/page.h>
+ #include "../../kexec.h"
+
++#define COMMAND_LINE_SIZE 1024
++#define BOOT_PARAMS_SIZE 1536
++
++struct tag_header {
++ uint32_t size;
++ uint32_t tag;
++};
++
++/* The list must start with an ATAG_CORE node */
++#define ATAG_CORE 0x54410001
++
++struct tag_core {
++ uint32_t flags; /* bit 0 = read-only */
++ uint32_t pagesize;
++ uint32_t rootdev;
++};
++
++/* it is allowed to have multiple ATAG_MEM nodes */
++#define ATAG_MEM 0x54410002
++
++struct tag_mem32 {
++ uint32_t size;
++ uint32_t start; /* physical start address */
++};
++
++/* describes where the compressed ramdisk image lives (virtual address) */
++/*
++ * this one accidentally used virtual addresses - as such,
++ * it's deprecated.
++ */
++#define ATAG_INITRD 0x54410005
++
++/* describes where the compressed ramdisk image lives (physical address) */
++#define ATAG_INITRD2 0x54420005
++
++struct tag_initrd {
++ uint32_t start; /* physical start address */
++ uint32_t size; /* size of compressed ramdisk image in bytes */
++};
++
++/* command line: \0 terminated string */
++#define ATAG_CMDLINE 0x54410009
++
++struct tag_cmdline {
++ char cmdline[1]; /* this is the minimum size */
++};
++
++/* The list ends with an ATAG_NONE node. */
++#define ATAG_NONE 0x00000000
++
++struct tag {
++ struct tag_header hdr;
++ union {
++ struct tag_core core;
++ struct tag_mem32 mem;
++ struct tag_initrd initrd;
++ struct tag_cmdline cmdline;
++ } u;
++};
++
++#define tag_next(t) ((struct tag *)((uint32_t *)(t) + (t)->hdr.size))
++#define byte_size(t) ((t)->hdr.size << 2)
++#define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type) + 3) >> 2)
++
+ int zImage_arm_probe(const char *buf, off_t len)
+ {
+ /*
+@@ -14,21 +86,194 @@ int zImage_arm_probe(const char *buf, of
+ */
+ return 0;
+ }
++
+ void zImage_arm_usage(void)
+ {
++ printf( " --command-line=STRING Set the kernel command line to STRING.\n"
++ " --append=STRING Set the kernel command line to STRING.\n"
++ " --initrd=FILE Use FILE as the kernel's initial ramdisk.\n"
++ " --ramdisk=FILE Use FILE as the kernel's initial ramdisk.\n"
++ );
+ }
+-int zImage_arm_load(int argc, char **argv, const char *buf, off_t len,
++
++static
++struct tag * atag_read_tags(void)
++{
++ static unsigned long buf[BOOT_PARAMS_SIZE];
++ const char fn[]= "/proc/atags";
++ FILE *fp;
++ fp = fopen(fn, "r");
++ if (!fp) {
++ fprintf(stderr, "Cannot open %s: %s\n",
++ fn, strerror(errno));
++ return NULL;
++ }
++
++ fread(buf, sizeof(buf[1]), BOOT_PARAMS_SIZE, fp);
++ if (ferror(fp)) {
++ fprintf(stderr, "Cannot read %s: %s\n",
++ fn, strerror(errno));
++ fclose(fp);
++ return NULL;
++ }
++
++ fclose(fp);
++ return (struct tag *) buf;
++}
++
++
++static
++int atag_arm_load(struct kexec_info *info, unsigned long base,
++ const char *command_line, off_t command_line_len,
++ const char *initrd, off_t initrd_len)
++{
++ struct tag *saved_tags = atag_read_tags();
++ char *buf;
++ off_t len;
++ struct tag *params;
++ uint32_t *initrd_start;
++
++ buf = xmalloc(getpagesize());
++ if (!buf) {
++ fprintf(stderr, "Compiling ATAGs: out of memory\n");
++ return -1;
++ }
++
++ memset(buf, 0xff, getpagesize());
++ params = (struct tag *)buf;
++
++ if (saved_tags) {
++ // Copy tags
++ saved_tags = (struct tag *) saved_tags;
++ while(byte_size(saved_tags)) {
++ switch (saved_tags->hdr.tag) {
++ case ATAG_INITRD:
++ case ATAG_INITRD2:
++ case ATAG_CMDLINE:
++ case ATAG_NONE:
++ // skip these tags
++ break;
++ default:
++ // copy all other tags
++ memcpy(params, saved_tags, byte_size(saved_tags));
++ params = tag_next(params);
++ }
++ saved_tags = tag_next(saved_tags);
++ }
++ } else {
++ params->hdr.size = 2;
++ params->hdr.tag = ATAG_CORE;
++ params = tag_next(params);
++ }
++
++ if (initrd) {
++ params->hdr.size = tag_size(tag_initrd);
++ params->hdr.tag = ATAG_INITRD2;
++ initrd_start = &params->u.initrd.start;
++ params->u.initrd.size = initrd_len;
++ params = tag_next(params);
++ }
++
++ if (command_line) {
++ params->hdr.size = (sizeof(struct tag_header) + command_line_len + 3) >> 2;
++ params->hdr.tag = ATAG_CMDLINE;
++ memcpy(params->u.cmdline.cmdline, command_line,
++ command_line_len);
++ params->u.cmdline.cmdline[command_line_len - 1] = '\0';
++ params = tag_next(params);
++ }
++
++ params->hdr.size = 0;
++ params->hdr.tag = ATAG_NONE;
++
++ len = ((char *)params - buf) + sizeof(struct tag_header);
++
++ add_segment(info, buf, len, base, len);
++
++ if (initrd) {
++ struct memory_range *range;
++ int ranges;
++ get_memory_ranges(&range, &ranges);
++ *initrd_start = locate_hole(info, initrd_len, getpagesize(), range[0].start + 0x800000, ULONG_MAX, INT_MAX);
++ if (*initrd_start == ULONG_MAX)
++ return -1;
++ add_segment(info, initrd, initrd_len, *initrd_start, initrd_len);
++ }
++
++ return 0;
++}
++
++int zImage_arm_load(int argc, char **argv, const char *buf, off_t len,
+ struct kexec_info *info)
+ {
+ unsigned long base;
+- unsigned int offset = 0x8000; /* 32k offset from memory start */
++ unsigned int atag_offset = 0x1000; /* 4k offset from memory start */
++ unsigned int offset = 0x8000; /* 32k offset from memory start */
++ const char *command_line;
++ off_t command_line_len;
++ const char *ramdisk;
++ char *ramdisk_buf;
++ off_t ramdisk_length;
++ int opt;
++#define OPT_APPEND 'a'
++#define OPT_RAMDISK 'r'
++ static const struct option options[] = {
++ KEXEC_ARCH_OPTIONS
++ { "command-line", 1, 0, OPT_APPEND },
++ { "append", 1, 0, OPT_APPEND },
++ { "initrd", 1, 0, OPT_RAMDISK },
++ { "ramdisk", 1, 0, OPT_RAMDISK },
++ { 0, 0, 0, 0 },
++ };
++ static const char short_options[] = KEXEC_ARCH_OPT_STR "a:r:";
++
++ /*
++ * Parse the command line arguments
++ */
++ command_line = 0;
++ command_line_len = 0;
++ ramdisk = 0;
++ ramdisk_buf = 0;
++ ramdisk_length = 0;
++ while((opt = getopt_long(argc, argv, short_options, options, 0)) != -1) {
++ switch(opt) {
++ default:
++ /* Ignore core options */
++ if (opt < OPT_ARCH_MAX) {
++ break;
++ }
++ case '?':
++ usage();
++ return -1;
++ case OPT_APPEND:
++ command_line = optarg;
++ break;
++ case OPT_RAMDISK:
++ ramdisk = optarg;
++ break;
++ }
++ }
++ if (command_line) {
++ command_line_len = strlen(command_line) + 1;
++ if (command_line_len > COMMAND_LINE_SIZE)
++ command_line_len = COMMAND_LINE_SIZE;
++ }
++ if (ramdisk) {
++ ramdisk_buf = slurp_file(ramdisk, &ramdisk_length);
++ }
++
+ base = locate_hole(info,len+offset,0,0,ULONG_MAX,INT_MAX);
+ if (base == ULONG_MAX)
+- {
+ return -1;
+- }
+- base += offset;
+- add_segment(info,buf,len,base,len);
+- info->entry = (void*)base;
++
++ if (atag_arm_load(info, base + atag_offset,
++ command_line, command_line_len,
++ ramdisk_buf, ramdisk_length) == -1)
++ return -1;
++
++ add_segment(info, buf, len, base + offset, len);
++
++ info->entry = (void*)base + offset;
++
+ return 0;
+ }
diff --git a/packages/kexec/kexec-tools_1.101.bb b/packages/kexec/kexec-tools_1.101.bb
index 4dfab1e06f..d152a678ed 100644
--- a/packages/kexec/kexec-tools_1.101.bb
+++ b/packages/kexec/kexec-tools_1.101.bb
@@ -4,12 +4,13 @@ HOMEPAGE = "http://www.xmission.com/~ebiederm/files/kexec/"
SECTION = "kernel/userland"
DEPENDS = "virtual/kernel zlib"
LICENSE = "GPL"
-PR = "r1"
+PR = "r3"
inherit autotools
-EXTRA_OEMAKE = "LDFLAGS=-L${STAGING_LIBDIR} -Wl,--rpath-link,${STAGING_LIBDIR} "
-EXTRA_OECONF = " --with-zlib=${STAGING_LIBDIR}/.."
+export LDFLAGS = "-L${STAGING_LIBDIR}"
+EXTRA_OECONF = " --with-zlib=yes"
SRC_URI = "http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-${PV}.tar.gz \
- file://kexec-tools-arm.patch;patch=1 "
+ file://kexec-tools-arm.patch;patch=1 \
+ file://kexec-arm-atags.patch;patch=1"
diff --git a/packages/keyring/keyring_0.6.8.bb b/packages/keyring/keyring_0.6.8.bb
index 02403bc2e1..5696a6618b 100644
--- a/packages/keyring/keyring_0.6.8.bb
+++ b/packages/keyring/keyring_0.6.8.bb
@@ -29,7 +29,7 @@ do_install() {
install -m 0644 ${S}/*.html ${D}${palmtopdir}/help/html/
}
-PACKAGES = "${PN} ${PN}-help"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-help"
FILES_${PN} = " ${palmtopdir}${base_bindir} ${palmtopdir}/apps ${palmtopdir}/pics"
FILES_${PN}-help = " ${palmtopdir}/help/html"
diff --git a/packages/kismet/kismet_2007-10-R1.bb b/packages/kismet/kismet_2007-10-R1.bb
index 1c78d468d7..1a53c6f78f 100644
--- a/packages/kismet/kismet_2007-10-R1.bb
+++ b/packages/kismet/kismet_2007-10-R1.bb
@@ -2,8 +2,8 @@ DESCRIPTION = "Kismet is an 802.11 layer2 wireless network detector, sniffer, an
HOMEPAGE = "http://www.kismetwireless.net/"
SECTION = "console/network"
LICENSE = "GPLv2"
-DEPENDS = "expat gmp imagemagick tiff fakeroot-native zlib bzip2"
-PR = "r1"
+DEPENDS = "expat gmp imagemagick tiff fakeroot-native zlib bzip2 libpcap"
+PR = "r2"
SRC_URI = "http://www.kismetwireless.net/code/kismet-${PV}.tar.gz"
diff --git a/packages/klibc/klibc.inc b/packages/klibc/klibc.inc
index a7f0094264..539e2fbf84 100644
--- a/packages/klibc/klibc.inc
+++ b/packages/klibc/klibc.inc
@@ -46,7 +46,7 @@ INSTALLBINDIR = "${INSTALLPREFIX}bin"
INSTALLLIBDIR = "${INSTALLPREFIX}lib"
INSTALLINCDIR = "${INSTALLPREFIX}include"
-PACKAGES = "${PN} ${PN}-dev ${PN}-doc"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-dev ${PN}-doc"
FILES_${PN} = "/lib/*.so* ${INSTALLBINDIR}"
FILES_${PN}-dev = "/usr/bin ${INSTALLINCDIR} ${INSTALLLIBDIR}"
diff --git a/packages/knights/knights_1.14.bb b/packages/knights/knights_1.14.bb
index 1e0766a7c7..dc3e026376 100644
--- a/packages/knights/knights_1.14.bb
+++ b/packages/knights/knights_1.14.bb
@@ -17,7 +17,7 @@ inherit palmtop
QMAKE_PROFILES = "knights.pro"
do_configure_prepend() {
- echo -e "TEMPLATE=subdirs\nSUBDIRS=qtcompat microkde knights\n" >knights.pro
+ printf "TEMPLATE=subdirs\nSUBDIRS=qtcompat microkde knights\n" >knights.pro
}
do_install() {
diff --git a/packages/linux/linux-rp-2.6.16/.mtn2git_empty b/packages/kxml2/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-rp-2.6.16/.mtn2git_empty
+++ b/packages/kxml2/files/.mtn2git_empty
diff --git a/packages/kxml2/files/makefile.patch b/packages/kxml2/files/makefile.patch
new file mode 100644
index 0000000000..9119971a64
--- /dev/null
+++ b/packages/kxml2/files/makefile.patch
@@ -0,0 +1,421 @@
+Index: kxml2-2/src/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ kxml2-2/src/Makefile 2007-11-30 04:17:21.000000000 +0100
+@@ -0,0 +1,416 @@
++#
++# Makefile created at Fri Nov 30 04:17:22 2007, by mmake
++#
++
++# Programs (with common options):
++SHELL = /bin/sh
++CP = cp
++RM = rm -f
++MV = mv -f
++SED = sed
++ETAGS = etags
++XARGS = xargs
++CAT = cat
++FIND = find
++CPP = cpp -C -P
++
++INSTALL = install
++INSTALL_PROG = $(INSTALL) -m $(MODE_PROGS)
++INSTALL_FILE = $(INSTALL) -m $(MODE_FILES)
++INSTALL_DIR = $(INSTALL) -m $(MODE_DIRS) -d
++
++# Install modes
++MODE_PROGS = 555
++MODE_FILES = 444
++MODE_DIRS = 2755
++
++# Build programs
++JAVAC = javac
++JAVADOC = gjavadoc
++JAR = fastjar
++
++# Build flags
++JAVAC_FLAGS = -source 1.3 -target 1.1
++JAVADOC_FLAGS = -version -author
++JAR_FLAGS = cvf
++JIKES_DEP_FLAG = +M
++
++# ------------------------------------------------------------------- #
++
++# Prefix for every install directory
++PREFIX =
++
++# Where to start installing the class files. Set this to an empty value
++# if you dont want to install classes
++CLASS_DIR = $(PREFIX)classes
++
++# The directory to install the jar file in. Set this to an empty value
++# if you dont want to install a jar file
++JAR_DIR = $(PREFIX)lib
++
++# The directory to install the app bundle in. Set this to an empty value
++# if you dont want to install an app bundle
++BUNDLE_DIR = $(PREFIX)lib
++
++
++# The directory to install html files generated by javadoc
++DOC_DIR = $(PREFIX)doc/api-docs
++
++# The directory to install script files in
++SCRIPT_DIR = $(PREFIX)bin
++
++# ------------------------------------------------------------------- #
++
++# The name of the jar file to install
++JAR_FILE = kxml2-2.3.0.jar
++
++#
++# The VERSION variable below should be set to a value
++# that will be tested in the .xjava code and Info.plist.
++#
++VERSION = CHANGE_ME
++
++# ------------------------------------------------------------------- #
++
++# The name of the OS X Application Bundle to install
++BUNDLE_FILE =
++
++# Folder containing App Bundle resources (Info.plist, *.icns, etc.)
++BUNDLE_RESOURCE_DIR = misc/macosx
++
++# Items to copy to the Resources folder of the bundle
++BUNDLE_RESOURCES = $(addsuffix .icns, $(basename $(APP_FILE)) Document)
++
++# Location of JavaApplicatonStub
++JAVA_STUB = /System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub
++
++# ------------------------------------------------------------------- #
++
++# Resource files:
++# Extend the list to install other files of your choice
++RESOURCE_SRC := *.properties *.gif *.au
++
++# Objects that should go into the jar file. (find syntax)
++JAR_OBJS := \( -name '*.class' -o -name '*.gif' -o -name "*.au" \
++ -o -name '*.properties' \)
++
++# Include the separate variables file if it exists
++MAKEFILE_VARS = makefile.vars
++VARS = $(wildcard $(MAKEFILE_VARS))
++ifneq ($(VARS),)
++ include $(MAKEFILE_VARS)
++endif
++
++
++# Packages we should compile
++PACKAGES = \
++ org.kxml2.wap.wml \
++ org.kxml2.wap.wv \
++ org.kxml2.wap \
++ org.kxml2.io \
++ org.kxml2.wap.syncml \
++ org.kxml2.kdom
++
++
++# All packages that can be recursively compiled.
++ALL_PACKAGES = \
++ org \
++ org.kxml2 \
++ $(PACKAGES)
++
++
++# Packages to generate docs for.
++JAVADOC_PACKAGES = $(PACKAGES)
++
++
++# Resource packages
++RESOURCES =
++
++
++# Directories with shell scripts
++SCRIPTS =
++
++# ------------------------------------------------------------------- #
++
++# A marker variable for the top level directory
++TOPLEVEL := .
++
++# Subdirectories with java files:
++JAVA_DIRS := $(subst .,/,$(PACKAGES)) $(TOPLEVEL)
++
++# Subdirectories with only resource files:
++RESOURCE_DIRS := $(subst .,/,$(RESOURCES))
++
++# All the .xjava source files:
++XJAVA_SRC := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.xjava))
++
++# All the xjava files to build
++XJAVA_OBJS := $(XJAVA_SRC:.xjava=.java)
++
++# Directory coresponding to a package
++PACKAGE_DIR = $(subst .,/,$(1))
++
++# All the (x)java files in a package
++PACKAGE_SRC = $(shell $(FIND) $(PACKAGE_DIR) \( -name '*.java' -or -name '*.xjava' \) )
++
++# All the classes to build in a package
++PACKAGE_OBJS = $(patsubst %.java,%.class,$(PACKAGE_SRC: %.xjava=%.java))
++
++# All the .java source files:
++JAVA_SRC := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.java))
++JAVA_SRC := $(XJAVA_OBJS) $(JAVA_SRC)
++
++# Dependency files:
++DEPEND_OBJS := $(JAVA_SRC:.java=.u)
++
++# The intermediate java files and main classes we should build:
++JAVA_OBJS := $(XJAVA_OBJS) $(JAVA_SRC:.java=.class)
++
++# Search for resource files in both JAVA_DIRS and RESOURCE_DIRS
++RESOURCE_OBJS := $(foreach dir, $(JAVA_DIRS) $(RESOURCE_DIRS), \
++ $(wildcard $(foreach file, $(RESOURCE_SRC), \
++ $(dir)/$(file))))
++
++# All the shell scripts source
++SCRIPT_SRCS := $(foreach dir, $(SCRIPTS), $(wildcard $(dir)/*.sh))
++# All shell scripts we should install
++SCRIPT_OBJS := $(SCRIPT_SRCS:.sh=)
++
++# All the files to install into CLASS_DIR
++INSTALL_OBJS := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.class))
++# Escape inner class delimiter $
++INSTALL_OBJS := $(subst $$,\$$,$(INSTALL_OBJS))
++# Add the resource files to be installed as well
++INSTALL_OBJS := $(INSTALL_OBJS) $(RESOURCE_OBJS)
++
++
++# ------------------------------------------------------------------- #
++
++
++define check-exit
++|| exit 1
++
++endef
++
++
++# -----------
++# Build Rules
++# -----------
++
++%.java: %.xjava
++ $(CPP) -D$(VERSION) $< $@
++
++%.class: %.java
++ $(JAVAC) $(JAVAC_FLAGS) $<
++
++%.jar: $(JAVA_OBJS) $(RESOURCE_OBJS)
++ $(FIND) $(TOPLEVEL) $(JAR_OBJS) -print | $(XARGS) \
++ $(JAR) $(JAR_FLAGS) $(JAR_FILE)
++
++%.u: %.java
++ $(JAVAC) $(JIKES_DEP_FLAG) $<
++
++
++# -------
++# Targets
++# -------
++
++.PHONY: all jar install uninstall doc clean depend tags bundle \
++ help $(ALL_PACKAGES)
++
++all:: $(JAVA_OBJS)
++
++help:
++ @echo "Usage: make {all|jar|srcjar|bundle|install|uninstall|doc|clean|depend|tags|PACKAGE_NAME}"
++ @echo " all: build all classes"
++ @echo " jar: build jar file"
++ @echo " srcjar: build source jar file"
++ @echo " bundle: build OS X app bundle"
++ @echo " install: install classes into $(CLASS_DIR)"
++ @echo " jar into $(JAR_DIR)"
++ @echo " bundle into $(BUNDLE_DIR)"
++ @echo " javadocs into $(DOC_DIR)"
++ @echo " scripts into $(SCRIPT_DIR)"
++ @echo " uninstall: remove installed files"
++ @echo " doc: generate api docs from javadoc comments"
++ @echo " clean: remove classes and temporary files"
++ @echo " depend: build class dependency info using jikes"
++ @echo " tags: build emacs tags file"
++ @echo " PACKAGE_NAME: builds all classes in this package and any subpackages."
++
++# Jar target
++ifneq ($(strip $(JAR_FILE)),)
++jar: $(JAR_FILE)
++ifneq ($(strip $(JAR_DIR)),)
++install:: $(JAR_FILE)
++ @echo "===> [Installing jar file, $(JAR_FILE) in $(JAR_DIR)] "
++ $(INSTALL_DIR) $(JAR_DIR) $(check-exit)
++ $(INSTALL_FILE) $(JAR_FILE) $(JAR_DIR) $(check-exit)
++uninstall::
++ @echo "===> [Removing jar file, $(JAR_FILE) from $(JAR_DIR)] "
++ $(RM) $(JAR_DIR)/$(JAR_FILE) $(check-exit)
++else
++install::
++ @echo "No jar install dir defined"
++endif
++clean::
++ $(RM) $(JAR_FILE)
++else
++jar:
++ @echo "No jar file defined"
++endif
++
++SRC_JAR_FILE := $(basename $(JAR_FILE))-src$(suffix $JAR_FILE)
++
++# Source jar target
++srcjar : $(SRC_JAR_FILE)
++$(SRC_JAR_FILE): $(JAVA_SRC) $(RESOURCE_OBJS)
++ $(FIND) $(TOPLEVEL) $(JAR_OBJS: .class=.java) -print | $(XARGS) \
++ $(JAR) $(JAR_FLAGS) $@
++
++# Bundle target
++ifneq ($(strip $(BUNDLE_FILE)),)
++bundle: $(BUNDLE_FILE)
++$(BUNDLE_FILE) : $(JAR_FILE)
++ $(INSTALL_DIR) $(BUNDLE_FILE)/Contents/Resources/Java $(check-exit)
++ $(INSTALL_DIR) $(BUNDLE_FILE)/Contents/MacOS $(check-exit)
++ $(INSTALL_PROG) $(JAVA_STUB) $(BUNDLE_FILE)/Contents/MacOS/ \
++ $(check-exit)
++ ( $(CAT) $(BUNDLE_RESOURCE_DIR)/Info.plist | $(SED) -e \
++ s/VERSION/$(VERSION)/ >98762infoplist876 ) $(check-exit)
++ $(INSTALL_FILE) 98762infoplist876 \
++ $(BUNDLE_FILE)/Contents/Info.plist $(check-exit)
++ $(RM) 98762infoplist876 $(check-exit)
++ $(INSTALL_FILE) $(JAR_FILE) $(BUNDLE_FILE)/Contents/Resources/Java
++ checkexit="";for f in $(BUNDLE_RESOURCES); do \
++ $(INSTALL_FILE) $(BUNDLE_RESOURCE_DIR)$$f $(BUNDLE_FILE)/Contents/Resources/ \
++ || checkexit=$?; \
++ done; test -z $$checkexit
++
++ifneq ($(strip $(BUNDLE_DIR)),)
++# This is probably bad, but I don't know how else to do it
++install:: $(BUNDLE_FILE)
++ @echo "===> [Installing app bundle, $(BUNDLE_FILE) in $(BUNDLE_DIR)] "
++ $(INSTALL_DIR) $(BUNDLE_DIR) $(check-exit)
++ $(CP) -R $(BUNDLE_FILE) $(BUNDLE_DIR) $(check-exit)
++ $(INSTALL_FILE) $(BUNDLE_FILE) $(BUNDLE_DIR) $(check-exit)
++uninstall::
++ @echo "===> [Removing bundle file, $(BUNDLE_FILE) from $(BUNDLE_DIR)] "
++ $(RM) -r $(BUNDLE_DIR)/$(BUNDLE_FILE) $(check-exit)
++else
++install::
++ @echo "No bundle install dir defined"
++endif
++clean::
++ $(RM) -r $(BUNDLE_FILE)
++else
++bundle:
++ @echo "No bundle file defined"
++endif
++
++
++# Install target for Classes and Resources
++ifneq ($(strip $(CLASS_DIR)),)
++install:: $(JAVA_OBJS)
++ @echo "===> [Installing classes in $(CLASS_DIR)] "
++ $(INSTALL_DIR) $(CLASS_DIR) $(check-exit)
++ $(foreach dir, $(JAVA_DIRS) $(RESOURCE_DIRS), \
++ $(INSTALL_DIR) $(CLASS_DIR)/$(dir) $(check-exit))
++ $(foreach file, $(INSTALL_OBJS), \
++ $(INSTALL_FILE) $(file) $(CLASS_DIR)/$(file) \
++ $(check-exit))
++uninstall::
++ @echo "===> [Removing class-files from $(CLASS_DIR)] "
++ $(foreach file, $(INSTALL_OBJS), \
++ $(RM) $(CLASS_DIR)/$(file) \
++ $(check-exit))
++else
++# Print a warning here if you like. (No class install dir defined)
++endif
++
++
++
++# Depend target
++ifeq ($(findstring jikes,$(JAVAC)),jikes)
++depend: $(XJAVA_OBJS) $(DEPEND_OBJS)
++ ( $(CAT) $(DEPEND_OBJS) | $(SED) -e '/\.class$$/d' \
++ -e '/.*$$.*/d' > $(MAKEFILE_DEPEND); $(RM) $(DEPEND_OBJS); )
++else
++depend:
++ @echo "mmake needs the jikes compiler to build class dependencies"
++endif
++
++
++
++# Doc target
++ifneq ($(strip $(JAVADOC_PACKAGES)),)
++doc: $(JAVA_SRC)
++ @echo "===> [Installing java documentation in $(DOC_DIR)] "
++ $(INSTALL_DIR) $(DOC_DIR) $(check-exit)
++ $(JAVADOC) $(JAVADOC_FLAGS) -d $(DOC_DIR) $(JAVADOC_PACKAGES)
++else
++doc:
++ @echo "You must put your source files in a package to run make doc"
++endif
++
++
++
++# Script target
++ifneq ($(strip $(SCRIPT_OBJS)),)
++all:: $(SCRIPT_OBJS)
++ifneq ($(strip $(SCRIPT_DIR)),)
++install:: $(SCRIPT_OBJS)
++ @echo "===> [Installing shell-scripts in $(SCRIPT_DIR)] "
++ $(INSTALL_DIR) $(SCRIPT_DIR) $(check-exit)
++ $(foreach file, $(SCRIPT_OBJS), \
++ $(INSTALL_PROG) $(file) $(SCRIPT_DIR) $(check-exit))
++uninstall::
++ @echo "===> [Removing shell-scripts from $(SCRIPT_DIR)] "
++ $(foreach file, $(SCRIPT_OBJS), \
++ $(RM) $(SCRIPT_DIR)/$(file) $(check-exit))
++else
++# Print a warning here if you like. (No script install dir defined)
++endif
++clean::
++ rm -f $(SCRIPT_OBJS)
++endif
++
++
++
++# Tag target
++tags:
++ @echo "Tagging"
++ $(ETAGS) $(filter-out $(XJAVA_OBJS), $(JAVA_SRC)) $(XJAVA_SRC)
++
++
++
++# Various cleanup routines
++clean::
++ $(FIND) . \( -name '*~' -o -name '*.class' \) -print | \
++ $(XARGS) $(RM)
++ $(FIND) . -name '*.u' -print | $(XARGS) $(RM)
++
++ifneq ($(strip $(XJAVA_SRC)),)
++clean::
++ $(RM) $(XJAVA_OBJS)
++endif
++
++# ----------------------------------------
++# Include the dependency graph if it exist
++# ----------------------------------------
++MAKEFILE_DEPEND = makefile.dep
++DEPEND = $(wildcard $(MAKEFILE_DEPEND))
++ifneq ($(DEPEND),)
++ include $(MAKEFILE_DEPEND)
++endif
++
++#package targets
++org : $(call PACKAGE_OBJS,org)
++org.kxml2 : $(call PACKAGE_OBJS,org.kxml2)
++org.kxml2.wap.wml : $(call PACKAGE_OBJS,org.kxml2.wap.wml)
++org.kxml2.wap.wv : $(call PACKAGE_OBJS,org.kxml2.wap.wv)
++org.kxml2.wap : $(call PACKAGE_OBJS,org.kxml2.wap)
++org.kxml2.io : $(call PACKAGE_OBJS,org.kxml2.io)
++org.kxml2.wap.syncml : $(call PACKAGE_OBJS,org.kxml2.wap.syncml)
++org.kxml2.kdom : $(call PACKAGE_OBJS,org.kxml2.kdom)
++
diff --git a/packages/kxml2/kxml2_2.3.0.bb b/packages/kxml2/kxml2_2.3.0.bb
index 284aa1af6d..994a0a5799 100644
--- a/packages/kxml2/kxml2_2.3.0.bb
+++ b/packages/kxml2/kxml2_2.3.0.bb
@@ -1,33 +1,38 @@
-DESCRIPTION = "kxml2 is a small XML pull parser"
-HOMEPAGE = "http://kxml.sourceforge.net/"
-LICENSE = "BSD"
+DESCRIPTION = "A small XML pull parser, specially designed for constrained environments such as Applets, Personal Java or MIDP devices"
+HOMEPAGE = "http://kxml.sourceforge.net"
PRIORITY = "optional"
-PR = "r0"
+SECTION = "libs"
+LICENSE = "BSD CPL LGPL"
+PR = "r1"
+inherit java-library
-JAR = ${PN}-${PV}.jar
+DEPENDS = "xmlpull"
+RDEPENDS = "libxmlpull-java"
-SRC_URI = "http://downloads.sourceforge.net/kxml/${JAR}"
+S = "${WORKDIR}"
+JAR = "${PN}-${PV}.jar"
-do_unpack() {
- :
-}
-
-do_install() {
+SRC_URI = "\
+ http://belnet.dl.sourceforge.net/sourceforge/kxml/${PN}-src-${PV}.zip \
+ file://makefile.patch;patch=1 \
+ "
-install -d ${D}${datadir}/java
-install -m 0644 ${DL_DIR}/${JAR} ${D}${datadir}/java
+do_compile() {
+ oe_runmake -C src \
+ JAVAC_FLAGS="-sourcepath . -cp ${STAGING_DATADIR}/java/xmlpull.jar" \
+ JAR="oefatal \"No jar invocation expected here.\"" \
+ oe_runmake -C src \
+ JAVAC="oefatal \"No Java compilation expected here.\"" \
+ jar
}
do_stage() {
-
-install -d ${STAGING_DATADIR}/java
-install -m 0644 ${DL_DIR}/${JAR} ${STAGING_DATADIR}/java
-
+ oe_jarinstall -s src/${JAR} ${PN}.jar
}
-PACKAGES = "${PN}"
-
-FILES_${PN} = "${datadir}/java/${JAR}"
+do_install() {
+ oe_jarinstall src/${JAR} ${PN}.jar
+}
diff --git a/packages/liba52/liba52_0.7.4.bb b/packages/liba52/liba52_0.7.4.bb
index e29e6c9b2f..743fa30f83 100644
--- a/packages/liba52/liba52_0.7.4.bb
+++ b/packages/liba52/liba52_0.7.4.bb
@@ -15,9 +15,9 @@ PACKAGES =+ "a52dec a52dec-dbg a52dec-doc"
FILES_${PN} = " ${libdir}/liba52.so.0 ${libdir}/liba52.so.0.0.0 "
FILES_${PN}-dev = " ${includedir}/a52dec/*.h ${libdir}/liba52.so ${libdir}/liba52.la ${libdir}/liba52.a "
-FILES_${PN}-dbg = " ${libdir}/.debug/*"
+FILES_${PN}-dbg += " ${libdir}/.debug/*"
FILES_a52dec = " ${bindir}/* "
-FILES_a52dec-dbg = " ${bindir}/.debug/* "
+FILES_a52dec-dbg += " ${bindir}/.debug/* "
FILES_a52dec-doc = " ${mandir}/man1/* "
do_stage() {
diff --git a/packages/libao/libao-alsa_0.8.6.bb b/packages/libao/libao-alsa_0.8.6.bb
index 5af8fa687a..c6fda2dbef 100644
--- a/packages/libao/libao-alsa_0.8.6.bb
+++ b/packages/libao/libao-alsa_0.8.6.bb
@@ -20,6 +20,6 @@ do_stage() {
oe_libinstall -so -C src libao ${STAGING_LIBDIR}
}
-PACKAGES = "libao-alsa-plugin libao-alsa-plugin-dev"
+PACKAGES = "${PN}-dbg libao-alsa-plugin libao-alsa-plugin-dev"
FILES_libao-alsa-plugin= "${libdir}/ao/plugins-2/libalsa*.so"
FILES_libao-alsa-plugin-dev += "${libdir}/ao/plugins-2/libalsa*.la"
diff --git a/packages/libao/libao-plugin-alsa_0.8.6.bb b/packages/libao/libao-plugin-alsa_0.8.6.bb
index 86dc4afc14..94727ad5c7 100644
--- a/packages/libao/libao-plugin-alsa_0.8.6.bb
+++ b/packages/libao/libao-plugin-alsa_0.8.6.bb
@@ -5,7 +5,7 @@ SECTION = "libs"
PRIORITY = "optional"
DEPENDS = "alsa-lib libao"
PROVIDES = "libao-alsa"
-PACKAGES = "libao-alsa libao-alsa-dev"
+PACKAGES = "${PN}-dbg libao-alsa libao-alsa-dev"
PR = "r3"
SRC_URI = "http://downloads.xiph.org/releases/ao/libao-${PV}.tar.gz"
diff --git a/packages/libdbi/libdbi-drivers_0.7.1.bb b/packages/libdbi/libdbi-drivers_0.7.1.bb
index d36643dc22..2e3bc5cf16 100644
--- a/packages/libdbi/libdbi-drivers_0.7.1.bb
+++ b/packages/libdbi/libdbi-drivers_0.7.1.bb
@@ -14,7 +14,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/libdbi-drivers/libdbi-drivers-${PV}.tar.gz"
inherit autotools
-PACKAGES = "libdbd-sqlite"
+PACKAGES = "${PN}-dbg libdbd-sqlite"
EXTRA_OECONF = "--with-dbi-incdir=${STAGING_INCDIR} \
--with-sqlite \
diff --git a/packages/linux/linux-rp-2.6.17/.mtn2git_empty b/packages/libdotconf/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-rp-2.6.17/.mtn2git_empty
+++ b/packages/libdotconf/.mtn2git_empty
diff --git a/packages/linux/linux-rp-2.6.19+git/.mtn2git_empty b/packages/libdotconf/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-rp-2.6.19+git/.mtn2git_empty
+++ b/packages/libdotconf/files/.mtn2git_empty
diff --git a/packages/libdotconf/files/srcMakefile.am_00.patch b/packages/libdotconf/files/srcMakefile.am_00.patch
new file mode 100644
index 0000000000..500f1fd2d7
--- /dev/null
+++ b/packages/libdotconf/files/srcMakefile.am_00.patch
@@ -0,0 +1,9 @@
+--- dotconf-1.0.13/src/Makefile.am.orig 2008-01-02 11:48:16.000000000 +0000
++++ dotconf-1.0.13/src/Makefile.am 2008-01-02 11:48:22.000000000 +0000
+@@ -1,5 +1,5 @@
+
+-INCLUDES = -I. -I$(includedir)
++INCLUDES = -I.
+
+ include_HEADERS = dotconf.h
+ noinst_HEADERS = readdir.h
diff --git a/packages/libdotconf/libdotconf_1.0.13.bb b/packages/libdotconf/libdotconf_1.0.13.bb
new file mode 100644
index 0000000000..05520519b6
--- /dev/null
+++ b/packages/libdotconf/libdotconf_1.0.13.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = " dot.conf is an easy to use and powerful configuration file parser library"
+HOMEPAGE = "http://www.azzit.de/dotconf/"
+LICENSE = "LGPLv2"
+
+PR = "r0"
+
+inherit autotools
+
+SRC_URI = "http://www.azzit.de/dotconf/download/v1.0/dotconf-${PV}.tar.gz \
+ file://srcMakefile.am_00.patch;patch=1"
+
+S = "${WORKDIR}/dotconf-${PV}"
+
+do_install() {
+ install -d ${D}${libdir}
+ install -d ${D}${includedir}
+
+ install -m 0644 ${S}/src/dotconf.h ${D}${includedir}
+ oe_libinstall -C src -so libdotconf ${D}${libdir}
+}
+
+do_stage() {
+ install -m 0644 ${S}/src/dotconf.h ${STAGING_INCDIR}/
+ oe_libinstall -C src -so libdotconf ${STAGING_LIBDIR}/
+}
diff --git a/packages/libffi/libffi_2.0+gcc3.4.1.bb b/packages/libffi/libffi_2.0+gcc3.4.1.bb
index 3e0d789412..6b2df35ae1 100644
--- a/packages/libffi/libffi_2.0+gcc3.4.1.bb
+++ b/packages/libffi/libffi_2.0+gcc3.4.1.bb
@@ -6,7 +6,7 @@ PR = "r1"
inherit autotools gettext
-PACKAGES = "${PN} ${PN}-dev"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-dev"
FILES_${PN} = "${libdir}/libffi.so.*"
diff --git a/packages/libgcrypt/libgcrypt_1.4.0.bb b/packages/libgcrypt/libgcrypt_1.4.0.bb
new file mode 100644
index 0000000000..74205da673
--- /dev/null
+++ b/packages/libgcrypt/libgcrypt_1.4.0.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "A general purpose cryptographic library based on the code from GnuPG"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPL LGPL FDL"
+DEPENDS = "libgpg-error"
+PR = "r1"
+
+# move libgcrypt-config into -dev package
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${bindir}"
+
+SRC_URI = "ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-${PV}.tar.gz"
+
+inherit autotools binconfig
+
+EXTRA_OECONF = "--without-pth --disable-asm --with-capabilities"
+
+ARM_INSTRUCTION_SET = "arm"
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/linux/linux-rp-2.6.20/.mtn2git_empty b/packages/libgpepimc/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-rp-2.6.20/.mtn2git_empty
+++ b/packages/libgpepimc/files/.mtn2git_empty
diff --git a/packages/libgpepimc/files/get-category-by-name.patch b/packages/libgpepimc/files/get-category-by-name.patch
new file mode 100644
index 0000000000..a733f40ccf
--- /dev/null
+++ b/packages/libgpepimc/files/get-category-by-name.patch
@@ -0,0 +1,45 @@
+diff -r 90e7a26811fe db.c
+--- a/db.c Mon Jan 21 02:03:38 2008 +0200
++++ b/db.c Mon Jan 21 02:08:31 2008 +0200
+@@ -182,6 +182,30 @@ gpe_pim_category_name (gint id)
+ }
+
+ /**
++ * gpe_pim_category_id:
++ * @name: Category name
++ *
++ * Get the category ID by name.
++ *
++ * Returns: Category ID or 0 if doesn't exist.
++ */
++gint
++gpe_pim_category_id (const gchar *name)
++{
++ GSList *iter;
++
++ for (iter = categories; iter; iter = iter->next)
++ {
++ struct gpe_pim_category *c = iter->data;
++
++ if (!strcasecmp(c->name, name))
++ return c->id;
++ }
++
++ return 0;
++}
++
++/**
+ * gpe_pim_category_colour:
+ * @id: Category id
+ *
+diff -r 90e7a26811fe gpe/pim-categories.h
+--- a/gpe/pim-categories.h Mon Jan 21 02:03:38 2008 +0200
++++ b/gpe/pim-categories.h Mon Jan 21 02:08:31 2008 +0200
+@@ -36,6 +36,7 @@ extern GSList *gpe_pim_categories_list (
+
+ extern gboolean gpe_pim_category_new (const gchar *title, gint *id);
+ extern const gchar *gpe_pim_category_name (gint id);
++extern gint gpe_pim_category_id (const gchar *name);
+ extern gboolean gpe_pim_category_rename (gint id, gchar *new_name);
+
+ /* colour functions */
diff --git a/packages/libgpepimc/libgpepimc_0.9.bb b/packages/libgpepimc/libgpepimc_0.9.bb
index 57b7b22191..e8c4664cf8 100644
--- a/packages/libgpepimc/libgpepimc_0.9.bb
+++ b/packages/libgpepimc/libgpepimc_0.9.bb
@@ -1 +1,4 @@
require libgpepimc.inc
+PR = "r1"
+
+SRC_URI += " file://get-category-by-name.patch;patch=1"
diff --git a/packages/linux/linux-rp-2.6.21/.mtn2git_empty b/packages/libmad/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-rp-2.6.21/.mtn2git_empty
+++ b/packages/libmad/files/.mtn2git_empty
diff --git a/packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch b/packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch
new file mode 100644
index 0000000000..f6620f591a
--- /dev/null
+++ b/packages/libmad/files/libmad-0.15.1b-avr32-optimization.patch
@@ -0,0 +1,2922 @@
+diff --git a/bit.c b/bit.c
+index c2bfb24..262ce3a 100644
+--- a/bit.c
++++ b/bit.c
+@@ -25,12 +25,6 @@
+
+ # include "global.h"
+
+-# ifdef HAVE_LIMITS_H
+-# include <limits.h>
+-# else
+-# define CHAR_BIT 8
+-# endif
+-
+ # include "bit.h"
+
+ /*
+@@ -81,6 +75,8 @@ unsigned short const crc_table[256] = {
+
+ # define CRC_POLY 0x8005
+
++#ifndef FPM_AVR32
++
+ /*
+ * NAME: bit->init()
+ * DESCRIPTION: initialize bit pointer struct
+@@ -190,6 +186,8 @@ void mad_bit_write(struct mad_bitptr *bitptr, unsigned int len,
+ }
+ # endif
+
++#endif
++
+ /*
+ * NAME: bit->crc()
+ * DESCRIPTION: compute CRC-check word
+diff --git a/bit.h b/bit.h
+index 5a51570..70f550a 100644
+--- a/bit.h
++++ b/bit.h
+@@ -22,6 +22,92 @@
+ # ifndef LIBMAD_BIT_H
+ # define LIBMAD_BIT_H
+
++# ifdef HAVE_LIMITS_H
++# include <limits.h>
++# else
++# define CHAR_BIT 8
++# endif
++
++#ifdef FPM_AVR32
++
++struct mad_bitptr {
++ unsigned char const *byte;
++ unsigned int read_bytes;
++};
++
++/*
++ * NAME: bit->init()
++ * DESCRIPTION: initialize bit pointer struct
++ */
++static void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte)
++{
++ bitptr->byte = byte;
++ bitptr->read_bytes = 0;
++}
++
++/*
++ * NAME: bit->length()
++ * DESCRIPTION: return number of bits between start and end points
++ */
++static unsigned int mad_bit_length(struct mad_bitptr const *begin,
++ struct mad_bitptr const *end)
++{
++ return (end->read_bytes - begin->read_bytes) +
++ 8 * (end->byte - begin->byte);
++}
++
++/*
++ * NAME: bit->nextbyte()
++ * DESCRIPTION: return pointer to next unprocessed byte
++ */
++static unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *bitptr)
++{
++ return bitptr->byte + ((bitptr->read_bytes + 0x7) >> 3);
++}
++
++/*
++ * NAME: bit->skip()
++ * DESCRIPTION: advance bit pointer
++ */
++static void mad_bit_skip(struct mad_bitptr *bitptr, unsigned int len)
++{
++ bitptr->read_bytes += len;
++ bitptr->byte += (bitptr->read_bytes >> 3);
++ bitptr->read_bytes &= 0x7;
++}
++
++/*
++ * NAME: bit->read()
++ * DESCRIPTION: read an arbitrary number of bits and return their UIMSBF value
++ */
++static unsigned long mad_bit_read(struct mad_bitptr *bitptr, unsigned int len)
++{
++ register unsigned long value;
++
++ if (!len)
++ return 0;
++
++ value = *(unsigned int *)bitptr->byte;
++
++ value <<= bitptr->read_bytes;
++ value >>= (32 - len);
++
++ bitptr->read_bytes += len;
++ bitptr->byte += (bitptr->read_bytes >> 3);
++ bitptr->read_bytes &= 0x7;
++
++ return value;
++}
++
++# define mad_bit_finish(bitptr) /* nothing */
++
++static unsigned long mad_bit_bitsleft(struct mad_bitptr *bitptr)
++{
++ return (8 - (bitptr)->read_bytes);
++}
++
++#else /* #ifdef FPM_AVR32 */
++
+ struct mad_bitptr {
+ unsigned char const *byte;
+ unsigned short cache;
+@@ -42,6 +128,8 @@ void mad_bit_skip(struct mad_bitptr *, unsigned int);
+ unsigned long mad_bit_read(struct mad_bitptr *, unsigned int);
+ void mad_bit_write(struct mad_bitptr *, unsigned int, unsigned long);
+
++#endif
++
+ unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short);
+
+ # endif
+diff --git a/configure b/configure
+index ee421cc..7a9f0c8 100755
+--- a/configure
++++ b/configure
+@@ -1048,7 +1048,7 @@ Optional Features:
+ --enable-speed optimize for speed over accuracy
+ --enable-accuracy optimize for accuracy over speed
+ --enable-fpm=ARCH use ARCH-specific fixed-point math routines (one of:
+- intel, arm, mips, sparc, ppc, 64bit, default)
++ intel, arm, avr32, mips, sparc, ppc, 64bit, default)
+ --enable-sso use subband synthesis optimization
+ --disable-aso disable architecture-specific optimizations
+ --enable-strict-iso use strict ISO/IEC interpretations
+@@ -21477,6 +21477,7 @@ if test "${enable_fpm+set}" = set; then
+ no|default|approx) FPM="DEFAULT" ;;
+ intel|i?86) FPM="INTEL" ;;
+ arm) FPM="ARM" ;;
++ avr32) FPM="AVR32" ;;
+ mips) FPM="MIPS" ;;
+ sparc) FPM="SPARC" ;;
+ ppc|powerpc) FPM="PPC" ;;
+@@ -21498,6 +21499,7 @@ then
+ case "$host" in
+ i?86-*) FPM="INTEL" ;;
+ arm*-*) FPM="ARM" ;;
++ avr32*-*) FPM="AVR32" ;;
+ mips*-*) FPM="MIPS" ;;
+ sparc*-*) FPM="SPARC" ;;
+ powerpc*-*) FPM="PPC" ;;
+@@ -21554,6 +21556,11 @@ then
+ ASO="$ASO -DASO_IMDCT"
+ ASO_OBJS="imdct_l_arm.lo"
+ ;;
++ avr32*-*)
++ ASO="$ASO -DASO_INTERLEAVE2"
++ ASO="$ASO -DASO_ZEROCHECK"
++ ASO_OBJS="dct32_avr32.lo synth_avr32.lo imdct_avr32.lo"
++ ;;
+ mips*-*)
+ ASO="$ASO -DASO_INTERLEAVE2"
+ ASO="$ASO -DASO_ZEROCHECK"
+diff --git a/configure.ac b/configure.ac
+index 9b79399..063cb9b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -274,13 +274,14 @@ fi
+ AC_MSG_CHECKING(for architecture-specific fixed-point math routines)
+ AC_ARG_ENABLE(fpm, AC_HELP_STRING([--enable-fpm=ARCH],
+ [use ARCH-specific fixed-point math routines
+- (one of: intel, arm, mips, sparc, ppc, 64bit, default)]),
++ (one of: intel, arm, avr32, mips, sparc, ppc, 64bit, default)]),
+ [
+ case "$enableval" in
+ yes) ;;
+ no|default|approx) FPM="DEFAULT" ;;
+ intel|i?86) FPM="INTEL" ;;
+ arm) FPM="ARM" ;;
++ avr32) FPM="AVR32" ;;
+ mips) FPM="MIPS" ;;
+ sparc) FPM="SPARC" ;;
+ ppc|powerpc) FPM="PPC" ;;
+@@ -298,6 +299,7 @@ then
+ case "$host" in
+ i?86-*) FPM="INTEL" ;;
+ arm*-*) FPM="ARM" ;;
++ avr32*-*) FPM="AVR32" ;;
+ mips*-*) FPM="MIPS" ;;
+ sparc*-*) FPM="SPARC" ;;
+ powerpc*-*) FPM="PPC" ;;
+@@ -343,6 +345,11 @@ then
+ ASO="$ASO -DASO_IMDCT"
+ ASO_OBJS="imdct_l_arm.lo"
+ ;;
++ avr32*-*)
++ ASO="$ASO -DASO_INTERLEAVE2"
++ ASO="$ASO -DASO_ZEROCHECK"
++ ASO_OBJS="dct32_avr32.lo synth_avr32.lo imdct_avr32.lo"
++ ;;
+ mips*-*)
+ ASO="$ASO -DASO_INTERLEAVE2"
+ ASO="$ASO -DASO_ZEROCHECK"
+diff --git a/dct32_avr32.S b/dct32_avr32.S
+new file mode 100644
+index 0000000..7513340
+--- /dev/null
++++ b/dct32_avr32.S
+@@ -0,0 +1,780 @@
++/*
++ Optimized 32-point Discrete Cosine Transform (DCT)
++ Copyright 2003-2006 Atmel Corporation.
++
++ Written by Ronny Pedersen, Atmel Norway
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++#define SHIFT 12
++#define MAD_F_SCALEBITS 28
++#define SLOTS 8
++
++#define MAD_F(x) ((x + (1 << 15)) >> 16)
++
++# define costab1 MAD_F(0x7fd8878e)
++# define costab2 MAD_F(0x7f62368f)
++# define costab3 MAD_F(0x7e9d55fc)
++# define costab4 MAD_F(0x7d8a5f40)
++# define costab5 MAD_F(0x7c29fbee)
++# define costab6 MAD_F(0x7a7d055b)
++# define costab7 MAD_F(0x78848414)
++# define costab8 MAD_F(0x7641af3d)
++# define costab9 MAD_F(0x73b5ebd1)
++# define costab10 MAD_F(0x70e2cbc6)
++# define costab11 MAD_F(0x6dca0d14)
++# define costab12 MAD_F(0x6a6d98a4)
++# define costab13 MAD_F(0x66cf8120)
++# define costab14 MAD_F(0x62f201ac)
++# define costab15 MAD_F(0x5ed77c8a)
++# define costab16 MAD_F(0x5a82799a)
++# define costab17 MAD_F(0x55f5a4d2)
++# define costab18 MAD_F(0x5133cc94)
++# define costab19 MAD_F(0x4c3fdff4)
++# define costab20 MAD_F(0x471cece7)
++# define costab21 MAD_F(0x41ce1e65)
++# define costab22 MAD_F(0x3c56ba70)
++# define costab23 MAD_F(0x36ba2014)
++# define costab24 MAD_F(0x30fbc54d)
++# define costab25 MAD_F(0x2b1f34eb)
++# define costab26 MAD_F(0x25280c5e)
++# define costab27 MAD_F(0x1f19f97b)
++# define costab28 MAD_F(0x18f8b83c)
++# define costab29 MAD_F(0x12c8106f)
++# define costab30 MAD_F(0x0c8bd35e)
++# define costab31 MAD_F(0x0647d97c)
++
++
++ .macro butterfly2_in out1, out2, out3, out4, in, idx_in1, idx_in2, idx_in3, idx_in4, coeff1, coeff2, tmplo, tmphi
++ mov \tmplo, \coeff1
++ ld.w \out1, \in[\idx_in1 * 4]
++ ld.w \out2, \in[\idx_in2 * 4]
++ ld.w \out3, \in[\idx_in3 * 4]
++ ld.w \out4, \in[\idx_in4 * 4]
++ sub \tmphi, \out1, \out2
++ add \out1, \out2
++ mulsatrndwh.w \out2, \tmphi, \tmplo:b
++
++ sub \tmphi, \out3, \out4
++ mov \tmplo, \coeff2
++ add \out3, \out4
++ mulsatrndwh.w \out4, \tmphi, \tmplo:b
++ .endm
++
++ .macro butterfly2 in1, in2, in3, in4, coeff1, tmplo, tmphi, tmp
++ mov \tmp, \coeff1
++ sub \tmphi, \in1, \in2
++ add \in1, \in2
++ mulsatrndwh.w \in2, \tmphi, \tmp:b
++
++ sub \tmphi, \in3, \in4
++ add \in3, \in4
++ mulsatrndwh.w \in4, \tmphi, \tmp:b
++ .endm
++
++ .macro butterfly4 in1, in2, in3, in4, in5, in6, in7, in8, coeff1, tmplo, tmphi, tmp
++ mov \tmp, \coeff1
++ sub \tmphi, \in1, \in2
++ add \in1, \in2
++ mulsatrndwh.w \in2, \tmphi, \tmp:b
++
++ sub \tmphi, \in3, \in4
++ add \in3, \in4
++ mulsatrndwh.w \in4, \tmphi, \tmp:b
++
++ sub \tmphi, \in5, \in6
++ add \in5, \in6
++ mulsatrndwh.w \in6, \tmphi, \tmp:b
++
++ sub \tmphi, \in7, \in8
++ add \in7, \in8
++ mulsatrndwh.w \in8, \tmphi, \tmp:b
++ .endm
++
++ .macro scale reg
++ .endm
++
++/*void dct32( mad_fixed_t const in[32], unsigned int slot,
++ mad_fixed_t lo[16][8], mad_fixed_t hi[16][8]) */
++
++ .global dct32_avr32
++dct32_avr32:
++ stm --sp, r0-r7, r9-r11, lr
++
++ sub sp, 32*4
++
++/* t0 = in[0] + in[31]; t16 = MUL(in[0] - in[31], costab1);
++ t1 = in[15] + in[16]; t17 = MUL(in[15] - in[16], costab31); */
++ butterfly2_in r4/*t0*/, r5/*t16*/, r6/*t1*/, r7/*t17*/, r12, 0, 31, 15, 16, costab1, costab31, r10, r11
++
++/* t41 = t16 + t17;
++ t59 = MUL(t16 - t17, costab2);
++ t33 = t0 + t1;
++ t50 = MUL(t0 - t1, costab2);*/
++ butterfly2 r5/*t41*/, r7/*t59*/, r4/*t33*/, r6/*t50*/, costab2, r10, r11, lr
++
++/* t2 = in[7] + in[24]; t18 = MUL(in[7] - in[24], costab15);
++ t3 = in[8] + in[23]; t19 = MUL(in[8] - in[23], costab17); */
++ butterfly2_in r0/*t2*/, r1/*t18*/, r2/*t3*/, r3/*t19*/, r12, 7, 24, 8, 23, costab15, costab17, r10, r11
++
++/* t42 = t18 + t19;
++ t60 = MUL(t18 - t19, costab30);
++ t34 = t2 + t3;
++ t51 = MUL(t2 - t3, costab30); */
++ butterfly2 r1/*t42*/, r3/*t60*/, r0/*t34*/, r2/*t51*/, costab30, r10, r11, lr
++
++/* t73 = t41 + t42; t94 = MUL(t41 - t42, costab4);
++ t83 = t59 + t60; t106 = MUL(t59 - t60, costab4); */
++
++
++/* t69 = t33 + t34; t89 = MUL(t33 - t34, costab4);
++ t78 = t50 + t51; t100 = MUL(t50 - t51, costab4); */
++ butterfly4 r5/*t73*/, r1/*t94*/, r7/*t83*/, r3/*t106*/,r4/*t69*/, r0/*t89*/, r6/*t78*/, r2/*t100*/, costab4, r10, r11, lr
++
++/* Store away the computed butterflies:
++ sp[0-7] = t83, t78, t73, t69, t106, t100, t94, t89 */
++ stm sp, r0-r7
++
++
++/* t4 = in[3] + in[28]; t20 = MUL(in[3] - in[28], costab7);
++ t5 = in[12] + in[19]; t21 = MUL(in[12] - in[19], costab25); */
++ butterfly2_in r4/*t4*/, r5/*t20*/, r6/*t5*/, r7/*t21*/, r12, 3, 28, 12, 19, costab7, costab25, r10, r11
++
++/* t43 = t20 + t21;
++ t61 = MUL(t20 - t21, costab14);
++ t35 = t4 + t5;
++ t52 = MUL(t4 - t5, costab14); */
++ butterfly2 r5/*t43*/, r7/*t61*/, r4/*t35*/, r6/*t52*/, costab14, r10, r11, lr
++
++/* t6 = in[4] + in[27]; t22 = MUL(in[4] - in[27], costab9);
++ t7 = in[11] + in[20]; t23 = MUL(in[11] - in[20], costab23); */
++ butterfly2_in r0/*t6*/, r1/*t22*/, r2/*t7*/, r3/*t23*/, r12, 4, 27, 11, 20, costab9, costab23, r10, r11
++
++/* t44 = t22 + t23;
++ t62 = MUL(t22 - t23, costab18);
++ t36 = t6 + t7;
++ t53 = MUL(t6 - t7, costab18); */
++ butterfly2 r1/*t44*/, r3/*t62*/, r0/*t36*/, r2/*t53*/, costab18, r10, r11, lr
++
++/* t74 = t43 + t44; t95 = MUL(t43 - t44, costab28);
++ t84 = t61 + t62; t107 = MUL(t61 - t62, costab28); */
++
++/* t70 = t35 + t36; t90 = MUL(t35 - t36, costab28);
++ t79 = t52 + t53; t101 = MUL(t52 - t53, costab28); */
++ butterfly4 r5/*t74*/, r1/*t95*/, r7/*t84*/, r3/*t107*/, r4/*t70*/, r0/*t90*/, r6/*t79*/, r2/*t101*/, costab28, r10, r11, lr
++
++/* Store away the computed butterflies:
++ sp[8-15] = t84, t79, t74, t70, t107, t101, t95, t90 */
++ sub r10, sp, -8*4
++ stm r10, r0-r7
++
++
++/* t8 = in[1] + in[30]; t24 = MUL(in[1] - in[30], costab3);
++ t9 = in[14] + in[17]; t25 = MUL(in[14] - in[17], costab29); */
++ butterfly2_in r4/*t8*/, r5/*t24*/, r6/*t9*/, r7/*t25*/, r12, 1, 30, 14, 17, costab3, costab29, r10, r11
++
++
++/* t45 = t24 + t25;
++ t63 = MUL(t24 - t25, costab6);
++ t37 = t8 + t9;
++ t54 = MUL(t8 - t9, costab6); */
++ butterfly2 r5/*t45*/, r7/*t63*/, r4/*t37*/, r6/*t54*/, costab6, r10, r11, lr
++
++/* t10 = in[6] + in[25]; t26 = MUL(in[6] - in[25], costab13);
++ t11 = in[9] + in[22]; t27 = MUL(in[9] - in[22], costab19); */
++ butterfly2_in r0/*t10*/, r1/*t26*/, r2/*t11*/, r3/*t27*/, r12, 6, 25, 9, 22, costab13, costab19, r10, r11
++
++/* t46 = t26 + t27;
++ t64 = MUL(t26 - t27, costab26);
++ t38 = t10 + t11;
++ t55 = MUL(t10 - t11, costab26); */
++ butterfly2 r1/*t46*/, r3/*t64*/, r0/*t38*/, r2/*t55*/, costab26, r10, r11, lr
++
++/* t75 = t45 + t46; t96 = MUL(t45 - t46, costab12);
++ t85 = t63 + t64; t108 = MUL(t63 - t64, costab12); */
++
++/* t71 = t37 + t38; t91 = MUL(t37 - t38, costab12);
++ t80 = t54 + t55; t102 = MUL(t54 - t55, costab12); */
++ butterfly4 r5/*t75*/, r1/*t96*/, r7/*t85*/, r3/*t108*/, r4/*t71*/, r0/*t91*/, r6/*t80*/, r2/*t102*/, costab12, r10, r11, lr
++
++/* Store away the computed butterflies:
++ sp[16-23] = t85, t80, t75, t71, t108, t102, t96, t91 */
++ sub r10, sp, -16*4
++ stm r10, r0-r7
++
++/* t12 = in[2] + in[29]; t28 = MUL(in[2] - in[29], costab5);
++ t13 = in[13] + in[18]; t29 = MUL(in[13] - in[18], costab27); */
++ butterfly2_in r4/*t12*/, r5/*t28*/, r6/*t13*/, r7/*t29*/, r12, 2, 29, 13, 18, costab5, costab27, r10, r11
++
++/* t47 = t28 + t29;
++ t65 = MUL(t28 - t29, costab10);
++ t39 = t12 + t13;
++ t56 = MUL(t12 - t13, costab10); */
++ butterfly2 r5/*t47*/, r7/*t65*/, r4/*t39*/, r6/*t56*/, costab10, r10, r11, lr
++
++/* t14 = in[5] + in[26]; t30 = MUL(in[5] - in[26], costab11);
++ t15 = in[10] + in[21]; t31 = MUL(in[10] - in[21], costab21);*/
++ butterfly2_in r0/*t14*/, r1/*t30*/, r2/*t15*/, r3/*t31*/, r12, 5, 26, 10, 21, costab11, costab21, r10, r11
++
++/* t48 = t30 + t31;
++ t66 = MUL(t30 - t31, costab22);
++ t40 = t14 + t15;
++ t57 = MUL(t14 - t15, costab22);*/
++ butterfly2 r1/*t48*/, r3/*t66*/, r0/*t40*/, r2/*t57*/, costab22, r10, r11, lr
++
++/* t76 = t47 + t48; t97 = MUL(t47 - t48, costab20);
++ t86 = t65 + t66; t109 = MUL(t65 - t66, costab20);*/
++
++/* t72 = t39 + t40; t92 = MUL(t39 - t40, costab20);
++ t81 = t56 + t57; t103 = MUL(t56 - t57, costab20);*/
++ butterfly4 r5/*t76*/, r1/*t97*/, r7/*t86*/, r3/*t109*/,r4/*t72*/, r0/*t92*/, r6/*t81*/, r2/*t103*/, costab20, r10, r11, lr
++
++/* Store away the computed butterflies:
++ sp[24-31] = t86, t81, t76, t72, t109, t103, t97, t92 */
++ sub r10, sp, -24*4
++ stm r10, r0-r7
++
++/* We now have the following on the stack:
++
++ sp[0-7] = t83, t78, t73, t69, t106, t100, t94, t89
++ sp[8-15] = t84, t79, t74, t70, t107, t101, t95, t90
++ sp[16-23] = t85, t80, t75, t71, t108, t102, t96, t91
++ sp[24-31] = t86, t81, t76, t72, t109, t103, t97, t92 */
++
++/* Load {r0...r7} = { t72, t76, t71, t75, t70, t74, t69, t73 } */
++ ld.d r6, sp[2*4]
++ ld.d r4, sp[10*4]
++ ld.d r2, sp[18*4]
++ ld.d r0, sp[26*4]
++
++
++/* t113 = t69 + t70;
++ t141 = MUL(t69 - t70, costab8);
++
++ t115 = t73 + t74;
++ t144 = MUL(t73 - t74, costab8); */
++ butterfly2 r6/*t113*/, r4/*t141*/, r7/*t115*/, r5/*t144*/, costab8, r10, r11, lr
++
++/* t114 = t71 + t72;
++ t142 = MUL(t71 - t72, costab24);
++
++ t116 = t75 + t76;
++ t145 = MUL(t75 - t76, costab24); */
++ butterfly2 r2/*t114*/, r0/*t142*/, r3/*t116*/, r1/*t145*/, costab24, r10, r11, lr
++
++
++/*
++ t191 = t113 + t114;
++ t192 = MUL(t113 - t114, costab16)
++
++ t32 = t115 + t116;
++ t177 = MUL(t115 - t116, costab16) ;
++
++ t143 = t141 + t142;
++ t190 = MUL(t141 - t142, costab16) ;
++
++ t146 = t144 + t145;
++ t184 = MUL(t144 - t145, costab16) ; */
++ butterfly4 r6/*t191*/, r2/*t192*/, r7/*t32*/, r3/*t177*/, r4/*t143*/, r0/*190*/, r5/*t146*/, r1/*t184*/, costab16, r10, r11, lr
++
++/* Store away the computed butterflies:
++ sp[2-3] = t32, t191
++ sp[10-11] = t146, t143
++ sp[18-19] = t177, t192
++ sp[26-27] = t184, t190 */
++ st.d sp[2*4] , r6
++ st.d sp[10*4], r4
++ st.d sp[18*4], r2
++ st.d sp[26*4], r0
++
++/* Load {r0...r7} = { t81, t86, t80, t85, t79, t84, t78, t83 } */
++ ld.d r6, sp[0*4]
++ ld.d r4, sp[8*4]
++ ld.d r2, sp[16*4]
++ ld.d r0, sp[24*4]
++
++
++/* t118 = t78 + t79;
++ t148 = MUL(t78 - t79, costab8);
++
++ t121 = t83 + t84;
++ t152 = MUL(t83 - t84, costab8); */
++ butterfly2 r6/*t118*/, r4/*t148*/, r7/*t121*/, r5/*t152*/, costab8, r10, r11, lr
++
++/* t119 = t80 + t81;
++ t149 = MUL(t80 - t81, costab24);
++
++ t122 = t85 + t86;
++ t153 = MUL(t85 - t86, costab24); */
++ butterfly2 r2/*t119*/, r0/*t149*/, r3/*t122*/, r1/*t153*/, costab24, r10, r11, lr
++
++
++
++/* t58 = t118 + t119;
++ t178 = MUL(t118 - t119, costab16) ;
++
++ t67 = t121 + t122;
++ t179 = MUL(t121 - t122, costab16) ;
++
++ t150 = t148 + t149;
++ t185 = MUL(t148 - t149, costab16) ;
++
++ t154 = t152 + t153;
++ t186 = MUL(t152 - t153, costab16) ; */
++ butterfly4 r6/*t58*/, r2/*t178*/, r7/*t67*/, r3/*t179*/, r4/*t150*/, r0/*185*/, r5/*t154*/, r1/*t186*/, costab16, r10, r11, lr
++
++/* Store away the computed butterflies:
++ sp[0-1] = t67, t58
++ sp[8-9] = t154, t150
++ sp[16-17] = t179, t178
++ sp[24-25] = t186, t185 */
++ st.d sp[0*4] , r6
++ st.d sp[8*4], r4
++ st.d sp[16*4], r2
++ st.d sp[24*4], r0
++
++/* Load {r0...r7} = { t92, t97, t91, t96, t90, t95, t89, t94 } */
++ ld.d r6, sp[6*4]
++ ld.d r4, sp[14*4]
++ ld.d r2, sp[22*4]
++ ld.d r0, sp[30*4]
++
++
++/* t125 = t89 + t90;
++ t157 = MUL(t89 - t90, costab8);
++
++ t128 = t94 + t95;
++ t161 = MUL(t94 - t95, costab8); */
++ butterfly2 r6/*t125*/, r4/*t157*/, r7/*t128*/, r5/*t161*/, costab8, r10, r11, lr
++
++/* t126 = t91 + t92;
++ t158 = MUL(t91 - t92, costab24);
++
++ t129 = t96 + t97;
++ t162 = MUL(t96 - t97, costab24); */
++ butterfly2 r2/*t126*/, r0/*t158*/, r3/*t129*/, r1/*t162*/, costab24, r10, r11, lr
++
++
++/*
++ t93 = t125 + t126;
++ t180 = MUL(t125 - t126, costab16) ;
++
++ t98 = t128 + t129;
++ t181 = MUL(t128 - t129, costab16) ;
++
++ t159 = t157 + t158;
++ t187 = MUL(t157 - t158, costab16) ;
++
++ t163 = t161 + t162;
++ t188 = MUL(t161 - t162, costab16) ; */
++ butterfly4 r6/*t93*/, r2/*t180*/, r7/*t98*/, r3/*t181*/, r4/*t159*/, r0/*187*/, r5/*t163*/, r1/*t188*/, costab16, r10, r11, lr
++
++
++/* Store away the computed butterflies:
++ sp[6-7] = t98, t93
++ sp[14-15] = t163, t159
++ sp[22-23] = t181, t180
++ sp[30-31] = t188, t187 */
++ st.d sp[6*4] , r6
++ st.d sp[14*4], r4
++ st.d sp[22*4], r2
++ st.d sp[30*4], r0
++
++/* Load {r0...r7} = { t103, t109, t102, t108, t101, t107, t100, t106 } */
++ ld.d r6, sp[4*4]
++ ld.d r4, sp[12*4]
++ ld.d r2, sp[20*4]
++ ld.d r0, sp[28*4]
++
++
++
++/* t132 = t100 + t101;
++ t166 = MUL(t100 - t101, costab8);
++
++ t136 = t106 + t107;
++ t171 = MUL(t106 - t107, costab8); */
++ butterfly2 r6/*t132*/, r4/*t166*/, r7/*t136*/, r5/*t171*/, costab8, r10, r11, lr
++
++/* t133 = t102 + t103;
++ t167 = MUL(t102 - t103, costab24);
++
++ t137 = t108 + t109;
++ t172 = MUL(t108 - t109, costab24);*/
++ butterfly2 r2/*t133*/, r0/*t167*/, r3/*t137*/, r1/*t172*/, costab24, r10, r11, lr
++
++
++/* t104 = t132 + t133;
++ t182 = MUL(t132 - t133, costab16) ;
++
++ t110 = t136 + t137;
++ t183 = MUL(t136 - t137, costab16) ;
++
++ t168 = t166 + t167;
++ t189 = MUL(t166 - t167, costab16) ;
++
++ t173 = t171 + t172;
++ t208 = MUL(t171 - t172, costab16) ; */
++ butterfly4 r6/*t104*/, r2/*t182*/, r7/*t110*/, r3/*t183*/, r4/*t168*/, r0/*189*/, r5/*t173*/, r1/*t208*/, costab16, r10, r11, lr
++
++/* Store away the computed butterflies:
++ sp[4-5] = t110, t104
++ sp[12-13] = t173, t168
++ sp[20-21] = t183, t182
++ sp[28-29] = t208, t189 */
++ st.d sp[4*4] , r6
++ st.d sp[12*4], r4
++ st.d sp[20*4], r2
++ st.d sp[28*4], r0
++
++/* Now we have the following stack
++
++ sp[0-7] = t67, t58 , t32, t191, t110, t104, t98, t93
++ sp[8-15] = t154, t150, t146, t143, t173, t168, t163, t159
++ sp[16-23] = t179, t178, t177, t192, t183, t182, t181, t180
++ sp[24-31] = t186, t185, t184, t190, t208, t189, t188, t187
++*/
++
++ /* Get slot, lo and hi from stack */
++ lddsp lr, sp[32*4 + 4] /*slot*/
++ lddsp r12, sp[32*4 + 8] /*lo*/
++ lddsp r11, sp[32*4 + 12] /*hi*/
++
++ add r12, r12, lr << 2
++ add r11, r11, lr << 2
++
++
++/* t49 = -(t67 * 2) + t32;
++ hi[14][slot] = SHIFT(t32);
++ t87 = -(t110 * 2) + t67;
++ t138 = -(t173 * 2) + t110;
++ t203 = -(t208 * 2) + t173; */
++
++ lddsp r0/*t67*/, sp[0]
++ lddsp r1/*t32*/, sp[2*4]
++ lddsp r2/*t110*/, sp[4*4]
++ lddsp r3/*t173*/, sp[12*4]
++ lddsp r5/*t208*/, sp[28*4]
++
++ sub r4/*t49*/, r1, r0 << 1
++ scale r1
++ sub r0/*t87*/, r0, r2 << 1
++ st.w r11[14*SLOTS*4], r1
++ sub r2/*t138*/, r2, r3 << 1
++ sub r1/*t203*/, r3, r5 << 1
++
++/* Live: r0 = t87, r1= t203, r2= t138, r4 = t49
++ Free: r3, r5, r6, r7, r8, r9, r10, lr */
++
++/* t68 = (t98 * 2) + t49;
++ hi[12][slot] = SHIFT(-t49);
++ t130 = -(t163 * 2) + t98;
++ t201 = -(t188 * 2) + t163;
++ t200 = -(t186 * 2) + t154;
++ t111 = (t154 * 2) + t87;
++ t77 = -(-(t87 * 2) - t68);
++ t88 = (t146 * 2) + t77;
++ t199 = -(t184 * 2) + t146;
++ hi[ 8][slot] = SHIFT(-t77);
++ hi[10][slot] = SHIFT(t68);*/
++ lddsp r3/*t98*/, sp[6*4]
++ lddsp r5/*t163*/, sp[14*4]
++ lddsp r6/*t188*/, sp[30*4]
++ lddsp r10/*t186*/, sp[24*4]
++
++ add r7/*t68*/, r4, r3 << 1
++ neg r4
++ scale r4
++ lddsp r9/*t154*/, sp[8*4]
++ sub r3/*t130*/, r3, r5 << 1
++ st.w r11[12*SLOTS*4], r4
++ sub r8/*t201*/, r5, r6 << 1
++ sub r4/*t200*/, r9, r10 << 1
++ lddsp lr/*t146*/, sp[10*4]
++ lddsp r6/*t184*/, sp[26*4]
++ add r10/*t111*/, r0, r9 << 1
++ add r5/*t77*/,r7, r0 << 1
++ add r0/*t88*/, r5, lr << 1
++ sub r6/*t199*/, lr, r6 << 1
++ neg r5
++ scale r5
++ scale r7
++ st.w r11[8*SLOTS*4], r5
++ st.w r11[10*SLOTS*4], r7
++
++/* Live: r0 = t88, r1= t203, r2= t138, r3 = t130, r4 = t200,
++ r6 = 199, r8 = t201, r10 = t111
++ Free: r5, r7, r9, lr */
++
++
++/*
++ t123 = -(-(t138 * 2) - t111);
++ t174 = (t183 * 2) + t138;
++ t99 = -(t111 * 2) + t88;
++ hi[ 6][slot] = SHIFT(t88); */
++ lddsp r5/*t183*/, sp[20*4]
++
++ add r7/*t123*/, r10, r2 << 1
++ sub r10/*t99*/, r0, r10 << 1
++ scale r0
++ add r2/*t174*/, r2, r5 << 1
++ st.w r11[6*SLOTS*4], r0
++
++/* Live: r1 = t203, r2 = t174, r3 = t130, r4 = t200,
++ r6 = t199, r7 = t123, r8 = t201, r10 = t99
++ Free: r0, r5, r9, lr */
++
++/* t112 = -(t130 * 2) + t99;
++ t164 = (t181 * 2) + t130;
++ hi[ 4][slot] = SHIFT(-t99); */
++ lddsp r0/*t181*/, sp[22*4]
++
++ sub r5/*t112*/, r10, r3 << 1
++ neg r10
++ scale r10
++ add r3/*164*/, r3, r0 << 1
++ st.w r11[4*SLOTS*4], r10
++
++/* Live: r1 = t203, r2 = t174, r3 = t164, r4 = t200,
++ r5 = t112, r6 = t199, r7 = t123, r8 = t201
++ Free: r0, r9, r10, lr */
++
++
++/* t117 = -(-(t123 * 2) - t112);
++ t139 = (t179 * 2) + t123;
++ hi[ 2][slot] = SHIFT(t112); */
++ lddsp r0/*t179*/, sp[16*4]
++
++ add r9/*t117*/, r5, r7 << 1
++ scale r5
++ add r7/*t139*/, r7, r0 << 1
++ st.w r11[2*SLOTS*4], r5
++
++/* Live: r1 = t203, r2 = t174, r3 = t164, r4 = t200,
++ r6 = t199, r7 = t139, r8 = t201, r9 = t117
++ Free: r0, r5, r10, lr */
++
++/* t155 = -(t174 * 2) + t139;
++ t204 = -(-(t203 * 2) - t174);
++ t124 = (t177 * 2) + t117;
++ hi[ 0][slot] = SHIFT(-t117);
++ t131 = -(t139 * 2) + t124;
++ lo[ 1][slot] = SHIFT(t124);*/
++ lddsp r0/*t177*/, sp[18*4]
++
++ sub r5/*t155*/, r7, r2 << 1
++ add r2/*t204*/, r2, r1 << 1
++ add r0/*t124*/, r9, r0 << 1
++ neg r9
++ scale r9
++ sub r7/*t131*/, r0, r7 << 1
++ scale r0
++ st.w r11[0*SLOTS*4], r9
++ st.w r12[1*SLOTS*4], r0
++
++/* Live: r2 = t204, r3 = t164, r4 = t200,
++ r5 = t155, r6 = t199, r7 = t131, r8 = t201
++ Free: r0, r1, r9, r10, lr */
++
++/* t140 = (t164 * 2) + t131;
++ lo[ 3][slot] = SHIFT(-t131);
++ t202 = -(-(t201 * 2) - t164); */
++ add r0/*t140*/, r7, r3 << 1
++ neg r7
++ scale r7
++ add r3/*t202*/, r3, r8 << 1
++ st.w r12[3*SLOTS*4], r7
++
++/* Live: r0 = t140, r2 = t204, r3 = t202, r4 = t200,
++ r5 = t155, r6 = t199
++ Free: r1, r7, r8, r9, r10, lr */
++
++
++/* t147 = -(-(t155 * 2) - t140);
++ lo[ 5][slot] = SHIFT(t140);
++ t175 = -(t200 * 2) + t155;
++ t156 = -(t199 * 2) + t147;
++ lo[ 7][slot] = SHIFT(-t147); */
++ add r1/*t147*/, r0, r5 << 1
++ scale r0
++ sub r5/*t175*/, r5, r4 << 1
++ sub r4/*156*/, r1, r6 << 1
++ neg r1
++ scale r1
++ st.w r12[5*SLOTS*4], r0
++ st.w r12[7*SLOTS*4], r1
++
++/* Live: r2 = t204, r3 = t202,
++ r4 = t156, r5 = t175
++ Free: r0, r1, r6, r7, r8, r9, r10, lr */
++
++
++/* t205 = -(-(t204 * 2) - t175);
++ t165 = -(t175 * 2) + t156;
++ lo[ 9][slot] = SHIFT(t156);
++ t176 = -(t202 * 2) + t165;
++ lo[11][slot] = SHIFT(-t165);
++ t206 = -(-(t205 * 2) - t176);
++ lo[15][slot] = SHIFT(-t206)
++ lo[13][slot] = SHIFT(t176) */
++ add r0/*t205*/, r5, r2 << 1
++ sub r1/*t165*/, r4, r5 << 1
++ scale r4
++ sub r3/*t176*/, r1, r3 << 1
++ st.w r12[9*SLOTS*4], r4
++ neg r1
++ scale r1
++ add r6/*t206*/, r3, r0 << 1
++ neg r6
++ scale r6
++ scale r3
++ st.w r12[11*SLOTS*4], r1
++ st.w r12[15*SLOTS*4], r6
++ st.w r12[13*SLOTS*4], r3
++
++/* t193 = -((t190 * 2) - t143)
++ hi[ 7][slot] = SHIFT(t143);
++ lo[ 8][slot] = SHIFT(-t193);
++ t82 = -(t104 * 2) + t58;
++ hi[13][slot] = SHIFT(t58);
++ t134 = -(t168 * 2) + t104;
++ t196 = -(t189 * 2) + t168; */
++
++ lddsp r0/*t190*/, sp[27*4]
++ lddsp r1/*t143*/, sp[11*4]
++ lddsp r2/*t104*/, sp[5*4]
++ lddsp r3/*t58*/, sp[1*4]
++ lddsp r4/*t168*/, sp[13*4]
++ lddsp r5/*t189*/, sp[29*4]
++ sub r0/*t193*/, r1, r0 << 1
++ neg r0
++ scale r1
++ scale r0
++ st.w r11[7*SLOTS*4], r1
++ st.w r12[8*SLOTS*4], r0
++ sub r0/*t82*/, r3, r2 << 1
++ scale r3
++ sub r2/*t134*/, r2, r4 << 1
++ sub r4/*t196*/, r4, r5 << 1
++ st.w r11[13*SLOTS*4], r3
++
++/* Live: r0 = t82, r2 = t134,
++ r4 = t196
++ Free: r1, r3, r5, r6, r7, r8, r9, r10, lr */
++
++
++
++/*
++
++ t207 = -(t185 * 2) + t150;
++ t105 = (t150 * 2) + t82;
++ hi[ 9][slot] = SHIFT(-t82);
++ t120 = -(-(t134 * 2) - t105);
++ hi[ 5][slot] = SHIFT(t105);
++ t169 = (t182 * 2) + t134;
++
++ t135 = (t178 * 2) + t120;
++ hi[ 1][slot] = SHIFT(-t120);
++ t197 = -(-(t196 * 2) - t169);
++ t151 = -(t169 * 2) + t135;
++ lo[ 2][slot] = SHIFT(t135); */
++ lddsp r1/*t185*/, sp[25*4]
++ lddsp r3/*t150*/, sp[9*4]
++ lddsp r5/*t182*/, sp[21*4]
++ lddsp r8/*t178*/, sp[17*4]
++
++ sub r6/*t207*/, r3, r1 << 1
++ add r3/*t105*/, r0, r3 << 1
++ neg r0
++ scale r0
++ add r7/*t120*/, r3, r2 << 1
++ scale r3
++ st.w r11[9*SLOTS*4], r0
++ st.w r11[5*SLOTS*4], r3
++ add r2/*t169*/, r2, r5 << 1
++ add r8/*t135*/, r7, r8 << 1
++ neg r7
++ scale r7
++ add r4/*t197*/, r2, r4 << 1
++ sub r2/*t151*/, r8, r2 << 1
++ scale r8
++ st.w r11[1*SLOTS*4], r7
++ st.w r12[2*SLOTS*4], r8
++
++/* Live: r2 = t151, r4 = t197, r6 = t207
++
++ Free: r0, r1, r3, r5, r7, r8, r9, r10, lr */
++
++
++
++/* t170 = -(t207 * 2) + t151;
++ lo[ 6][slot] = SHIFT(-t151);
++
++ t198 = -(-(t197 * 2) - t170);
++ lo[10][slot] = SHIFT(t170);
++ lo[14][slot] = SHIFT(-t198);
++
++ t127 = -(t159 * 2) + t93;
++ hi[11][slot] = SHIFT(t93);
++ t194 = -(t187 * 2) + t159; */
++ lddsp r0/*t159*/, sp[15*4]
++ lddsp r1/*t93*/, sp[7*4]
++ lddsp r3/*t187*/, sp[31*4]
++ sub r5/*t170*/, r2, r6 << 1
++ neg r2
++ scale r2
++ add r4/*t198*/,r5, r4 << 1
++ neg r4
++ scale r5
++ scale r4
++ st.w r12[6*SLOTS*4], r2
++ st.w r12[10*SLOTS*4], r5
++ st.w r12[14*SLOTS*4], r4
++ sub r7/*t127*/, r1, r0 << 1
++ scale r1
++ sub r0/*t194*/, r0, r3 << 1
++ st.w r11[11*SLOTS*4], r1
++
++
++/* Live: r0 = t194, r7 = t127
++ Free: r1, r2, r3, r4, r6, r5, r8, r9, r10, lr */
++
++/* t160 = (t180 * 2) + t127;
++ hi[ 3][slot] = SHIFT(-t127);
++ t195 = -(-(t194 * 2) - t160);
++ lo[ 4][slot] = SHIFT(t160);
++ lo[12][slot] = SHIFT(-t195);
++
++ hi[15][slot] = SHIFT(t191);
++ lo[ 0][slot] = SHIFT(t192); */
++ lddsp r1/*t180*/, sp[23*4]
++ lddsp r2/*t191*/, sp[3*4]
++ lddsp r3/*t192*/, sp[19*4]
++ add r4/*t160*/, r7, r1 << 1
++ neg r7
++ scale r7
++ add r6/*t195*/, r4, r0 << 1
++ scale r4
++ neg r6
++ scale r6
++ st.w r11[3*SLOTS*4], r7
++ st.w r12[4*SLOTS*4], r4
++ st.w r12[12*SLOTS*4], r6
++ scale r2
++ scale r3
++ st.w r11[15*SLOTS*4], r2
++ st.w r12[0*SLOTS*4], r3
++
++ sub sp, -32*4
++ ldm sp++,r0-r7, r9-r11, pc
+diff --git a/fixed.h b/fixed.h
+index 4b58abf..0a1350a 100644
+--- a/fixed.h
++++ b/fixed.h
+@@ -237,6 +237,46 @@ mad_fixed_t mad_f_mul_inline(mad_fixed_t x, mad_fixed_t y)
+ # define MAD_F_SCALEBITS MAD_F_FRACBITS
+ # endif
+
++/* --- AVR32 ----------------------------------------------------------------- */
++
++# elif defined(FPM_AVR32)
++
++typedef signed short mad_coeff_t;
++
++struct DWstruct {int high, low;};
++
++typedef union {
++ struct DWstruct s;
++ long long ll;
++} DWunion;
++
++# define MAD_F_MLX(hi, lo, x, y) \
++ { register DWunion __res; \
++ __res.ll = (long long)x * (long long)y; \
++ /* asm ("muls.d\t%0, %1, %2" : "=r" (__res.ll) : "r" (x), "r" (y));*/ \
++ hi = __res.s.high; \
++ lo = __res.s.low; }
++
++# define MAD_F_MLA(hi, lo, x, y) \
++ { register DWunion __res; \
++ __res.s.high = hi; \
++ __res.s.low = lo; \
++ __res.ll += (long long)x * (long long)y; \
++/* asm ("macs.d\t%0, %1, %2" : "+r" (__res.ll) : "r" (x), "r" (y));*/ \
++ hi = __res.s.high; \
++ lo = __res.s.low; }
++
++
++# define MAD_F_MLN(hi, lo) \
++ asm ("neg %0\n" \
++ "acr %1\n" \
++ "neg %1" \
++ : "+r" (lo), "+r" (hi) \
++ :: "cc")
++
++
++# define MAD_F_SCALEBITS MAD_F_FRACBITS
++
+ /* --- ARM ----------------------------------------------------------------- */
+
+ # elif defined(FPM_ARM)
+@@ -433,6 +473,8 @@ mad_fixed_t mad_f_mul_inline(mad_fixed_t x, mad_fixed_t y)
+ *
+ * Pre-rounding is required to stay within the limits of compliance.
+ */
++typedef signed int mad_coeff_t;
++
+ # if defined(OPT_SPEED)
+ # define mad_f_mul(x, y) (((x) >> 12) * ((y) >> 16))
+ # else
+diff --git a/imdct_avr32.S b/imdct_avr32.S
+new file mode 100644
+index 0000000..d0ee6b4
+--- /dev/null
++++ b/imdct_avr32.S
+@@ -0,0 +1,789 @@
++/*
++ Optimized 36-point Inverse Modified Cosine Transform (IMDCT)
++ Copyright 2003-2006 Atmel Corporation.
++
++ Written by Ronny Pedersen, Atmel Norway
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++#define MAD_F(x) ((x + (1 << 13)) >> 14)
++
++ .public imdct36_avr32
++
++/*
++ void imdct36(mad_fixed_t const x[18], mad_fixed_t y[36])
++ {
++ mad_fixed_t tmp[18];
++ int i;
++*/
++/* DCT-IV */
++imdct36_avr32:
++ pushm r0-r7,r11,lr
++ sub sp, 4*18
++/*
++ {
++ mad_fixed_t tmp2[18];
++ int i;
++
++ /* scale[i] = 2 * cos(PI * (2 * i + 1) / (4 * 18)) */
++/*
++ static mad_fixed_t const scale[18] = {
++ MAD_F(0x1ff833fa), MAD_F(0x1fb9ea93), MAD_F(0x1f3dd120),
++ MAD_F(0x1e84d969), MAD_F(0x1d906bcf), MAD_F(0x1c62648b),
++ MAD_F(0x1afd100f), MAD_F(0x1963268b), MAD_F(0x1797c6a4),
++ MAD_F(0x159e6f5b), MAD_F(0x137af940), MAD_F(0x11318ef3),
++ MAD_F(0x0ec6a507), MAD_F(0x0c3ef153), MAD_F(0x099f61c5),
++ MAD_F(0x06ed12c5), MAD_F(0x042d4544), MAD_F(0x0165547c)
++ };
++*/
++
++ /* scaling */
++
++/*
++ for (i = 0; i < 18; i += 3) {
++ tmp2[i + 0] = mad_f_mul(x[i + 0], scale[i + 0]);
++ tmp2[i + 1] = mad_f_mul(x[i + 1], scale[i + 1]);
++ tmp2[i + 2] = mad_f_mul(x[i + 2], scale[i + 2]);
++ }
++*/
++ /* even input butterfly */
++
++/*
++ for (i = 0; i < 9; i += 3) {
++ tmp3[i + 0] = tmp2[i + 0] + tmp2[18 - (i + 0) - 1];
++ tmp3[i + 1] = tmp2[i + 1] + tmp2[18 - (i + 1) - 1];
++ tmp3[i + 2] = tmp2[i + 2] + tmp2[18 - (i + 2) - 1];
++ }
++ for (i = 0; i < 9; i += 3) {
++ tmp4[i + 0] = tmp2[i + 0] - tmp2[18 - (i + 0) - 1];
++ tmp4[i + 1] = tmp2[i + 1] - tmp2[18 - (i + 1) - 1];
++ tmp4[i + 2] = tmp2[i + 2] - tmp2[18 - (i + 2) - 1];
++ }
++*/
++
++ ld.d r8, r12[0] /*r8 = x[1], r9 = x[0]*/
++ ld.d r0, pc[scale_dctIV - .] /*r0 = {scale[2], scale[3]}, r1 = { scale[0], scale[1] }*/
++ ld.d r2, r12[2*4] /*r2 = x[3], r3 = x[2]*/
++ ld.d r4, pc[scale_dctIV - . + 14*2] /*r4 = {scale[16], scale[17]}, r5 = { scale[14], scale[15] }*/
++ mulsatrndwh.w r9/*tmp2[0]*/, r9, r1:t /*tmp2[0] = mad_f_mul(x[0], scale[0]) */
++ ld.d r6, r12[16*4] /*r6 = x[17], r7 = x[16]*/
++ mulsatrndwh.w r8/*tmp2[1]*/, r8, r1:b /*tmp2[1] = mad_f_mul(x[1], scale[1]) */
++ mulsatrndwh.w r3/*tmp2[2]*/, r3, r0:t /*tmp2[2] = mad_f_mul(x[2], scale[2]) */
++ mulsatrndwh.w r2/*tmp2[3]*/, r2, r0:b /*tmp2[3] = mad_f_mul(x[3], scale[3]) */
++ ld.d r0, r12[14*4] /*r0 = x[15], r1 = x[14]*/
++ mulsatrndwh.w r7/*tmp2[16]*/, r7, r4:t /*tmp2[16] = mad_f_mul(x[16], scale[16]) */
++ mulsatrndwh.w r6/*tmp2[17]*/, r6, r4:b /*tmp2[17] = mad_f_mul(x[17], scale[17]) */
++ mulsatrndwh.w r1/*tmp2[14]*/, r1, r5:t /*tmp2[14] = mad_f_mul(x[14], scale[14]) */
++ mulsatrndwh.w r0/*tmp2[15]*/, r0, r5:b /*tmp2[15] = mad_f_mul(x[15], scale[15]) */
++
++ ld.d r4, r12[4*4] /*r4 = x[5], r5 = x[4]*/
++
++ sub lr/*tmp4[0]*/, r9, r6
++ add r6/*tmp3[0]*/, r9, r6
++ sub r10/*tmp4[1]*/, r8, r7
++ add r7/*tmp3[1]*/, r8, r7
++ sub r9/*tmp4[2]*/, r3, r0
++ add r0/*tmp3[2]*/, r3, r0
++ sub r8/*tmp4[3]*/, r2, r1
++ add r1/*tmp3[3]*/, r2, r1
++
++ ld.d r2, pc[scale_dctIV - . + 4*2] /*r2 = {scale[6], scale[7]}, r3 = { scale[4], scale[5] }*/
++
++ stm --sp, r8-r10, lr /*sp[0] = tmp4[0],sp[1] = tmp4[1],
++ sp[2] = tmp4[2],sp[3] = tmp4[3] */
++
++ /* Registers used: r0 = tmp3[2], r1 = tmp3[3], r6 = tmp3[0], r7 = tmp3[1], r12 = x
++ Free registers: r2-r5, r8-r11, lr
++ */
++ ld.d r8, r12[6*4] /*r8 = x[7], r9 = x[6]*/
++ ld.d r10, pc[scale_dctIV - . + 10*2] /*r10 = {scale[12], scale[13]}, r11 = { scale[10], scale[11] }*/
++ mulsatrndwh.w r5/*tmp2[4]*/, r5, r3:t /*tmp2[4] = mad_f_mul(x[4], scale[4]) */
++ mulsatrndwh.w r4/*tmp2[5]*/, r4, r3:b /*tmp2[5] = mad_f_mul(x[5], scale[5]) */
++ mulsatrndwh.w r9/*tmp2[6]*/, r9, r2:t /*tmp2[6] = mad_f_mul(x[6], scale[6]) */
++ mulsatrndwh.w r8/*tmp2[7]*/, r8, r2:b /*tmp2[7] = mad_f_mul(x[7], scale[7]) */
++
++ ld.d r2, r12[12*4] /*r2 = x[13], r3 = x[12]*/
++ ld.w lr, r12[11*4] /*lr = x[11] */
++ mulsatrndwh.w r3/*tmp2[12]*/, r3, r10:t /*tmp2[12] = mad_f_mul(x[12], scale[12]) */
++ mulsatrndwh.w r2/*tmp2[13]*/, r2, r10:b /*tmp2[13] = mad_f_mul(x[13], scale[13]) */
++ ld.w r10, r12[10*4] /*r10 = x[10] */
++ mulsatrndwh.w lr/*tmp2[11]*/, lr, r11:b /*tmp2[11] = mad_f_mul(x[11], scale[11]) */
++ mulsatrndwh.w r10/*tmp2[10]*/, r10, r11:t /*tmp2[10] = mad_f_mul(x[10], scale[10]) */
++
++ sub r11/*tmp4[4]*/, r5, r2
++ add r2/*tmp3[4]*/, r5, r2
++ sub r5/*tmp4[5]*/, r4, r3
++ add r3/*tmp3[5]*/, r4, r3
++ sub r4/*tmp4[6]*/, r9, lr
++ add lr/*tmp3[6]*/, r9, lr
++ sub r9/*tmp4[7]*/, r8, r10
++ add r10/*tmp3[7]*/, r8, r10
++ lddpc r8, scale_dctIV + 8*2 /*r8 = {scale[8], scale[9]} */
++
++ stm --sp, r4, r5, r9, r11 /*sp[0] = tmp4[4],sp[1] = tmp4[7],
++ sp[2] = tmp4[5],sp[3] = tmp4[6] */
++ ld.d r4, r12[8*4] /*r4 = x[9], r5 = x[8]*/
++ mulsatrndwh.w r5/*tmp2[8]*/, r5, r8:t /*tmp2[8] = mad_f_mul(x[8], scale[8]) */
++ mulsatrndwh.w r4/*tmp2[9]*/, r4, r8:b /*tmp2[9] = mad_f_mul(x[9], scale[9]) */
++ sub r9/*tmp4[8]*/, r5, r4
++ add r5/*tmp3[8]*/, r5, r4
++
++ st.w --sp, r9 /* sp[0] = tmp4[8] */
++
++ /* Registers used:
++
++ r0=tmp3[2], r1=tmp3[3], r2=tmp3[4], r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0],
++ r7 = tmp3[1], r10=tmp3[7], lr=tmp3[6]
++ Free registers:
++ r4, r8, r9, r11, r12
++ */
++
++
++ /* SDCT-II */
++/*
++
++ {
++ mad_fixed_t tmp3[9];
++ int i;
++*/
++ /* scale[i] = 2 * cos(PI * (2 * i + 1) / (2 * 18)) */
++/*
++ static mad_fixed_t const scale[9] = {
++ MAD_F(0x1fe0d3b4), MAD_F(0x1ee8dd47), MAD_F(0x1d007930),
++ MAD_F(0x1a367e59), MAD_F(0x16a09e66), MAD_F(0x125abcf8),
++ MAD_F(0x0d8616bc), MAD_F(0x08483ee1), MAD_F(0x02c9fad7)
++ };
++*/
++ /* divide the 18-point SDCT-II into two 9-point SDCT-IIs */
++
++
++ /* fastdct */
++
++/*
++ {
++ mad_fixed_t a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12;
++ mad_fixed_t a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25;
++ mad_fixed_t m0, m1, m2, m3, m4, m5, m6, m7;
++*/
++// enum {
++// c0 = MAD_F(0x1f838b8d), /* 2 * cos( 1 * PI / 18) */
++// c1 = MAD_F(0x1bb67ae8), /* 2 * cos( 3 * PI / 18) */
++// c2 = MAD_F(0x18836fa3), /* 2 * cos( 4 * PI / 18) */
++// c3 = MAD_F(0x1491b752), /* 2 * cos( 5 * PI / 18) */
++// c4 = MAD_F(0x0af1d43a), /* 2 * cos( 7 * PI / 18) */
++// c5 = MAD_F(0x058e86a0), /* 2 * cos( 8 * PI / 18) */
++// c6 = -MAD_F(0x1e11f642) /* 2 * cos(16 * PI / 18) */
++// };
++
++/*
++ a2 = tmp3[6] + tmp3[2];
++ a6 = tmp3[8] + tmp3[0];
++ a11 = a2 - a6;
++ m5 = mad_f_mul(a11, -c6) ;
++ a4 = tmp3[1] + tmp3[7];
++
++ a18 = tmp3[4] + a4;
++ a19 = -2 * tmp3[4] + a4;
++
++ a0 = tmp3[3] + tmp3[5];
++
++*/
++ add r11/*a4*/, r7, r10
++ add r12/*a18*/, r2, r11
++ sub r11/*a19*/, r11, r2<<1
++
++ add r4/*a2*/, lr, r0
++ add r8/*a6*/, r5, r6
++ sub r9/*a11*/, r4, r8
++
++ st.d --sp, r0 /* sp[0] = tmp3[3], sp1[1] = tmp3[2]*/
++
++ mov r2, MAD_F(0x1e11f642)
++ mulsatrndwh.w r9/*m5*/, r9, r2:b
++
++ add r2/*a0*/, r1, r3
++
++ /* Registers used:
++
++ r2=a0, r3=tmp3[5], r4=a2, r5=tmp3[8], r6 = tmp3[0],
++ r7 = tmp3[1], r8=a6, r10=tmp3[7], r9=m5, r11=a19, r12=a18,lr=tmp3[6]
++ Free registers:
++ r0, r1
++ */
++
++/*
++ a8 = a0 + a2;
++ a12 = a8 + a6;
++ a10 = a0 - a6;
++ a9 = a0 - a2;
++ m7 = mad_f_mul(a9, -c2) ;
++ m6 = mad_f_mul(a10, -c5) ;
++*/
++
++ add r0/*a8*/, r2, r4
++ add r0/*a12*/, r8
++ rsub r8/*a10*/, r2
++ sub r2/*a9*/, r4
++ mov r1, -MAD_F(0x18836fa3)
++ mulsatrndwh.w r2/*m7*/, r2, r1:b
++ mov r1, -MAD_F(0x058e86a0)
++ mulsatrndwh.w r8/*m6*/, r8, r1:b
++
++ /* Registers used:
++
++ r0=a12, r2=m7, r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0],
++ r7 = tmp3[1], r8=m6, r10=tmp3[7], r9=m5, r11=a19, r12=a18,lr=tmp3[6]
++ Free registers:
++ r1, r4
++ */
++
++
++/*
++ a21 = -a19 - (m5 << 1);
++ tmp[ 8] = a21 - (m6 << 1);
++
++ a20 = a19 - (m5 << 1);
++ tmp[ 4] = (m7 << 1) + a20;
++ a22 = -a19 + (m6 << 1);
++ tmp[16] = a22 + (m7 << 1);
++ tmp[ 0] = a18 + a12;
++ tmp[12] = a12 - 2 * a18;
++*/
++ add r1/*a21*/, r11, r9 << 1
++ neg r1
++ sub r1/*tmp[8]*/, r1, r8 << 1
++ stdsp sp[4*11/*tmp3[..] on the stack*/ + 8*4], r1
++ sub r4/*a20*/, r11, r9 << 1
++ add r4/*tmp[4]*/, r4, r2 << 1
++ stdsp sp[4*11/*tmp3[..] on the stack*/ + 4*4], r4
++ neg r11
++ add r1/*a22*/, r11, r8 << 1
++ add r1/*tmp[16]*/, r1, r2 << 1
++ stdsp sp[4*11/*tmp3[..] on the stack*/ + 16*4], r1
++ add r4, r12, r0
++ sub r1, r0, r12 << 1
++ stdsp sp[4*11/*tmp3[..] on the stack*/ + 0*4], r4
++ stdsp sp[4*11/*tmp3[..] on the stack*/ + 12*4], r1
++
++ ld.d r0, sp++
++
++ /* Registers used:
++
++ r0 = tmp3[2], r1 = tmp3[3], r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0],
++ r7 = tmp3[1], r10=tmp3[7], r11=a19, lr=tmp3[6]
++ Free registers:
++ r2,r4,r8,r9,r12
++ */
++
++/*
++ a5 = tmp3[1] - tmp3[7];
++ a7 = tmp3[8] - tmp3[0];
++ a3 = tmp3[6] - tmp3[2];
++ a1 = tmp3[3] - tmp3[5];
++ a13 = a1 - a3;
++ a14 = a13 + a7;
++ m3 = mad_f_mul(a14, -c1) ;
++ m4 = mad_f_mul(a5, -c1) ;
++ tmp[ 6] = m3 << 1;
++*/
++ sub r7/*a5*/, r10
++ sub r2/*a7*/, r5, r6
++ sub r4/*a3*/, lr, r0
++ sub r8/*a1*/, r1, r3
++ sub r9/*a13*/, r8, r4
++ add r12/*a14*/, r9, r2
++ mov r0, -MAD_F(0x1bb67ae8)
++ mulsatrndwh.w r12/*m3*/, r12, r0:b
++ mulsatrndwh.w r7/*m4*/, r7, r0:b
++ lsl r12, 1
++ stdsp sp[4*9/*tmp3[..] on the stack*/ + 6*4], r12
++
++ /* Registers used:
++ r2 = a7, r4 = a3, r7 = m4, r8 = a1, r12 = m3
++
++ Free registers:
++ r0, r1, r3, r5, r6, r10, r9, r11, lr
++ */
++
++
++/*
++ a15 = a3 + a7;
++ m2 = mad_f_mul(a15, -c4) ;
++ a17 = a1 + a3;
++ m0 = mad_f_mul(a17, -c3) ;
++ a23 = (m4 << 1) + (m2 << 1);
++ tmp[14] = a23 + (m0 << 1); */
++ add r0/*a15*/, r4, r2
++ mov r1, -MAD_F(0x0af1d43a)
++ mulsatrndwh.w r0/*m2*/, r0, r1:b
++ mov r3, -MAD_F(0x1491b752)
++ add r5/*a17*/, r8, r4
++ mulsatrndwh.w r5/*m0*/, r5, r3:b
++ lsl r7, 1
++ add r6/*a23*/, r7, r0 << 1
++ add r6/*tmp[14]*/, r6, r5 << 1
++ stdsp sp[4*9/*tmp3[..] on the stack*/ + 14*4], r6
++
++ /* Registers used:
++ r0 = m2, r2 = a7, r5 = m0, r7 = m4, r8 = a1
++
++ Free registers:
++ r1, r3, r4, r6, r10, r9, r11, lr
++ */
++
++/*
++ a16 = a1 - a7;
++ m1 = mad_f_mul(a16, -c0) ;
++ a24 = (m4 << 1) - (m2 << 1);
++ tmp[10] = a24 - (m1 << 1);
++
++ a25 = (m4 << 1) + (m1 << 1);
++ tmp[ 2] = (m0 << 1) - a25;
++*/
++ sub r3/*a16*/, r8, r2
++ mov r4, -MAD_F(0x1f838b8d)
++ mulsatrndwh.w r3/*m1*/, r3, r4:b
++ sub r1/*a24*/, r7, r0 << 1
++ sub r1/*tmp[10]*/, r1, r3 << 1
++ stdsp sp[4*9/*tmp3[..] on the stack*/ + 10*4], r1
++ add r7/*a25*/, r7, r3 << 1
++ sub r7, r7, r5 << 1
++ neg r7
++ stdsp sp[4*9/*tmp3[..] on the stack*/ + 2*4], r7
++
++
++
++
++ /* output to every other slot for convenience */
++
++ /*} */
++ /* End fastdct */
++
++ /* odd input butterfly and scaling */
++
++
++ /* On the stack:
++ sp[0] = tmp4[8], sp[1] = tmp4[4],sp[2] = tmp4[7], sp[3] = tmp4[5],sp[4] = tmp4[6]
++ sp[5] = tmp4[0], sp[6] = tmp4[1],sp[7] = tmp4[2],sp[8] = tmp4[3]
++ */
++
++ /*
++ tmp3[0] = mad_f_mul(tmp4[0], scale[0]);
++ tmp3[1] = mad_f_mul(tmp4[1], scale[1]) << 1;
++ tmp3[2] = mad_f_mul(tmp4[2], scale[2]);
++ tmp3[3] = mad_f_mul(tmp4[3], scale[3]) << 1;
++ tmp3[4] = mad_f_mul(tmp4[4], scale[4]);
++ tmp3[5] = mad_f_mul(tmp4[5], scale[5]);
++ tmp3[6] = mad_f_mul(tmp4[6], scale[6]) << 1;
++ tmp3[7] = mad_f_mul(tmp4[7], scale[7]);
++ tmp3[8] = mad_f_mul(tmp4[8], scale[8]) << 1;
++ */
++ /* Registers used:
++ r1 = tmp4[3], r2 = tmp4[2], r3 = tmp4[1], r4 = tmp4[0], r7 = tmp4[6]
++ r10 = tmp4[5], r11 = tmp4[7], r12 = tmp4[4], lr = tmp4[8]
++
++ Free registers:
++ r0, r5, r6, r8, r9
++ */
++ ld.d r8, pc[ scale_sdctII - . + 4*2] /* r8 = { scale[6], scale[7] }, r9 = { scale[4], scale[5]} */
++ ldm sp++, r1, r2, r3, r4, r7, r10, r11, r12, lr
++ mov r5, MAD_F(0x02c9fad7) /* r3 = scale[8] */
++ mulsatrndwh.w r5/*tmp3[8]*/, lr, r5:b
++ mulsatrndwh.w lr/*tmp3[6]*/, r7, r8:t
++ ld.d r6, pc[ scale_sdctII - . + 0*2] /* r6 = { scale[2], scale[3] }, r7 = { scale[0], scale[1]} */
++ lsl lr, 1
++ lsl r5, 1
++ mulsatrndwh.w r0/*tmp3[2]*/, r2, r6:t
++ mulsatrndwh.w r1/*tmp3[3]*/, r1, r6:b
++ mulsatrndwh.w r6/*tmp3[0]*/, r4, r7:t
++ mulsatrndwh.w r7/*tmp3[1]*/, r3, r7:b
++ mulsatrndwh.w r3/*tmp3[5]*/, r10, r9:b
++ mulsatrndwh.w r2/*tmp3[4]*/, r12, r9:t
++ mulsatrndwh.w r9/*tmp3[7]*/, r11, r8:b
++ lsl r1, 1
++ lsl r7, 1
++
++
++ /* fastdct */
++
++/*
++ {
++ mad_fixed_t a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12;
++ mad_fixed_t a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25;
++ mad_fixed_t m0, m1, m2, m3, m4, m5, m6, m7;
++*/
++// enum {
++// c0 = MAD_F(0x1f838b8d), /* 2 * cos( 1 * PI / 18) */
++// c1 = MAD_F(0x1bb67ae8), /* 2 * cos( 3 * PI / 18) */
++// c2 = MAD_F(0x18836fa3), /* 2 * cos( 4 * PI / 18) */
++// c3 = MAD_F(0x1491b752), /* 2 * cos( 5 * PI / 18) */
++// c4 = MAD_F(0x0af1d43a), /* 2 * cos( 7 * PI / 18) */
++// c5 = MAD_F(0x058e86a0), /* 2 * cos( 8 * PI / 18) */
++// c6 = -MAD_F(0x1e11f642) /* 2 * cos(16 * PI / 18) */
++// };
++
++ /* Registers used:
++
++ r0=tmp3[2], r1=tmp3[3], r2=tmp3[4], r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0],
++ r7 = tmp3[1], r9=tmp3[7], lr=tmp3[6]
++ Free registers:
++ r4, r8, r10, r11, r12
++ */
++
++/*
++ a2 = tmp3[6] + (tmp3[2] << 1);
++ a6 = tmp3[8] + (tmp3[0] << 1);
++ a11 = a2 - a6;
++ m5 = mad_f_mul(a11, c6) ;
++ a4 = tmp3[1] + (tmp3[7] << 1);
++
++ a18 = (tmp3[4] << 1) + a4;
++ a19 = -2 * (tmp3[4] << 1) + a4;
++
++ a0 = tmp3[3] + (tmp3[5] << 1);
++
++*/
++ add r11/*a4*/, r7, r9 << 1
++ add r12/*a18*/, r11, r2 << 1
++ sub r11/*a19*/, r11, r2 << 2
++
++ add r4/*a2*/, lr, r0 << 1
++ add r8/*a6*/, r5, r6 << 1
++ sub r10/*a11*/, r4, r8
++
++ st.d --sp, r0 /* sp[0] = tmp3[3], sp1[1] = tmp3[2]*/
++
++ mov r2, -MAD_F(0x1e11f642)
++ mulsatrndwh.w r10/*m5*/, r10, r2:b
++
++ add r2/*a0*/, r1, r3 << 1
++
++ /* Registers used:
++
++ r2=a0, r3=tmp3[5], r4=a2, r5=tmp3[8], r6 = tmp3[0],
++ r7 = tmp3[1], r8=a6, r9=tmp3[7], r10=m5, r11=a19, r12=a18,lr=tmp3[6]
++ Free registers:
++ r0, r1
++ */
++
++/*
++ a8 = a0 + a2;
++ a12 = a8 + a6;
++ a10 = a0 - a6;
++ a9 = a0 - a2;
++ m7 = mad_f_mul(a9, -c2) ;
++ m6 = mad_f_mul(a10, -c5) ;
++*/
++
++ add r0/*a8*/, r2, r4
++ add r0/*a12*/, r8
++ rsub r8/*a10*/, r2
++ sub r2/*a9*/, r4
++ mov r1, -MAD_F(0x18836fa3)
++ mulsatrndwh.w r2/*m7*/, r2, r1:b
++ mov r1, -MAD_F(0x058e86a0)
++ mulsatrndwh.w r8/*m6*/, r8, r1:b
++
++ /* Registers used:
++
++ r0=a12, r2=m7, r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0],
++ r7 = tmp3[1], r8=m6, r9=tmp3[7], r10=m5, r11=a19, r12=a18,lr=tmp3[6]
++ Free registers:
++ r1, r4
++ */
++
++
++/*
++ a21 = -a19 + (m5 << 1);
++ tmp[ 9] = a21 - (m6 << 1);
++
++ a20 = -(-a19 - (m5 << 1));
++ tmp[ 5] = (m7 << 1) + a20;
++ a22 = -a19 + (m6 << 1);
++ tmp[17] = a22 + (m7 << 1);
++ tmp[ 1] = a18 + a12;
++ tmp[13] = a12 - 2 * a18;
++*/
++ sub r1/*a21*/, r11, r10 << 1
++ neg r1
++ sub r1/*tmp[9]*/, r1, r8 << 1
++ stdsp sp[4*2/*tmp3[..] on the stack*/ + 9*4], r1
++ add r4/*a20*/, r11, r10 << 1
++ add r4/*tmp[5]*/, r4, r2 << 1
++ stdsp sp[4*2/*tmp3[..] on the stack*/ + 5*4], r4
++ neg r11
++ add r1/*a22*/, r11, r8 << 1
++ add r1/*tmp[17]*/, r1, r2 << 1
++ stdsp sp[4*2/*tmp3[..] on the stack*/ + 17*4], r1
++ add r4, r12, r0
++ sub r1, r0, r12 << 1
++ stdsp sp[4*2/*tmp3[..] on the stack*/ + 1*4], r4
++ stdsp sp[4*2/*tmp3[..] on the stack*/ + 13*4], r1
++
++ ld.d r0, sp++
++
++ /* Registers used:
++
++ r0 = tmp3[2], r1 = tmp3[3], r3=tmp3[5], r5=tmp3[8], r6 = tmp3[0],
++ r7 = tmp3[1], r9=tmp3[7], r11=a19, lr=tmp3[6]
++ Free registers:
++ r2,r4,r8,r10,r12
++ */
++
++/*
++ a5 = tmp3[1] - (tmp3[7] << 1);
++ a7 = tmp3[8] - (tmp3[0] << 1);
++ a3 = tmp3[6] - (tmp3[2] << 1);
++ a1 = tmp3[3] - (tmp3[5] << 1);
++ a13 = a1 - a3;
++ a14 = a13 + a7;
++ m3 = mad_f_mul(a14, -c1) ;
++ m4 = mad_f_mul(a5, -c1) ;
++ tmp[ 7] = m3 << 1;
++*/
++ sub r7/*a5*/, r7, r9 << 1
++ sub r2/*a7*/, r5, r6 << 1
++ sub r4/*a3*/, lr, r0 << 1
++ sub r8/*a1*/, r1, r3 << 1
++ sub r10/*a13*/, r8, r4
++ add r12/*a14*/, r10, r2
++ mov r0, -MAD_F(0x1bb67ae8)
++ mulsatrndwh.w r12/*m3*/, r12, r0:b
++ mulsatrndwh.w r7/*m4*/, r7, r0:b
++ lsl r12, 1
++ stdsp sp[7*4], r12
++
++ /* Registers used:
++ r2 = a7, r4 = a3, r7 = m4, r8 = a1, r12 = m3
++
++ Free registers:
++ r0, r1, r3, r5, r6, r9, r10, r11, lr
++ */
++
++
++/*
++ a15 = a3 + a7;
++ m2 = mad_f_mul(a15, -c4) ;
++ a17 = a1 + a3;
++ m0 = mad_f_mul(a17, -c3) ;
++ a23 = (m4 << 1) + (m2 << 1);
++ tmp[15] = a23 + (m0 << 1); */
++ add r0/*a15*/, r4, r2
++ mov r1, -MAD_F(0x0af1d43a)
++ mulsatrndwh.w r0/*m2*/, r0, r1:b
++ mov r3, -MAD_F(0x1491b752)
++ add r5/*a17*/, r8, r4
++ mulsatrndwh.w r5/*m0*/, r5, r3:b
++ lsl r7, 1
++ add r6/*a23*/, r7, r0 << 1
++ add r6/*tmp[15]*/, r6, r5 << 1
++ stdsp sp[15*4], r6
++
++ /* Registers used:
++ r0 = m2, r2 = a7, r5 = m0, r7 = m4, r8 = a1
++
++ Free registers:
++ r1, r3, r4, r6, r9, r10, r11, lr
++ */
++
++/*
++ a16 = a1 - a7;
++ m1 = mad_f_mul(a16, -c0) ;
++ a24 = (m4 << 1) - (m2 << 1);
++ tmp[11] = a24 - (m1 << 1);
++
++ a25 = (m4 << 1) + (m1 << 1);
++ tmp[ 3] = (m0 << 1) - a25;
++*/
++ sub r3/*a16*/, r8, r2
++ mov r4, -MAD_F(0x1f838b8d)
++ mulsatrndwh.w r3/*m1*/, r3, r4:b
++ sub r1/*a24*/, r7, r0 << 1
++ sub r1/*tmp[11]*/, r1, r3 << 1
++ stdsp sp[11*4], r1
++ add r7/*a25*/, r7, r3 << 1
++ sub r7, r7, r5 << 1
++ neg r7
++ lddsp r12, sp[4*18+4] /* Get y from stack */
++ stdsp sp[3*4], r7
++
++
++ /* output to every other slot for convenience */
++
++ /* End fastdct */
++
++ /* output accumulation */
++
++/* for (i = 3; i < 18; i += 8) {
++ tmp[i + 0] -= tmp[(i + 0) - 2];
++ tmp[i + 2] -= tmp[(i + 2) - 2];
++ tmp[i + 4] -= tmp[(i + 4) - 2];
++ tmp[i + 6] -= tmp[(i + 6) - 2];
++ }
++ }
++*/
++
++/* End SDCT-II */
++
++
++
++ /* scale reduction and output accumulation */
++
++/*
++ for (i = 1; i < 17; i += 4) {
++ tmp[i + 0] = tmp[i + 0] - tmp[(i + 0) - 1];
++ tmp[i + 1] = tmp[i + 1] - tmp[(i + 1) - 1];
++ tmp[i + 2] = tmp[i + 2] - tmp[(i + 2) - 1];
++ tmp[i + 3] = tmp[i + 3] - tmp[(i + 3) - 1];
++ }
++ tmp[17] = tmp[17] - tmp[16];
++ }
++*/
++/* End DCT-IV */
++
++
++ /* convert 18-point DCT-IV to 36-point IMDCT */
++
++/*
++ for (i = 0; i < 9; i += 3) {
++ y[i + 0] = tmp[9 + (i + 0)];
++ y[i + 1] = tmp[9 + (i + 1)];
++ y[i + 2] = tmp[9 + (i + 2)];
++ }
++ for (i = 9; i < 27; i += 3) {
++ y[i + 0] = -tmp[36 - (9 + (i + 0)) - 1];
++ y[i + 1] = -tmp[36 - (9 + (i + 1)) - 1];
++ y[i + 2] = -tmp[36 - (9 + (i + 2)) - 1];
++ }
++ for (i = 27; i < 36; i += 3) {
++ y[i + 0] = -tmp[(i + 0) - 27];
++ y[i + 1] = -tmp[(i + 1) - 27];
++ y[i + 2] = -tmp[(i + 2) - 27];
++ }
++ }
++*/
++
++ /* Registers used:
++ r0 = tmp[8], r1 = tmp[7], r2 = tmp[6], r3 = tmp[5], r4 = tmp[4]
++ r5 = tmp[3], r6 = tmp[2], r7 = tmp[1], r8 = tmp[0], r12 = y
++
++ Free registers:
++ r9, r10, r11, lr
++ */
++
++ ldm sp++, r0-r8 /* Get tmp[0]-tmp[8] from stack */
++ sub r5, r7 /* tmp[3] -= tmp[1]*/
++ sub r3, r5 /* tmp[5] -= tmp[3]*/
++ sub r1, r3 /* tmp[7] -= tmp[5]*/
++
++ sub r7, r8 /* tmp[1] -= tmp[0]*/
++ sub r6, r7 /* tmp[2] -= tmp[1]*/
++ sub r5, r6 /* tmp[3] -= tmp[2]*/
++ neg r8
++ st.w r12[26*4], r8 /* y[26] = -tmp[0] */
++ st.w r12[27*4], r8 /* y[27] = -tmp[0] */
++ neg r7
++ neg r6
++ st.w r12[25*4], r7 /* y[25] = -tmp[1] */
++ st.w r12[24*4], r6 /* y[24] = -tmp[2] */
++ st.d r12[28*4], r6 /* y[28] = -tmp[1], y[29] = -tmp[2]*/
++
++ sub r4, r5 /* tmp[4] -= tmp[3]*/
++ sub r3, r4 /* tmp[5] -= tmp[4]*/
++ neg r5
++ neg r4
++ st.w r12[23*4], r5 /* y[23] = -tmp[3] */
++ st.w r12[22*4], r4 /* y[22] = -tmp[4] */
++ st.d r12[30*4], r4 /* y[30] = -tmp[3], y[31] = -tmp[4]*/
++
++ ldm sp++, r4-r11,lr /* Get tmp[9]-tmp[17] from stack */
++
++ sub r2, r3 /* tmp[6] -= tmp[5]*/
++
++ sub lr, r1 /* tmp[9] -= tmp[7]*/
++ sub r10, lr /* tmp[11] -= tmp[9]*/
++ sub r8, r10 /* tmp[13] -= tmp[11]*/
++ sub r6, r8 /* tmp[15] -= tmp[13]*/
++ sub r4, r6 /* tmp[17] -= tmp[15]*/
++
++ sub r1, r2 /* tmp[7] -= tmp[6]*/
++ sub r0, r1 /* tmp[8] -= tmp[7]*/
++ neg r3
++ neg r2
++ st.w r12[21*4], r3 /* y[21] = -tmp[5] */
++ st.w r12[20*4], r2 /* y[20] = -tmp[6] */
++ st.d r12[32*4], r2 /* y[32] = -tmp[5], y[33] = -tmp[6]*/
++
++ sub lr, r0 /* tmp[9] -= tmp[8]*/
++ sub r11, lr /* tmp[10] -= tmp[9]*/
++ neg r1
++ neg r0
++ st.w r12[19*4], r1 /* y[19] = -tmp[7] */
++ st.w r12[18*4], r0 /* y[18] = -tmp[8] */
++ st.d r12[34*4], r0 /* y[34] = -tmp[7], y[35] = -tmp[8]*/
++
++ sub r10, r11 /* tmp[11] -= tmp[10]*/
++ sub r9, r10 /* tmp[12] -= tmp[11]*/
++
++ st.w r12[0*4], lr /* y[0] = tmp[9]*/
++ neg lr
++ st.w r12[17*4], lr /* y[17] = -tmp[9]*/
++ st.d r12[1*4], r10 /* y[1] = tmp[10], y[2] = tmp[11] */
++ neg r11
++ neg r10
++ st.w r12[16*4], r11 /* y[16] = -tmp[10] */
++ st.w r12[15*4], r10 /* y[15] = -tmp[11] */
++
++
++ sub r8, r9 /* tmp[13] -= tmp[12]*/
++ sub r7, r8 /* tmp[14] -= tmp[13]*/
++ st.d r12[3*4], r8 /* y[3] = tmp[12], y[4] = tmp[13] */
++ neg r9
++ neg r8
++ st.w r12[14*4], r9 /* y[14] = -tmp[12] */
++ st.w r12[13*4], r8 /* y[13] = -tmp[13] */
++
++ sub r6, r7 /* tmp[15] -= tmp[14]*/
++ sub r5, r6 /* tmp[16] -= tmp[15]*/
++ sub r4, r5 /* tmp[17] -= tmp[16]*/
++
++ st.d r12[5*4], r6 /* y[5] = tmp[14], y[6] = tmp[15] */
++ neg r7
++ neg r6
++ st.w r12[12*4], r7 /* y[12] = -tmp[14] */
++ st.w r12[11*4], r6 /* y[11] = -tmp[15] */
++
++ st.d r12[7*4], r4 /* y[7] = tmp[16], y[8] = tmp[17] */
++ neg r5
++ neg r4
++ st.w r12[10*4], r5 /* y[10] = -tmp[16] */
++ st.w r12[9*4], r4 /* y[9] = -tmp[17] */
++
++ popm r0-r7,r11,pc
++
++ .align 2
++scale_dctIV:
++ .short MAD_F(0x1ff833fa), MAD_F(0x1fb9ea93), MAD_F(0x1f3dd120)
++ .short MAD_F(0x1e84d969), MAD_F(0x1d906bcf), MAD_F(0x1c62648b)
++ .short MAD_F(0x1afd100f), MAD_F(0x1963268b), MAD_F(0x1797c6a4)
++ .short MAD_F(0x159e6f5b), MAD_F(0x137af940), MAD_F(0x11318ef3)
++ .short MAD_F(0x0ec6a507), MAD_F(0x0c3ef153), MAD_F(0x099f61c5)
++ .short MAD_F(0x06ed12c5), MAD_F(0x042d4544), MAD_F(0x0165547c)
++
++ .align 2
++scale_sdctII:
++ .short MAD_F(0x1fe0d3b4), MAD_F(0x1ee8dd47), MAD_F(0x1d007930)
++ .short MAD_F(0x1a367e59), MAD_F(0x16a09e66), MAD_F(0x125abcf8)
++ .short MAD_F(0x0d8616bc), MAD_F(0x08483ee1), MAD_F(0x02c9fad7)
+diff --git a/layer3.c b/layer3.c
+index 4e5d3fa..dffdab3 100644
+--- a/layer3.c
++++ b/layer3.c
+@@ -378,6 +378,11 @@ mad_fixed_t const ca[8] = {
+ -MAD_F(0x003a2847) /* -0.014198569 */, -MAD_F(0x000f27b4) /* -0.003699975 */
+ };
+
++#ifdef FPM_AVR32
++# undef MAD_F
++# define MAD_F(x) ((x + (1 << 12)) >> 13)
++#endif
++
+ /*
+ * IMDCT coefficients for short blocks
+ * derived from section 2.4.3.4.10.2 of ISO/IEC 11172-3
+@@ -386,7 +391,7 @@ mad_fixed_t const ca[8] = {
+ * imdct_s[i /odd][k] = cos((PI / 24) * (2 * (6 + (i-1)/2) + 7) * (2 * k + 1))
+ */
+ static
+-mad_fixed_t const imdct_s[6][6] = {
++mad_coeff_t const imdct_s[6][6] = {
+ # include "imdct_s.dat"
+ };
+
+@@ -398,7 +403,7 @@ mad_fixed_t const imdct_s[6][6] = {
+ * window_l[i] = sin((PI / 36) * (i + 1/2))
+ */
+ static
+-mad_fixed_t const window_l[36] = {
++mad_coeff_t const window_l[36] = {
+ MAD_F(0x00b2aa3e) /* 0.043619387 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
+ MAD_F(0x03768962) /* 0.216439614 */, MAD_F(0x04cfb0e2) /* 0.300705800 */,
+ MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x07635284) /* 0.461748613 */,
+@@ -429,7 +434,7 @@ mad_fixed_t const window_l[36] = {
+ * window_s[i] = sin((PI / 12) * (i + 1/2))
+ */
+ static
+-mad_fixed_t const window_s[12] = {
++mad_coeff_t const window_s[12] = {
+ MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x061f78aa) /* 0.382683432 */,
+ MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0cb19346) /* 0.793353340 */,
+ MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0fdcf549) /* 0.991444861 */,
+@@ -438,6 +443,11 @@ mad_fixed_t const window_s[12] = {
+ MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
+ };
+
++#ifdef FPM_AVR32
++# undef MAD_F
++# define MAD_F(x) ((mad_fixed_t) (x##L))
++#endif
++
+ /*
+ * coefficients for intensity stereo processing
+ * derived from section 2.4.3.4.9.3 of ISO/IEC 11172-3
+@@ -879,6 +889,42 @@ void III_exponents(struct channel const *channel,
+ * NAME: III_requantize()
+ * DESCRIPTION: requantize one (positive) value
+ */
++
++#if 0
++/*static*/
++mad_fixed_t III_requantize(unsigned int value, signed int exp)
++{
++ register mad_fixed_t tmp2, tmp3;
++ long long tmp_d;
++
++ asm ("asr\t%0, %1, 2\n"
++ "ld.w\t%2, %4[%5 << 2]\n"
++ "sub\t%1, %1, %0 << 2\n"
++ "asr\t%3, %2, 7\n"
++ "andl\t%2, 0x7f, COH\n"
++ "add\t%0, %2\n"
++ "lsl\t%m0,%3,%0\n"
++ "neg\t%0\n"
++ "asr\t%3,%3,%0\n"
++ "add\t%2, %6, %1 << 2\n"
++ "ld.w\t%2, %2[12]\n"
++ "cp.w\t%0, 0\n"
++ "movlt\t%3, %m0\n"
++ "muls.d\t%0, %3, %2\n"
++ "cp.w\t%1, 0\n"
++ "breq\t0f\n"
++ "lsr\t%0, %0, 28\n"
++ "or\t%3, %0, %m0 << 4\n"
++ "0:\n"
++ : "=&r"(tmp_d), "+r"(exp), "=&r"(tmp2), "=&r"(tmp3)
++ : "r"(&rq_table), "r"(value), "r"(root_table));
++
++
++ return tmp3;
++}
++
++#else
++
+ static
+ mad_fixed_t III_requantize(unsigned int value, signed int exp)
+ {
+@@ -918,6 +964,7 @@ mad_fixed_t III_requantize(unsigned int value, signed int exp)
+
+ return frac ? mad_f_mul(requantized, root_table[3 + frac]) : requantized;
+ }
++#endif
+
+ /* we must take care that sz >= bits and sz < sizeof(long) lest bits == 0 */
+ # define MASK(cache, sz, bits) \
+@@ -2054,27 +2101,42 @@ void imdct36(mad_fixed_t const X[18], mad_fixed_t x[36])
+ }
+ # endif
+
++
++#ifdef FPM_AVR32
++# undef mad_f_mul
++# define mad_f_mul(x, y) __builtin_mulsatrndwh_w(x, y)
++#endif
++
+ /*
+ * NAME: III_imdct_l()
+ * DESCRIPTION: perform IMDCT and windowing for long blocks
+ */
+ static
+-void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
++void III_imdct_l(mad_fixed_t /*const*/ X[18], mad_fixed_t z[36],
+ unsigned int block_type)
+ {
+ unsigned int i;
++ mad_fixed_t *z_ptr;
++ mad_coeff_t *w_ptr;
+
+ /* IMDCT */
+
++#ifdef FPM_AVR32
++ imdct36_avr32(X, z);
++#else
+ imdct36(X, z);
++#endif
+
+ /* windowing */
+
++ z_ptr = &z[0];
++ w_ptr = &window_l[0];
++
+ switch (block_type) {
+ case 0: /* normal window */
+ # if defined(ASO_INTERLEAVE1)
+ {
+- register mad_fixed_t tmp1, tmp2;
++ register mad_coeff_t tmp1, tmp2;
+
+ tmp1 = window_l[0];
+ tmp2 = window_l[1];
+@@ -2091,15 +2153,16 @@ void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
+ }
+ # elif defined(ASO_INTERLEAVE2)
+ {
+- register mad_fixed_t tmp1, tmp2;
++ register mad_fixed_t tmp1;
++ register mad_coeff_t tmp2;
+
+- tmp1 = z[0];
+- tmp2 = window_l[0];
++ tmp1 = *z_ptr;
++ tmp2 = *w_ptr++;
+
+ for (i = 0; i < 35; ++i) {
+- z[i] = mad_f_mul(tmp1, tmp2);
+- tmp1 = z[i + 1];
+- tmp2 = window_l[i + 1];
++ *z_ptr++ = mad_f_mul(tmp1, tmp2);
++ tmp1 = *z_ptr;
++ tmp2 = *w_ptr++;
+ }
+
+ z[35] = mad_f_mul(tmp1, tmp2);
+@@ -2118,23 +2181,28 @@ void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
+
+ case 1: /* start block */
+ for (i = 0; i < 18; i += 3) {
+- z[i + 0] = mad_f_mul(z[i + 0], window_l[i + 0]);
+- z[i + 1] = mad_f_mul(z[i + 1], window_l[i + 1]);
+- z[i + 2] = mad_f_mul(z[i + 2], window_l[i + 2]);
++ *(z_ptr++) = mad_f_mul(*z_ptr, *w_ptr++);
++ *(z_ptr++) = mad_f_mul(*z_ptr, *w_ptr++);
++ *(z_ptr++) = mad_f_mul(*z_ptr, *w_ptr++);
+ }
++ z_ptr += 6;
++ w_ptr = &window_s[6];
+ /* (i = 18; i < 24; ++i) z[i] unchanged */
+- for (i = 24; i < 30; ++i) z[i] = mad_f_mul(z[i], window_s[i - 18]);
+- for (i = 30; i < 36; ++i) z[i] = 0;
++ for (i = 24; i < 30; ++i) *z_ptr++ = mad_f_mul(*z_ptr, *w_ptr++);
++ for (i = 30; i < 36; ++i) *z_ptr++ = 0;
+ break;
+
+ case 3: /* stop block */
+- for (i = 0; i < 6; ++i) z[i] = 0;
+- for (i = 6; i < 12; ++i) z[i] = mad_f_mul(z[i], window_s[i - 6]);
++ w_ptr = &window_s[0];
++ for (i = 0; i < 6; ++i) *z_ptr++ = 0;
++ for (i = 6; i < 12; ++i) *z_ptr++ = mad_f_mul(*z_ptr, *w_ptr++);
+ /* (i = 12; i < 18; ++i) z[i] unchanged */
++ w_ptr = &window_l[18];
++ z_ptr += 6;
+ for (i = 18; i < 36; i += 3) {
+- z[i + 0] = mad_f_mul(z[i + 0], window_l[i + 0]);
+- z[i + 1] = mad_f_mul(z[i + 1], window_l[i + 1]);
+- z[i + 2] = mad_f_mul(z[i + 2], window_l[i + 2]);
++ *z_ptr++ = mad_f_mul(*z_ptr, *w_ptr++ );
++ *z_ptr++ = mad_f_mul(*z_ptr, *w_ptr++);
++ *z_ptr++ = mad_f_mul(*z_ptr, *w_ptr++);
+ }
+ break;
+ }
+@@ -2146,10 +2214,10 @@ void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
+ * DESCRIPTION: perform IMDCT and windowing for short blocks
+ */
+ static
+-void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36])
++void III_imdct_s(mad_fixed_t /*const*/ X[18], mad_fixed_t z[36])
+ {
+ mad_fixed_t y[36], *yptr;
+- mad_fixed_t const *wptr;
++ mad_coeff_t const *wptr;
+ int w, i;
+ register mad_fixed64hi_t hi;
+ register mad_fixed64lo_t lo;
+@@ -2159,11 +2227,56 @@ void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36])
+ yptr = &y[0];
+
+ for (w = 0; w < 3; ++w) {
+- register mad_fixed_t const (*s)[6];
++ register mad_coeff_t const (*s)[6];
+
+ s = imdct_s;
+
+ for (i = 0; i < 3; ++i) {
++#ifdef FPM_AVR32
++ register long long int acc, tmp1, tmp2, tmp3, tmp4;
++ asm volatile ("ld.d\t%0, %5++\n"
++ "ld.d\t%1, %6[0]\n"
++ "ld.d\t%2, %6[2*4]\n"
++ "ld.d\t%3, %6[4*4]\n"
++ "mulwh.d\t%4, %m1, %m0:t\n"
++ "macwh.d\t%4, %1, %m0:b\n"
++ "ld.w\t%m0, %5++\n"
++ "macwh.d\t%4, %m2, %0:t\n"
++ "macwh.d\t%4, %2, %0:b\n"
++ "macwh.d\t%4, %m3, %m0:t\n"
++ "macwh.d\t%4, %3, %m0:b\n"
++ "ld.d\t%0, %5++\n"
++ "rol\t%4\n"
++ "rol\t%m4\n"
++ : "=&r"(tmp1), "=&r"(tmp2), "=&r"(tmp3), "=&r"(tmp4),
++ "=&r"(acc), "+r"(s)
++ : "r"(X));
++
++ asm volatile ("st.w\t%1[0], %m0\n"
++ "neg\t%m0\n"
++ "st.w\t%2[5*4], %m0\n"
++ : "+r"(acc)
++ : "r"(&yptr[i]), "r"(&yptr[-i]));
++
++ asm volatile ("mulwh.d\t%4, %m1, %m0:t\n"
++ "macwh.d\t%4, %1, %m0:b\n"
++ "ld.w\t%m0, %5++\n"
++ "macwh.d\t%4, %m2, %0:t\n"
++ "macwh.d\t%4, %2, %0:b\n"
++ "macwh.d\t%4, %m3, %m0:t\n"
++ "macwh.d\t%4, %3, %m0:b\n"
++ "rol\t%4\n"
++ "rol\t%m4\n"
++ : "+r"(tmp1), "+r"(tmp2), "+r"(tmp3), "+r"(tmp4),
++ "=&r"(acc), "+r"(s)
++ : "r"(X));
++
++ asm volatile ( "st.w\t%1[6*4], %m0\n"
++ "st.w\t%2[11*4], %m0\n"
++ :: "r"(acc), "r"(&yptr[i]), "r"(&yptr[-i]));
++
++
++#else
+ MAD_F_ML0(hi, lo, X[0], (*s)[0]);
+ MAD_F_MLA(hi, lo, X[1], (*s)[1]);
+ MAD_F_MLA(hi, lo, X[2], (*s)[2]);
+@@ -2187,6 +2300,7 @@ void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36])
+ yptr[11 - i] = yptr[i + 6];
+
+ ++s;
++#endif
+ }
+
+ yptr += 12;
+@@ -2198,6 +2312,196 @@ void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36])
+ yptr = &y[0];
+ wptr = &window_s[0];
+
++#ifdef FPM_AVR32
++ /* z[0] = 0;
++ z[1] = 0;
++ z[2] = 0;
++ z[3] = 0;
++ z[4] = 0;
++ z[5] = 0;
++ z[30] = 0;
++ z[31] = 0;
++ z[32] = 0;
++ z[33] = 0;
++ z[34] = 0;
++ z[35] = 0;
++ */
++ {
++ register long long int tmp, tmp2, tmp3, w0123, w4567, w891011;
++ asm volatile ("mov\t%m0, 0\n"
++ "mov\t%0, %m0\n"
++ "st.d\t%1[0], %0\n"
++ "st.d\t%1[2*4], %0\n"
++ "st.d\t%1[4*4], %0\n"
++ "st.d\t%1[30*4], %0\n"
++ "st.d\t%1[32*4], %0\n"
++ "st.d\t%1[34*4], %0\n"
++ : "=&r"(tmp) : "r"(z));
++
++
++
++ /*
++ z[6] = mad_f_mul(yptr [0], wptr[0]);
++ z[7] = mad_f_mul(yptr [1], wptr[1]);
++ z[8] = mad_f_mul(yptr [2], wptr[2]);
++ z[9] = mad_f_mul(yptr [3], wptr[3]);
++ z[10] = mad_f_mul(yptr[4], wptr[4]);
++ z[11] = mad_f_mul(yptr[5], wptr[5]);
++ z[24] = mad_f_mul(yptr [30], wptr[6]);
++ z[25] = mad_f_mul(yptr [31], wptr[7]);
++ z[26] = mad_f_mul(yptr [32], wptr[8]);
++ z[27] = mad_f_mul(yptr [33], wptr[9]);
++ z[28] = mad_f_mul(yptr[34], wptr[10]);
++ z[29] = mad_f_mul(yptr[35], wptr[11]);
++ */
++
++
++ asm volatile ("ld.d\t%0, %5[0*4]\n"
++ "ld.d\t%3, %6[0*4]\n"
++ "ld.d\t%1, %5[2*4]\n"
++ "ld.d\t%2, %5[4*4]\n"
++ "mulsatrndwh.w\t%m3, %m3, %m0:t\n"
++ "mulsatrndwh.w\t%3, %3, %m0:b\n"
++ "ld.d\t%4, %6[2*4]\n"
++ "st.d\t%7[6*4], %3\n"
++
++ "mulsatrndwh.w\t%m4, %m4, %0:t\n"
++ "mulsatrndwh.w\t%4, %4, %0:b\n"
++ "ld.d\t%3, %6[4*4]\n"
++ "st.d\t%7[8*4], %4\n"
++
++ "mulsatrndwh.w\t%m3, %m3, %m1:t\n"
++ "mulsatrndwh.w\t%3, %3, %m1:b\n"
++ "ld.d\t%4, %6[30*4]\n"
++ "st.d\t%7[10*4], %3\n"
++
++ "mulsatrndwh.w\t%m4, %m4, %1:t\n"
++ "mulsatrndwh.w\t%4, %4, %1:b\n"
++ "ld.d\t%3, %6[32*4]\n"
++ "st.d\t%7[24*4], %4\n"
++
++ "mulsatrndwh.w\t%m3, %m3, %m2:t\n"
++ "mulsatrndwh.w\t%3, %3, %m2:b\n"
++ "ld.d\t%4, %6[34*4]\n"
++ "st.d\t%7[26*4], %3\n"
++
++ "mulsatrndwh.w\t%m4, %m4, %2:t\n"
++ "mulsatrndwh.w\t%4, %4, %2:b\n"
++ "st.d\t%7[28*4], %4\n"
++
++ : "=&r"(w0123), "=&r"(w4567), "=&r"(w891011), "=&r"(tmp), "=&r"(tmp2)
++ : "r"(wptr), "r"(yptr), "r"(z));
++ /*
++ MAD_F_ML0(hi, lo, yptr[6], wptr[6]);
++ MAD_F_MLA(hi, lo, yptr[12], wptr[0]);
++ z[12] = MAD_F_MLZ(hi, lo);
++ MAD_F_ML0(hi, lo, yptr[7], wptr[7]);
++ MAD_F_MLA(hi, lo, yptr[13], wptr[1]);
++ z[13] = MAD_F_MLZ(hi, lo);
++ MAD_F_ML0(hi, lo, yptr[8], wptr[8]);
++ MAD_F_MLA(hi, lo, yptr[14], wptr[2]);
++ z[14] = MAD_F_MLZ(hi, lo);
++ MAD_F_ML0(hi, lo, yptr[9], wptr[9]);
++ MAD_F_MLA(hi, lo, yptr[15], wptr[3]);
++ z[15] = MAD_F_MLZ(hi, lo);
++ MAD_F_ML0(hi, lo, yptr[10], wptr[10]);
++ MAD_F_MLA(hi, lo, yptr[16], wptr[4]);
++ z[16] = MAD_F_MLZ(hi, lo);
++ MAD_F_ML0(hi, lo, yptr[11], wptr[11]);
++ MAD_F_MLA(hi, lo, yptr[17], wptr[5]);
++ z[17] = MAD_F_MLZ(hi, lo);
++
++ MAD_F_ML0(hi, lo, yptr[18], wptr[6]);
++ MAD_F_MLA(hi, lo, yptr[24], wptr[0]);
++ z[18] = MAD_F_MLZ(hi, lo);
++ MAD_F_ML0(hi, lo, yptr[19], wptr[7]);
++ MAD_F_MLA(hi, lo, yptr[25], wptr[1]);
++ z[19] = MAD_F_MLZ(hi, lo);
++ MAD_F_ML0(hi, lo, yptr[20], wptr[8]);
++ MAD_F_MLA(hi, lo, yptr[26], wptr[2]);
++ z[20] = MAD_F_MLZ(hi, lo);
++ MAD_F_ML0(hi, lo, yptr[21], wptr[9]);
++ MAD_F_MLA(hi, lo, yptr[27], wptr[3]);
++ z[21] = MAD_F_MLZ(hi, lo);
++ MAD_F_ML0(hi, lo, yptr[22], wptr[10]);
++ MAD_F_MLA(hi, lo, yptr[28], wptr[4]);
++ z[22] = MAD_F_MLZ(hi, lo);
++ MAD_F_ML0(hi, lo, yptr[23], wptr[11]);
++ MAD_F_MLA(hi, lo, yptr[29], wptr[5]);
++ z[23] = MAD_F_MLZ(hi, lo);*/
++
++
++ asm volatile ("ld.d\t%0, %3[6*4]\n"
++ "ld.d\t%1, %3[12*4]\n"
++ "mulwh.d\t%2, %m0, %5:t\n"
++ "macwh.d\t%2, %m1, %m4:t\n"
++ "mulwh.d\t%0, %0, %5:b\n"
++ "macwh.d\t%0, %1, %m4:b\n"
++ "lsl\t%m2, 1\n"
++ "lsl\t%2, %m0, 1\n"
++ "st.d\t%6[12*4], %2\n"
++
++ "ld.d\t%0, %3[18*4]\n"
++ "ld.d\t%1, %3[24*4]\n"
++ "mulwh.d\t%2, %m0, %5:t\n"
++ "macwh.d\t%2, %m1, %m4:t\n"
++ "mulwh.d\t%0, %0, %5:b\n"
++ "macwh.d\t%0, %1, %m4:b\n"
++ "lsl\t%m2, 1\n"
++ "lsl\t%2, %m0, 1\n"
++ "st.d\t%6[18*4], %2\n"
++
++ : "=&r"(tmp), "=&r"(tmp2), "=&r"(tmp3)
++ : "r"(yptr), "r"(w0123), "r"(w4567), "r"(z));
++
++ asm volatile ("ld.d\t%0, %3[8*4]\n"
++ "ld.d\t%1, %3[14*4]\n"
++ "mulwh.d\t%2, %m0, %m5:t\n"
++ "macwh.d\t%2, %m1, %4:t\n"
++ "mulwh.d\t%0, %0, %m5:b\n"
++ "macwh.d\t%0, %1, %4:b\n"
++ "lsl\t%m2, 1\n"
++ "lsl\t%2, %m0, 1\n"
++ "st.d\t%6[14*4], %2\n"
++
++ "ld.d\t%0, %3[20*4]\n"
++ "ld.d\t%1, %3[26*4]\n"
++ "mulwh.d\t%2, %m0, %m5:t\n"
++ "macwh.d\t%2, %m1, %4:t\n"
++ "mulwh.d\t%0, %0, %m5:b\n"
++ "macwh.d\t%0, %1, %4:b\n"
++ "lsl\t%m2, 1\n"
++ "lsl\t%2, %m0, 1\n"
++ "st.d\t%6[20*4], %2\n"
++
++ : "=&r"(tmp), "=&r"(tmp2), "=&r"(tmp3)
++ : "r"(yptr), "r"(w0123), "r"(w891011), "r"(z));
++
++ asm volatile ("ld.d\t%0, %3[10*4]\n"
++ "ld.d\t%1, %3[16*4]\n"
++ "mulwh.d\t%2, %m0, %5:t\n"
++ "macwh.d\t%2, %m1, %m4:t\n"
++ "mulwh.d\t%0, %0, %5:b\n"
++ "macwh.d\t%0, %1, %m4:b\n"
++ "lsl\t%m2, 1\n"
++ "lsl\t%2, %m0, 1\n"
++ "st.d\t%6[16*4], %2\n"
++
++ "ld.d\t%0, %3[22*4]\n"
++ "ld.d\t%1, %3[28*4]\n"
++ "mulwh.d\t%2, %m0, %5:t\n"
++ "macwh.d\t%2, %m1, %m4:t\n"
++ "mulwh.d\t%0, %0, %5:b\n"
++ "macwh.d\t%0, %1, %m4:b\n"
++ "lsl\t%m2, 1\n"
++ "lsl\t%2, %m0, 1\n"
++ "st.d\t%6[22*4], %2\n"
++
++ : "=&r"(tmp), "=&r"(tmp2), "=&r"(tmp3)
++ : "r"(yptr), "r"(w4567), "r"(w891011), "r"(z));
++
++ }
++#else
+ for (i = 0; i < 6; ++i) {
+ z[i + 0] = 0;
+ z[i + 6] = mad_f_mul(yptr[ 0 + 0], wptr[0]);
+@@ -2218,8 +2522,15 @@ void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36])
+ ++yptr;
+ ++wptr;
+ }
++#endif
+ }
+
++#ifdef FPM_AVR32
++# undef mad_f_mul
++# define mad_f_mul(x, y) ((((x) + (1L << 11)) >> 12) * \
++ (((y) + (1L << 15)) >> 16))
++#endif
++
+ /*
+ * NAME: III_overlap()
+ * DESCRIPTION: perform overlap-add of windowed IMDCT outputs
+diff --git a/synth.c b/synth.c
+index 1d28d43..f42d49b 100644
+--- a/synth.c
++++ b/synth.c
+@@ -29,20 +29,6 @@
+ # include "frame.h"
+ # include "synth.h"
+
+-/*
+- * NAME: synth->init()
+- * DESCRIPTION: initialize synth struct
+- */
+-void mad_synth_init(struct mad_synth *synth)
+-{
+- mad_synth_mute(synth);
+-
+- synth->phase = 0;
+-
+- synth->pcm.samplerate = 0;
+- synth->pcm.channels = 0;
+- synth->pcm.length = 0;
+-}
+
+ /*
+ * NAME: synth->mute()
+@@ -88,6 +74,10 @@ void mad_synth_mute(struct mad_synth *synth)
+
+ /* FPM_DEFAULT without OPT_SSO will actually lose accuracy and performance */
+
++# if defined(FPM_AVR32)
++# define OPT_SSO
++# endif
++
+ # if defined(FPM_DEFAULT) && !defined(OPT_SSO)
+ # define OPT_SSO
+ # endif
+@@ -522,9 +512,15 @@ void dct32(mad_fixed_t const in[32], unsigned int slot,
+ # endif
+ # define ML0(hi, lo, x, y) ((lo) = (x) * (y))
+ # define MLA(hi, lo, x, y) ((lo) += (x) * (y))
+-# define MLN(hi, lo) ((lo) = -(lo))
+-# define MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
+-# define SHIFT(x) ((x) >> 2)
++# if defined(FPM_AVR32)
++# define MLN(hi, lo) MAD_F_MLN((hi), (lo))
++# define MLZ(hi, lo) (hi)
++# define SHIFT(x) ((x) << 2)
++# else
++# define MLN(hi, lo) ((lo) = -(lo))
++# define MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo))
++# define SHIFT(x) ((x) >> 2)
++# endif
+ # define PRESHIFT(x) ((MAD_F(x) + (1L << 13)) >> 14)
+ # else
+ # define ML0(hi, lo, x, y) MAD_F_ML0((hi), (lo), (x), (y))
+@@ -541,11 +537,54 @@ void dct32(mad_fixed_t const in[32], unsigned int slot,
+ # endif
+ # endif
+
++/*
++ * NAME: synth->init()
++ * DESCRIPTION: initialize synth struct
++ */
++
++#ifdef FPM_AVR32
++short Dmod[17][33];
++#endif
++
+ static
++#ifdef FPM_AVR32
++short const D[17][32] = {
++#else
+ mad_fixed_t const D[17][32] = {
++#endif
+ # include "D.dat"
+ };
+
++void mad_synth_init(struct mad_synth *synth)
++{
++
++ mad_synth_mute(synth);
++
++ synth->phase = 0;
++
++ synth->pcm.samplerate = 0;
++ synth->pcm.channels = 0;
++ synth->pcm.length = 0;
++
++#ifdef FPM_AVR32
++ {
++ int i, j;
++ for ( i = 0; i < 17; i++ ){
++ for ( j = 0; j < 32; j++ ){
++ if ( j & 1 ){
++ Dmod[i][17 + (j >> 1)]= D[i][j];
++ } else {
++ Dmod[i][(j >> 1)]= D[i][j];
++ }
++ }
++
++ Dmod[i][16]= Dmod[i][16+8];
++ }
++ }
++#endif
++
++}
++
+ # if defined(ASO_SYNTH)
+ void synth_full(struct mad_synth *, struct mad_frame const *,
+ unsigned int, unsigned int);
+@@ -560,9 +599,13 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
+ {
+ unsigned int phase, ch, s, sb, pe, po;
+ mad_fixed_t *pcm1, *pcm2, (*filter)[2][2][16][8];
+- mad_fixed_t const (*sbsample)[36][32];
++ mad_fixed_t /*const*/ (*sbsample)[36][32];
+ register mad_fixed_t (*fe)[8], (*fx)[8], (*fo)[8];
++#ifdef FPM_AVR32
++ register short const (*Dptr)[32], *ptr;
++#else
+ register mad_fixed_t const (*Dptr)[32], *ptr;
++#endif
+ register mad_fixed64hi_t hi;
+ register mad_fixed64lo_t lo;
+
+@@ -573,6 +616,20 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
+ pcm1 = synth->pcm.samples[ch];
+
+ for (s = 0; s < ns; ++s) {
++# ifdef FPM_AVR32
++/*
++ int i;
++ for ( i = 0; i < 32; i++ ){
++ (*sbsample)[s][i] = ((*sbsample)[s][i] + (1 << 13)) & 0xFFFFC000;
++ }
++*/
++ dct32_avr32((*sbsample)[s], phase >> 1,
++ (*filter)[0][phase & 1], (*filter)[1][phase & 1]);
++ /* printf("dct32: %d\n", GET_CYCLES);*/
++ pcm1 = synth_avr32(phase, (mad_fixed_t *)filter, \
++ pcm1, (short *)&Dmod[0]);
++ /* printf("synth_window: %d\n", GET_CYCLES);*/
++# else
+ dct32((*sbsample)[s], phase >> 1,
+ (*filter)[0][phase & 1], (*filter)[1][phase & 1]);
+
+@@ -679,6 +736,7 @@ void synth_full(struct mad_synth *synth, struct mad_frame const *frame,
+ MLA(hi, lo, (*fo)[7], ptr[ 2]);
+
+ *pcm1 = SHIFT(-MLZ(hi, lo));
++# endif
+ pcm1 += 16;
+
+ phase = (phase + 1) % 16;
+diff --git a/synth_avr32.S b/synth_avr32.S
+new file mode 100644
+index 0000000..701077b
+--- /dev/null
++++ b/synth_avr32.S
+@@ -0,0 +1,394 @@
++/*
++ Optimized function for speeding up synthesis filter
++ in MPEG Audio Decoding.
++ Copyright 2003-2006 Atmel Corporation.
++
++ Written by Ronny Pedersen and Lars Even Almås, Atmel Norway
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
++
++
++/* *****************
++ Defining macros
++ ***************** */
++
++ .macro window_1 f, ptr, acc, ptr_offset, mul, tmp1_lo, tmp1_hi, tmp2_lo, tmp2_hi, tmp3_lo, tmp3_hi
++ ld.d \tmp1_lo, \f[0*4] /* tmp1 = { f[0], f[1] } */
++ ld.w \tmp2_lo, \ptr[0*2+\ptr_offset*2] /* tmp2_lo = { ptr[0], ptr[1] }*/
++ ld.d \tmp3_lo, \f[6*4] /* tmp3 = { f[6], f[7] } */
++ ld.w \tmp2_hi, \ptr[6*2+\ptr_offset*2] /* tmp2_hi = { ptr[6], ptr[7] }*/
++ .if \mul
++ mulwh.d \acc, \tmp1_hi, \tmp2_lo:t /* f[0] * ptr[0]*/
++ .else
++ macwh.d \acc, \tmp1_hi, \tmp2_lo:t /* f[0] * ptr[0]*/
++ .endif
++ macwh.d \acc, \tmp3_lo, \tmp2_lo:b /* f[7] * ptr[1]*/
++ ld.w \tmp2_lo, \ptr[2*2+\ptr_offset*2] /* tmp2_lo = { ptr[2], ptr[3] }*/
++ macwh.d \acc, \tmp1_lo, \tmp2_hi:b /* f[1] * ptr[7]*/
++ ld.d \tmp1_lo, \f[2*4] /* tmp1 = { f[2], f[3] } */
++
++ macwh.d \acc, \tmp3_hi, \tmp2_lo:t /* f[6] * ptr[2]*/
++ macwh.d \acc, \tmp1_hi, \tmp2_hi:t /* f[2] * ptr[6]*/
++ ld.d \tmp3_lo, \f[4*4] /* tmp3 = { f[4], f[5] } */
++ ld.w \tmp2_hi, \ptr[4*2+\ptr_offset*2] /* tmp2_hi = { ptr[4], ptr[5] }*/
++ macwh.d \acc, \tmp3_lo, \tmp2_lo:b /* f[5] * ptr[3]*/
++
++ macwh.d \acc, \tmp1_lo, \tmp2_hi:b /* f[3] * ptr[5]*/
++ macwh.d \acc, \tmp3_hi, \tmp2_hi:t /* f[4] * ptr[4]*/
++ .endm
++
++ .macro window_2 f, ptr, acc, ptr_offset, mul, tmp1_lo, tmp1_hi, tmp2_lo, tmp2_hi, tmp3_lo, tmp3_hi
++ ld.d \tmp1_lo, \f[0*4] /* tmp1 = { f[0], f[1] } */
++ ld.w \tmp2_lo, \ptr[7*2+\ptr_offset*2] /* tmp2_lo = { ptr[7], ptr[8] }*/
++ ld.d \tmp3_lo, \f[2*4] /* tmp3 = { f[2], f[3] } */
++ ld.w \tmp2_hi, \ptr[9*2+\ptr_offset*2] /* tmp2_hi = { ptr[9], ptr[10] }*/
++ .if \mul
++ mulwh.d \acc, \tmp1_hi, \tmp2_lo:t /* f[0] * ptr[7]*/
++ .else
++ macwh.d \acc, \tmp1_hi, \tmp2_lo:t /* f[0] * ptr[7]*/
++ .endif
++ macwh.d \acc, \tmp1_lo, \tmp2_lo:b /* f[1] * ptr[8]*/
++
++ ld.d \tmp1_lo, \f[4*4] /* tmp1 = { f[4], f[5] } */
++ ld.w \tmp2_lo, \ptr[11*2+\ptr_offset*2] /* tmp2_lo = { ptr[11], ptr[12] }*/
++
++ macwh.d \acc, \tmp3_hi, \tmp2_hi:t /* f[2] * ptr[9]*/
++ macwh.d \acc, \tmp3_lo, \tmp2_hi:b /* f[3] * ptr[10]*/
++
++ ld.d \tmp3_lo, \f[6*4] /* tmp3 = { f[6], f[7] } */
++ ld.w \tmp2_hi, \ptr[13*2+\ptr_offset*2] /* tmp2_hi = { ptr[13], ptr[14] }*/
++
++ macwh.d \acc, \tmp1_hi, \tmp2_lo:t /* f[4] * ptr[11]*/
++ macwh.d \acc, \tmp1_lo, \tmp2_lo:b /* f[5] * ptr[12]*/
++ macwh.d \acc, \tmp3_hi, \tmp2_hi:t /* f[6] * ptr[13]*/
++ macwh.d \acc, \tmp3_lo, \tmp2_hi:b /* f[7] * ptr[14]*/
++ .endm
++
++ .macro scale res, d_lo, d_hi
++ lsl \d_hi, 2
++ .endm
++
++/* **********************
++ Starting main function
++ ********************** */
++
++/* Function synth_avr32 is called from synth.c with arguments:
++ phase, filter, *pcm1, &D[0] */
++
++ .global synth_avr32
++synth_avr32:
++ pushm r0-r7, lr
++ sub sp, 8
++
++ /* R12 = phase, R11 = filter, R10 = pcm1, r9 = D*/
++ bld r12, 0
++ brcc synth_even
++
++ /* Filter for odd phases */
++
++ /* fe = &(*filter)[0][1][0];
++ fx = &(*filter)[0][0][0];
++ fo = &(*filter)[1][0][0]; */
++ sub lr /*fe*/, r11, -16*8*4
++ sub r8 /*fo*/, r11, -16*8*4*2
++
++ /* pe = phase >> 1; */
++ lsr r12, 1
++ stdsp sp[4], r12
++ /* ptr = (short const *)Dmod + pe; */
++ add r12, r9, r12 << 1
++
++ /* ML0(hi, lo, (*fx)[0], ptr[0 + 17]);
++ MLA(hi, lo, (*fx)[1], ptr[7 + 17]);
++ MLA(hi, lo, (*fx)[2], ptr[6 + 17]);
++ MLA(hi, lo, (*fx)[3], ptr[5 + 17]);
++ MLA(hi, lo, (*fx)[4], ptr[4 + 17]);
++ MLA(hi, lo, (*fx)[5], ptr[3 + 17]);
++ MLA(hi, lo, (*fx)[6], ptr[2 + 17]);
++ MLA(hi, lo, (*fx)[7], ptr[1 + 17]); */
++ window_1 r11/*fx*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7
++
++ /* MLN(hi, lo); */
++ neg r0
++ acr r1
++ neg r1
++
++ /* MLA(hi, lo, (*fe)[0], ptr[0]);
++ MLA(hi, lo, (*fe)[1], ptr[7]);
++ MLA(hi, lo, (*fe)[2], ptr[6]);
++ MLA(hi, lo, (*fe)[3], ptr[5]);
++ MLA(hi, lo, (*fe)[4], ptr[4]);
++ MLA(hi, lo, (*fe)[5], ptr[3]);
++ MLA(hi, lo, (*fe)[6], ptr[2]);
++ MLA(hi, lo, (*fe)[7], ptr[1]); */
++ window_1 lr/*fe*/,r12/*ptr*/,r0/*acc*/,0/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7
++
++ /* *pcm1++ = SHIFT(MLZ(hi, lo));
++
++ pcm2 = pcm1 + 31; */
++ scale r1, r0, r1
++ st.w r10/*pcm_1*/++, r1
++ sub r11/*pcm2*/, r10, -4*31
++
++ /* for (sb = 1; sb < 16; ++sb) { */
++ mov r2, 15
++ stdsp sp[0], r2
++odd_loop:
++ /* ++fe;
++ ptr += 33; */
++ sub lr /*fe*/, -8*4
++ sub r12, -33*2
++
++ /* ML0(hi, lo, (*fo)[0], ptr[0 + 17]);
++ MLA(hi, lo, (*fo)[1], ptr[7 + 17]);
++ MLA(hi, lo, (*fo)[2], ptr[6 + 17]);
++ MLA(hi, lo, (*fo)[3], ptr[5 + 17]);
++ MLA(hi, lo, (*fo)[4], ptr[4 + 17]);
++ MLA(hi, lo, (*fo)[5], ptr[3 + 17]);
++ MLA(hi, lo, (*fo)[6], ptr[2 + 17]);
++ MLA(hi, lo, (*fo)[7], ptr[1 + 17]); */
++ window_1 r8/*fo*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7
++ /* MLN(hi, lo); */
++
++ neg r0
++ acr r1
++ neg r1
++
++ /* MLA(hi, lo, (*fe)[7], ptr[1]);
++ MLA(hi, lo, (*fe)[6], ptr[2]);
++ MLA(hi, lo, (*fe)[5], ptr[3]);
++ MLA(hi, lo, (*fe)[4], ptr[4]);
++ MLA(hi, lo, (*fe)[3], ptr[5]);
++ MLA(hi, lo, (*fe)[2], ptr[6]);
++ MLA(hi, lo, (*fe)[1], ptr[7]);
++ MLA(hi, lo, (*fe)[0], ptr[0]); */
++ window_1 lr/*fe*/,r12/*ptr*/,r0/*acc*/,0/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7
++
++ /* ptr -= 2*pe; */
++ lddsp r2, sp[4]
++
++ /* *pcm1++ = SHIFT(MLZ(hi, lo)); */
++
++ scale r1, r0, r1
++ sub r12/*ptr*/, r12, r2/*pe*/<< 2
++ st.w r10/*pcm_1*/++, r1
++
++
++ /* ML0(hi, lo, (*fe)[0], ptr[7 + 17]);
++ MLA(hi, lo, (*fe)[1], ptr[8 + 17]);
++ MLA(hi, lo, (*fe)[2], ptr[9 + 17]);
++ MLA(hi, lo, (*fe)[3], ptr[10 + 17]);
++ MLA(hi, lo, (*fe)[4], ptr[11 + 17]);
++ MLA(hi, lo, (*fe)[5], ptr[12 + 17]);
++ MLA(hi, lo, (*fe)[6], ptr[13 + 17]);
++ MLA(hi, lo, (*fe)[7], ptr[14 + 17]); */
++ window_2 lr/*fe*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7
++ /* MLA(hi, lo, (*fo)[7], ptr[14]);
++ MLA(hi, lo, (*fo)[6], ptr[13]);
++ MLA(hi, lo, (*fo)[5], ptr[12]);
++ MLA(hi, lo, (*fo)[4], ptr[11]);
++ MLA(hi, lo, (*fo)[3], ptr[10]);
++ MLA(hi, lo, (*fo)[2], ptr[9]);
++ MLA(hi, lo, (*fo)[1], ptr[8]);
++ MLA(hi, lo, (*fo)[0], ptr[7]); */
++ window_2 r8/*fo*/,r12/*ptr*/,r0/*acc*/,0/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7
++
++
++ /* *pcm2-- = SHIFT(MLZ(hi, lo)); */
++ lddsp r3, sp[4]
++ lddsp r2, sp[0]
++ scale r1, r0, r1
++ st.w --r11/*pcm_2*/, r1
++
++ /* ptr += 2*pe; */
++ add r12/*ptr*/, r12, r3/*pe*/<< 2
++
++ /* ++fo;
++ } */
++ sub r8/*fo*/, -8*4
++
++ sub r2, 1
++ stdsp sp[0], r2
++ brne odd_loop
++
++ /* ptr += 33; */
++ sub r12/*ptr*/, -33*2
++
++ /* ML0(hi, lo, (*fo)[0], ptr[0 + 17]);
++ MLA(hi, lo, (*fo)[1], ptr[7 + 17]);
++ MLA(hi, lo, (*fo)[2], ptr[6 + 17]);
++ MLA(hi, lo, (*fo)[3], ptr[5 + 17]);
++ MLA(hi, lo, (*fo)[4], ptr[4 + 17]);
++ MLA(hi, lo, (*fo)[5], ptr[3 + 17]);
++ MLA(hi, lo, (*fo)[6], ptr[2 + 17]);
++ MLA(hi, lo, (*fo)[7], ptr[1 + 17]); */
++ window_1 r8/*fo*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7
++
++ rjmp synth_end
++synth_even:
++ /* Filter for even phases */
++
++ /* fe = &(*filter)[0][0][0];
++ fx = &(*filter)[0][1][0];
++ fo = &(*filter)[1][1][0]; */
++ sub lr /*fx*/, r11, -16*8*4
++ sub r8 /*fo*/, r11, -(16*8*4*2 + 16*8*4)
++
++ /* po = ((phase - 1) & 0xF) >> 1; */
++ sub r12, 1
++ andl r12, 0xe, COH
++ stdsp sp[4], r12
++ /* ptr = (short const *)Dmod + po; */
++ add r12, r9, r12
++
++ /* ML0(hi, lo, (*fx)[0], ptr[0 + 17]);
++ MLA(hi, lo, (*fx)[1], ptr[7 + 17]);
++ MLA(hi, lo, (*fx)[2], ptr[6 + 17]);
++ MLA(hi, lo, (*fx)[3], ptr[5 + 17]);
++ MLA(hi, lo, (*fx)[4], ptr[4 + 17]);
++ MLA(hi, lo, (*fx)[5], ptr[3 + 17]);
++ MLA(hi, lo, (*fx)[6], ptr[2 + 17]);
++ MLA(hi, lo, (*fx)[7], ptr[1 + 17]); */
++ window_1 lr/*fx*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7
++
++ /* MLN(hi, lo); */
++ neg r0
++ acr r1
++ neg r1
++
++ /* MLA(hi, lo, (*fe)[0], ptr[0 + 1]);
++ MLA(hi, lo, (*fe)[1], ptr[7 + 1]);
++ MLA(hi, lo, (*fe)[2], ptr[6 + 1]);
++ MLA(hi, lo, (*fe)[3], ptr[5 + 1]);
++ MLA(hi, lo, (*fe)[4], ptr[4 + 1]);
++ MLA(hi, lo, (*fe)[5], ptr[3 + 1]);
++ MLA(hi, lo, (*fe)[6], ptr[2 + 1]);
++ MLA(hi, lo, (*fe)[7], ptr[1 + 1]); */
++ window_1 r11/*fe*/,r12/*ptr*/,r0/*acc*/,1/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7
++
++ /* *pcm1++ = SHIFT(MLZ(hi, lo));
++
++ pcm2 = pcm1 + 31; */
++ scale r1, r0, r1
++ st.w r10/*pcm_1*/++, r1
++ sub lr/*pcm2*/, r10, -4*31
++
++ /* for (sb = 1; sb < 16; ++sb) { */
++ mov r2, 15
++ stdsp sp[0], r2
++even_loop:
++ /* ++fe;
++ ptr += 33; */
++ sub r11 /*fe*/, -8*4
++ sub r12, -33*2
++
++ /* ML0(hi, lo, (*fo)[0], ptr[0 + 17]);
++ MLA(hi, lo, (*fo)[1], ptr[7 + 17]);
++ MLA(hi, lo, (*fo)[2], ptr[6 + 17]);
++ MLA(hi, lo, (*fo)[3], ptr[5 + 17]);
++ MLA(hi, lo, (*fo)[4], ptr[4 + 17]);
++ MLA(hi, lo, (*fo)[5], ptr[3 + 17]);
++ MLA(hi, lo, (*fo)[6], ptr[2 + 17]);
++ MLA(hi, lo, (*fo)[7], ptr[1 + 17]); */
++ window_1 r8/*fo*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7
++ /* MLN(hi, lo); */
++ neg r0
++ acr r1
++ neg r1
++
++ /* MLA(hi, lo, (*fe)[7], ptr[1 + 1]);
++ MLA(hi, lo, (*fe)[6], ptr[2 + 1]);
++ MLA(hi, lo, (*fe)[5], ptr[3 + 1]);
++ MLA(hi, lo, (*fe)[4], ptr[4 + 1]);
++ MLA(hi, lo, (*fe)[3], ptr[5 + 1]);
++ MLA(hi, lo, (*fe)[2], ptr[6 + 1]);
++ MLA(hi, lo, (*fe)[1], ptr[7 + 1]);
++ MLA(hi, lo, (*fe)[0], ptr[0 + 1]); */
++ window_1 r11/*fe*/,r12/*ptr*/,r0/*acc*/,1/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7
++
++ /* *pcm1++ = SHIFT(MLZ(hi, lo)); */
++ lddsp r2, sp[4]
++ scale r1, r0, r1
++ /* ptr -= 2*po; */
++ sub r12/*ptr*/, r12, r2/*po*/<< 1
++ st.w r10/*pcm_1*/++, r1
++
++
++ /* ML0(hi, lo, (*fe)[0], ptr[7 + 17 - 1]);
++ MLA(hi, lo, (*fe)[1], ptr[8 + 17 - 1]);
++ MLA(hi, lo, (*fe)[2], ptr[9 + 17 - 1]);
++ MLA(hi, lo, (*fe)[3], ptr[10 + 17 - 1]);
++ MLA(hi, lo, (*fe)[4], ptr[11 + 17 - 1]);
++ MLA(hi, lo, (*fe)[5], ptr[12 + 17 - 1]);
++ MLA(hi, lo, (*fe)[6], ptr[13 + 17 - 1]);
++ MLA(hi, lo, (*fe)[7], ptr[14 + 17 - 1]); */
++ window_2 r11/*fe*/,r12/*ptr*/,r0/*acc*/,16/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7
++ /* MLA(hi, lo, (*fo)[7], ptr[14]);
++ MLA(hi, lo, (*fo)[6], ptr[13]);
++ MLA(hi, lo, (*fo)[5], ptr[12]);
++ MLA(hi, lo, (*fo)[4], ptr[11]);
++ MLA(hi, lo, (*fo)[3], ptr[10]);
++ MLA(hi, lo, (*fo)[2], ptr[9]);
++ MLA(hi, lo, (*fo)[1], ptr[8]);
++ MLA(hi, lo, (*fo)[0], ptr[7]); */
++ window_2 r8/*fo*/,r12/*ptr*/,r0/*acc*/,0/*off*/,0/*mac*/,r2,r3,r4,r5,r6,r7
++
++
++ /* *pcm2-- = SHIFT(MLZ(hi, lo)); */
++ lddsp r3, sp[4]
++ lddsp r2, sp[0]
++ scale r1, r0, r1
++ st.w --lr/*pcm_2*/, r1
++
++ /* ptr += 2*po; */
++ add r12/*ptr*/, r12, r3/*po*/<< 1
++
++ /* ++fo;
++ } */
++ sub r8/*fo*/, -8*4
++
++ sub r2, 1
++ stdsp sp[0], r2
++ brne even_loop
++
++ /* ptr += 33; */
++ sub r12/*ptr*/, -33*2
++
++ /* ML0(hi, lo, (*fo)[0], ptr[0 + 17]);
++ MLA(hi, lo, (*fo)[1], ptr[7 + 17]);
++ MLA(hi, lo, (*fo)[2], ptr[6 + 17]);
++ MLA(hi, lo, (*fo)[3], ptr[5 + 17]);
++ MLA(hi, lo, (*fo)[4], ptr[4 + 17]);
++ MLA(hi, lo, (*fo)[5], ptr[3 + 17]);
++ MLA(hi, lo, (*fo)[6], ptr[2 + 17]);
++ MLA(hi, lo, (*fo)[7], ptr[1 + 17]); */
++ window_1 r8/*fo*/,r12/*ptr*/,r0/*acc*/,17/*off*/,1/*mul*/,r2,r3,r4,r5,r6,r7
++
++
++
++synth_end:
++ /* *pcm1 = SHIFT(-MLZ(hi, lo)); */
++ scale r1, r0, r1
++ neg r1
++ st.w r10/*pcm_1*/, r1
++
++ mov r12, r10
++ sub sp, -8
++ popm r0-r7, pc
++
++
++
++
++
diff --git a/packages/libmad/libmad_0.15.1b.bb b/packages/libmad/libmad_0.15.1b.bb
index 4e486236cd..9669cbd531 100644
--- a/packages/libmad/libmad_0.15.1b.bb
+++ b/packages/libmad/libmad_0.15.1b.bb
@@ -4,9 +4,13 @@ PRIORITY = "optional"
DEPENDS = "libid3tag"
LICENSE = "GPL"
+PR = "r1"
+
SRC_URI = "${SOURCEFORGE_MIRROR}/mad/libmad-${PV}.tar.gz"
S = "${WORKDIR}/libmad-${PV}"
+SRC_URI_append_avr32 = " file://libmad-0.15.1b-avr32-optimization.patch;patch=1"
+
inherit autotools
EXTRA_OECONF = "-enable-speed --enable-shared"
diff --git a/packages/linux/linux-rp-2.6.22/.mtn2git_empty b/packages/libmatthew/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-rp-2.6.22/.mtn2git_empty
+++ b/packages/libmatthew/.mtn2git_empty
diff --git a/packages/libmatthew/libmatthew_0.5.bb b/packages/libmatthew/libmatthew_0.5.bb
new file mode 100644
index 0000000000..23ee04ed26
--- /dev/null
+++ b/packages/libmatthew/libmatthew_0.5.bb
@@ -0,0 +1,54 @@
+DESCRIPTION = "Unix socket, debug and hexdump libraries"
+LICENSE = "LGPL"
+SECTION = "libs"
+MAINTAINER = "Fabian Koester, tarent GmbH Bonn <f.koester@tarent.de>"
+HOMEPAGE = "http://jalimo.org"
+AUTHOR = "Matthew Johnson <web@matthew.ath.cx>"
+
+inherit java-library
+
+DEPENDS = "classpath-native classpath"
+
+SRC_URI = "http://www.matthew.ath.cx/projects/java/libmatthew-java-${PV}.tar.gz"
+
+S = "${WORKDIR}/libmatthew-java-${PV}"
+
+do_compile() {
+ oe_runmake \
+ JCFLAGS="-source 1.5" \
+ JAVAC="javac" \
+ JAR="fastjar" \
+ JAVAH="gjavah" \
+ INCLUDES="-I${STAGING_INCDIR}/classpath" \
+ LDFLAGS="-fpic -shared -lc ${LDFLAGS}" \
+ LD="${CC}"
+}
+
+do_stage() {
+ oe_jarinstall -s cgi-0.5.jar cgi.jar
+ oe_jarinstall -s debug-disable-1.1.jar debug-disable.jar
+ oe_jarinstall -s debug-enable-1.1.jar debug-enable.jar
+ oe_jarinstall -s hexdump-0.1.jar hexdump.jar
+ oe_jarinstall -s io-0.1.jar io.jar
+ oe_jarinstall -s unix-0.2.jar unix.jar
+}
+
+do_install() {
+ oe_jarinstall cgi-0.5.jar cgi.jar
+ oe_jarinstall debug-disable-1.1.jar debug-disable.jar
+ oe_jarinstall debug-enable-1.1.jar debug-enable.jar
+ oe_jarinstall hexdump-0.1.jar hexdump.jar
+ oe_jarinstall io-0.1.jar io.jar
+ oe_jarinstall unix-0.2.jar unix.jar
+
+ oe_libinstall -so libcgi-java ${D}${libdir}/jni
+ oe_libinstall -so libunix-java ${D}${libdir}/jni
+}
+
+PACKAGES += "${PN}-jni ${PN}-jni-dbg"
+
+RDEPENDS_${JPN} = "${PN}-jni"
+
+FILES_${PN}-jni = "${libdir}/jni/lib*.so"
+FILES_${PN}-jni-dbg = "${libdir}/jni/.debug/lib*.so"
+
diff --git a/packages/libmimedir/libmimedir_0.3.1.bb b/packages/libmimedir/libmimedir_0.3.1.bb
index ff7ec3ec45..2429b798c2 100644
--- a/packages/libmimedir/libmimedir_0.3.1.bb
+++ b/packages/libmimedir/libmimedir_0.3.1.bb
@@ -3,9 +3,12 @@ SECTION = "libs"
PRIORITY = "optional"
LICENSE = "LGPL"
DEPENDS = "intltool-native"
-PR = "r3"
+PR = "r4"
-DEFAULT_PREFERENCE = "1"
+# 0.3.1 has at least 2 known bugs which may lead to data corruption/loss:
+# 1. Arbitrary cutting off of NOTE field during parsing.
+# 2. Parsing only one value from CATEGORIES field.
+DEFAULT_PREFERENCE = "-1"
SRC_URI = "http://www.rittau.org/mimedir/${P}.tar.gz \
file://mimedir-duration.diff;patch=1"
diff --git a/packages/libnet/libnet_1.1.2.1.bb b/packages/libnet/libnet_1.1.2.1.bb
index 2dc6e713f9..b5fada0148 100644
--- a/packages/libnet/libnet_1.1.2.1.bb
+++ b/packages/libnet/libnet_1.1.2.1.bb
@@ -33,7 +33,7 @@ do_stage () {
}
#static build
-PACKAGES = "${PN}-dev ${PN}-doc"
+PACKAGES = "${PN}-dbg ${PN}-dev ${PN}-doc"
FILES_${PN}-dev += "${bindir}/libnet-config"
diff --git a/packages/libogg/libogg_1.1.3.bb b/packages/libogg/libogg_1.1.3.bb
new file mode 100644
index 0000000000..0a6e827ff1
--- /dev/null
+++ b/packages/libogg/libogg_1.1.3.bb
@@ -0,0 +1,17 @@
+SECTION = "libs"
+DESCRIPTION = "libogg is the bitstream and framing library \
+for the Ogg project. It provides functions which are \
+necessary to codec libraries like libvorbis."
+LICENSE = "BSD"
+
+SRC_URI = "http://downloads.xiph.org/releases/ogg/libogg-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_stage () {
+ oe_libinstall -a -so -C src libogg ${STAGING_LIBDIR}
+
+ install -d ${STAGING_INCDIR}/ogg
+ (cd ${S}/include/ogg; cp config_types.h ogg.h os_types.h ${STAGING_INCDIR}/ogg/)
+ install -m 0644 ${S}/ogg.m4 ${STAGING_DATADIR}/aclocal/
+}
diff --git a/packages/libogg/libtheora_0.9+1.0alpha7.bb b/packages/libogg/libtheora_0.9+1.0alpha7.bb
index 67ec27b560..5a372b65a1 100644
--- a/packages/libogg/libtheora_0.9+1.0alpha7.bb
+++ b/packages/libogg/libtheora_0.9+1.0alpha7.bb
@@ -1,5 +1,5 @@
-DEPENDS = "libogg libsdl-x11"
+DEPENDS = "libogg libvorbis libsdl-x11"
SRC_URI = "http://downloads.xiph.org/releases/theora/libtheora-1.0alpha7.tar.gz"
diff --git a/packages/libpng/libpng_1.2.12.bb b/packages/libpng/libpng_1.2.12.bb
index c26d5e5d87..b05bc84856 100644
--- a/packages/libpng/libpng_1.2.12.bb
+++ b/packages/libpng/libpng_1.2.12.bb
@@ -9,7 +9,7 @@ DEPENDS = "zlib"
PACKAGES =+ "${PN}12-dbg ${PN}12 ${PN}12-dev"
-FILES_${PN}12-dbg = "${libdir}/libpng12*.dbg"
+FILES_${PN}12-dbg += "${libdir}/libpng12*.dbg"
FILES_${PN}12 = "${libdir}/libpng12.so.*"
FILES_${PN}12-dev = "${libdir}/libpng12.* ${includedir}/libpng12 ${libdir}/pkgconfig/libpng12.pc"
FILES_${PN} = "${libdir}/lib*.so.*"
diff --git a/packages/libpng/libpng_1.2.19.bb b/packages/libpng/libpng_1.2.19.bb
index c6c296cae4..3730f3d727 100644
--- a/packages/libpng/libpng_1.2.19.bb
+++ b/packages/libpng/libpng_1.2.19.bb
@@ -40,7 +40,7 @@ python do_package() {
PACKAGES =+ "${PN}12-dbg ${PN}12 ${PN}12-dev"
-FILES_${PN}12-dbg = "${libdir}/libpng12*.dbg"
+FILES_${PN}12-dbg += "${libdir}/libpng12*.dbg"
FILES_${PN}12 = "${libdir}/libpng12.so.*"
FILES_${PN}12-dev = "${libdir}/libpng12.* ${includedir}/libpng12 ${libdir}/pkgconfig/libpng12.pc"
FILES_${PN} = "${libdir}/lib*.so.*"
diff --git a/packages/libpng/libpng_1.2.20.bb b/packages/libpng/libpng_1.2.20.bb
index c6c296cae4..3730f3d727 100644
--- a/packages/libpng/libpng_1.2.20.bb
+++ b/packages/libpng/libpng_1.2.20.bb
@@ -40,7 +40,7 @@ python do_package() {
PACKAGES =+ "${PN}12-dbg ${PN}12 ${PN}12-dev"
-FILES_${PN}12-dbg = "${libdir}/libpng12*.dbg"
+FILES_${PN}12-dbg += "${libdir}/libpng12*.dbg"
FILES_${PN}12 = "${libdir}/libpng12.so.*"
FILES_${PN}12-dev = "${libdir}/libpng12.* ${includedir}/libpng12 ${libdir}/pkgconfig/libpng12.pc"
FILES_${PN} = "${libdir}/lib*.so.*"
diff --git a/packages/libpng/libpng_1.2.8.bb b/packages/libpng/libpng_1.2.8.bb
index 76a86f6d28..cddc400375 100644
--- a/packages/libpng/libpng_1.2.8.bb
+++ b/packages/libpng/libpng_1.2.8.bb
@@ -8,7 +8,7 @@ DEPENDS = "zlib"
PACKAGES =+ "${PN}12-dbg ${PN}12 ${PN}12-dev"
-FILES_${PN}12-dbg = "${libdir}/libpng12*.dbg"
+FILES_${PN}12-dbg += "${libdir}/libpng12*.dbg"
FILES_${PN}12 = "${libdir}/libpng12.so.*"
FILES_${PN}12-dev = "${libdir}/libpng12.* ${includedir}/libpng12 ${libdir}/pkgconfig/libpng12.pc"
FILES_${PN} = "${libdir}/lib*.so.*"
diff --git a/packages/libqanava/libqanava_0.0.7.bb b/packages/libqanava/libqanava_0.0.7.bb
index dbec5c7001..af1e8616f5 100644
--- a/packages/libqanava/libqanava_0.0.7.bb
+++ b/packages/libqanava/libqanava_0.0.7.bb
@@ -1,4 +1,4 @@
-DESCRIPTION = "Qanava is a gtaph library based on the Qt4 Arthur framework."
+DESCRIPTION = "Qanava is a graph library based on the Qt4 Arthur framework."
SECTION = "x11/libs"
HOMEPAGE = "http://www.libqanava.org/"
# LGPL after 0.0.7
@@ -8,7 +8,7 @@ PR = "r0"
SRC_URI = "http://www.libqanava.org/dl/qanava-${PV}.tar.gz"
S = "${WORKDIR}/qanava-${PV}"
-inherit qmake qt4x11
+inherit qt4x11
PARALLEL_MAKE = ""
@@ -41,7 +41,7 @@ do_install() {
done
}
-PACKAGES = "libqanava-can libqanava-la libqanava-utl qanava-examples"
+PACKAGES = "${PN}-dbg libqanava-can libqanava-la libqanava-utl qanava-examples"
FILES_libqanava-can = "${libdir}/libqanava_can*.so*"
FILES_libqanava-la = "${libdir}/libqanava_la*.so*"
FILES_libqanava-utl = "${libdir}/libqanava_utl*.so*"
diff --git a/packages/librcf/librcf_0.4.bb b/packages/librcf/librcf_0.4.bb
index d18d2d8241..7d767750c8 100644
--- a/packages/librcf/librcf_0.4.bb
+++ b/packages/librcf/librcf_0.4.bb
@@ -36,7 +36,7 @@ do_stage() {
tar -C include --exclude='*.diff' -cvf - . | tar -C ${STAGING_INCDIR} -xvf -
}
-PACKAGES = "${PN}-mt ${PN}-st ${PN}-dev"
+PACKAGES = "${PN}-dbg ${PN}-mt ${PN}-st ${PN}-dev"
FILES_${PN}-mt = "/usr/lib/libRCFmt.so*"
FILES_${PN}-st = "/usr/lib/libRCFst.so*"
FILES_${PN}-dev = "/usr/lib/libRCF[sm]t.a /usr/include"
diff --git a/packages/libsdl/libsdl-mixer_1.2.6.bb b/packages/libsdl/libsdl-mixer_1.2.6.bb
index f78d992806..84841d9741 100644
--- a/packages/libsdl/libsdl-mixer_1.2.6.bb
+++ b/packages/libsdl/libsdl-mixer_1.2.6.bb
@@ -1,9 +1,9 @@
DESCRIPTION = "Simple DirectMedia Layer mixer library."
SECTION = "libs"
PRIORITY = "optional"
-DEPENDS = "virtual/libsdl"
+DEPENDS = "virtual/libsdl libmikmod"
LICENSE = "LGPL"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-${PV}.tar.gz"
S = "${WORKDIR}/SDL_mixer-${PV}"
@@ -12,7 +12,7 @@ export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config"
inherit autotools
-EXTRA_OECONF = "--disable-music-mp3 --disable-music-libmikmod"
+EXTRA_OECONF = "--disable-music-mp3"
# although we build smpeg... need to find out how
# to deal with optional dependencies
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/.mtn2git_empty b/packages/libshout/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/.mtn2git_empty
+++ b/packages/libshout/.mtn2git_empty
diff --git a/packages/llvm/files/.mtn2git_empty b/packages/libshout/files/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/llvm/files/.mtn2git_empty
+++ b/packages/libshout/files/.mtn2git_empty
diff --git a/packages/libshout/files/no-host-includes.ac b/packages/libshout/files/no-host-includes.ac
new file mode 100644
index 0000000000..f5255359b0
--- /dev/null
+++ b/packages/libshout/files/no-host-includes.ac
@@ -0,0 +1,13 @@
+diff --git a/configure.ac b/configure.ac
+index 52fc51d..e93fc52 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -179,7 +179,7 @@ eval shout_includedir="$includedir"
+ prefix="$save_prefix"
+
+ SHOUT_VERSION="$VERSION"
+-SHOUT_CPPFLAGS="-I$shout_includedir $VORBIS_CFLAGS $PTHREAD_CPPFLAGS"
++SHOUT_CPPFLAGS="$VORBIS_CFLAGS $PTHREAD_CPPFLAGS"
+ SHOUT_CFLAGS="$PTHREAD_CFLAGS"
+ SHOUT_LIBS="-lshout"
+
diff --git a/packages/libshout/libshout.inc b/packages/libshout/libshout.inc
new file mode 100644
index 0000000000..3037eb0f46
--- /dev/null
+++ b/packages/libshout/libshout.inc
@@ -0,0 +1,20 @@
+DESCRIPTION = "Library which can be used to write a source client like ices"
+HOMEPAGE = "http://www.icecast.org"
+DEPENDS = "speex libtheora libvorbis libogg"
+LICENSE = "LGPL"
+
+SRC_URI = "http://downloads.us.xiph.org/releases/libshout/libshout-${PV}.tar.gz \
+ file://no-host-includes.ac;patch=1 "
+
+inherit autotools
+
+do_configure_prepend() {
+ # Use the staged m4 files
+ rm -f ${S}/m4/speex.m4
+ rm -f ${S}/m4/ogg.m4
+ rm -f ${S}/m4/vorbis.m4
+}
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/libshout/libshout_2.2.2.bb b/packages/libshout/libshout_2.2.2.bb
new file mode 100644
index 0000000000..bd54419686
--- /dev/null
+++ b/packages/libshout/libshout_2.2.2.bb
@@ -0,0 +1 @@
+require ${PN}.inc
diff --git a/packages/libtiff/tiff_3.7.2.bb b/packages/libtiff/tiff_3.7.2.bb
index e11028ed8d..1f28e718bc 100644
--- a/packages/libtiff/tiff_3.7.2.bb
+++ b/packages/libtiff/tiff_3.7.2.bb
@@ -20,6 +20,6 @@ do_stage() {
PACKAGES =+ "tiffxx tiffxx-dbg tiffxx-dev tiff-utils tiff-utils-dbg"
FILES_tiffxx = "${libdir}/libtiffxx.so.*"
FILES_tiffxx-dev = "${libdir}/libtiffxx.so ${libdir}/libtiffxx.*a"
-FILES_tiffxx-dbg = "${libdir}/.debug/libtiffxx.so*"
+FILES_tiffxx-dbg += "${libdir}/.debug/libtiffxx.so*"
FILES_tiff-utils = "${bindir}/*"
-FILES_tiff-utils-dbg = "${bindir}/.debug/"
+FILES_tiff-utils-dbg += "${bindir}/.debug/"
diff --git a/packages/nonworking/redboot-utils/.mtn2git_empty b/packages/libtool/libtool-1.5.6/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/nonworking/redboot-utils/.mtn2git_empty
+++ b/packages/libtool/libtool-1.5.6/.mtn2git_empty
diff --git a/packages/libtool/libtool-1.5.6/autotools.patch b/packages/libtool/libtool-1.5.6/autotools.patch
new file mode 100644
index 0000000000..5df441e945
--- /dev/null
+++ b/packages/libtool/libtool-1.5.6/autotools.patch
@@ -0,0 +1,127 @@
+diff -urNd -urNd libtool-1.5/cdemo/configure.ac libtool-1.5.ac/cdemo/configure.ac
+--- libtool-1.5/cdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/cdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([cdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([main.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/demo/configure.ac libtool-1.5.ac/demo/configure.ac
+--- libtool-1.5/demo/configure.ac 2002-03-02 22:19:55.000000000 -0500
++++ libtool-1.5.ac/demo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([demo], [1.0], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([hello.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/demo/Makefile.am libtool-1.5.ac/demo/Makefile.am
+--- libtool-1.5/demo/Makefile.am 2002-11-19 04:42:39.000000000 -0500
++++ libtool-1.5.ac/demo/Makefile.am 2004-05-05 17:17:34.000000000 -0400
+@@ -121,17 +121,16 @@
+
+ # This is one of the essential tests for deplibs_check_method=pass_all.
+ # If this one passes with pass_all, it is likely that pass_all works
+-EXTRA_LIBRARIES = libhell0.a
+-libhell0_a_SOURCES = hello.c foo.c
+-EXTRA_LTLIBRARIES = libhell1.la libhell2.la
++EXTRA_LTLIBRARIES = libhell0.la libhell1.la libhell2.la
++libhell0_la_SOURCES = hello.c foo.c
+ libhell1_la_SOURCES = hell1.c
+ libhell1_la_LIBADD = -L. -lhell0
+ libhell1_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell1_la_DEPENDENCIES = libhell0.a
++libhell1_la_DEPENDENCIES = libhell0.la
+ libhell2_la_SOURCES = hell2.c
+ libhell2_la_LIBADD = -L. -lhell0
+ libhell2_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell2_la_DEPENDENCIES = libhell0.a
++libhell2_la_DEPENDENCIES = libhell0.la
+ EXTRA_PROGRAMS = hell0
+ hell0_SOURCES = main.c
+ hell0_LDADD = libhell1.la libhell2.la $(LIBM)
+diff -urNd -urNd libtool-1.5/depdemo/configure.ac libtool-1.5.ac/depdemo/configure.ac
+--- libtool-1.5/depdemo/configure.ac 2002-10-22 15:29:28.000000000 -0400
++++ libtool-1.5.ac/depdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([depdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([main.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/f77demo/configure.ac libtool-1.5.ac/f77demo/configure.ac
+--- libtool-1.5/f77demo/configure.ac 2003-03-22 01:34:27.000000000 -0500
++++ libtool-1.5.ac/f77demo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -23,6 +23,7 @@
+ ## ------------------------ ##
+ AC_INIT([f77demo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([foof.f])dnl
++AC_CONFIG_AUX_DIR([..])
+
+ ## ------------------------ ##
+ ## Automake Initialisation. ##
+diff -urNd -urNd libtool-1.5/mdemo/configure.ac libtool-1.5.ac/mdemo/configure.ac
+--- libtool-1.5/mdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/mdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([mdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([main.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/pdemo/configure.ac libtool-1.5.ac/pdemo/configure.ac
+--- libtool-1.5/pdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/pdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([pdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([longer_file_name_hello.c])
++AC_CONFIG_AUX_DIR([..])
+
+
+ ## ------------------------ ##
+diff -urNd -urNd libtool-1.5/pdemo/Makefile.am libtool-1.5.ac/pdemo/Makefile.am
+--- libtool-1.5/pdemo/Makefile.am 2002-11-19 04:42:39.000000000 -0500
++++ libtool-1.5.ac/pdemo/Makefile.am 2004-05-05 17:17:59.000000000 -0400
+@@ -121,17 +121,16 @@
+
+ # This is one of the essential tests for deplibs_check_method=pass_all.
+ # If this one passes with pass_all, it is likely that pass_all works
+-EXTRA_LIBRARIES = libhell0.a
+-libhell0_a_SOURCES = longer_file_name_hello.c longer_file_name_foo.c
+-EXTRA_LTLIBRARIES = libhell1.la libhell2.la
++libhell0_la_SOURCES = longer_file_name_hello.c longer_file_name_foo.c
++EXTRA_LTLIBRARIES = libhell0.la libhell1.la libhell2.la
+ libhell1_la_SOURCES = longer_file_name_hell1.c
+ libhell1_la_LIBADD = -L. -lhell0
+ libhell1_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell1_la_DEPENDENCIES = libhell0.a
++libhell1_la_DEPENDENCIES = libhell0.la
+ libhell2_la_SOURCES = longer_file_name_hell2.c
+ libhell2_la_LIBADD = -L. -lhell0
+ libhell2_la_LDFLAGS = -no-undefined -rpath $(libdir)
+-libhell2_la_DEPENDENCIES = libhell0.a
++libhell2_la_DEPENDENCIES = libhell0.la
+ EXTRA_PROGRAMS = hell0
+ hell0_SOURCES = longer_file_name_main.c
+ hell0_LDADD = libhell1.la libhell2.la $(LIBM)
+diff -urNd -urNd libtool-1.5/tagdemo/configure.ac libtool-1.5.ac/tagdemo/configure.ac
+--- libtool-1.5/tagdemo/configure.ac 2001-10-06 11:35:17.000000000 -0400
++++ libtool-1.5.ac/tagdemo/configure.ac 2004-05-05 17:16:17.000000000 -0400
+@@ -24,6 +24,7 @@
+ ## ------------------------ ##
+ AC_INIT([tagdemo], [0.1], [bug-libtool@gnu.org])
+ AC_CONFIG_SRCDIR([foo.cpp])
++AC_CONFIG_AUX_DIR([..])
+
+ AC_CANONICAL_TARGET
+
diff --git a/packages/libtool/libtool_1.5.10.bb b/packages/libtool/libtool_1.5.10.bb
index 35cebfa5c2..3a9ff7ef59 100644
--- a/packages/libtool/libtool_1.5.10.bb
+++ b/packages/libtool/libtool_1.5.10.bb
@@ -17,7 +17,7 @@ PACKAGES =+ "libltdl libltdl-dev libltdl-dbg"
FILES_${PN} += "${datadir}/aclocal*"
FILES_libltdl = "${libdir}/libltdl.so.*"
FILES_libltdl-dev = "${libdir}/libltdl.* ${includedir}/ltdl.h"
-FILES_libltdl-dbg = "${libdir}/.debug/"
+FILES_libltdl-dbg += "${libdir}/.debug/"
inherit autotools
diff --git a/packages/libtool/libtool_1.5.22.bb b/packages/libtool/libtool_1.5.22.bb
index d470d30cda..66182cb57e 100644
--- a/packages/libtool/libtool_1.5.22.bb
+++ b/packages/libtool/libtool_1.5.22.bb
@@ -15,7 +15,7 @@ SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \
# file://3figures.patch;patch=1"
S = "${WORKDIR}/libtool-${PV}"
-PACKAGES = "libltdl libltdl-dev ${PN}"
+PACKAGES = "${PN}-dbg libltdl libltdl-dev ${PN}"
FILES_${PN} += "${datadir}/aclocal*"
FILES_libltdl = "${libdir}/libltdl.so.*"
FILES_libltdl-dev = "${libdir}/libltdl.* ${includedir}/ltdl.h"
diff --git a/packages/libtool/libtool_1.5.24.bb b/packages/libtool/libtool_1.5.24.bb
index de91370ac5..f40613f3ee 100644
--- a/packages/libtool/libtool_1.5.24.bb
+++ b/packages/libtool/libtool_1.5.24.bb
@@ -16,7 +16,7 @@ SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \
S = "${WORKDIR}/libtool-${PV}"
-PACKAGES = "libltdl libltdl-dev ${PN}"
+PACKAGES = "${PN}-dbg libltdl libltdl-dev ${PN}"
FILES_${PN} += "${datadir}/aclocal*"
FILES_libltdl = "${libdir}/libltdl.so.*"
FILES_libltdl-dev = "${libdir}/libltdl.* ${includedir}/ltdl.h"
diff --git a/packages/libtool/libtool_1.5.6.bb b/packages/libtool/libtool_1.5.6.bb
new file mode 100644
index 0000000000..7c02c4ba97
--- /dev/null
+++ b/packages/libtool/libtool_1.5.6.bb
@@ -0,0 +1,38 @@
+# Exists for compatibility with certain distributions (e.g. Maemo).
+
+DESCRIPTION = "Generic library support script \
+This is GNU libtool, a generic library support script. Libtool hides \
+the complexity of generating special library types (such as shared \
+libraries) behind a consistent interface."
+HOMEPAGE = "http://www.gnu.org/software/libtool/libtool.html"
+LICENSE = "GPL"
+SECTION = "devel"
+PR = "r2"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${GNU_MIRROR}/libtool/libtool-${PV}.tar.gz \
+ file://autotools.patch;patch=1"
+S = "${WORKDIR}/libtool-${PV}"
+
+PACKAGES = "libltdl libltdl-dbg libltdl-dev ${PN} ${PN}-doc"
+FILES_${PN} += "${datadir}/aclocal*"
+FILES_libltdl = "${libdir}/libltdl.so.*"
+FILES_libltdl-dev = "${libdir}/libltdl.* ${includedir}/ltdl.h"
+FILES_libltdl-dbg += "${libdir}/.debug/"
+
+inherit autotools
+
+EXTRA_AUTORECONF = "--exclude=libtoolize"
+
+do_configure () {
+ find ${S} -name acinclude.m4 | for m4 in `cat`; do
+ cat ${S}/libtool.m4 ${S}/ltdl.m4 > $m4
+ done
+ autotools_do_configure
+}
+
+do_stage () {
+ oe_libinstall -a -so -C libltdl libltdl ${STAGING_LIBDIR}
+ install -m 0644 libltdl/ltdl.h ${STAGING_INCDIR}/
+}
diff --git a/packages/libvncserver/libvncserver_0.8.2.bb b/packages/libvncserver/libvncserver_0.8.2.bb
deleted file mode 100644
index 188b22a14e..0000000000
--- a/packages/libvncserver/libvncserver_0.8.2.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-DESCRIPTION = "A library to support implementations of RDP/VNC servers"
-LICENSE = "GPLv2"
-HOMEPAGE = "http://sourceforge.net/projects/libvncserver"
-AUTHOR = "Johannes Schindelin <dscho@users.sourceforge.net>"
-SECTION = "libs"
-PRIORITY = "optional"
-PROVIDES = "x11vnc"
-DEPENDS = "virtual/libsdl virtual/libx11 zlib jpeg libxext"
-PR = "r2"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/libvncserver/LibVNCServer-${PV}.tar.gz;md5sum=17a18e398af6c1730f72068022a152aa"
-S = "${WORKDIR}/LibVNCServer-${PV}"
-
-inherit autotools
-
-do_stage() {
- autotools_stage_all
-}
-
-do_install_append() {
- install -d ${D}${bindir}
- install -m 0755 examples/storepasswd ${D}${bindir}
- install -d ${D}${datadir}/fbvncserver/classes
- install -m 0644 classes/index.vnc ${D}${datadir}/fbvncserver/classes/
- install -m 0644 classes/VncViewer.jar ${D}${datadir}/fbvncserver/classes/
-}
-
-PACKAGES =+ "x11vnc libvncserver-storepasswd libvncserver-javaapplet"
-FILES_x11vnc = "${bindir}/x11vnc ${bindir}/LinuxVNC"
-FILES_libvncserver-storepasswd = "${bindir}/storepasswd"
-FILES_libvncserver-javaapplet = "${datadir}/fbvncserver/classes/index.vnc \
- ${datadir}/fbvncserver/classes/VncViewer.jar"
diff --git a/packages/libvorbis/libvorbis_1.2.0.bb b/packages/libvorbis/libvorbis_1.2.0.bb
new file mode 100644
index 0000000000..79b79e8f49
--- /dev/null
+++ b/packages/libvorbis/libvorbis_1.2.0.bb
@@ -0,0 +1,30 @@
+SECTION = "libs"
+DEPENDS = "libogg"
+DESCRIPTION = "Ogg Vorbis is a high-quality lossy audio codec \
+that is free of intellectual property restrictions. libvorbis \
+is the main vorbis codec library."
+LICENSE = "BSD"
+
+SRC_URI = "http://downloads.xiph.org/releases/vorbis/libvorbis-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+# vorbisfile.c reveals a problem in the gcc register spilling for the
+# thumb instruction set...
+FULL_OPTIMIZATION_thumb = "-O0"
+
+EXTRA_OECONF = "--with-ogg-libraries=${STAGING_LIBDIR} \
+ --with-ogg-includes=${STAGING_INCDIR}"
+
+do_stage () {
+ oe_libinstall -a -so -C lib libvorbis ${STAGING_LIBDIR}
+ oe_libinstall -a -so -C lib libvorbisfile ${STAGING_LIBDIR}
+ oe_libinstall -a -so -C lib libvorbisenc ${STAGING_LIBDIR}
+
+ install -d ${STAGING_INCDIR}/vorbis
+ install -m 0644 include/vorbis/vorbisenc.h \
+ include/vorbis/vorbisfile.h \
+ include/vorbis/codec.h ${STAGING_INCDIR}/vorbis/
+ install -d ${STAGING_DATADIR}/aclocal
+ install -m 0644 vorbis.m4 ${STAGING_DATADIR}/aclocal/
+}
diff --git a/packages/libxml/files/no-testapi.patch b/packages/libxml/files/no-testapi.patch
deleted file mode 100644
index 15a4dea0ee..0000000000
--- a/packages/libxml/files/no-testapi.patch
+++ /dev/null
@@ -1,51 +0,0 @@
---- /tmp/Makefile.am 2005-11-13 14:33:15.844432536 +0100
-+++ libxml2-2.6.22/Makefile.am 2005-11-13 14:33:25.796919528 +0100
-@@ -8,7 +8,7 @@
-
- noinst_PROGRAMS=testSchemas testRelax testSAX testHTML testXPath testURI \
- testThreads testC14N testAutomata testRegexp \
-- testReader testapi testModule runtest runsuite
-+ testReader testModule runtest runsuite
-
- bin_PROGRAMS = xmllint xmlcatalog
-
-@@ -135,20 +135,9 @@
- testdso_la_LDFLAGS = -module -rpath $(libdir)
-
- # that one forces the rebuild when "make rebuild" is run on doc/
--rebuild_testapi:
-- -@(if [ "$(PYTHON)" != "" ] ; then \
-- $(PYTHON) $(srcdir)/gentest.py $(srcdir) ; fi )
-
- # that one is just to make sure it is rebuilt if missing
- # but adding the dependances generate mess
--testapi.c:
-- -@(if [ "$(PYTHON)" != "" ] ; then \
-- $(PYTHON) $(srcdir)/gentest.py $(srcdir) ; fi )
--
--testapi_SOURCES=testapi.c
--testapi_LDFLAGS =
--testapi_DEPENDENCIES = $(DEPS)
--testapi_LDADD= $(LDADDS)
-
- #testOOM_SOURCES=testOOM.c testOOMlib.h testOOMlib.c
- #testOOM_LDFLAGS =
-@@ -169,9 +158,6 @@
- @echo '## Go get a cup of coffee it is gonna take a while ...'
- $(MAKE) CHECKER='valgrind' tests
-
--APItests: testapi$(EXEEXT)
-- @echo "## Running the API regression tests this may take a little while"
-- -@($(CHECKER) $(top_builddir)/testapi -q)
-
- HTMLtests : testHTML$(EXEEXT)
- @(echo > .memdump)
-@@ -1116,7 +1102,7 @@
- dist-test: distdir
- (mkdir -p $(distdir))
- (cd $(srcdir) ; tar -cf - --exclude CVS xstc/Tests) | (cd $(distdir); tar xf -)
-- tar -cf - $(distdir)/test $(distdir)/result $(distdir)/xstc/Tests $(distdir)/Makefile.tests $(distdir)/README $(distdir)/README.tests $(distdir)/AUTHORS $(distdir)/testapi.c $(distdir)/runtest.c $(distdir)/runsuite.c | GZIP=$(GZIP_ENV) gzip -c >`echo "$(distdir)" | sed "s+libxml2+libxml2-tests+"`.tar.gz
-+ tar -cf - $(distdir)/test $(distdir)/result $(distdir)/xstc/Tests $(distdir)/Makefile.tests $(distdir)/README $(distdir)/README.tests $(distdir)/AUTHORS $(distdir)/runtest.c $(distdir)/runsuite.c | GZIP=$(GZIP_ENV) gzip -c >`echo "$(distdir)" | sed "s+libxml2+libxml2-tests+"`.tar.gz
- @(rm -rf $(distdir)/xstc/Test)
-
- cleantar:
diff --git a/packages/libxml/libxml2.inc b/packages/libxml/libxml2.inc
new file mode 100644
index 0000000000..3f83f76ed5
--- /dev/null
+++ b/packages/libxml/libxml2.inc
@@ -0,0 +1,29 @@
+DESCRIPTION = "GNOME XML Parser library"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "MIT"
+
+SRC_URI = "ftp://xmlsoft.org/libxml2/libxml2-${PV}.tar.gz"
+
+inherit autotools pkgconfig binconfig
+
+EXTRA_OECONF = "--without-python --without-debug --without-legacy --without-catalog --without-docbook --with-c14n"
+
+export LDFLAGS += "-ldl"
+
+do_stage() {
+ autotools_stage_all
+ install -d ${STAGING_DATADIR}/aclocal/
+ install -d ${STAGING_BINDIR_CROSS}
+
+ install -m 0644 libxml.m4 ${STAGING_DATADIR}/aclocal/
+ #this is need it by php during its install
+ install -m 0755 xml2-config ${STAGING_BINDIR_CROSS}
+}
+
+DEBIANNAME_${PN} = "libxml2"
+
+PACKAGES = "${PN}-dbg ${PN}-dev ${PN}-utils ${PN} ${PN}-doc ${PN}-locale"
+
+FILES_${PN}-dev += "${bindir}/*-config"
+FILES_${PN}-utils += "${bindir}/*"
diff --git a/packages/libxml/libxml2_2.6.27.bb b/packages/libxml/libxml2_2.6.27.bb
new file mode 100644
index 0000000000..2a85ce8956
--- /dev/null
+++ b/packages/libxml/libxml2_2.6.27.bb
@@ -0,0 +1,3 @@
+# You want this old version for compatibility with Maemo OS2008.
+require libxml2.inc
+
diff --git a/packages/libxml/libxml2_2.6.29.bb b/packages/libxml/libxml2_2.6.29.bb
index 521ba16d9b..b366a8278c 100644
--- a/packages/libxml/libxml2_2.6.29.bb
+++ b/packages/libxml/libxml2_2.6.29.bb
@@ -1,34 +1,4 @@
-DESCRIPTION = "GNOME XML Parser library"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "MIT"
-PR = "r5"
-
-SRC_URI = "ftp://xmlsoft.org/libxml2/libxml2-${PV}.tar.gz"
-
-inherit autotools pkgconfig binconfig
-
-EXTRA_OECONF = "--without-python --without-debug --without-legacy --without-catalog --without-docbook --with-c14n"
-
-export LDFLAGS += "-ldl"
+require libxml2.inc
-do_stage() {
- autotools_stage_all
- install -d ${STAGING_DATADIR}/aclocal/
- install -d ${STAGING_BINDIR_CROSS}
-
- install -m 0644 libxml.m4 ${STAGING_DATADIR}/aclocal/
- #this is need it by php during its install
- install -m 0755 xml2-config ${STAGING_BINDIR_CROSS}
-}
-
-python populate_packages_prepend () {
- # autonamer would call this libxml2-2, but we don't want that
- if bb.data.getVar('DEBIAN_NAMES', d, 1):
- bb.data.setVar('PKG_libxml2', 'libxml2', d)
-}
-
-PACKAGES = "${PN}-dbg ${PN}-dev ${PN}-utils ${PN} ${PN}-doc ${PN}-locale"
+PR = "r5"
-FILES_${PN}-dev += "${bindir}/*-config"
-FILES_${PN}-utils += "${bindir}/*"
diff --git a/packages/libxosd/libxosd_svn.bb b/packages/libxosd/libxosd_svn.bb
index bb16f7f09a..377f55dc2a 100644
--- a/packages/libxosd/libxosd_svn.bb
+++ b/packages/libxosd/libxosd_svn.bb
@@ -19,6 +19,6 @@ do_stage() {
PACKAGES =+ "${PN}-examples-dbg ${PN}-examples"
FILES_${PN}-examples = "${bindir}/osd_cat"
-FILES_${PN}-examples-dbg = "${bindir}/.debug/"
+FILES_${PN}-examples-dbg += "${bindir}/.debug/"
FILES_${PN}-dev += "${bindir}/xosd-config"
FILES_${PN} = "${libdir}/libxosd.so.*"
diff --git a/packages/linux-libc-headers/linux-libc-headers_2.6.18.bb b/packages/linux-libc-headers/linux-libc-headers_2.6.18.bb
index f65bf1459e..014fd23705 100644
--- a/packages/linux-libc-headers/linux-libc-headers_2.6.18.bb
+++ b/packages/linux-libc-headers/linux-libc-headers_2.6.18.bb
@@ -2,7 +2,7 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r1"
+PR = "r2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 \
file://arm-syscall-define.patch;patch=1"
@@ -38,7 +38,7 @@ do_compile () {
do_install() {
set_arch
- oe_runmake headers_install INSTALL_HDR_PATH=${D}/usr ARCH=${ARCH}
+ oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=${ARCH}
}
do_install_append_arm() {
@@ -51,7 +51,7 @@ do_stage () {
set_arch
rm -rf ${STAGE_TEMP}
mkdir -p ${STAGE_TEMP}
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}/usr ARCH=${ARCH}
+ oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}${exec_prefix} ARCH=${ARCH}
if [ "${ARCH}" == "arm" ]; then
cp include/asm-arm/procinfo.h ${STAGE_TEMP}${includedir}/asm
fi
diff --git a/packages/linux-libc-headers/linux-libc-headers_2.6.20.bb b/packages/linux-libc-headers/linux-libc-headers_2.6.20.bb
index 0b6112884e..8794b17d96 100644
--- a/packages/linux-libc-headers/linux-libc-headers_2.6.20.bb
+++ b/packages/linux-libc-headers/linux-libc-headers_2.6.20.bb
@@ -2,7 +2,7 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r7"
+PR = "r8"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://procinfo.h"
@@ -40,7 +40,7 @@ do_compile () {
do_install() {
set_arch
- oe_runmake headers_install INSTALL_HDR_PATH=${D}/usr ARCH=$ARCH
+ oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=$ARCH
}
do_install_append_arm() {
@@ -54,7 +54,7 @@ do_stage () {
echo $ARCH
rm -rf ${STAGE_TEMP}
mkdir -p ${STAGE_TEMP}
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}/usr ARCH=$ARCH
+ oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}${exec_prefix} ARCH=$ARCH
if [ "$ARCH" = "arm" ]; then
cp ${WORKDIR}/procinfo.h ${STAGE_TEMP}${includedir}/asm/
fi
diff --git a/packages/linux-libc-headers/linux-libc-headers_2.6.22.bb b/packages/linux-libc-headers/linux-libc-headers_2.6.22.bb
index 43a5cb9ef1..595edde810 100644
--- a/packages/linux-libc-headers/linux-libc-headers_2.6.22.bb
+++ b/packages/linux-libc-headers/linux-libc-headers_2.6.22.bb
@@ -2,7 +2,7 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r0"
+PR = "r1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://procinfo.h"
@@ -40,7 +40,7 @@ do_compile () {
do_install() {
set_arch
- oe_runmake headers_install INSTALL_HDR_PATH=${D}/usr ARCH=$ARCH
+ oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=$ARCH
}
do_install_append_arm() {
@@ -54,7 +54,7 @@ do_stage () {
echo $ARCH
rm -rf ${STAGE_TEMP}
mkdir -p ${STAGE_TEMP}
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}/usr ARCH=$ARCH
+ oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}${exec_prefix} ARCH=$ARCH
if [ "$ARCH" = "arm" ]; then
cp ${WORKDIR}/procinfo.h ${STAGE_TEMP}${includedir}/asm/
fi
diff --git a/packages/linux-libc-headers/linux-libc-headers_2.6.23.bb b/packages/linux-libc-headers/linux-libc-headers_2.6.23.bb
index 43a5cb9ef1..595edde810 100644
--- a/packages/linux-libc-headers/linux-libc-headers_2.6.23.bb
+++ b/packages/linux-libc-headers/linux-libc-headers_2.6.23.bb
@@ -2,7 +2,7 @@ require linux-libc-headers.inc
INHIBIT_DEFAULT_DEPS = "1"
DEPENDS += "unifdef-native"
-PR = "r0"
+PR = "r1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://procinfo.h"
@@ -40,7 +40,7 @@ do_compile () {
do_install() {
set_arch
- oe_runmake headers_install INSTALL_HDR_PATH=${D}/usr ARCH=$ARCH
+ oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=$ARCH
}
do_install_append_arm() {
@@ -54,7 +54,7 @@ do_stage () {
echo $ARCH
rm -rf ${STAGE_TEMP}
mkdir -p ${STAGE_TEMP}
- oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}/usr ARCH=$ARCH
+ oe_runmake headers_install INSTALL_HDR_PATH=${STAGE_TEMP}${exec_prefix} ARCH=$ARCH
if [ "$ARCH" = "arm" ]; then
cp ${WORKDIR}/procinfo.h ${STAGE_TEMP}${includedir}/asm/
fi
diff --git a/packages/openmoko-panel-plugins/files/.mtn2git_empty b/packages/linux/chumby-kernel/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/openmoko-panel-plugins/files/.mtn2git_empty
+++ b/packages/linux/chumby-kernel/.mtn2git_empty
diff --git a/packages/linux/chumby-kernel/chumby-override-cmdline.patch b/packages/linux/chumby-kernel/chumby-override-cmdline.patch
new file mode 100644
index 0000000000..4ff29f9007
--- /dev/null
+++ b/packages/linux/chumby-kernel/chumby-override-cmdline.patch
@@ -0,0 +1,13 @@
+Index: linux-2.6.16/arch/arm/kernel/setup.c
+===================================================================
+--- linux-2.6.16.orig/arch/arm/kernel/setup.c 2008-01-17 21:49:50.000000000 +0100
++++ linux-2.6.16/arch/arm/kernel/setup.c 2008-01-17 22:20:40.000000000 +0100
+@@ -660,7 +660,7 @@
+
+ static int __init parse_tag_cmdline(const struct tag *tag)
+ {
+- strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
++ //strlcpy(default_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
+ return 0;
+ }
+
diff --git a/packages/linux/chumby-kernel/defconfig b/packages/linux/chumby-kernel/defconfig
new file mode 100644
index 0000000000..9606510d9f
--- /dev/null
+++ b/packages/linux/chumby-kernel/defconfig
@@ -0,0 +1,1248 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16
+# Mon May 21 07:33:23 2007
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-csb"
+CONFIG_LOCALVERSION_AUTO=y
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+CONFIG_FAMILY_IMX=y
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# IMX Implementations
+#
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_MACH_CSB535 is not set
+CONFIG_MACH_MX21ADS=y
+# CONFIG_MACH_TCMX21 is not set
+# CONFIG_MACH_CSB536 is not set
+CONFIG_ARCH_IMX21=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+# CONFIG_APM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+# CONFIG_BT_L2CAP is not set
+# CONFIG_BT_SCO is not set
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=y
+CONFIG_IEEE80211_DEBUG=y
+CONFIG_IEEE80211_CRYPT_WEP=y
+CONFIG_IEEE80211_CRYPT_CCMP=y
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+CONFIG_DEBUG_DRIVER=y
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+CONFIG_FTL=y
+CONFIG_NFTL=y
+CONFIG_NFTL_RW=y
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+CONFIG_MTD_NAND_MX21ADS=y
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+CONFIG_CHR_DEV_SCH=y
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_CIRRUS is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_ATMEL is not set
+# CONFIG_HOSTAP is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=320
+CONFIG_INPUT_TSDEV_SCREEN_Y=240
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_IMX=y
+CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+CONFIG_IMX_SPI=y
+# CONFIG_IMX_SPIDEV is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+# CONFIG_I2C_IMX is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_RTC_X1205_I2C is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 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_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+
+#
+# Video For Linux
+#
+
+#
+# Video Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_USB=m
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_VIDEO_AUDIO_DECODER is not set
+# CONFIG_VIDEO_DECODER is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_MAESTRO is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+CONFIG_FB_IMX=y
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_FONT_6x11=y
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+# CONFIG_LOGO_TURBOCHEF_CLUT224 is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_IMX21_WM8731 is not set
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+CONFIG_USB_IMX21_HCD=y
+
+#
+# USB Device Class drivers
+#
+# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_ITMTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+# CONFIG_USB_VICAM is not set
+CONFIG_USB_DSBR=m
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_PWC is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+CONFIG_USB_PEGASUS=m
+# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A 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_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT3_FS=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+CONFIG_HFSPLUS_FS=y
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/chumby-kernel/disable-fbchanging.patch b/packages/linux/chumby-kernel/disable-fbchanging.patch
new file mode 100644
index 0000000000..dc3c418994
--- /dev/null
+++ b/packages/linux/chumby-kernel/disable-fbchanging.patch
@@ -0,0 +1,10 @@
+--- linux/drivers/video/imxfb.c.old 2008-01-20 08:21:57.000000000 +0100
++++ linux/drivers/video/imxfb.c 2008-01-20 08:40:12.000000000 +0100
+@@ -291,6 +291,7 @@
+
+ static int imxfb_set_par(struct fb_info *info)
+ {
++ return 0; //FIXME: Repair modesetting code!!
+ struct imxfb_info *fbi = info->par;
+ struct fb_var_screeninfo *var = &info->var;
+
diff --git a/packages/linux/chumby-kernel_2.6.16-chumby-1.2.bb b/packages/linux/chumby-kernel_2.6.16-chumby-1.2.bb
new file mode 100644
index 0000000000..b6cdf48144
--- /dev/null
+++ b/packages/linux/chumby-kernel_2.6.16-chumby-1.2.bb
@@ -0,0 +1,45 @@
+require linux.inc
+
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for the Chumby"
+LICENSE = "GPL"
+PR = "r4"
+
+SRC_URI = "http://files.chumby.com/source/ironforge/build396/linux-2.6.16-chumby-1.2.tar.gz \
+ http://files.chumby.com/source/ironforge/build396/align.pl \
+ file://chumby-override-cmdline.patch;patch=1 \
+ file://disable-fbchanging.patch;patch=1 \
+ file://defconfig \
+ "
+
+S = "${WORKDIR}/linux-2.6.16"
+
+COMPATIBLE_HOST = 'arm.*-linux'
+
+ARCH = "arm"
+
+# Use this CMDLINE for booting from RootFS 1 on the internal flash (22MB)
+#CMDLINE = "console=ttyS0,38400 console=tty0 root=/dev/mtdblock5 rootfstype=jffs2 psplash=false"
+
+# Use this CMDLINE for booting from the second partition of an USB disk
+CMDLINE = "console=ttyS0,38400 console=tty0 root=/dev/sda2 rootfstype=ext2 rootdelay=8 psplash=false"
+
+COMPATIBLE_MACHINE = "chumby"
+
+module_autoload_chumby_accel = "chumby_accel"
+module_autoload_chumby_emma = "chumby_emma"
+module_autoload_chumby_sense1 = "chumby_sense1"
+module_autoload_chumby_timer = "chumby_timer"
+module_autoload_chumby_udma = "chumby_udma"
+module_autoload_chumby-tsc2100 = "chumby-tsc2100"
+
+do_deploy_prepend() {
+ perl ../align.pl arch/arm/boot/zImage
+}
+
+do_deploy_append() {
+ rm -f ${DEPLOY_DIR_IMAGE}/zImage-${PV}-${PR}-${MACHINE}.bin.zip
+ zip ${DEPLOY_DIR_IMAGE}/zImage-${PV}-${PR}-${MACHINE}.bin.zip ${DEPLOY_DIR_IMAGE}/zImage-${PV}-${PR}-${MACHINE}.bin
+ ln -sf zImage-${PV}-${PR}-${MACHINE}.bin.zip ${DEPLOY_DIR_IMAGE}/zImage-${MACHINE}.bin.zip
+}
+
diff --git a/packages/linux/em-x270_2.6.23.bb b/packages/linux/em-x270_2.6.23.bb
index a9d6ee7905..fcef7280d0 100644
--- a/packages/linux/em-x270_2.6.23.bb
+++ b/packages/linux/em-x270_2.6.23.bb
@@ -3,8 +3,8 @@ require linux.inc
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the Compulab EM-X270 system"
LICENSE = "GPL"
-DEPENDS = "uboot-utils"
-PR = "r0"
+DEPENDS = "u-boot-utils-native"
+PR = "r1"
KERNEL_IMAGETYPE = "uImage"
diff --git a/packages/openpbx/.mtn2git_empty b/packages/linux/linux-2.6.18/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/openpbx/.mtn2git_empty
+++ b/packages/linux/linux-2.6.18/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.18/0001-AVR32-Fix-compile-error-with-gcc-4.1.patch b/packages/linux/linux-2.6.18/0001-AVR32-Fix-compile-error-with-gcc-4.1.patch
new file mode 100755
index 0000000000..2b430450d9
--- /dev/null
+++ b/packages/linux/linux-2.6.18/0001-AVR32-Fix-compile-error-with-gcc-4.1.patch
@@ -0,0 +1,71 @@
+From 8224ca195874525533665bbcd23b6da1e575aa4d Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Fri, 27 Apr 2007 14:21:47 +0200
+Subject: [AVR32] Fix compile error with gcc 4.1
+
+gcc 4.1 doesn't seem to like const variables as inline assembly
+outputs. Drop support for reading 64-bit values using get_user() so
+that we can use an unsigned long to hold the result regardless of the
+actual size. This should be safe since many architectures, including
+i386, doesn't support reading 64-bit values with get_user().
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+---
+ include/asm-avr32/uaccess.h | 13 ++++---------
+ 1 files changed, 4 insertions(+), 9 deletions(-)
+
+diff --git a/include/asm-avr32/uaccess.h b/include/asm-avr32/uaccess.h
+index 74a679e..ed09239 100644
+--- a/include/asm-avr32/uaccess.h
++++ b/include/asm-avr32/uaccess.h
+@@ -181,24 +181,23 @@ extern int __put_user_bad(void);
+
+ #define __get_user_nocheck(x, ptr, size) \
+ ({ \
+- typeof(*(ptr)) __gu_val = (typeof(*(ptr)) __force)0; \
++ unsigned long __gu_val = 0; \
+ int __gu_err = 0; \
+ \
+ switch (size) { \
+ case 1: __get_user_asm("ub", __gu_val, ptr, __gu_err); break; \
+ case 2: __get_user_asm("uh", __gu_val, ptr, __gu_err); break; \
+ case 4: __get_user_asm("w", __gu_val, ptr, __gu_err); break; \
+- case 8: __get_user_asm("d", __gu_val, ptr, __gu_err); break; \
+ default: __gu_err = __get_user_bad(); break; \
+ } \
+ \
+- x = __gu_val; \
++ x = (typeof(*(ptr)))__gu_val; \
+ __gu_err; \
+ })
+
+ #define __get_user_check(x, ptr, size) \
+ ({ \
+- typeof(*(ptr)) __gu_val = (typeof(*(ptr)) __force)0; \
++ unsigned long __gu_val = 0; \
+ const typeof(*(ptr)) __user * __gu_addr = (ptr); \
+ int __gu_err = 0; \
+ \
+@@ -216,10 +215,6 @@ extern int __put_user_bad(void);
+ __get_user_asm("w", __gu_val, __gu_addr, \
+ __gu_err); \
+ break; \
+- case 8: \
+- __get_user_asm("d", __gu_val, __gu_addr, \
+- __gu_err); \
+- break; \
+ default: \
+ __gu_err = __get_user_bad(); \
+ break; \
+@@ -227,7 +222,7 @@ extern int __put_user_bad(void);
+ } else { \
+ __gu_err = -EFAULT; \
+ } \
+- x = __gu_val; \
++ x = (typeof(*(ptr)))__gu_val; \
+ __gu_err; \
+ })
+
+--
+1.4.4.4
+
diff --git a/packages/linux/linux-2.6.18/add-all-parameters-to-smc-driver.patch b/packages/linux/linux-2.6.18/add-all-parameters-to-smc-driver.patch
new file mode 100644
index 0000000000..ec4de30cc8
--- /dev/null
+++ b/packages/linux/linux-2.6.18/add-all-parameters-to-smc-driver.patch
@@ -0,0 +1,73 @@
+--- linux-2.6.18-orig/arch/avr32/mach-at32ap/hsmc.c 2006-09-26 15:01:28.000000000 +0200
++++ linux-2.6.18/arch/avr32/mach-at32ap/hsmc.c 2006-10-18 14:03:35.000000000 +0200
+@@ -75,12 +75,35 @@ int smc_set_configuration(int cs, const
+ return -EINVAL;
+ }
+
++ switch (config->nwait_mode) {
++ case 0:
++ mode |= HSMC_BF(EXNW_MODE, HSMC_EXNW_MODE_DISABLED);
++ break;
++ case 1:
++ mode |= HSMC_BF(EXNW_MODE, HSMC_EXNW_MODE_RESERVED);
++ break;
++ case 2:
++ mode |= HSMC_BF(EXNW_MODE, HSMC_EXNW_MODE_FROZEN);
++ break;
++ case 3:
++ mode |= HSMC_BF(EXNW_MODE, HSMC_EXNW_MODE_READY);
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ if (config->tdf_cycles) {
++ mode |= HSMC_BF(TDF_CYCLES, config->tdf_cycles);
++ }
++
+ if (config->nrd_controlled)
+ mode |= HSMC_BIT(READ_MODE);
+ if (config->nwe_controlled)
+ mode |= HSMC_BIT(WRITE_MODE);
+ if (config->byte_write)
+ mode |= HSMC_BIT(BAT);
++ if (config->tdf_mode)
++ mode |= HSMC_BIT(TDF_MODE);
+
+ pr_debug("smc cs%d: setup/%08x pulse/%08x cycle/%08x mode/%08x\n",
+ cs, setup, pulse, cycle, mode);
+--- linux-2.6.18-orig/include/asm-avr32/arch-at32ap/smc.h 2006-09-26 15:01:30.000000000 +0200
++++ linux-2.6.18/include/asm-avr32/arch-at32ap/smc.h 2006-10-18 13:36:06.000000000 +0200
+@@ -48,10 +48,32 @@ struct smc_config {
+ unsigned int nwe_controlled:1;
+
+ /*
++ * 0: NWAIT is disabled
++ * 1: Reserved
++ * 2: NWAIT is frozen mode
++ * 3: NWAIT in ready mode
++ */
++ unsigned int nwait_mode:2;
++
++ /*
+ * 0: Byte select access type
+ * 1: Byte write access type
+ */
+ unsigned int byte_write:1;
++
++ /*
++ * Number of clock cycles before data is released after
++ * the rising edge of the read controlling signal
++ *
++ * Total cycles from SMC is tdf_cycles + 1
++ */
++ unsigned int tdf_cycles:4;
++
++ /*
++ * 0: TDF optimization disabled
++ * 1: TDF optimization enabled
++ */
++ unsigned int tdf_mode:1;
+ };
+
+ extern int smc_set_configuration(int cs, const struct smc_config *config);
diff --git a/packages/linux/linux-2.6.18/add-default-atngw-defconfig.patch b/packages/linux/linux-2.6.18/add-default-atngw-defconfig.patch
new file mode 100644
index 0000000000..233416e0ca
--- /dev/null
+++ b/packages/linux/linux-2.6.18/add-default-atngw-defconfig.patch
@@ -0,0 +1,975 @@
+Index: linux-2.6.18/arch/avr32/configs/atngw_defconfig
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18/arch/avr32/configs/atngw_defconfig 2007-01-10 10:15:54.000000000 +0100
+@@ -0,0 +1,970 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.18-at0
++# Wed Jan 10 10:13:31 2007
++#
++CONFIG_AVR32=y
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++CONFIG_GENERIC_TIME=y
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++
++#
++# General setup
++#
++CONFIG_LOCALVERSION=""
++# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_POSIX_MQUEUE=y
++CONFIG_BSD_PROCESS_ACCT=y
++CONFIG_BSD_PROCESS_ACCT_V3=y
++# CONFIG_TASKSTATS is not set
++# CONFIG_AUDIT is not set
++# CONFIG_IKCONFIG is not set
++# CONFIG_RELAY is not set
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_EMBEDDED=y
++CONFIG_SYSCTL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++# CONFIG_BASE_FULL is not set
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SHMEM=y
++CONFIG_SLAB=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=1
++# CONFIG_SLOB is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++
++#
++# Block layer
++#
++# CONFIG_BLK_DEV_IO_TRACE is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++# CONFIG_IOSCHED_AS is not set
++# CONFIG_IOSCHED_DEADLINE is not set
++CONFIG_IOSCHED_CFQ=y
++# CONFIG_DEFAULT_AS is not set
++# CONFIG_DEFAULT_DEADLINE is not set
++CONFIG_DEFAULT_CFQ=y
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="cfq"
++
++#
++# System Type and features
++#
++CONFIG_SUBARCH_AVR32B=y
++CONFIG_MMU=y
++CONFIG_PERFORMANCE_COUNTERS=y
++CONFIG_PLATFORM_AT32AP=y
++CONFIG_CPU_AT32AP7000=y
++# CONFIG_BOARD_ATSTK1000 is not set
++CONFIG_BOARD_ATNGW=y
++CONFIG_LOADER_U_BOOT=y
++
++#
++# Atmel AVR32 AP options
++#
++CONFIG_PIO_DEV=y
++CONFIG_LOAD_ADDRESS=0x10000000
++CONFIG_ENTRY_ADDRESS=0x90000000
++CONFIG_PHYS_OFFSET=0x10000000
++CONFIG_PREEMPT_NONE=y
++# CONFIG_PREEMPT_VOLUNTARY is not set
++# CONFIG_PREEMPT is not set
++# CONFIG_HAVE_ARCH_BOOTMEM_NODE is not set
++# CONFIG_ARCH_HAVE_MEMORY_PRESENT is not set
++# CONFIG_NEED_NODE_MEMMAP_SIZE is not set
++CONFIG_ARCH_FLATMEM_ENABLE=y
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++# CONFIG_ARCH_SPARSEMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4
++# CONFIG_RESOURCES_64BIT is not set
++# CONFIG_OWNERSHIP_TRACE is not set
++CONFIG_DW_DMAC=y
++# CONFIG_HZ_100 is not set
++CONFIG_HZ_250=y
++# CONFIG_HZ_1000 is not set
++CONFIG_HZ=250
++CONFIG_CMDLINE=""
++
++#
++# Bus options
++#
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++# CONFIG_PCCARD is not set
++
++#
++# Executable file formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_MISC is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++# CONFIG_NETDEBUG is not set
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_UNIX=y
++# CONFIG_NET_KEY is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++CONFIG_IP_ADVANCED_ROUTER=y
++CONFIG_ASK_IP_FIB_HASH=y
++# CONFIG_IP_FIB_TRIE is not set
++CONFIG_IP_FIB_HASH=y
++# CONFIG_IP_MULTIPLE_TABLES is not set
++# CONFIG_IP_ROUTE_MULTIPATH is not set
++# CONFIG_IP_ROUTE_VERBOSE is not set
++CONFIG_IP_PNP=y
++CONFIG_IP_PNP_DHCP=y
++# CONFIG_IP_PNP_BOOTP is not set
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_BIC=y
++
++#
++# IP: Virtual Server Configuration
++#
++# CONFIG_IP_VS is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++
++#
++# Core Netfilter Configuration
++#
++# CONFIG_NETFILTER_NETLINK is not set
++CONFIG_NETFILTER_XTABLES=y
++# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
++# CONFIG_NETFILTER_XT_TARGET_MARK is not set
++# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
++# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
++# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
++# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
++# CONFIG_NETFILTER_XT_MATCH_ESP is not set
++# CONFIG_NETFILTER_XT_MATCH_HELPER 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_PKTTYPE is not set
++# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
++# CONFIG_NETFILTER_XT_MATCH_REALM is not set
++# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
++CONFIG_NETFILTER_XT_MATCH_STATE=y
++# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
++# CONFIG_NETFILTER_XT_MATCH_STRING is not set
++# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
++
++#
++# IP: Netfilter Configuration
++#
++CONFIG_IP_NF_CONNTRACK=y
++# CONFIG_IP_NF_CT_ACCT is not set
++# CONFIG_IP_NF_CONNTRACK_MARK is not set
++# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
++# CONFIG_IP_NF_CT_PROTO_SCTP is not set
++# CONFIG_IP_NF_FTP is not set
++# CONFIG_IP_NF_IRC is not set
++# CONFIG_IP_NF_NETBIOS_NS is not set
++# CONFIG_IP_NF_TFTP is not set
++# CONFIG_IP_NF_AMANDA is not set
++# CONFIG_IP_NF_PPTP is not set
++# CONFIG_IP_NF_H323 is not set
++# CONFIG_IP_NF_SIP is not set
++# CONFIG_IP_NF_QUEUE is not set
++CONFIG_IP_NF_IPTABLES=y
++# CONFIG_IP_NF_MATCH_IPRANGE is not set
++# CONFIG_IP_NF_MATCH_TOS is not set
++# CONFIG_IP_NF_MATCH_RECENT is not set
++# CONFIG_IP_NF_MATCH_ECN is not set
++# CONFIG_IP_NF_MATCH_DSCP is not set
++# CONFIG_IP_NF_MATCH_AH is not set
++# CONFIG_IP_NF_MATCH_TTL is not set
++# CONFIG_IP_NF_MATCH_OWNER is not set
++# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
++# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
++CONFIG_IP_NF_FILTER=y
++CONFIG_IP_NF_TARGET_REJECT=y
++CONFIG_IP_NF_TARGET_LOG=y
++# CONFIG_IP_NF_TARGET_ULOG is not set
++# CONFIG_IP_NF_TARGET_TCPMSS is not set
++CONFIG_IP_NF_NAT=y
++CONFIG_IP_NF_NAT_NEEDED=y
++CONFIG_IP_NF_TARGET_MASQUERADE=y
++CONFIG_IP_NF_TARGET_REDIRECT=y
++# CONFIG_IP_NF_TARGET_NETMAP is not set
++# CONFIG_IP_NF_TARGET_SAME is not set
++# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
++# CONFIG_IP_NF_MANGLE is not set
++# CONFIG_IP_NF_RAW is not set
++# CONFIG_IP_NF_ARPTABLES is not set
++
++#
++# DCCP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP is not set
++
++#
++# SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++
++#
++# TIPC Configuration (EXPERIMENTAL)
++#
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_IEEE80211 is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_STANDALONE=y
++# CONFIG_PREVENT_FIRMWARE_BUILD is not set
++# CONFIG_FW_LOADER is not set
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_SYS_HYPERVISOR is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++# CONFIG_MTD_CMDLINE_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++CONFIG_MTD_CFI=y
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_GEN_PROBE=y
++# CONFIG_MTD_CFI_ADV_OPTIONS is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_CFI_INTELEXT is not set
++CONFIG_MTD_CFI_AMDSTD=y
++# CONFIG_MTD_CFI_STAA is not set
++CONFIG_MTD_CFI_UTIL=y
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++# CONFIG_MTD_OBSOLETE_CHIPS is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++CONFIG_MTD_PHYSMAP=y
++CONFIG_MTD_PHYSMAP_START=0x80000000
++CONFIG_MTD_PHYSMAP_LEN=0x0
++CONFIG_MTD_PHYSMAP_BANKWIDTH=2
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++CONFIG_MTD_DATAFLASH=y
++# CONFIG_MTD_M25P80 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++
++#
++# NAND Flash Device Drivers
++#
++# CONFIG_MTD_NAND is not set
++
++#
++# OneNAND Flash Device Drivers
++#
++# CONFIG_MTD_ONENAND is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play support
++#
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++CONFIG_BLK_DEV_NBD=m
++CONFIG_BLK_DEV_RAM=m
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=4096
++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++CONFIG_BLK_DEV_INITRD=y
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++
++#
++# ATA/ATAPI/MFM/RLL support
++#
++# CONFIG_IDE is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++# CONFIG_SCSI is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++
++#
++# I2O device support
++#
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++
++#
++# PHY device support
++#
++# CONFIG_PHYLIB is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_MACB=y
++
++#
++# Ethernet (1000 Mbit)
++#
++
++#
++# Ethernet (10000 Mbit)
++#
++
++#
++# Token Ring devices
++#
++
++#
++# Wireless LAN (non-hamradio)
++#
++# CONFIG_NET_RADIO is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Telephony Support
++#
++# CONFIG_PHONE is not set
++
++#
++# Input device support
++#
++# CONFIG_INPUT is not set
++
++#
++# Hardware I/O ports
++#
++# CONFIG_SERIO is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++# CONFIG_VT is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_ATMEL=y
++CONFIG_SERIAL_ATMEL_CONSOLE=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_LEGACY_PTYS is not set
++
++#
++# IPMI
++#
++# CONFIG_IPMI_HANDLER is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_RTC is not set
++# CONFIG_GEN_RTC is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_RAW_DRIVER is not set
++
++#
++# TPM devices
++#
++# CONFIG_TCG_TPM is not set
++# CONFIG_TELCLOCK is not set
++
++#
++# I2C support
++#
++CONFIG_I2C=m
++CONFIG_I2C_CHARDEV=m
++
++#
++# I2C Algorithms
++#
++# CONFIG_I2C_ALGOBIT is not set
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_ALGOPCA is not set
++
++#
++# I2C Hardware Bus support
++#
++CONFIG_I2C_ATMELTWI=m
++CONFIG_I2C_ATMELTWI_BAUDRATE=100000
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_STUB is not set
++# CONFIG_I2C_PCA_ISA is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_SENSORS_DS1337 is not set
++# CONFIG_SENSORS_DS1374 is not set
++# CONFIG_SENSORS_EEPROM is not set
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++# CONFIG_SENSORS_PCF8591 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++
++#
++# SPI support
++#
++CONFIG_SPI=y
++# CONFIG_SPI_DEBUG is not set
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++
++#
++# SPI Protocol Masters
++#
++
++#
++# Dallas's 1-wire bus
++#
++
++#
++# Hardware Monitoring support
++#
++# CONFIG_HWMON is not set
++# CONFIG_HWMON_VID is not set
++
++#
++# Misc devices
++#
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++CONFIG_VIDEO_V4L2=y
++
++#
++# Digital Video Broadcasting Devices
++#
++# CONFIG_DVB is not set
++
++#
++# Graphics support
++#
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++
++#
++# USB support
++#
++# CONFIG_USB_ARCH_HAS_HCD is not set
++# CONFIG_USB_ARCH_HAS_OHCI is not set
++# CONFIG_USB_ARCH_HAS_EHCI is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# USB Gadget Support
++#
++CONFIG_USB_GADGET=m
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_PXA2XX is not set
++# CONFIG_USB_GADGET_GOKU is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++CONFIG_USB_GADGET_HUSB2DEV=y
++CONFIG_USB_HUSB2DEV=m
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_AT91 is not set
++# CONFIG_USB_GADGET_DUMMY_HCD is not set
++CONFIG_USB_GADGET_DUALSPEED=y
++# CONFIG_USB_ZERO is not set
++# CONFIG_USB_ETH is not set
++# CONFIG_USB_GADGETFS is not set
++CONFIG_USB_FILE_STORAGE=m
++# CONFIG_USB_FILE_STORAGE_TEST is not set
++# CONFIG_USB_G_SERIAL is not set
++
++#
++# MMC/SD Card support
++#
++CONFIG_MMC=m
++# CONFIG_MMC_DEBUG is not set
++CONFIG_MMC_BLOCK=m
++CONFIG_MMC_ATMELMCI=m
++
++#
++# LED devices
++#
++# CONFIG_NEW_LEDS is not set
++
++#
++# LED drivers
++#
++
++#
++# LED Triggers
++#
++
++#
++# InfiniBand support
++#
++
++#
++# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
++#
++
++#
++# Real Time Clock
++#
++# CONFIG_RTC_CLASS is not set
++
++#
++# DMA Engine support
++#
++# CONFIG_DMA_ENGINE is not set
++
++#
++# DMA Clients
++#
++
++#
++# DMA Devices
++#
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++# CONFIG_EXT3_FS_XATTR is not set
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_INOTIFY is not set
++# CONFIG_QUOTA is not set
++# CONFIG_DNOTIFY is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++CONFIG_FUSE_FS=m
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=m
++CONFIG_MSDOS_FS=m
++CONFIG_VFAT_FS=m
++CONFIG_FAT_DEFAULT_CODEPAGE=850
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++# CONFIG_PROC_KCORE is not set
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++CONFIG_CONFIGFS_FS=y
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_SUMMARY is not set
++# CONFIG_JFFS2_FS_XATTR is not set
++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
++CONFIG_JFFS2_ZLIB=y
++CONFIG_JFFS2_RTIME=y
++# CONFIG_JFFS2_RUBIN is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++# CONFIG_NFS_V3 is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++CONFIG_SMB_FS=m
++# CONFIG_SMB_NLS_DEFAULT is not set
++CONFIG_CIFS=m
++# CONFIG_CIFS_STATS is not set
++# CONFIG_CIFS_WEAK_PW_HASH is not set
++# CONFIG_CIFS_XATTR is not set
++# CONFIG_CIFS_DEBUG2 is not set
++# CONFIG_CIFS_EXPERIMENTAL is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++# 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=y
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=y
++
++#
++# Profiling support
++#
++# CONFIG_PROFILING is not set
++
++#
++# Kernel hacking
++#
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++# CONFIG_PRINTK_TIME is not set
++CONFIG_MAGIC_SYSRQ=y
++# CONFIG_UNUSED_SYMBOLS is not set
++CONFIG_DEBUG_KERNEL=y
++CONFIG_LOG_BUF_SHIFT=14
++CONFIG_DETECT_SOFTLOCKUP=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_RWSEMS is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_DEBUG_VM is not set
++CONFIG_FRAME_POINTER=y
++# CONFIG_UNWIND_INFO is not set
++# CONFIG_FORCED_INLINING is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_KPROBES is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++
++#
++# Cryptographic options
++#
++# CONFIG_CRYPTO is not set
++
++#
++# Hardware crypto devices
++#
++
++#
++# Library routines
++#
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++CONFIG_CRC32=y
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_PLIST=y
diff --git a/packages/linux/linux-2.6.18/add-flush_buffer-operation-to-uart_ops.patch b/packages/linux/linux-2.6.18/add-flush_buffer-operation-to-uart_ops.patch
new file mode 100644
index 0000000000..0c9b919900
--- /dev/null
+++ b/packages/linux/linux-2.6.18/add-flush_buffer-operation-to-uart_ops.patch
@@ -0,0 +1,71 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Thu Feb 2 15:48:50 2006 +0100
+Subject: [PATCH] Add flush_buffer() operation to uart_ops
+
+Serial drivers using DMA (like the Atmel USART3 driver) tend to get
+very confused when the xmit buffer is flushed and nobody told them.
+They also tend to spew a lot of garbage since the DMA engine keeps
+running after the buffer is flushed and possibly refilled with
+unrelated data.
+
+This patch adds a new flush_buffer operation to the uart_ops struct,
+along with a call to it from uart_flush_buffer() right after the xmit
+buffer has been cleared. The driver can implement this in order to
+syncronize its internal DMA state with the xmit buffer when the buffer
+is flushed.
+
+---
+
+ Documentation/serial/driver | 11 +++++++++++
+ drivers/serial/serial_core.c | 2 ++
+ include/linux/serial_core.h | 1 +
+ 3 files changed, 14 insertions(+)
+
+Index: linux-2.6.16-avr32/Documentation/serial/driver
+===================================================================
+--- linux-2.6.16-avr32.orig/Documentation/serial/driver 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16-avr32/Documentation/serial/driver 2006-04-03 18:57:11.000000000 +0200
+@@ -186,6 +186,17 @@ hardware.
+ Locking: port_sem taken.
+ Interrupts: caller dependent.
+
++ flush_buffer(port)
++ Flush any write buffers, reset any DMA state and stop any
++ ongoing DMA transfers.
++
++ This will be called whenever the port->info->xmit circular
++ buffer is cleared.
++
++ Locking: port->lock taken.
++ Interrupts: locally disabled.
++ This call must not sleep
++
+ set_termios(port,termios,oldtermios)
+ Change the port parameters, including word length, parity, stop
+ bits. Update read_status_mask and ignore_status_mask to indicate
+Index: linux-2.6.16-avr32/drivers/serial/serial_core.c
+===================================================================
+--- linux-2.6.16-avr32.orig/drivers/serial/serial_core.c 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16-avr32/drivers/serial/serial_core.c 2006-04-03 18:57:11.000000000 +0200
+@@ -556,6 +556,8 @@ static void uart_flush_buffer(struct tty
+
+ spin_lock_irqsave(&port->lock, flags);
+ uart_circ_clear(&state->info->xmit);
++ if (port->ops->flush_buffer)
++ port->ops->flush_buffer(port);
+ spin_unlock_irqrestore(&port->lock, flags);
+ tty_wakeup(tty);
+ }
+Index: linux-2.6.16-avr32/include/linux/serial_core.h
+===================================================================
+--- linux-2.6.16-avr32.orig/include/linux/serial_core.h 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16-avr32/include/linux/serial_core.h 2006-04-03 18:57:11.000000000 +0200
+@@ -164,6 +164,7 @@ struct uart_ops {
+ void (*break_ctl)(struct uart_port *, int ctl);
+ int (*startup)(struct uart_port *);
+ void (*shutdown)(struct uart_port *);
++ void (*flush_buffer)(struct uart_port *);
+ void (*set_termios)(struct uart_port *, struct termios *new,
+ struct termios *old);
+ void (*pm)(struct uart_port *, unsigned int state,
diff --git a/packages/linux/linux-2.6.18/add-hmatrix-support.patch b/packages/linux/linux-2.6.18/add-hmatrix-support.patch
new file mode 100644
index 0000000000..4387cac0b8
--- /dev/null
+++ b/packages/linux/linux-2.6.18/add-hmatrix-support.patch
@@ -0,0 +1,414 @@
+---
+ arch/avr32/mach-at32ap/hmatrix2.h | 377 ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 377 insertions(+)
+
+Index: linux-2.6.18/arch/avr32/mach-at32ap/hmatrix2.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18/arch/avr32/mach-at32ap/hmatrix2.h 2006-11-03 14:57:10.000000000 +0100
+@@ -0,0 +1,377 @@
++/*
++ * Register definitions for HMATRIX2
++ *
++ * AHB Matrix
++ */
++#ifndef __ASM_AVR32_HMATRIX2_H__
++#define __ASM_AVR32_HMATRIX2_H__
++
++/* HMATRIX2 base address */
++#define HMATRIX2_BASE (void *)0xfff00800
++
++/* HMATRIX2 register offsets */
++#define HMATRIX2_MCFG0 0x0000
++#define HMATRIX2_MCFG1 0x0004
++#define HMATRIX2_MCFG2 0x0008
++#define HMATRIX2_MCFG3 0x000c
++#define HMATRIX2_MCFG4 0x0010
++#define HMATRIX2_MCFG5 0x0014
++#define HMATRIX2_MCFG6 0x0018
++#define HMATRIX2_MCFG7 0x001c
++#define HMATRIX2_MCFG8 0x0020
++#define HMATRIX2_MCFG9 0x0024
++#define HMATRIX2_MCFG10 0x0028
++#define HMATRIX2_MCFG11 0x002c
++#define HMATRIX2_MCFG12 0x0030
++#define HMATRIX2_MCFG13 0x0034
++#define HMATRIX2_MCFG14 0x0038
++#define HMATRIX2_MCFG15 0x003c
++#define HMATRIX2_SCFG0 0x0040
++#define HMATRIX2_SCFG1 0x0044
++#define HMATRIX2_SCFG2 0x0048
++#define HMATRIX2_SCFG3 0x004c
++#define HMATRIX2_SCFG4 0x0050
++#define HMATRIX2_SCFG5 0x0054
++#define HMATRIX2_SCFG6 0x0058
++#define HMATRIX2_SCFG7 0x005c
++#define HMATRIX2_SCFG8 0x0060
++#define HMATRIX2_SCFG9 0x0064
++#define HMATRIX2_SCFG10 0x0068
++#define HMATRIX2_SCFG11 0x006c
++#define HMATRIX2_SCFG12 0x0070
++#define HMATRIX2_SCFG13 0x0074
++#define HMATRIX2_SCFG14 0x0078
++#define HMATRIX2_SCFG15 0x007c
++#define HMATRIX2_PRAS 0x0080
++#define HMATRIX2_PRBS 0x0084
++#define HMATRIX2_PRAS1 0x0088
++#define HMATRIX2_PRBS1 0x008c
++#define HMATRIX2_PRAS2 0x0090
++#define HMATRIX2_PRBS2 0x0094
++#define HMATRIX2_PRAS3 0x0098
++#define HMATRIX2_PRBS3 0x009c
++#define HMATRIX2_PRAS4 0x00a0
++#define HMATRIX2_PRBS4 0x00a4
++#define HMATRIX2_PRAS5 0x00a8
++#define HMATRIX2_PRBS5 0x00ac
++#define HMATRIX2_PRAS6 0x00b0
++#define HMATRIX2_PRBS6 0x00b4
++#define HMATRIX2_PRAS7 0x00b8
++#define HMATRIX2_PRBS7 0x00bc
++#define HMATRIX2_PRAS8 0x00c0
++#define HMATRIX2_PRBS8 0x00c4
++#define HMATRIX2_PRAS9 0x00c8
++#define HMATRIX2_PRBS9 0x00cc
++#define HMATRIX2_PRAS10 0x00d0
++#define HMATRIX2_PRBS10 0x00d4
++#define HMATRIX2_PRAS11 0x00d8
++#define HMATRIX2_PRBS11 0x00dc
++#define HMATRIX2_PRAS12 0x00e0
++#define HMATRIX2_PRBS12 0x00e4
++#define HMATRIX2_PRAS13 0x00e8
++#define HMATRIX2_PRBS13 0x00ec
++#define HMATRIX2_PRAS14 0x00f0
++#define HMATRIX2_PRBS14 0x00f4
++#define HMATRIX2_PRAS15 0x00f8
++#define HMATRIX2_PRBS15 0x00fc
++#define HMATRIX2_MRCR 0x0100
++#define HMATRIX2_SFR0 0x0110
++#define HMATRIX2_SFR1 0x0114
++#define HMATRIX2_SFR2 0x0118
++#define HMATRIX2_SFR3 0x011c
++#define HMATRIX2_SFR4 0x0120
++#define HMATRIX2_SFR5 0x0124
++#define HMATRIX2_SFR6 0x0128
++#define HMATRIX2_SFR7 0x012c
++#define HMATRIX2_SFR8 0x0130
++#define HMATRIX2_SFR9 0x0134
++#define HMATRIX2_SFR10 0x0138
++#define HMATRIX2_SFR11 0x013c
++#define HMATRIX2_SFR12 0x0140
++#define HMATRIX2_SFR13 0x0144
++#define HMATRIX2_SFR14 0x0148
++#define HMATRIX2_SFR15 0x014c
++#define HMATRIX2_VERSION 0x01fc
++
++/* Bitfields in MCFG0 */
++#define HMATRIX2_ULBT_OFFSET 0
++#define HMATRIX2_ULBT_SIZE 3
++
++/* Bitfields in MCFG1 */
++
++/* Bitfields in MCFG2 */
++
++/* Bitfields in MCFG3 */
++
++/* Bitfields in MCFG4 */
++
++/* Bitfields in MCFG5 */
++
++/* Bitfields in MCFG6 */
++
++/* Bitfields in MCFG7 */
++
++/* Bitfields in MCFG8 */
++
++/* Bitfields in MCFG9 */
++
++/* Bitfields in MCFG10 */
++
++/* Bitfields in MCFG11 */
++
++/* Bitfields in MCFG12 */
++
++/* Bitfields in MCFG13 */
++
++/* Bitfields in MCFG14 */
++
++/* Bitfields in MCFG15 */
++
++/* Bitfields in SCFG0 */
++#define HMATRIX2_SLOT_CYCLE_OFFSET 0
++#define HMATRIX2_SLOT_CYCLE_SIZE 8
++#define HMATRIX2_DEFMSTR_TYPE_OFFSET 16
++#define HMATRIX2_DEFMSTR_TYPE_SIZE 2
++#define HMATRIX2_FIXED_DEFMSTR_OFFSET 18
++#define HMATRIX2_FIXED_DEFMSTR_SIZE 4
++#define HMATRIX2_ARBT_OFFSET 24
++#define HMATRIX2_ARBT_SIZE 2
++
++/* Bitfields in SCFG1 */
++
++/* Bitfields in SCFG2 */
++
++/* Bitfields in SCFG3 */
++
++/* Bitfields in SCFG4 */
++
++/* Bitfields in SCFG5 */
++
++/* Bitfields in SCFG6 */
++
++/* Bitfields in SCFG7 */
++
++/* Bitfields in SCFG8 */
++
++/* Bitfields in SCFG9 */
++
++/* Bitfields in SCFG10 */
++
++/* Bitfields in SCFG11 */
++
++/* Bitfields in SCFG12 */
++
++/* Bitfields in SCFG13 */
++
++/* Bitfields in SCFG14 */
++
++/* Bitfields in SCFG15 */
++
++/* Bitfields in PRAS */
++#define HMATRIX2_M0PR_OFFSET 0
++#define HMATRIX2_M0PR_SIZE 4
++#define HMATRIX2_M1PR_OFFSET 4
++#define HMATRIX2_M1PR_SIZE 4
++#define HMATRIX2_M2PR_OFFSET 8
++#define HMATRIX2_M2PR_SIZE 4
++#define HMATRIX2_M3PR_OFFSET 12
++#define HMATRIX2_M3PR_SIZE 4
++#define HMATRIX2_M4PR_OFFSET 16
++#define HMATRIX2_M4PR_SIZE 4
++#define HMATRIX2_M5PR_OFFSET 20
++#define HMATRIX2_M5PR_SIZE 4
++#define HMATRIX2_M6PR_OFFSET 24
++#define HMATRIX2_M6PR_SIZE 4
++#define HMATRIX2_M7PR_OFFSET 28
++#define HMATRIX2_M7PR_SIZE 4
++
++/* Bitfields in PRBS */
++#define HMATRIX2_M8PR_OFFSET 0
++#define HMATRIX2_M8PR_SIZE 4
++#define HMATRIX2_M9PR_OFFSET 4
++#define HMATRIX2_M9PR_SIZE 4
++#define HMATRIX2_M10PR_OFFSET 8
++#define HMATRIX2_M10PR_SIZE 4
++#define HMATRIX2_M11PR_OFFSET 12
++#define HMATRIX2_M11PR_SIZE 4
++#define HMATRIX2_M12PR_OFFSET 16
++#define HMATRIX2_M12PR_SIZE 4
++#define HMATRIX2_M13PR_OFFSET 20
++#define HMATRIX2_M13PR_SIZE 4
++#define HMATRIX2_M14PR_OFFSET 24
++#define HMATRIX2_M14PR_SIZE 4
++#define HMATRIX2_M15PR_OFFSET 28
++#define HMATRIX2_M15PR_SIZE 4
++
++/* Bitfields in PRAS1 */
++
++/* Bitfields in PRBS1 */
++
++/* Bitfields in PRAS2 */
++
++/* Bitfields in PRBS2 */
++
++/* Bitfields in PRAS3 */
++
++/* Bitfields in PRBS3 */
++
++/* Bitfields in PRAS4 */
++
++/* Bitfields in PRBS4 */
++
++/* Bitfields in PRAS5 */
++
++/* Bitfields in PRBS5 */
++
++/* Bitfields in PRAS6 */
++
++/* Bitfields in PRBS6 */
++
++/* Bitfields in PRAS7 */
++
++/* Bitfields in PRBS7 */
++
++/* Bitfields in PRAS8 */
++
++/* Bitfields in PRBS8 */
++
++/* Bitfields in PRAS9 */
++
++/* Bitfields in PRBS9 */
++
++/* Bitfields in PRAS10 */
++
++/* Bitfields in PRBS10 */
++
++/* Bitfields in PRAS11 */
++
++/* Bitfields in PRBS11 */
++
++/* Bitfields in PRAS12 */
++
++/* Bitfields in PRBS12 */
++
++/* Bitfields in PRAS13 */
++
++/* Bitfields in PRBS13 */
++
++/* Bitfields in PRAS14 */
++
++/* Bitfields in PRBS14 */
++
++/* Bitfields in PRAS15 */
++
++/* Bitfields in PRBS15 */
++
++/* Bitfields in MRCR */
++#define HMATRIX2_RBC0_OFFSET 0
++#define HMATRIX2_RBC0_SIZE 1
++#define HMATRIX2_RBC1_OFFSET 1
++#define HMATRIX2_RBC1_SIZE 1
++#define HMATRIX2_RBC2_OFFSET 2
++#define HMATRIX2_RBC2_SIZE 1
++#define HMATRIX2_RBC3_OFFSET 3
++#define HMATRIX2_RBC3_SIZE 1
++#define HMATRIX2_RBC4_OFFSET 4
++#define HMATRIX2_RBC4_SIZE 1
++#define HMATRIX2_RBC5_OFFSET 5
++#define HMATRIX2_RBC5_SIZE 1
++#define HMATRIX2_RBC6_OFFSET 6
++#define HMATRIX2_RBC6_SIZE 1
++#define HMATRIX2_RBC7_OFFSET 7
++#define HMATRIX2_RBC7_SIZE 1
++#define HMATRIX2_RBC8_OFFSET 8
++#define HMATRIX2_RBC8_SIZE 1
++#define HMATRIX2_RBC9_OFFSET 9
++#define HMATRIX2_RBC9_SIZE 1
++#define HMATRIX2_RBC10_OFFSET 10
++#define HMATRIX2_RBC10_SIZE 1
++#define HMATRIX2_RBC11_OFFSET 11
++#define HMATRIX2_RBC11_SIZE 1
++#define HMATRIX2_RBC12_OFFSET 12
++#define HMATRIX2_RBC12_SIZE 1
++#define HMATRIX2_RBC13_OFFSET 13
++#define HMATRIX2_RBC13_SIZE 1
++#define HMATRIX2_RBC14_OFFSET 14
++#define HMATRIX2_RBC14_SIZE 1
++#define HMATRIX2_RBC15_OFFSET 15
++#define HMATRIX2_RBC15_SIZE 1
++
++/* Bitfields in SFR0 */
++#define HMATRIX2_SFR_OFFSET 0
++#define HMATRIX2_SFR_SIZE 32
++
++/* Bitfields in SFR1 */
++
++/* Bitfields in SFR2 */
++
++/* Bitfields in SFR3 */
++
++/* Bitfields in SFR4 */
++#define HMATRIX2_CS1A_OFFSET 1
++#define HMATRIX2_CS1A_SIZE 1
++#define HMATRIX2_CS3A_OFFSET 3
++#define HMATRIX2_CS3A_SIZE 1
++#define HMATRIX2_CS4A_OFFSET 4
++#define HMATRIX2_CS4A_SIZE 1
++#define HMATRIX2_CS5A_OFFSET 5
++#define HMATRIX2_CS5A_SIZE 1
++#define HMATRIX2_DBPUC_OFFSET 8
++#define HMATRIX2_DBPUC_SIZE 1
++
++/* Bitfields in SFR5 */
++
++/* Bitfields in SFR6 */
++
++/* Bitfields in SFR7 */
++
++/* Bitfields in SFR8 */
++
++/* Bitfields in SFR9 */
++
++/* Bitfields in SFR10 */
++
++/* Bitfields in SFR11 */
++
++/* Bitfields in SFR12 */
++
++/* Bitfields in SFR13 */
++
++/* Bitfields in SFR14 */
++
++/* Bitfields in SFR15 */
++
++/* Bitfields in VERSION */
++#define HMATRIX2_VERSION_OFFSET 0
++#define HMATRIX2_VERSION_SIZE 12
++#define HMATRIX2_MFN_OFFSET 16
++#define HMATRIX2_MFN_SIZE 3
++
++/* Constants for ULBT */
++#define HMATRIX2_ULBT_INFINITE 0
++#define HMATRIX2_ULBT_SINGLE 1
++#define HMATRIX2_ULBT_FOUR_BEAT 2
++#define HMATRIX2_ULBT_SIXTEEN_BEAT 4
++
++/* Constants for DEFMSTR_TYPE */
++#define HMATRIX2_DEFMSTR_TYPE_NO_DEFAULT 0
++#define HMATRIX2_DEFMSTR_TYPE_LAST_DEFAULT 1
++#define HMATRIX2_DEFMSTR_TYPE_FIXED_DEFAULT 2
++
++/* Constants for ARBT */
++#define HMATRIX2_ARBT_ROUND_ROBIN 0
++#define HMATRIX2_ARBT_FIXED_PRIORITY 1
++
++/* Bit manipulation macros */
++#define HMATRIX2_BIT(name) (1 << HMATRIX2_##name##_OFFSET)
++#define HMATRIX2_BF(name,value) (((value) & ((1 << HMATRIX2_##name##_SIZE) - 1)) << HMATRIX2_##name##_OFFSET)
++#define HMATRIX2_BFEXT(name,value) (((value) >> HMATRIX2_##name##_OFFSET) & ((1 << HMATRIX2_##name##_SIZE) - 1))
++#define HMATRIX2_BFINS(name,value,old) (((old) & ~(((1 << HMATRIX2_##name##_SIZE) - 1) << HMATRIX2_##name##_OFFSET)) | HMATRIX2_BF(name,value))
++
++/* Register access macros */
++#define hmatrix2_readl(base,reg) \
++ __raw_readl(base + HMATRIX2_##reg)
++#define hmatrix2_writel(base,reg,value) \
++ __raw_writel((value), base + HMATRIX2_##reg)
++
++#endif /* __ASM_AVR32_HMATRIX2_H__ */
+Index: linux-2.6.18/arch/avr32/mach-at32ap/at32ap7000.c
+===================================================================
+--- linux-2.6.18.orig/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-03 14:57:26.000000000 +0100
++++ linux-2.6.18/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-03 15:25:01.000000000 +0100
+@@ -466,6 +466,15 @@
+ .users = 1,
+ };
+
++static struct clk hmatrix2_clk = {
++ .name = "hmatrix2",
++ .parent = &pbb_clk,
++ .mode = pbb_clk_mode,
++ .get_rate = pbb_clk_get_rate,
++ .users = 1,
++ .index = 2,
++};
++
+ static struct resource dmac0_resource[] = {
+ {
+ .start = 0xff200000,
+@@ -1096,6 +1096,7 @@
+ &pdc_pclk,
+ &dmac0_hclk,
+ &pico_clk,
++ &hmatrix2_clk,
+ &pio0_mck,
+ &pio1_mck,
+ &pio2_mck,
diff --git a/packages/linux/linux-2.6.18/add-ide-header.patch b/packages/linux/linux-2.6.18/add-ide-header.patch
new file mode 100644
index 0000000000..76bd35bfac
--- /dev/null
+++ b/packages/linux/linux-2.6.18/add-ide-header.patch
@@ -0,0 +1,41 @@
+Index: linux-2.6.18/include/asm-avr32/ide.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18/include/asm-avr32/ide.h 2006-10-24 15:12:02.000000000 +0200
+@@ -0,0 +1,36 @@
++/*
++ * linux/include/asm-arm/ide.h
++ *
++ * Copyright (C) 1994-1996 Linus Torvalds & authors
++ */
++
++/*
++ * This file contains the ARM architecture specific IDE code.
++ */
++
++#ifndef __ASMAVR32_IDE_H
++#define __ASMAVR32_IDE_H
++
++#ifdef __KERNEL__
++
++#ifndef MAX_HWIFS
++#define MAX_HWIFS 4
++#endif
++
++#if !defined(CONFIG_ARCH_L7200)
++# define IDE_ARCH_OBSOLETE_INIT
++# ifdef CONFIG_ARCH_CLPS7500
++# define ide_default_io_ctl(base) ((base) + 0x206) /* obsolete */
++# else
++# define ide_default_io_ctl(base) (0)
++# endif
++#endif /* !ARCH_L7200 */
++
++#define __ide_mm_insw(port,addr,len) readsw(port,addr,len)
++#define __ide_mm_insl(port,addr,len) readsl(port,addr,len)
++#define __ide_mm_outsw(port,addr,len) writesw(port,addr,len)
++#define __ide_mm_outsl(port,addr,len) writesl(port,addr,len)
++
++#endif /* __KERNEL__ */
++
++#endif /* __ASMAVR32_IDE_H */
diff --git a/packages/linux/linux-2.6.18/add-intc_pending_irq-to-intc.patch b/packages/linux/linux-2.6.18/add-intc_pending_irq-to-intc.patch
new file mode 100644
index 0000000000..6d99de84b1
--- /dev/null
+++ b/packages/linux/linux-2.6.18/add-intc_pending_irq-to-intc.patch
@@ -0,0 +1,10 @@
+--- linux-2.6.18.orig/arch/avr32/mach-at32ap/intc.c 2006-11-06 14:36:50.000000000 +0100
++++ linux-2.6.18/arch/avr32/mach-at32ap/intc.c 2006-11-06 15:09:39.000000000 +0100
+@@ -131,3 +131,7 @@
+ panic("Interrupt controller initialization failed!\n");
+ }
+
++unsigned long intc_get_pending(int group)
++{
++ return intc_readl(&intc0, INTREQ0 + 4 * group);
++}
diff --git a/packages/linux/linux-2.6.18/add-mach-specific-kconfig.patch b/packages/linux/linux-2.6.18/add-mach-specific-kconfig.patch
new file mode 100644
index 0000000000..6f6e8f4833
--- /dev/null
+++ b/packages/linux/linux-2.6.18/add-mach-specific-kconfig.patch
@@ -0,0 +1,30 @@
+---
+ arch/avr32/Kconfig | 2 ++
+ arch/avr32/mach-at32ap/Kconfig | 7 +++++++
+ 2 files changed, 9 insertions(+)
+
+Index: linux-2.6.18-avr32/arch/avr32/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/Kconfig 2006-10-24 13:30:29.000000000 +0200
++++ linux-2.6.18-avr32/arch/avr32/Kconfig 2006-10-24 13:32:07.000000000 +0200
+@@ -107,6 +107,8 @@ config LOADER_U_BOOT
+ bool "U-Boot (or similar) bootloader"
+ endchoice
+
++source "arch/avr32/mach-at32ap/Kconfig"
++
+ config LOAD_ADDRESS
+ hex
+ default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/Kconfig
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/Kconfig 2006-10-24 13:46:51.000000000 +0200
+@@ -0,0 +1,7 @@
++if PLATFORM_AT32AP
++
++menu "Atmel AVR32 AP options"
++
++endmenu
++
++endif
diff --git a/packages/linux/linux-2.6.18/at32-dac-oss-driver-clk-fix.patch b/packages/linux/linux-2.6.18/at32-dac-oss-driver-clk-fix.patch
new file mode 100644
index 0000000000..927cdc5ece
--- /dev/null
+++ b/packages/linux/linux-2.6.18/at32-dac-oss-driver-clk-fix.patch
@@ -0,0 +1,175 @@
+---
+ sound/oss/at32dac.c | 72 +++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 43 insertions(+), 29 deletions(-)
+
+Index: linux-2.6.18-avr32/sound/oss/at32dac.c
+===================================================================
+--- linux-2.6.18-avr32.orig/sound/oss/at32dac.c 2006-11-01 14:30:47.000000000 +0100
++++ linux-2.6.18-avr32/sound/oss/at32dac.c 2006-11-01 14:32:05.000000000 +0100
+@@ -71,6 +71,7 @@ struct at32_dac {
+ struct dma_request_cyclic req;
+
+ struct clk *mck;
++ struct clk *sample_clk;
+ struct platform_device *pdev;
+ int busy;
+ int playing;
+@@ -116,24 +117,6 @@ static void at32dac_update_dma_tail(stru
+ }
+ }
+
+-static int at32dac_start_genclock(struct at32_dac *dac)
+-{
+- unsigned int div;
+-
+- div = ((clk_get_rate(boot_cpu_data.clk) + 256 * dac->dsp_settings.sample_rate)
+- / (512 * dac->dsp_settings.sample_rate) - 1);
+- pr_debug("Real sample rate: %llu (div=%u)\n",
+- boot_cpu_data.cpu_hz / (512 * (div + 1)), div);
+- writel((div << 8) | 0x16, (void __iomem *)(0xfff00060 + 4 * 6));
+-
+- return 0;
+-}
+-
+-static void at32dac_stop_genclock(struct at32_dac *dac)
+-{
+- writel(0, (void __iomem *)(0xfff00060 + 4 * 6));
+-}
+-
+ static int at32dac_start(struct at32_dac *dac)
+ {
+ int ret;
+@@ -143,13 +126,11 @@ static int at32dac_start(struct at32_dac
+
+ memset(dac->dma.buf, 0, DMA_BUFFER_SIZE);
+
+- ret = at32dac_start_genclock(dac);
+- if (ret)
+- return ret;
++ clk_enable(dac->sample_clk);
+
+ ret = dma_prepare_request_cyclic(dac->req.req.dmac, &dac->req);
+ if (ret)
+- goto out_stop_genclock;
++ goto out_stop_clock;
+
+ pr_debug("Starting DMA...\n");
+ ret = dma_start_request(dac->req.req.dmac, dac->req.req.channel);
+@@ -164,8 +145,8 @@ static int at32dac_start(struct at32_dac
+ out_stop_request:
+ dma_stop_request(dac->req.req.dmac,
+ dac->req.req.channel);
+-out_stop_genclock:
+- at32dac_stop_genclock(dac);
++out_stop_clock:
++ clk_disable(dac->sample_clk);
+ return ret;
+ }
+
+@@ -176,7 +157,7 @@ static int at32dac_stop(struct at32_dac
+ dac_writel(dac, DATA, 0);
+ dac_writel(dac, CTRL, 0);
+ dac->playing = 0;
+- at32dac_stop_genclock(dac);
++ clk_disable(dac->sample_clk);
+ }
+
+ return 0;
+@@ -360,6 +341,26 @@ static int at32dac_set_format(struct at3
+ return 0;
+ }
+
++static int at32dac_set_sample_rate(struct at32_dac *dac, unsigned long rate)
++{
++ unsigned long new_rate;
++ int ret;
++
++ ret = clk_set_rate(dac->sample_clk, 256 * rate);
++ if (ret < 0)
++ return ret;
++
++ /* TODO: mplayer seems to have a problem with this */
++#if 0
++ new_rate = clk_get_rate(dac->sample_clk);
++ dac->dsp_settings.sample_rate = new_rate / 256;
++#else
++ dac->dsp_settings.sample_rate = rate;
++#endif
++
++ return 0;
++}
++
+ static ssize_t at32dac_dsp_write(struct file *file,
+ const char __user *buffer,
+ size_t count, loff_t *ppos)
+@@ -449,7 +450,9 @@ static int at32dac_dsp_ioctl(struct inod
+ return -EFAULT;
+ if (val >= 0) {
+ at32dac_stop(dac);
+- dac->dsp_settings.sample_rate = val;
++ ret = at32dac_set_sample_rate(dac, val);
++ if (ret)
++ return ret;
+ }
+ return put_user(dac->dsp_settings.sample_rate, up);
+
+@@ -534,10 +537,11 @@ static int at32dac_dsp_open(struct inode
+ dac->dma.head = dac->dma.tail = 0;
+
+ /* FIXME: What are the correct defaults? */
+- dac->dsp_settings.format = AFMT_S16_BE;
+ dac->dsp_settings.channels = 2;
+- dac->dsp_settings.sample_rate = 8000;
+- dac->dsp_settings.input_order = 2;
++ at32dac_set_format(dac, AFMT_S16_BE);
++ ret = at32dac_set_sample_rate(dac, 8000);
++ if (ret)
++ goto out;
+
+ file->private_data = dac;
+ dac->busy = 1;
+@@ -578,6 +582,7 @@ static int __devinit at32dac_probe(struc
+ struct at32_dac *dac;
+ struct resource *regs;
+ struct clk *mck;
++ struct clk *sample_clk;
+ int irq;
+ int ret;
+
+@@ -594,6 +599,11 @@ static int __devinit at32dac_probe(struc
+ mck = clk_get(&pdev->dev, "mck");
+ if (IS_ERR(mck))
+ return PTR_ERR(mck);
++ sample_clk = clk_get(&pdev->dev, "sample_clk");
++ if (IS_ERR(sample_clk)) {
++ ret = PTR_ERR(sample_clk);
++ goto out_put_mck;
++ }
+ clk_enable(mck);
+
+ ret = -ENOMEM;
+@@ -606,6 +616,7 @@ static int __devinit at32dac_probe(struc
+ init_waitqueue_head(&dac->write_wait);
+ dac->pdev = pdev;
+ dac->mck = mck;
++ dac->sample_clk = sample_clk;
+
+ dac->regs = ioremap(regs->start, regs->end - regs->start + 1);
+ if (!dac->regs)
+@@ -658,6 +669,8 @@ out_free_dac:
+ kfree(dac);
+ out_disable_clk:
+ clk_disable(mck);
++ clk_put(sample_clk);
++out_put_mck:
+ clk_put(mck);
+ return ret;
+ }
+@@ -673,6 +686,7 @@ static int __devexit at32dac_remove(stru
+ free_irq(platform_get_irq(pdev, 0), dac);
+ iounmap(dac->regs);
+ clk_disable(dac->mck);
++ clk_put(dac->sample_clk);
+ clk_put(dac->mck);
+ kfree(dac);
+ platform_set_drvdata(pdev, NULL);
diff --git a/packages/linux/linux-2.6.18/at32-dac-oss-driver.patch b/packages/linux/linux-2.6.18/at32-dac-oss-driver.patch
new file mode 100644
index 0000000000..92a17f9af3
--- /dev/null
+++ b/packages/linux/linux-2.6.18/at32-dac-oss-driver.patch
@@ -0,0 +1,819 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Mon Apr 3 17:38:29 2006 +0200
+Subject: [PATCH] OSS driver for the AT32 on-chip digital DAC
+
+---
+
+ sound/oss/Kconfig | 4
+ sound/oss/Makefile | 1
+ sound/oss/at32dac.c | 707 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ sound/oss/at32dac.h | 65 ++++
+ 4 files changed, 777 insertions(+)
+
+Index: linux-2.6.18-avr32/sound/oss/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/sound/oss/Kconfig 2006-11-02 15:54:18.000000000 +0100
++++ linux-2.6.18-avr32/sound/oss/Kconfig 2006-11-02 15:56:20.000000000 +0100
+@@ -869,3 +869,7 @@ config SOUND_SH_DAC_AUDIO_CHANNEL
+ int "DAC channel"
+ default "1"
+ depends on SOUND_SH_DAC_AUDIO
++
++config SOUND_AT32_DAC
++ tristate "Atmel AT32 On-chip DAC support"
++ depends on SOUND_PRIME && AVR32
+Index: linux-2.6.18-avr32/sound/oss/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/sound/oss/Makefile 2006-11-02 15:54:18.000000000 +0100
++++ linux-2.6.18-avr32/sound/oss/Makefile 2006-11-02 15:56:20.000000000 +0100
+@@ -10,6 +10,7 @@ obj-$(CONFIG_SOUND_CS4232) += cs4232.o a
+
+ # Please leave it as is, cause the link order is significant !
+
++obj-$(CONFIG_SOUND_AT32_DAC) += at32dac.o
+ obj-$(CONFIG_SOUND_SH_DAC_AUDIO) += sh_dac_audio.o
+ obj-$(CONFIG_SOUND_HAL2) += hal2.o
+ obj-$(CONFIG_SOUND_AEDSP16) += aedsp16.o
+Index: linux-2.6.18-avr32/sound/oss/at32dac.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/sound/oss/at32dac.c 2006-11-02 15:56:20.000000000 +0100
+@@ -0,0 +1,707 @@
++/*
++ * OSS Sound Driver for the Atmel AT32 on-chip DAC.
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/clk.h>
++#include <linux/dma-mapping.h>
++#include <linux/fs.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/sound.h>
++#include <linux/soundcard.h>
++
++#include <asm/byteorder.h>
++#include <asm/dma-controller.h>
++#include <asm/io.h>
++#include <asm/uaccess.h>
++
++/* We want to use the "bizarre" swap-bytes-in-each-halfword macro */
++#include <linux/byteorder/swabb.h>
++
++#include "at32dac.h"
++
++#define DMA_BUFFER_SIZE 32768
++#define DMA_PERIOD_SHIFT 10
++#define DMA_PERIOD_SIZE (1 << DMA_PERIOD_SHIFT)
++#define DMA_WRITE_THRESHOLD DMA_PERIOD_SIZE
++
++struct sound_settings {
++ unsigned int format;
++ unsigned int channels;
++ unsigned int sample_rate;
++ /* log2(bytes per sample) */
++ unsigned int input_order;
++};
++
++struct at32_dac {
++ spinlock_t lock;
++ void __iomem *regs;
++
++ /* head and tail refer to number of words */
++ struct {
++ u32 *buf;
++ int head;
++ int tail;
++ } dma;
++
++ struct semaphore sem;
++ wait_queue_head_t write_wait;
++
++ /*
++ * Read at most ucount bytes from ubuf, translate to 2-channel
++ * signed 16-bit big endian format and write to the DMA buffer
++ * as long as there is room left. Return the number of bytes
++ * successfully copied from ubuf, or -EFAULT if the first
++ * sample from ubuf couldn't be read. This function is not
++ * called unless there is room for at least one sample (4
++ * bytes) in the DMA buffer.
++ */
++ int (*trans)(struct at32_dac *dac, const char __user *ubuf,
++ size_t ucount);
++
++ struct sound_settings dsp_settings;
++ struct dma_request_cyclic req;
++
++ struct clk *mck;
++ struct platform_device *pdev;
++ int busy;
++ int playing;
++ int dev_dsp;
++};
++static struct at32_dac *the_dac;
++
++static inline unsigned int at32dac_get_head(struct at32_dac *dac)
++{
++ return dac->dma.head & ((DMA_BUFFER_SIZE / 4) - 1);
++}
++
++static inline unsigned int at32dac_get_tail(struct at32_dac *dac)
++{
++ return dac->dma.tail & ((DMA_BUFFER_SIZE / 4) - 1);
++}
++
++static inline unsigned int at32dac_dma_space(struct at32_dac *dac)
++{
++ unsigned int space;
++
++ space = ((dac->dma.tail - dac->dma.head - 1)
++ & ((DMA_BUFFER_SIZE / 4) - 1));
++ return space;
++}
++
++static void at32dac_update_dma_tail(struct at32_dac *dac)
++{
++ dma_addr_t dma_addr;
++ unsigned int new_tail;
++
++ if (dac->playing) {
++ dma_addr = dma_get_current_pos(dac->req.req.dmac,
++ dac->req.req.channel);
++ new_tail = (dma_addr - dac->req.buffer_start) / 4;
++ if (new_tail >= dac->dma.head
++ && (dac->dma.tail < dac->dma.head
++ || dac->dma.tail > new_tail))
++ printk(KERN_NOTICE "at32dac: underrun\n");
++ dac->dma.tail = new_tail;
++ pr_debug("update tail: 0x%x - 0x%x = %u\n",
++ dma_addr, dac->req.buffer_start, dac->dma.tail);
++ }
++}
++
++static int at32dac_start_genclock(struct at32_dac *dac)
++{
++ unsigned int div;
++
++ div = ((clk_get_rate(boot_cpu_data.clk) + 256 * dac->dsp_settings.sample_rate)
++ / (512 * dac->dsp_settings.sample_rate) - 1);
++ pr_debug("Real sample rate: %llu (div=%u)\n",
++ boot_cpu_data.cpu_hz / (512 * (div + 1)), div);
++ writel((div << 8) | 0x16, (void __iomem *)(0xfff00060 + 4 * 6));
++
++ return 0;
++}
++
++static void at32dac_stop_genclock(struct at32_dac *dac)
++{
++ writel(0, (void __iomem *)(0xfff00060 + 4 * 6));
++}
++
++static int at32dac_start(struct at32_dac *dac)
++{
++ int ret;
++
++ if (dac->playing)
++ return 0;
++
++ memset(dac->dma.buf, 0, DMA_BUFFER_SIZE);
++
++ ret = at32dac_start_genclock(dac);
++ if (ret)
++ return ret;
++
++ ret = dma_prepare_request_cyclic(dac->req.req.dmac, &dac->req);
++ if (ret)
++ goto out_stop_genclock;
++
++ pr_debug("Starting DMA...\n");
++ ret = dma_start_request(dac->req.req.dmac, dac->req.req.channel);
++ if (ret)
++ goto out_stop_request;
++
++ dac_writel(dac, CTRL, DAC_BIT(EN));
++ dac->playing = 1;
++
++ return 0;
++
++out_stop_request:
++ dma_stop_request(dac->req.req.dmac,
++ dac->req.req.channel);
++out_stop_genclock:
++ at32dac_stop_genclock(dac);
++ return ret;
++}
++
++static int at32dac_stop(struct at32_dac *dac)
++{
++ if (dac->playing) {
++ dma_stop_request(dac->req.req.dmac, dac->req.req.channel);
++ dac_writel(dac, DATA, 0);
++ dac_writel(dac, CTRL, 0);
++ dac->playing = 0;
++ at32dac_stop_genclock(dac);
++ }
++
++ return 0;
++}
++
++static int at32dac_dma_prepare(struct at32_dac *dac)
++{
++ dac->dma.buf = dma_alloc_coherent(&dac->pdev->dev, DMA_BUFFER_SIZE,
++ &dac->req.buffer_start, GFP_KERNEL);
++ if (!dac->dma.buf)
++ return -ENOMEM;
++
++ dac->dma.head = dac->dma.tail = 0;
++ dac->req.periods = DMA_BUFFER_SIZE / DMA_PERIOD_SIZE;
++ dac->req.buffer_size = DMA_BUFFER_SIZE;
++
++ return 0;
++}
++
++static void at32dac_dma_cleanup(struct at32_dac *dac)
++{
++ if (dac->dma.buf)
++ dma_free_coherent(&dac->pdev->dev, DMA_BUFFER_SIZE,
++ dac->dma.buf, dac->req.buffer_start);
++ dac->dma.buf = NULL;
++}
++
++static void at32dac_dma_block_complete(struct dma_request *req)
++{
++ struct dma_request_cyclic *creq = to_dma_request_cyclic(req);
++ struct at32_dac *dac = container_of(creq, struct at32_dac, req);
++
++ wake_up(&dac->write_wait);
++}
++
++static void at32dac_dma_error(struct dma_request *req)
++{
++ printk(KERN_ERR "at32dac: DMA error\n");
++}
++
++static irqreturn_t at32dac_interrupt(int irq, void *dev_id,
++ struct pt_regs *regs)
++{
++ struct at32_dac *dac = dev_id;
++ u32 status;
++
++ status = dac_readl(dac, INT_STATUS);
++ if (status & DAC_BIT(UNDERRUN)) {
++ printk(KERN_ERR "at32dac: Underrun detected\n");
++ dac_writel(dac, INT_CLR, DAC_BIT(UNDERRUN));
++ } else {
++ printk(KERN_ERR "at32dac: Spurious interrupt: status=0x%x\n",
++ status);
++ dac_writel(dac, INT_CLR, status);
++ }
++
++ return IRQ_HANDLED;
++}
++
++static ssize_t trans_s16be(struct at32_dac *dac, const char __user *ubuf,
++ size_t ucount)
++{
++ ssize_t ret;
++
++ if (dac->dsp_settings.channels == 2) {
++ const u32 __user *up = (const u32 __user *)ubuf;
++ u32 sample;
++
++ for (ret = 0; ret < (ssize_t)(ucount - 3); ret += 4) {
++ if (!at32dac_dma_space(dac))
++ break;
++
++ if (unlikely(__get_user(sample, up++))) {
++ if (ret == 0)
++ ret = -EFAULT;
++ break;
++ }
++ dac->dma.buf[at32dac_get_head(dac)] = sample;
++ dac->dma.head++;
++ }
++ } else {
++ const u16 __user *up = (const u16 __user *)ubuf;
++ u16 sample;
++
++ for (ret = 0; ret < (ssize_t)(ucount - 1); ret += 2) {
++ if (!at32dac_dma_space(dac))
++ break;
++
++ if (unlikely(__get_user(sample, up++))) {
++ if (ret == 0)
++ ret = -EFAULT;
++ break;
++ }
++ dac->dma.buf[at32dac_get_head(dac)]
++ = (sample << 16) | sample;
++ dac->dma.head++;
++ }
++ }
++
++ return ret;
++}
++
++static ssize_t trans_s16le(struct at32_dac *dac, const char __user *ubuf,
++ size_t ucount)
++{
++ ssize_t ret;
++
++ if (dac->dsp_settings.channels == 2) {
++ const u32 __user *up = (const u32 __user *)ubuf;
++ u32 sample;
++
++ for (ret = 0; ret < (ssize_t)(ucount - 3); ret += 4) {
++ if (!at32dac_dma_space(dac))
++ break;
++
++ if (unlikely(__get_user(sample, up++))) {
++ if (ret == 0)
++ ret = -EFAULT;
++ break;
++ }
++ /* Swap bytes in each halfword */
++ dac->dma.buf[at32dac_get_head(dac)] = swahb32(sample);
++ dac->dma.head++;
++ }
++ } else {
++ const u16 __user *up = (const u16 __user *)ubuf;
++ u16 sample;
++
++ for (ret = 0; ret < (ssize_t)(ucount - 1); ret += 2) {
++ if (!at32dac_dma_space(dac))
++ break;
++
++ if (unlikely(__get_user(sample, up++))) {
++ if (ret == 0)
++ ret = -EFAULT;
++ break;
++ }
++ sample = swab16(sample);
++ dac->dma.buf[at32dac_get_head(dac)]
++ = (sample << 16) | sample;
++ dac->dma.head++;
++ }
++ }
++
++ return ret;
++}
++
++static ssize_t at32dac_dma_translate_from_user(struct at32_dac *dac,
++ const char __user *buffer,
++ size_t count)
++{
++ /* At least one buffer must be available at this point */
++ pr_debug("at32dac: Copying %zu bytes from user...\n", count);
++
++ return dac->trans(dac, buffer, count);
++}
++
++static int at32dac_set_format(struct at32_dac *dac, int format)
++{
++ unsigned int order;
++
++ switch (format) {
++ case AFMT_S16_BE:
++ order = 1;
++ dac->trans = trans_s16be;
++ break;
++ case AFMT_S16_LE:
++ order = 1;
++ dac->trans = trans_s16le;
++ break;
++ default:
++ printk("at32dac: Unsupported format: %d\n", format);
++ return -EINVAL;
++ }
++
++ if (dac->dsp_settings.channels == 2)
++ order++;
++
++ dac->dsp_settings.input_order = order;
++ dac->dsp_settings.format = format;
++ return 0;
++}
++
++static ssize_t at32dac_dsp_write(struct file *file,
++ const char __user *buffer,
++ size_t count, loff_t *ppos)
++{
++ struct at32_dac *dac = file->private_data;
++ DECLARE_WAITQUEUE(wait, current);
++ unsigned int avail;
++ ssize_t copied;
++ ssize_t ret;
++
++ /* Avoid address space checking in the translation functions */
++ if (!access_ok(buffer, count, VERIFY_READ))
++ return -EFAULT;
++
++ down(&dac->sem);
++
++ if (!dac->dma.buf) {
++ ret = at32dac_dma_prepare(dac);
++ if (ret)
++ goto out;
++ }
++
++ add_wait_queue(&dac->write_wait, &wait);
++ ret = 0;
++ while (count > 0) {
++ do {
++ at32dac_update_dma_tail(dac);
++ avail = at32dac_dma_space(dac);
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (avail >= DMA_WRITE_THRESHOLD)
++ break;
++
++ if (file->f_flags & O_NONBLOCK) {
++ if (!ret)
++ ret = -EAGAIN;
++ goto out;
++ }
++
++ pr_debug("Going to wait (avail = %u, count = %zu)\n",
++ avail, count);
++
++ up(&dac->sem);
++ schedule();
++ if (signal_pending(current)) {
++ if (!ret)
++ ret = -ERESTARTSYS;
++ goto out_nosem;
++ }
++ down(&dac->sem);
++ } while (1);
++
++ copied = at32dac_dma_translate_from_user(dac, buffer, count);
++ if (copied < 0) {
++ if (!ret)
++ ret = -EFAULT;
++ goto out;
++ }
++
++ at32dac_start(dac);
++
++ count -= copied;
++ ret += copied;
++ }
++
++out:
++ up(&dac->sem);
++out_nosem:
++ remove_wait_queue(&dac->write_wait, &wait);
++ set_current_state(TASK_RUNNING);
++ return ret;
++}
++
++static int at32dac_dsp_ioctl(struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ struct at32_dac *dac = file->private_data;
++ int __user *up = (int __user *)arg;
++ struct audio_buf_info abinfo;
++ int val, ret;
++
++ switch (cmd) {
++ case OSS_GETVERSION:
++ return put_user(SOUND_VERSION, up);
++
++ case SNDCTL_DSP_SPEED:
++ if (get_user(val, up))
++ return -EFAULT;
++ if (val >= 0) {
++ at32dac_stop(dac);
++ dac->dsp_settings.sample_rate = val;
++ }
++ return put_user(dac->dsp_settings.sample_rate, up);
++
++ case SNDCTL_DSP_STEREO:
++ if (get_user(val, up))
++ return -EFAULT;
++ at32dac_stop(dac);
++ if (val && dac->dsp_settings.channels == 1)
++ dac->dsp_settings.input_order++;
++ else if (!val && dac->dsp_settings.channels != 1)
++ dac->dsp_settings.input_order--;
++ dac->dsp_settings.channels = val ? 2 : 1;
++ return 0;
++
++ case SNDCTL_DSP_CHANNELS:
++ if (get_user(val, up))
++ return -EFAULT;
++
++ if (val) {
++ if (val < 0 || val > 2)
++ return -EINVAL;
++
++ at32dac_stop(dac);
++ dac->dsp_settings.input_order
++ += val - dac->dsp_settings.channels;
++ dac->dsp_settings.channels = val;
++ }
++ return put_user(val, (int *)arg);
++
++ case SNDCTL_DSP_GETFMTS:
++ return put_user(AFMT_S16_BE | AFMT_S16_BE, up);
++
++ case SNDCTL_DSP_SETFMT:
++ if (get_user(val, up))
++ return -EFAULT;
++
++ if (val == AFMT_QUERY) {
++ val = dac->dsp_settings.format;
++ } else {
++ ret = at32dac_set_format(dac, val);
++ if (ret)
++ return ret;
++ }
++ return put_user(val, up);
++
++ case SNDCTL_DSP_GETOSPACE:
++ at32dac_update_dma_tail(dac);
++ abinfo.fragsize = ((1 << dac->dsp_settings.input_order)
++ * (DMA_PERIOD_SIZE / 4));
++ abinfo.bytes = (at32dac_dma_space(dac)
++ << dac->dsp_settings.input_order);
++ abinfo.fragstotal = ((DMA_BUFFER_SIZE * 4)
++ >> (DMA_PERIOD_SHIFT
++ + dac->dsp_settings.input_order));
++ abinfo.fragments = ((abinfo.bytes
++ >> dac->dsp_settings.input_order)
++ / (DMA_PERIOD_SIZE / 4));
++ pr_debug("fragments=%d fragstotal=%d fragsize=%d bytes=%d\n",
++ abinfo.fragments, abinfo.fragstotal, abinfo.fragsize,
++ abinfo.bytes);
++ return copy_to_user(up, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
++
++ default:
++ printk("at32dac: Unimplemented ioctl cmd: 0x%x\n", cmd);
++ return -EINVAL;
++ }
++}
++
++static int at32dac_dsp_open(struct inode *inode, struct file *file)
++{
++ struct at32_dac *dac = the_dac;
++ int ret;
++
++ if (file->f_mode & FMODE_READ)
++ return -ENXIO;
++
++ down(&dac->sem);
++ ret = -EBUSY;
++ if (dac->busy)
++ goto out;
++
++ dac->dma.head = dac->dma.tail = 0;
++
++ /* FIXME: What are the correct defaults? */
++ dac->dsp_settings.format = AFMT_S16_BE;
++ dac->dsp_settings.channels = 2;
++ dac->dsp_settings.sample_rate = 8000;
++ dac->dsp_settings.input_order = 2;
++
++ file->private_data = dac;
++ dac->busy = 1;
++
++ ret = 0;
++
++out:
++ up(&dac->sem);
++ return ret;
++}
++
++static int at32dac_dsp_release(struct inode *inode, struct file *file)
++{
++ struct at32_dac *dac = file->private_data;
++
++ down(&dac->sem);
++
++ at32dac_stop(dac);
++ at32dac_dma_cleanup(dac);
++ dac->busy = 0;
++
++ up(&dac->sem);
++
++ return 0;
++}
++
++static struct file_operations at32dac_dsp_fops = {
++ .owner = THIS_MODULE,
++ .llseek = no_llseek,
++ .write = at32dac_dsp_write,
++ .ioctl = at32dac_dsp_ioctl,
++ .open = at32dac_dsp_open,
++ .release = at32dac_dsp_release,
++};
++
++static int __devinit at32dac_probe(struct platform_device *pdev)
++{
++ struct at32_dac *dac;
++ struct resource *regs;
++ struct clk *mck;
++ int irq;
++ int ret;
++
++ if (the_dac)
++ return -EBUSY;
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!regs)
++ return -ENXIO;
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0)
++ return irq;
++
++ mck = clk_get(&pdev->dev, "mck");
++ if (IS_ERR(mck))
++ return PTR_ERR(mck);
++ clk_enable(mck);
++
++ ret = -ENOMEM;
++ dac = kzalloc(sizeof(struct at32_dac), GFP_KERNEL);
++ if (!dac)
++ goto out_disable_clk;
++
++ spin_lock_init(&dac->lock);
++ init_MUTEX(&dac->sem);
++ init_waitqueue_head(&dac->write_wait);
++ dac->pdev = pdev;
++ dac->mck = mck;
++
++ dac->regs = ioremap(regs->start, regs->end - regs->start + 1);
++ if (!dac->regs)
++ goto out_free_dac;
++
++ ret = request_irq(irq, at32dac_interrupt, 0, "dac", dac);
++ if (ret)
++ goto out_unmap_regs;
++
++ /* FIXME */
++ dac->req.req.dmac = find_dma_controller(0);
++ if (!dac->req.req.dmac)
++ goto out_free_irq;
++
++ ret = dma_alloc_channel(dac->req.req.dmac);
++ if (ret < 0)
++ goto out_free_irq;
++
++ dac->req.req.channel = ret;
++ dac->req.req.block_complete = at32dac_dma_block_complete;
++ dac->req.req.error = at32dac_dma_error;
++ dac->req.data_reg = regs->start + DAC_DATA;
++ dac->req.periph_id = 2; /* FIXME */
++ dac->req.direction = DMA_DIR_MEM_TO_PERIPH;
++ dac->req.width = DMA_WIDTH_32BIT;
++
++ /* Make sure the DAC is silent and disabled */
++ dac_writel(dac, DATA, 0);
++ dac_writel(dac, CTRL, 0);
++
++ ret = register_sound_dsp(&at32dac_dsp_fops, -1);
++ if (ret < 0)
++ goto out_free_dma;
++ dac->dev_dsp = ret;
++
++ /* TODO: Register mixer */
++
++ the_dac = dac;
++ platform_set_drvdata(pdev, dac);
++
++ return 0;
++
++out_free_dma:
++ dma_release_channel(dac->req.req.dmac, dac->req.req.channel);
++out_free_irq:
++ free_irq(irq, dac);
++out_unmap_regs:
++ iounmap(dac->regs);
++out_free_dac:
++ kfree(dac);
++out_disable_clk:
++ clk_disable(mck);
++ clk_put(mck);
++ return ret;
++}
++
++static int __devexit at32dac_remove(struct platform_device *pdev)
++{
++ struct at32_dac *dac;
++
++ dac = platform_get_drvdata(pdev);
++ if (dac) {
++ unregister_sound_dsp(dac->dev_dsp);
++ dma_release_channel(dac->req.req.dmac, dac->req.req.channel);
++ free_irq(platform_get_irq(pdev, 0), dac);
++ iounmap(dac->regs);
++ clk_disable(dac->mck);
++ clk_put(dac->mck);
++ kfree(dac);
++ platform_set_drvdata(pdev, NULL);
++ the_dac = NULL;
++ }
++
++ return 0;
++}
++
++static struct platform_driver at32dac_driver = {
++ .probe = at32dac_probe,
++ .remove = __devexit_p(at32dac_remove),
++ .driver = {
++ .name = "dac",
++ },
++};
++
++static int __init at32dac_init(void)
++{
++ return platform_driver_register(&at32dac_driver);
++}
++module_init(at32dac_init);
++
++static void __exit at32dac_exit(void)
++{
++ platform_driver_unregister(&at32dac_driver);
++}
++module_exit(at32dac_exit);
++
++MODULE_AUTHOR("Haavard Skinnemoen <hskinnemoen@atmel.com>");
++MODULE_DESCRIPTION("DMA Sound Driver for the Atmel AT32 on-chip DAC");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.18-avr32/sound/oss/at32dac.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/sound/oss/at32dac.h 2006-11-02 15:57:01.000000000 +0100
+@@ -0,0 +1,65 @@
++/*
++ * Register definitions for the Atmel AT32 on-chip DAC.
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_DAC_H__
++#define __ASM_AVR32_DAC_H__
++
++/* DAC register offsets */
++#define DAC_DATA 0x0000
++#define DAC_CTRL 0x0008
++#define DAC_INT_MASK 0x000c
++#define DAC_INT_EN 0x0010
++#define DAC_INT_DIS 0x0014
++#define DAC_INT_CLR 0x0018
++#define DAC_INT_STATUS 0x001c
++#define DAC_PDC_DATA 0x0020
++
++/* Bitfields in DATA */
++#define DAC_DATA_OFFSET 0
++#define DAC_DATA_SIZE 32
++
++/* Bitfields in CTRL */
++#define DAC_SWAP_OFFSET 30
++#define DAC_SWAP_SIZE 1
++#define DAC_EN_OFFSET 31
++#define DAC_EN_SIZE 1
++
++/* Bitfields in INT_MASK */
++
++/* Bitfields in INT_EN */
++
++/* Bitfields in INT_DIS */
++#define DAC_TX_READY_OFFSET 29
++#define DAC_TX_READY_SIZE 1
++#define DAC_TX_BUFFER_EMPTY_OFFSET 30
++#define DAC_TX_BUFFER_EMPTY_SIZE 1
++#define DAC_CHANNEL_TX_END_OFFSET 31
++#define DAC_CHANNEL_TX_END_SIZE 1
++
++/* Bitfields in INT_CLR */
++#define DAC_UNDERRUN_OFFSET 28
++#define DAC_UNDERRUN_SIZE 1
++
++/* Bitfields in INT_STATUS */
++
++/* Bitfields in PDC_DATA */
++
++/* Bit manipulation macros */
++#define DAC_BIT(name) (1 << DAC_##name##_OFFSET)
++#define DAC_BF(name,value) (((value) & ((1 << DAC_##name##_SIZE) - 1)) << DAC_##name##_OFFSET)
++#define DAC_BFEXT(name,value) (((value) >> DAC_##name##_OFFSET) & ((1 << DAC_##name##_SIZE) - 1))
++#define DAC_BFINS(name,value,old) (((old) & ~(((1 << DAC_##name##_SIZE) - 1) << DAC_##name##_OFFSET)) | DAC_BF(name,value))
++
++/* Register access macros */
++#define dac_readl(port,reg) \
++ __raw_readl((port)->regs + DAC_##reg)
++#define dac_writel(port,reg,value) \
++ __raw_writel((value), (port)->regs + DAC_##reg)
++
++#endif /* __ASM_AVR32_DAC_H__ */
diff --git a/packages/linux/linux-2.6.18/at32ap7000-dmac-driver.patch b/packages/linux/linux-2.6.18/at32ap7000-dmac-driver.patch
new file mode 100644
index 0000000000..dfe5f6abd5
--- /dev/null
+++ b/packages/linux/linux-2.6.18/at32ap7000-dmac-driver.patch
@@ -0,0 +1,855 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Håvard Skinnemoen <hskinnemoen@atmel.com>
+Date: Fri Dec 2 13:24:24 2005 +0100
+Subject: [PATCH] AVR32: DesignWare DMA Controller
+
+This patch adds a driver for the Synopsys DesignWare DMA Controller.
+
+---
+
+ arch/avr32/Kconfig | 4
+ arch/avr32/Makefile | 1
+ arch/avr32/drivers/Makefile | 1
+ arch/avr32/drivers/dw-dmac.c | 754 +++++++++++++++++++++++++++++++++++++++++++
+ arch/avr32/drivers/dw-dmac.h | 42 ++
+ 5 files changed, 802 insertions(+)
+
+Index: linux-2.6.18-avr32/arch/avr32/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/Makefile 2006-11-02 14:17:29.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/Makefile 2006-11-02 15:53:13.000000000 +0100
+@@ -30,6 +30,7 @@ core-$(CONFIG_BOARD_ATSTK1000) += arch/
+ core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/
+ core-y += arch/avr32/kernel/
+ core-y += arch/avr32/mm/
++drivers-y += arch/avr32/drivers/
+ drivers-$(CONFIG_OPROFILE) += arch/avr32/oprofile/
+ libs-y += arch/avr32/lib/
+
+Index: linux-2.6.18-avr32/arch/avr32/drivers/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/drivers/Makefile 2006-11-02 14:17:29.000000000 +0100
+@@ -0,0 +1 @@
++obj-$(CONFIG_DW_DMAC) += dw-dmac.o
+Index: linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c 2006-11-02 15:55:35.000000000 +0100
+@@ -0,0 +1,754 @@
++/*
++ * Driver for the Synopsys DesignWare DMA Controller
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/clk.h>
++#include <linux/device.h>
++#include <linux/dma-mapping.h>
++#include <linux/dmapool.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <asm/dma-controller.h>
++#include <asm/io.h>
++
++#include "dw-dmac.h"
++
++#define DMAC_NR_CHANNELS 3
++#define DMAC_MAX_BLOCKSIZE 4095
++
++enum {
++ CH_STATE_FREE = 0,
++ CH_STATE_ALLOCATED,
++ CH_STATE_BUSY,
++};
++
++struct dw_dma_lli {
++ dma_addr_t sar;
++ dma_addr_t dar;
++ dma_addr_t llp;
++ u32 ctllo;
++ u32 ctlhi;
++ u32 sstat;
++ u32 dstat;
++};
++
++struct dw_dma_block {
++ struct dw_dma_lli *lli_vaddr;
++ dma_addr_t lli_dma_addr;
++};
++
++struct dw_dma_channel {
++ unsigned int state;
++ int is_cyclic;
++ struct dma_request_sg *req_sg;
++ struct dma_request_cyclic *req_cyclic;
++ unsigned int nr_blocks;
++ int direction;
++ struct dw_dma_block *block;
++};
++
++struct dw_dma_controller {
++ spinlock_t lock;
++ void * __iomem regs;
++ struct dma_pool *lli_pool;
++ struct clk *hclk;
++ struct dma_controller dma;
++ struct dw_dma_channel channel[DMAC_NR_CHANNELS];
++};
++#define to_dw_dmac(dmac) container_of(dmac, struct dw_dma_controller, dma)
++
++#define dmac_writel_hi(dmac, reg, value) \
++ __raw_writel((value), (dmac)->regs + DW_DMAC_##reg + 4)
++#define dmac_readl_hi(dmac, reg) \
++ __raw_readl((dmac)->regs + DW_DMAC_##reg + 4)
++#define dmac_writel_lo(dmac, reg, value) \
++ __raw_writel((value), (dmac)->regs + DW_DMAC_##reg)
++#define dmac_readl_lo(dmac, reg) \
++ __raw_readl((dmac)->regs + DW_DMAC_##reg)
++#define dmac_chan_writel_hi(dmac, chan, reg, value) \
++ __raw_writel((value), ((dmac)->regs + 0x58 * (chan) \
++ + DW_DMAC_CHAN_##reg + 4))
++#define dmac_chan_readl_hi(dmac, chan, reg) \
++ __raw_readl((dmac)->regs + 0x58 * (chan) + DW_DMAC_CHAN_##reg + 4)
++#define dmac_chan_writel_lo(dmac, chan, reg, value) \
++ __raw_writel((value), (dmac)->regs + 0x58 * (chan) + DW_DMAC_CHAN_##reg)
++#define dmac_chan_readl_lo(dmac, chan, reg) \
++ __raw_readl((dmac)->regs + 0x58 * (chan) + DW_DMAC_CHAN_##reg)
++#define set_channel_bit(dmac, reg, chan) \
++ dmac_writel_lo(dmac, reg, (1 << (chan)) | (1 << ((chan) + 8)))
++#define clear_channel_bit(dmac, reg, chan) \
++ dmac_writel_lo(dmac, reg, (0 << (chan)) | (1 << ((chan) + 8)))
++
++static int dmac_alloc_channel(struct dma_controller *_dmac)
++{
++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac);
++ struct dw_dma_channel *chan;
++ unsigned long flags;
++ int i;
++
++ spin_lock_irqsave(&dmac->lock, flags);
++ for (i = 0; i < DMAC_NR_CHANNELS; i++)
++ if (dmac->channel[i].state == CH_STATE_FREE)
++ break;
++
++ if (i < DMAC_NR_CHANNELS) {
++ chan = &dmac->channel[i];
++ chan->state = CH_STATE_ALLOCATED;
++ } else {
++ i = -EBUSY;
++ }
++
++ spin_unlock_irqrestore(&dmac->lock, flags);
++
++ return i;
++}
++
++static void dmac_release_channel(struct dma_controller *_dmac, int channel)
++{
++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac);
++
++ BUG_ON(channel >= DMAC_NR_CHANNELS
++ || dmac->channel[channel].state != CH_STATE_ALLOCATED);
++
++ dmac->channel[channel].state = CH_STATE_FREE;
++}
++
++static struct dw_dma_block *allocate_blocks(struct dw_dma_controller *dmac,
++ unsigned int nr_blocks)
++{
++ struct dw_dma_block *block;
++ void *p;
++ unsigned int i;
++
++ block = kmalloc(nr_blocks * sizeof(*block),
++ GFP_KERNEL);
++ if (unlikely(!block))
++ return NULL;
++
++ for (i = 0; i < nr_blocks; i++) {
++ p = dma_pool_alloc(dmac->lli_pool, GFP_KERNEL,
++ &block[i].lli_dma_addr);
++ block[i].lli_vaddr = p;
++ if (unlikely(!p))
++ goto fail;
++ }
++
++ return block;
++
++fail:
++ for (i = 0; i < nr_blocks; i++) {
++ if (!block[i].lli_vaddr)
++ break;
++ dma_pool_free(dmac->lli_pool, block[i].lli_vaddr,
++ block[i].lli_dma_addr);
++ }
++ kfree(block);
++ return NULL;
++}
++
++static int dmac_prepare_request_sg(struct dma_controller *_dmac,
++ struct dma_request_sg *req)
++{
++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac);
++ struct dw_dma_channel *chan;
++ unsigned long ctlhi, ctllo, cfghi, cfglo;
++ unsigned long block_size;
++ int ret, i, nr_blocks, direction;
++ unsigned long flags;
++
++ spin_lock_irqsave(&dmac->lock, flags);
++
++ ret = -EINVAL;
++ if (req->req.channel >= DMAC_NR_CHANNELS
++ || dmac->channel[req->req.channel].state != CH_STATE_ALLOCATED
++ || req->block_size > DMAC_MAX_BLOCKSIZE) {
++ spin_unlock_irqrestore(&dmac->lock, flags);
++ return -EINVAL;
++ }
++
++ chan = &dmac->channel[req->req.channel];
++ chan->state = CH_STATE_BUSY;
++ chan->req_sg = req;
++ chan->is_cyclic = 0;
++
++ /*
++ * We have marked the channel as busy, so no need to keep the
++ * lock as long as we only touch the channel-specific
++ * registers
++ */
++ spin_unlock_irqrestore(&dmac->lock, flags);
++
++ /*
++ * There may be limitations in the driver and/or the DMA
++ * controller that prevents us from sending a whole
++ * scatterlist item in one go. Taking this into account,
++ * calculate the number of block transfers we need to set up.
++ *
++ * FIXME: Let the peripheral driver know about the maximum
++ * block size we support. We really don't want to use a
++ * different block size than what was suggested by the
++ * peripheral.
++ *
++ * Each block will get its own Linked List Item (LLI) below.
++ */
++ block_size = req->block_size;
++ pr_debug("block_size = %lu, nr_sg = %u\n", block_size, req->nr_sg);
++ for (i = 0, nr_blocks = 0; i < req->nr_sg; i++) {
++ pr_debug("sg[i].length = %u\n", req->sg[i].length);
++ BUG_ON(req->sg[i].length % block_size);
++ nr_blocks += req->sg[i].length / block_size;
++ }
++
++ BUG_ON(nr_blocks == 0);
++ chan->nr_blocks = nr_blocks;
++
++ ret = -EINVAL;
++ cfglo = cfghi = 0;
++ switch (req->direction) {
++ case DMA_DIR_MEM_TO_PERIPH:
++ direction = DMA_TO_DEVICE;
++ cfghi = req->periph_id << (43 - 32);
++ break;
++
++ case DMA_DIR_PERIPH_TO_MEM:
++ direction = DMA_FROM_DEVICE;
++ cfghi = req->periph_id << (39 - 32);
++ break;
++ default:
++ goto out_unclaim_channel;
++ }
++
++ chan->direction = direction;
++
++ dmac_chan_writel_hi(dmac, req->req.channel, CFG, cfghi);
++ dmac_chan_writel_lo(dmac, req->req.channel, CFG, cfglo);
++
++ ctlhi = block_size >> req->width;
++ ctllo = ((req->direction << 20)
++ // | (1 << 14) | (1 << 11) // source/dest burst trans len
++ | (req->width << 4) | (req->width << 1)
++ | (1 << 0)); // interrupt enable
++
++ if (nr_blocks == 1) {
++ /* Only one block: No need to use block chaining */
++ if (direction == DMA_TO_DEVICE) {
++ dmac_chan_writel_lo(dmac, req->req.channel, SAR,
++ req->sg->dma_address);
++ dmac_chan_writel_lo(dmac, req->req.channel, DAR,
++ req->data_reg);
++ ctllo |= 2 << 7; // no dst increment
++ } else {
++ dmac_chan_writel_lo(dmac, req->req.channel, SAR,
++ req->data_reg);
++ dmac_chan_writel_lo(dmac, req->req.channel, DAR,
++ req->sg->dma_address);
++ ctllo |= 2 << 9; // no src increment
++ }
++ dmac_chan_writel_lo(dmac, req->req.channel, CTL, ctllo);
++ dmac_chan_writel_hi(dmac, req->req.channel, CTL, ctlhi);
++ } else {
++ struct dw_dma_lli *lli, *lli_prev = NULL;
++ int j = 0, offset = 0;
++
++ ret = -ENOMEM;
++ chan->block = allocate_blocks(dmac, nr_blocks);
++ if (!chan->block)
++ goto out_unclaim_channel;
++
++ if (direction == DMA_TO_DEVICE)
++ ctllo |= 1 << 28 | 1 << 27 | 2 << 7;
++ else
++ ctllo |= 1 << 28 | 1 << 27 | 2 << 9;
++
++ /*
++ * Map scatterlist items to blocks. One scatterlist
++ * item may need more than one block for the reasons
++ * mentioned above.
++ */
++ for (i = 0; i < nr_blocks; i++) {
++ lli = chan->block[i].lli_vaddr;
++ if (lli_prev) {
++ lli_prev->llp = chan->block[i].lli_dma_addr;
++ pr_debug("lli[%d] (0x%p/0x%x): 0x%x 0x%x 0x%x 0x%x 0x%x\n",
++ i - 1, chan->block[i - 1].lli_vaddr,
++ chan->block[i - 1].lli_dma_addr,
++ lli_prev->sar, lli_prev->dar, lli_prev->llp,
++ lli_prev->ctllo, lli_prev->ctlhi);
++ }
++ lli->llp = 0;
++ lli->ctllo = ctllo;
++ lli->ctlhi = ctlhi;
++ if (direction == DMA_TO_DEVICE) {
++ lli->sar = req->sg[j].dma_address + offset;
++ lli->dar = req->data_reg;
++ } else {
++ lli->sar = req->data_reg;
++ lli->dar = req->sg[j].dma_address + offset;
++ }
++ lli_prev = lli;
++
++ offset += block_size;
++ if (offset > req->sg[j].length) {
++ j++;
++ offset = 0;
++ }
++ }
++
++ pr_debug("lli[%d] (0x%p/0x%x): 0x%x 0x%x 0x%x 0x%x 0x%x\n",
++ i - 1, chan->block[i - 1].lli_vaddr,
++ chan->block[i - 1].lli_dma_addr, lli_prev->sar,
++ lli_prev->dar, lli_prev->llp,
++ lli_prev->ctllo, lli_prev->ctlhi);
++
++ /*
++ * SAR, DAR and CTL are initialized from the LLI. We
++ * only have to enable the LLI bits in CTL.
++ */
++ dmac_chan_writel_lo(dmac, req->req.channel, LLP,
++ chan->block[0].lli_dma_addr);
++ dmac_chan_writel_lo(dmac, req->req.channel, CTL, 1 << 28 | 1 << 27);
++ }
++
++ set_channel_bit(dmac, MASK_XFER, req->req.channel);
++ set_channel_bit(dmac, MASK_ERROR, req->req.channel);
++ if (req->req.block_complete)
++ set_channel_bit(dmac, MASK_BLOCK, req->req.channel);
++ else
++ clear_channel_bit(dmac, MASK_BLOCK, req->req.channel);
++
++ return 0;
++
++out_unclaim_channel:
++ chan->state = CH_STATE_ALLOCATED;
++ return ret;
++}
++
++static int dmac_prepare_request_cyclic(struct dma_controller *_dmac,
++ struct dma_request_cyclic *req)
++{
++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac);
++ struct dw_dma_channel *chan;
++ unsigned long ctlhi, ctllo, cfghi, cfglo;
++ unsigned long block_size;
++ int ret, i, direction;
++ unsigned long flags;
++
++ spin_lock_irqsave(&dmac->lock, flags);
++
++ block_size = (req->buffer_size/req->periods) >> req->width;
++
++ ret = -EINVAL;
++ if (req->req.channel >= DMAC_NR_CHANNELS
++ || dmac->channel[req->req.channel].state != CH_STATE_ALLOCATED
++ || (req->periods == 0)
++ || block_size > DMAC_MAX_BLOCKSIZE) {
++ spin_unlock_irqrestore(&dmac->lock, flags);
++ return -EINVAL;
++ }
++
++ chan = &dmac->channel[req->req.channel];
++ chan->state = CH_STATE_BUSY;
++ chan->is_cyclic = 1;
++ chan->req_cyclic = req;
++
++ /*
++ * We have marked the channel as busy, so no need to keep the
++ * lock as long as we only touch the channel-specific
++ * registers
++ */
++ spin_unlock_irqrestore(&dmac->lock, flags);
++
++ /*
++ Setup
++ */
++ BUG_ON(req->buffer_size % req->periods);
++ /* printk(KERN_INFO "block_size = %lu, periods = %u\n", block_size, req->periods); */
++
++ chan->nr_blocks = req->periods;
++
++ ret = -EINVAL;
++ cfglo = cfghi = 0;
++ switch (req->direction) {
++ case DMA_DIR_MEM_TO_PERIPH:
++ direction = DMA_TO_DEVICE;
++ cfghi = req->periph_id << (43 - 32);
++ break;
++
++ case DMA_DIR_PERIPH_TO_MEM:
++ direction = DMA_FROM_DEVICE;
++ cfghi = req->periph_id << (39 - 32);
++ break;
++ default:
++ goto out_unclaim_channel;
++ }
++
++ chan->direction = direction;
++
++ dmac_chan_writel_hi(dmac, req->req.channel, CFG, cfghi);
++ dmac_chan_writel_lo(dmac, req->req.channel, CFG, cfglo);
++
++ ctlhi = block_size;
++ ctllo = ((req->direction << 20)
++ | (req->width << 4) | (req->width << 1)
++ | (1 << 0)); // interrupt enable
++
++ {
++ struct dw_dma_lli *lli = NULL, *lli_prev = NULL;
++
++ ret = -ENOMEM;
++ chan->block = allocate_blocks(dmac, req->periods);
++ if (!chan->block)
++ goto out_unclaim_channel;
++
++ if (direction == DMA_TO_DEVICE)
++ ctllo |= 1 << 28 | 1 << 27 | 2 << 7;
++ else
++ ctllo |= 1 << 28 | 1 << 27 | 2 << 9;
++
++ /*
++ * Set up a linked list items where each period gets
++ * an item. The linked list item for the last period
++ * points back to the star of the buffer making a
++ * cyclic buffer.
++ */
++ for (i = 0; i < req->periods; i++) {
++ lli = chan->block[i].lli_vaddr;
++ if (lli_prev) {
++ lli_prev->llp = chan->block[i].lli_dma_addr;
++ /* printk(KERN_INFO "lli[%d] (0x%p/0x%x): 0x%x 0x%x 0x%x 0x%x 0x%x\n",
++ i - 1, chan->block[i - 1].lli_vaddr,
++ chan->block[i - 1].lli_dma_addr,
++ lli_prev->sar, lli_prev->dar, lli_prev->llp,
++ lli_prev->ctllo, lli_prev->ctlhi);*/
++ }
++ lli->llp = 0;
++ lli->ctllo = ctllo;
++ lli->ctlhi = ctlhi;
++ if (direction == DMA_TO_DEVICE) {
++ lli->sar = req->buffer_start + i*(block_size << req->width);
++ lli->dar = req->data_reg;
++ } else {
++ lli->sar = req->data_reg;
++ lli->dar = req->buffer_start + i*(block_size << req->width);
++ }
++ lli_prev = lli;
++ }
++ lli->llp = chan->block[0].lli_dma_addr;
++
++ /*printk(KERN_INFO "lli[%d] (0x%p/0x%x): 0x%x 0x%x 0x%x 0x%x 0x%x\n",
++ i - 1, chan->block[i - 1].lli_vaddr,
++ chan->block[i - 1].lli_dma_addr, lli_prev->sar,
++ lli_prev->dar, lli_prev->llp,
++ lli_prev->ctllo, lli_prev->ctlhi); */
++
++ /*
++ * SAR, DAR and CTL are initialized from the LLI. We
++ * only have to enable the LLI bits in CTL.
++ */
++ dmac_chan_writel_lo(dmac, req->req.channel, LLP,
++ chan->block[0].lli_dma_addr);
++ dmac_chan_writel_lo(dmac, req->req.channel, CTL, 1 << 28 | 1 << 27);
++ }
++
++ clear_channel_bit(dmac, MASK_XFER, req->req.channel);
++ set_channel_bit(dmac, MASK_ERROR, req->req.channel);
++ if (req->req.block_complete)
++ set_channel_bit(dmac, MASK_BLOCK, req->req.channel);
++ else
++ clear_channel_bit(dmac, MASK_BLOCK, req->req.channel);
++
++ return 0;
++
++out_unclaim_channel:
++ chan->state = CH_STATE_ALLOCATED;
++ return ret;
++}
++
++static int dmac_start_request(struct dma_controller *_dmac,
++ unsigned int channel)
++{
++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac);
++
++ BUG_ON(channel >= DMAC_NR_CHANNELS);
++
++ set_channel_bit(dmac, CH_EN, channel);
++
++ return 0;
++}
++
++static dma_addr_t dmac_get_current_pos(struct dma_controller *_dmac,
++ unsigned int channel)
++{
++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac);
++ struct dw_dma_channel *chan;
++ dma_addr_t current_pos;
++
++ BUG_ON(channel >= DMAC_NR_CHANNELS);
++
++ chan = &dmac->channel[channel];
++
++ switch (chan->direction) {
++ case DMA_TO_DEVICE:
++ current_pos = dmac_chan_readl_lo(dmac, channel, SAR);
++ break;
++ case DMA_FROM_DEVICE:
++ current_pos = dmac_chan_readl_lo(dmac, channel, DAR);
++ break;
++ default:
++ return 0;
++ }
++
++
++ if (!current_pos) {
++ if (chan->is_cyclic) {
++ current_pos = chan->req_cyclic->buffer_start;
++ } else {
++ current_pos = chan->req_sg->sg->dma_address;
++ }
++ }
++
++ return current_pos;
++}
++
++
++static void cleanup_channel(struct dw_dma_controller *dmac,
++ struct dw_dma_channel *chan)
++{
++ unsigned int i;
++
++ if (chan->nr_blocks > 1) {
++ for (i = 0; i < chan->nr_blocks; i++)
++ dma_pool_free(dmac->lli_pool, chan->block[i].lli_vaddr,
++ chan->block[i].lli_dma_addr);
++ kfree(chan->block);
++ }
++
++ chan->state = CH_STATE_ALLOCATED;
++}
++
++static int dmac_stop_request(struct dma_controller *_dmac,
++ unsigned int channel)
++{
++ struct dw_dma_controller *dmac = to_dw_dmac(_dmac);
++
++ BUG_ON(channel >= DMAC_NR_CHANNELS);
++
++ BUG_ON(dmac->channel[channel].state != CH_STATE_BUSY);
++
++ clear_channel_bit(dmac, CH_EN, channel);
++
++ cleanup_channel(dmac, &dmac->channel[channel]);
++
++ return 0;
++}
++
++
++static void dmac_block_complete(struct dw_dma_controller *dmac)
++{
++ struct dw_dma_channel *chan;
++ unsigned long status, chanid;
++
++ status = dmac_readl_lo(dmac, STATUS_BLOCK);
++
++ while (status) {
++ struct dma_request *req;
++ chanid = __ffs(status);
++ chan = &dmac->channel[chanid];
++
++ if (chan->is_cyclic) {
++ BUG_ON(!chan->req_cyclic
++ || !chan->req_cyclic->req.block_complete);
++ req = &chan->req_cyclic->req;
++ } else {
++ BUG_ON(!chan->req_sg || !chan->req_sg->req.block_complete);
++ req = &chan->req_sg->req;
++ }
++ dmac_writel_lo(dmac, CLEAR_BLOCK, 1 << chanid);
++ req->block_complete(req);
++ status = dmac_readl_lo(dmac, STATUS_BLOCK);
++ }
++}
++
++static void dmac_xfer_complete(struct dw_dma_controller *dmac)
++{
++ struct dw_dma_channel *chan;
++ struct dma_request *req;
++ unsigned long status, chanid;
++
++ status = dmac_readl_lo(dmac, STATUS_XFER);
++
++ while (status) {
++ chanid = __ffs(status);
++ chan = &dmac->channel[chanid];
++
++ dmac_writel_lo(dmac, CLEAR_XFER, 1 << chanid);
++
++ req = &chan->req_sg->req;
++ BUG_ON(!req);
++ cleanup_channel(dmac, chan);
++ if (req->xfer_complete)
++ req->xfer_complete(req);
++
++ status = dmac_readl_lo(dmac, STATUS_XFER);
++ }
++}
++
++static void dmac_error(struct dw_dma_controller *dmac)
++{
++ struct dw_dma_channel *chan;
++ unsigned long status, chanid;
++
++ status = dmac_readl_lo(dmac, STATUS_ERROR);
++
++ while (status) {
++ struct dma_request *req;
++
++ chanid = __ffs(status);
++ chan = &dmac->channel[chanid];
++
++ dmac_writel_lo(dmac, CLEAR_ERROR, 1 << chanid);
++ clear_channel_bit(dmac, CH_EN, chanid);
++
++ if (chan->is_cyclic) {
++ BUG_ON(!chan->req_cyclic);
++ req = &chan->req_cyclic->req;
++ } else {
++ BUG_ON(!chan->req_sg);
++ req = &chan->req_sg->req;
++ }
++
++ cleanup_channel(dmac, chan);
++ if (req->error)
++ req->error(req);
++
++ status = dmac_readl_lo(dmac, STATUS_XFER);
++ }
++}
++
++static irqreturn_t dmac_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct dw_dma_controller *dmac = dev_id;
++ unsigned long status;
++ int ret = IRQ_NONE;
++
++ spin_lock(&dmac->lock);
++
++ status = dmac_readl_lo(dmac, STATUS_INT);
++
++ while (status) {
++ ret = IRQ_HANDLED;
++ if (status & 0x10)
++ dmac_error(dmac);
++ if (status & 0x02)
++ dmac_block_complete(dmac);
++ if (status & 0x01)
++ dmac_xfer_complete(dmac);
++
++ status = dmac_readl_lo(dmac, STATUS_INT);
++ }
++
++ spin_unlock(&dmac->lock);
++ return ret;
++}
++
++static int __devinit dmac_probe(struct platform_device *pdev)
++{
++ struct dw_dma_controller *dmac;
++ struct resource *regs;
++ int ret;
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!regs)
++ return -ENXIO;
++
++ dmac = kmalloc(sizeof(*dmac), GFP_KERNEL);
++ if (!dmac)
++ return -ENOMEM;
++ memset(dmac, 0, sizeof(*dmac));
++
++ dmac->hclk = clk_get(&pdev->dev, "hclk");
++ if (IS_ERR(dmac->hclk)) {
++ ret = PTR_ERR(dmac->hclk);
++ goto out_free_dmac;
++ }
++ clk_enable(dmac->hclk);
++
++ ret = -ENOMEM;
++ dmac->lli_pool = dma_pool_create("dmac", &pdev->dev,
++ sizeof(struct dw_dma_lli), 4, 0);
++ if (!dmac->lli_pool)
++ goto out_disable_clk;
++
++ spin_lock_init(&dmac->lock);
++ dmac->dma.dev = &pdev->dev;
++ dmac->dma.alloc_channel = dmac_alloc_channel;
++ dmac->dma.release_channel = dmac_release_channel;
++ dmac->dma.prepare_request_sg = dmac_prepare_request_sg;
++ dmac->dma.prepare_request_cyclic = dmac_prepare_request_cyclic;
++ dmac->dma.start_request = dmac_start_request;
++ dmac->dma.stop_request = dmac_stop_request;
++ dmac->dma.get_current_pos = dmac_get_current_pos;
++
++ dmac->regs = ioremap(regs->start, regs->end - regs->start + 1);
++ if (!dmac->regs)
++ goto out_free_pool;
++
++ ret = request_irq(platform_get_irq(pdev, 0), dmac_interrupt,
++ SA_SAMPLE_RANDOM, pdev->name, dmac);
++ if (ret)
++ goto out_unmap_regs;
++
++ /* Enable the DMA controller */
++ dmac_writel_lo(dmac, CFG, 1);
++
++ register_dma_controller(&dmac->dma);
++
++ printk(KERN_INFO
++ "dmac%d: DesignWare DMA controller at 0x%p irq %d\n",
++ dmac->dma.id, dmac->regs, platform_get_irq(pdev, 0));
++
++ return 0;
++
++out_unmap_regs:
++ iounmap(dmac->regs);
++out_free_pool:
++ dma_pool_destroy(dmac->lli_pool);
++out_disable_clk:
++ clk_disable(dmac->hclk);
++ clk_put(dmac->hclk);
++out_free_dmac:
++ kfree(dmac);
++ return ret;
++}
++
++static struct platform_driver dmac_driver = {
++ .probe = dmac_probe,
++ .driver = {
++ .name = "dmac",
++ },
++};
++
++static int __init dmac_init(void)
++{
++ return platform_driver_register(&dmac_driver);
++}
++subsys_initcall(dmac_init);
++
++static void __exit dmac_exit(void)
++{
++ platform_driver_unregister(&dmac_driver);
++}
++module_exit(dmac_exit);
++
++MODULE_DESCRIPTION("Synopsys DesignWare DMA Controller driver");
++MODULE_AUTHOR("Haavard Skinnemoen <hskinnemoen@atmel.com>");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.h 2006-11-02 14:17:29.000000000 +0100
+@@ -0,0 +1,42 @@
++/*
++ * Driver for the Synopsys DesignWare DMA Controller
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __AVR32_DW_DMAC_H__
++#define __AVR32_DW_DMAC_H__
++
++#define DW_DMAC_CFG 0x398
++#define DW_DMAC_CH_EN 0x3a0
++
++#define DW_DMAC_STATUS_XFER 0x2e8
++#define DW_DMAC_STATUS_BLOCK 0x2f0
++#define DW_DMAC_STATUS_ERROR 0x308
++
++#define DW_DMAC_MASK_XFER 0x310
++#define DW_DMAC_MASK_BLOCK 0x318
++#define DW_DMAC_MASK_ERROR 0x330
++
++#define DW_DMAC_CLEAR_XFER 0x338
++#define DW_DMAC_CLEAR_BLOCK 0x340
++#define DW_DMAC_CLEAR_ERROR 0x358
++
++#define DW_DMAC_STATUS_INT 0x360
++
++#define DW_DMAC_CHAN_SAR 0x000
++#define DW_DMAC_CHAN_DAR 0x008
++#define DW_DMAC_CHAN_LLP 0x010
++#define DW_DMAC_CHAN_CTL 0x018
++#define DW_DMAC_CHAN_SSTAT 0x020
++#define DW_DMAC_CHAN_DSTAT 0x028
++#define DW_DMAC_CHAN_SSTATAR 0x030
++#define DW_DMAC_CHAN_DSTATAR 0x038
++#define DW_DMAC_CHAN_CFG 0x040
++#define DW_DMAC_CHAN_SGR 0x048
++#define DW_DMAC_CHAN_DSR 0x050
++
++#endif /* __AVR32_DW_DMAC_H__ */
+Index: linux-2.6.18-avr32/arch/avr32/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/Kconfig 2006-11-02 14:17:29.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/Kconfig 2006-11-02 15:53:13.000000000 +0100
+@@ -157,6 +157,10 @@ config OWNERSHIP_TRACE
+ enabling Nexus-compliant debuggers to keep track of the PID of the
+ currently executing task.
+
++config DW_DMAC
++ tristate "Synopsys DesignWare DMA Controller support"
++ default y if CPU_AT32AP7000
++
+ # FPU emulation goes here
+
+ source "kernel/Kconfig.hz"
diff --git a/packages/linux/linux-2.6.18/at32ap7000-platform_device-definitions.patch b/packages/linux/linux-2.6.18/at32ap7000-platform_device-definitions.patch
new file mode 100644
index 0000000000..6f1e98a70c
--- /dev/null
+++ b/packages/linux/linux-2.6.18/at32ap7000-platform_device-definitions.patch
@@ -0,0 +1,445 @@
+---
+ arch/avr32/mach-at32ap/at32ap7000.c | 325 ++++++++++++++++++++++++++++++++--
+ include/asm-avr32/arch-at32ap/board.h | 6
+ 2 files changed, 313 insertions(+), 18 deletions(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-29 16:31:03.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-29 16:44:49.000000000 +0100
+@@ -9,6 +9,8 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+
++#include <linux/spi/spi.h>
++
+ #include <asm/io.h>
+
+ #include <asm/arch/at32ap7000.h>
+@@ -464,6 +466,17 @@ static struct clk pico_clk = {
+ .users = 1,
+ };
+
++static struct resource dmac0_resource[] = {
++ {
++ .start = 0xff200000,
++ .end = 0xff20ffff,
++ .flags = IORESOURCE_MEM,
++ },
++ IRQ(2),
++};
++DEFINE_DEV(dmac, 0);
++DEV_CLK(hclk, dmac0, hsb, 10);
++
+ /* --------------------------------------------------------------------
+ * PIO
+ * -------------------------------------------------------------------- */
+@@ -504,6 +517,7 @@ void __init at32_add_system_devices(void
+ platform_device_register(&at32_intc0_device);
+ platform_device_register(&smc0_device);
+ platform_device_register(&pdc_device);
++ platform_device_register(&dmac0_device);
+
+ platform_device_register(&pio0_device);
+ platform_device_register(&pio1_device);
+@@ -644,6 +658,15 @@ DEFINE_DEV_DATA(macb, 0);
+ DEV_CLK(hclk, macb0, hsb, 8);
+ DEV_CLK(pclk, macb0, pbb, 6);
+
++static struct eth_platform_data macb1_data;
++static struct resource macb1_resource[] = {
++ PBMEM(0xfff01c00),
++ IRQ(26),
++};
++DEFINE_DEV_DATA(macb, 1);
++DEV_CLK(hclk, macb1, hsb, 9);
++DEV_CLK(pclk, macb1, pbb, 7);
++
+ struct platform_device *__init
+ at32_add_device_eth(unsigned int id, struct eth_platform_data *data)
+ {
+@@ -677,6 +700,33 @@ at32_add_device_eth(unsigned int id, str
+ }
+ break;
+
++ case 1:
++ pdev = &macb1_device;
++
++ select_peripheral(PD(13), PERIPH_B, 0); /* TXD0 */
++ select_peripheral(PD(14), PERIPH_B, 0); /* TXD1 */
++ select_peripheral(PD(11), PERIPH_B, 0); /* TXEN */
++ select_peripheral(PD(12), PERIPH_B, 0); /* TXCK */
++ select_peripheral(PD(10), PERIPH_B, 0); /* RXD0 */
++ select_peripheral(PD(6), PERIPH_B, 0); /* RXD1 */
++ select_peripheral(PD(5), PERIPH_B, 0); /* RXER */
++ select_peripheral(PD(4), PERIPH_B, 0); /* RXDV */
++ select_peripheral(PD(3), PERIPH_B, 0); /* MDC */
++ select_peripheral(PD(2), PERIPH_B, 0); /* MDIO */
++
++ if (!data->is_rmii) {
++ select_peripheral(PC(19), PERIPH_B, 0); /* COL */
++ select_peripheral(PC(23), PERIPH_B, 0); /* CRS */
++ select_peripheral(PC(26), PERIPH_B, 0); /* TXER */
++ select_peripheral(PC(27), PERIPH_B, 0); /* TXD2 */
++ select_peripheral(PC(28), PERIPH_B, 0); /* TXD3 */
++ select_peripheral(PC(29), PERIPH_B, 0); /* RXD2 */
++ select_peripheral(PC(30), PERIPH_B, 0); /* RXD3 */
++ select_peripheral(PC(24), PERIPH_B, 0); /* RXCK */
++ select_peripheral(PD(15), PERIPH_B, 0); /* SPD */
++ }
++ break;
++
+ default:
+ return NULL;
+ }
+@@ -688,14 +738,53 @@ at32_add_device_eth(unsigned int id, str
+ }
+
+ /* --------------------------------------------------------------------
++ * MMC
++ * -------------------------------------------------------------------- */
++static struct resource mmci0_resource[] = {
++ PBMEM(0xfff02400),
++ IRQ(28),
++};
++DEFINE_DEV(mmci, 0);
++DEV_CLK(mck, mmci0, pbb, 9);
++
++struct platform_device *__init at32_add_device_mmci(unsigned int id)
++{
++ struct platform_device *pdev;
++
++ switch (id) {
++ case 0:
++ pdev = &mmci0_device;
++ select_peripheral(PA(10), PERIPH_A, 0); /* CLK */
++ select_peripheral(PA(11), PERIPH_A, 0); /* CMD */
++ select_peripheral(PA(12), PERIPH_A, 0); /* DATA0 */
++ select_peripheral(PA(13), PERIPH_A, 0); /* DATA1 */
++ select_peripheral(PA(14), PERIPH_A, 0); /* DATA2 */
++ select_peripheral(PA(15), PERIPH_A, 0); /* DATA3 */
++ break;
++ default:
++ return NULL;
++ }
++
++ platform_device_register(pdev);
++ return pdev;
++}
++
++/* --------------------------------------------------------------------
+ * SPI
+ * -------------------------------------------------------------------- */
+-static struct resource spi0_resource[] = {
++static struct resource atmel_spi0_resource[] = {
+ PBMEM(0xffe00000),
+ IRQ(3),
+ };
+-DEFINE_DEV(spi, 0);
+-DEV_CLK(mck, spi0, pba, 0);
++DEFINE_DEV(atmel_spi, 0);
++DEV_CLK(pclk, atmel_spi0, pba, 0);
++
++static struct resource atmel_spi1_resource[] = {
++ PBMEM(0xffe00400),
++ IRQ(4),
++};
++DEFINE_DEV(atmel_spi, 1);
++DEV_CLK(pclk, atmel_spi1, pba, 1);
+
+ struct platform_device *__init at32_add_device_spi(unsigned int id)
+ {
+@@ -703,13 +792,96 @@ struct platform_device *__init at32_add_
+
+ switch (id) {
+ case 0:
+- pdev = &spi0_device;
++ pdev = &atmel_spi0_device;
+ select_peripheral(PA(0), PERIPH_A, 0); /* MISO */
+ select_peripheral(PA(1), PERIPH_A, 0); /* MOSI */
+ select_peripheral(PA(2), PERIPH_A, 0); /* SCK */
+- select_peripheral(PA(3), PERIPH_A, 0); /* NPCS0 */
+- select_peripheral(PA(4), PERIPH_A, 0); /* NPCS1 */
+- select_peripheral(PA(5), PERIPH_A, 0); /* NPCS2 */
++
++ /* NPCS[2:0] */
++ at32_select_gpio(GPIO_PIN_PA(3),
++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH);
++ at32_select_gpio(GPIO_PIN_PA(4),
++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH);
++ at32_select_gpio(GPIO_PIN_PA(5),
++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH);
++ break;
++
++ case 1:
++ pdev = &atmel_spi1_device;
++ select_peripheral(PB(0), PERIPH_B, 0); /* MISO */
++ select_peripheral(PB(1), PERIPH_B, 0); /* MOSI */
++ select_peripheral(PB(5), PERIPH_B, 0); /* SCK */
++
++ /* NPCS[2:0] */
++ at32_select_gpio(GPIO_PIN_PA(2),
++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH);
++ at32_select_gpio(GPIO_PIN_PA(3),
++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH);
++ at32_select_gpio(GPIO_PIN_PA(4),
++ AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH);
++
++ default:
++ return NULL;
++ }
++
++ platform_device_register(pdev);
++ return pdev;
++}
++
++/* --------------------------------------------------------------------
++ * USB Device Controller
++ * -------------------------------------------------------------------- */
++static struct resource usb0_resource[] = {
++ {
++ .start = 0xff300000,
++ .end = 0xff3fffff,
++ .flags = IORESOURCE_MEM,
++ },
++ PBMEM(0xfff03000),
++ IRQ(31),
++};
++DEFINE_DEV(usb, 0);
++DEV_CLK(pclk, usb0, pbb, 12);
++DEV_CLK(hclk, usb0, hsb, 6);
++
++struct platform_device *__init at32_add_device_usb(unsigned int id)
++{
++ struct platform_device *pdev;
++
++ switch (id) {
++ case 0:
++ pdev = &usb0_device;
++ /* USB pads are not multiplexed */
++ break;
++ default:
++ return NULL;
++ }
++
++ platform_device_register(pdev);
++ return pdev;
++}
++
++/* --------------------------------------------------------------------
++ * TWI
++ * -------------------------------------------------------------------- */
++
++static struct resource atmel_twi0_resource[] = {
++ PBMEM(0xffe00800),
++ IRQ(5),
++};
++DEFINE_DEV(atmel_twi, 0);
++DEV_CLK(pclk,atmel_twi0,pba,2);
++
++struct platform_device *__init
++at32_add_device_twi(unsigned int id)
++{
++ struct platform_device *pdev;
++
++ switch (id) {
++ case 0:
++ pdev = &atmel_twi0_device;
++ select_peripheral(PA(6), PERIPH_A, 0); /* SDA */
++ select_peripheral(PA(7), PERIPH_A, 0); /* SCL */
+ break;
+
+ default:
+@@ -765,16 +937,16 @@ at32_add_device_lcdc(unsigned int id, st
+ select_peripheral(PC(29), PERIPH_A, 0); /* DATA3 */
+ select_peripheral(PC(30), PERIPH_A, 0); /* DATA4 */
+ select_peripheral(PC(31), PERIPH_A, 0); /* DATA5 */
+- select_peripheral(PD(0), PERIPH_A, 0); /* DATA6 */
+- select_peripheral(PD(1), PERIPH_A, 0); /* DATA7 */
+- select_peripheral(PD(2), PERIPH_A, 0); /* DATA8 */
+- select_peripheral(PD(3), PERIPH_A, 0); /* DATA9 */
+- select_peripheral(PD(4), PERIPH_A, 0); /* DATA10 */
+- select_peripheral(PD(5), PERIPH_A, 0); /* DATA11 */
+- select_peripheral(PD(6), PERIPH_A, 0); /* DATA12 */
+- select_peripheral(PD(7), PERIPH_A, 0); /* DATA13 */
+- select_peripheral(PD(8), PERIPH_A, 0); /* DATA14 */
+- select_peripheral(PD(9), PERIPH_A, 0); /* DATA15 */
++ select_peripheral(PD(0), PERIPH_A, 0); /* DATA6 */
++ select_peripheral(PD(1), PERIPH_A, 0); /* DATA7 */
++ select_peripheral(PD(2), PERIPH_A, 0); /* DATA8 */
++ select_peripheral(PD(3), PERIPH_A, 0); /* DATA9 */
++ select_peripheral(PD(4), PERIPH_A, 0); /* DATA10 */
++ select_peripheral(PD(5), PERIPH_A, 0); /* DATA11 */
++ select_peripheral(PD(6), PERIPH_A, 0); /* DATA12 */
++ select_peripheral(PD(7), PERIPH_A, 0); /* DATA13 */
++ select_peripheral(PD(8), PERIPH_A, 0); /* DATA14 */
++ select_peripheral(PD(9), PERIPH_A, 0); /* DATA15 */
+ select_peripheral(PD(10), PERIPH_A, 0); /* DATA16 */
+ select_peripheral(PD(11), PERIPH_A, 0); /* DATA17 */
+ select_peripheral(PD(12), PERIPH_A, 0); /* DATA18 */
+@@ -799,6 +971,111 @@ at32_add_device_lcdc(unsigned int id, st
+ return pdev;
+ }
+
++/* --------------------------------------------------------------------
++ * Sound
++ * -------------------------------------------------------------------- */
++static struct resource ac97c0_resource[] = {
++ PBMEM(0xfff02800),
++ IRQ(29),
++};
++DEFINE_DEV(ac97c, 0);
++DEV_CLK(mck, ac97c0, pbb, 10);
++
++struct platform_device *__init
++at32_add_device_ac97c(unsigned int id)
++{
++ struct platform_device *pdev;
++
++ switch (id) {
++ case 0:
++ pdev = &ac97c0_device;
++ select_peripheral(PB(20), PERIPH_B, 0); /* SYNC */
++ select_peripheral(PB(21), PERIPH_B, 0); /* SDO */
++ select_peripheral(PB(22), PERIPH_B, 0); /* SDI */
++ select_peripheral(PB(23), PERIPH_B, 0); /* SCLK */
++ break;
++ default:
++ return NULL;
++ }
++
++ platform_device_register(pdev);
++ return pdev;
++}
++
++static struct spi_board_info at73c2130_data = {
++ .max_speed_hz = 200000,
++ .controller_data = (void *)GPIO_PIN_PA(3),
++ .modalias = "at73c213",
++ .bus_num = 0,
++ .chip_select = 0,
++};
++static struct resource at73c2130_resource[] = {
++ PBMEM(0xffe01c00),
++ IRQ(10),
++};
++DEFINE_DEV_DATA(at73c213, 0);
++DEV_CLK(mck, at73c2130, pba, 7);
++
++struct platform_device *__init
++at32_add_device_at73c213(unsigned int id)
++{
++ struct platform_device *pdev;
++
++ switch (id) {
++ case 0:
++ pdev = &at73c2130_device;
++ select_peripheral(PA(21), PERIPH_A, 0); /* RX_FSYNC */
++ select_peripheral(PA(22), PERIPH_A, 0); /* RX_CLOCK */
++ select_peripheral(PA(23), PERIPH_A, 0); /* TX_CLOCK */
++ select_peripheral(PA(24), PERIPH_A, 0); /* TX_FSYNC */
++ select_peripheral(PA(25), PERIPH_A, 0); /* TX_DATA */
++ select_peripheral(PA(26), PERIPH_A, 0); /* RX_DATA */
++ break;
++ default:
++ return NULL;
++ }
++
++ platform_device_register(pdev);
++ return pdev;
++}
++
++static struct resource dac0_resource[] = {
++ PBMEM(0xfff02000),
++ IRQ(27),
++};
++DEFINE_DEV(dac, 0);
++DEV_CLK(mck, dac0, pbb, 8);
++static struct clk dac0_sample_clk = {
++ .name = "sample_clk",
++ .dev = &dac0_device.dev,
++ .mode = genclk_mode,
++ .get_rate = genclk_get_rate,
++ .set_rate = genclk_set_rate,
++ .set_parent = genclk_set_parent,
++ .index = 6,
++};
++
++struct platform_device *__init
++at32_add_device_dac(unsigned int id)
++{
++ struct platform_device *pdev;
++
++ switch (id) {
++ case 0:
++ pdev = &dac0_device;
++ select_peripheral(PB(20), PERIPH_A, 0); /* DATA1 */
++ select_peripheral(PB(21), PERIPH_A, 0); /* DATA0 */
++ select_peripheral(PB(22), PERIPH_A, 0); /* DATAN1 */
++ select_peripheral(PB(23), PERIPH_A, 0); /* DATAN0 */
++ break;
++ default:
++ return NULL;
++ }
++
++ platform_device_register(pdev);
++ return pdev;
++}
++
+ struct clk *at32_clock_list[] = {
+ &osc32k,
+ &osc0,
+@@ -817,6 +1094,7 @@ struct clk *at32_clock_list[] = {
+ &smc0_mck,
+ &pdc_hclk,
+ &pdc_pclk,
++ &dmac0_hclk,
+ &pico_clk,
+ &pio0_mck,
+ &pio1_mck,
+@@ -828,9 +1106,20 @@ struct clk *at32_clock_list[] = {
+ &usart3_usart,
+ &macb0_hclk,
+ &macb0_pclk,
+- &spi0_mck,
++ &macb1_hclk,
++ &macb1_pclk,
++ &atmel_spi0_pclk,
++ &atmel_spi1_pclk,
++ &atmel_twi0_pclk,
++ &mmci0_mck,
++ &usb0_pclk,
++ &usb0_hclk,
+ &lcdc0_hclk,
+ &lcdc0_pixclk,
++ &ac97c0_mck,
++ &at73c2130_mck,
++ &dac0_mck,
++ &dac0_sample_clk,
+ };
+ unsigned int at32_nr_clocks = ARRAY_SIZE(at32_clock_list);
+
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/board.h 2006-11-29 16:31:03.000000000 +0100
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h 2006-11-29 16:31:42.000000000 +0100
+@@ -24,13 +24,19 @@ struct eth_platform_data {
+ struct platform_device *
+ at32_add_device_eth(unsigned int id, struct eth_platform_data *data);
+
++struct platform_device *at32_add_device_mmci(unsigned int id);
+ struct platform_device *at32_add_device_spi(unsigned int id);
++struct platform_device *at32_add_device_twi(unsigned int id);
+
+ struct lcdc_platform_data {
+ unsigned long fbmem_start;
+ unsigned long fbmem_size;
+ };
++struct platform_device *__init at32_add_device_usb(unsigned int id);
+ struct platform_device *
+ at32_add_device_lcdc(unsigned int id, struct lcdc_platform_data *data);
++struct platform_device *__init at32_add_device_dac(unsigned int id);
++struct platform_device *__init at32_add_device_at73c213(unsigned int id);
++struct platform_device *__init at32_add_device_ac97c(unsigned int id);
+
+ #endif /* __ASM_ARCH_BOARD_H */
diff --git a/packages/openpbx/files/.mtn2git_empty b/packages/linux/linux-2.6.18/at32stk1000/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/openpbx/files/.mtn2git_empty
+++ b/packages/linux/linux-2.6.18/at32stk1000/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.18/at32stk1000/defconfig b/packages/linux/linux-2.6.18/at32stk1000/defconfig
new file mode 100644
index 0000000000..b4aced9f16
--- /dev/null
+++ b/packages/linux/linux-2.6.18/at32stk1000/defconfig
@@ -0,0 +1,990 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18-at0
+# Thu Jan 11 15:37:42 2007
+#
+CONFIG_AVR32=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=1
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type and features
+#
+CONFIG_SUBARCH_AVR32B=y
+CONFIG_MMU=y
+CONFIG_PERFORMANCE_COUNTERS=y
+CONFIG_PLATFORM_AT32AP=y
+CONFIG_CPU_AT32AP7000=y
+CONFIG_BOARD_ATSTK1002=y
+CONFIG_BOARD_ATSTK1000=y
+# CONFIG_BOARD_ATNGW is not set
+CONFIG_LOADER_U_BOOT=y
+
+#
+# Atmel AVR32 AP options
+#
+CONFIG_PIO_DEV=y
+CONFIG_LOAD_ADDRESS=0x10000000
+CONFIG_ENTRY_ADDRESS=0x90000000
+CONFIG_PHYS_OFFSET=0x10000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_HAVE_ARCH_BOOTMEM_NODE is not set
+# CONFIG_ARCH_HAVE_MEMORY_PRESENT is not set
+# CONFIG_NEED_NODE_MEMMAP_SIZE is not set
+CONFIG_ARCH_FLATMEM_ENABLE=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+# CONFIG_ARCH_SPARSEMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_OWNERSHIP_TRACE is not set
+CONFIG_DW_DMAC=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_CMDLINE=""
+
+#
+# Bus options
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_DATAFLASH=m
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+# CONFIG_PPP_BSDCOMP is not set
+# CONFIG_PPP_MPPE is not set
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_ATMELTWI=m
+CONFIG_I2C_ATMELTWI_BAUDRATE=100000
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+CONFIG_SENSORS_EEPROM=m
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_BITBANG is not set
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+CONFIG_FB_SIDSA=y
+CONFIG_FB_SIDSA_DEFAULT_BPP=24
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_LCD_LTV350QV=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_AC97_BUS=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA AVR32 devices
+#
+CONFIG_SND_ATMEL_AC97=m
+# CONFIG_SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS is not set
+# CONFIG_SND_ATMEL_AC97C_USE_PDC is not set
+CONFIG_SND_AT73C213=m
+# CONFIG_SND_AT73C213_USE_ALSA_MALLOC_CALLS is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=m
+# CONFIG_OSS_OBSOLETE_DRIVER is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+CONFIG_SOUND_AT32_DAC=m
+
+#
+# USB support
+#
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+CONFIG_USB_GADGET_DEBUG_FILES=y
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_HUSB2DEV=y
+CONFIG_USB_HUSB2DEV=m
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_ATMELMCI=y
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+# CONFIG_INOTIFY is not set
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_KPROBES is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
diff --git a/packages/linux/linux-2.6.18/at73c213-alsa-driver.patch b/packages/linux/linux-2.6.18/at73c213-alsa-driver.patch
new file mode 100644
index 0000000000..ceb12cc950
--- /dev/null
+++ b/packages/linux/linux-2.6.18/at73c213-alsa-driver.patch
@@ -0,0 +1,1485 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Hans-Christian Egtvedt <hcegtvedt@atmel.com>
+Date: Fri Apr 28 15:30:44 2006 +0200
+Subject: [PATCH] at73c213 ALSA driver
+
+This driver uses the SSC and SPI modules to communicate with an at73c213
+sound chip on the AT32STK1000.
+
+---
+
+ sound/avr32/Kconfig | 20
+ sound/avr32/Makefile | 3
+ sound/avr32/at73c213.c | 1296 +++++++++++++++++++++++++++++++++++++++++++++++++
+ sound/avr32/at73c213.h | 120 ++++
+ 4 files changed, 1439 insertions(+)
+ create mode 100644 sound/avr32/at73c213.c
+ create mode 100644 sound/avr32/at73c213.h
+
+859730d5cbe00b7935c4e30d179c5c5b096deb3c
+Index: linux-2.6.18-avr32/sound/avr32/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/sound/avr32/Kconfig 2006-11-02 15:56:20.000000000 +0100
++++ linux-2.6.18-avr32/sound/avr32/Kconfig 2006-11-02 15:56:20.000000000 +0100
+@@ -28,4 +28,24 @@ config SND_ATMEL_AC97C_USE_PDC
+ Say Y if PDC (Peripheral DMA Controller) is used for DMA transfers
+ to/from the Atmel AC97C instead of using the generic DMA framework.
+
++config SND_AT73C213
++ tristate "Atmel AT73C213 DAC driver"
++ depends on SND && SPI_ATMEL
++ select SND_PCM
++ help
++ Say Y here if you want to use the Atmel AT73C213 external
++ DAC on the ATSTK1000 development board.
++
++ To compile this driver as a module, choose M here: the
++ module will be called snd-at73c213.
++
++config SND_AT73C213_USE_ALSA_MALLOC_CALLS
++ bool "Use the built-in malloc calls in the alsa driver"
++ default n
++ depends on SND_AT73C213
++ help
++ Say Y if the built-in malloc calls in the alsa driver should be
++ used instead of the native dma_alloc_coherent and dma_free_coherent
++ function calls. Enabling this feature may brake the rmmod feature.
++
+ endmenu
+Index: linux-2.6.18-avr32/sound/avr32/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/sound/avr32/Makefile 2006-11-02 15:56:20.000000000 +0100
++++ linux-2.6.18-avr32/sound/avr32/Makefile 2006-11-02 15:56:20.000000000 +0100
+@@ -4,3 +4,6 @@
+
+ snd-atmel-ac97-objs := ac97c.o
+ obj-$(CONFIG_SND_ATMEL_AC97) += snd-atmel-ac97.o
++
++snd-at73c213-objs := at73c213.o
++obj-$(CONFIG_SND_AT73C213) += snd-at73c213.o
+Index: linux-2.6.18-avr32/sound/avr32/at73c213.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/sound/avr32/at73c213.c 2006-11-02 16:01:55.000000000 +0100
+@@ -0,0 +1,1296 @@
++/*
++ * Driver for the at73c213 16-bit stereo DAC on Atmel ATSTK1000
++ *
++ * Copyright (C) 2006 Atmel Norway
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++ * 02111-1307, USA.
++ *
++ * The full GNU General Public License is included in this
++ * distribution in the file called COPYING.
++ */
++#undef DEBUG
++#include <linux/clk.h>
++#include <linux/delay.h>
++#include <linux/device.h>
++#include <linux/dma-mapping.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/kmod.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <sound/initval.h>
++#include <sound/driver.h>
++#include <sound/control.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#ifndef SND_AT73C213_USE_ALSA_MALLOC_CALLS
++#include <sound/memalloc.h>
++#endif
++
++#include <linux/spi/spi.h>
++
++#include <asm/io.h>
++#include <asm/processor.h>
++
++#include "at73c213.h"
++
++/* module parameters */
++static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
++static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
++static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
++
++/* Register defines */
++#define PIOA_BASE 0xFFE02800
++#define SSC0_BASE 0xFFE01C00
++#define PM_BASE 0xFFF00000
++
++#define PM_CKSEL 0x04
++#define PM_APBAMASK 0x10
++#define PM_GCCTRL 0x60
++
++#define PIO_PER 0x00
++#define PIO_PDR 0x04
++#define PIO_PUER 0x64
++#define PIO_ASR 0x70
++#define PIO_BSR 0x74
++
++#define SSC_CMR 0x04
++#define SSC_CR 0x00
++#define SSC_TCMR 0x18
++#define SSC_TFMR 0x1C
++
++/* SSC register definitions */
++#define SSC_CR 0x00
++#define SSC_CMR 0x04
++#define SSC_TCMR 0x18
++#define SSC_TFMR 0x1C
++#define SSC_THR 0x24
++#define SSC_SR 0x40
++#define SSC_IER 0x44
++#define SSC_IDR 0x48
++#define SSC_IMR 0x4C
++
++/* SSC fields definitions */
++#define SSC_CR_TXEN 0x00000100
++#define SSC_CR_TXDIS 0x00000200
++#define SSC_CR_SWRST 0x00008000
++
++/* SSC interrupt definitions */
++#define SSC0_IRQ 10
++#define SSC_INT_ENDTX 0x00000004
++#define SSC_INT_TXBUFE 0x00000008
++
++/* PDC register definitions */
++#define PDC_RPR 0x100
++#define PDC_RCR 0x104
++#define PDC_TPR 0x108
++#define PDC_TCR 0x10c
++#define PDC_RNPR 0x110
++#define PDC_RNCR 0x114
++#define PDC_TNPR 0x118
++#define PDC_TNCR 0x11c
++#define PDC_PTCR 0x120
++#define PDC_PTSR 0x124
++
++/* PDC fields definitions */
++#define PDC_PTCR_RXTEN 0x0001
++#define PDC_PTCR_RXTDIS 0x0002
++#define PDC_PTCR_TXTEN 0x0100
++#define PDC_PTCR_TXTDIS 0x0200
++
++static int bitrate;
++static int gclk_div;
++static int ssc_div;
++static int spi = 0;
++static int ssc = 1;
++
++module_param(spi, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
++MODULE_PARM_DESC(spi, "Which SPI interface to use to communicate with the at73c213");
++module_param(ssc, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
++MODULE_PARM_DESC(ssc, "Which SSC interface to use to communicate with the at73c213");
++
++/* Initial AT73C213 register values */
++static unsigned char snd_at73c213_original_image[18] =
++{
++ 0x00, /* 00 - CTRL */
++ 0x05, /* 01 - LLIG */
++ 0x05, /* 02 - RLIG */
++ 0x08, /* 03 - LPMG */
++ 0x08, /* 04 - RPMG */
++ 0x00, /* 05 - LLOG */
++ 0x00, /* 06 - RLOG */
++ 0x22, /* 07 - OLC */
++ 0x09, /* 08 - MC */
++ 0x00, /* 09 - CSFC */
++ 0x00, /* 0A - MISC */
++ 0x00, /* 0B - */
++ 0x00, /* 0C - PRECH */
++ 0x05, /* 0D - AUXG */
++ 0x00, /* 0E - */
++ 0x00, /* 0F - */
++ 0x00, /* 10 - RST */
++ 0x00, /* 11 - PA_CTRL */
++};
++
++/* chip-specific data */
++struct snd_at73c213 {
++ snd_card_t *card;
++ snd_pcm_t *pcm;
++ snd_pcm_substream_t *substream;
++ int irq;
++ int period;
++ void __iomem *regs;
++ struct clk *ssc_clk;
++ struct spi_device *spi;
++ u8 spi_wbuffer[2];
++ u8 spi_rbuffer[2];
++ /* image of the SPI registers in AT73C213 */
++ u8 image[18];
++ spinlock_t lock;
++ struct platform_device *pdev;
++};
++
++#define get_chip(card) ((struct snd_at73c213 *)card->private_data)
++
++static int
++snd_at73c213_write_reg(struct snd_at73c213 *chip, u8 reg, u8 val)
++{
++ struct spi_message msg;
++ struct spi_transfer msg_xfer = {
++ .len = 2,
++ .cs_change = 0,
++ };
++
++ spi_message_init(&msg);
++
++ chip->spi_wbuffer[0] = reg;
++ chip->spi_wbuffer[1] = val;
++
++ msg_xfer.tx_buf = chip->spi_wbuffer;
++ msg_xfer.rx_buf = chip->spi_rbuffer;
++ spi_message_add_tail(&msg_xfer, &msg);
++
++ return spi_sync(chip->spi, &msg);
++}
++
++#define write_reg(_spi, reg, val) \
++ do { \
++ retval = snd_at73c213_write_reg(_spi, reg, val); \
++ if (retval) \
++ goto out; \
++ } while (0)
++
++static snd_pcm_hardware_t snd_at73c213_playback_hw = {
++ .info = SNDRV_PCM_INFO_INTERLEAVED |
++ SNDRV_PCM_INFO_BLOCK_TRANSFER,
++ .formats = SNDRV_PCM_FMTBIT_S16_BE,
++ .rates = SNDRV_PCM_RATE_CONTINUOUS,
++ .rate_min = 8000, /* This will be overwritten with bitrate */
++ .rate_max = 50000, /* This will be overwritten with bitrate */
++ .channels_min = 2,
++ .channels_max = 2,
++ .buffer_bytes_max = 64 * 1024 - 1,
++ .period_bytes_min = 512,
++ .period_bytes_max = 64 * 1024 - 1,
++ .periods_min = 4,
++ .periods_max = 1024,
++};
++
++/* calculate and set bitrate and divisions */
++static int snd_at73c213_set_bitrate_and_div(void)
++{
++ extern struct avr32_cpuinfo boot_cpu_data;
++ unsigned long pll0_hz, apba_hz;
++ unsigned long apba_realdiv, gclk_realdiv, ssc_realdiv, wanted_bitrate;
++ char cpusel, ahbsel, apbasel;
++ int regval;
++
++ regval = __raw_readl((void __iomem *)PM_BASE + PM_CKSEL);
++ wanted_bitrate = 48000;
++
++ cpusel = regval & 0x07;
++ ahbsel = (regval>>8) & 0x07;
++ apbasel = (regval>>16) & 0x07;
++
++ /* FIXME: Use the clk framework for this */
++ if ((regval&(1<<7)) != 0) {
++ pll0_hz = clk_get_rate(boot_cpu_data.clk)/(1<<(cpusel+1));
++ } else {
++ pll0_hz = clk_get_rate(boot_cpu_data.clk);
++ }
++
++ if ((regval&(1<<23)) != 0) {
++ apba_hz = pll0_hz/(1<<(apbasel+1));
++ apba_realdiv = (1<<(apbasel+1));
++ } else {
++ apba_hz = pll0_hz;
++ apba_realdiv = 1;
++ }
++
++calculate:
++ /* Adjust bitrate as close as possible to 48000 Hz */
++ gclk_realdiv = pll0_hz/(wanted_bitrate*256);
++ ssc_realdiv = 2 * apba_realdiv * gclk_realdiv;
++
++ if ((gclk_realdiv % 2) == 0)
++ goto setbitrates;
++
++ if(wanted_bitrate >= 22050 && wanted_bitrate <= 48000)
++ wanted_bitrate -= 50;
++ else if (wanted_bitrate < 22050)
++ wanted_bitrate = 48050;
++ else if (wanted_bitrate <= 50000)
++ wanted_bitrate += 50;
++ else {
++ printk(KERN_ERR "at73c213 could not set dividers for a valid bitrate\n");
++ return -EINVAL;
++ }
++
++ goto calculate;
++
++setbitrates:
++ bitrate = pll0_hz/(gclk_realdiv*256);
++ gclk_div = (gclk_realdiv/2)-1;
++ ssc_realdiv = 2*apba_realdiv*gclk_realdiv;
++ ssc_div = ssc_realdiv/(2*apba_realdiv);
++
++ printk(KERN_INFO "at73c213: bitrate is %d Hz\n", bitrate);
++
++ return 0;
++}
++
++/* open callback */
++static int snd_at73c213_pcm_open(snd_pcm_substream_t *substream)
++{
++ struct snd_at73c213 *chip = snd_pcm_substream_chip(substream);
++ snd_pcm_runtime_t *runtime = substream->runtime;
++
++ snd_at73c213_playback_hw.rate_min = bitrate;
++ snd_at73c213_playback_hw.rate_max = bitrate;
++ runtime->hw = snd_at73c213_playback_hw;
++ chip->substream = substream;
++
++ return 0;
++}
++
++/* close callback */
++static int snd_at73c213_pcm_close(snd_pcm_substream_t *substream)
++{
++ struct snd_at73c213 *chip = snd_pcm_substream_chip(substream);
++ chip->substream = NULL;
++ return 0;
++}
++
++/* hw_params callback */
++static int snd_at73c213_pcm_hw_params(snd_pcm_substream_t *substream,
++ snd_pcm_hw_params_t *hw_params)
++{
++#ifdef SND_AT73C213_USE_ALSA_MALLOC_CALLS
++ return snd_pcm_lib_malloc_pages(substream,
++ params_buffer_bytes(hw_params));
++#else
++ int pg;
++ size_t size = params_buffer_bytes(hw_params);
++ struct snd_pcm_runtime *runtime;
++ struct snd_dma_buffer *dmab = NULL;
++
++ substream->dma_buffer.dev.type = SNDRV_DMA_TYPE_DEV;
++ snd_assert(substream != NULL, return -EINVAL);
++ runtime = substream->runtime;
++ snd_assert(runtime != NULL, return -EINVAL);
++
++ /* check if buffer is already allocated */
++ if (runtime->dma_buffer_p) {
++ size_t size_previouse;
++ int pg_previouse;
++
++ /* new buffer is smaler than previouse allocated buffer */
++ if (runtime->dma_buffer_p->bytes >= size) {
++ runtime->dma_bytes = size;
++ return 0; /* don't change buffer size */
++ }
++
++ size_previouse = runtime->dma_buffer_p->bytes;
++ pg_previouse = get_order(size_previouse);
++
++ dma_free_coherent(runtime->dma_buffer_p->dev.dev,
++ PAGE_SIZE << pg_previouse,
++ runtime->dma_buffer_p->area,
++ runtime->dma_buffer_p->addr);
++
++ kfree(runtime->dma_buffer_p);
++ }
++
++ dmab = kzalloc(sizeof(*dmab), GFP_KERNEL);
++ if (!dmab)
++ return -ENOMEM;
++
++ dmab->dev = substream->dma_buffer.dev;
++ dmab->bytes = 0;
++
++ pg = get_order(size);
++
++ dmab->area = dma_alloc_coherent(
++ substream->dma_buffer.dev.dev,
++ PAGE_SIZE << pg,
++ (dma_addr_t *)&dmab->addr,
++ GFP_KERNEL);
++
++ if (!dmab->area) {
++ kfree(dmab);
++ return -ENOMEM;
++ }
++
++ dmab->bytes = size;
++ snd_pcm_set_runtime_buffer(substream, dmab);
++ runtime->dma_bytes = size;
++ return 1;
++#endif
++}
++
++/* hw_free callback */
++static int snd_at73c213_pcm_hw_free(snd_pcm_substream_t *substream)
++{
++#ifdef SND_AT73C213_USE_ALSA_MALLOC_CALLS
++ return snd_pcm_lib_free_pages(substream);
++#else
++ int pg;
++ struct snd_pcm_runtime *runtime;
++ struct snd_dma_buffer *dmab = NULL;
++
++ snd_assert(substream != NULL, return -EINVAL);
++ runtime = substream->runtime;
++ snd_assert(runtime != NULL, return -EINVAL);
++ dmab = runtime->dma_buffer_p;
++
++ if (!dmab)
++ return 0;
++
++ if (!dmab->area)
++ return 0;
++
++ pg = get_order(dmab->bytes);
++ dma_free_coherent(dmab->dev.dev, PAGE_SIZE << pg, dmab->area, dmab->addr);
++ kfree(runtime->dma_buffer_p);
++ snd_pcm_set_runtime_buffer(substream, NULL);
++ return 0;
++#endif
++}
++
++/* prepare callback */
++static int snd_at73c213_pcm_prepare(snd_pcm_substream_t *substream)
++{
++ struct snd_at73c213 *chip = snd_pcm_substream_chip(substream);
++ struct platform_device *pdev = chip->pdev;
++ snd_pcm_runtime_t *runtime = substream->runtime;
++ int block_size;
++
++ block_size = frames_to_bytes(runtime, runtime->period_size);
++
++ chip->period = 0;
++
++ /* Make sure that our data are actually readable by the SSC */
++ dma_sync_single_for_device(&pdev->dev, runtime->dma_addr,
++ block_size, DMA_TO_DEVICE);
++ dma_sync_single_for_device(&pdev->dev, runtime->dma_addr + block_size,
++ block_size, DMA_TO_DEVICE);
++
++ __raw_writel(runtime->dma_addr, chip->regs + PDC_TPR);
++ __raw_writel(runtime->period_size * 2, chip->regs + PDC_TCR);
++ __raw_writel(runtime->dma_addr + block_size, chip->regs + PDC_TNPR);
++ __raw_writel(runtime->period_size * 2, chip->regs + PDC_TNCR);
++
++ return 0;
++}
++
++/* trigger callback */
++static int snd_at73c213_pcm_trigger(snd_pcm_substream_t *substream,
++ int cmd)
++{
++ struct snd_at73c213 *chip = snd_pcm_substream_chip(substream);
++ int retval = 0;
++ int flags = 0;
++
++ spin_lock_irqsave(&chip->lock, flags);
++
++ switch (cmd) {
++ case SNDRV_PCM_TRIGGER_START:
++ __raw_writel(SSC_INT_ENDTX, chip->regs + SSC_IER);
++ __raw_writel(PDC_PTCR_TXTEN, chip->regs + PDC_PTCR);
++ break;
++ case SNDRV_PCM_TRIGGER_STOP:
++ __raw_writel(PDC_PTCR_TXTDIS, chip->regs + PDC_PTCR);
++ __raw_writel(SSC_INT_ENDTX, chip->regs + SSC_IDR);
++ break;
++ default:
++ printk(KERN_WARNING "at73c213: spuriouse command %x\n", cmd);
++ retval = -EINVAL;
++ break;
++ }
++
++ spin_unlock_irqrestore(&chip->lock, flags);
++
++ return retval;
++}
++
++/* pointer callback */
++static snd_pcm_uframes_t snd_at73c213_pcm_pointer(snd_pcm_substream_t *substream)
++{
++ struct snd_at73c213 *chip = snd_pcm_substream_chip(substream);
++ snd_pcm_runtime_t *runtime = substream->runtime;
++ snd_pcm_uframes_t pos;
++ unsigned long bytes;
++
++ bytes = __raw_readl(chip->regs + PDC_TPR) - runtime->dma_addr;
++
++ pos = bytes_to_frames(runtime, bytes);
++ if (pos >= runtime->buffer_size)
++ pos -= runtime->buffer_size;
++
++ return pos;
++}
++
++/* operators */
++static snd_pcm_ops_t at73c213_playback_ops = {
++ .open = snd_at73c213_pcm_open,
++ .close = snd_at73c213_pcm_close,
++ .ioctl = snd_pcm_lib_ioctl,
++ .hw_params = snd_at73c213_pcm_hw_params,
++ .hw_free = snd_at73c213_pcm_hw_free,
++ .prepare = snd_at73c213_pcm_prepare,
++ .trigger = snd_at73c213_pcm_trigger,
++ .pointer = snd_at73c213_pcm_pointer,
++};
++
++/* free a pcm device */
++static void snd_at73c213_pcm_free(snd_pcm_t *pcm)
++{
++ struct snd_at73c213 *chip = snd_pcm_chip(pcm);
++ if (chip->pcm != 0 ) {
++#ifdef SND_AT73C213_USE_ALSA_MALLOC_CALLS
++ snd_pcm_lib_preallocate_free_for_all(chip->pcm);
++#endif
++ chip->pcm = NULL;
++ }
++}
++
++/* create a new pcm device */
++static int __devinit snd_at73c213_new_pcm(struct snd_at73c213 *chip, int device)
++{
++ snd_pcm_t *pcm;
++ int retval;
++
++ retval = snd_pcm_new(chip->card, chip->card->shortname, device, 1, 0, &pcm);
++ if (retval < 0)
++ return retval;
++
++ pcm->private_data = chip;
++ pcm->private_free = snd_at73c213_pcm_free;
++ pcm->info_flags = SNDRV_PCM_INFO_BLOCK_TRANSFER;
++ strcpy(pcm->name, "at73c213");
++ chip->pcm = pcm;
++
++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &at73c213_playback_ops);
++
++#ifdef SND_AT73C213_USE_ALSA_MALLOC_CALLS
++ snd_pcm_lib_preallocate_pages_for_all(chip->pcm, SNDRV_DMA_TYPE_DEV,
++ &chip->pdev->dev, 64 * 1024, 64 * 1024);
++#endif
++
++ return 0;
++}
++
++static irqreturn_t snd_at73c213_interrupt(int irq, void *dev_id,
++ struct pt_regs *regs)
++{
++ struct snd_at73c213 *chip = dev_id;
++ struct platform_device *pdev = chip->pdev;
++ snd_pcm_runtime_t *runtime = chip->substream->runtime;
++ u32 status;
++ int offset, next_period, block_size;
++
++ spin_lock(&chip->lock);
++
++ block_size = frames_to_bytes(runtime, runtime->period_size);
++
++ status = __raw_readl(chip->regs + SSC_IMR);
++
++ if (status & SSC_INT_ENDTX) {
++ chip->period++;
++ if (chip->period == runtime->periods)
++ chip->period = 0;
++ next_period = chip->period + 1;
++ if (next_period == runtime->periods)
++ next_period = 0;
++
++ offset = block_size * next_period;
++
++ /* Make sure that our data are actually readable by the SSC */
++ dma_sync_single_for_device(&pdev->dev, runtime->dma_addr + offset,
++ block_size, DMA_TO_DEVICE);
++ __raw_writel(runtime->dma_addr + offset, chip->regs + PDC_TNPR);
++ __raw_writel(runtime->period_size * 2, chip->regs + PDC_TNCR);
++
++ if (next_period == 0) {
++ (void)__raw_readl(chip->regs + PDC_TPR);
++ (void)__raw_readl(chip->regs + PDC_TCR);
++ }
++ } else {
++ printk(KERN_WARNING
++ "Spurious SSC interrupt, status = 0x%08lx\n",
++ (unsigned long)status);
++ __raw_writel(status, chip->regs + SSC_IDR);
++ }
++
++ (void)__raw_readl(chip->regs + SSC_IMR);
++ spin_unlock(&chip->lock);
++
++ if (status & SSC_INT_ENDTX)
++ snd_pcm_period_elapsed(chip->substream);
++
++ return IRQ_HANDLED;
++}
++
++/*
++ * Mixer functions
++ */
++#if 0 /* Function not in use */
++static int snd_at73c213_mono_info(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_info *uinfo)
++{
++ unsigned long mask = (kcontrol->private_value >> 16) & 0xff;
++
++ uinfo->type = (mask == 1) ?
++ SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER;
++ uinfo->count = 1;
++ uinfo->value.integer.min = 0;
++ uinfo->value.integer.max = mask;
++
++ return 0;
++}
++#endif
++
++static int snd_at73c213_mono_get(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol);
++ unsigned long flags;
++ int reg = kcontrol->private_value & 0xff;
++ int shift = (kcontrol->private_value >> 8) & 0xff;
++ int mask = (kcontrol->private_value >> 16) & 0xff;
++ int invert = (kcontrol->private_value >> 24) & 0xff;
++
++ spin_lock_irqsave(&chip->lock, flags);
++
++ ucontrol->value.integer.value[0] = (chip->image[reg] >> shift) & mask;
++
++ if (invert)
++ ucontrol->value.integer.value[0] =
++ (mask - ucontrol->value.integer.value[0]);
++
++ spin_unlock_irqrestore(&chip->lock, flags);
++
++ return 0;
++}
++
++static int snd_at73c213_mono_put(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol);
++ unsigned long flags;
++ int reg = kcontrol->private_value & 0xff;
++ int shift = (kcontrol->private_value >> 8) & 0xff;
++ int mask = (kcontrol->private_value >> 16) & 0xff;
++ int invert = (kcontrol->private_value >> 24) & 0xff;
++ int change, retval;
++ unsigned short val;
++
++ val = (ucontrol->value.integer.value[0] & mask);
++ if (invert)
++ val = mask - val;
++ val <<= shift;
++
++ spin_lock_irqsave(&chip->lock, flags);
++
++ val = (chip->image[reg] & ~(mask << shift)) | val;
++ change = val != chip->image[reg];
++ write_reg(chip, reg, val);
++
++ chip->image[reg] = val;
++
++ spin_unlock_irqrestore(&chip->lock, flags);
++
++ return change;
++
++out:
++ return retval;
++}
++
++static int snd_at73c213_stereo_info(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_info *uinfo)
++{
++ int mask = (kcontrol->private_value >> 24) & 0xFF;
++
++ uinfo->type = mask == 1 ?
++ SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER;
++ uinfo->count = 2;
++ uinfo->value.integer.min = 0;
++ uinfo->value.integer.max = mask;
++
++ return 0;
++}
++
++static int snd_at73c213_stereo_get(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol);
++ unsigned long flags;
++ int left_reg = kcontrol->private_value & 0xff;
++ int right_reg = (kcontrol->private_value >> 8) & 0xff;
++ int shift_left = (kcontrol->private_value >> 16) & 0x07;
++ int shift_right = (kcontrol->private_value >> 19) & 0x07;
++ int mask = (kcontrol->private_value >> 24) & 0xff;
++ int invert = (kcontrol->private_value >> 22) & 1;
++
++ spin_lock_irqsave(&chip->lock, flags);
++
++ ucontrol->value.integer.value[0] =
++ (chip->image[left_reg] >> shift_left) & mask;
++ ucontrol->value.integer.value[1] =
++ (chip->image[right_reg] >> shift_right) & mask;
++
++ if (invert) {
++ ucontrol->value.integer.value[0] =
++ (mask - ucontrol->value.integer.value[0]);
++ ucontrol->value.integer.value[1] =
++ (mask - ucontrol->value.integer.value[1]);
++ }
++
++ spin_unlock_irqrestore(&chip->lock, flags);
++
++ return 0;
++}
++
++static int snd_at73c213_stereo_put(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol);
++ unsigned long flags;
++ int left_reg = kcontrol->private_value & 0xff;
++ int right_reg = (kcontrol->private_value >> 8) & 0xff;
++ int shift_left = (kcontrol->private_value >> 16) & 0x07;
++ int shift_right = (kcontrol->private_value >> 19) & 0x07;
++ int mask = (kcontrol->private_value >> 24) & 0xff;
++ int invert = (kcontrol->private_value >> 22) & 1;
++ int change, retval;
++ unsigned short val1, val2;
++
++ val1 = ucontrol->value.integer.value[0] & mask;
++ val2 = ucontrol->value.integer.value[1] & mask;
++ if (invert) {
++ val1 = mask - val1;
++ val2 = mask - val2;
++ }
++ val1 <<= shift_left;
++ val2 <<= shift_right;
++
++ spin_lock_irqsave(&chip->lock, flags);
++
++ val1 = (chip->image[left_reg] & ~(mask << shift_left)) | val1;
++ val2 = (chip->image[right_reg] & ~(mask << shift_right)) | val2;
++ change = val1 != chip->image[left_reg] || val2 != chip->image[right_reg];
++ write_reg(chip, left_reg, val1);
++ write_reg(chip, right_reg, val2);
++
++ chip->image[left_reg] = val1;
++ chip->image[right_reg] = val2;
++
++ spin_unlock_irqrestore(&chip->lock, flags);
++
++ return change;
++
++out:
++ return retval;
++}
++
++static int snd_at73c213_mono_switch_info(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_info *uinfo)
++{
++ uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
++ uinfo->count = 1;
++ uinfo->value.integer.min = 0;
++ uinfo->value.integer.max = 1;
++
++ return 0;
++}
++
++static int snd_at73c213_mono_switch_get(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol);
++ unsigned long flags;
++ int reg = kcontrol->private_value & 0xff;
++ int shift = (kcontrol->private_value >> 8) & 0xff;
++ int invert = (kcontrol->private_value >> 24) & 0xff;
++
++ spin_lock_irqsave(&chip->lock, flags);
++
++ ucontrol->value.integer.value[0] = (chip->image[reg] >> shift) & 0x01;
++
++ if (invert)
++ ucontrol->value.integer.value[0] =
++ (0x01 - ucontrol->value.integer.value[0]);
++
++ spin_unlock_irqrestore(&chip->lock, flags);
++
++ return 0;
++}
++
++static int snd_at73c213_mono_switch_put(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_at73c213 *chip = snd_kcontrol_chip(kcontrol);
++ unsigned long flags;
++ int reg = kcontrol->private_value & 0xff;
++ int shift = (kcontrol->private_value >> 8) & 0xff;
++ int mask = (kcontrol->private_value >> 16) & 0xff;
++ int invert = (kcontrol->private_value >> 24) & 0xff;
++ int change, retval;
++ unsigned short val;
++
++ if (ucontrol->value.integer.value[0])
++ val = mask;
++ else
++ val = 0;
++
++ if (invert)
++ val = mask - val;
++ val <<= shift;
++
++ spin_lock_irqsave(&chip->lock, flags);
++
++ val |= (chip->image[reg] & ~(mask << shift));
++ change = val != chip->image[reg];
++
++ write_reg(chip, reg, val);
++
++ chip->image[reg] = val;
++
++ spin_unlock_irqrestore(&chip->lock, flags);
++
++ return change;
++
++out:
++ return retval;
++}
++
++static int snd_at73c213_pa_volume_info(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_info *uinfo)
++{
++ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
++ uinfo->count = 1;
++ uinfo->value.integer.min = 0;
++ uinfo->value.integer.max = ((kcontrol->private_value >> 16) & 0xFF) - 1;
++
++ return 0;
++}
++
++static int snd_at73c213_line_capture_volume_info(
++ struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_info *uinfo)
++{
++ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
++ uinfo->count = 2;
++ uinfo->value.integer.min = 14;
++ uinfo->value.integer.max = 31;
++
++ return 0;
++}
++
++static int snd_at73c213_aux_capture_volume_info(
++ struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_info *uinfo)
++{
++ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
++ uinfo->count = 1;
++ uinfo->value.integer.min = 14;
++ uinfo->value.integer.max = 31;
++
++ return 0;
++}
++
++#define AT73C213_MONO(xname, xindex, reg, shift, mask, invert) \
++{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
++ .info = snd_at73c213_mono_info, \
++ .get = snd_at73c213_mono_get, .put = snd_at73c213_mono_put, \
++ .private_value = reg | (shift << 8) | (mask << 16) | (invert << 24) }
++
++#define AT73C213_MONO_SWITCH(xname, xindex, reg, shift, mask, invert) \
++{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
++ .info = snd_at73c213_mono_switch_info, \
++ .get = snd_at73c213_mono_switch_get, .put = snd_at73c213_mono_switch_put, \
++ .private_value = reg | (shift << 8) | (mask << 16) | (invert << 24) }
++
++#define AT73C213_STEREO(xname, xindex, left_reg, right_reg, shift_left, shift_right, mask, invert) \
++{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xindex, \
++ .info = snd_at73c213_stereo_info, \
++ .get = snd_at73c213_stereo_get, .put = snd_at73c213_stereo_put, \
++ .private_value = left_reg | (right_reg << 8) | (shift_left << 16) | (shift_right << 19) | (mask << 24) | (invert << 22) }
++
++static struct snd_kcontrol_new snd_at73c213_controls[] __devinitdata = {
++AT73C213_STEREO("Master Playback Volume", 0, DAC_LMPG, DAC_RMPG, 0, 0, 0x1F, 1),
++AT73C213_STEREO("Master Playback Switch", 0, DAC_LMPG, DAC_RMPG, 5, 5, 1, 1),
++AT73C213_STEREO("PCM Playback Volume", 0, DAC_LLOG, DAC_RLOG, 0, 0, 0x1F, 1),
++AT73C213_STEREO("PCM Playback Switch", 0, DAC_LLOG, DAC_RLOG, 5, 5, 1, 1),
++AT73C213_MONO_SWITCH("Mono PA Playback Switch", 0, DAC_CTRL, DAC_CTRL_ONPADRV, 0x01, 0),
++{
++ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
++ .name = "PA Playback Volume",
++ .index = 0,
++ .info = snd_at73c213_pa_volume_info,
++ .get = snd_at73c213_mono_get,
++ .put = snd_at73c213_mono_put,
++ .private_value = PA_CTRL|(PA_CTRL_APAGAIN<<8)|(0x0F<<16)|(1<<24),
++},
++AT73C213_MONO_SWITCH("PA High Gain Playback Switch", 0, PA_CTRL, PA_CTRL_APALP, 0x01, 1),
++AT73C213_MONO_SWITCH("PA Playback Switch", 0, PA_CTRL, PA_CTRL_APAON, 0x01, 0),
++{
++ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
++ .name = "Aux Capture Volume",
++ .index = 0,
++ .info = snd_at73c213_aux_capture_volume_info,
++ .get = snd_at73c213_mono_get,
++ .put = snd_at73c213_mono_put,
++ .private_value = DAC_AUXG|(0<<8)|(0x1F<<16)|(1<<24),
++},
++AT73C213_MONO_SWITCH("Aux Capture Switch", 0, DAC_CTRL, DAC_CTRL_ONAUXIN, 0x01, 0),
++{
++ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
++ .name = "Line Capture Volume",
++ .index = 0,
++ .info = snd_at73c213_line_capture_volume_info,
++ .get = snd_at73c213_stereo_get,
++ .put = snd_at73c213_stereo_put,
++ .private_value = DAC_LLIG|(DAC_RLIG<<8)|(0<<16)|(0<<19)|(0x1F<<24)|(1<<22),
++},
++AT73C213_MONO_SWITCH("Line Capture Switch", 0, DAC_CTRL, 0, 0x03, 0),
++};
++
++static int __devinit snd_at73c213_mixer(struct snd_at73c213 *chip)
++{
++ struct snd_card *card;
++ int errval, idx;
++
++ if (chip == NULL || chip->pcm == NULL)
++ return -EINVAL;
++
++ card = chip->card;
++
++ strcpy(card->mixername, chip->pcm->name);
++
++ for (idx = 0; idx < ARRAY_SIZE(snd_at73c213_controls); idx++) {
++ if ((errval = snd_ctl_add(card,
++ snd_ctl_new1(&snd_at73c213_controls[idx],
++ chip))) < 0)
++ return errval;
++ }
++
++ return 0;
++}
++
++/*
++ * Device functions
++ */
++static int snd_at73c213_chip_init(struct snd_at73c213 *chip)
++{
++ int retval;
++ unsigned char dac_ctrl = 0;
++
++ /* XXX: Unmask the APB clock for SSC0 */
++ __raw_writel(__raw_readl((void __iomem *)PM_BASE + PM_APBAMASK)|(1<<7),
++ (void __iomem *)PM_BASE + PM_APBAMASK);
++
++ /* Wait for clock to be stable */
++ msleep(10);
++
++ retval = snd_at73c213_set_bitrate_and_div();
++ if (retval)
++ goto out;
++
++ /* Reset the SSC */
++ __raw_writel(SSC_CR_SWRST, chip->regs + SSC_CR);
++
++ /* Enable GCLK0 */
++ __raw_writel((1<<30), (void __iomem *)(PIOA_BASE + PIO_PDR));
++ __raw_writel((1<<30), (void __iomem *)(PIOA_BASE + PIO_ASR));
++ __raw_writel(((gclk_div<<8)|0x10|0x04|0x02), (void __iomem *)(PM_BASE + PM_GCCTRL));
++
++ /* Enable SSC and setup for I2S */
++ __raw_writel(ssc_div, chip->regs + SSC_CMR);
++
++ /* CKO, START, STTDLY, PERIOD */
++ __raw_writel((1<<2)|(4<<8)|(1<<16)|(15<<24), chip->regs + SSC_TCMR);
++
++ /* DATLEN, MSBF, DATNB, FSLEN, FSOS */
++ __raw_writel((15<<0)|(1<<7)|(1<<8)|(15<<16)|(1<<20), chip->regs + SSC_TFMR);
++
++ /* Initialize at73c213 on SPI bus */
++ /* Reset the device */
++ write_reg(chip, DAC_RST, 0x04);
++ msleep(1);
++ write_reg(chip, DAC_RST, 0x03);
++
++ /* Turn on precharge */
++ write_reg(chip, DAC_PRECH, 0xFF);
++ write_reg(chip, PA_CTRL, (1<<PA_CTRL_APAPRECH));
++ write_reg(chip, DAC_CTRL, (1<<DAC_CTRL_ONLNOL)|(1<<DAC_CTRL_ONLNOR));
++
++ msleep(50);
++
++ /* Stop precharging PA */
++ write_reg(chip, PA_CTRL, (1<<PA_CTRL_APALP)|0x0F);
++ chip->image[PA_CTRL] = (1<<PA_CTRL_APALP)|0x0F;
++
++ msleep(450);
++
++ /* Stop precharging, turn on master power */
++ write_reg(chip, DAC_PRECH, (1<<DAC_PRECH_ONMSTR));
++ chip->image[DAC_PRECH] = (1<<DAC_PRECH_ONMSTR);
++
++ msleep(1);
++
++ /* Turn on DAC */
++ dac_ctrl = (1<<DAC_CTRL_ONDACL)|(1<<DAC_CTRL_ONDACR)|
++ (1<<DAC_CTRL_ONLNOL)|(1<<DAC_CTRL_ONLNOR);
++
++ write_reg(chip, DAC_CTRL, dac_ctrl);
++ chip->image[DAC_CTRL] = dac_ctrl;
++
++ /* Mute sound */
++ write_reg(chip, DAC_LMPG, 0x3F);
++ chip->image[DAC_LMPG] = 0x3F;
++ write_reg(chip, DAC_RMPG, 0x3F);
++ chip->image[DAC_RMPG] = 0x3F;
++ write_reg(chip, DAC_LLOG, 0x3F);
++ chip->image[DAC_LLOG] = 0x3F;
++ write_reg(chip, DAC_RLOG, 0x3F);
++ chip->image[DAC_RLOG] = 0x3F;
++ write_reg(chip, DAC_LLIG, 0x11);
++ chip->image[DAC_LLIG] = 0x11;
++ write_reg(chip, DAC_RLIG, 0x11);
++ chip->image[DAC_RLIG] = 0x11;
++ write_reg(chip, DAC_AUXG, 0x11);
++ chip->image[DAC_AUXG] = 0x11;
++
++ /* Turn on SSC transmitter */
++ __raw_writel(SSC_CR_TXEN, chip->regs + SSC_CR);
++
++out:
++ return retval;
++}
++
++static int snd_at73c213_dev_free(snd_device_t *device)
++{
++ struct snd_at73c213 *chip = device->device_data;
++
++ if (chip->regs) {
++ __raw_writel(SSC_CR_TXDIS, chip->regs + SSC_CR);
++ iounmap(chip->regs);
++ }
++
++ if (chip->irq >= 0)
++ free_irq(chip->irq, chip);
++
++ if (chip->ssc_clk) {
++ clk_disable(chip->ssc_clk);
++ clk_put(chip->ssc_clk);
++ }
++
++ return 0;
++}
++
++static int __devinit snd_at73c213_create(snd_card_t *card,
++ struct platform_device *pdev)
++{
++ static snd_device_ops_t ops = {
++ .dev_free = snd_at73c213_dev_free,
++ };
++ struct snd_at73c213 *chip = get_chip(card);
++ struct resource *regs;
++ struct clk *ssc_clk;
++ int irq, retval;
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!regs)
++ return -ENXIO;
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0)
++ return irq;
++
++ ssc_clk = clk_get(&pdev->dev, "mck");
++ if (IS_ERR(ssc_clk))
++ return PTR_ERR(ssc_clk);
++ clk_enable(ssc_clk);
++ chip->ssc_clk = ssc_clk;
++
++ spin_lock_init(&chip->lock);
++ chip->card = card;
++ chip->pdev = pdev;
++ chip->irq = -1;
++
++ retval = -ENOMEM;
++
++ retval = spi_setup(chip->spi);
++ if (retval)
++ goto out;
++
++ chip->regs = ioremap(regs->start, regs->end - regs->start + 1);
++ if (!chip->regs)
++ goto out;
++
++ retval = request_irq(irq, snd_at73c213_interrupt, 0, "at73c213", chip);
++ if (retval) {
++ snd_printk("unable to request IRQ%d\n", irq);
++ goto out;
++ }
++ chip->irq = irq;
++
++ memcpy(&chip->image, &snd_at73c213_original_image,
++ sizeof(snd_at73c213_original_image));
++
++ retval = snd_at73c213_chip_init(chip);
++ if (retval)
++ goto out;
++
++ retval = snd_at73c213_new_pcm(chip, 0);
++ if (retval)
++ goto out;
++
++ retval = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
++ if (retval)
++ goto out;
++
++ retval = snd_at73c213_mixer(chip);
++ if (retval)
++ goto out;
++
++ snd_card_set_dev(card, &pdev->dev);
++
++out:
++ return retval;
++}
++
++static int __devinit snd_at73c213_probe(struct platform_device *pdev)
++{
++ static int dev;
++ struct spi_board_info *binfo;
++ struct spi_master *smaster;
++ struct snd_at73c213 *chip;
++ snd_card_t *card;
++ int retval;
++
++ if (dev >= SNDRV_CARDS)
++ return -ENODEV;
++ if (!enable[dev]) {
++ dev++;
++ return -ENOENT;
++ }
++
++ if (spi < 0 || ssc < 0)
++ return -ENODEV;
++
++ retval = -ENOMEM;
++ card = snd_card_new(index[dev], id[dev], THIS_MODULE,
++ sizeof(struct snd_at73c213));
++ if (!card)
++ goto out;
++
++ chip = card->private_data;
++
++ retval = -ENODEV;
++
++ /* Get the SPI bus */
++ binfo = pdev->dev.platform_data;
++ if (!binfo) {
++ printk(KERN_WARNING "at73c213: could not get platform data\n");
++ goto out;
++ }
++
++ smaster = spi_busnum_to_master(spi);
++ if (!smaster) {
++ request_module("spi1");
++ smaster = spi_busnum_to_master(spi);
++ if (!smaster) {
++ printk(KERN_WARNING
++ "at73c213: could not get "
++ "SPI bus %d, remembered to load "
++ "the spi_atmel module?\n", spi);
++ goto out;
++ }
++ }
++
++ chip->spi = spi_new_device(smaster, binfo);
++ if (!chip->spi) {
++ printk(KERN_WARNING "at73c213: could not get SPI device %d\n", spi);
++ goto out;
++ }
++
++ chip->spi->mode = SPI_MODE_1;
++ chip->spi->bits_per_word = 8;
++
++ retval = snd_at73c213_create(card, pdev);
++ if (retval)
++ goto out_free_card;
++
++ strcpy(card->driver, "at73c213");
++ strcpy(card->shortname, "at73c213 (AVR32 STK1000)");
++ sprintf(card->longname, "%s at %p (irq %i)", card->shortname, chip->regs, chip->irq);
++
++ retval = snd_card_register(card);
++ if (retval)
++ goto out_free_card;
++
++ platform_set_drvdata(pdev, card);
++ dev++;
++ return 0;
++
++out_free_card:
++ snd_card_free(card);
++out:
++ return retval;
++}
++
++static int __devexit snd_at73c213_remove(struct platform_device *pdev)
++{
++ struct snd_card *card = platform_get_drvdata(pdev);
++ struct snd_at73c213 *chip = card->private_data;
++ int retval;
++
++ /* Stop playback */
++ __raw_writel(SSC_CR_TXDIS, chip->regs + SSC_CR);
++
++ /* Stop GLCK0 */
++ __raw_writel(0, (void __iomem *)PM_BASE + PM_GCCTRL);
++
++ /* Mute sound */
++ write_reg(chip, DAC_LMPG, 0x3F);
++ chip->image[DAC_LMPG] = 0x3F;
++ write_reg(chip, DAC_RMPG, 0x3F);
++ chip->image[DAC_RMPG] = 0x3F;
++ write_reg(chip, DAC_LLOG, 0x3F);
++ chip->image[DAC_LLOG] = 0x3F;
++ write_reg(chip, DAC_RLOG, 0x3F);
++ chip->image[DAC_RLOG] = 0x3F;
++ write_reg(chip, DAC_LLIG, 0x11);
++ chip->image[DAC_LLIG] = 0x11;
++ write_reg(chip, DAC_RLIG, 0x11);
++ chip->image[DAC_RLIG] = 0x11;
++ write_reg(chip, DAC_AUXG, 0x11);
++ chip->image[DAC_AUXG] = 0x11;
++
++ /* Turn off PA */
++ write_reg(chip, PA_CTRL, (chip->image[PA_CTRL]|0x0F));
++ chip->image[PA_CTRL] |= 0x0F;
++ msleep(10);
++ write_reg(chip, PA_CTRL, (1<<PA_CTRL_APALP)|0x0F);
++ chip->image[PA_CTRL] = (1<<PA_CTRL_APALP)|0x0F;
++
++ /* Turn off external DAC */
++ write_reg(chip, DAC_CTRL, 0x0C);
++ chip->image[DAC_CTRL] = 0x0C;
++ msleep(2);
++ write_reg(chip, DAC_CTRL, 0x00);
++ chip->image[DAC_CTRL] = 0x00;
++
++ /* Turn off master power */
++ write_reg(chip, DAC_PRECH, 0x00);
++ chip->image[DAC_PRECH] = 0x00;
++
++ msleep(10);
++
++out:
++ if (chip->spi)
++ spi_unregister_device(chip->spi);
++
++ if (card) {
++ snd_card_free(card);
++ platform_set_drvdata(pdev, NULL);
++ }
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int snd_at73c213_suspend(struct platform_device *pdev, pm_message_t state, u32 level)
++{
++ struct snd_card *card = at32_get_drvdata(pdev);
++ struct snd_at73c213 *chip = card->private_data;
++
++ printk(KERN_DEBUG "at73c213: suspending\n");
++
++ /* Stop SSC and GCLK0 */
++
++ spi_suspend(chip->spi, state);
++
++ return 0;
++}
++
++static int snd_at73c213_resume(struct platform_device *pdev, u32 level)
++{
++ struct snd_card *card = at32_get_drvdata(pdev);
++ struct snd_at73c213 *chip = card->private_data;
++
++ printk(KERN_DEBUG "at73c213: resuming\n");
++
++ /* Start GLCK0 and SSC */
++
++ spi_resume(chip->spi);
++
++ return 0;
++}
++#endif /* CONFIG_PM */
++
++/* Driver core initialization */
++static struct platform_driver at73c213_driver = {
++ .probe = snd_at73c213_probe,
++ .remove = __devexit_p(snd_at73c213_remove),
++ .driver = {
++ .name = "at73c213",
++ }
++#ifdef CONFIG_PM
++ .resume = snd_at73c213_resume,
++ .suspend = snd_at73c213_suspend,
++#endif
++};
++
++static int __init at73c213_init(void)
++{
++ return platform_driver_register(&at73c213_driver);
++}
++
++static void __exit at73c213_exit(void)
++{
++ platform_driver_unregister(&at73c213_driver);
++}
++
++MODULE_AUTHOR("Hans-Christian Egtvedt <hcegtvedt@atmel.com>");
++MODULE_DESCRIPTION("Sound driver for at73c213 on STK1000");
++MODULE_LICENSE("GPL");
++
++module_init(at73c213_init);
++module_exit(at73c213_exit);
++
+Index: linux-2.6.18-avr32/sound/avr32/at73c213.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/sound/avr32/at73c213.h 2006-11-02 15:56:20.000000000 +0100
+@@ -0,0 +1,120 @@
++/*
++ * Driver for the AT73C213 16-bit stereo DAC on Atmel ATSTK1000
++ *
++ * Copyright (C) 2006 Atmel Norway
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of the
++ * License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
++ * 02111-1307, USA.
++ *
++ * The full GNU General Public License is included in this
++ * distribution in the file called COPYING.
++ */
++
++#ifndef _SND_AT73C213_MIXER_H_
++#define _SND_AT73C213_MIXER_H_
++
++/* DAC control register */
++#define DAC_CTRL 0x00
++#define DAC_CTRL_ONPADRV 7
++#define DAC_CTRL_ONAUXIN 6
++#define DAC_CTRL_ONDACR 5
++#define DAC_CTRL_ONDACL 4
++#define DAC_CTRL_ONLNOR 3
++#define DAC_CTRL_ONLNOL 2
++#define DAC_CTRL_ONLNIR 1
++#define DAC_CTRL_ONLNIL 0
++
++/* DAC left line in gain register */
++#define DAC_LLIG 0x01
++#define DAC_LLIG_LLIG 0
++
++/* DAC right line in gain register */
++#define DAC_RLIG 0x02
++#define DAC_RLIG_RLIG 0
++
++/* DAC Left Master Playback Gain Register */
++#define DAC_LMPG 0x03
++#define DAC_LMPG_LMPG 0
++
++/* DAC Right Master Playback Gain Register */
++#define DAC_RMPG 0x04
++#define DAC_RMPG_RMPG 0
++
++/* DAC Left Line Out Gain Register */
++#define DAC_LLOG 0x05
++#define DAC_LLOG_LLOG 0
++
++/* DAC Right Line Out Gain Register */
++#define DAC_RLOG 0x06
++#define DAC_RLOG_RLOG 0
++
++/* DAC Output Level Control Register */
++#define DAC_OLC 0x07
++#define DAC_OLC_RSHORT 7
++#define DAC_OLC_ROLC 4
++#define DAC_OLC_LSHORT 3
++#define DAC_OLC_LOLC 0
++
++/* DAC Mixer Control Register */
++#define DAC_MC 0x08
++#define DAC_MC_INVR 5
++#define DAC_MC_INVL 4
++#define DAC_MC_RMSMIN2 3
++#define DAC_MC_RMSMIN1 2
++#define DAC_MC_LMSMIN2 1
++#define DAC_MC_LMSMIN1 0
++
++/* DAC Clock and Sampling Frequency Control Register */
++#define DAC_CSFC 0x09
++#define DAC_CSFC_OVRSEL 4
++
++/* DAC Miscellaneous Register */
++#define DAC_MISC 0x0A
++#define DAC_MISC_VCMCAPSEL 7
++#define DAC_MISC_DINTSEL 4
++#define DAC_MISC_DITHEN 3
++#define DAC_MISC_DEEMPEN 2
++#define DAC_MISC_NBITS 0
++
++/* DAC Precharge Control Register */
++#define DAC_PRECH 0x0C
++#define DAC_PRECH_PRCHGPDRV 7
++#define DAC_PRECH_PRCHGAUX1 6
++#define DAC_PRECH_PRCHGLNOR 5
++#define DAC_PRECH_PRCHGLNOL 4
++#define DAC_PRECH_PRCHGLNIR 3
++#define DAC_PRECH_PRCHGLNIL 2
++#define DAC_PRECH_PRCHG 1
++#define DAC_PRECH_ONMSTR 0
++
++/* DAC Auxiliary Input Gain Control Register */
++#define DAC_AUXG 0x0D
++#define DAC_AUXG_AUXG 0
++
++/* DAC Reset Register */
++#define DAC_RST 0x10
++#define DAC_RST_RESMASK 2
++#define DAC_RST_RESFILZ 1
++#define DAC_RST_RSTZ 0
++
++/* Power Amplifier Control Register */
++#define PA_CTRL 0x11
++#define PA_CTRL_APAON 6
++#define PA_CTRL_APAPRECH 5
++#define PA_CTRL_APALP 4
++#define PA_CTRL_APAGAIN 0
++
++#endif
++
diff --git a/packages/linux/linux-2.6.18/atmel-ac97c-alsa-driver.patch b/packages/linux/linux-2.6.18/atmel-ac97c-alsa-driver.patch
new file mode 100644
index 0000000000..fe3d2ee209
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel-ac97c-alsa-driver.patch
@@ -0,0 +1,1383 @@
+---
+ sound/avr32/Kconfig | 25 +
+ sound/avr32/Makefile | 3
+ sound/avr32/ac97c.c | 1250 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ sound/avr32/ac97c.h | 71 ++
+ 4 files changed, 1349 insertions(+)
+
+Index: linux-2.6.18-avr32/sound/avr32/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/sound/avr32/Kconfig 2006-11-02 15:56:20.000000000 +0100
++++ linux-2.6.18-avr32/sound/avr32/Kconfig 2006-11-02 16:02:29.000000000 +0100
+@@ -3,4 +3,29 @@
+ menu "ALSA AVR32 devices"
+ depends on SND != n && AVR32
+
++config SND_ATMEL_AC97
++ tristate "Atmel AC97 Controller Driver"
++ depends on SND
++ select SND_PCM
++ select SND_AC97_CODEC
++ help
++ ALSA sound driver for the Atmel AC97 controller.
++
++config SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS
++ bool "Use the built-in malloc calls in the alsa driver"
++ default n
++ depends on SND_ATMEL_AC97
++ help
++ Say Y if the built-in malloc calls in the alsa driver should be
++ used instead of the native dma_alloc_coherent and dma_free_coherent
++ function calls. Enabling this feature may break the rmmod feature.
++
++config SND_ATMEL_AC97C_USE_PDC
++ bool "Use PDC for DMA transfers to/from the Atmel AC97 Controller"
++ default n
++ depends on SND_ATMEL_AC97
++ help
++ Say Y if PDC (Peripheral DMA Controller) is used for DMA transfers
++ to/from the Atmel AC97C instead of using the generic DMA framework.
++
+ endmenu
+Index: linux-2.6.18-avr32/sound/avr32/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/sound/avr32/Makefile 2006-11-02 15:56:20.000000000 +0100
++++ linux-2.6.18-avr32/sound/avr32/Makefile 2006-11-02 16:02:29.000000000 +0100
+@@ -1,3 +1,6 @@
+ #
+ # Makefile for ALSA
+ #
++
++snd-atmel-ac97-objs := ac97c.o
++obj-$(CONFIG_SND_ATMEL_AC97) += snd-atmel-ac97.o
+Index: linux-2.6.18-avr32/sound/avr32/ac97c.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/sound/avr32/ac97c.c 2006-11-02 16:02:56.000000000 +0100
+@@ -0,0 +1,1250 @@
++/*
++ * Driver for the Atmel AC97 Controller
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/clk.h>
++#include <linux/delay.h>
++#include <linux/dma-mapping.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/mutex.h>
++
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/initval.h>
++#include <sound/pcm.h>
++#include <sound/pcm_params.h>
++#include <sound/ac97_codec.h>
++#ifndef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS
++#include <sound/memalloc.h>
++#endif
++
++#include <asm/io.h>
++
++#include "ac97c.h"
++
++static DEFINE_MUTEX(opened_mutex);
++
++/* module parameters */
++static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
++static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
++static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
++
++module_param_array(index, int, NULL, 0444);
++MODULE_PARM_DESC(index, "Index value for AC97 controller");
++module_param_array(id, charp, NULL, 0444);
++MODULE_PARM_DESC(id, "ID string for AC97 controller");
++module_param_array(enable, bool, NULL, 0444);
++MODULE_PARM_DESC(enable, "Enable AC97 controller");
++
++#ifndef CONFIG_SND_ATMEL_AC97C_USE_PDC
++#include <asm/dma-controller.h>
++
++struct atmel_ac97_dma_info {
++ struct dma_request_cyclic req_tx;
++ struct dma_request_cyclic req_rx;
++ unsigned short rx_periph_id;
++ unsigned short tx_periph_id;
++};
++#endif
++
++
++typedef struct atmel_ac97 {
++ spinlock_t lock;
++ void __iomem *regs;
++ int period;
++
++ snd_pcm_substream_t *playback_substream;
++ snd_pcm_substream_t *capture_substream;
++ snd_card_t *card;
++ snd_pcm_t *pcm;
++ ac97_t *ac97;
++ ac97_bus_t *ac97_bus;
++ int irq;
++ int opened;
++ u64 cur_format;
++ unsigned int cur_rate;
++ struct clk *mck;
++ struct platform_device *pdev;
++ struct atmel_ac97_dma_info dma;
++} atmel_ac97_t;
++#define get_chip(card) ((atmel_ac97_t *)(card)->private_data)
++
++#define ac97c_writel(chip, reg, val) \
++ __raw_writel((val), (chip)->regs + AC97C_##reg)
++#define ac97c_readl(chip, reg) \
++ __raw_readl((chip)->regs + AC97C_##reg)
++
++/* PCM part */
++
++static snd_pcm_hardware_t snd_atmel_ac97_playback_hw = {
++ .info = (SNDRV_PCM_INFO_INTERLEAVED
++ |SNDRV_PCM_INFO_MMAP
++ |SNDRV_PCM_INFO_MMAP_VALID
++ |SNDRV_PCM_INFO_BLOCK_TRANSFER
++ |SNDRV_PCM_INFO_JOINT_DUPLEX),
++ .formats = (SNDRV_PCM_FMTBIT_S16_BE|SNDRV_PCM_FMTBIT_S16_LE),
++ .rates = (SNDRV_PCM_RATE_CONTINUOUS),
++ .rate_min = 4000,
++ .rate_max = 48000,
++ .channels_min = 1,
++ .channels_max = 6,
++ .buffer_bytes_max = 64*1024,
++ .period_bytes_min = 512,
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ .period_bytes_max = 64*1024,
++#else
++ .period_bytes_max = 4095,
++#endif
++ .periods_min = 8,
++ .periods_max = 1024,
++};
++
++static snd_pcm_hardware_t snd_atmel_ac97_capture_hw = {
++ .info = (SNDRV_PCM_INFO_INTERLEAVED
++ |SNDRV_PCM_INFO_MMAP
++ |SNDRV_PCM_INFO_MMAP_VALID
++ |SNDRV_PCM_INFO_BLOCK_TRANSFER
++ |SNDRV_PCM_INFO_JOINT_DUPLEX),
++ .formats = (SNDRV_PCM_FMTBIT_S16_BE|SNDRV_PCM_FMTBIT_S16_LE),
++ .rates = (SNDRV_PCM_RATE_CONTINUOUS),
++ .rate_min = 4000,
++ .rate_max = 48000,
++ .channels_min = 1,
++ .channels_max = 2,
++ .buffer_bytes_max = 64*1024,
++ .period_bytes_min = 512,
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ .period_bytes_max = 64*1024,
++#else
++ .period_bytes_max = 4095,
++#endif
++ .periods_min = 8,
++ .periods_max = 1024,
++};
++
++/* Joint full duplex variables */
++unsigned int hw_rates[1];
++unsigned int hw_formats[1];
++struct snd_pcm_hw_constraint_list hw_constraint_rates;
++struct snd_pcm_hw_constraint_list hw_constraint_formats;
++
++/*
++ * PCM functions
++ */
++static int
++snd_atmel_ac97_playback_open(snd_pcm_substream_t *substream)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++ snd_pcm_runtime_t *runtime = substream->runtime;
++
++ mutex_lock(&opened_mutex);
++ chip->opened++;
++ runtime->hw = snd_atmel_ac97_playback_hw;
++ if (chip->cur_rate) {
++ runtime->hw.rate_min = chip->cur_rate;
++ runtime->hw.rate_max = chip->cur_rate;
++ }
++ if (chip->cur_format)
++ runtime->hw.formats = (1ULL<<chip->cur_format);
++ mutex_unlock(&opened_mutex);
++ chip->playback_substream = substream;
++ chip->period = 0;
++ return 0;
++}
++
++static int
++snd_atmel_ac97_capture_open(snd_pcm_substream_t *substream)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++ snd_pcm_runtime_t *runtime = substream->runtime;
++
++ mutex_lock(&opened_mutex);
++ chip->opened++;
++ runtime->hw = snd_atmel_ac97_capture_hw;
++ if (chip->cur_rate) {
++ runtime->hw.rate_min = chip->cur_rate;
++ runtime->hw.rate_max = chip->cur_rate;
++ }
++ if (chip->cur_format)
++ runtime->hw.formats = (1ULL<<chip->cur_format);
++ mutex_unlock(&opened_mutex);
++ chip->capture_substream = substream;
++ chip->period = 0;
++ return 0;
++}
++
++static int snd_atmel_ac97_playback_close(snd_pcm_substream_t *substream)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++ mutex_lock(&opened_mutex);
++ chip->opened--;
++ if (!chip->opened) {
++ chip->cur_rate = 0;
++ chip->cur_format = 0;
++ }
++ mutex_unlock(&opened_mutex);
++ return 0;
++}
++
++static int snd_atmel_ac97_capture_close(snd_pcm_substream_t *substream)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++ mutex_lock(&opened_mutex);
++ chip->opened--;
++ if (!chip->opened) {
++ chip->cur_rate = 0;
++ chip->cur_format = 0;
++ }
++ mutex_unlock(&opened_mutex);
++ return 0;
++}
++
++static int snd_atmel_ac97_playback_hw_params(snd_pcm_substream_t *substream,
++ snd_pcm_hw_params_t *hw_params)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++#ifdef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS
++ int err;
++ err = snd_pcm_lib_malloc_pages(substream,
++ params_buffer_bytes(hw_params));
++
++ if (err < 0)
++ return err;
++
++ /* Set restrictions to params */
++ mutex_lock(&opened_mutex);
++ chip->cur_rate = params_rate(hw_params);
++ chip->cur_format = params_format(hw_params);
++ mutex_unlock(&opened_mutex);
++
++ return err;
++#else
++ int pg;
++ size_t size = params_buffer_bytes(hw_params);
++ struct snd_pcm_runtime *runtime;
++ struct snd_dma_buffer *dmab = NULL;
++
++ substream->dma_buffer.dev.type = SNDRV_DMA_TYPE_DEV;
++ snd_assert(substream != NULL, return -EINVAL);
++ runtime = substream->runtime;
++ snd_assert(runtime != NULL, return -EINVAL);
++
++ /* Set restrictions to params */
++ mutex_lock(&opened_mutex);
++ chip->cur_rate = params_rate(hw_params);
++ chip->cur_format = params_format(hw_params);
++ mutex_unlock(&opened_mutex);
++
++ /* check if buffer is already allocated */
++ if (runtime->dma_buffer_p) {
++ size_t size_previouse;
++ int pg_previouse;
++
++ /* new buffer is smaler than previouse allocated buffer */
++ if (runtime->dma_buffer_p->bytes >= size) {
++ runtime->dma_bytes = size;
++ return 0; /* don't change buffer size */
++ }
++
++ size_previouse = runtime->dma_buffer_p->bytes;
++ pg_previouse = get_order(size_previouse);
++
++ dma_free_coherent(runtime->dma_buffer_p->dev.dev,
++ PAGE_SIZE << pg_previouse,
++ runtime->dma_buffer_p->area,
++ runtime->dma_buffer_p->addr);
++
++ kfree(runtime->dma_buffer_p);
++ }
++
++ dmab = kzalloc(sizeof(*dmab), GFP_KERNEL);
++ if (!dmab)
++ return -ENOMEM;
++
++ dmab->dev = substream->dma_buffer.dev;
++ dmab->bytes = 0;
++
++ pg = get_order(size);
++
++ dmab->area = dma_alloc_coherent(
++ substream->dma_buffer.dev.dev,
++ PAGE_SIZE << pg,
++ (dma_addr_t *)&dmab->addr,
++ GFP_KERNEL);
++
++ if (!dmab->area) {
++ kfree(dmab);
++ return -ENOMEM;
++ }
++
++ dmab->bytes = size;
++
++ snd_pcm_set_runtime_buffer(substream, dmab);
++ runtime->dma_bytes = size;
++ return 1;
++#endif
++}
++
++static int snd_atmel_ac97_capture_hw_params(snd_pcm_substream_t *substream,
++ snd_pcm_hw_params_t *hw_params)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++#ifdef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS
++ int err;
++ err = snd_pcm_lib_malloc_pages(substream,
++ params_buffer_bytes(hw_params));
++
++ if (err < 0)
++ return err;
++
++ /* Set restrictions to params */
++ mutex_lock(&opened_mutex);
++ chip->cur_rate = params_rate(hw_params);
++ chip->cur_format = params_format(hw_params);
++ mutex_unlock(&opened_mutex);
++
++ return err;
++#else
++ int pg;
++ size_t size = params_buffer_bytes(hw_params);
++ struct snd_pcm_runtime *runtime;
++ struct snd_dma_buffer *dmab = NULL;
++
++ substream->dma_buffer.dev.type = SNDRV_DMA_TYPE_DEV;
++ snd_assert(substream != NULL, return -EINVAL);
++ runtime = substream->runtime;
++ snd_assert(runtime != NULL, return -EINVAL);
++
++ /* Set restrictions to params */
++ mutex_lock(&opened_mutex);
++ chip->cur_rate = params_rate(hw_params);
++ chip->cur_format = params_format(hw_params);
++ mutex_unlock(&opened_mutex);
++
++ /* check if buffer is already allocated */
++ if (runtime->dma_buffer_p) {
++ size_t size_previouse;
++ int pg_previouse;
++
++ /* new buffer is smaler than previouse allocated buffer */
++ if (runtime->dma_buffer_p->bytes >= size) {
++ runtime->dma_bytes = size;
++ return 0; /* don't change buffer size */
++ }
++
++ size_previouse = runtime->dma_buffer_p->bytes;
++ pg_previouse = get_order(size_previouse);
++
++ dma_free_coherent(runtime->dma_buffer_p->dev.dev,
++ PAGE_SIZE << pg_previouse,
++ runtime->dma_buffer_p->area,
++ runtime->dma_buffer_p->addr);
++
++ kfree(runtime->dma_buffer_p);
++ }
++
++ dmab = kzalloc(sizeof(*dmab), GFP_KERNEL);
++ if (!dmab)
++ return -ENOMEM;
++
++ dmab->dev = substream->dma_buffer.dev;
++ dmab->bytes = 0;
++
++ pg = get_order(size);
++
++ dmab->area = dma_alloc_coherent(
++ substream->dma_buffer.dev.dev,
++ PAGE_SIZE << pg,
++ (dma_addr_t *)&dmab->addr,
++ GFP_KERNEL);
++
++ if (!dmab->area) {
++ kfree(dmab);
++ return -ENOMEM;
++ }
++
++ dmab->bytes = size;
++
++ snd_pcm_set_runtime_buffer(substream, dmab);
++ runtime->dma_bytes = size;
++ return 1;
++#endif
++}
++
++static int snd_atmel_ac97_playback_hw_free(snd_pcm_substream_t *substream)
++{
++#ifdef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS
++ return snd_pcm_lib_free_pages(substream);
++#else
++ int pg;
++ struct snd_pcm_runtime *runtime;
++ struct snd_dma_buffer *dmab = NULL;
++
++ snd_assert(substream != NULL, return -EINVAL);
++ runtime = substream->runtime;
++ snd_assert(runtime != NULL, return -EINVAL);
++ dmab = runtime->dma_buffer_p;
++
++ if (!dmab)
++ return 0;
++
++ if (!dmab->area)
++ return 0;
++
++ pg = get_order(dmab->bytes);
++ dma_free_coherent(dmab->dev.dev, PAGE_SIZE << pg, dmab->area, dmab->addr);
++ kfree(runtime->dma_buffer_p);
++ snd_pcm_set_runtime_buffer(substream, NULL);
++ return 0;
++#endif
++}
++
++static int snd_atmel_ac97_capture_hw_free(snd_pcm_substream_t *substream)
++{
++
++#ifdef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS
++ return snd_pcm_lib_free_pages(substream);
++#else
++ int pg;
++ struct snd_pcm_runtime *runtime;
++ struct snd_dma_buffer *dmab = NULL;
++
++ snd_assert(substream != NULL, return -EINVAL);
++ runtime = substream->runtime;
++ snd_assert(runtime != NULL, return -EINVAL);
++ dmab = runtime->dma_buffer_p;
++
++ if (!dmab)
++ return 0;
++
++ if (!dmab->area)
++ return 0;
++
++ pg = get_order(dmab->bytes);
++ dma_free_coherent(dmab->dev.dev, PAGE_SIZE << pg, dmab->area, dmab->addr);
++ kfree(runtime->dma_buffer_p);
++ snd_pcm_set_runtime_buffer(substream, NULL);
++ return 0;
++#endif
++}
++
++static int snd_atmel_ac97_playback_prepare(snd_pcm_substream_t *substream)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++ struct platform_device *pdev = chip->pdev;
++ snd_pcm_runtime_t *runtime = substream->runtime;
++ int block_size = frames_to_bytes(runtime, runtime->period_size);
++ unsigned long word = 0;
++ unsigned long buffer_size = 0;
++
++ dma_sync_single_for_device(&pdev->dev, runtime->dma_addr,
++ block_size * 2, DMA_TO_DEVICE);
++
++ /* Assign slots to channels */
++ switch (substream->runtime->channels) {
++ case 1:
++ word |= AC97C_CH_ASSIGN(PCM_LEFT, A);
++ break;
++ case 2:
++ /* Assign Left and Right slot to Channel A */
++ word |= AC97C_CH_ASSIGN(PCM_LEFT, A)
++ | AC97C_CH_ASSIGN(PCM_RIGHT, A);
++ break;
++ default:
++ /* TODO: support more than two channels */
++ return -EINVAL;
++ break;
++ }
++ ac97c_writel(chip, OCA, word);
++
++ /* Configure sample format and size */
++ word = AC97C_CMR_PDCEN | AC97C_CMR_SIZE_16;
++
++ switch (runtime->format){
++ case SNDRV_PCM_FORMAT_S16_LE:
++ word |= AC97C_CMR_CEM_LITTLE;
++ break;
++ case SNDRV_PCM_FORMAT_S16_BE:
++ default:
++ word &= ~AC97C_CMR_CEM_LITTLE;
++ break;
++ }
++
++ ac97c_writel(chip, CAMR, word);
++
++ /* Set variable rate if needed */
++ if (runtime->rate != 48000) {
++ word = ac97c_readl(chip, MR);
++ word |= AC97C_MR_VRA;
++ ac97c_writel(chip, MR, word);
++ } else {
++ /* Clear Variable Rate Bit */
++ word = ac97c_readl(chip, MR);
++ word &= ~AC97C_MR_VRA;
++ ac97c_writel(chip, MR, word);
++ }
++
++ /* Set rate */
++ snd_ac97_set_rate(chip->ac97, AC97_PCM_FRONT_DAC_RATE, runtime->rate);
++
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ /* Initialize and start the PDC */
++ ac97c_writel(chip, CATPR, runtime->dma_addr);
++ ac97c_writel(chip, CATCR, block_size / 4);
++ ac97c_writel(chip, CATNPR, runtime->dma_addr + block_size);
++ ac97c_writel(chip, CATNCR, block_size / 4);
++ ac97c_writel(chip, PTCR, PDC_PTCR_TXTEN);
++ /* Enable Channel A interrupts */
++ ac97c_writel(chip, IER, AC97C_SR_CAEVT);
++#else
++ buffer_size = frames_to_bytes(runtime, runtime->period_size) *
++ runtime->periods;
++
++ chip->dma.req_tx.buffer_size = buffer_size;
++ chip->dma.req_tx.periods = runtime->periods;
++
++ BUG_ON(chip->dma.req_tx.buffer_size !=
++ (chip->dma.req_tx.periods *
++ frames_to_bytes(runtime, runtime->period_size)));
++
++ chip->dma.req_tx.buffer_start = runtime->dma_addr;
++ chip->dma.req_tx.data_reg = (dma_addr_t)(chip->regs + AC97C_CATHR + 2);
++ chip->dma.req_tx.periph_id = chip->dma.tx_periph_id;
++ chip->dma.req_tx.direction = DMA_DIR_MEM_TO_PERIPH;
++ chip->dma.req_tx.width = DMA_WIDTH_16BIT;
++ chip->dma.req_tx.dev_id = chip;
++#endif
++
++ return 0;
++}
++
++static int snd_atmel_ac97_capture_prepare(snd_pcm_substream_t *substream)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++ struct platform_device *pdev = chip->pdev;
++ snd_pcm_runtime_t *runtime = substream->runtime;
++ int block_size = frames_to_bytes(runtime, runtime->period_size);
++ unsigned long word = 0;
++ unsigned long buffer_size = 0;
++
++ dma_sync_single_for_device(&pdev->dev, runtime->dma_addr,
++ block_size * 2, DMA_FROM_DEVICE);
++
++ /* Assign slots to channels */
++ switch (substream->runtime->channels) {
++ case 1:
++ word |= AC97C_CH_ASSIGN(PCM_LEFT, A);
++ break;
++ case 2:
++ /* Assign Left and Right slot to Channel A */
++ word |= AC97C_CH_ASSIGN(PCM_LEFT, A)
++ | AC97C_CH_ASSIGN(PCM_RIGHT, A);
++ break;
++ default:
++ /* TODO: support more than two channels */
++ return -EINVAL;
++ break;
++ }
++ ac97c_writel(chip, ICA, word);
++
++ /* Configure sample format and size */
++ word = AC97C_CMR_PDCEN | AC97C_CMR_SIZE_16;
++
++ switch (runtime->format) {
++ case SNDRV_PCM_FORMAT_S16_LE:
++ word |= AC97C_CMR_CEM_LITTLE;
++ break;
++ case SNDRV_PCM_FORMAT_S16_BE:
++ default:
++ word &= ~(AC97C_CMR_CEM_LITTLE);
++ break;
++ }
++
++ ac97c_writel(chip, CAMR, word);
++
++ /* Set variable rate if needed */
++ if (runtime->rate != 48000) {
++ word = ac97c_readl(chip, MR);
++ word |= AC97C_MR_VRA;
++ ac97c_writel(chip, MR, word);
++ } else {
++ /* Clear Variable Rate Bit */
++ word = ac97c_readl(chip, MR);
++ word &= ~(AC97C_MR_VRA);
++ ac97c_writel(chip, MR, word);
++ }
++
++ /* Set rate */
++ snd_ac97_set_rate(chip->ac97, AC97_PCM_LR_ADC_RATE, runtime->rate);
++
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ /* Initialize and start the PDC */
++ ac97c_writel(chip, CARPR, runtime->dma_addr);
++ ac97c_writel(chip, CARCR, block_size / 4);
++ ac97c_writel(chip, CARNPR, runtime->dma_addr + block_size);
++ ac97c_writel(chip, CARNCR, block_size / 4);
++ ac97c_writel(chip, PTCR, PDC_PTCR_RXEN);
++ /* Enable Channel A interrupts */
++ ac97c_writel(chip, IER, AC97C_SR_CAEVT);
++#else
++ buffer_size = frames_to_bytes(runtime, runtime->period_size) *
++ runtime->periods;
++
++ chip->dma.req_rx.buffer_size = buffer_size;
++ chip->dma.req_rx.periods = runtime->periods;
++
++ BUG_ON(chip->dma.req_rx.buffer_size !=
++ (chip->dma.req_rx.periods *
++ frames_to_bytes(runtime, runtime->period_size)));
++
++ chip->dma.req_rx.buffer_start = runtime->dma_addr;
++ chip->dma.req_rx.data_reg = (dma_addr_t)(chip->regs + AC97C_CARHR + 2);
++ chip->dma.req_rx.periph_id = chip->dma.rx_periph_id;
++ chip->dma.req_rx.direction = DMA_DIR_PERIPH_TO_MEM;
++ chip->dma.req_rx.width = DMA_WIDTH_16BIT;
++ chip->dma.req_rx.dev_id = chip;
++#endif
++
++ return 0;
++}
++
++static int snd_atmel_ac97_playback_trigger(snd_pcm_substream_t *substream, int cmd)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++ unsigned long camr;
++ int flags, err = 0;
++
++ spin_lock_irqsave(&chip->lock, flags);
++ camr = ac97c_readl(chip, CAMR);
++
++ switch (cmd) {
++ case SNDRV_PCM_TRIGGER_START:
++ err = dma_prepare_request_cyclic(chip->dma.req_tx.req.dmac,
++ &chip->dma.req_tx);
++ dma_start_request(chip->dma.req_tx.req.dmac,
++ chip->dma.req_tx.req.channel);
++ camr |= (AC97C_CMR_CENA
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ |AC97C_CMR_TXRDY
++#endif
++ );
++ break;
++ case SNDRV_PCM_TRIGGER_STOP:
++ err = dma_stop_request(chip->dma.req_tx.req.dmac,
++ chip->dma.req_tx.req.channel);
++ if (chip->opened <= 1) {
++ camr &= ~(AC97C_CMR_CENA
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ |AC97C_CMR_TXRDY
++#endif
++ );
++ }
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ else {
++ camr &= ~(AC97C_CMR_TXRDY);
++ }
++#endif
++ break;
++ default:
++ err = -EINVAL;
++ break;
++ }
++
++ ac97c_writel(chip, CAMR, camr);
++
++ spin_unlock_irqrestore(&chip->lock, flags);
++ return err;
++}
++
++static int snd_atmel_ac97_capture_trigger(snd_pcm_substream_t *substream, int cmd)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++ unsigned long camr;
++ int flags, err = 0;
++
++ spin_lock_irqsave(&chip->lock, flags);
++ camr = ac97c_readl(chip, CAMR);
++
++ switch (cmd) {
++ case SNDRV_PCM_TRIGGER_START:
++ err = dma_prepare_request_cyclic(chip->dma.req_rx.req.dmac,
++ &chip->dma.req_rx);
++ dma_start_request(chip->dma.req_rx.req.dmac,
++ chip->dma.req_rx.req.channel);
++ camr |= (AC97C_CMR_CENA
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ | AC97C_CMR_RXRDY
++#endif
++ );
++ break;
++ case SNDRV_PCM_TRIGGER_STOP:
++ err = dma_stop_request(chip->dma.req_rx.req.dmac,
++ chip->dma.req_rx.req.channel);
++ mutex_lock(&opened_mutex);
++ if (chip->opened <= 1) {
++ camr &= ~(AC97C_CMR_CENA
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ | AC97C_CMR_RXRDY
++#endif
++ );
++ }
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ else {
++ camr &= ~(AC97C_CSR_RXRDY);
++ }
++#endif
++ mutex_unlock(&opened_mutex);
++ break;
++ default:
++ err = -EINVAL;
++ break;
++ }
++
++ ac97c_writel(chip, CAMR, camr);
++
++ spin_unlock_irqrestore(&chip->lock, flags);
++ return err;
++}
++
++static snd_pcm_uframes_t snd_atmel_ac97_playback_pointer(snd_pcm_substream_t *substream)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++ snd_pcm_runtime_t *runtime = substream->runtime;
++ snd_pcm_uframes_t pos;
++ unsigned long bytes;
++
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ bytes = ac97c_readl(chip, CATPR) - runtime->dma_addr;
++#else
++ bytes = (dma_get_current_pos
++ (chip->dma.req_tx.req.dmac,
++ chip->dma.req_tx.req.channel) - runtime->dma_addr);
++#endif
++ pos = bytes_to_frames(runtime, bytes);
++ if (pos >= runtime->buffer_size)
++ pos -= runtime->buffer_size;
++
++ return pos;
++}
++
++static snd_pcm_uframes_t snd_atmel_ac97_capture_pointer(snd_pcm_substream_t *substream)
++{
++ atmel_ac97_t *chip = snd_pcm_substream_chip(substream);
++ snd_pcm_runtime_t *runtime = substream->runtime;
++ snd_pcm_uframes_t pos;
++ unsigned long bytes;
++
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ bytes = ac97c_readl(chip, CARPR) - runtime->dma_addr;
++#else
++ bytes = (dma_get_current_pos
++ (chip->dma.req_rx.req.dmac,chip->dma.req_rx.req.channel) -
++ runtime->dma_addr);
++#endif
++ pos = bytes_to_frames(runtime, bytes);
++ if (pos >= runtime->buffer_size)
++ pos -= runtime->buffer_size;
++
++
++ return pos;
++}
++
++static snd_pcm_ops_t atmel_ac97_playback_ops = {
++ .open = snd_atmel_ac97_playback_open,
++ .close = snd_atmel_ac97_playback_close,
++ .ioctl = snd_pcm_lib_ioctl,
++ .hw_params = snd_atmel_ac97_playback_hw_params,
++ .hw_free = snd_atmel_ac97_playback_hw_free,
++ .prepare = snd_atmel_ac97_playback_prepare,
++ .trigger = snd_atmel_ac97_playback_trigger,
++ .pointer = snd_atmel_ac97_playback_pointer,
++};
++
++static snd_pcm_ops_t atmel_ac97_capture_ops = {
++ .open = snd_atmel_ac97_capture_open,
++ .close = snd_atmel_ac97_capture_close,
++ .ioctl = snd_pcm_lib_ioctl,
++ .hw_params = snd_atmel_ac97_capture_hw_params,
++ .hw_free = snd_atmel_ac97_capture_hw_free,
++ .prepare = snd_atmel_ac97_capture_prepare,
++ .trigger = snd_atmel_ac97_capture_trigger,
++ .pointer = snd_atmel_ac97_capture_pointer,
++};
++
++static struct ac97_pcm atmel_ac97_pcm_defs[] __devinitdata = {
++ /* Playback */
++ {
++ .exclusive = 1,
++ .r = { {
++ .slots = ((1 << AC97_SLOT_PCM_LEFT)
++ | (1 << AC97_SLOT_PCM_RIGHT)
++ | (1 << AC97_SLOT_PCM_CENTER)
++ | (1 << AC97_SLOT_PCM_SLEFT)
++ | (1 << AC97_SLOT_PCM_SRIGHT)
++ | (1 << AC97_SLOT_LFE)),
++ } }
++ },
++ /* PCM in */
++ {
++ .stream = 1,
++ .exclusive = 1,
++ .r = { {
++ .slots = ((1 << AC97_SLOT_PCM_LEFT)
++ | (1 << AC97_SLOT_PCM_RIGHT)),
++ } }
++ },
++ /* Mic in */
++ {
++ .stream = 1,
++ .exclusive = 1,
++ .r = { {
++ .slots = (1<<AC97_SLOT_MIC),
++ } }
++ },
++};
++
++static int __devinit snd_atmel_ac97_pcm_new(atmel_ac97_t *chip)
++{
++ snd_pcm_t *pcm;
++ int err;
++
++ err = snd_ac97_pcm_assign(chip->ac97_bus,
++ ARRAY_SIZE(atmel_ac97_pcm_defs),
++ atmel_ac97_pcm_defs);
++ if (err)
++ return err;
++
++ err = snd_pcm_new(chip->card, "Atmel-AC97", 0, 1, 1, &pcm);
++ if (err)
++ return err;
++
++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK,
++ &atmel_ac97_playback_ops);
++
++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE,
++ &atmel_ac97_capture_ops);
++
++#ifdef SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS
++ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
++ &chip->pdev->dev,
++ 128 * 1024, 128 * 1024);
++#endif
++
++ pcm->private_data = chip;
++ pcm->info_flags = 0;
++ strcpy(pcm->name, "Atmel-AC97");
++ chip->pcm = pcm;
++
++ return 0;
++}
++
++/* Mixer part */
++static int snd_atmel_ac97_mixer_new(atmel_ac97_t *chip)
++{
++ int err;
++ ac97_template_t template;
++
++ memset(&template, 0, sizeof(template));
++ template.private_data = chip;
++ err = snd_ac97_mixer(chip->ac97_bus, &template, &chip->ac97);
++
++ return err;
++}
++
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++static irqreturn_t snd_atmel_ac97_interrupt(int irq, void *dev_id,
++ struct pt_regs *regs)
++{
++ atmel_ac97_t *chip = dev_id;
++ unsigned long status;
++
++ status = ac97c_readl(chip, SR);
++
++ if (status & AC97C_SR_CAEVT) {
++ snd_pcm_runtime_t *runtime;
++ int offset, next_period, block_size;
++ unsigned long casr;
++
++ /* FIXME: separate playback from capture */
++ runtime = chip->playback_substream->runtime;
++ block_size = frames_to_bytes(runtime, runtime->period_size);
++
++ casr = ac97c_readl(chip, CASR);
++
++ if (casr & AC97C_CSR_ENDTX) {
++ chip->period++;
++ if (chip->period == runtime->periods)
++ chip->period = 0;
++ next_period = chip->period + 1;
++ if (next_period == runtime->periods)
++ next_period = 0;
++
++ offset = block_size * next_period;
++
++ ac97c_writel(chip, CATNPR,
++ runtime->dma_addr + offset);
++ ac97c_writel(chip, CATNCR, block_size / 4);
++
++ snd_pcm_period_elapsed(chip->playback_substream);
++ }
++ else if (casr & AC97C_CSR_ENDRX) {
++ chip->period++;
++ if (chip->period == runtime->periods)
++ chip->period = 0;
++ next_period = chip->period + 1;
++ if (next_period == runtime->periods)
++ next_period = 0;
++
++ offset = block_size * next_period;
++
++ ac97c_writel(chip, CARNPR,
++ runtime->dma_addr + offset);
++ ac97c_writel(chip, CARNCR, block_size / 4);
++
++ snd_pcm_period_elapsed(chip->capture_substream);
++ } else {
++ snd_printk(KERN_INFO
++ "atmel-ac97: spurious interrupt, status = 0x%08lx\n",
++ (unsigned long)casr);
++ }
++ } else {
++ snd_printk(KERN_INFO
++ "atmel-ac97: spurious interrupt, status = 0x%08lx\n",
++ status);
++ }
++
++ (volatile int)ac97c_readl(chip, SR);
++
++ return IRQ_HANDLED;
++}
++
++#else
++
++static void atmel_ac97_error(struct dma_request *_req)
++{
++ struct dma_request_cyclic *req = to_dma_request_cyclic(_req);
++
++ printk(KERN_WARNING
++ "DMA Controller error, channel %d (AC97C)\n",
++ req->req.channel);
++}
++
++static void atmel_ac97_block_complete(struct dma_request *_req)
++{
++ struct dma_request_cyclic *req = to_dma_request_cyclic(_req);
++ atmel_ac97_t *chip = req->dev_id;
++ if (req->periph_id == chip->dma.tx_periph_id)
++ snd_pcm_period_elapsed(chip->playback_substream);
++ else
++ snd_pcm_period_elapsed(chip->capture_substream);
++}
++
++#endif
++
++/* CODEC part */
++
++static void snd_atmel_ac97_write(ac97_t *ac97, unsigned short reg,
++ unsigned short val)
++{
++ atmel_ac97_t *chip = ac97->private_data;
++ unsigned long word;
++ int timeout = 40;
++
++ word = (reg & 0x7f) << 16 | val;
++
++ do {
++ if (ac97c_readl(chip, COSR) & AC97C_CSR_TXRDY) {
++ ac97c_writel(chip, COTHR, word);
++ return;
++ }
++ udelay(1);
++ } while (--timeout);
++
++ snd_printk(KERN_WARNING "atmel-ac97: codec write timeout\n");
++}
++
++static unsigned short snd_atmel_ac97_read(ac97_t *ac97,
++ unsigned short reg)
++{
++ atmel_ac97_t *chip = ac97->private_data;
++ unsigned long word;
++ int timeout = 40;
++ int write = 10;
++
++ word = (0x80 | (reg & 0x7f)) << 16;
++
++ if ((ac97c_readl(chip, COSR) & AC97C_CSR_RXRDY) != 0)
++ ac97c_readl(chip, CORHR);
++
++retry_write:
++ timeout = 40;
++
++ do {
++ if ((ac97c_readl(chip, COSR) & AC97C_CSR_TXRDY) != 0) {
++ ac97c_writel(chip, COTHR, word);
++ goto read_reg;
++ }
++ mdelay(10);
++ } while (--timeout);
++
++ if (!--write)
++ goto timed_out;
++ goto retry_write;
++
++read_reg:
++ do {
++ if ((ac97c_readl(chip, COSR) & AC97C_CSR_RXRDY) != 0){
++ unsigned short val = ac97c_readl(chip, CORHR);
++ return val;
++ }
++ mdelay(10);
++ } while (--timeout);
++
++ if (!--write)
++ goto timed_out;
++ goto retry_write;
++
++timed_out:
++ snd_printk(KERN_INFO "atmel-ac97: codec read timeout\n");
++ return 0xffff;
++}
++
++static void snd_atmel_ac97_reset(atmel_ac97_t *chip)
++{
++ /* TODO: Perform hard reset of codec as well */
++ ac97c_writel(chip, MR, AC97C_MR_WRST);
++ mdelay(1);
++ ac97c_writel(chip, MR, AC97C_MR_ENA);
++}
++
++static void snd_atmel_ac97_destroy(snd_card_t *card)
++{
++ atmel_ac97_t *chip = get_chip(card);
++
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ if (chip->irq != -1)
++ free_irq(chip->irq, chip);
++#endif
++ if (chip->regs)
++ iounmap(chip->regs);
++
++ if (chip->mck) {
++ clk_disable(chip->mck);
++ clk_put(chip->mck);
++ }
++
++#ifndef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ if (chip->dma.req_tx.req.dmac){
++ dma_release_channel(chip->dma.req_tx.req.dmac,
++ chip->dma.req_tx.req.channel);
++ }
++ if (chip->dma.req_rx.req.dmac) {
++ dma_release_channel(chip->dma.req_rx.req.dmac,
++ chip->dma.req_rx.req.channel);
++ }
++#endif
++}
++
++static int __devinit snd_atmel_ac97_create(snd_card_t *card,
++ struct platform_device *pdev)
++{
++ static ac97_bus_ops_t ops = {
++ .write = snd_atmel_ac97_write,
++ .read = snd_atmel_ac97_read,
++ };
++ atmel_ac97_t *chip = get_chip(card);
++ struct resource *regs;
++ struct clk *mck;
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ int irq;
++#endif
++ int err;
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!regs)
++ return -ENXIO;
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0)
++ return irq;
++#endif
++
++ mck = clk_get(&pdev->dev, "mck");
++ if (IS_ERR(mck))
++ return PTR_ERR(mck);
++ clk_enable(mck);
++ chip->mck = mck;
++
++ card->private_free = snd_atmel_ac97_destroy;
++
++ spin_lock_init(&chip->lock);
++ chip->card = card;
++ chip->pdev = pdev;
++ chip->irq = -1;
++
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ err = request_irq(irq, snd_atmel_ac97_interrupt, 0,
++ "ac97", chip);
++ if (err) {
++ snd_printk("unable to request IRQ%d\n", irq);
++ return err;
++ }
++ chip->irq = irq;
++#endif
++
++ chip->regs = ioremap(regs->start, regs->end - regs->start + 1);
++ if (!chip->regs)
++ return -ENOMEM;
++
++ snd_card_set_dev(card, &pdev->dev);
++
++ err = snd_ac97_bus(card, 0, &ops, chip, &chip->ac97_bus);
++
++ return err;
++}
++
++static int __devinit snd_atmel_ac97_probe(struct platform_device *pdev)
++{
++ static int dev;
++ snd_card_t *card;
++ atmel_ac97_t *chip;
++ int err;
++ int ch;
++
++ if (dev >= SNDRV_CARDS)
++ return -ENODEV;
++ if (!enable[dev]) {
++ dev++;
++ return -ENOENT;
++ }
++
++ err = -ENOMEM;
++
++ mutex_init(&opened_mutex);
++
++ card = snd_card_new(index[dev], id[dev], THIS_MODULE,
++ sizeof(atmel_ac97_t));
++ if (!card)
++ goto out;
++ chip = get_chip(card);
++
++ err = snd_atmel_ac97_create(card, pdev);
++ if (err)
++ goto out_free_card;
++
++ snd_atmel_ac97_reset(chip);
++
++ err = snd_atmel_ac97_mixer_new(chip);
++ if (err)
++ goto out_free_card;
++
++ err = snd_atmel_ac97_pcm_new(chip);
++ if (err)
++ goto out_free_card;
++
++#ifndef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ /* TODO: Get this information from the platform device */
++ chip->dma.req_tx.req.dmac = find_dma_controller(0);
++ if (!chip->dma.req_tx.req.dmac) {
++ printk(KERN_ERR
++ "atmel-ac97c: No DMA controller for TX, aborting\n");
++ goto out_free_card;
++ }
++ chip->dma.req_rx.req.dmac = find_dma_controller(0);
++ if (!chip->dma.req_rx.req.dmac) {
++ snd_printk(KERN_ERR
++ "atmel-ac97c: No DMA controller available for RX, aborting\n");
++ goto out_free_card;
++ }
++
++ chip->dma.rx_periph_id = 3;
++ chip->dma.tx_periph_id = 4;
++
++ ch = dma_alloc_channel(chip->dma.req_tx.req.dmac);
++ if (ch < 0) {
++ printk(KERN_ERR
++ "atmel-ac97c: Unable to allocate TX DMA channel, aborting\n");
++ goto out_free_card;
++ }
++ chip->dma.req_tx.req.channel = ch;
++ chip->dma.req_tx.width = DMA_WIDTH_16BIT;
++ chip->dma.req_tx.req.block_complete = atmel_ac97_block_complete;
++ chip->dma.req_tx.req.error = atmel_ac97_error;
++
++ ch = dma_alloc_channel(chip->dma.req_rx.req.dmac);
++ if (ch < 0) {
++ snd_printk(KERN_ERR
++ "atmel-ac97c: Unable to allocate RX DMA channel, aborting\n");
++ goto out_free_card;
++ }
++ chip->dma.req_rx.req.channel = ch;
++ chip->dma.req_rx.width = DMA_WIDTH_16BIT;
++ chip->dma.req_rx.req.block_complete = atmel_ac97_block_complete;
++ chip->dma.req_rx.req.error = atmel_ac97_error;
++#endif
++
++ strcpy(card->driver, "ac97c");
++ strcpy(card->shortname, "Atmel-AC97");
++#ifdef CONFIG_SND_ATMEL_AC97C_USE_PDC
++ sprintf(card->longname, "Atmel AVR32 AC97 Controller at 0x%p, irq %i",
++ chip->regs, chip->irq);
++#else
++ sprintf(card->longname, "Atmel AVR32 AC97 Controller at 0x%p, dma rx %i and tx %i",
++ chip->regs, chip->dma.rx_periph_id, chip->dma.tx_periph_id);
++#endif
++
++ err = snd_card_register(card);
++ if (err)
++ goto out_free_card;
++
++ platform_set_drvdata(pdev, card);
++ dev++;
++ return 0;
++
++out_free_card:
++ snd_card_free(card);
++out:
++ return err;
++}
++
++static int __devexit snd_atmel_ac97_remove(struct platform_device *pdev)
++{
++ snd_card_t *card = platform_get_drvdata(pdev);
++
++ snd_card_free(card);
++ platform_set_drvdata(pdev, NULL);
++ return 0;
++}
++
++static struct platform_driver atmel_ac97_driver = {
++ .probe = snd_atmel_ac97_probe,
++ .remove = __devexit_p(snd_atmel_ac97_remove),
++ .driver = {
++ .name = "ac97c",
++ },
++};
++
++static int __init atmel_ac97_init(void)
++{
++ return platform_driver_register(&atmel_ac97_driver);
++}
++
++static void __exit atmel_ac97_exit(void)
++{
++ platform_driver_unregister(&atmel_ac97_driver);
++}
++
++module_init(atmel_ac97_init);
++module_exit(atmel_ac97_exit);
++
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("Driver for Atmel AC97 Controller");
++MODULE_AUTHOR("Haavard Skinnemoen <hskinnemoen@atmel.com>");
+Index: linux-2.6.18-avr32/sound/avr32/ac97c.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/sound/avr32/ac97c.h 2006-11-02 15:56:20.000000000 +0100
+@@ -0,0 +1,71 @@
++/*
++ * Register definitions for the Atmel AC97 Controller.
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __SOUND_AVR32_AC97C_H
++#define __SOUND_AVR32_AC97C_H
++
++#define AC97C_MR 0x08
++#define AC97C_ICA 0x10
++#define AC97C_OCA 0x14
++#define AC97C_CARHR 0x20
++#define AC97C_CATHR 0x24
++#define AC97C_CASR 0x28
++#define AC97C_CAMR 0x2c
++#define AC97C_CBRHR 0x30
++#define AC97C_CBTHR 0x34
++#define AC97C_CBSR 0x38
++#define AC97C_CBMR 0x3c
++#define AC97C_CORHR 0x40
++#define AC97C_COTHR 0x44
++#define AC97C_COSR 0x48
++#define AC97C_COMR 0x4c
++#define AC97C_SR 0x50
++#define AC97C_IER 0x54
++#define AC97C_IDR 0x58
++#define AC97C_IMR 0x5c
++#define AC97C_VERSION 0xfc
++
++#define AC97C_CATPR PDC_TPR
++#define AC97C_CATCR PDC_TCR
++#define AC97C_CATNPR PDC_TNPR
++#define AC97C_CATNCR PDC_TNCR
++#define AC97C_CARPR PDC_RPR
++#define AC97C_CARCR PDC_RCR
++#define AC97C_CARNPR PDC_RNPR
++#define AC97C_CARNCR PDC_RNCR
++#define AC97C_PTCR PDC_PTCR
++
++#define AC97C_MR_ENA (1 << 0)
++#define AC97C_MR_WRST (1 << 1)
++#define AC97C_MR_VRA (1 << 2)
++
++#define AC97C_CSR_TXRDY (1 << 0)
++#define AC97C_CSR_UNRUN (1 << 2)
++#define AC97C_CSR_RXRDY (1 << 4)
++#define AC97C_CSR_ENDTX (1 << 10)
++#define AC97C_CSR_ENDRX (1 << 14)
++
++#define AC97C_CMR_SIZE_20 (0 << 16)
++#define AC97C_CMR_SIZE_18 (1 << 16)
++#define AC97C_CMR_SIZE_16 (2 << 16)
++#define AC97C_CMR_SIZE_10 (3 << 16)
++#define AC97C_CMR_CEM_LITTLE (1 << 18)
++#define AC97C_CMR_CEM_BIG (0 << 18)
++#define AC97C_CMR_CENA (1 << 21)
++#define AC97C_CMR_PDCEN (1 << 22)
++
++#define AC97C_SR_CAEVT (1 << 3)
++
++#define AC97C_CH_ASSIGN(slot, channel) \
++ (AC97C_CHANNEL_##channel << (3 * (AC97_SLOT_##slot - 3)))
++#define AC97C_CHANNEL_NONE 0x0
++#define AC97C_CHANNEL_A 0x1
++#define AC97C_CHANNEL_B 0x2
++
++#endif /* __SOUND_AVR32_AC97C_H */
diff --git a/packages/linux/linux-2.6.18/atmel-husb2-udc-driver.patch b/packages/linux/linux-2.6.18/atmel-husb2-udc-driver.patch
new file mode 100644
index 0000000000..f46a8f1dd8
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel-husb2-udc-driver.patch
@@ -0,0 +1,2488 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Fri Nov 18 18:13:25 2005 +0100
+Subject: [PATCH] Driver for the Atmel HUSB2 Device Controller
+
+This adds the driver for the Atmel HUSB2 Device Controller.
+
+---
+
+ drivers/usb/gadget/Kconfig | 10
+ drivers/usb/gadget/Makefile | 1
+ drivers/usb/gadget/gadget_chips.h | 8
+ drivers/usb/gadget/husb2_udc.c | 1998 ++++++++++++++++++++++++++++++++++++++
+ drivers/usb/gadget/husb2_udc.h | 406 +++++++
+ 5 files changed, 2423 insertions(+)
+
+Index: linux-2.6.18-avr32/drivers/usb/gadget/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/usb/gadget/Kconfig 2006-11-02 15:54:18.000000000 +0100
++++ linux-2.6.18-avr32/drivers/usb/gadget/Kconfig 2006-11-02 15:56:20.000000000 +0100
+@@ -154,6 +154,16 @@ config USB_LH7A40X
+ default USB_GADGET
+ select USB_GADGET_SELECTED
+
++config USB_GADGET_HUSB2DEV
++ boolean "Atmel HUSB2DEVICE"
++ select USB_GADGET_DUALSPEED
++ depends on AVR32
++
++config USB_HUSB2DEV
++ tristate
++ depends on USB_GADGET_HUSB2DEV
++ default USB_GADGET
++ select USB_GADGET_SELECTED
+
+ config USB_GADGET_OMAP
+ boolean "OMAP USB Device Controller"
+Index: linux-2.6.18-avr32/drivers/usb/gadget/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/usb/gadget/Makefile 2006-11-02 15:54:18.000000000 +0100
++++ linux-2.6.18-avr32/drivers/usb/gadget/Makefile 2006-11-02 15:56:20.000000000 +0100
+@@ -8,6 +8,7 @@ obj-$(CONFIG_USB_GOKU) += goku_udc.o
+ obj-$(CONFIG_USB_OMAP) += omap_udc.o
+ obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o
+ obj-$(CONFIG_USB_AT91) += at91_udc.o
++obj-$(CONFIG_USB_HUSB2DEV) += husb2_udc.o
+
+ #
+ # USB gadget drivers
+Index: linux-2.6.18-avr32/drivers/usb/gadget/gadget_chips.h
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/usb/gadget/gadget_chips.h 2006-11-02 15:54:18.000000000 +0100
++++ linux-2.6.18-avr32/drivers/usb/gadget/gadget_chips.h 2006-11-02 15:56:20.000000000 +0100
+@@ -75,6 +75,12 @@
+ #define gadget_is_pxa27x(g) 0
+ #endif
+
++#ifdef CONFIG_USB_GADGET_HUSB2DEV
++#define gadget_is_husb2dev(g) !strcmp("husb2_udc", (g)->name)
++#else
++#define gadget_is_husb2dev(g) 0
++#endif
++
+ #ifdef CONFIG_USB_GADGET_S3C2410
+ #define gadget_is_s3c2410(g) !strcmp("s3c2410_udc", (g)->name)
+ #else
+@@ -169,5 +175,7 @@ static inline int usb_gadget_controller_
+ return 0x16;
+ else if (gadget_is_mpc8272(gadget))
+ return 0x17;
++ else if (gadget_is_husb2dev(gadget))
++ return 0x80;
+ return -ENOENT;
+ }
+Index: linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.c 2006-11-02 16:06:40.000000000 +0100
+@@ -0,0 +1,1998 @@
++/*
++ * Driver for the Atmel HUSB2device high speed USB device controller
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#undef DEBUG
++
++#include <linux/config.h>
++#include <linux/clk.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/device.h>
++#include <linux/dma-mapping.h>
++#include <linux/list.h>
++#include <linux/platform_device.h>
++#include <linux/usb_ch9.h>
++#include <linux/usb_gadget.h>
++#include <linux/dmapool.h>
++#include <linux/delay.h>
++
++#include <asm/io.h>
++
++#include "husb2_udc.h"
++
++#define DRIVER_VERSION "0.9"
++
++#define DMA_ADDR_INVALID (~(dma_addr_t)0)
++
++#define FIFO_IOMEM_ID 0
++#define CTRL_IOMEM_ID 1
++
++#ifdef DEBUG
++#define DBG_ERR 0x0001 /* report all error returns */
++#define DBG_HW 0x0002 /* debug hardware initialization */
++#define DBG_GADGET 0x0004 /* calls to/from gadget driver */
++#define DBG_INT 0x0008 /* interrupts */
++#define DBG_BUS 0x0010 /* report changes in bus state */
++#define DBG_QUEUE 0x0020 /* debug request queue processing */
++#define DBG_FIFO 0x0040 /* debug FIFO contents */
++#define DBG_DMA 0x0080 /* debug DMA handling */
++#define DBG_REQ 0x0100 /* print out queued request length */
++#define DBG_ALL 0xffff
++#define DBG_NONE 0x0000
++
++#define DEBUG_LEVEL (DBG_ERR|DBG_REQ)
++#define DBG(level, fmt, ...) \
++ do { \
++ if ((level) & DEBUG_LEVEL) \
++ printk(KERN_DEBUG "udc: " fmt, ## __VA_ARGS__); \
++ } while (0)
++#else
++#define DBG(level, fmt...)
++#endif
++
++static struct husb2_udc the_udc;
++
++#ifdef CONFIG_DEBUG_FS
++#include <linux/debugfs.h>
++#include <asm/uaccess.h>
++
++static int queue_dbg_open(struct inode *inode, struct file *file)
++{
++ struct husb2_ep *ep = inode->u.generic_ip;
++ struct husb2_request *req, *req_copy;
++ struct list_head *queue_data;
++
++ queue_data = kmalloc(sizeof(*queue_data), GFP_KERNEL);
++ if (!queue_data)
++ return -ENOMEM;
++ INIT_LIST_HEAD(queue_data);
++
++ spin_lock_irq(&ep->udc->lock);
++ list_for_each_entry(req, &ep->queue, queue) {
++ req_copy = kmalloc(sizeof(*req_copy), GFP_ATOMIC);
++ if (!req_copy)
++ goto fail;
++ memcpy(req_copy, req, sizeof(*req_copy));
++ list_add_tail(&req_copy->queue, queue_data);
++ }
++ spin_unlock_irq(&ep->udc->lock);
++
++ file->private_data = queue_data;
++ return 0;
++
++fail:
++ spin_unlock_irq(&ep->udc->lock);
++ list_for_each_entry_safe(req, req_copy, queue_data, queue) {
++ list_del(&req->queue);
++ kfree(req);
++ }
++ kfree(queue_data);
++ return -ENOMEM;
++}
++
++/*
++ * bbbbbbbb llllllll IZS sssss nnnn FDL\n\0
++ *
++ * b: buffer address
++ * l: buffer length
++ * I/i: interrupt/no interrupt
++ * Z/z: zero/no zero
++ * S/s: short ok/short not ok
++ * s: status
++ * n: nr_packets
++ * F/f: submitted/not submitted to FIFO
++ * D/d: using/not using DMA
++ * L/l: last transaction/not last transaction
++ */
++static ssize_t queue_dbg_read(struct file *file, char __user *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ struct list_head *queue = file->private_data;
++ struct husb2_request *req, *tmp_req;
++ size_t len, remaining, actual = 0;
++ char tmpbuf[38];
++
++ if (!access_ok(VERIFY_WRITE, buf, nbytes))
++ return -EFAULT;
++
++ mutex_lock(&file->f_dentry->d_inode->i_mutex);
++ list_for_each_entry_safe(req, tmp_req, queue, queue) {
++ len = snprintf(tmpbuf, sizeof(tmpbuf),
++ "%8p %08x %c%c%c %5d %4u %c%c%c\n",
++ req->req.buf, req->req.length,
++ req->req.no_interrupt ? 'i' : 'I',
++ req->req.zero ? 'Z' : 'z',
++ req->req.short_not_ok ? 's' : 'S',
++ req->req.status,
++ req->nr_pkts,
++ req->submitted ? 'F' : 'f',
++ req->using_dma ? 'D' : 'd',
++ req->last_transaction ? 'L' : 'l');
++ len = min(len, sizeof(tmpbuf));
++ if (len > nbytes)
++ break;
++
++ list_del(&req->queue);
++ kfree(req);
++
++ remaining = __copy_to_user(buf, tmpbuf, len);
++ actual += len - remaining;
++ if (remaining)
++ break;
++
++ nbytes -= len;
++ buf += len;
++ }
++ mutex_unlock(&file->f_dentry->d_inode->i_mutex);
++
++ return actual;
++}
++
++static int queue_dbg_release(struct inode *inode, struct file *file)
++{
++ struct list_head *queue_data = file->private_data;
++ struct husb2_request *req, *tmp_req;
++
++ list_for_each_entry_safe(req, tmp_req, queue_data, queue) {
++ list_del(&req->queue);
++ kfree(req);
++ }
++ kfree(queue_data);
++ return 0;
++}
++
++static int regs_dbg_open(struct inode *inode, struct file *file)
++{
++ struct husb2_udc *udc;
++ unsigned int i;
++ u32 *data;
++ int ret = -ENOMEM;
++
++ mutex_lock(&inode->i_mutex);
++ udc = inode->u.generic_ip;
++ data = kmalloc(inode->i_size, GFP_KERNEL);
++ if (!data)
++ goto out;
++
++ spin_lock_irq(&udc->lock);
++ for (i = 0; i < inode->i_size / 4; i++)
++ data[i] = __raw_readl(udc->regs + i * 4);
++ spin_unlock_irq(&udc->lock);
++
++ file->private_data = data;
++ ret = 0;
++
++out:
++ mutex_unlock(&inode->i_mutex);
++
++ return ret;
++}
++
++static ssize_t regs_dbg_read(struct file *file, char __user *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ struct inode *inode = file->f_dentry->d_inode;
++ int ret;
++
++ mutex_lock(&inode->i_mutex);
++ ret = simple_read_from_buffer(buf, nbytes, ppos,
++ file->private_data,
++ file->f_dentry->d_inode->i_size);
++ mutex_unlock(&inode->i_mutex);
++
++ return ret;
++}
++
++static int regs_dbg_release(struct inode *inode, struct file *file)
++{
++ kfree(file->private_data);
++ return 0;
++}
++
++const struct file_operations queue_dbg_fops = {
++ .owner = THIS_MODULE,
++ .open = queue_dbg_open,
++ .llseek = no_llseek,
++ .read = queue_dbg_read,
++ .release = queue_dbg_release,
++};
++
++const struct file_operations regs_dbg_fops = {
++ .owner = THIS_MODULE,
++ .open = regs_dbg_open,
++ .llseek = generic_file_llseek,
++ .read = regs_dbg_read,
++ .release = regs_dbg_release,
++};
++
++static void husb2_ep_init_debugfs(struct husb2_udc *udc,
++ struct husb2_ep *ep)
++{
++ struct dentry *ep_root;
++
++ ep_root = debugfs_create_dir(ep_name(ep), udc->debugfs_root);
++ if (!ep_root)
++ goto err_root;
++ ep->debugfs_dir = ep_root;
++
++ ep->debugfs_queue = debugfs_create_file("queue", 0400, ep_root,
++ ep, &queue_dbg_fops);
++ if (!ep->debugfs_queue)
++ goto err_queue;
++
++ if (ep_can_dma(ep)) {
++ ep->debugfs_dma_status
++ = debugfs_create_u32("dma_status", 0400, ep_root,
++ &ep->last_dma_status);
++ if (!ep->debugfs_dma_status)
++ goto err_dma_status;
++ }
++
++ return;
++
++err_dma_status:
++ debugfs_remove(ep->debugfs_queue);
++err_queue:
++ debugfs_remove(ep_root);
++err_root:
++ dev_err(&ep->udc->pdev->dev,
++ "failed to create debugfs directory for %s\n", ep_name(ep));
++}
++
++static void husb2_ep_cleanup_debugfs(struct husb2_ep *ep)
++{
++ debugfs_remove(ep->debugfs_queue);
++ debugfs_remove(ep->debugfs_dma_status);
++ debugfs_remove(ep->debugfs_dir);
++ ep->debugfs_dma_status = NULL;
++ ep->debugfs_dir = NULL;
++}
++
++static void husb2_init_debugfs(struct husb2_udc *udc)
++{
++ struct dentry *root, *regs;
++ struct resource *regs_resource;
++
++ root = debugfs_create_dir(udc->gadget.name, NULL);
++ if (IS_ERR(root) || !root)
++ goto err_root;
++ udc->debugfs_root = root;
++
++ regs = debugfs_create_file("regs", 0400, root, udc, &regs_dbg_fops);
++ if (!regs)
++ goto err_regs;
++
++ regs_resource = platform_get_resource(udc->pdev, IORESOURCE_MEM,
++ CTRL_IOMEM_ID);
++ regs->d_inode->i_size = regs_resource->end - regs_resource->start + 1;
++ udc->debugfs_regs = regs;
++
++ husb2_ep_init_debugfs(udc, to_husb2_ep(udc->gadget.ep0));
++
++ return;
++
++err_regs:
++ debugfs_remove(root);
++err_root:
++ udc->debugfs_root = NULL;
++ dev_err(&udc->pdev->dev, "debugfs is not available\n");
++}
++
++static void husb2_cleanup_debugfs(struct husb2_udc *udc)
++{
++ husb2_ep_cleanup_debugfs(to_husb2_ep(udc->gadget.ep0));
++ debugfs_remove(udc->debugfs_regs);
++ debugfs_remove(udc->debugfs_root);
++ udc->debugfs_regs = NULL;
++ udc->debugfs_root = NULL;
++}
++#else
++static inline void husb2_ep_init_debugfs(struct husb2_udc *udc,
++ struct husb2_ep *ep)
++{
++
++}
++
++static inline void husb2_ep_cleanup_debugfs(struct husb2_ep *ep)
++{
++
++}
++
++static inline void husb2_init_debugfs(struct husb2_udc *udc)
++{
++
++}
++
++static inline void husb2_cleanup_debugfs(struct husb2_udc *udc)
++{
++
++}
++#endif
++
++static void copy_to_fifo(void __iomem *fifo, void *buf, int len)
++{
++ unsigned long tmp;
++
++ DBG(DBG_FIFO, "copy to FIFO (len %d):\n", len);
++ for (; len > 0; len -= 4, buf += 4, fifo += 4) {
++ tmp = *(unsigned long *)buf;
++ if (len >= 4) {
++ DBG(DBG_FIFO, " -> %08lx\n", tmp);
++ __raw_writel(tmp, fifo);
++ } else {
++ do {
++ DBG(DBG_FIFO, " -> %02lx\n", tmp >> 24);
++ __raw_writeb(tmp >> 24, fifo);
++ fifo++;
++ tmp <<= 8;
++ } while (--len);
++ break;
++ }
++ }
++}
++
++static void copy_from_fifo(void *buf, void __iomem *fifo, int len)
++{
++ union {
++ unsigned long *w;
++ unsigned char *b;
++ } p;
++ unsigned long tmp;
++
++ DBG(DBG_FIFO, "copy from FIFO (len %d):\n", len);
++ for (p.w = buf; len > 0; len -= 4, p.w++, fifo += 4) {
++ if (len >= 4) {
++ tmp = __raw_readl(fifo);
++ *p.w = tmp;
++ DBG(DBG_FIFO, " -> %08lx\n", tmp);
++ } else {
++ do {
++ tmp = __raw_readb(fifo);
++ *p.b = tmp;
++ DBG(DBG_FIFO, " -> %02lx\n", tmp);
++ fifo++, p.b++;
++ } while (--len);
++ }
++ }
++}
++
++static void next_fifo_transaction(struct husb2_ep *ep,
++ struct husb2_request *req)
++{
++ unsigned int transaction_len;
++
++ transaction_len = req->req.length - req->req.actual;
++ req->last_transaction = 1;
++ if (transaction_len > ep->ep.maxpacket) {
++ transaction_len = ep->ep.maxpacket;
++ req->last_transaction = 0;
++ } else if (transaction_len == ep->ep.maxpacket
++ && req->req.zero) {
++ req->last_transaction = 0;
++ }
++ DBG(DBG_QUEUE, "%s: submit_transaction, req %p (length %d)%s\n",
++ ep_name(ep), req, transaction_len,
++ req->last_transaction ? ", done" : "");
++
++ copy_to_fifo(ep->fifo, req->req.buf + req->req.actual, transaction_len);
++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(TX_PK_RDY));
++ req->req.actual += transaction_len;
++}
++
++static void submit_request(struct husb2_ep *ep, struct husb2_request *req)
++{
++ DBG(DBG_QUEUE, "%s: submit_request: req %p (length %d)\n",
++ ep_name(ep), req, req->req.length);
++
++ req->req.actual = 0;
++ req->submitted = 1;
++
++ if (req->using_dma) {
++ if (req->req.length == 0) {
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_PK_RDY));
++ } else {
++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(TX_PK_RDY));
++ husb2_dma_writel(ep, NXT_DSC,
++ req->packet[0].desc_dma);
++ husb2_dma_writel(ep, CONTROL, HUSB2_BIT(DMA_LINK));
++ }
++ } else {
++ next_fifo_transaction(ep, req);
++ if (req->last_transaction)
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_COMPLETE));
++ else
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_PK_RDY));
++ }
++}
++
++static void submit_next_request(struct husb2_ep *ep)
++{
++ struct husb2_request *req;
++
++ if (list_empty(&ep->queue)) {
++ husb2_ep_writel(ep, CTL_DIS, (HUSB2_BIT(TX_PK_RDY)
++ | HUSB2_BIT(RX_BK_RDY)));
++ return;
++ }
++
++ req = list_entry(ep->queue.next, struct husb2_request, queue);
++ if (!req->submitted)
++ submit_request(ep, req);
++}
++
++static void send_status(struct husb2_udc *udc, struct husb2_ep *ep)
++{
++ ep->state = STATUS_STAGE_IN;
++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(TX_PK_RDY));
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_COMPLETE));
++}
++
++static void receive_data(struct husb2_ep *ep)
++{
++ struct husb2_udc *udc = ep->udc;
++ struct husb2_request *req;
++ unsigned long status;
++ unsigned int bytecount, nr_busy;
++ int is_complete = 0;
++
++ status = husb2_ep_readl(ep, STA);
++ nr_busy = HUSB2_BFEXT(BUSY_BANKS, status);
++
++ DBG(DBG_QUEUE, "receive data: nr_busy=%u\n", nr_busy);
++
++ while (nr_busy > 0) {
++ if (list_empty(&ep->queue)) {
++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(RX_BK_RDY));
++ break;
++ }
++ req = list_entry(ep->queue.next,
++ struct husb2_request, queue);
++
++ bytecount = HUSB2_BFEXT(BYTE_COUNT, status);
++
++ if (status & (1 << 31))
++ is_complete = 1;
++ if (req->req.actual + bytecount >= req->req.length) {
++ is_complete = 1;
++ bytecount = req->req.length - req->req.actual;
++ }
++
++ copy_from_fifo(req->req.buf + req->req.actual,
++ ep->fifo, bytecount);
++ req->req.actual += bytecount;
++
++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(RX_BK_RDY));
++
++ if (is_complete) {
++ DBG(DBG_QUEUE, "%s: request done\n", ep_name(ep));
++ req->req.status = 0;
++ list_del_init(&req->queue);
++ req->req.complete(&ep->ep, &req->req);
++ }
++
++ status = husb2_ep_readl(ep, STA);
++ nr_busy = HUSB2_BFEXT(BUSY_BANKS, status);
++
++ if (is_complete && ep_is_control(ep)) {
++ BUG_ON(nr_busy != 0);
++ send_status(udc, ep);
++ break;
++ }
++ }
++}
++
++static void request_complete(struct husb2_ep *ep,
++ struct husb2_request *req,
++ int status)
++{
++ struct husb2_udc *udc = ep->udc;
++ int i;
++
++ BUG_ON(!list_empty(&req->queue));
++
++ if (req->req.status == -EINPROGRESS)
++ req->req.status = status;
++
++ if (req->packet) {
++ for (i = 0; i < req->nr_pkts; i++)
++ dma_pool_free(udc->desc_pool, req->packet[i].desc,
++ req->packet[i].desc_dma);
++ kfree(req->packet);
++ req->packet = NULL;
++ dma_unmap_single(&udc->pdev->dev,
++ req->req.dma, req->req.length,
++ (ep_is_in(ep)
++ ? DMA_TO_DEVICE : DMA_FROM_DEVICE));
++ req->req.dma = DMA_ADDR_INVALID;
++ }
++
++ DBG(DBG_GADGET | DBG_REQ,
++ "%s: req %p complete: status %d, actual %u\n",
++ ep_name(ep), req, req->req.status, req->req.actual);
++ req->req.complete(&ep->ep, &req->req);
++}
++
++static void request_complete_list(struct husb2_ep *ep,
++ struct list_head *list,
++ int status)
++{
++ struct husb2_request *req, *tmp_req;
++
++ list_for_each_entry_safe(req, tmp_req, list, queue) {
++ list_del_init(&req->queue);
++ request_complete(ep, req, status);
++ }
++}
++
++static int husb2_ep_enable(struct usb_ep *_ep,
++ const struct usb_endpoint_descriptor *desc)
++{
++ struct husb2_ep *ep = to_husb2_ep(_ep);
++ struct husb2_udc *udc = ep->udc;
++ unsigned long flags, ept_cfg, maxpacket;
++
++ DBG(DBG_GADGET, "%s: ep_enable: desc=%p\n", ep_name(ep), desc);
++
++ maxpacket = le16_to_cpu(desc->wMaxPacketSize);
++
++ if (ep->index == 0
++ || desc->bDescriptorType != USB_DT_ENDPOINT
++ || ((desc->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK)
++ != ep->index)
++ || maxpacket == 0
++ || maxpacket > ep->fifo_size) {
++ DBG(DBG_ERR, "ep_enable: Invalid argument");
++ return -EINVAL;
++ }
++
++ if (((desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
++ == USB_ENDPOINT_XFER_ISOC)
++ && !(ep->capabilities & HUSB2_EP_CAP_ISOC)) {
++ DBG(DBG_ERR, "ep_enable: %s is not isoc capable\n",
++ ep_name(ep));
++ return -EINVAL;
++ }
++
++ if (maxpacket <= 8)
++ ept_cfg = HUSB2_BF(EPT_SIZE, HUSB2_EPT_SIZE_8);
++ else
++ /* LSB is bit 1, not 0 */
++ ept_cfg = HUSB2_BF(EPT_SIZE, fls(maxpacket - 1) - 3);
++ DBG(DBG_HW, "%s: EPT_SIZE = %lu (maxpacket = %lu)\n",
++ ep_name(ep), ept_cfg, maxpacket);
++
++ if ((desc->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
++ ept_cfg |= HUSB2_BIT(EPT_DIR);
++
++ switch (desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
++ case USB_ENDPOINT_XFER_CONTROL:
++ ept_cfg |= HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_CONTROL);
++ break;
++ case USB_ENDPOINT_XFER_ISOC:
++ ept_cfg |= HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_ISO);
++ break;
++ case USB_ENDPOINT_XFER_BULK:
++ ept_cfg |= HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_BULK);
++ break;
++ case USB_ENDPOINT_XFER_INT:
++ ept_cfg |= HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_INT);
++ break;
++ }
++ ept_cfg |= HUSB2_BF(BK_NUMBER, ep->nr_banks);
++
++ spin_lock_irqsave(&ep->udc->lock, flags);
++
++ if (ep->desc) {
++ spin_unlock_irqrestore(&ep->udc->lock, flags);
++ DBG(DBG_ERR, "ep%d already enabled\n", ep->index);
++ return -EBUSY;
++ }
++
++ ep->desc = desc;
++ ep->ep.maxpacket = maxpacket;
++
++ husb2_ep_writel(ep, CFG, ept_cfg);
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(EPT_ENABLE));
++
++ if (ep_can_dma(ep)) {
++ husb2_writel(udc, INT_ENB,
++ (husb2_readl(udc, INT_ENB)
++ | HUSB2_BF(EPT_INT, 1 << ep->index)
++ | HUSB2_BF(DMA_INT, 1 << ep->index)));
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(AUTO_VALID));
++ } else {
++ husb2_writel(udc, INT_ENB,
++ (husb2_readl(udc, INT_ENB)
++ | HUSB2_BF(EPT_INT, 1 << ep->index)));
++ }
++
++ spin_unlock_irqrestore(&udc->lock, flags);
++
++ DBG(DBG_HW, "EPT_CFG%d after init: %#08lx\n", ep->index,
++ (unsigned long)husb2_ep_readl(ep, CFG));
++ DBG(DBG_HW, "INT_ENB after init: %#08lx\n",
++ (unsigned long)husb2_readl(udc, INT_ENB));
++
++ husb2_ep_init_debugfs(udc, ep);
++
++ return 0;
++}
++
++static int husb2_ep_disable(struct usb_ep *_ep)
++{
++ struct husb2_ep *ep = to_husb2_ep(_ep);
++ struct husb2_udc *udc = ep->udc;
++ LIST_HEAD(req_list);
++ unsigned long flags;
++
++ DBG(DBG_GADGET, "ep_disable: %s\n", ep_name(ep));
++
++ husb2_ep_cleanup_debugfs(ep);
++
++ spin_lock_irqsave(&udc->lock, flags);
++
++ if (!ep->desc) {
++ spin_unlock_irqrestore(&udc->lock, flags);
++ DBG(DBG_ERR, "ep_disable: %s not enabled\n",
++ ep_name(ep));
++ return -EINVAL;
++ }
++ ep->desc = NULL;
++
++ list_splice_init(&ep->queue, &req_list);
++ if (ep_can_dma(ep)) {
++ husb2_dma_writel(ep, CONTROL, 0);
++ husb2_dma_writel(ep, ADDRESS, 0);
++ husb2_dma_readl(ep, STATUS);
++ }
++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(EPT_ENABLE));
++ husb2_writel(udc, INT_ENB, (husb2_readl(udc, INT_ENB)
++ & ~HUSB2_BF(EPT_INT, 1 << ep->index)));
++
++ spin_unlock_irqrestore(&udc->lock, flags);
++
++ request_complete_list(ep, &req_list, -ESHUTDOWN);
++
++ return 0;
++}
++
++static struct usb_request *
++husb2_ep_alloc_request(struct usb_ep *_ep, unsigned gfp_flags)
++{
++ struct husb2_request *req;
++
++ DBG(DBG_GADGET, "ep_alloc_request: %p, 0x%x\n", _ep, gfp_flags);
++
++ req = kzalloc(sizeof(*req), gfp_flags);
++ if (!req)
++ return NULL;
++
++ INIT_LIST_HEAD(&req->queue);
++ req->req.dma = DMA_ADDR_INVALID;
++
++ return &req->req;
++}
++
++static void
++husb2_ep_free_request(struct usb_ep *_ep, struct usb_request *_req)
++{
++ struct husb2_request *req = to_husb2_req(_req);
++
++ DBG(DBG_GADGET, "ep_free_request: %p, %p\n", _ep, _req);
++
++ kfree(req);
++}
++
++static void *husb2_ep_alloc_buffer(struct usb_ep *_ep, unsigned bytes,
++ dma_addr_t *dma, unsigned gfp_flags)
++{
++ struct husb2_ep *ep = to_husb2_ep(_ep);
++ void *buf;
++
++ /*
++ * We depend on kmalloc() returning cache-aligned memory. This
++ * is normally guaranteed as long as we allocate a whole
++ * cacheline or more.
++ *
++ * When CONFIG_DEBUG_SLAB is enabled, however, the slab
++ * allocator inserts red zones and ownership information,
++ * causing the slab objects to be misaligned.
++ *
++ * One alternative would be to use dma_alloc_coherent, but
++ * that would make us unable to allocate anything less than a
++ * page at a time.
++ */
++#ifdef CONFIG_DEBUG_SLAB
++# error The HUSB2 UDC driver breaks with SLAB debugging enabled
++#endif
++
++ if (bytes < L1_CACHE_BYTES)
++ bytes = L1_CACHE_BYTES;
++
++ buf = kmalloc(bytes, gfp_flags);
++
++ /*
++ * Seems like we have to map the buffer any chance we get.
++ * ether.c wants us to initialize the dma member of a
++ * different request than the one receiving the buffer, so one
++ * never knows...
++ *
++ * Ah, screw it. The ether driver is probably wrong, and this
++ * is not the right place to do the mapping. The driver
++ * shouldn't mess with our DMA mappings anyway.
++ */
++ *dma = DMA_ADDR_INVALID;
++
++ DBG(DBG_GADGET, "ep_alloc_buffer: %s, %u, 0x%x -> %p\n",
++ ep_name(ep), bytes, gfp_flags, buf);
++
++ return buf;
++}
++
++static void husb2_ep_free_buffer(struct usb_ep *_ep, void *buf,
++ dma_addr_t dma, unsigned bytes)
++{
++ DBG(DBG_GADGET, "ep_free_buffer: %s, buf %p (size %u)\n",
++ _ep->name, buf, bytes);
++ kfree(buf);
++}
++
++static int queue_dma(struct husb2_udc *udc, struct husb2_ep *ep,
++ struct husb2_request *req, unsigned int direction,
++ gfp_t gfp_flags)
++{
++ struct husb2_packet *pkt, *prev_pkt;
++ unsigned int pkt_size, nr_pkts, i;
++ unsigned int residue;
++ dma_addr_t addr;
++ unsigned long flags;
++ u32 ctrl;
++
++ req->using_dma = 1;
++
++ if (req->req.length == 0) {
++ if (!req->req.zero)
++ return -EINVAL;
++ req->send_zlp = 1;
++
++ spin_lock_irqsave(&udc->lock, flags);
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_PK_RDY));
++ list_add_tail(&req->queue, &ep->queue);
++ spin_unlock_irqrestore(&udc->lock, flags);
++
++ return 0;
++ }
++
++ if (req->req.dma == DMA_ADDR_INVALID)
++ req->req.dma = dma_map_single(&udc->pdev->dev,
++ req->req.buf,
++ req->req.length,
++ direction);
++ else
++ dma_sync_single_for_device(&udc->pdev->dev,
++ req->req.dma,
++ req->req.length,
++ direction);
++
++ pkt_size = ep->ep.maxpacket;
++ nr_pkts = req->req.length / pkt_size;
++ residue = req->req.length % pkt_size;
++ if (residue != 0)
++ nr_pkts++;
++ else if (req->req.zero && ep_is_in(ep))
++ /* ensure last packet is short */
++ req->send_zlp = 1;
++
++ req->nr_pkts = nr_pkts;
++
++ req->packet = kzalloc(sizeof(*req->packet) * nr_pkts, gfp_flags);
++ if (!req->packet)
++ goto out_of_memory;
++
++ addr = req->req.dma;
++ ctrl = (HUSB2_BF(DMA_BUF_LEN, pkt_size)
++ | HUSB2_BIT(DMA_CH_EN) | HUSB2_BIT(DMA_LINK)
++ | HUSB2_BIT(DMA_END_TR_EN) | HUSB2_BIT(DMA_END_TR_IE));
++ prev_pkt = NULL;
++ pkt = NULL;
++ DBG(DBG_DMA, "DMA descriptors:\n");
++ for (i = 0; i < nr_pkts; i++) {
++ pkt = &req->packet[i];
++ pkt->desc = dma_pool_alloc(udc->desc_pool, gfp_flags,
++ &pkt->desc_dma);
++ if (!pkt->desc)
++ goto out_of_memory;
++
++ if (prev_pkt) {
++ prev_pkt->desc->next = pkt->desc_dma;
++ DBG(DBG_DMA, "[%d] n%08x a%08x c%08x\n",
++ i - 1, prev_pkt->desc->next, prev_pkt->desc->addr,
++ prev_pkt->desc->ctrl);
++ }
++ prev_pkt = pkt;
++
++ pkt->desc->addr = addr;
++ pkt->desc->ctrl = ctrl;
++ addr += pkt_size;
++ }
++
++ /* special care is needed for the last packet... */
++ ctrl = (HUSB2_BIT(DMA_CH_EN)
++ | HUSB2_BIT(DMA_END_TR_EN) | HUSB2_BIT(DMA_END_TR_IE)
++ | HUSB2_BIT(DMA_END_BUF_IE));
++ if (ep_is_in(ep))
++ ctrl |= HUSB2_BIT(DMA_END_BUF_EN);
++ if (req->req.zero || residue)
++ ctrl |= HUSB2_BF(DMA_BUF_LEN, residue);
++ else
++ ctrl |= HUSB2_BF(DMA_BUF_LEN, pkt_size);
++ pkt->desc->ctrl = ctrl;
++
++ DBG(DBG_DMA, "[%d] n%08x a%08x c%08x\n",
++ i - 1, prev_pkt->desc->next, prev_pkt->desc->addr,
++ prev_pkt->desc->ctrl);
++
++ /* Add this request to the queue and try to chain the DMA descriptors */
++ spin_lock_irqsave(&udc->lock, flags);
++
++ /* If the DMA controller is idle, start it */
++ if (list_empty(&ep->queue)) {
++ husb2_dma_writel(ep, NXT_DSC, req->packet[0].desc_dma);
++ husb2_dma_writel(ep, CONTROL, HUSB2_BIT(DMA_LINK));
++ }
++
++ list_add_tail(&req->queue, &ep->queue);
++
++ spin_unlock_irqrestore(&udc->lock, flags);
++
++ return 0;
++
++out_of_memory:
++ printk(KERN_ERR "ERROR: Could not allocate DMA memory for endpoint %s\n",
++ ep_name(ep));
++ if (req->packet) {
++ for (i = 0; i < nr_pkts; i++)
++ if (req->packet[i].desc)
++ dma_pool_free(udc->desc_pool,
++ req->packet[i].desc,
++ req->packet[i].desc_dma);
++ kfree(req->packet);
++ }
++
++ return -ENOMEM;
++}
++
++static int husb2_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
++ gfp_t gfp_flags)
++{
++ struct husb2_request *req = to_husb2_req(_req);
++ struct husb2_ep *ep = to_husb2_ep(_ep);
++ struct husb2_udc *udc = ep->udc;
++ unsigned long flags;
++ int direction_in = 0;
++
++ DBG(DBG_GADGET | DBG_QUEUE | DBG_REQ,
++ "%s: queue req %p, len %u\n", ep_name(ep), req, _req->length);
++
++ if (!udc->driver || udc->gadget.speed == USB_SPEED_UNKNOWN)
++ return -ESHUTDOWN;
++ if (!ep->desc)
++ return -ENODEV;
++
++ req->nr_pkts = 0;
++ req->submitted = 0;
++ req->using_dma = 0;
++ req->last_transaction = 0;
++ req->send_zlp = 0;
++
++ BUG_ON(req->packet);
++
++ if (ep_is_in(ep)
++ || (ep_is_control(ep) && (ep->state == DATA_STAGE_IN
++ || ep->state == STATUS_STAGE_IN)))
++ direction_in = 1;
++
++ _req->status = -EINPROGRESS;
++ _req->actual = 0;
++
++ if (ep_can_dma(ep)) {
++ return queue_dma(udc, ep, req, (direction_in
++ ? DMA_TO_DEVICE
++ : DMA_FROM_DEVICE),
++ gfp_flags);
++ } else {
++ spin_lock_irqsave(&udc->lock, flags);
++ list_add_tail(&req->queue, &ep->queue);
++
++ if (direction_in)
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_PK_RDY));
++ else
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(RX_BK_RDY));
++ spin_unlock_irqrestore(&udc->lock, flags);
++ }
++
++ return 0;
++}
++
++static void husb2_update_req(struct husb2_ep *ep, struct husb2_request *req,
++ u32 status)
++{
++ struct husb2_dma_desc *desc;
++ dma_addr_t from;
++ dma_addr_t addr;
++ size_t size;
++ unsigned int i;
++
++ addr = husb2_dma_readl(ep, ADDRESS);
++ req->req.actual = 0;
++
++ for (i = 0; i < req->nr_pkts; i++) {
++ desc = req->packet[i].desc;
++ from = desc->addr;
++ size = HUSB2_BFEXT(DMA_BUF_LEN, desc->ctrl);
++
++ req->req.actual += size;
++
++ DBG(DBG_DMA, " from=%#08x, size=%#zx\n", from, size);
++
++ if (from <= addr && (from + size) >= addr)
++ break;
++ }
++
++ req->req.actual -= HUSB2_BFEXT(DMA_BUF_LEN, status);
++}
++
++static int stop_dma(struct husb2_ep *ep, u32 *pstatus)
++{
++ unsigned int timeout;
++ u32 status;
++
++ /*
++ * Stop the DMA controller. When writing both CH_EN
++ * and LINK to 0, the other bits are not affected.
++ */
++ husb2_dma_writel(ep, CONTROL, 0);
++
++ /* Wait for the FIFO to empty */
++ for (timeout = 40; timeout; --timeout) {
++ status = husb2_dma_readl(ep, STATUS);
++ if (!(status & HUSB2_BIT(DMA_CH_EN)))
++ break;
++ udelay(1);
++ }
++
++ if (pstatus)
++ *pstatus = status;
++
++ if (timeout == 0) {
++ dev_err(&ep->udc->pdev->dev,
++ "%s: timed out waiting for DMA FIFO to empty\n",
++ ep_name(ep));
++ return -ETIMEDOUT;
++ }
++
++ return 0;
++}
++
++static int husb2_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
++{
++ struct husb2_ep *ep = to_husb2_ep(_ep);
++ struct husb2_udc *udc = ep->udc;
++ struct husb2_request *req = to_husb2_req(_req);
++ unsigned long flags;
++ u32 status;
++
++ DBG(DBG_GADGET | DBG_QUEUE, "ep_dequeue: %s, req %p\n", ep_name(ep), req);
++
++ spin_lock_irqsave(&udc->lock, flags);
++
++ if (req->using_dma) {
++ /*
++ * If this request is currently being transferred,
++ * stop the DMA controller and reset the FIFO.
++ */
++ if (ep->queue.next == &req->queue) {
++ status = husb2_dma_readl(ep, STATUS);
++ if (status & HUSB2_BIT(DMA_CH_EN))
++ stop_dma(ep, &status);
++
++#ifdef CONFIG_DEBUG_FS
++ ep->last_dma_status = status;
++#endif
++
++ husb2_writel(udc, EPT_RST,
++ 1 << ep_index(ep));
++
++ husb2_update_req(ep, req, status);
++ }
++ }
++
++ /*
++ * Errors should stop the queue from advancing until the
++ * completion function returns.
++ */
++ list_del_init(&req->queue);
++ spin_unlock_irqrestore(&udc->lock, flags);
++
++ request_complete(ep, req, -ECONNRESET);
++
++ /* Process the next request if any */
++ spin_lock_irqsave(&udc->lock, flags);
++ submit_next_request(ep);
++ spin_unlock_irqrestore(&udc->lock, flags);
++
++ return 0;
++}
++
++static int husb2_ep_set_halt(struct usb_ep *_ep, int value)
++{
++ struct husb2_ep *ep = to_husb2_ep(_ep);
++ struct husb2_udc *udc = ep->udc;
++ unsigned long flags;
++ int ret = 0;
++
++ DBG(DBG_GADGET, "endpoint %s: %s HALT\n", ep_name(ep),
++ value ? "set" : "clear");
++
++ if (!ep->desc) {
++ DBG(DBG_ERR, "Attempted to halt uninitialized ep %s\n",
++ ep_name(ep));
++ return -ENODEV;
++ }
++ if (ep_is_isochronous(ep)) {
++ DBG(DBG_ERR, "Attempted to halt isochronous ep %s\n",
++ ep_name(ep));
++ return -ENOTTY;
++ }
++
++ spin_lock_irqsave(&udc->lock, flags);
++
++ /*
++ * We can't halt IN endpoints while there are still data to be
++ * transferred
++ */
++ if (!list_empty(&ep->queue)
++ || ((value && ep_is_in(ep)
++ && (husb2_ep_readl(ep, STA)
++ & HUSB2_BF(BUSY_BANKS, -1L))))) {
++ ret = -EAGAIN;
++ } else {
++ if (value)
++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(FORCE_STALL));
++ else
++ husb2_ep_writel(ep, CLR_STA, (HUSB2_BIT(FORCE_STALL)
++ | HUSB2_BIT(TOGGLE_SEQ)));
++ husb2_ep_readl(ep, STA);
++ }
++
++ spin_unlock_irqrestore(&udc->lock, flags);
++
++ return ret;
++}
++
++static int husb2_ep_fifo_status(struct usb_ep *_ep)
++{
++ struct husb2_ep *ep = to_husb2_ep(_ep);
++
++ return HUSB2_BFEXT(BYTE_COUNT, husb2_ep_readl(ep, STA));
++}
++
++static void husb2_ep_fifo_flush(struct usb_ep *_ep)
++{
++ struct husb2_ep *ep = to_husb2_ep(_ep);
++ struct husb2_udc *udc = ep->udc;
++
++ husb2_writel(udc, EPT_RST, 1 << ep->index);
++}
++
++struct usb_ep_ops husb2_ep_ops = {
++ .enable = husb2_ep_enable,
++ .disable = husb2_ep_disable,
++ .alloc_request = husb2_ep_alloc_request,
++ .free_request = husb2_ep_free_request,
++ .alloc_buffer = husb2_ep_alloc_buffer,
++ .free_buffer = husb2_ep_free_buffer,
++ .queue = husb2_ep_queue,
++ .dequeue = husb2_ep_dequeue,
++ .set_halt = husb2_ep_set_halt,
++ .fifo_status = husb2_ep_fifo_status,
++ .fifo_flush = husb2_ep_fifo_flush,
++};
++
++static int husb2_udc_get_frame(struct usb_gadget *gadget)
++{
++ struct husb2_udc *udc = to_husb2_udc(gadget);
++
++ return HUSB2_BFEXT(FRAME_NUMBER, husb2_readl(udc, FNUM));
++}
++
++struct usb_gadget_ops husb2_udc_ops = {
++ .get_frame = husb2_udc_get_frame,
++};
++
++#define EP(nam, type, idx, caps) { \
++ .ep = { \
++ .ops = &husb2_ep_ops, \
++ .name = nam, \
++ .maxpacket = type##_FIFO_SIZE, \
++ }, \
++ .udc = &the_udc, \
++ .queue = LIST_HEAD_INIT(husb2_ep[idx].queue), \
++ .fifo_size = type##_FIFO_SIZE, \
++ .nr_banks = type##_NR_BANKS, \
++ .index = idx, \
++ .capabilities = caps, \
++}
++
++static struct husb2_ep husb2_ep[] = {
++ EP("ep0", EP0, 0, 0),
++ EP("ep1in-bulk", BULK, 1, HUSB2_EP_CAP_DMA),
++ EP("ep2out-bulk", BULK, 2, HUSB2_EP_CAP_DMA),
++ EP("ep3in-iso", ISO, 3, HUSB2_EP_CAP_DMA | HUSB2_EP_CAP_ISOC),
++ EP("ep4out-iso", ISO, 4, HUSB2_EP_CAP_DMA | HUSB2_EP_CAP_ISOC),
++ EP("ep5in-int", INT, 5, HUSB2_EP_CAP_DMA),
++ EP("ep6out-int", INT, 6, HUSB2_EP_CAP_DMA),
++};
++#undef EP
++
++static struct usb_endpoint_descriptor husb2_ep0_desc = {
++ .bLength = USB_DT_ENDPOINT_SIZE,
++ .bDescriptorType = USB_DT_ENDPOINT,
++ .bEndpointAddress = 0,
++ .bmAttributes = USB_ENDPOINT_XFER_CONTROL,
++ .wMaxPacketSize = __constant_cpu_to_le16(64),
++ /* FIXME: I have no idea what to put here */
++ .bInterval = 1,
++};
++
++static void nop_release(struct device *dev)
++{
++
++}
++
++static struct husb2_udc the_udc = {
++ .gadget = {
++ .ops = &husb2_udc_ops,
++ .ep0 = &husb2_ep[0].ep,
++ .ep_list = LIST_HEAD_INIT(the_udc.gadget.ep_list),
++ .is_dualspeed = 1,
++ .name = "husb2_udc",
++ .dev = {
++ .bus_id = "gadget",
++ .release = nop_release,
++ },
++ },
++
++ .lock = SPIN_LOCK_UNLOCKED,
++};
++
++static void udc_enable(struct husb2_udc *udc)
++{
++ struct husb2_ep *ep0 = &husb2_ep[0];
++
++ /* Enable the controller */
++ husb2_writel(udc, CTRL, HUSB2_BIT(EN_HUSB2));
++
++ /* Reset all endpoints and enable basic interrupts */
++ husb2_writel(udc, EPT_RST, ~0UL);
++ husb2_writel(udc, INT_ENB, (HUSB2_BIT(DET_SUSPEND)
++ | HUSB2_BIT(END_OF_RESET)
++ | HUSB2_BIT(END_OF_RESUME)));
++
++ /* Configure endpoint 0 */
++ ep0->desc = &husb2_ep0_desc;
++
++ husb2_writel(udc, EPT_RST, 1 << 0);
++ husb2_ep_writel(ep0, CTL_ENB, HUSB2_BIT(EPT_ENABLE));
++ husb2_ep_writel(ep0, CFG, (HUSB2_BF(EPT_SIZE, EP0_EPT_SIZE)
++ | HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_CONTROL)
++ | HUSB2_BF(BK_NUMBER, HUSB2_BK_NUMBER_ONE)));
++
++ husb2_ep_writel(ep0, CTL_ENB, HUSB2_BIT(RX_SETUP));
++ husb2_writel(udc, INT_ENB, (husb2_readl(udc, INT_ENB)
++ | HUSB2_BF(EPT_INT, 1)));
++
++ if (!(husb2_ep_readl(ep0, CFG) & HUSB2_BIT(EPT_MAPPED)))
++ dev_warn(&udc->pdev->dev,
++ "WARNING: EP0 configuration is invalid!\n");
++}
++
++static void udc_disable(struct husb2_udc *udc)
++{
++ udc->gadget.speed = USB_SPEED_UNKNOWN;
++
++ husb2_writel(udc, CTRL, 0);
++}
++
++/*
++ * Called with interrupts disabled and udc->lock held.
++ */
++static void reset_all_endpoints(struct husb2_udc *udc)
++{
++ struct husb2_ep *ep;
++ struct husb2_request *req, *tmp_req;
++
++ husb2_writel(udc, EPT_RST, ~0UL);
++
++ ep = to_husb2_ep(udc->gadget.ep0);
++ list_for_each_entry_safe(req, tmp_req, &ep->queue, queue) {
++ list_del_init(&req->queue);
++ request_complete(ep, req, -ECONNRESET);
++ }
++ BUG_ON(!list_empty(&ep->queue));
++
++ list_for_each_entry(ep, &udc->gadget.ep_list, ep.ep_list) {
++ if (ep->desc)
++ husb2_ep_disable(&ep->ep);
++ }
++}
++
++static struct husb2_ep *get_ep_by_addr(struct husb2_udc *udc, u16 wIndex)
++{
++ struct husb2_ep *ep;
++
++ if ((wIndex & USB_ENDPOINT_NUMBER_MASK) == 0)
++ return to_husb2_ep(udc->gadget.ep0);
++
++ list_for_each_entry (ep, &udc->gadget.ep_list, ep.ep_list) {
++ u8 bEndpointAddress;
++
++ if (!ep->desc)
++ continue;
++ bEndpointAddress = ep->desc->bEndpointAddress;
++ if ((wIndex ^ bEndpointAddress) & USB_DIR_IN)
++ continue;
++ if ((wIndex & USB_ENDPOINT_NUMBER_MASK)
++ == (bEndpointAddress & USB_ENDPOINT_NUMBER_MASK))
++ return ep;
++ }
++
++ return NULL;
++}
++
++/* Called with interrupts disabled and udc->lock held */
++static inline void set_protocol_stall(struct husb2_udc *udc,
++ struct husb2_ep *ep)
++{
++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(FORCE_STALL));
++ ep->state = WAIT_FOR_SETUP;
++}
++
++static inline int is_stalled(struct husb2_udc *udc, struct husb2_ep *ep)
++{
++ if (husb2_ep_readl(ep, STA) & HUSB2_BIT(FORCE_STALL))
++ return 1;
++ return 0;
++}
++
++static inline void set_address(struct husb2_udc *udc, unsigned int addr)
++{
++ u32 regval;
++
++ DBG(DBG_BUS, "setting address %u...\n", addr);
++ regval = husb2_readl(udc, CTRL);
++ regval = HUSB2_BFINS(DEV_ADDR, addr, regval);
++ husb2_writel(udc, CTRL, regval);
++}
++
++static int handle_ep0_setup(struct husb2_udc *udc, struct husb2_ep *ep,
++ struct usb_ctrlrequest *crq)
++{
++ switch (crq->bRequest) {
++ case USB_REQ_GET_STATUS: {
++ u16 status;
++
++ if (crq->bRequestType == (USB_DIR_IN | USB_RECIP_DEVICE)) {
++ /* Self-powered, no remote wakeup */
++ status = __constant_cpu_to_le16(1 << 0);
++ } else if (crq->bRequestType
++ == (USB_DIR_IN | USB_RECIP_INTERFACE)) {
++ status = __constant_cpu_to_le16(0);
++ } else if (crq->bRequestType
++ == (USB_DIR_IN | USB_RECIP_ENDPOINT)) {
++ struct husb2_ep *target;
++
++ target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex));
++ if (!target)
++ goto stall;
++
++ status = 0;
++ if (is_stalled(udc, target))
++ status |= __constant_cpu_to_le16(1);
++ } else {
++ goto delegate;
++ }
++
++ /* Write directly to the FIFO. No queueing is done. */
++ if(crq->wLength != __constant_cpu_to_le16(sizeof(status)))
++ goto stall;
++ ep->state = DATA_STAGE_IN;
++ __raw_writew(status, ep->fifo);
++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(TX_PK_RDY));
++ break;
++ }
++
++ case USB_REQ_CLEAR_FEATURE: {
++ if (crq->bRequestType == USB_RECIP_DEVICE) {
++ /* We don't support TEST_MODE */
++ goto stall;
++ } else if (crq->bRequestType == USB_RECIP_ENDPOINT) {
++ struct husb2_ep *target;
++
++ if (crq->wValue != __constant_cpu_to_le16(USB_ENDPOINT_HALT)
++ || crq->wLength != __constant_cpu_to_le16(0))
++ goto stall;
++ target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex));
++ if (!target)
++ goto stall;
++
++ husb2_ep_writel(target, CLR_STA, (HUSB2_BIT(FORCE_STALL)
++ | HUSB2_BIT(TOGGLE_SEQ)));
++ } else {
++ goto delegate;
++ }
++
++ send_status(udc, ep);
++ break;
++ }
++
++ case USB_REQ_SET_FEATURE: {
++ if (crq->bRequestType == USB_RECIP_DEVICE) {
++ /* We don't support TEST_MODE */
++ goto stall;
++ } else if (crq->bRequestType == USB_RECIP_ENDPOINT) {
++ struct husb2_ep *target;
++
++ if (crq->wValue != __constant_cpu_to_le16(USB_ENDPOINT_HALT)
++ || crq->wLength != __constant_cpu_to_le16(0))
++ goto stall;
++
++ target = get_ep_by_addr(udc, le16_to_cpu(crq->wIndex));
++ if (!target)
++ goto stall;
++
++ husb2_ep_writel(target, SET_STA, HUSB2_BIT(FORCE_STALL));
++ } else
++ goto delegate;
++
++ send_status(udc, ep);
++ break;
++ }
++
++ case USB_REQ_SET_ADDRESS:
++ if (crq->bRequestType != (USB_DIR_OUT | USB_RECIP_DEVICE))
++ goto delegate;
++
++ set_address(udc, le16_to_cpu(crq->wValue));
++ send_status(udc, ep);
++ ep->state = STATUS_STAGE_ADDR;
++ break;
++
++ default:
++ delegate:
++ return udc->driver->setup(&udc->gadget, crq);
++ }
++
++ return 0;
++
++stall:
++ printk(KERN_ERR
++ "udc: %s: Invalid setup request: %02x.%02x v%04x i%04x l%d, "
++ "halting endpoint...\n",
++ ep_name(ep), crq->bRequestType, crq->bRequest,
++ le16_to_cpu(crq->wValue), le16_to_cpu(crq->wIndex),
++ le16_to_cpu(crq->wLength));
++ set_protocol_stall(udc, ep);
++ return -1;
++}
++
++static void husb2_control_irq(struct husb2_udc *udc, struct husb2_ep *ep)
++{
++ struct husb2_request *req;
++ u32 epstatus;
++ u32 epctrl;
++
++restart:
++ epstatus = husb2_ep_readl(ep, STA);
++ epctrl = husb2_ep_readl(ep, CTL);
++
++ DBG(DBG_INT, "%s: interrupt, status: 0x%08x\n",
++ ep_name(ep), epstatus);
++
++ req = NULL;
++ if (!list_empty(&ep->queue))
++ req = list_entry(ep->queue.next,
++ struct husb2_request, queue);
++
++ if ((epctrl & HUSB2_BIT(TX_PK_RDY))
++ && !(epstatus & HUSB2_BIT(TX_PK_RDY))) {
++ DBG(DBG_BUS, "tx pk rdy: %d\n", ep->state);
++
++ if (req->submitted)
++ next_fifo_transaction(ep, req);
++ else
++ submit_request(ep, req);
++
++ if (req->last_transaction) {
++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(TX_PK_RDY));
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_COMPLETE));
++ }
++ goto restart;
++ }
++ if ((epstatus & epctrl) & HUSB2_BIT(TX_COMPLETE)) {
++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(TX_COMPLETE));
++ DBG(DBG_BUS, "txc: %d\n", ep->state);
++
++ switch (ep->state) {
++ case DATA_STAGE_IN:
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(RX_BK_RDY));
++ husb2_ep_writel(ep, CTL_DIS,
++ HUSB2_BIT(TX_COMPLETE));
++ ep->state = STATUS_STAGE_OUT;
++ break;
++ case STATUS_STAGE_ADDR:
++ /* Activate our new address */
++ husb2_writel(udc, CTRL, (husb2_readl(udc, CTRL)
++ | HUSB2_BIT(FADDR_EN)));
++ husb2_ep_writel(ep, CTL_DIS,
++ HUSB2_BIT(TX_COMPLETE));
++ ep->state = WAIT_FOR_SETUP;
++ break;
++ case STATUS_STAGE_IN:
++ if (req) {
++ list_del_init(&req->queue);
++ request_complete(ep, req, 0);
++ submit_next_request(ep);
++ }
++ BUG_ON(!list_empty(&ep->queue));
++ husb2_ep_writel(ep, CTL_DIS,
++ HUSB2_BIT(TX_COMPLETE));
++ ep->state = WAIT_FOR_SETUP;
++ break;
++ default:
++ printk(KERN_ERR
++ "udc: %s: TXCOMP: Invalid endpoint state %d, "
++ "halting endpoint...\n",
++ ep_name(ep), ep->state);
++ set_protocol_stall(udc, ep);
++ break;
++ }
++
++ goto restart;
++ }
++ if ((epstatus & epctrl) & HUSB2_BIT(RX_BK_RDY)) {
++ DBG(DBG_BUS, "rxc: %d\n", ep->state);
++
++ switch (ep->state) {
++ case STATUS_STAGE_OUT:
++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(RX_BK_RDY));
++
++ if (req) {
++ list_del_init(&req->queue);
++ request_complete(ep, req, 0);
++ }
++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(RX_BK_RDY));
++ ep->state = WAIT_FOR_SETUP;
++ break;
++
++ case DATA_STAGE_OUT:
++ receive_data(ep);
++ break;
++
++ default:
++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(RX_BK_RDY));
++ set_protocol_stall(udc, ep);
++ printk(KERN_ERR
++ "udc: %s: RXRDY: Invalid endpoint state %d, "
++ "halting endpoint...\n",
++ ep_name(ep), ep->state);
++ break;
++ }
++
++ goto restart;
++ }
++ if (epstatus & HUSB2_BIT(RX_SETUP)) {
++ union {
++ struct usb_ctrlrequest crq;
++ unsigned long data[2];
++ } crq;
++ unsigned int pkt_len;
++ int ret;
++
++ if (ep->state != WAIT_FOR_SETUP) {
++ /*
++ * Didn't expect a SETUP packet at this
++ * point. Clean up any pending requests (which
++ * may be successful).
++ */
++ int status = -EPROTO;
++
++ /*
++ * RXRDY is dropped when SETUP packets arrive.
++ * Just pretend we received the status packet.
++ */
++ if (ep->state == STATUS_STAGE_OUT)
++ status = 0;
++
++ if (req) {
++ list_del_init(&req->queue);
++ request_complete(ep, req, status);
++ }
++ BUG_ON(!list_empty(&ep->queue));
++ }
++
++ pkt_len = HUSB2_BFEXT(BYTE_COUNT, husb2_ep_readl(ep, STA));
++ DBG(DBG_HW, "Packet length: %u\n", pkt_len);
++ BUG_ON(pkt_len != sizeof(crq));
++
++ DBG(DBG_FIFO, "Copying ctrl request from 0x%p:\n", ep->fifo);
++ copy_from_fifo(crq.data, ep->fifo, sizeof(crq));
++
++ /* Free up one bank in the FIFO so that we can
++ * generate or receive a reply right away. */
++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(RX_SETUP));
++
++ /* printk(KERN_DEBUG "setup: %d: %02x.%02x\n",
++ ep->state, crq.crq.bRequestType,
++ crq.crq.bRequest); */
++
++ if (crq.crq.bRequestType & USB_DIR_IN) {
++ /*
++ * The USB 2.0 spec states that "if wLength is
++ * zero, there is no data transfer phase."
++ * However, testusb #14 seems to actually
++ * expect a data phase even if wLength = 0...
++ */
++ ep->state = DATA_STAGE_IN;
++ } else {
++ if (crq.crq.wLength != __constant_cpu_to_le16(0))
++ ep->state = DATA_STAGE_OUT;
++ else
++ ep->state = STATUS_STAGE_IN;
++ }
++
++ ret = -1;
++ if (ep->index == 0)
++ ret = handle_ep0_setup(udc, ep, &crq.crq);
++ else
++ ret = udc->driver->setup(&udc->gadget, &crq.crq);
++
++ DBG(DBG_BUS, "req %02x.%02x, length %d, state %d, ret %d\n",
++ crq.crq.bRequestType, crq.crq.bRequest,
++ le16_to_cpu(crq.crq.wLength), ep->state, ret);
++
++ if (ret < 0) {
++ /* Let the host know that we failed */
++ set_protocol_stall(udc, ep);
++ }
++ }
++}
++
++static void husb2_ep_irq(struct husb2_udc *udc, struct husb2_ep *ep)
++{
++ struct husb2_request *req;
++ u32 epstatus;
++ u32 epctrl;
++
++ epstatus = husb2_ep_readl(ep, STA);
++ epctrl = husb2_ep_readl(ep, CTL);
++
++ DBG(DBG_INT, "%s: interrupt, status: 0x%08x\n",
++ ep_name(ep), epstatus);
++
++ while ((epctrl & HUSB2_BIT(TX_PK_RDY))
++ && !(epstatus & HUSB2_BIT(TX_PK_RDY))) {
++ BUG_ON(!ep_is_in(ep));
++
++ DBG(DBG_BUS, "%s: TX PK ready\n", ep_name(ep));
++
++ if (list_empty(&ep->queue)) {
++ dev_warn(&udc->pdev->dev, "ep_irq: queue empty\n");
++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(TX_PK_RDY));
++ return;
++ }
++
++ req = list_entry(ep->queue.next, struct husb2_request, queue);
++
++ if (req->using_dma) {
++ BUG_ON(!req->send_zlp);
++
++ /* Send a zero-length packet */
++ husb2_ep_writel(ep, SET_STA,
++ HUSB2_BIT(TX_PK_RDY));
++ husb2_ep_writel(ep, CTL_DIS,
++ HUSB2_BIT(TX_PK_RDY));
++ list_del_init(&req->queue);
++ submit_next_request(ep);
++ request_complete(ep, req, 0);
++ } else {
++ if (req->submitted)
++ next_fifo_transaction(ep, req);
++ else
++ submit_request(ep, req);
++
++ if (req->last_transaction) {
++ list_del_init(&req->queue);
++ submit_next_request(ep);
++ request_complete(ep, req, 0);
++ }
++ }
++
++ epstatus = husb2_ep_readl(ep, STA);
++ epctrl = husb2_ep_readl(ep, CTL);
++ }
++ if ((epstatus & epctrl) & HUSB2_BIT(RX_BK_RDY)) {
++ BUG_ON(ep_is_in(ep));
++
++ DBG(DBG_BUS, "%s: RX data ready\n", ep_name(ep));
++ receive_data(ep);
++ husb2_ep_writel(ep, CLR_STA, HUSB2_BIT(RX_BK_RDY));
++ }
++}
++
++static void husb2_dma_irq(struct husb2_udc *udc, struct husb2_ep *ep)
++{
++ struct husb2_request *req;
++ u32 status, control, pending;
++
++ status = husb2_dma_readl(ep, STATUS);
++ control = husb2_dma_readl(ep, CONTROL);
++#ifdef CONFIG_DEBUG_FS
++ ep->last_dma_status = status;
++#endif
++ pending = status & control;
++ DBG(DBG_INT, "dma irq, status=%#08x, pending=%#08x, control=%#08x\n",
++ status, pending, control);
++
++ BUG_ON(status & HUSB2_BIT(DMA_CH_EN));
++
++ if (list_empty(&ep->queue))
++ /* Might happen if a reset comes along at the right moment */
++ return;
++
++ if (pending & (HUSB2_BIT(DMA_END_TR_ST) | HUSB2_BIT(DMA_END_BUF_ST))) {
++ req = list_entry(ep->queue.next, struct husb2_request, queue);
++ husb2_update_req(ep, req, status);
++
++ if (req->send_zlp) {
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(TX_PK_RDY));
++ } else {
++ list_del_init(&req->queue);
++ submit_next_request(ep);
++ request_complete(ep, req, 0);
++ }
++ }
++}
++
++static irqreturn_t husb2_udc_irq(int irq, void *devid, struct pt_regs *regs)
++{
++ struct husb2_udc *udc = devid;
++ u32 status;
++ u32 dma_status;
++ u32 ep_status;
++
++ spin_lock(&udc->lock);
++
++ status = husb2_readl(udc, INT_STA);
++ DBG(DBG_INT, "irq, status=%#08x\n", status);
++
++ if (status & HUSB2_BIT(DET_SUSPEND)) {
++ husb2_writel(udc, INT_CLR, HUSB2_BIT(DET_SUSPEND));
++ //DBG(DBG_BUS, "Suspend detected\n");
++ if (udc->gadget.speed != USB_SPEED_UNKNOWN
++ && udc->driver && udc->driver->suspend)
++ udc->driver->suspend(&udc->gadget);
++ }
++
++ if (status & HUSB2_BIT(WAKE_UP)) {
++ husb2_writel(udc, INT_CLR, HUSB2_BIT(WAKE_UP));
++ //DBG(DBG_BUS, "Wake Up CPU detected\n");
++ }
++
++ if (status & HUSB2_BIT(END_OF_RESUME)) {
++ husb2_writel(udc, INT_CLR, HUSB2_BIT(END_OF_RESUME));
++ DBG(DBG_BUS, "Resume detected\n");
++ if (udc->gadget.speed != USB_SPEED_UNKNOWN
++ && udc->driver && udc->driver->resume)
++ udc->driver->resume(&udc->gadget);
++ }
++
++ dma_status = HUSB2_BFEXT(DMA_INT, status);
++ if (dma_status) {
++ int i;
++
++ for (i = 1; i < HUSB2_NR_ENDPOINTS; i++)
++ if (dma_status & (1 << i))
++ husb2_dma_irq(udc, &husb2_ep[i]);
++ }
++
++ ep_status = HUSB2_BFEXT(EPT_INT, status);
++ if (ep_status) {
++ int i;
++
++ for (i = 0; i < HUSB2_NR_ENDPOINTS; i++)
++ if (ep_status & (1 << i)) {
++ if (ep_is_control(&husb2_ep[i]))
++ husb2_control_irq(udc, &husb2_ep[i]);
++ else
++ husb2_ep_irq(udc, &husb2_ep[i]);
++ }
++ }
++
++ if (status & HUSB2_BIT(END_OF_RESET)) {
++ husb2_writel(udc, INT_CLR, HUSB2_BIT(END_OF_RESET));
++ if (status & HUSB2_BIT(HIGH_SPEED)) {
++ DBG(DBG_BUS, "High-speed bus reset detected\n");
++ udc->gadget.speed = USB_SPEED_HIGH;
++ } else {
++ DBG(DBG_BUS, "Full-speed bus reset detected\n");
++ udc->gadget.speed = USB_SPEED_FULL;
++ }
++ /* Better start from scratch... */
++ reset_all_endpoints(udc);
++ husb2_ep[0].state = WAIT_FOR_SETUP;
++ udc_enable(udc);
++ }
++
++ spin_unlock(&udc->lock);
++
++ return IRQ_HANDLED;
++}
++
++int usb_gadget_register_driver(struct usb_gadget_driver *driver)
++{
++ struct husb2_udc *udc = &the_udc;
++ int ret;
++
++ spin_lock(&udc->lock);
++
++ ret = -ENODEV;
++ if (!udc->pdev)
++ goto out;
++ ret = -EBUSY;
++ if (udc->driver)
++ goto out;
++
++ udc->driver = driver;
++ udc->gadget.dev.driver = &driver->driver;
++
++ device_add(&udc->gadget.dev);
++ ret = driver->bind(&udc->gadget);
++ if (ret) {
++ DBG(DBG_ERR, "Could not bind to driver %s: error %d\n",
++ driver->driver.name, ret);
++ device_del(&udc->gadget.dev);
++
++ udc->driver = NULL;
++ udc->gadget.dev.driver = NULL;
++ goto out;
++ }
++
++ /* TODO: Create sysfs files */
++
++ DBG(DBG_GADGET, "registered driver `%s'\n", driver->driver.name);
++ udc_enable(udc);
++
++out:
++ spin_unlock(&udc->lock);
++ return ret;
++}
++EXPORT_SYMBOL(usb_gadget_register_driver);
++
++int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
++{
++ struct husb2_udc *udc = &the_udc;
++ int ret;
++
++ spin_lock(&udc->lock);
++
++ ret = -ENODEV;
++ if (!udc->pdev)
++ goto out;
++ ret = -EINVAL;
++ if (driver != udc->driver)
++ goto out;
++
++ local_irq_disable();
++ udc_disable(udc);
++ local_irq_enable();
++
++ driver->unbind(&udc->gadget);
++ udc->driver = NULL;
++
++ device_del(&udc->gadget.dev);
++
++ /* TODO: Remove sysfs files */
++
++ DBG(DBG_GADGET, "unregistered driver `%s'\n", driver->driver.name);
++
++out:
++ spin_unlock(&udc->lock);
++ return ret;
++}
++EXPORT_SYMBOL(usb_gadget_unregister_driver);
++
++static int __devinit husb2_udc_probe(struct platform_device *pdev)
++{
++ struct resource *regs, *fifo;
++ struct clk *pclk, *hclk;
++ struct husb2_udc *udc = &the_udc;
++ int irq, ret, i;
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, CTRL_IOMEM_ID);
++ fifo = platform_get_resource(pdev, IORESOURCE_MEM, FIFO_IOMEM_ID);
++ if (!regs || !fifo)
++ return -ENXIO;
++
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0)
++ return irq;
++
++ pclk = clk_get(&pdev->dev, "pclk");
++ if (IS_ERR(pclk))
++ return PTR_ERR(pclk);
++ hclk = clk_get(&pdev->dev, "hclk");
++ if (IS_ERR(hclk)) {
++ ret = PTR_ERR(hclk);
++ goto out_put_pclk;
++ }
++
++ clk_enable(pclk);
++ clk_enable(hclk);
++
++ udc->pdev = pdev;
++ udc->pclk = pclk;
++ udc->hclk = hclk;
++
++ ret = -ENOMEM;
++ udc->regs = ioremap(regs->start, regs->end - regs->start + 1);
++ if (!udc->regs) {
++ dev_err(&pdev->dev, "Unable to map I/O memory, aborting.\n");
++ goto out_disable_clocks;
++ }
++ dev_info(&pdev->dev, "MMIO registers at 0x%08lx mapped at %p\n",
++ (unsigned long)regs->start, udc->regs);
++ udc->fifo = ioremap(fifo->start, fifo->end - fifo->start + 1);
++ if (!udc->fifo) {
++ dev_err(&pdev->dev, "Unable to map FIFO, aborting.\n");
++ goto out_unmap_regs;
++ }
++ dev_info(&pdev->dev, "FIFO at 0x%08lx mapped at %p\n",
++ (unsigned long)fifo->start, udc->fifo);
++
++ device_initialize(&udc->gadget.dev);
++ udc->gadget.dev.parent = &pdev->dev;
++ udc->gadget.dev.dma_mask = pdev->dev.dma_mask;
++
++ /* The 3-word descriptors must be 4-word aligned... */
++ udc->desc_pool = dma_pool_create("husb2-desc", &pdev->dev,
++ sizeof(struct husb2_dma_desc),
++ 16, 0);
++ if (!udc->desc_pool) {
++ dev_err(&pdev->dev, "Cannot create descriptor DMA pool\n");
++ goto out_unmap_fifo;
++ }
++
++ platform_set_drvdata(pdev, udc);
++
++ udc_disable(udc);
++
++ INIT_LIST_HEAD(&husb2_ep[0].ep.ep_list);
++ husb2_ep[0].ep_regs = udc->regs + HUSB2_EPT_BASE(0);
++ husb2_ep[0].dma_regs = udc->regs + HUSB2_DMA_BASE(0);
++ husb2_ep[0].fifo = udc->fifo + HUSB2_FIFO_BASE(0);
++ for (i = 1; i < ARRAY_SIZE(husb2_ep); i++) {
++ struct husb2_ep *ep = &husb2_ep[i];
++
++ ep->ep_regs = udc->regs + HUSB2_EPT_BASE(i);
++ ep->dma_regs = udc->regs + HUSB2_DMA_BASE(i);
++ ep->fifo = udc->fifo + HUSB2_FIFO_BASE(i);
++
++ list_add_tail(&ep->ep.ep_list, &udc->gadget.ep_list);
++ }
++
++ ret = request_irq(irq, husb2_udc_irq, SA_SAMPLE_RANDOM,
++ "husb2_udc", udc);
++ if (ret) {
++ dev_err(&pdev->dev, "Cannot request irq %d (error %d)\n",
++ irq, ret);
++ goto out_free_pool;
++ }
++ udc->irq = irq;
++
++ husb2_init_debugfs(udc);
++
++ return 0;
++
++out_free_pool:
++ dma_pool_destroy(udc->desc_pool);
++out_unmap_fifo:
++ iounmap(udc->fifo);
++out_unmap_regs:
++ iounmap(udc->regs);
++out_disable_clocks:
++ clk_disable(hclk);
++ clk_disable(pclk);
++ clk_put(hclk);
++out_put_pclk:
++ clk_put(pclk);
++
++ platform_set_drvdata(pdev, NULL);
++
++ return ret;
++}
++
++static int __devexit husb2_udc_remove(struct platform_device *pdev)
++{
++ struct husb2_udc *udc;
++
++ udc = platform_get_drvdata(pdev);
++ if (!udc)
++ return 0;
++
++ husb2_cleanup_debugfs(udc);
++
++ free_irq(udc->irq, udc);
++ dma_pool_destroy(udc->desc_pool);
++ iounmap(udc->fifo);
++ iounmap(udc->regs);
++ clk_disable(udc->hclk);
++ clk_disable(udc->pclk);
++ clk_put(udc->hclk);
++ clk_put(udc->pclk);
++ platform_set_drvdata(pdev, NULL);
++
++ return 0;
++}
++
++static struct platform_driver udc_driver = {
++ .probe = husb2_udc_probe,
++ .remove = __devexit_p(husb2_udc_remove),
++ .driver = {
++ .name = "usb",
++ },
++};
++
++static int __init udc_init(void)
++{
++ printk(KERN_INFO "husb2device: Driver version %s\n", DRIVER_VERSION);
++ return platform_driver_register(&udc_driver);
++}
++module_init(udc_init);
++
++static void __exit udc_exit(void)
++{
++ platform_driver_unregister(&udc_driver);
++}
++module_exit(udc_exit);
++
++MODULE_DESCRIPTION("Atmel HUSB2 Device Controller driver");
++MODULE_AUTHOR("Haavard Skinnemoen <hskinnemoen@atmel.com>");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.h 2006-11-02 16:03:44.000000000 +0100
+@@ -0,0 +1,406 @@
++/*
++ * Driver for the Atmel HUSB2device high speed USB device controller
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __LINUX_USB_GADGET_HUSB2_UDC_H__
++#define __LINUX_USB_GADGET_HUSB2_UDC_H__
++
++/* USB register offsets */
++#define HUSB2_CTRL 0x0000
++#define HUSB2_FNUM 0x0004
++#define HUSB2_INT_ENB 0x0010
++#define HUSB2_INT_STA 0x0014
++#define HUSB2_INT_CLR 0x0018
++#define HUSB2_EPT_RST 0x001c
++#define HUSB2_TST_SOF_CNT 0x00d0
++#define HUSB2_TST_CNT_A 0x00d4
++#define HUSB2_TST_CNT_B 0x00d8
++#define HUSB2_TST_MODE_REG 0x00dc
++#define HUSB2_TST 0x00f0
++
++/* USB endpoint register offsets */
++#define HUSB2_EPT_CFG 0x0000
++#define HUSB2_EPT_CTL_ENB 0x0004
++#define HUSB2_EPT_CTL_DIS 0x0008
++#define HUSB2_EPT_CTL 0x000c
++#define HUSB2_EPT_SET_STA 0x0014
++#define HUSB2_EPT_CLR_STA 0x0018
++#define HUSB2_EPT_STA 0x001c
++
++/* USB DMA register offsets */
++#define HUSB2_DMA_NXT_DSC 0x0000
++#define HUSB2_DMA_ADDRESS 0x0004
++#define HUSB2_DMA_CONTROL 0x0008
++#define HUSB2_DMA_STATUS 0x000c
++
++/* Bitfields in CTRL */
++#define HUSB2_DEV_ADDR_OFFSET 0
++#define HUSB2_DEV_ADDR_SIZE 7
++#define HUSB2_FADDR_EN_OFFSET 7
++#define HUSB2_FADDR_EN_SIZE 1
++#define HUSB2_EN_HUSB2_OFFSET 8
++#define HUSB2_EN_HUSB2_SIZE 1
++#define HUSB2_DETACH_OFFSET 9
++#define HUSB2_DETACH_SIZE 1
++#define HUSB2_REMOTE_WAKE_UP_OFFSET 10
++#define HUSB2_REMOTE_WAKE_UP_SIZE 1
++
++/* Bitfields in FNUM */
++#define HUSB2_MICRO_FRAME_NUM_OFFSET 0
++#define HUSB2_MICRO_FRAME_NUM_SIZE 3
++#define HUSB2_FRAME_NUMBER_OFFSET 3
++#define HUSB2_FRAME_NUMBER_SIZE 11
++#define HUSB2_FRAME_NUM_ERROR_OFFSET 31
++#define HUSB2_FRAME_NUM_ERROR_SIZE 1
++
++/* Bitfields in INT_ENB/INT_STA/INT_CLR */
++#define HUSB2_HIGH_SPEED_OFFSET 0
++#define HUSB2_HIGH_SPEED_SIZE 1
++#define HUSB2_DET_SUSPEND_OFFSET 1
++#define HUSB2_DET_SUSPEND_SIZE 1
++#define HUSB2_MICRO_SOF_OFFSET 2
++#define HUSB2_MICRO_SOF_SIZE 1
++#define HUSB2_SOF_OFFSET 3
++#define HUSB2_SOF_SIZE 1
++#define HUSB2_END_OF_RESET_OFFSET 4
++#define HUSB2_END_OF_RESET_SIZE 1
++#define HUSB2_WAKE_UP_OFFSET 5
++#define HUSB2_WAKE_UP_SIZE 1
++#define HUSB2_END_OF_RESUME_OFFSET 6
++#define HUSB2_END_OF_RESUME_SIZE 1
++#define HUSB2_UPSTREAM_RESUME_OFFSET 7
++#define HUSB2_UPSTREAM_RESUME_SIZE 1
++#define HUSB2_EPT_INT_OFFSET 8
++#define HUSB2_EPT_INT_SIZE 16
++#define HUSB2_DMA_INT_OFFSET 24
++#define HUSB2_DMA_INT_SIZE 8
++
++/* Bitfields in EPT_RST */
++#define HUSB2_RST_OFFSET 0
++#define HUSB2_RST_SIZE 16
++
++/* Bitfields in TST_SOF_CNT */
++#define HUSB2_SOF_CNT_MAX_OFFSET 0
++#define HUSB2_SOF_CNT_MAX_SIZE 7
++#define HUSB2_SOF_CNT_LOAD_OFFSET 7
++#define HUSB2_SOF_CNT_LOAD_SIZE 1
++
++/* Bitfields in TST_CNT_A */
++#define HUSB2_CNT_A_MAX_OFFSET 0
++#define HUSB2_CNT_A_MAX_SIZE 7
++#define HUSB2_CNT_A_LOAD_OFFSET 7
++#define HUSB2_CNT_A_LOAD_SIZE 1
++
++/* Bitfields in TST_CNT_B */
++#define HUSB2_CNT_B_MAX_OFFSET 0
++#define HUSB2_CNT_B_MAX_SIZE 7
++#define HUSB2_CNT_B_LOAD_OFFSET 7
++#define HUSB2_CNT_B_LOAD_SIZE 1
++
++/* Bitfields in TST_MODE_REG */
++#define HUSB2_TST_MODE_OFFSET 0
++#define HUSB2_TST_MODE_SIZE 6
++
++/* Bitfields in HUSB2_TST */
++#define HUSB2_SPEED_CFG_OFFSET 0
++#define HUSB2_SPEED_CFG_SIZE 2
++#define HUSB2_TST_J_MODE_OFFSET 2
++#define HUSB2_TST_J_MODE_SIZE 1
++#define HUSB2_TST_K_MODE_OFFSET 3
++#define HUSB2_TST_K_MODE_SIZE 1
++#define HUSB2_TST_PKT_MODE_OFFSE 4
++#define HUSB2_TST_PKT_MODE_SIZE 1
++#define HUSB2_OPMODE2_OFFSET 5
++#define HUSB2_OPMODE2_SIZE 1
++
++/* Bitfields in EPT_CFG */
++#define HUSB2_EPT_SIZE_OFFSET 0
++#define HUSB2_EPT_SIZE_SIZE 3
++#define HUSB2_EPT_DIR_OFFSET 3
++#define HUSB2_EPT_DIR_SIZE 1
++#define HUSB2_EPT_TYPE_OFFSET 4
++#define HUSB2_EPT_TYPE_SIZE 2
++#define HUSB2_BK_NUMBER_OFFSET 6
++#define HUSB2_BK_NUMBER_SIZE 2
++#define HUSB2_NB_TRANS_OFFSET 8
++#define HUSB2_NB_TRANS_SIZE 2
++#define HUSB2_EPT_MAPPED_OFFSET 31
++#define HUSB2_EPT_MAPPED_SIZE 1
++
++/* Bitfields in EPT_CTL/EPT_CTL_ENB/EPT_CTL_DIS */
++#define HUSB2_EPT_ENABLE_OFFSET 0
++#define HUSB2_EPT_ENABLE_SIZE 1
++#define HUSB2_AUTO_VALID_OFFSET 1
++#define HUSB2_AUTO_VALID_SIZE 1
++#define HUSB2_INT_DIS_DMA_OFFSET 3
++#define HUSB2_INT_DIS_DMA_SIZE 1
++#define HUSB2_NYET_DIS_OFFSET 4
++#define HUSB2_NYET_DIS_SIZE 1
++#define HUSB2_DATAX_RX_OFFSET 6
++#define HUSB2_DATAX_RX_SIZE 1
++#define HUSB2_MDATA_RX_OFFSET 7
++#define HUSB2_MDATA_RX_SIZE 1
++/* Bits 8-15 and 31 enable interrupts for respective bits in EPT_STA */
++#define HUSB2_BUSY_BANK_IE_OFFSET 18
++#define HUSB2_BUSY_BANK_IE_SIZE 1
++
++/* Bitfields in EPT_SET_STA/EPT_CLR_STA/EPT_STA */
++#define HUSB2_FORCE_STALL_OFFSET 5
++#define HUSB2_FORCE_STALL_SIZE 1
++#define HUSB2_TOGGLE_SEQ_OFFSET 6
++#define HUSB2_TOGGLE_SEQ_SIZE 2
++#define HUSB2_ERR_OVFLW_OFFSET 8
++#define HUSB2_ERR_OVFLW_SIZE 1
++#define HUSB2_RX_BK_RDY_OFFSET 9
++#define HUSB2_RX_BK_RDY_SIZE 1
++#define HUSB2_KILL_BANK_OFFSET 9
++#define HUSB2_KILL_BANK_SIZE 1
++#define HUSB2_TX_COMPLETE_OFFSET 10
++#define HUSB2_TX_COMPLETE_SIZE 1
++#define HUSB2_TX_PK_RDY_OFFSET 11
++#define HUSB2_TX_PK_RDY_SIZE 1
++#define HUSB2_ISO_ERR_TRANS_OFFSET 11
++#define HUSB2_ISO_ERR_TRANS_SIZE 1
++#define HUSB2_RX_SETUP_OFFSET 12
++#define HUSB2_RX_SETUP_SIZE 1
++#define HUSB2_ISO_ERR_FLOW_OFFSET 12
++#define HUSB2_ISO_ERR_FLOW_SIZE 1
++#define HUSB2_STALL_SENT_OFFSET 13
++#define HUSB2_STALL_SENT_SIZE 1
++#define HUSB2_ISO_ERR_CRC_OFFSET 13
++#define HUSB2_ISO_ERR_CRC_SIZE 1
++#define HUSB2_ISO_ERR_NBTRANS_OFFSET 13
++#define HUSB2_ISO_ERR_NBTRANS_SIZE 1
++#define HUSB2_NAK_IN_OFFSET 14
++#define HUSB2_NAK_IN_SIZE 1
++#define HUSB2_ISO_ERR_FLUSH_OFFSET 14
++#define HUSB2_ISO_ERR_FLUSH_SIZE 1
++#define HUSB2_NAK_OUT_OFFSET 15
++#define HUSB2_NAK_OUT_SIZE 1
++#define HUSB2_CURRENT_BANK_OFFSET 16
++#define HUSB2_CURRENT_BANK_SIZE 2
++#define HUSB2_BUSY_BANKS_OFFSET 18
++#define HUSB2_BUSY_BANKS_SIZE 2
++#define HUSB2_BYTE_COUNT_OFFSET 20
++#define HUSB2_BYTE_COUNT_SIZE 11
++#define HUSB2_SHORT_PACKET_OFFSET 31
++#define HUSB2_SHORT_PACKET_SIZE 1
++
++/* Bitfields in DMA_CONTROL */
++#define HUSB2_DMA_CH_EN_OFFSET 0
++#define HUSB2_DMA_CH_EN_SIZE 1
++#define HUSB2_DMA_LINK_OFFSET 1
++#define HUSB2_DMA_LINK_SIZE 1
++#define HUSB2_DMA_END_TR_EN_OFFSET 2
++#define HUSB2_DMA_END_TR_EN_SIZE 1
++#define HUSB2_DMA_END_BUF_EN_OFFSET 3
++#define HUSB2_DMA_END_BUF_EN_SIZE 1
++#define HUSB2_DMA_END_TR_IE_OFFSET 4
++#define HUSB2_DMA_END_TR_IE_SIZE 1
++#define HUSB2_DMA_END_BUF_IE_OFFSET 5
++#define HUSB2_DMA_END_BUF_IE_SIZE 1
++#define HUSB2_DMA_DESC_LOAD_IE_OFFSET 6
++#define HUSB2_DMA_DESC_LOAD_IE_SIZE 1
++#define HUSB2_DMA_BURST_LOCK_OFFSET 7
++#define HUSB2_DMA_BURST_LOCK_SIZE 1
++#define HUSB2_DMA_BUF_LEN_OFFSET 16
++#define HUSB2_DMA_BUF_LEN_SIZE 16
++
++/* Bitfields in DMA_STATUS */
++#define HUSB2_DMA_CH_ACTIVE_OFFSET 1
++#define HUSB2_DMA_CH_ACTIVE_SIZE 1
++#define HUSB2_DMA_END_TR_ST_OFFSET 4
++#define HUSB2_DMA_END_TR_ST_SIZE 1
++#define HUSB2_DMA_END_BUF_ST_OFFSET 5
++#define HUSB2_DMA_END_BUF_ST_SIZE 1
++#define HUSB2_DMA_DESC_LOAD_ST_OFFSET 6
++#define HUSB2_DMA_DESC_LOAD_ST_SIZE 1
++
++/* Constants for SPEED_CFG */
++#define HUSB2_SPEED_CFG_NORMAL 0
++#define HUSB2_SPEED_CFG_FORCE_HIGH 2
++#define HUSB2_SPEED_CFG_FORCE_FULL 3
++
++/* Constants for EPT_SIZE */
++#define HUSB2_EPT_SIZE_8 0
++#define HUSB2_EPT_SIZE_16 1
++#define HUSB2_EPT_SIZE_32 2
++#define HUSB2_EPT_SIZE_64 3
++#define HUSB2_EPT_SIZE_128 4
++#define HUSB2_EPT_SIZE_256 5
++#define HUSB2_EPT_SIZE_512 6
++#define HUSB2_EPT_SIZE_1024 7
++
++/* Constants for EPT_TYPE */
++#define HUSB2_EPT_TYPE_CONTROL 0
++#define HUSB2_EPT_TYPE_ISO 1
++#define HUSB2_EPT_TYPE_BULK 2
++#define HUSB2_EPT_TYPE_INT 3
++
++/* Constants for BK_NUMBER */
++#define HUSB2_BK_NUMBER_ZERO 0
++#define HUSB2_BK_NUMBER_ONE 1
++#define HUSB2_BK_NUMBER_DOUBLE 2
++#define HUSB2_BK_NUMBER_TRIPLE 3
++
++/* Bit manipulation macros */
++#define HUSB2_BIT(name) \
++ (1 << HUSB2_##name##_OFFSET)
++#define HUSB2_BF(name,value) \
++ (((value) & ((1 << HUSB2_##name##_SIZE) - 1)) \
++ << HUSB2_##name##_OFFSET)
++#define HUSB2_BFEXT(name,value) \
++ (((value) >> HUSB2_##name##_OFFSET) \
++ & ((1 << HUSB2_##name##_SIZE) - 1))
++#define HUSB2_BFINS(name,value,old) \
++ (((old) & ~(((1 << HUSB2_##name##_SIZE) - 1) \
++ << HUSB2_##name##_OFFSET)) \
++ | HUSB2_BF(name,value))
++
++/* Register access macros */
++#define husb2_readl(udc,reg) \
++ __raw_readl((udc)->regs + HUSB2_##reg)
++#define husb2_writel(udc,reg,value) \
++ __raw_writel((value), (udc)->regs + HUSB2_##reg)
++#define husb2_ep_readl(ep,reg) \
++ __raw_readl((ep)->ep_regs + HUSB2_EPT_##reg)
++#define husb2_ep_writel(ep,reg,value) \
++ __raw_writel((value), (ep)->ep_regs + HUSB2_EPT_##reg)
++#define husb2_dma_readl(ep,reg) \
++ __raw_readl((ep)->dma_regs + HUSB2_DMA_##reg)
++#define husb2_dma_writel(ep,reg,value) \
++ __raw_writel((value), (ep)->dma_regs + HUSB2_DMA_##reg)
++
++/* Calculate base address for a given endpoint or DMA controller */
++#define HUSB2_EPT_BASE(x) (0x100 + (x) * 0x20)
++#define HUSB2_DMA_BASE(x) (0x300 + (x) * 0x10)
++#define HUSB2_FIFO_BASE(x) ((x) << 16)
++
++/* Synth parameters */
++#define HUSB2_NR_ENDPOINTS 7
++
++#define EP0_FIFO_SIZE 64
++#define EP0_EPT_SIZE HUSB2_EPT_SIZE_64
++#define EP0_NR_BANKS 1
++#define BULK_FIFO_SIZE 512
++#define BULK_EPT_SIZE HUSB2_EPT_SIZE_512
++#define BULK_NR_BANKS 2
++#define ISO_FIFO_SIZE 1024
++#define ISO_EPT_SIZE HUSB2_EPT_SIZE_1024
++#define ISO_NR_BANKS 3
++#define INT_FIFO_SIZE 64
++#define INT_EPT_SIZE HUSB2_EPT_SIZE_64
++#define INT_NR_BANKS 3
++
++enum husb2_ctrl_state {
++ WAIT_FOR_SETUP,
++ DATA_STAGE_IN,
++ DATA_STAGE_OUT,
++ STATUS_STAGE_IN,
++ STATUS_STAGE_OUT,
++ STATUS_STAGE_ADDR,
++};
++/*
++ EP_STATE_IDLE,
++ EP_STATE_SETUP,
++ EP_STATE_IN_DATA,
++ EP_STATE_OUT_DATA,
++ EP_STATE_SET_ADDR_STATUS,
++ EP_STATE_RX_STATUS,
++ EP_STATE_TX_STATUS,
++ EP_STATE_HALT,
++*/
++
++struct husb2_dma_desc {
++ dma_addr_t next;
++ dma_addr_t addr;
++ u32 ctrl;
++};
++
++struct husb2_ep {
++ int state;
++ void __iomem *ep_regs;
++ void __iomem *dma_regs;
++ void __iomem *fifo;
++ struct usb_ep ep;
++ struct husb2_udc *udc;
++
++ struct list_head queue;
++ const struct usb_endpoint_descriptor *desc;
++
++ u16 fifo_size;
++ u8 nr_banks;
++ u8 index;
++ u8 capabilities;
++
++#ifdef CONFIG_DEBUG_FS
++ u32 last_dma_status;
++ struct dentry *debugfs_dir;
++ struct dentry *debugfs_queue;
++ struct dentry *debugfs_dma_status;
++#endif
++};
++#define HUSB2_EP_CAP_ISOC 0x0001
++#define HUSB2_EP_CAP_DMA 0x0002
++
++struct husb2_packet {
++ struct husb2_dma_desc *desc;
++ dma_addr_t desc_dma;
++};
++
++struct husb2_request {
++ struct usb_request req;
++ struct list_head queue;
++
++ struct husb2_packet *packet;
++ unsigned int nr_pkts;
++
++ unsigned int submitted:1;
++ unsigned int using_dma:1;
++ unsigned int last_transaction:1;
++ unsigned int send_zlp:1;
++};
++
++struct husb2_udc {
++ spinlock_t lock;
++
++ void __iomem *regs;
++ void __iomem *fifo;
++
++ struct dma_pool *desc_pool;
++
++ struct usb_gadget gadget;
++ struct usb_gadget_driver *driver;
++ struct platform_device *pdev;
++ int irq;
++ struct clk *pclk;
++ struct clk *hclk;
++
++#ifdef CONFIG_DEBUG_FS
++ struct dentry *debugfs_root;
++ struct dentry *debugfs_regs;
++#endif
++};
++
++#define to_husb2_ep(x) container_of((x), struct husb2_ep, ep)
++#define to_husb2_req(x) container_of((x), struct husb2_request, req)
++#define to_husb2_udc(x) container_of((x), struct husb2_udc, gadget)
++
++#define ep_index(ep) ((ep)->index)
++#define ep_can_dma(ep) ((ep)->capabilities & HUSB2_EP_CAP_DMA)
++#define ep_is_in(ep) (((ep)->desc->bEndpointAddress \
++ & USB_ENDPOINT_DIR_MASK) \
++ == USB_DIR_IN)
++#define ep_is_isochronous(ep) \
++ (((ep)->desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) \
++ == USB_ENDPOINT_XFER_ISOC)
++#define ep_is_control(ep) (ep_index(ep) == 0)
++#define ep_name(ep) ((ep)->ep.name)
++#define ep_is_idle(ep) ((ep)->state == EP_STATE_IDLE)
++
++#endif /* __LINUX_USB_GADGET_HUSB2_H */
diff --git a/packages/linux/linux-2.6.18/atmel-lcdc-framebuffer-driver.patch b/packages/linux/linux-2.6.18/atmel-lcdc-framebuffer-driver.patch
new file mode 100644
index 0000000000..d4c9204059
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel-lcdc-framebuffer-driver.patch
@@ -0,0 +1,1192 @@
+---
+ drivers/video/Kconfig | 22 +
+ drivers/video/Makefile | 1
+ drivers/video/fbmem.c | 6
+ drivers/video/sidsafb.c | 805 ++++++++++++++++++++++++++++++++++++++++
+ include/asm-avr32/periph/lcdc.h | 271 +++++++++++++
+ include/linux/fb.h | 3
+ 6 files changed, 1107 insertions(+), 1 deletion(-)
+
+Index: linux-2.6.18-avr32/drivers/video/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/video/Kconfig 2006-11-02 15:54:18.000000000 +0100
++++ linux-2.6.18-avr32/drivers/video/Kconfig 2006-11-02 15:56:20.000000000 +0100
+@@ -271,6 +271,28 @@ config FB_SA1100
+ If you plan to use the LCD display with your SA-1100 system, say
+ Y here.
+
++config FB_SIDSA
++ tristate "SIDSA LCDC support"
++ select FB_CFB_FILLRECT
++ select FB_CFB_COPYAREA
++ select FB_CFB_IMAGEBLIT
++ depends on FB && AVR32
++ help
++ This enables support for the SIDSA LCD Controller.
++
++config FB_SIDSA_DEFAULT_BPP
++ int "SIDSA LCDC default color depth"
++ default 24
++ depends on FB_SIDSA
++ help
++ Specify the maximum color depth you want to be able to
++ support. This, together with the resolution of the LCD
++ panel, determines the amount of framebuffer memory allocated
++ when the driver is initialized.
++
++ Allowable values are 1, 2, 4, 8, 16, 24 and 32. If unsure,
++ say 24.
++
+ config FB_IMX
+ tristate "Motorola i.MX LCD support"
+ depends on FB && ARM && ARCH_IMX
+Index: linux-2.6.18-avr32/drivers/video/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/video/Makefile 2006-11-02 15:54:18.000000000 +0100
++++ linux-2.6.18-avr32/drivers/video/Makefile 2006-11-02 15:56:20.000000000 +0100
+@@ -75,6 +75,7 @@ obj-$(CONFIG_FB_HP300) += hpf
+ obj-$(CONFIG_FB_G364) += g364fb.o
+ obj-$(CONFIG_FB_SA1100) += sa1100fb.o
+ obj-$(CONFIG_FB_SUN3) += sun3fb.o
++obj-$(CONFIG_FB_SIDSA) += sidsafb.o
+ obj-$(CONFIG_FB_HIT) += hitfb.o
+ obj-$(CONFIG_FB_EPSON1355) += epson1355fb.o
+ obj-$(CONFIG_FB_PVR2) += pvr2fb.o
+Index: linux-2.6.18-avr32/drivers/video/fbmem.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/video/fbmem.c 2006-11-02 15:54:18.000000000 +0100
++++ linux-2.6.18-avr32/drivers/video/fbmem.c 2006-11-02 15:56:20.000000000 +0100
+@@ -1153,6 +1153,7 @@ fb_mmap(struct file *file, struct vm_are
+ /* frame buffer memory */
+ start = info->fix.smem_start;
+ len = PAGE_ALIGN((start & ~PAGE_MASK) + info->fix.smem_len);
++ pr_debug("fb_mmap: start = 0x%08lx, len = 0x%08lx\n", start, len);
+ if (off >= len) {
+ /* memory mapped io */
+ off -= len;
+@@ -1168,6 +1169,7 @@ fb_mmap(struct file *file, struct vm_are
+ if ((vma->vm_end - vma->vm_start + off) > len)
+ return -EINVAL;
+ off += start;
++ pr_debug("fb_mmap: off = 0x%08lx\n", off);
+ vma->vm_pgoff = off >> PAGE_SHIFT;
+ /* This is an IO map - tell maydump to skip this VMA */
+ vma->vm_flags |= VM_IO | VM_RESERVED;
+@@ -1198,6 +1200,10 @@ fb_mmap(struct file *file, struct vm_are
+ pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE;
+ #elif defined(__arm__) || defined(__sh__) || defined(__m32r__)
+ vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
++#elif defined(__avr32__)
++ vma->vm_page_prot = __pgprot((pgprot_val(vma->vm_page_prot)
++ & ~_PAGE_CACHABLE)
++ | (_PAGE_BUFFER | _PAGE_DIRTY));
+ #elif defined(__ia64__)
+ if (efi_range_is_wc(vma->vm_start, vma->vm_end - vma->vm_start))
+ vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
+Index: linux-2.6.18-avr32/drivers/video/sidsafb.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/video/sidsafb.c 2006-11-02 16:07:55.000000000 +0100
+@@ -0,0 +1,805 @@
++/*
++ * Framebuffer Driver for Atmel/SIDSA LCD Controller
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#undef DEBUG
++
++#include <linux/config.h>
++#include <linux/clk.h>
++#include <linux/kernel.h>
++#include <linux/dma-mapping.h>
++#include <linux/interrupt.h>
++#include <linux/fb.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++
++#include <asm/arch/board.h>
++
++#include <asm/periph/lcdc.h>
++
++/* More or less configurable parameters */
++#define SIDSAFB_FIFO_SIZE 512
++#define SIDSAFB_DMA_BURST_LEN 8
++
++/* TODO: These should be autogenerated from part description file */
++#define LCDC_DISTYPE_STN_MONO 0
++#define LCDC_DISTYPE_STN_COLOR 1
++#define LCDC_DISTYPE_TFT 2
++#define LCDC_LUT 0xc00
++
++struct sidsafb_info {
++ spinlock_t lock;
++ struct fb_info * info;
++ void __iomem * regs;
++ unsigned long irq_base;
++ wait_queue_head_t vsync_wait;
++ unsigned int guard_time;
++ struct clk *hclk;
++ struct clk *pixclk;
++ struct platform_device *pdev;
++ u32 pseudo_palette[16];
++};
++
++/*
++ * How large framebuffer to allocate if none was provided by the
++ * platform. This default is the smallest we can possibly get away
++ * with.
++ */
++static unsigned long fb_size = (320 * 240);
++
++#if 0
++static struct fb_videomode sony_modes[] = {
++ {
++ .refresh = 48,
++ .xres = 240, .yres = 160,
++ .pixclock = 520833,
++
++ .left_margin = 7, .right_margin = 9,
++ .upper_margin = 19, .lower_margin = 20,
++ .hsync_len = 9, .vsync_len = 2,
++
++ .sync = 0,
++ .vmode = FB_VMODE_NONINTERLACED,
++ },
++};
++#endif
++
++#if 0
++static struct fb_videomode vga_modes[] = {
++ {
++ .refresh = 122,
++ .xres = 320, .yres = 240,
++ .pixclock = 80000,
++
++ .left_margin = 10, .right_margin = 20,
++ .upper_margin = 30, .lower_margin = 5,
++ .hsync_len = 20, .vsync_len = 3,
++
++ .sync = 0,
++ .vmode = FB_VMODE_NONINTERLACED,
++ },
++ {
++ .refresh = 70,
++ .xres = 640, .yres = 480,
++ .pixclock = 40000,
++
++ .left_margin = 10, .right_margin = 20,
++ .upper_margin = 30, .lower_margin = 5,
++ .hsync_len = 20, .vsync_len = 3,
++
++ .sync = 0,
++ .vmode = FB_VMODE_NONINTERLACED,
++ },
++};
++#else
++static struct fb_videomode samsung_modes[] = {
++ {
++ .refresh = 75,
++ .xres = 320, .yres = 240,
++ .pixclock = 145111,
++
++ .left_margin = 17, .right_margin = 33,
++ .upper_margin = 8, .lower_margin = 10,
++ .hsync_len = 16, .vsync_len = 1,
++
++ .sync = FB_SYNC_PCLK_RISING,
++ .vmode = FB_VMODE_NONINTERLACED,
++ },
++};
++#endif
++
++#if 1
++static struct fb_monspecs default_monspecs = {
++ .modedb = samsung_modes,
++ .manufacturer = "SNG",
++ .monitor = "LCD panel",
++ .serial_no = "xxxx",
++ .ascii = "yyyy",
++ .modedb_len = ARRAY_SIZE(samsung_modes),
++ .hfmin = 14820,
++ .hfmax = 22230,
++ .vfmin = 60,
++ .vfmax = 90,
++ .dclkmax = 30000000,
++};
++#endif
++
++#if 0
++static struct fb_monspecs default_monspecs = {
++ .modedb = sony_modes,
++ .manufacturer = "SNY", /* 4 chars?!? */
++ .monitor = "LCD panel",
++ .serial_no = "xxxx",
++ .ascii = "yyyy",
++ .modedb_len = ARRAY_SIZE(sony_modes),
++ .hfmin = 7000,
++ .hfmax = 8000,
++ .vfmin = 45,
++ .vfmax = 50,
++};
++// #else
++static struct fb_monspecs default_monspecs = {
++ .modedb = vga_modes,
++ .manufacturer = "VGA",
++ .monitor = "Generic VGA",
++ .serial_no = "xxxx",
++ .ascii = "yyyy",
++ .modedb_len = ARRAY_SIZE(vga_modes),
++ .hfmin = 30000,
++ .hfmax = 64000,
++ .vfmin = 50,
++ .vfmax = 150,
++};
++#endif
++
++/* Driver defaults */
++static struct fb_fix_screeninfo sidsafb_fix __devinitdata = {
++ .id = "sidsafb",
++ .type = FB_TYPE_PACKED_PIXELS,
++ .visual = FB_VISUAL_TRUECOLOR,
++ .xpanstep = 1,
++ .ypanstep = 1,
++ .ywrapstep = 0,
++ .accel = FB_ACCEL_NONE,
++};
++
++static void sidsafb_update_dma(struct fb_info *info,
++ struct fb_var_screeninfo *var)
++{
++ struct sidsafb_info *sinfo = info->par;
++ struct fb_fix_screeninfo *fix = &info->fix;
++ unsigned long dma_addr;
++ unsigned long pixeloff;
++ unsigned long dma2dcfg;
++
++ dma_addr = (fix->smem_start + var->yoffset * fix->line_length
++ + var->xoffset * var->bits_per_pixel / 8);
++
++ dma_addr &= ~3UL;
++ pixeloff = LCDC_MKBF(DMA2DCFG_PIXELOFF, var->xoffset * var->bits_per_pixel);
++
++ /* Set framebuffer DMA base address and pixel offset */
++ lcdc_writel(sinfo, DMABADDR1, dma_addr);
++ dma2dcfg = lcdc_readl(sinfo, DMA2DCFG);
++ dma2dcfg = LCDC_INSBF(DMA2DCFG_PIXELOFF, pixeloff, dma2dcfg);
++ lcdc_writel(sinfo, DMA2DCFG, dma2dcfg);
++
++ /* Update configuration */
++ lcdc_writel(sinfo, DMACON, (lcdc_readl(sinfo, DMACON)
++ | LCDC_BIT(DMACON_DMAUPDT)));
++}
++
++/**
++ * sidsafb_check_var - Validates a var passed in.
++ * @var: frame buffer variable screen structure
++ * @info: frame buffer structure that represents a single frame buffer
++ *
++ * Checks to see if the hardware supports the state requested by
++ * var passed in. This function does not alter the hardware
++ * state!!! This means the data stored in struct fb_info and
++ * struct sidsafb_info do not change. This includes the var
++ * inside of struct fb_info. Do NOT change these. This function
++ * can be called on its own if we intent to only test a mode and
++ * not actually set it. The stuff in modedb.c is a example of
++ * this. If the var passed in is slightly off by what the
++ * hardware can support then we alter the var PASSED in to what
++ * we can do. If the hardware doesn't support mode change a
++ * -EINVAL will be returned by the upper layers. You don't need
++ * to implement this function then. If you hardware doesn't
++ * support changing the resolution then this function is not
++ * needed. In this case the driver would just provide a var that
++ * represents the static state the screen is in.
++ *
++ * Returns negative errno on error, or zero on success.
++ */
++static int sidsafb_check_var(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ unsigned long new_fb_size;
++
++ pr_debug("sidsafb_check_var:\n");
++ pr_debug(" resolution: %ux%u\n", var->xres, var->yres);
++ pr_debug(" pixclk: %llu Hz\n", 1000000000000ULL / var->pixclock);
++ pr_debug(" bpp: %u\n", var->bits_per_pixel);
++
++ new_fb_size = (var->xres_virtual * var->yres_virtual
++ * ((var->bits_per_pixel + 7) / 8));
++ if (new_fb_size > info->fix.smem_len) {
++ printk(KERN_NOTICE
++ "sidsafb: %uB framebuffer too small for %ux%ux%u\n",
++ info->fix.smem_len, var->xres_virtual,
++ var->yres_virtual, var->bits_per_pixel);
++ return -EINVAL;
++ }
++
++ /* Force same alignment for each line */
++ var->xres = (var->xres + 3) & ~3UL;
++ var->xres_virtual = (var->xres_virtual + 3) & ~3UL;
++
++ var->red.msb_right = var->green.msb_right = var->blue.msb_right = 0;
++ var->transp.offset = var->transp.length = 0;
++
++ switch (var->bits_per_pixel) {
++ case 2:
++ case 4:
++ case 8:
++ var->red.offset = var->green.offset = var->blue.offset = 0;
++ var->red.length = var->green.length = var->blue.length
++ = var->bits_per_pixel;
++ break;
++ case 15:
++ case 16:
++ /*
++ * Bit 16 is the "intensity" bit, I think. Not sure
++ * what we're going to use that for...
++ */
++ var->red.offset = 0;
++ var->green.offset = 5;
++ var->blue.offset = 10;
++ var->red.length = 5;
++ var->green.length = 5;
++ var->blue.length = 5;
++ break;
++ case 24:
++ case 32:
++ var->red.offset = 16;
++ var->green.offset = 8;
++ var->blue.offset = 0;
++ var->red.length = var->green.length = var->blue.length = 8;
++ break;
++ default:
++ printk(KERN_NOTICE "sidsafb: color depth %d not supported\n",
++ var->bits_per_pixel);
++ return -EINVAL;
++ }
++
++ var->xoffset = var->yoffset = 0;
++ var->red.msb_right = var->green.msb_right = var->blue.msb_right =
++ var->transp.msb_right = 0;
++
++ return 0;
++}
++
++/**
++ * sidsafb_set_par - Alters the hardware state.
++ * @info: frame buffer structure that represents a single frame buffer
++ *
++ * Using the fb_var_screeninfo in fb_info we set the resolution
++ * of the this particular framebuffer. This function alters the
++ * par AND the fb_fix_screeninfo stored in fb_info. It doesn't
++ * not alter var in fb_info since we are using that data. This
++ * means we depend on the data in var inside fb_info to be
++ * supported by the hardware. sidsafb_check_var is always called
++ * before sidsafb_set_par to ensure this. Again if you can't
++ * change the resolution you don't need this function.
++ *
++ */
++static int sidsafb_set_par(struct fb_info *info)
++{
++ struct sidsafb_info *sinfo = info->par;
++ unsigned long value;
++
++ pr_debug("sidsafb_set_par:\n");
++ pr_debug(" * resolution: %ux%u (%ux%u virtual)\n",
++ info->var.xres, info->var.yres,
++ info->var.xres_virtual, info->var.yres_virtual);
++
++ /* Turn off the LCD controller and the DMA controller */
++ pr_debug("writing 0x%08x to %p\n",
++ LCDC_MKBF(PWRCON_GUARD_TIME, sinfo->guard_time),
++ sinfo->regs + LCDC_PWRCON);
++ lcdc_writel(sinfo, PWRCON,
++ LCDC_MKBF(PWRCON_GUARD_TIME, sinfo->guard_time));
++ pr_debug("writing 0 to %p\n", sinfo->regs + LCDC_DMACON);
++ lcdc_writel(sinfo, DMACON, 0);
++
++ info->fix.line_length = (info->var.xres_virtual
++ * (info->var.bits_per_pixel / 8));
++
++ if (info->var.bits_per_pixel <= 8)
++ info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
++ else
++ info->fix.visual = FB_VISUAL_TRUECOLOR;
++
++ /* Re-initialize the DMA engine... */
++ pr_debug(" * update DMA engine\n");
++ sidsafb_update_dma(info, &info->var);
++
++ /* ...set frame size and burst length = 8 words (?) */
++ value = LCDC_MKBF(DMAFRMCFG_FRMSIZE,
++ (info->var.yres * info->fix.line_length + 3) / 4);
++ value |= LCDC_MKBF(DMAFRMCFG_BRSTLEN, (SIDSAFB_DMA_BURST_LEN - 1));
++ lcdc_writel(sinfo, DMAFRMCFG, value);
++
++ /* ...set 2D configuration (necessary for xres_virtual != xres) */
++ value = LCDC_MKBF(DMA2DCFG_ADDRINC,
++ info->var.xres_virtual - info->var.xres);
++ lcdc_writel(sinfo, DMA2DCFG, value);
++
++ /* ...wait for DMA engine to become idle... */
++ while (lcdc_readl(sinfo, DMACON) & LCDC_BIT(DMACON_DMABUSY))
++ msleep(10);
++
++ pr_debug(" * re-enable DMA engine\n");
++ /* ...and enable it with updated configuration */
++ lcdc_writel(sinfo, DMACON, (LCDC_BIT(DMACON_DMAEN)
++ | LCDC_BIT(DMACON_DMAUPDT)
++ | LCDC_BIT(DMACON_DMA2DEN)));
++
++ /* Now, the LCD core... */
++
++ /* Set pixel clock. */
++ value = (clk_get_rate(sinfo->pixclk) / 100000) * info->var.pixclock;
++ value /= 10000000;
++ value = (value + 1) / 2;
++ if (value == 0) {
++ printk("sidsafb: Bypassing lcdc_pclk divider\n");
++ lcdc_writel(sinfo, LCDCON1, LCDC_BIT(LCDCON1_BYPASS));
++ } else {
++ lcdc_writel(sinfo, LCDCON1, LCDC_MKBF(LCDCON1_CLKVAL, value - 1));
++ }
++
++ /* Initialize control register 2 */
++ value = (LCDC_BIT(LCDCON2_CLKMOD)
++ | LCDC_MKBF(LCDCON2_DISTYPE, LCDC_DISTYPE_TFT));
++ if (!(info->var.sync & FB_SYNC_HOR_HIGH_ACT))
++ value |= LCDC_BIT(LCDCON2_INVLINE);
++ if (!(info->var.sync & FB_SYNC_VERT_HIGH_ACT))
++ value |= LCDC_BIT(LCDCON2_INVFRAME);
++ if (info->var.sync & FB_SYNC_PCLK_RISING)
++ value |= LCDC_BIT(LCDCON2_INVCLK);
++
++ switch (info->var.bits_per_pixel) {
++ case 1: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 0); break;
++ case 2: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 1); break;
++ case 4: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 2); break;
++ case 8: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 3); break;
++ case 15: /* fall through */
++ case 16: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 4); break;
++ case 24: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 5); break;
++ case 32: value |= LCDC_MKBF(LCDCON2_PIXELSIZE, 6); break;
++ default: BUG(); break;
++ }
++ pr_debug(" * LCDCON2 = %08lx\n", value);
++ lcdc_writel(sinfo, LCDCON2, value);
++
++ /* Vertical timing */
++ value = LCDC_MKBF(LCDTIM1_VPW, info->var.vsync_len - 1);
++ value |= LCDC_MKBF(LCDTIM1_VBP, info->var.upper_margin);
++ value |= LCDC_MKBF(LCDTIM1_VFP, info->var.lower_margin);
++ pr_debug(" * LCDTIM1 = %08lx\n", value);
++ lcdc_writel(sinfo, LCDTIM1, value);
++
++ /* Horizontal timing */
++ value = LCDC_MKBF(LCDTIM2_HFP, info->var.right_margin - 1);
++ value |= LCDC_MKBF(LCDTIM2_HPW, info->var.hsync_len - 1);
++ value |= LCDC_MKBF(LCDTIM2_HBP, info->var.left_margin - 1);
++ pr_debug(" * LCDTIM2 = %08lx\n", value);
++ lcdc_writel(sinfo, LCDTIM2, value);
++
++ /* Display size */
++ value = LCDC_MKBF(LCDFRMCFG_LINESIZE, info->var.xres - 1);
++ value |= LCDC_MKBF(LCDFRMCFG_LINEVAL, info->var.yres - 1);
++ lcdc_writel(sinfo, LCDFRMCFG, value);
++
++ /* FIFO Threshold: Use formula from data sheet */
++ value = SIDSAFB_FIFO_SIZE - (2 * SIDSAFB_DMA_BURST_LEN + 3);
++ lcdc_writel(sinfo, LCDFIFO, value);
++
++ /* Toggle LCD_MODE every frame */
++ lcdc_writel(sinfo, LCDMVAL, 0);
++
++ /* Disable all interrupts */
++ lcdc_writel(sinfo, LCD_IDR, ~0UL);
++
++ /* Wait for the LCDC core to become idle and enable it */
++ while(lcdc_readl(sinfo, PWRCON) & LCDC_BIT(PWRCON_LCD_BUSY))
++ msleep(10);
++
++ pr_debug(" * re-enable LCD core\n");
++ lcdc_writel(sinfo, PWRCON,
++ LCDC_MKBF(PWRCON_GUARD_TIME, sinfo->guard_time)
++ | LCDC_BIT(PWRCON_LCD_PWR));
++
++ pr_debug(" * DONE\n");
++ return 0;
++}
++
++static inline u_int chan_to_field(u_int chan, const struct fb_bitfield *bf)
++{
++ chan &= 0xffff;
++ chan >>= 16 - bf->length;
++ return chan << bf->offset;
++}
++
++/**
++ * sidsafb_setcolreg - Optional function. Sets a color register.
++ * @regno: Which register in the CLUT we are programming
++ * @red: The red value which can be up to 16 bits wide
++ * @green: The green value which can be up to 16 bits wide
++ * @blue: The blue value which can be up to 16 bits wide.
++ * @transp: If supported the alpha value which can be up to 16 bits wide.
++ * @info: frame buffer info structure
++ *
++ * Set a single color register. The values supplied have a 16 bit
++ * magnitude which needs to be scaled in this function for the hardware.
++ * Things to take into consideration are how many color registers, if
++ * any, are supported with the current color visual. With truecolor mode
++ * no color palettes are supported. Here a psuedo palette is created
++ * which we store the value in pseudo_palette in struct fb_info. For
++ * pseudocolor mode we have a limited color palette. To deal with this
++ * we can program what color is displayed for a particular pixel value.
++ * DirectColor is similar in that we can program each color field. If
++ * we have a static colormap we don't need to implement this function.
++ *
++ * Returns negative errno on error, or zero on success. In an
++ * ideal world, this would have been the case, but as it turns
++ * out, the other drivers return 1 on failure, so that's what
++ * we're going to do.
++ */
++static int sidsafb_setcolreg(unsigned int regno, unsigned int red,
++ unsigned int green, unsigned int blue,
++ unsigned int transp, struct fb_info *info)
++{
++ struct sidsafb_info *sinfo = info->par;
++ unsigned int val;
++ u32 *pal;
++ int ret = 1;
++
++ if (info->var.grayscale)
++ red = green = blue = (19595 * red + 38470 * green
++ + 7471 * blue) >> 16;
++
++ switch (info->fix.visual) {
++ case FB_VISUAL_TRUECOLOR:
++ if (regno < 16) {
++ pal = info->pseudo_palette;
++
++ val = chan_to_field(red, &info->var.red);
++ val |= chan_to_field(green, &info->var.green);
++ val |= chan_to_field(blue, &info->var.blue);
++
++ pal[regno] = val;
++ ret = 0;
++ }
++ break;
++
++ case FB_VISUAL_PSEUDOCOLOR:
++ if (regno < 256) {
++ val = ((red >> 11) & 0x001f);
++ val |= ((green >> 6) & 0x03e0);
++ val |= ((blue >> 1) & 0x7c00);
++
++ /*
++ * TODO: intensity bit. Maybe something like
++ * ~(red[10] ^ green[10] ^ blue[10]) & 1
++ */
++
++ lcdc_writel(sinfo, LUT + regno * 4, val);
++ ret = 0;
++ }
++ break;
++ }
++
++ return ret;
++}
++
++static int sidsafb_pan_display(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ pr_debug("sidsafb_pan_display\n");
++
++ sidsafb_update_dma(info, var);
++
++ return 0;
++}
++
++static struct fb_ops sidsafb_ops = {
++ .owner = THIS_MODULE,
++ .fb_check_var = sidsafb_check_var,
++ .fb_set_par = sidsafb_set_par,
++ .fb_setcolreg = sidsafb_setcolreg,
++ .fb_pan_display = sidsafb_pan_display,
++ .fb_fillrect = cfb_fillrect,
++ .fb_copyarea = cfb_copyarea,
++ .fb_imageblit = cfb_imageblit,
++};
++
++static irqreturn_t sidsafb_interrupt(int irq, void *dev_id,
++ struct pt_regs *regs)
++{
++ struct fb_info *info = dev_id;
++ struct sidsafb_info *sinfo = info->par;
++ u32 status;
++
++ status = lcdc_readl(sinfo, LCD_ISR);
++ while (status) {
++ if (status & LCDC_BIT(LCD_ISR_EOFIS)) {
++ pr_debug("sidsafb: DMA End Of Frame interrupt\n");
++
++ lcdc_writel(sinfo, LCD_ICR, LCDC_BIT(LCD_ICR_EOFIC));
++ status &= ~LCDC_BIT(LCD_ISR_EOFIS);
++ wake_up(&sinfo->vsync_wait);
++ }
++
++ if (status) {
++ printk(KERN_ERR
++ "LCDC: Interrupts still pending: 0x%x\n",
++ status);
++ lcdc_writel(sinfo, LCD_IDR, status);
++ }
++
++ status = lcdc_readl(sinfo, LCD_ISR);
++ }
++
++ return IRQ_HANDLED;
++}
++
++static void __devinit init_pseudo_palette(u32 *palette)
++{
++ static const u32 init_palette[16] = {
++ 0x000000,
++ 0xaa0000,
++ 0x00aa00,
++ 0xaa5500,
++ 0x0000aa,
++ 0xaa00aa,
++ 0x00aaaa,
++ 0xaaaaaa,
++ 0x555555,
++ 0xff5555,
++ 0x55ff55,
++ 0xffff55,
++ 0x5555ff,
++ 0xff55ff,
++ 0x55ffff,
++ 0xffffff
++ };
++
++ memcpy(palette, init_palette, sizeof(init_palette));
++}
++
++static int __devinit sidsafb_set_fbinfo(struct sidsafb_info *sinfo)
++{
++ struct fb_info *info = sinfo->info;
++
++ init_pseudo_palette(sinfo->pseudo_palette);
++
++ info->flags = (FBINFO_DEFAULT
++ | FBINFO_PARTIAL_PAN_OK
++ | FBINFO_HWACCEL_XPAN
++ | FBINFO_HWACCEL_YPAN);
++ memcpy(&info->fix, &sidsafb_fix, sizeof(info->fix));
++ memcpy(&info->monspecs, &default_monspecs, sizeof(info->monspecs));
++ info->fbops = &sidsafb_ops;
++ info->pseudo_palette = sinfo->pseudo_palette;
++
++ init_waitqueue_head(&sinfo->vsync_wait);
++
++ return 0;
++}
++
++static int __devinit sidsafb_probe(struct platform_device *pdev)
++{
++ struct lcdc_platform_data *fb_data = pdev->dev.platform_data;
++ struct fb_info *info;
++ struct sidsafb_info *sinfo;
++ const struct resource *mmio_resource;
++ int ret;
++
++ pr_debug("sidsafb_probe BEGIN\n");
++
++ mmio_resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!mmio_resource) {
++ dev_err(&pdev->dev, "no MMIO resource found\n");
++ return -ENXIO;
++ }
++
++ ret = -ENOMEM;
++ info = framebuffer_alloc(sizeof(struct sidsafb_info), &pdev->dev);
++ if (!info) {
++ dev_err(&pdev->dev, "failed to allocate memory\n");
++ goto out;
++ }
++
++ sinfo = info->par;
++ sinfo->info = info;
++ sinfo->pdev = pdev;
++ sinfo->guard_time = 1;
++
++ spin_lock_init(&sinfo->lock);
++ sidsafb_set_fbinfo(sinfo);
++ info->fix.mmio_start = mmio_resource->start;
++ info->fix.mmio_len = mmio_resource->end - mmio_resource->start + 1;
++ sinfo->irq_base = platform_get_irq(pdev, 0);
++
++ sinfo->hclk = clk_get(&pdev->dev, "hclk");
++ if (IS_ERR(sinfo->hclk)) {
++ dev_err(&pdev->dev, "failed to get hclk\n");
++ ret = PTR_ERR(sinfo->hclk);
++ goto free_info;
++ }
++ sinfo->pixclk = clk_get(&pdev->dev, "pixclk");
++ if (IS_ERR(sinfo->pixclk)) {
++ dev_err(&pdev->dev, "failed to get pixel clock\n");
++ ret = PTR_ERR(sinfo->hclk);
++ goto put_hclk;
++ }
++
++ clk_enable(sinfo->hclk);
++ clk_enable(sinfo->pixclk);
++
++ /* Use platform-supplied framebuffer memory if available */
++ if (fb_data && fb_data->fbmem_size != 0) {
++ info->fix.smem_start = fb_data->fbmem_start;
++ info->fix.smem_len = fb_data->fbmem_size;
++ info->screen_base = ioremap(info->fix.smem_start,
++ info->fix.smem_len);
++ } else {
++ dma_addr_t paddr;
++
++ info->fix.smem_len = fb_size;
++ info->screen_base = dma_alloc_coherent(&pdev->dev, fb_size,
++ &paddr, GFP_KERNEL);
++ info->fix.smem_start = paddr;
++ }
++
++ if (!info->screen_base) {
++ printk(KERN_ERR "sidsafb: Could not allocate framebuffer\n");
++ goto disable_clocks;
++ }
++
++ sinfo->regs = ioremap(info->fix.mmio_start, info->fix.mmio_len);
++ if (!sinfo->regs) {
++ printk(KERN_ERR "sidsafb: Could not map LCDC registers\n");
++ goto free_fb;
++ }
++
++ ret = fb_find_mode(&info->var, info, NULL, info->monspecs.modedb,
++ info->monspecs.modedb_len, info->monspecs.modedb,
++ CONFIG_FB_SIDSA_DEFAULT_BPP);
++ if (!ret) {
++ printk(KERN_ERR "sidsafb: No suitable video mode found\n");
++ goto unmap_regs;
++ }
++
++ ret = request_irq(sinfo->irq_base, sidsafb_interrupt, 0,
++ "sidsafb", info);
++ if (ret)
++ goto unmap_regs;
++
++ /* Allocate colormap */
++ if (fb_alloc_cmap(&info->cmap, 256, 0)) {
++ ret = -ENOMEM;
++ goto unregister_irqs;
++ }
++
++ /*
++ * Tell the world that we're ready to go
++ */
++ ret = register_framebuffer(info);
++ if (ret)
++ goto free_cmap;
++
++ printk("fb%d: Atmel LCDC at 0x%08lx (mapped at %p), irq %lu\n",
++ info->node, info->fix.mmio_start, sinfo->regs, sinfo->irq_base);
++
++ platform_set_drvdata(pdev, info);
++
++ memset_io(info->screen_base, 0, info->fix.smem_len);
++ info->var.activate |= FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW;
++ ret = fb_set_var(info, &info->var);
++ if (ret)
++ printk(KERN_WARNING
++ "sidsafb: Unable to set display parameters\n");
++ info->var.activate &= ~(FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW);
++
++ pr_debug("sidsafb_probe SUCCESS\n");
++ return 0;
++
++
++free_cmap:
++ fb_dealloc_cmap(&info->cmap);
++unregister_irqs:
++ free_irq(sinfo->irq_base, info);
++unmap_regs:
++ iounmap(sinfo->regs);
++free_fb:
++ if (!fb_data || fb_data->fbmem_size == 0)
++ dma_free_coherent(&pdev->dev, info->fix.smem_len,
++ (void __force *)info->screen_base,
++ info->fix.smem_start);
++disable_clocks:
++ clk_disable(sinfo->pixclk);
++ clk_disable(sinfo->hclk);
++ clk_put(sinfo->pixclk);
++put_hclk:
++ clk_put(sinfo->hclk);
++free_info:
++ framebuffer_release(info);
++out:
++ pr_debug("sidsafb_probe FAILED\n");
++ return ret;
++}
++
++static int __devexit sidsafb_remove(struct platform_device *pdev)
++{
++ struct lcdc_platform_data *fb_data = pdev->dev.platform_data;
++ struct fb_info *info = platform_get_drvdata(pdev);
++ struct sidsafb_info *sinfo;
++
++ if (!info)
++ return 0;
++ sinfo = info->par;
++
++ /* TODO: Restore original state */
++ unregister_framebuffer(info);
++
++ fb_dealloc_cmap(&info->cmap);
++ free_irq(sinfo->irq_base, info);
++ iounmap(sinfo->regs);
++ if (!fb_data || fb_data->fbmem_size == 0)
++ dma_free_coherent(&pdev->dev, info->fix.smem_len,
++ (void __force *)info->screen_base,
++ info->fix.smem_start);
++ clk_disable(sinfo->hclk);
++ clk_put(sinfo->hclk);
++ platform_set_drvdata(pdev, NULL);
++ framebuffer_release(info);
++
++ return 0;
++}
++
++static struct platform_driver sidsafb_driver = {
++ .probe = sidsafb_probe,
++ .remove = __devexit_p(sidsafb_remove),
++ .driver = {
++ .name = "lcdc",
++ },
++};
++
++int __init sidsafb_init(void)
++{
++ return platform_driver_register(&sidsafb_driver);
++}
++
++static void __exit sidsafb_exit(void)
++{
++ platform_driver_unregister(&sidsafb_driver);
++}
++
++module_init(sidsafb_init);
++module_exit(sidsafb_exit);
++
++module_param(fb_size, ulong, 0644);
++MODULE_PARM_DESC(fb_size, "Minimum framebuffer size to allocate");
++
++MODULE_AUTHOR("Haavard Skinnemoen <hskinnemoen@atmel.com>");
++MODULE_DESCRIPTION("Atmel/SIDSA LCD Controller framebuffer driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.18-avr32/include/asm-avr32/periph/lcdc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/periph/lcdc.h 2006-11-02 16:08:35.000000000 +0100
+@@ -0,0 +1,271 @@
++/*
++ * Register definitions for Atmel/SIDSA LCD Controller
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_PERIPH_LCDC_H__
++#define __ASM_AVR32_PERIPH_LCDC_H__
++
++#define LCDC_CONTRAST_CTR 0x00000840
++# define LCDC_CONTRAST_CTR_ENA_OFFSET 3
++# define LCDC_CONTRAST_CTR_ENA_SIZE 1
++# define LCDC_CONTRAST_CTR_POL_OFFSET 2
++# define LCDC_CONTRAST_CTR_POL_SIZE 1
++# define LCDC_CONTRAST_CTR_PS_OFFSET 0
++# define LCDC_CONTRAST_CTR_PS_SIZE 2
++#define LCDC_CONTRAST_VAL 0x00000844
++# define LCDC_CONTRAST_VAL_CVAL_OFFSET 0
++# define LCDC_CONTRAST_VAL_CVAL_SIZE 8
++#define LCDC_DMABADDR1 0x00000000
++# define LCDC_DMABADDR1_BADDR_U_OFFSET 0
++# define LCDC_DMABADDR1_BADDR_U_SIZE 32
++#define LCDC_DMABADDR2 0x00000004
++# define LCDC_DMABADDR2_BADDR_L_OFFSET 0
++# define LCDC_DMABADDR2_BADDR_L_SIZE 32
++#define LCDC_DMACON 0x0000001C
++# define LCDC_DMACON_DMABUSY_OFFSET 2
++# define LCDC_DMACON_DMABUSY_SIZE 1
++# define LCDC_DMACON_DMAEN_OFFSET 0
++# define LCDC_DMACON_DMAEN_SIZE 1
++# define LCDC_DMACON_DMARST_OFFSET 1
++# define LCDC_DMACON_DMARST_SIZE 1
++# define LCDC_DMACON_DMAUPDT_OFFSET 3
++# define LCDC_DMACON_DMAUPDT_SIZE 1
++# define LCDC_DMACON_DMA2DEN_OFFSET 4
++# define LCDC_DMACON_DMA2DEN_SIZE 1
++#define LCDC_DMAFRMADD1 0x00000010
++# define LCDC_DMAFRMADD1_FRMADD_U_OFFSET 0
++# define LCDC_DMAFRMADD1_FRMADD_U_SIZE 32
++#define LCDC_DMAFRMADD2 0x00000014
++# define LCDC_DMAFRMADD2_FRMADD_L_OFFSET 0
++# define LCDC_DMAFRMADD2_FRMADD_L_SIZE 32
++#define LCDC_DMAFRMCFG 0x00000018
++# define LCDC_DMAFRMCFG_BRSTLEN_OFFSET 24
++# define LCDC_DMAFRMCFG_BRSTLEN_SIZE 7
++# define LCDC_DMAFRMCFG_FRMSIZE_OFFSET 0
++# define LCDC_DMAFRMCFG_FRMSIZE_SIZE 23
++#define LCDC_DMAFRMPT1 0x00000008
++# define LCDC_DMAFRMPT1_FRMPT_U_OFFSET 0
++# define LCDC_DMAFRMPT1_FRMPT_U_SIZE 23
++#define LCDC_DMAFRMPT2 0x0000000C
++# define LCDC_DMAFRMPT2_FRMPT_L_OFFSET 0
++# define LCDC_DMAFRMPT2_FRMPT_L_SIZE 23
++#define LCDC_DMA2DCFG 0x00000020
++# define LCDC_DMA2DCFG_ADDRINC_OFFSET 0
++# define LCDC_DMA2DCFG_ADDRINC_SIZE 16
++# define LCDC_DMA2DCFG_PIXELOFF_OFFSET 24
++# define LCDC_DMA2DCFG_PIXELOFF_SIZE 5
++#define LCDC_DP1_2 0x0000081C
++# define LCDC_DP1_2_DP1_2_OFFSET 0
++# define LCDC_DP1_2_DP1_2_SIZE 8
++#define LCDC_DP2_3 0x00000828
++# define LCDC_DP2_3_DP2_3_OFFSET 0
++# define LCDC_DP2_3_DP2_3_SIZE 12
++#define LCDC_DP3_4 0x00000830
++# define LCDC_DP3_4_DP3_4_OFFSET 0
++# define LCDC_DP3_4_DP3_4_SIZE 16
++#define LCDC_DP3_5 0x00000824
++# define LCDC_DP3_5_DP3_5_OFFSET 0
++# define LCDC_DP3_5_DP3_5_SIZE 20
++#define LCDC_DP4_5 0x00000834
++# define LCDC_DP4_5_DP4_5_OFFSET 0
++# define LCDC_DP4_5_DP4_5_SIZE 20
++#define LCDC_DP4_7 0x00000820
++# define LCDC_DP4_7_DP4_7_OFFSET 0
++# define LCDC_DP4_7_DP4_7_SIZE 28
++#define LCDC_DP5_7 0x0000082C
++# define LCDC_DP5_7_DP5_7_OFFSET 0
++# define LCDC_DP5_7_DP5_7_SIZE 28
++#define LCDC_DP6_7 0x00000838
++# define LCDC_DP6_7_DP6_7_OFFSET 0
++# define LCDC_DP6_7_DP6_7_SIZE 28
++#define LCDC_LCDCON1 0x00000800
++# define LCDC_LCDCON1_BYPASS_OFFSET 0
++# define LCDC_LCDCON1_BYPASS_SIZE 1
++# define LCDC_LCDCON1_CLKVAL_OFFSET 12
++# define LCDC_LCDCON1_CLKVAL_SIZE 9
++# define LCDC_LCDCON1_LINECNT_OFFSET 21
++# define LCDC_LCDCON1_LINECNT_SIZE 11
++#define LCDC_LCDCON2 0x00000804
++# define LCDC_LCDCON2_CLKMOD_OFFSET 15
++# define LCDC_LCDCON2_CLKMOD_SIZE 1
++# define LCDC_LCDCON2_DISTYPE_OFFSET 0
++# define LCDC_LCDCON2_DISTYPE_SIZE 2
++# define LCDC_LCDCON2_IFWIDTH_OFFSET 3
++# define LCDC_LCDCON2_IFWIDTH_SIZE 2
++# define LCDC_LCDCON2_INVCLK_OFFSET 11
++# define LCDC_LCDCON2_INVCLK_SIZE 1
++# define LCDC_LCDCON2_INVDVAL_OFFSET 12
++# define LCDC_LCDCON2_INVDVAL_SIZE 1
++# define LCDC_LCDCON2_INVFRAME_OFFSET 9
++# define LCDC_LCDCON2_INVFRAME_SIZE 1
++# define LCDC_LCDCON2_INVLINE_OFFSET 10
++# define LCDC_LCDCON2_INVLINE_SIZE 1
++# define LCDC_LCDCON2_INVVD_OFFSET 8
++# define LCDC_LCDCON2_INVVD_SIZE 1
++# define LCDC_LCDCON2_MEMOR_OFFSET 30
++# define LCDC_LCDCON2_MEMOR_SIZE 2
++# define LCDC_LCDCON2_PIXELSIZE_OFFSET 5
++# define LCDC_LCDCON2_PIXELSIZE_SIZE 3
++# define LCDC_LCDCON2_SCANMOD_OFFSET 2
++# define LCDC_LCDCON2_SCANMOD_SIZE 1
++#define LCDC_LCDFIFO 0x00000814
++# define LCDC_LCDFIFO_FIFOTH_OFFSET 0
++# define LCDC_LCDFIFO_FIFOTH_SIZE 16
++#define LCDC_LCDFRMCFG 0x00000810
++# define LCDC_LCDFRMCFG_LINESIZE_OFFSET 21
++# define LCDC_LCDFRMCFG_LINESIZE_SIZE 11
++# define LCDC_LCDFRMCFG_LINEVAL_OFFSET 0
++# define LCDC_LCDFRMCFG_LINEVAL_SIZE 11
++#define LCDC_LCDMVAL 0x00000818
++# define LCDC_LCDMVAL_MMODE_OFFSET 31
++# define LCDC_LCDMVAL_MMODE_SIZE 1
++# define LCDC_LCDMVAL_MVAL_OFFSET 0
++# define LCDC_LCDMVAL_MVAL_SIZE 8
++#define LCDC_LCDTIM1 0x00000808
++# define LCDC_LCDTIM1_VBP_OFFSET 8
++# define LCDC_LCDTIM1_VBP_SIZE 8
++# define LCDC_LCDTIM1_VFP_OFFSET 0
++# define LCDC_LCDTIM1_VFP_SIZE 8
++# define LCDC_LCDTIM1_VHDLY_OFFSET 24
++# define LCDC_LCDTIM1_VHDLY_SIZE 4
++# define LCDC_LCDTIM1_VPW_OFFSET 16
++# define LCDC_LCDTIM1_VPW_SIZE 6
++#define LCDC_LCDTIM2 0x0000080C
++# define LCDC_LCDTIM2_HBP_OFFSET 0
++# define LCDC_LCDTIM2_HBP_SIZE 8
++# define LCDC_LCDTIM2_HFP_OFFSET 21
++# define LCDC_LCDTIM2_HFP_SIZE 11
++# define LCDC_LCDTIM2_HPW_OFFSET 8
++# define LCDC_LCDTIM2_HPW_SIZE 6
++#define LCDC_LCD_GPR 0x0000085C
++# define LCDC_LCD_GPR_GPRB0_OFFSET 0
++# define LCDC_LCD_GPR_GPRB0_SIZE 1
++# define LCDC_LCD_GPR_GPRB1_OFFSET 1
++# define LCDC_LCD_GPR_GPRB1_SIZE 1
++# define LCDC_LCD_GPR_GPRB2_OFFSET 2
++# define LCDC_LCD_GPR_GPRB2_SIZE 1
++# define LCDC_LCD_GPR_GPRB3_OFFSET 3
++# define LCDC_LCD_GPR_GPRB3_SIZE 1
++# define LCDC_LCD_GPR_GPRB4_OFFSET 4
++# define LCDC_LCD_GPR_GPRB4_SIZE 1
++# define LCDC_LCD_GPR_GPRB5_OFFSET 5
++# define LCDC_LCD_GPR_GPRB5_SIZE 1
++# define LCDC_LCD_GPR_GPRB6_OFFSET 6
++# define LCDC_LCD_GPR_GPRB6_SIZE 1
++# define LCDC_LCD_GPR_GPRB7_OFFSET 7
++# define LCDC_LCD_GPR_GPRB7_SIZE 1
++#define LCDC_LCD_ICR 0x00000858
++# define LCDC_LCD_ICR_EOFIC_OFFSET 2
++# define LCDC_LCD_ICR_EOFIC_SIZE 1
++# define LCDC_LCD_ICR_LNIC_OFFSET 0
++# define LCDC_LCD_ICR_LNIC_SIZE 1
++# define LCDC_LCD_ICR_LSTLNIC_OFFSET 1
++# define LCDC_LCD_ICR_LSTLNIC_SIZE 1
++# define LCDC_LCD_ICR_MERIC_OFFSET 6
++# define LCDC_LCD_ICR_MERIC_SIZE 1
++# define LCDC_LCD_ICR_OWRIC_OFFSET 5
++# define LCDC_LCD_ICR_OWRIC_SIZE 1
++# define LCDC_LCD_ICR_UFLWIC_OFFSET 4
++# define LCDC_LCD_ICR_UFLWIC_SIZE 1
++#define LCDC_LCD_IDR 0x0000084C
++# define LCDC_LCD_IDR_EOFID_OFFSET 2
++# define LCDC_LCD_IDR_EOFID_SIZE 1
++# define LCDC_LCD_IDR_LNID_OFFSET 0
++# define LCDC_LCD_IDR_LNID_SIZE 1
++# define LCDC_LCD_IDR_LSTLNID_OFFSET 1
++# define LCDC_LCD_IDR_LSTLNID_SIZE 1
++# define LCDC_LCD_IDR_MERID_OFFSET 6
++# define LCDC_LCD_IDR_MERID_SIZE 1
++# define LCDC_LCD_IDR_OWRID_OFFSET 5
++# define LCDC_LCD_IDR_OWRID_SIZE 1
++# define LCDC_LCD_IDR_UFLWID_OFFSET 4
++# define LCDC_LCD_IDR_UFLWID_SIZE 1
++#define LCDC_LCD_IER 0x00000848
++# define LCDC_LCD_IER_EOFIE_OFFSET 2
++# define LCDC_LCD_IER_EOFIE_SIZE 1
++# define LCDC_LCD_IER_LNIE_OFFSET 0
++# define LCDC_LCD_IER_LNIE_SIZE 1
++# define LCDC_LCD_IER_LSTLNIE_OFFSET 1
++# define LCDC_LCD_IER_LSTLNIE_SIZE 1
++# define LCDC_LCD_IER_MERIE_OFFSET 6
++# define LCDC_LCD_IER_MERIE_SIZE 1
++# define LCDC_LCD_IER_OWRIE_OFFSET 5
++# define LCDC_LCD_IER_OWRIE_SIZE 1
++# define LCDC_LCD_IER_UFLWIE_OFFSET 4
++# define LCDC_LCD_IER_UFLWIE_SIZE 1
++#define LCDC_LCD_IMR 0x00000850
++# define LCDC_LCD_IMR_EOFIM_OFFSET 2
++# define LCDC_LCD_IMR_EOFIM_SIZE 1
++# define LCDC_LCD_IMR_LNIM_OFFSET 0
++# define LCDC_LCD_IMR_LNIM_SIZE 1
++# define LCDC_LCD_IMR_LSTLNIM_OFFSET 1
++# define LCDC_LCD_IMR_LSTLNIM_SIZE 1
++# define LCDC_LCD_IMR_MERIM_OFFSET 6
++# define LCDC_LCD_IMR_MERIM_SIZE 1
++# define LCDC_LCD_IMR_OWRIM_OFFSET 5
++# define LCDC_LCD_IMR_OWRIM_SIZE 1
++# define LCDC_LCD_IMR_UFLWIM_OFFSET 4
++# define LCDC_LCD_IMR_UFLWIM_SIZE 1
++#define LCDC_LCD_IRR 0x00000864
++# define LCDC_LCD_IRR_EOFIR_OFFSET 2
++# define LCDC_LCD_IRR_EOFIR_SIZE 1
++# define LCDC_LCD_IRR_LNIR_OFFSET 0
++# define LCDC_LCD_IRR_LNIR_SIZE 1
++# define LCDC_LCD_IRR_LSTLNIR_OFFSET 1
++# define LCDC_LCD_IRR_LSTLNIR_SIZE 1
++# define LCDC_LCD_IRR_MERIR_OFFSET 6
++# define LCDC_LCD_IRR_MERIR_SIZE 1
++# define LCDC_LCD_IRR_OWRIR_OFFSET 5
++# define LCDC_LCD_IRR_OWRIR_SIZE 1
++# define LCDC_LCD_IRR_UFLWIR_OFFSET 4
++# define LCDC_LCD_IRR_UFLWIR_SIZE 1
++#define LCDC_LCD_ISR 0x00000854
++# define LCDC_LCD_ISR_EOFIS_OFFSET 2
++# define LCDC_LCD_ISR_EOFIS_SIZE 1
++# define LCDC_LCD_ISR_LNIS_OFFSET 0
++# define LCDC_LCD_ISR_LNIS_SIZE 1
++# define LCDC_LCD_ISR_LSTLNIS_OFFSET 1
++# define LCDC_LCD_ISR_LSTLNIS_SIZE 1
++# define LCDC_LCD_ISR_MERIS_OFFSET 6
++# define LCDC_LCD_ISR_MERIS_SIZE 1
++# define LCDC_LCD_ISR_OWRIS_OFFSET 5
++# define LCDC_LCD_ISR_OWRIS_SIZE 1
++# define LCDC_LCD_ISR_UFLWIS_OFFSET 4
++# define LCDC_LCD_ISR_UFLWIS_SIZE 1
++#define LCDC_LCD_ITR 0x00000860
++# define LCDC_LCD_ITR_EOFIT_OFFSET 2
++# define LCDC_LCD_ITR_EOFIT_SIZE 1
++# define LCDC_LCD_ITR_LNIT_OFFSET 0
++# define LCDC_LCD_ITR_LNIT_SIZE 1
++# define LCDC_LCD_ITR_LSTLNIT_OFFSET 1
++# define LCDC_LCD_ITR_LSTLNIT_SIZE 1
++# define LCDC_LCD_ITR_MERIT_OFFSET 6
++# define LCDC_LCD_ITR_MERIT_SIZE 1
++# define LCDC_LCD_ITR_OWRIT_OFFSET 5
++# define LCDC_LCD_ITR_OWRIT_SIZE 1
++# define LCDC_LCD_ITR_UFLWIT_OFFSET 4
++# define LCDC_LCD_ITR_UFLWIT_SIZE 1
++#define LCDC_PWRCON 0x0000083C
++# define LCDC_PWRCON_GUARD_TIME_OFFSET 1
++# define LCDC_PWRCON_GUARD_TIME_SIZE 7
++# define LCDC_PWRCON_LCD_BUSY_OFFSET 31
++# define LCDC_PWRCON_LCD_BUSY_SIZE 1
++# define LCDC_PWRCON_LCD_PWR_OFFSET 0
++# define LCDC_PWRCON_LCD_PWR_SIZE 1
++
++#define LCDC_BIT(name) (1 << LCDC_##name##_OFFSET)
++#define LCDC_MKBF(name,value) (((value) & ((1 << LCDC_##name##_SIZE) - 1)) << LCDC_##name##_OFFSET)
++#define LCDC_GETBF(name,value) (((value) >> LCDC_##name##_OFFSET) & ((1 << LCDC_##name##_SIZE) - 1))
++#define LCDC_INSBF(name,value,old) (((old) & ~(((1 << LCDC_##name##_SIZE) - 1) << LCDC_##name##_OFFSET)) | LCDC_MKBF(name, value))
++
++#define lcdc_readl(port,reg) \
++ __raw_readl((port)->regs + LCDC_##reg)
++#define lcdc_writel(port,reg,value) \
++ __raw_writel((value), (port)->regs + LCDC_##reg)
++
++#endif /* __ASM_AVR32_PERIPH_LCDC_H__ */
+Index: linux-2.6.18-avr32/include/linux/fb.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/linux/fb.h 2006-11-02 15:54:18.000000000 +0100
++++ linux-2.6.18-avr32/include/linux/fb.h 2006-11-02 15:56:20.000000000 +0100
+@@ -191,6 +191,7 @@ struct fb_bitfield {
+ /* vtotal = 144d/288n/576i => PAL */
+ /* vtotal = 121d/242n/484i => NTSC */
+ #define FB_SYNC_ON_GREEN 32 /* sync on green */
++#define FB_SYNC_PCLK_RISING 64 /* pixel data sampled on rising pclk */
+
+ #define FB_VMODE_NONINTERLACED 0 /* non interlaced */
+ #define FB_VMODE_INTERLACED 1 /* interlaced */
+@@ -825,7 +826,7 @@ struct fb_info {
+ #define fb_writeq sbus_writeq
+ #define fb_memset sbus_memset_io
+
+-#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || defined(__hppa__) || (defined(__sh__) && !defined(__SH5__)) || defined(__powerpc__)
++#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || defined(__hppa__) || (defined(__sh__) && !defined(__SH5__)) || defined(__powerpc__) || defined(__avr32__)
+
+ #define fb_readb __raw_readb
+ #define fb_readw __raw_readw
diff --git a/packages/linux/linux-2.6.18/atmel-macb-ethernet-driver.patch b/packages/linux/linux-2.6.18/atmel-macb-ethernet-driver.patch
new file mode 100644
index 0000000000..e8c54e141b
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel-macb-ethernet-driver.patch
@@ -0,0 +1,1614 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Thu, 29 Jun 2006 15:02:49 +0200
+Subject: [PATCH] Atmel MACB ethernet driver
+
+This is a network device driver for the Atmel MACB interface, which
+is present on the AT32AP7000 device from Atmel. I think it's basically
+the same as the EMAC interface on AT91, so it should possibly be
+merged with the at91_ether driver some time in the future. At the
+moment, however, the at91_ether driver has quite a lot of at91-
+specific dependencies so it's hard to reuse on AVR32.
+
+This is basically the same patch as the one distributed with the
+AT32STK1000 BSP version 1.0, converted to use platform_device and
+struct clk instead of at32_device.
+
+---
+ drivers/net/Kconfig | 11
+ drivers/net/Makefile | 2
+ drivers/net/macb.c | 1159 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ drivers/net/macb.h | 387 +++++++++++++++++
+ 4 files changed, 1559 insertions(+)
+
+Index: linux-2.6.18-avr32/drivers/net/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/net/Kconfig 2006-11-02 14:16:07.000000000 +0100
++++ linux-2.6.18-avr32/drivers/net/Kconfig 2006-11-02 14:17:29.000000000 +0100
+@@ -185,6 +185,17 @@ config MII
+ or internal device. It is safe to say Y or M here even if your
+ ethernet card lack MII.
+
++config MACB
++ tristate "Atmel MACB support"
++ depends on NET_ETHERNET && AVR32
++ select MII
++ help
++ The Atmel MACB ethernet interface is found on many AT32 and AT91
++ parts. Say Y to include support for the MACB chip.
++
++ To compile this driver as a module, choose M here: the module
++ will be called macb.
++
+ source "drivers/net/arm/Kconfig"
+
+ config MACE
+Index: linux-2.6.18-avr32/drivers/net/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/net/Makefile 2006-11-02 14:16:07.000000000 +0100
++++ linux-2.6.18-avr32/drivers/net/Makefile 2006-11-02 14:17:29.000000000 +0100
+@@ -202,6 +202,8 @@ obj-$(CONFIG_SMC911X) += smc911x.o
+ obj-$(CONFIG_DM9000) += dm9000.o
+ obj-$(CONFIG_FEC_8XX) += fec_8xx/
+
++obj-$(CONFIG_MACB) += macb.o
++
+ obj-$(CONFIG_ARM) += arm/
+ obj-$(CONFIG_DEV_APPLETALK) += appletalk/
+ obj-$(CONFIG_TR) += tokenring/
+Index: linux-2.6.18-avr32/drivers/net/macb.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/net/macb.c 2006-11-02 16:33:48.000000000 +0100
+@@ -0,0 +1,1159 @@
++/*
++ * Atmel MACB Ethernet Controller driver
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/clk.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/mii.h>
++#include <linux/mutex.h>
++#include <linux/dma-mapping.h>
++#include <linux/ethtool.h>
++#include <linux/platform_device.h>
++
++#include <asm/arch/board.h>
++
++#include "macb.h"
++
++#define to_net_dev(class) container_of(class, struct net_device, class_dev)
++
++#define RX_BUFFER_SIZE 128
++#define RX_RING_SIZE 512
++#define RX_RING_BYTES (sizeof(struct dma_desc) * RX_RING_SIZE)
++
++/* Make the IP header word-aligned (the ethernet header is 14 bytes) */
++#define RX_OFFSET 2
++
++#define TX_RING_SIZE 128
++#define DEF_TX_RING_PENDING (TX_RING_SIZE - 1)
++#define TX_RING_BYTES (sizeof(struct dma_desc) * TX_RING_SIZE)
++
++#define TX_RING_GAP(bp) \
++ (TX_RING_SIZE - (bp)->tx_pending)
++#define TX_BUFFS_AVAIL(bp) \
++ (((bp)->tx_tail <= (bp)->tx_head) ? \
++ (bp)->tx_tail + (bp)->tx_pending - (bp)->tx_head : \
++ (bp)->tx_tail - (bp)->tx_head - TX_RING_GAP(bp))
++#define NEXT_TX(n) (((n) + 1) & (TX_RING_SIZE - 1))
++
++#define NEXT_RX(n) (((n) + 1) & (RX_RING_SIZE - 1))
++
++/* minimum number of free TX descriptors before waking up TX process */
++#define MACB_TX_WAKEUP_THRESH (TX_RING_SIZE / 4)
++
++#define MACB_RX_INT_FLAGS (MACB_BIT(RCOMP) | MACB_BIT(RXUBR) \
++ | MACB_BIT(ISR_ROVR))
++
++static void __macb_set_hwaddr(struct macb *bp)
++{
++ u32 bottom;
++ u16 top;
++
++ bottom = cpu_to_le32(*((u32 *)bp->dev->dev_addr));
++ macb_writel(bp, SA1B, bottom);
++ top = cpu_to_le16(*((u16 *)(bp->dev->dev_addr + 4)));
++ macb_writel(bp, SA1T, top);
++}
++
++static void macb_enable_mdio(struct macb *bp)
++{
++ unsigned long flags;
++ u32 reg;
++
++ spin_lock_irqsave(&bp->lock, flags);
++ reg = macb_readl(bp, NCR);
++ reg |= MACB_BIT(MPE);
++ macb_writel(bp, NCR, reg);
++ macb_writel(bp, IER, MACB_BIT(MFD));
++ spin_unlock_irqrestore(&bp->lock, flags);
++}
++
++static void macb_disable_mdio(struct macb *bp)
++{
++ unsigned long flags;
++ u32 reg;
++
++ spin_lock_irqsave(&bp->lock, flags);
++ reg = macb_readl(bp, NCR);
++ reg &= ~MACB_BIT(MPE);
++ macb_writel(bp, NCR, reg);
++ macb_writel(bp, IDR, MACB_BIT(MFD));
++ spin_unlock_irqrestore(&bp->lock, flags);
++}
++
++static int macb_mdio_read(struct net_device *dev, int phy_id, int location)
++{
++ struct macb *bp = netdev_priv(dev);
++ int value;
++
++ mutex_lock(&bp->mdio_mutex);
++
++ macb_enable_mdio(bp);
++ macb_writel(bp, MAN, (MACB_BF(SOF, MACB_MAN_SOF)
++ | MACB_BF(RW, MACB_MAN_READ)
++ | MACB_BF(PHYA, phy_id)
++ | MACB_BF(REGA, location)
++ | MACB_BF(CODE, MACB_MAN_CODE)));
++
++ wait_for_completion(&bp->mdio_complete);
++
++ value = MACB_BFEXT(DATA, macb_readl(bp, MAN));
++ macb_disable_mdio(bp);
++ mutex_unlock(&bp->mdio_mutex);
++
++ return value;
++}
++
++static void macb_mdio_write(struct net_device *dev, int phy_id,
++ int location, int val)
++{
++ struct macb *bp = netdev_priv(dev);
++
++ dev_dbg(&bp->pdev->dev, "mdio_write %02x:%02x <- %04x\n",
++ phy_id, location, val);
++
++ mutex_lock(&bp->mdio_mutex);
++ macb_enable_mdio(bp);
++
++ macb_writel(bp, MAN, (MACB_BF(SOF, MACB_MAN_SOF)
++ | MACB_BF(RW, MACB_MAN_WRITE)
++ | MACB_BF(PHYA, phy_id)
++ | MACB_BF(REGA, location)
++ | MACB_BF(CODE, MACB_MAN_CODE)
++ | MACB_BF(DATA, val)));
++
++ wait_for_completion(&bp->mdio_complete);
++
++ macb_disable_mdio(bp);
++ mutex_unlock(&bp->mdio_mutex);
++}
++
++static void macb_set_media(struct macb *bp, int media)
++{
++ u32 reg;
++
++ spin_lock_irq(&bp->lock);
++ reg = macb_readl(bp, NCFGR);
++ reg &= ~(MACB_BIT(SPD) | MACB_BIT(FD));
++ if (media & (ADVERTISE_100HALF | ADVERTISE_100FULL))
++ reg |= MACB_BIT(SPD);
++ if (media & ADVERTISE_FULL)
++ reg |= MACB_BIT(FD);
++ macb_writel(bp, NCFGR, reg);
++ spin_unlock_irq(&bp->lock);
++}
++
++static void macb_check_media(struct macb *bp, int ok_to_print, int init_media)
++{
++ struct mii_if_info *mii = &bp->mii;
++ unsigned int old_carrier, new_carrier;
++ int advertise, lpa, media, duplex;
++
++ /* if forced media, go no further */
++ if (mii->force_media)
++ return;
++
++ /* check current and old link status */
++ old_carrier = netif_carrier_ok(mii->dev) ? 1 : 0;
++ new_carrier = (unsigned int) mii_link_ok(mii);
++
++ /* if carrier state did not change, assume nothing else did */
++ if (!init_media && old_carrier == new_carrier)
++ return;
++
++ /* no carrier, nothing much to do */
++ if (!new_carrier) {
++ netif_carrier_off(mii->dev);
++ printk(KERN_INFO "%s: link down\n", mii->dev->name);
++ return;
++ }
++
++ /*
++ * we have carrier, see who's on the other end
++ */
++ netif_carrier_on(mii->dev);
++
++ /* get MII advertise and LPA values */
++ if (!init_media && mii->advertising) {
++ advertise = mii->advertising;
++ } else {
++ advertise = mii->mdio_read(mii->dev, mii->phy_id, MII_ADVERTISE);
++ mii->advertising = advertise;
++ }
++ lpa = mii->mdio_read(mii->dev, mii->phy_id, MII_LPA);
++
++ /* figure out media and duplex from advertise and LPA values */
++ media = mii_nway_result(lpa & advertise);
++ duplex = (media & ADVERTISE_FULL) ? 1 : 0;
++
++ if (ok_to_print)
++ printk(KERN_INFO "%s: link up, %sMbps, %s-duplex, lpa 0x%04X\n",
++ mii->dev->name,
++ media & (ADVERTISE_100FULL | ADVERTISE_100HALF) ? "100" : "10",
++ duplex ? "full" : "half", lpa);
++
++ mii->full_duplex = duplex;
++
++ /* Let the MAC know about the new link state */
++ macb_set_media(bp, media);
++}
++
++static void macb_update_stats(struct macb *bp)
++{
++ u32 __iomem *reg = bp->regs + MACB_PFR;
++ u32 *p = &bp->hw_stats.rx_pause_frames;
++ u32 *end = &bp->hw_stats.tx_pause_frames + 1;
++
++ WARN_ON((unsigned long)(end - p - 1) != (MACB_TPF - MACB_PFR) / 4);
++
++ for(; p < end; p++, reg++)
++ *p += __raw_readl(reg);
++}
++
++static void macb_periodic_task(void *arg)
++{
++ struct macb *bp = arg;
++
++ macb_update_stats(bp);
++ macb_check_media(bp, 1, 0);
++
++ schedule_delayed_work(&bp->periodic_task, HZ);
++}
++
++static void macb_tx(struct macb *bp)
++{
++ unsigned int tail;
++ unsigned int head;
++ u32 status;
++
++ status = macb_readl(bp, TSR);
++ macb_writel(bp, TSR, status);
++
++ dev_dbg(&bp->pdev->dev, "macb_tx status = %02lx\n",
++ (unsigned long)status);
++
++ if (status & MACB_BIT(UND)) {
++ printk(KERN_ERR "%s: TX underrun, resetting buffers\n",
++ bp->dev->name);
++ bp->tx_head = bp->tx_tail = 0;
++ }
++
++ if (!(status & MACB_BIT(COMP)))
++ /*
++ * This may happen when a buffer becomes complete
++ * between reading the ISR and scanning the
++ * descriptors. Nothing to worry about.
++ */
++ return;
++
++ head = bp->tx_head;
++ for (tail = bp->tx_tail; tail != head; tail = NEXT_TX(tail)) {
++ struct ring_info *rp = &bp->tx_skb[tail];
++ struct sk_buff *skb = rp->skb;
++ u32 bufstat;
++
++ BUG_ON(skb == NULL);
++
++ rmb();
++ bufstat = bp->tx_ring[tail].ctrl;
++
++ if (!(bufstat & MACB_BIT(TX_USED)))
++ break;
++
++ dev_dbg(&bp->pdev->dev, "skb %u (data %p) TX complete\n",
++ tail, skb->data);
++ dma_unmap_single(&bp->pdev->dev, rp->mapping, skb->len,
++ DMA_TO_DEVICE);
++ bp->stats.tx_packets++;
++ bp->stats.tx_bytes += skb->len;
++ rp->skb = NULL;
++ dev_kfree_skb_irq(skb);
++ }
++
++ bp->tx_tail = tail;
++ if (netif_queue_stopped(bp->dev) &&
++ TX_BUFFS_AVAIL(bp) > MACB_TX_WAKEUP_THRESH)
++ netif_wake_queue(bp->dev);
++}
++
++static int macb_rx_frame(struct macb *bp, unsigned int first_frag,
++ unsigned int last_frag)
++{
++ unsigned int len;
++ unsigned int frag;
++ unsigned int offset = 0;
++ struct sk_buff *skb;
++
++ len = MACB_BFEXT(RX_FRMLEN, bp->rx_ring[last_frag].ctrl);
++
++ dev_dbg(&bp->pdev->dev, "macb_rx_frame frags %u - %u (len %u)\n",
++ first_frag, last_frag, len);
++
++ skb = dev_alloc_skb(len + RX_OFFSET);
++ if (!skb) {
++ bp->stats.rx_dropped++;
++ for (frag = first_frag; ; frag = NEXT_RX(frag)) {
++ bp->rx_ring[frag].addr &= ~MACB_BIT(RX_USED);
++ if (frag == last_frag)
++ break;
++ }
++ wmb();
++ return 1;
++ }
++
++ skb_reserve(skb, RX_OFFSET);
++ skb->dev = bp->dev;
++ skb->ip_summed = CHECKSUM_NONE;
++ skb_put(skb, len);
++
++ for (frag = first_frag; ; frag = NEXT_RX(frag)) {
++ unsigned int frag_len = RX_BUFFER_SIZE;
++
++ if (offset + frag_len > len) {
++ BUG_ON(frag != last_frag);
++ frag_len = len - offset;
++ }
++ memcpy(skb->data + offset,
++ bp->rx_buffers + (RX_BUFFER_SIZE * frag),
++ frag_len);
++ offset += RX_BUFFER_SIZE;
++ bp->rx_ring[frag].addr &= ~MACB_BIT(RX_USED);
++ wmb();
++
++ if (frag == last_frag)
++ break;
++ }
++
++ skb->protocol = eth_type_trans(skb, bp->dev);
++
++ bp->stats.rx_packets++;
++ bp->stats.rx_bytes += len;
++ bp->dev->last_rx = jiffies;
++ dev_dbg(&bp->pdev->dev, "received skb of length %u, csum: %08x\n",
++ skb->len, skb->csum);
++ netif_receive_skb(skb);
++
++ return 0;
++}
++
++/* Mark DMA descriptors from begin up to and not including end as unused */
++static void discard_partial_frame(struct macb *bp, unsigned int begin,
++ unsigned int end)
++{
++ unsigned int frag;
++
++ for (frag = begin; frag != end; frag = NEXT_RX(frag))
++ bp->rx_ring[frag].addr &= ~MACB_BIT(RX_USED);
++ wmb();
++
++ /*
++ * When this happens, the hardware stats registers for
++ * whatever caused this is updated, so we don't have to record
++ * anything.
++ */
++}
++
++static int macb_rx(struct macb *bp, int budget)
++{
++ int received = 0;
++ unsigned int tail = bp->rx_tail;
++ int first_frag = -1;
++
++ for (; budget > 0; tail = NEXT_RX(tail)) {
++ u32 addr, ctrl;
++
++ rmb();
++ addr = bp->rx_ring[tail].addr;
++ ctrl = bp->rx_ring[tail].ctrl;
++
++ if (!(addr & MACB_BIT(RX_USED)))
++ break;
++
++ if (ctrl & MACB_BIT(RX_SOF)) {
++ if (first_frag != -1)
++ discard_partial_frame(bp, first_frag, tail);
++ first_frag = tail;
++ }
++
++ if (ctrl & MACB_BIT(RX_EOF)) {
++ int dropped;
++ BUG_ON(first_frag == -1);
++
++ dropped = macb_rx_frame(bp, first_frag, tail);
++ first_frag = -1;
++ if (!dropped) {
++ received++;
++ budget--;
++ }
++ }
++ }
++
++ if (first_frag != -1)
++ bp->rx_tail = first_frag;
++ else
++ bp->rx_tail = tail;
++
++ return received;
++}
++
++static int macb_poll(struct net_device *dev, int *budget)
++{
++ struct macb *bp = netdev_priv(dev);
++ int orig_budget, work_done, retval = 0;
++ u32 status;
++
++ status = macb_readl(bp, RSR);
++ macb_writel(bp, RSR, status);
++
++ if (!status) {
++ /*
++ * This may happen if an interrupt was pending before
++ * this function was called last time, and no packets
++ * have been received since.
++ */
++ netif_rx_complete(dev);
++ goto out;
++ }
++
++ dev_dbg(&bp->pdev->dev, "poll: status = %08lx, budget = %d\n",
++ (unsigned long)status, *budget);
++
++ if (!(status & MACB_BIT(REC))) {
++ dev_warn(&bp->pdev->dev,
++ "No RX buffers complete, status = %02lx\n",
++ (unsigned long)status);
++ netif_rx_complete(dev);
++ goto out;
++ }
++
++ orig_budget = *budget;
++ if (orig_budget > dev->quota)
++ orig_budget = dev->quota;
++
++ work_done = macb_rx(bp, orig_budget);
++ if (work_done < orig_budget) {
++ netif_rx_complete(dev);
++ retval = 0;
++ } else {
++ retval = 1;
++ }
++
++ /*
++ * We've done what we can to clean the buffers. Make sure we
++ * get notified when new packets arrive.
++ */
++out:
++ macb_writel(bp, IER, MACB_RX_INT_FLAGS);
++
++ /* TODO: Handle errors */
++
++ return retval;
++}
++
++static irqreturn_t macb_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct net_device *dev = dev_id;
++ struct macb *bp = netdev_priv(dev);
++ u32 status;
++
++ status = macb_readl(bp, ISR);
++
++ if (unlikely(!status))
++ return IRQ_NONE;
++
++ spin_lock(&bp->lock);
++
++ /* close possible race with dev_close */
++ if (unlikely(!netif_running(dev))) {
++ macb_writel(bp, IDR, ~0UL);
++ spin_unlock(&bp->lock);
++ return IRQ_HANDLED;
++ }
++
++ while (status) {
++ if (status & MACB_BIT(MFD))
++ complete(&bp->mdio_complete);
++
++ if (status & MACB_RX_INT_FLAGS) {
++ if (netif_rx_schedule_prep(dev)) {
++ /*
++ * There's no point taking any more interrupts
++ * until we have processed the buffers
++ */
++ macb_writel(bp, IDR, MACB_RX_INT_FLAGS);
++ dev_dbg(&bp->pdev->dev, "scheduling RX softirq\n");
++ __netif_rx_schedule(dev);
++ }
++ }
++
++ if (status & (MACB_BIT(TCOMP) | MACB_BIT(ISR_TUND)))
++ macb_tx(bp);
++
++ /*
++ * Link change detection isn't possible with RMII, so we'll
++ * add that if/when we get our hands on a full-blown MII PHY.
++ */
++
++ if (status & MACB_BIT(HRESP)) {
++ /*
++ * TODO: Reset the hardware, and maybe move the printk
++ * to a lower-priority context as well (work queue?)
++ */
++ printk(KERN_ERR "%s: DMA bus error: HRESP not OK\n",
++ dev->name);
++ }
++
++ status = macb_readl(bp, ISR);
++ }
++
++ spin_unlock(&bp->lock);
++
++ return IRQ_HANDLED;
++}
++
++static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev)
++{
++ struct macb *bp = netdev_priv(dev);
++ dma_addr_t mapping;
++ unsigned int len, entry;
++ u32 ctrl;
++
++#ifdef DEBUG
++ int i;
++ dev_dbg(&bp->pdev->dev,
++ "start_xmit: len %u head %p data %p tail %p end %p\n",
++ skb->len, skb->head, skb->data, skb->tail, skb->end);
++ dev_dbg(&bp->pdev->dev,
++ "data:");
++ for (i = 0; i < 16; i++)
++ printk(" %02x", (unsigned int)skb->data[i]);
++ printk("\n");
++#endif
++
++ len = skb->len;
++ spin_lock_irq(&bp->lock);
++
++ /* This is a hard error, log it. */
++ if (TX_BUFFS_AVAIL(bp) < 1) {
++ netif_stop_queue(dev);
++ spin_unlock_irq(&bp->lock);
++ dev_err(&bp->pdev->dev,
++ "BUG! Tx Ring full when queue awake!\n");
++ dev_dbg(&bp->pdev->dev, "tx_head = %u, tx_tail = %u\n",
++ bp->tx_head, bp->tx_tail);
++ return 1;
++ }
++
++ entry = bp->tx_head;
++ dev_dbg(&bp->pdev->dev, "Allocated ring entry %u\n", entry);
++ mapping = dma_map_single(&bp->pdev->dev, skb->data,
++ len, DMA_TO_DEVICE);
++ bp->tx_skb[entry].skb = skb;
++ bp->tx_skb[entry].mapping = mapping;
++ dev_dbg(&bp->pdev->dev, "Mapped skb data %p to DMA addr %08lx\n",
++ skb->data, (unsigned long)mapping);
++
++ ctrl = MACB_BF(TX_FRMLEN, len);
++ ctrl |= MACB_BIT(TX_LAST);
++ if (entry == (TX_RING_SIZE - 1))
++ ctrl |= MACB_BIT(TX_WRAP);
++
++ bp->tx_ring[entry].addr = mapping;
++ bp->tx_ring[entry].ctrl = ctrl;
++ wmb();
++
++ entry = NEXT_TX(entry);
++ bp->tx_head = entry;
++
++ macb_writel(bp, NCR, macb_readl(bp, NCR) | MACB_BIT(TSTART));
++
++ if (TX_BUFFS_AVAIL(bp) < 1)
++ netif_stop_queue(dev);
++
++ spin_unlock_irq(&bp->lock);
++
++ dev->trans_start = jiffies;
++
++ return 0;
++}
++
++static void macb_free_consistent(struct macb *bp)
++{
++ if (bp->tx_skb) {
++ kfree(bp->tx_skb);
++ bp->tx_skb = NULL;
++ }
++ if (bp->rx_ring) {
++ dma_free_coherent(&bp->pdev->dev, RX_RING_BYTES,
++ bp->rx_ring, bp->rx_ring_dma);
++ bp->rx_ring = NULL;
++ }
++ if (bp->tx_ring) {
++ dma_free_coherent(&bp->pdev->dev, TX_RING_BYTES,
++ bp->tx_ring, bp->tx_ring_dma);
++ bp->tx_ring = NULL;
++ }
++ if (bp->rx_buffers) {
++ dma_free_coherent(&bp->pdev->dev,
++ RX_RING_SIZE * RX_BUFFER_SIZE,
++ bp->rx_buffers, bp->rx_buffers_dma);
++ bp->rx_buffers = NULL;
++ }
++}
++
++static int macb_alloc_consistent(struct macb *bp)
++{
++ int size;
++
++ size = TX_RING_SIZE * sizeof(struct ring_info);
++ bp->tx_skb = kmalloc(size, GFP_KERNEL);
++ if (!bp->tx_skb)
++ goto out_err;
++
++ size = RX_RING_BYTES;
++ bp->rx_ring = dma_alloc_coherent(&bp->pdev->dev, size,
++ &bp->rx_ring_dma, GFP_KERNEL);
++ if (!bp->rx_ring)
++ goto out_err;
++ dev_dbg(&bp->pdev->dev,
++ "Allocated RX ring of %d bytes at %08lx (mapped %p)\n",
++ size, (unsigned long)bp->rx_ring_dma, bp->rx_ring);
++
++ size = TX_RING_BYTES;
++ bp->tx_ring = dma_alloc_coherent(&bp->pdev->dev, size,
++ &bp->tx_ring_dma, GFP_KERNEL);
++ if (!bp->tx_ring)
++ goto out_err;
++ dev_dbg(&bp->pdev->dev,
++ "Allocated TX ring of %d bytes at %08lx (mapped %p)\n",
++ size, (unsigned long)bp->tx_ring_dma, bp->tx_ring);
++
++ size = RX_RING_SIZE * RX_BUFFER_SIZE;
++ bp->rx_buffers = dma_alloc_coherent(&bp->pdev->dev, size,
++ &bp->rx_buffers_dma, GFP_KERNEL);
++ if (!bp->rx_buffers)
++ goto out_err;
++ dev_dbg(&bp->pdev->dev,
++ "Allocated RX buffers of %d bytes at %08lx (mapped %p)\n",
++ size, (unsigned long)bp->rx_buffers_dma, bp->rx_buffers);
++
++ return 0;
++
++out_err:
++ macb_free_consistent(bp);
++ return -ENOMEM;
++}
++
++static void macb_init_rings(struct macb *bp)
++{
++ int i;
++ dma_addr_t addr;
++
++ addr = bp->rx_buffers_dma;
++ for (i = 0; i < RX_RING_SIZE; i++) {
++ bp->rx_ring[i].addr = addr;
++ bp->rx_ring[i].ctrl = 0;
++ addr += RX_BUFFER_SIZE;
++ }
++ bp->rx_ring[RX_RING_SIZE - 1].addr |= MACB_BIT(RX_WRAP);
++
++ for (i = 0; i < TX_RING_SIZE; i++) {
++ bp->tx_ring[i].addr = 0;
++ bp->tx_ring[i].ctrl = MACB_BIT(TX_USED);
++ }
++ bp->tx_ring[TX_RING_SIZE - 1].ctrl |= MACB_BIT(TX_WRAP);
++
++ bp->rx_tail = bp->tx_head = bp->tx_tail = 0;
++}
++
++static void macb_reset_hw(struct macb *bp)
++{
++ /* Make sure we have the write buffer for ourselves */
++ wmb();
++
++ /*
++ * Disable RX and TX (XXX: Should we halt the transmission
++ * more gracefully?)
++ */
++ macb_writel(bp, NCR, 0);
++
++ /* Clear the stats registers (XXX: Update stats first?) */
++ macb_writel(bp, NCR, MACB_BIT(CLRSTAT));
++
++ /* Clear all status flags */
++ macb_writel(bp, TSR, ~0UL);
++ macb_writel(bp, RSR, ~0UL);
++
++ /* Disable all interrupts */
++ macb_writel(bp, IDR, ~0UL);
++ macb_readl(bp, ISR);
++}
++
++static void macb_init_hw(struct macb *bp)
++{
++ unsigned long pclk_hz;
++ u32 config;
++
++ macb_reset_hw(bp);
++ __macb_set_hwaddr(bp);
++
++ /* Set RMII mode */
++ macb_writel(bp, USRIO, MACB_BIT(RMII));
++
++ /* Initialize Network Configuration Register */
++ pclk_hz = clk_get_rate(bp->pclk);
++ if (pclk_hz <= 20000000)
++ config = MACB_BF(CLK, MACB_CLK_DIV8);
++ else if (pclk_hz <= 40000000)
++ config = MACB_BF(CLK, MACB_CLK_DIV16);
++ else if (pclk_hz <= 80000000)
++ config = MACB_BF(CLK, MACB_CLK_DIV32);
++ else
++ config = MACB_BF(CLK, MACB_CLK_DIV64);
++
++ config |= MACB_BIT(PAE); /* PAuse Enable */
++ config |= MACB_BIT(DRFCS); /* Discard Rx FCS */
++ if (bp->dev->flags & IFF_PROMISC)
++ config |= MACB_BIT(CAF); /* Copy All Frames */
++ if (!(bp->dev->flags & IFF_BROADCAST))
++ config |= MACB_BIT(NBC); /* No BroadCast */
++ macb_writel(bp, NCFGR, config);
++
++ /* Initialize TX and RX buffers */
++ macb_writel(bp, RBQP, bp->rx_ring_dma);
++ macb_writel(bp, TBQP, bp->tx_ring_dma);
++
++ /* Enable TX and RX */
++ macb_writel(bp, NCR, MACB_BIT(RE) | MACB_BIT(TE));
++
++ /* Enable interrupts */
++ macb_writel(bp, IER, (MACB_BIT(RCOMP)
++ | MACB_BIT(RXUBR)
++ | MACB_BIT(ISR_TUND)
++ | MACB_BIT(ISR_RLE)
++ | MACB_BIT(TXERR)
++ | MACB_BIT(TCOMP)
++ | MACB_BIT(ISR_ROVR)
++ | MACB_BIT(HRESP)));
++}
++
++static void macb_init_phy(struct net_device *dev)
++{
++ struct macb *bp = netdev_priv(dev);
++
++ /* Set some reasonable default settings */
++ macb_mdio_write(dev, bp->mii.phy_id, MII_ADVERTISE,
++ ADVERTISE_CSMA | ADVERTISE_ALL);
++ macb_mdio_write(dev, bp->mii.phy_id, MII_BMCR,
++ (BMCR_SPEED100 | BMCR_ANENABLE
++ | BMCR_ANRESTART | BMCR_FULLDPLX));
++}
++
++static int macb_open(struct net_device *dev)
++{
++ struct macb *bp = netdev_priv(dev);
++ int err;
++
++ dev_dbg(&bp->pdev->dev, "open\n");
++
++ err = macb_alloc_consistent(bp);
++ if (err) {
++ printk(KERN_ERR
++ "%s: Unable to allocate DMA memory (error %d)\n",
++ dev->name, err);
++ return err;
++ }
++
++ macb_init_rings(bp);
++ macb_init_hw(bp);
++ macb_init_phy(dev);
++
++ macb_check_media(bp, 1, 1);
++ netif_start_queue(dev);
++
++ schedule_delayed_work(&bp->periodic_task, HZ);
++
++ return 0;
++}
++
++static int macb_close(struct net_device *dev)
++{
++ struct macb *bp = netdev_priv(dev);
++ unsigned long flags;
++
++ cancel_rearming_delayed_work(&bp->periodic_task);
++
++ netif_stop_queue(dev);
++
++ spin_lock_irqsave(&bp->lock, flags);
++ macb_reset_hw(bp);
++ netif_carrier_off(dev);
++ spin_unlock_irqrestore(&bp->lock, flags);
++
++ macb_free_consistent(bp);
++
++ return 0;
++}
++
++static struct net_device_stats *macb_get_stats(struct net_device *dev)
++{
++ struct macb *bp = netdev_priv(dev);
++ struct net_device_stats *nstat = &bp->stats;
++ struct macb_stats *hwstat = &bp->hw_stats;
++
++ /* Convert HW stats into netdevice stats */
++ nstat->rx_errors = (hwstat->rx_fcs_errors +
++ hwstat->rx_align_errors +
++ hwstat->rx_resource_errors +
++ hwstat->rx_overruns +
++ hwstat->rx_oversize_pkts +
++ hwstat->rx_jabbers +
++ hwstat->rx_undersize_pkts +
++ hwstat->sqe_test_errors +
++ hwstat->rx_length_mismatch);
++ nstat->tx_errors = (hwstat->tx_late_cols +
++ hwstat->tx_excessive_cols +
++ hwstat->tx_underruns +
++ hwstat->tx_carrier_errors);
++ nstat->collisions = (hwstat->tx_single_cols +
++ hwstat->tx_multiple_cols +
++ hwstat->tx_excessive_cols);
++ nstat->rx_length_errors = (hwstat->rx_oversize_pkts +
++ hwstat->rx_jabbers +
++ hwstat->rx_undersize_pkts +
++ hwstat->rx_length_mismatch);
++ nstat->rx_over_errors = hwstat->rx_resource_errors;
++ nstat->rx_crc_errors = hwstat->rx_fcs_errors;
++ nstat->rx_frame_errors = hwstat->rx_align_errors;
++ nstat->rx_fifo_errors = hwstat->rx_overruns;
++ /* XXX: What does "missed" mean? */
++ nstat->tx_aborted_errors = hwstat->tx_excessive_cols;
++ nstat->tx_carrier_errors = hwstat->tx_carrier_errors;
++ nstat->tx_fifo_errors = hwstat->tx_underruns;
++ /* Don't know about heartbeat or window errors... */
++
++ return nstat;
++}
++
++static int macb_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
++{
++ struct macb *bp = netdev_priv(dev);
++ int ret;
++ unsigned long flags;
++
++ spin_lock_irqsave(&bp->lock, flags);
++ ret = mii_ethtool_gset(&bp->mii, cmd);
++ spin_unlock_irqrestore(&bp->lock, flags);
++
++ return ret;
++}
++
++static int macb_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
++{
++ struct macb *bp = netdev_priv(dev);
++ int ret;
++ unsigned long flags;
++
++ spin_lock_irqsave(&bp->lock, flags);
++ ret = mii_ethtool_sset(&bp->mii, cmd);
++ spin_unlock_irqrestore(&bp->lock, flags);
++
++ return ret;
++}
++
++static void macb_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
++{
++ struct macb *bp = netdev_priv(dev);
++
++ strcpy(info->driver, bp->pdev->dev.driver->name);
++ strcpy(info->version, "$Revision: 1.14 $");
++ strcpy(info->bus_info, bp->pdev->dev.bus_id);
++}
++
++static int macb_nway_reset(struct net_device *dev)
++{
++ struct macb *bp = netdev_priv(dev);
++ return mii_nway_restart(&bp->mii);
++}
++
++static struct ethtool_ops macb_ethtool_ops = {
++ .get_settings = macb_get_settings,
++ .set_settings = macb_set_settings,
++ .get_drvinfo = macb_get_drvinfo,
++ .nway_reset = macb_nway_reset,
++ .get_link = ethtool_op_get_link,
++};
++
++static int macb_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
++{
++ struct macb *bp = netdev_priv(dev);
++ int ret;
++ unsigned long flags;
++
++ if (!netif_running(dev))
++ return -EINVAL;
++
++ spin_lock_irqsave(&bp->lock, flags);
++ ret = generic_mii_ioctl(&bp->mii, if_mii(rq), cmd, NULL);
++ spin_unlock_irqrestore(&bp->lock, flags);
++
++ return ret;
++}
++
++static ssize_t macb_mii_show(const struct class_device *cd, char *buf,
++ unsigned long addr)
++{
++ struct net_device *dev = to_net_dev(cd);
++ struct macb *bp = netdev_priv(dev);
++ ssize_t ret = -EINVAL;
++
++ if (netif_running(dev)) {
++ int value;
++ value = macb_mdio_read(dev, bp->mii.phy_id, addr);
++ ret = sprintf(buf, "0x%04x\n", (uint16_t)value);
++ }
++
++ return ret;
++}
++
++#define MII_ENTRY(name, addr) \
++static ssize_t show_##name(struct class_device *cd, char *buf) \
++{ \
++ return macb_mii_show(cd, buf, addr); \
++} \
++static CLASS_DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
++
++MII_ENTRY(bmcr, MII_BMCR);
++MII_ENTRY(bmsr, MII_BMSR);
++MII_ENTRY(physid1, MII_PHYSID1);
++MII_ENTRY(physid2, MII_PHYSID2);
++MII_ENTRY(advertise, MII_ADVERTISE);
++MII_ENTRY(lpa, MII_LPA);
++MII_ENTRY(expansion, MII_EXPANSION);
++
++static struct attribute *macb_mii_attrs[] = {
++ &class_device_attr_bmcr.attr,
++ &class_device_attr_bmsr.attr,
++ &class_device_attr_physid1.attr,
++ &class_device_attr_physid2.attr,
++ &class_device_attr_advertise.attr,
++ &class_device_attr_lpa.attr,
++ &class_device_attr_expansion.attr,
++ NULL,
++};
++
++static struct attribute_group macb_mii_group = {
++ .name = "mii",
++ .attrs = macb_mii_attrs,
++};
++
++static void macb_unregister_sysfs(struct net_device *net)
++{
++ struct class_device *class_dev = &net->class_dev;
++
++ sysfs_remove_group(&class_dev->kobj, &macb_mii_group);
++}
++
++static int macb_register_sysfs(struct net_device *net)
++{
++ struct class_device *class_dev = &net->class_dev;
++ int ret;
++
++ ret = sysfs_create_group(&class_dev->kobj, &macb_mii_group);
++ if (ret)
++ printk(KERN_WARNING
++ "%s: sysfs mii attribute registration failed: %d\n",
++ net->name, ret);
++ return ret;
++}
++static int __devinit macb_probe(struct platform_device *pdev)
++{
++ struct eth_platform_data *pdata;
++ struct resource *regs;
++ struct net_device *dev;
++ struct macb *bp;
++ int err = -ENXIO;
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!regs) {
++ dev_err(&pdev->dev, "no mmio resource defined\n");
++ goto err_out;
++ }
++
++ err = -ENOMEM;
++ dev = alloc_etherdev(sizeof(*bp));
++ if (!dev) {
++ dev_err(&pdev->dev, "etherdev alloc failed, aborting.\n");
++ goto err_out;
++ }
++
++ SET_MODULE_OWNER(dev);
++ SET_NETDEV_DEV(dev, &pdev->dev);
++
++ /* TODO: Actually, we have some interesting features... */
++ dev->features |= 0;
++
++ bp = netdev_priv(dev);
++ bp->pdev = pdev;
++ bp->dev = dev;
++
++ spin_lock_init(&bp->lock);
++
++ bp->pclk = clk_get(&pdev->dev, "pclk");
++ if (IS_ERR(bp->pclk)) {
++ dev_err(&pdev->dev, "failed to get pclk\n");
++ goto err_out_free_dev;
++ }
++ bp->hclk = clk_get(&pdev->dev, "hclk");
++ if (IS_ERR(bp->hclk)) {
++ dev_err(&pdev->dev, "failed to get hclk\n");
++ goto err_out_put_pclk;
++ }
++
++ clk_enable(bp->pclk);
++ clk_enable(bp->hclk);
++
++ bp->regs = ioremap(regs->start, regs->end - regs->start + 1);
++ if (!bp->regs) {
++ dev_err(&pdev->dev, "failed to map registers, aborting.\n");
++ err = -ENOMEM;
++ goto err_out_disable_clocks;
++ }
++
++ dev->irq = platform_get_irq(pdev, 0);
++ err = request_irq(dev->irq, macb_interrupt, SA_SAMPLE_RANDOM,
++ dev->name, dev);
++ if (err) {
++ printk(KERN_ERR
++ "%s: Unable to request IRQ %d (error %d)\n",
++ dev->name, dev->irq, err);
++ goto err_out_iounmap;
++ }
++
++ dev->open = macb_open;
++ dev->stop = macb_close;
++ dev->hard_start_xmit = macb_start_xmit;
++ dev->get_stats = macb_get_stats;
++ dev->do_ioctl = macb_ioctl;
++ dev->poll = macb_poll;
++ dev->weight = 64;
++ dev->ethtool_ops = &macb_ethtool_ops;
++
++ dev->base_addr = regs->start;
++
++ INIT_WORK(&bp->periodic_task, macb_periodic_task, bp);
++ mutex_init(&bp->mdio_mutex);
++ init_completion(&bp->mdio_complete);
++
++ bp->mii.dev = dev;
++ bp->mii.mdio_read = macb_mdio_read;
++ bp->mii.mdio_write = macb_mdio_write;
++
++ pdata = pdev->dev.platform_data;
++ if (!pdata) {
++ dev_err(&pdev->dev, "Cannot determine hw address\n");
++ goto err_out_free_irq;
++ }
++
++ memcpy(dev->dev_addr, pdata->hw_addr, dev->addr_len);
++ bp->mii.phy_id = pdata->mii_phy_addr;
++ bp->mii.phy_id_mask = 0x1f;
++ bp->mii.reg_num_mask = 0x1f;
++
++ bp->tx_pending = DEF_TX_RING_PENDING;
++
++ err = register_netdev(dev);
++ if (err) {
++ dev_err(&pdev->dev, "Cannot register net device, aborting.\n");
++ goto err_out_free_irq;
++ }
++
++ platform_set_drvdata(pdev, dev);
++
++ macb_register_sysfs(dev);
++
++ printk(KERN_INFO "%s: Atmel MACB at 0x%08lx irq %d "
++ "(%02x:%02x:%02x:%02x:%02x:%02x)\n",
++ dev->name, dev->base_addr, dev->irq,
++ dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2],
++ dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]);
++
++ return 0;
++
++err_out_free_irq:
++ free_irq(dev->irq, dev);
++err_out_iounmap:
++ iounmap(bp->regs);
++err_out_disable_clocks:
++ clk_disable(bp->hclk);
++ clk_disable(bp->pclk);
++ clk_put(bp->hclk);
++err_out_put_pclk:
++ clk_put(bp->pclk);
++err_out_free_dev:
++ free_netdev(dev);
++err_out:
++ platform_set_drvdata(pdev, NULL);
++ return err;
++}
++
++static int __devexit macb_remove(struct platform_device *pdev)
++{
++ struct net_device *dev;
++ struct macb *bp;
++
++ dev = platform_get_drvdata(pdev);
++
++ if (dev) {
++ bp = netdev_priv(dev);
++ macb_unregister_sysfs(dev);
++ unregister_netdev(dev);
++ free_irq(dev->irq, dev);
++ iounmap(bp->regs);
++ clk_disable(bp->hclk);
++ clk_disable(bp->pclk);
++ clk_put(bp->hclk);
++ clk_put(bp->pclk);
++ free_netdev(dev);
++ platform_set_drvdata(pdev, NULL);
++ }
++
++ return 0;
++}
++
++static struct platform_driver macb_driver = {
++ .probe = macb_probe,
++ .remove = __devexit_p(macb_remove),
++ .driver = {
++ .name = "macb",
++ },
++};
++
++static int __init macb_init(void)
++{
++ return platform_driver_register(&macb_driver);
++}
++
++static void __exit macb_exit(void)
++{
++ platform_driver_unregister(&macb_driver);
++}
++
++module_init(macb_init);
++module_exit(macb_exit);
++
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("Atmel MACB Ethernet driver");
++MODULE_AUTHOR("Haavard Skinnemoen <hskinnemoen@atmel.com>");
+Index: linux-2.6.18-avr32/drivers/net/macb.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/net/macb.h 2006-11-02 16:33:26.000000000 +0100
+@@ -0,0 +1,387 @@
++/*
++ * Atmel MACB Ethernet Controller driver
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef _MACB_H
++#define _MACB_H
++
++/* MACB register offsets */
++#define MACB_NCR 0x0000
++#define MACB_NCFGR 0x0004
++#define MACB_NSR 0x0008
++#define MACB_TSR 0x0014
++#define MACB_RBQP 0x0018
++#define MACB_TBQP 0x001c
++#define MACB_RSR 0x0020
++#define MACB_ISR 0x0024
++#define MACB_IER 0x0028
++#define MACB_IDR 0x002c
++#define MACB_IMR 0x0030
++#define MACB_MAN 0x0034
++#define MACB_PTR 0x0038
++#define MACB_PFR 0x003c
++#define MACB_FTO 0x0040
++#define MACB_SCF 0x0044
++#define MACB_MCF 0x0048
++#define MACB_FRO 0x004c
++#define MACB_FCSE 0x0050
++#define MACB_ALE 0x0054
++#define MACB_DTF 0x0058
++#define MACB_LCOL 0x005c
++#define MACB_EXCOL 0x0060
++#define MACB_TUND 0x0064
++#define MACB_CSE 0x0068
++#define MACB_RRE 0x006c
++#define MACB_ROVR 0x0070
++#define MACB_RSE 0x0074
++#define MACB_ELE 0x0078
++#define MACB_RJA 0x007c
++#define MACB_USF 0x0080
++#define MACB_STE 0x0084
++#define MACB_RLE 0x0088
++#define MACB_TPF 0x008c
++#define MACB_HRB 0x0090
++#define MACB_HRT 0x0094
++#define MACB_SA1B 0x0098
++#define MACB_SA1T 0x009c
++#define MACB_SA2B 0x00a0
++#define MACB_SA2T 0x00a4
++#define MACB_SA3B 0x00a8
++#define MACB_SA3T 0x00ac
++#define MACB_SA4B 0x00b0
++#define MACB_SA4T 0x00b4
++#define MACB_TID 0x00b8
++#define MACB_TPQ 0x00bc
++#define MACB_USRIO 0x00c0
++#define MACB_WOL 0x00c4
++
++/* Bitfields in NCR */
++#define MACB_LB_OFFSET 0
++#define MACB_LB_SIZE 1
++#define MACB_LLB_OFFSET 1
++#define MACB_LLB_SIZE 1
++#define MACB_RE_OFFSET 2
++#define MACB_RE_SIZE 1
++#define MACB_TE_OFFSET 3
++#define MACB_TE_SIZE 1
++#define MACB_MPE_OFFSET 4
++#define MACB_MPE_SIZE 1
++#define MACB_CLRSTAT_OFFSET 5
++#define MACB_CLRSTAT_SIZE 1
++#define MACB_INCSTAT_OFFSET 6
++#define MACB_INCSTAT_SIZE 1
++#define MACB_WESTAT_OFFSET 7
++#define MACB_WESTAT_SIZE 1
++#define MACB_BP_OFFSET 8
++#define MACB_BP_SIZE 1
++#define MACB_TSTART_OFFSET 9
++#define MACB_TSTART_SIZE 1
++#define MACB_THALT_OFFSET 10
++#define MACB_THALT_SIZE 1
++#define MACB_NCR_TPF_OFFSET 11
++#define MACB_NCR_TPF_SIZE 1
++#define MACB_TZQ_OFFSET 12
++#define MACB_TZQ_SIZE 1
++
++/* Bitfields in NCFGR */
++#define MACB_SPD_OFFSET 0
++#define MACB_SPD_SIZE 1
++#define MACB_FD_OFFSET 1
++#define MACB_FD_SIZE 1
++#define MACB_BIT_RATE_OFFSET 2
++#define MACB_BIT_RATE_SIZE 1
++#define MACB_JFRAME_OFFSET 3
++#define MACB_JFRAME_SIZE 1
++#define MACB_CAF_OFFSET 4
++#define MACB_CAF_SIZE 1
++#define MACB_NBC_OFFSET 5
++#define MACB_NBC_SIZE 1
++#define MACB_NCFGR_MTI_OFFSET 6
++#define MACB_NCFGR_MTI_SIZE 1
++#define MACB_UNI_OFFSET 7
++#define MACB_UNI_SIZE 1
++#define MACB_BIG_OFFSET 8
++#define MACB_BIG_SIZE 1
++#define MACB_EAE_OFFSET 9
++#define MACB_EAE_SIZE 1
++#define MACB_CLK_OFFSET 10
++#define MACB_CLK_SIZE 2
++#define MACB_RTY_OFFSET 12
++#define MACB_RTY_SIZE 1
++#define MACB_PAE_OFFSET 13
++#define MACB_PAE_SIZE 1
++#define MACB_RBOF_OFFSET 14
++#define MACB_RBOF_SIZE 2
++#define MACB_RLCE_OFFSET 16
++#define MACB_RLCE_SIZE 1
++#define MACB_DRFCS_OFFSET 17
++#define MACB_DRFCS_SIZE 1
++#define MACB_EFRHD_OFFSET 18
++#define MACB_EFRHD_SIZE 1
++#define MACB_IRXFCS_OFFSET 19
++#define MACB_IRXFCS_SIZE 1
++
++/* Bitfields in NSR */
++#define MACB_NSR_LINK_OFFSET 0
++#define MACB_NSR_LINK_SIZE 1
++#define MACB_MDIO_OFFSET 1
++#define MACB_MDIO_SIZE 1
++#define MACB_IDLE_OFFSET 2
++#define MACB_IDLE_SIZE 1
++
++/* Bitfields in TSR */
++#define MACB_UBR_OFFSET 0
++#define MACB_UBR_SIZE 1
++#define MACB_COL_OFFSET 1
++#define MACB_COL_SIZE 1
++#define MACB_TSR_RLE_OFFSET 2
++#define MACB_TSR_RLE_SIZE 1
++#define MACB_TGO_OFFSET 3
++#define MACB_TGO_SIZE 1
++#define MACB_BEX_OFFSET 4
++#define MACB_BEX_SIZE 1
++#define MACB_COMP_OFFSET 5
++#define MACB_COMP_SIZE 1
++#define MACB_UND_OFFSET 6
++#define MACB_UND_SIZE 1
++
++/* Bitfields in RSR */
++#define MACB_BNA_OFFSET 0
++#define MACB_BNA_SIZE 1
++#define MACB_REC_OFFSET 1
++#define MACB_REC_SIZE 1
++#define MACB_OVR_OFFSET 2
++#define MACB_OVR_SIZE 1
++
++/* Bitfields in ISR/IER/IDR/IMR */
++#define MACB_MFD_OFFSET 0
++#define MACB_MFD_SIZE 1
++#define MACB_RCOMP_OFFSET 1
++#define MACB_RCOMP_SIZE 1
++#define MACB_RXUBR_OFFSET 2
++#define MACB_RXUBR_SIZE 1
++#define MACB_TXUBR_OFFSET 3
++#define MACB_TXUBR_SIZE 1
++#define MACB_ISR_TUND_OFFSET 4
++#define MACB_ISR_TUND_SIZE 1
++#define MACB_ISR_RLE_OFFSET 5
++#define MACB_ISR_RLE_SIZE 1
++#define MACB_TXERR_OFFSET 6
++#define MACB_TXERR_SIZE 1
++#define MACB_TCOMP_OFFSET 7
++#define MACB_TCOMP_SIZE 1
++#define MACB_ISR_LINK_OFFSET 9
++#define MACB_ISR_LINK_SIZE 1
++#define MACB_ISR_ROVR_OFFSET 10
++#define MACB_ISR_ROVR_SIZE 1
++#define MACB_HRESP_OFFSET 11
++#define MACB_HRESP_SIZE 1
++#define MACB_PFR_OFFSET 12
++#define MACB_PFR_SIZE 1
++#define MACB_PTZ_OFFSET 13
++#define MACB_PTZ_SIZE 1
++
++/* Bitfields in MAN */
++#define MACB_DATA_OFFSET 0
++#define MACB_DATA_SIZE 16
++#define MACB_CODE_OFFSET 16
++#define MACB_CODE_SIZE 2
++#define MACB_REGA_OFFSET 18
++#define MACB_REGA_SIZE 5
++#define MACB_PHYA_OFFSET 23
++#define MACB_PHYA_SIZE 5
++#define MACB_RW_OFFSET 28
++#define MACB_RW_SIZE 2
++#define MACB_SOF_OFFSET 30
++#define MACB_SOF_SIZE 2
++
++/* Bitfields in USRIO */
++#define MACB_RMII_OFFSET 0
++#define MACB_RMII_SIZE 1
++#define MACB_EAM_OFFSET 1
++#define MACB_EAM_SIZE 1
++#define MACB_TX_PAUSE_OFFSET 2
++#define MACB_TX_PAUSE_SIZE 1
++#define MACB_TX_PAUSE_ZERO_OFFSET 3
++#define MACB_TX_PAUSE_ZERO_SIZE 1
++
++/* Bitfields in WOL */
++#define MACB_IP_OFFSET 0
++#define MACB_IP_SIZE 16
++#define MACB_MAG_OFFSET 16
++#define MACB_MAG_SIZE 1
++#define MACB_ARP_OFFSET 17
++#define MACB_ARP_SIZE 1
++#define MACB_SA1_OFFSET 18
++#define MACB_SA1_SIZE 1
++#define MACB_WOL_MTI_OFFSET 19
++#define MACB_WOL_MTI_SIZE 1
++
++/* Constants for CLK */
++#define MACB_CLK_DIV8 0
++#define MACB_CLK_DIV16 1
++#define MACB_CLK_DIV32 2
++#define MACB_CLK_DIV64 3
++
++/* Constants for MAN register */
++#define MACB_MAN_SOF 1
++#define MACB_MAN_WRITE 1
++#define MACB_MAN_READ 2
++#define MACB_MAN_CODE 2
++
++/* Bit manipulation macros */
++#define MACB_BIT(name) \
++ (1 << MACB_##name##_OFFSET)
++#define MACB_BF(name,value) \
++ (((value) & ((1 << MACB_##name##_SIZE) - 1)) \
++ << MACB_##name##_OFFSET)
++#define MACB_BFEXT(name,value)\
++ (((value) >> MACB_##name##_OFFSET) \
++ & ((1 << MACB_##name##_SIZE) - 1))
++#define MACB_BFINS(name,value,old) \
++ (((old) & ~(((1 << MACB_##name##_SIZE) - 1) \
++ << MACB_##name##_OFFSET)) \
++ | MACB_BF(name,value))
++
++/* Register access macros */
++#define macb_readl(port,reg) \
++ __raw_readl((port)->regs + MACB_##reg)
++#define macb_writel(port,reg,value) \
++ __raw_writel((value), (port)->regs + MACB_##reg)
++
++struct dma_desc {
++ u32 addr;
++ u32 ctrl;
++};
++
++/* DMA descriptor bitfields */
++#define MACB_RX_USED_OFFSET 0
++#define MACB_RX_USED_SIZE 1
++#define MACB_RX_WRAP_OFFSET 1
++#define MACB_RX_WRAP_SIZE 1
++#define MACB_RX_WADDR_OFFSET 2
++#define MACB_RX_WADDR_SIZE 30
++
++#define MACB_RX_FRMLEN_OFFSET 0
++#define MACB_RX_FRMLEN_SIZE 12
++#define MACB_RX_OFFSET_OFFSET 12
++#define MACB_RX_OFFSET_SIZE 2
++#define MACB_RX_SOF_OFFSET 14
++#define MACB_RX_SOF_SIZE 1
++#define MACB_RX_EOF_OFFSET 15
++#define MACB_RX_EOF_SIZE 1
++#define MACB_RX_CFI_OFFSET 16
++#define MACB_RX_CFI_SIZE 1
++#define MACB_RX_VLAN_PRI_OFFSET 17
++#define MACB_RX_VLAN_PRI_SIZE 3
++#define MACB_RX_PRI_TAG_OFFSET 20
++#define MACB_RX_PRI_TAG_SIZE 1
++#define MACB_RX_VLAN_TAG_OFFSET 21
++#define MACB_RX_VLAN_TAG_SIZE 1
++#define MACB_RX_TYPEID_MATCH_OFFSET 22
++#define MACB_RX_TYPEID_MATCH_SIZE 1
++#define MACB_RX_SA4_MATCH_OFFSET 23
++#define MACB_RX_SA4_MATCH_SIZE 1
++#define MACB_RX_SA3_MATCH_OFFSET 24
++#define MACB_RX_SA3_MATCH_SIZE 1
++#define MACB_RX_SA2_MATCH_OFFSET 25
++#define MACB_RX_SA2_MATCH_SIZE 1
++#define MACB_RX_SA1_MATCH_OFFSET 26
++#define MACB_RX_SA1_MATCH_SIZE 1
++#define MACB_RX_EXT_MATCH_OFFSET 28
++#define MACB_RX_EXT_MATCH_SIZE 1
++#define MACB_RX_UHASH_MATCH_OFFSET 29
++#define MACB_RX_UHASH_MATCH_SIZE 1
++#define MACB_RX_MHASH_MATCH_OFFSET 30
++#define MACB_RX_MHASH_MATCH_SIZE 1
++#define MACB_RX_BROADCAST_OFFSET 31
++#define MACB_RX_BROADCAST_SIZE 1
++
++#define MACB_TX_FRMLEN_OFFSET 0
++#define MACB_TX_FRMLEN_SIZE 11
++#define MACB_TX_LAST_OFFSET 15
++#define MACB_TX_LAST_SIZE 1
++#define MACB_TX_NOCRC_OFFSET 16
++#define MACB_TX_NOCRC_SIZE 1
++#define MACB_TX_BUF_EXHAUSTED_OFFSET 27
++#define MACB_TX_BUF_EXHAUSTED_SIZE 1
++#define MACB_TX_UNDERRUN_OFFSET 28
++#define MACB_TX_UNDERRUN_SIZE 1
++#define MACB_TX_ERROR_OFFSET 29
++#define MACB_TX_ERROR_SIZE 1
++#define MACB_TX_WRAP_OFFSET 30
++#define MACB_TX_WRAP_SIZE 1
++#define MACB_TX_USED_OFFSET 31
++#define MACB_TX_USED_SIZE 1
++
++struct ring_info {
++ struct sk_buff *skb;
++ dma_addr_t mapping;
++};
++
++/*
++ * Hardware-collected statistics. Used when updating the network
++ * device stats by a periodic timer.
++ */
++struct macb_stats {
++ u32 rx_pause_frames;
++ u32 tx_ok;
++ u32 tx_single_cols;
++ u32 tx_multiple_cols;
++ u32 rx_ok;
++ u32 rx_fcs_errors;
++ u32 rx_align_errors;
++ u32 tx_deferred;
++ u32 tx_late_cols;
++ u32 tx_excessive_cols;
++ u32 tx_underruns;
++ u32 tx_carrier_errors;
++ u32 rx_resource_errors;
++ u32 rx_overruns;
++ u32 rx_symbol_errors;
++ u32 rx_oversize_pkts;
++ u32 rx_jabbers;
++ u32 rx_undersize_pkts;
++ u32 sqe_test_errors;
++ u32 rx_length_mismatch;
++ u32 tx_pause_frames;
++};
++
++struct macb {
++ void __iomem *regs;
++
++ unsigned int rx_tail;
++ struct dma_desc *rx_ring;
++ void *rx_buffers;
++
++ unsigned int tx_head, tx_tail;
++ struct dma_desc *tx_ring;
++ struct ring_info *tx_skb;
++
++ spinlock_t lock;
++ struct platform_device *pdev;
++ struct clk *pclk;
++ struct clk *hclk;
++ struct net_device *dev;
++ struct net_device_stats stats;
++ struct macb_stats hw_stats;
++
++ dma_addr_t rx_ring_dma;
++ dma_addr_t tx_ring_dma;
++ dma_addr_t rx_buffers_dma;
++
++ unsigned int rx_pending, tx_pending;
++
++ struct work_struct periodic_task;
++
++ struct mutex mdio_mutex;
++ struct completion mdio_complete;
++ struct mii_if_info mii;
++};
++
++#endif /* _MACB_H */
diff --git a/packages/linux/linux-2.6.18/atmel-mci-debugfs.patch b/packages/linux/linux-2.6.18/atmel-mci-debugfs.patch
new file mode 100644
index 0000000000..4570bd8e93
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel-mci-debugfs.patch
@@ -0,0 +1,278 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Sun, 14 Jan 2007 19:07:06 +0100
+Subject: [ATMEL MCI] Add debugfs support
+
+Export some of the atmel-mci driver state through debugfs. More
+specifically:
+ * The MCI hardware registers
+ * The request currently being processed
+ * Pending and processed event masks
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+---
+ drivers/mmc/atmel-mci.c | 230 ++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 230 insertions(+)
+
+Index: linux-2.6.18-avr32/drivers/mmc/atmel-mci.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/mmc/atmel-mci.c 2007-01-15 15:35:45.000000000 +0100
++++ linux-2.6.18-avr32/drivers/mmc/atmel-mci.c 2007-01-15 15:38:05.000000000 +0100
+@@ -79,6 +79,14 @@ struct atmel_mci {
+ struct clk *mck;
+ struct mmci_platform_data *board;
+ struct platform_device *pdev;
++
++#ifdef CONFIG_DEBUG_FS
++ struct dentry *debugfs_root;
++ struct dentry *debugfs_regs;
++ struct dentry *debugfs_req;
++ struct dentry *debugfs_pending_events;
++ struct dentry *debugfs_completed_events;
++#endif
+ };
+
+ /* Those printks take an awful lot of time... */
+@@ -90,6 +98,224 @@ static unsigned int fmax = 1000000U;
+ module_param(fmax, uint, 0444);
+ MODULE_PARM_DESC(fmax, "Max frequency in Hz of the MMC bus clock");
+
++#ifdef CONFIG_DEBUG_FS
++#include <linux/debugfs.h>
++
++#define DBG_REQ_BUF_SIZE (4096 - sizeof(unsigned int))
++
++struct req_dbg_data {
++ unsigned int nbytes;
++ char str[DBG_REQ_BUF_SIZE];
++};
++
++static int req_dbg_open(struct inode *inode, struct file *file)
++{
++ struct atmel_mci *host;
++ struct mmc_request *mrq;
++ struct mmc_command *cmd, *stop;
++ struct mmc_data *data;
++ struct req_dbg_data *priv;
++ char *str;
++ unsigned long n = 0;
++
++ priv = kzalloc(DBG_REQ_BUF_SIZE, GFP_KERNEL);
++ if (!priv)
++ return -ENOMEM;
++ str = priv->str;
++
++ mutex_lock(&inode->i_mutex);
++ host = inode->u.generic_ip;
++
++ spin_lock_irq(&host->mmc->lock);
++ mrq = host->mrq;
++ if (mrq) {
++ cmd = mrq->cmd;
++ data = mrq->data;
++ stop = mrq->stop;
++ n = snprintf(str, DBG_REQ_BUF_SIZE,
++ "CMD%u(0x%x) %x %x %x %x %x (err %u)\n",
++ cmd->opcode, cmd->arg, cmd->flags,
++ cmd->resp[0], cmd->resp[1], cmd->resp[2],
++ cmd->resp[3], cmd->error);
++ if (n < DBG_REQ_BUF_SIZE && data)
++ n += snprintf(str + n, DBG_REQ_BUF_SIZE - n,
++ "DATA %u * %u (%u) %x (err %u)\n",
++ data->blocks, data->blksz,
++ data->bytes_xfered, data->flags,
++ data->error);
++ if (n < DBG_REQ_BUF_SIZE && stop)
++ n += snprintf(str + n, DBG_REQ_BUF_SIZE - n,
++ "CMD%u(0x%x) %x %x %x %x %x (err %u)\n",
++ stop->opcode, stop->arg, stop->flags,
++ stop->resp[0], stop->resp[1],
++ stop->resp[2], stop->resp[3],
++ stop->error);
++ }
++ spin_unlock_irq(&host->mmc->lock);
++ mutex_unlock(&inode->i_mutex);
++
++ priv->nbytes = min(n, DBG_REQ_BUF_SIZE);
++ file->private_data = priv;
++
++ return 0;
++}
++
++static int req_dbg_read(struct file *file, char __user *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ struct req_dbg_data *priv = file->private_data;
++
++ return simple_read_from_buffer(buf, nbytes, ppos,
++ priv->str, priv->nbytes);
++}
++
++static int req_dbg_release(struct inode *inode, struct file *file)
++{
++ kfree(file->private_data);
++ return 0;
++}
++
++static const struct file_operations req_dbg_fops = {
++ .owner = THIS_MODULE,
++ .open = req_dbg_open,
++ .llseek = no_llseek,
++ .read = req_dbg_read,
++ .release = req_dbg_release,
++};
++
++static int regs_dbg_open(struct inode *inode, struct file *file)
++{
++ struct atmel_mci *host;
++ unsigned int i;
++ u32 *data;
++ int ret = -ENOMEM;
++
++ mutex_lock(&inode->i_mutex);
++ host = inode->u.generic_ip;
++ data = kmalloc(inode->i_size, GFP_KERNEL);
++ if (!data)
++ goto out;
++
++ spin_lock_irq(&host->mmc->lock);
++ for (i = 0; i < inode->i_size / 4; i++)
++ data[i] = __raw_readl(host->regs + i * 4);
++ spin_unlock_irq(&host->mmc->lock);
++
++ file->private_data = data;
++ ret = 0;
++
++out:
++ mutex_unlock(&inode->i_mutex);
++
++ return ret;
++}
++
++static ssize_t regs_dbg_read(struct file *file, char __user *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ struct inode *inode = file->f_dentry->d_inode;
++ int ret;
++
++ mutex_lock(&inode->i_mutex);
++ ret = simple_read_from_buffer(buf, nbytes, ppos,
++ file->private_data,
++ file->f_dentry->d_inode->i_size);
++ mutex_unlock(&inode->i_mutex);
++
++ return ret;
++}
++
++static int regs_dbg_release(struct inode *inode, struct file *file)
++{
++ kfree(file->private_data);
++ return 0;
++}
++
++static const struct file_operations regs_dbg_fops = {
++ .owner = THIS_MODULE,
++ .open = regs_dbg_open,
++ .llseek = generic_file_llseek,
++ .read = regs_dbg_read,
++ .release = regs_dbg_release,
++};
++
++static void atmci_init_debugfs(struct atmel_mci *host)
++{
++ struct mmc_host *mmc;
++ struct dentry *root, *regs;
++ struct resource *res;
++
++ mmc = host->mmc;
++ root = debugfs_create_dir(mmc_hostname(mmc), NULL);
++ if (IS_ERR(root) || !root)
++ goto err_root;
++ host->debugfs_root = root;
++
++ regs = debugfs_create_file("regs", 0400, root, host, &regs_dbg_fops);
++ if (!regs)
++ goto err_regs;
++
++ res = platform_get_resource(host->pdev, IORESOURCE_MEM, 0);
++ regs->d_inode->i_size = res->end - res->start + 1;
++ host->debugfs_regs = regs;
++
++ host->debugfs_req = debugfs_create_file("req", 0400, root,
++ host, &req_dbg_fops);
++ if (!host->debugfs_req)
++ goto err_req;
++
++ host->debugfs_pending_events
++ = debugfs_create_u32("pending_events", 0400, root,
++ (u32 *)&host->pending_events);
++ if (!host->debugfs_pending_events)
++ goto err_pending_events;
++
++ host->debugfs_completed_events
++ = debugfs_create_u32("completed_events", 0400, root,
++ (u32 *)&host->completed_events);
++ if (!host->debugfs_completed_events)
++ goto err_completed_events;
++
++ return;
++
++err_completed_events:
++ debugfs_remove(host->debugfs_pending_events);
++err_pending_events:
++ debugfs_remove(host->debugfs_req);
++err_req:
++ debugfs_remove(host->debugfs_regs);
++err_regs:
++ debugfs_remove(host->debugfs_root);
++err_root:
++ host->debugfs_root = NULL;
++ dev_err(&host->pdev->dev,
++ "failed to initialize debugfs for %s\n",
++ mmc_hostname(mmc));
++}
++
++static void atmci_cleanup_debugfs(struct atmel_mci *host)
++{
++ if (host->debugfs_root) {
++ debugfs_remove(host->debugfs_completed_events);
++ debugfs_remove(host->debugfs_pending_events);
++ debugfs_remove(host->debugfs_req);
++ debugfs_remove(host->debugfs_regs);
++ debugfs_remove(host->debugfs_root);
++ host->debugfs_root = NULL;
++ }
++}
++#else
++static inline void atmci_init_debugfs(struct atmel_mci *host)
++{
++
++}
++
++static inline void atmci_cleanup_debugfs(struct atmel_mci *host)
++{
++
++}
++#endif /* CONFIG_DEBUG_FS */
++
+ static inline unsigned int ns_to_clocks(struct atmel_mci *host,
+ unsigned int ns)
+ {
+@@ -709,6 +935,8 @@ static int __devinit atmci_probe(struct
+ printk(KERN_INFO "%s: Atmel MCI controller at 0x%08lx irq %d\n",
+ mmc_hostname(mmc), host->mapbase, irq);
+
++ atmci_init_debugfs(host);
++
+ return 0;
+
+ out_free_irq:
+@@ -734,6 +962,8 @@ static int __devexit atmci_remove(struct
+ platform_set_drvdata(pdev, NULL);
+
+ if (host) {
++ atmci_cleanup_debugfs(host);
++
+ mmc_remove_host(host->mmc);
+
+ mci_writel(host, IDR, ~0UL);
diff --git a/packages/linux/linux-2.6.18/atmel-mci-init-nr_blocks-in-dma-request.patch b/packages/linux/linux-2.6.18/atmel-mci-init-nr_blocks-in-dma-request.patch
new file mode 100644
index 0000000000..d6d91ae0e8
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel-mci-init-nr_blocks-in-dma-request.patch
@@ -0,0 +1,47 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Sun, 14 Jan 2007 19:07:06 +0100
+Subject: [ATMEL MCI] Initialize the nr_blocks member of the dma request
+
+It seems like the mmc driver might get asked to write less data
+than what is available in the associated scatterlist. Previously,
+the dmac driver assumed that an sg request should transfer all
+the data in the scatterlist, which would break in this case.
+
+Resolve this by passing the number of blocks to transfer explicitly.
+This will probably fix a number of cases where the mmc controller
+seemed to be out of sync with the dma controller.
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+---
+ drivers/mmc/atmel-mci.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/mmc/atmel-mci.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/mmc/atmel-mci.c 2007-01-15 15:39:13.000000000 +0100
++++ linux-2.6.18-avr32/drivers/mmc/atmel-mci.c 2007-01-15 15:39:25.000000000 +0100
+@@ -51,7 +51,6 @@ struct atmel_mci_dma {
+ struct dma_request_sg req;
+ unsigned short rx_periph_id;
+ unsigned short tx_periph_id;
+- int blocks_left;
+ };
+
+ struct atmel_mci {
+@@ -428,6 +427,7 @@ static u32 atmci_prepare_data(struct mmc
+ mci_writel(host, BLKR, (MCI_BF(BCNT, data->blocks)
+ | MCI_BF(BLKLEN, data->blksz)));
+ host->dma.req.block_size = data->blksz;
++ host->dma.req.nr_blocks = data->blocks;
+
+ cmd_flags = MCI_BF(TRCMD, MCI_TRCMD_START_TRANS);
+ if (data->flags & MMC_DATA_STREAM)
+@@ -454,7 +454,6 @@ static u32 atmci_prepare_data(struct mmc
+ host->dma.req.data_reg = host->mapbase + MCI_TDR;
+ }
+ host->dma.req.sg = data->sg;
+- host->dma.blocks_left = data->blocks;
+
+ dma_prepare_request_sg(host->dma.req.req.dmac, &host->dma.req);
+
diff --git a/packages/linux/linux-2.6.18/atmel-mmc-host-driver.patch b/packages/linux/linux-2.6.18/atmel-mmc-host-driver.patch
new file mode 100644
index 0000000000..b7d7e8ae3f
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel-mmc-host-driver.patch
@@ -0,0 +1,986 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Fri Nov 18 17:20:29 2005 +0100
+Subject: [PATCH] AVR32: MMC Host Driver
+
+---
+
+ drivers/mmc/Kconfig | 10
+ drivers/mmc/Makefile | 1
+ drivers/mmc/atmel-mci.c | 738 ++++++++++++++++++++++++++++++++++++++++++++++++
+ drivers/mmc/atmel-mci.h | 192 ++++++++++++
+ 4 files changed, 941 insertions(+)
+
+Index: linux-2.6.18-avr32/drivers/mmc/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/mmc/Kconfig 2007-01-15 10:14:40.000000000 +0100
++++ linux-2.6.18-avr32/drivers/mmc/Kconfig 2007-01-15 10:14:46.000000000 +0100
+@@ -71,6 +71,16 @@ config MMC_OMAP
+
+ If unsure, say N.
+
++config MMC_ATMELMCI
++ tristate "Atmel Multimedia Card Interface support"
++ depends on AVR32 && MMC
++ help
++ This selects the Atmel Multimedia Card Interface. If you have
++ a AT91 (ARM) or AT32 (AVR32) platform with a Multimedia Card
++ slot, say Y or M here.
++
++ If unsure, say N.
++
+ config MMC_WBSD
+ tristate "Winbond W83L51xD SD/MMC Card Interface support"
+ depends on MMC && ISA_DMA_API
+Index: linux-2.6.18-avr32/drivers/mmc/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/mmc/Makefile 2007-01-15 10:14:40.000000000 +0100
++++ linux-2.6.18-avr32/drivers/mmc/Makefile 2007-01-15 10:14:46.000000000 +0100
+@@ -23,6 +23,7 @@ obj-$(CONFIG_MMC_WBSD) += wbsd.o
+ obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
+ obj-$(CONFIG_MMC_OMAP) += omap.o
+ obj-$(CONFIG_MMC_AT91RM9200) += at91_mci.o
++obj-$(CONFIG_MMC_ATMELMCI) += atmel-mci.o
+
+ mmc_core-y := mmc.o mmc_queue.o mmc_sysfs.o
+
+Index: linux-2.6.18-avr32/drivers/mmc/atmel-mci.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/mmc/atmel-mci.c 2007-01-15 10:31:55.000000000 +0100
+@@ -0,0 +1,738 @@
++/*
++ * Atmel MultiMedia Card Interface driver
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/blkdev.h>
++#include <linux/clk.h>
++#include <linux/device.h>
++#include <linux/dma-mapping.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <linux/mmc/host.h>
++#include <linux/mmc/protocol.h>
++
++#include <asm/dma-controller.h>
++#include <asm/io.h>
++
++#include "atmel-mci.h"
++
++#define DRIVER_NAME "mmci"
++
++#define MCI_CMD_ERROR_FLAGS (MCI_BIT(RINDE) | MCI_BIT(RDIRE) | \
++ MCI_BIT(RCRCE) | MCI_BIT(RENDE) | \
++ MCI_BIT(RTOE))
++#define MCI_DATA_ERROR_FLAGS (MCI_BIT(DCRCE) | MCI_BIT(DTOE) | \
++ MCI_BIT(OVRE) | MCI_BIT(UNRE))
++
++enum {
++ EVENT_CMD_COMPLETE = 0,
++ EVENT_CMD_ERROR,
++ EVENT_DATA_COMPLETE,
++ EVENT_DATA_ERROR,
++ EVENT_STOP_SENT,
++ EVENT_STOP_COMPLETE,
++ EVENT_STOP_ERROR,
++ EVENT_DMA_ERROR,
++};
++
++struct atmel_mci_dma {
++ struct dma_request_sg req;
++ unsigned short rx_periph_id;
++ unsigned short tx_periph_id;
++ int blocks_left;
++};
++
++struct atmel_mci {
++ struct mmc_host *mmc;
++ void __iomem *regs;
++ struct atmel_mci_dma dma;
++
++ struct mmc_request *mrq;
++ struct mmc_command *cmd;
++ struct mmc_data *data;
++
++ u32 stop_cmdr;
++ u32 stop_iflags;
++
++ struct tasklet_struct tasklet;
++ unsigned long pending_events;
++ unsigned long completed_events;
++ u32 error_status;
++
++ unsigned long bus_hz;
++ unsigned long mapbase;
++ struct clk *mck;
++ struct platform_device *pdev;
++};
++
++/* Those printks take an awful lot of time... */
++#ifndef DEBUG
++static unsigned int fmax = 15000000U;
++#else
++static unsigned int fmax = 1000000U;
++#endif
++module_param(fmax, uint, 0444);
++MODULE_PARM_DESC(fmax, "Max frequency in Hz of the MMC bus clock");
++
++static inline unsigned int ns_to_clocks(struct atmel_mci *host,
++ unsigned int ns)
++{
++ return (ns * (host->bus_hz / 1000000) + 999) / 1000;
++}
++
++static void atmci_set_timeout(struct atmel_mci *host,
++ struct mmc_data *data)
++{
++ static unsigned dtomul_to_shift[] = {
++ 0, 4, 7, 8, 10, 12, 16, 20
++ };
++ unsigned timeout;
++ unsigned dtocyc, dtomul;
++
++ timeout = ns_to_clocks(host, data->timeout_ns) + data->timeout_clks;
++
++ for (dtomul = 0; dtomul < 8; dtomul++) {
++ unsigned shift = dtomul_to_shift[dtomul];
++ dtocyc = (timeout + (1 << shift) - 1) >> shift;
++ if (dtocyc < 15)
++ break;
++ }
++
++ if (dtomul >= 8) {
++ dtomul = 7;
++ dtocyc = 15;
++ }
++
++ pr_debug("%s: setting timeout to %u cycles\n",
++ mmc_hostname(host->mmc),
++ dtocyc << dtomul_to_shift[dtomul]);
++ mci_writel(host, DTOR, (MCI_BF(DTOMUL, dtomul)
++ | MCI_BF(DTOCYC, dtocyc)));
++}
++
++/*
++ * Return mask with interrupt flags to be handled for this command.
++ */
++static u32 atmci_prepare_command(struct mmc_host *mmc,
++ struct mmc_command *cmd,
++ u32 *cmd_flags)
++{
++ u32 cmdr;
++ u32 iflags;
++
++ cmd->error = MMC_ERR_NONE;
++
++ cmdr = 0;
++ BUG_ON(MCI_BFEXT(CMDNB, cmdr) != 0);
++ cmdr = MCI_BFINS(CMDNB, cmd->opcode, cmdr);
++
++ if (cmd->flags & MMC_RSP_PRESENT) {
++ if (cmd->flags & MMC_RSP_136)
++ cmdr |= MCI_BF(RSPTYP, MCI_RSPTYP_136_BIT);
++ else
++ cmdr |= MCI_BF(RSPTYP, MCI_RSPTYP_48_BIT);
++ }
++
++ /*
++ * This should really be MAXLAT_5 for CMD2 and ACMD41, but
++ * it's too difficult to determine whether this is an ACMD or
++ * not. Better make it 64.
++ */
++ cmdr |= MCI_BIT(MAXLAT);
++
++ if (mmc->ios.bus_mode == MMC_BUSMODE_OPENDRAIN)
++ cmdr |= MCI_BIT(OPDCMD);
++
++ iflags = MCI_BIT(CMDRDY) | MCI_CMD_ERROR_FLAGS;
++ if (!(cmd->flags & MMC_RSP_CRC))
++ iflags &= ~MCI_BIT(RCRCE);
++
++ pr_debug("%s: cmd: op %02x arg %08x flags %08x, cmdflags %08lx\n",
++ mmc_hostname(mmc), cmd->opcode, cmd->arg, cmd->flags,
++ (unsigned long)cmdr);
++
++ *cmd_flags = cmdr;
++ return iflags;
++}
++
++static void atmci_start_command(struct atmel_mci *host,
++ struct mmc_command *cmd,
++ u32 cmd_flags)
++{
++ WARN_ON(host->cmd);
++ host->cmd = cmd;
++
++ mci_writel(host, ARGR, cmd->arg);
++ mci_writel(host, CMDR, cmd_flags);
++
++ if (cmd->data)
++ dma_start_request(host->dma.req.req.dmac,
++ host->dma.req.req.channel);
++}
++
++/*
++ * Returns a mask of flags to be set in the command register when the
++ * command to start the transfer is to be sent.
++ */
++static u32 atmci_prepare_data(struct mmc_host *mmc, struct mmc_data *data)
++{
++ struct atmel_mci *host = mmc_priv(mmc);
++ u32 cmd_flags;
++
++ WARN_ON(host->data);
++ host->data = data;
++
++ atmci_set_timeout(host, data);
++ mci_writel(host, BLKR, (MCI_BF(BCNT, data->blocks)
++ | MCI_BF(BLKLEN, data->blksz)));
++ host->dma.req.block_size = data->blksz;
++
++ cmd_flags = MCI_BF(TRCMD, MCI_TRCMD_START_TRANS);
++ if (data->flags & MMC_DATA_STREAM)
++ cmd_flags |= MCI_BF(TRTYP, MCI_TRTYP_STREAM);
++ else if (data->blocks > 1)
++ cmd_flags |= MCI_BF(TRTYP, MCI_TRTYP_MULTI_BLOCK);
++ else
++ cmd_flags |= MCI_BF(TRTYP, MCI_TRTYP_BLOCK);
++
++ if (data->flags & MMC_DATA_READ) {
++ cmd_flags |= MCI_BIT(TRDIR);
++ host->dma.req.nr_sg
++ = dma_map_sg(&host->pdev->dev, data->sg,
++ data->sg_len, DMA_FROM_DEVICE);
++ host->dma.req.periph_id = host->dma.rx_periph_id;
++ host->dma.req.direction = DMA_DIR_PERIPH_TO_MEM;
++ host->dma.req.data_reg = host->mapbase + MCI_RDR;
++ } else {
++ host->dma.req.nr_sg
++ = dma_map_sg(&host->pdev->dev, data->sg,
++ data->sg_len, DMA_TO_DEVICE);
++ host->dma.req.periph_id = host->dma.tx_periph_id;
++ host->dma.req.direction = DMA_DIR_MEM_TO_PERIPH;
++ host->dma.req.data_reg = host->mapbase + MCI_TDR;
++ }
++ host->dma.req.sg = data->sg;
++ host->dma.blocks_left = data->blocks;
++
++ dma_prepare_request_sg(host->dma.req.req.dmac, &host->dma.req);
++
++ return cmd_flags;
++}
++
++static void atmci_request(struct mmc_host *mmc, struct mmc_request *mrq)
++{
++ struct atmel_mci *host = mmc_priv(mmc);
++ struct mmc_data *data = mrq->data;
++ u32 iflags;
++ u32 cmdflags = 0;
++
++ iflags = mci_readl(host, IMR);
++ if (iflags)
++ printk("WARNING: IMR=0x%08x\n", mci_readl(host, IMR));
++
++ WARN_ON(host->mrq != NULL);
++ host->mrq = mrq;
++ host->pending_events = 0;
++ host->completed_events = 0;
++
++ iflags = atmci_prepare_command(mmc, mrq->cmd, &cmdflags);
++
++ if (mrq->stop) {
++ BUG_ON(!data);
++
++ host->stop_iflags = atmci_prepare_command(mmc, mrq->stop,
++ &host->stop_cmdr);
++ host->stop_cmdr |= MCI_BF(TRCMD, MCI_TRCMD_STOP_TRANS);
++ if (!(data->flags & MMC_DATA_WRITE))
++ host->stop_cmdr |= MCI_BIT(TRDIR);
++ if (data->flags & MMC_DATA_STREAM)
++ host->stop_cmdr |= MCI_BF(TRTYP, MCI_TRTYP_STREAM);
++ else
++ host->stop_cmdr |= MCI_BF(TRTYP, MCI_TRTYP_MULTI_BLOCK);
++ }
++ if (data) {
++ cmdflags |= atmci_prepare_data(mmc, data);
++ iflags |= MCI_DATA_ERROR_FLAGS;
++ }
++
++ atmci_start_command(host, mrq->cmd, cmdflags);
++ mci_writel(host, IER, iflags);
++}
++
++static void atmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
++{
++ struct atmel_mci *host = mmc_priv(mmc);
++
++ if (ios->clock) {
++ u32 clkdiv;
++
++ clkdiv = host->bus_hz / (2 * ios->clock) - 1;
++ if (clkdiv > 255)
++ clkdiv = 255;
++ mci_writel(host, MR, (clkdiv
++ | MCI_BIT(WRPROOF)
++ | MCI_BIT(RDPROOF)));
++ }
++
++ switch (ios->bus_width) {
++ case MMC_BUS_WIDTH_1:
++ mci_writel(host, SDCR, 0);
++ break;
++ case MMC_BUS_WIDTH_4:
++ mci_writel(host, SDCR, MCI_BIT(SDCBUS));
++ break;
++ }
++
++ switch (ios->power_mode) {
++ case MMC_POWER_OFF:
++ mci_writel(host, CR, MCI_BIT(MCIDIS));
++ break;
++ case MMC_POWER_UP:
++ mci_writel(host, CR, MCI_BIT(SWRST));
++ break;
++ case MMC_POWER_ON:
++ mci_writel(host, CR, MCI_BIT(MCIEN));
++ break;
++ }
++}
++
++static struct mmc_host_ops atmci_ops = {
++ .request = atmci_request,
++ .set_ios = atmci_set_ios,
++};
++
++static void atmci_request_end(struct mmc_host *mmc, struct mmc_request *mrq)
++{
++ struct atmel_mci *host = mmc_priv(mmc);
++
++ WARN_ON(host->cmd || host->data);
++ host->mrq = NULL;
++
++ mmc_request_done(mmc, mrq);
++}
++
++static void send_stop_cmd(struct mmc_host *mmc, struct mmc_data *data,
++ u32 flags)
++{
++ struct atmel_mci *host = mmc_priv(mmc);
++
++ atmci_start_command(host, data->stop, host->stop_cmdr | flags);
++ mci_writel(host, IER, host->stop_iflags);
++}
++
++static void atmci_data_complete(struct atmel_mci *host, struct mmc_data *data)
++{
++ host->data = NULL;
++ dma_unmap_sg(&host->pdev->dev, data->sg, host->dma.req.nr_sg,
++ ((data->flags & MMC_DATA_WRITE)
++ ? DMA_TO_DEVICE : DMA_FROM_DEVICE));
++
++ /*
++ * Data might complete before command for very short transfers
++ * (like READ_SCR)
++ */
++ if (test_bit(EVENT_CMD_COMPLETE, &host->completed_events)
++ && (!data->stop
++ || test_bit(EVENT_STOP_COMPLETE, &host->completed_events)))
++ atmci_request_end(host->mmc, data->mrq);
++}
++
++static void atmci_command_error(struct mmc_host *mmc,
++ struct mmc_command *cmd,
++ u32 status)
++{
++ pr_debug("%s: command error: status=0x%08x\n",
++ mmc_hostname(mmc), status);
++
++ if (status & MCI_BIT(RTOE))
++ cmd->error = MMC_ERR_TIMEOUT;
++ else if (status & MCI_BIT(RCRCE))
++ cmd->error = MMC_ERR_BADCRC;
++ else
++ cmd->error = MMC_ERR_FAILED;
++}
++
++static void atmci_tasklet_func(unsigned long priv)
++{
++ struct mmc_host *mmc = (struct mmc_host *)priv;
++ struct atmel_mci *host = mmc_priv(mmc);
++ struct mmc_request *mrq = host->mrq;
++ struct mmc_data *data = host->data;
++
++ pr_debug("atmci_tasklet: pending/completed/mask %lx/%lx/%x\n",
++ host->pending_events, host->completed_events,
++ mci_readl(host, IMR));
++
++ if (test_and_clear_bit(EVENT_CMD_ERROR, &host->pending_events)) {
++ struct mmc_command *cmd;
++
++ set_bit(EVENT_CMD_ERROR, &host->completed_events);
++ clear_bit(EVENT_CMD_COMPLETE, &host->pending_events);
++ cmd = host->mrq->cmd;
++
++ if (cmd->data) {
++ dma_stop_request(host->dma.req.req.dmac,
++ host->dma.req.req.channel);
++ host->data = NULL;
++ }
++
++ atmci_command_error(mmc, cmd, host->error_status);
++ atmci_request_end(mmc, cmd->mrq);
++ }
++ if (test_and_clear_bit(EVENT_STOP_ERROR, &host->pending_events)) {
++ set_bit(EVENT_STOP_ERROR, &host->completed_events);
++ clear_bit(EVENT_STOP_COMPLETE, &host->pending_events);
++ atmci_command_error(mmc, host->mrq->stop,
++ host->error_status);
++ if (!host->data)
++ atmci_request_end(mmc, host->mrq);
++ }
++ if (test_and_clear_bit(EVENT_CMD_COMPLETE, &host->pending_events)) {
++ set_bit(EVENT_CMD_COMPLETE, &host->completed_events);
++ if (!mrq->data
++ || test_bit(EVENT_DATA_COMPLETE, &host->completed_events))
++ atmci_request_end(mmc, mrq);
++ }
++ if (test_and_clear_bit(EVENT_STOP_COMPLETE, &host->pending_events)) {
++ set_bit(EVENT_STOP_COMPLETE, &host->completed_events);
++ if (test_bit(EVENT_DATA_COMPLETE, &host->completed_events))
++ atmci_request_end(mmc, mrq);
++ }
++ if (test_and_clear_bit(EVENT_DMA_ERROR, &host->pending_events)) {
++ set_bit(EVENT_DMA_ERROR, &host->completed_events);
++ clear_bit(EVENT_DATA_COMPLETE, &host->pending_events);
++
++ /* DMA controller got bus error => invalid address */
++ data->error = MMC_ERR_INVALID;
++
++ printk(KERN_DEBUG "%s: dma error after %u bytes xfered\n",
++ mmc_hostname(mmc), host->data->bytes_xfered);
++
++ if (data->stop
++ && !test_and_set_bit(EVENT_STOP_SENT,
++ &host->completed_events))
++ /* TODO: Check if card is still present */
++ send_stop_cmd(host->mmc, data, 0);
++
++ atmci_data_complete(host, data);
++ }
++ if (test_and_clear_bit(EVENT_DATA_ERROR, &host->pending_events)) {
++ u32 status = host->error_status;
++
++ set_bit(EVENT_DATA_ERROR, &host->completed_events);
++ clear_bit(EVENT_DATA_COMPLETE, &host->pending_events);
++
++ dma_stop_request(host->dma.req.req.dmac,
++ host->dma.req.req.channel);
++
++ printk(KERN_DEBUG "%s: data error: status=0x%08x\n",
++ mmc_hostname(host->mmc), status);
++
++ if (status & MCI_BIT(DCRCE)) {
++ printk(KERN_DEBUG "%s: Data CRC error\n",
++ mmc_hostname(host->mmc));
++ data->error = MMC_ERR_BADCRC;
++ } else if (status & MCI_BIT(DTOE)) {
++ printk(KERN_DEBUG "%s: Data Timeout error\n",
++ mmc_hostname(host->mmc));
++ data->error = MMC_ERR_TIMEOUT;
++ } else {
++ printk(KERN_DEBUG "%s: Data FIFO error\n",
++ mmc_hostname(host->mmc));
++ data->error = MMC_ERR_FIFO;
++ }
++ printk(KERN_DEBUG "%s: Bytes xfered: %u\n",
++ mmc_hostname(host->mmc), data->bytes_xfered);
++
++ if (data->stop
++ && !test_and_set_bit(EVENT_STOP_SENT, &host->completed_events))
++ /* TODO: Check if card is still present */
++ send_stop_cmd(host->mmc, data, 0);
++
++ atmci_data_complete(host, data);
++ }
++ if (test_and_clear_bit(EVENT_DATA_COMPLETE, &host->pending_events)) {
++ set_bit(EVENT_DATA_COMPLETE, &host->completed_events);
++ data->bytes_xfered = data->blocks * data->blksz;
++ atmci_data_complete(host, data);
++ }
++}
++
++static void atmci_cmd_interrupt(struct mmc_host *mmc, u32 status)
++{
++ struct atmel_mci *host = mmc_priv(mmc);
++ struct mmc_command *cmd = host->cmd;
++
++ /*
++ * Read the response now so that we're free to send a new
++ * command immediately.
++ */
++ cmd->resp[0] = mci_readl(host, RSPR);
++ cmd->resp[1] = mci_readl(host, RSPR);
++ cmd->resp[2] = mci_readl(host, RSPR);
++ cmd->resp[3] = mci_readl(host, RSPR);
++
++ mci_writel(host, IDR, MCI_BIT(CMDRDY) | MCI_CMD_ERROR_FLAGS);
++ host->cmd = NULL;
++
++ if (test_bit(EVENT_STOP_SENT, &host->completed_events))
++ set_bit(EVENT_STOP_COMPLETE, &host->pending_events);
++ else
++ set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
++
++ tasklet_schedule(&host->tasklet);
++}
++
++static void atmci_xfer_complete(struct dma_request *_req)
++{
++ struct dma_request_sg *req = to_dma_request_sg(_req);
++ struct atmel_mci_dma *dma;
++ struct atmel_mci *host;
++ struct mmc_data *data;
++
++ dma = container_of(req, struct atmel_mci_dma, req);
++ host = container_of(dma, struct atmel_mci, dma);
++ data = host->data;
++
++ if (data->stop && !test_and_set_bit(EVENT_STOP_SENT,
++ &host->completed_events))
++ send_stop_cmd(host->mmc, data, 0);
++
++ if (data->flags & MMC_DATA_READ) {
++ mci_writel(host, IDR, MCI_DATA_ERROR_FLAGS);
++ set_bit(EVENT_DATA_COMPLETE, &host->pending_events);
++ tasklet_schedule(&host->tasklet);
++ } else {
++ /*
++ * For the WRITE case, wait for NOTBUSY. This function
++ * is called when everything has been written to the
++ * controller, not when the card is done programming.
++ */
++ mci_writel(host, IER, MCI_BIT(NOTBUSY));
++ }
++}
++
++static void atmci_dma_error(struct dma_request *_req)
++{
++ struct dma_request_sg *req = to_dma_request_sg(_req);
++ struct atmel_mci_dma *dma;
++ struct atmel_mci *host;
++
++ dma = container_of(req, struct atmel_mci_dma, req);
++ host = container_of(dma, struct atmel_mci, dma);
++
++ mci_writel(host, IDR, (MCI_BIT(NOTBUSY)
++ | MCI_DATA_ERROR_FLAGS));
++
++ set_bit(EVENT_DMA_ERROR, &host->pending_events);
++ tasklet_schedule(&host->tasklet);
++}
++
++static irqreturn_t atmci_interrupt(int irq, void *dev_id,
++ struct pt_regs *regs)
++{
++ struct mmc_host *mmc = dev_id;
++ struct atmel_mci *host = mmc_priv(mmc);
++ u32 status, mask, pending;
++
++ spin_lock(&mmc->lock);
++
++ status = mci_readl(host, SR);
++ mask = mci_readl(host, IMR);
++ pending = status & mask;
++
++ do {
++ if (pending & MCI_CMD_ERROR_FLAGS) {
++ mci_writel(host, IDR, (MCI_BIT(CMDRDY)
++ | MCI_BIT(NOTBUSY)
++ | MCI_CMD_ERROR_FLAGS
++ | MCI_DATA_ERROR_FLAGS));
++ host->error_status = status;
++ host->cmd = NULL;
++ if (test_bit(EVENT_STOP_SENT, &host->completed_events))
++ set_bit(EVENT_STOP_ERROR, &host->pending_events);
++ else
++ set_bit(EVENT_CMD_ERROR, &host->pending_events);
++ tasklet_schedule(&host->tasklet);
++ break;
++ }
++ if (pending & MCI_DATA_ERROR_FLAGS) {
++ mci_writel(host, IDR, (MCI_BIT(NOTBUSY)
++ | MCI_DATA_ERROR_FLAGS));
++ host->error_status = status;
++ set_bit(EVENT_DATA_ERROR, &host->pending_events);
++ tasklet_schedule(&host->tasklet);
++ break;
++ }
++ if (pending & MCI_BIT(CMDRDY))
++ atmci_cmd_interrupt(mmc, status);
++ if (pending & MCI_BIT(NOTBUSY)) {
++ mci_writel(host, IDR, (MCI_BIT(NOTBUSY)
++ | MCI_DATA_ERROR_FLAGS));
++ set_bit(EVENT_DATA_COMPLETE, &host->pending_events);
++ tasklet_schedule(&host->tasklet);
++ }
++
++ status = mci_readl(host, SR);
++ mask = mci_readl(host, IMR);
++ pending = status & mask;
++ } while (pending);
++
++ spin_unlock(&mmc->lock);
++
++ return IRQ_HANDLED;
++}
++
++static int __devinit atmci_probe(struct platform_device *pdev)
++{
++ struct atmel_mci *host;
++ struct mmc_host *mmc;
++ struct resource *regs;
++ int irq;
++ int ret;
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!regs)
++ return -ENXIO;
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0)
++ return irq;
++
++ mmc = mmc_alloc_host(sizeof(struct atmel_mci), &pdev->dev);
++ if (!mmc)
++ return -ENOMEM;
++
++ host = mmc_priv(mmc);
++ host->pdev = pdev;
++ host->mmc = mmc;
++
++ host->mck = clk_get(&pdev->dev, "mck");
++ if (IS_ERR(host->mck)) {
++ ret = PTR_ERR(host->mck);
++ goto out_free_host;
++ }
++ clk_enable(host->mck);
++
++ ret = -ENOMEM;
++ host->regs = ioremap(regs->start, regs->end - regs->start + 1);
++ if (!host->regs)
++ goto out_disable_clk;
++
++ host->bus_hz = clk_get_rate(host->mck);
++ host->mapbase = regs->start;
++
++ mmc->ops = &atmci_ops;
++ mmc->f_min = (host->bus_hz + 511) / 512;
++ mmc->f_max = min((unsigned int)(host->bus_hz / 2), fmax);
++ mmc->ocr_avail = 0x00100000;
++ mmc->caps |= MMC_CAP_4_BIT_DATA;
++
++ tasklet_init(&host->tasklet, atmci_tasklet_func, (unsigned long)mmc);
++
++ ret = request_irq(irq, atmci_interrupt, 0, "mmci", mmc);
++ if (ret)
++ goto out_unmap;
++
++ /* TODO: Get this information from platform data */
++ ret = -ENOMEM;
++ host->dma.req.req.dmac = find_dma_controller(0);
++ if (!host->dma.req.req.dmac) {
++ printk(KERN_ERR
++ "mmci: No DMA controller available, aborting\n");
++ goto out_free_irq;
++ }
++ ret = dma_alloc_channel(host->dma.req.req.dmac);
++ if (ret < 0) {
++ printk(KERN_ERR
++ "mmci: Unable to allocate DMA channel, aborting\n");
++ goto out_free_irq;
++ }
++ host->dma.req.req.channel = ret;
++ host->dma.req.width = DMA_WIDTH_32BIT;
++ host->dma.req.req.xfer_complete = atmci_xfer_complete;
++ host->dma.req.req.block_complete = NULL; // atmci_block_complete;
++ host->dma.req.req.error = atmci_dma_error;
++ host->dma.rx_periph_id = 0;
++ host->dma.tx_periph_id = 1;
++
++ mci_writel(host, CR, MCI_BIT(SWRST));
++ mci_writel(host, IDR, ~0UL);
++ mci_writel(host, CR, MCI_BIT(MCIEN));
++
++ platform_set_drvdata(pdev, host);
++
++ mmc_add_host(mmc);
++
++ printk(KERN_INFO "%s: Atmel MCI controller at 0x%08lx irq %d\n",
++ mmc_hostname(mmc), host->mapbase, irq);
++
++ return 0;
++
++out_free_irq:
++ free_irq(irq, mmc);
++out_unmap:
++ iounmap(host->regs);
++out_disable_clk:
++ clk_disable(host->mck);
++ clk_put(host->mck);
++out_free_host:
++ mmc_free_host(mmc);
++ return ret;
++}
++
++static int __devexit atmci_remove(struct platform_device *pdev)
++{
++ struct atmel_mci *host = platform_get_drvdata(pdev);
++
++ platform_set_drvdata(pdev, NULL);
++
++ if (host) {
++ mmc_remove_host(host->mmc);
++
++ mci_writel(host, IDR, ~0UL);
++ mci_writel(host, CR, MCI_BIT(MCIDIS));
++ mci_readl(host, SR);
++
++ free_irq(platform_get_irq(pdev, 0), host->mmc);
++ iounmap(host->regs);
++
++ clk_disable(host->mck);
++ clk_put(host->mck);
++
++ mmc_free_host(host->mmc);
++ }
++ return 0;
++}
++
++static struct platform_driver atmci_driver = {
++ .probe = atmci_probe,
++ .remove = __devexit_p(atmci_remove),
++ .driver = {
++ .name = DRIVER_NAME,
++ },
++};
++
++static int __init atmci_init(void)
++{
++ return platform_driver_register(&atmci_driver);
++}
++
++static void __exit atmci_exit(void)
++{
++ platform_driver_unregister(&atmci_driver);
++}
++
++module_init(atmci_init);
++module_exit(atmci_exit);
++
++MODULE_DESCRIPTION("Atmel Multimedia Card Interface driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.18-avr32/drivers/mmc/atmel-mci.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/mmc/atmel-mci.h 2007-01-15 10:31:36.000000000 +0100
+@@ -0,0 +1,192 @@
++/*
++ * Atmel MultiMedia Card Interface driver
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __DRIVERS_MMC_ATMEL_MCI_H__
++#define __DRIVERS_MMC_ATMEL_MCI_H__
++
++/* MCI register offsets */
++#define MCI_CR 0x0000
++#define MCI_MR 0x0004
++#define MCI_DTOR 0x0008
++#define MCI_SDCR 0x000c
++#define MCI_ARGR 0x0010
++#define MCI_CMDR 0x0014
++#define MCI_BLKR 0x0018
++#define MCI_RSPR 0x0020
++#define MCI_RSPR1 0x0024
++#define MCI_RSPR2 0x0028
++#define MCI_RSPR3 0x002c
++#define MCI_RDR 0x0030
++#define MCI_TDR 0x0034
++#define MCI_SR 0x0040
++#define MCI_IER 0x0044
++#define MCI_IDR 0x0048
++#define MCI_IMR 0x004c
++
++/* Bitfields in CR */
++#define MCI_MCIEN_OFFSET 0
++#define MCI_MCIEN_SIZE 1
++#define MCI_MCIDIS_OFFSET 1
++#define MCI_MCIDIS_SIZE 1
++#define MCI_PWSEN_OFFSET 2
++#define MCI_PWSEN_SIZE 1
++#define MCI_PWSDIS_OFFSET 3
++#define MCI_PWSDIS_SIZE 1
++#define MCI_SWRST_OFFSET 7
++#define MCI_SWRST_SIZE 1
++
++/* Bitfields in MR */
++#define MCI_CLKDIV_OFFSET 0
++#define MCI_CLKDIV_SIZE 8
++#define MCI_PWSDIV_OFFSET 8
++#define MCI_PWSDIV_SIZE 3
++#define MCI_RDPROOF_OFFSET 11
++#define MCI_RDPROOF_SIZE 1
++#define MCI_WRPROOF_OFFSET 12
++#define MCI_WRPROOF_SIZE 1
++#define MCI_DMAPADV_OFFSET 14
++#define MCI_DMAPADV_SIZE 1
++#define MCI_BLKLEN_OFFSET 16
++#define MCI_BLKLEN_SIZE 16
++
++/* Bitfields in DTOR */
++#define MCI_DTOCYC_OFFSET 0
++#define MCI_DTOCYC_SIZE 4
++#define MCI_DTOMUL_OFFSET 4
++#define MCI_DTOMUL_SIZE 3
++
++/* Bitfields in SDCR */
++#define MCI_SDCSEL_OFFSET 0
++#define MCI_SDCSEL_SIZE 4
++#define MCI_SDCBUS_OFFSET 7
++#define MCI_SDCBUS_SIZE 1
++
++/* Bitfields in ARGR */
++#define MCI_ARG_OFFSET 0
++#define MCI_ARG_SIZE 32
++
++/* Bitfields in CMDR */
++#define MCI_CMDNB_OFFSET 0
++#define MCI_CMDNB_SIZE 6
++#define MCI_RSPTYP_OFFSET 6
++#define MCI_RSPTYP_SIZE 2
++#define MCI_SPCMD_OFFSET 8
++#define MCI_SPCMD_SIZE 3
++#define MCI_OPDCMD_OFFSET 11
++#define MCI_OPDCMD_SIZE 1
++#define MCI_MAXLAT_OFFSET 12
++#define MCI_MAXLAT_SIZE 1
++#define MCI_TRCMD_OFFSET 16
++#define MCI_TRCMD_SIZE 2
++#define MCI_TRDIR_OFFSET 18
++#define MCI_TRDIR_SIZE 1
++#define MCI_TRTYP_OFFSET 19
++#define MCI_TRTYP_SIZE 2
++
++/* Bitfields in BLKR */
++#define MCI_BCNT_OFFSET 0
++#define MCI_BCNT_SIZE 16
++
++/* Bitfields in RSPRn */
++#define MCI_RSP_OFFSET 0
++#define MCI_RSP_SIZE 32
++
++/* Bitfields in SR/IER/IDR/IMR */
++#define MCI_CMDRDY_OFFSET 0
++#define MCI_CMDRDY_SIZE 1
++#define MCI_RXRDY_OFFSET 1
++#define MCI_RXRDY_SIZE 1
++#define MCI_TXRDY_OFFSET 2
++#define MCI_TXRDY_SIZE 1
++#define MCI_BLKE_OFFSET 3
++#define MCI_BLKE_SIZE 1
++#define MCI_DTIP_OFFSET 4
++#define MCI_DTIP_SIZE 1
++#define MCI_NOTBUSY_OFFSET 5
++#define MCI_NOTBUSY_SIZE 1
++#define MCI_ENDRX_OFFSET 6
++#define MCI_ENDRX_SIZE 1
++#define MCI_ENDTX_OFFSET 7
++#define MCI_ENDTX_SIZE 1
++#define MCI_RXBUFF_OFFSET 14
++#define MCI_RXBUFF_SIZE 1
++#define MCI_TXBUFE_OFFSET 15
++#define MCI_TXBUFE_SIZE 1
++#define MCI_RINDE_OFFSET 16
++#define MCI_RINDE_SIZE 1
++#define MCI_RDIRE_OFFSET 17
++#define MCI_RDIRE_SIZE 1
++#define MCI_RCRCE_OFFSET 18
++#define MCI_RCRCE_SIZE 1
++#define MCI_RENDE_OFFSET 19
++#define MCI_RENDE_SIZE 1
++#define MCI_RTOE_OFFSET 20
++#define MCI_RTOE_SIZE 1
++#define MCI_DCRCE_OFFSET 21
++#define MCI_DCRCE_SIZE 1
++#define MCI_DTOE_OFFSET 22
++#define MCI_DTOE_SIZE 1
++#define MCI_OVRE_OFFSET 30
++#define MCI_OVRE_SIZE 1
++#define MCI_UNRE_OFFSET 31
++#define MCI_UNRE_SIZE 1
++
++/* Constants for DTOMUL */
++#define MCI_DTOMUL_1_CYCLE 0
++#define MCI_DTOMUL_16_CYCLES 1
++#define MCI_DTOMUL_128_CYCLES 2
++#define MCI_DTOMUL_256_CYCLES 3
++#define MCI_DTOMUL_1024_CYCLES 4
++#define MCI_DTOMUL_4096_CYCLES 5
++#define MCI_DTOMUL_65536_CYCLES 6
++#define MCI_DTOMUL_1048576_CYCLES 7
++
++/* Constants for RSPTYP */
++#define MCI_RSPTYP_NO_RESP 0
++#define MCI_RSPTYP_48_BIT 1
++#define MCI_RSPTYP_136_BIT 2
++
++/* Constants for SPCMD */
++#define MCI_SPCMD_NO_SPEC_CMD 0
++#define MCI_SPCMD_INIT_CMD 1
++#define MCI_SPCMD_SYNC_CMD 2
++#define MCI_SPCMD_INT_CMD 4
++#define MCI_SPCMD_INT_RESP 5
++
++/* Constants for TRCMD */
++#define MCI_TRCMD_NO_TRANS 0
++#define MCI_TRCMD_START_TRANS 1
++#define MCI_TRCMD_STOP_TRANS 2
++
++/* Constants for TRTYP */
++#define MCI_TRTYP_BLOCK 0
++#define MCI_TRTYP_MULTI_BLOCK 1
++#define MCI_TRTYP_STREAM 2
++
++/* Bit manipulation macros */
++#define MCI_BIT(name) \
++ (1 << MCI_##name##_OFFSET)
++#define MCI_BF(name,value) \
++ (((value) & ((1 << MCI_##name##_SIZE) - 1)) \
++ << MCI_##name##_OFFSET)
++#define MCI_BFEXT(name,value) \
++ (((value) >> MCI_##name##_OFFSET) \
++ & ((1 << MCI_##name##_SIZE) - 1))
++#define MCI_BFINS(name,value,old) \
++ (((old) & ~(((1 << MCI_##name##_SIZE) - 1) \
++ << MCI_##name##_OFFSET)) \
++ | MCI_BF(name,value))
++
++/* Register access macros */
++#define mci_readl(port,reg) \
++ __raw_readl((port)->regs + MCI_##reg)
++#define mci_writel(port,reg,value) \
++ __raw_writel((value), (port)->regs + MCI_##reg)
++
++#endif /* __DRIVERS_MMC_ATMEL_MCI_H__ */
diff --git a/packages/linux/linux-2.6.18/atmel-spi-master-driver.patch b/packages/linux/linux-2.6.18/atmel-spi-master-driver.patch
new file mode 100644
index 0000000000..d45f3c50c9
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel-spi-master-driver.patch
@@ -0,0 +1,990 @@
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+On Mon, 5 Jun 2006 06:49:52 -0700
+David Brownell <david-b@pacbell.net> wrote:
+
+> Here's an updated version that compiles and partially runs
+> in the at91 world. If the avr32 code would switch to standard
+> APIs like <linux/platform_device.h> and <linux/clk.h> it should
+> behave there too, somewhat. Ignore the extra debug crap.
+
+Here's another update which includes most of the fixes in Dave's
+version and which has been verified on my STK1000 board.
+
+I had some trouble getting your version to turn on the display
+correctly, so I've reworked it as a series of smaller changes to figure
+out what broke it. You should probably verify that I didn't leave out
+anything important.
+
+Also, I didn't find CONFIG_SPI_AT91_MANUAL_CS defined anywhere, nor did
+I find cpu_is_at91sam9261() so I left out those changes.
+
+Can any of you test this on AT91 somehow? I'm not completely up to
+speed on my AT91RM9200-EK yet. Anyone else I should Cc?
+
+I can send you individual patches if you want. Here's the shortlog:
+
+Atmel SPI Driver
+spi_atmel: convert to platform_device framework
+spi_atmel: fix broken parameter validation in setup() and transfer()
+spi_atmel: Revert core workaround for max_speed_hz=0
+spi_atmel: Divide len by two if bits_per_word > 8
+spi_atmel: Enable ENDRX interrupt when rx_buf is set
+spi_atmel: Fix incorrect locking in interrupt routine
+spi_atmel: Line up variable declarations
+spi_atmel: Add some FIXMEs from David Brownell's patch
+spi_atmel: Header file cleanup
+spi_atmel: Introduce new_1 flag and use in sck speed setting
+spi_atmel: Move SPI_ATMEL above SPI_BITBANG
+Make SPI_ATMEL available to AT91
+
+
+>>From nobody Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Thu Apr 6 10:33:21 2006 +0200
+Subject: [PATCH] Atmel SPI Driver
+
+SPI master driver for the Atmel AT32/AT91 SPI Controller.
+
+UPDATED:
+ - against 2.6.17 + latest kernel.org GIT
+ - "at32_device" stuff removed from core of driver
+ - add platform_device glue, so at91 compiles
+ - use clock framework
+ - understand "old" (rm9200) vs "new" (sam9261, ap7000) silicon
+ (only different scbr definition, not csaat etc.)
+ - remove bogus spi core tweaks
+ - various fixes and cleanups
+
+The following changes from atmel-spi-driver-3.patch have been dropped:
+ - CONFIG_SPI_AT91_MANUAL_CS stuff. I can't find the symbol
+ anywhere
+ - DMA IRQ optimization by unmasking TXEMPTY when starting xfer
+ - All the code setting CSAAT.
+
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+On Mon, 5 Jun 2006 06:49:52 -0700
+David Brownell <david-b@pacbell.net> wrote:
+
+> Here's an updated version that compiles and partially runs
+> in the at91 world. If the avr32 code would switch to standard
+> APIs like <linux/platform_device.h> and <linux/clk.h> it should
+> behave there too, somewhat. Ignore the extra debug crap.
+
+Here's another update which includes most of the fixes in Dave's
+version and which has been verified on my STK1000 board.
+
+I had some trouble getting your version to turn on the display
+correctly, so I've reworked it as a series of smaller changes to figure
+out what broke it. You should probably verify that I didn't leave out
+anything important.
+
+Also, I didn't find CONFIG_SPI_AT91_MANUAL_CS defined anywhere, nor did
+I find cpu_is_at91sam9261() so I left out those changes.
+
+Can any of you test this on AT91 somehow? I'm not completely up to
+speed on my AT91RM9200-EK yet. Anyone else I should Cc?
+
+I can send you individual patches if you want. Here's the shortlog:
+
+Atmel SPI Driver
+spi_atmel: convert to platform_device framework
+spi_atmel: fix broken parameter validation in setup() and transfer()
+spi_atmel: Revert core workaround for max_speed_hz=0
+spi_atmel: Divide len by two if bits_per_word > 8
+spi_atmel: Enable ENDRX interrupt when rx_buf is set
+spi_atmel: Fix incorrect locking in interrupt routine
+spi_atmel: Line up variable declarations
+spi_atmel: Add some FIXMEs from David Brownell's patch
+spi_atmel: Header file cleanup
+spi_atmel: Introduce new_1 flag and use in sck speed setting
+spi_atmel: Move SPI_ATMEL above SPI_BITBANG
+Make SPI_ATMEL available to AT91
+
+
+>>From nobody Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Thu Apr 6 10:33:21 2006 +0200
+Subject: [PATCH] Atmel SPI Driver
+
+SPI master driver for the Atmel AT32/AT91 SPI Controller.
+
+UPDATED:
+ - against 2.6.17 + latest kernel.org GIT
+ - "at32_device" stuff removed from core of driver
+ - add platform_device glue, so at91 compiles
+ - use clock framework
+ - understand "old" (rm9200) vs "new" (sam9261, ap7000) silicon
+ (only different scbr definition, not csaat etc.)
+ - remove bogus spi core tweaks
+ - various fixes and cleanups
+
+The following changes from atmel-spi-driver-3.patch have been dropped:
+ - CONFIG_SPI_AT91_MANUAL_CS stuff. I can't find the symbol
+ anywhere
+ - DMA IRQ optimization by unmasking TXEMPTY when starting xfer
+ - All the code setting CSAAT.
+
+---
+ drivers/spi/Kconfig | 7
+ drivers/spi/Makefile | 1
+ drivers/spi/atmel_spi.c | 648 ++++++++++++++++++++++++++++++++++++++++++++++++
+ drivers/spi/atmel_spi.h | 167 ++++++++++++
+ 4 files changed, 823 insertions(+)
+
+Index: linux-2.6.18-avr32/drivers/spi/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/spi/Kconfig 2006-11-29 16:55:10.000000000 +0100
++++ linux-2.6.18-avr32/drivers/spi/Kconfig 2006-11-29 16:55:59.000000000 +0100
+@@ -51,6 +51,13 @@ config SPI_MASTER
+ comment "SPI Master Controller Drivers"
+ depends on SPI_MASTER
+
++config SPI_ATMEL
++ tristate "Atmel SPI Controller"
++ depends on (ARCH_AT91 || AVR32) && SPI_MASTER
++ help
++ This selects a driver for the Atmel SPI Controller, present on
++ many AT32 (AVR32) and AT91 (ARM) chips.
++
+ config SPI_BITBANG
+ tristate "Bitbanging SPI master"
+ depends on SPI_MASTER && EXPERIMENTAL
+Index: linux-2.6.18-avr32/drivers/spi/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/spi/Makefile 2006-11-29 16:55:10.000000000 +0100
++++ linux-2.6.18-avr32/drivers/spi/Makefile 2006-11-29 16:55:59.000000000 +0100
+@@ -12,6 +12,7 @@ obj-$(CONFIG_SPI_MASTER) += spi.o
+
+ # SPI master controller drivers (bus)
+ obj-$(CONFIG_SPI_BITBANG) += spi_bitbang.o
++obj-$(CONFIG_SPI_ATMEL) += atmel_spi.o
+ obj-$(CONFIG_SPI_BUTTERFLY) += spi_butterfly.o
+ obj-$(CONFIG_SPI_PXA2XX) += pxa2xx_spi.o
+ obj-$(CONFIG_SPI_MPC83xx) += spi_mpc83xx.o
+Index: linux-2.6.18-avr32/drivers/spi/atmel_spi.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/spi/atmel_spi.c 2006-11-29 17:10:19.000000000 +0100
+@@ -0,0 +1,648 @@
++/*
++ * Driver for Atmel AT32 and AT91 SPI Controllers
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/clk.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/delay.h>
++#include <linux/dma-mapping.h>
++#include <linux/err.h>
++#include <linux/interrupt.h>
++#include <linux/spi/spi.h>
++
++#include <asm/io.h>
++#include <asm/arch/board.h>
++#include <asm/arch/gpio.h>
++
++#include "atmel_spi.h"
++
++/*
++ * The core SPI transfer engine just talks to a register bank to set up
++ * DMA transfers; transfer queue progress is driven by IRQs. The clock
++ * framework provides the base clock, subdivided for each spi_device.
++ *
++ * Newer controllers, marked with "new_1" flag, have:
++ * - CR.LASTXFER
++ * - SPI_MR.DIV32 may become FDIV or must-be-zero (here: always zero)
++ * - SPI_SR.TXEMPTY, SPI_SR.NSSR (and corresponding irqs)
++ * - SPI_CSRx.CSAAT
++ * - SPI_CSRx.SBCR allows faster clocking
++ */
++struct atmel_spi {
++ spinlock_t lock;
++
++ void __iomem *regs;
++ int irq;
++ struct clk *clk;
++ struct platform_device *pdev;
++ unsigned new_1:1;
++
++ u8 stopping;
++ struct list_head queue;
++ struct spi_transfer *current_transfer;
++ unsigned long remaining_bytes;
++
++ void *buffer;
++ dma_addr_t buffer_dma;
++};
++
++#define BUFFER_SIZE PAGE_SIZE
++#define INVALID_DMA_ADDRESS 0xffffffff
++
++/*
++ * Earlier SPI controllers (e.g. on at91rm9200) have a design bug whereby
++ * they assume that spi slave device state will not change on deselect, so
++ * that automagic deselection is OK. Not so! Workaround uses nCSx pins
++ * as GPIOs; or newer controllers have CSAAT and friends.
++ *
++ * Since the CSAAT functionality is a bit weird on newer controllers
++ * as well, we use GPIO to control nCSx pins on all controllers.
++ */
++
++static inline void cs_activate(struct spi_device *spi)
++{
++ unsigned gpio = (unsigned) spi->controller_data;
++
++ dev_dbg(&spi->dev, "activate %u\n", gpio);
++ gpio_set_value(gpio, 0);
++}
++
++static inline void cs_deactivate(struct spi_device *spi)
++{
++ unsigned gpio = (unsigned) spi->controller_data;
++
++ dev_dbg(&spi->dev, "DEactivate %u\n", gpio);
++ gpio_set_value(gpio, 1);
++}
++
++/*
++ * Submit next transfer for DMA.
++ * lock is held, spi irq is blocked
++ */
++static void atmel_spi_next_xfer(struct spi_master *master,
++ struct spi_message *msg)
++{
++ struct atmel_spi *as = spi_master_get_devdata(master);
++ struct spi_transfer *xfer;
++ u32 imr = 0;
++ u32 len;
++ dma_addr_t tx_dma, rx_dma;
++
++ xfer = as->current_transfer;
++ if (!xfer || as->remaining_bytes == 0) {
++ if (xfer)
++ xfer = list_entry(xfer->transfer_list.next,
++ struct spi_transfer, transfer_list);
++ else
++ xfer = list_entry(msg->transfers.next, struct spi_transfer,
++ transfer_list);
++ as->remaining_bytes = xfer->len;
++ as->current_transfer = xfer;
++ }
++
++ len = as->remaining_bytes;
++
++ tx_dma = xfer->tx_dma;
++ rx_dma = xfer->rx_dma;
++
++ if (rx_dma == INVALID_DMA_ADDRESS) {
++ rx_dma = as->buffer_dma;
++ if (len > BUFFER_SIZE)
++ len = BUFFER_SIZE;
++ }
++ if (tx_dma == INVALID_DMA_ADDRESS) {
++ if (xfer->tx_buf) {
++ tx_dma = as->buffer_dma;
++ if (len > BUFFER_SIZE)
++ len = BUFFER_SIZE;
++ memcpy(as->buffer, xfer->tx_buf, len);
++ dma_sync_single_for_device(&as->pdev->dev,
++ as->buffer_dma, len,
++ DMA_TO_DEVICE);
++ } else {
++ /* Send undefined data; rx_dma is handy */
++ tx_dma = rx_dma;
++ }
++ }
++
++ spi_writel(as, RPR, rx_dma);
++ spi_writel(as, TPR, tx_dma);
++
++ as->remaining_bytes -= len;
++ if (msg->spi->bits_per_word > 8)
++ len >>= 1;
++
++ /* REVISIT: when xfer->delay_usecs == 0, the PDC "next transfer"
++ * mechanism might help avoid the IRQ latency between transfers
++ *
++ * We're also waiting for ENDRX before we start the next
++ * transfer because we need to handle some difficult timing
++ * issues otherwise. If we wait for ENDTX in one transfer and
++ * then starts waiting for ENDRX in the next, it's difficult
++ * to tell the difference between the ENDRX interrupt we're
++ * actually waiting for and the ENDRX interrupt of the
++ * previous transfer.
++ *
++ * It should be doable, though. Just not now...
++ */
++ spi_writel(as, TNCR, 0);
++ spi_writel(as, RNCR, 0);
++ imr = SPI_BIT(ENDRX);
++
++ dev_dbg(&msg->spi->dev,
++ "start xfer %p: len %u tx %p/%08x rx %p/%08x imr %08x\n",
++ xfer, xfer->len, xfer->tx_buf, xfer->tx_dma,
++ xfer->rx_buf, xfer->rx_dma, imr);
++
++ wmb();
++ spi_writel(as, TCR, len);
++ spi_writel(as, RCR, len);
++ spi_writel(as, PTCR, SPI_BIT(TXTEN) | SPI_BIT(RXTEN));
++ spi_writel(as, IER, imr);
++}
++
++static void atmel_spi_next_message(struct spi_master *master)
++{
++ struct atmel_spi *as = spi_master_get_devdata(master);
++ struct spi_message *msg;
++ u32 mr;
++
++ BUG_ON(as->current_transfer);
++
++ msg = list_entry(as->queue.next, struct spi_message, queue);
++
++ /* Select the chip */
++ mr = spi_readl(as, MR);
++ mr = SPI_BFINS(PCS, ~(1 << msg->spi->chip_select), mr);
++ spi_writel(as, MR, mr);
++ cs_activate(msg->spi);
++
++ atmel_spi_next_xfer(master, msg);
++}
++
++static void atmel_spi_dma_map_xfer(struct atmel_spi *as,
++ struct spi_transfer *xfer)
++{
++ xfer->tx_dma = xfer->rx_dma = INVALID_DMA_ADDRESS;
++ if (!(xfer->len & (L1_CACHE_BYTES - 1))) {
++ if (xfer->tx_buf
++ && !((unsigned long)xfer->tx_buf & (L1_CACHE_BYTES - 1)))
++ xfer->tx_dma = dma_map_single(&as->pdev->dev,
++ xfer->tx_buf,
++ xfer->len,
++ DMA_TO_DEVICE);
++ if (xfer->rx_buf
++ && !((unsigned long)xfer->rx_buf & (L1_CACHE_BYTES - 1)))
++ xfer->rx_dma = dma_map_single(&as->pdev->dev,
++ xfer->rx_buf,
++ xfer->len,
++ DMA_FROM_DEVICE);
++ }
++}
++
++static irqreturn_t
++atmel_spi_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct spi_master *master = dev_id;
++ struct atmel_spi *as = spi_master_get_devdata(master);
++ struct spi_message *msg;
++ struct spi_transfer *xfer;
++ u32 status, pending, imr;
++ int ret = IRQ_NONE;
++
++ imr = spi_readl(as, IMR);
++ status = spi_readl(as, SR);
++ pending = status & imr;
++pr_debug("spi irq: stat %05x imr %05x pend %05x\n", status, imr, pending);
++
++ if (pending & (SPI_BIT(ENDTX) | SPI_BIT(ENDRX))) {
++ ret = IRQ_HANDLED;
++
++ spi_writel(as, IDR, pending);
++ spin_lock(&as->lock);
++
++ xfer = as->current_transfer;
++ msg = list_entry(as->queue.next, struct spi_message, queue);
++
++ /*
++ * If the rx buffer wasn't aligned, we used a bounce
++ * buffer for the transfer. Copy the data back and
++ * make the bounce buffer ready for re-use.
++ */
++ if (xfer->rx_buf && xfer->rx_dma == INVALID_DMA_ADDRESS) {
++ unsigned int len = xfer->len;
++ if (len > BUFFER_SIZE)
++ len = BUFFER_SIZE;
++
++ dma_sync_single_for_cpu(&as->pdev->dev, as->buffer_dma,
++ len, DMA_FROM_DEVICE);
++ memcpy((xfer->rx_buf + xfer->len
++ - len - as->remaining_bytes),
++ as->buffer, len);
++ }
++
++
++ if (as->remaining_bytes == 0) {
++ msg->actual_length += xfer->len;
++
++ if (!msg->is_dma_mapped) {
++ if (xfer->tx_dma != INVALID_DMA_ADDRESS)
++ dma_unmap_single(master->cdev.dev,
++ xfer->tx_dma,
++ xfer->len,
++ DMA_TO_DEVICE);
++ if (xfer->rx_dma != INVALID_DMA_ADDRESS)
++ dma_unmap_single(master->cdev.dev,
++ xfer->rx_dma,
++ xfer->len,
++ DMA_FROM_DEVICE);
++ }
++
++ /* REVISIT: udelay in irq is unfriendly */
++ if (xfer->delay_usecs)
++ udelay(xfer->delay_usecs);
++
++ if (msg->transfers.prev == &xfer->transfer_list) {
++
++ /* report completed message */
++ cs_deactivate(msg->spi);
++ list_del(&msg->queue);
++ msg->status = 0;
++
++ dev_dbg(master->cdev.dev,
++ "xfer complete: %u bytes transferred\n",
++ msg->actual_length);
++
++ spin_unlock(&as->lock);
++ msg->complete(msg->context);
++ spin_lock(&as->lock);
++
++ as->current_transfer = NULL;
++
++ /* continue; complete() may have queued requests */
++ if (list_empty(&as->queue) || as->stopping)
++ spi_writel(as, PTCR, SPI_BIT(RXTDIS)
++ | SPI_BIT(TXTDIS));
++ else
++ atmel_spi_next_message(master);
++ } else {
++ if (xfer->cs_change) {
++ cs_deactivate(msg->spi);
++ udelay(1);
++ cs_activate(msg->spi);
++ }
++
++ /*
++ * Not done yet. Submit the next transfer.
++ *
++ * FIXME handle protocol options for xfer
++ */
++ atmel_spi_next_xfer(master, msg);
++ }
++ } else {
++ /*
++ * Keep going, we still have data to send in
++ * the current transfer.
++ */
++ atmel_spi_next_xfer(master, msg);
++ }
++ spin_unlock(&as->lock);
++ }
++
++ return ret;
++}
++
++static int atmel_spi_setup(struct spi_device *spi)
++{
++ struct atmel_spi *as;
++ u32 scbr, csr;
++ unsigned int bits = spi->bits_per_word;
++ unsigned long bus_hz, sck_hz;
++ unsigned int npcs_pin;
++ int ret;
++
++ as = spi_master_get_devdata(spi->master);
++
++ if (as->stopping)
++ return -ESHUTDOWN;
++
++ if (spi->chip_select > spi->master->num_chipselect) {
++ dev_dbg(&spi->dev,
++ "setup: invalid chipselect %u (%u defined)\n",
++ spi->chip_select, spi->master->num_chipselect);
++ return -EINVAL;
++ }
++
++ if (bits == 0)
++ bits = 8;
++ if (bits < 8 || bits > 16) {
++ dev_dbg(&spi->dev,
++ "setup: invalid bits_per_word %u (8 to 16)\n",
++ bits);
++ return -EINVAL;
++ }
++
++ if (spi->mode & (SPI_CS_HIGH | SPI_LSB_FIRST)) {
++ dev_dbg(&spi->dev, "setup: unsupported mode %u\n", spi->mode);
++ return -EINVAL;
++ }
++
++ /* speed zero convention is used by some upper layers */
++ bus_hz = clk_get_rate(as->clk);
++ if (spi->max_speed_hz) {
++ /* assume div32/fdiv/mbz == 0 */
++ if (!as->new_1)
++ bus_hz /= 2;
++ scbr = ((bus_hz + spi->max_speed_hz - 1)
++ / spi->max_speed_hz);
++ if (scbr >= (1 << SPI_SCBR_SIZE)) {
++ dev_dbg(&spi->dev, "setup: %d Hz too slow, scbr %u\n",
++ spi->max_speed_hz, scbr);
++ return -EINVAL;
++ }
++ } else
++ scbr = 0xff;
++ sck_hz = bus_hz / scbr;
++
++ csr = SPI_BF(SCBR, scbr) | SPI_BF(BITS, bits - 8);
++ if (spi->mode & SPI_CPOL)
++ csr |= SPI_BIT(CPOL);
++ if (!(spi->mode & SPI_CPHA))
++ csr |= SPI_BIT(NCPHA);
++
++ /* TODO: DLYBS and DLYBCT */
++ csr |= SPI_BF(DLYBS, 10);
++ csr |= SPI_BF(DLYBCT, 10);
++
++ npcs_pin = (unsigned int)spi->controller_data;
++ if (!spi->controller_state) {
++ ret = gpio_request(npcs_pin, "spi_npcs");
++ if (ret)
++ return ret;
++ spi->controller_state = (void *)npcs_pin;
++ }
++
++ gpio_set_value(npcs_pin, 1);
++
++ dev_dbg(&spi->dev,
++ "setup: %lu Hz bpw %u mode 0x%x -> csr%d %08x\n",
++ sck_hz, bits, spi->mode, spi->chip_select, csr);
++
++ spi_writel(as, CSR0 + 4 * spi->chip_select, csr);
++
++ return 0;
++}
++
++static int atmel_spi_transfer(struct spi_device *spi, struct spi_message *msg)
++{
++ struct atmel_spi *as;
++ struct spi_transfer *xfer;
++ unsigned long flags;
++ struct device *controller = spi->master->cdev.dev;
++
++ as = spi_master_get_devdata(spi->master);
++
++ dev_dbg(controller, "new message %p submitted for %s\n",
++ msg, spi->dev.bus_id);
++
++ if (unlikely(list_empty(&msg->transfers)
++ || !spi->max_speed_hz))
++ return -EINVAL;
++
++ if (as->stopping)
++ return -ESHUTDOWN;
++
++ list_for_each_entry(xfer, &msg->transfers, transfer_list) {
++ if (!(xfer->tx_buf || xfer->rx_buf)) {
++ dev_dbg(&spi->dev, "missing rx or tx buf\n");
++ return -EINVAL;
++ }
++
++ /* FIXME implement these protocol options!! */
++ if (xfer->bits_per_word || xfer->speed_hz) {
++ dev_dbg(&spi->dev, "no protocol options yet\n");
++ return -ENOPROTOOPT;
++ }
++ }
++
++ /* scrub dcache "early" */
++ if (!msg->is_dma_mapped) {
++ list_for_each_entry(xfer, &msg->transfers, transfer_list)
++ atmel_spi_dma_map_xfer(as, xfer);
++ }
++
++ list_for_each_entry(xfer, &msg->transfers, transfer_list) {
++ dev_dbg(controller,
++ " xfer %p: len %u tx %p/%08x rx %p/%08x\n",
++ xfer, xfer->len,
++ xfer->tx_buf, xfer->tx_dma,
++ xfer->rx_buf, xfer->rx_dma);
++ }
++
++ msg->status = -EINPROGRESS;
++ msg->actual_length = 0;
++
++ spin_lock_irqsave(&as->lock, flags);
++ list_add_tail(&msg->queue, &as->queue);
++ if (!as->current_transfer)
++ atmel_spi_next_message(spi->master);
++ spin_unlock_irqrestore(&as->lock, flags);
++
++ return 0;
++}
++
++static void atmel_spi_cleanup(const struct spi_device *spi)
++{
++ if (spi->controller_state)
++ gpio_free((unsigned int)spi->controller_data);
++}
++
++/*-------------------------------------------------------------------------*/
++
++static int __devinit atmel_spi_probe(struct platform_device *pdev)
++{
++ struct resource *regs;
++ int irq;
++ struct clk *clk;
++ int ret;
++ struct spi_master *master;
++ struct atmel_spi *as;
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!regs)
++ return -ENXIO;
++
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0)
++ return irq;
++
++ clk = clk_get(&pdev->dev, "pclk");
++ if (IS_ERR(clk))
++ return PTR_ERR(clk);
++
++ /* setup spi core then atmel-specific driver state */
++ ret = -ENOMEM;
++ master = spi_alloc_master(&pdev->dev, sizeof *as);
++ if (!master)
++ goto out_free;
++
++ master->bus_num = pdev->id;
++ master->num_chipselect = 4;
++ master->setup = atmel_spi_setup;
++ master->transfer = atmel_spi_transfer;
++ master->cleanup = atmel_spi_cleanup;
++ platform_set_drvdata(pdev, master);
++
++ as = spi_master_get_devdata(master);
++
++ as->buffer = dma_alloc_coherent(&pdev->dev, BUFFER_SIZE,
++ &as->buffer_dma, GFP_KERNEL);
++ if (!as->buffer)
++ goto out_free;
++
++ spin_lock_init(&as->lock);
++ INIT_LIST_HEAD(&as->queue);
++ as->pdev = pdev;
++ as->regs = ioremap(regs->start, (regs->end - regs->start) + 1);
++ if (!as->regs)
++ goto out_free_buffer;
++ as->irq = irq;
++ as->clk = clk;
++#if !defined(CONFIG_ARCH_AT91RM9200)
++ /* if (!cpu_is_at91rm9200()) */
++ as->new_1 = 1;
++#endif
++
++ ret = request_irq(irq, atmel_spi_interrupt, 0,
++ pdev->dev.bus_id, master);
++ if (ret)
++ goto out_unmap_regs;
++
++ /* Initialize the hardware */
++ clk_enable(clk);
++ spi_writel(as, CR, SPI_BIT(SWRST));
++ spi_writel(as, MR, SPI_BIT(MSTR) | SPI_BIT(MODFDIS));
++ spi_writel(as, PTCR, SPI_BIT(RXTDIS) | SPI_BIT(TXTDIS));
++ spi_writel(as, CR, SPI_BIT(SPIEN));
++
++ /* go! */
++ dev_info(&pdev->dev, "Atmel SPI Controller at 0x%08lx (irq %d)\n",
++ (unsigned long)regs->start, irq);
++
++ ret = spi_register_master(master);
++ if (ret)
++ goto out_reset_hw;
++
++ return 0;
++
++out_reset_hw:
++ spi_writel(as, CR, SPI_BIT(SWRST));
++ clk_disable(clk);
++ free_irq(irq, master);
++out_unmap_regs:
++ iounmap(as->regs);
++out_free_buffer:
++ dma_free_coherent(&pdev->dev, BUFFER_SIZE, as->buffer,
++ as->buffer_dma);
++out_free:
++ clk_put(clk);
++ spi_master_put(master);
++ return ret;
++}
++
++static int __devexit atmel_spi_remove(struct platform_device *pdev)
++{
++ struct spi_master *master = platform_get_drvdata(pdev);
++ struct atmel_spi *as = spi_master_get_devdata(master);
++ struct spi_message *msg;
++
++ /* reset the hardware and block queue progress */
++ spin_lock_irq(&as->lock);
++ as->stopping = 1;
++ spi_writel(as, CR, SPI_BIT(SWRST));
++ spi_readl(as, SR);
++ spin_unlock_irq(&as->lock);
++
++ /* Terminate remaining queued transfers */
++ list_for_each_entry(msg, &as->queue, queue) {
++ /* REVISIT unmapping the dma is sort of a NOP on ARM,
++ * but we shouldn't depend on that...
++ */
++ msg->status = -ESHUTDOWN;
++ msg->complete(msg->context);
++ }
++
++ dma_free_coherent(&pdev->dev, BUFFER_SIZE, as->buffer,
++ as->buffer_dma);
++
++ clk_disable(as->clk);
++ clk_put(as->clk);
++ free_irq(as->irq, master);
++ iounmap(as->regs);
++
++ spi_unregister_master(master);
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++
++static int atmel_spi_suspend(struct platform_device *pdev, pm_message_t mesg)
++{
++ struct spi_master *master = platform_get_drvdata(pdev);
++ struct atmel_spi *as = spi_master_get_devdata(master);
++
++ clk_disable(as->clk);
++ return 0;
++}
++
++static int atmel_spi_resume(struct platform_device *pdev)
++{
++ struct spi_master *master = platform_get_drvdata(pdev);
++ struct atmel_spi *as = spi_master_get_devdata(master);
++
++ clk_enable(as->clk);
++ return 0;
++}
++
++#else
++#define atmel_spi_suspend NULL
++#define atmel_spi_resume NULL
++#endif
++
++
++static struct platform_driver atmel_spi_driver = {
++ .driver = {
++ .name = "atmel_spi",
++ .owner = THIS_MODULE,
++ },
++ .probe = atmel_spi_probe,
++ .suspend = atmel_spi_suspend,
++ .resume = atmel_spi_resume,
++ .remove = __devexit_p(atmel_spi_remove),
++};
++
++static int __init atmel_spi_init(void)
++{
++ return platform_driver_register(&atmel_spi_driver);
++}
++module_init(atmel_spi_init);
++
++static void __exit atmel_spi_exit(void)
++{
++ platform_driver_unregister(&atmel_spi_driver);
++}
++module_exit(atmel_spi_exit);
++
++MODULE_DESCRIPTION("Atmel AT32/AT91 SPI Controller driver");
++MODULE_AUTHOR("Haavard Skinnemoen <hskinnemoen@atmel.com>");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.18-avr32/drivers/spi/atmel_spi.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/spi/atmel_spi.h 2006-11-29 16:55:59.000000000 +0100
+@@ -0,0 +1,167 @@
++/*
++ * Register definitions for Atmel Serial Peripheral Interface (SPI)
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ATMEL_SPI_H__
++#define __ATMEL_SPI_H__
++
++/* SPI register offsets */
++#define SPI_CR 0x0000
++#define SPI_MR 0x0004
++#define SPI_RDR 0x0008
++#define SPI_TDR 0x000c
++#define SPI_SR 0x0010
++#define SPI_IER 0x0014
++#define SPI_IDR 0x0018
++#define SPI_IMR 0x001c
++#define SPI_CSR0 0x0030
++#define SPI_CSR1 0x0034
++#define SPI_CSR2 0x0038
++#define SPI_CSR3 0x003c
++#define SPI_RPR 0x0100
++#define SPI_RCR 0x0104
++#define SPI_TPR 0x0108
++#define SPI_TCR 0x010c
++#define SPI_RNPR 0x0110
++#define SPI_RNCR 0x0114
++#define SPI_TNPR 0x0118
++#define SPI_TNCR 0x011c
++#define SPI_PTCR 0x0120
++#define SPI_PTSR 0x0124
++
++/* Bitfields in CR */
++#define SPI_SPIEN_OFFSET 0
++#define SPI_SPIEN_SIZE 1
++#define SPI_SPIDIS_OFFSET 1
++#define SPI_SPIDIS_SIZE 1
++#define SPI_SWRST_OFFSET 7
++#define SPI_SWRST_SIZE 1
++#define SPI_LASTXFER_OFFSET 24
++#define SPI_LASTXFER_SIZE 1
++
++/* Bitfields in MR */
++#define SPI_MSTR_OFFSET 0
++#define SPI_MSTR_SIZE 1
++#define SPI_PS_OFFSET 1
++#define SPI_PS_SIZE 1
++#define SPI_PCSDEC_OFFSET 2
++#define SPI_PCSDEC_SIZE 1
++#define SPI_FDIV_OFFSET 3
++#define SPI_FDIV_SIZE 1
++#define SPI_MODFDIS_OFFSET 4
++#define SPI_MODFDIS_SIZE 1
++#define SPI_LLB_OFFSET 7
++#define SPI_LLB_SIZE 1
++#define SPI_PCS_OFFSET 16
++#define SPI_PCS_SIZE 4
++#define SPI_DLYBCS_OFFSET 24
++#define SPI_DLYBCS_SIZE 8
++
++/* Bitfields in RDR */
++#define SPI_RD_OFFSET 0
++#define SPI_RD_SIZE 16
++
++/* Bitfields in TDR */
++#define SPI_TD_OFFSET 0
++#define SPI_TD_SIZE 16
++
++/* Bitfields in SR */
++#define SPI_RDRF_OFFSET 0
++#define SPI_RDRF_SIZE 1
++#define SPI_TDRE_OFFSET 1
++#define SPI_TDRE_SIZE 1
++#define SPI_MODF_OFFSET 2
++#define SPI_MODF_SIZE 1
++#define SPI_OVRES_OFFSET 3
++#define SPI_OVRES_SIZE 1
++#define SPI_ENDRX_OFFSET 4
++#define SPI_ENDRX_SIZE 1
++#define SPI_ENDTX_OFFSET 5
++#define SPI_ENDTX_SIZE 1
++#define SPI_RXBUFF_OFFSET 6
++#define SPI_RXBUFF_SIZE 1
++#define SPI_TXBUFE_OFFSET 7
++#define SPI_TXBUFE_SIZE 1
++#define SPI_NSSR_OFFSET 8
++#define SPI_NSSR_SIZE 1
++#define SPI_TXEMPTY_OFFSET 9
++#define SPI_TXEMPTY_SIZE 1
++#define SPI_SPIENS_OFFSET 16
++#define SPI_SPIENS_SIZE 1
++
++/* Bitfields in CSR0 */
++#define SPI_CPOL_OFFSET 0
++#define SPI_CPOL_SIZE 1
++#define SPI_NCPHA_OFFSET 1
++#define SPI_NCPHA_SIZE 1
++#define SPI_CSAAT_OFFSET 3
++#define SPI_CSAAT_SIZE 1
++#define SPI_BITS_OFFSET 4
++#define SPI_BITS_SIZE 4
++#define SPI_SCBR_OFFSET 8
++#define SPI_SCBR_SIZE 8
++#define SPI_DLYBS_OFFSET 16
++#define SPI_DLYBS_SIZE 8
++#define SPI_DLYBCT_OFFSET 24
++#define SPI_DLYBCT_SIZE 8
++
++/* Bitfields in RCR */
++#define SPI_RXCTR_OFFSET 0
++#define SPI_RXCTR_SIZE 16
++
++/* Bitfields in TCR */
++#define SPI_TXCTR_OFFSET 0
++#define SPI_TXCTR_SIZE 16
++
++/* Bitfields in RNCR */
++#define SPI_RXNCR_OFFSET 0
++#define SPI_RXNCR_SIZE 16
++
++/* Bitfields in TNCR */
++#define SPI_TXNCR_OFFSET 0
++#define SPI_TXNCR_SIZE 16
++
++/* Bitfields in PTCR */
++#define SPI_RXTEN_OFFSET 0
++#define SPI_RXTEN_SIZE 1
++#define SPI_RXTDIS_OFFSET 1
++#define SPI_RXTDIS_SIZE 1
++#define SPI_TXTEN_OFFSET 8
++#define SPI_TXTEN_SIZE 1
++#define SPI_TXTDIS_OFFSET 9
++#define SPI_TXTDIS_SIZE 1
++
++/* Constants for BITS */
++#define SPI_BITS_8_BPT 0
++#define SPI_BITS_9_BPT 1
++#define SPI_BITS_10_BPT 2
++#define SPI_BITS_11_BPT 3
++#define SPI_BITS_12_BPT 4
++#define SPI_BITS_13_BPT 5
++#define SPI_BITS_14_BPT 6
++#define SPI_BITS_15_BPT 7
++#define SPI_BITS_16_BPT 8
++
++/* Bit manipulation macros */
++#define SPI_BIT(name) \
++ (1 << SPI_##name##_OFFSET)
++#define SPI_BF(name,value) \
++ (((value) & ((1 << SPI_##name##_SIZE) - 1)) << SPI_##name##_OFFSET)
++#define SPI_BFEXT(name,value) \
++ (((value) >> SPI_##name##_OFFSET) & ((1 << SPI_##name##_SIZE) - 1))
++#define SPI_BFINS(name,value,old) \
++ ( ((old) & ~(((1 << SPI_##name##_SIZE) - 1) << SPI_##name##_OFFSET)) \
++ | SPI_BF(name,value))
++
++/* Register access macros */
++#define spi_readl(port,reg) \
++ __raw_readl((port)->regs + SPI_##reg)
++#define spi_writel(port,reg,value) \
++ __raw_writel((value), (port)->regs + SPI_##reg)
++
++#endif /* __ATMEL_SPI_H__ */
diff --git a/packages/linux/linux-2.6.18/atmel-twi-driver.patch b/packages/linux/linux-2.6.18/atmel-twi-driver.patch
new file mode 100644
index 0000000000..97ede9b65f
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel-twi-driver.patch
@@ -0,0 +1,521 @@
+rom: Espen Krangnes <ekrangnes at atmel.com>
+
+This patch will add support for Atmel TWI for the AVR32 architecture. Atmel's TWI is compatible with Philips' I2C protocol. It supports Master read and write, and has support for different baudrates that can be set by the user. It uses the Linux I2C framework. The driver is based on the main principles of the TWI driver for the Atmel AT91 series.
+
+Signed-off-by: Espen Krangnes <ekrangnes at atmel.com>
+
+
+diff -Naur linux-2.6.18.orig/drivers/i2c/busses/atmeltwi.h linux-2.6.18/drivers/i2c/busses/atmeltwi.h
+--- linux-2.6.18.orig/drivers/i2c/busses/atmeltwi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18/drivers/i2c/busses/atmeltwi.h 2006-12-20 12:42:48.000000000 +0100
+@@ -0,0 +1,117 @@
++/*
++ * Register definitions for the Atmel Two-Wire Interface
++ */
++
++#ifndef __ASM_AVR32_TWI_H__
++#define __ASM_AVR32_TWI_H__
++
++/* TWI register offsets */
++#define TWI_CR 0x0000
++#define TWI_MMR 0x0004
++#define TWI_SMR 0x0008
++#define TWI_IADR 0x000c
++#define TWI_CWGR 0x0010
++#define TWI_SR 0x0020
++#define TWI_IER 0x0024
++#define TWI_IDR 0x0028
++#define TWI_IMR 0x002c
++#define TWI_RHR 0x0030
++#define TWI_THR 0x0034
++
++/* Bitfields in CR */
++#define TWI_START_OFFSET 0
++#define TWI_START_SIZE 1
++#define TWI_STOP_OFFSET 1
++#define TWI_STOP_SIZE 1
++#define TWI_MSEN_OFFSET 2
++#define TWI_MSEN_SIZE 1
++#define TWI_MSDIS_OFFSET 3
++#define TWI_MSDIS_SIZE 1
++#define TWI_SVEN_OFFSET 4
++#define TWI_SVEN_SIZE 1
++#define TWI_SVDIS_OFFSET 5
++#define TWI_SVDIS_SIZE 1
++#define TWI_SWRST_OFFSET 7
++#define TWI_SWRST_SIZE 1
++
++/* Bitfields in MMR */
++#define TWI_IADRSZ_OFFSET 8
++#define TWI_IADRSZ_SIZE 2
++#define TWI_MREAD_OFFSET 12
++#define TWI_MREAD_SIZE 1
++#define TWI_DADR_OFFSET 16
++#define TWI_DADR_SIZE 7
++
++/* Bitfields in SMR */
++#define TWI_SADR_OFFSET 16
++#define TWI_SADR_SIZE 7
++
++/* Bitfields in IADR */
++#define TWI_IADR_OFFSET 0
++#define TWI_IADR_SIZE 24
++
++/* Bitfields in CWGR */
++#define TWI_CLDIV_OFFSET 0
++#define TWI_CLDIV_SIZE 8
++#define TWI_CHDIV_OFFSET 8
++#define TWI_CHDIV_SIZE 8
++#define TWI_CKDIV_OFFSET 16
++#define TWI_CKDIV_SIZE 3
++
++/* Bitfields in SR */
++#define TWI_TXCOMP_OFFSET 0
++#define TWI_TXCOMP_SIZE 1
++#define TWI_RXRDY_OFFSET 1
++#define TWI_RXRDY_SIZE 1
++#define TWI_TXRDY_OFFSET 2
++#define TWI_TXRDY_SIZE 1
++#define TWI_SVDIR_OFFSET 3
++#define TWI_SVDIR_SIZE 1
++#define TWI_SVACC_OFFSET 4
++#define TWI_SVACC_SIZE 1
++#define TWI_GCACC_OFFSET 5
++#define TWI_GCACC_SIZE 1
++#define TWI_OVRE_OFFSET 6
++#define TWI_OVRE_SIZE 1
++#define TWI_UNRE_OFFSET 7
++#define TWI_UNRE_SIZE 1
++#define TWI_NACK_OFFSET 8
++#define TWI_NACK_SIZE 1
++#define TWI_ARBLST_OFFSET 9
++#define TWI_ARBLST_SIZE 1
++
++/* Bitfields in RHR */
++#define TWI_RXDATA_OFFSET 0
++#define TWI_RXDATA_SIZE 8
++
++/* Bitfields in THR */
++#define TWI_TXDATA_OFFSET 0
++#define TWI_TXDATA_SIZE 8
++
++/* Constants for IADRSZ */
++#define TWI_IADRSZ_NO_ADDR 0
++#define TWI_IADRSZ_ONE_BYTE 1
++#define TWI_IADRSZ_TWO_BYTES 2
++#define TWI_IADRSZ_THREE_BYTES 3
++
++/* Bit manipulation macros */
++#define TWI_BIT(name) \
++ (1 << TWI_##name##_OFFSET)
++#define TWI_BF(name,value) \
++ (((value) & ((1 << TWI_##name##_SIZE) - 1)) \
++ << TWI_##name##_OFFSET)
++#define TWI_BFEXT(name,value) \
++ (((value) >> TWI_##name##_OFFSET) \
++ & ((1 << TWI_##name##_SIZE) - 1))
++#define TWI_BFINS(name,value,old) \
++ (((old) & ~(((1 << TWI_##name##_SIZE) - 1) \
++ << TWI_##name##_OFFSET)) \
++ | TWI_BF(name,value))
++
++/* Register access macros */
++#define twi_readl(port,reg) \
++ __raw_readl((port)->regs + TWI_##reg)
++#define twi_writel(port,reg,value) \
++ __raw_writel((value), (port)->regs + TWI_##reg)
++
++#endif /* __ASM_AVR32_TWI_H__ */
+diff -Naur linux-2.6.18.orig/drivers/i2c/busses/i2c-atmeltwi.c linux-2.6.18/drivers/i2c/busses/i2c-atmeltwi.c
+--- linux-2.6.18.orig/drivers/i2c/busses/i2c-atmeltwi.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.18/drivers/i2c/busses/i2c-atmeltwi.c 2006-12-20 13:30:49.000000000 +0100
+@@ -0,0 +1,348 @@
++/*
++ * i2c Support for Atmel's Two-Wire Interface (TWI)
++ *
++ * Based on the work of Copyright (C) 2004 Rick Bronson
++ * Converted to 2.6 by Andrew Victor <andrew at sanpeople.com>
++ * Ported to AVR32 and heavily modified by Espen Krangnes <ekrangnes at atmel.com>
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * Borrowed heavily from the original work by:
++ * Copyright (C) 2000 Philip Edelbrock <phil at stimpy.netroedge.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ */
++
++
++#include <linux/err.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/delay.h>
++#include <linux/i2c.h>
++#include <linux/init.h>
++#include <linux/clk.h>
++#include <linux/interrupt.h>
++#include <linux/irq.h>
++#include <linux/platform_device.h>
++#include <linux/completion.h>
++#include <asm/io.h>
++#include <linux/time.h>
++#include "atmeltwi.h"
++
++static unsigned int baudrate = CONFIG_I2C_ATMELTWI_BAUDRATE;
++module_param(baudrate, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
++MODULE_PARM_DESC(baudrate, "The TWI baudrate");
++
++
++struct atmel_twi {
++ void __iomem *regs;
++ struct i2c_adapter adapter;
++ struct clk *pclk;
++ spinlock_t lock;
++ struct completion comp;
++ u32 intmask;
++ u8 *buf;
++ u8 len;
++ u8 acks_left;
++ unsigned int irq;
++
++};
++#define to_atmel_twi(adap) container_of(adap, struct atmel_twi, adapter)
++
++/*
++ * Initialize the TWI hardware registers.
++ */
++static int __devinit twi_hwinit(struct atmel_twi *twi)
++{
++ unsigned long cdiv, ckdiv=0;
++
++ twi_writel(twi, IDR, ~0UL);
++ twi_writel(twi, CR, TWI_BIT(SWRST)); /*Reset peripheral*/
++ twi_readl(twi, SR);
++
++ cdiv = (clk_get_rate(twi->pclk) / (2 * baudrate)) - 4;
++
++ while (cdiv > 255) {
++ ckdiv++;
++ cdiv = cdiv >> 1;
++ }
++
++ if (ckdiv > 7)
++ return -EINVAL;
++ else
++ twi_writel(twi, CWGR, (TWI_BF(CKDIV, ckdiv)
++ | TWI_BF(CHDIV, cdiv)
++ | TWI_BF(CLDIV, cdiv)));
++ return 0;
++}
++
++/*
++ * Waits for the i2c status register to set the specified bitmask
++ * Returns 0 if timed out (~100ms).
++ */
++static short twi_wait_for_completion(struct atmel_twi *twi,
++ u32 mask)
++{
++ int timeout = msecs_to_jiffies(100);
++
++ twi->intmask = mask;
++ init_completion(&twi->comp);
++
++ twi_writel(twi, IER, mask);
++
++ if(!wait_for_completion_timeout(&twi->comp, timeout))
++ return -ETIMEDOUT;
++
++ return 0;
++}
++
++/*
++ * Generic i2c master transfer entrypoint.
++ */
++static int twi_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
++{
++ struct atmel_twi *twi = to_atmel_twi(adap);
++ struct i2c_msg *pmsg;
++ int i;
++
++ /* get first message */
++ pmsg = msgs;
++
++ dev_dbg(&adap->dev, "twi_xfer: processing %d messages:\n", num);
++
++ for (i = 0; i < num; i++, pmsg++) {
++
++ twi->len = pmsg->len;
++ twi->buf = pmsg->buf;
++ twi->acks_left = pmsg->len;
++ twi_writel(twi, MMR, TWI_BF(DADR, pmsg->addr) |
++ (pmsg->flags & I2C_M_RD ? TWI_BIT(MREAD) : 0));
++ twi_writel(twi, IADR, TWI_BF(IADR, pmsg->addr));
++
++ dev_dbg(&adap->dev,"#%d: internal addr %d %s byte%s %s 0x%02x\n",
++ i,pmsg->len, pmsg->flags & I2C_M_RD ? "reading" : "writing",
++ pmsg->len > 1 ? "s" : "",
++ pmsg->flags & I2C_M_RD ? "from" : "to", pmsg->addr);
++
++ /* enable */
++ twi_writel(twi, CR, TWI_BIT(MSEN));
++
++ if (pmsg->flags & I2C_M_RD) {
++ twi_writel(twi, CR, TWI_BIT(START));
++ if ( twi_wait_for_completion(twi,TWI_BIT(RXRDY))==-ETIMEDOUT ) {
++ dev_dbg(&adap->dev, "RXRDY timeout. Stopped with %d bytes left\n",
++ twi->acks_left);
++ return -ETIMEDOUT;
++ }
++
++ /* Send Stop, and Wait until transfer is finished */
++ if ( twi_wait_for_completion(twi,TWI_BIT(TXCOMP))==-ETIMEDOUT ) {
++ dev_dbg(&adap->dev, "TXCOMP timeout\n");
++ return -ETIMEDOUT;
++ }
++
++ } else {
++ twi_writel(twi, THR, twi->buf[0]);
++ if ( twi_wait_for_completion(twi,TWI_BIT(TXRDY))==-ETIMEDOUT ) {
++ dev_dbg(&adap->dev, "TXRDY timeout. Stopped with %d bytes left\n",
++ twi->acks_left);
++ return -ETIMEDOUT;
++ }
++ }
++
++ /* Disable TWI interface */
++ twi_writel(twi, CR, TWI_BIT(MSDIS));
++
++ } /* end cur msg */
++
++ return i;
++}
++
++
++static irqreturn_t twi_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct atmel_twi *twi = dev_id;
++ int status = twi_readl(twi, SR);
++
++ if (twi->intmask & status){
++ if (twi->intmask & TWI_BIT(NACK)) {
++ goto nack;
++ } else if (twi->intmask & TWI_BIT(RXRDY)){
++ twi->buf[twi->len - twi->acks_left] = twi_readl(twi,RHR);
++ if(--twi->acks_left==1)
++ twi_writel(twi, CR, TWI_BIT(STOP));
++ if (twi->acks_left==0)
++ goto complete;
++ } else if (twi->intmask & TWI_BIT(TXRDY)) {
++ twi->acks_left--;
++ if (twi->acks_left==0) {
++ twi->intmask = TWI_BIT(TXCOMP);
++ twi_writel(twi, IER, TWI_BIT(TXCOMP));
++ } else
++ twi_writel(twi, THR, twi->buf[twi->len - twi->acks_left]);
++ } else if (twi->intmask & TWI_BIT(TXCOMP)) {
++ goto complete;
++ }
++ }
++
++ return IRQ_HANDLED;
++
++nack:
++ printk(KERN_INFO "NACK received!\n");
++
++complete:
++ twi_writel(twi, IDR, ~0UL);
++ complete(&twi->comp);
++
++ return IRQ_HANDLED;
++
++}
++
++
++/*
++ * Return list of supported functionality.
++ */
++static u32 twi_func(struct i2c_adapter *adapter)
++{
++ return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
++}
++
++/* For now, we only handle combined mode (smbus) */
++static struct i2c_algorithm twi_algorithm = {
++ .master_xfer = twi_xfer,
++ .functionality = twi_func,
++};
++
++/*
++ * Main initialization routine.
++ */
++static int __devinit twi_probe(struct platform_device *pdev)
++{
++ struct atmel_twi *twi;
++ struct resource *regs;
++ struct clk *pclk;
++ struct i2c_adapter *adapter;
++ int rc, irq;
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!regs)
++ return -ENXIO;
++
++ pclk = clk_get(&pdev->dev, "pclk");
++ if (IS_ERR(pclk))
++ return PTR_ERR(pclk);
++ clk_enable(pclk);
++
++ rc = -ENOMEM;
++ twi = kzalloc(sizeof(struct atmel_twi), GFP_KERNEL);
++ if (!twi) {
++ dev_err(&pdev->dev, "can't allocate interface!\n");
++ goto err_alloc_twi;
++ }
++
++ twi->pclk = pclk;
++ twi->regs = ioremap(regs->start, regs->end - regs->start + 1);
++ if (!twi->regs)
++ goto err_ioremap;
++
++ irq = platform_get_irq(pdev,0);
++ rc = request_irq(irq, twi_interrupt, 0, "twi", twi);
++ if (rc) {
++ dev_err(&pdev->dev, "can't bind irq!\n");
++ goto err_irq;
++ }
++ twi->irq = irq;
++
++ rc = twi_hwinit(twi);
++ if (rc) {
++ dev_err(&pdev->dev, "Unable to set baudrate\n");
++ goto err_hw_init;
++ }
++
++ adapter = &twi->adapter;
++ sprintf(adapter->name, "TWI");
++ adapter->algo = &twi_algorithm;
++ adapter->class = I2C_CLASS_HWMON;
++ adapter->dev.parent = &pdev->dev;
++
++ platform_set_drvdata(pdev, twi);
++
++ rc = i2c_add_adapter(adapter);
++ if (rc) {
++ dev_err(&pdev->dev, "Adapter %s registration failed\n",
++ adapter->name);
++ goto err_register;
++ }
++
++ dev_info(&pdev->dev, "Atmel TWI i2c bus device (baudrate %dk) at 0x%08lx.\n",
++ baudrate/1000, (unsigned long)regs->start);
++
++ return 0;
++
++
++err_register:
++ platform_set_drvdata(pdev, NULL);
++
++err_hw_init:
++ free_irq(irq, twi);
++
++err_irq:
++ iounmap(twi->regs);
++
++err_ioremap:
++ kfree(twi);
++
++err_alloc_twi:
++ clk_disable(pclk);
++ clk_put(pclk);
++
++ return rc;
++}
++
++static int __devexit twi_remove(struct platform_device *pdev)
++{
++ struct atmel_twi *twi = platform_get_drvdata(pdev);
++ int res;
++
++ platform_set_drvdata(pdev, NULL);
++ res = i2c_del_adapter(&twi->adapter);
++ twi_writel(twi, CR, TWI_BIT(MSDIS));
++ iounmap(twi->regs);
++ clk_disable(twi->pclk);
++ clk_put(twi->pclk);
++ free_irq(twi->irq, twi);
++ kfree(twi);
++
++ return res;
++}
++
++static struct platform_driver twi_driver = {
++ .probe = twi_probe,
++ .remove = __devexit_p(twi_remove),
++ .driver = {
++ .name = "atmel_twi",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init atmel_twi_init(void)
++{
++ return platform_driver_register(&twi_driver);
++}
++
++static void __exit atmel_twi_exit(void)
++{
++ platform_driver_unregister(&twi_driver);
++}
++
++module_init(atmel_twi_init);
++module_exit(atmel_twi_exit);
++
++MODULE_AUTHOR("Espen Krangnes");
++MODULE_DESCRIPTION("I2C driver for Atmel TWI");
++MODULE_LICENSE("GPL");
+diff -Naur linux-2.6.18.orig/drivers/i2c/busses/Kconfig linux-2.6.18/drivers/i2c/busses/Kconfig
+--- linux-2.6.18.orig/drivers/i2c/busses/Kconfig 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18/drivers/i2c/busses/Kconfig 2006-12-18 22:41:58.000000000 +0100
+@@ -5,6 +5,26 @@
+ menu "I2C Hardware Bus support"
+ depends on I2C
+
++config I2C_ATMELTWI
++ tristate "Atmel TWI/I2C"
++ depends on I2C
++ help
++ Atmel on-chip TWI controller. Say Y if you have an AT32 or
++ AT91-based device and want to use its built-in TWI
++ functionality. Atmel's TWI is compatible with Philips' I2C
++ protocol. If in doubt, say NO
++
++config I2C_ATMELTWI_BAUDRATE
++ prompt "Atmel TWI baudrate"
++ depends on I2C_ATMELTWI
++ int
++ default 100000
++ help
++ Set the TWI/I2C baudrate. This will alter the default value. A
++ different baudrate can be set by using a module parameter as well. If
++ no parameter is provided when loading, this is the value that will be
++ used.
++
+ config I2C_ALI1535
+ tristate "ALI 1535"
+ depends on I2C && PCI
+diff -Naur linux-2.6.18.orig/drivers/i2c/busses/Makefile linux-2.6.18/drivers/i2c/busses/Makefile
+--- linux-2.6.18.orig/drivers/i2c/busses/Makefile 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18/drivers/i2c/busses/Makefile 2006-12-18 22:42:14.000000000 +0100
+@@ -43,6 +43,7 @@
+ obj-$(CONFIG_I2C_VOODOO3) += i2c-voodoo3.o
+ obj-$(CONFIG_SCx200_ACB) += scx200_acb.o
+ obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o
++obj-$(CONFIG_I2C_ATMELTWI) += i2c-atmeltwi.o
+
+ ifeq ($(CONFIG_I2C_DEBUG_BUS),y)
+ EXTRA_CFLAGS += -DDEBUG
diff --git a/packages/linux/linux-2.6.18/atmel-usart3-driver.patch b/packages/linux/linux-2.6.18/atmel-usart3-driver.patch
new file mode 100644
index 0000000000..2f1b1cf137
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel-usart3-driver.patch
@@ -0,0 +1,1443 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Fri Nov 18 16:31:34 2005 +0100
+Subject: [PATCH] AVR32: USART3 Serial Driver
+
+---
+
+ drivers/serial/Kconfig | 21
+ drivers/serial/Makefile | 1
+ drivers/serial/atmel_usart.c | 1086 +++++++++++++++++++++++++++++++++++++++++++
+ drivers/serial/atmel_usart.h | 290 +++++++++++
+ 4 files changed, 1398 insertions(+)
+
+Index: linux-2.6.18-avr32/drivers/serial/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/serial/Kconfig 2006-11-02 14:16:07.000000000 +0100
++++ linux-2.6.18-avr32/drivers/serial/Kconfig 2006-11-02 15:54:18.000000000 +0100
+@@ -246,6 +246,27 @@ config SERIAL_8250_AU1X00
+
+ comment "Non-8250 serial port support"
+
++config SERIAL_ATMEL
++ tristate "Atmel USART3 serial port support"
++ depends on AVR32
++ select SERIAL_CORE
++ default y
++ help
++ Support for the Atmel USART3 on-chip USART found in most
++ AT32 and AT91 parts from Atmel.
++
++ If unsure, say Y.
++
++config SERIAL_ATMEL_CONSOLE
++ bool "Support for console on Atmel USART3 serial port"
++ depends on SERIAL_ATMEL=y
++ select SERIAL_CORE_CONSOLE
++ help
++ Say Y here if you wish to use an Atmel USART3 serial port as
++ the system console (the system console is the device which
++ receives all kernel messages and warnings and which allows
++ logins in single user mode).
++
+ config SERIAL_AMBA_PL010
+ tristate "ARM AMBA PL010 serial port support"
+ depends on ARM_AMBA && (BROKEN || !ARCH_VERSATILE)
+Index: linux-2.6.18-avr32/drivers/serial/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/serial/Makefile 2006-11-02 14:16:07.000000000 +0100
++++ linux-2.6.18-avr32/drivers/serial/Makefile 2006-11-02 14:17:29.000000000 +0100
+@@ -20,6 +20,7 @@ obj-$(CONFIG_SERIAL_8250_BOCA) += 8250_b
+ obj-$(CONFIG_SERIAL_8250_HUB6) += 8250_hub6.o
+ obj-$(CONFIG_SERIAL_8250_MCA) += 8250_mca.o
+ obj-$(CONFIG_SERIAL_8250_AU1X00) += 8250_au1x00.o
++obj-$(CONFIG_SERIAL_ATMEL) += atmel_usart.o
+ obj-$(CONFIG_SERIAL_AMBA_PL010) += amba-pl010.o
+ obj-$(CONFIG_SERIAL_AMBA_PL011) += amba-pl011.o
+ obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o
+Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.c 2006-11-02 15:54:18.000000000 +0100
+@@ -0,0 +1,1086 @@
++/*
++ * Driver for Atmel USART3 Serial ports
++ *
++ * Based on AT91RM9200 serial driver by Rick Bronson
++ * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
++ * Based on drivers/serial/sa1100.c by Deep Blue Solutions Ltd.
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/clk.h>
++#include <linux/console.h>
++#include <linux/dma-mapping.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/sched.h>
++#include <linux/serial.h>
++#include <linux/tty.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++
++#include <asm/arch/board.h>
++
++#if defined(CONFIG_SERIAL_ATMEL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
++#define SUPPORT_SYSRQ
++#include <linux/sysrq.h>
++#endif
++
++#include <linux/serial_core.h>
++
++#include "atmel_usart.h"
++
++/*
++ * TODO: Move this definition into linux/serial_core.h
++ */
++#define PORT_USART3 60
++
++/*
++ * Use the same major/minor numbers as the AT91 USART, which is
++ * actually the same chip
++ */
++#define SERIAL_USART3_MAJOR TTY_MAJOR
++#define MINOR_START 64
++#define NR_PORTS 4
++
++#define ERROR_FLAGS (USART3_BIT(CSR_PARE) \
++ | USART3_BIT(CSR_FRAME) \
++ | USART3_BIT(CSR_OVRE))
++
++/* Must be a power of two, or everything will break */
++#define RX_BUFFER_SIZE 32
++struct usart3_port {
++ void __iomem *regs;
++ int break_active;
++ unsigned int tx_dma_head;
++ int rx_tail;
++ char *rx_buffer;
++ dma_addr_t rx_dma;
++ dma_addr_t tx_dma;
++ struct clk *mck;
++ unsigned long mapsize;
++ struct uart_port uart;
++};
++#define to_usart3_port(port) container_of(port, struct usart3_port, uart)
++
++static void tx_dma_sync(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++ struct circ_buf *xmit = &port->info->xmit;
++
++ if (xmit->head < up->tx_dma_head) {
++ dma_sync_single_for_device(port->dev,
++ up->tx_dma + up->tx_dma_head,
++ UART_XMIT_SIZE - up->tx_dma_head,
++ DMA_TO_DEVICE);
++ dma_sync_single_for_device(port->dev, up->tx_dma,
++ xmit->head, DMA_TO_DEVICE);
++ } else {
++ dma_sync_single_for_device(port->dev,
++ up->tx_dma + up->tx_dma_head,
++ xmit->head - up->tx_dma_head,
++ DMA_TO_DEVICE);
++ }
++}
++
++static void tx_dma_update_tail(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++ struct circ_buf *xmit = &port->info->xmit;
++ unsigned long status, remaining;
++ unsigned int new_tail;
++
++ /* Account for the characters DMA'ed since last update */
++ remaining = usart3_readl(up, TCR);
++
++ if (up->tx_dma_head < xmit->tail) {
++ /*
++ * We have wrapped around, and there's a chunk at the
++ * beginning of the buffer that has been submitted for
++ * DMA. If the ENDTX bit is set, it means that the
++ * DMA controller also has wrapped around and copied
++ * TNPR/TNCR into TPR/TCR.
++ */
++ status = usart3_readl(up, CSR);
++ BUG_ON((up->tx_dma_head != 0)
++ && (usart3_readl(up, TNCR) == 0)
++ && !(status & USART3_BIT(ENDTX)));
++ if (status & USART3_BIT(ENDTX)) {
++ BUG_ON(usart3_readl(up, TNCR) != 0);
++
++ /* The ENDTX bit might be set after we read TCR */
++ remaining = usart3_readl(up, TCR);
++
++ usart3_writel(up, TNCR, 0);
++ port->icount.tx += UART_XMIT_SIZE - xmit->tail;
++ xmit->tail = 0;
++
++ BUG_ON(remaining > up->tx_dma_head);
++ new_tail = up->tx_dma_head - remaining;
++ } else {
++ /*
++ * The DMA controller hasn't switched yet, so
++ * TCR indicates the number of bytes left
++ * until this happens.
++ */
++ new_tail = UART_XMIT_SIZE - remaining;
++ }
++ } else {
++ /* No wraparound, move the tail closer to dma_head. */
++ BUG_ON(remaining > up->tx_dma_head);
++ new_tail = up->tx_dma_head - remaining;
++ }
++
++ BUG_ON(new_tail < xmit->tail);
++ port->icount.tx += new_tail - xmit->tail;
++ xmit->tail = new_tail;
++}
++
++static inline void tx_dma_start(struct usart3_port *up)
++{
++ /* Start the PDC and enable interrupts */
++ usart3_writel(up, PTCR, USART3_BIT(TXTEN));
++ usart3_writel(up, IER, USART3_BIT(ENDTX));
++}
++
++static inline void tx_dma_stop(struct usart3_port *up)
++{
++ usart3_writel(up, PTCR, USART3_BIT(TXTDIS));
++ usart3_writel(up, IDR, USART3_BIT(ENDTX));
++}
++
++static inline unsigned int rx_dma_get_head(struct usart3_port *up)
++{
++ unsigned int head;
++ u32 status;
++
++ head = RX_BUFFER_SIZE - usart3_readl(up, RCR);
++ status = usart3_readl(up, CSR);
++ if (status & USART3_BIT(ENDRX))
++ head = RX_BUFFER_SIZE;
++
++ return head;
++}
++
++static inline int rx_dma_update_tail(struct usart3_port *up,
++ unsigned int tail)
++{
++ int again = 0;
++
++ if (!(tail & (RX_BUFFER_SIZE - 1))) {
++ u32 rnpr = up->rx_dma;
++
++ tail &= RX_BUFFER_SIZE;
++ if (!tail)
++ rnpr += RX_BUFFER_SIZE;
++
++ usart3_writel(up, RNPR, rnpr);
++ usart3_writel(up, RNCR, RX_BUFFER_SIZE);
++
++ again = 1;
++ } else
++ BUG_ON(usart3_readl(up, CSR) & USART3_BIT(ENDRX));
++
++ up->rx_tail = tail;
++
++ return again;
++}
++
++static void usart3_stop_tx(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++
++ tx_dma_stop(up);
++ tx_dma_update_tail(port);
++}
++
++static void usart3_start_tx(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++ struct circ_buf *xmit = &port->info->xmit;
++
++ BUG_ON(!irqs_disabled());
++
++ /*
++ * Stop the DMA engine so that we don't have to worry about race
++ * conditions when updating the various pointers and counters.
++ */
++ tx_dma_stop(up);
++
++ tx_dma_sync(port);
++ tx_dma_update_tail(port);
++
++ if (uart_circ_empty(xmit))
++ return;
++
++ usart3_writel(up, TPR, up->tx_dma + xmit->tail);
++
++ if (xmit->head > xmit->tail) {
++ usart3_writel(up, TCR, xmit->head - xmit->tail);
++ } else {
++ usart3_writel(up, TCR, UART_XMIT_SIZE - xmit->tail);
++ usart3_writel(up, TNPR, up->tx_dma);
++ usart3_writel(up, TNCR, xmit->head);
++ }
++
++ /* Keep track of what we've submitted for DMA */
++ up->tx_dma_head = xmit->head;
++
++ /* Resume operation of DMA engine. */
++ tx_dma_start(up);
++}
++
++static void usart3_stop_rx(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++
++ pr_debug("usart3: stop_rx\n");
++
++ usart3_writel(up, PTCR, USART3_BIT(RXTDIS));
++ usart3_writel(up, IDR, (USART3_BIT(TIMEOUT)
++ | USART3_BIT(ENDRX)
++ | USART3_BIT(RXBRK)
++ | USART3_BIT(OVRE)
++ | USART3_BIT(FRAME)
++ | USART3_BIT(PARE)));
++}
++
++static void usart3_flush_buffer(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++
++ /*
++ * Reset TX DMA state. Note that we must _always_ update TNCR
++ * before TCR, since the value in TNCR will automatically move
++ * to TCR when TCR is 0.
++ */
++ usart3_writel(up, TNCR, 0);
++ usart3_writel(up, TCR, 0);
++ up->tx_dma_head = port->info->xmit.tail;
++}
++
++/*
++ * Enable modem status interrupts
++ */
++static void usart3_enable_ms(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++
++ pr_debug("usart3: enable_ms\n");
++ usart3_writel(up, IER, (USART3_BIT(RIIC)
++ | USART3_BIT(DSRIC)
++ | USART3_BIT(DCDIC)
++ | USART3_BIT(CTSIC)));
++}
++
++static inline void handle_rx_error(struct uart_port *port, u32 status)
++{
++ /*
++ * FIXME: Errors should affect the flag buffer, but due to the
++ * PDC, we don't really know which char they belong to...
++ */
++ if (status & USART3_BIT(PARE)) {
++ printk(KERN_NOTICE "usart%u: Parity error\n", port->line);
++ port->icount.parity++;
++ } else if (status & USART3_BIT(FRAME)) {
++ printk(KERN_NOTICE "usart%u: Frame error\n", port->line);
++ port->icount.frame++;
++ }
++ if (status & USART3_BIT(OVRE)) {
++ printk(KERN_NOTICE "usart%u: Overrun\n", port->line);
++ port->icount.overrun++;
++ }
++
++#ifdef SUPPORT_SYSRQ
++ port->sysrq = 0;
++#endif
++}
++
++static inline void handle_pdc_endtx(struct uart_port *port, unsigned long status)
++{
++ struct usart3_port *up = to_usart3_port(port);
++ struct circ_buf *xmit = &port->info->xmit;
++
++ tx_dma_update_tail(port);
++
++ if (uart_tx_stopped(port)) {
++ usart3_stop_tx(port);
++ printk("usart3: stopped\n");
++ return;
++ }
++
++ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
++ uart_write_wakeup(port);
++
++ if (uart_circ_empty(xmit))
++ usart3_stop_tx(port);
++
++ /*
++ * It could be that xmit is being updated right now. If so,
++ * start_tx() will be called shortly.
++ */
++ if (status & USART3_BIT(TXBUFE))
++ usart3_writel(up, IDR, USART3_BIT(ENDTX));
++}
++
++static void consume_rx_buffer(struct uart_port *port, struct pt_regs *regs)
++{
++ struct usart3_port *up = to_usart3_port(port);
++ struct tty_struct *tty = port->info->tty;
++ unsigned long head, tail;
++ int len;
++ int again;
++
++ do {
++ /*
++ * Re-arm the timeout before we decide how many
++ * characters to read.
++ */
++ usart3_writel(up, CR, USART3_BIT(STTTO));
++
++ head = rx_dma_get_head(up);
++
++ tail = up->rx_tail;
++ if (tail & RX_BUFFER_SIZE)
++ head += RX_BUFFER_SIZE;
++
++ if (head == tail)
++ break;
++
++ dma_sync_single_for_cpu(port->dev, up->rx_dma + tail,
++ head - tail, DMA_FROM_DEVICE);
++
++ if (uart_handle_sysrq_char(port, up->rx_buffer[tail],
++ regs)) {
++ tail++;
++ if (head == tail)
++ goto update_tail;
++ }
++
++ len = tty_insert_flip_string(tty, up->rx_buffer + tail,
++ head - tail);
++ port->icount.rx += len;
++ tail += len;
++ if (!(head & (RX_BUFFER_SIZE - 1)) && tail != head) {
++ /*
++ * head has wrapped, but there isn't enough
++ * room in the buffer to handle all the
++ * characters. We must recycle this buffer in
++ * order to clear the interrupt.
++ */
++ tty_insert_flip_char(tty, 0, TTY_OVERRUN);
++ tail = head;
++ }
++
++ update_tail:
++ again = rx_dma_update_tail(up, tail);
++ } while (again);
++
++ tty_flip_buffer_push(tty);
++}
++
++/*
++ * This is the serial driver's interrupt routine
++ */
++static irqreturn_t usart3_interrupt(int irq, void *dev_id,
++ struct pt_regs *regs)
++{
++ struct uart_port *port = dev_id;
++ struct usart3_port *up = to_usart3_port(port);
++ u32 status, mask, pending;
++ irqreturn_t ret = IRQ_NONE;
++
++ spin_lock(&port->lock);
++
++ status = usart3_readl(up, CSR);
++ mask = usart3_readl(up, IMR);
++ pending = status & mask;
++ if (unlikely(!pending))
++ goto out;
++
++ ret = IRQ_HANDLED;
++
++ do {
++ /*
++ * Consume the buffer and flip buffers if necessary.
++ */
++ consume_rx_buffer(port, regs);
++
++ /* Clear any break and error flags */
++ usart3_writel(up, CR, USART3_BIT(RSTSTA));
++
++ if (pending & (USART3_BIT(OVRE)
++ | USART3_BIT(FRAME)
++ | USART3_BIT(PARE)))
++ handle_rx_error(port, status);
++
++ if (pending & USART3_BIT(RXBRK)) {
++ if (up->break_active) {
++ up->break_active = 0;
++ } else {
++ up->break_active = 1;
++ port->icount.brk++;
++ uart_handle_break(port);
++ }
++ }
++
++ if (pending & USART3_BIT(RIIC))
++ port->icount.rng++;
++ if (pending & USART3_BIT(DSRIC))
++ port->icount.dsr++;
++ if (pending & USART3_BIT(DCDIC)) {
++ port->icount.dcd++;
++ uart_handle_dcd_change
++ (port, status & USART3_BIT(DCD));
++ }
++ if (pending & USART3_BIT(CTSIC)) {
++ port->icount.cts++;
++ uart_handle_cts_change
++ (port, status & USART3_BIT(CTS));
++ }
++ if (pending & (USART3_BIT(RIIC)
++ | USART3_BIT(DSRIC)
++ | USART3_BIT(DCDIC)
++ | USART3_BIT(CTSIC)))
++ wake_up_interruptible(&port->info->delta_msr_wait);
++
++ if (pending & USART3_BIT(ENDTX))
++ handle_pdc_endtx(port, status);
++
++ status = usart3_readl(up, CSR);
++ pending = status & usart3_readl(up, IMR);
++ } while (pending);
++
++out:
++ spin_unlock(&port->lock);
++ return ret;
++}
++
++/*
++ * Return TIOCSER_TEMT when transmitter is not busy
++ */
++static unsigned int usart3_tx_empty(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++ unsigned int ret = 0;
++
++ if (usart3_readl(up, CSR) & USART3_BIT(TXEMPTY))
++ ret = TIOCSER_TEMT;
++
++ pr_debug("usart3: tx_empty returned %x\n", ret);
++
++ return ret;
++}
++
++static unsigned int usart3_get_mctrl(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++ unsigned int ret = 0;
++ unsigned int status;
++
++ status = usart3_readl(up, CSR);
++ if (status & USART3_BIT(DCD))
++ ret |= TIOCM_CD;
++ if (status & USART3_BIT(CTS))
++ ret |= TIOCM_CTS;
++ if (status & USART3_BIT(DSR))
++ ret |= TIOCM_DSR;
++ if (status & USART3_BIT(RI))
++ ret |= TIOCM_RI;
++
++ pr_debug("usart3: get_mctrl returned %x\n", ret);
++
++ return ret;
++}
++
++static void usart3_set_mctrl(struct uart_port *port, unsigned int mctrl)
++{
++ struct usart3_port *up = to_usart3_port(port);
++ unsigned int control = 0;
++
++ pr_debug("usart3: set_mctrl %x\n", mctrl);
++
++ if (mctrl & TIOCM_RTS)
++ control |= USART3_BIT(RTSEN);
++ else
++ control |= USART3_BIT(RTSDIS);
++
++ if (mctrl & TIOCM_DTR)
++ control |= USART3_BIT(DTREN);
++ else
++ control |= USART3_BIT(DTRDIS);
++
++ usart3_writel(up, CR, control);
++}
++
++static void usart3_break_ctl(struct uart_port *port, int break_state)
++{
++ struct usart3_port *up = to_usart3_port(port);
++
++ pr_debug("usart3: break_ctl %u\n", break_state);
++ if (break_state != 0)
++ usart3_writel(up, CR, USART3_BIT(STTBRK));
++ else
++ usart3_writel(up, CR, USART3_BIT(STPBRK));
++}
++
++static int usart3_startup(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++ int ret;
++
++ pr_debug("usart3: startup\n");
++
++ up->break_active = 0;
++
++ /* Set up interrupt handler */
++ ret = request_irq(port->irq, usart3_interrupt, 0,
++ port->info->tty->name, port);
++ if (ret) {
++ printk(KERN_ERR "usart3: Unable to request irq %d\n",
++ port->irq);
++ return ret;
++ }
++
++ up->rx_dma = dma_map_single(port->dev, up->rx_buffer,
++ 2 * RX_BUFFER_SIZE, DMA_FROM_DEVICE);
++ up->tx_dma = dma_map_single(port->dev, port->info->xmit.buf,
++ UART_XMIT_SIZE, DMA_TO_DEVICE);
++
++ /* Initialize the PDC for RX (TX is done in start_tx) */
++ up->rx_tail = 0;
++ usart3_writel(up, RPR, up->rx_dma);
++ usart3_writel(up, RCR, RX_BUFFER_SIZE);
++ usart3_writel(up, RNPR, up->rx_dma + RX_BUFFER_SIZE);
++ usart3_writel(up, RNCR, RX_BUFFER_SIZE);
++ usart3_writel(up, PTCR, USART3_BIT(RXTEN));
++
++ /* Reset DMA state */
++ usart3_writel(up, TNCR, 0);
++ usart3_writel(up, TCR, 0);
++ up->tx_dma_head = port->info->xmit.tail;
++
++ /*
++ * Set a suitable timeout. 2000 bit periods corresponds to
++ * about 17 ms at 115200 bps
++ */
++ usart3_writel(up, RTOR, 2000);
++
++ /* Reset and enable receiver and transmitter */
++ usart3_writel(up, CR, (USART3_BIT(RSTRX)
++ | USART3_BIT(RSTTX)
++ | USART3_BIT(RSTSTA)));
++ usart3_writel(up, CR, (USART3_BIT(RXEN)
++ | USART3_BIT(TXEN)));
++
++ /* Enable timeout, end of rx, break and error interrupts */
++ usart3_writel(up, IER, (USART3_BIT(TIMEOUT)
++ | USART3_BIT(ENDRX)
++ | USART3_BIT(RXBRK)
++ | USART3_BIT(OVRE)
++ | USART3_BIT(FRAME)
++ | USART3_BIT(PARE)));
++
++ /* Arm the timeout counter */
++ usart3_writel(up, CR, USART3_BIT(STTTO));
++
++ return 0;
++}
++
++static void usart3_shutdown(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++
++ pr_debug("usart3: shutdown\n");
++
++ /* Disable all interrupts and reset any error flags */
++ usart3_writel(up, IDR, -1L);
++ usart3_writel(up, CR, USART3_BIT(RSTSTA));
++
++ dma_unmap_single(port->dev, up->rx_dma, 2 * RX_BUFFER_SIZE,
++ DMA_FROM_DEVICE);
++ dma_unmap_single(port->dev, up->tx_dma, UART_XMIT_SIZE,
++ DMA_TO_DEVICE);
++
++ free_irq(port->irq, port);
++}
++
++static void usart3_set_termios(struct uart_port *port, struct termios *termios,
++ struct termios *old)
++{
++ struct usart3_port *up = to_usart3_port(port);
++ unsigned int baud, quot, mode = 0;
++ unsigned int imr, flags;
++
++ pr_debug("usart3: set_termios\n");
++
++ switch (termios->c_cflag & CSIZE) {
++ case CS5:
++ mode |= USART3_BF(CHRL, USART3_CHRL_5);
++ break;
++ case CS6:
++ mode |= USART3_BF(CHRL, USART3_CHRL_6);
++ break;
++ case CS7:
++ mode |= USART3_BF(CHRL, USART3_CHRL_7);
++ break;
++ default:
++ mode |= USART3_BF(CHRL, USART3_CHRL_8);
++ break;
++ }
++
++ if (termios->c_cflag & CSTOPB)
++ mode |= USART3_BF(NBSTOP, USART3_NBSTOP_2);
++
++ if (termios->c_cflag & PARENB) {
++ if (termios->c_cflag & PARODD)
++ mode |= USART3_BF(PAR, USART3_PAR_ODD);
++ else
++ mode |= USART3_BF(PAR, USART3_PAR_EVEN);
++ } else {
++ mode |= USART3_BF(PAR, USART3_PAR_NONE);
++ }
++
++ /*
++ * Ask the core to calculate the divisor for us.
++ */
++ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16);
++ quot = uart_get_divisor(port, baud);
++
++ /* Bits to ignore, timeout, etc. TBD */
++
++ /*
++ * Save and disable interrupts
++ */
++ spin_lock_irqsave(&port->lock, flags);
++ imr = usart3_readl(up, IMR);
++ usart3_writel(up, IDR, -1L);
++ spin_unlock_irqrestore(&port->lock, flags);
++
++ /*
++ * Make sure transmitter is empty. If BRGR == 0, it is safest
++ * to do a reset, since waiting for the transmitter to be
++ * empty will take forever.
++ */
++ if (usart3_readl(up, BRGR) != 0) {
++ while (!(usart3_readl(up, CSR) & USART3_BIT(TXRDY)))
++ barrier();
++ } else {
++ usart3_writel(up, CR, (USART3_BIT(RSTTX)
++ | USART3_BIT(RSTRX)));
++ }
++
++ pr_debug("usart3: Setting BRGR to %u (baud rate %u)...\n", quot, baud);
++
++ /* Disable receiver and transmitter */
++ usart3_writel(up, CR, (USART3_BIT(TXDIS)
++ | USART3_BIT(RXDIS)));
++
++ /* Set the parity, stop bits and data size */
++ usart3_writel(up, MR, mode);
++
++ /* Set the baud rate and enable receiver and transmitter */
++ usart3_writel(up, BRGR, quot);
++ usart3_writel(up, CR, (USART3_BIT(TXEN)
++ | USART3_BIT(RXEN)));
++
++ /* Restore interrupts */
++ usart3_writel(up, IER, imr);
++}
++
++static const char *usart3_type(struct uart_port *port)
++{
++ return "USART3";
++}
++
++static void usart3_release_port(struct uart_port *port)
++{
++ pr_debug("usart3: release_port\n");
++ iounmap(port->membase);
++ port->flags |= UPF_IOREMAP;
++}
++
++static int usart3_request_port(struct uart_port *port)
++{
++ struct usart3_port *up = to_usart3_port(port);
++
++ /* TODO: remove this */
++ pr_debug("usart3: request_port\n");
++ if (port->flags & UPF_IOREMAP) {
++ port->membase = ioremap(port->mapbase, up->mapsize);
++ up->regs = port->membase;
++ port->flags &= ~UPF_IOREMAP;
++ }
++ return 0;
++}
++
++static void usart3_config_port(struct uart_port *port, int flags)
++{
++ pr_debug("usart3: config_port\n");
++ if (flags & UART_CONFIG_TYPE) {
++ if (usart3_request_port(port) == 0)
++ port->type = PORT_USART3;
++ }
++}
++
++static int usart3_verify_port(struct uart_port *port, struct serial_struct *ser)
++{
++ int ret = 0;
++
++ if (ser->type != PORT_UNKNOWN && ser->type != PORT_USART3)
++ ret = -EINVAL;
++ if (port->irq != ser->irq)
++ ret = -EINVAL;
++ if (ser->io_type != SERIAL_IO_MEM)
++ ret = -EINVAL;
++ if (port->uartclk / 16 != ser->baud_base)
++ ret = -EINVAL;
++ if ((void *)port->mapbase != ser->iomem_base)
++ ret = -EINVAL;
++ if (ser->hub6 != 0)
++ ret = -EINVAL;
++
++ pr_debug("usart3_verify_port returned %d\n", ret);
++
++ return ret;
++}
++
++static struct uart_ops usart3_pops = {
++ .tx_empty = usart3_tx_empty,
++ .set_mctrl = usart3_set_mctrl,
++ .get_mctrl = usart3_get_mctrl,
++ .stop_tx = usart3_stop_tx,
++ .start_tx = usart3_start_tx,
++ .stop_rx = usart3_stop_rx,
++ .enable_ms = usart3_enable_ms,
++ .break_ctl = usart3_break_ctl,
++ .startup = usart3_startup,
++ .shutdown = usart3_shutdown,
++ .flush_buffer = usart3_flush_buffer,
++ .set_termios = usart3_set_termios,
++ .type = usart3_type,
++ .release_port = usart3_release_port,
++ .request_port = usart3_request_port,
++ .config_port = usart3_config_port,
++ .verify_port = usart3_verify_port,
++};
++
++static int __devinit initialize_port(struct usart3_port *up,
++ struct platform_device *pdev)
++{
++ struct uart_port *port = &up->uart;
++ struct resource *regs;
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!regs)
++ return -ENXIO;
++
++ spin_lock_init(&port->lock);
++
++ up->mck = clk_get(&pdev->dev, "usart");
++ if (IS_ERR(up->mck))
++ return PTR_ERR(up->mck);
++ clk_enable(up->mck);
++
++ port->mapbase = regs->start;
++ up->mapsize = regs->end - regs->start + 1;
++ port->irq = platform_get_irq(pdev, 0);
++
++ port->uartclk = clk_get_rate(up->mck);
++ port->iotype = SERIAL_IO_MEM;
++ port->flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP;
++ port->ops = &usart3_pops;
++ port->line = pdev->id;
++ port->dev = &pdev->dev;
++
++ return 0;
++}
++
++static struct usart3_port usart3_ports[NR_PORTS];
++
++#ifdef CONFIG_SERIAL_ATMEL_CONSOLE
++
++static void usart3_console_write(struct console *console, const char *string,
++ unsigned int len)
++{
++ struct usart3_port *up = &usart3_ports[console->index];
++ unsigned int imr, i;
++ unsigned long flags, ptsr;
++
++ /*
++ * Save IMR, then disable interrupts
++ */
++ local_irq_save(flags);
++ imr = usart3_readl(up, IMR);
++ usart3_writel(up, IDR, ~0UL);
++ local_irq_restore(flags);
++
++ /*
++ * Save PDC state and disable PDC transmission
++ */
++ ptsr = usart3_readl(up, PTSR);
++ usart3_writel(up, PTCR, USART3_BIT(TXTDIS));
++
++ /*
++ * Now, do each character
++ */
++ for (i = 0; i < len; i++, string++) {
++ char c = *string;
++
++ /*
++ * If we're sending LF, send CR first...
++ */
++ if (c == '\n') {
++ while (!(usart3_readl(up, CSR)
++ & USART3_BIT(TXRDY)))
++ ;
++ usart3_writel(up, THR, '\r');
++ }
++ while (!(usart3_readl(up, CSR) & USART3_BIT(TXRDY)))
++ ;
++ usart3_writel(up, THR, c);
++ }
++
++ /*
++ * Wait for transmitter to become empty and restore the IMR
++ * and PDC state.
++ */
++ while (!(usart3_readl(up, CSR) & USART3_BIT(TXRDY)))
++ ;
++
++ usart3_writel(up, PTCR, ptsr & USART3_BIT(TXTEN));
++ usart3_writel(up, IER, imr);
++}
++
++static int __init usart3_console_setup(struct console *console,
++ char *options)
++{
++ struct platform_device *pdev;
++ struct usart3_port *up;
++ struct uart_port *port;
++ int baud = 115200;
++ int bits = 8;
++ int parity = 'n';
++ int flow = 'n';
++ int ret;
++
++ if (console->index >= NR_PORTS) {
++ printk(KERN_ERR
++ "Can't use USART%u for console: index >= NR_PORTS\n",
++ console->index);
++ return -ENODEV;
++ }
++
++ pdev = at91_default_console_device;
++ if (!pdev)
++ return -ENXIO;
++
++ up = &usart3_ports[console->index];
++ port = &up->uart;
++
++ ret = initialize_port(up, pdev);
++ if (ret)
++ return ret;
++
++ port->membase = ioremap(port->mapbase, up->mapsize);
++ ret = -ENOMEM;
++ if (!port->membase)
++ goto out_disable_clk;
++
++ up->regs = port->membase;
++
++ /* Set a fixed baud rate for now */
++ usart3_writel(up, BRGR, 2);
++
++ /* Make sure all interrupts are disabled and reset/enable the USART */
++ usart3_writel(up, IDR, -1L);
++ usart3_writel(up, CR, (USART3_BIT(RSTRX)
++ | USART3_BIT(RSTTX)
++ | USART3_BIT(RSTSTA)));
++ usart3_writel(up, CR, (USART3_BIT(RXEN)
++ | USART3_BIT(TXEN)));
++
++ if (options)
++ uart_parse_options(options, &baud, &parity, &bits, &flow);
++
++ return uart_set_options(port, console, baud, parity, bits, flow);
++
++out_disable_clk:
++ clk_disable(up->mck);
++ clk_put(up->mck);
++ return ret;
++}
++
++static struct uart_driver usart3_reg;
++static struct console usart3_console = {
++ .name = "ttyUS",
++ .write = usart3_console_write,
++ .device = uart_console_device,
++ .setup = usart3_console_setup,
++ .flags = CON_PRINTBUFFER,
++ .index = -1,
++ .data = &usart3_reg,
++};
++
++static int __init usart3_console_init(void)
++{
++ register_console(&usart3_console);
++ return 0;
++}
++console_initcall(usart3_console_init);
++
++#define USART3_CONSOLE &usart3_console
++
++#else
++#define USART3_CONSOLE NULL
++#endif
++
++static struct uart_driver usart3_reg = {
++ .owner = THIS_MODULE,
++ .driver_name = "serial",
++ .dev_name = "ttyUS",
++ .major = SERIAL_USART3_MAJOR,
++ .minor = MINOR_START,
++ .nr = NR_PORTS,
++ .cons = USART3_CONSOLE,
++};
++
++static int usart3_serial_suspend(struct platform_device *pdev,
++ pm_message_t state)
++{
++ struct usart3_port *port = platform_get_drvdata(pdev);
++ int retval = 0;
++
++ if (port)
++ retval = uart_suspend_port(&usart3_reg, &port->uart);
++
++ return retval;
++}
++
++static int usart3_serial_resume(struct platform_device *pdev)
++{
++ struct usart3_port *port = platform_get_drvdata(pdev);
++ int retval = 0;
++
++ if (port)
++ retval = uart_resume_port(&usart3_reg, &port->uart);
++
++ return retval;
++}
++
++static int __devinit usart3_serial_probe(struct platform_device *pdev)
++{
++ struct usart3_port *up;
++ int ret;
++
++ if (pdev->id >= NR_PORTS) {
++ printk(KERN_WARNING
++ "Ignoring USART%u, as NR_PORTS is only %u\n",
++ pdev->id, NR_PORTS);
++ return -ENOMEM;
++ }
++
++ up = &usart3_ports[pdev->id];
++
++ /*
++ * If the port has already been set up as a console, we
++ * shouldn't enable it again.
++ */
++ if (!up->uart.uartclk) {
++ ret = initialize_port(up, pdev);
++ if (ret)
++ goto out;
++ }
++
++ /*
++ * The RX buffer must be cacheline aligned. If it's not,
++ * invalidating the cache could be disastrous...
++ *
++ * Fortunately, kmalloc() always returns cache-aligned memory.
++ */
++ ret = -ENOMEM;
++ up->rx_buffer = kmalloc(2 * RX_BUFFER_SIZE, GFP_KERNEL);
++ if (!up->rx_buffer)
++ goto out_disable_clk;
++
++ ret = uart_add_one_port(&usart3_reg, &up->uart);
++ if (ret)
++ goto out_free_rx_buffer;
++
++ platform_set_drvdata(pdev, up);
++
++ return 0;
++
++out_free_rx_buffer:
++ kfree(up->rx_buffer);
++out_disable_clk:
++ clk_disable(up->mck);
++ clk_put(up->mck);
++out:
++ return ret;
++}
++
++static int __devexit usart3_serial_remove(struct platform_device *pdev)
++{
++ struct usart3_port *port = platform_get_drvdata(pdev);
++ int retval = 0;
++
++ platform_set_drvdata(pdev, NULL);
++
++ if (port) {
++ retval = uart_remove_one_port(&usart3_reg, &port->uart);
++ clk_disable(port->mck);
++ clk_put(port->mck);
++ kfree(port->rx_buffer);
++ kfree(port);
++ }
++
++ return retval;
++}
++
++static struct platform_driver usart3_serial_driver = {
++ .probe = usart3_serial_probe,
++ .remove = __devexit_p(usart3_serial_remove),
++ .suspend = usart3_serial_suspend,
++ .resume = usart3_serial_resume,
++ .driver = {
++ .name = "usart",
++ },
++};
++
++static int __init usart3_init(void)
++{
++ int ret;
++
++ printk(KERN_INFO "Serial: Atmel USART3 driver\n");
++
++ ret = uart_register_driver(&usart3_reg);
++ if (ret)
++ return ret;
++
++ ret = platform_driver_register(&usart3_serial_driver);
++ if (ret)
++ uart_unregister_driver(&usart3_reg);
++
++ return ret;
++}
++
++static void __exit usart3_exit(void)
++{
++ platform_driver_unregister(&usart3_serial_driver);
++ uart_unregister_driver(&usart3_reg);
++}
++
++module_init(usart3_init);
++module_exit(usart3_exit);
++
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("Atmel USART3 serial driver");
++MODULE_AUTHOR("Haavard Skinnemoen <hskinnemoen@atmel.com>");
+Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.h 2006-11-02 16:37:02.000000000 +0100
+@@ -0,0 +1,290 @@
++/*
++ * Register definitions for USART3
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_USART3_H__
++#define __ASM_AVR32_USART3_H__
++
++/* USART3 register offsets */
++#define USART3_CR 0x0000
++#define USART3_MR 0x0004
++#define USART3_IER 0x0008
++#define USART3_IDR 0x000c
++#define USART3_IMR 0x0010
++#define USART3_CSR 0x0014
++#define USART3_RHR 0x0018
++#define USART3_THR 0x001c
++#define USART3_BRGR 0x0020
++#define USART3_RTOR 0x0024
++#define USART3_TTGR 0x0028
++#define USART3_FIDI 0x0040
++#define USART3_NER 0x0044
++#define USART3_XXR 0x0048
++#define USART3_IFR 0x004c
++
++/* PDC register offsets */
++#define USART3_RPR 0x100
++#define USART3_RCR 0x104
++#define USART3_TPR 0x108
++#define USART3_TCR 0x10c
++#define USART3_RNPR 0x110
++#define USART3_RNCR 0x114
++#define USART3_TNPR 0x118
++#define USART3_TNCR 0x11c
++#define USART3_PTCR 0x120
++#define USART3_PTSR 0x124
++
++/* Bitfields in CR */
++#define USART3_RSTRX_OFFSET 2
++#define USART3_RSTRX_SIZE 1
++#define USART3_RSTTX_OFFSET 3
++#define USART3_RSTTX_SIZE 1
++#define USART3_RXEN_OFFSET 4
++#define USART3_RXEN_SIZE 1
++#define USART3_RXDIS_OFFSET 5
++#define USART3_RXDIS_SIZE 1
++#define USART3_TXEN_OFFSET 6
++#define USART3_TXEN_SIZE 1
++#define USART3_TXDIS_OFFSET 7
++#define USART3_TXDIS_SIZE 1
++#define USART3_RSTSTA_OFFSET 8
++#define USART3_RSTSTA_SIZE 1
++#define USART3_STTBRK_OFFSET 9
++#define USART3_STTBRK_SIZE 1
++#define USART3_STPBRK_OFFSET 10
++#define USART3_STPBRK_SIZE 1
++#define USART3_STTTO_OFFSET 11
++#define USART3_STTTO_SIZE 1
++#define USART3_SENDA_OFFSET 12
++#define USART3_SENDA_SIZE 1
++#define USART3_RSTIT_OFFSET 13
++#define USART3_RSTIT_SIZE 1
++#define USART3_RSTNACK_OFFSET 14
++#define USART3_RSTNACK_SIZE 1
++#define USART3_RETTO_OFFSET 15
++#define USART3_RETTO_SIZE 1
++#define USART3_DTREN_OFFSET 16
++#define USART3_DTREN_SIZE 1
++#define USART3_DTRDIS_OFFSET 17
++#define USART3_DTRDIS_SIZE 1
++#define USART3_RTSEN_OFFSET 18
++#define USART3_RTSEN_SIZE 1
++#define USART3_RTSDIS_OFFSET 19
++#define USART3_RTSDIS_SIZE 1
++#define USART3_COMM_TX_OFFSET 30
++#define USART3_COMM_TX_SIZE 1
++#define USART3_COMM_RX_OFFSET 31
++#define USART3_COMM_RX_SIZE 1
++
++/* Bitfields in MR */
++#define USART3_USART_MODE_OFFSET 0
++#define USART3_USART_MODE_SIZE 4
++#define USART3_USCLKS_OFFSET 4
++#define USART3_USCLKS_SIZE 2
++#define USART3_CHRL_OFFSET 6
++#define USART3_CHRL_SIZE 2
++#define USART3_SYNC_OFFSET 8
++#define USART3_SYNC_SIZE 1
++#define USART3_PAR_OFFSET 9
++#define USART3_PAR_SIZE 3
++#define USART3_NBSTOP_OFFSET 12
++#define USART3_NBSTOP_SIZE 2
++#define USART3_CHMODE_OFFSET 14
++#define USART3_CHMODE_SIZE 2
++#define USART3_MSBF_OFFSET 16
++#define USART3_MSBF_SIZE 1
++#define USART3_MODE9_OFFSET 17
++#define USART3_MODE9_SIZE 1
++#define USART3_CLKO_OFFSET 18
++#define USART3_CLKO_SIZE 1
++#define USART3_OVER_OFFSET 19
++#define USART3_OVER_SIZE 1
++#define USART3_INACK_OFFSET 20
++#define USART3_INACK_SIZE 1
++#define USART3_DSNACK_OFFSET 21
++#define USART3_DSNACK_SIZE 1
++#define USART3_MAX_ITERATION_OFFSET 24
++#define USART3_MAX_ITERATION_SIZE 3
++#define USART3_FILTER_OFFSET 28
++#define USART3_FILTER_SIZE 1
++
++/* Bitfields in CSR */
++#define USART3_RXRDY_OFFSET 0
++#define USART3_RXRDY_SIZE 1
++#define USART3_TXRDY_OFFSET 1
++#define USART3_TXRDY_SIZE 1
++#define USART3_RXBRK_OFFSET 2
++#define USART3_RXBRK_SIZE 1
++#define USART3_ENDRX_OFFSET 3
++#define USART3_ENDRX_SIZE 1
++#define USART3_ENDTX_OFFSET 4
++#define USART3_ENDTX_SIZE 1
++#define USART3_OVRE_OFFSET 5
++#define USART3_OVRE_SIZE 1
++#define USART3_FRAME_OFFSET 6
++#define USART3_FRAME_SIZE 1
++#define USART3_PARE_OFFSET 7
++#define USART3_PARE_SIZE 1
++#define USART3_TIMEOUT_OFFSET 8
++#define USART3_TIMEOUT_SIZE 1
++#define USART3_TXEMPTY_OFFSET 9
++#define USART3_TXEMPTY_SIZE 1
++#define USART3_ITERATION_OFFSET 10
++#define USART3_ITERATION_SIZE 1
++#define USART3_TXBUFE_OFFSET 11
++#define USART3_TXBUFE_SIZE 1
++#define USART3_RXBUFF_OFFSET 12
++#define USART3_RXBUFF_SIZE 1
++#define USART3_NACK_OFFSET 13
++#define USART3_NACK_SIZE 1
++#define USART3_RIIC_OFFSET 16
++#define USART3_RIIC_SIZE 1
++#define USART3_DSRIC_OFFSET 17
++#define USART3_DSRIC_SIZE 1
++#define USART3_DCDIC_OFFSET 18
++#define USART3_DCDIC_SIZE 1
++#define USART3_CTSIC_OFFSET 19
++#define USART3_CTSIC_SIZE 1
++#define USART3_RI_OFFSET 20
++#define USART3_RI_SIZE 1
++#define USART3_DSR_OFFSET 21
++#define USART3_DSR_SIZE 1
++#define USART3_DCD_OFFSET 22
++#define USART3_DCD_SIZE 1
++#define USART3_CTS_OFFSET 23
++#define USART3_CTS_SIZE 1
++
++/* Bitfields in RHR */
++#define USART3_RXCHR_OFFSET 0
++#define USART3_RXCHR_SIZE 9
++
++/* Bitfields in THR */
++#define USART3_TXCHR_OFFSET 0
++#define USART3_TXCHR_SIZE 9
++
++/* Bitfields in BRGR */
++#define USART3_CD_OFFSET 0
++#define USART3_CD_SIZE 16
++
++/* Bitfields in RTOR */
++#define USART3_TO_OFFSET 0
++#define USART3_TO_SIZE 16
++
++/* Bitfields in TTGR */
++#define USART3_TG_OFFSET 0
++#define USART3_TG_SIZE 8
++
++/* Bitfields in FIDI */
++#define USART3_FI_DI_RATIO_OFFSET 0
++#define USART3_FI_DI_RATIO_SIZE 11
++
++/* Bitfields in NER */
++#define USART3_NB_ERRORS_OFFSET 0
++#define USART3_NB_ERRORS_SIZE 8
++
++/* Bitfields in XXR */
++#define USART3_XOFF_OFFSET 0
++#define USART3_XOFF_SIZE 8
++#define USART3_XON_OFFSET 8
++#define USART3_XON_SIZE 8
++
++/* Bitfields in IFR */
++#define USART3_IRDA_FILTER_OFFSET 0
++#define USART3_IRDA_FILTER_SIZE 8
++
++/* Bitfields in PTCR/PTSR (PDC) */
++#define USART3_RXTEN_OFFSET 0
++#define USART3_RXTEN_SIZE 1
++#define USART3_RXTDIS_OFFSET 1
++#define USART3_RXTDIS_SIZE 1
++#define USART3_TXTEN_OFFSET 8
++#define USART3_TXTEN_SIZE 1
++#define USART3_TXTDIS_OFFSET 9
++#define USART3_TXTDIS_SIZE 1
++
++/* Constants for USART_MODE */
++#define USART3_USART_MODE_NORMAL 0
++#define USART3_USART_MODE_RS485 1
++#define USART3_USART_MODE_HARDWARE 2
++#define USART3_USART_MODE_MODEM 3
++#define USART3_USART_MODE_ISO7816_T0 4
++#define USART3_USART_MODE_ISO7816_T1 6
++#define USART3_USART_MODE_IRDA 8
++
++/* Constants for USCLKS */
++#define USART3_USCLKS_MCK 0
++#define USART3_USCLKS_MCK_DIV 1
++#define USART3_USCLKS_SCK 3
++
++/* Constants for CHRL */
++#define USART3_CHRL_5 0
++#define USART3_CHRL_6 1
++#define USART3_CHRL_7 2
++#define USART3_CHRL_8 3
++
++/* Constants for PAR */
++#define USART3_PAR_EVEN 0
++#define USART3_PAR_ODD 1
++#define USART3_PAR_SPACE 2
++#define USART3_PAR_MARK 3
++#define USART3_PAR_NONE 4
++#define USART3_PAR_MULTI 6
++
++/* Constants for NBSTOP */
++#define USART3_NBSTOP_1 0
++#define USART3_NBSTOP_1_5 1
++#define USART3_NBSTOP_2 2
++
++/* Constants for CHMODE */
++#define USART3_CHMODE_NORMAL 0
++#define USART3_CHMODE_ECHO 1
++#define USART3_CHMODE_LOCAL_LOOP 2
++#define USART3_CHMODE_REMOTE_LOOP 3
++
++/* Constants for MSBF */
++#define USART3_MSBF_LSBF 0
++#define USART3_MSBF_MSBF 1
++
++/* Constants for OVER */
++#define USART3_OVER_X16 0
++#define USART3_OVER_X8 1
++
++/* Constants for CD */
++#define USART3_CD_DISABLE 0
++#define USART3_CD_BYPASS 1
++
++/* Constants for TO */
++#define USART3_TO_DISABLE 0
++
++/* Constants for TG */
++#define USART3_TG_DISABLE 0
++
++/* Constants for FI_DI_RATIO */
++#define USART3_FI_DI_RATIO_DISABLE 0
++
++/* Bit manipulation macros */
++#define USART3_BIT(name) \
++ (1 << USART3_##name##_OFFSET)
++#define USART3_BF(name,value) \
++ (((value) & ((1 << USART3_##name##_SIZE) - 1)) \
++ << USART3_##name##_OFFSET)
++#define USART3_BFEXT(name,value) \
++ (((value) >> USART3_##name##_OFFSET) \
++ & ((1 << USART3_##name##_SIZE) - 1))
++#define USART3_BFINS(name,value,old) \
++ (((old) & ~(((1 << USART3_##name##_SIZE) - 1) \
++ << USART3_##name##_OFFSET)) \
++ | USART3_BF(name,value))
++
++/* Register access macros */
++#define usart3_readl(port,reg) \
++ __raw_readl((port)->regs + USART3_##reg)
++#define usart3_writel(port,reg,value) \
++ __raw_writel((value), (port)->regs + USART3_##reg)
++
++#endif /* __ASM_AVR32_USART3_H__ */
diff --git a/packages/linux/linux-2.6.18/atmel-version.patch b/packages/linux/linux-2.6.18/atmel-version.patch
new file mode 100644
index 0000000000..e72ff55d27
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel-version.patch
@@ -0,0 +1,17 @@
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: linux-2.6.18-avr32/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/Makefile 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-avr32/Makefile 2006-09-20 13:30:33.000000000 +0200
+@@ -1,7 +1,7 @@
+ VERSION = 2
+ PATCHLEVEL = 6
+ SUBLEVEL = 18
+-EXTRAVERSION =
++EXTRAVERSION = -at0
+ NAME=Avast! A bilge rat!
+
+ # *DOCUMENTATION*
diff --git a/packages/linux/linux-2.6.18/atmel_spi-handle-rx-overrun.patch b/packages/linux/linux-2.6.18/atmel_spi-handle-rx-overrun.patch
new file mode 100644
index 0000000000..3bfbbee9aa
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel_spi-handle-rx-overrun.patch
@@ -0,0 +1,200 @@
+---
+ drivers/spi/atmel_spi.c | 140 ++++++++++++++++++++++++++++++++++--------------
+ 1 file changed, 100 insertions(+), 40 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/spi/atmel_spi.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/spi/atmel_spi.c 2007-01-15 15:35:38.000000000 +0100
++++ linux-2.6.18-avr32/drivers/spi/atmel_spi.c 2007-01-16 13:26:32.000000000 +0100
+@@ -156,7 +156,7 @@ static void atmel_spi_next_xfer(struct s
+ */
+ spi_writel(as, TNCR, 0);
+ spi_writel(as, RNCR, 0);
+- imr = SPI_BIT(ENDRX);
++ imr = SPI_BIT(ENDRX) | SPI_BIT(OVRES);
+
+ dev_dbg(&msg->spi->dev,
+ "start xfer %p: len %u tx %p/%08x rx %p/%08x imr %08x\n",
+@@ -209,6 +209,43 @@ static void atmel_spi_dma_map_xfer(struc
+ }
+ }
+
++static void atmel_spi_dma_unmap_xfer(struct spi_master *master,
++ struct spi_transfer *xfer)
++{
++ if (xfer->tx_dma != INVALID_DMA_ADDRESS)
++ dma_unmap_single(master->cdev.dev, xfer->tx_dma,
++ xfer->len, DMA_TO_DEVICE);
++ if (xfer->rx_dma != INVALID_DMA_ADDRESS)
++ dma_unmap_single(master->cdev.dev, xfer->rx_dma,
++ xfer->len, DMA_FROM_DEVICE);
++}
++
++static void atmel_spi_msg_done(struct spi_master *master,
++ struct atmel_spi *as,
++ struct spi_message *msg,
++ int status)
++{
++ cs_deactivate(msg->spi);
++ list_del(&msg->queue);
++ msg->status = status;
++
++ dev_dbg(master->cdev.dev,
++ "xfer complete: %u bytes transferred\n",
++ msg->actual_length);
++
++ spin_unlock(&as->lock);
++ msg->complete(msg->context);
++ spin_lock(&as->lock);
++
++ as->current_transfer = NULL;
++
++ /* continue; complete() may have queued requests */
++ if (list_empty(&as->queue) || as->stopping)
++ spi_writel(as, PTCR, SPI_BIT(RXTDIS) | SPI_BIT(TXTDIS));
++ else
++ atmel_spi_next_message(master);
++}
++
+ static irqreturn_t
+ atmel_spi_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+ {
+@@ -219,19 +256,71 @@ atmel_spi_interrupt(int irq, void *dev_i
+ u32 status, pending, imr;
+ int ret = IRQ_NONE;
+
++ spin_lock(&as->lock);
++
++ xfer = as->current_transfer;
++ msg = list_entry(as->queue.next, struct spi_message, queue);
++
+ imr = spi_readl(as, IMR);
+ status = spi_readl(as, SR);
+ pending = status & imr;
+ pr_debug("spi irq: stat %05x imr %05x pend %05x\n", status, imr, pending);
+
+- if (pending & (SPI_BIT(ENDTX) | SPI_BIT(ENDRX))) {
++ if (pending & SPI_BIT(OVRES)) {
++ int timeout;
++
+ ret = IRQ_HANDLED;
+
+- spi_writel(as, IDR, pending);
+- spin_lock(&as->lock);
++ spi_writel(as, IDR, (SPI_BIT(ENDTX) | SPI_BIT(ENDRX)
++ | SPI_BIT(OVRES)));
++
++ /*
++ * When we get an overrun, we disregard the current
++ * transfer. Data will not be copied back from any
++ * bounce buffer and msg->actual_len will not be
++ * updated with the last xfer.
++ *
++ * We will also not process any remaning transfers in
++ * the message.
++ *
++ * First, stop the transfer and unmap the DMA buffers.
++ */
++ spi_writel(as, PTCR, SPI_BIT(RXTDIS) | SPI_BIT(TXTDIS));
++ if (!msg->is_dma_mapped)
++ atmel_spi_dma_unmap_xfer(master, xfer);
++
++ /* REVISIT: udelay in irq is unfriendly */
++ if (xfer->delay_usecs)
++ udelay(xfer->delay_usecs);
+
+- xfer = as->current_transfer;
+- msg = list_entry(as->queue.next, struct spi_message, queue);
++ dev_warn(master->cdev.dev, "fifo overrun (%u/%u remaining)\n",
++ spi_readl(as, TCR), spi_readl(as, RCR));
++
++ /*
++ * Clean up DMA registers and make sure the data
++ * registers are empty.
++ */
++ spi_writel(as, RNCR, 0);
++ spi_writel(as, TNCR, 0);
++ spi_writel(as, RCR, 0);
++ spi_writel(as, TCR, 0);
++ for (timeout = 1000; timeout; timeout--)
++ if (spi_readl(as, SR) & SPI_BIT(TXEMPTY))
++ break;
++ if (!timeout)
++ dev_warn(master->cdev.dev,
++ "timeout waiting for TXEMPTY");
++ while (spi_readl(as, SR) & SPI_BIT(RDRF))
++ spi_readl(as, RDR);
++
++ /* Clear any overrun happening while cleaning up */
++ spi_readl(as, SR);
++
++ atmel_spi_msg_done(master, as, msg, -EIO);
++ } else if (pending & (SPI_BIT(ENDTX) | SPI_BIT(ENDRX))) {
++ ret = IRQ_HANDLED;
++
++ spi_writel(as, IDR, pending);
+
+ /*
+ * If the rx buffer wasn't aligned, we used a bounce
+@@ -254,46 +343,16 @@ pr_debug("spi irq: stat %05x imr %05x pe
+ if (as->remaining_bytes == 0) {
+ msg->actual_length += xfer->len;
+
+- if (!msg->is_dma_mapped) {
+- if (xfer->tx_dma != INVALID_DMA_ADDRESS)
+- dma_unmap_single(master->cdev.dev,
+- xfer->tx_dma,
+- xfer->len,
+- DMA_TO_DEVICE);
+- if (xfer->rx_dma != INVALID_DMA_ADDRESS)
+- dma_unmap_single(master->cdev.dev,
+- xfer->rx_dma,
+- xfer->len,
+- DMA_FROM_DEVICE);
+- }
++ if (!msg->is_dma_mapped)
++ atmel_spi_dma_unmap_xfer(master, xfer);
+
+ /* REVISIT: udelay in irq is unfriendly */
+ if (xfer->delay_usecs)
+ udelay(xfer->delay_usecs);
+
+ if (msg->transfers.prev == &xfer->transfer_list) {
+-
+ /* report completed message */
+- cs_deactivate(msg->spi);
+- list_del(&msg->queue);
+- msg->status = 0;
+-
+- dev_dbg(master->cdev.dev,
+- "xfer complete: %u bytes transferred\n",
+- msg->actual_length);
+-
+- spin_unlock(&as->lock);
+- msg->complete(msg->context);
+- spin_lock(&as->lock);
+-
+- as->current_transfer = NULL;
+-
+- /* continue; complete() may have queued requests */
+- if (list_empty(&as->queue) || as->stopping)
+- spi_writel(as, PTCR, SPI_BIT(RXTDIS)
+- | SPI_BIT(TXTDIS));
+- else
+- atmel_spi_next_message(master);
++ atmel_spi_msg_done(master, as, msg, 0);
+ } else {
+ if (xfer->cs_change) {
+ cs_deactivate(msg->spi);
+@@ -315,9 +374,10 @@ pr_debug("spi irq: stat %05x imr %05x pe
+ */
+ atmel_spi_next_xfer(master, msg);
+ }
+- spin_unlock(&as->lock);
+ }
+
++ spin_unlock(&as->lock);
++
+ return ret;
+ }
+
diff --git a/packages/linux/linux-2.6.18/atmel_spi-send-zeroes-when-tx_buf-is-not-set.patch b/packages/linux/linux-2.6.18/atmel_spi-send-zeroes-when-tx_buf-is-not-set.patch
new file mode 100644
index 0000000000..0cf703d3df
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atmel_spi-send-zeroes-when-tx_buf-is-not-set.patch
@@ -0,0 +1,48 @@
+From e9bce56d6d8913505049cde45d800bb69943f166 Mon Sep 17 00:00:00 2001
+From: Nicolas Ferre <nicolas.ferre@rfo.atmel.com>
+Date: Tue, 16 Jan 2007 15:15:36 +0100
+Subject: [ATMEL SPI] Send zeroes when tx_buf is not set
+
+send zeros when tx_buf is not set (according to the new spi
+specification by D.Brownell) cf.
+ http://lkml.org/lkml/2006/12/22/171
+ http://kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4b1badf5d9ddfc46ad075ca5bfc465972c85cc7c
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+---
+ drivers/spi/atmel_spi.c | 21 ++++++++++-----------
+ 1 file changed, 10 insertions(+), 11 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/spi/atmel_spi.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/spi/atmel_spi.c 2007-01-16 18:20:06.000000000 +0100
++++ linux-2.6.18-avr32/drivers/spi/atmel_spi.c 2007-01-16 18:20:57.000000000 +0100
+@@ -120,18 +120,17 @@ static void atmel_spi_next_xfer(struct s
+ len = BUFFER_SIZE;
+ }
+ if (tx_dma == INVALID_DMA_ADDRESS) {
+- if (xfer->tx_buf) {
+- tx_dma = as->buffer_dma;
+- if (len > BUFFER_SIZE)
+- len = BUFFER_SIZE;
++ tx_dma = as->buffer_dma;
++ if (len > BUFFER_SIZE)
++ len = BUFFER_SIZE;
++ if (xfer->tx_buf)
+ memcpy(as->buffer, xfer->tx_buf, len);
+- dma_sync_single_for_device(&as->pdev->dev,
+- as->buffer_dma, len,
+- DMA_TO_DEVICE);
+- } else {
+- /* Send undefined data; rx_dma is handy */
+- tx_dma = rx_dma;
+- }
++ else
++ /* no tx data: send zeros */
++ memset(as->buffer, 0, len);
++ dma_sync_single_for_device(&as->pdev->dev,
++ as->buffer_dma, len,
++ DMA_TO_DEVICE);
+ }
+
+ spi_writel(as, RPR, rx_dma);
diff --git a/packages/openpbx/openpbx.org-1.2_rc3/.mtn2git_empty b/packages/linux/linux-2.6.18/atngw100/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/openpbx/openpbx.org-1.2_rc3/.mtn2git_empty
+++ b/packages/linux/linux-2.6.18/atngw100/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.18/atngw100/defconfig b/packages/linux/linux-2.6.18/atngw100/defconfig
new file mode 100644
index 0000000000..b70408bc72
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atngw100/defconfig
@@ -0,0 +1,970 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18-at0
+# Wed Jan 10 10:13:31 2007
+#
+CONFIG_AVR32=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=1
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System Type and features
+#
+CONFIG_SUBARCH_AVR32B=y
+CONFIG_MMU=y
+CONFIG_PERFORMANCE_COUNTERS=y
+CONFIG_PLATFORM_AT32AP=y
+CONFIG_CPU_AT32AP7000=y
+# CONFIG_BOARD_ATSTK1000 is not set
+CONFIG_BOARD_ATNGW=y
+CONFIG_LOADER_U_BOOT=y
+
+#
+# Atmel AVR32 AP options
+#
+CONFIG_PIO_DEV=y
+CONFIG_LOAD_ADDRESS=0x10000000
+CONFIG_ENTRY_ADDRESS=0x90000000
+CONFIG_PHYS_OFFSET=0x10000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_HAVE_ARCH_BOOTMEM_NODE is not set
+# CONFIG_ARCH_HAVE_MEMORY_PRESENT is not set
+# CONFIG_NEED_NODE_MEMMAP_SIZE is not set
+CONFIG_ARCH_FLATMEM_ENABLE=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+# CONFIG_ARCH_SPARSEMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_OWNERSHIP_TRACE is not set
+CONFIG_DW_DMAC=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_CMDLINE=""
+
+#
+# Bus options
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_MULTIPLE_TABLES is not set
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+# CONFIG_IP_ROUTE_VERBOSE is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+CONFIG_NETFILTER_XTABLES=y
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
+# CONFIG_NETFILTER_XT_MATCH_HELPER 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_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=y
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+# CONFIG_IP_NF_FTP is not set
+# CONFIG_IP_NF_IRC is not set
+# CONFIG_IP_NF_NETBIOS_NS is not set
+# CONFIG_IP_NF_TFTP is not set
+# CONFIG_IP_NF_AMANDA is not set
+# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
+# CONFIG_IP_NF_SIP is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=y
+# CONFIG_IP_NF_MATCH_IPRANGE is not set
+# CONFIG_IP_NF_MATCH_TOS is not set
+# CONFIG_IP_NF_MATCH_RECENT is not set
+# CONFIG_IP_NF_MATCH_ECN is not set
+# CONFIG_IP_NF_MATCH_DSCP is not set
+# CONFIG_IP_NF_MATCH_AH is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+# CONFIG_IP_NF_MATCH_OWNER is not set
+# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
+# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_LOG=y
+# CONFIG_IP_NF_TARGET_ULOG is not set
+# CONFIG_IP_NF_TARGET_TCPMSS is not set
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+# CONFIG_IP_NF_TARGET_NETMAP is not set
+# CONFIG_IP_NF_TARGET_SAME is not set
+# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
+# CONFIG_IP_NF_MANGLE is not set
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x80000000
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_DATAFLASH=y
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_ATMELTWI=m
+CONFIG_I2C_ATMELTWI_BAUDRATE=100000
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_BITBANG is not set
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_HUSB2DEV=y
+CONFIG_USB_HUSB2DEV=m
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_ETH is not set
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+# CONFIG_USB_G_SERIAL is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_ATMELMCI=m
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_INOTIFY is not set
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=850
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+# CONFIG_PROC_KCORE is not set
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# 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=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_KPROBES is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
diff --git a/packages/linux/linux-2.6.18/atstk1000-add-platform-data-for-mmc.patch b/packages/linux/linux-2.6.18/atstk1000-add-platform-data-for-mmc.patch
new file mode 100644
index 0000000000..ed9e0f6c8c
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atstk1000-add-platform-data-for-mmc.patch
@@ -0,0 +1,25 @@
+Index: linux-2.6.18/arch/avr32/boards/atstk1000/atstk1002.c
+===================================================================
+--- linux-2.6.18.orig/arch/avr32/boards/atstk1000/atstk1002.c 2006-12-20 12:25:25.000000000 +0100
++++ linux-2.6.18/arch/avr32/boards/atstk1000/atstk1002.c 2006-12-20 12:26:09.000000000 +0100
+@@ -33,6 +33,11 @@
+ },
+ };
+
++static struct mmci_platform_data __initdata mmci0_data = {
++ .detect_pin = GPIO_PIO_NONE,
++ .wp_pin = GPIO_PIO_NONE,
++};
++
+ static int __init parse_tag_ethernet(struct tag *tag)
+ {
+ int i;
+@@ -72,7 +77,7 @@
+
+ spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
+
+- at32_add_device_mmci(0);
++ at32_add_device_mmci(0, &mmci0_data);
+ at32_add_device_spi(0);
+ at32_add_device_twi(0);
+ at32_add_device_usb(0);
diff --git a/packages/linux/linux-2.6.18/atstk1000-board-fix-fbmem-setup.patch b/packages/linux/linux-2.6.18/atstk1000-board-fix-fbmem-setup.patch
new file mode 100644
index 0000000000..185f7deb93
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atstk1000-board-fix-fbmem-setup.patch
@@ -0,0 +1,14 @@
+Index: linux-2.6.18/arch/avr32/boards/atstk1000/setup.c
+===================================================================
+--- linux-2.6.18.orig/arch/avr32/boards/atstk1000/setup.c 2007-01-11 11:30:42.000000000 +0100
++++ linux-2.6.18/arch/avr32/boards/atstk1000/setup.c 2007-01-11 13:27:00.000000000 +0100
+@@ -37,7 +37,8 @@
+
+ for_each_online_pgdat(pgdat) {
+ if (fbmem_start >= pgdat->bdata->node_boot_start
+- && fbmem_start <= pgdat->bdata->node_low_pfn)
++ && fbmem_start <= (pgdat->bdata->node_low_pfn
++ * PAGE_SIZE))
+ reserve_bootmem_node(pgdat, fbmem_start,
+ fbmem_size);
+ }
diff --git a/packages/linux/linux-2.6.18/atstk1000-instantiate-devices.patch b/packages/linux/linux-2.6.18/atstk1000-instantiate-devices.patch
new file mode 100644
index 0000000000..9de779bc14
--- /dev/null
+++ b/packages/linux/linux-2.6.18/atstk1000-instantiate-devices.patch
@@ -0,0 +1,103 @@
+---
+ arch/avr32/boards/atstk1000/Makefile | 2 +-
+ arch/avr32/boards/atstk1000/atstk1002.c | 24 +++++++++++++++++++++++-
+ arch/avr32/boards/atstk1000/spi.c | 27 ---------------------------
+ 3 files changed, 24 insertions(+), 29 deletions(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/boards/atstk1000/atstk1002.c 2006-11-29 16:31:03.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c 2006-11-29 16:45:43.000000000 +0100
+@@ -7,12 +7,15 @@
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
++#include <linux/device.h>
+ #include <linux/init.h>
+ #include <linux/kernel.h>
+ #include <linux/string.h>
+ #include <linux/types.h>
++#include <linux/spi/spi.h>
+
+ #include <asm/setup.h>
++#include <asm/arch/at32ap7000.h>
+ #include <asm/arch/board.h>
+ #include <asm/arch/init.h>
+
+@@ -20,6 +23,16 @@ static struct eth_platform_data __initda
+
+ extern struct lcdc_platform_data atstk1000_fb0_data;
+
++static struct spi_board_info spi_board_info[] __initdata = {
++ {
++ .modalias = "ltv350qv",
++ .controller_data = (void *)GPIO_PIN_PA(4),
++ .max_speed_hz = 16000000,
++ .bus_num = 0,
++ .chip_select = 1,
++ },
++};
++
+ static int __init parse_tag_ethernet(struct tag *tag)
+ {
+ int i;
+@@ -54,9 +67,18 @@ static int __init atstk1002_init(void)
+ at32_add_device_usart(2); /* /dev/ttyS1 */
+ at32_add_device_usart(3); /* /dev/ttyS2 */
+
+- at32_add_device_eth(0, &eth0_data);
++ if (eth_data[0].valid)
++ at32_add_device_eth(0, &eth_data[0]);
++
++ spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
++
++ at32_add_device_mmci(0);
+ at32_add_device_spi(0);
++ at32_add_device_twi(0);
++ at32_add_device_usb(0);
+ at32_add_device_lcdc(0, &atstk1000_fb0_data);
++ at32_add_device_dac(0);
++ at32_add_device_at73c213(0);
+
+ return 0;
+ }
+Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/boards/atstk1000/Makefile 2006-11-29 16:21:05.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/Makefile 2006-11-29 16:45:07.000000000 +0100
+@@ -1,2 +1,2 @@
+-obj-y += setup.o spi.o flash.o
++obj-y += setup.o flash.o
+ obj-$(CONFIG_BOARD_ATSTK1002) += atstk1002.o
+Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/spi.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/boards/atstk1000/spi.c 2006-11-29 16:21:05.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,27 +0,0 @@
+-/*
+- * ATSTK1000 SPI devices
+- *
+- * Copyright (C) 2005 Atmel Norway
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 2 as
+- * published by the Free Software Foundation.
+- */
+-#include <linux/device.h>
+-#include <linux/spi/spi.h>
+-
+-static struct spi_board_info spi_board_info[] __initdata = {
+- {
+- .modalias = "ltv350qv",
+- .max_speed_hz = 16000000,
+- .bus_num = 0,
+- .chip_select = 1,
+- },
+-};
+-
+-static int board_init_spi(void)
+-{
+- spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
+- return 0;
+-}
+-arch_initcall(board_init_spi);
diff --git a/packages/linux/linux-2.6.18/avr32-arch-neutral-gpio-api.patch b/packages/linux/linux-2.6.18/avr32-arch-neutral-gpio-api.patch
new file mode 100644
index 0000000000..049d5e3a94
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-arch-neutral-gpio-api.patch
@@ -0,0 +1,598 @@
+From 05ac6cbfecf9e9b0ab46ba5f30eec8ea91b2987c Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Mon, 13 Nov 2006 10:23:15 +0100
+Subject: [AVR32] Implement arch-neutral GPIO API
+
+AVR32 implementation of the arch-neutral GPIO API described by
+Documentation/gpio.txt.
+
+This also contains a few related changes to the irq handling and
+pin configuration code, to make this actually usable.
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+---
+ arch/avr32/mach-at32ap/at32ap7000.c | 144 ++++++++++------------
+ arch/avr32/mach-at32ap/pio.c | 186 +++++++++++++++++++++++++++--
+ include/asm-avr32/arch-at32ap/at32ap7000.h | 26 ++++
+ include/asm-avr32/arch-at32ap/gpio.h | 39 ++++++
+ include/asm-avr32/arch-at32ap/irq.h | 11 +
+ include/asm-avr32/arch-at32ap/portmux.h | 16 --
+ include/asm-avr32/gpio.h | 6
+ include/asm-avr32/irq.h | 8 -
+ 8 files changed, 333 insertions(+), 103 deletions(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-29 16:21:12.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c 2006-11-29 16:22:14.000000000 +0100
+@@ -11,8 +11,9 @@
+
+ #include <asm/io.h>
+
++#include <asm/arch/at32ap7000.h>
+ #include <asm/arch/board.h>
+-#include <asm/arch/portmux.h>
++#include <asm/arch/gpio.h>
+ #include <asm/arch/sm.h>
+
+ #include "clock.h"
+@@ -67,17 +68,8 @@ static struct clk devname##_##_name = {
+ .index = _index, \
+ }
+
+-enum {
+- PIOA,
+- PIOB,
+- PIOC,
+- PIOD,
+-};
+-
+-enum {
+- FUNC_A,
+- FUNC_B,
+-};
++#define select_peripheral(pin, periph, pullup) \
++ at32_select_periph(GPIO_PIN_##pin, GPIO_##periph, pullup)
+
+ unsigned long at32ap7000_osc_rates[3] = {
+ [0] = 32768,
+@@ -553,26 +545,26 @@ DEV_CLK(usart, usart3, pba, 6);
+
+ static inline void configure_usart0_pins(void)
+ {
+- portmux_set_func(PIOA, 8, FUNC_B); /* RXD */
+- portmux_set_func(PIOA, 9, FUNC_B); /* TXD */
++ select_peripheral(PA(8), PERIPH_B, 0); /* RXD */
++ select_peripheral(PA(9), PERIPH_B, 0); /* TXD */
+ }
+
+ static inline void configure_usart1_pins(void)
+ {
+- portmux_set_func(PIOA, 17, FUNC_A); /* RXD */
+- portmux_set_func(PIOA, 18, FUNC_A); /* TXD */
++ select_peripheral(PA(17), PERIPH_A, 0); /* RXD */
++ select_peripheral(PA(18), PERIPH_A, 0); /* TXD */
+ }
+
+ static inline void configure_usart2_pins(void)
+ {
+- portmux_set_func(PIOB, 26, FUNC_B); /* RXD */
+- portmux_set_func(PIOB, 27, FUNC_B); /* TXD */
++ select_peripheral(PB(26), PERIPH_B, 0); /* RXD */
++ select_peripheral(PB(27), PERIPH_B, 0); /* TXD */
+ }
+
+ static inline void configure_usart3_pins(void)
+ {
+- portmux_set_func(PIOB, 18, FUNC_B); /* RXD */
+- portmux_set_func(PIOB, 17, FUNC_B); /* TXD */
++ select_peripheral(PB(18), PERIPH_B, 0); /* RXD */
++ select_peripheral(PB(17), PERIPH_B, 0); /* TXD */
+ }
+
+ static struct platform_device *setup_usart(unsigned int id)
+@@ -644,27 +636,27 @@ at32_add_device_eth(unsigned int id, str
+ case 0:
+ pdev = &macb0_device;
+
+- portmux_set_func(PIOC, 3, FUNC_A); /* TXD0 */
+- portmux_set_func(PIOC, 4, FUNC_A); /* TXD1 */
+- portmux_set_func(PIOC, 7, FUNC_A); /* TXEN */
+- portmux_set_func(PIOC, 8, FUNC_A); /* TXCK */
+- portmux_set_func(PIOC, 9, FUNC_A); /* RXD0 */
+- portmux_set_func(PIOC, 10, FUNC_A); /* RXD1 */
+- portmux_set_func(PIOC, 13, FUNC_A); /* RXER */
+- portmux_set_func(PIOC, 15, FUNC_A); /* RXDV */
+- portmux_set_func(PIOC, 16, FUNC_A); /* MDC */
+- portmux_set_func(PIOC, 17, FUNC_A); /* MDIO */
++ select_peripheral(PC(3), PERIPH_A, 0); /* TXD0 */
++ select_peripheral(PC(4), PERIPH_A, 0); /* TXD1 */
++ select_peripheral(PC(7), PERIPH_A, 0); /* TXEN */
++ select_peripheral(PC(8), PERIPH_A, 0); /* TXCK */
++ select_peripheral(PC(9), PERIPH_A, 0); /* RXD0 */
++ select_peripheral(PC(10), PERIPH_A, 0); /* RXD1 */
++ select_peripheral(PC(13), PERIPH_A, 0); /* RXER */
++ select_peripheral(PC(15), PERIPH_A, 0); /* RXDV */
++ select_peripheral(PC(16), PERIPH_A, 0); /* MDC */
++ select_peripheral(PC(17), PERIPH_A, 0); /* MDIO */
+
+ if (!data->is_rmii) {
+- portmux_set_func(PIOC, 0, FUNC_A); /* COL */
+- portmux_set_func(PIOC, 1, FUNC_A); /* CRS */
+- portmux_set_func(PIOC, 2, FUNC_A); /* TXER */
+- portmux_set_func(PIOC, 5, FUNC_A); /* TXD2 */
+- portmux_set_func(PIOC, 6, FUNC_A); /* TXD3 */
+- portmux_set_func(PIOC, 11, FUNC_A); /* RXD2 */
+- portmux_set_func(PIOC, 12, FUNC_A); /* RXD3 */
+- portmux_set_func(PIOC, 14, FUNC_A); /* RXCK */
+- portmux_set_func(PIOC, 18, FUNC_A); /* SPD */
++ select_peripheral(PC(0), PERIPH_A, 0); /* COL */
++ select_peripheral(PC(1), PERIPH_A, 0); /* CRS */
++ select_peripheral(PC(2), PERIPH_A, 0); /* TXER */
++ select_peripheral(PC(5), PERIPH_A, 0); /* TXD2 */
++ select_peripheral(PC(6), PERIPH_A, 0); /* TXD3 */
++ select_peripheral(PC(11), PERIPH_A, 0); /* RXD2 */
++ select_peripheral(PC(12), PERIPH_A, 0); /* RXD3 */
++ select_peripheral(PC(14), PERIPH_A, 0); /* RXCK */
++ select_peripheral(PC(18), PERIPH_A, 0); /* SPD */
+ }
+ break;
+
+@@ -695,12 +687,12 @@ struct platform_device *__init at32_add_
+ switch (id) {
+ case 0:
+ pdev = &spi0_device;
+- portmux_set_func(PIOA, 0, FUNC_A); /* MISO */
+- portmux_set_func(PIOA, 1, FUNC_A); /* MOSI */
+- portmux_set_func(PIOA, 2, FUNC_A); /* SCK */
+- portmux_set_func(PIOA, 3, FUNC_A); /* NPCS0 */
+- portmux_set_func(PIOA, 4, FUNC_A); /* NPCS1 */
+- portmux_set_func(PIOA, 5, FUNC_A); /* NPCS2 */
++ select_peripheral(PA(0), PERIPH_A, 0); /* MISO */
++ select_peripheral(PA(1), PERIPH_A, 0); /* MOSI */
++ select_peripheral(PA(2), PERIPH_A, 0); /* SCK */
++ select_peripheral(PA(3), PERIPH_A, 0); /* NPCS0 */
++ select_peripheral(PA(4), PERIPH_A, 0); /* NPCS1 */
++ select_peripheral(PA(5), PERIPH_A, 0); /* NPCS2 */
+ break;
+
+ default:
+@@ -743,37 +735,37 @@ at32_add_device_lcdc(unsigned int id, st
+ switch (id) {
+ case 0:
+ pdev = &lcdc0_device;
+- portmux_set_func(PIOC, 19, FUNC_A); /* CC */
+- portmux_set_func(PIOC, 20, FUNC_A); /* HSYNC */
+- portmux_set_func(PIOC, 21, FUNC_A); /* PCLK */
+- portmux_set_func(PIOC, 22, FUNC_A); /* VSYNC */
+- portmux_set_func(PIOC, 23, FUNC_A); /* DVAL */
+- portmux_set_func(PIOC, 24, FUNC_A); /* MODE */
+- portmux_set_func(PIOC, 25, FUNC_A); /* PWR */
+- portmux_set_func(PIOC, 26, FUNC_A); /* DATA0 */
+- portmux_set_func(PIOC, 27, FUNC_A); /* DATA1 */
+- portmux_set_func(PIOC, 28, FUNC_A); /* DATA2 */
+- portmux_set_func(PIOC, 29, FUNC_A); /* DATA3 */
+- portmux_set_func(PIOC, 30, FUNC_A); /* DATA4 */
+- portmux_set_func(PIOC, 31, FUNC_A); /* DATA5 */
+- portmux_set_func(PIOD, 0, FUNC_A); /* DATA6 */
+- portmux_set_func(PIOD, 1, FUNC_A); /* DATA7 */
+- portmux_set_func(PIOD, 2, FUNC_A); /* DATA8 */
+- portmux_set_func(PIOD, 3, FUNC_A); /* DATA9 */
+- portmux_set_func(PIOD, 4, FUNC_A); /* DATA10 */
+- portmux_set_func(PIOD, 5, FUNC_A); /* DATA11 */
+- portmux_set_func(PIOD, 6, FUNC_A); /* DATA12 */
+- portmux_set_func(PIOD, 7, FUNC_A); /* DATA13 */
+- portmux_set_func(PIOD, 8, FUNC_A); /* DATA14 */
+- portmux_set_func(PIOD, 9, FUNC_A); /* DATA15 */
+- portmux_set_func(PIOD, 10, FUNC_A); /* DATA16 */
+- portmux_set_func(PIOD, 11, FUNC_A); /* DATA17 */
+- portmux_set_func(PIOD, 12, FUNC_A); /* DATA18 */
+- portmux_set_func(PIOD, 13, FUNC_A); /* DATA19 */
+- portmux_set_func(PIOD, 14, FUNC_A); /* DATA20 */
+- portmux_set_func(PIOD, 15, FUNC_A); /* DATA21 */
+- portmux_set_func(PIOD, 16, FUNC_A); /* DATA22 */
+- portmux_set_func(PIOD, 17, FUNC_A); /* DATA23 */
++ select_peripheral(PC(19), PERIPH_A, 0); /* CC */
++ select_peripheral(PC(20), PERIPH_A, 0); /* HSYNC */
++ select_peripheral(PC(21), PERIPH_A, 0); /* PCLK */
++ select_peripheral(PC(22), PERIPH_A, 0); /* VSYNC */
++ select_peripheral(PC(23), PERIPH_A, 0); /* DVAL */
++ select_peripheral(PC(24), PERIPH_A, 0); /* MODE */
++ select_peripheral(PC(25), PERIPH_A, 0); /* PWR */
++ select_peripheral(PC(26), PERIPH_A, 0); /* DATA0 */
++ select_peripheral(PC(27), PERIPH_A, 0); /* DATA1 */
++ select_peripheral(PC(28), PERIPH_A, 0); /* DATA2 */
++ select_peripheral(PC(29), PERIPH_A, 0); /* DATA3 */
++ select_peripheral(PC(30), PERIPH_A, 0); /* DATA4 */
++ select_peripheral(PC(31), PERIPH_A, 0); /* DATA5 */
++ select_peripheral(PD(0), PERIPH_A, 0); /* DATA6 */
++ select_peripheral(PD(1), PERIPH_A, 0); /* DATA7 */
++ select_peripheral(PD(2), PERIPH_A, 0); /* DATA8 */
++ select_peripheral(PD(3), PERIPH_A, 0); /* DATA9 */
++ select_peripheral(PD(4), PERIPH_A, 0); /* DATA10 */
++ select_peripheral(PD(5), PERIPH_A, 0); /* DATA11 */
++ select_peripheral(PD(6), PERIPH_A, 0); /* DATA12 */
++ select_peripheral(PD(7), PERIPH_A, 0); /* DATA13 */
++ select_peripheral(PD(8), PERIPH_A, 0); /* DATA14 */
++ select_peripheral(PD(9), PERIPH_A, 0); /* DATA15 */
++ select_peripheral(PD(10), PERIPH_A, 0); /* DATA16 */
++ select_peripheral(PD(11), PERIPH_A, 0); /* DATA17 */
++ select_peripheral(PD(12), PERIPH_A, 0); /* DATA18 */
++ select_peripheral(PD(13), PERIPH_A, 0); /* DATA19 */
++ select_peripheral(PD(14), PERIPH_A, 0); /* DATA20 */
++ select_peripheral(PD(15), PERIPH_A, 0); /* DATA21 */
++ select_peripheral(PD(16), PERIPH_A, 0); /* DATA22 */
++ select_peripheral(PD(17), PERIPH_A, 0); /* DATA23 */
+
+ clk_set_parent(&lcdc0_pixclk, &pll0);
+ clk_set_rate(&lcdc0_pixclk, clk_get_rate(&pll0));
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-29 16:21:12.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-29 16:22:14.000000000 +0100
+@@ -13,10 +13,9 @@
+ #include <linux/fs.h>
+ #include <linux/platform_device.h>
+
++#include <asm/gpio.h>
+ #include <asm/io.h>
+
+-#include <asm/arch/portmux.h>
+-
+ #include "pio.h"
+
+ #define MAX_NR_PIO_DEVICES 8
+@@ -25,28 +24,191 @@ struct pio_device {
+ void __iomem *regs;
+ const struct platform_device *pdev;
+ struct clk *clk;
+- u32 alloc_mask;
++ u32 pinmux_mask;
++ u32 gpio_mask;
+ char name[32];
+ };
+
+ static struct pio_device pio_dev[MAX_NR_PIO_DEVICES];
+
+-void portmux_set_func(unsigned int portmux_id, unsigned int pin_id,
+- unsigned int function_id)
++static struct pio_device *gpio_to_pio(unsigned int gpio)
+ {
+ struct pio_device *pio;
+- u32 mask = 1 << pin_id;
++ unsigned int index;
++
++ index = gpio >> 5;
++ if (index >= MAX_NR_PIO_DEVICES)
++ return NULL;
++ pio = &pio_dev[index];
++ if (!pio->regs)
++ return NULL;
++
++ return pio;
++}
++
++/* Pin multiplexing API */
+
+- BUG_ON(portmux_id >= MAX_NR_PIO_DEVICES);
++void __init at32_select_periph(unsigned int pin, unsigned int periph,
++ int use_pullup)
++{
++ struct pio_device *pio;
++ unsigned int pin_index = pin & 0x1f;
++ u32 mask = 1 << pin_index;
++
++ pio = gpio_to_pio(pin);
++ if (unlikely(!pio)) {
++ printk("pio: invalid pin %u\n", pin);
++ goto fail;
++ }
+
+- pio = &pio_dev[portmux_id];
++ if (unlikely(test_and_set_bit(pin_index, &pio->pinmux_mask))) {
++ printk("%s: pin %u is busy\n", pio->name, pin_index);
++ goto fail;
++ }
+
+- if (function_id)
++ pio_writel(pio, PUER, mask);
++ if (periph)
+ pio_writel(pio, BSR, mask);
+ else
+ pio_writel(pio, ASR, mask);
++
+ pio_writel(pio, PDR, mask);
++ if (!use_pullup)
++ pio_writel(pio, PUDR, mask);
++
++ return;
++
++fail:
++ dump_stack();
++}
++
++void __init at32_select_gpio(unsigned int pin, int enable_output,
++ int use_pullup)
++{
++ struct pio_device *pio;
++ unsigned int pin_index = pin & 0x1f;
++ u32 mask = 1 << pin_index;
++
++ pio = gpio_to_pio(pin);
++ if (unlikely(!pio)) {
++ printk("pio: invalid pin %u\n", pin);
++ goto fail;
++ }
++
++ if (unlikely(test_and_set_bit(pin_index, &pio->pinmux_mask))) {
++ printk("%s: pin %u is busy\n", pio->name, pin_index);
++ goto fail;
++ }
++
++ pio_writel(pio, PUER, mask);
++ if (enable_output)
++ pio_writel(pio, OER, mask);
++ else
++ pio_writel(pio, ODR, mask);
++
++ pio_writel(pio, PER, mask);
++ if (!use_pullup)
++ pio_writel(pio, PUDR, mask);
++
++ /* It's now allowed to use request_gpio on this pin */
++ clear_bit(pin_index, &pio->gpio_mask);
++
++ return;
++
++fail:
++ dump_stack();
++}
++
++/* GPIO API */
++
++int gpio_request(unsigned int gpio, const char *label)
++{
++ struct pio_device *pio;
++ unsigned int pin;
++
++ pio = gpio_to_pio(gpio);
++ if (!pio)
++ return -ENODEV;
++
++ pin = gpio & 0x1f;
++ if (test_and_set_bit(pin, &pio->gpio_mask))
++ return -EBUSY;
++
++ return 0;
+ }
++EXPORT_SYMBOL(gpio_request);
++
++void gpio_free(unsigned int gpio)
++{
++ struct pio_device *pio;
++ unsigned int pin;
++
++ pio = gpio_to_pio(gpio);
++ if (!pio) {
++ printk(KERN_ERR
++ "gpio: attempted to free invalid pin %u\n", gpio);
++ return;
++ }
++
++ pin = gpio & 0x1f;
++ if (!test_and_clear_bit(pin, &pio->gpio_mask))
++ printk(KERN_ERR "gpio: freeing already-free pin %s[%u]\n",
++ pio->name, pin);
++}
++EXPORT_SYMBOL(gpio_free);
++
++int gpio_direction_input(unsigned int gpio)
++{
++ struct pio_device *pio;
++ unsigned int pin;
++
++ pio = gpio_to_pio(gpio);
++ if (!pio)
++ return -ENODEV;
++
++ pin = gpio & 0x1f;
++ pio_writel(pio, ODR, 1 << pin);
++
++ return 0;
++}
++EXPORT_SYMBOL(gpio_direction_input);
++
++int gpio_direction_output(unsigned int gpio)
++{
++ struct pio_device *pio;
++ unsigned int pin;
++
++ pio = gpio_to_pio(gpio);
++ if (!pio)
++ return -ENODEV;
++
++ pin = gpio & 0x1f;
++ pio_writel(pio, OER, 1 << pin);
++
++ return 0;
++}
++EXPORT_SYMBOL(gpio_direction_output);
++
++int gpio_get_value(unsigned int gpio)
++{
++ struct pio_device *pio = &pio_dev[gpio >> 5];
++
++ return (pio_readl(pio, PDSR) >> (gpio & 0x1f)) & 1;
++}
++EXPORT_SYMBOL(gpio_get_value);
++
++void gpio_set_value(unsigned int gpio, int value)
++{
++ struct pio_device *pio = &pio_dev[gpio >> 5];
++ u32 mask;
++
++ mask = 1 << (gpio & 0x1f);
++ if (value)
++ pio_writel(pio, SODR, mask);
++ else
++ pio_writel(pio, CODR, mask);
++}
++EXPORT_SYMBOL(gpio_set_value);
+
+ static int __init pio_probe(struct platform_device *pdev)
+ {
+@@ -113,6 +275,12 @@ void __init at32_init_pio(struct platfor
+ pio->pdev = pdev;
+ pio->regs = ioremap(regs->start, regs->end - regs->start + 1);
+
++ /*
++ * request_gpio() is only valid for pins that have been
++ * configured as GPIO.
++ */
++ pio->gpio_mask = ~0UL;
++
+ pio_writel(pio, ODR, ~0UL);
+ pio_writel(pio, PER, ~0UL);
+ }
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at32ap7000.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at32ap7000.h 2006-11-29 16:22:14.000000000 +0100
+@@ -0,0 +1,26 @@
++#ifndef __ASM_ARCH_AT32AP7000_H
++#define __ASM_ARCH_AT32AP7000_H
++
++#define GPIO_PERIPH_A 0
++#define GPIO_PERIPH_B 1
++
++#define NR_GPIO_CONTROLLERS 4
++
++/*
++ * Pin numbers identifying specific GPIO pins on the chip. They can
++ * also be converted to IRQ numbers by passing them through
++ * gpio_to_irq().
++ */
++#define GPIO_PIOA_BASE (0)
++#define GPIO_PIOB_BASE (GPIO_PIOA_BASE + 32)
++#define GPIO_PIOC_BASE (GPIO_PIOB_BASE + 32)
++#define GPIO_PIOD_BASE (GPIO_PIOC_BASE + 32)
++#define GPIO_PIOE_BASE (GPIO_PIOD_BASE + 32)
++
++#define GPIO_PIN_PA(N) (GPIO_PIOA_BASE + (N))
++#define GPIO_PIN_PB(N) (GPIO_PIOB_BASE + (N))
++#define GPIO_PIN_PC(N) (GPIO_PIOC_BASE + (N))
++#define GPIO_PIN_PD(N) (GPIO_PIOD_BASE + (N))
++#define GPIO_PIN_PE(N) (GPIO_PIOE_BASE + (N))
++
++#endif /* __ASM_ARCH_AT32AP7000_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h 2006-11-29 16:22:14.000000000 +0100
+@@ -0,0 +1,39 @@
++#ifndef __ASM_AVR32_GPIO_H
++#define __ASM_AVR32_GPIO_H
++
++#include <linux/compiler.h>
++#include <asm/irq.h>
++
++/*
++ * Set up pin multiplexing, called from board init only.
++ *
++ * The following flags determine the initial state of the pin.
++ */
++#define AT32_GPIOF_PULLUP 0x00000001 /* Enable pull-up */
++#define AT32_GPIOF_OUTPUT 0x00000002 /* Enable output driver */
++#define AT32_GPIOF_HIGH 0x00000004 /* Set output high */
++
++void at32_select_periph(unsigned int pin, unsigned int periph,
++ unsigned long flags);
++void at32_select_gpio(unsigned int pin, unsigned long flags);
++
++/* Arch-neutral GPIO API */
++int __must_check gpio_request(unsigned int gpio, const char *label);
++void gpio_free(unsigned int gpio);
++
++int gpio_direction_input(unsigned int gpio);
++int gpio_direction_output(unsigned int gpio);
++int gpio_get_value(unsigned int gpio);
++void gpio_set_value(unsigned int gpio, int value);
++
++static inline int gpio_to_irq(unsigned int gpio)
++{
++ return gpio + GPIO_IRQ_BASE;
++}
++
++static inline int irq_to_gpio(unsigned int irq)
++{
++ return irq - GPIO_IRQ_BASE;
++}
++
++#endif /* __ASM_AVR32_GPIO_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/irq.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/irq.h 2006-11-29 16:22:14.000000000 +0100
+@@ -0,0 +1,11 @@
++#ifndef __ASM_AVR32_ARCH_IRQ_H
++#define __ASM_AVR32_ARCH_IRQ_H
++
++#define EIM_IRQ_BASE NR_INTERNAL_IRQS
++#define NR_EIM_IRQS 32
++#define GPIO_IRQ_BASE (EIM_IRQ_BASE + NR_EIM_IRQS)
++#define NR_GPIO_IRQS (4 * 32)
++
++#define NR_IRQS (GPIO_IRQ_BASE + NR_GPIO_IRQS)
++
++#endif /* __ASM_AVR32_ARCH_IRQ_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/portmux.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/portmux.h 2006-11-29 16:21:12.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,16 +0,0 @@
+-/*
+- * AT32 portmux interface.
+- *
+- * Copyright (C) 2006 Atmel Corporation
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 2 as
+- * published by the Free Software Foundation.
+- */
+-#ifndef __ASM_AVR32_AT32_PORTMUX_H__
+-#define __ASM_AVR32_AT32_PORTMUX_H__
+-
+-void portmux_set_func(unsigned int portmux_id, unsigned int pin_id,
+- unsigned int function_id);
+-
+-#endif /* __ASM_AVR32_AT32_PORTMUX_H__ */
+Index: linux-2.6.18-avr32/include/asm-avr32/gpio.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/gpio.h 2006-11-29 16:22:14.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_GPIO_H
++#define __ASM_AVR32_GPIO_H
++
++#include <asm/arch/gpio.h>
++
++#endif /* __ASM_AVR32_GPIO_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/irq.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/asm-avr32/irq.h 2006-11-29 16:21:12.000000000 +0100
++++ linux-2.6.18-avr32/include/asm-avr32/irq.h 2006-11-29 16:22:14.000000000 +0100
+@@ -2,8 +2,12 @@
+ #define __ASM_AVR32_IRQ_H
+
+ #define NR_INTERNAL_IRQS 64
+-#define NR_EXTERNAL_IRQS 64
+-#define NR_IRQS (NR_INTERNAL_IRQS + NR_EXTERNAL_IRQS)
++
++#include <asm/arch/irq.h>
++
++#ifndef NR_IRQS
++#define NR_IRQS (NR_INTERNAL_IRQS)
++#endif
+
+ #define irq_canonicalize(i) (i)
+
diff --git a/packages/linux/linux-2.6.18/avr32-arch.patch b/packages/linux/linux-2.6.18/avr32-arch.patch
new file mode 100644
index 0000000000..76e2b9f492
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-arch.patch
@@ -0,0 +1,19628 @@
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+This adds support for the Atmel AVR32 architecture as well as the AT32AP7000
+CPU and the AT32STK1000 development board.
+
+AVR32 is a new high-performance 32-bit RISC microprocessor core, designed for
+cost-sensitive embedded applications, with particular emphasis on low power
+consumption and high code density. The AVR32 architecture is not binary
+compatible with earlier 8-bit AVR architectures.
+
+The AVR32 architecture, including the instruction set, is described by the
+AVR32 Architecture Manual, available from
+
+http://www.atmel.com/dyn/resources/prod_documents/doc32000.pdf
+
+The Atmel AT32AP7000 is the first CPU implementing the AVR32 architecture. It
+features a 7-stage pipeline, 16KB instruction and data caches and a full
+Memory Management Unit. It also comes with a large set of integrated
+peripherals, many of which are shared with the AT91 ARM-based controllers from
+Atmel.
+
+Full data sheet is available from
+
+http://www.atmel.com/dyn/resources/prod_documents/doc32003.pdf
+
+while the CPU core implementation including caches and MMU is documented by
+the AVR32 AP Technical Reference, available from
+
+http://www.atmel.com/dyn/resources/prod_documents/doc32001.pdf
+
+Information about the AT32STK1000 development board can be found at
+
+http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3918
+
+including a BSP CD image with an earlier version of this patch, development
+tools (binaries and source/patches) and a root filesystem image suitable for
+booting from SD card.
+
+Alternatively, there's a preliminary "getting started" guide available at
+http://avr32linux.org/twiki/bin/view/Main/GettingStarted which provides links
+to the sources and patches you will need in order to set up a cross-compiling
+environment for avr32-linux.
+
+This patch, as well as the other patches included with the BSP and the
+toolchain patches, is actively supported by Atmel Corporation.
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+---
+
+ MAINTAINERS | 17
+ arch/avr32/Kconfig | 199 +++++
+ arch/avr32/Kconfig.debug | 19
+ arch/avr32/Makefile | 89 ++
+ arch/avr32/boards/atstk1000/Makefile | 2
+ arch/avr32/boards/atstk1000/atstk1002.c | 37
+ arch/avr32/boards/atstk1000/flash.c | 95 ++
+ arch/avr32/boards/atstk1000/setup.c | 50 +
+ arch/avr32/boards/atstk1000/spi.c | 27
+ arch/avr32/boot/images/Makefile | 60 +
+ arch/avr32/boot/u-boot/Makefile | 3
+ arch/avr32/boot/u-boot/empty.S | 1
+ arch/avr32/boot/u-boot/head.S | 60 +
+ arch/avr32/configs/atstk1002_defconfig | 754 +++++++++++++++++++
+ arch/avr32/kernel/Makefile | 18
+ arch/avr32/kernel/asm-offsets.c | 25
+ arch/avr32/kernel/avr32_ksyms.c | 64 +
+ arch/avr32/kernel/cpu.c | 327 ++++++++
+ arch/avr32/kernel/entry-avr32b.S | 678 +++++++++++++++++
+ arch/avr32/kernel/head.S | 42 +
+ arch/avr32/kernel/init_task.c | 38
+ arch/avr32/kernel/irq.c | 71 +
+ arch/avr32/kernel/kprobes.c | 270 +++++++
+ arch/avr32/kernel/module.c | 324 ++++++++
+ arch/avr32/kernel/process.c | 283 +++++++
+ arch/avr32/kernel/ptrace.c | 371 +++++++++
+ arch/avr32/kernel/semaphore.c | 148 +++
+ arch/avr32/kernel/setup.c | 335 ++++++++
+ arch/avr32/kernel/signal.c | 328 ++++++++
+ arch/avr32/kernel/switch_to.S | 35
+ arch/avr32/kernel/sys_avr32.c | 51 +
+ arch/avr32/kernel/syscall-stubs.S | 102 ++
+ arch/avr32/kernel/syscall_table.S | 289 +++++++
+ arch/avr32/kernel/time.c | 238 ++++++
+ arch/avr32/kernel/traps.c | 425 +++++++++++
+ arch/avr32/kernel/vmlinux.lds.c | 139 +++
+ arch/avr32/lib/Makefile | 11
+ arch/avr32/lib/__avr32_asr64.S | 31
+ arch/avr32/lib/__avr32_lsl64.S | 31
+ arch/avr32/lib/__avr32_lsr64.S | 31
+ arch/avr32/lib/clear_user.S | 76 +
+ arch/avr32/lib/copy_user.S | 119 +++
+ arch/avr32/lib/csum_partial.S | 47 +
+ arch/avr32/lib/csum_partial_copy_generic.S | 99 ++
+ arch/avr32/lib/delay.c | 55 +
+ arch/avr32/lib/findbit.S | 155 ++++
+ arch/avr32/lib/io-readsb.S | 49 +
+ arch/avr32/lib/io-readsl.S | 24
+ arch/avr32/lib/io-readsw.S | 43 +
+ arch/avr32/lib/io-writesb.S | 52 +
+ arch/avr32/lib/io-writesl.S | 20
+ arch/avr32/lib/io-writesw.S | 38
+ arch/avr32/lib/libgcc.h | 33
+ arch/avr32/lib/longlong.h | 98 ++
+ arch/avr32/lib/memcpy.S | 62 +
+ arch/avr32/lib/memset.S | 72 +
+ arch/avr32/lib/strncpy_from_user.S | 60 +
+ arch/avr32/lib/strnlen_user.S | 67 +
+ arch/avr32/mach-at32ap/Makefile | 2
+ arch/avr32/mach-at32ap/at32ap.c | 90 ++
+ arch/avr32/mach-at32ap/at32ap7000.c | 876 +++++++++++++++++++++++
+ arch/avr32/mach-at32ap/clock.c | 148 +++
+ arch/avr32/mach-at32ap/clock.h | 30
+ arch/avr32/mach-at32ap/extint.c | 189 ++++
+ arch/avr32/mach-at32ap/hsmc.c | 164 ++++
+ arch/avr32/mach-at32ap/hsmc.h | 127 +++
+ arch/avr32/mach-at32ap/intc.c | 133 +++
+ arch/avr32/mach-at32ap/intc.h | 329 ++++++++
+ arch/avr32/mach-at32ap/pio.c | 118 +++
+ arch/avr32/mach-at32ap/pio.h | 180 ++++
+ arch/avr32/mach-at32ap/sm.h | 242 ++++++
+ arch/avr32/mm/Makefile | 6
+ arch/avr32/mm/cache.c | 150 +++
+ arch/avr32/mm/clear_page.S | 25
+ arch/avr32/mm/copy_page.S | 28
+ arch/avr32/mm/dma-coherent.c | 139 +++
+ arch/avr32/mm/fault.c | 315 ++++++++
+ arch/avr32/mm/init.c | 481 ++++++++++++
+ arch/avr32/mm/ioremap.c | 199 +++++
+ arch/avr32/mm/tlb.c | 378 +++++++++
+ include/asm-avr32/Kbuild | 3
+ include/asm-avr32/a.out.h | 26
+ include/asm-avr32/addrspace.h | 43 +
+ include/asm-avr32/arch-at32ap/at91rm9200_pdc.h | 36
+ include/asm-avr32/arch-at32ap/at91rm9200_usart.h | 123 +++
+ include/asm-avr32/arch-at32ap/board.h | 35
+ include/asm-avr32/arch-at32ap/init.h | 21
+ include/asm-avr32/arch-at32ap/portmux.h | 16
+ include/asm-avr32/arch-at32ap/sm.h | 27
+ include/asm-avr32/arch-at32ap/smc.h | 60 +
+ include/asm-avr32/asm.h | 102 ++
+ include/asm-avr32/atomic.h | 201 +++++
+ include/asm-avr32/auxvec.h | 4
+ include/asm-avr32/bitops.h | 296 +++++++
+ include/asm-avr32/bug.h | 47 +
+ include/asm-avr32/bugs.h | 15
+ include/asm-avr32/byteorder.h | 25
+ include/asm-avr32/cache.h | 29
+ include/asm-avr32/cachectl.h | 11
+ include/asm-avr32/cacheflush.h | 129 +++
+ include/asm-avr32/checksum.h | 156 ++++
+ include/asm-avr32/cputime.h | 6
+ include/asm-avr32/current.h | 15
+ include/asm-avr32/delay.h | 26
+ include/asm-avr32/div64.h | 6
+ include/asm-avr32/dma-mapping.h | 320 ++++++++
+ include/asm-avr32/dma.h | 8
+ include/asm-avr32/elf.h | 110 ++
+ include/asm-avr32/emergency-restart.h | 6
+ include/asm-avr32/errno.h | 6
+ include/asm-avr32/fcntl.h | 6
+ include/asm-avr32/futex.h | 6
+ include/asm-avr32/hardirq.h | 34
+ include/asm-avr32/hw_irq.h | 9
+ include/asm-avr32/intc.h | 128 +++
+ include/asm-avr32/io.h | 286 +++++++
+ include/asm-avr32/ioctl.h | 6
+ include/asm-avr32/ioctls.h | 83 ++
+ include/asm-avr32/ipcbuf.h | 29
+ include/asm-avr32/irq.h | 10
+ include/asm-avr32/irqflags.h | 68 +
+ include/asm-avr32/kdebug.h | 38
+ include/asm-avr32/kmap_types.h | 30
+ include/asm-avr32/kprobes.h | 34
+ include/asm-avr32/linkage.h | 7
+ include/asm-avr32/local.h | 6
+ include/asm-avr32/mach/serial_at91.h | 33
+ include/asm-avr32/mman.h | 17
+ include/asm-avr32/mmu.h | 10
+ include/asm-avr32/mmu_context.h | 148 +++
+ include/asm-avr32/module.h | 28
+ include/asm-avr32/msgbuf.h | 31
+ include/asm-avr32/mutex.h | 9
+ include/asm-avr32/namei.h | 7
+ include/asm-avr32/numnodes.h | 7
+ include/asm-avr32/ocd.h | 78 ++
+ include/asm-avr32/page.h | 112 ++
+ include/asm-avr32/param.h | 23
+ include/asm-avr32/pci.h | 8
+ include/asm-avr32/percpu.h | 6
+ include/asm-avr32/pgalloc.h | 96 ++
+ include/asm-avr32/pgtable-2level.h | 47 +
+ include/asm-avr32/pgtable.h | 408 ++++++++++
+ include/asm-avr32/poll.h | 27
+ include/asm-avr32/posix_types.h | 129 +++
+ include/asm-avr32/processor.h | 147 +++
+ include/asm-avr32/ptrace.h | 154 ++++
+ include/asm-avr32/resource.h | 6
+ include/asm-avr32/scatterlist.h | 21
+ include/asm-avr32/sections.h | 6
+ include/asm-avr32/semaphore.h | 109 ++
+ include/asm-avr32/sembuf.h | 25
+ include/asm-avr32/setup.h | 141 +++
+ include/asm-avr32/shmbuf.h | 42 +
+ include/asm-avr32/shmparam.h | 6
+ include/asm-avr32/sigcontext.h | 34
+ include/asm-avr32/siginfo.h | 6
+ include/asm-avr32/signal.h | 168 ++++
+ include/asm-avr32/socket.h | 53 +
+ include/asm-avr32/sockios.h | 12
+ include/asm-avr32/stat.h | 79 ++
+ include/asm-avr32/statfs.h | 6
+ include/asm-avr32/string.h | 17
+ include/asm-avr32/sysreg.h | 332 ++++++++
+ include/asm-avr32/system.h | 155 ++++
+ include/asm-avr32/termbits.h | 173 ++++
+ include/asm-avr32/termios.h | 80 ++
+ include/asm-avr32/thread_info.h | 106 ++
+ include/asm-avr32/timex.h | 40 +
+ include/asm-avr32/tlb.h | 32
+ include/asm-avr32/tlbflush.h | 40 +
+ include/asm-avr32/topology.h | 6
+ include/asm-avr32/traps.h | 23
+ include/asm-avr32/types.h | 70 +
+ include/asm-avr32/uaccess.h | 335 ++++++++
+ include/asm-avr32/ucontext.h | 12
+ include/asm-avr32/unaligned.h | 25
+ include/asm-avr32/unistd.h | 387 ++++++++++
+ include/asm-avr32/user.h | 64 +
+ include/linux/elf-em.h | 1
+ lib/Kconfig.debug | 4
+ 181 files changed, 18463 insertions(+), 2 deletions(-)
+
+Index: linux-2.6.18-avr32/MAINTAINERS
+===================================================================
+--- linux-2.6.18-avr32.orig/MAINTAINERS 2006-12-04 09:32:57.000000000 +0100
++++ linux-2.6.18-avr32/MAINTAINERS 2006-12-04 09:33:12.000000000 +0100
+@@ -435,6 +435,23 @@ W: http://people.redhat.com/sgrubb/audit
+ T: git kernel.org:/pub/scm/linux/kernel/git/dwmw2/audit-2.6.git
+ S: Maintained
+
++AVR32 ARCHITECTURE
++P: Atmel AVR32 Support Team
++M: avr32@atmel.com
++P: Haavard Skinnemoen
++M: hskinnemoen@atmel.com
++W: http://www.atmel.com/products/AVR32/
++W: http://avr32linux.org/
++W: http://avrfreaks.net/
++S: Supported
++
++AVR32/AT32AP MACHINE SUPPORT
++P: Atmel AVR32 Support Team
++M: avr32@atmel.com
++P: Haavard Skinnemoen
++M: hskinnemoen@atmel.com
++S: Supported
++
+ AX.25 NETWORK LAYER
+ P: Ralf Baechle
+ M: ralf@linux-mips.org
+Index: linux-2.6.18-avr32/arch/avr32/Kconfig
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/Kconfig 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,199 @@
++#
++# For a description of the syntax of this configuration file,
++# see Documentation/kbuild/kconfig-language.txt.
++#
++
++mainmenu "Linux Kernel Configuration"
++
++config AVR32
++ bool
++ default y
++ # With EMBEDDED=n, we get lots of stuff automatically selected
++ # that we usually don't need on AVR32.
++ select EMBEDDED
++ help
++ AVR32 is a high-performance 32-bit RISC microprocessor core,
++ designed for cost-sensitive embedded applications, with particular
++ emphasis on low power consumption and high code density.
++
++ There is an AVR32 Linux project with a web page at
++ http://avr32linux.org/.
++
++config UID16
++ bool
++
++config GENERIC_HARDIRQS
++ bool
++ default y
++
++config HARDIRQS_SW_RESEND
++ bool
++ default y
++
++config GENERIC_IRQ_PROBE
++ bool
++ default y
++
++config RWSEM_GENERIC_SPINLOCK
++ bool
++ default y
++
++config GENERIC_TIME
++ bool
++ default y
++
++config RWSEM_XCHGADD_ALGORITHM
++ bool
++
++config GENERIC_BUST_SPINLOCK
++ bool
++
++config GENERIC_ISA_DMA
++ bool
++
++config GENERIC_HWEIGHT
++ bool
++ default y
++
++config GENERIC_CALIBRATE_DELAY
++ bool
++ default y
++
++source "init/Kconfig"
++
++menu "System Type and features"
++
++config SUBARCH_AVR32B
++ bool
++config MMU
++ bool
++config PERFORMANCE_COUNTERS
++ bool
++
++config PLATFORM_AT32AP
++ bool
++ select SUBARCH_AVR32B
++ select MMU
++ select PERFORMANCE_COUNTERS
++
++choice
++ prompt "AVR32 CPU type"
++ default CPU_AT32AP7000
++
++config CPU_AT32AP7000
++ bool "AT32AP7000"
++ select PLATFORM_AT32AP
++endchoice
++
++#
++# CPU Daughterboards for ATSTK1000
++config BOARD_ATSTK1002
++ bool
++
++choice
++ prompt "AVR32 board type"
++ default BOARD_ATSTK1000
++
++config BOARD_ATSTK1000
++ bool "ATSTK1000 evaluation board"
++ select BOARD_ATSTK1002 if CPU_AT32AP7000
++endchoice
++
++choice
++ prompt "Boot loader type"
++ default LOADER_U_BOOT
++
++config LOADER_U_BOOT
++ bool "U-Boot (or similar) bootloader"
++endchoice
++
++config LOAD_ADDRESS
++ hex
++ default 0x10000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y
++
++config ENTRY_ADDRESS
++ hex
++ default 0x90000000 if LOADER_U_BOOT=y && CPU_AT32AP7000=y
++
++config PHYS_OFFSET
++ hex
++ default 0x10000000 if CPU_AT32AP7000=y
++
++source "kernel/Kconfig.preempt"
++
++config HAVE_ARCH_BOOTMEM_NODE
++ bool
++ default n
++
++config ARCH_HAVE_MEMORY_PRESENT
++ bool
++ default n
++
++config NEED_NODE_MEMMAP_SIZE
++ bool
++ default n
++
++config ARCH_FLATMEM_ENABLE
++ bool
++ default y
++
++config ARCH_DISCONTIGMEM_ENABLE
++ bool
++ default n
++
++config ARCH_SPARSEMEM_ENABLE
++ bool
++ default n
++
++source "mm/Kconfig"
++
++config OWNERSHIP_TRACE
++ bool "Ownership trace support"
++ default y
++ help
++ Say Y to generate an Ownership Trace message on every context switch,
++ enabling Nexus-compliant debuggers to keep track of the PID of the
++ currently executing task.
++
++# FPU emulation goes here
++
++source "kernel/Kconfig.hz"
++
++config CMDLINE
++ string "Default kernel command line"
++ default ""
++ help
++ If you don't have a boot loader capable of passing a command line string
++ to the kernel, you may specify one here. As a minimum, you should specify
++ the memory size and the root device (e.g., mem=8M, root=/dev/nfs).
++
++endmenu
++
++menu "Bus options"
++
++config PCI
++ bool
++
++source "drivers/pci/Kconfig"
++
++source "drivers/pcmcia/Kconfig"
++
++endmenu
++
++menu "Executable file formats"
++source "fs/Kconfig.binfmt"
++endmenu
++
++source "net/Kconfig"
++
++source "drivers/Kconfig"
++
++source "fs/Kconfig"
++
++source "arch/avr32/Kconfig.debug"
++
++source "security/Kconfig"
++
++source "crypto/Kconfig"
++
++source "lib/Kconfig"
+Index: linux-2.6.18-avr32/arch/avr32/Kconfig.debug
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/Kconfig.debug 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,19 @@
++menu "Kernel hacking"
++
++config TRACE_IRQFLAGS_SUPPORT
++ bool
++ default y
++
++source "lib/Kconfig.debug"
++
++config KPROBES
++ bool "Kprobes"
++ depends on DEBUG_KERNEL
++ help
++ Kprobes allows you to trap at almost any kernel address and
++ execute a callback function. register_kprobe() establishes
++ a probepoint and specifies the callback. Kprobes is useful
++ for kernel debugging, non-intrusive instrumentation and testing.
++ If in doubt, say "N".
++
++endmenu
+Index: linux-2.6.18-avr32/arch/avr32/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/Makefile 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,89 @@
++#
++# This file is subject to the terms and conditions of the GNU General Public
++# License. See the file "COPYING" in the main directory of this archive
++# for more details.
++#
++# Copyright (C) 2004-2006 Atmel Corporation.
++
++# Default target when executing plain make
++.PHONY: all
++all: uImage vmlinux.elf
++
++KBUILD_DEFCONFIG := atstk1002_defconfig
++
++CFLAGS += -pipe -fno-builtin -mno-pic
++AFLAGS += -mrelax -mno-pic
++CFLAGS_MODULE += -mno-relax
++LDFLAGS_vmlinux += --relax
++
++cpuflags-$(CONFIG_CPU_AP7000) += -mcpu=ap7000
++
++CFLAGS += $(cpuflags-y)
++AFLAGS += $(cpuflags-y)
++
++CHECKFLAGS += -D__avr32__ -D__BIG_ENDIAN
++
++head-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/head.o
++head-y += arch/avr32/kernel/head.o
++core-$(CONFIG_PLATFORM_AT32AP) += arch/avr32/mach-at32ap/
++core-$(CONFIG_BOARD_ATSTK1000) += arch/avr32/boards/atstk1000/
++core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/
++core-y += arch/avr32/kernel/
++core-y += arch/avr32/mm/
++libs-y += arch/avr32/lib/
++
++archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap
++
++include/asm-avr32/.arch: $(wildcard include/config/platform/*.h) include/config/auto.conf
++ @echo ' SYMLINK include/asm-avr32/arch -> include/asm-avr32/$(archincdir-y)'
++ifneq ($(KBUILD_SRC),)
++ $(Q)mkdir -p include/asm-avr32
++ $(Q)ln -fsn $(srctree)/include/asm-avr32/$(archincdir-y) include/asm-avr32/arch
++else
++ $(Q)ln -fsn $(archincdir-y) include/asm-avr32/arch
++endif
++ @touch $@
++
++archprepare: include/asm-avr32/.arch
++
++CLEAN_FILES += include/asm-avr32/.arch include/asm-avr32/arch
++
++BOOT_TARGETS := vmlinux.elf vmlinux.bin uImage uImage.srec
++
++.PHONY: $(BOOT_TARGETS) install
++
++boot := arch/$(ARCH)/boot/images
++
++ KBUILD_IMAGE := $(boot)/uImage
++vmlinux.elf: KBUILD_IMAGE := $(boot)/vmlinux.elf
++vmlinux.cso: KBUILD_IMAGE := $(boot)/vmlinux.cso
++uImage.srec: KBUILD_IMAGE := $(boot)/uImage.srec
++uImage: KBUILD_IMAGE := $(boot)/uImage
++
++quiet_cmd_listing = LST $@
++ cmd_listing = avr32-linux-objdump $(OBJDUMPFLAGS) -lS $< > $@
++quiet_cmd_disasm = DIS $@
++ cmd_disasm = avr32-linux-objdump $(OBJDUMPFLAGS) -d $< > $@
++
++vmlinux.elf vmlinux.bin uImage.srec uImage vmlinux.cso: vmlinux
++ $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
++
++install: vmlinux
++ $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
++
++vmlinux.s: vmlinux
++ $(call if_changed,disasm)
++
++vmlinux.lst: vmlinux
++ $(call if_changed,listing)
++
++CLEAN_FILES += vmlinux.s vmlinux.lst
++
++archclean:
++ $(Q)$(MAKE) $(clean)=$(boot)
++
++define archhelp
++ @echo '* vmlinux.elf - ELF image with load address 0'
++ @echo ' vmlinux.cso - PathFinder CSO image'
++ @echo '* uImage - Create a bootable image for U-Boot'
++endef
+Index: linux-2.6.18-avr32/arch/avr32/boot/images/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/boot/images/Makefile 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,60 @@
++#
++# Copyright (C) 2004-2006 Atmel Corporation
++#
++# This file is subject to the terms and conditions of the GNU General Public
++# License. See the file "COPYING" in the main directory of this archive
++# for more details.
++#
++
++MKIMAGE := $(srctree)/scripts/mkuboot.sh
++
++extra-y := vmlinux.bin vmlinux.gz
++
++OBJCOPYFLAGS_vmlinux.bin := -O binary
++$(obj)/vmlinux.bin: vmlinux FORCE
++ $(call if_changed,objcopy)
++
++$(obj)/vmlinux.gz: $(obj)/vmlinux.bin FORCE
++ $(call if_changed,gzip)
++
++quiet_cmd_uimage = UIMAGE $@
++ cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A avr32 -O linux -T kernel \
++ -C gzip -a $(CONFIG_LOAD_ADDRESS) -e $(CONFIG_ENTRY_ADDRESS) \
++ -n 'Linux-$(KERNELRELEASE)' -d $< $@
++
++targets += uImage uImage.srec
++$(obj)/uImage: $(obj)/vmlinux.gz
++ $(call if_changed,uimage)
++ @echo ' Image $@ is ready'
++
++OBJCOPYFLAGS_uImage.srec := -I binary -O srec
++$(obj)/uImage.srec: $(obj)/uImage
++ $(call if_changed,objcopy)
++
++OBJCOPYFLAGS_vmlinux.elf := --change-section-lma .text-0x80000000 \
++ --change-section-lma __ex_table-0x80000000 \
++ --change-section-lma .rodata-0x80000000 \
++ --change-section-lma .data-0x80000000 \
++ --change-section-lma .init-0x80000000 \
++ --change-section-lma .bss-0x80000000 \
++ --change-section-lma __param-0x80000000 \
++ --change-section-lma __ksymtab-0x80000000 \
++ --change-section-lma __ksymtab_gpl-0x80000000 \
++ --change-section-lma __kcrctab-0x80000000 \
++ --change-section-lma __kcrctab_gpl-0x80000000 \
++ --change-section-lma __ksymtab_strings-0x80000000 \
++ --set-start 0xa0000000
++$(obj)/vmlinux.elf: vmlinux FORCE
++ $(call if_changed,objcopy)
++
++quiet_cmd_sfdwarf = SFDWARF $@
++ cmd_sfdwarf = sfdwarf $< TO $@ GNUAVR IW $(SFDWARF_FLAGS) > $(obj)/sfdwarf.log
++
++$(obj)/vmlinux.cso: $(obj)/vmlinux.elf FORCE
++ $(call if_changed,sfdwarf)
++
++install: $(BOOTIMAGE)
++ sh $(srctree)/install-kernel.sh $<
++
++# Generated files to be removed upon make clean
++clean-files := vmlinux.elf vmlinux.bin vmlinux.gz uImage uImage.srec
+Index: linux-2.6.18-avr32/arch/avr32/boot/u-boot/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/boot/u-boot/Makefile 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,3 @@
++extra-y := head.o
++
++obj-y := empty.o
+Index: linux-2.6.18-avr32/arch/avr32/boot/u-boot/empty.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/boot/u-boot/empty.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1 @@
++/* Empty file */
+Index: linux-2.6.18-avr32/arch/avr32/boot/u-boot/head.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/boot/u-boot/head.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,60 @@
++/*
++ * Startup code for use with the u-boot bootloader.
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <asm/setup.h>
++
++ /*
++ * The kernel is loaded where we want it to be and all caches
++ * have just been flushed. We get two parameters from u-boot:
++ *
++ * r12 contains a magic number (ATAG_MAGIC)
++ * r11 points to a tag table providing information about
++ * the system.
++ */
++ .section .init.text,"ax"
++ .global _start
++_start:
++ /* Check if the boot loader actually provided a tag table */
++ lddpc r0, magic_number
++ cp.w r12, r0
++ brne no_tag_table
++
++ /* Initialize .bss */
++ lddpc r2, bss_start_addr
++ lddpc r3, end_addr
++ mov r0, 0
++ mov r1, 0
++1: st.d r2++, r0
++ cp r2, r3
++ brlo 1b
++
++ /*
++ * Save the tag table address for later use. This must be done
++ * _after_ .bss has been initialized...
++ */
++ lddpc r0, tag_table_addr
++ st.w r0[0], r11
++
++ /* Jump to loader-independent setup code */
++ rjmp kernel_entry
++
++ .align 2
++magic_number:
++ .long ATAG_MAGIC
++tag_table_addr:
++ .long bootloader_tags
++bss_start_addr:
++ .long __bss_start
++end_addr:
++ .long _end
++
++no_tag_table:
++ sub r12, pc, (. - 2f)
++ bral panic
++2: .asciz "Boot loader didn't provide correct magic number\n"
+Index: linux-2.6.18-avr32/arch/avr32/kernel/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/Makefile 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,18 @@
++#
++# Makefile for the Linux/AVR32 kernel.
++#
++
++extra-y := head.o vmlinux.lds
++
++obj-$(CONFIG_SUBARCH_AVR32B) += entry-avr32b.o
++obj-y += syscall_table.o syscall-stubs.o irq.o
++obj-y += setup.o traps.o semaphore.o ptrace.o
++obj-y += signal.o sys_avr32.o process.o time.o
++obj-y += init_task.o switch_to.o cpu.o
++obj-$(CONFIG_MODULES) += module.o avr32_ksyms.o
++obj-$(CONFIG_KPROBES) += kprobes.o
++
++USE_STANDARD_AS_RULE := true
++
++%.lds: %.lds.c FORCE
++ $(call if_changed_dep,cpp_lds_S)
+Index: linux-2.6.18-avr32/arch/avr32/kernel/asm-offsets.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/asm-offsets.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,25 @@
++/*
++ * Generate definitions needed by assembly language modules.
++ * This code generates raw asm output which is post-processed
++ * to extract and format the required data.
++ */
++
++#include <linux/thread_info.h>
++
++#define DEFINE(sym, val) \
++ asm volatile("\n->" #sym " %0 " #val : : "i" (val))
++
++#define BLANK() asm volatile("\n->" : : )
++
++#define OFFSET(sym, str, mem) \
++ DEFINE(sym, offsetof(struct str, mem));
++
++void foo(void)
++{
++ OFFSET(TI_task, thread_info, task);
++ OFFSET(TI_exec_domain, thread_info, exec_domain);
++ OFFSET(TI_flags, thread_info, flags);
++ OFFSET(TI_cpu, thread_info, cpu);
++ OFFSET(TI_preempt_count, thread_info, preempt_count);
++ OFFSET(TI_restart_block, thread_info, restart_block);
++}
+Index: linux-2.6.18-avr32/arch/avr32/kernel/avr32_ksyms.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/avr32_ksyms.c 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,64 @@
++/*
++ * Export AVR32-specific functions for loadable modules.
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/io.h>
++#include <linux/module.h>
++
++#include <asm/checksum.h>
++#include <asm/uaccess.h>
++#include <asm/delay.h>
++
++/*
++ * GCC functions
++ */
++extern unsigned long long __avr32_lsl64(unsigned long long u, unsigned long b);
++extern unsigned long long __avr32_lsr64(unsigned long long u, unsigned long b);
++extern unsigned long long __avr32_asr64(unsigned long long u, unsigned long b);
++EXPORT_SYMBOL(__avr32_lsl64);
++EXPORT_SYMBOL(__avr32_lsr64);
++EXPORT_SYMBOL(__avr32_asr64);
++
++/*
++ * String functions
++ */
++EXPORT_SYMBOL(memset);
++EXPORT_SYMBOL(memcpy);
++
++/*
++ * Userspace access stuff.
++ */
++EXPORT_SYMBOL(copy_from_user);
++EXPORT_SYMBOL(copy_to_user);
++EXPORT_SYMBOL(__copy_user);
++EXPORT_SYMBOL(strncpy_from_user);
++EXPORT_SYMBOL(__strncpy_from_user);
++EXPORT_SYMBOL(clear_user);
++EXPORT_SYMBOL(__clear_user);
++EXPORT_SYMBOL(csum_partial);
++EXPORT_SYMBOL(csum_partial_copy_generic);
++
++/* Delay loops (lib/delay.S) */
++EXPORT_SYMBOL(__ndelay);
++EXPORT_SYMBOL(__udelay);
++EXPORT_SYMBOL(__const_udelay);
++
++/* Bit operations (lib/findbit.S) */
++EXPORT_SYMBOL(find_first_zero_bit);
++EXPORT_SYMBOL(find_next_zero_bit);
++EXPORT_SYMBOL(find_first_bit);
++EXPORT_SYMBOL(find_next_bit);
++EXPORT_SYMBOL(generic_find_next_zero_le_bit);
++
++/* I/O primitives (lib/io-*.S) */
++EXPORT_SYMBOL(__raw_readsb);
++EXPORT_SYMBOL(__raw_readsw);
++EXPORT_SYMBOL(__raw_readsl);
++EXPORT_SYMBOL(__raw_writesb);
++EXPORT_SYMBOL(__raw_writesw);
++EXPORT_SYMBOL(__raw_writesl);
+Index: linux-2.6.18-avr32/arch/avr32/kernel/cpu.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/cpu.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,327 @@
++/*
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/init.h>
++#include <linux/sysdev.h>
++#include <linux/seq_file.h>
++#include <linux/cpu.h>
++#include <linux/percpu.h>
++#include <linux/param.h>
++#include <linux/errno.h>
++
++#include <asm/setup.h>
++#include <asm/sysreg.h>
++
++static DEFINE_PER_CPU(struct cpu, cpu_devices);
++
++#ifdef CONFIG_PERFORMANCE_COUNTERS
++
++/*
++ * XXX: If/when a SMP-capable implementation of AVR32 will ever be
++ * made, we must make sure that the code executes on the correct CPU.
++ */
++static ssize_t show_pc0event(struct sys_device *dev, char *buf)
++{
++ unsigned long pccr;
++
++ pccr = sysreg_read(PCCR);
++ return sprintf(buf, "0x%lx\n", (pccr >> 12) & 0x3f);
++}
++static ssize_t store_pc0event(struct sys_device *dev, const char *buf,
++ size_t count)
++{
++ unsigned long val;
++ char *endp;
++
++ val = simple_strtoul(buf, &endp, 0);
++ if (endp == buf || val > 0x3f)
++ return -EINVAL;
++ val = (val << 12) | (sysreg_read(PCCR) & 0xfffc0fff);
++ sysreg_write(PCCR, val);
++ return count;
++}
++static ssize_t show_pc0count(struct sys_device *dev, char *buf)
++{
++ unsigned long pcnt0;
++
++ pcnt0 = sysreg_read(PCNT0);
++ return sprintf(buf, "%lu\n", pcnt0);
++}
++static ssize_t store_pc0count(struct sys_device *dev, const char *buf,
++ size_t count)
++{
++ unsigned long val;
++ char *endp;
++
++ val = simple_strtoul(buf, &endp, 0);
++ if (endp == buf)
++ return -EINVAL;
++ sysreg_write(PCNT0, val);
++
++ return count;
++}
++
++static ssize_t show_pc1event(struct sys_device *dev, char *buf)
++{
++ unsigned long pccr;
++
++ pccr = sysreg_read(PCCR);
++ return sprintf(buf, "0x%lx\n", (pccr >> 18) & 0x3f);
++}
++static ssize_t store_pc1event(struct sys_device *dev, const char *buf,
++ size_t count)
++{
++ unsigned long val;
++ char *endp;
++
++ val = simple_strtoul(buf, &endp, 0);
++ if (endp == buf || val > 0x3f)
++ return -EINVAL;
++ val = (val << 18) | (sysreg_read(PCCR) & 0xff03ffff);
++ sysreg_write(PCCR, val);
++ return count;
++}
++static ssize_t show_pc1count(struct sys_device *dev, char *buf)
++{
++ unsigned long pcnt1;
++
++ pcnt1 = sysreg_read(PCNT1);
++ return sprintf(buf, "%lu\n", pcnt1);
++}
++static ssize_t store_pc1count(struct sys_device *dev, const char *buf,
++ size_t count)
++{
++ unsigned long val;
++ char *endp;
++
++ val = simple_strtoul(buf, &endp, 0);
++ if (endp == buf)
++ return -EINVAL;
++ sysreg_write(PCNT1, val);
++
++ return count;
++}
++
++static ssize_t show_pccycles(struct sys_device *dev, char *buf)
++{
++ unsigned long pccnt;
++
++ pccnt = sysreg_read(PCCNT);
++ return sprintf(buf, "%lu\n", pccnt);
++}
++static ssize_t store_pccycles(struct sys_device *dev, const char *buf,
++ size_t count)
++{
++ unsigned long val;
++ char *endp;
++
++ val = simple_strtoul(buf, &endp, 0);
++ if (endp == buf)
++ return -EINVAL;
++ sysreg_write(PCCNT, val);
++
++ return count;
++}
++
++static ssize_t show_pcenable(struct sys_device *dev, char *buf)
++{
++ unsigned long pccr;
++
++ pccr = sysreg_read(PCCR);
++ return sprintf(buf, "%c\n", (pccr & 1)?'1':'0');
++}
++static ssize_t store_pcenable(struct sys_device *dev, const char *buf,
++ size_t count)
++{
++ unsigned long pccr, val;
++ char *endp;
++
++ val = simple_strtoul(buf, &endp, 0);
++ if (endp == buf)
++ return -EINVAL;
++ if (val)
++ val = 1;
++
++ pccr = sysreg_read(PCCR);
++ pccr = (pccr & ~1UL) | val;
++ sysreg_write(PCCR, pccr);
++
++ return count;
++}
++
++static SYSDEV_ATTR(pc0event, 0600, show_pc0event, store_pc0event);
++static SYSDEV_ATTR(pc0count, 0600, show_pc0count, store_pc0count);
++static SYSDEV_ATTR(pc1event, 0600, show_pc1event, store_pc1event);
++static SYSDEV_ATTR(pc1count, 0600, show_pc1count, store_pc1count);
++static SYSDEV_ATTR(pccycles, 0600, show_pccycles, store_pccycles);
++static SYSDEV_ATTR(pcenable, 0600, show_pcenable, store_pcenable);
++
++#endif /* CONFIG_PERFORMANCE_COUNTERS */
++
++static int __init topology_init(void)
++{
++ int cpu;
++
++ for_each_possible_cpu(cpu) {
++ struct cpu *c = &per_cpu(cpu_devices, cpu);
++
++ register_cpu(c, cpu);
++
++#ifdef CONFIG_PERFORMANCE_COUNTERS
++ sysdev_create_file(&c->sysdev, &attr_pc0event);
++ sysdev_create_file(&c->sysdev, &attr_pc0count);
++ sysdev_create_file(&c->sysdev, &attr_pc1event);
++ sysdev_create_file(&c->sysdev, &attr_pc1count);
++ sysdev_create_file(&c->sysdev, &attr_pccycles);
++ sysdev_create_file(&c->sysdev, &attr_pcenable);
++#endif
++ }
++
++ return 0;
++}
++
++subsys_initcall(topology_init);
++
++static const char *cpu_names[] = {
++ "Morgan",
++ "AP7000",
++};
++#define NR_CPU_NAMES ARRAY_SIZE(cpu_names)
++
++static const char *arch_names[] = {
++ "AVR32A",
++ "AVR32B",
++};
++#define NR_ARCH_NAMES ARRAY_SIZE(arch_names)
++
++static const char *mmu_types[] = {
++ "No MMU",
++ "ITLB and DTLB",
++ "Shared TLB",
++ "MPU"
++};
++
++void __init setup_processor(void)
++{
++ unsigned long config0, config1;
++ unsigned cpu_id, cpu_rev, arch_id, arch_rev, mmu_type;
++ unsigned tmp;
++
++ config0 = sysreg_read(CONFIG0); /* 0x0000013e; */
++ config1 = sysreg_read(CONFIG1); /* 0x01f689a2; */
++ cpu_id = config0 >> 24;
++ cpu_rev = (config0 >> 16) & 0xff;
++ arch_id = (config0 >> 13) & 0x07;
++ arch_rev = (config0 >> 10) & 0x07;
++ mmu_type = (config0 >> 7) & 0x03;
++
++ boot_cpu_data.arch_type = arch_id;
++ boot_cpu_data.cpu_type = cpu_id;
++ boot_cpu_data.arch_revision = arch_rev;
++ boot_cpu_data.cpu_revision = cpu_rev;
++ boot_cpu_data.tlb_config = mmu_type;
++
++ tmp = (config1 >> 13) & 0x07;
++ if (tmp) {
++ boot_cpu_data.icache.ways = 1 << ((config1 >> 10) & 0x07);
++ boot_cpu_data.icache.sets = 1 << ((config1 >> 16) & 0x0f);
++ boot_cpu_data.icache.linesz = 1 << (tmp + 1);
++ }
++ tmp = (config1 >> 3) & 0x07;
++ if (tmp) {
++ boot_cpu_data.dcache.ways = 1 << (config1 & 0x07);
++ boot_cpu_data.dcache.sets = 1 << ((config1 >> 6) & 0x0f);
++ boot_cpu_data.dcache.linesz = 1 << (tmp + 1);
++ }
++
++ if ((cpu_id >= NR_CPU_NAMES) || (arch_id >= NR_ARCH_NAMES)) {
++ printk ("Unknown CPU configuration (ID %02x, arch %02x), "
++ "continuing anyway...\n",
++ cpu_id, arch_id);
++ return;
++ }
++
++ printk ("CPU: %s [%02x] revision %d (%s revision %d)\n",
++ cpu_names[cpu_id], cpu_id, cpu_rev,
++ arch_names[arch_id], arch_rev);
++ printk ("CPU: MMU configuration: %s\n", mmu_types[mmu_type]);
++ printk ("CPU: features:");
++ if (config0 & (1 << 6))
++ printk(" fpu");
++ if (config0 & (1 << 5))
++ printk(" java");
++ if (config0 & (1 << 4))
++ printk(" perfctr");
++ if (config0 & (1 << 3))
++ printk(" ocd");
++ printk("\n");
++}
++
++#ifdef CONFIG_PROC_FS
++static int c_show(struct seq_file *m, void *v)
++{
++ unsigned int icache_size, dcache_size;
++ unsigned int cpu = smp_processor_id();
++
++ icache_size = boot_cpu_data.icache.ways *
++ boot_cpu_data.icache.sets *
++ boot_cpu_data.icache.linesz;
++ dcache_size = boot_cpu_data.dcache.ways *
++ boot_cpu_data.dcache.sets *
++ boot_cpu_data.dcache.linesz;
++
++ seq_printf(m, "processor\t: %d\n", cpu);
++
++ if (boot_cpu_data.arch_type < NR_ARCH_NAMES)
++ seq_printf(m, "cpu family\t: %s revision %d\n",
++ arch_names[boot_cpu_data.arch_type],
++ boot_cpu_data.arch_revision);
++ if (boot_cpu_data.cpu_type < NR_CPU_NAMES)
++ seq_printf(m, "cpu type\t: %s revision %d\n",
++ cpu_names[boot_cpu_data.cpu_type],
++ boot_cpu_data.cpu_revision);
++
++ seq_printf(m, "i-cache\t\t: %dK (%u ways x %u sets x %u)\n",
++ icache_size >> 10,
++ boot_cpu_data.icache.ways,
++ boot_cpu_data.icache.sets,
++ boot_cpu_data.icache.linesz);
++ seq_printf(m, "d-cache\t\t: %dK (%u ways x %u sets x %u)\n",
++ dcache_size >> 10,
++ boot_cpu_data.dcache.ways,
++ boot_cpu_data.dcache.sets,
++ boot_cpu_data.dcache.linesz);
++ seq_printf(m, "bogomips\t: %lu.%02lu\n",
++ boot_cpu_data.loops_per_jiffy / (500000/HZ),
++ (boot_cpu_data.loops_per_jiffy / (5000/HZ)) % 100);
++
++ return 0;
++}
++
++static void *c_start(struct seq_file *m, loff_t *pos)
++{
++ return *pos < 1 ? (void *)1 : NULL;
++}
++
++static void *c_next(struct seq_file *m, void *v, loff_t *pos)
++{
++ ++*pos;
++ return NULL;
++}
++
++static void c_stop(struct seq_file *m, void *v)
++{
++
++}
++
++struct seq_operations cpuinfo_op = {
++ .start = c_start,
++ .next = c_next,
++ .stop = c_stop,
++ .show = c_show
++};
++#endif /* CONFIG_PROC_FS */
+Index: linux-2.6.18-avr32/arch/avr32/kernel/entry-avr32b.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/entry-avr32b.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,678 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/*
++ * This file contains the low-level entry-points into the kernel, that is,
++ * exception handlers, debug trap handlers, interrupt handlers and the
++ * system call handler.
++ */
++#include <linux/errno.h>
++
++#include <asm/asm.h>
++#include <asm/hardirq.h>
++#include <asm/irq.h>
++#include <asm/ocd.h>
++#include <asm/page.h>
++#include <asm/pgtable.h>
++#include <asm/ptrace.h>
++#include <asm/sysreg.h>
++#include <asm/thread_info.h>
++#include <asm/unistd.h>
++
++#ifdef CONFIG_PREEMPT
++# define preempt_stop mask_interrupts
++#else
++# define preempt_stop
++# define fault_resume_kernel fault_restore_all
++#endif
++
++#define __MASK(x) ((1 << (x)) - 1)
++#define IRQ_MASK ((__MASK(SOFTIRQ_BITS) << SOFTIRQ_SHIFT) | \
++ (__MASK(HARDIRQ_BITS) << HARDIRQ_SHIFT))
++
++ .section .ex.text,"ax",@progbits
++ .align 2
++exception_vectors:
++ bral handle_critical
++ .align 2
++ bral handle_critical
++ .align 2
++ bral do_bus_error_write
++ .align 2
++ bral do_bus_error_read
++ .align 2
++ bral do_nmi_ll
++ .align 2
++ bral handle_address_fault
++ .align 2
++ bral handle_protection_fault
++ .align 2
++ bral handle_debug
++ .align 2
++ bral do_illegal_opcode_ll
++ .align 2
++ bral do_illegal_opcode_ll
++ .align 2
++ bral do_illegal_opcode_ll
++ .align 2
++ bral do_fpe_ll
++ .align 2
++ bral do_illegal_opcode_ll
++ .align 2
++ bral handle_address_fault
++ .align 2
++ bral handle_address_fault
++ .align 2
++ bral handle_protection_fault
++ .align 2
++ bral handle_protection_fault
++ .align 2
++ bral do_dtlb_modified
++
++ /*
++ * r0 : PGD/PT/PTE
++ * r1 : Offending address
++ * r2 : Scratch register
++ * r3 : Cause (5, 12 or 13)
++ */
++#define tlbmiss_save pushm r0-r3
++#define tlbmiss_restore popm r0-r3
++
++ .section .tlbx.ex.text,"ax",@progbits
++ .global itlb_miss
++itlb_miss:
++ tlbmiss_save
++ rjmp tlb_miss_common
++
++ .section .tlbr.ex.text,"ax",@progbits
++dtlb_miss_read:
++ tlbmiss_save
++ rjmp tlb_miss_common
++
++ .section .tlbw.ex.text,"ax",@progbits
++dtlb_miss_write:
++ tlbmiss_save
++
++ .global tlb_miss_common
++tlb_miss_common:
++ mfsr r0, SYSREG_PTBR
++ mfsr r1, SYSREG_TLBEAR
++
++ /* Is it the vmalloc space? */
++ bld r1, 31
++ brcs handle_vmalloc_miss
++
++ /* First level lookup */
++pgtbl_lookup:
++ lsr r2, r1, PGDIR_SHIFT
++ ld.w r0, r0[r2 << 2]
++ bld r0, _PAGE_BIT_PRESENT
++ brcc page_table_not_present
++
++ /* TODO: Check access rights on page table if necessary */
++
++ /* Translate to virtual address in P1. */
++ andl r0, 0xf000
++ sbr r0, 31
++
++ /* Second level lookup */
++ lsl r1, (32 - PGDIR_SHIFT)
++ lsr r1, (32 - PGDIR_SHIFT) + PAGE_SHIFT
++ add r2, r0, r1 << 2
++ ld.w r1, r2[0]
++ bld r1, _PAGE_BIT_PRESENT
++ brcc page_not_present
++
++ /* Mark the page as accessed */
++ sbr r1, _PAGE_BIT_ACCESSED
++ st.w r2[0], r1
++
++ /* Drop software flags */
++ andl r1, _PAGE_FLAGS_HARDWARE_MASK & 0xffff
++ mtsr SYSREG_TLBELO, r1
++
++ /* Figure out which entry we want to replace */
++ mfsr r0, SYSREG_TLBARLO
++ clz r2, r0
++ brcc 1f
++ mov r1, -1 /* All entries have been accessed, */
++ mtsr SYSREG_TLBARLO, r1 /* so reset TLBAR */
++ mov r2, 0 /* and start at 0 */
++1: mfsr r1, SYSREG_MMUCR
++ lsl r2, 14
++ andl r1, 0x3fff, COH
++ or r1, r2
++ mtsr SYSREG_MMUCR, r1
++
++ tlbw
++
++ tlbmiss_restore
++ rete
++
++handle_vmalloc_miss:
++ /* Simply do the lookup in init's page table */
++ mov r0, lo(swapper_pg_dir)
++ orh r0, hi(swapper_pg_dir)
++ rjmp pgtbl_lookup
++
++
++ /* --- System Call --- */
++
++ .section .scall.text,"ax",@progbits
++system_call:
++ pushm r12 /* r12_orig */
++ stmts --sp, r0-lr
++ zero_fp
++ mfsr r0, SYSREG_RAR_SUP
++ mfsr r1, SYSREG_RSR_SUP
++ stm --sp, r0-r1
++
++ /* check for syscall tracing */
++ get_thread_info r0
++ ld.w r1, r0[TI_flags]
++ bld r1, TIF_SYSCALL_TRACE
++ brcs syscall_trace_enter
++
++syscall_trace_cont:
++ cp.w r8, NR_syscalls
++ brhs syscall_badsys
++
++ lddpc lr, syscall_table_addr
++ ld.w lr, lr[r8 << 2]
++ mov r8, r5 /* 5th argument (6th is pushed by stub) */
++ icall lr
++
++ .global syscall_return
++syscall_return:
++ get_thread_info r0
++ mask_interrupts /* make sure we don't miss an interrupt
++ setting need_resched or sigpending
++ between sampling and the rets */
++
++ /* Store the return value so that the correct value is loaded below */
++ stdsp sp[REG_R12], r12
++
++ ld.w r1, r0[TI_flags]
++ andl r1, _TIF_ALLWORK_MASK, COH
++ brne syscall_exit_work
++
++syscall_exit_cont:
++ popm r8-r9
++ mtsr SYSREG_RAR_SUP, r8
++ mtsr SYSREG_RSR_SUP, r9
++ ldmts sp++, r0-lr
++ sub sp, -4 /* r12_orig */
++ rets
++
++ .align 2
++syscall_table_addr:
++ .long sys_call_table
++
++syscall_badsys:
++ mov r12, -ENOSYS
++ rjmp syscall_return
++
++ .global ret_from_fork
++ret_from_fork:
++ rcall schedule_tail
++
++ /* check for syscall tracing */
++ get_thread_info r0
++ ld.w r1, r0[TI_flags]
++ andl r1, _TIF_ALLWORK_MASK, COH
++ brne syscall_exit_work
++ rjmp syscall_exit_cont
++
++syscall_trace_enter:
++ pushm r8-r12
++ rcall syscall_trace
++ popm r8-r12
++ rjmp syscall_trace_cont
++
++syscall_exit_work:
++ bld r1, TIF_SYSCALL_TRACE
++ brcc 1f
++ unmask_interrupts
++ rcall syscall_trace
++ mask_interrupts
++ ld.w r1, r0[TI_flags]
++
++1: bld r1, TIF_NEED_RESCHED
++ brcc 2f
++ unmask_interrupts
++ rcall schedule
++ mask_interrupts
++ ld.w r1, r0[TI_flags]
++ rjmp 1b
++
++2: mov r2, _TIF_SIGPENDING | _TIF_RESTORE_SIGMASK
++ tst r1, r2
++ breq 3f
++ unmask_interrupts
++ mov r12, sp
++ mov r11, r0
++ rcall do_notify_resume
++ mask_interrupts
++ ld.w r1, r0[TI_flags]
++ rjmp 1b
++
++3: bld r1, TIF_BREAKPOINT
++ brcc syscall_exit_cont
++ mfsr r3, SYSREG_TLBEHI
++ lddsp r2, sp[REG_PC]
++ andl r3, 0xff, COH
++ lsl r3, 1
++ sbr r3, 30
++ sbr r3, 0
++ mtdr DBGREG_BWA2A, r2
++ mtdr DBGREG_BWC2A, r3
++ rjmp syscall_exit_cont
++
++
++ /* The slow path of the TLB miss handler */
++page_table_not_present:
++page_not_present:
++ tlbmiss_restore
++ sub sp, 4
++ stmts --sp, r0-lr
++ rcall save_full_context_ex
++ mfsr r12, SYSREG_ECR
++ mov r11, sp
++ rcall do_page_fault
++ rjmp ret_from_exception
++
++ /* This function expects to find offending PC in SYSREG_RAR_EX */
++save_full_context_ex:
++ mfsr r8, SYSREG_RSR_EX
++ mov r12, r8
++ andh r8, (MODE_MASK >> 16), COH
++ mfsr r11, SYSREG_RAR_EX
++ brne 2f
++
++1: pushm r11, r12 /* PC and SR */
++ unmask_exceptions
++ ret r12
++
++2: sub r10, sp, -(FRAME_SIZE_FULL - REG_LR)
++ stdsp sp[4], r10 /* replace saved SP */
++ rjmp 1b
++
++ /* Low-level exception handlers */
++handle_critical:
++ pushm r12
++ pushm r0-r12
++ rcall save_full_context_ex
++ mfsr r12, SYSREG_ECR
++ mov r11, sp
++ rcall do_critical_exception
++
++ /* We should never get here... */
++bad_return:
++ sub r12, pc, (. - 1f)
++ bral panic
++ .align 2
++1: .asciz "Return from critical exception!"
++
++ .align 1
++do_bus_error_write:
++ sub sp, 4
++ stmts --sp, r0-lr
++ rcall save_full_context_ex
++ mov r11, 1
++ rjmp 1f
++
++do_bus_error_read:
++ sub sp, 4
++ stmts --sp, r0-lr
++ rcall save_full_context_ex
++ mov r11, 0
++1: mfsr r12, SYSREG_BEAR
++ mov r10, sp
++ rcall do_bus_error
++ rjmp ret_from_exception
++
++ .align 1
++do_nmi_ll:
++ sub sp, 4
++ stmts --sp, r0-lr
++ /* FIXME: Make sure RAR_NMI and RSR_NMI are pushed instead of *_EX */
++ rcall save_full_context_ex
++ mfsr r12, SYSREG_ECR
++ mov r11, sp
++ rcall do_nmi
++ rjmp bad_return
++
++handle_address_fault:
++ sub sp, 4
++ stmts --sp, r0-lr
++ rcall save_full_context_ex
++ mfsr r12, SYSREG_ECR
++ mov r11, sp
++ rcall do_address_exception
++ rjmp ret_from_exception
++
++handle_protection_fault:
++ sub sp, 4
++ stmts --sp, r0-lr
++ rcall save_full_context_ex
++ mfsr r12, SYSREG_ECR
++ mov r11, sp
++ rcall do_page_fault
++ rjmp ret_from_exception
++
++ .align 1
++do_illegal_opcode_ll:
++ sub sp, 4
++ stmts --sp, r0-lr
++ rcall save_full_context_ex
++ mfsr r12, SYSREG_ECR
++ mov r11, sp
++ rcall do_illegal_opcode
++ rjmp ret_from_exception
++
++do_dtlb_modified:
++ pushm r0-r3
++ mfsr r1, SYSREG_TLBEAR
++ mfsr r0, SYSREG_PTBR
++ lsr r2, r1, PGDIR_SHIFT
++ ld.w r0, r0[r2 << 2]
++ lsl r1, (32 - PGDIR_SHIFT)
++ lsr r1, (32 - PGDIR_SHIFT) + PAGE_SHIFT
++
++ /* Translate to virtual address in P1 */
++ andl r0, 0xf000
++ sbr r0, 31
++ add r2, r0, r1 << 2
++ ld.w r3, r2[0]
++ sbr r3, _PAGE_BIT_DIRTY
++ mov r0, r3
++ st.w r2[0], r3
++
++ /* The page table is up-to-date. Update the TLB entry as well */
++ andl r0, lo(_PAGE_FLAGS_HARDWARE_MASK)
++ mtsr SYSREG_TLBELO, r0
++
++ /* MMUCR[DRP] is updated automatically, so let's go... */
++ tlbw
++
++ popm r0-r3
++ rete
++
++do_fpe_ll:
++ sub sp, 4
++ stmts --sp, r0-lr
++ rcall save_full_context_ex
++ unmask_interrupts
++ mov r12, 26
++ mov r11, sp
++ rcall do_fpe
++ rjmp ret_from_exception
++
++ret_from_exception:
++ mask_interrupts
++ lddsp r4, sp[REG_SR]
++ andh r4, (MODE_MASK >> 16), COH
++ brne fault_resume_kernel
++
++ get_thread_info r0
++ ld.w r1, r0[TI_flags]
++ andl r1, _TIF_WORK_MASK, COH
++ brne fault_exit_work
++
++fault_resume_user:
++ popm r8-r9
++ mask_exceptions
++ mtsr SYSREG_RAR_EX, r8
++ mtsr SYSREG_RSR_EX, r9
++ ldmts sp++, r0-lr
++ sub sp, -4
++ rete
++
++fault_resume_kernel:
++#ifdef CONFIG_PREEMPT
++ get_thread_info r0
++ ld.w r2, r0[TI_preempt_count]
++ cp.w r2, 0
++ brne 1f
++ ld.w r1, r0[TI_flags]
++ bld r1, TIF_NEED_RESCHED
++ brcc 1f
++ lddsp r4, sp[REG_SR]
++ bld r4, SYSREG_GM_OFFSET
++ brcs 1f
++ rcall preempt_schedule_irq
++1:
++#endif
++
++ popm r8-r9
++ mask_exceptions
++ mfsr r1, SYSREG_SR
++ mtsr SYSREG_RAR_EX, r8
++ mtsr SYSREG_RSR_EX, r9
++ popm lr
++ sub sp, -4 /* ignore SP */
++ popm r0-r12
++ sub sp, -4 /* ignore r12_orig */
++ rete
++
++irq_exit_work:
++ /* Switch to exception mode so that we can share the same code. */
++ mfsr r8, SYSREG_SR
++ cbr r8, SYSREG_M0_OFFSET
++ orh r8, hi(SYSREG_BIT(M1) | SYSREG_BIT(M2))
++ mtsr SYSREG_SR, r8
++ sub pc, -2
++ get_thread_info r0
++ ld.w r1, r0[TI_flags]
++
++fault_exit_work:
++ bld r1, TIF_NEED_RESCHED
++ brcc 1f
++ unmask_interrupts
++ rcall schedule
++ mask_interrupts
++ ld.w r1, r0[TI_flags]
++ rjmp fault_exit_work
++
++1: mov r2, _TIF_SIGPENDING | _TIF_RESTORE_SIGMASK
++ tst r1, r2
++ breq 2f
++ unmask_interrupts
++ mov r12, sp
++ mov r11, r0
++ rcall do_notify_resume
++ mask_interrupts
++ ld.w r1, r0[TI_flags]
++ rjmp fault_exit_work
++
++2: bld r1, TIF_BREAKPOINT
++ brcc fault_resume_user
++ mfsr r3, SYSREG_TLBEHI
++ lddsp r2, sp[REG_PC]
++ andl r3, 0xff, COH
++ lsl r3, 1
++ sbr r3, 30
++ sbr r3, 0
++ mtdr DBGREG_BWA2A, r2
++ mtdr DBGREG_BWC2A, r3
++ rjmp fault_resume_user
++
++ /* If we get a debug trap from privileged context we end up here */
++handle_debug_priv:
++ /* Fix up LR and SP in regs. r11 contains the mode we came from */
++ mfsr r8, SYSREG_SR
++ mov r9, r8
++ andh r8, hi(~MODE_MASK)
++ or r8, r11
++ mtsr SYSREG_SR, r8
++ sub pc, -2
++ stdsp sp[REG_LR], lr
++ mtsr SYSREG_SR, r9
++ sub pc, -2
++ sub r10, sp, -FRAME_SIZE_FULL
++ stdsp sp[REG_SP], r10
++ mov r12, sp
++ rcall do_debug_priv
++
++ /* Now, put everything back */
++ ssrf SR_EM_BIT
++ popm r10, r11
++ mtsr SYSREG_RAR_DBG, r10
++ mtsr SYSREG_RSR_DBG, r11
++ mfsr r8, SYSREG_SR
++ mov r9, r8
++ andh r8, hi(~MODE_MASK)
++ andh r11, hi(MODE_MASK)
++ or r8, r11
++ mtsr SYSREG_SR, r8
++ sub pc, -2
++ popm lr
++ mtsr SYSREG_SR, r9
++ sub pc, -2
++ sub sp, -4 /* skip SP */
++ popm r0-r12
++ sub sp, -4
++ retd
++
++ /*
++ * At this point, everything is masked, that is, interrupts,
++ * exceptions and debugging traps. We might get called from
++ * interrupt or exception context in some rare cases, but this
++ * will be taken care of by do_debug(), so we're not going to
++ * do a 100% correct context save here.
++ */
++handle_debug:
++ sub sp, 4 /* r12_orig */
++ stmts --sp, r0-lr
++ mfsr r10, SYSREG_RAR_DBG
++ mfsr r11, SYSREG_RSR_DBG
++ unmask_exceptions
++ pushm r10,r11
++ andh r11, (MODE_MASK >> 16), COH
++ brne handle_debug_priv
++
++ mov r12, sp
++ rcall do_debug
++
++ lddsp r10, sp[REG_SR]
++ andh r10, (MODE_MASK >> 16), COH
++ breq debug_resume_user
++
++debug_restore_all:
++ popm r10,r11
++ mask_exceptions
++ mtsr SYSREG_RSR_DBG, r11
++ mtsr SYSREG_RAR_DBG, r10
++ ldmts sp++, r0-lr
++ sub sp, -4
++ retd
++
++debug_resume_user:
++ get_thread_info r0
++ mask_interrupts
++
++ ld.w r1, r0[TI_flags]
++ andl r1, _TIF_DBGWORK_MASK, COH
++ breq debug_restore_all
++
++1: bld r1, TIF_NEED_RESCHED
++ brcc 2f
++ unmask_interrupts
++ rcall schedule
++ mask_interrupts
++ ld.w r1, r0[TI_flags]
++ rjmp 1b
++
++2: mov r2, _TIF_SIGPENDING | _TIF_RESTORE_SIGMASK
++ tst r1, r2
++ breq 3f
++ unmask_interrupts
++ mov r12, sp
++ mov r11, r0
++ rcall do_notify_resume
++ mask_interrupts
++ ld.w r1, r0[TI_flags]
++ rjmp 1b
++
++3: bld r1, TIF_SINGLE_STEP
++ brcc debug_restore_all
++ mfdr r2, DBGREG_DC
++ sbr r2, DC_SS_BIT
++ mtdr DBGREG_DC, r2
++ rjmp debug_restore_all
++
++ .set rsr_int0, SYSREG_RSR_INT0
++ .set rsr_int1, SYSREG_RSR_INT1
++ .set rsr_int2, SYSREG_RSR_INT2
++ .set rsr_int3, SYSREG_RSR_INT3
++ .set rar_int0, SYSREG_RAR_INT0
++ .set rar_int1, SYSREG_RAR_INT1
++ .set rar_int2, SYSREG_RAR_INT2
++ .set rar_int3, SYSREG_RAR_INT3
++
++ .macro IRQ_LEVEL level
++ .type irq_level\level, @function
++irq_level\level:
++ sub sp, 4 /* r12_orig */
++ stmts --sp,r0-lr
++ mfsr r8, rar_int\level
++ mfsr r9, rsr_int\level
++ pushm r8-r9
++
++ mov r11, sp
++ mov r12, \level
++
++ rcall do_IRQ
++
++ lddsp r4, sp[REG_SR]
++ andh r4, (MODE_MASK >> 16), COH
++#ifdef CONFIG_PREEMPT
++ brne 2f
++#else
++ brne 1f
++#endif
++
++ get_thread_info r0
++ ld.w r1, r0[TI_flags]
++ andl r1, _TIF_WORK_MASK, COH
++ brne irq_exit_work
++
++1: popm r8-r9
++ mtsr rar_int\level, r8
++ mtsr rsr_int\level, r9
++ ldmts sp++,r0-lr
++ sub sp, -4 /* ignore r12_orig */
++ rete
++
++#ifdef CONFIG_PREEMPT
++2:
++ get_thread_info r0
++ ld.w r2, r0[TI_preempt_count]
++ cp.w r2, 0
++ brne 1b
++ ld.w r1, r0[TI_flags]
++ bld r1, TIF_NEED_RESCHED
++ brcc 1b
++ lddsp r4, sp[REG_SR]
++ bld r4, SYSREG_GM_OFFSET
++ brcs 1b
++ rcall preempt_schedule_irq
++ rjmp 1b
++#endif
++ .endm
++
++ .section .irq.text,"ax",@progbits
++
++ .global irq_level0
++ .global irq_level1
++ .global irq_level2
++ .global irq_level3
++ IRQ_LEVEL 0
++ IRQ_LEVEL 1
++ IRQ_LEVEL 2
++ IRQ_LEVEL 3
+Index: linux-2.6.18-avr32/arch/avr32/kernel/head.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/head.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,42 @@
++/*
++ * Non-board-specific low-level startup code
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/linkage.h>
++
++#include <asm/page.h>
++#include <asm/thread_info.h>
++#include <asm/sysreg.h>
++
++ .section .init.text,"ax"
++ .global kernel_entry
++kernel_entry:
++ /* Initialize status register */
++ lddpc r0, init_sr
++ mtsr SYSREG_SR, r0
++
++ /* Set initial stack pointer */
++ lddpc sp, stack_addr
++ sub sp, -THREAD_SIZE
++
++#ifdef CONFIG_FRAME_POINTER
++ /* Mark last stack frame */
++ mov lr, 0
++ mov r7, 0
++#endif
++
++ /* Start the show */
++ lddpc pc, kernel_start_addr
++
++ .align 2
++init_sr:
++ .long 0x007f0000 /* Supervisor mode, everything masked */
++stack_addr:
++ .long init_thread_union
++kernel_start_addr:
++ .long start_kernel
+Index: linux-2.6.18-avr32/arch/avr32/kernel/init_task.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/init_task.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,38 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/module.h>
++#include <linux/fs.h>
++#include <linux/sched.h>
++#include <linux/init_task.h>
++#include <linux/mqueue.h>
++
++#include <asm/pgtable.h>
++
++static struct fs_struct init_fs = INIT_FS;
++static struct files_struct init_files = INIT_FILES;
++static struct signal_struct init_signals = INIT_SIGNALS(init_signals);
++static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
++struct mm_struct init_mm = INIT_MM(init_mm);
++
++EXPORT_SYMBOL(init_mm);
++
++/*
++ * Initial thread structure. Must be aligned on an 8192-byte boundary.
++ */
++union thread_union init_thread_union
++ __attribute__((__section__(".data.init_task"))) =
++ { INIT_THREAD_INFO(init_task) };
++
++/*
++ * Initial task structure.
++ *
++ * All other task structs will be allocated on slabs in fork.c
++ */
++struct task_struct init_task = INIT_TASK(init_task);
++
++EXPORT_SYMBOL(init_task);
+Index: linux-2.6.18-avr32/arch/avr32/kernel/irq.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/irq.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,71 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * Based on arch/i386/kernel/irq.c
++ * Copyright (C) 1992, 1998 Linus Torvalds, Ingo Molnar
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This file contains the code used by various IRQ handling routines:
++ * asking for different IRQ's should be done through these routines
++ * instead of just grabbing them. Thus setups with different IRQ numbers
++ * shouldn't result in any weird surprises, and installing new handlers
++ * should be easier.
++ *
++ * IRQ's are in fact implemented a bit like signal handlers for the kernel.
++ * Naturally it's not a 1:1 relation, but there are similarities.
++ */
++
++#include <linux/interrupt.h>
++#include <linux/irq.h>
++#include <linux/kernel_stat.h>
++#include <linux/proc_fs.h>
++#include <linux/seq_file.h>
++#include <linux/sysdev.h>
++
++/*
++ * 'what should we do if we get a hw irq event on an illegal vector'.
++ * each architecture has to answer this themselves.
++ */
++void ack_bad_irq(unsigned int irq)
++{
++ printk("unexpected IRQ %u\n", irq);
++}
++
++#ifdef CONFIG_PROC_FS
++int show_interrupts(struct seq_file *p, void *v)
++{
++ int i = *(loff_t *)v, cpu;
++ struct irqaction *action;
++ unsigned long flags;
++
++ if (i == 0) {
++ seq_puts(p, " ");
++ for_each_online_cpu(cpu)
++ seq_printf(p, "CPU%d ", cpu);
++ seq_putc(p, '\n');
++ }
++
++ if (i < NR_IRQS) {
++ spin_lock_irqsave(&irq_desc[i].lock, flags);
++ action = irq_desc[i].action;
++ if (!action)
++ goto unlock;
++
++ seq_printf(p, "%3d: ", i);
++ for_each_online_cpu(cpu)
++ seq_printf(p, "%10u ", kstat_cpu(cpu).irqs[i]);
++ seq_printf(p, " %s", action->name);
++ for (action = action->next; action; action = action->next)
++ seq_printf(p, ", %s", action->name);
++
++ seq_putc(p, '\n');
++ unlock:
++ spin_unlock_irqrestore(&irq_desc[i].lock, flags);
++ }
++
++ return 0;
++}
++#endif
+Index: linux-2.6.18-avr32/arch/avr32/kernel/kprobes.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/kprobes.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,270 @@
++/*
++ * Kernel Probes (KProbes)
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * Based on arch/ppc64/kernel/kprobes.c
++ * Copyright (C) IBM Corporation, 2002, 2004
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/kprobes.h>
++#include <linux/ptrace.h>
++
++#include <asm/cacheflush.h>
++#include <asm/kdebug.h>
++#include <asm/ocd.h>
++
++DEFINE_PER_CPU(struct kprobe *, current_kprobe);
++static unsigned long kprobe_status;
++static struct pt_regs jprobe_saved_regs;
++
++int __kprobes arch_prepare_kprobe(struct kprobe *p)
++{
++ int ret = 0;
++
++ if ((unsigned long)p->addr & 0x01) {
++ printk("Attempt to register kprobe at an unaligned address\n");
++ ret = -EINVAL;
++ }
++
++ /* XXX: Might be a good idea to check if p->addr is a valid
++ * kernel address as well... */
++
++ if (!ret) {
++ pr_debug("copy kprobe at %p\n", p->addr);
++ memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
++ p->opcode = *p->addr;
++ }
++
++ return ret;
++}
++
++void __kprobes arch_arm_kprobe(struct kprobe *p)
++{
++ pr_debug("arming kprobe at %p\n", p->addr);
++ *p->addr = BREAKPOINT_INSTRUCTION;
++ flush_icache_range((unsigned long)p->addr,
++ (unsigned long)p->addr + sizeof(kprobe_opcode_t));
++}
++
++void __kprobes arch_disarm_kprobe(struct kprobe *p)
++{
++ pr_debug("disarming kprobe at %p\n", p->addr);
++ *p->addr = p->opcode;
++ flush_icache_range((unsigned long)p->addr,
++ (unsigned long)p->addr + sizeof(kprobe_opcode_t));
++}
++
++static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
++{
++ unsigned long dc;
++
++ pr_debug("preparing to singlestep over %p (PC=%08lx)\n",
++ p->addr, regs->pc);
++
++ BUG_ON(!(sysreg_read(SR) & SYSREG_BIT(SR_D)));
++
++ dc = __mfdr(DBGREG_DC);
++ dc |= DC_SS;
++ __mtdr(DBGREG_DC, dc);
++
++ /*
++ * We must run the instruction from its original location
++ * since it may actually reference PC.
++ *
++ * TODO: Do the instruction replacement directly in icache.
++ */
++ *p->addr = p->opcode;
++ flush_icache_range((unsigned long)p->addr,
++ (unsigned long)p->addr + sizeof(kprobe_opcode_t));
++}
++
++static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs)
++{
++ unsigned long dc;
++
++ pr_debug("resuming execution at PC=%08lx\n", regs->pc);
++
++ dc = __mfdr(DBGREG_DC);
++ dc &= ~DC_SS;
++ __mtdr(DBGREG_DC, dc);
++
++ *p->addr = BREAKPOINT_INSTRUCTION;
++ flush_icache_range((unsigned long)p->addr,
++ (unsigned long)p->addr + sizeof(kprobe_opcode_t));
++}
++
++static void __kprobes set_current_kprobe(struct kprobe *p)
++{
++ __get_cpu_var(current_kprobe) = p;
++}
++
++static int __kprobes kprobe_handler(struct pt_regs *regs)
++{
++ struct kprobe *p;
++ void *addr = (void *)regs->pc;
++ int ret = 0;
++
++ pr_debug("kprobe_handler: kprobe_running=%p\n",
++ kprobe_running());
++
++ /*
++ * We don't want to be preempted for the entire
++ * duration of kprobe processing
++ */
++ preempt_disable();
++
++ /* Check that we're not recursing */
++ if (kprobe_running()) {
++ p = get_kprobe(addr);
++ if (p) {
++ if (kprobe_status == KPROBE_HIT_SS) {
++ printk("FIXME: kprobe hit while single-stepping!\n");
++ goto no_kprobe;
++ }
++
++ printk("FIXME: kprobe hit while handling another kprobe\n");
++ goto no_kprobe;
++ } else {
++ p = kprobe_running();
++ if (p->break_handler && p->break_handler(p, regs))
++ goto ss_probe;
++ }
++ /* If it's not ours, can't be delete race, (we hold lock). */
++ goto no_kprobe;
++ }
++
++ p = get_kprobe(addr);
++ if (!p)
++ goto no_kprobe;
++
++ kprobe_status = KPROBE_HIT_ACTIVE;
++ set_current_kprobe(p);
++ if (p->pre_handler && p->pre_handler(p, regs))
++ /* handler has already set things up, so skip ss setup */
++ return 1;
++
++ss_probe:
++ prepare_singlestep(p, regs);
++ kprobe_status = KPROBE_HIT_SS;
++ return 1;
++
++no_kprobe:
++ return ret;
++}
++
++static int __kprobes post_kprobe_handler(struct pt_regs *regs)
++{
++ struct kprobe *cur = kprobe_running();
++
++ pr_debug("post_kprobe_handler, cur=%p\n", cur);
++
++ if (!cur)
++ return 0;
++
++ if (cur->post_handler) {
++ kprobe_status = KPROBE_HIT_SSDONE;
++ cur->post_handler(cur, regs, 0);
++ }
++
++ resume_execution(cur, regs);
++ reset_current_kprobe();
++ preempt_enable_no_resched();
++
++ return 1;
++}
++
++static int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr)
++{
++ struct kprobe *cur = kprobe_running();
++
++ pr_debug("kprobe_fault_handler: trapnr=%d\n", trapnr);
++
++ if (cur->fault_handler && cur->fault_handler(cur, regs, trapnr))
++ return 1;
++
++ if (kprobe_status & KPROBE_HIT_SS) {
++ resume_execution(cur, regs);
++ preempt_enable_no_resched();
++ }
++ return 0;
++}
++
++/*
++ * Wrapper routine to for handling exceptions.
++ */
++int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
++ unsigned long val, void *data)
++{
++ struct die_args *args = (struct die_args *)data;
++ int ret = NOTIFY_DONE;
++
++ pr_debug("kprobe_exceptions_notify: val=%lu, data=%p\n",
++ val, data);
++
++ switch (val) {
++ case DIE_BREAKPOINT:
++ if (kprobe_handler(args->regs))
++ ret = NOTIFY_STOP;
++ break;
++ case DIE_SSTEP:
++ if (post_kprobe_handler(args->regs))
++ ret = NOTIFY_STOP;
++ break;
++ case DIE_FAULT:
++ if (kprobe_running()
++ && kprobe_fault_handler(args->regs, args->trapnr))
++ ret = NOTIFY_STOP;
++ break;
++ default:
++ break;
++ }
++
++ return ret;
++}
++
++int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
++{
++ struct jprobe *jp = container_of(p, struct jprobe, kp);
++
++ memcpy(&jprobe_saved_regs, regs, sizeof(struct pt_regs));
++
++ /*
++ * TODO: We should probably save some of the stack here as
++ * well, since gcc may pass arguments on the stack for certain
++ * functions (lots of arguments, large aggregates, varargs)
++ */
++
++ /* setup return addr to the jprobe handler routine */
++ regs->pc = (unsigned long)jp->entry;
++ return 1;
++}
++
++void __kprobes jprobe_return(void)
++{
++ asm volatile("breakpoint" ::: "memory");
++}
++
++int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
++{
++ /*
++ * FIXME - we should ideally be validating that we got here 'cos
++ * of the "trap" in jprobe_return() above, before restoring the
++ * saved regs...
++ */
++ memcpy(regs, &jprobe_saved_regs, sizeof(struct pt_regs));
++ return 1;
++}
++
++int __init arch_init_kprobes(void)
++{
++ printk("KPROBES: Enabling monitor mode (MM|DBE)...\n");
++ __mtdr(DBGREG_DC, DC_MM | DC_DBE);
++
++ /* TODO: Register kretprobe trampoline */
++ return 0;
++}
+Index: linux-2.6.18-avr32/arch/avr32/kernel/module.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/module.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,324 @@
++/*
++ * AVR32-specific kernel module loader
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * GOT initialization parts are based on the s390 version
++ * Copyright (C) 2002, 2003 IBM Deutschland Entwicklung GmbH,
++ * IBM Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/moduleloader.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/elf.h>
++#include <linux/vmalloc.h>
++
++void *module_alloc(unsigned long size)
++{
++ if (size == 0)
++ return NULL;
++ return vmalloc(size);
++}
++
++void module_free(struct module *mod, void *module_region)
++{
++ vfree(mod->arch.syminfo);
++ mod->arch.syminfo = NULL;
++
++ vfree(module_region);
++ /* FIXME: if module_region == mod->init_region, trim exception
++ * table entries. */
++}
++
++static inline int check_rela(Elf32_Rela *rela, struct module *module,
++ char *strings, Elf32_Sym *symbols)
++{
++ struct mod_arch_syminfo *info;
++
++ info = module->arch.syminfo + ELF32_R_SYM(rela->r_info);
++ switch (ELF32_R_TYPE(rela->r_info)) {
++ case R_AVR32_GOT32:
++ case R_AVR32_GOT16:
++ case R_AVR32_GOT8:
++ case R_AVR32_GOT21S:
++ case R_AVR32_GOT18SW: /* mcall */
++ case R_AVR32_GOT16S: /* ld.w */
++ if (rela->r_addend != 0) {
++ printk(KERN_ERR
++ "GOT relocation against %s at offset %u with addend\n",
++ strings + symbols[ELF32_R_SYM(rela->r_info)].st_name,
++ rela->r_offset);
++ return -ENOEXEC;
++ }
++ if (info->got_offset == -1UL) {
++ info->got_offset = module->arch.got_size;
++ module->arch.got_size += sizeof(void *);
++ }
++ pr_debug("GOT[%3lu] %s\n", info->got_offset,
++ strings + symbols[ELF32_R_SYM(rela->r_info)].st_name);
++ break;
++ }
++
++ return 0;
++}
++
++int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
++ char *secstrings, struct module *module)
++{
++ Elf32_Shdr *symtab;
++ Elf32_Sym *symbols;
++ Elf32_Rela *rela;
++ char *strings;
++ int nrela, i, j;
++ int ret;
++
++ /* Find the symbol table */
++ symtab = NULL;
++ for (i = 0; i < hdr->e_shnum; i++)
++ switch (sechdrs[i].sh_type) {
++ case SHT_SYMTAB:
++ symtab = &sechdrs[i];
++ break;
++ }
++ if (!symtab) {
++ printk(KERN_ERR "module %s: no symbol table\n", module->name);
++ return -ENOEXEC;
++ }
++
++ /* Allocate room for one syminfo structure per symbol. */
++ module->arch.nsyms = symtab->sh_size / sizeof(Elf_Sym);
++ module->arch.syminfo = vmalloc(module->arch.nsyms
++ * sizeof(struct mod_arch_syminfo));
++ if (!module->arch.syminfo)
++ return -ENOMEM;
++
++ symbols = (void *)hdr + symtab->sh_offset;
++ strings = (void *)hdr + sechdrs[symtab->sh_link].sh_offset;
++ for (i = 0; i < module->arch.nsyms; i++) {
++ if (symbols[i].st_shndx == SHN_UNDEF &&
++ strcmp(strings + symbols[i].st_name,
++ "_GLOBAL_OFFSET_TABLE_") == 0)
++ /* "Define" it as absolute. */
++ symbols[i].st_shndx = SHN_ABS;
++ module->arch.syminfo[i].got_offset = -1UL;
++ module->arch.syminfo[i].got_initialized = 0;
++ }
++
++ /* Allocate GOT entries for symbols that need it. */
++ module->arch.got_size = 0;
++ for (i = 0; i < hdr->e_shnum; i++) {
++ if (sechdrs[i].sh_type != SHT_RELA)
++ continue;
++ nrela = sechdrs[i].sh_size / sizeof(Elf32_Rela);
++ rela = (void *)hdr + sechdrs[i].sh_offset;
++ for (j = 0; j < nrela; j++) {
++ ret = check_rela(rela + j, module,
++ strings, symbols);
++ if (ret)
++ goto out_free_syminfo;
++ }
++ }
++
++ /*
++ * Increase core size to make room for GOT and set start
++ * offset for GOT.
++ */
++ module->core_size = ALIGN(module->core_size, 4);
++ module->arch.got_offset = module->core_size;
++ module->core_size += module->arch.got_size;
++
++ return 0;
++
++out_free_syminfo:
++ vfree(module->arch.syminfo);
++ module->arch.syminfo = NULL;
++
++ return ret;
++}
++
++static inline int reloc_overflow(struct module *module, const char *reloc_name,
++ Elf32_Addr relocation)
++{
++ printk(KERN_ERR "module %s: Value %lx does not fit relocation %s\n",
++ module->name, (unsigned long)relocation, reloc_name);
++ return -ENOEXEC;
++}
++
++#define get_u16(loc) (*((uint16_t *)loc))
++#define put_u16(loc, val) (*((uint16_t *)loc) = (val))
++
++int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab,
++ unsigned int symindex, unsigned int relindex,
++ struct module *module)
++{
++ Elf32_Shdr *symsec = sechdrs + symindex;
++ Elf32_Shdr *relsec = sechdrs + relindex;
++ Elf32_Shdr *dstsec = sechdrs + relsec->sh_info;
++ Elf32_Rela *rel = (void *)relsec->sh_addr;
++ unsigned int i;
++ int ret = 0;
++
++ for (i = 0; i < relsec->sh_size / sizeof(Elf32_Rela); i++, rel++) {
++ struct mod_arch_syminfo *info;
++ Elf32_Sym *sym;
++ Elf32_Addr relocation;
++ uint32_t *location;
++ uint32_t value;
++
++ location = (void *)dstsec->sh_addr + rel->r_offset;
++ sym = (Elf32_Sym *)symsec->sh_addr + ELF32_R_SYM(rel->r_info);
++ relocation = sym->st_value + rel->r_addend;
++
++ info = module->arch.syminfo + ELF32_R_SYM(rel->r_info);
++
++ /* Initialize GOT entry if necessary */
++ switch (ELF32_R_TYPE(rel->r_info)) {
++ case R_AVR32_GOT32:
++ case R_AVR32_GOT16:
++ case R_AVR32_GOT8:
++ case R_AVR32_GOT21S:
++ case R_AVR32_GOT18SW:
++ case R_AVR32_GOT16S:
++ if (!info->got_initialized) {
++ Elf32_Addr *gotent;
++
++ gotent = (module->module_core
++ + module->arch.got_offset
++ + info->got_offset);
++ *gotent = relocation;
++ info->got_initialized = 1;
++ }
++
++ relocation = info->got_offset;
++ break;
++ }
++
++ switch (ELF32_R_TYPE(rel->r_info)) {
++ case R_AVR32_32:
++ case R_AVR32_32_CPENT:
++ *location = relocation;
++ break;
++ case R_AVR32_22H_PCREL:
++ relocation -= (Elf32_Addr)location;
++ if ((relocation & 0xffe00001) != 0
++ && (relocation & 0xffc00001) != 0xffc00000)
++ return reloc_overflow(module,
++ "R_AVR32_22H_PCREL",
++ relocation);
++ relocation >>= 1;
++
++ value = *location;
++ value = ((value & 0xe1ef0000)
++ | (relocation & 0xffff)
++ | ((relocation & 0x10000) << 4)
++ | ((relocation & 0x1e0000) << 8));
++ *location = value;
++ break;
++ case R_AVR32_11H_PCREL:
++ relocation -= (Elf32_Addr)location;
++ if ((relocation & 0xfffffc01) != 0
++ && (relocation & 0xfffff801) != 0xfffff800)
++ return reloc_overflow(module,
++ "R_AVR32_11H_PCREL",
++ relocation);
++ value = get_u16(location);
++ value = ((value & 0xf00c)
++ | ((relocation & 0x1fe) << 3)
++ | ((relocation & 0x600) >> 9));
++ put_u16(location, value);
++ break;
++ case R_AVR32_9H_PCREL:
++ relocation -= (Elf32_Addr)location;
++ if ((relocation & 0xffffff01) != 0
++ && (relocation & 0xfffffe01) != 0xfffffe00)
++ return reloc_overflow(module,
++ "R_AVR32_9H_PCREL",
++ relocation);
++ value = get_u16(location);
++ value = ((value & 0xf00f)
++ | ((relocation & 0x1fe) << 3));
++ put_u16(location, value);
++ break;
++ case R_AVR32_9UW_PCREL:
++ relocation -= ((Elf32_Addr)location) & 0xfffffffc;
++ if ((relocation & 0xfffffc03) != 0)
++ return reloc_overflow(module,
++ "R_AVR32_9UW_PCREL",
++ relocation);
++ value = get_u16(location);
++ value = ((value & 0xf80f)
++ | ((relocation & 0x1fc) << 2));
++ put_u16(location, value);
++ break;
++ case R_AVR32_GOTPC:
++ /*
++ * R6 = PC - (PC - GOT)
++ *
++ * At this point, relocation contains the
++ * value of PC. Just subtract the value of
++ * GOT, and we're done.
++ */
++ pr_debug("GOTPC: PC=0x%x, got_offset=0x%lx, core=0x%p\n",
++ relocation, module->arch.got_offset,
++ module->module_core);
++ relocation -= ((unsigned long)module->module_core
++ + module->arch.got_offset);
++ *location = relocation;
++ break;
++ case R_AVR32_GOT18SW:
++ if ((relocation & 0xfffe0003) != 0
++ && (relocation & 0xfffc0003) != 0xffff0000)
++ return reloc_overflow(module, "R_AVR32_GOT18SW",
++ relocation);
++ relocation >>= 2;
++ /* fall through */
++ case R_AVR32_GOT16S:
++ if ((relocation & 0xffff8000) != 0
++ && (relocation & 0xffff0000) != 0xffff0000)
++ return reloc_overflow(module, "R_AVR32_GOT16S",
++ relocation);
++ pr_debug("GOT reloc @ 0x%x -> %u\n",
++ rel->r_offset, relocation);
++ value = *location;
++ value = ((value & 0xffff0000)
++ | (relocation & 0xffff));
++ *location = value;
++ break;
++
++ default:
++ printk(KERN_ERR "module %s: Unknown relocation: %u\n",
++ module->name, ELF32_R_TYPE(rel->r_info));
++ return -ENOEXEC;
++ }
++ }
++
++ return ret;
++}
++
++int apply_relocate(Elf32_Shdr *sechdrs, const char *strtab,
++ unsigned int symindex, unsigned int relindex,
++ struct module *module)
++{
++ printk(KERN_ERR "module %s: REL relocations are not supported\n",
++ module->name);
++ return -ENOEXEC;
++}
++
++int module_finalize(const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs,
++ struct module *module)
++{
++ vfree(module->arch.syminfo);
++ module->arch.syminfo = NULL;
++
++ return 0;
++}
++
++void module_arch_cleanup(struct module *module)
++{
++
++}
+Index: linux-2.6.18-avr32/arch/avr32/kernel/process.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/process.c 2006-12-04 12:05:20.000000000 +0100
+@@ -0,0 +1,283 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/sched.h>
++#include <linux/module.h>
++#include <linux/kallsyms.h>
++#include <linux/fs.h>
++#include <linux/ptrace.h>
++#include <linux/reboot.h>
++#include <linux/unistd.h>
++
++#include <asm/sysreg.h>
++#include <asm/ocd.h>
++
++void (*pm_power_off)(void) = NULL;
++EXPORT_SYMBOL(pm_power_off);
++
++/*
++ * This file handles the architecture-dependent parts of process handling..
++ */
++
++void cpu_idle(void)
++{
++ /* endless idle loop with no priority at all */
++ while (1) {
++ /* TODO: Enter sleep mode */
++ while (!need_resched())
++ cpu_relax();
++ preempt_enable_no_resched();
++ schedule();
++ preempt_disable();
++ }
++}
++
++void machine_halt(void)
++{
++ /*
++ * Enter Stop mode. The 32 kHz oscillator will keep running so
++ * the RTC will keep the time properly and the system will
++ * boot quickly.
++ */
++ asm volatile("sleep 3\n\t"
++ "sub pc, -2");
++}
++
++void machine_power_off(void)
++{
++}
++
++void machine_restart(char *cmd)
++{
++ __mtdr(DBGREG_DC, DC_DBE);
++ __mtdr(DBGREG_DC, DC_RES);
++ while (1) ;
++}
++
++/*
++ * PC is actually discarded when returning from a system call -- the
++ * return address must be stored in LR. This function will make sure
++ * LR points to do_exit before starting the thread.
++ *
++ * Also, when returning from fork(), r12 is 0, so we must copy the
++ * argument as well.
++ *
++ * r0 : The argument to the main thread function
++ * r1 : The address of do_exit
++ * r2 : The address of the main thread function
++ */
++asmlinkage extern void kernel_thread_helper(void);
++__asm__(" .type kernel_thread_helper, @function\n"
++ "kernel_thread_helper:\n"
++ " mov r12, r0\n"
++ " mov lr, r2\n"
++ " mov pc, r1\n"
++ " .size kernel_thread_helper, . - kernel_thread_helper");
++
++int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
++{
++ struct pt_regs regs;
++
++ memset(&regs, 0, sizeof(regs));
++
++ regs.r0 = (unsigned long)arg;
++ regs.r1 = (unsigned long)fn;
++ regs.r2 = (unsigned long)do_exit;
++ regs.lr = (unsigned long)kernel_thread_helper;
++ regs.pc = (unsigned long)kernel_thread_helper;
++ regs.sr = MODE_SUPERVISOR;
++
++ return do_fork(flags | CLONE_VM | CLONE_UNTRACED,
++ 0, &regs, 0, NULL, NULL);
++}
++EXPORT_SYMBOL(kernel_thread);
++
++/*
++ * Free current thread data structures etc
++ */
++void exit_thread(void)
++{
++ /* nothing to do */
++}
++
++void flush_thread(void)
++{
++ /* nothing to do */
++}
++
++void release_thread(struct task_struct *dead_task)
++{
++ /* do nothing */
++}
++
++static const char *cpu_modes[] = {
++ "Application", "Supervisor", "Interrupt level 0", "Interrupt level 1",
++ "Interrupt level 2", "Interrupt level 3", "Exception", "NMI"
++};
++
++void show_regs(struct pt_regs *regs)
++{
++ unsigned long sp = regs->sp;
++ unsigned long lr = regs->lr;
++ unsigned long mode = (regs->sr & MODE_MASK) >> MODE_SHIFT;
++
++ if (!user_mode(regs))
++ sp = (unsigned long)regs + FRAME_SIZE_FULL;
++
++ print_symbol("PC is at %s\n", instruction_pointer(regs));
++ print_symbol("LR is at %s\n", lr);
++ printk("pc : [<%08lx>] lr : [<%08lx>] %s\n"
++ "sp : %08lx r12: %08lx r11: %08lx\n",
++ instruction_pointer(regs),
++ lr, print_tainted(), sp, regs->r12, regs->r11);
++ printk("r10: %08lx r9 : %08lx r8 : %08lx\n",
++ regs->r10, regs->r9, regs->r8);
++ printk("r7 : %08lx r6 : %08lx r5 : %08lx r4 : %08lx\n",
++ regs->r7, regs->r6, regs->r5, regs->r4);
++ printk("r3 : %08lx r2 : %08lx r1 : %08lx r0 : %08lx\n",
++ regs->r3, regs->r2, regs->r1, regs->r0);
++ printk("Flags: %c%c%c%c%c\n",
++ regs->sr & SR_Q ? 'Q' : 'q',
++ regs->sr & SR_V ? 'V' : 'v',
++ regs->sr & SR_N ? 'N' : 'n',
++ regs->sr & SR_Z ? 'Z' : 'z',
++ regs->sr & SR_C ? 'C' : 'c');
++ printk("Mode bits: %c%c%c%c%c%c%c%c%c\n",
++ regs->sr & SR_H ? 'H' : 'h',
++ regs->sr & SR_R ? 'R' : 'r',
++ regs->sr & SR_J ? 'J' : 'j',
++ regs->sr & SR_EM ? 'E' : 'e',
++ regs->sr & SR_I3M ? '3' : '.',
++ regs->sr & SR_I2M ? '2' : '.',
++ regs->sr & SR_I1M ? '1' : '.',
++ regs->sr & SR_I0M ? '0' : '.',
++ regs->sr & SR_GM ? 'G' : 'g');
++ printk("CPU Mode: %s\n", cpu_modes[mode]);
++
++ show_trace(NULL, (unsigned long *)sp, regs);
++}
++EXPORT_SYMBOL(show_regs);
++
++/* Fill in the fpu structure for a core dump. This is easy -- we don't have any */
++int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)
++{
++ /* Not valid */
++ return 0;
++}
++
++asmlinkage void ret_from_fork(void);
++
++int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
++ unsigned long unused,
++ struct task_struct *p, struct pt_regs *regs)
++{
++ struct pt_regs *childregs;
++
++ childregs = ((struct pt_regs *)(THREAD_SIZE + (unsigned long)p->thread_info)) - 1;
++ *childregs = *regs;
++
++ if (user_mode(regs))
++ childregs->sp = usp;
++ else
++ childregs->sp = (unsigned long)p->thread_info + THREAD_SIZE;
++
++ childregs->r12 = 0; /* Set return value for child */
++
++ p->thread.cpu_context.sr = MODE_SUPERVISOR | SR_GM;
++ p->thread.cpu_context.ksp = (unsigned long)childregs;
++ p->thread.cpu_context.pc = (unsigned long)ret_from_fork;
++
++ return 0;
++}
++
++/* r12-r8 are dummy parameters to force the compiler to use the stack */
++asmlinkage int sys_fork(struct pt_regs *regs)
++{
++ return do_fork(SIGCHLD, regs->sp, regs, 0, NULL, NULL);
++}
++
++asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp,
++ unsigned long parent_tidptr,
++ unsigned long child_tidptr, struct pt_regs *regs)
++{
++ if (!newsp)
++ newsp = regs->sp;
++ return do_fork(clone_flags, newsp, regs, 0,
++ (int __user *)parent_tidptr,
++ (int __user *)child_tidptr);
++}
++
++asmlinkage int sys_vfork(struct pt_regs *regs)
++{
++ return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->sp, regs,
++ 0, NULL, NULL);
++}
++
++asmlinkage int sys_execve(char __user *ufilename, char __user *__user *uargv,
++ char __user *__user *uenvp, struct pt_regs *regs)
++{
++ int error;
++ char *filename;
++
++ filename = getname(ufilename);
++ error = PTR_ERR(filename);
++ if (IS_ERR(filename))
++ goto out;
++
++ error = do_execve(filename, uargv, uenvp, regs);
++ if (error == 0)
++ current->ptrace &= ~PT_DTRACE;
++ putname(filename);
++
++out:
++ return error;
++}
++
++
++/*
++ * This function is supposed to answer the question "who called
++ * schedule()?"
++ */
++unsigned long get_wchan(struct task_struct *p)
++{
++ unsigned long pc;
++ unsigned long stack_page;
++
++ if (!p || p == current || p->state == TASK_RUNNING)
++ return 0;
++
++ stack_page = (unsigned long)p->thread_info;
++ BUG_ON(!stack_page);
++
++ /*
++ * The stored value of PC is either the address right after
++ * the call to __switch_to() or ret_from_fork.
++ */
++ pc = thread_saved_pc(p);
++ if (in_sched_functions(pc)) {
++#ifdef CONFIG_FRAME_POINTER
++ unsigned long fp = p->thread.cpu_context.r7;
++ BUG_ON(fp < stack_page || fp > (THREAD_SIZE + stack_page));
++ pc = *(unsigned long *)fp;
++#else
++ /*
++ * We depend on the frame size of schedule here, which
++ * is actually quite ugly. It might be possible to
++ * determine the frame size automatically at build
++ * time by doing this:
++ * - compile sched.c
++ * - disassemble the resulting sched.o
++ * - look for 'sub sp,??' shortly after '<schedule>:'
++ */
++ unsigned long sp = p->thread.cpu_context.ksp + 16;
++ BUG_ON(sp < stack_page || sp > (THREAD_SIZE + stack_page));
++ pc = *(unsigned long *)sp;
++#endif
++ }
++
++ return pc;
++}
+Index: linux-2.6.18-avr32/arch/avr32/kernel/ptrace.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/ptrace.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,371 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#undef DEBUG
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/mm.h>
++#include <linux/smp_lock.h>
++#include <linux/ptrace.h>
++#include <linux/errno.h>
++#include <linux/user.h>
++#include <linux/security.h>
++#include <linux/unistd.h>
++#include <linux/notifier.h>
++
++#include <asm/traps.h>
++#include <asm/uaccess.h>
++#include <asm/ocd.h>
++#include <asm/mmu_context.h>
++#include <asm/kdebug.h>
++
++static struct pt_regs *get_user_regs(struct task_struct *tsk)
++{
++ return (struct pt_regs *)((unsigned long) tsk->thread_info +
++ THREAD_SIZE - sizeof(struct pt_regs));
++}
++
++static void ptrace_single_step(struct task_struct *tsk)
++{
++ pr_debug("ptrace_single_step: pid=%u, SR=0x%08lx\n",
++ tsk->pid, tsk->thread.cpu_context.sr);
++ if (!(tsk->thread.cpu_context.sr & SR_D)) {
++ /*
++ * Set a breakpoint at the current pc to force the
++ * process into debug mode. The syscall/exception
++ * exit code will set a breakpoint at the return
++ * address when this flag is set.
++ */
++ pr_debug("ptrace_single_step: Setting TIF_BREAKPOINT\n");
++ set_tsk_thread_flag(tsk, TIF_BREAKPOINT);
++ }
++
++ /* The monitor code will do the actual step for us */
++ set_tsk_thread_flag(tsk, TIF_SINGLE_STEP);
++}
++
++/*
++ * Called by kernel/ptrace.c when detaching
++ *
++ * Make sure any single step bits, etc. are not set
++ */
++void ptrace_disable(struct task_struct *child)
++{
++ clear_tsk_thread_flag(child, TIF_SINGLE_STEP);
++}
++
++/*
++ * Handle hitting a breakpoint
++ */
++static void ptrace_break(struct task_struct *tsk, struct pt_regs *regs)
++{
++ siginfo_t info;
++
++ info.si_signo = SIGTRAP;
++ info.si_errno = 0;
++ info.si_code = TRAP_BRKPT;
++ info.si_addr = (void __user *)instruction_pointer(regs);
++
++ pr_debug("ptrace_break: Sending SIGTRAP to PID %u (pc = 0x%p)\n",
++ tsk->pid, info.si_addr);
++ force_sig_info(SIGTRAP, &info, tsk);
++}
++
++/*
++ * Read the word at offset "offset" into the task's "struct user". We
++ * actually access the pt_regs struct stored on the kernel stack.
++ */
++static int ptrace_read_user(struct task_struct *tsk, unsigned long offset,
++ unsigned long __user *data)
++{
++ unsigned long *regs;
++ unsigned long value;
++
++ pr_debug("ptrace_read_user(%p, %#lx, %p)\n",
++ tsk, offset, data);
++
++ if (offset & 3 || offset >= sizeof(struct user)) {
++ printk("ptrace_read_user: invalid offset 0x%08lx\n", offset);
++ return -EIO;
++ }
++
++ regs = (unsigned long *)get_user_regs(tsk);
++
++ value = 0;
++ if (offset < sizeof(struct pt_regs))
++ value = regs[offset / sizeof(regs[0])];
++
++ return put_user(value, data);
++}
++
++/*
++ * Write the word "value" to offset "offset" into the task's "struct
++ * user". We actually access the pt_regs struct stored on the kernel
++ * stack.
++ */
++static int ptrace_write_user(struct task_struct *tsk, unsigned long offset,
++ unsigned long value)
++{
++ unsigned long *regs;
++
++ if (offset & 3 || offset >= sizeof(struct user)) {
++ printk("ptrace_write_user: invalid offset 0x%08lx\n", offset);
++ return -EIO;
++ }
++
++ if (offset >= sizeof(struct pt_regs))
++ return 0;
++
++ regs = (unsigned long *)get_user_regs(tsk);
++ regs[offset / sizeof(regs[0])] = value;
++
++ return 0;
++}
++
++static int ptrace_getregs(struct task_struct *tsk, void __user *uregs)
++{
++ struct pt_regs *regs = get_user_regs(tsk);
++
++ return copy_to_user(uregs, regs, sizeof(*regs)) ? -EFAULT : 0;
++}
++
++static int ptrace_setregs(struct task_struct *tsk, const void __user *uregs)
++{
++ struct pt_regs newregs;
++ int ret;
++
++ ret = -EFAULT;
++ if (copy_from_user(&newregs, uregs, sizeof(newregs)) == 0) {
++ struct pt_regs *regs = get_user_regs(tsk);
++
++ ret = -EINVAL;
++ if (valid_user_regs(&newregs)) {
++ *regs = newregs;
++ ret = 0;
++ }
++ }
++
++ return ret;
++}
++
++long arch_ptrace(struct task_struct *child, long request, long addr, long data)
++{
++ unsigned long tmp;
++ int ret;
++
++ pr_debug("arch_ptrace(%ld, %d, %#lx, %#lx)\n",
++ request, child->pid, addr, data);
++
++ pr_debug("ptrace: Enabling monitor mode...\n");
++ __mtdr(DBGREG_DC, __mfdr(DBGREG_DC) | DC_MM | DC_DBE);
++
++ switch (request) {
++ /* Read the word at location addr in the child process */
++ case PTRACE_PEEKTEXT:
++ case PTRACE_PEEKDATA:
++ ret = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
++ if (ret == sizeof(tmp))
++ ret = put_user(tmp, (unsigned long __user *)data);
++ else
++ ret = -EIO;
++ break;
++
++ case PTRACE_PEEKUSR:
++ ret = ptrace_read_user(child, addr,
++ (unsigned long __user *)data);
++ break;
++
++ /* Write the word in data at location addr */
++ case PTRACE_POKETEXT:
++ case PTRACE_POKEDATA:
++ ret = access_process_vm(child, addr, &data, sizeof(data), 1);
++ if (ret == sizeof(data))
++ ret = 0;
++ else
++ ret = -EIO;
++ break;
++
++ case PTRACE_POKEUSR:
++ ret = ptrace_write_user(child, addr, data);
++ break;
++
++ /* continue and stop at next (return from) syscall */
++ case PTRACE_SYSCALL:
++ /* restart after signal */
++ case PTRACE_CONT:
++ ret = -EIO;
++ if (!valid_signal(data))
++ break;
++ if (request == PTRACE_SYSCALL)
++ set_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
++ else
++ clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
++ child->exit_code = data;
++ /* XXX: Are we sure no breakpoints are active here? */
++ wake_up_process(child);
++ ret = 0;
++ break;
++
++ /*
++ * Make the child exit. Best I can do is send it a
++ * SIGKILL. Perhaps it should be put in the status that it
++ * wants to exit.
++ */
++ case PTRACE_KILL:
++ ret = 0;
++ if (child->exit_state == EXIT_ZOMBIE)
++ break;
++ child->exit_code = SIGKILL;
++ wake_up_process(child);
++ break;
++
++ /*
++ * execute single instruction.
++ */
++ case PTRACE_SINGLESTEP:
++ ret = -EIO;
++ if (!valid_signal(data))
++ break;
++ clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE);
++ ptrace_single_step(child);
++ child->exit_code = data;
++ wake_up_process(child);
++ ret = 0;
++ break;
++
++ /* Detach a process that was attached */
++ case PTRACE_DETACH:
++ ret = ptrace_detach(child, data);
++ break;
++
++ case PTRACE_GETREGS:
++ ret = ptrace_getregs(child, (void __user *)data);
++ break;
++
++ case PTRACE_SETREGS:
++ ret = ptrace_setregs(child, (const void __user *)data);
++ break;
++
++ default:
++ ret = ptrace_request(child, request, addr, data);
++ break;
++ }
++
++ pr_debug("sys_ptrace returning %d (DC = 0x%08lx)\n", ret, __mfdr(DBGREG_DC));
++ return ret;
++}
++
++asmlinkage void syscall_trace(void)
++{
++ pr_debug("syscall_trace called\n");
++ if (!test_thread_flag(TIF_SYSCALL_TRACE))
++ return;
++ if (!(current->ptrace & PT_PTRACED))
++ return;
++
++ pr_debug("syscall_trace: notifying parent\n");
++ /* The 0x80 provides a way for the tracing parent to
++ * distinguish between a syscall stop and SIGTRAP delivery */
++ ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
++ ? 0x80 : 0));
++
++ /*
++ * this isn't the same as continuing with a signal, but it
++ * will do for normal use. strace only continues with a
++ * signal if the stopping signal is not SIGTRAP. -brl
++ */
++ if (current->exit_code) {
++ pr_debug("syscall_trace: sending signal %d to PID %u\n",
++ current->exit_code, current->pid);
++ send_sig(current->exit_code, current, 1);
++ current->exit_code = 0;
++ }
++}
++
++asmlinkage void do_debug_priv(struct pt_regs *regs)
++{
++ unsigned long dc, ds;
++ unsigned long die_val;
++
++ ds = __mfdr(DBGREG_DS);
++
++ pr_debug("do_debug_priv: pc = %08lx, ds = %08lx\n", regs->pc, ds);
++
++ if (ds & DS_SSS)
++ die_val = DIE_SSTEP;
++ else
++ die_val = DIE_BREAKPOINT;
++
++ if (notify_die(die_val, regs, 0, SIGTRAP) == NOTIFY_STOP)
++ return;
++
++ if (likely(ds & DS_SSS)) {
++ extern void itlb_miss(void);
++ extern void tlb_miss_common(void);
++ struct thread_info *ti;
++
++ dc = __mfdr(DBGREG_DC);
++ dc &= ~DC_SS;
++ __mtdr(DBGREG_DC, dc);
++
++ ti = current_thread_info();
++ ti->flags |= _TIF_BREAKPOINT;
++
++ /* The TLB miss handlers don't check thread flags */
++ if ((regs->pc >= (unsigned long)&itlb_miss)
++ && (regs->pc <= (unsigned long)&tlb_miss_common)) {
++ __mtdr(DBGREG_BWA2A, sysreg_read(RAR_EX));
++ __mtdr(DBGREG_BWC2A, 0x40000001 | (get_asid() << 1));
++ }
++
++ /*
++ * If we're running in supervisor mode, the breakpoint
++ * will take us where we want directly, no need to
++ * single step.
++ */
++ if ((regs->sr & MODE_MASK) != MODE_SUPERVISOR)
++ ti->flags |= TIF_SINGLE_STEP;
++ } else {
++ panic("Unable to handle debug trap at pc = %08lx\n",
++ regs->pc);
++ }
++}
++
++/*
++ * Handle breakpoints, single steps and other debuggy things. To keep
++ * things simple initially, we run with interrupts and exceptions
++ * disabled all the time.
++ */
++asmlinkage void do_debug(struct pt_regs *regs)
++{
++ unsigned long dc, ds;
++
++ ds = __mfdr(DBGREG_DS);
++ pr_debug("do_debug: pc = %08lx, ds = %08lx\n", regs->pc, ds);
++
++ if (test_thread_flag(TIF_BREAKPOINT)) {
++ pr_debug("TIF_BREAKPOINT set\n");
++ /* We're taking care of it */
++ clear_thread_flag(TIF_BREAKPOINT);
++ __mtdr(DBGREG_BWC2A, 0);
++ }
++
++ if (test_thread_flag(TIF_SINGLE_STEP)) {
++ pr_debug("TIF_SINGLE_STEP set, ds = 0x%08lx\n", ds);
++ if (ds & DS_SSS) {
++ dc = __mfdr(DBGREG_DC);
++ dc &= ~DC_SS;
++ __mtdr(DBGREG_DC, dc);
++
++ clear_thread_flag(TIF_SINGLE_STEP);
++ ptrace_break(current, regs);
++ }
++ } else {
++ /* regular breakpoint */
++ ptrace_break(current, regs);
++ }
++}
+Index: linux-2.6.18-avr32/arch/avr32/kernel/semaphore.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/semaphore.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,148 @@
++/*
++ * AVR32 sempahore implementation.
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * Based on linux/arch/i386/kernel/semaphore.c
++ * Copyright (C) 1999 Linus Torvalds
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/module.h>
++
++#include <asm/semaphore.h>
++#include <asm/atomic.h>
++
++/*
++ * Semaphores are implemented using a two-way counter:
++ * The "count" variable is decremented for each process
++ * that tries to acquire the semaphore, while the "sleeping"
++ * variable is a count of such acquires.
++ *
++ * Notably, the inline "up()" and "down()" functions can
++ * efficiently test if they need to do any extra work (up
++ * needs to do something only if count was negative before
++ * the increment operation.
++ *
++ * "sleeping" and the contention routine ordering is protected
++ * by the spinlock in the semaphore's waitqueue head.
++ *
++ * Note that these functions are only called when there is
++ * contention on the lock, and as such all this is the
++ * "non-critical" part of the whole semaphore business. The
++ * critical part is the inline stuff in <asm/semaphore.h>
++ * where we want to avoid any extra jumps and calls.
++ */
++
++/*
++ * Logic:
++ * - only on a boundary condition do we need to care. When we go
++ * from a negative count to a non-negative, we wake people up.
++ * - when we go from a non-negative count to a negative do we
++ * (a) synchronize with the "sleeper" count and (b) make sure
++ * that we're on the wakeup list before we synchronize so that
++ * we cannot lose wakeup events.
++ */
++
++void __up(struct semaphore *sem)
++{
++ wake_up(&sem->wait);
++}
++EXPORT_SYMBOL(__up);
++
++void __sched __down(struct semaphore *sem)
++{
++ struct task_struct *tsk = current;
++ DECLARE_WAITQUEUE(wait, tsk);
++ unsigned long flags;
++
++ tsk->state = TASK_UNINTERRUPTIBLE;
++ spin_lock_irqsave(&sem->wait.lock, flags);
++ add_wait_queue_exclusive_locked(&sem->wait, &wait);
++
++ sem->sleepers++;
++ for (;;) {
++ int sleepers = sem->sleepers;
++
++ /*
++ * Add "everybody else" into it. They aren't
++ * playing, because we own the spinlock in
++ * the wait_queue_head.
++ */
++ if (atomic_add_return(sleepers - 1, &sem->count) >= 0) {
++ sem->sleepers = 0;
++ break;
++ }
++ sem->sleepers = 1; /* us - see -1 above */
++ spin_unlock_irqrestore(&sem->wait.lock, flags);
++
++ schedule();
++
++ spin_lock_irqsave(&sem->wait.lock, flags);
++ tsk->state = TASK_UNINTERRUPTIBLE;
++ }
++ remove_wait_queue_locked(&sem->wait, &wait);
++ wake_up_locked(&sem->wait);
++ spin_unlock_irqrestore(&sem->wait.lock, flags);
++ tsk->state = TASK_RUNNING;
++}
++EXPORT_SYMBOL(__down);
++
++int __sched __down_interruptible(struct semaphore *sem)
++{
++ int retval = 0;
++ struct task_struct *tsk = current;
++ DECLARE_WAITQUEUE(wait, tsk);
++ unsigned long flags;
++
++ tsk->state = TASK_INTERRUPTIBLE;
++ spin_lock_irqsave(&sem->wait.lock, flags);
++ add_wait_queue_exclusive_locked(&sem->wait, &wait);
++
++ sem->sleepers++;
++ for (;;) {
++ int sleepers = sem->sleepers;
++
++ /*
++ * With signals pending, this turns into the trylock
++ * failure case - we won't be sleeping, and we can't
++ * get the lock as it has contention. Just correct the
++ * count and exit.
++ */
++ if (signal_pending(current)) {
++ retval = -EINTR;
++ sem->sleepers = 0;
++ atomic_add(sleepers, &sem->count);
++ break;
++ }
++
++ /*
++ * Add "everybody else" into it. They aren't
++ * playing, because we own the spinlock in
++ * the wait_queue_head.
++ */
++ if (atomic_add_return(sleepers - 1, &sem->count) >= 0) {
++ sem->sleepers = 0;
++ break;
++ }
++ sem->sleepers = 1; /* us - see -1 above */
++ spin_unlock_irqrestore(&sem->wait.lock, flags);
++
++ schedule();
++
++ spin_lock_irqsave(&sem->wait.lock, flags);
++ tsk->state = TASK_INTERRUPTIBLE;
++ }
++ remove_wait_queue_locked(&sem->wait, &wait);
++ wake_up_locked(&sem->wait);
++ spin_unlock_irqrestore(&sem->wait.lock, flags);
++
++ tsk->state = TASK_RUNNING;
++ return retval;
++}
++EXPORT_SYMBOL(__down_interruptible);
+Index: linux-2.6.18-avr32/arch/avr32/kernel/setup.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/setup.c 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,335 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/clk.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/console.h>
++#include <linux/ioport.h>
++#include <linux/bootmem.h>
++#include <linux/fs.h>
++#include <linux/module.h>
++#include <linux/root_dev.h>
++#include <linux/cpu.h>
++
++#include <asm/sections.h>
++#include <asm/processor.h>
++#include <asm/pgtable.h>
++#include <asm/setup.h>
++#include <asm/sysreg.h>
++
++#include <asm/arch/board.h>
++#include <asm/arch/init.h>
++
++extern int root_mountflags;
++
++/*
++ * Bootloader-provided information about physical memory
++ */
++struct tag_mem_range *mem_phys;
++struct tag_mem_range *mem_reserved;
++struct tag_mem_range *mem_ramdisk;
++
++/*
++ * Initialize loops_per_jiffy as 5000000 (500MIPS).
++ * Better make it too large than too small...
++ */
++struct avr32_cpuinfo boot_cpu_data = {
++ .loops_per_jiffy = 5000000
++};
++EXPORT_SYMBOL(boot_cpu_data);
++
++static char command_line[COMMAND_LINE_SIZE];
++
++/*
++ * Should be more than enough, but if you have a _really_ complex
++ * setup, you might need to increase the size of this...
++ */
++static struct tag_mem_range __initdata mem_range_cache[32];
++static unsigned mem_range_next_free;
++
++/*
++ * Standard memory resources
++ */
++static struct resource mem_res[] = {
++ {
++ .name = "Kernel code",
++ .start = 0,
++ .end = 0,
++ .flags = IORESOURCE_MEM
++ },
++ {
++ .name = "Kernel data",
++ .start = 0,
++ .end = 0,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++#define kernel_code mem_res[0]
++#define kernel_data mem_res[1]
++
++/*
++ * Early framebuffer allocation. Works as follows:
++ * - If fbmem_size is zero, nothing will be allocated or reserved.
++ * - If fbmem_start is zero when setup_bootmem() is called,
++ * fbmem_size bytes will be allocated from the bootmem allocator.
++ * - If fbmem_start is nonzero, an area of size fbmem_size will be
++ * reserved at the physical address fbmem_start if necessary. If
++ * the area isn't in a memory region known to the kernel, it will
++ * be left alone.
++ *
++ * Board-specific code may use these variables to set up platform data
++ * for the framebuffer driver if fbmem_size is nonzero.
++ */
++static unsigned long __initdata fbmem_start;
++static unsigned long __initdata fbmem_size;
++
++/*
++ * "fbmem=xxx[kKmM]" allocates the specified amount of boot memory for
++ * use as framebuffer.
++ *
++ * "fbmem=xxx[kKmM]@yyy[kKmM]" defines a memory region of size xxx and
++ * starting at yyy to be reserved for use as framebuffer.
++ *
++ * The kernel won't verify that the memory region starting at yyy
++ * actually contains usable RAM.
++ */
++static int __init early_parse_fbmem(char *p)
++{
++ fbmem_size = memparse(p, &p);
++ if (*p == '@')
++ fbmem_start = memparse(p, &p);
++ return 0;
++}
++early_param("fbmem", early_parse_fbmem);
++
++static inline void __init resource_init(void)
++{
++ struct tag_mem_range *region;
++
++ kernel_code.start = __pa(init_mm.start_code);
++ kernel_code.end = __pa(init_mm.end_code - 1);
++ kernel_data.start = __pa(init_mm.end_code);
++ kernel_data.end = __pa(init_mm.brk - 1);
++
++ for (region = mem_phys; region; region = region->next) {
++ struct resource *res;
++ unsigned long phys_start, phys_end;
++
++ if (region->size == 0)
++ continue;
++
++ phys_start = region->addr;
++ phys_end = phys_start + region->size - 1;
++
++ res = alloc_bootmem_low(sizeof(*res));
++ res->name = "System RAM";
++ res->start = phys_start;
++ res->end = phys_end;
++ res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
++
++ request_resource (&iomem_resource, res);
++
++ if (kernel_code.start >= res->start &&
++ kernel_code.end <= res->end)
++ request_resource (res, &kernel_code);
++ if (kernel_data.start >= res->start &&
++ kernel_data.end <= res->end)
++ request_resource (res, &kernel_data);
++ }
++}
++
++static int __init parse_tag_core(struct tag *tag)
++{
++ if (tag->hdr.size > 2) {
++ if ((tag->u.core.flags & 1) == 0)
++ root_mountflags &= ~MS_RDONLY;
++ ROOT_DEV = new_decode_dev(tag->u.core.rootdev);
++ }
++ return 0;
++}
++__tagtable(ATAG_CORE, parse_tag_core);
++
++static int __init parse_tag_mem_range(struct tag *tag,
++ struct tag_mem_range **root)
++{
++ struct tag_mem_range *cur, **pprev;
++ struct tag_mem_range *new;
++
++ /*
++ * Ignore zero-sized entries. If we're running standalone, the
++ * SDRAM code may emit such entries if something goes
++ * wrong...
++ */
++ if (tag->u.mem_range.size == 0)
++ return 0;
++
++ /*
++ * Copy the data so the bootmem init code doesn't need to care
++ * about it.
++ */
++ if (mem_range_next_free >=
++ (sizeof(mem_range_cache) / sizeof(mem_range_cache[0])))
++ panic("Physical memory map too complex!\n");
++
++ new = &mem_range_cache[mem_range_next_free++];
++ *new = tag->u.mem_range;
++
++ pprev = root;
++ cur = *root;
++ while (cur) {
++ pprev = &cur->next;
++ cur = cur->next;
++ }
++
++ *pprev = new;
++ new->next = NULL;
++
++ return 0;
++}
++
++static int __init parse_tag_mem(struct tag *tag)
++{
++ return parse_tag_mem_range(tag, &mem_phys);
++}
++__tagtable(ATAG_MEM, parse_tag_mem);
++
++static int __init parse_tag_cmdline(struct tag *tag)
++{
++ strlcpy(saved_command_line, tag->u.cmdline.cmdline, COMMAND_LINE_SIZE);
++ return 0;
++}
++__tagtable(ATAG_CMDLINE, parse_tag_cmdline);
++
++static int __init parse_tag_rdimg(struct tag *tag)
++{
++ return parse_tag_mem_range(tag, &mem_ramdisk);
++}
++__tagtable(ATAG_RDIMG, parse_tag_rdimg);
++
++static int __init parse_tag_clock(struct tag *tag)
++{
++ /*
++ * We'll figure out the clocks by peeking at the system
++ * manager regs directly.
++ */
++ return 0;
++}
++__tagtable(ATAG_CLOCK, parse_tag_clock);
++
++static int __init parse_tag_rsvd_mem(struct tag *tag)
++{
++ return parse_tag_mem_range(tag, &mem_reserved);
++}
++__tagtable(ATAG_RSVD_MEM, parse_tag_rsvd_mem);
++
++static int __init parse_tag_ethernet(struct tag *tag)
++{
++#if 0
++ const struct platform_device *pdev;
++
++ /*
++ * We really need a bus type that supports "classes"...this
++ * will do for now (until we must handle other kinds of
++ * ethernet controllers)
++ */
++ pdev = platform_get_device("macb", tag->u.ethernet.mac_index);
++ if (pdev && pdev->dev.platform_data) {
++ struct eth_platform_data *data = pdev->dev.platform_data;
++
++ data->valid = 1;
++ data->mii_phy_addr = tag->u.ethernet.mii_phy_addr;
++ memcpy(data->hw_addr, tag->u.ethernet.hw_address,
++ sizeof(data->hw_addr));
++ }
++#endif
++ return 0;
++}
++__tagtable(ATAG_ETHERNET, parse_tag_ethernet);
++
++/*
++ * Scan the tag table for this tag, and call its parse function. The
++ * tag table is built by the linker from all the __tagtable
++ * declarations.
++ */
++static int __init parse_tag(struct tag *tag)
++{
++ extern struct tagtable __tagtable_begin, __tagtable_end;
++ struct tagtable *t;
++
++ for (t = &__tagtable_begin; t < &__tagtable_end; t++)
++ if (tag->hdr.tag == t->tag) {
++ t->parse(tag);
++ break;
++ }
++
++ return t < &__tagtable_end;
++}
++
++/*
++ * Parse all tags in the list we got from the boot loader
++ */
++static void __init parse_tags(struct tag *t)
++{
++ for (; t->hdr.tag != ATAG_NONE; t = tag_next(t))
++ if (!parse_tag(t))
++ printk(KERN_WARNING
++ "Ignoring unrecognised tag 0x%08x\n",
++ t->hdr.tag);
++}
++
++void __init setup_arch (char **cmdline_p)
++{
++ struct clk *cpu_clk;
++
++ parse_tags(bootloader_tags);
++
++ setup_processor();
++ setup_platform();
++
++ cpu_clk = clk_get(NULL, "cpu");
++ if (IS_ERR(cpu_clk)) {
++ printk(KERN_WARNING "Warning: Unable to get CPU clock\n");
++ } else {
++ unsigned long cpu_hz = clk_get_rate(cpu_clk);
++
++ /*
++ * Well, duh, but it's probably a good idea to
++ * increment the use count.
++ */
++ clk_enable(cpu_clk);
++
++ boot_cpu_data.clk = cpu_clk;
++ boot_cpu_data.loops_per_jiffy = cpu_hz * 4;
++ printk("CPU: Running at %lu.%03lu MHz\n",
++ ((cpu_hz + 500) / 1000) / 1000,
++ ((cpu_hz + 500) / 1000) % 1000);
++ }
++
++ init_mm.start_code = (unsigned long) &_text;
++ init_mm.end_code = (unsigned long) &_etext;
++ init_mm.end_data = (unsigned long) &_edata;
++ init_mm.brk = (unsigned long) &_end;
++
++ strlcpy(command_line, saved_command_line, COMMAND_LINE_SIZE);
++ *cmdline_p = command_line;
++ parse_early_param();
++
++ setup_bootmem();
++
++ board_setup_fbmem(fbmem_start, fbmem_size);
++
++#ifdef CONFIG_VT
++ conswitchp = &dummy_con;
++#endif
++
++ paging_init();
++
++ resource_init();
++}
+Index: linux-2.6.18-avr32/arch/avr32/kernel/signal.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/signal.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,328 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * Based on linux/arch/sh/kernel/signal.c
++ * Copyright (C) 1999, 2000 Niibe Yutaka & Kaz Kojima
++ * Copyright (C) 1991, 1992 Linus Torvalds
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/sched.h>
++#include <linux/mm.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/unistd.h>
++#include <linux/suspend.h>
++
++#include <asm/uaccess.h>
++#include <asm/ucontext.h>
++
++#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
++
++asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
++ struct pt_regs *regs)
++{
++ return do_sigaltstack(uss, uoss, regs->sp);
++}
++
++struct rt_sigframe
++{
++ struct siginfo info;
++ struct ucontext uc;
++ unsigned long retcode;
++};
++
++static int
++restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
++{
++ int err = 0;
++
++#define COPY(x) err |= __get_user(regs->x, &sc->x)
++ COPY(sr);
++ COPY(pc);
++ COPY(lr);
++ COPY(sp);
++ COPY(r12);
++ COPY(r11);
++ COPY(r10);
++ COPY(r9);
++ COPY(r8);
++ COPY(r7);
++ COPY(r6);
++ COPY(r5);
++ COPY(r4);
++ COPY(r3);
++ COPY(r2);
++ COPY(r1);
++ COPY(r0);
++#undef COPY
++
++ /*
++ * Don't allow anyone to pretend they're running in supervisor
++ * mode or something...
++ */
++ err |= !valid_user_regs(regs);
++
++ return err;
++}
++
++
++asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
++{
++ struct rt_sigframe __user *frame;
++ sigset_t set;
++
++ frame = (struct rt_sigframe __user *)regs->sp;
++ pr_debug("SIG return: frame = %p\n", frame);
++
++ if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
++ goto badframe;
++
++ if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
++ goto badframe;
++
++ sigdelsetmask(&set, ~_BLOCKABLE);
++ spin_lock_irq(&current->sighand->siglock);
++ current->blocked = set;
++ recalc_sigpending();
++ spin_unlock_irq(&current->sighand->siglock);
++
++ if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
++ goto badframe;
++
++ pr_debug("Context restored: pc = %08lx, lr = %08lx, sp = %08lx\n",
++ regs->pc, regs->lr, regs->sp);
++
++ return regs->r12;
++
++badframe:
++ force_sig(SIGSEGV, current);
++ return 0;
++}
++
++static int
++setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs)
++{
++ int err = 0;
++
++#define COPY(x) err |= __put_user(regs->x, &sc->x)
++ COPY(sr);
++ COPY(pc);
++ COPY(lr);
++ COPY(sp);
++ COPY(r12);
++ COPY(r11);
++ COPY(r10);
++ COPY(r9);
++ COPY(r8);
++ COPY(r7);
++ COPY(r6);
++ COPY(r5);
++ COPY(r4);
++ COPY(r3);
++ COPY(r2);
++ COPY(r1);
++ COPY(r0);
++#undef COPY
++
++ return err;
++}
++
++static inline void __user *
++get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, int framesize)
++{
++ unsigned long sp = regs->sp;
++
++ if ((ka->sa.sa_flags & SA_ONSTACK) && !sas_ss_flags(sp))
++ sp = current->sas_ss_sp + current->sas_ss_size;
++
++ return (void __user *)((sp - framesize) & ~3);
++}
++
++static int
++setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
++ sigset_t *set, struct pt_regs *regs)
++{
++ struct rt_sigframe __user *frame;
++ int err = 0;
++
++ frame = get_sigframe(ka, regs, sizeof(*frame));
++ err = -EFAULT;
++ if (!access_ok(VERIFY_WRITE, frame, sizeof (*frame)))
++ goto out;
++
++ /*
++ * Set up the return code:
++ *
++ * mov r8, __NR_rt_sigreturn
++ * scall
++ *
++ * Note: This will blow up since we're using a non-executable
++ * stack. Better use SA_RESTORER.
++ */
++#if __NR_rt_sigreturn > 127
++# error __NR_rt_sigreturn must be < 127 to fit in a short mov
++#endif
++ err = __put_user(0x3008d733 | (__NR_rt_sigreturn << 20),
++ &frame->retcode);
++
++ err |= copy_siginfo_to_user(&frame->info, info);
++
++ /* Set up the ucontext */
++ err |= __put_user(0, &frame->uc.uc_flags);
++ err |= __put_user(NULL, &frame->uc.uc_link);
++ err |= __put_user((void __user *)current->sas_ss_sp,
++ &frame->uc.uc_stack.ss_sp);
++ err |= __put_user(sas_ss_flags(regs->sp),
++ &frame->uc.uc_stack.ss_flags);
++ err |= __put_user(current->sas_ss_size,
++ &frame->uc.uc_stack.ss_size);
++ err |= setup_sigcontext(&frame->uc.uc_mcontext, regs);
++ err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
++
++ if (err)
++ goto out;
++
++ regs->r12 = sig;
++ regs->r11 = (unsigned long) &frame->info;
++ regs->r10 = (unsigned long) &frame->uc;
++ regs->sp = (unsigned long) frame;
++ if (ka->sa.sa_flags & SA_RESTORER)
++ regs->lr = (unsigned long)ka->sa.sa_restorer;
++ else {
++ printk(KERN_NOTICE "[%s:%d] did not set SA_RESTORER\n",
++ current->comm, current->pid);
++ regs->lr = (unsigned long) &frame->retcode;
++ }
++
++ pr_debug("SIG deliver [%s:%d]: sig=%d sp=0x%lx pc=0x%lx->0x%p lr=0x%lx\n",
++ current->comm, current->pid, sig, regs->sp,
++ regs->pc, ka->sa.sa_handler, regs->lr);
++
++ regs->pc = (unsigned long) ka->sa.sa_handler;
++
++out:
++ return err;
++}
++
++static inline void restart_syscall(struct pt_regs *regs)
++{
++ if (regs->r12 == -ERESTART_RESTARTBLOCK)
++ regs->r8 = __NR_restart_syscall;
++ else
++ regs->r12 = regs->r12_orig;
++ regs->pc -= 2;
++}
++
++static inline void
++handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
++ sigset_t *oldset, struct pt_regs *regs, int syscall)
++{
++ int ret;
++
++ /*
++ * Set up the stack frame
++ */
++ ret = setup_rt_frame(sig, ka, info, oldset, regs);
++
++ /*
++ * Check that the resulting registers are sane
++ */
++ ret |= !valid_user_regs(regs);
++
++ /*
++ * Block the signal if we were unsuccessful.
++ */
++ if (ret != 0 || !(ka->sa.sa_flags & SA_NODEFER)) {
++ spin_lock_irq(&current->sighand->siglock);
++ sigorsets(&current->blocked, &current->blocked,
++ &ka->sa.sa_mask);
++ sigaddset(&current->blocked, sig);
++ recalc_sigpending();
++ spin_unlock_irq(&current->sighand->siglock);
++ }
++
++ if (ret == 0)
++ return;
++
++ force_sigsegv(sig, current);
++}
++
++/*
++ * Note that 'init' is a special process: it doesn't get signals it
++ * doesn't want to handle. Thus you cannot kill init even with a
++ * SIGKILL even by mistake.
++ */
++int do_signal(struct pt_regs *regs, sigset_t *oldset, int syscall)
++{
++ siginfo_t info;
++ int signr;
++ struct k_sigaction ka;
++
++ /*
++ * We want the common case to go fast, which is why we may in
++ * certain cases get here from kernel mode. Just return
++ * without doing anything if so.
++ */
++ if (!user_mode(regs))
++ return 0;
++
++ if (try_to_freeze()) {
++ signr = 0;
++ if (!signal_pending(current))
++ goto no_signal;
++ }
++
++ if (test_thread_flag(TIF_RESTORE_SIGMASK))
++ oldset = &current->saved_sigmask;
++ else if (!oldset)
++ oldset = &current->blocked;
++
++ signr = get_signal_to_deliver(&info, &ka, regs, NULL);
++no_signal:
++ if (syscall) {
++ switch (regs->r12) {
++ case -ERESTART_RESTARTBLOCK:
++ case -ERESTARTNOHAND:
++ if (signr > 0) {
++ regs->r12 = -EINTR;
++ break;
++ }
++ /* fall through */
++ case -ERESTARTSYS:
++ if (signr > 0 && !(ka.sa.sa_flags & SA_RESTART)) {
++ regs->r12 = -EINTR;
++ break;
++ }
++ /* fall through */
++ case -ERESTARTNOINTR:
++ restart_syscall(regs);
++ }
++ }
++
++ if (signr == 0) {
++ /* No signal to deliver -- put the saved sigmask back */
++ if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
++ clear_thread_flag(TIF_RESTORE_SIGMASK);
++ sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
++ }
++ return 0;
++ }
++
++ handle_signal(signr, &ka, &info, oldset, regs, syscall);
++ return 1;
++}
++
++asmlinkage void do_notify_resume(struct pt_regs *regs, struct thread_info *ti)
++{
++ int syscall = 0;
++
++ if ((sysreg_read(SR) & MODE_MASK) == MODE_SUPERVISOR)
++ syscall = 1;
++
++ if (ti->flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK))
++ do_signal(regs, &current->blocked, syscall);
++}
+Index: linux-2.6.18-avr32/arch/avr32/kernel/switch_to.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/switch_to.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,35 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <asm/sysreg.h>
++
++ .text
++ .global __switch_to
++ .type __switch_to, @function
++
++ /* Switch thread context from "prev" to "next", returning "last"
++ * r12 : prev
++ * r11 : &prev->thread + 1
++ * r10 : &next->thread
++ */
++__switch_to:
++ stm --r11, r0,r1,r2,r3,r4,r5,r6,r7,sp,lr
++ mfsr r9, SYSREG_SR
++ st.w --r11, r9
++ ld.w r8, r10++
++ /*
++ * schedule() may have been called from a mode with a different
++ * set of registers. Make sure we don't lose anything here.
++ */
++ pushm r10,r12
++ mtsr SYSREG_SR, r8
++ frs /* flush the return stack */
++ sub pc, -2 /* flush the pipeline */
++ popm r10,r12
++ ldm r10++, r0,r1,r2,r3,r4,r5,r6,r7,sp,pc
++ .size __switch_to, . - __switch_to
+Index: linux-2.6.18-avr32/arch/avr32/kernel/sys_avr32.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/sys_avr32.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,51 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/errno.h>
++#include <linux/fs.h>
++#include <linux/file.h>
++#include <linux/mm.h>
++#include <linux/unistd.h>
++
++#include <asm/mman.h>
++#include <asm/uaccess.h>
++
++asmlinkage int sys_pipe(unsigned long __user *filedes)
++{
++ int fd[2];
++ int error;
++
++ error = do_pipe(fd);
++ if (!error) {
++ if (copy_to_user(filedes, fd, sizeof(fd)))
++ error = -EFAULT;
++ }
++ return error;
++}
++
++asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
++ unsigned long prot, unsigned long flags,
++ unsigned long fd, off_t offset)
++{
++ int error = -EBADF;
++ struct file *file = NULL;
++
++ flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
++ if (!(flags & MAP_ANONYMOUS)) {
++ file = fget(fd);
++ if (!file)
++ return error;
++ }
++
++ down_write(&current->mm->mmap_sem);
++ error = do_mmap_pgoff(file, addr, len, prot, flags, offset);
++ up_write(&current->mm->mmap_sem);
++
++ if (file)
++ fput(file);
++ return error;
++}
+Index: linux-2.6.18-avr32/arch/avr32/kernel/syscall-stubs.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/syscall-stubs.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,102 @@
++/*
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/*
++ * Stubs for syscalls that require access to pt_regs or that take more
++ * than five parameters.
++ */
++
++#define ARG6 r3
++
++ .text
++ .global __sys_rt_sigsuspend
++ .type __sys_rt_sigsuspend,@function
++__sys_rt_sigsuspend:
++ mov r10, sp
++ rjmp sys_rt_sigsuspend
++
++ .global __sys_sigaltstack
++ .type __sys_sigaltstack,@function
++__sys_sigaltstack:
++ mov r10, sp
++ rjmp sys_sigaltstack
++
++ .global __sys_rt_sigreturn
++ .type __sys_rt_sigreturn,@function
++__sys_rt_sigreturn:
++ mov r12, sp
++ rjmp sys_rt_sigreturn
++
++ .global __sys_fork
++ .type __sys_fork,@function
++__sys_fork:
++ mov r12, sp
++ rjmp sys_fork
++
++ .global __sys_clone
++ .type __sys_clone,@function
++__sys_clone:
++ mov r8, sp
++ rjmp sys_clone
++
++ .global __sys_vfork
++ .type __sys_vfork,@function
++__sys_vfork:
++ mov r12, sp
++ rjmp sys_vfork
++
++ .global __sys_execve
++ .type __sys_execve,@function
++__sys_execve:
++ mov r9, sp
++ rjmp sys_execve
++
++ .global __sys_mmap2
++ .type __sys_mmap2,@function
++__sys_mmap2:
++ pushm lr
++ st.w --sp, ARG6
++ rcall sys_mmap2
++ sub sp, -4
++ popm pc
++
++ .global __sys_sendto
++ .type __sys_sendto,@function
++__sys_sendto:
++ pushm lr
++ st.w --sp, ARG6
++ rcall sys_sendto
++ sub sp, -4
++ popm pc
++
++ .global __sys_recvfrom
++ .type __sys_recvfrom,@function
++__sys_recvfrom:
++ pushm lr
++ st.w --sp, ARG6
++ rcall sys_recvfrom
++ sub sp, -4
++ popm pc
++
++ .global __sys_pselect6
++ .type __sys_pselect6,@function
++__sys_pselect6:
++ pushm lr
++ st.w --sp, ARG6
++ rcall sys_pselect6
++ sub sp, -4
++ popm pc
++
++ .global __sys_splice
++ .type __sys_splice,@function
++__sys_splice:
++ pushm lr
++ st.w --sp, ARG6
++ rcall sys_splice
++ sub sp, -4
++ popm pc
+Index: linux-2.6.18-avr32/arch/avr32/kernel/syscall_table.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/syscall_table.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,289 @@
++/*
++ * AVR32 system call table
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE)
++#define sys_nfsservctl sys_ni_syscall
++#endif
++
++#if !defined(CONFIG_SYSV_IPC)
++# define sys_ipc sys_ni_syscall
++#endif
++
++ .section .rodata,"a",@progbits
++ .type sys_call_table,@object
++ .global sys_call_table
++ .align 2
++sys_call_table:
++ .long sys_restart_syscall
++ .long sys_exit
++ .long __sys_fork
++ .long sys_read
++ .long sys_write
++ .long sys_open /* 5 */
++ .long sys_close
++ .long sys_umask
++ .long sys_creat
++ .long sys_link
++ .long sys_unlink /* 10 */
++ .long __sys_execve
++ .long sys_chdir
++ .long sys_time
++ .long sys_mknod
++ .long sys_chmod /* 15 */
++ .long sys_chown
++ .long sys_lchown
++ .long sys_lseek
++ .long sys_llseek
++ .long sys_getpid /* 20 */
++ .long sys_mount
++ .long sys_umount
++ .long sys_setuid
++ .long sys_getuid
++ .long sys_stime /* 25 */
++ .long sys_ptrace
++ .long sys_alarm
++ .long sys_pause
++ .long sys_utime
++ .long sys_newstat /* 30 */
++ .long sys_newfstat
++ .long sys_newlstat
++ .long sys_access
++ .long sys_chroot
++ .long sys_sync /* 35 */
++ .long sys_fsync
++ .long sys_kill
++ .long sys_rename
++ .long sys_mkdir
++ .long sys_rmdir /* 40 */
++ .long sys_dup
++ .long sys_pipe
++ .long sys_times
++ .long __sys_clone
++ .long sys_brk /* 45 */
++ .long sys_setgid
++ .long sys_getgid
++ .long sys_getcwd
++ .long sys_geteuid
++ .long sys_getegid /* 50 */
++ .long sys_acct
++ .long sys_setfsuid
++ .long sys_setfsgid
++ .long sys_ioctl
++ .long sys_fcntl /* 55 */
++ .long sys_setpgid
++ .long sys_mremap
++ .long sys_setresuid
++ .long sys_getresuid
++ .long sys_setreuid /* 60 */
++ .long sys_setregid
++ .long sys_ustat
++ .long sys_dup2
++ .long sys_getppid
++ .long sys_getpgrp /* 65 */
++ .long sys_setsid
++ .long sys_rt_sigaction
++ .long __sys_rt_sigreturn
++ .long sys_rt_sigprocmask
++ .long sys_rt_sigpending /* 70 */
++ .long sys_rt_sigtimedwait
++ .long sys_rt_sigqueueinfo
++ .long __sys_rt_sigsuspend
++ .long sys_sethostname
++ .long sys_setrlimit /* 75 */
++ .long sys_getrlimit
++ .long sys_getrusage
++ .long sys_gettimeofday
++ .long sys_settimeofday
++ .long sys_getgroups /* 80 */
++ .long sys_setgroups
++ .long sys_select
++ .long sys_symlink
++ .long sys_fchdir
++ .long sys_readlink /* 85 */
++ .long sys_pread64
++ .long sys_pwrite64
++ .long sys_swapon
++ .long sys_reboot
++ .long __sys_mmap2 /* 90 */
++ .long sys_munmap
++ .long sys_truncate
++ .long sys_ftruncate
++ .long sys_fchmod
++ .long sys_fchown /* 95 */
++ .long sys_getpriority
++ .long sys_setpriority
++ .long sys_wait4
++ .long sys_statfs
++ .long sys_fstatfs /* 100 */
++ .long sys_vhangup
++ .long __sys_sigaltstack
++ .long sys_syslog
++ .long sys_setitimer
++ .long sys_getitimer /* 105 */
++ .long sys_swapoff
++ .long sys_sysinfo
++ .long sys_ipc
++ .long sys_sendfile
++ .long sys_setdomainname /* 110 */
++ .long sys_newuname
++ .long sys_adjtimex
++ .long sys_mprotect
++ .long __sys_vfork
++ .long sys_init_module /* 115 */
++ .long sys_delete_module
++ .long sys_quotactl
++ .long sys_getpgid
++ .long sys_bdflush
++ .long sys_sysfs /* 120 */
++ .long sys_personality
++ .long sys_ni_syscall /* reserved for afs_syscall */
++ .long sys_getdents
++ .long sys_flock
++ .long sys_msync /* 125 */
++ .long sys_readv
++ .long sys_writev
++ .long sys_getsid
++ .long sys_fdatasync
++ .long sys_sysctl /* 130 */
++ .long sys_mlock
++ .long sys_munlock
++ .long sys_mlockall
++ .long sys_munlockall
++ .long sys_sched_setparam /* 135 */
++ .long sys_sched_getparam
++ .long sys_sched_setscheduler
++ .long sys_sched_getscheduler
++ .long sys_sched_yield
++ .long sys_sched_get_priority_max /* 140 */
++ .long sys_sched_get_priority_min
++ .long sys_sched_rr_get_interval
++ .long sys_nanosleep
++ .long sys_poll
++ .long sys_nfsservctl /* 145 */
++ .long sys_setresgid
++ .long sys_getresgid
++ .long sys_prctl
++ .long sys_socket
++ .long sys_bind /* 150 */
++ .long sys_connect
++ .long sys_listen
++ .long sys_accept
++ .long sys_getsockname
++ .long sys_getpeername /* 155 */
++ .long sys_socketpair
++ .long sys_send
++ .long sys_recv
++ .long __sys_sendto
++ .long __sys_recvfrom /* 160 */
++ .long sys_shutdown
++ .long sys_setsockopt
++ .long sys_getsockopt
++ .long sys_sendmsg
++ .long sys_recvmsg /* 165 */
++ .long sys_truncate64
++ .long sys_ftruncate64
++ .long sys_stat64
++ .long sys_lstat64
++ .long sys_fstat64 /* 170 */
++ .long sys_pivot_root
++ .long sys_mincore
++ .long sys_madvise
++ .long sys_getdents64
++ .long sys_fcntl64 /* 175 */
++ .long sys_gettid
++ .long sys_readahead
++ .long sys_setxattr
++ .long sys_lsetxattr
++ .long sys_fsetxattr /* 180 */
++ .long sys_getxattr
++ .long sys_lgetxattr
++ .long sys_fgetxattr
++ .long sys_listxattr
++ .long sys_llistxattr /* 185 */
++ .long sys_flistxattr
++ .long sys_removexattr
++ .long sys_lremovexattr
++ .long sys_fremovexattr
++ .long sys_tkill /* 190 */
++ .long sys_sendfile64
++ .long sys_futex
++ .long sys_sched_setaffinity
++ .long sys_sched_getaffinity
++ .long sys_capget /* 195 */
++ .long sys_capset
++ .long sys_io_setup
++ .long sys_io_destroy
++ .long sys_io_getevents
++ .long sys_io_submit /* 200 */
++ .long sys_io_cancel
++ .long sys_fadvise64
++ .long sys_exit_group
++ .long sys_lookup_dcookie
++ .long sys_epoll_create /* 205 */
++ .long sys_epoll_ctl
++ .long sys_epoll_wait
++ .long sys_remap_file_pages
++ .long sys_set_tid_address
++ .long sys_timer_create /* 210 */
++ .long sys_timer_settime
++ .long sys_timer_gettime
++ .long sys_timer_getoverrun
++ .long sys_timer_delete
++ .long sys_clock_settime /* 215 */
++ .long sys_clock_gettime
++ .long sys_clock_getres
++ .long sys_clock_nanosleep
++ .long sys_statfs64
++ .long sys_fstatfs64 /* 220 */
++ .long sys_tgkill
++ .long sys_ni_syscall /* reserved for TUX */
++ .long sys_utimes
++ .long sys_fadvise64_64
++ .long sys_cacheflush /* 225 */
++ .long sys_ni_syscall /* sys_vserver */
++ .long sys_mq_open
++ .long sys_mq_unlink
++ .long sys_mq_timedsend
++ .long sys_mq_timedreceive /* 230 */
++ .long sys_mq_notify
++ .long sys_mq_getsetattr
++ .long sys_kexec_load
++ .long sys_waitid
++ .long sys_add_key /* 235 */
++ .long sys_request_key
++ .long sys_keyctl
++ .long sys_ioprio_set
++ .long sys_ioprio_get
++ .long sys_inotify_init /* 240 */
++ .long sys_inotify_add_watch
++ .long sys_inotify_rm_watch
++ .long sys_openat
++ .long sys_mkdirat
++ .long sys_mknodat /* 245 */
++ .long sys_fchownat
++ .long sys_futimesat
++ .long sys_fstatat64
++ .long sys_unlinkat
++ .long sys_renameat /* 250 */
++ .long sys_linkat
++ .long sys_symlinkat
++ .long sys_readlinkat
++ .long sys_fchmodat
++ .long sys_faccessat /* 255 */
++ .long __sys_pselect6
++ .long sys_ppoll
++ .long sys_unshare
++ .long sys_set_robust_list
++ .long sys_get_robust_list /* 260 */
++ .long __sys_splice
++ .long sys_sync_file_range
++ .long sys_tee
++ .long sys_vmsplice
++ .long sys_ni_syscall /* r8 is saturated at nr_syscalls */
+Index: linux-2.6.18-avr32/arch/avr32/kernel/time.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/time.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,238 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * Based on MIPS implementation arch/mips/kernel/time.c
++ * Copyright 2001 MontaVista Software Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/clk.h>
++#include <linux/clocksource.h>
++#include <linux/time.h>
++#include <linux/module.h>
++#include <linux/interrupt.h>
++#include <linux/irq.h>
++#include <linux/kernel_stat.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/profile.h>
++#include <linux/sysdev.h>
++
++#include <asm/div64.h>
++#include <asm/sysreg.h>
++#include <asm/io.h>
++#include <asm/sections.h>
++
++static cycle_t read_cycle_count(void)
++{
++ return (cycle_t)sysreg_read(COUNT);
++}
++
++static struct clocksource clocksource_avr32 = {
++ .name = "avr32",
++ .rating = 350,
++ .read = read_cycle_count,
++ .mask = CLOCKSOURCE_MASK(32),
++ .shift = 16,
++ .is_continuous = 1,
++};
++
++/*
++ * By default we provide the null RTC ops
++ */
++static unsigned long null_rtc_get_time(void)
++{
++ return mktime(2004, 1, 1, 0, 0, 0);
++}
++
++static int null_rtc_set_time(unsigned long sec)
++{
++ return 0;
++}
++
++static unsigned long (*rtc_get_time)(void) = null_rtc_get_time;
++static int (*rtc_set_time)(unsigned long) = null_rtc_set_time;
++
++/* how many counter cycles in a jiffy? */
++static unsigned long cycles_per_jiffy;
++
++/* cycle counter value at the previous timer interrupt */
++static unsigned int timerhi, timerlo;
++
++/* the count value for the next timer interrupt */
++static unsigned int expirelo;
++
++static void avr32_timer_ack(void)
++{
++ unsigned int count;
++
++ /* Ack this timer interrupt and set the next one */
++ expirelo += cycles_per_jiffy;
++ if (expirelo == 0) {
++ printk(KERN_DEBUG "expirelo == 0\n");
++ sysreg_write(COMPARE, expirelo + 1);
++ } else {
++ sysreg_write(COMPARE, expirelo);
++ }
++
++ /* Check to see if we have missed any timer interrupts */
++ count = sysreg_read(COUNT);
++ if ((count - expirelo) < 0x7fffffff) {
++ expirelo = count + cycles_per_jiffy;
++ sysreg_write(COMPARE, expirelo);
++ }
++}
++
++static unsigned int avr32_hpt_read(void)
++{
++ return sysreg_read(COUNT);
++}
++
++/*
++ * Taken from MIPS c0_hpt_timer_init().
++ *
++ * Why is it so complicated, and what is "count"? My assumption is
++ * that `count' specifies the "reference cycle", i.e. the cycle since
++ * reset that should mean "zero". The reason COUNT is written twice is
++ * probably to make sure we don't get any timer interrupts while we
++ * are messing with the counter.
++ */
++static void avr32_hpt_init(unsigned int count)
++{
++ count = sysreg_read(COUNT) - count;
++ expirelo = (count / cycles_per_jiffy + 1) * cycles_per_jiffy;
++ sysreg_write(COUNT, expirelo - cycles_per_jiffy);
++ sysreg_write(COMPARE, expirelo);
++ sysreg_write(COUNT, count);
++}
++
++/*
++ * Scheduler clock - returns current time in nanosec units.
++ */
++unsigned long long sched_clock(void)
++{
++ /* There must be better ways...? */
++ return (unsigned long long)jiffies * (1000000000 / HZ);
++}
++
++/*
++ * local_timer_interrupt() does profiling and process accounting on a
++ * per-CPU basis.
++ *
++ * In UP mode, it is invoked from the (global) timer_interrupt.
++ */
++static void local_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ if (current->pid)
++ profile_tick(CPU_PROFILING, regs);
++ update_process_times(user_mode(regs));
++}
++
++static irqreturn_t
++timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ unsigned int count;
++
++ /* ack timer interrupt and try to set next interrupt */
++ count = avr32_hpt_read();
++ avr32_timer_ack();
++
++ /* Update timerhi/timerlo for intra-jiffy calibration */
++ timerhi += count < timerlo; /* Wrap around */
++ timerlo = count;
++
++ /*
++ * Call the generic timer interrupt handler
++ */
++ write_seqlock(&xtime_lock);
++ do_timer(regs);
++ write_sequnlock(&xtime_lock);
++
++ /*
++ * In UP mode, we call local_timer_interrupt() to do profiling
++ * and process accounting.
++ *
++ * SMP is not supported yet.
++ */
++ local_timer_interrupt(irq, dev_id, regs);
++
++ return IRQ_HANDLED;
++}
++
++static struct irqaction timer_irqaction = {
++ .handler = timer_interrupt,
++ .flags = IRQF_DISABLED,
++ .name = "timer",
++};
++
++void __init time_init(void)
++{
++ unsigned long mult, shift, count_hz;
++ int ret;
++
++ xtime.tv_sec = rtc_get_time();
++ xtime.tv_nsec = 0;
++
++ set_normalized_timespec(&wall_to_monotonic,
++ -xtime.tv_sec, -xtime.tv_nsec);
++
++ printk("Before time_init: count=%08lx, compare=%08lx\n",
++ (unsigned long)sysreg_read(COUNT),
++ (unsigned long)sysreg_read(COMPARE));
++
++ count_hz = clk_get_rate(boot_cpu_data.clk);
++ shift = clocksource_avr32.shift;
++ mult = clocksource_hz2mult(count_hz, shift);
++ clocksource_avr32.mult = mult;
++
++ printk("Cycle counter: mult=%lu, shift=%lu\n", mult, shift);
++
++ {
++ u64 tmp;
++
++ tmp = TICK_NSEC;
++ tmp <<= shift;
++ tmp += mult / 2;
++ do_div(tmp, mult);
++
++ cycles_per_jiffy = tmp;
++ }
++
++ /* This sets up the high precision timer for the first interrupt. */
++ avr32_hpt_init(avr32_hpt_read());
++
++ printk("After time_init: count=%08lx, compare=%08lx\n",
++ (unsigned long)sysreg_read(COUNT),
++ (unsigned long)sysreg_read(COMPARE));
++
++ ret = clocksource_register(&clocksource_avr32);
++ if (ret)
++ printk(KERN_ERR
++ "timer: could not register clocksource: %d\n", ret);
++
++ ret = setup_irq(0, &timer_irqaction);
++ if (ret)
++ printk("timer: could not request IRQ 0: %d\n", ret);
++}
++
++static struct sysdev_class timer_class = {
++ set_kset_name("timer"),
++};
++
++static struct sys_device timer_device = {
++ .id = 0,
++ .cls = &timer_class,
++};
++
++static int __init init_timer_sysfs(void)
++{
++ int err = sysdev_class_register(&timer_class);
++ if (!err)
++ err = sysdev_register(&timer_device);
++ return err;
++}
++
++device_initcall(init_timer_sysfs);
+Index: linux-2.6.18-avr32/arch/avr32/kernel/traps.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/traps.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,425 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#undef DEBUG
++#include <linux/sched.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/kallsyms.h>
++#include <linux/notifier.h>
++
++#include <asm/traps.h>
++#include <asm/sysreg.h>
++#include <asm/addrspace.h>
++#include <asm/ocd.h>
++#include <asm/mmu_context.h>
++#include <asm/uaccess.h>
++
++static void dump_mem(const char *str, unsigned long bottom, unsigned long top)
++{
++ unsigned long p;
++ int i;
++
++ printk("%s(0x%08lx to 0x%08lx)\n", str, bottom, top);
++
++ for (p = bottom & ~31; p < top; ) {
++ printk("%04lx: ", p & 0xffff);
++
++ for (i = 0; i < 8; i++, p += 4) {
++ unsigned int val;
++
++ if (p < bottom || p >= top)
++ printk(" ");
++ else {
++ if (__get_user(val, (unsigned int __user *)p)) {
++ printk("\n");
++ goto out;
++ }
++ printk("%08x ", val);
++ }
++ }
++ printk("\n");
++ }
++
++out:
++ return;
++}
++
++#ifdef CONFIG_FRAME_POINTER
++static inline void __show_trace(struct task_struct *tsk, unsigned long *sp,
++ struct pt_regs *regs)
++{
++ unsigned long __user *fp;
++ unsigned long __user *last_fp = NULL;
++
++ if (regs) {
++ fp = (unsigned long __user *)regs->r7;
++ } else if (tsk == current) {
++ register unsigned long __user *real_fp __asm__("r7");
++ fp = real_fp;
++ } else {
++ fp = (unsigned long __user *)tsk->thread.cpu_context.r7;
++ }
++
++ /*
++ * Walk the stack until (a) we get an exception, (b) the frame
++ * pointer becomes zero, or (c) the frame pointer gets stuck
++ * at the same value.
++ */
++ while (fp && fp != last_fp) {
++ unsigned long lr, new_fp = 0;
++
++ last_fp = fp;
++ if (__get_user(lr, fp))
++ break;
++ if (fp && __get_user(new_fp, fp + 1))
++ break;
++ fp = (unsigned long __user *)new_fp;
++
++ printk(" [<%08lx>] ", lr);
++ print_symbol("%s\n", lr);
++ }
++ printk("\n");
++}
++#else
++static inline void __show_trace(struct task_struct *tsk, unsigned long *sp,
++ struct pt_regs *regs)
++{
++ unsigned long addr;
++
++ while (!kstack_end(sp)) {
++ addr = *sp++;
++ if (kernel_text_address(addr)) {
++ printk(" [<%08lx>] ", addr);
++ print_symbol("%s\n", addr);
++ }
++ }
++}
++#endif
++
++void show_trace(struct task_struct *tsk, unsigned long *sp,
++ struct pt_regs *regs)
++{
++ if (regs &&
++ (((regs->sr & MODE_MASK) == MODE_EXCEPTION) ||
++ ((regs->sr & MODE_MASK) == MODE_USER)))
++ return;
++
++ printk ("Call trace:");
++#ifdef CONFIG_KALLSYMS
++ printk("\n");
++#endif
++
++ __show_trace(tsk, sp, regs);
++ printk("\n");
++}
++
++void show_stack(struct task_struct *tsk, unsigned long *sp)
++{
++ unsigned long stack;
++
++ if (!tsk)
++ tsk = current;
++ if (sp == 0) {
++ if (tsk == current) {
++ register unsigned long *real_sp __asm__("sp");
++ sp = real_sp;
++ } else {
++ sp = (unsigned long *)tsk->thread.cpu_context.ksp;
++ }
++ }
++
++ stack = (unsigned long)sp;
++ dump_mem("Stack: ", stack,
++ THREAD_SIZE + (unsigned long)tsk->thread_info);
++ show_trace(tsk, sp, NULL);
++}
++
++void dump_stack(void)
++{
++ show_stack(NULL, NULL);
++}
++EXPORT_SYMBOL(dump_stack);
++
++ATOMIC_NOTIFIER_HEAD(avr32_die_chain);
++
++int register_die_notifier(struct notifier_block *nb)
++{
++ pr_debug("register_die_notifier: %p\n", nb);
++
++ return atomic_notifier_chain_register(&avr32_die_chain, nb);
++}
++EXPORT_SYMBOL(register_die_notifier);
++
++int unregister_die_notifier(struct notifier_block *nb)
++{
++ return atomic_notifier_chain_unregister(&avr32_die_chain, nb);
++}
++EXPORT_SYMBOL(unregister_die_notifier);
++
++static DEFINE_SPINLOCK(die_lock);
++
++void __die(const char *str, struct pt_regs *regs, unsigned long err,
++ const char *file, const char *func, unsigned long line)
++{
++ struct task_struct *tsk = current;
++ static int die_counter;
++
++ console_verbose();
++ spin_lock_irq(&die_lock);
++ bust_spinlocks(1);
++
++ printk(KERN_ALERT "%s", str);
++ if (file && func)
++ printk(" in %s:%s, line %ld", file, func, line);
++ printk("[#%d]:\n", ++die_counter);
++ print_modules();
++ show_regs(regs);
++ printk("Process %s (pid: %d, stack limit = 0x%p)\n",
++ tsk->comm, tsk->pid, tsk->thread_info + 1);
++
++ if (!user_mode(regs) || in_interrupt()) {
++ dump_mem("Stack: ", regs->sp,
++ THREAD_SIZE + (unsigned long)tsk->thread_info);
++ }
++
++ bust_spinlocks(0);
++ spin_unlock_irq(&die_lock);
++ do_exit(SIGSEGV);
++}
++
++void __die_if_kernel(const char *str, struct pt_regs *regs, unsigned long err,
++ const char *file, const char *func, unsigned long line)
++{
++ if (!user_mode(regs))
++ __die(str, regs, err, file, func, line);
++}
++
++asmlinkage void do_nmi(unsigned long ecr, struct pt_regs *regs)
++{
++#ifdef CONFIG_SUBARCH_AVR32B
++ /*
++ * The exception entry always saves RSR_EX. For NMI, this is
++ * wrong; it should be RSR_NMI
++ */
++ regs->sr = sysreg_read(RSR_NMI);
++#endif
++
++ printk("NMI taken!!!!\n");
++ die("NMI", regs, ecr);
++ BUG();
++}
++
++asmlinkage void do_critical_exception(unsigned long ecr, struct pt_regs *regs)
++{
++ printk("Unable to handle critical exception %lu at pc = %08lx!\n",
++ ecr, regs->pc);
++ die("Oops", regs, ecr);
++ BUG();
++}
++
++asmlinkage void do_address_exception(unsigned long ecr, struct pt_regs *regs)
++{
++ siginfo_t info;
++
++ die_if_kernel("Oops: Address exception in kernel mode", regs, ecr);
++
++#ifdef DEBUG
++ if (ecr == ECR_ADDR_ALIGN_X)
++ pr_debug("Instruction Address Exception at pc = %08lx\n",
++ regs->pc);
++ else if (ecr == ECR_ADDR_ALIGN_R)
++ pr_debug("Data Address Exception (Read) at pc = %08lx\n",
++ regs->pc);
++ else if (ecr == ECR_ADDR_ALIGN_W)
++ pr_debug("Data Address Exception (Write) at pc = %08lx\n",
++ regs->pc);
++ else
++ BUG();
++
++ show_regs(regs);
++#endif
++
++ info.si_signo = SIGBUS;
++ info.si_errno = 0;
++ info.si_code = BUS_ADRALN;
++ info.si_addr = (void __user *)regs->pc;
++
++ force_sig_info(SIGBUS, &info, current);
++}
++
++/* This way of handling undefined instructions is stolen from ARM */
++static LIST_HEAD(undef_hook);
++static spinlock_t undef_lock = SPIN_LOCK_UNLOCKED;
++
++void register_undef_hook(struct undef_hook *hook)
++{
++ spin_lock_irq(&undef_lock);
++ list_add(&hook->node, &undef_hook);
++ spin_unlock_irq(&undef_lock);
++}
++
++void unregister_undef_hook(struct undef_hook *hook)
++{
++ spin_lock_irq(&undef_lock);
++ list_del(&hook->node);
++ spin_unlock_irq(&undef_lock);
++}
++
++static int do_cop_absent(u32 insn)
++{
++ int cop_nr;
++ u32 cpucr;
++ if ( (insn & 0xfdf00000) == 0xf1900000 )
++ /* LDC0 */
++ cop_nr = 0;
++ else
++ cop_nr = (insn >> 13) & 0x7;
++
++ /* Try enabling the coprocessor */
++ cpucr = sysreg_read(CPUCR);
++ cpucr |= (1 << (24 + cop_nr));
++ sysreg_write(CPUCR, cpucr);
++
++ cpucr = sysreg_read(CPUCR);
++ if ( !(cpucr & (1 << (24 + cop_nr))) ){
++ printk("Coprocessor #%i not found!\n", cop_nr);
++ return -1;
++ }
++
++ return 0;
++}
++
++#ifdef CONFIG_BUG
++#ifdef CONFIG_DEBUG_BUGVERBOSE
++static inline void do_bug_verbose(struct pt_regs *regs, u32 insn)
++{
++ char *file;
++ u16 line;
++ char c;
++
++ if (__get_user(line, (u16 __user *)(regs->pc + 2)))
++ return;
++ if (__get_user(file, (char * __user *)(regs->pc + 4))
++ || (unsigned long)file < PAGE_OFFSET
++ || __get_user(c, file))
++ file = "<bad filename>";
++
++ printk(KERN_ALERT "kernel BUG at %s:%d!\n", file, line);
++}
++#else
++static inline void do_bug_verbose(struct pt_regs *regs, u32 insn)
++{
++
++}
++#endif
++#endif
++
++asmlinkage void do_illegal_opcode(unsigned long ecr, struct pt_regs *regs)
++{
++ u32 insn;
++ struct undef_hook *hook;
++ siginfo_t info;
++ void __user *pc;
++
++ if (!user_mode(regs))
++ goto kernel_trap;
++
++ local_irq_enable();
++
++ pc = (void __user *)instruction_pointer(regs);
++ if (__get_user(insn, (u32 __user *)pc))
++ goto invalid_area;
++
++ if (ecr == ECR_COPROC_ABSENT) {
++ if (do_cop_absent(insn) == 0)
++ return;
++ }
++
++ spin_lock_irq(&undef_lock);
++ list_for_each_entry(hook, &undef_hook, node) {
++ if ((insn & hook->insn_mask) == hook->insn_val) {
++ if (hook->fn(regs, insn) == 0) {
++ spin_unlock_irq(&undef_lock);
++ return;
++ }
++ }
++ }
++ spin_unlock_irq(&undef_lock);
++
++invalid_area:
++
++#ifdef DEBUG
++ printk("Illegal instruction at pc = %08lx\n", regs->pc);
++ if (regs->pc < TASK_SIZE) {
++ unsigned long ptbr, pgd, pte, *p;
++
++ ptbr = sysreg_read(PTBR);
++ p = (unsigned long *)ptbr;
++ pgd = p[regs->pc >> 22];
++ p = (unsigned long *)((pgd & 0x1ffff000) | 0x80000000);
++ pte = p[(regs->pc >> 12) & 0x3ff];
++ printk("page table: 0x%08lx -> 0x%08lx -> 0x%08lx\n", ptbr, pgd, pte);
++ }
++#endif
++
++ info.si_signo = SIGILL;
++ info.si_errno = 0;
++ info.si_addr = (void __user *)regs->pc;
++ switch (ecr) {
++ case ECR_ILLEGAL_OPCODE:
++ case ECR_UNIMPL_INSTRUCTION:
++ info.si_code = ILL_ILLOPC;
++ break;
++ case ECR_PRIVILEGE_VIOLATION:
++ info.si_code = ILL_PRVOPC;
++ break;
++ case ECR_COPROC_ABSENT:
++ info.si_code = ILL_COPROC;
++ break;
++ default:
++ BUG();
++ }
++
++ force_sig_info(SIGILL, &info, current);
++ return;
++
++kernel_trap:
++#ifdef CONFIG_BUG
++ if (__kernel_text_address(instruction_pointer(regs))) {
++ insn = *(u16 *)instruction_pointer(regs);
++ if (insn == AVR32_BUG_OPCODE) {
++ do_bug_verbose(regs, insn);
++ die("Kernel BUG", regs, 0);
++ return;
++ }
++ }
++#endif
++
++ die("Oops: Illegal instruction in kernel code", regs, ecr);
++}
++
++asmlinkage void do_fpe(unsigned long ecr, struct pt_regs *regs)
++{
++ siginfo_t info;
++
++ printk("Floating-point exception at pc = %08lx\n", regs->pc);
++
++ /* We have no FPU... */
++ info.si_signo = SIGILL;
++ info.si_errno = 0;
++ info.si_addr = (void __user *)regs->pc;
++ info.si_code = ILL_COPROC;
++
++ force_sig_info(SIGILL, &info, current);
++}
++
++
++void __init trap_init(void)
++{
++
++}
+Index: linux-2.6.18-avr32/arch/avr32/kernel/vmlinux.lds.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/kernel/vmlinux.lds.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,139 @@
++/*
++ * AVR32 linker script for the Linux kernel
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#define LOAD_OFFSET 0x00000000
++#include <asm-generic/vmlinux.lds.h>
++
++OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32")
++OUTPUT_ARCH(avr32)
++ENTRY(_start)
++
++/* Big endian */
++jiffies = jiffies_64 + 4;
++
++SECTIONS
++{
++ . = CONFIG_ENTRY_ADDRESS;
++ .init : AT(ADDR(.init) - LOAD_OFFSET) {
++ _stext = .;
++ __init_begin = .;
++ _sinittext = .;
++ *(.text.reset)
++ *(.init.text)
++ _einittext = .;
++ . = ALIGN(4);
++ __tagtable_begin = .;
++ *(.taglist)
++ __tagtable_end = .;
++ *(.init.data)
++ . = ALIGN(16);
++ __setup_start = .;
++ *(.init.setup)
++ __setup_end = .;
++ . = ALIGN(4);
++ __initcall_start = .;
++ *(.initcall1.init)
++ *(.initcall2.init)
++ *(.initcall3.init)
++ *(.initcall4.init)
++ *(.initcall5.init)
++ *(.initcall6.init)
++ *(.initcall7.init)
++ __initcall_end = .;
++ __con_initcall_start = .;
++ *(.con_initcall.init)
++ __con_initcall_end = .;
++ __security_initcall_start = .;
++ *(.security_initcall.init)
++ __security_initcall_end = .;
++ . = ALIGN(32);
++ __initramfs_start = .;
++ *(.init.ramfs)
++ __initramfs_end = .;
++ . = ALIGN(4096);
++ __init_end = .;
++ }
++
++ . = ALIGN(8192);
++ .text : AT(ADDR(.text) - LOAD_OFFSET) {
++ _evba = .;
++ _text = .;
++ *(.ex.text)
++ . = 0x50;
++ *(.tlbx.ex.text)
++ . = 0x60;
++ *(.tlbr.ex.text)
++ . = 0x70;
++ *(.tlbw.ex.text)
++ . = 0x100;
++ *(.scall.text)
++ *(.irq.text)
++ *(.text)
++ SCHED_TEXT
++ LOCK_TEXT
++ KPROBES_TEXT
++ *(.fixup)
++ *(.gnu.warning)
++ _etext = .;
++ } = 0xd703d703
++
++ . = ALIGN(4);
++ __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
++ __start___ex_table = .;
++ *(__ex_table)
++ __stop___ex_table = .;
++ }
++
++ RODATA
++
++ . = ALIGN(8192);
++
++ .data : AT(ADDR(.data) - LOAD_OFFSET) {
++ _data = .;
++ _sdata = .;
++ /*
++ * First, the init task union, aligned to an 8K boundary.
++ */
++ *(.data.init_task)
++
++ /* Then, the cacheline aligned data */
++ . = ALIGN(32);
++ *(.data.cacheline_aligned)
++
++ /* And the rest... */
++ *(.data.rel*)
++ *(.data)
++ CONSTRUCTORS
++
++ _edata = .;
++ }
++
++
++ . = ALIGN(8);
++ .bss : AT(ADDR(.bss) - LOAD_OFFSET) {
++ __bss_start = .;
++ *(.bss)
++ *(COMMON)
++ . = ALIGN(8);
++ __bss_stop = .;
++ _end = .;
++ }
++
++ /* When something in the kernel is NOT compiled as a module, the module
++ * cleanup code and data are put into these segments. Both can then be
++ * thrown away, as cleanup code is never called unless it's a module.
++ */
++ /DISCARD/ : {
++ *(.exit.text)
++ *(.exit.data)
++ *(.exitcall.exit)
++ }
++
++ DWARF_DEBUG
++}
+Index: linux-2.6.18-avr32/arch/avr32/lib/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/Makefile 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,11 @@
++#
++# Makefile for AVR32-specific library files
++#
++
++lib-y := copy_user.o clear_user.o
++lib-y += strncpy_from_user.o strnlen_user.o
++lib-y += delay.o memset.o memcpy.o findbit.o
++lib-y += csum_partial.o csum_partial_copy_generic.o
++lib-y += io-readsw.o io-readsl.o io-writesw.o io-writesl.o
++lib-y += io-readsb.o io-writesb.o
++lib-y += __avr32_lsl64.o __avr32_lsr64.o __avr32_asr64.o
+Index: linux-2.6.18-avr32/arch/avr32/lib/__avr32_asr64.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/__avr32_asr64.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,31 @@
++/*
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++ /*
++ * DWtype __avr32_asr64(DWtype u, word_type b)
++ */
++ .text
++ .global __avr32_asr64
++ .type __avr32_asr64,@function
++__avr32_asr64:
++ cp.w r12, 0
++ reteq r12
++
++ rsub r9, r12, 32
++ brle 1f
++
++ lsl r8, r11, r9
++ lsr r10, r10, r12
++ asr r11, r11, r12
++ or r10, r8
++ retal r12
++
++1: neg r9
++ asr r10, r11, r9
++ asr r11, 31
++ retal r12
+Index: linux-2.6.18-avr32/arch/avr32/lib/__avr32_lsl64.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/__avr32_lsl64.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,31 @@
++/*
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++ /*
++ * DWtype __avr32_lsl64(DWtype u, word_type b)
++ */
++ .text
++ .global __avr32_lsl64
++ .type __avr32_lsl64,@function
++__avr32_lsl64:
++ cp.w r12, 0
++ reteq r12
++
++ rsub r9, r12, 32
++ brle 1f
++
++ lsr r8, r10, r9
++ lsl r10, r10, r12
++ lsl r11, r11, r12
++ or r11, r8
++ retal r12
++
++1: neg r9
++ lsl r11, r10, r9
++ mov r10, 0
++ retal r12
+Index: linux-2.6.18-avr32/arch/avr32/lib/__avr32_lsr64.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/__avr32_lsr64.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,31 @@
++/*
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++ /*
++ * DWtype __avr32_lsr64(DWtype u, word_type b)
++ */
++ .text
++ .global __avr32_lsr64
++ .type __avr32_lsr64,@function
++__avr32_lsr64:
++ cp.w r12, 0
++ reteq r12
++
++ rsub r9, r12, 32
++ brle 1f
++
++ lsl r8, r11, r9
++ lsr r11, r11, r12
++ lsr r10, r10, r12
++ or r10, r8
++ retal r12
++
++1: neg r9
++ lsr r10, r11, r9
++ mov r11, 0
++ retal r12
+Index: linux-2.6.18-avr32/arch/avr32/lib/clear_user.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/clear_user.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,76 @@
++/*
++ * Copyright 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <asm/page.h>
++#include <asm/thread_info.h>
++#include <asm/asm.h>
++
++ .text
++ .align 1
++ .global clear_user
++ .type clear_user, "function"
++clear_user:
++ branch_if_kernel r8, __clear_user
++ ret_if_privileged r8, r12, r11, r11
++
++ .global __clear_user
++ .type __clear_user, "function"
++__clear_user:
++ mov r9, r12
++ mov r8, 0
++ andl r9, 3, COH
++ brne 5f
++
++1: sub r11, 4
++ brlt 2f
++
++10: st.w r12++, r8
++ sub r11, 4
++ brge 10b
++
++2: sub r11, -4
++ reteq 0
++
++ /* Unaligned count or address */
++ bld r11, 1
++ brcc 12f
++11: st.h r12++, r8
++ sub r11, 2
++ reteq 0
++12: st.b r12++, r8
++ retal 0
++
++ /* Unaligned address */
++5: cp.w r11, 4
++ brlt 2b
++
++ lsl r9, 2
++ add pc, pc, r9
++13: st.b r12++, r8
++ sub r11, 1
++14: st.b r12++, r8
++ sub r11, 1
++15: st.b r12++, r8
++ sub r11, 1
++ rjmp 1b
++
++ .size clear_user, . - clear_user
++ .size __clear_user, . - __clear_user
++
++ .section .fixup, "ax"
++ .align 1
++18: sub r11, -4
++19: retal r11
++
++ .section __ex_table, "a"
++ .align 2
++ .long 10b, 18b
++ .long 11b, 19b
++ .long 12b, 19b
++ .long 13b, 19b
++ .long 14b, 19b
++ .long 15b, 19b
+Index: linux-2.6.18-avr32/arch/avr32/lib/copy_user.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/copy_user.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,119 @@
++/*
++ * Copy to/from userspace with optional address space checking.
++ *
++ * Copyright 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <asm/page.h>
++#include <asm/thread_info.h>
++#include <asm/asm.h>
++
++ /*
++ * __kernel_size_t
++ * __copy_user(void *to, const void *from, __kernel_size_t n)
++ *
++ * Returns the number of bytes not copied. Might be off by
++ * max 3 bytes if we get a fault in the main loop.
++ *
++ * The address-space checking functions simply fall through to
++ * the non-checking version.
++ */
++ .text
++ .align 1
++ .global copy_from_user
++ .type copy_from_user, @function
++copy_from_user:
++ branch_if_kernel r8, __copy_user
++ ret_if_privileged r8, r11, r10, r10
++ rjmp __copy_user
++ .size copy_from_user, . - copy_from_user
++
++ .global copy_to_user
++ .type copy_to_user, @function
++copy_to_user:
++ branch_if_kernel r8, __copy_user
++ ret_if_privileged r8, r12, r10, r10
++ .size copy_to_user, . - copy_to_user
++
++ .global __copy_user
++ .type __copy_user, @function
++__copy_user:
++ mov r9, r11
++ andl r9, 3, COH
++ brne 6f
++
++ /* At this point, from is word-aligned */
++1: sub r10, 4
++ brlt 3f
++
++2:
++10: ld.w r8, r11++
++11: st.w r12++, r8
++ sub r10, 4
++ brge 2b
++
++3: sub r10, -4
++ reteq 0
++
++ /*
++ * Handle unaligned count. Need to be careful with r10 here so
++ * that we return the correct value even if we get a fault
++ */
++4:
++20: ld.ub r8, r11++
++21: st.b r12++, r8
++ sub r10, 1
++ reteq 0
++22: ld.ub r8, r11++
++23: st.b r12++, r8
++ sub r10, 1
++ reteq 0
++24: ld.ub r8, r11++
++25: st.b r12++, r8
++ retal 0
++
++ /* Handle unaligned from-pointer */
++6: cp.w r10, 4
++ brlt 4b
++ rsub r9, r9, 4
++
++30: ld.ub r8, r11++
++31: st.b r12++, r8
++ sub r10, 1
++ sub r9, 1
++ breq 1b
++32: ld.ub r8, r11++
++33: st.b r12++, r8
++ sub r10, 1
++ sub r9, 1
++ breq 1b
++34: ld.ub r8, r11++
++35: st.b r12++, r8
++ sub r10, 1
++ rjmp 1b
++ .size __copy_user, . - __copy_user
++
++ .section .fixup,"ax"
++ .align 1
++19: sub r10, -4
++29: retal r10
++
++ .section __ex_table,"a"
++ .align 2
++ .long 10b, 19b
++ .long 11b, 19b
++ .long 20b, 29b
++ .long 21b, 29b
++ .long 22b, 29b
++ .long 23b, 29b
++ .long 24b, 29b
++ .long 25b, 29b
++ .long 30b, 29b
++ .long 31b, 29b
++ .long 32b, 29b
++ .long 33b, 29b
++ .long 34b, 29b
++ .long 35b, 29b
+Index: linux-2.6.18-avr32/arch/avr32/lib/csum_partial.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/csum_partial.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,47 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++ /*
++ * unsigned int csum_partial(const unsigned char *buff,
++ * int len, unsigned int sum)
++ */
++ .text
++ .global csum_partial
++ .type csum_partial,"function"
++ .align 1
++csum_partial:
++ /* checksum complete words, aligned or not */
++3: sub r11, 4
++ brlt 5f
++4: ld.w r9, r12++
++ add r10, r9
++ acr r10
++ sub r11, 4
++ brge 4b
++
++ /* return if we had a whole number of words */
++5: sub r11, -4
++ reteq r10
++
++ /* checksum any remaining bytes at the end */
++ mov r9, 0
++ mov r8, 0
++ cp r11, 2
++ brlt 6f
++ ld.uh r9, r12++
++ sub r11, 2
++ breq 7f
++ lsl r9, 16
++6: ld.ub r8, r12++
++ lsl r8, 8
++7: or r9, r8
++ add r10, r9
++ acr r10
++
++ retal r10
++ .size csum_partial, . - csum_partial
+Index: linux-2.6.18-avr32/arch/avr32/lib/csum_partial_copy_generic.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/csum_partial_copy_generic.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,99 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <asm/errno.h>
++#include <asm/asm.h>
++
++ /*
++ * unsigned int csum_partial_copy_generic(const char *src, char *dst, int len
++ * int sum, int *src_err_ptr,
++ * int *dst_err_ptr)
++ *
++ * Copy src to dst while checksumming, otherwise like csum_partial.
++ */
++
++ .macro ld_src size, reg, ptr
++9999: ld.\size \reg, \ptr
++ .section __ex_table, "a"
++ .long 9999b, fixup_ld_src
++ .previous
++ .endm
++
++ .macro st_dst size, ptr, reg
++9999: st.\size \ptr, \reg
++ .section __ex_table, "a"
++ .long 9999b, fixup_st_dst
++ .previous
++ .endm
++
++ .text
++ .global csum_partial_copy_generic
++ .type csum_partial_copy_generic,"function"
++ .align 1
++csum_partial_copy_generic:
++ pushm r4-r7,lr
++
++ /* The inner loop */
++1: sub r10, 4
++ brlt 5f
++2: ld_src w, r5, r12++
++ st_dst w, r11++, r5
++ add r9, r5
++ acr r9
++ sub r10, 4
++ brge 2b
++
++ /* return if we had a whole number of words */
++5: sub r10, -4
++ brne 7f
++
++6: mov r12, r9
++ popm r4-r7,pc
++
++ /* handle additional bytes at the tail */
++7: mov r5, 0
++ mov r4, 32
++8: ld_src ub, r6, r12++
++ st_dst b, r11++, r6
++ lsl r5, 8
++ sub r4, 8
++ bfins r5, r6, 0, 8
++ sub r10, 1
++ brne 8b
++
++ lsl r5, r5, r4
++ add r9, r5
++ acr r9
++ rjmp 6b
++
++ /* Exception handler */
++ .section .fixup,"ax"
++ .align 1
++fixup_ld_src:
++ mov r9, -EFAULT
++ cp.w r8, 0
++ breq 1f
++ st.w r8[0], r9
++
++1: /*
++ * TODO: zero the complete destination - computing the rest
++ * is too much work
++ */
++
++ mov r9, 0
++ rjmp 6b
++
++fixup_st_dst:
++ mov r9, -EFAULT
++ lddsp r8, sp[20]
++ cp.w r8, 0
++ breq 1f
++ st.w r8[0], r9
++1: mov r9, 0
++ rjmp 6b
++
++ .previous
+Index: linux-2.6.18-avr32/arch/avr32/lib/delay.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/delay.c 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,55 @@
++/*
++ * Precise Delay Loops for avr32
++ *
++ * Copyright (C) 1993 Linus Torvalds
++ * Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/delay.h>
++#include <linux/module.h>
++#include <linux/types.h>
++
++#include <asm/delay.h>
++#include <asm/processor.h>
++#include <asm/sysreg.h>
++
++int read_current_timer(unsigned long *timer_value)
++{
++ *timer_value = sysreg_read(COUNT);
++ return 0;
++}
++
++void __delay(unsigned long loops)
++{
++ unsigned bclock, now;
++
++ bclock = sysreg_read(COUNT);
++ do {
++ now = sysreg_read(COUNT);
++ } while ((now - bclock) < loops);
++}
++
++inline void __const_udelay(unsigned long xloops)
++{
++ unsigned long long loops;
++
++ asm("mulu.d %0, %1, %2"
++ : "=r"(loops)
++ : "r"(current_cpu_data.loops_per_jiffy * HZ), "r"(xloops));
++ __delay(loops >> 32);
++}
++
++void __udelay(unsigned long usecs)
++{
++ __const_udelay(usecs * 0x000010c7); /* 2**32 / 1000000 (rounded up) */
++}
++
++void __ndelay(unsigned long nsecs)
++{
++ __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */
++}
+Index: linux-2.6.18-avr32/arch/avr32/lib/findbit.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/findbit.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,155 @@
++/*
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/linkage.h>
++
++ .text
++ /*
++ * unsigned long find_first_zero_bit(const unsigned long *addr,
++ * unsigned long size)
++ */
++ENTRY(find_first_zero_bit)
++ cp.w r11, 0
++ reteq r11
++ mov r9, r11
++1: ld.w r8, r12[0]
++ com r8
++ brne .L_found
++ sub r12, -4
++ sub r9, 32
++ brgt 1b
++ retal r11
++
++ /*
++ * unsigned long find_next_zero_bit(const unsigned long *addr,
++ * unsigned long size,
++ * unsigned long offset)
++ */
++ENTRY(find_next_zero_bit)
++ lsr r8, r10, 5
++ sub r9, r11, r10
++ retle r11
++
++ lsl r8, 2
++ add r12, r8
++ andl r10, 31, COH
++ breq 1f
++
++ /* offset is not word-aligned. Handle the first (32 - r10) bits */
++ ld.w r8, r12[0]
++ com r8
++ sub r12, -4
++ lsr r8, r8, r10
++ brne .L_found
++
++ /* r9 = r9 - (32 - r10) = r9 + r10 - 32 */
++ add r9, r10
++ sub r9, 32
++ retle r11
++
++ /* Main loop. offset must be word-aligned */
++1: ld.w r8, r12[0]
++ com r8
++ brne .L_found
++ sub r12, -4
++ sub r9, 32
++ brgt 1b
++ retal r11
++
++ /* Common return path for when a bit is actually found. */
++.L_found:
++ brev r8
++ clz r10, r8
++ rsub r9, r11
++ add r10, r9
++
++ /* XXX: If we don't have to return exactly "size" when the bit
++ is not found, we may drop this "min" thing */
++ min r12, r11, r10
++ retal r12
++
++ /*
++ * unsigned long find_first_bit(const unsigned long *addr,
++ * unsigned long size)
++ */
++ENTRY(find_first_bit)
++ cp.w r11, 0
++ reteq r11
++ mov r9, r11
++1: ld.w r8, r12[0]
++ cp.w r8, 0
++ brne .L_found
++ sub r12, -4
++ sub r9, 32
++ brgt 1b
++ retal r11
++
++ /*
++ * unsigned long find_next_bit(const unsigned long *addr,
++ * unsigned long size,
++ * unsigned long offset)
++ */
++ENTRY(find_next_bit)
++ lsr r8, r10, 5
++ sub r9, r11, r10
++ retle r11
++
++ lsl r8, 2
++ add r12, r8
++ andl r10, 31, COH
++ breq 1f
++
++ /* offset is not word-aligned. Handle the first (32 - r10) bits */
++ ld.w r8, r12[0]
++ sub r12, -4
++ lsr r8, r8, r10
++ brne .L_found
++
++ /* r9 = r9 - (32 - r10) = r9 + r10 - 32 */
++ add r9, r10
++ sub r9, 32
++ retle r11
++
++ /* Main loop. offset must be word-aligned */
++1: ld.w r8, r12[0]
++ cp.w r8, 0
++ brne .L_found
++ sub r12, -4
++ sub r9, 32
++ brgt 1b
++ retal r11
++
++ENTRY(generic_find_next_zero_le_bit)
++ lsr r8, r10, 5
++ sub r9, r11, r10
++ retle r11
++
++ lsl r8, 2
++ add r12, r8
++ andl r10, 31, COH
++ breq 1f
++
++ /* offset is not word-aligned. Handle the first (32 - r10) bits */
++ ldswp.w r8, r12[0]
++ sub r12, -4
++ com r8
++ lsr r8, r8, r10
++ brne .L_found
++
++ /* r9 = r9 - (32 - r10) = r9 + r10 - 32 */
++ add r9, r10
++ sub r9, 32
++ retle r11
++
++ /* Main loop. offset must be word-aligned */
++1: ldswp.w r8, r12[0]
++ com r8
++ brne .L_found
++ sub r12, -4
++ sub r9, 32
++ brgt 1b
++ retal r11
+Index: linux-2.6.18-avr32/arch/avr32/lib/io-readsl.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/io-readsl.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,24 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++ .global __raw_readsl
++ .type __raw_readsl,@function
++__raw_readsl:
++ cp.w r10, 0
++ reteq r12
++
++ /*
++ * If r11 isn't properly aligned, we might get an exception on
++ * some implementations. But there's not much we can do about it.
++ */
++1: ld.w r8, r12[0]
++ sub r10, 1
++ st.w r11++, r8
++ brne 1b
++
++ retal r12
+Index: linux-2.6.18-avr32/arch/avr32/lib/io-readsw.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/io-readsw.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,43 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++.Lnot_word_aligned:
++ /*
++ * Bad alignment will cause a hardware exception, which is as
++ * good as anything. No need for us to check for proper alignment.
++ */
++ ld.uh r8, r12[0]
++ sub r10, 1
++ st.h r11++, r8
++
++ /* fall through */
++
++ .global __raw_readsw
++ .type __raw_readsw,@function
++__raw_readsw:
++ cp.w r10, 0
++ reteq r12
++ mov r9, 3
++ tst r11, r9
++ brne .Lnot_word_aligned
++
++ sub r10, 2
++ brlt 2f
++
++1: ldins.h r8:t, r12[0]
++ ldins.h r8:b, r12[0]
++ st.w r11++, r8
++ sub r10, 2
++ brge 1b
++
++2: sub r10, -2
++ reteq r12
++
++ ld.uh r8, r12[0]
++ st.h r11++, r8
++ retal r12
+Index: linux-2.6.18-avr32/arch/avr32/lib/io-writesl.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/io-writesl.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,20 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++ .global __raw_writesl
++ .type __raw_writesl,@function
++__raw_writesl:
++ cp.w r10, 0
++ reteq r12
++
++1: ld.w r8, r11++
++ sub r10, 1
++ st.w r12[0], r8
++ brne 1b
++
++ retal r12
+Index: linux-2.6.18-avr32/arch/avr32/lib/io-writesw.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/io-writesw.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,38 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++.Lnot_word_aligned:
++ ld.uh r8, r11++
++ sub r10, 1
++ st.h r12[0], r8
++
++ .global __raw_writesw
++ .type __raw_writesw,@function
++__raw_writesw:
++ cp.w r10, 0
++ mov r9, 3
++ reteq r12
++ tst r11, r9
++ brne .Lnot_word_aligned
++
++ sub r10, 2
++ brlt 2f
++
++1: ld.w r8, r11++
++ bfextu r9, r8, 16, 16
++ st.h r12[0], r9
++ st.h r12[0], r8
++ sub r10, 2
++ brge 1b
++
++2: sub r10, -2
++ reteq r12
++
++ ld.uh r8, r11++
++ st.h r12[0], r8
++ retal r12
+Index: linux-2.6.18-avr32/arch/avr32/lib/libgcc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/libgcc.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,33 @@
++/* Definitions for various functions 'borrowed' from gcc-3.4.3 */
++
++#define BITS_PER_UNIT 8
++
++typedef int QItype __attribute__ ((mode (QI)));
++typedef unsigned int UQItype __attribute__ ((mode (QI)));
++typedef int HItype __attribute__ ((mode (HI)));
++typedef unsigned int UHItype __attribute__ ((mode (HI)));
++typedef int SItype __attribute__ ((mode (SI)));
++typedef unsigned int USItype __attribute__ ((mode (SI)));
++typedef int DItype __attribute__ ((mode (DI)));
++typedef unsigned int UDItype __attribute__ ((mode (DI)));
++typedef float SFtype __attribute__ ((mode (SF)));
++typedef float DFtype __attribute__ ((mode (DF)));
++typedef int word_type __attribute__ ((mode (__word__)));
++
++#define W_TYPE_SIZE (4 * BITS_PER_UNIT)
++#define Wtype SItype
++#define UWtype USItype
++#define HWtype SItype
++#define UHWtype USItype
++#define DWtype DItype
++#define UDWtype UDItype
++#define __NW(a,b) __ ## a ## si ## b
++#define __NDW(a,b) __ ## a ## di ## b
++
++struct DWstruct {Wtype high, low;};
++
++typedef union
++{
++ struct DWstruct s;
++ DWtype ll;
++} DWunion;
+Index: linux-2.6.18-avr32/arch/avr32/lib/longlong.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/longlong.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,98 @@
++/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
++ Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000
++ Free Software Foundation, Inc.
++
++ This definition file is free software; you can redistribute it
++ and/or modify it under the terms of the GNU General Public
++ License as published by the Free Software Foundation; either
++ version 2, or (at your option) any later version.
++
++ This definition file is distributed in the hope that it will be
++ useful, but WITHOUT ANY WARRANTY; without even the implied
++ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++ See the GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++/* Borrowed from gcc-3.4.3 */
++
++#define __BITS4 (W_TYPE_SIZE / 4)
++#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
++#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
++#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2))
++
++#define count_leading_zeros(count, x) ((count) = __builtin_clz(x))
++
++#define __udiv_qrnnd_c(q, r, n1, n0, d) \
++ do { \
++ UWtype __d1, __d0, __q1, __q0; \
++ UWtype __r1, __r0, __m; \
++ __d1 = __ll_highpart (d); \
++ __d0 = __ll_lowpart (d); \
++ \
++ __r1 = (n1) % __d1; \
++ __q1 = (n1) / __d1; \
++ __m = (UWtype) __q1 * __d0; \
++ __r1 = __r1 * __ll_B | __ll_highpart (n0); \
++ if (__r1 < __m) \
++ { \
++ __q1--, __r1 += (d); \
++ if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
++ if (__r1 < __m) \
++ __q1--, __r1 += (d); \
++ } \
++ __r1 -= __m; \
++ \
++ __r0 = __r1 % __d1; \
++ __q0 = __r1 / __d1; \
++ __m = (UWtype) __q0 * __d0; \
++ __r0 = __r0 * __ll_B | __ll_lowpart (n0); \
++ if (__r0 < __m) \
++ { \
++ __q0--, __r0 += (d); \
++ if (__r0 >= (d)) \
++ if (__r0 < __m) \
++ __q0--, __r0 += (d); \
++ } \
++ __r0 -= __m; \
++ \
++ (q) = (UWtype) __q1 * __ll_B | __q0; \
++ (r) = __r0; \
++ } while (0)
++
++#define udiv_qrnnd __udiv_qrnnd_c
++
++#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
++ do { \
++ UWtype __x; \
++ __x = (al) - (bl); \
++ (sh) = (ah) - (bh) - (__x > (al)); \
++ (sl) = __x; \
++ } while (0)
++
++#define umul_ppmm(w1, w0, u, v) \
++ do { \
++ UWtype __x0, __x1, __x2, __x3; \
++ UHWtype __ul, __vl, __uh, __vh; \
++ \
++ __ul = __ll_lowpart (u); \
++ __uh = __ll_highpart (u); \
++ __vl = __ll_lowpart (v); \
++ __vh = __ll_highpart (v); \
++ \
++ __x0 = (UWtype) __ul * __vl; \
++ __x1 = (UWtype) __ul * __vh; \
++ __x2 = (UWtype) __uh * __vl; \
++ __x3 = (UWtype) __uh * __vh; \
++ \
++ __x1 += __ll_highpart (__x0);/* this can't give carry */ \
++ __x1 += __x2; /* but this indeed can */ \
++ if (__x1 < __x2) /* did we get it? */ \
++ __x3 += __ll_B; /* yes, add it in the proper pos. */ \
++ \
++ (w1) = __x3 + __ll_highpart (__x1); \
++ (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0); \
++ } while (0)
+Index: linux-2.6.18-avr32/arch/avr32/lib/memcpy.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/memcpy.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,62 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++ /*
++ * void *memcpy(void *to, const void *from, unsigned long n)
++ *
++ * This implementation does word-aligned loads in the main loop,
++ * possibly sacrificing alignment of stores.
++ *
++ * Hopefully, in most cases, both "to" and "from" will be
++ * word-aligned to begin with.
++ */
++ .text
++ .global memcpy
++ .type memcpy, @function
++memcpy:
++ mov r9, r11
++ andl r9, 3, COH
++ brne 1f
++
++ /* At this point, "from" is word-aligned */
++2: sub r10, 4
++ mov r9, r12
++ brlt 4f
++
++3: ld.w r8, r11++
++ sub r10, 4
++ st.w r12++, r8
++ brge 3b
++
++4: neg r10
++ reteq r9
++
++ /* Handle unaligned count */
++ lsl r10, 2
++ add pc, pc, r10
++ ld.ub r8, r11++
++ st.b r12++, r8
++ ld.ub r8, r11++
++ st.b r12++, r8
++ ld.ub r8, r11++
++ st.b r12++, r8
++ retal r9
++
++ /* Handle unaligned "from" pointer */
++1: sub r10, 4
++ brlt 4b
++ add r10, r9
++ lsl r9, 2
++ add pc, pc, r9
++ ld.ub r8, r11++
++ st.b r12++, r8
++ ld.ub r8, r11++
++ st.b r12++, r8
++ ld.ub r8, r11++
++ st.b r12++, r8
++ rjmp 2b
+Index: linux-2.6.18-avr32/arch/avr32/lib/memset.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/memset.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,72 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * Based on linux/arch/arm/lib/memset.S
++ * Copyright (C) 1995-2000 Russell King
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * ASM optimised string functions
++ */
++#include <asm/asm.h>
++
++ /*
++ * r12: void *b
++ * r11: int c
++ * r10: size_t len
++ *
++ * Returns b in r12
++ */
++ .text
++ .global memset
++ .type memset, @function
++ .align 5
++memset:
++ mov r9, r12
++ mov r8, r12
++ or r11, r11, r11 << 8
++ andl r9, 3, COH
++ brne 1f
++
++2: or r11, r11, r11 << 16
++ sub r10, 4
++ brlt 5f
++
++ /* Let's do some real work */
++4: st.w r8++, r11
++ sub r10, 4
++ brge 4b
++
++ /*
++ * When we get here, we've got less than 4 bytes to set. r10
++ * might be negative.
++ */
++5: sub r10, -4
++ reteq r12
++
++ /* Fastpath ends here, exactly 32 bytes from memset */
++
++ /* Handle unaligned count or pointer */
++ bld r10, 1
++ brcc 6f
++ st.b r8++, r11
++ st.b r8++, r11
++ bld r10, 0
++ retcc r12
++6: st.b r8++, r11
++ retal r12
++
++ /* Handle unaligned pointer */
++1: sub r10, 4
++ brlt 5b
++ add r10, r9
++ lsl r9, 1
++ add pc, r9
++ st.b r8++, r11
++ st.b r8++, r11
++ st.b r8++, r11
++ rjmp 2b
++
++ .size memset, . - memset
+Index: linux-2.6.18-avr32/arch/avr32/lib/strncpy_from_user.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/strncpy_from_user.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,60 @@
++/*
++ * Copy to/from userspace with optional address space checking.
++ *
++ * Copyright 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/errno.h>
++
++#include <asm/page.h>
++#include <asm/thread_info.h>
++#include <asm/asm.h>
++
++ /*
++ * long strncpy_from_user(char *dst, const char *src, long count)
++ *
++ * On success, returns the length of the string, not including
++ * the terminating NUL.
++ *
++ * If the string is longer than count, returns count
++ *
++ * If userspace access fails, returns -EFAULT
++ */
++ .text
++ .align 1
++ .global strncpy_from_user
++ .type strncpy_from_user, "function"
++strncpy_from_user:
++ mov r9, -EFAULT
++ branch_if_kernel r8, __strncpy_from_user
++ ret_if_privileged r8, r11, r10, r9
++
++ .global __strncpy_from_user
++ .type __strncpy_from_user, "function"
++__strncpy_from_user:
++ cp.w r10, 0
++ reteq 0
++
++ mov r9, r10
++
++1: ld.ub r8, r11++
++ st.b r12++, r8
++ cp.w r8, 0
++ breq 2f
++ sub r9, 1
++ brne 1b
++
++2: sub r10, r9
++ retal r10
++
++ .section .fixup, "ax"
++ .align 1
++3: mov r12, -EFAULT
++ retal r12
++
++ .section __ex_table, "a"
++ .align 2
++ .long 1b, 3b
+Index: linux-2.6.18-avr32/arch/avr32/lib/strnlen_user.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/strnlen_user.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,67 @@
++/*
++ * Copy to/from userspace with optional address space checking.
++ *
++ * Copyright 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <asm/page.h>
++#include <asm/thread_info.h>
++#include <asm/processor.h>
++#include <asm/asm.h>
++
++ .text
++ .align 1
++ .global strnlen_user
++ .type strnlen_user, "function"
++strnlen_user:
++ branch_if_kernel r8, __strnlen_user
++ sub r8, r11, 1
++ add r8, r12
++ retcs 0
++ brmi adjust_length /* do a closer inspection */
++
++ .global __strnlen_user
++ .type __strnlen_user, "function"
++__strnlen_user:
++ mov r10, r12
++
++10: ld.ub r8, r12++
++ cp.w r8, 0
++ breq 2f
++ sub r11, 1
++ brne 10b
++
++ sub r12, -1
++2: sub r12, r10
++ retal r12
++
++
++ .type adjust_length, "function"
++adjust_length:
++ cp.w r12, 0 /* addr must always be < TASK_SIZE */
++ retmi 0
++
++ pushm lr
++ lddpc lr, _task_size
++ sub r11, lr, r12
++ mov r9, r11
++ rcall __strnlen_user
++ cp.w r12, r9
++ brgt 1f
++ popm pc
++1: popm pc, r12=0
++
++ .align 2
++_task_size:
++ .long TASK_SIZE
++
++ .section .fixup, "ax"
++ .align 1
++19: retal 0
++
++ .section __ex_table, "a"
++ .align 2
++ .long 10b, 19b
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/Makefile 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,2 @@
++obj-y += at32ap.o clock.o pio.o intc.o extint.o hsmc.o
++obj-$(CONFIG_CPU_AT32AP7000) += at32ap7000.o
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap.c 2006-12-04 11:50:22.000000000 +0100
+@@ -0,0 +1,90 @@
++/*
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/clk.h>
++#include <linux/err.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++
++#include <asm/io.h>
++
++#include <asm/arch/init.h>
++#include <asm/arch/sm.h>
++
++struct at32_sm system_manager;
++
++static int __init at32_sm_init(void)
++{
++ struct resource *regs;
++ struct at32_sm *sm = &system_manager;
++ int ret = -ENXIO;
++
++ regs = platform_get_resource(&at32_sm_device, IORESOURCE_MEM, 0);
++ if (!regs)
++ goto fail;
++
++ spin_lock_init(&sm->lock);
++ sm->pdev = &at32_sm_device;
++
++ ret = -ENOMEM;
++ sm->regs = ioremap(regs->start, regs->end - regs->start + 1);
++ if (!sm->regs)
++ goto fail;
++
++ return 0;
++
++fail:
++ printk(KERN_ERR "Failed to initialize System Manager: %d\n", ret);
++ return ret;
++}
++
++void __init setup_platform(void)
++{
++ at32_sm_init();
++ at32_clock_init();
++ at32_portmux_init();
++
++ /* FIXME: This doesn't belong here */
++ at32_setup_serial_console(1);
++}
++
++static int __init pdc_probe(struct platform_device *pdev)
++{
++ struct clk *pclk, *hclk;
++
++ pclk = clk_get(&pdev->dev, "pclk");
++ if (IS_ERR(pclk)) {
++ dev_err(&pdev->dev, "no pclk defined\n");
++ return PTR_ERR(pclk);
++ }
++ hclk = clk_get(&pdev->dev, "hclk");
++ if (IS_ERR(hclk)) {
++ dev_err(&pdev->dev, "no hclk defined\n");
++ clk_put(pclk);
++ return PTR_ERR(hclk);
++ }
++
++ clk_enable(pclk);
++ clk_enable(hclk);
++
++ dev_info(&pdev->dev, "Atmel Peripheral DMA Controller enabled\n");
++ return 0;
++}
++
++static struct platform_driver pdc_driver = {
++ .probe = pdc_probe,
++ .driver = {
++ .name = "pdc",
++ },
++};
++
++static int __init pdc_init(void)
++{
++ return platform_driver_register(&pdc_driver);
++}
++arch_initcall(pdc_init);
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,876 @@
++/*
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/clk.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++
++#include <asm/io.h>
++
++#include <asm/arch/board.h>
++#include <asm/arch/portmux.h>
++#include <asm/arch/sm.h>
++
++#include "clock.h"
++#include "pio.h"
++#include "sm.h"
++
++#define PBMEM(base) \
++ { \
++ .start = base, \
++ .end = base + 0x3ff, \
++ .flags = IORESOURCE_MEM, \
++ }
++#define IRQ(num) \
++ { \
++ .start = num, \
++ .end = num, \
++ .flags = IORESOURCE_IRQ, \
++ }
++#define NAMED_IRQ(num, _name) \
++ { \
++ .start = num, \
++ .end = num, \
++ .name = _name, \
++ .flags = IORESOURCE_IRQ, \
++ }
++
++#define DEFINE_DEV(_name, _id) \
++static struct platform_device _name##_id##_device = { \
++ .name = #_name, \
++ .id = _id, \
++ .resource = _name##_id##_resource, \
++ .num_resources = ARRAY_SIZE(_name##_id##_resource), \
++}
++#define DEFINE_DEV_DATA(_name, _id) \
++static struct platform_device _name##_id##_device = { \
++ .name = #_name, \
++ .id = _id, \
++ .dev = { \
++ .platform_data = &_name##_id##_data, \
++ }, \
++ .resource = _name##_id##_resource, \
++ .num_resources = ARRAY_SIZE(_name##_id##_resource), \
++}
++
++#define DEV_CLK(_name, devname, bus, _index) \
++static struct clk devname##_##_name = { \
++ .name = #_name, \
++ .dev = &devname##_device.dev, \
++ .parent = &bus##_clk, \
++ .mode = bus##_clk_mode, \
++ .get_rate = bus##_clk_get_rate, \
++ .index = _index, \
++}
++
++enum {
++ PIOA,
++ PIOB,
++ PIOC,
++ PIOD,
++};
++
++enum {
++ FUNC_A,
++ FUNC_B,
++};
++
++unsigned long at32ap7000_osc_rates[3] = {
++ [0] = 32768,
++ /* FIXME: these are ATSTK1002-specific */
++ [1] = 20000000,
++ [2] = 12000000,
++};
++
++static unsigned long osc_get_rate(struct clk *clk)
++{
++ return at32ap7000_osc_rates[clk->index];
++}
++
++static unsigned long pll_get_rate(struct clk *clk, unsigned long control)
++{
++ unsigned long div, mul, rate;
++
++ if (!(control & SM_BIT(PLLEN)))
++ return 0;
++
++ div = SM_BFEXT(PLLDIV, control) + 1;
++ mul = SM_BFEXT(PLLMUL, control) + 1;
++
++ rate = clk->parent->get_rate(clk->parent);
++ rate = (rate + div / 2) / div;
++ rate *= mul;
++
++ return rate;
++}
++
++static unsigned long pll0_get_rate(struct clk *clk)
++{
++ u32 control;
++
++ control = sm_readl(&system_manager, PM_PLL0);
++
++ return pll_get_rate(clk, control);
++}
++
++static unsigned long pll1_get_rate(struct clk *clk)
++{
++ u32 control;
++
++ control = sm_readl(&system_manager, PM_PLL1);
++
++ return pll_get_rate(clk, control);
++}
++
++/*
++ * The AT32AP7000 has five primary clock sources: One 32kHz
++ * oscillator, two crystal oscillators and two PLLs.
++ */
++static struct clk osc32k = {
++ .name = "osc32k",
++ .get_rate = osc_get_rate,
++ .users = 1,
++ .index = 0,
++};
++static struct clk osc0 = {
++ .name = "osc0",
++ .get_rate = osc_get_rate,
++ .users = 1,
++ .index = 1,
++};
++static struct clk osc1 = {
++ .name = "osc1",
++ .get_rate = osc_get_rate,
++ .index = 2,
++};
++static struct clk pll0 = {
++ .name = "pll0",
++ .get_rate = pll0_get_rate,
++ .parent = &osc0,
++};
++static struct clk pll1 = {
++ .name = "pll1",
++ .get_rate = pll1_get_rate,
++ .parent = &osc0,
++};
++
++/*
++ * The main clock can be either osc0 or pll0. The boot loader may
++ * have chosen one for us, so we don't really know which one until we
++ * have a look at the SM.
++ */
++static struct clk *main_clock;
++
++/*
++ * Synchronous clocks are generated from the main clock. The clocks
++ * must satisfy the constraint
++ * fCPU >= fHSB >= fPB
++ * i.e. each clock must not be faster than its parent.
++ */
++static unsigned long bus_clk_get_rate(struct clk *clk, unsigned int shift)
++{
++ return main_clock->get_rate(main_clock) >> shift;
++};
++
++static void cpu_clk_mode(struct clk *clk, int enabled)
++{
++ struct at32_sm *sm = &system_manager;
++ unsigned long flags;
++ u32 mask;
++
++ spin_lock_irqsave(&sm->lock, flags);
++ mask = sm_readl(sm, PM_CPU_MASK);
++ if (enabled)
++ mask |= 1 << clk->index;
++ else
++ mask &= ~(1 << clk->index);
++ sm_writel(sm, PM_CPU_MASK, mask);
++ spin_unlock_irqrestore(&sm->lock, flags);
++}
++
++static unsigned long cpu_clk_get_rate(struct clk *clk)
++{
++ unsigned long cksel, shift = 0;
++
++ cksel = sm_readl(&system_manager, PM_CKSEL);
++ if (cksel & SM_BIT(CPUDIV))
++ shift = SM_BFEXT(CPUSEL, cksel) + 1;
++
++ return bus_clk_get_rate(clk, shift);
++}
++
++static void hsb_clk_mode(struct clk *clk, int enabled)
++{
++ struct at32_sm *sm = &system_manager;
++ unsigned long flags;
++ u32 mask;
++
++ spin_lock_irqsave(&sm->lock, flags);
++ mask = sm_readl(sm, PM_HSB_MASK);
++ if (enabled)
++ mask |= 1 << clk->index;
++ else
++ mask &= ~(1 << clk->index);
++ sm_writel(sm, PM_HSB_MASK, mask);
++ spin_unlock_irqrestore(&sm->lock, flags);
++}
++
++static unsigned long hsb_clk_get_rate(struct clk *clk)
++{
++ unsigned long cksel, shift = 0;
++
++ cksel = sm_readl(&system_manager, PM_CKSEL);
++ if (cksel & SM_BIT(HSBDIV))
++ shift = SM_BFEXT(HSBSEL, cksel) + 1;
++
++ return bus_clk_get_rate(clk, shift);
++}
++
++static void pba_clk_mode(struct clk *clk, int enabled)
++{
++ struct at32_sm *sm = &system_manager;
++ unsigned long flags;
++ u32 mask;
++
++ spin_lock_irqsave(&sm->lock, flags);
++ mask = sm_readl(sm, PM_PBA_MASK);
++ if (enabled)
++ mask |= 1 << clk->index;
++ else
++ mask &= ~(1 << clk->index);
++ sm_writel(sm, PM_PBA_MASK, mask);
++ spin_unlock_irqrestore(&sm->lock, flags);
++}
++
++static unsigned long pba_clk_get_rate(struct clk *clk)
++{
++ unsigned long cksel, shift = 0;
++
++ cksel = sm_readl(&system_manager, PM_CKSEL);
++ if (cksel & SM_BIT(PBADIV))
++ shift = SM_BFEXT(PBASEL, cksel) + 1;
++
++ return bus_clk_get_rate(clk, shift);
++}
++
++static void pbb_clk_mode(struct clk *clk, int enabled)
++{
++ struct at32_sm *sm = &system_manager;
++ unsigned long flags;
++ u32 mask;
++
++ spin_lock_irqsave(&sm->lock, flags);
++ mask = sm_readl(sm, PM_PBB_MASK);
++ if (enabled)
++ mask |= 1 << clk->index;
++ else
++ mask &= ~(1 << clk->index);
++ sm_writel(sm, PM_PBB_MASK, mask);
++ spin_unlock_irqrestore(&sm->lock, flags);
++}
++
++static unsigned long pbb_clk_get_rate(struct clk *clk)
++{
++ unsigned long cksel, shift = 0;
++
++ cksel = sm_readl(&system_manager, PM_CKSEL);
++ if (cksel & SM_BIT(PBBDIV))
++ shift = SM_BFEXT(PBBSEL, cksel) + 1;
++
++ return bus_clk_get_rate(clk, shift);
++}
++
++static struct clk cpu_clk = {
++ .name = "cpu",
++ .get_rate = cpu_clk_get_rate,
++ .users = 1,
++};
++static struct clk hsb_clk = {
++ .name = "hsb",
++ .parent = &cpu_clk,
++ .get_rate = hsb_clk_get_rate,
++};
++static struct clk pba_clk = {
++ .name = "pba",
++ .parent = &hsb_clk,
++ .mode = hsb_clk_mode,
++ .get_rate = pba_clk_get_rate,
++ .index = 1,
++};
++static struct clk pbb_clk = {
++ .name = "pbb",
++ .parent = &hsb_clk,
++ .mode = hsb_clk_mode,
++ .get_rate = pbb_clk_get_rate,
++ .users = 1,
++ .index = 2,
++};
++
++/* --------------------------------------------------------------------
++ * Generic Clock operations
++ * -------------------------------------------------------------------- */
++
++static void genclk_mode(struct clk *clk, int enabled)
++{
++ u32 control;
++
++ BUG_ON(clk->index > 7);
++
++ control = sm_readl(&system_manager, PM_GCCTRL + 4 * clk->index);
++ if (enabled)
++ control |= SM_BIT(CEN);
++ else
++ control &= ~SM_BIT(CEN);
++ sm_writel(&system_manager, PM_GCCTRL + 4 * clk->index, control);
++}
++
++static unsigned long genclk_get_rate(struct clk *clk)
++{
++ u32 control;
++ unsigned long div = 1;
++
++ BUG_ON(clk->index > 7);
++
++ if (!clk->parent)
++ return 0;
++
++ control = sm_readl(&system_manager, PM_GCCTRL + 4 * clk->index);
++ if (control & SM_BIT(DIVEN))
++ div = 2 * (SM_BFEXT(DIV, control) + 1);
++
++ return clk->parent->get_rate(clk->parent) / div;
++}
++
++static long genclk_set_rate(struct clk *clk, unsigned long rate, int apply)
++{
++ u32 control;
++ unsigned long parent_rate, actual_rate, div;
++
++ BUG_ON(clk->index > 7);
++
++ if (!clk->parent)
++ return 0;
++
++ parent_rate = clk->parent->get_rate(clk->parent);
++ control = sm_readl(&system_manager, PM_GCCTRL + 4 * clk->index);
++
++ if (rate > 3 * parent_rate / 4) {
++ actual_rate = parent_rate;
++ control &= ~SM_BIT(DIVEN);
++ } else {
++ div = (parent_rate + rate) / (2 * rate) - 1;
++ control = SM_BFINS(DIV, div, control) | SM_BIT(DIVEN);
++ actual_rate = parent_rate / (2 * (div + 1));
++ }
++
++ printk("clk %s: new rate %lu (actual rate %lu)\n",
++ clk->name, rate, actual_rate);
++
++ if (apply)
++ sm_writel(&system_manager, PM_GCCTRL + 4 * clk->index,
++ control);
++
++ return actual_rate;
++}
++
++int genclk_set_parent(struct clk *clk, struct clk *parent)
++{
++ u32 control;
++
++ BUG_ON(clk->index > 7);
++
++ printk("clk %s: new parent %s (was %s)\n",
++ clk->name, parent->name,
++ clk->parent ? clk->parent->name : "(null)");
++
++ control = sm_readl(&system_manager, PM_GCCTRL + 4 * clk->index);
++
++ if (parent == &osc1 || parent == &pll1)
++ control |= SM_BIT(OSCSEL);
++ else if (parent == &osc0 || parent == &pll0)
++ control &= ~SM_BIT(OSCSEL);
++ else
++ return -EINVAL;
++
++ if (parent == &pll0 || parent == &pll1)
++ control |= SM_BIT(PLLSEL);
++ else
++ control &= ~SM_BIT(PLLSEL);
++
++ sm_writel(&system_manager, PM_GCCTRL + 4 * clk->index, control);
++ clk->parent = parent;
++
++ return 0;
++}
++
++/* --------------------------------------------------------------------
++ * System peripherals
++ * -------------------------------------------------------------------- */
++static struct resource sm_resource[] = {
++ PBMEM(0xfff00000),
++ NAMED_IRQ(19, "eim"),
++ NAMED_IRQ(20, "pm"),
++ NAMED_IRQ(21, "rtc"),
++};
++struct platform_device at32_sm_device = {
++ .name = "sm",
++ .id = 0,
++ .resource = sm_resource,
++ .num_resources = ARRAY_SIZE(sm_resource),
++};
++DEV_CLK(pclk, at32_sm, pbb, 0);
++
++static struct resource intc0_resource[] = {
++ PBMEM(0xfff00400),
++};
++struct platform_device at32_intc0_device = {
++ .name = "intc",
++ .id = 0,
++ .resource = intc0_resource,
++ .num_resources = ARRAY_SIZE(intc0_resource),
++};
++DEV_CLK(pclk, at32_intc0, pbb, 1);
++
++static struct clk ebi_clk = {
++ .name = "ebi",
++ .parent = &hsb_clk,
++ .mode = hsb_clk_mode,
++ .get_rate = hsb_clk_get_rate,
++ .users = 1,
++};
++static struct clk hramc_clk = {
++ .name = "hramc",
++ .parent = &hsb_clk,
++ .mode = hsb_clk_mode,
++ .get_rate = hsb_clk_get_rate,
++ .users = 1,
++};
++
++static struct resource smc0_resource[] = {
++ PBMEM(0xfff03400),
++};
++DEFINE_DEV(smc, 0);
++DEV_CLK(pclk, smc0, pbb, 13);
++DEV_CLK(mck, smc0, hsb, 0);
++
++static struct platform_device pdc_device = {
++ .name = "pdc",
++ .id = 0,
++};
++DEV_CLK(hclk, pdc, hsb, 4);
++DEV_CLK(pclk, pdc, pba, 16);
++
++static struct clk pico_clk = {
++ .name = "pico",
++ .parent = &cpu_clk,
++ .mode = cpu_clk_mode,
++ .get_rate = cpu_clk_get_rate,
++ .users = 1,
++};
++
++/* --------------------------------------------------------------------
++ * PIO
++ * -------------------------------------------------------------------- */
++
++static struct resource pio0_resource[] = {
++ PBMEM(0xffe02800),
++ IRQ(13),
++};
++DEFINE_DEV(pio, 0);
++DEV_CLK(mck, pio0, pba, 10);
++
++static struct resource pio1_resource[] = {
++ PBMEM(0xffe02c00),
++ IRQ(14),
++};
++DEFINE_DEV(pio, 1);
++DEV_CLK(mck, pio1, pba, 11);
++
++static struct resource pio2_resource[] = {
++ PBMEM(0xffe03000),
++ IRQ(15),
++};
++DEFINE_DEV(pio, 2);
++DEV_CLK(mck, pio2, pba, 12);
++
++static struct resource pio3_resource[] = {
++ PBMEM(0xffe03400),
++ IRQ(16),
++};
++DEFINE_DEV(pio, 3);
++DEV_CLK(mck, pio3, pba, 13);
++
++void __init at32_add_system_devices(void)
++{
++ system_manager.eim_first_irq = NR_INTERNAL_IRQS;
++
++ platform_device_register(&at32_sm_device);
++ platform_device_register(&at32_intc0_device);
++ platform_device_register(&smc0_device);
++ platform_device_register(&pdc_device);
++
++ platform_device_register(&pio0_device);
++ platform_device_register(&pio1_device);
++ platform_device_register(&pio2_device);
++ platform_device_register(&pio3_device);
++}
++
++/* --------------------------------------------------------------------
++ * USART
++ * -------------------------------------------------------------------- */
++
++static struct resource usart0_resource[] = {
++ PBMEM(0xffe00c00),
++ IRQ(7),
++};
++DEFINE_DEV(usart, 0);
++DEV_CLK(usart, usart0, pba, 4);
++
++static struct resource usart1_resource[] = {
++ PBMEM(0xffe01000),
++ IRQ(7),
++};
++DEFINE_DEV(usart, 1);
++DEV_CLK(usart, usart1, pba, 4);
++
++static struct resource usart2_resource[] = {
++ PBMEM(0xffe01400),
++ IRQ(8),
++};
++DEFINE_DEV(usart, 2);
++DEV_CLK(usart, usart2, pba, 5);
++
++static struct resource usart3_resource[] = {
++ PBMEM(0xffe01800),
++ IRQ(9),
++};
++DEFINE_DEV(usart, 3);
++DEV_CLK(usart, usart3, pba, 6);
++
++static inline void configure_usart0_pins(void)
++{
++ portmux_set_func(PIOA, 8, FUNC_B); /* RXD */
++ portmux_set_func(PIOA, 9, FUNC_B); /* TXD */
++}
++
++static inline void configure_usart1_pins(void)
++{
++ portmux_set_func(PIOA, 17, FUNC_A); /* RXD */
++ portmux_set_func(PIOA, 18, FUNC_A); /* TXD */
++}
++
++static inline void configure_usart2_pins(void)
++{
++ portmux_set_func(PIOB, 26, FUNC_B); /* RXD */
++ portmux_set_func(PIOB, 27, FUNC_B); /* TXD */
++}
++
++static inline void configure_usart3_pins(void)
++{
++ portmux_set_func(PIOB, 18, FUNC_B); /* RXD */
++ portmux_set_func(PIOB, 17, FUNC_B); /* TXD */
++}
++
++static struct platform_device *setup_usart(unsigned int id)
++{
++ struct platform_device *pdev;
++
++ switch (id) {
++ case 0:
++ pdev = &usart0_device;
++ configure_usart0_pins();
++ break;
++ case 1:
++ pdev = &usart1_device;
++ configure_usart1_pins();
++ break;
++ case 2:
++ pdev = &usart2_device;
++ configure_usart2_pins();
++ break;
++ case 3:
++ pdev = &usart3_device;
++ configure_usart3_pins();
++ break;
++ default:
++ pdev = NULL;
++ break;
++ }
++
++ return pdev;
++}
++
++struct platform_device *__init at32_add_device_usart(unsigned int id)
++{
++ struct platform_device *pdev;
++
++ pdev = setup_usart(id);
++ if (pdev)
++ platform_device_register(pdev);
++
++ return pdev;
++}
++
++struct platform_device *at91_default_console_device;
++
++void __init at32_setup_serial_console(unsigned int usart_id)
++{
++ at91_default_console_device = setup_usart(usart_id);
++}
++
++/* --------------------------------------------------------------------
++ * Ethernet
++ * -------------------------------------------------------------------- */
++
++static struct eth_platform_data macb0_data;
++static struct resource macb0_resource[] = {
++ PBMEM(0xfff01800),
++ IRQ(25),
++};
++DEFINE_DEV_DATA(macb, 0);
++DEV_CLK(hclk, macb0, hsb, 8);
++DEV_CLK(pclk, macb0, pbb, 6);
++
++struct platform_device *__init
++at32_add_device_eth(unsigned int id, struct eth_platform_data *data)
++{
++ struct platform_device *pdev;
++
++ switch (id) {
++ case 0:
++ pdev = &macb0_device;
++
++ portmux_set_func(PIOC, 3, FUNC_A); /* TXD0 */
++ portmux_set_func(PIOC, 4, FUNC_A); /* TXD1 */
++ portmux_set_func(PIOC, 7, FUNC_A); /* TXEN */
++ portmux_set_func(PIOC, 8, FUNC_A); /* TXCK */
++ portmux_set_func(PIOC, 9, FUNC_A); /* RXD0 */
++ portmux_set_func(PIOC, 10, FUNC_A); /* RXD1 */
++ portmux_set_func(PIOC, 13, FUNC_A); /* RXER */
++ portmux_set_func(PIOC, 15, FUNC_A); /* RXDV */
++ portmux_set_func(PIOC, 16, FUNC_A); /* MDC */
++ portmux_set_func(PIOC, 17, FUNC_A); /* MDIO */
++
++ if (!data->is_rmii) {
++ portmux_set_func(PIOC, 0, FUNC_A); /* COL */
++ portmux_set_func(PIOC, 1, FUNC_A); /* CRS */
++ portmux_set_func(PIOC, 2, FUNC_A); /* TXER */
++ portmux_set_func(PIOC, 5, FUNC_A); /* TXD2 */
++ portmux_set_func(PIOC, 6, FUNC_A); /* TXD3 */
++ portmux_set_func(PIOC, 11, FUNC_A); /* RXD2 */
++ portmux_set_func(PIOC, 12, FUNC_A); /* RXD3 */
++ portmux_set_func(PIOC, 14, FUNC_A); /* RXCK */
++ portmux_set_func(PIOC, 18, FUNC_A); /* SPD */
++ }
++ break;
++
++ default:
++ return NULL;
++ }
++
++ memcpy(pdev->dev.platform_data, data, sizeof(struct eth_platform_data));
++ platform_device_register(pdev);
++
++ return pdev;
++}
++
++/* --------------------------------------------------------------------
++ * SPI
++ * -------------------------------------------------------------------- */
++static struct resource spi0_resource[] = {
++ PBMEM(0xffe00000),
++ IRQ(3),
++};
++DEFINE_DEV(spi, 0);
++DEV_CLK(mck, spi0, pba, 0);
++
++struct platform_device *__init at32_add_device_spi(unsigned int id)
++{
++ struct platform_device *pdev;
++
++ switch (id) {
++ case 0:
++ pdev = &spi0_device;
++ portmux_set_func(PIOA, 0, FUNC_A); /* MISO */
++ portmux_set_func(PIOA, 1, FUNC_A); /* MOSI */
++ portmux_set_func(PIOA, 2, FUNC_A); /* SCK */
++ portmux_set_func(PIOA, 3, FUNC_A); /* NPCS0 */
++ portmux_set_func(PIOA, 4, FUNC_A); /* NPCS1 */
++ portmux_set_func(PIOA, 5, FUNC_A); /* NPCS2 */
++ break;
++
++ default:
++ return NULL;
++ }
++
++ platform_device_register(pdev);
++ return pdev;
++}
++
++/* --------------------------------------------------------------------
++ * LCDC
++ * -------------------------------------------------------------------- */
++static struct lcdc_platform_data lcdc0_data;
++static struct resource lcdc0_resource[] = {
++ {
++ .start = 0xff000000,
++ .end = 0xff000fff,
++ .flags = IORESOURCE_MEM,
++ },
++ IRQ(1),
++};
++DEFINE_DEV_DATA(lcdc, 0);
++DEV_CLK(hclk, lcdc0, hsb, 7);
++static struct clk lcdc0_pixclk = {
++ .name = "pixclk",
++ .dev = &lcdc0_device.dev,
++ .mode = genclk_mode,
++ .get_rate = genclk_get_rate,
++ .set_rate = genclk_set_rate,
++ .set_parent = genclk_set_parent,
++ .index = 7,
++};
++
++struct platform_device *__init
++at32_add_device_lcdc(unsigned int id, struct lcdc_platform_data *data)
++{
++ struct platform_device *pdev;
++
++ switch (id) {
++ case 0:
++ pdev = &lcdc0_device;
++ portmux_set_func(PIOC, 19, FUNC_A); /* CC */
++ portmux_set_func(PIOC, 20, FUNC_A); /* HSYNC */
++ portmux_set_func(PIOC, 21, FUNC_A); /* PCLK */
++ portmux_set_func(PIOC, 22, FUNC_A); /* VSYNC */
++ portmux_set_func(PIOC, 23, FUNC_A); /* DVAL */
++ portmux_set_func(PIOC, 24, FUNC_A); /* MODE */
++ portmux_set_func(PIOC, 25, FUNC_A); /* PWR */
++ portmux_set_func(PIOC, 26, FUNC_A); /* DATA0 */
++ portmux_set_func(PIOC, 27, FUNC_A); /* DATA1 */
++ portmux_set_func(PIOC, 28, FUNC_A); /* DATA2 */
++ portmux_set_func(PIOC, 29, FUNC_A); /* DATA3 */
++ portmux_set_func(PIOC, 30, FUNC_A); /* DATA4 */
++ portmux_set_func(PIOC, 31, FUNC_A); /* DATA5 */
++ portmux_set_func(PIOD, 0, FUNC_A); /* DATA6 */
++ portmux_set_func(PIOD, 1, FUNC_A); /* DATA7 */
++ portmux_set_func(PIOD, 2, FUNC_A); /* DATA8 */
++ portmux_set_func(PIOD, 3, FUNC_A); /* DATA9 */
++ portmux_set_func(PIOD, 4, FUNC_A); /* DATA10 */
++ portmux_set_func(PIOD, 5, FUNC_A); /* DATA11 */
++ portmux_set_func(PIOD, 6, FUNC_A); /* DATA12 */
++ portmux_set_func(PIOD, 7, FUNC_A); /* DATA13 */
++ portmux_set_func(PIOD, 8, FUNC_A); /* DATA14 */
++ portmux_set_func(PIOD, 9, FUNC_A); /* DATA15 */
++ portmux_set_func(PIOD, 10, FUNC_A); /* DATA16 */
++ portmux_set_func(PIOD, 11, FUNC_A); /* DATA17 */
++ portmux_set_func(PIOD, 12, FUNC_A); /* DATA18 */
++ portmux_set_func(PIOD, 13, FUNC_A); /* DATA19 */
++ portmux_set_func(PIOD, 14, FUNC_A); /* DATA20 */
++ portmux_set_func(PIOD, 15, FUNC_A); /* DATA21 */
++ portmux_set_func(PIOD, 16, FUNC_A); /* DATA22 */
++ portmux_set_func(PIOD, 17, FUNC_A); /* DATA23 */
++
++ clk_set_parent(&lcdc0_pixclk, &pll0);
++ clk_set_rate(&lcdc0_pixclk, clk_get_rate(&pll0));
++ break;
++
++ default:
++ return NULL;
++ }
++
++ memcpy(pdev->dev.platform_data, data,
++ sizeof(struct lcdc_platform_data));
++
++ platform_device_register(pdev);
++ return pdev;
++}
++
++struct clk *at32_clock_list[] = {
++ &osc32k,
++ &osc0,
++ &osc1,
++ &pll0,
++ &pll1,
++ &cpu_clk,
++ &hsb_clk,
++ &pba_clk,
++ &pbb_clk,
++ &at32_sm_pclk,
++ &at32_intc0_pclk,
++ &ebi_clk,
++ &hramc_clk,
++ &smc0_pclk,
++ &smc0_mck,
++ &pdc_hclk,
++ &pdc_pclk,
++ &pico_clk,
++ &pio0_mck,
++ &pio1_mck,
++ &pio2_mck,
++ &pio3_mck,
++ &usart0_usart,
++ &usart1_usart,
++ &usart2_usart,
++ &usart3_usart,
++ &macb0_hclk,
++ &macb0_pclk,
++ &spi0_mck,
++ &lcdc0_hclk,
++ &lcdc0_pixclk,
++};
++unsigned int at32_nr_clocks = ARRAY_SIZE(at32_clock_list);
++
++void __init at32_portmux_init(void)
++{
++ at32_init_pio(&pio0_device);
++ at32_init_pio(&pio1_device);
++ at32_init_pio(&pio2_device);
++ at32_init_pio(&pio3_device);
++}
++
++void __init at32_clock_init(void)
++{
++ struct at32_sm *sm = &system_manager;
++ u32 cpu_mask = 0, hsb_mask = 0, pba_mask = 0, pbb_mask = 0;
++ int i;
++
++ if (sm_readl(sm, PM_MCCTRL) & SM_BIT(PLLSEL))
++ main_clock = &pll0;
++ else
++ main_clock = &osc0;
++
++ if (sm_readl(sm, PM_PLL0) & SM_BIT(PLLOSC))
++ pll0.parent = &osc1;
++ if (sm_readl(sm, PM_PLL1) & SM_BIT(PLLOSC))
++ pll1.parent = &osc1;
++
++ /*
++ * Turn on all clocks that have at least one user already, and
++ * turn off everything else. We only do this for module
++ * clocks, and even though it isn't particularly pretty to
++ * check the address of the mode function, it should do the
++ * trick...
++ */
++ for (i = 0; i < ARRAY_SIZE(at32_clock_list); i++) {
++ struct clk *clk = at32_clock_list[i];
++
++ if (clk->mode == &cpu_clk_mode)
++ cpu_mask |= 1 << clk->index;
++ else if (clk->mode == &hsb_clk_mode)
++ hsb_mask |= 1 << clk->index;
++ else if (clk->mode == &pba_clk_mode)
++ pba_mask |= 1 << clk->index;
++ else if (clk->mode == &pbb_clk_mode)
++ pbb_mask |= 1 << clk->index;
++ }
++
++ sm_writel(sm, PM_CPU_MASK, cpu_mask);
++ sm_writel(sm, PM_HSB_MASK, hsb_mask);
++ sm_writel(sm, PM_PBA_MASK, pba_mask);
++ sm_writel(sm, PM_PBB_MASK, pbb_mask);
++}
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/clock.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/clock.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,148 @@
++/*
++ * Clock management for AT32AP CPUs
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * Based on arch/arm/mach-at91rm9200/clock.c
++ * Copyright (C) 2005 David Brownell
++ * Copyright (C) 2005 Ivan Kokshaysky
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/clk.h>
++#include <linux/err.h>
++#include <linux/device.h>
++#include <linux/string.h>
++
++#include "clock.h"
++
++static spinlock_t clk_lock = SPIN_LOCK_UNLOCKED;
++
++struct clk *clk_get(struct device *dev, const char *id)
++{
++ int i;
++
++ for (i = 0; i < at32_nr_clocks; i++) {
++ struct clk *clk = at32_clock_list[i];
++
++ if (clk->dev == dev && strcmp(id, clk->name) == 0)
++ return clk;
++ }
++
++ return ERR_PTR(-ENOENT);
++}
++EXPORT_SYMBOL(clk_get);
++
++void clk_put(struct clk *clk)
++{
++ /* clocks are static for now, we can't free them */
++}
++EXPORT_SYMBOL(clk_put);
++
++static void __clk_enable(struct clk *clk)
++{
++ if (clk->parent)
++ __clk_enable(clk->parent);
++ if (clk->users++ == 0 && clk->mode)
++ clk->mode(clk, 1);
++}
++
++int clk_enable(struct clk *clk)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&clk_lock, flags);
++ __clk_enable(clk);
++ spin_unlock_irqrestore(&clk_lock, flags);
++
++ return 0;
++}
++EXPORT_SYMBOL(clk_enable);
++
++static void __clk_disable(struct clk *clk)
++{
++ BUG_ON(clk->users == 0);
++
++ if (--clk->users == 0 && clk->mode)
++ clk->mode(clk, 0);
++ if (clk->parent)
++ __clk_disable(clk->parent);
++}
++
++void clk_disable(struct clk *clk)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&clk_lock, flags);
++ __clk_disable(clk);
++ spin_unlock_irqrestore(&clk_lock, flags);
++}
++EXPORT_SYMBOL(clk_disable);
++
++unsigned long clk_get_rate(struct clk *clk)
++{
++ unsigned long flags;
++ unsigned long rate;
++
++ spin_lock_irqsave(&clk_lock, flags);
++ rate = clk->get_rate(clk);
++ spin_unlock_irqrestore(&clk_lock, flags);
++
++ return rate;
++}
++EXPORT_SYMBOL(clk_get_rate);
++
++long clk_round_rate(struct clk *clk, unsigned long rate)
++{
++ unsigned long flags, actual_rate;
++
++ if (!clk->set_rate)
++ return -ENOSYS;
++
++ spin_lock_irqsave(&clk_lock, flags);
++ actual_rate = clk->set_rate(clk, rate, 0);
++ spin_unlock_irqrestore(&clk_lock, flags);
++
++ return actual_rate;
++}
++EXPORT_SYMBOL(clk_round_rate);
++
++int clk_set_rate(struct clk *clk, unsigned long rate)
++{
++ unsigned long flags;
++ long ret;
++
++ if (!clk->set_rate)
++ return -ENOSYS;
++
++ spin_lock_irqsave(&clk_lock, flags);
++ ret = clk->set_rate(clk, rate, 1);
++ spin_unlock_irqrestore(&clk_lock, flags);
++
++ return (ret < 0) ? ret : 0;
++}
++EXPORT_SYMBOL(clk_set_rate);
++
++int clk_set_parent(struct clk *clk, struct clk *parent)
++{
++ unsigned long flags;
++ int ret;
++
++ if (!clk->set_parent)
++ return -ENOSYS;
++
++ spin_lock_irqsave(&clk_lock, flags);
++ ret = clk->set_parent(clk, parent);
++ spin_unlock_irqrestore(&clk_lock, flags);
++
++ return ret;
++}
++EXPORT_SYMBOL(clk_set_parent);
++
++struct clk *clk_get_parent(struct clk *clk)
++{
++ return clk->parent;
++}
++EXPORT_SYMBOL(clk_get_parent);
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/clock.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/clock.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,30 @@
++/*
++ * Clock management for AT32AP CPUs
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * Based on arch/arm/mach-at91rm9200/clock.c
++ * Copyright (C) 2005 David Brownell
++ * Copyright (C) 2005 Ivan Kokshaysky
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/clk.h>
++
++struct clk {
++ const char *name; /* Clock name/function */
++ struct device *dev; /* Device the clock is used by */
++ struct clk *parent; /* Parent clock, if any */
++ void (*mode)(struct clk *clk, int enabled);
++ unsigned long (*get_rate)(struct clk *clk);
++ long (*set_rate)(struct clk *clk, unsigned long rate,
++ int apply);
++ int (*set_parent)(struct clk *clk, struct clk *parent);
++ u16 users; /* Enabled if non-zero */
++ u16 index; /* Sibling index */
++};
++
++extern struct clk *at32_clock_list[];
++extern unsigned int at32_nr_clocks;
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/extint.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/extint.c 2006-12-04 12:00:24.000000000 +0100
+@@ -0,0 +1,189 @@
++/*
++ * External interrupt handling for AT32AP CPUs
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/irq.h>
++#include <linux/platform_device.h>
++#include <linux/random.h>
++
++#include <asm/io.h>
++
++#include <asm/arch/sm.h>
++
++#include "sm.h"
++
++static void eim_ack_irq(unsigned int irq)
++{
++ struct at32_sm *sm = get_irq_chip_data(irq);
++ sm_writel(sm, EIM_ICR, 1 << (irq - sm->eim_first_irq));
++}
++
++static void eim_mask_irq(unsigned int irq)
++{
++ struct at32_sm *sm = get_irq_chip_data(irq);
++ sm_writel(sm, EIM_IDR, 1 << (irq - sm->eim_first_irq));
++}
++
++static void eim_mask_ack_irq(unsigned int irq)
++{
++ struct at32_sm *sm = get_irq_chip_data(irq);
++ sm_writel(sm, EIM_ICR, 1 << (irq - sm->eim_first_irq));
++ sm_writel(sm, EIM_IDR, 1 << (irq - sm->eim_first_irq));
++}
++
++static void eim_unmask_irq(unsigned int irq)
++{
++ struct at32_sm *sm = get_irq_chip_data(irq);
++ sm_writel(sm, EIM_IER, 1 << (irq - sm->eim_first_irq));
++}
++
++static int eim_set_irq_type(unsigned int irq, unsigned int flow_type)
++{
++ struct at32_sm *sm = get_irq_chip_data(irq);
++ struct irq_desc *desc;
++ unsigned int i = irq - sm->eim_first_irq;
++ u32 mode, edge, level;
++ unsigned long flags;
++ int ret = 0;
++
++ if (flow_type == IRQ_TYPE_NONE)
++ flow_type = IRQ_TYPE_LEVEL_LOW;
++
++ desc = &irq_desc[irq];
++ desc->status &= ~(IRQ_TYPE_SENSE_MASK | IRQ_LEVEL);
++ desc->status |= flow_type & IRQ_TYPE_SENSE_MASK;
++
++ if (flow_type & (IRQ_TYPE_LEVEL_LOW | IRQ_TYPE_LEVEL_HIGH)) {
++ desc->status |= IRQ_LEVEL;
++ set_irq_handler(irq, handle_level_irq);
++ } else {
++ set_irq_handler(irq, handle_edge_irq);
++ }
++
++ spin_lock_irqsave(&sm->lock, flags);
++
++ mode = sm_readl(sm, EIM_MODE);
++ edge = sm_readl(sm, EIM_EDGE);
++ level = sm_readl(sm, EIM_LEVEL);
++
++ switch (flow_type) {
++ case IRQ_TYPE_LEVEL_LOW:
++ mode |= 1 << i;
++ level &= ~(1 << i);
++ break;
++ case IRQ_TYPE_LEVEL_HIGH:
++ mode |= 1 << i;
++ level |= 1 << i;
++ break;
++ case IRQ_TYPE_EDGE_RISING:
++ mode &= ~(1 << i);
++ edge |= 1 << i;
++ break;
++ case IRQ_TYPE_EDGE_FALLING:
++ mode &= ~(1 << i);
++ edge &= ~(1 << i);
++ break;
++ default:
++ ret = -EINVAL;
++ break;
++ }
++
++ sm_writel(sm, EIM_MODE, mode);
++ sm_writel(sm, EIM_EDGE, edge);
++ sm_writel(sm, EIM_LEVEL, level);
++
++ spin_unlock_irqrestore(&sm->lock, flags);
++
++ return ret;
++}
++
++struct irq_chip eim_chip = {
++ .name = "eim",
++ .ack = eim_ack_irq,
++ .mask = eim_mask_irq,
++ .mask_ack = eim_mask_ack_irq,
++ .unmask = eim_unmask_irq,
++ .set_type = eim_set_irq_type,
++};
++
++static void demux_eim_irq(unsigned int irq, struct irq_desc *desc,
++ struct pt_regs *regs)
++{
++ struct at32_sm *sm = desc->handler_data;
++ struct irq_desc *ext_desc;
++ unsigned long status, pending;
++ unsigned int i, ext_irq;
++
++ spin_lock(&sm->lock);
++
++ status = sm_readl(sm, EIM_ISR);
++ pending = status & sm_readl(sm, EIM_IMR);
++
++ while (pending) {
++ i = fls(pending) - 1;
++ pending &= ~(1 << i);
++
++ ext_irq = i + sm->eim_first_irq;
++ ext_desc = irq_desc + ext_irq;
++ ext_desc->handle_irq(ext_irq, ext_desc, regs);
++ }
++
++ spin_unlock(&sm->lock);
++}
++
++static int __init eim_init(void)
++{
++ struct at32_sm *sm = &system_manager;
++ unsigned int i;
++ unsigned int nr_irqs;
++ unsigned int int_irq;
++ u32 pattern;
++
++ /*
++ * The EIM is really the same module as SM, so register
++ * mapping, etc. has been taken care of already.
++ */
++
++ /*
++ * Find out how many interrupt lines that are actually
++ * implemented in hardware.
++ */
++ sm_writel(sm, EIM_IDR, ~0UL);
++ sm_writel(sm, EIM_MODE, ~0UL);
++ pattern = sm_readl(sm, EIM_MODE);
++ nr_irqs = fls(pattern);
++
++ /* Trigger on falling edge unless overridden by driver */
++ sm_writel(sm, EIM_MODE, 0UL);
++ sm_writel(sm, EIM_EDGE, 0UL);
++
++ sm->eim_chip = &eim_chip;
++
++ for (i = 0; i < nr_irqs; i++) {
++ set_irq_chip_and_handler(sm->eim_first_irq + i, &eim_chip,
++ handle_edge_irq);
++ set_irq_chip_data(sm->eim_first_irq + i, sm);
++ }
++
++ int_irq = platform_get_irq_byname(sm->pdev, "eim");
++
++ set_irq_chained_handler(int_irq, demux_eim_irq);
++ set_irq_data(int_irq, sm);
++
++ printk("EIM: External Interrupt Module at 0x%p, IRQ %u\n",
++ sm->regs, int_irq);
++ printk("EIM: Handling %u external IRQs, starting with IRQ %u\n",
++ nr_irqs, sm->eim_first_irq);
++
++ return 0;
++}
++arch_initcall(eim_init);
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/intc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/intc.c 2006-12-04 11:50:22.000000000 +0100
+@@ -0,0 +1,133 @@
++/*
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/clk.h>
++#include <linux/err.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/irq.h>
++#include <linux/platform_device.h>
++
++#include <asm/io.h>
++
++#include "intc.h"
++
++struct intc {
++ void __iomem *regs;
++ struct irq_chip chip;
++};
++
++extern struct platform_device at32_intc0_device;
++
++/*
++ * TODO: We may be able to implement mask/unmask by setting IxM flags
++ * in the status register.
++ */
++static void intc_mask_irq(unsigned int irq)
++{
++
++}
++
++static void intc_unmask_irq(unsigned int irq)
++{
++
++}
++
++static struct intc intc0 = {
++ .chip = {
++ .name = "intc",
++ .mask = intc_mask_irq,
++ .unmask = intc_unmask_irq,
++ },
++};
++
++/*
++ * All interrupts go via intc at some point.
++ */
++asmlinkage void do_IRQ(int level, struct pt_regs *regs)
++{
++ struct irq_desc *desc;
++ unsigned int irq;
++ unsigned long status_reg;
++
++ local_irq_disable();
++
++ irq_enter();
++
++ irq = intc_readl(&intc0, INTCAUSE0 - 4 * level);
++ desc = irq_desc + irq;
++ desc->handle_irq(irq, desc, regs);
++
++ /*
++ * Clear all interrupt level masks so that we may handle
++ * interrupts during softirq processing. If this is a nested
++ * interrupt, interrupts must stay globally disabled until we
++ * return.
++ */
++ status_reg = sysreg_read(SR);
++ status_reg &= ~(SYSREG_BIT(I0M) | SYSREG_BIT(I1M)
++ | SYSREG_BIT(I2M) | SYSREG_BIT(I3M));
++ sysreg_write(SR, status_reg);
++
++ irq_exit();
++}
++
++void __init init_IRQ(void)
++{
++ extern void _evba(void);
++ extern void irq_level0(void);
++ struct resource *regs;
++ struct clk *pclk;
++ unsigned int i;
++ u32 offset, readback;
++
++ regs = platform_get_resource(&at32_intc0_device, IORESOURCE_MEM, 0);
++ if (!regs) {
++ printk(KERN_EMERG "intc: no mmio resource defined\n");
++ goto fail;
++ }
++ pclk = clk_get(&at32_intc0_device.dev, "pclk");
++ if (IS_ERR(pclk)) {
++ printk(KERN_EMERG "intc: no clock defined\n");
++ goto fail;
++ }
++
++ clk_enable(pclk);
++
++ intc0.regs = ioremap(regs->start, regs->end - regs->start + 1);
++ if (!intc0.regs) {
++ printk(KERN_EMERG "intc: failed to map registers (0x%08lx)\n",
++ (unsigned long)regs->start);
++ goto fail;
++ }
++
++ /*
++ * Initialize all interrupts to level 0 (lowest priority). The
++ * priority level may be changed by calling
++ * irq_set_priority().
++ *
++ */
++ offset = (unsigned long)&irq_level0 - (unsigned long)&_evba;
++ for (i = 0; i < NR_INTERNAL_IRQS; i++) {
++ intc_writel(&intc0, INTPR0 + 4 * i, offset);
++ readback = intc_readl(&intc0, INTPR0 + 4 * i);
++ if (readback == offset)
++ set_irq_chip_and_handler(i, &intc0.chip,
++ handle_simple_irq);
++ }
++
++ /* Unmask all interrupt levels */
++ sysreg_write(SR, (sysreg_read(SR)
++ & ~(SR_I3M | SR_I2M | SR_I1M | SR_I0M)));
++
++ return;
++
++fail:
++ panic("Interrupt controller initialization failed!\n");
++}
++
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/intc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/intc.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,329 @@
++/*
++ * Automatically generated by gen-header.xsl
++ */
++#ifndef __ASM_AVR32_PERIHP_INTC_H__
++#define __ASM_AVR32_PERIHP_INTC_H__
++
++#define INTC_NUM_INT_GRPS 33
++
++#define INTC_INTPR0 0x0
++# define INTC_INTPR0_INTLEV_OFFSET 30
++# define INTC_INTPR0_INTLEV_SIZE 2
++# define INTC_INTPR0_OFFSET_OFFSET 0
++# define INTC_INTPR0_OFFSET_SIZE 24
++#define INTC_INTREQ0 0x100
++# define INTC_INTREQ0_IREQUEST0_OFFSET 0
++# define INTC_INTREQ0_IREQUEST0_SIZE 1
++# define INTC_INTREQ0_IREQUEST1_OFFSET 1
++# define INTC_INTREQ0_IREQUEST1_SIZE 1
++#define INTC_INTPR1 0x4
++# define INTC_INTPR1_INTLEV_OFFSET 30
++# define INTC_INTPR1_INTLEV_SIZE 2
++# define INTC_INTPR1_OFFSET_OFFSET 0
++# define INTC_INTPR1_OFFSET_SIZE 24
++#define INTC_INTREQ1 0x104
++# define INTC_INTREQ1_IREQUEST32_OFFSET 0
++# define INTC_INTREQ1_IREQUEST32_SIZE 1
++# define INTC_INTREQ1_IREQUEST33_OFFSET 1
++# define INTC_INTREQ1_IREQUEST33_SIZE 1
++# define INTC_INTREQ1_IREQUEST34_OFFSET 2
++# define INTC_INTREQ1_IREQUEST34_SIZE 1
++# define INTC_INTREQ1_IREQUEST35_OFFSET 3
++# define INTC_INTREQ1_IREQUEST35_SIZE 1
++# define INTC_INTREQ1_IREQUEST36_OFFSET 4
++# define INTC_INTREQ1_IREQUEST36_SIZE 1
++# define INTC_INTREQ1_IREQUEST37_OFFSET 5
++# define INTC_INTREQ1_IREQUEST37_SIZE 1
++#define INTC_INTPR2 0x8
++# define INTC_INTPR2_INTLEV_OFFSET 30
++# define INTC_INTPR2_INTLEV_SIZE 2
++# define INTC_INTPR2_OFFSET_OFFSET 0
++# define INTC_INTPR2_OFFSET_SIZE 24
++#define INTC_INTREQ2 0x108
++# define INTC_INTREQ2_IREQUEST64_OFFSET 0
++# define INTC_INTREQ2_IREQUEST64_SIZE 1
++# define INTC_INTREQ2_IREQUEST65_OFFSET 1
++# define INTC_INTREQ2_IREQUEST65_SIZE 1
++# define INTC_INTREQ2_IREQUEST66_OFFSET 2
++# define INTC_INTREQ2_IREQUEST66_SIZE 1
++# define INTC_INTREQ2_IREQUEST67_OFFSET 3
++# define INTC_INTREQ2_IREQUEST67_SIZE 1
++# define INTC_INTREQ2_IREQUEST68_OFFSET 4
++# define INTC_INTREQ2_IREQUEST68_SIZE 1
++#define INTC_INTPR3 0xc
++# define INTC_INTPR3_INTLEV_OFFSET 30
++# define INTC_INTPR3_INTLEV_SIZE 2
++# define INTC_INTPR3_OFFSET_OFFSET 0
++# define INTC_INTPR3_OFFSET_SIZE 24
++#define INTC_INTREQ3 0x10c
++# define INTC_INTREQ3_IREQUEST96_OFFSET 0
++# define INTC_INTREQ3_IREQUEST96_SIZE 1
++#define INTC_INTPR4 0x10
++# define INTC_INTPR4_INTLEV_OFFSET 30
++# define INTC_INTPR4_INTLEV_SIZE 2
++# define INTC_INTPR4_OFFSET_OFFSET 0
++# define INTC_INTPR4_OFFSET_SIZE 24
++#define INTC_INTREQ4 0x110
++# define INTC_INTREQ4_IREQUEST128_OFFSET 0
++# define INTC_INTREQ4_IREQUEST128_SIZE 1
++#define INTC_INTPR5 0x14
++# define INTC_INTPR5_INTLEV_OFFSET 30
++# define INTC_INTPR5_INTLEV_SIZE 2
++# define INTC_INTPR5_OFFSET_OFFSET 0
++# define INTC_INTPR5_OFFSET_SIZE 24
++#define INTC_INTREQ5 0x114
++# define INTC_INTREQ5_IREQUEST160_OFFSET 0
++# define INTC_INTREQ5_IREQUEST160_SIZE 1
++#define INTC_INTPR6 0x18
++# define INTC_INTPR6_INTLEV_OFFSET 30
++# define INTC_INTPR6_INTLEV_SIZE 2
++# define INTC_INTPR6_OFFSET_OFFSET 0
++# define INTC_INTPR6_OFFSET_SIZE 24
++#define INTC_INTREQ6 0x118
++# define INTC_INTREQ6_IREQUEST192_OFFSET 0
++# define INTC_INTREQ6_IREQUEST192_SIZE 1
++#define INTC_INTPR7 0x1c
++# define INTC_INTPR7_INTLEV_OFFSET 30
++# define INTC_INTPR7_INTLEV_SIZE 2
++# define INTC_INTPR7_OFFSET_OFFSET 0
++# define INTC_INTPR7_OFFSET_SIZE 24
++#define INTC_INTREQ7 0x11c
++# define INTC_INTREQ7_IREQUEST224_OFFSET 0
++# define INTC_INTREQ7_IREQUEST224_SIZE 1
++#define INTC_INTPR8 0x20
++# define INTC_INTPR8_INTLEV_OFFSET 30
++# define INTC_INTPR8_INTLEV_SIZE 2
++# define INTC_INTPR8_OFFSET_OFFSET 0
++# define INTC_INTPR8_OFFSET_SIZE 24
++#define INTC_INTREQ8 0x120
++# define INTC_INTREQ8_IREQUEST256_OFFSET 0
++# define INTC_INTREQ8_IREQUEST256_SIZE 1
++#define INTC_INTPR9 0x24
++# define INTC_INTPR9_INTLEV_OFFSET 30
++# define INTC_INTPR9_INTLEV_SIZE 2
++# define INTC_INTPR9_OFFSET_OFFSET 0
++# define INTC_INTPR9_OFFSET_SIZE 24
++#define INTC_INTREQ9 0x124
++# define INTC_INTREQ9_IREQUEST288_OFFSET 0
++# define INTC_INTREQ9_IREQUEST288_SIZE 1
++#define INTC_INTPR10 0x28
++# define INTC_INTPR10_INTLEV_OFFSET 30
++# define INTC_INTPR10_INTLEV_SIZE 2
++# define INTC_INTPR10_OFFSET_OFFSET 0
++# define INTC_INTPR10_OFFSET_SIZE 24
++#define INTC_INTREQ10 0x128
++# define INTC_INTREQ10_IREQUEST320_OFFSET 0
++# define INTC_INTREQ10_IREQUEST320_SIZE 1
++#define INTC_INTPR11 0x2c
++# define INTC_INTPR11_INTLEV_OFFSET 30
++# define INTC_INTPR11_INTLEV_SIZE 2
++# define INTC_INTPR11_OFFSET_OFFSET 0
++# define INTC_INTPR11_OFFSET_SIZE 24
++#define INTC_INTREQ11 0x12c
++# define INTC_INTREQ11_IREQUEST352_OFFSET 0
++# define INTC_INTREQ11_IREQUEST352_SIZE 1
++#define INTC_INTPR12 0x30
++# define INTC_INTPR12_INTLEV_OFFSET 30
++# define INTC_INTPR12_INTLEV_SIZE 2
++# define INTC_INTPR12_OFFSET_OFFSET 0
++# define INTC_INTPR12_OFFSET_SIZE 24
++#define INTC_INTREQ12 0x130
++# define INTC_INTREQ12_IREQUEST384_OFFSET 0
++# define INTC_INTREQ12_IREQUEST384_SIZE 1
++#define INTC_INTPR13 0x34
++# define INTC_INTPR13_INTLEV_OFFSET 30
++# define INTC_INTPR13_INTLEV_SIZE 2
++# define INTC_INTPR13_OFFSET_OFFSET 0
++# define INTC_INTPR13_OFFSET_SIZE 24
++#define INTC_INTREQ13 0x134
++# define INTC_INTREQ13_IREQUEST416_OFFSET 0
++# define INTC_INTREQ13_IREQUEST416_SIZE 1
++#define INTC_INTPR14 0x38
++# define INTC_INTPR14_INTLEV_OFFSET 30
++# define INTC_INTPR14_INTLEV_SIZE 2
++# define INTC_INTPR14_OFFSET_OFFSET 0
++# define INTC_INTPR14_OFFSET_SIZE 24
++#define INTC_INTREQ14 0x138
++# define INTC_INTREQ14_IREQUEST448_OFFSET 0
++# define INTC_INTREQ14_IREQUEST448_SIZE 1
++#define INTC_INTPR15 0x3c
++# define INTC_INTPR15_INTLEV_OFFSET 30
++# define INTC_INTPR15_INTLEV_SIZE 2
++# define INTC_INTPR15_OFFSET_OFFSET 0
++# define INTC_INTPR15_OFFSET_SIZE 24
++#define INTC_INTREQ15 0x13c
++# define INTC_INTREQ15_IREQUEST480_OFFSET 0
++# define INTC_INTREQ15_IREQUEST480_SIZE 1
++#define INTC_INTPR16 0x40
++# define INTC_INTPR16_INTLEV_OFFSET 30
++# define INTC_INTPR16_INTLEV_SIZE 2
++# define INTC_INTPR16_OFFSET_OFFSET 0
++# define INTC_INTPR16_OFFSET_SIZE 24
++#define INTC_INTREQ16 0x140
++# define INTC_INTREQ16_IREQUEST512_OFFSET 0
++# define INTC_INTREQ16_IREQUEST512_SIZE 1
++#define INTC_INTPR17 0x44
++# define INTC_INTPR17_INTLEV_OFFSET 30
++# define INTC_INTPR17_INTLEV_SIZE 2
++# define INTC_INTPR17_OFFSET_OFFSET 0
++# define INTC_INTPR17_OFFSET_SIZE 24
++#define INTC_INTREQ17 0x144
++# define INTC_INTREQ17_IREQUEST544_OFFSET 0
++# define INTC_INTREQ17_IREQUEST544_SIZE 1
++#define INTC_INTPR18 0x48
++# define INTC_INTPR18_INTLEV_OFFSET 30
++# define INTC_INTPR18_INTLEV_SIZE 2
++# define INTC_INTPR18_OFFSET_OFFSET 0
++# define INTC_INTPR18_OFFSET_SIZE 24
++#define INTC_INTREQ18 0x148
++# define INTC_INTREQ18_IREQUEST576_OFFSET 0
++# define INTC_INTREQ18_IREQUEST576_SIZE 1
++#define INTC_INTPR19 0x4c
++# define INTC_INTPR19_INTLEV_OFFSET 30
++# define INTC_INTPR19_INTLEV_SIZE 2
++# define INTC_INTPR19_OFFSET_OFFSET 0
++# define INTC_INTPR19_OFFSET_SIZE 24
++#define INTC_INTREQ19 0x14c
++# define INTC_INTREQ19_IREQUEST608_OFFSET 0
++# define INTC_INTREQ19_IREQUEST608_SIZE 1
++# define INTC_INTREQ19_IREQUEST609_OFFSET 1
++# define INTC_INTREQ19_IREQUEST609_SIZE 1
++# define INTC_INTREQ19_IREQUEST610_OFFSET 2
++# define INTC_INTREQ19_IREQUEST610_SIZE 1
++# define INTC_INTREQ19_IREQUEST611_OFFSET 3
++# define INTC_INTREQ19_IREQUEST611_SIZE 1
++#define INTC_INTPR20 0x50
++# define INTC_INTPR20_INTLEV_OFFSET 30
++# define INTC_INTPR20_INTLEV_SIZE 2
++# define INTC_INTPR20_OFFSET_OFFSET 0
++# define INTC_INTPR20_OFFSET_SIZE 24
++#define INTC_INTREQ20 0x150
++# define INTC_INTREQ20_IREQUEST640_OFFSET 0
++# define INTC_INTREQ20_IREQUEST640_SIZE 1
++#define INTC_INTPR21 0x54
++# define INTC_INTPR21_INTLEV_OFFSET 30
++# define INTC_INTPR21_INTLEV_SIZE 2
++# define INTC_INTPR21_OFFSET_OFFSET 0
++# define INTC_INTPR21_OFFSET_SIZE 24
++#define INTC_INTREQ21 0x154
++# define INTC_INTREQ21_IREQUEST672_OFFSET 0
++# define INTC_INTREQ21_IREQUEST672_SIZE 1
++#define INTC_INTPR22 0x58
++# define INTC_INTPR22_INTLEV_OFFSET 30
++# define INTC_INTPR22_INTLEV_SIZE 2
++# define INTC_INTPR22_OFFSET_OFFSET 0
++# define INTC_INTPR22_OFFSET_SIZE 24
++#define INTC_INTREQ22 0x158
++# define INTC_INTREQ22_IREQUEST704_OFFSET 0
++# define INTC_INTREQ22_IREQUEST704_SIZE 1
++# define INTC_INTREQ22_IREQUEST705_OFFSET 1
++# define INTC_INTREQ22_IREQUEST705_SIZE 1
++# define INTC_INTREQ22_IREQUEST706_OFFSET 2
++# define INTC_INTREQ22_IREQUEST706_SIZE 1
++#define INTC_INTPR23 0x5c
++# define INTC_INTPR23_INTLEV_OFFSET 30
++# define INTC_INTPR23_INTLEV_SIZE 2
++# define INTC_INTPR23_OFFSET_OFFSET 0
++# define INTC_INTPR23_OFFSET_SIZE 24
++#define INTC_INTREQ23 0x15c
++# define INTC_INTREQ23_IREQUEST736_OFFSET 0
++# define INTC_INTREQ23_IREQUEST736_SIZE 1
++# define INTC_INTREQ23_IREQUEST737_OFFSET 1
++# define INTC_INTREQ23_IREQUEST737_SIZE 1
++# define INTC_INTREQ23_IREQUEST738_OFFSET 2
++# define INTC_INTREQ23_IREQUEST738_SIZE 1
++#define INTC_INTPR24 0x60
++# define INTC_INTPR24_INTLEV_OFFSET 30
++# define INTC_INTPR24_INTLEV_SIZE 2
++# define INTC_INTPR24_OFFSET_OFFSET 0
++# define INTC_INTPR24_OFFSET_SIZE 24
++#define INTC_INTREQ24 0x160
++# define INTC_INTREQ24_IREQUEST768_OFFSET 0
++# define INTC_INTREQ24_IREQUEST768_SIZE 1
++#define INTC_INTPR25 0x64
++# define INTC_INTPR25_INTLEV_OFFSET 30
++# define INTC_INTPR25_INTLEV_SIZE 2
++# define INTC_INTPR25_OFFSET_OFFSET 0
++# define INTC_INTPR25_OFFSET_SIZE 24
++#define INTC_INTREQ25 0x164
++# define INTC_INTREQ25_IREQUEST800_OFFSET 0
++# define INTC_INTREQ25_IREQUEST800_SIZE 1
++#define INTC_INTPR26 0x68
++# define INTC_INTPR26_INTLEV_OFFSET 30
++# define INTC_INTPR26_INTLEV_SIZE 2
++# define INTC_INTPR26_OFFSET_OFFSET 0
++# define INTC_INTPR26_OFFSET_SIZE 24
++#define INTC_INTREQ26 0x168
++# define INTC_INTREQ26_IREQUEST832_OFFSET 0
++# define INTC_INTREQ26_IREQUEST832_SIZE 1
++#define INTC_INTPR27 0x6c
++# define INTC_INTPR27_INTLEV_OFFSET 30
++# define INTC_INTPR27_INTLEV_SIZE 2
++# define INTC_INTPR27_OFFSET_OFFSET 0
++# define INTC_INTPR27_OFFSET_SIZE 24
++#define INTC_INTREQ27 0x16c
++# define INTC_INTREQ27_IREQUEST864_OFFSET 0
++# define INTC_INTREQ27_IREQUEST864_SIZE 1
++#define INTC_INTPR28 0x70
++# define INTC_INTPR28_INTLEV_OFFSET 30
++# define INTC_INTPR28_INTLEV_SIZE 2
++# define INTC_INTPR28_OFFSET_OFFSET 0
++# define INTC_INTPR28_OFFSET_SIZE 24
++#define INTC_INTREQ28 0x170
++# define INTC_INTREQ28_IREQUEST896_OFFSET 0
++# define INTC_INTREQ28_IREQUEST896_SIZE 1
++#define INTC_INTPR29 0x74
++# define INTC_INTPR29_INTLEV_OFFSET 30
++# define INTC_INTPR29_INTLEV_SIZE 2
++# define INTC_INTPR29_OFFSET_OFFSET 0
++# define INTC_INTPR29_OFFSET_SIZE 24
++#define INTC_INTREQ29 0x174
++# define INTC_INTREQ29_IREQUEST928_OFFSET 0
++# define INTC_INTREQ29_IREQUEST928_SIZE 1
++#define INTC_INTPR30 0x78
++# define INTC_INTPR30_INTLEV_OFFSET 30
++# define INTC_INTPR30_INTLEV_SIZE 2
++# define INTC_INTPR30_OFFSET_OFFSET 0
++# define INTC_INTPR30_OFFSET_SIZE 24
++#define INTC_INTREQ30 0x178
++# define INTC_INTREQ30_IREQUEST960_OFFSET 0
++# define INTC_INTREQ30_IREQUEST960_SIZE 1
++#define INTC_INTPR31 0x7c
++# define INTC_INTPR31_INTLEV_OFFSET 30
++# define INTC_INTPR31_INTLEV_SIZE 2
++# define INTC_INTPR31_OFFSET_OFFSET 0
++# define INTC_INTPR31_OFFSET_SIZE 24
++#define INTC_INTREQ31 0x17c
++# define INTC_INTREQ31_IREQUEST992_OFFSET 0
++# define INTC_INTREQ31_IREQUEST992_SIZE 1
++#define INTC_INTPR32 0x80
++# define INTC_INTPR32_INTLEV_OFFSET 30
++# define INTC_INTPR32_INTLEV_SIZE 2
++# define INTC_INTPR32_OFFSET_OFFSET 0
++# define INTC_INTPR32_OFFSET_SIZE 24
++#define INTC_INTREQ32 0x180
++# define INTC_INTREQ32_IREQUEST1024_OFFSET 0
++# define INTC_INTREQ32_IREQUEST1024_SIZE 1
++#define INTC_INTCAUSE0 0x20c
++# define INTC_INTCAUSE0_CAUSEGRP_OFFSET 0
++# define INTC_INTCAUSE0_CAUSEGRP_SIZE 6
++#define INTC_INTCAUSE1 0x208
++# define INTC_INTCAUSE1_CAUSEGRP_OFFSET 0
++# define INTC_INTCAUSE1_CAUSEGRP_SIZE 6
++#define INTC_INTCAUSE2 0x204
++# define INTC_INTCAUSE2_CAUSEGRP_OFFSET 0
++# define INTC_INTCAUSE2_CAUSEGRP_SIZE 6
++#define INTC_INTCAUSE3 0x200
++# define INTC_INTCAUSE3_CAUSEGRP_OFFSET 0
++# define INTC_INTCAUSE3_CAUSEGRP_SIZE 6
++
++#define INTC_BIT(name) (1 << INTC_##name##_OFFSET)
++#define INTC_MKBF(name, value) (((value) & ((1 << INTC_##name##_SIZE) - 1)) << INTC_##name##_OFFSET)
++#define INTC_GETBF(name, value) (((value) >> INTC_##name##_OFFSET) & ((1 << INTC_##name##_SIZE) - 1))
++
++#define intc_readl(port,reg) \
++ __raw_readl((port)->regs + INTC_##reg)
++#define intc_writel(port,reg,value) \
++ __raw_writel((value), (port)->regs + INTC_##reg)
++
++#endif /* __ASM_AVR32_PERIHP_INTC_H__ */
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,118 @@
++/*
++ * Atmel PIO2 Port Multiplexer support
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/clk.h>
++#include <linux/debugfs.h>
++#include <linux/fs.h>
++#include <linux/platform_device.h>
++
++#include <asm/io.h>
++
++#include <asm/arch/portmux.h>
++
++#include "pio.h"
++
++#define MAX_NR_PIO_DEVICES 8
++
++struct pio_device {
++ void __iomem *regs;
++ const struct platform_device *pdev;
++ struct clk *clk;
++ u32 alloc_mask;
++ char name[32];
++};
++
++static struct pio_device pio_dev[MAX_NR_PIO_DEVICES];
++
++void portmux_set_func(unsigned int portmux_id, unsigned int pin_id,
++ unsigned int function_id)
++{
++ struct pio_device *pio;
++ u32 mask = 1 << pin_id;
++
++ BUG_ON(portmux_id >= MAX_NR_PIO_DEVICES);
++
++ pio = &pio_dev[portmux_id];
++
++ if (function_id)
++ pio_writel(pio, BSR, mask);
++ else
++ pio_writel(pio, ASR, mask);
++ pio_writel(pio, PDR, mask);
++}
++
++static int __init pio_probe(struct platform_device *pdev)
++{
++ struct pio_device *pio = NULL;
++
++ BUG_ON(pdev->id >= MAX_NR_PIO_DEVICES);
++ pio = &pio_dev[pdev->id];
++ BUG_ON(!pio->regs);
++
++ /* TODO: Interrupts */
++
++ platform_set_drvdata(pdev, pio);
++
++ printk(KERN_INFO "%s: Atmel Port Multiplexer at 0x%p (irq %d)\n",
++ pio->name, pio->regs, platform_get_irq(pdev, 0));
++
++ return 0;
++}
++
++static struct platform_driver pio_driver = {
++ .probe = pio_probe,
++ .driver = {
++ .name = "pio",
++ },
++};
++
++static int __init pio_init(void)
++{
++ return platform_driver_register(&pio_driver);
++}
++subsys_initcall(pio_init);
++
++void __init at32_init_pio(struct platform_device *pdev)
++{
++ struct resource *regs;
++ struct pio_device *pio;
++
++ if (pdev->id > MAX_NR_PIO_DEVICES) {
++ dev_err(&pdev->dev, "only %d PIO devices supported\n",
++ MAX_NR_PIO_DEVICES);
++ return;
++ }
++
++ pio = &pio_dev[pdev->id];
++ snprintf(pio->name, sizeof(pio->name), "pio%d", pdev->id);
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!regs) {
++ dev_err(&pdev->dev, "no mmio resource defined\n");
++ return;
++ }
++
++ pio->clk = clk_get(&pdev->dev, "mck");
++ if (IS_ERR(pio->clk))
++ /*
++ * This is a fatal error, but if we continue we might
++ * be so lucky that we manage to initialize the
++ * console and display this message...
++ */
++ dev_err(&pdev->dev, "no mck clock defined\n");
++ else
++ clk_enable(pio->clk);
++
++ pio->pdev = pdev;
++ pio->regs = ioremap(regs->start, regs->end - regs->start + 1);
++
++ pio_writel(pio, ODR, ~0UL);
++ pio_writel(pio, PER, ~0UL);
++}
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,180 @@
++/*
++ * Atmel PIO2 Port Multiplexer support
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ARCH_AVR32_AT32AP_PIO_H__
++#define __ARCH_AVR32_AT32AP_PIO_H__
++
++/* PIO register offsets */
++#define PIO_PER 0x0000
++#define PIO_PDR 0x0004
++#define PIO_PSR 0x0008
++#define PIO_OER 0x0010
++#define PIO_ODR 0x0014
++#define PIO_OSR 0x0018
++#define PIO_IFER 0x0020
++#define PIO_IFDR 0x0024
++#define PIO_ISFR 0x0028
++#define PIO_SODR 0x0030
++#define PIO_CODR 0x0034
++#define PIO_ODSR 0x0038
++#define PIO_PDSR 0x003c
++#define PIO_IER 0x0040
++#define PIO_IDR 0x0044
++#define PIO_IMR 0x0048
++#define PIO_ISR 0x004c
++#define PIO_MDER 0x0050
++#define PIO_MDDR 0x0054
++#define PIO_MDSR 0x0058
++#define PIO_PUDR 0x0060
++#define PIO_PUER 0x0064
++#define PIO_PUSR 0x0068
++#define PIO_ASR 0x0070
++#define PIO_BSR 0x0074
++#define PIO_ABSR 0x0078
++#define PIO_OWER 0x00a0
++#define PIO_OWDR 0x00a4
++#define PIO_OWSR 0x00a8
++
++/* Bitfields in PER */
++
++/* Bitfields in PDR */
++
++/* Bitfields in PSR */
++
++/* Bitfields in OER */
++
++/* Bitfields in ODR */
++
++/* Bitfields in OSR */
++
++/* Bitfields in IFER */
++
++/* Bitfields in IFDR */
++
++/* Bitfields in ISFR */
++
++/* Bitfields in SODR */
++
++/* Bitfields in CODR */
++
++/* Bitfields in ODSR */
++
++/* Bitfields in PDSR */
++
++/* Bitfields in IER */
++
++/* Bitfields in IDR */
++
++/* Bitfields in IMR */
++
++/* Bitfields in ISR */
++
++/* Bitfields in MDER */
++
++/* Bitfields in MDDR */
++
++/* Bitfields in MDSR */
++
++/* Bitfields in PUDR */
++
++/* Bitfields in PUER */
++
++/* Bitfields in PUSR */
++
++/* Bitfields in ASR */
++
++/* Bitfields in BSR */
++
++/* Bitfields in ABSR */
++#define PIO_P0_OFFSET 0
++#define PIO_P0_SIZE 1
++#define PIO_P1_OFFSET 1
++#define PIO_P1_SIZE 1
++#define PIO_P2_OFFSET 2
++#define PIO_P2_SIZE 1
++#define PIO_P3_OFFSET 3
++#define PIO_P3_SIZE 1
++#define PIO_P4_OFFSET 4
++#define PIO_P4_SIZE 1
++#define PIO_P5_OFFSET 5
++#define PIO_P5_SIZE 1
++#define PIO_P6_OFFSET 6
++#define PIO_P6_SIZE 1
++#define PIO_P7_OFFSET 7
++#define PIO_P7_SIZE 1
++#define PIO_P8_OFFSET 8
++#define PIO_P8_SIZE 1
++#define PIO_P9_OFFSET 9
++#define PIO_P9_SIZE 1
++#define PIO_P10_OFFSET 10
++#define PIO_P10_SIZE 1
++#define PIO_P11_OFFSET 11
++#define PIO_P11_SIZE 1
++#define PIO_P12_OFFSET 12
++#define PIO_P12_SIZE 1
++#define PIO_P13_OFFSET 13
++#define PIO_P13_SIZE 1
++#define PIO_P14_OFFSET 14
++#define PIO_P14_SIZE 1
++#define PIO_P15_OFFSET 15
++#define PIO_P15_SIZE 1
++#define PIO_P16_OFFSET 16
++#define PIO_P16_SIZE 1
++#define PIO_P17_OFFSET 17
++#define PIO_P17_SIZE 1
++#define PIO_P18_OFFSET 18
++#define PIO_P18_SIZE 1
++#define PIO_P19_OFFSET 19
++#define PIO_P19_SIZE 1
++#define PIO_P20_OFFSET 20
++#define PIO_P20_SIZE 1
++#define PIO_P21_OFFSET 21
++#define PIO_P21_SIZE 1
++#define PIO_P22_OFFSET 22
++#define PIO_P22_SIZE 1
++#define PIO_P23_OFFSET 23
++#define PIO_P23_SIZE 1
++#define PIO_P24_OFFSET 24
++#define PIO_P24_SIZE 1
++#define PIO_P25_OFFSET 25
++#define PIO_P25_SIZE 1
++#define PIO_P26_OFFSET 26
++#define PIO_P26_SIZE 1
++#define PIO_P27_OFFSET 27
++#define PIO_P27_SIZE 1
++#define PIO_P28_OFFSET 28
++#define PIO_P28_SIZE 1
++#define PIO_P29_OFFSET 29
++#define PIO_P29_SIZE 1
++#define PIO_P30_OFFSET 30
++#define PIO_P30_SIZE 1
++#define PIO_P31_OFFSET 31
++#define PIO_P31_SIZE 1
++
++/* Bitfields in OWER */
++
++/* Bitfields in OWDR */
++
++/* Bitfields in OWSR */
++
++/* Bit manipulation macros */
++#define PIO_BIT(name) (1 << PIO_##name##_OFFSET)
++#define PIO_BF(name,value) (((value) & ((1 << PIO_##name##_SIZE) - 1)) << PIO_##name##_OFFSET)
++#define PIO_BFEXT(name,value) (((value) >> PIO_##name##_OFFSET) & ((1 << PIO_##name##_SIZE) - 1))
++#define PIO_BFINS(name,value,old) (((old) & ~(((1 << PIO_##name##_SIZE) - 1) << PIO_##name##_OFFSET)) | PIO_BF(name,value))
++
++/* Register access macros */
++#define pio_readl(port,reg) \
++ __raw_readl((port)->regs + PIO_##reg)
++#define pio_writel(port,reg,value) \
++ __raw_writel((value), (port)->regs + PIO_##reg)
++
++void at32_init_pio(struct platform_device *pdev);
++
++#endif /* __ARCH_AVR32_AT32AP_PIO_H__ */
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/sm.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/sm.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,242 @@
++/*
++ * Register definitions for SM
++ *
++ * System Manager
++ */
++#ifndef __ASM_AVR32_SM_H__
++#define __ASM_AVR32_SM_H__
++
++/* SM register offsets */
++#define SM_PM_MCCTRL 0x0000
++#define SM_PM_CKSEL 0x0004
++#define SM_PM_CPU_MASK 0x0008
++#define SM_PM_HSB_MASK 0x000c
++#define SM_PM_PBA_MASK 0x0010
++#define SM_PM_PBB_MASK 0x0014
++#define SM_PM_PLL0 0x0020
++#define SM_PM_PLL1 0x0024
++#define SM_PM_VCTRL 0x0030
++#define SM_PM_VMREF 0x0034
++#define SM_PM_VMV 0x0038
++#define SM_PM_IER 0x0040
++#define SM_PM_IDR 0x0044
++#define SM_PM_IMR 0x0048
++#define SM_PM_ISR 0x004c
++#define SM_PM_ICR 0x0050
++#define SM_PM_GCCTRL 0x0060
++#define SM_RTC_CTRL 0x0080
++#define SM_RTC_VAL 0x0084
++#define SM_RTC_TOP 0x0088
++#define SM_RTC_IER 0x0090
++#define SM_RTC_IDR 0x0094
++#define SM_RTC_IMR 0x0098
++#define SM_RTC_ISR 0x009c
++#define SM_RTC_ICR 0x00a0
++#define SM_WDT_CTRL 0x00b0
++#define SM_WDT_CLR 0x00b4
++#define SM_WDT_EXT 0x00b8
++#define SM_RC_RCAUSE 0x00c0
++#define SM_EIM_IER 0x0100
++#define SM_EIM_IDR 0x0104
++#define SM_EIM_IMR 0x0108
++#define SM_EIM_ISR 0x010c
++#define SM_EIM_ICR 0x0110
++#define SM_EIM_MODE 0x0114
++#define SM_EIM_EDGE 0x0118
++#define SM_EIM_LEVEL 0x011c
++#define SM_EIM_TEST 0x0120
++#define SM_EIM_NMIC 0x0124
++
++/* Bitfields in PM_MCCTRL */
++
++/* Bitfields in PM_CKSEL */
++#define SM_CPUSEL_OFFSET 0
++#define SM_CPUSEL_SIZE 3
++#define SM_CPUDIV_OFFSET 7
++#define SM_CPUDIV_SIZE 1
++#define SM_HSBSEL_OFFSET 8
++#define SM_HSBSEL_SIZE 3
++#define SM_HSBDIV_OFFSET 15
++#define SM_HSBDIV_SIZE 1
++#define SM_PBASEL_OFFSET 16
++#define SM_PBASEL_SIZE 3
++#define SM_PBADIV_OFFSET 23
++#define SM_PBADIV_SIZE 1
++#define SM_PBBSEL_OFFSET 24
++#define SM_PBBSEL_SIZE 3
++#define SM_PBBDIV_OFFSET 31
++#define SM_PBBDIV_SIZE 1
++
++/* Bitfields in PM_CPU_MASK */
++
++/* Bitfields in PM_HSB_MASK */
++
++/* Bitfields in PM_PBA_MASK */
++
++/* Bitfields in PM_PBB_MASK */
++
++/* Bitfields in PM_PLL0 */
++#define SM_PLLEN_OFFSET 0
++#define SM_PLLEN_SIZE 1
++#define SM_PLLOSC_OFFSET 1
++#define SM_PLLOSC_SIZE 1
++#define SM_PLLOPT_OFFSET 2
++#define SM_PLLOPT_SIZE 3
++#define SM_PLLDIV_OFFSET 8
++#define SM_PLLDIV_SIZE 8
++#define SM_PLLMUL_OFFSET 16
++#define SM_PLLMUL_SIZE 8
++#define SM_PLLCOUNT_OFFSET 24
++#define SM_PLLCOUNT_SIZE 6
++#define SM_PLLTEST_OFFSET 31
++#define SM_PLLTEST_SIZE 1
++
++/* Bitfields in PM_PLL1 */
++
++/* Bitfields in PM_VCTRL */
++#define SM_VAUTO_OFFSET 0
++#define SM_VAUTO_SIZE 1
++#define SM_PM_VCTRL_VAL_OFFSET 8
++#define SM_PM_VCTRL_VAL_SIZE 7
++
++/* Bitfields in PM_VMREF */
++#define SM_REFSEL_OFFSET 0
++#define SM_REFSEL_SIZE 4
++
++/* Bitfields in PM_VMV */
++#define SM_PM_VMV_VAL_OFFSET 0
++#define SM_PM_VMV_VAL_SIZE 8
++
++/* Bitfields in PM_IER */
++
++/* Bitfields in PM_IDR */
++
++/* Bitfields in PM_IMR */
++
++/* Bitfields in PM_ISR */
++
++/* Bitfields in PM_ICR */
++#define SM_LOCK0_OFFSET 0
++#define SM_LOCK0_SIZE 1
++#define SM_LOCK1_OFFSET 1
++#define SM_LOCK1_SIZE 1
++#define SM_WAKE_OFFSET 2
++#define SM_WAKE_SIZE 1
++#define SM_VOK_OFFSET 3
++#define SM_VOK_SIZE 1
++#define SM_VMRDY_OFFSET 4
++#define SM_VMRDY_SIZE 1
++#define SM_CKRDY_OFFSET 5
++#define SM_CKRDY_SIZE 1
++
++/* Bitfields in PM_GCCTRL */
++#define SM_OSCSEL_OFFSET 0
++#define SM_OSCSEL_SIZE 1
++#define SM_PLLSEL_OFFSET 1
++#define SM_PLLSEL_SIZE 1
++#define SM_CEN_OFFSET 2
++#define SM_CEN_SIZE 1
++#define SM_CPC_OFFSET 3
++#define SM_CPC_SIZE 1
++#define SM_DIVEN_OFFSET 4
++#define SM_DIVEN_SIZE 1
++#define SM_DIV_OFFSET 8
++#define SM_DIV_SIZE 8
++
++/* Bitfields in RTC_CTRL */
++#define SM_PCLR_OFFSET 1
++#define SM_PCLR_SIZE 1
++#define SM_TOPEN_OFFSET 2
++#define SM_TOPEN_SIZE 1
++#define SM_CLKEN_OFFSET 3
++#define SM_CLKEN_SIZE 1
++#define SM_PSEL_OFFSET 8
++#define SM_PSEL_SIZE 16
++
++/* Bitfields in RTC_VAL */
++#define SM_RTC_VAL_VAL_OFFSET 0
++#define SM_RTC_VAL_VAL_SIZE 31
++
++/* Bitfields in RTC_TOP */
++#define SM_RTC_TOP_VAL_OFFSET 0
++#define SM_RTC_TOP_VAL_SIZE 32
++
++/* Bitfields in RTC_IER */
++
++/* Bitfields in RTC_IDR */
++
++/* Bitfields in RTC_IMR */
++
++/* Bitfields in RTC_ISR */
++
++/* Bitfields in RTC_ICR */
++#define SM_TOPI_OFFSET 0
++#define SM_TOPI_SIZE 1
++
++/* Bitfields in WDT_CTRL */
++#define SM_KEY_OFFSET 24
++#define SM_KEY_SIZE 8
++
++/* Bitfields in WDT_CLR */
++
++/* Bitfields in WDT_EXT */
++
++/* Bitfields in RC_RCAUSE */
++#define SM_POR_OFFSET 0
++#define SM_POR_SIZE 1
++#define SM_BOD_OFFSET 1
++#define SM_BOD_SIZE 1
++#define SM_EXT_OFFSET 2
++#define SM_EXT_SIZE 1
++#define SM_WDT_OFFSET 3
++#define SM_WDT_SIZE 1
++#define SM_NTAE_OFFSET 4
++#define SM_NTAE_SIZE 1
++#define SM_SERP_OFFSET 5
++#define SM_SERP_SIZE 1
++
++/* Bitfields in EIM_IER */
++
++/* Bitfields in EIM_IDR */
++
++/* Bitfields in EIM_IMR */
++
++/* Bitfields in EIM_ISR */
++
++/* Bitfields in EIM_ICR */
++
++/* Bitfields in EIM_MODE */
++
++/* Bitfields in EIM_EDGE */
++#define SM_INT0_OFFSET 0
++#define SM_INT0_SIZE 1
++#define SM_INT1_OFFSET 1
++#define SM_INT1_SIZE 1
++#define SM_INT2_OFFSET 2
++#define SM_INT2_SIZE 1
++#define SM_INT3_OFFSET 3
++#define SM_INT3_SIZE 1
++
++/* Bitfields in EIM_LEVEL */
++
++/* Bitfields in EIM_TEST */
++#define SM_TESTEN_OFFSET 31
++#define SM_TESTEN_SIZE 1
++
++/* Bitfields in EIM_NMIC */
++#define SM_EN_OFFSET 0
++#define SM_EN_SIZE 1
++
++/* Bit manipulation macros */
++#define SM_BIT(name) (1 << SM_##name##_OFFSET)
++#define SM_BF(name,value) (((value) & ((1 << SM_##name##_SIZE) - 1)) << SM_##name##_OFFSET)
++#define SM_BFEXT(name,value) (((value) >> SM_##name##_OFFSET) & ((1 << SM_##name##_SIZE) - 1))
++#define SM_BFINS(name,value,old) (((old) & ~(((1 << SM_##name##_SIZE) - 1) << SM_##name##_OFFSET)) | SM_BF(name,value))
++
++/* Register access macros */
++#define sm_readl(port,reg) \
++ __raw_readl((port)->regs + SM_##reg)
++#define sm_writel(port,reg,value) \
++ __raw_writel((value), (port)->regs + SM_##reg)
++
++#endif /* __ASM_AVR32_SM_H__ */
+Index: linux-2.6.18-avr32/arch/avr32/mm/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mm/Makefile 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#
++# Makefile for the Linux/AVR32 kernel.
++#
++
++obj-y += init.o clear_page.o copy_page.o dma-coherent.o
++obj-y += ioremap.o cache.o fault.o tlb.o
+Index: linux-2.6.18-avr32/arch/avr32/mm/cache.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mm/cache.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,150 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/highmem.h>
++#include <linux/unistd.h>
++
++#include <asm/cacheflush.h>
++#include <asm/cachectl.h>
++#include <asm/processor.h>
++#include <asm/uaccess.h>
++
++/*
++ * If you attempt to flush anything more than this, you need superuser
++ * privileges. The value is completely arbitrary.
++ */
++#define CACHEFLUSH_MAX_LEN 1024
++
++void invalidate_dcache_region(void *start, size_t size)
++{
++ unsigned long v, begin, end, linesz;
++
++ linesz = boot_cpu_data.dcache.linesz;
++
++ //printk("invalidate dcache: %p + %u\n", start, size);
++
++ /* You asked for it, you got it */
++ begin = (unsigned long)start & ~(linesz - 1);
++ end = ((unsigned long)start + size + linesz - 1) & ~(linesz - 1);
++
++ for (v = begin; v < end; v += linesz)
++ invalidate_dcache_line((void *)v);
++}
++
++void clean_dcache_region(void *start, size_t size)
++{
++ unsigned long v, begin, end, linesz;
++
++ linesz = boot_cpu_data.dcache.linesz;
++ begin = (unsigned long)start & ~(linesz - 1);
++ end = ((unsigned long)start + size + linesz - 1) & ~(linesz - 1);
++
++ for (v = begin; v < end; v += linesz)
++ clean_dcache_line((void *)v);
++ flush_write_buffer();
++}
++
++void flush_dcache_region(void *start, size_t size)
++{
++ unsigned long v, begin, end, linesz;
++
++ linesz = boot_cpu_data.dcache.linesz;
++ begin = (unsigned long)start & ~(linesz - 1);
++ end = ((unsigned long)start + size + linesz - 1) & ~(linesz - 1);
++
++ for (v = begin; v < end; v += linesz)
++ flush_dcache_line((void *)v);
++ flush_write_buffer();
++}
++
++void invalidate_icache_region(void *start, size_t size)
++{
++ unsigned long v, begin, end, linesz;
++
++ linesz = boot_cpu_data.icache.linesz;
++ begin = (unsigned long)start & ~(linesz - 1);
++ end = ((unsigned long)start + size + linesz - 1) & ~(linesz - 1);
++
++ for (v = begin; v < end; v += linesz)
++ invalidate_icache_line((void *)v);
++}
++
++static inline void __flush_icache_range(unsigned long start, unsigned long end)
++{
++ unsigned long v, linesz;
++
++ linesz = boot_cpu_data.dcache.linesz;
++ for (v = start; v < end; v += linesz) {
++ clean_dcache_line((void *)v);
++ invalidate_icache_line((void *)v);
++ }
++
++ flush_write_buffer();
++}
++
++/*
++ * This one is called after a module has been loaded.
++ */
++void flush_icache_range(unsigned long start, unsigned long end)
++{
++ unsigned long linesz;
++
++ linesz = boot_cpu_data.dcache.linesz;
++ __flush_icache_range(start & ~(linesz - 1),
++ (end + linesz - 1) & ~(linesz - 1));
++}
++
++/*
++ * This one is called from do_no_page(), do_swap_page() and install_page().
++ */
++void flush_icache_page(struct vm_area_struct *vma, struct page *page)
++{
++ if (vma->vm_flags & VM_EXEC) {
++ void *v = kmap(page);
++ __flush_icache_range((unsigned long)v, (unsigned long)v + PAGE_SIZE);
++ kunmap(v);
++ }
++}
++
++/*
++ * This one is used by copy_to_user_page()
++ */
++void flush_icache_user_range(struct vm_area_struct *vma, struct page *page,
++ unsigned long addr, int len)
++{
++ if (vma->vm_flags & VM_EXEC)
++ flush_icache_range(addr, addr + len);
++}
++
++asmlinkage int sys_cacheflush(int operation, void __user *addr, size_t len)
++{
++ int ret;
++
++ if (len > CACHEFLUSH_MAX_LEN) {
++ ret = -EPERM;
++ if (!capable(CAP_SYS_ADMIN))
++ goto out;
++ }
++
++ ret = -EFAULT;
++ if (!access_ok(VERIFY_WRITE, addr, len))
++ goto out;
++
++ switch (operation) {
++ case CACHE_IFLUSH:
++ flush_icache_range((unsigned long)addr,
++ (unsigned long)addr + len);
++ ret = 0;
++ break;
++ default:
++ ret = -EINVAL;
++ }
++
++out:
++ return ret;
++}
+Index: linux-2.6.18-avr32/arch/avr32/mm/clear_page.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mm/clear_page.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,25 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/linkage.h>
++#include <asm/page.h>
++
++/*
++ * clear_page
++ * r12: P1 address (to)
++ */
++ .text
++ .global clear_page
++clear_page:
++ sub r9, r12, -PAGE_SIZE
++ mov r10, 0
++ mov r11, 0
++0: st.d r12++, r10
++ cp r12, r9
++ brne 0b
++ mov pc, lr
+Index: linux-2.6.18-avr32/arch/avr32/mm/copy_page.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mm/copy_page.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/linkage.h>
++#include <asm/page.h>
++
++/*
++ * copy_page
++ *
++ * r12 to (P1 address)
++ * r11 from (P1 address)
++ * r8-r10 scratch
++ */
++ .text
++ .global copy_page
++copy_page:
++ sub r10, r11, -(1 << PAGE_SHIFT)
++ /* pref r11[0] */
++1: /* pref r11[8] */
++ ld.d r8, r11++
++ st.d r12++, r8
++ cp r11, r10
++ brlo 1b
++ mov pc, lr
+Index: linux-2.6.18-avr32/arch/avr32/mm/dma-coherent.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mm/dma-coherent.c 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,139 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/dma-mapping.h>
++
++#include <asm/addrspace.h>
++#include <asm/cacheflush.h>
++
++void dma_cache_sync(void *vaddr, size_t size, int direction)
++{
++ /*
++ * No need to sync an uncached area
++ */
++ if (PXSEG(vaddr) == P2SEG)
++ return;
++
++ switch (direction) {
++ case DMA_FROM_DEVICE: /* invalidate only */
++ dma_cache_inv(vaddr, size);
++ break;
++ case DMA_TO_DEVICE: /* writeback only */
++ dma_cache_wback(vaddr, size);
++ break;
++ case DMA_BIDIRECTIONAL: /* writeback and invalidate */
++ dma_cache_wback_inv(vaddr, size);
++ break;
++ default:
++ BUG();
++ }
++}
++EXPORT_SYMBOL(dma_cache_sync);
++
++static struct page *__dma_alloc(struct device *dev, size_t size,
++ dma_addr_t *handle, gfp_t gfp)
++{
++ struct page *page, *free, *end;
++ int order;
++
++ size = PAGE_ALIGN(size);
++ order = get_order(size);
++
++ page = alloc_pages(gfp, order);
++ if (!page)
++ return NULL;
++ split_page(page, order);
++
++ /*
++ * When accessing physical memory with valid cache data, we
++ * get a cache hit even if the virtual memory region is marked
++ * as uncached.
++ *
++ * Since the memory is newly allocated, there is no point in
++ * doing a writeback. If the previous owner cares, he should
++ * have flushed the cache before releasing the memory.
++ */
++ invalidate_dcache_region(phys_to_virt(page_to_phys(page)), size);
++
++ *handle = page_to_bus(page);
++ free = page + (size >> PAGE_SHIFT);
++ end = page + (1 << order);
++
++ /*
++ * Free any unused pages
++ */
++ while (free < end) {
++ __free_page(free);
++ free++;
++ }
++
++ return page;
++}
++
++static void __dma_free(struct device *dev, size_t size,
++ struct page *page, dma_addr_t handle)
++{
++ struct page *end = page + (PAGE_ALIGN(size) >> PAGE_SHIFT);
++
++ while (page < end)
++ __free_page(page++);
++}
++
++void *dma_alloc_coherent(struct device *dev, size_t size,
++ dma_addr_t *handle, gfp_t gfp)
++{
++ struct page *page;
++ void *ret = NULL;
++
++ page = __dma_alloc(dev, size, handle, gfp);
++ if (page)
++ ret = phys_to_uncached(page_to_phys(page));
++
++ return ret;
++}
++EXPORT_SYMBOL(dma_alloc_coherent);
++
++void dma_free_coherent(struct device *dev, size_t size,
++ void *cpu_addr, dma_addr_t handle)
++{
++ void *addr = phys_to_cached(uncached_to_phys(cpu_addr));
++ struct page *page;
++
++ pr_debug("dma_free_coherent addr %p (phys %08lx) size %u\n",
++ cpu_addr, (unsigned long)handle, (unsigned)size);
++ BUG_ON(!virt_addr_valid(addr));
++ page = virt_to_page(addr);
++ __dma_free(dev, size, page, handle);
++}
++EXPORT_SYMBOL(dma_free_coherent);
++
++#if 0
++void *dma_alloc_writecombine(struct device *dev, size_t size,
++ dma_addr_t *handle, gfp_t gfp)
++{
++ struct page *page;
++
++ page = __dma_alloc(dev, size, handle, gfp);
++
++ /* Now, map the page into P3 with write-combining turned on */
++ return __ioremap(page_to_phys(page), size, _PAGE_BUFFER);
++}
++EXPORT_SYMBOL(dma_alloc_writecombine);
++
++void dma_free_writecombine(struct device *dev, size_t size,
++ void *cpu_addr, dma_addr_t handle)
++{
++ struct page *page;
++
++ iounmap(cpu_addr);
++
++ page = bus_to_page(handle);
++ __dma_free(dev, size, page, handle);
++}
++EXPORT_SYMBOL(dma_free_writecombine);
++#endif
+Index: linux-2.6.18-avr32/arch/avr32/mm/fault.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mm/fault.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,315 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * Based on linux/arch/sh/mm/fault.c:
++ * Copyright (C) 1999 Niibe Yutaka
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/pagemap.h>
++
++#include <asm/kdebug.h>
++#include <asm/mmu_context.h>
++#include <asm/sysreg.h>
++#include <asm/uaccess.h>
++#include <asm/tlb.h>
++
++#ifdef DEBUG
++static void dump_code(unsigned long pc)
++{
++ char *p = (char *)pc;
++ char val;
++ int i;
++
++
++ printk(KERN_DEBUG "Code:");
++ for (i = 0; i < 16; i++) {
++ if (__get_user(val, p + i))
++ break;
++ printk(" %02x", val);
++ }
++ printk("\n");
++}
++#endif
++
++#ifdef CONFIG_KPROBES
++ATOMIC_NOTIFIER_HEAD(notify_page_fault_chain);
++
++/* Hook to register for page fault notifications */
++int register_page_fault_notifier(struct notifier_block *nb)
++{
++ return atomic_notifier_chain_register(&notify_page_fault_chain, nb);
++}
++
++int unregister_page_fault_notifier(struct notifier_block *nb)
++{
++ return atomic_notifier_chain_unregister(&notify_page_fault_chain, nb);
++}
++
++static inline int notify_page_fault(enum die_val val, struct pt_regs *regs,
++ int trap, int sig)
++{
++ struct die_args args = {
++ .regs = regs,
++ .trapnr = trap,
++ };
++ return atomic_notifier_call_chain(&notify_page_fault_chain, val, &args);
++}
++#else
++static inline int notify_page_fault(enum die_val val, struct pt_regs *regs,
++ int trap, int sig)
++{
++ return NOTIFY_DONE;
++}
++#endif
++
++/*
++ * This routine handles page faults. It determines the address and the
++ * problem, and then passes it off to one of the appropriate routines.
++ *
++ * ecr is the Exception Cause Register. Possible values are:
++ * 5: Page not found (instruction access)
++ * 6: Protection fault (instruction access)
++ * 12: Page not found (read access)
++ * 13: Page not found (write access)
++ * 14: Protection fault (read access)
++ * 15: Protection fault (write access)
++ */
++asmlinkage void do_page_fault(unsigned long ecr, struct pt_regs *regs)
++{
++ struct task_struct *tsk;
++ struct mm_struct *mm;
++ struct vm_area_struct *vma;
++ const struct exception_table_entry *fixup;
++ unsigned long address;
++ unsigned long page;
++ int writeaccess = 0;
++
++ if (notify_page_fault(DIE_PAGE_FAULT, regs,
++ ecr, SIGSEGV) == NOTIFY_STOP)
++ return;
++
++ address = sysreg_read(TLBEAR);
++
++ tsk = current;
++ mm = tsk->mm;
++
++ /*
++ * If we're in an interrupt or have no user context, we must
++ * not take the fault...
++ */
++ if (in_atomic() || !mm || regs->sr & SYSREG_BIT(GM))
++ goto no_context;
++
++ local_irq_enable();
++
++ down_read(&mm->mmap_sem);
++
++ vma = find_vma(mm, address);
++ if (!vma)
++ goto bad_area;
++ if (vma->vm_start <= address)
++ goto good_area;
++ if (!(vma->vm_flags & VM_GROWSDOWN))
++ goto bad_area;
++ if (expand_stack(vma, address))
++ goto bad_area;
++
++ /*
++ * Ok, we have a good vm_area for this memory access, so we
++ * can handle it...
++ */
++good_area:
++ //pr_debug("good area: vm_flags = 0x%lx\n", vma->vm_flags);
++ switch (ecr) {
++ case ECR_PROTECTION_X:
++ case ECR_TLB_MISS_X:
++ if (!(vma->vm_flags & VM_EXEC))
++ goto bad_area;
++ break;
++ case ECR_PROTECTION_R:
++ case ECR_TLB_MISS_R:
++ if (!(vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC)))
++ goto bad_area;
++ break;
++ case ECR_PROTECTION_W:
++ case ECR_TLB_MISS_W:
++ if (!(vma->vm_flags & VM_WRITE))
++ goto bad_area;
++ writeaccess = 1;
++ break;
++ default:
++ panic("Unhandled case %lu in do_page_fault!", ecr);
++ }
++
++ /*
++ * If for any reason at all we couldn't handle the fault, make
++ * sure we exit gracefully rather than endlessly redo the
++ * fault.
++ */
++survive:
++ switch (handle_mm_fault(mm, vma, address, writeaccess)) {
++ case VM_FAULT_MINOR:
++ tsk->min_flt++;
++ break;
++ case VM_FAULT_MAJOR:
++ tsk->maj_flt++;
++ break;
++ case VM_FAULT_SIGBUS:
++ goto do_sigbus;
++ case VM_FAULT_OOM:
++ goto out_of_memory;
++ default:
++ BUG();
++ }
++
++ up_read(&mm->mmap_sem);
++ return;
++
++ /*
++ * Something tried to access memory that isn't in our memory
++ * map. Fix it, but check if it's kernel or user first...
++ */
++bad_area:
++ pr_debug("Bad area [%s:%u]: addr %08lx, ecr %lu\n",
++ tsk->comm, tsk->pid, address, ecr);
++
++ up_read(&mm->mmap_sem);
++
++ if (user_mode(regs)) {
++ /* Hmm...we have to pass address and ecr somehow... */
++ /* tsk->thread.address = address;
++ tsk->thread.error_code = ecr; */
++#ifdef DEBUG
++ show_regs(regs);
++ dump_code(regs->pc);
++
++ page = sysreg_read(PTBR);
++ printk("ptbr = %08lx", page);
++ if (page) {
++ page = ((unsigned long *)page)[address >> 22];
++ printk(" pgd = %08lx", page);
++ if (page & _PAGE_PRESENT) {
++ page &= PAGE_MASK;
++ address &= 0x003ff000;
++ page = ((unsigned long *)__va(page))[address >> PAGE_SHIFT];
++ printk(" pte = %08lx\n", page);
++ }
++ }
++#endif
++ pr_debug("Sending SIGSEGV to PID %d...\n",
++ tsk->pid);
++ force_sig(SIGSEGV, tsk);
++ return;
++ }
++
++no_context:
++ pr_debug("No context\n");
++
++ /* Are we prepared to handle this kernel fault? */
++ fixup = search_exception_tables(regs->pc);
++ if (fixup) {
++ regs->pc = fixup->fixup;
++ pr_debug("Found fixup at %08lx\n", fixup->fixup);
++ return;
++ }
++
++ /*
++ * Oops. The kernel tried to access some bad page. We'll have
++ * to terminate things with extreme prejudice.
++ */
++ if (address < PAGE_SIZE)
++ printk(KERN_ALERT
++ "Unable to handle kernel NULL pointer dereference");
++ else
++ printk(KERN_ALERT
++ "Unable to handle kernel paging request");
++ printk(" at virtual address %08lx\n", address);
++ printk(KERN_ALERT "pc = %08lx\n", regs->pc);
++
++ page = sysreg_read(PTBR);
++ printk(KERN_ALERT "ptbr = %08lx", page);
++ if (page) {
++ page = ((unsigned long *)page)[address >> 22];
++ printk(" pgd = %08lx", page);
++ if (page & _PAGE_PRESENT) {
++ page &= PAGE_MASK;
++ address &= 0x003ff000;
++ page = ((unsigned long *)__va(page))[address >> PAGE_SHIFT];
++ printk(" pte = %08lx\n", page);
++ }
++ }
++ die("\nOops", regs, ecr);
++ do_exit(SIGKILL);
++
++ /*
++ * We ran out of memory, or some other thing happened to us
++ * that made us unable to handle the page fault gracefully.
++ */
++out_of_memory:
++ printk("Out of memory\n");
++ up_read(&mm->mmap_sem);
++ if (current->pid == 1) {
++ yield();
++ down_read(&mm->mmap_sem);
++ goto survive;
++ }
++ printk("VM: Killing process %s\n", tsk->comm);
++ if (user_mode(regs))
++ do_exit(SIGKILL);
++ goto no_context;
++
++do_sigbus:
++ up_read(&mm->mmap_sem);
++
++ /*
++ * Send a sigbus, regardless of whether we were in kernel or
++ * user mode.
++ */
++ /* address, error_code, trap_no, ... */
++#ifdef DEBUG
++ show_regs(regs);
++ dump_code(regs->pc);
++#endif
++ pr_debug("Sending SIGBUS to PID %d...\n", tsk->pid);
++ force_sig(SIGBUS, tsk);
++
++ /* Kernel mode? Handle exceptions or die */
++ if (!user_mode(regs))
++ goto no_context;
++}
++
++asmlinkage void do_bus_error(unsigned long addr, int write_access,
++ struct pt_regs *regs)
++{
++ printk(KERN_ALERT
++ "Bus error at physical address 0x%08lx (%s access)\n",
++ addr, write_access ? "write" : "read");
++ printk(KERN_INFO "DTLB dump:\n");
++ dump_dtlb();
++ die("Bus Error", regs, write_access);
++ do_exit(SIGKILL);
++}
++
++/*
++ * This functionality is currently not possible to implement because
++ * we're using segmentation to ensure a fixed mapping of the kernel
++ * virtual address space.
++ *
++ * It would be possible to implement this, but it would require us to
++ * disable segmentation at startup and load the kernel mappings into
++ * the TLB like any other pages. There will be lots of trickery to
++ * avoid recursive invocation of the TLB miss handler, though...
++ */
++#ifdef CONFIG_DEBUG_PAGEALLOC
++void kernel_map_pages(struct page *page, int numpages, int enable)
++{
++
++}
++EXPORT_SYMBOL(kernel_map_pages);
++#endif
+Index: linux-2.6.18-avr32/arch/avr32/mm/init.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mm/init.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,481 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/kernel.h>
++#include <linux/mm.h>
++#include <linux/swap.h>
++#include <linux/init.h>
++#include <linux/initrd.h>
++#include <linux/mmzone.h>
++#include <linux/bootmem.h>
++#include <linux/pagemap.h>
++#include <linux/pfn.h>
++#include <linux/nodemask.h>
++
++#include <asm/page.h>
++#include <asm/mmu_context.h>
++#include <asm/tlb.h>
++#include <asm/io.h>
++#include <asm/dma.h>
++#include <asm/setup.h>
++#include <asm/sections.h>
++
++DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
++
++pgd_t swapper_pg_dir[PTRS_PER_PGD];
++
++struct page *empty_zero_page;
++
++/*
++ * Cache of MMU context last used.
++ */
++unsigned long mmu_context_cache = NO_CONTEXT;
++
++#define START_PFN (NODE_DATA(0)->bdata->node_boot_start >> PAGE_SHIFT)
++#define MAX_LOW_PFN (NODE_DATA(0)->bdata->node_low_pfn)
++
++void show_mem(void)
++{
++ int total = 0, reserved = 0, cached = 0;
++ int slab = 0, free = 0, shared = 0;
++ pg_data_t *pgdat;
++
++ printk("Mem-info:\n");
++ show_free_areas();
++
++ for_each_online_pgdat(pgdat) {
++ struct page *page, *end;
++
++ page = pgdat->node_mem_map;
++ end = page + pgdat->node_spanned_pages;
++
++ do {
++ total++;
++ if (PageReserved(page))
++ reserved++;
++ else if (PageSwapCache(page))
++ cached++;
++ else if (PageSlab(page))
++ slab++;
++ else if (!page_count(page))
++ free++;
++ else
++ shared += page_count(page) - 1;
++ page++;
++ } while (page < end);
++ }
++
++ printk ("%d pages of RAM\n", total);
++ printk ("%d free pages\n", free);
++ printk ("%d reserved pages\n", reserved);
++ printk ("%d slab pages\n", slab);
++ printk ("%d pages shared\n", shared);
++ printk ("%d pages swap cached\n", cached);
++}
++
++static void __init print_memory_map(const char *what,
++ struct tag_mem_range *mem)
++{
++ printk ("%s:\n", what);
++ for (; mem; mem = mem->next) {
++ printk (" %08lx - %08lx\n",
++ (unsigned long)mem->addr,
++ (unsigned long)(mem->addr + mem->size));
++ }
++}
++
++#define MAX_LOWMEM HIGHMEM_START
++#define MAX_LOWMEM_PFN PFN_DOWN(MAX_LOWMEM)
++
++/*
++ * Sort a list of memory regions in-place by ascending address.
++ *
++ * We're using bubble sort because we only have singly linked lists
++ * with few elements.
++ */
++static void __init sort_mem_list(struct tag_mem_range **pmem)
++{
++ int done;
++ struct tag_mem_range **a, **b;
++
++ if (!*pmem)
++ return;
++
++ do {
++ done = 1;
++ a = pmem, b = &(*pmem)->next;
++ while (*b) {
++ if ((*a)->addr > (*b)->addr) {
++ struct tag_mem_range *tmp;
++ tmp = (*b)->next;
++ (*b)->next = *a;
++ *a = *b;
++ *b = tmp;
++ done = 0;
++ }
++ a = &(*a)->next;
++ b = &(*a)->next;
++ }
++ } while (!done);
++}
++
++/*
++ * Find a free memory region large enough for storing the
++ * bootmem bitmap.
++ */
++static unsigned long __init
++find_bootmap_pfn(const struct tag_mem_range *mem)
++{
++ unsigned long bootmap_pages, bootmap_len;
++ unsigned long node_pages = PFN_UP(mem->size);
++ unsigned long bootmap_addr = mem->addr;
++ struct tag_mem_range *reserved = mem_reserved;
++ struct tag_mem_range *ramdisk = mem_ramdisk;
++ unsigned long kern_start = virt_to_phys(_stext);
++ unsigned long kern_end = virt_to_phys(_end);
++
++ bootmap_pages = bootmem_bootmap_pages(node_pages);
++ bootmap_len = bootmap_pages << PAGE_SHIFT;
++
++ /*
++ * Find a large enough region without reserved pages for
++ * storing the bootmem bitmap. We can take advantage of the
++ * fact that all lists have been sorted.
++ *
++ * We have to check explicitly reserved regions as well as the
++ * kernel image and any RAMDISK images...
++ *
++ * Oh, and we have to make sure we don't overwrite the taglist
++ * since we're going to use it until the bootmem allocator is
++ * fully up and running.
++ */
++ while (1) {
++ if ((bootmap_addr < kern_end) &&
++ ((bootmap_addr + bootmap_len) > kern_start))
++ bootmap_addr = kern_end;
++
++ while (reserved &&
++ (bootmap_addr >= (reserved->addr + reserved->size)))
++ reserved = reserved->next;
++
++ if (reserved &&
++ ((bootmap_addr + bootmap_len) >= reserved->addr)) {
++ bootmap_addr = reserved->addr + reserved->size;
++ continue;
++ }
++
++ while (ramdisk &&
++ (bootmap_addr >= (ramdisk->addr + ramdisk->size)))
++ ramdisk = ramdisk->next;
++
++ if (!ramdisk ||
++ ((bootmap_addr + bootmap_len) < ramdisk->addr))
++ break;
++
++ bootmap_addr = ramdisk->addr + ramdisk->size;
++ }
++
++ if ((PFN_UP(bootmap_addr) + bootmap_len) >= (mem->addr + mem->size))
++ return ~0UL;
++
++ return PFN_UP(bootmap_addr);
++}
++
++void __init setup_bootmem(void)
++{
++ unsigned bootmap_size;
++ unsigned long first_pfn, bootmap_pfn, pages;
++ unsigned long max_pfn, max_low_pfn;
++ unsigned long kern_start = virt_to_phys(_stext);
++ unsigned long kern_end = virt_to_phys(_end);
++ unsigned node = 0;
++ struct tag_mem_range *bank, *res;
++
++ sort_mem_list(&mem_phys);
++ sort_mem_list(&mem_reserved);
++
++ print_memory_map("Physical memory", mem_phys);
++ print_memory_map("Reserved memory", mem_reserved);
++
++ nodes_clear(node_online_map);
++
++ if (mem_ramdisk) {
++#ifdef CONFIG_BLK_DEV_INITRD
++ initrd_start = (unsigned long)__va(mem_ramdisk->addr);
++ initrd_end = initrd_start + mem_ramdisk->size;
++
++ print_memory_map("RAMDISK images", mem_ramdisk);
++ if (mem_ramdisk->next)
++ printk(KERN_WARNING
++ "Warning: Only the first RAMDISK image "
++ "will be used\n");
++ sort_mem_list(&mem_ramdisk);
++#else
++ printk(KERN_WARNING "RAM disk image present, but "
++ "no initrd support in kernel!\n");
++#endif
++ }
++
++ if (mem_phys->next)
++ printk(KERN_WARNING "Only using first memory bank\n");
++
++ for (bank = mem_phys; bank; bank = NULL) {
++ first_pfn = PFN_UP(bank->addr);
++ max_low_pfn = max_pfn = PFN_DOWN(bank->addr + bank->size);
++ bootmap_pfn = find_bootmap_pfn(bank);
++ if (bootmap_pfn > max_pfn)
++ panic("No space for bootmem bitmap!\n");
++
++ if (max_low_pfn > MAX_LOWMEM_PFN) {
++ max_low_pfn = MAX_LOWMEM_PFN;
++#ifndef CONFIG_HIGHMEM
++ /*
++ * Lowmem is memory that can be addressed
++ * directly through P1/P2
++ */
++ printk(KERN_WARNING
++ "Node %u: Only %ld MiB of memory will be used.\n",
++ node, MAX_LOWMEM >> 20);
++ printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
++#else
++#error HIGHMEM is not supported by AVR32 yet
++#endif
++ }
++
++ /* Initialize the boot-time allocator with low memory only. */
++ bootmap_size = init_bootmem_node(NODE_DATA(node), bootmap_pfn,
++ first_pfn, max_low_pfn);
++
++ printk("Node %u: bdata = %p, bdata->node_bootmem_map = %p\n",
++ node, NODE_DATA(node)->bdata,
++ NODE_DATA(node)->bdata->node_bootmem_map);
++
++ /*
++ * Register fully available RAM pages with the bootmem
++ * allocator.
++ */
++ pages = max_low_pfn - first_pfn;
++ free_bootmem_node (NODE_DATA(node), PFN_PHYS(first_pfn),
++ PFN_PHYS(pages));
++
++ /*
++ * Reserve space for the kernel image (if present in
++ * this node)...
++ */
++ if ((kern_start >= PFN_PHYS(first_pfn)) &&
++ (kern_start < PFN_PHYS(max_pfn))) {
++ printk("Node %u: Kernel image %08lx - %08lx\n",
++ node, kern_start, kern_end);
++ reserve_bootmem_node(NODE_DATA(node), kern_start,
++ kern_end - kern_start);
++ }
++
++ /* ...the bootmem bitmap... */
++ reserve_bootmem_node(NODE_DATA(node),
++ PFN_PHYS(bootmap_pfn),
++ bootmap_size);
++
++ /* ...any RAMDISK images... */
++ for (res = mem_ramdisk; res; res = res->next) {
++ if (res->addr > PFN_PHYS(max_pfn))
++ break;
++
++ if (res->addr >= PFN_PHYS(first_pfn)) {
++ printk("Node %u: RAMDISK %08lx - %08lx\n",
++ node,
++ (unsigned long)res->addr,
++ (unsigned long)(res->addr + res->size));
++ reserve_bootmem_node(NODE_DATA(node),
++ res->addr, res->size);
++ }
++ }
++
++ /* ...and any other reserved regions. */
++ for (res = mem_reserved; res; res = res->next) {
++ if (res->addr > PFN_PHYS(max_pfn))
++ break;
++
++ if (res->addr >= PFN_PHYS(first_pfn)) {
++ printk("Node %u: Reserved %08lx - %08lx\n",
++ node,
++ (unsigned long)res->addr,
++ (unsigned long)(res->addr + res->size));
++ reserve_bootmem_node(NODE_DATA(node),
++ res->addr, res->size);
++ }
++ }
++
++ node_set_online(node);
++ }
++}
++
++/*
++ * paging_init() sets up the page tables
++ *
++ * This routine also unmaps the page at virtual kernel address 0, so
++ * that we can trap those pesky NULL-reference errors in the kernel.
++ */
++void __init paging_init(void)
++{
++ extern unsigned long _evba;
++ void *zero_page;
++ int nid;
++
++ /*
++ * Make sure we can handle exceptions before enabling
++ * paging. Not that we should ever _get_ any exceptions this
++ * early, but you never know...
++ */
++ printk("Exception vectors start at %p\n", &_evba);
++ sysreg_write(EVBA, (unsigned long)&_evba);
++
++ /*
++ * Since we are ready to handle exceptions now, we should let
++ * the CPU generate them...
++ */
++ __asm__ __volatile__ ("csrf %0" : : "i"(SR_EM_BIT));
++
++ /*
++ * Allocate the zero page. The allocator will panic if it
++ * can't satisfy the request, so no need to check.
++ */
++ zero_page = alloc_bootmem_low_pages_node(NODE_DATA(0),
++ PAGE_SIZE);
++
++ {
++ pgd_t *pg_dir;
++ int i;
++
++ pg_dir = swapper_pg_dir;
++ sysreg_write(PTBR, (unsigned long)pg_dir);
++
++ for (i = 0; i < PTRS_PER_PGD; i++)
++ pgd_val(pg_dir[i]) = 0;
++
++ enable_mmu();
++ printk ("CPU: Paging enabled\n");
++ }
++
++ for_each_online_node(nid) {
++ pg_data_t *pgdat = NODE_DATA(nid);
++ unsigned long zones_size[MAX_NR_ZONES];
++ unsigned long low, start_pfn;
++
++ start_pfn = pgdat->bdata->node_boot_start;
++ start_pfn >>= PAGE_SHIFT;
++ low = pgdat->bdata->node_low_pfn;
++
++ /* All memory is DMA-able */
++ memset(zones_size, 0, sizeof(zones_size));
++ zones_size[ZONE_DMA] = low - start_pfn;
++
++ printk("Node %u: start_pfn = 0x%lx, low = 0x%lx\n",
++ nid, start_pfn, low);
++
++ free_area_init_node(nid, pgdat, zones_size, start_pfn, NULL);
++
++ printk("Node %u: mem_map starts at %p\n",
++ pgdat->node_id, pgdat->node_mem_map);
++ }
++
++ mem_map = NODE_DATA(0)->node_mem_map;
++
++ memset(zero_page, 0, PAGE_SIZE);
++ empty_zero_page = virt_to_page(zero_page);
++ flush_dcache_page(empty_zero_page);
++}
++
++void __init mem_init(void)
++{
++ int codesize, reservedpages, datasize, initsize;
++ int nid, i;
++
++ reservedpages = 0;
++ high_memory = NULL;
++
++ /* this will put all low memory onto the freelists */
++ for_each_online_node(nid) {
++ pg_data_t *pgdat = NODE_DATA(nid);
++ unsigned long node_pages = 0;
++ void *node_high_memory;
++
++ num_physpages += pgdat->node_present_pages;
++
++ if (pgdat->node_spanned_pages != 0)
++ node_pages = free_all_bootmem_node(pgdat);
++
++ totalram_pages += node_pages;
++
++ for (i = 0; i < node_pages; i++)
++ if (PageReserved(pgdat->node_mem_map + i))
++ reservedpages++;
++
++ node_high_memory = (void *)((pgdat->node_start_pfn
++ + pgdat->node_spanned_pages)
++ << PAGE_SHIFT);
++ if (node_high_memory > high_memory)
++ high_memory = node_high_memory;
++ }
++
++ max_mapnr = MAP_NR(high_memory);
++
++ codesize = (unsigned long)_etext - (unsigned long)_text;
++ datasize = (unsigned long)_edata - (unsigned long)_data;
++ initsize = (unsigned long)__init_end - (unsigned long)__init_begin;
++
++ printk ("Memory: %luk/%luk available (%dk kernel code, "
++ "%dk reserved, %dk data, %dk init)\n",
++ (unsigned long)nr_free_pages() << (PAGE_SHIFT - 10),
++ totalram_pages << (PAGE_SHIFT - 10),
++ codesize >> 10,
++ reservedpages << (PAGE_SHIFT - 10),
++ datasize >> 10,
++ initsize >> 10);
++}
++
++static inline void free_area(unsigned long addr, unsigned long end, char *s)
++{
++ unsigned int size = (end - addr) >> 10;
++
++ for (; addr < end; addr += PAGE_SIZE) {
++ struct page *page = virt_to_page(addr);
++ ClearPageReserved(page);
++ init_page_count(page);
++ free_page(addr);
++ totalram_pages++;
++ }
++
++ if (size && s)
++ printk(KERN_INFO "Freeing %s memory: %dK (%lx - %lx)\n",
++ s, size, end - (size << 10), end);
++}
++
++void free_initmem(void)
++{
++ free_area((unsigned long)__init_begin, (unsigned long)__init_end,
++ "init");
++}
++
++#ifdef CONFIG_BLK_DEV_INITRD
++
++static int keep_initrd;
++
++void free_initrd_mem(unsigned long start, unsigned long end)
++{
++ if (!keep_initrd)
++ free_area(start, end, "initrd");
++}
++
++static int __init keepinitrd_setup(char *__unused)
++{
++ keep_initrd = 1;
++ return 1;
++}
++
++__setup("keepinitrd", keepinitrd_setup);
++#endif
+Index: linux-2.6.18-avr32/arch/avr32/mm/ioremap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mm/ioremap.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,199 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/vmalloc.h>
++#include <linux/module.h>
++
++#include <asm/io.h>
++#include <asm/pgtable.h>
++#include <asm/cacheflush.h>
++#include <asm/tlbflush.h>
++#include <asm/addrspace.h>
++
++static inline int remap_area_pte(pte_t *pte, unsigned long address,
++ unsigned long end, unsigned long phys_addr,
++ pgprot_t prot)
++{
++ unsigned long pfn;
++
++ pfn = phys_addr >> PAGE_SHIFT;
++ do {
++ WARN_ON(!pte_none(*pte));
++
++ set_pte(pte, pfn_pte(pfn, prot));
++ address += PAGE_SIZE;
++ pfn++;
++ pte++;
++ } while (address && (address < end));
++
++ return 0;
++}
++
++static inline int remap_area_pmd(pmd_t *pmd, unsigned long address,
++ unsigned long end, unsigned long phys_addr,
++ pgprot_t prot)
++{
++ unsigned long next;
++
++ phys_addr -= address;
++
++ do {
++ pte_t *pte = pte_alloc_kernel(pmd, address);
++ if (!pte)
++ return -ENOMEM;
++
++ next = (address + PMD_SIZE) & PMD_MASK;
++ if (remap_area_pte(pte, address, next,
++ address + phys_addr, prot))
++ return -ENOMEM;
++
++ address = next;
++ pmd++;
++ } while (address && (address < end));
++ return 0;
++}
++
++static int remap_area_pud(pud_t *pud, unsigned long address,
++ unsigned long end, unsigned long phys_addr,
++ pgprot_t prot)
++{
++ unsigned long next;
++
++ phys_addr -= address;
++
++ do {
++ pmd_t *pmd = pmd_alloc(&init_mm, pud, address);
++ if (!pmd)
++ return -ENOMEM;
++ next = (address + PUD_SIZE) & PUD_MASK;
++ if (remap_area_pmd(pmd, address, next,
++ phys_addr + address, prot))
++ return -ENOMEM;
++
++ address = next;
++ pud++;
++ } while (address && address < end);
++
++ return 0;
++}
++
++static int remap_area_pages(unsigned long address, unsigned long phys_addr,
++ size_t size, pgprot_t prot)
++{
++ unsigned long end = address + size;
++ unsigned long next;
++ pgd_t *pgd;
++ int err = 0;
++
++ phys_addr -= address;
++
++ pgd = pgd_offset_k(address);
++ flush_cache_all();
++ BUG_ON(address >= end);
++
++ spin_lock(&init_mm.page_table_lock);
++ do {
++ pud_t *pud = pud_alloc(&init_mm, pgd, address);
++
++ err = -ENOMEM;
++ if (!pud)
++ break;
++
++ next = (address + PGDIR_SIZE) & PGDIR_MASK;
++ if (next < address || next > end)
++ next = end;
++ err = remap_area_pud(pud, address, next,
++ phys_addr + address, prot);
++ if (err)
++ break;
++
++ address = next;
++ pgd++;
++ } while (address && (address < end));
++
++ spin_unlock(&init_mm.page_table_lock);
++ flush_tlb_all();
++ return err;
++}
++
++/*
++ * Re-map an arbitrary physical address space into the kernel virtual
++ * address space. Needed when the kernel wants to access physical
++ * memory directly.
++ */
++void __iomem *__ioremap(unsigned long phys_addr, size_t size,
++ unsigned long flags)
++{
++ void *addr;
++ struct vm_struct *area;
++ unsigned long offset, last_addr;
++ pgprot_t prot;
++
++ /*
++ * Check if we can simply use the P4 segment. This area is
++ * uncacheable, so if caching/buffering is requested, we can't
++ * use it.
++ */
++ if ((phys_addr >= P4SEG) && (flags == 0))
++ return (void __iomem *)phys_addr;
++
++ /* Don't allow wraparound or zero size */
++ last_addr = phys_addr + size - 1;
++ if (!size || last_addr < phys_addr)
++ return NULL;
++
++ /*
++ * XXX: When mapping regular RAM, we'd better make damn sure
++ * it's never used for anything else. But this is really the
++ * caller's responsibility...
++ */
++ if (PHYSADDR(P2SEGADDR(phys_addr)) == phys_addr)
++ return (void __iomem *)P2SEGADDR(phys_addr);
++
++ /* Mappings have to be page-aligned */
++ offset = phys_addr & ~PAGE_MASK;
++ phys_addr &= PAGE_MASK;
++ size = PAGE_ALIGN(last_addr + 1) - phys_addr;
++
++ prot = __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY
++ | _PAGE_ACCESSED | _PAGE_TYPE_SMALL | flags);
++
++ /*
++ * Ok, go for it..
++ */
++ area = get_vm_area(size, VM_IOREMAP);
++ if (!area)
++ return NULL;
++ area->phys_addr = phys_addr;
++ addr = area->addr;
++ if (remap_area_pages((unsigned long)addr, phys_addr, size, prot)) {
++ vunmap(addr);
++ return NULL;
++ }
++
++ return (void __iomem *)(offset + (char *)addr);
++}
++EXPORT_SYMBOL(__ioremap);
++
++void __iounmap(void __iomem *addr)
++{
++ struct vm_struct *p;
++
++ if ((unsigned long)addr >= P4SEG)
++ return;
++ if (PXSEG(addr) == P2SEG)
++ return;
++
++ p = remove_vm_area((void *)(PAGE_MASK & (unsigned long __force)addr));
++ if (unlikely(!p)) {
++ printk (KERN_ERR "iounmap: bad address %p\n", addr);
++ return;
++ }
++
++ kfree (p);
++}
++EXPORT_SYMBOL(__iounmap);
+Index: linux-2.6.18-avr32/arch/avr32/mm/tlb.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mm/tlb.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,378 @@
++/*
++ * AVR32 TLB operations
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/mm.h>
++
++#include <asm/mmu_context.h>
++
++#define _TLBEHI_I 0x100
++
++void show_dtlb_entry(unsigned int index)
++{
++ unsigned int tlbehi, tlbehi_save, tlbelo, mmucr, mmucr_save, flags;
++
++ local_irq_save(flags);
++ mmucr_save = sysreg_read(MMUCR);
++ tlbehi_save = sysreg_read(TLBEHI);
++ mmucr = mmucr_save & 0x13;
++ mmucr |= index << 14;
++ sysreg_write(MMUCR, mmucr);
++
++ asm volatile("tlbr" : : : "memory");
++ cpu_sync_pipeline();
++
++ tlbehi = sysreg_read(TLBEHI);
++ tlbelo = sysreg_read(TLBELO);
++
++ printk("%2u: %c %c %02x %05x %05x %o %o %c %c %c %c\n",
++ index,
++ (tlbehi & 0x200)?'1':'0',
++ (tlbelo & 0x100)?'1':'0',
++ (tlbehi & 0xff),
++ (tlbehi >> 12), (tlbelo >> 12),
++ (tlbelo >> 4) & 7, (tlbelo >> 2) & 3,
++ (tlbelo & 0x200)?'1':'0',
++ (tlbelo & 0x080)?'1':'0',
++ (tlbelo & 0x001)?'1':'0',
++ (tlbelo & 0x002)?'1':'0');
++
++ sysreg_write(MMUCR, mmucr_save);
++ sysreg_write(TLBEHI, tlbehi_save);
++ cpu_sync_pipeline();
++ local_irq_restore(flags);
++}
++
++void dump_dtlb(void)
++{
++ unsigned int i;
++
++ printk("ID V G ASID VPN PFN AP SZ C B W D\n");
++ for (i = 0; i < 32; i++)
++ show_dtlb_entry(i);
++}
++
++static unsigned long last_mmucr;
++
++static inline void set_replacement_pointer(unsigned shift)
++{
++ unsigned long mmucr, mmucr_save;
++
++ mmucr = mmucr_save = sysreg_read(MMUCR);
++
++ /* Does this mapping already exist? */
++ __asm__ __volatile__(
++ " tlbs\n"
++ " mfsr %0, %1"
++ : "=r"(mmucr)
++ : "i"(SYSREG_MMUCR));
++
++ if (mmucr & SYSREG_BIT(MMUCR_N)) {
++ /* Not found -- pick a not-recently-accessed entry */
++ unsigned long rp;
++ unsigned long tlbar = sysreg_read(TLBARLO);
++
++ rp = 32 - fls(tlbar);
++ if (rp == 32) {
++ rp = 0;
++ sysreg_write(TLBARLO, -1L);
++ }
++
++ mmucr &= 0x13;
++ mmucr |= (rp << shift);
++
++ sysreg_write(MMUCR, mmucr);
++ }
++
++ last_mmucr = mmucr;
++}
++
++static void update_dtlb(unsigned long address, pte_t pte, unsigned long asid)
++{
++ unsigned long vpn;
++
++ vpn = (address & MMU_VPN_MASK) | _TLBEHI_VALID | asid;
++ sysreg_write(TLBEHI, vpn);
++ cpu_sync_pipeline();
++
++ set_replacement_pointer(14);
++
++ sysreg_write(TLBELO, pte_val(pte) & _PAGE_FLAGS_HARDWARE_MASK);
++
++ /* Let's go */
++ asm volatile("nop\n\ttlbw" : : : "memory");
++ cpu_sync_pipeline();
++}
++
++void update_mmu_cache(struct vm_area_struct *vma,
++ unsigned long address, pte_t pte)
++{
++ unsigned long flags;
++
++ /* ptrace may call this routine */
++ if (vma && current->active_mm != vma->vm_mm)
++ return;
++
++ local_irq_save(flags);
++ update_dtlb(address, pte, get_asid());
++ local_irq_restore(flags);
++}
++
++void __flush_tlb_page(unsigned long asid, unsigned long page)
++{
++ unsigned long mmucr, tlbehi;
++
++ page |= asid;
++ sysreg_write(TLBEHI, page);
++ cpu_sync_pipeline();
++ asm volatile("tlbs");
++ mmucr = sysreg_read(MMUCR);
++
++ if (!(mmucr & SYSREG_BIT(MMUCR_N))) {
++ unsigned long tlbarlo;
++ unsigned long entry;
++
++ /* Clear the "valid" bit */
++ tlbehi = sysreg_read(TLBEHI);
++ tlbehi &= ~_TLBEHI_VALID;
++ sysreg_write(TLBEHI, tlbehi);
++ cpu_sync_pipeline();
++
++ /* mark the entry as "not accessed" */
++ entry = (mmucr >> 14) & 0x3f;
++ tlbarlo = sysreg_read(TLBARLO);
++ tlbarlo |= (0x80000000 >> entry);
++ sysreg_write(TLBARLO, tlbarlo);
++
++ /* update the entry with valid bit clear */
++ asm volatile("tlbw");
++ cpu_sync_pipeline();
++ }
++}
++
++void flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
++{
++ if (vma->vm_mm && vma->vm_mm->context != NO_CONTEXT) {
++ unsigned long flags, asid;
++ unsigned long saved_asid = MMU_NO_ASID;
++
++ asid = vma->vm_mm->context & MMU_CONTEXT_ASID_MASK;
++ page &= PAGE_MASK;
++
++ local_irq_save(flags);
++ if (vma->vm_mm != current->mm) {
++ saved_asid = get_asid();
++ set_asid(asid);
++ }
++
++ __flush_tlb_page(asid, page);
++
++ if (saved_asid != MMU_NO_ASID)
++ set_asid(saved_asid);
++ local_irq_restore(flags);
++ }
++}
++
++void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
++ unsigned long end)
++{
++ struct mm_struct *mm = vma->vm_mm;
++
++ if (mm->context != NO_CONTEXT) {
++ unsigned long flags;
++ int size;
++
++ local_irq_save(flags);
++ size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
++ if (size > (MMU_DTLB_ENTRIES / 4)) { /* Too many entries to flush */
++ mm->context = NO_CONTEXT;
++ if (mm == current->mm)
++ activate_context(mm);
++ } else {
++ unsigned long asid = mm->context & MMU_CONTEXT_ASID_MASK;
++ unsigned long saved_asid = MMU_NO_ASID;
++
++ start &= PAGE_MASK;
++ end += (PAGE_SIZE - 1);
++ end &= PAGE_MASK;
++ if (mm != current->mm) {
++ saved_asid = get_asid();
++ set_asid(asid);
++ }
++
++ while (start < end) {
++ __flush_tlb_page(asid, start);
++ start += PAGE_SIZE;
++ }
++ if (saved_asid != MMU_NO_ASID)
++ set_asid(saved_asid);
++ }
++ local_irq_restore(flags);
++ }
++}
++
++/*
++ * TODO: If this is only called for addresses > TASK_SIZE, we can probably
++ * skip the ASID stuff and just use the Global bit...
++ */
++void flush_tlb_kernel_range(unsigned long start, unsigned long end)
++{
++ unsigned long flags;
++ int size;
++
++ local_irq_save(flags);
++ size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
++ if (size > (MMU_DTLB_ENTRIES / 4)) { /* Too many entries to flush */
++ flush_tlb_all();
++ } else {
++ unsigned long asid = init_mm.context & MMU_CONTEXT_ASID_MASK;
++ unsigned long saved_asid = get_asid();
++
++ start &= PAGE_MASK;
++ end += (PAGE_SIZE - 1);
++ end &= PAGE_MASK;
++ set_asid(asid);
++ while (start < end) {
++ __flush_tlb_page(asid, start);
++ start += PAGE_SIZE;
++ }
++ set_asid(saved_asid);
++ }
++ local_irq_restore(flags);
++}
++
++void flush_tlb_mm(struct mm_struct *mm)
++{
++ /* Invalidate all TLB entries of this process by getting a new ASID */
++ if (mm->context != NO_CONTEXT) {
++ unsigned long flags;
++
++ local_irq_save(flags);
++ mm->context = NO_CONTEXT;
++ if (mm == current->mm)
++ activate_context(mm);
++ local_irq_restore(flags);
++ }
++}
++
++void flush_tlb_all(void)
++{
++ unsigned long flags;
++
++ local_irq_save(flags);
++ sysreg_write(MMUCR, sysreg_read(MMUCR) | SYSREG_BIT(MMUCR_I));
++ local_irq_restore(flags);
++}
++
++#ifdef CONFIG_PROC_FS
++
++#include <linux/seq_file.h>
++#include <linux/proc_fs.h>
++#include <linux/init.h>
++
++static void *tlb_start(struct seq_file *tlb, loff_t *pos)
++{
++ static unsigned long tlb_index;
++
++ if (*pos >= 32)
++ return NULL;
++
++ tlb_index = 0;
++ return &tlb_index;
++}
++
++static void *tlb_next(struct seq_file *tlb, void *v, loff_t *pos)
++{
++ unsigned long *index = v;
++
++ if (*index >= 31)
++ return NULL;
++
++ ++*pos;
++ ++*index;
++ return index;
++}
++
++static void tlb_stop(struct seq_file *tlb, void *v)
++{
++
++}
++
++static int tlb_show(struct seq_file *tlb, void *v)
++{
++ unsigned int tlbehi, tlbehi_save, tlbelo, mmucr, mmucr_save, flags;
++ unsigned long *index = v;
++
++ if (*index == 0)
++ seq_puts(tlb, "ID V G ASID VPN PFN AP SZ C B W D\n");
++
++ BUG_ON(*index >= 32);
++
++ local_irq_save(flags);
++ mmucr_save = sysreg_read(MMUCR);
++ tlbehi_save = sysreg_read(TLBEHI);
++ mmucr = mmucr_save & 0x13;
++ mmucr |= *index << 14;
++ sysreg_write(MMUCR, mmucr);
++
++ asm volatile("tlbr" : : : "memory");
++ cpu_sync_pipeline();
++
++ tlbehi = sysreg_read(TLBEHI);
++ tlbelo = sysreg_read(TLBELO);
++
++ sysreg_write(MMUCR, mmucr_save);
++ sysreg_write(TLBEHI, tlbehi_save);
++ cpu_sync_pipeline();
++ local_irq_restore(flags);
++
++ seq_printf(tlb, "%2lu: %c %c %02x %05x %05x %o %o %c %c %c %c\n",
++ *index,
++ (tlbehi & 0x200)?'1':'0',
++ (tlbelo & 0x100)?'1':'0',
++ (tlbehi & 0xff),
++ (tlbehi >> 12), (tlbelo >> 12),
++ (tlbelo >> 4) & 7, (tlbelo >> 2) & 3,
++ (tlbelo & 0x200)?'1':'0',
++ (tlbelo & 0x080)?'1':'0',
++ (tlbelo & 0x001)?'1':'0',
++ (tlbelo & 0x002)?'1':'0');
++
++ return 0;
++}
++
++static struct seq_operations tlb_ops = {
++ .start = tlb_start,
++ .next = tlb_next,
++ .stop = tlb_stop,
++ .show = tlb_show,
++};
++
++static int tlb_open(struct inode *inode, struct file *file)
++{
++ return seq_open(file, &tlb_ops);
++}
++
++static struct file_operations proc_tlb_operations = {
++ .open = tlb_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = seq_release,
++};
++
++static int __init proctlb_init(void)
++{
++ struct proc_dir_entry *entry;
++
++ entry = create_proc_entry("tlb", 0, NULL);
++ if (entry)
++ entry->proc_fops = &proc_tlb_operations;
++ return 0;
++}
++late_initcall(proctlb_init);
++#endif /* CONFIG_PROC_FS */
+Index: linux-2.6.18-avr32/include/asm-avr32/Kbuild
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/Kbuild 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,3 @@
++include include/asm-generic/Kbuild.asm
++
++header-y += cachectl.h
+Index: linux-2.6.18-avr32/include/asm-avr32/a.out.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/a.out.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,26 @@
++#ifndef __ASM_AVR32_A_OUT_H
++#define __ASM_AVR32_A_OUT_H
++
++struct exec
++{
++ unsigned long a_info; /* Use macros N_MAGIC, etc for access */
++ unsigned a_text; /* length of text, in bytes */
++ unsigned a_data; /* length of data, in bytes */
++ unsigned a_bss; /* length of uninitialized data area for file, in bytes */
++ unsigned a_syms; /* length of symbol table data in file, in bytes */
++ unsigned a_entry; /* start address */
++ unsigned a_trsize; /* length of relocation info for text, in bytes */
++ unsigned a_drsize; /* length of relocation info for data, in bytes */
++};
++
++#define N_TRSIZE(a) ((a).a_trsize)
++#define N_DRSIZE(a) ((a).a_drsize)
++#define N_SYMSIZE(a) ((a).a_syms)
++
++#ifdef __KERNEL__
++
++#define STACK_TOP TASK_SIZE
++
++#endif
++
++#endif /* __ASM_AVR32_A_OUT_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/addrspace.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/addrspace.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,43 @@
++/*
++ * Defitions for the address spaces of the AVR32 CPUs. Heavily based on
++ * include/asm-sh/addrspace.h
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_ADDRSPACE_H
++#define __ASM_AVR32_ADDRSPACE_H
++
++#ifdef CONFIG_MMU
++
++/* Memory segments when segmentation is enabled */
++#define P0SEG 0x00000000
++#define P1SEG 0x80000000
++#define P2SEG 0xa0000000
++#define P3SEG 0xc0000000
++#define P4SEG 0xe0000000
++
++/* Returns the privileged segment base of a given address */
++#define PXSEG(a) (((unsigned long)(a)) & 0xe0000000)
++
++/* Returns the physical address of a PnSEG (n=1,2) address */
++#define PHYSADDR(a) (((unsigned long)(a)) & 0x1fffffff)
++
++/*
++ * Map an address to a certain privileged segment
++ */
++#define P1SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) \
++ | P1SEG))
++#define P2SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) \
++ | P2SEG))
++#define P3SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) \
++ | P3SEG))
++#define P4SEGADDR(a) ((__typeof__(a))(((unsigned long)(a) & 0x1fffffff) \
++ | P4SEG))
++
++#endif /* CONFIG_MMU */
++
++#endif /* __ASM_AVR32_ADDRSPACE_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at91rm9200_pdc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at91rm9200_pdc.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,36 @@
++/*
++ * include/asm-arm/arch-at91rm9200/at91rm9200_pdc.h
++ *
++ * Copyright (C) 2005 Ivan Kokshaysky
++ * Copyright (C) SAN People
++ *
++ * Peripheral Data Controller (PDC) registers.
++ * Based on AT91RM9200 datasheet revision E.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ */
++
++#ifndef AT91RM9200_PDC_H
++#define AT91RM9200_PDC_H
++
++#define AT91_PDC_RPR 0x100 /* Receive Pointer Register */
++#define AT91_PDC_RCR 0x104 /* Receive Counter Register */
++#define AT91_PDC_TPR 0x108 /* Transmit Pointer Register */
++#define AT91_PDC_TCR 0x10c /* Transmit Counter Register */
++#define AT91_PDC_RNPR 0x110 /* Receive Next Pointer Register */
++#define AT91_PDC_RNCR 0x114 /* Receive Next Counter Register */
++#define AT91_PDC_TNPR 0x118 /* Transmit Next Pointer Register */
++#define AT91_PDC_TNCR 0x11c /* Transmit Next Counter Register */
++
++#define AT91_PDC_PTCR 0x120 /* Transfer Control Register */
++#define AT91_PDC_RXTEN (1 << 0) /* Receiver Transfer Enable */
++#define AT91_PDC_RXTDIS (1 << 1) /* Receiver Transfer Disable */
++#define AT91_PDC_TXTEN (1 << 8) /* Transmitter Transfer Enable */
++#define AT91_PDC_TXTDIS (1 << 9) /* Transmitter Transfer Disable */
++
++#define AT91_PDC_PTSR 0x124 /* Transfer Status Register */
++
++#endif
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at91rm9200_usart.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/at91rm9200_usart.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,123 @@
++/*
++ * include/asm-arm/arch-at91rm9200/at91rm9200_usart.h
++ *
++ * Copyright (C) 2005 Ivan Kokshaysky
++ * Copyright (C) SAN People
++ *
++ * USART registers.
++ * Based on AT91RM9200 datasheet revision E.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ */
++
++#ifndef AT91RM9200_USART_H
++#define AT91RM9200_USART_H
++
++#define AT91_US_CR 0x00 /* Control Register */
++#define AT91_US_RSTRX (1 << 2) /* Reset Receiver */
++#define AT91_US_RSTTX (1 << 3) /* Reset Transmitter */
++#define AT91_US_RXEN (1 << 4) /* Receiver Enable */
++#define AT91_US_RXDIS (1 << 5) /* Receiver Disable */
++#define AT91_US_TXEN (1 << 6) /* Transmitter Enable */
++#define AT91_US_TXDIS (1 << 7) /* Transmitter Disable */
++#define AT91_US_RSTSTA (1 << 8) /* Reset Status Bits */
++#define AT91_US_STTBRK (1 << 9) /* Start Break */
++#define AT91_US_STPBRK (1 << 10) /* Stop Break */
++#define AT91_US_STTTO (1 << 11) /* Start Time-out */
++#define AT91_US_SENDA (1 << 12) /* Send Address */
++#define AT91_US_RSTIT (1 << 13) /* Reset Iterations */
++#define AT91_US_RSTNACK (1 << 14) /* Reset Non Acknowledge */
++#define AT91_US_RETTO (1 << 15) /* Rearm Time-out */
++#define AT91_US_DTREN (1 << 16) /* Data Terminal Ready Enable */
++#define AT91_US_DTRDIS (1 << 17) /* Data Terminal Ready Disable */
++#define AT91_US_RTSEN (1 << 18) /* Request To Send Enable */
++#define AT91_US_RTSDIS (1 << 19) /* Request To Send Disable */
++
++#define AT91_US_MR 0x04 /* Mode Register */
++#define AT91_US_USMODE (0xf << 0) /* Mode of the USART */
++#define AT91_US_USMODE_NORMAL 0
++#define AT91_US_USMODE_RS485 1
++#define AT91_US_USMODE_HWHS 2
++#define AT91_US_USMODE_MODEM 3
++#define AT91_US_USMODE_ISO7816_T0 4
++#define AT91_US_USMODE_ISO7816_T1 6
++#define AT91_US_USMODE_IRDA 8
++#define AT91_US_USCLKS (3 << 4) /* Clock Selection */
++#define AT91_US_CHRL (3 << 6) /* Character Length */
++#define AT91_US_CHRL_5 (0 << 6)
++#define AT91_US_CHRL_6 (1 << 6)
++#define AT91_US_CHRL_7 (2 << 6)
++#define AT91_US_CHRL_8 (3 << 6)
++#define AT91_US_SYNC (1 << 8) /* Synchronous Mode Select */
++#define AT91_US_PAR (7 << 9) /* Parity Type */
++#define AT91_US_PAR_EVEN (0 << 9)
++#define AT91_US_PAR_ODD (1 << 9)
++#define AT91_US_PAR_SPACE (2 << 9)
++#define AT91_US_PAR_MARK (3 << 9)
++#define AT91_US_PAR_NONE (4 << 9)
++#define AT91_US_PAR_MULTI_DROP (6 << 9)
++#define AT91_US_NBSTOP (3 << 12) /* Number of Stop Bits */
++#define AT91_US_NBSTOP_1 (0 << 12)
++#define AT91_US_NBSTOP_1_5 (1 << 12)
++#define AT91_US_NBSTOP_2 (2 << 12)
++#define AT91_US_CHMODE (3 << 14) /* Channel Mode */
++#define AT91_US_CHMODE_NORMAL (0 << 14)
++#define AT91_US_CHMODE_ECHO (1 << 14)
++#define AT91_US_CHMODE_LOC_LOOP (2 << 14)
++#define AT91_US_CHMODE_REM_LOOP (3 << 14)
++#define AT91_US_MSBF (1 << 16) /* Bit Order */
++#define AT91_US_MODE9 (1 << 17) /* 9-bit Character Length */
++#define AT91_US_CLKO (1 << 18) /* Clock Output Select */
++#define AT91_US_OVER (1 << 19) /* Oversampling Mode */
++#define AT91_US_INACK (1 << 20) /* Inhibit Non Acknowledge */
++#define AT91_US_DSNACK (1 << 21) /* Disable Successive NACK */
++#define AT91_US_MAX_ITER (7 << 24) /* Max Iterations */
++#define AT91_US_FILTER (1 << 28) /* Infrared Receive Line Filter */
++
++#define AT91_US_IER 0x08 /* Interrupt Enable Register */
++#define AT91_US_RXRDY (1 << 0) /* Receiver Ready */
++#define AT91_US_TXRDY (1 << 1) /* Transmitter Ready */
++#define AT91_US_RXBRK (1 << 2) /* Break Received / End of Break */
++#define AT91_US_ENDRX (1 << 3) /* End of Receiver Transfer */
++#define AT91_US_ENDTX (1 << 4) /* End of Transmitter Transfer */
++#define AT91_US_OVRE (1 << 5) /* Overrun Error */
++#define AT91_US_FRAME (1 << 6) /* Framing Error */
++#define AT91_US_PARE (1 << 7) /* Parity Error */
++#define AT91_US_TIMEOUT (1 << 8) /* Receiver Time-out */
++#define AT91_US_TXEMPTY (1 << 9) /* Transmitter Empty */
++#define AT91_US_ITERATION (1 << 10) /* Max number of Repetitions Reached */
++#define AT91_US_TXBUFE (1 << 11) /* Transmission Buffer Empty */
++#define AT91_US_RXBUFF (1 << 12) /* Reception Buffer Full */
++#define AT91_US_NACK (1 << 13) /* Non Acknowledge */
++#define AT91_US_RIIC (1 << 16) /* Ring Indicator Input Change */
++#define AT91_US_DSRIC (1 << 17) /* Data Set Ready Input Change */
++#define AT91_US_DCDIC (1 << 18) /* Data Carrier Detect Input Change */
++#define AT91_US_CTSIC (1 << 19) /* Clear to Send Input Change */
++#define AT91_US_RI (1 << 20) /* RI */
++#define AT91_US_DSR (1 << 21) /* DSR */
++#define AT91_US_DCD (1 << 22) /* DCD */
++#define AT91_US_CTS (1 << 23) /* CTS */
++
++#define AT91_US_IDR 0x0c /* Interrupt Disable Register */
++#define AT91_US_IMR 0x10 /* Interrupt Mask Register */
++#define AT91_US_CSR 0x14 /* Channel Status Register */
++#define AT91_US_RHR 0x18 /* Receiver Holding Register */
++#define AT91_US_THR 0x1c /* Transmitter Holding Register */
++
++#define AT91_US_BRGR 0x20 /* Baud Rate Generator Register */
++#define AT91_US_CD (0xffff << 0) /* Clock Divider */
++
++#define AT91_US_RTOR 0x24 /* Receiver Time-out Register */
++#define AT91_US_TO (0xffff << 0) /* Time-out Value */
++
++#define AT91_US_TTGR 0x28 /* Transmitter Timeguard Register */
++#define AT91_US_TG (0xff << 0) /* Timeguard Value */
++
++#define AT91_US_FIDI 0x40 /* FI DI Ratio Register */
++#define AT91_US_NER 0x44 /* Number of Errors Register */
++#define AT91_US_IF 0x4c /* IrDA Filter Register */
++
++#endif
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h 2006-12-04 11:50:22.000000000 +0100
+@@ -0,0 +1,35 @@
++/*
++ * Platform data definitions.
++ */
++#ifndef __ASM_ARCH_BOARD_H
++#define __ASM_ARCH_BOARD_H
++
++#include <linux/types.h>
++
++/* Add basic devices: system manager, interrupt controller, portmuxes, etc. */
++void at32_add_system_devices(void);
++
++#define AT91_NR_UART 4
++extern struct platform_device *at91_default_console_device;
++
++struct platform_device *at32_add_device_usart(unsigned int id);
++
++struct eth_platform_data {
++ u8 valid;
++ u8 mii_phy_addr;
++ u8 is_rmii;
++ u8 hw_addr[6];
++};
++struct platform_device *
++at32_add_device_eth(unsigned int id, struct eth_platform_data *data);
++
++struct platform_device *at32_add_device_spi(unsigned int id);
++
++struct lcdc_platform_data {
++ unsigned long fbmem_start;
++ unsigned long fbmem_size;
++};
++struct platform_device *
++at32_add_device_lcdc(unsigned int id, struct lcdc_platform_data *data);
++
++#endif /* __ASM_ARCH_BOARD_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/init.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/init.h 2006-12-04 11:50:22.000000000 +0100
+@@ -0,0 +1,21 @@
++/*
++ * AT32AP platform initialization calls.
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_AT32AP_INIT_H__
++#define __ASM_AVR32_AT32AP_INIT_H__
++
++void setup_platform(void);
++
++/* Called by setup_platform */
++void at32_clock_init(void);
++void at32_portmux_init(void);
++
++void at32_setup_serial_console(unsigned int usart_id);
++
++#endif /* __ASM_AVR32_AT32AP_INIT_H__ */
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/portmux.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/portmux.h 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,16 @@
++/*
++ * AT32 portmux interface.
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_AT32_PORTMUX_H__
++#define __ASM_AVR32_AT32_PORTMUX_H__
++
++void portmux_set_func(unsigned int portmux_id, unsigned int pin_id,
++ unsigned int function_id);
++
++#endif /* __ASM_AVR32_AT32_PORTMUX_H__ */
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/sm.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/sm.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,27 @@
++/*
++ * AT32 System Manager interface.
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_AT32_SM_H__
++#define __ASM_AVR32_AT32_SM_H__
++
++struct irq_chip;
++struct platform_device;
++
++struct at32_sm {
++ spinlock_t lock;
++ void __iomem *regs;
++ struct irq_chip *eim_chip;
++ unsigned int eim_first_irq;
++ struct platform_device *pdev;
++};
++
++extern struct platform_device at32_sm_device;
++extern struct at32_sm system_manager;
++
++#endif /* __ASM_AVR32_AT32_SM_H__ */
+Index: linux-2.6.18-avr32/include/asm-avr32/asm.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/asm.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,102 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_ASM_H__
++#define __ASM_AVR32_ASM_H__
++
++#include <asm/sysreg.h>
++#include <asm/asm-offsets.h>
++#include <asm/thread_info.h>
++
++#define mask_interrupts ssrf SR_GM_BIT
++#define mask_exceptions ssrf SR_EM_BIT
++#define unmask_interrupts csrf SR_GM_BIT
++#define unmask_exceptions csrf SR_EM_BIT
++
++#ifdef CONFIG_FRAME_POINTER
++ .macro save_fp
++ st.w --sp, r7
++ .endm
++ .macro restore_fp
++ ld.w r7, sp++
++ .endm
++ .macro zero_fp
++ mov r7, 0
++ .endm
++#else
++ .macro save_fp
++ .endm
++ .macro restore_fp
++ .endm
++ .macro zero_fp
++ .endm
++#endif
++ .macro get_thread_info reg
++ mov \reg, sp
++ andl \reg, ~(THREAD_SIZE - 1) & 0xffff
++ .endm
++
++ /* Save and restore registers */
++ .macro save_min sr, tmp=lr
++ pushm lr
++ mfsr \tmp, \sr
++ zero_fp
++ st.w --sp, \tmp
++ .endm
++
++ .macro restore_min sr, tmp=lr
++ ld.w \tmp, sp++
++ mtsr \sr, \tmp
++ popm lr
++ .endm
++
++ .macro save_half sr, tmp=lr
++ save_fp
++ pushm r8-r9,r10,r11,r12,lr
++ zero_fp
++ mfsr \tmp, \sr
++ st.w --sp, \tmp
++ .endm
++
++ .macro restore_half sr, tmp=lr
++ ld.w \tmp, sp++
++ mtsr \sr, \tmp
++ popm r8-r9,r10,r11,r12,lr
++ restore_fp
++ .endm
++
++ .macro save_full_user sr, tmp=lr
++ stmts --sp, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr
++ st.w --sp, lr
++ zero_fp
++ mfsr \tmp, \sr
++ st.w --sp, \tmp
++ .endm
++
++ .macro restore_full_user sr, tmp=lr
++ ld.w \tmp, sp++
++ mtsr \sr, \tmp
++ ld.w lr, sp++
++ ldmts sp++, r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,sp,lr
++ .endm
++
++ /* uaccess macros */
++ .macro branch_if_kernel scratch, label
++ get_thread_info \scratch
++ ld.w \scratch, \scratch[TI_flags]
++ bld \scratch, TIF_USERSPACE
++ brcc \label
++ .endm
++
++ .macro ret_if_privileged scratch, addr, size, ret
++ sub \scratch, \size, 1
++ add \scratch, \addr
++ retcs \ret
++ retmi \ret
++ .endm
++
++#endif /* __ASM_AVR32_ASM_H__ */
+Index: linux-2.6.18-avr32/include/asm-avr32/atomic.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/atomic.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,201 @@
++/*
++ * Atomic operations that C can't guarantee us. Useful for
++ * resource counting etc.
++ *
++ * But use these as seldom as possible since they are slower than
++ * regular operations.
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_ATOMIC_H
++#define __ASM_AVR32_ATOMIC_H
++
++#include <asm/system.h>
++
++typedef struct { volatile int counter; } atomic_t;
++#define ATOMIC_INIT(i) { (i) }
++
++#define atomic_read(v) ((v)->counter)
++#define atomic_set(v, i) (((v)->counter) = i)
++
++/*
++ * atomic_sub_return - subtract the atomic variable
++ * @i: integer value to subtract
++ * @v: pointer of type atomic_t
++ *
++ * Atomically subtracts @i from @v. Returns the resulting value.
++ */
++static inline int atomic_sub_return(int i, atomic_t *v)
++{
++ int result;
++
++ asm volatile(
++ "/* atomic_sub_return */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " sub %0, %3\n"
++ " stcond %1, %0\n"
++ " brne 1b"
++ : "=&r"(result), "=o"(v->counter)
++ : "m"(v->counter), "rKs21"(i)
++ : "cc");
++
++ return result;
++}
++
++/*
++ * atomic_add_return - add integer to atomic variable
++ * @i: integer value to add
++ * @v: pointer of type atomic_t
++ *
++ * Atomically adds @i to @v. Returns the resulting value.
++ */
++static inline int atomic_add_return(int i, atomic_t *v)
++{
++ int result;
++
++ if (__builtin_constant_p(i) && (i >= -1048575) && (i <= 1048576))
++ result = atomic_sub_return(-i, v);
++ else
++ asm volatile(
++ "/* atomic_add_return */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %1\n"
++ " add %0, %3\n"
++ " stcond %2, %0\n"
++ " brne 1b"
++ : "=&r"(result), "=o"(v->counter)
++ : "m"(v->counter), "r"(i)
++ : "cc", "memory");
++
++ return result;
++}
++
++/*
++ * atomic_sub_unless - sub unless the number is a given value
++ * @v: pointer of type atomic_t
++ * @a: the amount to add to v...
++ * @u: ...unless v is equal to u.
++ *
++ * If the atomic value v is not equal to u, this function subtracts a
++ * from v, and returns non zero. If v is equal to u then it returns
++ * zero. This is done as an atomic operation.
++*/
++static inline int atomic_sub_unless(atomic_t *v, int a, int u)
++{
++ int tmp, result = 0;
++
++ asm volatile(
++ "/* atomic_sub_unless */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %3\n"
++ " cp.w %0, %5\n"
++ " breq 1f\n"
++ " sub %0, %4\n"
++ " stcond %2, %0\n"
++ " brne 1b\n"
++ " mov %1, 1\n"
++ "1:"
++ : "=&r"(tmp), "=&r"(result), "=o"(v->counter)
++ : "m"(v->counter), "rKs21"(a), "rKs21"(u)
++ : "cc", "memory");
++
++ return result;
++}
++
++/*
++ * atomic_add_unless - add unless the number is a given value
++ * @v: pointer of type atomic_t
++ * @a: the amount to add to v...
++ * @u: ...unless v is equal to u.
++ *
++ * If the atomic value v is not equal to u, this function adds a to v,
++ * and returns non zero. If v is equal to u then it returns zero. This
++ * is done as an atomic operation.
++*/
++static inline int atomic_add_unless(atomic_t *v, int a, int u)
++{
++ int tmp, result;
++
++ if (__builtin_constant_p(a) && (a >= -1048575) && (a <= 1048576))
++ result = atomic_sub_unless(v, -a, u);
++ else {
++ result = 0;
++ asm volatile(
++ "/* atomic_add_unless */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %3\n"
++ " cp.w %0, %5\n"
++ " breq 1f\n"
++ " add %0, %4\n"
++ " stcond %2, %0\n"
++ " brne 1b\n"
++ " mov %1, 1\n"
++ "1:"
++ : "=&r"(tmp), "=&r"(result), "=o"(v->counter)
++ : "m"(v->counter), "r"(a), "ir"(u)
++ : "cc", "memory");
++ }
++
++ return result;
++}
++
++/*
++ * atomic_sub_if_positive - conditionally subtract integer from atomic variable
++ * @i: integer value to subtract
++ * @v: pointer of type atomic_t
++ *
++ * Atomically test @v and subtract @i if @v is greater or equal than @i.
++ * The function returns the old value of @v minus @i.
++ */
++static inline int atomic_sub_if_positive(int i, atomic_t *v)
++{
++ int result;
++
++ asm volatile(
++ "/* atomic_sub_if_positive */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " sub %0, %3\n"
++ " brlt 1f\n"
++ " stcond %1, %0\n"
++ " brne 1b\n"
++ "1:"
++ : "=&r"(result), "=o"(v->counter)
++ : "m"(v->counter), "ir"(i)
++ : "cc", "memory");
++
++ return result;
++}
++
++#define atomic_xchg(v, new) (xchg(&((v)->counter), new))
++#define atomic_cmpxchg(v, o, n) ((int)cmpxchg(&((v)->counter), (o), (n)))
++
++#define atomic_sub(i, v) (void)atomic_sub_return(i, v)
++#define atomic_add(i, v) (void)atomic_add_return(i, v)
++#define atomic_dec(v) atomic_sub(1, (v))
++#define atomic_inc(v) atomic_add(1, (v))
++
++#define atomic_dec_return(v) atomic_sub_return(1, v)
++#define atomic_inc_return(v) atomic_add_return(1, v)
++
++#define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0)
++#define atomic_inc_and_test(v) (atomic_add_return(1, v) == 0)
++#define atomic_dec_and_test(v) (atomic_sub_return(1, v) == 0)
++#define atomic_add_negative(i, v) (atomic_add_return(i, v) < 0)
++
++#define atomic_inc_not_zero(v) atomic_add_unless(v, 1, 0)
++#define atomic_dec_if_positive(v) atomic_sub_if_positive(1, v)
++
++#define smp_mb__before_atomic_dec() barrier()
++#define smp_mb__after_atomic_dec() barrier()
++#define smp_mb__before_atomic_inc() barrier()
++#define smp_mb__after_atomic_inc() barrier()
++
++#include <asm-generic/atomic.h>
++
++#endif /* __ASM_AVR32_ATOMIC_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/auxvec.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/auxvec.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,4 @@
++#ifndef __ASM_AVR32_AUXVEC_H
++#define __ASM_AVR32_AUXVEC_H
++
++#endif /* __ASM_AVR32_AUXVEC_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/bitops.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/bitops.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,296 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_BITOPS_H
++#define __ASM_AVR32_BITOPS_H
++
++#include <asm/byteorder.h>
++#include <asm/system.h>
++
++/*
++ * clear_bit() doesn't provide any barrier for the compiler
++ */
++#define smp_mb__before_clear_bit() barrier()
++#define smp_mb__after_clear_bit() barrier()
++
++/*
++ * set_bit - Atomically set a bit in memory
++ * @nr: the bit to set
++ * @addr: the address to start counting from
++ *
++ * This function is atomic and may not be reordered. See __set_bit()
++ * if you do not require the atomic guarantees.
++ *
++ * Note that @nr may be almost arbitrarily large; this function is not
++ * restricted to acting on a single-word quantity.
++ */
++static inline void set_bit(int nr, volatile void * addr)
++{
++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG;
++ unsigned long tmp;
++
++ if (__builtin_constant_p(nr)) {
++ asm volatile(
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " sbr %0, %3\n"
++ " stcond %1, %0\n"
++ " brne 1b"
++ : "=&r"(tmp), "=o"(*p)
++ : "m"(*p), "i"(nr)
++ : "cc");
++ } else {
++ unsigned long mask = 1UL << (nr % BITS_PER_LONG);
++ asm volatile(
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " or %0, %3\n"
++ " stcond %1, %0\n"
++ " brne 1b"
++ : "=&r"(tmp), "=o"(*p)
++ : "m"(*p), "r"(mask)
++ : "cc");
++ }
++}
++
++/*
++ * clear_bit - Clears a bit in memory
++ * @nr: Bit to clear
++ * @addr: Address to start counting from
++ *
++ * clear_bit() is atomic and may not be reordered. However, it does
++ * not contain a memory barrier, so if it is used for locking purposes,
++ * you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit()
++ * in order to ensure changes are visible on other processors.
++ */
++static inline void clear_bit(int nr, volatile void * addr)
++{
++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG;
++ unsigned long tmp;
++
++ if (__builtin_constant_p(nr)) {
++ asm volatile(
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " cbr %0, %3\n"
++ " stcond %1, %0\n"
++ " brne 1b"
++ : "=&r"(tmp), "=o"(*p)
++ : "m"(*p), "i"(nr)
++ : "cc");
++ } else {
++ unsigned long mask = 1UL << (nr % BITS_PER_LONG);
++ asm volatile(
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " andn %0, %3\n"
++ " stcond %1, %0\n"
++ " brne 1b"
++ : "=&r"(tmp), "=o"(*p)
++ : "m"(*p), "r"(mask)
++ : "cc");
++ }
++}
++
++/*
++ * change_bit - Toggle a bit in memory
++ * @nr: Bit to change
++ * @addr: Address to start counting from
++ *
++ * change_bit() is atomic and may not be reordered.
++ * Note that @nr may be almost arbitrarily large; this function is not
++ * restricted to acting on a single-word quantity.
++ */
++static inline void change_bit(int nr, volatile void * addr)
++{
++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG;
++ unsigned long mask = 1UL << (nr % BITS_PER_LONG);
++ unsigned long tmp;
++
++ asm volatile(
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " eor %0, %3\n"
++ " stcond %1, %0\n"
++ " brne 1b"
++ : "=&r"(tmp), "=o"(*p)
++ : "m"(*p), "r"(mask)
++ : "cc");
++}
++
++/*
++ * test_and_set_bit - Set a bit and return its old value
++ * @nr: Bit to set
++ * @addr: Address to count from
++ *
++ * This operation is atomic and cannot be reordered.
++ * It also implies a memory barrier.
++ */
++static inline int test_and_set_bit(int nr, volatile void * addr)
++{
++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG;
++ unsigned long mask = 1UL << (nr % BITS_PER_LONG);
++ unsigned long tmp, old;
++
++ if (__builtin_constant_p(nr)) {
++ asm volatile(
++ "1: ssrf 5\n"
++ " ld.w %0, %3\n"
++ " mov %2, %0\n"
++ " sbr %0, %4\n"
++ " stcond %1, %0\n"
++ " brne 1b"
++ : "=&r"(tmp), "=o"(*p), "=&r"(old)
++ : "m"(*p), "i"(nr)
++ : "memory", "cc");
++ } else {
++ asm volatile(
++ "1: ssrf 5\n"
++ " ld.w %2, %3\n"
++ " or %0, %2, %4\n"
++ " stcond %1, %0\n"
++ " brne 1b"
++ : "=&r"(tmp), "=o"(*p), "=&r"(old)
++ : "m"(*p), "r"(mask)
++ : "memory", "cc");
++ }
++
++ return (old & mask) != 0;
++}
++
++/*
++ * test_and_clear_bit - Clear a bit and return its old value
++ * @nr: Bit to clear
++ * @addr: Address to count from
++ *
++ * This operation is atomic and cannot be reordered.
++ * It also implies a memory barrier.
++ */
++static inline int test_and_clear_bit(int nr, volatile void * addr)
++{
++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG;
++ unsigned long mask = 1UL << (nr % BITS_PER_LONG);
++ unsigned long tmp, old;
++
++ if (__builtin_constant_p(nr)) {
++ asm volatile(
++ "1: ssrf 5\n"
++ " ld.w %0, %3\n"
++ " mov %2, %0\n"
++ " cbr %0, %4\n"
++ " stcond %1, %0\n"
++ " brne 1b"
++ : "=&r"(tmp), "=o"(*p), "=&r"(old)
++ : "m"(*p), "i"(nr)
++ : "memory", "cc");
++ } else {
++ asm volatile(
++ "1: ssrf 5\n"
++ " ld.w %0, %3\n"
++ " mov %2, %0\n"
++ " andn %0, %4\n"
++ " stcond %1, %0\n"
++ " brne 1b"
++ : "=&r"(tmp), "=o"(*p), "=&r"(old)
++ : "m"(*p), "r"(mask)
++ : "memory", "cc");
++ }
++
++ return (old & mask) != 0;
++}
++
++/*
++ * test_and_change_bit - Change a bit and return its old value
++ * @nr: Bit to change
++ * @addr: Address to count from
++ *
++ * This operation is atomic and cannot be reordered.
++ * It also implies a memory barrier.
++ */
++static inline int test_and_change_bit(int nr, volatile void * addr)
++{
++ unsigned long *p = ((unsigned long *)addr) + nr / BITS_PER_LONG;
++ unsigned long mask = 1UL << (nr % BITS_PER_LONG);
++ unsigned long tmp, old;
++
++ asm volatile(
++ "1: ssrf 5\n"
++ " ld.w %2, %3\n"
++ " eor %0, %2, %4\n"
++ " stcond %1, %0\n"
++ " brne 1b"
++ : "=&r"(tmp), "=o"(*p), "=&r"(old)
++ : "m"(*p), "r"(mask)
++ : "memory", "cc");
++
++ return (old & mask) != 0;
++}
++
++#include <asm-generic/bitops/non-atomic.h>
++
++/* Find First bit Set */
++static inline unsigned long __ffs(unsigned long word)
++{
++ unsigned long result;
++
++ asm("brev %1\n\t"
++ "clz %0,%1"
++ : "=r"(result), "=&r"(word)
++ : "1"(word));
++ return result;
++}
++
++/* Find First Zero */
++static inline unsigned long ffz(unsigned long word)
++{
++ return __ffs(~word);
++}
++
++/* Find Last bit Set */
++static inline int fls(unsigned long word)
++{
++ unsigned long result;
++
++ asm("clz %0,%1" : "=r"(result) : "r"(word));
++ return 32 - result;
++}
++
++unsigned long find_first_zero_bit(const unsigned long *addr,
++ unsigned long size);
++unsigned long find_next_zero_bit(const unsigned long *addr,
++ unsigned long size,
++ unsigned long offset);
++unsigned long find_first_bit(const unsigned long *addr,
++ unsigned long size);
++unsigned long find_next_bit(const unsigned long *addr,
++ unsigned long size,
++ unsigned long offset);
++
++/*
++ * ffs: find first bit set. This is defined the same way as
++ * the libc and compiler builtin ffs routines, therefore
++ * differs in spirit from the above ffz (man ffs).
++ *
++ * The difference is that bit numbering starts at 1, and if no bit is set,
++ * the function returns 0.
++ */
++static inline int ffs(unsigned long word)
++{
++ if(word == 0)
++ return 0;
++ return __ffs(word) + 1;
++}
++
++#include <asm-generic/bitops/fls64.h>
++#include <asm-generic/bitops/sched.h>
++#include <asm-generic/bitops/hweight.h>
++
++#include <asm-generic/bitops/ext2-non-atomic.h>
++#include <asm-generic/bitops/ext2-atomic.h>
++#include <asm-generic/bitops/minix-le.h>
++
++#endif /* __ASM_AVR32_BITOPS_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/bug.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/bug.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,47 @@
++/*
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_BUG_H
++#define __ASM_AVR32_BUG_H
++
++#ifdef CONFIG_BUG
++
++/*
++ * According to our Chief Architect, this compact opcode is very
++ * unlikely to ever be implemented.
++ */
++#define AVR32_BUG_OPCODE 0x5df0
++
++#ifdef CONFIG_DEBUG_BUGVERBOSE
++
++#define BUG() \
++ do { \
++ asm volatile(".hword %0\n\t" \
++ ".hword %1\n\t" \
++ ".long %2" \
++ : \
++ : "n"(AVR32_BUG_OPCODE), \
++ "i"(__LINE__), "X"(__FILE__)); \
++ } while (0)
++
++#else
++
++#define BUG() \
++ do { \
++ asm volatile(".hword %0\n\t" \
++ : : "n"(AVR32_BUG_OPCODE)); \
++ } while (0)
++
++#endif /* CONFIG_DEBUG_BUGVERBOSE */
++
++#define HAVE_ARCH_BUG
++
++#endif /* CONFIG_BUG */
++
++#include <asm-generic/bug.h>
++
++#endif /* __ASM_AVR32_BUG_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/bugs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/bugs.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,15 @@
++/*
++ * This is included by init/main.c to check for architecture-dependent bugs.
++ *
++ * Needs:
++ * void check_bugs(void);
++ */
++#ifndef __ASM_AVR32_BUGS_H
++#define __ASM_AVR32_BUGS_H
++
++static void __init check_bugs(void)
++{
++ cpu_data->loops_per_jiffy = loops_per_jiffy;
++}
++
++#endif /* __ASM_AVR32_BUGS_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/byteorder.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/byteorder.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,25 @@
++/*
++ * AVR32 endian-conversion functions.
++ */
++#ifndef __ASM_AVR32_BYTEORDER_H
++#define __ASM_AVR32_BYTEORDER_H
++
++#include <asm/types.h>
++#include <linux/compiler.h>
++
++#ifdef __CHECKER__
++extern unsigned long __builtin_bswap_32(unsigned long x);
++extern unsigned short __builtin_bswap_16(unsigned short x);
++#endif
++
++#define __arch__swab32(x) __builtin_bswap_32(x)
++#define __arch__swab16(x) __builtin_bswap_16(x)
++
++#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
++# define __BYTEORDER_HAS_U64__
++# define __SWAB_64_THRU_32__
++#endif
++
++#include <linux/byteorder/big_endian.h>
++
++#endif /* __ASM_AVR32_BYTEORDER_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/cache.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/cache.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,29 @@
++#ifndef __ASM_AVR32_CACHE_H
++#define __ASM_AVR32_CACHE_H
++
++#define L1_CACHE_SHIFT 5
++#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
++
++#ifndef __ASSEMBLER__
++struct cache_info {
++ unsigned int ways;
++ unsigned int sets;
++ unsigned int linesz;
++};
++#endif /* __ASSEMBLER */
++
++/* Cache operation constants */
++#define ICACHE_FLUSH 0x00
++#define ICACHE_INVALIDATE 0x01
++#define ICACHE_LOCK 0x02
++#define ICACHE_UNLOCK 0x03
++#define ICACHE_PREFETCH 0x04
++
++#define DCACHE_FLUSH 0x08
++#define DCACHE_LOCK 0x09
++#define DCACHE_UNLOCK 0x0a
++#define DCACHE_INVALIDATE 0x0b
++#define DCACHE_CLEAN 0x0c
++#define DCACHE_CLEAN_INVAL 0x0d
++
++#endif /* __ASM_AVR32_CACHE_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/cachectl.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/cachectl.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,11 @@
++#ifndef __ASM_AVR32_CACHECTL_H
++#define __ASM_AVR32_CACHECTL_H
++
++/*
++ * Operations that can be performed through the cacheflush system call
++ */
++
++/* Clean the data cache, then invalidate the icache */
++#define CACHE_IFLUSH 0
++
++#endif /* __ASM_AVR32_CACHECTL_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/cacheflush.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/cacheflush.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,129 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_CACHEFLUSH_H
++#define __ASM_AVR32_CACHEFLUSH_H
++
++/* Keep includes the same across arches. */
++#include <linux/mm.h>
++
++#define CACHE_OP_ICACHE_INVALIDATE 0x01
++#define CACHE_OP_DCACHE_INVALIDATE 0x0b
++#define CACHE_OP_DCACHE_CLEAN 0x0c
++#define CACHE_OP_DCACHE_CLEAN_INVAL 0x0d
++
++/*
++ * Invalidate any cacheline containing virtual address vaddr without
++ * writing anything back to memory.
++ *
++ * Note that this function may corrupt unrelated data structures when
++ * applied on buffers that are not cacheline aligned in both ends.
++ */
++static inline void invalidate_dcache_line(void *vaddr)
++{
++ asm volatile("cache %0[0], %1"
++ :
++ : "r"(vaddr), "n"(CACHE_OP_DCACHE_INVALIDATE)
++ : "memory");
++}
++
++/*
++ * Make sure any cacheline containing virtual address vaddr is written
++ * to memory.
++ */
++static inline void clean_dcache_line(void *vaddr)
++{
++ asm volatile("cache %0[0], %1"
++ :
++ : "r"(vaddr), "n"(CACHE_OP_DCACHE_CLEAN)
++ : "memory");
++}
++
++/*
++ * Make sure any cacheline containing virtual address vaddr is written
++ * to memory and then invalidate it.
++ */
++static inline void flush_dcache_line(void *vaddr)
++{
++ asm volatile("cache %0[0], %1"
++ :
++ : "r"(vaddr), "n"(CACHE_OP_DCACHE_CLEAN_INVAL)
++ : "memory");
++}
++
++/*
++ * Invalidate any instruction cacheline containing virtual address
++ * vaddr.
++ */
++static inline void invalidate_icache_line(void *vaddr)
++{
++ asm volatile("cache %0[0], %1"
++ :
++ : "r"(vaddr), "n"(CACHE_OP_ICACHE_INVALIDATE)
++ : "memory");
++}
++
++/*
++ * Applies the above functions on all lines that are touched by the
++ * specified virtual address range.
++ */
++void invalidate_dcache_region(void *start, size_t len);
++void clean_dcache_region(void *start, size_t len);
++void flush_dcache_region(void *start, size_t len);
++void invalidate_icache_region(void *start, size_t len);
++
++/*
++ * Make sure any pending writes are completed before continuing.
++ */
++#define flush_write_buffer() asm volatile("sync 0" : : : "memory")
++
++/*
++ * The following functions are called when a virtual mapping changes.
++ * We do not need to flush anything in this case.
++ */
++#define flush_cache_all() do { } while (0)
++#define flush_cache_mm(mm) do { } while (0)
++#define flush_cache_range(vma, start, end) do { } while (0)
++#define flush_cache_page(vma, vmaddr, pfn) do { } while (0)
++#define flush_cache_vmap(start, end) do { } while (0)
++#define flush_cache_vunmap(start, end) do { } while (0)
++
++/*
++ * I think we need to implement this one to be able to reliably
++ * execute pages from RAMDISK. However, if we implement the
++ * flush_dcache_*() functions, it might not be needed anymore.
++ *
++ * #define flush_icache_page(vma, page) do { } while (0)
++ */
++extern void flush_icache_page(struct vm_area_struct *vma, struct page *page);
++
++/*
++ * These are (I think) related to D-cache aliasing. We might need to
++ * do something here, but only for certain configurations. No such
++ * configurations exist at this time.
++ */
++#define flush_dcache_page(page) do { } while (0)
++#define flush_dcache_mmap_lock(page) do { } while (0)
++#define flush_dcache_mmap_unlock(page) do { } while (0)
++
++/*
++ * These are for I/D cache coherency. In this case, we do need to
++ * flush with all configurations.
++ */
++extern void flush_icache_range(unsigned long start, unsigned long end);
++extern void flush_icache_user_range(struct vm_area_struct *vma,
++ struct page *page,
++ unsigned long addr, int len);
++
++#define copy_to_user_page(vma, page, vaddr, dst, src, len) do { \
++ memcpy(dst, src, len); \
++ flush_icache_user_range(vma, page, vaddr, len); \
++} while(0)
++#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
++ memcpy(dst, src, len)
++
++#endif /* __ASM_AVR32_CACHEFLUSH_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/checksum.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/checksum.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,156 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_CHECKSUM_H
++#define __ASM_AVR32_CHECKSUM_H
++
++/*
++ * computes the checksum of a memory block at buff, length len,
++ * and adds in "sum" (32-bit)
++ *
++ * returns a 32-bit number suitable for feeding into itself
++ * or csum_tcpudp_magic
++ *
++ * this function must be called with even lengths, except
++ * for the last fragment, which may be odd
++ *
++ * it's best to have buff aligned on a 32-bit boundary
++ */
++unsigned int csum_partial(const unsigned char * buff, int len,
++ unsigned int sum);
++
++/*
++ * the same as csum_partial, but copies from src while it
++ * checksums, and handles user-space pointer exceptions correctly, when needed.
++ *
++ * here even more important to align src and dst on a 32-bit (or even
++ * better 64-bit) boundary
++ */
++unsigned int csum_partial_copy_generic(const char *src, char *dst, int len,
++ int sum, int *src_err_ptr,
++ int *dst_err_ptr);
++
++/*
++ * Note: when you get a NULL pointer exception here this means someone
++ * passed in an incorrect kernel address to one of these functions.
++ *
++ * If you use these functions directly please don't forget the
++ * verify_area().
++ */
++static inline
++unsigned int csum_partial_copy_nocheck(const char *src, char *dst,
++ int len, int sum)
++{
++ return csum_partial_copy_generic(src, dst, len, sum, NULL, NULL);
++}
++
++static inline
++unsigned int csum_partial_copy_from_user (const char __user *src, char *dst,
++ int len, int sum, int *err_ptr)
++{
++ return csum_partial_copy_generic((const char __force *)src, dst, len,
++ sum, err_ptr, NULL);
++}
++
++/*
++ * This is a version of ip_compute_csum() optimized for IP headers,
++ * which always checksum on 4 octet boundaries.
++ */
++static inline unsigned short ip_fast_csum(unsigned char *iph,
++ unsigned int ihl)
++{
++ unsigned int sum, tmp;
++
++ __asm__ __volatile__(
++ " ld.w %0, %1++\n"
++ " ld.w %3, %1++\n"
++ " sub %2, 4\n"
++ " add %0, %3\n"
++ " ld.w %3, %1++\n"
++ " adc %0, %0, %3\n"
++ " ld.w %3, %1++\n"
++ " adc %0, %0, %3\n"
++ " acr %0\n"
++ "1: ld.w %3, %1++\n"
++ " add %0, %3\n"
++ " acr %0\n"
++ " sub %2, 1\n"
++ " brne 1b\n"
++ " lsl %3, %0, 16\n"
++ " andl %0, 0\n"
++ " mov %2, 0xffff\n"
++ " add %0, %3\n"
++ " adc %0, %0, %2\n"
++ " com %0\n"
++ " lsr %0, 16\n"
++ : "=r"(sum), "=r"(iph), "=r"(ihl), "=r"(tmp)
++ : "1"(iph), "2"(ihl)
++ : "memory", "cc");
++ return sum;
++}
++
++/*
++ * Fold a partial checksum
++ */
++
++static inline unsigned int csum_fold(unsigned int sum)
++{
++ unsigned int tmp;
++
++ asm(" bfextu %1, %0, 0, 16\n"
++ " lsr %0, 16\n"
++ " add %0, %1\n"
++ " bfextu %1, %0, 16, 16\n"
++ " add %0, %1"
++ : "=&r"(sum), "=&r"(tmp)
++ : "0"(sum));
++
++ return ~sum;
++}
++
++static inline unsigned long csum_tcpudp_nofold(unsigned long saddr,
++ unsigned long daddr,
++ unsigned short len,
++ unsigned short proto,
++ unsigned int sum)
++{
++ asm(" add %0, %1\n"
++ " adc %0, %0, %2\n"
++ " adc %0, %0, %3\n"
++ " acr %0"
++ : "=r"(sum)
++ : "r"(daddr), "r"(saddr), "r"(ntohs(len) | (proto << 16)),
++ "0"(sum)
++ : "cc");
++
++ return sum;
++}
++
++/*
++ * computes the checksum of the TCP/UDP pseudo-header
++ * returns a 16-bit checksum, already complemented
++ */
++static inline unsigned short int csum_tcpudp_magic(unsigned long saddr,
++ unsigned long daddr,
++ unsigned short len,
++ unsigned short proto,
++ unsigned int sum)
++{
++ return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum));
++}
++
++/*
++ * this routine is used for miscellaneous IP-like checksums, mainly
++ * in icmp.c
++ */
++
++static inline unsigned short ip_compute_csum(unsigned char * buff, int len)
++{
++ return csum_fold(csum_partial(buff, len, 0));
++}
++
++#endif /* __ASM_AVR32_CHECKSUM_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/cputime.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/cputime.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_CPUTIME_H
++#define __ASM_AVR32_CPUTIME_H
++
++#include <asm-generic/cputime.h>
++
++#endif /* __ASM_AVR32_CPUTIME_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/current.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/current.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,15 @@
++#ifndef __ASM_AVR32_CURRENT_H
++#define __ASM_AVR32_CURRENT_H
++
++#include <linux/thread_info.h>
++
++struct task_struct;
++
++inline static struct task_struct * get_current(void)
++{
++ return current_thread_info()->task;
++}
++
++#define current get_current()
++
++#endif /* __ASM_AVR32_CURRENT_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/delay.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/delay.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,26 @@
++#ifndef __ASM_AVR32_DELAY_H
++#define __ASM_AVR32_DELAY_H
++
++/*
++ * Copyright (C) 1993 Linus Torvalds
++ *
++ * Delay routines calling functions in arch/avr32/lib/delay.c
++ */
++
++extern void __bad_udelay(void);
++extern void __bad_ndelay(void);
++
++extern void __udelay(unsigned long usecs);
++extern void __ndelay(unsigned long nsecs);
++extern void __const_udelay(unsigned long usecs);
++extern void __delay(unsigned long loops);
++
++#define udelay(n) (__builtin_constant_p(n) ? \
++ ((n) > 20000 ? __bad_udelay() : __const_udelay((n) * 0x10c6ul)) : \
++ __udelay(n))
++
++#define ndelay(n) (__builtin_constant_p(n) ? \
++ ((n) > 20000 ? __bad_ndelay() : __const_udelay((n) * 5ul)) : \
++ __ndelay(n))
++
++#endif /* __ASM_AVR32_DELAY_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/div64.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/div64.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_DIV64_H
++#define __ASM_AVR32_DIV64_H
++
++#include <asm-generic/div64.h>
++
++#endif /* __ASM_AVR32_DIV64_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/dma-mapping.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/dma-mapping.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,320 @@
++#ifndef __ASM_AVR32_DMA_MAPPING_H
++#define __ASM_AVR32_DMA_MAPPING_H
++
++#include <linux/mm.h>
++#include <linux/device.h>
++#include <asm/scatterlist.h>
++#include <asm/processor.h>
++#include <asm/cacheflush.h>
++#include <asm/io.h>
++
++extern void dma_cache_sync(void *vaddr, size_t size, int direction);
++
++/*
++ * Return whether the given device DMA address mask can be supported
++ * properly. For example, if your device can only drive the low 24-bits
++ * during bus mastering, then you would pass 0x00ffffff as the mask
++ * to this function.
++ */
++static inline int dma_supported(struct device *dev, u64 mask)
++{
++ /* Fix when needed. I really don't know of any limitations */
++ return 1;
++}
++
++static inline int dma_set_mask(struct device *dev, u64 dma_mask)
++{
++ if (!dev->dma_mask || !dma_supported(dev, dma_mask))
++ return -EIO;
++
++ *dev->dma_mask = dma_mask;
++ return 0;
++}
++
++/**
++ * dma_alloc_coherent - allocate consistent memory for DMA
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @size: required memory size
++ * @handle: bus-specific DMA address
++ *
++ * Allocate some uncached, unbuffered memory for a device for
++ * performing DMA. This function allocates pages, and will
++ * return the CPU-viewed address, and sets @handle to be the
++ * device-viewed address.
++ */
++extern void *dma_alloc_coherent(struct device *dev, size_t size,
++ dma_addr_t *handle, gfp_t gfp);
++
++/**
++ * dma_free_coherent - free memory allocated by dma_alloc_coherent
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @size: size of memory originally requested in dma_alloc_coherent
++ * @cpu_addr: CPU-view address returned from dma_alloc_coherent
++ * @handle: device-view address returned from dma_alloc_coherent
++ *
++ * Free (and unmap) a DMA buffer previously allocated by
++ * dma_alloc_coherent().
++ *
++ * References to memory and mappings associated with cpu_addr/handle
++ * during and after this call executing are illegal.
++ */
++extern void dma_free_coherent(struct device *dev, size_t size,
++ void *cpu_addr, dma_addr_t handle);
++
++/**
++ * dma_alloc_writecombine - allocate write-combining memory for DMA
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @size: required memory size
++ * @handle: bus-specific DMA address
++ *
++ * Allocate some uncached, buffered memory for a device for
++ * performing DMA. This function allocates pages, and will
++ * return the CPU-viewed address, and sets @handle to be the
++ * device-viewed address.
++ */
++extern void *dma_alloc_writecombine(struct device *dev, size_t size,
++ dma_addr_t *handle, gfp_t gfp);
++
++/**
++ * dma_free_coherent - free memory allocated by dma_alloc_writecombine
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @size: size of memory originally requested in dma_alloc_writecombine
++ * @cpu_addr: CPU-view address returned from dma_alloc_writecombine
++ * @handle: device-view address returned from dma_alloc_writecombine
++ *
++ * Free (and unmap) a DMA buffer previously allocated by
++ * dma_alloc_writecombine().
++ *
++ * References to memory and mappings associated with cpu_addr/handle
++ * during and after this call executing are illegal.
++ */
++extern void dma_free_writecombine(struct device *dev, size_t size,
++ void *cpu_addr, dma_addr_t handle);
++
++/**
++ * dma_map_single - map a single buffer for streaming DMA
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @cpu_addr: CPU direct mapped address of buffer
++ * @size: size of buffer to map
++ * @dir: DMA transfer direction
++ *
++ * Ensure that any data held in the cache is appropriately discarded
++ * or written back.
++ *
++ * The device owns this memory once this call has completed. The CPU
++ * can regain ownership by calling dma_unmap_single() or dma_sync_single().
++ */
++static inline dma_addr_t
++dma_map_single(struct device *dev, void *cpu_addr, size_t size,
++ enum dma_data_direction direction)
++{
++ dma_cache_sync(cpu_addr, size, direction);
++ return virt_to_bus(cpu_addr);
++}
++
++/**
++ * dma_unmap_single - unmap a single buffer previously mapped
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @handle: DMA address of buffer
++ * @size: size of buffer to map
++ * @dir: DMA transfer direction
++ *
++ * Unmap a single streaming mode DMA translation. The handle and size
++ * must match what was provided in the previous dma_map_single() call.
++ * All other usages are undefined.
++ *
++ * After this call, reads by the CPU to the buffer are guaranteed to see
++ * whatever the device wrote there.
++ */
++static inline void
++dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
++ enum dma_data_direction direction)
++{
++
++}
++
++/**
++ * dma_map_page - map a portion of a page for streaming DMA
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @page: page that buffer resides in
++ * @offset: offset into page for start of buffer
++ * @size: size of buffer to map
++ * @dir: DMA transfer direction
++ *
++ * Ensure that any data held in the cache is appropriately discarded
++ * or written back.
++ *
++ * The device owns this memory once this call has completed. The CPU
++ * can regain ownership by calling dma_unmap_page() or dma_sync_single().
++ */
++static inline dma_addr_t
++dma_map_page(struct device *dev, struct page *page,
++ unsigned long offset, size_t size,
++ enum dma_data_direction direction)
++{
++ return dma_map_single(dev, page_address(page) + offset,
++ size, direction);
++}
++
++/**
++ * dma_unmap_page - unmap a buffer previously mapped through dma_map_page()
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @handle: DMA address of buffer
++ * @size: size of buffer to map
++ * @dir: DMA transfer direction
++ *
++ * Unmap a single streaming mode DMA translation. The handle and size
++ * must match what was provided in the previous dma_map_single() call.
++ * All other usages are undefined.
++ *
++ * After this call, reads by the CPU to the buffer are guaranteed to see
++ * whatever the device wrote there.
++ */
++static inline void
++dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,
++ enum dma_data_direction direction)
++{
++ dma_unmap_single(dev, dma_address, size, direction);
++}
++
++/**
++ * dma_map_sg - map a set of SG buffers for streaming mode DMA
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @sg: list of buffers
++ * @nents: number of buffers to map
++ * @dir: DMA transfer direction
++ *
++ * Map a set of buffers described by scatterlist in streaming
++ * mode for DMA. This is the scatter-gather version of the
++ * above pci_map_single interface. Here the scatter gather list
++ * elements are each tagged with the appropriate dma address
++ * and length. They are obtained via sg_dma_{address,length}(SG).
++ *
++ * NOTE: An implementation may be able to use a smaller number of
++ * DMA address/length pairs than there are SG table elements.
++ * (for example via virtual mapping capabilities)
++ * The routine returns the number of addr/length pairs actually
++ * used, at most nents.
++ *
++ * Device ownership issues as mentioned above for pci_map_single are
++ * the same here.
++ */
++static inline int
++dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
++ enum dma_data_direction direction)
++{
++ int i;
++
++ for (i = 0; i < nents; i++) {
++ char *virt;
++
++ sg[i].dma_address = page_to_bus(sg[i].page) + sg[i].offset;
++ virt = page_address(sg[i].page) + sg[i].offset;
++ dma_cache_sync(virt, sg[i].length, direction);
++ }
++
++ return nents;
++}
++
++/**
++ * dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @sg: list of buffers
++ * @nents: number of buffers to map
++ * @dir: DMA transfer direction
++ *
++ * Unmap a set of streaming mode DMA translations.
++ * Again, CPU read rules concerning calls here are the same as for
++ * pci_unmap_single() above.
++ */
++static inline void
++dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
++ enum dma_data_direction direction)
++{
++
++}
++
++/**
++ * dma_sync_single_for_cpu
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @handle: DMA address of buffer
++ * @size: size of buffer to map
++ * @dir: DMA transfer direction
++ *
++ * Make physical memory consistent for a single streaming mode DMA
++ * translation after a transfer.
++ *
++ * If you perform a dma_map_single() but wish to interrogate the
++ * buffer using the cpu, yet do not wish to teardown the DMA mapping,
++ * you must call this function before doing so. At the next point you
++ * give the DMA address back to the card, you must first perform a
++ * dma_sync_single_for_device, and then the device again owns the
++ * buffer.
++ */
++static inline void
++dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle,
++ size_t size, enum dma_data_direction direction)
++{
++ dma_cache_sync(bus_to_virt(dma_handle), size, direction);
++}
++
++static inline void
++dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle,
++ size_t size, enum dma_data_direction direction)
++{
++ dma_cache_sync(bus_to_virt(dma_handle), size, direction);
++}
++
++/**
++ * dma_sync_sg_for_cpu
++ * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
++ * @sg: list of buffers
++ * @nents: number of buffers to map
++ * @dir: DMA transfer direction
++ *
++ * Make physical memory consistent for a set of streaming
++ * mode DMA translations after a transfer.
++ *
++ * The same as dma_sync_single_for_* but for a scatter-gather list,
++ * same rules and usage.
++ */
++static inline void
++dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg,
++ int nents, enum dma_data_direction direction)
++{
++ int i;
++
++ for (i = 0; i < nents; i++) {
++ dma_cache_sync(page_address(sg[i].page) + sg[i].offset,
++ sg[i].length, direction);
++ }
++}
++
++static inline void
++dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg,
++ int nents, enum dma_data_direction direction)
++{
++ int i;
++
++ for (i = 0; i < nents; i++) {
++ dma_cache_sync(page_address(sg[i].page) + sg[i].offset,
++ sg[i].length, direction);
++ }
++}
++
++/* Now for the API extensions over the pci_ one */
++
++#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
++#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
++
++static inline int dma_is_consistent(dma_addr_t dma_addr)
++{
++ return 1;
++}
++
++static inline int dma_get_cache_alignment(void)
++{
++ return boot_cpu_data.dcache.linesz;
++}
++
++#endif /* __ASM_AVR32_DMA_MAPPING_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/dma.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/dma.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,8 @@
++#ifndef __ASM_AVR32_DMA_H
++#define __ASM_AVR32_DMA_H
++
++/* The maximum address that we can perform a DMA transfer to on this platform.
++ * Not really applicable to AVR32, but some functions need it. */
++#define MAX_DMA_ADDRESS 0xffffffff
++
++#endif /* __ASM_AVR32_DMA_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/elf.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/elf.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,110 @@
++#ifndef __ASM_AVR32_ELF_H
++#define __ASM_AVR32_ELF_H
++
++/* AVR32 relocation numbers */
++#define R_AVR32_NONE 0
++#define R_AVR32_32 1
++#define R_AVR32_16 2
++#define R_AVR32_8 3
++#define R_AVR32_32_PCREL 4
++#define R_AVR32_16_PCREL 5
++#define R_AVR32_8_PCREL 6
++#define R_AVR32_DIFF32 7
++#define R_AVR32_DIFF16 8
++#define R_AVR32_DIFF8 9
++#define R_AVR32_GOT32 10
++#define R_AVR32_GOT16 11
++#define R_AVR32_GOT8 12
++#define R_AVR32_21S 13
++#define R_AVR32_16U 14
++#define R_AVR32_16S 15
++#define R_AVR32_8S 16
++#define R_AVR32_8S_EXT 17
++#define R_AVR32_22H_PCREL 18
++#define R_AVR32_18W_PCREL 19
++#define R_AVR32_16B_PCREL 20
++#define R_AVR32_16N_PCREL 21
++#define R_AVR32_14UW_PCREL 22
++#define R_AVR32_11H_PCREL 23
++#define R_AVR32_10UW_PCREL 24
++#define R_AVR32_9H_PCREL 25
++#define R_AVR32_9UW_PCREL 26
++#define R_AVR32_HI16 27
++#define R_AVR32_LO16 28
++#define R_AVR32_GOTPC 29
++#define R_AVR32_GOTCALL 30
++#define R_AVR32_LDA_GOT 31
++#define R_AVR32_GOT21S 32
++#define R_AVR32_GOT18SW 33
++#define R_AVR32_GOT16S 34
++#define R_AVR32_GOT7UW 35
++#define R_AVR32_32_CPENT 36
++#define R_AVR32_CPCALL 37
++#define R_AVR32_16_CP 38
++#define R_AVR32_9W_CP 39
++#define R_AVR32_RELATIVE 40
++#define R_AVR32_GLOB_DAT 41
++#define R_AVR32_JMP_SLOT 42
++#define R_AVR32_ALIGN 43
++
++/*
++ * ELF register definitions..
++ */
++
++#include <asm/ptrace.h>
++#include <asm/user.h>
++
++typedef unsigned long elf_greg_t;
++
++#define ELF_NGREG (sizeof (struct pt_regs) / sizeof (elf_greg_t))
++typedef elf_greg_t elf_gregset_t[ELF_NGREG];
++
++typedef struct user_fpu_struct elf_fpregset_t;
++
++/*
++ * This is used to ensure we don't load something for the wrong architecture.
++ */
++#define elf_check_arch(x) ( (x)->e_machine == EM_AVR32 )
++
++/*
++ * These are used to set parameters in the core dumps.
++ */
++#define ELF_CLASS ELFCLASS32
++#ifdef __LITTLE_ENDIAN__
++#define ELF_DATA ELFDATA2LSB
++#else
++#define ELF_DATA ELFDATA2MSB
++#endif
++#define ELF_ARCH EM_AVR32
++
++#define USE_ELF_CORE_DUMP
++#define ELF_EXEC_PAGESIZE 4096
++
++/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
++ use of this is to invoke "./ld.so someprog" to test out a new version of
++ the loader. We need to make sure that it is out of the way of the program
++ that it will "exec", and that there is sufficient room for the brk. */
++
++#define ELF_ET_DYN_BASE (2 * TASK_SIZE / 3)
++
++
++/* This yields a mask that user programs can use to figure out what
++ instruction set this CPU supports. This could be done in user space,
++ but it's not easy, and we've already done it here. */
++
++#define ELF_HWCAP (0)
++
++/* This yields a string that ld.so will use to load implementation
++ specific libraries for optimization. This is more specific in
++ intent than poking at uname or /proc/cpuinfo.
++
++ For the moment, we have only optimizations for the Intel generations,
++ but that could change... */
++
++#define ELF_PLATFORM (NULL)
++
++#ifdef __KERNEL__
++#define SET_PERSONALITY(ex, ibcs2) set_personality(PER_LINUX_32BIT)
++#endif
++
++#endif /* __ASM_AVR32_ELF_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/emergency-restart.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/emergency-restart.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_EMERGENCY_RESTART_H
++#define __ASM_AVR32_EMERGENCY_RESTART_H
++
++#include <asm-generic/emergency-restart.h>
++
++#endif /* __ASM_AVR32_EMERGENCY_RESTART_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/errno.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/errno.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_ERRNO_H
++#define __ASM_AVR32_ERRNO_H
++
++#include <asm-generic/errno.h>
++
++#endif /* __ASM_AVR32_ERRNO_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/fcntl.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/fcntl.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_FCNTL_H
++#define __ASM_AVR32_FCNTL_H
++
++#include <asm-generic/fcntl.h>
++
++#endif /* __ASM_AVR32_FCNTL_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/futex.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/futex.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_FUTEX_H
++#define __ASM_AVR32_FUTEX_H
++
++#include <asm-generic/futex.h>
++
++#endif /* __ASM_AVR32_FUTEX_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/hardirq.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/hardirq.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,34 @@
++#ifndef __ASM_AVR32_HARDIRQ_H
++#define __ASM_AVR32_HARDIRQ_H
++
++#include <linux/threads.h>
++#include <asm/irq.h>
++
++#ifndef __ASSEMBLY__
++
++#include <linux/cache.h>
++
++/* entry.S is sensitive to the offsets of these fields */
++typedef struct {
++ unsigned int __softirq_pending;
++} ____cacheline_aligned irq_cpustat_t;
++
++void ack_bad_irq(unsigned int irq);
++
++/* Standard mappings for irq_cpustat_t above */
++#include <linux/irq_cpustat.h>
++
++#endif /* __ASSEMBLY__ */
++
++#define HARDIRQ_BITS 12
++
++/*
++ * The hardirq mask has to be large enough to have
++ * space for potentially all IRQ sources in the system
++ * nesting on a single CPU:
++ */
++#if (1 << HARDIRQ_BITS) < NR_IRQS
++# error HARDIRQ_BITS is too low!
++#endif
++
++#endif /* __ASM_AVR32_HARDIRQ_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/hw_irq.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/hw_irq.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,9 @@
++#ifndef __ASM_AVR32_HW_IRQ_H
++#define __ASM_AVR32_HW_IRQ_H
++
++static inline void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i)
++{
++ /* Nothing to do */
++}
++
++#endif /* __ASM_AVR32_HW_IRQ_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/intc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/intc.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,128 @@
++#ifndef __ASM_AVR32_INTC_H
++#define __ASM_AVR32_INTC_H
++
++#include <linux/sysdev.h>
++#include <linux/interrupt.h>
++
++struct irq_controller;
++struct irqaction;
++struct pt_regs;
++
++struct platform_device;
++
++/* Information about the internal interrupt controller */
++struct intc_device {
++ /* ioremapped address of configuration block */
++ void __iomem *regs;
++
++ /* the physical device */
++ struct platform_device *pdev;
++
++ /* Number of interrupt lines per group. */
++ unsigned int irqs_per_group;
++
++ /* The highest group ID + 1 */
++ unsigned int nr_groups;
++
++ /*
++ * Bitfield indicating which groups are actually in use. The
++ * size of the array is
++ * ceil(group_max / (8 * sizeof(unsigned int))).
++ */
++ unsigned int group_mask[];
++};
++
++struct irq_controller_class {
++ /*
++ * A short name identifying this kind of controller.
++ */
++ const char *typename;
++ /*
++ * Handle the IRQ. Must do any necessary acking and masking.
++ */
++ irqreturn_t (*handle)(int irq, void *dev_id, struct pt_regs *regs);
++ /*
++ * Register a new IRQ handler.
++ */
++ int (*setup)(struct irq_controller *ctrl, unsigned int irq,
++ struct irqaction *action);
++ /*
++ * Unregister a IRQ handler.
++ */
++ void (*free)(struct irq_controller *ctrl, unsigned int irq,
++ void *dev_id);
++ /*
++ * Mask the IRQ in the interrupt controller.
++ */
++ void (*mask)(struct irq_controller *ctrl, unsigned int irq);
++ /*
++ * Unmask the IRQ in the interrupt controller.
++ */
++ void (*unmask)(struct irq_controller *ctrl, unsigned int irq);
++ /*
++ * Set the type of the IRQ. See below for possible types.
++ * Return -EINVAL if a given type is not supported
++ */
++ int (*set_type)(struct irq_controller *ctrl, unsigned int irq,
++ unsigned int type);
++ /*
++ * Return the IRQ type currently set
++ */
++ unsigned int (*get_type)(struct irq_controller *ctrl, unsigned int irq);
++};
++
++struct irq_controller {
++ struct irq_controller_class *class;
++ unsigned int irq_group;
++ unsigned int first_irq;
++ unsigned int nr_irqs;
++ struct list_head list;
++};
++
++struct intc_group_desc {
++ struct irq_controller *ctrl;
++ irqreturn_t (*handle)(int, void *, struct pt_regs *);
++ unsigned long flags;
++ void *dev_id;
++ const char *devname;
++};
++
++/*
++ * The internal interrupt controller. Defined in board/part-specific
++ * devices.c.
++ * TODO: Should probably be defined per-cpu.
++ */
++extern struct intc_device intc;
++
++extern int request_internal_irq(unsigned int irq,
++ irqreturn_t (*handler)(int, void *, struct pt_regs *),
++ unsigned long irqflags,
++ const char *devname, void *dev_id);
++extern void free_internal_irq(unsigned int irq);
++
++/* Only used by time_init() */
++extern int setup_internal_irq(unsigned int irq, struct intc_group_desc *desc);
++
++/*
++ * Set interrupt priority for a given group. `group' can be found by
++ * using irq_to_group(irq). Priority can be from 0 (lowest) to 3
++ * (highest). Higher-priority interrupts will preempt lower-priority
++ * interrupts (unless interrupts are masked globally).
++ *
++ * This function does not check for conflicts within a group.
++ */
++extern int intc_set_priority(unsigned int group,
++ unsigned int priority);
++
++/*
++ * Returns a bitmask of pending interrupts in a group.
++ */
++extern unsigned long intc_get_pending(unsigned int group);
++
++/*
++ * Register a new external interrupt controller. Returns the first
++ * external IRQ number that is assigned to the new controller.
++ */
++extern int intc_register_controller(struct irq_controller *ctrl);
++
++#endif /* __ASM_AVR32_INTC_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/io.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/io.h 2006-12-04 11:50:22.000000000 +0100
+@@ -0,0 +1,286 @@
++#ifndef __ASM_AVR32_IO_H
++#define __ASM_AVR32_IO_H
++
++#include <linux/string.h>
++
++#ifdef __KERNEL__
++
++#include <asm/addrspace.h>
++#include <asm/byteorder.h>
++
++/* virt_to_phys will only work when address is in P1 or P2 */
++static __inline__ unsigned long virt_to_phys(volatile void *address)
++{
++ return PHYSADDR(address);
++}
++
++static __inline__ void * phys_to_virt(unsigned long address)
++{
++ return (void *)P1SEGADDR(address);
++}
++
++#define cached_to_phys(addr) ((unsigned long)PHYSADDR(addr))
++#define uncached_to_phys(addr) ((unsigned long)PHYSADDR(addr))
++#define phys_to_cached(addr) ((void *)P1SEGADDR(addr))
++#define phys_to_uncached(addr) ((void *)P2SEGADDR(addr))
++
++/*
++ * Generic IO read/write. These perform native-endian accesses. Note
++ * that some architectures will want to re-define __raw_{read,write}w.
++ */
++extern void __raw_writesb(unsigned int addr, const void *data, int bytelen);
++extern void __raw_writesw(unsigned int addr, const void *data, int wordlen);
++extern void __raw_writesl(unsigned int addr, const void *data, int longlen);
++
++extern void __raw_readsb(unsigned int addr, void *data, int bytelen);
++extern void __raw_readsw(unsigned int addr, void *data, int wordlen);
++extern void __raw_readsl(unsigned int addr, void *data, int longlen);
++
++static inline void writeb(unsigned char b, volatile void __iomem *addr)
++{
++ *(volatile unsigned char __force *)addr = b;
++}
++static inline void writew(unsigned short b, volatile void __iomem *addr)
++{
++ *(volatile unsigned short __force *)addr = b;
++}
++static inline void writel(unsigned int b, volatile void __iomem *addr)
++{
++ *(volatile unsigned int __force *)addr = b;
++}
++#define __raw_writeb writeb
++#define __raw_writew writew
++#define __raw_writel writel
++
++static inline unsigned char readb(const volatile void __iomem *addr)
++{
++ return *(const volatile unsigned char __force *)addr;
++}
++static inline unsigned short readw(const volatile void __iomem *addr)
++{
++ return *(const volatile unsigned short __force *)addr;
++}
++static inline unsigned int readl(const volatile void __iomem *addr)
++{
++ return *(const volatile unsigned int __force *)addr;
++}
++#define __raw_readb readb
++#define __raw_readw readw
++#define __raw_readl readl
++
++#define writesb(p, d, l) __raw_writesb((unsigned int)p, d, l)
++#define writesw(p, d, l) __raw_writesw((unsigned int)p, d, l)
++#define writesl(p, d, l) __raw_writesl((unsigned int)p, d, l)
++
++#define readsb(p, d, l) __raw_readsb((unsigned int)p, d, l)
++#define readsw(p, d, l) __raw_readsw((unsigned int)p, d, l)
++#define readsl(p, d, l) __raw_readsl((unsigned int)p, d, l)
++
++
++/*
++ * io{read,write}{8,16,32} macros in both le (for PCI style consumers) and native be
++ */
++#ifndef ioread8
++
++#define ioread8(p) ({ unsigned int __v = __raw_readb(p); __v; })
++
++#define ioread16(p) ({ unsigned int __v = le16_to_cpu(__raw_readw(p)); __v; })
++#define ioread16be(p) ({ unsigned int __v = be16_to_cpu(__raw_readw(p)); __v; })
++
++#define ioread32(p) ({ unsigned int __v = le32_to_cpu(__raw_readl(p)); __v; })
++#define ioread32be(p) ({ unsigned int __v = be32_to_cpu(__raw_readl(p)); __v; })
++
++#define iowrite8(v,p) __raw_writeb(v, p)
++
++#define iowrite16(v,p) __raw_writew(cpu_to_le16(v), p)
++#define iowrite16be(v,p) __raw_writew(cpu_to_be16(v), p)
++
++#define iowrite32(v,p) __raw_writel(cpu_to_le32(v), p)
++#define iowrite32be(v,p) __raw_writel(cpu_to_be32(v), p)
++
++#define ioread8_rep(p,d,c) __raw_readsb(p,d,c)
++#define ioread16_rep(p,d,c) __raw_readsw(p,d,c)
++#define ioread32_rep(p,d,c) __raw_readsl(p,d,c)
++
++#define iowrite8_rep(p,s,c) __raw_writesb(p,s,c)
++#define iowrite16_rep(p,s,c) __raw_writesw(p,s,c)
++#define iowrite32_rep(p,s,c) __raw_writesl(p,s,c)
++
++#endif
++
++
++/*
++ * These two are only here because ALSA _thinks_ it needs them...
++ */
++static inline void memcpy_fromio(void * to, const volatile void __iomem *from,
++ unsigned long count)
++{
++ char *p = to;
++ while (count) {
++ count--;
++ *p = readb(from);
++ p++;
++ from++;
++ }
++}
++
++static inline void memcpy_toio(volatile void __iomem *to, const void * from,
++ unsigned long count)
++{
++ const char *p = from;
++ while (count) {
++ count--;
++ writeb(*p, to);
++ p++;
++ to++;
++ }
++}
++
++static inline void memset_io(volatile void __iomem *addr, unsigned char val,
++ unsigned long count)
++{
++ memset((void __force *)addr, val, count);
++}
++
++/*
++ * Bad read/write accesses...
++ */
++extern void __readwrite_bug(const char *fn);
++
++#define IO_SPACE_LIMIT 0xffffffff
++
++/* Convert I/O port address to virtual address */
++#define __io(p) ((void __iomem *)phys_to_uncached(p))
++
++/*
++ * IO port access primitives
++ * -------------------------
++ *
++ * The AVR32 doesn't have special IO access instructions; all IO is memory
++ * mapped. Note that these are defined to perform little endian accesses
++ * only. Their primary purpose is to access PCI and ISA peripherals.
++ *
++ * Note that for a big endian machine, this implies that the following
++ * big endian mode connectivity is in place.
++ *
++ * The machine specific io.h include defines __io to translate an "IO"
++ * address to a memory address.
++ *
++ * Note that we prevent GCC re-ordering or caching values in expressions
++ * by introducing sequence points into the in*() definitions. Note that
++ * __raw_* do not guarantee this behaviour.
++ *
++ * The {in,out}[bwl] macros are for emulating x86-style PCI/ISA IO space.
++ */
++#define outb(v, p) __raw_writeb(v, __io(p))
++#define outw(v, p) __raw_writew(cpu_to_le16(v), __io(p))
++#define outl(v, p) __raw_writel(cpu_to_le32(v), __io(p))
++
++#define inb(p) __raw_readb(__io(p))
++#define inw(p) le16_to_cpu(__raw_readw(__io(p)))
++#define inl(p) le32_to_cpu(__raw_readl(__io(p)))
++
++static inline void __outsb(unsigned long port, void *addr, unsigned int count)
++{
++ while (count--) {
++ outb(*(u8 *)addr, port);
++ addr++;
++ }
++}
++
++static inline void __insb(unsigned long port, void *addr, unsigned int count)
++{
++ while (count--) {
++ *(u8 *)addr = inb(port);
++ addr++;
++ }
++}
++
++static inline void __outsw(unsigned long port, void *addr, unsigned int count)
++{
++ while (count--) {
++ outw(*(u16 *)addr, port);
++ addr += 2;
++ }
++}
++
++static inline void __insw(unsigned long port, void *addr, unsigned int count)
++{
++ while (count--) {
++ *(u16 *)addr = inw(port);
++ addr += 2;
++ }
++}
++
++static inline void __outsl(unsigned long port, void *addr, unsigned int count)
++{
++ while (count--) {
++ outl(*(u32 *)addr, port);
++ addr += 4;
++ }
++}
++
++static inline void __insl(unsigned long port, void *addr, unsigned int count)
++{
++ while (count--) {
++ *(u32 *)addr = inl(port);
++ addr += 4;
++ }
++}
++
++#define outsb(port, addr, count) __outsb(port, addr, count)
++#define insb(port, addr, count) __insb(port, addr, count)
++#define outsw(port, addr, count) __outsw(port, addr, count)
++#define insw(port, addr, count) __insw(port, addr, count)
++#define outsl(port, addr, count) __outsl(port, addr, count)
++#define insl(port, addr, count) __insl(port, addr, count)
++
++extern void __iomem *__ioremap(unsigned long offset, size_t size,
++ unsigned long flags);
++extern void __iounmap(void __iomem *addr);
++
++/*
++ * ioremap - map bus memory into CPU space
++ * @offset bus address of the memory
++ * @size size of the resource to map
++ *
++ * ioremap performs a platform specific sequence of operations to make
++ * bus memory CPU accessible via the readb/.../writel functions and
++ * the other mmio helpers. The returned address is not guaranteed to
++ * be usable directly as a virtual address.
++ */
++#define ioremap(offset, size) \
++ __ioremap((offset), (size), 0)
++
++#define iounmap(addr) \
++ __iounmap(addr)
++
++#define cached(addr) P1SEGADDR(addr)
++#define uncached(addr) P2SEGADDR(addr)
++
++#define virt_to_bus virt_to_phys
++#define bus_to_virt phys_to_virt
++#define page_to_bus page_to_phys
++#define bus_to_page phys_to_page
++
++#define dma_cache_wback_inv(_start, _size) \
++ flush_dcache_region(_start, _size)
++#define dma_cache_inv(_start, _size) \
++ invalidate_dcache_region(_start, _size)
++#define dma_cache_wback(_start, _size) \
++ clean_dcache_region(_start, _size)
++
++/*
++ * Convert a physical pointer to a virtual kernel pointer for /dev/mem
++ * access
++ */
++#define xlate_dev_mem_ptr(p) __va(p)
++
++/*
++ * Convert a virtual cached pointer to an uncached pointer
++ */
++#define xlate_dev_kmem_ptr(p) p
++
++#endif /* __KERNEL__ */
++
++#endif /* __ASM_AVR32_IO_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/ioctl.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/ioctl.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_IOCTL_H
++#define __ASM_AVR32_IOCTL_H
++
++#include <asm-generic/ioctl.h>
++
++#endif /* __ASM_AVR32_IOCTL_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/ioctls.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/ioctls.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,83 @@
++#ifndef __ASM_AVR32_IOCTLS_H
++#define __ASM_AVR32_IOCTLS_H
++
++#include <asm/ioctl.h>
++
++/* 0x54 is just a magic number to make these relatively unique ('T') */
++
++#define TCGETS 0x5401
++#define TCSETS 0x5402 /* Clashes with SNDCTL_TMR_START sound ioctl */
++#define TCSETSW 0x5403
++#define TCSETSF 0x5404
++#define TCGETA 0x5405
++#define TCSETA 0x5406
++#define TCSETAW 0x5407
++#define TCSETAF 0x5408
++#define TCSBRK 0x5409
++#define TCXONC 0x540A
++#define TCFLSH 0x540B
++#define TIOCEXCL 0x540C
++#define TIOCNXCL 0x540D
++#define TIOCSCTTY 0x540E
++#define TIOCGPGRP 0x540F
++#define TIOCSPGRP 0x5410
++#define TIOCOUTQ 0x5411
++#define TIOCSTI 0x5412
++#define TIOCGWINSZ 0x5413
++#define TIOCSWINSZ 0x5414
++#define TIOCMGET 0x5415
++#define TIOCMBIS 0x5416
++#define TIOCMBIC 0x5417
++#define TIOCMSET 0x5418
++#define TIOCGSOFTCAR 0x5419
++#define TIOCSSOFTCAR 0x541A
++#define FIONREAD 0x541B
++#define TIOCINQ FIONREAD
++#define TIOCLINUX 0x541C
++#define TIOCCONS 0x541D
++#define TIOCGSERIAL 0x541E
++#define TIOCSSERIAL 0x541F
++#define TIOCPKT 0x5420
++#define FIONBIO 0x5421
++#define TIOCNOTTY 0x5422
++#define TIOCSETD 0x5423
++#define TIOCGETD 0x5424
++#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */
++/* #define TIOCTTYGSTRUCT 0x5426 - Former debugging-only ioctl */
++#define TIOCSBRK 0x5427 /* BSD compatibility */
++#define TIOCCBRK 0x5428 /* BSD compatibility */
++#define TIOCGSID 0x5429 /* Return the session ID of FD */
++#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
++#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
++
++#define FIONCLEX 0x5450
++#define FIOCLEX 0x5451
++#define FIOASYNC 0x5452
++#define TIOCSERCONFIG 0x5453
++#define TIOCSERGWILD 0x5454
++#define TIOCSERSWILD 0x5455
++#define TIOCGLCKTRMIOS 0x5456
++#define TIOCSLCKTRMIOS 0x5457
++#define TIOCSERGSTRUCT 0x5458 /* For debugging only */
++#define TIOCSERGETLSR 0x5459 /* Get line status register */
++#define TIOCSERGETMULTI 0x545A /* Get multiport config */
++#define TIOCSERSETMULTI 0x545B /* Set multiport config */
++
++#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */
++#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
++#define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */
++#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */
++#define FIOQSIZE 0x5460
++
++/* Used for packet mode */
++#define TIOCPKT_DATA 0
++#define TIOCPKT_FLUSHREAD 1
++#define TIOCPKT_FLUSHWRITE 2
++#define TIOCPKT_STOP 4
++#define TIOCPKT_START 8
++#define TIOCPKT_NOSTOP 16
++#define TIOCPKT_DOSTOP 32
++
++#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
++
++#endif /* __ASM_AVR32_IOCTLS_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/ipcbuf.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/ipcbuf.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,29 @@
++#ifndef __ASM_AVR32_IPCBUF_H
++#define __ASM_AVR32_IPCBUF_H
++
++/*
++* The user_ipc_perm structure for AVR32 architecture.
++* Note extra padding because this structure is passed back and forth
++* between kernel and user space.
++*
++* Pad space is left for:
++* - 32-bit mode_t and seq
++* - 2 miscellaneous 32-bit values
++*/
++
++struct ipc64_perm
++{
++ __kernel_key_t key;
++ __kernel_uid32_t uid;
++ __kernel_gid32_t gid;
++ __kernel_uid32_t cuid;
++ __kernel_gid32_t cgid;
++ __kernel_mode_t mode;
++ unsigned short __pad1;
++ unsigned short seq;
++ unsigned short __pad2;
++ unsigned long __unused1;
++ unsigned long __unused2;
++};
++
++#endif /* __ASM_AVR32_IPCBUF_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/irq.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/irq.h 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,10 @@
++#ifndef __ASM_AVR32_IRQ_H
++#define __ASM_AVR32_IRQ_H
++
++#define NR_INTERNAL_IRQS 64
++#define NR_EXTERNAL_IRQS 64
++#define NR_IRQS (NR_INTERNAL_IRQS + NR_EXTERNAL_IRQS)
++
++#define irq_canonicalize(i) (i)
++
++#endif /* __ASM_AVR32_IOCTLS_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/kdebug.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/kdebug.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,38 @@
++#ifndef __ASM_AVR32_KDEBUG_H
++#define __ASM_AVR32_KDEBUG_H
++
++#include <linux/notifier.h>
++
++struct pt_regs;
++
++struct die_args {
++ struct pt_regs *regs;
++ int trapnr;
++};
++
++int register_die_notifier(struct notifier_block *nb);
++int unregister_die_notifier(struct notifier_block *nb);
++int register_page_fault_notifier(struct notifier_block *nb);
++int unregister_page_fault_notifier(struct notifier_block *nb);
++extern struct atomic_notifier_head avr32_die_chain;
++
++/* Grossly misnamed. */
++enum die_val {
++ DIE_FAULT,
++ DIE_BREAKPOINT,
++ DIE_SSTEP,
++ DIE_PAGE_FAULT,
++};
++
++static inline int notify_die(enum die_val val, struct pt_regs *regs,
++ int trap, int sig)
++{
++ struct die_args args = {
++ .regs = regs,
++ .trapnr = trap,
++ };
++
++ return atomic_notifier_call_chain(&avr32_die_chain, val, &args);
++}
++
++#endif /* __ASM_AVR32_KDEBUG_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/kmap_types.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/kmap_types.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,30 @@
++#ifndef __ASM_AVR32_KMAP_TYPES_H
++#define __ASM_AVR32_KMAP_TYPES_H
++
++#ifdef CONFIG_DEBUG_HIGHMEM
++# define D(n) __KM_FENCE_##n ,
++#else
++# define D(n)
++#endif
++
++enum km_type {
++D(0) KM_BOUNCE_READ,
++D(1) KM_SKB_SUNRPC_DATA,
++D(2) KM_SKB_DATA_SOFTIRQ,
++D(3) KM_USER0,
++D(4) KM_USER1,
++D(5) KM_BIO_SRC_IRQ,
++D(6) KM_BIO_DST_IRQ,
++D(7) KM_PTE0,
++D(8) KM_PTE1,
++D(9) KM_PTE2,
++D(10) KM_IRQ0,
++D(11) KM_IRQ1,
++D(12) KM_SOFTIRQ0,
++D(13) KM_SOFTIRQ1,
++D(14) KM_TYPE_NR
++};
++
++#undef D
++
++#endif /* __ASM_AVR32_KMAP_TYPES_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/kprobes.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/kprobes.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,34 @@
++/*
++ * Kernel Probes (KProbes)
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ * Copyright (C) IBM Corporation, 2002, 2004
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_KPROBES_H
++#define __ASM_AVR32_KPROBES_H
++
++#include <linux/types.h>
++
++typedef u16 kprobe_opcode_t;
++#define BREAKPOINT_INSTRUCTION 0xd673 /* breakpoint */
++#define MAX_INSN_SIZE 2
++
++#define ARCH_INACTIVE_KPROBE_COUNT 1
++
++#define arch_remove_kprobe(p) do { } while (0)
++
++/* Architecture specific copy of original instruction */
++struct arch_specific_insn {
++ kprobe_opcode_t insn[MAX_INSN_SIZE];
++};
++
++extern int kprobe_exceptions_notify(struct notifier_block *self,
++ unsigned long val, void *data);
++
++#define flush_insn_slot(p) do { } while (0)
++
++#endif /* __ASM_AVR32_KPROBES_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/linkage.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/linkage.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,7 @@
++#ifndef __ASM_LINKAGE_H
++#define __ASM_LINKAGE_H
++
++#define __ALIGN .balign 2
++#define __ALIGN_STR ".balign 2"
++
++#endif /* __ASM_LINKAGE_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/local.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/local.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_LOCAL_H
++#define __ASM_AVR32_LOCAL_H
++
++#include <asm-generic/local.h>
++
++#endif /* __ASM_AVR32_LOCAL_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/mach/serial_at91.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/mach/serial_at91.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,33 @@
++/*
++ * linux/include/asm-arm/mach/serial_at91.h
++ *
++ * Based on serial_sa1100.h by Nicolas Pitre
++ *
++ * Copyright (C) 2002 ATMEL Rousset
++ *
++ * Low level machine dependent UART functions.
++ */
++
++struct uart_port;
++
++/*
++ * This is a temporary structure for registering these
++ * functions; it is intended to be discarded after boot.
++ */
++struct at91_port_fns {
++ void (*set_mctrl)(struct uart_port *, u_int);
++ u_int (*get_mctrl)(struct uart_port *);
++ void (*enable_ms)(struct uart_port *);
++ void (*pm)(struct uart_port *, u_int, u_int);
++ int (*set_wake)(struct uart_port *, u_int);
++ int (*open)(struct uart_port *);
++ void (*close)(struct uart_port *);
++};
++
++#if defined(CONFIG_SERIAL_AT91)
++void at91_register_uart_fns(struct at91_port_fns *fns);
++#else
++#define at91_register_uart_fns(fns) do { } while (0)
++#endif
++
++
+Index: linux-2.6.18-avr32/include/asm-avr32/mman.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/mman.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,17 @@
++#ifndef __ASM_AVR32_MMAN_H__
++#define __ASM_AVR32_MMAN_H__
++
++#include <asm-generic/mman.h>
++
++#define MAP_GROWSDOWN 0x0100 /* stack-like segment */
++#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
++#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
++#define MAP_LOCKED 0x2000 /* pages are locked */
++#define MAP_NORESERVE 0x4000 /* don't check for reservations */
++#define MAP_POPULATE 0x8000 /* populate (prefault) page tables */
++#define MAP_NONBLOCK 0x10000 /* do not block on IO */
++
++#define MCL_CURRENT 1 /* lock all current mappings */
++#define MCL_FUTURE 2 /* lock all future mappings */
++
++#endif /* __ASM_AVR32_MMAN_H__ */
+Index: linux-2.6.18-avr32/include/asm-avr32/mmu.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/mmu.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,10 @@
++#ifndef __ASM_AVR32_MMU_H
++#define __ASM_AVR32_MMU_H
++
++/* Default "unsigned long" context */
++typedef unsigned long mm_context_t;
++
++#define MMU_ITLB_ENTRIES 64
++#define MMU_DTLB_ENTRIES 64
++
++#endif /* __ASM_AVR32_MMU_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/mmu_context.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/mmu_context.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,148 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * ASID handling taken from SH implementation.
++ * Copyright (C) 1999 Niibe Yutaka
++ * Copyright (C) 2003 Paul Mundt
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_MMU_CONTEXT_H
++#define __ASM_AVR32_MMU_CONTEXT_H
++
++#include <asm/tlbflush.h>
++#include <asm/pgalloc.h>
++#include <asm/sysreg.h>
++
++/*
++ * The MMU "context" consists of two things:
++ * (a) TLB cache version
++ * (b) ASID (Address Space IDentifier)
++ */
++#define MMU_CONTEXT_ASID_MASK 0x000000ff
++#define MMU_CONTEXT_VERSION_MASK 0xffffff00
++#define MMU_CONTEXT_FIRST_VERSION 0x00000100
++#define NO_CONTEXT 0
++
++#define MMU_NO_ASID 0x100
++
++/* Virtual Page Number mask */
++#define MMU_VPN_MASK 0xfffff000
++
++/* Cache of MMU context last used */
++extern unsigned long mmu_context_cache;
++
++/*
++ * Get MMU context if needed
++ */
++static inline void
++get_mmu_context(struct mm_struct *mm)
++{
++ unsigned long mc = mmu_context_cache;
++
++ if (((mm->context ^ mc) & MMU_CONTEXT_VERSION_MASK) == 0)
++ /* It's up to date, do nothing */
++ return;
++
++ /* It's old, we need to get new context with new version */
++ mc = ++mmu_context_cache;
++ if (!(mc & MMU_CONTEXT_ASID_MASK)) {
++ /*
++ * We have exhausted all ASIDs of this version.
++ * Flush the TLB and start new cycle.
++ */
++ flush_tlb_all();
++ /*
++ * Fix version. Note that we avoid version #0
++ * to distinguish NO_CONTEXT.
++ */
++ if (!mc)
++ mmu_context_cache = mc = MMU_CONTEXT_FIRST_VERSION;
++ }
++ mm->context = mc;
++}
++
++/*
++ * Initialize the context related info for a new mm_struct
++ * instance.
++ */
++static inline int init_new_context(struct task_struct *tsk,
++ struct mm_struct *mm)
++{
++ mm->context = NO_CONTEXT;
++ return 0;
++}
++
++/*
++ * Destroy context related info for an mm_struct that is about
++ * to be put to rest.
++ */
++static inline void destroy_context(struct mm_struct *mm)
++{
++ /* Do nothing */
++}
++
++static inline void set_asid(unsigned long asid)
++{
++ /* XXX: We're destroying TLBEHI[8:31] */
++ sysreg_write(TLBEHI, asid & MMU_CONTEXT_ASID_MASK);
++ cpu_sync_pipeline();
++}
++
++static inline unsigned long get_asid(void)
++{
++ unsigned long asid;
++
++ asid = sysreg_read(TLBEHI);
++ return asid & MMU_CONTEXT_ASID_MASK;
++}
++
++static inline void activate_context(struct mm_struct *mm)
++{
++ get_mmu_context(mm);
++ set_asid(mm->context & MMU_CONTEXT_ASID_MASK);
++}
++
++static inline void switch_mm(struct mm_struct *prev,
++ struct mm_struct *next,
++ struct task_struct *tsk)
++{
++ if (likely(prev != next)) {
++ unsigned long __pgdir = (unsigned long)next->pgd;
++
++ sysreg_write(PTBR, __pgdir);
++ activate_context(next);
++ }
++}
++
++#define deactivate_mm(tsk,mm) do { } while(0)
++
++#define activate_mm(prev, next) switch_mm((prev), (next), NULL)
++
++static inline void
++enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
++{
++}
++
++
++static inline void enable_mmu(void)
++{
++ sysreg_write(MMUCR, (SYSREG_BIT(MMUCR_S)
++ | SYSREG_BIT(E)
++ | SYSREG_BIT(MMUCR_I)));
++ nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop();
++
++ if (mmu_context_cache == NO_CONTEXT)
++ mmu_context_cache = MMU_CONTEXT_FIRST_VERSION;
++
++ set_asid(mmu_context_cache & MMU_CONTEXT_ASID_MASK);
++}
++
++static inline void disable_mmu(void)
++{
++ sysreg_write(MMUCR, SYSREG_BIT(MMUCR_S));
++}
++
++#endif /* __ASM_AVR32_MMU_CONTEXT_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/module.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/module.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,28 @@
++#ifndef __ASM_AVR32_MODULE_H
++#define __ASM_AVR32_MODULE_H
++
++struct mod_arch_syminfo {
++ unsigned long got_offset;
++ int got_initialized;
++};
++
++struct mod_arch_specific {
++ /* Starting offset of got in the module core memory. */
++ unsigned long got_offset;
++ /* Size of the got. */
++ unsigned long got_size;
++ /* Number of symbols in syminfo. */
++ int nsyms;
++ /* Additional symbol information (got offsets). */
++ struct mod_arch_syminfo *syminfo;
++};
++
++#define Elf_Shdr Elf32_Shdr
++#define Elf_Sym Elf32_Sym
++#define Elf_Ehdr Elf32_Ehdr
++
++#define MODULE_PROC_FAMILY "AVR32v1"
++
++#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY
++
++#endif /* __ASM_AVR32_MODULE_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/msgbuf.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/msgbuf.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,31 @@
++#ifndef __ASM_AVR32_MSGBUF_H
++#define __ASM_AVR32_MSGBUF_H
++
++/*
++ * The msqid64_ds structure for i386 architecture.
++ * Note extra padding because this structure is passed back and forth
++ * between kernel and user space.
++ *
++ * Pad space is left for:
++ * - 64-bit time_t to solve y2038 problem
++ * - 2 miscellaneous 32-bit values
++ */
++
++struct msqid64_ds {
++ struct ipc64_perm msg_perm;
++ __kernel_time_t msg_stime; /* last msgsnd time */
++ unsigned long __unused1;
++ __kernel_time_t msg_rtime; /* last msgrcv time */
++ unsigned long __unused2;
++ __kernel_time_t msg_ctime; /* last change time */
++ unsigned long __unused3;
++ unsigned long msg_cbytes; /* current number of bytes on queue */
++ unsigned long msg_qnum; /* number of messages in queue */
++ unsigned long msg_qbytes; /* max number of bytes on queue */
++ __kernel_pid_t msg_lspid; /* pid of last msgsnd */
++ __kernel_pid_t msg_lrpid; /* last receive pid */
++ unsigned long __unused4;
++ unsigned long __unused5;
++};
++
++#endif /* __ASM_AVR32_MSGBUF_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/mutex.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/mutex.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,9 @@
++/*
++ * Pull in the generic implementation for the mutex fastpath.
++ *
++ * TODO: implement optimized primitives instead, or leave the generic
++ * implementation in place, or pick the atomic_xchg() based generic
++ * implementation. (see asm-generic/mutex-xchg.h for details)
++ */
++
++#include <asm-generic/mutex-dec.h>
+Index: linux-2.6.18-avr32/include/asm-avr32/namei.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/namei.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,7 @@
++#ifndef __ASM_AVR32_NAMEI_H
++#define __ASM_AVR32_NAMEI_H
++
++/* This dummy routine may be changed to something useful */
++#define __emul_prefix() NULL
++
++#endif /* __ASM_AVR32_NAMEI_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/numnodes.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/numnodes.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,7 @@
++#ifndef __ASM_AVR32_NUMNODES_H
++#define __ASM_AVR32_NUMNODES_H
++
++/* Max 4 nodes */
++#define NODES_SHIFT 2
++
++#endif /* __ASM_AVR32_NUMNODES_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/ocd.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/ocd.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,78 @@
++/*
++ * AVR32 OCD Registers
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_OCD_H
++#define __ASM_AVR32_OCD_H
++
++/* Debug Registers */
++#define DBGREG_DID 0
++#define DBGREG_DC 8
++#define DBGREG_DS 16
++#define DBGREG_RWCS 28
++#define DBGREG_RWA 36
++#define DBGREG_RWD 40
++#define DBGREG_WT 44
++#define DBGREG_DTC 52
++#define DBGREG_DTSA0 56
++#define DBGREG_DTSA1 60
++#define DBGREG_DTEA0 72
++#define DBGREG_DTEA1 76
++#define DBGREG_BWC0A 88
++#define DBGREG_BWC0B 92
++#define DBGREG_BWC1A 96
++#define DBGREG_BWC1B 100
++#define DBGREG_BWC2A 104
++#define DBGREG_BWC2B 108
++#define DBGREG_BWC3A 112
++#define DBGREG_BWC3B 116
++#define DBGREG_BWA0A 120
++#define DBGREG_BWA0B 124
++#define DBGREG_BWA1A 128
++#define DBGREG_BWA1B 132
++#define DBGREG_BWA2A 136
++#define DBGREG_BWA2B 140
++#define DBGREG_BWA3A 144
++#define DBGREG_BWA3B 148
++#define DBGREG_BWD3A 153
++#define DBGREG_BWD3B 156
++
++#define DBGREG_PID 284
++
++#define SABAH_OCD 0x01
++#define SABAH_ICACHE 0x02
++#define SABAH_MEM_CACHED 0x04
++#define SABAH_MEM_UNCACHED 0x05
++
++/* Fields in the Development Control register */
++#define DC_SS_BIT 8
++
++#define DC_SS (1 << DC_SS_BIT)
++#define DC_DBE (1 << 13)
++#define DC_RID (1 << 27)
++#define DC_ORP (1 << 28)
++#define DC_MM (1 << 29)
++#define DC_RES (1 << 30)
++
++/* Fields in the Development Status register */
++#define DS_SSS (1 << 0)
++#define DS_SWB (1 << 1)
++#define DS_HWB (1 << 2)
++#define DS_BP_SHIFT 8
++#define DS_BP_MASK (0xff << DS_BP_SHIFT)
++
++#define __mfdr(addr) \
++({ \
++ register unsigned long value; \
++ asm volatile("mfdr %0, %1" : "=r"(value) : "i"(addr)); \
++ value; \
++})
++#define __mtdr(addr, value) \
++ asm volatile("mtdr %0, %1" : : "i"(addr), "r"(value))
++
++#endif /* __ASM_AVR32_OCD_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/page.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/page.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,112 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_PAGE_H
++#define __ASM_AVR32_PAGE_H
++
++#ifdef __KERNEL__
++
++/* PAGE_SHIFT determines the page size */
++#define PAGE_SHIFT 12
++#ifdef __ASSEMBLY__
++#define PAGE_SIZE (1 << PAGE_SHIFT)
++#else
++#define PAGE_SIZE (1UL << PAGE_SHIFT)
++#endif
++#define PAGE_MASK (~(PAGE_SIZE-1))
++#define PTE_MASK PAGE_MASK
++
++#ifndef __ASSEMBLY__
++
++#include <asm/addrspace.h>
++
++extern void clear_page(void *to);
++extern void copy_page(void *to, void *from);
++
++#define clear_user_page(page, vaddr, pg) clear_page(page)
++#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
++
++/*
++ * These are used to make use of C type-checking..
++ */
++typedef struct { unsigned long pte; } pte_t;
++typedef struct { unsigned long pgd; } pgd_t;
++typedef struct { unsigned long pgprot; } pgprot_t;
++
++#define pte_val(x) ((x).pte)
++#define pgd_val(x) ((x).pgd)
++#define pgprot_val(x) ((x).pgprot)
++
++#define __pte(x) ((pte_t) { (x) })
++#define __pgd(x) ((pgd_t) { (x) })
++#define __pgprot(x) ((pgprot_t) { (x) })
++
++/* FIXME: These should be removed soon */
++extern unsigned long memory_start, memory_end;
++
++/* Pure 2^n version of get_order */
++static inline int get_order(unsigned long size)
++{
++ unsigned lz;
++
++ size = (size - 1) >> PAGE_SHIFT;
++ asm("clz %0, %1" : "=r"(lz) : "r"(size));
++ return 32 - lz;
++}
++
++#endif /* !__ASSEMBLY__ */
++
++/* Align the pointer to the (next) page boundary */
++#define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK)
++
++/*
++ * The hardware maps the virtual addresses 0x80000000 -> 0x9fffffff
++ * permanently to the physical addresses 0x00000000 -> 0x1fffffff when
++ * segmentation is enabled. We want to make use of this in order to
++ * minimize TLB pressure.
++ */
++#define PAGE_OFFSET (0x80000000UL)
++
++/*
++ * ALSA uses virt_to_page() on DMA pages, which I'm not entirely sure
++ * is a good idea. Anyway, we can't simply subtract PAGE_OFFSET here
++ * in that case, so we'll have to mask out the three most significant
++ * bits of the address instead...
++ *
++ * What's the difference between __pa() and virt_to_phys() anyway?
++ */
++#define __pa(x) PHYSADDR(x)
++#define __va(x) ((void *)(P1SEGADDR(x)))
++
++#define MAP_NR(addr) (((unsigned long)(addr) - PAGE_OFFSET) >> PAGE_SHIFT)
++
++#define phys_to_page(phys) (pfn_to_page(phys >> PAGE_SHIFT))
++#define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
++
++#ifndef CONFIG_NEED_MULTIPLE_NODES
++
++#define PHYS_PFN_OFFSET (CONFIG_PHYS_OFFSET >> PAGE_SHIFT)
++
++#define pfn_to_page(pfn) (mem_map + ((pfn) - PHYS_PFN_OFFSET))
++#define page_to_pfn(page) ((unsigned long)((page) - mem_map) + PHYS_PFN_OFFSET)
++#define pfn_valid(pfn) ((pfn) >= PHYS_PFN_OFFSET && (pfn) < (PHYS_PFN_OFFSET + max_mapnr))
++#endif /* CONFIG_NEED_MULTIPLE_NODES */
++
++#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
++#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
++
++#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \
++ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
++
++/*
++ * Memory above this physical address will be considered highmem.
++ */
++#define HIGHMEM_START 0x20000000UL
++
++#endif /* __KERNEL__ */
++
++#endif /* __ASM_AVR32_PAGE_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/param.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/param.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,23 @@
++#ifndef __ASM_AVR32_PARAM_H
++#define __ASM_AVR32_PARAM_H
++
++#ifdef __KERNEL__
++# define HZ CONFIG_HZ
++# define USER_HZ 100 /* User interfaces are in "ticks" */
++# define CLOCKS_PER_SEC (USER_HZ) /* frequency at which times() counts */
++#endif
++
++#ifndef HZ
++# define HZ 100
++#endif
++
++/* TODO: Should be configurable */
++#define EXEC_PAGESIZE 4096
++
++#ifndef NOGROUP
++# define NOGROUP (-1)
++#endif
++
++#define MAXHOSTNAMELEN 64
++
++#endif /* __ASM_AVR32_PARAM_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/pci.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/pci.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,8 @@
++#ifndef __ASM_AVR32_PCI_H__
++#define __ASM_AVR32_PCI_H__
++
++/* We don't support PCI yet, but some drivers require this file anyway */
++
++#define PCI_DMA_BUS_IS_PHYS (1)
++
++#endif /* __ASM_AVR32_PCI_H__ */
+Index: linux-2.6.18-avr32/include/asm-avr32/percpu.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/percpu.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_PERCPU_H
++#define __ASM_AVR32_PERCPU_H
++
++#include <asm-generic/percpu.h>
++
++#endif /* __ASM_AVR32_PERCPU_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/pgalloc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/pgalloc.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,96 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_PGALLOC_H
++#define __ASM_AVR32_PGALLOC_H
++
++#include <asm/processor.h>
++#include <linux/threads.h>
++#include <linux/slab.h>
++#include <linux/mm.h>
++
++#define pmd_populate_kernel(mm, pmd, pte) \
++ set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte)))
++
++static __inline__ void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
++ struct page *pte)
++{
++ set_pmd(pmd, __pmd(_PAGE_TABLE + page_to_phys(pte)));
++}
++
++/*
++ * Allocate and free page tables
++ */
++static __inline__ pgd_t *pgd_alloc(struct mm_struct *mm)
++{
++ unsigned int pgd_size = (USER_PTRS_PER_PGD * sizeof(pgd_t));
++ pgd_t *pgd = (pgd_t *)kmalloc(pgd_size, GFP_KERNEL);
++
++ if (pgd)
++ memset(pgd, 0, pgd_size);
++
++ return pgd;
++}
++
++static inline void pgd_free(pgd_t *pgd)
++{
++ kfree(pgd);
++}
++
++static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
++ unsigned long address)
++{
++ int count = 0;
++ pte_t *pte;
++
++ do {
++ pte = (pte_t *) __get_free_page(GFP_KERNEL | __GFP_REPEAT);
++ if (pte)
++ clear_page(pte);
++ else {
++ current->state = TASK_UNINTERRUPTIBLE;
++ schedule_timeout(HZ);
++ }
++ } while (!pte && (count++ < 10));
++
++ return pte;
++}
++
++static inline struct page *pte_alloc_one(struct mm_struct *mm,
++ unsigned long address)
++{
++ int count = 0;
++ struct page *pte;
++
++ do {
++ pte = alloc_pages(GFP_KERNEL, 0);
++ if (pte)
++ clear_page(page_address(pte));
++ else {
++ current->state = TASK_UNINTERRUPTIBLE;
++ schedule_timeout(HZ);
++ }
++ } while (!pte && (count++ < 10));
++
++ return pte;
++}
++
++static inline void pte_free_kernel(pte_t *pte)
++{
++ free_page((unsigned long)pte);
++}
++
++static inline void pte_free(struct page *pte)
++{
++ __free_page(pte);
++}
++
++#define __pte_free_tlb(tlb,pte) tlb_remove_page((tlb),(pte))
++
++#define check_pgt_cache() do { } while(0)
++
++#endif /* __ASM_AVR32_PGALLOC_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/pgtable-2level.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/pgtable-2level.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,47 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_PGTABLE_2LEVEL_H
++#define __ASM_AVR32_PGTABLE_2LEVEL_H
++
++#include <asm-generic/pgtable-nopmd.h>
++
++/*
++ * Traditional 2-level paging structure
++ */
++#define PGDIR_SHIFT 22
++#define PTRS_PER_PGD 1024
++
++#define PTRS_PER_PTE 1024
++
++#ifndef __ASSEMBLY__
++#define pte_ERROR(e) \
++ printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e))
++#define pgd_ERROR(e) \
++ printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
++
++/*
++ * Certain architectures need to do special things when PTEs
++ * within a page table are directly modified. Thus, the following
++ * hook is made available.
++ */
++#define set_pte(pteptr, pteval) (*(pteptr) = pteval)
++#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep, pteval)
++
++/*
++ * (pmds are folded into pgds so this doesn't get actually called,
++ * but the define is needed for a generic inline function.)
++ */
++#define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval)
++
++#define pte_pfn(x) ((unsigned long)(((x).pte >> PAGE_SHIFT)))
++#define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
++#define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
++
++#endif /* !__ASSEMBLY__ */
++
++#endif /* __ASM_AVR32_PGTABLE_2LEVEL_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/pgtable.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/pgtable.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,408 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_PGTABLE_H
++#define __ASM_AVR32_PGTABLE_H
++
++#include <asm/addrspace.h>
++
++#ifndef __ASSEMBLY__
++#include <linux/sched.h>
++
++#endif /* !__ASSEMBLY__ */
++
++/*
++ * Use two-level page tables just as the i386 (without PAE)
++ */
++#include <asm/pgtable-2level.h>
++
++/*
++ * The following code might need some cleanup when the values are
++ * final...
++ */
++#define PMD_SIZE (1UL << PMD_SHIFT)
++#define PMD_MASK (~(PMD_SIZE-1))
++#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
++#define PGDIR_MASK (~(PGDIR_SIZE-1))
++
++#define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE)
++#define FIRST_USER_ADDRESS 0
++
++#define PTE_PHYS_MASK 0x1ffff000
++
++#ifndef __ASSEMBLY__
++extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
++extern void paging_init(void);
++
++/*
++ * ZERO_PAGE is a global shared page that is always zero: used for
++ * zero-mapped memory areas etc.
++ */
++extern struct page *empty_zero_page;
++#define ZERO_PAGE(vaddr) (empty_zero_page)
++
++/*
++ * Just any arbitrary offset to the start of the vmalloc VM area: the
++ * current 8 MiB value just means that there will be a 8 MiB "hole"
++ * after the uncached physical memory (P2 segment) until the vmalloc
++ * area starts. That means that any out-of-bounds memory accesses will
++ * hopefully be caught; we don't know if the end of the P1/P2 segments
++ * are actually used for anything, but it is anyway safer to let the
++ * MMU catch these kinds of errors than to rely on the memory bus.
++ *
++ * A "hole" of the same size is added to the end of the P3 segment as
++ * well. It might seem wasteful to use 16 MiB of virtual address space
++ * on this, but we do have 512 MiB of it...
++ *
++ * The vmalloc() routines leave a hole of 4 KiB between each vmalloced
++ * area for the same reason.
++ */
++#define VMALLOC_OFFSET (8 * 1024 * 1024)
++#define VMALLOC_START (P3SEG + VMALLOC_OFFSET)
++#define VMALLOC_END (P4SEG - VMALLOC_OFFSET)
++#endif /* !__ASSEMBLY__ */
++
++/*
++ * Page flags. Some of these flags are not directly supported by
++ * hardware, so we have to emulate them.
++ */
++#define _TLBEHI_BIT_VALID 9
++#define _TLBEHI_VALID (1 << _TLBEHI_BIT_VALID)
++
++#define _PAGE_BIT_WT 0 /* W-bit : write-through */
++#define _PAGE_BIT_DIRTY 1 /* D-bit : page changed */
++#define _PAGE_BIT_SZ0 2 /* SZ0-bit : Size of page */
++#define _PAGE_BIT_SZ1 3 /* SZ1-bit : Size of page */
++#define _PAGE_BIT_EXECUTE 4 /* X-bit : execute access allowed */
++#define _PAGE_BIT_RW 5 /* AP0-bit : write access allowed */
++#define _PAGE_BIT_USER 6 /* AP1-bit : user space access allowed */
++#define _PAGE_BIT_BUFFER 7 /* B-bit : bufferable */
++#define _PAGE_BIT_GLOBAL 8 /* G-bit : global (ignore ASID) */
++#define _PAGE_BIT_CACHABLE 9 /* C-bit : cachable */
++
++/* If we drop support for 1K pages, we get two extra bits */
++#define _PAGE_BIT_PRESENT 10
++#define _PAGE_BIT_ACCESSED 11 /* software: page was accessed */
++
++/* The following flags are only valid when !PRESENT */
++#define _PAGE_BIT_FILE 0 /* software: pagecache or swap? */
++
++#define _PAGE_WT (1 << _PAGE_BIT_WT)
++#define _PAGE_DIRTY (1 << _PAGE_BIT_DIRTY)
++#define _PAGE_EXECUTE (1 << _PAGE_BIT_EXECUTE)
++#define _PAGE_RW (1 << _PAGE_BIT_RW)
++#define _PAGE_USER (1 << _PAGE_BIT_USER)
++#define _PAGE_BUFFER (1 << _PAGE_BIT_BUFFER)
++#define _PAGE_GLOBAL (1 << _PAGE_BIT_GLOBAL)
++#define _PAGE_CACHABLE (1 << _PAGE_BIT_CACHABLE)
++
++/* Software flags */
++#define _PAGE_ACCESSED (1 << _PAGE_BIT_ACCESSED)
++#define _PAGE_PRESENT (1 << _PAGE_BIT_PRESENT)
++#define _PAGE_FILE (1 << _PAGE_BIT_FILE)
++
++/*
++ * Page types, i.e. sizes. _PAGE_TYPE_NONE corresponds to what is
++ * usually called _PAGE_PROTNONE on other architectures.
++ *
++ * XXX: Find out if _PAGE_PROTNONE is equivalent with !_PAGE_USER. If
++ * so, we can encode all possible page sizes (although we can't really
++ * support 1K pages anyway due to the _PAGE_PRESENT and _PAGE_ACCESSED
++ * bits)
++ *
++ */
++#define _PAGE_TYPE_MASK ((1 << _PAGE_BIT_SZ0) | (1 << _PAGE_BIT_SZ1))
++#define _PAGE_TYPE_NONE (0 << _PAGE_BIT_SZ0)
++#define _PAGE_TYPE_SMALL (1 << _PAGE_BIT_SZ0)
++#define _PAGE_TYPE_MEDIUM (2 << _PAGE_BIT_SZ0)
++#define _PAGE_TYPE_LARGE (3 << _PAGE_BIT_SZ0)
++
++/*
++ * Mask which drop software flags. We currently can't handle more than
++ * 512 MiB of physical memory, so we can use bits 29-31 for other
++ * stuff. With a fixed 4K page size, we can use bits 10-11 as well as
++ * bits 2-3 (SZ)
++ */
++#define _PAGE_FLAGS_HARDWARE_MASK 0xfffff3ff
++
++#define _PAGE_FLAGS_CACHE_MASK (_PAGE_CACHABLE | _PAGE_BUFFER | _PAGE_WT)
++
++/* TODO: Check for saneness */
++/* User-mode page table flags (to be set in a pgd or pmd entry) */
++#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_TYPE_SMALL | _PAGE_RW \
++ | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
++/* Kernel-mode page table flags */
++#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_TYPE_SMALL | _PAGE_RW \
++ | _PAGE_ACCESSED | _PAGE_DIRTY)
++/* Flags that may be modified by software */
++#define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY \
++ | _PAGE_FLAGS_CACHE_MASK)
++
++#define _PAGE_FLAGS_READ (_PAGE_CACHABLE | _PAGE_BUFFER)
++#define _PAGE_FLAGS_WRITE (_PAGE_FLAGS_READ | _PAGE_RW | _PAGE_DIRTY)
++
++#define _PAGE_NORMAL(x) __pgprot((x) | _PAGE_PRESENT | _PAGE_TYPE_SMALL \
++ | _PAGE_ACCESSED)
++
++#define PAGE_NONE (_PAGE_ACCESSED | _PAGE_TYPE_NONE)
++#define PAGE_READ (_PAGE_FLAGS_READ | _PAGE_USER)
++#define PAGE_EXEC (_PAGE_FLAGS_READ | _PAGE_EXECUTE | _PAGE_USER)
++#define PAGE_WRITE (_PAGE_FLAGS_WRITE | _PAGE_USER)
++#define PAGE_KERNEL _PAGE_NORMAL(_PAGE_FLAGS_WRITE | _PAGE_EXECUTE | _PAGE_GLOBAL)
++#define PAGE_KERNEL_RO _PAGE_NORMAL(_PAGE_FLAGS_READ | _PAGE_EXECUTE | _PAGE_GLOBAL)
++
++#define _PAGE_P(x) _PAGE_NORMAL((x) & ~(_PAGE_RW | _PAGE_DIRTY))
++#define _PAGE_S(x) _PAGE_NORMAL(x)
++
++#define PAGE_COPY _PAGE_P(PAGE_WRITE | PAGE_READ)
++
++#ifndef __ASSEMBLY__
++/*
++ * The hardware supports flags for write- and execute access. Read is
++ * always allowed if the page is loaded into the TLB, so the "-w-",
++ * "--x" and "-wx" mappings are implemented as "rw-", "r-x" and "rwx",
++ * respectively.
++ *
++ * The "---" case is handled by software; the page will simply not be
++ * loaded into the TLB if the page type is _PAGE_TYPE_NONE.
++ */
++
++#define __P000 __pgprot(PAGE_NONE)
++#define __P001 _PAGE_P(PAGE_READ)
++#define __P010 _PAGE_P(PAGE_WRITE)
++#define __P011 _PAGE_P(PAGE_WRITE | PAGE_READ)
++#define __P100 _PAGE_P(PAGE_EXEC)
++#define __P101 _PAGE_P(PAGE_EXEC | PAGE_READ)
++#define __P110 _PAGE_P(PAGE_EXEC | PAGE_WRITE)
++#define __P111 _PAGE_P(PAGE_EXEC | PAGE_WRITE | PAGE_READ)
++
++#define __S000 __pgprot(PAGE_NONE)
++#define __S001 _PAGE_S(PAGE_READ)
++#define __S010 _PAGE_S(PAGE_WRITE)
++#define __S011 _PAGE_S(PAGE_WRITE | PAGE_READ)
++#define __S100 _PAGE_S(PAGE_EXEC)
++#define __S101 _PAGE_S(PAGE_EXEC | PAGE_READ)
++#define __S110 _PAGE_S(PAGE_EXEC | PAGE_WRITE)
++#define __S111 _PAGE_S(PAGE_EXEC | PAGE_WRITE | PAGE_READ)
++
++#define pte_none(x) (!pte_val(x))
++#define pte_present(x) (pte_val(x) & _PAGE_PRESENT)
++
++#define pte_clear(mm,addr,xp) \
++ do { \
++ set_pte_at(mm, addr, xp, __pte(0)); \
++ } while (0)
++
++/*
++ * The following only work if pte_present() is true.
++ * Undefined behaviour if not..
++ */
++static inline int pte_read(pte_t pte)
++{
++ return pte_val(pte) & _PAGE_USER;
++}
++static inline int pte_write(pte_t pte)
++{
++ return pte_val(pte) & _PAGE_RW;
++}
++static inline int pte_exec(pte_t pte)
++{
++ return pte_val(pte) & _PAGE_EXECUTE;
++}
++static inline int pte_dirty(pte_t pte)
++{
++ return pte_val(pte) & _PAGE_DIRTY;
++}
++static inline int pte_young(pte_t pte)
++{
++ return pte_val(pte) & _PAGE_ACCESSED;
++}
++
++/*
++ * The following only work if pte_present() is not true.
++ */
++static inline int pte_file(pte_t pte)
++{
++ return pte_val(pte) & _PAGE_FILE;
++}
++
++/* Mutator functions for PTE bits */
++static inline pte_t pte_rdprotect(pte_t pte)
++{
++ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_USER));
++ return pte;
++}
++static inline pte_t pte_wrprotect(pte_t pte)
++{
++ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_RW));
++ return pte;
++}
++static inline pte_t pte_exprotect(pte_t pte)
++{
++ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_EXECUTE));
++ return pte;
++}
++static inline pte_t pte_mkclean(pte_t pte)
++{
++ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_DIRTY));
++ return pte;
++}
++static inline pte_t pte_mkold(pte_t pte)
++{
++ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_ACCESSED));
++ return pte;
++}
++static inline pte_t pte_mkread(pte_t pte)
++{
++ set_pte(&pte, __pte(pte_val(pte) | _PAGE_USER));
++ return pte;
++}
++static inline pte_t pte_mkwrite(pte_t pte)
++{
++ set_pte(&pte, __pte(pte_val(pte) | _PAGE_RW));
++ return pte;
++}
++static inline pte_t pte_mkexec(pte_t pte)
++{
++ set_pte(&pte, __pte(pte_val(pte) | _PAGE_EXECUTE));
++ return pte;
++}
++static inline pte_t pte_mkdirty(pte_t pte)
++{
++ set_pte(&pte, __pte(pte_val(pte) | _PAGE_DIRTY));
++ return pte;
++}
++static inline pte_t pte_mkyoung(pte_t pte)
++{
++ set_pte(&pte, __pte(pte_val(pte) | _PAGE_ACCESSED));
++ return pte;
++}
++
++#define pmd_none(x) (!pmd_val(x))
++#define pmd_present(x) (pmd_val(x) & _PAGE_PRESENT)
++#define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0)
++#define pmd_bad(x) ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) \
++ != _KERNPG_TABLE)
++
++/*
++ * Permanent address of a page. We don't support highmem, so this is
++ * trivial.
++ */
++#define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT))
++#define pte_page(x) phys_to_page(pte_val(x) & PTE_PHYS_MASK)
++
++/*
++ * Mark the prot value as uncacheable and unbufferable
++ */
++#define pgprot_noncached(prot) \
++ __pgprot(pgprot_val(prot) & ~(_PAGE_BUFFER | _PAGE_CACHABLE))
++
++/*
++ * Mark the prot value as uncacheable but bufferable
++ */
++#define pgprot_writecombine(prot) \
++ __pgprot((pgprot_val(prot) & ~_PAGE_CACHABLE) | _PAGE_BUFFER)
++
++/*
++ * Conversion functions: convert a page and protection to a page entry,
++ * and a page entry and page directory to the page they refer to.
++ *
++ * extern pte_t mk_pte(struct page *page, pgprot_t pgprot)
++ */
++#define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot))
++
++static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
++{
++ set_pte(&pte, __pte((pte_val(pte) & _PAGE_CHG_MASK)
++ | pgprot_val(newprot)));
++ return pte;
++}
++
++#define page_pte(page) page_pte_prot(page, __pgprot(0))
++
++#define pmd_page_kernel(pmd) \
++ ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK))
++
++#define pmd_page(pmd) (phys_to_page(pmd_val(pmd)))
++
++/* to find an entry in a page-table-directory. */
++#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
++#define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address))
++#define pgd_offset_current(address) \
++ ((pgd_t *)__mfsr(SYSREG_PTBR) + pgd_index(address))
++
++/* to find an entry in a kernel page-table-directory */
++#define pgd_offset_k(address) pgd_offset(&init_mm, address)
++
++/* Find an entry in the third-level page table.. */
++#define pte_index(address) \
++ ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
++#define pte_offset(dir, address) \
++ ((pte_t *) pmd_page_kernel(*(dir)) + pte_index(address))
++#define pte_offset_kernel(dir, address) \
++ ((pte_t *) pmd_page_kernel(*(dir)) + pte_index(address))
++#define pte_offset_map(dir, address) pte_offset_kernel(dir, address)
++#define pte_offset_map_nested(dir, address) pte_offset_kernel(dir, address)
++#define pte_unmap(pte) do { } while (0)
++#define pte_unmap_nested(pte) do { } while (0)
++
++struct vm_area_struct;
++extern void update_mmu_cache(struct vm_area_struct * vma,
++ unsigned long address, pte_t pte);
++
++/*
++ * Encode and decode a swap entry
++ *
++ * Constraints:
++ * _PAGE_FILE at bit 0
++ * _PAGE_TYPE_* at bits 2-3 (for emulating _PAGE_PROTNONE)
++ * _PAGE_PRESENT at bit 10
++ *
++ * We encode the type into bits 4-9 and offset into bits 11-31. This
++ * gives us a 21 bits offset, or 2**21 * 4K = 8G usable swap space per
++ * device, and 64 possible types.
++ *
++ * NOTE: We should set ZEROs at the position of _PAGE_PRESENT
++ * and _PAGE_PROTNONE bits
++ */
++#define __swp_type(x) (((x).val >> 4) & 0x3f)
++#define __swp_offset(x) ((x).val >> 11)
++#define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 4) | ((offset) << 11) })
++#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
++#define __swp_entry_to_pte(x) ((pte_t) { (x).val })
++
++/*
++ * Encode and decode a nonlinear file mapping entry. We have to
++ * preserve _PAGE_FILE and _PAGE_PRESENT here. _PAGE_TYPE_* isn't
++ * necessary, since _PAGE_FILE implies !_PAGE_PROTNONE (?)
++ */
++#define PTE_FILE_MAX_BITS 30
++#define pte_to_pgoff(pte) (((pte_val(pte) >> 1) & 0x1ff) \
++ | ((pte_val(pte) >> 11) << 9))
++#define pgoff_to_pte(off) ((pte_t) { ((((off) & 0x1ff) << 1) \
++ | (((off) >> 9) << 11) \
++ | _PAGE_FILE) })
++
++typedef pte_t *pte_addr_t;
++
++#define kern_addr_valid(addr) (1)
++
++#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
++ remap_pfn_range(vma, vaddr, pfn, size, prot)
++
++#define MK_IOSPACE_PFN(space, pfn) (pfn)
++#define GET_IOSPACE(pfn) 0
++#define GET_PFN(pfn) (pfn)
++
++/* No page table caches to initialize (?) */
++#define pgtable_cache_init() do { } while(0)
++
++#include <asm-generic/pgtable.h>
++
++#endif /* !__ASSEMBLY__ */
++
++#endif /* __ASM_AVR32_PGTABLE_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/poll.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/poll.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,27 @@
++#ifndef __ASM_AVR32_POLL_H
++#define __ASM_AVR32_POLL_H
++
++/* These are specified by iBCS2 */
++#define POLLIN 0x0001
++#define POLLPRI 0x0002
++#define POLLOUT 0x0004
++#define POLLERR 0x0008
++#define POLLHUP 0x0010
++#define POLLNVAL 0x0020
++
++/* The rest seem to be more-or-less nonstandard. Check them! */
++#define POLLRDNORM 0x0040
++#define POLLRDBAND 0x0080
++#define POLLWRNORM 0x0100
++#define POLLWRBAND 0x0200
++#define POLLMSG 0x0400
++#define POLLREMOVE 0x1000
++#define POLLRDHUP 0x2000
++
++struct pollfd {
++ int fd;
++ short events;
++ short revents;
++};
++
++#endif /* __ASM_AVR32_POLL_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/posix_types.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/posix_types.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,129 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_POSIX_TYPES_H
++#define __ASM_AVR32_POSIX_TYPES_H
++
++/*
++ * This file is generally used by user-level software, so you need to
++ * be a little careful about namespace pollution etc. Also, we cannot
++ * assume GCC is being used.
++ */
++
++typedef unsigned long __kernel_ino_t;
++typedef unsigned short __kernel_mode_t;
++typedef unsigned short __kernel_nlink_t;
++typedef long __kernel_off_t;
++typedef int __kernel_pid_t;
++typedef unsigned short __kernel_ipc_pid_t;
++typedef unsigned int __kernel_uid_t;
++typedef unsigned int __kernel_gid_t;
++typedef unsigned long __kernel_size_t;
++typedef int __kernel_ssize_t;
++typedef int __kernel_ptrdiff_t;
++typedef long __kernel_time_t;
++typedef long __kernel_suseconds_t;
++typedef long __kernel_clock_t;
++typedef int __kernel_timer_t;
++typedef int __kernel_clockid_t;
++typedef int __kernel_daddr_t;
++typedef char * __kernel_caddr_t;
++typedef unsigned short __kernel_uid16_t;
++typedef unsigned short __kernel_gid16_t;
++typedef unsigned int __kernel_uid32_t;
++typedef unsigned int __kernel_gid32_t;
++
++typedef unsigned short __kernel_old_uid_t;
++typedef unsigned short __kernel_old_gid_t;
++typedef unsigned short __kernel_old_dev_t;
++
++#ifdef __GNUC__
++typedef long long __kernel_loff_t;
++#endif
++
++typedef struct {
++#if defined(__KERNEL__) || defined(__USE_ALL)
++ int val[2];
++#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */
++ int __val[2];
++#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
++} __kernel_fsid_t;
++
++#if defined(__KERNEL__)
++
++#undef __FD_SET
++static __inline__ void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp)
++{
++ unsigned long __tmp = __fd / __NFDBITS;
++ unsigned long __rem = __fd % __NFDBITS;
++ __fdsetp->fds_bits[__tmp] |= (1UL<<__rem);
++}
++
++#undef __FD_CLR
++static __inline__ void __FD_CLR(unsigned long __fd, __kernel_fd_set *__fdsetp)
++{
++ unsigned long __tmp = __fd / __NFDBITS;
++ unsigned long __rem = __fd % __NFDBITS;
++ __fdsetp->fds_bits[__tmp] &= ~(1UL<<__rem);
++}
++
++
++#undef __FD_ISSET
++static __inline__ int __FD_ISSET(unsigned long __fd, const __kernel_fd_set *__p)
++{
++ unsigned long __tmp = __fd / __NFDBITS;
++ unsigned long __rem = __fd % __NFDBITS;
++ return (__p->fds_bits[__tmp] & (1UL<<__rem)) != 0;
++}
++
++/*
++ * This will unroll the loop for the normal constant case (8 ints,
++ * for a 256-bit fd_set)
++ */
++#undef __FD_ZERO
++static __inline__ void __FD_ZERO(__kernel_fd_set *__p)
++{
++ unsigned long *__tmp = __p->fds_bits;
++ int __i;
++
++ if (__builtin_constant_p(__FDSET_LONGS)) {
++ switch (__FDSET_LONGS) {
++ case 16:
++ __tmp[ 0] = 0; __tmp[ 1] = 0;
++ __tmp[ 2] = 0; __tmp[ 3] = 0;
++ __tmp[ 4] = 0; __tmp[ 5] = 0;
++ __tmp[ 6] = 0; __tmp[ 7] = 0;
++ __tmp[ 8] = 0; __tmp[ 9] = 0;
++ __tmp[10] = 0; __tmp[11] = 0;
++ __tmp[12] = 0; __tmp[13] = 0;
++ __tmp[14] = 0; __tmp[15] = 0;
++ return;
++
++ case 8:
++ __tmp[ 0] = 0; __tmp[ 1] = 0;
++ __tmp[ 2] = 0; __tmp[ 3] = 0;
++ __tmp[ 4] = 0; __tmp[ 5] = 0;
++ __tmp[ 6] = 0; __tmp[ 7] = 0;
++ return;
++
++ case 4:
++ __tmp[ 0] = 0; __tmp[ 1] = 0;
++ __tmp[ 2] = 0; __tmp[ 3] = 0;
++ return;
++ }
++ }
++ __i = __FDSET_LONGS;
++ while (__i) {
++ __i--;
++ *__tmp = 0;
++ __tmp++;
++ }
++}
++
++#endif /* defined(__KERNEL__) */
++
++#endif /* __ASM_AVR32_POSIX_TYPES_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/processor.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/processor.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,147 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_PROCESSOR_H
++#define __ASM_AVR32_PROCESSOR_H
++
++#include <asm/page.h>
++#include <asm/cache.h>
++
++#define TASK_SIZE 0x80000000
++
++#ifndef __ASSEMBLY__
++
++static inline void *current_text_addr(void)
++{
++ register void *pc asm("pc");
++ return pc;
++}
++
++enum arch_type {
++ ARCH_AVR32A,
++ ARCH_AVR32B,
++ ARCH_MAX
++};
++
++enum cpu_type {
++ CPU_MORGAN,
++ CPU_AT32AP,
++ CPU_MAX
++};
++
++enum tlb_config {
++ TLB_NONE,
++ TLB_SPLIT,
++ TLB_UNIFIED,
++ TLB_INVALID
++};
++
++struct avr32_cpuinfo {
++ struct clk *clk;
++ unsigned long loops_per_jiffy;
++ enum arch_type arch_type;
++ enum cpu_type cpu_type;
++ unsigned short arch_revision;
++ unsigned short cpu_revision;
++ enum tlb_config tlb_config;
++
++ struct cache_info icache;
++ struct cache_info dcache;
++};
++
++extern struct avr32_cpuinfo boot_cpu_data;
++
++#ifdef CONFIG_SMP
++extern struct avr32_cpuinfo cpu_data[];
++#define current_cpu_data cpu_data[smp_processor_id()]
++#else
++#define cpu_data (&boot_cpu_data)
++#define current_cpu_data boot_cpu_data
++#endif
++
++/* This decides where the kernel will search for a free chunk of vm
++ * space during mmap's
++ */
++#define TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 3))
++
++#define cpu_relax() barrier()
++#define cpu_sync_pipeline() asm volatile("sub pc, -2" : : : "memory")
++
++struct cpu_context {
++ unsigned long sr;
++ unsigned long pc;
++ unsigned long ksp; /* Kernel stack pointer */
++ unsigned long r7;
++ unsigned long r6;
++ unsigned long r5;
++ unsigned long r4;
++ unsigned long r3;
++ unsigned long r2;
++ unsigned long r1;
++ unsigned long r0;
++};
++
++/* This struct contains the CPU context as stored by switch_to() */
++struct thread_struct {
++ struct cpu_context cpu_context;
++ unsigned long single_step_addr;
++ u16 single_step_insn;
++};
++
++#define INIT_THREAD { \
++ .cpu_context = { \
++ .ksp = sizeof(init_stack) + (long)&init_stack, \
++ }, \
++}
++
++/*
++ * Do necessary setup to start up a newly executed thread.
++ */
++#define start_thread(regs, new_pc, new_sp) \
++ do { \
++ set_fs(USER_DS); \
++ memset(regs, 0, sizeof(*regs)); \
++ regs->sr = MODE_USER; \
++ regs->pc = new_pc & ~1; \
++ regs->sp = new_sp; \
++ } while(0)
++
++struct task_struct;
++
++/* Free all resources held by a thread */
++extern void release_thread(struct task_struct *);
++
++/* Create a kernel thread without removing it from tasklists */
++extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
++
++/* Prepare to copy thread state - unlazy all lazy status */
++#define prepare_to_copy(tsk) do { } while(0)
++
++/* Return saved PC of a blocked thread */
++#define thread_saved_pc(tsk) ((tsk)->thread.cpu_context.pc)
++
++struct pt_regs;
++void show_trace(struct task_struct *task, unsigned long *stack,
++ struct pt_regs *regs);
++
++extern unsigned long get_wchan(struct task_struct *p);
++
++#define KSTK_EIP(tsk) ((tsk)->thread.cpu_context.pc)
++#define KSTK_ESP(tsk) ((tsk)->thread.cpu_context.ksp)
++
++#define ARCH_HAS_PREFETCH
++
++static inline void prefetch(const void *x)
++{
++ const char *c = x;
++ asm volatile("pref %0" : : "r"(c));
++}
++#define PREFETCH_STRIDE L1_CACHE_BYTES
++
++#endif /* __ASSEMBLY__ */
++
++#endif /* __ASM_AVR32_PROCESSOR_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/ptrace.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/ptrace.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,154 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_PTRACE_H
++#define __ASM_AVR32_PTRACE_H
++
++#define PTRACE_GETREGS 12
++#define PTRACE_SETREGS 13
++
++/*
++ * Status Register bits
++ */
++#define SR_H 0x40000000
++#define SR_R 0x20000000
++#define SR_J 0x10000000
++#define SR_DM 0x08000000
++#define SR_D 0x04000000
++#define MODE_NMI 0x01c00000
++#define MODE_EXCEPTION 0x01800000
++#define MODE_INT3 0x01400000
++#define MODE_INT2 0x01000000
++#define MODE_INT1 0x00c00000
++#define MODE_INT0 0x00800000
++#define MODE_SUPERVISOR 0x00400000
++#define MODE_USER 0x00000000
++#define MODE_MASK 0x01c00000
++#define SR_EM 0x00200000
++#define SR_I3M 0x00100000
++#define SR_I2M 0x00080000
++#define SR_I1M 0x00040000
++#define SR_I0M 0x00020000
++#define SR_GM 0x00010000
++
++#define SR_H_BIT 30
++#define SR_R_BIT 29
++#define SR_J_BIT 28
++#define SR_DM_BIT 27
++#define SR_D_BIT 26
++#define MODE_SHIFT 22
++#define SR_EM_BIT 21
++#define SR_I3M_BIT 20
++#define SR_I2M_BIT 19
++#define SR_I1M_BIT 18
++#define SR_I0M_BIT 17
++#define SR_GM_BIT 16
++
++/* The user-visible part */
++#define SR_L 0x00000020
++#define SR_Q 0x00000010
++#define SR_V 0x00000008
++#define SR_N 0x00000004
++#define SR_Z 0x00000002
++#define SR_C 0x00000001
++
++#define SR_L_BIT 5
++#define SR_Q_BIT 4
++#define SR_V_BIT 3
++#define SR_N_BIT 2
++#define SR_Z_BIT 1
++#define SR_C_BIT 0
++
++/*
++ * The order is defined by the stmts instruction. r0 is stored first,
++ * so it gets the highest address.
++ *
++ * Registers 0-12 are general-purpose registers (r12 is normally used for
++ * the function return value).
++ * Register 13 is the stack pointer
++ * Register 14 is the link register
++ * Register 15 is the program counter (retrieved from the RAR sysreg)
++ */
++#define FRAME_SIZE_FULL 72
++#define REG_R12_ORIG 68
++#define REG_R0 64
++#define REG_R1 60
++#define REG_R2 56
++#define REG_R3 52
++#define REG_R4 48
++#define REG_R5 44
++#define REG_R6 40
++#define REG_R7 36
++#define REG_R8 32
++#define REG_R9 28
++#define REG_R10 24
++#define REG_R11 20
++#define REG_R12 16
++#define REG_SP 12
++#define REG_LR 8
++
++#define FRAME_SIZE_MIN 8
++#define REG_PC 4
++#define REG_SR 0
++
++#ifndef __ASSEMBLY__
++struct pt_regs {
++ /* These are always saved */
++ unsigned long sr;
++ unsigned long pc;
++
++ /* These are sometimes saved */
++ unsigned long lr;
++ unsigned long sp;
++ unsigned long r12;
++ unsigned long r11;
++ unsigned long r10;
++ unsigned long r9;
++ unsigned long r8;
++ unsigned long r7;
++ unsigned long r6;
++ unsigned long r5;
++ unsigned long r4;
++ unsigned long r3;
++ unsigned long r2;
++ unsigned long r1;
++ unsigned long r0;
++
++ /* Only saved on system call */
++ unsigned long r12_orig;
++};
++
++#ifdef __KERNEL__
++# define user_mode(regs) (((regs)->sr & MODE_MASK) == MODE_USER)
++extern void show_regs (struct pt_regs *);
++
++static __inline__ int valid_user_regs(struct pt_regs *regs)
++{
++ /*
++ * Some of the Java bits might be acceptable if/when we
++ * implement some support for that stuff...
++ */
++ if ((regs->sr & 0xffff0000) == 0)
++ return 1;
++
++ /*
++ * Force status register flags to be sane and report this
++ * illegal behaviour...
++ */
++ regs->sr &= 0x0000ffff;
++ return 0;
++}
++
++#define instruction_pointer(regs) ((regs)->pc)
++
++#define profile_pc(regs) instruction_pointer(regs)
++
++#endif /* __KERNEL__ */
++
++#endif /* ! __ASSEMBLY__ */
++
++#endif /* __ASM_AVR32_PTRACE_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/resource.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/resource.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_RESOURCE_H
++#define __ASM_AVR32_RESOURCE_H
++
++#include <asm-generic/resource.h>
++
++#endif /* __ASM_AVR32_RESOURCE_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/scatterlist.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/scatterlist.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,21 @@
++#ifndef __ASM_AVR32_SCATTERLIST_H
++#define __ASM_AVR32_SCATTERLIST_H
++
++struct scatterlist {
++ struct page *page;
++ unsigned int offset;
++ dma_addr_t dma_address;
++ unsigned int length;
++};
++
++/* These macros should be used after a pci_map_sg call has been done
++ * to get bus addresses of each of the SG entries and their lengths.
++ * You should only work with the number of sg entries pci_map_sg
++ * returns.
++ */
++#define sg_dma_address(sg) ((sg)->dma_address)
++#define sg_dma_len(sg) ((sg)->length)
++
++#define ISA_DMA_THRESHOLD (0xffffffff)
++
++#endif /* __ASM_AVR32_SCATTERLIST_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/sections.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/sections.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_SECTIONS_H
++#define __ASM_AVR32_SECTIONS_H
++
++#include <asm-generic/sections.h>
++
++#endif /* __ASM_AVR32_SECTIONS_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/semaphore.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/semaphore.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,109 @@
++/*
++ * SMP- and interrupt-safe semaphores.
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * Based on include/asm-i386/semaphore.h
++ * Copyright (C) 1996 Linus Torvalds
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_SEMAPHORE_H
++#define __ASM_AVR32_SEMAPHORE_H
++
++#include <linux/linkage.h>
++
++#include <asm/system.h>
++#include <asm/atomic.h>
++#include <linux/wait.h>
++#include <linux/rwsem.h>
++
++struct semaphore {
++ atomic_t count;
++ int sleepers;
++ wait_queue_head_t wait;
++};
++
++#define __SEMAPHORE_INITIALIZER(name, n) \
++{ \
++ .count = ATOMIC_INIT(n), \
++ .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
++}
++
++#define __DECLARE_SEMAPHORE_GENERIC(name,count) \
++ struct semaphore name = __SEMAPHORE_INITIALIZER(name,count)
++
++#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1)
++#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0)
++
++static inline void sema_init (struct semaphore *sem, int val)
++{
++ atomic_set(&sem->count, val);
++ sem->sleepers = 0;
++ init_waitqueue_head(&sem->wait);
++}
++
++static inline void init_MUTEX (struct semaphore *sem)
++{
++ sema_init(sem, 1);
++}
++
++static inline void init_MUTEX_LOCKED (struct semaphore *sem)
++{
++ sema_init(sem, 0);
++}
++
++void __down(struct semaphore * sem);
++int __down_interruptible(struct semaphore * sem);
++void __up(struct semaphore * sem);
++
++/*
++ * This is ugly, but we want the default case to fall through.
++ * "__down_failed" is a special asm handler that calls the C
++ * routine that actually waits. See arch/i386/kernel/semaphore.c
++ */
++static inline void down(struct semaphore * sem)
++{
++ might_sleep();
++ if (unlikely(atomic_dec_return (&sem->count) < 0))
++ __down (sem);
++}
++
++/*
++ * Interruptible try to acquire a semaphore. If we obtained
++ * it, return zero. If we were interrupted, returns -EINTR
++ */
++static inline int down_interruptible(struct semaphore * sem)
++{
++ int ret = 0;
++
++ might_sleep();
++ if (unlikely(atomic_dec_return (&sem->count) < 0))
++ ret = __down_interruptible (sem);
++ return ret;
++}
++
++/*
++ * Non-blockingly attempt to down() a semaphore.
++ * Returns zero if we acquired it
++ */
++static inline int down_trylock(struct semaphore * sem)
++{
++ return atomic_dec_if_positive(&sem->count) < 0;
++}
++
++/*
++ * Note! This is subtle. We jump to wake people up only if
++ * the semaphore was negative (== somebody was waiting on it).
++ * The default case (no contention) will result in NO
++ * jumps for both down() and up().
++ */
++static inline void up(struct semaphore * sem)
++{
++ if (unlikely(atomic_inc_return (&sem->count) <= 0))
++ __up (sem);
++}
++
++#endif /*__ASM_AVR32_SEMAPHORE_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/sembuf.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/sembuf.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,25 @@
++#ifndef __ASM_AVR32_SEMBUF_H
++#define __ASM_AVR32_SEMBUF_H
++
++/*
++* The semid64_ds structure for AVR32 architecture.
++ * Note extra padding because this structure is passed back and forth
++ * between kernel and user space.
++ *
++ * Pad space is left for:
++ * - 64-bit time_t to solve y2038 problem
++ * - 2 miscellaneous 32-bit values
++ */
++
++struct semid64_ds {
++ struct ipc64_perm sem_perm; /* permissions .. see ipc.h */
++ __kernel_time_t sem_otime; /* last semop time */
++ unsigned long __unused1;
++ __kernel_time_t sem_ctime; /* last change time */
++ unsigned long __unused2;
++ unsigned long sem_nsems; /* no. of semaphores in array */
++ unsigned long __unused3;
++ unsigned long __unused4;
++};
++
++#endif /* __ASM_AVR32_SEMBUF_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/setup.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/setup.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,141 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * Based on linux/include/asm-arm/setup.h
++ * Copyright (C) 1997-1999 Russel King
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_SETUP_H__
++#define __ASM_AVR32_SETUP_H__
++
++#define COMMAND_LINE_SIZE 256
++
++/* Magic number indicating that a tag table is present */
++#define ATAG_MAGIC 0xa2a25441
++
++#ifndef __ASSEMBLY__
++
++/*
++ * Generic memory range, used by several tags.
++ *
++ * addr is always physical.
++ * size is measured in bytes.
++ * next is for use by the OS, e.g. for grouping regions into
++ * linked lists.
++ */
++struct tag_mem_range {
++ u32 addr;
++ u32 size;
++ struct tag_mem_range * next;
++};
++
++/* The list ends with an ATAG_NONE node. */
++#define ATAG_NONE 0x00000000
++
++struct tag_header {
++ u32 size;
++ u32 tag;
++};
++
++/* The list must start with an ATAG_CORE node */
++#define ATAG_CORE 0x54410001
++
++struct tag_core {
++ u32 flags;
++ u32 pagesize;
++ u32 rootdev;
++};
++
++/* it is allowed to have multiple ATAG_MEM nodes */
++#define ATAG_MEM 0x54410002
++/* ATAG_MEM uses tag_mem_range */
++
++/* command line: \0 terminated string */
++#define ATAG_CMDLINE 0x54410003
++
++struct tag_cmdline {
++ char cmdline[1]; /* this is the minimum size */
++};
++
++/* Ramdisk image (may be compressed) */
++#define ATAG_RDIMG 0x54410004
++/* ATAG_RDIMG uses tag_mem_range */
++
++/* Information about various clocks present in the system */
++#define ATAG_CLOCK 0x54410005
++
++struct tag_clock {
++ u32 clock_id; /* Which clock are we talking about? */
++ u32 clock_flags; /* Special features */
++ u64 clock_hz; /* Clock speed in Hz */
++};
++
++/* The clock types we know about */
++#define CLOCK_BOOTCPU 0
++
++/* Memory reserved for the system (e.g. the bootloader) */
++#define ATAG_RSVD_MEM 0x54410006
++/* ATAG_RSVD_MEM uses tag_mem_range */
++
++/* Ethernet information */
++
++#define ATAG_ETHERNET 0x54410007
++
++struct tag_ethernet {
++ u8 mac_index;
++ u8 mii_phy_addr;
++ u8 hw_address[6];
++};
++
++#define ETH_INVALID_PHY 0xff
++
++struct tag {
++ struct tag_header hdr;
++ union {
++ struct tag_core core;
++ struct tag_mem_range mem_range;
++ struct tag_cmdline cmdline;
++ struct tag_clock clock;
++ struct tag_ethernet ethernet;
++ } u;
++};
++
++struct tagtable {
++ u32 tag;
++ int (*parse)(struct tag *);
++};
++
++#define __tag __attribute_used__ __attribute__((__section__(".taglist")))
++#define __tagtable(tag, fn) \
++ static struct tagtable __tagtable_##fn __tag = { tag, fn }
++
++#define tag_member_present(tag,member) \
++ ((unsigned long)(&((struct tag *)0L)->member + 1) \
++ <= (tag)->hdr.size * 4)
++
++#define tag_next(t) ((struct tag *)((u32 *)(t) + (t)->hdr.size))
++#define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2)
++
++#define for_each_tag(t,base) \
++ for (t = base; t->hdr.size; t = tag_next(t))
++
++extern struct tag_mem_range *mem_phys;
++extern struct tag_mem_range *mem_reserved;
++extern struct tag_mem_range *mem_ramdisk;
++
++extern struct tag *bootloader_tags;
++
++extern void setup_bootmem(void);
++extern void setup_processor(void);
++extern void board_setup_fbmem(unsigned long fbmem_start,
++ unsigned long fbmem_size);
++
++/* Chip-specific hook to enable the use of SDRAM */
++void chip_enable_sdram(void);
++
++#endif /* !__ASSEMBLY__ */
++
++#endif /* __ASM_AVR32_SETUP_H__ */
+Index: linux-2.6.18-avr32/include/asm-avr32/shmbuf.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/shmbuf.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,42 @@
++#ifndef __ASM_AVR32_SHMBUF_H
++#define __ASM_AVR32_SHMBUF_H
++
++/*
++ * The shmid64_ds structure for i386 architecture.
++ * Note extra padding because this structure is passed back and forth
++ * between kernel and user space.
++ *
++ * Pad space is left for:
++ * - 64-bit time_t to solve y2038 problem
++ * - 2 miscellaneous 32-bit values
++ */
++
++struct shmid64_ds {
++ struct ipc64_perm shm_perm; /* operation perms */
++ size_t shm_segsz; /* size of segment (bytes) */
++ __kernel_time_t shm_atime; /* last attach time */
++ unsigned long __unused1;
++ __kernel_time_t shm_dtime; /* last detach time */
++ unsigned long __unused2;
++ __kernel_time_t shm_ctime; /* last change time */
++ unsigned long __unused3;
++ __kernel_pid_t shm_cpid; /* pid of creator */
++ __kernel_pid_t shm_lpid; /* pid of last operator */
++ unsigned long shm_nattch; /* no. of current attaches */
++ unsigned long __unused4;
++ unsigned long __unused5;
++};
++
++struct shminfo64 {
++ unsigned long shmmax;
++ unsigned long shmmin;
++ unsigned long shmmni;
++ unsigned long shmseg;
++ unsigned long shmall;
++ unsigned long __unused1;
++ unsigned long __unused2;
++ unsigned long __unused3;
++ unsigned long __unused4;
++};
++
++#endif /* __ASM_AVR32_SHMBUF_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/shmparam.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/shmparam.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_SHMPARAM_H
++#define __ASM_AVR32_SHMPARAM_H
++
++#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */
++
++#endif /* __ASM_AVR32_SHMPARAM_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/sigcontext.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/sigcontext.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,34 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_SIGCONTEXT_H
++#define __ASM_AVR32_SIGCONTEXT_H
++
++struct sigcontext {
++ unsigned long oldmask;
++
++ /* CPU registers */
++ unsigned long sr;
++ unsigned long pc;
++ unsigned long lr;
++ unsigned long sp;
++ unsigned long r12;
++ unsigned long r11;
++ unsigned long r10;
++ unsigned long r9;
++ unsigned long r8;
++ unsigned long r7;
++ unsigned long r6;
++ unsigned long r5;
++ unsigned long r4;
++ unsigned long r3;
++ unsigned long r2;
++ unsigned long r1;
++ unsigned long r0;
++};
++
++#endif /* __ASM_AVR32_SIGCONTEXT_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/siginfo.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/siginfo.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef _AVR32_SIGINFO_H
++#define _AVR32_SIGINFO_H
++
++#include <asm-generic/siginfo.h>
++
++#endif
+Index: linux-2.6.18-avr32/include/asm-avr32/signal.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/signal.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,168 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_SIGNAL_H
++#define __ASM_AVR32_SIGNAL_H
++
++#include <linux/types.h>
++
++/* Avoid too many header ordering problems. */
++struct siginfo;
++
++#ifdef __KERNEL__
++/* Most things should be clean enough to redefine this at will, if care
++ is taken to make libc match. */
++
++#define _NSIG 64
++#define _NSIG_BPW 32
++#define _NSIG_WORDS (_NSIG / _NSIG_BPW)
++
++typedef unsigned long old_sigset_t; /* at least 32 bits */
++
++typedef struct {
++ unsigned long sig[_NSIG_WORDS];
++} sigset_t;
++
++#else
++/* Here we must cater to libcs that poke about in kernel headers. */
++
++#define NSIG 32
++typedef unsigned long sigset_t;
++
++#endif /* __KERNEL__ */
++
++#define SIGHUP 1
++#define SIGINT 2
++#define SIGQUIT 3
++#define SIGILL 4
++#define SIGTRAP 5
++#define SIGABRT 6
++#define SIGIOT 6
++#define SIGBUS 7
++#define SIGFPE 8
++#define SIGKILL 9
++#define SIGUSR1 10
++#define SIGSEGV 11
++#define SIGUSR2 12
++#define SIGPIPE 13
++#define SIGALRM 14
++#define SIGTERM 15
++#define SIGSTKFLT 16
++#define SIGCHLD 17
++#define SIGCONT 18
++#define SIGSTOP 19
++#define SIGTSTP 20
++#define SIGTTIN 21
++#define SIGTTOU 22
++#define SIGURG 23
++#define SIGXCPU 24
++#define SIGXFSZ 25
++#define SIGVTALRM 26
++#define SIGPROF 27
++#define SIGWINCH 28
++#define SIGIO 29
++#define SIGPOLL SIGIO
++/*
++#define SIGLOST 29
++*/
++#define SIGPWR 30
++#define SIGSYS 31
++#define SIGUNUSED 31
++
++/* These should not be considered constants from userland. */
++#define SIGRTMIN 32
++#define SIGRTMAX (_NSIG-1)
++
++/*
++ * SA_FLAGS values:
++ *
++ * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
++ * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
++ * SA_SIGINFO deliver the signal with SIGINFO structs
++ * SA_ONSTACK indicates that a registered stack_t will be used.
++ * SA_RESTART flag to get restarting signals (which were the default long ago)
++ * SA_NODEFER prevents the current signal from being masked in the handler.
++ * SA_RESETHAND clears the handler when the signal is delivered.
++ *
++ * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
++ * Unix names RESETHAND and NODEFER respectively.
++ */
++#define SA_NOCLDSTOP 0x00000001
++#define SA_NOCLDWAIT 0x00000002
++#define SA_SIGINFO 0x00000004
++#define SA_RESTORER 0x04000000
++#define SA_ONSTACK 0x08000000
++#define SA_RESTART 0x10000000
++#define SA_NODEFER 0x40000000
++#define SA_RESETHAND 0x80000000
++
++#define SA_NOMASK SA_NODEFER
++#define SA_ONESHOT SA_RESETHAND
++
++/*
++ * sigaltstack controls
++ */
++#define SS_ONSTACK 1
++#define SS_DISABLE 2
++
++#define MINSIGSTKSZ 2048
++#define SIGSTKSZ 8192
++
++#include <asm-generic/signal.h>
++
++#ifdef __KERNEL__
++struct old_sigaction {
++ __sighandler_t sa_handler;
++ old_sigset_t sa_mask;
++ unsigned long sa_flags;
++ __sigrestore_t sa_restorer;
++};
++
++struct sigaction {
++ __sighandler_t sa_handler;
++ unsigned long sa_flags;
++ __sigrestore_t sa_restorer;
++ sigset_t sa_mask; /* mask last for extensibility */
++};
++
++struct k_sigaction {
++ struct sigaction sa;
++};
++#else
++/* Here we must cater to libcs that poke about in kernel headers. */
++
++struct sigaction {
++ union {
++ __sighandler_t _sa_handler;
++ void (*_sa_sigaction)(int, struct siginfo *, void *);
++ } _u;
++ sigset_t sa_mask;
++ unsigned long sa_flags;
++ void (*sa_restorer)(void);
++};
++
++#define sa_handler _u._sa_handler
++#define sa_sigaction _u._sa_sigaction
++
++#endif /* __KERNEL__ */
++
++typedef struct sigaltstack {
++ void __user *ss_sp;
++ int ss_flags;
++ size_t ss_size;
++} stack_t;
++
++#ifdef __KERNEL__
++
++#include <asm/sigcontext.h>
++#undef __HAVE_ARCH_SIG_BITOPS
++
++#define ptrace_signal_deliver(regs, cookie) do { } while (0)
++
++#endif /* __KERNEL__ */
++
++#endif
+Index: linux-2.6.18-avr32/include/asm-avr32/socket.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/socket.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,53 @@
++#ifndef __ASM_AVR32_SOCKET_H
++#define __ASM_AVR32_SOCKET_H
++
++#include <asm/sockios.h>
++
++/* For setsockopt(2) */
++#define SOL_SOCKET 1
++
++#define SO_DEBUG 1
++#define SO_REUSEADDR 2
++#define SO_TYPE 3
++#define SO_ERROR 4
++#define SO_DONTROUTE 5
++#define SO_BROADCAST 6
++#define SO_SNDBUF 7
++#define SO_RCVBUF 8
++#define SO_SNDBUFFORCE 32
++#define SO_RCVBUFFORCE 33
++#define SO_KEEPALIVE 9
++#define SO_OOBINLINE 10
++#define SO_NO_CHECK 11
++#define SO_PRIORITY 12
++#define SO_LINGER 13
++#define SO_BSDCOMPAT 14
++/* To add :#define SO_REUSEPORT 15 */
++#define SO_PASSCRED 16
++#define SO_PEERCRED 17
++#define SO_RCVLOWAT 18
++#define SO_SNDLOWAT 19
++#define SO_RCVTIMEO 20
++#define SO_SNDTIMEO 21
++
++/* Security levels - as per NRL IPv6 - don't actually do anything */
++#define SO_SECURITY_AUTHENTICATION 22
++#define SO_SECURITY_ENCRYPTION_TRANSPORT 23
++#define SO_SECURITY_ENCRYPTION_NETWORK 24
++
++#define SO_BINDTODEVICE 25
++
++/* Socket filtering */
++#define SO_ATTACH_FILTER 26
++#define SO_DETACH_FILTER 27
++
++#define SO_PEERNAME 28
++#define SO_TIMESTAMP 29
++#define SCM_TIMESTAMP SO_TIMESTAMP
++
++#define SO_ACCEPTCONN 30
++
++#define SO_PEERSEC 31
++#define SO_PASSSEC 34
++
++#endif /* __ASM_AVR32_SOCKET_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/sockios.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/sockios.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#ifndef __ASM_AVR32_SOCKIOS_H
++#define __ASM_AVR32_SOCKIOS_H
++
++/* Socket-level I/O control calls. */
++#define FIOSETOWN 0x8901
++#define SIOCSPGRP 0x8902
++#define FIOGETOWN 0x8903
++#define SIOCGPGRP 0x8904
++#define SIOCATMARK 0x8905
++#define SIOCGSTAMP 0x8906 /* Get stamp */
++
++#endif /* __ASM_AVR32_SOCKIOS_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/stat.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/stat.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,79 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_STAT_H
++#define __ASM_AVR32_STAT_H
++
++struct __old_kernel_stat {
++ unsigned short st_dev;
++ unsigned short st_ino;
++ unsigned short st_mode;
++ unsigned short st_nlink;
++ unsigned short st_uid;
++ unsigned short st_gid;
++ unsigned short st_rdev;
++ unsigned long st_size;
++ unsigned long st_atime;
++ unsigned long st_mtime;
++ unsigned long st_ctime;
++};
++
++struct stat {
++ unsigned long st_dev;
++ unsigned long st_ino;
++ unsigned short st_mode;
++ unsigned short st_nlink;
++ unsigned short st_uid;
++ unsigned short st_gid;
++ unsigned long st_rdev;
++ unsigned long st_size;
++ unsigned long st_blksize;
++ unsigned long st_blocks;
++ unsigned long st_atime;
++ unsigned long st_atime_nsec;
++ unsigned long st_mtime;
++ unsigned long st_mtime_nsec;
++ unsigned long st_ctime;
++ unsigned long st_ctime_nsec;
++ unsigned long __unused4;
++ unsigned long __unused5;
++};
++
++#define STAT_HAVE_NSEC 1
++
++struct stat64 {
++ unsigned long long st_dev;
++
++ unsigned long long st_ino;
++ unsigned int st_mode;
++ unsigned int st_nlink;
++
++ unsigned long st_uid;
++ unsigned long st_gid;
++
++ unsigned long long st_rdev;
++
++ long long st_size;
++ unsigned long __pad1; /* align 64-bit st_blocks */
++ unsigned long st_blksize;
++
++ unsigned long long st_blocks; /* Number 512-byte blocks allocated. */
++
++ unsigned long st_atime;
++ unsigned long st_atime_nsec;
++
++ unsigned long st_mtime;
++ unsigned long st_mtime_nsec;
++
++ unsigned long st_ctime;
++ unsigned long st_ctime_nsec;
++
++ unsigned long __unused1;
++ unsigned long __unused2;
++};
++
++#endif /* __ASM_AVR32_STAT_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/statfs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/statfs.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_STATFS_H
++#define __ASM_AVR32_STATFS_H
++
++#include <asm-generic/statfs.h>
++
++#endif /* __ASM_AVR32_STATFS_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/string.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/string.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,17 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_STRING_H
++#define __ASM_AVR32_STRING_H
++
++#define __HAVE_ARCH_MEMSET
++extern void *memset(void *b, int c, size_t len);
++
++#define __HAVE_ARCH_MEMCPY
++extern void *memcpy(void *to, const void *from, size_t len);
++
++#endif /* __ASM_AVR32_STRING_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/sysreg.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/sysreg.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,332 @@
++/*
++ * AVR32 System Registers
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_SYSREG_H__
++#define __ASM_AVR32_SYSREG_H__
++
++/* sysreg register offsets */
++#define SYSREG_SR 0x0000
++#define SYSREG_EVBA 0x0004
++#define SYSREG_ACBA 0x0008
++#define SYSREG_CPUCR 0x000c
++#define SYSREG_ECR 0x0010
++#define SYSREG_RSR_SUP 0x0014
++#define SYSREG_RSR_INT0 0x0018
++#define SYSREG_RSR_INT1 0x001c
++#define SYSREG_RSR_INT2 0x0020
++#define SYSREG_RSR_INT3 0x0024
++#define SYSREG_RSR_EX 0x0028
++#define SYSREG_RSR_NMI 0x002c
++#define SYSREG_RSR_DBG 0x0030
++#define SYSREG_RAR_SUP 0x0034
++#define SYSREG_RAR_INT0 0x0038
++#define SYSREG_RAR_INT1 0x003c
++#define SYSREG_RAR_INT2 0x0040
++#define SYSREG_RAR_INT3 0x0044
++#define SYSREG_RAR_EX 0x0048
++#define SYSREG_RAR_NMI 0x004c
++#define SYSREG_RAR_DBG 0x0050
++#define SYSREG_JECR 0x0054
++#define SYSREG_JOSP 0x0058
++#define SYSREG_JAVA_LV0 0x005c
++#define SYSREG_JAVA_LV1 0x0060
++#define SYSREG_JAVA_LV2 0x0064
++#define SYSREG_JAVA_LV3 0x0068
++#define SYSREG_JAVA_LV4 0x006c
++#define SYSREG_JAVA_LV5 0x0070
++#define SYSREG_JAVA_LV6 0x0074
++#define SYSREG_JAVA_LV7 0x0078
++#define SYSREG_JTBA 0x007c
++#define SYSREG_JBCR 0x0080
++#define SYSREG_CONFIG0 0x0100
++#define SYSREG_CONFIG1 0x0104
++#define SYSREG_COUNT 0x0108
++#define SYSREG_COMPARE 0x010c
++#define SYSREG_TLBEHI 0x0110
++#define SYSREG_TLBELO 0x0114
++#define SYSREG_PTBR 0x0118
++#define SYSREG_TLBEAR 0x011c
++#define SYSREG_MMUCR 0x0120
++#define SYSREG_TLBARLO 0x0124
++#define SYSREG_TLBARHI 0x0128
++#define SYSREG_PCCNT 0x012c
++#define SYSREG_PCNT0 0x0130
++#define SYSREG_PCNT1 0x0134
++#define SYSREG_PCCR 0x0138
++#define SYSREG_BEAR 0x013c
++
++/* Bitfields in SR */
++#define SYSREG_SR_C_OFFSET 0
++#define SYSREG_SR_C_SIZE 1
++#define SYSREG_Z_OFFSET 1
++#define SYSREG_Z_SIZE 1
++#define SYSREG_SR_N_OFFSET 2
++#define SYSREG_SR_N_SIZE 1
++#define SYSREG_SR_V_OFFSET 3
++#define SYSREG_SR_V_SIZE 1
++#define SYSREG_Q_OFFSET 4
++#define SYSREG_Q_SIZE 1
++#define SYSREG_GM_OFFSET 16
++#define SYSREG_GM_SIZE 1
++#define SYSREG_I0M_OFFSET 17
++#define SYSREG_I0M_SIZE 1
++#define SYSREG_I1M_OFFSET 18
++#define SYSREG_I1M_SIZE 1
++#define SYSREG_I2M_OFFSET 19
++#define SYSREG_I2M_SIZE 1
++#define SYSREG_I3M_OFFSET 20
++#define SYSREG_I3M_SIZE 1
++#define SYSREG_EM_OFFSET 21
++#define SYSREG_EM_SIZE 1
++#define SYSREG_M0_OFFSET 22
++#define SYSREG_M0_SIZE 1
++#define SYSREG_M1_OFFSET 23
++#define SYSREG_M1_SIZE 1
++#define SYSREG_M2_OFFSET 24
++#define SYSREG_M2_SIZE 1
++#define SYSREG_SR_D_OFFSET 26
++#define SYSREG_SR_D_SIZE 1
++#define SYSREG_DM_OFFSET 27
++#define SYSREG_DM_SIZE 1
++#define SYSREG_SR_J_OFFSET 28
++#define SYSREG_SR_J_SIZE 1
++#define SYSREG_R_OFFSET 29
++#define SYSREG_R_SIZE 1
++#define SYSREG_H_OFFSET 30
++#define SYSREG_H_SIZE 1
++
++/* Bitfields in EVBA */
++
++/* Bitfields in ACBA */
++
++/* Bitfields in CPUCR */
++#define SYSREG_BI_OFFSET 0
++#define SYSREG_BI_SIZE 1
++#define SYSREG_BE_OFFSET 1
++#define SYSREG_BE_SIZE 1
++#define SYSREG_FE_OFFSET 2
++#define SYSREG_FE_SIZE 1
++#define SYSREG_RE_OFFSET 3
++#define SYSREG_RE_SIZE 1
++#define SYSREG_IBE_OFFSET 4
++#define SYSREG_IBE_SIZE 1
++#define SYSREG_IEE_OFFSET 5
++#define SYSREG_IEE_SIZE 1
++
++/* Bitfields in ECR */
++#define SYSREG_ECR_OFFSET 0
++#define SYSREG_ECR_SIZE 32
++
++/* Bitfields in RSR_SUP */
++
++/* Bitfields in RSR_INT0 */
++
++/* Bitfields in RSR_INT1 */
++
++/* Bitfields in RSR_INT2 */
++
++/* Bitfields in RSR_INT3 */
++
++/* Bitfields in RSR_EX */
++
++/* Bitfields in RSR_NMI */
++
++/* Bitfields in RSR_DBG */
++
++/* Bitfields in RAR_SUP */
++
++/* Bitfields in RAR_INT0 */
++
++/* Bitfields in RAR_INT1 */
++
++/* Bitfields in RAR_INT2 */
++
++/* Bitfields in RAR_INT3 */
++
++/* Bitfields in RAR_EX */
++
++/* Bitfields in RAR_NMI */
++
++/* Bitfields in RAR_DBG */
++
++/* Bitfields in JECR */
++
++/* Bitfields in JOSP */
++
++/* Bitfields in JAVA_LV0 */
++
++/* Bitfields in JAVA_LV1 */
++
++/* Bitfields in JAVA_LV2 */
++
++/* Bitfields in JAVA_LV3 */
++
++/* Bitfields in JAVA_LV4 */
++
++/* Bitfields in JAVA_LV5 */
++
++/* Bitfields in JAVA_LV6 */
++
++/* Bitfields in JAVA_LV7 */
++
++/* Bitfields in JTBA */
++
++/* Bitfields in JBCR */
++
++/* Bitfields in CONFIG0 */
++#define SYSREG_CONFIG0_D_OFFSET 1
++#define SYSREG_CONFIG0_D_SIZE 1
++#define SYSREG_CONFIG0_S_OFFSET 2
++#define SYSREG_CONFIG0_S_SIZE 1
++#define SYSREG_O_OFFSET 3
++#define SYSREG_O_SIZE 1
++#define SYSREG_P_OFFSET 4
++#define SYSREG_P_SIZE 1
++#define SYSREG_CONFIG0_J_OFFSET 5
++#define SYSREG_CONFIG0_J_SIZE 1
++#define SYSREG_F_OFFSET 6
++#define SYSREG_F_SIZE 1
++#define SYSREG_MMUT_OFFSET 7
++#define SYSREG_MMUT_SIZE 3
++#define SYSREG_AR_OFFSET 10
++#define SYSREG_AR_SIZE 3
++#define SYSREG_AT_OFFSET 13
++#define SYSREG_AT_SIZE 3
++#define SYSREG_PROCESSORREVISION_OFFSET 16
++#define SYSREG_PROCESSORREVISION_SIZE 8
++#define SYSREG_PROCESSORID_OFFSET 24
++#define SYSREG_PROCESSORID_SIZE 8
++
++/* Bitfields in CONFIG1 */
++#define SYSREG_DASS_OFFSET 0
++#define SYSREG_DASS_SIZE 3
++#define SYSREG_DLSZ_OFFSET 3
++#define SYSREG_DLSZ_SIZE 3
++#define SYSREG_DSET_OFFSET 6
++#define SYSREG_DSET_SIZE 4
++#define SYSREG_IASS_OFFSET 10
++#define SYSREG_IASS_SIZE 2
++#define SYSREG_ILSZ_OFFSET 13
++#define SYSREG_ILSZ_SIZE 3
++#define SYSREG_ISET_OFFSET 16
++#define SYSREG_ISET_SIZE 4
++#define SYSREG_DMMUSZ_OFFSET 20
++#define SYSREG_DMMUSZ_SIZE 6
++#define SYSREG_IMMUSZ_OFFSET 26
++#define SYSREG_IMMUSZ_SIZE 6
++
++/* Bitfields in COUNT */
++
++/* Bitfields in COMPARE */
++
++/* Bitfields in TLBEHI */
++#define SYSREG_ASID_OFFSET 0
++#define SYSREG_ASID_SIZE 8
++#define SYSREG_TLBEHI_I_OFFSET 8
++#define SYSREG_TLBEHI_I_SIZE 1
++#define SYSREG_TLBEHI_V_OFFSET 9
++#define SYSREG_TLBEHI_V_SIZE 1
++#define SYSREG_VPN_OFFSET 10
++#define SYSREG_VPN_SIZE 22
++
++/* Bitfields in TLBELO */
++#define SYSREG_W_OFFSET 0
++#define SYSREG_W_SIZE 1
++#define SYSREG_TLBELO_D_OFFSET 1
++#define SYSREG_TLBELO_D_SIZE 1
++#define SYSREG_SZ_OFFSET 2
++#define SYSREG_SZ_SIZE 2
++#define SYSREG_AP_OFFSET 4
++#define SYSREG_AP_SIZE 3
++#define SYSREG_B_OFFSET 7
++#define SYSREG_B_SIZE 1
++#define SYSREG_G_OFFSET 8
++#define SYSREG_G_SIZE 1
++#define SYSREG_TLBELO_C_OFFSET 9
++#define SYSREG_TLBELO_C_SIZE 1
++#define SYSREG_PFN_OFFSET 10
++#define SYSREG_PFN_SIZE 22
++
++/* Bitfields in PTBR */
++
++/* Bitfields in TLBEAR */
++
++/* Bitfields in MMUCR */
++#define SYSREG_E_OFFSET 0
++#define SYSREG_E_SIZE 1
++#define SYSREG_M_OFFSET 1
++#define SYSREG_M_SIZE 1
++#define SYSREG_MMUCR_I_OFFSET 2
++#define SYSREG_MMUCR_I_SIZE 1
++#define SYSREG_MMUCR_N_OFFSET 3
++#define SYSREG_MMUCR_N_SIZE 1
++#define SYSREG_MMUCR_S_OFFSET 4
++#define SYSREG_MMUCR_S_SIZE 1
++#define SYSREG_DLA_OFFSET 8
++#define SYSREG_DLA_SIZE 6
++#define SYSREG_DRP_OFFSET 14
++#define SYSREG_DRP_SIZE 6
++#define SYSREG_ILA_OFFSET 20
++#define SYSREG_ILA_SIZE 6
++#define SYSREG_IRP_OFFSET 26
++#define SYSREG_IRP_SIZE 6
++
++/* Bitfields in TLBARLO */
++
++/* Bitfields in TLBARHI */
++
++/* Bitfields in PCCNT */
++
++/* Bitfields in PCNT0 */
++
++/* Bitfields in PCNT1 */
++
++/* Bitfields in PCCR */
++
++/* Bitfields in BEAR */
++
++/* Constants for ECR */
++#define ECR_UNRECOVERABLE 0
++#define ECR_TLB_MULTIPLE 1
++#define ECR_BUS_ERROR_WRITE 2
++#define ECR_BUS_ERROR_READ 3
++#define ECR_NMI 4
++#define ECR_ADDR_ALIGN_X 5
++#define ECR_PROTECTION_X 6
++#define ECR_DEBUG 7
++#define ECR_ILLEGAL_OPCODE 8
++#define ECR_UNIMPL_INSTRUCTION 9
++#define ECR_PRIVILEGE_VIOLATION 10
++#define ECR_FPE 11
++#define ECR_COPROC_ABSENT 12
++#define ECR_ADDR_ALIGN_R 13
++#define ECR_ADDR_ALIGN_W 14
++#define ECR_PROTECTION_R 15
++#define ECR_PROTECTION_W 16
++#define ECR_DTLB_MODIFIED 17
++#define ECR_TLB_MISS_X 20
++#define ECR_TLB_MISS_R 24
++#define ECR_TLB_MISS_W 28
++
++/* Bit manipulation macros */
++#define SYSREG_BIT(name) (1 << SYSREG_##name##_OFFSET)
++#define SYSREG_BF(name,value) (((value) & ((1 << SYSREG_##name##_SIZE) - 1)) << SYSREG_##name##_OFFSET)
++#define SYSREG_BFEXT(name,value) (((value) >> SYSREG_##name##_OFFSET) & ((1 << SYSREG_##name##_SIZE) - 1))
++#define SYSREG_BFINS(name,value,old) (((old) & ~(((1 << SYSREG_##name##_SIZE) - 1) << SYSREG_##name##_OFFSET)) | SYSREG_BF(name,value))
++
++#ifdef __CHECKER__
++extern unsigned long __builtin_mfsr(unsigned long reg);
++extern void __builtin_mtsr(unsigned long reg, unsigned long value);
++#endif
++
++/* Register access macros */
++#define sysreg_read(reg) __builtin_mfsr(SYSREG_##reg)
++#define sysreg_write(reg, value) __builtin_mtsr(SYSREG_##reg, value)
++
++#endif /* __ASM_AVR32_SYSREG_H__ */
+Index: linux-2.6.18-avr32/include/asm-avr32/system.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/system.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,155 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_SYSTEM_H
++#define __ASM_AVR32_SYSTEM_H
++
++#include <linux/compiler.h>
++#include <linux/types.h>
++
++#include <asm/ptrace.h>
++#include <asm/sysreg.h>
++
++#define xchg(ptr,x) \
++ ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
++
++#define nop() asm volatile("nop")
++
++#define mb() asm volatile("" : : : "memory")
++#define rmb() mb()
++#define wmb() asm volatile("sync 0" : : : "memory")
++#define read_barrier_depends() do { } while(0)
++#define set_mb(var, value) do { var = value; mb(); } while(0)
++
++/*
++ * Help PathFinder and other Nexus-compliant debuggers keep track of
++ * the current PID by emitting an Ownership Trace Message each time we
++ * switch task.
++ */
++#ifdef CONFIG_OWNERSHIP_TRACE
++#include <asm/ocd.h>
++#define finish_arch_switch(prev) \
++ do { \
++ __mtdr(DBGREG_PID, prev->pid); \
++ __mtdr(DBGREG_PID, current->pid); \
++ } while(0)
++#endif
++
++/*
++ * switch_to(prev, next, last) should switch from task `prev' to task
++ * `next'. `prev' will never be the same as `next'.
++ *
++ * We just delegate everything to the __switch_to assembly function,
++ * which is implemented in arch/avr32/kernel/switch_to.S
++ *
++ * mb() tells GCC not to cache `current' across this call.
++ */
++struct cpu_context;
++struct task_struct;
++extern struct task_struct *__switch_to(struct task_struct *,
++ struct cpu_context *,
++ struct cpu_context *);
++#define switch_to(prev, next, last) \
++ do { \
++ last = __switch_to(prev, &prev->thread.cpu_context + 1, \
++ &next->thread.cpu_context); \
++ } while (0)
++
++#ifdef CONFIG_SMP
++# error "The AVR32 port does not support SMP"
++#else
++# define smp_mb() barrier()
++# define smp_rmb() barrier()
++# define smp_wmb() barrier()
++# define smp_read_barrier_depends() do { } while(0)
++#endif
++
++#include <linux/irqflags.h>
++
++extern void __xchg_called_with_bad_pointer(void);
++
++#ifdef __CHECKER__
++extern unsigned long __builtin_xchg(void *ptr, unsigned long x);
++#endif
++
++#define xchg_u32(val, m) __builtin_xchg((void *)m, val)
++
++static inline unsigned long __xchg(unsigned long x,
++ volatile void *ptr,
++ int size)
++{
++ switch(size) {
++ case 4:
++ return xchg_u32(x, ptr);
++ default:
++ __xchg_called_with_bad_pointer();
++ return x;
++ }
++}
++
++static inline unsigned long __cmpxchg_u32(volatile int *m, unsigned long old,
++ unsigned long new)
++{
++ __u32 ret;
++
++ asm volatile(
++ "1: ssrf 5\n"
++ " ld.w %[ret], %[m]\n"
++ " cp.w %[ret], %[old]\n"
++ " brne 2f\n"
++ " stcond %[m], %[new]\n"
++ " brne 1b\n"
++ "2:\n"
++ : [ret] "=&r"(ret), [m] "=m"(*m)
++ : "m"(m), [old] "ir"(old), [new] "r"(new)
++ : "memory", "cc");
++ return ret;
++}
++
++extern unsigned long __cmpxchg_u64_unsupported_on_32bit_kernels(
++ volatile int * m, unsigned long old, unsigned long new);
++#define __cmpxchg_u64 __cmpxchg_u64_unsupported_on_32bit_kernels
++
++/* This function doesn't exist, so you'll get a linker error
++ if something tries to do an invalid cmpxchg(). */
++extern void __cmpxchg_called_with_bad_pointer(void);
++
++#define __HAVE_ARCH_CMPXCHG 1
++
++static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
++ unsigned long new, int size)
++{
++ switch (size) {
++ case 4:
++ return __cmpxchg_u32(ptr, old, new);
++ case 8:
++ return __cmpxchg_u64(ptr, old, new);
++ }
++
++ __cmpxchg_called_with_bad_pointer();
++ return old;
++}
++
++#define cmpxchg(ptr, old, new) \
++ ((typeof(*(ptr)))__cmpxchg((ptr), (unsigned long)(old), \
++ (unsigned long)(new), \
++ sizeof(*(ptr))))
++
++struct pt_regs;
++extern void __die(const char *, struct pt_regs *, unsigned long,
++ const char *, const char *, unsigned long);
++extern void __die_if_kernel(const char *, struct pt_regs *, unsigned long,
++ const char *, const char *, unsigned long);
++
++#define die(msg, regs, err) \
++ __die(msg, regs, err, __FILE__ ":", __FUNCTION__, __LINE__)
++#define die_if_kernel(msg, regs, err) \
++ __die_if_kernel(msg, regs, err, __FILE__ ":", __FUNCTION__, __LINE__)
++
++#define arch_align_stack(x) (x)
++
++#endif /* __ASM_AVR32_SYSTEM_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/termbits.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/termbits.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,173 @@
++#ifndef __ASM_AVR32_TERMBITS_H
++#define __ASM_AVR32_TERMBITS_H
++
++#include <linux/posix_types.h>
++
++typedef unsigned char cc_t;
++typedef unsigned int speed_t;
++typedef unsigned int tcflag_t;
++
++#define NCCS 19
++struct termios {
++ tcflag_t c_iflag; /* input mode flags */
++ tcflag_t c_oflag; /* output mode flags */
++ tcflag_t c_cflag; /* control mode flags */
++ tcflag_t c_lflag; /* local mode flags */
++ cc_t c_line; /* line discipline */
++ cc_t c_cc[NCCS]; /* control characters */
++};
++
++/* c_cc characters */
++#define VINTR 0
++#define VQUIT 1
++#define VERASE 2
++#define VKILL 3
++#define VEOF 4
++#define VTIME 5
++#define VMIN 6
++#define VSWTC 7
++#define VSTART 8
++#define VSTOP 9
++#define VSUSP 10
++#define VEOL 11
++#define VREPRINT 12
++#define VDISCARD 13
++#define VWERASE 14
++#define VLNEXT 15
++#define VEOL2 16
++
++/* c_iflag bits */
++#define IGNBRK 0000001
++#define BRKINT 0000002
++#define IGNPAR 0000004
++#define PARMRK 0000010
++#define INPCK 0000020
++#define ISTRIP 0000040
++#define INLCR 0000100
++#define IGNCR 0000200
++#define ICRNL 0000400
++#define IUCLC 0001000
++#define IXON 0002000
++#define IXANY 0004000
++#define IXOFF 0010000
++#define IMAXBEL 0020000
++#define IUTF8 0040000
++
++/* c_oflag bits */
++#define OPOST 0000001
++#define OLCUC 0000002
++#define ONLCR 0000004
++#define OCRNL 0000010
++#define ONOCR 0000020
++#define ONLRET 0000040
++#define OFILL 0000100
++#define OFDEL 0000200
++#define NLDLY 0000400
++#define NL0 0000000
++#define NL1 0000400
++#define CRDLY 0003000
++#define CR0 0000000
++#define CR1 0001000
++#define CR2 0002000
++#define CR3 0003000
++#define TABDLY 0014000
++#define TAB0 0000000
++#define TAB1 0004000
++#define TAB2 0010000
++#define TAB3 0014000
++#define XTABS 0014000
++#define BSDLY 0020000
++#define BS0 0000000
++#define BS1 0020000
++#define VTDLY 0040000
++#define VT0 0000000
++#define VT1 0040000
++#define FFDLY 0100000
++#define FF0 0000000
++#define FF1 0100000
++
++/* c_cflag bit meaning */
++#define CBAUD 0010017
++#define B0 0000000 /* hang up */
++#define B50 0000001
++#define B75 0000002
++#define B110 0000003
++#define B134 0000004
++#define B150 0000005
++#define B200 0000006
++#define B300 0000007
++#define B600 0000010
++#define B1200 0000011
++#define B1800 0000012
++#define B2400 0000013
++#define B4800 0000014
++#define B9600 0000015
++#define B19200 0000016
++#define B38400 0000017
++#define EXTA B19200
++#define EXTB B38400
++#define CSIZE 0000060
++#define CS5 0000000
++#define CS6 0000020
++#define CS7 0000040
++#define CS8 0000060
++#define CSTOPB 0000100
++#define CREAD 0000200
++#define PARENB 0000400
++#define PARODD 0001000
++#define HUPCL 0002000
++#define CLOCAL 0004000
++#define CBAUDEX 0010000
++#define B57600 0010001
++#define B115200 0010002
++#define B230400 0010003
++#define B460800 0010004
++#define B500000 0010005
++#define B576000 0010006
++#define B921600 0010007
++#define B1000000 0010010
++#define B1152000 0010011
++#define B1500000 0010012
++#define B2000000 0010013
++#define B2500000 0010014
++#define B3000000 0010015
++#define B3500000 0010016
++#define B4000000 0010017
++#define CIBAUD 002003600000 /* input baud rate (not used) */
++#define CMSPAR 010000000000 /* mark or space (stick) parity */
++#define CRTSCTS 020000000000 /* flow control */
++
++/* c_lflag bits */
++#define ISIG 0000001
++#define ICANON 0000002
++#define XCASE 0000004
++#define ECHO 0000010
++#define ECHOE 0000020
++#define ECHOK 0000040
++#define ECHONL 0000100
++#define NOFLSH 0000200
++#define TOSTOP 0000400
++#define ECHOCTL 0001000
++#define ECHOPRT 0002000
++#define ECHOKE 0004000
++#define FLUSHO 0010000
++#define PENDIN 0040000
++#define IEXTEN 0100000
++
++/* tcflow() and TCXONC use these */
++#define TCOOFF 0
++#define TCOON 1
++#define TCIOFF 2
++#define TCION 3
++
++/* tcflush() and TCFLSH use these */
++#define TCIFLUSH 0
++#define TCOFLUSH 1
++#define TCIOFLUSH 2
++
++/* tcsetattr uses these */
++#define TCSANOW 0
++#define TCSADRAIN 1
++#define TCSAFLUSH 2
++
++#endif /* __ASM_AVR32_TERMBITS_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/termios.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/termios.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,80 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_TERMIOS_H
++#define __ASM_AVR32_TERMIOS_H
++
++#include <asm/termbits.h>
++#include <asm/ioctls.h>
++
++struct winsize {
++ unsigned short ws_row;
++ unsigned short ws_col;
++ unsigned short ws_xpixel;
++ unsigned short ws_ypixel;
++};
++
++#define NCC 8
++struct termio {
++ unsigned short c_iflag; /* input mode flags */
++ unsigned short c_oflag; /* output mode flags */
++ unsigned short c_cflag; /* control mode flags */
++ unsigned short c_lflag; /* local mode flags */
++ unsigned char c_line; /* line discipline */
++ unsigned char c_cc[NCC]; /* control characters */
++};
++
++/* modem lines */
++#define TIOCM_LE 0x001
++#define TIOCM_DTR 0x002
++#define TIOCM_RTS 0x004
++#define TIOCM_ST 0x008
++#define TIOCM_SR 0x010
++#define TIOCM_CTS 0x020
++#define TIOCM_CAR 0x040
++#define TIOCM_RNG 0x080
++#define TIOCM_DSR 0x100
++#define TIOCM_CD TIOCM_CAR
++#define TIOCM_RI TIOCM_RNG
++#define TIOCM_OUT1 0x2000
++#define TIOCM_OUT2 0x4000
++#define TIOCM_LOOP 0x8000
++
++/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
++
++/* line disciplines */
++#define N_TTY 0
++#define N_SLIP 1
++#define N_MOUSE 2
++#define N_PPP 3
++#define N_STRIP 4
++#define N_AX25 5
++#define N_X25 6 /* X.25 async */
++#define N_6PACK 7
++#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */
++#define N_R3964 9 /* Reserved for Simatic R3964 module */
++#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */
++#define N_IRDA 11 /* Linux IR - http://irda.sourceforge.net/ */
++#define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards about SMS messages */
++#define N_HDLC 13 /* synchronous HDLC */
++#define N_SYNC_PPP 14 /* synchronous PPP */
++#define N_HCI 15 /* Bluetooth HCI UART */
++
++#ifdef __KERNEL__
++/* intr=^C quit=^\ erase=del kill=^U
++ eof=^D vtime=\0 vmin=\1 sxtc=\0
++ start=^Q stop=^S susp=^Z eol=\0
++ reprint=^R discard=^U werase=^W lnext=^V
++ eol2=\0
++*/
++#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
++
++#include <asm-generic/termios.h>
++
++#endif /* __KERNEL__ */
++
++#endif /* __ASM_AVR32_TERMIOS_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/thread_info.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/thread_info.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,106 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_THREAD_INFO_H
++#define __ASM_AVR32_THREAD_INFO_H
++
++#include <asm/page.h>
++
++#define THREAD_SIZE_ORDER 1
++#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
++
++#ifndef __ASSEMBLY__
++#include <asm/types.h>
++
++struct task_struct;
++struct exec_domain;
++
++struct thread_info {
++ struct task_struct *task; /* main task structure */
++ struct exec_domain *exec_domain; /* execution domain */
++ unsigned long flags; /* low level flags */
++ __u32 cpu;
++ __s32 preempt_count; /* 0 => preemptable, <0 => BUG */
++ struct restart_block restart_block;
++ __u8 supervisor_stack[0];
++};
++
++#define INIT_THREAD_INFO(tsk) \
++{ \
++ .task = &tsk, \
++ .exec_domain = &default_exec_domain, \
++ .flags = 0, \
++ .cpu = 0, \
++ .preempt_count = 1, \
++ .restart_block = { \
++ .fn = do_no_restart_syscall \
++ } \
++}
++
++#define init_thread_info (init_thread_union.thread_info)
++#define init_stack (init_thread_union.stack)
++
++/*
++ * Get the thread information struct from C.
++ * We do the usual trick and use the lower end of the stack for this
++ */
++static inline struct thread_info *current_thread_info(void)
++{
++ unsigned long addr = ~(THREAD_SIZE - 1);
++
++ asm("and %0, sp" : "=r"(addr) : "0"(addr));
++ return (struct thread_info *)addr;
++}
++
++/* thread information allocation */
++#define alloc_thread_info(ti) \
++ ((struct thread_info *) __get_free_pages(GFP_KERNEL, THREAD_SIZE_ORDER))
++#define free_thread_info(ti) free_pages((unsigned long)(ti), 1)
++#define get_thread_info(ti) get_task_struct((ti)->task)
++#define put_thread_info(ti) put_task_struct((ti)->task)
++
++#endif /* !__ASSEMBLY__ */
++
++#define PREEMPT_ACTIVE 0x40000000
++
++/*
++ * Thread information flags
++ * - these are process state flags that various assembly files may need to access
++ * - pending work-to-be-done flags are in LSW
++ * - other flags in MSW
++ */
++#define TIF_SYSCALL_TRACE 0 /* syscall trace active */
++#define TIF_NOTIFY_RESUME 1 /* resumption notification requested */
++#define TIF_SIGPENDING 2 /* signal pending */
++#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
++#define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling
++ TIF_NEED_RESCHED */
++#define TIF_BREAKPOINT 5 /* true if we should break after return */
++#define TIF_SINGLE_STEP 6 /* single step after next break */
++#define TIF_MEMDIE 7
++#define TIF_RESTORE_SIGMASK 8 /* restore signal mask in do_signal */
++#define TIF_USERSPACE 31 /* true if FS sets userspace */
++
++#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
++#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
++#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
++#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
++#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG)
++#define _TIF_BREAKPOINT (1 << TIF_BREAKPOINT)
++#define _TIF_SINGLE_STEP (1 << TIF_SINGLE_STEP)
++#define _TIF_MEMDIE (1 << TIF_MEMDIE)
++#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK)
++
++/* XXX: These two masks must never span more than 16 bits! */
++/* work to do on interrupt/exception return */
++#define _TIF_WORK_MASK 0x0000013e
++/* work to do on any return to userspace */
++#define _TIF_ALLWORK_MASK 0x0000013f
++/* work to do on return from debug mode */
++#define _TIF_DBGWORK_MASK 0x0000017e
++
++#endif /* __ASM_AVR32_THREAD_INFO_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/timex.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/timex.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,40 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_TIMEX_H
++#define __ASM_AVR32_TIMEX_H
++
++/*
++ * This is the frequency of the timer used for Linux's timer interrupt.
++ * The value should be defined as accurate as possible or under certain
++ * circumstances Linux timekeeping might become inaccurate or fail.
++ *
++ * For many system the exact clockrate of the timer isn't known but due to
++ * the way this value is used we can get away with a wrong value as long
++ * as this value is:
++ *
++ * - a multiple of HZ
++ * - a divisor of the actual rate
++ *
++ * 500000 is a good such cheat value.
++ *
++ * The obscure number 1193182 is the same as used by the original i8254
++ * time in legacy PC hardware; the chip is never found in AVR32 systems.
++ */
++#define CLOCK_TICK_RATE 500000 /* Underlying HZ */
++
++typedef unsigned long cycles_t;
++
++static inline cycles_t get_cycles (void)
++{
++ return 0;
++}
++
++extern int read_current_timer(unsigned long *timer_value);
++#define ARCH_HAS_READ_CURRENT_TIMER 1
++
++#endif /* __ASM_AVR32_TIMEX_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/tlb.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/tlb.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,32 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_TLB_H
++#define __ASM_AVR32_TLB_H
++
++#define tlb_start_vma(tlb, vma) \
++ flush_cache_range(vma, vma->vm_start, vma->vm_end)
++
++#define tlb_end_vma(tlb, vma) \
++ flush_tlb_range(vma, vma->vm_start, vma->vm_end)
++
++#define __tlb_remove_tlb_entry(tlb, pte, address) do { } while(0)
++
++/*
++ * Flush whole TLB for MM
++ */
++#define tlb_flush(tlb) flush_tlb_mm((tlb)->mm)
++
++#include <asm-generic/tlb.h>
++
++/*
++ * For debugging purposes
++ */
++extern void show_dtlb_entry(unsigned int index);
++extern void dump_dtlb(void);
++
++#endif /* __ASM_AVR32_TLB_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/tlbflush.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/tlbflush.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,40 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_TLBFLUSH_H
++#define __ASM_AVR32_TLBFLUSH_H
++
++#include <asm/mmu.h>
++
++/*
++ * TLB flushing:
++ *
++ * - flush_tlb() flushes the current mm struct TLBs
++ * - flush_tlb_all() flushes all processes' TLB entries
++ * - flush_tlb_mm(mm) flushes the specified mm context TLBs
++ * - flush_tlb_page(vma, vmaddr) flushes one page
++ * - flush_tlb_range(vma, start, end) flushes a range of pages
++ * - flush_tlb_kernel_range(start, end) flushes a range of kernel pages
++ * - flush_tlb_pgtables(mm, start, end) flushes a range of page tables
++ */
++extern void flush_tlb(void);
++extern void flush_tlb_all(void);
++extern void flush_tlb_mm(struct mm_struct *mm);
++extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
++ unsigned long end);
++extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long page);
++extern void __flush_tlb_page(unsigned long asid, unsigned long page);
++
++static inline void flush_tlb_pgtables(struct mm_struct *mm,
++ unsigned long start, unsigned long end)
++{
++ /* Nothing to do */
++}
++
++extern void flush_tlb_kernel_range(unsigned long start, unsigned long end);
++
++#endif /* __ASM_AVR32_TLBFLUSH_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/topology.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/topology.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,6 @@
++#ifndef __ASM_AVR32_TOPOLOGY_H
++#define __ASM_AVR32_TOPOLOGY_H
++
++#include <asm-generic/topology.h>
++
++#endif /* __ASM_AVR32_TOPOLOGY_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/traps.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/traps.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,23 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_TRAPS_H
++#define __ASM_AVR32_TRAPS_H
++
++#include <linux/list.h>
++
++struct undef_hook {
++ struct list_head node;
++ u32 insn_mask;
++ u32 insn_val;
++ int (*fn)(struct pt_regs *regs, u32 insn);
++};
++
++void register_undef_hook(struct undef_hook *hook);
++void unregister_undef_hook(struct undef_hook *hook);
++
++#endif /* __ASM_AVR32_TRAPS_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/types.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/types.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,70 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_TYPES_H
++#define __ASM_AVR32_TYPES_H
++
++#ifndef __ASSEMBLY__
++
++typedef unsigned short umode_t;
++
++/*
++ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
++ * header files exported to user space
++ */
++typedef __signed__ char __s8;
++typedef unsigned char __u8;
++
++typedef __signed__ short __s16;
++typedef unsigned short __u16;
++
++typedef __signed__ int __s32;
++typedef unsigned int __u32;
++
++#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
++typedef __signed__ long long __s64;
++typedef unsigned long long __u64;
++#endif
++
++#endif /* __ASSEMBLY__ */
++
++/*
++ * These aren't exported outside the kernel to avoid name space clashes
++ */
++#ifdef __KERNEL__
++
++#define BITS_PER_LONG 32
++
++#ifndef __ASSEMBLY__
++
++typedef signed char s8;
++typedef unsigned char u8;
++
++typedef signed short s16;
++typedef unsigned short u16;
++
++typedef signed int s32;
++typedef unsigned int u32;
++
++typedef signed long long s64;
++typedef unsigned long long u64;
++
++/* Dma addresses are 32-bits wide. */
++
++typedef u32 dma_addr_t;
++
++#ifdef CONFIG_LBD
++typedef u64 sector_t;
++#define HAVE_SECTOR_T
++#endif
++
++#endif /* __ASSEMBLY__ */
++
++#endif /* __KERNEL__ */
++
++
++#endif /* __ASM_AVR32_TYPES_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/uaccess.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/uaccess.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,335 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_UACCESS_H
++#define __ASM_AVR32_UACCESS_H
++
++#include <linux/errno.h>
++#include <linux/sched.h>
++
++#define VERIFY_READ 0
++#define VERIFY_WRITE 1
++
++typedef struct {
++ unsigned int is_user_space;
++} mm_segment_t;
++
++/*
++ * The fs value determines whether argument validity checking should be
++ * performed or not. If get_fs() == USER_DS, checking is performed, with
++ * get_fs() == KERNEL_DS, checking is bypassed.
++ *
++ * For historical reasons (Data Segment Register?), these macros are misnamed.
++ */
++#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
++#define segment_eq(a,b) ((a).is_user_space == (b).is_user_space)
++
++#define USER_ADDR_LIMIT 0x80000000
++
++#define KERNEL_DS MAKE_MM_SEG(0)
++#define USER_DS MAKE_MM_SEG(1)
++
++#define get_ds() (KERNEL_DS)
++
++static inline mm_segment_t get_fs(void)
++{
++ return MAKE_MM_SEG(test_thread_flag(TIF_USERSPACE));
++}
++
++static inline void set_fs(mm_segment_t s)
++{
++ if (s.is_user_space)
++ set_thread_flag(TIF_USERSPACE);
++ else
++ clear_thread_flag(TIF_USERSPACE);
++}
++
++/*
++ * Test whether a block of memory is a valid user space address.
++ * Returns 0 if the range is valid, nonzero otherwise.
++ *
++ * We do the following checks:
++ * 1. Is the access from kernel space?
++ * 2. Does (addr + size) set the carry bit?
++ * 3. Is (addr + size) a negative number (i.e. >= 0x80000000)?
++ *
++ * If yes on the first check, access is granted.
++ * If no on any of the others, access is denied.
++ */
++#define __range_ok(addr, size) \
++ (test_thread_flag(TIF_USERSPACE) \
++ && (((unsigned long)(addr) >= 0x80000000) \
++ || ((unsigned long)(size) > 0x80000000) \
++ || (((unsigned long)(addr) + (unsigned long)(size)) > 0x80000000)))
++
++#define access_ok(type, addr, size) (likely(__range_ok(addr, size) == 0))
++
++static inline int
++verify_area(int type, const void __user *addr, unsigned long size)
++{
++ return access_ok(type, addr, size) ? 0 : -EFAULT;
++}
++
++/* Generic arbitrary sized copy. Return the number of bytes NOT copied */
++extern __kernel_size_t __copy_user(void *to, const void *from,
++ __kernel_size_t n);
++
++extern __kernel_size_t copy_to_user(void __user *to, const void *from,
++ __kernel_size_t n);
++extern __kernel_size_t copy_from_user(void *to, const void __user *from,
++ __kernel_size_t n);
++
++static inline __kernel_size_t __copy_to_user(void __user *to, const void *from,
++ __kernel_size_t n)
++{
++ return __copy_user((void __force *)to, from, n);
++}
++static inline __kernel_size_t __copy_from_user(void *to,
++ const void __user *from,
++ __kernel_size_t n)
++{
++ return __copy_user(to, (const void __force *)from, n);
++}
++
++#define __copy_to_user_inatomic __copy_to_user
++#define __copy_from_user_inatomic __copy_from_user
++
++/*
++ * put_user: - Write a simple value into user space.
++ * @x: Value to copy to user space.
++ * @ptr: Destination address, in user space.
++ *
++ * Context: User context only. This function may sleep.
++ *
++ * This macro copies a single simple value from kernel space to user
++ * space. It supports simple types like char and int, but not larger
++ * data types like structures or arrays.
++ *
++ * @ptr must have pointer-to-simple-variable type, and @x must be assignable
++ * to the result of dereferencing @ptr.
++ *
++ * Returns zero on success, or -EFAULT on error.
++ */
++#define put_user(x,ptr) \
++ __put_user_check((x),(ptr),sizeof(*(ptr)))
++
++/*
++ * get_user: - Get a simple variable from user space.
++ * @x: Variable to store result.
++ * @ptr: Source address, in user space.
++ *
++ * Context: User context only. This function may sleep.
++ *
++ * This macro copies a single simple variable from user space to kernel
++ * space. It supports simple types like char and int, but not larger
++ * data types like structures or arrays.
++ *
++ * @ptr must have pointer-to-simple-variable type, and the result of
++ * dereferencing @ptr must be assignable to @x without a cast.
++ *
++ * Returns zero on success, or -EFAULT on error.
++ * On error, the variable @x is set to zero.
++ */
++#define get_user(x,ptr) \
++ __get_user_check((x),(ptr),sizeof(*(ptr)))
++
++/*
++ * __put_user: - Write a simple value into user space, with less checking.
++ * @x: Value to copy to user space.
++ * @ptr: Destination address, in user space.
++ *
++ * Context: User context only. This function may sleep.
++ *
++ * This macro copies a single simple value from kernel space to user
++ * space. It supports simple types like char and int, but not larger
++ * data types like structures or arrays.
++ *
++ * @ptr must have pointer-to-simple-variable type, and @x must be assignable
++ * to the result of dereferencing @ptr.
++ *
++ * Caller must check the pointer with access_ok() before calling this
++ * function.
++ *
++ * Returns zero on success, or -EFAULT on error.
++ */
++#define __put_user(x,ptr) \
++ __put_user_nocheck((x),(ptr),sizeof(*(ptr)))
++
++/*
++ * __get_user: - Get a simple variable from user space, with less checking.
++ * @x: Variable to store result.
++ * @ptr: Source address, in user space.
++ *
++ * Context: User context only. This function may sleep.
++ *
++ * This macro copies a single simple variable from user space to kernel
++ * space. It supports simple types like char and int, but not larger
++ * data types like structures or arrays.
++ *
++ * @ptr must have pointer-to-simple-variable type, and the result of
++ * dereferencing @ptr must be assignable to @x without a cast.
++ *
++ * Caller must check the pointer with access_ok() before calling this
++ * function.
++ *
++ * Returns zero on success, or -EFAULT on error.
++ * On error, the variable @x is set to zero.
++ */
++#define __get_user(x,ptr) \
++ __get_user_nocheck((x),(ptr),sizeof(*(ptr)))
++
++extern int __get_user_bad(void);
++extern int __put_user_bad(void);
++
++#define __get_user_nocheck(x, ptr, size) \
++({ \
++ typeof(*(ptr)) __gu_val = (typeof(*(ptr)) __force)0; \
++ int __gu_err = 0; \
++ \
++ switch (size) { \
++ case 1: __get_user_asm("ub", __gu_val, ptr, __gu_err); break; \
++ case 2: __get_user_asm("uh", __gu_val, ptr, __gu_err); break; \
++ case 4: __get_user_asm("w", __gu_val, ptr, __gu_err); break; \
++ case 8: __get_user_asm("d", __gu_val, ptr, __gu_err); break; \
++ default: __gu_err = __get_user_bad(); break; \
++ } \
++ \
++ x = __gu_val; \
++ __gu_err; \
++})
++
++#define __get_user_check(x, ptr, size) \
++({ \
++ typeof(*(ptr)) __gu_val = (typeof(*(ptr)) __force)0; \
++ const typeof(*(ptr)) __user * __gu_addr = (ptr); \
++ int __gu_err = 0; \
++ \
++ if (access_ok(VERIFY_READ, __gu_addr, size)) { \
++ switch (size) { \
++ case 1: \
++ __get_user_asm("ub", __gu_val, __gu_addr, \
++ __gu_err); \
++ break; \
++ case 2: \
++ __get_user_asm("uh", __gu_val, __gu_addr, \
++ __gu_err); \
++ break; \
++ case 4: \
++ __get_user_asm("w", __gu_val, __gu_addr, \
++ __gu_err); \
++ break; \
++ case 8: \
++ __get_user_asm("d", __gu_val, __gu_addr, \
++ __gu_err); \
++ break; \
++ default: \
++ __gu_err = __get_user_bad(); \
++ break; \
++ } \
++ } else { \
++ __gu_err = -EFAULT; \
++ } \
++ x = __gu_val; \
++ __gu_err; \
++})
++
++#define __get_user_asm(suffix, __gu_val, ptr, __gu_err) \
++ asm volatile( \
++ "1: ld." suffix " %1, %3 \n" \
++ "2: \n" \
++ " .section .fixup, \"ax\" \n" \
++ "3: mov %0, %4 \n" \
++ " rjmp 2b \n" \
++ " .previous \n" \
++ " .section __ex_table, \"a\" \n" \
++ " .long 1b, 3b \n" \
++ " .previous \n" \
++ : "=r"(__gu_err), "=r"(__gu_val) \
++ : "0"(__gu_err), "m"(*(ptr)), "i"(-EFAULT))
++
++#define __put_user_nocheck(x, ptr, size) \
++({ \
++ typeof(*(ptr)) __pu_val; \
++ int __pu_err = 0; \
++ \
++ __pu_val = (x); \
++ switch (size) { \
++ case 1: __put_user_asm("b", ptr, __pu_val, __pu_err); break; \
++ case 2: __put_user_asm("h", ptr, __pu_val, __pu_err); break; \
++ case 4: __put_user_asm("w", ptr, __pu_val, __pu_err); break; \
++ case 8: __put_user_asm("d", ptr, __pu_val, __pu_err); break; \
++ default: __pu_err = __put_user_bad(); break; \
++ } \
++ __pu_err; \
++})
++
++#define __put_user_check(x, ptr, size) \
++({ \
++ typeof(*(ptr)) __pu_val; \
++ typeof(*(ptr)) __user *__pu_addr = (ptr); \
++ int __pu_err = 0; \
++ \
++ __pu_val = (x); \
++ if (access_ok(VERIFY_WRITE, __pu_addr, size)) { \
++ switch (size) { \
++ case 1: \
++ __put_user_asm("b", __pu_addr, __pu_val, \
++ __pu_err); \
++ break; \
++ case 2: \
++ __put_user_asm("h", __pu_addr, __pu_val, \
++ __pu_err); \
++ break; \
++ case 4: \
++ __put_user_asm("w", __pu_addr, __pu_val, \
++ __pu_err); \
++ break; \
++ case 8: \
++ __put_user_asm("d", __pu_addr, __pu_val, \
++ __pu_err); \
++ break; \
++ default: \
++ __pu_err = __put_user_bad(); \
++ break; \
++ } \
++ } else { \
++ __pu_err = -EFAULT; \
++ } \
++ __pu_err; \
++})
++
++#define __put_user_asm(suffix, ptr, __pu_val, __gu_err) \
++ asm volatile( \
++ "1: st." suffix " %1, %3 \n" \
++ "2: \n" \
++ " .section .fixup, \"ax\" \n" \
++ "3: mov %0, %4 \n" \
++ " rjmp 2b \n" \
++ " .previous \n" \
++ " .section __ex_table, \"a\" \n" \
++ " .long 1b, 3b \n" \
++ " .previous \n" \
++ : "=r"(__gu_err), "=m"(*(ptr)) \
++ : "0"(__gu_err), "r"(__pu_val), "i"(-EFAULT))
++
++extern __kernel_size_t clear_user(void __user *addr, __kernel_size_t size);
++extern __kernel_size_t __clear_user(void __user *addr, __kernel_size_t size);
++
++extern long strncpy_from_user(char *dst, const char __user *src, long count);
++extern long __strncpy_from_user(char *dst, const char __user *src, long count);
++
++extern long strnlen_user(const char __user *__s, long __n);
++extern long __strnlen_user(const char __user *__s, long __n);
++
++#define strlen_user(s) strnlen_user(s, ~0UL >> 1)
++
++struct exception_table_entry
++{
++ unsigned long insn, fixup;
++};
++
++#endif /* __ASM_AVR32_UACCESS_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/ucontext.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/ucontext.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,12 @@
++#ifndef __ASM_AVR32_UCONTEXT_H
++#define __ASM_AVR32_UCONTEXT_H
++
++struct ucontext {
++ unsigned long uc_flags;
++ struct ucontext * uc_link;
++ stack_t uc_stack;
++ struct sigcontext uc_mcontext;
++ sigset_t uc_sigmask;
++};
++
++#endif /* __ASM_AVR32_UCONTEXT_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/unaligned.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/unaligned.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,25 @@
++#ifndef __ASM_AVR32_UNALIGNED_H
++#define __ASM_AVR32_UNALIGNED_H
++
++/*
++ * AVR32 can handle some unaligned accesses, depending on the
++ * implementation. The AVR32 AP implementation can handle unaligned
++ * words, but halfwords must be halfword-aligned, and doublewords must
++ * be word-aligned.
++ *
++ * TODO: Make all this CPU-specific and optimize.
++ */
++
++#include <linux/string.h>
++
++/* Use memmove here, so gcc does not insert a __builtin_memcpy. */
++
++#define get_unaligned(ptr) \
++ ({ __typeof__(*(ptr)) __tmp; memmove(&__tmp, (ptr), sizeof(*(ptr))); __tmp; })
++
++#define put_unaligned(val, ptr) \
++ ({ __typeof__(*(ptr)) __tmp = (val); \
++ memmove((ptr), &__tmp, sizeof(*(ptr))); \
++ (void)0; })
++
++#endif /* __ASM_AVR32_UNALIGNED_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/unistd.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/unistd.h 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,387 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_UNISTD_H
++#define __ASM_AVR32_UNISTD_H
++
++/*
++ * This file contains the system call numbers.
++ */
++
++#define __NR_restart_syscall 0
++#define __NR_exit 1
++#define __NR_fork 2
++#define __NR_read 3
++#define __NR_write 4
++#define __NR_open 5
++#define __NR_close 6
++#define __NR_umask 7
++#define __NR_creat 8
++#define __NR_link 9
++#define __NR_unlink 10
++#define __NR_execve 11
++#define __NR_chdir 12
++#define __NR_time 13
++#define __NR_mknod 14
++#define __NR_chmod 15
++#define __NR_chown 16
++#define __NR_lchown 17
++#define __NR_lseek 18
++#define __NR__llseek 19
++#define __NR_getpid 20
++#define __NR_mount 21
++#define __NR_umount2 22
++#define __NR_setuid 23
++#define __NR_getuid 24
++#define __NR_stime 25
++#define __NR_ptrace 26
++#define __NR_alarm 27
++#define __NR_pause 28
++#define __NR_utime 29
++#define __NR_stat 30
++#define __NR_fstat 31
++#define __NR_lstat 32
++#define __NR_access 33
++#define __NR_chroot 34
++#define __NR_sync 35
++#define __NR_fsync 36
++#define __NR_kill 37
++#define __NR_rename 38
++#define __NR_mkdir 39
++#define __NR_rmdir 40
++#define __NR_dup 41
++#define __NR_pipe 42
++#define __NR_times 43
++#define __NR_clone 44
++#define __NR_brk 45
++#define __NR_setgid 46
++#define __NR_getgid 47
++#define __NR_getcwd 48
++#define __NR_geteuid 49
++#define __NR_getegid 50
++#define __NR_acct 51
++#define __NR_setfsuid 52
++#define __NR_setfsgid 53
++#define __NR_ioctl 54
++#define __NR_fcntl 55
++#define __NR_setpgid 56
++#define __NR_mremap 57
++#define __NR_setresuid 58
++#define __NR_getresuid 59
++#define __NR_setreuid 60
++#define __NR_setregid 61
++#define __NR_ustat 62
++#define __NR_dup2 63
++#define __NR_getppid 64
++#define __NR_getpgrp 65
++#define __NR_setsid 66
++#define __NR_rt_sigaction 67
++#define __NR_rt_sigreturn 68
++#define __NR_rt_sigprocmask 69
++#define __NR_rt_sigpending 70
++#define __NR_rt_sigtimedwait 71
++#define __NR_rt_sigqueueinfo 72
++#define __NR_rt_sigsuspend 73
++#define __NR_sethostname 74
++#define __NR_setrlimit 75
++#define __NR_getrlimit 76 /* SuS compliant getrlimit */
++#define __NR_getrusage 77
++#define __NR_gettimeofday 78
++#define __NR_settimeofday 79
++#define __NR_getgroups 80
++#define __NR_setgroups 81
++#define __NR_select 82
++#define __NR_symlink 83
++#define __NR_fchdir 84
++#define __NR_readlink 85
++#define __NR_pread 86
++#define __NR_pwrite 87
++#define __NR_swapon 88
++#define __NR_reboot 89
++#define __NR_mmap2 90
++#define __NR_munmap 91
++#define __NR_truncate 92
++#define __NR_ftruncate 93
++#define __NR_fchmod 94
++#define __NR_fchown 95
++#define __NR_getpriority 96
++#define __NR_setpriority 97
++#define __NR_wait4 98
++#define __NR_statfs 99
++#define __NR_fstatfs 100
++#define __NR_vhangup 101
++#define __NR_sigaltstack 102
++#define __NR_syslog 103
++#define __NR_setitimer 104
++#define __NR_getitimer 105
++#define __NR_swapoff 106
++#define __NR_sysinfo 107
++#define __NR_ipc 108
++#define __NR_sendfile 109
++#define __NR_setdomainname 110
++#define __NR_uname 111
++#define __NR_adjtimex 112
++#define __NR_mprotect 113
++#define __NR_vfork 114
++#define __NR_init_module 115
++#define __NR_delete_module 116
++#define __NR_quotactl 117
++#define __NR_getpgid 118
++#define __NR_bdflush 119
++#define __NR_sysfs 120
++#define __NR_personality 121
++#define __NR_afs_syscall 122 /* Syscall for Andrew File System */
++#define __NR_getdents 123
++#define __NR_flock 124
++#define __NR_msync 125
++#define __NR_readv 126
++#define __NR_writev 127
++#define __NR_getsid 128
++#define __NR_fdatasync 129
++#define __NR__sysctl 130
++#define __NR_mlock 131
++#define __NR_munlock 132
++#define __NR_mlockall 133
++#define __NR_munlockall 134
++#define __NR_sched_setparam 135
++#define __NR_sched_getparam 136
++#define __NR_sched_setscheduler 137
++#define __NR_sched_getscheduler 138
++#define __NR_sched_yield 139
++#define __NR_sched_get_priority_max 140
++#define __NR_sched_get_priority_min 141
++#define __NR_sched_rr_get_interval 142
++#define __NR_nanosleep 143
++#define __NR_poll 144
++#define __NR_nfsservctl 145
++#define __NR_setresgid 146
++#define __NR_getresgid 147
++#define __NR_prctl 148
++#define __NR_socket 149
++#define __NR_bind 150
++#define __NR_connect 151
++#define __NR_listen 152
++#define __NR_accept 153
++#define __NR_getsockname 154
++#define __NR_getpeername 155
++#define __NR_socketpair 156
++#define __NR_send 157
++#define __NR_recv 158
++#define __NR_sendto 159
++#define __NR_recvfrom 160
++#define __NR_shutdown 161
++#define __NR_setsockopt 162
++#define __NR_getsockopt 163
++#define __NR_sendmsg 164
++#define __NR_recvmsg 165
++#define __NR_truncate64 166
++#define __NR_ftruncate64 167
++#define __NR_stat64 168
++#define __NR_lstat64 169
++#define __NR_fstat64 170
++#define __NR_pivot_root 171
++#define __NR_mincore 172
++#define __NR_madvise 173
++#define __NR_getdents64 174
++#define __NR_fcntl64 175
++#define __NR_gettid 176
++#define __NR_readahead 177
++#define __NR_setxattr 178
++#define __NR_lsetxattr 179
++#define __NR_fsetxattr 180
++#define __NR_getxattr 181
++#define __NR_lgetxattr 182
++#define __NR_fgetxattr 183
++#define __NR_listxattr 184
++#define __NR_llistxattr 185
++#define __NR_flistxattr 186
++#define __NR_removexattr 187
++#define __NR_lremovexattr 188
++#define __NR_fremovexattr 189
++#define __NR_tkill 190
++#define __NR_sendfile64 191
++#define __NR_futex 192
++#define __NR_sched_setaffinity 193
++#define __NR_sched_getaffinity 194
++#define __NR_capget 195
++#define __NR_capset 196
++#define __NR_io_setup 197
++#define __NR_io_destroy 198
++#define __NR_io_getevents 199
++#define __NR_io_submit 200
++#define __NR_io_cancel 201
++#define __NR_fadvise64 202
++#define __NR_exit_group 203
++#define __NR_lookup_dcookie 204
++#define __NR_epoll_create 205
++#define __NR_epoll_ctl 206
++#define __NR_epoll_wait 207
++#define __NR_remap_file_pages 208
++#define __NR_set_tid_address 209
++
++#define __NR_timer_create 210
++#define __NR_timer_settime 211
++#define __NR_timer_gettime 212
++#define __NR_timer_getoverrun 213
++#define __NR_timer_delete 214
++#define __NR_clock_settime 215
++#define __NR_clock_gettime 216
++#define __NR_clock_getres 217
++#define __NR_clock_nanosleep 218
++#define __NR_statfs64 219
++#define __NR_fstatfs64 220
++#define __NR_tgkill 221
++ /* 222 reserved for tux */
++#define __NR_utimes 223
++#define __NR_fadvise64_64 224
++
++#define __NR_cacheflush 225
++
++#define __NR_vserver 226
++#define __NR_mq_open 227
++#define __NR_mq_unlink 228
++#define __NR_mq_timedsend 229
++#define __NR_mq_timedreceive 230
++#define __NR_mq_notify 231
++#define __NR_mq_getsetattr 232
++#define __NR_kexec_load 233
++#define __NR_waitid 234
++#define __NR_add_key 235
++#define __NR_request_key 236
++#define __NR_keyctl 237
++#define __NR_ioprio_set 238
++#define __NR_ioprio_get 239
++#define __NR_inotify_init 240
++#define __NR_inotify_add_watch 241
++#define __NR_inotify_rm_watch 242
++#define __NR_openat 243
++#define __NR_mkdirat 244
++#define __NR_mknodat 245
++#define __NR_fchownat 246
++#define __NR_futimesat 247
++#define __NR_fstatat64 248
++#define __NR_unlinkat 249
++#define __NR_renameat 250
++#define __NR_linkat 251
++#define __NR_symlinkat 252
++#define __NR_readlinkat 253
++#define __NR_fchmodat 254
++#define __NR_faccessat 255
++#define __NR_pselect6 256
++#define __NR_ppoll 257
++#define __NR_unshare 258
++#define __NR_set_robust_list 259
++#define __NR_get_robust_list 260
++#define __NR_splice 261
++#define __NR_sync_file_range 262
++#define __NR_tee 263
++#define __NR_vmsplice 264
++
++#define NR_syscalls 265
++
++
++/*
++ * AVR32 calling convention for system calls:
++ * - System call number in r8
++ * - Parameters in r12 and downwards to r9 as well as r6 and r5.
++ * - Return value in r12
++ */
++
++/*
++ * user-visible error numbers are in the range -1 - -124: see
++ * <asm-generic/errno.h>
++ */
++
++#define __syscall_return(type, res) do { \
++ if ((unsigned long)(res) >= (unsigned long)(-125)) { \
++ errno = -(res); \
++ res = -1; \
++ } \
++ return (type) (res); \
++ } while (0)
++
++#ifdef __KERNEL__
++#define __ARCH_WANT_IPC_PARSE_VERSION
++#define __ARCH_WANT_STAT64
++#define __ARCH_WANT_SYS_ALARM
++#define __ARCH_WANT_SYS_GETHOSTNAME
++#define __ARCH_WANT_SYS_PAUSE
++#define __ARCH_WANT_SYS_TIME
++#define __ARCH_WANT_SYS_UTIME
++#define __ARCH_WANT_SYS_WAITPID
++#define __ARCH_WANT_SYS_FADVISE64
++#define __ARCH_WANT_SYS_GETPGRP
++#define __ARCH_WANT_SYS_LLSEEK
++#define __ARCH_WANT_SYS_GETPGRP
++#define __ARCH_WANT_SYS_RT_SIGACTION
++#define __ARCH_WANT_SYS_RT_SIGSUSPEND
++#endif
++
++#if defined(__KERNEL_SYSCALLS__) || defined(__CHECKER__)
++
++#include <linux/types.h>
++#include <linux/linkage.h>
++#include <asm/signal.h>
++
++struct pt_regs;
++
++/*
++ * we need this inline - forking from kernel space will result
++ * in NO COPY ON WRITE (!!!), until an execve is executed. This
++ * is no problem, but for the stack. This is handled by not letting
++ * main() use the stack at all after fork(). Thus, no function
++ * calls - which means inline code for fork too, as otherwise we
++ * would use the stack upon exit from 'fork()'.
++ *
++ * Actually only pause and fork are needed inline, so that there
++ * won't be any messing with the stack from main(), but we define
++ * some others too.
++ */
++static inline int execve(const char *file, char **argv, char **envp)
++{
++ register long scno asm("r8") = __NR_execve;
++ register long sc1 asm("r12") = (long)file;
++ register long sc2 asm("r11") = (long)argv;
++ register long sc3 asm("r10") = (long)envp;
++ int res;
++
++ asm volatile("scall"
++ : "=r"(sc1)
++ : "r"(scno), "0"(sc1), "r"(sc2), "r"(sc3)
++ : "lr", "memory");
++ res = sc1;
++ __syscall_return(int, res);
++}
++
++asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize);
++asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
++ struct pt_regs *regs);
++asmlinkage int sys_rt_sigreturn(struct pt_regs *regs);
++asmlinkage int sys_pipe(unsigned long __user *filedes);
++asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
++ unsigned long prot, unsigned long flags,
++ unsigned long fd, off_t offset);
++asmlinkage int sys_cacheflush(int operation, void __user *addr, size_t len);
++asmlinkage int sys_fork(struct pt_regs *regs);
++asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp,
++ unsigned long parent_tidptr,
++ unsigned long child_tidptr, struct pt_regs *regs);
++asmlinkage int sys_vfork(struct pt_regs *regs);
++asmlinkage int sys_execve(char __user *ufilename, char __user *__user *uargv,
++ char __user *__user *uenvp, struct pt_regs *regs);
++
++#endif
++
++/*
++ * "Conditional" syscalls
++ *
++ * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
++ * but it doesn't work on all toolchains, so we just do it by hand
++ */
++#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
++
++#endif /* __ASM_AVR32_UNISTD_H */
+Index: linux-2.6.18-avr32/include/asm-avr32/user.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/user.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,64 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Note: We may not need these definitions for AVR32, as we don't
++ * support a.out.
++ */
++#ifndef __ASM_AVR32_USER_H
++#define __ASM_AVR32_USER_H
++
++#include <asm/ptrace.h>
++#include <asm/page.h>
++
++/*
++ * Core file format: The core file is written in such a way that gdb
++ * can understand it and provide useful information to the user (under
++ * linux we use the `trad-core' bfd). The file contents are as follows:
++ *
++ * upage: 1 page consisting of a user struct that tells gdb
++ * what is present in the file. Directly after this is a
++ * copy of the task_struct, which is currently not used by gdb,
++ * but it may come in handy at some point. All of the registers
++ * are stored as part of the upage. The upage should always be
++ * only one page long.
++ * data: The data segment follows next. We use current->end_text to
++ * current->brk to pick up all of the user variables, plus any memory
++ * that may have been sbrk'ed. No attempt is made to determine if a
++ * page is demand-zero or if a page is totally unused, we just cover
++ * the entire range. All of the addresses are rounded in such a way
++ * that an integral number of pages is written.
++ * stack: We need the stack information in order to get a meaningful
++ * backtrace. We need to write the data from usp to
++ * current->start_stack, so we round each of these in order to be able
++ * to write an integer number of pages.
++ */
++
++struct user_fpu_struct {
++ /* We have no FPU (yet) */
++};
++
++struct user {
++ struct pt_regs regs; /* entire machine state */
++ size_t u_tsize; /* text size (pages) */
++ size_t u_dsize; /* data size (pages) */
++ size_t u_ssize; /* stack size (pages) */
++ unsigned long start_code; /* text starting address */
++ unsigned long start_data; /* data starting address */
++ unsigned long start_stack; /* stack starting address */
++ long int signal; /* signal causing core dump */
++ struct regs * u_ar0; /* help gdb find registers */
++ unsigned long magic; /* identifies a core file */
++ char u_comm[32]; /* user command name */
++};
++
++#define NBPG PAGE_SIZE
++#define UPAGES 1
++#define HOST_TEXT_START_ADDR (u.start_code)
++#define HOST_DATA_START_ADDR (u.start_data)
++#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
++
++#endif /* __ASM_AVR32_USER_H */
+Index: linux-2.6.18-avr32/include/linux/elf-em.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/linux/elf-em.h 2006-12-04 09:32:57.000000000 +0100
++++ linux-2.6.18-avr32/include/linux/elf-em.h 2006-12-04 09:33:12.000000000 +0100
+@@ -31,6 +31,7 @@
+ #define EM_M32R 88 /* Renesas M32R */
+ #define EM_H8_300 46 /* Renesas H8/300,300H,H8S */
+ #define EM_FRV 0x5441 /* Fujitsu FR-V */
++#define EM_AVR32 0x18ad /* Atmel AVR32 */
+
+ /*
+ * This is an interim value that we will use until the committee comes
+Index: linux-2.6.18-avr32/include/asm-avr32/irqflags.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/irqflags.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,68 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_IRQFLAGS_H
++#define __ASM_AVR32_IRQFLAGS_H
++
++#include <asm/sysreg.h>
++
++static inline unsigned long __raw_local_save_flags(void)
++{
++ return sysreg_read(SR);
++}
++
++#define raw_local_save_flags(x) \
++ do { (x) = __raw_local_save_flags(); } while (0)
++
++/*
++ * This will restore ALL status register flags, not only the interrupt
++ * mask flag.
++ *
++ * The empty asm statement informs the compiler of this fact while
++ * also serving as a barrier.
++ */
++static inline void raw_local_irq_restore(unsigned long flags)
++{
++ sysreg_write(SR, flags);
++ asm volatile("" : : : "memory", "cc");
++}
++
++static inline void raw_local_irq_disable(void)
++{
++ asm volatile("ssrf %0" : : "n"(SYSREG_GM_OFFSET) : "memory");
++}
++
++static inline void raw_local_irq_enable(void)
++{
++ asm volatile("csrf %0" : : "n"(SYSREG_GM_OFFSET) : "memory");
++}
++
++static inline int raw_irqs_disabled_flags(unsigned long flags)
++{
++ return (flags & SYSREG_BIT(GM)) != 0;
++}
++
++static inline int raw_irqs_disabled(void)
++{
++ unsigned long flags = __raw_local_save_flags();
++
++ return raw_irqs_disabled_flags(flags);
++}
++
++static inline unsigned long __raw_local_irq_save(void)
++{
++ unsigned long flags = __raw_local_save_flags();
++
++ raw_local_irq_disable();
++
++ return flags;
++}
++
++#define raw_local_irq_save(flags) \
++ do { (flags) = __raw_local_irq_save(); } while (0)
++
++#endif /* __ASM_AVR32_IRQFLAGS_H */
+Index: linux-2.6.18-avr32/lib/Kconfig.debug
+===================================================================
+--- linux-2.6.18-avr32.orig/lib/Kconfig.debug 2006-12-04 09:32:57.000000000 +0100
++++ linux-2.6.18-avr32/lib/Kconfig.debug 2006-12-04 09:33:12.000000000 +0100
+@@ -277,7 +277,7 @@ config DEBUG_HIGHMEM
+ config DEBUG_BUGVERBOSE
+ bool "Verbose BUG() reporting (adds 70K)" if DEBUG_KERNEL && EMBEDDED
+ depends on BUG
+- depends on ARM || ARM26 || M32R || M68K || SPARC32 || SPARC64 || X86_32 || FRV
++ depends on ARM || ARM26 || AVR32 || M32R || M68K || SPARC32 || SPARC64 || X86_32 || FRV
+ default !EMBEDDED
+ help
+ Say Y here to make BUG() panics output the file name and line number
+@@ -315,7 +315,7 @@ config DEBUG_VM
+
+ config FRAME_POINTER
+ bool "Compile the kernel with frame pointers"
+- depends on DEBUG_KERNEL && (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || S390)
++ depends on DEBUG_KERNEL && (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || S390 || AVR32)
+ default y if DEBUG_INFO && UML
+ help
+ If you say Y here the resulting kernel image will be slightly larger
+Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/Makefile 2006-12-04 11:50:22.000000000 +0100
+@@ -0,0 +1,2 @@
++obj-y += setup.o spi.o flash.o
++obj-$(CONFIG_BOARD_ATSTK1002) += atstk1002.o
+Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c 2006-12-04 11:50:25.000000000 +0100
+@@ -0,0 +1,37 @@
++/*
++ * ATSTK1002 daughterboard-specific init code
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/init.h>
++
++#include <asm/arch/board.h>
++
++struct eth_platform_data __initdata eth0_data = {
++ .valid = 1,
++ .mii_phy_addr = 0x10,
++ .is_rmii = 0,
++ .hw_addr = { 0x6a, 0x87, 0x71, 0x14, 0xcd, 0xcb },
++};
++
++extern struct lcdc_platform_data atstk1000_fb0_data;
++
++static int __init atstk1002_init(void)
++{
++ at32_add_system_devices();
++
++ at32_add_device_usart(1); /* /dev/ttyS0 */
++ at32_add_device_usart(2); /* /dev/ttyS1 */
++ at32_add_device_usart(3); /* /dev/ttyS2 */
++
++ at32_add_device_eth(0, &eth0_data);
++ at32_add_device_spi(0);
++ at32_add_device_lcdc(0, &atstk1000_fb0_data);
++
++ return 0;
++}
++postcore_initcall(atstk1002_init);
+Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/setup.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/setup.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,50 @@
++/*
++ * ATSTK1000 board-specific setup code.
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/bootmem.h>
++#include <linux/init.h>
++#include <linux/types.h>
++#include <linux/linkage.h>
++
++#include <asm/setup.h>
++
++#include <asm/arch/board.h>
++
++/* Initialized by bootloader-specific startup code. */
++struct tag *bootloader_tags __initdata;
++
++struct lcdc_platform_data __initdata atstk1000_fb0_data;
++
++void __init board_setup_fbmem(unsigned long fbmem_start,
++ unsigned long fbmem_size)
++{
++ if (!fbmem_size)
++ return;
++
++ if (!fbmem_start) {
++ void *fbmem;
++
++ fbmem = alloc_bootmem_low_pages(fbmem_size);
++ fbmem_start = __pa(fbmem);
++ } else {
++ pg_data_t *pgdat;
++
++ for_each_online_pgdat(pgdat) {
++ if (fbmem_start >= pgdat->bdata->node_boot_start
++ && fbmem_start <= pgdat->bdata->node_low_pfn)
++ reserve_bootmem_node(pgdat, fbmem_start,
++ fbmem_size);
++ }
++ }
++
++ printk("%luKiB framebuffer memory at address 0x%08lx\n",
++ fbmem_size >> 10, fbmem_start);
++ atstk1000_fb0_data.fbmem_start = fbmem_start;
++ atstk1000_fb0_data.fbmem_size = fbmem_size;
++}
+Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/spi.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/spi.c 2006-12-04 11:50:22.000000000 +0100
+@@ -0,0 +1,27 @@
++/*
++ * ATSTK1000 SPI devices
++ *
++ * Copyright (C) 2005 Atmel Norway
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/device.h>
++#include <linux/spi/spi.h>
++
++static struct spi_board_info spi_board_info[] __initdata = {
++ {
++ .modalias = "ltv350qv",
++ .max_speed_hz = 16000000,
++ .bus_num = 0,
++ .chip_select = 1,
++ },
++};
++
++static int board_init_spi(void)
++{
++ spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
++ return 0;
++}
++arch_initcall(board_init_spi);
+Index: linux-2.6.18-avr32/arch/avr32/configs/atstk1002_defconfig
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/configs/atstk1002_defconfig 2006-12-04 11:50:21.000000000 +0100
+@@ -0,0 +1,754 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.18-rc1
++# Tue Jul 11 12:41:36 2006
++#
++CONFIG_AVR32=y
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++
++#
++# General setup
++#
++CONFIG_LOCALVERSION=""
++# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_SWAP=y
++# CONFIG_SYSVIPC is not set
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_SYSCTL=y
++# CONFIG_AUDIT is not set
++# CONFIG_IKCONFIG is not set
++# CONFIG_RELAY is not set
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_EMBEDDED=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++# CONFIG_BASE_FULL is not set
++# CONFIG_FUTEX is not set
++# CONFIG_EPOLL is not set
++CONFIG_SHMEM=y
++# CONFIG_SLAB is not set
++# CONFIG_VM_EVENT_COUNTERS is not set
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=1
++CONFIG_SLOB=y
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++# CONFIG_KMOD is not set
++
++#
++# Block layer
++#
++# CONFIG_BLK_DEV_IO_TRACE is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++# CONFIG_IOSCHED_AS is not set
++# CONFIG_IOSCHED_DEADLINE is not set
++# CONFIG_IOSCHED_CFQ is not set
++# CONFIG_DEFAULT_AS is not set
++# CONFIG_DEFAULT_DEADLINE is not set
++# CONFIG_DEFAULT_CFQ is not set
++CONFIG_DEFAULT_NOOP=y
++CONFIG_DEFAULT_IOSCHED="noop"
++
++#
++# System Type and features
++#
++CONFIG_SUBARCH_AVR32B=y
++CONFIG_MMU=y
++CONFIG_PERFORMANCE_COUNTERS=y
++CONFIG_PLATFORM_AT32AP=y
++CONFIG_CPU_AT32AP7000=y
++CONFIG_BOARD_ATSTK1002=y
++CONFIG_BOARD_ATSTK1000=y
++CONFIG_LOADER_U_BOOT=y
++CONFIG_LOAD_ADDRESS=0x10000000
++CONFIG_ENTRY_ADDRESS=0x90000000
++CONFIG_PHYS_OFFSET=0x10000000
++CONFIG_PREEMPT_NONE=y
++# CONFIG_PREEMPT_VOLUNTARY is not set
++# CONFIG_PREEMPT is not set
++# CONFIG_HAVE_ARCH_BOOTMEM_NODE is not set
++# CONFIG_ARCH_HAVE_MEMORY_PRESENT is not set
++# CONFIG_NEED_NODE_MEMMAP_SIZE is not set
++CONFIG_ARCH_FLATMEM_ENABLE=y
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++# CONFIG_ARCH_SPARSEMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4
++# CONFIG_RESOURCES_64BIT is not set
++# CONFIG_OWNERSHIP_TRACE is not set
++# CONFIG_HZ_100 is not set
++CONFIG_HZ_250=y
++# CONFIG_HZ_1000 is not set
++CONFIG_HZ=250
++CONFIG_CMDLINE=""
++
++#
++# Bus options
++#
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++# CONFIG_PCCARD is not set
++
++#
++# Executable file formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_MISC is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++# CONFIG_NETDEBUG is not set
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_UNIX=y
++# CONFIG_NET_KEY is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_PNP=y
++CONFIG_IP_PNP_DHCP=y
++# CONFIG_IP_PNP_BOOTP is not set
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_BIC=y
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++
++#
++# DCCP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP is not set
++
++#
++# SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++
++#
++# TIPC Configuration (EXPERIMENTAL)
++#
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_NET_TCPPROBE is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_IEEE80211 is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_STANDALONE=y
++# CONFIG_PREVENT_FIRMWARE_BUILD is not set
++# CONFIG_FW_LOADER is not set
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_SYS_HYPERVISOR is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++# CONFIG_MTD is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play support
++#
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=m
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++CONFIG_BLK_DEV_NBD=m
++CONFIG_BLK_DEV_RAM=m
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=4096
++CONFIG_BLK_DEV_INITRD=y
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++
++#
++# ATA/ATAPI/MFM/RLL support
++#
++# CONFIG_IDE is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++# CONFIG_SCSI is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++
++#
++# I2O device support
++#
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++CONFIG_DUMMY=y
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++CONFIG_TUN=m
++
++#
++# PHY device support
++#
++# CONFIG_PHYLIB is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_MACB=y
++
++#
++# Ethernet (1000 Mbit)
++#
++
++#
++# Ethernet (10000 Mbit)
++#
++
++#
++# Token Ring devices
++#
++
++#
++# Wireless LAN (non-hamradio)
++#
++# CONFIG_NET_RADIO is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++CONFIG_PPP=m
++# CONFIG_PPP_MULTILINK is not set
++# CONFIG_PPP_FILTER is not set
++CONFIG_PPP_ASYNC=m
++# CONFIG_PPP_SYNC_TTY is not set
++CONFIG_PPP_DEFLATE=m
++# CONFIG_PPP_BSDCOMP is not set
++# CONFIG_PPP_MPPE is not set
++# CONFIG_PPPOE is not set
++# CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Telephony Support
++#
++# CONFIG_PHONE is not set
++
++#
++# Input device support
++#
++# CONFIG_INPUT is not set
++
++#
++# Hardware I/O ports
++#
++# CONFIG_SERIO is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++# CONFIG_VT is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_AT91=y
++CONFIG_SERIAL_AT91_CONSOLE=y
++# CONFIG_SERIAL_AT91_TTYAT is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_LEGACY_PTYS is not set
++
++#
++# IPMI
++#
++# CONFIG_IPMI_HANDLER is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_RTC is not set
++# CONFIG_GEN_RTC is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_RAW_DRIVER is not set
++
++#
++# TPM devices
++#
++# CONFIG_TCG_TPM is not set
++# CONFIG_TELCLOCK is not set
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# SPI support
++#
++CONFIG_SPI=y
++# CONFIG_SPI_DEBUG is not set
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_ATMEL=m
++# CONFIG_SPI_BITBANG is not set
++
++#
++# SPI Protocol Masters
++#
++
++#
++# Dallas's 1-wire bus
++#
++
++#
++# Hardware Monitoring support
++#
++# CONFIG_HWMON is not set
++# CONFIG_HWMON_VID is not set
++
++#
++# Misc devices
++#
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++CONFIG_VIDEO_V4L2=y
++
++#
++# Digital Video Broadcasting Devices
++#
++# CONFIG_DVB is not set
++
++#
++# Graphics support
++#
++# CONFIG_FIRMWARE_EDID is not set
++CONFIG_FB=m
++CONFIG_FB_CFB_FILLRECT=m
++CONFIG_FB_CFB_COPYAREA=m
++CONFIG_FB_CFB_IMAGEBLIT=m
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++CONFIG_FB_SIDSA=m
++CONFIG_FB_SIDSA_DEFAULT_BPP=24
++# CONFIG_FB_S1D13XXX is not set
++# CONFIG_FB_VIRTUAL is not set
++
++#
++# Logo configuration
++#
++# CONFIG_LOGO is not set
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
++CONFIG_LCD_CLASS_DEVICE=m
++CONFIG_LCD_DEVICE=y
++CONFIG_LCD_LTV350QV=m
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++
++#
++# USB support
++#
++# CONFIG_USB_ARCH_HAS_HCD is not set
++# CONFIG_USB_ARCH_HAS_OHCI is not set
++# CONFIG_USB_ARCH_HAS_EHCI is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# USB Gadget Support
++#
++# CONFIG_USB_GADGET is not set
++
++#
++# MMC/SD Card support
++#
++# CONFIG_MMC is not set
++
++#
++# LED devices
++#
++# CONFIG_NEW_LEDS is not set
++
++#
++# LED drivers
++#
++
++#
++# LED Triggers
++#
++
++#
++# InfiniBand support
++#
++
++#
++# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
++#
++
++#
++# Real Time Clock
++#
++# CONFIG_RTC_CLASS is not set
++
++#
++# DMA Engine support
++#
++# CONFIG_DMA_ENGINE is not set
++
++#
++# DMA Clients
++#
++
++#
++# DMA Devices
++#
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++CONFIG_MINIX_FS=m
++CONFIG_ROMFS_FS=m
++# CONFIG_INOTIFY is not set
++# CONFIG_QUOTA is not set
++# CONFIG_DNOTIFY is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=m
++CONFIG_MSDOS_FS=m
++CONFIG_VFAT_FS=m
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_KCORE=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++CONFIG_CONFIGFS_FS=m
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++CONFIG_CIFS=m
++# CONFIG_CIFS_STATS is not set
++# CONFIG_CIFS_WEAK_PW_HASH is not set
++# CONFIG_CIFS_XATTR is not set
++# CONFIG_CIFS_DEBUG2 is not set
++# CONFIG_CIFS_EXPERIMENTAL is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS=m
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=m
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++CONFIG_NLS_CODEPAGE_850=m
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=m
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=m
++
++#
++# Kernel hacking
++#
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_PRINTK_TIME=y
++CONFIG_MAGIC_SYSRQ=y
++# CONFIG_UNUSED_SYMBOLS is not set
++CONFIG_DEBUG_KERNEL=y
++CONFIG_LOG_BUF_SHIFT=14
++CONFIG_DETECT_SOFTLOCKUP=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_RWSEMS is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++# CONFIG_DEBUG_INFO is not set
++CONFIG_DEBUG_FS=y
++# CONFIG_DEBUG_VM is not set
++CONFIG_FRAME_POINTER=y
++# CONFIG_UNWIND_INFO is not set
++CONFIG_FORCED_INLINING=y
++# CONFIG_RCU_TORTURE_TEST is not set
++CONFIG_KPROBES=y
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++
++#
++# Cryptographic options
++#
++# CONFIG_CRYPTO is not set
++
++#
++# Hardware crypto devices
++#
++
++#
++# Library routines
++#
++CONFIG_CRC_CCITT=m
++# CONFIG_CRC16 is not set
++CONFIG_CRC32=m
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=m
++CONFIG_ZLIB_DEFLATE=m
+Index: linux-2.6.18-avr32/arch/avr32/lib/io-readsb.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/io-readsb.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++ .text
++.Lnot_word_aligned:
++1: ld.ub r8, r12[0]
++ sub r10, 1
++ st.b r11++, r8
++ reteq r12
++ tst r11, r9
++ brne 1b
++
++ /* fall through */
++
++ .global __raw_readsb
++ .type __raw_readsb,@function
++__raw_readsb:
++ cp.w r10, 0
++ mov r9, 3
++ reteq r12
++
++ tst r11, r9
++ brne .Lnot_word_aligned
++
++ sub r10, 4
++ brlt 2f
++
++1: ldins.b r8:t, r12[0]
++ ldins.b r8:u, r12[0]
++ ldins.b r8:l, r12[0]
++ ldins.b r8:b, r12[0]
++ st.w r11++, r8
++ sub r10, 4
++ brge 1b
++
++2: sub r10, -4
++ reteq r12
++
++3: ld.uh r8, r12[0]
++ sub r10, 1
++ st.b r11++, r8
++ brne 3b
++
++ retal r12
+Index: linux-2.6.18-avr32/arch/avr32/lib/io-writesb.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/lib/io-writesb.S 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,52 @@
++/*
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++ .text
++.Lnot_word_aligned:
++1: ld.ub r8, r11++
++ sub r10, 1
++ st.b r12[0], r8
++ reteq r12
++ tst r11, r9
++ brne 1b
++
++ /* fall through */
++
++ .global __raw_writesb
++ .type __raw_writesb,@function
++__raw_writesb:
++ cp.w r10, 0
++ mov r9, 3
++ reteq r12
++
++ tst r11, r9
++ brne .Lnot_word_aligned
++
++ sub r10, 4
++ brlt 2f
++
++1: ld.w r8, r11++
++ bfextu r9, r8, 24, 8
++ st.b r12[0], r9
++ bfextu r9, r8, 16, 8
++ st.b r12[0], r9
++ bfextu r9, r8, 8, 8
++ st.b r12[0], r9
++ st.b r12[0], r8
++ sub r10, 4
++ brge 1b
++
++2: sub r10, -4
++ reteq r12
++
++3: ld.ub r8, r11++
++ sub r10, 1
++ st.b r12[0], r8
++ brne 3b
++
++ retal r12
+Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/flash.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/flash.c 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,95 @@
++/*
++ * ATSTK1000 board-specific flash initialization
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/mtd/physmap.h>
++
++#include <asm/arch/smc.h>
++
++static struct smc_config flash_config __initdata = {
++ .ncs_read_setup = 0,
++ .nrd_setup = 40,
++ .ncs_write_setup = 0,
++ .nwe_setup = 10,
++
++ .ncs_read_pulse = 80,
++ .nrd_pulse = 40,
++ .ncs_write_pulse = 65,
++ .nwe_pulse = 55,
++
++ .read_cycle = 120,
++ .write_cycle = 120,
++
++ .bus_width = 2,
++ .nrd_controlled = 1,
++ .nwe_controlled = 1,
++ .byte_write = 1,
++};
++
++static struct mtd_partition flash_parts[] = {
++ {
++ .name = "u-boot",
++ .offset = 0x00000000,
++ .size = 0x00020000, /* 128 KiB */
++ .mask_flags = MTD_WRITEABLE,
++ },
++ {
++ .name = "root",
++ .offset = 0x00020000,
++ .size = 0x007d0000,
++ },
++ {
++ .name = "env",
++ .offset = 0x007f0000,
++ .size = 0x00010000,
++ .mask_flags = MTD_WRITEABLE,
++ },
++};
++
++static struct physmap_flash_data flash_data = {
++ .width = 2,
++ .nr_parts = ARRAY_SIZE(flash_parts),
++ .parts = flash_parts,
++};
++
++static struct resource flash_resource = {
++ .start = 0x00000000,
++ .end = 0x007fffff,
++ .flags = IORESOURCE_MEM,
++};
++
++static struct platform_device flash_device = {
++ .name = "physmap-flash",
++ .id = 0,
++ .resource = &flash_resource,
++ .num_resources = 1,
++ .dev = {
++ .platform_data = &flash_data,
++ },
++};
++
++/* This needs to be called after the SMC has been initialized */
++static int __init atstk1000_flash_init(void)
++{
++ int ret;
++
++ ret = smc_set_configuration(0, &flash_config);
++ if (ret < 0) {
++ printk(KERN_ERR "atstk1000: failed to set NOR flash timing\n");
++ return ret;
++ }
++
++ platform_device_register(&flash_device);
++
++ return 0;
++}
++device_initcall(atstk1000_flash_init);
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/hsmc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/hsmc.c 2006-12-04 11:50:22.000000000 +0100
+@@ -0,0 +1,164 @@
++/*
++ * Static Memory Controller for AT32 chips
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#define DEBUG
++#include <linux/clk.h>
++#include <linux/err.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <asm/io.h>
++#include <asm/arch/smc.h>
++
++#include "hsmc.h"
++
++#define NR_CHIP_SELECTS 6
++
++struct hsmc {
++ void __iomem *regs;
++ struct clk *pclk;
++ struct clk *mck;
++};
++
++static struct hsmc *hsmc;
++
++int smc_set_configuration(int cs, const struct smc_config *config)
++{
++ unsigned long mul;
++ unsigned long offset;
++ u32 setup, pulse, cycle, mode;
++
++ if (!hsmc)
++ return -ENODEV;
++ if (cs >= NR_CHIP_SELECTS)
++ return -EINVAL;
++
++ /*
++ * cycles = x / T = x * f
++ * = ((x * 1000000000) * ((f * 65536) / 1000000000)) / 65536
++ * = ((x * 1000000000) * (((f / 10000) * 65536) / 100000)) / 65536
++ */
++ mul = (clk_get_rate(hsmc->mck) / 10000) << 16;
++ mul /= 100000;
++
++#define ns2cyc(x) ((((x) * mul) + 65535) >> 16)
++
++ setup = (HSMC_BF(NWE_SETUP, ns2cyc(config->nwe_setup))
++ | HSMC_BF(NCS_WR_SETUP, ns2cyc(config->ncs_write_setup))
++ | HSMC_BF(NRD_SETUP, ns2cyc(config->nrd_setup))
++ | HSMC_BF(NCS_RD_SETUP, ns2cyc(config->ncs_read_setup)));
++ pulse = (HSMC_BF(NWE_PULSE, ns2cyc(config->nwe_pulse))
++ | HSMC_BF(NCS_WR_PULSE, ns2cyc(config->ncs_write_pulse))
++ | HSMC_BF(NRD_PULSE, ns2cyc(config->nrd_pulse))
++ | HSMC_BF(NCS_RD_PULSE, ns2cyc(config->ncs_read_pulse)));
++ cycle = (HSMC_BF(NWE_CYCLE, ns2cyc(config->write_cycle))
++ | HSMC_BF(NRD_CYCLE, ns2cyc(config->read_cycle)));
++
++ switch (config->bus_width) {
++ case 1:
++ mode = HSMC_BF(DBW, HSMC_DBW_8_BITS);
++ break;
++ case 2:
++ mode = HSMC_BF(DBW, HSMC_DBW_16_BITS);
++ break;
++ case 4:
++ mode = HSMC_BF(DBW, HSMC_DBW_32_BITS);
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ if (config->nrd_controlled)
++ mode |= HSMC_BIT(READ_MODE);
++ if (config->nwe_controlled)
++ mode |= HSMC_BIT(WRITE_MODE);
++ if (config->byte_write)
++ mode |= HSMC_BIT(BAT);
++
++ pr_debug("smc cs%d: setup/%08x pulse/%08x cycle/%08x mode/%08x\n",
++ cs, setup, pulse, cycle, mode);
++
++ offset = cs * 0x10;
++ hsmc_writel(hsmc, SETUP0 + offset, setup);
++ hsmc_writel(hsmc, PULSE0 + offset, pulse);
++ hsmc_writel(hsmc, CYCLE0 + offset, cycle);
++ hsmc_writel(hsmc, MODE0 + offset, mode);
++ hsmc_readl(hsmc, MODE0); /* I/O barrier */
++
++ return 0;
++}
++EXPORT_SYMBOL(smc_set_configuration);
++
++static int hsmc_probe(struct platform_device *pdev)
++{
++ struct resource *regs;
++ struct clk *pclk, *mck;
++ int ret;
++
++ if (hsmc)
++ return -EBUSY;
++
++ regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!regs)
++ return -ENXIO;
++ pclk = clk_get(&pdev->dev, "pclk");
++ if (IS_ERR(pclk))
++ return PTR_ERR(pclk);
++ mck = clk_get(&pdev->dev, "mck");
++ if (IS_ERR(mck)) {
++ ret = PTR_ERR(mck);
++ goto out_put_pclk;
++ }
++
++ ret = -ENOMEM;
++ hsmc = kzalloc(sizeof(struct hsmc), GFP_KERNEL);
++ if (!hsmc)
++ goto out_put_clocks;
++
++ clk_enable(pclk);
++ clk_enable(mck);
++
++ hsmc->pclk = pclk;
++ hsmc->mck = mck;
++ hsmc->regs = ioremap(regs->start, regs->end - regs->start + 1);
++ if (!hsmc->regs)
++ goto out_disable_clocks;
++
++ dev_info(&pdev->dev, "Atmel Static Memory Controller at 0x%08lx\n",
++ (unsigned long)regs->start);
++
++ platform_set_drvdata(pdev, hsmc);
++
++ return 0;
++
++out_disable_clocks:
++ clk_disable(mck);
++ clk_disable(pclk);
++ kfree(hsmc);
++out_put_clocks:
++ clk_put(mck);
++out_put_pclk:
++ clk_put(pclk);
++ hsmc = NULL;
++ return ret;
++}
++
++static struct platform_driver hsmc_driver = {
++ .probe = hsmc_probe,
++ .driver = {
++ .name = "smc",
++ },
++};
++
++static int __init hsmc_init(void)
++{
++ return platform_driver_register(&hsmc_driver);
++}
++arch_initcall(hsmc_init);
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/hsmc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/hsmc.h 2006-12-04 09:33:12.000000000 +0100
+@@ -0,0 +1,127 @@
++/*
++ * Register definitions for Atmel Static Memory Controller (SMC)
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_HSMC_H__
++#define __ASM_AVR32_HSMC_H__
++
++/* HSMC register offsets */
++#define HSMC_SETUP0 0x0000
++#define HSMC_PULSE0 0x0004
++#define HSMC_CYCLE0 0x0008
++#define HSMC_MODE0 0x000c
++#define HSMC_SETUP1 0x0010
++#define HSMC_PULSE1 0x0014
++#define HSMC_CYCLE1 0x0018
++#define HSMC_MODE1 0x001c
++#define HSMC_SETUP2 0x0020
++#define HSMC_PULSE2 0x0024
++#define HSMC_CYCLE2 0x0028
++#define HSMC_MODE2 0x002c
++#define HSMC_SETUP3 0x0030
++#define HSMC_PULSE3 0x0034
++#define HSMC_CYCLE3 0x0038
++#define HSMC_MODE3 0x003c
++#define HSMC_SETUP4 0x0040
++#define HSMC_PULSE4 0x0044
++#define HSMC_CYCLE4 0x0048
++#define HSMC_MODE4 0x004c
++#define HSMC_SETUP5 0x0050
++#define HSMC_PULSE5 0x0054
++#define HSMC_CYCLE5 0x0058
++#define HSMC_MODE5 0x005c
++
++/* Bitfields in SETUP0 */
++#define HSMC_NWE_SETUP_OFFSET 0
++#define HSMC_NWE_SETUP_SIZE 6
++#define HSMC_NCS_WR_SETUP_OFFSET 8
++#define HSMC_NCS_WR_SETUP_SIZE 6
++#define HSMC_NRD_SETUP_OFFSET 16
++#define HSMC_NRD_SETUP_SIZE 6
++#define HSMC_NCS_RD_SETUP_OFFSET 24
++#define HSMC_NCS_RD_SETUP_SIZE 6
++
++/* Bitfields in PULSE0 */
++#define HSMC_NWE_PULSE_OFFSET 0
++#define HSMC_NWE_PULSE_SIZE 7
++#define HSMC_NCS_WR_PULSE_OFFSET 8
++#define HSMC_NCS_WR_PULSE_SIZE 7
++#define HSMC_NRD_PULSE_OFFSET 16
++#define HSMC_NRD_PULSE_SIZE 7
++#define HSMC_NCS_RD_PULSE_OFFSET 24
++#define HSMC_NCS_RD_PULSE_SIZE 7
++
++/* Bitfields in CYCLE0 */
++#define HSMC_NWE_CYCLE_OFFSET 0
++#define HSMC_NWE_CYCLE_SIZE 9
++#define HSMC_NRD_CYCLE_OFFSET 16
++#define HSMC_NRD_CYCLE_SIZE 9
++
++/* Bitfields in MODE0 */
++#define HSMC_READ_MODE_OFFSET 0
++#define HSMC_READ_MODE_SIZE 1
++#define HSMC_WRITE_MODE_OFFSET 1
++#define HSMC_WRITE_MODE_SIZE 1
++#define HSMC_EXNW_MODE_OFFSET 4
++#define HSMC_EXNW_MODE_SIZE 2
++#define HSMC_BAT_OFFSET 8
++#define HSMC_BAT_SIZE 1
++#define HSMC_DBW_OFFSET 12
++#define HSMC_DBW_SIZE 2
++#define HSMC_TDF_CYCLES_OFFSET 16
++#define HSMC_TDF_CYCLES_SIZE 4
++#define HSMC_TDF_MODE_OFFSET 20
++#define HSMC_TDF_MODE_SIZE 1
++#define HSMC_PMEN_OFFSET 24
++#define HSMC_PMEN_SIZE 1
++#define HSMC_PS_OFFSET 28
++#define HSMC_PS_SIZE 2
++
++/* Constants for READ_MODE */
++#define HSMC_READ_MODE_NCS_CONTROLLED 0
++#define HSMC_READ_MODE_NRD_CONTROLLED 1
++
++/* Constants for WRITE_MODE */
++#define HSMC_WRITE_MODE_NCS_CONTROLLED 0
++#define HSMC_WRITE_MODE_NWE_CONTROLLED 1
++
++/* Constants for EXNW_MODE */
++#define HSMC_EXNW_MODE_DISABLED 0
++#define HSMC_EXNW_MODE_RESERVED 1
++#define HSMC_EXNW_MODE_FROZEN 2
++#define HSMC_EXNW_MODE_READY 3
++
++/* Constants for BAT */
++#define HSMC_BAT_BYTE_SELECT 0
++#define HSMC_BAT_BYTE_WRITE 1
++
++/* Constants for DBW */
++#define HSMC_DBW_8_BITS 0
++#define HSMC_DBW_16_BITS 1
++#define HSMC_DBW_32_BITS 2
++
++/* Bit manipulation macros */
++#define HSMC_BIT(name) \
++ (1 << HSMC_##name##_OFFSET)
++#define HSMC_BF(name,value) \
++ (((value) & ((1 << HSMC_##name##_SIZE) - 1)) \
++ << HSMC_##name##_OFFSET)
++#define HSMC_BFEXT(name,value) \
++ (((value) >> HSMC_##name##_OFFSET) \
++ & ((1 << HSMC_##name##_SIZE) - 1))
++#define HSMC_BFINS(name,value,old) \
++ (((old) & ~(((1 << HSMC_##name##_SIZE) - 1) \
++ << HSMC_##name##_OFFSET)) | HSMC_BF(name,value))
++
++/* Register access macros */
++#define hsmc_readl(port,reg) \
++ __raw_readl((port)->regs + HSMC_##reg)
++#define hsmc_writel(port,reg,value) \
++ __raw_writel((value), (port)->regs + HSMC_##reg)
++
++#endif /* __ASM_AVR32_HSMC_H__ */
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/smc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/smc.h 2006-12-04 11:50:22.000000000 +0100
+@@ -0,0 +1,60 @@
++/*
++ * Static Memory Controller for AT32 chips
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * Inspired by the OMAP2 General-Purpose Memory Controller interface
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ARCH_AT32AP_SMC_H
++#define __ARCH_AT32AP_SMC_H
++
++/*
++ * All timing parameters are in nanoseconds.
++ */
++struct smc_config {
++ /* Delay from address valid to assertion of given strobe */
++ u16 ncs_read_setup;
++ u16 nrd_setup;
++ u16 ncs_write_setup;
++ u16 nwe_setup;
++
++ /* Pulse length of given strobe */
++ u16 ncs_read_pulse;
++ u16 nrd_pulse;
++ u16 ncs_write_pulse;
++ u16 nwe_pulse;
++
++ /* Total cycle length of given operation */
++ u16 read_cycle;
++ u16 write_cycle;
++
++ /* Bus width in bytes */
++ u8 bus_width;
++
++ /*
++ * 0: Data is sampled on rising edge of NCS
++ * 1: Data is sampled on rising edge of NRD
++ */
++ unsigned int nrd_controlled:1;
++
++ /*
++ * 0: Data is driven on falling edge of NCS
++ * 1: Data is driven on falling edge of NWR
++ */
++ unsigned int nwe_controlled:1;
++
++ /*
++ * 0: Byte select access type
++ * 1: Byte write access type
++ */
++ unsigned int byte_write:1;
++};
++
++extern int smc_set_configuration(int cs, const struct smc_config *config);
++extern struct smc_config *smc_get_configuration(int cs);
++
++#endif /* __ARCH_AT32AP_SMC_H */
diff --git a/packages/linux/linux-2.6.18/avr32-checkstack.patch b/packages/linux/linux-2.6.18/avr32-checkstack.patch
new file mode 100644
index 0000000000..31d24340c5
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-checkstack.patch
@@ -0,0 +1,35 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Wed Jan 4 16:58:49 2006 +0100
+Subject: [PATCH] AVR32 checkstack port
+
+Add regexes to recognize stack frame adjustments in AVR32 code.
+
+---
+
+ scripts/checkstack.pl | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+Index: linux-2.6.16-avr32/scripts/checkstack.pl
+===================================================================
+--- linux-2.6.16-avr32.orig/scripts/checkstack.pl 2006-03-20 06:53:29.000000000 +0100
++++ linux-2.6.16-avr32/scripts/checkstack.pl 2006-04-03 18:57:19.000000000 +0200
+@@ -12,6 +12,7 @@
+ # sh64 port by Paul Mundt
+ # Random bits by Matt Mackall <mpm@selenic.com>
+ # M68k port by Geert Uytterhoeven and Andreas Schwab
++# AVR32 port by Haavard Skinnemoen <hskinnemoen@atmel.com>
+ #
+ # Usage:
+ # objdump -d vmlinux | stackcheck.pl [arch]
+@@ -37,6 +38,10 @@ my (@stack, $re, $x, $xs);
+ if ($arch eq 'arm') {
+ #c0008ffc: e24dd064 sub sp, sp, #100 ; 0x64
+ $re = qr/.*sub.*sp, sp, #(([0-9]{2}|[3-9])[0-9]{2})/o;
++ } elsif ($arch eq 'avr32') {
++ #8000008a: 20 1d sub sp,4
++ #80000ca8: fa cd 05 b0 sub sp,sp,1456
++ $re = qr/^.*sub.*sp.*,([0-9]{1,8})/o;
+ } elsif ($arch =~ /^i[3456]86$/) {
+ #c0105234: 81 ec ac 05 00 00 sub $0x5ac,%esp
+ $re = qr/^.*[as][du][db] \$(0x$x{1,8}),\%esp$/o;
diff --git a/packages/linux/linux-2.6.18/avr32-dma-controller-framework.patch b/packages/linux/linux-2.6.18/avr32-dma-controller-framework.patch
new file mode 100644
index 0000000000..0f6301303b
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-dma-controller-framework.patch
@@ -0,0 +1,241 @@
+From 740c72fe92a5536060ac6debbfe0a26c0b9b8770 Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Mon, 11 Sep 2006 17:59:59 +0200
+Subject: [PATCH] AVR32: DMA controller framework
+
+This patch puts the DMA controller framework used in earlier BSPs back.
+It was removed before the AVR32 patches went into -mm, and it should
+be removed here as well as soon as we have an alternative.
+
+---
+ arch/avr32/kernel/Makefile | 1
+ arch/avr32/kernel/dma-controller.c | 34 +++++++
+ include/asm-avr32/dma-controller.h | 165 ++++++++++++++++++++++++++++++++++++
+ 3 files changed, 200 insertions(+), 0 deletions(-)
+
+diff --git a/arch/avr32/kernel/Makefile b/arch/avr32/kernel/Makefile
+index 90e5aff..b6afc0c 100644
+--- a/arch/avr32/kernel/Makefile
++++ b/arch/avr32/kernel/Makefile
+@@ -9,6 +9,7 @@ obj-y += syscall_table.o syscall-stub
+ obj-y += setup.o traps.o semaphore.o ptrace.o
+ obj-y += signal.o sys_avr32.o process.o time.o
+ obj-y += init_task.o switch_to.o cpu.o
++obj-y += dma-controller.o
+ obj-$(CONFIG_MODULES) += module.o avr32_ksyms.o
+ obj-$(CONFIG_KPROBES) += kprobes.o
+
+diff --git a/arch/avr32/kernel/dma-controller.c b/arch/avr32/kernel/dma-controller.c
+new file mode 100644
+index 0000000..fb654b3
+--- /dev/null
++++ b/arch/avr32/kernel/dma-controller.c
+@@ -0,0 +1,34 @@
++/*
++ * Preliminary DMA controller framework for AVR32
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <asm/dma-controller.h>
++
++static LIST_HEAD(controllers);
++
++int register_dma_controller(struct dma_controller *dmac)
++{
++ static int next_id;
++
++ dmac->id = next_id++;
++ list_add_tail(&dmac->list, &controllers);
++
++ return 0;
++}
++EXPORT_SYMBOL(register_dma_controller);
++
++struct dma_controller *find_dma_controller(int id)
++{
++ struct dma_controller *dmac;
++
++ list_for_each_entry(dmac, &controllers, list)
++ if (dmac->id == id)
++ return dmac;
++ return NULL;
++}
++EXPORT_SYMBOL(find_dma_controller);
+diff --git a/include/asm-avr32/dma-controller.h b/include/asm-avr32/dma-controller.h
+new file mode 100644
+index 0000000..8c67601
+--- /dev/null
++++ b/include/asm-avr32/dma-controller.h
+@@ -0,0 +1,165 @@
++/*
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __ASM_AVR32_DMA_CONTROLLER_H
++#define __ASM_AVR32_DMA_CONTROLLER_H
++
++#include <linux/device.h>
++
++#define DMA_DIR_MEM_TO_MEM 0x0000
++#define DMA_DIR_MEM_TO_PERIPH 0x0001
++#define DMA_DIR_PERIPH_TO_MEM 0x0002
++#define DMA_DIR_PERIPH_TO_PERIPH 0x0003
++
++#define DMA_WIDTH_8BIT 0
++#define DMA_WIDTH_16BIT 1
++#define DMA_WIDTH_32BIT 2
++
++struct dma_request {
++ struct dma_controller *dmac;
++ struct list_head list;
++
++ unsigned short channel;
++
++ void (*xfer_complete)(struct dma_request *req);
++ void (*block_complete)(struct dma_request *req);
++ void (*error)(struct dma_request *req);
++};
++
++struct dma_request_sg {
++ struct dma_request req;
++
++ int nr_sg;
++ struct scatterlist *sg;
++ unsigned long block_size;
++
++ dma_addr_t data_reg;
++ unsigned short periph_id;
++
++ unsigned char direction;
++ unsigned char width;
++};
++#define to_dma_request_sg(_req) \
++ container_of(_req, struct dma_request_sg, req)
++
++struct dma_request_cyclic {
++ struct dma_request req;
++
++ int periods;
++ unsigned long buffer_size;
++
++ dma_addr_t buffer_start;
++ dma_addr_t data_reg;
++
++ unsigned short periph_id;
++ unsigned char direction;
++ unsigned char width;
++
++ void *dev_id;
++};
++#define to_dma_request_cyclic(_req) \
++ container_of(_req, struct dma_request_cyclic, req)
++
++struct dma_request_memcpy {
++ struct dma_request req;
++
++ dma_addr_t src_addr;
++ unsigned int src_width;
++ unsigned int src_stride;
++
++ dma_addr_t dst_addr;
++ unsigned int dst_width;
++ unsigned int dst_stride;
++
++ size_t length;
++
++ unsigned short src_reverse:1;
++ unsigned short dst_reverse:1;
++};
++#define to_dma_request_memcpy(_req) \
++ container_of(_req, struct dma_request_memcpy, req)
++
++struct dma_controller {
++ struct list_head list;
++ int id;
++ struct device *dev;
++
++ int (*alloc_channel)(struct dma_controller *dmac);
++ void (*release_channel)(struct dma_controller *dmac,
++ int channel);
++ int (*prepare_request_sg)(struct dma_controller *dmac,
++ struct dma_request_sg *req);
++ int (*prepare_request_cyclic)(struct dma_controller *dmac,
++ struct dma_request_cyclic *req);
++ int (*prepare_request_memcpy)(struct dma_controller *dmac,
++ struct dma_request_memcpy *req);
++ int (*start_request)(struct dma_controller *dmac,
++ unsigned int channel);
++ int (*stop_request)(struct dma_controller *dmac,
++ unsigned int channel);
++ dma_addr_t (*get_current_pos)(struct dma_controller *dmac,
++ unsigned int channel);
++};
++
++static inline int
++dma_alloc_channel(struct dma_controller *dmac)
++{
++ return dmac->alloc_channel(dmac);
++}
++
++static inline void
++dma_release_channel(struct dma_controller *dmac, int chan)
++{
++ dmac->release_channel(dmac, chan);
++}
++
++static inline int
++dma_prepare_request_sg(struct dma_controller *dmac,
++ struct dma_request_sg *req)
++{
++ return dmac->prepare_request_sg(dmac, req);
++}
++
++static inline int
++dma_prepare_request_cyclic(struct dma_controller *dmac,
++ struct dma_request_cyclic *req)
++{
++ return dmac->prepare_request_cyclic(dmac, req);
++}
++
++static inline int
++dma_prepare_request_memcpy(struct dma_controller *dmac,
++ struct dma_request_memcpy *req)
++{
++ return dmac->prepare_request_memcpy(dmac, req);
++}
++
++static inline int
++dma_start_request(struct dma_controller *dmac,
++ unsigned int channel)
++{
++ return dmac->start_request(dmac, channel);
++}
++
++static inline int
++dma_stop_request(struct dma_controller *dmac,
++ unsigned int channel)
++{
++ return dmac->stop_request(dmac, channel);
++}
++
++static inline dma_addr_t
++dma_get_current_pos(struct dma_controller *dmac,
++ unsigned int channel)
++{
++ return dmac->get_current_pos(dmac, channel);
++}
++
++extern int register_dma_controller(struct dma_controller *dmac);
++extern struct dma_controller *find_dma_controller(int id);
++
++#endif /* __ASM_AVR32_DMA_CONTROLLER_H */
+--
+1.4.1.1
+
diff --git a/packages/linux/linux-2.6.18/avr32-dont-include-asm-delay-h.patch b/packages/linux/linux-2.6.18/avr32-dont-include-asm-delay-h.patch
new file mode 100644
index 0000000000..b9c5f4d8cf
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-dont-include-asm-delay-h.patch
@@ -0,0 +1,47 @@
+From 53678aca529d43e8fd0443c0c5f7f0807d5fd850 Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Wed, 10 Jan 2007 19:18:06 +0100
+Subject: [PATCH] [AVR32] Don't include asm/delay.h
+
+Remove a couple of asm/delay.h inclusions and replace with
+linux/delay.h where necessary.
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+---
+ arch/avr32/kernel/avr32_ksyms.c | 2 +-
+ arch/avr32/lib/delay.c | 1 -
+ 2 files changed, 1 insertions(+), 2 deletions(-)
+
+diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c
+index 372e3f8..7c4c761 100644
+--- a/arch/avr32/kernel/avr32_ksyms.c
++++ b/arch/avr32/kernel/avr32_ksyms.c
+@@ -7,12 +7,12 @@
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
++#include <linux/delay.h>
+ #include <linux/io.h>
+ #include <linux/module.h>
+
+ #include <asm/checksum.h>
+ #include <asm/uaccess.h>
+-#include <asm/delay.h>
+
+ /*
+ * GCC functions
+diff --git a/arch/avr32/lib/delay.c b/arch/avr32/lib/delay.c
+index 462c830..76a8474 100644
+--- a/arch/avr32/lib/delay.c
++++ b/arch/avr32/lib/delay.c
+@@ -14,7 +14,6 @@
+ #include <linux/module.h>
+ #include <linux/types.h>
+
+-#include <asm/delay.h>
+ #include <asm/processor.h>
+ #include <asm/sysreg.h>
+
+--
+1.4.4.1
+
diff --git a/packages/linux/linux-2.6.18/avr32-drop-GFP_COMP-for-DMA-memory-allocations.patch b/packages/linux/linux-2.6.18/avr32-drop-GFP_COMP-for-DMA-memory-allocations.patch
new file mode 100644
index 0000000000..eea690268c
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-drop-GFP_COMP-for-DMA-memory-allocations.patch
@@ -0,0 +1,27 @@
+Hack for incompatible __GFP_COMP flag making its way into the AVR32
+DMA consistent memory allocator.
+
+This is essentially the same patch as the one submitted by
+Marc Singer <elf@buici.com> for ARM.
+---
+ arch/avr32/mm/dma-coherent.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+Index: linux-2.6.18-avr32/arch/avr32/mm/dma-coherent.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mm/dma-coherent.c 2006-09-11 18:06:00.000000000 +0200
++++ linux-2.6.18-avr32/arch/avr32/mm/dma-coherent.c 2006-09-12 13:38:39.000000000 +0200
+@@ -41,6 +41,13 @@ static struct page *__dma_alloc(struct d
+ struct page *page, *free, *end;
+ int order;
+
++ /* Following is a work-around (a.k.a. hack) to prevent pages
++ * with __GFP_COMP being passed to split_page() which cannot
++ * handle them. The real problem is that this flag probably
++ * should be 0 on AVR32 as it is not supported on this
++ * platform--see CONFIG_HUGETLB_PAGE. */
++ gfp &= ~(__GFP_COMP);
++
+ size = PAGE_ALIGN(size);
+ order = get_order(size);
+
diff --git a/packages/linux/linux-2.6.18/avr32-fix-oprofile-interrupts.patch b/packages/linux/linux-2.6.18/avr32-fix-oprofile-interrupts.patch
new file mode 100644
index 0000000000..93f571d206
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-fix-oprofile-interrupts.patch
@@ -0,0 +1,109 @@
+--- linux-2.6.18.orig/arch/avr32/oprofile/op_model_avr32.c 2006-11-06 14:36:51.000000000 +0100
++++ linux-2.6.18/arch/avr32/oprofile/op_model_avr32.c 2006-11-07 10:05:46.000000000 +0100
+@@ -7,7 +7,7 @@
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+- * Author: Ronny Pedersen
++ * Authors: Sondre Garsjoe, Ronny Pedersen
+ */
+
+ #define DEBUG
+@@ -17,6 +17,7 @@
+ #include <linux/sched.h>
+ #include <linux/oprofile.h>
+ #include <linux/interrupt.h>
++#include <asm/intc.h>
+ #include <asm/irq.h>
+ #include <asm/system.h>
+ #include <asm/sysreg.h>
+@@ -49,7 +50,7 @@
+ #define PCNT0_F (1 << 9)
+ #define PCNT1_F (1 << 10)
+
+-#define AVR32_PC_IRQ 1
++#define AVR32_PC_IRQ 0
+
+ static const u32 int_mask[MAX_COUNTERS] = { PCCNT_IE, PCNT0_IE, PCNT1_IE };
+ static const u32 ovf_mask[MAX_COUNTERS] = { PCCNT_F, PCNT0_F, PCNT1_F };
+@@ -58,38 +59,37 @@
+
+ static void write_pccr(u32 val)
+ {
+- __builtin_mtsr(SYSREG_PCCR, val);
++ sysreg_write(PCCR, val);
+ }
+
+ static u32 read_pccr(void)
+ {
+- return __builtin_mfsr(SYSREG_PCCR);
++ return sysreg_read(PCCR);
+ }
+
+ static u32 read_counter(int counter)
+ {
+ switch (counter) {
+ case PCCNT:
+- return __builtin_mfsr(SYSREG_PCCNT);
++ return sysreg_read(PCCNT);
+ case PCNT0:
+- return __builtin_mfsr(SYSREG_PCNT0);
++ return sysreg_read(PCNT0);
+ case PCNT1:
+- return __builtin_mfsr(SYSREG_PCNT0);
++ return sysreg_read(PCNT1);
+ default:
+ return 0;
+ }
+ }
+
+-
+ static void write_counter(int counter, u32 val)
+ {
+ switch (counter) {
+ case PCCNT:
+- __builtin_mtsr(SYSREG_PCCNT, val);
++ sysreg_write(PCCNT, val);
+ case PCNT0:
+- __builtin_mtsr(SYSREG_PCNT0, val);
++ sysreg_write(PCNT0, val);
+ case PCNT1:
+- __builtin_mtsr(SYSREG_PCNT0, val);
++ sysreg_write(PCNT1, val);
+ default:
+ break;
+ }
+@@ -144,12 +144,15 @@
+ }
+ }
+
+-
+ static irqreturn_t avr32_pc_interrupt(int irq, void *arg,
+ struct pt_regs *regs)
+ {
+ int i;
+
++ /* Check if this is a performance counter interrupt */
++ if (!(intc_get_pending(irq) & 2))
++ return IRQ_NONE;
++
+ check_ctrs();
+
+ for (i = PCCNT; i < MAX_COUNTERS; i++) {
+@@ -179,7 +182,7 @@
+ int i, ret;
+ u32 pccr = read_pccr();
+
+- ret = request_irq(AVR32_PC_IRQ, avr32_pc_interrupt, SA_INTERRUPT,
++ ret = request_irq(AVR32_PC_IRQ, avr32_pc_interrupt, IRQF_SHARED | IRQF_DISABLED,
+ "AVR32 Performance Counter", (void *)results);
+
+ if (ret < 0) {
+@@ -214,6 +217,6 @@
+ .start = avr32_pc_start,
+ .stop = avr32_pc_stop,
+ .num_counters = MAX_COUNTERS,
+- .name = "avr32",
++ .name = "avr32/at32ap7000",
+ };
+
diff --git a/packages/linux/linux-2.6.18/avr32-gpio-dev.patch b/packages/linux/linux-2.6.18/avr32-gpio-dev.patch
new file mode 100644
index 0000000000..43971cf4e6
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-gpio-dev.patch
@@ -0,0 +1,548 @@
+---
+ arch/avr32/mach-at32ap/Kconfig | 8
+ arch/avr32/mach-at32ap/pio.c | 499 ++++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 506 insertions(+), 1 deletion(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-29 16:22:14.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-29 16:29:20.000000000 +0100
+@@ -22,7 +22,7 @@
+
+ struct pio_device {
+ void __iomem *regs;
+- const struct platform_device *pdev;
++ struct platform_device *pdev;
+ struct clk *clk;
+ u32 pinmux_mask;
+ u32 gpio_mask;
+@@ -119,6 +119,34 @@ fail:
+ dump_stack();
+ }
+
++static unsigned int pio_id(struct pio_device *pio)
++{
++ return pio - pio_dev;
++}
++
++static void __enable_gpio(struct pio_device *pio, u32 mask)
++{
++ pio_writel(pio, PUER, mask);
++ pio_writel(pio, ODR, mask);
++ pio_writel(pio, PER, mask);
++}
++
++static void __disable_gpio(struct pio_device *pio, u32 mask)
++{
++ pio_writel(pio, PUER, mask);
++ pio_writel(pio, ODR, mask);
++}
++
++static void pio_dealloc_mask(struct pio_device *pio, u32 mask)
++{
++ u32 old, new;
++
++ do {
++ old = pio->pinmux_mask;
++ new = old & ~mask;
++ } while (cmpxchg(&pio->pinmux_mask, old, new) != old);
++}
++
+ /* GPIO API */
+
+ int gpio_request(unsigned int gpio, const char *label)
+@@ -210,6 +238,475 @@ void gpio_set_value(unsigned int gpio, i
+ }
+ EXPORT_SYMBOL(gpio_set_value);
+
++#ifdef CONFIG_PIO_DEV
++#include <linux/configfs.h>
++#include <linux/cdev.h>
++#include <linux/uaccess.h>
++
++#define GPIO_DEV_MAX 8
++
++static struct class *gpio_dev_class;
++static dev_t gpio_devt;
++
++struct gpio_item {
++ spinlock_t lock;
++
++ /* Too bad we don't have committable items... */
++ int enabled;
++
++ struct pio_device *pio;
++ u32 pin_mask;
++
++ int id;
++ struct class_device *gpio_dev;
++ struct cdev char_dev;
++ struct config_item item;
++};
++
++struct gpio_attribute {
++ struct configfs_attribute attr;
++ ssize_t (*show)(struct gpio_item *, char *);
++ ssize_t (*store)(struct gpio_item *, const char *, size_t);
++};
++
++static int gpio_dev_open(struct inode *inode, struct file *file)
++{
++ struct gpio_item *gpio = container_of(inode->i_cdev,
++ struct gpio_item,
++ char_dev);
++
++ config_item_get(&gpio->item);
++ file->private_data = gpio;
++ return 0;
++}
++
++static int gpio_dev_release(struct inode *inode, struct file *file)
++{
++ struct gpio_item *gpio = file->private_data;
++
++ config_item_put(&gpio->item);
++ return 0;
++}
++
++static ssize_t gpio_dev_read(struct file *file, char __user *buf,
++ size_t count, loff_t *offset)
++{
++ struct gpio_item *gpio = file->private_data;
++ u32 value;
++
++ value = pio_readl(gpio->pio, PDSR) & gpio->pin_mask;
++
++ count = min(count, (size_t)4);
++ if (copy_to_user(buf, &value, count))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t gpio_dev_write(struct file *file, const char __user *buf,
++ size_t count, loff_t *offset)
++{
++ struct gpio_item *gpio = file->private_data;
++ u32 value = 0;
++ u32 mask = ~0UL;
++
++ count = min(count, (size_t)4);
++ if (copy_from_user(&value, buf, count))
++ return -EFAULT;
++
++ /* Assuming big endian */
++ mask <<= (4 - count) * 8;
++ mask &= gpio->pin_mask;
++
++ pio_writel(gpio->pio, CODR, ~value & mask);
++ pio_writel(gpio->pio, SODR, value & mask);
++
++ return count;
++}
++
++static struct file_operations gpio_dev_fops = {
++ .owner = THIS_MODULE,
++ .llseek = no_llseek,
++ .open = gpio_dev_open,
++ .release = gpio_dev_release,
++ .read = gpio_dev_read,
++ .write = gpio_dev_write,
++};
++
++static struct gpio_item *to_gpio_item(struct config_item *item)
++{
++ return item ? container_of(item, struct gpio_item, item) : NULL;
++}
++
++static ssize_t gpio_show_gpio_id(struct gpio_item *gpio, char *page)
++{
++ if (gpio->pio)
++ return sprintf(page, "%u\n", pio_id(gpio->pio));
++ else
++ return sprintf(page, "-1\n");
++}
++
++static ssize_t gpio_store_gpio_id(struct gpio_item *gpio,
++ const char *page, size_t count)
++{
++ unsigned long id;
++ char *p = (char *)page;
++ ssize_t ret = -EINVAL;
++
++ id = simple_strtoul(p, &p, 0);
++ if (!p || (*p && (*p != '\n')))
++ return -EINVAL;
++
++ /* Switching PIO is not allowed when live... */
++ spin_lock(&gpio->lock);
++ if (!gpio->enabled) {
++ ret = -ENXIO;
++ if ((id < MAX_NR_PIO_DEVICES) && pio_dev[id].regs) {
++ gpio->pio = &pio_dev[id];
++ ret = count;
++ }
++ }
++ spin_unlock(&gpio->lock);
++
++ return ret;
++}
++
++static ssize_t gpio_show_pin_mask(struct gpio_item *gpio, char *page)
++{
++ return sprintf(page, "0x%08x\n", gpio->pin_mask);
++}
++
++static ssize_t gpio_store_pin_mask(struct gpio_item *gpio,
++ const char *page, size_t count)
++{
++ struct pio_device *pio;
++ u32 old_mask, new_mask;
++ u32 old, new;
++ char *p = (char *)page;
++ ssize_t ret = -EINVAL;
++
++ new_mask = simple_strtoul(p, &p, 0);
++ if (!p || (*p && (*p != '\n')))
++ return -EINVAL;
++
++ /*
++ * Must have a PIO before we can start allocating pins, but we
++ * must not be live.
++ */
++ spin_lock(&gpio->lock);
++ pio = gpio->pio;
++ if (!pio || gpio->enabled)
++ goto out;
++
++ ret = -EBUSY;
++ old_mask = gpio->pin_mask;
++ do {
++ old = pio->pinmux_mask;
++ if ((old & ~old_mask) & new_mask)
++ goto out;
++
++ new = (old & ~old_mask) | new_mask;
++ } while (cmpxchg(&pio->pinmux_mask, old, new) != old);
++
++ gpio->pin_mask = new_mask;
++ __disable_gpio(pio, old_mask);
++ __enable_gpio(pio, new_mask);
++ ret = count;
++
++out:
++ spin_unlock(&gpio->lock);
++ return ret;
++}
++
++static ssize_t gpio_show_oe_mask(struct gpio_item *gpio, char *page)
++{
++ u32 mask = 0;
++
++ spin_lock(&gpio->lock);
++ if (gpio->pio) {
++ mask = pio_readl(gpio->pio, OSR);
++ mask &= gpio->pin_mask;
++ }
++ spin_unlock(&gpio->lock);
++
++ return sprintf(page, "0x%08x\n", mask);
++}
++
++static ssize_t gpio_store_oe_mask(struct gpio_item *gpio,
++ const char *page, size_t count)
++{
++ u32 mask;
++ char *p = (char *)page;
++ ssize_t ret = -EINVAL;
++
++ mask = simple_strtoul(p, &p, 0);
++ if (!p || (*p && (*p != '\n')))
++ return -EINVAL;
++
++ spin_lock(&gpio->lock);
++ if (gpio->pio) {
++ mask &= gpio->pin_mask;
++ pio_writel(gpio->pio, ODR, mask ^ gpio->pin_mask);
++ pio_writel(gpio->pio, OER, mask);
++ ret = count;
++ }
++ spin_unlock(&gpio->lock);
++
++ return ret;
++}
++
++static ssize_t gpio_show_enabled(struct gpio_item *gpio, char *page)
++{
++ return sprintf(page, "%d\n", gpio->enabled);
++}
++
++static ssize_t gpio_store_enabled(struct gpio_item *gpio,
++ const char *page, size_t count)
++{
++ char *p = (char *)page;
++ int enabled;
++ int ret;
++
++ enabled = simple_strtoul(p, &p, 0);
++ if (!p || (*p && (*p != '\n')))
++ return -EINVAL;
++
++ /* make it a boolean value */
++ enabled = !!enabled;
++
++ if (gpio->enabled == enabled)
++ /* Already enabled; do nothing. */
++ return count;
++
++ BUG_ON(gpio->id >= GPIO_DEV_MAX);
++
++ if (!enabled) {
++ class_device_unregister(gpio->gpio_dev);
++ cdev_del(&gpio->char_dev);
++ }
++
++ /* Disallow any updates to gpio_id or pin_mask */
++ spin_lock(&gpio->lock);
++ gpio->enabled = enabled;
++ spin_unlock(&gpio->lock);
++
++ if (!enabled)
++ return count;
++
++ cdev_init(&gpio->char_dev, &gpio_dev_fops);
++ gpio->char_dev.owner = THIS_MODULE;
++ ret = cdev_add(&gpio->char_dev, MKDEV(MAJOR(gpio_devt), gpio->id), 1);
++ if (ret < 0)
++ goto err_cdev_add;
++ gpio->gpio_dev = class_device_create(gpio_dev_class, NULL,
++ MKDEV(MAJOR(gpio_devt), gpio->id),
++ &gpio->pio->pdev->dev,
++ "gpio%d", gpio->id);
++ if (IS_ERR(gpio->gpio_dev)) {
++ printk(KERN_ERR "failed to create gpio%d\n", gpio->id);
++ ret = PTR_ERR(gpio->gpio_dev);
++ goto err_class_dev;
++ }
++
++ printk(KERN_INFO "created gpio%d (pio%d/0x%08x) as (%d:%d)\n",
++ gpio->id, pio_id(gpio->pio), gpio->pin_mask,
++ MAJOR(gpio->gpio_dev->devt), MINOR(gpio->gpio_dev->devt));
++
++ return 0;
++
++err_class_dev:
++ cdev_del(&gpio->char_dev);
++err_cdev_add:
++ spin_lock(&gpio->lock);
++ gpio->enabled = 0;
++ spin_unlock(&gpio->lock);
++
++ return ret;
++}
++
++static struct gpio_attribute gpio_item_attr_gpio_id = {
++ .attr = {
++ .ca_owner = THIS_MODULE,
++ .ca_name = "gpio_id",
++ .ca_mode = S_IRUGO | S_IWUSR,
++ },
++ .show = gpio_show_gpio_id,
++ .store = gpio_store_gpio_id,
++};
++static struct gpio_attribute gpio_item_attr_pin_mask = {
++ .attr = {
++ .ca_owner = THIS_MODULE,
++ .ca_name = "pin_mask",
++ .ca_mode = S_IRUGO | S_IWUSR,
++ },
++ .show = gpio_show_pin_mask,
++ .store = gpio_store_pin_mask,
++};
++static struct gpio_attribute gpio_item_attr_oe_mask = {
++ .attr = {
++ .ca_owner = THIS_MODULE,
++ .ca_name = "oe_mask",
++ .ca_mode = S_IRUGO | S_IWUSR,
++ },
++ .show = gpio_show_oe_mask,
++ .store = gpio_store_oe_mask,
++};
++static struct gpio_attribute gpio_item_attr_enabled = {
++ .attr = {
++ .ca_owner = THIS_MODULE,
++ .ca_name = "enabled",
++ .ca_mode = S_IRUGO | S_IWUSR,
++ },
++ .show = gpio_show_enabled,
++ .store = gpio_store_enabled,
++};
++
++static struct configfs_attribute *gpio_item_attrs[] = {
++ &gpio_item_attr_gpio_id.attr,
++ &gpio_item_attr_pin_mask.attr,
++ &gpio_item_attr_oe_mask.attr,
++ &gpio_item_attr_enabled.attr,
++ NULL,
++};
++
++static ssize_t gpio_show_attr(struct config_item *item,
++ struct configfs_attribute *attr,
++ char *page)
++{
++ struct gpio_item *gpio_item = to_gpio_item(item);
++ struct gpio_attribute *gpio_attr
++ = container_of(attr, struct gpio_attribute, attr);
++ ssize_t ret = 0;
++
++ if (gpio_attr->show)
++ ret = gpio_attr->show(gpio_item, page);
++ return ret;
++}
++
++static ssize_t gpio_store_attr(struct config_item *item,
++ struct configfs_attribute *attr,
++ const char *page, size_t count)
++{
++ struct gpio_item *gpio_item = to_gpio_item(item);
++ struct gpio_attribute *gpio_attr
++ = container_of(attr, struct gpio_attribute, attr);
++ ssize_t ret = -EINVAL;
++
++ if (gpio_attr->store)
++ ret = gpio_attr->store(gpio_item, page, count);
++ return ret;
++}
++
++static void gpio_release(struct config_item *item)
++{
++ kfree(to_gpio_item(item));
++}
++
++static struct configfs_item_operations gpio_item_ops = {
++ .release = gpio_release,
++ .show_attribute = gpio_show_attr,
++ .store_attribute = gpio_store_attr,
++};
++
++static struct config_item_type gpio_item_type = {
++ .ct_item_ops = &gpio_item_ops,
++ .ct_attrs = gpio_item_attrs,
++ .ct_owner = THIS_MODULE,
++};
++
++static struct config_item *gpio_make_item(struct config_group *group,
++ const char *name)
++{
++ static int next_id;
++ struct gpio_item *gpio;
++
++ if (next_id >= GPIO_DEV_MAX)
++ return NULL;
++
++ gpio = kzalloc(sizeof(struct gpio_item), GFP_KERNEL);
++ if (!gpio)
++ return NULL;
++
++ gpio->id = next_id++;
++ config_item_init_type_name(&gpio->item, name, &gpio_item_type);
++ spin_lock_init(&gpio->lock);
++
++ return &gpio->item;
++}
++
++static void gpio_drop_item(struct config_group *group,
++ struct config_item *item)
++{
++ struct gpio_item *gpio = to_gpio_item(item);
++ struct pio_device *pio;
++
++ spin_lock(&gpio->lock);
++ if (gpio->enabled) {
++ class_device_unregister(gpio->gpio_dev);
++ cdev_del(&gpio->char_dev);
++ }
++
++ pio = gpio->pio;
++ if (pio) {
++ __disable_gpio(pio, gpio->pin_mask);
++ pio_dealloc_mask(pio, gpio->pin_mask);
++ gpio->pio = NULL;
++ }
++ spin_unlock(&gpio->lock);
++}
++
++static struct configfs_group_operations gpio_group_ops = {
++ .make_item = gpio_make_item,
++ .drop_item = gpio_drop_item,
++};
++
++static struct config_item_type gpio_group_type = {
++ .ct_group_ops = &gpio_group_ops,
++ .ct_owner = THIS_MODULE,
++};
++
++static struct configfs_subsystem gpio_subsys = {
++ .su_group = {
++ .cg_item = {
++ .ci_namebuf = "gpio",
++ .ci_type = &gpio_group_type,
++ },
++ },
++};
++
++static int __init pio_init_dev(void)
++{
++ int err;
++
++ gpio_dev_class = class_create(THIS_MODULE, "gpio-dev");
++ if (IS_ERR(gpio_dev_class)) {
++ err = PTR_ERR(gpio_dev_class);
++ goto err_class_create;
++ }
++
++ err = alloc_chrdev_region(&gpio_devt, 0, GPIO_DEV_MAX, "gpio");
++ if (err < 0)
++ goto err_alloc_chrdev;
++
++ /* Configfs initialization */
++ config_group_init(&gpio_subsys.su_group);
++ init_MUTEX(&gpio_subsys.su_sem);
++ err = configfs_register_subsystem(&gpio_subsys);
++ if (err)
++ goto err_register_subsys;
++
++ return 0;
++
++err_register_subsys:
++ unregister_chrdev_region(gpio_devt, GPIO_DEV_MAX);
++err_alloc_chrdev:
++ class_destroy(gpio_dev_class);
++err_class_create:
++ printk(KERN_WARNING "Failed to initialize gpio /dev interface\n");
++ return err;
++}
++late_initcall(pio_init_dev);
++#endif /* CONFIG_PIO_DEV */
++
+ static int __init pio_probe(struct platform_device *pdev)
+ {
+ struct pio_device *pio = NULL;
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/Kconfig 2006-11-29 16:23:31.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/Kconfig 2006-11-29 16:24:35.000000000 +0100
+@@ -2,6 +2,14 @@ if PLATFORM_AT32AP
+
+ menu "Atmel AVR32 AP options"
+
++config PIO_DEV
++ bool "PIO /dev interface"
++ select CONFIGFS_FS
++ default y
++ help
++ Say `Y' to enable a /dev interface to the Parallel I/O
++ Controller.
++
+ endmenu
+
+ endif
diff --git a/packages/linux/linux-2.6.18/avr32-increment-pointer-when-parsing-for-fbmem_start.patch b/packages/linux/linux-2.6.18/avr32-increment-pointer-when-parsing-for-fbmem_start.patch
new file mode 100644
index 0000000000..e755b47442
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-increment-pointer-when-parsing-for-fbmem_start.patch
@@ -0,0 +1,16 @@
+Index: linux-2.6.18/arch/avr32/kernel/setup.c
+===================================================================
+--- linux-2.6.18.orig/arch/avr32/kernel/setup.c 2006-12-20 12:45:12.000000000 +0100
++++ linux-2.6.18/arch/avr32/kernel/setup.c 2006-12-20 12:45:24.000000000 +0100
+@@ -103,8 +103,10 @@
+ static int __init early_parse_fbmem(char *p)
+ {
+ fbmem_size = memparse(p, &p);
+- if (*p == '@')
++ if (*p == '@') {
++ p++;
+ fbmem_start = memparse(p, &p);
++ }
+ return 0;
+ }
+ early_param("fbmem", early_parse_fbmem);
diff --git a/packages/linux/linux-2.6.18/avr32-little-endian-read-write-bwl.patch b/packages/linux/linux-2.6.18/avr32-little-endian-read-write-bwl.patch
new file mode 100644
index 0000000000..5e9b75219a
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-little-endian-read-write-bwl.patch
@@ -0,0 +1,128 @@
+---
+ include/asm-avr32/io.h | 73 ++++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 49 insertions(+), 24 deletions(-)
+
+Index: linux-2.6.18-avr32/include/asm-avr32/io.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/asm-avr32/io.h 2006-11-02 16:40:37.000000000 +0100
++++ linux-2.6.18-avr32/include/asm-avr32/io.h 2006-11-03 17:58:06.000000000 +0100
+@@ -5,6 +5,8 @@
+
+ #ifdef __KERNEL__
+
++#include <linux/types.h>
++
+ #include <asm/addrspace.h>
+ #include <asm/byteorder.h>
+
+@@ -36,37 +38,64 @@ extern void __raw_readsb(unsigned int ad
+ extern void __raw_readsw(unsigned int addr, void *data, int wordlen);
+ extern void __raw_readsl(unsigned int addr, void *data, int longlen);
+
+-static inline void writeb(unsigned char b, volatile void __iomem *addr)
++static inline void __raw_writeb(u8 v, volatile void __iomem *addr)
++{
++ *(volatile u8 __force *)addr = v;
++}
++static inline void __raw_writew(u16 v, volatile void __iomem *addr)
++{
++ *(volatile u16 __force *)addr = v;
++}
++static inline void __raw_writel(u32 v, volatile void __iomem *addr)
++{
++ *(volatile u32 __force *)addr = v;
++}
++
++static inline u8 __raw_readb(const volatile void __iomem *addr)
+ {
+- *(volatile unsigned char __force *)addr = b;
++ return *(const volatile u8 __force *)addr;
+ }
+-static inline void writew(unsigned short b, volatile void __iomem *addr)
++static inline u16 __raw_readw(const volatile void __iomem *addr)
+ {
+- *(volatile unsigned short __force *)addr = b;
++ return *(const volatile u16 __force *)addr;
+ }
+-static inline void writel(unsigned int b, volatile void __iomem *addr)
++static inline u32 __raw_readl(const volatile void __iomem *addr)
+ {
+- *(volatile unsigned int __force *)addr = b;
++ return *(const volatile u32 __force *)addr;
+ }
+-#define __raw_writeb writeb
+-#define __raw_writew writew
+-#define __raw_writel writel
+
+-static inline unsigned char readb(const volatile void __iomem *addr)
++#define __swizzle_addr_b(addr) \
++ ((typeof(addr))((unsigned long)(addr) ^ 3UL))
++#define __swizzle_addr_w(addr) \
++ ((typeof(addr))((unsigned long)(addr) ^ 2UL))
++#define __swizzle_addr_l(addr) \
++ (addr)
++
++static inline void writeb(u8 v, volatile void __iomem *addr)
+ {
+- return *(const volatile unsigned char __force *)addr;
++ __raw_writeb(v, __swizzle_addr_b(addr));
+ }
+-static inline unsigned short readw(const volatile void __iomem *addr)
++static inline void writew(u16 v, volatile void __iomem *addr)
+ {
+- return *(const volatile unsigned short __force *)addr;
++ __raw_writew(v, __swizzle_addr_w(addr));
+ }
+-static inline unsigned int readl(const volatile void __iomem *addr)
++static inline void writel(u32 v, volatile void __iomem *addr)
+ {
+- return *(const volatile unsigned int __force *)addr;
++ __raw_writel(v, __swizzle_addr_l(addr));
++}
++
++static inline u8 readb(const volatile void __iomem *addr)
++{
++ return __raw_readb(__swizzle_addr_b(addr));
++}
++static inline u16 readw(const volatile void __iomem *addr)
++{
++ return __raw_readw(__swizzle_addr_w(addr));
++}
++static inline u32 readl(const volatile void __iomem *addr)
++{
++ return __raw_readl(__swizzle_addr_l(addr));
+ }
+-#define __raw_readb readb
+-#define __raw_readw readw
+-#define __raw_readl readl
+
+ #define writesb(p, d, l) __raw_writesb((unsigned int)p, d, l)
+ #define writesw(p, d, l) __raw_writesw((unsigned int)p, d, l)
+@@ -108,17 +137,13 @@ static inline unsigned int readl(const v
+
+ #endif
+
+-
+-/*
+- * These two are only here because ALSA _thinks_ it needs them...
+- */
+ static inline void memcpy_fromio(void * to, const volatile void __iomem *from,
+ unsigned long count)
+ {
+ char *p = to;
+ while (count) {
+ count--;
+- *p = readb(from);
++ *p = __raw_readb(from);
+ p++;
+ from++;
+ }
+@@ -130,7 +155,7 @@ static inline void memcpy_toio(volatile
+ const char *p = from;
+ while (count) {
+ count--;
+- writeb(*p, to);
++ __raw_writeb(*p, to);
+ p++;
+ to++;
+ }
diff --git a/packages/linux/linux-2.6.18/avr32-move-ethernet-tag-parsing-to-board-specific-code.patch b/packages/linux/linux-2.6.18/avr32-move-ethernet-tag-parsing-to-board-specific-code.patch
new file mode 100644
index 0000000000..03e08785f0
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-move-ethernet-tag-parsing-to-board-specific-code.patch
@@ -0,0 +1,94 @@
+From 736c9c38e8a681d0ecfc4dafe15fcb955fe66a29 Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Tue, 24 Oct 2006 09:34:48 +0200
+Subject: [PATCH] AVR32: Move ethernet tag parsing to board-specific code
+
+By moving the ethernet tag parsing to the board-specific code we avoid
+the issue of figuring out which device we're supposed to attach the
+information to. The board specific code knows this because it's
+where the actual devices are instantiated.
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+---
+ arch/avr32/boards/atstk1000/atstk1002.c | 26 ++++++++++++++++++++------
+ arch/avr32/kernel/setup.c | 24 ------------------------
+ 2 files changed, 20 insertions(+), 30 deletions(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/boards/atstk1000/atstk1002.c 2006-11-01 13:26:19.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c 2006-11-01 13:33:38.000000000 +0100
+@@ -8,18 +8,32 @@
+ * published by the Free Software Foundation.
+ */
+ #include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/string.h>
++#include <linux/types.h>
+
++#include <asm/setup.h>
+ #include <asm/arch/board.h>
+
+-struct eth_platform_data __initdata eth0_data = {
+- .valid = 1,
+- .mii_phy_addr = 0x10,
+- .is_rmii = 0,
+- .hw_addr = { 0x6a, 0x87, 0x71, 0x14, 0xcd, 0xcb },
+-};
++static struct eth_platform_data __initdata eth_data[2];
+
+ extern struct lcdc_platform_data atstk1000_fb0_data;
+
++static int __init parse_tag_ethernet(struct tag *tag)
++{
++ int i;
++
++ i = tag->u.ethernet.mac_index;
++ if (i < ARRAY_SIZE(eth_data)) {
++ eth_data[i].mii_phy_addr = tag->u.ethernet.mii_phy_addr;
++ memcpy(&eth_data[i].hw_addr, tag->u.ethernet.hw_address,
++ sizeof(eth_data[i].hw_addr));
++ eth_data[i].valid = 1;
++ }
++ return 0;
++}
++__tagtable(ATAG_ETHERNET, parse_tag_ethernet);
++
+ static int __init atstk1002_init(void)
+ {
+ at32_add_system_devices();
+Index: linux-2.6.18-avr32/arch/avr32/kernel/setup.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/kernel/setup.c 2006-11-01 13:26:19.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/kernel/setup.c 2006-11-01 13:31:32.000000000 +0100
+@@ -229,30 +229,6 @@ static int __init parse_tag_rsvd_mem(str
+ }
+ __tagtable(ATAG_RSVD_MEM, parse_tag_rsvd_mem);
+
+-static int __init parse_tag_ethernet(struct tag *tag)
+-{
+-#if 0
+- const struct platform_device *pdev;
+-
+- /*
+- * We really need a bus type that supports "classes"...this
+- * will do for now (until we must handle other kinds of
+- * ethernet controllers)
+- */
+- pdev = platform_get_device("macb", tag->u.ethernet.mac_index);
+- if (pdev && pdev->dev.platform_data) {
+- struct eth_platform_data *data = pdev->dev.platform_data;
+-
+- data->valid = 1;
+- data->mii_phy_addr = tag->u.ethernet.mii_phy_addr;
+- memcpy(data->hw_addr, tag->u.ethernet.hw_address,
+- sizeof(data->hw_addr));
+- }
+-#endif
+- return 0;
+-}
+-__tagtable(ATAG_ETHERNET, parse_tag_ethernet);
+-
+ /*
+ * Scan the tag table for this tag, and call its parse function. The
+ * tag table is built by the linker from all the __tagtable
diff --git a/packages/linux/linux-2.6.18/avr32-network-gateway-support.patch b/packages/linux/linux-2.6.18/avr32-network-gateway-support.patch
new file mode 100644
index 0000000000..420e859bd4
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-network-gateway-support.patch
@@ -0,0 +1,233 @@
+From 16655aecb1a151c1f1707c64a571cd06e6a194af Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Mon, 30 Oct 2006 09:35:44 +0100
+Subject: [PATCH] Add support for the AVR32 Network Gateway
+---
+ arch/avr32/Kconfig | 3 +
+ arch/avr32/Makefile | 1
+ arch/avr32/boards/atngw/Makefile | 1
+ arch/avr32/boards/atngw/flash.c | 95 +++++++++++++++++++++++++++++++++++++++
+ arch/avr32/boards/atngw/setup.c | 81 +++++++++++++++++++++++++++++++++
+ 5 files changed, 181 insertions(+)
+
+Index: linux-2.6.18/arch/avr32/Kconfig
+===================================================================
+--- linux-2.6.18.orig/arch/avr32/Kconfig 2006-12-13 09:45:34.000000000 +0100
++++ linux-2.6.18/arch/avr32/Kconfig 2006-12-13 09:45:34.000000000 +0100
+@@ -97,6 +97,9 @@
+ config BOARD_ATSTK1000
+ bool "ATSTK1000 evaluation board"
+ select BOARD_ATSTK1002 if CPU_AT32AP7000
++
++config BOARD_ATNGW
++ bool "AVR32 Network Gateway"
+ endchoice
+
+ choice
+Index: linux-2.6.18/arch/avr32/Makefile
+===================================================================
+--- linux-2.6.18.orig/arch/avr32/Makefile 2006-12-13 09:45:34.000000000 +0100
++++ linux-2.6.18/arch/avr32/Makefile 2006-12-13 09:45:34.000000000 +0100
+@@ -27,6 +27,7 @@
+ head-y += arch/avr32/kernel/head.o
+ core-$(CONFIG_PLATFORM_AT32AP) += arch/avr32/mach-at32ap/
+ core-$(CONFIG_BOARD_ATSTK1000) += arch/avr32/boards/atstk1000/
++core-$(CONFIG_BOARD_ATNGW) += arch/avr32/boards/atngw/
+ core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/
+ core-y += arch/avr32/kernel/
+ core-y += arch/avr32/mm/
+Index: linux-2.6.18/arch/avr32/boards/atngw/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18/arch/avr32/boards/atngw/Makefile 2006-12-13 09:45:34.000000000 +0100
+@@ -0,0 +1 @@
++obj-y += setup.o flash.o
+Index: linux-2.6.18/arch/avr32/boards/atngw/flash.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18/arch/avr32/boards/atngw/flash.c 2006-12-13 09:45:34.000000000 +0100
+@@ -0,0 +1,95 @@
++/*
++ * ATNGW board-specific flash initialization
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/mtd/physmap.h>
++
++#include <asm/arch/smc.h>
++
++static struct smc_config flash_config __initdata = {
++ .ncs_read_setup = 0,
++ .nrd_setup = 40,
++ .ncs_write_setup = 0,
++ .nwe_setup = 10,
++
++ .ncs_read_pulse = 80,
++ .nrd_pulse = 40,
++ .ncs_write_pulse = 65,
++ .nwe_pulse = 55,
++
++ .read_cycle = 120,
++ .write_cycle = 120,
++
++ .bus_width = 2,
++ .nrd_controlled = 1,
++ .nwe_controlled = 1,
++ .byte_write = 1,
++};
++
++static struct mtd_partition flash_parts[] = {
++ {
++ .name = "u-boot",
++ .offset = 0x00000000,
++ .size = 0x00020000, /* 128 KiB */
++ .mask_flags = MTD_WRITEABLE,
++ },
++ {
++ .name = "root",
++ .offset = 0x00020000,
++ .size = 0x007d0000,
++ },
++ {
++ .name = "env",
++ .offset = 0x007f0000,
++ .size = 0x00010000,
++ .mask_flags = MTD_WRITEABLE,
++ },
++};
++
++static struct physmap_flash_data flash_data = {
++ .width = 2,
++ .nr_parts = ARRAY_SIZE(flash_parts),
++ .parts = flash_parts,
++};
++
++static struct resource flash_resource = {
++ .start = 0x00000000,
++ .end = 0x007fffff,
++ .flags = IORESOURCE_MEM,
++};
++
++static struct platform_device flash_device = {
++ .name = "physmap-flash",
++ .id = 0,
++ .resource = &flash_resource,
++ .num_resources = 1,
++ .dev = {
++ .platform_data = &flash_data,
++ },
++};
++
++/* This needs to be called after the SMC has been initialized */
++static int __init atngw_flash_init(void)
++{
++ int ret;
++
++ ret = smc_set_configuration(0, &flash_config);
++ if (ret < 0) {
++ printk(KERN_ERR "atngw: failed to set NOR flash timing\n");
++ return ret;
++ }
++
++ platform_device_register(&flash_device);
++
++ return 0;
++}
++device_initcall(atngw_flash_init);
+Index: linux-2.6.18/arch/avr32/boards/atngw/setup.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18/arch/avr32/boards/atngw/setup.c 2006-12-13 09:59:44.000000000 +0100
+@@ -0,0 +1,84 @@
++/*
++ * Board-specific setup code for the Atmel Network Gateway
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/bootmem.h>
++#include <linux/device.h>
++#include <linux/init.h>
++#include <linux/types.h>
++#include <linux/linkage.h>
++#include <linux/spi/spi.h>
++
++#include <asm/setup.h>
++
++#include <asm/arch/at32ap7000.h>
++#include <asm/arch/board.h>
++#include <asm/arch/init.h>
++
++/* Initialized by bootloader-specific startup code. */
++struct tag *bootloader_tags __initdata;
++
++static struct eth_platform_data __initdata eth_data[2];
++
++static struct spi_board_info spi_board_info[] __initdata = {
++ {
++ .modalias = "mtd_dataflash",
++ .controller_data = (void *)GPIO_PIN_PA(3),
++ .max_speed_hz = 66000000,
++ .bus_num = 0,
++ .chip_select = 0,
++ },
++};
++
++static int __init parse_tag_ethernet(struct tag *tag)
++{
++ int i;
++
++ i = tag->u.ethernet.mac_index;
++ if (i < ARRAY_SIZE(eth_data)) {
++ eth_data[i].mii_phy_addr = tag->u.ethernet.mii_phy_addr;
++ memcpy(&eth_data[i].hw_addr, tag->u.ethernet.hw_address,
++ sizeof(eth_data[i].hw_addr));
++ eth_data[i].valid = 1;
++ }
++ return 0;
++}
++__tagtable(ATAG_ETHERNET, parse_tag_ethernet);
++
++void __init setup_board(void)
++{
++ at32_map_usart(1, 0); /* /dev/ttyS0 */
++
++ at32_setup_serial_console(0);
++}
++
++static int __init atngw_init(void)
++{
++ at32_add_system_devices();
++
++ at32_add_device_usart(0);
++
++ if (eth_data[0].valid)
++ at32_add_device_eth(0, &eth_data[0]);
++ if (eth_data[1].valid)
++ at32_add_device_eth(1, &eth_data[1]);
++
++ spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
++
++ at32_add_device_spi(0);
++ at32_add_device_mmci(0);
++ at32_add_device_usb(0);
++
++ return 0;
++}
++postcore_initcall(atngw_init);
++
++void board_setup_fbmem(unsigned long fbmem_start, unsigned long fbmem_size)
++{
++
++}
diff --git a/packages/linux/linux-2.6.18/avr32-oprofile.patch b/packages/linux/linux-2.6.18/avr32-oprofile.patch
new file mode 100644
index 0000000000..5fbc9855aa
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-oprofile.patch
@@ -0,0 +1,610 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Wed Jan 4 17:26:23 2006 +0100
+Subject: [PATCH] AVR32 oprofile implementation
+
+This adds support for oprofile on the AVR32 architecture.
+---
+
+ arch/avr32/Kconfig | 2
+ arch/avr32/Makefile | 1
+ arch/avr32/oprofile/Kconfig | 23 +++
+ arch/avr32/oprofile/Makefile | 10 +
+ arch/avr32/oprofile/common.c | 169 +++++++++++++++++++++++++++
+ arch/avr32/oprofile/init.c | 29 ++++
+ arch/avr32/oprofile/op_avr32_model.h | 25 +++
+ arch/avr32/oprofile/op_counter.h | 29 ++++
+ arch/avr32/oprofile/op_model_avr32.c | 219 +++++++++++++++++++++++++++++++++++
+ arch/avr32/oprofile/op_model_avr32.h | 21 +++
+ 10 files changed, 528 insertions(+)
+
+Index: linux-2.6.18-avr32/arch/avr32/oprofile/Kconfig
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/oprofile/Kconfig 2006-10-20 14:08:20.000000000 +0200
+@@ -0,0 +1,23 @@
++
++menu "Profiling support"
++ depends on EXPERIMENTAL
++
++config PROFILING
++ bool "Profiling support (EXPERIMENTAL)"
++ help
++ Say Y here to enable the extended profiling support mechanisms used
++ by profilers such as OProfile.
++
++
++config OPROFILE
++ tristate "OProfile system profiling (EXPERIMENTAL)"
++ depends on PROFILING
++ help
++ OProfile is a profiling system capable of profiling the
++ whole system, including the kernel, kernel modules, libraries,
++ and applications.
++
++ If unsure, say N.
++
++endmenu
++
+Index: linux-2.6.18-avr32/arch/avr32/oprofile/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/oprofile/Makefile 2006-10-20 14:08:20.000000000 +0200
+@@ -0,0 +1,10 @@
++obj-$(CONFIG_OPROFILE) += oprofile.o
++
++DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \
++ oprof.o cpu_buffer.o buffer_sync.o \
++ event_buffer.o oprofile_files.o \
++ oprofilefs.o oprofile_stats.o \
++ timer_int.o )
++
++oprofile-y := $(DRIVER_OBJS) init.o common.o
++oprofile-y += op_model_avr32.o
+Index: linux-2.6.18-avr32/arch/avr32/oprofile/common.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/oprofile/common.c 2006-10-20 14:08:20.000000000 +0200
+@@ -0,0 +1,169 @@
++/*
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Author: Ronny Pedersen
++ */
++
++#define DEBUG
++#include <linux/init.h>
++#include <linux/oprofile.h>
++#include <linux/errno.h>
++#include <asm/semaphore.h>
++#include <linux/sysdev.h>
++
++#include "op_avr32_model.h"
++#include "op_counter.h"
++
++static struct op_avr32_model_spec *pc_model;
++static int pc_enabled = 0;
++static struct semaphore pc_sem;
++
++
++static int pc_start(void);
++static int pc_setup(void);
++static void pc_stop(void);
++static int pc_create_files(struct super_block *, struct dentry *);
++
++
++struct op_counter_config counter_config[OP_MAX_COUNTER];
++
++static int pc_suspend(struct sys_device *dev, u32 state)
++{
++ if (pc_enabled)
++ pc_stop();
++ return 0;
++}
++
++static int pc_resume(struct sys_device *dev)
++{
++ if (pc_enabled)
++ pc_start();
++ return 0;
++}
++
++static struct sysdev_class oprofile_sysclass = {
++ set_kset_name("oprofile"),
++ .resume = pc_resume,
++ .suspend = pc_suspend,
++};
++
++static struct sys_device device_oprofile = {
++ .id = 0,
++ .cls = &oprofile_sysclass,
++};
++
++static int __init init_driverfs(void)
++{
++ int ret;
++
++ if (!(ret = sysdev_class_register(&oprofile_sysclass)))
++ ret = sysdev_register(&device_oprofile);
++
++ return ret;
++}
++
++static void exit_driverfs(void)
++{
++ sysdev_unregister(&device_oprofile);
++ sysdev_class_unregister(&oprofile_sysclass);
++}
++
++static int pc_create_files(struct super_block *sb, struct dentry *root)
++{
++ unsigned int i;
++
++ pr_debug("AVR32 Peformance Counters: create files\n");
++ for (i = 0; i < pc_model->num_counters; i++) {
++ struct dentry *dir;
++ char buf[2];
++
++ snprintf(buf, sizeof buf, "%d", i);
++ dir = oprofilefs_mkdir(sb, root, buf);
++ oprofilefs_create_ulong(sb, dir, "enabled",
++ &counter_config[i].enabled);
++ oprofilefs_create_ulong(sb, dir, "event",
++ &counter_config[i].event);
++ oprofilefs_create_ulong(sb, dir, "count",
++ &counter_config[i].count);
++ oprofilefs_create_ulong(sb, dir, "unit_mask",
++ &counter_config[i].unit_mask);
++ oprofilefs_create_ulong(sb, dir, "kernel",
++ &counter_config[i].kernel);
++ oprofilefs_create_ulong(sb, dir, "user",
++ &counter_config[i].user);
++ }
++
++ return 0;
++}
++
++static int pc_setup(void)
++{
++ int ret;
++
++ spin_lock(&oprofilefs_lock);
++ pr_debug("AVR32 Peformance Counters: setup\n");
++ ret = pc_model->setup_ctrs();
++ spin_unlock(&oprofilefs_lock);
++ return ret;
++}
++
++static int pc_start(void)
++{
++ int ret = -EBUSY;
++
++ down(&pc_sem);
++ if (!pc_enabled) {
++ pr_debug("AVR32 Peformance Counters: start\n");
++ ret = pc_model->start();
++ pc_enabled = !ret;
++ }
++ up(&pc_sem);
++ return ret;
++}
++
++static void pc_stop(void)
++{
++ down(&pc_sem);
++ pr_debug("AVR32 Peformance Counters: stop\n");
++ if (pc_enabled)
++ pc_model->stop();
++ pc_enabled = 0;
++ up(&pc_sem);
++}
++
++int __init pc_init(struct oprofile_operations *ops,
++ struct op_avr32_model_spec *spec)
++{
++ init_MUTEX(&pc_sem);
++
++ if ( spec->init )
++ if (spec->init() < 0)
++ return -ENODEV;
++
++ pc_model = spec;
++ init_driverfs();
++ ops->create_files = pc_create_files;
++ ops->setup = pc_setup;
++ ops->shutdown = pc_stop;
++ ops->start = pc_start;
++ ops->stop = pc_stop;
++ ops->cpu_type = pc_model->name;
++ printk(KERN_INFO "oprofile: using %s Performance Counters\n",
++ spec->name);
++ pr_debug("AVR32 Peformance Counters: pc_init\n");
++
++ return 0;
++}
++
++void pc_exit(void)
++{
++ if (pc_model) {
++ pr_debug("AVR32 Peformance Counters: exit\n");
++ exit_driverfs();
++ pc_model = NULL;
++ }
++}
+Index: linux-2.6.18-avr32/arch/avr32/oprofile/init.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/oprofile/init.c 2006-10-20 14:08:20.000000000 +0200
+@@ -0,0 +1,29 @@
++/*
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Author: Ronny Pedersen
++ */
++
++#include <linux/oprofile.h>
++#include <linux/init.h>
++#include <linux/errno.h>
++#include "op_avr32_model.h"
++#include "op_model_avr32.h"
++
++int __init oprofile_arch_init(struct oprofile_operations *ops)
++{
++ int ret = -ENODEV;
++
++ ret = pc_init(ops, &op_avr32_spec);
++
++ return ret;
++}
++
++void oprofile_arch_exit(void)
++{
++ pc_exit();
++}
+Index: linux-2.6.18-avr32/arch/avr32/oprofile/op_avr32_model.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/oprofile/op_avr32_model.h 2006-10-20 14:08:20.000000000 +0200
+@@ -0,0 +1,25 @@
++/*
++ * interface to AVR32 machine specific operations
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Author: Ronny Pedersen
++ */
++
++#ifndef OP_AVR32_MODEL_H
++#define OP_AVR32_MODEL_H
++
++struct op_avr32_model_spec {
++ int (*init)(void);
++ unsigned int num_counters;
++ int (*setup_ctrs)(void);
++ int (*start)(void);
++ void (*stop)(void);
++ char *name;
++};
++
++#endif /* OP_AVR32_MODEL_H */
+Index: linux-2.6.18-avr32/arch/avr32/oprofile/op_counter.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/oprofile/op_counter.h 2006-10-20 14:08:20.000000000 +0200
+@@ -0,0 +1,29 @@
++/*
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Author: Ronny Pedersen
++ */
++#ifndef OP_COUNTER_H
++#define OP_COUNTER_H
++
++#define OP_MAX_COUNTER 3
++
++/* Per performance monitor configuration as set via
++ * oprofilefs.
++ */
++struct op_counter_config {
++ unsigned long count;
++ unsigned long enabled;
++ unsigned long event;
++ unsigned long unit_mask;
++ unsigned long kernel;
++ unsigned long user;
++};
++
++extern struct op_counter_config counter_config[];
++
++#endif /* OP_COUNTER_H */
+Index: linux-2.6.18-avr32/arch/avr32/oprofile/op_model_avr32.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/oprofile/op_model_avr32.c 2006-10-20 14:08:20.000000000 +0200
+@@ -0,0 +1,219 @@
++/*
++ * AVR32 Performance Counter Driver
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Author: Ronny Pedersen
++ */
++
++#define DEBUG
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/sched.h>
++#include <linux/oprofile.h>
++#include <linux/interrupt.h>
++#include <asm/irq.h>
++#include <asm/system.h>
++#include <asm/sysreg.h>
++
++#include "op_counter.h"
++#include "op_avr32_model.h"
++
++
++#define PC_ENABLE 0x001 /* Enable counters */
++#define PCNT_RESET 0x002 /* Reset event counters */
++#define CCNT_RESET 0x004 /* Reset clock counter */
++#define PC_RESET (CCNT_RESET | PCNT_RESET)
++#define PC_CNT64 0x008 /* Make CCNT count every 64th cycle */
++
++
++#define EVT_UNUSED 0xFF
++
++struct pc_counter {
++ volatile unsigned long ovf;
++ unsigned long reset_counter;
++};
++
++enum { PCCNT, PCNT0, PCNT1, MAX_COUNTERS };
++
++#define PCCNT_IE (1 << 4)
++#define PCNT0_IE (1 << 5)
++#define PCNT1_IE (1 << 6)
++
++#define PCCNT_F (1 << 8)
++#define PCNT0_F (1 << 9)
++#define PCNT1_F (1 << 10)
++
++#define AVR32_PC_IRQ 1
++
++static const u32 int_mask[MAX_COUNTERS] = { PCCNT_IE, PCNT0_IE, PCNT1_IE };
++static const u32 ovf_mask[MAX_COUNTERS] = { PCCNT_F, PCNT0_F, PCNT1_F };
++
++static struct pc_counter results[MAX_COUNTERS];
++
++static void write_pccr(u32 val)
++{
++ __builtin_mtsr(SYSREG_PCCR, val);
++}
++
++static u32 read_pccr(void)
++{
++ return __builtin_mfsr(SYSREG_PCCR);
++}
++
++static u32 read_counter(int counter)
++{
++ switch (counter) {
++ case PCCNT:
++ return __builtin_mfsr(SYSREG_PCCNT);
++ case PCNT0:
++ return __builtin_mfsr(SYSREG_PCNT0);
++ case PCNT1:
++ return __builtin_mfsr(SYSREG_PCNT0);
++ default:
++ return 0;
++ }
++}
++
++
++static void write_counter(int counter, u32 val)
++{
++ switch (counter) {
++ case PCCNT:
++ __builtin_mtsr(SYSREG_PCCNT, val);
++ case PCNT0:
++ __builtin_mtsr(SYSREG_PCNT0, val);
++ case PCNT1:
++ __builtin_mtsr(SYSREG_PCNT0, val);
++ default:
++ break;
++ }
++}
++
++static int avr32_setup_ctrs(void)
++{
++ u32 pccr;
++ int i;
++
++ for (i = PCCNT; i < MAX_COUNTERS; i++) {
++ if (counter_config[i].enabled)
++ continue;
++
++ counter_config[i].event = EVT_UNUSED;
++ }
++
++ pccr = ((counter_config[PCNT1].event << 18)
++ | (counter_config[PCNT0].event << 12));
++ pr_debug("avr32_setup_ctrs: pccr: %#08x\n", pccr);
++ write_pccr(pccr);
++
++ for (i = PCCNT; i < MAX_COUNTERS; i++) {
++ if (counter_config[i].event == EVT_UNUSED) {
++ counter_config[i].event = 0;
++ continue;
++ }
++
++ results[i].reset_counter = counter_config[i].count;
++ write_counter(i, -(u32)counter_config[i].count);
++ pr_debug("avr32_setup_ctrs: counter%d %#08x from %#08lx\n",
++ i, read_counter(i), counter_config[i].count);
++ }
++
++ return 0;
++}
++
++static void inline check_ctrs(void)
++{
++ int i;
++ u32 pccr = read_pccr();
++
++ /* Writeback clears overflow flag */
++ write_pccr(pccr & ~PC_ENABLE);
++
++ for (i = PCCNT; i < MAX_COUNTERS; i++) {
++ if (!(int_mask[i] & pccr))
++ continue;
++
++ if (pccr & ovf_mask[i])
++ results[i].ovf++;
++ }
++}
++
++
++static irqreturn_t avr32_pc_interrupt(int irq, void *arg,
++ struct pt_regs *regs)
++{
++ int i;
++
++ check_ctrs();
++
++ for (i = PCCNT; i < MAX_COUNTERS; i++) {
++ if (!results[i].ovf)
++ continue;
++
++ write_counter(i, -(u32)results[i].reset_counter);
++ oprofile_add_sample(regs, i);
++ results[i].ovf--;
++ }
++
++ /* Enable Performance Counter */
++ write_pccr(read_pccr() | PC_ENABLE);
++
++ return IRQ_HANDLED;
++}
++
++static void avr32_pc_stop(void)
++{
++ write_pccr(read_pccr() & ~PC_ENABLE);
++
++ free_irq(AVR32_PC_IRQ, results);
++}
++
++static int avr32_pc_start(void)
++{
++ int i, ret;
++ u32 pccr = read_pccr();
++
++ ret = request_irq(AVR32_PC_IRQ, avr32_pc_interrupt, SA_INTERRUPT,
++ "AVR32 Performance Counter", (void *)results);
++
++ if (ret < 0) {
++ printk(KERN_ERR
++ "oprofile: unable to request IRQ%d for AVR32"
++ " Performance Counter\n",
++ AVR32_PC_IRQ);
++ return ret;
++ }
++
++ /* Enable interrupts */
++ for (i = PCCNT; i < MAX_COUNTERS; i++) {
++ if (counter_config[i].enabled)
++ pccr |= int_mask[i];
++ }
++
++ /* Disable scaler */
++ pccr &= ~PC_CNT64;
++
++ /* Enable Performance Counter */
++ pccr |= PC_ENABLE;
++
++ write_pccr(pccr);
++ pr_debug("avr32_pc_start: pc: %#08x\n", pccr);
++ return 0;
++}
++
++
++struct op_avr32_model_spec op_avr32_spec = {
++ .init = 0,
++ .setup_ctrs = avr32_setup_ctrs,
++ .start = avr32_pc_start,
++ .stop = avr32_pc_stop,
++ .num_counters = MAX_COUNTERS,
++ .name = "avr32",
++};
++
+Index: linux-2.6.18-avr32/arch/avr32/oprofile/op_model_avr32.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/arch/avr32/oprofile/op_model_avr32.h 2006-10-20 14:08:20.000000000 +0200
+@@ -0,0 +1,21 @@
++/**
++ * AVR32 Machine Specific Operations
++ *
++ * Copyright (C) 2005-2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Author: Ronny Pedersen
++ */
++#ifndef OP_MODEL_AVR32_H
++#define OP_MODEL_AVR32_H
++
++extern struct op_avr32_model_spec op_avr32_spec;
++extern int pc_init(struct oprofile_operations *ops,
++ struct op_avr32_model_spec *spec);
++extern void pc_exit(void);
++
++
++#endif
+Index: linux-2.6.18-avr32/arch/avr32/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/Kconfig 2006-10-20 14:04:43.000000000 +0200
++++ linux-2.6.18-avr32/arch/avr32/Kconfig 2006-10-20 14:08:20.000000000 +0200
+@@ -190,6 +190,8 @@ source "drivers/Kconfig"
+
+ source "fs/Kconfig"
+
++source "arch/avr32/oprofile/Kconfig"
++
+ source "arch/avr32/Kconfig.debug"
+
+ source "security/Kconfig"
+Index: linux-2.6.18-avr32/arch/avr32/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/Makefile 2006-10-20 14:04:54.000000000 +0200
++++ linux-2.6.18-avr32/arch/avr32/Makefile 2006-10-20 14:09:10.000000000 +0200
+@@ -30,6 +30,7 @@ core-$(CONFIG_BOARD_ATSTK1000) += arch/
+ core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/
+ core-y += arch/avr32/kernel/
+ core-y += arch/avr32/mm/
++drivers-$(CONFIG_OPROFILE) += arch/avr32/oprofile/
+ libs-y += arch/avr32/lib/
+
+ archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap
diff --git a/packages/linux/linux-2.6.18/avr32-sound.patch b/packages/linux/linux-2.6.18/avr32-sound.patch
new file mode 100644
index 0000000000..597a44de3b
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-sound.patch
@@ -0,0 +1,51 @@
+---
+ sound/Kconfig | 2 ++
+ sound/Makefile | 1 +
+ sound/avr32/Kconfig | 6 ++++++
+ sound/avr32/Makefile | 3 +++
+ 4 files changed, 12 insertions(+)
+
+Index: linux-2.6.18-avr32/sound/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/sound/Kconfig 2006-09-12 10:44:15.000000000 +0200
++++ linux-2.6.18-avr32/sound/Kconfig 2006-09-12 10:45:14.000000000 +0200
+@@ -62,6 +62,8 @@ source "sound/aoa/Kconfig"
+
+ source "sound/arm/Kconfig"
+
++source "sound/avr32/Kconfig"
++
+ source "sound/mips/Kconfig"
+
+ # the following will depenend on the order of config.
+Index: linux-2.6.18-avr32/sound/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/sound/Makefile 2006-09-12 10:44:15.000000000 +0200
++++ linux-2.6.18-avr32/sound/Makefile 2006-09-12 10:44:37.000000000 +0200
+@@ -5,6 +5,7 @@ obj-$(CONFIG_SOUND) += soundcore.o
+ obj-$(CONFIG_SOUND_PRIME) += oss/
+ obj-$(CONFIG_DMASOUND) += oss/
+ obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/
++obj-$(CONFIG_SND) += avr32/
+ obj-$(CONFIG_SND_AOA) += aoa/
+
+ ifeq ($(CONFIG_SND),y)
+Index: linux-2.6.18-avr32/sound/avr32/Kconfig
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/sound/avr32/Kconfig 2006-09-12 10:45:52.000000000 +0200
+@@ -0,0 +1,6 @@
++# ALSA AVR32 drivers
++
++menu "ALSA AVR32 devices"
++ depends on SND != n && AVR32
++
++endmenu
+Index: linux-2.6.18-avr32/sound/avr32/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/sound/avr32/Makefile 2006-09-12 10:46:03.000000000 +0200
+@@ -0,0 +1,3 @@
++#
++# Makefile for ALSA
++#
diff --git a/packages/linux/linux-2.6.18/avr32-time-add-shared-interrupts.patch b/packages/linux/linux-2.6.18/avr32-time-add-shared-interrupts.patch
new file mode 100644
index 0000000000..c626016ff4
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-time-add-shared-interrupts.patch
@@ -0,0 +1,30 @@
+--- linux-2.6.18.orig/arch/avr32/kernel/time.c 2006-11-06 14:36:50.000000000 +0100
++++ linux-2.6.18/arch/avr32/kernel/time.c 2006-11-06 14:57:03.000000000 +0100
+@@ -21,6 +21,7 @@
+ #include <linux/profile.h>
+ #include <linux/sysdev.h>
+
++#include <asm/intc.h>
+ #include <asm/div64.h>
+ #include <asm/sysreg.h>
+ #include <asm/io.h>
+@@ -136,6 +137,10 @@
+ {
+ unsigned int count;
+
++ /* Check if interrupt is timer or performance counters */
++ if (!(intc_get_pending(irq) & 1))
++ return IRQ_NONE;
++
+ /* ack timer interrupt and try to set next interrupt */
+ count = avr32_hpt_read();
+ avr32_timer_ack();
+@@ -164,7 +169,7 @@
+
+ static struct irqaction timer_irqaction = {
+ .handler = timer_interrupt,
+- .flags = IRQF_DISABLED,
++ .flags = IRQF_DISABLED|IRQF_SHARED,
+ .name = "timer",
+ };
+
diff --git a/packages/linux/linux-2.6.18/avr32-unistd-h-move-ifdef-kernel.patch b/packages/linux/linux-2.6.18/avr32-unistd-h-move-ifdef-kernel.patch
new file mode 100644
index 0000000000..eb16d80b46
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32-unistd-h-move-ifdef-kernel.patch
@@ -0,0 +1,39 @@
+---
+ include/asm-avr32/unistd.h | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+Index: linux-2.6.18-avr32/include/asm-avr32/unistd.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/asm-avr32/unistd.h 2006-11-29 16:49:54.000000000 +0100
++++ linux-2.6.18-avr32/include/asm-avr32/unistd.h 2006-11-29 16:50:32.000000000 +0100
+@@ -281,6 +281,7 @@
+ #define __NR_tee 263
+ #define __NR_vmsplice 264
+
++#ifdef __KERNEL__
+ #define NR_syscalls 265
+
+
+@@ -304,7 +305,6 @@
+ return (type) (res); \
+ } while (0)
+
+-#ifdef __KERNEL__
+ #define __ARCH_WANT_IPC_PARSE_VERSION
+ #define __ARCH_WANT_STAT64
+ #define __ARCH_WANT_SYS_ALARM
+@@ -319,7 +319,6 @@
+ #define __ARCH_WANT_SYS_GETPGRP
+ #define __ARCH_WANT_SYS_RT_SIGACTION
+ #define __ARCH_WANT_SYS_RT_SIGSUSPEND
+-#endif
+
+ #if defined(__KERNEL_SYSCALLS__) || defined(__CHECKER__)
+
+@@ -384,4 +383,6 @@ asmlinkage int sys_execve(char __user *u
+ */
+ #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
+
++#endif /* __KERNEL__ */
++
+ #endif /* __ASM_AVR32_UNISTD_H */
diff --git a/packages/linux/linux-2.6.18/avr32_defconfig b/packages/linux/linux-2.6.18/avr32_defconfig
new file mode 100644
index 0000000000..bf9615c088
--- /dev/null
+++ b/packages/linux/linux-2.6.18/avr32_defconfig
@@ -0,0 +1,1036 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.20
+# Mon Mar 5 16:48:58 2007
+#
+CONFIG_AVR32=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_TIME=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL_SYSCALL=y
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+# CONFIG_BASE_FULL is not set
+# CONFIG_FUTEX is not set
+# CONFIG_EPOLL is not set
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=1
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODULE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=m
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type and features
+#
+CONFIG_SUBARCH_AVR32B=y
+CONFIG_MMU=y
+CONFIG_PERFORMANCE_COUNTERS=y
+CONFIG_PLATFORM_AT32AP=y
+CONFIG_CPU_AT32AP7000=y
+CONFIG_BOARD_ATSTK1002=y
+CONFIG_BOARD_ATSTK1000=y
+CONFIG_LOADER_U_BOOT=y
+
+#
+# Atmel AVR32 AP options
+#
+CONFIG_PIO_DEV=y
+# CONFIG_AP7000_32_BIT_SMC is not set
+CONFIG_AP7000_16_BIT_SMC=y
+# CONFIG_AP7000_8_BIT_SMC is not set
+CONFIG_LOAD_ADDRESS=0x10000000
+CONFIG_ENTRY_ADDRESS=0x90000000
+CONFIG_PHYS_OFFSET=0x10000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_HAVE_ARCH_BOOTMEM_NODE is not set
+# CONFIG_ARCH_HAVE_MEMORY_PRESENT is not set
+# CONFIG_NEED_NODE_MEMMAP_SIZE is not set
+CONFIG_ARCH_FLATMEM_ENABLE=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+# CONFIG_ARCH_SPARSEMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+# CONFIG_OWNERSHIP_TRACE is not set
+CONFIG_DW_DMAC=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_CMDLINE=""
+
+#
+# Bus options
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+CONFIG_PCMCIA_DEBUG=y
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+# CONFIG_PCMCIA_IOCTL is not set
+
+#
+# PC-card bridges
+#
+CONFIG_AT32_CF=y
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+# CONFIG_TIFM_CORE is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_PATA_PCMCIA=y
+# CONFIG_PATA_PLATFORM is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_ATMELTWI=y
+CONFIG_I2C_ATMELTWI_BAUDRATE=100000
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_BITBANG is not set
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+CONFIG_FB_SIDSA=y
+CONFIG_FB_SIDSA_DEFAULT_BPP=16
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+CONFIG_LCD_LTV350QV=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA AVR32 devices
+#
+# CONFIG_SND_ATMEL_AC97 is not set
+CONFIG_SND_AT73C213=y
+# CONFIG_SND_AT73C213_USE_ALSA_MALLOC_CALLS is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_HUSB2DEV=y
+CONFIG_USB_HUSB2DEV=y
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_ATMELMCI=y
+# CONFIG_MMC_TIFM_SD is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Virtualization
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+# CONFIG_PROC_KCORE is not set
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+# 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_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+# CONFIG_NLS_ISO8859_1 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_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_KPROBES is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-2.6.18/dmac-add-explicit-blockcount-to-dma_request_sg.patch b/packages/linux/linux-2.6.18/dmac-add-explicit-blockcount-to-dma_request_sg.patch
new file mode 100644
index 0000000000..54400aeff1
--- /dev/null
+++ b/packages/linux/linux-2.6.18/dmac-add-explicit-blockcount-to-dma_request_sg.patch
@@ -0,0 +1,66 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Sun, 14 Jan 2007 19:07:06 +0100
+Subject: [DW DMAC] Add nr_blocks field to struct dma_request_sg
+
+Allow drivers to specify how many blocks to transfer in a sg request.
+The number of blocks will no longer be automatically calculated based
+on the scatterlist because this doesn't always correspond with the
+desired amount of data to be transferred.
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+---
+ arch/avr32/drivers/dw-dmac.c | 13 ++++++-------
+ include/asm-avr32/dma-controller.h | 1 +
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+Index: linux-2.6.18-avr32/include/asm-avr32/dma-controller.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/asm-avr32/dma-controller.h 2007-01-15 15:34:32.000000000 +0100
++++ linux-2.6.18-avr32/include/asm-avr32/dma-controller.h 2007-01-15 15:34:50.000000000 +0100
+@@ -36,6 +36,7 @@ struct dma_request_sg {
+ int nr_sg;
+ struct scatterlist *sg;
+ unsigned long block_size;
++ unsigned int nr_blocks;
+
+ dma_addr_t data_reg;
+ unsigned short periph_id;
+Index: linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/drivers/dw-dmac.c 2007-01-15 15:35:00.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c 2007-01-15 15:35:03.000000000 +0100
+@@ -176,7 +176,8 @@ static int dmac_prepare_request_sg(struc
+ struct dw_dma_channel *chan;
+ unsigned long ctlhi, ctllo, cfghi, cfglo;
+ unsigned long block_size;
+- int ret, i, nr_blocks, direction;
++ unsigned int nr_blocks;
++ int ret, i, direction;
+ unsigned long flags;
+
+ spin_lock_irqsave(&dmac->lock, flags);
+@@ -215,12 +216,9 @@ static int dmac_prepare_request_sg(struc
+ * Each block will get its own Linked List Item (LLI) below.
+ */
+ block_size = req->block_size;
+- pr_debug("block_size = %lu, nr_sg = %u\n", block_size, req->nr_sg);
+- for (i = 0, nr_blocks = 0; i < req->nr_sg; i++) {
+- pr_debug("sg[i].length = %u\n", req->sg[i].length);
+- BUG_ON(req->sg[i].length % block_size);
+- nr_blocks += req->sg[i].length / block_size;
+- }
++ nr_blocks = req->nr_blocks;
++ pr_debug("block_size %lu, nr_blocks %u nr_sg = %u\n",
++ block_size, nr_blocks, req->nr_sg);
+
+ BUG_ON(nr_blocks == 0);
+ chan->nr_blocks = nr_blocks;
+@@ -269,6 +267,7 @@ static int dmac_prepare_request_sg(struc
+ }
+ dmac_chan_writel_lo(dmac, req->req.channel, CTL, ctllo);
+ dmac_chan_writel_hi(dmac, req->req.channel, CTL, ctlhi);
++ pr_debug("ctl hi:lo 0x%lx:%lx\n", ctlhi, ctllo);
+ } else {
+ struct dw_dma_lli *lli, *lli_prev = NULL;
+ int j = 0, offset = 0;
diff --git a/packages/linux/linux-2.6.18/dmac-stopping-idle-channel-is-not-fatal.patch b/packages/linux/linux-2.6.18/dmac-stopping-idle-channel-is-not-fatal.patch
new file mode 100644
index 0000000000..ed2714d0d7
--- /dev/null
+++ b/packages/linux/linux-2.6.18/dmac-stopping-idle-channel-is-not-fatal.patch
@@ -0,0 +1,93 @@
+---
+ arch/avr32/drivers/dw-dmac.c | 50 ++++++++++++++++++++++++-------------------
+ 1 file changed, 29 insertions(+), 21 deletions(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/drivers/dw-dmac.c 2007-01-04 09:56:32.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/drivers/dw-dmac.c 2007-01-04 15:38:13.000000000 +0100
+@@ -7,7 +7,6 @@
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+-
+ #include <linux/clk.h>
+ #include <linux/device.h>
+ #include <linux/dma-mapping.h>
+@@ -155,6 +154,21 @@ fail:
+ return NULL;
+ }
+
++static void cleanup_channel(struct dw_dma_controller *dmac,
++ struct dw_dma_channel *chan)
++{
++ unsigned int i;
++
++ if (chan->nr_blocks > 1) {
++ for (i = 0; i < chan->nr_blocks; i++)
++ dma_pool_free(dmac->lli_pool, chan->block[i].lli_vaddr,
++ chan->block[i].lli_dma_addr);
++ kfree(chan->block);
++ }
++
++ chan->state = CH_STATE_ALLOCATED;
++}
++
+ static int dmac_prepare_request_sg(struct dma_controller *_dmac,
+ struct dma_request_sg *req)
+ {
+@@ -313,6 +327,7 @@ static int dmac_prepare_request_sg(struc
+ * SAR, DAR and CTL are initialized from the LLI. We
+ * only have to enable the LLI bits in CTL.
+ */
++ dmac_chan_writel_hi(dmac, req->req.channel, CTL, 0);
+ dmac_chan_writel_lo(dmac, req->req.channel, LLP,
+ chan->block[0].lli_dma_addr);
+ dmac_chan_writel_lo(dmac, req->req.channel, CTL, 1 << 28 | 1 << 27);
+@@ -520,33 +535,26 @@ static dma_addr_t dmac_get_current_pos(s
+ }
+
+
+-static void cleanup_channel(struct dw_dma_controller *dmac,
+- struct dw_dma_channel *chan)
+-{
+- unsigned int i;
+-
+- if (chan->nr_blocks > 1) {
+- for (i = 0; i < chan->nr_blocks; i++)
+- dma_pool_free(dmac->lli_pool, chan->block[i].lli_vaddr,
+- chan->block[i].lli_dma_addr);
+- kfree(chan->block);
+- }
+-
+- chan->state = CH_STATE_ALLOCATED;
+-}
+-
+ static int dmac_stop_request(struct dma_controller *_dmac,
+ unsigned int channel)
+ {
+ struct dw_dma_controller *dmac = to_dw_dmac(_dmac);
++ struct dw_dma_channel *chan;
+
+ BUG_ON(channel >= DMAC_NR_CHANNELS);
+
+- BUG_ON(dmac->channel[channel].state != CH_STATE_BUSY);
+-
+- clear_channel_bit(dmac, CH_EN, channel);
+-
+- cleanup_channel(dmac, &dmac->channel[channel]);
++ chan = &dmac->channel[channel];
++ pr_debug("stop: st%u s%08x d%08x l%08x ctl0x%08x:0x%08x\n",
++ chan->state, dmac_chan_readl_lo(dmac, channel, SAR),
++ dmac_chan_readl_lo(dmac, channel, DAR),
++ dmac_chan_readl_lo(dmac, channel, LLP),
++ dmac_chan_readl_hi(dmac, channel, CTL),
++ dmac_chan_readl_lo(dmac, channel, CTL));
++
++ if (chan->state == CH_STATE_BUSY) {
++ clear_channel_bit(dmac, CH_EN, channel);
++ cleanup_channel(dmac, &dmac->channel[channel]);
++ }
+
+ return 0;
+ }
diff --git a/packages/linux/linux-2.6.18/dont-include-map-h-from-physmap-h.patch b/packages/linux/linux-2.6.18/dont-include-map-h-from-physmap-h.patch
new file mode 100644
index 0000000000..c7f03f9828
--- /dev/null
+++ b/packages/linux/linux-2.6.18/dont-include-map-h-from-physmap-h.patch
@@ -0,0 +1,33 @@
+From 00424e00aeeecfd17ee71918b183e50d07641c5e Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Wed, 10 Jan 2007 18:55:18 +0100
+Subject: [PATCH] MTD: Don't include map.h from physmap.h
+
+Replace inclusion of <linux/mtd/map.h> with a forward-declaration of
+struct map_info. This is necessary because physmap.h may be included
+in platform code and map.h will give errors if MTD isn't enabled.
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+---
+ include/linux/mtd/physmap.h | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/include/linux/mtd/physmap.h b/include/linux/mtd/physmap.h
+index 86831e3..0dc07d5 100644
+--- a/include/linux/mtd/physmap.h
++++ b/include/linux/mtd/physmap.h
+@@ -18,9 +18,10 @@
+ #define __LINUX_MTD_PHYSMAP__
+
+ #include <linux/mtd/mtd.h>
+-#include <linux/mtd/map.h>
+ #include <linux/mtd/partitions.h>
+
++struct map_info;
++
+ struct physmap_flash_data {
+ unsigned int width;
+ void (*set_vpp)(struct map_info *, int);
+--
+1.4.4.1
+
diff --git a/packages/linux/linux-2.6.18/fix-alpha-color-bitfield.patch b/packages/linux/linux-2.6.18/fix-alpha-color-bitfield.patch
new file mode 100644
index 0000000000..f563a501a1
--- /dev/null
+++ b/packages/linux/linux-2.6.18/fix-alpha-color-bitfield.patch
@@ -0,0 +1,21 @@
+---
+ drivers/video/sidsafb.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+Index: linux-2.6.18-avr32/drivers/video/sidsafb.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/video/sidsafb.c 2006-10-11 15:14:06.000000000 +0200
++++ linux-2.6.18-avr32/drivers/video/sidsafb.c 2006-10-18 14:51:31.000000000 +0200
+@@ -300,8 +300,11 @@ static int sidsafb_check_var(struct fb_v
+ var->green.length = 5;
+ var->blue.length = 5;
+ break;
+- case 24:
+ case 32:
++ var->transp.offset = 24;
++ var->transp.length = 8;
++ /* fall through */
++ case 24:
+ var->red.offset = 16;
+ var->green.offset = 8;
+ var->blue.offset = 0;
diff --git a/packages/linux/linux-2.6.18/fix-gpio-prototypes.patch b/packages/linux/linux-2.6.18/fix-gpio-prototypes.patch
new file mode 100644
index 0000000000..2b5a09620b
--- /dev/null
+++ b/packages/linux/linux-2.6.18/fix-gpio-prototypes.patch
@@ -0,0 +1,75 @@
+---
+ arch/avr32/mach-at32ap/pio.c | 15 +++++++++------
+ include/asm-avr32/arch-at32ap/gpio.h | 6 +++---
+ 2 files changed, 12 insertions(+), 9 deletions(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-29 18:14:54.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-29 18:17:15.000000000 +0100
+@@ -49,7 +49,7 @@ static struct pio_device *gpio_to_pio(un
+ /* Pin multiplexing API */
+
+ void __init at32_select_periph(unsigned int pin, unsigned int periph,
+- int use_pullup)
++ unsigned long flags)
+ {
+ struct pio_device *pio;
+ unsigned int pin_index = pin & 0x1f;
+@@ -73,7 +73,7 @@ void __init at32_select_periph(unsigned
+ pio_writel(pio, ASR, mask);
+
+ pio_writel(pio, PDR, mask);
+- if (!use_pullup)
++ if (!(flags & AT32_GPIOF_PULLUP))
+ pio_writel(pio, PUDR, mask);
+
+ return;
+@@ -82,8 +82,7 @@ fail:
+ dump_stack();
+ }
+
+-void __init at32_select_gpio(unsigned int pin, int enable_output,
+- int use_pullup)
++void __init at32_select_gpio(unsigned int pin, unsigned long flags)
+ {
+ struct pio_device *pio;
+ unsigned int pin_index = pin & 0x1f;
+@@ -101,13 +100,17 @@ void __init at32_select_gpio(unsigned in
+ }
+
+ pio_writel(pio, PUER, mask);
+- if (enable_output)
++ if (flags & AT32_GPIOF_HIGH)
++ pio_writel(pio, SODR, mask);
++ else
++ pio_writel(pio, CODR, mask);
++ if (flags & AT32_GPIOF_OUTPUT)
+ pio_writel(pio, OER, mask);
+ else
+ pio_writel(pio, ODR, mask);
+
+ pio_writel(pio, PER, mask);
+- if (!use_pullup)
++ if (!(flags & AT32_GPIOF_PULLUP))
+ pio_writel(pio, PUDR, mask);
+
+ /* It's now allowed to use request_gpio on this pin */
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/gpio.h 2006-11-29 18:14:37.000000000 +0100
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h 2006-11-29 18:15:06.000000000 +0100
+@@ -1,5 +1,5 @@
+-#ifndef __ASM_AVR32_GPIO_H
+-#define __ASM_AVR32_GPIO_H
++#ifndef __ASM_AVR32_ARCH_GPIO_H
++#define __ASM_AVR32_ARCH_GPIO_H
+
+ #include <linux/compiler.h>
+ #include <asm/irq.h>
+@@ -36,4 +36,4 @@ static inline int irq_to_gpio(unsigned i
+ return irq - GPIO_IRQ_BASE;
+ }
+
+-#endif /* __ASM_AVR32_GPIO_H */
++#endif /* __ASM_AVR32_ARCH_GPIO_H */
diff --git a/packages/linux/linux-2.6.18/fix-lcd-display-off-by-two-problem.patch b/packages/linux/linux-2.6.18/fix-lcd-display-off-by-two-problem.patch
new file mode 100644
index 0000000000..e99619a876
--- /dev/null
+++ b/packages/linux/linux-2.6.18/fix-lcd-display-off-by-two-problem.patch
@@ -0,0 +1,17 @@
+---
+ drivers/video/sidsafb.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: linux-2.6.18-avr32/drivers/video/sidsafb.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/video/sidsafb.c 2006-11-27 15:47:16.000000000 +0100
++++ linux-2.6.18-avr32/drivers/video/sidsafb.c 2006-11-27 15:47:25.000000000 +0100
+@@ -107,7 +107,7 @@ static struct fb_videomode samsung_modes
+ .pixclock = 145111,
+
+ .left_margin = 17, .right_margin = 33,
+- .upper_margin = 8, .lower_margin = 10,
++ .upper_margin = 10, .lower_margin = 10,
+ .hsync_len = 16, .vsync_len = 1,
+
+ .sync = FB_SYNC_PCLK_RISING,
diff --git a/packages/linux/linux-2.6.18/fix-usart3-rx-BUG.patch b/packages/linux/linux-2.6.18/fix-usart3-rx-BUG.patch
new file mode 100644
index 0000000000..1035f9f010
--- /dev/null
+++ b/packages/linux/linux-2.6.18/fix-usart3-rx-BUG.patch
@@ -0,0 +1,25 @@
+---
+ drivers/serial/atmel_usart.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/serial/atmel_usart.c 2006-11-24 15:59:38.000000000 +0100
++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.c 2006-11-24 15:59:46.000000000 +0100
+@@ -194,8 +194,14 @@ static inline int rx_dma_update_tail(str
+ usart3_writel(up, RNCR, RX_BUFFER_SIZE);
+
+ again = 1;
+- } else
+- BUG_ON(usart3_readl(up, CSR) & USART3_BIT(ENDRX));
++ } else if(usart3_readl(up, CSR) & USART3_BIT(ENDRX)) {
++ /*
++ * The USART hit the end of the buffer after head was
++ * updated. Let's do another pass so that we can
++ * avoid taking another interrupt immediately.
++ */
++ again = 1;
++ }
+
+ up->rx_tail = tail;
+
diff --git a/packages/linux/linux-2.6.18/gpio-define-pio-none.patch b/packages/linux/linux-2.6.18/gpio-define-pio-none.patch
new file mode 100644
index 0000000000..802a535354
--- /dev/null
+++ b/packages/linux/linux-2.6.18/gpio-define-pio-none.patch
@@ -0,0 +1,11 @@
+Index: linux-2.6.18/include/asm-avr32/arch-at32ap/at32ap7000.h
+===================================================================
+--- linux-2.6.18.orig/include/asm-avr32/arch-at32ap/at32ap7000.h 2006-12-11 14:53:54.000000000 +0100
++++ linux-2.6.18/include/asm-avr32/arch-at32ap/at32ap7000.h 2006-12-11 14:56:54.000000000 +0100
+@@ -23,4 +23,6 @@
+ #define GPIO_PIN_PD(N) (GPIO_PIOD_BASE + (N))
+ #define GPIO_PIN_PE(N) (GPIO_PIOE_BASE + (N))
+
++#define GPIO_PIO_NONE (0xFFFFffff)
++
+ #endif /* __ASM_ARCH_AT32AP7000_H */
diff --git a/packages/linux/linux-2.6.18/gpio-dev-blocking-read.patch b/packages/linux/linux-2.6.18/gpio-dev-blocking-read.patch
new file mode 100644
index 0000000000..9508d9e3aa
--- /dev/null
+++ b/packages/linux/linux-2.6.18/gpio-dev-blocking-read.patch
@@ -0,0 +1,187 @@
+---
+ arch/avr32/mach-at32ap/pio.c | 113 +++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 113 insertions(+)
+
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-30 13:16:43.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-30 17:15:24.000000000 +0100
+@@ -250,7 +250,11 @@ EXPORT_SYMBOL(gpio_set_value);
+ #ifdef CONFIG_PIO_DEV
+ #include <linux/configfs.h>
+ #include <linux/cdev.h>
++#include <linux/fs.h>
++#include <linux/interrupt.h>
++#include <linux/poll.h>
+ #include <linux/uaccess.h>
++#include <linux/wait.h>
+
+ #define GPIO_DEV_MAX 8
+
+@@ -267,6 +271,13 @@ struct gpio_item {
+ u32 pin_mask;
+ u32 oe_mask;
+
++ /* Pin state last time we read it (for blocking reads) */
++ u32 pin_state;
++ int changed;
++
++ wait_queue_head_t change_wq;
++ struct fasync_struct *async_queue;
++
+ int id;
+ struct class_device *gpio_dev;
+ struct cdev char_dev;
+@@ -279,36 +290,135 @@ struct gpio_attribute {
+ ssize_t (*store)(struct gpio_item *, const char *, size_t);
+ };
+
++static irqreturn_t gpio_dev_interrupt(int irq, void *dev_id,
++ struct pt_regs *regs)
++{
++ struct gpio_item *gpio = dev_id;
++ u32 old_state, new_state;
++
++ old_state = gpio->pin_state;
++ new_state = pio_readl(gpio->pio, PDSR);
++ gpio->pin_state = new_state;
++
++ if (new_state != old_state) {
++ gpio->changed = 1;
++ wake_up_interruptible(&gpio->change_wq);
++
++ if (gpio->async_queue)
++ kill_fasync(&gpio->async_queue, SIGIO, POLL_IN);
++ }
++
++ return IRQ_HANDLED;
++}
++
+ static int gpio_dev_open(struct inode *inode, struct file *file)
+ {
+ struct gpio_item *gpio = container_of(inode->i_cdev,
+ struct gpio_item,
+ char_dev);
++ unsigned int irq;
++ unsigned int i;
++ int ret;
+
++ nonseekable_open(inode, file);
+ config_item_get(&gpio->item);
+ file->private_data = gpio;
++
++ gpio->pin_state = pio_readl(gpio->pio, PDSR) & gpio->pin_mask;
++ gpio->changed = 1;
++
++ for (i = 0; i < 32; i++) {
++ if (gpio->pin_mask & (1 << i)) {
++ irq = gpio_to_irq(32 * pio_id(gpio->pio) + i);
++ ret = request_irq(irq, gpio_dev_interrupt, 0,
++ "gpio-dev", gpio);
++ if (ret)
++ goto err_irq;
++ }
++ }
++
+ return 0;
++
++err_irq:
++ while (i--) {
++ if (gpio->pin_mask & (1 << i)) {
++ irq = gpio_to_irq(32 * pio_id(gpio->pio) + i);
++ free_irq(irq, gpio);
++ }
++ }
++
++ config_item_put(&gpio->item);
++
++ return ret;
++}
++
++static int gpio_dev_fasync(int fd, struct file *file, int mode)
++{
++ struct gpio_item *gpio = file->private_data;
++
++ return fasync_helper(fd, file, mode, &gpio->async_queue);
+ }
+
+ static int gpio_dev_release(struct inode *inode, struct file *file)
+ {
+ struct gpio_item *gpio = file->private_data;
++ unsigned int irq;
++ unsigned int i;
++
++ gpio_dev_fasync(-1, file, 0);
++
++ for (i = 0; i < 32; i++) {
++ if (gpio->pin_mask & (1 << i)) {
++ irq = gpio_to_irq(32 * pio_id(gpio->pio) + i);
++ free_irq(irq, gpio);
++ }
++ }
+
+ config_item_put(&gpio->item);
++
+ return 0;
+ }
+
++static unsigned int gpio_dev_poll(struct file *file, poll_table *wait)
++{
++ struct gpio_item *gpio = file->private_data;
++ unsigned int mask = 0;
++
++ poll_wait(file, &gpio->change_wq, wait);
++ if (gpio->changed)
++ mask |= POLLIN | POLLRDNORM;
++
++ return mask;
++}
++
+ static ssize_t gpio_dev_read(struct file *file, char __user *buf,
+ size_t count, loff_t *offset)
+ {
+ struct gpio_item *gpio = file->private_data;
+ u32 value;
+
++ spin_lock_irq(&gpio->lock);
++ while (!gpio->changed) {
++ spin_unlock_irq(&gpio->lock);
++
++ if (file->f_flags & O_NONBLOCK)
++ return -EAGAIN;
++
++ if (wait_event_interruptible(gpio->change_wq, gpio->changed))
++ return -ERESTARTSYS;
++
++ spin_lock_irq(&gpio->lock);
++ }
++
++ gpio->changed = 0;
+ value = pio_readl(gpio->pio, PDSR) & gpio->pin_mask;
+
++ spin_unlock_irq(&gpio->lock);
++
+ count = min(count, (size_t)4);
+ if (copy_to_user(buf, &value, count))
+ return -EFAULT;
++
+ return count;
+ }
+
+@@ -338,6 +448,8 @@ static struct file_operations gpio_dev_f
+ .llseek = no_llseek,
+ .open = gpio_dev_open,
+ .release = gpio_dev_release,
++ .fasync = gpio_dev_fasync,
++ .poll = gpio_dev_poll,
+ .read = gpio_dev_read,
+ .write = gpio_dev_write,
+ };
+@@ -632,6 +744,7 @@ static struct config_item *gpio_make_ite
+ gpio->id = next_id++;
+ config_item_init_type_name(&gpio->item, name, &gpio_item_type);
+ spin_lock_init(&gpio->lock);
++ init_waitqueue_head(&gpio->change_wq);
+
+ return &gpio->item;
+ }
diff --git a/packages/linux/linux-2.6.18/gpio-dev-robustness.patch b/packages/linux/linux-2.6.18/gpio-dev-robustness.patch
new file mode 100644
index 0000000000..56ef0ebc6c
--- /dev/null
+++ b/packages/linux/linux-2.6.18/gpio-dev-robustness.patch
@@ -0,0 +1,204 @@
+Make the GPIO /dev interface a bit more robust
+
+Instead of allocating gpio resources on-the-fly as the files are
+written, defer it until enable is set to 1 and disallow updates to
+any of the other files while enable=1.
+
+Otherwise, the number of checks in each _store function will rapidly
+approach insanity.
+---
+ arch/avr32/mach-at32ap/pio.c | 99 ++++++++++++++++++-------------------------
+ 1 file changed, 43 insertions(+), 56 deletions(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-29 17:10:54.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-29 18:11:38.000000000 +0100
+@@ -124,13 +124,6 @@ static unsigned int pio_id(struct pio_de
+ return pio - pio_dev;
+ }
+
+-static void __enable_gpio(struct pio_device *pio, u32 mask)
+-{
+- pio_writel(pio, PUER, mask);
+- pio_writel(pio, ODR, mask);
+- pio_writel(pio, PER, mask);
+-}
+-
+ static void __disable_gpio(struct pio_device *pio, u32 mask)
+ {
+ pio_writel(pio, PUER, mask);
+@@ -251,11 +244,12 @@ static dev_t gpio_devt;
+ struct gpio_item {
+ spinlock_t lock;
+
+- /* Too bad we don't have committable items... */
+- int enabled;
+-
+ struct pio_device *pio;
++
++ int enabled;
++ int pio_id;
+ u32 pin_mask;
++ u32 oe_mask;
+
+ int id;
+ struct class_device *gpio_dev;
+@@ -339,10 +333,7 @@ static struct gpio_item *to_gpio_item(st
+
+ static ssize_t gpio_show_gpio_id(struct gpio_item *gpio, char *page)
+ {
+- if (gpio->pio)
+- return sprintf(page, "%u\n", pio_id(gpio->pio));
+- else
+- return sprintf(page, "-1\n");
++ return sprintf(page, "%d\n", gpio->pio_id);
+ }
+
+ static ssize_t gpio_store_gpio_id(struct gpio_item *gpio,
+@@ -361,7 +352,7 @@ static ssize_t gpio_store_gpio_id(struct
+ if (!gpio->enabled) {
+ ret = -ENXIO;
+ if ((id < MAX_NR_PIO_DEVICES) && pio_dev[id].regs) {
+- gpio->pio = &pio_dev[id];
++ gpio->pio_id = id;
+ ret = count;
+ }
+ }
+@@ -378,9 +369,7 @@ static ssize_t gpio_show_pin_mask(struct
+ static ssize_t gpio_store_pin_mask(struct gpio_item *gpio,
+ const char *page, size_t count)
+ {
+- struct pio_device *pio;
+- u32 old_mask, new_mask;
+- u32 old, new;
++ u32 new_mask;
+ char *p = (char *)page;
+ ssize_t ret = -EINVAL;
+
+@@ -388,47 +377,21 @@ static ssize_t gpio_store_pin_mask(struc
+ if (!p || (*p && (*p != '\n')))
+ return -EINVAL;
+
+- /*
+- * Must have a PIO before we can start allocating pins, but we
+- * must not be live.
+- */
++ /* Can't update the pin mask while live. */
+ spin_lock(&gpio->lock);
+- pio = gpio->pio;
+- if (!pio || gpio->enabled)
+- goto out;
+-
+- ret = -EBUSY;
+- old_mask = gpio->pin_mask;
+- do {
+- old = pio->pinmux_mask;
+- if ((old & ~old_mask) & new_mask)
+- goto out;
+-
+- new = (old & ~old_mask) | new_mask;
+- } while (cmpxchg(&pio->pinmux_mask, old, new) != old);
+-
+- gpio->pin_mask = new_mask;
+- __disable_gpio(pio, old_mask);
+- __enable_gpio(pio, new_mask);
+- ret = count;
+-
+-out:
++ if (!gpio->enabled) {
++ gpio->oe_mask &= new_mask;
++ gpio->pin_mask = new_mask;
++ ret = count;
++ }
+ spin_unlock(&gpio->lock);
++
+ return ret;
+ }
+
+ static ssize_t gpio_show_oe_mask(struct gpio_item *gpio, char *page)
+ {
+- u32 mask = 0;
+-
+- spin_lock(&gpio->lock);
+- if (gpio->pio) {
+- mask = pio_readl(gpio->pio, OSR);
+- mask &= gpio->pin_mask;
+- }
+- spin_unlock(&gpio->lock);
+-
+- return sprintf(page, "0x%08x\n", mask);
++ return sprintf(page, "0x%08x\n", gpio->oe_mask);
+ }
+
+ static ssize_t gpio_store_oe_mask(struct gpio_item *gpio,
+@@ -443,10 +406,8 @@ static ssize_t gpio_store_oe_mask(struct
+ return -EINVAL;
+
+ spin_lock(&gpio->lock);
+- if (gpio->pio) {
+- mask &= gpio->pin_mask;
+- pio_writel(gpio->pio, ODR, mask ^ gpio->pin_mask);
+- pio_writel(gpio->pio, OER, mask);
++ if (!gpio->enabled) {
++ gpio->oe_mask = mask & gpio->pin_mask;
+ ret = count;
+ }
+ spin_unlock(&gpio->lock);
+@@ -462,6 +423,8 @@ static ssize_t gpio_show_enabled(struct
+ static ssize_t gpio_store_enabled(struct gpio_item *gpio,
+ const char *page, size_t count)
+ {
++ struct pio_device *pio;
++ u32 old, new;
+ char *p = (char *)page;
+ int enabled;
+ int ret;
+@@ -482,6 +445,12 @@ static ssize_t gpio_store_enabled(struct
+ if (!enabled) {
+ class_device_unregister(gpio->gpio_dev);
+ cdev_del(&gpio->char_dev);
++ __disable_gpio(gpio->pio, gpio->pin_mask);
++ pio_dealloc_mask(gpio->pio, gpio->pin_mask);
++ gpio->pio = NULL;
++ } else {
++ if (gpio->pio_id < 0 || !gpio->pin_mask)
++ return -ENODEV;
+ }
+
+ /* Disallow any updates to gpio_id or pin_mask */
+@@ -492,6 +461,20 @@ static ssize_t gpio_store_enabled(struct
+ if (!enabled)
+ return count;
+
++ /* Now, try to allocate the pins */
++ ret = -EBUSY;
++ pio = gpio->pio = &pio_dev[gpio->pio_id];
++ do {
++ old = pio->pinmux_mask;
++ if (old & gpio->pin_mask)
++ goto err_alloc_pins;
++
++ new = old | gpio->pin_mask;
++ } while (cmpxchg(&pio->pinmux_mask, old, new) != old);
++
++ pio_writel(pio, OER, gpio->oe_mask);
++ pio_writel(pio, PER, gpio->pin_mask);
++
+ cdev_init(&gpio->char_dev, &gpio_dev_fops);
+ gpio->char_dev.owner = THIS_MODULE;
+ ret = cdev_add(&gpio->char_dev, MKDEV(MAJOR(gpio_devt), gpio->id), 1);
+@@ -516,9 +499,13 @@ static ssize_t gpio_store_enabled(struct
+ err_class_dev:
+ cdev_del(&gpio->char_dev);
+ err_cdev_add:
++ __disable_gpio(pio, gpio->pin_mask);
++ pio_dealloc_mask(pio, gpio->pin_mask);
++err_alloc_pins:
+ spin_lock(&gpio->lock);
+ gpio->enabled = 0;
+ spin_unlock(&gpio->lock);
++ gpio->pio = NULL;
+
+ return ret;
+ }
diff --git a/packages/linux/linux-2.6.18/husb2_udc-test-mode.patch b/packages/linux/linux-2.6.18/husb2_udc-test-mode.patch
new file mode 100644
index 0000000000..f87f71f805
--- /dev/null
+++ b/packages/linux/linux-2.6.18/husb2_udc-test-mode.patch
@@ -0,0 +1,267 @@
+From hskinnemoen@atmel.com Wed Jan 17 10:05:04 2007
+Date: Wed, 17 Jan 2007 10:05:04 +0100
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Subject: [PATCH] Implement USB test modes for husb2_udc
+
+This patch implements the four test modes defined by the USB 2.0
+standard: Test_J, Test_K, Test_SE0_NAK and Test_Packet.
+
+This patch also contains a couple of more or less unrelated bug fixes
+and debug features:
+
+ * Add "state" file to debugfs for control endpoint. This allows us to
+ see which state the control logic got stuck in when things go bad.
+ * REMOTE_WAKEUP requests are ignored instead of stalling the device.
+ * Bad packet length causes warning message + stall instead of BUG().
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+---
+ drivers/usb/gadget/husb2_udc.c | 135 +++++++++++++++++++++++++++++++++++++++--
+ drivers/usb/gadget/husb2_udc.h | 8 +-
+ 2 files changed, 135 insertions(+), 8 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/usb/gadget/husb2_udc.c 2007-01-16 15:01:42.000000000 +0100
++++ linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.c 2007-01-17 09:56:24.000000000 +0100
+@@ -254,9 +254,20 @@ static void husb2_ep_init_debugfs(struct
+ if (!ep->debugfs_dma_status)
+ goto err_dma_status;
+ }
++ if (ep_is_control(ep)) {
++ ep->debugfs_state
++ = debugfs_create_u32("state", 0400, ep_root,
++ &ep->state);
++ if (!ep->debugfs_state)
++ goto err_state;
++ }
++
+
+ return;
+
++err_state:
++ if (ep_can_dma(ep))
++ debugfs_remove(ep->debugfs_dma_status);
+ err_dma_status:
+ debugfs_remove(ep->debugfs_queue);
+ err_queue:
+@@ -270,6 +281,7 @@ static void husb2_ep_cleanup_debugfs(str
+ {
+ debugfs_remove(ep->debugfs_queue);
+ debugfs_remove(ep->debugfs_dma_status);
++ debugfs_remove(ep->debugfs_state);
+ debugfs_remove(ep->debugfs_dir);
+ ep->debugfs_dma_status = NULL;
+ ep->debugfs_dir = NULL;
+@@ -336,7 +348,7 @@ static inline void husb2_cleanup_debugfs
+ }
+ #endif
+
+-static void copy_to_fifo(void __iomem *fifo, void *buf, int len)
++static void copy_to_fifo(void __iomem *fifo, const void *buf, int len)
+ {
+ unsigned long tmp;
+
+@@ -1302,6 +1314,90 @@ static inline void set_address(struct hu
+ husb2_writel(udc, CTRL, regval);
+ }
+
++static int do_test_mode(struct husb2_udc *udc)
++{
++ static const char test_packet_buffer[] = {
++ /* JKJKJKJK * 9 */
++ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
++ /* JJKKJJKK * 8 */
++ 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,
++ /* JJKKJJKK * 8 */
++ 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,
++ /* JJJJJJJKKKKKKK * 8 */
++ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
++ /* JJJJJJJK * 8 */
++ 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,
++ /* {JKKKKKKK * 10}, JK */
++ 0xFC,0x7E,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0x7E
++ };
++ struct husb2_ep *ep;
++ int test_mode;
++
++ test_mode = udc->test_mode;
++
++ /* Start from a clean slate */
++ reset_all_endpoints(udc);
++
++ switch (test_mode) {
++ case 0x0100:
++ /* Test_J */
++ husb2_writel(udc, TST, HUSB2_BIT(TST_J_MODE));
++ printk("udc: Entering Test_J mode...\n");
++ break;
++ case 0x0200:
++ /* Test_K */
++ husb2_writel(udc, TST, HUSB2_BIT(TST_K_MODE));
++ printk("udc: Entering Test_K mode...\n");
++ break;
++ case 0x0300:
++ /*
++ * Test_SE0_NAK: Force high-speed mode and set up ep0
++ * for Bulk IN transfers
++ */
++ ep = &husb2_ep[0];
++ husb2_writel(udc, TST,
++ HUSB2_BF(SPEED_CFG, HUSB2_SPEED_CFG_FORCE_HIGH));
++ husb2_ep_writel(ep, CFG,
++ HUSB2_BF(EPT_SIZE, HUSB2_EPT_SIZE_64)
++ | HUSB2_BIT(EPT_DIR)
++ | HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_BULK)
++ | HUSB2_BF(BK_NUMBER, 1));
++ if (!(husb2_ep_readl(ep, CFG) & HUSB2_BIT(EPT_MAPPED))) {
++ set_protocol_stall(udc, ep);
++ printk("udc: Test_SE0_NAK: ep0 not mapped\n");
++ } else {
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(EPT_ENABLE));
++ printk("udc: Entering Test_SE0_NAK mode...\n");
++ }
++ break;
++ case 0x0400:
++ /* Test_Packet */
++ ep = &husb2_ep[0];
++ husb2_ep_writel(ep, CFG,
++ HUSB2_BF(EPT_SIZE, HUSB2_EPT_SIZE_64)
++ | HUSB2_BIT(EPT_DIR)
++ | HUSB2_BF(EPT_TYPE, HUSB2_EPT_TYPE_BULK)
++ | HUSB2_BF(BK_NUMBER, 1));
++ if (!(husb2_ep_readl(ep, CFG) & HUSB2_BIT(EPT_MAPPED))) {
++ set_protocol_stall(udc, ep);
++ printk("udc: Test_Packet: ep0 not mapped\n");
++ } else {
++ husb2_ep_writel(ep, CTL_ENB, HUSB2_BIT(EPT_ENABLE));
++ husb2_writel(udc, TST, HUSB2_BIT(TST_PKT_MODE));
++ copy_to_fifo(ep->fifo, test_packet_buffer,
++ sizeof(test_packet_buffer));
++ husb2_ep_writel(ep, SET_STA, HUSB2_BIT(TX_PK_RDY));
++ printk("udc: Entering Test_Packet mode...\n");
++ }
++ break;
++ default:
++ printk("udc: Invalid test mode: 0x%04x\n", test_mode);
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
+ static int handle_ep0_setup(struct husb2_udc *udc, struct husb2_ep *ep,
+ struct usb_ctrlrequest *crq)
+ {
+@@ -1341,8 +1437,13 @@ static int handle_ep0_setup(struct husb2
+
+ case USB_REQ_CLEAR_FEATURE: {
+ if (crq->bRequestType == USB_RECIP_DEVICE) {
+- /* We don't support TEST_MODE */
+- goto stall;
++ if (crq->wValue
++ == __constant_cpu_to_le16(USB_DEVICE_REMOTE_WAKEUP)) {
++ /* TODO: Handle REMOTE_WAKEUP */
++ } else {
++ /* CLEAR_FEATURE doesn't make sense for TEST_MODE */
++ goto stall;
++ }
+ } else if (crq->bRequestType == USB_RECIP_ENDPOINT) {
+ struct husb2_ep *target;
+
+@@ -1365,8 +1466,18 @@ static int handle_ep0_setup(struct husb2
+
+ case USB_REQ_SET_FEATURE: {
+ if (crq->bRequestType == USB_RECIP_DEVICE) {
+- /* We don't support TEST_MODE */
+- goto stall;
++ if (crq->wValue
++ == __constant_cpu_to_le16(USB_DEVICE_TEST_MODE)) {
++ send_status(udc, ep);
++ ep->state = STATUS_STAGE_TEST;
++ udc->test_mode = le16_to_cpu(crq->wIndex);
++ return 0;
++ } else if (crq->wValue
++ == __constant_cpu_to_le16(USB_DEVICE_REMOTE_WAKEUP)) {
++ /* TODO: Handle REMOTE_WAKEUP */
++ } else {
++ goto stall;
++ }
+ } else if (crq->bRequestType == USB_RECIP_ENDPOINT) {
+ struct husb2_ep *target;
+
+@@ -1476,6 +1587,12 @@ restart:
+ HUSB2_BIT(TX_COMPLETE));
+ ep->state = WAIT_FOR_SETUP;
+ break;
++ case STATUS_STAGE_TEST:
++ husb2_ep_writel(ep, CTL_DIS, HUSB2_BIT(TX_COMPLETE));
++ ep->state = WAIT_FOR_SETUP;
++ if (do_test_mode(udc))
++ set_protocol_stall(udc, ep);
++ break;
+ default:
+ printk(KERN_ERR
+ "udc: %s: TXCOMP: Invalid endpoint state %d, "
+@@ -1550,7 +1667,13 @@ restart:
+
+ pkt_len = HUSB2_BFEXT(BYTE_COUNT, husb2_ep_readl(ep, STA));
+ DBG(DBG_HW, "Packet length: %u\n", pkt_len);
+- BUG_ON(pkt_len != sizeof(crq));
++ if (pkt_len != sizeof(crq)) {
++ printk(KERN_WARNING
++ "udc: Invalid packet length %u (expected %lu)\n",
++ pkt_len, sizeof(crq));
++ set_protocol_stall(udc, ep);
++ return;
++ }
+
+ DBG(DBG_FIFO, "Copying ctrl request from 0x%p:\n", ep->fifo);
+ copy_from_fifo(crq.data, ep->fifo, sizeof(crq));
+Index: linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.h
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/usb/gadget/husb2_udc.h 2007-01-16 15:01:42.000000000 +0100
++++ linux-2.6.18-avr32/drivers/usb/gadget/husb2_udc.h 2007-01-17 09:54:03.000000000 +0100
+@@ -21,7 +21,7 @@
+ #define HUSB2_TST_CNT_A 0x00d4
+ #define HUSB2_TST_CNT_B 0x00d8
+ #define HUSB2_TST_MODE_REG 0x00dc
+-#define HUSB2_TST 0x00f0
++#define HUSB2_TST 0x00e0
+
+ /* USB endpoint register offsets */
+ #define HUSB2_EPT_CFG 0x0000
+@@ -113,7 +113,7 @@
+ #define HUSB2_TST_J_MODE_SIZE 1
+ #define HUSB2_TST_K_MODE_OFFSET 3
+ #define HUSB2_TST_K_MODE_SIZE 1
+-#define HUSB2_TST_PKT_MODE_OFFSE 4
++#define HUSB2_TST_PKT_MODE_OFFSET 4
+ #define HUSB2_TST_PKT_MODE_SIZE 1
+ #define HUSB2_OPMODE2_OFFSET 5
+ #define HUSB2_OPMODE2_SIZE 1
+@@ -304,6 +304,7 @@ enum husb2_ctrl_state {
+ STATUS_STAGE_IN,
+ STATUS_STAGE_OUT,
+ STATUS_STAGE_ADDR,
++ STATUS_STAGE_TEST,
+ };
+ /*
+ EP_STATE_IDLE,
+@@ -343,6 +344,7 @@ struct husb2_ep {
+ struct dentry *debugfs_dir;
+ struct dentry *debugfs_queue;
+ struct dentry *debugfs_dma_status;
++ struct dentry *debugfs_state;
+ #endif
+ };
+ #define HUSB2_EP_CAP_ISOC 0x0001
+@@ -381,6 +383,8 @@ struct husb2_udc {
+ struct clk *pclk;
+ struct clk *hclk;
+
++ int test_mode;
++
+ #ifdef CONFIG_DEBUG_FS
+ struct dentry *debugfs_root;
+ struct dentry *debugfs_regs;
diff --git a/packages/linux/linux-2.6.18/jffs2_can_mark_obsolete-should-return-0-for-dataflash.patch b/packages/linux/linux-2.6.18/jffs2_can_mark_obsolete-should-return-0-for-dataflash.patch
new file mode 100644
index 0000000000..8efbd78d7a
--- /dev/null
+++ b/packages/linux/linux-2.6.18/jffs2_can_mark_obsolete-should-return-0-for-dataflash.patch
@@ -0,0 +1,37 @@
+From 686ee9491d8566eff95cf728eb5d6c9921f92bd2 Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Tue, 28 Nov 2006 12:56:51 +0100
+Subject: [PATCH] MTD: jffs2_can_mark_obsolete() should return 0 for dataflash
+
+Attempting to write something to a file on a jffs2 filesystem using
+mtd_dataflash often results in the following BUG:
+
+jffs2_flash_writev(): Non-contiguous write to 00825720
+wbuf was previously 00825300-0082530c
+kernel BUG at /home/hskinnemoen/git/linux-devel/fs/jffs2/wbuf.c:786!
+
+Fix this by returning 0 from jffs2_can_mark_obsolete() when running
+on top of dataflash.
+
+Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+---
+ fs/jffs2/os-linux.h | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/fs/jffs2/os-linux.h b/fs/jffs2/os-linux.h
+index 9f41fc0..a037fa4 100644
+--- a/fs/jffs2/os-linux.h
++++ b/fs/jffs2/os-linux.h
+@@ -106,7 +106,8 @@ static inline void jffs2_init_inode_info
+ #ifdef CONFIG_JFFS2_SUMMARY
+ #define jffs2_can_mark_obsolete(c) (0)
+ #else
+-#define jffs2_can_mark_obsolete(c) (c->mtd->flags & (MTD_BIT_WRITEABLE))
++#define jffs2_can_mark_obsolete(c) (c->mtd->flags & (MTD_BIT_WRITEABLE) \
++ && !jffs2_dataflash(c))
+ #endif
+
+ #define jffs2_cleanmarker_oob(c) (c->mtd->type == MTD_NANDFLASH)
+--
+1.4.3.3
+
diff --git a/packages/linux/linux-2.6.18/kbuild-add-unifdef.patch b/packages/linux/linux-2.6.18/kbuild-add-unifdef.patch
new file mode 100644
index 0000000000..78922a98af
--- /dev/null
+++ b/packages/linux/linux-2.6.18/kbuild-add-unifdef.patch
@@ -0,0 +1,1020 @@
+From 01f1c8799ad8b23c190d59cf1c9e28e6fed390a4 Mon Sep 17 00:00:00 2001
+From: Sam Ravnborg <sam@mars.ravnborg.org>
+Date: Sun, 23 Jul 2006 20:39:59 +0200
+Subject: [PATCH] kbuild: add unifdef
+
+This patch contains a raw copy of unifdef.c
+Next patch will modify it and add infrastructure to use it
+Adding unifdef to the kernel is acked by the author.
+
+The reason to add unifdef as part of the kernel source is that it is not
+yet a common utility on most distributions.
+
+Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
+---
+ scripts/unifdef.c | 998 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 998 insertions(+)
+
+Index: linux-2.6.18-avr32/scripts/unifdef.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/scripts/unifdef.c 2006-10-30 15:59:47.000000000 +0100
+@@ -0,0 +1,998 @@
++/*
++ * Copyright (c) 2002 - 2005 Tony Finch <dot@dotat.at>. All rights reserved.
++ *
++ * This code is derived from software contributed to Berkeley by Dave Yost.
++ * It was rewritten to support ANSI C by Tony Finch. The original version of
++ * unifdef carried the following copyright notice. None of its code remains
++ * in this version (though some of the names remain).
++ *
++ * Copyright (c) 1985, 1993
++ * The Regents of the University of California. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++#include <sys/cdefs.h>
++
++#ifndef lint
++#if 0
++static const char copyright[] =
++"@(#) Copyright (c) 1985, 1993\n\
++ The Regents of the University of California. All rights reserved.\n";
++#endif
++#ifdef __IDSTRING
++__IDSTRING(Berkeley, "@(#)unifdef.c 8.1 (Berkeley) 6/6/93");
++__IDSTRING(NetBSD, "$NetBSD: unifdef.c,v 1.8 2000/07/03 02:51:36 matt Exp $");
++__IDSTRING(dotat, "$dotat: things/unifdef.c,v 1.171 2005/03/08 12:38:48 fanf2 Exp $");
++#endif
++#endif /* not lint */
++#ifdef __FBSDID
++__FBSDID("$FreeBSD: /repoman/r/ncvs/src/usr.bin/unifdef/unifdef.c,v 1.20 2005/05/21 09:55:09 ru Exp $");
++#endif
++
++/*
++ * unifdef - remove ifdef'ed lines
++ *
++ * Wishlist:
++ * provide an option which will append the name of the
++ * appropriate symbol after #else's and #endif's
++ * provide an option which will check symbols after
++ * #else's and #endif's to see that they match their
++ * corresponding #ifdef or #ifndef
++ *
++ * The first two items above require better buffer handling, which would
++ * also make it possible to handle all "dodgy" directives correctly.
++ */
++
++#include <ctype.h>
++#include <err.h>
++#include <stdarg.h>
++#include <stdbool.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++
++size_t strlcpy(char *dst, const char *src, size_t siz);
++
++/* types of input lines: */
++typedef enum {
++ LT_TRUEI, /* a true #if with ignore flag */
++ LT_FALSEI, /* a false #if with ignore flag */
++ LT_IF, /* an unknown #if */
++ LT_TRUE, /* a true #if */
++ LT_FALSE, /* a false #if */
++ LT_ELIF, /* an unknown #elif */
++ LT_ELTRUE, /* a true #elif */
++ LT_ELFALSE, /* a false #elif */
++ LT_ELSE, /* #else */
++ LT_ENDIF, /* #endif */
++ LT_DODGY, /* flag: directive is not on one line */
++ LT_DODGY_LAST = LT_DODGY + LT_ENDIF,
++ LT_PLAIN, /* ordinary line */
++ LT_EOF, /* end of file */
++ LT_COUNT
++} Linetype;
++
++static char const * const linetype_name[] = {
++ "TRUEI", "FALSEI", "IF", "TRUE", "FALSE",
++ "ELIF", "ELTRUE", "ELFALSE", "ELSE", "ENDIF",
++ "DODGY TRUEI", "DODGY FALSEI",
++ "DODGY IF", "DODGY TRUE", "DODGY FALSE",
++ "DODGY ELIF", "DODGY ELTRUE", "DODGY ELFALSE",
++ "DODGY ELSE", "DODGY ENDIF",
++ "PLAIN", "EOF"
++};
++
++/* state of #if processing */
++typedef enum {
++ IS_OUTSIDE,
++ IS_FALSE_PREFIX, /* false #if followed by false #elifs */
++ IS_TRUE_PREFIX, /* first non-false #(el)if is true */
++ IS_PASS_MIDDLE, /* first non-false #(el)if is unknown */
++ IS_FALSE_MIDDLE, /* a false #elif after a pass state */
++ IS_TRUE_MIDDLE, /* a true #elif after a pass state */
++ IS_PASS_ELSE, /* an else after a pass state */
++ IS_FALSE_ELSE, /* an else after a true state */
++ IS_TRUE_ELSE, /* an else after only false states */
++ IS_FALSE_TRAILER, /* #elifs after a true are false */
++ IS_COUNT
++} Ifstate;
++
++static char const * const ifstate_name[] = {
++ "OUTSIDE", "FALSE_PREFIX", "TRUE_PREFIX",
++ "PASS_MIDDLE", "FALSE_MIDDLE", "TRUE_MIDDLE",
++ "PASS_ELSE", "FALSE_ELSE", "TRUE_ELSE",
++ "FALSE_TRAILER"
++};
++
++/* state of comment parser */
++typedef enum {
++ NO_COMMENT = false, /* outside a comment */
++ C_COMMENT, /* in a comment like this one */
++ CXX_COMMENT, /* between // and end of line */
++ STARTING_COMMENT, /* just after slash-backslash-newline */
++ FINISHING_COMMENT, /* star-backslash-newline in a C comment */
++ CHAR_LITERAL, /* inside '' */
++ STRING_LITERAL /* inside "" */
++} Comment_state;
++
++static char const * const comment_name[] = {
++ "NO", "C", "CXX", "STARTING", "FINISHING", "CHAR", "STRING"
++};
++
++/* state of preprocessor line parser */
++typedef enum {
++ LS_START, /* only space and comments on this line */
++ LS_HASH, /* only space, comments, and a hash */
++ LS_DIRTY /* this line can't be a preprocessor line */
++} Line_state;
++
++static char const * const linestate_name[] = {
++ "START", "HASH", "DIRTY"
++};
++
++/*
++ * Minimum translation limits from ISO/IEC 9899:1999 5.2.4.1
++ */
++#define MAXDEPTH 64 /* maximum #if nesting */
++#define MAXLINE 4096 /* maximum length of line */
++#define MAXSYMS 4096 /* maximum number of symbols */
++
++/*
++ * Sometimes when editing a keyword the replacement text is longer, so
++ * we leave some space at the end of the tline buffer to accommodate this.
++ */
++#define EDITSLOP 10
++
++/*
++ * Globals.
++ */
++
++static bool complement; /* -c: do the complement */
++static bool debugging; /* -d: debugging reports */
++static bool iocccok; /* -e: fewer IOCCC errors */
++static bool killconsts; /* -k: eval constant #ifs */
++static bool lnblank; /* -l: blank deleted lines */
++static bool lnnum; /* -n: add #line directives */
++static bool symlist; /* -s: output symbol list */
++static bool text; /* -t: this is a text file */
++
++static const char *symname[MAXSYMS]; /* symbol name */
++static const char *value[MAXSYMS]; /* -Dsym=value */
++static bool ignore[MAXSYMS]; /* -iDsym or -iUsym */
++static int nsyms; /* number of symbols */
++
++static FILE *input; /* input file pointer */
++static const char *filename; /* input file name */
++static int linenum; /* current line number */
++
++static char tline[MAXLINE+EDITSLOP];/* input buffer plus space */
++static char *keyword; /* used for editing #elif's */
++
++static Comment_state incomment; /* comment parser state */
++static Line_state linestate; /* #if line parser state */
++static Ifstate ifstate[MAXDEPTH]; /* #if processor state */
++static bool ignoring[MAXDEPTH]; /* ignore comments state */
++static int stifline[MAXDEPTH]; /* start of current #if */
++static int depth; /* current #if nesting */
++static int delcount; /* count of deleted lines */
++static bool keepthis; /* don't delete constant #if */
++
++static int exitstat; /* program exit status */
++
++static void addsym(bool, bool, char *);
++static void debug(const char *, ...);
++static void done(void);
++static void error(const char *);
++static int findsym(const char *);
++static void flushline(bool);
++static Linetype getline(void);
++static Linetype ifeval(const char **);
++static void ignoreoff(void);
++static void ignoreon(void);
++static void keywordedit(const char *);
++static void nest(void);
++static void process(void);
++static const char *skipcomment(const char *);
++static const char *skipsym(const char *);
++static void state(Ifstate);
++static int strlcmp(const char *, const char *, size_t);
++static void unnest(void);
++static void usage(void);
++
++#define endsym(c) (!isalpha((unsigned char)c) && !isdigit((unsigned char)c) && c != '_')
++
++/*
++ * The main program.
++ */
++int
++main(int argc, char *argv[])
++{
++ int opt;
++
++ while ((opt = getopt(argc, argv, "i:D:U:I:cdeklnst")) != -1)
++ switch (opt) {
++ case 'i': /* treat stuff controlled by these symbols as text */
++ /*
++ * For strict backwards-compatibility the U or D
++ * should be immediately after the -i but it doesn't
++ * matter much if we relax that requirement.
++ */
++ opt = *optarg++;
++ if (opt == 'D')
++ addsym(true, true, optarg);
++ else if (opt == 'U')
++ addsym(true, false, optarg);
++ else
++ usage();
++ break;
++ case 'D': /* define a symbol */
++ addsym(false, true, optarg);
++ break;
++ case 'U': /* undef a symbol */
++ addsym(false, false, optarg);
++ break;
++ case 'I':
++ /* no-op for compatibility with cpp */
++ break;
++ case 'c': /* treat -D as -U and vice versa */
++ complement = true;
++ break;
++ case 'd':
++ debugging = true;
++ break;
++ case 'e': /* fewer errors from dodgy lines */
++ iocccok = true;
++ break;
++ case 'k': /* process constant #ifs */
++ killconsts = true;
++ break;
++ case 'l': /* blank deleted lines instead of omitting them */
++ lnblank = true;
++ break;
++ case 'n': /* add #line directive after deleted lines */
++ lnnum = true;
++ break;
++ case 's': /* only output list of symbols that control #ifs */
++ symlist = true;
++ break;
++ case 't': /* don't parse C comments */
++ text = true;
++ break;
++ default:
++ usage();
++ }
++ argc -= optind;
++ argv += optind;
++ if (argc > 1) {
++ errx(2, "can only do one file");
++ } else if (argc == 1 && strcmp(*argv, "-") != 0) {
++ filename = *argv;
++ input = fopen(filename, "r");
++ if (input == NULL)
++ err(2, "can't open %s", filename);
++ } else {
++ filename = "[stdin]";
++ input = stdin;
++ }
++ process();
++ abort(); /* bug */
++}
++
++static void
++usage(void)
++{
++ fprintf(stderr, "usage: unifdef [-cdeklnst] [-Ipath]"
++ " [-Dsym[=val]] [-Usym] [-iDsym[=val]] [-iUsym] ... [file]\n");
++ exit(2);
++}
++
++/*
++ * A state transition function alters the global #if processing state
++ * in a particular way. The table below is indexed by the current
++ * processing state and the type of the current line.
++ *
++ * Nesting is handled by keeping a stack of states; some transition
++ * functions increase or decrease the depth. They also maintain the
++ * ignore state on a stack. In some complicated cases they have to
++ * alter the preprocessor directive, as follows.
++ *
++ * When we have processed a group that starts off with a known-false
++ * #if/#elif sequence (which has therefore been deleted) followed by a
++ * #elif that we don't understand and therefore must keep, we edit the
++ * latter into a #if to keep the nesting correct.
++ *
++ * When we find a true #elif in a group, the following block will
++ * always be kept and the rest of the sequence after the next #elif or
++ * #else will be discarded. We edit the #elif into a #else and the
++ * following directive to #endif since this has the desired behaviour.
++ *
++ * "Dodgy" directives are split across multiple lines, the most common
++ * example being a multi-line comment hanging off the right of the
++ * directive. We can handle them correctly only if there is no change
++ * from printing to dropping (or vice versa) caused by that directive.
++ * If the directive is the first of a group we have a choice between
++ * failing with an error, or passing it through unchanged instead of
++ * evaluating it. The latter is not the default to avoid questions from
++ * users about unifdef unexpectedly leaving behind preprocessor directives.
++ */
++typedef void state_fn(void);
++
++/* report an error */
++static void Eelif (void) { error("Inappropriate #elif"); }
++static void Eelse (void) { error("Inappropriate #else"); }
++static void Eendif(void) { error("Inappropriate #endif"); }
++static void Eeof (void) { error("Premature EOF"); }
++static void Eioccc(void) { error("Obfuscated preprocessor control line"); }
++/* plain line handling */
++static void print (void) { flushline(true); }
++static void drop (void) { flushline(false); }
++/* output lacks group's start line */
++static void Strue (void) { drop(); ignoreoff(); state(IS_TRUE_PREFIX); }
++static void Sfalse(void) { drop(); ignoreoff(); state(IS_FALSE_PREFIX); }
++static void Selse (void) { drop(); state(IS_TRUE_ELSE); }
++/* print/pass this block */
++static void Pelif (void) { print(); ignoreoff(); state(IS_PASS_MIDDLE); }
++static void Pelse (void) { print(); state(IS_PASS_ELSE); }
++static void Pendif(void) { print(); unnest(); }
++/* discard this block */
++static void Dfalse(void) { drop(); ignoreoff(); state(IS_FALSE_TRAILER); }
++static void Delif (void) { drop(); ignoreoff(); state(IS_FALSE_MIDDLE); }
++static void Delse (void) { drop(); state(IS_FALSE_ELSE); }
++static void Dendif(void) { drop(); unnest(); }
++/* first line of group */
++static void Fdrop (void) { nest(); Dfalse(); }
++static void Fpass (void) { nest(); Pelif(); }
++static void Ftrue (void) { nest(); Strue(); }
++static void Ffalse(void) { nest(); Sfalse(); }
++/* variable pedantry for obfuscated lines */
++static void Oiffy (void) { if (!iocccok) Eioccc(); Fpass(); ignoreon(); }
++static void Oif (void) { if (!iocccok) Eioccc(); Fpass(); }
++static void Oelif (void) { if (!iocccok) Eioccc(); Pelif(); }
++/* ignore comments in this block */
++static void Idrop (void) { Fdrop(); ignoreon(); }
++static void Itrue (void) { Ftrue(); ignoreon(); }
++static void Ifalse(void) { Ffalse(); ignoreon(); }
++/* edit this line */
++static void Mpass (void) { strncpy(keyword, "if ", 4); Pelif(); }
++static void Mtrue (void) { keywordedit("else\n"); state(IS_TRUE_MIDDLE); }
++static void Melif (void) { keywordedit("endif\n"); state(IS_FALSE_TRAILER); }
++static void Melse (void) { keywordedit("endif\n"); state(IS_FALSE_ELSE); }
++
++static state_fn * const trans_table[IS_COUNT][LT_COUNT] = {
++/* IS_OUTSIDE */
++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Eendif,
++ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eendif,
++ print, done },
++/* IS_FALSE_PREFIX */
++{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Strue, Sfalse,Selse, Dendif,
++ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Eioccc,Eioccc,Eioccc,Eioccc,
++ drop, Eeof },
++/* IS_TRUE_PREFIX */
++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Dfalse,Dfalse,Dfalse,Delse, Dendif,
++ Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
++ print, Eeof },
++/* IS_PASS_MIDDLE */
++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Pelif, Mtrue, Delif, Pelse, Pendif,
++ Oiffy, Oiffy, Fpass, Oif, Oif, Pelif, Oelif, Oelif, Pelse, Pendif,
++ print, Eeof },
++/* IS_FALSE_MIDDLE */
++{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Pelif, Mtrue, Delif, Pelse, Pendif,
++ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
++ drop, Eeof },
++/* IS_TRUE_MIDDLE */
++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Melif, Melif, Melif, Melse, Pendif,
++ Oiffy, Oiffy, Fpass, Oif, Oif, Eioccc,Eioccc,Eioccc,Eioccc,Pendif,
++ print, Eeof },
++/* IS_PASS_ELSE */
++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Pendif,
++ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Pendif,
++ print, Eeof },
++/* IS_FALSE_ELSE */
++{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Dendif,
++ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Eioccc,
++ drop, Eeof },
++/* IS_TRUE_ELSE */
++{ Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Dendif,
++ Oiffy, Oiffy, Fpass, Oif, Oif, Eelif, Eelif, Eelif, Eelse, Eioccc,
++ print, Eeof },
++/* IS_FALSE_TRAILER */
++{ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Dendif,
++ Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Eioccc,
++ drop, Eeof }
++/*TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF
++ TRUEI FALSEI IF TRUE FALSE ELIF ELTRUE ELFALSE ELSE ENDIF (DODGY)
++ PLAIN EOF */
++};
++
++/*
++ * State machine utility functions
++ */
++static void
++done(void)
++{
++ if (incomment)
++ error("EOF in comment");
++ exit(exitstat);
++}
++static void
++ignoreoff(void)
++{
++ if (depth == 0)
++ abort(); /* bug */
++ ignoring[depth] = ignoring[depth-1];
++}
++static void
++ignoreon(void)
++{
++ ignoring[depth] = true;
++}
++static void
++keywordedit(const char *replacement)
++{
++ strlcpy(keyword, replacement, tline + sizeof(tline) - keyword);
++ print();
++}
++static void
++nest(void)
++{
++ depth += 1;
++ if (depth >= MAXDEPTH)
++ error("Too many levels of nesting");
++ stifline[depth] = linenum;
++}
++static void
++unnest(void)
++{
++ if (depth == 0)
++ abort(); /* bug */
++ depth -= 1;
++}
++static void
++state(Ifstate is)
++{
++ ifstate[depth] = is;
++}
++
++/*
++ * Write a line to the output or not, according to command line options.
++ */
++static void
++flushline(bool keep)
++{
++ if (symlist)
++ return;
++ if (keep ^ complement) {
++ if (lnnum && delcount > 0)
++ printf("#line %d\n", linenum);
++ fputs(tline, stdout);
++ delcount = 0;
++ } else {
++ if (lnblank)
++ putc('\n', stdout);
++ exitstat = 1;
++ delcount += 1;
++ }
++}
++
++/*
++ * The driver for the state machine.
++ */
++static void
++process(void)
++{
++ Linetype lineval;
++
++ for (;;) {
++ linenum++;
++ lineval = getline();
++ trans_table[ifstate[depth]][lineval]();
++ debug("process %s -> %s depth %d",
++ linetype_name[lineval],
++ ifstate_name[ifstate[depth]], depth);
++ }
++}
++
++/*
++ * Parse a line and determine its type. We keep the preprocessor line
++ * parser state between calls in the global variable linestate, with
++ * help from skipcomment().
++ */
++static Linetype
++getline(void)
++{
++ const char *cp;
++ int cursym;
++ int kwlen;
++ Linetype retval;
++ Comment_state wascomment;
++
++ if (fgets(tline, MAXLINE, input) == NULL)
++ return (LT_EOF);
++ retval = LT_PLAIN;
++ wascomment = incomment;
++ cp = skipcomment(tline);
++ if (linestate == LS_START) {
++ if (*cp == '#') {
++ linestate = LS_HASH;
++ cp = skipcomment(cp + 1);
++ } else if (*cp != '\0')
++ linestate = LS_DIRTY;
++ }
++ if (!incomment && linestate == LS_HASH) {
++ keyword = tline + (cp - tline);
++ cp = skipsym(cp);
++ kwlen = cp - keyword;
++ /* no way can we deal with a continuation inside a keyword */
++ if (strncmp(cp, "\\\n", 2) == 0)
++ Eioccc();
++ if (strlcmp("ifdef", keyword, kwlen) == 0 ||
++ strlcmp("ifndef", keyword, kwlen) == 0) {
++ cp = skipcomment(cp);
++ if ((cursym = findsym(cp)) < 0)
++ retval = LT_IF;
++ else {
++ retval = (keyword[2] == 'n')
++ ? LT_FALSE : LT_TRUE;
++ if (value[cursym] == NULL)
++ retval = (retval == LT_TRUE)
++ ? LT_FALSE : LT_TRUE;
++ if (ignore[cursym])
++ retval = (retval == LT_TRUE)
++ ? LT_TRUEI : LT_FALSEI;
++ }
++ cp = skipsym(cp);
++ } else if (strlcmp("if", keyword, kwlen) == 0)
++ retval = ifeval(&cp);
++ else if (strlcmp("elif", keyword, kwlen) == 0)
++ retval = ifeval(&cp) - LT_IF + LT_ELIF;
++ else if (strlcmp("else", keyword, kwlen) == 0)
++ retval = LT_ELSE;
++ else if (strlcmp("endif", keyword, kwlen) == 0)
++ retval = LT_ENDIF;
++ else {
++ linestate = LS_DIRTY;
++ retval = LT_PLAIN;
++ }
++ cp = skipcomment(cp);
++ if (*cp != '\0') {
++ linestate = LS_DIRTY;
++ if (retval == LT_TRUE || retval == LT_FALSE ||
++ retval == LT_TRUEI || retval == LT_FALSEI)
++ retval = LT_IF;
++ if (retval == LT_ELTRUE || retval == LT_ELFALSE)
++ retval = LT_ELIF;
++ }
++ if (retval != LT_PLAIN && (wascomment || incomment)) {
++ retval += LT_DODGY;
++ if (incomment)
++ linestate = LS_DIRTY;
++ }
++ /* skipcomment should have changed the state */
++ if (linestate == LS_HASH)
++ abort(); /* bug */
++ }
++ if (linestate == LS_DIRTY) {
++ while (*cp != '\0')
++ cp = skipcomment(cp + 1);
++ }
++ debug("parser %s comment %s line",
++ comment_name[incomment], linestate_name[linestate]);
++ return (retval);
++}
++
++/*
++ * These are the binary operators that are supported by the expression
++ * evaluator. Note that if support for division is added then we also
++ * need short-circuiting booleans because of divide-by-zero.
++ */
++static int op_lt(int a, int b) { return (a < b); }
++static int op_gt(int a, int b) { return (a > b); }
++static int op_le(int a, int b) { return (a <= b); }
++static int op_ge(int a, int b) { return (a >= b); }
++static int op_eq(int a, int b) { return (a == b); }
++static int op_ne(int a, int b) { return (a != b); }
++static int op_or(int a, int b) { return (a || b); }
++static int op_and(int a, int b) { return (a && b); }
++
++/*
++ * An evaluation function takes three arguments, as follows: (1) a pointer to
++ * an element of the precedence table which lists the operators at the current
++ * level of precedence; (2) a pointer to an integer which will receive the
++ * value of the expression; and (3) a pointer to a char* that points to the
++ * expression to be evaluated and that is updated to the end of the expression
++ * when evaluation is complete. The function returns LT_FALSE if the value of
++ * the expression is zero, LT_TRUE if it is non-zero, or LT_IF if the
++ * expression could not be evaluated.
++ */
++struct ops;
++
++typedef Linetype eval_fn(const struct ops *, int *, const char **);
++
++static eval_fn eval_table, eval_unary;
++
++/*
++ * The precedence table. Expressions involving binary operators are evaluated
++ * in a table-driven way by eval_table. When it evaluates a subexpression it
++ * calls the inner function with its first argument pointing to the next
++ * element of the table. Innermost expressions have special non-table-driven
++ * handling.
++ */
++static const struct ops {
++ eval_fn *inner;
++ struct op {
++ const char *str;
++ int (*fn)(int, int);
++ } op[5];
++} eval_ops[] = {
++ { eval_table, { { "||", op_or } } },
++ { eval_table, { { "&&", op_and } } },
++ { eval_table, { { "==", op_eq },
++ { "!=", op_ne } } },
++ { eval_unary, { { "<=", op_le },
++ { ">=", op_ge },
++ { "<", op_lt },
++ { ">", op_gt } } }
++};
++
++/*
++ * Function for evaluating the innermost parts of expressions,
++ * viz. !expr (expr) defined(symbol) symbol number
++ * We reset the keepthis flag when we find a non-constant subexpression.
++ */
++static Linetype
++eval_unary(const struct ops *ops, int *valp, const char **cpp)
++{
++ const char *cp;
++ char *ep;
++ int sym;
++
++ cp = skipcomment(*cpp);
++ if (*cp == '!') {
++ debug("eval%d !", ops - eval_ops);
++ cp++;
++ if (eval_unary(ops, valp, &cp) == LT_IF)
++ return (LT_IF);
++ *valp = !*valp;
++ } else if (*cp == '(') {
++ cp++;
++ debug("eval%d (", ops - eval_ops);
++ if (eval_table(eval_ops, valp, &cp) == LT_IF)
++ return (LT_IF);
++ cp = skipcomment(cp);
++ if (*cp++ != ')')
++ return (LT_IF);
++ } else if (isdigit((unsigned char)*cp)) {
++ debug("eval%d number", ops - eval_ops);
++ *valp = strtol(cp, &ep, 0);
++ cp = skipsym(cp);
++ } else if (strncmp(cp, "defined", 7) == 0 && endsym(cp[7])) {
++ cp = skipcomment(cp+7);
++ debug("eval%d defined", ops - eval_ops);
++ if (*cp++ != '(')
++ return (LT_IF);
++ cp = skipcomment(cp);
++ sym = findsym(cp);
++ if (sym < 0)
++ return (LT_IF);
++ *valp = (value[sym] != NULL);
++ cp = skipsym(cp);
++ cp = skipcomment(cp);
++ if (*cp++ != ')')
++ return (LT_IF);
++ keepthis = false;
++ } else if (!endsym(*cp)) {
++ debug("eval%d symbol", ops - eval_ops);
++ sym = findsym(cp);
++ if (sym < 0)
++ return (LT_IF);
++ if (value[sym] == NULL)
++ *valp = 0;
++ else {
++ *valp = strtol(value[sym], &ep, 0);
++ if (*ep != '\0' || ep == value[sym])
++ return (LT_IF);
++ }
++ cp = skipsym(cp);
++ keepthis = false;
++ } else {
++ debug("eval%d bad expr", ops - eval_ops);
++ return (LT_IF);
++ }
++
++ *cpp = cp;
++ debug("eval%d = %d", ops - eval_ops, *valp);
++ return (*valp ? LT_TRUE : LT_FALSE);
++}
++
++/*
++ * Table-driven evaluation of binary operators.
++ */
++static Linetype
++eval_table(const struct ops *ops, int *valp, const char **cpp)
++{
++ const struct op *op;
++ const char *cp;
++ int val;
++
++ debug("eval%d", ops - eval_ops);
++ cp = *cpp;
++ if (ops->inner(ops+1, valp, &cp) == LT_IF)
++ return (LT_IF);
++ for (;;) {
++ cp = skipcomment(cp);
++ for (op = ops->op; op->str != NULL; op++)
++ if (strncmp(cp, op->str, strlen(op->str)) == 0)
++ break;
++ if (op->str == NULL)
++ break;
++ cp += strlen(op->str);
++ debug("eval%d %s", ops - eval_ops, op->str);
++ if (ops->inner(ops+1, &val, &cp) == LT_IF)
++ return (LT_IF);
++ *valp = op->fn(*valp, val);
++ }
++
++ *cpp = cp;
++ debug("eval%d = %d", ops - eval_ops, *valp);
++ return (*valp ? LT_TRUE : LT_FALSE);
++}
++
++/*
++ * Evaluate the expression on a #if or #elif line. If we can work out
++ * the result we return LT_TRUE or LT_FALSE accordingly, otherwise we
++ * return just a generic LT_IF.
++ */
++static Linetype
++ifeval(const char **cpp)
++{
++ int ret;
++ int val;
++
++ debug("eval %s", *cpp);
++ keepthis = killconsts ? false : true;
++ ret = eval_table(eval_ops, &val, cpp);
++ debug("eval = %d", val);
++ return (keepthis ? LT_IF : ret);
++}
++
++/*
++ * Skip over comments, strings, and character literals and stop at the
++ * next character position that is not whitespace. Between calls we keep
++ * the comment state in the global variable incomment, and we also adjust
++ * the global variable linestate when we see a newline.
++ * XXX: doesn't cope with the buffer splitting inside a state transition.
++ */
++static const char *
++skipcomment(const char *cp)
++{
++ if (text || ignoring[depth]) {
++ for (; isspace((unsigned char)*cp); cp++)
++ if (*cp == '\n')
++ linestate = LS_START;
++ return (cp);
++ }
++ while (*cp != '\0')
++ /* don't reset to LS_START after a line continuation */
++ if (strncmp(cp, "\\\n", 2) == 0)
++ cp += 2;
++ else switch (incomment) {
++ case NO_COMMENT:
++ if (strncmp(cp, "/\\\n", 3) == 0) {
++ incomment = STARTING_COMMENT;
++ cp += 3;
++ } else if (strncmp(cp, "/*", 2) == 0) {
++ incomment = C_COMMENT;
++ cp += 2;
++ } else if (strncmp(cp, "//", 2) == 0) {
++ incomment = CXX_COMMENT;
++ cp += 2;
++ } else if (strncmp(cp, "\'", 1) == 0) {
++ incomment = CHAR_LITERAL;
++ linestate = LS_DIRTY;
++ cp += 1;
++ } else if (strncmp(cp, "\"", 1) == 0) {
++ incomment = STRING_LITERAL;
++ linestate = LS_DIRTY;
++ cp += 1;
++ } else if (strncmp(cp, "\n", 1) == 0) {
++ linestate = LS_START;
++ cp += 1;
++ } else if (strchr(" \t", *cp) != NULL) {
++ cp += 1;
++ } else
++ return (cp);
++ continue;
++ case CXX_COMMENT:
++ if (strncmp(cp, "\n", 1) == 0) {
++ incomment = NO_COMMENT;
++ linestate = LS_START;
++ }
++ cp += 1;
++ continue;
++ case CHAR_LITERAL:
++ case STRING_LITERAL:
++ if ((incomment == CHAR_LITERAL && cp[0] == '\'') ||
++ (incomment == STRING_LITERAL && cp[0] == '\"')) {
++ incomment = NO_COMMENT;
++ cp += 1;
++ } else if (cp[0] == '\\') {
++ if (cp[1] == '\0')
++ cp += 1;
++ else
++ cp += 2;
++ } else if (strncmp(cp, "\n", 1) == 0) {
++ if (incomment == CHAR_LITERAL)
++ error("unterminated char literal");
++ else
++ error("unterminated string literal");
++ } else
++ cp += 1;
++ continue;
++ case C_COMMENT:
++ if (strncmp(cp, "*\\\n", 3) == 0) {
++ incomment = FINISHING_COMMENT;
++ cp += 3;
++ } else if (strncmp(cp, "*/", 2) == 0) {
++ incomment = NO_COMMENT;
++ cp += 2;
++ } else
++ cp += 1;
++ continue;
++ case STARTING_COMMENT:
++ if (*cp == '*') {
++ incomment = C_COMMENT;
++ cp += 1;
++ } else if (*cp == '/') {
++ incomment = CXX_COMMENT;
++ cp += 1;
++ } else {
++ incomment = NO_COMMENT;
++ linestate = LS_DIRTY;
++ }
++ continue;
++ case FINISHING_COMMENT:
++ if (*cp == '/') {
++ incomment = NO_COMMENT;
++ cp += 1;
++ } else
++ incomment = C_COMMENT;
++ continue;
++ default:
++ abort(); /* bug */
++ }
++ return (cp);
++}
++
++/*
++ * Skip over an identifier.
++ */
++static const char *
++skipsym(const char *cp)
++{
++ while (!endsym(*cp))
++ ++cp;
++ return (cp);
++}
++
++/*
++ * Look for the symbol in the symbol table. If is is found, we return
++ * the symbol table index, else we return -1.
++ */
++static int
++findsym(const char *str)
++{
++ const char *cp;
++ int symind;
++
++ cp = skipsym(str);
++ if (cp == str)
++ return (-1);
++ if (symlist) {
++ printf("%.*s\n", (int)(cp-str), str);
++ /* we don't care about the value of the symbol */
++ return (0);
++ }
++ for (symind = 0; symind < nsyms; ++symind) {
++ if (strlcmp(symname[symind], str, cp-str) == 0) {
++ debug("findsym %s %s", symname[symind],
++ value[symind] ? value[symind] : "");
++ return (symind);
++ }
++ }
++ return (-1);
++}
++
++/*
++ * Add a symbol to the symbol table.
++ */
++static void
++addsym(bool ignorethis, bool definethis, char *sym)
++{
++ int symind;
++ char *val;
++
++ symind = findsym(sym);
++ if (symind < 0) {
++ if (nsyms >= MAXSYMS)
++ errx(2, "too many symbols");
++ symind = nsyms++;
++ }
++ symname[symind] = sym;
++ ignore[symind] = ignorethis;
++ val = sym + (skipsym(sym) - sym);
++ if (definethis) {
++ if (*val == '=') {
++ value[symind] = val+1;
++ *val = '\0';
++ } else if (*val == '\0')
++ value[symind] = "";
++ else
++ usage();
++ } else {
++ if (*val != '\0')
++ usage();
++ value[symind] = NULL;
++ }
++}
++
++/*
++ * Compare s with n characters of t.
++ * The same as strncmp() except that it checks that s[n] == '\0'.
++ */
++static int
++strlcmp(const char *s, const char *t, size_t n)
++{
++ while (n-- && *t != '\0')
++ if (*s != *t)
++ return ((unsigned char)*s - (unsigned char)*t);
++ else
++ ++s, ++t;
++ return ((unsigned char)*s);
++}
++
++/*
++ * Diagnostics.
++ */
++static void
++debug(const char *msg, ...)
++{
++ va_list ap;
++
++ if (debugging) {
++ va_start(ap, msg);
++ vwarnx(msg, ap);
++ va_end(ap);
++ }
++}
++
++static void
++error(const char *msg)
++{
++ if (depth == 0)
++ warnx("%s: %d: %s", filename, linenum, msg);
++ else
++ warnx("%s: %d: %s (#if line %d depth %d)",
++ filename, linenum, msg, stifline[depth], depth);
++ errx(2, "output may be truncated");
++}
diff --git a/packages/linux/linux-2.6.18/kbuild-replace-use-of-strlcpy-with-a-dedicated-implmentation-in-unifdef.patch b/packages/linux/linux-2.6.18/kbuild-replace-use-of-strlcpy-with-a-dedicated-implmentation-in-unifdef.patch
new file mode 100644
index 0000000000..a9a67daff3
--- /dev/null
+++ b/packages/linux/linux-2.6.18/kbuild-replace-use-of-strlcpy-with-a-dedicated-implmentation-in-unifdef.patch
@@ -0,0 +1,30 @@
+From 14a036d2dc304797f3624c06bd6d2a1e9b59e45a Mon Sep 17 00:00:00 2001
+From: Sam Ravnborg <sam@mars.ravnborg.org>
+Date: Sun, 23 Jul 2006 20:41:30 +0200
+Subject: [PATCH] kbuild: replace use of strlcpy with a dedicated implmentation in unifdef
+
+Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
+---
+ scripts/unifdef.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+Index: linux-2.6.18-avr32/scripts/unifdef.c
+===================================================================
+--- linux-2.6.18-avr32.orig/scripts/unifdef.c 2006-10-30 15:58:53.000000000 +0100
++++ linux-2.6.18-avr32/scripts/unifdef.c 2006-10-30 15:58:59.000000000 +0100
+@@ -450,7 +450,14 @@ ignoreon(void)
+ static void
+ keywordedit(const char *replacement)
+ {
+- strlcpy(keyword, replacement, tline + sizeof(tline) - keyword);
++ size_t size = tline + sizeof(tline) - keyword;
++ char *dst = keyword;
++ const char *src = replacement;
++ if (size != 0) {
++ while ((--size != 0) && (*src != '\0'))
++ *dst++ = *src++;
++ *dst = '\0';
++ }
+ print();
+ }
+ static void
diff --git a/packages/linux/linux-2.6.18/kbuild-use-in-kernel-unifdef.patch b/packages/linux/linux-2.6.18/kbuild-use-in-kernel-unifdef.patch
new file mode 100644
index 0000000000..b2c7930bb7
--- /dev/null
+++ b/packages/linux/linux-2.6.18/kbuild-use-in-kernel-unifdef.patch
@@ -0,0 +1,56 @@
+From 07aea3a71fc6b07744691eec2dfea705a7b30280 Mon Sep 17 00:00:00 2001
+From: Sam Ravnborg <sam@mars.ravnborg.org>
+Date: Sun, 23 Jul 2006 20:47:50 +0200
+Subject: [PATCH] kbuild: use in-kernel unifdef
+
+Let headers_install use in-kernel unifdef
+
+Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
+---
+ Makefile | 4 ++--
+ scripts/Makefile | 3 +++
+ scripts/Makefile.headersinst | 2 +-
+ 3 files changed, 6 insertions(+), 3 deletions(-)
+
+Index: linux-2.6.18-avr32/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/Makefile 2006-10-26 10:20:21.000000000 +0200
++++ linux-2.6.18-avr32/Makefile 2006-10-30 15:59:06.000000000 +0100
+@@ -893,8 +893,8 @@ INSTALL_HDR_PATH=$(objtree)/usr
+ export INSTALL_HDR_PATH
+
+ PHONY += headers_install
+-headers_install: include/linux/version.h
+- $(Q)unifdef -Ux /dev/null
++headers_install: include/linux/version.h scripts_basic FORCE
++ $(Q)$(MAKE) $(build)=scripts scripts/unifdef
+ $(Q)rm -rf $(INSTALL_HDR_PATH)/include
+ $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.headersinst obj=include
+
+Index: linux-2.6.18-avr32/scripts/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/scripts/Makefile 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-avr32/scripts/Makefile 2006-10-30 15:59:06.000000000 +0100
+@@ -15,6 +15,9 @@ hostprogs-$(CONFIG_IKCONFIG) += bin2
+
+ always := $(hostprogs-y)
+
++# The following hostprogs-y programs are only build on demand
++hostprogs-y += unifdef
++
+ subdir-$(CONFIG_MODVERSIONS) += genksyms
+ subdir-$(CONFIG_MODULES) += mod
+
+Index: linux-2.6.18-avr32/scripts/Makefile.headersinst
+===================================================================
+--- linux-2.6.18-avr32.orig/scripts/Makefile.headersinst 2006-09-20 05:42:06.000000000 +0200
++++ linux-2.6.18-avr32/scripts/Makefile.headersinst 2006-10-30 15:59:06.000000000 +0100
+@@ -7,7 +7,7 @@
+ #
+ # ==========================================================================
+
+-UNIFDEF := unifdef -U__KERNEL__
++UNIFDEF := scripts/unifdef -U__KERNEL__
+
+ # Eliminate the contents of (and inclusions of) compiler.h
+ HDRSED := sed -e "s/ inline / __inline__ /g" \
diff --git a/packages/linux/linux-2.6.18/lcdc-do-not-clear-mem-if-fbmem_start-is-set.patch b/packages/linux/linux-2.6.18/lcdc-do-not-clear-mem-if-fbmem_start-is-set.patch
new file mode 100644
index 0000000000..b354047f60
--- /dev/null
+++ b/packages/linux/linux-2.6.18/lcdc-do-not-clear-mem-if-fbmem_start-is-set.patch
@@ -0,0 +1,16 @@
+Index: linux-2.6.18/drivers/video/sidsafb.c
+===================================================================
+--- linux-2.6.18.orig/drivers/video/sidsafb.c 2006-12-20 13:43:17.000000000 +0100
++++ linux-2.6.18/drivers/video/sidsafb.c 2006-12-20 13:46:44.000000000 +0100
+@@ -765,7 +765,10 @@
+ printk("fb%d: Atmel LCDC at 0x%08lx (mapped at %p), irq %lu\n",
+ info->node, info->fix.mmio_start, sinfo->regs, sinfo->irq_base);
+
+- memset_io(info->screen_base, 0, info->fix.smem_len);
++ /* Only clear framebuffer if fbmem_start was not declared, assume the
++ * user have filled the framebuffer before the kernel was started. */
++ if (!fb_data->fbmem_start)
++ memset_io(info->screen_base, 0, info->fix.smem_len);
+ info->var.activate |= FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW;
+ ret = fb_set_var(info, &info->var);
+ if (ret)
diff --git a/packages/linux/linux-2.6.18/lcdc-fix-possible-null-pointer-and-match-guard-time-to-uboot.patch b/packages/linux/linux-2.6.18/lcdc-fix-possible-null-pointer-and-match-guard-time-to-uboot.patch
new file mode 100644
index 0000000000..fea5d6cf80
--- /dev/null
+++ b/packages/linux/linux-2.6.18/lcdc-fix-possible-null-pointer-and-match-guard-time-to-uboot.patch
@@ -0,0 +1,38 @@
+Index: linux-2.6.18/drivers/video/sidsafb.c
+===================================================================
+--- linux-2.6.18.orig/drivers/video/sidsafb.c 2007-01-11 13:35:02.000000000 +0100
++++ linux-2.6.18/drivers/video/sidsafb.c 2007-01-11 14:22:56.000000000 +0100
+@@ -661,6 +661,7 @@
+ struct fb_info *info;
+ struct sidsafb_info *sinfo;
+ const struct resource *mmio_resource;
++ int preinitialized = 0;
+ int ret;
+
+ pr_debug("sidsafb_probe BEGIN\n");
+@@ -681,7 +682,7 @@
+ sinfo = info->par;
+ sinfo->info = info;
+ sinfo->pdev = pdev;
+- sinfo->guard_time = 1;
++ sinfo->guard_time = 2;
+
+ spin_lock_init(&sinfo->lock);
+ sidsafb_set_fbinfo(sinfo);
+@@ -711,6 +712,7 @@
+ info->fix.smem_len = fb_data->fbmem_size;
+ info->screen_base = ioremap(info->fix.smem_start,
+ info->fix.smem_len);
++ preinitialized = 1;
+ } else {
+ dma_addr_t paddr;
+
+@@ -767,7 +769,7 @@
+
+ /* Only clear framebuffer if fbmem_start was not declared, assume the
+ * user have filled the framebuffer before the kernel was started. */
+- if (!fb_data->fbmem_start)
++ if (!preinitialized)
+ memset_io(info->screen_base, 0, info->fix.smem_len);
+ info->var.activate |= FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW;
+ ret = fb_set_var(info, &info->var);
diff --git a/packages/linux/linux-2.6.18/lcdc-wait-for-vsync.patch b/packages/linux/linux-2.6.18/lcdc-wait-for-vsync.patch
new file mode 100644
index 0000000000..7c1cd663cb
--- /dev/null
+++ b/packages/linux/linux-2.6.18/lcdc-wait-for-vsync.patch
@@ -0,0 +1,152 @@
+---
+ drivers/video/sidsafb.c | 68 +++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 61 insertions(+), 7 deletions(-)
+
+Index: linux-2.6.18-rc6-mm1/drivers/video/sidsafb.c
+===================================================================
+--- linux-2.6.18-rc6-mm1.orig/drivers/video/sidsafb.c 2006-09-11 13:03:46.000000000 +0200
++++ linux-2.6.18-rc6-mm1/drivers/video/sidsafb.c 2006-09-11 13:38:52.000000000 +0200
+@@ -11,6 +11,7 @@
+
+ #include <linux/config.h>
+ #include <linux/clk.h>
++#include <linux/completion.h>
+ #include <linux/kernel.h>
+ #include <linux/dma-mapping.h>
+ #include <linux/interrupt.h>
+@@ -38,7 +39,8 @@ struct sidsafb_info {
+ struct fb_info * info;
+ void __iomem * regs;
+ unsigned long irq_base;
+- wait_queue_head_t vsync_wait;
++ int wait_for_vsync;
++ struct completion vsync_complete;
+ unsigned int guard_time;
+ struct clk *hclk;
+ struct clk *pixclk;
+@@ -169,6 +171,38 @@ static struct fb_fix_screeninfo sidsafb_
+ .accel = FB_ACCEL_NONE,
+ };
+
++/*
++ * Let the user decide whether FBIOPAN_DISPLAY waits for the next
++ * vsync or not.
++ */
++static ssize_t
++vsync_pan_show(struct device *dev, struct device_attribute *attr, char *buf)
++{
++ struct fb_info *info = dev_get_drvdata(dev);
++ struct sidsafb_info *sinfo = info->par;
++
++ return sprintf(buf, "%d\n", sinfo->wait_for_vsync);
++}
++
++static ssize_t
++vsync_pan_store(struct device *dev, struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct fb_info *info = dev_get_drvdata(dev);
++ struct sidsafb_info *sinfo = info->par;
++ unsigned long val;
++
++ val = simple_strtoul(buf, NULL, 0);
++ if (val)
++ sinfo->wait_for_vsync = 1;
++ else
++ sinfo->wait_for_vsync = 0;
++
++ return count;
++}
++
++static DEVICE_ATTR(vsync_pan, 0644, vsync_pan_show, vsync_pan_store);
++
+ static void sidsafb_update_dma(struct fb_info *info,
+ struct fb_var_screeninfo *var)
+ {
+@@ -513,10 +547,25 @@ static int sidsafb_setcolreg(unsigned in
+ static int sidsafb_pan_display(struct fb_var_screeninfo *var,
+ struct fb_info *info)
+ {
++ struct sidsafb_info *sinfo = info->par;
++
+ pr_debug("sidsafb_pan_display\n");
+
+ sidsafb_update_dma(info, var);
+
++ if (sinfo->wait_for_vsync) {
++ spin_lock_irq(&sinfo->lock);
++ lcdc_writel(sinfo, LCD_ICR, LCDC_BIT(LCD_ICR_EOFIC));
++ lcdc_writel(sinfo, LCD_IER, LCDC_BIT(LCD_IER_EOFIE));
++ init_completion(&sinfo->vsync_complete);
++ lcdc_readl(sinfo, LCD_IMR);
++ spin_unlock_irq(&sinfo->lock);
++
++ wait_for_completion(&sinfo->vsync_complete);
++
++ lcdc_writel(sinfo, LCD_IDR, LCDC_BIT(LCD_IDR_EOFID));
++ }
++
+ return 0;
+ }
+
+@@ -545,7 +594,7 @@ static irqreturn_t sidsafb_interrupt(int
+
+ lcdc_writel(sinfo, LCD_ICR, LCDC_BIT(LCD_ICR_EOFIC));
+ status &= ~LCDC_BIT(LCD_ISR_EOFIS);
+- wake_up(&sinfo->vsync_wait);
++ complete(&sinfo->vsync_complete);
+ }
+
+ if (status) {
+@@ -600,8 +649,6 @@ static int __devinit sidsafb_set_fbinfo(
+ info->fbops = &sidsafb_ops;
+ info->pseudo_palette = sinfo->pseudo_palette;
+
+- init_waitqueue_head(&sinfo->vsync_wait);
+-
+ return 0;
+ }
+
+@@ -700,18 +747,21 @@ static int __devinit sidsafb_probe(struc
+ goto unregister_irqs;
+ }
+
++ platform_set_drvdata(pdev, info);
++ ret = device_create_file(&pdev->dev, &dev_attr_vsync_pan);
++ if (ret)
++ goto free_cmap;
++
+ /*
+ * Tell the world that we're ready to go
+ */
+ ret = register_framebuffer(info);
+ if (ret)
+- goto free_cmap;
++ goto remove_attrs;
+
+ printk("fb%d: Atmel LCDC at 0x%08lx (mapped at %p), irq %lu\n",
+ info->node, info->fix.mmio_start, sinfo->regs, sinfo->irq_base);
+
+- platform_set_drvdata(pdev, info);
+-
+ memset_io(info->screen_base, 0, info->fix.smem_len);
+ info->var.activate |= FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW;
+ ret = fb_set_var(info, &info->var);
+@@ -724,6 +774,8 @@ static int __devinit sidsafb_probe(struc
+ return 0;
+
+
++remove_attrs:
++ device_remove_file(&pdev->dev, &dev_attr_vsync_pan);
+ free_cmap:
+ fb_dealloc_cmap(&info->cmap);
+ unregister_irqs:
+@@ -761,6 +813,8 @@ static int __devexit sidsafb_remove(stru
+ /* TODO: Restore original state */
+ unregister_framebuffer(info);
+
++ device_remove_file(&pdev->dev, &dev_attr_vsync_pan);
++
+ fb_dealloc_cmap(&info->cmap);
+ free_irq(sinfo->irq_base, info);
+ iounmap(sinfo->regs);
diff --git a/packages/linux/linux-2.6.18/ltv350qv-add-initial_power_state-param.patch b/packages/linux/linux-2.6.18/ltv350qv-add-initial_power_state-param.patch
new file mode 100644
index 0000000000..a877b0ea37
--- /dev/null
+++ b/packages/linux/linux-2.6.18/ltv350qv-add-initial_power_state-param.patch
@@ -0,0 +1,25 @@
+Index: linux-2.6.18/drivers/video/backlight/ltv350qv.c
+===================================================================
+--- linux-2.6.18.orig/drivers/video/backlight/ltv350qv.c 2007-01-11 14:55:39.000000000 +0100
++++ linux-2.6.18/drivers/video/backlight/ltv350qv.c 2007-01-11 14:59:23.000000000 +0100
+@@ -19,6 +19,11 @@
+
+ #define POWER_IS_ON(pwr) ((pwr) <= FB_BLANK_NORMAL)
+
++static int initial_power_state = FB_BLANK_POWERDOWN;
++
++module_param(initial_power_state, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
++MODULE_PARM_DESC(initial_power_state, "Set initial power state of LCD");
++
+ struct ltv350qv {
+ struct spi_device *spi;
+ u8 *buffer;
+@@ -178,7 +183,7 @@
+ return -ENOMEM;
+
+ lcd->spi = spi;
+- lcd->power = FB_BLANK_POWERDOWN;
++ lcd->power = initial_power_state;
+ init_MUTEX(&lcd->lock);
+ lcd->buffer = kzalloc(8, GFP_KERNEL);
+
diff --git a/packages/linux/linux-2.6.18/ltv350qv-lcd-driver.patch b/packages/linux/linux-2.6.18/ltv350qv-lcd-driver.patch
new file mode 100644
index 0000000000..ce0250e3fd
--- /dev/null
+++ b/packages/linux/linux-2.6.18/ltv350qv-lcd-driver.patch
@@ -0,0 +1,355 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Wed Dec 21 14:52:09 2005 +0100
+Subject: [PATCH] LTV350QV LCD driver
+
+This patch adds support for powering on and off the Samsung LTV350QV
+LCD panel via SPI. The driver responds to framebuffer power management,
+it powers off the panel on reboot/halt/poweroff, and it can also be
+controlled through sysfs. The panel is powered up when the module is
+loaded and off when the module is unloaded.
+
+---
+ drivers/video/backlight/Kconfig | 12 +
+ drivers/video/backlight/Makefile | 1
+ drivers/video/backlight/ltv350qv.c | 301 +++++++++++++++++++++++++++++++++++++
+ 3 files changed, 314 insertions(+)
+
+Index: linux-2.6.18-avr32/drivers/video/backlight/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/video/backlight/Kconfig 2006-09-11 20:30:16.000000000 +0200
++++ linux-2.6.18-avr32/drivers/video/backlight/Kconfig 2006-09-11 20:31:24.000000000 +0200
+@@ -42,6 +42,18 @@ config LCD_DEVICE
+ depends on LCD_CLASS_DEVICE
+ default y
+
++config LCD_LTV350QV
++ tristate "Samsung LTV350QV LCD Panel"
++ depends on LCD_DEVICE && SPI
++ default n
++ help
++ If you have a Samsung LTV350QV LCD panel, say y to include a
++ power control driver for it. The panel starts up in power
++ off state, so you need this driver in order to see any
++ output.
++
++ The LTV350QV panel is present on most ATSTK1000 boards.
++
+ config BACKLIGHT_CORGI
+ tristate "Sharp Corgi Backlight Driver (SL Series)"
+ depends on BACKLIGHT_DEVICE && PXA_SHARPSL
+Index: linux-2.6.18-avr32/drivers/video/backlight/Makefile
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/video/backlight/Makefile 2006-09-11 20:30:23.000000000 +0200
++++ linux-2.6.18-avr32/drivers/video/backlight/Makefile 2006-09-11 20:31:24.000000000 +0200
+@@ -5,3 +5,4 @@ obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) +=
+ obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o
+ obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
+ obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
++obj-$(CONFIG_LCD_LTV350QV) += ltv350qv.o
+Index: linux-2.6.18-avr32/drivers/video/backlight/ltv350qv.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.18-avr32/drivers/video/backlight/ltv350qv.c 2006-09-11 20:31:24.000000000 +0200
+@@ -0,0 +1,301 @@
++/*
++ * Power control for Samsung LTV350QV Quarter VGA LCD Panel
++ *
++ * Copyright (C) 2006 Atmel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/config.h>
++#include <linux/delay.h>
++#include <linux/err.h>
++#include <linux/fb.h>
++#include <linux/init.h>
++#include <linux/lcd.h>
++#include <linux/module.h>
++#include <linux/reboot.h>
++#include <linux/spi/spi.h>
++
++#define POWER_IS_ON(pwr) ((pwr) <= FB_BLANK_NORMAL)
++
++struct ltv350qv {
++ struct spi_device *spi;
++ u8 *buffer;
++ int power;
++ struct semaphore lock;
++ struct lcd_device *ld;
++ struct list_head list;
++ int halt_done;
++};
++
++static LIST_HEAD(lcd_list);
++
++static int ltv350qv_write_reg(struct ltv350qv *lcd, u8 reg, u16 val)
++{
++ struct spi_message msg;
++ struct spi_transfer index_xfer = {
++ .len = 3,
++ .cs_change = 1,
++ };
++ struct spi_transfer value_xfer = {
++ .len = 3,
++ .cs_change = 1,
++ };
++
++ spi_message_init(&msg);
++
++ /* register index */
++ lcd->buffer[0] = 0x74;
++ lcd->buffer[1] = 0x00;
++ lcd->buffer[2] = reg & 0x7f;
++ index_xfer.tx_buf = lcd->buffer;
++ spi_message_add_tail(&index_xfer, &msg);
++
++ /* register value */
++ lcd->buffer[4] = 0x76;
++ lcd->buffer[5] = val >> 8;
++ lcd->buffer[6] = val;
++ value_xfer.tx_buf = lcd->buffer + 4;
++ spi_message_add_tail(&value_xfer, &msg);
++
++ return spi_sync(lcd->spi, &msg);
++}
++
++#define write_reg(_spi, reg, val) \
++ do { \
++ ret = ltv350qv_write_reg(_spi, reg, val); \
++ if (ret) \
++ goto out; \
++ } while (0)
++
++static int ltv350qv_power_on(struct ltv350qv *lcd)
++{
++ int ret;
++
++ write_reg(lcd, 9, 0x0000);
++ msleep(15);
++ write_reg(lcd, 9, 0x4000);
++ write_reg(lcd, 10, 0x2000);
++ write_reg(lcd, 9, 0x4055);
++ msleep(55);
++ write_reg(lcd, 1, 0x409d);
++ write_reg(lcd, 2, 0x0204);
++ write_reg(lcd, 3, 0x0100);
++ write_reg(lcd, 4, 0x3000);
++ write_reg(lcd, 5, 0x4003);
++ write_reg(lcd, 6, 0x000a);
++ write_reg(lcd, 7, 0x0021);
++ write_reg(lcd, 8, 0x0c00);
++ write_reg(lcd, 10, 0x0103);
++ write_reg(lcd, 11, 0x0301);
++ write_reg(lcd, 12, 0x1f0f);
++ write_reg(lcd, 13, 0x1f0f);
++ write_reg(lcd, 14, 0x0707);
++ write_reg(lcd, 15, 0x0307);
++ write_reg(lcd, 16, 0x0707);
++ write_reg(lcd, 17, 0x0000);
++ write_reg(lcd, 18, 0x0004);
++ write_reg(lcd, 19, 0x0000);
++
++ msleep(20);
++ write_reg(lcd, 9, 0x4a55);
++ write_reg(lcd, 5, 0x5003);
++
++out:
++ return ret;
++}
++
++static int ltv350qv_power_off(struct ltv350qv *lcd)
++{
++ int ret;
++
++ /* GON -> 0, POC -> 0 */
++ write_reg(lcd, 9, 0x4055);
++ /* DSC -> 0 */
++ write_reg(lcd, 5, 0x4003);
++ /* VCOMG -> 0 */
++ write_reg(lcd, 10, 0x2103);
++
++ msleep(1);
++
++ /* AP[2:0] -> 000 */
++ write_reg(lcd, 9, 0x4050);
++
++out:
++ return ret;
++}
++
++static int ltv350qv_power(struct ltv350qv *lcd, int power)
++{
++ int ret = 0;
++
++ down(&lcd->lock);
++
++ if (POWER_IS_ON(power) && !POWER_IS_ON(lcd->power))
++ ret = ltv350qv_power_on(lcd);
++ else if (!POWER_IS_ON(power) && POWER_IS_ON(lcd->power))
++ ret = ltv350qv_power_off(lcd);
++
++ if (!ret)
++ lcd->power = power;
++
++ up(&lcd->lock);
++
++ return ret;
++}
++
++static int ltv350qv_set_power(struct lcd_device *ld, int power)
++{
++ struct ltv350qv *lcd;
++
++ lcd = class_get_devdata(&ld->class_dev);
++ return ltv350qv_power(lcd, power);
++}
++
++static int ltv350qv_get_power(struct lcd_device *ld)
++{
++ struct ltv350qv *lcd;
++
++ lcd = class_get_devdata(&ld->class_dev);
++ return lcd->power;
++}
++
++static struct lcd_properties lcd_properties = {
++ .owner = THIS_MODULE,
++ .get_power = ltv350qv_get_power,
++ .set_power = ltv350qv_set_power,
++};
++
++static int __devinit ltv350qv_probe(struct spi_device *spi)
++{
++ struct ltv350qv *lcd;
++ struct lcd_device *ld;
++ int ret;
++
++ lcd = kzalloc(sizeof(struct ltv350qv), GFP_KERNEL);
++ if (!lcd)
++ return -ENOMEM;
++
++ lcd->spi = spi;
++ lcd->power = FB_BLANK_POWERDOWN;
++ init_MUTEX(&lcd->lock);
++ lcd->buffer = kzalloc(8, GFP_KERNEL);
++
++ spi->mode = SPI_MODE_3;
++ spi->bits_per_word = 8;
++ ret = spi_setup(spi);
++ if (ret)
++ goto out_free_lcd;
++
++ ld = lcd_device_register("ltv350qv", lcd, &lcd_properties);
++ if (IS_ERR(ld)) {
++ ret = PTR_ERR(ld);
++ goto out_free_lcd;
++ }
++ lcd->ld = ld;
++
++ list_add(&lcd->list, &lcd_list);
++
++ ret = ltv350qv_power(lcd, FB_BLANK_UNBLANK);
++ if (ret)
++ goto out_unregister;
++
++ dev_set_drvdata(&spi->dev, lcd);
++
++ return 0;
++
++out_unregister:
++ lcd_device_unregister(ld);
++out_free_lcd:
++ kfree(lcd);
++ return ret;
++}
++
++static int __devexit ltv350qv_remove(struct spi_device *spi)
++{
++ struct ltv350qv *lcd = dev_get_drvdata(&spi->dev);
++
++ ltv350qv_power(lcd, FB_BLANK_POWERDOWN);
++ list_del(&lcd->list);
++ lcd_device_unregister(lcd->ld);
++ kfree(lcd);
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int ltv350qv_suspend(struct spi_device *spi,
++ pm_message_t state, u32 level)
++{
++ struct ltv350qv *lcd = dev_get_drvdata(&spi->dev);
++
++ if (level == SUSPEND_POWER_DOWN)
++ return ltv350qv_power(lcd, FB_BLANK_POWERDOWN);
++
++ return 0;
++}
++
++static int ltv350qv_resume(struct spi_device *spi, u32 level)
++{
++ struct ltv350qv *lcd = dev_get_drvdata(&spi->dev);
++
++ if (level == RESUME_POWER_ON)
++ return ltv350qv_power(lcd, FB_BLANK_UNBLANK);
++
++ return 0;
++}
++#else
++#define ltv350qv_suspend NULL
++#define ltv350qv_resume NULL
++#endif
++
++/* Power down all displays on reboot, poweroff or halt */
++static int ltv350qv_halt(struct notifier_block *nb, unsigned long event,
++ void *p)
++{
++ struct ltv350qv *lcd;
++
++ list_for_each_entry(lcd, &lcd_list, list) {
++ if (!lcd->halt_done)
++ ltv350qv_power(lcd, FB_BLANK_POWERDOWN);
++ lcd->halt_done = 1;
++ }
++
++ return NOTIFY_OK;
++}
++
++static struct spi_driver ltv350qv_driver = {
++ .driver = {
++ .name = "ltv350qv",
++ .bus = &spi_bus_type,
++ .owner = THIS_MODULE,
++ },
++
++ .probe = ltv350qv_probe,
++ .remove = __devexit_p(ltv350qv_remove),
++ .suspend = ltv350qv_suspend,
++ .resume = ltv350qv_resume,
++};
++
++static struct notifier_block ltv350qv_notifier = {
++ .notifier_call = ltv350qv_halt,
++};
++
++static int __init ltv350qv_init(void)
++{
++ register_reboot_notifier(&ltv350qv_notifier);
++ return spi_register_driver(&ltv350qv_driver);
++}
++
++static void __exit ltv350qv_exit(void)
++{
++ unregister_reboot_notifier(&ltv350qv_notifier);
++ spi_unregister_driver(&ltv350qv_driver);
++}
++module_init(ltv350qv_init);
++module_exit(ltv350qv_exit);
++
++MODULE_AUTHOR("Atmel Norway");
++MODULE_DESCRIPTION("Samsung LTV350QV LCD Driver");
++MODULE_LICENSE("GPL");
diff --git a/packages/linux/linux-2.6.18/mmc-add-bit-manipulating-macros.patch b/packages/linux/linux-2.6.18/mmc-add-bit-manipulating-macros.patch
new file mode 100644
index 0000000000..544e447580
--- /dev/null
+++ b/packages/linux/linux-2.6.18/mmc-add-bit-manipulating-macros.patch
@@ -0,0 +1,321 @@
+Index: linux-2.6.18/drivers/mmc/atmel-mci.c
+===================================================================
+--- linux-2.6.18.orig/drivers/mmc/atmel-mci.c 2007-01-15 16:36:59.000000000 +0100
++++ linux-2.6.18/drivers/mmc/atmel-mci.c 2007-01-16 13:18:40.000000000 +0100
+@@ -45,6 +45,7 @@
+ EVENT_STOP_COMPLETE,
+ EVENT_STOP_ERROR,
+ EVENT_DMA_ERROR,
++ EVENT_CARD_DETECT,
+ };
+
+ struct atmel_mci_dma {
+@@ -572,9 +589,8 @@
+ * Data might complete before command for very short transfers
+ * (like READ_SCR)
+ */
+- if (test_bit(EVENT_CMD_COMPLETE, &host->completed_events)
+- && (!data->stop
+- || test_bit(EVENT_STOP_COMPLETE, &host->completed_events)))
++ if (mci_cmd_is_complete(host)
++ && (!data->stop || mci_stop_is_complete(host)))
+ atmci_request_end(host->mmc, data->mrq);
+ }
+
+@@ -604,11 +620,11 @@
+ host->pending_events, host->completed_events,
+ mci_readl(host, IMR));
+
+- if (test_and_clear_bit(EVENT_CMD_ERROR, &host->pending_events)) {
++ if (mci_clear_cmd_error_is_pending(host)) {
+ struct mmc_command *cmd;
+
+- set_bit(EVENT_CMD_ERROR, &host->completed_events);
+- clear_bit(EVENT_CMD_COMPLETE, &host->pending_events);
++ mci_set_cmd_error_complete(host);
++ mci_clear_cmd_pending(host);
+ cmd = host->mrq->cmd;
+
+ if (cmd->data) {
+@@ -620,28 +636,27 @@
+ atmci_command_error(mmc, cmd, host->error_status);
+ atmci_request_end(mmc, cmd->mrq);
+ }
+- if (test_and_clear_bit(EVENT_STOP_ERROR, &host->pending_events)) {
+- set_bit(EVENT_STOP_ERROR, &host->completed_events);
+- clear_bit(EVENT_STOP_COMPLETE, &host->pending_events);
++ if (mci_clear_stop_error_is_pending(host)) {
++ mci_set_stop_error_complete(host);
++ mci_clear_stop_pending(host);
+ atmci_command_error(mmc, host->mrq->stop,
+ host->error_status);
+ if (!host->data)
+ atmci_request_end(mmc, host->mrq);
+ }
+- if (test_and_clear_bit(EVENT_CMD_COMPLETE, &host->pending_events)) {
+- set_bit(EVENT_CMD_COMPLETE, &host->completed_events);
+- if (!mrq->data
+- || test_bit(EVENT_DATA_COMPLETE, &host->completed_events))
++ if (mci_clear_cmd_is_pending(host)) {
++ mci_set_cmd_complete(host);
++ if (!mrq->data || mci_data_is_complete(host))
+ atmci_request_end(mmc, mrq);
+ }
+- if (test_and_clear_bit(EVENT_STOP_COMPLETE, &host->pending_events)) {
+- set_bit(EVENT_STOP_COMPLETE, &host->completed_events);
+- if (test_bit(EVENT_DATA_COMPLETE, &host->completed_events))
++ if (mci_clear_stop_is_pending(host)) {
++ mci_set_stop_complete(host);
++ if (mci_data_is_complete(host))
+ atmci_request_end(mmc, mrq);
+ }
+- if (test_and_clear_bit(EVENT_DMA_ERROR, &host->pending_events)) {
+- set_bit(EVENT_DMA_ERROR, &host->completed_events);
+- clear_bit(EVENT_DATA_COMPLETE, &host->pending_events);
++ if (mci_clear_dma_error_is_pending(host)) {
++ mci_set_dma_error_complete(host);
++ mci_clear_data_pending(host);
+
+ /* DMA controller got bus error => invalid address */
+ data->error = MMC_ERR_INVALID;
+@@ -650,18 +665,17 @@
+ mmc_hostname(mmc), host->data->bytes_xfered);
+
+ if (data->stop
+- && !test_and_set_bit(EVENT_STOP_SENT,
+- &host->completed_events))
++ && !mci_set_stop_sent_is_completed(host))
+ /* TODO: Check if card is still present */
+ send_stop_cmd(host->mmc, data, 0);
+
+ atmci_data_complete(host, data);
+ }
+- if (test_and_clear_bit(EVENT_DATA_ERROR, &host->pending_events)) {
++ if (mci_clear_data_error_is_pending(host)) {
+ u32 status = host->error_status;
+
+- set_bit(EVENT_DATA_ERROR, &host->completed_events);
+- clear_bit(EVENT_DATA_COMPLETE, &host->pending_events);
++ mci_set_data_error_complete(host);
++ mci_clear_data_pending(host);
+
+ dma_stop_request(host->dma.req.req.dmac,
+ host->dma.req.req.channel);
+@@ -686,14 +700,14 @@
+ mmc_hostname(host->mmc), data->bytes_xfered);
+
+ if (data->stop
+- && !test_and_set_bit(EVENT_STOP_SENT, &host->completed_events))
++ && !mci_set_stop_sent_is_completed(host))
+ /* TODO: Check if card is still present */
+ send_stop_cmd(host->mmc, data, 0);
+
+ atmci_data_complete(host, data);
+ }
+- if (test_and_clear_bit(EVENT_DATA_COMPLETE, &host->pending_events)) {
+- set_bit(EVENT_DATA_COMPLETE, &host->completed_events);
++ if (mci_clear_data_is_pending(host)) {
++ mci_set_data_complete(host);
+ data->bytes_xfered = data->blocks * data->blksz;
+ atmci_data_complete(host, data);
+ }
+@@ -716,10 +761,10 @@
+ mci_writel(host, IDR, MCI_BIT(CMDRDY) | MCI_CMD_ERROR_FLAGS);
+ host->cmd = NULL;
+
+- if (test_bit(EVENT_STOP_SENT, &host->completed_events))
+- set_bit(EVENT_STOP_COMPLETE, &host->pending_events);
++ if (mci_stop_sent_is_complete(host))
++ mci_set_stop_pending(host);
+ else
+- set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
++ mci_set_cmd_pending(host);
+
+ tasklet_schedule(&host->tasklet);
+ }
+@@ -735,13 +780,12 @@
+ host = container_of(dma, struct atmel_mci, dma);
+ data = host->data;
+
+- if (data->stop && !test_and_set_bit(EVENT_STOP_SENT,
+- &host->completed_events))
++ if (data->stop && !mci_set_stop_sent_is_completed(host))
+ send_stop_cmd(host->mmc, data, 0);
+
+ if (data->flags & MMC_DATA_READ) {
+ mci_writel(host, IDR, MCI_DATA_ERROR_FLAGS);
+- set_bit(EVENT_DATA_COMPLETE, &host->pending_events);
++ mci_set_data_pending(host);
+ tasklet_schedule(&host->tasklet);
+ } else {
+ /*
+@@ -765,7 +809,7 @@
+ mci_writel(host, IDR, (MCI_BIT(NOTBUSY)
+ | MCI_DATA_ERROR_FLAGS));
+
+- set_bit(EVENT_DMA_ERROR, &host->pending_events);
++ mci_set_dma_error_pending(host);
+ tasklet_schedule(&host->tasklet);
+ }
+
+@@ -790,10 +834,10 @@
+ | MCI_DATA_ERROR_FLAGS));
+ host->error_status = status;
+ host->cmd = NULL;
+- if (test_bit(EVENT_STOP_SENT, &host->completed_events))
+- set_bit(EVENT_STOP_ERROR, &host->pending_events);
++ if (mci_stop_sent_is_complete(host))
++ mci_set_stop_error_pending(host);
+ else
+- set_bit(EVENT_CMD_ERROR, &host->pending_events);
++ mci_set_cmd_error_pending(host);
+ tasklet_schedule(&host->tasklet);
+ break;
+ }
+@@ -801,7 +845,7 @@
+ mci_writel(host, IDR, (MCI_BIT(NOTBUSY)
+ | MCI_DATA_ERROR_FLAGS));
+ host->error_status = status;
+- set_bit(EVENT_DATA_ERROR, &host->pending_events);
++ mci_set_data_error_pending(host);
+ tasklet_schedule(&host->tasklet);
+ break;
+ }
+@@ -810,7 +854,7 @@
+ if (pending & MCI_BIT(NOTBUSY)) {
+ mci_writel(host, IDR, (MCI_BIT(NOTBUSY)
+ | MCI_DATA_ERROR_FLAGS));
+- set_bit(EVENT_DATA_COMPLETE, &host->pending_events);
++ mci_set_data_pending(host);
+ tasklet_schedule(&host->tasklet);
+ }
+
+Index: linux-2.6.18/drivers/mmc/atmel-mci.h
+===================================================================
+--- linux-2.6.18.orig/drivers/mmc/atmel-mci.h 2007-01-16 13:22:59.000000000 +0100
++++ linux-2.6.18/drivers/mmc/atmel-mci.h 2007-01-16 13:24:33.000000000 +0100
+@@ -189,4 +189,124 @@
+ #define mci_writel(port,reg,value) \
+ __raw_writel((value), (port)->regs + MCI_##reg)
+
++/* Test bit macros for completed events */
++#define mci_cmd_is_complete(host) \
++ test_bit(EVENT_CMD_COMPLETE, &host->completed_events)
++#define mci_cmd_error_is_complete(host) \
++ test_bit(EVENT_CMD_ERROR, &host->completed_events)
++#define mci_data_is_complete(host) \
++ test_bit(EVENT_DATA_COMPLETE, &host->completed_events)
++#define mci_data_error_is_complete(host) \
++ test_bit(EVENT_DATA_ERROR, &host->completed_events)
++#define mci_stop_sent_is_complete(host) \
++ test_bit(EVENT_STOP_SENT, &host->completed_events)
++#define mci_stop_is_complete(host) \
++ test_bit(EVENT_STOP_COMPLETE, &host->completed_events)
++#define mci_stop_error_is_complete(host) \
++ test_bit(EVENT_STOP_ERROR, &host->completed_events)
++#define mci_dma_error_is_complete(host) \
++ test_bit(EVENT_DMA_ERROR, &host->completed_events)
++#define mci_card_detect_is_complete(host) \
++ test_bit(EVENT_CARD_DETECT, &host->completed_events)
++
++/* Test and clear bit macros for pending events */
++#define mci_clear_cmd_is_pending(host) \
++ test_and_clear_bit(EVENT_CMD_COMPLETE, &host->pending_events)
++#define mci_clear_cmd_error_is_pending(host) \
++ test_and_clear_bit(EVENT_CMD_ERROR, &host->pending_events)
++#define mci_clear_data_is_pending(host) \
++ test_and_clear_bit(EVENT_DATA_COMPLETE, &host->pending_events)
++#define mci_clear_data_error_is_pending(host) \
++ test_and_clear_bit(EVENT_DATA_ERROR, &host->pending_events)
++#define mci_clear_stop_sent_is_pending(host) \
++ test_and_clear_bit(EVENT_STOP_SENT, &host->pending_events)
++#define mci_clear_stop_is_pending(host) \
++ test_and_clear_bit(EVENT_STOP_COMPLETE, &host->pending_events)
++#define mci_clear_stop_error_is_pending(host) \
++ test_and_clear_bit(EVENT_STOP_ERROR, &host->pending_events)
++#define mci_clear_dma_error_is_pending(host) \
++ test_and_clear_bit(EVENT_DMA_ERROR, &host->pending_events)
++#define mci_clear_card_detect_is_pending(host) \
++ test_and_clear_bit(EVENT_CARD_DETECT, &host->pending_events)
++
++/* Test and set bit macros for completed events */
++#define mci_set_cmd_is_completed(host) \
++ test_and_set_bit(EVENT_CMD_COMPLETE, &host->completed_events)
++#define mci_set_cmd_error_is_completed(host) \
++ test_and_set_bit(EVENT_CMD_ERROR, &host->completed_events)
++#define mci_set_data_is_completed(host) \
++ test_and_set_bit(EVENT_DATA_COMPLETE, &host->completed_events)
++#define mci_set_data_error_is_completed(host) \
++ test_and_set_bit(EVENT_DATA_ERROR, &host->completed_events)
++#define mci_set_stop_sent_is_completed(host) \
++ test_and_set_bit(EVENT_STOP_SENT, &host->completed_events)
++#define mci_set_stop_is_completed(host) \
++ test_and_set_bit(EVENT_STOP_COMPLETE, &host->completed_events)
++#define mci_set_stop_error_is_completed(host) \
++ test_and_set_bit(EVENT_STOP_ERROR, &host->completed_events)
++#define mci_set_dma_error_is_completed(host) \
++ test_and_set_bit(EVENT_DMA_ERROR, &host->completed_events)
++#define mci_set_card_detect_is_completed(host) \
++ test_and_set_bit(EVENT_CARD_DETECT, &host->completed_events)
++
++/* Set bit macros for completed events */
++#define mci_set_cmd_complete(host) \
++ set_bit(EVENT_CMD_COMPLETE, &host->completed_events)
++#define mci_set_cmd_error_complete(host) \
++ set_bit(EVENT_CMD_ERROR, &host->completed_events)
++#define mci_set_data_complete(host) \
++ set_bit(EVENT_DATA_COMPLETE, &host->completed_events)
++#define mci_set_data_error_complete(host) \
++ set_bit(EVENT_DATA_ERROR, &host->completed_events)
++#define mci_set_stop_sent_complete(host) \
++ set_bit(EVENT_STOP_SENT, &host->completed_events)
++#define mci_set_stop_complete(host) \
++ set_bit(EVENT_STOP_COMPLETE, &host->completed_events)
++#define mci_set_stop_error_complete(host) \
++ set_bit(EVENT_STOP_ERROR, &host->completed_events)
++#define mci_set_dma_error_complete(host) \
++ set_bit(EVENT_DMA_ERROR, &host->completed_events)
++#define mci_set_card_detect_complete(host) \
++ set_bit(EVENT_CARD_DETECT, &host->completed_events)
++
++/* Set bit macros for pending events */
++#define mci_set_cmd_pending(host) \
++ set_bit(EVENT_CMD_COMPLETE, &host->pending_events)
++#define mci_set_cmd_error_pending(host) \
++ set_bit(EVENT_CMD_ERROR, &host->pending_events)
++#define mci_set_data_pending(host) \
++ set_bit(EVENT_DATA_COMPLETE, &host->pending_events)
++#define mci_set_data_error_pending(host) \
++ set_bit(EVENT_DATA_ERROR, &host->pending_events)
++#define mci_set_stop_sent_pending(host) \
++ set_bit(EVENT_STOP_SENT, &host->pending_events)
++#define mci_set_stop_pending(host) \
++ set_bit(EVENT_STOP_COMPLETE, &host->pending_events)
++#define mci_set_stop_error_pending(host) \
++ set_bit(EVENT_STOP_ERROR, &host->pending_events)
++#define mci_set_dma_error_pending(host) \
++ set_bit(EVENT_DMA_ERROR, &host->pending_events)
++#define mci_set_card_detect_pending(host) \
++ set_bit(EVENT_CARD_DETECT, &host->pending_events)
++
++/* Clear bit macros for pending events */
++#define mci_clear_cmd_pending(host) \
++ clear_bit(EVENT_CMD_COMPLETE, &host->pending_events)
++#define mci_clear_cmd_error_pending(host) \
++ clear_bit(EVENT_CMD_ERROR, &host->pending_events)
++#define mci_clear_data_pending(host) \
++ clear_bit(EVENT_DATA_COMPLETE, &host->pending_events)
++#define mci_clear_data_error_pending(host) \
++ clear_bit(EVENT_DATA_ERROR, &host->pending_events)
++#define mci_clear_stop_sent_pending(host) \
++ clear_bit(EVENT_STOP_SENT, &host->pending_events)
++#define mci_clear_stop_pending(host) \
++ clear_bit(EVENT_STOP_COMPLETE, &host->pending_events)
++#define mci_clear_stop_error_pending(host) \
++ clear_bit(EVENT_STOP_ERROR, &host->pending_events)
++#define mci_clear_dma_error_pending(host) \
++ clear_bit(EVENT_DMA_ERROR, &host->pending_events)
++#define mci_clear_card_detect_pending(host) \
++ clear_bit(EVENT_CARD_DETECT, &host->pending_events)
++
+ #endif /* __DRIVERS_MMC_ATMEL_MCI_H__ */
diff --git a/packages/linux/linux-2.6.18/mmc-add-detect-card-and-wp-support.patch b/packages/linux/linux-2.6.18/mmc-add-detect-card-and-wp-support.patch
new file mode 100644
index 0000000000..f91ddc239a
--- /dev/null
+++ b/packages/linux/linux-2.6.18/mmc-add-detect-card-and-wp-support.patch
@@ -0,0 +1,159 @@
+Index: linux-2.6.18/drivers/mmc/atmel-mci.c
+===================================================================
+--- linux-2.6.18.orig/drivers/mmc/atmel-mci.c 2007-01-16 14:01:56.000000000 +0100
++++ linux-2.6.18/drivers/mmc/atmel-mci.c 2007-01-16 14:20:23.000000000 +0100
+@@ -72,7 +72,6 @@
+ u32 error_status;
+
+ int present;
+- unsigned int wp_present:1;
+
+ unsigned long bus_hz;
+ unsigned long mapbase;
+@@ -538,9 +537,26 @@
+ }
+ }
+
++int atmci_get_ro(struct mmc_host *mmc)
++{
++ int read_only = 0;
++ struct atmel_mci *host = mmc_priv(mmc);
++
++ if (host->board->wp_pin != GPIO_PIO_NONE) {
++ read_only = gpio_get_value(host->board->wp_pin);
++ pr_debug("%s: card is %s\n", mmc_hostname(mmc),
++ (read_only ? "read-only" : "read-write") );
++ } else {
++ pr_debug("%s: host does not support reading read-only switch."
++ " Assuming write-enable.\n", mmc_hostname(mmc));
++ }
++ return read_only;
++}
++
+ static struct mmc_host_ops atmci_ops = {
+ .request = atmci_request,
+ .set_ios = atmci_set_ios,
++ .get_ro = atmci_get_ro,
+ };
+
+ static void atmci_request_end(struct mmc_host *mmc, struct mmc_request *mrq)
+@@ -695,6 +711,37 @@
+ data->bytes_xfered = data->blocks * data->blksz;
+ atmci_data_complete(host, data);
+ }
++ if (mci_clear_card_detect_is_pending(host)) {
++ /* Reset controller if card is gone */
++ if (!host->present) {
++ mci_writel(host, CR, MCI_BIT(SWRST));
++ mci_writel(host, IDR, ~0UL);
++ mci_writel(host, CR, MCI_BIT(MCIEN));
++ }
++
++ /* Clean up queue if present */
++ if (mrq) {
++ if (!mci_cmd_is_complete(host)
++ && !mci_cmd_error_is_complete(host)) {
++ mrq->cmd->error = MMC_ERR_TIMEOUT;
++ }
++ if (mrq->data && !mci_data_is_complete(host)
++ && !mci_data_error_is_complete(host)) {
++ dma_stop_request(host->dma.req.req.dmac,
++ host->dma.req.req.channel);
++ host->data->error = MMC_ERR_TIMEOUT;
++ atmci_data_complete(host, data);
++ }
++ if (mrq->stop && !mci_stop_is_complete(host)
++ && !mci_stop_error_is_complete(host)) {
++ mrq->stop->error = MMC_ERR_TIMEOUT;
++ }
++
++ host->cmd = NULL;
++ atmci_request_end(mmc, mrq);
++ }
++ mmc_detect_change(host->mmc, msecs_to_jiffies(100));
++ }
+ }
+
+ static void atmci_cmd_interrupt(struct mmc_host *mmc, u32 status)
+@@ -821,6 +868,23 @@
+ return IRQ_HANDLED;
+ }
+
++static irqreturn_t atmci_detect_int(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct mmc_host *mmc = dev_id;
++ struct atmel_mci *host = mmc_priv(mmc);
++
++ int present = !gpio_get_value(irq_to_gpio(irq));
++
++ if (present != host->present) {
++ pr_debug("%s: card %s\n", mmc_hostname(host->mmc),
++ present ? "inserted" : "removed");
++ host->present = present;
++ mci_set_card_detect_pending(host);
++ tasklet_schedule(&host->tasklet);
++ }
++ return IRQ_HANDLED;
++}
++
+ static int __devinit atmci_probe(struct platform_device *pdev)
+ {
+ struct atmel_mci *host;
+@@ -887,15 +951,9 @@
+
+ if (host->board && host->board->wp_pin != GPIO_PIO_NONE) {
+ ret = gpio_request(host->board->wp_pin, "mmc_wp");
+- if (ret) {
++ if (ret)
+ printk(KERN_WARNING "%s: no WP pin available (%d)\n",
+ mmc_hostname(host->mmc), ret);
+- host->wp_present = 0;
+- } else {
+- host->wp_present = 1;
+- }
+- } else {
+- host->wp_present = 0;
+ }
+
+ /* TODO: Get this information from platform data */
+@@ -928,6 +986,19 @@
+
+ mmc_add_host(mmc);
+
++ if (host->present != -1) {
++ ret = request_irq(gpio_to_irq(host->board->detect_pin),
++ atmci_detect_int,
++ IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,
++ "mmci", mmc);
++ if (ret) {
++ printk(KERN_ERR "%s: could not request IRQ %d "
++ "for detect pin\n",
++ mmc_hostname(mmc),
++ gpio_to_irq(host->board->detect_pin));
++ }
++ }
++
+ printk(KERN_INFO "%s: Atmel MCI controller at 0x%08lx irq %d\n",
+ mmc_hostname(mmc), host->mapbase, irq);
+
+@@ -936,8 +1007,11 @@
+ return 0;
+
+ out_free_irq:
+- if (host->present != -1)
++ if (host->present != -1) {
++ free_irq(gpio_to_irq(host->board->detect_pin), host->mmc);
++ cancel_delayed_work(&host->mmc->detect);
+ gpio_free(host->board->detect_pin);
++ }
+ if (host->board->wp_pin != GPIO_PIO_NONE)
+ gpio_free(host->board->wp_pin);
+ free_irq(irq, mmc);
+@@ -971,6 +1045,7 @@
+ host->dma.req.req.channel);
+
+ if (host->present != -1) {
++ free_irq(gpio_to_irq(host->board->detect_pin), host->mmc);
+ cancel_delayed_work(&host->mmc->detect);
+ gpio_free(host->board->detect_pin);
+ }
diff --git a/packages/linux/linux-2.6.18/mmc-add-platform-data.patch b/packages/linux/linux-2.6.18/mmc-add-platform-data.patch
new file mode 100644
index 0000000000..b0a67b38ca
--- /dev/null
+++ b/packages/linux/linux-2.6.18/mmc-add-platform-data.patch
@@ -0,0 +1,185 @@
+---
+ arch/avr32/boards/atngw/setup.c | 7 ++++
+ arch/avr32/mach-at32ap/at32ap7000.c | 13 +++++++--
+ drivers/mmc/atmel-mci.c | 49 ++++++++++++++++++++++++++++++++++
+ include/asm-avr32/arch-at32ap/board.h | 7 ++++
+ 4 files changed, 72 insertions(+), 4 deletions(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/boards/atngw/setup.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/boards/atngw/setup.c 2007-01-15 10:24:38.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/boards/atngw/setup.c 2007-01-15 10:25:04.000000000 +0100
+@@ -35,6 +35,11 @@ static struct spi_board_info spi_board_i
+ },
+ };
+
++static struct mmci_platform_data __initdata mmci0_data = {
++ .detect_pin = GPIO_PIN_PC(25),
++ .wp_pin = GPIO_PIN_PE(0),
++};
++
+ static int __init parse_tag_ethernet(struct tag *tag)
+ {
+ int i;
+@@ -72,7 +77,7 @@ static int __init atngw_init(void)
+ spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
+
+ at32_add_device_spi(0);
+- at32_add_device_mmci(0);
++ at32_add_device_mmci(0, &mmci0_data);
+ at32_add_device_usb(0);
+
+ return 0;
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/at32ap7000.c 2007-01-15 10:24:38.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c 2007-01-15 10:25:04.000000000 +0100
+@@ -749,14 +749,16 @@ at32_add_device_eth(unsigned int id, str
+ /* --------------------------------------------------------------------
+ * MMC
+ * -------------------------------------------------------------------- */
++static struct mmci_platform_data mmci0_data;
+ static struct resource mmci0_resource[] = {
+ PBMEM(0xfff02400),
+ IRQ(28),
+ };
+-DEFINE_DEV(mmci, 0);
++DEFINE_DEV_DATA(mmci, 0);
+ DEV_CLK(mck, mmci0, pbb, 9);
+
+-struct platform_device *__init at32_add_device_mmci(unsigned int id)
++struct platform_device *__init
++at32_add_device_mmci(unsigned int id, struct mmci_platform_data *data)
+ {
+ struct platform_device *pdev;
+
+@@ -774,6 +776,13 @@ struct platform_device *__init at32_add_
+ return NULL;
+ }
+
++ if (data && data->detect_pin != GPIO_PIO_NONE)
++ at32_select_gpio(data->detect_pin, 0);
++ if (data && data->wp_pin != GPIO_PIO_NONE)
++ at32_select_gpio(data->wp_pin, 0);
++
++ memcpy(pdev->dev.platform_data, data,
++ sizeof(struct mmci_platform_data));
+ platform_device_register(pdev);
+ return pdev;
+ }
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/board.h 2007-01-15 10:24:38.000000000 +0100
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h 2007-01-15 10:25:04.000000000 +0100
+@@ -24,7 +24,12 @@ struct eth_platform_data {
+ struct platform_device *
+ at32_add_device_eth(unsigned int id, struct eth_platform_data *data);
+
+-struct platform_device *at32_add_device_mmci(unsigned int id);
++struct mmci_platform_data {
++ unsigned int detect_pin;
++ unsigned int wp_pin;
++};
++struct platform_device *
++at32_add_device_mmci(unsigned int id, struct mmci_platform_data *data);
+ struct platform_device *at32_add_device_spi(unsigned int id);
+ struct platform_device *at32_add_device_twi(unsigned int id);
+
+Index: linux-2.6.18-avr32/drivers/mmc/atmel-mci.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/mmc/atmel-mci.c 2007-01-15 10:23:19.000000000 +0100
++++ linux-2.6.18-avr32/drivers/mmc/atmel-mci.c 2007-01-15 10:27:37.000000000 +0100
+@@ -22,6 +22,9 @@
+
+ #include <asm/dma-controller.h>
+ #include <asm/io.h>
++#include <asm/arch/at32ap7000.h>
++#include <asm/arch/board.h>
++#include <asm/arch/gpio.h>
+
+ #include "atmel-mci.h"
+
+@@ -68,9 +71,13 @@ struct atmel_mci {
+ unsigned long completed_events;
+ u32 error_status;
+
++ int present;
++ unsigned int wp_present:1;
++
+ unsigned long bus_hz;
+ unsigned long mapbase;
+ struct clk *mck;
++ struct mmci_platform_data *board;
+ struct platform_device *pdev;
+ };
+
+@@ -626,6 +633,7 @@ static int __devinit atmci_probe(struct
+ if (!host->regs)
+ goto out_disable_clk;
+
++ host->board = pdev->dev.platform_data;
+ host->bus_hz = clk_get_rate(host->mck);
+ host->mapbase = regs->start;
+
+@@ -641,6 +649,32 @@ static int __devinit atmci_probe(struct
+ if (ret)
+ goto out_unmap;
+
++ if (host->board && host->board->detect_pin != GPIO_PIO_NONE) {
++ ret = gpio_request(host->board->detect_pin, "mmc_detect");
++ if (ret) {
++ printk(KERN_WARNING "%s: no detect pin available (%d)\n",
++ mmc_hostname(host->mmc), ret);
++ host->present = -1;
++ } else {
++ host->present = !gpio_get_value(host->board->detect_pin);
++ }
++ } else {
++ host->present = -1;
++ }
++
++ if (host->board && host->board->wp_pin != GPIO_PIO_NONE) {
++ ret = gpio_request(host->board->wp_pin, "mmc_wp");
++ if (ret) {
++ printk(KERN_WARNING "%s: no WP pin available (%d)\n",
++ mmc_hostname(host->mmc), ret);
++ host->wp_present = 0;
++ } else {
++ host->wp_present = 1;
++ }
++ } else {
++ host->wp_present = 0;
++ }
++
+ /* TODO: Get this information from platform data */
+ ret = -ENOMEM;
+ host->dma.req.req.dmac = find_dma_controller(0);
+@@ -677,6 +711,10 @@ static int __devinit atmci_probe(struct
+ return 0;
+
+ out_free_irq:
++ if (host->present != -1)
++ gpio_free(host->board->detect_pin);
++ if (host->board->wp_pin != GPIO_PIO_NONE)
++ gpio_free(host->board->wp_pin);
+ free_irq(irq, mmc);
+ out_unmap:
+ iounmap(host->regs);
+@@ -701,6 +739,17 @@ static int __devexit atmci_remove(struct
+ mci_writel(host, CR, MCI_BIT(MCIDIS));
+ mci_readl(host, SR);
+
++ if (host->dma.req.req.channel)
++ dma_release_channel(host->dma.req.req.dmac,
++ host->dma.req.req.channel);
++
++ if (host->present != -1) {
++ cancel_delayed_work(&host->mmc->detect);
++ gpio_free(host->board->detect_pin);
++ }
++ if (host->board->wp_pin != GPIO_PIO_NONE)
++ gpio_free(host->board->wp_pin);
++
+ free_irq(platform_get_irq(pdev, 0), host->mmc);
+ iounmap(host->regs);
+
diff --git a/packages/linux/linux-2.6.18/mmc-core-dma-fix.patch b/packages/linux/linux-2.6.18/mmc-core-dma-fix.patch
new file mode 100644
index 0000000000..4106970035
--- /dev/null
+++ b/packages/linux/linux-2.6.18/mmc-core-dma-fix.patch
@@ -0,0 +1,33 @@
+Index: linux-2.6.18-avr32/drivers/mmc/mmc.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/mmc/mmc.c 2007-01-04 09:54:56.000000000 +0100
++++ linux-2.6.18-avr32/drivers/mmc/mmc.c 2007-01-04 09:58:08.000000000 +0100
+@@ -961,6 +961,7 @@ static void mmc_read_scrs(struct mmc_hos
+ struct mmc_command cmd;
+ struct mmc_data data;
+ struct scatterlist sg;
++ u32 *buf;
+
+ list_for_each_entry(card, &host->cards, node) {
+ if (card->state & (MMC_STATE_DEAD|MMC_STATE_PRESENT))
+@@ -1008,7 +1009,8 @@ static void mmc_read_scrs(struct mmc_hos
+ mrq.cmd = &cmd;
+ mrq.data = &data;
+
+- sg_init_one(&sg, (u8*)card->raw_scr, 8);
++ buf = kmalloc(8, GFP_KERNEL);
++ sg_init_one(&sg, (u8*)buf, 8);
+
+ mmc_wait_for_req(host, &mrq);
+
+@@ -1017,8 +1019,8 @@ static void mmc_read_scrs(struct mmc_hos
+ continue;
+ }
+
+- card->raw_scr[0] = ntohl(card->raw_scr[0]);
+- card->raw_scr[1] = ntohl(card->raw_scr[1]);
++ card->raw_scr[0] = ntohl(buf[0]);
++ card->raw_scr[1] = ntohl(buf[1]);
+
+ mmc_decode_scr(card);
+ }
diff --git a/packages/linux/linux-2.6.18/mtd-fix-atmel-pri-for-cmdset-0001-and-cmdset-0002.patch b/packages/linux/linux-2.6.18/mtd-fix-atmel-pri-for-cmdset-0001-and-cmdset-0002.patch
new file mode 100644
index 0000000000..4884d8a0b3
--- /dev/null
+++ b/packages/linux/linux-2.6.18/mtd-fix-atmel-pri-for-cmdset-0001-and-cmdset-0002.patch
@@ -0,0 +1,99 @@
+Index: linux-2.6.18/drivers/mtd/chips/cfi_cmdset_0001.c
+===================================================================
+--- linux-2.6.18.orig/drivers/mtd/chips/cfi_cmdset_0001.c 2006-12-13 09:58:34.000000000 +0100
++++ linux-2.6.18/drivers/mtd/chips/cfi_cmdset_0001.c 2006-12-13 10:01:35.000000000 +0100
+@@ -47,6 +47,7 @@
+ #define I82802AC 0x00ac
+ #define MANUFACTURER_ST 0x0020
+ #define M50LPW080 0x002F
++#define AT49BV640D 0x02de
+
+ static int cfi_intelext_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
+ static int cfi_intelext_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
+@@ -153,6 +154,47 @@
+ }
+ #endif
+
++/* Atmel chips don't use the same PRI format as Intel chips */
++static void fixup_convert_atmel_pri(struct mtd_info *mtd, void *param)
++{
++ struct map_info *map = mtd->priv;
++ struct cfi_private *cfi = map->fldrv_priv;
++ struct cfi_pri_intelext *extp = cfi->cmdset_priv;
++ struct cfi_pri_atmel atmel_pri;
++ uint32_t features = 0;
++
++ /* Reverse byteswapping */
++ extp->FeatureSupport = cpu_to_le32(extp->FeatureSupport);
++ extp->BlkStatusRegMask = cpu_to_le16(extp->BlkStatusRegMask);
++ extp->ProtRegAddr = cpu_to_le16(extp->ProtRegAddr);
++
++ memcpy(&atmel_pri, extp, sizeof(atmel_pri));
++ memset((char *)extp + 5, 0, sizeof(*extp) - 5);
++
++ printk(KERN_ERR "atmel Features: %02x\n", atmel_pri.Features);
++
++ if (atmel_pri.Features & 0x01) /* chip erase supported */
++ features |= (1<<0);
++ if (atmel_pri.Features & 0x02) /* erase suspend supported */
++ features |= (1<<1);
++ if (atmel_pri.Features & 0x04) /* program suspend supported */
++ features |= (1<<2);
++ if (atmel_pri.Features & 0x08) /* simultaneous operations supported */
++ features |= (1<<9);
++ if (atmel_pri.Features & 0x20) /* page mode read supported */
++ features |= (1<<7);
++ if (atmel_pri.Features & 0x40) /* queued erase supported */
++ features |= (1<<4);
++ if (atmel_pri.Features & 0x80) /* Protection bits supported */
++ features |= (1<<6);
++
++ extp->FeatureSupport = features;
++
++ /* burst write mode not supported */
++ cfi->cfiq->BufWriteTimeoutTyp = 0;
++ cfi->cfiq->BufWriteTimeoutMax = 0;
++}
++
+ #ifdef CMDSET0001_DISABLE_ERASE_SUSPEND_ON_WRITE
+ /* Some Intel Strata Flash prior to FPO revision C has bugs in this area */
+ static void fixup_intel_strataflash(struct mtd_info *mtd, void* param)
+@@ -221,6 +263,7 @@
+ }
+
+ static struct cfi_fixup cfi_fixup_table[] = {
++ { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL },
+ #ifdef CMDSET0001_DISABLE_ERASE_SUSPEND_ON_WRITE
+ { CFI_MFR_ANY, CFI_ID_ANY, fixup_intel_strataflash, NULL },
+ #endif
+Index: linux-2.6.18/drivers/mtd/chips/cfi_cmdset_0002.c
+===================================================================
+--- linux-2.6.18.orig/drivers/mtd/chips/cfi_cmdset_0002.c 2006-12-13 10:01:34.000000000 +0100
++++ linux-2.6.18/drivers/mtd/chips/cfi_cmdset_0002.c 2006-12-15 10:19:22.000000000 +0100
+@@ -184,6 +184,10 @@
+ extp->TopBottom = 2;
+ else
+ extp->TopBottom = 3;
++
++ /* burst write mode not supported */
++ cfi->cfiq->BufWriteTimeoutTyp = 0;
++ cfi->cfiq->BufWriteTimeoutMax = 0;
+ }
+
+ static void fixup_use_secsi(struct mtd_info *mtd, void *param)
+@@ -216,6 +220,7 @@
+ }
+
+ static struct cfi_fixup cfi_fixup_table[] = {
++ { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL },
+ #ifdef AMD_BOOTLOC_BUG
+ { CFI_MFR_AMD, CFI_ID_ANY, fixup_amd_bootblock, NULL },
+ #endif
+@@ -228,7 +233,6 @@
+ #if !FORCE_WORD_WRITE
+ { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, },
+ #endif
+- { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL },
+ { 0, 0, NULL, NULL }
+ };
+ static struct cfi_fixup jedec_fixup_table[] = {
diff --git a/packages/linux/linux-2.6.18/mtd-unlock-nor-flash-automatically-where-necessary.patch b/packages/linux/linux-2.6.18/mtd-unlock-nor-flash-automatically-where-necessary.patch
new file mode 100644
index 0000000000..1cb1f8e6d3
--- /dev/null
+++ b/packages/linux/linux-2.6.18/mtd-unlock-nor-flash-automatically-where-necessary.patch
@@ -0,0 +1,75 @@
+From 187ef15268e638603dea55a91fdfa29feaed6d13 Mon Sep 17 00:00:00 2001
+From: =?utf-8?q?H=C3=A5vard_Skinnemoen?= <hskinnemoen@atmel.com>
+Date: Fri, 22 Sep 2006 10:07:08 +0100
+Subject: [PATCH] [MTD] Unlock NOR flash automatically where necessary
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Introduce the MTD_STUPID_LOCK flag which indicates that the flash chip is
+always locked after power-up, so all sectors need to be unlocked before it
+is usable.
+
+If this flag is set, and the chip provides an unlock() operation,
+mtd_add_device will unlock the whole MTD device if it's writeable. This
+means that non-writeable partitions will stay locked.
+
+Set MTD_STUPID_LOCK in fixup_use_atmel_lock() so that these chips will work
+as expected.
+
+Signed-off-by: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: David Woodhouse <dwmw2@infradead.org>
+---
+ drivers/mtd/chips/cfi_cmdset_0002.c | 1 +
+ drivers/mtd/mtdcore.c | 10 ++++++++++
+ include/mtd/mtd-abi.h | 1 +
+ 3 files changed, 12 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
+index a482e89..702ae4c 100644
+--- a/drivers/mtd/chips/cfi_cmdset_0002.c
++++ b/drivers/mtd/chips/cfi_cmdset_0002.c
+@@ -212,6 +212,7 @@ static void fixup_use_atmel_lock(struct mtd_info *mtd, void *param)
+ {
+ mtd->lock = cfi_atmel_lock;
+ mtd->unlock = cfi_atmel_unlock;
++ mtd->flags |= MTD_STUPID_LOCK;
+ }
+
+ static struct cfi_fixup cfi_fixup_table[] = {
+diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
+index 168d3ba..c4d26de 100644
+--- a/drivers/mtd/mtdcore.c
++++ b/drivers/mtd/mtdcore.c
+@@ -57,6 +57,16 @@ int add_mtd_device(struct mtd_info *mtd)
+ mtd->index = i;
+ mtd->usecount = 0;
+
++ /* Some chips always power up locked. Unlock them now */
++ if ((mtd->flags & MTD_WRITEABLE)
++ && (mtd->flags & MTD_STUPID_LOCK) && mtd->unlock) {
++ if (mtd->unlock(mtd, 0, mtd->size))
++ printk(KERN_WARNING
++ "%s: unlock failed, "
++ "writes may not work\n",
++ mtd->name);
++ }
++
+ DEBUG(0, "mtd: Giving out device %d to %s\n",i, mtd->name);
+ /* No need to get a refcount on the module containing
+ the notifier, since we hold the mtd_table_mutex */
+diff --git a/include/mtd/mtd-abi.h b/include/mtd/mtd-abi.h
+index 1da3f7f..b0a67b7 100644
+--- a/include/mtd/mtd-abi.h
++++ b/include/mtd/mtd-abi.h
+@@ -34,6 +34,7 @@ struct mtd_oob_buf {
+ #define MTD_WRITEABLE 0x400 /* Device is writeable */
+ #define MTD_BIT_WRITEABLE 0x800 /* Single bits can be flipped */
+ #define MTD_NO_ERASE 0x1000 /* No erase necessary */
++#define MTD_STUPID_LOCK 0x2000 /* Always locked after reset */
+
+ // Some common devices / combinations of capabilities
+ #define MTD_CAP_ROM 0
+--
+1.4.4.1
+
diff --git a/packages/linux/linux-2.6.18/ngw-fix-usart-initialization.patch b/packages/linux/linux-2.6.18/ngw-fix-usart-initialization.patch
new file mode 100644
index 0000000000..702b9aa240
--- /dev/null
+++ b/packages/linux/linux-2.6.18/ngw-fix-usart-initialization.patch
@@ -0,0 +1,32 @@
+---
+ arch/avr32/boards/atngw/setup.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/boards/atngw/setup.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/boards/atngw/setup.c 2006-11-02 14:22:05.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/boards/atngw/setup.c 2006-11-02 14:42:53.000000000 +0100
+@@ -50,18 +50,19 @@ static int __init parse_tag_ethernet(str
+ }
+ __tagtable(ATAG_ETHERNET, parse_tag_ethernet);
+
++struct platform_device *at32_usart_map[1];
++unsigned int at32_nr_usarts = 1;
++
+ void __init setup_board(void)
+ {
+- at32_map_usart(1, 0); /* /dev/ttyS0 */
+-
+- at32_setup_serial_console(0);
++ at32_usart_map[0] = at32_get_usart(1);
+ }
+
+ static int __init atngw_init(void)
+ {
+ at32_add_system_devices();
+
+- at32_add_device_usart(0);
++ at32_add_device_usart(1);
+
+ if (eth_data[0].valid)
+ at32_add_device_eth(0, &eth_data[0]);
diff --git a/packages/linux/linux-2.6.18/ngw100-change-spi-clock-on-dataflash.patch b/packages/linux/linux-2.6.18/ngw100-change-spi-clock-on-dataflash.patch
new file mode 100644
index 0000000000..af1228faa7
--- /dev/null
+++ b/packages/linux/linux-2.6.18/ngw100-change-spi-clock-on-dataflash.patch
@@ -0,0 +1,13 @@
+Index: linux-2.6.18/arch/avr32/boards/atngw/setup.c
+===================================================================
+--- linux-2.6.18.orig/arch/avr32/boards/atngw/setup.c 2006-12-19 14:15:02.000000000 +0100
++++ linux-2.6.18/arch/avr32/boards/atngw/setup.c 2006-12-19 14:15:11.000000000 +0100
+@@ -29,7 +29,7 @@
+ {
+ .modalias = "mtd_dataflash",
+ .controller_data = (void *)GPIO_PIN_PA(3),
+- .max_speed_hz = 66000000,
++ .max_speed_hz = 10000000,
+ .bus_num = 0,
+ .chip_select = 0,
+ },
diff --git a/packages/linux/linux-2.6.18/pio-deglitch.patch b/packages/linux/linux-2.6.18/pio-deglitch.patch
new file mode 100644
index 0000000000..3fe9231861
--- /dev/null
+++ b/packages/linux/linux-2.6.18/pio-deglitch.patch
@@ -0,0 +1,40 @@
+---
+ arch/avr32/mach-at32ap/pio.c | 12 ++++++++++++
+ include/asm-avr32/arch-at32ap/gpio.h | 1 +
+ 2 files changed, 13 insertions(+)
+
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-30 11:55:02.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-30 11:57:52.000000000 +0100
+@@ -122,6 +122,18 @@ fail:
+ dump_stack();
+ }
+
++void at32_set_deglitch(unsigned int pin, int enable)
++{
++ struct pio_device *pio;
++ u32 mask = 1 << (pin & 0x1f);
++
++ pio = gpio_to_pio(pin);
++ if (enable)
++ pio_writel(pio, IFER, mask);
++ else
++ pio_writel(pio, IFDR, mask);
++}
++
+ static unsigned int pio_id(struct pio_device *pio)
+ {
+ return pio - pio_dev;
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/gpio.h 2006-11-30 11:54:56.000000000 +0100
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/gpio.h 2006-11-30 11:55:56.000000000 +0100
+@@ -16,6 +16,7 @@
+ void at32_select_periph(unsigned int pin, unsigned int periph,
+ unsigned long flags);
+ void at32_select_gpio(unsigned int pin, unsigned long flags);
++void at32_set_deglitch(unsigned int pin, int enable);
+
+ /* Arch-neutral GPIO API */
+ int __must_check gpio_request(unsigned int gpio, const char *label);
diff --git a/packages/linux/linux-2.6.18/pio-interrupt-controller.patch b/packages/linux/linux-2.6.18/pio-interrupt-controller.patch
new file mode 100644
index 0000000000..b4f15c4931
--- /dev/null
+++ b/packages/linux/linux-2.6.18/pio-interrupt-controller.patch
@@ -0,0 +1,108 @@
+---
+ arch/avr32/mach-at32ap/pio.c | 73 ++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 72 insertions(+), 1 deletion(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/pio.c 2006-11-29 18:17:15.000000000 +0100
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/pio.c 2006-11-30 11:50:27.000000000 +0100
+@@ -11,6 +11,7 @@
+ #include <linux/clk.h>
+ #include <linux/debugfs.h>
+ #include <linux/fs.h>
++#include <linux/irq.h>
+ #include <linux/platform_device.h>
+
+ #include <asm/gpio.h>
+@@ -709,20 +710,90 @@ err_class_create:
+ late_initcall(pio_init_dev);
+ #endif /* CONFIG_PIO_DEV */
+
++/* Interrupt controller implementation */
++static void pio_mask_irq(unsigned int irq)
++{
++ struct pio_device *pio = get_irq_chip_data(irq);
++
++ pio_writel(pio, IDR, 1 << (irq & 0x1f));
++}
++
++static void pio_unmask_irq(unsigned int irq)
++{
++ struct pio_device *pio = get_irq_chip_data(irq);
++
++ pio_writel(pio, IER, 1 << (irq & 0x1f));
++}
++
++static int pio_set_irq_type(unsigned int irq, unsigned int flow_type)
++{
++ if (flow_type != IRQ_TYPE_NONE && flow_type != IRQ_TYPE_EDGE_BOTH)
++ return -EINVAL;
++
++ return 0;
++}
++
++static struct irq_chip pio_irq_chip = {
++ .name = "pio",
++ .mask = pio_mask_irq,
++ .unmask = pio_unmask_irq,
++ .set_type = pio_set_irq_type,
++};
++
++static void demux_pio_irq(unsigned int irq, struct irq_desc *desc,
++ struct pt_regs *regs)
++{
++ struct pio_device *pio = desc->handler_data;
++ struct irq_desc *ext_desc;
++ u32 status, pending;
++ unsigned int ext_irq;
++ unsigned int i;
++
++ status = pio_readl(pio, ISR);
++ pending = status & pio_readl(pio, IMR);
++
++ while (pending) {
++ i = fls(pending) - 1;
++ pending &= ~(1 << i);
++
++ ext_irq = gpio_to_irq(32 * pio_id(pio) + i);
++ ext_desc = irq_desc + ext_irq;
++ ext_desc->handle_irq(ext_irq, ext_desc, regs);
++ }
++}
++
+ static int __init pio_probe(struct platform_device *pdev)
+ {
+ struct pio_device *pio = NULL;
++ unsigned int i;
++ int int_irq, ext_irq;
+
+ BUG_ON(pdev->id >= MAX_NR_PIO_DEVICES);
+ pio = &pio_dev[pdev->id];
+ BUG_ON(!pio->regs);
+
+- /* TODO: Interrupts */
++ /* Set up interrupts */
++ pio_writel(pio, IDR, ~0UL);
++ pio_readl(pio, ISR);
++
++ ext_irq = gpio_to_irq(32 * pdev->id);
++ for (i = 0; i < 32; i++, ext_irq++) {
++ set_irq_chip_and_handler(ext_irq, &pio_irq_chip,
++ handle_simple_irq);
++ set_irq_chip_data(ext_irq, pio);
++ }
++
++ int_irq = platform_get_irq(pdev, 0);
++ set_irq_chained_handler(int_irq, demux_pio_irq);
++ set_irq_data(int_irq, pio);
+
+ platform_set_drvdata(pdev, pio);
+
+ printk(KERN_INFO "%s: Atmel Port Multiplexer at 0x%p (irq %d)\n",
+ pio->name, pio->regs, platform_get_irq(pdev, 0));
++ printk(KERN_INFO
++ "%s: Handling 32 external IRQs, starting with IRQ %d\n",
++ pio->name, ext_irq - 32);
+
+ return 0;
+ }
diff --git a/packages/linux/linux-2.6.18/rename-ttyUS-to-ttyS-or-ttyAT.patch b/packages/linux/linux-2.6.18/rename-ttyUS-to-ttyS-or-ttyAT.patch
new file mode 100644
index 0000000000..b2a020f809
--- /dev/null
+++ b/packages/linux/linux-2.6.18/rename-ttyUS-to-ttyS-or-ttyAT.patch
@@ -0,0 +1,74 @@
+---
+ drivers/serial/Kconfig | 18 ++++++++++++++++++
+ drivers/serial/atmel_usart.c | 13 +++++++++++--
+ 2 files changed, 29 insertions(+), 2 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/serial/Kconfig
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/serial/Kconfig 2006-09-14 12:51:15.000000000 +0200
++++ linux-2.6.18-avr32/drivers/serial/Kconfig 2006-09-14 13:07:37.000000000 +0200
+@@ -267,6 +267,24 @@ config SERIAL_ATMEL_CONSOLE
+ receives all kernel messages and warnings and which allows
+ logins in single user mode).
+
++config SERIAL_ATMEL_TTYAT
++ bool "Install as device ttyAT0-N instead of ttyS0-N"
++ depends on SERIAL_ATMEL=y
++ help
++ Say Y here if you wish to have the internal UARTs appear as
++ /dev/ttyAT0-N (major 204, minor 154-169) instead of the
++ normal /dev/ttyS0-4 (major 4, minor 64-255). This is
++ necessary if you also want other UARTs, such as external
++ 8250/16C550 compatible UARTs.
++
++ The ttySn nodes are legally reserved for the 8250 serial driver
++ but are often misused by other serial drivers.
++
++ To use this, you should create suitable ttyATn device nodes in
++ /dev/, and pass "console=ttyATn" to the kernel.
++
++ Say Y if you have an external 8250/16C550 UART. If unsure, say N.
++
+ config SERIAL_AMBA_PL010
+ tristate "ARM AMBA PL010 serial port support"
+ depends on ARM_AMBA && (BROKEN || !ARCH_VERSATILE)
+Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/serial/atmel_usart.c 2006-09-14 12:51:15.000000000 +0200
++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.c 2006-09-14 12:51:16.000000000 +0200
+@@ -46,8 +46,17 @@
+ * Use the same major/minor numbers as the AT91 USART, which is
+ * actually the same chip
+ */
++
++#ifdef CONFIG_SERIAL_ATMEL_TTYAT
++#define SERIAL_USART3_MAJOR 204
++#define MINOR_START 154
++#define DEVICE_NAME "ttyAT"
++#else
+ #define SERIAL_USART3_MAJOR TTY_MAJOR
+ #define MINOR_START 64
++#define DEVICE_NAME "ttyS"
++#endif
++
+ #define NR_PORTS 4
+
+ #define ERROR_FLAGS (USART3_BIT(CSR_PARE) \
+@@ -923,7 +932,7 @@ out_disable_clk:
+
+ static struct uart_driver usart3_reg;
+ static struct console usart3_console = {
+- .name = "ttyUS",
++ .name = DEVICE_NAME,
+ .write = usart3_console_write,
+ .device = uart_console_device,
+ .setup = usart3_console_setup,
+@@ -948,7 +957,7 @@ console_initcall(usart3_console_init);
+ static struct uart_driver usart3_reg = {
+ .owner = THIS_MODULE,
+ .driver_name = "serial",
+- .dev_name = "ttyUS",
++ .dev_name = DEVICE_NAME,
+ .major = SERIAL_USART3_MAJOR,
+ .minor = MINOR_START,
+ .nr = NR_PORTS,
diff --git a/packages/linux/linux-2.6.18/renumber-usart-devices.patch b/packages/linux/linux-2.6.18/renumber-usart-devices.patch
new file mode 100644
index 0000000000..74f59916e4
--- /dev/null
+++ b/packages/linux/linux-2.6.18/renumber-usart-devices.patch
@@ -0,0 +1,228 @@
+---
+ arch/avr32/boards/atstk1000/atstk1002.c | 12 ++++++++++++
+ arch/avr32/kernel/setup.c | 1 +
+ arch/avr32/mach-at32ap/at32ap.c | 3 ---
+ arch/avr32/mach-at32ap/at32ap7000.c | 31 ++++++++++++++++++++++++-------
+ drivers/serial/atmel_usart.c | 24 ++++++++++++++++++------
+ include/asm-avr32/arch-at32ap/board.h | 7 ++++---
+ include/asm-avr32/arch-at32ap/init.h | 3 +--
+ 7 files changed, 60 insertions(+), 21 deletions(-)
+
+Index: linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/boards/atstk1000/atstk1002.c 2006-09-13 14:30:31.000000000 +0200
++++ linux-2.6.18-avr32/arch/avr32/boards/atstk1000/atstk1002.c 2006-09-13 14:50:59.000000000 +0200
+@@ -14,6 +14,7 @@
+
+ #include <asm/setup.h>
+ #include <asm/arch/board.h>
++#include <asm/arch/init.h>
+
+ static struct eth_platform_data __initdata eth_data[2];
+
+@@ -34,6 +34,17 @@ struct platform_device flash_device = {
+ }
+ __tagtable(ATAG_ETHERNET, parse_tag_ethernet);
+
++struct platform_device *at32_usart_map[3];
++unsigned int at32_nr_usarts = 3;
++
++void __init setup_board(void)
++{
++ /* These need to be in place before initializing the console */
++ at32_usart_map[0] = at32_get_usart(1);
++ at32_usart_map[1] = at32_get_usart(2);
++ at32_usart_map[2] = at32_get_usart(3);
++}
++
+ static int __init atstk1002_init(void)
+ {
+ at32_add_system_devices();
+Index: linux-2.6.18-avr32/arch/avr32/kernel/setup.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/kernel/setup.c 2006-09-13 14:42:11.000000000 +0200
++++ linux-2.6.18-avr32/arch/avr32/kernel/setup.c 2006-09-13 14:43:36.000000000 +0200
+@@ -268,6 +268,7 @@ void __init setup_arch (char **cmdline_p
+
+ setup_processor();
+ setup_platform();
++ setup_board();
+
+ cpu_clk = clk_get(NULL, "cpu");
+ if (IS_ERR(cpu_clk)) {
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/at32ap.c 2006-09-13 14:38:24.000000000 +0200
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap.c 2006-09-13 14:38:28.000000000 +0200
+@@ -48,9 +48,6 @@ void __init setup_platform(void)
+ at32_sm_init();
+ at32_clock_init();
+ at32_portmux_init();
+-
+- /* FIXME: This doesn't belong here */
+- at32_setup_serial_console(1);
+ }
+
+ static int __init pdc_probe(struct platform_device *pdev)
+Index: linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c
+===================================================================
+--- linux-2.6.18-avr32.orig/arch/avr32/mach-at32ap/at32ap7000.c 2006-09-13 13:40:02.000000000 +0200
++++ linux-2.6.18-avr32/arch/avr32/mach-at32ap/at32ap7000.c 2006-09-13 14:39:08.000000000 +0200
+@@ -543,6 +543,30 @@ static struct resource usart3_resource[]
+ DEFINE_DEV(usart, 3);
+ DEV_CLK(usart, usart3, pba, 6);
+
++struct platform_device *at32_get_usart(unsigned int id)
++{
++ struct platform_device *pdev;
++
++ switch (id) {
++ case 0:
++ pdev = &usart0_device;
++ break;
++ case 1:
++ pdev = &usart1_device;
++ break;
++ case 2:
++ pdev = &usart2_device;
++ break;
++ case 3:
++ pdev = &usart3_device;
++ break;
++ default:
++ return NULL;
++ }
++
++ return pdev;
++}
++
+ static inline void configure_usart0_pins(void)
+ {
+ select_peripheral(PA(8), PERIPH_B, 0); /* RXD */
+@@ -607,13 +607,6 @@ struct platform_device *__init at32_add_
+ return pdev;
+ }
+
+-struct platform_device *at91_default_console_device;
+-
+-void __init at32_setup_serial_console(unsigned int usart_id)
+-{
+- at91_default_console_device = setup_usart(usart_id);
+-}
+-
+ /* --------------------------------------------------------------------
+ * Ethernet
+ * -------------------------------------------------------------------- */
+Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/serial/atmel_usart.c 2006-09-13 14:30:42.000000000 +0200
++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.c 2006-09-13 14:48:47.000000000 +0200
+@@ -773,7 +773,8 @@ static struct uart_ops usart3_pops = {
+ };
+
+ static int __devinit initialize_port(struct usart3_port *up,
+- struct platform_device *pdev)
++ struct platform_device *pdev,
++ unsigned int line)
+ {
+ struct uart_port *port = &up->uart;
+ struct resource *regs;
+@@ -797,7 +798,7 @@ static int __devinit initialize_port(str
+ port->iotype = SERIAL_IO_MEM;
+ port->flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP;
+ port->ops = &usart3_pops;
+- port->line = pdev->id;
++ port->line = line;
+ port->dev = &pdev->dev;
+
+ return 0;
+@@ -877,15 +878,17 @@ static int __init usart3_console_setup(s
+ console->index);
+ return -ENODEV;
+ }
++ if (console->index >= at32_nr_usarts)
++ return -ENXIO;
+
+- pdev = at91_default_console_device;
++ pdev = at32_usart_map[console->index];
+ if (!pdev)
+ return -ENXIO;
+
+ up = &usart3_ports[console->index];
+ port = &up->uart;
+
+- ret = initialize_port(up, pdev);
++ ret = initialize_port(up, pdev, console->index);
+ if (ret)
+ return ret;
+
+@@ -978,6 +981,7 @@ static int usart3_serial_resume(struct p
+ static int __devinit usart3_serial_probe(struct platform_device *pdev)
+ {
+ struct usart3_port *up;
++ int line;
+ int ret;
+
+ if (pdev->id >= NR_PORTS) {
+@@ -987,14 +991,22 @@ static int __devinit usart3_serial_probe
+ return -ENOMEM;
+ }
+
+- up = &usart3_ports[pdev->id];
++ for (line = 0; line < at32_nr_usarts; line++) {
++ if (at32_usart_map[line]->id == pdev->id)
++ break;
++ }
++
++ if (line >= at32_nr_usarts)
++ return -ENXIO;
++
++ up = &usart3_ports[line];
+
+ /*
+ * If the port has already been set up as a console, we
+ * shouldn't enable it again.
+ */
+ if (!up->uart.uartclk) {
+- ret = initialize_port(up, pdev);
++ ret = initialize_port(up, pdev, line);
+ if (ret)
+ goto out;
+ }
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/board.h 2006-09-13 14:30:13.000000000 +0200
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/board.h 2006-09-13 15:19:56.000000000 +0200
+@@ -9,11 +9,12 @@ struct flash_platform_data {
+ /* Add basic devices: system manager, interrupt controller, portmuxes, etc. */
+ void at32_add_system_devices(void);
+
+-#define AT91_NR_UART 4
+-extern struct platform_device *at91_default_console_device;
+-
++struct platform_device *at32_get_usart(unsigned int id);
+ struct platform_device *at32_add_device_usart(unsigned int id);
+
++extern struct platform_device *at32_usart_map[];
++extern unsigned int at32_nr_usarts;
++
+ struct eth_platform_data {
+ u8 valid;
+ u8 mii_phy_addr;
+Index: linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/init.h
+===================================================================
+--- linux-2.6.18-avr32.orig/include/asm-avr32/arch-at32ap/init.h 2006-09-13 13:43:20.000000000 +0200
++++ linux-2.6.18-avr32/include/asm-avr32/arch-at32ap/init.h 2006-09-13 14:50:26.000000000 +0200
+@@ -11,11 +11,10 @@
+ #define __ASM_AVR32_AT32AP_INIT_H__
+
+ void setup_platform(void);
++void setup_board(void);
+
+ /* Called by setup_platform */
+ void at32_clock_init(void);
+ void at32_portmux_init(void);
+
+-void at32_setup_serial_console(unsigned int usart_id);
+-
+ #endif /* __ASM_AVR32_AT32AP_INIT_H__ */
diff --git a/packages/linux/linux-2.6.18/spi-fix-spi-busnum-to-master-buffer-and-bus_num-0.patch b/packages/linux/linux-2.6.18/spi-fix-spi-busnum-to-master-buffer-and-bus_num-0.patch
new file mode 100644
index 0000000000..e5e040bc32
--- /dev/null
+++ b/packages/linux/linux-2.6.18/spi-fix-spi-busnum-to-master-buffer-and-bus_num-0.patch
@@ -0,0 +1,50 @@
+From 4740d387f3cb9e63f48f2488815b38a2c92755c8 Mon Sep 17 00:00:00 2001
+From: Hans-Christian Egtvedt <hcegtvedt@atmel.com>
+Date: Wed, 6 Dec 2006 20:36:17 -0800
+Subject: [PATCH] [PATCH] spi: correct bus_num and buffer bug in spi core
+
+Correct the following in driver/spi/spi.c in function spi_busnum_to_master:
+
+ * must allow bus_num 0, the if is really not needed.
+ * correct the name buffer which is too small for bus_num >= 10000. It
+
+should be 9 bytes big, not 8.
+
+Signed-off-by: Hans-Christian Egtvedt <hcegtvedt@atmel.com>
+Cc: David Brownell <david-b@pacbell.net>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+---
+ drivers/spi/spi.c | 16 +++++++---------
+ 1 files changed, 7 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
+index 1a3c963..7d215ea 100644
+--- a/drivers/spi/spi.c
++++ b/drivers/spi/spi.c
+@@ -465,15 +465,13 @@ EXPORT_SYMBOL_GPL(spi_unregister_master);
+ */
+ struct spi_master *spi_busnum_to_master(u16 bus_num)
+ {
+- if (bus_num) {
+- char name[8];
+- struct kobject *bus;
+-
+- snprintf(name, sizeof name, "spi%u", bus_num);
+- bus = kset_find_obj(&spi_master_class.subsys.kset, name);
+- if (bus)
+- return container_of(bus, struct spi_master, cdev.kobj);
+- }
++ char name[9];
++ struct kobject *bus;
++
++ snprintf(name, sizeof name, "spi%u", bus_num);
++ bus = kset_find_obj(&spi_master_class.subsys.kset, name);
++ if (bus)
++ return container_of(bus, struct spi_master, cdev.kobj);
+ return NULL;
+ }
+ EXPORT_SYMBOL_GPL(spi_busnum_to_master);
+--
+1.4.4.1
+
diff --git a/packages/linux/linux-2.6.18/spi-reduce-dlybs-and-dlybct.patch b/packages/linux/linux-2.6.18/spi-reduce-dlybs-and-dlybct.patch
new file mode 100644
index 0000000000..ca4989fa68
--- /dev/null
+++ b/packages/linux/linux-2.6.18/spi-reduce-dlybs-and-dlybct.patch
@@ -0,0 +1,19 @@
+---
+ drivers/spi/atmel_spi.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/spi/atmel_spi.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/spi/atmel_spi.c 2006-12-18 12:31:32.000000000 +0100
++++ linux-2.6.18-avr32/drivers/spi/atmel_spi.c 2006-12-18 12:31:37.000000000 +0100
+@@ -380,8 +380,8 @@ static int atmel_spi_setup(struct spi_de
+ csr |= SPI_BIT(NCPHA);
+
+ /* TODO: DLYBS and DLYBCT */
+- csr |= SPI_BF(DLYBS, 10);
+- csr |= SPI_BF(DLYBCT, 10);
++ csr |= SPI_BF(DLYBS, 0);
++ csr |= SPI_BF(DLYBCT, 0);
+
+ npcs_pin = (unsigned int)spi->controller_data;
+ if (!spi->controller_state) {
diff --git a/packages/linux/linux-2.6.18/spi-set-kset-of-master-class-dev-explicitly.patch b/packages/linux/linux-2.6.18/spi-set-kset-of-master-class-dev-explicitly.patch
new file mode 100644
index 0000000000..4a6ed65d8b
--- /dev/null
+++ b/packages/linux/linux-2.6.18/spi-set-kset-of-master-class-dev-explicitly.patch
@@ -0,0 +1,34 @@
+From 3bd0f6943520e459659d10f3282285e43d3990f1 Mon Sep 17 00:00:00 2001
+From: Hans-Christian Egtvedt <hcegtvedt@atmel.com>
+Date: Wed, 6 Dec 2006 20:36:19 -0800
+Subject: [PATCH] [PATCH] spi: set kset of master class dev explicitly
+
+<quote Imre Deak from Thu, 12 Jan 2006 21:18:54 +0200>
+ In order for spi_busnum_to_master to work spi master devices must be linked
+ into the spi_master_class.subsys.kset list. At the moment the default
+ class_obj_subsys.kset is used and we can't enumerate the master devices.
+</quote>
+
+Signed-off-by: Hans-Christian Egtvedt <hcegtvedt@atmel.com>
+Cc: David Brownell <david-b@pacbell.net>
+Signed-off-by: Andrew Morton <akpm@osdl.org>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+---
+ drivers/spi/spi.c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
+index 7d215ea..270e621 100644
+--- a/drivers/spi/spi.c
++++ b/drivers/spi/spi.c
+@@ -366,6 +366,7 @@ spi_alloc_master(struct device *dev, unsigned size)
+
+ class_device_initialize(&master->cdev);
+ master->cdev.class = &spi_master_class;
++ kobj_set_kset_s(&master->cdev, spi_master_class.subsys);
+ master->cdev.dev = get_device(dev);
+ spi_master_set_devdata(master, &master[1]);
+
+--
+1.4.4.1
+
diff --git a/packages/linux/linux-2.6.18/update-atstk1002_defconfig.patch b/packages/linux/linux-2.6.18/update-atstk1002_defconfig.patch
new file mode 100644
index 0000000000..fef3f8bf5b
--- /dev/null
+++ b/packages/linux/linux-2.6.18/update-atstk1002_defconfig.patch
@@ -0,0 +1,563 @@
+---
+ arch/avr32/configs/atstk1002_defconfig | 293 ++++++++++++++++++++++++++++-----
+ 1 file changed, 250 insertions(+), 43 deletions(-)
+
+Index: linux-2.6.18/arch/avr32/configs/atstk1002_defconfig
+===================================================================
+--- linux-2.6.18.orig/arch/avr32/configs/atstk1002_defconfig 2007-01-11 14:30:26.000000000 +0100
++++ linux-2.6.18/arch/avr32/configs/atstk1002_defconfig 2007-01-11 15:44:49.000000000 +0100
+@@ -1,13 +1,14 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.18-rc1
+-# Tue Jul 11 12:41:36 2006
++# Linux kernel version: 2.6.18-at0
++# Thu Jan 11 15:37:42 2007
+ #
+ CONFIG_AVR32=y
+ CONFIG_GENERIC_HARDIRQS=y
+ CONFIG_HARDIRQS_SW_RESEND=y
+ CONFIG_GENERIC_IRQ_PROBE=y
+ CONFIG_RWSEM_GENERIC_SPINLOCK=y
++CONFIG_GENERIC_TIME=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
+ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+@@ -25,16 +26,18 @@
+ CONFIG_LOCALVERSION=""
+ # CONFIG_LOCALVERSION_AUTO is not set
+ CONFIG_SWAP=y
+-# CONFIG_SYSVIPC is not set
+-# CONFIG_POSIX_MQUEUE is not set
+-# CONFIG_BSD_PROCESS_ACCT is not set
+-CONFIG_SYSCTL=y
++CONFIG_SYSVIPC=y
++CONFIG_POSIX_MQUEUE=y
++CONFIG_BSD_PROCESS_ACCT=y
++CONFIG_BSD_PROCESS_ACCT_V3=y
++# CONFIG_TASKSTATS is not set
+ # CONFIG_AUDIT is not set
+ # CONFIG_IKCONFIG is not set
+ # CONFIG_RELAY is not set
+ CONFIG_INITRAMFS_SOURCE=""
+ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+ CONFIG_EMBEDDED=y
++CONFIG_SYSCTL=y
+ CONFIG_KALLSYMS=y
+ # CONFIG_KALLSYMS_ALL is not set
+ # CONFIG_KALLSYMS_EXTRA_PASS is not set
+@@ -43,14 +46,15 @@
+ CONFIG_BUG=y
+ CONFIG_ELF_CORE=y
+ # CONFIG_BASE_FULL is not set
+-# CONFIG_FUTEX is not set
+-# CONFIG_EPOLL is not set
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
+ CONFIG_SHMEM=y
+-# CONFIG_SLAB is not set
+-# CONFIG_VM_EVENT_COUNTERS is not set
++CONFIG_SLAB=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_RT_MUTEXES=y
+ # CONFIG_TINY_SHMEM is not set
+ CONFIG_BASE_SMALL=1
+-CONFIG_SLOB=y
++# CONFIG_SLOB is not set
+
+ #
+ # Loadable module support
+@@ -60,7 +64,7 @@
+ # CONFIG_MODULE_FORCE_UNLOAD is not set
+ # CONFIG_MODVERSIONS is not set
+ # CONFIG_MODULE_SRCVERSION_ALL is not set
+-# CONFIG_KMOD is not set
++CONFIG_KMOD=y
+
+ #
+ # Block layer
+@@ -90,7 +94,13 @@
+ CONFIG_CPU_AT32AP7000=y
+ CONFIG_BOARD_ATSTK1002=y
+ CONFIG_BOARD_ATSTK1000=y
++# CONFIG_BOARD_ATNGW is not set
+ CONFIG_LOADER_U_BOOT=y
++
++#
++# Atmel AVR32 AP options
++#
++CONFIG_PIO_DEV=y
+ CONFIG_LOAD_ADDRESS=0x10000000
+ CONFIG_ENTRY_ADDRESS=0x90000000
+ CONFIG_PHYS_OFFSET=0x10000000
+@@ -113,6 +123,7 @@
+ CONFIG_SPLIT_PTLOCK_CPUS=4
+ # CONFIG_RESOURCES_64BIT is not set
+ # CONFIG_OWNERSHIP_TRACE is not set
++CONFIG_DW_DMAC=y
+ # CONFIG_HZ_100 is not set
+ CONFIG_HZ_250=y
+ # CONFIG_HZ_1000 is not set
+@@ -199,7 +210,6 @@
+ # CONFIG_ATALK is not set
+ # CONFIG_X25 is not set
+ # CONFIG_LAPB is not set
+-# CONFIG_NET_DIVERT is not set
+ # CONFIG_ECONET is not set
+ # CONFIG_WAN_ROUTER is not set
+
+@@ -212,7 +222,6 @@
+ # Network testing
+ #
+ # CONFIG_NET_PKTGEN is not set
+-# CONFIG_NET_TCPPROBE is not set
+ # CONFIG_HAMRADIO is not set
+ # CONFIG_IRDA is not set
+ # CONFIG_BT is not set
+@@ -239,7 +248,85 @@
+ #
+ # Memory Technology Devices (MTD)
+ #
+-# CONFIG_MTD is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++CONFIG_MTD_CFI=y
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_GEN_PROBE=y
++# CONFIG_MTD_CFI_ADV_OPTIONS is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_CFI_INTELEXT is not set
++CONFIG_MTD_CFI_AMDSTD=y
++# CONFIG_MTD_CFI_STAA is not set
++CONFIG_MTD_CFI_UTIL=y
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++# CONFIG_MTD_OBSOLETE_CHIPS is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++CONFIG_MTD_PHYSMAP=y
++CONFIG_MTD_PHYSMAP_START=0x8000000
++CONFIG_MTD_PHYSMAP_LEN=0x0
++CONFIG_MTD_PHYSMAP_BANKWIDTH=2
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++CONFIG_MTD_DATAFLASH=m
++# CONFIG_MTD_M25P80 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++
++#
++# NAND Flash Device Drivers
++#
++# CONFIG_MTD_NAND is not set
++
++#
++# OneNAND Flash Device Drivers
++#
++# CONFIG_MTD_ONENAND is not set
+
+ #
+ # Parallel port support
+@@ -260,6 +347,7 @@
+ CONFIG_BLK_DEV_RAM=m
+ CONFIG_BLK_DEV_RAM_COUNT=16
+ CONFIG_BLK_DEV_RAM_SIZE=4096
++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+ CONFIG_BLK_DEV_INITRD=y
+ # CONFIG_CDROM_PKTCDVD is not set
+ # CONFIG_ATA_OVER_ETH is not set
+@@ -343,7 +431,7 @@
+ CONFIG_PPP_DEFLATE=m
+ # CONFIG_PPP_BSDCOMP is not set
+ # CONFIG_PPP_MPPE is not set
+-# CONFIG_PPPOE is not set
++CONFIG_PPPOE=m
+ # CONFIG_SLIP is not set
+ # CONFIG_SHAPER is not set
+ # CONFIG_NETCONSOLE is not set
+@@ -363,7 +451,25 @@
+ #
+ # Input device support
+ #
+-# CONFIG_INPUT is not set
++CONFIG_INPUT=y
++
++#
++# Userland interfaces
++#
++# CONFIG_INPUT_MOUSEDEV is not set
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_TSDEV is not set
++# CONFIG_INPUT_EVDEV is not set
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++# CONFIG_INPUT_KEYBOARD is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
+
+ #
+ # Hardware I/O ports
+@@ -374,7 +480,10 @@
+ #
+ # Character devices
+ #
+-# CONFIG_VT is not set
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+
+ #
+@@ -385,9 +494,9 @@
+ #
+ # Non-8250 serial port support
+ #
+-CONFIG_SERIAL_AT91=y
+-CONFIG_SERIAL_AT91_CONSOLE=y
+-# CONFIG_SERIAL_AT91_TTYAT is not set
++CONFIG_SERIAL_ATMEL=y
++CONFIG_SERIAL_ATMEL_CONSOLE=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
+ CONFIG_SERIAL_CORE=y
+ CONFIG_SERIAL_CORE_CONSOLE=y
+ CONFIG_UNIX98_PTYS=y
+@@ -422,7 +531,40 @@
+ #
+ # I2C support
+ #
+-# CONFIG_I2C is not set
++CONFIG_I2C=m
++CONFIG_I2C_CHARDEV=m
++
++#
++# I2C Algorithms
++#
++# CONFIG_I2C_ALGOBIT is not set
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_ALGOPCA is not set
++
++#
++# I2C Hardware Bus support
++#
++CONFIG_I2C_ATMELTWI=m
++CONFIG_I2C_ATMELTWI_BAUDRATE=100000
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_STUB is not set
++# CONFIG_I2C_PCA_ISA is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_SENSORS_DS1337 is not set
++# CONFIG_SENSORS_DS1374 is not set
++CONFIG_SENSORS_EEPROM=m
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++# CONFIG_SENSORS_PCF8591 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
+
+ #
+ # SPI support
+@@ -434,7 +576,7 @@
+ #
+ # SPI Master Controller Drivers
+ #
+-CONFIG_SPI_ATMEL=m
++CONFIG_SPI_ATMEL=y
+ # CONFIG_SPI_BITBANG is not set
+
+ #
+@@ -470,33 +612,85 @@
+ # Graphics support
+ #
+ # CONFIG_FIRMWARE_EDID is not set
+-CONFIG_FB=m
+-CONFIG_FB_CFB_FILLRECT=m
+-CONFIG_FB_CFB_COPYAREA=m
+-CONFIG_FB_CFB_IMAGEBLIT=m
++CONFIG_FB=y
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
+ # CONFIG_FB_MACMODES is not set
+ # CONFIG_FB_BACKLIGHT is not set
+ # CONFIG_FB_MODE_HELPERS is not set
+ # CONFIG_FB_TILEBLITTING is not set
+-CONFIG_FB_SIDSA=m
++CONFIG_FB_SIDSA=y
+ CONFIG_FB_SIDSA_DEFAULT_BPP=24
+ # CONFIG_FB_S1D13XXX is not set
+ # CONFIG_FB_VIRTUAL is not set
+
+ #
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE is not set
++
++#
+ # Logo configuration
+ #
+ # CONFIG_LOGO is not set
+ CONFIG_BACKLIGHT_LCD_SUPPORT=y
+ # CONFIG_BACKLIGHT_CLASS_DEVICE is not set
+-CONFIG_LCD_CLASS_DEVICE=m
++CONFIG_LCD_CLASS_DEVICE=y
+ CONFIG_LCD_DEVICE=y
+-CONFIG_LCD_LTV350QV=m
++CONFIG_LCD_LTV350QV=y
+
+ #
+ # Sound
+ #
+-# CONFIG_SOUND is not set
++CONFIG_SOUND=m
++
++#
++# Advanced Linux Sound Architecture
++#
++CONFIG_SND=m
++CONFIG_SND_TIMER=m
++CONFIG_SND_PCM=m
++# CONFIG_SND_SEQUENCER is not set
++CONFIG_SND_OSSEMUL=y
++CONFIG_SND_MIXER_OSS=m
++CONFIG_SND_PCM_OSS=m
++CONFIG_SND_PCM_OSS_PLUGINS=y
++# CONFIG_SND_DYNAMIC_MINORS is not set
++# CONFIG_SND_SUPPORT_OLD_API is not set
++# CONFIG_SND_VERBOSE_PROCFS is not set
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++
++#
++# Generic devices
++#
++CONFIG_SND_AC97_CODEC=m
++CONFIG_SND_AC97_BUS=m
++# CONFIG_SND_DUMMY is not set
++# CONFIG_SND_MTPAV is not set
++# CONFIG_SND_SERIAL_U16550 is not set
++# CONFIG_SND_MPU401 is not set
++
++#
++# ALSA AVR32 devices
++#
++CONFIG_SND_ATMEL_AC97=m
++# CONFIG_SND_ATMEL_AC97_USE_ALSA_MALLOC_CALLS is not set
++# CONFIG_SND_ATMEL_AC97C_USE_PDC is not set
++CONFIG_SND_AT73C213=m
++# CONFIG_SND_AT73C213_USE_ALSA_MALLOC_CALLS is not set
++
++#
++# Open Sound System
++#
++CONFIG_SOUND_PRIME=m
++# CONFIG_OSS_OBSOLETE_DRIVER is not set
++# CONFIG_SOUND_MSNDCLAS is not set
++# CONFIG_SOUND_MSNDPIN is not set
++CONFIG_SOUND_AT32_DAC=m
+
+ #
+ # USB support
+@@ -512,12 +706,34 @@
+ #
+ # USB Gadget Support
+ #
+-# CONFIG_USB_GADGET is not set
++CONFIG_USB_GADGET=m
++CONFIG_USB_GADGET_DEBUG_FILES=y
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_PXA2XX is not set
++# CONFIG_USB_GADGET_GOKU is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++CONFIG_USB_GADGET_HUSB2DEV=y
++CONFIG_USB_HUSB2DEV=m
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_AT91 is not set
++# CONFIG_USB_GADGET_DUMMY_HCD is not set
++CONFIG_USB_GADGET_DUALSPEED=y
++CONFIG_USB_ZERO=m
++CONFIG_USB_ETH=m
++CONFIG_USB_ETH_RNDIS=y
++CONFIG_USB_GADGETFS=m
++CONFIG_USB_FILE_STORAGE=m
++# CONFIG_USB_FILE_STORAGE_TEST is not set
++CONFIG_USB_G_SERIAL=m
+
+ #
+ # MMC/SD Card support
+ #
+-# CONFIG_MMC is not set
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_ATMELMCI=y
+
+ #
+ # LED devices
+@@ -570,14 +786,14 @@
+ # CONFIG_FS_POSIX_ACL is not set
+ # CONFIG_XFS_FS is not set
+ # CONFIG_OCFS2_FS is not set
+-CONFIG_MINIX_FS=m
+-CONFIG_ROMFS_FS=m
++# CONFIG_MINIX_FS is not set
++CONFIG_ROMFS_FS=y
+ # CONFIG_INOTIFY is not set
+ # CONFIG_QUOTA is not set
+ # CONFIG_DNOTIFY is not set
+ # CONFIG_AUTOFS_FS is not set
+ # CONFIG_AUTOFS4_FS is not set
+-# CONFIG_FUSE_FS is not set
++CONFIG_FUSE_FS=m
+
+ #
+ # CD-ROM/DVD Filesystems
+@@ -604,7 +820,7 @@
+ CONFIG_TMPFS=y
+ # CONFIG_HUGETLB_PAGE is not set
+ CONFIG_RAMFS=y
+-CONFIG_CONFIGFS_FS=m
++CONFIG_CONFIGFS_FS=y
+
+ #
+ # Miscellaneous filesystems
+@@ -616,6 +832,16 @@
+ # CONFIG_BEFS_FS is not set
+ # CONFIG_BFS_FS is not set
+ # CONFIG_EFS_FS is not set
++# CONFIG_JFFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_SUMMARY is not set
++# CONFIG_JFFS2_FS_XATTR is not set
++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
++CONFIG_JFFS2_ZLIB=y
++CONFIG_JFFS2_RTIME=y
++# CONFIG_JFFS2_RUBIN is not set
+ # CONFIG_CRAMFS is not set
+ # CONFIG_VXFS_FS is not set
+ # CONFIG_HPFS_FS is not set
+@@ -639,7 +865,8 @@
+ CONFIG_SUNRPC=y
+ # CONFIG_RPCSEC_GSS_KRB5 is not set
+ # CONFIG_RPCSEC_GSS_SPKM3 is not set
+-# CONFIG_SMB_FS is not set
++CONFIG_SMB_FS=m
++# CONFIG_SMB_NLS_DEFAULT is not set
+ CONFIG_CIFS=m
+ # CONFIG_CIFS_STATS is not set
+ # CONFIG_CIFS_WEAK_PW_HASH is not set
+@@ -702,16 +929,24 @@
+ CONFIG_NLS_UTF8=m
+
+ #
++# Profiling support
++#
++# CONFIG_PROFILING is not set
++
++#
+ # Kernel hacking
+ #
+ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+-CONFIG_PRINTK_TIME=y
++# CONFIG_PRINTK_TIME is not set
+ CONFIG_MAGIC_SYSRQ=y
+ # CONFIG_UNUSED_SYMBOLS is not set
+ CONFIG_DEBUG_KERNEL=y
+ CONFIG_LOG_BUF_SHIFT=14
+ CONFIG_DETECT_SOFTLOCKUP=y
+ # CONFIG_SCHEDSTATS is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
+ # CONFIG_DEBUG_SPINLOCK is not set
+ # CONFIG_DEBUG_MUTEXES is not set
+ # CONFIG_DEBUG_RWSEMS is not set
+@@ -720,13 +955,13 @@
+ # CONFIG_DEBUG_KOBJECT is not set
+ CONFIG_DEBUG_BUGVERBOSE=y
+ # CONFIG_DEBUG_INFO is not set
+-CONFIG_DEBUG_FS=y
++# CONFIG_DEBUG_FS is not set
+ # CONFIG_DEBUG_VM is not set
+ CONFIG_FRAME_POINTER=y
+ # CONFIG_UNWIND_INFO is not set
+-CONFIG_FORCED_INLINING=y
++# CONFIG_FORCED_INLINING is not set
+ # CONFIG_RCU_TORTURE_TEST is not set
+-CONFIG_KPROBES=y
++# CONFIG_KPROBES is not set
+
+ #
+ # Security options
+@@ -748,7 +983,8 @@
+ #
+ CONFIG_CRC_CCITT=m
+ # CONFIG_CRC16 is not set
+-CONFIG_CRC32=m
++CONFIG_CRC32=y
+ # CONFIG_LIBCRC32C is not set
+-CONFIG_ZLIB_INFLATE=m
+-CONFIG_ZLIB_DEFLATE=m
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_PLIST=y
diff --git a/packages/linux/linux-2.6.18/usart-make-rx-timeout-baudrate-independent.patch b/packages/linux/linux-2.6.18/usart-make-rx-timeout-baudrate-independent.patch
new file mode 100644
index 0000000000..9da06670ea
--- /dev/null
+++ b/packages/linux/linux-2.6.18/usart-make-rx-timeout-baudrate-independent.patch
@@ -0,0 +1,83 @@
+---
+ drivers/serial/atmel_usart.c | 33 ++++++++++++++++++++++++++-------
+ 1 file changed, 26 insertions(+), 7 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/serial/atmel_usart.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/serial/atmel_usart.c 2006-12-18 14:59:00.000000000 +0100
++++ linux-2.6.18-avr32/drivers/serial/atmel_usart.c 2006-12-18 16:51:33.000000000 +0100
+@@ -76,6 +76,14 @@ struct usart3_port {
+ struct clk *mck;
+ unsigned long mapsize;
+ struct uart_port uart;
++
++ /*
++ * If no data is received within rx_timeout_us microseconds or
++ * rx_timeout_cycles cycles, whichever is longest, we get an
++ * interrupt.
++ */
++ unsigned int rx_timeout_us;
++ unsigned int rx_timeout_cycles;
+ };
+ #define to_usart3_port(port) container_of(port, struct usart3_port, uart)
+
+@@ -582,12 +590,6 @@ static int usart3_startup(struct uart_po
+ usart3_writel(up, TCR, 0);
+ up->tx_dma_head = port->info->xmit.tail;
+
+- /*
+- * Set a suitable timeout. 2000 bit periods corresponds to
+- * about 17 ms at 115200 bps
+- */
+- usart3_writel(up, RTOR, 2000);
+-
+ /* Reset and enable receiver and transmitter */
+ usart3_writel(up, CR, (USART3_BIT(RSTRX)
+ | USART3_BIT(RSTTX)
+@@ -633,6 +635,7 @@ static void usart3_set_termios(struct ua
+ struct usart3_port *up = to_usart3_port(port);
+ unsigned int baud, quot, mode = 0;
+ unsigned int imr, flags;
++ unsigned long long timeout_cycles;
+
+ pr_debug("usart3: set_termios\n");
+
+@@ -692,6 +695,13 @@ static void usart3_set_termios(struct ua
+ | USART3_BIT(RSTRX)));
+ }
+
++ timeout_cycles = up->rx_timeout_us;
++ timeout_cycles *= baud;
++ do_div(timeout_cycles, 1000000);
++ if (timeout_cycles < up->rx_timeout_cycles)
++ timeout_cycles = up->rx_timeout_cycles;
++
++ pr_debug("usart3: Setting RTOR to %llu...\n", timeout_cycles);
+ pr_debug("usart3: Setting BRGR to %u (baud rate %u)...\n", quot, baud);
+
+ /* Disable receiver and transmitter */
+@@ -701,7 +711,12 @@ static void usart3_set_termios(struct ua
+ /* Set the parity, stop bits and data size */
+ usart3_writel(up, MR, mode);
+
+- /* Set the baud rate and enable receiver and transmitter */
++ /*
++ * Set the baud rate and RX timeout, and enable receiver and
++ * transmitter.
++ */
++ usart3_writel(up, RTOR, timeout_cycles);
++
+ usart3_writel(up, BRGR, quot);
+ usart3_writel(up, CR, (USART3_BIT(TXEN)
+ | USART3_BIT(RXEN)));
+@@ -805,6 +820,10 @@ static int __devinit initialize_port(str
+ return PTR_ERR(up->mck);
+ clk_enable(up->mck);
+
++ /* Default RX timeout after 10 ms, but no less than 10 cycles */
++ up->rx_timeout_us = 10000;
++ up->rx_timeout_cycles = 10;
++
+ port->mapbase = regs->start;
+ up->mapsize = regs->end - regs->start + 1;
+ port->irq = platform_get_irq(pdev, 0);
diff --git a/packages/linux/linux-2.6.18/usb-ethernet-align-all-descriptors-on-a-word-boundary.patch b/packages/linux/linux-2.6.18/usb-ethernet-align-all-descriptors-on-a-word-boundary.patch
new file mode 100644
index 0000000000..65aa9a4b7c
--- /dev/null
+++ b/packages/linux/linux-2.6.18/usb-ethernet-align-all-descriptors-on-a-word-boundary.patch
@@ -0,0 +1,171 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Tue Feb 28 08:51:18 2006 +0100
+Subject: [PATCH] USB Ethernet: Align all descriptors on a word boundary
+
+Seems like gcc has problems with packed structs, so we'll just align
+them explicitly.
+
+---
+
+ drivers/usb/gadget/ether.c | 35 ++++++++++++++++++-----------------
+ 1 file changed, 18 insertions(+), 17 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/usb/gadget/ether.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/usb/gadget/ether.c 2006-09-11 14:36:02.000000000 +0200
++++ linux-2.6.18-avr32/drivers/usb/gadget/ether.c 2006-09-12 10:14:19.000000000 +0200
+@@ -428,7 +428,7 @@ static inline int BITRATE(struct usb_gad
+ #define DEV_RNDIS_CONFIG_VALUE 2 /* rndis; optional */
+
+ static struct usb_device_descriptor
+-device_desc = {
++device_desc __attribute__((aligned(2))) = {
+ .bLength = sizeof device_desc,
+ .bDescriptorType = USB_DT_DEVICE,
+
+@@ -454,7 +454,7 @@ otg_descriptor = {
+ };
+
+ static struct usb_config_descriptor
+-eth_config = {
++eth_config __attribute__((aligned(2))) = {
+ .bLength = sizeof eth_config,
+ .bDescriptorType = USB_DT_CONFIG,
+
+@@ -468,7 +468,7 @@ eth_config = {
+
+ #ifdef CONFIG_USB_ETH_RNDIS
+ static struct usb_config_descriptor
+-rndis_config = {
++rndis_config __attribute__((aligned(2))) = {
+ .bLength = sizeof rndis_config,
+ .bDescriptorType = USB_DT_CONFIG,
+
+@@ -493,7 +493,7 @@ rndis_config = {
+
+ #ifdef DEV_CONFIG_CDC
+ static struct usb_interface_descriptor
+-control_intf = {
++control_intf __attribute__((aligned(2))) = {
+ .bLength = sizeof control_intf,
+ .bDescriptorType = USB_DT_INTERFACE,
+
+@@ -509,7 +509,7 @@ control_intf = {
+
+ #ifdef CONFIG_USB_ETH_RNDIS
+ static const struct usb_interface_descriptor
+-rndis_control_intf = {
++rndis_control_intf __attribute__((aligned(2))) = {
+ .bLength = sizeof rndis_control_intf,
+ .bDescriptorType = USB_DT_INTERFACE,
+
+@@ -524,7 +524,7 @@ rndis_control_intf = {
+
+ #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS)
+
+-static const struct usb_cdc_header_desc header_desc = {
++static const struct usb_cdc_header_desc __attribute__((aligned(2))) header_desc = {
+ .bLength = sizeof header_desc,
+ .bDescriptorType = USB_DT_CS_INTERFACE,
+ .bDescriptorSubType = USB_CDC_HEADER_TYPE,
+@@ -566,7 +566,8 @@ static const struct usb_cdc_acm_descript
+
+ #ifdef DEV_CONFIG_CDC
+
+-static const struct usb_cdc_ether_desc ether_desc = {
++static const struct usb_cdc_ether_desc
++ether_desc __attribute__((aligned(2))) = {
+ .bLength = sizeof ether_desc,
+ .bDescriptorType = USB_DT_CS_INTERFACE,
+ .bDescriptorSubType = USB_CDC_ETHERNET_TYPE,
+@@ -601,7 +602,7 @@ static const struct usb_cdc_ether_desc e
+ #define STATUS_BYTECOUNT 16 /* 8 byte header + data */
+
+ static struct usb_endpoint_descriptor
+-fs_status_desc = {
++fs_status_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -632,7 +633,7 @@ data_nop_intf = {
+ /* ... but the "real" data interface has two bulk endpoints */
+
+ static const struct usb_interface_descriptor
+-data_intf = {
++data_intf __attribute__((aligned(2))) = {
+ .bLength = sizeof data_intf,
+ .bDescriptorType = USB_DT_INTERFACE,
+
+@@ -652,7 +653,7 @@ data_intf = {
+ /* RNDIS doesn't activate by changing to the "real" altsetting */
+
+ static const struct usb_interface_descriptor
+-rndis_data_intf = {
++rndis_data_intf __attribute__((aligned(2))) = {
+ .bLength = sizeof rndis_data_intf,
+ .bDescriptorType = USB_DT_INTERFACE,
+
+@@ -675,7 +676,7 @@ rndis_data_intf = {
+ */
+
+ static const struct usb_interface_descriptor
+-subset_data_intf = {
++subset_data_intf __attribute__((aligned(2))) = {
+ .bLength = sizeof subset_data_intf,
+ .bDescriptorType = USB_DT_INTERFACE,
+
+@@ -692,7 +693,7 @@ subset_data_intf = {
+
+
+ static struct usb_endpoint_descriptor
+-fs_source_desc = {
++fs_source_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -701,7 +702,7 @@ fs_source_desc = {
+ };
+
+ static struct usb_endpoint_descriptor
+-fs_sink_desc = {
++fs_sink_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -767,7 +768,7 @@ static const struct usb_descriptor_heade
+
+ #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS)
+ static struct usb_endpoint_descriptor
+-hs_status_desc = {
++hs_status_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -778,7 +779,7 @@ hs_status_desc = {
+ #endif /* DEV_CONFIG_CDC */
+
+ static struct usb_endpoint_descriptor
+-hs_source_desc = {
++hs_source_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -787,7 +788,7 @@ hs_source_desc = {
+ };
+
+ static struct usb_endpoint_descriptor
+-hs_sink_desc = {
++hs_sink_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -796,7 +797,7 @@ hs_sink_desc = {
+ };
+
+ static struct usb_qualifier_descriptor
+-dev_qualifier = {
++dev_qualifier __attribute__((aligned(2))) = {
+ .bLength = sizeof dev_qualifier,
+ .bDescriptorType = USB_DT_DEVICE_QUALIFIER,
+
diff --git a/packages/linux/linux-2.6.18/usb-ethernet-define-cdc-capability-for-husb2.patch b/packages/linux/linux-2.6.18/usb-ethernet-define-cdc-capability-for-husb2.patch
new file mode 100644
index 0000000000..1e3295e5d9
--- /dev/null
+++ b/packages/linux/linux-2.6.18/usb-ethernet-define-cdc-capability-for-husb2.patch
@@ -0,0 +1,27 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Mon Feb 27 18:15:04 2006 +0100
+Subject: [PATCH] USB: Define CDC capability for HUSB2
+
+Define DEV_CONFIG_CDC when compiling for HUSB2DEV.
+
+---
+
+ drivers/usb/gadget/ether.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+Index: linux-2.6.18-avr32/drivers/usb/gadget/ether.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/usb/gadget/ether.c 2006-09-12 10:14:19.000000000 +0200
++++ linux-2.6.18-avr32/drivers/usb/gadget/ether.c 2006-09-12 10:14:40.000000000 +0200
+@@ -266,6 +266,10 @@ MODULE_PARM_DESC(host_addr, "Host Ethern
+ #define DEV_CONFIG_CDC
+ #endif
+
++#ifdef CONFIG_USB_GADGET_HUSB2DEV
++#define DEV_CONFIG_CDC
++#endif
++
+
+ /* For CDC-incapable hardware, choose the simple cdc subset.
+ * Anything that talks bulk (without notable bugs) can do this.
diff --git a/packages/linux/linux-2.6.18/usb-file-storage-align-all-descriptors-on-a-word-boundary.patch b/packages/linux/linux-2.6.18/usb-file-storage-align-all-descriptors-on-a-word-boundary.patch
new file mode 100644
index 0000000000..10778d5903
--- /dev/null
+++ b/packages/linux/linux-2.6.18/usb-file-storage-align-all-descriptors-on-a-word-boundary.patch
@@ -0,0 +1,107 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Tue Feb 28 08:51:18 2006 +0100
+Subject: [PATCH] USB File Storage: Align all descriptors on a word boundary
+
+Seems like gcc has problems with packed structs, so we'll just align
+them explicitly.
+
+---
+
+ drivers/usb/gadget/file_storage.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/usb/gadget/file_storage.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/usb/gadget/file_storage.c 2006-09-11 14:36:02.000000000 +0200
++++ linux-2.6.18-avr32/drivers/usb/gadget/file_storage.c 2006-09-12 10:16:30.000000000 +0200
+@@ -853,7 +853,7 @@ static void inline put_be32(u8 *buf, u32
+ #define CONFIG_VALUE 1
+
+ static struct usb_device_descriptor
+-device_desc = {
++device_desc __attribute__((aligned(2))) = {
+ .bLength = sizeof device_desc,
+ .bDescriptorType = USB_DT_DEVICE,
+
+@@ -872,7 +872,7 @@ device_desc = {
+ };
+
+ static struct usb_config_descriptor
+-config_desc = {
++config_desc __attribute__((aligned(2))) = {
+ .bLength = sizeof config_desc,
+ .bDescriptorType = USB_DT_CONFIG,
+
+@@ -895,7 +895,7 @@ otg_desc = {
+ /* There is only one interface. */
+
+ static struct usb_interface_descriptor
+-intf_desc = {
++intf_desc __attribute__((aligned(2))) = {
+ .bLength = sizeof intf_desc,
+ .bDescriptorType = USB_DT_INTERFACE,
+
+@@ -910,7 +910,7 @@ intf_desc = {
+ * and interrupt-in. */
+
+ static struct usb_endpoint_descriptor
+-fs_bulk_in_desc = {
++fs_bulk_in_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -920,7 +920,7 @@ fs_bulk_in_desc = {
+ };
+
+ static struct usb_endpoint_descriptor
+-fs_bulk_out_desc = {
++fs_bulk_out_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -930,7 +930,7 @@ fs_bulk_out_desc = {
+ };
+
+ static struct usb_endpoint_descriptor
+-fs_intr_in_desc = {
++fs_intr_in_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -962,7 +962,7 @@ static const struct usb_descriptor_heade
+ * for the config descriptor.
+ */
+ static struct usb_qualifier_descriptor
+-dev_qualifier = {
++dev_qualifier __attribute__((aligned(2))) = {
+ .bLength = sizeof dev_qualifier,
+ .bDescriptorType = USB_DT_DEVICE_QUALIFIER,
+
+@@ -973,7 +973,7 @@ dev_qualifier = {
+ };
+
+ static struct usb_endpoint_descriptor
+-hs_bulk_in_desc = {
++hs_bulk_in_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -983,7 +983,7 @@ hs_bulk_in_desc = {
+ };
+
+ static struct usb_endpoint_descriptor
+-hs_bulk_out_desc = {
++hs_bulk_out_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -994,7 +994,7 @@ hs_bulk_out_desc = {
+ };
+
+ static struct usb_endpoint_descriptor
+-hs_intr_in_desc = {
++hs_intr_in_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
diff --git a/packages/linux/linux-2.6.18/usb-serial-align-all-descriptors-on-a-word-boundary.patch b/packages/linux/linux-2.6.18/usb-serial-align-all-descriptors-on-a-word-boundary.patch
new file mode 100644
index 0000000000..f78063c9fb
--- /dev/null
+++ b/packages/linux/linux-2.6.18/usb-serial-align-all-descriptors-on-a-word-boundary.patch
@@ -0,0 +1,140 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Tue Feb 28 08:51:18 2006 +0100
+Subject: [PATCH] USB Serial: Align all descriptors on a word boundary
+
+Seems like gcc has problems with packed structs, so we'll just align
+them explicitly.
+
+---
+
+ drivers/usb/gadget/serial.c | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/usb/gadget/serial.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/usb/gadget/serial.c 2006-09-11 14:36:02.000000000 +0200
++++ linux-2.6.18-avr32/drivers/usb/gadget/serial.c 2006-09-12 10:17:52.000000000 +0200
+@@ -333,7 +333,7 @@ static struct usb_gadget_strings gs_stri
+ .strings = gs_strings,
+ };
+
+-static struct usb_device_descriptor gs_device_desc = {
++static struct usb_device_descriptor __attribute__((aligned(2))) gs_device_desc = {
+ .bLength = USB_DT_DEVICE_SIZE,
+ .bDescriptorType = USB_DT_DEVICE,
+ .bcdUSB = __constant_cpu_to_le16(0x0200),
+@@ -353,7 +353,7 @@ static struct usb_otg_descriptor gs_otg_
+ .bmAttributes = USB_OTG_SRP,
+ };
+
+-static struct usb_config_descriptor gs_bulk_config_desc = {
++static struct usb_config_descriptor __attribute__((aligned(2))) gs_bulk_config_desc = {
+ .bLength = USB_DT_CONFIG_SIZE,
+ .bDescriptorType = USB_DT_CONFIG,
+ /* .wTotalLength computed dynamically */
+@@ -364,7 +364,7 @@ static struct usb_config_descriptor gs_b
+ .bMaxPower = 1,
+ };
+
+-static struct usb_config_descriptor gs_acm_config_desc = {
++static struct usb_config_descriptor __attribute__((aligned(2))) gs_acm_config_desc = {
+ .bLength = USB_DT_CONFIG_SIZE,
+ .bDescriptorType = USB_DT_CONFIG,
+ /* .wTotalLength computed dynamically */
+@@ -375,7 +375,7 @@ static struct usb_config_descriptor gs_a
+ .bMaxPower = 1,
+ };
+
+-static const struct usb_interface_descriptor gs_bulk_interface_desc = {
++static const struct usb_interface_descriptor __attribute__((aligned(2))) gs_bulk_interface_desc = {
+ .bLength = USB_DT_INTERFACE_SIZE,
+ .bDescriptorType = USB_DT_INTERFACE,
+ .bInterfaceNumber = GS_BULK_INTERFACE_ID,
+@@ -386,7 +386,7 @@ static const struct usb_interface_descri
+ .iInterface = GS_DATA_STR_ID,
+ };
+
+-static const struct usb_interface_descriptor gs_control_interface_desc = {
++static const struct usb_interface_descriptor __attribute__((aligned(2))) gs_control_interface_desc = {
+ .bLength = USB_DT_INTERFACE_SIZE,
+ .bDescriptorType = USB_DT_INTERFACE,
+ .bInterfaceNumber = GS_CONTROL_INTERFACE_ID,
+@@ -397,7 +397,7 @@ static const struct usb_interface_descri
+ .iInterface = GS_CONTROL_STR_ID,
+ };
+
+-static const struct usb_interface_descriptor gs_data_interface_desc = {
++static const struct usb_interface_descriptor __attribute__((aligned(2))) gs_data_interface_desc = {
+ .bLength = USB_DT_INTERFACE_SIZE,
+ .bDescriptorType = USB_DT_INTERFACE,
+ .bInterfaceNumber = GS_DATA_INTERFACE_ID,
+@@ -408,7 +408,7 @@ static const struct usb_interface_descri
+ .iInterface = GS_DATA_STR_ID,
+ };
+
+-static const struct usb_cdc_header_desc gs_header_desc = {
++static const struct usb_cdc_header_desc __attribute__((aligned(2))) gs_header_desc = {
+ .bLength = sizeof(gs_header_desc),
+ .bDescriptorType = USB_DT_CS_INTERFACE,
+ .bDescriptorSubType = USB_CDC_HEADER_TYPE,
+@@ -438,7 +438,7 @@ static const struct usb_cdc_union_desc g
+ .bSlaveInterface0 = 1, /* index of data interface */
+ };
+
+-static struct usb_endpoint_descriptor gs_fullspeed_notify_desc = {
++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_fullspeed_notify_desc = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = USB_DIR_IN,
+@@ -447,14 +447,14 @@ static struct usb_endpoint_descriptor gs
+ .bInterval = 1 << GS_LOG2_NOTIFY_INTERVAL,
+ };
+
+-static struct usb_endpoint_descriptor gs_fullspeed_in_desc = {
++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_fullspeed_in_desc = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = USB_DIR_IN,
+ .bmAttributes = USB_ENDPOINT_XFER_BULK,
+ };
+
+-static struct usb_endpoint_descriptor gs_fullspeed_out_desc = {
++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_fullspeed_out_desc = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = USB_DIR_OUT,
+@@ -484,7 +484,7 @@ static const struct usb_descriptor_heade
+ };
+
+ #ifdef CONFIG_USB_GADGET_DUALSPEED
+-static struct usb_endpoint_descriptor gs_highspeed_notify_desc = {
++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_highspeed_notify_desc = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = USB_DIR_IN,
+@@ -493,21 +493,21 @@ static struct usb_endpoint_descriptor gs
+ .bInterval = GS_LOG2_NOTIFY_INTERVAL+4,
+ };
+
+-static struct usb_endpoint_descriptor gs_highspeed_in_desc = {
++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_highspeed_in_desc = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bmAttributes = USB_ENDPOINT_XFER_BULK,
+ .wMaxPacketSize = __constant_cpu_to_le16(512),
+ };
+
+-static struct usb_endpoint_descriptor gs_highspeed_out_desc = {
++static struct usb_endpoint_descriptor __attribute__((aligned(2))) gs_highspeed_out_desc = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bmAttributes = USB_ENDPOINT_XFER_BULK,
+ .wMaxPacketSize = __constant_cpu_to_le16(512),
+ };
+
+-static struct usb_qualifier_descriptor gs_qualifier_desc = {
++static struct usb_qualifier_descriptor __attribute__((aligned(2))) gs_qualifier_desc = {
+ .bLength = sizeof(struct usb_qualifier_descriptor),
+ .bDescriptorType = USB_DT_DEVICE_QUALIFIER,
+ .bcdUSB = __constant_cpu_to_le16 (0x0200),
diff --git a/packages/linux/linux-2.6.18/usb-zero-align-all-descriptors-on-a-word-boundary.patch b/packages/linux/linux-2.6.18/usb-zero-align-all-descriptors-on-a-word-boundary.patch
new file mode 100644
index 0000000000..e9143eec58
--- /dev/null
+++ b/packages/linux/linux-2.6.18/usb-zero-align-all-descriptors-on-a-word-boundary.patch
@@ -0,0 +1,107 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Tue Feb 28 08:51:18 2006 +0100
+Subject: [PATCH] USB Zero: Align all descriptors on a word boundary
+
+Seems like gcc has problems with packed structs, so we'll just align
+them explicitly.
+
+---
+
+ drivers/usb/gadget/zero.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+Index: linux-2.6.18-avr32/drivers/usb/gadget/zero.c
+===================================================================
+--- linux-2.6.18-avr32.orig/drivers/usb/gadget/zero.c 2006-09-11 14:36:02.000000000 +0200
++++ linux-2.6.18-avr32/drivers/usb/gadget/zero.c 2006-09-12 10:19:02.000000000 +0200
+@@ -221,7 +221,7 @@ module_param (loopdefault, bool, S_IRUGO
+ #define CONFIG_LOOPBACK 2
+
+ static struct usb_device_descriptor
+-device_desc = {
++device_desc __attribute__((aligned(2))) = {
+ .bLength = sizeof device_desc,
+ .bDescriptorType = USB_DT_DEVICE,
+
+@@ -237,7 +237,7 @@ device_desc = {
+ };
+
+ static struct usb_config_descriptor
+-source_sink_config = {
++source_sink_config __attribute__((aligned(2))) = {
+ .bLength = sizeof source_sink_config,
+ .bDescriptorType = USB_DT_CONFIG,
+
+@@ -250,7 +250,7 @@ source_sink_config = {
+ };
+
+ static struct usb_config_descriptor
+-loopback_config = {
++loopback_config __attribute__((aligned(2))) = {
+ .bLength = sizeof loopback_config,
+ .bDescriptorType = USB_DT_CONFIG,
+
+@@ -273,7 +273,7 @@ otg_descriptor = {
+ /* one interface in each configuration */
+
+ static const struct usb_interface_descriptor
+-source_sink_intf = {
++source_sink_intf __attribute__((aligned(2))) = {
+ .bLength = sizeof source_sink_intf,
+ .bDescriptorType = USB_DT_INTERFACE,
+
+@@ -283,7 +283,7 @@ source_sink_intf = {
+ };
+
+ static const struct usb_interface_descriptor
+-loopback_intf = {
++loopback_intf __attribute__((aligned(2))) = {
+ .bLength = sizeof loopback_intf,
+ .bDescriptorType = USB_DT_INTERFACE,
+
+@@ -295,7 +295,7 @@ loopback_intf = {
+ /* two full speed bulk endpoints; their use is config-dependent */
+
+ static struct usb_endpoint_descriptor
+-fs_source_desc = {
++fs_source_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -304,7 +304,7 @@ fs_source_desc = {
+ };
+
+ static struct usb_endpoint_descriptor
+-fs_sink_desc = {
++fs_sink_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -340,7 +340,7 @@ static const struct usb_descriptor_heade
+ */
+
+ static struct usb_endpoint_descriptor
+-hs_source_desc = {
++hs_source_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -349,7 +349,7 @@ hs_source_desc = {
+ };
+
+ static struct usb_endpoint_descriptor
+-hs_sink_desc = {
++hs_sink_desc __attribute__((aligned(2))) = {
+ .bLength = USB_DT_ENDPOINT_SIZE,
+ .bDescriptorType = USB_DT_ENDPOINT,
+
+@@ -358,7 +358,7 @@ hs_sink_desc = {
+ };
+
+ static struct usb_qualifier_descriptor
+-dev_qualifier = {
++dev_qualifier __attribute__((aligned(2))) = {
+ .bLength = sizeof dev_qualifier,
+ .bDescriptorType = USB_DT_DEVICE_QUALIFIER,
+
diff --git a/packages/opie-bluetoothapplet/files/.mtn2git_empty b/packages/linux/linux-2.6.22.6/mx31moboard/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/opie-bluetoothapplet/files/.mtn2git_empty
+++ b/packages/linux/linux-2.6.22.6/mx31moboard/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.22.6/mx31moboard/defconfig b/packages/linux/linux-2.6.22.6/mx31moboard/defconfig
new file mode 100644
index 0000000000..23c55e35b8
--- /dev/null
+++ b/packages/linux/linux-2.6.22.6/mx31moboard/defconfig
@@ -0,0 +1,1492 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.22.6
+# Mon Dec 17 11:53:39 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+# CONFIG_GENERIC_GPIO is not set
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+CONFIG_ARCH_MXC=y
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Freescale MXC Implementations
+#
+CONFIG_ARCH_MX3=y
+# CONFIG_ARCH_MX27 is not set
+# CONFIG_ARCH_MXC_HAS_NFC_V1 is not set
+CONFIG_I2C_MXC_SELECT1=y
+CONFIG_I2C_MXC_SELECT2=y
+
+#
+# MX3 Options
+#
+# CONFIG_MACH_MX31ADS is not set
+CONFIG_MACH_MX31MOBOTS=y
+CONFIG_MX3_DOZE_DURING_IDLE=y
+CONFIG_MXC_SDMA_API=y
+# CONFIG_ARCH_MXC_HAS_NFC_V2 is not set
+
+#
+# Device options
+#
+# CONFIG_I2C_MXC_SELECT3 is not set
+CONFIG_ARCH_HAS_EVTMON=y
+CONFIG_ISP1504_MXC=y
+CONFIG_ISP1504_MXC_OTG=m
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+# CONFIG_CPU_ARM926T is not set
+CONFIG_CPU_V6=y
+# CONFIG_CPU_32v6K is not set
+CONFIG_CPU_32v6=y
+CONFIG_CPU_ABRT_EV6=y
+CONFIG_CPU_CACHE_V6=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V6=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+CONFIG_OUTER_CACHE=y
+CONFIG_CACHE_L2X0=y
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="noinitrd console=ttymxc0 root=/dev/mtdblock2 rw ip=off"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+# CONFIG_APM_EMULATION is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+# CONFIG_IEEE80211_SOFTMAC is not set
+# CONFIG_RFKILL is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+CONFIG_MTD_RAM=y
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+CONFIG_MTD_MXC=y
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_ARCNET is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=m
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+# CONFIG_USB_USBNET_MII is not set
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+# CONFIG_USB_NET_NET1080 is not set
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_MXC is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+CONFIG_TOUCHSCREEN_MXC=y
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_MXC=y
+CONFIG_SERIAL_MXC_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_MXC_WATCHDOG=y
+
+#
+# ISA-based Watchdog Cards
+#
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_WDT is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_ELEKTOR is not set
+CONFIG_I2C_MXC=y
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_MXC=y
+# CONFIG_SPI_MXC_TEST_LOOPBACK is not set
+# CONFIG_SPI_MXC_SELECT1 is not set
+CONFIG_SPI_MXC_SELECT2=y
+CONFIG_SPI_MXC_SELECT3=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+# CONFIG_HWMON is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_PMS is not set
+CONFIG_VIDEO_MXC_CAMERA=y
+
+#
+# MXC Camera/V4L2 PRP Features support
+#
+CONFIG_VIDEO_MXC_IPU_CAMERA=y
+CONFIG_MXC_CAMERA_MICRON111=y
+# CONFIG_MXC_CAMERA_MC521DA is not set
+# CONFIG_MXC_CAMERA_OV2640 is not set
+CONFIG_MXC_IPU_PRP_VF_SDC=y
+CONFIG_MXC_IPU_PRP_ENC=y
+CONFIG_VIDEO_MXC_OUTPUT=y
+CONFIG_VIDEO_MXC_IPU_OUTPUT=y
+# CONFIG_VIDEO_MXC_OPL is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_CADET is not set
+# CONFIG_RADIO_RTRACK is not set
+# CONFIG_RADIO_RTRACK2 is not set
+# CONFIG_RADIO_AZTECH is not set
+# CONFIG_RADIO_GEMTEK 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_USB_DSBR is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_MXC=y
+CONFIG_FB_MXC_SYNC_PANEL=y
+CONFIG_FB_MXC_TVOUT=y
+# CONFIG_FB_MXC_ASYNC_PANEL is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_MXC_PMIC=y
+# CONFIG_SND_MXC_PLAYBACK_MIXING is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+CONFIG_USB_OTG=y
+CONFIG_USB_OTG_WHITELIST=y
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_ARC=y
+CONFIG_USB_EHCI_ARC_H1=y
+CONFIG_USB_EHCI_ARC_H2=y
+CONFIG_USB_EHCI_ARC_OTG=y
+# CONFIG_USB_EHCI_FSL_MC13783 is not set
+# CONFIG_USB_EHCI_FSL_1301 is not set
+CONFIG_USB_EHCI_FSL_1504=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_ARC=y
+CONFIG_USB_ARC=m
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_GADGET_ARC_OTG=y
+# CONFIG_USB_GADGET_FSL_MC13783 is not set
+# CONFIG_USB_GADGET_FSL_1301 is not set
+CONFIG_USB_GADGET_FSL_1504=y
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_MXC=m
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_MXC=y
+
+#
+# MXC support drivers
+#
+
+#
+# MXC IPU
+#
+CONFIG_MXC_IPU=y
+CONFIG_MXC_IPU_PF=y
+
+#
+# MXC SSI support
+#
+CONFIG_MXC_SSI=y
+
+#
+# MXC Digital Audio Multiplexer support
+#
+CONFIG_MXC_DAM=y
+
+#
+# MXC PMIC support
+#
+CONFIG_MXC_SPI_PMIC_CORE=y
+CONFIG_MXC_PMIC=y
+CONFIG_MXC_PMIC_CHARDEV=y
+
+#
+# MXC PMIC Client Drivers
+#
+CONFIG_MXC_PMIC_MC13783=y
+CONFIG_MXC_MC13783_ADC=y
+CONFIG_MXC_MC13783_AUDIO=y
+CONFIG_MXC_MC13783_RTC=y
+CONFIG_MXC_MC13783_LIGHT=y
+CONFIG_MXC_MC13783_BATTERY=y
+CONFIG_MXC_MC13783_CONNECTIVITY=y
+CONFIG_MXC_MC13783_POWER=y
+
+#
+# Advanced Power Management devices
+#
+# CONFIG_MXC_DPTC is not set
+CONFIG_MXC_DVFS=y
+CONFIG_MXC_DVFS_SDMA=y
+
+#
+# MXC Security Drivers
+#
+CONFIG_MXC_SECURITY_SCC=y
+# CONFIG_SCC_DEBUG is not set
+CONFIG_MXC_SECURITY_RNG=y
+# CONFIG_MXC_RNG_TEST_DRIVER is not set
+# CONFIG_MXC_RNG_DEBUG is not set
+CONFIG_MXC_SECURITY_RTIC=y
+# CONFIG_MXC_RTIC_TEST_DEBUG is not set
+CONFIG_MXC_SECURITY_CORE=y
+
+#
+# MXC MPEG4 Encoder Kernel module support
+#
+CONFIG_MXC_HMP4E=y
+# CONFIG_MXC_HMP4E_DEBUG is not set
+
+#
+# MXC VPU(Video Processing Unit) support
+#
+# CONFIG_MXC_VPU is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_YAFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_CRAMFS_LINEAR is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_DEBUG_USER=y
+
+#
+# CodeTEST setup
+#
+# CONFIG_CODETEST is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/pimlico/contacts-0.7/.mtn2git_empty b/packages/linux/linux-2.6.23+2.6.24-rc5/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/pimlico/contacts-0.7/.mtn2git_empty
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/.mtn2git_empty
diff --git a/packages/pimlico/tasks-0.12/.mtn2git_empty b/packages/linux/linux-2.6.23+2.6.24-rc5/alix/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/pimlico/tasks-0.12/.mtn2git_empty
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/alix/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc5/alix/defconfig b/packages/linux/linux-2.6.23+2.6.24-rc5/alix/defconfig
new file mode 100644
index 0000000000..c2750cc213
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/alix/defconfig
@@ -0,0 +1,1836 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc5
+# Fri Dec 21 10:16:47 2007
+#
+# CONFIG_64BIT is not set
+CONFIG_X86_32=y
+# CONFIG_X86_64 is not set
+CONFIG_X86=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_MMU=y
+CONFIG_ZONE_DMA=y
+CONFIG_QUICKLIST=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
+# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+# CONFIG_GENERIC_TIME_VSYSCALL is not set
+CONFIG_ARCH_SUPPORTS_OPROFILE=y
+# CONFIG_ZONE_DMA32 is not set
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+# CONFIG_AUDIT_ARCH is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_KTIME_SCALAR=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_AUDIT=y
+# CONFIG_AUDITSYSCALL is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+CONFIG_BLK_DEV_BSG=y
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_SMP is not set
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_X86_VSMP is not set
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+# CONFIG_PARAVIRT_GUEST is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+# CONFIG_M686 is not set
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+CONFIG_MGEODE_LX=y
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
+# CONFIG_MPSC is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_GENERIC_CPU is not set
+# CONFIG_X86_GENERIC is not set
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_L1_CACHE_SHIFT=5
+CONFIG_X86_XADD=y
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_USE_PPRO_CHECKSUM=y
+CONFIG_X86_USE_3DNOW=y
+CONFIG_X86_TSC=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=4
+CONFIG_HPET_TIMER=y
+CONFIG_HPET_EMULATE_RTC=y
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_PREEMPT_BKL=y
+# CONFIG_X86_UP_APIC is not set
+# CONFIG_X86_MCE is not set
+CONFIG_VM86=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+CONFIG_X86_REBOOTFIXUPS=y
+# CONFIG_MICROCODE is not set
+CONFIG_X86_MSR=m
+# CONFIG_X86_CPUID is not set
+CONFIG_NOHIGHMEM=y
+# CONFIG_HIGHMEM4G is not set
+# CONFIG_HIGHMEM64G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_X86_PAE is not set
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_NR_QUICK=1
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_MATH_EMULATION is not set
+# CONFIG_MTRR is not set
+# CONFIG_EFI is not set
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
+CONFIG_HZ_1000=y
+CONFIG_HZ=1000
+# CONFIG_KEXEC is not set
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+# CONFIG_COMPAT_VDSO is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+# CONFIG_SUSPEND is not set
+CONFIG_HIBERNATION_UP_POSSIBLE=y
+# CONFIG_HIBERNATION is not set
+CONFIG_ACPI=y
+# CONFIG_ACPI_PROCFS is not set
+# CONFIG_ACPI_PROCFS_POWER is not set
+# CONFIG_ACPI_PROC_EVENT is not set
+# CONFIG_ACPI_AC is not set
+# CONFIG_ACPI_BATTERY is not set
+# CONFIG_ACPI_BUTTON is not set
+# CONFIG_ACPI_FAN is not set
+# CONFIG_ACPI_DOCK is not set
+CONFIG_ACPI_PROCESSOR=m
+CONFIG_ACPI_THERMAL=m
+# CONFIG_ACPI_ASUS is not set
+# CONFIG_ACPI_TOSHIBA is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+# CONFIG_ACPI_CONTAINER is not set
+# CONFIG_ACPI_SBS is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Bus options (PCI etc.)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCI_DOMAINS=y
+# CONFIG_PCIEPORTBUS is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCI_LEGACY is not set
+# CONFIG_PCI_DEBUG is not set
+CONFIG_ISA_DMA_API=y
+# CONFIG_ISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+CONFIG_GEODE_MFGPT_TIMER=y
+# CONFIG_PCCARD is not set
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats / Emulations
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+CONFIG_CFG80211=m
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+CONFIG_MAC80211_RCSIMPLE=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+# CONFIG_PARPORT_GSC is not set
+CONFIG_PARPORT_AX88796=m
+CONFIG_PARPORT_1284=y
+CONFIG_PARPORT_NOT_PC=y
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+CONFIG_PNPACPI=y
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_EEPROM_93CX6=m
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# CONFIG_SCSI_LOWLEVEL is not set
+CONFIG_ATA=y
+# CONFIG_ATA_NONSTANDARD is not set
+CONFIG_ATA_ACPI=y
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+# CONFIG_SATA_VIA is not set
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ACPI is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+# CONFIG_PATA_ARTOP is not set
+# CONFIG_PATA_ATIIXP 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=y
+# CONFIG_PATA_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC 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_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_NS87415 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_MD is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_SB1000 is not set
+# CONFIG_IP1000 is not set
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+CONFIG_VIA_RHINE=y
+CONFIG_VIA_RHINE_MMIO=y
+CONFIG_VIA_RHINE_NAPI=y
+# CONFIG_SC92031 is not set
+# CONFIG_NET_POCKET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_LIBERTAS is not set
+# CONFIG_AIRO is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+# CONFIG_PRISM54 is not set
+CONFIG_USB_ZD1201=m
+# CONFIG_RTL8187 is not set
+# CONFIG_ADM8211 is not set
+# CONFIG_P54_COMMON is not set
+# CONFIG_IWLWIFI is not set
+# CONFIG_HOSTAP is not set
+CONFIG_BCM43XX=m
+CONFIG_BCM43XX_DEBUG=y
+CONFIG_BCM43XX_DMA=y
+CONFIG_BCM43XX_PIO=y
+CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
+# CONFIG_BCM43XX_DMA_MODE is not set
+# CONFIG_BCM43XX_PIO_MODE is not set
+CONFIG_B43=m
+CONFIG_B43_PCI_AUTOSELECT=y
+CONFIG_B43_PCICORE_AUTOSELECT=y
+# CONFIG_B43_DEBUG is not set
+CONFIG_B43_DMA=y
+CONFIG_B43_PIO=y
+CONFIG_B43_DMA_AND_PIO_MODE=y
+# CONFIG_B43_DMA_MODE is not set
+# CONFIG_B43_PIO_MODE is not set
+CONFIG_B43LEGACY=m
+CONFIG_B43LEGACY_PCI_AUTOSELECT=y
+CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
+CONFIG_B43LEGACY_DEBUG=y
+CONFIG_B43LEGACY_DMA=y
+CONFIG_B43LEGACY_PIO=y
+CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+# CONFIG_B43LEGACY_DMA_MODE is not set
+# CONFIG_B43LEGACY_PIO_MODE is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_RT2X00=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_PCI=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2400PCI=m
+# CONFIG_RT2400PCI_RFKILL is not set
+CONFIG_RT2500PCI=m
+# CONFIG_RT2500PCI_RFKILL is not set
+CONFIG_RT61PCI=m
+# CONFIG_RT61PCI_RFKILL is not set
+CONFIG_RT2500USB=m
+CONFIG_RT73USB=m
+# CONFIG_RT2X00_DEBUG is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_USBNET=m
+# CONFIG_USB_NET_AX8817X is not set
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+# CONFIG_USB_NET_GL620A is not set
+# CONFIG_USB_NET_NET1080 is not set
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+CONFIG_USB_NET_CDC_SUBSET=m
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+# CONFIG_USB_BELKIN is not set
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+# CONFIG_USB_KC2190 is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_PCSPKR=y
+# CONFIG_INPUT_WISTRON_BTNS is not set
+# CONFIG_INPUT_ATLAS_BTNS is not set
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_PRINTER is not set
+# CONFIG_PPDEV is not set
+# CONFIG_TIPAR is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_INTEL is not set
+# CONFIG_HW_RANDOM_AMD is not set
+CONFIG_HW_RANDOM_GEODE=y
+# CONFIG_HW_RANDOM_VIA is not set
+# CONFIG_NVRAM is not set
+CONFIG_RTC=y
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+# CONFIG_MWAVE is not set
+# CONFIG_PC8736x_GPIO is not set
+CONFIG_NSC_GPIO=m
+CONFIG_CS5535_GPIO=m
+# CONFIG_RAW_DRIVER is not set
+CONFIG_HPET=y
+# CONFIG_HPET_RTC_IRQ is not set
+CONFIG_HPET_MMAP=y
+CONFIG_HANGCHECK_TIMER=m
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# 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_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 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_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIMTEC is not set
+CONFIG_SCx200_ACB=m
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=m
+CONFIG_HWMON_VID=m
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ABITUGURU3 is not set
+# CONFIG_SENSORS_AD7418 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_ADT7470 is not set
+# CONFIG_SENSORS_K8TEMP is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_I5K_AMB is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_FSCHMD is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_CORETEMP is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 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_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 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_W83L785TS is not set
+CONFIG_SENSORS_W83627HF=m
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_HDAPS is not set
+# CONFIG_SENSORS_APPLESMC is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_ADVANTECH_WDT is not set
+# CONFIG_ALIM1535_WDT is not set
+# CONFIG_ALIM7101_WDT is not set
+# CONFIG_SC520_WDT is not set
+# CONFIG_EUROTECH_WDT is not set
+# CONFIG_IB700_WDT is not set
+# CONFIG_IBMASR is not set
+# CONFIG_WAFER_WDT is not set
+# CONFIG_I6300ESB_WDT is not set
+# CONFIG_ITCO_WDT is not set
+# CONFIG_SC1200_WDT is not set
+# CONFIG_PC87413_WDT is not set
+# CONFIG_60XX_WDT is not set
+# CONFIG_SBC8360_WDT is not set
+# CONFIG_CPU5_WDT is not set
+# CONFIG_SMSC37B787_WDT 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_MACHZ_WDT is not set
+# CONFIG_SBC_EPX_C3_WATCHDOG is not set
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+CONFIG_SSB=m
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+# CONFIG_SSB_DEBUG is not set
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+# CONFIG_FB_VESA is not set
+# CONFIG_FB_EFI is not set
+# CONFIG_FB_HECUBA is not set
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_I810 is not set
+# CONFIG_FB_LE80578 is not set
+# CONFIG_FB_INTEL is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_VT8623 is not set
+# CONFIG_FB_CYBLA is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+CONFIG_FB_GEODE=y
+CONFIG_FB_GEODE_LX=y
+# CONFIG_FB_GEODE_GX is not set
+# CONFIG_FB_GEODE_GX1 is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_RTCTIMER=m
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_VERBOSE_PROCFS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_MTS64 is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_PORTMAN2X4 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_CS5530 is not set
+CONFIG_SND_CS5535AUDIO=m
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ 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_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR 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_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+CONFIG_SND_AC97_POWER_SAVE=y
+CONFIG_SND_AC97_POWER_SAVE_DEFAULT=1
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_USX2Y is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+CONFIG_HIDRAW=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+# CONFIG_NEW_LEDS is not set
+# CONFIG_INFINIBAND is not set
+# CONFIG_EDAC is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+# CONFIG_RTC_INTF_PROC is not set
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_CMOS=y
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_VIRTUALIZATION is not set
+
+#
+# Userspace I/O
+#
+# CONFIG_UIO is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+# CONFIG_DMIID is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+# CONFIG_EXT2_FS_POSIX_ACL is not set
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_BIND34=y
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+CONFIG_CIFS_EXPERIMENTAL=y
+# CONFIG_NCP_FS is not set
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf-8"
+CONFIG_NLS_CODEPAGE_437=m
+# 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=m
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=m
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+# CONFIG_PROFILING is not set
+# CONFIG_KPROBES is not set
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_PRINTK_TIME=y
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_FRAME_POINTER is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+CONFIG_EARLY_PRINTK=y
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_DEBUG_RODATA is not set
+CONFIG_4KSTACKS=y
+CONFIG_DOUBLEFAULT=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ABLKCIPHER=m
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+# CONFIG_CRYPTO_XTS is not set
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_TWOFISH_586=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_AES_586=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_CRYPTO_DEV_PADLOCK is not set
+CONFIG_CRYPTO_DEV_GEODE=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/prelink/prelink-20060712/.mtn2git_empty b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/prelink/prelink-20060712/.mtn2git_empty
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0001-cm-x270-match-type.patch b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0001-cm-x270-match-type.patch
new file mode 100644
index 0000000000..0124b75e4b
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0001-cm-x270-match-type.patch
@@ -0,0 +1,25 @@
+From 2a3b2dd055b235eb14f7654eeef217222cdb8e00 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 18:58:27 -0400
+Subject: [PATCH] cm-x270-match-type
+
+---
+ arch/arm/boot/compressed/head-xscale.S | 5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/boot/compressed/head-xscale.S b/arch/arm/boot/compressed/head-xscale.S
+index 67ea99e..2e63ba2 100644
+--- a/arch/arm/boot/compressed/head-xscale.S
++++ b/arch/arm/boot/compressed/head-xscale.S
+@@ -44,3 +44,8 @@ __XScale_start:
+ str r1, [r0, #0x18]
+ #endif
+
++#if defined(CONFIG_MACH_ARMCORE)
++ mov r7, #(MACH_TYPE_ARMCORE & 0xFF00)
++ add r7, r7, #(MACH_TYPE_ARMCORE & 0xFF)
++#endif
++
+--
+1.5.2.5
+
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0002-ramdisk_load.patch b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0002-ramdisk_load.patch
new file mode 100644
index 0000000000..74451c4454
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0002-ramdisk_load.patch
@@ -0,0 +1,81 @@
+From 7d874d6bb1c1210402938a21ab51a4b64e2d68e5 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 19:01:50 -0400
+Subject: [PATCH] ramdisk_load
+
+---
+ arch/arm/mach-pxa/cm-x270.c | 6 ++++++
+ include/asm-arm/arch-pxa/cm-x270.h | 4 ++++
+ init/initramfs.c | 16 ++++++++++++++++
+ 3 files changed, 26 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c
+index 177664c..fb607e9 100644
+--- a/arch/arm/mach-pxa/cm-x270.c
++++ b/arch/arm/mach-pxa/cm-x270.c
+@@ -239,6 +239,12 @@ static struct map_desc cmx270_io_desc[] __initdata = {
+ .length = SZ_64M,
+ .type = MT_DEVICE
+ },
++ [2] = { /* NOR flash */
++ .virtual = CMX270_FLASH_VIRT,
++ .pfn = __phys_to_pfn(PXA_CS0_PHYS),
++ .length = (8<<20), /* up to 8 MByte flash */
++ .type = MT_DEVICE
++ },
+ };
+
+ /*
+diff --git a/include/asm-arm/arch-pxa/cm-x270.h b/include/asm-arm/arch-pxa/cm-x270.h
+index f8fac9e..70e0dce 100644
+--- a/include/asm-arm/arch-pxa/cm-x270.h
++++ b/include/asm-arm/arch-pxa/cm-x270.h
+@@ -20,6 +20,10 @@
+ #define CMX270_VIRT_BASE (0xe8000000)
+ #define CMX270_IT8152_VIRT (CMX270_VIRT_BASE)
+ #define CMX270_IDE104_VIRT (CMX270_IT8152_VIRT + SZ_64M)
++#define CMX270_FLASH_VIRT (CMX270_IDE104_VIRT + SZ_64M)
++
++#define CMX270_FLASH_RAMDISK_VIRT (CMX270_FLASH_VIRT + 0x1c0000)
++
+
+ /* GPIO related definitions */
+ #define GPIO_IT8152_IRQ (22)
+diff --git a/init/initramfs.c b/init/initramfs.c
+index 1db02a0..d875fbc 100644
+--- a/init/initramfs.c
++++ b/init/initramfs.c
+@@ -7,6 +7,9 @@
+ #include <linux/string.h>
+ #include <linux/syscalls.h>
+
++// HACK for compulab cm-x270
++#include <asm/arch/cm-x270.h>
++
+ static __initdata char *message;
+ static void __init error(char *x)
+ {
+@@ -550,7 +553,20 @@ static int __init populate_rootfs(void)
+ #ifdef CONFIG_BLK_DEV_INITRD
+ if (initrd_start) {
+ #ifdef CONFIG_BLK_DEV_RAM
++
++ /* hack to make initramfs work because the
++ * compulab BL does not zero out the
++ * initrd memory. This only seems to affect loading
++ * initramfs (cpio.gz) archives. Does not seem to
++ * affect ramdisks.
++ */
++ int initrd_size = *(int *)(CMX270_FLASH_RAMDISK_VIRT);
+ int fd;
++
++ initrd_end = initrd_start + initrd_size;
++ //printk("CLIFF: initrd_start = 0x%x\n", initrd_start);
++ //printk("CLIFF: initrd_end = 0x%x\n", initrd_end);
++
+ printk(KERN_INFO "checking if image is initramfs...");
+ err = unpack_to_rootfs((char *)initrd_start,
+ initrd_end - initrd_start, 1);
+--
+1.5.2.5
+
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0003-mmcsd_large_cards-r0.patch b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0003-mmcsd_large_cards-r0.patch
new file mode 100644
index 0000000000..1fe3eb5d0a
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0003-mmcsd_large_cards-r0.patch
@@ -0,0 +1,36 @@
+From caad105a5732f7ca8ea88d4448aa5d9f4d7eb2c4 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 19:02:55 -0400
+Subject: [PATCH] mmcsd_large_cards-r0
+
+---
+ drivers/mmc/card/block.c | 6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
+index aeb32a9..d854b0c 100644
+--- a/drivers/mmc/card/block.c
++++ b/drivers/mmc/card/block.c
+@@ -423,6 +423,7 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
+ {
+ struct mmc_blk_data *md;
+ int devidx, ret;
++ unsigned long cap;
+
+ devidx = find_first_zero_bit(dev_use, MMC_NUM_MINORS);
+ if (devidx >= MMC_NUM_MINORS)
+@@ -486,6 +487,11 @@ static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card)
+
+ sprintf(md->disk->disk_name, "mmcblk%d", devidx);
+
++ if (card->csd.read_blkbits > 9)
++ md->block_bits = 9;
++ else
++ md->block_bits = card->csd.read_blkbits;
++
+ blk_queue_hardsect_size(md->queue.queue, 1 << md->block_bits);
+
+ if (!mmc_card_sd(card) && mmc_card_blockaddr(card)) {
+--
+1.5.2.5
+
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0004-cm-x270-nand-simplify-name.patch b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0004-cm-x270-nand-simplify-name.patch
new file mode 100644
index 0000000000..f060a963a4
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0004-cm-x270-nand-simplify-name.patch
@@ -0,0 +1,25 @@
+From deb5c78d6625c6fd5ce25ac3c8ac396e7e61ebf7 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.dev.bec-systems.com>
+Date: Fri, 20 Jul 2007 19:04:12 -0400
+Subject: [PATCH] cm-x270-nand-simplify-name
+
+---
+ drivers/mtd/nand/cmx270_nand.c | 2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/mtd/nand/cmx270_nand.c b/drivers/mtd/nand/cmx270_nand.c
+index cb663ef..3654ce4 100644
+--- a/drivers/mtd/nand/cmx270_nand.c
++++ b/drivers/mtd/nand/cmx270_nand.c
+@@ -191,6 +191,8 @@ static int cmx270_init(void)
+ cmx270_nand_mtd->owner = THIS_MODULE;
+ cmx270_nand_mtd->priv = this;
+
++ cmx270_nand_mtd->name = "cm-x270-nand";
++
+ /* insert callbacks */
+ this->IO_ADDR_R = cmx270_nand_io;
+ this->IO_ADDR_W = cmx270_nand_io;
+--
+1.5.2.5
+
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0005-cmx270-pci.patch b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0005-cmx270-pci.patch
new file mode 100644
index 0000000000..8a6b5dfc91
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/0005-cmx270-pci.patch
@@ -0,0 +1,150 @@
+From 416e9cca1903f4a6f26c241c3393ad635015e7f6 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.(none)>
+Date: Sat, 15 Dec 2007 12:24:05 -0500
+Subject: [PATCH] cmx270-pci
+
+---
+ arch/arm/Kconfig | 8 +++++++-
+ arch/arm/common/it8152.c | 10 ++--------
+ arch/arm/mach-pxa/cm-x270-pci.c | 18 ++++++++----------
+ 3 files changed, 17 insertions(+), 19 deletions(-)
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index a7e9fea..c4de2d4 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -537,7 +537,7 @@ config ISA_DMA_API
+ bool
+
+ config PCI
+- bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695
++ bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || ARCH_IXP4XX || ARCH_KS8695 || MACH_ARMCORE
+ help
+ Find out whether you have a PCI motherboard. PCI is the name of a
+ bus system, i.e. the way the CPU talks to the other stuff inside
+@@ -558,6 +558,12 @@ config PCI_HOST_VIA82C505
+ depends on PCI && ARCH_SHARK
+ default y
+
++config PCI_HOST_ITE8152
++ bool
++ depends on PCI && MACH_ARMCORE
++ default y
++ select DMABOUNCE
++
+ source "drivers/pci/Kconfig"
+
+ source "drivers/pcmcia/Kconfig"
+diff --git a/arch/arm/common/it8152.c b/arch/arm/common/it8152.c
+index c03de9b..97b7dc1 100644
+--- a/arch/arm/common/it8152.c
++++ b/arch/arm/common/it8152.c
+@@ -70,8 +70,6 @@ static inline void it8152_irq(int irq)
+ {
+ struct irq_desc *desc;
+
+- printk(KERN_DEBUG "===> %s: irq=%d\n", __FUNCTION__, irq);
+-
+ desc = irq_desc + irq;
+ desc_handle_irq(irq, desc);
+ }
+@@ -106,8 +104,6 @@ void it8152_irq_demux(unsigned int irq, struct irq_desc *desc)
+ int bits_pd, bits_lp, bits_ld;
+ int i;
+
+- printk(KERN_DEBUG "=> %s: irq = %d\n", __FUNCTION__, irq);
+-
+ while (1) {
+ /* Read all */
+ bits_pd = __raw_readl(IT8152_INTC_PDCNIRR);
+@@ -293,8 +289,7 @@ int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size)
+ */
+ int pci_set_dma_mask(struct pci_dev *dev, u64 mask)
+ {
+- printk(KERN_DEBUG "%s: %s %llx\n",
+- __FUNCTION__, dev->dev.bus_id, mask);
++ dev_dbg(&dev->dev, "%s: %llx\n", __FUNCTION__, mask);
+ if (mask >= PHYS_OFFSET + SZ_64M - 1)
+ return 0;
+
+@@ -304,8 +299,7 @@ int pci_set_dma_mask(struct pci_dev *dev, u64 mask)
+ int
+ pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
+ {
+- printk(KERN_DEBUG "%s: %s %llx\n",
+- __FUNCTION__, dev->dev.bus_id, mask);
++ dev_dbg(&dev->dev, "%s: %llx\n", __FUNCTION__, mask);
+ if (mask >= PHYS_OFFSET + SZ_64M - 1)
+ return 0;
+
+diff --git a/arch/arm/mach-pxa/cm-x270-pci.c b/arch/arm/mach-pxa/cm-x270-pci.c
+index 878d3b9..15c4e0d 100644
+--- a/arch/arm/mach-pxa/cm-x270-pci.c
++++ b/arch/arm/mach-pxa/cm-x270-pci.c
+@@ -40,7 +40,7 @@ void __init cmx270_pci_adjust_zones(int node, unsigned long *zone_size,
+ {
+ unsigned int sz = SZ_64M >> PAGE_SHIFT;
+
+- printk(KERN_INFO "Adjusting zones for CM-x270\n");
++ pr_info("Adjusting zones for CM-x270\n");
+
+ /*
+ * Only adjust if > 64M on current system
+@@ -104,8 +104,7 @@ static int __init cmx270_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ int irq;
+
+- printk(KERN_DEBUG "===> %s: %s slot=%x, pin=%x\n", __FUNCTION__,
+- pci_name(dev), slot, pin);
++ dev_dbg(&dev->dev, "%s: slot=%x, pin=%x\n", __FUNCTION__, slot, pin);
+
+ irq = it8152_pci_map_irq(dev, slot, pin);
+ if (irq)
+@@ -141,14 +140,13 @@ static int __init cmx270_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ return(0);
+ }
+
+-static struct pci_bus * __init
+-cmx270_pci_scan_bus(int nr, struct pci_sys_data *sys)
++static void cmx270_pci_preinit(void)
+ {
+- printk(KERN_INFO "Initializing CM-X270 PCI subsystem\n");
++ pr_info("Initializing CM-X270 PCI subsystem\n");
+
+ __raw_writel(0x800, IT8152_PCI_CFG_ADDR);
+ if (__raw_readl(IT8152_PCI_CFG_DATA) == 0x81521283) {
+- printk(KERN_INFO "PCI Bridge found.\n");
++ pr_info("PCI Bridge found.\n");
+
+ /* set PCI I/O base at 0 */
+ writel(0x848, IT8152_PCI_CFG_ADDR);
+@@ -163,7 +161,7 @@ cmx270_pci_scan_bus(int nr, struct pci_sys_data *sys)
+ /* CardBus Controller on ATXbase baseboard */
+ writel(0x4000, IT8152_PCI_CFG_ADDR);
+ if (readl(IT8152_PCI_CFG_DATA) == 0xAC51104C) {
+- printk(KERN_INFO "CardBus Bridge found.\n");
++ pr_info("CardBus Bridge found.\n");
+
+ /* Configure socket 0 */
+ writel(0x408C, IT8152_PCI_CFG_ADDR);
+@@ -196,7 +194,6 @@ cmx270_pci_scan_bus(int nr, struct pci_sys_data *sys)
+ writel(0xb0000000, IT8152_PCI_CFG_DATA);
+ }
+ }
+- return it8152_pci_scan_bus(nr, sys);
+ }
+
+ static struct hw_pci cmx270_pci __initdata = {
+@@ -204,7 +201,8 @@ static struct hw_pci cmx270_pci __initdata = {
+ .map_irq = cmx270_pci_map_irq,
+ .nr_controllers = 1,
+ .setup = it8152_pci_setup,
+- .scan = cmx270_pci_scan_bus,
++ .scan = it8152_pci_scan_bus,
++ .preinit = cmx270_pci_preinit,
+ };
+
+ static int __init cmx270_init_pci(void)
+--
+1.5.2.5
+
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/defconfig b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/defconfig
new file mode 100644
index 0000000000..57a98014b3
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/cm-x270/defconfig
@@ -0,0 +1,1258 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc5
+# Tue Dec 18 12:02:51 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-cm-x270"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+CONFIG_MACH_ARMCORE=y
+CONFIG_PXA27x=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI is not set
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+# CONFIG_NO_HZ is not set
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS1,38400 monitor=8 bpp=16 mem=64M mtdparts=physmap-flash.0:256k(boot)ro,0x180000(kernel),-(root);cm-x270-nand:64m(app),-(data) rdinit=/sbin/init root=mtd3 rootfstype=jffs2"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+CONFIG_CFG80211=m
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+CONFIG_MAC80211_RCSIMPLE=y
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+# CONFIG_IEEE80211_SOFTMAC is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x400000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+CONFIG_MTD_NAND_CM_X270=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+CONFIG_DM9000=y
+# CONFIG_SMC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_LIBERTAS=m
+# CONFIG_LIBERTAS_USB is not set
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_RTL8187 is not set
+# CONFIG_P54_COMMON is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_B43 is not set
+# CONFIG_B43LEGACY is not set
+# CONFIG_RT2X00 is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_PS2_ALPS is not set
+# CONFIG_MOUSE_PS2_LOGIPS2PP is not set
+# CONFIG_MOUSE_PS2_SYNAPTICS is not set
+# CONFIG_MOUSE_PS2_LIFEBOOK is not set
+# CONFIG_MOUSE_PS2_TRACKPOINT is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_UCB1400=m
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=m
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_AD7418 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_ADT7470 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 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_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG=y
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+CONFIG_LEDS_CM_X270=y
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS is not set
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/python/python-formencode/.mtn2git_empty b/packages/linux/linux-2.6.23+2.6.24-rc5/gesbc-9302/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/python/python-formencode/.mtn2git_empty
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/gesbc-9302/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc5/gesbc-9302/0001-gesbc-nand.patch b/packages/linux/linux-2.6.23+2.6.24-rc5/gesbc-9302/0001-gesbc-nand.patch
new file mode 100644
index 0000000000..0f5e909148
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/gesbc-9302/0001-gesbc-nand.patch
@@ -0,0 +1,306 @@
+From 9819226a16a12ba0545e90b475fa70d408544971 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.(none)>
+Date: Mon, 17 Dec 2007 16:45:47 -0500
+Subject: [PATCH] gesbc-nand
+
+---
+ drivers/mtd/nand/Kconfig | 7 ++
+ drivers/mtd/nand/Makefile | 1 +
+ drivers/mtd/nand/gesbc.c | 255 +++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 263 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/mtd/nand/gesbc.c
+
+diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
+index 246d451..cde3146 100644
+--- a/drivers/mtd/nand/Kconfig
++++ b/drivers/mtd/nand/Kconfig
+@@ -51,6 +51,13 @@ config MTD_NAND_EDB7312
+ This enables the driver for the Cirrus Logic EBD7312 evaluation
+ board to access the onboard NAND Flash.
+
++config MTD_NAND_GESBC
++ tristate "Support for Glomation GESBC-93xx board"
++ depends on MTD_NAND && MACH_EDB9302
++ help
++ This enables the driver for the Glomation GESBC-93xx
++ board to access the onboard NAND Flash.
++
+ config MTD_NAND_H1900
+ tristate "iPAQ H1900 flash"
+ depends on ARCH_PXA && MTD_PARTITIONS
+diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
+index 3ad6c01..58c1961 100644
+--- a/drivers/mtd/nand/Makefile
++++ b/drivers/mtd/nand/Makefile
+@@ -12,6 +12,7 @@ obj-$(CONFIG_MTD_NAND_AMS_DELTA) += ams-delta.o
+ obj-$(CONFIG_MTD_NAND_TOTO) += toto.o
+ obj-$(CONFIG_MTD_NAND_AUTCPU12) += autcpu12.o
+ obj-$(CONFIG_MTD_NAND_EDB7312) += edb7312.o
++obj-$(CONFIG_MTD_NAND_GESBC) += gesbc.o
+ obj-$(CONFIG_MTD_NAND_AU1550) += au1550nd.o
+ obj-$(CONFIG_MTD_NAND_BF5XX) += bf5xx_nand.o
+ obj-$(CONFIG_MTD_NAND_PPCHAMELEONEVB) += ppchameleonevb.o
+diff --git a/drivers/mtd/nand/gesbc.c b/drivers/mtd/nand/gesbc.c
+new file mode 100644
+index 0000000..a5844b1
+--- /dev/null
++++ b/drivers/mtd/nand/gesbc.c
+@@ -0,0 +1,255 @@
++/*
++ * drivers/mtd/nand/gesbc-9302.c
++ *
++ * Copyright (C) 2004 Glomation (support@glomationinc.com)
++ *
++ * Derived from drivers/mtd/nand/edb7312.c
++ * Copyright (C) 2004 Marius Grer (mag@sysgo.de)
++ *
++ * Derived from drivers/mtd/nand/autcpu12.c
++ * Copyright (c) 2001 Thomas Gleixner (gleixner@autronix.de)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Overview:
++ * This is a device driver for the NAND flash device found on the
++ * GESBC-93xx board with Samsung 128/256/512 Mbyte part.
++ */
++
++#include <linux/slab.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/nand.h>
++#include <linux/mtd/partitions.h>
++#include <asm/io.h>
++#include <asm/arch/hardware.h>
++#include <asm/sizes.h>
++
++#define GESBC_NAND_FLASH_DATA 0x10000000
++
++#define GPIO_PADR EP93XX_GPIO_REG(0x0)
++#define GPIO_PADDR EP93XX_GPIO_REG(0x10)
++#define SMCBCR1 (EP93XX_AHB_VIRT_BASE + 0x00082000 + 0x04)
++
++/*
++ * MTD structure for GESBC-93xx board
++ */
++static struct mtd_info *gesbc_mtd = NULL;
++
++
++/*
++ * Module stuff
++ */
++static unsigned long gesbc_fio_pbase = GESBC_NAND_FLASH_DATA;
++
++#ifdef CONFIG_MTD_PARTITIONS
++/*
++ * Define static partitions for flash device
++ */
++static struct mtd_partition partition_info32[] = {
++ { .name= "GESBC NAND FLASH",
++ .offset= 0,
++ .size= 128*1024*1024 },
++};
++/*
++ * Define static partitions for flash device
++ */
++static struct mtd_partition partition_info128[] = {
++ { .name= "GESBC NAND FLASH",
++ .offset= 0,
++ .size= 128*1024*1024 },
++};
++
++/*
++ * Define static partitions for flash device
++ */
++static struct mtd_partition partition_info256[] = {
++ { .name= "GESBC NAND FLASH",
++ .offset= 0,
++ .size= 256*1024*1024 },
++};
++
++/*
++ * Define static partitions for flash device
++ */
++static struct mtd_partition partition_info512[] = {
++ { .name= "GESBC NAND FLASH",
++ .offset= 0,
++ .size= 512*1024*1024 },
++};
++
++#define NUM_PARTITIONS 1
++#endif
++
++
++/*
++ * hardware specific access to control-lines
++ * NAND_NCE: bit 0 -> bit 3
++ * NAND_CLE: bit 1 -> bit 4
++ * NAND_ALE: bit 2 -> bit 6
++ */
++static void gesbc_hwcontrol(struct mtd_info *mtd, int cmd, int ctrl)
++{
++ unsigned long flags;
++ struct nand_chip *chip = mtd->priv;
++
++ /* Disbale interrupt to avoid race condition */
++ local_irq_save(flags);
++
++ if (ctrl & NAND_CTRL_CHANGE) {
++ unsigned char bits;
++
++ bits = (ctrl & NAND_CLE) << 3;
++ bits |= (ctrl & NAND_ALE) << 4;
++ if (ctrl & NAND_NCE)
++ bits &= ~0x08;
++ else
++ bits |= 0x08;
++
++ __raw_writel( (__raw_readl(GPIO_PADR) & ~0x58 )| bits, GPIO_PADR);
++ }
++ if (cmd != NAND_CMD_NONE)
++ writeb(cmd, chip->IO_ADDR_W);
++ /* Restore interrupt state */
++ local_irq_restore(flags);
++}
++
++/*
++ * read device ready pin
++ */
++static int gesbc_device_ready(struct mtd_info *mtd)
++{
++ return (__raw_readl(GPIO_PADR) & 0x80) >> 7;
++}
++
++#define MTDID "s3c2440-nand"
++
++static const char *probes[] = { "cmdlinepart", NULL };
++
++
++
++/*
++ * Main initialization routine
++ */
++static int __init gesbc_nand_init (void)
++{
++ struct nand_chip *this;
++ const char *part_type = 0;
++ int mtd_parts_nb = 0;
++ struct mtd_partition *mtd_parts = 0;
++ unsigned long flags;
++ void * gesbc_fio_base;
++
++ /* Allocate memory for MTD device structure and private data */
++ gesbc_mtd = kmalloc(sizeof(struct mtd_info) +
++ sizeof(struct nand_chip),
++ GFP_KERNEL);
++ if (!gesbc_mtd) {
++ printk("Unable to allocate GESBC NAND MTD device structure.\n");
++ return -ENOMEM;
++ }
++
++ /* map physical adress */
++ gesbc_fio_base = ioremap(gesbc_fio_pbase, SZ_1K);
++ if(!gesbc_fio_base) {
++ printk("ioremap GESBC-93xx NAND flash failed\n");
++ kfree(gesbc_mtd);
++ return -EIO;
++ }
++
++
++ /* Get pointer to private data */
++ this = (struct nand_chip *) (&gesbc_mtd[1]);
++
++ /* Initialize structures */
++ memset((char *) gesbc_mtd, 0, sizeof(struct mtd_info));
++ memset((char *) this, 0, sizeof(struct nand_chip));
++
++ /* Link the private data with the MTD structure */
++ gesbc_mtd->priv = this;
++
++ /* Disbale interrupt to avoid race condition */
++ local_irq_save(flags);
++
++ /*
++ * Set GPIO Port A control register so that the pins are configured
++ * to be outputs for controlling the NAND flash.
++ */
++ __raw_writel((__raw_readl(GPIO_PADDR) | 0x58) & ~0x80, GPIO_PADDR);
++ /* Clear NCE, clear CLE, clear ALE */
++ __raw_writel( (__raw_readl(GPIO_PADR) | 0x08 ) & ~0x50, GPIO_PADR);
++ /* Set SRAM controller to 32 bit (8 bit just doesn't work, don't know why) bus width and 7 CLK wait state */
++ __raw_writel(0x10003ce0, SMCBCR1);
++ local_irq_restore(flags);
++
++
++ /* insert callbacks */
++ this->IO_ADDR_R = (void *) gesbc_fio_base;
++ this->IO_ADDR_W = (void *) gesbc_fio_base;
++ this->cmd_ctrl = (void *) gesbc_hwcontrol;
++ this->dev_ready = gesbc_device_ready;
++ this->chip_delay = 25;
++ this->ecc.mode = NAND_ECC_SOFT;
++
++ __raw_writel(0xffffffff, gesbc_fio_base);
++ printk("Searching for NAND flash...\n");
++ /* Scan to find existence of the device */
++ if (nand_scan (gesbc_mtd, 1)) {
++ iounmap((void *)gesbc_fio_base);
++ kfree (gesbc_mtd);
++ return -ENXIO;
++ }
++
++#ifdef CONFIG_MTD_CMDLINE_PARTS
++ gesbc_mtd->name="GESBC-NAND";
++ mtd_parts_nb = parse_mtd_partitions(gesbc_mtd, probes, &mtd_parts, 0);
++ if (mtd_parts_nb > 0)
++ part_type = "command line";
++ else
++ mtd_parts_nb = 0;
++#endif
++
++ if (mtd_parts_nb == 0)
++ {
++ mtd_parts_nb = NUM_PARTITIONS;
++ mtd_parts = partition_info32;
++ if (gesbc_mtd->size >= (128 * 0x100000))
++ mtd_parts = partition_info128;
++ if (gesbc_mtd->size >= (256 * 0x100000))
++ mtd_parts = partition_info256;
++ if (gesbc_mtd->size >= (512 * 0x100000))
++ mtd_parts = partition_info512;
++ part_type = "static";
++ }
++
++ /* Register the partitions */
++ printk(KERN_NOTICE "Using %s partition definition\n", part_type);
++ add_mtd_partitions(gesbc_mtd, mtd_parts, mtd_parts_nb);
++
++ /* Return happy */
++ return 0;
++}
++module_init(gesbc_nand_init);
++
++/*
++ * Clean up routine
++ */
++static void __exit gesbc_nand_cleanup (void)
++{
++/* struct nand_chip *this = (struct nand_chip *) &gesbc_mtd[1]; */
++
++ /* Unregister the device */
++ del_mtd_device (gesbc_mtd);
++
++ /* Free the MTD device structure */
++ kfree (gesbc_mtd);
++}
++module_exit(gesbc_nand_cleanup);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("zql@glomationinc.com");
++MODULE_DESCRIPTION("MTD map driver for Glomation GESBC-93xx board");
++
+--
+1.5.2.5
+
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc5/gesbc-9302/defconfig b/packages/linux/linux-2.6.23+2.6.24-rc5/gesbc-9302/defconfig
new file mode 100644
index 0000000000..e45c86e160
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc5/gesbc-9302/defconfig
@@ -0,0 +1,1125 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc5
+# Mon Dec 17 17:01:48 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+# CONFIG_GENERIC_GPIO is not set
+# CONFIG_GENERIC_TIME is not set
+# CONFIG_GENERIC_CLOCKEVENTS is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+# CONFIG_FAIR_GROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+CONFIG_ARCH_EP93XX=y
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Cirrus EP93xx Implementation Options
+#
+CONFIG_CRUNCH=y
+
+#
+# EP93xx Platforms
+#
+# CONFIG_MACH_ADSSPHERE is not set
+CONFIG_MACH_EDB9302=y
+# CONFIG_MACH_EDB9302A is not set
+# CONFIG_MACH_EDB9307 is not set
+# CONFIG_MACH_EDB9312 is not set
+# CONFIG_MACH_EDB9315 is not set
+# CONFIG_MACH_EDB9315A is not set
+# CONFIG_MACH_GESBC9312 is not set
+# CONFIG_MACH_MICRO9 is not set
+# CONFIG_MACH_MICRO9H is not set
+# CONFIG_MACH_MICRO9M is not set
+# CONFIG_MACH_MICRO9L is not set
+# CONFIG_MACH_TS72XX is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_ARM_VIC=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyAM0 root=/dev/ram"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+CONFIG_FPE_NWFPE_XP=y
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_GEOMETRY is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=1
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_GESBC=y
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=12288
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_EP93XX_ETH=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_AMBA_PL010=y
+CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
+# CONFIG_SERIAL_AMBA_PL011 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_SENSORS_DS1337=y
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+CONFIG_I2C_DEBUG_CORE=y
+CONFIG_I2C_DEBUG_ALGO=y
+CONFIG_I2C_DEBUG_BUS=y
+CONFIG_I2C_DEBUG_CHIP=y
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_AD7418 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_ADT7470 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 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_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_EP93XX_WATCHDOG=y
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+CONFIG_USB_DEBUG=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+CONFIG_USB_DYNAMIC_MINORS=y
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+# CONFIG_NEW_LEDS is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_EP93XX=y
+# CONFIG_RTC_DRV_PL031 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=y
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+CONFIG_DEBUG_SLAB=y
+# CONFIG_DEBUG_SLAB_LEAK is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+CONFIG_DEBUG_SPINLOCK=y
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/qemu/files/.mtn2git_empty b/packages/linux/linux-2.6.23+2.6.24-rc6/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qemu/files/.mtn2git_empty
+++ b/packages/linux/linux-2.6.23+2.6.24-rc6/.mtn2git_empty
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty b/packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qemu/qemu-0.9.0+cvs20070701/.mtn2git_empty
+++ b/packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/0001-2.6.23-at91.patch b/packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/0001-2.6.23-at91.patch
new file mode 100644
index 0000000000..3ea8176a10
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/0001-2.6.23-at91.patch
@@ -0,0 +1,16686 @@
+From 2407b971cc3fa6f316e1b5f61e003d7aec6b8917 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.(none)>
+Date: Fri, 21 Dec 2007 17:36:05 -0500
+Subject: [PATCH] 2.6.23-at91
+
+---
+ arch/arm/Kconfig | 1 +
+ arch/arm/boot/compressed/head-at91rm9200.S | 24 +
+ arch/arm/configs/at91rm9200dk_defconfig | 4 +-
+ arch/arm/configs/at91rm9200ek_defconfig | 4 +-
+ arch/arm/configs/at91sam9260ek_defconfig | 139 ++-
+ arch/arm/configs/at91sam9261ek_defconfig | 114 ++-
+ arch/arm/configs/at91sam9263ek_defconfig | 60 +-
+ arch/arm/configs/ateb9200_defconfig | 2 +-
+ arch/arm/configs/cam60_defconfig | 954 +++++++++++++++++
+ arch/arm/configs/csb337_defconfig | 4 +-
+ arch/arm/configs/csb637_defconfig | 4 +-
+ arch/arm/configs/ecbat91_defconfig | 1315 ++++++++++++++++++++++++
+ arch/arm/configs/homematic_defconfig | 1263 +++++++++++++++++++++++
+ arch/arm/configs/kafa_defconfig | 4 +-
+ arch/arm/configs/kb9202_defconfig | 799 ++++++++++++---
+ arch/arm/configs/picotux200_defconfig | 4 +-
+ arch/arm/configs/sam9_l9260_defconfig | 1098 ++++++++++++++++++++
+ arch/arm/mach-at91/Kconfig | 86 ++-
+ arch/arm/mach-at91/Makefile | 12 +-
+ arch/arm/mach-at91/at91rm9200.c | 60 +-
+ arch/arm/mach-at91/at91rm9200_devices.c | 58 +-
+ arch/arm/mach-at91/at91sam9260.c | 58 +-
+ arch/arm/mach-at91/at91sam9260_devices.c | 74 ++
+ arch/arm/mach-at91/at91sam9261.c | 53 +-
+ arch/arm/mach-at91/at91sam9261_devices.c | 86 ++
+ arch/arm/mach-at91/at91sam9263.c | 55 +-
+ arch/arm/mach-at91/at91sam9263_devices.c | 124 +++
+ arch/arm/mach-at91/at91sam9rl.c | 25 +
+ arch/arm/mach-at91/at91sam9rl_devices.c | 74 ++
+ arch/arm/mach-at91/board-cam60.c | 148 +++
+ arch/arm/mach-at91/board-chub.c | 132 +++
+ arch/arm/mach-at91/board-csb337.c | 58 +
+ arch/arm/mach-at91/board-dk.c | 193 ++++-
+ arch/arm/mach-at91/board-ecbat91.c | 183 ++++
+ arch/arm/mach-at91/board-ek.c | 210 ++++-
+ arch/arm/mach-at91/board-homematic.c | 163 +++
+ arch/arm/mach-at91/board-kb9202.c | 46 +
+ arch/arm/mach-at91/board-sam9-l9260.c | 200 ++++
+ arch/arm/mach-at91/board-sam9261ek.c | 77 ++-
+ arch/arm/mach-at91/board-sam9263ek.c | 52 +
+ arch/arm/mach-at91/board-tms.c | 198 ++++
+ arch/arm/mach-at91/clock.c | 18 +
+ arch/arm/mach-at91/generic.h | 1 +
+ arch/arm/mach-at91/gpio.c | 62 ++
+ arch/arm/mach-at91/ics1523.c | 207 ++++
+ arch/arm/mach-at91/pm.c | 42 +-
+ arch/arm/mach-at91/pm_slowclock.S | 172 +++
+ arch/arm/mach-at91/tclib.c | 17 +
+ arch/arm/mach-at91/tclib.h | 11 +
+ arch/arm/mach-ks8695/Makefile | 6 +-
+ arch/arm/mach-ks8695/board-micrel.c | 2 +-
+ arch/arm/mach-ks8695/devices.c | 21 +
+ arch/arm/mach-ks8695/gpio.c | 83 ++
+ arch/arm/mach-ks8695/leds.c | 94 ++
+ arch/arm/mach-ks8695/pci.c | 324 ++++++
+ arch/arm/tools/mach-types | 200 ++++-
+ drivers/char/Kconfig | 16 +
+ drivers/char/Makefile | 2 +
+ drivers/char/at91_spi.c | 336 ++++++
+ drivers/char/at91_spidev.c | 233 +++++
+ drivers/char/watchdog/at91sam9_wdt.c | 258 +++++
+ drivers/i2c/busses/Kconfig | 16 +
+ drivers/i2c/busses/Makefile | 1 +
+ drivers/i2c/busses/i2c-at91.c | 18 +-
+ drivers/i2c/busses/i2c-pca.c | 213 ++++
+ drivers/mtd/devices/Kconfig | 14 +-
+ drivers/mtd/devices/Makefile | 1 +
+ drivers/mtd/devices/at91_dataflash.c | 673 ++++++++++++
+ drivers/mtd/devices/mtd_dataflash.c | 2 +-
+ drivers/net/arm/at91_ether.c | 21 +-
+ drivers/rtc/Kconfig | 6 +
+ drivers/rtc/Makefile | 1 +
+ drivers/rtc/rtc-at91sam9.c | 437 ++++++++
+ drivers/serial/atmel_serial.c | 294 ++++++-
+ drivers/spi/Kconfig | 9 +
+ drivers/spi/Makefile | 1 +
+ drivers/spi/spi_at91_bitbang.c | 207 ++++
+ drivers/usb/gadget/at91_udc.c | 2 +-
+ drivers/usb/host/ohci-at91.c | 2 +-
+ drivers/video/Kconfig | 13 +-
+ drivers/video/Makefile | 3 +-
+ drivers/video/backlight/Kconfig | 8 +
+ drivers/video/backlight/Makefile | 1 +
+ drivers/video/backlight/kb920x_bl.c | 164 +++
+ drivers/video/s1d15605fb.c | 658 ++++++++++++
+ drivers/watchdog/Kconfig | 8 +
+ drivers/watchdog/Makefile | 1 +
+ include/asm-arm/arch-at91/at91_lcdc.h | 148 ---
+ include/asm-arm/arch-at91/at91_pmc.h | 4 +-
+ include/asm-arm/arch-at91/at91_twi.h | 11 +
+ include/asm-arm/arch-at91/at91sam9260_matrix.h | 2 +-
+ include/asm-arm/arch-at91/board.h | 5 +
+ include/asm-arm/arch-at91/entry-macro.S | 2 +-
+ include/asm-arm/arch-at91/ics1523.h | 154 +++
+ include/asm-arm/arch-at91/spi.h | 54 +
+ include/asm-arm/arch-ks8695/devices.h | 5 +
+ include/asm-arm/arch-ks8695/regs-gpio.h | 2 +
+ include/linux/clk.h | 20 +
+ include/linux/i2c-id.h | 1 +
+ sound/soc/at91/eti_b1_wm8731.c | 30 +-
+ 100 files changed, 13000 insertions(+), 535 deletions(-)
+ create mode 100644 arch/arm/configs/cam60_defconfig
+ create mode 100644 arch/arm/configs/ecbat91_defconfig
+ create mode 100644 arch/arm/configs/homematic_defconfig
+ create mode 100644 arch/arm/configs/sam9_l9260_defconfig
+ create mode 100644 arch/arm/mach-at91/board-cam60.c
+ create mode 100644 arch/arm/mach-at91/board-chub.c
+ create mode 100644 arch/arm/mach-at91/board-ecbat91.c
+ create mode 100644 arch/arm/mach-at91/board-homematic.c
+ create mode 100644 arch/arm/mach-at91/board-sam9-l9260.c
+ create mode 100644 arch/arm/mach-at91/board-tms.c
+ create mode 100644 arch/arm/mach-at91/ics1523.c
+ create mode 100644 arch/arm/mach-at91/pm_slowclock.S
+ create mode 100644 arch/arm/mach-at91/tclib.c
+ create mode 100644 arch/arm/mach-at91/tclib.h
+ create mode 100644 arch/arm/mach-ks8695/leds.c
+ create mode 100644 arch/arm/mach-ks8695/pci.c
+ create mode 100644 drivers/char/at91_spi.c
+ create mode 100644 drivers/char/at91_spidev.c
+ create mode 100644 drivers/char/watchdog/at91sam9_wdt.c
+ create mode 100644 drivers/i2c/busses/i2c-pca.c
+ create mode 100644 drivers/mtd/devices/at91_dataflash.c
+ create mode 100644 drivers/rtc/rtc-at91sam9.c
+ create mode 100644 drivers/spi/spi_at91_bitbang.c
+ create mode 100644 drivers/video/backlight/kb920x_bl.c
+ create mode 100644 drivers/video/s1d15605fb.c
+ delete mode 100644 include/asm-arm/arch-at91/at91_lcdc.h
+ create mode 100644 include/asm-arm/arch-at91/ics1523.h
+ create mode 100644 include/asm-arm/arch-at91/spi.h
+
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index c4de2d4..c2051fb 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -657,6 +657,7 @@ config HZ
+ default 128 if ARCH_L7200
+ default 200 if ARCH_EBSA110 || ARCH_S3C2410
+ default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER
++ default AT91_TIMER_HZ if ARCH_AT91
+ default 100
+
+ config AEABI
+diff --git a/arch/arm/boot/compressed/head-at91rm9200.S b/arch/arm/boot/compressed/head-at91rm9200.S
+index 11782cc..7748ce2 100644
+--- a/arch/arm/boot/compressed/head-at91rm9200.S
++++ b/arch/arm/boot/compressed/head-at91rm9200.S
+@@ -67,12 +67,36 @@
+ cmp r7, r3
+ beq 99f
+
++ @ emQbit ECB_AT91 : 1072
++ mov r3, #(MACH_TYPE_ECBAT91 & 0xff)
++ orr r3, r3, #(MACH_TYPE_ECBAT91 & 0xff00)
++ cmp r7, r3
++ beq 99f
++
+ @ Ajeco 1ARM : 1075
+ mov r3, #(MACH_TYPE_ONEARM & 0xff)
+ orr r3, r3, #(MACH_TYPE_ONEARM & 0xff00)
+ cmp r7, r3
+ beq 99f
+
++ @ Promwad Chub : 1181
++ mov r3, #(MACH_TYPE_CHUB & 0xff)
++ orr r3, r3, #(MACH_TYPE_CHUB & 0xff00)
++ cmp r7, r3
++ beq 99f
++
++ @ Sweda TMS-100: 1277
++ mov r3, #(MACH_TYPE_SWEDATMS & 0xff)
++ orr r3, r3, #(MACH_TYPE_SWEDATMS & 0xff00)
++ cmp r7, r3
++ beq 99f
++
++ @ eQ-3 HomeMatic: 1392
++ mov r3, #(MACH_TYPE_HOMEMATIC & 0xff)
++ orr r3, r3, #(MACH_TYPE_HOMEMATIC & 0xff00)
++ cmp r7, r3
++ beq 99f
++
+ @ Unknown board, use the AT91RM9200DK board
+ @ mov r7, #MACH_TYPE_AT91RM9200
+ mov r7, #(MACH_TYPE_AT91RM9200DK & 0xff)
+diff --git a/arch/arm/configs/at91rm9200dk_defconfig b/arch/arm/configs/at91rm9200dk_defconfig
+index e10d003..2dbbbc3 100644
+--- a/arch/arm/configs/at91rm9200dk_defconfig
++++ b/arch/arm/configs/at91rm9200dk_defconfig
+@@ -620,14 +620,14 @@ CONFIG_I2C_CHARDEV=y
+ #
+ # I2C Algorithms
+ #
+-# CONFIG_I2C_ALGOBIT is not set
++CONFIG_I2C_ALGOBIT=y
+ # CONFIG_I2C_ALGOPCF is not set
+ # CONFIG_I2C_ALGOPCA is not set
+
+ #
+ # I2C Hardware Bus support
+ #
+-CONFIG_I2C_AT91=y
++CONFIG_I2C_GPIO=y
+ # CONFIG_I2C_PARPORT_LIGHT is not set
+ # CONFIG_I2C_STUB is not set
+ # CONFIG_I2C_PCA_ISA is not set
+diff --git a/arch/arm/configs/at91rm9200ek_defconfig b/arch/arm/configs/at91rm9200ek_defconfig
+index 834dddb..6e994f7 100644
+--- a/arch/arm/configs/at91rm9200ek_defconfig
++++ b/arch/arm/configs/at91rm9200ek_defconfig
+@@ -594,14 +594,14 @@ CONFIG_I2C_CHARDEV=y
+ #
+ # I2C Algorithms
+ #
+-# CONFIG_I2C_ALGOBIT is not set
++CONFIG_I2C_ALGOBIT=y
+ # CONFIG_I2C_ALGOPCF is not set
+ # CONFIG_I2C_ALGOPCA is not set
+
+ #
+ # I2C Hardware Bus support
+ #
+-CONFIG_I2C_AT91=y
++CONFIG_I2C_GPIO=y
+ # CONFIG_I2C_PARPORT_LIGHT is not set
+ # CONFIG_I2C_STUB is not set
+ # CONFIG_I2C_PCA_ISA is not set
+diff --git a/arch/arm/configs/at91sam9260ek_defconfig b/arch/arm/configs/at91sam9260ek_defconfig
+index 46b0c73..9a8890a 100644
+--- a/arch/arm/configs/at91sam9260ek_defconfig
++++ b/arch/arm/configs/at91sam9260ek_defconfig
+@@ -1,18 +1,24 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.19-rc6
+-# Fri Nov 17 18:42:21 2006
++# Linux kernel version: 2.6.21
++# Mon May 7 11:42:02 2007
+ #
+ CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_GENERIC_GPIO=y
+ # CONFIG_GENERIC_TIME is not set
+ CONFIG_MMU=y
++# CONFIG_NO_IOPORT is not set
+ CONFIG_GENERIC_HARDIRQS=y
+ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+ CONFIG_HARDIRQS_SW_RESEND=y
+ CONFIG_GENERIC_IRQ_PROBE=y
+ CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ZONE_DMA=y
+ CONFIG_VECTORS_BASE=0xffff0000
+ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+@@ -31,13 +37,16 @@ CONFIG_LOCALVERSION=""
+ # CONFIG_SWAP is not set
+ CONFIG_SYSVIPC=y
+ # CONFIG_IPC_NS is not set
++CONFIG_SYSVIPC_SYSCTL=y
+ # CONFIG_POSIX_MQUEUE is not set
+ # CONFIG_BSD_PROCESS_ACCT is not set
+ # CONFIG_TASKSTATS is not set
+ # CONFIG_UTS_NS is not set
+ # CONFIG_AUDIT is not set
+ # CONFIG_IKCONFIG is not set
++CONFIG_SYSFS_DEPRECATED=y
+ # CONFIG_RELAY is not set
++CONFIG_BLK_DEV_INITRD=y
+ CONFIG_INITRAMFS_SOURCE=""
+ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+ CONFIG_SYSCTL=y
+@@ -76,7 +85,9 @@ CONFIG_KMOD=y
+ # Block layer
+ #
+ CONFIG_BLOCK=y
++# CONFIG_LBD is not set
+ # CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
+
+ #
+ # IO Schedulers
+@@ -110,10 +121,12 @@ CONFIG_ARCH_AT91=y
+ # CONFIG_ARCH_IMX is not set
+ # CONFIG_ARCH_IOP32X is not set
+ # CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IOP13XX is not set
+ # CONFIG_ARCH_IXP4XX is not set
+ # CONFIG_ARCH_IXP2000 is not set
+ # CONFIG_ARCH_IXP23XX is not set
+ # CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_NS9XXX is not set
+ # CONFIG_ARCH_PNX4008 is not set
+ # CONFIG_ARCH_PXA is not set
+ # CONFIG_ARCH_RPC is not set
+@@ -129,21 +142,29 @@ CONFIG_ARCH_AT91=y
+ # CONFIG_ARCH_AT91RM9200 is not set
+ CONFIG_ARCH_AT91SAM9260=y
+ # CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9263 is not set
++
++#
++# AT91SAM9260 Variants
++#
++# CONFIG_ARCH_AT91SAM9260_SAM9XE is not set
+
+ #
+-# AT91SAM9260 Board Type
++# AT91SAM9260 / AT91SAM9XE Board Type
+ #
+ CONFIG_MACH_AT91SAM9260EK=y
+
+ #
+ # AT91 Board Options
+ #
++# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
+ # CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set
+
+ #
+ # AT91 Feature Selections
+ #
+ # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
++# CONFIG_ATMEL_TCLIB is not set
+
+ #
+ # Processor Type
+@@ -166,6 +187,7 @@ CONFIG_CPU_CP15_MMU=y
+ # CONFIG_CPU_DCACHE_DISABLE is not set
+ # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+ # CONFIG_CPU_CACHE_ROUND_ROBIN is not set
++# CONFIG_OUTER_CACHE is not set
+
+ #
+ # Bus support
+@@ -193,6 +215,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
+ # CONFIG_SPARSEMEM_STATIC is not set
+ CONFIG_SPLIT_PTLOCK_CPUS=4096
+ # CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
+ # CONFIG_LEDS is not set
+ CONFIG_ALIGNMENT_TRAP=y
+
+@@ -203,6 +226,7 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
+ CONFIG_ZBOOT_ROM_BSS=0x0
+ CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
+ # CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
+
+ #
+ # Floating point emulation
+@@ -228,7 +252,6 @@ CONFIG_BINFMT_ELF=y
+ # Power management options
+ #
+ # CONFIG_PM is not set
+-# CONFIG_APM is not set
+
+ #
+ # Networking
+@@ -242,9 +265,6 @@ CONFIG_NET=y
+ CONFIG_PACKET=y
+ # CONFIG_PACKET_MMAP is not set
+ CONFIG_UNIX=y
+-CONFIG_XFRM=y
+-# CONFIG_XFRM_USER is not set
+-# CONFIG_XFRM_SUB_POLICY is not set
+ # CONFIG_NET_KEY is not set
+ CONFIG_INET=y
+ # CONFIG_IP_MULTICAST is not set
+@@ -263,14 +283,15 @@ CONFIG_IP_PNP_BOOTP=y
+ # CONFIG_INET_IPCOMP is not set
+ # CONFIG_INET_XFRM_TUNNEL is not set
+ # CONFIG_INET_TUNNEL is not set
+-CONFIG_INET_XFRM_MODE_TRANSPORT=y
+-CONFIG_INET_XFRM_MODE_TUNNEL=y
+-CONFIG_INET_XFRM_MODE_BEET=y
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_BEET is not set
+ CONFIG_INET_DIAG=y
+ CONFIG_INET_TCP_DIAG=y
+ # CONFIG_TCP_CONG_ADVANCED is not set
+ CONFIG_TCP_CONG_CUBIC=y
+ CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
+ # CONFIG_IPV6 is not set
+ # CONFIG_INET6_XFRM_TUNNEL is not set
+ # CONFIG_INET6_TUNNEL is not set
+@@ -328,6 +349,7 @@ CONFIG_STANDALONE=y
+ CONFIG_PREVENT_FIRMWARE_BUILD=y
+ # CONFIG_FW_LOADER is not set
+ # CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
+ # CONFIG_SYS_HYPERVISOR is not set
+
+ #
+@@ -348,6 +370,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
+ #
+ # Plug and Play support
+ #
++# CONFIG_PNPACPI is not set
+
+ #
+ # Block devices
+@@ -360,7 +383,6 @@ CONFIG_BLK_DEV_RAM=y
+ CONFIG_BLK_DEV_RAM_COUNT=16
+ CONFIG_BLK_DEV_RAM_SIZE=8192
+ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+-CONFIG_BLK_DEV_INITRD=y
+ # CONFIG_CDROM_PKTCDVD is not set
+ # CONFIG_ATA_OVER_ETH is not set
+
+@@ -369,6 +391,7 @@ CONFIG_BLK_DEV_INITRD=y
+ #
+ # CONFIG_RAID_ATTRS is not set
+ CONFIG_SCSI=y
++# CONFIG_SCSI_TGT is not set
+ # CONFIG_SCSI_NETLINK is not set
+ CONFIG_SCSI_PROC_FS=y
+
+@@ -388,6 +411,7 @@ CONFIG_BLK_DEV_SD=y
+ CONFIG_SCSI_MULTI_LUN=y
+ # CONFIG_SCSI_CONSTANTS is not set
+ # CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
+
+ #
+ # SCSI Transports
+@@ -405,6 +429,11 @@ CONFIG_SCSI_MULTI_LUN=y
+ # CONFIG_SCSI_DEBUG is not set
+
+ #
++# Serial ATA (prod) and Parallel ATA (experimental) drivers
++#
++# CONFIG_ATA is not set
++
++#
+ # Multi-device support (RAID and LVM)
+ #
+ # CONFIG_MD is not set
+@@ -425,7 +454,51 @@ CONFIG_SCSI_MULTI_LUN=y
+ #
+ # Network device support
+ #
+-# CONFIG_NETDEVICES is not set
++CONFIG_NETDEVICES=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++
++#
++# PHY device support
++#
++# CONFIG_PHYLIB is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_MACB=y
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++
++#
++# Ethernet (10000 Mbit)
++#
++
++#
++# Token Ring devices
++#
++
++#
++# Wireless LAN (non-hamradio)
++#
++# CONFIG_NET_RADIO is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
+ # CONFIG_NETPOLL is not set
+ # CONFIG_NET_POLL_CONTROLLER is not set
+
+@@ -517,10 +590,6 @@ CONFIG_HW_RANDOM=y
+ # CONFIG_NVRAM is not set
+ # CONFIG_DTLK is not set
+ # CONFIG_R3964 is not set
+-
+-#
+-# Ftape, the floppy tape device driver
+-#
+ # CONFIG_RAW_DRIVER is not set
+
+ #
+@@ -553,7 +622,11 @@ CONFIG_HW_RANDOM=y
+ #
+ # Misc devices
+ #
+-# CONFIG_TIFM_CORE is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
+
+ #
+ # LED devices
+@@ -582,7 +655,7 @@ CONFIG_HW_RANDOM=y
+ #
+ # Graphics support
+ #
+-# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+ # CONFIG_FB is not set
+
+ #
+@@ -590,7 +663,6 @@ CONFIG_HW_RANDOM=y
+ #
+ # CONFIG_VGA_CONSOLE is not set
+ CONFIG_DUMMY_CONSOLE=y
+-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+ #
+ # Sound
+@@ -598,6 +670,12 @@ CONFIG_DUMMY_CONSOLE=y
+ # CONFIG_SOUND is not set
+
+ #
++# HID Devices
++#
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++
++#
+ # USB support
+ #
+ CONFIG_USB_ARCH_HAS_HCD=y
+@@ -610,7 +688,6 @@ CONFIG_USB=y
+ # Miscellaneous USB options
+ #
+ CONFIG_USB_DEVICEFS=y
+-# CONFIG_USB_BANDWIDTH is not set
+ # CONFIG_USB_DYNAMIC_MINORS is not set
+ # CONFIG_USB_OTG is not set
+
+@@ -619,7 +696,8 @@ CONFIG_USB_DEVICEFS=y
+ #
+ # CONFIG_USB_ISP116X_HCD is not set
+ CONFIG_USB_OHCI_HCD=y
+-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+ # CONFIG_USB_SL811_HCD is not set
+
+@@ -671,6 +749,7 @@ CONFIG_USB_STORAGE_DEBUG=y
+ # CONFIG_USB_ATI_REMOTE2 is not set
+ # CONFIG_USB_KEYSPAN_REMOTE is not set
+ # CONFIG_USB_APPLETOUCH is not set
++# CONFIG_USB_GTCO is not set
+
+ #
+ # USB Imaging devices
+@@ -708,6 +787,7 @@ CONFIG_USB_MON=y
+ # CONFIG_USB_RIO500 is not set
+ # CONFIG_USB_LEGOTOWER is not set
+ # CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
+ # CONFIG_USB_LED is not set
+ # CONFIG_USB_CYPRESS_CY7C63 is not set
+ # CONFIG_USB_CYTHERM is not set
+@@ -717,6 +797,7 @@ CONFIG_USB_MON=y
+ # CONFIG_USB_APPLEDISPLAY is not set
+ # CONFIG_USB_LD is not set
+ # CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
+ # CONFIG_USB_TEST is not set
+
+ #
+@@ -889,6 +970,11 @@ CONFIG_NLS_ISO8859_1=y
+ # CONFIG_NLS_UTF8 is not set
+
+ #
++# Distributed Lock Manager
++#
++# CONFIG_DLM is not set
++
++#
+ # Profiling support
+ #
+ # CONFIG_PROFILING is not set
+@@ -900,28 +986,30 @@ CONFIG_NLS_ISO8859_1=y
+ CONFIG_ENABLE_MUST_CHECK=y
+ # CONFIG_MAGIC_SYSRQ is not set
+ # CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
+ CONFIG_DEBUG_KERNEL=y
++# CONFIG_DEBUG_SHIRQ is not set
+ CONFIG_LOG_BUF_SHIFT=14
+ CONFIG_DETECT_SOFTLOCKUP=y
+ # CONFIG_SCHEDSTATS is not set
++# CONFIG_TIMER_STATS is not set
+ # CONFIG_DEBUG_SLAB is not set
+ # CONFIG_DEBUG_RT_MUTEXES is not set
+ # CONFIG_RT_MUTEX_TESTER is not set
+ # CONFIG_DEBUG_SPINLOCK is not set
+ # CONFIG_DEBUG_MUTEXES is not set
+-# CONFIG_DEBUG_RWSEMS is not set
+ # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+ # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+ # CONFIG_DEBUG_KOBJECT is not set
+ CONFIG_DEBUG_BUGVERBOSE=y
+ # CONFIG_DEBUG_INFO is not set
+-# CONFIG_DEBUG_FS is not set
+ # CONFIG_DEBUG_VM is not set
+ # CONFIG_DEBUG_LIST is not set
+ CONFIG_FRAME_POINTER=y
+ CONFIG_FORCED_INLINING=y
+-# CONFIG_HEADERS_CHECK is not set
+ # CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_FAULT_INJECTION is not set
+ CONFIG_DEBUG_USER=y
+ # CONFIG_DEBUG_ERRORS is not set
+ CONFIG_DEBUG_LL=y
+@@ -941,9 +1029,12 @@ CONFIG_DEBUG_LL=y
+ #
+ # Library routines
+ #
++CONFIG_BITREVERSE=y
+ # CONFIG_CRC_CCITT is not set
+ # CONFIG_CRC16 is not set
+ CONFIG_CRC32=y
+ # CONFIG_LIBCRC32C is not set
+ CONFIG_ZLIB_INFLATE=y
+ CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
+diff --git a/arch/arm/configs/at91sam9261ek_defconfig b/arch/arm/configs/at91sam9261ek_defconfig
+index fcd8fa0..c76d70e 100644
+--- a/arch/arm/configs/at91sam9261ek_defconfig
++++ b/arch/arm/configs/at91sam9261ek_defconfig
+@@ -1,18 +1,24 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.19-rc6
+-# Fri Nov 17 18:00:38 2006
++# Linux kernel version: 2.6.21
++# Mon May 7 11:42:30 2007
+ #
+ CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_GENERIC_GPIO=y
+ # CONFIG_GENERIC_TIME is not set
+ CONFIG_MMU=y
++# CONFIG_NO_IOPORT is not set
+ CONFIG_GENERIC_HARDIRQS=y
+ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+ CONFIG_HARDIRQS_SW_RESEND=y
+ CONFIG_GENERIC_IRQ_PROBE=y
+ CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ZONE_DMA=y
+ CONFIG_VECTORS_BASE=0xffff0000
+ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+@@ -31,13 +37,16 @@ CONFIG_LOCALVERSION=""
+ # CONFIG_SWAP is not set
+ CONFIG_SYSVIPC=y
+ # CONFIG_IPC_NS is not set
++CONFIG_SYSVIPC_SYSCTL=y
+ # CONFIG_POSIX_MQUEUE is not set
+ # CONFIG_BSD_PROCESS_ACCT is not set
+ # CONFIG_TASKSTATS is not set
+ # CONFIG_UTS_NS is not set
+ # CONFIG_AUDIT is not set
+ # CONFIG_IKCONFIG is not set
++CONFIG_SYSFS_DEPRECATED=y
+ # CONFIG_RELAY is not set
++CONFIG_BLK_DEV_INITRD=y
+ CONFIG_INITRAMFS_SOURCE=""
+ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+ CONFIG_SYSCTL=y
+@@ -76,7 +85,9 @@ CONFIG_KMOD=y
+ # Block layer
+ #
+ CONFIG_BLOCK=y
++# CONFIG_LBD is not set
+ # CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
+
+ #
+ # IO Schedulers
+@@ -110,10 +121,12 @@ CONFIG_ARCH_AT91=y
+ # CONFIG_ARCH_IMX is not set
+ # CONFIG_ARCH_IOP32X is not set
+ # CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IOP13XX is not set
+ # CONFIG_ARCH_IXP4XX is not set
+ # CONFIG_ARCH_IXP2000 is not set
+ # CONFIG_ARCH_IXP23XX is not set
+ # CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_NS9XXX is not set
+ # CONFIG_ARCH_PNX4008 is not set
+ # CONFIG_ARCH_PXA is not set
+ # CONFIG_ARCH_RPC is not set
+@@ -129,6 +142,7 @@ CONFIG_ARCH_AT91=y
+ # CONFIG_ARCH_AT91RM9200 is not set
+ # CONFIG_ARCH_AT91SAM9260 is not set
+ CONFIG_ARCH_AT91SAM9261=y
++# CONFIG_ARCH_AT91SAM9263 is not set
+
+ #
+ # AT91SAM9261 Board Type
+@@ -138,12 +152,14 @@ CONFIG_MACH_AT91SAM9261EK=y
+ #
+ # AT91 Board Options
+ #
++# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
+ # CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set
+
+ #
+ # AT91 Feature Selections
+ #
+ # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
++# CONFIG_ATMEL_TCLIB is not set
+
+ #
+ # Processor Type
+@@ -166,6 +182,7 @@ CONFIG_CPU_CP15_MMU=y
+ # CONFIG_CPU_DCACHE_DISABLE is not set
+ # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+ # CONFIG_CPU_CACHE_ROUND_ROBIN is not set
++# CONFIG_OUTER_CACHE is not set
+
+ #
+ # Bus support
+@@ -193,6 +210,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
+ # CONFIG_SPARSEMEM_STATIC is not set
+ CONFIG_SPLIT_PTLOCK_CPUS=4096
+ # CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
+ # CONFIG_LEDS is not set
+ CONFIG_ALIGNMENT_TRAP=y
+
+@@ -203,6 +221,7 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
+ CONFIG_ZBOOT_ROM_BSS=0x0
+ CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
+ # CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
+
+ #
+ # Floating point emulation
+@@ -228,7 +247,6 @@ CONFIG_BINFMT_ELF=y
+ # Power management options
+ #
+ # CONFIG_PM is not set
+-# CONFIG_APM is not set
+
+ #
+ # Networking
+@@ -245,6 +263,7 @@ CONFIG_UNIX=y
+ CONFIG_XFRM=y
+ # CONFIG_XFRM_USER is not set
+ # CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_XFRM_MIGRATE is not set
+ # CONFIG_NET_KEY is not set
+ CONFIG_INET=y
+ # CONFIG_IP_MULTICAST is not set
+@@ -271,6 +290,7 @@ CONFIG_INET_TCP_DIAG=y
+ # CONFIG_TCP_CONG_ADVANCED is not set
+ CONFIG_TCP_CONG_CUBIC=y
+ CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
+ # CONFIG_IPV6 is not set
+ # CONFIG_INET6_XFRM_TUNNEL is not set
+ # CONFIG_INET6_TUNNEL is not set
+@@ -328,6 +348,7 @@ CONFIG_STANDALONE=y
+ CONFIG_PREVENT_FIRMWARE_BUILD=y
+ # CONFIG_FW_LOADER is not set
+ # CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
+ # CONFIG_SYS_HYPERVISOR is not set
+
+ #
+@@ -350,6 +371,7 @@ CONFIG_MTD_CMDLINE_PARTS=y
+ # User Modules And Translation Layers
+ #
+ # CONFIG_MTD_CHAR is not set
++CONFIG_MTD_BLKDEVS=y
+ CONFIG_MTD_BLOCK=y
+ # CONFIG_FTL is not set
+ # CONFIG_NFTL is not set
+@@ -386,6 +408,8 @@ CONFIG_MTD_CFI_I2=y
+ #
+ # Self-contained MTD device drivers
+ #
++# CONFIG_MTD_DATAFLASH is not set
++# CONFIG_MTD_M25P80 is not set
+ # CONFIG_MTD_SLRAM is not set
+ # CONFIG_MTD_PHRAM is not set
+ # CONFIG_MTD_MTDRAM is not set
+@@ -422,6 +446,7 @@ CONFIG_MTD_NAND_AT91=y
+ #
+ # Plug and Play support
+ #
++# CONFIG_PNPACPI is not set
+
+ #
+ # Block devices
+@@ -434,7 +459,6 @@ CONFIG_BLK_DEV_RAM=y
+ CONFIG_BLK_DEV_RAM_COUNT=16
+ CONFIG_BLK_DEV_RAM_SIZE=8192
+ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+-CONFIG_BLK_DEV_INITRD=y
+ # CONFIG_CDROM_PKTCDVD is not set
+ # CONFIG_ATA_OVER_ETH is not set
+
+@@ -443,6 +467,7 @@ CONFIG_BLK_DEV_INITRD=y
+ #
+ # CONFIG_RAID_ATTRS is not set
+ CONFIG_SCSI=y
++# CONFIG_SCSI_TGT is not set
+ # CONFIG_SCSI_NETLINK is not set
+ CONFIG_SCSI_PROC_FS=y
+
+@@ -462,6 +487,7 @@ CONFIG_BLK_DEV_SD=y
+ CONFIG_SCSI_MULTI_LUN=y
+ # CONFIG_SCSI_CONSTANTS is not set
+ # CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
+
+ #
+ # SCSI Transports
+@@ -479,6 +505,11 @@ CONFIG_SCSI_MULTI_LUN=y
+ # CONFIG_SCSI_DEBUG is not set
+
+ #
++# Serial ATA (prod) and Parallel ATA (experimental) drivers
++#
++# CONFIG_ATA is not set
++
++#
+ # Multi-device support (RAID and LVM)
+ #
+ # CONFIG_MD is not set
+@@ -575,7 +606,16 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+ # CONFIG_INPUT_KEYBOARD is not set
+ # CONFIG_INPUT_MOUSE is not set
+ # CONFIG_INPUT_JOYSTICK is not set
+-# CONFIG_INPUT_TOUCHSCREEN is not set
++CONFIG_INPUT_TOUCHSCREEN=y
++CONFIG_TOUCHSCREEN_ADS7846=y
++# CONFIG_TOUCHSCREEN_GUNZE is not set
++# CONFIG_TOUCHSCREEN_ELO is not set
++# CONFIG_TOUCHSCREEN_MTOUCH is not set
++# CONFIG_TOUCHSCREEN_MK712 is not set
++# CONFIG_TOUCHSCREEN_PENMOUNT is not set
++# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
++# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
++# CONFIG_TOUCHSCREEN_UCB1400 is not set
+ # CONFIG_INPUT_MISC is not set
+
+ #
+@@ -634,10 +674,6 @@ CONFIG_HW_RANDOM=y
+ # CONFIG_NVRAM is not set
+ # CONFIG_DTLK is not set
+ # CONFIG_R3964 is not set
+-
+-#
+-# Ftape, the floppy tape device driver
+-#
+ # CONFIG_RAW_DRIVER is not set
+
+ #
+@@ -654,14 +690,14 @@ CONFIG_I2C_CHARDEV=y
+ #
+ # I2C Algorithms
+ #
+-# CONFIG_I2C_ALGOBIT is not set
++CONFIG_I2C_ALGOBIT=y
+ # CONFIG_I2C_ALGOPCF is not set
+ # CONFIG_I2C_ALGOPCA is not set
+
+ #
+ # I2C Hardware Bus support
+ #
+-CONFIG_I2C_AT91=y
++CONFIG_I2C_GPIO=y
+ # CONFIG_I2C_OCORES is not set
+ # CONFIG_I2C_PARPORT_LIGHT is not set
+ # CONFIG_I2C_STUB is not set
+@@ -686,8 +722,20 @@ CONFIG_I2C_AT91=y
+ #
+ # SPI support
+ #
+-# CONFIG_SPI is not set
+-# CONFIG_SPI_MASTER is not set
++CONFIG_SPI=y
++# CONFIG_SPI_DEBUG is not set
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++
++#
++# SPI Protocol Masters
++#
++# CONFIG_SPI_AT25 is not set
+
+ #
+ # Dallas's 1-wire bus
+@@ -703,7 +751,11 @@ CONFIG_I2C_AT91=y
+ #
+ # Misc devices
+ #
+-# CONFIG_TIFM_CORE is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
+
+ #
+ # LED devices
+@@ -732,7 +784,7 @@ CONFIG_I2C_AT91=y
+ #
+ # Graphics support
+ #
+-# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+ # CONFIG_FB is not set
+
+ #
+@@ -740,7 +792,6 @@ CONFIG_I2C_AT91=y
+ #
+ # CONFIG_VGA_CONSOLE is not set
+ CONFIG_DUMMY_CONSOLE=y
+-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+ #
+ # Sound
+@@ -748,6 +799,12 @@ CONFIG_DUMMY_CONSOLE=y
+ # CONFIG_SOUND is not set
+
+ #
++# HID Devices
++#
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++
++#
+ # USB support
+ #
+ CONFIG_USB_ARCH_HAS_HCD=y
+@@ -760,7 +817,6 @@ CONFIG_USB=y
+ # Miscellaneous USB options
+ #
+ CONFIG_USB_DEVICEFS=y
+-# CONFIG_USB_BANDWIDTH is not set
+ # CONFIG_USB_DYNAMIC_MINORS is not set
+ # CONFIG_USB_OTG is not set
+
+@@ -769,7 +825,8 @@ CONFIG_USB_DEVICEFS=y
+ #
+ # CONFIG_USB_ISP116X_HCD is not set
+ CONFIG_USB_OHCI_HCD=y
+-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+ # CONFIG_USB_SL811_HCD is not set
+
+@@ -821,6 +878,7 @@ CONFIG_USB_STORAGE_DEBUG=y
+ # CONFIG_USB_ATI_REMOTE2 is not set
+ # CONFIG_USB_KEYSPAN_REMOTE is not set
+ # CONFIG_USB_APPLETOUCH is not set
++# CONFIG_USB_GTCO is not set
+
+ #
+ # USB Imaging devices
+@@ -858,6 +916,7 @@ CONFIG_USB_MON=y
+ # CONFIG_USB_RIO500 is not set
+ # CONFIG_USB_LEGOTOWER is not set
+ # CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
+ # CONFIG_USB_LED is not set
+ # CONFIG_USB_CYPRESS_CY7C63 is not set
+ # CONFIG_USB_CYTHERM is not set
+@@ -867,6 +926,7 @@ CONFIG_USB_MON=y
+ # CONFIG_USB_APPLEDISPLAY is not set
+ # CONFIG_USB_LD is not set
+ # CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
+ # CONFIG_USB_TEST is not set
+
+ #
+@@ -903,7 +963,6 @@ CONFIG_MMC=y
+ # CONFIG_MMC_DEBUG is not set
+ CONFIG_MMC_BLOCK=y
+ CONFIG_MMC_AT91=m
+-# CONFIG_MMC_TIFM_SD is not set
+
+ #
+ # Real Time Clock
+@@ -973,7 +1032,6 @@ CONFIG_RAMFS=y
+ # CONFIG_BEFS_FS is not set
+ # CONFIG_BFS_FS is not set
+ # CONFIG_EFS_FS is not set
+-# CONFIG_JFFS_FS is not set
+ # CONFIG_JFFS2_FS is not set
+ CONFIG_CRAMFS=y
+ # CONFIG_VXFS_FS is not set
+@@ -1045,6 +1103,11 @@ CONFIG_NLS_ISO8859_1=y
+ # CONFIG_NLS_UTF8 is not set
+
+ #
++# Distributed Lock Manager
++#
++# CONFIG_DLM is not set
++
++#
+ # Profiling support
+ #
+ # CONFIG_PROFILING is not set
+@@ -1056,28 +1119,30 @@ CONFIG_NLS_ISO8859_1=y
+ CONFIG_ENABLE_MUST_CHECK=y
+ # CONFIG_MAGIC_SYSRQ is not set
+ # CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
+ CONFIG_DEBUG_KERNEL=y
++# CONFIG_DEBUG_SHIRQ is not set
+ CONFIG_LOG_BUF_SHIFT=14
+ CONFIG_DETECT_SOFTLOCKUP=y
+ # CONFIG_SCHEDSTATS is not set
++# CONFIG_TIMER_STATS is not set
+ # CONFIG_DEBUG_SLAB is not set
+ # CONFIG_DEBUG_RT_MUTEXES is not set
+ # CONFIG_RT_MUTEX_TESTER is not set
+ # CONFIG_DEBUG_SPINLOCK is not set
+ # CONFIG_DEBUG_MUTEXES is not set
+-# CONFIG_DEBUG_RWSEMS is not set
+ # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+ # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+ # CONFIG_DEBUG_KOBJECT is not set
+ CONFIG_DEBUG_BUGVERBOSE=y
+ # CONFIG_DEBUG_INFO is not set
+-# CONFIG_DEBUG_FS is not set
+ # CONFIG_DEBUG_VM is not set
+ # CONFIG_DEBUG_LIST is not set
+ CONFIG_FRAME_POINTER=y
+ CONFIG_FORCED_INLINING=y
+-# CONFIG_HEADERS_CHECK is not set
+ # CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_FAULT_INJECTION is not set
+ CONFIG_DEBUG_USER=y
+ # CONFIG_DEBUG_ERRORS is not set
+ CONFIG_DEBUG_LL=y
+@@ -1097,9 +1162,12 @@ CONFIG_DEBUG_LL=y
+ #
+ # Library routines
+ #
++CONFIG_BITREVERSE=y
+ # CONFIG_CRC_CCITT is not set
+ # CONFIG_CRC16 is not set
+ CONFIG_CRC32=y
+ # CONFIG_LIBCRC32C is not set
+ CONFIG_ZLIB_INFLATE=y
+ CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
+diff --git a/arch/arm/configs/at91sam9263ek_defconfig b/arch/arm/configs/at91sam9263ek_defconfig
+index c72ab82..0f5566d 100644
+--- a/arch/arm/configs/at91sam9263ek_defconfig
++++ b/arch/arm/configs/at91sam9263ek_defconfig
+@@ -1,11 +1,14 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.20-rc1
+-# Mon Jan 8 16:06:54 2007
++# Linux kernel version: 2.6.21
++# Mon May 7 11:42:49 2007
+ #
+ CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_GENERIC_GPIO=y
+ # CONFIG_GENERIC_TIME is not set
+ CONFIG_MMU=y
++# CONFIG_NO_IOPORT is not set
+ CONFIG_GENERIC_HARDIRQS=y
+ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+ CONFIG_HARDIRQS_SW_RESEND=y
+@@ -15,6 +18,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
+ # CONFIG_ARCH_HAS_ILOG2_U64 is not set
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ZONE_DMA=y
+ CONFIG_VECTORS_BASE=0xffff0000
+ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+@@ -33,6 +37,7 @@ CONFIG_LOCALVERSION=""
+ # CONFIG_SWAP is not set
+ CONFIG_SYSVIPC=y
+ # CONFIG_IPC_NS is not set
++CONFIG_SYSVIPC_SYSCTL=y
+ # CONFIG_POSIX_MQUEUE is not set
+ # CONFIG_BSD_PROCESS_ACCT is not set
+ # CONFIG_TASKSTATS is not set
+@@ -41,6 +46,7 @@ CONFIG_SYSVIPC=y
+ # CONFIG_IKCONFIG is not set
+ CONFIG_SYSFS_DEPRECATED=y
+ # CONFIG_RELAY is not set
++CONFIG_BLK_DEV_INITRD=y
+ CONFIG_INITRAMFS_SOURCE=""
+ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+ CONFIG_SYSCTL=y
+@@ -120,6 +126,7 @@ CONFIG_ARCH_AT91=y
+ # CONFIG_ARCH_IXP2000 is not set
+ # CONFIG_ARCH_IXP23XX is not set
+ # CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_NS9XXX is not set
+ # CONFIG_ARCH_PNX4008 is not set
+ # CONFIG_ARCH_PXA is not set
+ # CONFIG_ARCH_RPC is not set
+@@ -152,6 +159,7 @@ CONFIG_MTD_AT91_DATAFLASH_CARD=y
+ # AT91 Feature Selections
+ #
+ # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
++# CONFIG_ATMEL_TCLIB is not set
+
+ #
+ # Processor Type
+@@ -174,6 +182,7 @@ CONFIG_CPU_CP15_MMU=y
+ # CONFIG_CPU_DCACHE_DISABLE is not set
+ # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+ # CONFIG_CPU_CACHE_ROUND_ROBIN is not set
++# CONFIG_OUTER_CACHE is not set
+
+ #
+ # Bus support
+@@ -201,6 +210,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
+ # CONFIG_SPARSEMEM_STATIC is not set
+ CONFIG_SPLIT_PTLOCK_CPUS=4096
+ # CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
+ # CONFIG_LEDS is not set
+ CONFIG_ALIGNMENT_TRAP=y
+
+@@ -211,6 +221,7 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
+ CONFIG_ZBOOT_ROM_BSS=0x0
+ CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
+ # CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
+
+ #
+ # Floating point emulation
+@@ -236,7 +247,6 @@ CONFIG_BINFMT_ELF=y
+ # Power management options
+ #
+ # CONFIG_PM is not set
+-# CONFIG_APM is not set
+
+ #
+ # Networking
+@@ -333,6 +343,7 @@ CONFIG_STANDALONE=y
+ CONFIG_PREVENT_FIRMWARE_BUILD=y
+ # CONFIG_FW_LOADER is not set
+ # CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
+ # CONFIG_SYS_HYPERVISOR is not set
+
+ #
+@@ -430,6 +441,7 @@ CONFIG_MTD_NAND_AT91=y
+ #
+ # Plug and Play support
+ #
++# CONFIG_PNPACPI is not set
+
+ #
+ # Block devices
+@@ -443,7 +455,6 @@ CONFIG_BLK_DEV_RAM=y
+ CONFIG_BLK_DEV_RAM_COUNT=16
+ CONFIG_BLK_DEV_RAM_SIZE=8192
+ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+-CONFIG_BLK_DEV_INITRD=y
+ # CONFIG_CDROM_PKTCDVD is not set
+ # CONFIG_ATA_OVER_ETH is not set
+
+@@ -531,6 +542,7 @@ CONFIG_NETDEVICES=y
+ #
+ CONFIG_NET_ETHERNET=y
+ CONFIG_MII=y
++CONFIG_MACB=y
+ # CONFIG_SMC91X is not set
+ # CONFIG_DM9000 is not set
+
+@@ -677,14 +689,14 @@ CONFIG_I2C_CHARDEV=y
+ #
+ # I2C Algorithms
+ #
+-# CONFIG_I2C_ALGOBIT is not set
++CONFIG_I2C_ALGOBIT=y
+ # CONFIG_I2C_ALGOPCF is not set
+ # CONFIG_I2C_ALGOPCA is not set
+
+ #
+ # I2C Hardware Bus support
+ #
+-CONFIG_I2C_AT91=y
++CONFIG_I2C_GPIO=y
+ # CONFIG_I2C_OCORES is not set
+ # CONFIG_I2C_PARPORT_LIGHT is not set
+ # CONFIG_I2C_STUB is not set
+@@ -722,6 +734,7 @@ CONFIG_SPI_ATMEL=y
+ #
+ # SPI Protocol Masters
+ #
++# CONFIG_SPI_AT25 is not set
+
+ #
+ # Dallas's 1-wire bus
+@@ -737,7 +750,11 @@ CONFIG_SPI_ATMEL=y
+ #
+ # Misc devices
+ #
+-# CONFIG_TIFM_CORE is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
+
+ #
+ # LED devices
+@@ -766,15 +783,23 @@ CONFIG_SPI_ATMEL=y
+ #
+ # Graphics support
+ #
+-# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+ CONFIG_FB=y
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB_DDC is not set
+ # CONFIG_FB_CFB_FILLRECT is not set
+ # CONFIG_FB_CFB_COPYAREA is not set
+ # CONFIG_FB_CFB_IMAGEBLIT is not set
++# CONFIG_FB_SVGALIB is not set
+ # CONFIG_FB_MACMODES is not set
+ # CONFIG_FB_BACKLIGHT is not set
+ # CONFIG_FB_MODE_HELPERS is not set
+ # CONFIG_FB_TILEBLITTING is not set
++
++#
++# Frame buffer hardware drivers
++#
++# CONFIG_FB_S1D15605 is not set
+ # CONFIG_FB_S1D13XXX is not set
+ # CONFIG_FB_VIRTUAL is not set
+
+@@ -789,7 +814,6 @@ CONFIG_DUMMY_CONSOLE=y
+ # Logo configuration
+ #
+ # CONFIG_LOGO is not set
+-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+ #
+ # Sound
+@@ -800,6 +824,7 @@ CONFIG_DUMMY_CONSOLE=y
+ # HID Devices
+ #
+ CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
+
+ #
+ # USB support
+@@ -814,9 +839,7 @@ CONFIG_USB=y
+ # Miscellaneous USB options
+ #
+ CONFIG_USB_DEVICEFS=y
+-# CONFIG_USB_BANDWIDTH is not set
+ # CONFIG_USB_DYNAMIC_MINORS is not set
+-# CONFIG_USB_MULTITHREAD_PROBE is not set
+ # CONFIG_USB_OTG is not set
+
+ #
+@@ -824,7 +847,8 @@ CONFIG_USB_DEVICEFS=y
+ #
+ # CONFIG_USB_ISP116X_HCD is not set
+ CONFIG_USB_OHCI_HCD=y
+-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+ # CONFIG_USB_SL811_HCD is not set
+
+@@ -877,6 +901,7 @@ CONFIG_USB_STORAGE=y
+ # CONFIG_USB_ATI_REMOTE2 is not set
+ # CONFIG_USB_KEYSPAN_REMOTE is not set
+ # CONFIG_USB_APPLETOUCH is not set
++# CONFIG_USB_GTCO is not set
+
+ #
+ # USB Imaging devices
+@@ -914,6 +939,7 @@ CONFIG_USB_MON=y
+ # CONFIG_USB_RIO500 is not set
+ # CONFIG_USB_LEGOTOWER is not set
+ # CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
+ # CONFIG_USB_LED is not set
+ # CONFIG_USB_CYPRESS_CY7C63 is not set
+ # CONFIG_USB_CYTHERM is not set
+@@ -923,6 +949,7 @@ CONFIG_USB_MON=y
+ # CONFIG_USB_APPLEDISPLAY is not set
+ # CONFIG_USB_LD is not set
+ # CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
+ # CONFIG_USB_TEST is not set
+
+ #
+@@ -959,7 +986,6 @@ CONFIG_MMC=y
+ # CONFIG_MMC_DEBUG is not set
+ CONFIG_MMC_BLOCK=y
+ CONFIG_MMC_AT91=m
+-# CONFIG_MMC_TIFM_SD is not set
+
+ #
+ # Real Time Clock
+@@ -1136,15 +1162,16 @@ CONFIG_ENABLE_MUST_CHECK=y
+ # CONFIG_DEBUG_FS is not set
+ # CONFIG_HEADERS_CHECK is not set
+ CONFIG_DEBUG_KERNEL=y
++# CONFIG_DEBUG_SHIRQ is not set
+ CONFIG_LOG_BUF_SHIFT=14
+ CONFIG_DETECT_SOFTLOCKUP=y
+ # CONFIG_SCHEDSTATS is not set
++# CONFIG_TIMER_STATS is not set
+ # CONFIG_DEBUG_SLAB is not set
+ # CONFIG_DEBUG_RT_MUTEXES is not set
+ # CONFIG_RT_MUTEX_TESTER is not set
+ # CONFIG_DEBUG_SPINLOCK is not set
+ # CONFIG_DEBUG_MUTEXES is not set
+-# CONFIG_DEBUG_RWSEMS is not set
+ # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+ # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+ # CONFIG_DEBUG_KOBJECT is not set
+@@ -1155,6 +1182,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
+ CONFIG_FRAME_POINTER=y
+ CONFIG_FORCED_INLINING=y
+ # CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_FAULT_INJECTION is not set
+ CONFIG_DEBUG_USER=y
+ # CONFIG_DEBUG_ERRORS is not set
+ CONFIG_DEBUG_LL=y
+@@ -1180,5 +1208,7 @@ CONFIG_BITREVERSE=y
+ CONFIG_CRC32=y
+ # CONFIG_LIBCRC32C is not set
+ CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
+ CONFIG_PLIST=y
+-CONFIG_IOMAP_COPY=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
+diff --git a/arch/arm/configs/ateb9200_defconfig b/arch/arm/configs/ateb9200_defconfig
+index baa9769..d846a49 100644
+--- a/arch/arm/configs/ateb9200_defconfig
++++ b/arch/arm/configs/ateb9200_defconfig
+@@ -714,7 +714,7 @@ CONFIG_I2C_ALGOPCA=m
+ #
+ # I2C Hardware Bus support
+ #
+-CONFIG_I2C_AT91=m
++CONFIG_I2C_GPIO=m
+ # CONFIG_I2C_PARPORT_LIGHT is not set
+ # CONFIG_I2C_STUB is not set
+ # CONFIG_I2C_PCA_ISA is not set
+diff --git a/arch/arm/configs/cam60_defconfig b/arch/arm/configs/cam60_defconfig
+new file mode 100644
+index 0000000..5d71160
+--- /dev/null
++++ b/arch/arm/configs/cam60_defconfig
+@@ -0,0 +1,954 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.20
++# Tue May 1 21:06:33 2007
++#
++CONFIG_ARM=y
++# CONFIG_GENERIC_TIME is not set
++CONFIG_MMU=y
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_VECTORS_BASE=0xffff0000
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++
++#
++# General setup
++#
++CONFIG_LOCALVERSION=""
++# CONFIG_LOCALVERSION_AUTO is not set
++# CONFIG_SWAP is not set
++CONFIG_SYSVIPC=y
++# CONFIG_IPC_NS is not set
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_UTS_NS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_SYSFS_DEPRECATED=y
++# CONFIG_RELAY is not set
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_SYSCTL=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SHMEM=y
++CONFIG_SLAB=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++# CONFIG_SLOB is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++# CONFIG_KMOD is not set
++
++#
++# Block layer
++#
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++# CONFIG_IOSCHED_DEADLINE is not set
++# CONFIG_IOSCHED_CFQ is not set
++CONFIG_DEFAULT_AS=y
++# CONFIG_DEFAULT_DEADLINE is not set
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="anticipatory"
++
++#
++# System Type
++#
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_VERSATILE is not set
++CONFIG_ARCH_AT91=y
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_NETX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_IOP32X is not set
++# CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IOP13XX is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_IXP23XX is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_OMAP is not set
++
++#
++# Atmel AT91 System-on-Chip
++#
++# CONFIG_ARCH_AT91RM9200 is not set
++CONFIG_ARCH_AT91SAM9260=y
++# CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9263 is not set
++
++#
++# AT91SAM9260 Board Type
++#
++# CONFIG_MACH_AT91SAM9260EK is not set
++CONFIG_MACH_CAM60=y
++
++#
++# AT91 Board Options
++#
++
++#
++# AT91 Feature Selections
++#
++# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM926T=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_CACHE_VIVT=y
++CONFIG_CPU_COPY_V4WB=y
++CONFIG_CPU_TLB_V4WBI=y
++CONFIG_CPU_CP15=y
++CONFIG_CPU_CP15_MMU=y
++
++#
++# Processor Features
++#
++# CONFIG_ARM_THUMB is not set
++# CONFIG_CPU_ICACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
++# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
++
++#
++# Bus support
++#
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++# CONFIG_PREEMPT is not set
++# CONFIG_NO_IDLE_HZ is not set
++CONFIG_HZ=100
++# CONFIG_AEABI is not set
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_RESOURCES_64BIT is not set
++# CONFIG_LEDS is not set
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x22000000
++CONFIG_ZBOOT_ROM_BSS=0x20004000
++# CONFIG_ZBOOT_ROM is not set
++CONFIG_CMDLINE="console=ttyS0,115200 noinitrd root=/dev/mtdblock3 rootfstype=jffs2 mem=64M"
++# CONFIG_XIP_KERNEL is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++# CONFIG_VFP is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_ARTHUR is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++# CONFIG_APM is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++# CONFIG_NETDEBUG is not set
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_NET_KEY is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_PNP=y
++# CONFIG_IP_PNP_DHCP is not set
++CONFIG_IP_PNP_BOOTP=y
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++CONFIG_INET_XFRM_MODE_TRANSPORT=y
++CONFIG_INET_XFRM_MODE_TUNNEL=y
++CONFIG_INET_XFRM_MODE_BEET=y
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++
++#
++# DCCP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP is not set
++
++#
++# SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++
++#
++# TIPC Configuration (EXPERIMENTAL)
++#
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_IEEE80211 is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++# CONFIG_FW_LOADER is not set
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_SYS_HYPERVISOR is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++CONFIG_MTD_CONCAT=y
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++CONFIG_MTD_CFI=y
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_GEN_PROBE=y
++# CONFIG_MTD_CFI_ADV_OPTIONS is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_CFI_INTELEXT is not set
++# CONFIG_MTD_CFI_AMDSTD is not set
++# CONFIG_MTD_CFI_STAA is not set
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++# CONFIG_MTD_OBSOLETE_CHIPS is not set
++
++#
++# Mapping drivers for chip access
++#
++CONFIG_MTD_COMPLEX_MAPPINGS=y
++# CONFIG_MTD_PHYSMAP is not set
++# CONFIG_MTD_ARM_INTEGRATOR is not set
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++CONFIG_MTD_DATAFLASH=y
++# CONFIG_MTD_M25P80 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++
++#
++# NAND Flash Device Drivers
++#
++# CONFIG_MTD_NAND is not set
++
++#
++# OneNAND Flash Device Drivers
++#
++# CONFIG_MTD_ONENAND is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play support
++#
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_COW_COMMON is not set
++# CONFIG_BLK_DEV_LOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=8192
++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++CONFIG_BLK_DEV_INITRD=y
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++# CONFIG_SCSI is not set
++# CONFIG_SCSI_NETLINK is not set
++
++#
++# Serial ATA (prod) and Parallel ATA (experimental) drivers
++#
++# CONFIG_ATA is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++
++#
++# I2O device support
++#
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++
++#
++# PHY device support
++#
++# CONFIG_PHYLIB is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_MACB=y
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++
++#
++# Ethernet (10000 Mbit)
++#
++
++#
++# Token Ring devices
++#
++
++#
++# Wireless LAN (non-hamradio)
++#
++# CONFIG_NET_RADIO is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_TSDEV is not set
++# CONFIG_INPUT_EVDEV is not set
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++# CONFIG_INPUT_KEYBOARD is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++# CONFIG_SERIO is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_ATMEL=y
++CONFIG_SERIAL_ATMEL_CONSOLE=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=256
++
++#
++# IPMI
++#
++# CONFIG_IPMI_HANDLER is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_NVRAM is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++
++#
++# TPM devices
++#
++# CONFIG_TCG_TPM is not set
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# SPI support
++#
++CONFIG_SPI=y
++# CONFIG_SPI_DEBUG is not set
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_ATMEL=y
++# CONFIG_SPI_BITBANG is not set
++
++#
++# SPI Protocol Masters
++#
++
++#
++# Dallas's 1-wire bus
++#
++# CONFIG_W1 is not set
++
++#
++# Hardware Monitoring support
++#
++# CONFIG_HWMON is not set
++# CONFIG_HWMON_VID is not set
++
++#
++# Misc devices
++#
++# CONFIG_TIFM_CORE is not set
++
++#
++# LED devices
++#
++# CONFIG_NEW_LEDS is not set
++
++#
++# LED drivers
++#
++
++#
++# LED Triggers
++#
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# Digital Video Broadcasting Devices
++#
++# CONFIG_DVB is not set
++
++#
++# Graphics support
++#
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++
++#
++# HID Devices
++#
++# CONFIG_HID is not set
++
++#
++# USB support
++#
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB_ARCH_HAS_EHCI is not set
++# CONFIG_USB is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# USB Gadget Support
++#
++# CONFIG_USB_GADGET is not set
++
++#
++# MMC/SD Card support
++#
++# CONFIG_MMC is not set
++
++#
++# Real Time Clock
++#
++CONFIG_RTC_LIB=y
++# CONFIG_RTC_CLASS is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_XATTR=y
++# CONFIG_EXT3_FS_POSIX_ACL is not set
++# CONFIG_EXT3_FS_SECURITY is not set
++# CONFIG_EXT4DEV_FS is not set
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FS_MBCACHE=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++CONFIG_AUTOFS4_FS=y
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++# CONFIG_MSDOS_FS is not set
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_SUMMARY is not set
++# CONFIG_JFFS2_FS_XATTR is not set
++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
++CONFIG_JFFS2_ZLIB=y
++CONFIG_JFFS2_RTIME=y
++# CONFIG_JFFS2_RUBIN is not set
++CONFIG_CRAMFS=y
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++CONFIG_NLS_CODEPAGE_850=y
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++
++#
++# Distributed Lock Manager
++#
++# CONFIG_DLM is not set
++
++#
++# Profiling support
++#
++# CONFIG_PROFILING is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_MUST_CHECK=y
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
++CONFIG_DEBUG_KERNEL=y
++CONFIG_LOG_BUF_SHIFT=14
++CONFIG_DETECT_SOFTLOCKUP=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_RWSEMS is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_LIST is not set
++CONFIG_FRAME_POINTER=y
++CONFIG_FORCED_INLINING=y
++# CONFIG_RCU_TORTURE_TEST is not set
++CONFIG_DEBUG_USER=y
++# CONFIG_DEBUG_ERRORS is not set
++CONFIG_DEBUG_LL=y
++# CONFIG_DEBUG_ICEDCC is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++
++#
++# Cryptographic options
++#
++# CONFIG_CRYPTO is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++CONFIG_CRC32=y
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_PLIST=y
++CONFIG_IOMAP_COPY=y
+diff --git a/arch/arm/configs/csb337_defconfig b/arch/arm/configs/csb337_defconfig
+index 88e5d28..fcc0b69 100644
+--- a/arch/arm/configs/csb337_defconfig
++++ b/arch/arm/configs/csb337_defconfig
+@@ -657,14 +657,14 @@ CONFIG_I2C_CHARDEV=y
+ #
+ # I2C Algorithms
+ #
+-# CONFIG_I2C_ALGOBIT is not set
++CONFIG_I2C_ALGOBIT=y
+ # CONFIG_I2C_ALGOPCF is not set
+ # CONFIG_I2C_ALGOPCA is not set
+
+ #
+ # I2C Hardware Bus support
+ #
+-CONFIG_I2C_AT91=y
++CONFIG_I2C_GPIO=y
+ # CONFIG_I2C_PARPORT_LIGHT is not set
+ # CONFIG_I2C_STUB is not set
+ # CONFIG_I2C_PCA_ISA is not set
+diff --git a/arch/arm/configs/csb637_defconfig b/arch/arm/configs/csb637_defconfig
+index 669f035..bffe63b 100644
+--- a/arch/arm/configs/csb637_defconfig
++++ b/arch/arm/configs/csb637_defconfig
+@@ -658,14 +658,14 @@ CONFIG_I2C_CHARDEV=y
+ #
+ # I2C Algorithms
+ #
+-# CONFIG_I2C_ALGOBIT is not set
++CONFIG_I2C_ALGOBIT=y
+ # CONFIG_I2C_ALGOPCF is not set
+ # CONFIG_I2C_ALGOPCA is not set
+
+ #
+ # I2C Hardware Bus support
+ #
+-CONFIG_I2C_AT91=y
++CONFIG_I2C_GPIO=y
+ # CONFIG_I2C_PARPORT_LIGHT is not set
+ # CONFIG_I2C_STUB is not set
+ # CONFIG_I2C_PCA_ISA is not set
+diff --git a/arch/arm/configs/ecbat91_defconfig b/arch/arm/configs/ecbat91_defconfig
+new file mode 100644
+index 0000000..90ed214
+--- /dev/null
++++ b/arch/arm/configs/ecbat91_defconfig
+@@ -0,0 +1,1315 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.22-rc4
++# Sat Jun 9 01:30:18 2007
++#
++CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_GENERIC_GPIO=y
++# CONFIG_GENERIC_TIME is not set
++# CONFIG_GENERIC_CLOCKEVENTS is not set
++CONFIG_MMU=y
++# CONFIG_NO_IOPORT is not set
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ZONE_DMA=y
++CONFIG_VECTORS_BASE=0xffff0000
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_LOCK_KERNEL=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++
++#
++# General setup
++#
++CONFIG_LOCALVERSION=""
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++# CONFIG_IPC_NS is not set
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_UTS_NS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=14
++CONFIG_SYSFS_DEPRECATED=y
++# CONFIG_RELAY is not set
++# CONFIG_BLK_DEV_INITRD is not set
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_SYSCTL=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_ANON_INODES=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++
++#
++# Block layer
++#
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++# CONFIG_IOSCHED_DEADLINE is not set
++# CONFIG_IOSCHED_CFQ is not set
++CONFIG_DEFAULT_AS=y
++# CONFIG_DEFAULT_DEADLINE is not set
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="anticipatory"
++
++#
++# System Type
++#
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_VERSATILE is not set
++CONFIG_ARCH_AT91=y
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_NETX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_IOP13XX is not set
++# CONFIG_ARCH_IOP32X is not set
++# CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IXP23XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++
++#
++# Atmel AT91 System-on-Chip
++#
++CONFIG_ARCH_AT91RM9200=y
++# CONFIG_ARCH_AT91SAM9260 is not set
++# CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9263 is not set
++# CONFIG_ARCH_AT91SAM9RL is not set
++
++#
++# AT91RM9200 Board Type
++#
++# CONFIG_MACH_ONEARM is not set
++# CONFIG_ARCH_AT91RM9200DK is not set
++# CONFIG_MACH_AT91RM9200EK is not set
++# CONFIG_MACH_CSB337 is not set
++# CONFIG_MACH_CSB637 is not set
++# CONFIG_MACH_CARMEVA is not set
++# CONFIG_MACH_ATEB9200 is not set
++# CONFIG_MACH_KB9200 is not set
++# CONFIG_MACH_PICOTUX2XX is not set
++# CONFIG_MACH_KAFA is not set
++# CONFIG_MACH_CHUB is not set
++CONFIG_MACH_ECBAT91=y
++
++#
++# AT91 Board Options
++#
++# CONFIG_MTD_AT91_DATAFLASH_CARD is not set
++
++#
++# AT91 Feature Selections
++#
++CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
++# CONFIG_ATMEL_TCLIB is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM920T=y
++CONFIG_CPU_32v4T=y
++CONFIG_CPU_ABRT_EV4T=y
++CONFIG_CPU_CACHE_V4WT=y
++CONFIG_CPU_CACHE_VIVT=y
++CONFIG_CPU_COPY_V4WB=y
++CONFIG_CPU_TLB_V4WBI=y
++CONFIG_CPU_CP15=y
++CONFIG_CPU_CP15_MMU=y
++
++#
++# Processor Features
++#
++CONFIG_ARM_THUMB=y
++# CONFIG_CPU_ICACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
++# CONFIG_OUTER_CACHE is not set
++
++#
++# Bus support
++#
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++CONFIG_PCCARD=y
++# CONFIG_PCMCIA_DEBUG is not set
++CONFIG_PCMCIA=y
++CONFIG_PCMCIA_LOAD_CIS=y
++CONFIG_PCMCIA_IOCTL=y
++
++#
++# PC-card bridges
++#
++CONFIG_AT91_CF=y
++
++#
++# Kernel Features
++#
++# CONFIG_TICK_ONESHOT is not set
++CONFIG_PREEMPT=y
++# CONFIG_NO_IDLE_HZ is not set
++CONFIG_HZ=100
++# CONFIG_AEABI is not set
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_LEDS=y
++CONFIG_LEDS_TIMER=y
++CONFIG_LEDS_CPU=y
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE="rootfstype=reiserfs root=/dev/mmcblk0p1 console=ttyS0,115200n8 rootdelay=1"
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_ARTHUR is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_XFRM_MIGRATE is not set
++# CONFIG_NET_KEY is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_PNP=y
++CONFIG_IP_PNP_DHCP=y
++# CONFIG_IP_PNP_BOOTP is not set
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++CONFIG_INET_XFRM_MODE_TRANSPORT=y
++CONFIG_INET_XFRM_MODE_TUNNEL=y
++CONFIG_INET_XFRM_MODE_BEET=y
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++# CONFIG_IP_DCCP is not set
++# CONFIG_IP_SCTP is not set
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++CONFIG_NET_SCH_FIFO=y
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++
++#
++# Wireless
++#
++CONFIG_CFG80211=y
++CONFIG_WIRELESS_EXT=y
++CONFIG_MAC80211=y
++# CONFIG_MAC80211_DEBUG is not set
++CONFIG_IEEE80211=y
++# CONFIG_IEEE80211_DEBUG is not set
++CONFIG_IEEE80211_CRYPT_WEP=y
++# CONFIG_IEEE80211_CRYPT_CCMP is not set
++# CONFIG_IEEE80211_CRYPT_TKIP is not set
++CONFIG_IEEE80211_SOFTMAC=y
++CONFIG_IEEE80211_SOFTMAC_DEBUG=y
++# CONFIG_RFKILL is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++# CONFIG_STANDALONE is not set
++# CONFIG_PREVENT_FIRMWARE_BUILD is not set
++CONFIG_FW_LOADER=y
++# CONFIG_SYS_HYPERVISOR is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++CONFIG_MTD_AFS_PARTS=y
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++# CONFIG_MTD_CFI is not set
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++CONFIG_MTD_DATAFLASH=y
++# CONFIG_MTD_M25P80 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++# CONFIG_MTD_NAND is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# UBI - Unsorted block images
++#
++# CONFIG_MTD_UBI is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play support
++#
++# CONFIG_PNPACPI is not set
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_UB is not set
++# CONFIG_BLK_DEV_RAM is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++# CONFIG_IDE is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++CONFIG_SCSI_PROC_FS=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++CONFIG_CHR_DEV_SG=y
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++# CONFIG_SCSI_MULTI_LUN is not set
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++
++#
++# SCSI low-level drivers
++#
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_SCSI_DEBUG is not set
++
++#
++# PCMCIA SCSI adapter support
++#
++# CONFIG_PCMCIA_AHA152X is not set
++# CONFIG_PCMCIA_FDOMAIN is not set
++# CONFIG_PCMCIA_NINJA_SCSI is not set
++# CONFIG_PCMCIA_QLOGIC is not set
++# CONFIG_PCMCIA_SYM53C500 is not set
++# CONFIG_ATA is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_PHYLIB is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_ARM_AT91_ETHER=y
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++# CONFIG_NETDEV_1000 is not set
++# CONFIG_NETDEV_10000 is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++# CONFIG_WLAN_80211 is not set
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET_MII is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_NET_PCMCIA is not set
++# CONFIG_WAN is not set
++CONFIG_PPP=y
++CONFIG_PPP_MULTILINK=y
++CONFIG_PPP_FILTER=y
++CONFIG_PPP_ASYNC=y
++# CONFIG_PPP_SYNC_TTY is not set
++# CONFIG_PPP_DEFLATE is not set
++# CONFIG_PPP_BSDCOMP is not set
++# CONFIG_PPP_MPPE is not set
++# CONFIG_PPPOE is not set
++# CONFIG_SLIP is not set
++CONFIG_SLHC=y
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_TSDEV is not set
++# CONFIG_INPUT_EVDEV is not set
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++# CONFIG_INPUT_KEYBOARD is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++# CONFIG_SERIO is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_ATMEL=y
++CONFIG_SERIAL_ATMEL_CONSOLE=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=256
++
++#
++# IPMI
++#
++# CONFIG_IPMI_HANDLER is not set
++CONFIG_WATCHDOG=y
++CONFIG_WATCHDOG_NOWAYOUT=y
++
++#
++# Watchdog Device Drivers
++#
++# CONFIG_SOFT_WATCHDOG is not set
++# CONFIG_AT91RM9200_WATCHDOG is not set
++
++#
++# USB-based Watchdog Cards
++#
++# CONFIG_USBPCWATCHDOG is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_NVRAM is not set
++# CONFIG_R3964 is not set
++
++#
++# PCMCIA character devices
++#
++# CONFIG_SYNCLINK_CS is not set
++# CONFIG_CARDMAN_4000 is not set
++# CONFIG_CARDMAN_4040 is not set
++# CONFIG_RAW_DRIVER is not set
++
++#
++# TPM devices
++#
++# CONFIG_TCG_TPM is not set
++# CONFIG_AT91_SPI is not set
++CONFIG_I2C=y
++CONFIG_I2C_BOARDINFO=y
++CONFIG_I2C_CHARDEV=y
++
++#
++# I2C Algorithms
++#
++CONFIG_I2C_ALGOBIT=y
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_ALGOPCA is not set
++
++#
++# I2C Hardware Bus support
++#
++CONFIG_I2C_GPIO=y
++# CONFIG_I2C_GPIO is not set
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_SIMTEC is not set
++# CONFIG_I2C_STUB is not set
++# CONFIG_I2C_TINY_USB is not set
++# CONFIG_I2C_PCA is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_SENSORS_DS1337 is not set
++# CONFIG_SENSORS_DS1374 is not set
++# CONFIG_SENSORS_EEPROM is not set
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++# CONFIG_SENSORS_PCF8591 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++
++#
++# SPI support
++#
++CONFIG_SPI=y
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++# CONFIG_SPI_ATMEL is not set
++CONFIG_SPI_BITBANG=y
++CONFIG_SPI_AT91=y
++
++#
++# SPI Protocol Masters
++#
++# CONFIG_SPI_AT25 is not set
++# CONFIG_SPI_SPIDEV is not set
++
++#
++# Dallas's 1-wire bus
++#
++# CONFIG_W1 is not set
++CONFIG_HWMON=y
++# CONFIG_HWMON_VID is not set
++# CONFIG_SENSORS_ABITUGURU is not set
++# CONFIG_SENSORS_AD7418 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_ASB100 is not set
++# CONFIG_SENSORS_ATXP1 is not set
++# CONFIG_SENSORS_DS1621 is not set
++# CONFIG_SENSORS_F71805F is not set
++# CONFIG_SENSORS_FSCHER is not set
++# CONFIG_SENSORS_FSCPOS is not set
++# CONFIG_SENSORS_GL518SM is not set
++# CONFIG_SENSORS_GL520SM is not set
++# CONFIG_SENSORS_IT87 is not set
++# CONFIG_SENSORS_LM63 is not set
++# CONFIG_SENSORS_LM70 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_MAX1619 is not set
++# CONFIG_SENSORS_MAX6650 is not set
++# CONFIG_SENSORS_PC87360 is not set
++# CONFIG_SENSORS_PC87427 is not set
++# CONFIG_SENSORS_SMSC47M1 is not set
++# CONFIG_SENSORS_SMSC47M192 is not set
++# CONFIG_SENSORS_SMSC47B397 is not set
++# CONFIG_SENSORS_VT1211 is not set
++# CONFIG_SENSORS_W83781D is not set
++# CONFIG_SENSORS_W83791D is not set
++# CONFIG_SENSORS_W83792D is not set
++# CONFIG_SENSORS_W83793 is not set
++# CONFIG_SENSORS_W83L785TS is not set
++# CONFIG_SENSORS_W83627HF is not set
++# CONFIG_SENSORS_W83627EHF is not set
++# CONFIG_HWMON_DEBUG_CHIP is not set
++
++#
++# Misc devices
++#
++# CONFIG_BLINK is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++
++#
++# LED devices
++#
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++
++#
++# LED Triggers
++#
++# CONFIG_LEDS_TRIGGERS is not set
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++CONFIG_DAB=y
++# CONFIG_USB_DABUSB is not set
++
++#
++# Graphics support
++#
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
++# CONFIG_VGASTATE is not set
++# CONFIG_FB is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++
++#
++# HID Devices
++#
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++
++#
++# USB Input Devices
++#
++# CONFIG_USB_HID is not set
++
++#
++# USB HID Boot Protocol drivers
++#
++# CONFIG_USB_KBD is not set
++# CONFIG_USB_MOUSE is not set
++
++#
++# USB support
++#
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB_ARCH_HAS_EHCI is not set
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_DEVICE_CLASS is not set
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_OTG is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_ISP116X_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SL811_HCD is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++CONFIG_USB_PRINTER=y
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# may also be needed; see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++# CONFIG_USB_MON is not set
++
++#
++# USB port drivers
++#
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGET is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
++
++#
++# USB DSL modem support
++#
++
++#
++# USB Gadget Support
++#
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_FSL_USB2 is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_PXA2XX is not set
++# CONFIG_USB_GADGET_GOKU is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++CONFIG_USB_GADGET_AT91=y
++CONFIG_USB_AT91=y
++# CONFIG_USB_GADGET_DUMMY_HCD is not set
++# CONFIG_USB_GADGET_DUALSPEED is not set
++# CONFIG_USB_ZERO is not set
++# CONFIG_USB_ETH is not set
++# CONFIG_USB_GADGETFS is not set
++# CONFIG_USB_FILE_STORAGE is not set
++# CONFIG_USB_G_SERIAL is not set
++# CONFIG_USB_MIDI_GADGET is not set
++CONFIG_MMC=y
++CONFIG_MMC_DEBUG=y
++# CONFIG_MMC_UNSAFE_RESUME is not set
++
++#
++# MMC/SD Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++
++#
++# MMC/SD Host Controller Drivers
++#
++CONFIG_MMC_AT91=y
++
++#
++# Real Time Clock
++#
++CONFIG_RTC_LIB=y
++CONFIG_RTC_CLASS=y
++# CONFIG_RTC_HCTOSYS is not set
++# CONFIG_RTC_DEBUG is not set
++
++#
++# RTC interfaces
++#
++CONFIG_RTC_INTF_SYSFS=y
++CONFIG_RTC_INTF_PROC=y
++CONFIG_RTC_INTF_DEV=y
++# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
++# CONFIG_RTC_DRV_TEST is not set
++
++#
++# I2C RTC drivers
++#
++# CONFIG_RTC_DRV_DS1307 is not set
++# CONFIG_RTC_DRV_DS1672 is not set
++# CONFIG_RTC_DRV_MAX6900 is not set
++# CONFIG_RTC_DRV_RS5C372 is not set
++# CONFIG_RTC_DRV_ISL1208 is not set
++# CONFIG_RTC_DRV_X1205 is not set
++# CONFIG_RTC_DRV_PCF8563 is not set
++# CONFIG_RTC_DRV_PCF8583 is not set
++
++#
++# SPI RTC drivers
++#
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++# CONFIG_RTC_DRV_DS1553 is not set
++# CONFIG_RTC_DRV_DS1742 is not set
++# CONFIG_RTC_DRV_M48T86 is not set
++# CONFIG_RTC_DRV_V3020 is not set
++
++#
++# on-CPU RTC drivers
++#
++CONFIG_RTC_DRV_AT91RM9200=y
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_XATTR=y
++# CONFIG_EXT3_FS_POSIX_ACL is not set
++# CONFIG_EXT3_FS_SECURITY is not set
++# CONFIG_EXT4DEV_FS is not set
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FS_MBCACHE=y
++CONFIG_REISERFS_FS=y
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++# CONFIG_REISERFS_FS_XATTR is not set
++# CONFIG_JFS_FS is not set
++CONFIG_FS_POSIX_ACL=y
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++# CONFIG_MSDOS_FS is not set
++# CONFIG_VFAT_FS is not set
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++CONFIG_CONFIGFS_FS=y
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS2_FS is not set
++CONFIG_CRAMFS=y
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++CONFIG_NFS_V3_ACL=y
++CONFIG_NFS_V4=y
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_ACL_SUPPORT=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++CONFIG_SUNRPC_GSS=y
++# CONFIG_SUNRPC_BIND34 is not set
++CONFIG_RPCSEC_GSS_KRB5=y
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
++
++#
++# Partition Types
++#
++CONFIG_PARTITION_ADVANCED=y
++# CONFIG_ACORN_PARTITION is not set
++# CONFIG_OSF_PARTITION is not set
++# CONFIG_AMIGA_PARTITION is not set
++# CONFIG_ATARI_PARTITION is not set
++# CONFIG_MAC_PARTITION is not set
++CONFIG_MSDOS_PARTITION=y
++# CONFIG_BSD_DISKLABEL is not set
++# CONFIG_MINIX_SUBPARTITION is not set
++# CONFIG_SOLARIS_X86_PARTITION is not set
++# CONFIG_UNIXWARE_DISKLABEL is not set
++# CONFIG_LDM_PARTITION is not set
++# CONFIG_SGI_PARTITION is not set
++# CONFIG_ULTRIX_PARTITION is not set
++# CONFIG_SUN_PARTITION is not set
++# CONFIG_KARMA_PARTITION is not set
++# CONFIG_EFI_PARTITION is not set
++# CONFIG_SYSV68_PARTITION is not set
++
++#
++# Native Language Support
++#
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++# 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_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++# CONFIG_NLS_ISO8859_1 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_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++
++#
++# Distributed Lock Manager
++#
++# CONFIG_DLM is not set
++
++#
++# Profiling support
++#
++# CONFIG_PROFILING is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_MUST_CHECK=y
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
++# CONFIG_DEBUG_KERNEL is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++CONFIG_FRAME_POINTER=y
++CONFIG_DEBUG_USER=y
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++
++#
++# Cryptographic options
++#
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_MANAGER=y
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_SHA1=y
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_GF128MUL is not set
++CONFIG_CRYPTO_ECB=y
++CONFIG_CRYPTO_CBC=y
++CONFIG_CRYPTO_PCBC=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_CRYPTD is not set
++CONFIG_CRYPTO_DES=y
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++CONFIG_CRYPTO_AES=y
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++CONFIG_CRYPTO_ARC4=y
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Hardware crypto devices
++#
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_CRC_CCITT=y
++# CONFIG_CRC16 is not set
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
+diff --git a/arch/arm/configs/homematic_defconfig b/arch/arm/configs/homematic_defconfig
+new file mode 100644
+index 0000000..ed1c2eb
+--- /dev/null
++++ b/arch/arm/configs/homematic_defconfig
+@@ -0,0 +1,1263 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.21.3
++# Mon Jun 18 12:28:42 2007
++#
++CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_GENERIC_GPIO=y
++# CONFIG_GENERIC_TIME is not set
++CONFIG_MMU=y
++# CONFIG_NO_IOPORT is not set
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ZONE_DMA=y
++CONFIG_VECTORS_BASE=0xffff0000
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++
++#
++# General setup
++#
++CONFIG_LOCALVERSION=""
++CONFIG_LOCALVERSION_AUTO=y
++# CONFIG_SWAP is not set
++CONFIG_SYSVIPC=y
++# CONFIG_IPC_NS is not set
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_UTS_NS is not set
++# CONFIG_AUDIT is not set
++# CONFIG_IKCONFIG is not set
++# CONFIG_SYSFS_DEPRECATED is not set
++# CONFIG_RELAY is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_SYSCTL=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_EPOLL=y
++CONFIG_SHMEM=y
++CONFIG_SLAB=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++# CONFIG_SLOB is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++
++#
++# Block layer
++#
++CONFIG_BLOCK=y
++# CONFIG_LBD is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++# CONFIG_IOSCHED_AS is not set
++CONFIG_IOSCHED_DEADLINE=y
++# CONFIG_IOSCHED_CFQ is not set
++# CONFIG_DEFAULT_AS is not set
++CONFIG_DEFAULT_DEADLINE=y
++# CONFIG_DEFAULT_CFQ is not set
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="deadline"
++
++#
++# System Type
++#
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_VERSATILE is not set
++CONFIG_ARCH_AT91=y
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_NETX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_IOP32X is not set
++# CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IOP13XX is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_IXP23XX is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_OMAP is not set
++
++#
++# Atmel AT91 System-on-Chip
++#
++CONFIG_ARCH_AT91RM9200=y
++# CONFIG_ARCH_AT91SAM9260 is not set
++# CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9263 is not set
++# CONFIG_ARCH_AT91SAM9RL is not set
++
++#
++# AT91RM9200 Board Type
++#
++# CONFIG_MACH_ONEARM is not set
++# CONFIG_ARCH_AT91RM9200DK is not set
++# CONFIG_MACH_AT91RM9200EK is not set
++# CONFIG_MACH_CSB337 is not set
++# CONFIG_MACH_CSB637 is not set
++# CONFIG_MACH_CARMEVA is not set
++# CONFIG_MACH_ATEB9200 is not set
++# CONFIG_MACH_KB9200 is not set
++# CONFIG_MACH_KAFA is not set
++# CONFIG_MACH_CHUB is not set
++CONFIG_MACH_HOMEMATIC=y
++
++#
++# AT91 Board Options
++#
++
++#
++# AT91 Feature Selections
++#
++# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
++# CONFIG_ATMEL_TCLIB is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM920T=y
++CONFIG_CPU_32v4T=y
++CONFIG_CPU_ABRT_EV4T=y
++CONFIG_CPU_CACHE_V4WT=y
++CONFIG_CPU_CACHE_VIVT=y
++CONFIG_CPU_COPY_V4WB=y
++CONFIG_CPU_TLB_V4WBI=y
++CONFIG_CPU_CP15=y
++CONFIG_CPU_CP15_MMU=y
++
++#
++# Processor Features
++#
++CONFIG_ARM_THUMB=y
++# CONFIG_CPU_ICACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
++# CONFIG_OUTER_CACHE is not set
++
++#
++# Bus support
++#
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++# CONFIG_PREEMPT is not set
++# CONFIG_NO_IDLE_HZ is not set
++CONFIG_HZ=100
++# CONFIG_AEABI is not set
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++# CONFIG_LEDS is not set
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE=""
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_ARTHUR is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++# CONFIG_NETDEBUG is not set
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++# CONFIG_NET_KEY is not set
++CONFIG_INET=y
++CONFIG_IP_MULTICAST=y
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_PNP=y
++CONFIG_IP_PNP_DHCP=y
++# CONFIG_IP_PNP_BOOTP is not set
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_IP_MROUTE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_BEET is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++
++#
++# DCCP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP is not set
++
++#
++# SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++
++#
++# TIPC Configuration (EXPERIMENTAL)
++#
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++CONFIG_IEEE80211=m
++# CONFIG_IEEE80211_DEBUG is not set
++CONFIG_IEEE80211_CRYPT_WEP=m
++CONFIG_IEEE80211_CRYPT_CCMP=m
++CONFIG_IEEE80211_CRYPT_TKIP=m
++CONFIG_IEEE80211_SOFTMAC=m
++# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
++CONFIG_WIRELESS_EXT=y
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++# CONFIG_SYS_HYPERVISOR is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++# CONFIG_MTD_CFI is not set
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++# CONFIG_MTD_OBSOLETE_CHIPS is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++CONFIG_MTD_AT91_DATAFLASH=y
++
++#
++# NAND Flash Device Drivers
++#
++CONFIG_MTD_NAND=y
++# CONFIG_MTD_NAND_VERIFY_WRITE is not set
++# CONFIG_MTD_NAND_ECC_SMC is not set
++CONFIG_MTD_NAND_IDS=y
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++CONFIG_MTD_NAND_AT91=y
++# CONFIG_MTD_NAND_NANDSIM is not set
++
++#
++# OneNAND Flash Device Drivers
++#
++# CONFIG_MTD_ONENAND is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play support
++#
++# CONFIG_PNPACPI is not set
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_COW_COMMON is not set
++# CONFIG_BLK_DEV_LOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_UB is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=4096
++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++# CONFIG_SCSI_PROC_FS is not set
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++# CONFIG_CHR_DEV_SG is not set
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++# CONFIG_SCSI_MULTI_LUN is not set
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++
++#
++# SCSI low-level drivers
++#
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_SCSI_DEBUG is not set
++
++#
++# Serial ATA (prod) and Parallel ATA (experimental) drivers
++#
++# CONFIG_ATA is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++
++#
++# I2O device support
++#
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++
++#
++# PHY device support
++#
++# CONFIG_PHYLIB is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_ARM_AT91_ETHER=y
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++
++#
++# Ethernet (10000 Mbit)
++#
++
++#
++# Token Ring devices
++#
++
++#
++# Wireless LAN (non-hamradio)
++#
++CONFIG_NET_RADIO=y
++# CONFIG_NET_WIRELESS_RTNETLINK is not set
++
++#
++# Obsolete Wireless cards support (pre-802.11)
++#
++# CONFIG_STRIP is not set
++# CONFIG_USB_ZD1201 is not set
++# CONFIG_HOSTAP is not set
++CONFIG_ZD1211RW=m
++# CONFIG_ZD1211RW_DEBUG is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_TSDEV is not set
++# CONFIG_INPUT_EVDEV is not set
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++CONFIG_KEYBOARD_ATKBD=y
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++# CONFIG_KEYBOARD_STOWAWAY is not set
++# CONFIG_KEYBOARD_GPIO is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++CONFIG_SERIO_SERPORT=y
++CONFIG_SERIO_LIBPS2=y
++# CONFIG_SERIO_RAW is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_ATMEL=y
++CONFIG_SERIAL_ATMEL_CONSOLE=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=256
++
++#
++# IPMI
++#
++# CONFIG_IPMI_HANDLER is not set
++
++#
++# Watchdog Cards
++#
++CONFIG_WATCHDOG=y
++CONFIG_WATCHDOG_NOWAYOUT=y
++
++#
++# Watchdog Device Drivers
++#
++# CONFIG_SOFT_WATCHDOG is not set
++CONFIG_AT91RM9200_WATCHDOG=y
++
++#
++# USB-based Watchdog Cards
++#
++# CONFIG_USBPCWATCHDOG is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_NVRAM is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++
++#
++# TPM devices
++#
++# CONFIG_TCG_TPM is not set
++CONFIG_AT91_SPI=y
++# CONFIG_AT91_SPIDEV is not set
++
++#
++# I2C support
++#
++CONFIG_I2C=y
++CONFIG_I2C_CHARDEV=m
++
++#
++# I2C Algorithms
++#
++# CONFIG_I2C_ALGOBIT is not set
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_ALGOPCA is not set
++
++#
++# I2C Hardware Bus support
++#
++# CONFIG_I2C_AT91 is not set
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_STUB is not set
++# CONFIG_I2C_PCA is not set
++# CONFIG_I2C_PCA_ISA is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_SENSORS_DS1337 is not set
++# CONFIG_SENSORS_DS1374 is not set
++# CONFIG_SENSORS_EEPROM is not set
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++# CONFIG_SENSORS_PCF8591 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++
++#
++# SPI support
++#
++# CONFIG_SPI is not set
++# CONFIG_SPI_MASTER is not set
++
++#
++# Dallas's 1-wire bus
++#
++# CONFIG_W1 is not set
++
++#
++# Hardware Monitoring support
++#
++# CONFIG_HWMON is not set
++# CONFIG_HWMON_VID is not set
++
++#
++# Misc devices
++#
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++
++#
++# LED devices
++#
++# CONFIG_NEW_LEDS is not set
++
++#
++# LED drivers
++#
++
++#
++# LED Triggers
++#
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# Digital Video Broadcasting Devices
++#
++# CONFIG_DVB is not set
++# CONFIG_USB_DABUSB is not set
++
++#
++# Graphics support
++#
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++# CONFIG_FB is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++
++#
++# HID Devices
++#
++# CONFIG_HID is not set
++
++#
++# USB support
++#
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB_ARCH_HAS_EHCI is not set
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_OTG is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_ISP116X_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SL811_HCD is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# may also be needed; see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Input Devices
++#
++# CONFIG_USB_HID is not set
++
++#
++# USB HID Boot Protocol drivers
++#
++# CONFIG_USB_KBD is not set
++# CONFIG_USB_MOUSE is not set
++# CONFIG_USB_AIPTEK is not set
++# CONFIG_USB_WACOM is not set
++# CONFIG_USB_ACECAD is not set
++# CONFIG_USB_KBTAB is not set
++# CONFIG_USB_POWERMATE is not set
++# CONFIG_USB_TOUCHSCREEN is not set
++# CONFIG_USB_YEALINK is not set
++# CONFIG_USB_XPAD is not set
++# CONFIG_USB_ATI_REMOTE is not set
++# CONFIG_USB_ATI_REMOTE2 is not set
++# CONFIG_USB_KEYSPAN_REMOTE is not set
++# CONFIG_USB_APPLETOUCH is not set
++# CONFIG_USB_GTCO is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET_MII is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_USB_MON is not set
++
++#
++# USB port drivers
++#
++
++#
++# USB Serial Converter support
++#
++CONFIG_USB_SERIAL=m
++# CONFIG_USB_SERIAL_GENERIC is not set
++# CONFIG_USB_SERIAL_AIRCABLE is not set
++# CONFIG_USB_SERIAL_AIRPRIME is not set
++# CONFIG_USB_SERIAL_ARK3116 is not set
++# CONFIG_USB_SERIAL_BELKIN is not set
++# CONFIG_USB_SERIAL_WHITEHEAT is not set
++# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
++# CONFIG_USB_SERIAL_CP2101 is not set
++# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
++# CONFIG_USB_SERIAL_EMPEG is not set
++CONFIG_USB_SERIAL_FTDI_SIO=m
++# CONFIG_USB_SERIAL_FUNSOFT is not set
++# CONFIG_USB_SERIAL_VISOR is not set
++# CONFIG_USB_SERIAL_IPAQ is not set
++# CONFIG_USB_SERIAL_IR is not set
++# CONFIG_USB_SERIAL_EDGEPORT is not set
++# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
++# CONFIG_USB_SERIAL_GARMIN is not set
++# CONFIG_USB_SERIAL_IPW is not set
++# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
++# CONFIG_USB_SERIAL_KEYSPAN is not set
++# 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_NAVMAN is not set
++# CONFIG_USB_SERIAL_PL2303 is not set
++# CONFIG_USB_SERIAL_HP4X is not set
++# CONFIG_USB_SERIAL_SAFE is not set
++# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
++# CONFIG_USB_SERIAL_TI is not set
++# CONFIG_USB_SERIAL_CYBERJACK is not set
++# CONFIG_USB_SERIAL_XIRCOM is not set
++# CONFIG_USB_SERIAL_OPTION is not set
++# CONFIG_USB_SERIAL_OMNINET is not set
++# CONFIG_USB_SERIAL_DEBUG is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGET is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
++
++#
++# USB DSL modem support
++#
++
++#
++# USB Gadget Support
++#
++CONFIG_USB_GADGET=m
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_PXA2XX is not set
++# CONFIG_USB_GADGET_GOKU is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++CONFIG_USB_GADGET_AT91=y
++CONFIG_USB_AT91=m
++# CONFIG_USB_GADGET_DUMMY_HCD is not set
++# CONFIG_USB_GADGET_DUALSPEED is not set
++CONFIG_USB_ZERO=m
++CONFIG_USB_ETH=m
++CONFIG_USB_ETH_RNDIS=y
++CONFIG_USB_GADGETFS=m
++CONFIG_USB_FILE_STORAGE=m
++CONFIG_USB_FILE_STORAGE_TEST=y
++CONFIG_USB_G_SERIAL=m
++# CONFIG_USB_MIDI_GADGET is not set
++
++#
++# MMC/SD Card support
++#
++# CONFIG_MMC is not set
++
++#
++# Real Time Clock
++#
++CONFIG_RTC_LIB=y
++# CONFIG_RTC_CLASS is not set
++
++#
++# File systems
++#
++# CONFIG_EXT2_FS is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_EXT4DEV_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++CONFIG_MINIX_FS=y
++# CONFIG_ROMFS_FS is not set
++# CONFIG_INOTIFY is not set
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=m
++CONFIG_MSDOS_FS=m
++CONFIG_VFAT_FS=m
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_YAFFS_FS=y
++CONFIG_YAFFS_YAFFS1=y
++# CONFIG_YAFFS_DOES_ECC is not set
++CONFIG_YAFFS_YAFFS2=y
++CONFIG_YAFFS_AUTO_YAFFS2=y
++# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
++CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10
++# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
++# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
++CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_SUMMARY is not set
++# CONFIG_JFFS2_FS_XATTR is not set
++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
++CONFIG_JFFS2_ZLIB=y
++CONFIG_JFFS2_RTIME=y
++# CONFIG_JFFS2_RUBIN is not set
++CONFIG_CRAMFS=y
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS=m
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=m
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++CONFIG_NLS_CODEPAGE_850=m
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=m
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++
++#
++# Distributed Lock Manager
++#
++# CONFIG_DLM is not set
++
++#
++# Profiling support
++#
++# CONFIG_PROFILING is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_MUST_CHECK=y
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
++# CONFIG_DEBUG_KERNEL is not set
++CONFIG_LOG_BUF_SHIFT=14
++CONFIG_DEBUG_BUGVERBOSE=y
++CONFIG_FRAME_POINTER=y
++# CONFIG_DEBUG_USER is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++
++#
++# Cryptographic options
++#
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=m
++CONFIG_CRYPTO_BLKCIPHER=m
++CONFIG_CRYPTO_MANAGER=m
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_GF128MUL is not set
++CONFIG_CRYPTO_ECB=m
++CONFIG_CRYPTO_CBC=m
++CONFIG_CRYPTO_PCBC=m
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++CONFIG_CRYPTO_AES=m
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++CONFIG_CRYPTO_ARC4=m
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++# CONFIG_CRYPTO_DEFLATE is not set
++CONFIG_CRYPTO_MICHAEL_MIC=m
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Hardware crypto devices
++#
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++CONFIG_CRC32=y
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
+diff --git a/arch/arm/configs/kafa_defconfig b/arch/arm/configs/kafa_defconfig
+index a0f48d5..ae51a40 100644
+--- a/arch/arm/configs/kafa_defconfig
++++ b/arch/arm/configs/kafa_defconfig
+@@ -587,14 +587,14 @@ CONFIG_I2C_CHARDEV=y
+ #
+ # I2C Algorithms
+ #
+-# CONFIG_I2C_ALGOBIT is not set
++CONFIG_I2C_ALGOBIT=y
+ # CONFIG_I2C_ALGOPCF is not set
+ # CONFIG_I2C_ALGOPCA is not set
+
+ #
+ # I2C Hardware Bus support
+ #
+-CONFIG_I2C_AT91=y
++CONFIG_I2C_GPIO=y
+ # CONFIG_I2C_PARPORT_LIGHT is not set
+ # CONFIG_I2C_STUB is not set
+ # CONFIG_I2C_PCA_ISA is not set
+diff --git a/arch/arm/configs/kb9202_defconfig b/arch/arm/configs/kb9202_defconfig
+index c16537d..dad203e 100644
+--- a/arch/arm/configs/kb9202_defconfig
++++ b/arch/arm/configs/kb9202_defconfig
+@@ -1,19 +1,31 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.13-rc2
+-# Sun Aug 14 19:26:59 2005
++# Linux kernel version: 2.6.21
++# Mon May 7 11:43:14 2007
+ #
+ CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_GENERIC_GPIO=y
++# CONFIG_GENERIC_TIME is not set
+ CONFIG_MMU=y
+-CONFIG_UID16=y
++# CONFIG_NO_IOPORT is not set
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
+ CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ZONE_DMA=y
++CONFIG_VECTORS_BASE=0xffff0000
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+ #
+ # Code maturity level options
+ #
+-# CONFIG_EXPERIMENTAL is not set
+-CONFIG_CLEAN_COMPILE=y
++CONFIG_EXPERIMENTAL=y
+ CONFIG_BROKEN_ON_SMP=y
+ CONFIG_INIT_ENV_ARG_LIMIT=32
+
+@@ -21,54 +33,103 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
+ # General setup
+ #
+ CONFIG_LOCALVERSION=""
+-# CONFIG_SWAP is not set
+-# CONFIG_SYSVIPC is not set
+-# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++# CONFIG_IPC_NS is not set
++CONFIG_SYSVIPC_SYSCTL=y
++CONFIG_POSIX_MQUEUE=y
++CONFIG_BSD_PROCESS_ACCT=y
++# CONFIG_BSD_PROCESS_ACCT_V3 is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_UTS_NS is not set
++CONFIG_AUDIT=y
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_SYSFS_DEPRECATED=y
++# CONFIG_RELAY is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+ CONFIG_SYSCTL=y
+-# CONFIG_AUDIT is not set
+-CONFIG_HOTPLUG=y
+-# CONFIG_KOBJECT_UEVENT is not set
+-# CONFIG_IKCONFIG is not set
+ # CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
+ CONFIG_KALLSYMS=y
+ # CONFIG_KALLSYMS_ALL is not set
+-# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_KALLSYMS_EXTRA_PASS=y
++CONFIG_HOTPLUG=y
+ CONFIG_PRINTK=y
+ CONFIG_BUG=y
++CONFIG_ELF_CORE=y
+ CONFIG_BASE_FULL=y
+ CONFIG_FUTEX=y
+ CONFIG_EPOLL=y
+-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+ CONFIG_SHMEM=y
+-CONFIG_CC_ALIGN_FUNCTIONS=0
+-CONFIG_CC_ALIGN_LABELS=0
+-CONFIG_CC_ALIGN_LOOPS=0
+-CONFIG_CC_ALIGN_JUMPS=0
++CONFIG_SLAB=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_RT_MUTEXES=y
+ # CONFIG_TINY_SHMEM is not set
+ CONFIG_BASE_SMALL=0
++# CONFIG_SLOB is not set
+
+ #
+ # Loadable module support
+ #
+ CONFIG_MODULES=y
+ CONFIG_MODULE_UNLOAD=y
+-CONFIG_OBSOLETE_MODPARM=y
+-# CONFIG_MODULE_SRCVERSION_ALL is not set
++# CONFIG_MODULE_FORCE_UNLOAD is not set
++CONFIG_MODVERSIONS=y
++CONFIG_MODULE_SRCVERSION_ALL=y
+ CONFIG_KMOD=y
+
+ #
++# Block layer
++#
++CONFIG_BLOCK=y
++CONFIG_LBD=y
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++# CONFIG_DEFAULT_AS is not set
++# CONFIG_DEFAULT_DEADLINE is not set
++CONFIG_DEFAULT_CFQ=y
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="cfq"
++
++#
+ # System Type
+ #
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_VERSATILE is not set
++CONFIG_ARCH_AT91=y
+ # CONFIG_ARCH_CLPS7500 is not set
+ # CONFIG_ARCH_CLPS711X is not set
+ # CONFIG_ARCH_CO285 is not set
+ # CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
+ # CONFIG_ARCH_FOOTBRIDGE is not set
+-# CONFIG_ARCH_INTEGRATOR is not set
+-# CONFIG_ARCH_IOP3XX is not set
++# CONFIG_ARCH_NETX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_IOP32X is not set
++# CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IOP13XX is not set
+ # CONFIG_ARCH_IXP4XX is not set
+ # CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_IXP23XX is not set
+ # CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_PNX4008 is not set
+ # CONFIG_ARCH_PXA is not set
+ # CONFIG_ARCH_RPC is not set
+ # CONFIG_ARCH_SA1100 is not set
+@@ -76,34 +137,52 @@ CONFIG_KMOD=y
+ # CONFIG_ARCH_SHARK is not set
+ # CONFIG_ARCH_LH7A40X is not set
+ # CONFIG_ARCH_OMAP is not set
+-# CONFIG_ARCH_VERSATILE is not set
+-# CONFIG_ARCH_IMX is not set
+-# CONFIG_ARCH_H720X is not set
+-# CONFIG_ARCH_AAEC2000 is not set
+-CONFIG_ARCH_AT91=y
++
++#
++# Atmel AT91 System-on-Chip
++#
+ CONFIG_ARCH_AT91RM9200=y
++# CONFIG_ARCH_AT91SAM9260 is not set
++# CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9263 is not set
+
+ #
+-# AT91RM9200 Implementations
++# AT91RM9200 Board Type
+ #
++# CONFIG_MACH_ONEARM is not set
+ # CONFIG_ARCH_AT91RM9200DK is not set
+ # CONFIG_MACH_AT91RM9200EK is not set
+ # CONFIG_MACH_CSB337 is not set
+ # CONFIG_MACH_CSB637 is not set
+ # CONFIG_MACH_CARMEVA is not set
++# CONFIG_MACH_ATEB9200 is not set
+ CONFIG_MACH_KB9200=y
++# CONFIG_MACH_KAFA is not set
++# CONFIG_MACH_CHUB is not set
++
++#
++# AT91 Board Options
++#
++
++#
++# AT91 Feature Selections
++#
++# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
++# CONFIG_ATMEL_TCLIB is not set
+
+ #
+ # Processor Type
+ #
+ CONFIG_CPU_32=y
+ CONFIG_CPU_ARM920T=y
+-CONFIG_CPU_32v4=y
++CONFIG_CPU_32v4T=y
+ CONFIG_CPU_ABRT_EV4T=y
+ CONFIG_CPU_CACHE_V4WT=y
+ CONFIG_CPU_CACHE_VIVT=y
+ CONFIG_CPU_COPY_V4WB=y
+ CONFIG_CPU_TLB_V4WBI=y
++CONFIG_CPU_CP15=y
++CONFIG_CPU_CP15_MMU=y
+
+ #
+ # Processor Features
+@@ -112,24 +191,44 @@ CONFIG_ARM_THUMB=y
+ # CONFIG_CPU_ICACHE_DISABLE is not set
+ # CONFIG_CPU_DCACHE_DISABLE is not set
+ # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
++# CONFIG_OUTER_CACHE is not set
+
+ #
+ # Bus support
+ #
+-CONFIG_ISA_DMA_API=y
+
+ #
+ # PCCARD (PCMCIA/CardBus) support
+ #
+-# CONFIG_PCCARD is not set
++CONFIG_PCCARD=m
++# CONFIG_PCMCIA_DEBUG is not set
++CONFIG_PCMCIA=m
++CONFIG_PCMCIA_LOAD_CIS=y
++CONFIG_PCMCIA_IOCTL=y
++
++#
++# PC-card bridges
++#
++# CONFIG_AT91_CF is not set
+
+ #
+ # Kernel Features
+ #
++# CONFIG_PREEMPT is not set
+ # CONFIG_NO_IDLE_HZ is not set
++CONFIG_HZ=100
++# CONFIG_AEABI is not set
+ # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
+ CONFIG_FLATMEM=y
+ CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
+ # CONFIG_LEDS is not set
+ CONFIG_ALIGNMENT_TRAP=y
+
+@@ -138,8 +237,10 @@ CONFIG_ALIGNMENT_TRAP=y
+ #
+ CONFIG_ZBOOT_ROM_TEXT=0x10000000
+ CONFIG_ZBOOT_ROM_BSS=0x20040000
+-CONFIG_ZBOOT_ROM=y
+-CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933"
++# CONFIG_ZBOOT_ROM is not set
++CONFIG_CMDLINE="noinitrd root=/dev/mtdblock0 rootfstype=jffs2 mem=64M"
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
+
+ #
+ # Floating point emulation
+@@ -150,6 +251,7 @@ CONFIG_CMDLINE="console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933"
+ #
+ CONFIG_FPE_NWFPE=y
+ # CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
+
+ #
+ # Userspace binary formats
+@@ -165,6 +267,96 @@ CONFIG_BINFMT_MISC=y
+ # CONFIG_PM is not set
+
+ #
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++# CONFIG_NETDEBUG is not set
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++# CONFIG_NET_KEY is not set
++CONFIG_INET=y
++CONFIG_IP_MULTICAST=y
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_PNP=y
++# CONFIG_IP_PNP_DHCP is not set
++# CONFIG_IP_PNP_BOOTP is not set
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_IP_MROUTE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_BEET is not set
++# CONFIG_INET_DIAG is not set
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++
++#
++# DCCP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP is not set
++
++#
++# SCTP Configuration (EXPERIMENTAL)
++#
++CONFIG_IP_SCTP=m
++# CONFIG_SCTP_DBG_MSG is not set
++# CONFIG_SCTP_DBG_OBJCNT is not set
++# CONFIG_SCTP_HMAC_NONE is not set
++# CONFIG_SCTP_HMAC_SHA1 is not set
++CONFIG_SCTP_HMAC_MD5=y
++
++#
++# TIPC Configuration (EXPERIMENTAL)
++#
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_IEEE80211 is not set
++
++#
+ # Device Drivers
+ #
+
+@@ -173,13 +365,95 @@ CONFIG_BINFMT_MISC=y
+ #
+ CONFIG_STANDALONE=y
+ CONFIG_PREVENT_FIRMWARE_BUILD=y
+-# CONFIG_FW_LOADER is not set
+-CONFIG_DEBUG_DRIVER=y
++CONFIG_FW_LOADER=y
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
+
+ #
+ # Memory Technology Devices (MTD)
+ #
+-# CONFIG_MTD is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++CONFIG_MTD_CONCAT=y
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++# CONFIG_MTD_CFI is not set
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++# CONFIG_MTD_OBSOLETE_CHIPS is not set
++
++#
++# Mapping drivers for chip access
++#
++CONFIG_MTD_COMPLEX_MAPPINGS=y
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++
++#
++# NAND Flash Device Drivers
++#
++CONFIG_MTD_NAND=y
++# CONFIG_MTD_NAND_VERIFY_WRITE is not set
++# CONFIG_MTD_NAND_ECC_SMC is not set
++CONFIG_MTD_NAND_IDS=y
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++CONFIG_MTD_NAND_AT91=y
++# CONFIG_MTD_NAND_NANDSIM is not set
++
++#
++# OneNAND Flash Device Drivers
++#
++# CONFIG_MTD_ONENAND is not set
+
+ #
+ # Parallel port support
+@@ -189,6 +463,7 @@ CONFIG_DEBUG_DRIVER=y
+ #
+ # Plug and Play support
+ #
++# CONFIG_PNPACPI is not set
+
+ #
+ # Block devices
+@@ -196,28 +471,27 @@ CONFIG_DEBUG_DRIVER=y
+ # CONFIG_BLK_DEV_COW_COMMON is not set
+ CONFIG_BLK_DEV_LOOP=y
+ # CONFIG_BLK_DEV_CRYPTOLOOP is not set
+-CONFIG_BLK_DEV_NBD=y
++# CONFIG_BLK_DEV_NBD is not set
+ # CONFIG_BLK_DEV_UB is not set
+ CONFIG_BLK_DEV_RAM=y
+ CONFIG_BLK_DEV_RAM_COUNT=16
+-CONFIG_BLK_DEV_RAM_SIZE=4096
+-CONFIG_BLK_DEV_INITRD=y
+-CONFIG_INITRAMFS_SOURCE=""
++CONFIG_BLK_DEV_RAM_SIZE=16384
++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+ # CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
+
+ #
+-# IO Schedulers
++# ATA/ATAPI/MFM/RLL support
+ #
+-CONFIG_IOSCHED_NOOP=y
+-CONFIG_IOSCHED_AS=y
+-CONFIG_IOSCHED_DEADLINE=y
+-CONFIG_IOSCHED_CFQ=y
+-# CONFIG_ATA_OVER_ETH is not set
++# CONFIG_IDE is not set
+
+ #
+ # SCSI device support
+ #
++# CONFIG_RAID_ATTRS is not set
+ CONFIG_SCSI=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
+ CONFIG_SCSI_PROC_FS=y
+
+ #
+@@ -233,97 +507,61 @@ CONFIG_CHR_DEV_SG=y
+ #
+ # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+ #
+-# CONFIG_SCSI_MULTI_LUN is not set
+-# CONFIG_SCSI_CONSTANTS is not set
+-# CONFIG_SCSI_LOGGING is not set
++CONFIG_SCSI_MULTI_LUN=y
++CONFIG_SCSI_CONSTANTS=y
++CONFIG_SCSI_LOGGING=y
++# CONFIG_SCSI_SCAN_ASYNC is not set
+
+ #
+-# SCSI Transport Attributes
++# SCSI Transports
+ #
+-# CONFIG_SCSI_SPI_ATTRS is not set
++CONFIG_SCSI_SPI_ATTRS=m
+ # CONFIG_SCSI_FC_ATTRS is not set
+ # CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
+
+ #
+ # SCSI low-level drivers
+ #
+-# CONFIG_SCSI_SATA is not set
++# CONFIG_ISCSI_TCP is not set
+ # CONFIG_SCSI_DEBUG is not set
+
+ #
+-# Multi-device support (RAID and LVM)
++# PCMCIA SCSI adapter support
+ #
+-# CONFIG_MD is not set
++# CONFIG_PCMCIA_AHA152X is not set
++# CONFIG_PCMCIA_FDOMAIN is not set
++# CONFIG_PCMCIA_NINJA_SCSI is not set
++# CONFIG_PCMCIA_QLOGIC is not set
++# CONFIG_PCMCIA_SYM53C500 is not set
+
+ #
+-# Fusion MPT device support
++# Serial ATA (prod) and Parallel ATA (experimental) drivers
+ #
+-# CONFIG_FUSION is not set
++# CONFIG_ATA is not set
+
+ #
+-# IEEE 1394 (FireWire) support
++# Multi-device support (RAID and LVM)
+ #
++# CONFIG_MD is not set
+
+ #
+-# I2O device support
++# Fusion MPT device support
+ #
++# CONFIG_FUSION is not set
+
+ #
+-# Networking support
++# IEEE 1394 (FireWire) support
+ #
+-CONFIG_NET=y
+
+ #
+-# Networking options
+-#
+-CONFIG_PACKET=y
+-# CONFIG_PACKET_MMAP is not set
+-CONFIG_UNIX=y
+-# CONFIG_NET_KEY is not set
+-CONFIG_INET=y
+-CONFIG_IP_MULTICAST=y
+-# CONFIG_IP_ADVANCED_ROUTER is not set
+-CONFIG_IP_FIB_HASH=y
+-CONFIG_IP_PNP=y
+-CONFIG_IP_PNP_DHCP=y
+-# CONFIG_IP_PNP_BOOTP is not set
+-# CONFIG_IP_PNP_RARP is not set
+-# CONFIG_NET_IPIP is not set
+-# CONFIG_NET_IPGRE is not set
+-# CONFIG_IP_MROUTE is not set
+-# CONFIG_SYN_COOKIES is not set
+-# CONFIG_INET_AH is not set
+-# CONFIG_INET_ESP is not set
+-# CONFIG_INET_IPCOMP is not set
+-# CONFIG_INET_TUNNEL is not set
+-# CONFIG_IP_TCPDIAG is not set
+-# CONFIG_IP_TCPDIAG_IPV6 is not set
+-# CONFIG_TCP_CONG_ADVANCED is not set
+-CONFIG_TCP_CONG_BIC=y
+-# CONFIG_IPV6 is not set
+-# CONFIG_NETFILTER is not set
+-# CONFIG_BRIDGE is not set
+-# CONFIG_VLAN_8021Q is not set
+-# CONFIG_DECNET is not set
+-# CONFIG_LLC2 is not set
+-# CONFIG_IPX is not set
+-# CONFIG_ATALK is not set
+-
+-#
+-# QoS and/or fair queueing
++# I2O device support
+ #
+-# CONFIG_NET_SCHED is not set
+-# CONFIG_NET_CLS_ROUTE is not set
+
+ #
+-# Network testing
++# Network device support
+ #
+-# CONFIG_NET_PKTGEN is not set
+-# CONFIG_NETPOLL is not set
+-# CONFIG_NET_POLL_CONTROLLER is not set
+-# CONFIG_HAMRADIO is not set
+-# CONFIG_IRDA is not set
+-# CONFIG_BT is not set
+ CONFIG_NETDEVICES=y
+ # CONFIG_DUMMY is not set
+ # CONFIG_BONDING is not set
+@@ -331,6 +569,11 @@ CONFIG_NETDEVICES=y
+ # CONFIG_TUN is not set
+
+ #
++# PHY device support
++#
++# CONFIG_PHYLIB is not set
++
++#
+ # Ethernet (10 or 100Mbit)
+ #
+ CONFIG_NET_ETHERNET=y
+@@ -357,11 +600,20 @@ CONFIG_ARM_AT91_ETHER=y
+ # CONFIG_NET_RADIO is not set
+
+ #
++# PCMCIA network device support
++#
++# CONFIG_NET_PCMCIA is not set
++
++#
+ # Wan interfaces
+ #
+ # CONFIG_WAN is not set
+ # CONFIG_PPP is not set
+ # CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
+
+ #
+ # ISDN subsystem
+@@ -372,6 +624,7 @@ CONFIG_ARM_AT91_ETHER=y
+ # Input device support
+ #
+ CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
+
+ #
+ # Userland interfaces
+@@ -397,9 +650,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+ #
+ # Hardware I/O ports
+ #
+-CONFIG_SERIO=y
+-# CONFIG_SERIO_SERPORT is not set
+-# CONFIG_SERIO_RAW is not set
++# CONFIG_SERIO is not set
+ # CONFIG_GAMEPORT is not set
+
+ #
+@@ -408,6 +659,7 @@ CONFIG_SERIO=y
+ CONFIG_VT=y
+ CONFIG_VT_CONSOLE=y
+ CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
+ # CONFIG_SERIAL_NONSTANDARD is not set
+
+ #
+@@ -420,11 +672,11 @@ CONFIG_HW_CONSOLE=y
+ #
+ CONFIG_SERIAL_ATMEL=y
+ CONFIG_SERIAL_ATMEL_CONSOLE=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
+ CONFIG_SERIAL_CORE=y
+ CONFIG_SERIAL_CORE_CONSOLE=y
+ CONFIG_UNIX98_PTYS=y
+-CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=256
++# CONFIG_LEGACY_PTYS is not set
+
+ #
+ # IPMI
+@@ -435,21 +687,23 @@ CONFIG_LEGACY_PTY_COUNT=256
+ # Watchdog Cards
+ #
+ # CONFIG_WATCHDOG is not set
++# CONFIG_HW_RANDOM is not set
+ # CONFIG_NVRAM is not set
+-# CONFIG_RTC is not set
+-# CONFIG_AT91RM9200_RTC is not set
+ # CONFIG_DTLK is not set
+ # CONFIG_R3964 is not set
+
+ #
+-# Ftape, the floppy tape device driver
++# PCMCIA character devices
+ #
++# CONFIG_SYNCLINK_CS is not set
++# CONFIG_CARDMAN_4000 is not set
++# CONFIG_CARDMAN_4040 is not set
+ # CONFIG_RAW_DRIVER is not set
+
+ #
+ # TPM devices
+ #
+-# CONFIG_AT91_SPI is not set
++# CONFIG_TCG_TPM is not set
+
+ #
+ # I2C support
+@@ -457,10 +711,50 @@ CONFIG_LEGACY_PTY_COUNT=256
+ # CONFIG_I2C is not set
+
+ #
++# SPI support
++#
++# CONFIG_SPI is not set
++# CONFIG_SPI_MASTER is not set
++
++#
++# Dallas's 1-wire bus
++#
++# CONFIG_W1 is not set
++
++#
++# Hardware Monitoring support
++#
++CONFIG_HWMON=y
++# CONFIG_HWMON_VID is not set
++# CONFIG_SENSORS_ABITUGURU is not set
++# CONFIG_SENSORS_F71805F is not set
++# CONFIG_SENSORS_PC87427 is not set
++# CONFIG_SENSORS_VT1211 is not set
++CONFIG_HWMON_DEBUG_CHIP=y
++
++#
+ # Misc devices
+ #
+
+ #
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++
++#
++# LED devices
++#
++# CONFIG_NEW_LEDS is not set
++
++#
++# LED drivers
++#
++
++#
++# LED Triggers
++#
++
++#
+ # Multimedia devices
+ #
+ # CONFIG_VIDEO_DEV is not set
+@@ -469,17 +763,57 @@ CONFIG_LEGACY_PTY_COUNT=256
+ # Digital Video Broadcasting Devices
+ #
+ # CONFIG_DVB is not set
++# CONFIG_USB_DABUSB is not set
+
+ #
+ # Graphics support
+ #
+-# CONFIG_FB is not set
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++CONFIG_BACKLIGHT_CLASS_DEVICE=y
++# CONFIG_LCD_CLASS_DEVICE is not set
++CONFIG_BACKLIGHT_KB920x=y
++CONFIG_FB=y
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB_DDC is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_SVGALIB is not set
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++CONFIG_FB_MODE_HELPERS=y
++CONFIG_FB_TILEBLITTING=y
++
++#
++# Frame buffer hardware drivers
++#
++CONFIG_FB_S1D15605=y
++# CONFIG_FB_S1D13XXX is not set
++# CONFIG_FB_VIRTUAL is not set
+
+ #
+ # Console display driver support
+ #
+ # CONFIG_VGA_CONSOLE is not set
+ CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
++CONFIG_FONTS=y
++# CONFIG_FONT_8x8 is not set
++# CONFIG_FONT_8x16 is not set
++# CONFIG_FONT_6x11 is not set
++# CONFIG_FONT_7x14 is not set
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++CONFIG_FONT_MINI_4x6=y
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_10x18 is not set
++
++#
++# Logo configuration
++#
++# CONFIG_LOGO is not set
+
+ #
+ # Sound
+@@ -487,82 +821,98 @@ CONFIG_DUMMY_CONSOLE=y
+ # CONFIG_SOUND is not set
+
+ #
++# HID Devices
++#
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++
++#
+ # USB support
+ #
+ CONFIG_USB_ARCH_HAS_HCD=y
+ CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB_ARCH_HAS_EHCI is not set
+ CONFIG_USB=y
+-CONFIG_USB_DEBUG=y
++# CONFIG_USB_DEBUG is not set
+
+ #
+ # Miscellaneous USB options
+ #
+ CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_OTG is not set
+
+ #
+ # USB Host Controller Drivers
+ #
+ # CONFIG_USB_ISP116X_HCD is not set
+ CONFIG_USB_OHCI_HCD=y
+-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+ # CONFIG_USB_SL811_HCD is not set
+
+ #
+ # USB Device Class drivers
+ #
+-# CONFIG_USB_BLUETOOTH_TTY is not set
+ # CONFIG_USB_ACM is not set
+ # CONFIG_USB_PRINTER is not set
+
+ #
+-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# may also be needed; see USB_STORAGE Help for more information
+ #
+ CONFIG_USB_STORAGE=y
+-CONFIG_USB_STORAGE_DEBUG=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
+ # CONFIG_USB_STORAGE_FREECOM is not set
+ # CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++CONFIG_USB_LIBUSUAL=y
+
+ #
+ # USB Input Devices
+ #
+-# CONFIG_USB_HID is not set
+-
+-#
+-# USB HID Boot Protocol drivers
+-#
+-# CONFIG_USB_KBD is not set
+-# CONFIG_USB_MOUSE is not set
++CONFIG_USB_HID=y
++# CONFIG_USB_HIDINPUT_POWERBOOK is not set
++# CONFIG_HID_FF is not set
++# CONFIG_USB_HIDDEV is not set
+ # CONFIG_USB_AIPTEK is not set
+ # CONFIG_USB_WACOM is not set
+ # CONFIG_USB_ACECAD is not set
+ # CONFIG_USB_KBTAB is not set
+ # CONFIG_USB_POWERMATE is not set
+-# CONFIG_USB_MTOUCH is not set
+-# CONFIG_USB_ITMTOUCH is not set
+-# CONFIG_USB_EGALAX is not set
++# CONFIG_USB_TOUCHSCREEN is not set
++# CONFIG_USB_YEALINK is not set
+ # CONFIG_USB_XPAD is not set
+ # CONFIG_USB_ATI_REMOTE is not set
++# CONFIG_USB_ATI_REMOTE2 is not set
++# CONFIG_USB_KEYSPAN_REMOTE is not set
++# CONFIG_USB_APPLETOUCH is not set
++# CONFIG_USB_GTCO is not set
+
+ #
+ # USB Imaging devices
+ #
++# CONFIG_USB_MDC800 is not set
+ # CONFIG_USB_MICROTEK is not set
+
+ #
+-# USB Multimedia devices
+-#
+-# CONFIG_USB_DABUSB is not set
+-
+-#
+-# Video4Linux support is needed for USB Multimedia device support
+-#
+-
+-#
+ # USB Network Adapters
+ #
++# CONFIG_USB_CATC is not set
+ # CONFIG_USB_KAWETH is not set
+ # CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET_MII is not set
+ # CONFIG_USB_USBNET is not set
+ # CONFIG_USB_MON is not set
+
+@@ -580,12 +930,23 @@ CONFIG_USB_STORAGE_DEBUG=y
+ #
+ # CONFIG_USB_EMI62 is not set
+ # CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
+ # CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
+ # CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
+ # CONFIG_USB_CYTHERM is not set
+-# CONFIG_USB_PHIDGETKIT is not set
+-# CONFIG_USB_PHIDGETSERVO is not set
++# CONFIG_USB_PHIDGET is not set
+ # CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
+
+ #
+ # USB DSL modem support
+@@ -599,36 +960,51 @@ CONFIG_USB_STORAGE_DEBUG=y
+ #
+ # MMC/SD Card support
+ #
+-# CONFIG_MMC is not set
++CONFIG_MMC=y
++# CONFIG_MMC_DEBUG is not set
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_AT91=y
++
++#
++# Real Time Clock
++#
++CONFIG_RTC_LIB=y
++# CONFIG_RTC_CLASS is not set
+
+ #
+ # File systems
+ #
+ CONFIG_EXT2_FS=y
+ CONFIG_EXT2_FS_XATTR=y
+-# CONFIG_EXT2_FS_POSIX_ACL is not set
+-# CONFIG_EXT2_FS_SECURITY is not set
++CONFIG_EXT2_FS_POSIX_ACL=y
++CONFIG_EXT2_FS_SECURITY=y
+ # CONFIG_EXT2_FS_XIP is not set
+ CONFIG_EXT3_FS=y
+ CONFIG_EXT3_FS_XATTR=y
+-# CONFIG_EXT3_FS_POSIX_ACL is not set
+-# CONFIG_EXT3_FS_SECURITY is not set
++CONFIG_EXT3_FS_POSIX_ACL=y
++CONFIG_EXT3_FS_SECURITY=y
++# CONFIG_EXT4DEV_FS is not set
+ CONFIG_JBD=y
+ # CONFIG_JBD_DEBUG is not set
+ CONFIG_FS_MBCACHE=y
+ # CONFIG_REISERFS_FS is not set
+ # CONFIG_JFS_FS is not set
+-
+-#
+-# XFS support
+-#
++CONFIG_FS_POSIX_ACL=y
+ # CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
+ # CONFIG_MINIX_FS is not set
+ # CONFIG_ROMFS_FS is not set
+-# CONFIG_QUOTA is not set
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++CONFIG_QUOTA=y
++# CONFIG_QFMT_V1 is not set
++CONFIG_QFMT_V2=y
++CONFIG_QUOTACTL=y
+ CONFIG_DNOTIFY=y
+-CONFIG_AUTOFS_FS=y
++# CONFIG_AUTOFS_FS is not set
+ CONFIG_AUTOFS4_FS=y
++# CONFIG_FUSE_FS is not set
+
+ #
+ # CD-ROM/DVD Filesystems
+@@ -643,25 +1019,40 @@ CONFIG_FAT_FS=y
+ CONFIG_MSDOS_FS=y
+ CONFIG_VFAT_FS=y
+ CONFIG_FAT_DEFAULT_CODEPAGE=437
+-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
+ # CONFIG_NTFS_FS is not set
+
+ #
+ # Pseudo filesystems
+ #
+ CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
+ CONFIG_SYSFS=y
+-CONFIG_DEVPTS_FS_XATTR=y
+-# CONFIG_DEVPTS_FS_SECURITY is not set
+ CONFIG_TMPFS=y
+-# CONFIG_TMPFS_XATTR is not set
++# CONFIG_TMPFS_POSIX_ACL is not set
+ # CONFIG_HUGETLB_PAGE is not set
+ CONFIG_RAMFS=y
++CONFIG_CONFIGFS_FS=y
+
+ #
+ # Miscellaneous filesystems
+ #
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
+ # CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_SUMMARY is not set
++# CONFIG_JFFS2_FS_XATTR is not set
++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
++CONFIG_JFFS2_ZLIB=y
++CONFIG_JFFS2_RTIME=y
++# CONFIG_JFFS2_RUBIN is not set
+ # CONFIG_CRAMFS is not set
+ # CONFIG_VXFS_FS is not set
+ # CONFIG_HPFS_FS is not set
+@@ -675,16 +1066,23 @@ CONFIG_RAMFS=y
+ CONFIG_NFS_FS=y
+ CONFIG_NFS_V3=y
+ # CONFIG_NFS_V3_ACL is not set
++CONFIG_NFS_V4=y
++# CONFIG_NFS_DIRECTIO is not set
+ # CONFIG_NFSD is not set
+ CONFIG_ROOT_NFS=y
+ CONFIG_LOCKD=y
+ CONFIG_LOCKD_V4=y
+ CONFIG_NFS_COMMON=y
+ CONFIG_SUNRPC=y
++CONFIG_SUNRPC_GSS=y
++CONFIG_RPCSEC_GSS_KRB5=y
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
+ # CONFIG_SMB_FS is not set
+ # CONFIG_CIFS is not set
+ # CONFIG_NCP_FS is not set
+ # CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
+
+ #
+ # Partition Types
+@@ -734,26 +1132,51 @@ CONFIG_NLS_ASCII=y
+ # CONFIG_NLS_ISO8859_15 is not set
+ # CONFIG_NLS_KOI8_R is not set
+ # CONFIG_NLS_KOI8_U is not set
+-# CONFIG_NLS_UTF8 is not set
++CONFIG_NLS_UTF8=y
++
++#
++# Distributed Lock Manager
++#
++# CONFIG_DLM is not set
++
++#
++# Profiling support
++#
++# CONFIG_PROFILING is not set
+
+ #
+ # Kernel hacking
+ #
+ # CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_MAGIC_SYSRQ=y
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
+ CONFIG_DEBUG_KERNEL=y
+-# CONFIG_MAGIC_SYSRQ is not set
+-CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_DEBUG_SHIRQ is not set
++CONFIG_LOG_BUF_SHIFT=17
++CONFIG_DETECT_SOFTLOCKUP=y
+ # CONFIG_SCHEDSTATS is not set
++# CONFIG_TIMER_STATS is not set
+ # CONFIG_DEBUG_SLAB is not set
+-# CONFIG_DEBUG_SPINLOCK is not set
+-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++CONFIG_DEBUG_SPINLOCK=y
++# CONFIG_DEBUG_MUTEXES is not set
++CONFIG_DEBUG_SPINLOCK_SLEEP=y
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+ # CONFIG_DEBUG_KOBJECT is not set
+ CONFIG_DEBUG_BUGVERBOSE=y
+ # CONFIG_DEBUG_INFO is not set
+-# CONFIG_DEBUG_FS is not set
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_LIST is not set
+ CONFIG_FRAME_POINTER=y
+-CONFIG_DEBUG_USER=y
+-CONFIG_DEBUG_ERRORS=y
++CONFIG_FORCED_INLINING=y
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_FAULT_INJECTION is not set
++# CONFIG_DEBUG_USER is not set
++# CONFIG_DEBUG_ERRORS is not set
+ CONFIG_DEBUG_LL=y
+ # CONFIG_DEBUG_ICEDCC is not set
+
+@@ -766,7 +1189,43 @@ CONFIG_DEBUG_LL=y
+ #
+ # Cryptographic options
+ #
+-# CONFIG_CRYPTO is not set
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_HASH=m
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_HMAC=m
++# CONFIG_CRYPTO_XCBC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++CONFIG_CRYPTO_MD5=y
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_ECB is not set
++CONFIG_CRYPTO_CBC=y
++CONFIG_CRYPTO_PCBC=m
++# CONFIG_CRYPTO_LRW is not set
++CONFIG_CRYPTO_DES=y
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_AES is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_ARC4 is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_TEST is not set
+
+ #
+ # Hardware crypto devices
+@@ -775,6 +1234,14 @@ CONFIG_DEBUG_LL=y
+ #
+ # Library routines
+ #
++CONFIG_BITREVERSE=y
+ # CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
+ CONFIG_CRC32=y
+ # CONFIG_LIBCRC32C is not set
++CONFIG_AUDIT_GENERIC=y
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
+diff --git a/arch/arm/configs/picotux200_defconfig b/arch/arm/configs/picotux200_defconfig
+index 3c0c4f1..95a22f5 100644
+--- a/arch/arm/configs/picotux200_defconfig
++++ b/arch/arm/configs/picotux200_defconfig
+@@ -727,14 +727,14 @@ CONFIG_I2C_CHARDEV=m
+ #
+ # I2C Algorithms
+ #
+-# CONFIG_I2C_ALGOBIT is not set
++CONFIG_I2C_ALGOBIT=m
+ # CONFIG_I2C_ALGOPCF is not set
+ # CONFIG_I2C_ALGOPCA is not set
+
+ #
+ # I2C Hardware Bus support
+ #
+-CONFIG_I2C_AT91=m
++CONFIG_I2C_GPIO=m
+ # CONFIG_I2C_OCORES is not set
+ # CONFIG_I2C_PARPORT_LIGHT is not set
+ # CONFIG_I2C_STUB is not set
+diff --git a/arch/arm/configs/sam9_l9260_defconfig b/arch/arm/configs/sam9_l9260_defconfig
+new file mode 100644
+index 0000000..484dc97
+--- /dev/null
++++ b/arch/arm/configs/sam9_l9260_defconfig
+@@ -0,0 +1,1098 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.23
++# Sun Oct 14 02:01:07 2007
++#
++CONFIG_ARM=y
++CONFIG_SYS_SUPPORTS_APM_EMULATION=y
++CONFIG_GENERIC_GPIO=y
++# CONFIG_GENERIC_TIME is not set
++# CONFIG_GENERIC_CLOCKEVENTS is not set
++CONFIG_MMU=y
++# CONFIG_NO_IOPORT is not set
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HARDIRQS_SW_RESEND=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ZONE_DMA=y
++CONFIG_VECTORS_BASE=0xffff0000
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_LOCK_KERNEL=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION=""
++# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++CONFIG_POSIX_MQUEUE=y
++CONFIG_BSD_PROCESS_ACCT=y
++CONFIG_BSD_PROCESS_ACCT_V3=y
++# CONFIG_TASKSTATS is not set
++# CONFIG_USER_NS is not set
++CONFIG_AUDIT=y
++# CONFIG_IKCONFIG is not set
++CONFIG_LOG_BUF_SHIFT=15
++CONFIG_SYSFS_DEPRECATED=y
++# CONFIG_RELAY is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++CONFIG_SYSCTL=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_ANON_INODES=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++# CONFIG_MODULES is not set
++CONFIG_BLOCK=y
++CONFIG_LBD=y
++# CONFIG_BLK_DEV_IO_TRACE is not set
++CONFIG_LSF=y
++# CONFIG_BLK_DEV_BSG is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++# CONFIG_DEFAULT_AS is not set
++# CONFIG_DEFAULT_DEADLINE is not set
++CONFIG_DEFAULT_CFQ=y
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="cfq"
++
++#
++# System Type
++#
++# CONFIG_ARCH_AAEC2000 is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_REALVIEW is not set
++# CONFIG_ARCH_VERSATILE is not set
++CONFIG_ARCH_AT91=y
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_EP93XX is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_NETX is not set
++# CONFIG_ARCH_H720X is not set
++# CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_IOP13XX is not set
++# CONFIG_ARCH_IOP32X is not set
++# CONFIG_ARCH_IOP33X is not set
++# CONFIG_ARCH_IXP23XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_IXP4XX is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KS8695 is not set
++# CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_MXC is not set
++# CONFIG_ARCH_PNX4008 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# CONFIG_ARCH_SHARK is not set
++# CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
++# CONFIG_ARCH_OMAP is not set
++
++#
++# Boot options
++#
++
++#
++# Power management
++#
++
++#
++# Atmel AT91 System-on-Chip
++#
++# CONFIG_ARCH_AT91RM9200 is not set
++CONFIG_ARCH_AT91SAM9260=y
++# CONFIG_ARCH_AT91SAM9261 is not set
++# CONFIG_ARCH_AT91SAM9263 is not set
++# CONFIG_ARCH_AT91SAM9RL is not set
++
++#
++# AT91SAM9260 Variants
++#
++# CONFIG_ARCH_AT91SAM9260_SAM9XE is not set
++
++#
++# AT91SAM9260 / AT91SAM9XE Board Type
++#
++# CONFIG_MACH_AT91SAM9260EK is not set
++# CONFIG_MACH_CAM60 is not set
++CONFIG_MACH_SAM9_L9260=y
++
++#
++# AT91 Board Options
++#
++CONFIG_MTD_AT91_DATAFLASH_CARD=y
++
++#
++# AT91 Feature Selections
++#
++# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
++# CONFIG_ATMEL_TCLIB is not set
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_ARM926T=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5TJ=y
++CONFIG_CPU_CACHE_VIVT=y
++CONFIG_CPU_COPY_V4WB=y
++CONFIG_CPU_TLB_V4WBI=y
++CONFIG_CPU_CP15=y
++CONFIG_CPU_CP15_MMU=y
++
++#
++# Processor Features
++#
++CONFIG_ARM_THUMB=y
++# CONFIG_CPU_ICACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_DISABLE is not set
++# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
++# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
++# CONFIG_OUTER_CACHE is not set
++
++#
++# Bus support
++#
++# CONFIG_PCI_SYSCALL is not set
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++# CONFIG_PCCARD is not set
++
++#
++# Kernel Features
++#
++# CONFIG_TICK_ONESHOT is not set
++CONFIG_PREEMPT=y
++# CONFIG_NO_IDLE_HZ is not set
++CONFIG_HZ=100
++# CONFIG_AEABI is not set
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4096
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_BOUNCE=y
++CONFIG_VIRT_TO_BUS=y
++CONFIG_LEDS=y
++CONFIG_LEDS_TIMER=y
++CONFIG_LEDS_CPU=y
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE="console=ttyS0,115200 mem=64M initrd=0x21100000,4194304 root=/dev/ram0 rw"
++# CONFIG_XIP_KERNEL is not set
++# CONFIG_KEXEC is not set
++
++#
++# Floating point emulation
++#
++
++#
++# At least one emulation must be selected
++#
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_NWFPE_XP is not set
++# CONFIG_FPE_FASTFPE is not set
++# CONFIG_VFP is not set
++
++#
++# Userspace binary formats
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_ARTHUR is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++CONFIG_SUSPEND_UP_POSSIBLE=y
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++CONFIG_XFRM_USER=y
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_XFRM_MIGRATE is not set
++CONFIG_NET_KEY=y
++# CONFIG_NET_KEY_MIGRATE is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++# CONFIG_IP_PNP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_BEET is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++# CONFIG_IP_DCCP is not set
++# CONFIG_IP_SCTP is not set
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++
++#
++# Wireless
++#
++# CONFIG_CFG80211 is not set
++# CONFIG_WIRELESS_EXT is not set
++# CONFIG_MAC80211 is not set
++# CONFIG_IEEE80211 is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++# CONFIG_MTD_CMDLINE_PARTS is not set
++# CONFIG_MTD_AFS_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++# CONFIG_MTD_CFI is not set
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++CONFIG_MTD_BLOCK2MTD=y
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++CONFIG_MTD_NAND=y
++# CONFIG_MTD_NAND_VERIFY_WRITE is not set
++# CONFIG_MTD_NAND_ECC_SMC is not set
++# CONFIG_MTD_NAND_MUSEUM_IDS is not set
++CONFIG_MTD_NAND_IDS=y
++# CONFIG_MTD_NAND_DISKONCHIP is not set
++CONFIG_MTD_NAND_AT91=y
++# CONFIG_MTD_NAND_NANDSIM is not set
++CONFIG_MTD_NAND_PLATFORM=y
++# CONFIG_MTD_ONENAND is not set
++
++#
++# UBI - Unsorted block images
++#
++CONFIG_MTD_UBI=y
++CONFIG_MTD_UBI_WL_THRESHOLD=4096
++CONFIG_MTD_UBI_BEB_RESERVE=3
++CONFIG_MTD_UBI_GLUEBI=y
++
++#
++# UBI debugging options
++#
++# CONFIG_MTD_UBI_DEBUG is not set
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_UB is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=8192
++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++
++#
++# SCSI device support
++#
++CONFIG_RAID_ATTRS=y
++CONFIG_SCSI=y
++CONFIG_SCSI_DMA=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++CONFIG_SCSI_PROC_FS=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++CONFIG_CHR_DEV_SG=y
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++CONFIG_SCSI_MULTI_LUN=y
++CONFIG_SCSI_CONSTANTS=y
++CONFIG_SCSI_LOGGING=y
++# CONFIG_SCSI_SCAN_ASYNC is not set
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++# CONFIG_SCSI_LOWLEVEL is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++# CONFIG_NETDEVICES_MULTIQUEUE is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++CONFIG_PHYLIB=y
++
++#
++# MII PHY device drivers
++#
++# CONFIG_MARVELL_PHY is not set
++# CONFIG_DAVICOM_PHY is not set
++# CONFIG_QSEMI_PHY is not set
++# CONFIG_LXT_PHY is not set
++# CONFIG_CICADA_PHY is not set
++# CONFIG_VITESSE_PHY is not set
++# CONFIG_SMSC_PHY is not set
++# CONFIG_BROADCOM_PHY is not set
++# CONFIG_ICPLUS_PHY is not set
++# CONFIG_FIXED_PHY is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_MACB=y
++# CONFIG_AX88796 is not set
++# CONFIG_SMC91X is not set
++# CONFIG_DM9000 is not set
++# CONFIG_NETDEV_1000 is not set
++# CONFIG_NETDEV_10000 is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++# CONFIG_WLAN_80211 is not set
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET_MII is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_TSDEV is not set
++# CONFIG_INPUT_EVDEV is not set
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++# CONFIG_INPUT_KEYBOARD is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++# CONFIG_SERIO is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_ATMEL=y
++CONFIG_SERIAL_ATMEL_CONSOLE=y
++# CONFIG_SERIAL_ATMEL_TTYAT is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++CONFIG_UNIX98_PTYS=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=16
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_WATCHDOG is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_NVRAM is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++# CONFIG_I2C is not set
++
++#
++# SPI support
++#
++# CONFIG_SPI is not set
++# CONFIG_SPI_MASTER is not set
++# CONFIG_W1 is not set
++# CONFIG_HWMON is not set
++# CONFIG_MISC_DEVICES is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=y
++
++#
++# LED drivers
++#
++CONFIG_LEDS_GPIO=y
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=y
++CONFIG_LEDS_TRIGGER_HEARTBEAT=y
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++# CONFIG_DAB is not set
++
++#
++# Graphics support
++#
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
++# CONFIG_VGASTATE is not set
++# CONFIG_VIDEO_OUTPUT_CONTROL is not set
++# CONFIG_FB is not set
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++# CONFIG_HID_SUPPORT is not set
++CONFIG_USB_SUPPORT=y
++CONFIG_USB_ARCH_HAS_HCD=y
++CONFIG_USB_ARCH_HAS_OHCI=y
++# CONFIG_USB_ARCH_HAS_EHCI is not set
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++CONFIG_USB_DEVICE_CLASS=y
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_OTG is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_ISP116X_HCD is not set
++CONFIG_USB_OHCI_HCD=y
++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# may also be needed; see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++CONFIG_USB_LIBUSUAL=y
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++# CONFIG_USB_MON is not set
++
++#
++# USB port drivers
++#
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGET is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
++
++#
++# USB DSL modem support
++#
++
++#
++# USB Gadget Support
++#
++CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG is not set
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_USB2 is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_PXA2XX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++# CONFIG_USB_GADGET_GOKU is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_S3C2410 is not set
++CONFIG_USB_GADGET_AT91=y
++CONFIG_USB_AT91=y
++# CONFIG_USB_GADGET_DUMMY_HCD is not set
++# CONFIG_USB_GADGET_DUALSPEED is not set
++# CONFIG_USB_ZERO is not set
++CONFIG_USB_ETH=y
++CONFIG_USB_ETH_RNDIS=y
++# CONFIG_USB_GADGETFS is not set
++# CONFIG_USB_FILE_STORAGE is not set
++# CONFIG_USB_G_SERIAL is not set
++# CONFIG_USB_MIDI_GADGET is not set
++CONFIG_MMC=y
++CONFIG_MMC_DEBUG=y
++# CONFIG_MMC_UNSAFE_RESUME is not set
++
++#
++# MMC/SD Card Drivers
++#
++CONFIG_MMC_BLOCK=y
++CONFIG_MMC_BLOCK_BOUNCE=y
++
++#
++# MMC/SD Host Controller Drivers
++#
++CONFIG_MMC_AT91=y
++CONFIG_RTC_LIB=y
++CONFIG_RTC_CLASS=y
++CONFIG_RTC_HCTOSYS=y
++CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
++# CONFIG_RTC_DEBUG is not set
++
++#
++# RTC interfaces
++#
++CONFIG_RTC_INTF_SYSFS=y
++CONFIG_RTC_INTF_PROC=y
++CONFIG_RTC_INTF_DEV=y
++# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
++# CONFIG_RTC_DRV_TEST is not set
++
++#
++# SPI RTC drivers
++#
++
++#
++# Platform RTC drivers
++#
++# CONFIG_RTC_DRV_CMOS is not set
++CONFIG_RTC_DRV_DS1553=y
++# CONFIG_RTC_DRV_STK17TA8 is not set
++CONFIG_RTC_DRV_DS1742=y
++CONFIG_RTC_DRV_M48T86=y
++# CONFIG_RTC_DRV_M48T59 is not set
++CONFIG_RTC_DRV_V3020=y
++
++#
++# on-CPU RTC drivers
++#
++
++#
++# DMA Engine support
++#
++# CONFIG_DMA_ENGINE is not set
++
++#
++# DMA Clients
++#
++
++#
++# DMA Devices
++#
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++CONFIG_EXT2_FS_XATTR=y
++CONFIG_EXT2_FS_POSIX_ACL=y
++CONFIG_EXT2_FS_SECURITY=y
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_XATTR=y
++CONFIG_EXT3_FS_POSIX_ACL=y
++CONFIG_EXT3_FS_SECURITY=y
++# CONFIG_EXT4DEV_FS is not set
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FS_MBCACHE=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++CONFIG_FS_POSIX_ACL=y
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++# CONFIG_NTFS_FS is not set
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_SUMMARY is not set
++# CONFIG_JFFS2_FS_XATTR is not set
++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
++CONFIG_JFFS2_ZLIB=y
++CONFIG_JFFS2_RTIME=y
++# CONFIG_JFFS2_RUBIN is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_V3_ACL is not set
++# CONFIG_NFS_V4 is not set
++CONFIG_NFS_DIRECTIO=y
++# CONFIG_NFSD is not set
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_SUNRPC_BIND34 is not set
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++CONFIG_NLS_CODEPAGE_737=y
++CONFIG_NLS_CODEPAGE_775=y
++CONFIG_NLS_CODEPAGE_850=y
++CONFIG_NLS_CODEPAGE_852=y
++CONFIG_NLS_CODEPAGE_855=y
++CONFIG_NLS_CODEPAGE_857=y
++CONFIG_NLS_CODEPAGE_860=y
++CONFIG_NLS_CODEPAGE_861=y
++CONFIG_NLS_CODEPAGE_862=y
++CONFIG_NLS_CODEPAGE_863=y
++CONFIG_NLS_CODEPAGE_864=y
++CONFIG_NLS_CODEPAGE_865=y
++CONFIG_NLS_CODEPAGE_866=y
++CONFIG_NLS_CODEPAGE_869=y
++CONFIG_NLS_CODEPAGE_936=y
++CONFIG_NLS_CODEPAGE_950=y
++CONFIG_NLS_CODEPAGE_932=y
++CONFIG_NLS_CODEPAGE_949=y
++CONFIG_NLS_CODEPAGE_874=y
++CONFIG_NLS_ISO8859_8=y
++CONFIG_NLS_CODEPAGE_1250=y
++CONFIG_NLS_CODEPAGE_1251=y
++CONFIG_NLS_ASCII=y
++CONFIG_NLS_ISO8859_1=y
++CONFIG_NLS_ISO8859_2=y
++CONFIG_NLS_ISO8859_3=y
++CONFIG_NLS_ISO8859_4=y
++CONFIG_NLS_ISO8859_5=y
++CONFIG_NLS_ISO8859_6=y
++CONFIG_NLS_ISO8859_7=y
++CONFIG_NLS_ISO8859_9=y
++CONFIG_NLS_ISO8859_13=y
++CONFIG_NLS_ISO8859_14=y
++CONFIG_NLS_ISO8859_15=y
++CONFIG_NLS_KOI8_R=y
++CONFIG_NLS_KOI8_U=y
++CONFIG_NLS_UTF8=y
++
++#
++# Distributed Lock Manager
++#
++# CONFIG_DLM is not set
++
++#
++# Profiling support
++#
++# CONFIG_PROFILING is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_MAGIC_SYSRQ=y
++CONFIG_UNUSED_SYMBOLS=y
++CONFIG_DEBUG_FS=y
++# CONFIG_HEADERS_CHECK is not set
++CONFIG_DEBUG_KERNEL=y
++# CONFIG_DEBUG_SHIRQ is not set
++CONFIG_DETECT_SOFTLOCKUP=y
++CONFIG_SCHED_DEBUG=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_TIMER_STATS is not set
++# CONFIG_DEBUG_SLAB is not set
++CONFIG_DEBUG_PREEMPT=y
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_LOCK_ALLOC is not set
++# CONFIG_PROVE_LOCKING is not set
++# CONFIG_LOCK_STAT is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_LIST is not set
++CONFIG_FRAME_POINTER=y
++CONFIG_FORCED_INLINING=y
++# CONFIG_FAULT_INJECTION is not set
++# CONFIG_DEBUG_USER is not set
++# CONFIG_DEBUG_ERRORS is not set
++CONFIG_DEBUG_LL=y
++# CONFIG_DEBUG_ICEDCC is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_CRYPTO is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++# CONFIG_LIBCRC32C is not set
++CONFIG_AUDIT_GENERIC=y
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
+diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
+index 05a9f8a..a4110e5 100644
+--- a/arch/arm/mach-at91/Kconfig
++++ b/arch/arm/mach-at91/Kconfig
+@@ -106,6 +106,32 @@ config MACH_KAFA
+ help
+ Select this if you are using Sperry-Sun's KAFA board.
+
++config MACH_CHUB
++ bool "Promwad Chub board"
++ depends on ARCH_AT91RM9200
++ help
++ Select this if you are using Promwad's Chub board.
++
++config MACH_HOMEMATIC
++ bool "eQ-3 HomeMatic"
++ depends on ARCH_AT91RM9200
++ help
++ Select this if you are using eQ-3's HomeMatic device.
++ <http://www.eq-3.com>
++
++config MACH_ECBAT91
++ bool "emQbit ECB_AT91 SBC"
++ depends on ARCH_AT91RM9200
++ help
++ Select this if you are using emQbit's ECB_AT91 board.
++ <http://wiki.emqbit.com/free-ecb-at91>
++
++config MACH_SWEDATMS
++ bool "Sweda TMS Board"
++ depends on ARCH_AT91RM9200
++ help
++ Select this if you are using Sweda TMS-100 board.
++
+ endif
+
+ # ----------------------------------------------------------
+@@ -130,6 +156,20 @@ config MACH_AT91SAM9260EK
+ Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit
+ <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933>
+
++config MACH_CAM60
++ bool "KwikByte CAM60 board"
++ depends on ARCH_AT91SAM9260
++ help
++ Select this if you are using KwikByte's CAM60 board based on the Atmel AT91SAM9260.
++ <http://www.kwikbyte.com>
++
++config MACH_SAM9_L9260
++ bool "Olimex SAM9-L9260 board"
++ depends on ARCH_AT91SAM9260
++ help
++ Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260.
++ http://www.olimex.com/dev/sam9-L9260.html
++
+ endif
+
+ # ----------------------------------------------------------
+@@ -198,7 +238,7 @@ comment "AT91 Board Options"
+
+ config MTD_AT91_DATAFLASH_CARD
+ bool "Enable DataFlash Card support"
+- depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK)
++ depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_ECBAT91 || MACH_SAM9_L9260)
+ help
+ Enable support for the DataFlash card.
+
+@@ -209,6 +249,20 @@ config MTD_NAND_AT91_BUSWIDTH_16
+ On AT91SAM926x boards both types of NAND flash can be present
+ (8 and 16 bit data bus width).
+
++config CSB300_WAKE_SW0
++ bool "CSB300 SW0 irq0 wakeup"
++ depends on MACH_CSB337 && PM
++ help
++ If you have a CSB300 connected to your CSB337, this lets
++ SW0 serve as a wakeup button. It uses IRQ0.
++
++config CSB300_WAKE_SW1
++ bool "CSB300 SW1 gpio wakeup"
++ depends on MACH_CSB337 && PM
++ help
++ If you have a CSB300 connected to your CSB337, this lets
++ SW1 serve as a wakeup button. It uses GPIO.
++
+ # ----------------------------------------------------------
+
+ comment "AT91 Feature Selections"
+@@ -219,6 +273,36 @@ config AT91_PROGRAMMABLE_CLOCKS
+ Select this if you need to program one or more of the PCK0..PCK3
+ programmable clock outputs.
+
++config ATMEL_TCLIB
++ bool "Timer/Counter Library"
++ help
++ Select this if you want a library to allocate the Timer/Counter
++ blocks found on many Atmel processors. This facilitates using
++ these modules despite processor differences.
++
++config AT91_SLOW_CLOCK
++ bool "Suspend-to-RAM uses slow clock mode (EXPERIMENTAL)"
++ depends on PM && EXPERIMENTAL
++ help
++ Select this if you wish to put the CPU into slow clock mode
++ while in the "Suspend to RAM" state, to save more power.
++
++config AT91_TIMER_HZ
++ int "Kernel HZ (jiffies per second)"
++ range 32 1024
++ depends on ARCH_AT91
++ default "128" if ARCH_AT91RM9200
++ default "100"
++ help
++ On AT91rm9200 chips where you're using a system clock derived
++ from the 32768 Hz hardware clock, this tick rate should divide
++ it exactly: use a power-of-two value, such as 128 or 256, to
++ reduce timing errors caused by rounding.
++
++ On AT91sam926x chips, or otherwise using a higher precision
++ system clock (of at least several MHz), rounding is less of a
++ problem so it can be safer to use a decimal values like 100.
++
+ endmenu
+
+ endif
+diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
+index a21f08c..9684dc6 100644
+--- a/arch/arm/mach-at91/Makefile
++++ b/arch/arm/mach-at91/Makefile
+@@ -9,6 +9,8 @@ obj- :=
+
+ obj-$(CONFIG_AT91_PMC_UNIT) += clock.o
+ obj-$(CONFIG_PM) += pm.o
++obj-$(CONFIG_AT91_SLOW_CLOCK) += pm_slowclock.o
++obj-$(CONFIG_ATMEL_TCLIB) += tclib.o
+
+ # CPU-specific support
+ obj-$(CONFIG_ARCH_AT91RM9200) += at91rm9200.o at91rm9200_time.o at91rm9200_devices.o
+@@ -28,11 +30,17 @@ obj-$(CONFIG_MACH_CARMEVA) += board-carmeva.o
+ obj-$(CONFIG_MACH_KB9200) += board-kb9202.o
+ obj-$(CONFIG_MACH_ATEB9200) += board-eb9200.o
+ obj-$(CONFIG_MACH_KAFA) += board-kafa.o
++obj-$(CONFIG_MACH_CHUB) += board-chub.o
+ obj-$(CONFIG_MACH_PICOTUX2XX) += board-picotux200.o
+ obj-$(CONFIG_MACH_AT91EB01) += board-eb01.o
++obj-$(CONFIG_MACH_HOMEMATIC) += board-homematic.o
++obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o
++obj-$(CONFIG_MACH_SWEDATMS) += board-tms.o
+
+ # AT91SAM9260 board-specific support
+ obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o
++obj-$(CONFIG_MACH_CAM60) += board-cam60.o
++obj-$(CONFIG_MACH_SAM9_L9260) += board-sam9-l9260.o
+
+ # AT91SAM9261 board-specific support
+ obj-$(CONFIG_MACH_AT91SAM9261EK) += board-sam9261ek.o
+@@ -51,10 +59,12 @@ led-$(CONFIG_MACH_CSB337) += leds.o
+ led-$(CONFIG_MACH_CSB637) += leds.o
+ led-$(CONFIG_MACH_KB9200) += leds.o
+ led-$(CONFIG_MACH_KAFA) += leds.o
++led-$(CONFIG_MACH_ECBAT91) += leds.o
++led-$(CONFIG_MACH_SAM9_L9260) += leds.o
+ obj-$(CONFIG_LEDS) += $(led-y)
+
+ # VGA support
+-#obj-$(CONFIG_FB_S1D13XXX) += ics1523.o
++obj-$(CONFIG_FB_S1D13XXX) += ics1523.o
+
+
+ ifeq ($(CONFIG_PM_DEBUG),y)
+diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c
+index 2cad2bf..84cad3b 100644
+--- a/arch/arm/mach-at91/at91rm9200.c
++++ b/arch/arm/mach-at91/at91rm9200.c
+@@ -267,6 +267,33 @@ static void at91rm9200_reset(void)
+
+
+ /* --------------------------------------------------------------------
++ * Timer/Counter library initialization
++ * -------------------------------------------------------------------- */
++#ifdef CONFIG_ATMEL_TCLIB
++
++#include "tclib.h"
++
++static struct atmel_tcblock at91rm9200_tcblocks[] = {
++ [0] = {
++ .physaddr = AT91RM9200_BASE_TCB0,
++ .irq = { AT91RM9200_ID_TC0, AT91RM9200_ID_TC1, AT91RM9200_ID_TC2 },
++ .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
++ },
++ [1] = {
++ .physaddr = AT91RM9200_BASE_TCB1,
++ .irq = { AT91RM9200_ID_TC3, AT91RM9200_ID_TC4, AT91RM9200_ID_TC5 },
++ .clk = { &tc3_clk, &tc4_clk, &tc5_clk },
++ },
++};
++
++#define at91rm9200_tc_init() atmel_tc_init(at91rm9200_tcblocks, ARRAY_SIZE(at91rm9200_tcblocks))
++
++#else
++#define at91rm9200_tc_init() do {} while(0)
++#endif
++
++
++/* --------------------------------------------------------------------
+ * AT91RM9200 processor initialization
+ * -------------------------------------------------------------------- */
+ void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks)
+@@ -288,6 +315,9 @@ void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks
+
+ /* Initialize GPIO subsystem */
+ at91_gpio_init(at91rm9200_gpio, banks);
++
++ /* Initialize the Timer/Counter blocks */
++ at91rm9200_tc_init();
+ }
+
+
+@@ -301,28 +331,28 @@ void __init at91rm9200_initialize(unsigned long main_clock, unsigned short banks
+ static unsigned int at91rm9200_default_irq_priority[NR_AIC_IRQS] __initdata = {
+ 7, /* Advanced Interrupt Controller (FIQ) */
+ 7, /* System Peripherals */
+- 0, /* Parallel IO Controller A */
+- 0, /* Parallel IO Controller B */
+- 0, /* Parallel IO Controller C */
+- 0, /* Parallel IO Controller D */
+- 6, /* USART 0 */
+- 6, /* USART 1 */
+- 6, /* USART 2 */
+- 6, /* USART 3 */
++ 1, /* Parallel IO Controller A */
++ 1, /* Parallel IO Controller B */
++ 1, /* Parallel IO Controller C */
++ 1, /* Parallel IO Controller D */
++ 5, /* USART 0 */
++ 5, /* USART 1 */
++ 5, /* USART 2 */
++ 5, /* USART 3 */
+ 0, /* Multimedia Card Interface */
+- 4, /* USB Device Port */
+- 0, /* Two-Wire Interface */
+- 6, /* Serial Peripheral Interface */
+- 5, /* Serial Synchronous Controller 0 */
+- 5, /* Serial Synchronous Controller 1 */
+- 5, /* Serial Synchronous Controller 2 */
++ 2, /* USB Device Port */
++ 6, /* Two-Wire Interface */
++ 5, /* Serial Peripheral Interface */
++ 4, /* Serial Synchronous Controller 0 */
++ 4, /* Serial Synchronous Controller 1 */
++ 4, /* Serial Synchronous Controller 2 */
+ 0, /* Timer Counter 0 */
+ 0, /* Timer Counter 1 */
+ 0, /* Timer Counter 2 */
+ 0, /* Timer Counter 3 */
+ 0, /* Timer Counter 4 */
+ 0, /* Timer Counter 5 */
+- 3, /* USB Host port */
++ 2, /* USB Host port */
+ 3, /* Ethernet MAC */
+ 0, /* Advanced Interrupt Controller (IRQ0) */
+ 0, /* Advanced Interrupt Controller (IRQ1) */
+diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c
+index 9296833..3c8e8c1 100644
+--- a/arch/arm/mach-at91/at91rm9200_devices.c
++++ b/arch/arm/mach-at91/at91rm9200_devices.c
+@@ -512,7 +512,18 @@ void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
+ * SPI
+ * -------------------------------------------------------------------- */
+
+-#if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE)
++#if defined(CONFIG_AT91_SPI) || defined(CONFIG_AT91_SPI_MODULE) /* legacy SPI driver */
++#define SPI_DEVNAME "at91_spi"
++
++#elif defined(CONFIG_SPI_AT91) || defined(CONFIG_SPI_AT91_MODULE) /* SPI bitbanging driver */
++#define SPI_DEVNAME "at91_spi"
++
++#elif defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE) /* new SPI driver */
++#define SPI_DEVNAME "atmel_spi"
++
++#endif
++
++#ifdef SPI_DEVNAME
+ static u64 spi_dmamask = 0xffffffffUL;
+
+ static struct resource spi_resources[] = {
+@@ -529,7 +540,7 @@ static struct resource spi_resources[] = {
+ };
+
+ static struct platform_device at91rm9200_spi_device = {
+- .name = "atmel_spi",
++ .name = SPI_DEVNAME,
+ .id = 0,
+ .dev = {
+ .dma_mask = &spi_dmamask,
+@@ -557,8 +568,17 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
+ else
+ cs_pin = spi_standard_cs[devices[i].chip_select];
+
+- /* enable chip-select pin */
+- at91_set_gpio_output(cs_pin, 1);
++ if (devices[i].chip_select == 0) /* for CS0 errata */
++ at91_set_A_periph(cs_pin, 0);
++ else
++ at91_set_gpio_output(cs_pin, 1);
++
++#if defined(CONFIG_AT91_SPI) || defined(CONFIG_AT91_SPI_MODULE)
++ /*
++ * Force peripheral mode when using the legacy SPI driver.
++ */
++ at91_set_A_periph(cs_pin, 0);
++#endif
+
+ /* pass chip-select pin to driver */
+ devices[i].controller_data = (void *) cs_pin;
+@@ -634,6 +654,36 @@ void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
+ #endif
+
+
++#if defined(CONFIG_NEW_LEDS)
++static struct gpio_led_platform_data led_data;
++
++static struct platform_device at91_leds = {
++ .name = "leds-gpio",
++ .id = -1,
++ .dev = {
++ .platform_data = &led_data,
++ }
++};
++
++void __init at91_gpio_leds(struct gpio_led *leds, int nr)
++{
++ int i;
++
++ if (!nr)
++ return;
++
++ for (i = 0; i < nr; i++)
++ at91_set_gpio_output(leds[i].gpio, leds[i].active_low);
++
++ led_data.leds = leds;
++ led_data.num_leds = nr;
++ platform_device_register(&at91_leds);
++}
++#else
++void __init at91_gpio_leds(struct gpio_led *leds, int nr) {}
++#endif
++
++
+ /* --------------------------------------------------------------------
+ * UART
+ * -------------------------------------------------------------------- */
+diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c
+index e47381e..10eb802 100644
+--- a/arch/arm/mach-at91/at91sam9260.c
++++ b/arch/arm/mach-at91/at91sam9260.c
+@@ -269,6 +269,33 @@ static void at91sam9260_reset(void)
+
+
+ /* --------------------------------------------------------------------
++ * Timer/Counter library initialization
++ * -------------------------------------------------------------------- */
++#ifdef CONFIG_ATMEL_TCLIB
++
++#include "tclib.h"
++
++static struct atmel_tcblock at91sam9260_tcblocks[] = {
++ [0] = {
++ .physaddr = AT91SAM9260_BASE_TCB0,
++ .irq = { AT91SAM9260_ID_TC0, AT91SAM9260_ID_TC1, AT91SAM9260_ID_TC2 },
++ .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
++ },
++ [1] = {
++ .physaddr = AT91SAM9260_BASE_TCB1,
++ .irq = { AT91SAM9260_ID_TC3, AT91SAM9260_ID_TC4, AT91SAM9260_ID_TC5 },
++ .clk = { &tc3_clk, &tc4_clk, &tc5_clk },
++ },
++};
++
++#define at91sam9260_tc_init() atmel_tc_init(at91sam9260_tcblocks, ARRAY_SIZE(at91sam9260_tcblocks))
++
++#else
++#define at91sam9260_tc_init() do {} while(0)
++#endif
++
++
++/* --------------------------------------------------------------------
+ * AT91SAM9260 processor initialization
+ * -------------------------------------------------------------------- */
+
+@@ -315,6 +342,9 @@ void __init at91sam9260_initialize(unsigned long main_clock)
+
+ /* Register GPIO subsystem */
+ at91_gpio_init(at91sam9260_gpio, 3);
++
++ /* Initialize the Timer/Counter blocks */
++ at91sam9260_tc_init();
+ }
+
+ /* --------------------------------------------------------------------
+@@ -327,30 +357,30 @@ void __init at91sam9260_initialize(unsigned long main_clock)
+ static unsigned int at91sam9260_default_irq_priority[NR_AIC_IRQS] __initdata = {
+ 7, /* Advanced Interrupt Controller */
+ 7, /* System Peripherals */
+- 0, /* Parallel IO Controller A */
+- 0, /* Parallel IO Controller B */
+- 0, /* Parallel IO Controller C */
++ 1, /* Parallel IO Controller A */
++ 1, /* Parallel IO Controller B */
++ 1, /* Parallel IO Controller C */
+ 0, /* Analog-to-Digital Converter */
+- 6, /* USART 0 */
+- 6, /* USART 1 */
+- 6, /* USART 2 */
++ 5, /* USART 0 */
++ 5, /* USART 1 */
++ 5, /* USART 2 */
+ 0, /* Multimedia Card Interface */
+- 4, /* USB Device Port */
+- 0, /* Two-Wire Interface */
+- 6, /* Serial Peripheral Interface 0 */
+- 6, /* Serial Peripheral Interface 1 */
++ 2, /* USB Device Port */
++ 6, /* Two-Wire Interface */
++ 5, /* Serial Peripheral Interface 0 */
++ 5, /* Serial Peripheral Interface 1 */
+ 5, /* Serial Synchronous Controller */
+ 0,
+ 0,
+ 0, /* Timer Counter 0 */
+ 0, /* Timer Counter 1 */
+ 0, /* Timer Counter 2 */
+- 3, /* USB Host port */
++ 2, /* USB Host port */
+ 3, /* Ethernet */
+ 0, /* Image Sensor Interface */
+- 6, /* USART 3 */
+- 6, /* USART 4 */
+- 6, /* USART 5 */
++ 5, /* USART 3 */
++ 5, /* USART 4 */
++ 5, /* USART 5 */
+ 0, /* Timer Counter 3 */
+ 0, /* Timer Counter 4 */
+ 0, /* Timer Counter 5 */
+diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c
+index 3091bf4..883b5e7 100644
+--- a/arch/arm/mach-at91/at91sam9260_devices.c
++++ b/arch/arm/mach-at91/at91sam9260_devices.c
+@@ -539,6 +539,46 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
+
+
+ /* --------------------------------------------------------------------
++ * RTC (RTT)
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_RTC_DRV_AT91SAM9) || defined(CONFIG_RTC_DRV_AT91SAM9_MODULE)
++static struct platform_device at91sam9260_rtc_device = {
++ .name = "at91_rtc",
++ .id = -1,
++ .num_resources = 0,
++};
++
++static void __init at91_add_device_rtc(void)
++{
++ platform_device_register(&at91sam9260_rtc_device);
++}
++#else
++static void __init at91_add_device_rtc(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ * Watchdog
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
++static struct platform_device at91sam9260_wdt_device = {
++ .name = "at91_wdt",
++ .id = -1,
++ .num_resources = 0,
++};
++
++static void __init at91_add_device_watchdog(void)
++{
++ platform_device_register(&at91sam9260_wdt_device);
++}
++#else
++static void __init at91_add_device_watchdog(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
+ * LEDs
+ * -------------------------------------------------------------------- */
+
+@@ -560,6 +600,38 @@ void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
+ #endif
+
+
++#if defined(CONFIG_NEW_LEDS)
++static struct gpio_led_platform_data led_data;
++
++static struct platform_device at91_leds = {
++ .name = "leds-gpio",
++ .id = -1,
++ .dev = {
++ .platform_data = &led_data,
++ }
++};
++
++void __init at91_gpio_leds(struct gpio_led *leds, int nr)
++{
++ int i;
++
++ if (!nr)
++ return;
++
++ at91_leds.dev.platform_data = leds;
++
++ for (i = 0; i < nr; i++)
++ at91_set_gpio_output(leds[i].gpio, leds[i].active_low);
++
++ led_data.leds = leds;
++ led_data.num_leds = nr;
++ platform_device_register(&at91_leds);
++}
++#else
++void __init at91_gpio_leds(struct gpio_led *leds, int nr) {}
++#endif
++
++
+ /* --------------------------------------------------------------------
+ * UART
+ * -------------------------------------------------------------------- */
+@@ -898,6 +970,8 @@ void __init at91_add_device_serial(void) {}
+ */
+ static int __init at91_add_standard_devices(void)
+ {
++ at91_add_device_rtc();
++ at91_add_device_watchdog();
+ return 0;
+ }
+
+diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c
+index dfe8c39..396bf2d 100644
+--- a/arch/arm/mach-at91/at91sam9261.c
++++ b/arch/arm/mach-at91/at91sam9261.c
+@@ -247,6 +247,28 @@ static void at91sam9261_reset(void)
+
+
+ /* --------------------------------------------------------------------
++ * Timer/Counter library initialization
++ * -------------------------------------------------------------------- */
++#ifdef CONFIG_ATMEL_TCLIB
++
++#include "tclib.h"
++
++static struct atmel_tcblock at91sam9261_tcblocks[] = {
++ [0] = {
++ .physaddr = AT91SAM9261_BASE_TCB0,
++ .irq = { AT91SAM9261_ID_TC0, AT91SAM9261_ID_TC1, AT91SAM9261_ID_TC2 },
++ .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
++ }
++};
++
++#define at91sam9261_tc_init() atmel_tc_init(at91sam9261_tcblocks, ARRAY_SIZE(at91sam9261_tcblocks))
++
++#else
++#define at91sam9261_tc_init() do {} while(0)
++#endif
++
++
++/* --------------------------------------------------------------------
+ * AT91SAM9261 processor initialization
+ * -------------------------------------------------------------------- */
+
+@@ -267,6 +289,9 @@ void __init at91sam9261_initialize(unsigned long main_clock)
+
+ /* Register GPIO subsystem */
+ at91_gpio_init(at91sam9261_gpio, 3);
++
++ /* Initialize the Timer/Counter blocks */
++ at91sam9261_tc_init();
+ }
+
+ /* --------------------------------------------------------------------
+@@ -279,25 +304,25 @@ void __init at91sam9261_initialize(unsigned long main_clock)
+ static unsigned int at91sam9261_default_irq_priority[NR_AIC_IRQS] __initdata = {
+ 7, /* Advanced Interrupt Controller */
+ 7, /* System Peripherals */
+- 0, /* Parallel IO Controller A */
+- 0, /* Parallel IO Controller B */
+- 0, /* Parallel IO Controller C */
++ 1, /* Parallel IO Controller A */
++ 1, /* Parallel IO Controller B */
++ 1, /* Parallel IO Controller C */
+ 0,
+- 6, /* USART 0 */
+- 6, /* USART 1 */
+- 6, /* USART 2 */
++ 5, /* USART 0 */
++ 5, /* USART 1 */
++ 5, /* USART 2 */
+ 0, /* Multimedia Card Interface */
+- 4, /* USB Device Port */
+- 0, /* Two-Wire Interface */
+- 6, /* Serial Peripheral Interface 0 */
+- 6, /* Serial Peripheral Interface 1 */
+- 5, /* Serial Synchronous Controller 0 */
+- 5, /* Serial Synchronous Controller 1 */
+- 5, /* Serial Synchronous Controller 2 */
++ 2, /* USB Device Port */
++ 6, /* Two-Wire Interface */
++ 5, /* Serial Peripheral Interface 0 */
++ 5, /* Serial Peripheral Interface 1 */
++ 4, /* Serial Synchronous Controller 0 */
++ 4, /* Serial Synchronous Controller 1 */
++ 4, /* Serial Synchronous Controller 2 */
+ 0, /* Timer Counter 0 */
+ 0, /* Timer Counter 1 */
+ 0, /* Timer Counter 2 */
+- 3, /* USB Host port */
++ 2, /* USB Host port */
+ 3, /* LCD Controller */
+ 0,
+ 0,
+diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c
+index 64979a9..a47b95d 100644
+--- a/arch/arm/mach-at91/at91sam9261_devices.c
++++ b/arch/arm/mach-at91/at91sam9261_devices.c
+@@ -507,6 +507,17 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
+ return;
+ }
+
++#if defined(CONFIG_FB_ATMEL_STN)
++ at91_set_A_periph(AT91_PIN_PB0, 0); /* LCDVSYNC */
++ at91_set_A_periph(AT91_PIN_PB1, 0); /* LCDHSYNC */
++ at91_set_A_periph(AT91_PIN_PB2, 0); /* LCDDOTCK */
++ at91_set_A_periph(AT91_PIN_PB3, 0); /* LCDDEN */
++ at91_set_A_periph(AT91_PIN_PB4, 0); /* LCDCC */
++ at91_set_A_periph(AT91_PIN_PB5, 0); /* LCDD0 */
++ at91_set_A_periph(AT91_PIN_PB6, 0); /* LCDD1 */
++ at91_set_A_periph(AT91_PIN_PB7, 0); /* LCDD2 */
++ at91_set_A_periph(AT91_PIN_PB8, 0); /* LCDD3 */
++#else
+ at91_set_A_periph(AT91_PIN_PB1, 0); /* LCDHSYNC */
+ at91_set_A_periph(AT91_PIN_PB2, 0); /* LCDDOTCK */
+ at91_set_A_periph(AT91_PIN_PB3, 0); /* LCDDEN */
+@@ -529,6 +540,7 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data)
+ at91_set_B_periph(AT91_PIN_PB26, 0); /* LCDD21 */
+ at91_set_B_periph(AT91_PIN_PB27, 0); /* LCDD22 */
+ at91_set_B_periph(AT91_PIN_PB28, 0); /* LCDD23 */
++#endif
+
+ lcdc_data = *data;
+ platform_device_register(&at91_lcdc_device);
+@@ -539,6 +551,46 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
+
+
+ /* --------------------------------------------------------------------
++ * RTC (RTT)
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_RTC_DRV_AT91SAM9) || defined(CONFIG_RTC_DRV_AT91SAM9_MODULE)
++static struct platform_device at91sam9261_rtc_device = {
++ .name = "at91_rtc",
++ .id = -1,
++ .num_resources = 0,
++};
++
++static void __init at91_add_device_rtc(void)
++{
++ platform_device_register(&at91sam9261_rtc_device);
++}
++#else
++static void __init at91_add_device_rtc(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ * Watchdog
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
++static struct platform_device at91sam9261_wdt_device = {
++ .name = "at91_wdt",
++ .id = -1,
++ .num_resources = 0,
++};
++
++static void __init at91_add_device_watchdog(void)
++{
++ platform_device_register(&at91sam9261_wdt_device);
++}
++#else
++static void __init at91_add_device_watchdog(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
+ * LEDs
+ * -------------------------------------------------------------------- */
+
+@@ -560,6 +612,38 @@ void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
+ #endif
+
+
++#if defined(CONFIG_NEW_LEDS)
++static struct gpio_led_platform_data led_data;
++
++static struct platform_device at91_leds = {
++ .name = "leds-gpio",
++ .id = -1,
++ .dev = {
++ .platform_data = &led_data,
++ }
++};
++
++void __init at91_gpio_leds(struct gpio_led *leds, int nr)
++{
++ int i;
++
++ if (!nr)
++ return;
++
++ at91_leds.dev.platform_data = leds;
++
++ for (i = 0; i < nr; i++)
++ at91_set_gpio_output(leds[i].gpio, leds[i].active_low);
++
++ led_data.leds = leds;
++ led_data.num_leds = nr;
++ platform_device_register(&at91_leds);
++}
++#else
++void __init at91_gpio_leds(struct gpio_led *leds, int nr) {}
++#endif
++
++
+ /* --------------------------------------------------------------------
+ * UART
+ * -------------------------------------------------------------------- */
+@@ -774,6 +858,8 @@ void __init at91_add_device_serial(void) {}
+ */
+ static int __init at91_add_standard_devices(void)
+ {
++ at91_add_device_rtc();
++ at91_add_device_watchdog();
+ return 0;
+ }
+
+diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c
+index 00e27b1..c836bf7 100644
+--- a/arch/arm/mach-at91/at91sam9263.c
++++ b/arch/arm/mach-at91/at91sam9263.c
+@@ -273,6 +273,28 @@ static void at91sam9263_reset(void)
+
+
+ /* --------------------------------------------------------------------
++ * Timer/Counter library initialization
++ * -------------------------------------------------------------------- */
++#ifdef CONFIG_ATMEL_TCLIB
++
++#include "tclib.h"
++
++static struct atmel_tcblock at91sam9263_tcblocks[] = {
++ [0] = {
++ .physaddr = AT91SAM9263_BASE_TCB0,
++ .irq = { AT91SAM9263_ID_TCB, AT91SAM9263_ID_TCB, AT91SAM9263_ID_TCB },
++ .clk = { &tcb_clk, &tcb_clk, &tcb_clk },
++ }
++};
++
++#define at91sam9263_tc_init() atmel_tc_init(at91sam9263_tcblocks, ARRAY_SIZE(at91sam9263_tcblocks))
++
++#else
++#define at91sam9263_tc_init() do {} while(0)
++#endif
++
++
++/* --------------------------------------------------------------------
+ * AT91SAM9263 processor initialization
+ * -------------------------------------------------------------------- */
+
+@@ -292,6 +314,9 @@ void __init at91sam9263_initialize(unsigned long main_clock)
+
+ /* Register GPIO subsystem */
+ at91_gpio_init(at91sam9263_gpio, 5);
++
++ /* Initialize the Timer/Counter blocks */
++ at91sam9263_tc_init();
+ }
+
+ /* --------------------------------------------------------------------
+@@ -304,34 +329,34 @@ void __init at91sam9263_initialize(unsigned long main_clock)
+ static unsigned int at91sam9263_default_irq_priority[NR_AIC_IRQS] __initdata = {
+ 7, /* Advanced Interrupt Controller (FIQ) */
+ 7, /* System Peripherals */
+- 0, /* Parallel IO Controller A */
+- 0, /* Parallel IO Controller B */
+- 0, /* Parallel IO Controller C, D and E */
++ 1, /* Parallel IO Controller A */
++ 1, /* Parallel IO Controller B */
++ 1, /* Parallel IO Controller C, D and E */
+ 0,
+ 0,
+- 6, /* USART 0 */
+- 6, /* USART 1 */
+- 6, /* USART 2 */
++ 5, /* USART 0 */
++ 5, /* USART 1 */
++ 5, /* USART 2 */
+ 0, /* Multimedia Card Interface 0 */
+ 0, /* Multimedia Card Interface 1 */
+- 4, /* CAN */
+- 0, /* Two-Wire Interface */
+- 6, /* Serial Peripheral Interface 0 */
+- 6, /* Serial Peripheral Interface 1 */
+- 5, /* Serial Synchronous Controller 0 */
+- 5, /* Serial Synchronous Controller 1 */
+- 6, /* AC97 Controller */
++ 3, /* CAN */
++ 6, /* Two-Wire Interface */
++ 5, /* Serial Peripheral Interface 0 */
++ 5, /* Serial Peripheral Interface 1 */
++ 4, /* Serial Synchronous Controller 0 */
++ 4, /* Serial Synchronous Controller 1 */
++ 5, /* AC97 Controller */
+ 0, /* Timer Counter 0, 1 and 2 */
+ 0, /* Pulse Width Modulation Controller */
+ 3, /* Ethernet */
+ 0,
+ 0, /* 2D Graphic Engine */
+- 3, /* USB Device Port */
++ 2, /* USB Device Port */
+ 0, /* Image Sensor Interface */
+ 3, /* LDC Controller */
+ 0, /* DMA Controller */
+ 0,
+- 3, /* USB Host port */
++ 2, /* USB Host port */
+ 0, /* Advanced Interrupt Controller (IRQ0) */
+ 0, /* Advanced Interrupt Controller (IRQ1) */
+ };
+diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c
+index ac329a9..bb2ff26 100644
+--- a/arch/arm/mach-at91/at91sam9263_devices.c
++++ b/arch/arm/mach-at91/at91sam9263_devices.c
+@@ -663,6 +663,56 @@ void __init at91_add_device_ac97(struct atmel_ac97_data *data) {}
+
+
+ /* --------------------------------------------------------------------
++ * Image Sensor Interface
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_VIDEO_AT91_ISI) || defined(CONFIG_VIDEO_AT91_ISI_MODULE)
++
++struct resource isi_resources[] = {
++ [0] = {
++ .start = AT91SAM9263_BASE_ISI,
++ .end = AT91SAM9263_BASE_ISI + SZ_16K - 1,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = AT91SAM9263_ID_ISI,
++ .end = AT91SAM9263_ID_ISI,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct platform_device at91sam9263_isi_device = {
++ .name = "at91_isi",
++ .id = -1,
++ .resource = isi_resources,
++ .num_resources = ARRAY_SIZE(isi_resources),
++};
++
++void __init at91_add_device_isi(void)
++{
++ at91_set_A_periph(AT91_PIN_PE0, 0); /* ISI_D0 */
++ at91_set_A_periph(AT91_PIN_PE1, 0); /* ISI_D1 */
++ at91_set_A_periph(AT91_PIN_PE2, 0); /* ISI_D2 */
++ at91_set_A_periph(AT91_PIN_PE3, 0); /* ISI_D3 */
++ at91_set_A_periph(AT91_PIN_PE4, 0); /* ISI_D4 */
++ at91_set_A_periph(AT91_PIN_PE5, 0); /* ISI_D5 */
++ at91_set_A_periph(AT91_PIN_PE6, 0); /* ISI_D6 */
++ at91_set_A_periph(AT91_PIN_PE7, 0); /* ISI_D7 */
++ at91_set_A_periph(AT91_PIN_PE8, 0); /* ISI_PCK */
++ at91_set_A_periph(AT91_PIN_PE9, 0); /* ISI_HSYNC */
++ at91_set_A_periph(AT91_PIN_PE10, 0); /* ISI_VSYNC */
++ at91_set_B_periph(AT91_PIN_PE11, 0); /* ISI_MCK (PCK3) */
++ at91_set_B_periph(AT91_PIN_PE12, 0); /* ISI_PD8 */
++ at91_set_B_periph(AT91_PIN_PE13, 0); /* ISI_PD9 */
++ at91_set_B_periph(AT91_PIN_PE14, 0); /* ISI_PD10 */
++ at91_set_B_periph(AT91_PIN_PE15, 0); /* ISI_PD11 */
++}
++#else
++void __init at91_add_device_isi(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
+ * LCD Controller
+ * -------------------------------------------------------------------- */
+
+@@ -732,6 +782,46 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
+
+
+ /* --------------------------------------------------------------------
++ * RTC (RTT)
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_RTC_DRV_AT91SAM9) || defined(CONFIG_RTC_DRV_AT91SAM9_MODULE)
++static struct platform_device at91sam9263_rtc_device = {
++ .name = "at91_rtc",
++ .id = -1,
++ .num_resources = 0,
++};
++
++static void __init at91_add_device_rtc(void)
++{
++ platform_device_register(&at91sam9263_rtc_device);
++}
++#else
++static void __init at91_add_device_rtc(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ * Watchdog
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
++static struct platform_device at91sam9263_wdt_device = {
++ .name = "at91_wdt",
++ .id = -1,
++ .num_resources = 0,
++};
++
++static void __init at91_add_device_watchdog(void)
++{
++ platform_device_register(&at91sam9263_wdt_device);
++}
++#else
++static void __init at91_add_device_watchdog(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
+ * LEDs
+ * -------------------------------------------------------------------- */
+
+@@ -753,6 +843,38 @@ void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
+ #endif
+
+
++#if defined(CONFIG_NEW_LEDS)
++static struct gpio_led_platform_data led_data;
++
++static struct platform_device at91_leds = {
++ .name = "leds-gpio",
++ .id = -1,
++ .dev = {
++ .platform_data = &led_data,
++ }
++};
++
++void __init at91_gpio_leds(struct gpio_led *leds, int nr)
++{
++ int i;
++
++ if (!nr)
++ return;
++
++ at91_leds.dev.platform_data = leds;
++
++ for (i = 0; i < nr; i++)
++ at91_set_gpio_output(leds[i].gpio, leds[i].active_low);
++
++ led_data.leds = leds;
++ led_data.num_leds = nr;
++ platform_device_register(&at91_leds);
++}
++#else
++void __init at91_gpio_leds(struct gpio_led *leds, int nr) {}
++#endif
++
++
+ /* --------------------------------------------------------------------
+ * UART
+ * -------------------------------------------------------------------- */
+@@ -971,6 +1093,8 @@ void __init at91_add_device_serial(void) {}
+ */
+ static int __init at91_add_standard_devices(void)
+ {
++ at91_add_device_rtc();
++ at91_add_device_watchdog();
+ return 0;
+ }
+
+diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c
+index 4813a35..dfe7a5f 100644
+--- a/arch/arm/mach-at91/at91sam9rl.c
++++ b/arch/arm/mach-at91/at91sam9rl.c
+@@ -246,6 +246,28 @@ static void at91sam9rl_reset(void)
+
+
+ /* --------------------------------------------------------------------
++ * Timer/Counter library initialization
++ * -------------------------------------------------------------------- */
++#ifdef CONFIG_ATMEL_TCLIB
++
++#include "tclib.h"
++
++static struct atmel_tcblock at91sam9rl_tcblocks[] = {
++ [0] = {
++ .physaddr = AT91SAM9RL_BASE_TCB0,
++ .irq = { AT91SAM9RL_ID_TC0, AT91SAM9RL_ID_TC1, AT91SAM9RL_ID_TC2 },
++ .clk = { &tc0_clk, &tc1_clk, &tc2_clk },
++ }
++};
++
++#define at91sam9rl_tc_init() atmel_tc_init(at91sam9rl_tcblocks, ARRAY_SIZE(at91sam9rl_tcblocks))
++
++#else
++#define at91sam9rl_tc_init() do {} while(0)
++#endif
++
++
++/* --------------------------------------------------------------------
+ * AT91SAM9RL processor initialization
+ * -------------------------------------------------------------------- */
+
+@@ -284,6 +306,9 @@ void __init at91sam9rl_initialize(unsigned long main_clock)
+
+ /* Register GPIO subsystem */
+ at91_gpio_init(at91sam9rl_gpio, 4);
++
++ /* Initialize the Timer/Counter blocks */
++ at91sam9rl_tc_init();
+ }
+
+ /* --------------------------------------------------------------------
+diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c
+index 2bd60a3..ad59471 100644
+--- a/arch/arm/mach-at91/at91sam9rl_devices.c
++++ b/arch/arm/mach-at91/at91sam9rl_devices.c
+@@ -384,6 +384,46 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
+
+
+ /* --------------------------------------------------------------------
++ * RTC (RTT)
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_RTC_DRV_AT91SAM9) || defined(CONFIG_RTC_DRV_AT91SAM9_MODULE)
++static struct platform_device at91sam9rl_rtc_device = {
++ .name = "at91_rtc",
++ .id = -1,
++ .num_resources = 0,
++};
++
++static void __init at91_add_device_rtc(void)
++{
++ platform_device_register(&at91sam9rl_rtc_device);
++}
++#else
++static void __init at91_add_device_rtc(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
++ * Watchdog
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_AT91SAM9_WATCHDOG) || defined(CONFIG_AT91SAM9_WATCHDOG_MODULE)
++static struct platform_device at91sam9rl_wdt_device = {
++ .name = "at91_wdt",
++ .id = -1,
++ .num_resources = 0,
++};
++
++static void __init at91_add_device_watchdog(void)
++{
++ platform_device_register(&at91sam9rl_wdt_device);
++}
++#else
++static void __init at91_add_device_watchdog(void) {}
++#endif
++
++
++/* --------------------------------------------------------------------
+ * LEDs
+ * -------------------------------------------------------------------- */
+
+@@ -405,6 +445,38 @@ void __init at91_init_leds(u8 cpu_led, u8 timer_led) {}
+ #endif
+
+
++#if defined(CONFIG_NEW_LEDS)
++static struct gpio_led_platform_data led_data;
++
++static struct platform_device at91_leds = {
++ .name = "leds-gpio",
++ .id = -1,
++ .dev = {
++ .platform_data = &led_data,
++ }
++};
++
++void __init at91_gpio_leds(struct gpio_led *leds, int nr)
++{
++ int i;
++
++ if (!nr)
++ return;
++
++ at91_leds.dev.platform_data = leds;
++
++ for (i = 0; i < nr; i++)
++ at91_set_gpio_output(leds[i].gpio, leds[i].active_low);
++
++ led_data.leds = leds;
++ led_data.num_leds = nr;
++ platform_device_register(&at91_leds);
++}
++#else
++void __init at91_gpio_leds(struct gpio_led *leds, int nr) {}
++#endif
++
++
+ /* --------------------------------------------------------------------
+ * UART
+ * -------------------------------------------------------------------- */
+@@ -659,6 +731,8 @@ void __init at91_add_device_serial(void) {}
+ */
+ static int __init at91_add_standard_devices(void)
+ {
++ at91_add_device_rtc();
++ at91_add_device_watchdog();
+ return 0;
+ }
+
+diff --git a/arch/arm/mach-at91/board-cam60.c b/arch/arm/mach-at91/board-cam60.c
+new file mode 100644
+index 0000000..9a5ab71
+--- /dev/null
++++ b/arch/arm/mach-at91/board-cam60.c
+@@ -0,0 +1,148 @@
++/*
++ * KwikByte CAM60
++ *
++ * based on board-sam9260ek.c
++ * Copyright (C) 2005 SAN People
++ * Copyright (C) 2006 Atmel
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++#include <linux/spi/flash.h>
++
++#include <asm/hardware.h>
++#include <asm/setup.h>
++#include <asm/mach-types.h>
++#include <asm/irq.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/arch/board.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/at91sam926x_mc.h>
++
++#include "generic.h"
++
++
++/*
++ * Serial port configuration.
++ * 0 .. 5 = USART0 .. USART5
++ * 6 = DBGU
++ */
++static struct at91_uart_config __initdata cam60_uart_config = {
++ .console_tty = 0, /* ttyS0 */
++ .nr_tty = 1,
++ .tty_map = { 6, -1, -1, -1, -1, -1, -1 } /* ttyS0, ..., ttyS6 */
++};
++
++static void __init cam60_map_io(void)
++{
++ /* Initialize processor: 10 MHz crystal */
++ at91sam9260_initialize(10000000);
++
++ /* Setup the serial ports and console */
++ at91_init_serial(&cam60_uart_config);
++}
++
++static void __init cam60_init_irq(void)
++{
++ at91sam9260_init_interrupts(NULL);
++}
++
++
++/*
++ * SPI devices.
++ */
++#if defined(CONFIG_MTD_DATAFLASH)
++static struct mtd_partition __initdata cam60_spi_partitions[] = {
++ {
++ .name = "BOOT1",
++ .offset = 0,
++ .size = 4 * 1056,
++ },
++ {
++ .name = "BOOT2",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 256 * 1056,
++ },
++ {
++ .name = "kernel",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 2222 * 1056,
++ },
++ {
++ .name = "file system",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = MTDPART_SIZ_FULL,
++ },
++};
++
++static struct flash_platform_data __initdata cam60_spi_flash_platform_data = {
++ .name = "spi_flash",
++ .parts = cam60_spi_partitions,
++ .nr_parts = ARRAY_SIZE(cam60_spi_partitions)
++};
++#endif
++
++static struct spi_board_info cam60_spi_devices[] = {
++#if defined(CONFIG_MTD_DATAFLASH)
++ { /* DataFlash chip */
++ .modalias = "mtd_dataflash",
++ .chip_select = 0,
++ .max_speed_hz = 15 * 1000 * 1000,
++ .bus_num = 0,
++ .platform_data = &cam60_spi_flash_platform_data
++ },
++#endif
++};
++
++
++/*
++ * MACB Ethernet device
++ */
++static struct __initdata at91_eth_data cam60_macb_data = {
++ .phy_irq_pin = AT91_PIN_PB5,
++ .is_rmii = 0,
++};
++
++
++static void __init cam60_board_init(void)
++{
++ /* Serial */
++ at91_add_device_serial();
++ /* SPI */
++ at91_add_device_spi(cam60_spi_devices, ARRAY_SIZE(cam60_spi_devices));
++ /* Ethernet */
++ at91_add_device_eth(&cam60_macb_data);
++}
++
++MACHINE_START(CAM60, "KwikByte CAM60")
++ /* Maintainer: KwikByte */
++ .phys_io = AT91_BASE_SYS,
++ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
++ .boot_params = AT91_SDRAM_BASE + 0x100,
++ .timer = &at91sam926x_timer,
++ .map_io = cam60_map_io,
++ .init_irq = cam60_init_irq,
++ .init_machine = cam60_board_init,
++MACHINE_END
+diff --git a/arch/arm/mach-at91/board-chub.c b/arch/arm/mach-at91/board-chub.c
+new file mode 100644
+index 0000000..01d8ec5
+--- /dev/null
++++ b/arch/arm/mach-at91/board-chub.c
+@@ -0,0 +1,132 @@
++/*
++ * linux/arch/arm/mach-at91/board-chub.c
++ *
++ * Copyright (C) 2005 SAN People, adapted for Promwad Chub board
++ * by Kuten Ivan
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <asm/hardware.h>
++#include <asm/setup.h>
++#include <asm/mach-types.h>
++#include <asm/irq.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/arch/board.h>
++#include <asm/arch/gpio.h>
++
++#include "generic.h"
++
++/*
++ * Serial port configuration.
++ * 0 .. 3 = USART0 .. USART3
++ * 4 = DBGU
++ */
++static struct at91_uart_config __initdata chub_uart_config = {
++ .console_tty = 0, /* ttyS0 */
++ .nr_tty = 5,
++ .tty_map = { 4, 0, 1, 2, 3 } /* ttyS0, ..., ttyS4 */
++};
++
++static void __init chub_init_irq(void)
++{
++ at91rm9200_init_interrupts(NULL);
++}
++
++static void __init chub_map_io(void)
++{
++ /* Initialize clocks: 18.432 MHz crystal */
++ at91rm9200_initialize(18432000, AT91RM9200_PQFP);
++
++ /* Setup the serial ports and console */
++ at91_init_serial(&chub_uart_config);
++}
++
++static struct at91_eth_data __initdata chub_eth_data = {
++ .phy_irq_pin = AT91_PIN_PB29,
++ .is_rmii = 0,
++};
++
++static struct mtd_partition __initdata chub_nand_partition[] = {
++ {
++ .name = "NAND Partition 1",
++ .offset = 0,
++ .size = MTDPART_SIZ_FULL,
++ },
++};
++
++static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
++{
++ *num_partitions = ARRAY_SIZE(chub_nand_partition);
++ return chub_nand_partition;
++}
++
++static struct at91_nand_data __initdata chub_nand_data = {
++ .ale = 22,
++ .cle = 21,
++ .enable_pin = AT91_PIN_PA27,
++ .partition_info = nand_partitions,
++};
++
++static struct spi_board_info chub_spi_devices[] = {
++ { /* DataFlash chip */
++ .modalias = "mtd_dataflash",
++ .chip_select = 0,
++ .max_speed_hz = 15 * 1000 * 1000,
++ },
++};
++
++static void __init chub_board_init(void)
++{
++ /* Serial */
++ at91_add_device_serial();
++ /* I2C */
++ at91_add_device_i2c(NULL, 0);
++ /* Ethernet */
++ at91_add_device_eth(&chub_eth_data);
++ /* SPI */
++ at91_add_device_spi(chub_spi_devices, ARRAY_SIZE(chub_spi_devices));
++ /* NAND Flash */
++ at91_add_device_nand(&chub_nand_data);
++ /* Disable write protect for NAND */
++ at91_set_gpio_output(AT91_PIN_PB7, 1);
++ /* Power enable for 3x RS-232 and 1x RS-485 */
++ at91_set_gpio_output(AT91_PIN_PB9, 1);
++ /* Disable write protect for FRAM */
++ at91_set_gpio_output(AT91_PIN_PA21, 1);
++ /* Disable write protect for Dataflash */
++ at91_set_gpio_output(AT91_PIN_PA19, 1);
++}
++
++MACHINE_START(CHUB, "Promwad Chub")
++ /* Maintainer: Ivan Kuten AT Promwad DOT com */
++ .phys_io = AT91_BASE_SYS,
++ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
++ .boot_params = AT91_SDRAM_BASE + 0x100,
++ .timer = &at91rm9200_timer,
++ .map_io = chub_map_io,
++ .init_irq = chub_init_irq,
++ .init_machine = chub_board_init,
++MACHINE_END
+diff --git a/arch/arm/mach-at91/board-csb337.c b/arch/arm/mach-at91/board-csb337.c
+index d0aa20c..9f1f4ea 100644
+--- a/arch/arm/mach-at91/board-csb337.c
++++ b/arch/arm/mach-at91/board-csb337.c
+@@ -24,6 +24,7 @@
+ #include <linux/module.h>
+ #include <linux/platform_device.h>
+ #include <linux/spi/spi.h>
++#include <linux/interrupt.h>
+ #include <linux/mtd/physmap.h>
+
+ #include <asm/hardware.h>
+@@ -59,6 +60,7 @@ static void __init csb337_map_io(void)
+
+ /* Setup the LEDs */
+ at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1);
++ at91_set_gpio_output(AT91_PIN_PB2, 1); /* third (unused) LED */
+
+ /* Setup the serial ports and console */
+ at91_init_serial(&csb337_uart_config);
+@@ -156,6 +158,58 @@ static struct platform_device csb_flash = {
+ .num_resources = ARRAY_SIZE(csb_flash_resources),
+ };
+
++static struct gpio_led csb337_leds[] = {
++ {
++ .name = "led0",
++ .gpio = AT91_PIN_PB0,
++ .active_low = 1,
++ .default_trigger = "heartbeat",
++ },
++ {
++ .name = "led1",
++ .gpio = AT91_PIN_PB1,
++ .active_low = 1,
++ .default_trigger = "timer",
++ },
++ {
++ .name = "led2",
++ .active_low = 1,
++ .gpio = AT91_PIN_PB2,
++ }
++};
++
++#if defined(CONFIG_CSB300_WAKE_SW0) || defined(CONFIG_CSB300_WAKE_SW1)
++static irqreturn_t switch_irq_handler(int irq, void *context)
++{
++ return IRQ_HANDLED;
++}
++
++static inline void __init switch_irq_setup(int irq, char *name, unsigned long mode)
++{
++ int res;
++
++ res = request_irq(irq, switch_irq_handler, IRQF_SAMPLE_RANDOM | mode, name, NULL);
++ if (res == 0)
++ enable_irq_wake(irq);
++}
++
++static void __init csb300_switches(void)
++{
++#ifdef CONFIG_CSB300_WAKE_SW0
++ at91_set_A_periph(AT91_PIN_PB29, 1); /* IRQ0 */
++ switch_irq_setup(AT91RM9200_ID_IRQ0, "csb300_sw0", IRQF_TRIGGER_FALLING);
++#endif
++#ifdef CONFIG_CSB300_WAKE_SW1
++ at91_set_gpio_input(AT91_PIN_PB28, 1);
++ at91_set_deglitch(AT91_PIN_PB28, 1);
++ switch_irq_setup(AT91_PIN_PB28, "csb300_sw1", IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING);
++#endif
++ /* there's also SW2 at PA21, GPIO or TIOA2 */
++}
++#else
++static void __init csb300_switches(void) {}
++#endif
++
+ static void __init csb337_board_init(void)
+ {
+ /* Serial */
+@@ -175,8 +229,12 @@ static void __init csb337_board_init(void)
+ at91_add_device_spi(csb337_spi_devices, ARRAY_SIZE(csb337_spi_devices));
+ /* MMC */
+ at91_add_device_mmc(0, &csb337_mmc_data);
++ /* LEDS */
++ at91_gpio_leds(csb337_leds, ARRAY_SIZE(csb337_leds));
+ /* NOR flash */
+ platform_device_register(&csb_flash);
++ /* Switches on CSB300 */
++ csb300_switches();
+ }
+
+ MACHINE_START(CSB337, "Cogent CSB337")
+diff --git a/arch/arm/mach-at91/board-dk.c b/arch/arm/mach-at91/board-dk.c
+index 40c9e43..4d9c153 100644
+--- a/arch/arm/mach-at91/board-dk.c
++++ b/arch/arm/mach-at91/board-dk.c
+@@ -73,6 +73,185 @@ static void __init dk_init_irq(void)
+ at91rm9200_init_interrupts(NULL);
+ }
+
++#if defined(CONFIG_FB_S1D13XXX) || defined(CONFIG_FB_S1D13XXX_MODULE)
++#include <video/s1d13xxxfb.h>
++#include <asm/arch/ics1523.h>
++
++/* EPSON S1D13806 FB */
++#define AT91_FB_REG_BASE 0x30000000L
++#define AT91_FB_REG_SIZE 0x200
++#define AT91_FB_VMEM_BASE 0x30200000L
++#define AT91_FB_VMEM_SIZE 0x140000L
++
++static void __init dk_init_video(void)
++{
++ /* NWAIT Signal */
++ at91_set_A_periph(AT91_PIN_PC6, 0);
++
++ /* Initialization of the Static Memory Controller for Chip Select 2 */
++ at91_sys_write(AT91_SMC_CSR(2), AT91_SMC_DBW_16 /* 16 bit */
++ | AT91_SMC_WSEN | AT91_SMC_NWS_(4) /* wait states */
++ | AT91_SMC_TDF_(1) /* float time */
++ );
++
++ at91_ics1523_init();
++}
++
++/* CRT: (active) 640x480 60Hz (PCLK=CLKI=25.175MHz)
++ Memory: Embedded SDRAM (MCLK=CLKI3=50.000MHz) (BUSCLK=60.000MHz) */
++static const struct s1d13xxxfb_regval dk_s1dfb_initregs[] = {
++ {S1DREG_MISC, 0x00}, /* Enable Memory/Register select bit */
++ {S1DREG_COM_DISP_MODE, 0x00}, /* disable display output */
++ {S1DREG_GPIO_CNF0, 0x00},
++ {S1DREG_GPIO_CNF1, 0x00},
++ {S1DREG_GPIO_CTL0, 0x08},
++ {S1DREG_GPIO_CTL1, 0x00},
++ {S1DREG_CLK_CNF, 0x01}, /* no divide, MCLK source is CLKI3 0x02*/
++ {S1DREG_LCD_CLK_CNF, 0x00},
++ {S1DREG_CRT_CLK_CNF, 0x00},
++ {S1DREG_MPLUG_CLK_CNF, 0x00},
++ {S1DREG_CPU2MEM_WST_SEL, 0x01}, /* 2*period(MCLK) - 4ns > period(BCLK) */
++ {S1DREG_SDRAM_REF_RATE, 0x03}, /* 32768 <= MCLK <= 50000 (MHz) */
++ {S1DREG_SDRAM_TC0, 0x00}, /* MCLK source freq (MHz): */
++ {S1DREG_SDRAM_TC1, 0x01}, /* 42 <= MCLK <= 50 */
++ {S1DREG_MEM_CNF, 0x80}, /* SDRAM Initialization - needed before mem access */
++ {S1DREG_PANEL_TYPE, 0x25}, /* std TFT 16bit, 8bit SCP format 2, single passive LCD */
++ {S1DREG_MOD_RATE, 0x00}, /* toggle every FPFRAME */
++ {S1DREG_LCD_DISP_HWIDTH, 0x4F}, /* 680 pix */
++ {S1DREG_LCD_NDISP_HPER, 0x12}, /* 152 pix */
++ {S1DREG_TFT_FPLINE_START, 0x01}, /* 13 pix */
++ {S1DREG_TFT_FPLINE_PWIDTH, 0x0B}, /* 96 pix */
++ {S1DREG_LCD_DISP_VHEIGHT0, 0xDF},
++ {S1DREG_LCD_DISP_VHEIGHT1, 0x01}, /* 480 lines */
++ {S1DREG_LCD_NDISP_VPER, 0x2C}, /* 44 lines */
++ {S1DREG_TFT_FPFRAME_START, 0x0A}, /* 10 lines */
++ {S1DREG_TFT_FPFRAME_PWIDTH, 0x01}, /* 2 lines */
++ {S1DREG_LCD_DISP_MODE, 0x05}, /* 16 bpp */
++ {S1DREG_LCD_MISC, 0x00}, /* dithering enabled, dual panel buffer enabled */
++ {S1DREG_LCD_DISP_START0, 0x00},
++ {S1DREG_LCD_DISP_START1, 0xC8},
++ {S1DREG_LCD_DISP_START2, 0x00},
++ {S1DREG_LCD_MEM_OFF0, 0x80},
++ {S1DREG_LCD_MEM_OFF1, 0x02},
++ {S1DREG_LCD_PIX_PAN, 0x00},
++ {S1DREG_LCD_DISP_FIFO_HTC, 0x3B},
++ {S1DREG_LCD_DISP_FIFO_LTC, 0x3C},
++ {S1DREG_CRT_DISP_HWIDTH, 0x4F}, /* 680 pix */
++ {S1DREG_CRT_NDISP_HPER, 0x13}, /* 160 pix */
++ {S1DREG_CRT_HRTC_START, 0x01}, /* 13 pix */
++ {S1DREG_CRT_HRTC_PWIDTH, 0x0B}, /* 96 pix */
++ {S1DREG_CRT_DISP_VHEIGHT0, 0xDF},
++ {S1DREG_CRT_DISP_VHEIGHT1, 0x01}, /* 480 lines */
++ {S1DREG_CRT_NDISP_VPER, 0x2B}, /* 44 lines */
++ {S1DREG_CRT_VRTC_START, 0x09}, /* 10 lines */
++ {S1DREG_CRT_VRTC_PWIDTH, 0x01}, /* 2 lines */
++ {S1DREG_TV_OUT_CTL, 0x10},
++ {S1DREG_CRT_DISP_MODE, 0x05}, /* 16 bpp */
++ {S1DREG_CRT_DISP_START0, 0x00},
++ {S1DREG_CRT_DISP_START1, 0x00},
++ {S1DREG_CRT_DISP_START2, 0x00},
++ {S1DREG_CRT_MEM_OFF0, 0x80},
++ {S1DREG_CRT_MEM_OFF1, 0x02},
++ {S1DREG_CRT_PIX_PAN, 0x00},
++ {S1DREG_CRT_DISP_FIFO_HTC, 0x3B},
++ {S1DREG_CRT_DISP_FIFO_LTC, 0x3C},
++ {S1DREG_LCD_CUR_CTL, 0x00}, /* inactive */
++ {S1DREG_LCD_CUR_START, 0x01},
++ {S1DREG_LCD_CUR_XPOS0, 0x00},
++ {S1DREG_LCD_CUR_XPOS1, 0x00},
++ {S1DREG_LCD_CUR_YPOS0, 0x00},
++ {S1DREG_LCD_CUR_YPOS1, 0x00},
++ {S1DREG_LCD_CUR_BCTL0, 0x00},
++ {S1DREG_LCD_CUR_GCTL0, 0x00},
++ {S1DREG_LCD_CUR_RCTL0, 0x00},
++ {S1DREG_LCD_CUR_BCTL1, 0x1F},
++ {S1DREG_LCD_CUR_GCTL1, 0x3F},
++ {S1DREG_LCD_CUR_RCTL1, 0x1F},
++ {S1DREG_LCD_CUR_FIFO_HTC, 0x00},
++ {S1DREG_CRT_CUR_CTL, 0x00}, /* inactive */
++ {S1DREG_CRT_CUR_START, 0x01},
++ {S1DREG_CRT_CUR_XPOS0, 0x00},
++ {S1DREG_CRT_CUR_XPOS1, 0x00},
++ {S1DREG_CRT_CUR_YPOS0, 0x00},
++ {S1DREG_CRT_CUR_YPOS1, 0x00},
++ {S1DREG_CRT_CUR_BCTL0, 0x00},
++ {S1DREG_CRT_CUR_GCTL0, 0x00},
++ {S1DREG_CRT_CUR_RCTL0, 0x00},
++ {S1DREG_CRT_CUR_BCTL1, 0x1F},
++ {S1DREG_CRT_CUR_GCTL1, 0x3F},
++ {S1DREG_CRT_CUR_RCTL1, 0x1F},
++ {S1DREG_CRT_CUR_FIFO_HTC, 0x00},
++ {S1DREG_BBLT_CTL0, 0x00},
++ {S1DREG_BBLT_CTL0, 0x00},
++ {S1DREG_BBLT_CC_EXP, 0x00},
++ {S1DREG_BBLT_OP, 0x00},
++ {S1DREG_BBLT_SRC_START0, 0x00},
++ {S1DREG_BBLT_SRC_START1, 0x00},
++ {S1DREG_BBLT_SRC_START2, 0x00},
++ {S1DREG_BBLT_DST_START0, 0x00},
++ {S1DREG_BBLT_DST_START1, 0x00},
++ {S1DREG_BBLT_DST_START2, 0x00},
++ {S1DREG_BBLT_MEM_OFF0, 0x00},
++ {S1DREG_BBLT_MEM_OFF1, 0x00},
++ {S1DREG_BBLT_WIDTH0, 0x00},
++ {S1DREG_BBLT_WIDTH1, 0x00},
++ {S1DREG_BBLT_HEIGHT0, 0x00},
++ {S1DREG_BBLT_HEIGHT1, 0x00},
++ {S1DREG_BBLT_BGC0, 0x00},
++ {S1DREG_BBLT_BGC1, 0x00},
++ {S1DREG_BBLT_FGC0, 0x00},
++ {S1DREG_BBLT_FGC1, 0x00},
++ {S1DREG_LKUP_MODE, 0x00}, /* LCD LUT r | LCD and CRT/TV LUT w */
++ {S1DREG_LKUP_ADDR, 0x00},
++ {S1DREG_PS_CNF, 0x00}, /* Power Save disable */
++ {S1DREG_PS_STATUS, 0x02}, /* LCD Panel down, mem up */
++ {S1DREG_CPU2MEM_WDOGT, 0x00},
++ {S1DREG_COM_DISP_MODE, 0x02}, /* enable CRT display output */
++};
++
++static struct s1d13xxxfb_pdata dk_s1dfb_pdata = {
++ .initregs = dk_s1dfb_initregs,
++ .initregssize = ARRAY_SIZE(dk_s1dfb_initregs),
++ .platform_init_video = dk_init_video,
++};
++
++static u64 s1dfb_dmamask = 0xffffffffUL;
++
++static struct resource dk_s1dfb_resource[] = {
++ [0] = { /* video mem */
++ .name = "s1d13806 memory",
++ .start = AT91_FB_VMEM_BASE,
++ .end = AT91_FB_VMEM_BASE + AT91_FB_VMEM_SIZE -1,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = { /* video registers */
++ .name = "s1d13806 registers",
++ .start = AT91_FB_REG_BASE,
++ .end = AT91_FB_REG_BASE + AT91_FB_REG_SIZE -1,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static struct platform_device dk_s1dfb_device = {
++ .name = "s1d13806fb",
++ .id = -1,
++ .dev = {
++ .dma_mask = &s1dfb_dmamask,
++ .coherent_dma_mask = 0xffffffff,
++ .platform_data = &dk_s1dfb_pdata,
++ },
++ .resource = dk_s1dfb_resource,
++ .num_resources = ARRAY_SIZE(dk_s1dfb_resource),
++};
++
++static void __init dk_add_device_video(void)
++{
++ platform_device_register(&dk_s1dfb_device);
++}
++#else
++static void __init dk_add_device_video(void) {}
++#endif
++
+ static struct at91_eth_data __initdata dk_eth_data = {
+ .phy_irq_pin = AT91_PIN_PC4,
+ .is_rmii = 1,
+@@ -164,7 +343,7 @@ static struct at91_nand_data __initdata dk_nand_data = {
+ #define DK_FLASH_SIZE 0x200000
+
+ static struct physmap_flash_data dk_flash_data = {
+- .width = 2,
++ .width = 2,
+ };
+
+ static struct resource dk_flash_resource = {
+@@ -183,6 +362,14 @@ static struct platform_device dk_flash = {
+ .num_resources = 1,
+ };
+
++static struct gpio_led dk_leds[] = {
++ {
++ .name = "led0",
++ .gpio = AT91_PIN_PB2,
++ .active_low = 1,
++ .default_trigger = "timer",
++ }
++};
+
+ static void __init dk_board_init(void)
+ {
+@@ -213,8 +400,10 @@ static void __init dk_board_init(void)
+ at91_add_device_nand(&dk_nand_data);
+ /* NOR Flash */
+ platform_device_register(&dk_flash);
++ /* LEDs */
++ at91_gpio_leds(dk_leds, ARRAY_SIZE(dk_leds));
+ /* VGA */
+-// dk_add_device_video();
++ dk_add_device_video();
+ }
+
+ MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")
+diff --git a/arch/arm/mach-at91/board-ecbat91.c b/arch/arm/mach-at91/board-ecbat91.c
+new file mode 100644
+index 0000000..46210c6
+--- /dev/null
++++ b/arch/arm/mach-at91/board-ecbat91.c
+@@ -0,0 +1,183 @@
++/*
++ * linux/arch/arm/mach-at91rm9200/board-ecbat91.c
++ * Copyright (C) 2007 emQbit.com.
++ *
++ * We started from board-dk.c, which is Copyright (C) 2005 SAN People.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++#include <linux/spi/flash.h>
++
++#include <asm/hardware.h>
++#include <asm/setup.h>
++#include <asm/mach-types.h>
++#include <asm/irq.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/arch/board.h>
++#include <asm/arch/gpio.h>
++
++#include "generic.h"
++
++
++/*
++ * Serial port configuration.
++ * 0 .. 3 = USART0 .. USART3
++ * 4 = DBGU
++ */
++static struct at91_uart_config __initdata ecb_at91uart_config = {
++ .console_tty = 0, /* ttyS0 */
++ .nr_tty = 2,
++ .tty_map = { 4, 0, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
++};
++
++static void __init ecb_at91map_io(void)
++{
++ /* Initialize processor: 18.432 MHz crystal */
++ at91rm9200_initialize(18432000, AT91RM9200_PQFP);
++
++ /* Setup the LEDs */
++ at91_init_leds(AT91_PIN_PC7, AT91_PIN_PC7);
++
++ /* Setup the serial ports and console */
++ at91_init_serial(&ecb_at91uart_config);
++}
++
++static void __init ecb_at91init_irq(void)
++{
++ at91rm9200_init_interrupts(NULL);
++}
++
++static struct at91_eth_data __initdata ecb_at91eth_data = {
++ .phy_irq_pin = AT91_PIN_PC4,
++ .is_rmii = 0,
++};
++
++static struct at91_usbh_data __initdata ecb_at91usbh_data = {
++ .ports = 1,
++};
++
++static struct at91_mmc_data __initdata ecb_at91mmc_data = {
++ .slot_b = 0,
++ .wire4 = 1,
++};
++
++
++#if defined(CONFIG_MTD_DATAFLASH)
++static struct mtd_partition __initdata my_flash0_partitions[] =
++{
++ { /* 0x8400 */
++ .name = "Darrell-loader",
++ .offset = 0,
++ .size = 12* 1056,
++ },
++ {
++ .name = "U-boot",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 110 * 1056,
++ },
++ { /* 1336 (167 blocks) pages * 1056 bytes = 0x158700 bytes */
++ .name = "Uoot-env",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 8 * 1056,
++ },
++ { /* 1336 (167 blocks) pages * 1056 bytes = 0x158700 bytes */
++ .name = "Kernel",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 1534 * 1056,
++ },
++ { /* 190200 - jffs2 root filesystem */
++ .name = "Filesystem",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = MTDPART_SIZ_FULL, /* 26 sectors */
++ }
++};
++
++static struct flash_platform_data __initdata my_flash0_platform = {
++ .name = "Removable flash card",
++ .parts = my_flash0_partitions,
++ .nr_parts = ARRAY_SIZE(my_flash0_partitions)
++};
++
++#endif
++
++static struct spi_board_info __initdata ecb_at91spi_devices[] = {
++ { /* DataFlash chip */
++ .modalias = "mtd_dataflash",
++ .chip_select = 0,
++ .max_speed_hz = 10 * 1000 * 1000,
++ .bus_num = 0,
++#if defined(CONFIG_MTD_DATAFLASH)
++ .platform_data = &my_flash0_platform,
++#endif
++ },
++ { /* User accessable spi - cs1 (250KHz) */
++ .modalias = "spi-cs1",
++ .chip_select = 1,
++ .max_speed_hz = 250 * 1000,
++ },
++ { /* User accessable spi - cs2 (1MHz) */
++ .modalias = "spi-cs2",
++ .chip_select = 2,
++ .max_speed_hz = 1 * 1000 * 1000,
++ },
++ { /* User accessable spi - cs3 (10MHz) */
++ .modalias = "spi-cs3",
++ .chip_select = 3,
++ .max_speed_hz = 10 * 1000 * 1000,
++ },
++};
++
++static void __init ecb_at91board_init(void)
++{
++ /* Serial */
++ at91_add_device_serial();
++
++ /* Ethernet */
++ at91_add_device_eth(&ecb_at91eth_data);
++
++ /* USB Host */
++ at91_add_device_usbh(&ecb_at91usbh_data);
++
++ /* I2C */
++ at91_add_device_i2c(NULL, 0);
++
++ /* MMC */
++ at91_add_device_mmc(0, &ecb_at91mmc_data);
++
++ /* SPI */
++ at91_add_device_spi(ecb_at91spi_devices, ARRAY_SIZE(ecb_at91spi_devices));
++}
++
++MACHINE_START(ECBAT91, "emQbit's ECB_AT91")
++ /* Maintainer: emQbit.com */
++ .phys_io = AT91_BASE_SYS,
++ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
++ .boot_params = AT91_SDRAM_BASE + 0x100,
++ .timer = &at91rm9200_timer,
++ .map_io = ecb_at91map_io,
++ .init_irq = ecb_at91init_irq,
++ .init_machine = ecb_at91board_init,
++MACHINE_END
+diff --git a/arch/arm/mach-at91/board-ek.c b/arch/arm/mach-at91/board-ek.c
+index d05b1b2..6a5d310 100644
+--- a/arch/arm/mach-at91/board-ek.c
++++ b/arch/arm/mach-at91/board-ek.c
+@@ -73,6 +73,187 @@ static void __init ek_init_irq(void)
+ at91rm9200_init_interrupts(NULL);
+ }
+
++#if defined(CONFIG_FB_S1D13XXX) || defined(CONFIG_FB_S1D13XXX_MODULE)
++#include <video/s1d13xxxfb.h>
++#include <asm/arch/ics1523.h>
++
++/* EPSON S1D13806 FB */
++#define AT91_FB_REG_BASE 0x40000000L
++#define AT91_FB_REG_SIZE 0x200
++#define AT91_FB_VMEM_BASE 0x40200000L
++#define AT91_FB_VMEM_SIZE 0x140000L
++
++static void __init ek_init_video(void)
++{
++ /* NWAIT Signal */
++ at91_set_A_periph(AT91_PIN_PC6, 0);
++
++ /* Initialization of the Static Memory Controller for Chip Select 3 */
++ at91_sys_write(AT91_SMC_CSR(3), AT91_SMC_DBW_16 /* 16 bit */
++ | AT91_SMC_WSEN | AT91_SMC_NWS_(5) /* wait states */
++ | AT91_SMC_TDF_(1) /* float time */
++ );
++
++ at91_ics1523_init();
++}
++
++/* CRT: (active) 640x480 60Hz (PCLK=CLKI=25.175MHz)
++ Memory: Embedded SDRAM (MCLK=CLKI3=50.000MHz) (BUSCLK=60.000MHz) */
++static const struct s1d13xxxfb_regval ek_s1dfb_initregs[] = {
++ {S1DREG_MISC, 0x00}, /* Enable Memory/Register select bit */
++ {S1DREG_COM_DISP_MODE, 0x00}, /* disable display output */
++ {S1DREG_GPIO_CNF0, 0xFF}, // 0x00
++ {S1DREG_GPIO_CNF1, 0x1F}, // 0x08
++ {S1DREG_GPIO_CTL0, 0x00},
++ {S1DREG_GPIO_CTL1, 0x00},
++ {S1DREG_CLK_CNF, 0x01}, /* no divide, MCLK source is CLKI3 0x02*/
++ {S1DREG_LCD_CLK_CNF, 0x00},
++ {S1DREG_CRT_CLK_CNF, 0x00},
++ {S1DREG_MPLUG_CLK_CNF, 0x00},
++ {S1DREG_CPU2MEM_WST_SEL, 0x01}, /* 2*period(MCLK) - 4ns > period(BCLK) */
++ {S1DREG_SDRAM_REF_RATE, 0x03}, /* 32768 <= MCLK <= 50000 (MHz) */
++ {S1DREG_SDRAM_TC0, 0x00}, /* MCLK source freq (MHz): */
++ {S1DREG_SDRAM_TC1, 0x01}, /* 42 <= MCLK <= 50 */
++ {S1DREG_MEM_CNF, 0x80}, /* SDRAM Initialization - needed before mem access */
++ {S1DREG_PANEL_TYPE, 0x25}, /* std TFT 16bit, 8bit SCP format 2, single passive LCD */
++ {S1DREG_MOD_RATE, 0x00}, /* toggle every FPFRAME */
++ {S1DREG_LCD_DISP_HWIDTH, 0x4F}, /* 680 pix */
++ {S1DREG_LCD_NDISP_HPER, 0x12}, /* 152 pix */
++ {S1DREG_TFT_FPLINE_START, 0x01}, /* 13 pix */
++ {S1DREG_TFT_FPLINE_PWIDTH, 0x0B}, /* 96 pix */
++ {S1DREG_LCD_DISP_VHEIGHT0, 0xDF},
++ {S1DREG_LCD_DISP_VHEIGHT1, 0x01}, /* 480 lines */
++ {S1DREG_LCD_NDISP_VPER, 0x2C}, /* 44 lines */
++ {S1DREG_TFT_FPFRAME_START, 0x0A}, /* 10 lines */
++ {S1DREG_TFT_FPFRAME_PWIDTH, 0x01}, /* 2 lines */
++ {S1DREG_LCD_DISP_MODE, 0x05}, /* 16 bpp */
++ {S1DREG_LCD_MISC, 0x00}, /* dithering enabled, dual panel buffer enabled */
++ {S1DREG_LCD_DISP_START0, 0x00},
++ {S1DREG_LCD_DISP_START1, 0xC8},
++ {S1DREG_LCD_DISP_START2, 0x00},
++ {S1DREG_LCD_MEM_OFF0, 0x80},
++ {S1DREG_LCD_MEM_OFF1, 0x02},
++ {S1DREG_LCD_PIX_PAN, 0x00},
++ {S1DREG_LCD_DISP_FIFO_HTC, 0x3B},
++ {S1DREG_LCD_DISP_FIFO_LTC, 0x3C},
++ {S1DREG_CRT_DISP_HWIDTH, 0x4F}, /* 680 pix */
++ {S1DREG_CRT_NDISP_HPER, 0x13}, /* 160 pix */
++ {S1DREG_CRT_HRTC_START, 0x01}, /* 13 pix */
++ {S1DREG_CRT_HRTC_PWIDTH, 0x0B}, /* 96 pix */
++ {S1DREG_CRT_DISP_VHEIGHT0, 0xDF},
++ {S1DREG_CRT_DISP_VHEIGHT1, 0x01}, /* 480 lines */
++ {S1DREG_CRT_NDISP_VPER, 0x2B}, /* 44 lines */
++ {S1DREG_CRT_VRTC_START, 0x09}, /* 10 lines */
++ {S1DREG_CRT_VRTC_PWIDTH, 0x01}, /* 2 lines */
++ {S1DREG_TV_OUT_CTL, 0x10},
++ {0x005E, 0x9F},
++ {0x005F, 0x00},
++ {S1DREG_CRT_DISP_MODE, 0x05}, /* 16 bpp */
++ {S1DREG_CRT_DISP_START0, 0x00},
++ {S1DREG_CRT_DISP_START1, 0x00},
++ {S1DREG_CRT_DISP_START2, 0x00},
++ {S1DREG_CRT_MEM_OFF0, 0x80},
++ {S1DREG_CRT_MEM_OFF1, 0x02},
++ {S1DREG_CRT_PIX_PAN, 0x00},
++ {S1DREG_CRT_DISP_FIFO_HTC, 0x3B},
++ {S1DREG_CRT_DISP_FIFO_LTC, 0x3C},
++ {S1DREG_LCD_CUR_CTL, 0x00}, /* inactive */
++ {S1DREG_LCD_CUR_START, 0x01},
++ {S1DREG_LCD_CUR_XPOS0, 0x00},
++ {S1DREG_LCD_CUR_XPOS1, 0x00},
++ {S1DREG_LCD_CUR_YPOS0, 0x00},
++ {S1DREG_LCD_CUR_YPOS1, 0x00},
++ {S1DREG_LCD_CUR_BCTL0, 0x00},
++ {S1DREG_LCD_CUR_GCTL0, 0x00},
++ {S1DREG_LCD_CUR_RCTL0, 0x00},
++ {S1DREG_LCD_CUR_BCTL1, 0x1F},
++ {S1DREG_LCD_CUR_GCTL1, 0x3F},
++ {S1DREG_LCD_CUR_RCTL1, 0x1F},
++ {S1DREG_LCD_CUR_FIFO_HTC, 0x00},
++ {S1DREG_CRT_CUR_CTL, 0x00}, /* inactive */
++ {S1DREG_CRT_CUR_START, 0x01},
++ {S1DREG_CRT_CUR_XPOS0, 0x00},
++ {S1DREG_CRT_CUR_XPOS1, 0x00},
++ {S1DREG_CRT_CUR_YPOS0, 0x00},
++ {S1DREG_CRT_CUR_YPOS1, 0x00},
++ {S1DREG_CRT_CUR_BCTL0, 0x00},
++ {S1DREG_CRT_CUR_GCTL0, 0x00},
++ {S1DREG_CRT_CUR_RCTL0, 0x00},
++ {S1DREG_CRT_CUR_BCTL1, 0x1F},
++ {S1DREG_CRT_CUR_GCTL1, 0x3F},
++ {S1DREG_CRT_CUR_RCTL1, 0x1F},
++ {S1DREG_CRT_CUR_FIFO_HTC, 0x00},
++ {S1DREG_BBLT_CTL0, 0x00},
++ {S1DREG_BBLT_CTL0, 0x00},
++ {S1DREG_BBLT_CC_EXP, 0x00},
++ {S1DREG_BBLT_OP, 0x00},
++ {S1DREG_BBLT_SRC_START0, 0x00},
++ {S1DREG_BBLT_SRC_START1, 0x00},
++ {S1DREG_BBLT_SRC_START2, 0x00},
++ {S1DREG_BBLT_DST_START0, 0x00},
++ {S1DREG_BBLT_DST_START1, 0x00},
++ {S1DREG_BBLT_DST_START2, 0x00},
++ {S1DREG_BBLT_MEM_OFF0, 0x00},
++ {S1DREG_BBLT_MEM_OFF1, 0x00},
++ {S1DREG_BBLT_WIDTH0, 0x00},
++ {S1DREG_BBLT_WIDTH1, 0x00},
++ {S1DREG_BBLT_HEIGHT0, 0x00},
++ {S1DREG_BBLT_HEIGHT1, 0x00},
++ {S1DREG_BBLT_BGC0, 0x00},
++ {S1DREG_BBLT_BGC1, 0x00},
++ {S1DREG_BBLT_FGC0, 0x00},
++ {S1DREG_BBLT_FGC1, 0x00},
++ {S1DREG_LKUP_MODE, 0x00}, /* LCD LUT r | LCD and CRT/TV LUT w */
++ {S1DREG_LKUP_ADDR, 0x00},
++ {S1DREG_PS_CNF, 0x10}, /* Power Save disable */
++ {S1DREG_PS_STATUS, 0x02}, /* LCD Panel down, mem up */
++ {S1DREG_CPU2MEM_WDOGT, 0x00},
++ {S1DREG_COM_DISP_MODE, 0x02}, /* enable CRT display output */
++};
++
++static struct s1d13xxxfb_pdata ek_s1dfb_pdata = {
++ .initregs = ek_s1dfb_initregs,
++ .initregssize = ARRAY_SIZE(ek_s1dfb_initregs),
++ .platform_init_video = ek_init_video,
++};
++
++static u64 s1dfb_dmamask = 0xffffffffUL;
++
++static struct resource ek_s1dfb_resource[] = {
++ [0] = { /* video mem */
++ .name = "s1d13806 memory",
++ .start = AT91_FB_VMEM_BASE,
++ .end = AT91_FB_VMEM_BASE + AT91_FB_VMEM_SIZE -1,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = { /* video registers */
++ .name = "s1d13806 registers",
++ .start = AT91_FB_REG_BASE,
++ .end = AT91_FB_REG_BASE + AT91_FB_REG_SIZE -1,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static struct platform_device ek_s1dfb_device = {
++ .name = "s1d13806fb",
++ .id = -1,
++ .dev = {
++ .dma_mask = &s1dfb_dmamask,
++ .coherent_dma_mask = 0xffffffff,
++ .platform_data = &ek_s1dfb_pdata,
++ },
++ .resource = ek_s1dfb_resource,
++ .num_resources = ARRAY_SIZE(ek_s1dfb_resource),
++};
++
++static void __init ek_add_device_video(void)
++{
++ platform_device_register(&ek_s1dfb_device);
++}
++#else
++static void __init ek_add_device_video(void) {}
++#endif
++
+ static struct at91_eth_data __initdata ek_eth_data = {
+ .phy_irq_pin = AT91_PIN_PC4,
+ .is_rmii = 1,
+@@ -109,11 +290,20 @@ static struct spi_board_info ek_spi_devices[] = {
+ #endif
+ };
+
++static struct i2c_board_info __initdata ek_i2c_devices[] = {
++ {
++ I2C_BOARD_INFO("ics1523", 0x26),
++ },
++ {
++ I2C_BOARD_INFO("dac3550", 0x4d),
++ }
++};
++
+ #define EK_FLASH_BASE AT91_CHIPSELECT_0
+ #define EK_FLASH_SIZE 0x200000
+
+ static struct physmap_flash_data ek_flash_data = {
+- .width = 2,
++ .width = 2,
+ };
+
+ static struct resource ek_flash_resource = {
+@@ -132,6 +322,20 @@ static struct platform_device ek_flash = {
+ .num_resources = 1,
+ };
+
++static struct gpio_led ek_leds[] = {
++ {
++ .name = "led0",
++ .gpio = AT91_PIN_PB1,
++ .active_low = 1,
++ .default_trigger = "heartbeat",
++ },
++ {
++ .name = "led1",
++ .gpio = AT91_PIN_PB2,
++ .active_low = 1,
++ .default_trigger = "timer",
++ }
++};
+
+ static void __init ek_board_init(void)
+ {
+@@ -158,8 +362,10 @@ static void __init ek_board_init(void)
+ #endif
+ /* NOR Flash */
+ platform_device_register(&ek_flash);
++ /* LEDs */
++ at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
+ /* VGA */
+-// ek_add_device_video();
++ ek_add_device_video();
+ }
+
+ MACHINE_START(AT91RM9200EK, "Atmel AT91RM9200-EK")
+diff --git a/arch/arm/mach-at91/board-homematic.c b/arch/arm/mach-at91/board-homematic.c
+new file mode 100644
+index 0000000..57d16c4
+--- /dev/null
++++ b/arch/arm/mach-at91/board-homematic.c
+@@ -0,0 +1,163 @@
++/*
++ * linux/arch/arm/mach-at91/board-homematic.c
++ *
++ * Copyright (C) 2007 eQ-3 Entwicklung GmbH
++ *
++ * based on work
++ * Copyright (C) 2005 SAN People
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++#include <linux/mtd/physmap.h>
++
++#include <asm/hardware.h>
++#include <asm/setup.h>
++#include <asm/mach-types.h>
++#include <asm/irq.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/arch/board.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/at91rm9200_mc.h>
++
++#include "generic.h"
++
++
++/*
++ * Serial port configuration.
++ * 0 .. 3 = USART0 .. USART3
++ * 4 = DBGU
++ */
++static struct at91_uart_config __initdata homematic_uart_config = {
++ .console_tty = 0, /* ttyS0 */
++ .nr_tty = 2,
++ .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */
++};
++
++static void __init homematic_map_io(void)
++{
++ /* Initialize processor: 18.432 MHz crystal */
++ at91rm9200_initialize(18432000, AT91RM9200_BGA);
++
++ /* Setup the serial ports and console */
++ at91_init_serial(&homematic_uart_config);
++}
++
++static void __init homematic_init_irq(void)
++{
++ at91rm9200_init_interrupts(NULL);
++}
++
++static struct at91_eth_data __initdata homematic_eth_data = {
++ .phy_irq_pin = AT91_PIN_PC4,
++ .is_rmii = 0,
++};
++
++static struct at91_usbh_data __initdata homematic_usbh_data = {
++ .ports = 2,
++};
++
++static struct at91_udc_data __initdata homematic_udc_data = {
++ .vbus_pin = AT91_PIN_PD4,
++ .pullup_pin = AT91_PIN_PD5,
++};
++
++static struct at91_mmc_data __initdata homematic_mmc_data = {
++ .slot_b = 0,
++ .wire4 = 1,
++};
++
++static struct spi_board_info homematic_spi_devices[] = {
++ { /* DataFlash chip */
++ .modalias = "mtd_dataflash",
++ .chip_select = 0,
++ .max_speed_hz = 15 * 1000 * 1000,
++ },
++};
++
++static struct mtd_partition __initdata homematic_nand_partition[] = {
++ {
++ .name = "root",
++ .offset = 0,
++ .size = 0x02000000,
++ }, {
++ .name = "storage",
++ .offset = 0x02000000,
++ .size = MTDPART_SIZ_FULL,
++ },
++};
++
++static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
++{
++ *num_partitions = ARRAY_SIZE(homematic_nand_partition);
++ return homematic_nand_partition;
++}
++
++static struct at91_nand_data __initdata homematic_nand_data = {
++ .ale = 22,
++ .cle = 21,
++// .det_pin = AT91_PIN_PB1,
++ .rdy_pin = AT91_PIN_PC2,
++ .enable_pin = AT91_PIN_PC0,
++ .partition_info = nand_partitions,
++};
++
++static void __init homematic_board_init(void)
++{
++ /* Serial */
++ at91_add_device_serial();
++ /* Ethernet */
++ at91_add_device_eth(&homematic_eth_data);
++ /* USB Host */
++ at91_add_device_usbh(&homematic_usbh_data);
++ /* USB Device */
++ at91_add_device_udc(&homematic_udc_data);
++ at91_set_multi_drive(homematic_udc_data.pullup_pin, 1); /* pullup_pin is connected to reset */
++ /* I2C */
++ at91_add_device_i2c(NULL, 0);
++ /* SPI */
++ at91_add_device_spi(homematic_spi_devices, ARRAY_SIZE(homematic_spi_devices));
++#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
++ /* DataFlash card */
++ at91_set_gpio_output(AT91_PIN_PB7, 0);
++#else
++ /* MMC */
++ at91_set_gpio_output(AT91_PIN_PB7, 1); /* this MMC card slot can optionally use SPI signaling (CS3). */
++ at91_add_device_mmc(0, &homematic_mmc_data);
++#endif
++ /* NAND */
++ at91_add_device_nand(&homematic_nand_data);
++}
++
++MACHINE_START(HOMEMATIC, "HomeMatic")
++ /* Maintainer: eQ-3 */
++ .phys_io = AT91_BASE_SYS,
++ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
++ .boot_params = AT91_SDRAM_BASE + 0x100,
++ .timer = &at91rm9200_timer,
++ .map_io = homematic_map_io,
++ .init_irq = homematic_init_irq,
++ .init_machine = homematic_board_init,
++MACHINE_END
+diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board-kb9202.c
+index 4b39b9c..cc5a65a 100644
+--- a/arch/arm/mach-at91/board-kb9202.c
++++ b/arch/arm/mach-at91/board-kb9202.c
+@@ -37,6 +37,8 @@
+ #include <asm/arch/board.h>
+ #include <asm/arch/gpio.h>
+
++#include <asm/arch/at91rm9200_mc.h>
++
+ #include "generic.h"
+
+
+@@ -111,6 +113,48 @@ static struct at91_nand_data __initdata kb9202_nand_data = {
+ .partition_info = nand_partitions,
+ };
+
++
++#if defined(CONFIG_FB_S1D15605)
++#warning "Rather pass reset pin via platform_data"
++static struct resource kb9202_lcd_resources[] = {
++ [0] = {
++ .start = AT91_CHIPSELECT_2,
++ .end = AT91_CHIPSELECT_2 + 0x200FF,
++ .flags = IORESOURCE_MEM
++ },
++ [1] = { /* reset pin */
++ .start = AT91_PIN_PC22,
++ .end = AT91_PIN_PC22,
++ .flags = IORESOURCE_MEM
++ },
++};
++
++static struct platform_device kb9202_lcd_device = {
++ .name = "s1d15605fb",
++ .id = 0,
++ .num_resources = ARRAY_SIZE(kb9202_lcd_resources),
++ .resource = kb9202_lcd_resources,
++};
++
++static void __init kb9202_add_device_lcd(void)
++{
++ /* In case the boot loader did not set the chip select mode and timing */
++ at91_sys_write(AT91_SMC_CSR(2),
++ AT91_SMC_WSEN | AT91_SMC_NWS_(18) | AT91_SMC_TDF_(1) | AT91_SMC_DBW_8 |
++ AT91_SMC_RWSETUP_(1) | AT91_SMC_RWHOLD_(1));
++
++ /* Backlight pin = output, off */
++ at91_set_gpio_output(AT91_PIN_PC23, 0);
++
++ /* Reset pin = output, in reset */
++ at91_set_gpio_output(AT91_PIN_PC22, 0);
++
++ platform_device_register(&kb9202_lcd_device);
++}
++#else
++static void __init kb9202_add_device_lcd(void) {}
++#endif
++
+ static void __init kb9202_board_init(void)
+ {
+ /* Serial */
+@@ -129,6 +173,8 @@ static void __init kb9202_board_init(void)
+ at91_add_device_spi(NULL, 0);
+ /* NAND */
+ at91_add_device_nand(&kb9202_nand_data);
++ /* LCD */
++ kb9202_add_device_lcd();
+ }
+
+ MACHINE_START(KB9200, "KB920x")
+diff --git a/arch/arm/mach-at91/board-sam9-l9260.c b/arch/arm/mach-at91/board-sam9-l9260.c
+new file mode 100644
+index 0000000..6bf6f0c
+--- /dev/null
++++ b/arch/arm/mach-at91/board-sam9-l9260.c
+@@ -0,0 +1,200 @@
++/*
++ * linux/arch/arm/mach-at91/board-sam9-l9260.c
++ *
++ * Copyright (C) 2005 SAN People
++ * Copyright (C) 2006 Atmel
++ * Copyright (C) 2007 Olimex Ltd
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++
++#include <asm/hardware.h>
++#include <asm/setup.h>
++#include <asm/mach-types.h>
++#include <asm/irq.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/arch/board.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/at91sam926x_mc.h>
++
++#include "generic.h"
++
++
++/*
++ * Serial port configuration.
++ * 0 .. 5 = USART0 .. USART5
++ * 6 = DBGU
++ */
++static struct at91_uart_config __initdata ek_uart_config = {
++ .console_tty = 0, /* ttyS0 */
++ .nr_tty = 3,
++ .tty_map = { 6, 0, 1, -1, -1, -1, -1 } /* ttyS0, ..., ttyS6 */
++};
++
++static void __init ek_map_io(void)
++{
++ /* Initialize processor: 18.432 MHz crystal */
++ at91sam9260_initialize(18432000);
++
++ /* Setup the LEDs */
++ at91_init_leds(AT91_PIN_PA9, AT91_PIN_PA6);
++
++ /* Setup the serial ports and console */
++ at91_init_serial(&ek_uart_config);
++}
++
++static void __init ek_init_irq(void)
++{
++ at91sam9260_init_interrupts(NULL);
++}
++
++
++/*
++ * USB Host port
++ */
++static struct at91_usbh_data __initdata ek_usbh_data = {
++ .ports = 2,
++};
++
++/*
++ * USB Device port
++ */
++static struct at91_udc_data __initdata ek_udc_data = {
++ .vbus_pin = AT91_PIN_PC5,
++ .pullup_pin = 0, /* pull-up driven by UDC */
++};
++
++
++/*
++ * SPI devices.
++ */
++static struct spi_board_info ek_spi_devices[] = {
++#if !defined(CONFIG_MMC_AT91)
++ { /* DataFlash chip */
++ .modalias = "mtd_dataflash",
++ .chip_select = 1,
++ .max_speed_hz = 15 * 1000 * 1000,
++ .bus_num = 0,
++ },
++#if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
++ { /* DataFlash card */
++ .modalias = "mtd_dataflash",
++ .chip_select = 0,
++ .max_speed_hz = 15 * 1000 * 1000,
++ .bus_num = 0,
++ },
++#endif
++#endif
++};
++
++
++/*
++ * MACB Ethernet device
++ */
++static struct at91_eth_data __initdata ek_macb_data = {
++ .phy_irq_pin = AT91_PIN_PA7,
++ .is_rmii = 0,
++};
++
++
++/*
++ * NAND flash
++ */
++static struct mtd_partition __initdata ek_nand_partition[] = {
++ {
++ .name = "Bootloader Area",
++ .offset = 0,
++ .size = 10 * 1024 * 1024,
++ },
++ {
++ .name = "User Area",
++ .offset = 10 * 1024 * 1024,
++ .size = MTDPART_SIZ_FULL,
++ },
++};
++
++static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
++{
++ *num_partitions = ARRAY_SIZE(ek_nand_partition);
++ return ek_nand_partition;
++}
++
++static struct at91_nand_data __initdata ek_nand_data = {
++ .ale = 21,
++ .cle = 22,
++// .det_pin = ... not connected
++ .rdy_pin = AT91_PIN_PC13,
++ .enable_pin = AT91_PIN_PC14,
++ .partition_info = nand_partitions,
++#if defined(CONFIG_MTD_NAND_AT91_BUSWIDTH_16)
++ .bus_width_16 = 1,
++#else
++ .bus_width_16 = 0,
++#endif
++};
++
++
++/*
++ * MCI (SD/MMC)
++ */
++static struct at91_mmc_data __initdata ek_mmc_data = {
++ .slot_b = 1,
++ .wire4 = 1,
++ .det_pin = AT91_PIN_PC8,
++ .wp_pin = AT91_PIN_PC4,
++// .vcc_pin = ... not connected
++};
++
++static void __init ek_board_init(void)
++{
++ /* Serial */
++ at91_add_device_serial();
++ /* USB Host */
++ at91_add_device_usbh(&ek_usbh_data);
++ /* USB Device */
++ at91_add_device_udc(&ek_udc_data);
++ /* SPI */
++ at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
++ /* NAND */
++ at91_add_device_nand(&ek_nand_data);
++ /* Ethernet */
++ at91_add_device_eth(&ek_macb_data);
++ /* MMC */
++ at91_add_device_mmc(0, &ek_mmc_data);
++ /* I2C */
++ at91_add_device_i2c(NULL, 0);
++}
++
++MACHINE_START(SAM9_L9260, "Olimex SAM9-L9260")
++ /* Maintainer: Olimex */
++ .phys_io = AT91_BASE_SYS,
++ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
++ .boot_params = AT91_SDRAM_BASE + 0x100,
++ .timer = &at91sam926x_timer,
++ .map_io = ek_map_io,
++ .init_irq = ek_init_irq,
++ .init_machine = ek_board_init,
++MACHINE_END
+diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c
+index 550ae59..5023ca9 100644
+--- a/arch/arm/mach-at91/board-sam9261ek.c
++++ b/arch/arm/mach-at91/board-sam9261ek.c
+@@ -256,6 +256,7 @@ static struct spi_board_info ek_spi_devices[] = {
+ .bus_num = 0,
+ .platform_data = &ads_info,
+ .irq = AT91SAM9261_ID_IRQ0,
++ .controller_data = AT91_PIN_PA28, /* CS pin */
+ },
+ #endif
+ #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
+@@ -280,6 +281,68 @@ static struct spi_board_info ek_spi_devices[] = {
+ * LCD Controller
+ */
+ #if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
++
++#if defined(CONFIG_FB_ATMEL_STN)
++
++/* STN */
++static struct fb_videomode at91_stn_modes[] = {
++ {
++ .name = "SP06Q002 @ 75",
++ .refresh = 75,
++ .xres = 320, .yres = 240,
++ .pixclock = KHZ2PICOS(1440),
++
++ .left_margin = 1, .right_margin = 1,
++ .upper_margin = 0, .lower_margin = 0,
++ .hsync_len = 1, .vsync_len = 1,
++
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++ .vmode = FB_VMODE_NONINTERLACED,
++ },
++};
++
++static struct fb_monspecs at91fb_default_stn_monspecs = {
++ .manufacturer = "HIT",
++ .monitor = "SP06Q002",
++
++ .modedb = at91_stn_modes,
++ .modedb_len = ARRAY_SIZE(at91_stn_modes),
++ .hfmin = 15000,
++ .hfmax = 64000,
++ .vfmin = 50,
++ .vfmax = 150,
++};
++
++#define AT91SAM9261_DEFAULT_STN_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
++ | ATMEL_LCDC_DISTYPE_STNMONO \
++ | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE \
++ | ATMEL_LCDC_IFWIDTH_4 \
++ | ATMEL_LCDC_SCANMOD_SINGLE)
++
++static void at91_lcdc_stn_power_control(int on)
++{
++ /* backlight */
++ if (on) { /* power up */
++ at91_set_gpio_value(AT91_PIN_PC14, 0);
++ at91_set_gpio_value(AT91_PIN_PC15, 0);
++ } else { /* power down */
++ at91_set_gpio_value(AT91_PIN_PC14, 1);
++ at91_set_gpio_value(AT91_PIN_PC15, 1);
++ }
++}
++
++static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
++ .default_bpp = 1,
++ .default_dmacon = ATMEL_LCDC_DMAEN,
++ .default_lcdcon2 = AT91SAM9261_DEFAULT_STN_LCDCON2,
++ .default_monspecs = &at91fb_default_stn_monspecs,
++ .atmel_lcdfb_power_control = at91_lcdc_stn_power_control,
++ .guard_time = 1,
++};
++
++#else
++
++/* TFT */
+ static struct fb_videomode at91_tft_vga_modes[] = {
+ {
+ .name = "TX09D50VM1CCA @ 60",
+@@ -296,7 +359,7 @@ static struct fb_videomode at91_tft_vga_modes[] = {
+ },
+ };
+
+-static struct fb_monspecs at91fb_default_monspecs = {
++static struct fb_monspecs at91fb_default_tft_monspecs = {
+ .manufacturer = "HIT",
+ .monitor = "TX09D50VM1CCA",
+
+@@ -308,11 +371,11 @@ static struct fb_monspecs at91fb_default_monspecs = {
+ .vfmax = 150,
+ };
+
+-#define AT91SAM9261_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
++#define AT91SAM9261_DEFAULT_TFT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
+ | ATMEL_LCDC_DISTYPE_TFT \
+ | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
+
+-static void at91_lcdc_power_control(int on)
++static void at91_lcdc_tft_power_control(int on)
+ {
+ if (on)
+ at91_set_gpio_value(AT91_PIN_PA12, 0); /* power up */
+@@ -320,15 +383,15 @@ static void at91_lcdc_power_control(int on)
+ at91_set_gpio_value(AT91_PIN_PA12, 1); /* power down */
+ }
+
+-/* Driver datas */
+ static struct atmel_lcdfb_info __initdata ek_lcdc_data = {
+ .default_bpp = 16,
+ .default_dmacon = ATMEL_LCDC_DMAEN,
+- .default_lcdcon2 = AT91SAM9261_DEFAULT_LCDCON2,
+- .default_monspecs = &at91fb_default_monspecs,
+- .atmel_lcdfb_power_control = at91_lcdc_power_control,
++ .default_lcdcon2 = AT91SAM9261_DEFAULT_TFT_LCDCON2,
++ .default_monspecs = &at91fb_default_tft_monspecs,
++ .atmel_lcdfb_power_control = at91_lcdc_tft_power_control,
+ .guard_time = 1,
+ };
++#endif
+
+ #else
+ static struct atmel_lcdfb_info __initdata ek_lcdc_data;
+diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c
+index ab9dcc0..dc862fe 100644
+--- a/arch/arm/mach-at91/board-sam9263ek.c
++++ b/arch/arm/mach-at91/board-sam9263ek.c
+@@ -27,6 +27,8 @@
+ #include <linux/spi/spi.h>
+ #include <linux/spi/ads7846.h>
+ #include <linux/fb.h>
++#include <linux/gpio_keys.h>
++#include <linux/input.h>
+
+ #include <video/atmel_lcdc.h>
+
+@@ -163,6 +165,7 @@ static struct at91_mmc_data __initdata ek_mmc_data = {
+ * MACB Ethernet device
+ */
+ static struct at91_eth_data __initdata ek_macb_data = {
++ .phy_irq_pin = AT91_PIN_PE31,
+ .is_rmii = 1,
+ };
+
+@@ -263,6 +266,53 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data;
+ #endif
+
+
++ /*
++ * GPIO Buttons
++ */
++#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
++static struct gpio_keys_button ek_buttons[] = {
++ {
++ .gpio = AT91_PIN_PC4,
++ .keycode = BTN_RIGHT,
++ .desc = "Right Button",
++ .active_low = 1,
++ },
++ {
++ .gpio = AT91_PIN_PC5,
++ .keycode = BTN_LEFT,
++ .desc = "Left Button",
++ .active_low = 1,
++ }
++};
++
++static struct gpio_keys_platform_data ek_button_data = {
++ .buttons = ek_buttons,
++ .nbuttons = ARRAY_SIZE(ek_buttons),
++};
++
++static struct platform_device ek_button_device = {
++ .name = "gpio-keys",
++ .id = -1,
++ .num_resources = 0,
++ .dev = {
++ .platform_data = &ek_button_data,
++ }
++};
++
++static void __init ek_add_device_buttons(void)
++{
++ at91_set_gpio_input(AT91_PIN_PC5, 0); /* left button */
++ at91_set_deglitch(AT91_PIN_PC5, 1);
++ at91_set_gpio_input(AT91_PIN_PC4, 0); /* right button */
++ at91_set_deglitch(AT91_PIN_PC4, 1);
++
++ platform_device_register(&ek_button_device);
++}
++#else
++static void __init ek_add_device_buttons(void) {}
++#endif
++
++
+ /*
+ * AC97
+ */
+@@ -294,6 +344,8 @@ static void __init ek_board_init(void)
+ at91_add_device_i2c(NULL, 0);
+ /* LCD Controller */
+ at91_add_device_lcdc(&ek_lcdc_data);
++ /* Push Buttons */
++ ek_add_device_buttons();
+ /* AC97 */
+ at91_add_device_ac97(&ek_ac97_data);
+ }
+diff --git a/arch/arm/mach-at91/board-tms.c b/arch/arm/mach-at91/board-tms.c
+new file mode 100644
+index 0000000..7c3d08d
+--- /dev/null
++++ b/arch/arm/mach-at91/board-tms.c
+@@ -0,0 +1,198 @@
++/*
++* linux/arch/arm/mach-at91/board-tms.c
++*
++* Copyright (C) 2005 SAN People
++*
++* Adapted from board-dk to sweda TMS-100 by Luiz de Barros <lboneto@gmail.com>
++*
++* This program is free software; you can redistribute it and/or modify
++* it under the terms of the GNU General Public License as published by
++* the Free Software Foundation; either version 2 of the License, or
++* (at your option) any later version.
++*
++* This program is distributed in the hope that it will be useful,
++* but WITHOUT ANY WARRANTY; without even the implied warranty of
++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++* GNU General Public License for more details.
++*
++* You should have received a copy of the GNU General Public License
++* along with this program; if not, write to the Free Software
++* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++*/
++
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/spi/spi.h>
++#include <linux/mtd/physmap.h>
++
++#include <asm/hardware.h>
++#include <asm/setup.h>
++#include <asm/mach-types.h>
++#include <asm/irq.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/arch/board.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/at91rm9200_mc.h>
++
++#include "generic.h"
++#include <linux/serial_8250.h>
++
++
++#define SERIAL_FLAGS (UPF_BOOT_AUTOCONF | UPF_IOREMAP| UPF_SHARE_IRQ)
++#define SERIAL_CLK (1843200)
++
++
++/*---------------------------------------------------------------------
++ * External UART
++ */
++
++#define PORT(_base, _irq) \
++ { \
++ .mapbase = _base, \
++ .irq = _irq, \
++ .uartclk = SERIAL_CLK, \
++ .iotype = UPIO_MEM, \
++ .regshift = 0, \
++ .flags = SERIAL_FLAGS, \
++ }
++
++static struct plat_serial8250_port tms_data[] = {
++ PORT(0x70000000, AT91_PIN_PC3),
++ PORT(0x80000000, AT91_PIN_PC5),
++ { },
++};
++
++static struct platform_device tms_device = {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM,
++ .dev =
++ {
++ .platform_data = &tms_data,
++ },
++};
++
++static void setup_external_uart(void)
++{
++ at91_sys_write(AT91_SMC_CSR(2),
++ AT91_SMC_ACSS_STD
++ | AT91_SMC_DBW_8
++ | AT91_SMC_BAT
++ | AT91_SMC_WSEN
++ | AT91_SMC_NWS_(32) /* wait states */
++ | AT91_SMC_RWSETUP_(6) /* setup time */
++ | AT91_SMC_RWHOLD_(4) /* hold time */
++
++ );
++ at91_sys_write(AT91_SMC_CSR(6),
++ AT91_SMC_ACSS_STD
++ | AT91_SMC_DBW_8
++ | AT91_SMC_BAT
++ | AT91_SMC_WSEN
++ | AT91_SMC_NWS_(32) /* wait states */
++ | AT91_SMC_RWSETUP_(6) /* setup time */
++ | AT91_SMC_RWHOLD_(4) /* hold time */
++
++ );
++ at91_sys_write(AT91_SMC_CSR(7),
++ AT91_SMC_ACSS_STD
++ | AT91_SMC_DBW_8
++ | AT91_SMC_BAT
++ | AT91_SMC_WSEN
++ | AT91_SMC_NWS_(32) /* wait states */
++ | AT91_SMC_RWSETUP_(6) /* setup time */
++ | AT91_SMC_RWHOLD_(4) /* hold time */
++ );
++
++ platform_device_register(&tms_device);
++}
++
++
++/*
++ * Serial port configuration.
++ * 0 .. 3 = USART0 .. USART3
++ * 4 = DBGU
++ */
++static struct at91_uart_config __initdata tms_uart_config = {
++ .console_tty = 0, /* ttyS0 */
++ .nr_tty = 5,
++ .tty_map = { 4, 0, 1, 2, 3 } /* ttyS0, ..., ttyS4 */
++};
++
++static void __init tms_map_io(void)
++{
++ /* Initialize processor: 18.432 MHz crystal */
++ at91rm9200_initialize(18432000, AT91RM9200_BGA);
++
++ /* Setup the LEDs */
++ at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2);
++
++ /* Setup the serial ports and console */
++ at91_init_serial(&tms_uart_config);
++}
++
++static void __init tms_init_irq(void)
++{
++ at91rm9200_init_interrupts(NULL);
++}
++
++
++static struct at91_eth_data __initdata tms_eth_data = {
++ .phy_irq_pin = AT91_PIN_PC4,
++ .is_rmii = 1,
++};
++
++static struct at91_usbh_data __initdata tms_usbh_data = {
++ .ports = 2,
++};
++
++static struct spi_board_info tms_spi_devices[] = {
++ { /* DataFlash chip */
++ .modalias = "mtd_dataflash",
++ .chip_select = 0,
++ .max_speed_hz = 15 * 1000 * 1000,
++ },
++ { /* DataFlash chip */
++ .modalias = "mtd_dataflash",
++ .chip_select = 1,
++ .max_speed_hz = 15 * 1000 * 1000,
++ }
++};
++
++static struct i2c_board_info __initdata tms_i2c_devices[] = {
++ {
++ I2C_BOARD_INFO("isl1208", 0x6f),
++ }
++};
++
++static void __init tms_board_init(void)
++{
++ /* Serial */
++ at91_add_device_serial();
++ /* Ethernet */
++ at91_add_device_eth(&tms_eth_data);
++ at91_add_device_usbh(&tms_usbh_data);
++ /* I2C */
++ at91_add_device_i2c(tms_i2c_devices, ARRAY_SIZE(tms_i2c_devices));
++ /* SPI */
++ at91_add_device_spi(tms_spi_devices, ARRAY_SIZE(tms_spi_devices));
++ /* Two port external UART */
++ setup_external_uart();
++}
++
++MACHINE_START(SWEDATMS, "Sweda TMS-100 Board")
++ /* Maintainer: Luiz de Barros */
++ .phys_io = AT91_BASE_SYS,
++ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
++ .boot_params = AT91_SDRAM_BASE + 0x100,
++ .timer = &at91rm9200_timer,
++ .map_io = tms_map_io,
++ .init_irq = tms_init_irq,
++ .init_machine = tms_board_init,
++MACHINE_END
+diff --git a/arch/arm/mach-at91/clock.c b/arch/arm/mach-at91/clock.c
+index 57c3b64..48de6a2 100644
+--- a/arch/arm/mach-at91/clock.c
++++ b/arch/arm/mach-at91/clock.c
+@@ -32,6 +32,7 @@
+ #include <asm/arch/cpu.h>
+
+ #include "clock.h"
++#include "generic.h"
+
+
+ /*
+@@ -254,6 +255,23 @@ EXPORT_SYMBOL(clk_get_rate);
+
+ /*------------------------------------------------------------------------*/
+
++#ifdef CONFIG_PM
++
++int clk_must_disable(struct clk *clk)
++{
++ if (!at91_suspend_entering_slow_clock())
++ return 0;
++
++ while (clk->parent)
++ clk = clk->parent;
++ return clk != &clk32k;
++}
++EXPORT_SYMBOL(clk_must_disable);
++
++#endif
++
++/*------------------------------------------------------------------------*/
++
+ #ifdef CONFIG_AT91_PROGRAMMABLE_CLOCKS
+
+ /*
+diff --git a/arch/arm/mach-at91/generic.h b/arch/arm/mach-at91/generic.h
+index 77d4c0a..27529d5 100644
+--- a/arch/arm/mach-at91/generic.h
++++ b/arch/arm/mach-at91/generic.h
+@@ -39,6 +39,7 @@ extern void __init at91_clock_associate(const char *id, struct device *dev, cons
+ /* Power Management */
+ extern void at91_irq_suspend(void);
+ extern void at91_irq_resume(void);
++extern int at91_suspend_entering_slow_clock(void);
+
+ /* GPIO */
+ #define AT91RM9200_PQFP 3 /* AT91RM9200 PQFP package has 3 banks */
+diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c
+index aa2d365..6aeddd6 100644
+--- a/arch/arm/mach-at91/gpio.c
++++ b/arch/arm/mach-at91/gpio.c
+@@ -13,6 +13,8 @@
+ #include <linux/errno.h>
+ #include <linux/interrupt.h>
+ #include <linux/irq.h>
++#include <linux/debugfs.h>
++#include <linux/seq_file.h>
+ #include <linux/kernel.h>
+ #include <linux/list.h>
+ #include <linux/module.h>
+@@ -414,6 +416,66 @@ static void gpio_irq_handler(unsigned irq, struct irq_desc *desc)
+
+ /*--------------------------------------------------------------------------*/
+
++#ifdef CONFIG_DEBUG_FS
++
++static int at91_gpio_show(struct seq_file *s, void *unused)
++{
++ int bank, j;
++
++ /* print heading */
++ seq_printf(s, "Pin\t");
++ for (bank = 0; bank < gpio_banks; bank++) {
++ seq_printf(s, "PIO%c\t", 'A' + bank);
++ };
++ seq_printf(s, "\n\n");
++
++ /* print pin status */
++ for (j = 0; j < 32; j++) {
++ seq_printf(s, "%i:\t", j);
++
++ for (bank = 0; bank < gpio_banks; bank++) {
++ unsigned pin = PIN_BASE + (32 * bank) + j;
++ void __iomem *pio = pin_to_controller(pin);
++ unsigned mask = pin_to_mask(pin);
++
++ if (__raw_readl(pio + PIO_PSR) & mask)
++ seq_printf(s, "GPIO:%s", __raw_readl(pio + PIO_PDSR) & mask ? "1" : "0");
++ else
++ seq_printf(s, "%s", __raw_readl(pio + PIO_ABSR) & mask ? "B" : "A");
++
++ seq_printf(s, "\t");
++ }
++
++ seq_printf(s, "\n");
++ }
++
++ return 0;
++}
++
++static int at91_gpio_open(struct inode *inode, struct file *file)
++{
++ return single_open(file, at91_gpio_show, NULL);
++}
++
++static const struct file_operations at91_gpio_operations = {
++ .open = at91_gpio_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = single_release,
++};
++
++static int __init at91_gpio_debugfs_init(void)
++{
++ /* /sys/kernel/debug/at91_gpio */
++ (void) debugfs_create_file("at91_gpio", S_IFREG | S_IRUGO, NULL, NULL, &at91_gpio_operations);
++ return 0;
++}
++postcore_initcall(at91_gpio_debugfs_init);
++
++#endif
++
++/*--------------------------------------------------------------------------*/
++
+ /*
+ * Called from the processor-specific init to enable GPIO interrupt support.
+ */
+diff --git a/arch/arm/mach-at91/ics1523.c b/arch/arm/mach-at91/ics1523.c
+new file mode 100644
+index 0000000..646fbac
+--- /dev/null
++++ b/arch/arm/mach-at91/ics1523.c
+@@ -0,0 +1,207 @@
++/*
++ * arch/arm/mach-at91rm9200/ics1523.c
++ *
++ * Copyright (C) 2003 ATMEL Rousset
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <asm/hardware.h>
++#include <asm/io.h>
++
++#include <linux/clk.h>
++#include <linux/delay.h>
++#include <linux/err.h>
++#include <linux/init.h>
++
++#include <asm/arch/ics1523.h>
++#include <asm/arch/at91_twi.h>
++#include <asm/arch/gpio.h>
++
++/* TWI Errors */
++#define AT91_TWI_ERROR (AT91_TWI_NACK | AT91_TWI_UNRE | AT91_TWI_OVRE)
++
++
++static void __iomem *twi_base;
++
++#define at91_twi_read(reg) __raw_readl(twi_base + (reg))
++#define at91_twi_write(reg, val) __raw_writel((val), twi_base + (reg))
++
++
++/* -----------------------------------------------------------------------------
++ * Initialization of TWI CLOCK
++ * ----------------------------------------------------------------------------- */
++
++static void at91_ics1523_SetTwiClock(unsigned int mck_khz)
++{
++ int sclock;
++
++ /* Here, CKDIV = 1 and CHDIV = CLDIV ==> CLDIV = CHDIV = 1/4*((Fmclk/FTWI) -6) */
++ sclock = (10*mck_khz / ICS_TRANSFER_RATE);
++ if (sclock % 10 >= 5)
++ sclock = (sclock /10) - 5;
++ else
++ sclock = (sclock /10)- 6;
++ sclock = (sclock + (4 - sclock %4)) >> 2; /* div 4 */
++
++ at91_twi_write(AT91_TWI_CWGR, 0x00010000 | sclock | (sclock << 8));
++}
++
++/* -----------------------------------------------------------------------------
++ * Read a byte with TWI Interface from the Clock Generator ICS1523
++ * ----------------------------------------------------------------------------- */
++
++static int at91_ics1523_ReadByte(unsigned char reg_address, unsigned char *data_in)
++{
++ int Status, nb_trial;
++
++ at91_twi_write(AT91_TWI_MMR, AT91_TWI_MREAD | AT91_TWI_IADRSZ_1 | ((ICS_ADDR << 16) & AT91_TWI_DADR));
++ at91_twi_write(AT91_TWI_IADR, reg_address);
++ at91_twi_write(AT91_TWI_CR, AT91_TWI_START | AT91_TWI_STOP);
++
++ /* Program temporizing period (300us) */
++ udelay(300);
++
++ /* Wait TXcomplete ... */
++ nb_trial = 0;
++ Status = at91_twi_read(AT91_TWI_SR);
++ while (!(Status & AT91_TWI_TXCOMP) && (nb_trial < 10)) {
++ nb_trial++;
++ Status = at91_twi_read(AT91_TWI_SR);
++ }
++
++ if (Status & AT91_TWI_TXCOMP) {
++ *data_in = (unsigned char) at91_twi_read(AT91_TWI_RHR);
++ return ICS1523_ACCESS_OK;
++ }
++ else
++ return ICS1523_ACCESS_ERROR;
++}
++
++/* -----------------------------------------------------------------------------
++ * Write a byte with TWI Interface to the Clock Generator ICS1523
++ * ----------------------------------------------------------------------------- */
++
++static int at91_ics1523_WriteByte(unsigned char reg_address, unsigned char data_out)
++{
++ int Status, nb_trial;
++
++ at91_twi_write(AT91_TWI_MMR, AT91_TWI_IADRSZ_1 | ((ICS_ADDR << 16) & AT91_TWI_DADR));
++ at91_twi_write(AT91_TWI_IADR, reg_address);
++ at91_twi_write(AT91_TWI_THR, data_out);
++ at91_twi_write(AT91_TWI_CR, AT91_TWI_START | AT91_TWI_STOP);
++
++ /* Program temporizing period (300us) */
++ udelay(300);
++
++ nb_trial = 0;
++ Status = at91_twi_read(AT91_TWI_SR);
++ while (!(Status & AT91_TWI_TXCOMP) && (nb_trial < 10)) {
++ nb_trial++;
++ if (Status & AT91_TWI_ERROR) {
++ /* If Underrun OR NACK - Start again */
++ at91_twi_write(AT91_TWI_CR, AT91_TWI_START | AT91_TWI_STOP);
++
++ /* Program temporizing period (300us) */
++ udelay(300);
++ }
++ Status = at91_twi_read(AT91_TWI_SR);
++ };
++
++ if (Status & AT91_TWI_TXCOMP)
++ return ICS1523_ACCESS_OK;
++ else
++ return ICS1523_ACCESS_ERROR;
++}
++
++/* -----------------------------------------------------------------------------
++ * Initialization of the Clock Generator ICS1523
++ * ----------------------------------------------------------------------------- */
++
++int at91_ics1523_init(void)
++{
++ int nb_trial;
++ int ack = ICS1523_ACCESS_OK;
++ unsigned int status = 0xffffffff;
++ struct clk *twi_clk;
++
++ /* Map in TWI peripheral */
++ twi_base = ioremap(AT91RM9200_BASE_TWI, SZ_16K);
++ if (!twi_base)
++ return -ENOMEM;
++
++ /* pins used for TWI interface */
++ at91_set_A_periph(AT91_PIN_PA25, 0); /* TWD */
++ at91_set_multi_drive(AT91_PIN_PA25, 1);
++ at91_set_A_periph(AT91_PIN_PA26, 0); /* TWCK */
++ at91_set_multi_drive(AT91_PIN_PA26, 1);
++
++ /* Enable the TWI clock */
++ twi_clk = clk_get(NULL, "twi_clk");
++ if (IS_ERR(twi_clk))
++ return ICS1523_ACCESS_ERROR;
++ clk_enable(twi_clk);
++
++ /* Disable interrupts */
++ at91_twi_write(AT91_TWI_IDR, -1);
++
++ /* Reset peripheral */
++ at91_twi_write(AT91_TWI_CR, AT91_TWI_SWRST);
++
++ /* Set Master mode */
++ at91_twi_write(AT91_TWI_CR, AT91_TWI_MSEN);
++
++ /* Set TWI Clock Waveform Generator Register */
++ at91_ics1523_SetTwiClock(60000); /* MCK in KHz = 60000 KHz */
++
++ /* ICS1523 Initialisation */
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_ICR, (unsigned char) 0);
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_OE, (unsigned char) (ICS_OEF | ICS_OET2 | ICS_OETCK));
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_OD, (unsigned char) (ICS_INSEL | 0x7F));
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_DPAO, (unsigned char) 0);
++
++ nb_trial = 0;
++ do {
++ nb_trial++;
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_ICR, (unsigned char) (ICS_ENDLS | ICS_ENPLS | ICS_PDEN /*| ICS_FUNCSEL*/));
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_LCR, (unsigned char) (ICS_PSD | ICS_PFD));
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_FD0, (unsigned char) 0x39) ; /* 0x7A */
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_FD1, (unsigned char) 0x00);
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_SWRST, (unsigned char) (ICS_PLLR));
++
++ /* Program 1ms temporizing period */
++ mdelay(1);
++
++ at91_ics1523_ReadByte ((unsigned char) ICS_SR, (char *)&status);
++ } while (!((unsigned int) status & (unsigned int) ICS_PLLLOCK) && (nb_trial < 10));
++
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_DPAC, (unsigned char) 0x03) ; /* 0x01 */
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_SWRST, (unsigned char) (ICS_DPAR));
++
++ /* Program 1ms temporizing period */
++ mdelay(1);
++
++ ack |= at91_ics1523_WriteByte ((unsigned char) ICS_DPAO, (unsigned char) 0x00);
++
++ /* Program 1ms temporizing period */
++ mdelay(1);
++
++ /* All done - cleanup */
++ iounmap(twi_base);
++ clk_disable(twi_clk);
++ clk_put(twi_clk);
++
++ return ack;
++}
+diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
+index 98cb614..04e3475 100644
+--- a/arch/arm/mach-at91/pm.c
++++ b/arch/arm/mach-at91/pm.c
+@@ -26,12 +26,24 @@
+ #include <asm/mach-types.h>
+
+ #include <asm/arch/at91_pmc.h>
+-#include <asm/arch/at91rm9200_mc.h>
+ #include <asm/arch/gpio.h>
+ #include <asm/arch/cpu.h>
+
+ #include "generic.h"
+
++#ifdef CONFIG_ARCH_AT91RM9200
++#include <asm/arch/at91rm9200_mc.h>
++
++#define sdram_selfrefresh_enable() at91_sys_write(AT91_SDRAMC_SRR, 1)
++#define sdram_selfrefresh_disable()
++
++#else
++#include <asm/arch/at91sam926x_mc.h>
++
++#define sdram_selfrefresh_enable() at91_sys_write(AT91_SDRAMC_LPR, AT91_SDRAMC_LPCB_SELF_REFRESH)
++#define sdram_selfrefresh_disable() at91_sys_write(AT91_SDRAMC_LPR, AT91_SDRAMC_LPCB_DISABLE)
++
++#endif
+
+ static int at91_pm_valid_state(suspend_state_t state)
+ {
+@@ -62,6 +74,7 @@ static int at91_pm_set_target(suspend_state_t state)
+ * Verify that all the clocks are correct before entering
+ * slow-clock mode.
+ */
++#warning "This should probably be moved to clocks.c"
+ static int at91_pm_verify_clocks(void)
+ {
+ unsigned long scsr;
+@@ -102,20 +115,15 @@ static int at91_pm_verify_clocks(void)
+ }
+
+ /*
+- * Call this from platform driver suspend() to see how deeply to suspend.
++ * This is called from clk_must_disable(), to see how deeply to suspend.
+ * For example, some controllers (like OHCI) need one of the PLL clocks
+ * in order to act as a wakeup source, and those are not available when
+ * going into slow clock mode.
+- *
+- * REVISIT: generalize as clk_will_be_available(clk)? Other platforms have
+- * the very same problem (but not using at91 main_clk), and it'd be better
+- * to add one generic API rather than lots of platform-specific ones.
+ */
+ int at91_suspend_entering_slow_clock(void)
+ {
+ return (target_state == PM_SUSPEND_MEM);
+ }
+-EXPORT_SYMBOL(at91_suspend_entering_slow_clock);
+
+
+ static void (*slow_clock)(void);
+@@ -175,7 +183,7 @@ static int at91_pm_enter(suspend_state_t state)
+ */
+ asm("b 1f; .align 5; 1:");
+ asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */
+- at91_sys_write(AT91_SDRAMC_SRR, 1); /* self-refresh mode */
++ sdram_selfrefresh_enable(); /* self-refresh mode */
+ /* fall though to next state */
+
+ case PM_SUSPEND_ON:
+@@ -191,6 +199,7 @@ static int at91_pm_enter(suspend_state_t state)
+ at91_sys_read(AT91_AIC_IPR) & at91_sys_read(AT91_AIC_IMR));
+
+ error:
++ sdram_selfrefresh_disable();
+ target_state = PM_SUSPEND_ON;
+ at91_irq_resume();
+ at91_gpio_resume();
+@@ -204,16 +213,23 @@ static struct platform_suspend_ops at91_pm_ops ={
+ .enter = at91_pm_enter,
+ };
+
++#ifdef CONFIG_AT91_SLOW_CLOCK
++extern void at91rm9200_slow_clock(void);
++extern u32 at91rm9200_slow_clock_sz;
++#endif
++
+ static int __init at91_pm_init(void)
+ {
+- printk("AT91: Power Management\n");
+-
+-#ifdef CONFIG_AT91_PM_SLOW_CLOCK
+- /* REVISIT allocations of SRAM should be dynamically managed.
++#ifdef CONFIG_AT91_SLOW_CLOCK
++ /*
++ * REVISIT allocations of SRAM should be dynamically managed.
+ * FIQ handlers and other components will want SRAM/TCM too...
+ */
+- slow_clock = (void *) (AT91_VA_BASE_SRAM + (3 * SZ_4K));
++ slow_clock = (void *) (AT91_IO_VIRT_BASE - AT91RM9200_SRAM_SIZE + (3 * SZ_4K));
+ memcpy(slow_clock, at91rm9200_slow_clock, at91rm9200_slow_clock_sz);
++ printk("AT91: Power Management (with slow clock mode)\n");
++#else
++ printk("AT91: Power Management\n");
+ #endif
+
+ /* Disable SDRAM low-power mode. Cannot be used with self-refresh. */
+diff --git a/arch/arm/mach-at91/pm_slowclock.S b/arch/arm/mach-at91/pm_slowclock.S
+new file mode 100644
+index 0000000..3f5ba62
+--- /dev/null
++++ b/arch/arm/mach-at91/pm_slowclock.S
+@@ -0,0 +1,172 @@
++/*
++ * arch/arm/mach-at91/pm_slow_clock.S
++ *
++ * Copyright (C) 2006 Savin Zlobec
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/linkage.h>
++#include <asm/hardware.h>
++#include <asm/arch/at91_pmc.h>
++#include <asm/arch/at91rm9200_mc.h>
++
++#define MCKRDY_TIMEOUT 1000
++#define MOSCRDY_TIMEOUT 1000
++#define PLLALOCK_TIMEOUT 1000
++
++ .macro wait_mckrdy
++ mov r2, #MCKRDY_TIMEOUT
++1: sub r2, r2, #1
++ cmp r2, #0
++ beq 2f
++ ldr r3, [r1, #AT91_PMC_SR]
++ tst r3, #AT91_PMC_MCKRDY
++ beq 1b
++2:
++ .endm
++
++ .macro wait_moscrdy
++ mov r2, #MOSCRDY_TIMEOUT
++1: sub r2, r2, #1
++ cmp r2, #0
++ beq 2f
++ ldr r3, [r1, #AT91_PMC_SR]
++ tst r3, #AT91_PMC_MOSCS
++ beq 1b
++2:
++ .endm
++
++ .macro wait_pllalock
++ mov r2, #PLLALOCK_TIMEOUT
++1: sub r2, r2, #1
++ cmp r2, #0
++ beq 2f
++ ldr r3, [r1, #AT91_PMC_SR]
++ tst r3, #AT91_PMC_LOCKA
++ beq 1b
++2:
++ .endm
++
++ .macro wait_plladis
++ mov r2, #PLLALOCK_TIMEOUT
++1: sub r2, r2, #1
++ cmp r2, #0
++ beq 2f
++ ldr r3, [r1, #AT91_PMC_SR]
++ tst r3, #AT91_PMC_LOCKA
++ bne 1b
++2:
++ .endm
++
++ .text
++
++ENTRY(at91rm9200_slow_clock)
++
++ ldr r1, .at91_va_base_sys
++
++ /* Put SDRAM in self refresh mode */
++
++ b 1f
++ .align 5
++1: mcr p15, 0, r0, c7, c10, 4
++ mov r2, #1
++ str r2, [r1, #AT91_SDRAMC_SRR]
++
++ /* Save Master clock setting */
++
++ ldr r2, [r1, #AT91_PMC_MCKR]
++ str r2, .saved_mckr
++
++ /*
++ * Set the Master clock source to slow clock
++ *
++ * First set the CSS field, wait for MCKRDY
++ * and than set the PRES and MDIV fields.
++ *
++ * See eratta #2[78] for details.
++ */
++
++ bic r2, r2, #3
++ str r2, [r1, #AT91_PMC_MCKR]
++
++ wait_mckrdy
++
++ mov r2, #0
++ str r2, [r1, #AT91_PMC_MCKR]
++
++ /* Save PLLA setting and disable it */
++
++ ldr r2, [r1, #AT91_CKGR_PLLAR]
++ str r2, .saved_pllar
++
++ mov r2, #0
++ str r2, [r1, #AT91_CKGR_PLLAR]
++
++ wait_plladis
++
++ /* Turn off the main oscillator */
++
++ ldr r2, [r1, #AT91_CKGR_MOR]
++ bic r2, r2, #AT91_PMC_MOSCEN
++ str r2, [r1, #AT91_CKGR_MOR]
++
++ /* Wait for interrupt */
++
++ mcr p15, 0, r0, c7, c0, 4
++
++ /* Turn on the main oscillator */
++
++ ldr r2, [r1, #AT91_CKGR_MOR]
++ orr r2, r2, #AT91_PMC_MOSCEN
++ str r2, [r1, #AT91_CKGR_MOR]
++
++ wait_moscrdy
++
++ /* Restore PLLA setting */
++
++ ldr r2, .saved_pllar
++ str r2, [r1, #AT91_CKGR_PLLAR]
++
++ wait_pllalock
++
++ /*
++ * Restore master clock setting
++ *
++ * First set PRES if it was not 0,
++ * than set CSS and MDIV fields.
++ * After every change wait for
++ * MCKRDY.
++ *
++ * See eratta #2[78] for details.
++ */
++
++ ldr r2, .saved_mckr
++ tst r2, #0x1C
++ beq 2f
++ and r2, r2, #0x1C
++ str r2, [r1, #AT91_PMC_MCKR]
++
++ wait_mckrdy
++
++2: ldr r2, .saved_mckr
++ str r2, [r1, #AT91_PMC_MCKR]
++
++ wait_mckrdy
++
++ mov pc, lr
++
++.saved_mckr:
++ .word 0
++
++.saved_pllar:
++ .word 0
++
++.at91_va_base_sys:
++ .word AT91_VA_BASE_SYS
++
++ENTRY(at91rm9200_slow_clock_sz)
++ .word .-at91rm9200_slow_clock
+diff --git a/arch/arm/mach-at91/tclib.c b/arch/arm/mach-at91/tclib.c
+new file mode 100644
+index 0000000..b6389ac
+--- /dev/null
++++ b/arch/arm/mach-at91/tclib.c
+@@ -0,0 +1,17 @@
++#include <linux/clk.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++
++#include "tclib.h"
++
++static struct atmel_tcblock *blocks;
++static int nblocks;
++
++/*
++ * Called from the processor-specific init to register the TC Blocks.
++ */
++void __init atmel_tc_init(struct atmel_tcblock *tcblocks, int n)
++{
++ blocks = tcblocks;
++ nblocks = n;
++}
+diff --git a/arch/arm/mach-at91/tclib.h b/arch/arm/mach-at91/tclib.h
+new file mode 100644
+index 0000000..dc5dfb6
+--- /dev/null
++++ b/arch/arm/mach-at91/tclib.h
+@@ -0,0 +1,11 @@
++
++#define TC_PER_TCB 3
++
++struct atmel_tcblock {
++ u32 physaddr;
++ void __iomem *ioaddr;
++ struct clk *clk[TC_PER_TCB];
++ int irq[TC_PER_TCB];
++};
++
++extern void __init atmel_tc_init(struct atmel_tcblock *tcblocks, int n);
+diff --git a/arch/arm/mach-ks8695/Makefile b/arch/arm/mach-ks8695/Makefile
+index 2a07a28..a2ccbc2 100644
+--- a/arch/arm/mach-ks8695/Makefile
++++ b/arch/arm/mach-ks8695/Makefile
+@@ -9,7 +9,11 @@ obj-n :=
+ obj- :=
+
+ # PCI support is optional
+-#obj-$(CONFIG_PCI) += pci.o
++obj-$(CONFIG_PCI) += pci.o
++
++# LEDs
++obj-$(CONFIG_LEDS) += leds.o
+
+ # Board-specific support
+ obj-$(CONFIG_MACH_KS8695) += board-micrel.o
++
+diff --git a/arch/arm/mach-ks8695/board-micrel.c b/arch/arm/mach-ks8695/board-micrel.c
+index 2feeef8..05ac2bd 100644
+--- a/arch/arm/mach-ks8695/board-micrel.c
++++ b/arch/arm/mach-ks8695/board-micrel.c
+@@ -40,7 +40,7 @@ static void __init micrel_init(void)
+ printk(KERN_INFO "Micrel KS8695 Development Board initializing\n");
+
+ #ifdef CONFIG_PCI
+-// ks8695_init_pci(&micrel_pci);
++ ks8695_init_pci(&micrel_pci);
+ #endif
+
+ /* Add devices */
+diff --git a/arch/arm/mach-ks8695/devices.c b/arch/arm/mach-ks8695/devices.c
+index 386593f..3db2ec6 100644
+--- a/arch/arm/mach-ks8695/devices.c
++++ b/arch/arm/mach-ks8695/devices.c
+@@ -176,6 +176,27 @@ static void __init ks8695_add_device_watchdog(void) {}
+ #endif
+
+
++/* --------------------------------------------------------------------
++ * LEDs
++ * -------------------------------------------------------------------- */
++
++#if defined(CONFIG_LEDS)
++short ks8695_leds_cpu = -1;
++short ks8695_leds_timer = -1;
++
++void __init ks8695_init_leds(u8 cpu_led, u8 timer_led)
++{
++ /* Enable GPIO to access the LEDs */
++ gpio_direction_output(cpu_led, 1);
++ gpio_direction_output(timer_led, 1);
++
++ ks8695_leds_cpu = cpu_led;
++ ks8695_leds_timer = timer_led;
++}
++#else
++void __init ks8695_init_leds(u8 cpu_led, u8 timer_led) {}
++#endif
++
+ /* -------------------------------------------------------------------- */
+
+ /*
+diff --git a/arch/arm/mach-ks8695/gpio.c b/arch/arm/mach-ks8695/gpio.c
+index b1aa3cb..5e46191 100644
+--- a/arch/arm/mach-ks8695/gpio.c
++++ b/arch/arm/mach-ks8695/gpio.c
+@@ -20,6 +20,8 @@
+ #include <linux/kernel.h>
+ #include <linux/mm.h>
+ #include <linux/init.h>
++#include <linux/debugfs.h>
++#include <linux/seq_file.h>
+ #include <linux/module.h>
+
+ #include <asm/io.h>
+@@ -216,3 +218,84 @@ int irq_to_gpio(unsigned int irq)
+ return (irq - KS8695_IRQ_EXTERN0);
+ }
+ EXPORT_SYMBOL(irq_to_gpio);
++
++
++/* .... Debug interface ..................................................... */
++
++#ifdef CONFIG_DEBUG_FS
++
++static int ks8695_gpio_show(struct seq_file *s, void *unused)
++{
++ unsigned int enable[] = { IOPC_IOEINT0EN, IOPC_IOEINT1EN, IOPC_IOEINT2EN, IOPC_IOEINT3EN, IOPC_IOTIM0EN, IOPC_IOTIM1EN };
++ unsigned int intmask[] = { IOPC_IOEINT0TM, IOPC_IOEINT1TM, IOPC_IOEINT2TM, IOPC_IOEINT3TM };
++ unsigned long mode, ctrl, data;
++ int i;
++
++ mode = __raw_readl(KS8695_GPIO_VA + KS8695_IOPM);
++ ctrl = __raw_readl(KS8695_GPIO_VA + KS8695_IOPC);
++ data = __raw_readl(KS8695_GPIO_VA + KS8695_IOPD);
++
++ seq_printf(s, "Pin\tI/O\tFunction\tState\n\n");
++
++ for (i = KS8695_GPIO_0; i <= KS8695_GPIO_15 ; i++) {
++ seq_printf(s, "%i:\t", i);
++
++ seq_printf(s, "%s\t", (mode & IOPM_(i)) ? "Output" : "Input");
++
++ if (i <= KS8695_GPIO_3) {
++ if (ctrl & enable[i]) {
++ seq_printf(s, "EXT%i ", i);
++
++ switch ((ctrl & intmask[i]) >> (4 * i)) {
++ case IOPC_TM_LOW:
++ seq_printf(s, "(Low)"); break;
++ case IOPC_TM_HIGH:
++ seq_printf(s, "(High)"); break;
++ case IOPC_TM_RISING:
++ seq_printf(s, "(Rising)"); break;
++ case IOPC_TM_FALLING:
++ seq_printf(s, "(Falling)"); break;
++ case IOPC_TM_EDGE:
++ seq_printf(s, "(Edges)"); break;
++ }
++ }
++ else
++ seq_printf(s, "GPIO\t");
++ }
++ else if (i <= KS8695_GPIO_5) {
++ if (ctrl & enable[i])
++ seq_printf(s, "TOUT%i\t", i - KS8695_GPIO_4);
++ else
++ seq_printf(s, "GPIO\t");
++ }
++ else
++ seq_printf(s, "GPIO\t");
++
++ seq_printf(s, "\t");
++
++ seq_printf(s, "%i\n", (data & IOPD_(i)) ? 1 : 0);
++ }
++ return 0;
++}
++
++static int ks8695_gpio_open(struct inode *inode, struct file *file)
++{
++ return single_open(file, ks8695_gpio_show, NULL);
++}
++
++static const struct file_operations ks8695_gpio_operations = {
++ .open = ks8695_gpio_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = single_release,
++};
++
++static int __init ks8695_gpio_debugfs_init(void)
++{
++ /* /sys/kernel/debug/ks8695_gpio */
++ (void) debugfs_create_file("ks8695_gpio", S_IFREG | S_IRUGO, NULL, NULL, &ks8695_gpio_operations);
++ return 0;
++}
++postcore_initcall(ks8695_gpio_debugfs_init);
++
++#endif
+diff --git a/arch/arm/mach-ks8695/leds.c b/arch/arm/mach-ks8695/leds.c
+new file mode 100644
+index 0000000..d61762a
+--- /dev/null
++++ b/arch/arm/mach-ks8695/leds.c
+@@ -0,0 +1,94 @@
++/*
++ * LED driver for KS8695-based boards.
++ *
++ * Copyright (C) Andrew Victor
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++
++#include <asm/mach-types.h>
++#include <asm/leds.h>
++#include <asm/arch/devices.h>
++#include <asm/arch/gpio.h>
++
++
++static inline void ks8695_led_on(unsigned int led)
++{
++ gpio_set_value(led, 0);
++}
++
++static inline void ks8695_led_off(unsigned int led)
++{
++ gpio_set_value(led, 1);
++}
++
++static inline void ks8695_led_toggle(unsigned int led)
++{
++ unsigned long is_off = gpio_get_value(led);
++ if (is_off)
++ ks8695_led_on(led);
++ else
++ ks8695_led_off(led);
++}
++
++
++/*
++ * Handle LED events.
++ */
++static void ks8695_leds_event(led_event_t evt)
++{
++ unsigned long flags;
++
++ local_irq_save(flags);
++
++ switch(evt) {
++ case led_start: /* System startup */
++ ks8695_led_on(ks8695_leds_cpu);
++ break;
++
++ case led_stop: /* System stop / suspend */
++ ks8695_led_off(ks8695_leds_cpu);
++ break;
++
++#ifdef CONFIG_LEDS_TIMER
++ case led_timer: /* Every 50 timer ticks */
++ ks8695_led_toggle(ks8695_leds_timer);
++ break;
++#endif
++
++#ifdef CONFIG_LEDS_CPU
++ case led_idle_start: /* Entering idle state */
++ ks8695_led_off(ks8695_leds_cpu);
++ break;
++
++ case led_idle_end: /* Exit idle state */
++ ks8695_led_on(ks8695_leds_cpu);
++ break;
++#endif
++
++ default:
++ break;
++ }
++
++ local_irq_restore(flags);
++}
++
++
++static int __init leds_init(void)
++{
++ if ((ks8695_leds_timer == -1) || (ks8695_leds_cpu == -1))
++ return -ENODEV;
++
++ leds_event = ks8695_leds_event;
++
++ leds_event(led_start);
++ return 0;
++}
++
++__initcall(leds_init);
+diff --git a/arch/arm/mach-ks8695/pci.c b/arch/arm/mach-ks8695/pci.c
+new file mode 100644
+index 0000000..4d2a5bf
+--- /dev/null
++++ b/arch/arm/mach-ks8695/pci.c
+@@ -0,0 +1,324 @@
++/*
++ * arch/arm/mach-ks8695/pci.c
++ *
++ * Copyright (C) 2003, Micrel Semiconductors
++ * Copyright (C) 2006, Greg Ungerer <gerg@snapgear.com>
++ * Copyright (C) 2006, Ben Dooks
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/kernel.h>
++#include <linux/pci.h>
++#include <linux/mm.h>
++#include <linux/init.h>
++#include <linux/irq.h>
++#include <linux/delay.h>
++
++#include <asm/io.h>
++#include <asm/mach/pci.h>
++#include <asm/hardware.h>
++
++#include <asm/arch/devices.h>
++#include <asm/arch/regs-pci.h>
++
++
++static int pci_dbg;
++static int pci_cfg_dbg;
++
++
++static void ks8695_pci_setupconfig(unsigned int bus_nr, unsigned int devfn, unsigned int where)
++{
++ unsigned long pbca;
++
++ pbca = PBCA_ENABLE | (where & ~3);
++ pbca |= PCI_SLOT(devfn) << 11 ;
++ pbca |= PCI_FUNC(devfn) << 8;
++ pbca |= bus_nr << 16;
++
++ if (bus_nr == 0) {
++ /* use Type-0 transaction */
++ __raw_writel(pbca, KS8695_PCI_VA + KS8695_PBCA);
++ } else {
++ /* use Type-1 transaction */
++ __raw_writel(pbca | PBCA_TYPE1, KS8695_PCI_VA + KS8695_PBCA);
++ }
++}
++
++
++/*
++ * The KS8695 datasheet prohibits anything other than 32bit accesses
++ * to the IO registers, so all our configuration must be done with
++ * 32bit operations, and the correct bit masking and shifting.
++ */
++
++static int ks8695_pci_readconfig(struct pci_bus *bus,
++ unsigned int devfn, int where, int size, u32 *value)
++{
++ ks8695_pci_setupconfig(bus->number, devfn, where);
++
++ *value = __raw_readl(KS8695_PCI_VA + KS8695_PBCD);
++
++ switch (size) {
++ case 4:
++ break;
++ case 2:
++ *value = *value >> ((where & 2) * 8);
++ *value &= 0xffff;
++ break;
++ case 1:
++ *value = *value >> ((where & 3) * 8);
++ *value &= 0xff;
++ break;
++ }
++
++ if (pci_cfg_dbg) {
++ printk("read: %d,%08x,%02x,%d: %08x (%08x)\n",
++ bus->number, devfn, where, size, *value,
++ __raw_readl(KS8695_PCI_VA + KS8695_PBCD));
++ }
++
++ return PCIBIOS_SUCCESSFUL;
++}
++
++static int ks8695_pci_writeconfig(struct pci_bus *bus,
++ unsigned int devfn, int where, int size, u32 value)
++{
++ unsigned long tmp;
++
++ if (pci_cfg_dbg) {
++ printk("write: %d,%08x,%02x,%d: %08x\n",
++ bus->number, devfn, where, size, value);
++ }
++
++ ks8695_pci_setupconfig(bus->number, devfn, where);
++
++ switch (size) {
++ case 4:
++ __raw_writel(value, KS8695_PCI_VA + KS8695_PBCD);
++ break;
++ case 2:
++ tmp = __raw_readl(KS8695_PCI_VA + KS8695_PBCD);
++ tmp &= ~(0xffff << ((where & 2) * 8));
++ tmp |= value << ((where & 2) * 8);
++
++ __raw_writel(tmp, KS8695_PCI_VA + KS8695_PBCD);
++ break;
++ case 1:
++ tmp = __raw_readl(KS8695_PCI_VA + KS8695_PBCD);
++ tmp &= ~(0xff << ((where & 3) * 8));
++ tmp |= value << ((where & 3) * 8);
++
++ __raw_writel(tmp, KS8695_PCI_VA + KS8695_PBCD);
++ break;
++ }
++
++ return PCIBIOS_SUCCESSFUL;
++}
++
++static void ks8695_local_writeconfig(int where, u32 value)
++{
++ ks8695_pci_setupconfig(0, 0, where);
++ __raw_writel(value, KS8695_PCI_VA + KS8695_PBCD);
++}
++
++static struct pci_ops ks8695_pci_ops = {
++ .read = ks8695_pci_readconfig,
++ .write = ks8695_pci_writeconfig,
++};
++
++static struct pci_bus *ks8695_pci_scan_bus(int nr, struct pci_sys_data *sys)
++{
++ return pci_scan_bus(sys->busnr, &ks8695_pci_ops, sys);
++}
++
++static struct resource pci_mem = {
++ .name = "PCI Memory space",
++ .start = KS8695_PCIMEM_PA,
++ .end = KS8695_PCIMEM_PA + (KS8695_PCIMEM_SIZE - 1),
++ .flags = IORESOURCE_MEM,
++};
++
++static struct resource pci_io = {
++ .name = "PCI IO space",
++ .start = KS8695_PCIIO_PA,
++ .end = KS8695_PCIIO_PA + (KS8695_PCIIO_SIZE - 1),
++ .flags = IORESOURCE_IO,
++};
++
++static int __init ks8695_pci_setup(int nr, struct pci_sys_data *sys)
++{
++ if (nr > 0)
++ return 0;
++
++ request_resource(&iomem_resource, &pci_mem);
++ request_resource(&ioport_resource, &pci_io);
++
++ sys->resource[0] = &pci_io;
++ sys->resource[1] = &pci_mem;
++ sys->resource[2] = NULL;
++
++ /* Assign and enable processor bridge */
++ ks8695_local_writeconfig(PCI_BASE_ADDRESS_0, KS8695_PCIMEM_PA);
++
++ /* Enable bus-master & Memory Space access */
++ ks8695_local_writeconfig(PCI_COMMAND, PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY);
++
++ /* Set cache-line size & latency. */
++ ks8695_local_writeconfig(PCI_CACHE_LINE_SIZE, (32 << 8) | (L1_CACHE_BYTES / sizeof(u32)));
++
++ /* Reserve PCI memory space for PCI-AHB resources */
++ if (!request_mem_region(KS8695_PCIMEM_PA, SZ_64M, "PCI-AHB Bridge")) {
++ printk(KERN_ERR "Cannot allocate PCI-AHB Bridge memory.\n");
++ return -EBUSY;
++ }
++
++ return 1;
++}
++
++static inline unsigned int size_mask(unsigned long size)
++{
++ return (~size) + 1;
++}
++
++static int ks8695_pci_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
++{
++ unsigned long pc = instruction_pointer(regs);
++ unsigned long instr = *(unsigned long *)pc;
++ unsigned long cmdstat;
++
++ cmdstat = __raw_readl(KS8695_PCI_VA + KS8695_CRCFCS);
++
++ printk(KERN_ERR "PCI abort: address = 0x%08lx fsr = 0x%03x PC = 0x%08lx LR = 0x%08lx [%s%s%s%s%s]\n",
++ addr, fsr, regs->ARM_pc, regs->ARM_lr,
++ cmdstat & (PCI_STATUS_SIG_TARGET_ABORT << 16) ? "GenTarget" : " ",
++ cmdstat & (PCI_STATUS_REC_TARGET_ABORT << 16) ? "RecvTarget" : " ",
++ cmdstat & (PCI_STATUS_REC_MASTER_ABORT << 16) ? "MasterAbort" : " ",
++ cmdstat & (PCI_STATUS_SIG_SYSTEM_ERROR << 16) ? "SysError" : " ",
++ cmdstat & (PCI_STATUS_DETECTED_PARITY << 16) ? "Parity" : " "
++ );
++
++ __raw_writel(cmdstat, KS8695_PCI_VA + KS8695_CRCFCS);
++
++ /*
++ * If the instruction being executed was a read,
++ * make it look like it read all-ones.
++ */
++ if ((instr & 0x0c100000) == 0x04100000) {
++ int reg = (instr >> 12) & 15;
++ unsigned long val;
++
++ if (instr & 0x00400000)
++ val = 255;
++ else
++ val = -1;
++
++ regs->uregs[reg] = val;
++ regs->ARM_pc += 4;
++ return 0;
++ }
++
++ if ((instr & 0x0e100090) == 0x00100090) {
++ int reg = (instr >> 12) & 15;
++
++ regs->uregs[reg] = -1;
++ regs->ARM_pc += 4;
++ return 0;
++ }
++
++ return 1;
++}
++
++static void __init ks8695_pci_preinit(void)
++{
++ /* stage 1 initialization, subid, subdevice = 0x0001 */
++ __raw_writel(0x00010001, KS8695_PCI_VA + KS8695_CRCSID);
++
++ /* stage 2 initialization */
++ /* prefetch limits with 16 words, retry enable */
++ __raw_writel(0x40000000, KS8695_PCI_VA + KS8695_PBCS);
++
++ /* configure memory mapping */
++ __raw_writel(KS8695_PCIMEM_PA, KS8695_PCI_VA + KS8695_PMBA);
++ __raw_writel(size_mask(KS8695_PCIMEM_SIZE), KS8695_PCI_VA + KS8695_PMBAM);
++ __raw_writel(KS8695_PCIMEM_PA, KS8695_PCI_VA + KS8695_PMBAT);
++ __raw_writel(0, KS8695_PCI_VA + KS8695_PMBAC);
++
++ /* configure IO mapping */
++ __raw_writel(KS8695_PCIIO_PA, KS8695_PCI_VA + KS8695_PIOBA);
++ __raw_writel(size_mask(KS8695_PCIIO_SIZE), KS8695_PCI_VA + KS8695_PIOBAM);
++ __raw_writel(KS8695_PCIIO_PA, KS8695_PCI_VA + KS8695_PIOBAT);
++ __raw_writel(0, KS8695_PCI_VA + KS8695_PIOBAC);
++
++ /* hook in fault handlers */
++ hook_fault_code(8, ks8695_pci_fault, SIGBUS, "external abort on non-linefetch");
++ hook_fault_code(10, ks8695_pci_fault, SIGBUS, "external abort on non-linefetch");
++}
++
++static void ks8695_show_pciregs(void)
++{
++ if (!pci_dbg)
++ return;
++
++ printk(KERN_INFO "PCI: CRCFID = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCFID));
++ printk(KERN_INFO "PCI: CRCFCS = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCFCS));
++ printk(KERN_INFO "PCI: CRCFRV = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCFRV));
++ printk(KERN_INFO "PCI: CRCFLT = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCFLT));
++ printk(KERN_INFO "PCI: CRCBMA = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCBMA));
++ printk(KERN_INFO "PCI: CRCSID = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCSID));
++ printk(KERN_INFO "PCI: CRCFIT = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_CRCFIT));
++
++ printk(KERN_INFO "PCI: PBM = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PBM));
++ printk(KERN_INFO "PCI: PBCS = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PBCS));
++
++ printk(KERN_INFO "PCI: PMBA = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PMBA));
++ printk(KERN_INFO "PCI: PMBAC = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PMBAC));
++ printk(KERN_INFO "PCI: PMBAM = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PMBAM));
++ printk(KERN_INFO "PCI: PMBAT = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PMBAT));
++
++ printk(KERN_INFO "PCI: PIOBA = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PIOBA));
++ printk(KERN_INFO "PCI: PIOBAC = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PIOBAC));
++ printk(KERN_INFO "PCI: PIOBAM = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PIOBAM));
++ printk(KERN_INFO "PCI: PIOBAT = %08x\n", __raw_readl(KS8695_PCI_VA + KS8695_PIOBAT));
++}
++
++
++static struct hw_pci ks8695_pci __initdata = {
++ .nr_controllers = 1,
++ .preinit = ks8695_pci_preinit,
++ .setup = ks8695_pci_setup,
++ .scan = ks8695_pci_scan_bus,
++ .postinit = NULL,
++ .swizzle = pci_std_swizzle,
++ .map_irq = NULL,
++};
++
++void __init ks8695_init_pci(struct ks8695_pci_cfg *cfg)
++{
++ if (__raw_readl(KS8695_PCI_VA + KS8695_CRCFRV) & CFRV_GUEST) {
++ printk("PCI: KS8695 in guest mode, not initialising\n");
++ return;
++ }
++
++ printk(KERN_INFO "PCI: Initialising\n");
++ ks8695_show_pciregs();
++
++ /* set Mode */
++ __raw_writel(cfg->mode << 29, KS8695_PCI_VA + KS8695_PBM);
++
++ ks8695_pci.map_irq = cfg->map_irq; /* board-specific map_irq method */
++
++ pci_common_init(&ks8695_pci);
++}
+diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
+index 0a9a5e7..1f10f00 100644
+--- a/arch/arm/tools/mach-types
++++ b/arch/arm/tools/mach-types
+@@ -12,7 +12,7 @@
+ #
+ # http://www.arm.linux.org.uk/developer/machines/?action=new
+ #
+-# Last update: Fri May 11 19:53:41 2007
++# Last update: Mon Nov 12 14:39:37 2007
+ #
+ # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
+ #
+@@ -266,7 +266,7 @@ stork_egg ARCH_STORK_EGG STORK_EGG 248
+ wismo SA1100_WISMO WISMO 249
+ ezlinx ARCH_EZLINX EZLINX 250
+ at91rm9200 ARCH_AT91RM9200 AT91RM9200 251
+-orion ARCH_ORION ORION 252
++adtech_orion ARCH_ADTECH_ORION ADTECH_ORION 252
+ neptune ARCH_NEPTUNE NEPTUNE 253
+ hackkit SA1100_HACKKIT HACKKIT 254
+ pxa_wins30 ARCH_PXA_WINS30 PXA_WINS30 255
+@@ -661,7 +661,7 @@ a9200ec MACH_A9200EC A9200EC 645
+ pnx0105 MACH_PNX0105 PNX0105 646
+ adcpoecpu MACH_ADCPOECPU ADCPOECPU 647
+ csb637 MACH_CSB637 CSB637 648
+-ml69q6203 MACH_ML69Q6203 ML69Q6203 649
++ml675050 MACH_ML69Q6203 ML69Q6203 649
+ mb9200 MACH_MB9200 MB9200 650
+ kulun MACH_KULUN KULUN 651
+ snapper MACH_SNAPPER SNAPPER 652
+@@ -953,7 +953,7 @@ fred_jack MACH_FRED_JACK FRED_JACK 939
+ ttg_color1 MACH_TTG_COLOR1 TTG_COLOR1 940
+ nxeb500hmi MACH_NXEB500HMI NXEB500HMI 941
+ netdcu8 MACH_NETDCU8 NETDCU8 942
+-ml675050_cpu_boa MACH_ML675050_CPU_BOA ML675050_CPU_BOA 943
++ml675050_dev_sys MACH_ML675050_CPU_BOA ML675050_CPU_BOA 943
+ ng_fvx538 MACH_NG_FVX538 NG_FVX538 944
+ ng_fvs338 MACH_NG_FVS338 NG_FVS338 945
+ pnx4103 MACH_PNX4103 PNX4103 946
+@@ -1148,7 +1148,7 @@ aidx270 MACH_AIDX270 AIDX270 1134
+ rema MACH_REMA REMA 1135
+ bps1000 MACH_BPS1000 BPS1000 1136
+ hw90350 MACH_HW90350 HW90350 1137
+-omap_sdp3430 MACH_OMAP_SDP3430 OMAP_SDP3430 1138
++omap_3430sdp MACH_OMAP_3430SDP OMAP_3430SDP 1138
+ bluetouch MACH_BLUETOUCH BLUETOUCH 1139
+ vstms MACH_VSTMS VSTMS 1140
+ xsbase270 MACH_XSBASE270 XSBASE270 1141
+@@ -1214,7 +1214,7 @@ osstbox MACH_OSSTBOX OSSTBOX 1203
+ kbat9261 MACH_KBAT9261 KBAT9261 1204
+ ct1100 MACH_CT1100 CT1100 1205
+ akcppxa MACH_AKCPPXA AKCPPXA 1206
+-zevio_1020 MACH_ZEVIO_1020 ZEVIO_1020 1207
++ochaya1020 MACH_OCHAYA1020 OCHAYA1020 1207
+ hitrack MACH_HITRACK HITRACK 1208
+ syme1 MACH_SYME1 SYME1 1209
+ syhl1 MACH_SYHL1 SYHL1 1210
+@@ -1299,7 +1299,7 @@ xp179 MACH_XP179 XP179 1290
+ h4300 MACH_H4300 H4300 1291
+ goramo_mlr MACH_GORAMO_MLR GORAMO_MLR 1292
+ mxc30020evb MACH_MXC30020EVB MXC30020EVB 1293
+-adsbitsymx MACH_ADSBITSIMX ADSBITSIMX 1294
++adsbitsyg5 MACH_ADSBITSIMX ADSBITSIMX 1294
+ adsportalplus MACH_ADSPORTALPLUS ADSPORTALPLUS 1295
+ mmsp2plus MACH_MMSP2PLUS MMSP2PLUS 1296
+ em_x270 MACH_EM_X270 EM_X270 1297
+@@ -1367,3 +1367,189 @@ db88f5281 MACH_DB88F5281 DB88F5281 1358
+ csb726 MACH_CSB726 CSB726 1359
+ tik27 MACH_TIK27 TIK27 1360
+ mx_uc7420 MACH_MX_UC7420 MX_UC7420 1361
++rirm3 MACH_RIRM3 RIRM3 1362
++pelco_odyssey MACH_PELCO_ODYSSEY PELCO_ODYSSEY 1363
++arm920t MACH_ARM920T ARM920T 1364
++add_abox MACH_ADD_ABOX ADD_ABOX 1365
++add_tpid MACH_ADD_TPID ADD_TPID 1366
++minicheck MACH_MINICHECK MINICHECK 1367
++idam MACH_IDAM IDAM 1368
++mario_mx MACH_MARIO_MX MARIO_MX 1369
++vi1888 MACH_VI1888 VI1888 1370
++zr4230 MACH_ZR4230 ZR4230 1371
++t1_ix_blue MACH_T1_IX_BLUE T1_IX_BLUE 1372
++syhq2 MACH_SYHQ2 SYHQ2 1373
++computime_r3 MACH_COMPUTIME_R3 COMPUTIME_R3 1374
++oratis MACH_ORATIS ORATIS 1375
++mikko MACH_MIKKO MIKKO 1376
++holon MACH_HOLON HOLON 1377
++olip8 MACH_OLIP8 OLIP8 1378
++ghi270hg MACH_GHI270HG GHI270HG 1379
++davinci_dm6467_evm MACH_DAVINCI_DM6467_EVM DAVINCI_DM6467_EVM 1380
++davinci_dm355_evm MACH_DAVINCI_DM350_EVM DAVINCI_DM350_EVM 1381
++ocearm MACH_OCEARMTEST OCEARMTEST 1382
++blackriver MACH_BLACKRIVER BLACKRIVER 1383
++sandgate_wp MACH_SANDGATEWP SANDGATEWP 1384
++cdotbwsg MACH_CDOTBWSG CDOTBWSG 1385
++quark963 MACH_QUARK963 QUARK963 1386
++csb735 MACH_CSB735 CSB735 1387
++littleton MACH_LITTLETON LITTLETON 1388
++mio_p550 MACH_MIO_P550 MIO_P550 1389
++motion2440 MACH_MOTION2440 MOTION2440 1390
++imm500 MACH_IMM500 IMM500 1391
++homematic MACH_HOMEMATIC HOMEMATIC 1392
++ermine MACH_ERMINE ERMINE 1393
++kb9202b MACH_KB9202B KB9202B 1394
++hs1xx MACH_HS1XX HS1XX 1395
++studentmate2440 MACH_STUDENTMATE2440 STUDENTMATE2440 1396
++arvoo_l1_z1 MACH_ARVOO_L1_Z1 ARVOO_L1_Z1 1397
++dep2410k MACH_DEP2410K DEP2410K 1398
++xxsvideo MACH_XXSVIDEO XXSVIDEO 1399
++im4004 MACH_IM4004 IM4004 1400
++ochaya1050 MACH_OCHAYA1050 OCHAYA1050 1401
++lep9261 MACH_LEP9261 LEP9261 1402
++svenmeb MACH_SVENMEB SVENMEB 1403
++fortunet2ne MACH_FORTUNET2NE FORTUNET2NE 1404
++omap2 MACH_OMAP2 OMAP2 1405
++nxhx MACH_NXHX NXHX 1406
++realview_pb11mp MACH_REALVIEW_PB11MP REALVIEW_PB11MP 1407
++ids500 MACH_IDS500 IDS500 1408
++ors_n725 MACH_ORS_N725 ORS_N725 1409
++hsdarm MACH_HSDARM HSDARM 1410
++sha_pon003 MACH_SHA_PON003 SHA_PON003 1411
++sha_pon004 MACH_SHA_PON004 SHA_PON004 1412
++sha_pon007 MACH_SHA_PON007 SHA_PON007 1413
++sha_pon011 MACH_SHA_PON011 SHA_PON011 1414
++h6042 MACH_H6042 H6042 1415
++h6043 MACH_H6043 H6043 1416
++looxc550 MACH_LOOXC550 LOOXC550 1417
++cnty_titan MACH_CNTY_TITAN CNTY_TITAN 1418
++app3xx MACH_APP3XX APP3XX 1419
++sideoatsgrama MACH_SIDEOATSGRAMA SIDEOATSGRAMA 1420
++xscale_palmt700p MACH_XSCALE_PALMT700P XSCALE_PALMT700P 1421
++xscale_palmt700w MACH_XSCALE_PALMT700W XSCALE_PALMT700W 1422
++xscale_palmt750 MACH_XSCALE_PALMT750 XSCALE_PALMT750 1423
++xscale_palmt755p MACH_XSCALE_PALMT755P XSCALE_PALMT755P 1424
++ezreganut9200 MACH_EZREGANUT9200 EZREGANUT9200 1425
++sarge MACH_SARGE SARGE 1426
++a696 MACH_A696 A696 1427
++turtle1916 MACH_TURTLE TURTLE 1428
++pxa1916 MACH_MY5910TURTLE MY5910TURTLE 1429
++mx27_3ds MACH_MX27_3DS MX27_3DS 1430
++bishop MACH_BISHOP BISHOP 1431
++pxx MACH_PXX PXX 1432
++redwood MACH_REDWOOD REDWOOD 1433
++dummy MACH_OMAP2430DLP OMAP2430DLP 1434
++dummy_board MACH_OMAP2430OSK OMAP2430OSK 1435
++omap_2430dlp MACH_OMAP_2430DLP OMAP_2430DLP 1436
++omap_2430osk MACH_OMAP_2430OSK OMAP_2430OSK 1437
++sardine MACH_SARDINE SARDINE 1438
++halibut MACH_HALIBUT HALIBUT 1439
++trout MACH_TROUT TROUT 1440
++goldfish MACH_GOLDFISH GOLDFISH 1441
++gesbc2440 MACH_GESBC2440 GESBC2440 1442
++nomad MACH_NOMAD NOMAD 1443
++rosalind MACH_ROSALIND ROSALIND 1444
++cc9p9215 MACH_CC9P9215 CC9P9215 1445
++cc9p9210 MACH_CC9P9210 CC9P9210 1446
++cc9p9215js MACH_CC9P9215JS CC9P9215JS 1447
++cc9p9210js MACH_CC9P9210JS CC9P9210JS 1448
++nasffe MACH_NASFFE NASFFE 1449
++tn2x0bd MACH_TN2X0BD TN2X0BD 1450
++gwmpxa MACH_GWMPXA GWMPXA 1451
++exyplus MACH_EXYPLUS EXYPLUS 1452
++jadoo21 MACH_JADOO21 JADOO21 1453
++looxn560 MACH_LOOXN560 LOOXN560 1454
++bonsai MACH_BONSAI BONSAI 1455
++adsmilgato MACH_ADSMILGATO ADSMILGATO 1456
++gba MACH_GBA GBA 1457
++h6044 MACH_H6044 H6044 1458
++app MACH_APP APP 1459
++tct_hammer MACH_TCT_HAMMER TCT_HAMMER 1460
++herald MACH_HERMES HERMES 1461
++artemis MACH_ARTEMIS ARTEMIS 1462
++htctitan MACH_HTCTITAN HTCTITAN 1463
++qranium MACH_QRANIUM QRANIUM 1464
++add_wsc2 MACH_ADD_WSC2 ADD_WSC2 1465
++add_medinet MACH_ADD_MEDINET ADD_MEDINET 1466
++bboard MACH_BBOARD BBOARD 1467
++cambria MACH_CAMBRIA CAMBRIA 1468
++mt7xxx MACH_MT7XXX MT7XXX 1469
++matrix512 MACH_MATRIX512 MATRIX512 1470
++matrix522 MACH_MATRIX522 MATRIX522 1471
++ipac5010 MACH_IPAC5010 IPAC5010 1472
++sakura MACH_SAKURA SAKURA 1473
++grocx MACH_GROCX GROCX 1474
++pm9263 MACH_PM9263 PM9263 1475
++sim_one MACH_SIM_ONE SIM_ONE 1476
++acq132 MACH_ACQ132 ACQ132 1477
++datr MACH_DATR DATR 1478
++actux1 MACH_ACTUX1 ACTUX1 1479
++actux2 MACH_ACTUX2 ACTUX2 1480
++actux3 MACH_ACTUX3 ACTUX3 1481
++flexit MACH_FLEXIT FLEXIT 1482
++bh2x0bd MACH_BH2X0BD BH2X0BD 1483
++atb2002 MACH_ATB2002 ATB2002 1484
++xenon MACH_XENON XENON 1485
++fm607 MACH_FM607 FM607 1486
++matrix514 MACH_MATRIX514 MATRIX514 1487
++matrix524 MACH_MATRIX524 MATRIX524 1488
++inpod MACH_INPOD INPOD 1489
++jive MACH_JIVE JIVE 1490
++tll_mx21 MACH_TLL_MX21 TLL_MX21 1491
++sbc2800 MACH_SBC2800 SBC2800 1492
++cc7ucamry MACH_CC7UCAMRY CC7UCAMRY 1493
++ubisys_p9_sc15 MACH_UBISYS_P9_SC15 UBISYS_P9_SC15 1494
++ubisys_p9_ssc2d10 MACH_UBISYS_P9_SSC2D10 UBISYS_P9_SSC2D10 1495
++ubisys_p9_rcu3 MACH_UBISYS_P9_RCU3 UBISYS_P9_RCU3 1496
++aml_m8000 MACH_AML_M8000 AML_M8000 1497
++snapper_270 MACH_SNAPPER_270 SNAPPER_270 1498
++omap_bbx MACH_OMAP_BBX OMAP_BBX 1499
++ucn2410 MACH_UCN2410 UCN2410 1500
++sam9_l9260 MACH_SAM9_L9260 SAM9_L9260 1501
++eti_c2 MACH_ETI_C2 ETI_C2 1502
++avalanche MACH_AVALANCHE AVALANCHE 1503
++realview_pb1176 MACH_REALVIEW_PB1176 REALVIEW_PB1176 1504
++dp1500 MACH_DP1500 DP1500 1505
++apple_iphone MACH_APPLE_IPHONE APPLE_IPHONE 1506
++yl9200 MACH_YL9200 YL9200 1507
++rd88f5182 MACH_RD88F5182 RD88F5182 1508
++kurobox_pro MACH_KUROBOX_PRO KUROBOX_PRO 1509
++se_poet MACH_SE_POET SE_POET 1510
++mx31_3ds MACH_MX31_3DS MX31_3DS 1511
++r270 MACH_R270 R270 1512
++armour21 MACH_ARMOUR21 ARMOUR21 1513
++dt2 MACH_DT2 DT2 1514
++vt4 MACH_VT4 VT4 1515
++tyco320 MACH_TYCO320 TYCO320 1516
++adma MACH_ADMA ADMA 1517
++wp188 MACH_WP188 WP188 1518
++corsica MACH_CORSICA CORSICA 1519
++bigeye MACH_BIGEYE BIGEYE 1520
++machine_is_arm2410 MACH_MACHINE_IS_ARM2410 MACHINE_IS_ARM2410 1521
++tll5000 MACH_TLL5000 TLL5000 1522
++hni270 MACH_HNI_X270 HNI_X270 1523
++qong MACH_QONG QONG 1524
++tcompact MACH_TCOMPACT TCOMPACT 1525
++puma5 MACH_PUMA5 PUMA5 1526
++elara MACH_ELARA ELARA 1527
++ellington MACH_ELLINGTON ELLINGTON 1528
++xda_atom MACH_XDA_ATOM XDA_ATOM 1529
++energizer2 MACH_ENERGIZER2 ENERGIZER2 1530
++odin MACH_ODIN ODIN 1531
++actux4 MACH_ACTUX4 ACTUX4 1532
++esl_omap MACH_ESL_OMAP ESL_OMAP 1533
++omap2evm MACH_OMAP2EVM OMAP2EVM 1534
++omap3evm MACH_OMAP3EVM OMAP3EVM 1535
++add_pcu57 MACH_ADD_PCU57 ADD_PCU57 1536
++monaco MACH_MONACO MONACO 1537
++levante MACH_LEVANTE LEVANTE 1538
++tmxipx425 MACH_TMXIPX425 TMXIPX425 1539
++leep MACH_LEEP LEEP 1540
++raad MACH_RAAD RAAD 1541
++dns323 MACH_DNS323 DNS323 1542
++ap1000 MACH_AP1000 AP1000 1543
++a9sam6432 MACH_A9SAM6432 A9SAM6432 1544
++shiny MACH_SHINY SHINY 1545
++omap3_beagle MACH_OMAP3_BEAGLE OMAP3_BEAGLE 1546
++csr_bdb2 MACH_CSR_BDB2 CSR_BDB2 1547
+diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
+index ef1ed5d..99be2d0 100644
+--- a/drivers/char/Kconfig
++++ b/drivers/char/Kconfig
+@@ -1040,5 +1040,21 @@ config DEVPORT
+
+ source "drivers/s390/char/Kconfig"
+
++config AT91_SPI
++ bool "SPI driver (legacy) for AT91RM9200 processors"
++ depends on ARCH_AT91RM9200
++ default y
++ help
++ The SPI driver gives access to this serial bus on the AT91RM9200
++ processor.
++
++config AT91_SPIDEV
++ bool "SPI device interface (legacy) for AT91RM9200 processors"
++ depends on ARCH_AT91RM9200 && AT91_SPI
++ default n
++ help
++ The SPI driver gives user mode access to this serial
++ bus on the AT91RM9200 processor.
++
+ endmenu
+
+diff --git a/drivers/char/Makefile b/drivers/char/Makefile
+index 07304d5..359384c 100644
+--- a/drivers/char/Makefile
++++ b/drivers/char/Makefile
+@@ -96,6 +96,8 @@ obj-$(CONFIG_CS5535_GPIO) += cs5535_gpio.o
+ obj-$(CONFIG_GPIO_VR41XX) += vr41xx_giu.o
+ obj-$(CONFIG_GPIO_TB0219) += tb0219.o
+ obj-$(CONFIG_TELCLOCK) += tlclk.o
++obj-$(CONFIG_AT91_SPI) += at91_spi.o
++obj-$(CONFIG_AT91_SPIDEV) += at91_spidev.o
+
+ obj-$(CONFIG_MWAVE) += mwave/
+ obj-$(CONFIG_AGP) += agp/
+diff --git a/drivers/char/at91_spi.c b/drivers/char/at91_spi.c
+new file mode 100644
+index 0000000..08dec81
+--- /dev/null
++++ b/drivers/char/at91_spi.c
+@@ -0,0 +1,336 @@
++/*
++ * Serial Peripheral Interface (SPI) driver for the Atmel AT91RM9200 (Thunder)
++ *
++ * Copyright (C) SAN People (Pty) Ltd
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++#include <linux/init.h>
++#include <linux/dma-mapping.h>
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/completion.h>
++#include <linux/interrupt.h>
++#include <linux/clk.h>
++#include <linux/platform_device.h>
++#include <linux/atmel_pdc.h>
++#include <asm/io.h>
++#include <asm/semaphore.h>
++
++#include <asm/arch/at91_spi.h>
++#include <asm/arch/board.h>
++#include <asm/arch/spi.h>
++
++#undef DEBUG_SPI
++
++static struct spi_local spi_dev[NR_SPI_DEVICES]; /* state of the SPI devices */
++static int spi_enabled = 0;
++static struct semaphore spi_lock; /* protect access to SPI bus */
++static int current_device = -1; /* currently selected SPI device */
++static struct clk *spi_clk; /* SPI clock */
++static void __iomem *spi_base; /* SPI peripheral base-address */
++
++DECLARE_COMPLETION(transfer_complete);
++
++
++#define at91_spi_read(reg) __raw_readl(spi_base + (reg))
++#define at91_spi_write(reg, val) __raw_writel((val), spi_base + (reg))
++
++
++/* ......................................................................... */
++
++/*
++ * Access and enable the SPI bus.
++ * This MUST be called before any transfers are performed.
++ */
++void spi_access_bus(short device)
++{
++ /* Ensure that requested device is valid */
++ if ((device < 0) || (device >= NR_SPI_DEVICES))
++ panic("at91_spi: spi_access_bus called with invalid device");
++
++ if (spi_enabled == 0) {
++ clk_enable(spi_clk); /* Enable Peripheral clock */
++ at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIEN); /* Enable SPI */
++#ifdef DEBUG_SPI
++ printk("SPI on\n");
++#endif
++ }
++ spi_enabled++;
++
++ /* Lock the SPI bus */
++ down(&spi_lock);
++ current_device = device;
++
++ /* Configure SPI bus for device */
++ at91_spi_write(AT91_SPI_MR, AT91_SPI_MSTR | AT91_SPI_MODFDIS | (spi_dev[device].pcs << 16));
++}
++
++/*
++ * Relinquish control of the SPI bus.
++ */
++void spi_release_bus(short device)
++{
++ if (device != current_device)
++ panic("at91_spi: spi_release called with invalid device");
++
++ /* Release the SPI bus */
++ current_device = -1;
++ up(&spi_lock);
++
++ spi_enabled--;
++ if (spi_enabled == 0) {
++ at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIDIS); /* Disable SPI */
++ clk_disable(spi_clk); /* Disable Peripheral clock */
++#ifdef DEBUG_SPI
++ printk("SPI off\n");
++#endif
++ }
++}
++
++/*
++ * Perform a data transfer over the SPI bus
++ */
++int spi_transfer(struct spi_transfer_list* list)
++{
++ struct spi_local *device = (struct spi_local *) &spi_dev[current_device];
++ int tx_size;
++
++ if (!list)
++ panic("at91_spi: spi_transfer called with NULL transfer list");
++ if (current_device == -1)
++ panic("at91_spi: spi_transfer called without acquiring bus");
++
++#ifdef DEBUG_SPI
++ printk("SPI transfer start [%i]\n", list->nr_transfers);
++#endif
++
++ /* If we are in 16-bit mode, we need to modify what we pass to the PDC */
++ tx_size = (at91_spi_read(AT91_SPI_CSR(current_device)) & AT91_SPI_BITS_16) ? 2 : 1;
++
++ /* Store transfer list */
++ device->xfers = list;
++ list->curr = 0;
++
++ /* Assume there must be at least one transfer */
++ device->tx = dma_map_single(NULL, list->tx[0], list->txlen[0], DMA_TO_DEVICE);
++ device->rx = dma_map_single(NULL, list->rx[0], list->rxlen[0], DMA_FROM_DEVICE);
++
++ /* Program PDC registers */
++ at91_spi_write(ATMEL_PDC_TPR, device->tx);
++ at91_spi_write(ATMEL_PDC_RPR, device->rx);
++ at91_spi_write(ATMEL_PDC_TCR, list->txlen[0] / tx_size);
++ at91_spi_write(ATMEL_PDC_RCR, list->rxlen[0] / tx_size);
++
++ /* Is there a second transfer? */
++ if (list->nr_transfers > 1) {
++ device->txnext = dma_map_single(NULL, list->tx[1], list->txlen[1], DMA_TO_DEVICE);
++ device->rxnext = dma_map_single(NULL, list->rx[1], list->rxlen[1], DMA_FROM_DEVICE);
++
++ /* Program Next PDC registers */
++ at91_spi_write(ATMEL_PDC_TNPR, device->txnext);
++ at91_spi_write(ATMEL_PDC_RNPR, device->rxnext);
++ at91_spi_write(ATMEL_PDC_TNCR, list->txlen[1] / tx_size);
++ at91_spi_write(ATMEL_PDC_RNCR, list->rxlen[1] / tx_size);
++ }
++ else {
++ device->txnext = 0;
++ device->rxnext = 0;
++ at91_spi_write(ATMEL_PDC_TNCR, 0);
++ at91_spi_write(ATMEL_PDC_RNCR, 0);
++ }
++
++ // TODO: If we are doing consecutive transfers (at high speed, or
++ // small buffers), then it might be worth modifying the 'Delay between
++ // Consecutive Transfers' in the CSR registers.
++ // This is an issue if we cannot chain the next buffer fast enough
++ // in the interrupt handler.
++
++ /* Enable transmitter and receiver */
++ at91_spi_write(ATMEL_PDC_PTCR, ATMEL_PDC_RXTEN | ATMEL_PDC_TXTEN);
++
++ at91_spi_write(AT91_SPI_IER, AT91_SPI_ENDRX); /* enable buffer complete interrupt */
++ wait_for_completion(&transfer_complete);
++
++#ifdef DEBUG_SPI
++ printk("SPI transfer end\n");
++#endif
++
++ return 0;
++}
++
++/* ......................................................................... */
++
++/*
++ * Handle interrupts from the SPI controller.
++ */
++static irqreturn_t at91spi_interrupt(int irq, void *dev_id)
++{
++ unsigned int status;
++ struct spi_local *device = (struct spi_local *) &spi_dev[current_device];
++ struct spi_transfer_list *list = device->xfers;
++
++#ifdef DEBUG_SPI
++ printk("SPI interrupt %i\n", current_device);
++#endif
++
++ if (!list)
++ panic("at91_spi: spi_interrupt with a NULL transfer list");
++
++ status = at91_spi_read(AT91_SPI_SR) & at91_spi_read(AT91_SPI_IMR); /* read status */
++
++ dma_unmap_single(NULL, device->tx, list->txlen[list->curr], DMA_TO_DEVICE);
++ dma_unmap_single(NULL, device->rx, list->rxlen[list->curr], DMA_FROM_DEVICE);
++
++ device->tx = device->txnext; /* move next transfer to current transfer */
++ device->rx = device->rxnext;
++
++ list->curr = list->curr + 1;
++ if (list->curr == list->nr_transfers) { /* all transfers complete */
++ at91_spi_write(AT91_SPI_IDR, AT91_SPI_ENDRX); /* disable interrupt */
++
++ /* Disable transmitter and receiver */
++ at91_spi_write(ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
++
++ device->xfers = NULL;
++ complete(&transfer_complete);
++ }
++ else if (list->curr+1 == list->nr_transfers) { /* no more next transfers */
++ device->txnext = 0;
++ device->rxnext = 0;
++ at91_spi_write(ATMEL_PDC_TNCR, 0);
++ at91_spi_write(ATMEL_PDC_RNCR, 0);
++ }
++ else {
++ int i = (list->curr)+1;
++
++ /* If we are in 16-bit mode, we need to modify what we pass to the PDC */
++ int tx_size = (at91_spi_read(AT91_SPI_CSR(current_device)) & AT91_SPI_BITS_16) ? 2 : 1;
++
++ device->txnext = dma_map_single(NULL, list->tx[i], list->txlen[i], DMA_TO_DEVICE);
++ device->rxnext = dma_map_single(NULL, list->rx[i], list->rxlen[i], DMA_FROM_DEVICE);
++ at91_spi_write(ATMEL_PDC_TNPR, device->txnext);
++ at91_spi_write(ATMEL_PDC_RNPR, device->rxnext);
++ at91_spi_write(ATMEL_PDC_TNCR, list->txlen[i] / tx_size);
++ at91_spi_write(ATMEL_PDC_RNCR, list->rxlen[i] / tx_size);
++ }
++ return IRQ_HANDLED;
++}
++
++/* ......................................................................... */
++
++/*
++ * Initialize the SPI controller
++ */
++static int __init at91spi_probe(struct platform_device *pdev)
++{
++ int i;
++ unsigned long scbr;
++ struct resource *res;
++
++ init_MUTEX(&spi_lock);
++
++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!res)
++ return -ENXIO;
++
++ if (!request_mem_region(res->start, res->end - res->start + 1, "at91_spi"))
++ return -EBUSY;
++
++ spi_base = ioremap(res->start, res->end - res->start + 1);
++ if (!spi_base) {
++ release_mem_region(res->start, res->end - res->start + 1);
++ return -ENOMEM;
++ }
++
++ spi_clk = clk_get(NULL, "spi_clk");
++ if (IS_ERR(spi_clk)) {
++ printk(KERN_ERR "at91_spi: no clock defined\n");
++ iounmap(spi_base);
++ release_mem_region(res->start, res->end - res->start + 1);
++ return -ENODEV;
++ }
++
++ at91_spi_write(AT91_SPI_CR, AT91_SPI_SWRST); /* software reset of SPI controller */
++
++ /*
++ * Calculate the correct SPI baud-rate divisor.
++ */
++ scbr = clk_get_rate(spi_clk) / (2 * DEFAULT_SPI_CLK);
++ scbr = scbr + 1; /* round up */
++
++ printk(KERN_INFO "at91_spi: Baud rate set to %ld\n", clk_get_rate(spi_clk) / (2 * scbr));
++
++ /* Set Chip Select registers to good defaults */
++ for (i = 0; i < 4; i++) {
++ at91_spi_write(AT91_SPI_CSR(i), AT91_SPI_CPOL | AT91_SPI_BITS_8 | (16 << 16) | (scbr << 8));
++ }
++
++ at91_spi_write(ATMEL_PDC_PTCR, ATMEL_PDC_RXTDIS | ATMEL_PDC_TXTDIS);
++
++ memset(&spi_dev, 0, sizeof(spi_dev));
++ spi_dev[0].pcs = 0xE;
++ spi_dev[1].pcs = 0xD;
++ spi_dev[2].pcs = 0xB;
++ spi_dev[3].pcs = 0x7;
++
++ if (request_irq(AT91RM9200_ID_SPI, at91spi_interrupt, 0, "spi", NULL)) {
++ clk_put(spi_clk);
++ iounmap(spi_base);
++ release_mem_region(res->start, res->end - res->start + 1);
++ return -EBUSY;
++ }
++
++ at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIEN); /* Enable SPI */
++
++ return 0;
++}
++
++static int __devexit at91spi_remove(struct platform_device *pdev)
++{
++ struct resource *res;
++
++ at91_spi_write(AT91_SPI_CR, AT91_SPI_SPIDIS); /* Disable SPI */
++ clk_put(spi_clk);
++
++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ iounmap(spi_base);
++ release_mem_region(res->start, res->end - res->start + 1);
++
++ free_irq(AT91RM9200_ID_SPI, 0);
++ return 0;
++}
++
++static struct platform_driver at91spi_driver = {
++ .probe = at91spi_probe,
++ .remove = __devexit_p(at91spi_remove),
++ .driver = {
++ .name = "at91_spi",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init at91spi_init(void)
++{
++ return platform_driver_register(&at91spi_driver);
++}
++
++static void __exit at91spi_exit(void)
++{
++ platform_driver_unregister(&at91spi_driver);
++}
++
++EXPORT_SYMBOL(spi_access_bus);
++EXPORT_SYMBOL(spi_release_bus);
++EXPORT_SYMBOL(spi_transfer);
++
++module_init(at91spi_init);
++module_exit(at91spi_exit);
++
++MODULE_LICENSE("GPL")
++MODULE_AUTHOR("Andrew Victor")
++MODULE_DESCRIPTION("SPI driver for Atmel AT91RM9200")
+diff --git a/drivers/char/at91_spidev.c b/drivers/char/at91_spidev.c
+new file mode 100644
+index 0000000..4819b74
+--- /dev/null
++++ b/drivers/char/at91_spidev.c
+@@ -0,0 +1,233 @@
++/*
++ * User-space interface to the SPI bus on Atmel AT91RM9200
++ *
++ * Copyright (C) 2003 SAN People (Pty) Ltd
++ *
++ * Based on SPI driver by Rick Bronson
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/highmem.h>
++#include <linux/pagemap.h>
++#include <asm/arch/spi.h>
++
++#ifdef CONFIG_DEVFS_FS
++#include <linux/devfs_fs_kernel.h>
++#endif
++
++
++#undef DEBUG_SPIDEV
++
++/* ......................................................................... */
++
++/*
++ * Read or Write to SPI bus.
++ */
++static ssize_t spidev_rd_wr(struct file *file, char *buf, size_t count, loff_t *offset)
++{
++ unsigned int spi_device = (unsigned int) file->private_data;
++
++ struct mm_struct * mm;
++ struct page ** maplist;
++ struct spi_transfer_list* list;
++ int pgcount;
++
++ unsigned int ofs, pagelen;
++ int res, i, err;
++
++ if (!count) {
++ return 0;
++ }
++
++ list = kmalloc(sizeof(struct spi_transfer_list), GFP_KERNEL);
++ if (!list) {
++ return -ENOMEM;
++ }
++
++ mm = current->mm;
++
++ pgcount = ((unsigned long)buf+count+PAGE_SIZE-1)/PAGE_SIZE - (unsigned long)buf/PAGE_SIZE;
++
++ if (pgcount >= MAX_SPI_TRANSFERS) {
++ kfree(list);
++ return -EFBIG;
++ }
++
++ maplist = kmalloc (pgcount * sizeof (struct page *), GFP_KERNEL);
++
++ if (!maplist) {
++ kfree(list);
++ return -ENOMEM;
++ }
++ flush_cache_all();
++ down_read(&mm->mmap_sem);
++ err= get_user_pages(current, mm, (unsigned long)buf, pgcount, 1, 0, maplist, NULL);
++ up_read(&mm->mmap_sem);
++
++ if (err < 0) {
++ kfree(list);
++ kfree(maplist);
++ return err;
++ }
++ pgcount = err;
++
++#ifdef DEBUG_SPIDEV
++ printk("spidev_rd_rw: %i %i\n", count, pgcount);
++#endif
++
++ /* Set default return value = transfer length */
++ res = count;
++
++ /*
++ * At this point, the virtual area buf[0] .. buf[count-1] will have
++ * corresponding pages mapped in the physical memory and locked until
++ * we unmap the kiobuf. The pages cannot be swapped out or moved
++ * around.
++ */
++ ofs = (unsigned long) buf & (PAGE_SIZE -1);
++ pagelen = PAGE_SIZE - ofs;
++ if (count < pagelen)
++ pagelen = count;
++
++ for (i = 0; i < pgcount; i++) {
++ flush_dcache_page(maplist[i]);
++
++ list->tx[i] = list->rx[i] = page_address(maplist[i]) + ofs;
++ list->txlen[i] = list->rxlen[i] = pagelen;
++
++#ifdef DEBUG_SPIDEV
++ printk(" %i: %x (%i)\n", i, list->tx[i], list->txlen[i]);
++#endif
++
++ ofs = 0; /* all subsequent transfers start at beginning of a page */
++ count = count - pagelen;
++ pagelen = (count < PAGE_SIZE) ? count : PAGE_SIZE;
++ }
++ list->nr_transfers = pgcount;
++
++ /* Perform transfer on SPI bus */
++ spi_access_bus(spi_device);
++ spi_transfer(list);
++ spi_release_bus(spi_device);
++
++ while (pgcount--) {
++ page_cache_release (maplist[pgcount]);
++ }
++ flush_cache_all();
++
++ kfree(maplist);
++ kfree(list);
++
++ return res;
++}
++
++static int spidev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
++{
++ int spi_device = MINOR(inode->i_rdev);
++
++ if (spi_device >= NR_SPI_DEVICES)
++ return -ENODEV;
++
++ // TODO: This interface can be used to configure the SPI bus.
++ // Configurable options could include: Speed, Clock Polarity, Clock Phase
++
++ switch(cmd) {
++ default:
++ return -ENOIOCTLCMD;
++ }
++}
++
++/*
++ * Open the SPI device
++ */
++static int spidev_open(struct inode *inode, struct file *file)
++{
++ unsigned int spi_device = MINOR(inode->i_rdev);
++
++ if (spi_device >= NR_SPI_DEVICES)
++ return -ENODEV;
++
++ /*
++ * 'private_data' is actually a pointer, but we overload it with the
++ * value we want to store.
++ */
++ file->private_data = (void *)spi_device;
++
++ return 0;
++}
++
++/*
++ * Close the SPI device
++ */
++static int spidev_close(struct inode *inode, struct file *file)
++{
++ return 0;
++}
++
++/* ......................................................................... */
++
++static struct file_operations spidev_fops = {
++ .owner = THIS_MODULE,
++ .llseek = no_llseek,
++ .read = spidev_rd_wr,
++ .write = (int (*) (struct file *file, const char *buf, size_t count, loff_t *offset))spidev_rd_wr,
++ .ioctl = spidev_ioctl,
++ .open = spidev_open,
++ .release = spidev_close,
++};
++
++/*
++ * Install the SPI /dev interface driver
++ */
++static int __init at91_spidev_init(void)
++{
++#ifdef CONFIG_DEVFS_FS
++ int i;
++#endif
++
++ if (register_chrdev(SPI_MAJOR, "spi", &spidev_fops)) {
++ printk(KERN_ERR "at91_spidev: Unable to get major %d for SPI bus\n", SPI_MAJOR);
++ return -EIO;
++ }
++
++#ifdef CONFIG_DEVFS_FS
++ devfs_mk_dir("spi");
++ for (i = 0; i < NR_SPI_DEVICES; i++) {
++ devfs_mk_cdev(MKDEV(SPI_MAJOR, i), S_IFCHR | S_IRUSR | S_IWUSR, "spi/%d",i);
++ }
++#endif
++ printk(KERN_INFO "AT91 SPI driver loaded\n");
++
++ return 0;
++}
++
++/*
++ * Remove the SPI /dev interface driver
++ */
++static void __exit at91_spidev_exit(void)
++{
++#ifdef CONFIG_DEVFS_FS
++ int i;
++ for (i = 0; i < NR_SPI_DEVICES; i++) {
++ devfs_remove("spi/%d", i);
++ }
++
++ devfs_remove("spi");
++#endif
++
++ unregister_chrdev(SPI_MAJOR, "spi");
++}
++
++module_init(at91_spidev_init);
++module_exit(at91_spidev_exit);
++
++MODULE_LICENSE("GPL")
++MODULE_AUTHOR("Andrew Victor")
++MODULE_DESCRIPTION("SPI /dev interface for Atmel AT91RM9200")
+diff --git a/drivers/char/watchdog/at91sam9_wdt.c b/drivers/char/watchdog/at91sam9_wdt.c
+new file mode 100644
+index 0000000..43491fe
+--- /dev/null
++++ b/drivers/char/watchdog/at91sam9_wdt.c
+@@ -0,0 +1,258 @@
++/*
++ * Watchdog driver for Atmel AT91SAM9x processors.
++ *
++ * Copyright (C) 2007 Renaud CERRATO r.cerrato@til-technologies.fr
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++/*
++ * The Watchdog Timer Mode Register can be only written to once. If the
++ * timeout need to be set from Linux, be sure that the bootstrap or the
++ * bootloader doesn't write to this register.
++ */
++
++#include <linux/errno.h>
++#include <linux/fs.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/miscdevice.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/platform_device.h>
++#include <linux/types.h>
++#include <linux/watchdog.h>
++#include <linux/bitops.h>
++#include <linux/uaccess.h>
++
++#include <asm/arch/at91_wdt.h>
++
++
++#define WDT_MAX_TIME 16 /* seconds */
++
++static int wdt_timeout = -1; /* invalid */
++
++module_param(wdt_timeout, int, 0);
++MODULE_PARM_DESC(wdt_timeout, "Watchdog time in seconds. (default = disabled)");
++
++
++static unsigned long at91wdt_busy;
++
++/* ......................................................................... */
++
++/*
++ * Reload the watchdog timer. (ie, pat the watchdog)
++ */
++static void inline at91_wdt_reload(void)
++{
++ at91_sys_write(AT91_WDT_CR, AT91_WDT_KEY | AT91_WDT_WDRSTT);
++}
++
++/* ......................................................................... */
++
++/*
++ * Watchdog device is opened, and watchdog starts running.
++ */
++static int at91_wdt_open(struct inode *inode, struct file *file)
++{
++ if (test_and_set_bit(0, &at91wdt_busy))
++ return -EBUSY;
++
++ return nonseekable_open(inode, file);
++}
++
++/*
++ * Close the watchdog device.
++ */
++static int at91_wdt_close(struct inode *inode, struct file *file)
++{
++ clear_bit(0, &at91wdt_busy);
++ return 0;
++}
++
++/*
++ * Change the watchdog time interval.
++ */
++static int at91_wdt_settimeout(int new_time)
++{
++ unsigned int reg, mr;
++ /*
++ * All counting occurs at SLOW_CLOCK / 128 = 256 Hz
++ *
++ * Since WDV is a 12-bit counter, the maximum period is
++ * 4096 / 256 = 16 seconds.
++ */
++ if ((new_time <= 0) || (new_time > WDT_MAX_TIME))
++ return -EINVAL;
++
++ wdt_timeout = new_time;
++
++ /* Program the Watchdog */
++ reg = AT91_WDT_WDRSTEN /* causes watchdog reset */
++ | AT91_WDT_WDRPROC /* causes processor reset */
++ | AT91_WDT_WDDBGHLT /* disabled in debug mode */
++ | AT91_WDT_WDD /* restart at any time */
++ | (((wdt_timeout * 256) - 1) & AT91_WDT_WDV); /* timer value */
++ at91_sys_write(AT91_WDT_MR, reg);
++
++ /* Check if watchdog could be programmed */
++ mr = at91_sys_read(AT91_WDT_MR);
++ if (mr != reg) {
++ printk(KERN_ERR "at91sam9_wdt: Watchdog register already programmed.\n");
++ return -EIO;
++ }
++
++ at91_wdt_reload();
++
++ printk(KERN_INFO "AT91SAM9 Watchdog enabled (%d seconds, nowayout)\n", wdt_timeout);
++ return 0;
++}
++
++static struct watchdog_info at91_wdt_info = {
++ .identity = "at91sam9 watchdog",
++ .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING,
++};
++
++/*
++ * Handle commands from user-space.
++ */
++static int at91_wdt_ioctl(struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ void __user *argp = (void __user *)arg;
++ int __user *p = argp;
++ int new_value, err;
++
++ switch (cmd) {
++ case WDIOC_KEEPALIVE:
++ at91_wdt_reload(); /* pat the watchdog */
++ return 0;
++
++ case WDIOC_GETSUPPORT:
++ return copy_to_user(argp, &at91_wdt_info, sizeof(at91_wdt_info)) ? -EFAULT : 0;
++
++ case WDIOC_SETTIMEOUT:
++ if (get_user(new_value, p))
++ return -EFAULT;
++
++ err = at91_wdt_settimeout(new_value);
++ if (err)
++ return err;
++
++ return put_user(wdt_timeout, p); /* return current value */
++
++ case WDIOC_GETTIMEOUT:
++ return put_user(wdt_timeout, p);
++
++ case WDIOC_GETSTATUS:
++ case WDIOC_GETBOOTSTATUS:
++ return put_user(0, p);
++ }
++ return -ENOTTY;
++}
++
++/*
++ * Pat the watchdog whenever device is written to.
++ */
++static ssize_t at91_wdt_write(struct file *file, const char *data, size_t len, loff_t *ppos)
++{
++ at91_wdt_reload(); /* pat the watchdog */
++ return len;
++}
++
++/* ......................................................................... */
++
++static const struct file_operations at91wdt_fops = {
++ .owner = THIS_MODULE,
++ .llseek = no_llseek,
++ .ioctl = at91_wdt_ioctl,
++ .open = at91_wdt_open,
++ .release = at91_wdt_close,
++ .write = at91_wdt_write,
++};
++
++static struct miscdevice at91wdt_miscdev = {
++ .minor = WATCHDOG_MINOR,
++ .name = "watchdog",
++ .fops = &at91wdt_fops,
++};
++
++static int __init at91wdt_probe(struct platform_device *pdev)
++{
++ int res;
++
++ if (at91wdt_miscdev.parent)
++ return -EBUSY;
++ at91wdt_miscdev.parent = &pdev->dev;
++
++ res = misc_register(&at91wdt_miscdev);
++ if (res)
++ return res;
++
++ /* Set watchdog */
++ if (at91_wdt_settimeout(wdt_timeout) == -EINVAL) {
++ pr_info("at91sam9_wdt: invalid timeout (must be between 1 and %d)\n", WDT_MAX_TIME);
++ return 0;
++ }
++
++ return 0;
++}
++
++static int __exit at91wdt_remove(struct platform_device *pdev)
++{
++ int res;
++
++ res = misc_deregister(&at91wdt_miscdev);
++ if (!res)
++ at91wdt_miscdev.parent = NULL;
++
++ return res;
++}
++
++#ifdef CONFIG_PM
++
++static int at91wdt_suspend(struct platform_device *pdev, pm_message_t message)
++{
++ return 0;
++}
++
++static int at91wdt_resume(struct platform_device *pdev)
++{
++ return 0;
++}
++
++#else
++#define at91wdt_suspend NULL
++#define at91wdt_resume NULL
++#endif
++
++static struct platform_driver at91wdt_driver = {
++ .remove = __exit_p(at91wdt_remove),
++ .suspend = at91wdt_suspend,
++ .resume = at91wdt_resume,
++ .driver = {
++ .name = "at91_wdt",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init at91sam_wdt_init(void)
++{
++ return platform_driver_probe(&at91wdt_driver, at91wdt_probe);
++}
++
++static void __exit at91sam_wdt_exit(void)
++{
++ platform_driver_unregister(&at91wdt_driver);
++}
++
++module_init(at91sam_wdt_init);
++module_exit(at91sam_wdt_exit);
++
++MODULE_AUTHOR("Renaud CERRATO");
++MODULE_DESCRIPTION("Watchdog driver for Atmel AT91SAM9x processors");
++MODULE_LICENSE("GPL");
++MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
+diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
+index c466c6c..bebd065 100644
+--- a/drivers/i2c/busses/Kconfig
++++ b/drivers/i2c/busses/Kconfig
+@@ -88,6 +88,14 @@ config I2C_AT91
+ to support combined I2C messages. Use the i2c-gpio driver
+ unless your system can cope with those limitations.
+
++config I2C_AT91_CLOCKRATE
++ prompt "Atmel AT91 I2C/TWI clock-rate"
++ depends on I2C_AT91
++ int
++ default 100000
++ help
++ Set the AT91 I2C/TWI clock-rate.
++
+ config I2C_AU1550
+ tristate "Au1550/Au1200 SMBus interface"
+ depends on SOC_AU1550 || SOC_AU1200
+@@ -629,6 +637,14 @@ config I2C_VOODOO3
+ This driver can also be built as a module. If so, the module
+ will be called i2c-voodoo3.
+
++config I2C_PCA
++ tristate "PCA9564"
++ depends on I2C
++ select I2C_ALGOPCA
++ help
++ This driver support the Philips PCA 9564 Parallel bus to I2C
++ bus controller.
++
+ config I2C_PCA_ISA
+ tristate "PCA9564 on an ISA bus"
+ depends on ISA
+diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
+index 81d43c2..7498339 100644
+--- a/drivers/i2c/busses/Makefile
++++ b/drivers/i2c/busses/Makefile
+@@ -30,6 +30,7 @@ obj-$(CONFIG_I2C_OMAP) += i2c-omap.o
+ obj-$(CONFIG_I2C_PARPORT) += i2c-parport.o
+ obj-$(CONFIG_I2C_PARPORT_LIGHT) += i2c-parport-light.o
+ obj-$(CONFIG_I2C_PASEMI) += i2c-pasemi.o
++obj-$(CONFIG_I2C_PCA) += i2c-pca.o
+ obj-$(CONFIG_I2C_PCA_ISA) += i2c-pca-isa.o
+ obj-$(CONFIG_I2C_PIIX4) += i2c-piix4.o
+ obj-$(CONFIG_I2C_PMCMSP) += i2c-pmcmsp.o
+diff --git a/drivers/i2c/busses/i2c-at91.c b/drivers/i2c/busses/i2c-at91.c
+index 9c8b6d5..34e1f6e 100644
+--- a/drivers/i2c/busses/i2c-at91.c
++++ b/drivers/i2c/busses/i2c-at91.c
+@@ -31,8 +31,11 @@
+ #include <asm/arch/board.h>
+ #include <asm/arch/cpu.h>
+
+-#define TWI_CLOCK 100000 /* Hz. max 400 Kbits/sec */
+
++/* Clockrate is configurable - max 400 Kbits/sec */
++static unsigned int clockrate = CONFIG_I2C_AT91_CLOCKRATE;
++module_param(clockrate, uint, 0);
++MODULE_PARM_DESC(clockrate, "The TWI clockrate");
+
+ static struct clk *twi_clk;
+ static void __iomem *twi_base;
+@@ -53,7 +56,7 @@ static void __devinit at91_twi_hwinit(void)
+ at91_twi_write(AT91_TWI_CR, AT91_TWI_MSEN); /* Set Master mode */
+
+ /* Calcuate clock dividers */
+- cdiv = (clk_get_rate(twi_clk) / (2 * TWI_CLOCK)) - 3;
++ cdiv = (clk_get_rate(twi_clk) / (2 * clockrate)) - 3;
+ cdiv = cdiv + 1; /* round up */
+ ckdiv = 0;
+ while (cdiv > 255) {
+@@ -61,11 +64,12 @@ static void __devinit at91_twi_hwinit(void)
+ cdiv = cdiv >> 1;
+ }
+
+- if (cpu_is_at91rm9200()) { /* AT91RM9200 Errata #22 */
+- if (ckdiv > 5) {
+- printk(KERN_ERR "AT91 I2C: Invalid TWI_CLOCK value!\n");
+- ckdiv = 5;
+- }
++ if (cpu_is_at91rm9200() && (ckdiv > 5)) { /* AT91RM9200 Errata #22 */
++ printk(KERN_ERR "AT91 I2C: Invalid TWI clockrate!\n");
++ ckdiv = 5;
++ } else if (ckdiv > 7) {
++ printk(KERN_ERR "AT91 I2C: Invalid TWI clockrate!\n");
++ ckdiv = 7;
+ }
+
+ at91_twi_write(AT91_TWI_CWGR, (ckdiv << 16) | (cdiv << 8) | cdiv);
+diff --git a/drivers/i2c/busses/i2c-pca.c b/drivers/i2c/busses/i2c-pca.c
+new file mode 100644
+index 0000000..7379567
+--- /dev/null
++++ b/drivers/i2c/busses/i2c-pca.c
+@@ -0,0 +1,213 @@
++/*
++ * Platform driver for PCA9564 I2C bus controller.
++ *
++ * (C) 2006 Andrew Victor
++ *
++ * Based on i2c-pca-isa.c driver for PCA9564 on ISA boards
++ * Copyright (C) 2004 Arcom Control Systems
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/delay.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/wait.h>
++#include <linux/platform_device.h>
++
++#include <linux/i2c.h>
++#include <linux/i2c-algo-pca.h>
++
++#include <asm/io.h>
++
++#include "../algos/i2c-algo-pca.h"
++
++#define PCA_OWN_ADDRESS 0x55 /* our address for slave mode */
++#define PCA_CLOCK I2C_PCA_CON_59kHz
++
++//#define REG_SHIFT 2
++#define REG_SHIFT 0
++
++//#define DEBUG_IO
++
++#define PCA_IO_SIZE 4
++
++static void __iomem *base_addr;
++static int irq;
++static wait_queue_head_t pca_wait;
++
++static int pca_getown(struct i2c_algo_pca_data *adap)
++{
++ return PCA_OWN_ADDRESS;
++}
++
++static int pca_getclock(struct i2c_algo_pca_data *adap)
++{
++ return PCA_CLOCK;
++}
++
++static void pca_writebyte(struct i2c_algo_pca_data *adap, int reg, int val)
++{
++#ifdef DEBUG_IO
++ static char *names[] = { "T/O", "DAT", "ADR", "CON" };
++ printk("*** write %s at %#lx <= %#04x\n", names[reg], (unsigned long) base_addr+reg, val);
++#endif
++ udelay(1);
++ outb(val, base_addr + (reg << REG_SHIFT));
++}
++
++static int pca_readbyte(struct i2c_algo_pca_data *adap, int reg)
++{
++ int res;
++
++ udelay(1);
++ res = inb(base_addr + (reg << REG_SHIFT));
++#ifdef DEBUG_IO
++ {
++ static char *names[] = { "STA", "DAT", "ADR", "CON" };
++ printk("*** read %s => %#04x\n", names[reg], res);
++ }
++#endif
++ return res;
++}
++
++static int pca_waitforinterrupt(struct i2c_algo_pca_data *adap)
++{
++ int ret = 0;
++
++ if (irq > -1) {
++ ret = wait_event_interruptible(pca_wait,
++ pca_readbyte(adap, I2C_PCA_CON) & I2C_PCA_CON_SI);
++ } else {
++ while ((pca_readbyte(adap, I2C_PCA_CON) & I2C_PCA_CON_SI) == 0)
++ udelay(100);
++ }
++ return ret;
++}
++
++static irqreturn_t pca_handler(int this_irq, void *dev_id)
++{
++ wake_up_interruptible(&pca_wait);
++ return IRQ_HANDLED;
++}
++
++static struct i2c_algo_pca_data pca_i2c_data = {
++ .get_own = pca_getown,
++ .get_clock = pca_getclock,
++ .write_byte = pca_writebyte,
++ .read_byte = pca_readbyte,
++ .wait_for_interrupt = pca_waitforinterrupt,
++};
++
++static struct i2c_adapter pca_i2c_ops = {
++ .owner = THIS_MODULE,
++ .id = I2C_HW_A_PLAT,
++ .algo_data = &pca_i2c_data,
++ .name = "PCA9564",
++ .class = I2C_CLASS_HWMON,
++};
++
++static int __devinit pca_i2c_probe(struct platform_device *pdev)
++{
++ struct resource *res;
++
++ init_waitqueue_head(&pca_wait);
++
++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!res)
++ return -ENODEV;
++
++ if (!request_mem_region(res->start, PCA_IO_SIZE, "PCA9564"))
++ return -ENXIO;
++
++ base_addr = ioremap(res->start, PCA_IO_SIZE);
++ if (base_addr == NULL)
++ goto out_region;
++
++ irq = platform_get_irq(pdev, 0);
++ if (irq > -1) {
++ if (request_irq(irq, pca_handler, 0, "pca9564", NULL) < 0) {
++ printk(KERN_ERR "i2c-pca: Request irq%d failed\n", irq);
++ goto out_remap;
++ }
++ }
++
++ /* set up the driverfs linkage to our parent device */
++ pca_i2c_ops.dev.parent = &pdev->dev;
++
++ if (i2c_pca_add_bus(&pca_i2c_ops) < 0) {
++ printk(KERN_ERR "i2c-pca: Failed to add i2c bus\n");
++ goto out_irq;
++ }
++
++ return 0;
++
++ out_irq:
++ if (irq > -1)
++ free_irq(irq, &pca_i2c_ops);
++
++ out_remap:
++ iounmap(base_addr);
++
++ out_region:
++ release_mem_region(res->start, PCA_IO_SIZE);
++ return -ENODEV;
++}
++
++static int __devexit pca_i2c_remove(struct platform_device *pdev)
++{
++ struct resource *res;
++
++ i2c_del_adapter(&pca_i2c_ops);
++
++ if (irq > 0)
++ free_irq(irq, NULL);
++
++ iounmap(base_addr);
++
++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ release_mem_region(res->start, PCA_IO_SIZE);
++
++ return 0;
++}
++
++static struct platform_driver pca_i2c_driver = {
++ .probe = pca_i2c_probe,
++ .remove = __devexit_p(pca_i2c_remove),
++ .driver = {
++ .name = "pca9564",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init pca_i2c_init(void)
++{
++ return platform_driver_register(&pca_i2c_driver);
++}
++
++static void __exit pca_i2c_exit(void)
++{
++ platform_driver_unregister(&pca_i2c_driver);
++}
++
++module_init(pca_i2c_init);
++module_exit(pca_i2c_exit);
++
++MODULE_AUTHOR("Andrew Victor");
++MODULE_DESCRIPTION("PCA9564 platform driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/mtd/devices/Kconfig b/drivers/mtd/devices/Kconfig
+index 811d56f..098a540 100644
+--- a/drivers/mtd/devices/Kconfig
++++ b/drivers/mtd/devices/Kconfig
+@@ -270,5 +270,17 @@ config MTD_DOCPROBE_55AA
+ LinuxBIOS or if you need to recover a DiskOnChip Millennium on which
+ you have managed to wipe the first block.
+
+-endmenu
++config MTD_AT91_DATAFLASH
++ tristate "AT91RM9200 DataFlash AT45DBxxx (legacy driver)"
++ depends on MTD && ARCH_AT91RM9200 && AT91_SPI
++ help
++ This enables access to the DataFlash (AT45DBxxx) on the AT91RM9200.
++ If you have such a board, say 'Y'.
+
++config DATAFLASH_ALWAYS_ADD_DEVICE
++ bool "Register whole DataFlash device"
++ depends on MTD_AT91_DATAFLASH
++ help
++ Always add the whole DataFlash device when using MTD partitions.
++
++endmenu
+diff --git a/drivers/mtd/devices/Makefile b/drivers/mtd/devices/Makefile
+index 0f788d5..9e56ad7 100644
+--- a/drivers/mtd/devices/Makefile
++++ b/drivers/mtd/devices/Makefile
+@@ -17,3 +17,4 @@ obj-$(CONFIG_MTD_LART) += lart.o
+ obj-$(CONFIG_MTD_BLOCK2MTD) += block2mtd.o
+ obj-$(CONFIG_MTD_DATAFLASH) += mtd_dataflash.o
+ obj-$(CONFIG_MTD_M25P80) += m25p80.o
++obj-$(CONFIG_MTD_AT91_DATAFLASH)+= at91_dataflash.o
+diff --git a/drivers/mtd/devices/at91_dataflash.c b/drivers/mtd/devices/at91_dataflash.c
+new file mode 100644
+index 0000000..a724938
+--- /dev/null
++++ b/drivers/mtd/devices/at91_dataflash.c
+@@ -0,0 +1,673 @@
++/*
++ * Atmel DataFlash driver for Atmel AT91RM9200 (Thunder)
++ *
++ * Copyright (C) SAN People (Pty) Ltd
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++*/
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/pci.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++
++#include <asm/mach-types.h>
++
++#include <asm/arch/spi.h>
++
++
++#undef DEBUG_DATAFLASH
++
++#define DATAFLASH_MAX_DEVICES 4 /* max number of dataflash devices */
++
++#define OP_READ_CONTINUOUS 0xE8
++#define OP_READ_PAGE 0xD2
++#define OP_READ_BUFFER1 0xD4
++#define OP_READ_BUFFER2 0xD6
++#define OP_READ_STATUS 0xD7
++
++#define OP_ERASE_PAGE 0x81
++#define OP_ERASE_BLOCK 0x50
++
++#define OP_TRANSFER_BUF1 0x53
++#define OP_TRANSFER_BUF2 0x55
++#define OP_COMPARE_BUF1 0x60
++#define OP_COMPARE_BUF2 0x61
++
++#define OP_PROGRAM_VIA_BUF1 0x82
++#define OP_PROGRAM_VIA_BUF2 0x85
++
++struct dataflash_local
++{
++ int spi; /* SPI chip-select number */
++
++ unsigned int page_size; /* number of bytes per page */
++ unsigned short page_offset; /* page offset in flash address */
++};
++
++
++/* Detected DataFlash devices */
++static struct mtd_info* mtd_devices[DATAFLASH_MAX_DEVICES];
++static int nr_devices = 0;
++
++/* ......................................................................... */
++
++#ifdef CONFIG_MTD_PARTITIONS
++
++static struct mtd_partition static_partitions_2M[] =
++{
++ {
++ .name = "bootloader",
++ .offset = 0,
++ .size = 1 * 32 * 8 * 528, /* 1st sector = 32 blocks * 8 pages * 528 bytes */
++ .mask_flags = MTD_WRITEABLE, /* read-only */
++ },
++ {
++ .name = "kernel",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 6 * 32 * 8 * 528, /* 6 sectors */
++ },
++ {
++ .name = "filesystem",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = MTDPART_SIZ_FULL, /* rest = 9 sectors */
++ }
++};
++
++static struct mtd_partition static_partitions_4M[] =
++{
++ {
++ .name = "bootloader",
++ .offset = 0,
++ .size = 1 * 64 * 8 * 528, /* 1st sector = 64 blocks * 8 pages * 528 bytes */
++ .mask_flags = MTD_WRITEABLE, /* read-only */
++ },
++ {
++ .name = "kernel",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 4 * 64 * 8 * 528, /* 4 sectors */
++ },
++ {
++ .name = "filesystem",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = MTDPART_SIZ_FULL, /* rest = 11 sectors */
++ }
++};
++
++#if defined(CONFIG_MACH_KAFA)
++static struct mtd_partition static_partitions_8M[] =
++{
++ {
++ name: "romboot",
++ offset: 0,
++ size: 16 * 1056, /* 160 Kb */
++ mask_flags: MTD_WRITEABLE, /* read-only */
++ },
++ {
++ name: "uboot",
++ offset: MTDPART_OFS_APPEND, /* Sperry, NXTBLK is broken */
++ size: 128 * 1056, /* 1 MB */
++ },
++ {
++ name: "kernel",
++ offset: MTDPART_OFS_APPEND, /* Sperry, NXTBLK is broken */
++ size: 1024 * 1056, /* 1 MB */
++ },
++ {
++ name: "filesystem",
++ offset: MTDPART_OFS_APPEND, /* Sperry, NXTBLK is broken */
++ size: MTDPART_SIZ_FULL,
++ }
++};
++
++#elif defined(CONFIG_MACH_MULTMDP)
++
++static struct mtd_partition static_partitions_8M[] =
++{
++ {
++ .name = "bootloader",
++ .offset = 0,
++ .size = 12 * 1056, /* 1st sector = 32 blocks * 8 pages * 1056 bytes */
++ .mask_flags = MTD_WRITEABLE, /* read-only */
++ },
++ {
++ .name = "configuration",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 20 * 1056,
++ },
++ {
++ .name = "kernel",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 1520 * 1056,
++ },
++ {
++ .name = "filesystem",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = MTDPART_SIZ_FULL,
++ }
++};
++
++#else
++
++static struct mtd_partition static_partitions_8M[] =
++{
++ {
++ .name = "bootloader",
++ .offset = 0,
++ .size = 1 * 32 * 8 * 1056, /* 1st sector = 32 blocks * 8 pages * 1056 bytes */
++ .mask_flags = MTD_WRITEABLE, /* read-only */
++ },
++ {
++ .name = "kernel",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = 5 * 32 * 8 * 1056, /* 5 sectors */
++ },
++ {
++ .name = "filesystem",
++ .offset = MTDPART_OFS_NXTBLK,
++ .size = MTDPART_SIZ_FULL, /* rest = 26 sectors */
++ }
++};
++#endif
++
++static const char *part_probes[] = { "cmdlinepart", NULL, };
++
++#endif
++
++/* ......................................................................... */
++
++/* Allocate a single SPI transfer descriptor. We're assuming that if multiple
++ SPI transfers occur at the same time, spi_access_bus() will serialize them.
++ If this is not valid, then either (i) each dataflash 'priv' structure
++ needs it's own transfer descriptor, (ii) we lock this one, or (iii) use
++ another mechanism. */
++static struct spi_transfer_list* spi_transfer_desc;
++
++/*
++ * Perform a SPI transfer to access the DataFlash device.
++ */
++static int do_spi_transfer(int nr, char* tx, int tx_len, char* rx, int rx_len,
++ char* txnext, int txnext_len, char* rxnext, int rxnext_len)
++{
++ struct spi_transfer_list* list = spi_transfer_desc;
++
++ list->tx[0] = tx; list->txlen[0] = tx_len;
++ list->rx[0] = rx; list->rxlen[0] = rx_len;
++
++ list->tx[1] = txnext; list->txlen[1] = txnext_len;
++ list->rx[1] = rxnext; list->rxlen[1] = rxnext_len;
++
++ list->nr_transfers = nr;
++
++ return spi_transfer(list);
++}
++
++/* ......................................................................... */
++
++/*
++ * Poll the DataFlash device until it is READY.
++ */
++static void at91_dataflash_waitready(void)
++{
++ char* command = kmalloc(2, GFP_KERNEL);
++
++ if (!command)
++ return;
++
++ do {
++ command[0] = OP_READ_STATUS;
++ command[1] = 0;
++
++ do_spi_transfer(1, command, 2, command, 2, NULL, 0, NULL, 0);
++ } while ((command[1] & 0x80) == 0);
++
++ kfree(command);
++}
++
++/*
++ * Return the status of the DataFlash device.
++ */
++static unsigned short at91_dataflash_status(void)
++{
++ unsigned short status;
++ char* command = kmalloc(2, GFP_KERNEL);
++
++ if (!command)
++ return 0;
++
++ command[0] = OP_READ_STATUS;
++ command[1] = 0;
++
++ do_spi_transfer(1, command, 2, command, 2, NULL, 0, NULL, 0);
++ status = command[1];
++
++ kfree(command);
++ return status;
++}
++
++/* ......................................................................... */
++
++/*
++ * Erase blocks of flash.
++ */
++static int at91_dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
++{
++ struct dataflash_local *priv = (struct dataflash_local *) mtd->priv;
++ unsigned int pageaddr;
++ char* command;
++
++#ifdef DEBUG_DATAFLASH
++ printk("dataflash_erase: addr=%i len=%i\n", instr->addr, instr->len);
++#endif
++
++ /* Sanity checks */
++ if (instr->addr + instr->len > mtd->size)
++ return -EINVAL;
++ if ((instr->len % mtd->erasesize != 0) || (instr->len % priv->page_size != 0))
++ return -EINVAL;
++ if ((instr->addr % priv->page_size) != 0)
++ return -EINVAL;
++
++ command = kmalloc(4, GFP_KERNEL);
++ if (!command)
++ return -ENOMEM;
++
++ while (instr->len > 0) {
++ /* Calculate flash page address */
++ pageaddr = (instr->addr / priv->page_size) << priv->page_offset;
++
++ command[0] = OP_ERASE_PAGE;
++ command[1] = (pageaddr & 0x00FF0000) >> 16;
++ command[2] = (pageaddr & 0x0000FF00) >> 8;
++ command[3] = 0;
++#ifdef DEBUG_DATAFLASH
++ printk("ERASE: (%x) %x %x %x [%i]\n", command[0], command[1], command[2], command[3], pageaddr);
++#endif
++
++ /* Send command to SPI device */
++ spi_access_bus(priv->spi);
++ do_spi_transfer(1, command, 4, command, 4, NULL, 0, NULL, 0);
++
++ at91_dataflash_waitready(); /* poll status until ready */
++ spi_release_bus(priv->spi);
++
++ instr->addr += priv->page_size; /* next page */
++ instr->len -= priv->page_size;
++ }
++
++ kfree(command);
++
++ /* Inform MTD subsystem that erase is complete */
++ instr->state = MTD_ERASE_DONE;
++ if (instr->callback)
++ instr->callback(instr);
++
++ return 0;
++}
++
++/*
++ * Read from the DataFlash device.
++ * from : Start offset in flash device
++ * len : Amount to read
++ * retlen : About of data actually read
++ * buf : Buffer containing the data
++ */
++static int at91_dataflash_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
++{
++ struct dataflash_local *priv = (struct dataflash_local *) mtd->priv;
++ unsigned int addr;
++ char* command;
++
++#ifdef DEBUG_DATAFLASH
++ printk("dataflash_read: %lli .. %lli\n", from, from+len);
++#endif
++
++ *retlen = 0;
++
++ /* Sanity checks */
++ if (!len)
++ return 0;
++ if (from + len > mtd->size)
++ return -EINVAL;
++
++ /* Calculate flash page/byte address */
++ addr = (((unsigned)from / priv->page_size) << priv->page_offset) + ((unsigned)from % priv->page_size);
++
++ command = kmalloc(8, GFP_KERNEL);
++ if (!command)
++ return -ENOMEM;
++
++ command[0] = OP_READ_CONTINUOUS;
++ command[1] = (addr & 0x00FF0000) >> 16;
++ command[2] = (addr & 0x0000FF00) >> 8;
++ command[3] = (addr & 0x000000FF);
++#ifdef DEBUG_DATAFLASH
++ printk("READ: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
++#endif
++
++ /* Send command to SPI device */
++ spi_access_bus(priv->spi);
++ do_spi_transfer(2, command, 8, command, 8, buf, len, buf, len);
++ spi_release_bus(priv->spi);
++
++ *retlen = len;
++ kfree(command);
++ return 0;
++}
++
++/*
++ * Write to the DataFlash device.
++ * to : Start offset in flash device
++ * len : Amount to write
++ * retlen : Amount of data actually written
++ * buf : Buffer containing the data
++ */
++static int at91_dataflash_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)
++{
++ struct dataflash_local *priv = (struct dataflash_local *) mtd->priv;
++ unsigned int pageaddr, addr, offset, writelen;
++ size_t remaining;
++ u_char *writebuf;
++ unsigned short status;
++ int res = 0;
++ char* command;
++ char* tmpbuf = NULL;
++
++#ifdef DEBUG_DATAFLASH
++ printk("dataflash_write: %lli .. %lli\n", to, to+len);
++#endif
++
++ *retlen = 0;
++
++ /* Sanity checks */
++ if (!len)
++ return 0;
++ if (to + len > mtd->size)
++ return -EINVAL;
++
++ command = kmalloc(4, GFP_KERNEL);
++ if (!command)
++ return -ENOMEM;
++
++ pageaddr = ((unsigned)to / priv->page_size);
++ offset = ((unsigned)to % priv->page_size);
++ if (offset + len > priv->page_size)
++ writelen = priv->page_size - offset;
++ else
++ writelen = len;
++ writebuf = (u_char *)buf;
++ remaining = len;
++
++ /* Allocate temporary buffer */
++ tmpbuf = kmalloc(priv->page_size, GFP_KERNEL);
++ if (!tmpbuf) {
++ kfree(command);
++ return -ENOMEM;
++ }
++
++ /* Gain access to the SPI bus */
++ spi_access_bus(priv->spi);
++
++ while (remaining > 0) {
++#ifdef DEBUG_DATAFLASH
++ printk("write @ %i:%i len=%i\n", pageaddr, offset, writelen);
++#endif
++
++ /* (1) Transfer to Buffer1 */
++ if (writelen != priv->page_size) {
++ addr = pageaddr << priv->page_offset;
++ command[0] = OP_TRANSFER_BUF1;
++ command[1] = (addr & 0x00FF0000) >> 16;
++ command[2] = (addr & 0x0000FF00) >> 8;
++ command[3] = 0;
++#ifdef DEBUG_DATAFLASH
++ printk("TRANSFER: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
++#endif
++ do_spi_transfer(1, command, 4, command, 4, NULL, 0, NULL, 0);
++ at91_dataflash_waitready();
++ }
++
++ /* (2) Program via Buffer1 */
++ addr = (pageaddr << priv->page_offset) + offset;
++ command[0] = OP_PROGRAM_VIA_BUF1;
++ command[1] = (addr & 0x00FF0000) >> 16;
++ command[2] = (addr & 0x0000FF00) >> 8;
++ command[3] = (addr & 0x000000FF);
++#ifdef DEBUG_DATAFLASH
++ printk("PROGRAM: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
++#endif
++ do_spi_transfer(2, command, 4, command, 4, writebuf, writelen, tmpbuf, writelen);
++ at91_dataflash_waitready();
++
++ /* (3) Compare to Buffer1 */
++ addr = pageaddr << priv->page_offset;
++ command[0] = OP_COMPARE_BUF1;
++ command[1] = (addr & 0x00FF0000) >> 16;
++ command[2] = (addr & 0x0000FF00) >> 8;
++ command[3] = 0;
++#ifdef DEBUG_DATAFLASH
++ printk("COMPARE: (%x) %x %x %x\n", command[0], command[1], command[2], command[3]);
++#endif
++ do_spi_transfer(1, command, 4, command, 4, NULL, 0, NULL, 0);
++ at91_dataflash_waitready();
++
++ /* Get result of the compare operation */
++ status = at91_dataflash_status();
++ if (status & 0x40) {
++ printk("at91_dataflash: Write error on page %i\n", pageaddr);
++ remaining = 0;
++ writelen = 0;
++ res = -EIO;
++ }
++
++ remaining = remaining - writelen;
++ pageaddr++;
++ offset = 0;
++ writebuf += writelen;
++ *retlen += writelen;
++
++ if (remaining > priv->page_size)
++ writelen = priv->page_size;
++ else
++ writelen = remaining;
++ }
++
++ /* Release SPI bus */
++ spi_release_bus(priv->spi);
++
++ kfree(tmpbuf);
++ kfree(command);
++ return res;
++}
++
++/* ......................................................................... */
++
++/*
++ * Initialize and register DataFlash device with MTD subsystem.
++ */
++static int __init add_dataflash(int channel, char *name, int IDsize,
++ int nr_pages, int pagesize, int pageoffset)
++{
++ struct mtd_info *device;
++ struct dataflash_local *priv;
++#ifdef CONFIG_MTD_PARTITIONS
++ struct mtd_partition *mtd_parts = 0;
++ int mtd_parts_nr = 0;
++#endif
++
++ if (nr_devices >= DATAFLASH_MAX_DEVICES) {
++ printk(KERN_ERR "at91_dataflash: Too many devices detected\n");
++ return 0;
++ }
++
++ device = kmalloc(sizeof(struct mtd_info) + strlen(name) + 8, GFP_KERNEL);
++ if (!device)
++ return -ENOMEM;
++ memset(device, 0, sizeof(struct mtd_info));
++
++ device->name = (char *)&device[1];
++ sprintf(device->name, "%s.spi%d", name, channel);
++ device->size = nr_pages * pagesize;
++ device->erasesize = pagesize;
++ device->writesize = pagesize;
++ device->owner = THIS_MODULE;
++ device->type = MTD_DATAFLASH;
++ device->flags = MTD_WRITEABLE;
++ device->erase = at91_dataflash_erase;
++ device->read = at91_dataflash_read;
++ device->write = at91_dataflash_write;
++
++ priv = (struct dataflash_local *) kmalloc(sizeof(struct dataflash_local), GFP_KERNEL);
++ if (!priv) {
++ kfree(device);
++ return -ENOMEM;
++ }
++ memset(priv, 0, sizeof(struct dataflash_local));
++
++ priv->spi = channel;
++ priv->page_size = pagesize;
++ priv->page_offset = pageoffset;
++ device->priv = priv;
++
++ mtd_devices[nr_devices] = device;
++ nr_devices++;
++ printk("at91_dataflash: %s detected [spi%i] (%i bytes)\n", name, channel, device->size);
++
++#ifdef CONFIG_MTD_PARTITIONS
++#ifdef CONFIG_MTD_CMDLINE_PARTS
++ mtd_parts_nr = parse_mtd_partitions(device, part_probes, &mtd_parts, 0);
++#endif
++ if (mtd_parts_nr <= 0) {
++ switch (IDsize) {
++ case SZ_2M:
++ mtd_parts = static_partitions_2M;
++ mtd_parts_nr = ARRAY_SIZE(static_partitions_2M);
++ break;
++ case SZ_4M:
++ mtd_parts = static_partitions_4M;
++ mtd_parts_nr = ARRAY_SIZE(static_partitions_4M);
++ break;
++ case SZ_8M:
++ mtd_parts = static_partitions_8M;
++ mtd_parts_nr = ARRAY_SIZE(static_partitions_8M);
++ break;
++ }
++ }
++
++ if (mtd_parts_nr > 0) {
++#ifdef CONFIG_DATAFLASH_ALWAYS_ADD_DEVICE
++ add_mtd_device(device);
++#endif
++ return add_mtd_partitions(device, mtd_parts, mtd_parts_nr);
++ }
++#endif
++ return add_mtd_device(device); /* add whole device */
++}
++
++/*
++ * Detect and initialize DataFlash device connected to specified SPI channel.
++ *
++ * Device Density ID code Nr Pages Page Size Page offset
++ * AT45DB011B 1Mbit (128K) xx0011xx (0x0c) 512 264 9
++ * AT45DB021B 2Mbit (256K) xx0101xx (0x14) 1025 264 9
++ * AT45DB041B 4Mbit (512K) xx0111xx (0x1c) 2048 264 9
++ * AT45DB081B 8Mbit (1M) xx1001xx (0x24) 4096 264 9
++ * AT45DB0161B 16Mbit (2M) xx1011xx (0x2c) 4096 528 10
++ * AT45DB0321B 32Mbit (4M) xx1101xx (0x34) 8192 528 10
++ * AT45DB0642 64Mbit (8M) xx1111xx (0x3c) 8192 1056 11
++ * AT45DB1282 128Mbit (16M) xx0100xx (0x10) 16384 1056 11
++ */
++static int __init at91_dataflash_detect(int channel)
++{
++ int res = 0;
++ unsigned short status;
++
++ spi_access_bus(channel);
++ status = at91_dataflash_status();
++ spi_release_bus(channel);
++ if (status != 0xff) { /* no dataflash device there */
++ switch (status & 0x3c) {
++ case 0x0c: /* 0 0 1 1 */
++ res = add_dataflash(channel, "AT45DB011B", SZ_128K, 512, 264, 9);
++ break;
++ case 0x14: /* 0 1 0 1 */
++ res = add_dataflash(channel, "AT45DB021B", SZ_256K, 1025, 264, 9);
++ break;
++ case 0x1c: /* 0 1 1 1 */
++ res = add_dataflash(channel, "AT45DB041B", SZ_512K, 2048, 264, 9);
++ break;
++ case 0x24: /* 1 0 0 1 */
++ res = add_dataflash(channel, "AT45DB081B", SZ_1M, 4096, 264, 9);
++ break;
++ case 0x2c: /* 1 0 1 1 */
++ res = add_dataflash(channel, "AT45DB161B", SZ_2M, 4096, 528, 10);
++ break;
++ case 0x34: /* 1 1 0 1 */
++ res = add_dataflash(channel, "AT45DB321B", SZ_4M, 8192, 528, 10);
++ break;
++ case 0x3c: /* 1 1 1 1 */
++ res = add_dataflash(channel, "AT45DB642", SZ_8M, 8192, 1056, 11);
++ break;
++// Currently unsupported since Atmel removed the "Main Memory Program via Buffer" commands.
++// case 0x10: /* 0 1 0 0 */
++// res = add_dataflash(channel, "AT45DB1282", SZ_16M, 16384, 1056, 11);
++// break;
++ default:
++ printk(KERN_ERR "at91_dataflash: Unknown device (%x)\n", status & 0x3c);
++ }
++ }
++
++ return res;
++}
++
++static int __init at91_dataflash_init(void)
++{
++ spi_transfer_desc = kmalloc(sizeof(struct spi_transfer_list), GFP_KERNEL);
++ if (!spi_transfer_desc)
++ return -ENOMEM;
++
++ /* DataFlash (SPI chip select 0) */
++ at91_dataflash_detect(0);
++
++ if (machine_is_sweda_tms())
++ at91_dataflash_detect(1); /* DataFlash device (SPI chip select 1) */
++
++#ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
++ /* DataFlash card (SPI chip select 3) */
++ at91_dataflash_detect(3);
++#endif
++
++ return 0;
++}
++
++static void __exit at91_dataflash_exit(void)
++{
++ int i;
++
++ for (i = 0; i < DATAFLASH_MAX_DEVICES; i++) {
++ if (mtd_devices[i]) {
++#ifdef CONFIG_MTD_PARTITIONS
++ del_mtd_partitions(mtd_devices[i]);
++#else
++ del_mtd_device(mtd_devices[i]);
++#endif
++ kfree(mtd_devices[i]->priv);
++ kfree(mtd_devices[i]);
++ }
++ }
++ nr_devices = 0;
++ kfree(spi_transfer_desc);
++}
++
++
++module_init(at91_dataflash_init);
++module_exit(at91_dataflash_exit);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Andrew Victor");
++MODULE_DESCRIPTION("DataFlash driver for Atmel AT91RM9200");
+diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c
+index a5ed6d2..b35e481 100644
+--- a/drivers/mtd/devices/mtd_dataflash.c
++++ b/drivers/mtd/devices/mtd_dataflash.c
+@@ -420,7 +420,7 @@ static int dataflash_write(struct mtd_info *mtd, loff_t to, size_t len,
+ status = dataflash_waitready(priv->spi);
+
+ /* Check result of the compare operation */
+- if ((status & (1 << 6)) == 1) {
++ if (status & (1 << 6)) {
+ printk(KERN_ERR "%s: compare page %u, err %d\n",
+ spi->dev.bus_id, pageaddr, status);
+ remaining = 0;
+diff --git a/drivers/net/arm/at91_ether.c b/drivers/net/arm/at91_ether.c
+index 25b114a..68771b3 100644
+--- a/drivers/net/arm/at91_ether.c
++++ b/drivers/net/arm/at91_ether.c
+@@ -894,6 +894,7 @@ static void at91ether_rx(struct net_device *dev)
+ skb_reserve(skb, 2);
+ memcpy(skb_put(skb, pktlen), p_recv, pktlen);
+
++ skb->dev = dev;
+ skb->protocol = eth_type_trans(skb, dev);
+ dev->last_rx = jiffies;
+ lp->stats.rx_bytes += pktlen;
+@@ -980,14 +981,24 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
+ unsigned int val;
+ int res;
+ DECLARE_MAC_BUF(mac);
++ struct resource *res;
++ int ret;
+
+ dev = alloc_etherdev(sizeof(struct at91_private));
+ if (!dev)
+ return -ENOMEM;
+
++ /* Get I/O base address and IRQ */
++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!res) {
++ free_netdev(dev);
++ return -ENODEV;
++ }
+ dev->base_addr = AT91_VA_BASE_EMAC;
+ dev->irq = AT91RM9200_ID_EMAC;
+
++ SET_MODULE_OWNER(dev);
++
+ /* Install the interrupt handler */
+ if (request_irq(dev->irq, at91ether_interrupt, 0, dev->name, dev)) {
+ free_netdev(dev);
+@@ -1043,7 +1054,9 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
+ } else if (machine_is_csb337()) {
+ /* mix link activity status into LED2 link state */
+ write_phy(phy_address, MII_LEDCTRL_REG, 0x0d22);
+- }
++ } else if (machine_is_ecbat91())
++ write_phy(phy_address, MII_LEDCTRL_REG, 0x156A);
++
+ disable_mdi();
+ spin_unlock_irq(&lp->lock);
+
+@@ -1058,12 +1071,12 @@ static int __init at91ether_setup(unsigned long phy_type, unsigned short phy_add
+ lp->phy_address = phy_address; /* MDI address of PHY */
+
+ /* Register the network interface */
+- res = register_netdev(dev);
+- if (res) {
++ ret = register_netdev(dev);
++ if (ret) {
+ free_irq(dev->irq, dev);
+ free_netdev(dev);
+ dma_free_coherent(NULL, sizeof(struct recv_desc_bufs), lp->dlist, (dma_addr_t)lp->dlist_phys);
+- return res;
++ return ret;
+ }
+
+ /* Determine current link speed */
+diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
+index 1e6715e..641ea18 100644
+--- a/drivers/rtc/Kconfig
++++ b/drivers/rtc/Kconfig
+@@ -445,6 +445,12 @@ config RTC_DRV_AT91RM9200
+ help
+ Driver for the Atmel AT91RM9200's internal RTC (Realtime Clock).
+
++config RTC_DRV_AT91SAM9
++ tristate "AT91SAM926X"
++ depends on ARCH_AT91 && !ARCH_AT91RM9200
++ help
++ Driver for the Atmel AT91SAM9x's internal RTC (Realtime Clock).
++
+ config RTC_DRV_BFIN
+ tristate "Blackfin On-Chip RTC"
+ depends on BLACKFIN
+diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
+index 465db4d..e075c5a 100644
+--- a/drivers/rtc/Makefile
++++ b/drivers/rtc/Makefile
+@@ -19,6 +19,7 @@ rtc-core-$(CONFIG_RTC_INTF_SYSFS) += rtc-sysfs.o
+
+ obj-$(CONFIG_RTC_DRV_AT32AP700X)+= rtc-at32ap700x.o
+ obj-$(CONFIG_RTC_DRV_AT91RM9200)+= rtc-at91rm9200.o
++obj-$(CONFIG_RTC_DRV_AT91SAM9) += rtc-at91sam9.o
+ obj-$(CONFIG_RTC_DRV_BFIN) += rtc-bfin.o
+ obj-$(CONFIG_RTC_DRV_CMOS) += rtc-cmos.o
+ obj-$(CONFIG_RTC_DRV_DS1216) += rtc-ds1216.o
+diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
+new file mode 100644
+index 0000000..020e579
+--- /dev/null
++++ b/drivers/rtc/rtc-at91sam9.c
+@@ -0,0 +1,437 @@
++/*
++ * Real Time Clock driver for Atmel AT91SAM926x family of SoC
++ *
++ * Uses the RTT peripheral of the AT91SAM926x and a 32 bit word
++ * of the General Purpose Backup Registers (GPBR).
++ *
++ * (C) 2007 Michel Benoit
++ *
++ * Based on rtc-at91rm9200.c by Rick Bronson
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/platform_device.h>
++#include <linux/time.h>
++#include <linux/rtc.h>
++#include <linux/interrupt.h>
++#include <linux/ioctl.h>
++
++#include <asm/mach/time.h>
++#include <asm/arch/board.h>
++#include <asm/arch/at91_rtt.h>
++
++#define AT91_RTC_FREQ 1
++#define ALARM_DISABLED 0xFFFFFFFF
++
++#define RTC_GPBR_REG 0
++
++/*
++ * Read current time and date in RTC
++ */
++static int at91_rtc_readtime(struct device *dev, struct rtc_time *tm)
++{
++ unsigned long secs, secs2;
++ unsigned long base;
++
++ /* retrieve time base from battery backup register */
++ base = at91_sys_read(AT91_GPBR + RTC_GPBR_REG);
++
++ /* read the second counter twice as it can be about to change */
++ secs = at91_sys_read(AT91_RTT_VR);
++ secs2 = at91_sys_read(AT91_RTT_VR);
++ if (secs != secs2)
++ secs = at91_sys_read(AT91_RTT_VR);
++
++ rtc_time_to_tm(base + secs, tm);
++
++ pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
++ 1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
++ tm->tm_hour, tm->tm_min, tm->tm_sec);
++
++ return 0;
++}
++
++/*
++ * Set current time and date in RTC
++ */
++static int at91_rtc_settime(struct device *dev, struct rtc_time *tm)
++{
++ int err;
++ unsigned long base, alarm, mr;
++ unsigned long secs;
++
++ pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
++ 1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
++ tm->tm_hour, tm->tm_min, tm->tm_sec);
++
++ err = rtc_tm_to_time(tm, &secs);
++ if (err != 0)
++ return err;
++
++ mr = at91_sys_read(AT91_RTT_MR);
++
++ /* disable interrupts */
++ at91_sys_write(AT91_RTT_MR, mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN));
++
++ /* read current time base */
++ base = at91_sys_read(AT91_GPBR + RTC_GPBR_REG);
++
++ /* store the new base time in a battery backup register */
++ secs += 1;
++ at91_sys_write(AT91_GPBR + RTC_GPBR_REG, secs);
++
++ /* adjust the alarm time for the new base */
++ alarm = at91_sys_read(AT91_RTT_AR);
++ if (alarm != ALARM_DISABLED) {
++ if (base > secs) {
++ /* time jumped backwards, increase time until alarm */
++ alarm += (base - secs);
++ } else if ((alarm + base) > secs) {
++ /* time jumped forwards, decrease time until alarm */
++ alarm -= (secs - base);
++ } else {
++ /* time jumped past the alarm, disable alarm */
++ alarm = ALARM_DISABLED;
++ }
++ at91_sys_write(AT91_RTT_AR, alarm);
++ }
++
++ /* reset the timer, and re-enable interrupts */
++ at91_sys_write(AT91_RTT_MR, mr | AT91_RTT_RTTRST);
++
++ return 0;
++}
++
++/*
++ * Read alarm time and date in RTC
++ */
++static int at91_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
++{
++ struct rtc_time *tm = &alrm->time;
++ unsigned long base;
++ unsigned long alarm;
++
++ alarm = at91_sys_read(AT91_RTT_AR);
++
++ if (alarm == ALARM_DISABLED)
++ memset(tm, 0, sizeof(tm));
++ else {
++ base = at91_sys_read(AT91_GPBR + RTC_GPBR_REG);
++
++ rtc_time_to_tm(base + alarm, tm);
++
++ pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
++ 1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
++ tm->tm_hour, tm->tm_min, tm->tm_sec);
++ }
++
++ return 0;
++}
++
++/*
++ * Set alarm time and date in RTC
++ */
++static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
++{
++ struct rtc_time *tm = &alrm->time;
++ unsigned long secs;
++ unsigned long base;
++ int err;
++
++ err = rtc_tm_to_time(tm, &secs);
++ if (err != 0)
++ return err;
++
++ base = at91_sys_read(AT91_GPBR + RTC_GPBR_REG);
++ if (base == 0) {
++ /* time is not set */
++ return -1;
++ }
++
++ if (secs <= base) {
++ /* alarm is before base time, disable alarm */
++ at91_sys_write(AT91_RTT_AR, ALARM_DISABLED);
++ return -1;
++ }
++
++ at91_sys_write(AT91_RTT_AR, secs - base);
++
++ pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
++ tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour,
++ tm->tm_min, tm->tm_sec);
++
++ return 0;
++}
++
++/*
++ * Handle commands from user-space
++ */
++static int at91_rtc_ioctl(struct device *dev, unsigned int cmd,
++ unsigned long arg)
++{
++ int ret = 0;
++ unsigned long mr = at91_sys_read(AT91_RTT_MR);
++
++ pr_debug("%s(): cmd=%08x, arg=%08lx.\n", __FUNCTION__, cmd, arg);
++
++ switch (cmd) {
++ case RTC_AIE_OFF: /* alarm off */
++ at91_sys_write(AT91_RTT_MR, mr & ~AT91_RTT_ALMIEN);
++ break;
++ case RTC_AIE_ON: /* alarm on */
++ at91_sys_write(AT91_RTT_MR, mr | AT91_RTT_ALMIEN);
++ break;
++ case RTC_UIE_OFF: /* update off */
++ case RTC_PIE_OFF: /* periodic off */
++ at91_sys_write(AT91_RTT_MR, mr & ~AT91_RTT_RTTINCIEN);
++ break;
++ case RTC_UIE_ON: /* update on */
++ case RTC_PIE_ON: /* periodic on */
++ at91_sys_write(AT91_RTT_MR, mr | AT91_RTT_RTTINCIEN);
++ break;
++ case RTC_IRQP_READ: /* read periodic alarm frequency */
++ ret = put_user(AT91_RTC_FREQ, (unsigned long *) arg);
++ break;
++ case RTC_IRQP_SET: /* set periodic alarm frequency */
++ if (arg != AT91_RTC_FREQ)
++ ret = -EINVAL;
++ break;
++ default:
++ ret = -ENOIOCTLCMD;
++ break;
++ }
++
++ return ret;
++}
++
++/*
++ * Provide additional RTC information in /proc/driver/rtc
++ */
++static int at91_rtc_proc(struct device *dev, struct seq_file *seq)
++{
++ unsigned long mr = at91_sys_read(AT91_RTT_MR);
++
++ seq_printf(seq, "alarm_IRQ\t: %s\n",
++ (mr & AT91_RTT_ALMIEN) ? "yes" : "no");
++ seq_printf(seq, "periodic_IRQ\t: %s\n",
++ (mr & AT91_RTT_RTTINCIEN) ? "yes" : "no");
++ seq_printf(seq, "periodic_freq\t: %ld\n",
++ (unsigned long) AT91_RTC_FREQ);
++ return 0;
++}
++
++/*
++ * IRQ handler for the RTC
++ */
++static irqreturn_t at91_rtc_interrupt(int irq, void *dev_id)
++{
++ struct platform_device *pdev = dev_id;
++ struct rtc_device *rtc = platform_get_drvdata(pdev);
++ unsigned long sr, mr;
++ unsigned long events = 0;
++
++ mr = at91_sys_read(AT91_RTT_MR);
++ sr = at91_sys_read(AT91_RTT_SR);
++
++ if ((sr & AT91_RTT_ALMS) && (mr & AT91_RTT_ALMIEN)) /* alarm status */
++ events |= (RTC_AF | RTC_IRQF);
++
++ if ((sr & AT91_RTT_RTTINC) && (mr & AT91_RTT_RTTINCIEN)) /* timer increment */
++ events |= (RTC_UF | RTC_IRQF);
++
++ /* this interrupt is shared */
++ if (events) {
++ rtc_update_irq(rtc, 1, events);
++
++ pr_debug("%s(): num=%ld, events=0x%02lx\n", __FUNCTION__,
++ events >> 8, events & 0x000000FF);
++
++ return IRQ_HANDLED;
++ }
++ return IRQ_NONE; /* not handled */
++}
++
++static const struct rtc_class_ops at91_rtc_ops = {
++ .ioctl = at91_rtc_ioctl,
++ .read_time = at91_rtc_readtime,
++ .set_time = at91_rtc_settime,
++ .read_alarm = at91_rtc_readalarm,
++ .set_alarm = at91_rtc_setalarm,
++ .proc = at91_rtc_proc,
++};
++
++/*
++ * Initialize and install RTC driver
++ */
++static int __init at91_rtc_probe(struct platform_device *pdev)
++{
++ struct rtc_device *rtc;
++ int ret;
++ unsigned int mr;
++
++ mr = at91_sys_read(AT91_RTT_MR);
++
++ /* set prescalar value to 1 Hz */
++ mr &= ~AT91_RTT_RTPRES;
++ mr |= (AT91_SLOW_CLOCK & AT91_RTT_RTPRES);
++
++ /* disable all interrupts */
++ at91_sys_write(AT91_RTT_MR, mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN));
++
++ /* Install RTC interrupt handler */
++ ret = request_irq(AT91_ID_SYS, at91_rtc_interrupt,
++ IRQF_DISABLED | IRQF_SHARED,
++ "at91_rtt", pdev);
++ if (ret) {
++ printk(KERN_ERR "rtc-at91sam9: IRQ %d already in use.\n", AT91_ID_SYS);
++ return ret;
++ }
++
++ /* cpu init code should really have flagged this device as
++ * being wake-capable; if it didn't, do that here.
++ */
++ if (!device_can_wakeup(&pdev->dev))
++ device_init_wakeup(&pdev->dev, 1);
++
++ rtc = rtc_device_register(pdev->name, &pdev->dev,
++ &at91_rtc_ops, THIS_MODULE);
++ if (IS_ERR(rtc)) {
++ free_irq(AT91_ID_SYS, pdev);
++ return PTR_ERR(rtc);
++ }
++ platform_set_drvdata(pdev, rtc);
++
++ /* TODO re-enable interrupts that were set? */
++ at91_sys_write(AT91_RTT_MR, mr);
++
++ printk(KERN_INFO "AT91SAM9 Real Time Clock driver.\n");
++ return 0;
++}
++
++/*
++ * Disable and remove the RTC driver
++ */
++static int __exit at91_rtc_remove(struct platform_device *pdev)
++{
++ struct rtc_device *rtc = platform_get_drvdata(pdev);
++ unsigned long mr;
++
++ device_init_wakeup(&pdev->dev, 0);
++
++ /* disable all interrupts */
++ mr = at91_sys_read(AT91_RTT_MR);
++ at91_sys_write(AT91_RTT_MR, mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN));
++
++ free_irq(AT91_ID_SYS, pdev);
++
++ rtc_device_unregister(rtc);
++ platform_set_drvdata(pdev, NULL);
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++
++/* AT91SAM9260 RTC Power management control */
++
++static struct timespec at91_rtc_delta;
++static u32 at91_rtc_imr;
++
++static int at91_rtc_suspend(struct platform_device *pdev,
++ pm_message_t state)
++{
++ struct rtc_time tm;
++ struct timespec time;
++ unsigned long mr;
++
++ time.tv_nsec = 0;
++
++ /* calculate time delta for suspend */
++ at91_rtc_readtime(&pdev->dev, &tm);
++ rtc_tm_to_time(&tm, &time.tv_sec);
++ save_time_delta(&at91_rtc_delta, &time);
++
++ /*
++ * this IRQ is shared with DBGU and other hardware which isn't
++ * necessarily doing PM like we are...
++ */
++ mr = at91_sys_read(AT91_RTT_MR);
++ at91_rtc_imr = mr & (AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN); /* save enabled interrupts */
++ if (at91_rtc_imr) {
++ if (device_may_wakeup(&pdev->dev))
++ enable_irq_wake(AT91_ID_SYS);
++ else
++ at91_sys_write(AT91_RTT_MR, mr & ~at91_rtc_imr);
++ }
++
++ pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
++ 1900 + tm.tm_year, tm.tm_mon, tm.tm_mday,
++ tm.tm_hour, tm.tm_min, tm.tm_sec);
++
++ return 0;
++}
++
++static int at91_rtc_resume(struct platform_device *pdev)
++{
++ struct rtc_time tm;
++ struct timespec time;
++ unsigned int mr;
++
++ time.tv_nsec = 0;
++
++ at91_rtc_readtime(&pdev->dev, &tm);
++ rtc_tm_to_time(&tm, &time.tv_sec);
++ restore_time_delta(&at91_rtc_delta, &time);
++
++ if (at91_rtc_imr) {
++ if (device_may_wakeup(&pdev->dev))
++ disable_irq_wake(AT91_ID_SYS);
++ else {
++ mr = at91_sys_read(AT91_RTT_MR);
++ at91_sys_write(AT91_RTT_MR, mr | at91_rtc_imr);
++ }
++ }
++
++ pr_debug("%s(): %4d-%02d-%02d %02d:%02d:%02d\n", __FUNCTION__,
++ 1900 + tm.tm_year, tm.tm_mon, tm.tm_mday,
++ tm.tm_hour, tm.tm_min, tm.tm_sec);
++
++ return 0;
++}
++#else
++#define at91_rtc_suspend NULL
++#define at91_rtc_resume NULL
++#endif
++
++static struct platform_driver at91_rtc_driver = {
++ .remove = __exit_p(at91_rtc_remove),
++ .suspend = at91_rtc_suspend,
++ .resume = at91_rtc_resume,
++ .driver = {
++ .name = "at91_rtc",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init at91_rtc_init(void)
++{
++ return platform_driver_probe(&at91_rtc_driver, at91_rtc_probe);
++}
++
++static void __exit at91_rtc_exit(void)
++{
++ platform_driver_unregister(&at91_rtc_driver);
++}
++
++module_init(at91_rtc_init);
++module_exit(at91_rtc_exit);
++
++MODULE_AUTHOR("Michel Benoit");
++MODULE_DESCRIPTION("RTC driver for Atmel AT91SAM926x");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c
+index 111da57..0f8c25a 100644
+--- a/drivers/serial/atmel_serial.c
++++ b/drivers/serial/atmel_serial.c
+@@ -7,6 +7,8 @@
+ * Based on drivers/char/serial_sa1100.c, by Deep Blue Solutions Ltd.
+ * Based on drivers/char/serial.c, by Linus Torvalds, Theodore Ts'o.
+ *
++ * DMA support added by Chip Coldwell.
++ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+@@ -33,6 +35,7 @@
+ #include <linux/sysrq.h>
+ #include <linux/tty_flip.h>
+ #include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
+ #include <linux/atmel_pdc.h>
+
+ #include <asm/io.h>
+@@ -47,6 +50,11 @@
+
+ #include "atmel_serial.h"
+
++#define SUPPORT_PDC
++#define PDC_BUFFER_SIZE (L1_CACHE_BYTES << 3)
++#warning "Revisit"
++#define PDC_RX_TIMEOUT (3 * 10) /* 3 bytes */
++
+ #if defined(CONFIG_SERIAL_ATMEL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
+ #define SUPPORT_SYSRQ
+ #endif
+@@ -107,6 +115,13 @@
+ static int (*atmel_open_hook)(struct uart_port *);
+ static void (*atmel_close_hook)(struct uart_port *);
+
++struct atmel_dma_buffer {
++ unsigned char *buf;
++ dma_addr_t dma_addr;
++ size_t dma_size;
++ unsigned int ofs;
++};
++
+ /*
+ * We wrap our port structure around the generic uart_port.
+ */
+@@ -115,10 +130,20 @@ struct atmel_uart_port {
+ struct clk *clk; /* uart clock */
+ unsigned short suspended; /* is port suspended? */
+ int break_active; /* break being received */
++
++ short use_dma_rx; /* enable PDC receiver */
++ short pdc_rx_idx; /* current PDC RX buffer */
++ struct atmel_dma_buffer pdc_rx[2]; /* PDC receier */
++
++ short use_dma_tx; /* enable PDC transmitter */
++ struct atmel_dma_buffer pdc_tx; /* PDC transmitter */
+ };
+
+ static struct atmel_uart_port atmel_ports[ATMEL_MAX_UART];
+
++#define PDC_RX_BUF(port) &(port)->pdc_rx[(port)->pdc_rx_idx]
++#define PDC_RX_SWITCH(port) (port)->pdc_rx_idx = !(port)->pdc_rx_idx
++
+ #ifdef SUPPORT_SYSRQ
+ static struct console atmel_console;
+ #endif
+@@ -204,7 +229,14 @@ static u_int atmel_get_mctrl(struct uart_port *port)
+ */
+ static void atmel_stop_tx(struct uart_port *port)
+ {
+- UART_PUT_IDR(port, ATMEL_US_TXRDY);
++ struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
++
++ if (atmel_port->use_dma_tx) {
++ UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); /* disable PDC transmit */
++ UART_PUT_IDR(port, ATMEL_US_ENDTX | ATMEL_US_TXBUFE);
++ }
++ else
++ UART_PUT_IDR(port, ATMEL_US_TXRDY);
+ }
+
+ /*
+@@ -212,7 +244,19 @@ static void atmel_stop_tx(struct uart_port *port)
+ */
+ static void atmel_start_tx(struct uart_port *port)
+ {
+- UART_PUT_IER(port, ATMEL_US_TXRDY);
++ struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
++
++ if (atmel_port->use_dma_tx) {
++ if (UART_GET_PTSR(port) & ATMEL_PDC_TXTEN)
++ /* The transmitter is already running. Yes, we
++ really need this.*/
++ return;
++
++ UART_PUT_IER(port, ATMEL_US_ENDTX | ATMEL_US_TXBUFE);
++ UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); /* re-enable PDC transmit */
++ }
++ else
++ UART_PUT_IER(port, ATMEL_US_TXRDY);
+ }
+
+ /*
+@@ -220,7 +264,14 @@ static void atmel_start_tx(struct uart_port *port)
+ */
+ static void atmel_stop_rx(struct uart_port *port)
+ {
+- UART_PUT_IDR(port, ATMEL_US_RXRDY);
++ struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
++
++ if (atmel_port->use_dma_rx) {
++ UART_PUT_PTCR(port, ATMEL_PDC_RXTDIS); /* disable PDC receive */
++ UART_PUT_IDR(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT);
++ }
++ else
++ UART_PUT_IDR(port, ATMEL_US_RXRDY);
+ }
+
+ /*
+@@ -243,6 +294,134 @@ static void atmel_break_ctl(struct uart_port *port, int break_state)
+ }
+
+ /*
++ * Receive data via the PDC. A buffer has been fulled.
++ */
++static void atmel_pdc_endrx(struct uart_port *port)
++{
++ struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
++ struct tty_struct *tty = port->info->tty;
++ struct atmel_dma_buffer *pdc = PDC_RX_BUF(atmel_port);
++ unsigned int count;
++
++ count = pdc->dma_size - pdc->ofs;
++ if (likely(count > 0)) {
++ dma_sync_single_for_cpu(port->dev, pdc->dma_addr, pdc->dma_size, DMA_FROM_DEVICE);
++ tty_insert_flip_string(tty, pdc->buf + pdc->ofs, count);
++ tty_flip_buffer_push(tty);
++
++ port->icount.rx += count;
++ }
++
++ /* Set this buffer as the next receive buffer */
++ pdc->ofs = 0;
++ UART_PUT_RNPR(port, pdc->dma_addr);
++ UART_PUT_RNCR(port, pdc->dma_size);
++
++ /* Switch to next buffer */
++ PDC_RX_SWITCH(atmel_port); /* next PDC buffer */
++}
++
++/*
++ * Receive data via the PDC. At least one byte was received, but the
++ * buffer was not full when the inter-character timeout expired.
++ */
++static void atmel_pdc_timeout(struct uart_port *port)
++{
++ struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
++ struct tty_struct *tty = port->info->tty;
++ struct atmel_dma_buffer *pdc = PDC_RX_BUF(atmel_port);
++ /* unsigned */ int ofs, count;
++
++ ofs = UART_GET_RPR(port) - pdc->dma_addr; /* current DMA adress */
++ count = ofs - pdc->ofs;
++
++ if (likely(count > 0)) {
++ dma_sync_single_for_cpu(port->dev, pdc->dma_addr, pdc->dma_size, DMA_FROM_DEVICE);
++ tty_insert_flip_string(tty, pdc->buf + pdc->ofs, count);
++ tty_flip_buffer_push(tty);
++
++ pdc->ofs = ofs;
++ port->icount.rx += count;
++ }
++
++ /* reset the UART timeout */
++ UART_PUT_CR(port, ATMEL_US_STTTO);
++}
++
++/*
++ * Deal with parity, framing and overrun errors.
++ */
++static void atmel_pdc_rxerr(struct uart_port *port, unsigned int status)
++{
++ /* clear error */
++ UART_PUT_CR(port, ATMEL_US_RSTSTA);
++
++ if (status & ATMEL_US_RXBRK) {
++ status &= ~(ATMEL_US_PARE | ATMEL_US_FRAME); /* ignore side-effect */
++ port->icount.brk++;
++ }
++ if (status & ATMEL_US_PARE)
++ port->icount.parity++;
++ if (status & ATMEL_US_FRAME)
++ port->icount.frame++;
++ if (status & ATMEL_US_OVRE)
++ port->icount.overrun++;
++}
++
++/*
++ * A transmission via the PDC is complete.
++ */
++static void atmel_pdc_endtx(struct uart_port *port)
++{
++ struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
++ struct circ_buf *xmit = &port->info->xmit;
++ struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
++
++ xmit->tail += pdc->ofs;
++ if (xmit->tail >= SERIAL_XMIT_SIZE)
++ xmit->tail -= SERIAL_XMIT_SIZE;
++
++ port->icount.tx += pdc->ofs;
++ pdc->ofs = 0;
++
++ if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
++ uart_write_wakeup(port);
++}
++
++/*
++ * The PDC transmitter is idle, so either start the next transfer or
++ * disable the transmitter.
++ */
++static void atmel_pdc_txbufe(struct uart_port *port)
++{
++ struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
++ struct circ_buf *xmit = &port->info->xmit;
++ struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
++ int count;
++
++ if (!uart_circ_empty(xmit)) {
++ /* more to transmit - setup next transfer */
++ UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); /* disable PDC transmit */
++ dma_sync_single_for_device(port->dev, pdc->dma_addr, pdc->dma_size, DMA_TO_DEVICE);
++
++ if (xmit->tail < xmit->head)
++ count = xmit->head - xmit->tail;
++ else
++ count = SERIAL_XMIT_SIZE - xmit->tail;
++ pdc->ofs = count;
++
++ UART_PUT_TPR(port, pdc->dma_addr + xmit->tail);
++ UART_PUT_TCR(port, count);
++ UART_PUT_PTCR(port, ATMEL_PDC_TXTEN); /* re-enable PDC transmit */
++ }
++ else {
++ /* nothing left to transmit - disable the transmitter */
++ UART_PUT_PTCR(port, ATMEL_PDC_TXTDIS); /* disable PDC transmit */
++ UART_PUT_IDR(port, ATMEL_US_ENDTX | ATMEL_US_TXBUFE);
++ }
++}
++
++/*
+ * Characters received (called from interrupt handler)
+ */
+ static void atmel_rx_chars(struct uart_port *port)
+@@ -361,6 +540,14 @@ static irqreturn_t atmel_interrupt(int irq, void *dev_id)
+ status = UART_GET_CSR(port);
+ pending = status & UART_GET_IMR(port);
+ while (pending) {
++ /* PDC receive */
++ if (pending & ATMEL_US_ENDRX)
++ atmel_pdc_endrx(port);
++ if (pending & ATMEL_US_TIMEOUT)
++ atmel_pdc_timeout(port);
++ if (atmel_port->use_dma_rx && pending & (ATMEL_US_RXBRK | ATMEL_US_OVRE | ATMEL_US_FRAME | ATMEL_US_PARE))
++ atmel_pdc_rxerr(port, pending);
++
+ /* Interrupt receive */
+ if (pending & ATMEL_US_RXRDY)
+ atmel_rx_chars(port);
+@@ -385,6 +572,12 @@ static irqreturn_t atmel_interrupt(int irq, void *dev_id)
+ if (pending & (ATMEL_US_RIIC | ATMEL_US_DSRIC | ATMEL_US_DCDIC | ATMEL_US_CTSIC))
+ wake_up_interruptible(&port->info->delta_msr_wait);
+
++ /* PDC transmit */
++ if (pending & ATMEL_US_ENDTX)
++ atmel_pdc_endtx(port);
++ if (pending & ATMEL_US_TXBUFE)
++ atmel_pdc_txbufe(port);
++
+ /* Interrupt transmit */
+ if (pending & ATMEL_US_TXRDY)
+ atmel_tx_chars(port);
+@@ -404,6 +597,7 @@ static irqreturn_t atmel_interrupt(int irq, void *dev_id)
+ static int atmel_startup(struct uart_port *port)
+ {
+ int retval;
++ struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
+
+ /*
+ * Ensure that no interrupts are enabled otherwise when
+@@ -422,6 +616,47 @@ static int atmel_startup(struct uart_port *port)
+ }
+
+ /*
++ * Initialize DMA (if necessary)
++ */
++ if (atmel_port->use_dma_rx) {
++ int i;
++
++ for (i = 0; i < 2; i++) {
++ struct atmel_dma_buffer *pdc = &atmel_port->pdc_rx[i];
++
++ pdc->buf = kmalloc(PDC_BUFFER_SIZE, GFP_KERNEL);
++ if (pdc->buf == NULL) {
++ if (i != 0) {
++ dma_unmap_single(port->dev, atmel_port->pdc_rx[0].dma_addr, PDC_BUFFER_SIZE, DMA_FROM_DEVICE);
++ kfree(atmel_port->pdc_rx[0].buf);
++ }
++ free_irq(port->irq, port);
++ return -ENOMEM;
++ }
++ pdc->dma_addr = dma_map_single(port->dev, pdc->buf, PDC_BUFFER_SIZE, DMA_FROM_DEVICE);
++ pdc->dma_size = PDC_BUFFER_SIZE;
++ pdc->ofs = 0;
++ }
++
++ atmel_port->pdc_rx_idx = 0;
++
++ UART_PUT_RPR(port, atmel_port->pdc_rx[0].dma_addr);
++ UART_PUT_RCR(port, PDC_BUFFER_SIZE);
++
++ UART_PUT_RNPR(port, atmel_port->pdc_rx[1].dma_addr);
++ UART_PUT_RNCR(port, PDC_BUFFER_SIZE);
++ }
++ if (atmel_port->use_dma_tx) {
++ struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
++ struct circ_buf *xmit = &port->info->xmit;
++
++ pdc->buf = xmit->buf;
++ pdc->dma_addr = dma_map_single(port->dev, pdc->buf, SERIAL_XMIT_SIZE, DMA_TO_DEVICE);
++ pdc->dma_size = SERIAL_XMIT_SIZE;
++ pdc->ofs = 0;
++ }
++
++ /*
+ * If there is a specific "open" function (to register
+ * control line interrupts)
+ */
+@@ -439,7 +674,15 @@ static int atmel_startup(struct uart_port *port)
+ UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX);
+ UART_PUT_CR(port, ATMEL_US_TXEN | ATMEL_US_RXEN); /* enable xmit & rcvr */
+
+- UART_PUT_IER(port, ATMEL_US_RXRDY); /* enable receive only */
++ if (atmel_port->use_dma_rx) {
++ UART_PUT_RTOR(port, PDC_RX_TIMEOUT); /* set UART timeout */
++ UART_PUT_CR(port, ATMEL_US_STTTO);
++
++ UART_PUT_IER(port, ATMEL_US_ENDRX | ATMEL_US_TIMEOUT);
++ UART_PUT_PTCR(port, ATMEL_PDC_RXTEN); /* enable PDC controller */
++ }
++ else
++ UART_PUT_IER(port, ATMEL_US_RXRDY); /* enable receive only */
+
+ return 0;
+ }
+@@ -449,6 +692,33 @@ static int atmel_startup(struct uart_port *port)
+ */
+ static void atmel_shutdown(struct uart_port *port)
+ {
++ struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
++
++ /*
++ * Ensure everything is stopped.
++ */
++ atmel_stop_rx(port);
++ atmel_stop_tx(port);
++
++ /*
++ * Shut-down the DMA.
++ */
++ if (atmel_port->use_dma_rx) {
++ int i;
++
++ for (i = 0; i < 2; i++) {
++ struct atmel_dma_buffer *pdc = &atmel_port->pdc_rx[i];
++
++ dma_unmap_single(port->dev, pdc->dma_addr, pdc->dma_size, DMA_FROM_DEVICE);
++ kfree(pdc->buf);
++ }
++ }
++ if (atmel_port->use_dma_tx) {
++ struct atmel_dma_buffer *pdc = &atmel_port->pdc_tx;
++
++ dma_unmap_single(port->dev, pdc->dma_addr, pdc->dma_size, DMA_TO_DEVICE);
++ }
++
+ /*
+ * Disable all interrupts, port and break condition.
+ */
+@@ -500,6 +770,7 @@ static void atmel_serial_pm(struct uart_port *port, unsigned int state, unsigned
+ */
+ static void atmel_set_termios(struct uart_port *port, struct ktermios * termios, struct ktermios * old)
+ {
++ struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
+ unsigned long flags;
+ unsigned int mode, imr, quot, baud;
+
+@@ -509,7 +780,7 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios * termios,
+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
+ quot = uart_get_divisor(port, baud);
+
+- if (quot > 65535) { /* BRGR is 16-bit, so switch to slower clock */
++ if (quot > 65535) { /* BRGR is 16-bit, so switch to slower clock */
+ quot /= 8;
+ mode |= ATMEL_US_USCLKS_MCK_DIV8;
+ }
+@@ -558,6 +829,9 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios * termios,
+ if (termios->c_iflag & (BRKINT | PARMRK))
+ port->read_status_mask |= ATMEL_US_RXBRK;
+
++ if (atmel_port->use_dma_rx) /* need to enable error interrupts */
++ UART_PUT_IER(port, port->read_status_mask);
++
+ /*
+ * Characters to ignore
+ */
+@@ -736,6 +1010,13 @@ static void __devinit atmel_init_port(struct atmel_uart_port *atmel_port, struct
+ clk_enable(atmel_port->clk);
+ port->uartclk = clk_get_rate(atmel_port->clk);
+ }
++
++#ifdef SUPPORT_PDC
++ atmel_port->use_dma_rx = data->use_dma_rx;
++ atmel_port->use_dma_tx = data->use_dma_tx;
++ if (atmel_port->use_dma_tx)
++ port->fifosize = PDC_BUFFER_SIZE;
++#endif
+ }
+
+ /*
+@@ -912,7 +1193,8 @@ static int atmel_serial_suspend(struct platform_device *pdev, pm_message_t state
+ struct uart_port *port = platform_get_drvdata(pdev);
+ struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port;
+
+- if (device_may_wakeup(&pdev->dev) && !at91_suspend_entering_slow_clock())
++ if (device_may_wakeup(&pdev->dev)
++ && !clk_must_disable(atmel_port->clk))
+ enable_irq_wake(port->irq);
+ else {
+ uart_suspend_port(&atmel_uart, port);
+diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
+index abf0504..b655bbc 100644
+--- a/drivers/spi/Kconfig
++++ b/drivers/spi/Kconfig
+@@ -100,6 +100,15 @@ config SPI_BUTTERFLY
+ inexpensive battery powered microcontroller evaluation board.
+ This same cable can be used to flash new firmware.
+
++config SPI_AT91
++ tristate "AT91RM9200 Bitbang SPI Master"
++ depends on SPI_MASTER && ARCH_AT91RM9200 && !SPI_ATMEL && EXPERIMENTAL
++ select SPI_BITBANG
++ help
++ This is dumb PIO bitbanging driver for the Atmel AT91RM9200.
++ The SPI_ATMEL driver will be its replacement, using the native
++ SPI hardware and its DMA controller.
++
+ config SPI_IMX
+ tristate "Freescale iMX SPI controller"
+ depends on SPI_MASTER && ARCH_IMX && EXPERIMENTAL
+diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
+index 41fbac4..124aeec 100644
+--- a/drivers/spi/Makefile
++++ b/drivers/spi/Makefile
+@@ -27,6 +27,7 @@ obj-$(CONFIG_SPI_S3C24XX_GPIO) += spi_s3c24xx_gpio.o
+ obj-$(CONFIG_SPI_S3C24XX) += spi_s3c24xx.o
+ obj-$(CONFIG_SPI_TXX9) += spi_txx9.o
+ obj-$(CONFIG_SPI_XILINX) += xilinx_spi.o
++obj-$(CONFIG_SPI_AT91) += spi_at91_bitbang.o
+ # ... add above this line ...
+
+ # SPI protocol drivers (device/link on bus)
+diff --git a/drivers/spi/spi_at91_bitbang.c b/drivers/spi/spi_at91_bitbang.c
+new file mode 100644
+index 0000000..b8d82c2
+--- /dev/null
++++ b/drivers/spi/spi_at91_bitbang.c
+@@ -0,0 +1,207 @@
++/*
++ * at91_spi.c - at91 SPI driver (BOOTSTRAP/BITBANG VERSION)
++ *
++ * Copyright (C) 2006 David Brownell
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++
++#include <linux/spi/spi.h>
++#include <linux/spi/spi_bitbang.h>
++
++#include <asm/arch/gpio.h>
++
++
++/*
++ * FIXME this bitbanging version is just to help bootstrap systems until
++ * there's a native SPI+IRQ+DMA controller driver ... such a driver should
++ * be a drop-in replacement for this one, and much faster.
++ *
++ * remember:
++ *
++ * - other at91 parts (like at91sam9) have multiple controllers
++ * and different pin muxing; this version is at91rm9200 specfic.
++ *
++ * - at91sam9261 SPI0 pins are directly muxed with MMC/SD pins.
++ *
++ * - rm9200 spi chipselects drop wrongly, so the native driver
++ * will need to use gpios much like this does.
++ *
++ * - real hardware only allows 8..16 bits per word, while this
++ * bitbanger allows 1..32 (incompatible superset).
++ *
++ * - this disregards clock parameters. with inlined gpio calls,
++ * gcc 3.4.4 produces about 1.5 mbit/sec, more than 2x faster
++ * than using the subroutined veresion from txrx_word().
++ *
++ * - suspend/resume and <linux/clk.h> support is missing ...
++ */
++
++#define spi_miso_bit AT91_PIN_PA0
++#define spi_mosi_bit AT91_PIN_PA1
++#define spi_sck_bit AT91_PIN_PA2
++
++struct at91_spi {
++ struct spi_bitbang bitbang;
++ struct platform_device *pdev;
++};
++
++/*----------------------------------------------------------------------*/
++
++static inline void setsck(struct spi_device *spi, int is_on)
++{
++ at91_set_gpio_value(spi_sck_bit, is_on);
++}
++
++static inline void setmosi(struct spi_device *spi, int is_on)
++{
++ at91_set_gpio_value(spi_mosi_bit, is_on);
++}
++
++static inline int getmiso(struct spi_device *spi)
++{
++ return at91_get_gpio_value(spi_miso_bit);
++}
++
++static void at91_spi_chipselect(struct spi_device *spi, int is_active)
++{
++ unsigned long cs = (unsigned long) spi->controller_data;
++
++ /* set default clock polarity */
++ if (is_active)
++ setsck(spi, spi->mode & SPI_CPOL);
++
++ /* only support active-low (default) */
++ at91_set_gpio_value(cs, !is_active);
++}
++
++/*
++ * NOTE: this is "as fast as we can"; it should be a function of
++ * the device clock ...
++ */
++#define spidelay(X) do{} while(0)
++
++#define EXPAND_BITBANG_TXRX
++#include <linux/spi/spi_bitbang.h>
++
++static u32 at91_spi_txrx_word_mode0(struct spi_device *spi,
++ unsigned nsecs, u32 word, u8 bits)
++{
++ return bitbang_txrx_be_cpha0(spi, nsecs, 0, word, 8);
++}
++
++static u32 at91_spi_txrx_word_mode1(struct spi_device *spi,
++ unsigned nsecs, u32 word, u8 bits)
++{
++ return bitbang_txrx_be_cpha1(spi, nsecs, 0, word, 8);
++}
++
++static u32 at91_spi_txrx_word_mode2(struct spi_device *spi,
++ unsigned nsecs, u32 word, u8 bits)
++{
++ return bitbang_txrx_be_cpha0(spi, nsecs, 1, word, 8);
++}
++
++static u32 at91_spi_txrx_word_mode3(struct spi_device *spi,
++ unsigned nsecs, u32 word, u8 bits)
++{
++ return bitbang_txrx_be_cpha1(spi, nsecs, 1, word, 8);
++}
++
++/*----------------------------------------------------------------------*/
++
++static int __init at91_spi_probe(struct platform_device *pdev)
++{
++ int status;
++ struct spi_master *master;
++ struct at91_spi *at91_spi;
++
++ if (pdev->id != 0) /* SPI0 bus */
++ return -EINVAL;
++
++ master = spi_alloc_master(&pdev->dev, sizeof *at91_spi);
++ if (!master)
++ return -ENOMEM;
++
++ at91_spi = spi_master_get_devdata(master);
++ at91_spi->pdev = pdev;
++ platform_set_drvdata(pdev, at91_spi);
++
++ /* SPI and bitbang hookup */
++ master->bus_num = 0;
++ master->num_chipselect = 4;
++
++ at91_spi->bitbang.master = spi_master_get(master);
++ at91_spi->bitbang.chipselect = at91_spi_chipselect;
++ at91_spi->bitbang.txrx_word[SPI_MODE_0] = at91_spi_txrx_word_mode0;
++ at91_spi->bitbang.txrx_word[SPI_MODE_1] = at91_spi_txrx_word_mode1;
++ at91_spi->bitbang.txrx_word[SPI_MODE_2] = at91_spi_txrx_word_mode2;
++ at91_spi->bitbang.txrx_word[SPI_MODE_3] = at91_spi_txrx_word_mode3;
++
++ status = spi_bitbang_start(&at91_spi->bitbang);
++ if (status < 0)
++ (void) spi_master_put(at91_spi->bitbang.master);
++
++ return status;
++}
++
++static int __exit at91_spi_remove(struct platform_device *pdev)
++{
++ struct at91_spi *at91_spi = platform_get_drvdata(pdev);
++ int status;
++
++ /* stop() unregisters child devices too */
++ status = spi_bitbang_stop(&at91_spi->bitbang);
++ (void) spi_master_put(at91_spi->bitbang.master);
++
++ platform_set_drvdata(pdev, NULL);
++ return status;
++}
++
++static struct platform_driver at91_spi_driver = {
++ .probe = at91_spi_probe,
++ .remove = __exit_p(at91_spi_remove),
++ .driver = {
++ .name = "at91_spi",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init at91_spi_init(void)
++{
++ at91_set_gpio_output(spi_sck_bit, 0);
++ at91_set_gpio_output(spi_mosi_bit, 0);
++ at91_set_gpio_input(spi_miso_bit, 1 /* pullup */);
++
++ /* register driver */
++ return platform_driver_register(&at91_spi_driver);
++}
++
++static void __exit at91_spi_exit(void)
++{
++ platform_driver_unregister(&at91_spi_driver);
++}
++
++device_initcall(at91_spi_init);
++module_exit(at91_spi_exit);
++
++MODULE_ALIAS("at91_spi.0");
++
++MODULE_DESCRIPTION("AT91 SPI support (BOOTSTRAP/BITBANG VERSION)");
++MODULE_AUTHOR("David Brownell");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c
+index cd62b02..4e08216 100644
+--- a/drivers/usb/gadget/at91_udc.c
++++ b/drivers/usb/gadget/at91_udc.c
+@@ -1784,7 +1784,7 @@ static int at91udc_suspend(struct platform_device *pdev, pm_message_t mesg)
+ */
+ if ((!udc->suspended && udc->addr)
+ || !wake
+- || at91_suspend_entering_slow_clock()) {
++ || clk_must_disable(udc->fclk)) {
+ pullup(udc, 0);
+ wake = 0;
+ } else
+diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
+index d849c80..aeed2ba 100644
+--- a/drivers/usb/host/ohci-at91.c
++++ b/drivers/usb/host/ohci-at91.c
+@@ -299,7 +299,7 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
+ *
+ * REVISIT: some boards will be able to turn VBUS off...
+ */
+- if (at91_suspend_entering_slow_clock()) {
++ if (clk_must_disable(fclk)) {
+ ohci_usb_reset (ohci);
+ at91_stop_clock();
+ }
+diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
+index 5b3dbcf..94e8243 100644
+--- a/drivers/video/Kconfig
++++ b/drivers/video/Kconfig
+@@ -876,6 +876,17 @@ config FB_EPSON1355
+ framebuffer. Product specs at
+ <http://www.erd.epson.com/vdc/html/products.htm>.
+
++config FB_S1D15605
++ tristate "Epson S1D15605 framebuffer support"
++ depends on FB
++ default m if MACH_KB9200
++ select FB_CFB_FILLRECT
++ select FB_CFB_COPYAREA
++ select FB_CFB_IMAGEBLIT
++ help
++ Build in support for the S1D15605 Epson Research 128x64
++ LCD controller as a framebuffer.
++
+ config FB_S1D13XXX
+ tristate "Epson S1D13XXX framebuffer support"
+ depends on FB
+@@ -889,7 +900,7 @@ config FB_S1D13XXX
+
+ config FB_ATMEL
+ tristate "AT91/AT32 LCD Controller support"
+- depends on FB && (ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || AVR32)
++ depends on FB && (ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || AVR32)
+ select FB_CFB_FILLRECT
+ select FB_CFB_COPYAREA
+ select FB_CFB_IMAGEBLIT
+diff --git a/drivers/video/Makefile b/drivers/video/Makefile
+index 83e02b3..d84b004 100644
+--- a/drivers/video/Makefile
++++ b/drivers/video/Makefile
+@@ -87,7 +87,8 @@ obj-$(CONFIG_FB_G364) += g364fb.o
+ obj-$(CONFIG_FB_SA1100) += sa1100fb.o
+ obj-$(CONFIG_FB_HIT) += hitfb.o
+ obj-$(CONFIG_FB_EPSON1355) += epson1355fb.o
+-obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o
++obj-$(CONFIG_FB_S1D15605) += s1d15605fb.o
++obj-$(CONFIG_FB_ATMEL) += atmel_lcdfb.o
+ obj-$(CONFIG_FB_PVR2) += pvr2fb.o
+ obj-$(CONFIG_FB_VOODOO1) += sstfb.o
+ obj-$(CONFIG_FB_ARMCLCD) += amba-clcd.o
+diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
+index 9609a6c..e6dde97 100644
+--- a/drivers/video/backlight/Kconfig
++++ b/drivers/video/backlight/Kconfig
+@@ -90,3 +90,11 @@ config BACKLIGHT_CARILLO_RANCH
+ help
+ If you have a Intel LE80578 (Carillo Ranch) say Y to enable the
+ backlight driver.
++
++config BACKLIGHT_KB920x
++ tristate "KwikByte KB9202 Backlight Driver"
++ depends on BACKLIGHT_CLASS_DEVICE && MACH_KB9200
++ default y
++ help
++ If you have a KwikByte KB9202 board, say Y to enable the
++ backlight driver.
+diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
+index 965a78b..13886a7 100644
+--- a/drivers/video/backlight/Makefile
++++ b/drivers/video/backlight/Makefile
+@@ -9,3 +9,4 @@ obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
+ obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
+ obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
+ obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o
++obj-$(CONFIG_BACKLIGHT_KB920x) += kb920x_bl.o
+diff --git a/drivers/video/backlight/kb920x_bl.c b/drivers/video/backlight/kb920x_bl.c
+new file mode 100644
+index 0000000..bab1e29
+--- /dev/null
++++ b/drivers/video/backlight/kb920x_bl.c
+@@ -0,0 +1,164 @@
++/*
++ * Backlight Driver for KB9202
++ *
++ * Copyright (c) 2006 KwikByte
++ *
++ * Based on Sharp's Corgi Backlight Driver
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file "COPYING" in the main directory of this archive
++ * for more details.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/spinlock.h>
++#include <linux/fb.h>
++#include <linux/backlight.h>
++
++#include <asm/arch/gpio.h>
++
++/* The backlight is on(1)/off(0) */
++#define KB9202_DEFAULT_INTENSITY 1
++#define KB9202_MAX_INTENSITY 1
++
++static int kb9202bl_suspended;
++static int current_intensity = 0;
++static DEFINE_SPINLOCK(bl_lock);
++
++static int kb9202bl_set_intensity(struct backlight_device *bd)
++{
++ unsigned long flags;
++ int intensity = bd->props.brightness;
++
++ if (bd->props.power != FB_BLANK_UNBLANK)
++ intensity = 0;
++ if (bd->props.fb_blank != FB_BLANK_UNBLANK)
++ intensity = 0;
++ if (kb9202bl_suspended)
++ intensity = 0;
++
++ if ((!current_intensity) && (bd->props.power == FB_BLANK_UNBLANK))
++ intensity = 1;
++
++ spin_lock_irqsave(&bl_lock, flags);
++ if (intensity)
++ gpio_set_value(AT91_PIN_PC23, 1);
++ else
++ gpio_set_value(AT91_PIN_PC23, 0);
++ spin_unlock_irqrestore(&bl_lock, flags);
++
++ current_intensity = intensity;
++
++ return 0;
++}
++
++static int kb9202bl_get_intensity(struct backlight_device *bd)
++{
++ return current_intensity;
++}
++
++static struct backlight_ops kb9202bl_ops = {
++ .get_brightness = kb9202bl_get_intensity,
++ .update_status = kb9202bl_set_intensity,
++};
++
++static int __init kb9202bl_probe(struct platform_device *pdev)
++{
++ struct backlight_device *bd;
++
++ bd = backlight_device_register ("kb9202-bl", &pdev->dev, NULL, &kb9202bl_ops);
++ if (IS_ERR(bd))
++ return PTR_ERR(bd);
++
++ platform_set_drvdata(pdev, bd);
++
++ bd->props.max_brightness = KB9202_MAX_INTENSITY;
++ bd->props.brightness = KB9202_DEFAULT_INTENSITY;
++ (void) kb9202bl_set_intensity(bd);
++
++ return 0;
++}
++
++static int kb9202bl_remove(struct platform_device *pdev)
++{
++ struct backlight_device *bd = platform_get_drvdata(pdev);
++
++ bd->props.brightness = 0;
++ bd->props.power = 0;
++ (void) kb9202bl_set_intensity(bd);
++
++ backlight_device_unregister(bd);
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int kb9202bl_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct backlight_device *bd = platform_get_drvdata(pdev);
++
++ kb9202bl_suspended = 1;
++ (void) kb9202bl_set_intensity(bd);
++ return 0;
++}
++
++static int kb9202bl_resume(struct platform_device *pdev)
++{
++ struct backlight_device *bd = platform_get_drvdata(pdev);
++
++ kb9202bl_suspended = 0;
++ (void) kb9202bl_set_intensity(bd);
++ return 0;
++}
++#else
++#define kb9202bl_suspend NULL
++#define kb9202bl_resume NULL
++#endif
++
++static struct platform_driver kb9202bl_driver = {
++ .probe = kb9202bl_probe,
++ .remove = kb9202bl_remove,
++ .suspend = kb9202bl_suspend,
++ .resume = kb9202bl_resume,
++ .driver = {
++ .name = "kb9202-bl",
++ .owner = THIS_MODULE,
++ },
++};
++
++static struct platform_device *kb9202bl_device;
++
++static int __init kb9202bl_init(void)
++{
++ int ret;
++
++ ret = platform_driver_register(&kb9202bl_driver);
++ if (!ret) {
++ kb9202bl_device = platform_device_alloc("kb9202-bl", -1);
++ if (!kb9202bl_device)
++ return -ENOMEM;
++
++ ret = platform_device_add(kb9202bl_device);
++ if (ret) {
++ platform_device_put(kb9202bl_device);
++ platform_driver_unregister(&kb9202bl_driver);
++ }
++ }
++ return ret;
++}
++
++static void __exit kb9202bl_exit(void)
++{
++ platform_device_unregister(kb9202bl_device);
++ platform_driver_unregister(&kb9202bl_driver);
++}
++
++module_init(kb9202bl_init);
++module_exit(kb9202bl_exit);
++
++MODULE_AUTHOR("KwikByte <kb9200_dev@kwikbyte.com>");
++MODULE_DESCRIPTION("KB9202 Backlight Driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/video/s1d15605fb.c b/drivers/video/s1d15605fb.c
+new file mode 100644
+index 0000000..00fa4c6
+--- /dev/null
++++ b/drivers/video/s1d15605fb.c
+@@ -0,0 +1,658 @@
++/*
++ * drivers/video/s1d15605.c
++ *
++ * Adapted from several sources including:
++ * 1) Driver for AT91 LCD Controller
++ * Copyright (C) 2006 Atmel
++ *
++ * 2) Copyright (C) 2005 S. Kevin Hester
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * This is a basic framebuffer driver for the Optrex F-51320 128x64 mono LCD
++ * display. This display uses a clone of the common Epson SED 1531 display
++ * controller.
++ *
++ * I've heavily borrowed code from the vfb.c driver.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifdef DEBUG
++#define MSG(string, args...) printk("s1d15605fb:" string, ##args)
++#else
++#define MSG(string, args...)
++#endif
++
++#include <linux/kernel.h>
++#include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
++#include <linux/interrupt.h>
++#include <linux/clk.h>
++#include <linux/fb.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++
++#include <asm/uaccess.h>
++
++#include <asm/arch/board.h>
++#include <asm/arch/gpio.h>
++
++#ifdef CONFIG_PMAC_BACKLIGHT
++#include <asm/backlight.h>
++#endif
++
++#define VIDEOWIDTH 128
++#define VIDEOHEIGHT 64
++#define VIDEODEPTH 1 /* bits/pixel */
++#define VIDEOWIDTH_BYTES ((VIDEOWIDTH * VIDEODEPTH) / 8)
++
++/* The number of bytes that actually go to the device */
++#define ACTUALVIDEOMEMSIZE (VIDEOWIDTH_BYTES * VIDEOHEIGHT)
++#define VIDEOMEMSIZE PAGE_SIZE
++
++static struct fb_var_screeninfo s1d15605_default __initdata = {
++ .xres = VIDEOWIDTH,
++ .yres = VIDEOHEIGHT,
++ .xres_virtual = VIDEOWIDTH,
++ .yres_virtual = VIDEOHEIGHT,
++ .bits_per_pixel = VIDEODEPTH,
++ .red = { 0, 1, 0 },
++ .green = { 0, 1, 0 },
++ .blue = { 0, 1, 0 },
++ .activate = FB_ACTIVATE_NOW,
++ .pixclock = 20000,
++ .vmode = FB_VMODE_NONINTERLACED,
++};
++
++static struct fb_fix_screeninfo s1d15605_fix __initdata = {
++ .id = "s1d15605",
++ .type = FB_TYPE_PACKED_PIXELS,
++ .visual = FB_VISUAL_MONO10,
++ .xpanstep = 0,
++ .ypanstep = 0,
++ .ywrapstep = 0,
++ .accel = FB_ACCEL_NONE,
++};
++
++struct s1d15605fb_info {
++ struct fb_info *info;
++ char *mmio;
++ unsigned long reset_pin;
++ struct platform_device *pdev;
++};
++
++/*
++ * LCD device interface
++ */
++#define RESET_DISPLAY 0xE2
++#define LCD_BIAS_1_9 0xA2
++#define ADC_SELECT_REVERSE 0xA1
++#define COMMON_OUTPUT_NORMAL 0xC0
++#define V5_RESISTOR_RATIO 0x26
++#define ELECTRONIC_VOLUME_SET 0x81
++#define ELECTRONIC_VOLUME_INIT 0x20
++#define POWER_CONTROL_SET 0x28
++#define VOLTAGE_REGULATOR 0x02
++#define VOLTAGE_FOLLOWER 0x01
++#define BOOSTER_CIRCUIT 0x04
++#define DISPLAY_ON 0xAF
++#define START_LINE_SET 0x40
++#define PAGE_ADDRESS_SET 0xB0
++#define COLUMN_ADDRESS_HIGH 0x10
++#define COLUMN_ADDRESS_LOW 0x00
++#define RESISTOR_RATIO_START 0x20
++
++#define NUM_OF_PAGES 8
++#define NUM_OF_COLUMNS 128
++
++#define WRITE_COMMAND(x) __raw_writeb((x), (sinfo)->mmio)
++#define READ_COMMAND __raw_readb((sinfo)->mmio)
++#define WRITE_DATA(x) __raw_writeb((x), (sinfo)->mmio + (0x10000))
++#define READ_DATA __raw_readb((sinfo)->mmio + (0x10000))
++
++
++/*
++ * s1d15605fb_resize_framebuffer
++ *
++ * Free allocated space if different. Allocate on new of changed.
++ * Returns -ENOMEM if the new framebuffer can not be allocated,
++ * zero on success.
++ */
++static int s1d15605fb_resize_framebuffer(struct s1d15605fb_info *sinfo)
++{
++ struct fb_info *info = sinfo->info;
++ struct fb_fix_screeninfo *fix = &info->fix;
++ struct fb_var_screeninfo *var = &info->var;
++ unsigned int new_size;
++ void *new_vaddr;
++
++ new_size = ((var->xres_virtual * var->yres_virtual * var->bits_per_pixel) / 8);
++
++ MSG("%s: x (%d) y (%d) bpp (%d): new size 0x%08x\n", __FUNCTION__,
++ var->xres_virtual, var->yres_virtual, var->bits_per_pixel, new_size);
++
++ if (new_size == fix->smem_len)
++ return 0;
++
++ if (fix->smem_len) {
++ kfree(info->screen_base);
++ }
++
++ new_vaddr = kmalloc(new_size, GFP_KERNEL);
++
++ if (!new_vaddr) {
++ fix->smem_len = 0;
++ return -ENOMEM;
++ }
++
++ info->screen_base = new_vaddr;
++ fix->smem_start = (unsigned)new_vaddr;
++ fix->smem_len = new_size;
++ fix->line_length = (var->xres_virtual * var->bits_per_pixel) / 8;
++
++ dev_info(info->device,
++ "%luKiB frame buffer at %08lx (mapped at %p)\n",
++ (unsigned long)info->fix.smem_len / 1024,
++ (unsigned long)info->fix.smem_start,
++ info->screen_base);
++
++ return 0;
++}
++
++
++/*
++ * The s1d15605 seems to be divided into eight 128 pixel wide pages (from top to
++ * bottom) each page seems to be eight pixels high, where these eight pixels are
++ * one byte
++ */
++static void s1d15605_update(struct fb_info *info)
++{
++ struct s1d15605fb_info *sinfo = info->par;
++ int page, i, row, colmask;
++ u8 retVal, *rowPtr;
++
++ WRITE_COMMAND(START_LINE_SET);
++ for (page = 0; page < NUM_OF_PAGES; ++page) {
++ WRITE_COMMAND(PAGE_ADDRESS_SET + page);
++ WRITE_COMMAND(COLUMN_ADDRESS_HIGH);
++ WRITE_COMMAND(COLUMN_ADDRESS_LOW);
++
++ for (i = 0; i < NUM_OF_COLUMNS; ++i)
++ {
++ /* point of opportunity: optimization */
++ colmask = (1 << (i & 0x7));
++ rowPtr = (u8*)(info->screen_base);
++ rowPtr += (VIDEOWIDTH_BYTES * 8 * page);
++ rowPtr += (i >> 3);
++ retVal = 0;
++ for (row = 0; row < 8; ++row)
++ {
++ retVal = (retVal >> 1) | (((*rowPtr) & colmask) ? 0x80 : 0);
++ rowPtr += VIDEOWIDTH_BYTES;
++ }
++ WRITE_DATA(retVal);
++ }
++ }
++
++ WRITE_COMMAND(DISPLAY_ON);
++}
++
++
++/*
++ * Setting the video mode has been split into two parts.
++ * First part, xxxfb_check_var, must not write anything
++ * to hardware, it should only verify and adjust var.
++ * This means it doesn't alter par but it does use hardware
++ * data from it to check this var.
++ */
++static int s1d15605_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
++{
++ /*
++ * Some very basic checks
++ */
++ if (!var->xres)
++ var->xres = 1;
++ if (!var->yres)
++ var->yres = 1;
++ if (var->xres > var->xres_virtual)
++ var->xres_virtual = var->xres;
++ if (var->yres > var->yres_virtual)
++ var->yres_virtual = var->yres;
++
++ if(var->bits_per_pixel > VIDEODEPTH)
++ return -EINVAL;
++
++ /*
++ * Memory limit
++ */
++ if (((var->yres_virtual * var->bits_per_pixel * var->yres_virtual) >> 3) >
++ ACTUALVIDEOMEMSIZE)
++ return -ENOMEM;
++
++ /*
++ * Now that we checked it we alter var. The reason being is that the video
++ * mode passed in might not work but slight changes to it might make it
++ * work. This way we let the user know what is acceptable.
++ */
++ switch (var->bits_per_pixel) {
++ case 1:
++ var->red.offset = var->green.offset = var->blue.offset = 0;
++ var->red.length = var->green.length = var->blue.length
++ = var->bits_per_pixel;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ var->xoffset = var->yoffset = 0;
++ var->red.msb_right = var->green.msb_right = var->blue.msb_right =
++ var->transp.msb_right = 0;
++
++ return 0;
++}
++
++
++/*
++ * This routine actually sets the video mode. It's in here where we
++ * the hardware state info->par and fix which can be affected by the
++ * change in par. For this driver it doesn't do much.
++ */
++static int s1d15605_set_par(struct fb_info *info)
++{
++ int ret;
++
++ MSG("%s:\n", __func__);
++ MSG(" * resolution: %ux%u (%ux%u virtual)\n",
++ info->var.xres, info->var.yres,
++ info->var.xres_virtual, info->var.yres_virtual);
++
++ ret = s1d15605fb_resize_framebuffer(info->par);
++
++ info->fix.visual = FB_VISUAL_MONO10;
++ return ret;
++}
++
++
++/*
++ * Set a single color register. The values supplied are already
++ * rounded down to the hardware's capabilities (according to the
++ * entries in the var structure). Return != 0 for invalid regno.
++ */
++static int s1d15605_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
++ u_int transp, struct fb_info *info)
++{
++ if (regno > 1) /* no. of hw registers - we only do mono now */
++ return 1;
++
++ return 0;
++}
++
++
++/*
++ * Currently, the routine will simply shut-off the backlight and prevent
++ * updates/refreshes. Modify according to application.
++ *
++ * 0 unblank, 1 blank, 2 no vsync, 3 no hsync, 4 off
++ */
++static int s1d15605_blank(int blank, struct fb_info *info)
++{
++#ifdef CONFIG_PMAC_BACKLIGHT
++ if (blank)
++ pmac_backlight->props.power = FB_BLANK_POWERDOWN;
++ else
++ pmac_backlight->props.power = FB_BLANK_UNBLANK;
++ backlight_update_status(pmac_backlight);
++#endif
++ return 1;
++}
++
++
++/*
++ * Pan or Wrap the Display
++ *
++ * This call looks only at xoffset, yoffset and the FB_VMODE_YWRAP flag
++ */
++/*
++static int s1d15605_pan_display(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ if (var->vmode & FB_VMODE_YWRAP) {
++ if (var->yoffset < 0
++ || var->yoffset >= info->var.yres_virtual
++ || var->xoffset)
++ return -EINVAL;
++ } else {
++ if (var->xoffset + var->xres > info->var.xres_virtual ||
++ var->yoffset + var->yres > info->var.yres_virtual)
++ return -EINVAL;
++ }
++ info->var.xoffset = var->xoffset;
++ info->var.yoffset = var->yoffset;
++ if (var->vmode & FB_VMODE_YWRAP)
++ info->var.vmode |= FB_VMODE_YWRAP;
++ else
++ info->var.vmode &= ~FB_VMODE_YWRAP;
++ return 0;
++}
++*/
++
++
++static void s1d15605_copyarea(struct fb_info *info, const struct fb_copyarea *region)
++{
++ cfb_copyarea(info, region);
++ s1d15605_update(info);
++}
++
++
++static void s1d15605_fillrect (struct fb_info *info, const struct fb_fillrect *rect)
++{
++ cfb_fillrect(info, rect);
++ s1d15605_update(info);
++}
++
++
++static void s1d15605_imageblit(struct fb_info *p, const struct fb_image *image)
++{
++ cfb_imageblit(p, image);
++ s1d15605_update(p);
++}
++
++
++/*
++ * Write the users data to our framebuffer, and then trigger a psuedo DMA
++ */
++static ssize_t s1d15605_write(struct file *file, const char *buf,
++ size_t count, loff_t *ppos)
++{
++ unsigned long p = *ppos;
++ struct inode *inode = file->f_dentry->d_inode;
++ int fbidx = iminor(inode);
++ struct fb_info *info = registered_fb[fbidx];
++ int err;
++
++ if (p > info->fix.smem_len)
++ return -ENOSPC;
++ if (count >= info->fix.smem_len)
++ count = info->fix.smem_len;
++ err = 0;
++ if (count + p > info->fix.smem_len) {
++ count = info->fix.smem_len - p;
++ err = -ENOSPC;
++ }
++ if (count) {
++ char *base_addr;
++
++ base_addr = info->screen_base;
++ count -= copy_from_user(base_addr+p, buf, count);
++ *ppos += count;
++ err = -EFAULT;
++ }
++
++ s1d15605_update(info);
++
++ if (count)
++ return count;
++
++ return err;
++}
++
++#ifdef USE_PRIVATE_VMA_FXS
++static void s1d15605_vma_open(struct vm_area_struct *vma)
++{
++ // FIXME - store stats in the device data via vm_private_data
++}
++
++
++static void s1d15605_vma_close(struct vm_area_struct *vma)
++{
++ // FIXME - store stats in the device data via vm_private_data
++}
++
++
++static struct page *s1d15605_vma_nopage(struct vm_area_struct *vma,
++ unsigned long address, int *type)
++{
++ struct page *page;
++ struct fb_info *info = vma->vm_private_data;
++
++ page = virt_to_page(info->screen_base);
++ get_page(page);
++
++ // FIXME - now someone has a link to our page, start periodically blitting
++ // latest updates to the actual device.
++
++ return page;
++}
++
++
++static struct vm_operations_struct s1d15605_vm_ops = {
++ .open = s1d15605_vma_open,
++ .close = s1d15605_vma_close,
++ .nopage = s1d15605_vma_nopage
++};
++
++
++/* We don't do much here - because we have special vm_ops */
++static int s1d15605_mmap(struct fb_info *info, struct vm_area_struct *vma)
++{
++ vma->vm_ops = &s1d15605_vm_ops;
++ vma->vm_flags |= VM_RESERVED;
++ vma->vm_private_data = info;
++ s1d15605_vma_open(vma);
++
++ return 0;
++}
++#endif /* USE_PRIVATE_VMA_FXS */
++
++
++static struct fb_ops s1d15605fb_ops = {
++ .owner = THIS_MODULE,
++ .fb_check_var = s1d15605_check_var,
++ .fb_set_par = s1d15605_set_par,
++ .fb_setcolreg = s1d15605_setcolreg,
++ .fb_blank = s1d15605_blank,
++// .fb_pan_display = s1d15605_pan_display,
++ .fb_fillrect = s1d15605_fillrect,
++ .fb_copyarea = s1d15605_copyarea,
++ .fb_imageblit = s1d15605_imageblit,
++ .fb_write = s1d15605_write,
++#ifdef USE_PRIVATE_VMA_FXS
++ .fb_mmap = s1d15605_mmap,
++#endif
++};
++
++
++static void s1d15605_device_init(struct s1d15605fb_info *sinfo) {
++
++ char value;
++
++ /* release the reset line by reading the device - proto hardware */
++ value = READ_COMMAND;
++ value = READ_COMMAND;
++
++#ifdef CONFIG_MACH_KB9200
++ /* new boards have dedicated reset line */
++ gpio_set_value(sinfo->reset_pin, 1);
++#endif
++
++ /* initialize the device within 5ms */
++ WRITE_COMMAND(RESET_DISPLAY);
++ WRITE_COMMAND(LCD_BIAS_1_9);
++ WRITE_COMMAND(ADC_SELECT_REVERSE);
++ WRITE_COMMAND(COMMON_OUTPUT_NORMAL);
++ WRITE_COMMAND(V5_RESISTOR_RATIO);
++ WRITE_COMMAND(ELECTRONIC_VOLUME_SET);
++ WRITE_COMMAND(ELECTRONIC_VOLUME_INIT);
++ WRITE_COMMAND(POWER_CONTROL_SET | VOLTAGE_REGULATOR | VOLTAGE_FOLLOWER | BOOSTER_CIRCUIT);
++ WRITE_COMMAND(DISPLAY_ON);
++
++ WRITE_COMMAND(RESISTOR_RATIO_START + 4);
++ WRITE_COMMAND(ELECTRONIC_VOLUME_SET);
++ WRITE_COMMAND(0x33);
++}
++
++
++static int __init s1d15605fb_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct fb_info *info;
++ struct s1d15605fb_info *sinfo;
++ int ret;
++
++ MSG("%s\n", __func__);
++
++ if (!(info = framebuffer_alloc(sizeof(struct s1d15605fb_info), dev))) {
++ dev_err(dev, "Cannot allocate framebuffer struct\n");
++ return -ENOMEM;
++ }
++
++ sinfo = info->par;
++ sinfo->info = info;
++ sinfo->pdev = pdev;
++
++ if (pdev->num_resources < 2) {
++ dev_err(dev, "Resources unusable\n");
++ ret = -ENODEV;
++ goto free_info;
++ }
++
++ info->fbops = &s1d15605fb_ops;
++ strcpy(info->fix.id, pdev->name);
++
++ info->fix.mmio_start = pdev->resource[0].start;
++ info->fix.mmio_len = pdev->resource[0].end - pdev->resource[0].start + 1;
++ sinfo->reset_pin = pdev->resource[1].start;
++
++ ret = s1d15605fb_resize_framebuffer(sinfo);
++ if (ret < 0) {
++ dev_err(dev, "Cannot resize framebuffer: %d\n", ret);
++ goto free_fb;
++ }
++
++ if (!request_mem_region(info->fix.mmio_start,
++ info->fix.mmio_len, pdev->name)) {
++ ret = -EBUSY;
++ goto free_fb;
++ }
++
++ sinfo->mmio = ioremap(info->fix.mmio_start, info->fix.mmio_len);
++ if (!sinfo->mmio) {
++ dev_err(dev, "Cannot map LCD memory region\n");
++ goto release_mem;
++ }
++
++ s1d15605_device_init(sinfo);
++
++ ret = fb_find_mode(&info->var, info, NULL, NULL, 0, NULL, 1);
++
++ if (!ret || (ret == 4))
++ info->var = s1d15605_default;
++
++ info->fix = s1d15605_fix;
++ info->flags = FBINFO_FLAG_DEFAULT |
++/* FBINFO_HWACCEL_YPAN | */
++ FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_COPYAREA;
++
++ ret = register_framebuffer(info);
++ if (ret < 0) {
++ dev_err(dev, "Failed to register framebuffer device: %d\n", ret);
++ goto unmap_mmio;
++ }
++
++ dev_set_drvdata(dev, info);
++
++ memset(info->screen_base, 0, info->fix.smem_len);
++ info->var.activate |= FB_ACTIVATE_NOW;
++ ret = fb_set_var(info, &info->var);
++ if (ret) {
++ dev_warn(dev, "Unable to set display parameters\n");
++ }
++
++ info->var.activate &= ~(FB_ACTIVATE_FORCE | FB_ACTIVATE_NOW);
++
++ dev_dbg(dev, "%s SUCCESS\n", __func__);
++
++ dev_info(dev, "Driver $Revision: 1.1 $\n");
++
++ return 0;
++
++unmap_mmio:
++ iounmap(sinfo->mmio);
++release_mem:
++ release_mem_region(info->fix.mmio_start, info->fix.mmio_len);
++free_fb:
++ kfree(info->screen_base);
++
++free_info:
++ framebuffer_release(info);
++
++ dev_dbg(dev, "%s FAILED\n", __func__);
++ return ret;
++}
++
++
++static int __exit s1d15605fb_remove(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct fb_info *info = dev_get_drvdata(dev);
++ struct s1d15605fb_info *sinfo = info->par;
++
++ if (!sinfo)
++ return 0;
++
++ unregister_framebuffer(info);
++
++ iounmap(sinfo->mmio);
++ release_mem_region(info->fix.mmio_start, info->fix.mmio_len);
++
++ kfree(info->screen_base);
++
++ dev_set_drvdata(dev, NULL);
++ framebuffer_release(info);
++ return 0;
++}
++
++
++static struct platform_driver s1d15605fb_driver = {
++ .remove = __exit_p(s1d15605fb_remove),
++ .driver = {
++ .name = "s1d15605fb",
++ .owner = THIS_MODULE,
++ },
++};
++
++
++static int __init s1d15605fb_init(void)
++{
++ return platform_driver_probe(&s1d15605fb_driver, s1d15605fb_probe);
++}
++
++
++static void __exit s1d15605fb_exit(void)
++{
++ platform_driver_unregister(&s1d15605fb_driver);
++}
++
++
++module_init(s1d15605fb_init);
++module_exit(s1d15605fb_exit);
++
++
++MODULE_AUTHOR("KwikByte");
++MODULE_DESCRIPTION("Epson S1D15605 LCD Controller framebuffer driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
+index 52dff40..acb4bbf 100644
+--- a/drivers/watchdog/Kconfig
++++ b/drivers/watchdog/Kconfig
+@@ -66,6 +66,14 @@ config AT91RM9200_WATCHDOG
+ Watchdog timer embedded into AT91RM9200 chips. This will reboot your
+ system when the timeout is reached.
+
++config AT91SAM9_WATCHDOG
++ tristate "AT91SAM9 watchdog"
++ depends on ARCH_AT91 && !ARCH_AT91RM9200
++ select WATCHDOG_NOWAYOUT
++ help
++ Watchdog timer embedded into AT91SAM9 chips. This will reboot your
++ system when the timeout is reached.
++
+ config 21285_WATCHDOG
+ tristate "DC21285 watchdog"
+ depends on FOOTBRIDGE
+diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
+index 87483cc..26babbc 100644
+--- a/drivers/watchdog/Makefile
++++ b/drivers/watchdog/Makefile
+@@ -26,6 +26,7 @@ obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
+
+ # ARM Architecture
+ obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
++obj-$(CONFIG_AT91SAM9_WATCHDOG) += at91sam9_wdt.o
+ obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o
+ obj-$(CONFIG_21285_WATCHDOG) += wdt285.o
+ obj-$(CONFIG_977_WATCHDOG) += wdt977.o
+diff --git a/include/asm-arm/arch-at91/at91_lcdc.h b/include/asm-arm/arch-at91/at91_lcdc.h
+deleted file mode 100644
+index ab040a4..0000000
+--- a/include/asm-arm/arch-at91/at91_lcdc.h
++++ /dev/null
+@@ -1,148 +0,0 @@
+-/*
+- * include/asm-arm/arch-at91/at91_lcdc.h
+- *
+- * LCD Controller (LCDC).
+- * Based on AT91SAM9261 datasheet revision E.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- */
+-
+-#ifndef AT91_LCDC_H
+-#define AT91_LCDC_H
+-
+-#define AT91_LCDC_DMABADDR1 0x00 /* DMA Base Address Register 1 */
+-#define AT91_LCDC_DMABADDR2 0x04 /* DMA Base Address Register 2 */
+-#define AT91_LCDC_DMAFRMPT1 0x08 /* DMA Frame Pointer Register 1 */
+-#define AT91_LCDC_DMAFRMPT2 0x0c /* DMA Frame Pointer Register 2 */
+-#define AT91_LCDC_DMAFRMADD1 0x10 /* DMA Frame Address Register 1 */
+-#define AT91_LCDC_DMAFRMADD2 0x14 /* DMA Frame Address Register 2 */
+-
+-#define AT91_LCDC_DMAFRMCFG 0x18 /* DMA Frame Configuration Register */
+-#define AT91_LCDC_FRSIZE (0x7fffff << 0) /* Frame Size */
+-#define AT91_LCDC_BLENGTH (0x7f << 24) /* Burst Length */
+-
+-#define AT91_LCDC_DMACON 0x1c /* DMA Control Register */
+-#define AT91_LCDC_DMAEN (0x1 << 0) /* DMA Enable */
+-#define AT91_LCDC_DMARST (0x1 << 1) /* DMA Reset */
+-#define AT91_LCDC_DMABUSY (0x1 << 2) /* DMA Busy */
+-
+-#define AT91_LCDC_LCDCON1 0x0800 /* LCD Control Register 1 */
+-#define AT91_LCDC_BYPASS (1 << 0) /* Bypass lcd_dotck divider */
+-#define AT91_LCDC_CLKVAL (0x1ff << 12) /* Clock Divider */
+-#define AT91_LCDC_LINCNT (0x7ff << 21) /* Line Counter */
+-
+-#define AT91_LCDC_LCDCON2 0x0804 /* LCD Control Register 2 */
+-#define AT91_LCDC_DISTYPE (3 << 0) /* Display Type */
+-#define AT91_LCDC_DISTYPE_STNMONO (0 << 0)
+-#define AT91_LCDC_DISTYPE_STNCOLOR (1 << 0)
+-#define AT91_LCDC_DISTYPE_TFT (2 << 0)
+-#define AT91_LCDC_SCANMOD (1 << 2) /* Scan Mode */
+-#define AT91_LCDC_SCANMOD_SINGLE (0 << 2)
+-#define AT91_LCDC_SCANMOD_DUAL (1 << 2)
+-#define AT91_LCDC_IFWIDTH (3 << 3) /*Interface Width */
+-#define AT91_LCDC_IFWIDTH_4 (0 << 3)
+-#define AT91_LCDC_IFWIDTH_8 (1 << 3)
+-#define AT91_LCDC_IFWIDTH_16 (2 << 3)
+-#define AT91_LCDC_PIXELSIZE (7 << 5) /* Bits per pixel */
+-#define AT91_LCDC_PIXELSIZE_1 (0 << 5)
+-#define AT91_LCDC_PIXELSIZE_2 (1 << 5)
+-#define AT91_LCDC_PIXELSIZE_4 (2 << 5)
+-#define AT91_LCDC_PIXELSIZE_8 (3 << 5)
+-#define AT91_LCDC_PIXELSIZE_16 (4 << 5)
+-#define AT91_LCDC_PIXELSIZE_24 (5 << 5)
+-#define AT91_LCDC_INVVD (1 << 8) /* LCD Data polarity */
+-#define AT91_LCDC_INVVD_NORMAL (0 << 8)
+-#define AT91_LCDC_INVVD_INVERTED (1 << 8)
+-#define AT91_LCDC_INVFRAME (1 << 9 ) /* LCD VSync polarity */
+-#define AT91_LCDC_INVFRAME_NORMAL (0 << 9)
+-#define AT91_LCDC_INVFRAME_INVERTED (1 << 9)
+-#define AT91_LCDC_INVLINE (1 << 10) /* LCD HSync polarity */
+-#define AT91_LCDC_INVLINE_NORMAL (0 << 10)
+-#define AT91_LCDC_INVLINE_INVERTED (1 << 10)
+-#define AT91_LCDC_INVCLK (1 << 11) /* LCD dotclk polarity */
+-#define AT91_LCDC_INVCLK_NORMAL (0 << 11)
+-#define AT91_LCDC_INVCLK_INVERTED (1 << 11)
+-#define AT91_LCDC_INVDVAL (1 << 12) /* LCD dval polarity */
+-#define AT91_LCDC_INVDVAL_NORMAL (0 << 12)
+-#define AT91_LCDC_INVDVAL_INVERTED (1 << 12)
+-#define AT91_LCDC_CLKMOD (1 << 15) /* LCD dotclk mode */
+-#define AT91_LCDC_CLKMOD_ACTIVEDISPLAY (0 << 15)
+-#define AT91_LCDC_CLKMOD_ALWAYSACTIVE (1 << 15)
+-#define AT91_LCDC_MEMOR (1 << 31) /* Memory Ordering Format */
+-#define AT91_LCDC_MEMOR_BIG (0 << 31)
+-#define AT91_LCDC_MEMOR_LITTLE (1 << 31)
+-
+-#define AT91_LCDC_TIM1 0x0808 /* LCD Timing Register 1 */
+-#define AT91_LCDC_VFP (0xff << 0) /* Vertical Front Porch */
+-#define AT91_LCDC_VBP (0xff << 8) /* Vertical Back Porch */
+-#define AT91_LCDC_VPW (0x3f << 16) /* Vertical Synchronization Pulse Width */
+-#define AT91_LCDC_VHDLY (0xf << 24) /* Vertical to Horizontal Delay */
+-
+-#define AT91_LCDC_TIM2 0x080c /* LCD Timing Register 2 */
+-#define AT91_LCDC_HBP (0xff << 0) /* Horizontal Back Porch */
+-#define AT91_LCDC_HPW (0x3f << 8) /* Horizontal Synchronization Pulse Width */
+-#define AT91_LCDC_HFP (0x7ff << 21) /* Horizontal Front Porch */
+-
+-#define AT91_LCDC_LCDFRMCFG 0x0810 /* LCD Frame Configuration Register */
+-#define AT91_LCDC_LINEVAL (0x7ff << 0) /* Vertical Size of LCD Module */
+-#define AT91_LCDC_HOZVAL (0x7ff << 21) /* Horizontal Size of LCD Module */
+-
+-#define AT91_LCDC_FIFO 0x0814 /* LCD FIFO Register */
+-#define AT91_LCDC_FIFOTH (0xffff) /* FIFO Threshold */
+-
+-#define AT91_LCDC_DP1_2 0x081c /* Dithering Pattern DP1_2 Register */
+-#define AT91_LCDC_DP4_7 0x0820 /* Dithering Pattern DP4_7 Register */
+-#define AT91_LCDC_DP3_5 0x0824 /* Dithering Pattern DP3_5 Register */
+-#define AT91_LCDC_DP2_3 0x0828 /* Dithering Pattern DP2_3 Register */
+-#define AT91_LCDC_DP5_7 0x082c /* Dithering Pattern DP5_7 Register */
+-#define AT91_LCDC_DP3_4 0x0830 /* Dithering Pattern DP3_4 Register */
+-#define AT91_LCDC_DP4_5 0x0834 /* Dithering Pattern DP4_5 Register */
+-#define AT91_LCDC_DP6_7 0x0838 /* Dithering Pattern DP6_7 Register */
+-#define AT91_LCDC_DP1_2_VAL (0xff)
+-#define AT91_LCDC_DP4_7_VAL (0xfffffff)
+-#define AT91_LCDC_DP3_5_VAL (0xfffff)
+-#define AT91_LCDC_DP2_3_VAL (0xfff)
+-#define AT91_LCDC_DP5_7_VAL (0xfffffff)
+-#define AT91_LCDC_DP3_4_VAL (0xffff)
+-#define AT91_LCDC_DP4_5_VAL (0xfffff)
+-#define AT91_LCDC_DP6_7_VAL (0xfffffff)
+-
+-#define AT91_LCDC_PWRCON 0x083c /* Power Control Register */
+-#define AT91_LCDC_PWR (1 << 0) /* LCD Module Power Control */
+-#define AT91_LCDC_GUARDT (0x7f << 1) /* Delay in Frame Period */
+-#define AT91_LCDC_BUSY (1 << 31) /* LCD Busy */
+-
+-#define AT91_LCDC_CONTRAST_CTR 0x0840 /* Contrast Control Register */
+-#define AT91_LCDC_PS (3 << 0) /* Contrast Counter Prescaler */
+-#define AT91_LCDC_PS_DIV1 (0 << 0)
+-#define AT91_LCDC_PS_DIV2 (1 << 0)
+-#define AT91_LCDC_PS_DIV4 (2 << 0)
+-#define AT91_LCDC_PS_DIV8 (3 << 0)
+-#define AT91_LCDC_POL (1 << 2) /* Polarity of output Pulse */
+-#define AT91_LCDC_POL_NEGATIVE (0 << 2)
+-#define AT91_LCDC_POL_POSITIVE (1 << 2)
+-#define AT91_LCDC_ENA (1 << 3) /* PWM generator Control */
+-#define AT91_LCDC_ENA_PWMDISABLE (0 << 3)
+-#define AT91_LCDC_ENA_PWMENABLE (1 << 3)
+-
+-#define AT91_LCDC_CONTRAST_VAL 0x0844 /* Contrast Value Register */
+-#define AT91_LCDC_CVAL (0xff) /* PWM compare value */
+-
+-#define AT91_LCDC_IER 0x0848 /* Interrupt Enable Register */
+-#define AT91_LCDC_IDR 0x084c /* Interrupt Disable Register */
+-#define AT91_LCDC_IMR 0x0850 /* Interrupt Mask Register */
+-#define AT91_LCDC_ISR 0x0854 /* Interrupt Enable Register */
+-#define AT91_LCDC_ICR 0x0858 /* Interrupt Clear Register */
+-#define AT91_LCDC_LNI (1 << 0) /* Line Interrupt */
+-#define AT91_LCDC_LSTLNI (1 << 1) /* Last Line Interrupt */
+-#define AT91_LCDC_EOFI (1 << 2) /* DMA End Of Frame Interrupt */
+-#define AT91_LCDC_UFLWI (1 << 4) /* FIFO Underflow Interrupt */
+-#define AT91_LCDC_OWRI (1 << 5) /* FIFO Overwrite Interrupt */
+-#define AT91_LCDC_MERI (1 << 6) /* DMA Memory Error Interrupt */
+-
+-#define AT91_LCDC_LUT_(n) (0x0c00 + ((n)*4)) /* Palette Entry 0..255 */
+-
+-#endif
+diff --git a/include/asm-arm/arch-at91/at91_pmc.h b/include/asm-arm/arch-at91/at91_pmc.h
+index 33ff5b6..0469e71 100644
+--- a/include/asm-arm/arch-at91/at91_pmc.h
++++ b/include/asm-arm/arch-at91/at91_pmc.h
+@@ -37,7 +37,9 @@
+ #define AT91_PMC_PCDR (AT91_PMC + 0x14) /* Peripheral Clock Disable Register */
+ #define AT91_PMC_PCSR (AT91_PMC + 0x18) /* Peripheral Clock Status Register */
+
+-#define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register */
++#define AT91_CKGR_UCKR (AT91_PMC + 0x1C) /* UTMI Clock Register [SAM9RL only] */
++
++#define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register [not on SAM9RL] */
+ #define AT91_PMC_MOSCEN (1 << 0) /* Main Oscillator Enable */
+ #define AT91_PMC_OSCBYPASS (1 << 1) /* Oscillator Bypass [AT91SAM926x only] */
+ #define AT91_PMC_OSCOUNT (0xff << 8) /* Main Oscillator Start-up Time */
+diff --git a/include/asm-arm/arch-at91/at91_twi.h b/include/asm-arm/arch-at91/at91_twi.h
+index ca9a907..f9f2e3c 100644
+--- a/include/asm-arm/arch-at91/at91_twi.h
++++ b/include/asm-arm/arch-at91/at91_twi.h
+@@ -21,6 +21,8 @@
+ #define AT91_TWI_STOP (1 << 1) /* Send a Stop Condition */
+ #define AT91_TWI_MSEN (1 << 2) /* Master Transfer Enable */
+ #define AT91_TWI_MSDIS (1 << 3) /* Master Transfer Disable */
++#define AT91_TWI_SVEN (1 << 4) /* Slave Transfer Enable [SAM9260 only] */
++#define AT91_TWI_SVDIS (1 << 5) /* Slave Transfer Disable [SAM9260 only] */
+ #define AT91_TWI_SWRST (1 << 7) /* Software Reset */
+
+ #define AT91_TWI_MMR 0x04 /* Master Mode Register */
+@@ -32,6 +34,9 @@
+ #define AT91_TWI_MREAD (1 << 12) /* Master Read Direction */
+ #define AT91_TWI_DADR (0x7f << 16) /* Device Address */
+
++#define AT91_TWI_SMR 0x08 /* Slave Mode Register [SAM9260 only] */
++#define AT91_TWI_SADR (0x7f << 16) /* Slave Address */
++
+ #define AT91_TWI_IADR 0x0c /* Internal Address Register */
+
+ #define AT91_TWI_CWGR 0x10 /* Clock Waveform Generator Register */
+@@ -43,9 +48,15 @@
+ #define AT91_TWI_TXCOMP (1 << 0) /* Transmission Complete */
+ #define AT91_TWI_RXRDY (1 << 1) /* Receive Holding Register Ready */
+ #define AT91_TWI_TXRDY (1 << 2) /* Transmit Holding Register Ready */
++#define AT91_TWI_SVREAD (1 << 3) /* Slave Read [SAM9260 only] */
++#define AT91_TWI_SVACC (1 << 4) /* Slave Access [SAM9260 only] */
++#define AT91_TWI_GACC (1 << 5) /* General Call Access [SAM9260 only] */
+ #define AT91_TWI_OVRE (1 << 6) /* Overrun Error [AT91RM9200 only] */
+ #define AT91_TWI_UNRE (1 << 7) /* Underrun Error [AT91RM9200 only] */
+ #define AT91_TWI_NACK (1 << 8) /* Not Acknowledged */
++#define AT91_TWI_ARBLST (1 << 9) /* Arbitration Lost [SAM9260 only] */
++#define AT91_TWI_SCLWS (1 << 10) /* Clock Wait State [SAM9260 only] */
++#define AT91_TWI_EOSACC (1 << 11) /* End of Slave Address [SAM9260 only] */
+
+ #define AT91_TWI_IER 0x24 /* Interrupt Enable Register */
+ #define AT91_TWI_IDR 0x28 /* Interrupt Disable Register */
+diff --git a/include/asm-arm/arch-at91/at91sam9260_matrix.h b/include/asm-arm/arch-at91/at91sam9260_matrix.h
+index aacb1e9..a8e9fec 100644
+--- a/include/asm-arm/arch-at91/at91sam9260_matrix.h
++++ b/include/asm-arm/arch-at91/at91sam9260_matrix.h
+@@ -67,7 +67,7 @@
+ #define AT91_MATRIX_CS4A (1 << 4) /* Chip Select 4 Assignment */
+ #define AT91_MATRIX_CS4A_SMC (0 << 4)
+ #define AT91_MATRIX_CS4A_SMC_CF1 (1 << 4)
+-#define AT91_MATRIX_CS5A (1 << 5 ) /* Chip Select 5 Assignment */
++#define AT91_MATRIX_CS5A (1 << 5) /* Chip Select 5 Assignment */
+ #define AT91_MATRIX_CS5A_SMC (0 << 5)
+ #define AT91_MATRIX_CS5A_SMC_CF2 (1 << 5)
+ #define AT91_MATRIX_DBPUC (1 << 8) /* Data Bus Pull-up Configuration */
+diff --git a/include/asm-arm/arch-at91/board.h b/include/asm-arm/arch-at91/board.h
+index 7905496..9de42e9 100644
+--- a/include/asm-arm/arch-at91/board.h
++++ b/include/asm-arm/arch-at91/board.h
+@@ -35,6 +35,7 @@
+ #include <linux/device.h>
+ #include <linux/i2c.h>
+ #include <linux/spi/spi.h>
++#include <linux/leds.h>
+
+ /* USB Device */
+ struct at91_udc_data {
+@@ -126,6 +127,9 @@ struct atmel_ac97_data {
+ };
+ extern void __init at91_add_device_ac97(struct atmel_ac97_data *data);
+
++ /* ISI */
++extern void __init at91_add_device_isi(void);
++
+ /* LEDs */
+ extern u8 at91_leds_cpu;
+ extern u8 at91_leds_timer;
+@@ -133,5 +137,6 @@ extern void __init at91_init_leds(u8 cpu_led, u8 timer_led);
+
+ /* FIXME: this needs a better location, but gets stuff building again */
+ extern int at91_suspend_entering_slow_clock(void);
++extern void __init at91_gpio_leds(struct gpio_led *leds, int nr);
+
+ #endif
+diff --git a/include/asm-arm/arch-at91/entry-macro.S b/include/asm-arm/arch-at91/entry-macro.S
+index cc1d850..1005eee 100644
+--- a/include/asm-arm/arch-at91/entry-macro.S
++++ b/include/asm-arm/arch-at91/entry-macro.S
+@@ -17,13 +17,13 @@
+ .endm
+
+ .macro get_irqnr_preamble, base, tmp
++ ldr \base, =(AT91_VA_BASE_SYS + AT91_AIC) @ base virtual address of AIC peripheral
+ .endm
+
+ .macro arch_ret_to_user, tmp1, tmp2
+ .endm
+
+ .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
+- ldr \base, =(AT91_VA_BASE_SYS + AT91_AIC) @ base virtual address of AIC peripheral
+ ldr \irqnr, [\base, #(AT91_AIC_IVR - AT91_AIC)] @ read IRQ vector register: de-asserts nIRQ to processor (and clears interrupt)
+ ldr \irqstat, [\base, #(AT91_AIC_ISR - AT91_AIC)] @ read interrupt source number
+ teq \irqstat, #0 @ ISR is 0 when no current interrupt, or spurious interrupt
+diff --git a/include/asm-arm/arch-at91/ics1523.h b/include/asm-arm/arch-at91/ics1523.h
+new file mode 100644
+index 0000000..f281f5d
+--- /dev/null
++++ b/include/asm-arm/arch-at91/ics1523.h
+@@ -0,0 +1,154 @@
++//*----------------------------------------------------------------------------
++//* ATMEL Microcontroller Software Support - ROUSSET -
++//*----------------------------------------------------------------------------
++//* The software is delivered "AS IS" without warranty or condition of any
++//* kind, either express, implied or statutory. This includes without
++//* limitation any warranty or condition with respect to merchantability or
++//* fitness for any particular purpose, or against the infringements of
++//* intellectual property rights of others.
++//*----------------------------------------------------------------------------
++//* File Name : ics1523.h
++//* Object : Clock Generator Prototyping File.
++//*
++//* 1.0 08/28/02 ED : Creation
++//* 1.2 13/01/03 FB : Update on lib V3
++//*----------------------------------------------------------------------------
++
++#ifndef ics1523_h
++#define ics1523_h
++
++/*-------------------------------------------*/
++/* ICS1523 TWI Serial Clock Definition */
++/*-------------------------------------------*/
++
++#define ICS_MIN_CLOCK 100 /* Min Frequency Access Clock KHz */
++#define ICS_MAX_CLOCK 400 /* Max Frequency Access Clock KHz */
++#define ICS_TRANSFER_RATE ICS_MAX_CLOCK /* Transfer speed to apply */
++
++#define ICS_WRITE_CLK_PNB 30 /* TWCK Clock Periods required to write */
++#define ICS_READ_CLK_PNB 40 /* TWCK Clock Periods required to read */
++
++/*-------------------------------------------*/
++/* ICS1523 Write Operation Definition */
++/*-------------------------------------------*/
++
++#define ICS1523_ACCESS_OK 0 /* OK */
++#define ICS1523_ACCESS_ERROR -1 /* NOK */
++
++/*-------------------------------------------*/
++/* ICS1523 Device Addresses Definition */
++/*-------------------------------------------*/
++
++#define ICS_ADDR 0x26 /* Device Address */
++
++/*--------------------------------------------------*/
++/* ICS1523 Registers Internal Addresses Definition */
++/*--------------------------------------------------*/
++
++#define ICS_ICR 0x0 /* Input Control Register */
++#define ICS_LCR 0x1 /* Loop Control Register */
++#define ICS_FD0 0x2 /* PLL FeedBack Divider LSBs */
++#define ICS_FD1 0x3 /* PLL FeedBack Divider MSBs */
++#define ICS_DPAO 0x4 /* Dynamic Phase Aligner Offset */
++#define ICS_DPAC 0x5 /* Dynamic Phase Aligner Resolution */
++#define ICS_OE 0x6 /* Output Enables Register */
++#define ICS_OD 0x7 /* Osc Divider Register */
++#define ICS_SWRST 0x8 /* DPA & PLL Reset Register */
++#define ICS_VID 0x10 /* Chip Version Register */
++#define ICS_RID 0x11 /* Chip Revision Register */
++#define ICS_SR 0x12 /* Status Register */
++
++/*------------------------------------------------------*/
++/* ICS1523 Input Control Register Bits Definition */
++/*------------------------------------------------------*/
++
++#define ICS_PDEN 0x1 /* Phase Detector Enable */
++#define ICS_PDPOL 0x2 /* Phase Detector Enable Polarity */
++#define ICS_REFPOL 0x4 /* External Reference Polarity */
++#define ICS_FBKPOL 0x8 /* External Feedback Polarity */
++#define ICS_FBKSEL 0x10 /* External Feedback Select */
++#define ICS_FUNCSEL 0x20 /* Function Out Select */
++#define ICS_ENPLS 0x40 /* Enable PLL Lock/Ref Status Output */
++#define ICS_ENDLS 0x80 /* Enable DPA Lock/Ref Status Output */
++
++/*-----------------------------------------------------*/
++/* ICS1523 Loop Control Register Bits Definition */
++/*-----------------------------------------------------*/
++
++#define ICS_PFD 0x7 /* Phase Detector Gain */
++#define ICS_PSD 0x30 /* Post-Scaler Divider */
++
++/*----------------------------------------------------*/
++/* ICS1523 PLL FeedBack Divider LSBs Definition */
++/*----------------------------------------------------*/
++
++#define ICS_FBDL 0xFF /* PLL FeedBack Divider LSBs */
++
++/*----------------------------------------------------*/
++/* ICS1523 PLL FeedBack Divider MSBs Definition */
++/*----------------------------------------------------*/
++
++#define ICS_FBDM 0xF /* PLL FeedBack Divider MSBs */
++
++/*------------------------------------------------------------*/
++/* ICS1523 Dynamic Phase Aligner Offset Bits Definition */
++/*------------------------------------------------------------*/
++
++#define ICS_DPAOS 0x2F /* Dynamic Phase Aligner Offset */
++#define ICS_FILSEL 0x80 /* Loop Filter Select */
++
++/*----------------------------------------------------------------*/
++/* ICS1523 Dynamic Phase Aligner Resolution Bits Definition */
++/*----------------------------------------------------------------*/
++
++#define ICS_DPARES 0x3 /* Dynamic Phase Aligner Resolution */
++#define ICS_MMREV 0xFC /* Metal Mask Revision Number */
++
++/*-------------------------------------------------------*/
++/* ICS1523 Output Enables Register Bits Definition */
++/*-------------------------------------------------------*/
++
++#define ICS_OEPCK 0x1 /* Output Enable for PECL PCLK Outputs */
++#define ICS_OETCK 0x2 /* Output Enable for STTL CLK Output */
++#define ICS_OEP2 0x4 /* Output Enable for PECL CLK/2 Outputs */
++#define ICS_OET2 0x8 /* Output Enable for STTL CLK/2 Output */
++#define ICS_OEF 0x10 /* Output Enable for STTL FUNC Output */
++#define ICS_CLK2INV 0x20 /* CLK/2 Invert */
++#define ICS_OSCL 0xC0 /* SSTL Clock Scaler */
++
++/*----------------------------------------------------*/
++/* ICS1523 Osc Divider Register Bits Definition */
++/*----------------------------------------------------*/
++
++#define ICS_OSCDIV 0x7F /* Oscillator Divider Modulus */
++#define ICS_INSEL 0x80 /* Input Select */
++
++/*---------------------------------------------------*/
++/* ICS1523 DPA & PLL Reset Register Definition */
++/*---------------------------------------------------*/
++
++#define ICS_DPAR 0x0A /* DPA Reset Command */
++#define ICS_PLLR 0x50 /* PLL Reset Command */
++
++/*------------------------------------------------*/
++/* ICS1523 Chip Version Register Definition */
++/*------------------------------------------------*/
++
++#define ICS_CHIPV 0xFF /* Chip Version */
++
++/*-------------------------------------------------*/
++/* ICS1523 Chip Revision Register Definition */
++/*-------------------------------------------------*/
++
++#define ICS_CHIPR 0xFF /* Chip Revision */
++
++/*------------------------------------------*/
++/* ICS1523 Status Register Definition */
++/*------------------------------------------*/
++
++#define ICS_DPALOCK 0x1 /* DPA Lock Status */
++#define ICS_PLLLOCK 0x2 /* PLL Lock Status */
++
++int at91_ics1523_init(void);
++
++#endif /* ics1523_h */
+diff --git a/include/asm-arm/arch-at91/spi.h b/include/asm-arm/arch-at91/spi.h
+new file mode 100644
+index 0000000..1385466
+--- /dev/null
++++ b/include/asm-arm/arch-at91/spi.h
+@@ -0,0 +1,54 @@
++/*
++ * Serial Peripheral Interface (SPI) driver for the Atmel AT91RM9200
++ *
++ * (c) SAN People (Pty) Ltd
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++#ifndef AT91_LEGACY_SPI_H
++#define AT91_LEGACY_SPI_H
++
++#define SPI_MAJOR 153 /* registered device number */
++
++#define DEFAULT_SPI_CLK 6000000
++
++
++/* Maximum number of buffers in a single SPI transfer.
++ * DataFlash uses maximum of 2
++ * spidev interface supports up to 8.
++ */
++#define MAX_SPI_TRANSFERS 8
++#define NR_SPI_DEVICES 4 /* number of devices on SPI bus */
++
++/*
++ * Describes the buffers for a SPI transfer.
++ * A transmit & receive buffer must be specified for each transfer
++ */
++struct spi_transfer_list {
++ void* tx[MAX_SPI_TRANSFERS]; /* transmit */
++ int txlen[MAX_SPI_TRANSFERS];
++ void* rx[MAX_SPI_TRANSFERS]; /* receive */
++ int rxlen[MAX_SPI_TRANSFERS];
++ int nr_transfers; /* number of transfers */
++ int curr; /* current transfer */
++};
++
++struct spi_local {
++ unsigned int pcs; /* Peripheral Chip Select value */
++
++ struct spi_transfer_list *xfers; /* current transfer list */
++ dma_addr_t tx, rx; /* DMA address for current transfer */
++ dma_addr_t txnext, rxnext; /* DMA address for next transfer */
++};
++
++
++/* Exported functions */
++extern void spi_access_bus(short device);
++extern void spi_release_bus(short device);
++extern int spi_transfer(struct spi_transfer_list* list);
++
++#endif
+diff --git a/include/asm-arm/arch-ks8695/devices.h b/include/asm-arm/arch-ks8695/devices.h
+index b0364dc..7ad2c65 100644
+--- a/include/asm-arm/arch-ks8695/devices.h
++++ b/include/asm-arm/arch-ks8695/devices.h
+@@ -18,6 +18,11 @@ extern void __init ks8695_add_device_wan(void);
+ extern void __init ks8695_add_device_lan(void);
+ extern void __init ks8695_add_device_hpna(void);
+
++ /* LEDs */
++extern short ks8695_leds_cpu;
++extern short ks8695_leds_timer;
++extern void __init ks8695_init_leds(u8 cpu_led, u8 timer_led);
++
+ /* PCI */
+ #define KS8695_MODE_PCI 0
+ #define KS8695_MODE_MINIPCI 1
+diff --git a/include/asm-arm/arch-ks8695/regs-gpio.h b/include/asm-arm/arch-ks8695/regs-gpio.h
+index 57fcf9f..6b95d77 100644
+--- a/include/asm-arm/arch-ks8695/regs-gpio.h
++++ b/include/asm-arm/arch-ks8695/regs-gpio.h
+@@ -49,5 +49,7 @@
+ #define IOPC_TM_FALLING (4) /* Falling Edge Detection */
+ #define IOPC_TM_EDGE (6) /* Both Edge Detection */
+
++/* Port Data Register */
++#define IOPD_(x) (1 << (x)) /* Signal Level of GPIO Pin x */
+
+ #endif
+diff --git a/include/linux/clk.h b/include/linux/clk.h
+index 5ca8c6f..1a31d7a 100644
+--- a/include/linux/clk.h
++++ b/include/linux/clk.h
+@@ -121,4 +121,24 @@ int clk_set_parent(struct clk *clk, struct clk *parent);
+ */
+ struct clk *clk_get_parent(struct clk *clk);
+
++/**
++ * clk_must_disable - report whether a clock's users must disable it
++ * @clk: one node in the clock tree
++ *
++ * This routine returns true only if the upcoming system state requires
++ * disabling the specified clock.
++ *
++ * It's common for platform power states to constrain certain clocks (and
++ * their descendants) to be unavailable, while other states allow that
++ * clock to be active. A platform's power states often include an "all on"
++ * mode; system wide sleep states like "standby" or "suspend-to-RAM"; and
++ * operating states which sacrifice functionality for lower power usage.
++ *
++ * The constraint value is commonly tested in device driver suspend(), to
++ * leave clocks active if they are needed for features like wakeup events.
++ * On platforms that support reduced functionality operating states, the
++ * constraint may also need to be tested during resume() and probe() calls.
++ */
++int clk_must_disable(struct clk *clk);
++
+ #endif
+diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h
+index 88c8140..32985d9 100644
+--- a/include/linux/i2c-id.h
++++ b/include/linux/i2c-id.h
+@@ -207,6 +207,7 @@
+
+ /* --- PCA 9564 based algorithms */
+ #define I2C_HW_A_ISA 0x1a0000 /* generic ISA Bus interface card */
++#define I2C_HW_A_PLAT 0x1a0001 /* generic platform_bus interface */
+
+ /* --- ACPI Embedded controller algorithms */
+ #define I2C_HW_ACPI_EC 0x1f0000
+diff --git a/sound/soc/at91/eti_b1_wm8731.c b/sound/soc/at91/eti_b1_wm8731.c
+index 820a676..8da5884 100644
+--- a/sound/soc/at91/eti_b1_wm8731.c
++++ b/sound/soc/at91/eti_b1_wm8731.c
+@@ -34,8 +34,7 @@
+ #include <sound/soc.h>
+ #include <sound/soc-dapm.h>
+
+-#include <asm/arch/hardware.h>
+-#include <asm/arch/at91_pio.h>
++#include <asm/hardware.h>
+ #include <asm/arch/gpio.h>
+
+ #include "../codecs/wm8731.h"
+@@ -48,13 +47,6 @@
+ #define DBG(x...)
+ #endif
+
+-#define AT91_PIO_TF1 (1 << (AT91_PIN_PB6 - PIN_BASE) % 32)
+-#define AT91_PIO_TK1 (1 << (AT91_PIN_PB7 - PIN_BASE) % 32)
+-#define AT91_PIO_TD1 (1 << (AT91_PIN_PB8 - PIN_BASE) % 32)
+-#define AT91_PIO_RD1 (1 << (AT91_PIN_PB9 - PIN_BASE) % 32)
+-#define AT91_PIO_RK1 (1 << (AT91_PIN_PB10 - PIN_BASE) % 32)
+-#define AT91_PIO_RF1 (1 << (AT91_PIN_PB11 - PIN_BASE) % 32)
+-
+ static struct clk *pck1_clk;
+ static struct clk *pllb_clk;
+
+@@ -277,7 +269,6 @@ static struct platform_device *eti_b1_snd_device;
+ static int __init eti_b1_init(void)
+ {
+ int ret;
+- u32 ssc_pio_lines;
+ struct at91_ssc_periph *ssc = eti_b1_dai.cpu_dai->private_data;
+
+ if (!request_mem_region(AT91RM9200_BASE_SSC1, SZ_16K, "soc-audio")) {
+@@ -311,19 +302,12 @@ static int __init eti_b1_init(void)
+ goto fail_io_unmap;
+ }
+
+- ssc_pio_lines = AT91_PIO_TF1 | AT91_PIO_TK1 | AT91_PIO_TD1
+- | AT91_PIO_RD1 /* | AT91_PIO_RK1 */ | AT91_PIO_RF1;
+-
+- /* Reset all PIO registers and assign lines to peripheral A */
+- at91_sys_write(AT91_PIOB + PIO_PDR, ssc_pio_lines);
+- at91_sys_write(AT91_PIOB + PIO_ODR, ssc_pio_lines);
+- at91_sys_write(AT91_PIOB + PIO_IFDR, ssc_pio_lines);
+- at91_sys_write(AT91_PIOB + PIO_CODR, ssc_pio_lines);
+- at91_sys_write(AT91_PIOB + PIO_IDR, ssc_pio_lines);
+- at91_sys_write(AT91_PIOB + PIO_MDDR, ssc_pio_lines);
+- at91_sys_write(AT91_PIOB + PIO_PUDR, ssc_pio_lines);
+- at91_sys_write(AT91_PIOB + PIO_ASR, ssc_pio_lines);
+- at91_sys_write(AT91_PIOB + PIO_OWDR, ssc_pio_lines);
++ at91_set_A_periph(AT91_PIN_PB6, 0); /* TF1 */
++ at91_set_A_periph(AT91_PIN_PB7, 0); /* TK1 */
++ at91_set_A_periph(AT91_PIN_PB8, 0); /* TD1 */
++ at91_set_A_periph(AT91_PIN_PB9, 0); /* RD1 */
++/* at91_set_A_periph(AT91_PIN_PB10, 0);*/ /* RK1 */
++ at91_set_A_periph(AT91_PIN_PB11, 0); /* RF1 */
+
+ /*
+ * Set PCK1 parent to PLLB and its rate to 12 Mhz.
+--
+1.5.2.5
+
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/0002-at91sam9260ek_defconfig.patch b/packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/0002-at91sam9260ek_defconfig.patch
new file mode 100644
index 0000000000..01daa864f3
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/0002-at91sam9260ek_defconfig.patch
@@ -0,0 +1,959 @@
+From c4169c29f29a36a0a1d5d9e5a1d36ea7a3ecd506 Mon Sep 17 00:00:00 2001
+From: Cliff Brake <cbrake@happy.(none)>
+Date: Fri, 21 Dec 2007 17:47:21 -0500
+Subject: [PATCH] at91sam9260ek_defconfig
+
+---
+ arch/arm/configs/at91sam9260ek_defconfig | 487 +++++++++++++++---------------
+ 1 files changed, 240 insertions(+), 247 deletions(-)
+
+diff --git a/arch/arm/configs/at91sam9260ek_defconfig b/arch/arm/configs/at91sam9260ek_defconfig
+index 9a8890a..cd6d400 100644
+--- a/arch/arm/configs/at91sam9260ek_defconfig
++++ b/arch/arm/configs/at91sam9260ek_defconfig
+@@ -1,15 +1,18 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.21
+-# Mon May 7 11:42:02 2007
++# Linux kernel version: 2.6.24-rc6
++# Sat Dec 22 08:12:09 2007
+ #
+ CONFIG_ARM=y
+ CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+ CONFIG_GENERIC_GPIO=y
+ # CONFIG_GENERIC_TIME is not set
++# CONFIG_GENERIC_CLOCKEVENTS is not set
+ CONFIG_MMU=y
+ # CONFIG_NO_IOPORT is not set
+ CONFIG_GENERIC_HARDIRQS=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_LOCKDEP_SUPPORT=y
+ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+ CONFIG_HARDIRQS_SW_RESEND=y
+ CONFIG_GENERIC_IRQ_PROBE=y
+@@ -23,27 +26,28 @@ CONFIG_VECTORS_BASE=0xffff0000
+ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+ #
+-# Code maturity level options
++# General setup
+ #
+ CONFIG_EXPERIMENTAL=y
+ CONFIG_BROKEN_ON_SMP=y
+ CONFIG_INIT_ENV_ARG_LIMIT=32
+-
+-#
+-# General setup
+-#
+ CONFIG_LOCALVERSION=""
+ # CONFIG_LOCALVERSION_AUTO is not set
+ # CONFIG_SWAP is not set
+ CONFIG_SYSVIPC=y
+-# CONFIG_IPC_NS is not set
+ CONFIG_SYSVIPC_SYSCTL=y
+ # CONFIG_POSIX_MQUEUE is not set
+ # CONFIG_BSD_PROCESS_ACCT is not set
+ # CONFIG_TASKSTATS is not set
+-# CONFIG_UTS_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
+ # CONFIG_AUDIT is not set
+ # CONFIG_IKCONFIG is not set
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_CGROUPS is not set
++CONFIG_FAIR_GROUP_SCHED=y
++CONFIG_FAIR_USER_SCHED=y
++# CONFIG_FAIR_CGROUP_SCHED is not set
+ CONFIG_SYSFS_DEPRECATED=y
+ # CONFIG_RELAY is not set
+ CONFIG_BLK_DEV_INITRD=y
+@@ -62,32 +66,29 @@ CONFIG_BUG=y
+ CONFIG_ELF_CORE=y
+ CONFIG_BASE_FULL=y
+ CONFIG_FUTEX=y
++CONFIG_ANON_INODES=y
+ CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_EVENTFD=y
+ CONFIG_SHMEM=y
+-CONFIG_SLAB=y
+ CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
+ CONFIG_RT_MUTEXES=y
+ # CONFIG_TINY_SHMEM is not set
+ CONFIG_BASE_SMALL=0
+-# CONFIG_SLOB is not set
+-
+-#
+-# Loadable module support
+-#
+ CONFIG_MODULES=y
+ CONFIG_MODULE_UNLOAD=y
+ # CONFIG_MODULE_FORCE_UNLOAD is not set
+ # CONFIG_MODVERSIONS is not set
+ # CONFIG_MODULE_SRCVERSION_ALL is not set
+ CONFIG_KMOD=y
+-
+-#
+-# Block layer
+-#
+ CONFIG_BLOCK=y
+ # CONFIG_LBD is not set
+ # CONFIG_BLK_DEV_IO_TRACE is not set
+ # CONFIG_LSF is not set
++# CONFIG_BLK_DEV_BSG is not set
+
+ #
+ # IO Schedulers
+@@ -119,14 +120,16 @@ CONFIG_ARCH_AT91=y
+ # CONFIG_ARCH_NETX is not set
+ # CONFIG_ARCH_H720X is not set
+ # CONFIG_ARCH_IMX is not set
++# CONFIG_ARCH_IOP13XX is not set
+ # CONFIG_ARCH_IOP32X is not set
+ # CONFIG_ARCH_IOP33X is not set
+-# CONFIG_ARCH_IOP13XX is not set
+-# CONFIG_ARCH_IXP4XX is not set
+-# CONFIG_ARCH_IXP2000 is not set
+ # CONFIG_ARCH_IXP23XX is not set
++# CONFIG_ARCH_IXP2000 is not set
++# CONFIG_ARCH_IXP4XX is not set
+ # CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_KS8695 is not set
+ # CONFIG_ARCH_NS9XXX is not set
++# CONFIG_ARCH_MXC is not set
+ # CONFIG_ARCH_PNX4008 is not set
+ # CONFIG_ARCH_PXA is not set
+ # CONFIG_ARCH_RPC is not set
+@@ -134,15 +137,27 @@ CONFIG_ARCH_AT91=y
+ # CONFIG_ARCH_S3C2410 is not set
+ # CONFIG_ARCH_SHARK is not set
+ # CONFIG_ARCH_LH7A40X is not set
++# CONFIG_ARCH_DAVINCI is not set
+ # CONFIG_ARCH_OMAP is not set
+
+ #
++# Boot options
++#
++
++#
++# Power management
++#
++
++#
+ # Atmel AT91 System-on-Chip
+ #
+ # CONFIG_ARCH_AT91RM9200 is not set
+ CONFIG_ARCH_AT91SAM9260=y
+ # CONFIG_ARCH_AT91SAM9261 is not set
+ # CONFIG_ARCH_AT91SAM9263 is not set
++# CONFIG_ARCH_AT91SAM9RL is not set
++# CONFIG_ARCH_AT91X40 is not set
++CONFIG_AT91_PMC_UNIT=y
+
+ #
+ # AT91SAM9260 Variants
+@@ -153,6 +168,8 @@ CONFIG_ARCH_AT91SAM9260=y
+ # AT91SAM9260 / AT91SAM9XE Board Type
+ #
+ CONFIG_MACH_AT91SAM9260EK=y
++# CONFIG_MACH_CAM60 is not set
++# CONFIG_MACH_SAM9_L9260 is not set
+
+ #
+ # AT91 Board Options
+@@ -165,6 +182,7 @@ CONFIG_MACH_AT91SAM9260EK=y
+ #
+ # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
+ # CONFIG_ATMEL_TCLIB is not set
++CONFIG_AT91_TIMER_HZ=100
+
+ #
+ # Processor Type
+@@ -192,15 +210,14 @@ CONFIG_CPU_CP15_MMU=y
+ #
+ # Bus support
+ #
+-
+-#
+-# PCCARD (PCMCIA/CardBus) support
+-#
++# CONFIG_PCI_SYSCALL is not set
++# CONFIG_ARCH_SUPPORTS_MSI is not set
+ # CONFIG_PCCARD is not set
+
+ #
+ # Kernel Features
+ #
++# CONFIG_TICK_ONESHOT is not set
+ # CONFIG_PREEMPT is not set
+ # CONFIG_NO_IDLE_HZ is not set
+ CONFIG_HZ=100
+@@ -213,9 +230,12 @@ CONFIG_FLATMEM_MANUAL=y
+ CONFIG_FLATMEM=y
+ CONFIG_FLAT_NODE_MEM_MAP=y
+ # CONFIG_SPARSEMEM_STATIC is not set
++# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+ CONFIG_SPLIT_PTLOCK_CPUS=4096
+ # CONFIG_RESOURCES_64BIT is not set
+ CONFIG_ZONE_DMA_FLAG=1
++CONFIG_BOUNCE=y
++CONFIG_VIRT_TO_BUS=y
+ # CONFIG_LEDS is not set
+ CONFIG_ALIGNMENT_TRAP=y
+
+@@ -252,6 +272,7 @@ CONFIG_BINFMT_ELF=y
+ # Power management options
+ #
+ # CONFIG_PM is not set
++CONFIG_SUSPEND_UP_POSSIBLE=y
+
+ #
+ # Networking
+@@ -261,7 +282,6 @@ CONFIG_NET=y
+ #
+ # Networking options
+ #
+-# CONFIG_NETDEBUG is not set
+ CONFIG_PACKET=y
+ # CONFIG_PACKET_MMAP is not set
+ CONFIG_UNIX=y
+@@ -286,6 +306,7 @@ CONFIG_IP_PNP_BOOTP=y
+ # CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+ # CONFIG_INET_XFRM_MODE_TUNNEL is not set
+ # CONFIG_INET_XFRM_MODE_BEET is not set
++# CONFIG_INET_LRO is not set
+ CONFIG_INET_DIAG=y
+ CONFIG_INET_TCP_DIAG=y
+ # CONFIG_TCP_CONG_ADVANCED is not set
+@@ -297,20 +318,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
+ # CONFIG_INET6_TUNNEL is not set
+ # CONFIG_NETWORK_SECMARK is not set
+ # CONFIG_NETFILTER is not set
+-
+-#
+-# DCCP Configuration (EXPERIMENTAL)
+-#
+ # CONFIG_IP_DCCP is not set
+-
+-#
+-# SCTP Configuration (EXPERIMENTAL)
+-#
+ # CONFIG_IP_SCTP is not set
+-
+-#
+-# TIPC Configuration (EXPERIMENTAL)
+-#
+ # CONFIG_TIPC is not set
+ # CONFIG_ATM is not set
+ # CONFIG_BRIDGE is not set
+@@ -323,11 +332,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
+ # CONFIG_LAPB is not set
+ # CONFIG_ECONET is not set
+ # CONFIG_WAN_ROUTER is not set
+-
+-#
+-# QoS and/or fair queueing
+-#
+ # CONFIG_NET_SCHED is not set
++CONFIG_NET_SCH_FIFO=y
+
+ #
+ # Network testing
+@@ -336,7 +342,26 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
+ # CONFIG_HAMRADIO is not set
+ # CONFIG_IRDA is not set
+ # CONFIG_BT is not set
+-# CONFIG_IEEE80211 is not set
++# CONFIG_AF_RXRPC is not set
++
++#
++# Wireless
++#
++CONFIG_CFG80211=m
++CONFIG_NL80211=y
++CONFIG_WIRELESS_EXT=y
++CONFIG_MAC80211=m
++CONFIG_MAC80211_RCSIMPLE=y
++# CONFIG_MAC80211_DEBUG is not set
++CONFIG_IEEE80211=m
++# CONFIG_IEEE80211_DEBUG is not set
++CONFIG_IEEE80211_CRYPT_WEP=m
++CONFIG_IEEE80211_CRYPT_CCMP=m
++CONFIG_IEEE80211_CRYPT_TKIP=m
++CONFIG_IEEE80211_SOFTMAC=m
++# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
+
+ #
+ # Device Drivers
+@@ -345,36 +370,17 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
+ #
+ # Generic Driver Options
+ #
++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+ CONFIG_STANDALONE=y
+ CONFIG_PREVENT_FIRMWARE_BUILD=y
+-# CONFIG_FW_LOADER is not set
++CONFIG_FW_LOADER=m
+ # CONFIG_DEBUG_DRIVER is not set
+ # CONFIG_DEBUG_DEVRES is not set
+ # CONFIG_SYS_HYPERVISOR is not set
+-
+-#
+-# Connector - unified userspace <-> kernelspace linker
+-#
+ # CONFIG_CONNECTOR is not set
+-
+-#
+-# Memory Technology Devices (MTD)
+-#
+ # CONFIG_MTD is not set
+-
+-#
+-# Parallel port support
+-#
+ # CONFIG_PARPORT is not set
+-
+-#
+-# Plug and Play support
+-#
+-# CONFIG_PNPACPI is not set
+-
+-#
+-# Block devices
+-#
++CONFIG_BLK_DEV=y
+ # CONFIG_BLK_DEV_COW_COMMON is not set
+ # CONFIG_BLK_DEV_LOOP is not set
+ # CONFIG_BLK_DEV_NBD is not set
+@@ -385,12 +391,16 @@ CONFIG_BLK_DEV_RAM_SIZE=8192
+ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+ # CONFIG_CDROM_PKTCDVD is not set
+ # CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++# CONFIG_EEPROM_93CX6 is not set
++# CONFIG_ATMEL_SSC is not set
+
+ #
+ # SCSI device support
+ #
+ # CONFIG_RAID_ATTRS is not set
+ CONFIG_SCSI=y
++CONFIG_SCSI_DMA=y
+ # CONFIG_SCSI_TGT is not set
+ # CONFIG_SCSI_NETLINK is not set
+ CONFIG_SCSI_PROC_FS=y
+@@ -412,6 +422,7 @@ CONFIG_SCSI_MULTI_LUN=y
+ # CONFIG_SCSI_CONSTANTS is not set
+ # CONFIG_SCSI_LOGGING is not set
+ # CONFIG_SCSI_SCAN_ASYNC is not set
++CONFIG_SCSI_WAIT_SCAN=m
+
+ #
+ # SCSI Transports
+@@ -419,81 +430,77 @@ CONFIG_SCSI_MULTI_LUN=y
+ # CONFIG_SCSI_SPI_ATTRS is not set
+ # CONFIG_SCSI_FC_ATTRS is not set
+ # CONFIG_SCSI_ISCSI_ATTRS is not set
+-# CONFIG_SCSI_SAS_ATTRS is not set
+ # CONFIG_SCSI_SAS_LIBSAS is not set
+-
+-#
+-# SCSI low-level drivers
+-#
++# CONFIG_SCSI_SRP_ATTRS is not set
++CONFIG_SCSI_LOWLEVEL=y
+ # CONFIG_ISCSI_TCP is not set
+ # CONFIG_SCSI_DEBUG is not set
+-
+-#
+-# Serial ATA (prod) and Parallel ATA (experimental) drivers
+-#
+ # CONFIG_ATA is not set
+-
+-#
+-# Multi-device support (RAID and LVM)
+-#
+ # CONFIG_MD is not set
+-
+-#
+-# Fusion MPT device support
+-#
+-# CONFIG_FUSION is not set
+-
+-#
+-# IEEE 1394 (FireWire) support
+-#
+-
+-#
+-# I2O device support
+-#
+-
+-#
+-# Network device support
+-#
+ CONFIG_NETDEVICES=y
++# CONFIG_NETDEVICES_MULTIQUEUE is not set
+ # CONFIG_DUMMY is not set
+ # CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
+ # CONFIG_EQUALIZER is not set
+ # CONFIG_TUN is not set
+-
+-#
+-# PHY device support
+-#
+-# CONFIG_PHYLIB is not set
+-
+-#
+-# Ethernet (10 or 100Mbit)
+-#
++# CONFIG_VETH is not set
++CONFIG_PHYLIB=y
++
++#
++# MII PHY device drivers
++#
++# CONFIG_MARVELL_PHY is not set
++# CONFIG_DAVICOM_PHY is not set
++# CONFIG_QSEMI_PHY is not set
++# CONFIG_LXT_PHY is not set
++# CONFIG_CICADA_PHY is not set
++# CONFIG_VITESSE_PHY is not set
++# CONFIG_SMSC_PHY is not set
++# CONFIG_BROADCOM_PHY is not set
++# CONFIG_ICPLUS_PHY is not set
++# CONFIG_FIXED_PHY is not set
++# CONFIG_MDIO_BITBANG is not set
+ CONFIG_NET_ETHERNET=y
+ CONFIG_MII=y
+ CONFIG_MACB=y
++# CONFIG_AX88796 is not set
+ # CONFIG_SMC91X is not set
+ # CONFIG_DM9000 is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_B44 is not set
++# CONFIG_NETDEV_1000 is not set
++# CONFIG_NETDEV_10000 is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++CONFIG_WLAN_80211=y
++CONFIG_LIBERTAS=m
++CONFIG_LIBERTAS_USB=m
++CONFIG_LIBERTAS_SDIO=m
++# CONFIG_LIBERTAS_DEBUG is not set
++# CONFIG_USB_ZD1201 is not set
++# CONFIG_RTL8187 is not set
++# CONFIG_P54_COMMON is not set
++# CONFIG_HOSTAP is not set
++# CONFIG_B43 is not set
++# CONFIG_B43LEGACY is not set
++# CONFIG_ZD1211RW is not set
++# CONFIG_RT2X00 is not set
+
+ #
+-# Ethernet (1000 Mbit)
+-#
+-
+-#
+-# Ethernet (10000 Mbit)
+-#
+-
+-#
+-# Token Ring devices
+-#
+-
+-#
+-# Wireless LAN (non-hamradio)
+-#
+-# CONFIG_NET_RADIO is not set
+-
+-#
+-# Wan interfaces
++# USB Network Adapters
+ #
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_USBNET is not set
+ # CONFIG_WAN is not set
+ # CONFIG_PPP is not set
+ # CONFIG_SLIP is not set
+@@ -501,10 +508,6 @@ CONFIG_MACB=y
+ # CONFIG_NETCONSOLE is not set
+ # CONFIG_NETPOLL is not set
+ # CONFIG_NET_POLL_CONTROLLER is not set
+-
+-#
+-# ISDN subsystem
+-#
+ # CONFIG_ISDN is not set
+
+ #
+@@ -512,6 +515,7 @@ CONFIG_MACB=y
+ #
+ CONFIG_INPUT=y
+ # CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV is not set
+
+ #
+ # Userland interfaces
+@@ -521,7 +525,6 @@ CONFIG_INPUT_MOUSEDEV=y
+ CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+ # CONFIG_INPUT_JOYDEV is not set
+-# CONFIG_INPUT_TSDEV is not set
+ # CONFIG_INPUT_EVDEV is not set
+ # CONFIG_INPUT_EVBUG is not set
+
+@@ -531,6 +534,7 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+ # CONFIG_INPUT_KEYBOARD is not set
+ # CONFIG_INPUT_MOUSE is not set
+ # CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
+ # CONFIG_INPUT_TOUCHSCREEN is not set
+ # CONFIG_INPUT_MISC is not set
+
+@@ -565,41 +569,12 @@ CONFIG_SERIAL_CORE_CONSOLE=y
+ CONFIG_UNIX98_PTYS=y
+ CONFIG_LEGACY_PTYS=y
+ CONFIG_LEGACY_PTY_COUNT=256
+-
+-#
+-# IPMI
+-#
+ # CONFIG_IPMI_HANDLER is not set
+-
+-#
+-# Watchdog Cards
+-#
+-CONFIG_WATCHDOG=y
+-CONFIG_WATCHDOG_NOWAYOUT=y
+-
+-#
+-# Watchdog Device Drivers
+-#
+-# CONFIG_SOFT_WATCHDOG is not set
+-
+-#
+-# USB-based Watchdog Cards
+-#
+-# CONFIG_USBPCWATCHDOG is not set
+ CONFIG_HW_RANDOM=y
+ # CONFIG_NVRAM is not set
+-# CONFIG_DTLK is not set
+ # CONFIG_R3964 is not set
+ # CONFIG_RAW_DRIVER is not set
+-
+-#
+-# TPM devices
+-#
+ # CONFIG_TCG_TPM is not set
+-
+-#
+-# I2C support
+-#
+ # CONFIG_I2C is not set
+
+ #
+@@ -607,56 +582,54 @@ CONFIG_HW_RANDOM=y
+ #
+ # CONFIG_SPI is not set
+ # CONFIG_SPI_MASTER is not set
+-
+-#
+-# Dallas's 1-wire bus
+-#
+ # CONFIG_W1 is not set
+-
+-#
+-# Hardware Monitoring support
+-#
++# CONFIG_POWER_SUPPLY is not set
+ # CONFIG_HWMON is not set
+-# CONFIG_HWMON_VID is not set
+-
+-#
+-# Misc devices
+-#
++CONFIG_WATCHDOG=y
++CONFIG_WATCHDOG_NOWAYOUT=y
+
+ #
+-# Multifunction device drivers
++# Watchdog Device Drivers
+ #
+-# CONFIG_MFD_SM501 is not set
++# CONFIG_SOFT_WATCHDOG is not set
++# CONFIG_AT91SAM9_WATCHDOG is not set
+
+ #
+-# LED devices
++# USB-based Watchdog Cards
+ #
+-# CONFIG_NEW_LEDS is not set
++# CONFIG_USBPCWATCHDOG is not set
+
+ #
+-# LED drivers
++# Sonics Silicon Backplane
+ #
++CONFIG_SSB_POSSIBLE=y
++# CONFIG_SSB is not set
+
+ #
+-# LED Triggers
++# Multifunction device drivers
+ #
++# CONFIG_MFD_SM501 is not set
+
+ #
+ # Multimedia devices
+ #
+ # CONFIG_VIDEO_DEV is not set
+-
+-#
+-# Digital Video Broadcasting Devices
+-#
+-# CONFIG_DVB is not set
++# CONFIG_DVB_CORE is not set
++CONFIG_DAB=y
+ # CONFIG_USB_DABUSB is not set
+
+ #
+ # Graphics support
+ #
+-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++# CONFIG_VGASTATE is not set
++# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+ # CONFIG_FB is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
+
+ #
+ # Console display driver support
+@@ -668,16 +641,22 @@ CONFIG_DUMMY_CONSOLE=y
+ # Sound
+ #
+ # CONFIG_SOUND is not set
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++# CONFIG_HIDRAW is not set
+
+ #
+-# HID Devices
++# USB Input Devices
+ #
+-CONFIG_HID=y
+-# CONFIG_HID_DEBUG is not set
++# CONFIG_USB_HID is not set
+
+ #
+-# USB support
++# USB HID Boot Protocol drivers
+ #
++# CONFIG_USB_KBD is not set
++# CONFIG_USB_MOUSE is not set
++CONFIG_USB_SUPPORT=y
+ CONFIG_USB_ARCH_HAS_HCD=y
+ CONFIG_USB_ARCH_HAS_OHCI=y
+ # CONFIG_USB_ARCH_HAS_EHCI is not set
+@@ -688,6 +667,7 @@ CONFIG_USB=y
+ # Miscellaneous USB options
+ #
+ CONFIG_USB_DEVICEFS=y
++CONFIG_USB_DEVICE_CLASS=y
+ # CONFIG_USB_DYNAMIC_MINORS is not set
+ # CONFIG_USB_OTG is not set
+
+@@ -700,6 +680,7 @@ CONFIG_USB_OHCI_HCD=y
+ # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+ # CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
+
+ #
+ # USB Device Class drivers
+@@ -718,6 +699,7 @@ CONFIG_USB_STORAGE=y
+ CONFIG_USB_STORAGE_DEBUG=y
+ # CONFIG_USB_STORAGE_DATAFAB is not set
+ # CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
+ # CONFIG_USB_STORAGE_DPCM is not set
+ # CONFIG_USB_STORAGE_USBAT is not set
+ # CONFIG_USB_STORAGE_SDDR09 is not set
+@@ -728,44 +710,10 @@ CONFIG_USB_STORAGE_DEBUG=y
+ # CONFIG_USB_LIBUSUAL is not set
+
+ #
+-# USB Input Devices
+-#
+-# CONFIG_USB_HID is not set
+-
+-#
+-# USB HID Boot Protocol drivers
+-#
+-# CONFIG_USB_KBD is not set
+-# CONFIG_USB_MOUSE is not set
+-# CONFIG_USB_AIPTEK is not set
+-# CONFIG_USB_WACOM is not set
+-# CONFIG_USB_ACECAD is not set
+-# CONFIG_USB_KBTAB is not set
+-# CONFIG_USB_POWERMATE is not set
+-# CONFIG_USB_TOUCHSCREEN is not set
+-# CONFIG_USB_YEALINK is not set
+-# CONFIG_USB_XPAD is not set
+-# CONFIG_USB_ATI_REMOTE is not set
+-# CONFIG_USB_ATI_REMOTE2 is not set
+-# CONFIG_USB_KEYSPAN_REMOTE is not set
+-# CONFIG_USB_APPLETOUCH is not set
+-# CONFIG_USB_GTCO is not set
+-
+-#
+ # USB Imaging devices
+ #
+ # CONFIG_USB_MDC800 is not set
+ # CONFIG_USB_MICROTEK is not set
+-
+-#
+-# USB Network Adapters
+-#
+-# CONFIG_USB_CATC is not set
+-# CONFIG_USB_KAWETH is not set
+-# CONFIG_USB_PEGASUS is not set
+-# CONFIG_USB_RTL8150 is not set
+-# CONFIG_USB_USBNET_MII is not set
+-# CONFIG_USB_USBNET is not set
+ CONFIG_USB_MON=y
+
+ #
+@@ -808,13 +756,19 @@ CONFIG_USB_MON=y
+ # USB Gadget Support
+ #
+ CONFIG_USB_GADGET=y
++# CONFIG_USB_GADGET_DEBUG is not set
+ # CONFIG_USB_GADGET_DEBUG_FILES is not set
+ CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_ATMEL_USBA is not set
++# CONFIG_USB_GADGET_FSL_USB2 is not set
+ # CONFIG_USB_GADGET_NET2280 is not set
+ # CONFIG_USB_GADGET_PXA2XX is not set
++# CONFIG_USB_GADGET_M66592 is not set
+ # CONFIG_USB_GADGET_GOKU is not set
+ # CONFIG_USB_GADGET_LH7A40X is not set
+ # CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_S3C2410 is not set
+ CONFIG_USB_GADGET_AT91=y
+ CONFIG_USB_AT91=y
+ # CONFIG_USB_GADGET_DUMMY_HCD is not set
+@@ -826,15 +780,22 @@ CONFIG_USB_FILE_STORAGE=m
+ # CONFIG_USB_FILE_STORAGE_TEST is not set
+ CONFIG_USB_G_SERIAL=m
+ # CONFIG_USB_MIDI_GADGET is not set
++CONFIG_MMC=m
++# CONFIG_MMC_DEBUG is not set
++# CONFIG_MMC_UNSAFE_RESUME is not set
+
+ #
+-# MMC/SD Card support
++# MMC/SD Card Drivers
+ #
+-# CONFIG_MMC is not set
++CONFIG_MMC_BLOCK=m
++CONFIG_MMC_BLOCK_BOUNCE=y
++# CONFIG_SDIO_UART is not set
+
+ #
+-# Real Time Clock
++# MMC/SD Host Controller Drivers
+ #
++CONFIG_MMC_AT91=m
++# CONFIG_NEW_LEDS is not set
+ CONFIG_RTC_LIB=y
+ # CONFIG_RTC_CLASS is not set
+
+@@ -887,7 +848,6 @@ CONFIG_SYSFS=y
+ CONFIG_TMPFS=y
+ # CONFIG_TMPFS_POSIX_ACL is not set
+ # CONFIG_HUGETLB_PAGE is not set
+-CONFIG_RAMFS=y
+ # CONFIG_CONFIGFS_FS is not set
+
+ #
+@@ -906,10 +866,7 @@ CONFIG_CRAMFS=y
+ # CONFIG_QNX4FS_FS is not set
+ # CONFIG_SYSV_FS is not set
+ # CONFIG_UFS_FS is not set
+-
+-#
+-# Network File Systems
+-#
++CONFIG_NETWORK_FILESYSTEMS=y
+ # CONFIG_NFS_FS is not set
+ # CONFIG_NFSD is not set
+ # CONFIG_SMB_FS is not set
+@@ -917,17 +874,12 @@ CONFIG_CRAMFS=y
+ # CONFIG_NCP_FS is not set
+ # CONFIG_CODA_FS is not set
+ # CONFIG_AFS_FS is not set
+-# CONFIG_9P_FS is not set
+
+ #
+ # Partition Types
+ #
+ # CONFIG_PARTITION_ADVANCED is not set
+ CONFIG_MSDOS_PARTITION=y
+-
+-#
+-# Native Language Support
+-#
+ CONFIG_NLS=y
+ CONFIG_NLS_DEFAULT="iso8859-1"
+ CONFIG_NLS_CODEPAGE_437=y
+@@ -968,21 +920,16 @@ CONFIG_NLS_ISO8859_1=y
+ # CONFIG_NLS_KOI8_R is not set
+ # CONFIG_NLS_KOI8_U is not set
+ # CONFIG_NLS_UTF8 is not set
+-
+-#
+-# Distributed Lock Manager
+-#
+ # CONFIG_DLM is not set
+-
+-#
+-# Profiling support
+-#
++CONFIG_INSTRUMENTATION=y
+ # CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
+
+ #
+ # Kernel hacking
+ #
+ # CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
+ CONFIG_ENABLE_MUST_CHECK=y
+ # CONFIG_MAGIC_SYSRQ is not set
+ # CONFIG_UNUSED_SYMBOLS is not set
+@@ -990,8 +937,8 @@ CONFIG_ENABLE_MUST_CHECK=y
+ # CONFIG_HEADERS_CHECK is not set
+ CONFIG_DEBUG_KERNEL=y
+ # CONFIG_DEBUG_SHIRQ is not set
+-CONFIG_LOG_BUF_SHIFT=14
+ CONFIG_DETECT_SOFTLOCKUP=y
++CONFIG_SCHED_DEBUG=y
+ # CONFIG_SCHEDSTATS is not set
+ # CONFIG_TIMER_STATS is not set
+ # CONFIG_DEBUG_SLAB is not set
+@@ -999,6 +946,9 @@ CONFIG_DETECT_SOFTLOCKUP=y
+ # CONFIG_RT_MUTEX_TESTER is not set
+ # CONFIG_DEBUG_SPINLOCK is not set
+ # CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_LOCK_ALLOC is not set
++# CONFIG_PROVE_LOCKING is not set
++# CONFIG_LOCK_STAT is not set
+ # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+ # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+ # CONFIG_DEBUG_KOBJECT is not set
+@@ -1006,10 +956,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
+ # CONFIG_DEBUG_INFO is not set
+ # CONFIG_DEBUG_VM is not set
+ # CONFIG_DEBUG_LIST is not set
++# CONFIG_DEBUG_SG is not set
+ CONFIG_FRAME_POINTER=y
+ CONFIG_FORCED_INLINING=y
++# CONFIG_BOOT_PRINTK_DELAY is not set
+ # CONFIG_RCU_TORTURE_TEST is not set
+ # CONFIG_FAULT_INJECTION is not set
++# CONFIG_SAMPLES is not set
+ CONFIG_DEBUG_USER=y
+ # CONFIG_DEBUG_ERRORS is not set
+ CONFIG_DEBUG_LL=y
+@@ -1020,11 +973,48 @@ CONFIG_DEBUG_LL=y
+ #
+ # CONFIG_KEYS is not set
+ # CONFIG_SECURITY is not set
+-
+-#
+-# Cryptographic options
+-#
+-# CONFIG_CRYPTO is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=m
++CONFIG_CRYPTO_BLKCIPHER=m
++CONFIG_CRYPTO_MANAGER=m
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_XCBC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_GF128MUL is not set
++CONFIG_CRYPTO_ECB=m
++# CONFIG_CRYPTO_CBC is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_XTS is not set
++# CONFIG_CRYPTO_CRYPTD is not set
++# CONFIG_CRYPTO_DES is not set
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++CONFIG_CRYPTO_AES=m
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++CONFIG_CRYPTO_ARC4=m
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_DEFLATE is not set
++CONFIG_CRYPTO_MICHAEL_MIC=m
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++# CONFIG_CRYPTO_TEST is not set
++# CONFIG_CRYPTO_AUTHENC is not set
++CONFIG_CRYPTO_HW=y
+
+ #
+ # Library routines
+@@ -1032,9 +1022,12 @@ CONFIG_DEBUG_LL=y
+ CONFIG_BITREVERSE=y
+ # CONFIG_CRC_CCITT is not set
+ # CONFIG_CRC16 is not set
++# CONFIG_CRC_ITU_T is not set
+ CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
+ # CONFIG_LIBCRC32C is not set
+ CONFIG_ZLIB_INFLATE=y
+ CONFIG_PLIST=y
+ CONFIG_HAS_IOMEM=y
+ CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
+--
+1.5.2.5
+
diff --git a/packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/defconfig b/packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/defconfig
new file mode 100644
index 0000000000..e855ddef65
--- /dev/null
+++ b/packages/linux/linux-2.6.23+2.6.24-rc6/at91sam9260ek/defconfig
@@ -0,0 +1,1129 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc6
+# Mon Dec 31 15:32:18 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+# CONFIG_GENERIC_CLOCKEVENTS is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+CONFIG_ARCH_AT91=y
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Atmel AT91 System-on-Chip
+#
+# CONFIG_ARCH_AT91RM9200 is not set
+CONFIG_ARCH_AT91SAM9260=y
+# CONFIG_ARCH_AT91SAM9261 is not set
+# CONFIG_ARCH_AT91SAM9263 is not set
+# CONFIG_ARCH_AT91SAM9RL is not set
+# CONFIG_ARCH_AT91X40 is not set
+CONFIG_AT91_PMC_UNIT=y
+
+#
+# AT91SAM9260 Variants
+#
+# CONFIG_ARCH_AT91SAM9260_SAM9XE is not set
+
+#
+# AT91SAM9260 / AT91SAM9XE Board Type
+#
+CONFIG_MACH_AT91SAM9260EK=y
+# CONFIG_MACH_CAM60 is not set
+# CONFIG_MACH_SAM9_L9260 is not set
+
+#
+# AT91 Board Options
+#
+CONFIG_MTD_AT91_DATAFLASH_CARD=y
+# CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set
+
+#
+# AT91 Feature Selections
+#
+# CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set
+# CONFIG_ATMEL_TCLIB is not set
+CONFIG_AT91_TIMER_HZ=100
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+CONFIG_CFG80211=m
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+CONFIG_MAC80211_RCSIMPLE=y
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_AT91=y
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_ATMEL_SSC is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_RTL8187 is not set
+# CONFIG_P54_COMMON is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_B43 is not set
+# CONFIG_B43LEGACY is not set
+# CONFIG_ZD1211RW is not set
+# CONFIG_RT2X00 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+# CONFIG_AT91SAM9_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+CONFIG_USB_STORAGE_DEBUG=y
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+CONFIG_USB_GADGET_AT91=y
+CONFIG_USB_AT91=y
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+# CONFIG_USB_ETH is not set
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_AT91=m
+# CONFIG_NEW_LEDS is not set
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_ERRORS is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_MANAGER=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/qmake/qmake2-native-2.10a/.mtn2git_empty b/packages/linux/linux-2.6.23/at32stk1000/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qmake/qmake2-native-2.10a/.mtn2git_empty
+++ b/packages/linux/linux-2.6.23/at32stk1000/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.23/at32stk1000/defconfig b/packages/linux/linux-2.6.23/at32stk1000/defconfig
new file mode 100644
index 0000000000..c3d4c33d21
--- /dev/null
+++ b/packages/linux/linux-2.6.23/at32stk1000/defconfig
@@ -0,0 +1,1078 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.23.atmel.1
+# Tue Oct 16 12:57:22 2007
+#
+CONFIG_AVR32=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_TIME=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_BUG=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+# CONFIG_TASK_XACCT is not set
+# CONFIG_USER_NS is not set
+CONFIG_AUDIT=y
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=1
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System Type and features
+#
+CONFIG_SUBARCH_AVR32B=y
+CONFIG_MMU=y
+CONFIG_PERFORMANCE_COUNTERS=y
+CONFIG_PLATFORM_AT32AP=y
+CONFIG_CPU_AT32AP7000=y
+# CONFIG_CPU_AT32AP7001 is not set
+# CONFIG_CPU_AT32AP7002 is not set
+CONFIG_BOARD_ATSTK1002=y
+CONFIG_BOARD_ATSTK1000=y
+# CONFIG_BOARD_ATNGW100 is not set
+# CONFIG_BOARD_ATSTK1002_CUSTOM is not set
+# CONFIG_BOARD_ATSTK1002_SPI1 is not set
+# CONFIG_BOARD_ATSTK1002_J2_LED is not set
+# CONFIG_BOARD_ATSTK1002_J2_LED8 is not set
+# CONFIG_BOARD_ATSTK1002_J2_RGB is not set
+# CONFIG_BOARD_ATSTK1002_ENABLE_AC97 is not set
+# CONFIG_BOARD_ATSTK1002_CF_HACKS is not set
+CONFIG_LOADER_U_BOOT=y
+
+#
+# Atmel AVR32 AP options
+#
+# CONFIG_AP700X_32_BIT_SMC is not set
+CONFIG_AP700X_16_BIT_SMC=y
+# CONFIG_AP700X_8_BIT_SMC is not set
+CONFIG_GPIO_DEV=y
+CONFIG_LOAD_ADDRESS=0x10000000
+CONFIG_ENTRY_ADDRESS=0x90000000
+CONFIG_PHYS_OFFSET=0x10000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_HAVE_ARCH_BOOTMEM_NODE is not set
+# CONFIG_ARCH_HAVE_MEMORY_PRESENT is not set
+# CONFIG_NEED_NODE_MEMMAP_SIZE is not set
+CONFIG_ARCH_FLATMEM_ENABLE=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+# CONFIG_ARCH_SPARSEMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_OWNERSHIP_TRACE is not set
+CONFIG_DW_DMAC=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_CMDLINE=""
+
+#
+# Power managment options
+#
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=m
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_AT32AP=y
+
+#
+# Bus options
+#
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+# CONFIG_PCMCIA_LOAD_CIS is not set
+# CONFIG_PCMCIA_IOCTL is not set
+
+#
+# PC-card bridges
+#
+CONFIG_AT32_CF=m
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_DATAFLASH=m
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_ATMEL_SSC=m
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+CONFIG_LXT_PHY=y
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_FIXED_PHY is not set
+CONFIG_NET_ETHERNET=y
+# CONFIG_MII is not set
+CONFIG_MACB=y
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+# CONFIG_NET_PCMCIA is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=m
+# CONFIG_INPUT_FF_MEMLESS is not set
+CONFIG_INPUT_POLLDEV=m
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_GPIO=m
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+CONFIG_MOUSE_GPIO=m
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_AT32AP700X_WDT=y
+# CONFIG_HW_RANDOM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=m
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=m
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_ATMELTWI=m
+CONFIG_I2C_GPIO=m
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_BITBANG is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+CONFIG_SPI_SPIDEV=m
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_LTV350QV=y
+# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_ATMEL=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# AVR32 devices
+#
+CONFIG_SND_ATMEL_AC97=m
+
+#
+# SPI devices
+#
+CONFIG_SND_AT73C213=m
+CONFIG_SND_AT73C213_TARGET_BITRATE=48000
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+# CONFIG_HID_SUPPORT is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+CONFIG_USB_GADGET_ATMEL_USBA=y
+CONFIG_USB_ATMEL_USBA=y
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_ATMELMCI=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+CONFIG_LEDS_GPIO=m
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+# CONFIG_RTC_HCTOSYS is not set
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_AT32AP700X=y
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Userspace I/O
+#
+# CONFIG_UIO is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_MINIX_FS=m
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_KPROBES is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/qpobox/.mtn2git_empty b/packages/linux/linux-2.6.23/atngw100/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qpobox/.mtn2git_empty
+++ b/packages/linux/linux-2.6.23/atngw100/.mtn2git_empty
diff --git a/packages/linux/linux-2.6.23/atngw100/defconfig b/packages/linux/linux-2.6.23/atngw100/defconfig
new file mode 100644
index 0000000000..7b335e3e73
--- /dev/null
+++ b/packages/linux/linux-2.6.23/atngw100/defconfig
@@ -0,0 +1,1130 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.23.atmel.3
+# Mon Nov 5 19:28:40 2007
+#
+CONFIG_AVR32=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_TIME=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_BUG=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=m
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=1
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System Type and features
+#
+CONFIG_SUBARCH_AVR32B=y
+CONFIG_MMU=y
+CONFIG_PERFORMANCE_COUNTERS=y
+CONFIG_PLATFORM_AT32AP=y
+CONFIG_CPU_AT32AP700X=y
+CONFIG_CPU_AT32AP7000=y
+# CONFIG_CPU_AT32AP7001 is not set
+# CONFIG_CPU_AT32AP7002 is not set
+# CONFIG_BOARD_ATSTK1000 is not set
+CONFIG_BOARD_ATNGW100=y
+# CONFIG_BOARD_ATNGW100_I2C_GPIO is not set
+CONFIG_LOADER_U_BOOT=y
+
+#
+# Atmel AVR32 AP options
+#
+# CONFIG_AP700X_32_BIT_SMC is not set
+CONFIG_AP700X_16_BIT_SMC=y
+# CONFIG_AP700X_8_BIT_SMC is not set
+CONFIG_GPIO_DEV=y
+CONFIG_LOAD_ADDRESS=0x10000000
+CONFIG_ENTRY_ADDRESS=0x90000000
+CONFIG_PHYS_OFFSET=0x10000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_HAVE_ARCH_BOOTMEM_NODE is not set
+# CONFIG_ARCH_HAVE_MEMORY_PRESENT is not set
+# CONFIG_NEED_NODE_MEMMAP_SIZE is not set
+CONFIG_ARCH_FLATMEM_ENABLE=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+# CONFIG_ARCH_SPARSEMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_OWNERSHIP_TRACE is not set
+CONFIG_DW_DMAC=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_CMDLINE=""
+
+#
+# Power managment options
+#
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=m
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_AT32AP=y
+
+#
+# Bus options
+#
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=y
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+# CONFIG_IP_PIMSM_V2 is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=y
+CONFIG_INET_ESP=y
+CONFIG_INET_IPCOMP=y
+CONFIG_INET_XFRM_TUNNEL=y
+CONFIG_INET_TUNNEL=y
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=y
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=y
+CONFIG_INET6_ESP=y
+CONFIG_INET6_IPCOMP=y
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=y
+CONFIG_INET6_TUNNEL=y
+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
+CONFIG_INET6_XFRM_MODE_TUNNEL=y
+CONFIG_INET6_XFRM_MODE_BEET=y
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+# CONFIG_NF_CONNTRACK_EVENTS is not set
+CONFIG_NF_CT_PROTO_GRE=m
+# CONFIG_NF_CT_PROTO_SCTP is not set
+# CONFIG_NF_CT_PROTO_UDPLITE is not set
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NETFILTER_XTABLES=y
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+# CONFIG_IP_NF_TARGET_ULOG is not set
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x80000000
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_DATAFLASH=y
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_ATMEL_SSC is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_FIXED_PHY is not set
+CONFIG_NET_ETHERNET=y
+# CONFIG_MII is not set
+CONFIG_MACB=y
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_AT32AP700X_WDT=y
+# CONFIG_HW_RANDOM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=m
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=m
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_ATMELTWI=m
+CONFIG_I2C_GPIO=m
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_BITBANG is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+CONFIG_SPI_SPIDEV=m
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+CONFIG_USB_SUPPORT=y
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+CONFIG_USB_GADGET_ATMEL_USBA=y
+CONFIG_USB_ATMEL_USBA=y
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_ATMELMCI=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_GPIO=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_AT32AP700X=y
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Userspace I/O
+#
+# CONFIG_UIO is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=850
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+# CONFIG_PROC_KCORE is not set
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=y
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# 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=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_KPROBES is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-2.6.23/kallsyms-missing-include.patch b/packages/linux/linux-2.6.23/kallsyms-missing-include.patch
new file mode 100644
index 0000000000..9c31b1fa9a
--- /dev/null
+++ b/packages/linux/linux-2.6.23/kallsyms-missing-include.patch
@@ -0,0 +1,19 @@
+A missing include in kallsyms.h.
+
+Upstream this is fixed in the 2.6.24 rc series:
+
+http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5a75983eef1193c43caebde6643a218bd8d8390e
+
+Leon Woestenberg <leon.woestenberg@gmail.com>
+
+--- a/include/linux/kallsyms.h
++++ b/include/linux/kallsyms.h
+@@ -6,6 +6,7 @@
+ #define _LINUX_KALLSYMS_H
+
+ #include <linux/errno.h>
++#include <linux/stddef.h>
+
+ #define KSYM_NAME_LEN 128
+ #define KSYM_SYMBOL_LEN (sizeof("%s+%#lx/%#lx [%s]") + (KSYM_NAME_LEN - 1) + \
+
diff --git a/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig b/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig
index 2cd1cb3b1a..be9a93bc54 100644
--- a/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig
+++ b/packages/linux/linux-2.6.23/mpc8313e-rdb/defconfig
@@ -1454,12 +1454,12 @@ CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_MMC_WBSD is not set
# CONFIG_MMC_TIFM_SD is not set
CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
+CONFIG_LEDS_CLASS=y
#
# LED drivers
#
-CONFIG_LEDS_MPC8313E_RDB=m
+CONFIG_LEDS_MPC8313E_RDB=y
#
# LED Triggers
diff --git a/packages/linux/linux-2.6.23/mpc8313e-rdb/mpc8313e-rdb-leds.patch b/packages/linux/linux-2.6.23/mpc8313e-rdb/mpc8313e-rdb-leds.patch
index 56176c1095..be322be927 100644
--- a/packages/linux/linux-2.6.23/mpc8313e-rdb/mpc8313e-rdb-leds.patch
+++ b/packages/linux/linux-2.6.23/mpc8313e-rdb/mpc8313e-rdb-leds.patch
@@ -1,6 +1,6 @@
diff -urN linux-2.6.23.orig/drivers/leds/Kconfig linux-2.6.23/drivers/leds/Kconfig
--- linux-2.6.23.orig/drivers/leds/Kconfig 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/drivers/leds/Kconfig 2007-12-03 11:08:06.000000000 +0100
++++ linux-2.6.23/drivers/leds/Kconfig 2007-12-14 15:32:37.000000000 +0100
@@ -101,6 +101,12 @@
outputs. To be useful the particular board must have LEDs
and they must be connected to the GPIO lines.
@@ -16,8 +16,8 @@ diff -urN linux-2.6.23.orig/drivers/leds/Kconfig linux-2.6.23/drivers/leds/Kconf
config LEDS_TRIGGERS
diff -urN linux-2.6.23.orig/drivers/leds/leds-mpc8313e-rdb.c linux-2.6.23/drivers/leds/leds-mpc8313e-rdb.c
--- linux-2.6.23.orig/drivers/leds/leds-mpc8313e-rdb.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.23/drivers/leds/leds-mpc8313e-rdb.c 2007-12-03 11:08:36.000000000 +0100
-@@ -0,0 +1,127 @@
++++ linux-2.6.23/drivers/leds/leds-mpc8313e-rdb.c 2007-12-14 15:32:55.000000000 +0100
+@@ -0,0 +1,171 @@
+/*
+ * drivers/leds/leds-mpc8313e-rdb.c
+ * Copyright (C) 2007 Leon Woestenberg <leon@sidebranch.com>
@@ -41,73 +41,115 @@ diff -urN linux-2.6.23.orig/drivers/leds/leds-mpc8313e-rdb.c linux-2.6.23/driver
+#define LEDS_BASE 0xfa000000
+#define LEDS_SIZE 0x2
+
-+static struct platform_dev *leds_pdev = NULL;
++static struct platform_device *leds_pdev = NULL;
+static struct resource *led_mem = NULL;
+static void *led_io = NULL;
-+static u8 led_state = 0;
++static u8 led_state = 0xff;
+
-+static void mpc8313leds_green_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+ led_state = value ? led_state&~32 : led_state|32;
-+ iowrite8(led_state, led_io);
-+}
-+
-+static struct led_classdev mpc8313_green_led = {
-+ .name = "mpc8313:green",
-+ .brightness_set = mpc8313leds_green_set,
++struct mpc8313_led {
++ struct led_classdev cdev;
++ u8 bitmask;
+};
+
-+static void mpc8313leds_yellow_set(struct led_classdev *led_cdev, enum led_brightness value)
++static void mpc8313leds_set(struct led_classdev *led_cdev, enum led_brightness value)
+{
-+ led_state = value ? led_state&~64 : led_state|64;
++ struct mpc8313_led *led_dev = container_of(led_cdev, struct mpc8313_led, cdev);
++ if (value)
++ led_state &= ~led_dev->bitmask;
++ else
++ led_state |= led_dev->bitmask;
+ iowrite8(led_state, led_io);
+}
+
-+static struct led_classdev mpc8313_yellow_led = {
-+ .name = "mpc8313:yellow",
-+ .brightness_set = mpc8313leds_yellow_set,
-+};
-+
-+static void mpc8313leds_red_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+ led_state = value ? led_state&~128 : led_state|128;
-+ iowrite8(led_state, led_io);
-+}
-+
-+static struct led_classdev mpc8313_red_led = {
-+ .name = "mpc8313:red",
-+ .brightness_set = mpc8313leds_red_set,
++static struct mpc8313_led mpc8313_leds[] = {
++ {
++ .cdev = {
++ .name = "mpc8313:led0",
++ .brightness_set = mpc8313leds_set,
++ },
++ .bitmask = 1,
++ },
++ {
++ .cdev = {
++ .name = "mpc8313:led1",
++ .brightness_set = mpc8313leds_set,
++ },
++ .bitmask = 2,
++ },
++ {
++ .cdev = {
++ .name = "mpc8313:led2",
++ .brightness_set = mpc8313leds_set,
++ },
++ .bitmask = 4,
++ },
++ {
++ .cdev = {
++ .name = "mpc8313:led3",
++ .brightness_set = mpc8313leds_set,
++ },
++ .bitmask = 8,
++ },
++ {
++ .cdev = {
++ .name = "mpc8313:led4",
++ .brightness_set = mpc8313leds_set,
++ },
++ .bitmask = 16,
++ },
++ {
++ .cdev = {
++ .name = "mpc8313:green",
++ .brightness_set = mpc8313leds_set,
++ },
++ .bitmask = 32,
++ },
++ {
++ .cdev = {
++ .name = "mpc8313:yellow",
++ .brightness_set = mpc8313leds_set,
++ },
++ .bitmask = 64,
++ },
++ {
++ .cdev = {
++ .name = "mpc8313:red",
++ .brightness_set = mpc8313leds_set,
++ },
++ .bitmask = 128,
++ },
+};
+
+static int mpc8313leds_probe(struct platform_device *pdev)
+{
++ int i;
+ int ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &mpc8313_green_led);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &mpc8313_yellow_led);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &mpc8313_red_led);
-+ if (ret < 0)
-+ return ret;
++
++ for (i = ret = 0; ret >= 0 && i < ARRAY_SIZE(mpc8313_leds); i++) {
++ ret = led_classdev_register(&pdev->dev,
++ &mpc8313_leds[i].cdev);
++ }
++
++ if (ret < 0 && i > 1) {
++ for (i = i - 2; i >= 0; i--)
++ led_classdev_unregister(&mpc8313_leds[i].cdev);
++ }
+
+ return ret;
+}
+
+static int mpc8313leds_remove(struct platform_device *pdev)
+{
-+ led_classdev_unregister(&mpc8313_green_led);
-+ led_classdev_unregister(&mpc8313_yellow_led);
-+ led_classdev_unregister(&mpc8313_red_led);
++ int i;
++
++ for (i = ARRAY_SIZE(mpc8313_leds) - 1; i >= 0; i--)
++ led_classdev_unregister(&mpc8313_leds[i].cdev);
++
+ return 0;
+}
+
+static struct platform_driver mpc8313leds_driver = {
-+ .driver = {
++ .driver = {
+ .name = "mpc8313-leds",
+ .owner = THIS_MODULE,
+ },
@@ -125,6 +167,8 @@ diff -urN linux-2.6.23.orig/drivers/leds/leds-mpc8313e-rdb.c linux-2.6.23/driver
+ led_mem = NULL;
+ return -ENOMEM;
+ }
++ iowrite8(led_state, led_io);
++
+ leds_pdev = platform_device_register_simple("mpc8313-leds", -1, NULL, 0);
+
+ return platform_driver_register(&mpc8313leds_driver);
@@ -147,7 +191,7 @@ diff -urN linux-2.6.23.orig/drivers/leds/leds-mpc8313e-rdb.c linux-2.6.23/driver
+MODULE_LICENSE("GPL");
diff -urN linux-2.6.23.orig/drivers/leds/Makefile linux-2.6.23/drivers/leds/Makefile
--- linux-2.6.23.orig/drivers/leds/Makefile 2007-10-09 22:31:38.000000000 +0200
-+++ linux-2.6.23/drivers/leds/Makefile 2007-12-03 11:08:06.000000000 +0100
++++ linux-2.6.23/drivers/leds/Makefile 2007-12-14 15:32:37.000000000 +0100
@@ -17,6 +17,7 @@
obj-$(CONFIG_LEDS_H1940) += leds-h1940.o
obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o
diff --git a/packages/linux/linux-2.6.23/mpc8323e-rdb/defconfig b/packages/linux/linux-2.6.23/mpc8323e-rdb/defconfig
index f1990e62cc..c4a0e6c8cf 100644
--- a/packages/linux/linux-2.6.23/mpc8323e-rdb/defconfig
+++ b/packages/linux/linux-2.6.23/mpc8323e-rdb/defconfig
@@ -1413,12 +1413,12 @@ CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_MMC_WBSD is not set
# CONFIG_MMC_TIFM_SD is not set
CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
+CONFIG_LEDS_CLASS=y
#
# LED drivers
#
-CONFIG_LEDS_MPC832X=m
+CONFIG_LEDS_MPC832X=y
#
# LED Triggers
diff --git a/packages/linux/linux-bd-neon-2.6_2.6.22.bb b/packages/linux/linux-bd-neon-2.6_2.6.22.bb
index 6d2472935f..46fa4295b6 100644
--- a/packages/linux/linux-bd-neon-2.6_2.6.22.bb
+++ b/packages/linux/linux-bd-neon-2.6_2.6.22.bb
@@ -2,9 +2,9 @@ DESCRIPTION = "2.6 Linux Kernel for Boundary Devices NEON Board"
SECTION = "kernel"
HOMEPAGE = "N/A"
LICENSE = "GPL"
-DEPENDS += "uboot-utils"
+DEPENDS += "u-boot-utils-native"
-PR = "r1"
+PR = "r2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2 \
http://www.boundarydevices.com/boundary-2.6.22-2007-07-22.patch.bz2;patch=1 \
diff --git a/packages/qt/qt4-x11-free-4.1.2/.mtn2git_empty b/packages/linux/linux-dht-walnut-2.6.20/dht-walnut/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qt/qt4-x11-free-4.1.2/.mtn2git_empty
+++ b/packages/linux/linux-dht-walnut-2.6.20/dht-walnut/.mtn2git_empty
diff --git a/packages/linux/linux-dht-walnut-2.6.20/dht-walnut_defconfig b/packages/linux/linux-dht-walnut-2.6.20/dht-walnut/defconfig
index b6b752f623..b6b752f623 100644
--- a/packages/linux/linux-dht-walnut-2.6.20/dht-walnut_defconfig
+++ b/packages/linux/linux-dht-walnut-2.6.20/dht-walnut/defconfig
diff --git a/packages/qt/qt4-x11-free-4.3.2/.mtn2git_empty b/packages/linux/linux-dht-walnut/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qt/qt4-x11-free-4.3.2/.mtn2git_empty
+++ b/packages/linux/linux-dht-walnut/.mtn2git_empty
diff --git a/packages/qte-fonts-common/.mtn2git_empty b/packages/linux/linux-dht-walnut/dht-walnut/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qte-fonts-common/.mtn2git_empty
+++ b/packages/linux/linux-dht-walnut/dht-walnut/.mtn2git_empty
diff --git a/packages/linux/linux-dht-walnut/dht-walnut/defconfig b/packages/linux/linux-dht-walnut/dht-walnut/defconfig
new file mode 100644
index 0000000000..ddd6d9fc8f
--- /dev/null
+++ b/packages/linux/linux-dht-walnut/dht-walnut/defconfig
@@ -0,0 +1,2353 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.23
+# Wed Dec 26 13:45:00 2007
+#
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_ARCH_HAS_ILOG2_U32=y
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_PPC=y
+CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_GENERIC_BUG=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+# CONFIG_EPOLL is not set
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_LSF=y
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# Processor
+#
+# CONFIG_6xx is not set
+CONFIG_40x=y
+# CONFIG_44x is not set
+# CONFIG_8xx is not set
+# CONFIG_E200 is not set
+# CONFIG_E500 is not set
+CONFIG_PPC_DCR_NATIVE=y
+CONFIG_PPC_DCR=y
+CONFIG_MATH_EMULATION=y
+# CONFIG_KEXEC is not set
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=m
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=m
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_4xx=y
+# CONFIG_WANT_EARLY_SERIAL is not set
+
+#
+# IBM 4xx options
+#
+# CONFIG_BUBINGA is not set
+# CONFIG_CPCI405 is not set
+# CONFIG_EP405 is not set
+# CONFIG_REDWOOD_5 is not set
+# CONFIG_REDWOOD_6 is not set
+# CONFIG_SYCAMORE is not set
+CONFIG_WALNUT=y
+# CONFIG_XILINX_ML300 is not set
+# CONFIG_XILINX_ML403 is not set
+CONFIG_IBM405_ERR77=y
+CONFIG_IBM405_ERR51=y
+CONFIG_IBM_OCP=y
+CONFIG_BIOS_FIXUP=y
+CONFIG_405GP=y
+CONFIG_PPC4xx_DMA=y
+CONFIG_PPC4xx_EDMA=y
+CONFIG_PPC_GEN550=y
+CONFIG_UART0_TTYS0=y
+# CONFIG_UART0_TTYS1 is not set
+CONFIG_NOT_COHERENT_CACHE=y
+
+#
+# Platform options
+#
+# CONFIG_PC_KEYBOARD is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_250 is not set
+CONFIG_HZ_300=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=300
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+# CONFIG_PREEMPT_BKL is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=m
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE=" debug "
+# CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+CONFIG_ZONE_DMA=y
+# CONFIG_PPC_I8259 is not set
+CONFIG_PPC_INDIRECT_PCI=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCI_SYSCALL=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_YENTA_O2=y
+CONFIG_YENTA_RICOH=y
+CONFIG_YENTA_TI=y
+CONFIG_YENTA_ENE_TUNE=y
+CONFIG_YENTA_TOSHIBA=y
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_PCCARD_NONSTATIC=m
+
+#
+# Advanced setup
+#
+CONFIG_ADVANCED_OPTIONS=y
+CONFIG_HIGHMEM_START=0xfe000000
+# CONFIG_LOWMEM_SIZE_BOOL is not set
+CONFIG_LOWMEM_SIZE=0x30000000
+# CONFIG_KERNEL_START_BOOL is not set
+CONFIG_KERNEL_START=0xc0000000
+# CONFIG_TASK_SIZE_BOOL is not set
+CONFIG_TASK_SIZE=0x80000000
+# CONFIG_CONSISTENT_START_BOOL is not set
+CONFIG_CONSISTENT_START=0xff100000
+# CONFIG_CONSISTENT_SIZE_BOOL is not set
+CONFIG_CONSISTENT_SIZE=0x00200000
+# CONFIG_BOOT_LOAD_BOOL is not set
+CONFIG_BOOT_LOAD=0x00400000
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_MROUTE=y
+# CONFIG_IP_PIMSM_V1 is not set
+# CONFIG_IP_PIMSM_V2 is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETLABEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_IP6_NF_QUEUE=m
+# CONFIG_IP6_NF_IPTABLES is not set
+
+#
+# DECnet: Netfilter Configuration
+#
+# CONFIG_DECNET_NF_GRABULATOR is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+# CONFIG_IP_DCCP is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+# CONFIG_SCTP_HMAC_SHA1 is not set
+CONFIG_SCTP_HMAC_MD5=y
+# CONFIG_TIPC is not set
+CONFIG_ATM=m
+CONFIG_ATM_CLIP=m
+# CONFIG_ATM_CLIP_NO_ICMP is not set
+CONFIG_ATM_LANE=m
+CONFIG_ATM_MPOA=m
+CONFIG_ATM_BR2684=m
+# CONFIG_ATM_BR2684_IPFILTER is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+CONFIG_DECNET=m
+# CONFIG_DECNET_ROUTER is not set
+CONFIG_LLC=m
+CONFIG_LLC2=m
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+CONFIG_ATALK=m
+# CONFIG_DEV_APPLETALK is not set
+CONFIG_X25=m
+CONFIG_LAPB=m
+CONFIG_ECONET=m
+# CONFIG_ECONET_AUNUDP is not set
+# CONFIG_ECONET_NATIVE is not set
+CONFIG_WAN_ROUTER=m
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_ATM=m
+CONFIG_NET_SCH_PRIO=m
+# CONFIG_NET_SCH_RR is not set
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+# CONFIG_CLS_U32_PERF is not set
+# CONFIG_CLS_U32_MARK is not set
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=y
+# CONFIG_NET_ACT_GACT is not set
+# CONFIG_NET_ACT_MIRRED is not set
+# CONFIG_NET_ACT_PEDIT is not set
+# CONFIG_NET_ACT_SIMP is not set
+CONFIG_NET_CLS_POLICE=y
+# CONFIG_NET_CLS_IND is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_AF_RXRPC=m
+# CONFIG_AF_RXRPC_DEBUG is not set
+# CONFIG_RXKAD is not set
+CONFIG_FIB_RULES=y
+
+#
+# Wireless
+#
+CONFIG_CFG80211=m
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+# CONFIG_STANDALONE is not set
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=m
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=m
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=m
+CONFIG_MTD_BLOCK_RO=m
+CONFIG_FTL=m
+CONFIG_NFTL=m
+# CONFIG_NFTL_RW is not set
+CONFIG_INFTL=m
+CONFIG_RFD_FTL=m
+CONFIG_SSFDC=m
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+CONFIG_MTD_JEDECPROBE=m
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=m
+CONFIG_MTD_CFI_AMDSTD=m
+CONFIG_MTD_CFI_STAA=m
+CONFIG_MTD_CFI_UTIL=m
+CONFIG_MTD_RAM=m
+CONFIG_MTD_ROM=m
+CONFIG_MTD_ABSENT=m
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=m
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0x4000000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+CONFIG_MTD_WALNUT=m
+CONFIG_MTD_PCI=m
+CONFIG_MTD_PLATRAM=m
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_PMC551=m
+CONFIG_MTD_PMC551_BUGFIX=y
+# CONFIG_MTD_PMC551_DEBUG is not set
+CONFIG_MTD_DATAFLASH=m
+CONFIG_MTD_M25P80=m
+CONFIG_MTD_SLRAM=y
+CONFIG_MTD_PHRAM=y
+# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_BLOCK2MTD=y
+
+#
+# Disk-On-Chip Device Drivers
+#
+CONFIG_MTD_DOC2000=m
+CONFIG_MTD_DOC2001=m
+CONFIG_MTD_DOC2001PLUS=m
+CONFIG_MTD_DOCPROBE=m
+CONFIG_MTD_DOCECC=m
+# CONFIG_MTD_DOCPROBE_ADVANCED is not set
+CONFIG_MTD_DOCPROBE_ADDRESS=0
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_IDS=m
+CONFIG_MTD_NAND_DISKONCHIP=m
+# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
+CONFIG_MTD_NAND_CAFE=m
+CONFIG_MTD_NAND_NANDSIM=m
+# CONFIG_MTD_NAND_PLATFORM is not set
+CONFIG_MTD_ONENAND=m
+# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
+# CONFIG_MTD_ONENAND_OTP is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+# CONFIG_PARPORT_PC_PCMCIA is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
+# CONFIG_PARPORT_1284 is not set
+CONFIG_PARPORT_NOT_PC=y
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=y
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_SX8 is not set
+CONFIG_BLK_DEV_UB=m
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+# CONFIG_XILINX_SYSACE is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDECS is not set
+# CONFIG_BLK_DEV_DELKIN is not set
+CONFIG_BLK_DEV_IDECD=y
+CONFIG_BLK_DEV_IDETAPE=m
+CONFIG_BLK_DEV_IDEFLOPPY=m
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_IDEPCI_SHARE_IRQ is not set
+CONFIG_IDEPCI_PCIBUS_ORDER=y
+CONFIG_BLK_DEV_OFFBOARD=y
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+# CONFIG_IDEDMA_ONLYDISK is not set
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_JMICRON is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+# CONFIG_BLK_DEV_PIIX is not set
+# CONFIG_BLK_DEV_IT8213 is not set
+# CONFIG_BLK_DEV_IT821X is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+CONFIG_BLK_DEV_PDC202XX_OLD=y
+CONFIG_PDC202XX_BURST=y
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SL82C105 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_BLK_DEV_TC86C001 is not set
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+CONFIG_SCSI_NETLINK=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_FC_ATTRS=m
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+CONFIG_DM_MULTIPATH_RDAC=m
+CONFIG_DM_DELAY=m
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+CONFIG_IEEE1394=m
+
+#
+# Subsystem Options
+#
+# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+
+#
+# Controllers
+#
+CONFIG_IEEE1394_PCILYNX=m
+CONFIG_IEEE1394_OHCI1394=m
+
+#
+# Protocols
+#
+CONFIG_IEEE1394_VIDEO1394=m
+CONFIG_IEEE1394_SBP2=m
+# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
+CONFIG_IEEE1394_ETH1394=m
+CONFIG_IEEE1394_DV1394=m
+CONFIG_IEEE1394_RAWIO=m
+# CONFIG_I2O is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_IFB is not set
+# CONFIG_DUMMY is not set
+CONFIG_BONDING=m
+# CONFIG_MACVLAN is not set
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+CONFIG_NET_TULIP=y
+CONFIG_DE2104X=m
+CONFIG_TULIP=m
+# CONFIG_TULIP_MWI is not set
+# CONFIG_TULIP_MMIO is not set
+# CONFIG_TULIP_NAPI is not set
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+# CONFIG_ULI526X is not set
+CONFIG_PCMCIA_XIRCOM=m
+CONFIG_PCMCIA_XIRTULIP=m
+CONFIG_HP100=m
+CONFIG_IBM_EMAC=y
+CONFIG_IBM_EMAC_RXB=128
+CONFIG_IBM_EMAC_TXB=64
+CONFIG_IBM_EMAC_POLL_WEIGHT=32
+CONFIG_IBM_EMAC_RX_COPY_THRESHOLD=256
+CONFIG_IBM_EMAC_RX_SKB_HEADROOM=0
+# CONFIG_IBM_EMAC_DEBUG is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+# CONFIG_PCNET32_NAPI is not set
+CONFIG_AMD8111_ETH=m
+# CONFIG_AMD8111E_NAPI is not set
+CONFIG_ADAPTEC_STARFIRE=m
+# CONFIG_ADAPTEC_STARFIRE_NAPI is not set
+CONFIG_B44=m
+CONFIG_FORCEDETH=m
+# CONFIG_FORCEDETH_NAPI is not set
+CONFIG_DGRS=m
+CONFIG_EEPRO100=m
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+# CONFIG_SUNDANCE_MMIO is not set
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_VIA_RHINE_NAPI is not set
+# CONFIG_SC92031 is not set
+# CONFIG_NET_POCKET is not set
+CONFIG_NETDEV_1000=y
+CONFIG_ACENIC=m
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+CONFIG_DL2K=m
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+# CONFIG_R8169_NAPI is not set
+# CONFIG_R8169_VLAN is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+CONFIG_SK98LIN=m
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+CONFIG_BNX2=m
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+CONFIG_NETDEV_10000=y
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+# CONFIG_MLX4_CORE is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+CONFIG_USB_PEGASUS=y
+# CONFIG_USB_RTL8150 is not set
+CONFIG_USB_USBNET_MII=y
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_AX8817X=y
+CONFIG_USB_NET_CDCETHER=y
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=y
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=y
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+CONFIG_WAN=y
+CONFIG_LANMEDIA=m
+CONFIG_HDLC=m
+# CONFIG_HDLC_RAW is not set
+# CONFIG_HDLC_RAW_ETH is not set
+# CONFIG_HDLC_CISCO is not set
+# CONFIG_HDLC_FR is not set
+# CONFIG_HDLC_PPP is not set
+# CONFIG_HDLC_X25 is not set
+CONFIG_PCI200SYN=m
+CONFIG_WANXL=m
+CONFIG_PC300=m
+
+#
+# Cyclades-PC300 MLPPP support is disabled.
+#
+
+#
+# Refer to the file README.mlppp, provided by PC300 package.
+#
+# CONFIG_PC300TOO is not set
+CONFIG_FARSYNC=m
+CONFIG_DSCC4=m
+# CONFIG_DSCC4_PCISYNC is not set
+# CONFIG_DSCC4_PCI_RST is not set
+CONFIG_DLCI=m
+CONFIG_DLCI_MAX=8
+# CONFIG_WAN_ROUTER_DRIVERS is not set
+CONFIG_LAPBETHER=m
+CONFIG_X25_ASY=m
+CONFIG_ATM_DRIVERS=y
+# CONFIG_ATM_DUMMY is not set
+# CONFIG_ATM_TCP is not set
+# CONFIG_ATM_LANAI is not set
+# CONFIG_ATM_ENI is not set
+# CONFIG_ATM_FIRESTREAM is not set
+# CONFIG_ATM_ZATM is not set
+# CONFIG_ATM_NICSTAR is not set
+# CONFIG_ATM_IDT77252 is not set
+# CONFIG_ATM_AMBASSADOR is not set
+# CONFIG_ATM_HORIZON is not set
+# CONFIG_ATM_IA is not set
+# CONFIG_ATM_FORE200E_MAYBE is not set
+# CONFIG_ATM_HE is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+CONFIG_PPPOE=m
+CONFIG_PPPOATM=m
+# CONFIG_PPPOL2TP is not set
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLHC=m
+CONFIG_SLIP_SMART=y
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+CONFIG_SHAPER=m
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=y
+# CONFIG_SERIAL_8250_CS is not set
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_UARTLITE is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+CONFIG_PPDEV=m
+# CONFIG_TIPAR is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+CONFIG_SOFT_WATCHDOG=m
+# CONFIG_BOOKE_WDT is not set
+
+#
+# PCI-based Watchdog Cards
+#
+CONFIG_PCIPCWATCHDOG=m
+CONFIG_WDTPCI=m
+# CONFIG_WDT_501_PCI is not set
+
+#
+# USB-based Watchdog Cards
+#
+CONFIG_USBPCWATCHDOG=m
+CONFIG_HW_RANDOM=m
+CONFIG_NVRAM=m
+# CONFIG_GEN_RTC is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_SYNCLINK_CS=m
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+CONFIG_I2C_ALGOPCF=y
+CONFIG_I2C_ALGOPCA=y
+
+#
+# I2C Hardware Bus support
+#
+# 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_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+CONFIG_I2C_IBM_IIC=y
+# CONFIG_I2C_MPC 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_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_SENSORS_DS1337=m
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+CONFIG_SENSORS_EEPROM=m
+CONFIG_SENSORS_PCF8574=m
+# CONFIG_SENSORS_PCA9539 is not set
+CONFIG_SENSORS_PCF8591=m
+CONFIG_SENSORS_M41T00=m
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=m
+# CONFIG_SPI_BUTTERFLY is not set
+# CONFIG_SPI_LM70_LLP is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+CONFIG_W1=m
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_MASTER_MATROX=m
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
+# CONFIG_W1_SLAVE_DS2760 is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=m
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ABITUGURU3 is not set
+# CONFIG_SENSORS_AD7418 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_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 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_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 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_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_TVAUDIO=m
+CONFIG_VIDEO_TDA7432=m
+CONFIG_VIDEO_TDA9840=m
+CONFIG_VIDEO_TDA9875=m
+CONFIG_VIDEO_TEA6415C=m
+CONFIG_VIDEO_TEA6420=m
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_BT819=m
+CONFIG_VIDEO_BT856=m
+CONFIG_VIDEO_SAA7110=m
+CONFIG_VIDEO_SAA7111=m
+CONFIG_VIDEO_SAA7114=m
+CONFIG_VIDEO_VPX3220=m
+CONFIG_VIDEO_SAA7185=m
+CONFIG_VIDEO_ADV7170=m
+CONFIG_VIDEO_ADV7175=m
+# CONFIG_VIDEO_VIVI is not set
+CONFIG_VIDEO_BT848=m
+# CONFIG_VIDEO_BT848_DVB is not set
+# CONFIG_VIDEO_SAA6588 is not set
+CONFIG_VIDEO_BWQCAM=m
+CONFIG_VIDEO_CQCAM=m
+CONFIG_VIDEO_CPIA=m
+CONFIG_VIDEO_CPIA_USB=m
+# CONFIG_VIDEO_CPIA2 is not set
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+CONFIG_TUNER_3036=m
+# CONFIG_TUNER_TEA5761 is not set
+CONFIG_VIDEO_STRADIS=m
+CONFIG_VIDEO_ZORAN_ZR36060=m
+CONFIG_VIDEO_ZORAN=m
+CONFIG_VIDEO_ZORAN_BUZ=m
+CONFIG_VIDEO_ZORAN_DC10=m
+CONFIG_VIDEO_ZORAN_DC30=m
+CONFIG_VIDEO_ZORAN_LML33=m
+CONFIG_VIDEO_ZORAN_LML33R10=m
+# CONFIG_VIDEO_ZORAN_AVS6EYES is not set
+CONFIG_VIDEO_SAA7134=m
+# CONFIG_VIDEO_SAA7134_ALSA is not set
+# CONFIG_VIDEO_SAA7134_DVB is not set
+CONFIG_VIDEO_MXB=m
+CONFIG_VIDEO_DPC=m
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+# CONFIG_VIDEO_CX88_ALSA is not set
+# CONFIG_VIDEO_CX88_BLACKBIRD is not set
+# CONFIG_VIDEO_CX88_DVB is not set
+# CONFIG_VIDEO_IVTV is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+CONFIG_VIDEO_OVCAMCHIP=m
+CONFIG_USB_W9968CF=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_RADIO_GEMTEK_PCI=m
+CONFIG_RADIO_MAXIRADIO=m
+CONFIG_RADIO_MAESTRO=m
+CONFIG_USB_DSBR=m
+CONFIG_DVB_CORE=m
+# CONFIG_DVB_CORE_ATTACH is not set
+CONFIG_DVB_CAPTURE_DRIVERS=y
+
+#
+# Supported SAA7146 based PCI Adapters
+#
+CONFIG_DVB_AV7110=m
+# CONFIG_DVB_AV7110_FIRMWARE is not set
+CONFIG_DVB_AV7110_OSD=y
+CONFIG_DVB_BUDGET=m
+CONFIG_DVB_BUDGET_CI=m
+CONFIG_DVB_BUDGET_AV=m
+CONFIG_DVB_BUDGET_PATCH=m
+
+#
+# Supported USB Adapters
+#
+# CONFIG_DVB_USB is not set
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+CONFIG_DVB_CINERGYT2=m
+# CONFIG_DVB_CINERGYT2_TUNING is not set
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+
+#
+# Supported BT878 Adapters
+#
+CONFIG_DVB_BT8XX=m
+
+#
+# Supported Pluto2 Adapters
+#
+# CONFIG_DVB_PLUTO2 is not set
+
+#
+# Supported DVB Frontends
+#
+
+#
+# Customise DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_CX24110=m
+# CONFIG_DVB_CX24123 is not set
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_TDA10086=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_SP8870=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_L64781=m
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+# CONFIG_DVB_DIB7000M is not set
+# CONFIG_DVB_DIB7000P is not set
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_VES1820=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_OR51211=m
+CONFIG_DVB_OR51132=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+
+#
+# Tuners/PLL support
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TDA826X=m
+# CONFIG_DVB_TDA827X is not set
+# CONFIG_DVB_TUNER_QT1010 is not set
+# CONFIG_DVB_TUNER_MT2060 is not set
+
+#
+# Miscellaneous devices
+#
+CONFIG_DVB_LNBP21=m
+# CONFIG_DVB_ISL6421 is not set
+CONFIG_DVB_TUA6100=m
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_BUF=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB_DDC=m
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_CT65550 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+CONFIG_FB_MATROX=y
+CONFIG_FB_MATROX_MILLENIUM=y
+CONFIG_FB_MATROX_MYSTIQUE=y
+CONFIG_FB_MATROX_G=y
+CONFIG_FB_MATROX_I2C=m
+CONFIG_FB_MATROX_MAVEN=m
+CONFIG_FB_MATROX_MULTIHEAD=y
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_VT8623 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+# CONFIG_FB_IBM_GXT4500 is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+CONFIG_SND_SEQ_DUMMY=m
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_MPU401_UART=m
+CONFIG_SND_OPL3_LIB=m
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_MTS64 is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_PORTMAN2X4 is not set
+CONFIG_SND_SB_COMMON=m
+CONFIG_SND_SB16_DSP=m
+
+#
+# PCI devices
+#
+CONFIG_SND_AD1889=m
+CONFIG_SND_ALS300=m
+CONFIG_SND_ALS4000=m
+CONFIG_SND_ALI5451=m
+CONFIG_SND_ATIIXP=m
+CONFIG_SND_ATIIXP_MODEM=m
+CONFIG_SND_AU8810=m
+CONFIG_SND_AU8820=m
+CONFIG_SND_AU8830=m
+CONFIG_SND_AZT3328=m
+CONFIG_SND_BT87X=m
+CONFIG_SND_BT87X_OVERCLOCK=y
+CONFIG_SND_CA0106=m
+CONFIG_SND_CMIPCI=m
+CONFIG_SND_CS4281=m
+CONFIG_SND_CS46XX=m
+CONFIG_SND_CS46XX_NEW_DSP=y
+CONFIG_SND_CS5530=m
+CONFIG_SND_DARLA20=m
+CONFIG_SND_GINA20=m
+CONFIG_SND_LAYLA20=m
+CONFIG_SND_DARLA24=m
+CONFIG_SND_GINA24=m
+CONFIG_SND_LAYLA24=m
+CONFIG_SND_MONA=m
+CONFIG_SND_MIA=m
+CONFIG_SND_ECHO3G=m
+CONFIG_SND_INDIGO=m
+CONFIG_SND_INDIGOIO=m
+CONFIG_SND_INDIGODJ=m
+CONFIG_SND_EMU10K1=m
+CONFIG_SND_EMU10K1X=m
+CONFIG_SND_ENS1370=m
+CONFIG_SND_ENS1371=m
+CONFIG_SND_ES1938=m
+CONFIG_SND_ES1968=m
+CONFIG_SND_FM801=m
+CONFIG_SND_FM801_TEA575X_BOOL=y
+CONFIG_SND_FM801_TEA575X=m
+CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDSP=m
+CONFIG_SND_HDSPM=m
+CONFIG_SND_ICE1712=m
+CONFIG_SND_ICE1724=m
+CONFIG_SND_INTEL8X0=m
+CONFIG_SND_INTEL8X0M=m
+CONFIG_SND_KORG1212=m
+CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MAESTRO3=m
+CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_MIXART=m
+CONFIG_SND_NM256=m
+CONFIG_SND_PCXHR=m
+CONFIG_SND_RIPTIDE=m
+CONFIG_SND_RME32=m
+CONFIG_SND_RME96=m
+CONFIG_SND_RME9652=m
+CONFIG_SND_SONICVIBES=m
+CONFIG_SND_TRIDENT=m
+CONFIG_SND_VIA82XX=m
+CONFIG_SND_VIA82XX_MODEM=m
+CONFIG_SND_VX222=m
+CONFIG_SND_YMFPCI=m
+CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y
+CONFIG_SND_AC97_POWER_SAVE=y
+
+#
+# ALSA PowerMac devices
+#
+
+#
+# ALSA PowerPC devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_USX2Y=m
+CONFIG_SND_USB_CAIAQ=m
+# CONFIG_SND_USB_CAIAQ_INPUT is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=y
+# CONFIG_USB_U132_HCD is not set
+CONFIG_USB_SL811_HCD=m
+# CONFIG_USB_SL811_CS is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_KARMA=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+CONFIG_USB_USS720=m
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+CONFIG_USB_SERIAL_AIRPRIME=m
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_SISUSBVGA_CON is not set
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+# CONFIG_USB_IOWARRIOR is not set
+CONFIG_USB_TEST=m
+
+#
+# USB DSL modem support
+#
+CONFIG_USB_ATM=m
+# CONFIG_USB_SPEEDTOUCH is not set
+# CONFIG_USB_CXACRU is not set
+# CONFIG_USB_UEAGLEATM is not set
+# CONFIG_USB_XUSBATM is not set
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+CONFIG_USB_GADGET_NET2280=y
+CONFIG_USB_NET2280=m
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_MMC is not set
+# CONFIG_NEW_LEDS is not set
+# CONFIG_INFINIBAND is not set
+# CONFIG_EDAC is not set
+CONFIG_RTC_LIB=m
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+
+#
+# DMA Engine support
+#
+CONFIG_DMA_ENGINE=y
+
+#
+# DMA Clients
+#
+CONFIG_NET_DMA=y
+
+#
+# DMA Devices
+#
+CONFIG_INTEL_IOATDMA=m
+# CONFIG_AUXDISPLAY is not set
+
+#
+# Userspace I/O
+#
+# CONFIG_UIO is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
+CONFIG_JFS_FS=m
+# CONFIG_JFS_POSIX_ACL is not set
+# CONFIG_JFS_SECURITY is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_XFS_FS=m
+CONFIG_XFS_QUOTA=y
+CONFIG_XFS_SECURITY=y
+CONFIG_XFS_POSIX_ACL=y
+CONFIG_XFS_RT=y
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_MINIX_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=m
+CONFIG_AUTOFS4_FS=m
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=y
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+CONFIG_ADFS_FS=m
+# CONFIG_ADFS_FS_RW is not set
+CONFIG_AFFS_FS=m
+# CONFIG_ECRYPT_FS is not set
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+CONFIG_BFS_FS=m
+CONFIG_EFS_FS=m
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+CONFIG_VXFS_FS=m
+CONFIG_HPFS_FS=m
+CONFIG_QNX4FS_FS=m
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+# CONFIG_NFSD_V3 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_RPCSEC_GSS_SPKM3=m
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+CONFIG_NCP_FS=m
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+CONFIG_AFS_FS=m
+# CONFIG_AFS_DEBUG is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# IBM 40x options
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_REED_SOLOMON=m
+CONFIG_REED_SOLOMON_DEC16=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_SERIAL_TEXT_DEBUG is not set
+CONFIG_PPC_OCP=y
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+# CONFIG_SECURITY_NETWORK_XFRM is not set
+CONFIG_SECURITY_CAPABILITIES=m
+CONFIG_SECURITY_ROOTPLUG=m
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_HW=y
diff --git a/packages/linux/linux-dht-walnut/remove-todc.patch b/packages/linux/linux-dht-walnut/remove-todc.patch
new file mode 100644
index 0000000000..afdc904a08
--- /dev/null
+++ b/packages/linux/linux-dht-walnut/remove-todc.patch
@@ -0,0 +1,920 @@
+Index: working-2.6/arch/powerpc/sysdev/todc.c
+===================================================================
+--- working-2.6.orig/arch/powerpc/sysdev/todc.c 2006-08-25 14:27:11.000000000 +1000
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,392 +0,0 @@
+-/*
+- * Time of Day Clock support for the M48T35, M48T37, M48T59, and MC146818
+- * Real Time Clocks/Timekeepers.
+- *
+- * Author: Mark A. Greer <mgreer@mvista.com>
+- *
+- * 2001-2004 (c) MontaVista, Software, Inc. This file is licensed under
+- * the terms of the GNU General Public License version 2. This program
+- * is licensed "as is" without any warranty of any kind, whether express
+- * or implied.
+- */
+-#include <linux/errno.h>
+-#include <linux/init.h>
+-#include <linux/kernel.h>
+-#include <linux/time.h>
+-#include <linux/timex.h>
+-#include <linux/bcd.h>
+-#include <linux/mc146818rtc.h>
+-
+-#include <asm/machdep.h>
+-#include <asm/io.h>
+-#include <asm/time.h>
+-#include <asm/todc.h>
+-
+-/*
+- * Depending on the hardware on your board and your board design, the
+- * RTC/NVRAM may be accessed either directly (like normal memory) or via
+- * address/data registers. If your board uses the direct method, set
+- * 'nvram_data' to the base address of your nvram and leave 'nvram_as0' and
+- * 'nvram_as1' NULL. If your board uses address/data regs to access nvram,
+- * set 'nvram_as0' to the address of the lower byte, set 'nvram_as1' to the
+- * address of the upper byte (leave NULL if using mc146818), and set
+- * 'nvram_data' to the address of the 8-bit data register.
+- *
+- * Note: Even though the documentation for the various RTC chips say that it
+- * take up to a second before it starts updating once the 'R' bit is
+- * cleared, they always seem to update even though we bang on it many
+- * times a second. This is true, except for the Dallas Semi 1746/1747
+- * (possibly others). Those chips seem to have a real problem whenever
+- * we set the 'R' bit before reading them, they basically stop counting.
+- * --MAG
+- */
+-
+-/*
+- * 'todc_info' should be initialized in your *_setup.c file to
+- * point to a fully initialized 'todc_info_t' structure.
+- * This structure holds all the register offsets for your particular
+- * TODC/RTC chip.
+- * TODC_ALLOC()/TODC_INIT() will allocate and initialize this table for you.
+- */
+-
+-#ifdef RTC_FREQ_SELECT
+-#undef RTC_FREQ_SELECT
+-#define RTC_FREQ_SELECT control_b /* Register A */
+-#endif
+-
+-#ifdef RTC_CONTROL
+-#undef RTC_CONTROL
+-#define RTC_CONTROL control_a /* Register B */
+-#endif
+-
+-#ifdef RTC_INTR_FLAGS
+-#undef RTC_INTR_FLAGS
+-#define RTC_INTR_FLAGS watchdog /* Register C */
+-#endif
+-
+-#ifdef RTC_VALID
+-#undef RTC_VALID
+-#define RTC_VALID interrupts /* Register D */
+-#endif
+-
+-/* Access routines when RTC accessed directly (like normal memory) */
+-u_char
+-todc_direct_read_val(int addr)
+-{
+- return readb((void __iomem *)(todc_info->nvram_data + addr));
+-}
+-
+-void
+-todc_direct_write_val(int addr, unsigned char val)
+-{
+- writeb(val, (void __iomem *)(todc_info->nvram_data + addr));
+- return;
+-}
+-
+-/* Access routines for accessing m48txx type chips via addr/data regs */
+-u_char
+-todc_m48txx_read_val(int addr)
+-{
+- outb(addr, todc_info->nvram_as0);
+- outb(addr>>todc_info->as0_bits, todc_info->nvram_as1);
+- return inb(todc_info->nvram_data);
+-}
+-
+-void
+-todc_m48txx_write_val(int addr, unsigned char val)
+-{
+- outb(addr, todc_info->nvram_as0);
+- outb(addr>>todc_info->as0_bits, todc_info->nvram_as1);
+- outb(val, todc_info->nvram_data);
+- return;
+-}
+-
+-/* Access routines for accessing mc146818 type chips via addr/data regs */
+-u_char
+-todc_mc146818_read_val(int addr)
+-{
+- outb_p(addr, todc_info->nvram_as0);
+- return inb_p(todc_info->nvram_data);
+-}
+-
+-void
+-todc_mc146818_write_val(int addr, unsigned char val)
+-{
+- outb_p(addr, todc_info->nvram_as0);
+- outb_p(val, todc_info->nvram_data);
+-}
+-
+-
+-/*
+- * Routines to make RTC chips with NVRAM buried behind an addr/data pair
+- * have the NVRAM and clock regs appear at the same level.
+- * The NVRAM will appear to start at addr 0 and the clock regs will appear
+- * to start immediately after the NVRAM (actually, start at offset
+- * todc_info->nvram_size).
+- */
+-static inline u_char
+-todc_read_val(int addr)
+-{
+- u_char val;
+-
+- if (todc_info->sw_flags & TODC_FLAG_2_LEVEL_NVRAM) {
+- if (addr < todc_info->nvram_size) { /* NVRAM */
+- ppc_md.rtc_write_val(todc_info->nvram_addr_reg, addr);
+- val = ppc_md.rtc_read_val(todc_info->nvram_data_reg);
+- } else { /* Clock Reg */
+- addr -= todc_info->nvram_size;
+- val = ppc_md.rtc_read_val(addr);
+- }
+- } else
+- val = ppc_md.rtc_read_val(addr);
+-
+- return val;
+-}
+-
+-static inline void
+-todc_write_val(int addr, u_char val)
+-{
+- if (todc_info->sw_flags & TODC_FLAG_2_LEVEL_NVRAM) {
+- if (addr < todc_info->nvram_size) { /* NVRAM */
+- ppc_md.rtc_write_val(todc_info->nvram_addr_reg, addr);
+- ppc_md.rtc_write_val(todc_info->nvram_data_reg, val);
+- } else { /* Clock Reg */
+- addr -= todc_info->nvram_size;
+- ppc_md.rtc_write_val(addr, val);
+- }
+- } else
+- ppc_md.rtc_write_val(addr, val);
+-}
+-
+-/*
+- * TODC routines
+- *
+- * There is some ugly stuff in that there are assumptions for the mc146818.
+- *
+- * Assumptions:
+- * - todc_info->control_a has the offset as mc146818 Register B reg
+- * - todc_info->control_b has the offset as mc146818 Register A reg
+- * - m48txx control reg's write enable or 'W' bit is same as
+- * mc146818 Register B 'SET' bit (i.e., 0x80)
+- *
+- * These assumptions were made to make the code simpler.
+- */
+-long __init
+-todc_time_init(void)
+-{
+- u_char cntl_b;
+-
+- if (!ppc_md.rtc_read_val)
+- ppc_md.rtc_read_val = ppc_md.nvram_read_val;
+- if (!ppc_md.rtc_write_val)
+- ppc_md.rtc_write_val = ppc_md.nvram_write_val;
+-
+- cntl_b = todc_read_val(todc_info->control_b);
+-
+- if (todc_info->rtc_type == TODC_TYPE_MC146818) {
+- if ((cntl_b & 0x70) != 0x20) {
+- printk(KERN_INFO "TODC real-time-clock was stopped."
+- " Now starting...");
+- cntl_b &= ~0x70;
+- cntl_b |= 0x20;
+- }
+-
+- todc_write_val(todc_info->control_b, cntl_b);
+- } else if (todc_info->rtc_type == TODC_TYPE_DS17285) {
+- u_char mode;
+-
+- mode = todc_read_val(TODC_TYPE_DS17285_CNTL_A);
+- /* Make sure countdown clear is not set */
+- mode &= ~0x40;
+- /* Enable oscillator, extended register set */
+- mode |= 0x30;
+- todc_write_val(TODC_TYPE_DS17285_CNTL_A, mode);
+-
+- } else if (todc_info->rtc_type == TODC_TYPE_DS1501) {
+- u_char month;
+-
+- todc_info->enable_read = TODC_DS1501_CNTL_B_TE;
+- todc_info->enable_write = TODC_DS1501_CNTL_B_TE;
+-
+- month = todc_read_val(todc_info->month);
+-
+- if ((month & 0x80) == 0x80) {
+- printk(KERN_INFO "TODC %s %s\n",
+- "real-time-clock was stopped.",
+- "Now starting...");
+- month &= ~0x80;
+- todc_write_val(todc_info->month, month);
+- }
+-
+- cntl_b &= ~TODC_DS1501_CNTL_B_TE;
+- todc_write_val(todc_info->control_b, cntl_b);
+- } else { /* must be a m48txx type */
+- u_char cntl_a;
+-
+- todc_info->enable_read = TODC_MK48TXX_CNTL_A_R;
+- todc_info->enable_write = TODC_MK48TXX_CNTL_A_W;
+-
+- cntl_a = todc_read_val(todc_info->control_a);
+-
+- /* Check & clear STOP bit in control B register */
+- if (cntl_b & TODC_MK48TXX_DAY_CB) {
+- printk(KERN_INFO "TODC %s %s\n",
+- "real-time-clock was stopped.",
+- "Now starting...");
+-
+- cntl_a |= todc_info->enable_write;
+- cntl_b &= ~TODC_MK48TXX_DAY_CB;/* Start Oscil */
+-
+- todc_write_val(todc_info->control_a, cntl_a);
+- todc_write_val(todc_info->control_b, cntl_b);
+- }
+-
+- /* Make sure READ & WRITE bits are cleared. */
+- cntl_a &= ~(todc_info->enable_write | todc_info->enable_read);
+- todc_write_val(todc_info->control_a, cntl_a);
+- }
+-
+- return 0;
+-}
+-
+-/*
+- * There is some ugly stuff in that there are assumptions that for a mc146818,
+- * the todc_info->control_a has the offset of the mc146818 Register B reg and
+- * that the register'ss 'SET' bit is the same as the m48txx's write enable
+- * bit in the control register of the m48txx (i.e., 0x80).
+- *
+- * It was done to make the code look simpler.
+- */
+-void
+-todc_get_rtc_time(struct rtc_time *tm)
+-{
+- uint year = 0, mon = 0, mday = 0, hour = 0, min = 0, sec = 0;
+- uint limit, i;
+- u_char save_control, uip = 0;
+- extern void GregorianDay(struct rtc_time *);
+-
+- spin_lock(&rtc_lock);
+- save_control = todc_read_val(todc_info->control_a);
+-
+- if (todc_info->rtc_type != TODC_TYPE_MC146818) {
+- limit = 1;
+-
+- switch (todc_info->rtc_type) {
+- case TODC_TYPE_DS1553:
+- case TODC_TYPE_DS1557:
+- case TODC_TYPE_DS1743:
+- case TODC_TYPE_DS1746: /* XXXX BAD HACK -> FIX */
+- case TODC_TYPE_DS1747:
+- case TODC_TYPE_DS17285:
+- break;
+- default:
+- todc_write_val(todc_info->control_a,
+- (save_control | todc_info->enable_read));
+- }
+- } else
+- limit = 100000000;
+-
+- for (i=0; i<limit; i++) {
+- if (todc_info->rtc_type == TODC_TYPE_MC146818)
+- uip = todc_read_val(todc_info->RTC_FREQ_SELECT);
+-
+- sec = todc_read_val(todc_info->seconds) & 0x7f;
+- min = todc_read_val(todc_info->minutes) & 0x7f;
+- hour = todc_read_val(todc_info->hours) & 0x3f;
+- mday = todc_read_val(todc_info->day_of_month) & 0x3f;
+- mon = todc_read_val(todc_info->month) & 0x1f;
+- year = todc_read_val(todc_info->year) & 0xff;
+-
+- if (todc_info->rtc_type == TODC_TYPE_MC146818) {
+- uip |= todc_read_val(todc_info->RTC_FREQ_SELECT);
+- if ((uip & RTC_UIP) == 0)
+- break;
+- }
+- }
+-
+- if (todc_info->rtc_type != TODC_TYPE_MC146818) {
+- switch (todc_info->rtc_type) {
+- case TODC_TYPE_DS1553:
+- case TODC_TYPE_DS1557:
+- case TODC_TYPE_DS1743:
+- case TODC_TYPE_DS1746: /* XXXX BAD HACK -> FIX */
+- case TODC_TYPE_DS1747:
+- case TODC_TYPE_DS17285:
+- break;
+- default:
+- save_control &= ~(todc_info->enable_read);
+- todc_write_val(todc_info->control_a, save_control);
+- }
+- }
+- spin_unlock(&rtc_lock);
+-
+- if ((todc_info->rtc_type != TODC_TYPE_MC146818)
+- || ((save_control & RTC_DM_BINARY) == 0)
+- || RTC_ALWAYS_BCD) {
+- BCD_TO_BIN(sec);
+- BCD_TO_BIN(min);
+- BCD_TO_BIN(hour);
+- BCD_TO_BIN(mday);
+- BCD_TO_BIN(mon);
+- BCD_TO_BIN(year);
+- }
+-
+- if ((year + 1900) < 1970) {
+- year += 100;
+- }
+-
+- tm->tm_sec = sec;
+- tm->tm_min = min;
+- tm->tm_hour = hour;
+- tm->tm_mday = mday;
+- tm->tm_mon = mon;
+- tm->tm_year = year;
+-
+- GregorianDay(tm);
+-}
+-
+-int
+-todc_set_rtc_time(struct rtc_time *tm)
+-{
+- u_char save_control, save_freq_select = 0;
+-
+- spin_lock(&rtc_lock);
+- save_control = todc_read_val(todc_info->control_a);
+-
+- /* Assuming MK48T59_RTC_CA_WRITE & RTC_SET are equal */
+- todc_write_val(todc_info->control_a,
+- (save_control | todc_info->enable_write));
+- save_control &= ~(todc_info->enable_write); /* in case it was set */
+-
+- if (todc_info->rtc_type == TODC_TYPE_MC146818) {
+- save_freq_select = todc_read_val(todc_info->RTC_FREQ_SELECT);
+- todc_write_val(todc_info->RTC_FREQ_SELECT,
+- save_freq_select | RTC_DIV_RESET2);
+- }
+-
+- if ((todc_info->rtc_type != TODC_TYPE_MC146818)
+- || ((save_control & RTC_DM_BINARY) == 0)
+- || RTC_ALWAYS_BCD) {
+- BIN_TO_BCD(tm->tm_sec);
+- BIN_TO_BCD(tm->tm_min);
+- BIN_TO_BCD(tm->tm_hour);
+- BIN_TO_BCD(tm->tm_mon);
+- BIN_TO_BCD(tm->tm_mday);
+- BIN_TO_BCD(tm->tm_year);
+- }
+-
+- todc_write_val(todc_info->seconds, tm->tm_sec);
+- todc_write_val(todc_info->minutes, tm->tm_min);
+- todc_write_val(todc_info->hours, tm->tm_hour);
+- todc_write_val(todc_info->month, tm->tm_mon);
+- todc_write_val(todc_info->day_of_month, tm->tm_mday);
+- todc_write_val(todc_info->year, tm->tm_year);
+-
+- todc_write_val(todc_info->control_a, save_control);
+-
+- if (todc_info->rtc_type == TODC_TYPE_MC146818)
+- todc_write_val(todc_info->RTC_FREQ_SELECT, save_freq_select);
+-
+- spin_unlock(&rtc_lock);
+- return 0;
+-}
+Index: working-2.6/include/asm-powerpc/todc.h
+===================================================================
+--- working-2.6.orig/include/asm-powerpc/todc.h 2006-08-25 14:27:15.000000000 +1000
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,487 +0,0 @@
+-/*
+- * Definitions for the M48Txx and mc146818 series of Time of day/Real Time
+- * Clock chips.
+- *
+- * Author: Mark A. Greer <mgreer@mvista.com>
+- *
+- * 2001 (c) MontaVista, Software, Inc. This file is licensed under
+- * the terms of the GNU General Public License version 2. This program
+- * is licensed "as is" without any warranty of any kind, whether express
+- * or implied.
+- */
+-
+-/*
+- * Support for the M48T37/M48T59/.../mc146818 Real Time Clock chips.
+- * Purpose is to make one generic file that handles all of these chips instead
+- * of every platform implementing the same code over & over again.
+- */
+-
+-#ifndef __PPC_KERNEL_TODC_H
+-#define __PPC_KERNEL_TODC_H
+-
+-typedef struct {
+- uint rtc_type; /* your particular chip */
+-
+- /*
+- * Following are the addresses of the AS0, AS1, and DATA registers
+- * of these chips. Note that these are board-specific.
+- */
+- unsigned int nvram_as0;
+- unsigned int nvram_as1;
+- unsigned int nvram_data;
+-
+- /*
+- * Define bits to stop external set of regs from changing so
+- * the chip can be read/written reliably.
+- */
+- unsigned char enable_read;
+- unsigned char enable_write;
+-
+- /*
+- * Following is the number of AS0 address bits. This is normally
+- * 8 but some bad hardware routes address lines incorrectly.
+- */
+- int as0_bits;
+-
+- int nvram_size; /* Size of NVRAM on chip */
+- int sw_flags; /* Software control flags */
+-
+- /* Following are the register offsets for the particular chip */
+- int year;
+- int month;
+- int day_of_month;
+- int day_of_week;
+- int hours;
+- int minutes;
+- int seconds;
+- int control_b;
+- int control_a;
+- int watchdog;
+- int interrupts;
+- int alarm_date;
+- int alarm_hour;
+- int alarm_minutes;
+- int alarm_seconds;
+- int century;
+- int flags;
+-
+- /*
+- * Some RTC chips have their NVRAM buried behind a addr/data pair of
+- * regs on the first level/clock registers. The following fields
+- * are the addresses for those addr/data regs.
+- */
+- int nvram_addr_reg;
+- int nvram_data_reg;
+-} todc_info_t;
+-
+-/*
+- * Define the types of TODC/RTC variants that are supported in
+- * arch/ppc/kernel/todc_time.c
+- * Make a new one of these for any chip somehow differs from what's already
+- * defined. That way, if you ever need to put in code to touch those
+- * bits/registers in todc_time.c, you can put it inside an
+- * 'if (todc_info->rtc_type == TODC_TYPE_XXX)' so you won't break
+- * anyone else.
+- */
+-#define TODC_TYPE_MK48T35 1
+-#define TODC_TYPE_MK48T37 2
+-#define TODC_TYPE_MK48T59 3
+-#define TODC_TYPE_DS1693 4 /* Dallas DS1693 RTC */
+-#define TODC_TYPE_DS1743 5 /* Dallas DS1743 RTC */
+-#define TODC_TYPE_DS1746 6 /* Dallas DS1746 RTC */
+-#define TODC_TYPE_DS1747 7 /* Dallas DS1747 RTC */
+-#define TODC_TYPE_DS1501 8 /* Dallas DS1501 RTC */
+-#define TODC_TYPE_DS1643 9 /* Dallas DS1643 RTC */
+-#define TODC_TYPE_PC97307 10 /* PC97307 internal RTC */
+-#define TODC_TYPE_DS1557 11 /* Dallas DS1557 RTC */
+-#define TODC_TYPE_DS17285 12 /* Dallas DS17285 RTC */
+-#define TODC_TYPE_DS1553 13 /* Dallas DS1553 RTC */
+-#define TODC_TYPE_MC146818 100 /* Leave room for m48txx's */
+-
+-/*
+- * Bit to clear/set to enable reads/writes to the chip
+- */
+-#define TODC_MK48TXX_CNTL_A_R 0x40
+-#define TODC_MK48TXX_CNTL_A_W 0x80
+-#define TODC_MK48TXX_DAY_CB 0x80
+-
+-#define TODC_DS1501_CNTL_B_TE 0x80
+-
+-/*
+- * Define flag bits used by todc routines.
+- */
+-#define TODC_FLAG_2_LEVEL_NVRAM 0x00000001
+-
+-/*
+- * Define the values for the various RTC's that should to into the todc_info
+- * table.
+- * Note: The XXX_NVRAM_SIZE, XXX_NVRAM_ADDR_REG, and XXX_NVRAM_DATA_REG only
+- * matter if XXX_SW_FLAGS has TODC_FLAG_2_LEVEL_NVRAM set.
+- */
+-#define TODC_TYPE_MK48T35_NVRAM_SIZE 0x7ff8
+-#define TODC_TYPE_MK48T35_SW_FLAGS 0
+-#define TODC_TYPE_MK48T35_YEAR 0x7fff
+-#define TODC_TYPE_MK48T35_MONTH 0x7ffe
+-#define TODC_TYPE_MK48T35_DOM 0x7ffd /* Day of Month */
+-#define TODC_TYPE_MK48T35_DOW 0x7ffc /* Day of Week */
+-#define TODC_TYPE_MK48T35_HOURS 0x7ffb
+-#define TODC_TYPE_MK48T35_MINUTES 0x7ffa
+-#define TODC_TYPE_MK48T35_SECONDS 0x7ff9
+-#define TODC_TYPE_MK48T35_CNTL_B 0x7ff9
+-#define TODC_TYPE_MK48T35_CNTL_A 0x7ff8
+-#define TODC_TYPE_MK48T35_WATCHDOG 0x0000
+-#define TODC_TYPE_MK48T35_INTERRUPTS 0x0000
+-#define TODC_TYPE_MK48T35_ALARM_DATE 0x0000
+-#define TODC_TYPE_MK48T35_ALARM_HOUR 0x0000
+-#define TODC_TYPE_MK48T35_ALARM_MINUTES 0x0000
+-#define TODC_TYPE_MK48T35_ALARM_SECONDS 0x0000
+-#define TODC_TYPE_MK48T35_CENTURY 0x0000
+-#define TODC_TYPE_MK48T35_FLAGS 0x0000
+-#define TODC_TYPE_MK48T35_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_MK48T35_NVRAM_DATA_REG 0
+-
+-#define TODC_TYPE_MK48T37_NVRAM_SIZE 0x7ff0
+-#define TODC_TYPE_MK48T37_SW_FLAGS 0
+-#define TODC_TYPE_MK48T37_YEAR 0x7fff
+-#define TODC_TYPE_MK48T37_MONTH 0x7ffe
+-#define TODC_TYPE_MK48T37_DOM 0x7ffd /* Day of Month */
+-#define TODC_TYPE_MK48T37_DOW 0x7ffc /* Day of Week */
+-#define TODC_TYPE_MK48T37_HOURS 0x7ffb
+-#define TODC_TYPE_MK48T37_MINUTES 0x7ffa
+-#define TODC_TYPE_MK48T37_SECONDS 0x7ff9
+-#define TODC_TYPE_MK48T37_CNTL_B 0x7ff9
+-#define TODC_TYPE_MK48T37_CNTL_A 0x7ff8
+-#define TODC_TYPE_MK48T37_WATCHDOG 0x7ff7
+-#define TODC_TYPE_MK48T37_INTERRUPTS 0x7ff6
+-#define TODC_TYPE_MK48T37_ALARM_DATE 0x7ff5
+-#define TODC_TYPE_MK48T37_ALARM_HOUR 0x7ff4
+-#define TODC_TYPE_MK48T37_ALARM_MINUTES 0x7ff3
+-#define TODC_TYPE_MK48T37_ALARM_SECONDS 0x7ff2
+-#define TODC_TYPE_MK48T37_CENTURY 0x7ff1
+-#define TODC_TYPE_MK48T37_FLAGS 0x7ff0
+-#define TODC_TYPE_MK48T37_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_MK48T37_NVRAM_DATA_REG 0
+-
+-#define TODC_TYPE_MK48T59_NVRAM_SIZE 0x1ff0
+-#define TODC_TYPE_MK48T59_SW_FLAGS 0
+-#define TODC_TYPE_MK48T59_YEAR 0x1fff
+-#define TODC_TYPE_MK48T59_MONTH 0x1ffe
+-#define TODC_TYPE_MK48T59_DOM 0x1ffd /* Day of Month */
+-#define TODC_TYPE_MK48T59_DOW 0x1ffc /* Day of Week */
+-#define TODC_TYPE_MK48T59_HOURS 0x1ffb
+-#define TODC_TYPE_MK48T59_MINUTES 0x1ffa
+-#define TODC_TYPE_MK48T59_SECONDS 0x1ff9
+-#define TODC_TYPE_MK48T59_CNTL_B 0x1ff9
+-#define TODC_TYPE_MK48T59_CNTL_A 0x1ff8
+-#define TODC_TYPE_MK48T59_WATCHDOG 0x1fff
+-#define TODC_TYPE_MK48T59_INTERRUPTS 0x1fff
+-#define TODC_TYPE_MK48T59_ALARM_DATE 0x1fff
+-#define TODC_TYPE_MK48T59_ALARM_HOUR 0x1fff
+-#define TODC_TYPE_MK48T59_ALARM_MINUTES 0x1fff
+-#define TODC_TYPE_MK48T59_ALARM_SECONDS 0x1fff
+-#define TODC_TYPE_MK48T59_CENTURY 0x1fff
+-#define TODC_TYPE_MK48T59_FLAGS 0x1fff
+-#define TODC_TYPE_MK48T59_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_MK48T59_NVRAM_DATA_REG 0
+-
+-#define TODC_TYPE_DS1501_NVRAM_SIZE 0x100
+-#define TODC_TYPE_DS1501_SW_FLAGS TODC_FLAG_2_LEVEL_NVRAM
+-#define TODC_TYPE_DS1501_YEAR (TODC_TYPE_DS1501_NVRAM_SIZE + 0x06)
+-#define TODC_TYPE_DS1501_MONTH (TODC_TYPE_DS1501_NVRAM_SIZE + 0x05)
+-#define TODC_TYPE_DS1501_DOM (TODC_TYPE_DS1501_NVRAM_SIZE + 0x04)
+-#define TODC_TYPE_DS1501_DOW (TODC_TYPE_DS1501_NVRAM_SIZE + 0x03)
+-#define TODC_TYPE_DS1501_HOURS (TODC_TYPE_DS1501_NVRAM_SIZE + 0x02)
+-#define TODC_TYPE_DS1501_MINUTES (TODC_TYPE_DS1501_NVRAM_SIZE + 0x01)
+-#define TODC_TYPE_DS1501_SECONDS (TODC_TYPE_DS1501_NVRAM_SIZE + 0x00)
+-#define TODC_TYPE_DS1501_CNTL_B (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0f)
+-#define TODC_TYPE_DS1501_CNTL_A (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0f)
+-#define TODC_TYPE_DS1501_WATCHDOG (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff)
+-#define TODC_TYPE_DS1501_INTERRUPTS (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff)
+-#define TODC_TYPE_DS1501_ALARM_DATE (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0b)
+-#define TODC_TYPE_DS1501_ALARM_HOUR (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0a)
+-#define TODC_TYPE_DS1501_ALARM_MINUTES (TODC_TYPE_DS1501_NVRAM_SIZE + 0x09)
+-#define TODC_TYPE_DS1501_ALARM_SECONDS (TODC_TYPE_DS1501_NVRAM_SIZE + 0x08)
+-#define TODC_TYPE_DS1501_CENTURY (TODC_TYPE_DS1501_NVRAM_SIZE + 0x07)
+-#define TODC_TYPE_DS1501_FLAGS (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff)
+-#define TODC_TYPE_DS1501_NVRAM_ADDR_REG 0x10
+-#define TODC_TYPE_DS1501_NVRAM_DATA_REG 0x13
+-
+-#define TODC_TYPE_DS1553_NVRAM_SIZE 0x1ff0
+-#define TODC_TYPE_DS1553_SW_FLAGS 0
+-#define TODC_TYPE_DS1553_YEAR 0x1fff
+-#define TODC_TYPE_DS1553_MONTH 0x1ffe
+-#define TODC_TYPE_DS1553_DOM 0x1ffd /* Day of Month */
+-#define TODC_TYPE_DS1553_DOW 0x1ffc /* Day of Week */
+-#define TODC_TYPE_DS1553_HOURS 0x1ffb
+-#define TODC_TYPE_DS1553_MINUTES 0x1ffa
+-#define TODC_TYPE_DS1553_SECONDS 0x1ff9
+-#define TODC_TYPE_DS1553_CNTL_B 0x1ff9
+-#define TODC_TYPE_DS1553_CNTL_A 0x1ff8 /* control_a R/W regs */
+-#define TODC_TYPE_DS1553_WATCHDOG 0x1ff7
+-#define TODC_TYPE_DS1553_INTERRUPTS 0x1ff6
+-#define TODC_TYPE_DS1553_ALARM_DATE 0x1ff5
+-#define TODC_TYPE_DS1553_ALARM_HOUR 0x1ff4
+-#define TODC_TYPE_DS1553_ALARM_MINUTES 0x1ff3
+-#define TODC_TYPE_DS1553_ALARM_SECONDS 0x1ff2
+-#define TODC_TYPE_DS1553_CENTURY 0x1ff8
+-#define TODC_TYPE_DS1553_FLAGS 0x1ff0
+-#define TODC_TYPE_DS1553_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_DS1553_NVRAM_DATA_REG 0
+-
+-#define TODC_TYPE_DS1557_NVRAM_SIZE 0x7fff0
+-#define TODC_TYPE_DS1557_SW_FLAGS 0
+-#define TODC_TYPE_DS1557_YEAR 0x7ffff
+-#define TODC_TYPE_DS1557_MONTH 0x7fffe
+-#define TODC_TYPE_DS1557_DOM 0x7fffd /* Day of Month */
+-#define TODC_TYPE_DS1557_DOW 0x7fffc /* Day of Week */
+-#define TODC_TYPE_DS1557_HOURS 0x7fffb
+-#define TODC_TYPE_DS1557_MINUTES 0x7fffa
+-#define TODC_TYPE_DS1557_SECONDS 0x7fff9
+-#define TODC_TYPE_DS1557_CNTL_B 0x7fff9
+-#define TODC_TYPE_DS1557_CNTL_A 0x7fff8 /* control_a R/W regs */
+-#define TODC_TYPE_DS1557_WATCHDOG 0x7fff7
+-#define TODC_TYPE_DS1557_INTERRUPTS 0x7fff6
+-#define TODC_TYPE_DS1557_ALARM_DATE 0x7fff5
+-#define TODC_TYPE_DS1557_ALARM_HOUR 0x7fff4
+-#define TODC_TYPE_DS1557_ALARM_MINUTES 0x7fff3
+-#define TODC_TYPE_DS1557_ALARM_SECONDS 0x7fff2
+-#define TODC_TYPE_DS1557_CENTURY 0x7fff8
+-#define TODC_TYPE_DS1557_FLAGS 0x7fff0
+-#define TODC_TYPE_DS1557_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_DS1557_NVRAM_DATA_REG 0
+-
+-#define TODC_TYPE_DS1643_NVRAM_SIZE 0x1ff8
+-#define TODC_TYPE_DS1643_SW_FLAGS 0
+-#define TODC_TYPE_DS1643_YEAR 0x1fff
+-#define TODC_TYPE_DS1643_MONTH 0x1ffe
+-#define TODC_TYPE_DS1643_DOM 0x1ffd /* Day of Month */
+-#define TODC_TYPE_DS1643_DOW 0x1ffc /* Day of Week */
+-#define TODC_TYPE_DS1643_HOURS 0x1ffb
+-#define TODC_TYPE_DS1643_MINUTES 0x1ffa
+-#define TODC_TYPE_DS1643_SECONDS 0x1ff9
+-#define TODC_TYPE_DS1643_CNTL_B 0x1ff9
+-#define TODC_TYPE_DS1643_CNTL_A 0x1ff8 /* control_a R/W regs */
+-#define TODC_TYPE_DS1643_WATCHDOG 0x1fff
+-#define TODC_TYPE_DS1643_INTERRUPTS 0x1fff
+-#define TODC_TYPE_DS1643_ALARM_DATE 0x1fff
+-#define TODC_TYPE_DS1643_ALARM_HOUR 0x1fff
+-#define TODC_TYPE_DS1643_ALARM_MINUTES 0x1fff
+-#define TODC_TYPE_DS1643_ALARM_SECONDS 0x1fff
+-#define TODC_TYPE_DS1643_CENTURY 0x1ff8
+-#define TODC_TYPE_DS1643_FLAGS 0x1fff
+-#define TODC_TYPE_DS1643_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_DS1643_NVRAM_DATA_REG 0
+-
+-#define TODC_TYPE_DS1693_NVRAM_SIZE 0 /* Not handled yet */
+-#define TODC_TYPE_DS1693_SW_FLAGS 0
+-#define TODC_TYPE_DS1693_YEAR 0x09
+-#define TODC_TYPE_DS1693_MONTH 0x08
+-#define TODC_TYPE_DS1693_DOM 0x07 /* Day of Month */
+-#define TODC_TYPE_DS1693_DOW 0x06 /* Day of Week */
+-#define TODC_TYPE_DS1693_HOURS 0x04
+-#define TODC_TYPE_DS1693_MINUTES 0x02
+-#define TODC_TYPE_DS1693_SECONDS 0x00
+-#define TODC_TYPE_DS1693_CNTL_B 0x0b
+-#define TODC_TYPE_DS1693_CNTL_A 0x0a
+-#define TODC_TYPE_DS1693_WATCHDOG 0xff
+-#define TODC_TYPE_DS1693_INTERRUPTS 0xff
+-#define TODC_TYPE_DS1693_ALARM_DATE 0x49
+-#define TODC_TYPE_DS1693_ALARM_HOUR 0x05
+-#define TODC_TYPE_DS1693_ALARM_MINUTES 0x03
+-#define TODC_TYPE_DS1693_ALARM_SECONDS 0x01
+-#define TODC_TYPE_DS1693_CENTURY 0x48
+-#define TODC_TYPE_DS1693_FLAGS 0xff
+-#define TODC_TYPE_DS1693_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_DS1693_NVRAM_DATA_REG 0
+-
+-#define TODC_TYPE_DS1743_NVRAM_SIZE 0x1ff8
+-#define TODC_TYPE_DS1743_SW_FLAGS 0
+-#define TODC_TYPE_DS1743_YEAR 0x1fff
+-#define TODC_TYPE_DS1743_MONTH 0x1ffe
+-#define TODC_TYPE_DS1743_DOM 0x1ffd /* Day of Month */
+-#define TODC_TYPE_DS1743_DOW 0x1ffc /* Day of Week */
+-#define TODC_TYPE_DS1743_HOURS 0x1ffb
+-#define TODC_TYPE_DS1743_MINUTES 0x1ffa
+-#define TODC_TYPE_DS1743_SECONDS 0x1ff9
+-#define TODC_TYPE_DS1743_CNTL_B 0x1ff9
+-#define TODC_TYPE_DS1743_CNTL_A 0x1ff8 /* control_a R/W regs */
+-#define TODC_TYPE_DS1743_WATCHDOG 0x1fff
+-#define TODC_TYPE_DS1743_INTERRUPTS 0x1fff
+-#define TODC_TYPE_DS1743_ALARM_DATE 0x1fff
+-#define TODC_TYPE_DS1743_ALARM_HOUR 0x1fff
+-#define TODC_TYPE_DS1743_ALARM_MINUTES 0x1fff
+-#define TODC_TYPE_DS1743_ALARM_SECONDS 0x1fff
+-#define TODC_TYPE_DS1743_CENTURY 0x1ff8
+-#define TODC_TYPE_DS1743_FLAGS 0x1fff
+-#define TODC_TYPE_DS1743_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_DS1743_NVRAM_DATA_REG 0
+-
+-#define TODC_TYPE_DS1746_NVRAM_SIZE 0x1fff8
+-#define TODC_TYPE_DS1746_SW_FLAGS 0
+-#define TODC_TYPE_DS1746_YEAR 0x1ffff
+-#define TODC_TYPE_DS1746_MONTH 0x1fffe
+-#define TODC_TYPE_DS1746_DOM 0x1fffd /* Day of Month */
+-#define TODC_TYPE_DS1746_DOW 0x1fffc /* Day of Week */
+-#define TODC_TYPE_DS1746_HOURS 0x1fffb
+-#define TODC_TYPE_DS1746_MINUTES 0x1fffa
+-#define TODC_TYPE_DS1746_SECONDS 0x1fff9
+-#define TODC_TYPE_DS1746_CNTL_B 0x1fff9
+-#define TODC_TYPE_DS1746_CNTL_A 0x1fff8 /* control_a R/W regs */
+-#define TODC_TYPE_DS1746_WATCHDOG 0x00000
+-#define TODC_TYPE_DS1746_INTERRUPTS 0x00000
+-#define TODC_TYPE_DS1746_ALARM_DATE 0x00000
+-#define TODC_TYPE_DS1746_ALARM_HOUR 0x00000
+-#define TODC_TYPE_DS1746_ALARM_MINUTES 0x00000
+-#define TODC_TYPE_DS1746_ALARM_SECONDS 0x00000
+-#define TODC_TYPE_DS1746_CENTURY 0x00000
+-#define TODC_TYPE_DS1746_FLAGS 0x00000
+-#define TODC_TYPE_DS1746_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_DS1746_NVRAM_DATA_REG 0
+-
+-#define TODC_TYPE_DS1747_NVRAM_SIZE 0x7fff8
+-#define TODC_TYPE_DS1747_SW_FLAGS 0
+-#define TODC_TYPE_DS1747_YEAR 0x7ffff
+-#define TODC_TYPE_DS1747_MONTH 0x7fffe
+-#define TODC_TYPE_DS1747_DOM 0x7fffd /* Day of Month */
+-#define TODC_TYPE_DS1747_DOW 0x7fffc /* Day of Week */
+-#define TODC_TYPE_DS1747_HOURS 0x7fffb
+-#define TODC_TYPE_DS1747_MINUTES 0x7fffa
+-#define TODC_TYPE_DS1747_SECONDS 0x7fff9
+-#define TODC_TYPE_DS1747_CNTL_B 0x7fff9
+-#define TODC_TYPE_DS1747_CNTL_A 0x7fff8 /* control_a R/W regs */
+-#define TODC_TYPE_DS1747_WATCHDOG 0x00000
+-#define TODC_TYPE_DS1747_INTERRUPTS 0x00000
+-#define TODC_TYPE_DS1747_ALARM_DATE 0x00000
+-#define TODC_TYPE_DS1747_ALARM_HOUR 0x00000
+-#define TODC_TYPE_DS1747_ALARM_MINUTES 0x00000
+-#define TODC_TYPE_DS1747_ALARM_SECONDS 0x00000
+-#define TODC_TYPE_DS1747_CENTURY 0x00000
+-#define TODC_TYPE_DS1747_FLAGS 0x00000
+-#define TODC_TYPE_DS1747_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_DS1747_NVRAM_DATA_REG 0
+-
+-#define TODC_TYPE_DS17285_NVRAM_SIZE (0x1000-0x80) /* 4Kx8 NVRAM (minus RTC regs) */
+-#define TODC_TYPE_DS17285_SW_FLAGS TODC_FLAG_2_LEVEL_NVRAM
+-#define TODC_TYPE_DS17285_SECONDS (TODC_TYPE_DS17285_NVRAM_SIZE + 0x00)
+-#define TODC_TYPE_DS17285_ALARM_SECONDS (TODC_TYPE_DS17285_NVRAM_SIZE + 0x01)
+-#define TODC_TYPE_DS17285_MINUTES (TODC_TYPE_DS17285_NVRAM_SIZE + 0x02)
+-#define TODC_TYPE_DS17285_ALARM_MINUTES (TODC_TYPE_DS17285_NVRAM_SIZE + 0x03)
+-#define TODC_TYPE_DS17285_HOURS (TODC_TYPE_DS17285_NVRAM_SIZE + 0x04)
+-#define TODC_TYPE_DS17285_ALARM_HOUR (TODC_TYPE_DS17285_NVRAM_SIZE + 0x05)
+-#define TODC_TYPE_DS17285_DOW (TODC_TYPE_DS17285_NVRAM_SIZE + 0x06)
+-#define TODC_TYPE_DS17285_DOM (TODC_TYPE_DS17285_NVRAM_SIZE + 0x07)
+-#define TODC_TYPE_DS17285_MONTH (TODC_TYPE_DS17285_NVRAM_SIZE + 0x08)
+-#define TODC_TYPE_DS17285_YEAR (TODC_TYPE_DS17285_NVRAM_SIZE + 0x09)
+-#define TODC_TYPE_DS17285_CNTL_A (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0A)
+-#define TODC_TYPE_DS17285_CNTL_B (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0B)
+-#define TODC_TYPE_DS17285_CNTL_C (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0C)
+-#define TODC_TYPE_DS17285_CNTL_D (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0D)
+-#define TODC_TYPE_DS17285_WATCHDOG 0
+-#define TODC_TYPE_DS17285_INTERRUPTS 0
+-#define TODC_TYPE_DS17285_ALARM_DATE 0
+-#define TODC_TYPE_DS17285_CENTURY 0
+-#define TODC_TYPE_DS17285_FLAGS 0
+-#define TODC_TYPE_DS17285_NVRAM_ADDR_REG 0x50
+-#define TODC_TYPE_DS17285_NVRAM_DATA_REG 0x53
+-
+-#define TODC_TYPE_MC146818_NVRAM_SIZE 0 /* XXXX */
+-#define TODC_TYPE_MC146818_SW_FLAGS 0
+-#define TODC_TYPE_MC146818_YEAR 0x09
+-#define TODC_TYPE_MC146818_MONTH 0x08
+-#define TODC_TYPE_MC146818_DOM 0x07 /* Day of Month */
+-#define TODC_TYPE_MC146818_DOW 0x06 /* Day of Week */
+-#define TODC_TYPE_MC146818_HOURS 0x04
+-#define TODC_TYPE_MC146818_MINUTES 0x02
+-#define TODC_TYPE_MC146818_SECONDS 0x00
+-#define TODC_TYPE_MC146818_CNTL_B 0x0a
+-#define TODC_TYPE_MC146818_CNTL_A 0x0b /* control_a R/W regs */
+-#define TODC_TYPE_MC146818_WATCHDOG 0
+-#define TODC_TYPE_MC146818_INTERRUPTS 0x0c
+-#define TODC_TYPE_MC146818_ALARM_DATE 0xff
+-#define TODC_TYPE_MC146818_ALARM_HOUR 0x05
+-#define TODC_TYPE_MC146818_ALARM_MINUTES 0x03
+-#define TODC_TYPE_MC146818_ALARM_SECONDS 0x01
+-#define TODC_TYPE_MC146818_CENTURY 0xff
+-#define TODC_TYPE_MC146818_FLAGS 0xff
+-#define TODC_TYPE_MC146818_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_MC146818_NVRAM_DATA_REG 0
+-
+-#define TODC_TYPE_PC97307_NVRAM_SIZE 0 /* No NVRAM? */
+-#define TODC_TYPE_PC97307_SW_FLAGS 0
+-#define TODC_TYPE_PC97307_YEAR 0x09
+-#define TODC_TYPE_PC97307_MONTH 0x08
+-#define TODC_TYPE_PC97307_DOM 0x07 /* Day of Month */
+-#define TODC_TYPE_PC97307_DOW 0x06 /* Day of Week */
+-#define TODC_TYPE_PC97307_HOURS 0x04
+-#define TODC_TYPE_PC97307_MINUTES 0x02
+-#define TODC_TYPE_PC97307_SECONDS 0x00
+-#define TODC_TYPE_PC97307_CNTL_B 0x0a
+-#define TODC_TYPE_PC97307_CNTL_A 0x0b /* control_a R/W regs */
+-#define TODC_TYPE_PC97307_WATCHDOG 0x0c
+-#define TODC_TYPE_PC97307_INTERRUPTS 0x0d
+-#define TODC_TYPE_PC97307_ALARM_DATE 0xff
+-#define TODC_TYPE_PC97307_ALARM_HOUR 0x05
+-#define TODC_TYPE_PC97307_ALARM_MINUTES 0x03
+-#define TODC_TYPE_PC97307_ALARM_SECONDS 0x01
+-#define TODC_TYPE_PC97307_CENTURY 0xff
+-#define TODC_TYPE_PC97307_FLAGS 0xff
+-#define TODC_TYPE_PC97307_NVRAM_ADDR_REG 0
+-#define TODC_TYPE_PC97307_NVRAM_DATA_REG 0
+-
+-/*
+- * Define macros to allocate and init the todc_info_t table that will
+- * be used by the todc_time.c routines.
+- */
+-#define TODC_ALLOC() \
+- static todc_info_t todc_info_alloc; \
+- todc_info_t *todc_info = &todc_info_alloc;
+-
+-#define TODC_INIT(clock_type, as0, as1, data, bits) { \
+- todc_info->rtc_type = clock_type; \
+- \
+- todc_info->nvram_as0 = (unsigned int)(as0); \
+- todc_info->nvram_as1 = (unsigned int)(as1); \
+- todc_info->nvram_data = (unsigned int)(data); \
+- \
+- todc_info->as0_bits = (bits); \
+- \
+- todc_info->nvram_size = clock_type ##_NVRAM_SIZE; \
+- todc_info->sw_flags = clock_type ##_SW_FLAGS; \
+- \
+- todc_info->year = clock_type ##_YEAR; \
+- todc_info->month = clock_type ##_MONTH; \
+- todc_info->day_of_month = clock_type ##_DOM; \
+- todc_info->day_of_week = clock_type ##_DOW; \
+- todc_info->hours = clock_type ##_HOURS; \
+- todc_info->minutes = clock_type ##_MINUTES; \
+- todc_info->seconds = clock_type ##_SECONDS; \
+- todc_info->control_b = clock_type ##_CNTL_B; \
+- todc_info->control_a = clock_type ##_CNTL_A; \
+- todc_info->watchdog = clock_type ##_WATCHDOG; \
+- todc_info->interrupts = clock_type ##_INTERRUPTS; \
+- todc_info->alarm_date = clock_type ##_ALARM_DATE; \
+- todc_info->alarm_hour = clock_type ##_ALARM_HOUR; \
+- todc_info->alarm_minutes = clock_type ##_ALARM_MINUTES; \
+- todc_info->alarm_seconds = clock_type ##_ALARM_SECONDS; \
+- todc_info->century = clock_type ##_CENTURY; \
+- todc_info->flags = clock_type ##_FLAGS; \
+- \
+- todc_info->nvram_addr_reg = clock_type ##_NVRAM_ADDR_REG; \
+- todc_info->nvram_data_reg = clock_type ##_NVRAM_DATA_REG; \
+-}
+-
+-extern todc_info_t *todc_info;
+-
+-unsigned char todc_direct_read_val(int addr);
+-void todc_direct_write_val(int addr, unsigned char val);
+-unsigned char todc_m48txx_read_val(int addr);
+-void todc_m48txx_write_val(int addr, unsigned char val);
+-unsigned char todc_mc146818_read_val(int addr);
+-void todc_mc146818_write_val(int addr, unsigned char val);
+-
+-long todc_time_init(void);
+-void todc_get_rtc_time(struct rtc_time *);
+-int todc_set_rtc_time(struct rtc_time *);
+-void todc_calibrate_decr(void);
+-
+-#endif /* __PPC_KERNEL_TODC_H */
+Index: working-2.6/arch/powerpc/sysdev/Makefile
+===================================================================
+--- working-2.6.orig/arch/powerpc/sysdev/Makefile 2006-10-03 14:57:15.000000000 +1000
++++ working-2.6/arch/powerpc/sysdev/Makefile 2006-10-03 16:31:48.000000000 +1000
+@@ -10,7 +10,6 @@ obj-$(CONFIG_40x) += dcr.o
+ obj-$(CONFIG_U3_DART) += dart_iommu.o
+ obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o
+ obj-$(CONFIG_FSL_SOC) += fsl_soc.o
+-obj-$(CONFIG_PPC_TODC) += todc.o
+ obj-$(CONFIG_TSI108_BRIDGE) += tsi108_pci.o tsi108_dev.o
+
+ ifeq ($(CONFIG_PPC_MERGE),y)
+Index: working-2.6/arch/powerpc/Kconfig
+===================================================================
+--- working-2.6.orig/arch/powerpc/Kconfig 2006-10-03 16:26:20.000000000 +1000
++++ working-2.6/arch/powerpc/Kconfig 2006-10-03 16:33:10.000000000 +1000
+@@ -584,12 +584,6 @@ config TAU_AVERAGE
+
+ If in doubt, say N here.
+
+-config PPC_TODC
+- depends on EMBEDDED6xx
+- bool "Generic Time-of-day Clock (TODC) support"
+- ---help---
+- This adds support for many TODC/RTC chips.
+-
+ endmenu
+
+ source arch/powerpc/platforms/embedded6xx/Kconfig
+
+
diff --git a/packages/linux/linux-dht-walnut_2.6.20.bb b/packages/linux/linux-dht-walnut_2.6.20.bb
index 89a776e075..61836ac204 100644
--- a/packages/linux/linux-dht-walnut_2.6.20.bb
+++ b/packages/linux/linux-dht-walnut_2.6.20.bb
@@ -1,65 +1,43 @@
# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
# Released under the MIT license (see packages/COPYING)
-SECTION = "kernel"
+require linux.inc
+
DESCRIPTION = "Linux kernel for DHT-Walnut (ppc) machine"
-LICENSE = "GPL"
-PR = "r3"
+
+PR = "r4"
DEPENDS = "u-boot"
COMPATIBLE_MACHINE = "dht-walnut"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- file://dht-walnut_defconfig"
-
+ file://defconfig"
S = "${WORKDIR}/linux-${PV}"
-inherit kernel
-
-
FILES_kernel-image = "/boot/zImage.elf"
export OS = "Linux"
ARCH = "ppc"
-KERNEL_OUTPUT = "arch/ppc/boot/images/zImage.elf"
-
-
-
-
-do_configure_prepend() {
- install -m 0644 ${WORKDIR}/dht-walnut_defconfig ${S}/.config
-}
-
do_stage_append () {
#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split
install -d ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/powerpc ${STAGING_KERNEL_DIR}/arch/
- cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
- cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-ppc ${STAGING_KERNEL_DIR}/include/
}
-
-
-
-
do_install_append () {
install -d ${DEPLOY_DIR_IMAGE}
- install -m 0755 arch/ppc/boot/images/zImage.elf \
+ if [ -e arch/ppc/boot/images/zImage.elf ] ; then
+ cp -a arch/ppc/boot/images/zImage.elf arch/ppc/boot/images/zImage
+ install -m 0755 arch/ppc/boot/images/zImage.elf \
${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.elf
+ fi
install -m 0755 vmlinux ${DEPLOY_DIR_IMAGE}/
- powerpc${TARGET_VENDOR}-${TARGET_OS}-objcopy -O binary -R .note -R .comment -S \
- ${DEPLOY_DIR_IMAGE}/vmlinux ${DEPLOY_DIR_IMAGE}/linux.bin
- gzip -f -9 ${DEPLOY_DIR_IMAGE}/linux.bin
- mkimage -A ppc -O linux -T kernel -C gzip -a 0 -e 0 -n "ppc405"+${PV} -d ${DEPLOY_DIR_IMAGE}/linux.bin.gz \
- ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${MACHINE}-${DATETIME}.bin
- rm ${DEPLOY_DIR_IMAGE}/vmlinux
- rm ${DEPLOY_DIR_IMAGE}/linux.bin.gz
-
-
}
diff --git a/packages/linux/linux-dht-walnut_2.6.23.bb b/packages/linux/linux-dht-walnut_2.6.23.bb
new file mode 100644
index 0000000000..181488190e
--- /dev/null
+++ b/packages/linux/linux-dht-walnut_2.6.23.bb
@@ -0,0 +1,56 @@
+# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+require linux.inc
+
+DESCRIPTION = "Linux kernel for DHT-Walnut (ppc) machine"
+
+DEFAULT_PREFERENCE = "-1"
+
+PR = "r0"
+DEPENDS = "u-boot"
+
+COMPATIBLE_MACHINE = "dht-walnut"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://defconfig"
+
+S = "${WORKDIR}/linux-${PV}"
+
+FILES_kernel-image = "/boot/zImage.elf"
+
+export OS = "Linux"
+ARCH = "ppc"
+
+do_stage_append () {
+#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split
+
+ install -d ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+
+ cp -pPR include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+}
+
+do_install_append () {
+ install -d ${DEPLOY_DIR_IMAGE}
+ if [ -e arch/ppc/boot/images/zImage.elf ] ; then
+ cp -a arch/ppc/boot/images/zImage.elf arch/ppc/boot/images/zImage
+ install -m 0755 arch/ppc/boot/images/zImage.elf \
+ ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.elf
+ fi
+ install -m 0755 vmlinux ${DEPLOY_DIR_IMAGE}/
+}
+
+
+pkg_postinst_kernel () {
+ true
+}
+
+pkg_postrm_kernel () {
+ true
+}
+
+
+
+
diff --git a/packages/linux/linux-efika_2.6.20.20.bb b/packages/linux/linux-efika_2.6.20.20.bb
index 630e5a6274..8ef0af6c78 100644
--- a/packages/linux/linux-efika_2.6.20.20.bb
+++ b/packages/linux/linux-efika_2.6.20.20.bb
@@ -63,12 +63,12 @@ do_stage_append () {
#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split
install -d ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/powerpc ${STAGING_KERNEL_DIR}/arch/
install -d ${STAGING_KERNEL_DIR}/include/asm
- cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
- cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-ppc ${STAGING_KERNEL_DIR}/include/
}
do_deploy() {
diff --git a/packages/linux/linux-efika_2.6.20.bb b/packages/linux/linux-efika_2.6.20.bb
index ddf3ee3257..87c769a1ae 100644
--- a/packages/linux/linux-efika_2.6.20.bb
+++ b/packages/linux/linux-efika_2.6.20.bb
@@ -60,12 +60,12 @@ do_stage_append () {
#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split
install -d ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/powerpc ${STAGING_KERNEL_DIR}/arch/
install -d ${STAGING_KERNEL_DIR}/include/asm
- cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
- cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-ppc ${STAGING_KERNEL_DIR}/include/
}
diff --git a/packages/linux/linux-efika_2.6.21+git.bb b/packages/linux/linux-efika_2.6.21+git.bb
index 80a4e69a4a..5f8427ef1e 100644
--- a/packages/linux/linux-efika_2.6.21+git.bb
+++ b/packages/linux/linux-efika_2.6.21+git.bb
@@ -47,12 +47,12 @@ do_stage_append () {
#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split
install -d ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/powerpc ${STAGING_KERNEL_DIR}/arch/
install -d ${STAGING_KERNEL_DIR}/include/asm
- cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
- cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-ppc ${STAGING_KERNEL_DIR}/include/
}
do_deploy() {
diff --git a/packages/qte-fonts-common/qte-fonts-common/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qte-fonts-common/qte-fonts-common/.mtn2git_empty
+++ b/packages/linux/linux-ezx-2.6.24/.mtn2git_empty
diff --git a/packages/qte/qtopia-core/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/a1200/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/qte/qtopia-core/.mtn2git_empty
+++ b/packages/linux/linux-ezx-2.6.24/a1200/.mtn2git_empty
diff --git a/packages/linux/linux-ezx-2.6.24/a1200/defconfig b/packages/linux/linux-ezx-2.6.24/a1200/defconfig
new file mode 100755
index 0000000000..4649d7ba96
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/a1200/defconfig
@@ -0,0 +1,1208 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.23.1
+# Wed Oct 24 18:03:17 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+# CONFIG_PXA_EZX_A780 is not set
+# CONFIG_PXA_EZX_E2 is not set
+CONFIG_PXA_EZX_A1200=y
+# CONFIG_PXA_EZX_E6 is not set
+# CONFIG_EZX_BP is not set
+CONFIG_EZX_PCAP=y
+CONFIG_EZX_EOC=y
+# CONFIG_EZX_EMU is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+# CONFIG_SUSPEND is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+CONFIG_MTD_EZX=y
+# CONFIG_MTD_EZX_A780 is not set
+# CONFIG_MTD_EZX_A780_ALTERNATE is not set
+CONFIG_MTD_EZX_A1200=y
+# CONFIG_MTD_EZX_E2 is not set
+# CONFIG_MTD_EZX_E6 is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=y
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_HWMON is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_EZX is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=y
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_SSP=y
+CONFIG_SND_PXA2XX_SOC_EZX=y
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_PCAP2=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/quilt/quilt-0.39/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/a780/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/quilt/quilt-0.39/.mtn2git_empty
+++ b/packages/linux/linux-ezx-2.6.24/a780/.mtn2git_empty
diff --git a/packages/linux/linux-ezx-2.6.24/a780/defconfig b/packages/linux/linux-ezx-2.6.24/a780/defconfig
new file mode 100755
index 0000000000..b10c2e908d
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/a780/defconfig
@@ -0,0 +1,1502 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24
+# Sun Jan 27 15:19:17 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+CONFIG_PXA_EZX_A780=y
+# CONFIG_PXA_EZX_E2 is not set
+# CONFIG_PXA_EZX_A1200 is not set
+# CONFIG_PXA_EZX_E6 is not set
+CONFIG_EZX_BP=y
+CONFIG_EZX_PCAP=y
+# CONFIG_EZX_EOC is not set
+CONFIG_EZX_EMU=y
+CONFIG_EZX_EMU_USB=y
+# CONFIG_EZX_EMU_UART is not set
+# CONFIG_EZX_EMU_NOTHING is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+# CONFIG_NO_HZ is not set
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty1 root=/dev/mmcblk0p2 rootfstype=ext2 rootdelay=1 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+# CONFIG_SUSPEND is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_IPV6_MIP6=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_FIB_RULES=y
+
+#
+# Wireless
+#
+CONFIG_CFG80211=m
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+CONFIG_MAC80211_RCSIMPLE=y
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PXA2XX is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+CONFIG_MTD_EZX=y
+CONFIG_MTD_EZX_A780=y
+# CONFIG_MTD_EZX_A780_ALTERNATE is not set
+# CONFIG_MTD_EZX_A1200 is not set
+# CONFIG_MTD_EZX_E2 is not set
+# CONFIG_MTD_EZX_E6 is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=y
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_TS0710_MUX=y
+CONFIG_TS0710_MUX_USB=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+# CONFIG_V4L_USB_DRIVERS is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_USB_DSBR is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_EZX=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=y
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_SSP=y
+CONFIG_SND_PXA2XX_SOC_EZX=y
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_PCAP2=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SPI is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_A780=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=m
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+# CONFIG_ROOT_NFS is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+# CONFIG_INSTRUMENTATION is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_ABLKCIPHER=m
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+# CONFIG_CRYPTO_WP512 is not set
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_XTS=m
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/timezones/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/e680/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/timezones/.mtn2git_empty
+++ b/packages/linux/linux-ezx-2.6.24/e680/.mtn2git_empty
diff --git a/packages/linux/linux-ezx-2.6.24/e680/defconfig b/packages/linux/linux-ezx-2.6.24/e680/defconfig
new file mode 100755
index 0000000000..9a30ce673f
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/e680/defconfig
@@ -0,0 +1,1584 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21.4
+# Sun Sep 9 16:51:47 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=1
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_LSF=y
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA_EZX=y
+CONFIG_PXA_EZX_E680=y
+# CONFIG_PXA_EZX_A780 is not set
+# CONFIG_PXA_EZX_E2 is not set
+# CONFIG_PXA_EZX_A1200 is not set
+# CONFIG_PXA_EZX_E6 is not set
+CONFIG_EZX_BP=y
+CONFIG_EZX_PCAP=y
+CONFIG_EZX_EMU=y
+CONFIG_EZX_EMU_USB=y
+# CONFIG_EZX_EMU_UART is not set
+# CONFIG_EZX_EMU_NOTHING is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty1 root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_IPV6_ROUTER_PREF=y
+# CONFIG_IPV6_ROUTE_INFO is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK_SUPPORT=y
+# CONFIG_IP_NF_CONNTRACK_SUPPORT is not set
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+CONFIG_MTD_EZX=y
+CONFIG_MTD_EZX_A780=y
+# CONFIG_MTD_EZX_A780_ALTERNATE is not set
+# CONFIG_MTD_EZX_E2 is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_ZD1211RW is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+CONFIG_SHAPER=m
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=y
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+CONFIG_TS0710_MUX=y
+CONFIG_TS0710_MUX_USB=y
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+# CONFIG_LEDS_E680 is not set
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+
+#
+# Video Capture Adapters
+#
+
+#
+# Video Capture Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_USB_DSBR is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_EZX=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_DUMMY=m
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=y
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_SSP=y
+CONFIG_SND_PXA2XX_SOC_EZX=y
+CONFIG_SND_SOC_PCAP2=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=m
+CONFIG_RTC_INTF_PROC=m
+CONFIG_RTC_INTF_DEV=m
+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=m
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=n
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+CONFIG_GENERIC_ACL=y
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/uboot/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/patches/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot/.mtn2git_empty
+++ b/packages/linux/linux-ezx-2.6.24/patches/.mtn2git_empty
diff --git a/packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX b/packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX
new file mode 100644
index 0000000000..e7e9115e3c
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/Makefile.OpenEZX
@@ -0,0 +1,77 @@
+# Makefile used to build binary images of OpenEZX kernels
+#
+# If you are currently in the linux kernel toplevel dir,
+# you can call this Makefile with:
+# $ make -f path_to/Makefile.OpenEZX
+#
+# Note that you can set the CROSS_COMPILE and QUILT_PATCHES variable
+# in your environment.
+#
+
+PHONES = a780 e680 a1200 e6 e2
+
+CROSS_COMPILE ?= /home/wyrm/ezx/dev/cross/bin/arm-angstrom-linux-gnueabi-
+QUILT_PATCHES ?= patches
+
+LV ?= ezxdev# replace LOCALVERSION string
+J ?= 2 # simultaneous jobs
+SIG ?= 0 # BOOL sign md5sums file
+
+DATE = $(shell date +%Y%m%d)
+DEPLOY_SERVER ?= people.openezx.org
+DEPLOY_DIR ?= public_html/images/$(DATE)/
+
+all: $(foreach p, $(PHONES), zImage-$(p) modules-$(p).tar.gz)
+
+zImages: $(foreach p, $(PHONES), zImage-$(p))
+
+modules: $(foreach p, $(PHONES), modules-$(p).tar.gz)
+
+config: $(foreach p, $(PHONES), config-$(p))
+
+config-%: $(QUILT_PATCHES)/defconfig-%
+ cp $< .config
+ make ARCH=arm oldconfig
+ cp .config $<
+
+deploy: release
+ ssh $(DEPLOY_SERVER) \
+ mkdir -p $(DEPLOY_DIR)
+ scp ezxrelease-$(DATE).tar $(DEPLOY_SERVER):$(DEPLOY_DIR)
+ ssh $(DEPLOY_SERVER) \
+ cd $(DEPLOY_DIR)\; \
+ tar -xf ezxrelease-$(DATE).tar\; \
+ rm -f ezxrelease-$(DATE).tar
+
+release: $(foreach p, $(PHONES), tag-$(p))
+ cp md5sums.tmp md5sums
+ test "$(SIG)" = "1" && \
+ cat md5sums.tmp | gpg --clearsign > md5sums \
+ ; echo
+ tar -rf ezxrelease.tar md5sums
+ rm -f md5sums.tmp md5sums
+ mv ezxrelease.tar ezxrelease-$(DATE).tar
+
+tag-%: zImage-% modules-%.tar.gz
+ p=$(patsubst tag-%,%,$@) && \
+ tag=$(shell cat include/config/kernel.release)-$(DATE) && \
+ mv zImage-$$p zImage-$$tag-$$p && \
+ mv modules-$$p.tar.gz modules-$$tag-$$p.tar.gz && \
+ tar -rf ezxrelease.tar zImage-$$tag-$$p modules-$$tag-$$p.tar.gz && \
+ md5sum zImage-$$tag-$$p modules-$$tag-$$p.tar.gz >> md5sums.tmp && \
+ rm -f zImage-$$tag-$$p modules-$$tag-$$p.tar.gz
+
+zImage-%: $(QUILT_PATCHES)/defconfig-%
+ cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config
+ make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) zImage
+ mv arch/arm/boot/zImage $@
+
+modules-%.tar.gz: $(QUILT_PATCHES)/defconfig-%
+ cat $< | sed 's/LOCALVERSION=".*"$$/LOCALVERSION="-$(LV)"/' > .config
+ -find . -name "*.ko" -print0 | xargs -r0 rm
+ mkdir -p Makefile.OpenEZX-tmp/$@
+ make -j$(J) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) modules
+ make -j1 ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) \
+ INSTALL_MOD_PATH=Makefile.OpenEZX-tmp/$@ modules_install
+ tar -C Makefile.OpenEZX-tmp/$@ -czf $@ .
+ rm -rf Makefile.OpenEZX-tmp/
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch
new file mode 100644
index 0000000000..d69c6ec75f
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-eoc.patch
@@ -0,0 +1,20 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:08.000000000 -0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:24.000000000 -0200
+@@ -186,8 +186,15 @@
+ },
+ };
+
++
++struct platform_device a1200_eoc_device = {
++ .name = "ezx-eoc",
++ .id = -1,
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &a1200_pcap_device,
++ &a1200_eoc_device,
+ };
+
+ static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch
new file mode 100644
index 0000000000..cc36d36c51
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-flip.patch
@@ -0,0 +1,47 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:42.000000000 -0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:50.000000000 -0200
+@@ -16,6 +16,7 @@
+ #include <linux/mmc/host.h>
+ #include <linux/irq.h>
+ #include <linux/input.h>
++#include <linux/gpio_keys.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -275,11 +276,34 @@
+ .num_resources = ARRAY_SIZE(pcap_ts_resources),
+ .resource = pcap_ts_resources,
+ };
++/* Flip */
++#undef GPIO_FLIP_PIN
++#define GPIO_FLIP_PIN 15 /* FIXME */
++static struct gpio_keys_button a1200flip_buttons[] = {
++ [0] = {
++ .code = KEY_SLEEP,
++ .gpio = GPIO_FLIP_PIN,
++ .desc = "A1200 flip",
++ },
++};
++
++static struct gpio_keys_platform_data a1200flip_platform_data = {
++ .buttons = a1200flip_buttons,
++ .nbuttons = 1,
++};
++static struct platform_device a1200flip_device = {
++ .name = "gpio-keys",
++ .id = -1,
++ .dev = {
++ .platform_data = &a1200flip_platform_data,
++ },
++};
+
+ static struct platform_device *devices[] __initdata = {
+ &a1200_pcap_device,
+ &a1200_eoc_device,
+ &pcap_ts_device,
++ &a1200flip_device,
+ };
+
+ static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch
new file mode 100644
index 0000000000..1e1a68c5b8
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-kbd.patch
@@ -0,0 +1,98 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:24.000000000 -0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:35.000000000 -0200
+@@ -15,6 +15,7 @@
+ #include <linux/fb.h>
+ #include <linux/mmc/host.h>
+ #include <linux/irq.h>
++#include <linux/input.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -23,11 +24,13 @@
+ #include <asm/arch/ezx.h>
+ #include <asm/arch/ezx-pcap.h>
+ #include <asm/arch/mmc.h>
++#include <asm/arch/kbd.h>
+
+ #include "generic.h"
+
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
++extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *);
+
+ #ifdef CONFIG_EZX_PCAP
+ extern int ezx_pcap_mmcsd_power(int);
+@@ -192,6 +195,63 @@
+ .id = -1,
+ };
+
++/* Keypad */
++static unsigned char a1200_keycode[] = {
++ /* row 0 */
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* row 1 */
++ KEY_RIGHT, KEY_DOWN, KEY_KPENTER, KEY_UP, KEY_LEFT,
++ /* row 2 */
++ KEY_PAGEDOWN, KEY_CAMERA, KEY_RECORD, KEY_HOME, KEY_PAGEUP,
++ /* row 3 */
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* row 4 */
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED,
++ /* row 5 */
++ KEY_RESERVED, KEY_RESERVED, KEY_MENU, KEY_RESERVED, KEY_RESERVED,
++};
++/*
++static unsigned char a1200_direct_keycode[] = {
++ KEY_CAMERA,
++};
++*/
++
++static int a1200_kbd_init(void)
++{
++ pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */
++ pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */
++ pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */
++ pxa_gpio_mode(97 | GPIO_ALT_FN_3_IN); /* KP_MKIN<3> */
++ pxa_gpio_mode(98 | GPIO_ALT_FN_3_IN); /* KP_MKIN<4> */
++ pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */
++ pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */
++ pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */
++ pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */
++ pxa_gpio_mode(107 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<4> */
++ pxa_gpio_mode(108 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<5> */
++
++ PKWR = 0xEC000;
++ PGSR3 |= 0x1F80;
++ return 0;
++}
++
++static struct pxakbd_platform_data a1200_kbd_platform_data = {
++ .init = &a1200_kbd_init,
++ .scan_interval = HZ/40,
++ .matrix = {
++ .keycode = a1200_keycode,
++ .cols = 6,
++ .rows = 5,
++ },
++/*
++ .direct = {
++ .keycode = a1200_direct_keycode,
++ .num = 1,
++ },
++*/
++};
++
++
+ static struct platform_device *devices[] __initdata = {
+ &a1200_pcap_device,
+ &a1200_eoc_device,
+@@ -201,6 +261,7 @@
+ {
+ set_pxa_fb_info(&a1200_fb_info);
+ pxa_set_mci_info(&a1200_mci_platform_data);
++ pxa_set_kbd_info(&a1200_kbd_platform_data);
+
+ platform_add_devices(devices, ARRAY_SIZE(devices));
+ }
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch
new file mode 100644
index 0000000000..caa897eddf
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-mci.patch
@@ -0,0 +1,124 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
+@@ -13,6 +13,8 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+ #include <linux/fb.h>
++#include <linux/mmc/host.h>
++#include <linux/irq.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -20,12 +22,102 @@
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/ezx.h>
+ #include <asm/arch/ezx-pcap.h>
++#include <asm/arch/mmc.h>
+
+ #include "generic.h"
+
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
+
++#ifdef CONFIG_EZX_PCAP
++extern int ezx_pcap_mmcsd_power(int);
++extern void ezx_pcap_mmcsd_voltage(u_int32_t);
++#else
++#define ezx_pcap_mmcsd_voltage(x) {}
++#define ezx_pcap_mmcsd_power(x) {}
++#endif
++
++static struct pxamci_platform_data a1200_mci_platform_data;
++
++static u_int8_t mmc_voltage[] = {
++ [ilog2(MMC_VDD_165_195)] = 6,
++ [ilog2(MMC_VDD_20_21)] = 7,
++ [ilog2(MMC_VDD_21_22)] = 8,
++ [ilog2(MMC_VDD_22_23)] = 8,
++ [ilog2(MMC_VDD_23_24)] = 9,
++ [ilog2(MMC_VDD_24_25)] = 9,
++ [ilog2(MMC_VDD_25_26)] = 10,
++ [ilog2(MMC_VDD_26_27)] = 10,
++ [ilog2(MMC_VDD_27_28)] = 11,
++ [ilog2(MMC_VDD_28_29)] = 11,
++ [ilog2(MMC_VDD_29_30)] = 12,
++ [ilog2(MMC_VDD_30_31)] = 12,
++ [ilog2(MMC_VDD_31_32)] = 13,
++ [ilog2(MMC_VDD_32_33)] = 13,
++ [ilog2(MMC_VDD_33_34)] = 14,
++ [ilog2(MMC_VDD_34_35)] = 14,
++ [ilog2(MMC_VDD_35_36)] = 15,
++};
++
++static int a1200_mci_init(struct device *dev,
++ irqreturn_t (*ezx_detect_int)(int, void *),
++ void *data)
++{
++ int err;
++
++ /* Setup GPIO for PXA27x MMC/SD controller */
++ pxa_gpio_mode(GPIO32_MMCCLK_MD);
++ pxa_gpio_mode(GPIO112_MMCCMD_MD);
++ pxa_gpio_mode(GPIO92_MMCDAT0_MD);
++ pxa_gpio_mode(GPIO109_MMCDAT1_MD);
++ pxa_gpio_mode(GPIO110_MMCDAT2_MD);
++ pxa_gpio_mode(GPIO111_MMCDAT3_MD);
++
++ ezx_pcap_mmcsd_power(1);
++
++ a1200_mci_platform_data.detect_delay = msecs_to_jiffies(250);
++
++ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED,
++ "MMC card detect", data);
++ if (err) {
++ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request "
++ "MMC card detect IRQ\n");
++ return -1;
++ }
++
++ set_irq_type(0x0b, IRQT_BOTHEDGE);
++
++ return 0;
++}
++
++static void a1200_mci_setpower(struct device *dev, unsigned int vdd)
++{
++ struct pxamci_platform_data* p_d = dev->platform_data;
++
++ if (( 1 << vdd) & p_d->ocr_mask)
++ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]);
++
++ ezx_pcap_mmcsd_power(1);
++}
++
++static void a1200_mci_exit(struct device *dev, void *data)
++{
++ ezx_pcap_mmcsd_power(0);
++ free_irq(0x49, data);
++}
++
++static struct pxamci_platform_data a1200_mci_platform_data = {
++ .ocr_mask = MMC_VDD_165_195|MMC_VDD_20_21|MMC_VDD_21_22
++ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25
++ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28
++ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31
++ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34
++ |MMC_VDD_34_35|MMC_VDD_35_36,
++ .init = a1200_mci_init,
++ .setpower = a1200_mci_setpower,
++ .exit = a1200_mci_exit,
++};
++
+ static struct pxafb_mode_info mode_a1200 = {
+ .pixclock = 192308,
+ .xres = 240,
+@@ -101,6 +193,7 @@
+ static void __init a1200_init(void)
+ {
+ set_pxa_fb_info(&a1200_fb_info);
++ pxa_set_mci_info(&a1200_mci_platform_data);
+
+ platform_add_devices(devices, ARRAY_SIZE(devices));
+ }
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-pcap.patch
new file mode 100644
index 0000000000..c725886630
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-pcap.patch
@@ -0,0 +1,66 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
+@@ -19,6 +19,7 @@
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/ezx.h>
++#include <asm/arch/ezx-pcap.h>
+
+ #include "generic.h"
+
+@@ -48,7 +49,53 @@
+ .pxafb_lcd_power = &ezx_lcd_power,
+ };
+
++/* PCAP */
++static int a1200_pcap_init(void)
++{
++ /* FIXME */
++ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */
++ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */
++ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */
++ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */
++ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */
++ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */
++ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */
++ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */
++ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c);
++ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */
++ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */
++
++ return 0;
++}
++
++static struct pcap_platform_data a1200_pcap_platform_data = {
++ .port = 1,
++ .cs = GPIO_SPI_CE,
++ .flags = PCAP_CS_AH | PCAP_MCI_TF,
++ .clk = 1,
++ .init = a1200_pcap_init,
++};
++
++static struct resource a1200_pcap_resources[] = {
++ [0] = {
++ .start = IRQ_GPIO1,
++ .end = IRQ_GPIO1,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++struct platform_device a1200_pcap_device = {
++ .name = "ezx-pcap",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(a1200_pcap_resources),
++ .resource = a1200_pcap_resources,
++ .dev = {
++ .platform_data = &a1200_pcap_platform_data,
++ },
++};
++
+ static struct platform_device *devices[] __initdata = {
++ &a1200_pcap_device,
+ };
+
+ static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch
new file mode 100644
index 0000000000..66409d12b0
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a1200-ts.patch
@@ -0,0 +1,39 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:35.000000000 -0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a1200.c 2007-11-24 20:12:42.000000000 -0200
+@@ -252,9 +252,34 @@
+ };
+
+
++/* PCAP_TS */
++struct resource pcap_ts_resources[] = {
++ [0] = {
++ .start = EZX_IRQ_ADCDONE,
++ .end = EZX_IRQ_ADCDONE,
++ .flags = IORESOURCE_IRQ,
++ },
++ [1] = {
++ .start = EZX_IRQ_TS,
++ .end = EZX_IRQ_TS,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++struct platform_device pcap_ts_device = {
++ .name = "pcap-ts",
++ .id = -1,
++ .dev = {
++ .parent = &a1200_pcap_device.dev,
++ },
++ .num_resources = ARRAY_SIZE(pcap_ts_resources),
++ .resource = pcap_ts_resources,
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &a1200_pcap_device,
+ &a1200_eoc_device,
++ &pcap_ts_device,
+ };
+
+ static void __init a1200_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch
new file mode 100644
index 0000000000..ae9237394d
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a780-emu.patch
@@ -0,0 +1,38 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 23:03:48.000000000 +0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 23:04:03.000000000 +0200
+@@ -212,8 +212,33 @@
+ },
+ };
+
++/* EMU */
++static struct resource a780_emu_resources[] = {
++ [0] = {
++ .start = EZX_IRQ_USB4V,
++ .end = EZX_IRQ_USB4V,
++ .flags = IORESOURCE_IRQ,
++ },
++ [1] = {
++ .start = EZX_IRQ_USB1V,
++ .end = EZX_IRQ_USB1V,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++struct platform_device a780_emu_device = {
++ .name = "ezx-emu",
++ .id = -1,
++ .dev = {
++ .parent = &a780_pcap_device.dev,
++ },
++ .num_resources = ARRAY_SIZE(a780_emu_resources),
++ .resource = a780_emu_resources,
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &a780_pcap_device,
++ &a780_emu_device,
+ };
+
+ static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch
new file mode 100644
index 0000000000..44b97880ca
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a780-flip.patch
@@ -0,0 +1,46 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:58.000000000 +0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:38:04.000000000 +0200
+@@ -18,6 +18,7 @@
+ #include <linux/irq.h>
+ #include <linux/log2.h>
+ #include <linux/input.h>
++#include <linux/gpio_keys.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -312,10 +313,33 @@
+ .resource = pcap_ts_resources,
+ };
+
++static struct gpio_keys_button a780flip_buttons[] = {
++ [0] = {
++ .code = KEY_SLEEP,
++ .gpio = GPIO_FLIP_PIN,
++ .desc = "A780 flip",
++ },
++};
++
++static struct gpio_keys_platform_data a780flip_platform_data = {
++ .buttons = a780flip_buttons,
++ .nbuttons = 1,
++};
++
++static struct platform_device a780flip_device = {
++ .name = "gpio-keys",
++ .id = -1,
++ .dev = {
++ .platform_data = &a780flip_platform_data,
++ },
++};
++
++
+ static struct platform_device *devices[] __initdata = {
+ &a780_pcap_device,
+ &a780_emu_device,
+ &pcap_ts_device,
++ &a780flip_device,
+ };
+
+ static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch
new file mode 100644
index 0000000000..fa22c72a6b
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a780-kbd.patch
@@ -0,0 +1,90 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
+@@ -17,6 +17,7 @@
+ #include <linux/mmc/host.h>
+ #include <linux/irq.h>
+ #include <linux/log2.h>
++#include <linux/input.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -25,11 +26,13 @@
+ #include <asm/arch/ezx.h>
+ #include <asm/arch/ezx-pcap.h>
+ #include <asm/arch/mmc.h>
++#include <asm/arch/kbd.h>
+
+ #include "generic.h"
+
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
++extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *);
+
+ #ifdef CONFIG_EZX_PCAP
+ extern int ezx_pcap_mmcsd_power(int);
+@@ -236,6 +239,55 @@
+ .resource = a780_emu_resources,
+ };
+
++static unsigned char a780_keycode[] = {
++ /* row 0 */
++ KEY_PHONE, KEY_MENU, KEY_CANCEL, KEY_PAGEUP, KEY_UP,
++ /* row 1 */
++ KEY_KP1, KEY_KP2, KEY_KP3, KEY_ENTER, KEY_KPENTER, /*center joypad */
++ /* row 2 */
++ KEY_KP4, KEY_KP5, KEY_KP6, KEY_RECORD, KEY_LEFT,
++ /* row 3 */
++ KEY_KP7, KEY_KP8, KEY_KP9, KEY_HOME, KEY_RIGHT,
++ /* row 4 */
++ KEY_KPASTERISK, KEY_KP0, KEY_KPDOT, KEY_PAGEDOWN, KEY_DOWN,
++};
++
++static unsigned char a780_direct_keycode[] = {
++ KEY_CAMERA,
++};
++
++static int a780_kbd_init(void)
++{
++ pxa_gpio_mode(93 | GPIO_ALT_FN_1_IN); /* KP_DKIN<0>, voice_rec */
++ pxa_gpio_mode(97 | GPIO_ALT_FN_3_IN); /* KP_MKIN<3> */
++ pxa_gpio_mode(98 | GPIO_ALT_FN_3_IN); /* KP_MKIN<4> */
++ pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */
++ pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */
++ pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */
++ pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */
++ pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */
++ pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */
++ pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */
++ pxa_gpio_mode(107 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<4> */
++ PKWR = 0xec400;
++ PGSR3 |= 0xf80;
++ return 0;
++}
++
++static struct pxakbd_platform_data a780_kbd_platform_data = {
++ .init = &a780_kbd_init,
++ .scan_interval = HZ/40,
++ .matrix = {
++ .keycode = a780_keycode,
++ .cols = 5,
++ .rows = 5,
++ },
++ .direct = {
++ .keycode = a780_direct_keycode,
++ .num = 1,
++ },
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &a780_pcap_device,
+ &a780_emu_device,
+@@ -256,6 +308,7 @@
+
+ set_pxa_fb_info(&a780_fb_info);
+ pxa_set_mci_info(&a780_mci_platform_data);
++ pxa_set_kbd_info(&a780_kbd_platform_data);
+
+ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
+ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-leds.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-leds.patch
new file mode 100644
index 0000000000..edcc7136a1
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a780-leds.patch
@@ -0,0 +1,187 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+Index: linux-2.6.24/drivers/leds/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/leds/Kconfig
++++ linux-2.6.24/drivers/leds/Kconfig
+@@ -123,6 +123,13 @@
+ These triggers allow kernel events to drive the LEDs and can
+ be configured via sysfs. If unsure, say Y.
+
++config LEDS_A780
++ tristate "LED Support for the Motorola A780 GSM Phone"
++ depends on LEDS_CLASS && PXA_EZX_A780
++ help
++ This option enables support for the LEDs on the
++ Motorola A780 GSM Phone.
++
+ config LEDS_TRIGGER_TIMER
+ tristate "LED Timer Trigger"
+ depends on LEDS_TRIGGERS
+Index: linux-2.6.24/drivers/leds/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/leds/Makefile
++++ linux-2.6.24/drivers/leds/Makefile
+@@ -19,6 +19,7 @@
+ obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o
+ obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o
+ obj-$(CONFIG_LEDS_CM_X270) += leds-cm-x270.o
++obj-$(CONFIG_LEDS_A780) += leds-a780.o
+
+ # LED Triggers
+ obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
+Index: linux-2.6.24/drivers/leds/leds-a780.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/leds/leds-a780.c
+@@ -0,0 +1,122 @@
++/*
++ * EZX Platform LED Driver for the Motorola A780 GSM Phone
++ *
++ * Copyright 2006 Vanille-Media
++ *
++ * Author: Michael Lauer <mickey@Vanille.de>
++ *
++ * Based on keylight.c by Motorola and leds-corgi.c by Richard Purdie
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/platform_device.h>
++#include <linux/leds.h>
++#include <asm/arch/ezx-pcap.h>
++
++static void a780led_main_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ if ( value > 31 ) value = 31;
++ printk( KERN_DEBUG "a780led_main_set: %d\n", value );
++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL0, value & 0x01);
++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL1, value & 0x02);
++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL2, value & 0x04);
++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL3, value & 0x08);
++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL_CTRL4, value & 0x10);
++}
++
++static void a780led_aux_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ if ( value > 31 ) value = 31;
++ printk( KERN_DEBUG "a780led_aux_set: %d\n", value );
++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL0, value & 0x01);
++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL1, value & 0x02);
++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL2, value & 0x04);
++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL3, value & 0x08);
++ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL4, value & 0x10);
++}
++
++static struct led_classdev a780_main_led = {
++ .name = "a780:main",
++ .default_trigger = "none",
++ .brightness_set = a780led_main_set,
++};
++
++static struct led_classdev a780_aux_led = {
++ .name = "a780:aux",
++ .default_trigger = "none",
++ .brightness_set = a780led_aux_set,
++};
++
++#ifdef CONFIG_PM
++static int a780led_suspend(struct platform_device *dev, pm_message_t state)
++{
++ led_classdev_suspend(&a780_main_led);
++ led_classdev_suspend(&a780_aux_led);
++ return 0;
++}
++
++static int a780led_resume(struct platform_device *dev)
++{
++ led_classdev_resume(&a780_main_led);
++ led_classdev_resume(&a780_aux_led);
++ return 0;
++}
++#endif
++
++static int a780led_probe(struct platform_device *pdev)
++{
++ int ret;
++
++ ret = led_classdev_register(&pdev->dev, &a780_main_led);
++ if (ret < 0)
++ return ret;
++
++ ret = led_classdev_register(&pdev->dev, &a780_aux_led);
++ if (ret < 0)
++ led_classdev_unregister(&a780_main_led);
++
++ return ret;
++}
++
++static int a780led_remove(struct platform_device *pdev)
++{
++ led_classdev_unregister(&a780_main_led);
++ led_classdev_unregister(&a780_aux_led);
++ return 0;
++}
++
++static struct platform_driver a780led_driver = {
++ .probe = a780led_probe,
++ .remove = a780led_remove,
++#ifdef CONFIG_PM
++ .suspend = a780led_suspend,
++ .resume = a780led_resume,
++#endif
++ .driver = {
++ .name = "a780-led",
++ },
++};
++
++static int __init a780led_init(void)
++{
++ return platform_driver_register(&a780led_driver);
++}
++
++static void __exit a780led_exit(void)
++{
++ a780led_main_set( &a780_main_led, 0 );
++ a780led_aux_set( &a780_aux_led, 0 );
++ platform_driver_unregister(&a780led_driver);
++}
++
++module_init(a780led_init);
++module_exit(a780led_exit);
++
++MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>");
++MODULE_DESCRIPTION("Motorola A780 LED driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/ezx-a780.c
++++ linux-2.6.24/arch/arm/mach-pxa/ezx-a780.c
+@@ -334,12 +334,20 @@
+ },
+ };
+
++static struct platform_device a780led_device = {
++ .name = "a780-led",
++ .id = -1,
++ .dev = {
++ .parent = &a780_pcap_device.dev,
++ },
++};
+
+ static struct platform_device *devices[] __initdata = {
+ &a780_pcap_device,
+ &a780_emu_device,
+ &pcap_ts_device,
+ &a780flip_device,
++ &a780led_device,
+ };
+
+ static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch
new file mode 100644
index 0000000000..591db70a26
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a780-mci.patch
@@ -0,0 +1,125 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
+@@ -14,6 +14,9 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+ #include <linux/fb.h>
++#include <linux/mmc/host.h>
++#include <linux/irq.h>
++#include <linux/log2.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -21,12 +24,102 @@
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/ezx.h>
+ #include <asm/arch/ezx-pcap.h>
++#include <asm/arch/mmc.h>
+
+ #include "generic.h"
+
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
+
++#ifdef CONFIG_EZX_PCAP
++extern int ezx_pcap_mmcsd_power(int);
++extern void ezx_pcap_mmcsd_voltage(u_int32_t);
++#else
++#define ezx_pcap_mmcsd_voltage(x) {}
++#define ezx_pcap_mmcsd_power(x) {}
++#endif
++
++static struct pxamci_platform_data a780_mci_platform_data;
++
++static u_int8_t mmc_voltage[] = {
++ [ilog2(MMC_VDD_165_195)] = 6,
++ [ilog2(MMC_VDD_20_21)] = 7,
++ [ilog2(MMC_VDD_21_22)] = 8,
++ [ilog2(MMC_VDD_22_23)] = 8,
++ [ilog2(MMC_VDD_23_24)] = 9,
++ [ilog2(MMC_VDD_24_25)] = 9,
++ [ilog2(MMC_VDD_25_26)] = 10,
++ [ilog2(MMC_VDD_26_27)] = 10,
++ [ilog2(MMC_VDD_27_28)] = 11,
++ [ilog2(MMC_VDD_28_29)] = 11,
++ [ilog2(MMC_VDD_29_30)] = 12,
++ [ilog2(MMC_VDD_30_31)] = 12,
++ [ilog2(MMC_VDD_31_32)] = 13,
++ [ilog2(MMC_VDD_32_33)] = 13,
++ [ilog2(MMC_VDD_33_34)] = 14,
++ [ilog2(MMC_VDD_34_35)] = 14,
++ [ilog2(MMC_VDD_35_36)] = 15,
++};
++
++static int a780_mci_init(struct device *dev,
++ irqreturn_t (*ezx_detect_int)(int, void *),
++ void *data)
++{
++ int err;
++
++ /* Setup GPIO for PXA27x MMC/SD controller */
++ pxa_gpio_mode(GPIO32_MMCCLK_MD);
++ pxa_gpio_mode(GPIO112_MMCCMD_MD);
++ pxa_gpio_mode(GPIO92_MMCDAT0_MD);
++ pxa_gpio_mode(GPIO109_MMCDAT1_MD);
++ pxa_gpio_mode(GPIO110_MMCDAT2_MD);
++ pxa_gpio_mode(GPIO111_MMCDAT3_MD);
++
++ ezx_pcap_mmcsd_power(1);
++
++ a780_mci_platform_data.detect_delay = msecs_to_jiffies(250);
++
++ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED,
++ "MMC card detect", data);
++ if (err) {
++ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request "
++ "MMC card detect IRQ\n");
++ return -1;
++ }
++
++ set_irq_type(0x0b, IRQT_BOTHEDGE);
++
++ return 0;
++}
++
++static void a780_mci_setpower(struct device *dev, unsigned int vdd)
++{
++ struct pxamci_platform_data* p_d = dev->platform_data;
++
++ if (( 1 << vdd) & p_d->ocr_mask)
++ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]);
++
++ ezx_pcap_mmcsd_power(1);
++}
++
++static void a780_mci_exit(struct device *dev, void *data)
++{
++ ezx_pcap_mmcsd_power(0);
++ free_irq(0x49, data);
++}
++
++static struct pxamci_platform_data a780_mci_platform_data = {
++ .ocr_mask = MMC_VDD_165_195|MMC_VDD_20_21|MMC_VDD_21_22
++ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25
++ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28
++ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31
++ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34
++ |MMC_VDD_34_35|MMC_VDD_35_36,
++ .init = a780_mci_init,
++ .setpower = a780_mci_setpower,
++ .exit = a780_mci_exit,
++};
++
+ static struct pxafb_mode_info mode_a780 = {
+ .pixclock = 150000,
+ .xres = 240,
+@@ -137,6 +230,7 @@
+ PSLR = 0x05800f00;
+
+ set_pxa_fb_info(&a780_fb_info);
++ pxa_set_mci_info(&a780_mci_platform_data);
+
+ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
+ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch
new file mode 100644
index 0000000000..5533433dec
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a780-pcap.patch
@@ -0,0 +1,90 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-11-24 19:58:16.000000000 -0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-11-24 20:09:28.000000000 -0200
+@@ -20,6 +20,7 @@
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/ezx.h>
++#include <asm/arch/ezx-pcap.h>
+
+ #include "generic.h"
+
+@@ -49,7 +50,77 @@
+ .pxafb_lcd_power = &ezx_lcd_power,
+ };
+
++/* PCAP */
++static int a780_pcap_init(void)
++{
++ /* initialize PCAP registers */
++ /* set SW1 sleep to keep SW1 1.3v in sync mode */
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0);
++
++ /* SW1 active in sync mode */
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0);
++
++ /* at SW1 -core voltage to 1.30V */
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0);
++
++ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0);
++
++ /*
++ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
++ * camera for e680
++ */
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0);
++
++ /* set Vc to low power mode when AP sleep */
++// SSP_PCAP_bit_set(PCAP_BIT_LOWPWR_CTRL_VC_STBY);
++
++ /* set VAUX2 to low power mode when AP sleep */
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1);
++
++ return 0;
++}
++
++static struct pcap_platform_data a780_pcap_platform_data = {
++ .port = 1,
++ .cs = GPIO_SPI_CE,
++ .flags = PCAP_MCI_TF,
++ .clk = 1,
++ .init = a780_pcap_init,
++};
++
++static struct resource a780_pcap_resources[] = {
++ [0] = {
++ .start = IRQ_GPIO1,
++ .end = IRQ_GPIO1,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++struct platform_device a780_pcap_device = {
++ .name = "ezx-pcap",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(a780_pcap_resources),
++ .resource = a780_pcap_resources,
++ .dev = {
++ .platform_data = &a780_pcap_platform_data,
++ },
++};
++
+ static struct platform_device *devices[] __initdata = {
++ &a780_pcap_device,
+ };
+
+ static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch
new file mode 100644
index 0000000000..e1dd6ca5c6
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a780-ts.patch
@@ -0,0 +1,39 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:43.000000000 +0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-a780.c 2007-10-23 19:37:58.000000000 +0200
+@@ -288,9 +288,34 @@
+ },
+ };
+
++/* PCAP_TS */
++struct resource pcap_ts_resources[] = {
++ [0] = {
++ .start = EZX_IRQ_ADCDONE2,
++ .end = EZX_IRQ_ADCDONE2,
++ .flags = IORESOURCE_IRQ,
++ },
++ [1] = {
++ .start = EZX_IRQ_TS,
++ .end = EZX_IRQ_TS,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++struct platform_device pcap_ts_device = {
++ .name = "pcap-ts",
++ .id = -1,
++ .dev = {
++ .parent = &a780_pcap_device.dev,
++ },
++ .num_resources = ARRAY_SIZE(pcap_ts_resources),
++ .resource = pcap_ts_resources,
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &a780_pcap_device,
+ &a780_emu_device,
++ &pcap_ts_device,
+ };
+
+ static void __init a780_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch b/packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch
new file mode 100644
index 0000000000..8e431fbd6c
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/a780-vibrator.patch
@@ -0,0 +1,102 @@
+Index: linux-2.6.24/drivers/leds/leds-a780.c
+===================================================================
+--- linux-2.6.24.orig/drivers/leds/leds-a780.c
++++ linux-2.6.24/drivers/leds/leds-a780.c
+@@ -40,6 +40,17 @@
+ ezx_pcap_bit_set(PCAP_BIT_PERIPH_BL2_CTRL4, value & 0x10);
+ }
+
++static void a780vibrator_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ if (value > 4) value = 4;
++ printk( KERN_DEBUG "a780vibrator_set: %d\n", value );
++ ezx_pcap_vibrator_level(value-1);
++ if (value == 0)
++ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 0);
++ else
++ ezx_pcap_bit_set(PCAP_BIT_AUXVREG_V_VIB_EN, 1);
++}
++
+ static struct led_classdev a780_main_led = {
+ .name = "a780:main",
+ .default_trigger = "none",
+@@ -52,11 +63,18 @@
+ .brightness_set = a780led_aux_set,
+ };
+
++static struct led_classdev a780_vibrator = {
++ .name = "a780:vibrator",
++ .default_trigger = "none",
++ .brightness_set = a780vibrator_set,
++};
++
+ #ifdef CONFIG_PM
+ static int a780led_suspend(struct platform_device *dev, pm_message_t state)
+ {
+ led_classdev_suspend(&a780_main_led);
+ led_classdev_suspend(&a780_aux_led);
++ led_classdev_suspend(&a780_vibrator);
+ return 0;
+ }
+
+@@ -64,6 +82,7 @@
+ {
+ led_classdev_resume(&a780_main_led);
+ led_classdev_resume(&a780_aux_led);
++ led_classdev_resume(&a780_vibrator);
+ return 0;
+ }
+ #endif
+@@ -77,8 +96,16 @@
+ return ret;
+
+ ret = led_classdev_register(&pdev->dev, &a780_aux_led);
+- if (ret < 0)
++ if (ret < 0) {
++ led_classdev_unregister(&a780_main_led);
++ return ret;
++ }
++
++ ret = led_classdev_register(&pdev->dev, &a780_vibrator);
++ if (ret < 0) {
+ led_classdev_unregister(&a780_main_led);
++ led_classdev_unregister(&a780_aux_led);
++ }
+
+ return ret;
+ }
+@@ -87,6 +114,7 @@
+ {
+ led_classdev_unregister(&a780_main_led);
+ led_classdev_unregister(&a780_aux_led);
++ led_classdev_unregister(&a780_vibrator);
+ return 0;
+ }
+
+@@ -111,6 +139,7 @@
+ {
+ a780led_main_set( &a780_main_led, 0 );
+ a780led_aux_set( &a780_aux_led, 0 );
++ a780vibrator_set( &a780_vibrator, 0 );
+ platform_driver_unregister(&a780led_driver);
+ }
+
+Index: linux-2.6.24/drivers/leds/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/leds/Kconfig
++++ linux-2.6.24/drivers/leds/Kconfig
+@@ -124,11 +124,11 @@
+ be configured via sysfs. If unsure, say Y.
+
+ config LEDS_A780
+- tristate "LED Support for the Motorola A780 GSM Phone"
++ tristate "LED/Vibrator Support for the Motorola A780 GSM Phone"
+ depends on LEDS_CLASS && PXA_EZX_A780
+ help
+- This option enables support for the LEDs on the
+- Motorola A780 GSM Phone.
++ This option enables support for the LEDs and the
++ vibrator on the Motorola A780 GSM Phone.
+
+ config LEDS_E680
+ tristate "LED Support for the Motorola E680(i) GSM Phone"
diff --git a/packages/linux/linux-ezx-2.6.24/patches/asoc-fix-loopback.patch b/packages/linux/linux-ezx-2.6.24/patches/asoc-fix-loopback.patch
new file mode 100644
index 0000000000..feea138984
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/asoc-fix-loopback.patch
@@ -0,0 +1,14 @@
+Index: linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c
+===================================================================
+--- linux-2.6.21.orig/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:30:56.000000000 -0300
++++ linux-2.6.21/sound/soc/pxa/pxa2xx-pcm.c 2007-09-02 22:36:26.000000000 -0300
+@@ -153,7 +153,8 @@
+ static int pxa2xx_pcm_prepare(struct snd_pcm_substream *substream)
+ {
+ struct pxa2xx_runtime_data *prtd = substream->runtime->private_data;
+-
++ /* no dma if on loopback */
++ if (!prtd->params) return 0;
+ DCSR(prtd->dma_ch) &= ~DCSR_RUN;
+ DCSR(prtd->dma_ch) = 0;
+ DCMD(prtd->dma_ch) = 0;
diff --git a/packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch b/packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch
new file mode 100644
index 0000000000..e53b61c352
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/asoc-pxa-ssp.patch
@@ -0,0 +1,755 @@
+Index: linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.c 2007-10-22 22:27:11.000000000 +0200
+@@ -0,0 +1,671 @@
++/*
++ * pxa2xx-ssp.c -- ALSA Soc Audio Layer
++ *
++ * Copyright 2005 Wolfson Microelectronics PLC.
++ * Author: Liam Girdwood
++ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * Revision history
++ * 12th Aug 2005 Initial version.
++ *
++ * TODO:
++ * o The SSP driver _mostly_ works, however is in need of testing and
++ * someone with time to complete it.
++ * o Test network mode for > 16bit sample size
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/initval.h>
++#include <sound/pcm_params.h>
++#include <sound/soc.h>
++
++#include <asm/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/audio.h>
++#include <asm/arch/ssp.h>
++
++#include "pxa2xx-pcm.h"
++#include "pxa2xx-ssp.h"
++
++#define PXA_SSP_DEBUG 0
++
++/*
++ * The following should be defined in pxa-regs.h
++ */
++#define SSCR0_ACS (1 << 30) /* Audio Clock Select */
++#define SSACD_SCDB (1 << 3) /* SSPSYSCLK Divider Bypass (SSCR0[ACS] must be set) */
++#define SSACD_ACPS(x) (x << 4) /* Audio clock PLL select */
++#define SSACD_ACDS(x) (x << 0) /* Audio clock divider select */
++
++/*
++ * SSP audio private data
++ */
++struct ssp_priv {
++ unsigned int sysclk;
++};
++
++static struct ssp_priv ssp_clk[3];
++static struct ssp_dev ssp[3];
++#ifdef CONFIG_PM
++static struct ssp_state ssp_state[3];
++#endif
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_mono_out = {
++ .name = "SSP1 PCM Mono out",
++ .dev_addr = __PREG(SSDR_P1),
++ .drcmr = &DRCMRTXSSDR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_mono_in = {
++ .name = "SSP1 PCM Mono in",
++ .dev_addr = __PREG(SSDR_P1),
++ .drcmr = &DRCMRRXSSDR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_stereo_out = {
++ .name = "SSP1 PCM Stereo out",
++ .dev_addr = __PREG(SSDR_P1),
++ .drcmr = &DRCMRTXSSDR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_stereo_in = {
++ .name = "SSP1 PCM Stereo in",
++ .dev_addr = __PREG(SSDR_P1),
++ .drcmr = &DRCMRRXSSDR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_mono_out = {
++ .name = "SSP2 PCM Mono out",
++ .dev_addr = __PREG(SSDR_P2),
++ .drcmr = &DRCMRTXSS2DR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_mono_in = {
++ .name = "SSP2 PCM Mono in",
++ .dev_addr = __PREG(SSDR_P2),
++ .drcmr = &DRCMRRXSS2DR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_stereo_out = {
++ .name = "SSP2 PCM Stereo out",
++ .dev_addr = __PREG(SSDR_P2),
++ .drcmr = &DRCMRTXSS2DR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_stereo_in = {
++ .name = "SSP2 PCM Stereo in",
++ .dev_addr = __PREG(SSDR_P2),
++ .drcmr = &DRCMRRXSS2DR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_mono_out = {
++ .name = "SSP3 PCM Mono out",
++ .dev_addr = __PREG(SSDR_P3),
++ .drcmr = &DRCMRTXSS3DR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_mono_in = {
++ .name = "SSP3 PCM Mono in",
++ .dev_addr = __PREG(SSDR_P3),
++ .drcmr = &DRCMRRXSS3DR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH2,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_stereo_out = {
++ .name = "SSP3 PCM Stereo out",
++ .dev_addr = __PREG(SSDR_P3),
++ .drcmr = &DRCMRTXSS3DR,
++ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_stereo_in = {
++ .name = "SSP3 PCM Stereo in",
++ .dev_addr = __PREG(SSDR_P3),
++ .drcmr = &DRCMRRXSS3DR,
++ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
++ DCMD_BURST16 | DCMD_WIDTH4,
++};
++
++static struct pxa2xx_pcm_dma_params *ssp_dma_params[3][4] = {
++ {&pxa2xx_ssp1_pcm_mono_out, &pxa2xx_ssp1_pcm_mono_in,
++ &pxa2xx_ssp1_pcm_stereo_out,&pxa2xx_ssp1_pcm_stereo_in,},
++ {&pxa2xx_ssp2_pcm_mono_out, &pxa2xx_ssp2_pcm_mono_in,
++ &pxa2xx_ssp2_pcm_stereo_out, &pxa2xx_ssp2_pcm_stereo_in,},
++ {&pxa2xx_ssp3_pcm_mono_out, &pxa2xx_ssp3_pcm_mono_in,
++ &pxa2xx_ssp3_pcm_stereo_out,&pxa2xx_ssp3_pcm_stereo_in,},
++};
++
++static int pxa2xx_ssp_startup(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++ int ret = 0;
++
++ if (!rtd->dai->cpu_dai->active) {
++ ret = ssp_init (&ssp[cpu_dai->id], cpu_dai->id + 1,
++ SSP_NO_IRQ);
++ if (ret < 0)
++ return ret;
++ ssp_disable(&ssp[cpu_dai->id]);
++ }
++ return ret;
++}
++
++static void pxa2xx_ssp_shutdown(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++
++ if (!cpu_dai->active) {
++ ssp_disable(&ssp[cpu_dai->id]);
++ ssp_exit(&ssp[cpu_dai->id]);
++ }
++}
++
++#if defined (CONFIG_PXA27x)
++static int cken[3] = {CKEN_SSP1, CKEN_SSP2, CKEN_SSP3};
++#else
++static int cken[3] = {CKEN_SSP, CKEN_NSSP, CKEN_ASSP};
++#endif
++
++#ifdef CONFIG_PM
++
++static int pxa2xx_ssp_suspend(struct platform_device *pdev,
++ struct snd_soc_cpu_dai *dai)
++{
++ if (!dai->active)
++ return 0;
++
++ ssp_save_state(&ssp[dai->id], &ssp_state[dai->id]);
++ pxa_set_cken(cken[dai->id], 0);
++ return 0;
++}
++
++static int pxa2xx_ssp_resume(struct platform_device *pdev,
++ struct snd_soc_cpu_dai *dai)
++{
++ if (!dai->active)
++ return 0;
++
++ pxa_set_cken(cken[dai->id], 1);
++ ssp_restore_state(&ssp[dai->id], &ssp_state[dai->id]);
++ ssp_enable(&ssp[dai->id]);
++
++ return 0;
++}
++
++#else
++#define pxa2xx_ssp_suspend NULL
++#define pxa2xx_ssp_resume NULL
++#endif
++
++/*
++ * Set the SSP ports SYSCLK.
++ */
++static int pxa2xx_ssp_set_dai_sysclk(struct snd_soc_cpu_dai *cpu_dai,
++ int clk_id, unsigned int freq, int dir)
++{
++ int port = cpu_dai->id + 1;
++ u32 sscr0 = SSCR0_P(port) &
++ ~(SSCR0_ECS | SSCR0_NCS | SSCR0_MOD | SSCR0_ACS);
++
++ switch (clk_id) {
++ case PXA2XX_SSP_CLK_PLL:
++ /* Internal PLL is fixed on pxa25x and pxa27x */
++#ifdef CONFIG_PXA27x
++ ssp_clk[cpu_dai->id].sysclk = 13000000;
++#else
++ ssp_clk[cpu_dai->id].sysclk = 1843200;
++#endif
++ break;
++ case PXA2XX_SSP_CLK_EXT:
++ ssp_clk[cpu_dai->id].sysclk = freq;
++ sscr0 |= SSCR0_ECS;
++ break;
++ case PXA2XX_SSP_CLK_NET:
++ ssp_clk[cpu_dai->id].sysclk = freq;
++ sscr0 |= SSCR0_NCS | SSCR0_MOD;
++ break;
++ case PXA2XX_SSP_CLK_AUDIO:
++ ssp_clk[cpu_dai->id].sysclk = 0;
++ SSCR0_P(port) |= SSCR0_SerClkDiv(1);
++ sscr0 |= SSCR0_ACS;
++ break;
++ default:
++ return -ENODEV;
++ }
++
++ /* the SSP CKEN clock must be disabled when changing SSP clock mode */
++ pxa_set_cken(cken[cpu_dai->id], 0);
++ SSCR0_P(port) |= sscr0;
++ pxa_set_cken(cken[cpu_dai->id], 1);
++ return 0;
++}
++
++/*
++ * Set the SSP clock dividers.
++ */
++static int pxa2xx_ssp_set_dai_clkdiv(struct snd_soc_cpu_dai *cpu_dai,
++ int div_id, int div)
++{
++ int port = cpu_dai->id + 1;
++
++ switch (div_id) {
++ case PXA2XX_SSP_AUDIO_DIV_ACDS:
++ SSACD_P(port) &= ~ 0x7;
++ SSACD_P(port) |= SSACD_ACDS(div);
++ break;
++ case PXA2XX_SSP_AUDIO_DIV_SCDB:
++ SSACD_P(port) &= ~0x8;
++ if (div == PXA2XX_SSP_CLK_SCDB_1)
++ SSACD_P(port) |= SSACD_SCDB;
++ break;
++ case PXA2XX_SSP_DIV_SCR:
++ SSCR0_P(port) &= ~SSCR0_SCR;
++ SSCR0_P(port) |= SSCR0_SerClkDiv(div);
++ break;
++ default:
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++/*
++ * Configure the PLL frequency pxa27x and (afaik - pxa320 only)
++ */
++static int pxa2xx_ssp_set_dai_pll(struct snd_soc_cpu_dai *cpu_dai,
++ int pll_id, unsigned int freq_in, unsigned int freq_out)
++{
++ int port = cpu_dai->id + 1;
++
++ SSACD_P(port) &= ~0x70;
++ switch (freq_out) {
++ case 5622000:
++ break;
++ case 11345000:
++ SSACD_P(port) |= (0x1 << 4);
++ break;
++ case 12235000:
++ SSACD_P(port) |= (0x2 << 4);
++ break;
++ case 14857000:
++ SSACD_P(port) |= (0x3 << 4);
++ break;
++ case 32842000:
++ SSACD_P(port) |= (0x4 << 4);
++ break;
++ case 48000000:
++ SSACD_P(port) |= (0x5 << 4);
++ break;
++ }
++ return 0;
++}
++
++/*
++ * Set the active slots in TDM/Network mode
++ */
++static int pxa2xx_ssp_set_dai_tdm_slot(struct snd_soc_cpu_dai *cpu_dai,
++ unsigned int mask, int slots)
++{
++ int port = cpu_dai->id + 1;
++
++ SSCR0_P(port) &= ~SSCR0_SlotsPerFrm(7);
++
++ /* set number of active slots */
++ SSCR0_P(port) |= SSCR0_SlotsPerFrm(slots);
++
++ /* set active slot mask */
++ SSTSA_P(port) = mask;
++ SSRSA_P(port) = mask;
++ return 0;
++}
++
++/*
++ * Tristate the SSP DAI lines
++ */
++static int pxa2xx_ssp_set_dai_tristate(struct snd_soc_cpu_dai *cpu_dai,
++ int tristate)
++{
++ int port = cpu_dai->id + 1;
++
++ if (tristate)
++ SSCR1_P(port) &= ~SSCR1_TTE;
++ else
++ SSCR1_P(port) |= SSCR1_TTE;
++
++ return 0;
++}
++
++/*
++ * Set up the SSP DAI format.
++ * The SSP Port must be inactive before calling this function as the
++ * physical interface format is changed.
++ */
++static int pxa2xx_ssp_set_dai_fmt(struct snd_soc_cpu_dai *cpu_dai,
++ unsigned int fmt)
++{
++ int port = cpu_dai->id + 1;
++
++ /* reset port settings */
++ SSCR0_P(port) = 0;
++ SSCR1_P(port) = 0;
++ SSPSP_P(port) = 0;
++
++ /* NOTE: I2S emulation is still very much work in progress here */
++
++ /* FIXME: this is what wince uses for msb */
++ if ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_MSB) {
++ SSCR0_P(port) = SSCR0_EDSS | SSCR0_TISSP | SSCR0_DataSize(16);
++
++// SSCR1_P(port) = SSCR1_RxTresh(8) | SSCR1_TxTresh(8); /* doesn't seem to be needed */
++ return 0;
++ }
++
++ /* check for I2S emulation mode - handle it separately */
++ if (((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_I2S) ||
++ ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_MSB)) {
++ /* 8.4.11 */
++
++ /* Only SSCR0[NCS] or SSCR0[ECS] bit fields settings are optional */
++ SSCR0_P(port) = SSCR0_EDSS | SSCR0_PSP | SSCR0_DataSize(16);
++
++ /* SSCR1 = 0x203C3C03 */
++ /* SSCR1[SCLKDIR] and SSCR1[SFRMDIR] must be cleared (master only ???),
++ * all other bit fields settings are optional. */
++ //SSCR1_P(port) &= ~(SSCR1_SCLKDIR | SSCR1_SFRMDIR);
++
++ /* set FIFO thresholds */
++ SSCR1_P(port) = SSCR1_RxTresh(14) | SSCR1_TxTresh(1);
++
++ /* normal: */
++ /* all bit fields must be cleared except: FSRT = 1 and
++ * SFRMWDTH = 16, DMYSTART=0,1) */
++ SSPSP_P(port) = SSPSP_FSRT | SSPSP_SFRMWDTH(16) | SSPSP_DMYSTRT(0);
++ return 0;
++ }
++
++ SSCR0_P(port) |= SSCR0_PSP;
++ SSCR1_P(port) = SSCR1_RxTresh(14) | SSCR1_TxTresh(1) |
++ SSCR1_TRAIL | SSCR1_RWOT;
++
++ switch(fmt & SND_SOC_DAIFMT_MASTER_MASK) {
++ case SND_SOC_DAIFMT_CBM_CFM:
++ SSCR1_P(port) |= (SSCR1_SCLKDIR | SSCR1_SFRMDIR);
++ break;
++ case SND_SOC_DAIFMT_CBM_CFS:
++ SSCR1_P(port) |= SSCR1_SCLKDIR;
++ break;
++ case SND_SOC_DAIFMT_CBS_CFM:
++ SSCR1_P(port) |= SSCR1_SFRMDIR;
++ break;
++ case SND_SOC_DAIFMT_CBS_CFS:
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
++ case SND_SOC_DAIFMT_NB_NF:
++ SSPSP_P(port) |= SSPSP_SFRMP | SSPSP_FSRT;
++ break;
++ case SND_SOC_DAIFMT_IB_IF:
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
++ case SND_SOC_DAIFMT_DSP_A:
++ SSPSP_P(port) |= SSPSP_DMYSTRT(1);
++ case SND_SOC_DAIFMT_DSP_B:
++ SSPSP_P(port) |= SSPSP_SCMODE(2);
++ break;
++ case SND_SOC_DAIFMT_I2S:
++ case SND_SOC_DAIFMT_MSB:
++ /* handled above */
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++/*
++ * Set the SSP audio DMA parameters and sample size.
++ * Can be called multiple times by oss emulation.
++ */
++static int pxa2xx_ssp_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++ int dma = 0, chn = params_channels(params);
++ int port = cpu_dai->id + 1;
++
++ /* select correct DMA params */
++ if (substream->stream != SNDRV_PCM_STREAM_PLAYBACK)
++ dma = 1; /* capture DMA offset is 1,3 */
++ if (chn == 2)
++ dma += 2; /* stereo DMA offset is 2, mono is 0 */
++ cpu_dai->dma_data = ssp_dma_params[cpu_dai->id][dma];
++
++ /* we can only change the settings if the port is not in use */
++ if (SSCR0_P(port) & SSCR0_SSE)
++ return 0;
++
++ /* clear selected SSP bits */
++ SSCR0_P(port) &= ~(SSCR0_DSS | SSCR0_EDSS);
++
++ /* bit size */
++ switch(params_format(params)) {
++ case SNDRV_PCM_FORMAT_S16_LE:
++ SSCR0_P(port) |= SSCR0_DataSize(16);
++ break;
++ case SNDRV_PCM_FORMAT_S24_LE:
++ SSCR0_P(port) |=(SSCR0_EDSS | SSCR0_DataSize(8));
++ /* we must be in network mode (2 slots) for 24 bit stereo */
++ break;
++ case SNDRV_PCM_FORMAT_S32_LE:
++ SSCR0_P(port) |= (SSCR0_EDSS | SSCR0_DataSize(16));
++ /* we must be in network mode (2 slots) for 32 bit stereo */
++ break;
++ }
++
++#if PXA_SSP_DEBUG
++ printk("SSCR0 %x SSCR1 %x SSTO %x SSPSP %x SSSR %x SSACD %x\n",
++ SSCR0_P(port), SSCR1_P(port),
++ SSTO_P(port), SSPSP_P(port),
++ SSSR_P(port), SSACD_P(port));
++#endif
++ return 0;
++}
++
++static int pxa2xx_ssp_trigger(struct snd_pcm_substream *substream, int cmd)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++ int ret = 0;
++ int port = cpu_dai->id + 1;
++
++ switch (cmd) {
++ case SNDRV_PCM_TRIGGER_RESUME:
++ ssp_enable(&ssp[cpu_dai->id]);
++ break;
++ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ SSCR1_P(port) |= SSCR1_TSRE;
++ else
++ SSCR1_P(port) |= SSCR1_RSRE;
++ SSSR_P(port) |= SSSR_P(port);
++ break;
++ case SNDRV_PCM_TRIGGER_START:
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ SSCR1_P(port) |= SSCR1_TSRE;
++ else
++ SSCR1_P(port) |= SSCR1_RSRE;
++ ssp_enable(&ssp[cpu_dai->id]);
++ break;
++ case SNDRV_PCM_TRIGGER_STOP:
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ SSCR1_P(port) &= ~SSCR1_TSRE;
++ else
++ SSCR1_P(port) &= ~SSCR1_RSRE;
++ break;
++ case SNDRV_PCM_TRIGGER_SUSPEND:
++ ssp_disable(&ssp[cpu_dai->id]);
++ break;
++ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ SSCR1_P(port) &= ~SSCR1_TSRE;
++ else
++ SSCR1_P(port) &= ~SSCR1_RSRE;
++ break;
++
++ default:
++ ret = -EINVAL;
++ }
++#if PXA_SSP_DEBUG
++ printk("trig cmd %d\n", cmd);
++ printk("SSCR0 %x SSCR1 %x SSTO %x SSPSP %x SSSR %x\n",
++ SSCR0_P(port), SSCR1_P(port),
++ SSTO_P(port), SSPSP_P(port),
++ SSSR_P(port));
++#endif
++ return ret;
++}
++
++#define PXA2XX_SSP_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
++ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \
++ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
++
++#define PXA2XX_SSP_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
++ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
++
++struct snd_soc_cpu_dai pxa_ssp_dai[] = {
++ { .name = "pxa2xx-ssp1",
++ .id = 0,
++ .type = SND_SOC_DAI_PCM,
++ .suspend = pxa2xx_ssp_suspend,
++ .resume = pxa2xx_ssp_resume,
++ .playback = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .capture = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .ops = {
++ .startup = pxa2xx_ssp_startup,
++ .shutdown = pxa2xx_ssp_shutdown,
++ .trigger = pxa2xx_ssp_trigger,
++ .hw_params = pxa2xx_ssp_hw_params,},
++ .dai_ops = {
++ .set_sysclk = pxa2xx_ssp_set_dai_sysclk,
++ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv,
++ .set_pll = pxa2xx_ssp_set_dai_pll,
++ .set_fmt = pxa2xx_ssp_set_dai_fmt,
++ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot,
++ .set_tristate = pxa2xx_ssp_set_dai_tristate,
++ },
++ },
++ { .name = "pxa2xx-ssp2",
++ .id = 1,
++ .type = SND_SOC_DAI_PCM,
++ .suspend = pxa2xx_ssp_suspend,
++ .resume = pxa2xx_ssp_resume,
++ .playback = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .capture = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .ops = {
++ .startup = pxa2xx_ssp_startup,
++ .shutdown = pxa2xx_ssp_shutdown,
++ .trigger = pxa2xx_ssp_trigger,
++ .hw_params = pxa2xx_ssp_hw_params,},
++ .dai_ops = {
++ .set_sysclk = pxa2xx_ssp_set_dai_sysclk,
++ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv,
++ .set_pll = pxa2xx_ssp_set_dai_pll,
++ .set_fmt = pxa2xx_ssp_set_dai_fmt,
++ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot,
++ .set_tristate = pxa2xx_ssp_set_dai_tristate,
++ },
++ },
++ { .name = "pxa2xx-ssp3",
++ .id = 2,
++ .type = SND_SOC_DAI_PCM,
++ .suspend = pxa2xx_ssp_suspend,
++ .resume = pxa2xx_ssp_resume,
++ .playback = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .capture = {
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = PXA2XX_SSP_RATES,
++ .formats = PXA2XX_SSP_FORMATS,},
++ .ops = {
++ .startup = pxa2xx_ssp_startup,
++ .shutdown = pxa2xx_ssp_shutdown,
++ .trigger = pxa2xx_ssp_trigger,
++ .hw_params = pxa2xx_ssp_hw_params,},
++ .dai_ops = {
++ .set_sysclk = pxa2xx_ssp_set_dai_sysclk,
++ .set_clkdiv = pxa2xx_ssp_set_dai_clkdiv,
++ .set_pll = pxa2xx_ssp_set_dai_pll,
++ .set_fmt = pxa2xx_ssp_set_dai_fmt,
++ .set_tdm_slot = pxa2xx_ssp_set_dai_tdm_slot,
++ .set_tristate = pxa2xx_ssp_set_dai_tristate,
++ },
++ },
++};
++EXPORT_SYMBOL_GPL(pxa_ssp_dai);
++
++/* Module information */
++MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
++MODULE_DESCRIPTION("pxa2xx SSP/PCM SoC Interface");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/sound/soc/pxa/pxa2xx-ssp.h 2007-10-22 22:27:11.000000000 +0200
+@@ -0,0 +1,42 @@
++/*
++ * linux/sound/arm/pxa2xx-ssp.h
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#ifndef _PXA2XX_SSP_H
++#define _PXA2XX_SSP_H
++
++/* pxa2xx DAI SSP ID's */
++#define PXA2XX_DAI_SSP1 0
++#define PXA2XX_DAI_SSP2 1
++#define PXA2XX_DAI_SSP3 2
++
++/* SSP clock sources */
++#define PXA2XX_SSP_CLK_PLL 0
++#define PXA2XX_SSP_CLK_EXT 1
++#define PXA2XX_SSP_CLK_NET 2
++#define PXA2XX_SSP_CLK_AUDIO 3
++
++/* SSP audio dividers */
++#define PXA2XX_SSP_AUDIO_DIV_ACDS 0
++#define PXA2XX_SSP_AUDIO_DIV_SCDB 1
++#define PXA2XX_SSP_DIV_SCR 2
++
++/* SSP ACDS audio dividers values */
++#define PXA2XX_SSP_CLK_AUDIO_DIV_1 0
++#define PXA2XX_SSP_CLK_AUDIO_DIV_2 1
++#define PXA2XX_SSP_CLK_AUDIO_DIV_4 2
++#define PXA2XX_SSP_CLK_AUDIO_DIV_8 3
++#define PXA2XX_SSP_CLK_AUDIO_DIV_16 4
++#define PXA2XX_SSP_CLK_AUDIO_DIV_32 5
++
++/* SSP divider bypass */
++#define PXA2XX_SSP_CLK_SCDB_4 0
++#define PXA2XX_SSP_CLK_SCDB_1 1
++
++extern struct snd_soc_cpu_dai pxa_ssp_dai[3];
++
++#endif
+Index: linux-2.6.23/sound/soc/pxa/Kconfig
+===================================================================
+--- linux-2.6.23.orig/sound/soc/pxa/Kconfig 2007-10-10 09:38:42.000000000 +0200
++++ linux-2.6.23/sound/soc/pxa/Kconfig 2007-10-22 22:27:11.000000000 +0200
+@@ -18,6 +18,10 @@
+ config SND_PXA2XX_SOC_I2S
+ tristate
+
++config SND_PXA2XX_SOC_SSP
++ tristate
++ select PXA_SSP
++
+ config SND_PXA2XX_SOC_CORGI
+ tristate "SoC Audio support for Sharp Zaurus SL-C7x0"
+ depends on SND_PXA2XX_SOC && PXA_SHARP_C7xx
+Index: linux-2.6.23/sound/soc/pxa/Makefile
+===================================================================
+--- linux-2.6.23.orig/sound/soc/pxa/Makefile 2007-10-10 09:38:42.000000000 +0200
++++ linux-2.6.23/sound/soc/pxa/Makefile 2007-10-22 22:27:11.000000000 +0200
+@@ -2,10 +2,12 @@
+ snd-soc-pxa2xx-objs := pxa2xx-pcm.o
+ snd-soc-pxa2xx-ac97-objs := pxa2xx-ac97.o
+ snd-soc-pxa2xx-i2s-objs := pxa2xx-i2s.o
++snd-soc-pxa2xx-ssp-objs := pxa2xx-ssp.o
+
+ obj-$(CONFIG_SND_PXA2XX_SOC) += snd-soc-pxa2xx.o
+ obj-$(CONFIG_SND_PXA2XX_SOC_AC97) += snd-soc-pxa2xx-ac97.o
+ obj-$(CONFIG_SND_PXA2XX_SOC_I2S) += snd-soc-pxa2xx-i2s.o
++obj-$(CONFIG_SND_PXA2XX_SOC_SSP) += snd-soc-pxa2xx-ssp.o
+
+ # PXA Machine Support
+ snd-soc-corgi-objs := corgi.o
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/binutils-buildid-arm.patch b/packages/linux/linux-ezx-2.6.24/patches/binutils-buildid-arm.patch
index 68e35e89e1..68e35e89e1 100644
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/binutils-buildid-arm.patch
+++ b/packages/linux/linux-ezx-2.6.24/patches/binutils-buildid-arm.patch
diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-a1200 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-a1200
new file mode 100644
index 0000000000..b77950a96e
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/defconfig-a1200
@@ -0,0 +1,1205 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24
+# Sun Jan 27 16:09:08 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+# CONFIG_PXA_EZX_A780 is not set
+# CONFIG_PXA_EZX_E2 is not set
+CONFIG_PXA_EZX_A1200=y
+# CONFIG_PXA_EZX_E6 is not set
+# CONFIG_EZX_BP is not set
+CONFIG_EZX_PCAP=y
+CONFIG_EZX_EOC=y
+# CONFIG_EZX_EMU is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+# CONFIG_SUSPEND is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PXA2XX is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+CONFIG_MTD_EZX=y
+# CONFIG_MTD_EZX_A780 is not set
+# CONFIG_MTD_EZX_A780_ALTERNATE is not set
+CONFIG_MTD_EZX_A1200=y
+# CONFIG_MTD_EZX_E2 is not set
+# CONFIG_MTD_EZX_E6 is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=y
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+# CONFIG_BACKLIGHT_EZX is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=y
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_SSP=y
+CONFIG_SND_PXA2XX_SOC_EZX=y
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_PCAP2=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SPI is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+# CONFIG_INSTRUMENTATION is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-a780 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-a780
new file mode 100644
index 0000000000..b10c2e908d
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/defconfig-a780
@@ -0,0 +1,1502 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24
+# Sun Jan 27 15:19:17 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+CONFIG_PXA_EZX_A780=y
+# CONFIG_PXA_EZX_E2 is not set
+# CONFIG_PXA_EZX_A1200 is not set
+# CONFIG_PXA_EZX_E6 is not set
+CONFIG_EZX_BP=y
+CONFIG_EZX_PCAP=y
+# CONFIG_EZX_EOC is not set
+CONFIG_EZX_EMU=y
+CONFIG_EZX_EMU_USB=y
+# CONFIG_EZX_EMU_UART is not set
+# CONFIG_EZX_EMU_NOTHING is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+# CONFIG_NO_HZ is not set
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty1 root=/dev/mmcblk0p2 rootfstype=ext2 rootdelay=1 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_FPE_NWFPE is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+# CONFIG_SUSPEND is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_IPV6_MIP6=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_FIB_RULES=y
+
+#
+# Wireless
+#
+CONFIG_CFG80211=m
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+CONFIG_MAC80211_RCSIMPLE=y
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PXA2XX is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+CONFIG_MTD_EZX=y
+CONFIG_MTD_EZX_A780=y
+# CONFIG_MTD_EZX_A780_ALTERNATE is not set
+# CONFIG_MTD_EZX_A1200 is not set
+# CONFIG_MTD_EZX_E2 is not set
+# CONFIG_MTD_EZX_E6 is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=y
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_TS0710_MUX=y
+CONFIG_TS0710_MUX_USB=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+# CONFIG_V4L_USB_DRIVERS is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_USB_DSBR is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_EZX=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=y
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_SSP=y
+CONFIG_SND_PXA2XX_SOC_EZX=y
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_PCAP2=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SPI is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_A780=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=m
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+# CONFIG_ROOT_NFS is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+# CONFIG_INSTRUMENTATION is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_ABLKCIPHER=m
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+# CONFIG_CRYPTO_WP512 is not set
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_XTS=m
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e2 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e2
new file mode 100644
index 0000000000..8f870b8ff5
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e2
@@ -0,0 +1,1188 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24
+# Sun Jan 27 16:13:35 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+# CONFIG_PXA_EZX_A780 is not set
+# CONFIG_PXA_EZX_E2 is not set
+CONFIG_PXA_EZX_A1200=y
+# CONFIG_PXA_EZX_E6 is not set
+# CONFIG_EZX_BP is not set
+CONFIG_EZX_PCAP=y
+CONFIG_EZX_EOC=y
+# CONFIG_EZX_EMU is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+# CONFIG_SUSPEND is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PXA2XX is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_EZX is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=y
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+# CONFIG_BACKLIGHT_EZX is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=y
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_SSP=y
+CONFIG_SND_PXA2XX_SOC_EZX=y
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_PCAP2=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SPI is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+# CONFIG_INSTRUMENTATION is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e6 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e6
new file mode 100644
index 0000000000..7e89e529d9
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e6
@@ -0,0 +1,1200 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24
+# Sun Jan 27 16:14:27 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+# CONFIG_PXA_EZX_A780 is not set
+# CONFIG_PXA_EZX_E2 is not set
+# CONFIG_PXA_EZX_A1200 is not set
+CONFIG_PXA_EZX_E6=y
+# CONFIG_EZX_BP is not set
+CONFIG_EZX_PCAP=y
+CONFIG_EZX_EOC=y
+# CONFIG_EZX_EMU is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+# CONFIG_SUSPEND is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PXA2XX is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_EZX is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=y
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+# CONFIG_BACKLIGHT_EZX is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=y
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_SSP=y
+CONFIG_SND_PXA2XX_SOC_EZX=y
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_PCAP2=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SPI is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+# CONFIG_INSTRUMENTATION is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/patches/defconfig-e680 b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e680
new file mode 100644
index 0000000000..cb31751393
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/defconfig-e680
@@ -0,0 +1,1211 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24
+# Sun Jan 27 16:15:42 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+CONFIG_PXA_EZX=y
+CONFIG_PXA_EZX_E680=y
+# CONFIG_PXA_EZX_A780 is not set
+# CONFIG_PXA_EZX_E2 is not set
+# CONFIG_PXA_EZX_A1200 is not set
+# CONFIG_PXA_EZX_E6 is not set
+CONFIG_EZX_BP=y
+CONFIG_EZX_PCAP=y
+# CONFIG_EZX_EOC is not set
+CONFIG_EZX_EMU=y
+CONFIG_EZX_EMU_USB=y
+# CONFIG_EZX_EMU_UART is not set
+# CONFIG_EZX_EMU_NOTHING is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000 mem=16M@0xAC000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+# CONFIG_SUSPEND is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PXA2XX is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+CONFIG_MTD_EZX=y
+CONFIG_MTD_EZX_A780=y
+# CONFIG_MTD_EZX_A780_ALTERNATE is not set
+# CONFIG_MTD_EZX_A1200 is not set
+# CONFIG_MTD_EZX_E2 is not set
+# CONFIG_MTD_EZX_E6 is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=y
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_TS0710_MUX=y
+CONFIG_TS0710_MUX_USB=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_EZX=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=y
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_SSP=y
+CONFIG_SND_PXA2XX_SOC_EZX=y
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_PCAP2=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SPI is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_E680=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+# CONFIG_INSTRUMENTATION is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log b/packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log
new file mode 100644
index 0000000000..6b15077676
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/dmesg-a780.log
@@ -0,0 +1,299 @@
+<5>Linux version 2.6.21-ezxdev (wyrm@vault) (gcc version 4.1.1) #222 PREEMPT Tue May 8 15:19:34 BRT 2007
+<4>CPU: XScale-PXA270 [69054117] revision 7 (ARMv5TE), cr=0000397f
+<4>Machine: Motorola Ezx Platform
+<4>Memory policy: ECC disabled, Data cache writeback
+<7>On node 0 totalpages: 12288
+<7> DMA zone: 416 pages used for memmap
+<7> DMA zone: 0 pages reserved
+<7> DMA zone: 11872 pages, LIFO batch:1
+<7> Normal zone: 0 pages used for memmap
+<6>Run Mode clock: 195.00MHz (*15)
+<6>Turbo Mode clock: 292.50MHz (*1.5, active)
+<6>Memory clock: 195.00MHz (/2)
+<6>System bus clock: 195.00MHz
+<4>CPU0: D VIVT undefined 5 cache
+<4>CPU0: I cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
+<4>CPU0: D cache: 32768 bytes, associativity 32, 32 byte lines, 32 sets
+<4>Built 1 zonelists. Total pages: 11872
+<5>Kernel command line: console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext3 ip=169.254.1.11:169.254.1.10:169.254.1.10:255.255.255.254:ezx:usb0:off debug mem=32M@0xA0000000 mem=16M@0xAC000000
+<4>PID hash table entries: 256 (order: 8, 1024 bytes)
+<4>Console: colour dummy device 80x30
+<4>Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
+<4>Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
+<6>Memory: 32MB 16MB = 48MB total
+<5>Memory: 46084KB available (2264K code, 217K data, 84K init)
+<7>Calibrating delay loop... 291.63 BogoMIPS (lpj=1458176)
+<4>Mount-cache hash table entries: 512
+<6>CPU: Testing write buffer coherency: ok
+<6>NET: Registered protocol family 16
+<6>usbcore: registered new interface driver usbfs
+<6>usbcore: registered new interface driver hub
+<6>usbcore: registered new device driver usb
+<6>Time: pxa_timer clocksource has been installed.
+<6>NET: Registered protocol family 2
+<4>IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
+<4>TCP established hash table entries: 2048 (order: 2, 16384 bytes)
+<4>TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
+<6>TCP: Hash tables configured (established 2048 bind 2048)
+<6>TCP reno registered
+<4>bp handshake entered!
+<4>ezx-bp: handshake step 2
+<4>BP rdy irq
+<4>bp handshake entered!
+<5>ezx-bp: handshake passed
+<4>ezx-pcap: ssp driver registered
+<6>io scheduler noop registered
+<6>io scheduler deadline registered (default)
+<4>pxa2xx-fb pxa2xx-fb: machine LCCR0 setting contains illegal bits: 00200878
+<4>pxa2xx-fb pxa2xx-fb: machine LCCR3 setting contains illegal bits: 00300008
+<4>Console: switching to colour frame buffer device 60x53
+<6>usbcore: registered new interface driver usb ipc
+<6>drivers/char/ts0710_mux_usb.c: USB Host(Bulverde) IPC driver registered.
+<6>drivers/char/ts0710_mux_usb.c: 1.0alpha1:USB IPC Driver (TS07.10 lowlevel)
+<6>pxa2xx-uart.0: ttyS0 at MMIO 0x40100000 (irq = 22) is a FFUART
+<6>pxa2xx-uart.1: ttyS1 at MMIO 0x40200000 (irq = 21) is a BTUART
+<6>pxa2xx-uart.2: ttyS2 at MMIO 0x40700000 (irq = 20) is a STUART
+<7>ohci_hcd: 2006 August 04 USB 1.1 'Open' Host Controller (OHCI) Driver
+<6>pxa27x-ohci pxa27x-ohci: PXA27x OHCI
+<6>pxa27x-ohci pxa27x-ohci: new USB bus registered, assigned bus number 1
+<6>pxa27x-ohci pxa27x-ohci: irq 3, io mem 0x4c000000
+<6>usb usb1: configuration #1 chosen from 1 choice
+<6>hub 1-0:1.0: USB hub found
+<6>hub 1-0:1.0: 3 ports detected
+<6>pxa27x_udc: version 08-Feb-2007
+<5>USB cmd disconnect
+<5>USB cmd disconnect
+<4>ether gadget: using random self ethernet address
+<4>ether gadget: using random host ethernet address
+<6>usb0: Ethernet Gadget, version: May Day 2005
+<6>usb0: using pxa27x_udc, OUT Bulk-out-2 IN Bulk-in-1
+<6>usb0: MAC 46:86:e0:79:e7:fb
+<5>USB cmd connect
+<5>USB cmd connect
+<6>input: gpio-keys as /class/input/input0
+<6>input: pxa-keyboard as /class/input/input1
+<6>input: pcap-touchscreen as /class/input/input2
+<6>sa1100-rtc sa1100-rtc: rtc core: registered sa1100-rtc as rtc0
+<6>Registered led device: a780:main
+<6>Registered led device: a780:aux
+<6>Registered led device: a780:vibrator
+<6>TCP cubic registered
+<6>NET: Registered protocol family 1
+<6>NET: Registered protocol family 17
+<6>XScale iWMMXt coprocessor detected.
+<6>sa1100-rtc sa1100-rtc: setting the system clock to 1970-01-01 00:00:16 (16)
+<6>mmcblk0: mmc0:bffc SU02G 1985024KiB
+<6>udc: USB reset
+<6> mmcblk0:<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 2
+<4> p1 p2 p3 < p5 p6 p7 >
+<6>udc: USB reset
+<3>usb 1-3: device descriptor read/64, error -62
+<6>usb0: full speed config #1: 100 mA, Ethernet Gadget, using CDC Ethernet Subset
+<3>usb 1-3: device descriptor read/64, error -62
+<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 3
+<3>usb 1-3: device descriptor read/64, error -62
+<4>IP-Config: Complete:
+<4> device=usb0, addr=169.254.1.11, mask=255.255.255.254, gw=169.254.1.10,
+<4> host=ezx, domain=, nis-domain=(none),
+<4> bootserver=169.254.1.10, rootserver=169.254.1.10, rootpath=
+<6>kjournald starting. Commit interval 5 seconds
+<4>EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
+<6>EXT3 FS on mmcblk0p2, internal journal
+<6>EXT3-fs: recovery complete.
+<6>EXT3-fs: mounted filesystem with ordered data mode.
+<4>VFS: Mounted root (ext3 filesystem).
+<6>Freeing init memory: 84K
+<3>usb 1-3: device descriptor read/64, error -110
+<6>usb 1-3: new full speed USB device using pxa27x-ohci and address 4
+<3>usb 1-3: device descriptor read/8, error -62
+<4>usb 1-3: config 1 has an invalid interface number: 13 but max is 2
+<4>usb 1-3: config 1 has an invalid interface number: 6 but max is 2
+<4>usb 1-3: config 1 has an invalid interface number: 7 but max is 2
+<4>usb 1-3: config 1 has no interface number 0
+<4>usb 1-3: config 1 has no interface number 1
+<4>usb 1-3: config 1 has no interface number 2
+<6>usb 1-3: configuration #1 chosen from 1 choice
+<4>usb_ipc_probe: completed probe!
+<6>drivers/char/ts0710_mux_usb.c: usb_ipc_probe: Only two endpoints supported.
+<4>usb ipc: probe of 1-3:1.6 failed with error -1
+<6>drivers/char/ts0710_mux_usb.c: usb_ipc_probe: Only two endpoints supported.
+<4>usb ipc: probe of 1-3:1.7 failed with error -1
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2009 bytes from ts0710_mux_usb inbuf.
+<4>Read 21 bytes.
+<4>Reading max 1988 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2009 bytes from ts0710_mux_usb inbuf.
+<4>Read 21 bytes.
+<4>Reading max 1988 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2009 bytes from ts0710_mux_usb inbuf.
+<4>Read 21 bytes.
+<4>Reading max 1988 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2009 bytes from ts0710_mux_usb inbuf.
+<4>Read 21 bytes.
+<4>Reading max 1988 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2009 bytes from ts0710_mux_usb inbuf.
+<4>Read 21 bytes.
+<4>Reading max 1988 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 11 bytes.
+<4>Reading max 2037 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 17 bytes.
+<4>Reading max 2031 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 11 bytes.
+<4>Reading max 2037 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 7 bytes.
+<4>Reading max 2041 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 11 bytes.
+<4>Reading max 2037 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2016 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1984 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1952 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1920 bytes from ts0710_mux_usb inbuf.
+<4>Read 6 bytes.
+<4>Reading max 1914 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1882 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1850 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1818 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1786 bytes from ts0710_mux_usb inbuf.
+<4>Read 6 bytes.
+<4>Reading max 1780 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1748 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1716 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1684 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1652 bytes from ts0710_mux_usb inbuf.
+<4>Read 6 bytes.
+<4>Reading max 1646 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2016 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1984 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1952 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1920 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1888 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1856 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1824 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1792 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1760 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1728 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1696 bytes from ts0710_mux_usb inbuf.
+<4>Read 16 bytes.
+<4>Reading max 1680 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2016 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1984 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1952 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1920 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1888 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1856 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1824 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1792 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1760 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1728 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 1696 bytes from ts0710_mux_usb inbuf.
+<4>Read 13 bytes.
+<4>Reading max 1683 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 14 bytes.
+<4>Reading max 2034 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>Read 32 bytes.
+<4>Reading max 2016 bytes from ts0710_mux_usb inbuf.
+<4>Read 2 bytes.
+<4>Reading max 2014 bytes from ts0710_mux_usb inbuf.
+<4>Reading max 2048 bytes from ts0710_mux_usb inbuf.
+<4>nonzero read bulk status received: -104
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e6-eoc.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-eoc.patch
new file mode 100644
index 0000000000..80849bd261
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/e6-eoc.patch
@@ -0,0 +1,20 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:15.000000000 -0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:27.000000000 -0200
+@@ -186,8 +186,15 @@
+ },
+ };
+
++
++struct platform_device e6_eoc_device = {
++ .name = "ezx-eoc",
++ .id = -1,
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &e6_pcap_device,
++ &e6_eoc_device,
+ };
+
+ static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch
new file mode 100644
index 0000000000..62046802d8
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/e6-mci.patch
@@ -0,0 +1,124 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
+@@ -13,6 +13,8 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+ #include <linux/fb.h>
++#include <linux/mmc/host.h>
++#include <linux/irq.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -20,12 +22,102 @@
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/ezx.h>
+ #include <asm/arch/ezx-pcap.h>
++#include <asm/arch/mmc.h>
+
+ #include "generic.h"
+
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
+
++#ifdef CONFIG_EZX_PCAP
++extern int ezx_pcap_mmcsd_power(int);
++extern void ezx_pcap_mmcsd_voltage(u_int32_t);
++#else
++#define ezx_pcap_mmcsd_voltage(x) {}
++#define ezx_pcap_mmcsd_power(x) {}
++#endif
++
++static struct pxamci_platform_data e6_mci_platform_data;
++
++static u_int8_t mmc_voltage[] = {
++ [ilog2(MMC_VDD_165_195)] = 6,
++ [ilog2(MMC_VDD_20_21)] = 7,
++ [ilog2(MMC_VDD_21_22)] = 8,
++ [ilog2(MMC_VDD_22_23)] = 8,
++ [ilog2(MMC_VDD_23_24)] = 9,
++ [ilog2(MMC_VDD_24_25)] = 9,
++ [ilog2(MMC_VDD_25_26)] = 10,
++ [ilog2(MMC_VDD_26_27)] = 10,
++ [ilog2(MMC_VDD_27_28)] = 11,
++ [ilog2(MMC_VDD_28_29)] = 11,
++ [ilog2(MMC_VDD_29_30)] = 12,
++ [ilog2(MMC_VDD_30_31)] = 12,
++ [ilog2(MMC_VDD_31_32)] = 13,
++ [ilog2(MMC_VDD_32_33)] = 13,
++ [ilog2(MMC_VDD_33_34)] = 14,
++ [ilog2(MMC_VDD_34_35)] = 14,
++ [ilog2(MMC_VDD_35_36)] = 15,
++};
++
++static int e6_mci_init(struct device *dev,
++ irqreturn_t (*ezx_detect_int)(int, void *),
++ void *data)
++{
++ int err;
++
++ /* Setup GPIO for PXA27x MMC/SD controller */
++ pxa_gpio_mode(GPIO32_MMCCLK_MD);
++ pxa_gpio_mode(GPIO112_MMCCMD_MD);
++ pxa_gpio_mode(GPIO92_MMCDAT0_MD);
++ pxa_gpio_mode(GPIO109_MMCDAT1_MD);
++ pxa_gpio_mode(GPIO110_MMCDAT2_MD);
++ pxa_gpio_mode(GPIO111_MMCDAT3_MD);
++
++ ezx_pcap_mmcsd_power(1);
++
++ e6_mci_platform_data.detect_delay = msecs_to_jiffies(250);
++
++ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED,
++ "MMC card detect", data);
++ if (err) {
++ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request "
++ "MMC card detect IRQ\n");
++ return -1;
++ }
++
++ set_irq_type(0x0b, IRQT_BOTHEDGE);
++
++ return 0;
++}
++
++static void e6_mci_setpower(struct device *dev, unsigned int vdd)
++{
++ struct pxamci_platform_data* p_d = dev->platform_data;
++
++ if (( 1 << vdd) & p_d->ocr_mask)
++ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]);
++
++ ezx_pcap_mmcsd_power(1);
++}
++
++static void e6_mci_exit(struct device *dev, void *data)
++{
++ ezx_pcap_mmcsd_power(0);
++ free_irq(0x49, data);
++}
++
++static struct pxamci_platform_data e6_mci_platform_data = {
++ .ocr_mask = MMC_VDD_165_195|MMC_VDD_20_21|MMC_VDD_21_22
++ |MMC_VDD_22_23|MMC_VDD_23_24|MMC_VDD_24_25
++ |MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28
++ |MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31
++ |MMC_VDD_31_32|MMC_VDD_32_33|MMC_VDD_33_34
++ |MMC_VDD_34_35|MMC_VDD_35_36,
++ .init = e6_mci_init,
++ .setpower = e6_mci_setpower,
++ .exit = e6_mci_exit,
++};
++
+ static struct pxafb_mode_info mode_e6 = {
+ .pixclock = 192308,
+ .xres = 240,
+@@ -101,6 +193,7 @@
+ static void __init e6_init(void)
+ {
+ set_pxa_fb_info(&e6_fb_info);
++ pxa_set_mci_info(&e6_mci_platform_data);
+
+ platform_add_devices(devices, ARRAY_SIZE(devices));
+ }
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch
new file mode 100644
index 0000000000..656f5a33f3
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/e6-pcap.patch
@@ -0,0 +1,66 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
+@@ -19,6 +19,7 @@
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/ezx.h>
++#include <asm/arch/ezx-pcap.h>
+
+ #include "generic.h"
+
+@@ -48,7 +49,53 @@
+ .pxafb_lcd_power = &ezx_lcd_power,
+ };
+
++/* PCAP */
++static int e6_pcap_init(void)
++{
++ /* FIXME */
++ ezx_pcap_write(PCAP_REG_INT_SEL, 0x0); /* wrong */
++ ezx_pcap_write(PCAP_REG_SWCTRL, 0x2ee6); /* partially wrong */
++ ezx_pcap_write(PCAP_REG_VREG1, 0x15778e3); /* wrong */
++ ezx_pcap_write(PCAP_REG_VREG2, 0x810234); /* partially wrong */
++ ezx_pcap_write(PCAP_REG_AUXVREG, 0x1024bec); /* wrong */
++ ezx_pcap_write(PCAP_REG_PWR, 0x94108); /* partially wrong */
++ ezx_pcap_write(PCAP_REG_AUXVREG_MASK, 0x214d48); /* wrong */
++ ezx_pcap_write(PCAP_REG_BUSCTRL, 0x2a0); /* wrong */
++ ezx_pcap_write(PCAP_REG_LOWPWR, 0x1d9610c);
++ ezx_pcap_write(PCAP_REG_PERIPH, 0x0); /* wrong */
++ ezx_pcap_write(PCAP_REG_GP, 0x107); /* probably unnecessary */
++
++ return 0;
++}
++
++static struct pcap_platform_data e6_pcap_platform_data = {
++ .port = 1,
++ .cs = GPIO_SPI_CE,
++ .flags = PCAP_CS_AH | PCAP_MCI_SD,
++ .clk = 1,
++ .init = e6_pcap_init,
++};
++
++static struct resource e6_pcap_resources[] = {
++ [0] = {
++ .start = IRQ_GPIO1,
++ .end = IRQ_GPIO1,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++struct platform_device e6_pcap_device = {
++ .name = "ezx-pcap",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(e6_pcap_resources),
++ .resource = e6_pcap_resources,
++ .dev = {
++ .platform_data = &e6_pcap_platform_data,
++ },
++};
++
+ static struct platform_device *devices[] __initdata = {
++ &e6_pcap_device,
+ };
+
+ static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch
new file mode 100644
index 0000000000..f79f8663c7
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/e6-ts.patch
@@ -0,0 +1,39 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:27.000000000 -0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e6.c 2007-11-24 20:12:44.000000000 -0200
+@@ -192,9 +192,34 @@
+ .id = -1,
+ };
+
++/* PCAP_TS */
++struct resource pcap_ts_resources[] = {
++ [0] = {
++ .start = EZX_IRQ_ADCDONE,
++ .end = EZX_IRQ_ADCDONE,
++ .flags = IORESOURCE_IRQ,
++ },
++ [1] = {
++ .start = EZX_IRQ_TS,
++ .end = EZX_IRQ_TS,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++struct platform_device pcap_ts_device = {
++ .name = "pcap-ts",
++ .id = -1,
++ .dev = {
++ .parent = &e6_pcap_device.dev,
++ },
++ .num_resources = ARRAY_SIZE(pcap_ts_resources),
++ .resource = pcap_ts_resources,
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &e6_pcap_device,
+ &e6_eoc_device,
++ &pcap_ts_device,
+ };
+
+ static void __init e6_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch
new file mode 100644
index 0000000000..6302bba8c7
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/e680-emu.patch
@@ -0,0 +1,38 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:32.000000000 +0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:37.000000000 +0200
+@@ -212,8 +212,33 @@
+ },
+ };
+
++/* EMU */
++static struct resource e680_emu_resources[] = {
++ [0] = {
++ .start = EZX_IRQ_USB4V,
++ .end = EZX_IRQ_USB4V,
++ .flags = IORESOURCE_IRQ,
++ },
++ [1] = {
++ .start = EZX_IRQ_USB1V,
++ .end = EZX_IRQ_USB1V,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++struct platform_device e680_emu_device = {
++ .name = "ezx-emu",
++ .id = -1,
++ .dev = {
++ .parent = &e680_pcap_device.dev,
++ },
++ .num_resources = ARRAY_SIZE(e680_emu_resources),
++ .resource = e680_emu_resources,
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &e680_pcap_device,
++ &e680_emu_device,
+ };
+
+ static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch
new file mode 100644
index 0000000000..c313ec1452
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/e680-kbd.patch
@@ -0,0 +1,93 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
+@@ -15,6 +15,7 @@
+ #include <linux/fb.h>
+ #include <linux/mmc/host.h>
+ #include <linux/irq.h>
++#include <linux/input.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -23,11 +24,13 @@
+ #include <asm/arch/ezx.h>
+ #include <asm/arch/ezx-pcap.h>
+ #include <asm/arch/mmc.h>
++#include <asm/arch/kbd.h>
+
+ #include "generic.h"
+
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
++extern void __init pxa_set_kbd_info(struct pxakbd_platform_data *);
+
+ #ifdef CONFIG_EZX_PCAP
+ extern int ezx_pcap_mmcsd_power(int);
+@@ -236,6 +239,58 @@
+ .resource = e680_emu_resources,
+ };
+
++static unsigned char e680_keycode[] = {
++ /* row 0 */
++ KEY_UP, KEY_RIGHT, KEY_RESERVED, KEY_PHONE,
++ /* row 1 */
++ KEY_DOWN, KEY_LEFT, KEY_VOLUMEUP, KEY_VOLUMEDOWN,
++ /* row 2 */
++ KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_KPENTER,
++};
++
++static unsigned char e680_direct_keycode[] = {
++ KEY_CAMERA,
++ KEY_RESERVED,
++ KEY_RESERVED,
++ KEY_HOME,
++ KEY_POWER,
++ KEY_MENU,
++};
++
++static int e680_kbd_init(void)
++{
++ pxa_gpio_mode(93 | GPIO_ALT_FN_1_IN); /* KP_DKIN<0>, VR Key */
++ pxa_gpio_mode(96 | GPIO_ALT_FN_1_IN); /* KP_DKIN<3>, GAME_A */
++ pxa_gpio_mode(97 | GPIO_ALT_FN_1_IN); /* KP_DKIN<4>, power key */
++ pxa_gpio_mode(98 | GPIO_ALT_FN_1_IN); /* KP_DKIN<5>, GAME_B */
++ pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN); /* KP_MKIN<0> */
++ pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN); /* KP_MKIN<1> */
++ pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN); /* KP_MKIN<2> */
++ pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<0> */
++ pxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<1> */
++ pxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<2> */
++ pxa_gpio_mode(106 | GPIO_ALT_FN_2_OUT); /* KP_MKOUT<3> */
++ pxa_gpio_mode(GPIO_TC_MM_EN);
++ GPDR(GPIO_TC_MM_EN) |= GPIO_bit(GPIO_TC_MM_EN);
++ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
++ PGSR3 |= GPIO_bit(GPIO_TC_MM_EN);
++ return 0;
++}
++
++static struct pxakbd_platform_data e680_kbd_platform_data = {
++ .init = &e680_kbd_init,
++ .scan_interval = HZ/40,
++ .matrix = {
++ .keycode = e680_keycode,
++ .cols = 4,
++ .rows = 3,
++ },
++ .direct = {
++ .keycode = e680_direct_keycode,
++ .num = 6,
++ },
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &e680_pcap_device,
+ &e680_emu_device,
+@@ -256,6 +311,7 @@
+
+ set_pxa_fb_info(&e680_fb_info);
+ pxa_set_mci_info(&e680_mci_platform_data);
++ pxa_set_kbd_info(&e680_kbd_platform_data);
+
+ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
+ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch
new file mode 100644
index 0000000000..9de1f0fa8f
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch
@@ -0,0 +1,300 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+Index: linux-2.6.24/drivers/leds/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/leds/Kconfig
++++ linux-2.6.24/drivers/leds/Kconfig
+@@ -130,6 +130,13 @@
+ This option enables support for the LEDs on the
+ Motorola A780 GSM Phone.
+
++config LEDS_E680
++ tristate "LED Support for the Motorola E680(i) GSM Phone"
++ depends on LEDS_CLASS && PXA_EZX_E680
++ help
++ This options enables support for the LEDs on the
++ Motorola E680(i) GSM Phone.
++
+ config LEDS_TRIGGER_TIMER
+ tristate "LED Timer Trigger"
+ depends on LEDS_TRIGGERS
+Index: linux-2.6.24/drivers/leds/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/leds/Makefile
++++ linux-2.6.24/drivers/leds/Makefile
+@@ -20,6 +20,7 @@
+ obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o
+ obj-$(CONFIG_LEDS_CM_X270) += leds-cm-x270.o
+ obj-$(CONFIG_LEDS_A780) += leds-a780.o
++obj-$(CONFIG_LEDS_E680) += leds-e680.o
+
+ # LED Triggers
+ obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
+Index: linux-2.6.24/drivers/leds/leds-e680.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/leds/leds-e680.c
+@@ -0,0 +1,235 @@
++/*
++ * EZX Platform LED Driver for the Motorola E680(i) GSM Phone
++ *
++ * Copyright 2006 Vanille-Media
++ *
++ * Author: Michael Lauer <mickey@Vanille.de>
++ *
++ * Based on the Motorola 2.4 leds-e680.c and leds-corgi.c by Richard Purdie
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/delay.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx-pcap.h>
++
++//FIXME move defines to a common header file
++#define IND_CNTL_R_BUL 46
++#define IND_CNTL_G_BUL 47
++#define SSP_PCAP_LED_MASK 0x000fffe0
++#define SSP_PCAP_LED_SHIFT 5
++#define GPIO_TC_MM_EN 99
++
++extern int ezx_pcap_read(u_int8_t, u_int32_t *);
++extern int ezx_pcap_write(u_int8_t, u_int32_t);
++
++typedef struct {
++ u_int8_t ind_GPIO_red; /*Indicator Red control GPIO 46: 0 active, 1 inactive */
++ u_int8_t ind_GPIO_green; /*Indicator Green control GPIO 47: 0 inactive, 1 active */
++ u_int8_t pcap_LEDR_en; /*pcap LEDR_EN bit value: 1 =Red LED(&Green) sink circuit enabled*/
++ u_int8_t pcap_LEDG_en; /*pcap LEDG_EN bit value:1 =Green(->Blue)LED sink circuit enabled*/
++ u_int8_t pcap_LEDR_CTRL; /* 4bits Sets the timing for the red(&Green) LED sink circuit*/
++ u_int8_t pcap_LEDG_CTRL; /* 4bits Sets the timing for the GREEN (->Blue) LED sink circuit*/
++ u_int8_t pcap_LEDR_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDR*/
++ u_int8_t pcap_LEDG_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDG*/
++// u_int8_t pcap_SKIP_on; /*1=The ON timing sequence defined by LEDx_CTRL is executed on every other cycle*/
++} PCAP2_LED_REGISTER_VALUE;
++
++const PCAP2_LED_REGISTER_VALUE led_register_value[]=
++{
++ {0x1,0x0, 0x0,0x0, 0x0,0x0, 0x1,0x0}, /* 0 OFF */
++
++ {0x0,0x0, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 1 RED */
++ {0x1,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 2 GREEN */
++ {0x0,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 3 ORANGE */
++ {0x1,0x0, 0x0,0x1, 0x0,0xf, 0x0,0x0}, /* 4 BLUE */
++ {0x0,0x0, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 5 MAGENTA */
++ {0x1,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 6 CYAN */
++ {0x0,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 7 WHITE */
++};
++
++static void e680led_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ unsigned int tempValue;
++ unsigned char gpio_red, gpio_green, ledr_en, ledg_en, ledr_ctrl,
++ ledg_ctrl, ledr_i, ledg_i, skip, t, color;
++ unsigned char t_mask[2] = { 0xc, 0xc };
++
++ skip = 0;
++ if (value & 128) {
++ value &= (~128);
++ skip = 1;
++ }
++
++ /* 7 colors - simple on */
++ if (value <= 7)
++ color = value;
++ /* 4 colors - 11 timed on */
++ else if (value <= 51) {
++ value -= 7;
++ color = ((value-1)%4)+1;
++ t = ((value-1)/4)+1;
++ t_mask[0] = t;
++ t_mask[1] = t;
++ }
++ /* 3 colors - 22 change color */
++ else if (value <= 84) {
++ value -= 51;
++ color = ((value-1)%3)+5;
++ t = ((value-1)/3)+1;
++ t_mask[1] = t;
++ }
++ else if (value <= 117) {
++ value -= 84;
++ color = ((value-1)%3)+5;
++ t = ((value-1)/3)+1;
++ t_mask[0] = t;
++ }
++ /* 3 colors - alternate with blue */
++ else if (value <= 120) {
++ color = value-113;
++ t_mask[0] = 0xa;
++ t_mask[1] = 0xb;
++ }
++ /* invalid value */
++ else
++ color = 1;
++
++ gpio_red = led_register_value[color].ind_GPIO_red;
++ gpio_green = led_register_value[color].ind_GPIO_green;
++ ledr_en = led_register_value[color].pcap_LEDR_en;
++ ledg_en = led_register_value[color].pcap_LEDG_en;
++ ledr_ctrl = led_register_value[color].pcap_LEDR_CTRL & t_mask[0];
++ ledg_ctrl = led_register_value[color].pcap_LEDG_CTRL & t_mask[1];
++ ledr_i = led_register_value[color].pcap_LEDR_I;
++ ledg_i = led_register_value[color].pcap_LEDG_I;
++
++ ezx_pcap_read(PCAP_REG_PERIPH,&tempValue);
++
++ tempValue &= (~SSP_PCAP_LED_MASK);
++
++ pxa_gpio_set_value(IND_CNTL_R_BUL, gpio_red);
++ pxa_gpio_set_value(IND_CNTL_G_BUL, gpio_green);
++
++ /* Write PCAP LED Peripheral Control Register*/
++ tempValue = ((ledr_en | (ledg_en << 1) | (ledr_ctrl << 2) |
++ (ledg_ctrl << 6) | (ledr_i << 10) | (ledg_i << 12) |
++ (skip << 14)) & 0x7fff) << SSP_PCAP_LED_SHIFT;
++
++ ezx_pcap_write(PCAP_REG_PERIPH,tempValue);
++}
++
++static void e680led_keypad_set(struct led_classdev *led_cdev, enum led_brightness value)
++{
++ /* this is not working yet, as there is something else missing */
++#if 0
++ printk( KERN_DEBUG "e680led_keypad_set: %d\n", value );
++
++ pxa_gpio_mode(GPIO_TC_MM_EN);
++ GPDR(GPIO_TC_MM_EN) |= GPIO_bit(GPIO_TC_MM_EN);
++ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
++
++ udelay( 100 );
++
++ if ( value ) {
++ GPCR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
++ PGSR3 &= ~GPIO_bit(GPIO_TC_MM_EN);
++ } else {
++ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
++ PGSR3 |= GPIO_bit(GPIO_TC_MM_EN);
++ }
++#endif
++}
++
++static struct led_classdev e680_led = {
++ .name = "e680:led",
++ .default_trigger = "none",
++ .brightness_set = e680led_set,
++};
++
++static struct led_classdev e680_keypad = {
++ .name = "e680:keypad",
++ .default_trigger = "none",
++ .brightness_set = e680led_keypad_set,
++};
++
++#ifdef CONFIG_PM
++static int e680led_suspend(struct platform_device *dev, pm_message_t state)
++{
++ led_classdev_suspend(&e680_led);
++ led_classdev_suspend(&e680_keypad);
++ return 0;
++}
++
++static int e680led_resume(struct platform_device *dev)
++{
++ led_classdev_resume(&e680_led);
++ led_classdev_resume(&e680_keypad);
++ return 0;
++}
++#endif
++
++static int e680led_probe(struct platform_device *pdev)
++{
++ int ret;
++
++ /* configure GPIOs as output */
++ pxa_gpio_mode(IND_CNTL_R_BUL | GPIO_OUT);
++ pxa_gpio_mode(IND_CNTL_G_BUL | GPIO_OUT);
++
++ ret = led_classdev_register(&pdev->dev, &e680_led);
++ if (ret < 0)
++ return ret;
++
++ ret = led_classdev_register(&pdev->dev, &e680_keypad);
++ if (ret < 0) {
++ led_classdev_unregister(&e680_led);
++ }
++ return ret;
++}
++
++static int e680led_remove(struct platform_device *pdev)
++{
++ led_classdev_unregister(&e680_led);
++ led_classdev_unregister(&e680_keypad);
++ return 0;
++}
++
++static struct platform_driver e680led_driver = {
++ .probe = e680led_probe,
++ .remove = e680led_remove,
++#ifdef CONFIG_PM
++ .suspend = e680led_suspend,
++ .resume = e680led_resume,
++#endif
++ .driver = {
++ .name = "e680-led",
++ },
++};
++
++static int __init e680led_init(void)
++{
++ return platform_driver_register(&e680led_driver);
++}
++
++static void __exit e680led_exit(void)
++{
++ platform_driver_unregister(&e680led_driver);
++}
++
++module_init(e680led_init);
++module_exit(e680led_exit);
++
++MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>");
++MODULE_DESCRIPTION("Motorola E680 LED driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/ezx-e680.c
++++ linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c
+@@ -337,11 +337,20 @@
+ },
+ };
+
++static struct platform_device e680led_device = {
++ .name = "e680-led",
++ .id = -1,
++ .dev = {
++ .parent = &e680_pcap_device.dev,
++ },
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &e680_pcap_device,
+ &e680_emu_device,
+ &pcap_ts_device,
+ &e680locksw_device,
++ &e680led_device,
+ };
+
+ static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch
new file mode 100644
index 0000000000..6bb6687400
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/e680-locksw.patch
@@ -0,0 +1,45 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:58:55.000000000 +0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 18:59:23.000000000 +0200
+@@ -16,6 +16,7 @@
+ #include <linux/mmc/host.h>
+ #include <linux/irq.h>
+ #include <linux/input.h>
++#include <linux/gpio_keys.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -315,10 +316,32 @@
+ .resource = pcap_ts_resources,
+ };
+
++static struct gpio_keys_button e680locksw_buttons[] = {
++ [0] = {
++ .code = KEY_SLEEP,
++ .gpio = GPIO_LOCK_SCREEN_PIN,
++ .desc = "E680 lockscreen sw",
++ },
++};
++
++static struct gpio_keys_platform_data e680locksw_platform_data = {
++ .buttons = e680locksw_buttons,
++ .nbuttons = 1,
++};
++
++static struct platform_device e680locksw_device = {
++ .name = "gpio-keys",
++ .id = -1,
++ .dev = {
++ .platform_data = &e680locksw_platform_data,
++ },
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &e680_pcap_device,
+ &e680_emu_device,
+ &pcap_ts_device,
++ &e680locksw_device,
+ };
+
+ static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch
new file mode 100644
index 0000000000..0cea75d2c6
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/e680-mci.patch
@@ -0,0 +1,126 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
+@@ -13,6 +13,8 @@
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
+ #include <linux/fb.h>
++#include <linux/mmc/host.h>
++#include <linux/irq.h>
+
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+@@ -20,12 +22,104 @@
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/ezx.h>
+ #include <asm/arch/ezx-pcap.h>
++#include <asm/arch/mmc.h>
+
+ #include "generic.h"
+
+ extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
+ extern void ezx_backlight_power(int);
+
++#ifdef CONFIG_EZX_PCAP
++extern int ezx_pcap_mmcsd_power(int);
++extern void ezx_pcap_mmcsd_voltage(u_int32_t);
++#else
++#define ezx_pcap_mmcsd_voltage(x) {}
++#define ezx_pcap_mmcsd_power(x) {}
++#endif
++
++static struct pxamci_platform_data e680_mci_platform_data;
++
++static u_int8_t mmc_voltage[] = {
++ [ilog2(MMC_VDD_165_195)] = 3,
++ [ilog2(MMC_VDD_20_21)] = 3,
++ [ilog2(MMC_VDD_21_22)] = 3,
++ [ilog2(MMC_VDD_22_23)] = 3,
++ [ilog2(MMC_VDD_23_24)] = 3,
++ [ilog2(MMC_VDD_24_25)] = 3,
++ [ilog2(MMC_VDD_25_26)] = 3,
++ [ilog2(MMC_VDD_26_27)] = 3,
++ [ilog2(MMC_VDD_27_28)] = 3,
++ [ilog2(MMC_VDD_28_29)] = 3,
++ [ilog2(MMC_VDD_29_30)] = 3,
++ [ilog2(MMC_VDD_30_31)] = 3,
++ [ilog2(MMC_VDD_31_32)] = 3,
++ [ilog2(MMC_VDD_32_33)] = 3,
++ [ilog2(MMC_VDD_33_34)] = 3,
++ [ilog2(MMC_VDD_34_35)] = 3,
++ [ilog2(MMC_VDD_35_36)] = 3,
++};
++
++static int e680_mci_init(struct device *dev,
++ irqreturn_t (*ezx_detect_int)(int, void *),
++ void *data)
++{
++ int err;
++
++ /* Setup GPIO for PXA27x MMC/SD controller */
++ pxa_gpio_mode(GPIO32_MMCCLK_MD);
++ pxa_gpio_mode(GPIO112_MMCCMD_MD);
++ pxa_gpio_mode(GPIO92_MMCDAT0_MD);
++ pxa_gpio_mode(GPIO109_MMCDAT1_MD);
++ pxa_gpio_mode(GPIO110_MMCDAT2_MD);
++ pxa_gpio_mode(GPIO111_MMCDAT3_MD);
++
++ ezx_pcap_mmcsd_power(1);
++
++ e680_mci_platform_data.detect_delay = msecs_to_jiffies(250);
++
++ err = request_irq(0x49, ezx_detect_int, IRQF_DISABLED,
++ "MMC card detect", data);
++ if (err) {
++ printk(KERN_ERR "ezx_mci_detect: MMC/SD: can't request "
++ "MMC card detect IRQ\n");
++ return -1;
++ }
++
++ set_irq_type(0x0b, IRQT_BOTHEDGE);
++
++ return 0;
++}
++
++
++static inline int e680_mci_get_ro(struct device *dev)
++{
++ return (GPLR3 & 0x800);
++}
++
++static void e680_mci_setpower(struct device *dev, unsigned int vdd)
++{
++ struct pxamci_platform_data* p_d = dev->platform_data;
++
++ if (( 1 << vdd) & p_d->ocr_mask)
++ ezx_pcap_mmcsd_voltage(mmc_voltage[vdd]);
++
++ ezx_pcap_mmcsd_power(1);
++}
++
++static void e680_mci_exit(struct device *dev, void *data)
++{
++ ezx_pcap_mmcsd_power(0);
++ free_irq(0x49, data);
++}
++
++static struct pxamci_platform_data e680_mci_platform_data = {
++ .ocr_mask = MMC_VDD_27_28,
++ .init = e680_mci_init,
++ .get_ro = e680_mci_get_ro,
++ .setpower = e680_mci_setpower,
++ .exit = e680_mci_exit,
++};
++
+ static struct pxafb_mode_info mode_e680 = {
+ .pixclock = 150000,
+ .xres = 240,
+@@ -136,6 +230,7 @@
+ PSLR = 0x05800f00;
+
+ set_pxa_fb_info(&e680_fb_info);
++ pxa_set_mci_info(&e680_mci_platform_data);
+
+ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
+ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch
new file mode 100644
index 0000000000..a02ccb42c8
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/e680-pcap.patch
@@ -0,0 +1,90 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-11-24 20:09:00.000000000 -0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-11-24 20:09:46.000000000 -0200
+@@ -19,6 +19,7 @@
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/ezx.h>
++#include <asm/arch/ezx-pcap.h>
+
+ #include "generic.h"
+
+@@ -48,7 +49,77 @@
+ .pxafb_lcd_power = &ezx_lcd_power,
+ };
+
++/* PCAP */
++static int e680_pcap_init(void)
++{
++ /* initialize PCAP registers */
++ /* set SW1 sleep to keep SW1 1.3v in sync mode */
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE10, 0);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE11, 0);
++
++ /* SW1 active in sync mode */
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE00, 1);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW1_MODE01, 0);
++
++ /* at SW1 -core voltage to 1.30V */
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW10_DVS, 1);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW11_DVS, 1);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW12_DVS, 1);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_SW13_DVS, 0);
++
++ /* when STANDY2 PIN ACTIVE (high) set V3-- sram V8 -- pll off */
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_STBY, 1);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V3_LOWPWR, 0);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_STBY, 1);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V8_LOWPWR, 0);
++
++ /*
++ * when STANDY2 PIN ACTIVE (high) set V4-- lcd only for e680 V6 ---
++ * camera for e680
++ */
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_STBY, 1);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V4_LOWPWR, 1);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_STBY, 1);
++ ezx_pcap_bit_set(PCAP_BIT_VREG2_V6_LOWPWR, 0);
++
++ /* set Vc to low power mode when AP sleep */
++// SSP_PCAP_bit_set( PCAP_BIT_LOWPWR_CTRL_VC_STBY);
++
++ /* set VAUX2 to low power mode when AP sleep */
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_STBY, 1);
++ ezx_pcap_bit_set(PCAP_BIT_LOWPWR_VAUX2_LOWPWR, 1);
++
++ return 0;
++}
++
++static struct pcap_platform_data e680_pcap_platform_data = {
++ .port = 1,
++ .cs = GPIO_SPI_CE,
++ .flags = PCAP_MCI_SD,
++ .clk = 1,
++ .init = e680_pcap_init,
++};
++
++static struct resource e680_pcap_resources[] = {
++ [0] = {
++ .start = IRQ_GPIO1,
++ .end = IRQ_GPIO1,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++struct platform_device e680_pcap_device = {
++ .name = "ezx-pcap",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(e680_pcap_resources),
++ .resource = e680_pcap_resources,
++ .dev = {
++ .platform_data = &e680_pcap_platform_data,
++ },
++};
++
+ static struct platform_device *devices[] __initdata = {
++ &e680_pcap_device,
+ };
+
+ static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch
new file mode 100644
index 0000000000..2350b2de82
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/e680-ts.patch
@@ -0,0 +1,39 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:49.000000000 +0200
++++ linux-2.6.23/arch/arm/mach-pxa/ezx-e680.c 2007-10-24 20:01:58.000000000 +0200
+@@ -291,9 +291,34 @@
+ },
+ };
+
++/* PCAP_TS */
++struct resource pcap_ts_resources[] = {
++ [0] = {
++ .start = EZX_IRQ_ADCDONE2,
++ .end = EZX_IRQ_ADCDONE2,
++ .flags = IORESOURCE_IRQ,
++ },
++ [1] = {
++ .start = EZX_IRQ_TS,
++ .end = EZX_IRQ_TS,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++struct platform_device pcap_ts_device = {
++ .name = "pcap-ts",
++ .id = -1,
++ .dev = {
++ .parent = &e680_pcap_device.dev,
++ },
++ .num_resources = ARRAY_SIZE(pcap_ts_resources),
++ .resource = pcap_ts_resources,
++};
++
+ static struct platform_device *devices[] __initdata = {
+ &e680_pcap_device,
+ &e680_emu_device,
++ &pcap_ts_device,
+ };
+
+ static void __init e680_init(void)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch
new file mode 100644
index 0000000000..4ba0f4cddf
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-asoc.patch
@@ -0,0 +1,1302 @@
+Index: linux-2.6.24/sound/soc/codecs/pcap2.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/sound/soc/codecs/pcap2.c
+@@ -0,0 +1,796 @@
++/*
++ * pcap2.c - PCAP2 ASIC Audio driver
++ *
++ * Copyright (C) 2007 Daniel Ribeiro <wyrm@openezx.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/module.h>
++#include <linux/delay.h>
++#include <linux/moduleparam.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++#include <linux/pm.h>
++#include <linux/platform_device.h>
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/pcm_params.h>
++#include <sound/soc.h>
++#include <sound/soc-dapm.h>
++#include <sound/initval.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx-pcap.h>
++#include <asm/arch/ezx.h>
++#include <asm/arch/hardware.h>
++
++#include "pcap2.h"
++
++#define AUDIO_NAME "pcap2-codec"
++#define PCAP2_VERSION "0.1"
++
++extern int ezx_pcap_write(u_int8_t, u_int32_t);
++extern int ezx_pcap_read(u_int8_t, u_int32_t *);
++static struct snd_soc_device *pcap2_codec_socdev;
++
++/*
++ * Debug
++ */
++
++//#define PCAP2_DEBUG
++
++#ifdef PCAP2_DEBUG
++#define dbg(format, arg...) \
++ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
++#else
++#define dbg(format, arg...)
++#endif
++
++#define err(format, arg...) \
++ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
++#define info(format, arg...) \
++ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
++#define warn(format, arg...) \
++ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
++
++#define dump_registers() pcap2_codec_read(NULL, 13); \
++ pcap2_codec_read(NULL, 12); \
++ pcap2_codec_read(NULL, 11); \
++ pcap2_codec_read(NULL, 26);
++
++
++
++
++/*
++ * ASoC limits register value to 16 bits and pcap uses 32 bit registers
++ * to work around this, we get 16 bits from low, mid or high positions.
++ * ASoC limits register number to 8 bits we use 0x1f for register
++ * number and 0xe0 for register offset. -WM
++ */
++static int pcap2_codec_write(struct snd_soc_codec *codec, unsigned int reg,
++ unsigned int value)
++{
++ unsigned int tmp;
++
++ ezx_pcap_read((reg & 0x1f), &tmp);
++
++ if (reg & SL) {
++ tmp &= 0xffff0000;
++ tmp |= (value & 0xffff);
++ }
++ else if (reg & SM) {
++ tmp &= 0xff0000ff;
++ tmp |= ((value << 8) & 0x00ffff00);
++ }
++ else if (reg & SH) {
++ tmp &= 0xffff;
++ tmp |= ((value << 16) & 0xffff0000);
++ }
++ else
++ tmp = value;
++
++ dbg("codec_write reg=%x, rval=%08x, fval=%08x", reg, tmp, value);
++ ezx_pcap_write((reg & 0x1f), tmp);
++ return 0;
++
++}
++
++static unsigned int pcap2_codec_read(struct snd_soc_codec *codec, unsigned int reg)
++{
++ unsigned int tmp, ret;
++
++ ezx_pcap_read((reg & 0x1f), &tmp);
++ ret = tmp;
++ if (reg & SL)
++ ret = (tmp & 0xffff);
++ else if (reg & SM)
++ ret = ((tmp >> 8) & 0xffff);
++ else if (reg & SH)
++ ret = ((tmp >> 16) & 0xffff);
++
++ dbg("codec_read reg=%x, rval=%08x, fval=%08x", reg, tmp, ret);
++ return(ret);
++
++}
++
++static const char *pcap2_output_select[] = {"2ch", "2->1ch", "2->1ch -3db", "2->1ch -6db"};
++
++static const struct soc_enum pcap2_enum[] = {
++SOC_ENUM_SINGLE((PCAP2_OUTPUT_AMP|SH), 3, 4, pcap2_output_select),
++};
++
++static const struct snd_kcontrol_new pcap2_input_mixer_controls[] = {
++SOC_DAPM_SINGLE("A3 Switch", (PCAP2_INPUT_AMP|SL), 6, 1, 0),
++SOC_DAPM_SINGLE("A5 Switch", (PCAP2_INPUT_AMP|SL), 8, 1, 0),
++};
++
++static const struct snd_kcontrol_new pcap2_output_mixer_controls[] = {
++SOC_DAPM_SINGLE("A1 Switch", (PCAP2_OUTPUT_AMP|SL), 0, 1, 0),
++SOC_DAPM_SINGLE("A2 Switch", (PCAP2_OUTPUT_AMP|SL), 1, 1, 0),
++SOC_DAPM_SINGLE("AR Switch", (PCAP2_OUTPUT_AMP|SL), 5, 1, 0),
++SOC_DAPM_SINGLE("AL Switch", (PCAP2_OUTPUT_AMP|SL), 6, 1, 0),
++};
++
++/* pcap2 codec non DAPM controls */
++static const struct snd_kcontrol_new pcap2_codec_snd_controls[] = {
++SOC_SINGLE("Output gain", (PCAP2_OUTPUT_AMP|SM), 5, 15, 0),
++SOC_SINGLE("Input gain", (PCAP2_INPUT_AMP|SL), 0, 31, 0),
++};
++
++static const struct snd_kcontrol_new pcap2_codec_dm_mux_control[] = {
++ SOC_DAPM_ENUM("Output Mode", pcap2_enum[0]),
++};
++
++/* add non dapm controls */
++static int pcap2_codec_add_controls(struct snd_soc_codec *codec)
++{
++ int err, i;
++
++ for (i = 0; i < ARRAY_SIZE(pcap2_codec_snd_controls); i++) {
++ if ((err = snd_ctl_add(codec->card,
++ snd_soc_cnew(&pcap2_codec_snd_controls[i],codec, NULL))) < 0)
++ return err;
++ }
++
++ return 0;
++}
++
++/* pcap2 codec DAPM controls */
++static const struct snd_soc_dapm_widget pcap2_codec_dapm_widgets[] = {
++ SND_SOC_DAPM_DAC("ST_DAC", "ST_DAC playback", SND_SOC_NOPM, 0, 0),
++ SND_SOC_DAPM_DAC("CDC_DAC", "CDC_DAC playback", SND_SOC_NOPM, 0, 0),
++ SND_SOC_DAPM_ADC("CDC_ADC", "CDC_DAC capture", SND_SOC_NOPM, 0, 0),
++ SND_SOC_DAPM_PGA("PGA_ST", (PCAP2_OUTPUT_AMP|SL), 9, 0, NULL, 0),
++ SND_SOC_DAPM_PGA("PGA_CDC", (PCAP2_OUTPUT_AMP|SL), 8, 0, NULL, 0),
++ SND_SOC_DAPM_PGA("PGA_R", (PCAP2_OUTPUT_AMP|SL), 11, 0, NULL, 0),
++ SND_SOC_DAPM_PGA("PGA_L", (PCAP2_OUTPUT_AMP|SL), 12, 0, NULL, 0),
++ SND_SOC_DAPM_MUX("Downmixer", SND_SOC_NOPM, 0, 0, pcap2_codec_dm_mux_control),
++ SND_SOC_DAPM_PGA("PGA_A1CTRL", (PCAP2_OUTPUT_AMP|SH), 1, 1, NULL, 0),
++ SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 0, 0, &pcap2_output_mixer_controls[0], ARRAY_SIZE(pcap2_output_mixer_controls)),
++ SND_SOC_DAPM_OUTPUT("A1"), /* Earpiece */
++ SND_SOC_DAPM_OUTPUT("A2"), /* LoudSpeaker */
++ SND_SOC_DAPM_OUTPUT("AR"), /* headset right */
++ SND_SOC_DAPM_OUTPUT("AL"), /* headset left */
++
++ SND_SOC_DAPM_MICBIAS("BIAS1", (PCAP2_INPUT_AMP|SL), 10, 0),
++ SND_SOC_DAPM_MICBIAS("BIAS2", (PCAP2_INPUT_AMP|SL), 11, 0),
++ SND_SOC_DAPM_MIXER("Input Mixer", SND_SOC_NOPM, 0, 0, &pcap2_input_mixer_controls[0], ARRAY_SIZE(pcap2_input_mixer_controls)),
++ SND_SOC_DAPM_INPUT("A3"), /* Headset Mic */
++ SND_SOC_DAPM_INPUT("A5"), /* Builtin Mic */
++};
++
++static const char *audio_map[][3] = {
++ { "A1", NULL, "Output Mixer" },
++ { "A2", NULL, "Output Mixer" },
++ { "AR", NULL, "Output Mixer" },
++ { "AL", NULL, "Output Mixer" },
++
++ { "Output Mixer", "A1 Switch", "PGA_A1CTRL" },
++ { "Output Mixer", "A2 Switch", "Downmixer" },
++ { "Output Mixer", "AR Switch", "PGA_R" },
++ { "Output Mixer", "AL Switch", "PGA_L" },
++
++ { "PGA_A1CTRL", NULL, "Downmixer" },
++
++ { "Downmixer", "2->1ch", "PGA_L" },
++ { "Downmixer", "2->1ch", "PGA_R" },
++ { "Downmixer", "2->1ch -3db", "PGA_L" },
++ { "Downmixer", "2->1ch -3db", "PGA_R" },
++ { "Downmixer", "2->1ch -6db", "PGA_L" },
++ { "Downmixer", "2->1ch -6db", "PGA_R" },
++ { "Downmixer", "2ch", "PGA_R" },
++
++ { "PGA_R", NULL, "PGA_ST" },
++ { "PGA_L", NULL, "PGA_ST" },
++ { "PGA_R", NULL, "PGA_CDC" },
++
++ { "PGA_ST", NULL, "ST_DAC" },
++ { "PGA_CDC", NULL, "CDC_DAC" },
++
++ /* input path */
++ { "BIAS1", NULL, "A3" },
++ { "BIAS2", NULL, "A5" },
++
++ { "Input Mixer", "A3 Switch", "BIAS1" },
++ { "Input Mixer", "A5 Switch", "BIAS2" },
++
++ { "PGA_R", NULL, "Input Mixer" },
++
++ { "PGA_CDC", NULL, "PGA_R" },
++ { "CDC_ADC", NULL, "PGA_CDC" },
++
++ /* terminator */
++ {NULL, NULL, NULL},
++};
++
++static int pcap2_codec_add_widgets(struct snd_soc_codec *codec)
++{
++ int i;
++
++ for(i = 0; i < ARRAY_SIZE(pcap2_codec_dapm_widgets); i++) {
++ snd_soc_dapm_new_control(codec, &pcap2_codec_dapm_widgets[i]);
++ }
++
++ /* set up audio path interconnects */
++ for(i = 0; audio_map[i][0] != NULL; i++) {
++ snd_soc_dapm_connect_input(codec, audio_map[i][0],
++ audio_map[i][1], audio_map[i][2]);
++ }
++
++ snd_soc_dapm_new_widgets(codec);
++ return 0;
++}
++
++static int pcap2_codec_dapm_event(struct snd_soc_codec *codec, int event)
++{
++ unsigned int input = pcap2_codec_read(codec, PCAP2_INPUT_AMP);
++
++ input &= ~PCAP2_INPUT_AMP_LOWPWR;
++
++ switch (event) {
++ case SNDRV_CTL_POWER_D0:
++ case SNDRV_CTL_POWER_D1:
++ case SNDRV_CTL_POWER_D2:
++ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
++ dbg("dapm: ON\n");
++ break;
++ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
++ input |= PCAP2_INPUT_AMP_LOWPWR;
++ dbg("dapm: OFF\n");
++ break;
++ }
++ codec->dapm_state = event;
++ pcap2_codec_write(codec, PCAP2_INPUT_AMP, input);
++ return 0;
++}
++
++static int pcap2_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++ struct snd_soc_codec *codec = codec_dai->codec;
++ unsigned int tmp;
++
++ if (codec_dai->id == PCAP2_STEREO_DAI) {
++ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
++
++ tmp &= ~PCAP2_ST_DAC_RATE_MASK;
++ switch(params_rate(params)) {
++ case 8000:
++ break;
++ case 11025:
++ tmp |= PCAP2_ST_DAC_RATE_11025;
++ break;
++ case 12000:
++ tmp |= PCAP2_ST_DAC_RATE_12000;
++ break;
++ case 16000:
++ tmp |= PCAP2_ST_DAC_RATE_16000;
++ break;
++ case 22050:
++ tmp |= PCAP2_ST_DAC_RATE_22050;
++ break;
++ case 24000:
++ tmp |= PCAP2_ST_DAC_RATE_24000;
++ break;
++ case 32000:
++ tmp |= PCAP2_ST_DAC_RATE_32000;
++ break;
++ case 44100:
++ tmp |= PCAP2_ST_DAC_RATE_44100;
++ break;
++ case 48000:
++ tmp |= PCAP2_ST_DAC_RATE_48000;
++ break;
++ default:
++ return -EINVAL;
++ }
++ tmp |= PCAP2_ST_DAC_RESET_DF;
++ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
++ }
++ else {
++ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
++
++ tmp &= ~PCAP2_CODEC_RATE_MASK;
++ switch(params_rate(params)) {
++ case 8000:
++ break;
++ case 16000:
++ tmp |= PCAP2_CODEC_RATE_16000;
++ break;
++ default:
++ return -EINVAL;
++ }
++ tmp |= PCAP2_CODEC_RESET_DF;
++ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
++ }
++
++ return 0;
++}
++
++static int pcap2_hw_free(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++ struct snd_soc_codec *codec = codec_dai->codec;
++ struct snd_soc_dapm_widget *w;
++ unsigned int tmp;
++
++ if (codec_dai->id == PCAP2_STEREO_DAI) {
++ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0);
++ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
++ tmp &= ~(PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN);
++ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
++ }
++ else {
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0);
++ else
++ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0);
++ list_for_each_entry(w, &codec->dapm_widgets, list) {
++ if ((!strcmp(w->name, "CDC_DAC") || !strcmp(w->name, "CDC_ADC")) && w->connected)
++ goto in_use;
++ }
++ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
++ tmp &= ~(PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN);
++ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
++ }
++in_use:
++ snd_soc_dapm_sync_endpoints(codec);
++
++ return 0;
++}
++
++static int pcap2_set_dai_sysclk(struct snd_soc_codec_dai *codec_dai,
++ int clk_id, unsigned int freq, int dir)
++{
++ struct snd_soc_codec *codec = codec_dai->codec;
++
++ unsigned int tmp;
++ if (codec_dai->id == PCAP2_STEREO_DAI) {
++ /* ST_DAC */
++
++ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
++
++ tmp &= ~PCAP2_ST_DAC_CLKSEL_MASK;
++ switch (clk_id) {
++ case PCAP2_CLK_AP:
++ tmp |= PCAP2_ST_DAC_CLKSEL_AP;
++ break;
++ case PCAP2_CLK_BP:
++ break;
++ default:
++ return -ENODEV;
++ }
++
++ tmp &= ~PCAP2_ST_DAC_CLK_MASK;
++ switch (freq) {
++ case 13000000:
++ break;
++/* case 15M36:
++ tmp |= PCAP2_ST_DAC_CLK_15M36;
++ break;
++ case 16M8:
++ tmp |= PCAP2_ST_DAC_CLK_16M8;
++ break;
++ case 19M44:
++ tmp |= PCAP2_ST_DAC_CLK_19M44;
++ break;
++*/ case 26000000:
++ tmp |= PCAP2_ST_DAC_CLK_26M;
++ break;
++/* case EXT_MCLK:
++ tmp |= PCAP2_ST_DAC_CLK_MCLK;
++ break;
++ case FSYNC:
++ tmp |= PCAP2_ST_DAC_CLK_FSYNC;
++ break;
++ case BITCLK:
++ tmp |= PCAP2_ST_DAC_CLK_BITCLK;
++ break;
++*/ default:
++ return -EINVAL;
++ }
++ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
++ }
++ else {
++ /* MONO_DAC */
++ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
++
++ tmp &= ~PCAP2_CODEC_CLKSEL_MASK;
++ switch (clk_id) {
++ case PCAP2_CLK_AP:
++ tmp |= PCAP2_CODEC_CLKSEL_AP;
++ break;
++ case PCAP2_CLK_BP:
++ break;
++ default:
++ return -ENODEV;
++ }
++
++ tmp &= ~PCAP2_CODEC_CLK_MASK;
++ switch (freq) {
++ case 13000000:
++ break;
++/* case 15M36:
++ tmp |= PCAP2_CODEC_CLK_15M36;
++ break;
++ case 16M8:
++ tmp |= PCAP2_CODEC_CLK_16M8;
++ break;
++ case 19M44:
++ tmp |= PCAP2_CODEC_CLK_19M44;
++ break;
++*/ case 26000000:
++ tmp |= PCAP2_CODEC_CLK_26M;
++ break;
++ default:
++ return -EINVAL;
++ }
++ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
++ }
++ return 0;
++}
++
++static int pcap2_set_dai_fmt(struct snd_soc_codec_dai *codec_dai,
++ unsigned int fmt)
++{
++ struct snd_soc_codec *codec = codec_dai->codec;
++ unsigned int tmp = 0;
++
++ if (codec_dai->id == PCAP2_STEREO_DAI) {
++ /* ST_DAC */
++
++ /* disable CODEC */
++ pcap2_codec_write(codec, PCAP2_CODEC, 0);
++
++ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
++ case SND_SOC_DAIFMT_CBM_CFM:
++ break;
++ case SND_SOC_DAIFMT_CBS_CFS:
++ tmp |= 0x1;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
++ case SND_SOC_DAIFMT_I2S:
++ tmp |= 0x4000;
++ break;
++/* case SND_SOC_NET:
++ tmp |= 0x2000;
++ break;
++*/ case SND_SOC_DAIFMT_DSP_B:
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
++ case SND_SOC_DAIFMT_IB_IF:
++ break;
++ case SND_SOC_DAIFMT_NB_NF:
++ tmp |= 0x60000;
++ break;
++ case SND_SOC_DAIFMT_IB_NF:
++ tmp |= 0x40000;
++ break;
++ case SND_SOC_DAIFMT_NB_IF:
++ tmp |= 0x20000;
++ break;
++ }
++ /* set dai to AP */
++ tmp |= 0x1000;
++
++ /* set BCLK */
++ tmp |= 0x18000;
++
++ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
++ }
++ else {
++ /* MONO_DAC */
++
++ /* disable ST_DAC */
++ pcap2_codec_write(codec, PCAP2_ST_DAC, 0);
++
++ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
++ case SND_SOC_DAIFMT_CBM_CFM:
++ break;
++ case SND_SOC_DAIFMT_CBS_CFS:
++ tmp |= 0x2;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
++ case SND_SOC_DAIFMT_DSP_B:
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
++ case SND_SOC_DAIFMT_IB_IF:
++ break;
++ case SND_SOC_DAIFMT_NB_NF:
++ tmp |= 0x600;
++ break;
++ case SND_SOC_DAIFMT_IB_NF:
++ tmp |= 0x400;
++ break;
++ case SND_SOC_DAIFMT_NB_IF:
++ tmp |= 0x200;
++ break;
++ }
++ if (codec_dai->id == PCAP2_MONO_DAI)
++ /* set dai to AP */
++ tmp |= 0x8000;
++
++ tmp |= 0x5; /* IHF / OHF */
++
++ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
++ }
++ return 0;
++}
++
++static int pcap2_prepare(struct snd_pcm_substream *substream)
++{
++
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++ struct snd_soc_codec *codec = codec_dai->codec;
++ unsigned int tmp;
++ /* FIXME enable clock only if codec is master */
++ if (codec_dai->id == PCAP2_STEREO_DAI) {
++ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 1);
++ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 0);
++ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 0);
++ tmp = pcap2_codec_read(codec, PCAP2_ST_DAC);
++ tmp |= (PCAP2_ST_DAC_EN | PCAP2_ST_DAC_CLK_EN);
++ pcap2_codec_write(codec, PCAP2_ST_DAC, tmp);
++ }
++ else {
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ snd_soc_dapm_set_endpoint(codec, "CDC_DAC", 1);
++ else
++ snd_soc_dapm_set_endpoint(codec, "CDC_ADC", 1);
++ snd_soc_dapm_set_endpoint(codec, "ST_DAC", 0);
++ tmp = pcap2_codec_read(codec, PCAP2_CODEC);
++ tmp |= (PCAP2_CODEC_EN | PCAP2_CODEC_CLK_EN);
++ pcap2_codec_write(codec, PCAP2_CODEC, tmp);
++ }
++ snd_soc_dapm_sync_endpoints(codec);
++ mdelay(1);
++#ifdef PCAP2_DEBUG
++ dump_registers();
++#endif
++ return 0;
++}
++
++/*
++ * Define codec DAI.
++ */
++struct snd_soc_codec_dai pcap2_dai[] = {
++{
++ .name = "PCAP2 MONO",
++ .id = 0,
++ .playback = {
++ .stream_name = "CDC_DAC playback",
++ .channels_min = 1,
++ .channels_max = 1,
++ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000),
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,
++ },
++ .capture = {
++ .stream_name = "CDC_DAC capture",
++ .channels_min = 1,
++ .channels_max = 1,
++ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000),
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,
++ },
++ .ops = {
++ .prepare = pcap2_prepare,
++ .hw_params = pcap2_hw_params,
++ .hw_free = pcap2_hw_free,
++ },
++ .dai_ops = {
++// .digital_mute = pcap2_mute,
++ .set_fmt = pcap2_set_dai_fmt,
++ .set_sysclk = pcap2_set_dai_sysclk,
++ },
++},
++{
++ .name = "PCAP2 STEREO",
++ .id = 1,
++ .playback = {
++ .stream_name = "ST_DAC playback",
++ .channels_min = 1,
++ .channels_max = 2,
++ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |
++ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |
++ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
++ SNDRV_PCM_RATE_48000),
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,
++ },
++ .capture = { /* FIXME: PCAP support this?? */
++ .stream_name = "ST_DAC capture",
++ .channels_min = 1,
++ .channels_max = 1,
++ .rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |
++ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |
++ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
++ SNDRV_PCM_RATE_48000),
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,
++ },
++ .ops = {
++ .prepare = pcap2_prepare,
++ .hw_params = pcap2_hw_params,
++ .hw_free = pcap2_hw_free,
++ },
++ .dai_ops = {
++// .digital_mute = pcap2_mute,
++ .set_fmt = pcap2_set_dai_fmt,
++ .set_sysclk = pcap2_set_dai_sysclk,
++ },
++},
++{
++ .name = "PCAP2 BP",
++ .id = 2,
++ .playback = {
++ .stream_name = "BP playback",
++ .channels_min = 1,
++ .channels_max = 1,
++ .rates = SNDRV_PCM_RATE_8000,
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,
++ },
++ .ops = {
++ .prepare = pcap2_prepare,
++ .hw_params = pcap2_hw_params,
++ .hw_free = pcap2_hw_free,
++ },
++ .dai_ops = {
++// .digital_mute = pcap2_mute,
++ .set_fmt = pcap2_set_dai_fmt,
++ .set_sysclk = pcap2_set_dai_sysclk,
++ },
++},
++};
++EXPORT_SYMBOL_GPL(pcap2_dai);
++
++static int pcap2_codec_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
++ struct snd_soc_codec *codec = socdev->codec;
++
++ dbg("pcap2_codec_suspend");
++ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
++ return 0;
++}
++
++static int pcap2_codec_resume(struct platform_device *pdev)
++{
++ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
++ struct snd_soc_codec *codec = socdev->codec;
++
++ dbg("pcap2_codec_resume");
++ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
++ pcap2_codec_dapm_event(codec, codec->suspend_dapm_state);
++ return 0;
++}
++
++/*
++ * initialise the PCAP2 driver
++ * register the mixer and dsp interfaces with the kernel
++ */
++static int pcap2_codec_init(struct snd_soc_device *socdev)
++{
++ struct snd_soc_codec *codec = socdev->codec;
++ int ret = 0;
++
++ dbg("pcap2_codec_init");
++ codec->name = "PCAP2 Audio";
++ codec->owner = THIS_MODULE;
++ codec->read = pcap2_codec_read;
++ codec->write = pcap2_codec_write;
++ codec->dapm_event = pcap2_codec_dapm_event;
++ codec->dai = pcap2_dai;
++ codec->num_dai = ARRAY_SIZE(pcap2_dai);
++
++ /* register pcms */
++ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
++ if (ret < 0) {
++ return ret;
++ }
++ /* power on device */
++ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
++ /* set the update bits */
++
++ pcap2_codec_add_controls(codec);
++ pcap2_codec_add_widgets(codec);
++ ret = snd_soc_register_card(socdev);
++ if (ret < 0) {
++ snd_soc_free_pcms(socdev);
++ snd_soc_dapm_free(socdev);
++ }
++
++ return ret;
++}
++
++static int pcap2_codec_probe(struct platform_device *pdev)
++{
++ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
++ struct pcap2_codec_setup_data *setup;
++ struct snd_soc_codec *codec;
++ int ret = 0;
++ info("PCAP2 Audio Codec %s", PCAP2_VERSION);
++
++ setup = socdev->codec_data;
++ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
++ if (codec == NULL)
++ return -ENOMEM;
++
++ socdev->codec = codec;
++ mutex_init(&codec->mutex);
++ INIT_LIST_HEAD(&codec->dapm_widgets);
++ INIT_LIST_HEAD(&codec->dapm_paths);
++
++ pcap2_codec_socdev = socdev;
++
++ ret = pcap2_codec_init(socdev);
++ return ret;
++}
++
++/* power down chip and remove */
++static int pcap2_codec_remove(struct platform_device *pdev)
++{
++ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
++ struct snd_soc_codec *codec = socdev->codec;
++ if (codec->control_data)
++ pcap2_codec_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
++ snd_soc_free_pcms(socdev);
++ snd_soc_dapm_free(socdev);
++
++ kfree(codec);
++
++ return 0;
++}
++
++/* codec device ops */
++struct snd_soc_codec_device soc_codec_dev_pcap2 = {
++ .probe = pcap2_codec_probe,
++ .remove = pcap2_codec_remove,
++ .suspend = pcap2_codec_suspend,
++ .resume = pcap2_codec_resume,
++};
++
++EXPORT_SYMBOL_GPL(soc_codec_dev_pcap2);
++
++MODULE_DESCRIPTION("ASoC PCAP2 codec");
++MODULE_AUTHOR("Daniel Ribeiro");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.24/sound/soc/codecs/pcap2.h
+===================================================================
+--- /dev/null
++++ linux-2.6.24/sound/soc/codecs/pcap2.h
+@@ -0,0 +1,81 @@
++/*
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#ifndef _PCAP2_H
++#define _PCAP2_H
++
++/* 16 bit reads/writes on pcap registers (ugly workaround) */
++#define SL (1 << 5) /* lower 16 bits */
++#define SM (1 << 6) /* mid 16 bits */
++#define SH (1 << 7) /* higher 16 bits */
++
++/* PCAP2 register space */
++#define PCAP2_CODEC 0x0b
++#define PCAP2_OUTPUT_AMP 0x0c
++#define PCAP2_ST_DAC 0x0d
++#define PCAP2_INPUT_AMP 0x1a
++
++#define PCAP2_MONO_DAI 0
++#define PCAP2_STEREO_DAI 1
++#define PCAP2_BP_DAI 2
++
++#define PCAP2_CLK_BP 0
++#define PCAP2_CLK_AP 1
++
++#define PCAP2_CODEC_EN 0x2000
++#define PCAP2_CODEC_CLK_EN 0x1000
++#define PCAP2_CODEC_RESET_DF 0x800
++#define PCAP2_CODEC_RATE_MASK 0x4000
++#define PCAP2_CODEC_RATE_8000 0x0
++#define PCAP2_CODEC_RATE_16000 0x4000
++#define PCAP2_CODEC_CLKSEL_MASK 0x10000
++#define PCAP2_CODEC_CLKSEL_AP 0x10000
++#define PCAP2_CODEC_CLKSEL_BP 0x0
++#define PCAP2_CODEC_CLK_MASK 0x1c0
++#define PCAP2_CODEC_CLK_13M 0x0
++#define PCAP2_CODEC_CLK_15M36 0x40
++#define PCAP2_CODEC_CLK_16M8 0x80
++#define PCAP2_CODEC_CLK_19M44 0xc0
++#define PCAP2_CODEC_CLK_26M 0x100
++
++#define PCAP2_ST_DAC_EN 0x80
++#define PCAP2_ST_DAC_CLK_EN 0x20
++#define PCAP2_ST_DAC_RESET_DF 0x40
++#define PCAP2_ST_DAC_RATE_MASK 0xf00
++#define PCAP2_ST_DAC_RATE_8000 0x0
++#define PCAP2_ST_DAC_RATE_11025 0x100
++#define PCAP2_ST_DAC_RATE_12000 0x200
++#define PCAP2_ST_DAC_RATE_16000 0x300
++#define PCAP2_ST_DAC_RATE_22050 0x400
++#define PCAP2_ST_DAC_RATE_24000 0x500
++#define PCAP2_ST_DAC_RATE_32000 0x600
++#define PCAP2_ST_DAC_RATE_44100 0x700
++#define PCAP2_ST_DAC_RATE_48000 0x800
++#define PCAP2_ST_DAC_CLKSEL_MASK 0x80000
++#define PCAP2_ST_DAC_CLKSEL_AP 0x80000
++#define PCAP2_ST_DAC_CLKSEL_BP 0x0
++#define PCAP2_ST_DAC_CLK_MASK 0x1c
++#define PCAP2_ST_DAC_CLK_13M 0x0
++#define PCAP2_ST_DAC_CLK_15M36 0x4
++#define PCAP2_ST_DAC_CLK_16M8 0x8
++#define PCAP2_ST_DAC_CLK_19M44 0xc
++#define PCAP2_ST_DAC_CLK_26M 0x10
++#define PCAP2_ST_DAC_CLK_MCLK 0x14
++#define PCAP2_ST_DAC_CLK_FSYNC 0x18
++#define PCAP2_ST_DAC_CLK_BITCLK 0x1c
++
++#define PCAP2_INPUT_AMP_LOWPWR 0x80000
++#define PCAP2_INPUT_AMP_V2EN2 0x200000
++
++#define PCAP2_OUTPUT_AMP_PGAR_EN 0x800
++#define PCAP2_OUTPUT_AMP_PGAL_EN 0x1000
++#define PCAP2_OUTPUT_AMP_CDC_SW 0x100
++#define PCAP2_OUTPUT_AMP_ST_DAC_SW 0x200
++
++extern struct snd_soc_codec_dai pcap2_dai[];
++extern struct snd_soc_codec_device soc_codec_dev_pcap2;
++
++#endif
+Index: linux-2.6.24/sound/soc/pxa/Kconfig
+===================================================================
+--- linux-2.6.24.orig/sound/soc/pxa/Kconfig
++++ linux-2.6.24/sound/soc/pxa/Kconfig
+@@ -57,3 +57,12 @@
+ help
+ Say Y if you want to add support for SoC audio on Sharp
+ Zaurus SL-C6000x models (Tosa).
++
++config SND_PXA2XX_SOC_EZX
++ tristate "SoC Audio support for EZX"
++ depends on SND_PXA2XX_SOC && PXA_EZX
++ select SND_PXA2XX_SOC_SSP
++ select SND_SOC_PCAP2
++ help
++ Say Y if you want to add support for SoC audio on
++ Motorola EZX Phones (a780/e680).
+Index: linux-2.6.24/sound/soc/pxa/ezx.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/sound/soc/pxa/ezx.c
+@@ -0,0 +1,349 @@
++/*
++ * ezx.c - Machine specific code for EZX phones
++ *
++ * Copyright (C) 2007 Daniel Ribeiro <wyrm@openezx.org>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/timer.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/soc.h>
++#include <sound/soc-dapm.h>
++
++#include <asm/mach-types.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/hardware.h>
++
++#include <asm/arch/ezx-pcap.h>
++
++#include "../codecs/pcap2.h"
++#include "pxa2xx-pcm.h"
++#include "pxa2xx-ssp.h"
++
++#define GPIO_HW_ATTENUATE_A780 96
++
++static struct snd_soc_codec *control_codec;
++
++static void ezx_ext_control(struct snd_soc_codec *codec)
++{
++ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_A1)))
++ snd_soc_dapm_set_endpoint(codec, "Headset", 1);
++ else
++ snd_soc_dapm_set_endpoint(codec, "Headset", 0);
++ if (ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_MB2)))
++ snd_soc_dapm_set_endpoint(codec, "External Mic", 1);
++ else
++ snd_soc_dapm_set_endpoint(codec, "External Mic", 0);
++
++ snd_soc_dapm_sync_endpoints(codec);
++}
++
++static irqreturn_t jack_irq(int irq, void *data)
++{
++ ezx_ext_control(control_codec);
++ return IRQ_HANDLED;
++}
++
++
++/*
++ * Alsa operations
++ * Only implement the required operations for your platform.
++ * These operations are specific to the machine only.
++ */
++
++ /*
++ * Called by ALSA when a PCM substream is opened, private data can be allocated.
++ */
++static int ezx_machine_startup(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec *codec = rtd->socdev->codec;
++
++ /* check the jack status at stream startup */
++ ezx_ext_control(codec);
++ return 0;
++}
++
++/*
++ * Called by ALSA when the hardware params are set by application. This
++ * function can also be called multiple times and can allocate buffers
++ * (using snd_pcm_lib_* ). It's non-atomic.
++ */
++static int ezx_machine_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++ int ret;
++
++ /* set codec DAI configuration */
++ if (codec_dai->id == PCAP2_STEREO_DAI)
++ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
++ SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_CBM_CFM);
++ else
++ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
++ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
++ if(ret < 0)
++ return ret;
++
++ /* Turn on clock output on CLK_PIO */
++ OSCC |= 0x8;
++
++ /* set clock source */
++ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_AP,
++ 13000000, SND_SOC_CLOCK_IN);
++ if(ret < 0)
++ return ret;
++
++ /* set cpu DAI configuration */
++ ret = cpu_dai->dai_ops.set_fmt(cpu_dai, SND_SOC_DAIFMT_DSP_B |
++ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
++ if (ret < 0)
++ return ret;
++
++ ret = cpu_dai->dai_ops.set_tristate(cpu_dai, 0);
++ if (ret < 0)
++ return ret;
++
++ ret = cpu_dai->dai_ops.set_sysclk(cpu_dai,PXA2XX_SSP_CLK_EXT,
++ 0, SND_SOC_CLOCK_IN);
++ if (ret < 0)
++ return ret;
++
++ return 0;
++}
++
++/*
++ * Free's resources allocated by hw_params, can be called multiple times
++ */
++static int ezx_machine_hw_free(struct snd_pcm_substream *substream)
++{
++ OSCC &= ~0x8; /* turn off clock output on CLK_PIO */
++
++ return 0;
++}
++
++static int ezx_machine_prepare(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++ struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++
++ if (codec_dai->id == PCAP2_STEREO_DAI) {
++ /* override pxa2xx-ssp sample size for stereo/network mode */
++ SSCR0_P(cpu_dai->id+1) &= ~(SSCR0_DSS | SSCR0_EDSS);
++ SSCR0_P(cpu_dai->id+1) |= (SSCR0_EDSS | SSCR0_DataSize(16));
++ }
++ return 0;
++}
++
++/* machine Alsa PCM operations */
++static struct snd_soc_ops ezx_ops = {
++ .startup = ezx_machine_startup,
++ .prepare = ezx_machine_prepare,
++ .hw_free = ezx_machine_hw_free,
++ .hw_params = ezx_machine_hw_params,
++};
++
++static int bp_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec_dai *codec_dai = rtd->dai->codec_dai;
++// struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
++ int ret = 0;
++ /* set codec DAI configuration */
++ ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
++ SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM);
++ if(ret < 0)
++ return ret;
++
++ /* set clock source */
++ ret = codec_dai->dai_ops.set_sysclk(codec_dai, PCAP2_CLK_BP,
++ 13000000, SND_SOC_CLOCK_IN);
++
++ return ret;
++}
++
++
++
++/* machine dapm widgets */
++static const struct snd_soc_dapm_widget ezx_dapm_widgets[] = {
++ SND_SOC_DAPM_HP("Headset", NULL),
++ SND_SOC_DAPM_SPK("Earpiece", NULL),
++ SND_SOC_DAPM_SPK("Loudspeaker", NULL),
++ SND_SOC_DAPM_MIC("Built-in Mic", NULL),
++ SND_SOC_DAPM_MIC("External Mic", NULL),
++};
++
++/* machine audio map (connections to the codec pins) */
++static const char *audio_map[][3] = {
++ { "Headset", NULL, "AR" },
++ { "Headset", NULL, "AL" },
++ { "Earpiece", NULL, "A1" },
++ { "Loudspeaker", NULL, "A2" },
++
++ { "Built-in Mic", NULL, "A5" },
++ { "External Mic", NULL, "A3" },
++
++ {NULL, NULL, NULL},
++};
++
++/*
++ * Initialise the machine audio subsystem.
++ */
++static int ezx_machine_init(struct snd_soc_codec *codec)
++{
++ int i;
++ /* mark unused codec pins as NC */
++// snd_soc_dapm_set_endpoint(codec, "FIXME", 0);
++ control_codec = codec;
++
++ /* Add ezx specific controls */
++// for (i = 0; i < ARRAY_SIZE(ezx_controls); i++) {
++// if ((err = snd_ctl_add(codec->card, snd_soc_cnew(&ezx_controls[i], codec, NULL))) < 0)
++// return err;
++// }
++
++ /* Add ezx specific widgets */
++ for(i = 0; i < ARRAY_SIZE(ezx_dapm_widgets); i++) {
++ snd_soc_dapm_new_control(codec, &ezx_dapm_widgets[i]);
++ }
++ /* Set up ezx specific audio path interconnects */
++ for(i = 0; audio_map[i][0] != NULL; i++) {
++ snd_soc_dapm_connect_input(codec, audio_map[i][0], audio_map[i][1], audio_map[i][2]);
++ }
++
++ /* synchronise subsystem */
++ snd_soc_dapm_sync_endpoints(codec);
++ return 0;
++}
++
++static struct snd_soc_cpu_dai bp_dai =
++{
++ .name = "Baseband",
++ .id = 0,
++ .type = SND_SOC_DAI_PCM,
++ .playback = {
++ .channels_min = 1,
++ .channels_max = 1,
++ .rates = SNDRV_PCM_RATE_8000,
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,
++ },
++ .capture = {
++ .channels_min = 1,
++ .channels_max = 1,
++ .rates = SNDRV_PCM_RATE_8000,
++ .formats = SNDRV_PCM_FMTBIT_S16_LE,
++ },
++ .ops = {
++// .startup = bp_startup,
++// .shutdown = bp_shutdown,
++ .hw_params = bp_hw_params,
++// .hw_free = bp_hw_free,
++ },
++};
++
++/* template digital audio interface glue - connects codec <--> CPU */
++static struct snd_soc_dai_link ezx_dai[] = {
++{
++ .name = "PCAP2 STEREO",
++ .stream_name = "stereo playback",
++ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3],
++ .codec_dai = &pcap2_dai[PCAP2_STEREO_DAI],
++ .init = ezx_machine_init,
++ .ops = &ezx_ops,
++},
++{
++ .name = "PCAP2 MONO",
++ .stream_name = "mono playback",
++ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP3],
++ .codec_dai = &pcap2_dai[PCAP2_MONO_DAI],
++// .init = ezx_machine_init, /* the stereo call already registered our controls */
++ .ops = &ezx_ops,
++},
++{
++ .name = "PCAP2 BP",
++ .stream_name = "BP Audio",
++ .cpu_dai = &bp_dai,
++ .codec_dai = &pcap2_dai[PCAP2_BP_DAI],
++},
++};
++
++/* template audio machine driver */
++static struct snd_soc_machine snd_soc_machine_ezx = {
++ .name = "Motorola EZX",
++// .probe
++// .remove
++// .suspend_pre
++// .resume_post
++ .dai_link = ezx_dai,
++ .num_links = ARRAY_SIZE(ezx_dai),
++};
++
++/* template audio subsystem */
++static struct snd_soc_device ezx_snd_devdata = {
++ .machine = &snd_soc_machine_ezx,
++ .platform = &pxa2xx_soc_platform,
++ .codec_dev = &soc_codec_dev_pcap2,
++};
++
++static struct platform_device *ezx_snd_device;
++
++static int __init ezx_init(void)
++{
++ int ret;
++ ezx_snd_device = platform_device_alloc("soc-audio", -1);
++ if (!ezx_snd_device)
++ return -ENOMEM;
++
++ platform_set_drvdata(ezx_snd_device, &ezx_snd_devdata);
++ ezx_snd_devdata.dev = &ezx_snd_device->dev;
++ ret = platform_device_add(ezx_snd_device);
++
++ if (ret)
++ platform_device_put(ezx_snd_device);
++ /* configure gpio for ssp3 */
++ pxa_gpio_mode(GPIO83_SFRM3_MD); /* SFRM */
++ pxa_gpio_mode(GPIO81_STXD3_MD); /* TXD */
++ pxa_gpio_mode(GPIO52_SCLK3_MD); /* SCLK */
++ pxa_gpio_mode(GPIO89_SRXD3_MD); /* RXD */
++
++ /* configure gpio for ssp2 */
++ pxa_gpio_mode(37 | GPIO_IN); /* SFRM */
++ pxa_gpio_mode(38 | GPIO_IN); /* TXD */
++ pxa_gpio_mode(22 | GPIO_IN); /* SCLK */
++ pxa_gpio_mode(88 | GPIO_IN); /* RXD */
++
++ pxa_gpio_mode(GPIO_HW_ATTENUATE_A780 | GPIO_OUT);
++ pxa_gpio_set_value(GPIO_HW_ATTENUATE_A780, 1);
++
++ /* request jack irq */
++ request_irq(EZX_IRQ_HEADJACK, &jack_irq, IRQF_DISABLED, "headphone jack", NULL);
++ request_irq(EZX_IRQ_MIC, &jack_irq, IRQF_DISABLED, "mic jack", NULL);
++
++ return ret;
++}
++
++static void __exit ezx_exit(void)
++{
++ free_irq(EZX_IRQ_HEADJACK, NULL);
++ free_irq(EZX_IRQ_MIC, NULL);
++ platform_device_unregister(ezx_snd_device);
++}
++
++module_init(ezx_init);
++module_exit(ezx_exit);
++
+Index: linux-2.6.24/sound/soc/codecs/Makefile
+===================================================================
+--- linux-2.6.24.orig/sound/soc/codecs/Makefile
++++ linux-2.6.24/sound/soc/codecs/Makefile
+@@ -4,6 +4,7 @@
+ snd-soc-wm8753-objs := wm8753.o
+ snd-soc-wm9712-objs := wm9712.o
+ snd-soc-cs4270-objs := cs4270.o
++snd-soc-pcap2-objs := pcap2.o
+
+ obj-$(CONFIG_SND_SOC_AC97_CODEC) += snd-soc-ac97.o
+ obj-$(CONFIG_SND_SOC_WM8731) += snd-soc-wm8731.o
+@@ -11,3 +12,4 @@
+ obj-$(CONFIG_SND_SOC_WM8753) += snd-soc-wm8753.o
+ obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o
+ obj-$(CONFIG_SND_SOC_CS4270) += snd-soc-cs4270.o
++obj-$(CONFIG_SND_SOC_PCAP2) += snd-soc-pcap2.o
+Index: linux-2.6.24/sound/soc/codecs/Kconfig
+===================================================================
+--- linux-2.6.24.orig/sound/soc/codecs/Kconfig
++++ linux-2.6.24/sound/soc/codecs/Kconfig
+@@ -37,3 +37,6 @@
+ bool
+ depends on SND_SOC_CS4270
+
++config SND_SOC_PCAP2
++ tristate
++ depends on SND_SOC && EZX_PCAP
+Index: linux-2.6.24/sound/soc/pxa/Makefile
+===================================================================
+--- linux-2.6.24.orig/sound/soc/pxa/Makefile
++++ linux-2.6.24/sound/soc/pxa/Makefile
+@@ -14,9 +14,10 @@
+ snd-soc-poodle-objs := poodle.o
+ snd-soc-tosa-objs := tosa.o
+ snd-soc-spitz-objs := spitz.o
++snd-soc-ezx-objs := ezx.o
+
+ obj-$(CONFIG_SND_PXA2XX_SOC_CORGI) += snd-soc-corgi.o
+ obj-$(CONFIG_SND_PXA2XX_SOC_POODLE) += snd-soc-poodle.o
+ obj-$(CONFIG_SND_PXA2XX_SOC_TOSA) += snd-soc-tosa.o
+ obj-$(CONFIG_SND_PXA2XX_SOC_SPITZ) += snd-soc-spitz.o
+-
++obj-$(CONFIG_SND_PXA2XX_SOC_EZX) += snd-soc-ezx.o
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch
new file mode 100644
index 0000000000..a2a707014d
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch
@@ -0,0 +1,203 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+Index: linux-2.6.24/drivers/video/backlight/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/video/backlight/Kconfig
++++ linux-2.6.24/drivers/video/backlight/Kconfig
+@@ -90,3 +90,12 @@
+ help
+ If you have a Intel LE80578 (Carillo Ranch) say Y to enable the
+ backlight driver.
++
++config BACKLIGHT_EZX
++ tristate "Motorola EXZ Backlight Driver (A780/E680/E680i)"
++ depends on BACKLIGHT_CLASS_DEVICE && PXA_EZX
++ default y
++ help
++ If you have a Motorola A780 or E680(i), say y to enable the
++ backlight driver.
++
+Index: linux-2.6.24/drivers/video/backlight/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/video/backlight/Makefile
++++ linux-2.6.24/drivers/video/backlight/Makefile
+@@ -9,3 +9,4 @@
+ obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
+ obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
+ obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o
++obj-$(CONFIG_BACKLIGHT_EZX) += ezx_bl.o
+Index: linux-2.6.24/drivers/video/backlight/ezx_bl.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/video/backlight/ezx_bl.c
+@@ -0,0 +1,142 @@
++/*
++ * Backlight Driver for Motorola A780 and E680(i) GSM Phones.
++ *
++ * Copyright 2006 Vanille Media
++ *
++ * Author: Michael Lauer <mickey@Vanille.de>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++#include <linux/backlight.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx.h>
++
++#define EZX_MIN_INTENSITY 0
++#define EZX_MAX_INTENSITY 50
++#define EZX_DEFAULT_INTENSITY 30
++
++static struct backlight_device *ezx_backlight_device;
++static int last_intensity;
++static int suspended;
++
++static int ezxbl_send_intensity(struct backlight_device *bd)
++{
++ int intensity = bd->props.brightness;
++
++ if (suspended || bd->props.power != FB_BLANK_UNBLANK ||
++ bd->props.fb_blank != FB_BLANK_UNBLANK)
++ intensity = 0;
++
++ if ( !last_intensity && intensity ) {
++ PWM_CTRL0 = 2; /* pre-scaler */
++ PWM_PWDUTY0 = intensity; /* duty cycle */
++ PWM_PERVAL0 = 49; /* period */
++ pxa_gpio_mode(GPIO16_PWM0_MD); /* set GPIO16 as alternate function + output */
++ pxa_set_cken(CKEN_PWM0, 1); /* clock enable */
++ }
++ else if ( last_intensity && !intensity ) {
++ PWM_PWDUTY0 = 0;
++ GAFR0_U &= 0xFFFFFFFC; /* ??? */
++ pxa_set_cken(CKEN_PWM0, 0); /* clock disable */
++ pxa_gpio_mode(GPIO16_PWM0); /* set GPIO16 as input */
++ } else if ( last_intensity && intensity ) {
++ PWM_PWDUTY0 = intensity; /* duty cycle */
++ }
++ last_intensity = intensity;
++ return 0;
++}
++
++static int ezxbl_get_intensity(struct backlight_device *bd)
++{
++ return last_intensity;
++}
++
++static int ezxbl_set_intensity(struct backlight_device *bd)
++{
++ return ezxbl_send_intensity(ezx_backlight_device);
++}
++
++#ifdef CONFIG_PM
++static int ezxbl_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ suspended = 1;
++ ezxbl_set_intensity(ezx_backlight_device);
++ return 0;
++}
++
++static int ezxbl_resume(struct platform_device *pdev)
++{
++ suspended = 0;
++ ezxbl_set_intensity(ezx_backlight_device);
++ return 0;
++}
++#else
++#define ezxbl_suspend NULL
++#define ezxbl_resume NULL
++#endif
++
++static struct backlight_ops ezxbl_ops = {
++ .get_brightness = ezxbl_get_intensity,
++ .update_status = ezxbl_set_intensity,
++};
++
++static int __init ezxbl_probe(struct platform_device *pdev)
++{
++ ezx_backlight_device = backlight_device_register ("ezx-bl",
++ &pdev->dev, NULL, &ezxbl_ops);
++ if (IS_ERR (ezx_backlight_device))
++ return PTR_ERR (ezx_backlight_device);
++
++ platform_set_drvdata(pdev, ezx_backlight_device);
++
++ ezx_backlight_device->props.power = FB_BLANK_UNBLANK;
++ ezx_backlight_device->props.max_brightness = EZX_MAX_INTENSITY;
++ ezx_backlight_device->props.brightness = EZX_DEFAULT_INTENSITY;
++ ezxbl_set_intensity(ezx_backlight_device);
++ backlight_update_status(ezx_backlight_device);
++
++ return 0;
++}
++
++static int ezxbl_remove(struct platform_device *pdev)
++{
++ backlight_device_unregister(ezx_backlight_device);
++ return 0;
++}
++
++static struct platform_driver ezxbl_driver = {
++ .probe = ezxbl_probe,
++ .remove = ezxbl_remove,
++ .suspend = ezxbl_suspend,
++ .resume = ezxbl_resume,
++ .driver = {
++ .name = "ezx-bl",
++ },
++};
++
++static int __init ezxbl_init(void)
++{
++ return platform_driver_register(&ezxbl_driver);
++}
++
++static void __exit ezxbl_exit(void)
++{
++ platform_driver_unregister(&ezxbl_driver);
++}
++
++module_init(ezxbl_init);
++module_exit(ezxbl_exit);
++
++MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>");
++MODULE_DESCRIPTION("Backlight Driver for Motorola A780|E680(i)");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/ezx.c
++++ linux-2.6.24/arch/arm/mach-pxa/ezx.c
+@@ -66,6 +66,12 @@
+ #endif
+ EXPORT_SYMBOL_GPL(ezx_backlight_power);
+
++/* EZX LCD Backlight */
++static struct platform_device ezxbacklight_device = {
++ .name = "ezx-bl",
++ .id = -1,
++};
++
+ /* OHCI Controller */
+ static int ezx_ohci_init(struct device *dev)
+ {
+@@ -107,6 +113,7 @@
+
+ static struct platform_device *devices[] __initdata = {
+ &ezxbp_device,
++ &ezxbacklight_device,
+ };
+
+ /* PM */
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch
new file mode 100644
index 0000000000..e45cb4bd22
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-bp.patch
@@ -0,0 +1,351 @@
+This patch adds support for the handshake with the BP (baseband processor)
+of the Motorola EZX smartphones.
+
+Signed-off-by: Daniel Ribeiro <wyrm@openezx.org>
+
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/ezx.c
++++ linux-2.6.24/arch/arm/mach-pxa/ezx.c
+@@ -19,6 +19,7 @@
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/ohci.h>
+ #include <asm/arch/ezx.h>
++#include <asm/arch/ezx-bp.h>
+
+ #include "generic.h"
+
+@@ -86,8 +87,25 @@
+ .init = ezx_ohci_init,
+ };
+
++/* BP */
++static struct ezxbp_config ezxbp_data = {
++ .gpio_reset = GPIO_BB_RESET,
++ .gpio_wdi = GPIO_BB_WDI,
++ .gpio_wdi2 = GPIO_BB_WDI2,
++ .gpio_rdy = GPIO_BP_RDY,
++ .gpio_mcu_int_sw = GPIO_MCU_INT_SW,
++};
++
++static struct platform_device ezxbp_device = {
++ .name = "ezx-bp",
++ .dev = {
++ .platform_data = &ezxbp_data,
++ },
++ .id = -1,
++};
+
+ static struct platform_device *devices[] __initdata = {
++ &ezxbp_device,
+ };
+
+ static int __init ezx_init(void)
+Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig
++++ linux-2.6.24/arch/arm/mach-pxa/Kconfig
+@@ -133,6 +133,12 @@
+
+ endchoice
+
++config EZX_BP
++ bool "Baseband Processor control for EZX platform"
++ help
++ This enables control code for the BP (baseband processor) found in
++ Motorola's EZX smartphone platform.
++
+ endif
+
+ endmenu
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx-bp.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/mach-pxa/ezx-bp.c
+@@ -0,0 +1,261 @@
++/*
++ * BP handshake code for Motorola EZX phones
++ *
++ * Copyright (c) 2007 Daniel Ribeiro <wyrm@openezx.org>
++ *
++ * Based on Motorola's a780.c Copyright (c) 2003-2005 Motorola
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/interrupt.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <asm/mach/irq.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++
++#include <asm/arch/ezx.h>
++#include <asm/arch/ezx-bp.h>
++
++/* BP Handshake */
++#define FIRST_STEP 2
++#define LAST_STEP 3
++#define BP_RDY_TIMEOUT 0x000c0000
++
++#if 1
++#define DEBUGP(x, args ...) printk(x, ##args)
++#else
++#define DEBUGP(x, args ...)
++#endif
++
++extern void usb_send_readurb(void);
++
++static struct ezxbp_config *bp;
++
++/* check power down condition */
++static inline void check_power_off(void)
++{
++ if (pxa_gpio_get_value(bp->gpio_wdi2) == 0) {
++ DEBUGP("BP request poweroff!\n");
++ /*
++ * It is correct to power off here, the following line is
++ * commented out because e680 lowers WDI2 when BP is in
++ * flash mode, otherwise WDI2 is used to detect low
++ * battery. You can safely uncomment this line if you are
++ * using this kernel with BP in normal mode.
++ */
++#if 0 /* some versions of BP firmware doesnt honor this */
++ pm_power_off();
++#endif
++ }
++}
++
++static int step = FIRST_STEP;
++
++inline int bp_handshake_passed(void)
++{
++ return (step > LAST_STEP);
++}
++EXPORT_SYMBOL_GPL(bp_handshake_passed);
++
++static void handshake(void)
++{
++ /* step 1: check MCU_INT_SW or BP_RDY is low (now it is checked in apboot) */
++ DEBUGP("bp handshake entered!\n");
++ if (step == 1) {
++ int timeout = BP_RDY_TIMEOUT;
++
++ /* config MCU_INT_SW, BP_RDY as input */
++ pxa_gpio_mode(bp->gpio_mcu_int_sw | GPIO_IN);
++ pxa_gpio_mode(bp->gpio_rdy | GPIO_IN);
++
++ while (timeout--) {
++ if (pxa_gpio_get_value(bp->gpio_mcu_int_sw) == 0
++ || pxa_gpio_get_value(bp->gpio_rdy) == 0) {
++ step++;
++ break;
++ }
++
++ check_power_off();
++ }
++ DEBUGP("ezx-bp: handshake step 1\n");
++ }
++
++ /* step 2: wait BP_RDY is low */
++ if (step == 2) {
++ if (pxa_gpio_get_value(bp->gpio_rdy) == 0) {
++ /* config MCU_INT_SW as output */
++ pxa_gpio_mode(bp->gpio_mcu_int_sw | GPIO_OUT);
++ pxa_gpio_set_value(bp->gpio_mcu_int_sw, 0);
++
++ step++;
++ DEBUGP("ezx-bp: handshake step 2\n");
++ }
++ }
++
++ /* step 3: wait BP_RDY is high */
++ else if (step == 3) {
++ if (pxa_gpio_get_value(bp->gpio_rdy)) {
++ step++;
++ /* FIXME delay_bklight(); */
++ pxa_gpio_set_value(bp->gpio_mcu_int_sw, 1);
++ printk(KERN_NOTICE "ezx-bp: handshake passed\n");
++ }
++ }
++}
++
++irqreturn_t bp_wdi_handler(int irq, void *dev_id)
++{
++ DEBUGP("BP Lowered WDI line. This is not good :(\n");
++ /*
++ * this means that BP is not responsive.
++ * we could try to reset BP and then handshake again
++ * but i doubt its possible to bring it up again.
++ */
++ return IRQ_HANDLED;
++}
++
++static irqreturn_t bp_rdy_handler(int irq, void *dev_id)
++{
++// struct bp *bp = dev_id;
++ DEBUGP("BP rdy irq\n");
++ if (!bp_handshake_passed()) {
++ handshake();
++ if (bp_handshake_passed()) {
++ /* FIXME: (test) try to not disable irq_wdi2 and drain battery */
++ disable_irq(IRQ_GPIO(bp->gpio_wdi2));
++
++ /* set bp_rdy handle for usb ipc */
++ set_irq_type(IRQ_GPIO(bp->gpio_rdy), IRQT_FALLING);
++ }
++ }
++#ifdef CONFIG_TS0710_MUX_USB
++ else usb_send_readurb();
++#endif
++ return IRQ_HANDLED;
++}
++
++/* BP request for poweroff */
++static irqreturn_t bp_wdi2_handler(int irq, void *dev_id)
++{
++ DEBUGP("BP request poweroff!\n");
++ /* same case as check_power_off() */
++#ifndef CONFIG_PXA_EZX_E680
++ pm_power_off();
++#endif
++ return IRQ_HANDLED;
++}
++
++static int __init ezxbp_probe(struct platform_device *pdev)
++{
++ int ret;
++ bp = pdev->dev.platform_data;
++
++// bp = kzalloc(sizeof(*bp), GFP_KERNEL);
++// if (!bp)
++// return -ENOMEM;
++
++/* bp->irq_rdy = platform_get_irq(dev, 0);
++ if (bp->irq_rdy < 0) {
++ ret = bp->irq_rdy;
++ goto fail;
++ }
++
++ bp->irq_wdi2 = platform_get_irq(dev, 1);
++ if (bp->irq_wdi2 < 0) {
++ ret = bp->irq_wdi2;
++ goto fail;
++ }
++
++ bp->irq_wdi = platform_get_irq(dev, 2);
++ if (bp->irq_wdi < 0) {
++ ret = bp->irq_wdi;
++ goto fail;
++ }
++*/
++
++ set_irq_type(IRQ_GPIO(bp->gpio_wdi), IRQT_FALLING);
++ request_irq(IRQ_GPIO(bp->gpio_wdi), bp_wdi_handler, IRQF_DISABLED,
++ "bp wdi", bp);
++
++ set_irq_type(IRQ_GPIO(bp->gpio_rdy), IRQT_BOTHEDGE);
++ request_irq(IRQ_GPIO(bp->gpio_rdy), bp_rdy_handler, IRQF_DISABLED,
++ "bp rdy", bp);
++
++ set_irq_type(IRQ_GPIO(bp->gpio_wdi2), IRQT_FALLING);
++ request_irq(IRQ_GPIO(bp->gpio_wdi2), bp_wdi2_handler, IRQF_DISABLED,
++ "bp wdi2", bp);
++
++ /* turn on BP */
++ pxa_gpio_mode(bp->gpio_reset|GPIO_OUT);
++ pxa_gpio_set_value(bp->gpio_reset, 1);
++
++ check_power_off();
++ handshake();
++
++ return 0;
++fail:
++ kfree(bp);
++ return ret;
++}
++
++static int ezxbp_remove(struct platform_device *dev)
++{
++// struct bp *bp = platform_get_drvdata(dev);
++
++ free_irq(IRQ_GPIO(bp->gpio_wdi), bp);
++ free_irq(IRQ_GPIO(bp->gpio_wdi2), bp);
++ free_irq(IRQ_GPIO(bp->gpio_rdy), bp);
++ kfree(bp);
++
++ return 0;
++}
++
++static int ezxbp_suspend(struct platform_device *dev, pm_message_t state)
++{
++ DEBUGP("bp suspend!\n");
++/* pxa_gpio_set_value(bp->gpio_mcu_int_sw, 0); */
++ return 0;
++}
++
++static int ezxbp_resume(struct platform_device *dev)
++{
++ DEBUGP("bp resume!\n");
++/* pxa_gpio_set_value(bp->gpio_mcu_int_sw, 1); */
++ return 0;
++}
++static struct platform_driver ezxbp_driver = {
++ .probe = ezxbp_probe,
++ .remove = ezxbp_remove,
++#warning FIXME: missing suspend/resume support
++ .suspend = ezxbp_suspend,
++ .resume = ezxbp_resume,
++ .driver = {
++ .name = "ezx-bp",
++ .owner = THIS_MODULE,
++ },
++};
++
++int __init ezxbp_init(void)
++{
++ return platform_driver_register(&ezxbp_driver);
++}
++
++void ezxbp_fini(void)
++{
++ return platform_driver_unregister(&ezxbp_driver);
++}
++
++module_init(ezxbp_init);
++module_exit(ezxbp_fini);
++
++MODULE_DESCRIPTION("Motorola BP Control driver");
++MODULE_AUTHOR("Daniel Ribeiro <wyrm@openezx.org>");
++MODULE_LICENSE("GPL");
++
+Index: linux-2.6.24/arch/arm/mach-pxa/Makefile
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile
++++ linux-2.6.24/arch/arm/mach-pxa/Makefile
+@@ -36,6 +36,7 @@
+ obj-$(CONFIG_PXA_EZX_E2) += ezx-e2.o
+ obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o
+ obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o
++obj-$(CONFIG_EZX_BP) += ezx-bp.o
+
+ # Support for blinky lights
+ led-y := leds.o
+Index: linux-2.6.24/include/asm-arm/arch-pxa/ezx-bp.h
+===================================================================
+--- /dev/null
++++ linux-2.6.24/include/asm-arm/arch-pxa/ezx-bp.h
+@@ -0,0 +1,8 @@
++struct ezxbp_config {
++ /* gpios for handshake */
++ int gpio_reset;
++ int gpio_wdi;
++ int gpio_wdi2;
++ int gpio_rdy;
++ int gpio_mcu_int_sw;
++};
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch
new file mode 100644
index 0000000000..6221a88794
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-core.patch
@@ -0,0 +1,1042 @@
+This patch adds the core EZX support for the Motorola E680/A780/A1200/E6
+smartphones.
+
+Signed-off-by: Daniel Ribeiro <wyrm@openezx.org>
+Signed-off-by: Harald Welte <laforge@openezx.org>
+
+Index: linux-2.6.24/arch/arm/boot/compressed/head-xscale.S
+===================================================================
+--- linux-2.6.24.orig/arch/arm/boot/compressed/head-xscale.S
++++ linux-2.6.24/arch/arm/boot/compressed/head-xscale.S
+@@ -44,3 +44,6 @@
+ str r1, [r0, #0x18]
+ #endif
+
++#ifdef CONFIG_ARCH_EZX
++ mov r7, #MACH_TYPE_EZX
++#endif
+Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig
++++ linux-2.6.24/arch/arm/mach-pxa/Kconfig
+@@ -68,6 +68,10 @@
+ select PXA27x
+ select IWMMXT
+
++config PXA_EZX
++ bool "Motorola EZX Platform"
++ select PXA_SSP
++
+ endchoice
+
+ if PXA_SHARPSL
+@@ -102,6 +106,35 @@
+
+ endif
+
++if PXA_EZX
++
++choice
++ prompt "Select target EZX device"
++
++config PXA_EZX_E680
++ bool "Motorola E680 GSM Phone"
++ select PXA27x
++
++config PXA_EZX_A780
++ bool "Motorola A780 GSM Phone"
++ select PXA27x
++
++config PXA_EZX_E2
++ bool "Motorola E2 GSM Phone"
++ select PXA27x
++
++config PXA_EZX_A1200
++ bool "Motorola A1200 GSM Phone"
++ select PXA27x
++
++config PXA_EZX_E6
++ bool "Motorola E6 GSM Phone"
++ select PXA27x
++
++endchoice
++
++endif
++
+ endmenu
+
+ config MACH_POODLE
+@@ -180,4 +213,5 @@
+ tristate
+ help
+ Enable support for PXA2xx SSP ports
++
+ endif
+Index: linux-2.6.24/arch/arm/mach-pxa/Makefile
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile
++++ linux-2.6.24/arch/arm/mach-pxa/Makefile
+@@ -30,6 +30,12 @@
+ endif
+
+ obj-$(CONFIG_MACH_ARMCORE) += cm-x270.o
++obj-$(CONFIG_PXA_EZX) += ezx.o
++obj-$(CONFIG_PXA_EZX_A780) += ezx-a780.o
++obj-$(CONFIG_PXA_EZX_E680) += ezx-e680.o
++obj-$(CONFIG_PXA_EZX_E2) += ezx-e2.o
++obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o
++obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o
+
+ # Support for blinky lights
+ led-y := leds.o
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/mach-pxa/ezx.c
+@@ -0,0 +1,118 @@
++/*
++ * ezx.c - Common code for EZX platform.
++ *
++ * Copyright (c) 2005-2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++#include <linux/delay.h>
++
++#include <asm/arch/pxafb.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ohci.h>
++#include <asm/arch/ezx.h>
++
++#include "generic.h"
++
++/* EZX PXA Framebuffer */
++void ezx_lcd_power(int on, struct fb_var_screeninfo *var)
++{
++ if (on) {
++ msleep(1);
++ GPSR3 = 0x00100000;
++ msleep(10);
++ GPCR3 = 0x00100000;
++ GPDR3 |= 0x00100000;
++ } else {
++ GPSR3 = 0x00100000;
++ PGSR3 |= 0x00100000;
++ msleep(41);
++ LCCR0 &= ~LCCR0_LDM; /* disable lcd disable done interrupt */
++ LCCR0 |= LCCR0_DIS; /* normal disable lcd */
++ msleep(18);
++ }
++}
++EXPORT_SYMBOL_GPL(ezx_lcd_power);
++
++/* failsafe if we are not using the backlight platform driver */
++#ifndef CONFIG_BACKLIGHT_EZX
++void ezx_backlight_power(int on)
++{
++ if (on) {
++ pxa_gpio_mode(GPIO16_PWM0_MD);
++ pxa_set_cken(CKEN_PWM0, 1);
++ PWM_CTRL0 = 0;
++ PWM_PWDUTY0 = 0x3ff;
++ PWM_PERVAL0 = 0x3ff;
++ } else {
++ PWM_CTRL0 = 0;
++ PWM_PWDUTY0 = 0x0;
++ PWM_PERVAL0 = 0x3FF;
++ pxa_set_cken(CKEN_PWM0, 0);
++ }
++}
++#else
++void ezx_backlight_power(int on) {}
++#endif
++EXPORT_SYMBOL_GPL(ezx_backlight_power);
++
++/* OHCI Controller */
++static int ezx_ohci_init(struct device *dev)
++{
++ /* for A780 support (connected with Neptune) */
++ pxa_gpio_mode(GPIO30_USB_P3_2); /* GPIO30 - USB_P3_2/ICL_TXENB */
++ pxa_gpio_mode(GPIO31_USB_P3_6); /* GPIO31 - USB_P3_6/ICL_VPOUT */
++ pxa_gpio_mode(GPIO90_USB_P3_5); /* GPIO90 - USB_P3_5/ICL_VPIN */
++ pxa_gpio_mode(GPIO91_USB_P3_1); /* GPIO91 - USB_P3_1/ICL_XRXD */
++ pxa_gpio_mode(GPIO56_USB_P3_4); /* GPIO56 - USB_P3_4/ICL_VMOUT */
++ pxa_gpio_mode(GPIO113_USB_P3_3);/* GPIO113 - USB_P3_3/ICL_VMIN */
++ UP3OCR = 0x00000002;
++
++ UHCHR = UHCHR & ~(UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE);
++
++ return 0;
++}
++
++static struct pxaohci_platform_data ezx_ohci_platform_data = {
++ .port_mode = PMM_NPS_MODE,
++ .init = ezx_ohci_init,
++};
++
++
++static struct platform_device *devices[] __initdata = {
++};
++
++static int __init ezx_init(void)
++{
++ CKEN = (1 << CKEN_OSTIMER) | (1 << CKEN_MEMC);
++
++ pxa_gpio_mode(GPIO_ICL_FFRXD_MD);
++ pxa_gpio_mode(GPIO_ICL_FFTXD_MD);
++ pxa_gpio_mode(GPIO_ICL_FFCTS_MD);
++ pxa_gpio_mode(GPIO_ICL_FFRTS_MD);
++
++ pxa_gpio_mode(GPIO42_BTRXD_MD);
++ pxa_gpio_mode(GPIO43_BTTXD_MD);
++ pxa_gpio_mode(GPIO44_BTCTS_MD);
++ pxa_gpio_mode(GPIO45_BTRTS_MD);
++
++ /* Standard UART */
++ pxa_gpio_mode(GPIO46_STRXD_MD);
++ pxa_gpio_mode(GPIO47_STTXD_MD);
++
++ pxa_set_ohci_info(&ezx_ohci_platform_data);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++
++ return 0;
++}
++
++subsys_initcall(ezx_init);
+Index: linux-2.6.24/include/asm-arm/arch-pxa/ezx.h
+===================================================================
+--- /dev/null
++++ linux-2.6.24/include/asm-arm/arch-pxa/ezx.h
+@@ -0,0 +1,225 @@
++/*
++ * linux/include/asm-arm/arch-pxa/ezx.h
++ *
++ * Specific macro defines for Motorola Ezx Development Platform
++ *
++ * Author: Zhuang Xiaofan
++ * Created: Nov 25, 2003
++ * Copyright: Motorola Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++/* support E680 p3 and ealier PCB */
++/*#define E680_P3_AND_EARLY*/
++
++#define GPIO_is_high(x) (GPLR(x) & GPIO_bit(x))
++#define set_GPIO(x) (GPSR(x) = GPIO_bit(x))
++#define clr_GPIO(x) (GPCR(x) = GPIO_bit(x))
++
++/*
++ * Flags in memory for sleep use
++ */
++#define FLAG_ADDR PHYS_OFFSET
++#define RESUME_ADDR (PHYS_OFFSET + 4)
++#define BPSIG_ADDR (PHYS_OFFSET + 8)
++
++#define USER_OFF_FLAG 0x5a5a5a5a
++#define SLEEP_FLAG 0x6b6b6b6b
++#define OFF_FLAG 0x7c7c7c7c
++#define REFLASH_FLAG 0x0C1D2E3F
++#define PASS_THRU_FLAG 0x12345678
++
++#define WDI_FLAG 0xbb00dead
++#define NO_FLAG 0xaa00dead
++
++/*
++ * GPIO control pin, have to change when hardware lock down
++ */
++
++#ifdef E680_P3_AND_EARLY
++
++/* shakehand with BP's PIN */
++#define GPIO_BP_RDY 0 /* BP_RDY */
++#define GPIO_BB_WDI 13 /* BB_WDI */
++#define GPIO_BB_WDI2 3 /* BB_WDI2 */
++#define GPIO_BB_RESET 57 /* BB_RESET */
++#define GPIO_MCU_INT_SW 115 /* MCU_INT_SW */
++#define GPIO_TC_MM_EN 89 /* TC_MM_EN */
++
++/* control PCAP direct PIN */
++#define GPIO_WDI_AP 4 /* WDI_AP */
++#define GPIO_SYS_RESTART 55 /* restart PCAP power */
++#define GPIO_AP_STANDBY 28 /* make pcap enter standby mode */
++
++/* communicate with PCAP's PIN */
++#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */
++#define GPIO_SPI_CLK 23 /* PCAP SPI port clock */
++#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */
++#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */
++#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */
++
++/* blue tooth control PIN */
++#define GPIO_BT_WAKEUP 2 /* AP wake up bluetooth module */
++#define GPIO_BT_HOSTWAKE 14 /* bluetooth module wake up Ap module */
++#define GPIO_BT_RESET 56 /* AP reset bluetooth module */
++
++/* control LCD high - OFF low -- ON */
++#define GPIO_LCD_OFF 116 /* control LCD */
++
++/* FFUART PIN */
++#define GPIO_ICL_FFRXD_MD (34 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT)
++#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT)
++
++#elif defined(A780_P1_AND_EARLY)
++
++/* shakehand with BP's PIN */
++#define GPIO_BP_RDY 0 /* BP_RDY */
++#define GPIO_BB_WDI 13 /* BB_WDI */
++#define GPIO_BB_WDI2 3 /* BB_WDI2 */
++#define GPIO_BB_RESET 82 /* BB_RESET */
++#define GPIO_MCU_INT_SW 57 /* MCU_INT_SW */
++#define GPIO_TC_MM_EN 89 /* TC_MM_EN */
++
++/* control PCAP direct PIN */
++#define GPIO_WDI_AP 4 /* WDI_AP */
++#define GPIO_SYS_RESTART 55 /* restart PCAP power */
++#define GPIO_AP_STANDBY 28 /* make pcap enter standby mode */
++
++/* communicate with PCAP's PIN */
++#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */
++#define GPIO_SPI_CLK 29 /* PCAP SPI port clock */
++#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */
++#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */
++#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */
++
++/* blue tooth control PIN */
++#define GPIO_BT_WAKEUP 2 /* AP wake up bluetooth module */
++#define GPIO_BT_HOSTWAKE 14 /* bluetooth module wake up Ap module */
++#define GPIO_BT_RESET 56 /* AP reset bluetooth module */
++
++/* control LCD high - OFF low -- ON */
++#define GPIO_LCD_OFF 116 /* control LCD */
++
++/* FFUART PIN */
++#define GPIO_ICL_FFRXD_MD (53 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT)
++#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT)
++
++#else
++
++/* shakehand with BP's PIN */
++#define GPIO_BP_RDY 0 /* BP_RDY */
++#define GPIO_BB_WDI 13 /* BB_WDI */
++#define GPIO_BB_WDI2 3 /* BB_WDI2 */
++#define GPIO_BB_RESET 82 /* BB_RESET */
++#define GPIO_MCU_INT_SW 57 /* MCU_INT_SW */
++#define GPIO_TC_MM_EN 99 /* TC_MM_EN */
++
++/* control PCAP direct PIN */
++#define GPIO_WDI_AP 4 /* WDI_AP */
++#define GPIO_SYS_RESTART 55 /* restart PCAP power */
++/*#define GPIO_AP_STANDBY 28 */ /* make pcap enter standby mode */
++
++/* communicate with PCAP's PIN */
++#define GPIO_PCAP_SEC_INT 1 /* PCAP interrupt PIN to AP */
++#define GPIO_SPI_CLK 29 /* PCAP SPI port clock */
++#define GPIO_SPI_CE 24 /* PCAP SPI port SSPFRM */
++#define GPIO_SPI_MOSI 25 /* PCAP SPI port SSPTXD */
++#define GPIO_SPI_MISO 26 /* PCAP SPI port SSPRXD */
++
++/* blue tooth control PIN */
++#define GPIO_BT_WAKEUP 28 /* AP wake up bluetooth module */
++#define GPIO_BT_HOSTWAKE 14 /* AP wake up bluetooth module */
++#define GPIO_BT_RESET 48 /* AP reset bluetooth module */
++
++/* control LCD high - OFF low -- ON */
++#define GPIO_LCD_OFF 116 /* control LCD */
++
++/* FFUART PIN */
++#define GPIO_ICL_FFRXD_MD (53 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFCTS_MD (35 | GPIO_ALT_FN_1_IN)
++#define GPIO_ICL_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT)
++#define GPIO_ICL_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT)
++
++#endif
++/*
++ * ezx platform, wake up source edge detect bit
++ */
++#define PEDR_INT_SEC 1
++
++#define GPIO_FLIP_PIN 12
++/*E680 screen lock button*/
++
++#define GPIO_LOCK_SCREEN_PIN GPIO_FLIP_PIN
++
++/* MMC interface */
++#define GPIO_MMC_DETECT 11
++#define GPIO_MMC_CLK 32
++#define GPIO_MMC_DATA0 92
++#define GPIO_MMC_WP 107
++#define GPIO_MMC_DATA1 109
++#define GPIO_MMC_DATA2 110
++#define GPIO_MMC_DATA3 111
++#define GPIO_MMC_CMD 112
++
++/* interface function */
++#define GPIO_MMC_CLK_MD (GPIO_MMC_CLK | GPIO_ALT_FN_2_OUT)
++#define GPIO_MMC_DATA0_MD (GPIO_MMC_DATA0 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT)
++#define GPIO_MMC_DATA1_MD (GPIO_MMC_DATA1 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT)
++#define GPIO_MMC_DATA2_MD (GPIO_MMC_DATA2 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT)
++#define GPIO_MMC_DATA3_MD (GPIO_MMC_DATA3 | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT)
++
++#define GPIO_MMC_CMD_MD (GPIO_MMC_CMD | GPIO_ALT_FN_1_IN | GPIO_ALT_FN_1_OUT)
++
++/* EMU GPIO 119 ---MUX2 120 --- MUX1 */
++#define GPIO_EMU_MUX1 120
++#define GPIO_EMU_MUX2 119
++#define GPIO_SNP_INT_CTL 86
++#define GPIO_SNP_INT_IN 87
++
++
++/* audio related pins */
++#define AP_13MHZ_OUTPUT_PIN 9
++
++#ifdef CONFIG_ARCH_EZX_E680
++#define GPIO_VA_SEL_BUL 79
++#define GPIO_FLT_SEL_BUL 80 /* out filter select pin */
++#define GPIO_MIDI_RESET 78 /* GPIO used by MIDI chipset */
++#define GPIO_MIDI_CS 33
++#define GPIO_MIDI_IRQ 15
++#define GPIO_MIDI_NPWE 49
++#define GPIO_MIDI_RDY 18
++#endif
++
++#ifdef CONFIG_ARCH_EZX_A780
++#define GPIO_HW_ATTENUATE_A780 96 /* hw noise attenuation be used or bypassed, for receiver or louderspeaker mode */
++#endif
++
++
++/* bp status pin */
++#define GPIO_BP_STATE 41
++
++/* define usb related pin */
++#define GPIO34_TXENB 34
++#define GPIO35_XRXD 35
++#define GPIO36_VMOUT 36
++#define GPIO39_VPOUT 39
++#define GPIO40_VPIN 40
++#define GPIO53_VMIN 53
++
++/* USB client 6 pin defination */
++#define GPIO34_TXENB_MD (GPIO34_TXENB | GPIO_ALT_FN_1_OUT)
++#define GPIO35_XRXD_MD (GPIO35_XRXD | GPIO_ALT_FN_2_IN)
++#define GPIO36_VMOUT_MD (GPIO36_VMOUT | GPIO_ALT_FN_1_OUT)
++#define GPIO39_VPOUT_MD (GPIO39_VPOUT | GPIO_ALT_FN_1_OUT)
++#define GPIO40_VPIN_MD (GPIO40_VPIN | GPIO_ALT_FN_3_IN)
++#define GPIO53_VMIN_MD (GPIO53_VMIN | GPIO_ALT_FN_2_IN)
++
++#define GPIO53_FFRXD_MD (53 | GPIO_ALT_FN_1_IN)
++
+Index: linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h
++++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
+@@ -859,6 +859,8 @@
+ #define UP2OCR_HXOE (1 << 17) /* Host Port 2 Transceiver Output Enable */
+ #define UP2OCR_SEOS (1 << 24) /* Single-Ended Output Select */
+
++#define UP3OCR __REG(0x40600024) /* USB Port 3 Output Control register */
++
+ #define UDCCSN(x) __REG2(0x40600100, (x) << 2)
+ #define UDCCSR0 __REG(0x40600100) /* UDC Control/Status register - Endpoint 0 */
+ #define UDCCSR0_SA (1 << 7) /* Setup Active */
+@@ -1262,6 +1264,7 @@
+ #define GPIO33_nCS_5 33 /* chip select 5 */
+ #define GPIO34_FFRXD 34 /* FFUART receive */
+ #define GPIO34_MMCCS0 34 /* MMC Chip Select 0 */
++#define GPIO34_USB_P2_2 34 /* USB Port2 Pin 2 */
+ #define GPIO35_FFCTS 35 /* FFUART Clear to send */
+ #define GPIO36_FFDCD 36 /* FFUART Data carrier detect */
+ #define GPIO37_FFDSR 37 /* FFUART data set ready */
+@@ -1375,6 +1378,7 @@
+ #define GPIO18_RDY_MD (18 | GPIO_ALT_FN_1_IN)
+ #define GPIO19_DREQ1_MD (19 | GPIO_ALT_FN_1_IN)
+ #define GPIO20_DREQ0_MD (20 | GPIO_ALT_FN_1_IN)
++#define GPIO22_SCLK2_MD (22 | GPIO_ALT_FN_3_IN)
+ #define GPIO23_SCLK_MD (23 | GPIO_ALT_FN_2_OUT)
+ #define GPIO24_SFRM_MD (24 | GPIO_ALT_FN_2_OUT)
+ #define GPIO25_STXD_MD (25 | GPIO_ALT_FN_2_OUT)
+@@ -1385,23 +1389,33 @@
+ #define GPIO28_BITCLK_OUT_I2S_MD (28 | GPIO_ALT_FN_1_OUT)
+ #define GPIO29_SDATA_IN_AC97_MD (29 | GPIO_ALT_FN_1_IN)
+ #define GPIO29_SDATA_IN_I2S_MD (29 | GPIO_ALT_FN_2_IN)
++#define GPIO29_SCLK_MD (29 | GPIO_ALT_FN_3_IN)
+ #define GPIO30_SDATA_OUT_AC97_MD (30 | GPIO_ALT_FN_2_OUT)
+ #define GPIO30_SDATA_OUT_I2S_MD (30 | GPIO_ALT_FN_1_OUT)
++#define GPIO30_USB_P3_2 (30 | GPIO_ALT_FN_3_OUT)
+ #define GPIO31_SYNC_I2S_MD (31 | GPIO_ALT_FN_1_OUT)
+ #define GPIO31_SYNC_AC97_MD (31 | GPIO_ALT_FN_2_OUT)
++#define GPIO31_USB_P3_6 (31 | GPIO_ALT_FN_3_OUT)
+ #define GPIO32_SDATA_IN1_AC97_MD (32 | GPIO_ALT_FN_1_IN)
+ #define GPIO32_SYSCLK_I2S_MD (32 | GPIO_ALT_FN_1_OUT)
+ #define GPIO32_MMCCLK_MD ( 32 | GPIO_ALT_FN_2_OUT)
+ #define GPIO33_nCS_5_MD (33 | GPIO_ALT_FN_2_OUT)
+ #define GPIO34_FFRXD_MD (34 | GPIO_ALT_FN_1_IN)
+ #define GPIO34_MMCCS0_MD (34 | GPIO_ALT_FN_2_OUT)
++#define GPIO34_USB_P2_2_MD (34 | GPIO_ALT_FN_1_OUT)
+ #define GPIO35_FFCTS_MD (35 | GPIO_ALT_FN_1_IN)
++#define GPIO35_USB_P2_1_MD (35 | GPIO_ALT_FN_2_IN)
+ #define GPIO36_FFDCD_MD (36 | GPIO_ALT_FN_1_IN)
++#define GPIO36_USB_P2_4_MD (36 | GPIO_ALT_FN_1_OUT)
+ #define GPIO37_FFDSR_MD (37 | GPIO_ALT_FN_1_IN)
++#define GPIO37_SFRM2_MD (37 | GPIO_ALT_FN_2_IN)
+ #define GPIO38_FFRI_MD (38 | GPIO_ALT_FN_1_IN)
++#define GPIO38_STXD2_MD (38 | GPIO_ALT_FN_2_OUT)
+ #define GPIO39_MMCCS1_MD (39 | GPIO_ALT_FN_1_OUT)
+ #define GPIO39_FFTXD_MD (39 | GPIO_ALT_FN_2_OUT)
++#define GPIO39_USB_P2_6_MD (39 | GPIO_ALT_FN_1_OUT)
+ #define GPIO40_FFDTR_MD (40 | GPIO_ALT_FN_2_OUT)
++#define GPIO40_USB_P2_5_MD (40 | GPIO_ALT_FN_3_IN)
+ #define GPIO41_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT)
+ #define GPIO42_BTRXD_MD (42 | GPIO_ALT_FN_1_IN)
+ #define GPIO42_HWRXD_MD (42 | GPIO_ALT_FN_3_IN)
+@@ -1426,13 +1440,17 @@
+ #define GPIO51_HWRTS_MD (51 | GPIO_ALT_FN_1_OUT)
+ #define GPIO51_nPIOW_MD (51 | GPIO_ALT_FN_2_OUT)
+ #define GPIO52_nPCE_1_MD (52 | GPIO_ALT_FN_2_OUT)
++#define GPIO52_SCLK3_MD (52 | GPIO_ALT_FN_2_OUT)
+ #define GPIO53_nPCE_2_MD (53 | GPIO_ALT_FN_2_OUT)
+ #define GPIO53_MMCCLK_MD (53 | GPIO_ALT_FN_1_OUT)
++#define GPIO53_FFRXD_MD (53 | GPIO_ALT_FN_1_IN)
++#define GPIO53_USB_P2_3_MD (53 | GPIO_ALT_FN_2_IN)
+ #define GPIO54_MMCCLK_MD (54 | GPIO_ALT_FN_1_OUT)
+ #define GPIO54_nPCE_2_MD (54 | GPIO_ALT_FN_2_OUT)
+ #define GPIO54_pSKTSEL_MD (54 | GPIO_ALT_FN_2_OUT)
+ #define GPIO55_nPREG_MD (55 | GPIO_ALT_FN_2_OUT)
+ #define GPIO56_nPWAIT_MD (56 | GPIO_ALT_FN_1_IN)
++#define GPIO56_USB_P3_4 (56 | GPIO_ALT_FN_1_OUT)
+ #define GPIO57_nIOIS16_MD (57 | GPIO_ALT_FN_1_IN)
+ #define GPIO58_LDD_0_MD (58 | GPIO_ALT_FN_2_OUT)
+ #define GPIO59_LDD_1_MD (59 | GPIO_ALT_FN_2_OUT)
+@@ -1468,13 +1486,19 @@
+ #define GPIO80_nCS_4_MD (80 | GPIO_ALT_FN_2_OUT)
+ #define GPIO81_NSSP_CLK_OUT (81 | GPIO_ALT_FN_1_OUT)
+ #define GPIO81_NSSP_CLK_IN (81 | GPIO_ALT_FN_1_IN)
++#define GPIO81_STXD3_MD (81 | GPIO_ALT_FN_1_OUT)
+ #define GPIO82_NSSP_FRM_OUT (82 | GPIO_ALT_FN_1_OUT)
+ #define GPIO82_NSSP_FRM_IN (82 | GPIO_ALT_FN_1_IN)
+ #define GPIO83_NSSP_TX (83 | GPIO_ALT_FN_1_OUT)
+ #define GPIO83_NSSP_RX (83 | GPIO_ALT_FN_2_IN)
++#define GPIO83_SFRM3_MD (83 | GPIO_ALT_FN_1_IN)
+ #define GPIO84_NSSP_TX (84 | GPIO_ALT_FN_1_OUT)
+ #define GPIO84_NSSP_RX (84 | GPIO_ALT_FN_2_IN)
+ #define GPIO85_nPCE_1_MD (85 | GPIO_ALT_FN_1_OUT)
++#define GPIO88_SRXD2_MD (88 | GPIO_ALT_FN_2_IN)
++#define GPIO89_SRXD3_MD (89 | GPIO_ALT_FN_1_IN)
++#define GPIO90_USB_P3_5 (90 | GPIO_ALT_FN_2_IN)
++#define GPIO91_USB_P3_1 (91 | GPIO_ALT_FN_2_IN)
+ #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT)
+ #define GPIO102_nPCE_1_MD (102 | GPIO_ALT_FN_1_OUT)
+ #define GPIO104_pSKTSEL_MD (104 | GPIO_ALT_FN_1_OUT)
+@@ -1486,6 +1510,7 @@
+ #define GPIO112_MMCCMD_MD (112 | GPIO_ALT_FN_1_OUT)
+ #define GPIO113_I2S_SYSCLK_MD (113 | GPIO_ALT_FN_1_OUT)
+ #define GPIO113_AC97_RESET_N_MD (113 | GPIO_ALT_FN_2_OUT)
++#define GPIO113_USB_P3_3 (113 | GPIO_ALT_FN_3_IN)
+ #define GPIO117_I2CSCL_MD (117 | GPIO_ALT_FN_1_IN)
+ #define GPIO118_I2CSDA_MD (118 | GPIO_ALT_FN_1_IN)
+
+@@ -1501,6 +1526,7 @@
+ #define PFER __REG(0x40F00014) /* Power Manager GPIO Falling-Edge Detect Enable Register */
+ #define PEDR __REG(0x40F00018) /* Power Manager GPIO Edge Detect Status Register */
+ #define PCFR __REG(0x40F0001C) /* Power Manager General Configuration Register */
++#define PGSR(x) (__REG(0x40F00020 + ((unsigned long)(x)/32*4)))
+ #define PGSR0 __REG(0x40F00020) /* Power Manager GPIO Sleep State Register for GP[31-0] */
+ #define PGSR1 __REG(0x40F00024) /* Power Manager GPIO Sleep State Register for GP[63-32] */
+ #define PGSR2 __REG(0x40F00028) /* Power Manager GPIO Sleep State Register for GP[84-64] */
+Index: linux-2.6.24/arch/arm/boot/compressed/head.S
+===================================================================
+--- linux-2.6.24.orig/arch/arm/boot/compressed/head.S
++++ linux-2.6.24/arch/arm/boot/compressed/head.S
+@@ -117,6 +117,9 @@
+ mov r0, r0
+ .endr
+
++ mov r1, #0x300 @ mach_id 0x363 is official EZX
++ orr r1, r1, #0x63 @ bootloader JUMP doesn't set r1
++
+ b 1f
+ .word 0x016f2818 @ Magic numbers to help the loader
+ .word start @ absolute load/run zImage address
+Index: linux-2.6.24/include/asm-arm/arch-pxa/uncompress.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/arch-pxa/uncompress.h
++++ linux-2.6.24/include/asm-arm/arch-pxa/uncompress.h
+@@ -14,14 +14,14 @@
+ #define STUART ((volatile unsigned long *)0x40700000)
+ #define HWUART ((volatile unsigned long *)0x41600000)
+
+-#define UART FFUART
++#define UART STUART
+
+
+ static inline void putc(char c)
+ {
+- while (!(UART[5] & 0x20))
++/* while (!(UART[5] & 0x40))
+ barrier();
+- UART[0] = c;
++ UART[0] = c;*/
+ }
+
+ /*
+Index: linux-2.6.24/arch/arm/mm/init.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mm/init.c
++++ linux-2.6.24/arch/arm/mm/init.c
+@@ -240,6 +240,10 @@
+ */
+ reserve_bootmem_node(pgdat, boot_pfn << PAGE_SHIFT,
+ boot_pages << PAGE_SHIFT);
++#ifdef CONFIG_PXA_EZX
++ /* reserve the first page memory for exiting sleep and user off */
++ reserve_bootmem_node(pgdat, PHYS_OFFSET, PAGE_SIZE);
++#endif
+
+ #ifdef CONFIG_BLK_DEV_INITRD
+ /*
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx-a780.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/mach-pxa/ezx-a780.c
+@@ -0,0 +1,88 @@
++/*
++ * ezx-a780.c - Code specific to A780 GSM Phone.
++ *
++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxafb.h>
++#include <asm/arch/ezx.h>
++
++#include "generic.h"
++
++extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
++extern void ezx_backlight_power(int);
++
++static struct pxafb_mode_info mode_a780 = {
++ .pixclock = 150000,
++ .xres = 240,
++ .yres = 320,
++ .bpp = 16,
++ .hsync_len = 10,
++ .left_margin = 20,
++ .right_margin = 10,
++ .vsync_len = 2,
++ .upper_margin = 3,
++ .lower_margin = 2,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct pxafb_mach_info a780_fb_info = {
++ .modes = &mode_a780,
++ .num_modes = 1,
++ .lccr0 = 0x002008F8,
++ .lccr3 = 0x0430FF09,
++ .pxafb_backlight_power = &ezx_backlight_power,
++ .pxafb_lcd_power = &ezx_lcd_power,
++};
++
++static struct platform_device *devices[] __initdata = {
++};
++
++static void __init a780_init(void)
++{
++ /* setup sleep mode values */
++ PWER = 0xc0007803; /* disable usb, GPIO15 NC */
++ PFER = 0x00007803;
++ PRER = 0x00001802;
++ PGSR0 = 0x00000010;
++ PGSR1 = 0x02800000;
++ PGSR2 = 0x00040000;
++ PGSR3 = 0x00000008;
++ PCFR = PCFR_DC_EN | PCFR_FS | PCFR_FP | PCFR_OPDE;
++ PSLR = 0x05800f00;
++
++ set_pxa_fb_info(&a780_fb_info);
++
++ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
++ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
++ clr_GPIO(GPIO_EMU_MUX1);
++ pxa_gpio_mode(GPIO_EMU_MUX2|GPIO_OUT);
++ clr_GPIO(GPIO_EMU_MUX2);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++}
++
++MACHINE_START(EZX, "Motorola Ezx Platform")
++ /* Maintainer: OpenEZX Team (www.openezx.org) */
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .boot_params = 0xa0000100,
++ .map_io = pxa_map_io,
++ .init_irq = pxa27x_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = a780_init,
++MACHINE_END
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e2.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/mach-pxa/ezx-e2.c
+@@ -0,0 +1,70 @@
++/*
++ * ezx-e2.c - Code specific to E2 GSM Phone.
++ *
++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxafb.h>
++#include <asm/arch/ezx.h>
++
++#include "generic.h"
++
++extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
++extern void ezx_backlight_power(int);
++
++static struct pxafb_mode_info mode_e2 = {
++ .pixclock = 192308,
++ xres = 240,
++ .yres = 320,
++ .bpp = 8,
++ .hsync_len = 10,
++ .left_margin = 20,
++ .right_margin = 10,
++ .vsync_len = 2,
++ .upper_margin = 3,
++ .lower_margin = 2,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct pxafb_mach_info e2_fb_info = {
++ .modes = &mode_e2,
++ .num_modes = 1,
++ .lccr0 = 0x022008B8,
++ .lccr3 = 0xC130FF13,
++ .pxafb_backlight_power = &ezx_backlight_power,
++ .pxafb_lcd_power = &ezx_lcd_power,
++};
++
++static struct platform_device *devices[] __initdata = {
++};
++
++static void __init e2_init(void)
++{
++ set_pxa_fb_info(&e2_fb_info);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++}
++
++MACHINE_START(EZX, "Motorola Ezx Platform")
++ /* Maintainer: OpenEZX Team (www.openezx.org) */
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .boot_params = 0xa0000200,
++ .map_io = pxa_map_io,
++ .init_irq = pxa27x_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = e2_init,
++MACHINE_END
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c
+@@ -0,0 +1,87 @@
++/*
++ * ezx-e680.c - Code specific to E680 GSM Phone.
++ *
++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxafb.h>
++#include <asm/arch/ezx.h>
++
++#include "generic.h"
++
++extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
++extern void ezx_backlight_power(int);
++
++static struct pxafb_mode_info mode_e680 = {
++ .pixclock = 150000,
++ .xres = 240,
++ .yres = 320,
++ .bpp = 16,
++ .hsync_len = 10,
++ .left_margin = 20,
++ .right_margin = 10,
++ .vsync_len = 2,
++ .upper_margin = 3,
++ .lower_margin = 2,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct pxafb_mach_info e680_fb_info = {
++ .modes = &mode_e680,
++ .num_modes = 1,
++ .lccr0 = 0x002008F8,
++ .lccr3 = 0x0430FF09,
++ .pxafb_backlight_power = &ezx_backlight_power,
++ .pxafb_lcd_power = &ezx_lcd_power,
++};
++
++static struct platform_device *devices[] __initdata = {
++};
++
++static void __init e680_init(void)
++{
++ /* setup sleep mode values */
++ PWER = 0xc000f803; /* disable usb 0xdc00f803; */
++ PFER = 0x0000f803;
++ PRER = 0x00001802;
++ PGSR0 = 0x00000010;
++ PGSR1 = 0x02800000;
++ PGSR2 = 0x00040000;
++ PGSR3 = 0x00000000;
++ PCFR = PCFR_DC_EN | PCFR_FS | PCFR_FP | PCFR_OPDE;
++ PSLR = 0x05800f00;
++
++ set_pxa_fb_info(&e680_fb_info);
++
++ /* clear EMU MUX1/MUX2 (low) to close the audio path to EMU */
++ pxa_gpio_mode(GPIO_EMU_MUX1|GPIO_OUT);
++ clr_GPIO(GPIO_EMU_MUX1);
++ pxa_gpio_mode(GPIO_EMU_MUX2|GPIO_OUT);
++ clr_GPIO(GPIO_EMU_MUX2);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++}
++
++MACHINE_START(EZX, "Motorola Ezx Platform")
++ /* Maintainer: OpenEZX Team (www.openezx.org) */
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .boot_params = 0xa0000100,
++ .map_io = pxa_map_io,
++ .init_irq = pxa27x_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = e680_init,
++MACHINE_END
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx-a1200.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/mach-pxa/ezx-a1200.c
+@@ -0,0 +1,70 @@
++/*
++ * ezx-a1200.c - Code specific to A1200 GSM Phone.
++ *
++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxafb.h>
++#include <asm/arch/ezx.h>
++
++#include "generic.h"
++
++extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
++extern void ezx_backlight_power(int);
++
++static struct pxafb_mode_info mode_a1200 = {
++ .pixclock = 192308,
++ .xres = 240,
++ .yres = 320,
++ .bpp = 8,
++ .hsync_len = 10,
++ .left_margin = 20,
++ .right_margin = 10,
++ .vsync_len = 2,
++ .upper_margin = 3,
++ .lower_margin = 2,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct pxafb_mach_info a1200_fb_info = {
++ .modes = &mode_a1200,
++ .num_modes = 1,
++ .lccr0 = 0x022008B8,
++ .lccr3 = 0xC130FF13,
++ .pxafb_backlight_power = &ezx_backlight_power,
++ .pxafb_lcd_power = &ezx_lcd_power,
++};
++
++static struct platform_device *devices[] __initdata = {
++};
++
++static void __init a1200_init(void)
++{
++ set_pxa_fb_info(&a1200_fb_info);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++}
++
++MACHINE_START(EZX, "Motorola Ezx Platform")
++ /* Maintainer: OpenEZX Team (www.openezx.org) */
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .boot_params = 0xa0000200,
++ .map_io = pxa_map_io,
++ .init_irq = pxa27x_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = a1200_init,
++MACHINE_END
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e6.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/mach-pxa/ezx-e6.c
+@@ -0,0 +1,70 @@
++/*
++ * ezx-e6.c - Code specific to E6 GSM Phone.
++ *
++ * Copyright (c) 2007 OpenEZX Team (www.openezx.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxafb.h>
++#include <asm/arch/ezx.h>
++
++#include "generic.h"
++
++extern void ezx_lcd_power(int, struct fb_var_screeninfo *);
++extern void ezx_backlight_power(int);
++
++static struct pxafb_mode_info mode_e6 = {
++ .pixclock = 192308,
++ .xres = 240,
++ .yres = 320,
++ .bpp = 8,
++ .hsync_len = 10,
++ .left_margin = 20,
++ .right_margin = 10,
++ .vsync_len = 2,
++ .upper_margin = 3,
++ .lower_margin = 2,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct pxafb_mach_info e6_fb_info = {
++ .modes = &mode_e6,
++ .num_modes = 1,
++ .lccr0 = 0x022008B8,
++ .lccr3 = 0xC130FF13,
++ .pxafb_backlight_power = &ezx_backlight_power,
++ .pxafb_lcd_power = &ezx_lcd_power,
++};
++
++static struct platform_device *devices[] __initdata = {
++};
++
++static void __init e6_init(void)
++{
++ set_pxa_fb_info(&e6_fb_info);
++
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++}
++
++MACHINE_START(EZX, "Motorola Ezx Platform")
++ /* Maintainer: OpenEZX Team (www.openezx.org) */
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .boot_params = 0xa0000200,
++ .map_io = pxa_map_io,
++ .init_irq = pxa27x_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = e6_init,
++MACHINE_END
+Index: linux-2.6.24/MAINTAINERS
+===================================================================
+--- linux-2.6.24.orig/MAINTAINERS
++++ linux-2.6.24/MAINTAINERS
+@@ -2581,6 +2581,15 @@
+ W: http://popies.net/meye/
+ S: Maintained
+
++MOTOROLA EZX SMARTPHONES (E680, A780, A1200, E2, E6)
++P: Daniel Ribeiro
++M: wyrm@openezx.org
++P: Harald Welte
++M: laforge@openezx.org
++L: openezx-devel@lists.openezx.org
++W: http://www.openezx.org/
++S: Maintained
++
+ MOTOROLA IMX MMC/SD HOST CONTROLLER INTERFACE DRIVER
+ P: Pavel Pisa
+ M: ppisa@pikron.com
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch
new file mode 100644
index 0000000000..f7ae47751b
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-emu.patch
@@ -0,0 +1,269 @@
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx-emu.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/mach-pxa/ezx-emu.c
+@@ -0,0 +1,219 @@
++/*
++ * EMU Driver for Motorola EZX phones
++ *
++ * Copyright (c) 2007 Daniel Ribeiro <wyrm@openezx.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/kernel.h>
++#include <linux/interrupt.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx.h>
++#include <asm/arch/ezx-pcap.h>
++#include <asm/arch/udc.h>
++
++static struct pxa2xx_udc_mach_info ezx_udc_info;
++extern int ezx_pcap_bit_set(u_int32_t, u_int8_t);
++extern int ezx_pcap_read_bit(u_int32_t);
++static int emu_irq_usb4v;
++static int emu_irq_usb1v;
++
++
++#if defined CONFIG_EZX_EMU_USB
++#define emu_switch_to_default() emu_switch_to_usb()
++#elif defined CONFIG_EZX_EMU_UART
++#define emu_switch_to_default() emu_switch_to_uart()
++#else
++#define emu_switch_to_default() emu_switch_to_nothing()
++#endif
++
++static void emu_switch_to_usb(void)
++{
++ printk(KERN_NOTICE "EMU: Switching to USB\n");
++ pxa_gpio_mode(GPIO34_USB_P2_2_MD);
++ pxa_gpio_mode(GPIO35_USB_P2_1_MD);
++ pxa_gpio_mode(GPIO36_USB_P2_4_MD);
++ pxa_gpio_mode(GPIO39_USB_P2_6_MD);
++ pxa_gpio_mode(GPIO40_USB_P2_5_MD);
++ pxa_gpio_mode(GPIO53_USB_P2_3_MD);
++ UP2OCR = 0x02000000;
++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 1);
++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_FSENB, 0);
++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 1);
++ clr_GPIO(GPIO_EMU_MUX1);
++ clr_GPIO(GPIO_EMU_MUX2);
++}
++
++static void emu_switch_to_uart(void)
++{
++ printk(KERN_NOTICE "EMU: Switching to UART\n");
++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN,0);
++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 0);
++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232_DIR, 1);
++ set_GPIO(GPIO39_FFTXD);
++ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT);
++ set_GPIO(GPIO34_TXENB);
++ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN);
++ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN);
++ pxa_gpio_mode(GPIO39_FFTXD_MD);
++ pxa_gpio_mode(GPIO53_FFRXD_MD);
++ pxa_set_cken(CKEN_FFUART, 1);
++ clr_GPIO(GPIO_EMU_MUX1);
++ clr_GPIO(GPIO_EMU_MUX2);
++
++}
++
++static void emu_switch_to_audio(int stereo)
++{
++ printk(KERN_NOTICE "EMU: Switching to audio(%s)\n", (stereo ? "stereo" : "mono"));
++ clr_GPIO(GPIO39_VPOUT);
++ if (stereo) {
++ pxa_gpio_mode(GPIO34_TXENB | GPIO_IN);
++ clr_GPIO(GPIO39_VPOUT);
++ } else {
++ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT);
++ set_GPIO(GPIO34_TXENB);
++ }
++
++ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN);
++ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO39_VPOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN);
++ pxa_gpio_mode(GPIO53_VMIN | GPIO_IN);
++ set_GPIO(GPIO_EMU_MUX1);
++ if (stereo)
++ set_GPIO(GPIO_EMU_MUX2);
++ else
++ clr_GPIO(GPIO_EMU_MUX2);
++}
++
++static void emu_switch_to_nothing(void)
++{
++ printk(KERN_NOTICE "EMU: Switching to disconnected\n");
++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_VUSB_EN, 0);
++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_RS232ENB, 1);
++ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT);
++ set_GPIO(GPIO34_TXENB);
++ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN);
++ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO39_VPOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN);
++ pxa_gpio_mode(GPIO53_VMIN | GPIO_IN);
++}
++
++
++static irqreturn_t emu_irq(int irq, void *data)
++{
++ switch (irq) {
++ case EZX_IRQ_USB4V:
++ if(ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V)))
++ emu_switch_to_default();
++ break;
++ case EZX_IRQ_USB1V:
++ if(!ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB1V)))
++ emu_switch_to_nothing();
++ break;
++ }
++
++ return IRQ_HANDLED;
++}
++
++static int __init ezx_emu_probe(struct platform_device *dev)
++{
++ pxa_gpio_mode(GPIO_SNP_INT_IN | GPIO_IN);
++ pxa_gpio_mode(GPIO_EMU_MUX1 | GPIO_OUT);
++ pxa_gpio_mode(GPIO_EMU_MUX2 | GPIO_OUT);
++
++ emu_irq_usb4v = platform_get_irq(dev, 0);
++ if(emu_irq_usb4v < 0) {
++ printk(KERN_ERR "Unable to get IRQ for USB4V!\n");
++ return emu_irq_usb4v;
++ }
++ emu_irq_usb1v = platform_get_irq(dev, 1);
++ if(emu_irq_usb1v < 0) {
++ printk(KERN_ERR "Unable to get IRQ for USB1V!\n");
++ return emu_irq_usb1v;
++ }
++
++ request_irq(emu_irq_usb4v, &emu_irq, IRQF_DISABLED, "usb 4v", NULL);
++ request_irq(emu_irq_usb1v, &emu_irq, IRQF_DISABLED, "usb 1v", NULL);
++
++ pxa_set_udc_info(&ezx_udc_info);
++
++ if(ezx_pcap_read_bit(pbit(PCAP_REG_PSTAT, PCAP_IRQ_USB4V)))
++ emu_switch_to_default();
++ else
++ emu_switch_to_nothing();
++
++ return 0;
++}
++
++static int ezx_emu_remove(struct platform_device *dev)
++{
++ free_irq(emu_irq_usb4v, NULL);
++ free_irq(emu_irq_usb1v, NULL);
++
++ return 0;
++}
++
++/* USB Device Controller */
++static int udc_connected_status;
++static void ezx_udc_command(int cmd)
++{
++ switch (cmd) {
++ case PXA2XX_UDC_CMD_DISCONNECT:
++ printk(KERN_NOTICE "USB cmd disconnect\n");
++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,0);
++ udc_connected_status = 0;
++ break;
++ case PXA2XX_UDC_CMD_CONNECT:
++ printk(KERN_NOTICE "USB cmd connect\n");
++ ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,1);
++ udc_connected_status = 1;
++ break;
++ }
++}
++
++static int ezx_udc_is_connected(void)
++{
++ return udc_connected_status;
++}
++
++static struct pxa2xx_udc_mach_info ezx_udc_info __initdata = {
++ .udc_is_connected = ezx_udc_is_connected,
++ .udc_command = ezx_udc_command,
++};
++
++static struct platform_driver ezxemu_driver = {
++ .probe = ezx_emu_probe,
++ .remove = ezx_emu_remove,
++ .driver = {
++ .name = "ezx-emu",
++ .owner = THIS_MODULE,
++ },
++};
++
++int __init ezx_emu_init(void)
++{
++ return platform_driver_register(&ezxemu_driver);
++}
++
++void ezx_emu_fini(void)
++{
++ return platform_driver_unregister(&ezxemu_driver);
++}
++
++module_init(ezx_emu_init);
++module_exit(ezx_emu_fini);
++
++MODULE_DESCRIPTION("Motorola Enchanced Mini Usb driver");
++MODULE_AUTHOR("Daniel Ribeiro <wyrm@openezx.org>");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig
++++ linux-2.6.24/arch/arm/mach-pxa/Kconfig
+@@ -142,6 +142,28 @@
+ config EZX_PCAP
+ bool "PCAP Support"
+
++config EZX_EMU
++ bool "Motorola Enchanced Mini Usb"
++ depends on EZX_PCAP
++
++if EZX_EMU
++
++choice
++ prompt "Select default EMU mode"
++
++config EZX_EMU_USB
++ bool "USB"
++
++config EZX_EMU_UART
++ bool "UART"
++
++config EZX_EMU_NOTHING
++ bool "nothing"
++
++endchoice
++
++endif
++
+ endif
+
+ endmenu
+Index: linux-2.6.24/arch/arm/mach-pxa/Makefile
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile
++++ linux-2.6.24/arch/arm/mach-pxa/Makefile
+@@ -38,6 +38,7 @@
+ obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o
+ obj-$(CONFIG_EZX_BP) += ezx-bp.o
+ obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o
++obj-$(CONFIG_EZX_EMU) += ezx-emu.o
+
+ # Support for blinky lights
+ led-y := leds.o
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-enable-stuart.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-enable-stuart.patch
new file mode 100644
index 0000000000..6f1a2c1ba4
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-enable-stuart.patch
@@ -0,0 +1,99 @@
+Index: linux-2.6.21/arch/arm/boot/compressed/head.S
+===================================================================
+--- linux-2.6.21.orig/arch/arm/boot/compressed/head.S 2007-05-19 11:22:56.000000000 -0300
++++ linux-2.6.21/arch/arm/boot/compressed/head.S 2007-05-19 11:50:29.000000000 -0300
+@@ -10,6 +10,7 @@
+ */
+ #include <linux/linkage.h>
+
++#define DEBUG
+ /*
+ * Debugging stuff
+ *
+@@ -117,6 +118,8 @@
+ mov r0, r0
+ .endr
+
++ inituart r10, r11
++
+ mov r1, #0x300 @ mach_id 0x363 is official EZX
+ orr r1, r1, #0x63 @ bootloader JUMP doesn't set r1
+
+Index: linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h
+===================================================================
+--- linux-2.6.21.orig/include/asm-arm/arch-pxa/uncompress.h 2007-05-19 11:22:56.000000000 -0300
++++ linux-2.6.21/include/asm-arm/arch-pxa/uncompress.h 2007-05-19 11:30:38.000000000 -0300
+@@ -19,9 +19,9 @@
+
+ static inline void putc(char c)
+ {
+-/* while (!(UART[5] & 0x40))
++ while (!(UART[5] & 0x40))
+ barrier();
+- UART[0] = c;*/
++ UART[0] = c;
+ }
+
+ /*
+Index: linux-2.6.21/include/asm-arm/arch-pxa/debug-macro.S
+===================================================================
+--- linux-2.6.21.orig/include/asm-arm/arch-pxa/debug-macro.S 2007-05-19 11:30:54.000000000 -0300
++++ linux-2.6.21/include/asm-arm/arch-pxa/debug-macro.S 2007-05-19 11:49:35.000000000 -0300
+@@ -14,11 +14,52 @@
+ #include "hardware.h"
+
+ .macro addruart,rx
+- mrc p15, 0, \rx, c1, c0
+- tst \rx, #1 @ MMU enabled?
+- moveq \rx, #0x40000000 @ physical
+- movne \rx, #io_p2v(0x40000000) @ virtual
+- orr \rx, \rx, #0x00100000
++@ mrc p15, 0, \rx, c1, c0
++@ tst \rx, #1 @ MMU enabled?
++ mov \rx, #0x40000000
++@ moveq \rx, #0x40000000 @ physical
++@ movne \rx, #io_p2v(0x40000000) @ virtual
++ orr \rx, \rx, #0x00700000
++ .endm
++
++ .macro inituart,rd,rx
++ ldr \rd, =0x41300004 @ CKEN
++ ldr \rx, [\rd]
++ orr \rx, \rx, #0x20
++ str \rx, [\rd]
++
++ ldr \rd, =0x40E0005C
++ ldr \rx, [\rd]
++ bic \rx, \rx, #0xF0000000 @ clear GPIO46/47 config
++ orr \rx, \rx, #0x60000000 @ set GPIO46: AF2, GPIO47: AF1
++ str \rx, [\rd]
++ ldr \rd, =0x40E00010
++ ldr \rx, [\rd]
++ bic \rx, \rx, #0x0000c000 @ clear GPIO46/47 direction
++ orr \rx, \rx, #0x00008000 @ set GPIO 47 out, 46 in
++ str \rx, [\rd]
++
++ addruart \rd
++ mov \rx, #0x83 @ DLAB = 1
++ strb \rx, [\rd, #0x0c]
++
++ mov \rx, #0x08 @ Divisor 8 => 115200 bps
++ strb \rx, [\rd, #0x00]
++
++ mov \rx, #0x00
++ strb \rx, [\rd, #0x04] @ Divisor high = 0
++
++ mov \rx, #0x03
++ strb \rx, [\rd, #0x0c] @ DLAB = 0, n81
++
++ mov \rx, #0x00
++ strb \rx, [\rd, #0x10] @ MCR = 0
++
++ mov \rx, #0x00
++ strb \rx, [\rd, #0x28] @ disable autobaud
++
++ mov \rx, #0x40
++ strb \rx, [\rd, #0x04] @ IER UUE (UART Enable)
+ .endm
+
+ #define UART_SHIFT 2
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-eoc.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-eoc.patch
new file mode 100644
index 0000000000..b7247b881c
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-eoc.patch
@@ -0,0 +1,295 @@
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx-eoc.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/mach-pxa/ezx-eoc.c
+@@ -0,0 +1,261 @@
++/*
++ * EZX EOC Driver for Motorola EZX phones
++ *
++ * Copyright (C) 2007 Alex Zhang <celeber2@gmail.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/i2c.h>
++#include <linux/platform_device.h>
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx.h>
++#include <asm/arch/udc.h>
++
++#if 1
++#define EOC_DBG printk
++#else
++#define EOC_DBG(x, args...)
++#endif
++
++#define REG_INT_STATUS 32
++#define REG_INT_MASK 33
++#define REG_INT_SENSE 34
++#define REG_POWER_CONTROL_0 35
++#define REG_POWER_CONTROL_1 36
++#define REG_CONN_CONTROL 37
++
++#define EOC_REG_ADDR_SIZE 1
++#define EOC_REG_DATA_SIZE 3
++#define EOC_FUNC_NOTHING 0
++#define EOC_FUNC_USB_NET 1
++
++static const char eoc_i2c_driver_name[] = "ezx-eoc";
++static int eoc_func = EOC_FUNC_USB_NET;
++static struct pxa2xx_udc_mach_info ezx_udc_info;
++
++static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter);
++static int ezx_eoc_detach_client(struct i2c_client *client);
++
++static struct i2c_client *eoc_i2c_client = NULL;
++
++static struct i2c_driver eoc_i2c_driver = {
++ .driver = {
++ .name = (char *)eoc_i2c_driver_name,
++ },
++ .attach_adapter = ezx_eoc_attach_adapter,
++ .detach_client = ezx_eoc_detach_client,
++};
++
++int eoc_reg_read(int reg, unsigned int *reg_value)
++{
++ unsigned char reg_num = reg;
++ unsigned char value[EOC_REG_DATA_SIZE];
++ int retval;
++
++ struct i2c_msg msgs[2] =
++ {
++ { eoc_i2c_client->addr, 0, EOC_REG_ADDR_SIZE, &reg_num },
++ { eoc_i2c_client->addr, I2C_M_RD, EOC_REG_DATA_SIZE, value }
++ };
++
++ /* transfer message to client */
++ retval = i2c_transfer(eoc_i2c_client->adapter, msgs, 2);
++ if (retval < 0)
++ return retval;
++
++ *reg_value = (value[2] << 0);
++ *reg_value |= (value[1] << 8);
++ *reg_value |= (value[0] << 16);
++ return 0;
++}
++
++int eoc_reg_write(int reg, unsigned int reg_value)
++{
++ unsigned char value[EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE];
++ int retval;
++
++ /* Copy the data into a buffer into the correct format */
++ value[0] = reg;
++ value[1] = (reg_value >> 16) & 0xFF;
++ value[2] = (reg_value >> 8) & 0xFF;
++ value[3] = (reg_value >> 0) & 0xFF;
++
++ /* Write the data to the EOC */
++ retval = i2c_master_send (eoc_i2c_client, value, EOC_REG_ADDR_SIZE + EOC_REG_DATA_SIZE);
++ if (retval < 0)
++ return retval;
++ return 0;
++}
++
++static void eoc_switch_to_usb(void)
++{
++ EOC_DBG("EOC: Switching to USB\n");
++ pxa_gpio_mode(GPIO34_USB_P2_2_MD);
++ pxa_gpio_mode(GPIO35_USB_P2_1_MD);
++ pxa_gpio_mode(GPIO36_USB_P2_4_MD);
++ pxa_gpio_mode(GPIO39_USB_P2_6_MD);
++ pxa_gpio_mode(GPIO40_USB_P2_5_MD);
++ pxa_gpio_mode(GPIO53_USB_P2_3_MD);
++ UP2OCR = 0x02000000;
++ /* FIXME change eoc bits to USB */
++
++}
++
++static void eoc_switch_to_nothing(void)
++{
++ EOC_DBG("EOC: Switching do disconnected\n");
++ pxa_gpio_mode(GPIO34_TXENB | GPIO_OUT);
++ set_GPIO(GPIO34_TXENB);
++ pxa_gpio_mode(GPIO35_XRXD | GPIO_IN);
++ pxa_gpio_mode(GPIO36_VMOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO39_VPOUT | GPIO_IN);
++ pxa_gpio_mode(GPIO40_VPIN | GPIO_IN);
++ pxa_gpio_mode(GPIO53_VMIN | GPIO_IN);
++ /* FIXME disconnect mini usb port */
++}
++
++static void eoc_switch_to_default(void)
++{
++ switch (eoc_func) {
++ case EOC_FUNC_USB_NET:
++ eoc_switch_to_usb();
++ break;
++ case EOC_FUNC_NOTHING:
++ eoc_switch_to_nothing();
++ break;
++ }
++}
++
++static int ezx_eoc_attach_adapter(struct i2c_adapter *adapter)
++{
++ int err = 0;
++ EOC_DBG(">>>>attach adapter enter\n");
++
++ if (eoc_i2c_client != NULL) {
++ EOC_DBG(">>>>already loaded!!!\n");
++ return 0;
++ }
++
++ if (!(eoc_i2c_client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL)))
++ return -ENOMEM;
++
++ eoc_i2c_client->addr = 0x17;
++ eoc_i2c_client->adapter = adapter;
++ eoc_i2c_client->driver = &eoc_i2c_driver;
++ eoc_i2c_client->flags = 0;
++ strlcpy(eoc_i2c_client->name, eoc_i2c_driver_name, I2C_NAME_SIZE);
++
++ if ((err = i2c_attach_client(eoc_i2c_client))) {
++ kfree(eoc_i2c_client);
++ eoc_i2c_client = NULL;
++ return err;
++ }
++ eoc_reg_write(REG_INT_MASK, 0x0000FEF);
++ eoc_reg_write(REG_POWER_CONTROL_0, 0x0000C00);
++ eoc_reg_write(REG_POWER_CONTROL_1, 0x000000C);
++ eoc_reg_write(REG_CONN_CONTROL,0x0021044);
++
++ eoc_switch_to_default();
++ EOC_DBG(">>>>attach adapter exit\n");
++ return 0;
++
++}
++
++static int ezx_eoc_detach_client(struct i2c_client *client)
++{
++ return i2c_detach_client(client);
++}
++
++static int __init ezx_eoc_probe(struct platform_device *dev)
++{
++ int ret;
++
++ ret = i2c_add_driver(&eoc_i2c_driver);
++ if (ret != 0)
++ return -EINVAL;
++
++ pxa_set_udc_info(&ezx_udc_info);
++
++ return 0;
++}
++
++static int ezx_eoc_remove(struct platform_device *dev)
++{
++ i2c_del_driver(&eoc_i2c_driver);
++ return 0;
++}
++
++static int ezx_eoc_suspend(struct platform_device *dev, pm_message_t state)
++{
++ eoc_switch_to_nothing();
++ return 0;
++}
++
++static int ezx_eoc_resume(struct platform_device *dev)
++{
++ eoc_switch_to_default();
++ return 0;
++}
++
++/* USB Device Controller */
++static int udc_connected_status;
++static void ezx_udc_command(int cmd)
++{
++ switch (cmd) {
++ case PXA2XX_UDC_CMD_DISCONNECT:
++ printk(KERN_NOTICE "USB cmd disconnect\n");
++// ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,0);
++ udc_connected_status = 0;
++ break;
++ case PXA2XX_UDC_CMD_CONNECT:
++ printk(KERN_NOTICE "USB cmd connect\n");
++// ezx_pcap_bit_set(PCAP_BIT_BUSCTRL_USB_PU,1);
++ udc_connected_status = 1;
++ break;
++ }
++}
++
++static int ezx_udc_is_connected(void)
++{
++ return udc_connected_status;
++}
++
++static struct pxa2xx_udc_mach_info ezx_udc_info __initdata = {
++ .udc_is_connected = ezx_udc_is_connected,
++ .udc_command = ezx_udc_command,
++};
++
++static struct platform_driver ezx_eoc_driver = {
++ .probe = ezx_eoc_probe,
++ .remove = ezx_eoc_remove,
++ .suspend = ezx_eoc_suspend,
++ .resume = ezx_eoc_resume,
++ .driver = {
++ .name = "ezx-eoc",
++ .owner = THIS_MODULE,
++ },
++};
++
++int __init ezx_eoc_init(void)
++{
++ return platform_driver_register(&ezx_eoc_driver);
++}
++
++void ezx_eoc_exit(void)
++{
++ return platform_driver_unregister(&ezx_eoc_driver);
++}
++
++MODULE_AUTHOR("Alex Zhang <celeber2@gmail.com>");
++MODULE_DESCRIPTION("EZX EOC I2C driver");
++MODULE_LICENSE("GPL");
++
++module_init(ezx_eoc_init);
++module_exit(ezx_eoc_exit);
+Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig
++++ linux-2.6.24/arch/arm/mach-pxa/Kconfig
+@@ -142,6 +142,12 @@
+ config EZX_PCAP
+ bool "PCAP Support"
+
++config EZX_EOC
++ tristate "EOC i2c driver of Motorola EZX phones"
++ depends on I2C && EXPERIMENTAL
++ help
++ EOC i2c driver of Motorola EZX phones
++
+ config EZX_EMU
+ bool "Motorola Enchanced Mini Usb"
+ depends on EZX_PCAP
+Index: linux-2.6.24/arch/arm/mach-pxa/Makefile
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile
++++ linux-2.6.24/arch/arm/mach-pxa/Makefile
+@@ -39,6 +39,7 @@
+ obj-$(CONFIG_EZX_BP) += ezx-bp.o
+ obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o
+ obj-$(CONFIG_EZX_EMU) += ezx-emu.o
++obj-$(CONFIG_EZX_EOC) += ezx-eoc.o
+
+ # Support for blinky lights
+ led-y := leds.o
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch
new file mode 100644
index 0000000000..9ed4906d78
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-mtd-map.patch
@@ -0,0 +1,309 @@
+Index: linux-2.6.24/drivers/mtd/maps/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/mtd/maps/Kconfig
++++ linux-2.6.24/drivers/mtd/maps/Kconfig
+@@ -588,6 +588,34 @@
+ Map driver for a NOR flash bank located on the Expansion Bus of the
+ Intel Vermilion Range chipset.
+
++config MTD_EZX
++ tristate "Map driver for Motorola EZX Platform"
++ depends on MTD && PXA_EZX
++
++if MTD_EZX
++
++choice
++ prompt "Select partition mapping for EZX platform"
++
++config MTD_EZX_A780
++ bool "A780/E680 Original Mapping"
++
++config MTD_EZX_A780_ALTERNATE
++ bool "A780/E680 Alternate Mapping for BLOB2"
++
++config MTD_EZX_A1200
++ bool "A1200 Original Mapping"
++
++config MTD_EZX_E2
++ bool "E2 Original Mapping"
++
++config MTD_EZX_E6
++ bool "E6 Original Mapping"
++
++endchoice
++
++endif
++
+ config MTD_PLATRAM
+ tristate "Map driver for platform device RAM (mtd-ram)"
+ select MTD_RAM
+Index: linux-2.6.24/drivers/mtd/maps/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/mtd/maps/Makefile
++++ linux-2.6.24/drivers/mtd/maps/Makefile
+@@ -69,3 +69,4 @@
+ obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o
+ obj-$(CONFIG_MTD_MTX1) += mtx-1_flash.o
+ obj-$(CONFIG_MTD_INTEL_VR_NOR) += intel_vr_nor.o
++obj-$(CONFIG_MTD_EZX) += ezx-flash.o
+Index: linux-2.6.24/drivers/mtd/maps/ezx-flash.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/mtd/maps/ezx-flash.c
+@@ -0,0 +1,256 @@
++/*
++ * Map driver for the PXA27x
++ *
++ * Author: Harald Welte
++ * Copyright: (C) 2001 MontaVista Software Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/dma-mapping.h>
++#include <linux/slab.h>
++
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/map.h>
++#include <linux/mtd/partitions.h>
++
++#include <asm/io.h>
++#include <asm/hardware.h>
++#include <asm/cacheflush.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/mainstone.h>
++
++#define WINDOW_ADDR 0x0
++#define WINDOW_SIZE (32*1024*1024)
++#define WINDOW_CACHE_ADDR 0x0
++#define WINDOW_CACHE_SIZE 0x1a00000
++
++static void pxa27x_map_inval_cache(struct map_info *map, unsigned long from,
++ ssize_t len)
++{
++ flush_ioremap_region(map->phys, map->cached, from, len);
++}
++
++
++struct map_info pxa27x_map = {
++ .name = "PXA27x flash",
++ .size = WINDOW_SIZE,
++ .phys = WINDOW_ADDR,
++ .inval_cache = &pxa27x_map_inval_cache,
++};
++
++#if defined CONFIG_MTD_EZX_A780_ALTERNATE
++static struct mtd_partition pxa27x_partitions[] = {
++ {
++ .name = "Bootloader (RO)",
++ .size = 0x00020000,
++ .offset = 0,
++ .mask_flags = MTD_WRITEABLE,
++ }, {
++ .name = "Bootloader 2",
++ .size = 0x00020000,
++ .offset = 0x00020000,
++ } , {
++ .name = "Moto Kernel",
++ .size = 0x000e0000, // 896KB
++ .offset = 0x00040000,
++ } , {
++ .name = "rootfs",
++ .size = 0x01760000,
++ .offset = 0x00120000,
++ } , {
++ .name = "OpenEZX Kernel",
++ .size = 0x00180000, // 1.5MB
++ .offset = 0x01880000,
++ } , {
++ .name = "ezxlocal",
++ .size = 0x005a0000,
++ .offset = 0x01a00000,
++ } , {
++ .name = "setup",
++ .size = 0x00020000,
++ .offset = 0x01fa0000,
++ } , {
++ .name = "Logo",
++ .size = 0x00020000,
++ .offset = 0x01fc0000,
++ },
++};
++#elif defined CONFIG_MTD_EZX_A780
++static struct mtd_partition pxa27x_partitions[] = {
++ {
++ .name = "Bootloader",
++ .size = 0x00020000,
++ .offset = 0,
++ .mask_flags = MTD_WRITEABLE,
++ }, {
++ .name = "Kernel",
++ .size = 0x000e0000,
++ .offset = 0x00020000,
++ } , {
++ .name = "rootfs",
++ .size = 0x018e0000,
++ .offset = 0x00120000,
++ } , {
++ .name = "VFM_Filesystem",
++ .size = 0x00580000,
++ .offset = 0x01a00000,
++ } , {
++ .name = "setup",
++ .size = 0x00020000,
++ .offset = 0x01fa0000,
++ } , {
++ .name = "Logo",
++ .size = 0x00020000,
++ .offset = 0x01fc0000,
++ },
++};
++#elif defined CONFIG_MTD_EZX_A1200
++static struct mtd_partition pxa27x_partitions[] = {
++ {
++ .name = "Caddo 2",
++ .size = 0x00008000,
++ .offset = 0,
++ }, {
++ .name = "Itunes",
++ .size = 0x00008000,
++ .offset = 0x00008000,
++ }, {
++ .name = "Caddo 1",
++ .size = 0x00008000,
++ .offset = 0x00010000,
++ }, {
++ .name = "Fota rev",
++ .size = 0x00008000,
++ .offset = 0x00018000,
++ }, {
++ .name = "MBM",
++ .size = 0x00040000,
++ .offset = 0x00020000,
++ .mask_flags = MTD_WRITEABLE,
++ }, {
++ .name = "Blob",
++ .size = 0x00020000,
++ .offset = 0x00080000,
++ .mask_flags = MTD_WRITEABLE,
++ }, {
++ .name = "Kernel",
++ .size = 0x00100000,
++ .offset = 0x000A0000,
++ } , {
++ .name = "UserFS DB",
++ .size = 0x00600000,
++ .offset = 0x00AA0000,
++ }, {
++ .name = "UserFS",
++ .size = 0x007E0000,
++ .offset = 0x010A0000,
++ }, {
++ .name = "Test cmd",
++ .size = 0x00020000,
++ .offset = 0x018C0000,
++ } , {
++ .name = "Logo",
++ .size = 0x00020000,
++ .offset = 0x018E0000,
++ } , {
++ .name = "Fota",
++ .size = 0x000c0000,
++ .offset = 0x01900000,
++ }, {
++ .name = "Reserve",
++ .size = 0x00020000,
++ .offset = 0x019c0000,
++ }
++};
++#else
++#error "please define partition for this PXA27x implementation"
++#endif
++
++
++static struct mtd_info *mymtd;
++static struct mtd_partition *parsed_parts;
++
++static const char *probes[] = { "RedBoot", "cmdlinepart", NULL };
++
++static int __init init_pxa27x(void)
++{
++ struct mtd_partition *parts;
++ int nb_parts = 0;
++ int parsed_nr_parts = 0;
++ char *part_type = "static";
++
++ pxa27x_map.bankwidth = (BOOT_DEF & 1) ? 2 : 4;
++
++ printk("Probing PXA27x flash at physical address 0x%08x (%d-bit bankwidth)\n",
++ WINDOW_ADDR, pxa27x_map.bankwidth * 8);
++ pxa27x_map.virt = ioremap(pxa27x_map.phys, pxa27x_map.size);
++
++ if (!pxa27x_map.virt) {
++ printk("Failed to ioremap\n");
++ return -EIO;
++ }
++
++ mymtd = do_map_probe("cfi_probe", &pxa27x_map);
++ if (!mymtd) {
++ iounmap((void *)pxa27x_map.virt);
++ return -ENXIO;
++ }
++ mymtd->owner = THIS_MODULE;
++
++ simple_map_init(&pxa27x_map);
++
++ if (parsed_nr_parts == 0) {
++ int ret = parse_mtd_partitions(mymtd, probes, &parsed_parts, 0);
++
++ if (ret > 0) {
++ part_type = "RedBoot";
++ parsed_nr_parts = ret;
++ }
++ }
++
++ if (parsed_nr_parts > 0) {
++ parts = parsed_parts;
++ nb_parts = parsed_nr_parts;
++ } else {
++ parts = pxa27x_partitions;
++ nb_parts = ARRAY_SIZE(pxa27x_partitions);
++ }
++
++ if (nb_parts) {
++ printk(KERN_NOTICE "Using %s partition definition\n", part_type);
++ add_mtd_partitions(mymtd, parts, nb_parts);
++ } else {
++ add_mtd_device(mymtd);
++ }
++ return 0;
++}
++
++static void __exit cleanup_pxa27x(void)
++{
++ if (mymtd) {
++ del_mtd_partitions(mymtd);
++ map_destroy(mymtd);
++ if (parsed_parts)
++ kfree(parsed_parts);
++ }
++ if (pxa27x_map.virt)
++ iounmap((void *)pxa27x_map.virt);
++ if (pxa27x_map.cached)
++ iounmap((void *)pxa27x_map.cached);
++ return;
++}
++
++module_init(init_pxa27x);
++module_exit(cleanup_pxa27x);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Harald Welte <laforge@gnumonks.org>");
++MODULE_DESCRIPTION("MTD map driver for Motorola EZX platform");
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-pcap.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-pcap.patch
new file mode 100644
index 0000000000..f38a5e52da
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-pcap.patch
@@ -0,0 +1,852 @@
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx-pcap.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/arch/arm/mach-pxa/ezx-pcap.c
+@@ -0,0 +1,513 @@
++/* Driver for Motorola PCAP2 as present in EZX phones
++ *
++ * This is both a SPI device driver for PCAP itself, as well as
++ * an IRQ demultiplexer for handling PCAP generated events such as
++ * headphone jack sense by downstream drivers.
++ *
++ * Copyright (C) 2006 Harald Welte <laforge@openezx.org>
++ * Copyright (C) 2007 Daniel Ribeiro <wyrm@openezx.org>
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/platform_device.h>
++#include <linux/interrupt.h>
++#include <linux/kernel_stat.h>
++#include <linux/proc_fs.h>
++
++#include <asm/hardware.h>
++#include <asm/mach-types.h>
++
++#include <asm/arch/ezx.h>
++#include <asm/arch/ssp.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx-pcap.h>
++#include <asm/arch/irqs.h>
++#include <asm/mach/irq.h>
++
++#if 0
++#define DEBUGP(x, args...) printk(x, ## args)
++#else
++#define DEBUGP(x, args...)
++#endif
++
++static DEFINE_SPINLOCK(ezx_ssp_lock);
++static struct ssp_dev ezx_ssp_dev;
++static struct ssp_state ezx_ssp_state;
++static struct pcap_platform_data *pcap_data;
++static int pcap_irq;
++
++static unsigned long ezx_ssp_pcap_putget(ulong data)
++{
++ unsigned long flag;
++ u32 ret = 0;
++
++ spin_lock_irqsave(&ezx_ssp_lock, flag);
++ if (pcap_data->cs >= 0) {
++ if (pcap_data->flags & PCAP_CS_AH)
++ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
++ else
++ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
++ }
++
++ ssp_write_word(&ezx_ssp_dev,data);
++ ssp_read_word(&ezx_ssp_dev, &ret);
++
++ if (pcap_data->cs >= 0) {
++ if(pcap_data->flags & PCAP_CS_AH)
++ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
++ else
++ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
++ }
++
++ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
++
++ return ret;
++}
++
++int ezx_pcap_write(u_int8_t reg_num, u_int32_t value)
++{
++ value &= PCAP_REGISTER_VALUE_MASK;
++ value |= PCAP_REGISTER_WRITE_OP_BIT
++ | (reg_num<<PCAP_REGISTER_ADDRESS_SHIFT);
++
++ ezx_ssp_pcap_putget(value);
++
++ DEBUGP("pcap write r%x: 0x%08x\n", reg_num, value);
++ return 0;
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_write);
++
++int ezx_pcap_read(u_int8_t reg_num, u_int32_t *value)
++{
++ u_int32_t frame = PCAP_REGISTER_READ_OP_BIT
++ | (reg_num<<PCAP_REGISTER_ADDRESS_SHIFT);
++
++ *value = ezx_ssp_pcap_putget(frame);
++
++ DEBUGP("pcap read r%x: 0x%08x\n", reg_num, *value);
++ return 0;
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_read);
++
++int ezx_pcap_bit_set(u_int32_t sspPcapBit, u_int8_t to)
++{
++ int ret;
++ u_int32_t tmp;
++ u_int32_t bit = (sspPcapBit & PCAP_REGISTER_VALUE_MASK);
++ u_int8_t reg_num = (sspPcapBit & PCAP_REGISTER_ADDRESS_MASK)
++ >> PCAP_REGISTER_ADDRESS_SHIFT;
++
++ ret = ezx_pcap_read(reg_num, &tmp);
++ if (ret < 0)
++ return ret;
++
++ if (to == 0)
++ tmp &= ~bit;
++ else
++ tmp |= bit;
++
++ return ezx_pcap_write(reg_num, tmp);
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_bit_set);
++
++int ezx_pcap_read_bit(u_int32_t bit)
++{
++ int ret;
++ u_int32_t tmp;
++ u_int8_t reg_num = (bit & PCAP_REGISTER_ADDRESS_MASK)
++ >> PCAP_REGISTER_ADDRESS_SHIFT;
++
++ ret = ezx_pcap_read(reg_num, &tmp);
++ if (ret < 0)
++ return ret;
++
++ return tmp & (bit & PCAP_REGISTER_VALUE_MASK);
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_read_bit);
++
++/* /proc/pcap support */
++#ifdef CONFIG_PROC_FS
++
++static struct proc_dir_entry *proc_pcap;
++
++char *pcap_registers[] = {
++ "ISR\t", "MSR\t", "PSTAT\t", "INT_SEL\t", "SWCTRL\t", "VREG1\t",
++ "VREG2\t", "VREG\t", "BATT_DAC", "ADC1\t", "ADC2\t", "AUD_CODEC",
++ "RX_AUD_AMPS", "ST_DAC\t", "RTC_TOD\t", "RTC_TODA", "RTC_DAY\t",
++ "RTC_DAYA", "MTRTMR\t", "PWRCTRL\t", "BUSCTRL\t", "PERIPH\t",
++ "AUXVREG_MASK", "VENDOR_REV", "LOWPWR_CTRL", "PERIPH_MASK",
++ "TX_AUD_AMPS", "GP\t",
++ NULL, NULL, NULL, NULL
++};
++
++static int pcap_read_proc(char *page, char **start, off_t off, int count,
++ int *eof, void *data_unused)
++{
++ int len = 0;
++ u_int8_t r;
++ u_int32_t v;
++ off_t begin = 0;
++
++ for(r = 0; r < 32; r++) {
++ if (pcap_registers[r] == NULL)
++ continue;
++ ezx_pcap_read(r, &v);
++ len += sprintf(page+len, "%s\t%08X\n", pcap_registers[r], v);
++ if(len + begin > off + count)
++ goto done;
++ if(len + begin < off) {
++ begin += len;
++ len = 0;
++ }
++ }
++ *eof = 1;
++done:
++ if (off >= len+begin)
++ return 0;
++ *start = page + (off-begin);
++ return ((count < begin+len-off) ? count : begin+len-off);
++}
++#endif
++
++void ezx_pcap_vibrator_level(u_int32_t value)
++{
++ u_int32_t tmp;
++
++ ezx_pcap_read(PCAP_REG_AUXVREG, &tmp);
++
++ tmp &= ~PCAP_AUXVREG_V_VIB_MASK;
++ tmp |= ((value << PCAP_AUXVREG_V_VIB_SHIFT) & PCAP_AUXVREG_V_VIB_MASK);
++
++ ezx_pcap_write(PCAP_REG_AUXVREG, tmp);
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_vibrator_level);
++
++/* MMC/SD specific functions */
++
++void ezx_pcap_mmcsd_voltage(u_int32_t bits)
++{
++ unsigned int tmp;
++ ezx_pcap_read(PCAP_REG_AUXVREG, &tmp);
++ if (pcap_data->flags & PCAP_MCI_SD) {
++ tmp &= ~PCAP_AUXVREG_VAUX2_MASK;
++ tmp |= ((bits << PCAP_AUXVREG_VAUX2_SHIFT) &
++ PCAP_AUXVREG_VAUX2_MASK);
++ }
++ else if (pcap_data->flags & PCAP_MCI_TF) {
++ tmp &= ~PCAP_AUXVREG_VAUX3_MASK;
++ tmp |= ((bits << PCAP_AUXVREG_VAUX3_SHIFT) &
++ PCAP_AUXVREG_VAUX3_MASK);
++ }
++ ezx_pcap_write(PCAP_REG_AUXVREG, tmp);
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_mmcsd_voltage);
++
++int ezx_pcap_mmcsd_power(int on)
++{
++ if (on > 0) on = 1;
++ else on = 0;
++
++ if (pcap_data->flags & PCAP_MCI_SD)
++ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX2_EN, on);
++ else if (pcap_data->flags & PCAP_MCI_TF)
++ return ezx_pcap_bit_set(PCAP_BIT_AUXVREG_VAUX3_EN, on);
++ else
++ return -ENODEV;
++}
++EXPORT_SYMBOL_GPL(ezx_pcap_mmcsd_power);
++
++/* IRQ Handling */
++
++/* Array indexed by BIT POSITION of PCAP register, returns IRQ number */
++static unsigned int pcap2irq[] = {
++ [0] = EZX_IRQ_ADCDONE,
++ [1] = EZX_IRQ_TS,
++ [2] = EZX_IRQ_1HZ, /* 1HZ */
++ [3] = EZX_IRQ_WH, /* WH */
++ [4] = EZX_IRQ_WL, /* WL */
++ [5] = EZX_IRQ_TODA, /* TODA */
++ [6] = EZX_IRQ_USB4V,
++ [7] = EZX_IRQ_ONOFF, /* ONOFF */
++ [8] = EZX_IRQ_ONOFF2, /* ONOFF2 */
++ [9] = EZX_IRQ_USB1V,
++ [10] = EZX_IRQ_MOBPORT, /* MOBPORT */
++ [11] = EZX_IRQ_MIC,
++ [12] = EZX_IRQ_HEADJACK,
++ [13] = EZX_IRQ_ST, /* ST */
++ [14] = EZX_IRQ_PC, /* PC */
++ [15] = EZX_IRQ_WARM, /* WARM */
++ [16] = EZX_IRQ_EOL, /* EOL */
++ [17] = EZX_IRQ_CLK, /* CLK */
++ [18] = EZX_IRQ_SYSRST, /* SYSRST */
++ [19] = 0,
++ [20] = EZX_IRQ_ADCDONE2,
++ [21] = EZX_IRQ_SOFTRESET, /* SOFTRESET */
++ [22] = EZX_IRQ_MNEXB, /* MNEXB */
++};
++
++/* Array indexed by IRQ NUMBER, returns PCAP absolute value */
++static unsigned int irq2pcap[] = {
++ [EZX_IRQ_MNEXB] = PCAP_IRQ_MNEXB,
++ [EZX_IRQ_SOFTRESET] = PCAP_IRQ_SOFTRESET,
++ [EZX_IRQ_SYSRST] = PCAP_IRQ_SYSRST,
++ [EZX_IRQ_CLK] = PCAP_IRQ_CLK,
++ [EZX_IRQ_EOL] = PCAP_IRQ_EOL,
++ [EZX_IRQ_WARM] = PCAP_IRQ_WARM,
++ [EZX_IRQ_PC] = PCAP_IRQ_PC,
++ [EZX_IRQ_ST] = PCAP_IRQ_ST,
++ [EZX_IRQ_MOBPORT] = PCAP_IRQ_MOBPORT,
++ [EZX_IRQ_ONOFF2] = PCAP_IRQ_ONOFF2,
++ [EZX_IRQ_ONOFF] = PCAP_IRQ_ONOFF,
++ [EZX_IRQ_TODA] = PCAP_IRQ_TODA,
++ [EZX_IRQ_WL] = PCAP_IRQ_WL,
++ [EZX_IRQ_WH] = PCAP_IRQ_WH,
++ [EZX_IRQ_1HZ] = PCAP_IRQ_1HZ,
++ [EZX_IRQ_USB4V] = PCAP_IRQ_USB4V,
++ [EZX_IRQ_USB1V] = PCAP_IRQ_USB1V,
++ [EZX_IRQ_HEADJACK] = PCAP_IRQ_A1,
++ [EZX_IRQ_MIC] = PCAP_IRQ_MB2,
++ [EZX_IRQ_TS] = PCAP_IRQ_TS,
++ [EZX_IRQ_ADCDONE] = PCAP_IRQ_ADCDONE,
++ [EZX_IRQ_ADCDONE2] = PCAP_IRQ_ADCDONE2,
++};
++
++static void pcap_ack_irq(unsigned int irq)
++{
++ DEBUGP("pcap_ack_irq: %u\n", irq);
++ ezx_pcap_write(PCAP_REG_ISR, irq2pcap[irq]);
++}
++
++static void pcap_mask_irq(unsigned int irq)
++{
++ u_int32_t reg;
++ unsigned long flag;
++
++ spin_lock_irqsave(&ezx_ssp_lock, flag);
++ DEBUGP("pcap_mask_irq: %u\n", irq);
++ ezx_pcap_read(PCAP_REG_MSR, &reg);
++ reg |= irq2pcap[irq];
++ ezx_pcap_write(PCAP_REG_MSR, reg);
++ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
++}
++
++static void pcap_unmask_irq(unsigned int irq)
++{
++ u_int32_t tmp;
++ unsigned long flag;
++
++ spin_lock_irqsave(&ezx_ssp_lock, flag);
++ DEBUGP("pcap_unmask_irq: %u\n", irq);
++ ezx_pcap_read(PCAP_REG_MSR, &tmp);
++ tmp &= ~irq2pcap[irq];
++ ezx_pcap_write(PCAP_REG_MSR, tmp);
++ spin_unlock_irqrestore(&ezx_ssp_lock, flag);
++}
++
++static struct irq_chip pcap_chip = {
++ .ack = pcap_ack_irq,
++ .mask = pcap_mask_irq,
++ .unmask = pcap_unmask_irq,
++};
++
++/* handler for interrupt received from PCAP via GPIO */
++static void pcap_irq_demux_handler(unsigned int irq, struct irq_desc *desc)
++{
++ const unsigned int cpu = smp_processor_id();
++ int i;
++ u_int32_t isr, msr;
++
++ spin_lock(&desc->lock);
++ desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
++ if (unlikely(desc->status & (IRQ_INPROGRESS | IRQ_DISABLED))) {
++ desc->status |= (IRQ_PENDING | IRQ_MASKED);
++ desc->chip->mask(irq);
++ desc->chip->ack(irq);
++ goto out_unlock;
++ }
++ kstat_cpu(cpu).irqs[irq]++;
++ desc->chip->ack(irq);
++ desc->status |= IRQ_INPROGRESS;
++ do {
++ if (unlikely((desc->status &
++ (IRQ_PENDING | IRQ_MASKED | IRQ_DISABLED)) ==
++ (IRQ_PENDING | IRQ_MASKED))) {
++ desc->chip->unmask(irq);
++ desc->status &= ~IRQ_MASKED;
++ }
++ desc->status &= ~IRQ_PENDING;
++
++ ezx_pcap_read(PCAP_REG_ISR, &isr);
++ ezx_pcap_read(PCAP_REG_MSR, &msr);
++ for (i = ARRAY_SIZE(pcap2irq)-1; i >= 0; i--) {
++ unsigned int pirq = pcap2irq[i];
++ struct irq_desc *subdesc;
++ if (pirq == 0 || !(isr & irq2pcap[pirq]))
++ continue;
++ subdesc = irq_desc + pirq;
++ if (msr & irq2pcap[pirq])
++ continue;
++ DEBUGP("found irq %u\n", pirq);
++ spin_unlock(&desc->lock);
++ desc_handle_irq(pirq, subdesc);
++ spin_lock(&desc->lock);
++ }
++
++ } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING);
++
++ desc->status &= ~IRQ_INPROGRESS;
++out_unlock:
++ spin_unlock(&desc->lock);
++}
++
++static int ezx_pcap_remove(struct platform_device *pdev)
++{
++ int irq;
++ DEBUGP("exz_pcap_remove entered\n");
++
++ set_irq_chained_handler(pcap_irq, NULL);
++
++ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) {
++ set_irq_chip(irq, NULL);
++ set_irq_handler(irq, NULL);
++ set_irq_flags(irq, 0);
++ }
++
++ ssp_exit(&ezx_ssp_dev);
++
++ return 0;
++}
++
++static int __init ezx_pcap_probe(struct platform_device *pdev)
++{
++ unsigned int ret, irq;
++ DEBUGP("ezx_pcap_probe entered\n");
++
++ pcap_data = pdev->dev.platform_data;
++
++ /* configure ssp port */
++ pxa_gpio_mode(29|GPIO_ALT_FN_3_OUT);
++ pxa_gpio_mode(GPIO24_SFRM_MD);
++ pxa_gpio_mode(GPIO25_STXD_MD);
++ pxa_gpio_mode(GPIO26_SRXD_MD);
++
++ if (pcap_data->cs >= 0) {
++ if (pcap_data->flags & PCAP_CS_AH)
++ pxa_gpio_mode(pcap_data->cs | GPIO_OUT);
++ else
++ pxa_gpio_mode(pcap_data->cs | GPIO_OUT
++ | GPIO_DFLT_HIGH);
++ }
++ pcap_irq = platform_get_irq(pdev, 0);
++ if(pcap_irq < 0) {
++ printk(KERN_ERR "Unable to get IRQ for pcap!\n");
++ return pcap_irq;
++ }
++
++ ret = ssp_init(&ezx_ssp_dev, pcap_data->port, 0);
++ if (ret) {
++ printk(KERN_ERR "Unable to register SSP handler!\n");
++ return ret;
++ }
++
++ ssp_disable(&ezx_ssp_dev);
++ ssp_config(&ezx_ssp_dev,
++ (SSCR0_Motorola | SSCR0_DataSize(16) | SSCR0_EDSS),
++ (SSCR1_TxTresh(1) | SSCR1_RxTresh(1)),
++ 0, SSCR0_SerClkDiv(pcap_data->clk));
++ ssp_enable(&ezx_ssp_dev);
++
++ /* mask/ack all PCAP interrupts */
++ ezx_pcap_write(PCAP_REG_MSR, PCAP_MASK_ALL_INTERRUPT);
++ ezx_pcap_write(PCAP_REG_ISR, PCAP_CLEAR_INTERRUPT_REGISTER);
++
++ if (pcap_data->init)
++ pcap_data->init();
++
++ /* set up interrupt demultiplexing code for PCAP2 irqs */
++ set_irq_type(pcap_irq, IRQT_RISING);
++ for (irq = EZX_IRQ(0); irq <= EZX_IRQ(21); irq++) {
++ set_irq_chip(irq, &pcap_chip);
++ set_irq_handler(irq, handle_level_irq);
++ set_irq_flags(irq, IRQF_VALID);
++ }
++ set_irq_chained_handler(pcap_irq, pcap_irq_demux_handler);
++ set_irq_wake(pcap_irq, 1);
++
++ printk("ezx-pcap: ssp driver registered\n");
++ return ret;
++}
++
++static int ezx_pcap_suspend(struct platform_device *dev, pm_message_t state)
++{
++ DEBUGP("pcap suspend!\n");
++ ssp_flush(&ezx_ssp_dev);
++ ssp_save_state(&ezx_ssp_dev, &ezx_ssp_state);
++ if (pcap_data->cs >= 0)
++ pxa_gpio_mode(pcap_data->cs | GPIO_IN);
++ return 0;
++}
++
++static int ezx_pcap_resume(struct platform_device *dev)
++{
++ DEBUGP("pcap resume!\n");
++
++ if (pcap_data->cs >= 0) {
++ if (pcap_data->flags & PCAP_CS_AH) {
++ pxa_gpio_mode(pcap_data->cs | GPIO_OUT);
++ GPCR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
++ }
++ else {
++ pxa_gpio_mode(pcap_data->cs | GPIO_OUT | GPIO_DFLT_HIGH);
++ GPSR(pcap_data->cs) = GPIO_bit(pcap_data->cs);
++ }
++ }
++ ssp_restore_state(&ezx_ssp_dev,&ezx_ssp_state);
++ ssp_enable(&ezx_ssp_dev);
++
++ ezx_pcap_write(PCAP_REG_ISR, PCAP_CLEAR_INTERRUPT_REGISTER);
++
++ return 0;
++}
++
++static struct platform_driver ezxpcap_driver = {
++ .probe = ezx_pcap_probe,
++ .remove = ezx_pcap_remove,
++ .suspend = ezx_pcap_suspend,
++ .resume = ezx_pcap_resume,
++ .driver = {
++ .name = "ezx-pcap",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init ezx_pcap_init(void)
++{
++ DEBUGP("ezx_pcap_init entered\n");
++
++#ifdef CONFIG_PROC_FS
++ if((proc_pcap = create_proc_entry("pcap", 0, NULL)))
++ proc_pcap->read_proc = pcap_read_proc;
++#endif
++
++ return platform_driver_register(&ezxpcap_driver);
++}
++
++static void __exit ezx_pcap_exit(void)
++{
++#ifdef CONFIG_PROC_FS
++ if (proc_pcap)
++ remove_proc_entry("pcap", NULL);
++#endif
++
++ return platform_driver_unregister(&ezxpcap_driver);
++}
++
++module_init(ezx_pcap_init);
++module_exit(ezx_pcap_exit);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Harald Welte");
++MODULE_DESCRIPTION("SPI Driver for Motorola PCAP2");
++
+Index: linux-2.6.24/include/asm-arm/arch-pxa/ezx-pcap.h
+===================================================================
+--- /dev/null
++++ linux-2.6.24/include/asm-arm/arch-pxa/ezx-pcap.h
+@@ -0,0 +1,248 @@
++/*
++ * Copyright 2007 Daniel Ribeiro <wyrm@openezx.org>
++ */
++
++#ifndef EZX_PCAP_H
++#define EZX_PCAP_H
++
++struct pcap_platform_data {
++ int port; /* SSP port */
++ int cs; /* CS gpio */
++ int clk;
++ int flags; /* driver flags */
++ int (*init)(void); /* board specific driver init */
++};
++
++/* driver configuration */
++#define PCAP_CS_AH (1 << 0) /* CS pin is active high */
++#define PCAP_MCI_SD (1 << 1) /* SD card slot */
++#define PCAP_MCI_TF (1 << 2) /* TF card slot */
++
++#define PCAP_REGISTER_WRITE_OP_BIT 0x80000000
++#define PCAP_REGISTER_READ_OP_BIT 0x00000000
++
++#define PCAP_REGISTER_VALUE_MASK 0x01ffffff
++#define PCAP_REGISTER_ADDRESS_MASK 0x7c000000
++#define PCAP_REGISTER_ADDRESS_SHIFT 26
++#define PCAP_REGISTER_NUMBER 32
++#define PCAP_CLEAR_INTERRUPT_REGISTER 0x01ffffff
++#define PCAP_MASK_ALL_INTERRUPT 0x01ffffff
++
++
++#define pbit(reg, bit) ((reg << PCAP_REGISTER_ADDRESS_SHIFT) | bit)
++
++/* registers acessible by both pcap ports */
++#define PCAP_REG_ISR 0x0 /* Interrupt Status */
++#define PCAP_REG_MSR 0x1 /* Interrupt Mask */
++#define PCAP_REG_PSTAT 0x2 /* Processor Status */
++#define PCAP_REG_VREG2 0x6 /* Regulator Bank 2 Control */
++#define PCAP_REG_AUXVREG 0x7 /* Auxiliary Regulator Control */
++#define PCAP_REG_BATT 0x8 /* Battery Control */
++#define PCAP_REG_ADC1 0x9 /* AD Control */
++#define PCAP_REG_ADC2 0xa /* AD Result */
++#define PCAP_REG_CODEC 0xb /* Audio Codec Control */
++#define PCAP_REG_RX_AMPS 0xc /* RX Audio Amplifiers Control */
++#define PCAP_REG_ST_DAC 0xd /* Stereo DAC Control */
++#define PCAP_REG_BUSCTRL 0x14 /* Connectivity Control */
++#define PCAP_REG_PERIPH 0x15 /* Peripheral Control */
++#define PCAP_REG_LOWPWR 0x18 /* Regulator Low Power Control */
++#define PCAP_REG_TX_AMPS 0x1a /* TX Audio Amplifiers Control */
++#define PCAP_REG_GP 0x1b /* General Purpose */
++
++/* registers acessible by pcap port 1 only (a1200, e2 & e6) */
++#define PCAP_REG_INT_SEL 0x3 /* Interrupt Select */
++#define PCAP_REG_SWCTRL 0x4 /* Switching Regulator Control */
++#define PCAP_REG_VREG1 0x5 /* Regulator Bank 1 Control */
++#define PCAP_REG_RTC_TOD 0xe /* RTC Time of Day */
++#define PCAP_REG_RTC_TODA 0xf /* RTC Time of Day Alarm */
++#define PCAP_REG_RTC_DAY 0x10 /* RTC Day */
++#define PCAP_REG_RTC_DAYA 0x11 /* RTC Day Alarm */
++#define PCAP_REG_MTRTMR 0x12 /* AD Monitor Timer */
++#define PCAP_REG_PWR 0x13 /* Power Control */
++#define PCAP_REG_AUXVREG_MASK 0x16 /* Auxiliary Regulator Mask */
++#define PCAP_REG_VENDOR_REV 0x17
++#define PCAP_REG_PERIPH_MASK 0x19 /* Peripheral Mask */
++
++/* interrupts - registers 0, 1, 2, 3 */
++#define PCAP_IRQ_ADCDONE (1 << 0) /* AD Conversion Done Port 1 */
++#define PCAP_IRQ_TS (1 << 1) /* Touch Screen */
++#define PCAP_IRQ_1HZ (1 << 2) /* 1HZ Timer */
++#define PCAP_IRQ_WH (1 << 3)
++#define PCAP_IRQ_WL (1 << 4)
++#define PCAP_IRQ_TODA (1 << 5)
++#define PCAP_IRQ_USB4V (1 << 6)
++#define PCAP_IRQ_ONOFF (1 << 7)
++#define PCAP_IRQ_ONOFF2 (1 << 8)
++#define PCAP_IRQ_USB1V (1 << 9)
++#define PCAP_IRQ_MOBPORT (1 << 10)
++#define PCAP_IRQ_MB2 (1 << 11) /* Mic */
++#define PCAP_IRQ_A1 (1 << 12) /* Audio jack */
++#define PCAP_IRQ_ST (1 << 13)
++#define PCAP_IRQ_PC (1 << 14)
++#define PCAP_IRQ_WARM (1 << 15)
++#define PCAP_IRQ_EOL (1 << 16)
++#define PCAP_IRQ_CLK (1 << 17)
++#define PCAP_IRQ_SYSRST (1 << 18)
++#define PCAP_IRQ_ADCDONE2 (1 << 20) /* AD Conversion Done Port 2 */
++#define PCAP_IRQ_SOFTRESET (1 << 21)
++#define PCAP_IRQ_MNEXB (1 << 22)
++
++#define PCAP_BIT_VREG2_V1_STBY pbit(PCAP_REG_VREG2, (1 << 0))
++#define PCAP_BIT_VREG2_V2_STBY pbit(PCAP_REG_VREG2, (1 << 1))
++#define PCAP_BIT_VREG2_V3_STBY pbit(PCAP_REG_VREG2, (1 << 2))
++#define PCAP_BIT_VREG2_V4_STBY pbit(PCAP_REG_VREG2, (1 << 3))
++#define PCAP_BIT_VREG2_V5_STBY pbit(PCAP_REG_VREG2, (1 << 4))
++#define PCAP_BIT_VREG2_V6_STBY pbit(PCAP_REG_VREG2, (1 << 5))
++#define PCAP_BIT_VREG2_V7_STBY pbit(PCAP_REG_VREG2, (1 << 6))
++#define PCAP_BIT_VREG2_V8_STBY pbit(PCAP_REG_VREG2, (1 << 7))
++#define PCAP_BIT_VREG2_V9_STBY pbit(PCAP_REG_VREG2, (1 << 8))
++#define PCAP_BIT_VREG2_V10_STBY pbit(PCAP_REG_VREG2, (1 << 9))
++#define PCAP_BIT_VREG2_V1_LOWPWR pbit(PCAP_REG_VREG2, (1 << 10))
++#define PCAP_BIT_VREG2_V2_LOWPWR pbit(PCAP_REG_VREG2, (1 << 11))
++#define PCAP_BIT_VREG2_V3_LOWPWR pbit(PCAP_REG_VREG2, (1 << 12))
++#define PCAP_BIT_VREG2_V4_LOWPWR pbit(PCAP_REG_VREG2, (1 << 13))
++#define PCAP_BIT_VREG2_V5_LOWPWR pbit(PCAP_REG_VREG2, (1 << 14))
++#define PCAP_BIT_VREG2_V6_LOWPWR pbit(PCAP_REG_VREG2, (1 << 15))
++#define PCAP_BIT_VREG2_V7_LOWPWR pbit(PCAP_REG_VREG2, (1 << 16))
++#define PCAP_BIT_VREG2_V8_LOWPWR pbit(PCAP_REG_VREG2, (1 << 17))
++#define PCAP_BIT_VREG2_V9_LOWPWR pbit(PCAP_REG_VREG2, (1 << 18))
++#define PCAP_BIT_VREG2_V10_LOWPWR pbit(PCAP_REG_VREG2, (1 << 19))
++
++#define PCAP_BIT_AUXVREG_VAUX1_EN pbit(PCAP_REG_AUXVREG, (1 << 1))
++#define PCAP_AUXVREG_VAUX1_MASK 0x0000000c
++#define PCAP_AUXVREG_VAUX1_SHIFT 2
++#define PCAP_BIT_AUXVREG_VAUX2_EN pbit(PCAP_REG_AUXVREG, (1 << 4))
++#define PCAP_AUXVREG_VAUX2_MASK 0x00000060
++#define PCAP_AUXVREG_VAUX2_SHIFT 5
++#define PCAP_BIT_AUXVREG_VAUX3_EN pbit(PCAP_REG_AUXVREG, (1 << 7))
++#define PCAP_AUXVREG_VAUX3_MASK 0x00000f00
++#define PCAP_AUXVREG_VAUX3_SHIFT 8
++#define PCAP_BIT_AUXVREG_VAUX4_EN pbit(PCAP_REG_AUXVREG, (1 << 12))
++#define PCAP_AUXVREG_VAUX4_MASK 0x00006000
++#define PCAP_AUXVREG_VAUX4_SHIFT 13
++#define PCAP_BIT_AUXVREG_VSIM2_EN pbit(PCAP_REG_AUXVREG, (1 << 16))
++#define PCAP_BIT_AUXVREG_VSIM_EN pbit(PCAP_REG_AUXVREG, (1 << 17))
++#define PCAP_BIT_AUXVREG_VSIM_0 pbit(PCAP_REG_AUXVREG, (1 << 18))
++#define PCAP_BIT_AUXVREG_V_VIB_EN pbit(PCAP_REG_AUXVREG, (1 << 19))
++#define PCAP_AUXVREG_V_VIB_MASK 0x00300000
++#define PCAP_AUXVREG_V_VIB_SHIFT 20
++#define PCAP_BIT_AUXVREG_VAUX1_STBY pbit(PCAP_REG_AUXVREG, (1 << 22))
++#define PCAP_BIT_AUXVREG_VAUX1_LOWPWR pbit(PCAP_REG_AUXVREG, (1 << 23))
++#define PCAP_BIT_AUXVREG_SW3_STBY pbit(PCAP_REG_AUXVREG, (1 << 24))
++
++#define PCAP_BATT_DAC_MASK 0x000000ff
++#define PCAP_BATT_DAC_SHIFT 0
++#define PCAP_BIT_BATT_B_FDBK pbit(PCAP_REG_BATT, (1 << 8))
++#define PCAP_BIT_BATT_EXT_ISENSE pbit(PCAP_REG_BATT, (1 << 9))
++#define PCAP_BATT_V_COIN_MASK 0x00003c00
++#define PCAP_BATT_V_COIN_SHIFT 10
++#define PCAP_BIT_BATT_I_COIN pbit(PCAP_REG_BATT, (1 << 14))
++#define PCAP_BIT_BATT_COIN_CH_EN pbit(PCAP_REG_BATT, (1 << 15))
++#define PCAP_BATT_EOL_SEL_MASK 0x000e0000
++#define PCAP_BATT_EOL_SEL_SHIFT 17
++#define PCAP_BIT_BATT_EOL_CMP_EN pbit(PCAP_REG_BATT, (1 << 20))
++#define PCAP_BIT_BATT_BATT_DET_EN pbit(PCAP_REG_BATT, (1 << 21))
++#define PCAP_BIT_BATT_THERMBIAS_CTRL pbit(PCAP_REG_BATT, (1 << 22))
++
++#define PCAP_BIT_ADC1_ADEN pbit(PCAP_REG_ADC1, (1 << 0))
++#define PCAP_BIT_ADC1_RAND pbit(PCAP_REG_ADC1, (1 << 1))
++#define PCAP_BIT_ADC1_AD_SEL1 pbit(PCAP_REG_ADC1, (1 << 2))
++#define PCAP_BIT_ADC1_AD_SEL2 pbit(PCAP_REG_ADC1, (1 << 3))
++#define PCAP_ADC1_ADA1_MASK 0x00000070
++#define PCAP_ADC1_ADA1_SHIFT 4
++#define PCAP_ADC1_ADA2_MASK 0x00000380
++#define PCAP_ADC1_ADA2_SHIFT 7
++#define PCAP_ADC1_ATO_MASK 0x00003c00
++#define PCAP_ADC1_ATO_SHIFT 10
++#define PCAP_BIT_ADC1_ATOX pbit(PCAP_REG_ADC1, (1 << 14))
++#define PCAP_BIT_ADC1_MTR1 pbit(PCAP_REG_ADC1, (1 << 15))
++#define PCAP_BIT_ADC1_MTR2 pbit(PCAP_REG_ADC1, (1 << 16))
++#define PCAP_ADC1_TS_M_MASK 0x000e0000
++#define PCAP_ADC1_TS_M_SHIFT 17
++#define PCAP_BIT_ADC1_TS_REF_LOWPWR pbit(PCAP_REG_ADC1, (1 << 20))
++#define PCAP_BIT_ADC1_TS_REFENB pbit(PCAP_REG_ADC1, (1 << 21))
++#define PCAP_BIT_ADC1_BATT_I_POLARITY pbit(PCAP_REG_ADC1, (1 << 22))
++#define PCAP_BIT_ADC1_BATT_I_ADC pbit(PCAP_REG_ADC1, (1 << 23))
++
++#define PCAP_ADC2_ADD1_MASK 0x000003ff
++#define PCAP_ADC2_ADD1_SHIFT 0
++#define PCAP_ADC2_ADD2_MASK 0x000ffc00
++#define PCAP_ADC2_ADD2_SHIFT 10
++#define PCAP_BIT_ADC2_ADINC1 pbit(PCAP_REG_ADC2, (1 << 20))
++#define PCAP_BIT_ADC2_ADINC2 pbit(PCAP_REG_ADC2, (1 << 21))
++#define PCAP_BIT_ADC2_ASC pbit(PCAP_REG_ADC2, (1 << 22))
++
++#define PCAP_BIT_BUSCTRL_FSENB 0x50000001
++#define PCAP_BIT_BUSCTRL_USB_SUSPEND 0x50000002
++#define PCAP_BIT_BUSCTRL_USB_PU 0x50000004
++#define PCAP_BIT_BUSCTRL_USB_PD 0x50000008
++#define PCAP_BIT_BUSCTRL_VUSB_EN 0x50000010
++#define PCAP_BIT_BUSCTRL_USB_PS 0x50000020
++#define PCAP_BIT_BUSCTRL_VUSB_MSTR_EN 0x50000040
++#define PCAP_BIT_BUSCTRL_VBUS_PD_ENB 0x50000080
++#define PCAP_BIT_BUSCTRL_CURRLIM 0x50000100
++#define PCAP_BIT_BUSCTRL_RS232ENB 0x50000200
++#define PCAP_BIT_BUSCTRL_RS232_DIR 0x50000400
++#define PCAP_BIT_BUSCTRL_SE0_CONN 0x50000800
++#define PCAP_BIT_BUSCTRL_USB_PDM 0x50001000
++#define PCAP_BIT_BUSCTRL_BUS_PRI_ADJ 0x51000000
++
++#define PCAP_BIT_PERIPH_BL_CTRL0 0x54000001
++#define PCAP_BIT_PERIPH_BL_CTRL1 0x54000002
++#define PCAP_BIT_PERIPH_BL_CTRL2 0x54000004
++#define PCAP_BIT_PERIPH_BL_CTRL3 0x54000008
++#define PCAP_BIT_PERIPH_BL_CTRL4 0x54000010
++#define PCAP_BIT_PERIPH_LEDR_EN 0x54000020
++#define PCAP_BIT_PERIPH_LEDG_EN 0x54000040
++#define PCAP_BIT_PERIPH_LEDR_CTRL0 0x54000080
++#define PCAP_BIT_PERIPH_LEDR_CTRL1 0x54000100
++#define PCAP_BIT_PERIPH_LEDR_CTRL2 0x54000200
++#define PCAP_BIT_PERIPH_LEDR_CTRL3 0x54000400
++#define PCAP_BIT_PERIPH_LEDG_CTRL0 0x54000800
++#define PCAP_BIT_PERIPH_LEDG_CTRL1 0x54001000
++#define PCAP_BIT_PERIPH_LEDG_CTRL2 0x54002000
++#define PCAP_BIT_PERIPH_LEDG_CTRL3 0x54004000
++#define PCAP_BIT_PERIPH_LEDR_I0 0x54008000
++#define PCAP_BIT_PERIPH_LEDR_I1 0x54010000
++#define PCAP_BIT_PERIPH_LEDG_I0 0x54020000
++#define PCAP_BIT_PERIPH_LEDG_I1 0x54040000
++#define PCAP_BIT_PERIPH_SKIP 0x54080000
++#define PCAP_BIT_PERIPH_BL2_CTRL0 0x54100000
++#define PCAP_BIT_PERIPH_BL2_CTRL1 0x54200000
++#define PCAP_BIT_PERIPH_BL2_CTRL2 0x54400000
++#define PCAP_BIT_PERIPH_BL2_CTRL3 0x54800000
++#define PCAP_BIT_PERIPH_BL2_CTRL4 0x55000000
++
++#define PCAP_BIT_LOWPWR_VAUX2_STBY 0x60000001
++#define PCAP_BIT_LOWPWR_VAUX2_LOWPWR 0x60000002
++#define PCAP_BIT_LOWPWR_VAUX3_STBY 0x60000004
++#define PCAP_BIT_LOWPWR_VAUX3_LOWPWR 0x60000008
++#define PCAP_BIT_LOWPWR_VAUX4_STBY 0x60000010
++#define PCAP_BIT_LOWPWR_VAUX4_LOWPWR 0x60000020
++#define PCAP_BIT_LOWPWR_VSIM_LOWPWR 0x60000040
++#define PCAP_BIT_LOWPWR_VSIM2_LOWPWR 0x60000080
++#define PCAP_BIT_LOWPWR_SW1_MODE00 0x60000100
++#define PCAP_BIT_LOWPWR_SW1_MODE01 0x60000200
++#define PCAP_BIT_LOWPWR_SW1_MODE10 0x60000400
++#define PCAP_BIT_LOWPWR_SW1_MODE11 0x60000800
++#define PCAP_BIT_LOWPWR_SW10_DVS 0x60001000
++#define PCAP_BIT_LOWPWR_SW11_DVS 0x60002000
++#define PCAP_BIT_LOWPWR_SW12_DVS 0x60004000
++#define PCAP_BIT_LOWPWR_SW13_DVS 0x60008000
++#define PCAP_BIT_LOWPWR_SW2_MODE00 0x60010000
++#define PCAP_BIT_LOWPWR_SW2_MODE01 0x60020000
++#define PCAP_BIT_LOWPWR_SW2_MODE10 0x60040000
++#define PCAP_BIT_LOWPWR_SW2_MODE11 0x60080000
++#define PCAP_BIT_LOWPWR_SW20_DVS 0x60100000
++#define PCAP_BIT_LOWPWR_SW21_DVS 0x60200000
++#define PCAP_BIT_LOWPWR_SW22_DVS 0x60400000
++#define PCAP_BIT_LOWPWR_SW23_DVS 0x60800000
++#define PCAP_BIT_LOWPWR_VC_STBY 0x61000000
++
++extern int ezx_pcap_write(u_int8_t, u_int32_t);
++extern int ezx_pcap_read(u_int8_t, u_int32_t *);
++extern int ezx_pcap_bit_set(u_int32_t, u_int8_t);
++extern int ezx_pcap_bit_get(u_int32_t);
++extern int ezx_pcap_read_bit(u_int32_t);
++extern void ezx_pcap_vibrator_level(u_int32_t);
++#endif
+Index: linux-2.6.24/include/asm-arm/arch-pxa/irqs.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/arch-pxa/irqs.h
++++ linux-2.6.24/include/asm-arm/arch-pxa/irqs.h
+@@ -89,7 +89,7 @@
+ * within sensible limits.
+ */
+ #define IRQ_BOARD_START (PXA_GPIO_IRQ_BASE + PXA_GPIO_IRQ_NUM)
+-#define IRQ_BOARD_END (IRQ_BOARD_START + 16)
++#define IRQ_BOARD_END (IRQ_BOARD_START + 22)
+
+ #define IRQ_SA1111_START (IRQ_BOARD_END)
+ #define IRQ_GPAIN0 (IRQ_BOARD_END + 0)
+@@ -180,7 +180,8 @@
+ #define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1)
+ #elif defined(CONFIG_ARCH_LUBBOCK) || \
+ defined(CONFIG_MACH_LOGICPD_PXA270) || \
+- defined(CONFIG_MACH_MAINSTONE)
++ defined(CONFIG_MACH_MAINSTONE) || \
++ defined(CONFIG_PXA_EZX)
+ #define NR_IRQS (IRQ_BOARD_END)
+ #else
+ #define NR_IRQS (IRQ_BOARD_START)
+@@ -227,6 +228,31 @@
+ #define IRQ_LOCOMO_LT_BASE (IRQ_BOARD_START + 2)
+ #define IRQ_LOCOMO_SPI_BASE (IRQ_BOARD_START + 3)
+
++/* EZX Interrupts (CONFIG_EZX) */
++#define EZX_IRQ(x) (IRQ_BOARD_START + (x))
++#define EZX_IRQ_USB4V EZX_IRQ(0) /* EMU */
++#define EZX_IRQ_USB1V EZX_IRQ(1) /* EMU */
++#define EZX_IRQ_HEADJACK EZX_IRQ(2) /* Audio connector */
++#define EZX_IRQ_MIC EZX_IRQ(3) /* Audio connector */
++#define EZX_IRQ_ADCDONE EZX_IRQ(4)
++#define EZX_IRQ_TS EZX_IRQ(5) /* TS touch */
++#define EZX_IRQ_ADCDONE2 EZX_IRQ(6) /* TS x/y ADC ready */
++#define EZX_IRQ_WH EZX_IRQ(7)
++#define EZX_IRQ_WL EZX_IRQ(8)
++#define EZX_IRQ_ONOFF EZX_IRQ(9)
++#define EZX_IRQ_ONOFF2 EZX_IRQ(10)
++#define EZX_IRQ_MOBPORT EZX_IRQ(11)
++#define EZX_IRQ_TODA EZX_IRQ(12)
++#define EZX_IRQ_1HZ EZX_IRQ(13)
++#define EZX_IRQ_MNEXB EZX_IRQ(14)
++#define EZX_IRQ_ST EZX_IRQ(15)
++#define EZX_IRQ_PC EZX_IRQ(16)
++#define EZX_IRQ_SYSRST EZX_IRQ(17)
++#define EZX_IRQ_SOFTRESET EZX_IRQ(18)
++#define EZX_IRQ_EOL EZX_IRQ(19)
++#define EZX_IRQ_CLK EZX_IRQ(20)
++#define EZX_IRQ_WARM EZX_IRQ(21)
++
+ /* ITE8152 irqs */
+ /* add IT8152 IRQs beyond BOARD_END */
+ #ifdef CONFIG_PCI_HOST_ITE8152
+Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig
++++ linux-2.6.24/arch/arm/mach-pxa/Kconfig
+@@ -139,6 +139,9 @@
+ This enables control code for the BP (baseband processor) found in
+ Motorola's EZX smartphone platform.
+
++config EZX_PCAP
++ bool "PCAP Support"
++
+ endif
+
+ endmenu
+Index: linux-2.6.24/arch/arm/mach-pxa/Makefile
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile
++++ linux-2.6.24/arch/arm/mach-pxa/Makefile
+@@ -37,6 +37,7 @@
+ obj-$(CONFIG_PXA_EZX_A1200) += ezx-a1200.o
+ obj-$(CONFIG_PXA_EZX_E6) += ezx-e6.o
+ obj-$(CONFIG_EZX_BP) += ezx-bp.o
++obj-$(CONFIG_EZX_PCAP) += ezx-pcap.o
+
+ # Support for blinky lights
+ led-y := leds.o
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-pm.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-pm.patch
new file mode 100644
index 0000000000..cc08fddfc6
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-pm.patch
@@ -0,0 +1,108 @@
+Index: linux-2.6.24/arch/arm/mach-pxa/pxa27x.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/pxa27x.c
++++ linux-2.6.24/arch/arm/mach-pxa/pxa27x.c
+@@ -25,6 +25,10 @@
+ #include <asm/arch/pm.h>
+ #include <asm/arch/dma.h>
+
++#ifdef CONFIG_PXA_EZX
++#include <asm/arch/ezx.h>
++#endif
++
+ #include "generic.h"
+ #include "devices.h"
+ #include "clock.h"
+@@ -231,7 +235,12 @@
+ void pxa27x_cpu_pm_restore(unsigned long *sleep_save)
+ {
+ /* ensure not to come back here if it wasn't intended */
++#ifdef CONFIG_PXA_EZX
++ *(unsigned long *)(phys_to_virt(RESUME_ADDR)) = 0;
++ *(unsigned long *)(phys_to_virt(FLAG_ADDR)) = OFF_FLAG;
++#else
+ PSPR = 0;
++#endif
+
+ /* restore registers */
+ RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1);
+@@ -281,7 +290,13 @@
+ break;
+ case PM_SUSPEND_MEM:
+ /* set resume return address */
++#ifdef CONFIG_PXA_EZX
++ /* set EZX flags for blob - WM */
++ *(unsigned long *)(phys_to_virt(RESUME_ADDR)) = virt_to_phys(pxa_cpu_resume);
++ *(unsigned long *)(phys_to_virt(FLAG_ADDR)) = SLEEP_FLAG;
++#else
+ PSPR = virt_to_phys(pxa_cpu_resume);
++#endif
+ pxa27x_cpu_suspend(PWRMODE_SLEEP);
+ break;
+ }
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/ezx.c
++++ linux-2.6.24/arch/arm/mach-pxa/ezx.c
+@@ -18,6 +18,7 @@
+ #include <asm/arch/pxafb.h>
+ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/ohci.h>
++#include <asm/arch/system.h>
+ #include <asm/arch/ezx.h>
+ #include <asm/arch/ezx-bp.h>
+
+@@ -108,8 +109,53 @@
+ &ezxbp_device,
+ };
+
++/* PM */
++extern int bp_handshake_passed(void);
++
++static void ezx_reboot_poweroff(char mode)
++{
++ *(unsigned long *)(phys_to_virt(BPSIG_ADDR)) = NO_FLAG;
++ cpu_proc_fin();
++
++#ifdef CONFIG_EZX_BP
++ if (pxa_gpio_get_value(GPIO_BB_WDI) == 0) {
++ *(unsigned long *)(phys_to_virt(BPSIG_ADDR)) = WDI_FLAG;
++
++ /* reset BP */
++ pxa_gpio_set_value(GPIO_BB_RESET, 0);
++ mdelay(1);
++ pxa_gpio_set_value(GPIO_BB_RESET, 1);
++
++ if (mode == 'z') {
++ arch_reset('h');
++ while (1);
++ }
++ }
++#endif
++ if (mode == 'z')
++ /* Panic! Ask PCAP to turn both processors off */
++ pxa_gpio_set_value(GPIO_WDI_AP, 0);
++ else
++ arm_machine_restart(mode);
++
++ while (1);
++}
++
++static inline void ezx_poweroff(void)
++{
++ ezx_reboot_poweroff('z');
++}
++
++static inline void ezx_restart(char mode)
++{
++ ezx_reboot_poweroff(mode);
++}
++
+ static int __init ezx_init(void)
+ {
++ pm_power_off = ezx_poweroff;
++ arm_pm_restart = ezx_restart;
++
+ CKEN = (1 << CKEN_OSTIMER) | (1 << CKEN_MEMC);
+
+ pxa_gpio_mode(GPIO_ICL_FFRXD_MD);
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch
new file mode 100644
index 0000000000..efff7e06a5
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-serial-bug-workaround.patch
@@ -0,0 +1,45 @@
+Work around some errata in the pxa serial code (copied from motorolas 2.4.x tree)
+
+Index: linux-2.6.24/drivers/serial/pxa.c
+===================================================================
+--- linux-2.6.24.orig/drivers/serial/pxa.c
++++ linux-2.6.24/drivers/serial/pxa.c
+@@ -29,6 +29,10 @@
+ #define SUPPORT_SYSRQ
+ #endif
+
++#define pxa_buggy_port(x) ({ \
++ int cpu_ver; asm("mrc%? p15, 0, %0, c0, c0" : "=r" (cpu_ver)); \
++ ((x) == PORT_PXA && (cpu_ver & ~1) == 0x69052100); })
++
+ #include <linux/module.h>
+ #include <linux/ioport.h>
+ #include <linux/init.h>
+@@ -196,7 +200,7 @@
+ if (uart_circ_empty(xmit))
+ serial_pxa_stop_tx(&up->port);
+ }
+-
++static inline irqreturn_t serial_pxa_irq(int, void *);
+ static void serial_pxa_start_tx(struct uart_port *port)
+ {
+ struct uart_pxa_port *up = (struct uart_pxa_port *)port;
+@@ -204,6 +208,8 @@
+ if (!(up->ier & UART_IER_THRI)) {
+ up->ier |= UART_IER_THRI;
+ serial_out(up, UART_IER, up->ier);
++ if (pxa_buggy_port(up->port.type))
++ serial_pxa_irq(up->port.irq, NULL);
+ }
+ }
+
+@@ -299,6 +305,9 @@
+
+ mcr |= up->mcr;
+
++ if (pxa_buggy_port(up->port.type) && up->port.irq != 0)
++ mcr ^= UART_MCR_OUT2;
++
+ serial_out(up, UART_MCR, mcr);
+ }
+
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-fix-init-errorpath.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-init-errorpath.patch
new file mode 100644
index 0000000000..716ef86fd1
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-init-errorpath.patch
@@ -0,0 +1,20 @@
+Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 00:10:32.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 00:42:23.000000000 +0100
+@@ -811,7 +811,6 @@
+ /*init the related mux interface*/
+ if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) {
+ err("usb_ipc_init: Out of memory.");
+- usb_deregister(&usb_ipc_driver);
+ return -ENOMEM;
+ }
+ bvd_dbg("usb_ipc_init: Address of bvd_ipc:%p", bvd_ipc);
+@@ -819,7 +818,6 @@
+ if (!(bvd_ipc->xmit.buf = kmalloc(IPC_USB_XMIT_SIZE, GFP_KERNEL))) {
+ err("usb_ipc_init: Not enough memory for the input buffer.");
+ kfree(bvd_ipc);
+- usb_deregister(&usb_ipc_driver);
+ return -ENOMEM;
+ }
+ bvd_dbg("usb_ipc_init: bvd_ipc->xmit.buf address:%p",
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-fix-makefile.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-makefile.patch
new file mode 100644
index 0000000000..9e5ae18263
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-makefile.patch
@@ -0,0 +1,14 @@
+Index: linux-2.6.23/drivers/char/Makefile
+===================================================================
+--- linux-2.6.23.orig/drivers/char/Makefile 2007-10-22 22:26:50.000000000 +0200
++++ linux-2.6.23/drivers/char/Makefile 2007-10-22 22:26:59.000000000 +0200
+@@ -111,7 +111,8 @@
+ obj-$(CONFIG_JS_RTC) += js-rtc.o
+ js-rtc-y = rtc.o
+
+-obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o ts0710_mux_usb.o
++obj-$(CONFIG_TS0710_MUX_USB) += ts0710_mux_usb.o
++obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o
+
+
+ # Files generated that shall be removed upon make clean
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-fix-tty-driver.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-tty-driver.patch
new file mode 100644
index 0000000000..2e1aabd952
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/mux-fix-tty-driver.patch
@@ -0,0 +1,125 @@
+Index: linux-2.6.20.7/drivers/char/ts0710_mux.c
+===================================================================
+--- linux-2.6.20.7.orig/drivers/char/ts0710_mux.c 2007-04-22 10:51:31.000000000 +0200
++++ linux-2.6.20.7/drivers/char/ts0710_mux.c 2007-04-22 10:53:05.000000000 +0200
+@@ -241,7 +241,8 @@
+ static volatile __u8 mux_recv_info_flags[NR_MUXS];
+ static mux_recv_struct *mux_recv_queue = NULL;
+
+-static struct tty_driver mux_driver;
++// Local for 2.6?
++static struct tty_driver *mux_driver;
+
+ #ifdef USB_FOR_MUX
+ #define COMM_FOR_MUX_DRIVER usb_for_mux_driver
+@@ -3007,6 +3008,7 @@
+ #else
+ mux_tty[line]++;
+ dlci = tty2dlci[line];
++ mux_table[line] = tty;
+
+ /* if( dlci == 1 ) { */
+ /* Open server channel 0 first */
+@@ -3087,6 +3089,7 @@
+ }
+ }
+
++
+ retval = 0;
+ #endif
+ out:
+@@ -3894,43 +3897,50 @@
+ INIT_WORK(&receive_tqueue, receive_worker, NULL);
+ INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL);
+
+- memset(&mux_driver, 0, sizeof(struct tty_driver));
+- memset(&mux_tty, 0, sizeof(mux_tty));
+- mux_driver.magic = TTY_DRIVER_MAGIC;
+- mux_driver.driver_name = "ts0710mux";
+- mux_driver.name = "ts0710mux";
+- mux_driver.major = TS0710MUX_MAJOR;
+- mux_driver.minor_start = TS0710MUX_MINOR_START;
+- mux_driver.num = NR_MUXS;
+- mux_driver.type = TTY_DRIVER_TYPE_SERIAL;
+- mux_driver.subtype = SERIAL_TYPE_NORMAL;
+- mux_driver.init_termios = tty_std_termios;
+- mux_driver.init_termios.c_iflag = 0;
+- mux_driver.init_termios.c_oflag = 0;
+- mux_driver.init_termios.c_cflag = B38400 | CS8 | CREAD;
+- mux_driver.init_termios.c_lflag = 0;
+- mux_driver.flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW;
+-
+- mux_driver.ttys = mux_table;
+- mux_driver.termios = mux_termios;
+- mux_driver.termios_locked = mux_termios_locked;
++ mux_driver = alloc_tty_driver(NR_MUXS);
++ if (!mux_driver)
++ return -ENOMEM;
++
++ mux_driver->owner = THIS_MODULE;
++ mux_driver->driver_name = "ts0710mux";
++ mux_driver->name = "mux";
++ mux_driver->devfs_name = "mux";
++ mux_driver->major = TS0710MUX_MAJOR;
++ mux_driver->minor_start = TS0710MUX_MINOR_START;
++ mux_driver->type = TTY_DRIVER_TYPE_SERIAL;
++ mux_driver->subtype = SERIAL_TYPE_NORMAL;
++ mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW;
++
++ mux_driver->init_termios = tty_std_termios;
++ mux_driver->init_termios.c_iflag = 0;
++ mux_driver->init_termios.c_oflag = 0;
++ mux_driver->init_termios.c_cflag = B38400 | CS8 | CREAD;
++ mux_driver->init_termios.c_lflag = 0;
++
++// mux_driver.ttys = mux_table;
++ mux_driver->termios = mux_termios;
++ mux_driver->termios_locked = mux_termios_locked;
+ // mux_driver.driver_state = mux_state;
+- mux_driver.other = NULL;
++ mux_driver->other = NULL;
+
+- mux_driver.open = mux_open;
+- mux_driver.close = mux_close;
+- mux_driver.write = mux_write;
+- mux_driver.write_room = mux_write_room;
+- mux_driver.flush_buffer = mux_flush_buffer;
+- mux_driver.chars_in_buffer = mux_chars_in_buffer;
+- mux_driver.throttle = mux_throttle;
+- mux_driver.unthrottle = mux_unthrottle;
+- mux_driver.ioctl = mux_ioctl;
+- mux_driver.owner = THIS_MODULE;
++ mux_driver->open = mux_open;
++ mux_driver->close = mux_close;
++ mux_driver->write = mux_write;
++ mux_driver->write_room = mux_write_room;
++ mux_driver->flush_buffer = mux_flush_buffer;
++ mux_driver->chars_in_buffer = mux_chars_in_buffer;
++ mux_driver->throttle = mux_throttle;
++ mux_driver->unthrottle = mux_unthrottle;
++ mux_driver->ioctl = mux_ioctl;
+
+- if (tty_register_driver(&mux_driver))
++ // FIXME: No panic() here
++ if (tty_register_driver(mux_driver))
+ panic("Couldn't register mux driver");
+
++ for (j=0; j<NR_MUXS; j++)
++ tty_register_device(mux_driver, j, NULL);
++
++
+ COMM_MUX_DISPATCHER = mux_dispatcher;
+ COMM_MUX_SENDER = mux_sender;
+
+@@ -3964,7 +3974,10 @@
+ mux_recv_info[j] = 0;
+ }
+
+- if (tty_unregister_driver(&mux_driver))
++ for (j=0; j<NR_MUXS; j++)
++ tty_unregister_device(mux_driver, j);
++
++ if (tty_unregister_driver(mux_driver))
+ panic("Couldn't unregister mux driver");
+ }
+
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-fix.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-fix.patch
new file mode 100644
index 0000000000..b820762f41
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/mux-fix.patch
@@ -0,0 +1,164 @@
+Index: linux-2.6.20.7/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.20.7.orig/drivers/char/ts0710_mux_usb.c 2007-04-21 18:07:45.000000000 +0200
++++ linux-2.6.20.7/drivers/char/ts0710_mux_usb.c 2007-04-21 20:55:13.000000000 +0200
+@@ -626,7 +626,6 @@
+ }
+
+ interface = &intf->cur_altsetting->desc;
+- endpoint = &intf->cur_altsetting->endpoint[0].desc;
+ /* Start checking for two bulk endpoints or ... FIXME: This is a future
+ * enhancement...*/
+ bvd_dbg("usb_ipc_probe: Number of Endpoints:%d",
+@@ -638,30 +637,26 @@
+
+ ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0;
+
+- bvd_dbg("usb_ipc_probe: endpoint[0] is:%x",
+- (&endpoint[0])->bEndpointAddress);
+- bvd_dbg("usb_ipc_probe: endpoint[1] is:%x ",
+- (&endpoint[1])->bEndpointAddress);
+-
+ while (ep_cnt < interface->bNumEndpoints) {
+-
+- if (!have_bulk_in_mux && IS_EP_BULK_IN(endpoint[ep_cnt])) {
+- bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is:%x ",
+- (&endpoint[ep_cnt])->bEndpointAddress);
+- have_bulk_in_mux =
+- (&endpoint[ep_cnt])->bEndpointAddress;
+- readsize = (&endpoint[ep_cnt])->wMaxPacketSize;
++ endpoint = &intf->cur_altsetting->endpoint[ep_cnt].desc;
++ bvd_dbg("usb_ipc_probe: endpoint[%i] is: %x", ep_cnt,
++ endpoint->bEndpointAddress);
++
++ if (!have_bulk_in_mux && IS_EP_BULK_IN(*endpoint)) {
++ bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is: %x ",
++ endpoint->bEndpointAddress);
++ have_bulk_in_mux = endpoint->bEndpointAddress;
++ readsize = endpoint->wMaxPacketSize;
+ bvd_dbg("usb_ipc_probe: readsize=%d", readsize);
+ ep_cnt++;
+ continue;
+ }
+
+- if (!have_bulk_out_mux && IS_EP_BULK_OUT(endpoint[ep_cnt])) {
+- bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is:%x ",
+- (&endpoint[ep_cnt])->bEndpointAddress);
+- have_bulk_out_mux =
+- (&endpoint[ep_cnt])->bEndpointAddress;
+- writesize = (&endpoint[ep_cnt])->wMaxPacketSize;
++ if (!have_bulk_out_mux && IS_EP_BULK_OUT(*endpoint)) {
++ bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is: %x ",
++ endpoint->bEndpointAddress);
++ have_bulk_out_mux = endpoint->bEndpointAddress;
++ writesize = endpoint->wMaxPacketSize;
+ bvd_dbg("usb_ipc_probe: writesize=%d", writesize);
+ ep_cnt++;
+ continue;
+@@ -718,21 +713,27 @@
+ bvd_ipc->bh_bp.func = usbipc_bh_bp_func;
+ bvd_ipc->bh_bp.data = (unsigned long) bvd_ipc;
+
++ bvd_dbg("after assignements");
+ /*Build a write urb*/
++ usb_init_urb(&bvd_ipc->writeurb_mux);
+ usb_fill_bulk_urb(&bvd_ipc->writeurb_mux, usbdev,
+ usb_sndbulkpipe(bvd_ipc->ipc_dev,
+ bvd_ipc->bulk_out_ep_mux),
+ bvd_ipc->obuf, writesize, usb_ipc_write_bulk,
+ bvd_ipc);
+ //bvd_ipc->writeurb_mux.transfer_flags |= USB_ASYNC_UNLINK;
++ bvd_dbg("after write urb");
+
+ /*Build a read urb and send a IN token first time*/
++ usb_init_urb(&bvd_ipc->readurb_mux);
+ usb_fill_bulk_urb(&bvd_ipc->readurb_mux, usbdev,
+ usb_rcvbulkpipe(usbdev, bvd_ipc->bulk_in_ep_mux),
+ bvd_ipc->ibuf, readsize, usb_ipc_read_bulk, bvd_ipc);
+ //bvd_ipc->readurb_mux.transfer_flags |= USB_ASYNC_UNLINK;
++ bvd_dbg("after read urb");
+
+- usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc);
++ //usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc);
++ bvd_dbg("after claim interface");
+ //usb_driver_claim_interface(&usb_ipc_driver, &ipccfg->interface[1], bvd_ipc);
+
+ // a2590c: dsplog is not supported by this driver
+@@ -740,6 +741,8 @@
+ // &ipccfg->interface[2], bvd_ipc);
+ /*send a IN token first time*/
+ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
++ bvd_dbg("after assignement");
++
+ if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC))
+ printk("usb_ipc_prob: usb_submit_urb(read mux bulk) failed!\n");
+
+@@ -750,7 +753,7 @@
+ tasklet_schedule(&bvd_ipc->bh);
+ }
+
+- printk("usb_ipc_probe: completed probe!");
++ printk("usb_ipc_probe: completed probe!\n");
+ usb_set_intfdata(intf, &bvd_ipc);
+ return 0;
+ }
+@@ -760,21 +763,23 @@
+ //struct usb_device *usbdev = interface_to_usbdev(intf);
+ struct ipc_usb_data *bvd_ipc_disconnect = usb_get_intfdata(intf);
+
+- printk("usb_ipc_disconnect:*** \n");
+
++ printk("usb_ipc_disconnect. bvd_ipc_disconnect address: %p\n", bvd_ipc_disconnect);
++
++ //FIXME: Memory leak?
+ if ((UHCRHPS3 & 0x4) == 0)
+- usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux);
++ // usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux);
+
+- usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux);
++ //usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux);
+
+ bvd_ipc_disconnect->ipc_flag = IPC_USB_PROBE_NOT_READY;
+ kfree(bvd_ipc_disconnect->ibuf);
+ kfree(bvd_ipc_disconnect->obuf);
+
+- usb_driver_release_interface(&usb_ipc_driver,
+- bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]);
+- usb_driver_release_interface(&usb_ipc_driver,
+- bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]);
++ //usb_driver_release_interface(&usb_ipc_driver,
++ // bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]);
++ //usb_driver_release_interface(&usb_ipc_driver,
++ // bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]);
+
+ //a2590c: dsplog interface is not supported by this driver
+ //usb_driver_release_interface(&usb_ipc_driver, &bvd_ipc_disconnect->ipc_dev->actconfig->interface[2]);
+@@ -803,13 +808,6 @@
+ int result;
+
+ bvd_dbg("init usb_ipc");
+- /* register driver at the USB subsystem */
+- result = usb_register(&usb_ipc_driver);
+- if (result < 0) {
+- err ("usb ipc driver could not be registered");
+- return result;
+- }
+-
+ /*init the related mux interface*/
+ if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) {
+ err("usb_ipc_init: Out of memory.");
+@@ -836,6 +834,14 @@
+ usb_for_mux_driver = &ipcusb_tty_driver;
+ usb_for_mux_tty = &ipcusb_tty;
+
++ /* register driver at the USB subsystem */
++ // this was called before bvd_ipc was allocated
++ result = usb_register(&usb_ipc_driver);
++ if (result < 0) {
++ err ("usb ipc driver could not be registered");
++ return result;
++ }
++
+ /* init timers for ipcusb read process and usb suspend */
+ init_timer(&ipcusb_timer);
+ ipcusb_timer.function = ipcusb_timeout;
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-ifdef-ezx-features.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-ifdef-ezx-features.patch
new file mode 100644
index 0000000000..a3a6a8249a
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/mux-ifdef-ezx-features.patch
@@ -0,0 +1,99 @@
+Index: linux-2.6.21/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.21.orig/drivers/char/ts0710_mux_usb.c 2007-09-28 23:37:33.000000000 +0200
++++ linux-2.6.21/drivers/char/ts0710_mux_usb.c 2007-09-28 23:37:45.000000000 +0200
+@@ -35,10 +35,14 @@
+ #include <linux/list.h>
+ #include <linux/errno.h>
+ #include <asm/uaccess.h>
++
++#ifdef CONFIG_PXA_EZX
+ #include <asm/hardware.h>
+ #include <asm/arch/hardware.h>
+ #include <asm/arch-pxa/pxa-regs.h>
+ #include <asm/arch-pxa/ezx.h>
++#endif
++
+ #include <linux/slab.h>
+ #include <linux/miscdevice.h>
+ #include <linux/init.h>
+@@ -341,8 +345,10 @@
+
+ static void wakeup_timeout(unsigned long data)
+ {
++#ifdef CONFIG_PXA_EZX
+ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
+ bvd_dbg("wakup_timeout: send GPIO_MCU_INT_SW signal!");
++#endif
+ }
+
+ static void suspend_timeout(unsigned long data)
+@@ -353,10 +359,12 @@
+ bvd_dbg("suspend_timeout: add the suspend timer again");
+ } else {
+ unlink_urbs(&bvd_ipc->readurb_mux);
++#ifdef CONFIG_PXA_EZX
+ UHCRHPS3 = 0x4;
+ mdelay(40);
+ bvd_dbg("suspend_timeout: send SUSPEND signal! UHCRHPS3=0x%x",
+ UHCRHPS3);
++#endif
+ }
+ }
+
+@@ -404,6 +412,7 @@
+ bvd_ipc->writeurb_mux.transfer_buffer_length = buf_num;
+ bvd_dbg("ipcusb_xmit_data: copy data to write urb finished! ");
+
++#ifdef CONFIG_PXA_EZX
+ if ((UHCRHPS3 & 0x4) == 0x4) {
+ static int ret;
+ int time = 0;
+@@ -442,6 +451,7 @@
+ "failed! status=%d\n", ret);
+ bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!");
+ }
++#endif
+
+ sumbit_times++;
+ bvd_ipc->write_finished_flag = 0;
+@@ -464,12 +474,16 @@
+
+ static void usbipc_bh_bp_func(unsigned long param)
+ {
++#ifdef CONFIG_PXA_EZX
+ if ((UHCRHPS3 & 0x4) == 0x4) {
+ UHCRHPS3 = 0x8;
++#endif
+ mdelay(40);
++#ifdef CONFIG_PXA_EZX
+ bvd_dbg("ipcusb_softint_send_readurb: Send RESUME signal! "
+ "UHCRHPS3=0x%x", UHCRHPS3);
+ }
++#endif
+ if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) {
+ //get_halted_bit();
+
+@@ -735,7 +749,9 @@
+ printk("usb_ipc_disconnect. bvd_ipc_disconnect address: %p\n", bvd_ipc_disconnect);
+
+ //FIXME: Memory leak?
++#ifdef CONFIG_PXA_EZX
+ if ((UHCRHPS3 & 0x4) == 0)
++#endif
+ // usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux);
+
+ //usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux);
+Index: linux-2.6.21/drivers/char/Kconfig
+===================================================================
+--- linux-2.6.21.orig/drivers/char/Kconfig 2007-09-29 10:52:18.000000000 +0200
++++ linux-2.6.21/drivers/char/Kconfig 2007-09-29 10:52:30.000000000 +0200
+@@ -1073,7 +1073,7 @@
+
+ config TS0710_MUX
+ tristate "GSM TS 07.10 Multiplex driver"
+- depends on EZX_BP
++ depends on EZX_BP || X86
+ help
+ This implements the GSM 07.10 multiplex.
+
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch
new file mode 100644
index 0000000000..8d5299e3bd
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/mux-linux-2.6.21-fix.patch
@@ -0,0 +1,297 @@
+Index: linux-2.6.21/drivers/char/ts0710.h
+===================================================================
+--- linux-2.6.21.orig/drivers/char/ts0710.h 2007-04-27 20:35:44.000000000 -0300
++++ linux-2.6.21/drivers/char/ts0710.h 2007-04-27 20:36:03.000000000 -0300
+@@ -45,7 +45,6 @@
+ * 11/18/2002 Modified
+ */
+
+-#include <linux/config.h>
+ #include <linux/module.h>
+
+ #include <linux/errno.h>
+@@ -58,7 +57,6 @@
+ #include <linux/major.h>
+ #include <linux/mm.h>
+ #include <linux/init.h>
+-#include <linux/devfs_fs_kernel.h>
+
+ #include <asm/uaccess.h>
+ #include <asm/system.h>
+Index: linux-2.6.21/drivers/char/ts0710_mux.c
+===================================================================
+--- linux-2.6.21.orig/drivers/char/ts0710_mux.c 2007-04-27 20:35:44.000000000 -0300
++++ linux-2.6.21/drivers/char/ts0710_mux.c 2007-04-27 20:36:03.000000000 -0300
+@@ -46,7 +46,6 @@
+ * 11/18/2002 Second version
+ * 04/21/2004 Add GPRS PROC
+ */
+-#include <linux/config.h>
+ #include <linux/module.h>
+ #include <linux/types.h>
+
+@@ -70,15 +69,12 @@
+ #include <linux/mm.h>
+ #include <linux/slab.h>
+ #include <linux/init.h>
+-#include <linux/devfs_fs_kernel.h>
+-//#include <syslog.h>
+
+ #include <asm/uaccess.h>
+ #include <asm/system.h>
+ #include <asm/bitops.h>
+
+ #ifdef USB_FOR_MUX
+-//#include <linux/usb.h>
+ #include "ts0710_mux_usb.h"
+ #endif
+
+@@ -268,8 +264,8 @@
+ static struct work_struct post_recv_tqueue;
+
+ static struct tty_struct *mux_table[NR_MUXS];
+-static struct termios *mux_termios[NR_MUXS];
+-static struct termios *mux_termios_locked[NR_MUXS];
++static struct ktermios *mux_termios[NR_MUXS];
++static struct ktermios *mux_termios_locked[NR_MUXS];
+ static volatile short int mux_tty[NR_MUXS];
+
+ #ifdef min
+@@ -1894,11 +1890,7 @@
+ if (test_bit(TTY_THROTTLED, &tty->flags)) {
+ queue_data = 1;
+ } else {
+- if (test_bit
+- (TTY_DONT_FLIP, &tty->flags)) {
+- queue_data = 1;
+- post_recv = 1;
+- } else if (recv_info->total) {
++ if (recv_info->total) {
+ queue_data = 1;
+ post_recv = 1;
+ } else if (recv_room < uih_len) {
+@@ -3149,10 +3141,10 @@
+
+ /*For BP UART problem End*/
+
+-static void receive_worker(void *private_)
++static void receive_worker(struct work_struct *work)
+ {
+ struct tty_struct *tty = COMM_FOR_MUX_TTY;
+- int i, count, tbuf_free, tbuf_read;
++ int count, tbuf_free, tbuf_read;
+ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE];
+ static unsigned char *tbuf_ptr = &tbuf[0];
+ static unsigned char *start_flag = 0;
+@@ -3168,7 +3160,7 @@
+ __u32 uih_len;
+ /*For BP UART problem End */
+
+- UNUSED_PARAM(private_);
++ UNUSED_PARAM(work);
+
+ if (!tty)
+ return;
+@@ -3440,7 +3432,7 @@
+ clear_bit(RECV_RUNNING, &mux_recv_flags);
+ }
+
+-static void post_recv_worker(void *private_)
++static void post_recv_worker(struct work_struct *work)
+ {
+ ts0710_con *ts0710 = &ts0710_connection;
+ int tty_idx;
+@@ -3453,7 +3445,7 @@
+ mux_recv_packet *recv_packet, *recv_packet2;
+ __u8 j;
+
+- UNUSED_PARAM(private_);
++ UNUSED_PARAM(work);
+
+ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) {
+ schedule_work(&post_recv_tqueue);
+@@ -3499,10 +3491,6 @@
+ if (test_bit(TTY_THROTTLED, &tty->flags)) {
+ add_post_recv_queue(&post_recv_q, recv_info);
+ continue;
+- } else if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
+- post_recv = 1;
+- add_post_recv_queue(&post_recv_q, recv_info);
+- continue;
+ }
+
+ flow_control = 0;
+@@ -3635,7 +3623,7 @@
+ }
+ }
+
+-static void send_worker(void *private_)
++static void send_worker(struct work_struct *work)
+ {
+ ts0710_con *ts0710 = &ts0710_connection;
+ __u8 j;
+@@ -3644,7 +3632,7 @@
+ struct tty_struct *tty;
+ __u8 dlci;
+
+- UNUSED_PARAM(private_);
++ UNUSED_PARAM(work);
+
+ TS0710_DEBUG("Enter into send_worker");
+
+@@ -3819,7 +3807,8 @@
+ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes =
+ get_count(TS0710MUX_GPRS2_SEND_COUNT_IDX);
+
+- copy_to_user(buf, gprsData, bufLen);
++ if(copy_to_user(buf, gprsData, bufLen))
++ return -EFAULT;
+
+ return bufLen;
+ }
+@@ -3836,7 +3825,8 @@
+
+ memset(gprsData, 0, bufLen);
+
+- copy_from_user(gprsData, buf, bufLen);
++ if(copy_from_user(gprsData, buf, bufLen))
++ return -EFAULT;
+
+ set_count(TS0710MUX_GPRS1_RECV_COUNT_IDX, gprsData[0].recvBytes);
+ set_count(TS0710MUX_GPRS1_SEND_COUNT_IDX, gprsData[0].sentBytes);
+@@ -3893,9 +3883,9 @@
+ }
+ post_recv_count_flag = 0;
+
+- INIT_WORK(&send_tqueue, send_worker, NULL);
+- INIT_WORK(&receive_tqueue, receive_worker, NULL);
+- INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL);
++ INIT_WORK(&send_tqueue, send_worker);
++ INIT_WORK(&receive_tqueue, receive_worker);
++ INIT_WORK(&post_recv_tqueue, post_recv_worker);
+
+ mux_driver = alloc_tty_driver(NR_MUXS);
+ if (!mux_driver)
+@@ -3904,12 +3894,11 @@
+ mux_driver->owner = THIS_MODULE;
+ mux_driver->driver_name = "ts0710mux";
+ mux_driver->name = "mux";
+- mux_driver->devfs_name = "mux";
+ mux_driver->major = TS0710MUX_MAJOR;
+ mux_driver->minor_start = TS0710MUX_MINOR_START;
+ mux_driver->type = TTY_DRIVER_TYPE_SERIAL;
+ mux_driver->subtype = SERIAL_TYPE_NORMAL;
+- mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW;
++ mux_driver->flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
+
+ mux_driver->init_termios = tty_std_termios;
+ mux_driver->init_termios.c_iflag = 0;
+@@ -3917,10 +3906,10 @@
+ mux_driver->init_termios.c_cflag = B38400 | CS8 | CREAD;
+ mux_driver->init_termios.c_lflag = 0;
+
+-// mux_driver.ttys = mux_table;
++ //mux_driver.ttys = mux_table;
+ mux_driver->termios = mux_termios;
+ mux_driver->termios_locked = mux_termios_locked;
+-// mux_driver.driver_state = mux_state;
++ //mux_driver.driver_state = mux_state;
+ mux_driver->other = NULL;
+
+ mux_driver->open = mux_open;
+Index: linux-2.6.21/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.21.orig/drivers/char/ts0710_mux_usb.c 2007-04-27 20:35:44.000000000 -0300
++++ linux-2.6.21/drivers/char/ts0710_mux_usb.c 2007-04-27 22:34:31.000000000 -0300
+@@ -188,7 +188,8 @@
+ buf_list_t *inbuf;
+ int count = urb->actual_length;
+
+- inbuf = kmalloc(sizeof(buf_list_t), GFP_KERNEL);
++ // we are called from interrupt context.
++ inbuf = kmalloc(sizeof(buf_list_t), GFP_ATOMIC);
+ if (!inbuf) {
+ printk("append_to_inbuf_list: (%d) out of memory!\n",
+ sizeof(buf_list_t));
+@@ -196,7 +197,7 @@
+ }
+
+ inbuf->size = count;
+- inbuf->body = kmalloc(sizeof(char)*count, GFP_KERNEL);
++ inbuf->body = kmalloc(sizeof(char)*count, GFP_ATOMIC);
+ if (!inbuf->body) {
+ kfree(inbuf);
+ printk("append_to_inbuf_list: (%d) out of memory!\n",
+@@ -222,7 +223,7 @@
+ inbuf = list_entry(ptr, buf_list_t, list);
+ src_count = inbuf->size;
+ if (dst_count >= src_count) {
+- memcpy(buf, inbuf->body, src_count);
++ memcpy((unsigned char *)buf, inbuf->body, src_count);
+ ret = src_count;
+ list_del(ptr);
+ kfree(inbuf->body);
+@@ -282,9 +283,8 @@
+ spin_unlock(&bvd_ipc->in_buf_lock);
+ }
+
+-static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs)
++static void usb_ipc_read_bulk(struct urb *urb)
+ {
+- buf_list_t *inbuf;
+ int count = urb->actual_length;
+ struct tty_struct *tty = &ipcusb_tty;
+
+@@ -319,7 +319,7 @@
+ bvd_dbg("usb_ipc_read_bulk: completed!!!");
+ }
+
+-static void usb_ipc_write_bulk(struct urb *urb, struct pt_regs *regs)
++static void usb_ipc_write_bulk(struct urb *urb)
+ {
+ callback_times++;
+ bvd_ipc->write_finished_flag = 1;
+@@ -437,7 +437,7 @@
+ /*send IN token*/
+ bvd_ipc->readurb_mux.actual_length = 0;
+ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
+- if (ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC))
++ if ((ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)))
+ printk("ipcusb_xmit_data: usb_submit_urb(read mux bulk)"
+ "failed! status=%d\n", ret);
+ bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!");
+@@ -447,7 +447,7 @@
+ bvd_ipc->write_finished_flag = 0;
+ //printk("%s: clear write_finished_flag:%d\n", __FUNCTION__, bvd_ipc->write_finished_flag);
+ bvd_ipc->writeurb_mux.dev = bvd_ipc->ipc_dev;
+- if (result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC))
++ if ((result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC)))
+ warn("ipcusb_xmit_data: funky result! result=%d\n", result);
+
+ bvd_dbg("ipcusb_xmit_data: usb_submit_urb finished! result:%d", result);
+@@ -498,7 +498,7 @@
+ return 0;
+
+ if (*ipcusb_ap_to_bp != NULL)
+- (*ipcusb_ap_to_bp)(buf, count);
++ (*ipcusb_ap_to_bp)((unsigned char *)buf, count);
+
+ bvd_ipc->suspend_flag = 1;
+
+@@ -602,6 +602,7 @@
+ }
+
+ ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0;
++ readsize = writesize = 0;
+
+ while (ep_cnt < interface->bNumEndpoints) {
+ endpoint = &intf->cur_altsetting->endpoint[ep_cnt].desc;
+@@ -792,6 +793,8 @@
+ bvd_ipc->ipc_dev = NULL;
+ bvd_ipc->xmit.head = bvd_ipc->xmit.tail = 0;
+ bvd_ipc->write_flag = IPC_USB_WRITE_INIT;
++ spin_lock_init(&bvd_ipc->lock);
++ spin_lock_init(&bvd_ipc->in_buf_lock);
+
+ ipcusb_tty_driver.write = usb_ipc_write;
+ ipcusb_tty_driver.chars_in_buffer = usb_ipc_chars_in_buffer;
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-remove-flipbuffers.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-flipbuffers.patch
new file mode 100644
index 0000000000..d4781f9fc7
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-flipbuffers.patch
@@ -0,0 +1,269 @@
+Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 00:52:25.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 00:52:26.000000000 +0100
+@@ -133,6 +133,7 @@
+
+ struct circ_buf xmit; /* write cric bufffer */
+ struct list_head in_buf_list;
++ spinlock_t in_buf_lock;
+ char bulk_in_ep_mux,
+ bulk_out_ep_mux,
+ bulk_in_ep_dsplog;
+@@ -204,9 +205,39 @@
+ return;
+ }
+ memcpy(inbuf->body, (unsigned char*)urb->transfer_buffer, count);
++ spin_lock(&bvd_ipc->in_buf_lock);
+ list_add_tail(&inbuf->list, &bvd_ipc->in_buf_list);
++ spin_unlock(&bvd_ipc->in_buf_lock);
+ }
+
++int get_from_inbuf_list(const unsigned char *buf, int dst_count)
++{
++ int ret = 0;
++ spin_lock(&bvd_ipc->in_buf_lock);
++ if (!(list_empty(&bvd_ipc->in_buf_list))) {
++ int src_count;
++ buf_list_t *inbuf;
++ struct list_head *ptr;
++
++ ptr = bvd_ipc->in_buf_list.next;
++ inbuf = list_entry(ptr, buf_list_t, list);
++ src_count = inbuf->size;
++ if (dst_count >= src_count) {
++ memcpy(buf, inbuf->body, src_count);
++ ret = src_count;
++ list_del(ptr);
++ kfree(inbuf->body);
++ kfree(inbuf);
++ } else {
++ bvd_dbg("get_from_inbuf_list: not enough space in destination buffer");
++ }
++ }
++ spin_unlock(&bvd_ipc->in_buf_lock);
++
++ return ret;
++}
++EXPORT_SYMBOL(get_from_inbuf_list);
++
+ static void ipcusb_timeout(unsigned long data)
+ {
+ struct tty_struct *tty = &ipcusb_tty;
+@@ -214,13 +245,14 @@
+
+ bvd_dbg("ipcusb_timeout***");
+
++ spin_lock(&bvd_ipc->in_buf_lock);
+ while (!(list_empty(&bvd_ipc->in_buf_list))) {
+ int count;
+ buf_list_t *inbuf;
+ struct list_head *ptr = NULL;
+
+ ptr = bvd_ipc->in_buf_list.next;
+- inbuf = list_entry (ptr, buf_list_t, list);
++ inbuf = list_entry(ptr, buf_list_t, list);
+ count = inbuf->size;
+ if (tty_insert_flip_string(tty, inbuf->body, count) >= count) {
+ list_del(ptr);
+@@ -232,10 +264,12 @@
+ break;
+ }
+ }
++ spin_unlock(&bvd_ipc->in_buf_lock);
+
+ if (usb_mux_dispatcher)
+ usb_mux_dispatcher(tty); /**call Liu changhui's func.**/
+
++ spin_lock(&bvd_ipc->in_buf_lock);
+ if (list_empty(&bvd_ipc->in_buf_list)) {
+ urb->actual_length = 0;
+ urb->dev = bvd_ipc->ipc_dev;
+@@ -246,6 +280,7 @@
+ ipcusb_timer.data = (unsigned long)urb;
+ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
+ }
++ spin_unlock(&bvd_ipc->in_buf_lock);
+ }
+
+ static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs)
+@@ -266,69 +301,11 @@
+ if (count > 0 && ((*ipcusb_bp_to_ap) != NULL))
+ (*ipcusb_bp_to_ap)(urb->transfer_buffer, urb->actual_length);
+
+- if (!(list_empty(&bvd_ipc->in_buf_list))) {
+- int need_mux = 0;
+-
+- bvd_dbg("usb_ipc_read_bulk: some urbs in_buf_list");
+- if (count > 0) {
+- bvd_ipc->suspend_flag = 1;
+- append_to_inbuf_list(urb); /* append the current received urb */
+-#if 0
+- if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
+- {
+- last_jiff = jiffies;
+- queue_apm_event(KRNL_ICL, NULL);
+- }
+-#endif
+- }
+-
+- while (!(list_empty(&bvd_ipc->in_buf_list))) {
+- struct list_head* ptr = NULL;
+- ptr = bvd_ipc->in_buf_list.next;
+- inbuf = list_entry(ptr, buf_list_t, list);
+- count = inbuf->size;
+- need_mux = 1;
+-
+- tty_insert_flip_string(tty, inbuf->body, count);
+-
+- list_del(ptr);
+- kfree(inbuf->body);
+- inbuf->body = NULL;
+- kfree(inbuf);
+- }
+-
+- if (usb_mux_dispatcher && need_mux)
+- usb_mux_dispatcher(tty); /* call Liu changhui's func. */
+-
+- if (list_empty(&bvd_ipc->in_buf_list)) {
+- urb->actual_length = 0;
+- urb->dev = bvd_ipc->ipc_dev;
+- if (usb_submit_urb(urb, GFP_ATOMIC))
+- bvd_dbg("usb_ipc_read_bulk: "
+- "failed resubmitting read urb");
+- bvd_dbg("usb_ipc_read_bulk: resubmited read urb");
+- } else {
+- ipcusb_timer.data = (unsigned long)urb;
+- mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
+- }
+- } else if (count > 0) {
+- bvd_dbg("usb_ipc_read_bulk: no urbs in_buf_list");
++ if (count > 0) {
++ bvd_dbg("usb_ipc_read_bulk: inserting buffer into in_buf_list");
+ bvd_ipc->suspend_flag = 1;
+
+- if (tty_insert_flip_string(tty, urb->transfer_buffer,
+- count) < count) {
+- bvd_ipc->suspend_flag = 1;
+- append_to_inbuf_list(urb);
+- ipcusb_timer.data = (unsigned long)urb;
+- mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
+-#if 0
+- if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
+- {
+- last_jiff = jiffies;
+- queue_apm_event(KRNL_ICL, NULL);
+- }
+-#endif
+- }
++ append_to_inbuf_list(urb);
+
+ if (usb_mux_dispatcher)
+ usb_mux_dispatcher(tty); /* call Liu changhui's func. */
+@@ -337,13 +314,6 @@
+ urb->dev = bvd_ipc->ipc_dev;
+ if (usb_submit_urb(urb, GFP_ATOMIC))
+ bvd_dbg("failed resubmitting read urb");
+-#if 0
+- if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
+- {
+- last_jiff = jiffies;
+- queue_apm_event(KRNL_ICL, NULL);
+- }
+-#endif
+ bvd_dbg("usb_ipc_read_bulk: resubmited read urb");
+ }
+
+@@ -705,7 +675,8 @@
+ bvd_ipc->bulk_out_ep_mux= have_bulk_out_mux;
+ bvd_ipc->ipc_dev = usbdev;
+ bvd_ipc->writesize = writesize;
+- INIT_LIST_HEAD (&bvd_ipc->in_buf_list);
++ INIT_LIST_HEAD(&bvd_ipc->in_buf_list);
++ bvd_ipc->in_buf_lock = SPIN_LOCK_UNLOCKED;
+
+ bvd_ipc->bh.func = usbipc_bh_func;
+ bvd_ipc->bh.data = (unsigned long) bvd_ipc;
+Index: linux-2.6.16/drivers/char/ts0710_mux.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux.c 2007-01-17 00:52:23.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux.c 2007-01-17 00:52:26.000000000 +0100
+@@ -3149,7 +3149,7 @@
+ static void receive_worker(void *private_)
+ {
+ struct tty_struct *tty = COMM_FOR_MUX_TTY;
+- int i, count;
++ int i, count, tbuf_free, tbuf_read;
+ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE];
+ static unsigned char *tbuf_ptr = &tbuf[0];
+ static unsigned char *start_flag = 0;
+@@ -3167,29 +3167,39 @@
+
+ UNUSED_PARAM(private_);
+
+- if (!tty)
+- return;
++ if (!tty)
++ return;
++
++ while (1) {
++ tbuf_free = TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf);
++ TS0710_PRINTK("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free);
++ tbuf_read = get_from_inbuf_list(tbuf_ptr, tbuf_free);
++ if (tbuf_read == 0) {
++ break;
++ } else {
++ TS0710_PRINTK("Read %i bytes.\n", tbuf_read);
++ };
++ tbuf_ptr += tbuf_read;
++ };
++
++ count = (tbuf_ptr - tbuf);
++
++ // Should be impossible?
++ //if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) {
++ // TS0710_PRINTK
++ // ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n");
++ // count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf));
++ //}
+
+ #ifdef USB_FOR_MUX
+- TS0710_DEBUG("Receive following bytes from IPC-USB");
++ TS0710_DEBUG("Received following bytes from IPC-USB");
+ #else
+- TS0710_DEBUG("Receive following bytes from UART");
++ TS0710_DEBUG("Received following bytes from UART");
+ #endif
+-
+- TS0710_DEBUGHEX(cp, count);
+-
+- if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) {
+- TS0710_PRINTK
+- ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n");
+- count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf));
+- }
+-
+- count = tty_buffer_request_room(tty, count);
+-
+- for (i = 0; i < count; i++)
+- tty_insert_flip_char(tty, tbuf_ptr[i], TTY_NORMAL);
+-
+- tbuf_ptr += count;
++ TS0710_DEBUGHEX(tbuf, count);
++
++ //gets updated above
++ //tbuf_ptr += count;
+ search = &tbuf[0];
+
+ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) {
+Index: linux-2.6.16/drivers/char/ts0710_mux_usb.h
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.h 2007-01-17 00:52:23.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux_usb.h 2007-01-17 00:52:26.000000000 +0100
+@@ -27,3 +27,6 @@
+ extern struct tty_struct *usb_for_mux_tty;
+ extern void (*usb_mux_dispatcher)(struct tty_struct *tty);
+ extern void (*usb_mux_sender)(void);
++
++extern int get_from_inbuf_list(const unsigned char *buf, int dst_count);
++
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-remove-get_halted_bit.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-get_halted_bit.patch
new file mode 100644
index 0000000000..0ebe27d03b
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-get_halted_bit.patch
@@ -0,0 +1,22 @@
+Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 01:06:21.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 01:06:31.000000000 +0100
+@@ -461,7 +461,7 @@
+ ipcusb_xmit_data();
+ }
+
+-extern void get_halted_bit(void);
++//extern void get_halted_bit(void);
+
+ static void usbipc_bh_bp_func(unsigned long param)
+ {
+@@ -472,7 +472,7 @@
+ "UHCRHPS3=0x%x", UHCRHPS3);
+ }
+ if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) {
+- get_halted_bit();
++ //get_halted_bit();
+
+ /*send a IN token*/
+ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux-remove-usbh_finished_resume.patch b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-usbh_finished_resume.patch
new file mode 100644
index 0000000000..c415ded428
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/mux-remove-usbh_finished_resume.patch
@@ -0,0 +1,22 @@
+Index: linux-2.6.16/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.16.orig/drivers/char/ts0710_mux_usb.c 2007-01-17 01:12:23.000000000 +0100
++++ linux-2.6.16/drivers/char/ts0710_mux_usb.c 2007-01-17 01:12:37.000000000 +0100
+@@ -97,7 +97,6 @@
+ static int sumbit_times = 0;
+ static int callback_times = 0;
+ //static unsigned long last_jiff = 0;
+-extern int usbh_finished_resume;
+ /*end global values defined*/
+
+ MODULE_AUTHOR(DRIVER_AUTHOR);
+@@ -546,9 +545,6 @@
+ void usb_send_readurb(void)
+ {
+ //printk("usb_send_readurb: begining!UHCRHPS3=0x%x, usbh_finished_resume=%d\n", UHCRHPS3, usbh_finished_resume);
+-
+- if (usbh_finished_resume == 0)
+- return;
+
+ tasklet_schedule(&bvd_ipc->bh_bp);
+ }
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux_cli.patch b/packages/linux/linux-ezx-2.6.24/patches/mux_cli.patch
new file mode 100644
index 0000000000..3e8e3e2604
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/mux_cli.patch
@@ -0,0 +1,5396 @@
+Index: linux-2.6.24/drivers/char/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/char/Kconfig
++++ linux-2.6.24/drivers/char/Kconfig
+@@ -1040,5 +1040,18 @@
+
+ source "drivers/s390/char/Kconfig"
+
++config TS0710_MUX
++ tristate "GSM TS 07.10 Multiplex driver"
++ depends on EZX_BP
++ help
++ This implements the GSM 07.10 multiplex.
++
++config TS0710_MUX_USB
++ tristate "Motorola USB support for TS 07.10 Multiplex driver"
++ depends on TS0710_MUX
++ help
++ This ads support for TS 07.10 over USB, as found in motorola
++ Smartphones.
++
+ endmenu
+
+Index: linux-2.6.24/drivers/char/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/char/Makefile
++++ linux-2.6.24/drivers/char/Makefile
+@@ -111,6 +111,9 @@
+ obj-$(CONFIG_JS_RTC) += js-rtc.o
+ js-rtc-y = rtc.o
+
++obj-$(CONFIG_TS0710_MUX) += ts0710_mux.o ts0710_mux_usb.o
++
++
+ # Files generated that shall be removed upon make clean
+ clean-files := consolemap_deftbl.c defkeymap.c
+
+Index: linux-2.6.24/drivers/char/ts0710.h
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/char/ts0710.h
+@@ -0,0 +1,368 @@
++/*
++ * File: ts0710.h
++ *
++ * Portions derived from rfcomm.c, original header as follows:
++ *
++ * Copyright (C) 2000, 2001 Axis Communications AB
++ *
++ * Author: Mats Friden <mats.friden@axis.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2
++ * of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * Exceptionally, Axis Communications AB grants discretionary and
++ * conditional permissions for additional use of the text contained
++ * in the company's release of the AXIS OpenBT Stack under the
++ * provisions set forth hereunder.
++ *
++ * Provided that, if you use the AXIS OpenBT Stack with other files,
++ * that do not implement functionality as specified in the Bluetooth
++ * System specification, to produce an executable, this does not by
++ * itself cause the resulting executable to be covered by the GNU
++ * General Public License. Your use of that executable is in no way
++ * restricted on account of using the AXIS OpenBT Stack code with it.
++ *
++ * This exception does not however invalidate any other reasons why
++ * the executable file might be covered by the provisions of the GNU
++ * General Public License.
++ *
++ */
++/*
++ * Copyright (C) 2002 Motorola
++ *
++ * 07/28/2002 Initial version based on rfcomm.c
++ * 11/18/2002 Modified
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/errno.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++#include <linux/tty.h>
++#include <linux/tty_flip.h>
++#include <linux/fcntl.h>
++#include <linux/string.h>
++#include <linux/major.h>
++#include <linux/mm.h>
++#include <linux/init.h>
++#include <linux/devfs_fs_kernel.h>
++
++#include <asm/uaccess.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++
++#include <asm/byteorder.h>
++#include <asm/types.h>
++
++#define TS0710_MAX_CHN 14
++
++#define SET_PF(ctr) ((ctr) | (1 << 4))
++#define CLR_PF(ctr) ((ctr) & 0xef)
++#define GET_PF(ctr) (((ctr) >> 4) & 0x1)
++
++#define GET_PN_MSG_FRAME_SIZE(pn) ( ((pn)->frame_sizeh << 8) | ((pn)->frame_sizel))
++#define SET_PN_MSG_FRAME_SIZE(pn, size) ({ (pn)->frame_sizel = (size) & 0xff; \
++ (pn)->frame_sizeh = (size) >> 8; })
++
++#define GET_LONG_LENGTH(a) ( ((a).h_len << 7) | ((a).l_len) )
++#define SET_LONG_LENGTH(a, length) ({ (a).ea = 0; \
++ (a).l_len = length & 0x7F; \
++ (a).h_len = (length >> 7) & 0xFF; })
++
++#define SHORT_CRC_CHECK 3
++#define LONG_CRC_CHECK 4
++
++/* FIXME: Should thsi one be define here? */
++#define SHORT_PAYLOAD_SIZE 127
++
++#define EA 1
++#define FCS_SIZE 1
++#define FLAG_SIZE 2
++
++#define TS0710_MAX_HDR_SIZE 5
++#define DEF_TS0710_MTU 256
++
++#define TS0710_BASIC_FLAG 0xF9
++/* the control field */
++#define SABM 0x2f
++#define SABM_SIZE 4
++#define UA 0x63
++#define UA_SIZE 4
++#define DM 0x0f
++#define DISC 0x43
++#define UIH 0xef
++
++/* the type field in a multiplexer command packet */
++#define TEST 0x8
++#define FCON 0x28
++#define FCOFF 0x18
++#define MSC 0x38
++#define RPN 0x24
++#define RLS 0x14
++#define PN 0x20
++#define NSC 0x4
++
++/* V.24 modem control signals */
++#define FC 0x2
++#define RTC 0x4
++#define RTR 0x8
++#define IC 0x40
++#define DV 0x80
++
++#define CTRL_CHAN 0 /* The control channel is defined as DLCI 0 */
++#define MCC_CMD 1 /* Multiplexer command cr */
++#define MCC_RSP 0 /* Multiplexer response cr */
++
++#ifdef __LITTLE_ENDIAN_BITFIELD
++
++typedef struct {
++ __u8 ea:1;
++ __u8 cr:1;
++ __u8 d:1;
++ __u8 server_chn:5;
++} __attribute__ ((packed)) address_field;
++
++typedef struct {
++ __u8 ea:1;
++ __u8 len:7;
++} __attribute__ ((packed)) short_length;
++
++typedef struct {
++ __u8 ea:1;
++ __u8 l_len:7;
++ __u8 h_len;
++} __attribute__ ((packed)) long_length;
++
++typedef struct {
++ address_field addr;
++ __u8 control;
++ short_length length;
++} __attribute__ ((packed)) short_frame_head;
++
++typedef struct {
++ short_frame_head h;
++ __u8 data[0];
++} __attribute__ ((packed)) short_frame;
++
++typedef struct {
++ address_field addr;
++ __u8 control;
++ long_length length;
++ __u8 data[0];
++} __attribute__ ((packed)) long_frame_head;
++
++typedef struct {
++ long_frame_head h;
++ __u8 data[0];
++} __attribute__ ((packed)) long_frame;
++
++/* Typedefinitions for structures used for the multiplexer commands */
++typedef struct {
++ __u8 ea:1;
++ __u8 cr:1;
++ __u8 type:6;
++} __attribute__ ((packed)) mcc_type;
++
++typedef struct {
++ mcc_type type;
++ short_length length;
++ __u8 value[0];
++} __attribute__ ((packed)) mcc_short_frame_head;
++
++typedef struct {
++ mcc_short_frame_head h;
++ __u8 value[0];
++} __attribute__ ((packed)) mcc_short_frame;
++
++typedef struct {
++ mcc_type type;
++ long_length length;
++ __u8 value[0];
++} __attribute__ ((packed)) mcc_long_frame_head;
++
++typedef struct {
++ mcc_long_frame_head h;
++ __u8 value[0];
++} __attribute__ ((packed)) mcc_long_frame;
++
++/* MSC-command */
++typedef struct {
++ __u8 ea:1;
++ __u8 fc:1;
++ __u8 rtc:1;
++ __u8 rtr:1;
++ __u8 reserved:2;
++ __u8 ic:1;
++ __u8 dv:1;
++} __attribute__ ((packed)) v24_sigs;
++
++typedef struct {
++ __u8 ea:1;
++ __u8 b1:1;
++ __u8 b2:1;
++ __u8 b3:1;
++ __u8 len:4;
++} __attribute__ ((packed)) brk_sigs;
++
++typedef struct {
++ short_frame_head s_head;
++ mcc_short_frame_head mcc_s_head;
++ address_field dlci;
++ __u8 v24_sigs;
++ //brk_sigs break_signals;
++ __u8 fcs;
++} __attribute__ ((packed)) msc_msg;
++
++#if 0
++/* conflict with termios.h */
++/* RPN command */
++#define B2400 0
++#define B4800 1
++#define B7200 2
++#define B9600 3
++#define B19200 4
++#define B38400 5
++#define B57600 6
++#define B115200 7
++#define D230400 8
++#endif
++
++/*
++typedef struct{
++ __u8 bit_rate:1;
++ __u8 data_bits:1;
++ __u8 stop_bit:1;
++ __u8 parity:1;
++ __u8 parity_type:1;
++ __u8 xon_u8:1;
++ __u8 xoff_u8:1;
++ __u8 res1:1;
++ __u8 xon_input:1;
++ __u8 xon_output:1;
++ __u8 rtr_input:1;
++ __u8 rtr_output:1;
++ __u8 rtc_input:1;
++ __u8 rtc_output:1;
++ __u8 res2:2;
++} __attribute__((packed)) parameter_mask;
++
++typedef struct{
++ __u8 bit_rate;
++ __u8 data_bits:2;
++ __u8 stop_bit:1;
++ __u8 parity:1;
++ __u8 parity_type:2;
++ __u8 res1:2;
++ __u8 xon_input:1;
++ __u8 xon_output:1;
++ __u8 rtr_input:1;
++ __u8 rtr_output:1;
++ __u8 rtc_input:1;
++ __u8 rtc_output:1;
++ __u8 res2:2;
++ __u8 xon_u8;
++ __u8 xoff_u8;
++ parameter_mask pm;
++} __attribute__((packed)) rpn_values;
++
++typedef struct{
++ short_frame_head s_head;
++ mcc_short_frame_head mcc_s_head;
++ address_field dlci;
++ rpn_values rpn_val;
++ __u8 fcs;
++} __attribute__((packed)) rpn_msg;
++*/
++
++/* RLS-command */
++/*
++typedef struct{
++ short_frame_head s_head;
++ mcc_short_frame_head mcc_s_head;
++ address_field dlci;
++ __u8 error:4;
++ __u8 res:4;
++ __u8 fcs;
++} __attribute__((packed)) rls_msg;
++*/
++
++/* PN-command */
++typedef struct {
++ short_frame_head s_head;
++ mcc_short_frame_head mcc_s_head;
++ __u8 dlci:6;
++ __u8 res1:2;
++ __u8 frame_type:4;
++ __u8 credit_flow:4;
++ __u8 prior:6;
++ __u8 res2:2;
++ __u8 ack_timer;
++ __u8 frame_sizel;
++ __u8 frame_sizeh;
++ __u8 max_nbrof_retrans;
++ __u8 credits;
++ __u8 fcs;
++} __attribute__ ((packed)) pn_msg;
++
++/* NSC-command */
++typedef struct {
++ short_frame_head s_head;
++ mcc_short_frame_head mcc_s_head;
++ mcc_type command_type;
++ __u8 fcs;
++} __attribute__ ((packed)) nsc_msg;
++
++#else
++#error Only littel-endianess supported now!
++#endif
++
++enum {
++ REJECTED = 0,
++ DISCONNECTED,
++ CONNECTING,
++ NEGOTIATING,
++ CONNECTED,
++ DISCONNECTING,
++ FLOW_STOPPED
++};
++
++enum ts0710_events {
++ CONNECT_IND,
++ CONNECT_CFM,
++ DISCONN_CFM
++};
++
++typedef struct {
++ volatile __u8 state;
++ volatile __u8 flow_control;
++ volatile __u8 initiated;
++ volatile __u8 initiator;
++ volatile __u16 mtu;
++ wait_queue_head_t open_wait;
++ wait_queue_head_t close_wait;
++} dlci_struct;
++
++/* user space interfaces */
++typedef struct {
++ volatile __u8 initiator;
++ volatile __u8 c_dlci;
++ volatile __u16 mtu;
++ volatile __u8 be_testing;
++ volatile __u32 test_errs;
++ wait_queue_head_t test_wait;
++
++ dlci_struct dlci[TS0710_MAX_CHN];
++} ts0710_con;
+Index: linux-2.6.24/drivers/char/ts0710_mux.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/char/ts0710_mux.c
+@@ -0,0 +1,3966 @@
++/*
++ * File: mux_driver.c
++ *
++ * Portions derived from rfcomm.c, original header as follows:
++ *
++ * Copyright (C) 2000, 2001 Axis Communications AB
++ *
++ * Author: Mats Friden <mats.friden@axis.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2
++ * of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * Exceptionally, Axis Communications AB grants discretionary and
++ * conditional permissions for additional use of the text contained
++ * in the company's release of the AXIS OpenBT Stack under the
++ * provisions set forth hereunder.
++ *
++ * Provided that, if you use the AXIS OpenBT Stack with other files,
++ * that do not implement functionality as specified in the Bluetooth
++ * System specification, to produce an executable, this does not by
++ * itself cause the resulting executable to be covered by the GNU
++ * General Public License. Your use of that executable is in no way
++ * restricted on account of using the AXIS OpenBT Stack code with it.
++ *
++ * This exception does not however invalidate any other reasons why
++ * the executable file might be covered by the provisions of the GNU
++ * General Public License.
++ *
++ */
++/*
++ * Copyright (C) 2002-2004 Motorola
++ * Copyright (C) 2006 Harald Welte <laforge@openezx.org>
++ *
++ * 07/28/2002 Initial version
++ * 11/18/2002 Second version
++ * 04/21/2004 Add GPRS PROC
++ */
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/types.h>
++
++#include <linux/kernel.h>
++#include <linux/proc_fs.h>
++
++#define USB_FOR_MUX
++
++#ifndef USB_FOR_MUX
++#include <linux/serial.h>
++#endif
++
++#include <linux/errno.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++#include <linux/tty.h>
++#include <linux/tty_flip.h>
++#include <linux/fcntl.h>
++#include <linux/string.h>
++#include <linux/major.h>
++#include <linux/mm.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/devfs_fs_kernel.h>
++//#include <syslog.h>
++
++#include <asm/uaccess.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++
++#ifdef USB_FOR_MUX
++//#include <linux/usb.h>
++#include "ts0710_mux_usb.h"
++#endif
++
++#include "ts0710.h"
++#include "ts0710_mux.h"
++
++#define TS0710MUX_GPRS_SESSION_MAX 2
++#define TS0710MUX_MAJOR 250
++#define TS0710MUX_MINOR_START 0
++#define NR_MUXS 16
++
++ /*#define TS0710MUX_TIME_OUT 30 *//* 300ms */
++#define TS0710MUX_TIME_OUT 250 /* 2500ms, for BP UART hardware flow control AP UART */
++
++#define TS0710MUX_IO_DLCI_FC_ON 0x54F2
++#define TS0710MUX_IO_DLCI_FC_OFF 0x54F3
++#define TS0710MUX_IO_FC_ON 0x54F4
++#define TS0710MUX_IO_FC_OFF 0x54F5
++
++#define TS0710MUX_MAX_BUF_SIZE 2048
++
++#define TS0710MUX_SEND_BUF_OFFSET 10
++#define TS0710MUX_SEND_BUF_SIZE (DEF_TS0710_MTU + TS0710MUX_SEND_BUF_OFFSET + 34)
++#define TS0710MUX_RECV_BUF_SIZE TS0710MUX_SEND_BUF_SIZE
++
++/*For BP UART problem Begin*/
++#ifdef TS0710SEQ2
++#define ACK_SPACE 66 /* 6 * 11(ACK frame size) */
++#else
++#define ACK_SPACE 42 /* 6 * 7(ACK frame size) */
++#endif
++/*For BP UART problem End*/
++
++ /*#define TS0710MUX_SERIAL_BUF_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE)*//* For BP UART problem */
++#define TS0710MUX_SERIAL_BUF_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE + ACK_SPACE) /* For BP UART problem: ACK_SPACE */
++
++#define TS0710MUX_MAX_TOTAL_FRAME_SIZE (DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE + FLAG_SIZE)
++#define TS0710MUX_MAX_CHARS_IN_BUF 65535
++#define TS0710MUX_THROTTLE_THRESHOLD DEF_TS0710_MTU
++
++#define TEST_PATTERN_SIZE 250
++
++#define CMDTAG 0x55
++#define DATATAG 0xAA
++
++#define ACK 0x4F /*For BP UART problem */
++
++/*For BP UART problem Begin*/
++#ifdef TS0710SEQ2
++#define FIRST_BP_SEQ_OFFSET 1 /*offset from start flag */
++#define SECOND_BP_SEQ_OFFSET 2 /*offset from start flag */
++#define FIRST_AP_SEQ_OFFSET 3 /*offset from start flag */
++#define SECOND_AP_SEQ_OFFSET 4 /*offset from start flag */
++#define SLIDE_BP_SEQ_OFFSET 5 /*offset from start flag */
++#define SEQ_FIELD_SIZE 5
++#else
++#define SLIDE_BP_SEQ_OFFSET 1 /*offset from start flag */
++#define SEQ_FIELD_SIZE 1
++#endif
++
++#define ADDRESS_FIELD_OFFSET (1 + SEQ_FIELD_SIZE) /*offset from start flag */
++/*For BP UART problem End*/
++
++#ifndef UNUSED_PARAM
++#define UNUSED_PARAM(v) (void)(v)
++#endif
++
++#define TS0710MUX_GPRS1_DLCI 7
++#define TS0710MUX_GPRS2_DLCI 8
++
++#define TS0710MUX_GPRS1_RECV_COUNT_IDX 0
++#define TS0710MUX_GPRS1_SEND_COUNT_IDX 1
++#define TS0710MUX_GPRS2_RECV_COUNT_IDX 2
++#define TS0710MUX_GPRS2_SEND_COUNT_IDX 3
++#define TS0710MUX_COUNT_MAX_IDX 3
++#define TS0710MUX_COUNT_IDX_NUM (TS0710MUX_COUNT_MAX_IDX + 1)
++
++static volatile int mux_data_count[TS0710MUX_COUNT_IDX_NUM] = { 0, 0, 0, 0 };
++static volatile int mux_data_count2[TS0710MUX_COUNT_IDX_NUM] = { 0, 0, 0, 0 };
++static struct semaphore mux_data_count_mutex[TS0710MUX_COUNT_IDX_NUM];
++static volatile __u8 post_recv_count_flag = 0;
++
++/*PROC file*/
++struct proc_dir_entry *gprs_proc_file = NULL;
++ssize_t file_proc_read(struct file *file, char *buf, size_t size,
++ loff_t * ppos);
++ssize_t file_proc_write(struct file *file, const char *buf, size_t count,
++ loff_t * ppos);
++struct file_operations file_proc_operations = {
++ read:file_proc_read,
++ write:file_proc_write,
++};
++typedef struct {
++ int recvBytes;
++ int sentBytes;
++} gprs_bytes;
++
++static __u8 tty2dlci[NR_MUXS] =
++ { 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, 8, 9, 10, 11, 12, 13 };
++static __u8 iscmdtty[NR_MUXS] =
++ { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
++typedef struct {
++ __u8 cmdtty;
++ __u8 datatty;
++} dlci_tty;
++static dlci_tty dlci2tty[] = { {0, 0}, /* DLCI 0 */
++{0, 0}, /* DLCI 1 */
++{1, 1}, /* DLCI 2 */
++{2, 2}, /* DLCI 3 */
++{3, 3}, /* DLCI 4 */
++{4, 4}, /* DLCI 5 */
++{5, 8}, /* DLCI 6 */
++{6, 9}, /* DLCI 7 */
++{7, 10}, /* DLCI 8 */
++{11, 11}, /* DLCI 9 */
++{12, 12}, /* DLCI 10 */
++{13, 13}, /* DLCI 11 */
++{14, 14}, /* DLCI 12 */
++{15, 15}
++}; /* DLCI 13 */
++
++typedef struct {
++ volatile __u8 buf[TS0710MUX_SEND_BUF_SIZE];
++ volatile __u8 *frame;
++ unsigned long flags;
++ volatile __u16 length;
++ volatile __u8 filled;
++ volatile __u8 dummy; /* Allignment to 4*n bytes */
++} mux_send_struct;
++
++/* Bit number in flags of mux_send_struct */
++#define BUF_BUSY 0
++
++struct mux_recv_packet_tag {
++ __u8 *data;
++ __u32 length;
++ struct mux_recv_packet_tag *next;
++};
++typedef struct mux_recv_packet_tag mux_recv_packet;
++
++struct mux_recv_struct_tag {
++ __u8 data[TS0710MUX_RECV_BUF_SIZE];
++ __u32 length;
++ __u32 total;
++ mux_recv_packet *mux_packet;
++ struct mux_recv_struct_tag *next;
++ int no_tty;
++ volatile __u8 post_unthrottle;
++};
++typedef struct mux_recv_struct_tag mux_recv_struct;
++
++#define RECV_RUNNING 0
++static unsigned long mux_recv_flags = 0;
++
++static mux_send_struct *mux_send_info[NR_MUXS];
++static volatile __u8 mux_send_info_flags[NR_MUXS];
++static volatile __u8 mux_send_info_idx = NR_MUXS;
++
++static mux_recv_struct *mux_recv_info[NR_MUXS];
++static volatile __u8 mux_recv_info_flags[NR_MUXS];
++static mux_recv_struct *mux_recv_queue = NULL;
++
++static struct tty_driver mux_driver;
++
++#ifdef USB_FOR_MUX
++#define COMM_FOR_MUX_DRIVER usb_for_mux_driver
++#define COMM_FOR_MUX_TTY usb_for_mux_tty
++#define COMM_MUX_DISPATCHER usb_mux_dispatcher
++#define COMM_MUX_SENDER usb_mux_sender
++#else
++#define COMM_FOR_MUX_DRIVER serial_for_mux_driver
++#define COMM_FOR_MUX_TTY serial_for_mux_tty
++#define COMM_MUX_DISPATCHER serial_mux_dispatcher
++#define COMM_MUX_SENDER serial_mux_sender
++
++extern struct list_head *tq_serial_for_mux;
++#endif
++
++extern struct tty_driver *COMM_FOR_MUX_DRIVER;
++extern struct tty_struct *COMM_FOR_MUX_TTY;
++extern void (*COMM_MUX_DISPATCHER) (struct tty_struct * tty);
++extern void (*COMM_MUX_SENDER) (void);
++
++static struct work_struct send_tqueue;
++static struct work_struct receive_tqueue;
++static struct work_struct post_recv_tqueue;
++
++static struct tty_struct *mux_table[NR_MUXS];
++static struct termios *mux_termios[NR_MUXS];
++static struct termios *mux_termios_locked[NR_MUXS];
++static volatile short int mux_tty[NR_MUXS];
++
++#ifdef min
++#undef min
++#define min(a,b) ( (a)<(b) ? (a):(b) )
++#endif
++
++static int get_count(__u8 idx);
++static int set_count(__u8 idx, int count);
++static int add_count(__u8 idx, int count);
++
++static int send_ua(ts0710_con * ts0710, __u8 dlci);
++static int send_dm(ts0710_con * ts0710, __u8 dlci);
++static int send_sabm(ts0710_con * ts0710, __u8 dlci);
++static int send_disc(ts0710_con * ts0710, __u8 dlci);
++static void queue_uih(mux_send_struct * send_info, __u16 len,
++ ts0710_con * ts0710, __u8 dlci);
++static int send_pn_msg(ts0710_con * ts0710, __u8 prior, __u32 frame_size,
++ __u8 credit_flow, __u8 credits, __u8 dlci, __u8 cr);
++static int send_nsc_msg(ts0710_con * ts0710, mcc_type cmd, __u8 cr);
++static void set_uih_hdr(short_frame * uih_pkt, __u8 dlci, __u32 len, __u8 cr);
++
++static __u32 crc_check(__u8 * data, __u32 length, __u8 check_sum);
++static __u8 crc_calc(__u8 * data, __u32 length);
++static void create_crctable(__u8 table[]);
++
++static void mux_sched_send(void);
++
++static __u8 crctable[256];
++
++static ts0710_con ts0710_connection;
++/*
++static rpn_values rpn_val;
++*/
++
++static int valid_dlci(__u8 dlci)
++{
++ if ((dlci < TS0710_MAX_CHN) && (dlci > 0))
++ return 1;
++ else
++ return 0;
++}
++
++#ifdef TS0710DEBUG
++
++#ifdef PRINT_OUTPUT_PRINTK
++#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX " __FUNCTION__ ": " fmt "\n" , ## arg)
++#else
++#include "ezxlog.h"
++static __u8 strDebug[256];
++#define TS0710_DEBUG(fmt, arg...) ({ snprintf(strDebug, sizeof(strDebug), "MUX " __FUNCTION__ ": " fmt "\n" , ## arg); \
++ /*printk("%s", strDebug)*/ezxlogk("MX", strDebug, strlen(strDebug)); })
++#endif /* End #ifdef PRINT_OUTPUT_PRINTK */
++
++#else
++#define TS0710_DEBUG(fmt...)
++#endif /* End #ifdef TS0710DEBUG */
++
++#ifdef TS0710LOG
++static unsigned char g_tbuf[TS0710MUX_MAX_BUF_SIZE];
++#ifdef PRINT_OUTPUT_PRINTK
++#define TS0710_LOG(fmt, arg...) printk(fmt, ## arg)
++#define TS0710_PRINTK(fmt, arg...) printk(fmt, ## arg)
++#else
++#include "ezxlog.h"
++static __u8 strLog[256];
++#define TS0710_LOG(fmt, arg...) ({ snprintf(strLog, sizeof(strLog), fmt, ## arg); \
++ /*printk("%s", strLog)*/ezxlogk("MX", strLog, strlen(strLog)); })
++#define TS0710_PRINTK(fmt, arg...) ({ printk(fmt, ## arg); \
++ TS0710_LOG(fmt, ## arg); })
++#endif /* End #ifdef PRINT_OUTPUT_PRINTK */
++
++#else
++#define TS0710_LOG(fmt...)
++#define TS0710_PRINTK(fmt, arg...) printk(fmt, ## arg)
++#endif /* End #ifdef TS0710LOG */
++
++#ifdef TS0710DEBUG
++static void TS0710_DEBUGHEX(__u8 * buf, int len)
++{
++ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE];
++
++ int i;
++ int c;
++
++ if (len <= 0) {
++ return;
++ }
++
++ c = 0;
++ for (i = 0; (i < len) && (c < (TS0710MUX_MAX_BUF_SIZE - 3)); i++) {
++ sprintf(&tbuf[c], "%02x ", buf[i]);
++ c += 3;
++ }
++ tbuf[c] = 0;
++
++#ifdef PRINT_OUTPUT_PRINTK
++ TS0710_DEBUG("%s", tbuf);
++#else
++ /*printk("%s\n", tbuf) */ ezxlogk("MX", tbuf, c);
++#endif
++}
++static void TS0710_DEBUGSTR(__u8 * buf, int len)
++{
++ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE];
++
++ if (len <= 0) {
++ return;
++ }
++
++ if (len > (TS0710MUX_MAX_BUF_SIZE - 1)) {
++ len = (TS0710MUX_MAX_BUF_SIZE - 1);
++ }
++
++ memcpy(tbuf, buf, len);
++ tbuf[len] = 0;
++
++#ifdef PRINT_OUTPUT_PRINTK
++ /* 0x00 byte in the string pointed by tbuf may truncate the print result */
++ TS0710_DEBUG("%s", tbuf);
++#else
++ /*printk("%s\n", tbuf) */ ezxlogk("MX", tbuf, len);
++#endif
++}
++#else
++#define TS0710_DEBUGHEX(buf, len)
++#define TS0710_DEBUGSTR(buf, len)
++#endif /* End #ifdef TS0710DEBUG */
++
++#ifdef TS0710LOG
++static void TS0710_LOGSTR_FRAME(__u8 send, __u8 * data, int len)
++{
++ short_frame *short_pkt;
++ long_frame *long_pkt;
++ __u8 *uih_data_start;
++ __u32 uih_len;
++ __u8 dlci;
++ int pos;
++
++ if (len <= 0) {
++ return;
++ }
++
++ pos = 0;
++ if (send) {
++ pos += sprintf(&g_tbuf[pos], "<");
++ short_pkt = (short_frame *) (data + 1); /*For BP UART problem */
++ } else {
++ /*For BP UART problem */
++ /*pos += sprintf(&g_tbuf[pos], ">"); */
++ pos += sprintf(&g_tbuf[pos], ">%d ", *(data + SLIDE_BP_SEQ_OFFSET)); /*For BP UART problem */
++
++#ifdef TS0710SEQ2
++ pos += sprintf(&g_tbuf[pos], "%02x %02x %02x %02x ", *(data + FIRST_BP_SEQ_OFFSET), *(data + SECOND_BP_SEQ_OFFSET), *(data + FIRST_AP_SEQ_OFFSET), *(data + SECOND_AP_SEQ_OFFSET)); /*For BP UART problem */
++#endif
++
++ short_pkt = (short_frame *) (data + ADDRESS_FIELD_OFFSET); /*For BP UART problem */
++ }
++
++ /*For BP UART problem */
++ /*short_pkt = (short_frame *)(data + 1); */
++
++ dlci = short_pkt->h.addr.server_chn << 1 | short_pkt->h.addr.d;
++ switch (CLR_PF(short_pkt->h.control)) {
++ case SABM:
++ pos += sprintf(&g_tbuf[pos], "C SABM %d ::", dlci);
++ break;
++ case UA:
++ pos += sprintf(&g_tbuf[pos], "C UA %d ::", dlci);
++ break;
++ case DM:
++ pos += sprintf(&g_tbuf[pos], "C DM %d ::", dlci);
++ break;
++ case DISC:
++ pos += sprintf(&g_tbuf[pos], "C DISC %d ::", dlci);
++ break;
++
++ /*For BP UART problem Begin */
++ case ACK:
++ pos += sprintf(&g_tbuf[pos], "C ACK %d ", short_pkt->data[0]);
++
++#ifdef TS0710SEQ2
++ pos += sprintf(&g_tbuf[pos], "%02x %02x %02x %02x ", short_pkt->data[1], short_pkt->data[2], short_pkt->data[3], short_pkt->data[4]); /*For BP UART problem */
++#endif
++
++ pos += sprintf(&g_tbuf[pos], "::");
++ break;
++ /*For BP UART problem End */
++
++ case UIH:
++ if (!dlci) {
++ pos += sprintf(&g_tbuf[pos], "C MCC %d ::", dlci);
++ } else {
++
++ if ((short_pkt->h.length.ea) == 0) {
++ long_pkt = (long_frame *) short_pkt;
++ uih_len = GET_LONG_LENGTH(long_pkt->h.length);
++ uih_data_start = long_pkt->h.data;
++ } else {
++ uih_len = short_pkt->h.length.len;
++ uih_data_start = short_pkt->data;
++ }
++ switch (*uih_data_start) {
++ case CMDTAG:
++ pos +=
++ sprintf(&g_tbuf[pos], "I %d A %d ::", dlci,
++ uih_len);
++ break;
++ case DATATAG:
++ default:
++ pos +=
++ sprintf(&g_tbuf[pos], "I %d D %d ::", dlci,
++ uih_len);
++ break;
++ }
++
++ }
++ break;
++ default:
++ pos += sprintf(&g_tbuf[pos], "N!!! %d ::", dlci);
++ break;
++ }
++
++ if (len > (sizeof(g_tbuf) - pos - 1)) {
++ len = (sizeof(g_tbuf) - pos - 1);
++ }
++
++ memcpy(&g_tbuf[pos], data, len);
++ pos += len;
++ g_tbuf[pos] = 0;
++
++#ifdef PRINT_OUTPUT_PRINTK
++ /* 0x00 byte in the string pointed by g_tbuf may truncate the print result */
++ TS0710_LOG("%s\n", g_tbuf);
++#else
++ /*printk("%s\n", g_tbuf) */ ezxlogk("MX", g_tbuf, pos);
++#endif
++}
++#else
++#define TS0710_LOGSTR_FRAME(send, data, len)
++#endif
++
++#ifdef TS0710SIG
++#define my_for_each_task(p) \
++ for ((p) = current; ((p) = (p)->next_task) != current; )
++
++static void TS0710_SIG2APLOGD(void)
++{
++ struct task_struct *p;
++ static __u8 sig = 0;
++
++ if (sig) {
++ return;
++ }
++
++ read_lock(&tasklist_lock);
++ my_for_each_task(p) {
++ if (strncmp(p->comm, "aplogd", 6) == 0) {
++ sig = 1;
++ if (send_sig(SIGUSR2, p, 1) == 0) {
++ TS0710_PRINTK
++ ("MUX: success to send SIGUSR2 to aplogd!\n");
++ } else {
++ TS0710_PRINTK
++ ("MUX: failure to send SIGUSR2 to aplogd!\n");
++ }
++ break;
++ }
++ }
++ read_unlock(&tasklist_lock);
++
++ if (!sig) {
++ TS0710_PRINTK("MUX: not found aplogd!\n");
++ }
++}
++#else
++#define TS0710_SIG2APLOGD()
++#endif
++
++static int basic_write(ts0710_con * ts0710, __u8 * buf, int len)
++{
++ int res;
++
++ UNUSED_PARAM(ts0710);
++
++ buf[0] = TS0710_BASIC_FLAG;
++ buf[len + 1] = TS0710_BASIC_FLAG;
++
++ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) {
++ TS0710_PRINTK
++ ("MUX basic_write: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n");
++
++#ifndef USB_FOR_MUX
++ TS0710_PRINTK
++ ("MUX basic_write: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n");
++ TS0710_SIG2APLOGD();
++#endif
++
++ return -1;
++ }
++
++ TS0710_LOGSTR_FRAME(1, buf, len + 2);
++ TS0710_DEBUGHEX(buf, len + 2);
++
++ res = COMM_FOR_MUX_DRIVER->write(COMM_FOR_MUX_TTY, buf, len + 2);
++
++ if (res != len + 2) {
++ TS0710_PRINTK("MUX basic_write: Write Error!\n");
++ return -1;
++ }
++
++ return len + 2;
++}
++
++/* Functions for the crc-check and calculation */
++
++#define CRC_VALID 0xcf
++
++static __u32 crc_check(__u8 * data, __u32 length, __u8 check_sum)
++{
++ __u8 fcs = 0xff;
++
++ while (length--) {
++ fcs = crctable[fcs ^ *data++];
++ }
++ fcs = crctable[fcs ^ check_sum];
++ TS0710_DEBUG("fcs : %d\n", fcs);
++ if (fcs == (uint) 0xcf) { /*CRC_VALID) */
++ TS0710_DEBUG("crc_check: CRC check OK\n");
++ return 0;
++ } else {
++ TS0710_PRINTK("MUX crc_check: CRC check failed\n");
++ return 1;
++ }
++}
++
++/* Calculates the checksum according to the ts0710 specification */
++
++static __u8 crc_calc(__u8 * data, __u32 length)
++{
++ __u8 fcs = 0xff;
++
++ while (length--) {
++ fcs = crctable[fcs ^ *data++];
++ }
++
++ return 0xff - fcs;
++}
++
++/* Calulates a reversed CRC table for the FCS check */
++
++static void create_crctable(__u8 table[])
++{
++ int i, j;
++
++ __u8 data;
++ __u8 code_word = (__u8) 0xe0;
++ __u8 sr = (__u8) 0;
++
++ for (j = 0; j < 256; j++) {
++ data = (__u8) j;
++
++ for (i = 0; i < 8; i++) {
++ if ((data & 0x1) ^ (sr & 0x1)) {
++ sr >>= 1;
++ sr ^= code_word;
++ } else {
++ sr >>= 1;
++ }
++
++ data >>= 1;
++ sr &= 0xff;
++ }
++
++ table[j] = sr;
++ sr = 0;
++ }
++}
++
++static void ts0710_reset_dlci(__u8 j)
++{
++ if (j >= TS0710_MAX_CHN)
++ return;
++
++ ts0710_connection.dlci[j].state = DISCONNECTED;
++ ts0710_connection.dlci[j].flow_control = 0;
++ ts0710_connection.dlci[j].mtu = DEF_TS0710_MTU;
++ ts0710_connection.dlci[j].initiated = 0;
++ ts0710_connection.dlci[j].initiator = 0;
++ init_waitqueue_head(&ts0710_connection.dlci[j].open_wait);
++ init_waitqueue_head(&ts0710_connection.dlci[j].close_wait);
++}
++
++static void ts0710_reset_con(void)
++{
++ __u8 j;
++
++ ts0710_connection.initiator = 0;
++ ts0710_connection.mtu = DEF_TS0710_MTU + TS0710_MAX_HDR_SIZE;
++ ts0710_connection.be_testing = 0;
++ ts0710_connection.test_errs = 0;
++ init_waitqueue_head(&ts0710_connection.test_wait);
++
++ for (j = 0; j < TS0710_MAX_CHN; j++) {
++ ts0710_reset_dlci(j);
++ }
++}
++
++static void ts0710_init(void)
++{
++ create_crctable(crctable);
++
++ ts0710_reset_con();
++
++ /* Set the values in the rpn octets */
++/*
++ rpn_val.bit_rate = 7;
++ rpn_val.data_bits = 3;
++ rpn_val.stop_bit = 0;
++ rpn_val.parity = 0;
++ rpn_val.parity_type = 0;
++ rpn_val.res1 = 0;
++ rpn_val.xon_input = 0;
++ rpn_val.xon_output = 0;
++ rpn_val.rtr_input = 0;
++ rpn_val.rtr_output = 0;
++ rpn_val.rtc_input = 0;
++ rpn_val.rtc_output = 0;
++ rpn_val.res2 = 0;
++ rpn_val.xon_u8 = 0x11;
++ rpn_val.xoff_u8 = 0x13;
++ memset(&rpn_val.pm, 0 , 2); *//* Set the mask to zero */
++}
++
++static void ts0710_upon_disconnect(void)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ __u8 j;
++
++ for (j = 0; j < TS0710_MAX_CHN; j++) {
++ ts0710->dlci[j].state = DISCONNECTED;
++ wake_up_interruptible(&ts0710->dlci[j].open_wait);
++ wake_up_interruptible(&ts0710->dlci[j].close_wait);
++ }
++ ts0710->be_testing = 0;
++ wake_up_interruptible(&ts0710->test_wait);
++ ts0710_reset_con();
++}
++
++/* Sending packet functions */
++
++/* Creates a UA packet and puts it at the beginning of the pkt pointer */
++
++static int send_ua(ts0710_con * ts0710, __u8 dlci)
++{
++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE];
++ short_frame *ua;
++
++ TS0710_DEBUG("send_ua: Creating UA packet to DLCI %d\n", dlci);
++
++ ua = (short_frame *) (buf + 1);
++ ua->h.addr.ea = 1;
++ ua->h.addr.cr = ((~(ts0710->initiator)) & 0x1);
++ ua->h.addr.d = (dlci) & 0x1;
++ ua->h.addr.server_chn = (dlci) >> 0x1;
++ ua->h.control = SET_PF(UA);
++ ua->h.length.ea = 1;
++ ua->h.length.len = 0;
++ ua->data[0] = crc_calc((__u8 *) ua, SHORT_CRC_CHECK);
++
++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE);
++}
++
++/* Creates a DM packet and puts it at the beginning of the pkt pointer */
++
++static int send_dm(ts0710_con * ts0710, __u8 dlci)
++{
++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE];
++ short_frame *dm;
++
++ TS0710_DEBUG("send_dm: Creating DM packet to DLCI %d\n", dlci);
++
++ dm = (short_frame *) (buf + 1);
++ dm->h.addr.ea = 1;
++ dm->h.addr.cr = ((~(ts0710->initiator)) & 0x1);
++ dm->h.addr.d = dlci & 0x1;
++ dm->h.addr.server_chn = dlci >> 0x1;
++ dm->h.control = SET_PF(DM);
++ dm->h.length.ea = 1;
++ dm->h.length.len = 0;
++ dm->data[0] = crc_calc((__u8 *) dm, SHORT_CRC_CHECK);
++
++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE);
++}
++
++static int send_sabm(ts0710_con * ts0710, __u8 dlci)
++{
++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE];
++ short_frame *sabm;
++
++ TS0710_DEBUG("send_sabm: Creating SABM packet to DLCI %d\n", dlci);
++
++ sabm = (short_frame *) (buf + 1);
++ sabm->h.addr.ea = 1;
++ sabm->h.addr.cr = ((ts0710->initiator) & 0x1);
++ sabm->h.addr.d = dlci & 0x1;
++ sabm->h.addr.server_chn = dlci >> 0x1;
++ sabm->h.control = SET_PF(SABM);
++ sabm->h.length.ea = 1;
++ sabm->h.length.len = 0;
++ sabm->data[0] = crc_calc((__u8 *) sabm, SHORT_CRC_CHECK);
++
++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE);
++}
++
++static int send_disc(ts0710_con * ts0710, __u8 dlci)
++{
++ __u8 buf[sizeof(short_frame) + FCS_SIZE + FLAG_SIZE];
++ short_frame *disc;
++
++ TS0710_DEBUG("send_disc: Creating DISC packet to DLCI %d\n", dlci);
++
++ disc = (short_frame *) (buf + 1);
++ disc->h.addr.ea = 1;
++ disc->h.addr.cr = ((ts0710->initiator) & 0x1);
++ disc->h.addr.d = dlci & 0x1;
++ disc->h.addr.server_chn = dlci >> 0x1;
++ disc->h.control = SET_PF(DISC);
++ disc->h.length.ea = 1;
++ disc->h.length.len = 0;
++ disc->data[0] = crc_calc((__u8 *) disc, SHORT_CRC_CHECK);
++
++ return basic_write(ts0710, buf, sizeof(short_frame) + FCS_SIZE);
++}
++
++static void queue_uih(mux_send_struct * send_info, __u16 len,
++ ts0710_con * ts0710, __u8 dlci)
++{
++ __u32 size;
++
++ TS0710_DEBUG
++ ("queue_uih: Creating UIH packet with %d bytes data to DLCI %d\n",
++ len, dlci);
++
++ if (len > SHORT_PAYLOAD_SIZE) {
++ long_frame *l_pkt;
++
++ size = sizeof(long_frame) + len + FCS_SIZE;
++ l_pkt = (long_frame *) (send_info->frame - sizeof(long_frame));
++ set_uih_hdr((void *)l_pkt, dlci, len, ts0710->initiator);
++ l_pkt->data[len] = crc_calc((__u8 *) l_pkt, LONG_CRC_CHECK);
++ send_info->frame = ((__u8 *) l_pkt) - 1;
++ } else {
++ short_frame *s_pkt;
++
++ size = sizeof(short_frame) + len + FCS_SIZE;
++ s_pkt =
++ (short_frame *) (send_info->frame - sizeof(short_frame));
++ set_uih_hdr((void *)s_pkt, dlci, len, ts0710->initiator);
++ s_pkt->data[len] = crc_calc((__u8 *) s_pkt, SHORT_CRC_CHECK);
++ send_info->frame = ((__u8 *) s_pkt) - 1;
++ }
++ send_info->length = size;
++}
++
++/* Multiplexer command packets functions */
++
++/* Turns on the ts0710 flow control */
++
++static int ts0710_fcon_msg(ts0710_con * ts0710, __u8 cr)
++{
++ __u8 buf[30];
++ mcc_short_frame *mcc_pkt;
++ short_frame *uih_pkt;
++ __u32 size;
++
++ size = sizeof(short_frame) + sizeof(mcc_short_frame) + FCS_SIZE;
++ uih_pkt = (short_frame *) (buf + 1);
++ set_uih_hdr(uih_pkt, CTRL_CHAN, sizeof(mcc_short_frame),
++ ts0710->initiator);
++ uih_pkt->data[sizeof(mcc_short_frame)] =
++ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK);
++ mcc_pkt = (mcc_short_frame *) (uih_pkt->data);
++
++ mcc_pkt->h.type.ea = EA;
++ mcc_pkt->h.type.cr = cr;
++ mcc_pkt->h.type.type = FCON;
++ mcc_pkt->h.length.ea = EA;
++ mcc_pkt->h.length.len = 0;
++
++ return basic_write(ts0710, buf, size);
++}
++
++/* Turns off the ts0710 flow control */
++
++static int ts0710_fcoff_msg(ts0710_con * ts0710, __u8 cr)
++{
++ __u8 buf[30];
++ mcc_short_frame *mcc_pkt;
++ short_frame *uih_pkt;
++ __u32 size;
++
++ size = (sizeof(short_frame) + sizeof(mcc_short_frame) + FCS_SIZE);
++ uih_pkt = (short_frame *) (buf + 1);
++ set_uih_hdr(uih_pkt, CTRL_CHAN, sizeof(mcc_short_frame),
++ ts0710->initiator);
++ uih_pkt->data[sizeof(mcc_short_frame)] =
++ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK);
++ mcc_pkt = (mcc_short_frame *) (uih_pkt->data);
++
++ mcc_pkt->h.type.ea = 1;
++ mcc_pkt->h.type.cr = cr;
++ mcc_pkt->h.type.type = FCOFF;
++ mcc_pkt->h.length.ea = 1;
++ mcc_pkt->h.length.len = 0;
++
++ return basic_write(ts0710, buf, size);
++}
++
++/*
++static int ts0710_rpn_msg(ts0710_con *ts0710, __u8 cr, __u8 dlci, __u8 req)
++{
++ char buf[100];
++ rpn_msg* rpn_pkt;
++ __u32 fsize;
++ __u32 psize;
++
++ fsize = sizeof(rpn_msg);
++
++ if (req) {
++ fsize -= sizeof(rpn_values);
++ }
++
++ psize = (fsize - sizeof(short_frame) - FCS_SIZE);
++
++ rpn_pkt = (rpn_msg *) buf;
++
++ set_uih_hdr((short_frame *) rpn_pkt, CTRL_CHAN, psize, ts0710->initiator);
++
++ rpn_pkt->fcs = crc_calc((__u8*) rpn_pkt, SHORT_CRC_CHECK);
++
++ rpn_pkt->mcc_s_head.type.ea = EA;
++ rpn_pkt->mcc_s_head.type.cr = cr;
++ rpn_pkt->mcc_s_head.type.type = RPN;
++ rpn_pkt->mcc_s_head.length.ea = EA;
++
++ rpn_pkt->dlci.ea = EA;
++ rpn_pkt->dlci.cr = 1;
++ rpn_pkt->dlci.d = dlci & 1;
++ rpn_pkt->dlci.server_chn = (dlci >> 1);
++
++ if (req) {
++ rpn_pkt->mcc_s_head.length.len = 1;
++ rpn_pkt->rpn_val.bit_rate = rpn_pkt->fcs;
++ } else {
++ rpn_pkt->mcc_s_head.length.len = 8;
++ memcpy(&(rpn_pkt->rpn_val), &rpn_val, sizeof(rpn_values));
++ }
++ return basic_write(ts0710, buf, fsize);
++}
++*/
++/*
++static int ts0710_rls_msg(ts0710_con *ts0710, __u8 cr, __u8 dlci, __u8 err_code)
++{
++ char buf[100];
++ rls_msg *rls_pkt;
++ __u32 fsize;
++ __u32 psize;
++
++ fsize = sizeof(rls_msg);
++ psize = fsize - sizeof(short_frame) - FCS_SIZE;
++ rls_pkt = (rls_msg *) buf;
++
++ set_uih_hdr((short_frame *) rls_pkt, CTRL_CHAN, psize, ts0710->initiator);
++ rls_pkt->fcs = crc_calc((__u8*) rls_pkt, SHORT_CRC_CHECK);
++
++ rls_pkt->mcc_s_head.type.ea = EA;
++ rls_pkt->mcc_s_head.type.cr = cr;
++ rls_pkt->mcc_s_head.type.type = RLS;
++ rls_pkt->mcc_s_head.length.ea = EA;
++ rls_pkt->mcc_s_head.length.len = 2;
++
++ rls_pkt->dlci.ea = EA;
++ rls_pkt->dlci.cr = 1;
++ rls_pkt->dlci.d = dlci & 1;
++ rls_pkt->dlci.server_chn = dlci >> 1;
++ rls_pkt->error = err_code;
++ rls_pkt->res = 0;
++
++ return basic_write(ts0710, buf, fsize);
++}
++*/
++
++/* Sends an PN-messages and sets the not negotiable parameters to their
++ default values in ts0710 */
++
++static int send_pn_msg(ts0710_con * ts0710, __u8 prior, __u32 frame_size,
++ __u8 credit_flow, __u8 credits, __u8 dlci, __u8 cr)
++{
++ __u8 buf[30];
++ pn_msg *pn_pkt;
++ __u32 size;
++ TS0710_DEBUG
++ ("send_pn_msg: DLCI 0x%02x, prior:0x%02x, frame_size:%d, credit_flow:%x, credits:%d, cr:%x\n",
++ dlci, prior, frame_size, credit_flow, credits, cr);
++
++ size = sizeof(pn_msg);
++ pn_pkt = (pn_msg *) (buf + 1);
++
++ set_uih_hdr((void *)pn_pkt, CTRL_CHAN,
++ size - (sizeof(short_frame) + FCS_SIZE), ts0710->initiator);
++ pn_pkt->fcs = crc_calc((__u8 *) pn_pkt, SHORT_CRC_CHECK);
++
++ pn_pkt->mcc_s_head.type.ea = 1;
++ pn_pkt->mcc_s_head.type.cr = cr;
++ pn_pkt->mcc_s_head.type.type = PN;
++ pn_pkt->mcc_s_head.length.ea = 1;
++ pn_pkt->mcc_s_head.length.len = 8;
++
++ pn_pkt->res1 = 0;
++ pn_pkt->res2 = 0;
++ pn_pkt->dlci = dlci;
++ pn_pkt->frame_type = 0;
++ pn_pkt->credit_flow = credit_flow;
++ pn_pkt->prior = prior;
++ pn_pkt->ack_timer = 0;
++ SET_PN_MSG_FRAME_SIZE(pn_pkt, frame_size);
++ pn_pkt->credits = credits;
++ pn_pkt->max_nbrof_retrans = 0;
++
++ return basic_write(ts0710, buf, size);
++}
++
++/* Send a Not supported command - command, which needs 3 bytes */
++
++static int send_nsc_msg(ts0710_con * ts0710, mcc_type cmd, __u8 cr)
++{
++ __u8 buf[30];
++ nsc_msg *nsc_pkt;
++ __u32 size;
++
++ size = sizeof(nsc_msg);
++ nsc_pkt = (nsc_msg *) (buf + 1);
++
++ set_uih_hdr((void *)nsc_pkt, CTRL_CHAN,
++ sizeof(nsc_msg) - sizeof(short_frame) - FCS_SIZE,
++ ts0710->initiator);
++
++ nsc_pkt->fcs = crc_calc((__u8 *) nsc_pkt, SHORT_CRC_CHECK);
++
++ nsc_pkt->mcc_s_head.type.ea = 1;
++ nsc_pkt->mcc_s_head.type.cr = cr;
++ nsc_pkt->mcc_s_head.type.type = NSC;
++ nsc_pkt->mcc_s_head.length.ea = 1;
++ nsc_pkt->mcc_s_head.length.len = 1;
++
++ nsc_pkt->command_type.ea = 1;
++ nsc_pkt->command_type.cr = cmd.cr;
++ nsc_pkt->command_type.type = cmd.type;
++
++ return basic_write(ts0710, buf, size);
++}
++
++static int ts0710_msc_msg(ts0710_con * ts0710, __u8 value, __u8 cr, __u8 dlci)
++{
++ __u8 buf[30];
++ msc_msg *msc_pkt;
++ __u32 size;
++
++ size = sizeof(msc_msg);
++ msc_pkt = (msc_msg *) (buf + 1);
++
++ set_uih_hdr((void *)msc_pkt, CTRL_CHAN,
++ sizeof(msc_msg) - sizeof(short_frame) - FCS_SIZE,
++ ts0710->initiator);
++
++ msc_pkt->fcs = crc_calc((__u8 *) msc_pkt, SHORT_CRC_CHECK);
++
++ msc_pkt->mcc_s_head.type.ea = 1;
++ msc_pkt->mcc_s_head.type.cr = cr;
++ msc_pkt->mcc_s_head.type.type = MSC;
++ msc_pkt->mcc_s_head.length.ea = 1;
++ msc_pkt->mcc_s_head.length.len = 2;
++
++ msc_pkt->dlci.ea = 1;
++ msc_pkt->dlci.cr = 1;
++ msc_pkt->dlci.d = dlci & 1;
++ msc_pkt->dlci.server_chn = (dlci >> 1) & 0x1f;
++
++ msc_pkt->v24_sigs = value;
++
++ return basic_write(ts0710, buf, size);
++}
++
++static int ts0710_test_msg(ts0710_con * ts0710, __u8 * test_pattern, __u32 len,
++ __u8 cr, __u8 * f_buf /*Frame buf */ )
++{
++ __u32 size;
++
++ if (len > SHORT_PAYLOAD_SIZE) {
++ long_frame *uih_pkt;
++ mcc_long_frame *mcc_pkt;
++
++ size =
++ (sizeof(long_frame) + sizeof(mcc_long_frame) + len +
++ FCS_SIZE);
++ uih_pkt = (long_frame *) (f_buf + 1);
++
++ set_uih_hdr((short_frame *) uih_pkt, CTRL_CHAN, len +
++ sizeof(mcc_long_frame), ts0710->initiator);
++ uih_pkt->data[GET_LONG_LENGTH(uih_pkt->h.length)] =
++ crc_calc((__u8 *) uih_pkt, LONG_CRC_CHECK);
++ mcc_pkt = (mcc_long_frame *) uih_pkt->data;
++
++ mcc_pkt->h.type.ea = EA;
++ /* cr tells whether it is a commmand (1) or a response (0) */
++ mcc_pkt->h.type.cr = cr;
++ mcc_pkt->h.type.type = TEST;
++ SET_LONG_LENGTH(mcc_pkt->h.length, len);
++ memcpy(mcc_pkt->value, test_pattern, len);
++ } else if (len > (SHORT_PAYLOAD_SIZE - sizeof(mcc_short_frame))) {
++ long_frame *uih_pkt;
++ mcc_short_frame *mcc_pkt;
++
++ /* Create long uih packet and short mcc packet */
++ size =
++ (sizeof(long_frame) + sizeof(mcc_short_frame) + len +
++ FCS_SIZE);
++ uih_pkt = (long_frame *) (f_buf + 1);
++
++ set_uih_hdr((short_frame *) uih_pkt, CTRL_CHAN,
++ len + sizeof(mcc_short_frame), ts0710->initiator);
++ uih_pkt->data[GET_LONG_LENGTH(uih_pkt->h.length)] =
++ crc_calc((__u8 *) uih_pkt, LONG_CRC_CHECK);
++ mcc_pkt = (mcc_short_frame *) uih_pkt->data;
++
++ mcc_pkt->h.type.ea = EA;
++ mcc_pkt->h.type.cr = cr;
++ mcc_pkt->h.type.type = TEST;
++ mcc_pkt->h.length.ea = EA;
++ mcc_pkt->h.length.len = len;
++ memcpy(mcc_pkt->value, test_pattern, len);
++ } else {
++ short_frame *uih_pkt;
++ mcc_short_frame *mcc_pkt;
++
++ size =
++ (sizeof(short_frame) + sizeof(mcc_short_frame) + len +
++ FCS_SIZE);
++ uih_pkt = (short_frame *) (f_buf + 1);
++
++ set_uih_hdr((void *)uih_pkt, CTRL_CHAN, len
++ + sizeof(mcc_short_frame), ts0710->initiator);
++ uih_pkt->data[uih_pkt->h.length.len] =
++ crc_calc((__u8 *) uih_pkt, SHORT_CRC_CHECK);
++ mcc_pkt = (mcc_short_frame *) uih_pkt->data;
++
++ mcc_pkt->h.type.ea = EA;
++ mcc_pkt->h.type.cr = cr;
++ mcc_pkt->h.type.type = TEST;
++ mcc_pkt->h.length.ea = EA;
++ mcc_pkt->h.length.len = len;
++ memcpy(mcc_pkt->value, test_pattern, len);
++
++ }
++ return basic_write(ts0710, f_buf, size);
++}
++
++static void set_uih_hdr(short_frame * uih_pkt, __u8 dlci, __u32 len, __u8 cr)
++{
++ uih_pkt->h.addr.ea = 1;
++ uih_pkt->h.addr.cr = cr;
++ uih_pkt->h.addr.d = dlci & 0x1;
++ uih_pkt->h.addr.server_chn = dlci >> 1;
++ uih_pkt->h.control = CLR_PF(UIH);
++
++ if (len > SHORT_PAYLOAD_SIZE) {
++ SET_LONG_LENGTH(((long_frame *) uih_pkt)->h.length, len);
++ } else {
++ uih_pkt->h.length.ea = 1;
++ uih_pkt->h.length.len = len;
++ }
++}
++
++/* Parses a multiplexer control channel packet */
++
++void process_mcc(__u8 * data, __u32 len, ts0710_con * ts0710, int longpkt)
++{
++ __u8 *tbuf = NULL;
++ mcc_short_frame *mcc_short_pkt;
++ int j;
++
++ if (longpkt) {
++ mcc_short_pkt =
++ (mcc_short_frame *) (((long_frame *) data)->data);
++ } else {
++ mcc_short_pkt =
++ (mcc_short_frame *) (((short_frame *) data)->data);
++ }
++
++ switch (mcc_short_pkt->h.type.type) {
++ case TEST:
++ if (mcc_short_pkt->h.type.cr == MCC_RSP) {
++ TS0710_DEBUG("Received test command response\n");
++
++ if (ts0710->be_testing) {
++ if ((mcc_short_pkt->h.length.ea) == 0) {
++ mcc_long_frame *mcc_long_pkt;
++ mcc_long_pkt =
++ (mcc_long_frame *) mcc_short_pkt;
++ if (GET_LONG_LENGTH
++ (mcc_long_pkt->h.length) !=
++ TEST_PATTERN_SIZE) {
++ ts0710->test_errs =
++ TEST_PATTERN_SIZE;
++ TS0710_DEBUG
++ ("Err: received test pattern is %d bytes long, not expected %d\n",
++ GET_LONG_LENGTH
++ (mcc_long_pkt->h.length),
++ TEST_PATTERN_SIZE);
++ } else {
++ ts0710->test_errs = 0;
++ for (j = 0;
++ j < TEST_PATTERN_SIZE;
++ j++) {
++ if (mcc_long_pkt->
++ value[j] !=
++ (j & 0xFF)) {
++ (ts0710->
++ test_errs)++;
++ }
++ }
++ }
++
++ } else {
++
++#if TEST_PATTERN_SIZE < 128
++ if (mcc_short_pkt->h.length.len !=
++ TEST_PATTERN_SIZE) {
++#endif
++
++ ts0710->test_errs =
++ TEST_PATTERN_SIZE;
++ TS0710_DEBUG
++ ("Err: received test pattern is %d bytes long, not expected %d\n",
++ mcc_short_pkt->h.length.
++ len, TEST_PATTERN_SIZE);
++
++#if TEST_PATTERN_SIZE < 128
++ } else {
++ ts0710->test_errs = 0;
++ for (j = 0;
++ j < TEST_PATTERN_SIZE;
++ j++) {
++ if (mcc_short_pkt->
++ value[j] !=
++ (j & 0xFF)) {
++ (ts0710->
++ test_errs)++;
++ }
++ }
++ }
++#endif
++
++ }
++
++ ts0710->be_testing = 0; /* Clear the flag */
++ wake_up_interruptible(&ts0710->test_wait);
++ } else {
++ TS0710_DEBUG
++ ("Err: shouldn't or late to get test cmd response\n");
++ }
++ } else {
++ tbuf = (__u8 *) kmalloc(len + 32, GFP_ATOMIC);
++ if (!tbuf) {
++ break;
++ }
++
++ if ((mcc_short_pkt->h.length.ea) == 0) {
++ mcc_long_frame *mcc_long_pkt;
++ mcc_long_pkt = (mcc_long_frame *) mcc_short_pkt;
++ ts0710_test_msg(ts0710, mcc_long_pkt->value,
++ GET_LONG_LENGTH(mcc_long_pkt->h.
++ length),
++ MCC_RSP, tbuf);
++ } else {
++ ts0710_test_msg(ts0710, mcc_short_pkt->value,
++ mcc_short_pkt->h.length.len,
++ MCC_RSP, tbuf);
++ }
++
++ kfree(tbuf);
++ }
++ break;
++
++ case FCON: /*Flow control on command */
++ TS0710_PRINTK
++ ("MUX Received Flow control(all channels) on command\n");
++ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
++ ts0710->dlci[0].state = CONNECTED;
++ ts0710_fcon_msg(ts0710, MCC_RSP);
++ mux_sched_send();
++ }
++ break;
++
++ case FCOFF: /*Flow control off command */
++ TS0710_PRINTK
++ ("MUX Received Flow control(all channels) off command\n");
++ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
++ for (j = 0; j < TS0710_MAX_CHN; j++) {
++ ts0710->dlci[j].state = FLOW_STOPPED;
++ }
++ ts0710_fcoff_msg(ts0710, MCC_RSP);
++ }
++ break;
++
++ case MSC: /*Modem status command */
++ {
++ __u8 dlci;
++ __u8 v24_sigs;
++
++ dlci = (mcc_short_pkt->value[0]) >> 2;
++ v24_sigs = mcc_short_pkt->value[1];
++
++ if ((ts0710->dlci[dlci].state != CONNECTED)
++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) {
++ send_dm(ts0710, dlci);
++ break;
++ }
++ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
++ TS0710_DEBUG("Received Modem status command\n");
++ if (v24_sigs & 2) {
++ if (ts0710->dlci[dlci].state ==
++ CONNECTED) {
++ TS0710_LOG
++ ("MUX Received Flow off on dlci %d\n",
++ dlci);
++ ts0710->dlci[dlci].state =
++ FLOW_STOPPED;
++ }
++ } else {
++ if (ts0710->dlci[dlci].state ==
++ FLOW_STOPPED) {
++ ts0710->dlci[dlci].state =
++ CONNECTED;
++ TS0710_LOG
++ ("MUX Received Flow on on dlci %d\n",
++ dlci);
++ mux_sched_send();
++ }
++ }
++
++ ts0710_msc_msg(ts0710, v24_sigs, MCC_RSP, dlci);
++/*
++ if (!(ts0710->dlci[dlci].initiated) && !(ts0710->dlci[dlci].initiator)) {
++ ts0710_msc_msg(ts0710, EA | RTR | RTC | DV, MCC_CMD, dlci);
++ ts0710->dlci[dlci].initiated = 1;
++ }
++*/
++ } else {
++ TS0710_DEBUG
++ ("Received Modem status response\n");
++
++ if (v24_sigs & 2) {
++ TS0710_DEBUG("Flow stop accepted\n");
++ }
++ }
++ break;
++ }
++
++ /* case RPN: *//*Remote port negotiation command */
++
++/* {
++ __u8 dlci;
++
++ dlci = (mcc_short_pkt->value[0]) >> 2;
++
++ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
++ if (mcc_short_pkt->h.length.len == 1) {
++ TS0710_DEBUG("Received Remote port negotiation command\n");
++ ts0710_rpn_msg(ts0710, MCC_RSP, dlci, 0);
++ } else {
++*/
++ /* Accept the other sides settings (accept all for now) */
++/* TS0710_DEBUG("Received Remote port negotiation respons\n");
++ memcpy(&rpn_val, &mcc_short_pkt->value[1], 8);
++ ts0710_rpn_msg(ts0710, MCC_RSP, dlci, 0);
++*/
++ /* Zero the parametermask after response */
++/* memset(&rpn_val.pm, 0, 2);
++ }
++ }
++ break;
++ }
++*/
++/*
++ case RLS: *//*Remote line status */
++/* {
++ __u8 dlci;
++ __u8 err_code;
++
++ TS0710_DEBUG("Received Remote line status\n");
++ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
++ dlci = mcc_short_pkt->value[0] >> 2;
++ err_code = mcc_short_pkt->value[1];
++
++ ts0710_rls_msg(ts0710, MCC_RSP, dlci, err_code);
++ }
++ break;
++ }
++*/
++ case PN: /*DLC parameter negotiation */
++ {
++ __u8 dlci;
++ __u16 frame_size;
++ pn_msg *pn_pkt;
++
++ pn_pkt = (pn_msg *) data;
++ dlci = pn_pkt->dlci;
++ frame_size = GET_PN_MSG_FRAME_SIZE(pn_pkt);
++ TS0710_DEBUG
++ ("Received DLC parameter negotiation, PN\n");
++ if (pn_pkt->mcc_s_head.type.cr == MCC_CMD) {
++ TS0710_DEBUG("received PN command with:\n");
++ TS0710_DEBUG("Frame size:%d\n", frame_size);
++
++ frame_size =
++ min(frame_size, ts0710->dlci[dlci].mtu);
++ send_pn_msg(ts0710, pn_pkt->prior, frame_size,
++ 0, 0, dlci, MCC_RSP);
++ ts0710->dlci[dlci].mtu = frame_size;
++ TS0710_DEBUG("process_mcc : mtu set to %d\n",
++ ts0710->dlci[dlci].mtu);
++ } else {
++ TS0710_DEBUG("received PN response with:\n");
++ TS0710_DEBUG("Frame size:%d\n", frame_size);
++
++ frame_size =
++ min(frame_size, ts0710->dlci[dlci].mtu);
++ ts0710->dlci[dlci].mtu = frame_size;
++
++ TS0710_DEBUG
++ ("process_mcc : mtu set on dlci:%d to %d\n",
++ dlci, ts0710->dlci[dlci].mtu);
++
++ if (ts0710->dlci[dlci].state == NEGOTIATING) {
++ ts0710->dlci[dlci].state = CONNECTING;
++ wake_up_interruptible(&ts0710->
++ dlci[dlci].
++ open_wait);
++ }
++ }
++ break;
++ }
++
++ case NSC: /*Non supported command resonse */
++ TS0710_LOG("MUX Received Non supported command response\n");
++ break;
++
++ default: /*Non supported command received */
++ TS0710_LOG("MUX Received a non supported command\n");
++ send_nsc_msg(ts0710, mcc_short_pkt->h.type, MCC_RSP);
++ break;
++ }
++}
++
++static mux_recv_packet *get_mux_recv_packet(__u32 size)
++{
++ mux_recv_packet *recv_packet;
++
++ TS0710_DEBUG("Enter into get_mux_recv_packet");
++
++ recv_packet =
++ (mux_recv_packet *) kmalloc(sizeof(mux_recv_packet), GFP_ATOMIC);
++ if (!recv_packet) {
++ return 0;
++ }
++
++ recv_packet->data = (__u8 *) kmalloc(size, GFP_ATOMIC);
++ if (!(recv_packet->data)) {
++ kfree(recv_packet);
++ return 0;
++ }
++ recv_packet->length = 0;
++ recv_packet->next = 0;
++ return recv_packet;
++}
++
++static void free_mux_recv_packet(mux_recv_packet * recv_packet)
++{
++ TS0710_DEBUG("Enter into free_mux_recv_packet");
++
++ if (!recv_packet) {
++ return;
++ }
++
++ if (recv_packet->data) {
++ kfree(recv_packet->data);
++ }
++ kfree(recv_packet);
++}
++
++static void free_mux_recv_struct(mux_recv_struct * recv_info)
++{
++ mux_recv_packet *recv_packet1, *recv_packet2;
++
++ if (!recv_info) {
++ return;
++ }
++
++ recv_packet1 = recv_info->mux_packet;
++ while (recv_packet1) {
++ recv_packet2 = recv_packet1->next;
++ free_mux_recv_packet(recv_packet1);
++ recv_packet1 = recv_packet2;
++ }
++
++ kfree(recv_info);
++}
++
++static inline void add_post_recv_queue(mux_recv_struct ** head,
++ mux_recv_struct * new_item)
++{
++ new_item->next = *head;
++ *head = new_item;
++}
++
++static void ts0710_flow_on(__u8 dlci, ts0710_con * ts0710)
++{
++ int i;
++ __u8 cmdtty;
++ __u8 datatty;
++ struct tty_struct *tty;
++ mux_recv_struct *recv_info;
++
++ if ((ts0710->dlci[0].state != CONNECTED)
++ && (ts0710->dlci[0].state != FLOW_STOPPED)) {
++ return;
++ } else if ((ts0710->dlci[dlci].state != CONNECTED)
++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) {
++ return;
++ }
++
++ if (!(ts0710->dlci[dlci].flow_control)) {
++ return;
++ }
++
++ cmdtty = dlci2tty[dlci].cmdtty;
++ datatty = dlci2tty[dlci].datatty;
++
++ if (cmdtty != datatty) {
++ /* Check AT cmd tty */
++ tty = mux_table[cmdtty];
++ if (mux_tty[cmdtty] && tty) {
++ if (test_bit(TTY_THROTTLED, &tty->flags)) {
++ return;
++ }
++ }
++ recv_info = mux_recv_info[cmdtty];
++ if (mux_recv_info_flags[cmdtty] && recv_info) {
++ if (recv_info->total) {
++ return;
++ }
++ }
++
++ /* Check data tty */
++ tty = mux_table[datatty];
++ if (mux_tty[datatty] && tty) {
++ if (test_bit(TTY_THROTTLED, &tty->flags)) {
++ return;
++ }
++ }
++ recv_info = mux_recv_info[datatty];
++ if (mux_recv_info_flags[datatty] && recv_info) {
++ if (recv_info->total) {
++ return;
++ }
++ }
++ }
++
++ for (i = 0; i < 3; i++) {
++ if (ts0710_msc_msg(ts0710, EA | RTC | RTR | DV, MCC_CMD, dlci) <
++ 0) {
++ continue;
++ } else {
++ TS0710_LOG("MUX send Flow on on dlci %d\n", dlci);
++ ts0710->dlci[dlci].flow_control = 0;
++ break;
++ }
++ }
++}
++
++static void ts0710_flow_off(struct tty_struct *tty, __u8 dlci,
++ ts0710_con * ts0710)
++{
++ int i;
++
++ if (test_and_set_bit(TTY_THROTTLED, &tty->flags)) {
++ return;
++ }
++
++ if ((ts0710->dlci[0].state != CONNECTED)
++ && (ts0710->dlci[0].state != FLOW_STOPPED)) {
++ return;
++ } else if ((ts0710->dlci[dlci].state != CONNECTED)
++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) {
++ return;
++ }
++
++ if (ts0710->dlci[dlci].flow_control) {
++ return;
++ }
++
++ for (i = 0; i < 3; i++) {
++ if (ts0710_msc_msg
++ (ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, dlci) < 0) {
++ continue;
++ } else {
++ TS0710_LOG("MUX send Flow off on dlci %d\n", dlci);
++ ts0710->dlci[dlci].flow_control = 1;
++ break;
++ }
++ }
++}
++
++int ts0710_recv_data(ts0710_con * ts0710, char *data, int len)
++{
++ short_frame *short_pkt;
++ long_frame *long_pkt;
++ __u8 *uih_data_start;
++ __u32 uih_len;
++ __u8 dlci;
++ __u8 be_connecting;
++#ifdef TS0710DEBUG
++ unsigned long t;
++#endif
++
++ short_pkt = (short_frame *) data;
++
++ dlci = short_pkt->h.addr.server_chn << 1 | short_pkt->h.addr.d;
++ switch (CLR_PF(short_pkt->h.control)) {
++ case SABM:
++ TS0710_DEBUG("SABM-packet received\n");
++
++/*For BP UART problem
++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) )
++ break;
++*/
++
++ if (!dlci) {
++ TS0710_DEBUG("server channel == 0\n");
++ ts0710->dlci[0].state = CONNECTED;
++
++ TS0710_DEBUG("sending back UA - control channel\n");
++ send_ua(ts0710, dlci);
++ wake_up_interruptible(&ts0710->dlci[0].open_wait);
++
++ } else if (valid_dlci(dlci)) {
++
++ TS0710_DEBUG("Incomming connect on channel %d\n", dlci);
++
++ TS0710_DEBUG("sending UA, dlci %d\n", dlci);
++ send_ua(ts0710, dlci);
++
++ ts0710->dlci[dlci].state = CONNECTED;
++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait);
++
++ } else {
++ TS0710_DEBUG("invalid dlci %d, sending DM\n", dlci);
++ send_dm(ts0710, dlci);
++ }
++
++ break;
++
++ case UA:
++ TS0710_DEBUG("UA packet received\n");
++
++/*For BP UART problem
++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) )
++ break;
++*/
++
++ if (!dlci) {
++ TS0710_DEBUG("server channel == 0\n");
++
++ if (ts0710->dlci[0].state == CONNECTING) {
++ ts0710->dlci[0].state = CONNECTED;
++ wake_up_interruptible(&ts0710->dlci[0].
++ open_wait);
++ } else if (ts0710->dlci[0].state == DISCONNECTING) {
++ ts0710_upon_disconnect();
++ } else {
++ TS0710_DEBUG
++ (" Something wrong receiving UA packet\n");
++ }
++ } else if (valid_dlci(dlci)) {
++ TS0710_DEBUG("Incomming UA on channel %d\n", dlci);
++
++ if (ts0710->dlci[dlci].state == CONNECTING) {
++ ts0710->dlci[dlci].state = CONNECTED;
++ wake_up_interruptible(&ts0710->dlci[dlci].
++ open_wait);
++ } else if (ts0710->dlci[dlci].state == DISCONNECTING) {
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ wake_up_interruptible(&ts0710->dlci[dlci].
++ open_wait);
++ wake_up_interruptible(&ts0710->dlci[dlci].
++ close_wait);
++ ts0710_reset_dlci(dlci);
++ } else {
++ TS0710_DEBUG
++ (" Something wrong receiving UA packet\n");
++ }
++ } else {
++ TS0710_DEBUG("invalid dlci %d\n", dlci);
++ }
++
++ break;
++
++ case DM:
++ TS0710_DEBUG("DM packet received\n");
++
++/*For BP UART problem
++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) )
++ break;
++*/
++
++ if (!dlci) {
++ TS0710_DEBUG("server channel == 0\n");
++
++ if (ts0710->dlci[0].state == CONNECTING) {
++ be_connecting = 1;
++ } else {
++ be_connecting = 0;
++ }
++ ts0710_upon_disconnect();
++ if (be_connecting) {
++ ts0710->dlci[0].state = REJECTED;
++ }
++ } else if (valid_dlci(dlci)) {
++ TS0710_DEBUG("Incomming DM on channel %d\n", dlci);
++
++ if (ts0710->dlci[dlci].state == CONNECTING) {
++ ts0710->dlci[dlci].state = REJECTED;
++ } else {
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ }
++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait);
++ wake_up_interruptible(&ts0710->dlci[dlci].close_wait);
++ ts0710_reset_dlci(dlci);
++ } else {
++ TS0710_DEBUG("invalid dlci %d\n", dlci);
++ }
++
++ break;
++
++ case DISC:
++ TS0710_DEBUG("DISC packet received\n");
++
++/*For BP UART problem
++ if( crc_check((__u8*) short_pkt, SHORT_CRC_CHECK, short_pkt->data[0]) )
++ break;
++*/
++
++ if (!dlci) {
++ TS0710_DEBUG("server channel == 0\n");
++
++ send_ua(ts0710, dlci);
++ TS0710_DEBUG("DISC, sending back UA\n");
++
++ ts0710_upon_disconnect();
++ } else if (valid_dlci(dlci)) {
++ TS0710_DEBUG("Incomming DISC on channel %d\n", dlci);
++
++ send_ua(ts0710, dlci);
++ TS0710_DEBUG("DISC, sending back UA\n");
++
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait);
++ wake_up_interruptible(&ts0710->dlci[dlci].close_wait);
++ ts0710_reset_dlci(dlci);
++ } else {
++ TS0710_DEBUG("invalid dlci %d\n", dlci);
++ }
++
++ break;
++
++ case UIH:
++ TS0710_DEBUG("UIH packet received\n");
++
++ if ((dlci >= TS0710_MAX_CHN)) {
++ TS0710_DEBUG("invalid dlci %d\n", dlci);
++ send_dm(ts0710, dlci);
++ break;
++ }
++
++ if (GET_PF(short_pkt->h.control)) {
++ TS0710_LOG
++ ("MUX Error %s: UIH packet with P/F set, discard it!\n",
++ __FUNCTION__);
++ break;
++ }
++
++ if ((ts0710->dlci[dlci].state != CONNECTED)
++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) {
++ TS0710_LOG
++ ("MUX Error %s: DLCI %d not connected, discard it!\n",
++ __FUNCTION__, dlci);
++ send_dm(ts0710, dlci);
++ break;
++ }
++
++ if ((short_pkt->h.length.ea) == 0) {
++ TS0710_DEBUG("Long UIH packet received\n");
++ long_pkt = (long_frame *) data;
++ uih_len = GET_LONG_LENGTH(long_pkt->h.length);
++ uih_data_start = long_pkt->h.data;
++ TS0710_DEBUG("long packet length %d\n", uih_len);
++
++/*For BP UART problem
++ if (crc_check(data, LONG_CRC_CHECK, *(uih_data_start + uih_len)))
++ break;
++*/
++ } else {
++ TS0710_DEBUG("Short UIH pkt received\n");
++ uih_len = short_pkt->h.length.len;
++ uih_data_start = short_pkt->data;
++
++/*For BP UART problem
++ if (crc_check(data, SHORT_CRC_CHECK, *(uih_data_start + uih_len)))
++ break;
++*/
++ }
++
++ if (dlci == 0) {
++ TS0710_DEBUG("UIH on serv_channel 0\n");
++ process_mcc(data, len, ts0710,
++ !(short_pkt->h.length.ea));
++ } else if (valid_dlci(dlci)) {
++ /* do tty dispatch */
++ __u8 tag;
++ __u8 tty_idx;
++ struct tty_struct *tty;
++ __u8 queue_data;
++ __u8 post_recv;
++ __u8 flow_control;
++ mux_recv_struct *recv_info;
++ int recv_room;
++ mux_recv_packet *recv_packet, *recv_packet2;
++
++ TS0710_DEBUG("UIH on channel %d\n", dlci);
++
++ if (uih_len > ts0710->dlci[dlci].mtu) {
++ TS0710_PRINTK
++ ("MUX Error: DLCI:%d, uih_len:%d is bigger than mtu:%d, discard data!\n",
++ dlci, uih_len, ts0710->dlci[dlci].mtu);
++ break;
++ }
++
++ tag = *uih_data_start;
++ uih_data_start++;
++ uih_len--;
++
++ if (!uih_len) {
++ break;
++ }
++
++ switch (tag) {
++ case CMDTAG:
++ tty_idx = dlci2tty[dlci].cmdtty;
++ TS0710_DEBUG("CMDTAG on DLCI:%d, /dev/mux%d\n",
++ dlci, tty_idx);
++ TS0710_DEBUGSTR(uih_data_start, uih_len);
++ if (!(iscmdtty[tty_idx])) {
++ TS0710_PRINTK
++ ("MUX Error: %s: Wrong CMDTAG on DLCI:%d, /dev/mux%d\n",
++ __FUNCTION__, dlci, tty_idx);
++ }
++ break;
++ case DATATAG:
++ default:
++ tty_idx = dlci2tty[dlci].datatty;
++ TS0710_DEBUG
++ ("NON-CMDTAG on DLCI:%d, /dev/mux%d\n",
++ dlci, tty_idx);
++ if (iscmdtty[tty_idx]) {
++ TS0710_PRINTK
++ ("MUX Error: %s: Wrong NON-CMDTAG on DLCI:%d, /dev/mux%d\n",
++ __FUNCTION__, dlci, tty_idx);
++ }
++ break;
++ }
++ tty = mux_table[tty_idx];
++ if ((!mux_tty[tty_idx]) || (!tty)) {
++ TS0710_PRINTK
++ ("MUX: No application waiting for, discard it! /dev/mux%d\n",
++ tty_idx);
++ } else { /* Begin processing received data */
++ if ((!mux_recv_info_flags[tty_idx])
++ || (!mux_recv_info[tty_idx])) {
++ TS0710_PRINTK
++ ("MUX Error: No mux_recv_info, discard it! /dev/mux%d\n",
++ tty_idx);
++ break;
++ }
++
++ recv_info = mux_recv_info[tty_idx];
++ if (recv_info->total > 8192) {
++ TS0710_PRINTK
++ ("MUX : discard data for tty_idx:%d, recv_info->total > 8192 \n",
++ tty_idx);
++ break;
++ }
++
++ queue_data = 0;
++ post_recv = 0;
++ flow_control = 0;
++ recv_room = 65535;
++ if (tty->receive_room)
++ recv_room = tty->receive_room;
++
++ if (test_bit(TTY_THROTTLED, &tty->flags)) {
++ queue_data = 1;
++ } else {
++ if (test_bit
++ (TTY_DONT_FLIP, &tty->flags)) {
++ queue_data = 1;
++ post_recv = 1;
++ } else if (recv_info->total) {
++ queue_data = 1;
++ post_recv = 1;
++ } else if (recv_room < uih_len) {
++ queue_data = 1;
++ flow_control = 1;
++ }
++
++ if ((recv_room -
++ (uih_len + recv_info->total)) <
++ ts0710->dlci[dlci].mtu) {
++ flow_control = 1;
++ }
++ }
++
++ if (!queue_data) {
++ /* Put received data into read buffer of tty */
++ TS0710_DEBUG
++ ("Put received data into read buffer of /dev/mux%d",
++ tty_idx);
++
++#ifdef TS0710DEBUG
++ t = jiffies;
++#endif
++
++ (tty->ldisc.receive_buf) (tty,
++ uih_data_start,
++ NULL,
++ uih_len);
++
++#ifdef TS0710DEBUG
++ TS0710_DEBUG
++ ("tty->ldisc.receive_buf take ticks: %lu",
++ (jiffies - t));
++#endif
++
++ } else { /* Queue data */
++
++ TS0710_DEBUG
++ ("Put received data into recv queue of /dev/mux%d",
++ tty_idx);
++ if (recv_info->total) {
++ /* recv_info is already linked into mux_recv_queue */
++
++ recv_packet =
++ get_mux_recv_packet
++ (uih_len);
++ if (!recv_packet) {
++ TS0710_PRINTK
++ ("MUX %s: no memory\n",
++ __FUNCTION__);
++ break;
++ }
++
++ memcpy(recv_packet->data,
++ uih_data_start, uih_len);
++ recv_packet->length = uih_len;
++ recv_info->total += uih_len;
++ recv_packet->next = NULL;
++
++ if (!(recv_info->mux_packet)) {
++ recv_info->mux_packet =
++ recv_packet;
++ } else {
++ recv_packet2 =
++ recv_info->
++ mux_packet;
++ while (recv_packet2->
++ next) {
++ recv_packet2 =
++ recv_packet2->
++ next;
++ }
++ recv_packet2->next =
++ recv_packet;
++ } /* End if( !(recv_info->mux_packet) ) */
++ } else { /* recv_info->total == 0 */
++ if (uih_len >
++ TS0710MUX_RECV_BUF_SIZE) {
++ TS0710_PRINTK
++ ("MUX Error: tty_idx:%d, uih_len == %d is too big\n",
++ tty_idx, uih_len);
++ uih_len =
++ TS0710MUX_RECV_BUF_SIZE;
++ }
++ memcpy(recv_info->data,
++ uih_data_start, uih_len);
++ recv_info->length = uih_len;
++ recv_info->total = uih_len;
++
++ add_post_recv_queue
++ (&mux_recv_queue,
++ recv_info);
++ } /* End recv_info->total == 0 */
++ } /* End Queue data */
++
++ if (flow_control) {
++ /* Do something for flow control */
++ ts0710_flow_off(tty, dlci, ts0710);
++ }
++
++ if (tty_idx ==
++ dlci2tty[TS0710MUX_GPRS1_DLCI].datatty) {
++ if (add_count
++ (TS0710MUX_GPRS1_RECV_COUNT_IDX,
++ uih_len) < 0) {
++ post_recv_count_flag = 1;
++ post_recv = 1;
++ mux_data_count2
++ [TS0710MUX_GPRS1_RECV_COUNT_IDX]
++ += uih_len;
++ }
++ } else if (tty_idx ==
++ dlci2tty[TS0710MUX_GPRS2_DLCI].
++ datatty) {
++ if (add_count
++ (TS0710MUX_GPRS2_RECV_COUNT_IDX,
++ uih_len) < 0) {
++ post_recv_count_flag = 1;
++ post_recv = 1;
++ mux_data_count2
++ [TS0710MUX_GPRS2_RECV_COUNT_IDX]
++ += uih_len;
++ }
++ }
++
++ if (post_recv)
++ schedule_work(&post_recv_tqueue);
++ } /* End processing received data */
++ } else {
++ TS0710_DEBUG("invalid dlci %d\n", dlci);
++ }
++
++ break;
++
++ default:
++ TS0710_DEBUG("illegal packet\n");
++ break;
++ }
++ return 0;
++}
++
++/*
++int ts0710_send_data(ts0710_con *ts0710, __u8 dlci, __u8 *data, __u32 count)
++{
++ __u32 c, total = 0;
++ __u8 tag, first;
++
++ if( ts0710->dlci[0].state == FLOW_STOPPED ){
++ TS0710_DEBUG("Flow stopped on all channels, returning zero\n");
++*/
++/*
++ return -EFLOWSTOPPED;
++ } else if( ts0710->dlci[dlci].state == FLOW_STOPPED ){
++ TS0710_DEBUG("Flow stopped, returning zero\n");
++*/
++/*
++ return -EFLOWSTOPPED;
++ } else if( ts0710->dlci[dlci].state == CONNECTED ){
++
++ TS0710_DEBUG("trying to send %d bytes\n", count);
++ tag = *data;
++ first = 1;
++*/
++ /* The first byte is always a Cmd/Data tag */
++/*
++ while( count > 1 ){
++
++ c = min(count, ts0710->dlci[dlci].mtu);
++ if( queue_uih(data, c, ts0710, dlci) <= 0 ) {
++ break;
++ }
++
++ total += (c - 1);
++ data += (c - 1);
++ *data = tag;
++ count -= (c - 1);
++
++ if( first ) {
++ first = 0;
++ total++;
++ }
++ }
++ TS0710_DEBUG("sent %d bytes\n", total);
++ return total;
++ } else {
++ TS0710_DEBUG("DLCI %d not connected\n", dlci);
++ return -EDISCONNECTED;
++ }
++}
++*/
++
++/* Close ts0710 channel */
++static void ts0710_close_channel(__u8 dlci)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int try;
++ unsigned long t;
++
++ TS0710_DEBUG("ts0710_disc_command on channel %d\n", dlci);
++
++ if ((ts0710->dlci[dlci].state == DISCONNECTED)
++ || (ts0710->dlci[dlci].state == REJECTED)) {
++ return;
++ } else if (ts0710->dlci[dlci].state == DISCONNECTING) {
++ /* Reentry */
++ return;
++ } else {
++ ts0710->dlci[dlci].state = DISCONNECTING;
++ try = 3;
++ while (try--) {
++ t = jiffies;
++ send_disc(ts0710, dlci);
++ interruptible_sleep_on_timeout(&ts0710->dlci[dlci].
++ close_wait,
++ TS0710MUX_TIME_OUT);
++ if (ts0710->dlci[dlci].state == DISCONNECTED) {
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI %d Send DISC got signal!\n",
++ dlci);
++ break;
++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI %d Send DISC timeout!\n", dlci);
++ continue;
++ }
++ }
++
++ if (ts0710->dlci[dlci].state != DISCONNECTED) {
++ if (dlci == 0) { /* Control Channel */
++ ts0710_upon_disconnect();
++ } else { /* Other Channel */
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ wake_up_interruptible(&ts0710->dlci[dlci].
++ close_wait);
++ ts0710_reset_dlci(dlci);
++ }
++ }
++ }
++}
++
++int ts0710_open_channel(__u8 dlci)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int try;
++ int retval;
++ unsigned long t;
++
++ retval = -ENODEV;
++ if (dlci == 0) { // control channel
++ if ((ts0710->dlci[0].state == CONNECTED)
++ || (ts0710->dlci[0].state == FLOW_STOPPED)) {
++ return 0;
++ } else if (ts0710->dlci[0].state == CONNECTING) {
++ /* Reentry */
++ TS0710_PRINTK
++ ("MUX DLCI: 0, reentry to open DLCI 0, pid: %d, %s !\n",
++ current->pid, current->comm);
++ try = 11;
++ while (try--) {
++ t = jiffies;
++ interruptible_sleep_on_timeout(&ts0710->dlci[0].
++ open_wait,
++ TS0710MUX_TIME_OUT);
++ if ((ts0710->dlci[0].state == CONNECTED)
++ || (ts0710->dlci[0].state ==
++ FLOW_STOPPED)) {
++ retval = 0;
++ break;
++ } else if (ts0710->dlci[0].state == REJECTED) {
++ retval = -EREJECTED;
++ break;
++ } else if (ts0710->dlci[0].state ==
++ DISCONNECTED) {
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Wait for connecting got signal!\n",
++ dlci);
++ retval = -EAGAIN;
++ break;
++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Wait for connecting timeout!\n",
++ dlci);
++ continue;
++ } else if (ts0710->dlci[0].state == CONNECTING) {
++ continue;
++ }
++ }
++
++ if (ts0710->dlci[0].state == CONNECTING) {
++ ts0710->dlci[0].state = DISCONNECTED;
++ }
++ } else if ((ts0710->dlci[0].state != DISCONNECTED)
++ && (ts0710->dlci[0].state != REJECTED)) {
++ TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci);
++ return retval;
++ } else {
++ ts0710->initiator = 1;
++ ts0710->dlci[0].state = CONNECTING;
++ ts0710->dlci[0].initiator = 1;
++ try = 10;
++ while (try--) {
++ t = jiffies;
++ send_sabm(ts0710, 0);
++ interruptible_sleep_on_timeout(&ts0710->dlci[0].
++ open_wait,
++ TS0710MUX_TIME_OUT);
++ if ((ts0710->dlci[0].state == CONNECTED)
++ || (ts0710->dlci[0].state ==
++ FLOW_STOPPED)) {
++ retval = 0;
++ break;
++ } else if (ts0710->dlci[0].state == REJECTED) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM got rejected!\n",
++ dlci);
++ retval = -EREJECTED;
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM got signal!\n",
++ dlci);
++ retval = -EAGAIN;
++ break;
++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM timeout!\n",
++ dlci);
++ continue;
++ }
++ }
++
++ if (ts0710->dlci[0].state == CONNECTING) {
++ ts0710->dlci[0].state = DISCONNECTED;
++ }
++ wake_up_interruptible(&ts0710->dlci[0].open_wait);
++ }
++ } else { // other channel
++ if ((ts0710->dlci[0].state != CONNECTED)
++ && (ts0710->dlci[0].state != FLOW_STOPPED)) {
++ return retval;
++ } else if ((ts0710->dlci[dlci].state == CONNECTED)
++ || (ts0710->dlci[dlci].state == FLOW_STOPPED)) {
++ return 0;
++ } else if ((ts0710->dlci[dlci].state == NEGOTIATING)
++ || (ts0710->dlci[dlci].state == CONNECTING)) {
++ /* Reentry */
++ try = 8;
++ while (try--) {
++ t = jiffies;
++ interruptible_sleep_on_timeout(&ts0710->
++ dlci[dlci].
++ open_wait,
++ TS0710MUX_TIME_OUT);
++ if ((ts0710->dlci[dlci].state == CONNECTED)
++ || (ts0710->dlci[dlci].state ==
++ FLOW_STOPPED)) {
++ retval = 0;
++ break;
++ } else if (ts0710->dlci[dlci].state == REJECTED) {
++ retval = -EREJECTED;
++ break;
++ } else if (ts0710->dlci[dlci].state ==
++ DISCONNECTED) {
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Wait for connecting got signal!\n",
++ dlci);
++ retval = -EAGAIN;
++ break;
++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Wait for connecting timeout!\n",
++ dlci);
++ continue;
++ } else
++ if ((ts0710->dlci[dlci].state ==
++ NEGOTIATING)
++ || (ts0710->dlci[dlci].state ==
++ CONNECTING)) {
++ continue;
++ }
++ }
++
++ if ((ts0710->dlci[dlci].state == NEGOTIATING)
++ || (ts0710->dlci[dlci].state == CONNECTING)) {
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ }
++ } else if ((ts0710->dlci[dlci].state != DISCONNECTED)
++ && (ts0710->dlci[dlci].state != REJECTED)) {
++ TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci);
++ return retval;
++ } else {
++ ts0710->dlci[dlci].state = NEGOTIATING;
++ ts0710->dlci[dlci].initiator = 1;
++ try = 3;
++ while (try--) {
++ t = jiffies;
++ send_pn_msg(ts0710, 7, ts0710->dlci[dlci].mtu,
++ 0, 0, dlci, 1);
++ interruptible_sleep_on_timeout(&ts0710->
++ dlci[dlci].
++ open_wait,
++ TS0710MUX_TIME_OUT);
++ if (ts0710->dlci[dlci].state == CONNECTING) {
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send pn_msg got signal!\n",
++ dlci);
++ retval = -EAGAIN;
++ break;
++ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send pn_msg timeout!\n",
++ dlci);
++ continue;
++ }
++ }
++
++ if (ts0710->dlci[dlci].state == CONNECTING) {
++ try = 3;
++ while (try--) {
++ t = jiffies;
++ send_sabm(ts0710, dlci);
++ interruptible_sleep_on_timeout(&ts0710->
++ dlci
++ [dlci].
++ open_wait,
++ TS0710MUX_TIME_OUT);
++ if ((ts0710->dlci[dlci].state ==
++ CONNECTED)
++ || (ts0710->dlci[dlci].state ==
++ FLOW_STOPPED)) {
++ retval = 0;
++ break;
++ } else if (ts0710->dlci[dlci].state ==
++ REJECTED) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM got rejected!\n",
++ dlci);
++ retval = -EREJECTED;
++ break;
++ } else if (signal_pending(current)) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM got signal!\n",
++ dlci);
++ retval = -EAGAIN;
++ break;
++ } else if ((jiffies - t) >=
++ TS0710MUX_TIME_OUT) {
++ TS0710_PRINTK
++ ("MUX DLCI:%d Send SABM timeout!\n",
++ dlci);
++ continue;
++ }
++ }
++ }
++
++ if ((ts0710->dlci[dlci].state == NEGOTIATING)
++ || (ts0710->dlci[dlci].state == CONNECTING)) {
++ ts0710->dlci[dlci].state = DISCONNECTED;
++ }
++ wake_up_interruptible(&ts0710->dlci[dlci].open_wait);
++ }
++ }
++ return retval;
++}
++
++static int ts0710_exec_test_cmd(void)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ __u8 *f_buf; /* Frame buffer */
++ __u8 *d_buf; /* Data buffer */
++ int retval = -EFAULT;
++ int j;
++ unsigned long t;
++
++ if (ts0710->be_testing) {
++ /* Reentry */
++ t = jiffies;
++ interruptible_sleep_on_timeout(&ts0710->test_wait,
++ 3 * TS0710MUX_TIME_OUT);
++ if (ts0710->be_testing == 0) {
++ if (ts0710->test_errs == 0) {
++ retval = 0;
++ } else {
++ retval = -EFAULT;
++ }
++ } else if (signal_pending(current)) {
++ TS0710_DEBUG
++ ("Wait for Test_cmd response got signal!\n");
++ retval = -EAGAIN;
++ } else if ((jiffies - t) >= 3 * TS0710MUX_TIME_OUT) {
++ TS0710_DEBUG("Wait for Test_cmd response timeout!\n");
++ retval = -EFAULT;
++ }
++ } else {
++ ts0710->be_testing = 1; /* Set the flag */
++
++ f_buf = (__u8 *) kmalloc(TEST_PATTERN_SIZE + 32, GFP_KERNEL);
++ d_buf = (__u8 *) kmalloc(TEST_PATTERN_SIZE + 32, GFP_KERNEL);
++ if ((!f_buf) || (!d_buf)) {
++ if (f_buf) {
++ kfree(f_buf);
++ }
++ if (d_buf) {
++ kfree(d_buf);
++ }
++
++ ts0710->be_testing = 0; /* Clear the flag */
++ ts0710->test_errs = TEST_PATTERN_SIZE;
++ wake_up_interruptible(&ts0710->test_wait);
++ return -ENOMEM;
++ }
++
++ for (j = 0; j < TEST_PATTERN_SIZE; j++) {
++ d_buf[j] = j & 0xFF;
++ }
++
++ t = jiffies;
++ ts0710_test_msg(ts0710, d_buf, TEST_PATTERN_SIZE, MCC_CMD,
++ f_buf);
++ interruptible_sleep_on_timeout(&ts0710->test_wait,
++ 2 * TS0710MUX_TIME_OUT);
++ if (ts0710->be_testing == 0) {
++ if (ts0710->test_errs == 0) {
++ retval = 0;
++ } else {
++ retval = -EFAULT;
++ }
++ } else if (signal_pending(current)) {
++ TS0710_DEBUG("Send Test_cmd got signal!\n");
++ retval = -EAGAIN;
++ } else if ((jiffies - t) >= 2 * TS0710MUX_TIME_OUT) {
++ TS0710_DEBUG("Send Test_cmd timeout!\n");
++ ts0710->test_errs = TEST_PATTERN_SIZE;
++ retval = -EFAULT;
++ }
++
++ ts0710->be_testing = 0; /* Clear the flag */
++ wake_up_interruptible(&ts0710->test_wait);
++
++ /* Release buffer */
++ if (f_buf) {
++ kfree(f_buf);
++ }
++ if (d_buf) {
++ kfree(d_buf);
++ }
++ }
++
++ return retval;
++}
++
++static void mux_sched_send(void)
++{
++
++#ifdef USB_FOR_MUX
++ schedule_work(&send_tqueue);
++#else
++ if (!tq_serial_for_mux) {
++ TS0710_PRINTK("MUX Error: %s: tq_serial_for_mux == 0\n",
++ __FUNCTION__);
++ return;
++ }
++ schedule_work(&send_tqueue);
++ mark_bh(SERIAL_BH);
++#endif
++
++}
++
++/****************************
++ * TTY driver routines
++*****************************/
++
++static void mux_close(struct tty_struct *tty, struct file *filp)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int line;
++ __u8 dlci;
++ __u8 cmdtty;
++ __u8 datatty;
++
++ UNUSED_PARAM(filp);
++
++ if (!tty) {
++ return;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ return;
++ }
++ if (mux_tty[line] > 0)
++ mux_tty[line]--;
++
++ dlci = tty2dlci[line];
++ cmdtty = dlci2tty[dlci].cmdtty;
++ datatty = dlci2tty[dlci].datatty;
++ if ((mux_tty[cmdtty] == 0) && (mux_tty[datatty] == 0)) {
++ if (dlci == 1) {
++ ts0710_close_channel(0);
++ TS0710_PRINTK
++ ("MUX mux_close: tapisrv might be down!!! Close DLCI 1\n");
++ TS0710_SIG2APLOGD();
++ }
++ ts0710_close_channel(dlci);
++ }
++
++ if (mux_tty[line] == 0) {
++ if ((mux_send_info_flags[line])
++ && (mux_send_info[line])
++ /*&& (mux_send_info[line]->filled == 0) */
++ ) {
++ mux_send_info_flags[line] = 0;
++ kfree(mux_send_info[line]);
++ mux_send_info[line] = 0;
++ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line);
++ }
++
++ if ((mux_recv_info_flags[line])
++ && (mux_recv_info[line])
++ && (mux_recv_info[line]->total == 0)) {
++ mux_recv_info_flags[line] = 0;
++ free_mux_recv_struct(mux_recv_info[line]);
++ mux_recv_info[line] = 0;
++ TS0710_DEBUG("Free mux_recv_info for /dev/mux%d", line);
++ }
++
++ ts0710_flow_on(dlci, ts0710);
++ schedule_work(&post_recv_tqueue);
++
++ wake_up_interruptible(&tty->read_wait);
++ wake_up_interruptible(&tty->write_wait);
++ tty->packet = 0;
++ }
++}
++
++static void mux_throttle(struct tty_struct *tty)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int line;
++ int i;
++ __u8 dlci;
++
++ if (!tty) {
++ return;
++ }
++
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ return;
++ }
++
++ TS0710_DEBUG("Enter into %s, minor number is: %d\n", __FUNCTION__,
++ line);
++
++ dlci = tty2dlci[line];
++ if ((ts0710->dlci[0].state != CONNECTED)
++ && (ts0710->dlci[0].state != FLOW_STOPPED)) {
++ return;
++ } else if ((ts0710->dlci[dlci].state != CONNECTED)
++ && (ts0710->dlci[dlci].state != FLOW_STOPPED)) {
++ return;
++ }
++
++ if (ts0710->dlci[dlci].flow_control) {
++ return;
++ }
++
++ for (i = 0; i < 3; i++) {
++ if (ts0710_msc_msg
++ (ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, dlci) < 0) {
++ continue;
++ } else {
++ TS0710_LOG("MUX Send Flow off on dlci %d\n", dlci);
++ ts0710->dlci[dlci].flow_control = 1;
++ break;
++ }
++ }
++}
++
++static void mux_unthrottle(struct tty_struct *tty)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int line;
++ __u8 dlci;
++ mux_recv_struct *recv_info;
++
++ if (!tty) {
++ return;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ return;
++ }
++
++ if ((!mux_recv_info_flags[line]) || (!mux_recv_info[line])) {
++ return;
++ }
++
++ TS0710_DEBUG("Enter into %s, minor number is: %d\n", __FUNCTION__,
++ line);
++
++ recv_info = mux_recv_info[line];
++ dlci = tty2dlci[line];
++
++ if (recv_info->total) {
++ recv_info->post_unthrottle = 1;
++ schedule_work(&post_recv_tqueue);
++ } else {
++ ts0710_flow_on(dlci, ts0710);
++ }
++}
++
++static int mux_chars_in_buffer(struct tty_struct *tty)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int retval;
++ int line;
++ __u8 dlci;
++ mux_send_struct *send_info;
++
++ retval = TS0710MUX_MAX_CHARS_IN_BUF;
++ if (!tty) {
++ goto out;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ goto out;
++ }
++
++ dlci = tty2dlci[line];
++ if (ts0710->dlci[0].state == FLOW_STOPPED) {
++ TS0710_DEBUG
++ ("Flow stopped on all channels, returning MAX chars in buffer\n");
++ goto out;
++ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped, returning MAX chars in buffer\n");
++ goto out;
++ } else if (ts0710->dlci[dlci].state != CONNECTED) {
++ TS0710_DEBUG("DLCI %d not connected\n", dlci);
++ goto out;
++ }
++
++ if (!(mux_send_info_flags[line])) {
++ goto out;
++ }
++ send_info = mux_send_info[line];
++ if (!send_info) {
++ goto out;
++ }
++ if (send_info->filled) {
++ goto out;
++ }
++
++ retval = 0;
++
++ out:
++ return retval;
++}
++
++static int mux_chars_in_serial_buffer(struct tty_struct *tty)
++{
++ UNUSED_PARAM(tty);
++
++ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) {
++ TS0710_PRINTK
++ ("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n",
++ __FUNCTION__);
++
++#ifndef USB_FOR_MUX
++ TS0710_PRINTK
++ ("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n",
++ __FUNCTION__);
++ TS0710_SIG2APLOGD();
++#endif
++
++ return 0;
++ }
++ return COMM_FOR_MUX_DRIVER->chars_in_buffer(COMM_FOR_MUX_TTY);
++}
++
++static int mux_write(struct tty_struct *tty,
++ const unsigned char *buf, int count)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int line;
++ __u8 dlci;
++ mux_send_struct *send_info;
++ __u8 *d_buf;
++ __u16 c;
++ __u8 post_recv;
++
++ if (count <= 0) {
++ return 0;
++ }
++
++ if (!tty) {
++ return 0;
++ }
++
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS))
++ return -ENODEV;
++
++ dlci = tty2dlci[line];
++ if (ts0710->dlci[0].state == FLOW_STOPPED) {
++ TS0710_DEBUG
++ ("Flow stopped on all channels, returning zero /dev/mux%d\n",
++ line);
++ return 0;
++ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped, returning zero /dev/mux%d\n", line);
++ return 0;
++ } else if (ts0710->dlci[dlci].state == CONNECTED) {
++
++ if (!(mux_send_info_flags[line])) {
++ TS0710_PRINTK
++ ("MUX Error: mux_write: mux_send_info_flags[%d] == 0\n",
++ line);
++ return -ENODEV;
++ }
++ send_info = mux_send_info[line];
++ if (!send_info) {
++ TS0710_PRINTK
++ ("MUX Error: mux_write: mux_send_info[%d] == 0\n",
++ line);
++ return -ENODEV;
++ }
++
++ c = min(count, (ts0710->dlci[dlci].mtu - 1));
++ if (c <= 0) {
++ return 0;
++ }
++
++ if (test_and_set_bit(BUF_BUSY, &send_info->flags))
++ return 0;
++
++ if (send_info->filled) {
++ clear_bit(BUF_BUSY, &send_info->flags);
++ return 0;
++ }
++
++ d_buf = ((__u8 *) send_info->buf) + TS0710MUX_SEND_BUF_OFFSET;
++ memcpy(&d_buf[1], buf, c);
++
++ TS0710_DEBUG("Prepare to send %d bytes from /dev/mux%d", c,
++ line);
++ if (iscmdtty[line]) {
++ TS0710_DEBUGSTR(&d_buf[1], c);
++ TS0710_DEBUG("CMDTAG");
++ d_buf[0] = CMDTAG;
++ } else {
++ TS0710_DEBUG("DATATAG");
++ d_buf[0] = DATATAG;
++ }
++
++ TS0710_DEBUGHEX(d_buf, c + 1);
++
++ send_info->frame = d_buf;
++ queue_uih(send_info, c + 1, ts0710, dlci);
++ send_info->filled = 1;
++ clear_bit(BUF_BUSY, &send_info->flags);
++
++ post_recv = 0;
++ if (dlci == TS0710MUX_GPRS1_DLCI) {
++ if (add_count
++ (TS0710MUX_GPRS1_SEND_COUNT_IDX, c) < 0) {
++ post_recv_count_flag = 1;
++ post_recv = 1;
++ mux_data_count2[TS0710MUX_GPRS1_SEND_COUNT_IDX]
++ += c;
++ }
++ } else if (dlci == TS0710MUX_GPRS2_DLCI) {
++ if (add_count
++ (TS0710MUX_GPRS2_SEND_COUNT_IDX, c) < 0) {
++ post_recv_count_flag = 1;
++ post_recv = 1;
++ mux_data_count2[TS0710MUX_GPRS2_SEND_COUNT_IDX]
++ += c;
++ }
++ }
++
++ if (post_recv)
++ schedule_work(&post_recv_tqueue);
++
++ if (mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY) == 0) {
++ /* Sending bottom half should be
++ run after return from this function */
++ mux_sched_send();
++ }
++ return c;
++ } else {
++ TS0710_PRINTK("MUX mux_write: DLCI %d not connected\n", dlci);
++ return -EDISCONNECTED;
++ }
++}
++
++static int mux_write_room(struct tty_struct *tty)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int retval;
++ int line;
++ __u8 dlci;
++ mux_send_struct *send_info;
++
++ retval = 0;
++ if (!tty) {
++ goto out;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ goto out;
++ }
++
++ dlci = tty2dlci[line];
++ if (ts0710->dlci[0].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped on all channels, returning ZERO\n");
++ goto out;
++ } else if (ts0710->dlci[dlci].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped, returning ZERO\n");
++ goto out;
++ } else if (ts0710->dlci[dlci].state != CONNECTED) {
++ TS0710_DEBUG("DLCI %d not connected\n", dlci);
++ goto out;
++ }
++
++ if (!(mux_send_info_flags[line])) {
++ goto out;
++ }
++ send_info = mux_send_info[line];
++ if (!send_info) {
++ goto out;
++ }
++ if (send_info->filled) {
++ goto out;
++ }
++
++ retval = ts0710->dlci[dlci].mtu - 1;
++
++ out:
++ return retval;
++}
++
++static int mux_ioctl(struct tty_struct *tty, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int line;
++ __u8 dlci;
++
++ UNUSED_PARAM(file);
++ UNUSED_PARAM(arg);
++
++ if (!tty) {
++ return -EIO;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ return -ENODEV;
++ }
++
++ dlci = tty2dlci[line];
++ switch (cmd) {
++ case TS0710MUX_IO_MSC_HANGUP:
++ if (ts0710_msc_msg(ts0710, EA | RTR | DV, MCC_CMD, dlci) < 0) {
++ return -EAGAIN;
++ } else {
++ return 0;
++ }
++
++ case TS0710MUX_IO_TEST_CMD:
++ return ts0710_exec_test_cmd();
++/*
++ case TS0710MUX_IO_DLCI_FC_ON:
++ if( line == 0 ) {
++ break;
++ }
++ if( ts0710_msc_msg(ts0710, EA | RTC | RTR | DV, MCC_CMD, (__u8)line) < 0) {
++ return -EAGAIN;
++ } else {
++ return 0;
++ }
++
++ case TS0710MUX_IO_DLCI_FC_OFF:
++ if( line == 0 ) {
++ break;
++ }
++ if( ts0710_msc_msg(ts0710, EA | FC | RTC | RTR | DV, MCC_CMD, (__u8)line) < 0) {
++ return -EAGAIN;
++ } else {
++ return 0;
++ }
++
++ case TS0710MUX_IO_FC_ON:
++ if( line != 0 ) {
++ break;
++ }
++ if( ts0710_fcon_msg(ts0710, MCC_CMD) < 0) {
++ return -EAGAIN;
++ } else {
++ return 0;
++ }
++
++ case TS0710MUX_IO_FC_OFF:
++ if( line != 0 ) {
++ break;
++ }
++ if( ts0710_fcoff_msg(ts0710, MCC_CMD) < 0) {
++ return -EAGAIN;
++ } else {
++ return 0;
++ }
++*/
++ default:
++ break;
++ }
++ return -ENOIOCTLCMD;
++}
++
++static void mux_flush_buffer(struct tty_struct *tty)
++{
++ int line;
++
++ if (!tty) {
++ return;
++ }
++
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ return;
++ }
++
++ TS0710_PRINTK("MUX %s: line is:%d\n", __FUNCTION__, line);
++
++ if ((mux_send_info_flags[line])
++ && (mux_send_info[line])
++ && (mux_send_info[line]->filled)) {
++
++ mux_send_info[line]->filled = 0;
++ }
++
++ wake_up_interruptible(&tty->write_wait);
++#ifdef SERIAL_HAVE_POLL_WAIT
++ wake_up_interruptible(&tty->poll_wait);
++#endif
++ if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
++ tty->ldisc.write_wakeup) {
++ (tty->ldisc.write_wakeup) (tty);
++ }
++
++/*
++ if( (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0) ) {
++ TS0710_PRINTK("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__);
++
++#ifndef USB_FOR_MUX
++ TS0710_PRINTK("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__);
++ TS0710_SIG2APLOGD();
++#endif
++
++ return;
++ }
++ return COMM_FOR_MUX_DRIVER->flush_buffer(COMM_FOR_MUX_TTY);
++*/
++}
++
++static int mux_open(struct tty_struct *tty, struct file *filp)
++{
++ int retval;
++ int line;
++ __u8 dlci;
++ __u8 cmdtty;
++ __u8 datatty;
++ mux_send_struct *send_info;
++ mux_recv_struct *recv_info;
++
++ UNUSED_PARAM(filp);
++
++ retval = -ENODEV;
++ if ((COMM_FOR_MUX_DRIVER == NULL) || (COMM_FOR_MUX_TTY == NULL)) {
++
++#ifdef USB_FOR_MUX
++ TS0710_PRINTK("MUX: please install and open IPC-USB first\n");
++#else
++ TS0710_PRINTK("MUX: please install and open ttyS0 first\n");
++#endif
++
++ goto out;
++ }
++
++ if (!tty) {
++ goto out;
++ }
++ line = tty->index;
++ if ((line < 0) || (line >= NR_MUXS)) {
++ goto out;
++ }
++#ifdef TS0710SERVER
++ /* do nothing as a server */
++ mux_tty[line]++;
++ retval = 0;
++#else
++ mux_tty[line]++;
++ dlci = tty2dlci[line];
++
++/* if( dlci == 1 ) { */
++ /* Open server channel 0 first */
++ if ((retval = ts0710_open_channel(0)) != 0) {
++ TS0710_PRINTK("MUX: Can't connect server channel 0!\n");
++ ts0710_init();
++
++ mux_tty[line]--;
++ goto out;
++ }
++/* } */
++
++ /* Allocate memory first. As soon as connection has been established, MUX may receive */
++ if (mux_send_info_flags[line] == 0) {
++ send_info =
++ (mux_send_struct *) kmalloc(sizeof(mux_send_struct),
++ GFP_KERNEL);
++ if (!send_info) {
++ retval = -ENOMEM;
++
++ mux_tty[line]--;
++ goto out;
++ }
++ send_info->length = 0;
++ send_info->flags = 0;
++ send_info->filled = 0;
++ mux_send_info[line] = send_info;
++ mux_send_info_flags[line] = 1;
++ TS0710_DEBUG("Allocate mux_send_info for /dev/mux%d", line);
++ }
++
++ if (mux_recv_info_flags[line] == 0) {
++ recv_info =
++ (mux_recv_struct *) kmalloc(sizeof(mux_recv_struct),
++ GFP_KERNEL);
++ if (!recv_info) {
++ mux_send_info_flags[line] = 0;
++ kfree(mux_send_info[line]);
++ mux_send_info[line] = 0;
++ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line);
++ retval = -ENOMEM;
++
++ mux_tty[line]--;
++ goto out;
++ }
++ recv_info->length = 0;
++ recv_info->total = 0;
++ recv_info->mux_packet = 0;
++ recv_info->next = 0;
++ recv_info->no_tty = line;
++ recv_info->post_unthrottle = 0;
++ mux_recv_info[line] = recv_info;
++ mux_recv_info_flags[line] = 1;
++ TS0710_DEBUG("Allocate mux_recv_info for /dev/mux%d", line);
++ }
++
++ /* Now establish DLCI connection */
++ cmdtty = dlci2tty[dlci].cmdtty;
++ datatty = dlci2tty[dlci].datatty;
++ if ((mux_tty[cmdtty] > 0) || (mux_tty[datatty] > 0)) {
++ if ((retval = ts0710_open_channel(dlci)) != 0) {
++ TS0710_PRINTK("MUX: Can't connected channel %d!\n",
++ dlci);
++ ts0710_reset_dlci(dlci);
++
++ mux_send_info_flags[line] = 0;
++ kfree(mux_send_info[line]);
++ mux_send_info[line] = 0;
++ TS0710_DEBUG("Free mux_send_info for /dev/mux%d", line);
++
++ mux_recv_info_flags[line] = 0;
++ free_mux_recv_struct(mux_recv_info[line]);
++ mux_recv_info[line] = 0;
++ TS0710_DEBUG("Free mux_recv_info for /dev/mux%d", line);
++
++ mux_tty[line]--;
++ goto out;
++ }
++ }
++
++ retval = 0;
++#endif
++ out:
++ return retval;
++}
++
++/* mux dispatcher, call from serial.c receiver_chars() */
++void mux_dispatcher(struct tty_struct *tty)
++{
++ UNUSED_PARAM(tty);
++
++ schedule_work(&receive_tqueue);
++}
++
++/*For BP UART problem Begin*/
++#ifdef TS0710SEQ2
++static int send_ack(ts0710_con * ts0710, __u8 seq_num, __u8 bp_seq1,
++ __u8 bp_seq2)
++#else
++static int send_ack(ts0710_con * ts0710, __u8 seq_num)
++#endif
++{
++ __u8 buf[20];
++ short_frame *ack;
++
++#ifdef TS0710SEQ2
++ static __u16 ack_seq = 0;
++#endif
++
++ ack = (short_frame *) (buf + 1);
++ ack->h.addr.ea = 1;
++ ack->h.addr.cr = ((ts0710->initiator) & 0x1);
++ ack->h.addr.d = 0;
++ ack->h.addr.server_chn = 0;
++ ack->h.control = ACK;
++ ack->h.length.ea = 1;
++
++#ifdef TS0710SEQ2
++ ack->h.length.len = 5;
++ ack->data[0] = seq_num;
++ ack->data[1] = bp_seq1;
++ ack->data[2] = bp_seq2;
++ ack->data[3] = (ack_seq & 0xFF);
++ ack->data[4] = (ack_seq >> 8) & 0xFF;
++ ack_seq++;
++ ack->data[5] = crc_calc((__u8 *) ack, SHORT_CRC_CHECK);
++#else
++ ack->h.length.len = 1;
++ ack->data[0] = seq_num;
++ ack->data[1] = crc_calc((__u8 *) ack, SHORT_CRC_CHECK);
++#endif
++
++ return basic_write(ts0710, buf,
++ (sizeof(short_frame) + FCS_SIZE +
++ ack->h.length.len));
++}
++
++/*For BP UART problem End*/
++
++static void receive_worker(void *private_)
++{
++ struct tty_struct *tty = COMM_FOR_MUX_TTY;
++ int i, count;
++ static unsigned char tbuf[TS0710MUX_MAX_BUF_SIZE];
++ static unsigned char *tbuf_ptr = &tbuf[0];
++ static unsigned char *start_flag = 0;
++ unsigned char *search, *to, *from;
++ short_frame *short_pkt;
++ long_frame *long_pkt;
++ static int framelen = -1;
++
++ /*For BP UART problem Begin */
++ static __u8 expect_seq = 0;
++ __u32 crc_error;
++ __u8 *uih_data_start;
++ __u32 uih_len;
++ /*For BP UART problem End */
++
++ UNUSED_PARAM(private_);
++
++ if (!tty)
++ return;
++
++#ifdef USB_FOR_MUX
++ TS0710_DEBUG("Receive following bytes from IPC-USB");
++#else
++ TS0710_DEBUG("Receive following bytes from UART");
++#endif
++
++ TS0710_DEBUGHEX(cp, count);
++
++ if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) {
++ TS0710_PRINTK
++ ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n");
++ count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf));
++ }
++
++ count = tty_buffer_request_room(tty, count);
++
++ for (i = 0; i < count; i++)
++ tty_insert_flip_char(tty, tbuf_ptr[i], TTY_NORMAL);
++
++ tbuf_ptr += count;
++ search = &tbuf[0];
++
++ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) {
++ schedule_work(&receive_tqueue);
++ return;
++ }
++
++ if ((start_flag != 0) && (framelen != -1)) {
++ if ((tbuf_ptr - start_flag) < framelen) {
++ clear_bit(RECV_RUNNING, &mux_recv_flags);
++ return;
++ }
++ }
++
++ while (1) {
++ if (start_flag == 0) { /* Frame Start Flag not found */
++ framelen = -1;
++ while (search < tbuf_ptr) {
++ if (*search == TS0710_BASIC_FLAG) {
++ start_flag = search;
++ break;
++ }
++#ifdef TS0710LOG
++ else {
++ TS0710_LOG(">S %02x %c\n", *search,
++ *search);
++ }
++#endif
++
++ search++;
++ }
++
++ if (start_flag == 0) {
++ tbuf_ptr = &tbuf[0];
++ break;
++ }
++ } else { /* Frame Start Flag found */
++ /* 1 start flag + 1 address + 1 control + 1 or 2 length + lengths data + 1 FCS + 1 end flag */
++ /* For BP UART problem 1 start flag + 1 seq_num + 1 address + ...... */
++ /*if( (framelen == -1) && ((tbuf_ptr - start_flag) > TS0710_MAX_HDR_SIZE) ) */
++ if ((framelen == -1) && ((tbuf_ptr - start_flag) > (TS0710_MAX_HDR_SIZE + SEQ_FIELD_SIZE))) { /*For BP UART problem */
++ /*short_pkt = (short_frame *) (start_flag + 1); */
++ short_pkt = (short_frame *) (start_flag + ADDRESS_FIELD_OFFSET); /*For BP UART problem */
++ if (short_pkt->h.length.ea == 1) { /* short frame */
++ /*framelen = TS0710_MAX_HDR_SIZE + short_pkt->h.length.len + 1; */
++ framelen = TS0710_MAX_HDR_SIZE + short_pkt->h.length.len + 1 + SEQ_FIELD_SIZE; /*For BP UART problem */
++ } else { /* long frame */
++ /*long_pkt = (long_frame *) (start_flag + 1); */
++ long_pkt = (long_frame *) (start_flag + ADDRESS_FIELD_OFFSET); /*For BP UART problem */
++ /*framelen = TS0710_MAX_HDR_SIZE + GET_LONG_LENGTH( long_pkt->h.length ) + 2; */
++ framelen = TS0710_MAX_HDR_SIZE + GET_LONG_LENGTH(long_pkt->h.length) + 2 + SEQ_FIELD_SIZE; /*For BP UART problem */
++ }
++
++ /*if( framelen > TS0710MUX_MAX_TOTAL_FRAME_SIZE ) { */
++ if (framelen > (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)) { /*For BP UART problem */
++ TS0710_LOGSTR_FRAME(0, start_flag,
++ (tbuf_ptr -
++ start_flag));
++ TS0710_PRINTK
++ ("MUX Error: %s: frame length:%d is bigger than Max total frame size:%d\n",
++ /*__FUNCTION__, framelen, TS0710MUX_MAX_TOTAL_FRAME_SIZE);*/
++ __FUNCTION__, framelen, (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)); /*For BP UART problem */
++ search = start_flag + 1;
++ start_flag = 0;
++ framelen = -1;
++ continue;
++ }
++ }
++
++ if ((framelen != -1)
++ && ((tbuf_ptr - start_flag) >= framelen)) {
++ if (*(start_flag + framelen - 1) == TS0710_BASIC_FLAG) { /* OK, We got one frame */
++
++ /*For BP UART problem Begin */
++ TS0710_LOGSTR_FRAME(0, start_flag,
++ framelen);
++ TS0710_DEBUGHEX(start_flag, framelen);
++
++ short_pkt =
++ (short_frame *) (start_flag +
++ ADDRESS_FIELD_OFFSET);
++ if ((short_pkt->h.length.ea) == 0) {
++ long_pkt =
++ (long_frame *) (start_flag +
++ ADDRESS_FIELD_OFFSET);
++ uih_len =
++ GET_LONG_LENGTH(long_pkt->h.
++ length);
++ uih_data_start =
++ long_pkt->h.data;
++
++ crc_error =
++ crc_check((__u8
++ *) (start_flag +
++ SLIDE_BP_SEQ_OFFSET),
++ LONG_CRC_CHECK +
++ 1,
++ *(uih_data_start +
++ uih_len));
++ } else {
++ uih_len =
++ short_pkt->h.length.len;
++ uih_data_start =
++ short_pkt->data;
++
++ crc_error =
++ crc_check((__u8
++ *) (start_flag +
++ SLIDE_BP_SEQ_OFFSET),
++ SHORT_CRC_CHECK +
++ 1,
++ *(uih_data_start +
++ uih_len));
++ }
++
++ if (!crc_error) {
++ if (expect_seq ==
++ *(start_flag +
++ SLIDE_BP_SEQ_OFFSET)) {
++ expect_seq++;
++ if (expect_seq >= 4) {
++ expect_seq = 0;
++ }
++#ifdef TS0710SEQ2
++ send_ack
++ (&ts0710_connection,
++ expect_seq,
++ *(start_flag +
++ FIRST_BP_SEQ_OFFSET),
++ *(start_flag +
++ SECOND_BP_SEQ_OFFSET));
++#else
++ send_ack
++ (&ts0710_connection,
++ expect_seq);
++#endif
++
++ ts0710_recv_data
++ (&ts0710_connection,
++ start_flag +
++ ADDRESS_FIELD_OFFSET,
++ framelen - 2 -
++ SEQ_FIELD_SIZE);
++ } else {
++
++#ifdef TS0710DEBUG
++ if (*
++ (start_flag +
++ SLIDE_BP_SEQ_OFFSET)
++ != 0x9F) {
++#endif
++
++ TS0710_LOG
++ ("MUX sequence number %d is not expected %d, discard data!\n",
++ *
++ (start_flag
++ +
++ SLIDE_BP_SEQ_OFFSET),
++ expect_seq);
++
++#ifdef TS0710SEQ2
++ send_ack
++ (&ts0710_connection,
++ expect_seq,
++ *
++ (start_flag
++ +
++ FIRST_BP_SEQ_OFFSET),
++ *
++ (start_flag
++ +
++ SECOND_BP_SEQ_OFFSET));
++#else
++ send_ack
++ (&ts0710_connection,
++ expect_seq);
++#endif
++
++#ifdef TS0710DEBUG
++ } else {
++ *(uih_data_start
++ + uih_len) =
++ 0;
++ TS0710_PRINTK
++ ("MUX bp log: %s\n",
++ uih_data_start);
++ }
++#endif
++
++ }
++ } else { /* crc_error */
++ search = start_flag + 1;
++ start_flag = 0;
++ framelen = -1;
++ continue;
++ } /*End if(!crc_error) */
++
++ /*For BP UART problem End */
++
++/*For BP UART problem
++ TS0710_LOGSTR_FRAME(0, start_flag, framelen);
++ TS0710_DEBUGHEX(start_flag, framelen);
++ ts0710_recv_data(&ts0710_connection, start_flag + 1, framelen - 2);
++*/
++ search = start_flag + framelen;
++ } else {
++ TS0710_LOGSTR_FRAME(0, start_flag,
++ framelen);
++ TS0710_DEBUGHEX(start_flag, framelen);
++ TS0710_PRINTK
++ ("MUX: Lost synchronization!\n");
++ search = start_flag + 1;
++ }
++
++ start_flag = 0;
++ framelen = -1;
++ continue;
++ }
++
++ if (start_flag != &tbuf[0]) {
++ to = tbuf;
++ from = start_flag;
++ count = tbuf_ptr - start_flag;
++ while (count--) {
++ *to++ = *from++;
++ }
++
++ tbuf_ptr -= (start_flag - tbuf);
++ start_flag = tbuf;
++ }
++ break;
++ } /* End Frame Start Flag found */
++ } /* End while(1) */
++
++ clear_bit(RECV_RUNNING, &mux_recv_flags);
++}
++
++static void post_recv_worker(void *private_)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ int tty_idx;
++ struct tty_struct *tty;
++ __u8 post_recv;
++ __u8 flow_control;
++ __u8 dlci;
++ mux_recv_struct *recv_info, *recv_info2, *post_recv_q;
++ int recv_room;
++ mux_recv_packet *recv_packet, *recv_packet2;
++ __u8 j;
++
++ UNUSED_PARAM(private_);
++
++ if (test_and_set_bit(RECV_RUNNING, &mux_recv_flags)) {
++ schedule_work(&post_recv_tqueue);
++ return;
++ }
++
++ TS0710_DEBUG("Enter into post_recv_worker");
++
++ post_recv = 0;
++ if (!mux_recv_queue) {
++ goto out;
++ }
++
++ post_recv_q = NULL;
++ recv_info2 = mux_recv_queue;
++ while ((recv_info = recv_info2)) {
++ recv_info2 = recv_info->next;
++
++ if (!(recv_info->total)) {
++ TS0710_PRINTK
++ ("MUX Error: %s: Should not get here, recv_info->total == 0 \n",
++ __FUNCTION__);
++ continue;
++ }
++
++ tty_idx = recv_info->no_tty;
++ dlci = tty2dlci[tty_idx];
++ tty = mux_table[tty_idx];
++ if ((!mux_tty[tty_idx]) || (!tty)) {
++ TS0710_PRINTK
++ ("MUX: No application waiting for, free recv_info! tty_idx:%d\n",
++ tty_idx);
++ mux_recv_info_flags[tty_idx] = 0;
++ free_mux_recv_struct(mux_recv_info[tty_idx]);
++ mux_recv_info[tty_idx] = 0;
++ ts0710_flow_on(dlci, ts0710);
++ continue;
++ }
++
++ TS0710_DEBUG("/dev/mux%d recv_info->total is: %d", tty_idx,
++ recv_info->total);
++
++ if (test_bit(TTY_THROTTLED, &tty->flags)) {
++ add_post_recv_queue(&post_recv_q, recv_info);
++ continue;
++ } else if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
++ post_recv = 1;
++ add_post_recv_queue(&post_recv_q, recv_info);
++ continue;
++ }
++
++ flow_control = 0;
++ recv_packet2 = recv_info->mux_packet;
++ while (recv_info->total) {
++ recv_room = 65535;
++ if (tty->receive_room)
++ recv_room = tty->receive_room;
++
++ if (recv_info->length) {
++ if (recv_room < recv_info->length) {
++ flow_control = 1;
++ break;
++ }
++
++ /* Put queued data into read buffer of tty */
++ TS0710_DEBUG
++ ("Put queued recv data into read buffer of /dev/mux%d",
++ tty_idx);
++ TS0710_DEBUGHEX(recv_info->data,
++ recv_info->length);
++ (tty->ldisc.receive_buf) (tty, recv_info->data,
++ NULL,
++ recv_info->length);
++ recv_info->total -= recv_info->length;
++ recv_info->length = 0;
++ } else { /* recv_info->length == 0 */
++ if ((recv_packet = recv_packet2)) {
++ recv_packet2 = recv_packet->next;
++
++ if (recv_room < recv_packet->length) {
++ flow_control = 1;
++ recv_info->mux_packet =
++ recv_packet;
++ break;
++ }
++
++ /* Put queued data into read buffer of tty */
++ TS0710_DEBUG
++ ("Put queued recv data into read buffer of /dev/mux%d",
++ tty_idx);
++ TS0710_DEBUGHEX(recv_packet->data,
++ recv_packet->length);
++ (tty->ldisc.receive_buf) (tty,
++ recv_packet->
++ data, NULL,
++ recv_packet->
++ length);
++ recv_info->total -= recv_packet->length;
++ free_mux_recv_packet(recv_packet);
++ } else {
++ TS0710_PRINTK
++ ("MUX Error: %s: Should not get here, recv_info->total is:%u \n",
++ __FUNCTION__, recv_info->total);
++ }
++ } /* End recv_info->length == 0 */
++ } /* End while( recv_info->total ) */
++
++ if (!(recv_info->total)) {
++ /* Important clear */
++ recv_info->mux_packet = 0;
++
++ if (recv_info->post_unthrottle) {
++ /* Do something for post_unthrottle */
++ ts0710_flow_on(dlci, ts0710);
++ recv_info->post_unthrottle = 0;
++ }
++ } else {
++ add_post_recv_queue(&post_recv_q, recv_info);
++
++ if (flow_control) {
++ /* Do something for flow control */
++ if (recv_info->post_unthrottle) {
++ set_bit(TTY_THROTTLED, &tty->flags);
++ recv_info->post_unthrottle = 0;
++ } else {
++ ts0710_flow_off(tty, dlci, ts0710);
++ }
++ } /* End if( flow_control ) */
++ }
++ } /* End while( (recv_info = recv_info2) ) */
++
++ mux_recv_queue = post_recv_q;
++
++ out:
++ if (post_recv_count_flag) {
++ post_recv_count_flag = 0;
++ for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) {
++ if (mux_data_count2[j] > 0) {
++ if (add_count(j, mux_data_count2[j]) == 0) {
++ mux_data_count2[j] = 0;
++ } else {
++ post_recv_count_flag = 1;
++ post_recv = 1;
++ }
++ }
++ } /* End for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) */
++ }
++ /* End if( post_recv_count_flag ) */
++ if (post_recv)
++ schedule_work(&post_recv_tqueue);
++ clear_bit(RECV_RUNNING, &mux_recv_flags);
++}
++
++/* mux sender, call from serial.c transmit_chars() */
++void mux_sender(void)
++{
++ mux_send_struct *send_info;
++ int chars;
++ __u8 idx;
++
++ chars = mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY);
++ if (!chars) {
++ /* chars == 0 */
++ TS0710_LOG("<[]\n");
++ mux_sched_send();
++ return;
++ }
++
++ idx = mux_send_info_idx;
++ if ((idx < NR_MUXS) && (mux_send_info_flags[idx])) {
++ send_info = mux_send_info[idx];
++ if ((send_info)
++ && (send_info->filled)
++ && (send_info->length <=
++ (TS0710MUX_SERIAL_BUF_SIZE - chars))) {
++
++ mux_sched_send();
++ }
++ }
++}
++
++static void send_worker(void *private_)
++{
++ ts0710_con *ts0710 = &ts0710_connection;
++ __u8 j;
++ mux_send_struct *send_info;
++ int chars;
++ struct tty_struct *tty;
++ __u8 dlci;
++
++ UNUSED_PARAM(private_);
++
++ TS0710_DEBUG("Enter into send_worker");
++
++ mux_send_info_idx = NR_MUXS;
++
++ if (ts0710->dlci[0].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped on all channels\n");
++ return;
++ }
++
++ for (j = 0; j < NR_MUXS; j++) {
++
++ if (!(mux_send_info_flags[j])) {
++ continue;
++ }
++
++ send_info = mux_send_info[j];
++ if (!send_info) {
++ continue;
++ }
++
++ if (!(send_info->filled)) {
++ continue;
++ }
++
++ dlci = tty2dlci[j];
++ if (ts0710->dlci[dlci].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped on channel DLCI: %d\n",
++ dlci);
++ continue;
++ } else if (ts0710->dlci[dlci].state != CONNECTED) {
++ TS0710_DEBUG("DLCI %d not connected\n", dlci);
++ send_info->filled = 0;
++ continue;
++ }
++
++ chars = mux_chars_in_serial_buffer(COMM_FOR_MUX_TTY);
++ if (send_info->length <= (TS0710MUX_SERIAL_BUF_SIZE - chars)) {
++ TS0710_DEBUG("Send queued UIH for /dev/mux%d", j);
++ basic_write(ts0710, (__u8 *) send_info->frame,
++ send_info->length);
++ send_info->length = 0;
++ send_info->filled = 0;
++ } else {
++ mux_send_info_idx = j;
++ break;
++ }
++ } /* End for() loop */
++
++ /* Queue UIH data to be transmitted */
++ for (j = 0; j < NR_MUXS; j++) {
++
++ if (!(mux_send_info_flags[j])) {
++ continue;
++ }
++
++ send_info = mux_send_info[j];
++ if (!send_info) {
++ continue;
++ }
++
++ if (send_info->filled) {
++ continue;
++ }
++
++ /* Now queue UIH data to send_info->buf */
++
++ if (!mux_tty[j]) {
++ continue;
++ }
++
++ tty = mux_table[j];
++ if (!tty) {
++ continue;
++ }
++
++ dlci = tty2dlci[j];
++ if (ts0710->dlci[dlci].state == FLOW_STOPPED) {
++ TS0710_DEBUG("Flow stopped on channel DLCI: %d\n",
++ dlci);
++ continue;
++ } else if (ts0710->dlci[dlci].state != CONNECTED) {
++ TS0710_DEBUG("DLCI %d not connected\n", dlci);
++ continue;
++ }
++
++ if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP))
++ && tty->ldisc.write_wakeup) {
++ (tty->ldisc.write_wakeup) (tty);
++ }
++ wake_up_interruptible(&tty->write_wait);
++
++#ifdef SERIAL_HAVE_POLL_WAIT
++ wake_up_interruptible(&tty->poll_wait);
++#endif
++
++ if (send_info->filled) {
++ if (j < mux_send_info_idx) {
++ mux_send_info_idx = j;
++ }
++ }
++ } /* End for() loop */
++}
++
++static int get_count(__u8 idx)
++{
++ int ret;
++
++ if (idx > TS0710MUX_COUNT_MAX_IDX) {
++ TS0710_PRINTK("MUX get_count: invalid idx: %d!\n", idx);
++ return -1;
++ }
++
++ down(&mux_data_count_mutex[idx]);
++ ret = mux_data_count[idx];
++ up(&mux_data_count_mutex[idx]);
++
++ return ret;
++}
++
++static int set_count(__u8 idx, int count)
++{
++ if (idx > TS0710MUX_COUNT_MAX_IDX) {
++ TS0710_PRINTK("MUX set_count: invalid idx: %d!\n", idx);
++ return -1;
++ }
++ if (count < 0) {
++ TS0710_PRINTK("MUX set_count: invalid count: %d!\n", count);
++ return -1;
++ }
++
++ down(&mux_data_count_mutex[idx]);
++ mux_data_count[idx] = count;
++ up(&mux_data_count_mutex[idx]);
++
++ return 0;
++}
++
++static int add_count(__u8 idx, int count)
++{
++ if (idx > TS0710MUX_COUNT_MAX_IDX) {
++ TS0710_PRINTK("MUX add_count: invalid idx: %d!\n", idx);
++ return -1;
++ }
++ if (count <= 0) {
++ TS0710_PRINTK("MUX add_count: invalid count: %d!\n", count);
++ return -1;
++ }
++
++ if (down_trylock(&mux_data_count_mutex[idx]))
++ return -1;
++ mux_data_count[idx] += count;
++ up(&mux_data_count_mutex[idx]);
++
++ return 0;
++}
++
++ssize_t file_proc_read(struct file * file, char *buf, size_t size,
++ loff_t * ppos)
++{
++ gprs_bytes gprsData[TS0710MUX_GPRS_SESSION_MAX];
++ int bufLen = sizeof(gprs_bytes) * TS0710MUX_GPRS_SESSION_MAX;
++
++ UNUSED_PARAM(file);
++ UNUSED_PARAM(size);
++ UNUSED_PARAM(ppos);
++
++ gprsData[0].recvBytes = get_count(TS0710MUX_GPRS1_RECV_COUNT_IDX);
++ gprsData[0].sentBytes = get_count(TS0710MUX_GPRS1_SEND_COUNT_IDX);
++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].recvBytes =
++ get_count(TS0710MUX_GPRS2_RECV_COUNT_IDX);
++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes =
++ get_count(TS0710MUX_GPRS2_SEND_COUNT_IDX);
++
++ copy_to_user(buf, gprsData, bufLen);
++
++ return bufLen;
++}
++
++ssize_t file_proc_write(struct file * file, const char *buf, size_t count,
++ loff_t * ppos)
++{
++ gprs_bytes gprsData[TS0710MUX_GPRS_SESSION_MAX];
++ int bufLen = sizeof(gprs_bytes) * TS0710MUX_GPRS_SESSION_MAX;
++
++ UNUSED_PARAM(file);
++ UNUSED_PARAM(count);
++ UNUSED_PARAM(ppos);
++
++ memset(gprsData, 0, bufLen);
++
++ copy_from_user(gprsData, buf, bufLen);
++
++ set_count(TS0710MUX_GPRS1_RECV_COUNT_IDX, gprsData[0].recvBytes);
++ set_count(TS0710MUX_GPRS1_SEND_COUNT_IDX, gprsData[0].sentBytes);
++ set_count(TS0710MUX_GPRS2_RECV_COUNT_IDX,
++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].recvBytes);
++ set_count(TS0710MUX_GPRS2_SEND_COUNT_IDX,
++ gprsData[TS0710MUX_GPRS_SESSION_MAX - 1].sentBytes);
++
++ return bufLen;
++}
++
++static void gprs_proc_init(void)
++{
++ gprs_proc_file =
++ create_proc_entry("gprsbytes", S_IRUSR | S_IWUSR, NULL);
++ gprs_proc_file->proc_fops = &file_proc_operations;
++}
++
++static void gprs_proc_exit(void)
++{
++ remove_proc_entry("gprsbytes", gprs_proc_file);
++}
++
++static int __init mux_init(void)
++{
++ __u8 j;
++
++ if (COMM_FOR_MUX_DRIVER == NULL) {
++
++#ifdef USB_FOR_MUX
++ panic("please install IPC-USB first\n");
++#else
++ panic("please install ttyS0 first\n");
++#endif
++
++ }
++
++ ts0710_init();
++
++ for (j = 0; j < NR_MUXS; j++) {
++ mux_send_info_flags[j] = 0;
++ mux_send_info[j] = 0;
++ mux_recv_info_flags[j] = 0;
++ mux_recv_info[j] = 0;
++ }
++ mux_send_info_idx = NR_MUXS;
++ mux_recv_queue = NULL;
++ mux_recv_flags = 0;
++
++ for (j = 0; j < TS0710MUX_COUNT_IDX_NUM; j++) {
++ mux_data_count[j] = 0;
++ mux_data_count2[j] = 0;
++ init_MUTEX(&mux_data_count_mutex[j]);
++ }
++ post_recv_count_flag = 0;
++
++ INIT_WORK(&send_tqueue, send_worker, NULL);
++ INIT_WORK(&receive_tqueue, receive_worker, NULL);
++ INIT_WORK(&post_recv_tqueue, post_recv_worker, NULL);
++
++ memset(&mux_driver, 0, sizeof(struct tty_driver));
++ memset(&mux_tty, 0, sizeof(mux_tty));
++ mux_driver.magic = TTY_DRIVER_MAGIC;
++ mux_driver.driver_name = "ts0710mux";
++ mux_driver.name = "ts0710mux";
++ mux_driver.major = TS0710MUX_MAJOR;
++ mux_driver.minor_start = TS0710MUX_MINOR_START;
++ mux_driver.num = NR_MUXS;
++ mux_driver.type = TTY_DRIVER_TYPE_SERIAL;
++ mux_driver.subtype = SERIAL_TYPE_NORMAL;
++ mux_driver.init_termios = tty_std_termios;
++ mux_driver.init_termios.c_iflag = 0;
++ mux_driver.init_termios.c_oflag = 0;
++ mux_driver.init_termios.c_cflag = B38400 | CS8 | CREAD;
++ mux_driver.init_termios.c_lflag = 0;
++ mux_driver.flags = TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_REAL_RAW;
++
++ mux_driver.ttys = mux_table;
++ mux_driver.termios = mux_termios;
++ mux_driver.termios_locked = mux_termios_locked;
++// mux_driver.driver_state = mux_state;
++ mux_driver.other = NULL;
++
++ mux_driver.open = mux_open;
++ mux_driver.close = mux_close;
++ mux_driver.write = mux_write;
++ mux_driver.write_room = mux_write_room;
++ mux_driver.flush_buffer = mux_flush_buffer;
++ mux_driver.chars_in_buffer = mux_chars_in_buffer;
++ mux_driver.throttle = mux_throttle;
++ mux_driver.unthrottle = mux_unthrottle;
++ mux_driver.ioctl = mux_ioctl;
++ mux_driver.owner = THIS_MODULE;
++
++ if (tty_register_driver(&mux_driver))
++ panic("Couldn't register mux driver");
++
++ COMM_MUX_DISPATCHER = mux_dispatcher;
++ COMM_MUX_SENDER = mux_sender;
++
++ gprs_proc_init();
++
++ return 0;
++}
++
++static void __exit mux_exit(void)
++{
++ __u8 j;
++
++ COMM_MUX_DISPATCHER = NULL;
++ COMM_MUX_SENDER = NULL;
++
++ gprs_proc_exit();
++
++ mux_send_info_idx = NR_MUXS;
++ mux_recv_queue = NULL;
++ for (j = 0; j < NR_MUXS; j++) {
++ if ((mux_send_info_flags[j]) && (mux_send_info[j])) {
++ kfree(mux_send_info[j]);
++ }
++ mux_send_info_flags[j] = 0;
++ mux_send_info[j] = 0;
++
++ if ((mux_recv_info_flags[j]) && (mux_recv_info[j])) {
++ free_mux_recv_struct(mux_recv_info[j]);
++ }
++ mux_recv_info_flags[j] = 0;
++ mux_recv_info[j] = 0;
++ }
++
++ if (tty_unregister_driver(&mux_driver))
++ panic("Couldn't unregister mux driver");
++}
++
++module_init(mux_init);
++module_exit(mux_exit);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Harald Welte <laforge@openezx.org>");
++MODULE_DESCRIPTION("TS 07.10 Multiplexer");
+Index: linux-2.6.24/drivers/char/ts0710_mux.h
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/char/ts0710_mux.h
+@@ -0,0 +1,103 @@
++/*
++ * mux_macro.h
++ *
++ * Copyright (C) 2002 2005 Motorola
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ *
++ * 11/18/2002 (Motorola) - Initial version
++ *
++ */
++
++/*
++* This header file should be included by both MUX and other applications
++* which access MUX device files. It gives the additional macro definitions
++* shared between MUX and applications.
++*/
++
++/* MUX DLCI(Data Link Connection Identifier) Configuration */
++/*
++* DLCI Service
++* 0 Control Channel
++* 1 Voice Call & Network-related
++* 2 SMS MO
++* 3 SMS MT
++* 4 Phonebook & related
++* 5 MISC
++* 6 CSD/FAX
++* 7 GPRS1
++* 8 GPRS2
++* 9 Logger CMD
++* 10 Logger Data
++* 11 Test CMD
++* 12 AGPS
++* 13 Net Monitor
++*/
++
++/* Mapping between DLCI and MUX device files */
++/*
++* File Name Minor DLCI AT Command/Data
++* /dev/mux0 0 1 AT Command
++* /dev/mux1 1 2 AT Command
++* /dev/mux2 2 3 AT Command
++* /dev/mux3 3 4 AT Command
++* /dev/mux4 4 5 AT Command
++* /dev/mux5 5 6 AT Command
++* /dev/mux6 6 7 AT Command
++* /dev/mux7 7 8 AT Command
++* /dev/mux8 8 6 Data
++* /dev/mux9 9 7 Data
++* /dev/mux10 10 8 Data
++* /dev/mux11 11 9 Data
++* /dev/mux12 12 10 Data
++* /dev/mux13 13 11 Data
++* /dev/mux14 14 12 Data
++* /dev/mux15 15 13 Data
++*/
++
++#define MUX_CMD_FILE_VOICE_CALL "/dev/mux0"
++#define MUX_CMD_FILE_SMS_MO "/dev/mux1"
++#define MUX_CMD_FILE_SMS_MT "/dev/mux2"
++#define MUX_CMD_FILE_PHONEBOOK "/dev/mux3"
++#define MUX_CMD_FILE_MISC "/dev/mux4"
++#define MUX_CMD_FILE_CSD "/dev/mux5"
++#define MUX_CMD_FILE_GPRS1 "/dev/mux6"
++#define MUX_CMD_FILE_GPRS2 "/dev/mux7"
++
++#define MUX_DATA_FILE_CSD "/dev/mux8"
++#define MUX_DATA_FILE_GPRS1 "/dev/mux9"
++#define MUX_DATA_FILE_GPRS2 "/dev/mux10"
++#define MUX_DATA_FILE_LOGGER_CMD "/dev/mux11"
++#define MUX_DATA_FILE_LOGGER_DATA "/dev/mux12"
++#define MUX_DATA_FILE_TEST_CMD "/dev/mux13"
++#define MUX_DATA_FILE_AGPS "/dev/mux14"
++#define MUX_DATA_FILE_NET_MONITOR "/dev/mux15"
++
++#define NUM_MUX_CMD_FILES 8
++#define NUM_MUX_DATA_FILES 8
++#define NUM_MUX_FILES ( NUM_MUX_CMD_FILES + NUM_MUX_DATA_FILES )
++
++/* Special ioctl() upon a MUX device file for hanging up a call */
++#define TS0710MUX_IO_MSC_HANGUP 0x54F0
++
++/* Special ioctl() upon a MUX device file for MUX loopback test */
++#define TS0710MUX_IO_TEST_CMD 0x54F1
++
++/* Special Error code might be return from write() to a MUX device file */
++#define EDISCONNECTED 900 /* Logical data link is disconnected */
++
++/* Special Error code might be return from open() to a MUX device file */
++#define EREJECTED 901 /* Logical data link connection request is rejected */
+Index: linux-2.6.24/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/char/ts0710_mux_usb.c
+@@ -0,0 +1,868 @@
++/*
++ * linux/drivers/usb/ipcusb.c
++ *
++ * Implementation of a ipc driver based Intel's Bulverde USB Host
++ * Controller.
++ *
++ * Copyright (C) 2003-2005 Motorola
++ * Copyright (C) 2006 Harald Welte <laforge@openezx.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * 2003-Nov-03 - (Motorola) created
++ * 2004-Feb-20 - (Motorola) Add Power Manager codes
++ * 2004-Apr-14 - (Motorola) Update Suspend/Resume codes
++ * 2004-May-10 - (Motorola) Add unlink_urbs codes and do some updates of send
++ * out urb sequence
++ * 2006-Jun-22 - (Harald Welte) port to Linux 2.6.x
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/list.h>
++#include <linux/errno.h>
++#include <asm/uaccess.h>
++#include <asm/hardware.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch-pxa/pxa-regs.h>
++#include <asm/arch-pxa/ezx.h>
++#include <linux/slab.h>
++#include <linux/miscdevice.h>
++#include <linux/init.h>
++#include <linux/timer.h>
++#include <linux/delay.h>
++#include <linux/sched.h>
++#include <linux/tty.h>
++#include <linux/tty_driver.h>
++#include <linux/tty_flip.h>
++#include <linux/circ_buf.h>
++#include <linux/usb.h>
++
++#include "ts0710_mux_usb.h"
++
++/*Macro defined for this driver*/
++#define DRIVER_VERSION "1.0alpha1"
++#define DRIVER_AUTHOR "Motorola / Harald Welte <laforge@openezx.org>"
++#define DRIVER_DESC "USB IPC Driver (TS07.10 lowlevel)"
++#define MOTO_IPC_VID 0x22b8
++#define MOTO_IPC_PID 0x3006
++#define IBUF_SIZE 32 /*urb size*/
++#define IPC_USB_XMIT_SIZE 1024
++#define IPC_URB_SIZE 32
++#define IPC_USB_WRITE_INIT 0
++#define IPC_USB_WRITE_XMIT 1
++#define IPC_USB_PROBE_READY 3
++#define IPC_USB_PROBE_NOT_READY 4
++#define DBG_MAX_BUF_SIZE 1024
++#define ICL_EVENT_INTERVAL (HZ)
++#undef BVD_DEBUG
++
++#define IS_EP_BULK(ep) ((ep).bmAttributes == USB_ENDPOINT_XFER_BULK ? 1 : 0)
++#define IS_EP_BULK_IN(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
++#define IS_EP_BULK_OUT(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)
++/*End defined macro*/
++
++/*global values defined*/
++static struct usb_driver usb_ipc_driver;
++static struct timer_list ipcusb_timer;
++static struct timer_list suspend_timer;
++static struct timer_list wakeup_timer;
++static struct tty_struct ipcusb_tty; /* the coresponding tty struct, we just use flip buffer here. */
++static struct tty_driver ipcusb_tty_driver; /* the coresponding tty driver, we just use write and chars in buff here*/
++struct tty_driver *usb_for_mux_driver = NULL;
++struct tty_struct *usb_for_mux_tty = NULL;
++void (*usb_mux_dispatcher)(struct tty_struct *tty) = NULL;
++void (*usb_mux_sender)(void) = NULL;
++void (*ipcusb_ap_to_bp)(unsigned char*, int) = NULL;
++void (*ipcusb_bp_to_ap)(unsigned char*, int) = NULL;
++EXPORT_SYMBOL(usb_for_mux_driver);
++EXPORT_SYMBOL(usb_for_mux_tty);
++EXPORT_SYMBOL(usb_mux_dispatcher);
++EXPORT_SYMBOL(usb_mux_sender);
++EXPORT_SYMBOL(ipcusb_ap_to_bp);
++EXPORT_SYMBOL(ipcusb_bp_to_ap);
++static int sumbit_times = 0;
++static int callback_times = 0;
++//static unsigned long last_jiff = 0;
++extern int usbh_finished_resume;
++/*end global values defined*/
++
++MODULE_AUTHOR(DRIVER_AUTHOR);
++MODULE_DESCRIPTION(DRIVER_DESC);
++MODULE_LICENSE("GPL");
++
++#ifdef BVD_DEBUG
++#define bvd_dbg(format, arg...) printk(__FILE__ ": " format "\n" , ## arg)
++#else
++#define bvd_dbg(format, arg...) do {} while (0)
++#endif
++
++/* USB device context */
++typedef struct {
++ struct list_head list;
++ int size;
++ char *body;
++} buf_list_t;
++
++struct ipc_usb_data {
++ u_int8_t write_finished_flag;
++ u_int8_t write_flag,
++ ipc_flag,
++ suspend_flag;
++ struct usb_device *ipc_dev;
++ struct urb readurb_mux,
++ writeurb_mux,
++ writeurb_dsplog;
++ char *obuf, *ibuf;
++ int writesize; /* max packet size for the
++ output bulk endpoint *
++ transfer buffers */
++
++ struct circ_buf xmit; /* write cric bufffer */
++ struct list_head in_buf_list;
++ char bulk_in_ep_mux,
++ bulk_out_ep_mux,
++ bulk_in_ep_dsplog;
++ unsigned int ifnum;
++
++ struct tasklet_struct bh,
++ bh_bp;
++
++ spinlock_t lock;
++};
++
++struct ipc_usb_data *bvd_ipc;
++
++#ifdef BVD_DEBUG
++static void bvd_dbg_hex(__u8 *buf, int len)
++{
++ static unsigned char tbuf[DBG_MAX_BUF_SIZE];
++ int i, c;
++
++ if (len <= 0)
++ return;
++
++ c = 0;
++ for (i=0; (i < len) && (c < (DBG_MAX_BUF_SIZE - 3)); i++) {
++ sprintf(&tbuf[c], "%02x ",buf[i]);
++ c += 3;
++ }
++ tbuf[c] = 0;
++
++ printk("%s: %s\n", __FUNCTION__, tbuf);
++}
++#else
++#define bvd_dbg_hex(buf, len)
++#endif
++
++static int unlink_urbs(struct urb *urb)
++{
++ unsigned long flags;
++ int retval;
++
++ spin_lock_irqsave(&bvd_ipc->lock, flags);
++
++ retval = usb_unlink_urb(urb);
++ if (retval != -EINPROGRESS && retval != 0)
++ printk("unlink urb err, %d", retval);
++
++ spin_unlock_irqrestore(&bvd_ipc->lock, flags);
++ return retval;
++}
++
++static void append_to_inbuf_list(struct urb *urb)
++{
++ buf_list_t *inbuf;
++ int count = urb->actual_length;
++
++ inbuf = kmalloc(sizeof(buf_list_t), GFP_KERNEL);
++ if (!inbuf) {
++ printk("append_to_inbuf_list: (%d) out of memory!\n",
++ sizeof(buf_list_t));
++ return;
++ }
++
++ inbuf->size = count;
++ inbuf->body = kmalloc(sizeof(char)*count, GFP_KERNEL);
++ if (!inbuf->body) {
++ kfree(inbuf);
++ printk("append_to_inbuf_list: (%d) out of memory!\n",
++ sizeof(char)*count);
++ return;
++ }
++ memcpy(inbuf->body, (unsigned char*)urb->transfer_buffer, count);
++ list_add_tail(&inbuf->list, &bvd_ipc->in_buf_list);
++}
++
++static void ipcusb_timeout(unsigned long data)
++{
++ struct tty_struct *tty = &ipcusb_tty;
++ struct urb *urb = (struct urb *)data;
++
++ bvd_dbg("ipcusb_timeout***");
++
++ while (!(list_empty(&bvd_ipc->in_buf_list))) {
++ int count;
++ buf_list_t *inbuf;
++ struct list_head *ptr = NULL;
++
++ ptr = bvd_ipc->in_buf_list.next;
++ inbuf = list_entry (ptr, buf_list_t, list);
++ count = inbuf->size;
++ if (tty_insert_flip_string(tty, inbuf->body, count) >= count) {
++ list_del(ptr);
++ kfree(inbuf->body);
++ inbuf->body = NULL;
++ kfree(inbuf);
++ } else {
++ bvd_dbg("ipcusb_timeout: bvd_ipc->in_buf_list empty!");
++ break;
++ }
++ }
++
++ if (usb_mux_dispatcher)
++ usb_mux_dispatcher(tty); /**call Liu changhui's func.**/
++
++ if (list_empty(&bvd_ipc->in_buf_list)) {
++ urb->actual_length = 0;
++ urb->dev = bvd_ipc->ipc_dev;
++ if (usb_submit_urb(urb, GFP_ATOMIC))
++ bvd_dbg("ipcusb_timeout: failed resubmitting read urb");
++ bvd_dbg("ipcusb_timeout: resubmited read urb");
++ } else {
++ ipcusb_timer.data = (unsigned long)urb;
++ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
++ }
++}
++
++static void usb_ipc_read_bulk(struct urb *urb, struct pt_regs *regs)
++{
++ buf_list_t *inbuf;
++ int count = urb->actual_length;
++ struct tty_struct *tty = &ipcusb_tty;
++
++ bvd_dbg("usb_ipc_read_bulk: begining!");
++ if (urb->status)
++ printk("nonzero read bulk status received: %d\n", urb->status);
++
++ bvd_dbg("usb_ipc_read_bulk: urb->actual_length=%d", urb->actual_length);
++ bvd_dbg("usb_ipc_read_bulk: urb->transfer_buffer:");
++
++ bvd_dbg_hex((unsigned char*)urb->transfer_buffer, urb->actual_length);
++
++ if (count > 0 && ((*ipcusb_bp_to_ap) != NULL))
++ (*ipcusb_bp_to_ap)(urb->transfer_buffer, urb->actual_length);
++
++ if (!(list_empty(&bvd_ipc->in_buf_list))) {
++ int need_mux = 0;
++
++ bvd_dbg("usb_ipc_read_bulk: some urbs in_buf_list");
++ if (count > 0) {
++ bvd_ipc->suspend_flag = 1;
++ append_to_inbuf_list(urb); /* append the current received urb */
++#if 0
++ if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
++ {
++ last_jiff = jiffies;
++ queue_apm_event(KRNL_ICL, NULL);
++ }
++#endif
++ }
++
++ while (!(list_empty(&bvd_ipc->in_buf_list))) {
++ struct list_head* ptr = NULL;
++ ptr = bvd_ipc->in_buf_list.next;
++ inbuf = list_entry(ptr, buf_list_t, list);
++ count = inbuf->size;
++ need_mux = 1;
++
++ tty_insert_flip_string(tty, inbuf->body, count);
++
++ list_del(ptr);
++ kfree(inbuf->body);
++ inbuf->body = NULL;
++ kfree(inbuf);
++ }
++
++ if (usb_mux_dispatcher && need_mux)
++ usb_mux_dispatcher(tty); /* call Liu changhui's func. */
++
++ if (list_empty(&bvd_ipc->in_buf_list)) {
++ urb->actual_length = 0;
++ urb->dev = bvd_ipc->ipc_dev;
++ if (usb_submit_urb(urb, GFP_ATOMIC))
++ bvd_dbg("usb_ipc_read_bulk: "
++ "failed resubmitting read urb");
++ bvd_dbg("usb_ipc_read_bulk: resubmited read urb");
++ } else {
++ ipcusb_timer.data = (unsigned long)urb;
++ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
++ }
++ } else if (count > 0) {
++ bvd_dbg("usb_ipc_read_bulk: no urbs in_buf_list");
++ bvd_ipc->suspend_flag = 1;
++
++ if (tty_insert_flip_string(tty, urb->transfer_buffer,
++ count) < count) {
++ bvd_ipc->suspend_flag = 1;
++ append_to_inbuf_list(urb);
++ ipcusb_timer.data = (unsigned long)urb;
++ mod_timer(&ipcusb_timer, jiffies+(10*HZ/1000));
++#if 0
++ if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
++ {
++ last_jiff = jiffies;
++ queue_apm_event(KRNL_ICL, NULL);
++ }
++#endif
++ }
++
++ if (usb_mux_dispatcher)
++ usb_mux_dispatcher(tty); /* call Liu changhui's func. */
++
++ urb->actual_length = 0;
++ urb->dev = bvd_ipc->ipc_dev;
++ if (usb_submit_urb(urb, GFP_ATOMIC))
++ bvd_dbg("failed resubmitting read urb");
++#if 0
++ if(jiffies - last_jiff > ICL_EVENT_INTERVAL)
++ {
++ last_jiff = jiffies;
++ queue_apm_event(KRNL_ICL, NULL);
++ }
++#endif
++ bvd_dbg("usb_ipc_read_bulk: resubmited read urb");
++ }
++
++ bvd_dbg("usb_ipc_read_bulk: completed!!!");
++}
++
++static void usb_ipc_write_bulk(struct urb *urb, struct pt_regs *regs)
++{
++ callback_times++;
++ bvd_ipc->write_finished_flag = 1;
++
++ bvd_dbg("usb_ipc_write_bulk: begining!");
++ //printk("%s: write_finished_flag=%d\n", __FUNCTION__, bvd_ipc->write_finished_flag);
++
++ if (urb->status)
++ printk("nonzero write bulk status received: %d\n", urb->status);
++
++ if (usb_mux_sender)
++ usb_mux_sender(); /**call Liu changhui's func**/
++
++ //printk("usb_ipc_write_bulk: mark ipcusb_softint!\n");
++ tasklet_schedule(&bvd_ipc->bh);
++
++ bvd_dbg("usb_ipc_write_bulk: finished!");
++}
++
++static void wakeup_timeout(unsigned long data)
++{
++ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
++ bvd_dbg("wakup_timeout: send GPIO_MCU_INT_SW signal!");
++}
++
++static void suspend_timeout(unsigned long data)
++{
++ if (bvd_ipc->suspend_flag == 1) {
++ bvd_ipc->suspend_flag = 0;
++ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000));
++ bvd_dbg("suspend_timeout: add the suspend timer again");
++ } else {
++ unlink_urbs(&bvd_ipc->readurb_mux);
++ UHCRHPS3 = 0x4;
++ mdelay(40);
++ bvd_dbg("suspend_timeout: send SUSPEND signal! UHCRHPS3=0x%x",
++ UHCRHPS3);
++ }
++}
++
++static void ipcusb_xmit_data(void)
++{
++ int c, count = IPC_URB_SIZE;
++ int result = 0;
++ int buf_flag = 0;
++ int buf_num = 0;
++
++ //printk("%s: sumbit_times=%d, callback_times=%d\n", __FUNCTION__, sumbit_times, callback_times);
++ if (bvd_ipc->write_finished_flag == 0)
++ return;
++
++ while (1) {
++ c = CIRC_CNT_TO_END(bvd_ipc->xmit.head, bvd_ipc->xmit.tail,
++ IPC_USB_XMIT_SIZE);
++ if (count < c)
++ c = count;
++ if (c <= 0)
++ break;
++
++ memcpy(bvd_ipc->obuf+buf_num,
++ bvd_ipc->xmit.buf + bvd_ipc->xmit.tail, c);
++ buf_flag = 1;
++ bvd_ipc->xmit.tail = ((bvd_ipc->xmit.tail + c)
++ & (IPC_USB_XMIT_SIZE-1));
++ count -= c;
++ buf_num += c;
++ }
++
++ if (buf_num == 0) {
++ bvd_dbg("ipcusb_xmit_data: buf_num=%d, add suspend_timer",
++ buf_num);
++ bvd_ipc->suspend_flag = 0;
++ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000));
++ }
++
++ bvd_dbg("ipcusb_xmit_data: buf_num=%d", buf_num);
++ bvd_dbg("ipcusb_xmit_data: bvd_ipc->obuf: ");
++
++ bvd_dbg_hex((bvd_ipc->obuf)-buf_num, buf_num);
++
++ if (buf_flag) {
++ bvd_ipc->writeurb_mux.transfer_buffer_length = buf_num;
++ bvd_dbg("ipcusb_xmit_data: copy data to write urb finished! ");
++
++ if ((UHCRHPS3 & 0x4) == 0x4) {
++ static int ret;
++ int time = 0;
++
++ /* if BP sleep, wake up BP first */
++ pxa_gpio_mode(GPIO_IN | 41);
++ if (GPIO_is_high(41)) {
++ if (GPIO_is_high(GPIO_MCU_INT_SW))
++ GPCR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
++ else
++ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
++
++ time = jiffies;
++ while (GPIO_is_high(41) && (jiffies < (time+HZ)));
++
++ if (GPIO_is_high(41)) {
++ printk("%s: Wakeup BP timeout! BP state is %d\n",
++ __FUNCTION__, GPIO_is_high(41));
++ }
++ if (GPIO_is_high(GPIO_MCU_INT_SW))
++ GPCR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
++ else
++ GPSR(GPIO_MCU_INT_SW) = GPIO_bit(GPIO_MCU_INT_SW);
++ }
++
++ /* Resume BP */
++ UHCRHPS3 = 0x8;
++ mdelay(40);
++ bvd_dbg("ipcusb_xmit_data: Send RESUME signal! UHCRHPS3=0x%x",
++ UHCRHPS3);
++ /*send IN token*/
++ bvd_ipc->readurb_mux.actual_length = 0;
++ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
++ if (ret = usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC))
++ printk("ipcusb_xmit_data: usb_submit_urb(read mux bulk)"
++ "failed! status=%d\n", ret);
++ bvd_dbg("ipcusb_xmit_data: Send a IN token successfully!");
++ }
++
++ sumbit_times++;
++ bvd_ipc->write_finished_flag = 0;
++ //printk("%s: clear write_finished_flag:%d\n", __FUNCTION__, bvd_ipc->write_finished_flag);
++ bvd_ipc->writeurb_mux.dev = bvd_ipc->ipc_dev;
++ if (result = usb_submit_urb(&bvd_ipc->writeurb_mux, GFP_ATOMIC))
++ warn("ipcusb_xmit_data: funky result! result=%d\n", result);
++
++ bvd_dbg("ipcusb_xmit_data: usb_submit_urb finished! result:%d", result);
++
++ }
++}
++
++static void usbipc_bh_func(unsigned long param)
++{
++ ipcusb_xmit_data();
++}
++
++extern void get_halted_bit(void);
++
++static void usbipc_bh_bp_func(unsigned long param)
++{
++ if ((UHCRHPS3 & 0x4) == 0x4) {
++ UHCRHPS3 = 0x8;
++ mdelay(40);
++ bvd_dbg("ipcusb_softint_send_readurb: Send RESUME signal! "
++ "UHCRHPS3=0x%x", UHCRHPS3);
++ }
++ if (bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) {
++ get_halted_bit();
++
++ /*send a IN token*/
++ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
++ if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC)) {
++ bvd_dbg("ipcusb_softint_send_readurb: "
++ "usb_submit_urb(read mux bulk) failed!");
++ }
++ bvd_dbg("ipcusb_softint_send_readurb: Send a IN token successfully!");
++ bvd_ipc->suspend_flag = 0;
++ bvd_dbg("ipcusb_softint_send_readurb: add suspend_timer");
++ mod_timer(&suspend_timer, jiffies+(5000*HZ/1000));
++ }
++}
++
++static int usb_ipc_write(struct tty_struct *tty,
++ const unsigned char *buf, int count)
++{
++ int c, ret = 0;
++
++ bvd_dbg("usb_ipc_write: count=%d, buf: ", count);
++ bvd_dbg_hex(buf, count);
++
++ if (count <= 0)
++ return 0;
++
++ if (*ipcusb_ap_to_bp != NULL)
++ (*ipcusb_ap_to_bp)(buf, count);
++
++ bvd_ipc->suspend_flag = 1;
++
++ if ((bvd_ipc->ipc_flag == IPC_USB_PROBE_READY) &&
++ (bvd_ipc->xmit.head == bvd_ipc->xmit.tail)) {
++ bvd_dbg("usb_ipc_write: set write_flag");
++ bvd_ipc->write_flag = IPC_USB_WRITE_XMIT;
++ }
++
++ while (1) {
++ c = CIRC_SPACE_TO_END(bvd_ipc->xmit.head,
++ bvd_ipc->xmit.tail, IPC_USB_XMIT_SIZE);
++ if (count < c)
++ c = count;
++ if (c <= 0)
++ break;
++
++ memcpy(bvd_ipc->xmit.buf + bvd_ipc->xmit.head, buf, c);
++ bvd_ipc->xmit.head = ((bvd_ipc->xmit.head + c)
++ & (IPC_USB_XMIT_SIZE-1));
++ buf += c;
++ count -= c;
++ ret += c;
++ }
++ bvd_dbg("usb_ipc_write: ret=%d, bvd_ipc->xmit.buf: ", ret);
++
++ bvd_dbg_hex(bvd_ipc->xmit.buf, ret);
++
++ if (bvd_ipc->write_flag == IPC_USB_WRITE_XMIT) {
++ bvd_ipc->write_flag = IPC_USB_WRITE_INIT;
++ bvd_dbg("usb_ipc_write: mark ipcusb_softint");
++ tasklet_schedule(&bvd_ipc->bh);
++ }
++
++ bvd_dbg("usb_ipc_write: ret=%d\n", ret);
++ return ret;
++}
++
++static int usb_ipc_chars_in_buffer(struct tty_struct *tty)
++{
++ return CIRC_CNT(bvd_ipc->xmit.head, bvd_ipc->xmit.tail, IPC_USB_XMIT_SIZE);
++}
++
++void usb_send_readurb(void)
++{
++ //printk("usb_send_readurb: begining!UHCRHPS3=0x%x, usbh_finished_resume=%d\n", UHCRHPS3, usbh_finished_resume);
++
++ if (usbh_finished_resume == 0)
++ return;
++
++ tasklet_schedule(&bvd_ipc->bh_bp);
++}
++
++static int usb_ipc_probe(struct usb_interface *intf,
++ const struct usb_device_id *id)
++{
++ struct usb_device *usbdev = interface_to_usbdev(intf);
++ struct usb_config_descriptor *ipccfg;
++ struct usb_interface_descriptor *interface;
++ struct usb_endpoint_descriptor *endpoint;
++ int ep_cnt, readsize, writesize;
++ char have_bulk_in_mux, have_bulk_out_mux;
++
++ bvd_dbg("usb_ipc_probe: vendor id 0x%x, device id 0x%x",
++ usbdev->descriptor.idVendor, usbdev->descriptor.idProduct);
++
++ if ((usbdev->descriptor.idVendor != MOTO_IPC_VID) ||
++ (usbdev->descriptor.idProduct != MOTO_IPC_PID))
++ return -ENODEV;
++
++ /* a2590c : dsplog interface is not supported by this driver */
++ if (intf->minor == 2) /* dsplog interface number is 2 */
++ return -1;
++
++ bvd_dbg("usb_ipc_probe: USB dev address:%p", usbdev);
++ bvd_dbg("usb_ipc_probe: ifnum:%u", intf->minor);
++
++ ipccfg = &usbdev->actconfig->desc;
++ bvd_dbg("usb_ipc_prob: config%d", ipccfg->bConfigurationValue);
++ bvd_dbg("usb_ipc_prob: bNumInterfaces = %d", ipccfg->bNumInterfaces);
++
++ /* After this point we can be a little noisy about what we are trying
++ * to configure, hehe. */
++ if (usbdev->descriptor.bNumConfigurations != 1) {
++ info("usb_ipc_probe: Only one device configuration "
++ "is supported.");
++ return -1;
++ }
++
++ if (usbdev->config[0].desc.bNumInterfaces != 3) {
++ info("usb_ipc_probe: Only three device interfaces are "
++ "supported.");
++ return -1;
++ }
++
++ interface = &intf->cur_altsetting->desc;
++ endpoint = &intf->cur_altsetting->endpoint[0].desc;
++ /* Start checking for two bulk endpoints or ... FIXME: This is a future
++ * enhancement...*/
++ bvd_dbg("usb_ipc_probe: Number of Endpoints:%d",
++ (int) interface->bNumEndpoints);
++ if (interface->bNumEndpoints != 2) {
++ info("usb_ipc_probe: Only two endpoints supported.");
++ return -1;
++ }
++
++ ep_cnt = have_bulk_in_mux = have_bulk_out_mux = 0;
++
++ bvd_dbg("usb_ipc_probe: endpoint[0] is:%x",
++ (&endpoint[0])->bEndpointAddress);
++ bvd_dbg("usb_ipc_probe: endpoint[1] is:%x ",
++ (&endpoint[1])->bEndpointAddress);
++
++ while (ep_cnt < interface->bNumEndpoints) {
++
++ if (!have_bulk_in_mux && IS_EP_BULK_IN(endpoint[ep_cnt])) {
++ bvd_dbg("usb_ipc_probe: bEndpointAddress(IN) is:%x ",
++ (&endpoint[ep_cnt])->bEndpointAddress);
++ have_bulk_in_mux =
++ (&endpoint[ep_cnt])->bEndpointAddress;
++ readsize = (&endpoint[ep_cnt])->wMaxPacketSize;
++ bvd_dbg("usb_ipc_probe: readsize=%d", readsize);
++ ep_cnt++;
++ continue;
++ }
++
++ if (!have_bulk_out_mux && IS_EP_BULK_OUT(endpoint[ep_cnt])) {
++ bvd_dbg("usb_ipc_probe: bEndpointAddress(OUT) is:%x ",
++ (&endpoint[ep_cnt])->bEndpointAddress);
++ have_bulk_out_mux =
++ (&endpoint[ep_cnt])->bEndpointAddress;
++ writesize = (&endpoint[ep_cnt])->wMaxPacketSize;
++ bvd_dbg("usb_ipc_probe: writesize=%d", writesize);
++ ep_cnt++;
++ continue;
++ }
++
++ info("usb_ipc_probe: Undetected endpoint ^_^ ");
++ /* Shouldn't ever get here unless we have something weird */
++ return -1;
++ }
++
++ /* Perform a quick check to make sure that everything worked as it
++ * should have. */
++
++ switch (interface->bNumEndpoints) {
++ case 2:
++ if (!have_bulk_in_mux || !have_bulk_out_mux) {
++ info("usb_ipc_probe: Two bulk endpoints required.");
++ return -1;
++ }
++ break;
++ default:
++ info("usb_ipc_probe: Endpoint determination failed ^_^ ");
++ return -1;
++ }
++
++ /* Ok, now initialize all the relevant values */
++ if (!(bvd_ipc->obuf = (char *)kmalloc(writesize, GFP_KERNEL))) {
++ err("usb_ipc_probe: Not enough memory for the output buffer.");
++ kfree(bvd_ipc);
++ return -1;
++ }
++ bvd_dbg("usb_ipc_probe: obuf address:%p", bvd_ipc->obuf);
++
++ if (!(bvd_ipc->ibuf = (char *)kmalloc(readsize, GFP_KERNEL))) {
++ err("usb_ipc_probe: Not enough memory for the input buffer.");
++ kfree(bvd_ipc->obuf);
++ kfree(bvd_ipc);
++ return -1;
++ }
++ bvd_dbg("usb_ipc_probe: ibuf address:%p", bvd_ipc->ibuf);
++
++ bvd_ipc->ipc_flag = IPC_USB_PROBE_READY;
++ bvd_ipc->write_finished_flag = 1;
++ bvd_ipc->suspend_flag = 1;
++ bvd_ipc->bulk_in_ep_mux= have_bulk_in_mux;
++ bvd_ipc->bulk_out_ep_mux= have_bulk_out_mux;
++ bvd_ipc->ipc_dev = usbdev;
++ bvd_ipc->writesize = writesize;
++ INIT_LIST_HEAD (&bvd_ipc->in_buf_list);
++
++ bvd_ipc->bh.func = usbipc_bh_func;
++ bvd_ipc->bh.data = (unsigned long) bvd_ipc;
++
++ bvd_ipc->bh_bp.func = usbipc_bh_bp_func;
++ bvd_ipc->bh_bp.data = (unsigned long) bvd_ipc;
++
++ /*Build a write urb*/
++ usb_fill_bulk_urb(&bvd_ipc->writeurb_mux, usbdev,
++ usb_sndbulkpipe(bvd_ipc->ipc_dev,
++ bvd_ipc->bulk_out_ep_mux),
++ bvd_ipc->obuf, writesize, usb_ipc_write_bulk,
++ bvd_ipc);
++ //bvd_ipc->writeurb_mux.transfer_flags |= USB_ASYNC_UNLINK;
++
++ /*Build a read urb and send a IN token first time*/
++ usb_fill_bulk_urb(&bvd_ipc->readurb_mux, usbdev,
++ usb_rcvbulkpipe(usbdev, bvd_ipc->bulk_in_ep_mux),
++ bvd_ipc->ibuf, readsize, usb_ipc_read_bulk, bvd_ipc);
++ //bvd_ipc->readurb_mux.transfer_flags |= USB_ASYNC_UNLINK;
++
++ usb_driver_claim_interface(&usb_ipc_driver, intf, bvd_ipc);
++ //usb_driver_claim_interface(&usb_ipc_driver, &ipccfg->interface[1], bvd_ipc);
++
++ // a2590c: dsplog is not supported by this driver
++ // usb_driver_claim_interface(&usb_ipc_driver,
++ // &ipccfg->interface[2], bvd_ipc);
++ /*send a IN token first time*/
++ bvd_ipc->readurb_mux.dev = bvd_ipc->ipc_dev;
++ if (usb_submit_urb(&bvd_ipc->readurb_mux, GFP_ATOMIC))
++ printk("usb_ipc_prob: usb_submit_urb(read mux bulk) failed!\n");
++
++ bvd_dbg("usb_ipc_prob: Send a IN token successfully!");
++
++ if (bvd_ipc->xmit.head != bvd_ipc->xmit.tail) {
++ printk("usb_ipc_probe: mark ipcusb_softint!\n");
++ tasklet_schedule(&bvd_ipc->bh);
++ }
++
++ printk("usb_ipc_probe: completed probe!");
++ usb_set_intfdata(intf, &bvd_ipc);
++ return 0;
++}
++
++static void usb_ipc_disconnect(struct usb_interface *intf)
++{
++ //struct usb_device *usbdev = interface_to_usbdev(intf);
++ struct ipc_usb_data *bvd_ipc_disconnect = usb_get_intfdata(intf);
++
++ printk("usb_ipc_disconnect:*** \n");
++
++ if ((UHCRHPS3 & 0x4) == 0)
++ usb_unlink_urb(&bvd_ipc_disconnect->readurb_mux);
++
++ usb_unlink_urb(&bvd_ipc_disconnect->writeurb_mux);
++
++ bvd_ipc_disconnect->ipc_flag = IPC_USB_PROBE_NOT_READY;
++ kfree(bvd_ipc_disconnect->ibuf);
++ kfree(bvd_ipc_disconnect->obuf);
++
++ usb_driver_release_interface(&usb_ipc_driver,
++ bvd_ipc_disconnect->ipc_dev->actconfig->interface[0]);
++ usb_driver_release_interface(&usb_ipc_driver,
++ bvd_ipc_disconnect->ipc_dev->actconfig->interface[1]);
++
++ //a2590c: dsplog interface is not supported by this driver
++ //usb_driver_release_interface(&usb_ipc_driver, &bvd_ipc_disconnect->ipc_dev->actconfig->interface[2]);
++
++ bvd_ipc_disconnect->ipc_dev = NULL;
++
++ usb_set_intfdata(intf, NULL);
++
++ printk("usb_ipc_disconnect completed!\n");
++}
++
++static struct usb_device_id usb_ipc_id_table[] = {
++ { USB_DEVICE(MOTO_IPC_VID, MOTO_IPC_PID) },
++ { } /* Terminating entry */
++};
++
++static struct usb_driver usb_ipc_driver = {
++ .name = "usb ipc",
++ .probe = usb_ipc_probe,
++ .disconnect = usb_ipc_disconnect,
++ .id_table = usb_ipc_id_table,
++};
++
++static int __init usb_ipc_init(void)
++{
++ int result;
++
++ bvd_dbg("init usb_ipc");
++ /* register driver at the USB subsystem */
++ result = usb_register(&usb_ipc_driver);
++ if (result < 0) {
++ err ("usb ipc driver could not be registered");
++ return result;
++ }
++
++ /*init the related mux interface*/
++ if (!(bvd_ipc = kzalloc(sizeof(struct ipc_usb_data), GFP_KERNEL))) {
++ err("usb_ipc_init: Out of memory.");
++ usb_deregister(&usb_ipc_driver);
++ return -ENOMEM;
++ }
++ bvd_dbg("usb_ipc_init: Address of bvd_ipc:%p", bvd_ipc);
++
++ if (!(bvd_ipc->xmit.buf = kmalloc(IPC_USB_XMIT_SIZE, GFP_KERNEL))) {
++ err("usb_ipc_init: Not enough memory for the input buffer.");
++ kfree(bvd_ipc);
++ usb_deregister(&usb_ipc_driver);
++ return -ENOMEM;
++ }
++ bvd_dbg("usb_ipc_init: bvd_ipc->xmit.buf address:%p",
++ bvd_ipc->xmit.buf);
++ bvd_ipc->ipc_dev = NULL;
++ bvd_ipc->xmit.head = bvd_ipc->xmit.tail = 0;
++ bvd_ipc->write_flag = IPC_USB_WRITE_INIT;
++
++ ipcusb_tty_driver.write = usb_ipc_write;
++ ipcusb_tty_driver.chars_in_buffer = usb_ipc_chars_in_buffer;
++
++ usb_for_mux_driver = &ipcusb_tty_driver;
++ usb_for_mux_tty = &ipcusb_tty;
++
++ /* init timers for ipcusb read process and usb suspend */
++ init_timer(&ipcusb_timer);
++ ipcusb_timer.function = ipcusb_timeout;
++
++ init_timer(&suspend_timer);
++ suspend_timer.function = suspend_timeout;
++
++ init_timer(&wakeup_timer);
++ wakeup_timer.function = wakeup_timeout;
++
++ info("USB Host(Bulverde) IPC driver registered.");
++ info(DRIVER_VERSION ":" DRIVER_DESC);
++
++ return 0;
++}
++
++static void __exit usb_ipc_exit(void)
++{
++ bvd_dbg("cleanup bvd_ipc");
++
++ kfree(bvd_ipc->xmit.buf);
++ kfree(bvd_ipc);
++ usb_deregister(&usb_ipc_driver);
++
++ info("USB Host(Bulverde) IPC driver deregistered.");
++}
++
++module_init(usb_ipc_init);
++module_exit(usb_ipc_exit);
++EXPORT_SYMBOL(usb_send_readurb);
+Index: linux-2.6.24/drivers/char/ts0710_mux_usb.h
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/char/ts0710_mux_usb.h
+@@ -0,0 +1,29 @@
++/*
++ * linux/drivers/usb/ipcusb.h
++ *
++ * Implementation of a ipc driver based Intel's Bulverde USB Host
++ * Controller.
++ *
++ * Copyright (C) 2003-2005 Motorola
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * 2003-Nov-18 - (Motorola) created
++ *
++ */
++extern struct tty_driver *usb_for_mux_driver;
++extern struct tty_struct *usb_for_mux_tty;
++extern void (*usb_mux_dispatcher)(struct tty_struct *tty);
++extern void (*usb_mux_sender)(void);
diff --git a/packages/linux/linux-ezx-2.6.24/patches/mux_debug.patch b/packages/linux/linux-ezx-2.6.24/patches/mux_debug.patch
new file mode 100644
index 0000000000..58cb25a0b6
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/mux_debug.patch
@@ -0,0 +1,551 @@
+Index: linux-2.6.20.7/drivers/char/ts0710_mux.c
+===================================================================
+--- linux-2.6.20.7.orig/drivers/char/ts0710_mux.c 2007-04-22 12:24:18.000000000 +0200
++++ linux-2.6.20.7/drivers/char/ts0710_mux.c 2007-04-22 12:26:47.000000000 +0200
+@@ -85,6 +85,9 @@
+ #include "ts0710.h"
+ #include "ts0710_mux.h"
+
++#define TS0710DEBUG
++#define PRINT_OUTPUT_PRINTK
++
+ #define TS0710MUX_GPRS_SESSION_MAX 2
+ #define TS0710MUX_MAJOR 250
+ #define TS0710MUX_MINOR_START 0
+@@ -316,7 +319,7 @@
+ #ifdef TS0710DEBUG
+
+ #ifdef PRINT_OUTPUT_PRINTK
+-#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX " __FUNCTION__ ": " fmt "\n" , ## arg)
++#define TS0710_DEBUG(fmt, arg...) printk(KERN_INFO "MUX %s: " fmt "\n" , __func__, ## arg)
+ #else
+ #include "ezxlog.h"
+ static __u8 strDebug[256];
+@@ -530,10 +533,10 @@
+ if (strncmp(p->comm, "aplogd", 6) == 0) {
+ sig = 1;
+ if (send_sig(SIGUSR2, p, 1) == 0) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX: success to send SIGUSR2 to aplogd!\n");
+ } else {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX: failure to send SIGUSR2 to aplogd!\n");
+ }
+ break;
+@@ -542,7 +545,7 @@
+ read_unlock(&tasklist_lock);
+
+ if (!sig) {
+- TS0710_PRINTK("MUX: not found aplogd!\n");
++ TS0710_DEBUG("MUX: not found aplogd!\n");
+ }
+ }
+ #else
+@@ -559,11 +562,11 @@
+ buf[len + 1] = TS0710_BASIC_FLAG;
+
+ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX basic_write: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n");
+
+ #ifndef USB_FOR_MUX
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX basic_write: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n");
+ TS0710_SIG2APLOGD();
+ #endif
+@@ -577,7 +580,7 @@
+ res = COMM_FOR_MUX_DRIVER->write(COMM_FOR_MUX_TTY, buf, len + 2);
+
+ if (res != len + 2) {
+- TS0710_PRINTK("MUX basic_write: Write Error!\n");
++ TS0710_DEBUG("MUX basic_write: Write Error!\n");
+ return -1;
+ }
+
+@@ -601,7 +604,7 @@
+ TS0710_DEBUG("crc_check: CRC check OK\n");
+ return 0;
+ } else {
+- TS0710_PRINTK("MUX crc_check: CRC check failed\n");
++ TS0710_DEBUG("MUX crc_check: CRC check failed\n");
+ return 1;
+ }
+ }
+@@ -1266,7 +1269,7 @@
+ break;
+
+ case FCON: /*Flow control on command */
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Received Flow control(all channels) on command\n");
+ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
+ ts0710->dlci[0].state = CONNECTED;
+@@ -1276,7 +1279,7 @@
+ break;
+
+ case FCOFF: /*Flow control off command */
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Received Flow control(all channels) off command\n");
+ if (mcc_short_pkt->h.type.cr == MCC_CMD) {
+ for (j = 0; j < TS0710_MAX_CHN; j++) {
+@@ -1823,7 +1826,7 @@
+ TS0710_DEBUG("UIH on channel %d\n", dlci);
+
+ if (uih_len > ts0710->dlci[dlci].mtu) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: DLCI:%d, uih_len:%d is bigger than mtu:%d, discard data!\n",
+ dlci, uih_len, ts0710->dlci[dlci].mtu);
+ break;
+@@ -1844,7 +1847,7 @@
+ dlci, tty_idx);
+ TS0710_DEBUGSTR(uih_data_start, uih_len);
+ if (!(iscmdtty[tty_idx])) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: %s: Wrong CMDTAG on DLCI:%d, /dev/mux%d\n",
+ __FUNCTION__, dlci, tty_idx);
+ }
+@@ -1856,7 +1859,7 @@
+ ("NON-CMDTAG on DLCI:%d, /dev/mux%d\n",
+ dlci, tty_idx);
+ if (iscmdtty[tty_idx]) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: %s: Wrong NON-CMDTAG on DLCI:%d, /dev/mux%d\n",
+ __FUNCTION__, dlci, tty_idx);
+ }
+@@ -1864,13 +1867,14 @@
+ }
+ tty = mux_table[tty_idx];
+ if ((!mux_tty[tty_idx]) || (!tty)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX: No application waiting for, discard it! /dev/mux%d\n",
+ tty_idx);
++ TS0710_DEBUG("MUX: mux_tty[%d] = %d, tty is at %i", tty_idx, mux_tty[tty_idx], tty);
+ } else { /* Begin processing received data */
+ if ((!mux_recv_info_flags[tty_idx])
+ || (!mux_recv_info[tty_idx])) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: No mux_recv_info, discard it! /dev/mux%d\n",
+ tty_idx);
+ break;
+@@ -1878,7 +1882,7 @@
+
+ recv_info = mux_recv_info[tty_idx];
+ if (recv_info->total > 8192) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX : discard data for tty_idx:%d, recv_info->total > 8192 \n",
+ tty_idx);
+ break;
+@@ -1949,7 +1953,7 @@
+ get_mux_recv_packet
+ (uih_len);
+ if (!recv_packet) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX %s: no memory\n",
+ __FUNCTION__);
+ break;
+@@ -1980,7 +1984,7 @@
+ } else { /* recv_info->total == 0 */
+ if (uih_len >
+ TS0710MUX_RECV_BUF_SIZE) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: tty_idx:%d, uih_len == %d is too big\n",
+ tty_idx, uih_len);
+ uih_len =
+@@ -2120,12 +2124,12 @@
+ if (ts0710->dlci[dlci].state == DISCONNECTED) {
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI %d Send DISC got signal!\n",
+ dlci);
+ break;
+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI %d Send DISC timeout!\n", dlci);
+ continue;
+ }
+@@ -2158,7 +2162,7 @@
+ return 0;
+ } else if (ts0710->dlci[0].state == CONNECTING) {
+ /* Reentry */
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI: 0, reentry to open DLCI 0, pid: %d, %s !\n",
+ current->pid, current->comm);
+ try = 11;
+@@ -2179,13 +2183,13 @@
+ DISCONNECTED) {
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Wait for connecting got signal!\n",
+ dlci);
+ retval = -EAGAIN;
+ break;
+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Wait for connecting timeout!\n",
+ dlci);
+ continue;
+@@ -2199,7 +2203,7 @@
+ }
+ } else if ((ts0710->dlci[0].state != DISCONNECTED)
+ && (ts0710->dlci[0].state != REJECTED)) {
+- TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci);
++ TS0710_DEBUG("MUX DLCI:%d state is invalid!\n", dlci);
+ return retval;
+ } else {
+ ts0710->initiator = 1;
+@@ -2218,19 +2222,19 @@
+ retval = 0;
+ break;
+ } else if (ts0710->dlci[0].state == REJECTED) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM got rejected!\n",
+ dlci);
+ retval = -EREJECTED;
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM got signal!\n",
+ dlci);
+ retval = -EAGAIN;
+ break;
+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM timeout!\n",
+ dlci);
+ continue;
+@@ -2271,13 +2275,13 @@
+ DISCONNECTED) {
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Wait for connecting got signal!\n",
+ dlci);
+ retval = -EAGAIN;
+ break;
+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Wait for connecting timeout!\n",
+ dlci);
+ continue;
+@@ -2296,7 +2300,7 @@
+ }
+ } else if ((ts0710->dlci[dlci].state != DISCONNECTED)
+ && (ts0710->dlci[dlci].state != REJECTED)) {
+- TS0710_PRINTK("MUX DLCI:%d state is invalid!\n", dlci);
++ TS0710_DEBUG("MUX DLCI:%d state is invalid!\n", dlci);
+ return retval;
+ } else {
+ ts0710->dlci[dlci].state = NEGOTIATING;
+@@ -2313,13 +2317,13 @@
+ if (ts0710->dlci[dlci].state == CONNECTING) {
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send pn_msg got signal!\n",
+ dlci);
+ retval = -EAGAIN;
+ break;
+ } else if ((jiffies - t) >= TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send pn_msg timeout!\n",
+ dlci);
+ continue;
+@@ -2344,20 +2348,20 @@
+ break;
+ } else if (ts0710->dlci[dlci].state ==
+ REJECTED) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM got rejected!\n",
+ dlci);
+ retval = -EREJECTED;
+ break;
+ } else if (signal_pending(current)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM got signal!\n",
+ dlci);
+ retval = -EAGAIN;
+ break;
+ } else if ((jiffies - t) >=
+ TS0710MUX_TIME_OUT) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX DLCI:%d Send SABM timeout!\n",
+ dlci);
+ continue;
+@@ -2468,7 +2472,7 @@
+ schedule_work(&send_tqueue);
+ #else
+ if (!tq_serial_for_mux) {
+- TS0710_PRINTK("MUX Error: %s: tq_serial_for_mux == 0\n",
++ TS0710_DEBUG("MUX Error: %s: tq_serial_for_mux == 0\n",
+ __FUNCTION__);
+ return;
+ }
+@@ -2508,7 +2512,7 @@
+ if ((mux_tty[cmdtty] == 0) && (mux_tty[datatty] == 0)) {
+ if (dlci == 1) {
+ ts0710_close_channel(0);
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX mux_close: tapisrv might be down!!! Close DLCI 1\n");
+ TS0710_SIG2APLOGD();
+ }
+@@ -2673,12 +2677,12 @@
+ UNUSED_PARAM(tty);
+
+ if ((COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n",
+ __FUNCTION__);
+
+ #ifndef USB_FOR_MUX
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n",
+ __FUNCTION__);
+ TS0710_SIG2APLOGD();
+@@ -2724,14 +2728,14 @@
+ } else if (ts0710->dlci[dlci].state == CONNECTED) {
+
+ if (!(mux_send_info_flags[line])) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: mux_write: mux_send_info_flags[%d] == 0\n",
+ line);
+ return -ENODEV;
+ }
+ send_info = mux_send_info[line];
+ if (!send_info) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: mux_write: mux_send_info[%d] == 0\n",
+ line);
+ return -ENODEV;
+@@ -2800,7 +2804,7 @@
+ }
+ return c;
+ } else {
+- TS0710_PRINTK("MUX mux_write: DLCI %d not connected\n", dlci);
++ TS0710_DEBUG("MUX mux_write: DLCI %d not connected\n", dlci);
+ return -EDISCONNECTED;
+ }
+ }
+@@ -2940,7 +2944,7 @@
+ return;
+ }
+
+- TS0710_PRINTK("MUX %s: line is:%d\n", __FUNCTION__, line);
++ TS0710_DEBUG("MUX %s: line is:%d\n", __FUNCTION__, line);
+
+ if ((mux_send_info_flags[line])
+ && (mux_send_info[line])
+@@ -2960,10 +2964,10 @@
+
+ /*
+ if( (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0) ) {
+- TS0710_PRINTK("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__);
++ TS0710_DEBUG("MUX %s: (COMM_FOR_MUX_DRIVER == 0) || (COMM_FOR_MUX_TTY == 0)\n", __FUNCTION__);
+
+ #ifndef USB_FOR_MUX
+- TS0710_PRINTK("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__);
++ TS0710_DEBUG("MUX %s: tapisrv might be down!!! (serial_for_mux_driver == 0) || (serial_for_mux_tty == 0)\n", __FUNCTION__);
+ TS0710_SIG2APLOGD();
+ #endif
+
+@@ -2989,9 +2993,9 @@
+ if ((COMM_FOR_MUX_DRIVER == NULL) || (COMM_FOR_MUX_TTY == NULL)) {
+
+ #ifdef USB_FOR_MUX
+- TS0710_PRINTK("MUX: please install and open IPC-USB first\n");
++ TS0710_DEBUG("MUX: please install and open IPC-USB first\n");
+ #else
+- TS0710_PRINTK("MUX: please install and open ttyS0 first\n");
++ TS0710_DEBUG("MUX: please install and open ttyS0 first\n");
+ #endif
+
+ goto out;
+@@ -3016,7 +3020,7 @@
+ /* if( dlci == 1 ) { */
+ /* Open server channel 0 first */
+ if ((retval = ts0710_open_channel(0)) != 0) {
+- TS0710_PRINTK("MUX: Can't connect server channel 0!\n");
++ TS0710_DEBUG("MUX: Can't connect server channel 0!\n");
+ ts0710_init();
+
+ mux_tty[line]--;
+@@ -3073,7 +3077,7 @@
+ datatty = dlci2tty[dlci].datatty;
+ if ((mux_tty[cmdtty] > 0) || (mux_tty[datatty] > 0)) {
+ if ((retval = ts0710_open_channel(dlci)) != 0) {
+- TS0710_PRINTK("MUX: Can't connected channel %d!\n",
++ TS0710_DEBUG("MUX: Can't connected channel %d!\n",
+ dlci);
+ ts0710_reset_dlci(dlci);
+
+@@ -3096,6 +3100,7 @@
+ retval = 0;
+ #endif
+ out:
++ TS0710_DEBUG("returning %d for open of /dev/mux%d (mux_tty[%d] = %d", retval, line, line, mux_tty[line]);
+ return retval;
+ }
+
+@@ -3178,12 +3183,12 @@
+
+ while (1) {
+ tbuf_free = TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf);
+- TS0710_PRINTK("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free);
++ TS0710_DEBUG("Reading max %i bytes from ts0710_mux_usb inbuf.\n", tbuf_free);
+ tbuf_read = get_from_inbuf_list(tbuf_ptr, tbuf_free);
+ if (tbuf_read == 0) {
+ break;
+ } else {
+- TS0710_PRINTK("Read %i bytes.\n", tbuf_read);
++ TS0710_DEBUG("Read %i bytes.\n", tbuf_read);
+ };
+ tbuf_ptr += tbuf_read;
+ };
+@@ -3192,7 +3197,7 @@
+
+ // Should be impossible?
+ //if (count > (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf))) {
+- // TS0710_PRINTK
++ // TS0710_DEBUG
+ // ("MUX receive_worker: !!!!! Exceed buffer boundary !!!!!\n");
+ // count = (TS0710MUX_MAX_BUF_SIZE - (tbuf_ptr - tbuf));
+ //}
+@@ -3264,7 +3269,7 @@
+ TS0710_LOGSTR_FRAME(0, start_flag,
+ (tbuf_ptr -
+ start_flag));
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: %s: frame length:%d is bigger than Max total frame size:%d\n",
+ /*__FUNCTION__, framelen, TS0710MUX_MAX_TOTAL_FRAME_SIZE);*/
+ __FUNCTION__, framelen, (TS0710MUX_MAX_TOTAL_FRAME_SIZE + SEQ_FIELD_SIZE)); /*For BP UART problem */
+@@ -3389,7 +3394,7 @@
+ *(uih_data_start
+ + uih_len) =
+ 0;
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX bp log: %s\n",
+ uih_data_start);
+ }
+@@ -3415,7 +3420,7 @@
+ TS0710_LOGSTR_FRAME(0, start_flag,
+ framelen);
+ TS0710_DEBUGHEX(start_flag, framelen);
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX: Lost synchronization!\n");
+ search = start_flag + 1;
+ }
+@@ -3476,7 +3481,7 @@
+ recv_info2 = recv_info->next;
+
+ if (!(recv_info->total)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: %s: Should not get here, recv_info->total == 0 \n",
+ __FUNCTION__);
+ continue;
+@@ -3486,7 +3491,7 @@
+ dlci = tty2dlci[tty_idx];
+ tty = mux_table[tty_idx];
+ if ((!mux_tty[tty_idx]) || (!tty)) {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX: No application waiting for, free recv_info! tty_idx:%d\n",
+ tty_idx);
+ mux_recv_info_flags[tty_idx] = 0;
+@@ -3560,7 +3565,7 @@
+ recv_info->total -= recv_packet->length;
+ free_mux_recv_packet(recv_packet);
+ } else {
+- TS0710_PRINTK
++ TS0710_DEBUG
+ ("MUX Error: %s: Should not get here, recv_info->total is:%u \n",
+ __FUNCTION__, recv_info->total);
+ }
+@@ -3760,7 +3765,7 @@
+ int ret;
+
+ if (idx > TS0710MUX_COUNT_MAX_IDX) {
+- TS0710_PRINTK("MUX get_count: invalid idx: %d!\n", idx);
++ TS0710_DEBUG("MUX get_count: invalid idx: %d!\n", idx);
+ return -1;
+ }
+
+@@ -3774,11 +3779,11 @@
+ static int set_count(__u8 idx, int count)
+ {
+ if (idx > TS0710MUX_COUNT_MAX_IDX) {
+- TS0710_PRINTK("MUX set_count: invalid idx: %d!\n", idx);
++ TS0710_DEBUG("MUX set_count: invalid idx: %d!\n", idx);
+ return -1;
+ }
+ if (count < 0) {
+- TS0710_PRINTK("MUX set_count: invalid count: %d!\n", count);
++ TS0710_DEBUG("MUX set_count: invalid count: %d!\n", count);
+ return -1;
+ }
+
+@@ -3792,11 +3797,11 @@
+ static int add_count(__u8 idx, int count)
+ {
+ if (idx > TS0710MUX_COUNT_MAX_IDX) {
+- TS0710_PRINTK("MUX add_count: invalid idx: %d!\n", idx);
++ TS0710_DEBUG("MUX add_count: invalid idx: %d!\n", idx);
+ return -1;
+ }
+ if (count <= 0) {
+- TS0710_PRINTK("MUX add_count: invalid count: %d!\n", count);
++ TS0710_DEBUG("MUX add_count: invalid count: %d!\n", count);
+ return -1;
+ }
+
+Index: linux-2.6.20.7/drivers/char/ts0710_mux_usb.c
+===================================================================
+--- linux-2.6.20.7.orig/drivers/char/ts0710_mux_usb.c 2007-04-22 12:26:47.000000000 +0200
++++ linux-2.6.20.7/drivers/char/ts0710_mux_usb.c 2007-04-22 12:26:47.000000000 +0200
+@@ -72,7 +72,8 @@
+ #define IPC_USB_PROBE_NOT_READY 4
+ #define DBG_MAX_BUF_SIZE 1024
+ #define ICL_EVENT_INTERVAL (HZ)
+-#undef BVD_DEBUG
++
++#define BVD_DEBUG
+
+ #define IS_EP_BULK(ep) ((ep).bmAttributes == USB_ENDPOINT_XFER_BULK ? 1 : 0)
+ #define IS_EP_BULK_IN(ep) (IS_EP_BULK(ep) && ((ep).bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN)
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pcap-ts.patch b/packages/linux/linux-ezx-2.6.24/patches/pcap-ts.patch
new file mode 100644
index 0000000000..47cc1a36bb
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pcap-ts.patch
@@ -0,0 +1,363 @@
+Index: linux-2.6.24/drivers/input/touchscreen/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/input/touchscreen/Kconfig
++++ linux-2.6.24/drivers/input/touchscreen/Kconfig
+@@ -263,4 +263,13 @@
+ bool "GoTop Super_Q2/GogoPen/PenPower tablet device support" if EMBEDDED
+ depends on TOUCHSCREEN_USB_COMPOSITE
+
++config TOUCHSCREEN_PCAP
++ tristate "Motorola PCAP touchscreen"
++ depends on EZX_PCAP
++ help
++ Say Y here if you have a Motorola EZX telephone and
++ want to support the built-in touchscreen.
++
++ If unsure, say N.
++
+ endif
+Index: linux-2.6.24/drivers/input/touchscreen/pcap_ts.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/input/touchscreen/pcap_ts.c
+@@ -0,0 +1,331 @@
++/*
++ * pcap_ts.c - Touchscreen driver for Motorola PCAP2 based touchscreen as found
++ * in the EZX phone platform.
++ *
++ * Copyright (C) 2006 Harald Welte <laforge@openezx.org>
++ * Copyright (C) 2007 Daniel Ribeiro <wyrm@openezx.org>
++ *
++ * Based on information found in the original Motorola 2.4.x ezx-ts.c driver.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * TODO:
++ * split this in a hardirq handler and a tasklet/bh
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/fs.h>
++#include <linux/string.h>
++#include <linux/pm.h>
++#include <linux/timer.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <linux/input.h>
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx-pcap.h>
++
++#if 0
++#define DEBUGP(x, args ...) printk(x, ## args)
++#else
++#define DEBUGP(x, args ...)
++#endif
++
++#define POSITION_X_MEASUREMENT 0
++#define POSITION_XY_MEASUREMENT 1
++#define PRESSURE_MEASUREMENT 2
++#define PLATE_X_MEASUREMENT 3
++#define PLATE_Y_MEASUREMENT 4
++#define STANDBY_MODE 5
++#define NONTS_MODE 6
++
++struct pcap_ts {
++ int irq_xy;
++ int irq_touch;
++ struct input_dev *input;
++ struct timer_list timer;
++ u_int16_t x, y;
++ u_int16_t pressure;
++ u_int8_t read_state;
++};
++
++#define X_AXIS_MIN 0
++#define X_AXIS_MAX 1023
++
++#define Y_AXIS_MAX X_AXIS_MAX
++#define Y_AXIS_MIN X_AXIS_MIN
++
++#define PRESSURE_MAX X_AXIS_MAX
++#define PRESSURE_MIN X_AXIS_MIN
++
++/* if we try to read faster, pressure reading becomes unreliable */
++#define SAMPLE_INTERVAL (HZ/50)
++
++
++static void pcap_ts_mode(struct pcap_ts *pcap_ts, u_int32_t mode)
++{
++ u_int32_t tmp;
++
++ pcap_ts->read_state = mode;
++ ezx_pcap_read(PCAP_REG_ADC1, &tmp);
++ tmp &= ~PCAP_ADC1_TS_M_MASK;
++ tmp |= ((mode << PCAP_ADC1_TS_M_SHIFT) & PCAP_ADC1_TS_M_MASK);
++ ezx_pcap_write(PCAP_REG_ADC1, tmp);
++}
++
++/* issue a XY read command to the ADC of PCAP2. Well get an ADCDONE interrupt
++ * once the result of the conversion is available */
++static void pcap_ts_start_xy_read(struct pcap_ts *pcap_ts)
++{
++ u_int32_t tmp;
++
++ ezx_pcap_read(PCAP_REG_ADC1, &tmp);
++ tmp &= ~(PCAP_BIT_ADC1_RAND | PCAP_ADC1_ADA1_MASK |
++ PCAP_ADC1_ADA2_MASK);
++ tmp |= (PCAP_BIT_ADC1_ADEN | PCAP_BIT_ADC1_AD_SEL1 |
++ PCAP_BIT_ADC1_AD_SEL2 | (5 << PCAP_ADC1_ADA1_SHIFT) |
++ (3 << PCAP_ADC1_ADA2_SHIFT));
++ ezx_pcap_write(PCAP_REG_ADC1, tmp);
++ ezx_pcap_bit_set(PCAP_BIT_ADC2_ASC, 1);
++}
++
++/* read the XY result from the ADC of PCAP2 */
++static void pcap_ts_get_xy_value(struct pcap_ts *pcap_ts)
++{
++ u_int32_t tmp;
++
++ ezx_pcap_read(PCAP_REG_ADC2, &tmp);
++
++ if (pcap_ts->read_state == POSITION_XY_MEASUREMENT) {
++ pcap_ts->x = (tmp & PCAP_ADC2_ADD1_MASK) >>
++ PCAP_ADC2_ADD1_SHIFT;
++ pcap_ts->y = (tmp & PCAP_ADC2_ADD2_MASK) >>
++ PCAP_ADC2_ADD2_SHIFT;
++ } else {
++ pcap_ts->pressure = (tmp & PCAP_ADC2_ADD2_MASK) >>
++ PCAP_ADC2_ADD2_SHIFT;
++ }
++}
++
++/* PCAP2 interrupts us when ADC conversion result is available */
++static irqreturn_t pcap_ts_irq_xy(int irq, void *dev_id)
++{
++ struct pcap_ts *pcap_ts = dev_id;
++
++ pcap_ts_get_xy_value(pcap_ts);
++ DEBUGP(KERN_DEBUG "%s X=%4d, Y=%4d Z=%4d ",
++ pcap_ts->read_state == POSITION_XY_MEASUREMENT ? "COORD" :
++ "PRESS", pcap_ts->x, pcap_ts->y, pcap_ts->pressure);
++ switch (pcap_ts->read_state) {
++ case PRESSURE_MEASUREMENT:
++ if (pcap_ts->pressure >= PRESSURE_MAX ||
++ pcap_ts->pressure <= PRESSURE_MIN ) {
++ /* pen has been released (or cant read pressure - WM)*/
++ DEBUGP("UP\n");
++ /* do nothing */
++ } else {
++ /* pen has been touched down */
++ DEBUGP("DOWN\n");
++ input_report_key(pcap_ts->input, BTN_TOUCH, 1);
++ input_report_abs(pcap_ts->input, ABS_PRESSURE, pcap_ts->pressure);
++ }
++ /* switch state machine into coordinate read mode */
++ pcap_ts_mode(pcap_ts, POSITION_XY_MEASUREMENT);
++ pcap_ts_start_xy_read(pcap_ts);
++ break;
++ case POSITION_XY_MEASUREMENT:
++ if (pcap_ts->x <= X_AXIS_MIN || pcap_ts->x >= X_AXIS_MAX ||
++ pcap_ts->y <= Y_AXIS_MIN || pcap_ts->y >= Y_AXIS_MAX) {
++ /* pen has been released */
++ DEBUGP("UP END\n");
++
++ input_report_key(pcap_ts->input, BTN_TOUCH, 0);
++ input_report_abs(pcap_ts->input, ABS_PRESSURE, 0);
++
++ /* no need for timer, we'll get interrupted with
++ * next touch down event */
++ del_timer(&pcap_ts->timer);
++
++ /* ask PCAP2 to interrupt us if touch event happens
++ * again */
++ pcap_ts_mode(pcap_ts, STANDBY_MODE);
++ enable_irq(pcap_ts->irq_touch);
++ } else {
++ DEBUGP("DOWN\n");
++ input_report_abs(pcap_ts->input, ABS_X, pcap_ts->x);
++ input_report_abs(pcap_ts->input, ABS_Y, pcap_ts->y);
++
++ /* switch back to pressure read mode */
++ pcap_ts_mode(pcap_ts, PRESSURE_MEASUREMENT);
++ mod_timer(&pcap_ts->timer, jiffies + SAMPLE_INTERVAL);
++ }
++ input_sync(pcap_ts->input);
++ break;
++ default:
++ DEBUGP("ERROR\n");
++ break;
++ }
++ return IRQ_HANDLED;
++}
++
++/* PCAP2 interrupts us if the pen touches down (interrupts also on pen up - WM)*/
++static irqreturn_t pcap_ts_irq_touch(int irq, void *dev_id)
++{
++ struct pcap_ts *pcap_ts = dev_id;
++ /* mask Touchscreen interrupt bit, prevents further touch events
++ * from being reported to us until we're finished with reading
++ * both pressure and x/y from ADC */
++ disable_irq(pcap_ts->irq_touch);
++
++ DEBUGP("touched!!\n");
++ pcap_ts_mode(pcap_ts, PRESSURE_MEASUREMENT);
++ pcap_ts_start_xy_read(pcap_ts);
++ return IRQ_HANDLED;
++}
++
++static void pcap_ts_timer_fn(unsigned long data)
++{
++ struct pcap_ts *pcap_ts = (struct pcap_ts *) data;
++
++ pcap_ts_start_xy_read(pcap_ts);
++}
++
++static int __init ezxts_probe(struct platform_device *pdev)
++{
++ struct pcap_ts *pcap_ts;
++ struct input_dev *input_dev;
++ int err = -ENOMEM;
++
++ pcap_ts = kzalloc(sizeof(*pcap_ts), GFP_KERNEL);
++ input_dev = input_allocate_device();
++ if (!pcap_ts || !input_dev)
++ goto fail;
++
++ pcap_ts->irq_xy = platform_get_irq(pdev, 0);
++ if (pcap_ts->irq_xy < 0) {
++ err = pcap_ts->irq_xy;
++ goto fail;
++ }
++
++ pcap_ts->irq_touch = platform_get_irq(pdev, 1);
++ if (pcap_ts->irq_touch < 0) {
++ err = pcap_ts->irq_touch;
++ goto fail;
++ }
++
++ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REFENB, 0);
++ pcap_ts_mode(pcap_ts, STANDBY_MODE);
++
++ err = request_irq(pcap_ts->irq_xy, pcap_ts_irq_xy, IRQF_DISABLED,
++ "pcap-ts X/Y", pcap_ts);
++ if (err < 0) {
++ printk(KERN_ERR "pcap_ts: can't grab xy irq %d: %d\n",
++ pcap_ts->irq_xy, err);
++ goto fail;
++ }
++
++ err = request_irq(pcap_ts->irq_touch, pcap_ts_irq_touch, IRQF_DISABLED,
++ "pcap-ts touch", pcap_ts);
++ if (err < 0) {
++ printk(KERN_ERR "pcap_ts: can't grab touch irq %d: %d\n",
++ pcap_ts->irq_touch, err);
++ goto fail_xy;
++ }
++
++ pcap_ts->input = input_dev;
++ init_timer(&pcap_ts->timer);
++ pcap_ts->timer.data = (unsigned long) pcap_ts;
++ pcap_ts->timer.function = &pcap_ts_timer_fn;
++
++ platform_set_drvdata(pdev, pcap_ts);
++
++ input_dev->name = "pcap-touchscreen";
++ input_dev->phys = "ezxts/input0";
++ input_dev->id.bustype = BUS_HOST;
++ input_dev->id.vendor = 0x0001;
++ input_dev->id.product = 0x0002;
++ input_dev->id.version = 0x0100;
++ input_dev->cdev.dev = &pdev->dev;
++ input_dev->private = pcap_ts;
++
++ input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
++ input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
++ input_set_abs_params(input_dev, ABS_X, X_AXIS_MIN, X_AXIS_MAX, 0, 0);
++ input_set_abs_params(input_dev, ABS_Y, Y_AXIS_MIN, Y_AXIS_MAX, 0, 0);
++ input_set_abs_params(input_dev, ABS_PRESSURE, PRESSURE_MIN,
++ PRESSURE_MAX, 0, 0);
++
++ input_register_device(pcap_ts->input);
++
++ return 0;
++
++fail_xy:
++ free_irq(pcap_ts->irq_xy, pcap_ts);
++fail:
++ input_free_device(input_dev);
++ kfree(pcap_ts);
++
++ return err;
++}
++
++static int ezxts_remove(struct platform_device *pdev)
++{
++ struct pcap_ts *pcap_ts = platform_get_drvdata(pdev);
++
++ del_timer_sync(&pcap_ts->timer);
++
++ free_irq(pcap_ts->irq_touch, pcap_ts);
++ free_irq(pcap_ts->irq_xy, pcap_ts);
++
++ input_unregister_device(pcap_ts->input);
++ kfree(pcap_ts);
++
++ return 0;
++}
++
++static int ezxts_suspend(struct platform_device *dev, pm_message_t state)
++{
++ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REF_LOWPWR, 1);
++ return 0;
++}
++
++static int ezxts_resume(struct platform_device *dev)
++{
++ ezx_pcap_bit_set(PCAP_BIT_ADC1_TS_REF_LOWPWR, 0);
++ /* just in case we suspend with TSI masked. */
++// ezx_pcap_bit_set(PCAP_BIT_MSR_TSM, 0);
++ return 0;
++}
++
++
++static struct platform_driver ezxts_driver = {
++ .probe = ezxts_probe,
++ .remove = ezxts_remove,
++ .suspend = ezxts_suspend,
++ .resume = ezxts_resume,
++ .driver = {
++ .name = "pcap-ts",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init ezxts_init(void)
++{
++ return platform_driver_register(&ezxts_driver);
++}
++
++static void __exit ezxts_exit(void)
++{
++ platform_driver_unregister(&ezxts_driver);
++}
++
++module_init(ezxts_init);
++module_exit(ezxts_exit);
++
++MODULE_DESCRIPTION("Motorola PCAP2 touchscreen driver");
++MODULE_AUTHOR("Harald Welte <laforge@openezx.org>");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.24/drivers/input/touchscreen/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/input/touchscreen/Makefile
++++ linux-2.6.24/drivers/input/touchscreen/Makefile
+@@ -19,3 +19,4 @@
+ obj-$(CONFIG_TOUCHSCREEN_TOUCHRIGHT) += touchright.o
+ obj-$(CONFIG_TOUCHSCREEN_TOUCHWIN) += touchwin.o
+ obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o
++obj-$(CONFIG_TOUCHSCREEN_PCAP) += pcap_ts.o
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxa-kbd.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa-kbd.patch
new file mode 100644
index 0000000000..d272a701ba
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pxa-kbd.patch
@@ -0,0 +1,547 @@
+Index: linux-2.6.24/arch/arm/mach-pxa/generic.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/generic.c
++++ linux-2.6.24/arch/arm/mach-pxa/generic.c
+@@ -38,6 +38,7 @@
+ #include <asm/arch/mmc.h>
+ #include <asm/arch/irda.h>
+ #include <asm/arch/i2c.h>
++#include <asm/arch/kbd.h>
+
+ #include "devices.h"
+ #include "generic.h"
+@@ -479,3 +480,28 @@
+ .name = "sa1100-rtc",
+ .id = -1,
+ };
++
++static struct resource pxa_kbd_resources[] = {
++ {
++ .start = IRQ_KEYPAD,
++ .end = IRQ_KEYPAD,
++ .flags = IORESOURCE_IRQ,
++ }, {
++ .start = 0x41500000,
++ .end = 0x4150004c,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++struct platform_device pxa_device_kbd = {
++ .name = "pxa-keyboard",
++ .id = -1,
++ .resource = pxa_kbd_resources,
++ .num_resources = ARRAY_SIZE(pxa_kbd_resources),
++};
++
++void __init pxa_set_kbd_info(struct pxakbd_platform_data *info)
++{
++ pxa_device_kbd.dev.platform_data = info;
++}
++
+Index: linux-2.6.24/drivers/input/keyboard/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/input/keyboard/Kconfig
++++ linux-2.6.24/drivers/input/keyboard/Kconfig
+@@ -293,4 +293,11 @@
+ To compile this driver as a module, choose M here: the
+ module will be called bf54x-keys.
+
++config KEYBOARD_PXA
++ tristate "Intel PXA keyboard support"
++ depends on ARCH_PXA
++ help
++ This add support for a driver of the Intel PXA2xx keyboard
++ controller.
++
+ endif
+Index: linux-2.6.24/drivers/input/keyboard/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/input/keyboard/Makefile
++++ linux-2.6.24/drivers/input/keyboard/Makefile
+@@ -25,3 +25,4 @@
+ obj-$(CONFIG_KEYBOARD_HP7XX) += jornada720_kbd.o
+ obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o
+ obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o
++obj-$(CONFIG_KEYBOARD_PXA) += pxakbd.o
+Index: linux-2.6.24/include/asm-arm/arch-pxa/kbd.h
+===================================================================
+--- /dev/null
++++ linux-2.6.24/include/asm-arm/arch-pxa/kbd.h
+@@ -0,0 +1,28 @@
++/*
++ * kbd_pxa.h
++ *
++ * Copyright (C) 2006 Harald Welte <laforge@openezx.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++#ifndef _KBD_PXA_H_
++#define _KBD_PXA_H_
++
++struct pxakbd_platform_data {
++ int (*init)(void); /* init gpio, etc. */
++ unsigned int scan_interval;
++ struct {
++ unsigned int rows;
++ unsigned int cols;
++ unsigned char *keycode;
++ } matrix;
++ struct {
++ unsigned int num;
++ unsigned char *keycode;
++ } direct;
++};
++
++#endif
+Index: linux-2.6.24/drivers/input/keyboard/pxakbd.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/input/keyboard/pxakbd.c
+@@ -0,0 +1,403 @@
++/*
++ * Driver for Motorola EZX phone "keyboard"
++ *
++ * (C) 2006 by Harald Welte <laforge@openezx.org>
++ *
++ * May, 2007 - Daniel Ribeiro <wyrm@openezx.org>
++ * pm callbacks
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/interrupt.h>
++#include <linux/input.h>
++#include <linux/spinlock.h>
++#include <linux/platform_device.h>
++
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++
++#include <asm/arch/kbd.h>
++#include <asm/arch/irqs.h>
++#include <asm/arch/pxa-regs.h>
++
++#if 0
++#define DEBUGP(x, args ...) printk(x, ## args)
++#else
++#define DEBUGP(x, args ...)
++#endif
++
++/* per-keyboard private data structure */
++struct pxakbd {
++ struct input_dev *input;
++ struct timer_list timer;
++ spinlock_t lock;
++
++ struct resource *res;
++ unsigned int irq;
++ u_int32_t kpc;
++ u_int32_t kpkdi;
++
++ struct pxakbd_platform_data *pd;
++};
++
++static int pxakbd_scan_direct(struct pxakbd *pxakbd)
++{
++ u_int32_t kpdk;
++ unsigned int i;
++ int num_pressed = 0;
++
++ kpdk = KPDK & 0x000000ff;
++ for (i = 0; i < pxakbd->pd->direct.num; i++) {
++ int pressed = 0;
++
++ if (kpdk & (1 << i)) {
++ pressed = 1;
++ num_pressed++;
++ DEBUGP("pxakbd: pressed: direct %u\n", i);
++ }
++ if (pxakbd->pd->direct.keycode[i] != KEY_RESERVED) {
++ DEBUGP( "pxakbd: sending to input layer: keycode = %d, pressed = %d\n", pxakbd->pd->direct.keycode[i], pressed );
++ input_report_key(pxakbd->input, pxakbd->pd->direct.keycode[i],
++ pressed);
++ }
++ }
++ return num_pressed;
++}
++
++/* read the full 8x8 matrix from the PXA27x keypad controller */
++static inline void __read_matrix(u_int8_t *matrix)
++{
++ u_int32_t tmp;
++ u_int8_t row;
++
++ /* Fill the matrix by rows */
++
++ tmp = KPASMKP0;
++ for (row=0; row<8; row++) {
++ /* zero the matrix on the first time, then keep ORing */
++ matrix[row] = ((tmp >> row) & 1);
++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 1;
++ }
++
++ tmp = KPASMKP1;
++ for (row=0; row<8; row++) {
++ matrix[row] |= ((tmp >> row) & 1) << 2;
++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 3;
++ }
++
++ tmp = KPASMKP2;
++ for (row=0; row<8; row++) {
++ matrix[row] |= ((tmp >> row) & 1) << 4;
++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 5;
++ }
++
++ tmp = KPASMKP3;
++ for (row=0; row<8; row++) {
++ matrix[row] |= ((tmp >> row) & 1) << 6;
++ matrix[row] |= ((tmp >> (16 + row)) & 1) << 7;
++ }
++}
++
++/* compare current matrix with last, generate 'diff' events */
++static int __cmp_matrix_gen_events(struct pxakbd *pxakbd, u_int8_t *matrix)
++{
++ unsigned int i;
++ int num_pressed = 0;
++
++ /* iterate over the matrix */
++ for (i = 0; i < pxakbd->pd->matrix.rows; i++) {
++ unsigned int j;
++ for (j = 0; j < pxakbd->pd->matrix.cols; j++) {
++ u_int32_t scancode =
++ (i * pxakbd->pd->matrix.cols) + j;
++ int pressed = matrix[i] & (1 << j);
++
++ if (pressed) {
++ DEBUGP("pxakbd: pressed: %u/%u\n", i, j);
++ num_pressed++;
++ }
++
++ input_report_key(pxakbd->input,
++ pxakbd->pd->matrix.keycode[scancode], pressed);
++ }
++ }
++
++ return num_pressed;
++}
++
++/* scan the matrix keypad */
++static int pxakbd_scan_matrix(struct pxakbd *pxakbd)
++{
++ int num_pressed;
++ u_int32_t kpas;
++ u_int8_t matrix[8];
++
++ kpas = KPAS;
++
++ if ((kpas & KPAS_MUKP) == KPAS_MUKP_NONE) {
++ /* no keys pressed */
++ memset(matrix, 0, sizeof(matrix));
++ } else if ((kpas & KPAS_MUKP) == KPAS_MUKP_ONE) {
++ /* one key pressed */
++ u_int8_t row = (kpas & KPAS_RP) >> 4;
++ u_int8_t col = kpas & KPAS_CP;
++
++ if (row == 0x0f || col == 0x0f) {
++ printk(KERN_WARNING "pxakbd: col or row invalid!\n");
++ return -1;
++ }
++
++ /* clear the matrix and set the single pressed key */
++ memset(matrix, 0, sizeof(matrix));
++ matrix[row] |= (1 << col);
++ } else {
++ /* multiple keys pressed */
++ __read_matrix(matrix);
++ }
++
++ num_pressed = __cmp_matrix_gen_events(pxakbd, matrix);
++
++ return num_pressed;
++}
++
++static void pxakbd_timer_callback(unsigned long data)
++{
++ unsigned long flags;
++ struct pxakbd *pxakbd = (struct pxakbd *) data;
++ unsigned int num_pressed;
++
++ spin_lock_irqsave(&pxakbd->lock, flags);
++
++ num_pressed = pxakbd_scan_direct(pxakbd);
++ num_pressed += pxakbd_scan_matrix(pxakbd);
++
++ spin_unlock_irqrestore(&pxakbd->lock, flags);
++
++ /* propagate events up the input stack */
++ input_sync(pxakbd->input);
++}
++
++static irqreturn_t pxakbd_interrupt(int irq, void *dummy)
++{
++ struct pxakbd *pxakbd = dummy;
++ u_int32_t kpc;
++ int handled = 0;
++ int num_pressed = 0;
++
++ /* read and clear interrupt */
++ kpc = KPC;
++
++ if (kpc & KPC_DI) {
++ num_pressed += pxakbd_scan_direct(pxakbd);
++ handled = 1;
++ }
++
++ if (kpc & KPC_MI) {
++ while (KPAS & KPAS_SO) {
++ /* wait for scan to complete beforereading scan regs */
++ cpu_relax();
++ }
++ num_pressed += pxakbd_scan_matrix(pxakbd);
++ handled = 1;
++ }
++
++ /* If any keys are currently pressed, we need to start the timer to detect
++ * key release. */
++ if (num_pressed)
++ mod_timer(&pxakbd->timer, jiffies + pxakbd->pd->scan_interval);
++
++ /* propagate events up the input stack */
++ input_sync(pxakbd->input);
++
++ return IRQ_RETVAL(handled);
++}
++
++static int __init pxakbd_probe(struct platform_device *pdev)
++{
++ struct pxakbd *pxakbd;
++ struct input_dev *input_dev;
++ struct resource *r;
++ int i;
++ int ret = -ENOMEM;
++
++ int rows, cols, n_direct;
++
++ if (!pdev->dev.platform_data) {
++ printk(KERN_ERR "pxakbd: platform data not set\n");
++ ret = -ENODEV;
++ goto out;
++ }
++
++ pxakbd = kzalloc(sizeof(*pxakbd), GFP_KERNEL);
++ if (!pxakbd)
++ goto out;
++
++ input_dev = input_allocate_device();
++ if (!input_dev)
++ goto out_pxa;
++
++ spin_lock_init(&pxakbd->lock);
++ pxakbd->irq = platform_get_irq(pdev, 0);
++ r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!r || pxakbd->irq == NO_IRQ) {
++ printk(KERN_ERR "pxakbd: invalid resources\n");
++ ret = -EBUSY;
++ goto out_idev;
++ }
++
++ pxakbd->input = input_dev;
++ init_timer(&pxakbd->timer);
++ pxakbd->timer.function = pxakbd_timer_callback;
++ pxakbd->timer.data = (unsigned long) pxakbd;
++ pxakbd->pd = pdev->dev.platform_data;
++ pxakbd->res = r;
++
++ rows = pxakbd->pd->matrix.rows;
++ cols = pxakbd->pd->matrix.cols;
++ n_direct = pxakbd->pd->direct.num;
++
++ input_dev->name = "pxa-keyboard";
++ input_dev->phys = "pxakbd/input0";
++ input_dev->id.bustype = BUS_HOST;
++ input_dev->id.vendor = 0x0001;
++ input_dev->id.product = 0x0001;
++ input_dev->id.version = 0x0001;
++ input_dev->cdev.dev = &pdev->dev;
++ input_dev->private = pxakbd;
++
++ input_dev->evbit[0] = BIT(EV_KEY)|BIT(EV_REP);
++
++ input_dev->keycodesize = sizeof(unsigned char);
++ input_dev->keycodemax = (rows*cols)+n_direct;
++ input_dev->keycode = kmalloc(input_dev->keycodemax*input_dev->keycodesize,
++ GFP_KERNEL);
++ if (!input_dev->keycode){
++ ret = -ENOMEM;
++ goto out_idev;
++ }
++
++ memcpy(input_dev->keycode, pxakbd->pd->matrix.keycode, rows*cols);
++
++ memcpy(input_dev->keycode+(rows*cols),
++ pxakbd->pd->direct.keycode,
++ n_direct);
++
++ for (i = 0; i < rows*cols; i++)
++ set_bit(pxakbd->pd->matrix.keycode[i], input_dev->keybit);
++
++ for (i = 0; i < n_direct; i++)
++ set_bit(pxakbd->pd->direct.keycode[i], input_dev->keybit);
++
++ clear_bit(0, input_dev->keybit);
++
++ if (request_irq(pxakbd->irq, pxakbd_interrupt, 0, "pxakbd", pxakbd)) {
++ printk(KERN_ERR "pxakbd: can't request irq %d\n", pxakbd->irq);
++ ret = -EBUSY;
++ goto out_idev;
++ }
++
++ r = request_mem_region(r->start, 0x4c, "pxakbd");
++ if (!r) {
++ printk(KERN_ERR "pxakbd: can't request memregion\n");
++ ret = -EBUSY;
++ goto out_irq;
++ }
++
++ /* set up gpio */
++ pxakbd->pd->init();
++
++ /* set keypad control register */
++ KPC = (KPC_ASACT | /* automatic scan on activity */
++ KPC_ME | KPC_DE | /* matrix and direct keypad enabled */
++ ((pxakbd->pd->matrix.cols-1)<<23) | /* columns */
++ ((pxakbd->pd->matrix.rows-1)<<26) | /* rows */
++ ((pxakbd->pd->direct.num-1)<<6) | /* direct keys */
++ KPC_MS_ALL); /* scan all columns */
++
++ pxa_set_cken(CKEN_KEYPAD, 1);
++
++ KPC |= (KPC_DIE | KPC_MIE); /* enable matrix and direct keyboard */
++
++ KPKDI = 0x40; /* matrix key debounce interval: 0x40 */
++
++ platform_set_drvdata(pdev, pxakbd);
++
++ return input_register_device(pxakbd->input);
++
++out_drvdata:
++ platform_set_drvdata(pdev, NULL);
++out_mem:
++ release_resource(r);
++out_irq:
++ free_irq(pxakbd->irq, pxakbd);
++out_idev:
++ kfree(input_dev->keycode);
++ input_free_device(input_dev);
++out_pxa:
++ kfree(pxakbd);
++out:
++ return ret;
++}
++
++static int pxakbd_remove(struct platform_device *pdev)
++{
++ struct pxakbd *pxakbd = platform_get_drvdata(pdev);
++
++ kfree(pxakbd->input->keycode);
++ input_unregister_device(pxakbd->input);
++ platform_set_drvdata(pdev, NULL);
++ release_resource(pxakbd->res);
++ free_irq(pxakbd->irq, pxakbd);
++ kfree(pxakbd);
++
++ return 0;
++}
++
++static int pxakbd_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct pxakbd *pxakbd = platform_get_drvdata(pdev);
++
++ pxakbd->kpc = KPC;
++ pxakbd->kpkdi = KPKDI;
++
++ return 0;
++}
++
++static int pxakbd_resume(struct platform_device *pdev)
++{
++ struct pxakbd *pxakbd = platform_get_drvdata(pdev);
++
++ KPC = pxakbd->kpc;
++ KPKDI = pxakbd->kpkdi;
++
++ return 0;
++}
++
++static struct platform_driver pxakbd_driver = {
++ .probe = &pxakbd_probe,
++ .remove = &pxakbd_remove,
++ .suspend = &pxakbd_suspend,
++ .resume = &pxakbd_resume,
++ .driver = {
++ .name = "pxa-keyboard",
++ },
++};
++
++static int __devinit pxakbd_init(void)
++{
++ return platform_driver_register(&pxakbd_driver);
++}
++
++static void __exit pxakbd_exit(void)
++{
++ platform_driver_unregister(&pxakbd_driver);
++}
++
++module_init(pxakbd_init);
++module_exit(pxakbd_exit);
++
++MODULE_AUTHOR("Harald Welte <laforge@openezx.org>");
++MODULE_DESCRIPTION("Driver for Intel PXA27x keypad controller");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h
++++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
+@@ -2271,6 +2271,11 @@
+ #define KPMK_MKP (0x1 << 31)
+ #define KPAS_SO (0x1 << 31)
+ #define KPASMKPx_SO (0x1 << 31)
++#define KPAS_RP (0x000000f0)
++#define KPAS_CP (0x0000000f)
++#define KPAS_MUKP (0x7c000000)
++#define KPAS_MUKP_ONE (0x04000000)
++#define KPAS_MUKP_NONE (0x00000000)
+
+ /*
+ * UHC: USB Host Controller (OHCI-like) register definitions
+Index: linux-2.6.24/arch/arm/mach-pxa/pxa27x.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/pxa27x.c
++++ linux-2.6.24/arch/arm/mach-pxa/pxa27x.c
+@@ -451,6 +451,7 @@
+ &pxa_device_rtc,
+ &pxa27x_device_i2c_power,
+ &pxa27x_device_ohci,
++ &pxa_device_kbd,
+ };
+
+ static int __init pxa27x_init(void)
+Index: linux-2.6.24/arch/arm/mach-pxa/devices.h
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/devices.h
++++ linux-2.6.24/arch/arm/mach-pxa/devices.h
+@@ -9,6 +9,7 @@
+ extern struct platform_device pxa_device_i2s;
+ extern struct platform_device pxa_device_ficp;
+ extern struct platform_device pxa_device_rtc;
++extern struct platform_device pxa_device_kbd;
+
+ extern struct platform_device pxa27x_device_i2c_power;
+ extern struct platform_device pxa27x_device_ohci;
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch
new file mode 100644
index 0000000000..4b9a9abeef
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-fix-a1200.patch
@@ -0,0 +1,45 @@
+This hack hardcodes pxa27x-udc to ether_gadget. This is just a temp workaround.
+Index: linux-2.6.24/drivers/usb/gadget/ether.c
+===================================================================
+--- linux-2.6.24.orig/drivers/usb/gadget/ether.c
++++ linux-2.6.24/drivers/usb/gadget/ether.c
+@@ -2687,10 +2687,16 @@
+ MODULE_LICENSE ("GPL");
+
+
+-static int __init init (void)
++// Alex add FIXME
++int usb_ether_init (void)
+ {
+ return usb_gadget_register_driver (&eth_driver);
+ }
++
++static int __init init (void)
++{
++// return usb_gadget_register_driver (&eth_driver);
++}
+ module_init (init);
+
+ static void __exit cleanup (void)
+Index: linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c
+===================================================================
+--- linux-2.6.24.orig/drivers/usb/gadget/pxa27x_udc.c
++++ linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c
+@@ -65,6 +65,8 @@
+ //#include <asm/arch/udc.h>
+ #include <asm/mach/udc_pxa2xx.h>
+
++extern int usb_ether_init(void);
++
+ /*
+ * This driver handles the USB Device Controller (UDC) in Intel's PXA 27x
+ * series processors.
+@@ -2277,6 +2279,8 @@
+ udc_init_ep(udc);
+ udc_reinit(udc);
+
++ usb_ether_init(); // Alex add FIXME
++
+ /* irq setup after old hardware state is cleaned up */
+ retval = request_irq(irq, pxa27x_udc_irq, 0, driver_name, udc);
+ if (retval != 0) {
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch
new file mode 100644
index 0000000000..5823e8023a
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pxa27x-udc-support.3.patch
@@ -0,0 +1,3114 @@
+Index: linux-2.6.24/arch/arm/mach-pxa/generic.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/generic.c
++++ linux-2.6.24/arch/arm/mach-pxa/generic.c
+@@ -290,7 +290,11 @@
+ static u64 udc_dma_mask = ~(u32)0;
+
+ struct platform_device pxa_device_udc = {
++#ifdef CONFIG_PXA27x
++ .name = "pxa27x-udc",
++#else
+ .name = "pxa2xx-udc",
++#endif
+ .id = -1,
+ .resource = pxa2xx_udc_resources,
+ .num_resources = ARRAY_SIZE(pxa2xx_udc_resources),
+Index: linux-2.6.24/drivers/usb/gadget/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/usb/gadget/Kconfig
++++ linux-2.6.24/drivers/usb/gadget/Kconfig
+@@ -192,6 +192,24 @@
+ default USB_GADGET
+ select USB_GADGET_SELECTED
+
++config USB_GADGET_PXA27X
++ boolean "PXA 27x"
++ depends on ARCH_PXA && PXA27x
++ help
++ Intel's PXA 27x series XScale processors include an integrated
++ full speed USB 1.1 device controller.
++
++ Say "y" to link the driver statically, or "m" to build a
++ dynamically linked module called "pxa2xx_udc" and force all
++ gadget drivers to also be dynamically linked.
++
++
++config USB_PXA27X
++ tristate
++ depends on USB_GADGET_PXA27X
++ default USB_GADGET
++ select USB_GADGET_SELECTED
++
+ # if there's only one gadget driver, using only two bulk endpoints,
+ # don't waste memory for the other endpoints
+ config USB_PXA2XX_SMALL
+Index: linux-2.6.24/drivers/usb/gadget/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/usb/gadget/Makefile
++++ linux-2.6.24/drivers/usb/gadget/Makefile
+@@ -9,6 +9,7 @@
+ obj-$(CONFIG_USB_NET2280) += net2280.o
+ obj-$(CONFIG_USB_AMD5536UDC) += amd5536udc.o
+ obj-$(CONFIG_USB_PXA2XX) += pxa2xx_udc.o
++obj-$(CONFIG_USB_PXA27X) += pxa27x_udc.o
+ obj-$(CONFIG_USB_GOKU) += goku_udc.o
+ obj-$(CONFIG_USB_OMAP) += omap_udc.o
+ obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o
+Index: linux-2.6.24/drivers/usb/gadget/epautoconf.c
+===================================================================
+--- linux-2.6.24.orig/drivers/usb/gadget/epautoconf.c
++++ linux-2.6.24/drivers/usb/gadget/epautoconf.c
+@@ -230,7 +230,8 @@
+ */
+ struct usb_ep * __devinit usb_ep_autoconfig (
+ struct usb_gadget *gadget,
+- struct usb_endpoint_descriptor *desc
++ struct usb_endpoint_descriptor *desc,
++ int config, int interface, int alt
+ )
+ {
+ struct usb_ep *ep;
+@@ -238,6 +239,11 @@
+
+ type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
+
++ /* If have ep_alloc() function use it! */
++ if (gadget->ops->ep_alloc)
++ return gadget->ops->ep_alloc(gadget, desc,
++ config, interface, alt);
++
+ /* First, apply chip-specific "best usage" knowledge.
+ * This might make a good usb_gadget_ops hook ...
+ */
+Index: linux-2.6.24/drivers/usb/gadget/ether.c
+===================================================================
+--- linux-2.6.24.orig/drivers/usb/gadget/ether.c
++++ linux-2.6.24/drivers/usb/gadget/ether.c
+@@ -235,10 +235,6 @@
+ #define DEV_CONFIG_CDC
+ #endif
+
+-#ifdef CONFIG_USB_GADGET_PXA27X
+-#define DEV_CONFIG_CDC
+-#endif
+-
+ #ifdef CONFIG_USB_GADGET_S3C2410
+ #define DEV_CONFIG_CDC
+ #endif
+@@ -270,6 +266,10 @@
+ #define DEV_CONFIG_SUBSET
+ #endif
+
++#ifdef CONFIG_USB_GADGET_PXA27X
++#define DEV_CONFIG_SUBSET
++#endif
++
+ #ifdef CONFIG_USB_GADGET_SUPERH
+ #define DEV_CONFIG_SUBSET
+ #endif
+@@ -1012,13 +1012,12 @@
+ static int
+ set_ether_config (struct eth_dev *dev, gfp_t gfp_flags)
+ {
+- int result = 0;
+- struct usb_gadget *gadget = dev->gadget;
++ int result = 0;
+
+ #if defined(DEV_CONFIG_CDC) || defined(CONFIG_USB_ETH_RNDIS)
+ /* status endpoint used for RNDIS and (optionally) CDC */
+ if (!subset_active(dev) && dev->status_ep) {
+- dev->status = ep_desc (gadget, &hs_status_desc,
++ dev->status = ep_desc (dev->gadget, &hs_status_desc,
+ &fs_status_desc);
+ dev->status_ep->driver_data = dev;
+
+@@ -1031,10 +1030,10 @@
+ }
+ #endif
+
+- dev->in = ep_desc(gadget, &hs_source_desc, &fs_source_desc);
++ dev->in = ep_desc(dev->gadget, &hs_source_desc, &fs_source_desc);
+ dev->in_ep->driver_data = dev;
+
+- dev->out = ep_desc(gadget, &hs_sink_desc, &fs_sink_desc);
++ dev->out = ep_desc(dev->gadget, &hs_sink_desc, &fs_sink_desc);
+ dev->out_ep->driver_data = dev;
+
+ /* With CDC, the host isn't allowed to use these two data
+@@ -2298,6 +2297,9 @@
+ * non-CDC to be compatible with ARM Linux-2.4 "usb-eth".
+ */
+ cdc = 0;
++ } else if (gadget_is_pxa27x(gadget)) {
++ /* hardware can't write zlps */
++ zlp = 0;
+ }
+
+ gcnum = usb_gadget_controller_number (gadget);
+@@ -2364,7 +2366,22 @@
+
+ /* all we really need is bulk IN/OUT */
+ usb_ep_autoconfig_reset (gadget);
+- in_ep = usb_ep_autoconfig (gadget, &fs_source_desc);
++#ifdef CONFIG_USB_ETH_RNDIS
++ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc,
++ DEV_RNDIS_CONFIG_VALUE,
++ (int)rndis_data_intf.bInterfaceNumber,
++ (int)rndis_data_intf.bAlternateSetting);
++#elif defined(DEV_CONFIG_CDC)
++ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc,
++ DEV_CONFIG_VALUE,
++ (int)data_intf.bInterfaceNumber,
++ (int)data_intf.bAlternateSetting);
++#elif defined(DEV_CONFIG_SUBSET)
++ in_ep = usb_ep_autoconfig (gadget, &fs_source_desc,
++ DEV_CONFIG_VALUE,
++ (int)subset_data_intf.bInterfaceNumber,
++ (int)subset_data_intf.bAlternateSetting);
++#endif /* CONFIG_USB_ETH_RNDIS */
+ if (!in_ep) {
+ autoconf_fail:
+ dev_err (&gadget->dev,
+@@ -2374,7 +2391,23 @@
+ }
+ in_ep->driver_data = in_ep; /* claim */
+
+- out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc);
++#ifdef CONFIG_USB_ETH_RNDIS
++ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc,
++ DEV_RNDIS_CONFIG_VALUE,
++ (int)rndis_data_intf.bInterfaceNumber,
++ (int)rndis_data_intf.bAlternateSetting);
++#elif defined(DEV_CONFIG_CDC)
++ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc,
++ DEV_CONFIG_VALUE,
++ (int)data_intf.bInterfaceNumber,
++ (int)data_intf.bAlternateSetting);
++#elif defined(DEV_CONFIG_SUBSET)
++ out_ep = usb_ep_autoconfig (gadget, &fs_sink_desc,
++ DEV_CONFIG_VALUE,
++ (int)subset_data_intf.bInterfaceNumber,
++ (int)subset_data_intf.bAlternateSetting);
++#endif /* CONFIG_USB_ETH_RNDIS */
++
+ if (!out_ep)
+ goto autoconf_fail;
+ out_ep->driver_data = out_ep; /* claim */
+@@ -2384,7 +2417,18 @@
+ * Since some hosts expect one, try to allocate one anyway.
+ */
+ if (cdc || rndis) {
+- status_ep = usb_ep_autoconfig (gadget, &fs_status_desc);
++#ifdef CONFIG_USB_ETH_RNDIS
++ status_ep = usb_ep_autoconfig (gadget, &fs_status_desc,
++ DEV_RNDIS_CONFIG_VALUE,
++ (int)rndis_control_intf.bInterfaceNumber,
++ (int)rndis_control_intf.bAlternateSetting);
++#elif defined(DEV_CONFIG_CDC)
++ status_ep = usb_ep_autoconfig (gadget, &fs_status_desc,
++ DEV_CONFIG_VALUE,
++ (int)control_intf.bInterfaceNumber,
++ (int)control_intf.bAlternateSetting);
++#endif /* CONFIG_USB_ETH_RNDIS */
++
+ if (status_ep) {
+ status_ep->driver_data = status_ep; /* claim */
+ } else if (rndis) {
+@@ -2392,13 +2436,14 @@
+ "can't run RNDIS on %s\n",
+ gadget->name);
+ return -ENODEV;
++ }
+ #ifdef DEV_CONFIG_CDC
+- /* pxa25x only does CDC subset; often used with RNDIS */
+- } else if (cdc) {
++ /* pxa25x only does CDC subset; often used with RNDIS */
++ else if (cdc) {
+ control_intf.bNumEndpoints = 0;
+ /* FIXME remove endpoint from descriptor list */
+-#endif
+ }
++#endif
+ }
+ #endif
+
+Index: linux-2.6.24/drivers/usb/gadget/file_storage.c
+===================================================================
+--- linux-2.6.24.orig/drivers/usb/gadget/file_storage.c
++++ linux-2.6.24/drivers/usb/gadget/file_storage.c
+@@ -3877,20 +3877,20 @@
+
+ /* Find all the endpoints we will use */
+ usb_ep_autoconfig_reset(gadget);
+- ep = usb_ep_autoconfig(gadget, &fs_bulk_in_desc);
++ ep = usb_ep_autoconfig(gadget, &fs_bulk_in_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ ep->driver_data = fsg; // claim the endpoint
+ fsg->bulk_in = ep;
+
+- ep = usb_ep_autoconfig(gadget, &fs_bulk_out_desc);
++ ep = usb_ep_autoconfig(gadget, &fs_bulk_out_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ ep->driver_data = fsg; // claim the endpoint
+ fsg->bulk_out = ep;
+
+ if (transport_is_cbi()) {
+- ep = usb_ep_autoconfig(gadget, &fs_intr_in_desc);
++ ep = usb_ep_autoconfig(gadget, &fs_intr_in_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ ep->driver_data = fsg; // claim the endpoint
+Index: linux-2.6.24/drivers/usb/gadget/gmidi.c
+===================================================================
+--- linux-2.6.24.orig/drivers/usb/gadget/gmidi.c
++++ linux-2.6.24/drivers/usb/gadget/gmidi.c
+@@ -1188,7 +1188,7 @@
+ * but there may also be important quirks to address.
+ */
+ usb_ep_autoconfig_reset(gadget);
+- in_ep = usb_ep_autoconfig(gadget, &bulk_in_desc);
++ in_ep = usb_ep_autoconfig(gadget, &bulk_in_desc, 0, 0, 0);
+ if (!in_ep) {
+ autoconf_fail:
+ printk(KERN_ERR "%s: can't autoconfigure on %s\n",
+@@ -1198,7 +1198,7 @@
+ EP_IN_NAME = in_ep->name;
+ in_ep->driver_data = in_ep; /* claim */
+
+- out_ep = usb_ep_autoconfig(gadget, &bulk_out_desc);
++ out_ep = usb_ep_autoconfig(gadget, &bulk_out_desc, 0, 0, 0);
+ if (!out_ep) {
+ goto autoconf_fail;
+ }
+Index: linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/usb/gadget/pxa27x_udc.c
+@@ -0,0 +1,2410 @@
++/*
++ * linux/drivers/usb/gadget/pxa27x_udc.c
++ * Intel PXA2xx and IXP4xx on-chip full speed USB device controllers
++ *
++ * Copyright (C) 2002 Intrinsyc, Inc. (Frank Becker)
++ * Copyright (C) 2003 Robert Schwebel, Pengutronix
++ * Copyright (C) 2003 Benedikt Spranger, Pengutronix
++ * Copyright (C) 2003 David Brownell
++ * Copyright (C) 2003 Joshua Wise
++ * Copyright (C) 2004 Intel Corporation
++ * Copyright (C) 2007 Rodolfo Giometti <giometti@linux.it>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ */
++
++#undef DEBUG
++/* #define VERBOSE DBG_VERBOSE */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/ioport.h>
++#include <linux/types.h>
++#include <linux/version.h>
++#include <linux/errno.h>
++#include <linux/delay.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/timer.h>
++#include <linux/list.h>
++#include <linux/interrupt.h>
++#include <linux/proc_fs.h>
++#include <linux/mm.h>
++#include <linux/device.h>
++#include <linux/dma-mapping.h>
++#include <linux/platform_device.h>
++
++#include <asm/byteorder.h>
++#include <asm/dma.h>
++#include <asm/gpio.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/system.h>
++#include <asm/mach-types.h>
++#include <asm/unaligned.h>
++#include <asm/hardware.h>
++//#include <asm/arch/pxa-regs.h>
++
++#include <linux/usb/ch9.h>
++#include <linux/usb/gadget.h>
++
++//#include <asm/arch/udc.h>
++#include <asm/mach/udc_pxa2xx.h>
++
++/*
++ * This driver handles the USB Device Controller (UDC) in Intel's PXA 27x
++ * series processors.
++ * Such controller drivers work with a gadget driver. The gadget driver
++ * returns descriptors, implements configuration and data protocols used
++ * by the host to interact with this device, and allocates endpoints to
++ * the different protocol interfaces. The controller driver virtualizes
++ * usb hardware so that the gadget drivers will be more portable.
++ *
++ * This UDC hardware wants to implement a bit too much USB protocol, so
++ * it constrains the sorts of USB configuration change events that work.
++ * The errata for these chips are misleading; some "fixed" bugs from
++ * pxa250 a0/a1 b0/b1/b2 sure act like they're still there.
++ */
++
++#define DRIVER_VERSION "28-Jun-2007"
++#define DRIVER_DESC "PXA 27x USB Device Controller driver"
++
++static const char driver_name[] = "pxa27x_udc";
++
++static const char ep0name[] = "ep0";
++
++#undef USE_DMA
++#undef DISABLE_TEST_MODE
++
++#ifdef CONFIG_PROC_FS
++#define UDC_PROC_FILE
++#endif
++
++#include "pxa27x_udc.h"
++
++#ifdef CONFIG_EMBEDDED
++/* few strings, and little code to use them */
++#undef DEBUG
++#undef UDC_PROC_FILE
++#endif
++
++#ifdef USE_DMA
++static int use_dma = 1;
++module_param(use_dma, bool, 0);
++MODULE_PARM_DESC(use_dma, "true to use dma");
++
++static void dma_nodesc_handler(int dmach, void *_ep);
++static void kick_dma(struct pxa27x_ep *ep, struct pxa27x_request *req);
++
++#define DMASTR " (dma support)"
++
++#else /* !USE_DMA */
++#define DMASTR " (pio only)"
++#endif
++
++#ifdef CONFIG_USB_PXA27X_SMALL
++#define SIZE_STR " (small)"
++#else
++#define SIZE_STR ""
++#endif
++
++#ifdef DISABLE_TEST_MODE
++/* (mode == 0) == no undocumented chip tweaks
++ * (mode & 1) == double buffer bulk IN
++ * (mode & 2) == double buffer bulk OUT
++ * ... so mode = 3 (or 7, 15, etc) does it for both
++ */
++static ushort fifo_mode = 0;
++module_param(fifo_mode, ushort, 0);
++MODULE_PARM_DESC(fifo_mode, "pxa27x udc fifo mode");
++#endif
++
++#define UDCISR0_IR0 0x3
++#define UDCISR_INT_MASK (UDC_INT_FIFOERROR | UDC_INT_PACKETCMP)
++#define UDCICR_INT_MASK UDCISR_INT_MASK
++
++#define UDCCSR_MASK (UDCCSR_FST | UDCCSR_DME)
++/* ---------------------------------------------------------------------------
++ * endpoint related parts of the api to the usb controller hardware,
++ * used by gadget driver; and the inner talker-to-hardware core.
++ * ---------------------------------------------------------------------------
++ */
++
++static void pxa27x_ep_fifo_flush(struct usb_ep *ep);
++static void nuke(struct pxa27x_ep *, int status);
++
++/* one GPIO should control a D+ pullup, so host sees this device (or not) */
++static void pullup_off(void)
++{
++ struct pxa2xx_udc_mach_info *mach = the_controller->mach;
++
++ if (mach->gpio_pullup)
++ gpio_set_value(mach->gpio_pullup, 0);
++ else if (mach->udc_command)
++ mach->udc_command(PXA2XX_UDC_CMD_DISCONNECT);
++}
++
++static void pullup_on(void)
++{
++ struct pxa2xx_udc_mach_info *mach = the_controller->mach;
++
++ if (mach->gpio_pullup)
++ gpio_set_value(mach->gpio_pullup, 1);
++ else if (mach->udc_command)
++ mach->udc_command(PXA2XX_UDC_CMD_CONNECT);
++}
++
++static void pio_irq_enable(int ep_num)
++{
++ if (ep_num < 16)
++ UDCICR0 |= 3 << (ep_num * 2);
++ else {
++ ep_num -= 16;
++ UDCICR1 |= 3 << (ep_num * 2);
++ }
++}
++
++static void pio_irq_disable(int ep_num)
++{
++ ep_num &= 0xf;
++ if (ep_num < 16)
++ UDCICR0 &= ~(3 << (ep_num * 2));
++ else {
++ ep_num -= 16;
++ UDCICR1 &= ~(3 << (ep_num * 2));
++ }
++}
++
++/* The UDCCR reg contains mask and interrupt status bits,
++ * so using '|=' isn't safe as it may ack an interrupt.
++ */
++#define UDCCR_MASK_BITS (UDCCR_OEN | UDCCR_UDE)
++
++static inline void udc_set_mask_UDCCR(int mask)
++{
++ UDCCR = (UDCCR & UDCCR_MASK_BITS) | (mask & UDCCR_MASK_BITS);
++}
++
++static inline void udc_clear_mask_UDCCR(int mask)
++{
++ UDCCR = (UDCCR & UDCCR_MASK_BITS) & ~(mask & UDCCR_MASK_BITS);
++}
++
++static inline void udc_ack_int_UDCCR(int mask)
++{
++ /* udccr contains the bits we dont want to change */
++ __u32 udccr = UDCCR & UDCCR_MASK_BITS;
++
++ UDCCR = udccr | (mask & ~UDCCR_MASK_BITS);
++}
++
++/*
++ * endpoint enable/disable
++ *
++ * we need to verify the descriptors used to enable endpoints. since pxa27x
++ * endpoint configurations are fixed, and are pretty much always enabled,
++ * there's not a lot to manage here.
++ *
++ * because pxa27x can't selectively initialize bulk (or interrupt) endpoints,
++ * (resetting endpoint halt and toggle), SET_INTERFACE is unusable except
++ * for a single interface (with only the default altsetting) and for gadget
++ * drivers that don't halt endpoints (not reset by set_interface). that also
++ * means that if you use ISO, you must violate the USB spec rule that all
++ * iso endpoints must be in non-default altsettings.
++ */
++static int pxa27x_ep_enable(struct usb_ep *_ep,
++ const struct usb_endpoint_descriptor *desc)
++{
++ struct pxa27x_ep *ep;
++ struct pxa27x_udc *dev;
++
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (!_ep || !desc || _ep->name == ep0name
++ || desc->bDescriptorType != USB_DT_ENDPOINT
++ || ep->fifo_size < le16_to_cpu(desc->wMaxPacketSize)) {
++ DMSG("%s, bad ep or descriptor\n", __FUNCTION__);
++ return -EINVAL;
++ }
++
++ /* xfer types must match, except that interrupt ~= bulk */
++ if (ep->ep_type != USB_ENDPOINT_XFER_BULK
++ && desc->bmAttributes != USB_ENDPOINT_XFER_INT) {
++ DMSG("%s, %s type mismatch\n", __FUNCTION__, _ep->name);
++ return -EINVAL;
++ }
++
++ /* hardware _could_ do smaller, but driver doesn't */
++ if ((desc->bmAttributes == USB_ENDPOINT_XFER_BULK
++ && le16_to_cpu(desc->wMaxPacketSize)
++ != BULK_FIFO_SIZE)
++ || !desc->wMaxPacketSize) {
++ DMSG("%s, bad %s maxpacket\n", __FUNCTION__, _ep->name);
++ return -ERANGE;
++ }
++
++ dev = ep->dev;
++ if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN) {
++ DMSG("%s, bogus device state\n", __FUNCTION__);
++ return -ESHUTDOWN;
++ }
++
++ ep->desc = desc;
++ ep->dma = -1;
++ ep->stopped = 0;
++ ep->pio_irqs = ep->dma_irqs = 0;
++ ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize);
++
++ /* flush fifo (mostly for OUT buffers) */
++ pxa27x_ep_fifo_flush(_ep);
++
++ /* ... reset halt state too, if we could ... */
++
++#ifdef USE_DMA
++ /* for (some) bulk and ISO endpoints, try to get a DMA channel and
++ * bind it to the endpoint. otherwise use PIO.
++ */
++ DMSG("%s: called attributes=%d\n", __FUNCTION__, ep->ep_type);
++ switch (ep->ep_type) {
++ case USB_ENDPOINT_XFER_ISOC:
++ if (le16_to_cpu(desc->wMaxPacketSize) % 32)
++ break;
++ /* fall through */
++ case USB_ENDPOINT_XFER_BULK:
++ if (!use_dma || !ep->reg_drcmr)
++ break;
++ ep->dma = pxa_request_dma((char *)_ep->name,
++ (le16_to_cpu(desc->wMaxPacketSize) > 64)
++ ? DMA_PRIO_MEDIUM /* some iso */
++ : DMA_PRIO_LOW,
++ dma_nodesc_handler, ep);
++ if (ep->dma >= 0) {
++ *ep->reg_drcmr = DRCMR_MAPVLD | ep->dma;
++ DMSG("%s using dma%d\n", _ep->name, ep->dma);
++ }
++ default:
++ break;
++ }
++#endif
++ DBG(DBG_VERBOSE, "enabled %s\n", _ep->name);
++ return 0;
++}
++
++static int pxa27x_ep_disable(struct usb_ep *_ep)
++{
++ struct pxa27x_ep *ep;
++
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (!_ep || !ep->desc) {
++ DMSG("%s, %s not enabled\n", __FUNCTION__,
++ _ep ? ep->ep.name : NULL);
++ return -EINVAL;
++ }
++ nuke(ep, -ESHUTDOWN);
++
++#ifdef USE_DMA
++ if (ep->dma >= 0) {
++ *ep->reg_drcmr = 0;
++ pxa_free_dma(ep->dma);
++ ep->dma = -1;
++ }
++#endif
++
++ /* flush fifo (mostly for IN buffers) */
++ pxa27x_ep_fifo_flush(_ep);
++
++ ep->desc = 0;
++ ep->stopped = 1;
++
++ DBG(DBG_VERBOSE, "%s disabled\n", _ep->name);
++ return 0;
++}
++
++/*-------------------------------------------------------------------------*/
++
++/* for the pxa27x, these can just wrap kmalloc/kfree. gadget drivers
++ * must still pass correctly initialized endpoints, since other controller
++ * drivers may care about how it's currently set up (dma issues etc).
++ */
++
++/*
++ * pxa27x_ep_alloc_request - allocate a request data structure
++ */
++static struct usb_request *pxa27x_ep_alloc_request(struct usb_ep *_ep,
++ unsigned int gfp_flags)
++{
++ struct pxa27x_request *req;
++
++ req = kmalloc(sizeof *req, gfp_flags);
++ if (!req)
++ return 0;
++
++ memset(req, 0, sizeof *req);
++ INIT_LIST_HEAD(&req->queue);
++ return &req->req;
++}
++
++/*
++ * pxa27x_ep_free_request - deallocate a request data structure
++ */
++static void pxa27x_ep_free_request(struct usb_ep *_ep, struct usb_request *_req)
++{
++ struct pxa27x_request *req;
++
++ req = container_of(_req, struct pxa27x_request, req);
++ WARN_ON(!list_empty(&req->queue));
++ kfree(req);
++}
++
++/* PXA cache needs flushing with DMA I/O (it's dma-incoherent), but there's
++ * no device-affinity and the heap works perfectly well for i/o buffers.
++ * It wastes much less memory than dma_alloc_coherent() would, and even
++ * prevents cacheline (32 bytes wide) sharing problems.
++ */
++static void *pxa27x_ep_alloc_buffer(struct usb_ep *_ep, unsigned bytes,
++ dma_addr_t * dma, unsigned int gfp_flags)
++{
++ char *retval;
++
++ retval = kmalloc(bytes, gfp_flags & ~(__GFP_DMA | __GFP_HIGHMEM));
++ if (retval)
++#ifdef USE_DMA
++ *dma = virt_to_bus(retval);
++#else
++ *dma = (dma_addr_t) ~0;
++#endif
++ return retval;
++}
++
++static void
++pxa27x_ep_free_buffer(struct usb_ep *_ep, void *buf, dma_addr_t dma,
++ unsigned bytes)
++{
++ kfree(buf);
++}
++
++/*-------------------------------------------------------------------------*/
++
++/*
++ * done - retire a request; caller blocked irqs
++ */
++static void done(struct pxa27x_ep *ep, struct pxa27x_request *req, int status)
++{
++ list_del_init(&req->queue);
++ if (likely(req->req.status == -EINPROGRESS))
++ req->req.status = status;
++ else
++ status = req->req.status;
++
++ if (status && status != -ESHUTDOWN)
++ DBG(DBG_VERBOSE, "complete %s req %p stat %d len %u/%u\n",
++ ep->ep.name, &req->req, status,
++ req->req.actual, req->req.length);
++
++ /* don't modify queue heads during completion callback */
++ req->req.complete(&ep->ep, &req->req);
++}
++
++static inline void ep0_idle(struct pxa27x_udc *dev)
++{
++ dev->ep0state = EP0_IDLE;
++ LED_EP0_OFF;
++}
++
++static int
++write_packet(volatile u32 * uddr, struct pxa27x_request *req, unsigned max)
++{
++ u32 *buf;
++ int length, count, remain;
++
++ buf = (u32 *) (req->req.buf + req->req.actual);
++ prefetch(buf);
++
++ /* how big will this packet be? */
++ length = min(req->req.length - req->req.actual, max);
++ req->req.actual += length;
++
++ remain = length & 0x3;
++ count = length & ~(0x3);
++
++ while (likely(count)) {
++ *uddr = *buf++;
++ count -= 4;
++ }
++
++ if (remain) {
++ volatile u8 *reg = (u8 *) uddr;
++ char *rd = (u8 *) buf;
++
++ while (remain--) {
++ *reg = *rd++;
++ }
++ }
++
++ return length;
++}
++
++/*
++ * write to an IN endpoint fifo, as many packets as possible.
++ * irqs will use this to write the rest later.
++ * caller guarantees at least one packet buffer is ready (or a zlp).
++ */
++static int write_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req)
++{
++ unsigned max;
++
++ max = le16_to_cpu(ep->desc->wMaxPacketSize);
++ do {
++ int count;
++ int is_last, is_short;
++
++ count = write_packet(ep->reg_udcdr, req, max);
++
++ /* last packet is usually short (or a zlp) */
++ if (unlikely(count != max))
++ is_last = is_short = 1;
++ else {
++ if (likely(req->req.length != req->req.actual)
++ || req->req.zero)
++ is_last = 0;
++ else
++ is_last = 1;
++ /* interrupt/iso maxpacket may not fill the fifo */
++ is_short = unlikely(max < ep->fifo_size);
++ }
++
++ DMSG("wrote %s count:%d bytes%s%s %d left %p\n",
++ ep->ep.name, count,
++ is_last ? "/L" : "", is_short ? "/S" : "",
++ req->req.length - req->req.actual, &req->req);
++
++ /* let loose that packet. maybe try writing another one,
++ * double buffering might work. TSP, TPC, and TFS
++ * bit values are the same for all normal IN endpoints.
++ */
++ *ep->reg_udccsr = UDCCSR_PC;
++ if (is_short)
++ *ep->reg_udccsr = UDCCSR_SP;
++
++ /* requests complete when all IN data is in the FIFO */
++ if (is_last) {
++ done(ep, req, 0);
++ if (list_empty(&ep->queue) || unlikely(ep->dma >= 0)) {
++ pio_irq_disable(ep->ep_num);
++#ifdef USE_DMA
++ /* unaligned data and zlps couldn't use dma */
++ if (unlikely(!list_empty(&ep->queue))) {
++ req = list_entry(ep->queue.next,
++ struct pxa27x_request,
++ queue);
++ kick_dma(ep, req);
++ return 0;
++ }
++#endif
++ }
++ return 1;
++ }
++ /* TODO experiment: how robust can fifo mode tweaking be?
++ * double buffering is off in the default fifo mode, which
++ * prevents TFS from being set here.
++ */
++
++ } while (*ep->reg_udccsr & UDCCSR_FS);
++ return 0;
++}
++
++/* caller asserts req->pending (ep0 irq status nyet cleared); starts
++ * ep0 data stage. these chips want very simple state transitions.
++ */
++static inline void ep0start(struct pxa27x_udc *dev, u32 flags, const char *tag)
++{
++ UDCCSR0 = flags | UDCCSR0_SA | UDCCSR0_OPC;
++ UDCISR0 = UDCICR_INT(0, UDC_INT_FIFOERROR | UDC_INT_PACKETCMP);
++ dev->req_pending = 0;
++ DBG(DBG_VERY_NOISY, "%s %s, %02x/%02x\n",
++ __FUNCTION__, tag, UDCCSR0, flags);
++}
++
++static int write_ep0_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req)
++{
++ unsigned count;
++ int is_short;
++
++ count = write_packet(&UDCDR0, req, EP0_FIFO_SIZE);
++ ep->dev->stats.write.bytes += count;
++
++ /* last packet "must be" short (or a zlp) */
++ is_short = (count != EP0_FIFO_SIZE);
++
++ DBG(DBG_VERY_NOISY, "ep0in %d bytes %d left %p\n", count,
++ req->req.length - req->req.actual, &req->req);
++
++ if (unlikely(is_short)) {
++ if (ep->dev->req_pending)
++ ep0start(ep->dev, UDCCSR0_IPR, "short IN");
++ else
++ UDCCSR0 = UDCCSR0_IPR;
++
++ count = req->req.length;
++ done(ep, req, 0);
++ ep0_idle(ep->dev);
++#if 0
++ /* This seems to get rid of lost status irqs in some cases:
++ * host responds quickly, or next request involves config
++ * change automagic, or should have been hidden, or ...
++ *
++ * FIXME get rid of all udelays possible...
++ */
++ if (count >= EP0_FIFO_SIZE) {
++ count = 100;
++ do {
++ if ((UDCCSR0 & UDCCSR0_OPC) != 0) {
++ /* clear OPC, generate ack */
++ UDCCSR0 = UDCCSR0_OPC;
++ break;
++ }
++ count--;
++ udelay(1);
++ } while (count);
++ }
++#endif
++ } else if (ep->dev->req_pending)
++ ep0start(ep->dev, 0, "IN");
++ return is_short;
++}
++
++/*
++ * read_fifo - unload packet(s) from the fifo we use for usb OUT
++ * transfers and put them into the request. caller should have made
++ * sure there's at least one packet ready.
++ *
++ * returns true if the request completed because of short packet or the
++ * request buffer having filled (and maybe overran till end-of-packet).
++ */
++static int read_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req)
++{
++ for (;;) {
++ u32 *buf;
++ int bufferspace, count, is_short;
++
++ /* make sure there's a packet in the FIFO. */
++ if (unlikely((*ep->reg_udccsr & UDCCSR_PC) == 0))
++ break;
++ buf = (u32 *) (req->req.buf + req->req.actual);
++ prefetchw(buf);
++ bufferspace = req->req.length - req->req.actual;
++
++ /* read all bytes from this packet */
++ if (likely(*ep->reg_udccsr & UDCCSR_BNE)) {
++ count = 0x3ff & *ep->reg_udcbcr;
++ req->req.actual += min(count, bufferspace);
++ } else /* zlp */
++ count = 0;
++
++ is_short = (count < ep->ep.maxpacket);
++ DMSG("read %s udccsr:%02x, count:%d bytes%s req %p %d/%d\n",
++ ep->ep.name, *ep->reg_udccsr, count,
++ is_short ? "/S" : "",
++ &req->req, req->req.actual, req->req.length);
++
++#if 0
++ dump_regs(ep->ep_num );
++#endif
++ count = min(count, bufferspace);
++ while (likely(count > 0)) {
++ *buf++ = *ep->reg_udcdr;
++ count -= 4;
++ }
++ DMSG("Buf:0x%p\n", req->req.buf);
++
++ *ep->reg_udccsr = UDCCSR_PC;
++ /* RPC/RSP/RNE could now reflect the other packet buffer */
++
++ /* completion */
++ if (is_short || req->req.actual == req->req.length) {
++ done(ep, req, 0);
++ if (list_empty(&ep->queue))
++ pio_irq_disable(ep->ep_num);
++ return 1;
++ }
++
++ /* finished that packet. the next one may be waiting... */
++ }
++ return 0;
++}
++
++/*
++ * special ep0 version of the above. no UBCR0 or double buffering; status
++ * handshaking is magic. most device protocols don't need control-OUT.
++ * CDC vendor commands (and RNDIS), mass storage CB/CBI, and some other
++ * protocols do use them.
++ */
++static int read_ep0_fifo(struct pxa27x_ep *ep, struct pxa27x_request *req)
++{
++ u32 *buf, word;
++ unsigned bufferspace;
++
++ buf = (u32 *) (req->req.buf + req->req.actual);
++ bufferspace = req->req.length - req->req.actual;
++
++ while (UDCCSR0 & UDCCSR0_RNE) {
++ word = UDCDR0;
++
++ if (unlikely(bufferspace == 0)) {
++ /* this happens when the driver's buffer
++ * is smaller than what the host sent.
++ * discard the extra data.
++ */
++ if (req->req.status != -EOVERFLOW)
++ DMSG("%s overflow\n", ep->ep.name);
++ req->req.status = -EOVERFLOW;
++ } else {
++ *buf++ = word;
++ req->req.actual += 4;
++ bufferspace -= 4;
++ }
++ }
++
++ UDCCSR0 = UDCCSR0_OPC;
++
++ /* completion */
++ if (req->req.actual >= req->req.length)
++ return 1;
++
++ /* finished that packet. the next one may be waiting... */
++ return 0;
++}
++
++#ifdef USE_DMA
++
++#define MAX_IN_DMA ((DCMD_LENGTH + 1) - BULK_FIFO_SIZE)
++static void kick_dma(struct pxa27x_ep *ep, struct pxa27x_request *req)
++{
++ u32 dcmd = 0;
++ u32 len = req->req.length;
++ u32 buf = req->req.dma;
++ u32 fifo = io_v2p((u32) ep->reg_udcdr);
++
++ buf += req->req.actual;
++ len -= req->req.actual;
++ ep->dma_con = 0;
++
++ DMSG("%s: req:0x%p length:%d, actual:%d dma:%d\n",
++ __FUNCTION__, &req->req, req->req.length,
++ req->req.actual, ep->dma);
++
++ /* no-descriptor mode can be simple for bulk-in, iso-in, iso-out */
++ DCSR(ep->dma) = DCSR_NODESC;
++ if (buf & 0x3)
++ DALGN |= 1 << ep->dma;
++ else
++ DALGN &= ~(1 << ep->dma);
++
++ if (ep->dir_in) {
++ DSADR(ep->dma) = buf;
++ DTADR(ep->dma) = fifo;
++ if (len > MAX_IN_DMA) {
++ len = MAX_IN_DMA;
++ ep->dma_con = 1;
++ } else if (len >= ep->ep.maxpacket) {
++ if ((ep->dma_con = (len % ep->ep.maxpacket) != 0))
++ len = ep->ep.maxpacket;
++ }
++ dcmd = len | DCMD_BURST32 | DCMD_WIDTH4 | DCMD_ENDIRQEN
++ | DCMD_FLOWTRG | DCMD_INCSRCADDR;
++ } else {
++ DSADR(ep->dma) = fifo;
++ DTADR(ep->dma) = buf;
++ dcmd = len | DCMD_BURST32 | DCMD_WIDTH4 | DCMD_ENDIRQEN
++ | DCMD_FLOWSRC | DCMD_INCTRGADDR;
++ }
++ *ep->reg_udccsr = UDCCSR_DME;
++ DCMD(ep->dma) = dcmd;
++ DCSR(ep->dma) = DCSR_NODESC | DCSR_EORIRQEN
++ | ((ep->dir_in) ? DCSR_STOPIRQEN : 0);
++ *ep->reg_drcmr = ep->dma | DRCMR_MAPVLD;
++ DCSR(ep->dma) |= DCSR_RUN;
++}
++
++static void cancel_dma(struct pxa27x_ep *ep)
++{
++ struct pxa27x_request *req;
++ u32 tmp;
++
++ if (DCSR(ep->dma) == 0 || list_empty(&ep->queue))
++ return;
++
++ DMSG("hehe dma:%d,dcsr:0x%x\n", ep->dma, DCSR(ep->dma));
++ DCSR(ep->dma) = 0;
++ while ((DCSR(ep->dma) & DCSR_STOPSTATE) == 0)
++ cpu_relax();
++
++ req = list_entry(ep->queue.next, struct pxa27x_request, queue);
++ tmp = DCMD(ep->dma) & DCMD_LENGTH;
++ req->req.actual = req->req.length - tmp;
++
++ /* the last tx packet may be incomplete, so flush the fifo.
++ * FIXME correct req.actual if we can
++ */
++ *ep->reg_udccsr = UDCCSR_FEF;
++}
++
++static void dma_nodesc_handler(int dmach, void *_ep, struct pt_regs *r)
++{
++ struct pxa27x_ep *ep = _ep;
++ struct pxa27x_request *req, *req_next;
++ u32 dcsr, tmp, completed;
++
++ local_irq_disable();
++
++ req = list_entry(ep->queue.next, struct pxa27x_request, queue);
++
++ DMSG("%s, buf:0x%p\n", __FUNCTION__, req->req.buf);
++
++ ep->dma_irqs++;
++ ep->dev->stats.irqs++;
++ HEX_DISPLAY(ep->dev->stats.irqs);
++
++ completed = 0;
++
++ dcsr = DCSR(dmach);
++ DCSR(ep->dma) &= ~DCSR_RUN;
++
++ if (dcsr & DCSR_BUSERR) {
++ DCSR(dmach) = DCSR_BUSERR;
++ printk(KERN_ERR " Buss Error\n");
++ req->req.status = -EIO;
++ completed = 1;
++ } else if (dcsr & DCSR_ENDINTR) {
++ DCSR(dmach) = DCSR_ENDINTR;
++ if (ep->dir_in) {
++ tmp = req->req.length - req->req.actual;
++ /* Last packet is a short one */
++ if (tmp < ep->ep.maxpacket) {
++ int count = 0;
++
++ *ep->reg_udccsr = UDCCSR_SP |
++ (*ep->reg_udccsr & UDCCSR_MASK);
++ /*Wait for packet out */
++ while ((count++ < 10000) &&
++ !(*ep->reg_udccsr & UDCCSR_FS)) ;
++ if (count >= 10000)
++ DMSG("Failed to send packet\n");
++ else
++ DMSG("%s: short packet sent len:%d,"
++ "length:%d,actual:%d\n",
++ __FUNCTION__, tmp, req->req.length,
++ req->req.actual);
++ req->req.actual = req->req.length;
++ completed = 1;
++ /* There are still packets to transfer */
++ } else if (ep->dma_con) {
++ DMSG("%s: more packets,length:%d,actual:%d\n",
++ __FUNCTION__, req->req.length,
++ req->req.actual);
++ req->req.actual += ep->ep.maxpacket;
++ completed = 0;
++ } else {
++ DMSG("%s: no more packets,length:%d,"
++ "actual:%d\n", __FUNCTION__,
++ req->req.length, req->req.actual);
++ req->req.actual = req->req.length;
++ completed = 1;
++ }
++ } else {
++ req->req.actual = req->req.length;
++ completed = 1;
++ }
++ } else if (dcsr & DCSR_EORINTR) { /* Only happened in OUT DMA */
++ int remain, udccsr;
++
++ DCSR(dmach) = DCSR_EORINTR;
++ remain = DCMD(dmach) & DCMD_LENGTH;
++ req->req.actual = req->req.length - remain;
++
++ udccsr = *ep->reg_udccsr;
++ if (udccsr & UDCCSR_SP) {
++ *ep->reg_udccsr = UDCCSR_PC | (udccsr & UDCCSR_MASK);
++ completed = 1;
++ }
++ DMSG("%s: length:%d actual:%d\n",
++ __FUNCTION__, req->req.length, req->req.actual);
++ } else
++ DMSG("%s: Others dma:%d DCSR:0x%x DCMD:0x%x\n",
++ __FUNCTION__, dmach, DCSR(dmach), DCMD(dmach));
++
++ if (likely(completed)) {
++ if (req->queue.next != &ep->queue) {
++ req_next = list_entry(req->queue.next,
++ struct pxa27x_request, queue);
++ kick_dma(ep, req_next);
++ }
++ done(ep, req, 0);
++ } else {
++ kick_dma(ep, req);
++ }
++
++ local_irq_enable();
++}
++
++#endif
++/*-------------------------------------------------------------------------*/
++
++static int
++pxa27x_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
++ unsigned int gfp_flags)
++{
++ struct pxa27x_ep *ep;
++ struct pxa27x_request *req;
++ struct pxa27x_udc *dev;
++ unsigned long flags;
++
++ req = container_of(_req, struct pxa27x_request, req);
++ if (unlikely(!_req || !_req->complete || !_req->buf ||
++ !list_empty(&req->queue))) {
++ DMSG("%s, bad params\n", __FUNCTION__);
++ return -EINVAL;
++ }
++
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (unlikely(!_ep || (!ep->desc && ep->ep.name != ep0name))) {
++ DMSG("%s, bad ep\n", __FUNCTION__);
++ return -EINVAL;
++ }
++
++ DMSG("%s, ep point %d is queue\n", __FUNCTION__, ep->ep_num);
++
++ dev = ep->dev;
++ if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)) {
++ DMSG("%s, bogus device state\n", __FUNCTION__);
++ return -ESHUTDOWN;
++ }
++
++ /* iso is always one packet per request, that's the only way
++ * we can report per-packet status. that also helps with dma.
++ */
++ if (unlikely(ep->ep_type == USB_ENDPOINT_XFER_ISOC
++ && req->req.length > le16_to_cpu
++ (ep->desc->wMaxPacketSize)))
++ return -EMSGSIZE;
++
++#ifdef USE_DMA
++ /* FIXME: caller may already have done the dma mapping */
++ if (ep->dma >= 0) {
++ _req->dma = dma_map_single(dev->dev, _req->buf, _req->length,
++ (ep->
++ dir_in) ? DMA_TO_DEVICE :
++ DMA_FROM_DEVICE);
++ }
++#endif
++
++ DBG(DBG_NOISY, "%s queue req %p, len %d buf %p\n",
++ _ep->name, _req, _req->length, _req->buf);
++
++ local_irq_save(flags);
++
++ _req->status = -EINPROGRESS;
++ _req->actual = 0;
++
++ /* kickstart this i/o queue? */
++ if (list_empty(&ep->queue) && !ep->stopped) {
++ if (ep->desc == 0 /* ep0 */ ) {
++ unsigned length = _req->length;
++
++ switch (dev->ep0state) {
++ case EP0_IN_DATA_PHASE:
++ dev->stats.write.ops++;
++ if (write_ep0_fifo(ep, req))
++ req = 0;
++ break;
++
++ case EP0_OUT_DATA_PHASE:
++ dev->stats.read.ops++;
++ if (dev->req_pending)
++ ep0start(dev, UDCCSR0_IPR, "OUT");
++ if (length == 0 || ((UDCCSR0 & UDCCSR0_RNE) != 0
++ && read_ep0_fifo(ep,
++ req))) {
++ ep0_idle(dev);
++ done(ep, req, 0);
++ req = 0;
++ }
++ break;
++ case EP0_NO_ACTION:
++ ep0_idle(dev);
++ req = 0;
++ break;
++ default:
++ DMSG("ep0 i/o, odd state %d\n", dev->ep0state);
++ local_irq_restore(flags);
++ return -EL2HLT;
++ }
++#ifdef USE_DMA
++ /* either start dma or prime pio pump */
++ } else if (ep->dma >= 0) {
++ kick_dma(ep, req);
++#endif
++ /* can the FIFO can satisfy the request immediately? */
++ } else if (ep->dir_in
++ && (*ep->reg_udccsr & UDCCSR_FS) != 0
++ && write_fifo(ep, req)) {
++ req = 0;
++ } else if ((*ep->reg_udccsr & UDCCSR_FS) != 0
++ && read_fifo(ep, req)) {
++ req = 0;
++ }
++ DMSG("req:%p,ep->desc:%p,ep->dma:%d\n", req, ep->desc, ep->dma);
++ if (likely(req && ep->desc) && ep->dma < 0)
++ pio_irq_enable(ep->ep_num);
++ }
++
++ /* pio or dma irq handler advances the queue. */
++ if (likely(req != 0))
++ list_add_tail(&req->queue, &ep->queue);
++ local_irq_restore(flags);
++
++ return 0;
++}
++
++/*
++ * nuke - dequeue ALL requests
++ */
++static void nuke(struct pxa27x_ep *ep, int status)
++{
++ struct pxa27x_request *req;
++
++ /* called with irqs blocked */
++#ifdef USE_DMA
++ if (ep->dma >= 0 && !ep->stopped)
++ cancel_dma(ep);
++#endif
++ while (!list_empty(&ep->queue)) {
++ req = list_entry(ep->queue.next, struct pxa27x_request, queue);
++ done(ep, req, status);
++ }
++ if (ep->desc)
++ pio_irq_disable(ep->ep_num);
++}
++
++/* dequeue JUST ONE request */
++static int pxa27x_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
++{
++ struct pxa27x_ep *ep;
++ struct pxa27x_request *req;
++ unsigned long flags;
++
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (!_ep || ep->ep.name == ep0name)
++ return -EINVAL;
++
++ local_irq_save(flags);
++
++ /* make sure it's actually queued on this endpoint */
++ list_for_each_entry(req, &ep->queue, queue) {
++ if (&req->req == _req)
++ break;
++ }
++ if (&req->req != _req) {
++ local_irq_restore(flags);
++ return -EINVAL;
++ }
++#ifdef USE_DMA
++ if (ep->dma >= 0 && ep->queue.next == &req->queue && !ep->stopped) {
++ cancel_dma(ep);
++ done(ep, req, -ECONNRESET);
++ /* restart i/o */
++ if (!list_empty(&ep->queue)) {
++ req = list_entry(ep->queue.next,
++ struct pxa27x_request, queue);
++ kick_dma(ep, req);
++ }
++ } else
++#endif
++ done(ep, req, -ECONNRESET);
++
++ local_irq_restore(flags);
++ return 0;
++}
++
++/*-------------------------------------------------------------------------*/
++
++static int pxa27x_ep_set_halt(struct usb_ep *_ep, int value)
++{
++ struct pxa27x_ep *ep;
++ unsigned long flags;
++
++ DMSG("%s is called\n", __FUNCTION__);
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (unlikely(!_ep || (!ep->desc && ep->ep.name != ep0name))
++ || ep->ep_type == USB_ENDPOINT_XFER_ISOC) {
++ DMSG("%s, bad ep\n", __FUNCTION__);
++ return -EINVAL;
++ }
++ if (value == 0) {
++ /* this path (reset toggle+halt) is needed to implement
++ * SET_INTERFACE on normal hardware. but it can't be
++ * done from software on the PXA UDC, and the hardware
++ * forgets to do it as part of SET_INTERFACE automagic.
++ */
++ DMSG("only host can clear %s halt\n", _ep->name);
++ return -EROFS;
++ }
++
++ local_irq_save(flags);
++
++ if (ep->dir_in && ((*ep->reg_udccsr & UDCCSR_FS) == 0
++ || !list_empty(&ep->queue))) {
++ local_irq_restore(flags);
++ return -EAGAIN;
++ }
++
++ /* FST bit is the same for control, bulk in, bulk out, interrupt in */
++ *ep->reg_udccsr = UDCCSR_FST | UDCCSR_FEF;
++
++ /* ep0 needs special care */
++ if (!ep->desc) {
++ start_watchdog(ep->dev);
++ ep->dev->req_pending = 0;
++ ep->dev->ep0state = EP0_STALL;
++ LED_EP0_OFF;
++
++ /* and bulk/intr endpoints like dropping stalls too */
++ } else {
++ unsigned i;
++ for (i = 0; i < 1000; i += 20) {
++ if (*ep->reg_udccsr & UDCCSR_SST)
++ break;
++ udelay(20);
++ }
++ }
++ local_irq_restore(flags);
++
++ DBG(DBG_VERBOSE, "%s halt\n", _ep->name);
++ return 0;
++}
++
++static int pxa27x_ep_fifo_status(struct usb_ep *_ep)
++{
++ struct pxa27x_ep *ep;
++
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (!_ep) {
++ DMSG("%s, bad ep\n", __FUNCTION__);
++ return -ENODEV;
++ }
++ /* pxa can't report unclaimed bytes from IN fifos */
++ if (ep->dir_in)
++ return -EOPNOTSUPP;
++ if (ep->dev->gadget.speed == USB_SPEED_UNKNOWN
++ || (*ep->reg_udccsr & UDCCSR_FS) == 0)
++ return 0;
++ else
++ return (*ep->reg_udcbcr & 0xfff) + 1;
++}
++
++static void pxa27x_ep_fifo_flush(struct usb_ep *_ep)
++{
++ struct pxa27x_ep *ep;
++
++ ep = container_of(_ep, struct pxa27x_ep, ep);
++ if (!_ep || ep->ep.name == ep0name || !list_empty(&ep->queue)) {
++ DMSG("%s, bad ep\n", __FUNCTION__);
++ return;
++ }
++
++ /* toggle and halt bits stay unchanged */
++
++ /* for OUT, just read and discard the FIFO contents. */
++ if (!ep->dir_in) {
++ while (((*ep->reg_udccsr) & UDCCSR_BNE) != 0)
++ (void)*ep->reg_udcdr;
++ return;
++ }
++
++ /* most IN status is the same, but ISO can't stall */
++ *ep->reg_udccsr = UDCCSR_PC | UDCCSR_FST | UDCCSR_TRN
++ | (ep->ep_type == USB_ENDPOINT_XFER_ISOC)
++ ? 0 : UDCCSR_SST;
++}
++
++static struct usb_ep_ops pxa27x_ep_ops = {
++ .enable = pxa27x_ep_enable,
++ .disable = pxa27x_ep_disable,
++
++ .alloc_request = pxa27x_ep_alloc_request,
++ .free_request = pxa27x_ep_free_request,
++
++#warning "CHECK comments here"
++ /*
++ .alloc_buffer = pxa27x_ep_alloc_buffer,
++ .free_buffer = pxa27x_ep_free_buffer,
++ */
++
++ .queue = pxa27x_ep_queue,
++ .dequeue = pxa27x_ep_dequeue,
++
++ .set_halt = pxa27x_ep_set_halt,
++ .fifo_status = pxa27x_ep_fifo_status,
++ .fifo_flush = pxa27x_ep_fifo_flush,
++};
++
++/* ---------------------------------------------------------------------------
++ * device-scoped parts of the api to the usb controller hardware
++ * ---------------------------------------------------------------------------
++ */
++
++static inline void validate_fifo_size(struct pxa27x_ep *pxa_ep, u8 bmAttributes)
++{
++ switch (bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
++ case USB_ENDPOINT_XFER_CONTROL:
++ pxa_ep->fifo_size = EP0_FIFO_SIZE;
++ break;
++ case USB_ENDPOINT_XFER_ISOC:
++ pxa_ep->fifo_size = ISO_FIFO_SIZE;
++ break;
++ case USB_ENDPOINT_XFER_BULK:
++ pxa_ep->fifo_size = BULK_FIFO_SIZE;
++ break;
++ case USB_ENDPOINT_XFER_INT:
++ pxa_ep->fifo_size = INT_FIFO_SIZE;
++ break;
++ default:
++ break;
++ }
++}
++
++#define NAME_SIZE 18
++struct usb_ep *pxa27x_ep_alloc(struct usb_gadget *gadget,
++ struct usb_endpoint_descriptor *desc, int config,
++ int interface, int alt)
++{
++ u32 tmp;
++ unsigned i;
++ char *name;
++ struct usb_ep *ep = NULL;
++ struct pxa27x_ep *pxa_ep = NULL;
++ struct pxa27x_udc *dev = the_controller;
++
++ DMSG("pxa27x_config_ep is called\n");
++ DMSG(" usb endpoint descriptor is:\n"
++ " bLength:%d\n"
++ " bDescriptorType:%x\n"
++ " bEndpointAddress:%x\n"
++ " bmAttributes:%x\n"
++ " wMaxPacketSize:%d\n",
++ desc->bLength,
++ desc->bDescriptorType, desc->bEndpointAddress,
++ desc->bmAttributes, desc->wMaxPacketSize);
++
++ for (i = 1; i < UDC_EP_NUM; i++) {
++ if (!dev->ep[i].assigned) {
++ pxa_ep = &dev->ep[i];
++ pxa_ep->assigned = 1;
++ pxa_ep->ep_num = i;
++ break;
++ }
++ }
++ if (unlikely(i == UDC_EP_NUM)) {
++ printk(KERN_ERR __FILE__ ": Failed to find a spare endpoint\n");
++ return ep;
++ }
++
++ ep = &pxa_ep->ep;
++
++ pxa_ep->dev = dev;
++ pxa_ep->desc = desc;
++ pxa_ep->pio_irqs = pxa_ep->dma_irqs = 0;
++ pxa_ep->dma = -1;
++
++ if (!(desc->bEndpointAddress & 0xF))
++ desc->bEndpointAddress |= i;
++
++ if (!(desc->wMaxPacketSize)) {
++ validate_fifo_size(pxa_ep, desc->bmAttributes);
++ desc->wMaxPacketSize = pxa_ep->fifo_size;
++ } else
++ pxa_ep->fifo_size = desc->wMaxPacketSize;
++
++ pxa_ep->dir_in = (desc->bEndpointAddress & USB_DIR_IN) ? 1 : 0;
++ pxa_ep->ep_type = desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
++ pxa_ep->stopped = 1;
++ pxa_ep->dma_con = 0;
++ pxa_ep->config = config;
++ pxa_ep->interface = interface;
++ pxa_ep->aisn = alt;
++
++ pxa_ep->reg_udccsr = &UDCCSR0 + i;
++ pxa_ep->reg_udcbcr = &UDCBCR0 + i;
++ pxa_ep->reg_udcdr = &UDCDR0 + i;
++ pxa_ep->reg_udccr = &UDCCRA - 1 + i;
++#ifdef USE_DMA
++ pxa_ep->reg_drcmr = &DRCMR24 + i;
++#endif
++
++ DMSG("udccsr=0x%8x, udcbcr=0x%8x, udcdr=0x%8x,"
++ "udccr0=0x%8x\n",
++ (unsigned)pxa_ep->reg_udccsr,
++ (unsigned)pxa_ep->reg_udcbcr,
++ (unsigned)pxa_ep->reg_udcdr, (unsigned)pxa_ep->reg_udccr);
++
++ /* Configure UDCCR */
++ tmp = 0;
++ tmp |= (pxa_ep->config << UDCCONR_CN_S) & UDCCONR_CN;
++#if 0
++ tmp |= (pxa_ep->interface << UDCCONR_IN_S) & UDCCONR_IN;
++ tmp |= (pxa_ep->aisn << UDCCONR_AISN_S) & UDCCONR_AISN;
++#else
++ tmp |= (0 << UDCCONR_IN_S) & UDCCONR_IN;
++ tmp |= (0 << UDCCONR_AISN_S) & UDCCONR_AISN;
++#endif
++ tmp |= (desc->bEndpointAddress << UDCCONR_EN_S) & UDCCONR_EN;
++ tmp |= (pxa_ep->ep_type << UDCCONR_ET_S) & UDCCONR_ET;
++ tmp |= (pxa_ep->dir_in) ? UDCCONR_ED : 0;
++ tmp |= (min(pxa_ep->fifo_size, (unsigned)desc->wMaxPacketSize)
++ << UDCCONR_MPS_S) & UDCCONR_MPS;
++ tmp |= UDCCONR_DE | UDCCONR_EE;
++#if 0
++ tmp |= UDCCONR_EE;
++#endif
++
++ *pxa_ep->reg_udccr = tmp;
++
++#ifdef USE_DMA
++ /* Only BULK use DMA */
++ if ((pxa_ep->ep_type & USB_ENDPOINT_XFERTYPE_MASK)
++ == USB_ENDPOINT_XFER_BULK)
++ *pxa_ep->reg_udccsr = UDCCSR_DME;
++#endif
++
++ DMSG("UDCCR: 0x%p is 0x%x\n", pxa_ep->reg_udccr, *pxa_ep->reg_udccr);
++
++ /* Fill ep name */
++ name = kmalloc(NAME_SIZE, GFP_KERNEL);
++ if (!name) {
++ printk(KERN_ERR "%s: Error\n", __FUNCTION__);
++ return NULL;
++ }
++
++ switch (pxa_ep->ep_type) {
++ case USB_ENDPOINT_XFER_BULK:
++ sprintf(name, "Bulk-%s-%d", (pxa_ep->dir_in ? "in" : "out"), i);
++ break;
++ case USB_ENDPOINT_XFER_INT:
++ sprintf(name, "Interrupt-%s-%d", (pxa_ep->dir_in ?
++ "in" : "out"), i);
++ break;
++ default:
++ sprintf(name, "endpoint-%s-%d", (pxa_ep->dir_in ?
++ "in" : "out"), i);
++ break;
++ }
++ ep->name = name;
++
++ ep->ops = &pxa27x_ep_ops;
++ ep->maxpacket = min((ushort) pxa_ep->fifo_size, desc->wMaxPacketSize);
++
++ list_add_tail(&ep->ep_list, &gadget->ep_list);
++ return ep;
++}
++
++static int pxa27x_udc_get_frame(struct usb_gadget *_gadget)
++{
++ return (UDCFNR & 0x3FF);
++}
++
++static int pxa27x_udc_wakeup(struct usb_gadget *_gadget)
++{
++ /* host may not have enabled remote wakeup */
++ if ((UDCCR & UDCCR_DWRE) == 0)
++ return -EHOSTUNREACH;
++ udc_set_mask_UDCCR(UDCCR_UDR);
++ return 0;
++}
++
++static const struct usb_gadget_ops pxa27x_udc_ops = {
++ .ep_alloc = pxa27x_ep_alloc,
++ .get_frame = pxa27x_udc_get_frame,
++ .wakeup = pxa27x_udc_wakeup,
++ /* current versions must always be self-powered */
++};
++
++/*-------------------------------------------------------------------------*/
++
++#ifdef UDC_PROC_FILE
++
++static const char proc_node_name[] = "driver/udc";
++
++static int
++udc_proc_read(char *page, char **start, off_t off, int count,
++ int *eof, void *_dev)
++{
++ char *buf = page;
++ struct pxa27x_udc *dev = _dev;
++ char *next = buf;
++ unsigned size = count;
++ unsigned long flags;
++ int i, t;
++ u32 tmp;
++
++ if (off != 0)
++ return 0;
++
++ local_irq_save(flags);
++
++ /* basic device status */
++ t = scnprintf(next, size, DRIVER_DESC "\n"
++ "%s version: %s\nGadget driver: %s\n",
++ driver_name, DRIVER_VERSION SIZE_STR DMASTR,
++ dev->driver ? dev->driver->driver.name : "(none)");
++ size -= t;
++ next += t;
++
++ /* registers for device and ep0 */
++ t = scnprintf(next, size,
++ "uicr %02X.%02X, usir %02X.%02x, ufnr %02X\n",
++ UDCICR1, UDCICR0, UDCISR1, UDCISR0, UDCFNR);
++ size -= t;
++ next += t;
++
++ tmp = UDCCR;
++ t = scnprintf(next, size,
++ "udccr %02X =%s%s%s%s%s%s%s%s%s%s, con=%d,inter=%d,altinter=%d\n",
++ tmp, (tmp & UDCCR_OEN) ? " oen" : "",
++ (tmp & UDCCR_AALTHNP) ? " aalthnp" : "",
++ (tmp & UDCCR_AHNP) ? " rem" : "",
++ (tmp & UDCCR_BHNP) ? " rstir" : "",
++ (tmp & UDCCR_DWRE) ? " dwre" : "",
++ (tmp & UDCCR_SMAC) ? " smac" : "",
++ (tmp & UDCCR_EMCE) ? " emce" : "",
++ (tmp & UDCCR_UDR) ? " udr" : "",
++ (tmp & UDCCR_UDA) ? " uda" : "",
++ (tmp & UDCCR_UDE) ? " ude" : "",
++ (tmp & UDCCR_ACN) >> UDCCR_ACN_S,
++ (tmp & UDCCR_AIN) >> UDCCR_AIN_S,
++ (tmp & UDCCR_AAISN) >> UDCCR_AAISN_S);
++
++ size -= t;
++ next += t;
++
++ tmp = UDCCSR0;
++ t = scnprintf(next, size,
++ "udccsr0 %02X =%s%s%s%s%s%s%s\n", tmp,
++ (tmp & UDCCSR0_SA) ? " sa" : "",
++ (tmp & UDCCSR0_RNE) ? " rne" : "",
++ (tmp & UDCCSR0_FST) ? " fst" : "",
++ (tmp & UDCCSR0_SST) ? " sst" : "",
++ (tmp & UDCCSR0_DME) ? " dme" : "",
++ (tmp & UDCCSR0_IPR) ? " ipr" : "",
++ (tmp & UDCCSR0_OPC) ? " opc" : "");
++ size -= t;
++ next += t;
++
++ if (!dev->driver)
++ goto done;
++
++ t = scnprintf(next, size, "ep0 IN %lu/%lu, OUT %lu/%lu\nirqs %lu\n\n",
++ dev->stats.write.bytes, dev->stats.write.ops,
++ dev->stats.read.bytes, dev->stats.read.ops,
++ dev->stats.irqs);
++ size -= t;
++ next += t;
++
++ /* dump endpoint queues */
++ for (i = 0; i < UDC_EP_NUM; i++) {
++ struct pxa27x_ep *ep = &dev->ep[i];
++ struct pxa27x_request *req;
++ int t;
++
++ if (i != 0) {
++ const struct usb_endpoint_descriptor *d;
++
++ d = ep->desc;
++ if (!d)
++ continue;
++ tmp = *dev->ep[i].reg_udccsr;
++ t = scnprintf(next, size,
++ "%s max %d %s udccs %02x udccr:0x%x\n",
++ ep->ep.name,
++ le16_to_cpu(d->wMaxPacketSize),
++ (ep->dma >= 0) ? "dma" : "pio", tmp,
++ *dev->ep[i].reg_udccr);
++ /* TODO translate all five groups of udccs bits! */
++
++ } else /* ep0 should only have one transfer queued */
++ t = scnprintf(next, size, "ep0 max 16 pio irqs %lu\n",
++ ep->pio_irqs);
++ if (t <= 0 || t > size)
++ goto done;
++ size -= t;
++ next += t;
++
++ if (list_empty(&ep->queue)) {
++ t = scnprintf(next, size, "\t(nothing queued)\n");
++ if (t <= 0 || t > size)
++ goto done;
++ size -= t;
++ next += t;
++ continue;
++ }
++ list_for_each_entry(req, &ep->queue, queue) {
++#ifdef USE_DMA
++ if (ep->dma >= 0 && req->queue.prev == &ep->queue)
++ t = scnprintf(next, size,
++ "\treq %p len %d/%d "
++ "buf %p (dma%d dcmd %08x)\n",
++ &req->req, req->req.actual,
++ req->req.length, req->req.buf,
++ ep->dma, DCMD(ep->dma)
++ /* low 13 bits == bytes-to-go */
++ );
++ else
++#endif
++ t = scnprintf(next, size,
++ "\treq %p len %d/%d buf %p\n",
++ &req->req, req->req.actual,
++ req->req.length, req->req.buf);
++ if (t <= 0 || t > size)
++ goto done;
++ size -= t;
++ next += t;
++ }
++ }
++
++ done:
++ local_irq_restore(flags);
++ *eof = 1;
++ return count - size;
++}
++
++#define create_proc_files() \
++ create_proc_read_entry(proc_node_name, 0, NULL, udc_proc_read, dev)
++#define remove_proc_files() \
++ remove_proc_entry(proc_node_name, NULL)
++
++#else /* !UDC_PROC_FILE */
++#define create_proc_files() do {} while (0)
++#define remove_proc_files() do {} while (0)
++
++#endif /* UDC_PROC_FILE */
++
++/* "function" sysfs attribute */
++static ssize_t
++show_function(struct device *_dev, struct device_attribute *attr, char *buf)
++{
++ struct pxa27x_udc *dev = dev_get_drvdata(_dev);
++
++ if (!dev->driver
++ || !dev->driver->function
++ || strlen(dev->driver->function) > PAGE_SIZE)
++ return 0;
++ return scnprintf(buf, PAGE_SIZE, "%s\n", dev->driver->function);
++}
++
++static DEVICE_ATTR(function, S_IRUGO, show_function, NULL);
++
++/*-------------------------------------------------------------------------*/
++
++/*
++ * udc_disable - disable USB device controller
++ */
++static void udc_disable(struct pxa27x_udc *dev)
++{
++ UDCICR0 = 0x00000000;
++ UDCICR1 = 0x00000000;
++
++ udc_clear_mask_UDCCR(UDCCR_UDE);
++
++ /* Disable clock for USB device */
++ pxa_set_cken(CKEN_USB, 0);
++
++ ep0_idle(dev);
++ dev->gadget.speed = USB_SPEED_UNKNOWN;
++
++ pullup_off();
++}
++
++/*
++ * udc_reinit - initialize software state
++ */
++static void udc_reinit(struct pxa27x_udc *dev)
++{
++ u32 i;
++
++ dev->ep0state = EP0_IDLE;
++
++ /* basic endpoint records init */
++ for (i = 0; i < UDC_EP_NUM; i++) {
++ struct pxa27x_ep *ep = &dev->ep[i];
++
++ ep->stopped = 0;
++ ep->pio_irqs = ep->dma_irqs = 0;
++ }
++ dev->configuration = 0;
++ dev->interface = 0;
++ dev->alternate = 0;
++ /* the rest was statically initialized, and is read-only */
++}
++
++/* until it's enabled, this UDC should be completely invisible
++ * to any USB host.
++ */
++static void udc_enable(struct pxa27x_udc *dev)
++{
++ udc_clear_mask_UDCCR(UDCCR_UDE);
++
++ /* Enable clock for USB device */
++ pxa_set_cken(CKEN_USB, 1);
++
++ UDCICR0 = UDCICR1 = 0;
++
++ ep0_idle(dev);
++ dev->gadget.speed = USB_SPEED_FULL;
++ dev->stats.irqs = 0;
++
++ udc_set_mask_UDCCR(UDCCR_UDE);
++ udelay(2);
++ if (UDCCR & UDCCR_EMCE) {
++ printk(KERN_ERR
++ ": There are error in configuration, udc disabled\n");
++ }
++
++ /* caller must be able to sleep in order to cope
++ * with startup transients.
++ */
++ msleep(100);
++
++ /* enable suspend/resume and reset irqs */
++ UDCICR1 = UDCICR1_IECC | UDCICR1_IERU | UDCICR1_IESU | UDCICR1_IERS;
++
++ /* enable ep0 irqs */
++ UDCICR0 = UDCICR_INT(0, UDCICR_INT_MASK);
++#if 0
++ for (i = 1; i < UDC_EP_NUM; i++) {
++ if (dev->ep[i].assigned)
++ pio_irq_enable(i);
++ }
++#endif
++
++ pullup_on();
++}
++
++/* when a driver is successfully registered, it will receive
++ * control requests including set_configuration(), which enables
++ * non-control requests. then usb traffic follows until a
++ * disconnect is reported. then a host may connect again, or
++ * the driver might get unbound.
++ */
++int usb_gadget_register_driver(struct usb_gadget_driver *driver)
++{
++ struct pxa27x_udc *dev = the_controller;
++ int retval;
++
++ DMSG("dev=0x%x, driver=0x%x, speed=%d, "
++ "bind=0x%x, unbind=0x%x, disconnect=0x%x, setup=0x%x\n",
++ (unsigned)dev, (unsigned)driver, driver->speed,
++ (unsigned)driver->bind, (unsigned)driver->unbind,
++ (unsigned)driver->disconnect, (unsigned)driver->setup);
++
++ if (!driver || driver->speed != USB_SPEED_FULL
++ || !driver->bind
++ || !driver->unbind || !driver->disconnect || !driver->setup)
++ return -EINVAL;
++ if (!dev)
++ return -ENODEV;
++ if (dev->driver)
++ return -EBUSY;
++
++ /* first hook up the driver ... */
++ dev->driver = driver;
++ dev->gadget.dev.driver = &driver->driver;
++
++ retval = device_add(&dev->gadget.dev);
++ if (retval) {
++ DMSG("unable to add device for %s --> error %d\n",
++ driver->driver.name, retval);
++ goto device_add_error;
++ }
++ retval = driver->bind(&dev->gadget);
++ if (retval) {
++ DMSG("bind to driver %s --> error %d\n",
++ driver->driver.name, retval);
++ goto device_bind_error;
++ }
++ retval = device_create_file(dev->dev, &dev_attr_function);
++ if (retval) {
++ DMSG("unable to create file for %s --> error %d\n",
++ driver->driver.name, retval);
++ goto create_file_error;
++ }
++
++ /* ... then enable host detection and ep0; and we're ready
++ * for set_configuration as well as eventual disconnect.
++ * NOTE: this shouldn't power up until later.
++ */
++ DMSG("registered gadget driver '%s'\n", driver->driver.name);
++ udc_enable(dev);
++ dump_state(dev);
++
++ return 0;
++
++ create_file_error:
++ driver->unbind(&dev->gadget);
++
++ device_bind_error:
++ device_del(&dev->gadget.dev);
++
++ device_add_error:
++ dev->driver = 0;
++ dev->gadget.dev.driver = 0;
++
++ return retval;
++}
++
++EXPORT_SYMBOL(usb_gadget_register_driver);
++
++static void
++stop_activity(struct pxa27x_udc *dev, struct usb_gadget_driver *driver)
++{
++ int i;
++
++ DMSG("Trace path 1\n");
++ /* don't disconnect drivers more than once */
++ if (dev->gadget.speed == USB_SPEED_UNKNOWN)
++ driver = 0;
++ dev->gadget.speed = USB_SPEED_UNKNOWN;
++
++ /* prevent new request submissions, kill any outstanding requests */
++ for (i = 0; i < UDC_EP_NUM; i++) {
++ struct pxa27x_ep *ep = &dev->ep[i];
++
++ ep->stopped = 1;
++ nuke(ep, -ESHUTDOWN);
++ }
++ del_timer_sync(&dev->timer);
++
++ /* report disconnect; the driver is already quiesced */
++ if (driver)
++ driver->disconnect(&dev->gadget);
++
++ /* re-init driver-visible data structures */
++ udc_reinit(dev);
++}
++
++int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
++{
++ struct pxa27x_udc *dev = the_controller;
++
++ if (!dev)
++ return -ENODEV;
++ if (!driver || driver != dev->driver)
++ return -EINVAL;
++
++ local_irq_disable();
++ udc_disable(dev);
++ stop_activity(dev, driver);
++ local_irq_enable();
++
++ driver->unbind(&dev->gadget);
++ dev->driver = 0;
++
++ device_del(&dev->gadget.dev);
++ device_remove_file(dev->dev, &dev_attr_function);
++
++ DMSG("unregistered gadget driver '%s'\n", driver->driver.name);
++ dump_state(dev);
++ return 0;
++}
++
++EXPORT_SYMBOL(usb_gadget_unregister_driver);
++
++#ifndef enable_disconnect_irq
++#define enable_disconnect_irq() do {} while (0)
++#define disable_disconnect_irq() do {} while (0)
++#endif
++
++/*-------------------------------------------------------------------------*/
++
++static inline void clear_ep_state(struct pxa27x_udc *dev)
++{
++ unsigned i;
++
++ /* hardware SET_{CONFIGURATION,INTERFACE} automagic resets endpoint
++ * fifos, and pending transactions mustn't be continued in any case.
++ */
++ for (i = 1; i < UDC_EP_NUM; i++)
++ nuke(&dev->ep[i], -ECONNABORTED);
++}
++
++static void udc_watchdog(unsigned long _dev)
++{
++ struct pxa27x_udc *dev = (void *)_dev;
++
++ local_irq_disable();
++ if (dev->ep0state == EP0_STALL
++ && (UDCCSR0 & UDCCSR0_FST) == 0 && (UDCCSR0 & UDCCSR0_SST) == 0) {
++ UDCCSR0 = UDCCSR0_FST | UDCCSR0_FTF;
++ DBG(DBG_VERBOSE, "ep0 re-stall\n");
++ start_watchdog(dev);
++ }
++ local_irq_enable();
++}
++
++static void handle_ep0(struct pxa27x_udc *dev)
++{
++ u32 udccsr0 = UDCCSR0;
++ struct pxa27x_ep *ep = &dev->ep[0];
++ struct pxa27x_request *req;
++ union {
++ struct usb_ctrlrequest r;
++ u8 raw[8];
++ u32 word[2];
++ } u;
++
++ if (list_empty(&ep->queue))
++ req = 0;
++ else
++ req = list_entry(ep->queue.next, struct pxa27x_request, queue);
++
++ /* clear stall status */
++ if (udccsr0 & UDCCSR0_SST) {
++ nuke(ep, -EPIPE);
++ UDCCSR0 = UDCCSR0_SST;
++ del_timer(&dev->timer);
++ ep0_idle(dev);
++ }
++
++ /* previous request unfinished? non-error iff back-to-back ... */
++ if ((udccsr0 & UDCCSR0_SA) != 0 && dev->ep0state != EP0_IDLE) {
++ nuke(ep, 0);
++ del_timer(&dev->timer);
++ ep0_idle(dev);
++ }
++
++ switch (dev->ep0state) {
++ case EP0_NO_ACTION:
++ printk(KERN_INFO "%s: Busy\n", __FUNCTION__);
++ /*Fall through */
++ case EP0_IDLE:
++ /* late-breaking status? */
++ udccsr0 = UDCCSR0;
++
++ /* start control request? */
++ if (likely((udccsr0 & (UDCCSR0_OPC | UDCCSR0_SA | UDCCSR0_RNE))
++ == (UDCCSR0_OPC | UDCCSR0_SA | UDCCSR0_RNE))) {
++ int i;
++
++ nuke(ep, -EPROTO);
++ /* read SETUP packet */
++ for (i = 0; i < 2; i++) {
++ if (unlikely(!(UDCCSR0 & UDCCSR0_RNE))) {
++ bad_setup:
++ DMSG("SETUP %d!\n", i);
++ goto stall;
++ }
++ u.word[i] = UDCDR0;
++ }
++ if (unlikely((UDCCSR0 & UDCCSR0_RNE) != 0))
++ goto bad_setup;
++
++ le16_to_cpus(&u.r.wValue);
++ le16_to_cpus(&u.r.wIndex);
++ le16_to_cpus(&u.r.wLength);
++
++ LED_EP0_ON;
++
++ DBG(DBG_VERBOSE, "SETUP %02x.%02x v%04x i%04x l%04x\n",
++ u.r.bRequestType, u.r.bRequest,
++ u.r.wValue, u.r.wIndex, u.r.wLength);
++ /* cope with automagic for some standard requests. */
++ dev->req_std = (u.r.bRequestType & USB_TYPE_MASK)
++ == USB_TYPE_STANDARD;
++ dev->req_config = 0;
++ dev->req_pending = 1;
++#if 0
++ switch (u.r.bRequest) {
++ /* hardware was supposed to hide this */
++ case USB_REQ_SET_CONFIGURATION:
++ case USB_REQ_SET_INTERFACE:
++ case USB_REQ_SET_ADDRESS:
++ printk(KERN_ERR "Should not come here\n");
++ break;
++ }
++
++#endif
++ if (u.r.bRequestType & USB_DIR_IN)
++ dev->ep0state = EP0_IN_DATA_PHASE;
++ else
++ dev->ep0state = EP0_OUT_DATA_PHASE;
++ i = dev->driver->setup(&dev->gadget, &u.r);
++
++ if (i < 0) {
++ /* hardware automagic preventing STALL... */
++ if (dev->req_config) {
++ /* hardware sometimes neglects to tell
++ * tell us about config change events,
++ * so later ones may fail...
++ */
++ WARN("config change %02x fail %d?\n",
++ u.r.bRequest, i);
++ return;
++ /* TODO experiment: if has_cfr,
++ * hardware didn't ACK; maybe we
++ * could actually STALL!
++ */
++ }
++ DBG(DBG_VERBOSE, "protocol STALL, "
++ "%02x err %d\n", UDCCSR0, i);
++ stall:
++ /* the watchdog timer helps deal with cases
++ * where udc seems to clear FST wrongly, and
++ * then NAKs instead of STALLing.
++ */
++ ep0start(dev, UDCCSR0_FST | UDCCSR0_FTF,
++ "stall");
++ start_watchdog(dev);
++ dev->ep0state = EP0_STALL;
++ LED_EP0_OFF;
++
++ /* deferred i/o == no response yet */
++ } else if (dev->req_pending) {
++ if (likely(dev->ep0state == EP0_IN_DATA_PHASE
++ || dev->req_std || u.r.wLength))
++ ep0start(dev, 0, "defer");
++ else
++ ep0start(dev, UDCCSR0_IPR, "defer/IPR");
++ }
++
++ /* expect at least one data or status stage irq */
++ return;
++
++ } else {
++ /* some random early IRQ:
++ * - we acked FST
++ * - IPR cleared
++ * - OPC got set, without SA (likely status stage)
++ */
++ UDCCSR0 = udccsr0 & (UDCCSR0_SA | UDCCSR0_OPC);
++ }
++ break;
++ case EP0_IN_DATA_PHASE: /* GET_DESCRIPTOR etc */
++ if (udccsr0 & UDCCSR0_OPC) {
++ UDCCSR0 = UDCCSR0_OPC | UDCCSR0_FTF;
++ DBG(DBG_VERBOSE, "ep0in premature status\n");
++ if (req)
++ done(ep, req, 0);
++ ep0_idle(dev);
++ } else { /* irq was IPR clearing */
++
++ if (req) {
++ /* this IN packet might finish the request */
++ (void)write_ep0_fifo(ep, req);
++ } /* else IN token before response was written */
++ }
++ break;
++ case EP0_OUT_DATA_PHASE: /* SET_DESCRIPTOR etc */
++ if (udccsr0 & UDCCSR0_OPC) {
++ if (req) {
++ /* this OUT packet might finish the request */
++ if (read_ep0_fifo(ep, req))
++ done(ep, req, 0);
++ /* else more OUT packets expected */
++ } /* else OUT token before read was issued */
++ } else { /* irq was IPR clearing */
++
++ DBG(DBG_VERBOSE, "ep0out premature status\n");
++ if (req)
++ done(ep, req, 0);
++ ep0_idle(dev);
++ }
++ break;
++ case EP0_STALL:
++ UDCCSR0 = UDCCSR0_FST;
++ break;
++ }
++ UDCISR0 = UDCISR_INT(0, UDCISR_INT_MASK);
++}
++
++static void handle_ep(struct pxa27x_ep *ep)
++{
++ struct pxa27x_request *req;
++ int completed;
++ u32 udccsr = 0;
++
++ DMSG("%s is called\n", __FUNCTION__);
++ do {
++ completed = 0;
++ if (likely(!list_empty(&ep->queue))) {
++ req = list_entry(ep->queue.next,
++ struct pxa27x_request, queue);
++ } else
++ req = 0;
++
++#if 0
++ udccsr = *ep->reg_udccsr;
++#endif
++ DMSG("%s: req:%p, udcisr0:0x%x udccsr %p:0x%x\n", __FUNCTION__,
++ req, UDCISR0, ep->reg_udccsr, *ep->reg_udccsr);
++ if (unlikely(ep->dir_in)) {
++ udccsr = (UDCCSR_SST | UDCCSR_TRN) & *ep->reg_udccsr;
++ if (unlikely(udccsr))
++ *ep->reg_udccsr = udccsr;
++
++ if (req && likely((*ep->reg_udccsr & UDCCSR_FS) != 0))
++ completed = write_fifo(ep, req);
++
++ } else {
++ udccsr = (UDCCSR_SST | UDCCSR_TRN) & *ep->reg_udccsr;
++ if (unlikely(udccsr))
++ *ep->reg_udccsr = udccsr;
++
++ /* fifos can hold packets, ready for reading... */
++ if (likely(req)) {
++ completed = read_fifo(ep, req);
++ } else {
++ pio_irq_disable(ep->ep_num);
++ *ep->reg_udccsr = UDCCSR_FEF;
++ DMSG("%s: no req for out data\n", __FUNCTION__);
++ }
++ }
++ ep->pio_irqs++;
++ } while (completed);
++}
++
++static void pxa27x_change_configuration(struct pxa27x_udc *dev)
++{
++ struct usb_ctrlrequest req;
++
++ req.bRequestType = 0;
++ req.bRequest = USB_REQ_SET_CONFIGURATION;
++ req.wValue = dev->configuration;
++ req.wIndex = 0;
++ req.wLength = 0;
++
++ dev->ep0state = EP0_NO_ACTION;
++ dev->driver->setup(&dev->gadget, &req);
++
++}
++
++static void pxa27x_change_interface(struct pxa27x_udc *dev)
++{
++ struct usb_ctrlrequest req;
++
++ req.bRequestType = USB_RECIP_INTERFACE;
++ req.bRequest = USB_REQ_SET_INTERFACE;
++ req.wValue = dev->alternate;
++ req.wIndex = dev->interface;
++ req.wLength = 0;
++
++ dev->ep0state = EP0_NO_ACTION;
++ dev->driver->setup(&dev->gadget, &req);
++}
++
++/*
++ * pxa27x_udc_irq - interrupt handler
++ *
++ * avoid delays in ep0 processing. the control handshaking isn't always
++ * under software control (pxa250c0 and the pxa255 are better), and delays
++ * could cause usb protocol errors.
++ */
++static irqreturn_t pxa27x_udc_irq(int irq, void *_dev)
++{
++ struct pxa27x_udc *dev = _dev;
++ int handled;
++
++ dev->stats.irqs++;
++ HEX_DISPLAY(dev->stats.irqs);
++
++ DBG(DBG_VERBOSE, "Interrupt, UDCISR0:0x%08x, UDCISR1:0x%08x, "
++ "UDCCR:0x%08x\n", UDCISR0, UDCISR1, UDCCR);
++
++ do {
++ u32 udcir = UDCISR1 & 0xF8000000;
++
++ handled = 0;
++
++ /* SUSpend Interrupt Request */
++ if (unlikely(udcir & UDCISR1_IRSU)) {
++ UDCISR1 = UDCISR1_IRSU;
++ handled = 1;
++ DBG(DBG_VERBOSE, "USB suspend\n");
++ if (dev->gadget.speed != USB_SPEED_UNKNOWN
++ && dev->driver && dev->driver->suspend)
++ dev->driver->suspend(&dev->gadget);
++ ep0_idle(dev);
++ }
++
++ /* RESume Interrupt Request */
++ if (unlikely(udcir & UDCISR1_IRRU)) {
++ UDCISR1 = UDCISR1_IRRU;
++ handled = 1;
++ DBG(DBG_VERBOSE, "USB resume\n");
++
++ if (dev->gadget.speed != USB_SPEED_UNKNOWN
++ && dev->driver && dev->driver->resume)
++ dev->driver->resume(&dev->gadget);
++ }
++
++ if (unlikely(udcir & UDCISR1_IRCC)) {
++ unsigned config, interface, alternate;
++
++ handled = 1;
++ DBG(DBG_VERBOSE, "USB SET_CONFIGURATION or "
++ "SET_INTERFACE command received\n");
++
++ UDCCR |= UDCCR_SMAC;
++
++ config = (UDCCR & UDCCR_ACN) >> UDCCR_ACN_S;
++
++ if (dev->configuration != config) {
++ dev->configuration = config;
++ pxa27x_change_configuration(dev);
++ }
++
++ interface = (UDCCR & UDCCR_AIN) >> UDCCR_AIN_S;
++ alternate = (UDCCR & UDCCR_AAISN) >> UDCCR_AAISN_S;
++
++ if ((dev->configuration != interface) ||
++ (dev->alternate != alternate)) {
++ dev->interface = config;
++ dev->alternate = alternate;
++ pxa27x_change_interface(dev);
++ }
++
++ UDCISR1 = UDCISR1_IRCC;
++ DMSG("%s: con:%d,inter:%d,alt:%d\n",
++ __FUNCTION__, config, interface, alternate);
++ }
++
++ /* ReSeT Interrupt Request - USB reset */
++ if (unlikely(udcir & UDCISR1_IRRS)) {
++ UDCISR1 = UDCISR1_IRRS;
++ handled = 1;
++
++ if ((UDCCR & UDCCR_UDA) == 0) {
++ DBG(DBG_VERBOSE, "SB reset start\n");
++
++ /* reset driver and endpoints,
++ * in case that's not yet done
++ */
++ stop_activity(dev, dev->driver);
++
++ }
++ INFO("USB reset\n");
++ dev->gadget.speed = USB_SPEED_FULL;
++ memset(&dev->stats, 0, sizeof dev->stats);
++
++ } else {
++ u32 udcisr0 = UDCISR0;
++ u32 udcisr1 = UDCISR1 & 0xFFFF;
++ int i;
++
++ if (unlikely(!udcisr0 && !udcisr1))
++ continue;
++
++ DBG(DBG_VERY_NOISY, "irq %02x.%02x\n", udcisr1,
++ udcisr0);
++
++ /* control traffic */
++ if (udcisr0 & UDCISR0_IR0) {
++ dev->ep[0].pio_irqs++;
++ handle_ep0(dev);
++ handled = 1;
++ }
++
++ udcisr0 >>= 2;
++ /* endpoint data transfers */
++ for (i = 1; udcisr0 != 0 && i < 16; udcisr0 >>= 2, i++) {
++ UDCISR0 = UDCISR_INT(i, UDCISR_INT_MASK);
++
++ if (udcisr0 & UDC_INT_FIFOERROR)
++ printk(KERN_ERR
++ " Endpoint %d Fifo error\n", i);
++ if (udcisr0 & UDC_INT_PACKETCMP) {
++ handle_ep(&dev->ep[i]);
++ handled = 1;
++ }
++
++ }
++
++ for (i = 0; udcisr1 != 0 && i < 8; udcisr1 >>= 2, i++) {
++ UDCISR1 = UDCISR_INT(i, UDCISR_INT_MASK);
++
++ if (udcisr1 & UDC_INT_FIFOERROR) {
++ printk(KERN_ERR
++ " Endpoint %d fifo error\n",
++ (i + 16));
++ }
++
++ if (udcisr1 & UDC_INT_PACKETCMP) {
++ handle_ep(&dev->ep[i + 16]);
++ handled = 1;
++ }
++ }
++ }
++
++ /* we could also ask for 1 msec SOF (SIR) interrupts */
++
++ } while (handled);
++ return IRQ_HANDLED;
++}
++
++static void udc_init_ep(struct pxa27x_udc *dev)
++{
++ int i;
++
++ INIT_LIST_HEAD(&dev->gadget.ep_list);
++ INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
++
++ for (i = 0; i < UDC_EP_NUM; i++) {
++ struct pxa27x_ep *ep = &dev->ep[i];
++
++ ep->dma = -1;
++ if (i != 0) {
++ memset(ep, 0, sizeof(*ep));
++ }
++ INIT_LIST_HEAD(&ep->queue);
++ }
++}
++
++/*-------------------------------------------------------------------------*/
++
++static void nop_release(struct device *dev)
++{
++ DMSG("%s %s\n", __FUNCTION__, dev->bus_id);
++}
++
++/* this uses load-time allocation and initialization (instead of
++ * doing it at run-time) to save code, eliminate fault paths, and
++ * be more obviously correct.
++ */
++static struct pxa27x_udc memory = {
++ .gadget = {
++ .ops = &pxa27x_udc_ops,
++ .ep0 = &memory.ep[0].ep,
++ .name = driver_name,
++ .dev = {
++ .bus_id = "gadget",
++ .release = nop_release,
++ },
++ },
++
++ /* control endpoint */
++ .ep[0] = {
++ .ep = {
++ .name = ep0name,
++ .ops = &pxa27x_ep_ops,
++ .maxpacket = EP0_FIFO_SIZE,
++ },
++ .dev = &memory,
++ .reg_udccsr = &UDCCSR0,
++ .reg_udcdr = &UDCDR0,
++ }
++};
++
++#define CP15R0_VENDOR_MASK 0xffffe000
++
++#define CP15R0_XSCALE_VALUE 0x69054000 /* intel/arm/xscale */
++
++/*
++ * probe - binds to the platform device
++ */
++static int __init pxa27x_udc_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct pxa27x_udc *udc = &memory;
++ int irq, retval;
++ u32 chiprev;
++
++ /* insist on Intel/ARM/XScale */
++ asm("mrc%? p15, 0, %0, c0, c0":"=r"(chiprev));
++ if ((chiprev & CP15R0_VENDOR_MASK) != CP15R0_XSCALE_VALUE) {
++ printk(KERN_ERR "%s: not XScale!\n", driver_name);
++ return -ENODEV;
++ }
++
++ irq = platform_get_irq(pdev, 0);
++ if (irq < 0)
++ return -ENODEV;
++ pr_debug("%s: IRQ %d\n", driver_name, irq);
++
++ /* other non-static parts of init */
++ udc->dev = dev;
++ udc->mach = dev->platform_data;
++
++ /* Disable irq, erase old events and disable the pull up on the bus */
++ UDCICR0 = 0x00000000;
++ UDCICR1 = 0x00000000;
++ UDCISR0 = 0xffffffff;
++ UDCISR1 = 0xffffffff;
++ if (udc->mach->gpio_pullup) {
++ if ((retval = gpio_request(udc->mach->gpio_pullup,
++ "pca2xx_udc GPIO PULLUP"))) {
++ dev_dbg(&pdev->dev,
++ "can't get pullup gpio %d, err: %d\n",
++ udc->mach->gpio_pullup, retval);
++ if (udc->mach->gpio_vbus)
++ gpio_free(udc->mach->gpio_vbus);
++ return -EBUSY;
++ }
++ gpio_direction_output(udc->mach->gpio_pullup, 0);
++ }
++
++ init_timer(&udc->timer);
++ udc->timer.function = udc_watchdog;
++ udc->timer.data = (unsigned long)udc;
++
++ device_initialize(&udc->gadget.dev);
++ udc->gadget.dev.parent = dev;
++ udc->gadget.dev.dma_mask = dev->dma_mask;
++
++ the_controller = udc;
++ dev_set_drvdata(dev, udc);
++
++ udc_disable(udc);
++ udc_init_ep(udc);
++ udc_reinit(udc);
++
++ /* irq setup after old hardware state is cleaned up */
++ retval = request_irq(irq, pxa27x_udc_irq, 0, driver_name, udc);
++ if (retval != 0) {
++ printk(KERN_ERR "%s: can't get irq %i, err %d\n",
++ driver_name, irq, retval);
++ return -EBUSY;
++ }
++ udc->got_irq = 1;
++
++ create_proc_files();
++
++ return 0;
++}
++
++static void pxa27x_udc_shutdown(struct platform_device *_dev)
++{
++ pullup_off();
++}
++
++static int __exit pxa27x_udc_remove(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct pxa27x_udc *udc = dev->driver_data;
++
++ udc_disable(udc);
++ remove_proc_files();
++ usb_gadget_unregister_driver(udc->driver);
++
++ if (udc->got_irq) {
++ free_irq(platform_get_irq(pdev, 0), udc);
++ udc->got_irq = 0;
++ }
++ if (machine_is_lubbock() && udc->got_disc) {
++ free_irq(LUBBOCK_USB_DISC_IRQ, udc);
++ udc->got_disc = 0;
++ }
++ dev_set_drvdata(dev, 0);
++ the_controller = 0;
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int pxa27x_udc_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct device *dev = &pdev->dev;
++ struct pxa27x_udc *udc = dev->driver_data;
++ int i;
++
++ DMSG("%s will go into SUSPEND_POWER_DOWN\n", __FUNCTION__);
++ udc->udccsr0 = UDCCSR0;
++ for (i = 1; (i < UDC_EP_NUM); i++) {
++ if (udc->ep[i].assigned) {
++ struct pxa27x_ep *ep = &udc->ep[i];
++
++ ep->udccsr_value = *ep->reg_udccsr;
++ ep->udccr_value = *ep->reg_udccr;
++ DMSG("EP%d, udccsr:0x%x, udccr:0x%x\n",
++ i, *ep->reg_udccsr, *ep->reg_udccr);
++ }
++ }
++
++ udc_clear_mask_UDCCR(UDCCR_UDE);
++ pxa_set_cken(CKEN_USB, 0);
++
++ return 0;
++}
++
++static int pxa27x_udc_resume(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct pxa27x_udc *udc = dev->driver_data;
++ int i;
++
++ DMSG("%s: udc resume\n", __FUNCTION__);
++
++ UDCCSR0 = udc->udccsr0 & (UDCCSR0_FST | UDCCSR0_DME);
++ for (i = 1; i < UDC_EP_NUM; i++) {
++ if (udc->ep[i].assigned) {
++ struct pxa27x_ep *ep = &udc->ep[i];
++
++ *ep->reg_udccsr = ep->udccsr_value;
++ *ep->reg_udccr = ep->udccr_value;
++ DMSG("EP%d, udccsr:0x%x, udccr:0x%x\n",
++ i, *ep->reg_udccsr, *ep->reg_udccr);
++ }
++ }
++ udc_enable(udc);
++ /* OTGPH bit is set when sleep mode is entered.
++ * it indicates that OTG pad is retaining its state.
++ * Upon exit from sleep mode and before clearing OTGPH,
++ * Software must configure the USB OTG pad, UDC, and UHC
++ * to the state they were in before entering sleep mode.*/
++ PSSR |= PSSR_OTGPH;
++
++ return 0;
++}
++#else
++#define pxa27x_udc_suspend NULL
++#define pxa27x_udc_resume NULL
++#endif
++
++/*-------------------------------------------------------------------------*/
++
++static struct platform_driver pxa27x_udc_driver = {
++ .shutdown = pxa27x_udc_shutdown,
++ .remove = __exit_p(pxa27x_udc_remove),
++ .suspend = pxa27x_udc_suspend,
++ .resume = pxa27x_udc_resume,
++ .driver = {
++ .owner = THIS_MODULE,
++ .name = "pxa27x-udc",
++ },
++};
++
++static int __init udc_init(void)
++{
++ printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION);
++ return platform_driver_probe(&pxa27x_udc_driver, pxa27x_udc_probe);
++}
++
++static void __exit udc_exit(void)
++{
++ platform_driver_unregister(&pxa27x_udc_driver);
++}
++
++module_init(udc_init);
++module_exit(udc_exit);
++
++MODULE_DESCRIPTION(DRIVER_DESC);
++MODULE_AUTHOR("Frank Becker, Robert Schwebel, David Brownell, Rodolfo Giometti");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.24/drivers/usb/gadget/pxa27x_udc.h
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/usb/gadget/pxa27x_udc.h
+@@ -0,0 +1,304 @@
++/*
++ * linux/drivers/usb/gadget/pxa27x_udc.h
++ * Intel PXA27x on-chip full speed USB device controller
++ *
++ * Copyright (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de>, Pengutronix
++ * Copyright (C) 2003 David Brownell
++ * Copyright (C) 2004 Intel Corporation
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef __LINUX_USB_GADGET_PXA27X_H
++#define __LINUX_USB_GADGET_PXA27X_H
++
++#include <linux/types.h>
++
++struct pxa27x_udc;
++
++struct pxa27x_ep {
++ struct usb_ep ep;
++ struct pxa27x_udc *dev;
++
++ const struct usb_endpoint_descriptor *desc;
++ struct list_head queue;
++ unsigned long pio_irqs;
++ unsigned long dma_irqs;
++
++ int dma;
++ unsigned fifo_size;
++ unsigned ep_num;
++ unsigned ep_type;
++
++ unsigned stopped : 1;
++ unsigned dma_con : 1;
++ unsigned dir_in : 1;
++ unsigned assigned : 1;
++
++ unsigned config;
++ unsigned interface;
++ unsigned aisn;
++ /* UDCCSR = UDC Control/Status Register for this EP
++ * UBCR = UDC Byte Count Remaining (contents of OUT fifo)
++ * UDCDR = UDC Endpoint Data Register (the fifo)
++ * UDCCR = UDC Endpoint Configuration Registers
++ * DRCM = DMA Request Channel Map
++ */
++ volatile u32 *reg_udccsr;
++ volatile u32 *reg_udcbcr;
++ volatile u32 *reg_udcdr;
++ volatile u32 *reg_udccr;
++#ifdef USE_DMA
++ volatile u32 *reg_drcmr;
++#define drcmr(n) .reg_drcmr = & DRCMR ## n ,
++#else
++#define drcmr(n)
++#endif
++
++#ifdef CONFIG_PM
++ unsigned udccsr_value;
++ unsigned udccr_value;
++#endif
++};
++
++struct pxa27x_request {
++ struct usb_request req;
++ struct list_head queue;
++};
++
++enum ep0_state {
++ EP0_IDLE,
++ EP0_IN_DATA_PHASE,
++ EP0_OUT_DATA_PHASE,
++// EP0_END_XFER,
++ EP0_STALL,
++ EP0_NO_ACTION
++};
++
++#define EP0_FIFO_SIZE ((unsigned)16)
++#define BULK_FIFO_SIZE ((unsigned)64)
++#define ISO_FIFO_SIZE ((unsigned)256)
++#define INT_FIFO_SIZE ((unsigned)8)
++
++struct udc_stats {
++ struct ep0stats {
++ unsigned long ops;
++ unsigned long bytes;
++ } read, write;
++ unsigned long irqs;
++};
++
++#ifdef CONFIG_USB_PXA27X_SMALL
++/* when memory's tight, SMALL config saves code+data. */
++//#undef USE_DMA
++//#define UDC_EP_NUM 3
++#endif
++
++#ifndef UDC_EP_NUM
++#define UDC_EP_NUM 24
++#endif
++
++struct pxa27x_udc {
++ struct usb_gadget gadget;
++ struct usb_gadget_driver *driver;
++
++ enum ep0_state ep0state;
++ struct udc_stats stats;
++ unsigned got_irq : 1,
++ got_disc : 1,
++ has_cfr : 1,
++ req_pending : 1,
++ req_std : 1,
++ req_config : 1;
++
++#define start_watchdog(dev) mod_timer(&dev->timer, jiffies + (HZ/200))
++ struct timer_list timer;
++
++ struct device *dev;
++ struct pxa2xx_udc_mach_info *mach;
++ u64 dma_mask;
++ struct pxa27x_ep ep [UDC_EP_NUM];
++
++ unsigned configuration,
++ interface,
++ alternate;
++#ifdef CONFIG_PM
++ unsigned udccsr0;
++#endif
++};
++
++/*-------------------------------------------------------------------------*/
++#if 0
++#ifdef DEBUG
++#define HEX_DISPLAY(n) do { \
++ if (machine_is_mainstone())\
++ { MST_LEDDAT1 = (n); } \
++ } while(0)
++
++#define HEX_DISPLAY1(n) HEX_DISPLAY(n)
++
++#define HEX_DISPLAY2(n) do { \
++ if (machine_is_mainstone()) \
++ { MST_LEDDAT2 = (n); } \
++ } while(0)
++
++#endif /* DEBUG */
++#endif
++/*-------------------------------------------------------------------------*/
++
++/* LEDs are only for debug */
++#ifndef HEX_DISPLAY
++#define HEX_DISPLAY(n) do {} while(0)
++#endif
++
++#ifndef LED_CONNECTED_ON
++#define LED_CONNECTED_ON do {} while(0)
++#define LED_CONNECTED_OFF do {} while(0)
++#endif
++#ifndef LED_EP0_ON
++#define LED_EP0_ON do {} while (0)
++#define LED_EP0_OFF do {} while (0)
++#endif
++
++static struct pxa27x_udc *the_controller;
++
++/*-------------------------------------------------------------------------*/
++
++/*
++ * Debugging support vanishes in non-debug builds. DBG_NORMAL should be
++ * mostly silent during normal use/testing, with no timing side-effects.
++ */
++#define DBG_NORMAL 1 /* error paths, device state transitions */
++#define DBG_VERBOSE 2 /* add some success path trace info */
++#define DBG_NOISY 3 /* ... even more: request level */
++#define DBG_VERY_NOISY 4 /* ... even more: packet level */
++
++#ifdef DEBUG
++
++static const char *state_name[] = {
++ "EP0_IDLE",
++ "EP0_IN_DATA_PHASE", "EP0_OUT_DATA_PHASE",
++ "EP0_END_XFER", "EP0_STALL"
++};
++
++#define DMSG(stuff...) printk(KERN_ERR "udc: " stuff)
++
++#ifdef VERBOSE
++# define UDC_DEBUG DBG_VERBOSE
++#else
++# define UDC_DEBUG DBG_NORMAL
++#endif
++
++static void __attribute__ ((__unused__))
++dump_udccr(const char *label)
++{
++ u32 udccr = UDCCR;
++ DMSG("%s 0x%08x =%s%s%s%s%s%s%s%s%s%s, con=%d,inter=%d,altinter=%d\n",
++ label, udccr,
++ (udccr & UDCCR_OEN) ? " oen":"",
++ (udccr & UDCCR_AALTHNP) ? " aalthnp":"",
++ (udccr & UDCCR_AHNP) ? " rem" : "",
++ (udccr & UDCCR_BHNP) ? " rstir" : "",
++ (udccr & UDCCR_DWRE) ? " dwre" : "",
++ (udccr & UDCCR_SMAC) ? " smac" : "",
++ (udccr & UDCCR_EMCE) ? " emce" : "",
++ (udccr & UDCCR_UDR) ? " udr" : "",
++ (udccr & UDCCR_UDA) ? " uda" : "",
++ (udccr & UDCCR_UDE) ? " ude" : "",
++ (udccr & UDCCR_ACN) >> UDCCR_ACN_S,
++ (udccr & UDCCR_AIN) >> UDCCR_AIN_S,
++ (udccr & UDCCR_AAISN)>> UDCCR_AAISN_S );
++}
++
++static void __attribute__ ((__unused__))
++dump_udccsr0(const char *label)
++{
++ u32 udccsr0 = UDCCSR0;
++
++ DMSG("%s %s 0x%08x =%s%s%s%s%s%s%s\n",
++ label, state_name[the_controller->ep0state], udccsr0,
++ (udccsr0 & UDCCSR0_SA) ? " sa" : "",
++ (udccsr0 & UDCCSR0_RNE) ? " rne" : "",
++ (udccsr0 & UDCCSR0_FST) ? " fst" : "",
++ (udccsr0 & UDCCSR0_SST) ? " sst" : "",
++ (udccsr0 & UDCCSR0_DME) ? " dme" : "",
++ (udccsr0 & UDCCSR0_IPR) ? " ipr" : "",
++ (udccsr0 & UDCCSR0_OPC) ? " opr" : "");
++}
++
++static void __attribute__ ((__unused__))
++dump_state(struct pxa27x_udc *dev)
++{
++ unsigned i;
++
++ DMSG("%s, udcicr %02X.%02X, udcsir %02X.%02x, udcfnr %02X\n",
++ state_name[dev->ep0state],
++ UDCICR1, UDCICR0, UDCISR1, UDCISR0, UDCFNR);
++ dump_udccr("udccr");
++
++ if (!dev->driver) {
++ DMSG("no gadget driver bound\n");
++ return;
++ } else
++ DMSG("ep0 driver '%s'\n", dev->driver->driver.name);
++
++
++ dump_udccsr0 ("udccsr0");
++ DMSG("ep0 IN %lu/%lu, OUT %lu/%lu\n",
++ dev->stats.write.bytes, dev->stats.write.ops,
++ dev->stats.read.bytes, dev->stats.read.ops);
++
++ for (i = 1; i < UDC_EP_NUM; i++) {
++ if (dev->ep [i].desc == 0)
++ continue;
++ DMSG ("udccs%d = %02x\n", i, *dev->ep->reg_udccsr);
++ }
++}
++
++#if 0
++static void dump_regs(u8 ep)
++{
++ DMSG("EP:%d UDCCSR:0x%08x UDCBCR:0x%08x\n UDCCR:0x%08x\n",
++ ep,UDCCSN(ep), UDCBCN(ep), UDCCN(ep));
++}
++static void dump_req (struct pxa27x_request *req)
++{
++ struct usb_request *r = &req->req;
++
++ DMSG("%s: buf:0x%08x length:%d dma:0x%08x actual:%d\n",
++ __FUNCTION__, (unsigned)r->buf, r->length,
++ r->dma, r->actual);
++}
++#endif
++
++#else
++
++#define DMSG(stuff...) do{}while(0)
++
++#define dump_udccr(x) do{}while(0)
++#define dump_udccsr0(x) do{}while(0)
++#define dump_state(x) do{}while(0)
++
++#define UDC_DEBUG ((unsigned)0)
++
++#endif
++
++#define DBG(lvl, stuff...) do{if ((lvl) <= UDC_DEBUG) DMSG(stuff);}while(0)
++
++#define WARN(stuff...) printk(KERN_WARNING "udc: " stuff)
++#define INFO(stuff...) printk(KERN_INFO "udc: " stuff)
++
++
++#endif /* __LINUX_USB_GADGET_PXA27X_H */
+Index: linux-2.6.24/drivers/usb/gadget/serial.c
+===================================================================
+--- linux-2.6.24.orig/drivers/usb/gadget/serial.c
++++ linux-2.6.24/drivers/usb/gadget/serial.c
+@@ -1360,20 +1360,20 @@
+
+ usb_ep_autoconfig_reset(gadget);
+
+- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_in_desc);
++ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_in_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ EP_IN_NAME = ep->name;
+ ep->driver_data = ep; /* claim the endpoint */
+
+- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_out_desc);
++ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_out_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ EP_OUT_NAME = ep->name;
+ ep->driver_data = ep; /* claim the endpoint */
+
+ if (use_acm) {
+- ep = usb_ep_autoconfig(gadget, &gs_fullspeed_notify_desc);
++ ep = usb_ep_autoconfig(gadget, &gs_fullspeed_notify_desc, 0, 0, 0);
+ if (!ep) {
+ printk(KERN_ERR "gs_bind: cannot run ACM on %s\n", gadget->name);
+ goto autoconf_fail;
+Index: linux-2.6.24/drivers/usb/gadget/zero.c
+===================================================================
+--- linux-2.6.24.orig/drivers/usb/gadget/zero.c
++++ linux-2.6.24/drivers/usb/gadget/zero.c
+@@ -1112,7 +1112,7 @@
+ * but there may also be important quirks to address.
+ */
+ usb_ep_autoconfig_reset (gadget);
+- ep = usb_ep_autoconfig (gadget, &fs_source_desc);
++ ep = usb_ep_autoconfig (gadget, &fs_source_desc, 0, 0, 0);
+ if (!ep) {
+ autoconf_fail:
+ printk (KERN_ERR "%s: can't autoconfigure on %s\n",
+@@ -1122,7 +1122,7 @@
+ EP_IN_NAME = ep->name;
+ ep->driver_data = ep; /* claim */
+
+- ep = usb_ep_autoconfig (gadget, &fs_sink_desc);
++ ep = usb_ep_autoconfig (gadget, &fs_sink_desc, 0, 0, 0);
+ if (!ep)
+ goto autoconf_fail;
+ EP_OUT_NAME = ep->name;
+Index: linux-2.6.24/include/asm-arm/arch-pxa/udc.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/arch-pxa/udc.h
++++ linux-2.6.24/include/asm-arm/arch-pxa/udc.h
+@@ -2,6 +2,7 @@
+ * linux/include/asm-arm/arch-pxa/udc.h
+ *
+ */
++#include <asm/arch/pxa-regs.h>
+ #include <asm/mach/udc_pxa2xx.h>
+
+ extern void pxa_set_udc_info(struct pxa2xx_udc_mach_info *info);
+Index: linux-2.6.24/include/linux/usb/gadget.h
+===================================================================
+--- linux-2.6.24.orig/include/linux/usb/gadget.h
++++ linux-2.6.24/include/linux/usb/gadget.h
+@@ -397,10 +397,28 @@
+
+ struct usb_gadget;
+
++/**
++ * struct usb_endpoint_config - possible configurations of a given endpoint
++ * @config: the configuration number
++ * @interface: the interface number
++ * @altinterface: the altinterface number
++ *
++ * Used as an array to pass information about the possible configurations
++ * of a given endpoint to the bus controller.
++ */
++struct usb_endpoint_config {
++ int config;
++ int interface;
++ int altinterface;
++};
++
+ /* the rest of the api to the controller hardware: device operations,
+ * which don't involve endpoints (or i/o).
+ */
+ struct usb_gadget_ops {
++ struct usb_ep* (*ep_alloc)(struct usb_gadget *gadget,
++ struct usb_endpoint_descriptor *desc,
++ int config, int interface, int alt);
+ int (*get_frame)(struct usb_gadget *);
+ int (*wakeup)(struct usb_gadget *);
+ int (*set_selfpowered) (struct usb_gadget *, int is_selfpowered);
+@@ -857,7 +875,8 @@
+ /* utility wrapping a simple endpoint selection policy */
+
+ extern struct usb_ep *usb_ep_autoconfig (struct usb_gadget *,
+- struct usb_endpoint_descriptor *) __devinit;
++ struct usb_endpoint_descriptor *,
++ int, int, int) __devinit;
+
+ extern void usb_ep_autoconfig_reset (struct usb_gadget *) __devinit;
+
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxa27x_overlay-r8.patch b/packages/linux/linux-ezx-2.6.24/patches/pxa27x_overlay-r8.patch
new file mode 100644
index 0000000000..17749a98ba
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pxa27x_overlay-r8.patch
@@ -0,0 +1,2439 @@
+ drivers/video/Kconfig | 18
+ drivers/video/Makefile | 1
+ drivers/video/pxafb.c | 305 +++++--
+ drivers/video/pxafb.h | 65 +
+ drivers/video/pxafb_overlay.c | 1525 ++++++++++++++++++++++++++++++++++++
+ include/asm-arm/arch-pxa/pxa-regs.h | 111 ++
+ 6 files changed, 1969 insertions(+), 56 deletions(-)
+
+Index: linux-2.6.24/drivers/video/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/video/Kconfig
++++ linux-2.6.24/drivers/video/Kconfig
+@@ -1729,6 +1729,24 @@
+
+ If unsure, say N.
+
++choice
++ prompt "PXA LCD type"
++ depends on FB_PXA
++
++config FB_PXA_LCD_QVGA
++ bool "QVGA(320x240)"
++
++config FB_PXA_LCD_VGA
++ bool "VGA (640x480)"
++
++endchoice
++
++config FB_PXA_OVERLAY
++ tristate "PXA LCD overlay support"
++ depends on FB_PXA
++ ---help---
++ Frame buffer overlay driver for PXA27x
++
+ config FB_PXA_PARAMETERS
+ bool "PXA LCD command line parameters"
+ default n
+Index: linux-2.6.24/drivers/video/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/video/Makefile
++++ linux-2.6.24/drivers/video/Makefile
+@@ -96,6 +96,7 @@
+ obj-$(CONFIG_FB_CIRRUS) += cirrusfb.o
+ obj-$(CONFIG_FB_ASILIANT) += asiliantfb.o
+ obj-$(CONFIG_FB_PXA) += pxafb.o
++obj-$(CONFIG_FB_PXA_OVERLAY) += pxafb_overlay.o
+ obj-$(CONFIG_FB_W100) += w100fb.o
+ obj-$(CONFIG_FB_AU1100) += au1100fb.o
+ obj-$(CONFIG_FB_AU1200) += au1200fb.o
+Index: linux-2.6.24/drivers/video/pxafb.c
+===================================================================
+--- linux-2.6.24.orig/drivers/video/pxafb.c
++++ linux-2.6.24/drivers/video/pxafb.c
+@@ -59,17 +59,49 @@
+ #define LCCR0_INVALID_CONFIG_MASK (LCCR0_OUM|LCCR0_BM|LCCR0_QDM|LCCR0_DIS|LCCR0_EFM|LCCR0_IUM|LCCR0_SFM|LCCR0_LDM|LCCR0_ENB)
+ #define LCCR3_INVALID_CONFIG_MASK (LCCR3_HSP|LCCR3_VSP|LCCR3_PCD|LCCR3_BPP)
+
++wait_queue_head_t fcs_wait_eof;
++int fcs_in_eof;
++static DECLARE_MUTEX(fcs_lcd_sem);
++
+ static void (*pxafb_backlight_power)(int);
+ static void (*pxafb_lcd_power)(int, struct fb_var_screeninfo *);
+
+ static int pxafb_activate_var(struct fb_var_screeninfo *var, struct pxafb_info *);
+-static void set_ctrlr_state(struct pxafb_info *fbi, u_int state);
++void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state);
+
+ #ifdef CONFIG_FB_PXA_PARAMETERS
+ #define PXAFB_OPTIONS_SIZE 256
+ static char g_options[PXAFB_OPTIONS_SIZE] __devinitdata = "";
+ #endif
+
++static struct pxafb_rgb def_rgb_8 = {
++ red: { offset: 0, length: 8, },
++ green: { offset: 0, length: 8, },
++ blue: { offset: 0, length: 8, },
++ transp: { offset: 0, length: 0, },
++};
++
++static struct pxafb_rgb def_rgb_16 = {
++ red: { offset: 11, length: 5, },
++ green: { offset: 5, length: 6, },
++ blue: { offset: 0, length: 5, },
++ transp: { offset: 0, length: 0, },
++};
++
++static struct pxafb_rgb def_rgb_18 = {
++ red: { offset: 12, length: 6, },
++ green: { offset: 6, length: 6, },
++ blue: { offset: 0, length: 6, },
++ transp: { offset: 0, length: 0, },
++};
++
++static struct pxafb_rgb def_rgb_24 = {
++ red: { offset: 16, length: 8, },
++ green: { offset: 8, length: 8, },
++ blue: { offset: 0, length: 8, },
++ transp: { offset: 0, length: 0, },
++};
++
+ static inline void pxafb_schedule_work(struct pxafb_info *fbi, u_int state)
+ {
+ unsigned long flags;
+@@ -209,6 +241,10 @@
+ case 4: ret = LCCR3_4BPP; break;
+ case 8: ret = LCCR3_8BPP; break;
+ case 16: ret = LCCR3_16BPP; break;
++ case 18: ret = LCCR3_18BPP; break;
++ case 19: ret = LCCR3_19BPP; break;
++ case 24: ret = LCCR3_24BPP; break;
++ case 25: ret = LCCR3_25BPP; break;
+ }
+ return ret;
+ }
+@@ -320,18 +356,34 @@
+ * The pixel packing format is described on page 7-11 of the
+ * PXA2XX Developer's Manual.
+ */
+- if (var->bits_per_pixel == 16) {
+- var->red.offset = 11; var->red.length = 5;
+- var->green.offset = 5; var->green.length = 6;
+- var->blue.offset = 0; var->blue.length = 5;
+- var->transp.offset = var->transp.length = 0;
+- } else {
+- var->red.offset = var->green.offset = var->blue.offset = var->transp.offset = 0;
+- var->red.length = 8;
+- var->green.length = 8;
+- var->blue.length = 8;
+- var->transp.length = 0;
+- }
++ switch (var->bits_per_pixel) {
++ case 16:
++ /* 2 pixels per line */
++ var->red = def_rgb_16.red;
++ var->green = def_rgb_16.green;
++ var->blue = def_rgb_16.blue;
++ var->transp = def_rgb_16.transp;
++ break;
++ case 18:
++ case 19:
++ var->red = def_rgb_18.red;
++ var->green = def_rgb_18.green;
++ var->blue = def_rgb_18.blue;
++ var->transp = def_rgb_18.transp;
++ break;
++ case 24:
++ case 25:
++ var->red = def_rgb_24.red;
++ var->green = def_rgb_24.green;
++ var->blue = def_rgb_24.blue;
++ var->transp = def_rgb_24.transp;
++ break;
++ default:
++ var->red = def_rgb_8.red;
++ var->green = def_rgb_8.green;
++ var->blue = def_rgb_8.blue;
++ var->transp = def_rgb_8.transp;
++ }
+
+ #ifdef CONFIG_CPU_FREQ
+ pr_debug("pxafb: dma period = %d ps, clock = %d kHz\n",
+@@ -345,7 +397,7 @@
+ static inline void pxafb_set_truecolor(u_int is_true_color)
+ {
+ pr_debug("pxafb: true_color = %d\n", is_true_color);
+- // do your machine-specific setup if needed
++ /* do your machine-specific setup if needed */
+ }
+
+ /*
+@@ -360,7 +412,8 @@
+
+ pr_debug("pxafb: set_par\n");
+
+- if (var->bits_per_pixel == 16)
++ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19
++ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25)
+ fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR;
+ else if (!fbi->cmap_static)
+ fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
+@@ -373,12 +426,25 @@
+ fbi->fb.fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR;
+ }
+
+- fbi->fb.fix.line_length = var->xres_virtual *
+- var->bits_per_pixel / 8;
+- if (var->bits_per_pixel == 16)
+- fbi->palette_size = 0;
+- else
+- fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel;
++ switch (var->bits_per_pixel) {
++ case 16:
++ fbi->fb.fix.line_length = var->xres_virtual * 2;
++ fbi->palette_size = 0;
++ break;
++ case 18:
++ case 19:
++ fbi->fb.fix.line_length = var->xres_virtual * 3;
++ fbi->palette_size = 0;
++ break;
++ case 24:
++ case 25:
++ fbi->fb.fix.line_length = var->xres_virtual * 4;
++ fbi->palette_size = 0;
++ break;
++ default:
++ fbi->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8;
++ fbi->palette_size = var->bits_per_pixel == 1 ? 4 : 1 << var->bits_per_pixel;
++ }
+
+ if ((fbi->lccr4 & LCCR4_PAL_FOR_MASK) == LCCR4_PAL_FOR_0)
+ palette_mem_size = fbi->palette_size * sizeof(u16);
+@@ -395,7 +461,8 @@
+ */
+ pxafb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR);
+
+- if (fbi->fb.var.bits_per_pixel == 16)
++ if (fbi->fb.var.bits_per_pixel == 16 || fbi->fb.var.bits_per_pixel == 18 ||fbi->fb.var.bits_per_pixel == 19
++ || fbi->fb.var.bits_per_pixel == 24 || fbi->fb.var.bits_per_pixel == 25)
+ fb_dealloc_cmap(&fbi->fb.cmap);
+ else
+ fb_alloc_cmap(&fbi->fb.cmap, 1<<fbi->fb.var.bits_per_pixel, 0);
+@@ -441,7 +508,7 @@
+ * 16 bpp mode does not really use the palette, so this will not
+ * blank the display in all modes.
+ */
+-static int pxafb_blank(int blank, struct fb_info *info)
++int pxafb_blank(int blank, struct fb_info *info)
+ {
+ struct pxafb_info *fbi = (struct pxafb_info *)info;
+ int i;
+@@ -458,19 +525,20 @@
+ for (i = 0; i < fbi->palette_size; i++)
+ pxafb_setpalettereg(i, 0, 0, 0, 0, info);
+
+- pxafb_schedule_work(fbi, C_DISABLE);
+- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank);
++ pxafb_schedule_work(fbi, C_BLANK);
++ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */
+ break;
+
+ case FB_BLANK_UNBLANK:
+- //TODO if (pxafb_blank_helper) pxafb_blank_helper(blank);
++ /* TODO if (pxafb_blank_helper) pxafb_blank_helper(blank); */
+ if (fbi->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR ||
+ fbi->fb.fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR)
+ fb_set_cmap(&fbi->fb.cmap, info);
+- pxafb_schedule_work(fbi, C_ENABLE);
++ pxafb_schedule_work(fbi, C_UNBLANK);
+ }
+ return 0;
+ }
++EXPORT_SYMBOL(pxafb_blank);
+
+ static int pxafb_mmap(struct fb_info *info,
+ struct vm_area_struct *vma)
+@@ -606,6 +674,10 @@
+ case 4:
+ case 8:
+ case 16:
++ case 18:
++ case 19:
++ case 24:
++ case 25:
+ break;
+ default:
+ printk(KERN_ERR "%s: invalid bit depth %d\n",
+@@ -637,7 +709,10 @@
+
+ new_regs.lccr0 = fbi->lccr0 |
+ (LCCR0_LDM | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM |
+- LCCR0_QDM | LCCR0_BM | LCCR0_OUM);
++#ifdef CONFIG_PXA27x /* Enable overlay for PXA27x */
++ LCCR0_OUC | LCCR0_CMDIM | LCCR0_RDSTM |
++#endif
++ LCCR0_QDM | LCCR0_BM | LCCR0_OUM);
+
+ new_regs.lccr1 =
+ LCCR1_DisWdth(var->xres) +
+@@ -696,7 +771,7 @@
+
+ fbi->dmadesc_fbhigh_cpu->fsadr = fbi->screen_dma;
+ fbi->dmadesc_fbhigh_cpu->fidr = 0;
+- fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL;
++ fbi->dmadesc_fbhigh_cpu->ldcmd = BYTES_PER_PANEL | LDCMD_EOFINT;
+
+ fbi->dmadesc_palette_cpu->fsadr = fbi->palette_dma;
+ fbi->dmadesc_palette_cpu->fidr = 0;
+@@ -708,7 +783,8 @@
+ sizeof(u32);
+ fbi->dmadesc_palette_cpu->ldcmd |= LDCMD_PAL;
+
+- if (var->bits_per_pixel == 16) {
++ if (var->bits_per_pixel == 16 || var->bits_per_pixel == 18 ||var->bits_per_pixel == 19
++ || var->bits_per_pixel == 24 || var->bits_per_pixel == 25) {
+ /* palette shouldn't be loaded in true-color mode */
+ fbi->dmadesc_fbhigh_cpu->fdadr = fbi->dmadesc_fbhigh_dma;
+ fbi->fdadr0 = fbi->dmadesc_fbhigh_dma; /* no pal just fbhigh */
+@@ -763,8 +839,8 @@
+ }
+
+ /*
+- * NOTE! The following functions are purely helpers for set_ctrlr_state.
+- * Do not call them directly; set_ctrlr_state does the correct serialisation
++ * NOTE! The following functions are purely helpers for pxafb_set_ctrlr_state.
++ * Do not call them directly; pxafb_set_ctrlr_state does the correct serialisation
+ * to ensure that things happen in the right way 100% of time time.
+ * -- rmk
+ */
+@@ -786,7 +862,8 @@
+
+ static void pxafb_setup_gpio(struct pxafb_info *fbi)
+ {
+- int gpio, ldd_bits;
++ int gpio;
++ int ldd_bits = 0;
+ unsigned int lccr0 = fbi->lccr0;
+
+ /*
+@@ -796,28 +873,56 @@
+ /* 4 bit interface */
+ if ((lccr0 & LCCR0_CMS) == LCCR0_Mono &&
+ (lccr0 & LCCR0_SDS) == LCCR0_Sngl &&
+- (lccr0 & LCCR0_DPD) == LCCR0_4PixMono)
++ (lccr0 & LCCR0_DPD) == LCCR0_4PixMono) {
+ ldd_bits = 4;
+-
++ }
+ /* 8 bit interface */
+ else if (((lccr0 & LCCR0_CMS) == LCCR0_Mono &&
+ ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_DPD) == LCCR0_8PixMono)) ||
+ ((lccr0 & LCCR0_CMS) == LCCR0_Color &&
+- (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl))
++ (lccr0 & LCCR0_PAS) == LCCR0_Pas && (lccr0 & LCCR0_SDS) == LCCR0_Sngl)) {
+ ldd_bits = 8;
+-
++ }
+ /* 16 bit interface */
+- else if ((lccr0 & LCCR0_CMS) == LCCR0_Color &&
+- ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act))
+- ldd_bits = 16;
++ else if ((lccr0 & LCCR0_CMS) == LCCR0_Color &&
++ ((lccr0 & LCCR0_SDS) == LCCR0_Dual || (lccr0 & LCCR0_PAS) == LCCR0_Act)) {
++ switch (fbi->fb.var.bits_per_pixel) {
++ case 16:
++#ifdef CONFIG_PXA27x
++ /* bits 58-77 */
++ GPDR1 |= (0x3f << 26);
++ GPDR2 |= 0x00003fff;
+
++ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20);
++ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa;
++#endif
++ ldd_bits = 16;
++ break;
++ case 18:
++ case 19:
++ case 24:
++ case 25:
++#ifdef CONFIG_PXA27x
++ /* bits 58-77 and 86, 87 */
++ GPDR1 |= (0x3f << 26);
++ GPDR2 |= 0x00c03fff;
++
++ GAFR1_U = (GAFR1_U & ~(0xfff << 20)) | (0xaaa << 20);
++ GAFR2_L = (GAFR2_L & 0xf0000000) | 0x0aaaaaaa;
++ GAFR2_U = (GAFR2_U & 0xffff0fff) | 0xa000;
++#endif
++ ldd_bits = 25;
++ break;
++ }
++ }
+ else {
+ printk(KERN_ERR "pxafb_setup_gpio: unable to determine bits per pixel\n");
+ return;
+ }
+
+- for (gpio = 58; ldd_bits; gpio++, ldd_bits--)
++ for (gpio = 58; ldd_bits > 0; gpio++, ldd_bits--) {
+ pxa_gpio_mode(gpio | GPIO_ALT_FN_2_OUT);
++ }
+ pxa_gpio_mode(GPIO74_LCD_FCLK_MD);
+ pxa_gpio_mode(GPIO75_LCD_LCLK_MD);
+ pxa_gpio_mode(GPIO76_LCD_PCLK_MD);
+@@ -837,6 +942,7 @@
+ /* enable LCD controller clock */
+ clk_enable(fbi->clk);
+
++ down(&fcs_lcd_sem);
+ /* Sequence from 11.7.10 */
+ LCCR3 = fbi->reg_lccr3;
+ LCCR2 = fbi->reg_lccr2;
+@@ -847,6 +953,8 @@
+ FDADR1 = fbi->fdadr1;
+ LCCR0 |= LCCR0_ENB;
+
++ up(&fcs_lcd_sem);
++
+ pr_debug("FDADR0 0x%08x\n", (unsigned int) FDADR0);
+ pr_debug("FDADR1 0x%08x\n", (unsigned int) FDADR1);
+ pr_debug("LCCR0 0x%08x\n", (unsigned int) LCCR0);
+@@ -862,6 +970,7 @@
+
+ pr_debug("pxafb: disabling LCD controller\n");
+
++ down(&fcs_lcd_sem);
+ set_current_state(TASK_UNINTERRUPTIBLE);
+ add_wait_queue(&fbi->ctrlr_wait, &wait);
+
+@@ -871,6 +980,7 @@
+
+ schedule_timeout(200 * HZ / 1000);
+ remove_wait_queue(&fbi->ctrlr_wait, &wait);
++ up(&fcs_lcd_sem);
+
+ /* disable LCD controller clock */
+ clk_disable(fbi->clk);
+@@ -888,6 +998,11 @@
+ LCCR0 |= LCCR0_LDM;
+ wake_up(&fbi->ctrlr_wait);
+ }
++ if (lcsr & LCSR_EOF && fcs_in_eof) {
++ LCCR0 |= LCCR0_EFM;
++ fcs_in_eof = 0;
++ wake_up(&fcs_wait_eof);
++ }
+
+ LCSR = lcsr;
+ return IRQ_HANDLED;
+@@ -898,7 +1013,7 @@
+ * sleep when disabling the LCD controller, or if we get two contending
+ * processes trying to alter state.
+ */
+-static void set_ctrlr_state(struct pxafb_info *fbi, u_int state)
++void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state)
+ {
+ u_int old_state;
+
+@@ -920,7 +1035,9 @@
+ */
+ if (old_state != C_DISABLE && old_state != C_DISABLE_PM) {
+ fbi->state = state;
+- //TODO __pxafb_lcd_power(fbi, 0);
++ /* TODO __pxafb_lcd_power(fbi, 0); */
++ if(fbi->set_overlay_ctrlr_state)
++ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE);
+ pxafb_disable_controller(fbi);
+ }
+ break;
+@@ -934,6 +1051,8 @@
+ fbi->state = state;
+ __pxafb_backlight_power(fbi, 0);
+ __pxafb_lcd_power(fbi, 0);
++ if(fbi->set_overlay_ctrlr_state)
++ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE);
+ if (old_state != C_DISABLE_CLKCHANGE)
+ pxafb_disable_controller(fbi);
+ }
+@@ -947,7 +1066,9 @@
+ if (old_state == C_DISABLE_CLKCHANGE) {
+ fbi->state = C_ENABLE;
+ pxafb_enable_controller(fbi);
+- //TODO __pxafb_lcd_power(fbi, 1);
++ /* TODO __pxafb_lcd_power(fbi, 1); */
++ if(fbi->set_overlay_ctrlr_state)
++ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE);
+ }
+ break;
+
+@@ -959,9 +1080,13 @@
+ */
+ if (old_state == C_ENABLE) {
+ __pxafb_lcd_power(fbi, 0);
++ if(fbi->set_overlay_ctrlr_state)
++ fbi->set_overlay_ctrlr_state(fbi, C_DISABLE);
+ pxafb_disable_controller(fbi);
+ pxafb_setup_gpio(fbi);
+ pxafb_enable_controller(fbi);
++ if(fbi->set_overlay_ctrlr_state)
++ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE);
+ __pxafb_lcd_power(fbi, 1);
+ }
+ break;
+@@ -987,11 +1112,46 @@
+ pxafb_enable_controller(fbi);
+ __pxafb_lcd_power(fbi, 1);
+ __pxafb_backlight_power(fbi, 1);
++ if(fbi->set_overlay_ctrlr_state)
++ fbi->set_overlay_ctrlr_state(fbi, C_ENABLE);
+ }
+ break;
++
++ case C_BLANK:
++ /*
++ * Disable controller, blank overlays if exist.
++ */
++ if ((old_state != C_DISABLE) && (old_state != C_BLANK)) {
++ fbi->state = state;
++ __pxafb_backlight_power(fbi, 0);
++ __pxafb_lcd_power(fbi, 0);
++ if(fbi->set_overlay_ctrlr_state)
++ fbi->set_overlay_ctrlr_state(fbi, C_BLANK);
++ if (old_state != C_DISABLE_CLKCHANGE)
++ pxafb_disable_controller(fbi);
++ }
++ break;
++
++ case C_UNBLANK:
++ /*
++ * Power up the LCD screen, enable controller, and
++ * turn on the backlight, unblank overlays if exist.
++ */
++ if ((old_state != C_ENABLE) && (old_state != C_UNBLANK)) {
++ fbi->state = C_UNBLANK;
++ pxafb_setup_gpio(fbi);
++ pxafb_enable_controller(fbi);
++ __pxafb_lcd_power(fbi, 1);
++ __pxafb_backlight_power(fbi, 1);
++ if(fbi->set_overlay_ctrlr_state)
++ fbi->set_overlay_ctrlr_state(fbi, C_UNBLANK);
++ }
++ break;
++
+ }
+ up(&fbi->ctrlr_sem);
+ }
++EXPORT_SYMBOL(pxafb_set_ctrlr_state);
+
+ /*
+ * Our LCD controller task (which is called when we blank or unblank)
+@@ -1003,7 +1163,7 @@
+ container_of(work, struct pxafb_info, task);
+ u_int state = xchg(&fbi->task_state, -1);
+
+- set_ctrlr_state(fbi, state);
++ pxafb_set_ctrlr_state(fbi, state);
+ }
+
+ #ifdef CONFIG_CPU_FREQ
+@@ -1018,19 +1178,29 @@
+ pxafb_freq_transition(struct notifier_block *nb, unsigned long val, void *data)
+ {
+ struct pxafb_info *fbi = TO_INF(nb, freq_transition);
+- //TODO struct cpufreq_freqs *f = data;
++ /* TODO struct cpufreq_freqs *f = data; */
++ struct cpufreq_freqs *clkinfo;
+ u_int pcd;
++ u_int lccr3;
+
+ switch (val) {
+ case CPUFREQ_PRECHANGE:
+- set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE);
++ pxafb_set_ctrlr_state(fbi, C_DISABLE_CLKCHANGE);
+ break;
+
+ case CPUFREQ_POSTCHANGE:
+- pcd = get_pcd(fbi, fbi->fb.var.pixclock);
++ clkinfo = (struct cpufreq_freqs *)data;
++ /* If leaving a 13kHz state with the LCD sustained */
++ if ((clkinfo->old == 13000))
++ break;
++
++ pcd = get_pcd(fbi->fb.var.pixclock);
++ lccr3 = fbi->reg_lccr3;
+ set_hsync_time(fbi, pcd);
+ fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd);
+- set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE);
++ pxafb_set_ctrlr_state(fbi, C_ENABLE_CLKCHANGE);
++ if (lccr3 != fbi->reg_lccr3 && !((LCCR0 & LCCR0_DIS) || !(LCCR0 & LCCR0_ENB)))
++ LCCR3 = fbi->reg_lccr3;
+ break;
+ }
+ return 0;
+@@ -1049,7 +1219,7 @@
+ printk(KERN_DEBUG "min dma period: %d ps, "
+ "new clock %d kHz\n", pxafb_display_dma_period(var),
+ policy->max);
+- // TODO: fill in min/max values
++ /* TODO: fill in min/max values */
+ break;
+ #if 0
+ case CPUFREQ_NOTIFY:
+@@ -1075,7 +1245,7 @@
+ {
+ struct pxafb_info *fbi = platform_get_drvdata(dev);
+
+- set_ctrlr_state(fbi, C_DISABLE_PM);
++ pxafb_set_ctrlr_state(fbi, C_DISABLE_PM);
+ return 0;
+ }
+
+@@ -1083,7 +1253,11 @@
+ {
+ struct pxafb_info *fbi = platform_get_drvdata(dev);
+
+- set_ctrlr_state(fbi, C_ENABLE_PM);
++ pxafb_set_ctrlr_state(fbi, C_ENABLE_PM);
++//RP#ifdef CONFIG_PXA27x
++//RP LCCR4 |= (1 << 31); /* Disable the PCD Divisor, PCDDIV */
++//RP LCCR4 |= (5 << 17); /* Undocumented feature */
++//RP#endif
+ return 0;
+ }
+ #else
+@@ -1197,11 +1371,21 @@
+ fbi->task_state = (u_char)-1;
+
+ for (i = 0; i < inf->num_modes; i++) {
+- smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8;
++ if (mode[i].bpp <= 16) { /* 8, 16 bpp */
++ smemlen = mode[i].xres * mode[i].yres * mode[i].bpp / 8;
++ } else if ( mode[i].bpp > 19 ) { /* 24, 25 bpp */
++ smemlen = mode[i].xres * mode[i].yres * 4;
++ } else { /* 18, 19 bpp */
++ /* packed format */
++ smemlen = mode[i].xres * mode[i].yres * 3;
++ }
++
+ if (smemlen > fbi->fb.fix.smem_len)
+ fbi->fb.fix.smem_len = smemlen;
+ }
+
++ fbi->set_overlay_ctrlr_state = NULL;
++
+ init_waitqueue_head(&fbi->ctrlr_wait);
+ INIT_WORK(&fbi->task, pxafb_task);
+ init_MUTEX(&fbi->ctrlr_sem);
+@@ -1268,6 +1452,10 @@
+ case 4:
+ case 8:
+ case 16:
++ case 18:
++ case 19:
++ case 24:
++ case 25:
+ inf->modes[0].bpp = bpp;
+ dev_info(dev, "overriding bit depth: %d\n", bpp);
+ break;
+@@ -1416,7 +1604,7 @@
+ fbi = pxafb_init_fbinfo(&dev->dev);
+ if (!fbi) {
+ dev_err(&dev->dev, "Failed to initialize framebuffer device\n");
+- ret = -ENOMEM; // only reason for pxafb_init_fbinfo to fail is kmalloc
++ ret = -ENOMEM; /* only reason for pxafb_init_fbinfo to fail is kmalloc */
+ goto failed;
+ }
+
+@@ -1451,7 +1639,7 @@
+ }
+
+ #ifdef CONFIG_PM
+- // TODO
++ /* TODO */
+ #endif
+
+ #ifdef CONFIG_CPU_FREQ
+@@ -1464,7 +1652,12 @@
+ /*
+ * Ok, now enable the LCD controller
+ */
+- set_ctrlr_state(fbi, C_ENABLE);
++ pxafb_set_ctrlr_state(fbi, C_ENABLE);
++//#ifdef CONFIG_PXA27x
++// LCCR4 |= (1 << 31); /* Disabel the PCD Divisor, PCDDIV */
++// LCCR4 |= (5 << 17); /* Undocumented feature */
++//#endif
++ init_waitqueue_head(&fcs_wait_eof);
+
+ return 0;
+
+Index: linux-2.6.24/drivers/video/pxafb.h
+===================================================================
+--- linux-2.6.24.orig/drivers/video/pxafb.h
++++ linux-2.6.24/drivers/video/pxafb.h
+@@ -29,6 +29,60 @@
+ unsigned int lccr3;
+ };
+
++struct pxafb_rgb {
++ struct fb_bitfield red;
++ struct fb_bitfield green;
++ struct fb_bitfield blue;
++ struct fb_bitfield transp;
++};
++
++#ifdef CONFIG_PXA27x
++/* PXA Overlay Framebuffer Support */
++struct overlayfb_info
++{
++ struct fb_info fb;
++
++ struct fb_var_screeninfo old_var;
++
++ struct semaphore mutex;
++ unsigned long refcount;
++
++ struct pxafb_info *basefb;
++
++ unsigned long map_cpu;
++ unsigned long screen_cpu;
++ unsigned long palette_cpu;
++ unsigned long map_size;
++ unsigned long palette_size;
++
++ dma_addr_t screen_dma;
++ dma_addr_t map_dma;
++ dma_addr_t palette_dma;
++
++ volatile u_char state;
++
++ /* overlay specific info */
++ unsigned long xpos; /* screen position (x, y)*/
++ unsigned long ypos;
++ unsigned long format;
++
++ /* additional */
++ union {
++ struct pxafb_dma_descriptor *dma0;
++ struct pxafb_dma_descriptor *dma1;
++ struct {
++ struct pxafb_dma_descriptor *dma2;
++ struct pxafb_dma_descriptor *dma3;
++ struct pxafb_dma_descriptor *dma4;
++ };
++ struct {
++ struct pxafb_dma_descriptor *dma5_pal;
++ struct pxafb_dma_descriptor *dma5_frame;
++ };
++ };
++};
++#endif
++
+ /* PXA LCD DMA descriptor */
+ struct pxafb_dma_descriptor {
+ unsigned int fdadr;
+@@ -90,6 +144,14 @@
+ wait_queue_head_t ctrlr_wait;
+ struct work_struct task;
+
++#ifdef CONFIG_PXA27x
++ /* PXA Overlay Framebuffer Support */
++ struct overlayfb_info *overlay1fb;
++ struct overlayfb_info *overlay2fb;
++ struct overlayfb_info *cursorfb;
++#endif
++ void (*set_overlay_ctrlr_state)(struct pxafb_info *, u_int);
++
+ #ifdef CONFIG_CPU_FREQ
+ struct notifier_block freq_transition;
+ struct notifier_block freq_policy;
+@@ -109,6 +171,9 @@
+ #define C_DISABLE_PM (5)
+ #define C_ENABLE_PM (6)
+ #define C_STARTUP (7)
++#define C_BLANK (8)
++#define C_UNBLANK (9)
++
+
+ #define PXA_NAME "PXA"
+
+Index: linux-2.6.24/drivers/video/pxafb_overlay.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/video/pxafb_overlay.c
+@@ -0,0 +1,1525 @@
++/*
++ * linux/drivers/video/pxafb_overlay.c
++ *
++ * Copyright (c) 2004, Intel Corporation
++ *
++ * Code Status:
++ * 2004/10/28: <yan.yin@intel.com>
++ * - Ported to 2.6 kernel
++ * - Made overlay driver a loadable module
++ * - Merged overlay optimized patch
++ * 2004/03/10: <stanley.cai@intel.com>
++ * - Fixed Bugs
++ * - Added workaround for overlay1&2
++ * 2003/08/27: <yu.tang@intel.com>
++ * - Added Overlay 1 & Overlay2 & Hardware Cursor support
++ *
++ *
++ * This software program is licensed subject to the GNU Lesser General
++ * Public License (LGPL). Version 2.1, February 1999, available at
++ * http://www.gnu.org/copyleft/lesser.html
++ *
++ * Intel PXA27x LCD Controller Frame Buffer Overlay Driver
++ *
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/interrupt.h>
++#include <linux/slab.h>
++#include <linux/fb.h>
++#include <linux/delay.h>
++#include <linux/init.h>
++#include <linux/ioport.h>
++#include <linux/cpufreq.h>
++#include <linux/device.h>
++#include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
++
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/uaccess.h>
++#include <asm/arch/bitfield.h>
++#include <asm/arch/pxafb.h>
++#include <asm/arch/pxa-regs.h>
++
++#include "pxafb.h"
++
++/* LCD enhancement : Overlay 1 & 2 & Hardware Cursor */
++
++/*
++ * LCD enhancement : Overlay 1
++ *
++ * Features:
++ * - support 16bpp (No palette)
++ */
++/*
++ * debugging?
++ */
++#define DEBUG 0
++
++#ifdef DEBUG
++#define dbg(fmt,arg...) printk(KERN_ALERT "%s(): " fmt "\n", __FUNCTION__, ##arg)
++#else
++#define dbg(fmt,arg...)
++#endif
++
++static int overlay1fb_enable(struct fb_info *info);
++static int overlay2fb_enable(struct fb_info *info);
++static int cursorfb_enable(struct fb_info *info);
++
++static int overlay1fb_disable(struct fb_info *info);
++static int overlay2fb_disable(struct fb_info *info);
++static int cursorfb_disable(struct fb_info *info);
++
++static int overlay1fb_blank(int blank, struct fb_info *info);
++static int overlay2fb_blank(int blank, struct fb_info *info);
++static int cursorfb_blank(int blank, struct fb_info *info);
++
++extern void pxafb_set_ctrlr_state(struct pxafb_info *fbi, u_int state);
++extern int pxafb_blank(int blank, struct fb_info *info);
++
++static struct pxafb_rgb def_rgb_18 = {
++ red: { offset: 12, length: 6, },
++ green: { offset: 6, length: 6, },
++ blue: { offset: 0, length: 6, },
++ transp: { offset: 0, length: 0, },
++};
++
++static struct pxafb_rgb def_rgbt_16 = {
++ red: { offset: 10, length: 5, },
++ green: { offset: 5, length: 5, },
++ blue: { offset: 0, length: 5, },
++ transp: { offset: 15, length: 1, },
++};
++
++static struct pxafb_rgb def_rgbt_19 = {
++ red: { offset: 12, length: 6, },
++ green: { offset: 6, length: 6, },
++ blue: { offset: 0, length: 6, },
++ transp: { offset: 18, length: 1, },
++};
++
++static struct pxafb_rgb def_rgbt_24 = {
++ red: { offset: 16, length: 7, },
++ green: { offset: 8, length: 8, },
++ blue: { offset: 0, length: 8, },
++ transp: { offset: 0, length: 0, },
++};
++
++static struct pxafb_rgb def_rgbt_25 = {
++ red: { offset: 16, length: 8, },
++ green: { offset: 8, length: 8, },
++ blue: { offset: 0, length: 8, },
++ transp: { offset: 24, length: 1, },
++};
++
++#define CLEAR_LCD_INTR(reg, intr) do { \
++ reg = (intr); \
++}while(0)
++
++#define WAIT_FOR_LCD_INTR(reg,intr,timeout) ({ \
++ int __done =0; \
++ int __t = timeout; \
++ while (__t) { \
++ __done = (reg) & (intr); \
++ if (__done) break; \
++ mdelay(10); \
++ __t--; \
++ } \
++ if (!__t) dbg("wait " #intr " timeount");\
++ __done; \
++})
++
++#define DISABLE_OVERLAYS(fbi) do { \
++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \
++ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \
++ } \
++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \
++ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \
++ } \
++ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \
++ cursorfb_disable((struct fb_info*)fbi->cursorfb); \
++ } \
++}while(0)
++
++#define ENABLE_OVERLAYS(fbi) do { \
++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_DISABLE)) { \
++ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \
++ } \
++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_DISABLE)) { \
++ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \
++ } \
++ if (fbi->cursorfb && (fbi->cursorfb->state == C_DISABLE)) { \
++ cursorfb_enable((struct fb_info*)fbi->cursorfb); \
++ } \
++}while(0)
++
++#define BLANK_OVERLAYS(fbi) do { \
++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_ENABLE)) { \
++ overlay1fb_disable((struct fb_info*)fbi->overlay1fb); \
++ fbi->overlay1fb->state = C_BLANK; \
++ } \
++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_ENABLE)) { \
++ overlay2fb_disable((struct fb_info*)fbi->overlay2fb); \
++ fbi->overlay2fb->state = C_BLANK; \
++ } \
++ if (fbi->cursorfb && (fbi->cursorfb->state == C_ENABLE)) { \
++ cursorfb_disable((struct fb_info*)fbi->cursorfb); \
++ fbi->cursorfb->state = C_BLANK; \
++ } \
++}while(0)
++
++#define UNBLANK_OVERLAYS(fbi) do { \
++ if (fbi->overlay1fb && (fbi->overlay1fb->state == C_BLANK)) { \
++ overlay1fb_enable((struct fb_info*)fbi->overlay1fb); \
++ fbi->overlay1fb->state = C_ENABLE; \
++ } \
++ if (fbi->overlay2fb && (fbi->overlay2fb->state == C_BLANK)) { \
++ overlay2fb_enable((struct fb_info*)fbi->overlay2fb); \
++ fbi->overlay2fb->state = C_ENABLE; \
++ } \
++ if (fbi->cursorfb && (fbi->cursorfb->state == C_BLANK)) { \
++ cursorfb_enable((struct fb_info*)fbi->cursorfb); \
++ fbi->cursorfb->state = C_ENABLE; \
++ } \
++}while(0)
++
++static int overlay1fb_open(struct fb_info *info, int user)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++ int ret = 0;
++
++/* If basefb is disable, enable fb. */
++ if (fbi->basefb && fbi->basefb->state != C_ENABLE)
++ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb));
++
++ down(&fbi->mutex);
++
++ if (fbi->refcount)
++ ret = -EACCES;
++ else
++ fbi->refcount ++;
++
++ up(&fbi->mutex);
++
++ /* Initialize the variables in overlay1 framebuffer. */
++ fbi->fb.var.xres = fbi->fb.var.yres = 0;
++ fbi->fb.var.bits_per_pixel = 0;
++
++ return ret;
++}
++
++static int overlay1fb_release(struct fb_info *info, int user)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++ down(&fbi->mutex);
++
++ if (fbi->refcount)
++ fbi->refcount --;
++
++ up(&fbi->mutex);
++ /* disable overlay when released */
++ overlay1fb_blank(1, info);
++
++ return 0;
++}
++
++static int overlay1fb_map_video_memory(struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++
++ if (fbi->map_cpu)
++ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma);
++ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
++
++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
++ &fbi->map_dma, GFP_KERNEL );
++
++ if (!fbi->map_cpu) return -ENOMEM;
++
++ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE;
++ fbi->screen_dma = fbi->map_dma + PAGE_SIZE;
++
++ fbi->fb.fix.smem_start = fbi->screen_dma;
++
++ /* setup dma descriptor */
++ fbi->dma1 = (struct pxafb_dma_descriptor*)
++ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor));
++
++ fbi->dma1->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor));
++ fbi->dma1->fsadr = fbi->screen_dma;
++ fbi->dma1->fidr = 0;
++ fbi->dma1->ldcmd = fbi->fb.fix.smem_len;
++
++ return 0;
++}
++
++static int overlay1fb_enable(struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++ unsigned long bpp1;
++
++ if (!fbi->map_cpu) return -EINVAL;
++
++ switch (fbi->fb.var.bits_per_pixel) {
++ case 16:
++ bpp1 = 0x4;
++ break;
++ case 18:
++ bpp1 = 0x6;
++ break;
++ case 19:
++ bpp1 = 0x8;
++ break;
++ case 24:
++ bpp1 = 0x9;
++ break;
++ case 25:
++ bpp1 = 0xa;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ /* disable branch/start/end of frame interrupt */
++ LCCR5 |= (LCCR5_IUM1 | LCCR5_BSM1 | LCCR5_EOFM1 | LCCR5_SOFM1);
++
++ if (fbi->state == C_DISABLE || fbi->state == C_BLANK)
++ FDADR1 = (fbi->dma1->fdadr);
++ else
++ FBR1 = fbi->dma1->fdadr | 0x1;
++
++ /* enable overlay 1 window */
++ OVL1C2 = (fbi->ypos << 10) | fbi->xpos;
++ OVL1C1 = OVL1C1_O1EN | (bpp1 << 20) | ((fbi->fb.var.yres-1)<<10) | (fbi->fb.var.xres-1);
++
++ fbi->state = C_ENABLE;
++
++ return 0;
++}
++
++static int overlay1fb_disable(struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*)info;
++ int done;
++
++ if ((fbi->state == C_DISABLE) || (fbi->state == C_BLANK))
++ return 0;
++
++ fbi->state = C_DISABLE;
++
++ /* clear O1EN */
++ OVL1C1 &= ~OVL1C1_O1EN;
++
++ CLEAR_LCD_INTR(LCSR1, LCSR1_BS1);
++ FBR1 = 0x3;
++ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS1, 100);
++
++ if (!done) {
++ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__);
++ return -1;
++ }
++ return 0;
++}
++
++static int overlay1fb_blank(int blank, struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++ int err=0;
++
++ switch (blank) {
++ case 0:
++ err = overlay1fb_enable(info);
++ if (err) {
++ fbi->state = C_DISABLE;
++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
++ }
++ break;
++ case 1:
++ err = overlay1fb_disable(info);
++ if (err) {
++ fbi->state = C_DISABLE;
++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
++ }
++ break;
++ default:
++ break;
++ }
++
++ return err;
++}
++
++static int overlay1fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info)
++{
++ int xpos, ypos;
++ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
++
++ /* must in base frame */
++ xpos = (var->nonstd & 0x3ff);
++ ypos = ((var->nonstd>>10) & 0x3ff);
++
++ if ( (xpos + var->xres) > fbi->basefb->fb.var.xres )
++ return -EINVAL;
++
++ if ( (ypos + var->yres) > fbi->basefb->fb.var.yres )
++ return -EINVAL;
++
++ switch (var->bits_per_pixel) {
++ case 16:
++ if ( var->xres & 0x1 ) {
++ printk("xres should be a multiple of 2 pixels!\n");
++ return -EINVAL;
++ }
++ break;
++ case 18:
++ case 19:
++ if ( var->xres & 0x7 ) {
++ printk("xres should be a multiple of 8 pixels!\n");
++ return -EINVAL;
++ }
++ break;
++ default:
++ break;
++ }
++
++ fbi->old_var=*var;
++
++ var->activate=FB_ACTIVATE_NOW;
++
++ return 0;
++}
++
++
++static int overlay1fb_set_par(struct fb_info *info)
++{
++ int nbytes=0, err=0, pixels_per_line=0;
++
++ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
++ struct fb_var_screeninfo *var = &fbi->fb.var;
++
++ info->flags &= ~FBINFO_MISC_USEREVENT;
++
++ if (fbi->state == C_BLANK)
++ return 0;
++
++ if (fbi->state == C_DISABLE)
++ goto out1;
++
++ /* only xpos & ypos change */
++ if ( (var->xres == fbi->old_var.xres) &&
++ (var->yres == fbi->old_var.yres) &&
++ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) )
++ goto out2;
++
++out1:
++ switch(var->bits_per_pixel) {
++ case 16:
++ /* 2 pixels per line */
++ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1);
++ nbytes = 2;
++
++ var->red = def_rgbt_16.red;
++ var->green = def_rgbt_16.green;
++ var->blue = def_rgbt_16.blue;
++ var->transp = def_rgbt_16.transp;
++
++ break;
++ case 18:
++ /* 8 pixels per line */
++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
++ nbytes = 3;
++
++ var->red = def_rgb_18.red;
++ var->green = def_rgb_18.green;
++ var->blue = def_rgb_18.blue;
++ var->transp = def_rgb_18.transp;
++
++ break;
++ case 19:
++ /* 8 pixels per line */
++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
++ nbytes = 3;
++
++ var->red = def_rgbt_19.red;
++ var->green = def_rgbt_19.green;
++ var->blue = def_rgbt_19.blue;
++ var->transp = def_rgbt_19.transp;
++
++ break;
++ case 24:
++ pixels_per_line = fbi->fb.var.xres;
++ nbytes = 4;
++
++ var->red = def_rgbt_24.red;
++ var->green = def_rgbt_24.green;
++ var->blue = def_rgbt_24.blue;
++ var->transp = def_rgbt_24.transp;
++
++ break;
++ case 25:
++ pixels_per_line = fbi->fb.var.xres;
++ nbytes = 4;
++
++ var->red = def_rgbt_25.red;
++ var->green = def_rgbt_25.green;
++ var->blue = def_rgbt_25.blue;
++ var->transp = def_rgbt_25.transp;
++
++ break;
++ }
++
++ fbi->fb.fix.line_length = nbytes * pixels_per_line;
++ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres;
++
++ err= overlay1fb_map_video_memory((struct fb_info*)fbi);
++
++ if (err)
++ return err;
++
++out2:
++ fbi->xpos = var->nonstd & 0x3ff;
++ fbi->ypos = (var->nonstd>>10) & 0x3ff;
++
++ overlay1fb_enable(info);
++
++ return 0;
++
++}
++
++static struct fb_ops overlay1fb_ops = {
++ .owner = THIS_MODULE,
++ .fb_open = overlay1fb_open,
++ .fb_release = overlay1fb_release,
++ .fb_check_var = overlay1fb_check_var,
++ .fb_set_par = overlay1fb_set_par,
++ .fb_blank = overlay1fb_blank,
++ .fb_fillrect = cfb_fillrect,
++ .fb_copyarea = cfb_copyarea,
++ .fb_imageblit = cfb_imageblit,
++};
++
++ /*
++ * LCD enhancement : Overlay 2
++ *
++ * Features:
++ * - support planar YCbCr420/YCbCr422/YCbCr444;
++ */
++static int overlay2fb_open(struct fb_info *info, int user)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++ int ret = 0;
++
++ /* if basefb is disable, enable fb. */
++ if (fbi->basefb && fbi->basefb->state != C_ENABLE)
++ pxafb_blank(VESA_NO_BLANKING, (struct fb_info *)(fbi->basefb));
++
++ down(&fbi->mutex);
++
++ if (fbi->refcount)
++ ret = -EACCES;
++ else
++ fbi->refcount ++;
++
++ up(&fbi->mutex);
++ fbi->fb.var.xres = fbi->fb.var.yres = 0;
++
++ return ret;
++}
++
++static int overlay2fb_release(struct fb_info *info, int user)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++
++ down(&fbi->mutex);
++
++ if (fbi->refcount)
++ fbi->refcount --;
++
++ up(&fbi->mutex);
++
++ /* disable overlay when released */
++ overlay2fb_blank(1, info);
++
++ return 0;
++}
++
++static int overlay2fb_map_YUV_memory( struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++ unsigned int ylen, cblen, crlen, aylen, acblen, acrlen;
++ unsigned int yoff, cboff, croff;
++ unsigned int xres,yres;
++ unsigned int nbytes;
++
++ ylen = cblen = crlen = aylen = acblen = acrlen = 0;
++ yoff = cboff = croff = 0;
++
++ if (fbi->map_cpu)
++ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma);
++
++ yres = fbi->fb.var.yres;
++
++ switch(fbi->format) {
++ case 0x4: /* YCbCr 4:2:0 planar */
++ pr_debug("420 planar\n");
++ /* 16 pixels per line */
++ xres = (fbi->fb.var.xres + 0xf) & (~0xf);
++ fbi->fb.fix.line_length = xres;
++
++ nbytes = xres * yres;
++ ylen = nbytes;
++ cblen = crlen = (nbytes/4);
++
++ break;
++ case 0x3: /* YCbCr 4:2:2 planar */
++ /* 8 pixles per line */
++ pr_debug("422 planar\n");
++ xres = (fbi->fb.var.xres + 0x7) & (~0x7);
++ fbi->fb.fix.line_length = xres;
++
++ nbytes = xres * yres;
++ ylen = nbytes;
++ cblen = crlen = (nbytes/2);
++
++ break;
++ case 0x2: /* YCbCr 4:4:4 planar */
++ /* 4 pixels per line */
++ pr_debug("444 planar\n");
++ xres = (fbi->fb.var.xres + 0x3) & (~0x3);
++ fbi->fb.fix.line_length = xres;
++
++ nbytes = xres * yres;
++ ylen = cblen = crlen = nbytes;
++ break;
++ }
++
++ /* 16-bytes alignment for DMA */
++ aylen = (ylen + 0xf) & (~0xf);
++ acblen = (cblen + 0xf) & (~0xf);
++ acrlen = (crlen + 0xf) & (~0xf);
++
++ fbi->fb.fix.smem_len = aylen + acblen + acrlen;
++
++ /* alloc memory */
++
++ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
++ &fbi->map_dma, GFP_KERNEL );
++
++ if (!fbi->map_cpu) return -ENOMEM;
++
++ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE;
++ fbi->screen_dma = fbi->map_dma + PAGE_SIZE;
++
++ fbi->fb.fix.smem_start = fbi->screen_dma;
++
++ /* setup dma for Planar format */
++ fbi->dma2 = (struct pxafb_dma_descriptor*)
++ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor));
++ fbi->dma3 = fbi->dma2 - 1;
++ fbi->dma4 = fbi->dma3 - 1;
++
++ /* offset */
++ yoff = 0;
++ cboff = aylen;
++ croff = cboff + acblen;
++
++ /* Y vector */
++ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor));
++ fbi->dma2->fsadr = fbi->screen_dma + yoff;
++ fbi->dma2->fidr = 0;
++ fbi->dma2->ldcmd = ylen;
++
++ /* Cb vector */
++ fbi->dma3->fdadr = (fbi->dma2->fdadr - sizeof(struct pxafb_dma_descriptor));
++ fbi->dma3->fsadr = (fbi->screen_dma + cboff);
++ fbi->dma3->fidr = 0;
++ fbi->dma3->ldcmd = cblen;
++
++ /* Cr vector */
++
++ fbi->dma4->fdadr = (fbi->dma3->fdadr - sizeof(struct pxafb_dma_descriptor));
++ fbi->dma4->fsadr = (fbi->screen_dma + croff);
++ fbi->dma4->fidr = 0;
++ fbi->dma4->ldcmd = crlen;
++
++ /* adjust for user */
++ fbi->fb.var.red.length = ylen;
++ fbi->fb.var.red.offset = yoff;
++ fbi->fb.var.green.length = cblen;
++ fbi->fb.var.green.offset = cboff;
++ fbi->fb.var.blue.length = crlen;
++ fbi->fb.var.blue.offset = croff;
++
++ return 0;
++};
++
++static int overlay2fb_map_RGB_memory( struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++ struct fb_var_screeninfo *var = &fbi->fb.var;
++ int pixels_per_line=0 , nbytes=0;
++
++ if (fbi->map_cpu)
++ dma_free_writecombine(NULL, fbi->map_size, (void*)fbi->map_cpu, fbi->map_dma);
++
++ switch(var->bits_per_pixel) {
++ case 16:
++ /* 2 pixels per line */
++ pixels_per_line = (fbi->fb.var.xres + 0x1) & (~0x1);
++ nbytes = 2;
++
++ var->red = def_rgbt_16.red;
++ var->green = def_rgbt_16.green;
++ var->blue = def_rgbt_16.blue;
++ var->transp = def_rgbt_16.transp;
++ break;
++
++ case 18:
++ /* 8 pixels per line */
++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
++ nbytes = 3;
++
++ var->red = def_rgb_18.red;
++ var->green = def_rgb_18.green;
++ var->blue = def_rgb_18.blue;
++ var->transp = def_rgb_18.transp;
++
++ break;
++ case 19:
++ /* 8 pixels per line */
++ pixels_per_line = (fbi->fb.var.xres + 0x7 ) & (~0x7);
++ nbytes = 3;
++
++ var->red = def_rgbt_19.red;
++ var->green = def_rgbt_19.green;
++ var->blue = def_rgbt_19.blue;
++ var->transp = def_rgbt_19.transp;
++
++ break;
++ case 24:
++ pixels_per_line = fbi->fb.var.xres;
++ nbytes = 4;
++
++ var->red = def_rgbt_24.red;
++ var->green = def_rgbt_24.green;
++ var->blue = def_rgbt_24.blue;
++ var->transp = def_rgbt_24.transp;
++
++ break;
++
++ case 25:
++ pixels_per_line = fbi->fb.var.xres;
++ nbytes = 4;
++
++ var->red = def_rgbt_25.red;
++ var->green = def_rgbt_25.green;
++ var->blue = def_rgbt_25.blue;
++ var->transp = def_rgbt_25.transp;
++
++ break;
++ }
++
++ fbi->fb.fix.line_length = nbytes * pixels_per_line;
++ fbi->fb.fix.smem_len = fbi->fb.fix.line_length * fbi->fb.var.yres;
++
++ fbi->map_size = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
++ &fbi->map_dma, GFP_KERNEL );
++
++ if (!fbi->map_cpu) return -ENOMEM;
++
++ fbi->screen_cpu = fbi->map_cpu + PAGE_SIZE;
++ fbi->screen_dma = fbi->map_dma + PAGE_SIZE;
++
++ fbi->fb.fix.smem_start = fbi->screen_dma;
++
++ /* setup dma descriptor */
++ fbi->dma2 = (struct pxafb_dma_descriptor*)
++ (fbi->screen_cpu - sizeof(struct pxafb_dma_descriptor));
++
++ fbi->dma2->fdadr = (fbi->screen_dma - sizeof(struct pxafb_dma_descriptor));
++ fbi->dma2->fsadr = fbi->screen_dma;
++ fbi->dma2->fidr = 0;
++ fbi->dma2->ldcmd = fbi->fb.fix.smem_len;
++
++ return 0;
++}
++
++static int overlay2fb_enable(struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++ unsigned long bpp2;
++ unsigned int xres, yres;
++
++ if (!fbi->map_cpu) return -EINVAL;
++
++ switch(fbi->fb.var.bits_per_pixel) {
++ case 16:
++ bpp2 = 0x4;
++ break;
++ case 18:
++ bpp2 = 0x6;
++ break;
++ case 19:
++ bpp2 = 0x8;
++ break;
++ case 24:
++ bpp2 = 0x9;
++ break;
++ case 25:
++ bpp2 = 0xa;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ /* disable branch/start/end of frame interrupt */
++ LCCR5 |= (LCCR5_IUM4 | LCCR5_IUM3 | LCCR5_IUM2 |
++ LCCR5_BSM4 | LCCR5_BSM3 | LCCR5_BSM2 |
++ LCCR5_EOFM4 | LCCR5_EOFM3 | LCCR5_EOFM2 |
++ LCCR5_SOFM4 | LCCR5_SOFM3 | LCCR5_SOFM2);
++
++ if (fbi->format == 0) {
++ /* overlay2 RGB resolution, RGB and YUV have different xres value*/
++ xres = fbi->fb.var.xres;
++ yres = fbi->fb.var.yres;
++
++ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos;
++ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1);
++ /* setup RGB DMA */
++ if (fbi->state == C_DISABLE || fbi->state == C_BLANK)
++ FDADR2 = fbi->dma2->fdadr;
++ else
++ FBR2 = fbi->dma2->fdadr | 0x1;
++ } else {
++ /* overlay2 YUV resolution */
++ xres = fbi->fb.fix.line_length;
++ yres = fbi->fb.var.yres;
++
++ OVL2C2 = (fbi->format << 20) | (fbi->ypos << 10) | fbi->xpos;
++ OVL2C1 = OVL2C1_O2EN | (bpp2 << 20) | ((yres-1)<<10) | (xres-1);
++
++ if (fbi->state == C_DISABLE || fbi->state == C_BLANK) {
++ FDADR2 = fbi->dma2->fdadr;
++ FDADR3 = fbi->dma3->fdadr;
++ FDADR4 = fbi->dma4->fdadr;
++ } else {
++ FBR2 = fbi->dma2->fdadr | 0x01;
++ FBR3 = fbi->dma3->fdadr | 0x01;
++ FBR4 = fbi->dma4->fdadr | 0x01;
++ }
++ }
++
++ fbi->state = C_ENABLE;
++ return 0;
++}
++
++static int overlay2fb_disable(struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*)info;
++ int done;
++
++ if (fbi->state == C_DISABLE)
++ return 0;
++ if (fbi->state == C_BLANK) {
++ fbi->state = C_DISABLE;
++ return 0;
++ }
++
++ fbi->state = C_DISABLE;
++
++ /* clear O2EN */
++ OVL2C1 &= ~OVL2C1_O2EN;
++
++ /* Make overlay2 can't disable/enable
++ * correctly sometimes.
++ */
++ CLEAR_LCD_INTR(LCSR1, LCSR1_BS2);
++
++ if (fbi->format == 0)
++ FBR2 = 0x3;
++ else {
++ FBR2 = 0x3;
++ FBR3 = 0x3;
++ FBR4 = 0x3;
++ }
++
++ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS2, 100);
++
++ if (!done) {
++ pr_debug(KERN_INFO "%s: timeout\n", __FUNCTION__);
++ return -1;
++ }
++ return 0;
++}
++
++static int overlay2fb_blank(int blank, struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++ int err=0;
++
++ switch(blank)
++ {
++ case 0:
++ err = overlay2fb_enable(info);
++ if (err) {
++ fbi->state = C_DISABLE;
++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
++ }
++ break;
++ case 1:
++ err = overlay2fb_disable(info);
++ if (err) {
++ fbi->state = C_DISABLE;
++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
++ }
++ break;
++ default:
++ /* reserved */
++ break;
++ }
++
++ return err;
++}
++
++
++static int overlay2fb_check_var( struct fb_var_screeninfo *var, struct fb_info *info)
++{
++ int xpos, ypos, xres, yres;
++ int format;
++ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
++
++ xres=yres=0;
++
++ xpos = (var->nonstd & 0x3ff);
++ ypos = (var->nonstd >> 10) & 0x3ff;
++ format = (var->nonstd >>20) & 0x7;
++
++
++ /* Palnar YCbCr444, YCbCr422, YCbCr420 */
++ if ( (format != 0x4) && (format != 0x3) && (format != 0x2) && (format !=0x0))
++ return -EINVAL;
++
++ /* dummy pixels */
++ switch(format) {
++ case 0x0: /* RGB */
++ xres = var->xres;
++ break;
++ case 0x2: /* 444 */
++ xres = (var->xres + 0x3) & ~(0x3);
++ break;
++ case 0x3: /* 422 */
++ xres = (var->xres + 0x7) & ~(0x7);
++ break;
++ case 0x4: /* 420 */
++ xres = (var->xres + 0xf) & ~(0xf);
++ break;
++ }
++ yres = var->yres;
++
++ if ( (xpos + xres) > fbi->basefb->fb.var.xres )
++ return -EINVAL;
++
++ if ( (ypos + yres) > fbi->basefb->fb.var.yres )
++ return -EINVAL;
++
++ fbi->old_var=*var;
++
++ var->activate=FB_ACTIVATE_NOW;
++
++ return 0;
++
++}
++
++
++/*
++ * overlay2fb_set_var()
++ *
++ * var.nonstd is used as YCbCr format.
++ * var.red/green/blue is used as (Y/Cb/Cr) vector
++ */
++
++static int overlay2fb_set_par(struct fb_info *info)
++{
++ unsigned int xpos, ypos;
++ int format, err;
++
++ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
++ struct fb_var_screeninfo *var = &fbi->fb.var;
++
++ info->flags &= ~FBINFO_MISC_USEREVENT;
++
++ if (fbi->state == C_BLANK)
++ return 0;
++
++ if (fbi->state == C_DISABLE)
++ goto out1;
++
++ if ( (var->xres == fbi->old_var.xres) &&
++ (var->yres == fbi->old_var.yres) &&
++ (var->bits_per_pixel == fbi->old_var.bits_per_pixel) &&
++ (((var->nonstd>>20) & 0x7) == fbi->format) )
++ goto out2;
++
++out1:
++ xpos = var->nonstd & 0x3ff;
++ ypos = (var->nonstd>>10) & 0x3ff;
++ format = (var->nonstd>>20) & 0x7;
++
++
++ fbi->format = format;
++ if ( fbi->format==0 )
++ err = overlay2fb_map_RGB_memory(info);
++ else
++ err = overlay2fb_map_YUV_memory(info);
++
++ if (err) return err;
++
++out2:
++ /* position */
++ fbi->xpos = var->nonstd & 0x3ff;
++ fbi->ypos = (var->nonstd>>10) & 0x3ff;
++
++ overlay2fb_enable(info);
++
++ return 0;
++}
++
++static struct fb_ops overlay2fb_ops = {
++ .owner = THIS_MODULE,
++ .fb_open = overlay2fb_open,
++ .fb_release = overlay2fb_release,
++ .fb_check_var = overlay2fb_check_var,
++ .fb_set_par = overlay2fb_set_par,
++ .fb_blank = overlay2fb_blank,
++ .fb_fillrect = cfb_fillrect,
++ .fb_copyarea = cfb_copyarea,
++ .fb_imageblit = cfb_imageblit,
++};
++
++/* Hardware cursor */
++
++/* Bulverde Cursor Modes */
++struct cursorfb_mode{
++ int xres;
++ int yres;
++ int bpp;
++};
++
++static struct cursorfb_mode cursorfb_modes[]={
++ { 32, 32, 2},
++ { 32, 32, 2},
++ { 32, 32, 2},
++ { 64, 64, 2},
++ { 64, 64, 2},
++ { 64, 64, 2},
++ {128, 128, 1},
++ {128, 128, 1}
++};
++
++static int cursorfb_enable(struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++
++ if (!fbi->map_cpu) return -EINVAL;
++
++ CCR &= ~CCR_CEN;
++
++ /* set palette format
++ *
++ * FIXME: if only cursor uses palette
++ */
++ LCCR4 = (LCCR4 & (~(0x3<<15))) | (0x1<<15);
++
++ /* disable branch/start/end of frame interrupt */
++ LCCR5 |= (LCCR5_IUM5 | LCCR5_BSM5 | LCCR5_EOFM5 | LCCR5_SOFM5);
++
++ /* load palette and frame data */
++ if (fbi->state == C_DISABLE) {
++ FDADR5 = fbi->dma5_pal->fdadr;
++ udelay(1);
++ FDADR5 = fbi->dma5_frame->fdadr;
++ udelay(1);
++
++ }
++ else {
++ FBR5 = fbi->dma5_pal->fdadr | 0x1;
++ udelay(1);
++ FBR5 = fbi->dma5_frame->fdadr | 0x1;
++ udelay(1);
++ }
++
++ CCR = CCR_CEN | (fbi->ypos << 15) | (fbi->xpos << 5) | (fbi->format);
++
++ fbi->state = C_ENABLE;
++
++ return 0;
++}
++
++static int cursorfb_disable(struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*)info;
++ int done, ret = 0;
++
++ fbi->state = C_DISABLE;
++
++ done = WAIT_FOR_LCD_INTR(LCSR1, LCSR1_BS5, 100);
++ if (!done) ret = -1;
++
++ CCR &= ~CCR_CEN;
++
++ return ret;
++}
++
++static int cursorfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
++ u_int trans, struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info *)info;
++ u_int val, ret = 1;
++ u_int *pal=(u_int*) fbi->palette_cpu;
++
++ /* 25bit with Transparcy for 16bpp format */
++ if (regno < fbi->palette_size) {
++ val = ((trans << 24) & 0x1000000);
++ val |= ((red << 16) & 0x0ff0000);
++ val |= ((green << 8 ) & 0x000ff00);
++ val |= ((blue << 0) & 0x00000ff);
++
++ pal[regno] = val;
++ ret = 0;
++ }
++ return ret;
++}
++
++int cursorfb_blank(int blank, struct fb_info *info)
++{
++ switch(blank)
++ {
++ case 0:
++ cursorfb_enable(info);
++ break;
++ case 1:
++ cursorfb_disable(info);
++ break;
++ default:
++ /* reserved */
++ break;
++ }
++ return 0;
++}
++
++static int cursorfb_check_var( struct fb_var_screeninfo *var, struct fb_info *info)
++{
++ int xpos, ypos, xres, yres;
++ int mode;
++ struct cursorfb_mode *cursor;
++ struct overlayfb_info *fbi=(struct overlayfb_info*)info;
++
++ mode = var->nonstd & 0x7;
++ xpos = (var->nonstd>>5) & 0x3ff;
++ ypos = (var->nonstd>>15) & 0x3ff;
++
++ if (mode>7 || mode <0 )
++ return -EINVAL;
++
++ cursor = cursorfb_modes + mode;
++
++ xres = cursor->xres;
++ yres = cursor->yres;
++
++ if ( (xpos + xres) > fbi->basefb->fb.var.xres )
++ return -EINVAL;
++
++ if ( (ypos + yres) > fbi->basefb->fb.var.yres )
++ return -EINVAL;
++
++ return 0;
++
++}
++
++static int cursorfb_set_par(struct fb_info *info)
++{
++ struct overlayfb_info *fbi = (struct overlayfb_info*) info;
++ struct fb_var_screeninfo *var = &fbi->fb.var;
++ struct cursorfb_mode *cursor;
++ int mode, xpos, ypos;
++ int err;
++
++ info->flags &= ~FBINFO_MISC_USEREVENT;
++
++ mode = var->nonstd & 0x7;
++ xpos = (var->nonstd>>5) & 0x3ff;
++ ypos = (var->nonstd>>15) & 0x3ff;
++
++ if (mode != fbi->format) {
++ cursor = cursorfb_modes + mode;
++
++ /* update "var" info */
++ fbi->fb.var.xres = cursor->xres;
++ fbi->fb.var.yres = cursor->yres;
++ fbi->fb.var.bits_per_pixel = cursor->bpp;
++
++ /* alloc video memory
++ *
++ * 4k is engouh for 128x128x1 cursor,
++ * - 2k for cursor pixels,
++ * - 2k for palette data, plus 2 dma descriptor
++ */
++ if (!fbi->map_cpu) {
++ fbi->map_size = PAGE_SIZE;
++ fbi->map_cpu = (unsigned long)dma_alloc_writecombine(NULL, fbi->map_size,
++ &fbi->map_dma, GFP_KERNEL );
++ if (!fbi->map_cpu) return -ENOMEM;
++ }
++
++ cursor = cursorfb_modes + mode;
++
++ /* update overlay & fix "info" */
++ fbi->screen_cpu = fbi->map_cpu;
++ fbi->palette_cpu = fbi->map_cpu + (PAGE_SIZE/2);
++ fbi->screen_dma = fbi->map_dma;
++ fbi->palette_dma = fbi->map_dma + (PAGE_SIZE/2);
++
++ fbi->format = mode;
++ fbi->palette_size = (1<<cursor->bpp);
++ fbi->fb.fix.smem_start = fbi->screen_dma;
++ fbi->fb.fix.smem_len = cursor->xres * cursor->yres * cursor->bpp / 8;
++ fbi->fb.fix.line_length = cursor->xres * cursor->bpp / 8;
++
++ fbi->dma5_pal = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 16 );
++ fbi->dma5_pal->fdadr = (fbi->map_dma + PAGE_SIZE - 16);
++ fbi->dma5_pal->fsadr = fbi->palette_dma;
++ fbi->dma5_pal->fidr = 0;
++ fbi->dma5_pal->ldcmd = (fbi->palette_size<<2) | LDCMD_PAL;
++
++ fbi->dma5_frame = (struct pxafb_dma_descriptor*)(fbi->map_cpu + PAGE_SIZE - 32 );
++ fbi->dma5_frame->fdadr = (fbi->map_dma + PAGE_SIZE - 32);
++ fbi->dma5_frame->fsadr = fbi->screen_dma;
++ fbi->dma5_frame->fidr = 0;
++ fbi->dma5_frame->ldcmd = fbi->fb.fix.smem_len;
++
++ /* alloc & set default cmap */
++ err = fb_alloc_cmap(&fbi->fb.cmap, fbi->palette_size, 0);
++ if (err) return err;
++ err = fb_set_cmap(&fbi->fb.cmap, info);
++ if (err) return err;
++ }
++
++ /* update overlay info */
++ if ( (xpos != fbi->xpos) || (ypos != fbi->ypos) ) {
++ fbi->xpos = xpos;
++ fbi->ypos = ypos;
++ }
++
++ cursorfb_enable(info);
++ pxafb_set_ctrlr_state(fbi->basefb, C_REENABLE);
++
++ return 0;
++}
++
++static struct fb_ops cursorfb_ops = {
++ .owner = THIS_MODULE,
++ .fb_check_var = cursorfb_check_var,
++ .fb_set_par = cursorfb_set_par,
++ .fb_blank = cursorfb_blank,
++ .fb_fillrect = cfb_fillrect,
++ .fb_copyarea = cfb_copyarea,
++ .fb_imageblit = cfb_imageblit,
++ .fb_setcolreg = cursorfb_setcolreg,
++};
++
++static struct overlayfb_info * __init overlay1fb_init_fbinfo(void)
++{
++ struct overlayfb_info *fbi;
++
++ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL);
++ if (!fbi)
++ return NULL;
++
++ memset(fbi, 0, sizeof(struct overlayfb_info) );
++
++ fbi->refcount = 0;
++ init_MUTEX(&fbi->mutex);
++
++ strcpy(fbi->fb.fix.id, "overlay1");
++
++ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
++ fbi->fb.fix.type_aux = 0;
++ fbi->fb.fix.xpanstep = 0;
++ fbi->fb.fix.ypanstep = 0;
++ fbi->fb.fix.ywrapstep = 0;
++ fbi->fb.fix.accel = FB_ACCEL_NONE;
++
++ fbi->fb.var.nonstd = 0;
++ fbi->fb.var.activate = FB_ACTIVATE_NOW;
++ fbi->fb.var.height = -1;
++ fbi->fb.var.width = -1;
++ fbi->fb.var.accel_flags = 0;
++ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED;
++
++
++ fbi->fb.fbops = &overlay1fb_ops;
++ fbi->fb.flags = FBINFO_FLAG_DEFAULT;
++ fbi->fb.node = -1;
++ fbi->fb.pseudo_palette = NULL;
++
++ fbi->xpos = 0;
++ fbi->ypos = 0;
++ fbi->format = -1;
++ fbi->state = C_DISABLE;
++
++ return fbi;
++}
++
++static struct overlayfb_info * __init overlay2fb_init_fbinfo(void)
++{
++ struct overlayfb_info *fbi;
++
++ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL);
++ if (!fbi)
++ return NULL;
++
++ memset(fbi, 0, sizeof(struct overlayfb_info) );
++
++ fbi->refcount = 0;
++ init_MUTEX(&fbi->mutex);
++
++ strcpy(fbi->fb.fix.id, "overlay2");
++
++ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
++ fbi->fb.fix.type_aux = 0;
++ fbi->fb.fix.xpanstep = 0;
++ fbi->fb.fix.ypanstep = 0;
++ fbi->fb.fix.ywrapstep = 0;
++ fbi->fb.fix.accel = FB_ACCEL_NONE;
++
++ fbi->fb.var.nonstd = 0;
++ fbi->fb.var.activate = FB_ACTIVATE_NOW;
++ fbi->fb.var.height = -1;
++ fbi->fb.var.width = -1;
++ fbi->fb.var.accel_flags = 0;
++ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED;
++
++ fbi->fb.fbops = &overlay2fb_ops;
++ fbi->fb.flags = FBINFO_FLAG_DEFAULT;
++ fbi->fb.node = -1;
++ fbi->fb.pseudo_palette = NULL;
++
++ fbi->xpos = 0;
++ fbi->ypos = 0;
++ fbi->format = -1;
++ fbi->state = C_DISABLE;
++
++ return fbi;
++}
++
++static struct overlayfb_info * __init cursorfb_init_fbinfo(void)
++{
++ struct overlayfb_info *fbi;
++
++ fbi = kmalloc(sizeof(struct overlayfb_info) + sizeof(u16) * 16, GFP_KERNEL);
++ if (!fbi)
++ return NULL;
++
++ memset(fbi, 0, sizeof(struct overlayfb_info) );
++
++ fbi->refcount = 0;
++ init_MUTEX(&fbi->mutex);
++
++ strcpy(fbi->fb.fix.id, "cursor");
++
++ fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
++ fbi->fb.fix.type_aux = 0;
++ fbi->fb.fix.xpanstep = 0;
++ fbi->fb.fix.ypanstep = 0;
++ fbi->fb.fix.ywrapstep = 0;
++ fbi->fb.fix.accel = FB_ACCEL_NONE;
++
++ fbi->fb.var.nonstd = 0;
++ fbi->fb.var.activate = FB_ACTIVATE_NOW;
++ fbi->fb.var.height = -1;
++ fbi->fb.var.width = -1;
++ fbi->fb.var.accel_flags = 0;
++ fbi->fb.var.vmode = FB_VMODE_NONINTERLACED;
++
++ fbi->fb.fbops = &cursorfb_ops;
++ fbi->fb.flags = FBINFO_FLAG_DEFAULT;
++ fbi->fb.node = -1;
++ fbi->fb.pseudo_palette = NULL;
++
++
++ fbi->xpos = 0;
++ fbi->ypos = 0;
++ fbi->format = -1;
++ fbi->state = C_DISABLE;
++
++ return fbi;
++}
++
++
++void pxa_set_overlay_ctrlr_state(struct pxafb_info *fbi, u_int state)
++{
++ switch (state) {
++ case C_DISABLE:
++ DISABLE_OVERLAYS(fbi);
++ break;
++ case C_ENABLE:
++ ENABLE_OVERLAYS(fbi);
++ break;
++ case C_BLANK:
++ BLANK_OVERLAYS(fbi);
++ break;
++ case C_UNBLANK:
++ UNBLANK_OVERLAYS(fbi);
++ break;
++ default:
++ break;
++ }
++}
++
++static int is_pxafb_device(struct device * dev, void * data)
++{
++ struct platform_device *pdev = container_of(dev, struct platform_device, dev);
++
++ return (strncmp(pdev->name, "pxa2xx-fb", 9) == 0);
++}
++
++static int __devinit pxafb_overlay_init(void)
++{
++ int ret;
++ struct overlayfb_info *overlay1fb, *overlay2fb, *cursorfb;
++ struct pxafb_info *fbi;
++ struct device *dev;
++
++ ret = -1;
++ overlay1fb = overlay2fb = cursorfb = NULL;
++ fbi = NULL;
++
++ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
++ if (!dev) {
++ printk(KERN_INFO "Base framebuffer not exists, failed to load overlay driver!\n");
++ return ret;
++ }
++
++ fbi = dev_get_drvdata(dev);
++ if (fbi == NULL) {
++ printk(KERN_INFO "Base framebuffer not initialized, failed to load overlay driver!\n");
++ return ret;
++ }
++
++ /* Overlay 1 windows */
++ overlay1fb = overlay1fb_init_fbinfo();
++
++ if (!overlay1fb) {
++ ret = -ENOMEM;
++ printk("overlay1fb_init_fbinfo failed\n");
++ goto failed;
++ }
++
++ ret = register_framebuffer(&overlay1fb->fb);
++ if (ret < 0)
++ goto failed;
++
++ /* Overlay 2 window */
++ overlay2fb = overlay2fb_init_fbinfo();
++
++ if (!overlay2fb) {
++ ret = -ENOMEM;
++ printk("overlay2fb_init_fbinfo failed\n");
++ goto failed;
++ }
++
++ ret = register_framebuffer(&overlay2fb->fb);
++ if (ret < 0) goto failed;
++
++ /* Hardware cursor window */
++ cursorfb = cursorfb_init_fbinfo();
++
++ if (!cursorfb) {
++ ret = -ENOMEM;
++ printk("cursorfb_init_fbinfo failed\n");
++ goto failed;
++ }
++
++ ret = register_framebuffer(&cursorfb->fb);
++ if (ret < 0) goto failed;
++
++
++ /* set refernce to Overlays */
++ fbi->overlay1fb = overlay1fb;
++ fbi->overlay2fb = overlay2fb;
++ fbi->cursorfb = cursorfb;
++ fbi->set_overlay_ctrlr_state=pxa_set_overlay_ctrlr_state;
++
++ /* set refernce to BaseFrame */
++ overlay1fb->basefb = fbi;
++ overlay2fb->basefb = fbi;
++ cursorfb->basefb = fbi;
++
++ printk(KERN_INFO "Load PXA Overlay driver successfully!\n");
++
++ return 0;
++
++failed:
++ if (overlay1fb)
++ kfree(overlay1fb);
++ if (overlay2fb)
++ kfree(overlay2fb);
++ if (cursorfb)
++ kfree(cursorfb);
++ printk(KERN_INFO "Load PXA Overlay driver failed!\n");
++ return ret;
++}
++
++static void __exit pxafb_overlay_exit(void)
++{
++ struct pxafb_info *fbi;
++ struct device *dev;
++
++ dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
++ if (!dev)
++ return;
++
++ fbi = dev_get_drvdata(dev);
++ if (!fbi)
++ return;
++
++ if (fbi->overlay1fb) {
++ unregister_framebuffer(&(fbi->overlay1fb->fb));
++ kfree(fbi->overlay1fb);
++ fbi->overlay1fb = NULL;
++ }
++
++ if (fbi->overlay2fb) {
++ unregister_framebuffer(&(fbi->overlay2fb->fb));
++ kfree(fbi->overlay2fb);
++ fbi->overlay2fb = NULL;
++ }
++
++ if (fbi->cursorfb) {
++ unregister_framebuffer(&(fbi->cursorfb->fb));
++ kfree(fbi->cursorfb);
++ fbi->cursorfb = NULL;
++ }
++
++ fbi->set_overlay_ctrlr_state = NULL;
++
++ printk(KERN_INFO "Unload PXA Overlay driver successfully!\n");
++ return;
++}
++
++
++module_init(pxafb_overlay_init);
++module_exit(pxafb_overlay_exit);
++
++MODULE_DESCRIPTION("Loadable framebuffer overlay driver for PXA");
++MODULE_LICENSE("GPL");
++
+Index: linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h
++++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
+@@ -792,11 +792,18 @@
+ #define UDC_INT_PACKETCMP (0x1)
+
+ #define UDCICR_INT(n,intr) (((intr) & 0x03) << (((n) & 0x0F) * 2))
++/* Older defines, do not use. */
+ #define UDCICR1_IECC (1 << 31) /* IntEn - Configuration Change */
+ #define UDCICR1_IESOF (1 << 30) /* IntEn - Start of Frame */
+ #define UDCICR1_IERU (1 << 29) /* IntEn - Resume */
+ #define UDCICR1_IESU (1 << 28) /* IntEn - Suspend */
+ #define UDCICR1_IERS (1 << 27) /* IntEn - Reset */
++/* New defines. */
++#define UDCISR1_IRCC (1 << 31) /* IntEn - Configuration Change */
++#define UDCISR1_IRSOF (1 << 30) /* IntEn - Start of Frame */
++#define UDCISR1_IRRU (1 << 29) /* IntEn - Resume */
++#define UDCISR1_IRSU (1 << 28) /* IntEn - Suspend */
++#define UDCISR1_IRRS (1 << 27) /* IntEn - Reset */
+
+ #define UDCISR0 __REG(0x4060000C) /* UDC Interrupt Status Register 0 */
+ #define UDCISR1 __REG(0x40600010) /* UDC Interrupt Status Register 1 */
+@@ -1831,6 +1838,8 @@
+ #define DFBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */
+ #define DFBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */
+ #define LCSR __REG(0x44000038) /* LCD Controller Status Register */
++#define LCSR0 __REG(0x44000038) /* LCD Controller Status Register */
++#define LCSR1 __REG(0x44000034) /* LCD Controller Status Register */
+ #define LIIDR __REG(0x4400003C) /* LCD Controller Interrupt ID Register */
+ #define TMEDRGBR __REG(0x44000040) /* TMED RGB Seed Register */
+ #define TMEDCR __REG(0x44000044) /* TMED Control Register */
+@@ -1840,6 +1849,10 @@
+ #define LCCR3_4BPP (2 << 24)
+ #define LCCR3_8BPP (3 << 24)
+ #define LCCR3_16BPP (4 << 24)
++#define LCCR3_18BPP (6 << 24)
++#define LCCR3_19BPP (8 << 24)
++#define LCCR3_24BPP (9 << 24)
++#define LCCR3_25BPP (10<< 24)
+
+ #define LCCR3_PDFOR_0 (0 << 30)
+ #define LCCR3_PDFOR_1 (1 << 30)
+@@ -2014,6 +2027,104 @@
+
+ #define LDCMD_PAL (1 << 26) /* instructs DMA to load palette buffer */
+
++/* Overlay1 & Overlay2 & Hardware Cursor */
++#define LCSR1_SOF1 (1 << 0)
++#define LCSR1_SOF2 (1 << 1)
++#define LCSR1_SOF3 (1 << 2)
++#define LCSR1_SOF4 (1 << 3)
++#define LCSR1_SOF5 (1 << 4)
++#define LCSR1_SOF6 (1 << 5)
++
++#define LCSR1_EOF1 (1 << 8)
++#define LCSR1_EOF2 (1 << 9)
++#define LCSR1_EOF3 (1 << 10)
++#define LCSR1_EOF4 (1 << 11)
++#define LCSR1_EOF5 (1 << 12)
++#define LCSR1_EOF6 (1 << 13)
++
++#define LCSR1_BS1 (1 << 16)
++#define LCSR1_BS2 (1 << 17)
++#define LCSR1_BS3 (1 << 18)
++#define LCSR1_BS4 (1 << 19)
++#define LCSR1_BS5 (1 << 20)
++#define LCSR1_BS6 (1 << 21)
++
++#define LCSR1_IU2 (1 << 25)
++#define LCSR1_IU3 (1 << 26)
++#define LCSR1_IU4 (1 << 27)
++#define LCSR1_IU5 (1 << 28)
++#define LCSR1_IU6 (1 << 29)
++
++#define LDCMD_SOFINT (1 << 22)
++#define LDCMD_EOFINT (1 << 21)
++
++
++#define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */
++#define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */
++#define LCCR5_SOFM3 (1<<2) /* Start Of Frame Mask for Overlay 2 (channel 3) */
++#define LCCR5_SOFM4 (1<<3) /* Start Of Frame Mask for Overlay 2 (channel 4) */
++#define LCCR5_SOFM5 (1<<4) /* Start Of Frame Mask for cursor (channel 5) */
++#define LCCR5_SOFM6 (1<<5) /* Start Of Frame Mask for command data (channel 6) */
++
++#define LCCR5_EOFM1 (1<<8) /* End Of Frame Mask for Overlay 1 (channel 1) */
++#define LCCR5_EOFM2 (1<<9) /* End Of Frame Mask for Overlay 2 (channel 2) */
++#define LCCR5_EOFM3 (1<<10) /* End Of Frame Mask for Overlay 2 (channel 3) */
++#define LCCR5_EOFM4 (1<<11) /* End Of Frame Mask for Overlay 2 (channel 4) */
++#define LCCR5_EOFM5 (1<<12) /* End Of Frame Mask for cursor (channel 5) */
++#define LCCR5_EOFM6 (1<<13) /* End Of Frame Mask for command data (channel 6) */
++
++#define LCCR5_BSM1 (1<<16) /* Branch mask for Overlay 1 (channel 1) */
++#define LCCR5_BSM2 (1<<17) /* Branch mask for Overlay 2 (channel 2) */
++#define LCCR5_BSM3 (1<<18) /* Branch mask for Overlay 2 (channel 3) */
++#define LCCR5_BSM4 (1<<19) /* Branch mask for Overlay 2 (channel 4) */
++#define LCCR5_BSM5 (1<<20) /* Branch mask for cursor (channel 5) */
++#define LCCR5_BSM6 (1<<21) /* Branch mask for data command (channel 6) */
++
++#define LCCR5_IUM1 (1<<24) /* Input FIFO Underrun Mask for Overlay 1 */
++#define LCCR5_IUM2 (1<<25) /* Input FIFO Underrun Mask for Overlay 2 */
++#define LCCR5_IUM3 (1<<26) /* Input FIFO Underrun Mask for Overlay 2 */
++#define LCCR5_IUM4 (1<<27) /* Input FIFO Underrun Mask for Overlay 2 */
++#define LCCR5_IUM5 (1<<28) /* Input FIFO Underrun Mask for cursor */
++#define LCCR5_IUM6 (1<<29) /* Input FIFO Underrun Mask for data command */
++
++#define OVL1C1_O1EN (1<<31) /* Enable bit for Overlay 1 */
++#define OVL2C1_O2EN (1<<31) /* Enable bit for Overlay 2 */
++#define CCR_CEN (1<<31) /* Enable bit for Cursor */
++
++/* LCD registers */
++#define LCCR4 __REG(0x44000010) /* LCD Controller Control Register 4 */
++#define LCCR5 __REG(0x44000014) /* LCD Controller Control Register 5 */
++#define FBR0 __REG(0x44000020) /* DMA Channel 0 Frame Branch Register */
++#define FBR1 __REG(0x44000024) /* DMA Channel 1 Frame Branch Register */
++#define FBR2 __REG(0x44000028) /* DMA Channel 2 Frame Branch Register */
++#define FBR3 __REG(0x4400002C) /* DMA Channel 3 Frame Branch Register */
++#define FBR4 __REG(0x44000030) /* DMA Channel 4 Frame Branch Register */
++#define FDADR2 __REG(0x44000220) /* DMA Channel 2 Frame Descriptor Address Register */
++#define FSADR2 __REG(0x44000224) /* DMA Channel 2 Frame Source Address Register */
++#define FIDR2 __REG(0x44000228) /* DMA Channel 2 Frame ID Register */
++#define LDCMD2 __REG(0x4400022C) /* DMA Channel 2 Command Register */
++#define FDADR3 __REG(0x44000230) /* DMA Channel 3 Frame Descriptor Address Register */
++#define FSADR3 __REG(0x44000234) /* DMA Channel 3 Frame Source Address Register */
++#define FIDR3 __REG(0x44000238) /* DMA Channel 3 Frame ID Register */
++#define LDCMD3 __REG(0x4400023C) /* DMA Channel 3 Command Register */
++#define FDADR4 __REG(0x44000240) /* DMA Channel 4 Frame Descriptor Address Register */
++#define FSADR4 __REG(0x44000244) /* DMA Channel 4 Frame Source Address Register */
++#define FIDR4 __REG(0x44000248) /* DMA Channel 4 Frame ID Register */
++#define LDCMD4 __REG(0x4400024C) /* DMA Channel 4 Command Register */
++#define FDADR5 __REG(0x44000250) /* DMA Channel 5 Frame Descriptor Address Register */
++#define FSADR5 __REG(0x44000254) /* DMA Channel 5 Frame Source Address Register */
++#define FIDR5 __REG(0x44000258) /* DMA Channel 5 Frame ID Register */
++#define LDCMD5 __REG(0x4400025C) /* DMA Channel 5 Command Register */
++
++#define OVL1C1 __REG(0x44000050) /* Overlay 1 Control Register 1 */
++#define OVL1C2 __REG(0x44000060) /* Overlay 1 Control Register 2 */
++#define OVL2C1 __REG(0x44000070) /* Overlay 2 Control Register 1 */
++#define OVL2C2 __REG(0x44000080) /* Overlay 2 Control Register 2 */
++#define CCR __REG(0x44000090) /* Cursor Control Register */
++
++#define FBR5 __REG(0x44000110) /* DMA Channel 5 Frame Branch Register */
++#define FBR6 __REG(0x44000114) /* DMA Channel 6 Frame Branch Register */
++
+ /*
+ * Memory controller
+ */
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml
new file mode 100644
index 0000000000..eabcc41830
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l1-8.patch.eml
@@ -0,0 +1,1204 @@
+Path: news.gmane.org!not-for-mail
+From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+Newsgroups: gmane.comp.video.video4linux
+Subject: [RFC PATCH 1/8] soc_camera V4L2 driver for directly-connected
+ SoC-based cameras
+Date: Wed, 23 Jan 2008 18:41:18 +0100 (CET)
+Lines: 1132
+Approved: news@gmane.org
+Message-ID: <Pine.LNX.4.64.0801231654540.4932@axis700.grange>
+References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+NNTP-Posting-Host: lo.gmane.org
+Mime-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+X-Trace: ger.gmane.org 1201110130 28779 80.91.229.12 (23 Jan 2008 17:42:10 GMT)
+X-Complaints-To: usenet@ger.gmane.org
+NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:10 +0000 (UTC)
+To: video4linux-list@redhat.com
+Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:28 2008
+Return-path: <video4linux-list-bounces@redhat.com>
+Envelope-to: rh-video4linux-list@gmane.org
+Original-Received: from hormel.redhat.com ([209.132.177.30])
+ by lo.gmane.org with esmtp (Exim 4.50)
+ id 1JHjbz-0002oq-Us
+ for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:09 +0100
+Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
+ by hormel.redhat.com (Postfix) with ESMTP
+ id 7B895730A6; Wed, 23 Jan 2008 12:41:41 -0500 (EST)
+Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
+ [172.16.52.254])
+ by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
+ m0NHfdRS017082 for <video4linux-list@listman.util.phx.redhat.com>;
+ Wed, 23 Jan 2008 12:41:39 -0500
+Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
+ by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHfcrF027810
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:38 -0500
+Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
+ by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHf62e000540
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:06 -0500
+Original-Received: (qmail invoked by alias); 23 Jan 2008 17:40:59 -0000
+Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
+ [87.189.47.31]
+ by mail.gmx.net (mp048) with SMTP; 23 Jan 2008 18:40:59 +0100
+X-Authenticated: #20450766
+X-Provags-ID: V01U2FsdGVkX19NlXt5RoZNpQ4LqFuDqiXHZ3kHYCmxz52UMExHFC
+ yqWM+gBlp24/e9
+Original-Received: from lyakh (helo=localhost)
+ by axis700.grange with local-esmtp (Exim 4.63)
+ (envelope-from <g.liakhovetski@gmx.de>) id 1JHjbC-00029n-Kf
+ for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:18 +0100
+X-X-Sender: lyakh@axis700.grange
+In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+X-Y-GMX-Trusted: 0
+X-RedHat-Spam-Score: 0
+X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
+X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
+X-loop: video4linux-list@redhat.com
+X-BeenThere: video4linux-list@redhat.com
+X-Mailman-Version: 2.1.5
+Precedence: junk
+List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
+List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
+List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
+List-Post: <mailto:video4linux-list@redhat.com>
+List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
+List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=subscribe>
+Original-Sender: video4linux-list-bounces@redhat.com
+Errors-To: video4linux-list-bounces@redhat.com
+Xref: news.gmane.org gmane.comp.video.video4linux:36470
+Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36470>
+
+This driver provides an interface between platform-specific camera
+busses and camera devices. It should be used if the camera is connected
+not over a "proper" bus like PCI or USB, but over a special bus, like,
+for example, the Quick Capture interface on PXA270 SoCs. Later it should
+also be used for i.MX31 SoCs from Freescale. It can handle multiple
+cameras and / or multiple busses, which can be used, e.g., in
+stereo-vision applications.
+
+Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+---
+ drivers/media/video/Kconfig | 8 +
+ drivers/media/video/Makefile | 2 +
+ drivers/media/video/soc_camera.c | 928 ++++++++++++++++++++++++++++++++++++++
+ include/media/soc_camera.h | 138 ++++++
+ 4 files changed, 1076 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/video/soc_camera.c
+ create mode 100644 include/media/soc_camera.h
+
+diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
+index e204e7b..be54183 100644
+--- a/drivers/media/video/Kconfig
++++ b/drivers/media/video/Kconfig
+@@ -795,4 +795,12 @@ config USB_ZR364XX
+
+ endif # V4L_USB_DRIVERS
+
++config SOC_CAMERA
++ tristate "SoC camera support"
++ depends on VIDEO_V4L2
++ help
++ SoC Camera is a common API to several cameras, not connecting
++ over a bus like PCI or USB. For example some i2c camera hanging
++ directly on the data bus of an SoC.
++
+ endif # VIDEO_CAPTURE_DRIVERS
+diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
+index 10b4d44..97a9135 100644
+--- a/drivers/media/video/Makefile
++++ b/drivers/media/video/Makefile
+@@ -116,4 +116,6 @@ obj-$(CONFIG_USB_QUICKCAM_MESSENGER) += usbvideo/
+
+ obj-$(CONFIG_VIDEO_VIVI) += vivi.o
+
++obj-$(CONFIG_SOC_CAMERA) += soc_camera.o
++
+ EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
+diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c
+new file mode 100644
+index 0000000..5ec652e
+--- /dev/null
++++ b/drivers/media/video/soc_camera.c
+@@ -0,0 +1,928 @@
++/*
++ * camera image capture (abstract) bus driver
++ *
++ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
++ *
++ * This driver provides an interface between platform-specific camera
++ * busses and camera devices. It should be used if the camera is
++ * connected not over a "proper" bus like PCI or USB, but over a
++ * special bus, like, for example, the Quick Capture interface on PXA270
++ * SoCs. Later it should also be used for i.MX31 SoCs from Freescale.
++ * It can handle multiple cameras and / or multiple busses, which can
++ * be used, e.g., in stereo-vision applications.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/device.h>
++#include <linux/list.h>
++#include <linux/err.h>
++#include <linux/mutex.h>
++#include <linux/vmalloc.h>
++
++#include <media/v4l2-common.h>
++#include <media/v4l2-dev.h>
++#include <media/soc_camera.h>
++
++static LIST_HEAD(hosts);
++static LIST_HEAD(devices);
++static DEFINE_MUTEX(list_lock);
++static DEFINE_MUTEX(video_lock);
++
++const static struct soc_camera_data_format*
++format_by_fourcc(struct soc_camera_device *icd, unsigned int fourcc)
++{
++ unsigned int i;
++
++ for (i = 0; i < icd->ops->num_formats; i++)
++ if (icd->ops->formats[i].fourcc == fourcc)
++ return icd->ops->formats + i;
++ return NULL;
++}
++
++static int soc_camera_try_fmt_cap(struct file *file, void *priv,
++ struct v4l2_format *f)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++ enum v4l2_field field;
++ const struct soc_camera_data_format *fmt;
++ int ret;
++
++ WARN_ON(priv != file->private_data);
++
++ fmt = format_by_fourcc(icd, f->fmt.pix.pixelformat);
++ if (!fmt) {
++ pr_debug("%s: invalid format 0x%08x\n", __FUNCTION__,
++ f->fmt.pix.pixelformat);
++ return -EINVAL;
++ }
++
++ pr_debug("%s: fmt: 0x%08x\n", __FUNCTION__, fmt->fourcc);
++
++ field = f->fmt.pix.field;
++
++ if (field == V4L2_FIELD_ANY) {
++ field = V4L2_FIELD_NONE;
++ } else if (V4L2_FIELD_NONE != field) {
++ printk("Field type invalid.\n");
++ return -EINVAL;
++ }
++
++ /* limit to host capabilities */
++ ret = ici->try_fmt_cap(ici, f);
++
++ /* limit to sensor capabilities */
++ if (!ret)
++ ret = icd->ops->try_fmt_cap(icd, f);
++
++ /* calculate missing fields */
++ f->fmt.pix.field = field;
++ f->fmt.pix.bytesperline =
++ (f->fmt.pix.width * fmt->depth) >> 3;
++ f->fmt.pix.sizeimage =
++ f->fmt.pix.height * f->fmt.pix.bytesperline;
++
++ return ret;
++}
++
++static int soc_camera_enum_input(struct file *file, void *priv,
++ struct v4l2_input *inp)
++{
++ if (inp->index != 0)
++ return -EINVAL;
++
++ inp->type = V4L2_INPUT_TYPE_CAMERA;
++ inp->std = V4L2_STD_UNKNOWN;
++ strcpy(inp->name, "Camera");
++
++ return 0;
++}
++
++static int soc_camera_g_input(struct file *file, void *priv, unsigned int *i)
++{
++ *i = 0;
++
++ return 0;
++}
++
++static int soc_camera_s_input(struct file *file, void *priv, unsigned int i)
++{
++ if (i > 0)
++ return -EINVAL;
++
++ return 0;
++}
++
++static int soc_camera_s_std(struct file *file, void *priv, v4l2_std_id *a)
++{
++ return 0;
++}
++
++static int soc_camera_reqbufs(struct file *file, void *priv, struct v4l2_requestbuffers *p)
++{
++ int ret;
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++
++ WARN_ON(priv != file->private_data);
++
++ pr_debug("%s: %d\n", __FUNCTION__, p->memory);
++
++ ret = videobuf_reqbufs(&icf->vb_vidq, p);
++ if (ret < 0)
++ return ret;
++
++ return ici->reqbufs(icf, p);
++
++ return ret;
++}
++
++static int soc_camera_querybuf(struct file *file, void *priv, struct v4l2_buffer *p)
++{
++ struct soc_camera_file *icf = file->private_data;
++
++ WARN_ON(priv != file->private_data);
++
++ return videobuf_querybuf(&icf->vb_vidq, p);
++}
++
++static int soc_camera_qbuf(struct file *file, void *priv, struct v4l2_buffer *p)
++{
++ struct soc_camera_file *icf = file->private_data;
++
++ WARN_ON(priv != file->private_data);
++
++ return videobuf_qbuf(&icf->vb_vidq, p);
++}
++
++static int soc_camera_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
++{
++ struct soc_camera_file *icf = file->private_data;
++
++ WARN_ON(priv != file->private_data);
++
++ return videobuf_dqbuf(&icf->vb_vidq, p, file->f_flags & O_NONBLOCK);
++}
++
++static int soc_camera_open(struct inode *inode, struct file *file)
++{
++ struct soc_camera_host *ici;
++ struct soc_camera_device *icd;
++ struct video_device *vdev;
++ struct soc_camera_file *icf;
++ int ret;
++
++ mutex_lock(&video_lock);
++ list_for_each_entry(icd, &devices, list) {
++ if (icd->vdev && icd->vdev->minor == iminor(inode))
++ break;
++ }
++ mutex_unlock(&video_lock);
++
++ if (&icd->list == &devices)
++ return -ENODEV;
++
++ icf = vmalloc(sizeof(*icf));
++ if (!icf)
++ return -ENOMEM;
++
++ icf->icd = icd;
++
++ if (!try_module_get(icd->ops->owner)) {
++ printk(KERN_INFO "Couldn't lock sensor driver.\n");
++ ret = -EINVAL;
++ goto emgd;
++ }
++
++ ici = to_soc_camera_host(icd->dev.parent);
++
++ if (!try_module_get(ici->owner)) {
++ printk(KERN_INFO "Couldn't lock capture bus driver.\n");
++ ret = -EINVAL;
++ goto emgi;
++ }
++
++ vdev = icd->vdev;
++
++ file->private_data = icf;
++ dev_dbg(vdev->dev, "camera device open\n");
++
++ vdev = icd->vdev;
++
++ videobuf_queue_init(&icf->vb_vidq, ici->vbq_ops,
++ icd, NULL,
++ V4L2_BUF_TYPE_VIDEO_CAPTURE,
++ V4L2_FIELD_NONE,
++ ici->msize, icd);
++
++ return 0;
++
++emgi:
++ module_put(icd->ops->owner);
++emgd:
++ vfree(icf);
++ return ret;
++}
++
++static int soc_camera_close(struct inode *inode, struct file *file)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
++ struct video_device *vdev = icd->vdev;
++
++ module_put(icd->ops->owner);
++ module_put(ici->owner);
++ vfree(file->private_data);
++
++ dev_dbg(vdev->dev, "camera device close\n");
++
++ return 0;
++}
++
++static int soc_camera_read(struct file *file, char __user *buf,
++ size_t count, loff_t *ppos)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++ struct video_device *vdev = icd->vdev;
++ int err = -EINVAL;
++
++ dev_err(vdev->dev, "camera device read not implemented\n");
++
++ return err;
++}
++
++static int soc_camera_mmap(struct file *file, struct vm_area_struct *vma)
++{
++ struct soc_camera_file *icf = file->private_data;
++ int err;
++
++ pr_debug("mmap called, vma=0x%08lx\n",(unsigned long)vma);
++
++ err = videobuf_mmap_mapper(&icf->vb_vidq, vma);
++
++ pr_debug ("vma start=0x%08lx, size=%ld, ret=%d\n",
++ (unsigned long)vma->vm_start,
++ (unsigned long)vma->vm_end-(unsigned long)vma->vm_start,
++ err);
++
++ return err;
++}
++
++static unsigned int soc_camera_poll(struct file *file, poll_table *pt)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++
++ if (list_empty(&icf->vb_vidq.stream)) {
++ printk("---------- urgs\n");
++ return POLLERR;
++ }
++
++ return ici->poll(file, pt);
++}
++
++
++static struct file_operations soc_camera_fops = {
++ .owner = THIS_MODULE,
++ .open = soc_camera_open,
++ .release = soc_camera_close,
++ .ioctl = video_ioctl2,
++ .read = soc_camera_read,
++ .mmap = soc_camera_mmap,
++ .poll = soc_camera_poll,
++ .llseek = no_llseek,
++};
++
++
++static int soc_camera_s_fmt_cap(struct file *file, void *priv,
++ struct v4l2_format *f)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++ int ret;
++ struct v4l2_rect rect;
++ const static struct soc_camera_data_format *data_fmt;
++
++ WARN_ON(priv != file->private_data);
++
++ data_fmt = format_by_fourcc(icd, f->fmt.pix.pixelformat);
++ if (!data_fmt)
++ return -EINVAL;
++
++ /* cached_datawidth may be further adjusted by the ici */
++ icd->cached_datawidth = data_fmt->depth;
++
++ ret = soc_camera_try_fmt_cap(file, icf, f);
++ if (ret < 0)
++ return ret;
++
++ rect.left = icd->x_current;
++ rect.top = icd->y_current;
++ rect.width = f->fmt.pix.width;
++ rect.height = f->fmt.pix.height;
++ ret = ici->set_capture_format(icd, f->fmt.pix.pixelformat, &rect);
++
++ if (!ret) {
++ icd->current_fmt = data_fmt;
++ icd->width = rect.width;
++ icd->height = rect.height;
++ icf->vb_vidq.field = f->fmt.pix.field;
++ if (V4L2_BUF_TYPE_VIDEO_CAPTURE != f->type)
++ printk("Attention! Wrong buf-type %d\n", f->type);
++
++ dev_dbg(&icd->dev, "set width: %d height: %d\n",
++ icd->width, icd->height);
++ }
++
++ return ret;
++}
++
++static int soc_camera_enum_fmt_cap(struct file *file, void *priv,
++ struct v4l2_fmtdesc *f)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++ const struct soc_camera_data_format *format;
++
++ WARN_ON(priv != file->private_data);
++
++ if (f->index >= icd->ops->num_formats)
++ return -EINVAL;
++
++ format = &icd->ops->formats[f->index];
++
++ strlcpy(f->description, format->name, sizeof(f->description));
++ f->pixelformat = format->fourcc;
++ return 0;
++}
++
++static int soc_camera_g_fmt_cap(struct file *file, void *priv,
++ struct v4l2_format *f)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++
++ WARN_ON(priv != file->private_data);
++
++ f->fmt.pix.width = icd->width;
++ f->fmt.pix.height = icd->height;
++ f->fmt.pix.field = icf->vb_vidq.field;
++ f->fmt.pix.pixelformat = icd->current_fmt->fourcc;
++ f->fmt.pix.bytesperline =
++ (f->fmt.pix.width * icd->current_fmt->depth) >> 3;
++ f->fmt.pix.sizeimage =
++ f->fmt.pix.height * f->fmt.pix.bytesperline;
++ printk("%s: current_fmt->fourcc: 0x%08x\n",
++ __FUNCTION__, icd->current_fmt->fourcc);
++ return 0;
++}
++
++static int soc_camera_querycap(struct file *file, void *priv,
++ struct v4l2_capability *cap)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++
++ WARN_ON(priv != file->private_data);
++
++ strlcpy(cap->driver, ici->drv_name, sizeof(cap->driver));
++ return ici->querycap(ici, cap);
++}
++
++static int soc_camera_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++// struct vivi_dev *dev = fh->dev;
++
++ WARN_ON(priv != file->private_data);
++
++ pr_debug("%s\n",__FUNCTION__);
++
++ if (i != V4L2_BUF_TYPE_VIDEO_CAPTURE)
++ return -EINVAL;
++
++// if (!res_get(dev,fh))
++// return -EBUSY;
++// CIFR = CIFR_RESET_F | CIFR_FEN0;
++
++ icd->ops->start_capture(icd);
++
++ /* This calls buf_queue from host driver's videobuf_queue_ops */
++ return videobuf_streamon(&icf->vb_vidq);
++}
++
++static int soc_camera_streamoff(struct file *file, void *priv,
++ enum v4l2_buf_type i)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++// struct vivi_dev *dev = fh->dev;
++
++ WARN_ON(priv != file->private_data);
++
++ pr_debug("%s\n",__FUNCTION__);
++
++ if (i != V4L2_BUF_TYPE_VIDEO_CAPTURE)
++ return -EINVAL;
++
++// CICR0 |= CICR0_DIS;
++// while(CICR0 & CICR0_ENB);
++
++ /* This calls buf_release from host driver's videobuf_queue_ops for all
++ * remaining buffers. When the last buffer is freed, stop capture */
++ videobuf_streamoff(&icf->vb_vidq);
++
++ icd->ops->stop_capture(icd);
++
++// res_free(dev,fh);
++
++ return 0;
++}
++
++static int soc_camera_queryctrl(struct file *file, void *priv,
++ struct v4l2_queryctrl *qc)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++ int i;
++
++ WARN_ON(priv != file->private_data);
++
++ for (i = 0; i < icd->ops->num_controls; i++)
++ if (qc->id && qc->id == icd->ops->controls[i].id) {
++ memcpy(qc, &(icd->ops->controls[i]),
++ sizeof(*qc));
++ return 0;
++ }
++
++ return -EINVAL;
++}
++
++static int soc_camera_g_ctrl(struct file *file, void *priv,
++ struct v4l2_control *ctrl)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++
++ WARN_ON(priv != file->private_data);
++
++ switch (ctrl->id) {
++ case V4L2_CID_GAIN:
++ if (icd->gain == (unsigned short)~0)
++ return -EINVAL;
++ ctrl->value = icd->gain;
++ return 0;
++ case V4L2_CID_EXPOSURE:
++ if (icd->exposure == (unsigned short)~0)
++ return -EINVAL;
++ ctrl->value = icd->exposure;
++ return 0;
++ }
++
++ if (icd->ops->get_control)
++ return icd->ops->get_control(icd, ctrl);
++ return -EINVAL;
++}
++
++static int soc_camera_s_ctrl(struct file *file, void *priv,
++ struct v4l2_control *ctrl)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++
++ WARN_ON(priv != file->private_data);
++
++ if (icd->ops->set_control)
++ return icd->ops->set_control(icd, ctrl);
++ return -EINVAL;
++}
++
++static int soc_camera_cropcap(struct file *file, void *fh,
++ struct v4l2_cropcap *a)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++
++ a->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ a->bounds.left = icd->x_min;
++ a->bounds.top = icd->y_min;
++ a->bounds.width = icd->width_max;
++ a->bounds.height = icd->height_max;
++ a->defrect.left = icd->x_min;
++ a->defrect.top = icd->y_min;
++ a->defrect.width = 640;
++ a->defrect.height = 480;
++ a->pixelaspect.numerator = 1;
++ a->pixelaspect.denominator = 1;
++
++ return 0;
++}
++
++static int soc_camera_g_crop(struct file *file, void *fh,
++ struct v4l2_crop *a)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++
++ a->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ a->c.left = icd->x_current;
++ a->c.top = icd->y_current;
++ a->c.width = icd->width;
++ a->c.height = icd->height;
++
++ return 0;
++}
++
++static int soc_camera_s_crop(struct file *file, void *fh,
++ struct v4l2_crop *a)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct soc_camera_device *icd = icf->icd;
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++ int ret;
++
++ if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
++ return -EINVAL;
++
++ ret = ici->set_capture_format(icd, 0, &a->c);
++ if (!ret) {
++ icd->width = a->c.width;
++ icd->height = a->c.height;
++ icd->x_current = a->c.left;
++ icd->y_current = a->c.top;
++ }
++
++ return ret;
++}
++
++static int device_register_link(struct soc_camera_device *icd)
++{
++ int ret = device_register(&icd->dev);
++ if (!ret && icd->control)
++ if (sysfs_create_link(&icd->dev.kobj, &icd->control->kobj, "control"))
++ dev_warn(&icd->dev,
++ "Couldn't create a symlink to the control device\n");
++ return ret;
++}
++
++/* The two functions below return: 0 if no match found or a match found and
++ * device_register() successful, error code otherwise */
++static int scan_add_host(struct soc_camera_host *ici)
++{
++ struct soc_camera_device *icd;
++ int ret = 0;
++
++ mutex_lock(&list_lock);
++
++ list_for_each_entry(icd, &devices, list) {
++ if (icd->iface == ici->nr) {
++ ret = 1;
++ icd->dev.parent = &ici->dev;
++ break;
++ }
++ }
++
++ mutex_unlock(&list_lock);
++
++ if (ret)
++ ret = device_register_link(icd);
++
++ return ret;
++}
++
++static int scan_add_device(struct soc_camera_device *icd)
++{
++ struct soc_camera_host *ici;
++ int ret = 0;
++
++ mutex_lock(&list_lock);
++
++ list_add_tail(&icd->list, &devices);
++
++ /* Watch out for class_for_each_device / class_find_device API by
++ * Dave Young <hidave.darkstar@gmail.com> */
++ list_for_each_entry(ici, &hosts, list) {
++ if (icd->iface == ici->nr) {
++ ret = 1;
++ icd->dev.parent = &ici->dev;
++ break;
++ }
++ }
++
++ mutex_unlock(&list_lock);
++
++ if (ret)
++ ret = device_register_link(icd);
++
++ return ret;
++}
++
++static int soc_camera_probe(struct device *dev)
++{
++ struct soc_camera_device *icd = to_soc_camera_dev(dev);
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++ int ret;
++
++ if (!icd->probe)
++ return -ENODEV;
++
++ if (!(ret = ici->add(icd)))
++ ret = icd->probe(icd);
++
++ if (!ret) {
++ const struct v4l2_queryctrl *qctrl =
++ soc_camera_find_qctrl(icd->ops, V4L2_CID_GAIN);
++ icd->gain = qctrl ? qctrl->default_value : (unsigned short)~0;
++ qctrl = soc_camera_find_qctrl(icd->ops, V4L2_CID_EXPOSURE);
++ icd->exposure = qctrl ? qctrl->default_value : (unsigned short)~0;
++
++ }
++
++ return ret;
++}
++
++/* This is called on device_unregister, which only means we have to disconnect
++ * from the host, but not remove ourselves from the device list */
++static int soc_camera_remove(struct device *dev)
++{
++ struct soc_camera_device *icd = to_soc_camera_dev(dev);
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++
++ if (icd->remove)
++ icd->remove(icd);
++
++ ici->remove(icd);
++
++ return 0;
++}
++
++static struct bus_type soc_camera_bus_type = {
++ .name = "soc-camera",
++ .probe = soc_camera_probe,
++ .remove = soc_camera_remove,
++};
++
++static struct device_driver ic_drv = {
++ .name = "camera",
++ .bus = &soc_camera_bus_type,
++ .owner = THIS_MODULE,
++};
++
++/*
++ * Image capture host - this is a host device, not a bus device, so,
++ * no bus reference, no probing.
++ */
++static struct class soc_camera_host_class = {
++ .owner = THIS_MODULE,
++ .name = "camera_host",
++};
++
++static void dummy_release(struct device *dev)
++{
++}
++
++int soc_camera_host_register(struct soc_camera_host *ici, struct module *owner)
++{
++ int ret;
++
++ if (!ici->vbq_ops || !ici->add || !ici->remove || !owner)
++ return -EINVAL;
++
++ /* Number might be equal to the platform device ID,
++ * hopefully, device core will fail nicely if we try
++ * to register a second device with the same bus_id */
++#warning "verify whether device_register will fail, or scan the list yourself for duplicate IDs"
++ sprintf(ici->dev.bus_id, "camera_host%d", ici->nr);
++ ici->dev.class = &soc_camera_host_class;
++
++ mutex_lock(&list_lock);
++ list_add_tail(&ici->list, &hosts);
++ mutex_unlock(&list_lock);
++
++ ici->owner = owner;
++ ici->dev.release = dummy_release;
++
++ ret = device_register(&ici->dev);
++
++ if (ret)
++ goto edevr;
++
++ return scan_add_host(ici);
++
++edevr:
++ mutex_lock(&list_lock);
++ list_del(&ici->list);
++ mutex_unlock(&list_lock);
++
++ return ret;
++}
++EXPORT_SYMBOL(soc_camera_host_register);
++
++/* Unregister all clients! */
++void soc_camera_host_unregister(struct soc_camera_host *ici)
++{
++ struct soc_camera_device *icd;
++
++ mutex_lock(&list_lock);
++
++ list_del(&ici->list);
++
++ list_for_each_entry(icd, &devices, list) {
++ printk("list: %p %p\n", icd->dev.parent, &ici->dev);
++ if (icd->dev.parent == &ici->dev) {
++ device_unregister(&icd->dev);
++ /* Not before device_unregister(), .remove
++ * needs parent to call ici->remove() */
++ icd->dev.parent = NULL;
++ }
++ }
++
++ mutex_unlock(&list_lock);
++
++ device_unregister(&ici->dev);
++}
++EXPORT_SYMBOL(soc_camera_host_unregister);
++
++/* Image capture device */
++int soc_camera_device_register(struct soc_camera_device *icd)
++{
++ struct soc_camera_device *ix;
++ int num = -1, i;
++
++ if (!icd)
++ return -EINVAL;
++
++ for (i = 0; i < 256 && num < 0; i++) {
++ num = i;
++ list_for_each_entry(ix, &devices, list) {
++ if (ix->iface == icd->iface && ix->devnum == i) {
++ num = -1;
++ break;
++ }
++ }
++ }
++
++ if (num < 0)
++ /* ok, we have 256 cameras on this host... man, stay reasonable... */
++ return -ENOMEM;
++
++ icd->devnum = num;
++ icd->dev.bus = &soc_camera_bus_type;
++// icd->dev.driver = &ic_drv;
++ snprintf(icd->dev.bus_id, sizeof(icd->dev.bus_id),
++ "%u-%u", icd->iface, icd->devnum);
++
++ icd->dev.release = dummy_release;
++
++ if (icd->ops->get_datawidth)
++ icd->cached_datawidth = icd->ops->get_datawidth(icd);
++
++ return scan_add_device(icd);
++}
++EXPORT_SYMBOL(soc_camera_device_register);
++
++void soc_camera_device_unregister(struct soc_camera_device *icd)
++{
++ mutex_lock(&list_lock);
++ list_del(&icd->list);
++
++ /* The bus->remove will be eventually called */
++ if (icd->dev.parent)
++ device_unregister(&icd->dev);
++ mutex_unlock(&list_lock);
++}
++EXPORT_SYMBOL(soc_camera_device_unregister);
++
++int soc_camera_video_start(struct soc_camera_device *icd)
++{
++ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
++ int err = -ENOMEM;
++ struct video_device *vdev;
++
++ if (!icd->dev.parent)
++ return -ENODEV;
++
++ if (!(vdev = video_device_alloc()))
++ goto evidallocd;
++ dev_dbg(&ici->dev, "%s: Allocated video_device %p\n", __FUNCTION__, vdev);
++
++ strlcpy(vdev->name, ici->drv_name, sizeof(vdev->name));
++ /* Maybe better &ici->dev */
++ vdev->dev = &icd->dev;
++ vdev->type = VID_TYPE_CAPTURE;
++ vdev->current_norm = V4L2_STD_UNKNOWN;
++ vdev->fops = &soc_camera_fops;
++ vdev->release = video_device_release;
++ vdev->minor = -1;
++ vdev->tvnorms = V4L2_STD_UNKNOWN,
++ vdev->vidioc_querycap = soc_camera_querycap;
++ vdev->vidioc_g_fmt_cap = soc_camera_g_fmt_cap;
++ vdev->vidioc_enum_fmt_cap = soc_camera_enum_fmt_cap;
++ vdev->vidioc_s_fmt_cap = soc_camera_s_fmt_cap;
++ vdev->vidioc_enum_input = soc_camera_enum_input;
++ vdev->vidioc_g_input = soc_camera_g_input;
++ vdev->vidioc_s_input = soc_camera_s_input;
++ vdev->vidioc_s_std = soc_camera_s_std;
++ vdev->vidioc_reqbufs = soc_camera_reqbufs;
++ vdev->vidioc_try_fmt_cap = soc_camera_try_fmt_cap;
++ vdev->vidioc_querybuf = soc_camera_querybuf;
++ vdev->vidioc_qbuf = soc_camera_qbuf;
++ vdev->vidioc_dqbuf = soc_camera_dqbuf;
++ vdev->vidioc_streamon = soc_camera_streamon;
++ vdev->vidioc_streamoff = soc_camera_streamoff;
++ vdev->vidioc_queryctrl = soc_camera_queryctrl;
++ vdev->vidioc_g_ctrl = soc_camera_g_ctrl;
++ vdev->vidioc_s_ctrl = soc_camera_s_ctrl;
++ vdev->vidioc_cropcap = soc_camera_cropcap;
++ vdev->vidioc_g_crop = soc_camera_g_crop;
++ vdev->vidioc_s_crop = soc_camera_s_crop;
++
++ icd->current_fmt = &icd->ops->formats[0];
++
++ err = video_register_device(vdev, VFL_TYPE_GRABBER, vdev->minor);
++ if (err < 0) {
++ dev_err(vdev->dev, "%s: video_register_device failed\n", __FUNCTION__);
++ goto evidregd;
++ }
++ icd->vdev = vdev;
++
++ return 0;
++
++evidregd:
++ video_device_release(vdev);
++evidallocd:
++ return err;
++}
++EXPORT_SYMBOL(soc_camera_video_start);
++
++void soc_camera_video_stop(struct soc_camera_device *icd)
++{
++ struct video_device *vdev = icd->vdev;
++
++ dev_dbg(&icd->dev, "%s\n", __FUNCTION__);
++
++ if (!icd->dev.parent || !vdev)
++ return;
++
++ mutex_lock(&video_lock);
++ video_unregister_device(vdev);
++ icd->vdev = NULL;
++ mutex_unlock(&video_lock);
++}
++EXPORT_SYMBOL(soc_camera_video_stop);
++
++static int __init soc_camera_init(void)
++{
++ int ret = bus_register(&soc_camera_bus_type);
++ if (ret)
++ return ret;
++ ret = driver_register(&ic_drv);
++ if (ret)
++ goto edrvr;
++ ret = class_register(&soc_camera_host_class);
++ if (ret)
++ goto eclr;
++
++ return 0;
++
++eclr:
++ driver_unregister(&ic_drv);
++edrvr:
++ bus_unregister(&soc_camera_bus_type);
++ return ret;
++}
++
++static void __exit soc_camera_exit(void)
++{
++ class_unregister(&soc_camera_host_class);
++ driver_unregister(&ic_drv);
++ bus_unregister(&soc_camera_bus_type);
++}
++
++module_init(soc_camera_init);
++module_exit(soc_camera_exit);
++
++MODULE_DESCRIPTION("Image capture bus driver");
++MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
++MODULE_LICENSE("GPL");
+diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h
+new file mode 100644
+index 0000000..f416959
+--- /dev/null
++++ b/include/media/soc_camera.h
+@@ -0,0 +1,138 @@
++/*
++ * camera image capture (abstract) bus driver header
++ *
++ * Copyright (C) 2006, Sascha Hauer, Pengutronix
++ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#ifndef SOC_CAMERA_H
++#define SOC_CAMERA_H
++
++#include <media/video-buf.h>
++#include <linux/videodev2.h>
++
++struct soc_camera_device {
++ struct list_head list;
++ struct device dev;
++ struct device *control;
++ unsigned short width; /* Current window */
++ unsigned short height; /* sizes */
++ unsigned short x_min; /* Camera capabilities */
++ unsigned short y_min;
++ unsigned short x_current; /* Current window location */
++ unsigned short y_current;
++ unsigned short width_min;
++ unsigned short width_max;
++ unsigned short height_min;
++ unsigned short height_max;
++ unsigned short y_skip_top; /* Lines to skip at the top */
++ unsigned short gain;
++ unsigned short exposure;
++ unsigned char iface; /* Host number */
++ unsigned char devnum; /* Device number per host */
++ unsigned char cached_datawidth; /* See comment in .c */
++ struct soc_camera_ops *ops;
++ struct video_device *vdev;
++ const struct soc_camera_data_format *current_fmt;
++ int (*probe)(struct soc_camera_device *icd);
++ void (*remove)(struct soc_camera_device *icd);
++ struct module *owner;
++};
++
++struct soc_camera_file {
++ struct soc_camera_device *icd;
++ struct videobuf_queue vb_vidq;
++};
++
++struct soc_camera_host {
++ struct list_head list;
++ struct device dev;
++ unsigned char nr; /* Host number */
++ size_t msize;
++ struct videobuf_queue_ops *vbq_ops;
++ struct module *owner;
++ void *priv;
++ char *drv_name;
++ int (*add)(struct soc_camera_device *);
++ void (*remove)(struct soc_camera_device *);
++ int (*set_capture_format)(struct soc_camera_device *, __u32,
++ struct v4l2_rect *);
++ int (*try_fmt_cap)(struct soc_camera_host *, struct v4l2_format *);
++ int (*reqbufs)(struct soc_camera_file *, struct v4l2_requestbuffers *);
++ int (*querycap)(struct soc_camera_host *, struct v4l2_capability *);
++ unsigned int (*poll)(struct file *, poll_table *);
++};
++
++struct soc_camera_link {
++ int bus_id;
++ struct i2c_client **extender;
++};
++
++static inline struct soc_camera_device *to_soc_camera_dev(struct device *dev)
++{
++ return container_of(dev, struct soc_camera_device, dev);
++}
++
++static inline struct soc_camera_host *to_soc_camera_host(struct device *dev)
++{
++ return container_of(dev, struct soc_camera_host, dev);
++}
++
++extern int soc_camera_host_register(struct soc_camera_host *ici, struct module *owner);
++extern void soc_camera_host_unregister(struct soc_camera_host *ici);
++extern int soc_camera_device_register(struct soc_camera_device *icd);
++extern void soc_camera_device_unregister(struct soc_camera_device *icd);
++
++extern int soc_camera_video_start(struct soc_camera_device *icd);
++extern void soc_camera_video_stop(struct soc_camera_device *icd);
++
++struct soc_camera_data_format {
++ char *name;
++ unsigned int depth;
++ __u32 fourcc;
++ enum v4l2_colorspace colorspace;
++};
++
++struct soc_camera_ops {
++ struct module *owner;
++ int (*init)(struct soc_camera_device *);
++ int (*release)(struct soc_camera_device *);
++ int (*start_capture)(struct soc_camera_device *);
++ int (*stop_capture)(struct soc_camera_device *);
++ int (*set_capture_format)(struct soc_camera_device *, __u32,
++ struct v4l2_rect *, unsigned int);
++ int (*try_fmt_cap)(struct soc_camera_device *, struct v4l2_format *);
++ const struct soc_camera_data_format *formats;
++ int num_formats;
++ int (*get_control)(struct soc_camera_device *, struct v4l2_control *);
++ int (*set_control)(struct soc_camera_device *, struct v4l2_control *);
++ const struct v4l2_queryctrl *controls;
++ int num_controls;
++ unsigned int(*get_datawidth)(struct soc_camera_device *icd);
++};
++
++static inline struct v4l2_queryctrl const *soc_camera_find_qctrl(
++ struct soc_camera_ops *ops, int id)
++{
++ int i;
++
++ for (i = 0; i < ops->num_controls; i++)
++ if (ops->controls[i].id == id)
++ return &ops->controls[i];
++
++ return NULL;
++}
++
++#define IS_MASTER (1<<0)
++#define IS_HSYNC_ACTIVE_HIGH (1<<1)
++#define IS_VSYNC_ACTIVE_HIGH (1<<2)
++#define IS_DATAWIDTH_8 (1<<3)
++#define IS_DATAWIDTH_9 (1<<4)
++#define IS_DATAWIDTH_10 (1<<5)
++#define IS_PCLK_SAMPLE_RISING (1<<6)
++
++#endif
+--
+1.5.3.4
+
+--
+video4linux-list mailing list
+Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
+https://www.redhat.com/mailman/listinfo/video4linux-list
+
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml
new file mode 100644
index 0000000000..a681d2ad2e
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l2-8.patch.eml
@@ -0,0 +1,1330 @@
+Path: news.gmane.org!not-for-mail
+From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+Newsgroups: gmane.comp.video.video4linux
+Subject: [RFC PATCH 2/8] V4L2 soc_camera driver for PXA27x processors
+Date: Wed, 23 Jan 2008 18:41:30 +0100 (CET)
+Lines: 1259
+Approved: news@gmane.org
+Message-ID: <Pine.LNX.4.64.0801231816430.4932@axis700.grange>
+References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+NNTP-Posting-Host: lo.gmane.org
+Mime-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+X-Trace: ger.gmane.org 1201110136 28805 80.91.229.12 (23 Jan 2008 17:42:16 GMT)
+X-Complaints-To: usenet@ger.gmane.org
+NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:16 +0000 (UTC)
+To: video4linux-list@redhat.com
+Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:35 2008
+Return-path: <video4linux-list-bounces@redhat.com>
+Envelope-to: rh-video4linux-list@gmane.org
+Original-Received: from hormel.redhat.com ([209.132.177.30])
+ by lo.gmane.org with esmtp (Exim 4.50)
+ id 1JHjc5-0002rt-JS
+ for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:14 +0100
+Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
+ by hormel.redhat.com (Postfix) with ESMTP
+ id 2A84F730D3; Wed, 23 Jan 2008 12:41:44 -0500 (EST)
+Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
+ [172.16.52.254])
+ by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
+ m0NHffgW017091 for <video4linux-list@listman.util.phx.redhat.com>;
+ Wed, 23 Jan 2008 12:41:41 -0500
+Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
+ by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHffAN027831
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:41 -0500
+Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
+ by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfHEp000673
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:18 -0500
+Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:10 -0000
+Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
+ [87.189.47.31]
+ by mail.gmx.net (mp032) with SMTP; 23 Jan 2008 18:41:10 +0100
+X-Authenticated: #20450766
+X-Provags-ID: V01U2FsdGVkX1+0is8xDaK0Koc8XTQH0vhXxt8dgUbjrW8SVR/i+1
+ dGRci20BqQXyog
+Original-Received: from lyakh (helo=localhost)
+ by axis700.grange with local-esmtp (Exim 4.63)
+ (envelope-from <g.liakhovetski@gmx.de>) id 1JHjbO-00029q-7k
+ for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:30 +0100
+X-X-Sender: lyakh@axis700.grange
+In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+X-Y-GMX-Trusted: 0
+X-RedHat-Spam-Score: 0
+X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
+X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
+X-loop: video4linux-list@redhat.com
+X-BeenThere: video4linux-list@redhat.com
+X-Mailman-Version: 2.1.5
+Precedence: junk
+List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
+List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
+List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
+List-Post: <mailto:video4linux-list@redhat.com>
+List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
+List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=subscribe>
+Original-Sender: video4linux-list-bounces@redhat.com
+Errors-To: video4linux-list-bounces@redhat.com
+Xref: news.gmane.org gmane.comp.video.video4linux:36472
+Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36472>
+
+This patch adds a driver for the Quick Capture Interface on the PXA270. It
+is based on the original driver from Intel, but has been re-worked
+multiple times since then, this time with the V4L2 API support.
+
+Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+---
+ drivers/media/video/Kconfig | 8 +
+ drivers/media/video/Makefile | 1 +
+ drivers/media/video/pxa_camera.c | 895 +++++++++++++++++++++++++++++++++++
+ include/asm-arm/arch-pxa/pxa-regs.h | 94 ++++
+ include/asm-arm/arch-pxa/pxa_cif.h | 48 ++
+ 5 files changed, 1046 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/video/pxa_camera.c
+ create mode 100644 include/asm-arm/arch-pxa/pxa_cif.h
+
+diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
+index be54183..dc0dfec 100644
+--- a/drivers/media/video/Kconfig
++++ b/drivers/media/video/Kconfig
+@@ -803,4 +803,12 @@ config SOC_CAMERA
+ over a bus like PCI or USB. For example some i2c camera hanging
+ directly on the data bus of an SoC.
+
++config VIDEO_PXA27X
++ tristate "PXA27x Quick Capture Interface driver"
++ depends on VIDEO_DEV && PXA27x
++ select VIDEO_BUF
++ select SOC_CAMERA
++ ---help---
++ This is a v4l2 driver for the PXA27x Quick Capture Interface
++
+ endif # VIDEO_CAPTURE_DRIVERS
+diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
+index 97a9135..81b7cd6 100644
+--- a/drivers/media/video/Makefile
++++ b/drivers/media/video/Makefile
+@@ -116,6 +116,7 @@ obj-$(CONFIG_USB_QUICKCAM_MESSENGER) += usbvideo/
+
+ obj-$(CONFIG_VIDEO_VIVI) += vivi.o
+
++obj-$(CONFIG_VIDEO_PXA27X) += pxa_camera.o
+ obj-$(CONFIG_SOC_CAMERA) += soc_camera.o
+
+ EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
+diff --git a/drivers/media/video/pxa_camera.c b/drivers/media/video/pxa_camera.c
+new file mode 100644
+index 0000000..78927fb
+--- /dev/null
++++ b/drivers/media/video/pxa_camera.c
+@@ -0,0 +1,895 @@
++/*
++ * V4L2 Driver for PXA camera host
++ *
++ * Copyright (C) 2006, Sascha Hauer, Pengutronix
++ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ */
++
++#include <asm/io.h>
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/delay.h>
++#include <linux/dma-mapping.h>
++#include <linux/errno.h>
++#include <linux/fs.h>
++#include <linux/interrupt.h>
++#include <linux/kernel.h>
++#include <linux/mm.h>
++#include <linux/moduleparam.h>
++#include <linux/time.h>
++#include <linux/version.h>
++#include <linux/device.h>
++#include <linux/platform_device.h>
++#include <linux/mutex.h>
++
++#include <media/v4l2-common.h>
++#include <media/v4l2-dev.h>
++#include <media/soc_camera.h>
++
++#include <linux/videodev.h>
++#include <linux/video_decoder.h>
++
++#include <asm/dma.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxa_cif.h>
++
++#define PXA_CAM_VERSION_CODE KERNEL_VERSION(0, 0, 5)
++#define PXA_CAM_DRV_NAME "pxa2xx-camera"
++
++#define CICR0_IRQ_MASK (CICR0_TOM | CICR0_RDAVM | CICR0_FEM | CICR0_EOLM | \
++ CICR0_PERRM | CICR0_QDM | CICR0_CDM | CICR0_SOFM | \
++ CICR0_EOFM | CICR0_FOM)
++
++/*
++ * Structures
++ */
++
++/* buffer for one video frame */
++struct pxa_buffer {
++ /* common v4l buffer stuff -- must be first */
++ struct videobuf_buffer vb;
++
++ const struct soc_camera_data_format *fmt;
++
++ /* our descriptor list needed for the PXA DMA engine */
++ dma_addr_t sg_dma;
++ struct pxa_dma_desc *sg_cpu;
++ size_t sg_size;
++ int inwork;
++};
++
++struct pxa_framebuffer_queue {
++ dma_addr_t sg_last_dma;
++ struct pxa_dma_desc *sg_last_cpu;
++};
++
++struct pxa_camera_dev {
++ struct device *dev;
++
++ unsigned int irq;
++ void __iomem *base;
++ unsigned int dma_chan_y;
++
++ enum v4l2_buf_type type;
++
++ struct pxacamera_platform_data *pdata;
++ struct resource *res;
++ unsigned long platform_flags;
++ unsigned long platform_mclk_10khz;
++
++ struct list_head capture;
++
++ spinlock_t lock;
++
++ int dma_running;
++
++ struct pxa_buffer *active;
++};
++
++static const char *pxa_cam_driver_description = "PXA_Camera";
++
++static unsigned int vid_limit = 16; /* Video memory limit, in Mb */
++
++/*
++ * Videobuf operations
++ */
++static int
++pxa_videobuf_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)
++{
++ struct soc_camera_device *icd = vq->priv_data;
++
++ pr_debug("%s: count=%d, size=%d\n", __FUNCTION__, *count, *size);
++
++ *size = icd->width * icd->height * ((icd->current_fmt->depth + 7) >> 3);
++
++ if (0 == *count)
++ *count = 32;
++ while (*size * *count > vid_limit * 1024 * 1024)
++ (*count)--;
++
++ return 0;
++}
++
++static void free_buffer(struct videobuf_queue *vq, struct pxa_buffer *buf)
++{
++ struct soc_camera_device *icd = vq->priv_data;
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++ struct pxa_camera_dev *pcdev = ici->priv;
++
++ BUG_ON(in_interrupt());
++
++ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__, &buf->vb, buf->vb.baddr, buf->vb.bsize);
++
++ /* This waits until this buffer is out of danger, i.e., until it is no longer
++ * in STATE_QUEUED or STATE_ACTIVE */
++ videobuf_waiton(&buf->vb, 0, 0);
++ videobuf_dma_unmap(vq, &buf->vb.dma);
++ videobuf_dma_free(&buf->vb.dma);
++
++ if (buf->sg_cpu)
++ dma_free_coherent(pcdev->dev, buf->sg_size, buf->sg_cpu, buf->sg_dma);
++ buf->sg_cpu = NULL;
++
++ buf->vb.state = STATE_NEEDS_INIT;
++}
++
++static int
++pxa_videobuf_prepare(struct videobuf_queue *vq, struct videobuf_buffer *vb,
++ enum v4l2_field field)
++{
++ struct soc_camera_device *icd = vq->priv_data;
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++ struct pxa_camera_dev *pcdev = ici->priv;
++ struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb);
++// unsigned long flags;
++ int i, ret;
++
++ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__, vb, vb->baddr, vb->bsize);
++
++ /* Added list head initialization on alloc */
++ WARN_ON(!list_empty(&vb->queue));
++
++#ifdef DEBUG
++ /* This can be useful if you want to see if we actually fill
++ * the buffer with something */
++ memset((void *)vb->baddr, 0xaa, vb->bsize);
++#endif
++
++ BUG_ON(NULL == icd->current_fmt);
++
++ /* I think, in buf_prepare you only have to protect global data,
++ * the actual buffer is yours */
++// spin_lock_irqsave(&pcdev->lock, flags);
++ buf->inwork = 1;
++
++ if (buf->fmt != icd->current_fmt ||
++ vb->width != icd->width ||
++ vb->height != icd->height ||
++ vb->field != field) {
++ buf->fmt = icd->current_fmt;
++ vb->width = icd->width;
++ vb->height = icd->height;
++ vb->field = field;
++ vb->state = STATE_NEEDS_INIT;
++ }
++
++ vb->size = vb->width * vb->height * ((buf->fmt->depth + 7) >> 3);
++ if (0 != vb->baddr && vb->bsize < vb->size) {
++ ret = -EINVAL;
++ goto out;
++ }
++
++ if (vb->state == STATE_NEEDS_INIT) {
++ unsigned int size = vb->size;
++
++ if (0 != (ret = videobuf_iolock(vq, vb, NULL)))
++ goto fail;
++
++ if (buf->sg_cpu)
++ dma_free_coherent(pcdev->dev, buf->sg_size, buf->sg_cpu, buf->sg_dma);
++
++ buf->sg_size = (vb->dma.sglen + 1) * sizeof(struct pxa_dma_desc);
++ buf->sg_cpu = dma_alloc_coherent(pcdev->dev,
++ buf->sg_size,
++ &buf->sg_dma, GFP_KERNEL);
++ if (!buf->sg_cpu) {
++ ret = -ENOMEM;
++ goto fail;
++ }
++
++ pr_debug("%s nents=%d size: %d sg=0x%p\n", __FUNCTION__, vb->dma.sglen, size, vb->dma.sglist);
++ for (i = 0; i < vb->dma.sglen; i++ ) {
++ struct scatterlist *sg = vb->dma.sglist;
++ unsigned int dma_len = sg_dma_len(&sg[i]), xfer_len;
++
++ BUG_ON(!sg[i].page);
++
++ sg[i].dma_address = page_to_phys(sg[i].page) + sg[i].offset;
++
++ buf->sg_cpu[i].dsadr = pcdev->res->start + 0x28; /* CIBR0 */
++ buf->sg_cpu[i].dtadr = sg_dma_address(&sg[i]);
++ /* PXA27x Developer's Manual 27.4.4.1: round up to 8 bytes */
++// xfer_len = (min(dma_len, size) + 7) & ~7;
++ xfer_len = min(dma_len, size);
++ if (xfer_len & 7)
++ dev_err(&icd->dev, "Unaligned buffer: dma_len %u, size %u\n",
++ dma_len, size);
++ buf->sg_cpu[i].dcmd = DCMD_FLOWSRC | DCMD_BURST8 | DCMD_INCTRGADDR |
++ xfer_len;
++ size -= dma_len;
++ buf->sg_cpu[i].ddadr = buf->sg_dma + (i + 1) *
++ sizeof(struct pxa_dma_desc);
++ }
++ buf->sg_cpu[vb->dma.sglen - 1].ddadr = DDADR_STOP;
++ buf->sg_cpu[vb->dma.sglen - 1].dcmd |= DCMD_ENDIRQEN;
++
++ vb->state = STATE_PREPARED;
++ }
++
++ buf->inwork = 0;
++// spin_unlock_irqrestore(&pcdev->lock, flags);
++
++ return 0;
++
++fail:
++ free_buffer(vq,buf);
++out:
++ buf->inwork = 0;
++// spin_unlock_irqrestore(&pcdev->lock, flags);
++ return ret;
++}
++
++static void
++pxa_videobuf_queue(struct videobuf_queue *vq, struct videobuf_buffer *vb)
++{
++ struct soc_camera_device *icd = vq->priv_data;
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++ struct pxa_camera_dev *pcdev = ici->priv;
++ struct pxa_buffer *buf = container_of(vb,struct pxa_buffer,vb);
++ struct pxa_buffer *active = pcdev->active;
++ int nents = vb->dma.sglen;
++ unsigned long flags;
++
++ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__, vb, vb->baddr, vb->bsize);
++ spin_lock_irqsave(&pcdev->lock, flags);
++
++ list_add_tail(&vb->queue, &pcdev->capture);
++
++ vb->state = STATE_ACTIVE;
++
++ if (!pcdev->active) {
++ CIFR |= CIFR_RESET_F;
++ DDADR(pcdev->dma_chan_y) = buf->sg_dma;
++ DCSR(pcdev->dma_chan_y) = DCSR_RUN;
++ pcdev->active = buf;
++ CICR0 |= CICR0_ENB;
++ } else {
++ /* Stop DMA engine */
++ DCSR(pcdev->dma_chan_y) = 0;
++
++ /* Add the descriptors we just initialized to the currently
++ * running chain
++ */
++ pcdev->active->sg_cpu[active->vb.dma.sglen - 1].ddadr = buf->sg_dma;
++
++ /* Setup a dummy descriptor with the DMA engines current
++ * state
++ */
++ buf->sg_cpu[nents].dsadr = pcdev->res->start + 0x28; /* CIBR0 */
++ buf->sg_cpu[nents].dtadr = DTADR(pcdev->dma_chan_y);
++ buf->sg_cpu[nents].dcmd = DCMD(pcdev->dma_chan_y);
++
++ if (DDADR(pcdev->dma_chan_y) == DDADR_STOP) {
++ /* The DMA engine is on the last descriptor, set the
++ * next descriptors address to the descriptors
++ * we just initialized
++ */
++ buf->sg_cpu[nents].ddadr = buf->sg_dma;
++ } else {
++ buf->sg_cpu[nents].ddadr = DDADR(pcdev->dma_chan_y);
++ }
++
++ /* The next descriptor is the dummy descriptor */
++ DDADR(pcdev->dma_chan_y) = buf->sg_dma + nents *
++ sizeof(struct pxa_dma_desc);
++
++ DCSR(pcdev->dma_chan_y) = DCSR_RUN;
++#if 0
++ if(CISR & CISR_IFO_0) {
++ printk("%s: fifo ovl. repeat last\n",__FUNCTION__);
++ DDADR(pcdev->dma_chan_y) = pcdev->active->sg_dma;
++
++ CICR0 &= ~CICR0_ENB;
++ CIFR |= CIFR_RESET_F;
++ DCSR(pcdev->dma_chan_y) = DCSR_RUN;
++ CICR0 |= CICR0_ENB;
++ } else {
++ DCSR(pcdev->dma_chan_y) = DCSR_RUN;
++// printk("no fifo ovl\n");
++ }
++#endif
++ }
++
++ spin_unlock_irqrestore(&pcdev->lock, flags);
++
++}
++
++static void pxa_videobuf_release(struct videobuf_queue *vq, struct videobuf_buffer *vb)
++{
++ struct pxa_buffer *buf = container_of(vb, struct pxa_buffer, vb);
++
++ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__,vb, vb->baddr, vb->bsize);
++
++#ifdef DEBUG
++ switch(vb->state) {
++ case STATE_ACTIVE:
++ printk("%s (active)\n",__FUNCTION__);
++ break;
++ case STATE_QUEUED:
++ printk("%s (queued)\n",__FUNCTION__);
++ break;
++ case STATE_PREPARED:
++ printk("%s (prepared)\n",__FUNCTION__);
++ break;
++ default:
++ printk("%s (unknown)\n",__FUNCTION__);
++ break;
++ }
++#endif
++
++ free_buffer(vq, buf);
++}
++
++static int pxa_videobuf_map_sg(void *dev, struct scatterlist *sg, int nents,
++ int direction)
++{
++ pr_debug("%s, number of pages=%d\n", __FUNCTION__,nents);
++ BUG_ON(direction == DMA_NONE);
++
++ dma_map_sg(dev, sg, nents, DMA_FROM_DEVICE);
++
++ return nents;
++}
++
++static int pxa_videobuf_unmap_sg(void *dev, struct scatterlist *sg, int nents,
++ int direction)
++{
++ pr_debug("%s\n", __FUNCTION__);
++ dma_unmap_sg(dev, sg, nents, DMA_FROM_DEVICE);
++ return 0;
++}
++
++static int pxa_videobuf_dma_sync_sg(void *dev, struct scatterlist *sg, int nents,
++ int direction)
++{
++ return 0;
++}
++
++static void pxa_camera_dma_irq_y(int channel, void *data)
++{
++ struct pxa_camera_dev *pcdev = data;
++ struct pxa_buffer *buf;
++ unsigned long flags;
++ unsigned int status;
++ struct videobuf_buffer *vb;
++
++ spin_lock_irqsave(&pcdev->lock, flags);
++
++ status = DCSR(pcdev->dma_chan_y);
++ if (status & DCSR_BUSERR) {
++ printk("%s: Bus Error\n",__FUNCTION__);
++ DCSR(pcdev->dma_chan_y) |= DCSR_BUSERR;
++ goto out;
++ }
++
++ if (!(status & DCSR_ENDINTR)) {
++ printk("%s: unknown dma interrupt source. status: 0x%08x\n",
++ __FUNCTION__, status);
++ goto out;
++ }
++
++ DCSR(pcdev->dma_chan_y) |= DCSR_ENDINTR;
++
++ if (!pcdev->active) {
++ printk("%s: no active buf\n",__FUNCTION__);
++ goto out;
++ }
++
++ vb = &pcdev->active->vb;
++ buf = container_of(vb, struct pxa_buffer, vb);
++ WARN_ON(buf->inwork || list_empty(&vb->queue));
++ pr_debug("%s (vb=0x%p) 0x%08lx %d\n",__FUNCTION__,vb, vb->baddr, vb->bsize);
++
++ /* _init is used to debug races, see comment in pxa_is_reqbufs() */
++ list_del_init(&vb->queue);
++ vb->state = STATE_DONE;
++ do_gettimeofday(&vb->ts);
++ vb->field_count++;
++ wake_up(&vb->done);
++
++ if (list_empty(&pcdev->capture)) {
++ pcdev->active = NULL;
++ DCSR(pcdev->dma_chan_y) = 0;
++ CICR0 &= ~CICR0_ENB;
++ goto out;
++ }
++
++ pcdev->active = list_entry(pcdev->capture.next, struct pxa_buffer, vb.queue);
++
++out:
++ spin_unlock_irqrestore(&pcdev->lock, flags);
++}
++
++static struct videobuf_queue_ops pxa_video_ops = {
++ .buf_setup = pxa_videobuf_setup,
++ .buf_prepare = pxa_videobuf_prepare,
++ .buf_queue = pxa_videobuf_queue,
++ .buf_release = pxa_videobuf_release,
++
++ /* Non-pci handling routines */
++ .vb_map_sg = pxa_videobuf_map_sg,
++ .vb_dma_sync_sg = pxa_videobuf_dma_sync_sg,
++ .vb_unmap_sg = pxa_videobuf_unmap_sg,
++};
++
++static int mclk_get_divisor(unsigned int mclk_10khz)
++{
++ unsigned long div;
++ unsigned long lcdclk;
++
++ lcdclk = get_lcdclk_frequency_10khz();
++
++ /* We verify platform_mclk_10khz != 0, so this is only against future bugs */
++ if (unlikely(!mclk_10khz))
++ return 0;
++
++ div = (lcdclk + 2 * mclk_10khz - 1) / (2 * mclk_10khz) - 1;
++
++ pr_debug("pxa_camera: LCD clock %lukHz, platform target freq %dkHz, divisor %lu\n",
++ lcdclk * 10, mclk_10khz * 10, div);
++
++ return div;
++}
++
++static void pxa_is_activate(struct pxa_camera_dev *pcdev)
++{
++ struct pxacamera_platform_data *pdata = pcdev->pdata;
++
++ printk("Registered platform device at %p data %p\n", pcdev, pdata);
++
++ if (pdata && pdata->init) {
++ dev_dbg(pcdev->dev, "%s: Init gpios\n", __FUNCTION__);
++ pdata->init(pcdev->dev);
++ }
++
++ if (pdata && pdata->power) {
++ dev_dbg(pcdev->dev, "%s: Power on camera\n", __FUNCTION__);
++ pdata->power(pcdev->dev, 1);
++ }
++
++ if (pdata && pdata->reset) {
++ dev_dbg(pcdev->dev, "%s: Releasing camera reset\n", __FUNCTION__);
++ pdata->reset(pcdev->dev, 1);
++ }
++
++ CICR0 = 0x3FF; /* disable all interrupts */
++ pxa_set_cken(CKEN_CAMERA, 1);
++}
++
++static void pxa_is_deactivate(struct pxa_camera_dev *pdev)
++{
++ struct pxacamera_platform_data *board = pdev->pdata;
++
++ pxa_set_cken(CKEN_CAMERA, 0);
++/*
++ dev_dbg(&pdev->dev, "%s: Asserting camera reset\n", __FUNCTION__);
++ if (board && board->reset) {
++ board->reset(&pdev->dev, 0);
++ }
++*/
++ dev_dbg(pdev->dev, "%s: Power off camera\n", __FUNCTION__);
++ if (board && board->power)
++ board->power(pdev->dev, 0);
++}
++
++static irqreturn_t pxa_camera_irq(int irq, void *data)
++{
++// struct pxa_camera_dev *pcdev = (struct pxa_camera_dev *)data;
++// printk("%s: 0x%08x\n",__FUNCTION__,CISR);
++ unsigned int status = CISR;
++// if(status & CISR_SOF) printk("Start of frame\n");
++// if(status & CISR_EOF) printk("End of frame\n");
++// printk("%s 0x%08x\n",__FUNCTION__,status);
++ CISR = status;
++
++ return IRQ_HANDLED;
++}
++
++/* The following two functions absolutely depend on the fact, that
++ * there can be only one camera on PXA quick capture interface */
++static int pxa_is_add_device(struct soc_camera_device *icd)
++{
++ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
++ struct pxa_camera_dev *pcdev = ici->priv;
++
++ dev_info(&icd->dev, "PXA Camera driver loaded for host %d\n",
++ icd->iface);
++
++ pxa_is_activate(pcdev);
++// udelay(200);
++ return icd->ops->init(icd);
++}
++
++static void pxa_is_remove_device(struct soc_camera_device *icd)
++{
++ struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent);
++ struct pxa_camera_dev *pcdev = ici->priv;
++
++ dev_dbg(pcdev->dev, "%s\n", __FUNCTION__);
++
++ /* disable capture, disable interrupts */
++ CICR0 = 0x3ff;
++ /* Stop DMA engine */
++ DCSR(pcdev->dma_chan_y) = 0;
++
++ icd->ops->release(icd);
++
++ pxa_is_deactivate(pcdev);
++}
++
++static int pxa_is_set_capture_format(struct soc_camera_device *icd,
++ __u32 pixfmt, struct v4l2_rect *rect)
++{
++ struct soc_camera_host *ici =
++ to_soc_camera_host(icd->dev.parent);
++ struct pxa_camera_dev *pcdev = ici->priv;
++ unsigned int datawidth = 0, dw, bpp;
++ u32 cicr0, cicr4 = 0;
++ int ret;
++
++ /* If requested data width is supported by the platform, use it */
++ switch (icd->cached_datawidth) {
++ case 10:
++ if (pcdev->platform_flags & PXACIF_DATAWIDTH_10)
++ datawidth = IS_DATAWIDTH_10;
++ break;
++ case 9:
++ if (pcdev->platform_flags & PXACIF_DATAWIDTH_9)
++ datawidth = IS_DATAWIDTH_9;
++ break;
++ case 8:
++ if (pcdev->platform_flags & PXACIF_DATAWIDTH_8)
++ datawidth = IS_DATAWIDTH_8;
++ }
++ if (!datawidth)
++ return -EINVAL;
++
++ ret = icd->ops->set_capture_format(icd, pixfmt, rect,
++ datawidth |
++ (pcdev->platform_flags & PXACIF_MASTER ?
++ IS_MASTER : 0) |
++ (pcdev->platform_flags & PXACIF_HSP ?
++ 0 : IS_HSYNC_ACTIVE_HIGH) |
++ (pcdev->platform_flags & PXACIF_VSP ?
++ 0 : IS_VSYNC_ACTIVE_HIGH) |
++ (pcdev->platform_flags & PXACIF_PCP ?
++ 0 : IS_PCLK_SAMPLE_RISING));
++ if (ret < 0)
++ return ret;
++
++ /* Datawidth is now guaranteed to be equal to one of the three values.
++ * We fix bit-per-pixel equal to data-width... */
++ switch (datawidth) {
++ case IS_DATAWIDTH_10:
++ icd->cached_datawidth = 10;
++ dw = 4;
++ bpp = 0x40;
++ break;
++ case IS_DATAWIDTH_9:
++ icd->cached_datawidth = 9;
++ dw = 3;
++ bpp = 0x20;
++ break;
++ case IS_DATAWIDTH_8:
++ icd->cached_datawidth = 8;
++ dw = 2;
++ bpp = 0;
++ }
++
++ if (pcdev->platform_flags & PXACIF_PCLK_EN)
++ cicr4 |= CICR4_PCLK_EN;
++ if (pcdev->platform_flags & PXACIF_MCLK_EN)
++ cicr4 |= CICR4_MCLK_EN;
++ if (pcdev->platform_flags & PXACIF_PCP)
++ cicr4 |= CICR4_PCP;
++ if (pcdev->platform_flags & PXACIF_HSP)
++ cicr4 |= CICR4_HSP;
++ if (pcdev->platform_flags & PXACIF_VSP)
++ cicr4 |= CICR4_VSP;
++
++ cicr0 = CICR0;
++ if (cicr0 & CICR0_ENB)
++ CICR0 = cicr0 & ~CICR0_ENB;
++ CICR1 = CICR1_PPL_VAL(rect->width - 1) | bpp | dw;
++ CICR2 = 0;
++ CICR3 = CICR3_LPF_VAL(rect->height - 1) |
++ CICR3_BFW_VAL(min((unsigned short)255, icd->y_skip_top));
++ CICR4 = mclk_get_divisor(pcdev->platform_mclk_10khz) | cicr4;
++
++ /* CIF interrupts are not used, only DMA */
++ CICR0 = (pcdev->platform_flags & PXACIF_MASTER ?
++ 0 : (CICR0_SL_CAP_EN | CICR0_SIM_SP)) |
++ CICR0_DMAEN | CICR0_IRQ_MASK | (cicr0 & CICR0_ENB);
++
++ return 0;
++}
++
++static int pxa_is_try_fmt_cap(struct soc_camera_host *ici, struct v4l2_format *f)
++{
++ /* limit to pxa hardware capabilities */
++ if (f->fmt.pix.height < 32)
++ f->fmt.pix.height = 32;
++ if (f->fmt.pix.height > 2048)
++ f->fmt.pix.height = 2048;
++ if (f->fmt.pix.width < 48)
++ f->fmt.pix.width = 48;
++ if (f->fmt.pix.width > 2048)
++ f->fmt.pix.width = 2048;
++ f->fmt.pix.width &= ~0x01;
++
++ return 0;
++}
++
++static int pxa_is_reqbufs(struct soc_camera_file *icf, struct v4l2_requestbuffers *p)
++{
++ int i;
++
++ /* This is for locking debugging only. I removed spinlocks and now I
++ * check whether .prepare is ever called on a linked buffer, or whether
++ * a dma IRQ can occur for an in-work or unlinked buffer. Until now
++ * it hadn't triggered */
++ for (i = 0; i < p->count; i++) {
++ struct pxa_buffer *buf = container_of(icf->vb_vidq.bufs[i],
++ struct pxa_buffer, vb);
++ buf->inwork = 0;
++ INIT_LIST_HEAD(&buf->vb.queue);
++ }
++
++ return 0;
++}
++
++static unsigned int pxa_is_poll(struct file *file, poll_table *pt)
++{
++ struct soc_camera_file *icf = file->private_data;
++ struct pxa_buffer *buf;
++
++ buf = list_entry(icf->vb_vidq.stream.next, struct pxa_buffer, vb.stream);
++
++ poll_wait(file, &buf->vb.done, pt);
++
++ if (buf->vb.state == STATE_DONE ||
++ buf->vb.state == STATE_ERROR)
++ return POLLIN|POLLRDNORM;
++
++ return 0;
++}
++
++static int pxa_is_querycap(struct soc_camera_host *ici,
++ struct v4l2_capability *cap)
++{
++ /* cap->name is set by the firendly caller:-> */
++ strlcpy(cap->card, pxa_cam_driver_description, sizeof(cap->card));
++ cap->version = PXA_CAM_VERSION_CODE;
++ cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING;
++
++ return 0;
++}
++
++/* Should beallocated dynamically too, but we have only one. */
++static struct soc_camera_host pxa_soc_camera_host = {
++ .drv_name = PXA_CAM_DRV_NAME,
++ .vbq_ops = &pxa_video_ops,
++ .add = pxa_is_add_device,
++ .remove = pxa_is_remove_device,
++ .msize = sizeof(struct pxa_buffer),
++ .set_capture_format = pxa_is_set_capture_format,
++ .try_fmt_cap = pxa_is_try_fmt_cap,
++ .reqbufs = pxa_is_reqbufs,
++ .poll = pxa_is_poll,
++ .querycap = pxa_is_querycap,
++};
++
++static int pxa_camera_probe(struct platform_device *pdev)
++{
++ struct pxa_camera_dev *pcdev;
++ struct resource *res;
++ void __iomem *base;
++ unsigned int irq;
++ int err = 0;
++
++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ irq = platform_get_irq(pdev, 0);
++ if (!res || !irq) {
++ err = -ENODEV;
++ goto exit;
++ }
++
++ pcdev = kzalloc(sizeof(*pcdev), GFP_KERNEL);
++ if (!pcdev) {
++ dev_err(&pdev->dev, "%s: Could not allocate pcdev\n", __FUNCTION__);
++ err = -ENOMEM;
++ goto exit;
++ }
++
++ dev_set_drvdata(&pdev->dev, pcdev);
++ pcdev->res = res;
++
++ pcdev->pdata = pdev->dev.platform_data;
++ pcdev->platform_flags = pcdev->pdata->flags;
++ if (! pcdev->platform_flags & (PXACIF_DATAWIDTH_8 | PXACIF_DATAWIDTH_9 |
++ PXACIF_DATAWIDTH_10)) {
++ /* Platform hasn't set available data widths. This is bad.
++ * Warn and use a default. */
++ dev_warn(&pdev->dev, "WARNING! Platform hasn't set available "
++ "data widths, using default 10 bit\n");
++ pcdev->platform_flags |= PXACIF_DATAWIDTH_10;
++ }
++ pcdev->platform_mclk_10khz = pcdev->pdata->mclk_10khz;
++ if (!pcdev->platform_mclk_10khz) {
++ dev_warn(&pdev->dev,
++ "mclk_10khz == 0! Please, fix your platform data. "
++ "Using default 20MHz\n");
++ pcdev->platform_mclk_10khz = 2000;
++ }
++
++ INIT_LIST_HEAD(&pcdev->capture);
++ spin_lock_init(&pcdev->lock);
++
++ /*
++ * Request the regions.
++ */
++ if (!request_mem_region(res->start, res->end - res->start + 1, PXA_CAM_DRV_NAME)) {
++ err = -EBUSY;
++ goto exit_kfree;
++ }
++
++ base = ioremap(res->start, res->end - res->start + 1);
++ if (!base) {
++ err = -ENOMEM;
++ goto exit_release;
++ }
++ pcdev->irq = irq;
++ pcdev->base = base;
++ pcdev->dev = &pdev->dev;
++
++ /* request dma */
++ pcdev->dma_chan_y = pxa_request_dma("CI_Y", DMA_PRIO_HIGH, pxa_camera_dma_irq_y, pcdev);
++ if (pcdev->dma_chan_y < 0) {
++ printk(KERN_ERR "Can't request DMA for Y\n");
++ err = -ENOMEM;
++ goto exit_iounmap;
++ }
++ pr_debug("got DMA channel %d\n", pcdev->dma_chan_y);
++
++ DRCMR68 = pcdev->dma_chan_y | DRCMR_MAPVLD;
++
++ /* request irq */
++ err = request_irq(pcdev->irq, pxa_camera_irq, 0, PXA_CAM_DRV_NAME, pcdev);
++ if (err) {
++ printk ("Camera interrupt register failed \n");
++ goto exit_free_dma;
++ }
++
++ pxa_soc_camera_host.priv = pcdev;
++ pxa_soc_camera_host.dev.parent = &pdev->dev;
++ pxa_soc_camera_host.nr = pdev->id;
++ err = soc_camera_host_register(&pxa_soc_camera_host, THIS_MODULE);
++ if (err)
++ goto exit_free_irq;
++
++ return 0;
++
++ exit_free_irq:
++ free_irq(pcdev->irq, pcdev);
++ exit_free_dma:
++ pxa_free_dma(pcdev->dma_chan_y);
++ exit_iounmap:
++ iounmap(base);
++ exit_release:
++ release_mem_region(res->start, res->end - res->start + 1);
++ exit_kfree:
++ kfree(pcdev);
++ exit:
++ return err;
++}
++
++static int __devexit pxa_camera_remove(struct platform_device *pdev)
++{
++ struct pxa_camera_dev *pcdev = platform_get_drvdata(pdev);
++ struct resource *res;
++
++ pxa_free_dma(pcdev->dma_chan_y);
++ free_irq(pcdev->irq, pcdev);
++
++ soc_camera_host_unregister(&pxa_soc_camera_host);
++
++ iounmap(pcdev->base);
++
++ res = pcdev->res;
++ release_mem_region(res->start, res->end - res->start + 1);
++
++ kfree(pcdev);
++
++ dev_info(&pdev->dev, "%s: PXA Camera driver unloaded\n", __FUNCTION__);
++
++ return 0;
++}
++
++/*
++ * Suspend the Camera Module.
++ */
++static int pxa_camera_suspend(struct platform_device *pdev, pm_message_t level)
++{
++ struct pxa_camera_dev *pcdev = platform_get_drvdata(pdev);
++
++ dev_info(&pdev->dev, "camera suspend\n");
++ disable_irq(pcdev->irq);
++ return 0;
++}
++
++/*
++ * Resume the Camera Module.
++ */
++static int pxa_camera_resume(struct platform_device *pdev)
++{
++ struct pxa_camera_dev *pcdev = platform_get_drvdata(pdev);
++
++ dev_info(&pdev->dev, "camera resume\n");
++ enable_irq(pcdev->irq);
++
++ /* if (pcdev) { */ /* FIXME: dev in use? */
++/* DRCMR68 = pcdev->dma_chan_y | DRCMR_MAPVLD; */
++/* DRCMR69 = pcdev->dma_chan_cb | DRCMR_MAPVLD; */
++/* DRCMR70 = pcdev->dma_chan_cr | DRCMR_MAPVLD; */
++/* } */
++
++ return 0;
++}
++
++
++static struct platform_driver pxa_camera_driver = {
++ .driver = {
++ .name = PXA_CAM_DRV_NAME,
++ },
++ .probe = pxa_camera_probe,
++ .remove = __exit_p(pxa_camera_remove),
++ .suspend = pxa_camera_suspend,
++ .resume = pxa_camera_resume,
++};
++
++
++static int __devinit pxa_camera_init(void)
++{
++ return platform_driver_register(&pxa_camera_driver);
++}
++
++static void __exit pxa_camera_exit(void)
++{
++ return platform_driver_unregister(&pxa_camera_driver);
++}
++
++module_init(pxa_camera_init);
++module_exit(pxa_camera_exit);
++
++MODULE_DESCRIPTION("PXA27x SoC Camera Host driver");
++MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
++MODULE_LICENSE("GPL");
+diff --git a/include/asm-arm/arch-pxa/pxa-regs.h b/include/asm-arm/arch-pxa/pxa-regs.h
+index e68b593..f587c83 100644
+--- a/include/asm-arm/arch-pxa/pxa-regs.h
++++ b/include/asm-arm/arch-pxa/pxa-regs.h
+@@ -1229,19 +1229,26 @@
+ #define GPIO10_RTCCLK 10 /* real time clock (1 Hz) */
+ #define GPIO11_3_6MHz 11 /* 3.6 MHz oscillator out */
+ #define GPIO12_32KHz 12 /* 32 kHz out */
++#define GPIO12_CIF_DD7 12 /* Capture Interface D7 (PXA27x) */
+ #define GPIO13_MBGNT 13 /* memory controller grant */
+ #define GPIO14_MBREQ 14 /* alternate bus master request */
+ #define GPIO15_nCS_1 15 /* chip select 1 */
+ #define GPIO16_PWM0 16 /* PWM0 output */
+ #define GPIO17_PWM1 17 /* PWM1 output */
++#define GPIO17_CIF_DD6 17 /* Capture Interface D6 (PXA27x) */
+ #define GPIO18_RDY 18 /* Ext. Bus Ready */
+ #define GPIO19_DREQ1 19 /* External DMA Request */
+ #define GPIO20_DREQ0 20 /* External DMA Request */
+ #define GPIO23_SCLK 23 /* SSP clock */
++#define GPIO23_CIF_MCLK 23 /* Capture Interface MCLK (PXA27x) */
+ #define GPIO24_SFRM 24 /* SSP Frame */
++#define GPIO24_CIF_FV 24 /* Capture Interface FV (PXA27x) */
+ #define GPIO25_STXD 25 /* SSP transmit */
++#define GPIO25_CIF_LV 25 /* Capture Interface LV (PXA27x) */
+ #define GPIO26_SRXD 26 /* SSP receive */
++#define GPIO26_CIF_PCLK 26 /* Capture Interface PCLK (PXA27x) */
+ #define GPIO27_SEXTCLK 27 /* SSP ext_clk */
++#define GPIO27_CIF_DD0 27 /* Capture Interface D0 (PXA27x) */
+ #define GPIO28_BITCLK 28 /* AC97/I2S bit_clk */
+ #define GPIO29_SDATA_IN 29 /* AC97 Sdata_in0 / I2S Sdata_in */
+ #define GPIO30_SDATA_OUT 30 /* AC97/I2S Sdata_out */
+@@ -1262,28 +1269,40 @@
+ #define GPIO41_FFRTS 41 /* FFUART request to send */
+ #define GPIO42_BTRXD 42 /* BTUART receive data */
+ #define GPIO42_HWRXD 42 /* HWUART receive data */
++#define GPIO42_CIF_MCLK 42 /* Capture interface MCLK (PXA27x) */
+ #define GPIO43_BTTXD 43 /* BTUART transmit data */
+ #define GPIO43_HWTXD 43 /* HWUART transmit data */
++#define GPIO43_CIF_FV 43 /* Capture interface FV (PXA27x) */
+ #define GPIO44_BTCTS 44 /* BTUART clear to send */
+ #define GPIO44_HWCTS 44 /* HWUART clear to send */
++#define GPIO44_CIF_LV 44 /* Capture interface LV (PXA27x) */
+ #define GPIO45_BTRTS 45 /* BTUART request to send */
+ #define GPIO45_HWRTS 45 /* HWUART request to send */
+ #define GPIO45_AC97_SYSCLK 45 /* AC97 System Clock */
++#define GPIO45_CIF_PCLK 45 /* Capture interface PCLK (PXA27x) */
+ #define GPIO46_ICPRXD 46 /* ICP receive data */
+ #define GPIO46_STRXD 46 /* STD_UART receive data */
+ #define GPIO47_ICPTXD 47 /* ICP transmit data */
+ #define GPIO47_STTXD 47 /* STD_UART transmit data */
++#define GPIO47_CIF_DD0 47 /* Capture interface D0 (PXA27x) */
+ #define GPIO48_nPOE 48 /* Output Enable for Card Space */
++#define GPIO48_CIF_DD5 48 /* Capture interface D5 (PXA27x) */
+ #define GPIO49_nPWE 49 /* Write Enable for Card Space */
+ #define GPIO50_nPIOR 50 /* I/O Read for Card Space */
++#define GPIO50_CIF_DD3 50 /* Capture interface D3 (PXA27x) */
+ #define GPIO51_nPIOW 51 /* I/O Write for Card Space */
++#define GPIO51_CIF_DD2 51 /* Capture interface D2 (PXA27x) */
+ #define GPIO52_nPCE_1 52 /* Card Enable for Card Space */
++#define GPIO52_CIF_DD4 52 /* Capture interface D4 (PXA27x) */
+ #define GPIO53_nPCE_2 53 /* Card Enable for Card Space */
+ #define GPIO53_MMCCLK 53 /* MMC Clock */
++#define GPIO53_CIF_MCLK 53 /* Capture interface MCLK (PXA27x) */
+ #define GPIO54_MMCCLK 54 /* MMC Clock */
+ #define GPIO54_pSKTSEL 54 /* Socket Select for Card Space */
+ #define GPIO54_nPCE_2 54 /* Card Enable for Card Space (PXA27x) */
++#define GPIO54_CIF_PCLK 54 /* Capture interface PCLK (PXA27x) */
+ #define GPIO55_nPREG 55 /* Card Address bit 26 */
++#define GPIO55_CIF_DD1 55 /* Capture interface D1 (PXA27x) */
+ #define GPIO56_nPWAIT 56 /* Wait signal for Card Space */
+ #define GPIO57_nIOIS16 57 /* Bus Width select for I/O Card Space */
+ #define GPIO58_LDD_0 58 /* LCD data pin 0 */
+@@ -1318,11 +1337,28 @@
+ #define GPIO79_nCS_3 79 /* chip select 3 */
+ #define GPIO80_nCS_4 80 /* chip select 4 */
+ #define GPIO81_NSCLK 81 /* NSSP clock */
++#define GPIO81_CIF_DD0 81 /* Capture Interface D0 (PXA27x) */
+ #define GPIO82_NSFRM 82 /* NSSP Frame */
++#define GPIO82_CIF_DD5 82 /* Capture Interface D5 (PXA27x) */
+ #define GPIO83_NSTXD 83 /* NSSP transmit */
++#define GPIO83_CIF_DD4 83 /* Capture Interface D4 (PXA27x) */
+ #define GPIO84_NSRXD 84 /* NSSP receive */
++#define GPIO84_CIF_FV 84 /* Capture Interface FV (PXA27x) */
+ #define GPIO85_nPCE_1 85 /* Card Enable for Card Space (PXA27x) */
++#define GPIO85_CIF_LV 85 /* Capture Interface LV (PXA27x) */
++#define GPIO90_CIF_DD4 90 /* Capture Interface DD4 (PXA27x) */
++#define GPIO91_CIF_DD5 91 /* Capture Interface DD5 (PXA27x) */
+ #define GPIO92_MMCDAT0 92 /* MMC DAT0 (PXA27x) */
++#define GPIO93_CIF_DD6 93 /* Capture interface D6 (PXA27x) */
++#define GPIO94_CIF_DD5 94 /* Capture interface D5 (PXA27x) */
++#define GPIO95_CIF_DD4 95 /* Capture interface D4 (PXA27x) */
++#define GPIO98_CIF_DD0 98 /* Capture interface D0 (PXA27x) */
++#define GPIO103_CIF_DD3 103 /* Capture interface D3 (PXA27x) */
++#define GPIO104_CIF_DD2 104 /* Capture interface D2 (PXA27x) */
++#define GPIO105_CIF_DD1 105 /* Capture interface D1 (PXA27x) */
++#define GPIO106_CIF_DD9 106 /* Capture interface D9 (PXA27x) */
++#define GPIO107_CIF_DD8 107 /* Capture interface D8 (PXA27x) */
++#define GPIO108_CIF_DD7 108 /* Capture interface D7 (PXA27x) */
+ #define GPIO102_nPCE_1 102 /* PCMCIA (PXA27x) */
+ #define GPIO109_MMCDAT1 109 /* MMC DAT1 (PXA27x) */
+ #define GPIO110_MMCDAT2 110 /* MMC DAT2 (PXA27x) */
+@@ -1332,6 +1368,9 @@
+ #define GPIO112_MMCCMD 112 /* MMC CMD (PXA27x) */
+ #define GPIO113_I2S_SYSCLK 113 /* I2S System Clock (PXA27x) */
+ #define GPIO113_AC97_RESET_N 113 /* AC97 NRESET on (PXA27x) */
++#define GPIO114_CIF_DD1 114 /* Capture interface D1 (PXA27x) */
++#define GPIO115_CIF_DD3 115 /* Capture interface D3 (PXA27x) */
++#define GPIO116_CIF_DD2 116 /* Capture interface D2 (PXA27x) */
+
+ /* GPIO alternate function mode & direction */
+
+@@ -1357,19 +1396,26 @@
+ #define GPIO10_RTCCLK_MD (10 | GPIO_ALT_FN_1_OUT)
+ #define GPIO11_3_6MHz_MD (11 | GPIO_ALT_FN_1_OUT)
+ #define GPIO12_32KHz_MD (12 | GPIO_ALT_FN_1_OUT)
++#define GPIO12_CIF_DD7_MD (12 | GPIO_ALT_FN_2_IN)
+ #define GPIO13_MBGNT_MD (13 | GPIO_ALT_FN_2_OUT)
+ #define GPIO14_MBREQ_MD (14 | GPIO_ALT_FN_1_IN)
+ #define GPIO15_nCS_1_MD (15 | GPIO_ALT_FN_2_OUT)
+ #define GPIO16_PWM0_MD (16 | GPIO_ALT_FN_2_OUT)
+ #define GPIO17_PWM1_MD (17 | GPIO_ALT_FN_2_OUT)
++#define GPIO17_CIF_DD6_MD (17 | GPIO_ALT_FN_2_IN)
+ #define GPIO18_RDY_MD (18 | GPIO_ALT_FN_1_IN)
+ #define GPIO19_DREQ1_MD (19 | GPIO_ALT_FN_1_IN)
+ #define GPIO20_DREQ0_MD (20 | GPIO_ALT_FN_1_IN)
++#define GPIO23_CIF_MCLK_MD (23 | GPIO_ALT_FN_1_OUT)
+ #define GPIO23_SCLK_MD (23 | GPIO_ALT_FN_2_OUT)
++#define GPIO24_CIF_FV_MD (24 | GPIO_ALT_FN_1_OUT)
+ #define GPIO24_SFRM_MD (24 | GPIO_ALT_FN_2_OUT)
++#define GPIO25_CIF_LV_MD (25 | GPIO_ALT_FN_1_OUT)
+ #define GPIO25_STXD_MD (25 | GPIO_ALT_FN_2_OUT)
+ #define GPIO26_SRXD_MD (26 | GPIO_ALT_FN_1_IN)
++#define GPIO26_CIF_PCLK_MD (26 | GPIO_ALT_FN_2_IN)
+ #define GPIO27_SEXTCLK_MD (27 | GPIO_ALT_FN_1_IN)
++#define GPIO27_CIF_DD0_MD (27 | GPIO_ALT_FN_3_IN)
+ #define GPIO28_BITCLK_AC97_MD (28 | GPIO_ALT_FN_1_IN)
+ #define GPIO28_BITCLK_IN_I2S_MD (28 | GPIO_ALT_FN_2_IN)
+ #define GPIO28_BITCLK_OUT_I2S_MD (28 | GPIO_ALT_FN_1_OUT)
+@@ -1394,34 +1440,46 @@
+ #define GPIO40_FFDTR_MD (40 | GPIO_ALT_FN_2_OUT)
+ #define GPIO41_FFRTS_MD (41 | GPIO_ALT_FN_2_OUT)
+ #define GPIO42_BTRXD_MD (42 | GPIO_ALT_FN_1_IN)
++#define GPIO42_CIF_MCLK_MD (42 | GPIO_ALT_FN_3_OUT)
+ #define GPIO42_HWRXD_MD (42 | GPIO_ALT_FN_3_IN)
+ #define GPIO43_BTTXD_MD (43 | GPIO_ALT_FN_2_OUT)
++#define GPIO43_CIF_FV_MD (43 | GPIO_ALT_FN_3_OUT)
+ #define GPIO43_HWTXD_MD (43 | GPIO_ALT_FN_3_OUT)
+ #define GPIO44_BTCTS_MD (44 | GPIO_ALT_FN_1_IN)
+ #define GPIO44_HWCTS_MD (44 | GPIO_ALT_FN_3_IN)
++#define GPIO44_CIF_LV_MD (44 | GPIO_ALT_FN_3_OUT)
+ #define GPIO45_BTRTS_MD (45 | GPIO_ALT_FN_2_OUT)
+ #define GPIO45_HWRTS_MD (45 | GPIO_ALT_FN_3_OUT)
+ #define GPIO45_SYSCLK_AC97_MD (45 | GPIO_ALT_FN_1_OUT)
++#define GPIO45_CIF_PCLK_MD (45 | GPIO_ALT_FN_3_IN)
+ #define GPIO46_ICPRXD_MD (46 | GPIO_ALT_FN_1_IN)
+ #define GPIO46_STRXD_MD (46 | GPIO_ALT_FN_2_IN)
+ #define GPIO47_ICPTXD_MD (47 | GPIO_ALT_FN_2_OUT)
+ #define GPIO47_STTXD_MD (47 | GPIO_ALT_FN_1_OUT)
++#define GPIO47_CIF_DD0_MD (47 | GPIO_ALT_FN_1_IN)
+ #define GPIO48_nPOE_MD (48 | GPIO_ALT_FN_2_OUT)
++#define GPIO48_CIF_DD5_MD (48 | GPIO_ALT_FN_1_IN)
+ #define GPIO48_HWTXD_MD (48 | GPIO_ALT_FN_1_OUT)
+ #define GPIO48_nPOE_MD (48 | GPIO_ALT_FN_2_OUT)
+ #define GPIO49_HWRXD_MD (49 | GPIO_ALT_FN_1_IN)
+ #define GPIO49_nPWE_MD (49 | GPIO_ALT_FN_2_OUT)
+ #define GPIO50_nPIOR_MD (50 | GPIO_ALT_FN_2_OUT)
++#define GPIO50_CIF_DD3_MD (50 | GPIO_ALT_FN_1_IN)
+ #define GPIO50_HWCTS_MD (50 | GPIO_ALT_FN_1_IN)
+ #define GPIO51_HWRTS_MD (51 | GPIO_ALT_FN_1_OUT)
+ #define GPIO51_nPIOW_MD (51 | GPIO_ALT_FN_2_OUT)
++#define GPIO51_CIF_DD2_MD (51 | GPIO_ALT_FN_1_IN)
+ #define GPIO52_nPCE_1_MD (52 | GPIO_ALT_FN_2_OUT)
++#define GPIO52_CIF_DD4_MD (52 | GPIO_ALT_FN_1_IN)
+ #define GPIO53_nPCE_2_MD (53 | GPIO_ALT_FN_2_OUT)
+ #define GPIO53_MMCCLK_MD (53 | GPIO_ALT_FN_1_OUT)
++#define GPIO53_CIF_MCLK_MD (53 | GPIO_ALT_FN_2_OUT)
+ #define GPIO54_MMCCLK_MD (54 | GPIO_ALT_FN_1_OUT)
+ #define GPIO54_nPCE_2_MD (54 | GPIO_ALT_FN_2_OUT)
+ #define GPIO54_pSKTSEL_MD (54 | GPIO_ALT_FN_2_OUT)
++#define GPIO54_CIF_PCLK_MD (54 | GPIO_ALT_FN_3_IN)
+ #define GPIO55_nPREG_MD (55 | GPIO_ALT_FN_2_OUT)
++#define GPIO55_CIF_DD1_MD (55 | GPIO_ALT_FN_1_IN)
+ #define GPIO56_nPWAIT_MD (56 | GPIO_ALT_FN_1_IN)
+ #define GPIO57_nIOIS16_MD (57 | GPIO_ALT_FN_1_IN)
+ #define GPIO58_LDD_0_MD (58 | GPIO_ALT_FN_2_OUT)
+@@ -1458,16 +1516,33 @@
+ #define GPIO80_nCS_4_MD (80 | GPIO_ALT_FN_2_OUT)
+ #define GPIO81_NSSP_CLK_OUT (81 | GPIO_ALT_FN_1_OUT)
+ #define GPIO81_NSSP_CLK_IN (81 | GPIO_ALT_FN_1_IN)
++#define GPIO81_CIF_DD0_MD (81 | GPIO_ALT_FN_2_IN)
+ #define GPIO82_NSSP_FRM_OUT (82 | GPIO_ALT_FN_1_OUT)
+ #define GPIO82_NSSP_FRM_IN (82 | GPIO_ALT_FN_1_IN)
++#define GPIO82_CIF_DD5_MD (82 | GPIO_ALT_FN_3_IN)
+ #define GPIO83_NSSP_TX (83 | GPIO_ALT_FN_1_OUT)
+ #define GPIO83_NSSP_RX (83 | GPIO_ALT_FN_2_IN)
++#define GPIO83_CIF_DD4_MD (83 | GPIO_ALT_FN_3_IN)
+ #define GPIO84_NSSP_TX (84 | GPIO_ALT_FN_1_OUT)
+ #define GPIO84_NSSP_RX (84 | GPIO_ALT_FN_2_IN)
++#define GPIO84_CIF_FV_MD (84 | GPIO_ALT_FN_3_OUT)
+ #define GPIO85_nPCE_1_MD (85 | GPIO_ALT_FN_1_OUT)
++#define GPIO85_CIF_LV_MD (85 | GPIO_ALT_FN_3_OUT)
++#define GPIO90_CIF_DD4_MD (90 | GPIO_ALT_FN_3_IN)
++#define GPIO91_CIF_DD5_MD (91 | GPIO_ALT_FN_3_IN)
+ #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT)
++#define GPIO93_CIF_DD6_MD (93 | GPIO_ALT_FN_2_IN)
++#define GPIO94_CIF_DD5_MD (94 | GPIO_ALT_FN_2_IN)
++#define GPIO95_CIF_DD4_MD (95 | GPIO_ALT_FN_2_IN)
++#define GPIO98_CIF_DD0_MD (98 | GPIO_ALT_FN_2_IN)
+ #define GPIO102_nPCE_1_MD (102 | GPIO_ALT_FN_1_OUT)
++#define GPIO103_CIF_DD3_MD (103 | GPIO_ALT_FN_1_IN)
+ #define GPIO104_pSKTSEL_MD (104 | GPIO_ALT_FN_1_OUT)
++#define GPIO104_CIF_DD2_MD (104 | GPIO_ALT_FN_1_IN)
++#define GPIO105_CIF_DD1_MD (105 | GPIO_ALT_FN_1_IN)
++#define GPIO106_CIF_DD9_MD (106 | GPIO_ALT_FN_1_IN)
++#define GPIO107_CIF_DD8_MD (107 | GPIO_ALT_FN_1_IN)
++#define GPIO108_CIF_DD7_MD (108 | GPIO_ALT_FN_1_IN)
+ #define GPIO109_MMCDAT1_MD (109 | GPIO_ALT_FN_1_OUT)
+ #define GPIO110_MMCDAT2_MD (110 | GPIO_ALT_FN_1_OUT)
+ #define GPIO110_MMCCS0_MD (110 | GPIO_ALT_FN_1_OUT)
+@@ -2207,6 +2282,11 @@
+ #define CICR0_ENB (1 << 28) /* Camera interface enable */
+ #define CICR0_DIS (1 << 27) /* Camera interface disable */
+ #define CICR0_SIM (0x7 << 24) /* Sensor interface mode mask */
++#define CICR0_SIM_MP (0 << 24)
++#define CICR0_SIM_SP (1 << 24)
++#define CICR0_SIM_MS (2 << 24)
++#define CICR0_SIM_EP (3 << 24)
++#define CICR0_SIM_ES (4 << 24)
+ #define CICR0_TOM (1 << 9) /* Time-out mask */
+ #define CICR0_RDAVM (1 << 8) /* Receive-data-available mask */
+ #define CICR0_FEM (1 << 7) /* FIFO-empty mask */
+@@ -2257,6 +2337,20 @@
+ #define CICR4_FR_RATE (0x7 << 8) /* Frame rate mask */
+ #define CICR4_DIV (0xff << 0) /* Clock divisor mask */
+
++#define CICR1_DW_VAL(x) ((x) & CICR1_DW) /* Data bus width */
++#define CICR1_PPL_VAL(x) (((x) << 15) & CICR1_PPL) /* Pixels per line */
++
++#define CICR2_BLW_VAL(x) (((x) << 24) & CICR2_BLW) /* Beginning-of-line pixel clock wait count */
++#define CICR2_ELW_VAL(x) (((x) << 16) & CICR2_ELW) /* End-of-line pixel clock wait count */
++#define CICR2_HSW_VAL(x) (((x) << 10) & CICR2_HSW) /* Horizontal sync pulse width */
++#define CICR2_BFPW_VAL(x) (((x) << 3) & CICR2_BFPW) /* Beginning-of-frame pixel clock wait count */
++#define CICR2_FSW_VAL(x) (((x) << 0) & CICR2_FSW) /* Frame stabilization wait count */
++
++#define CICR3_BFW_VAL(x) (((x) << 24) & CICR3_BFW) /* Beginning-of-frame line clock wait count */
++#define CICR3_EFW_VAL(x) (((x) << 16) & CICR3_EFW) /* End-of-frame line clock wait count */
++#define CICR3_VSW_VAL(x) (((x) << 11) & CICR3_VSW) /* Vertical sync pulse width */
++#define CICR3_LPF_VAL(x) (((x) << 0) & CICR3_LPF) /* Lines per frame */
++
+ #define CISR_FTO (1 << 15) /* FIFO time-out */
+ #define CISR_RDAV_2 (1 << 14) /* Channel 2 receive data available */
+ #define CISR_RDAV_1 (1 << 13) /* Channel 1 receive data available */
+diff --git a/include/asm-arm/arch-pxa/pxa_cif.h b/include/asm-arm/arch-pxa/pxa_cif.h
+new file mode 100644
+index 0000000..ca1e5a2
+--- /dev/null
++++ b/include/asm-arm/arch-pxa/pxa_cif.h
+@@ -0,0 +1,48 @@
++/*
++ pxa_camera - PXA camera driver header file
++
++ Copyright (C) 2003, Intel Corporation
++ Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __PXA_CIF_H_
++#define __PXA_CIF_H_
++
++#define PXACIF_MASTER 1
++#define PXACIF_DATAWIDTH_4 2
++#define PXACIF_DATAWIDTH_5 4
++#define PXACIF_DATAWIDTH_8 8
++#define PXACIF_DATAWIDTH_9 0x10
++#define PXACIF_DATAWIDTH_10 0x20
++#define PXACIF_PCLK_EN 0x40
++#define PXACIF_MCLK_EN 0x80
++#define PXACIF_PCP 0x100
++#define PXACIF_HSP 0x200
++#define PXACIF_VSP 0x400
++
++struct pxacamera_platform_data {
++ int (*init)(struct device *);
++ int (*power)(struct device *, int on);
++ int (*reset)(struct device *, int set);
++
++ unsigned long flags;
++ unsigned long mclk_10khz;
++};
++
++extern void pxa_set_cif_info(struct pxacamera_platform_data *info);
++
++#endif /* __PXA_CIF_H_ */
+--
+1.5.3.4
+
+--
+video4linux-list mailing list
+Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
+https://www.redhat.com/mailman/listinfo/video4linux-list
+
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml
new file mode 100644
index 0000000000..22abad6b1c
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l3-8.patch.eml
@@ -0,0 +1,282 @@
+Path: news.gmane.org!not-for-mail
+From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+Newsgroups: gmane.comp.video.video4linux,gmane.linux.drivers.i2c
+Subject: [RFC PATCH 3/8] Philips PCA9536 4 bit I2C GPIO extender driver
+Date: Wed, 23 Jan 2008 18:41:39 +0100 (CET)
+Lines: 210
+Approved: news@gmane.org
+Message-ID: <Pine.LNX.4.64.0801231820060.4932@axis700.grange>
+References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+NNTP-Posting-Host: lo.gmane.org
+Mime-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+X-Trace: ger.gmane.org 1201110131 28782 80.91.229.12 (23 Jan 2008 17:42:11 GMT)
+X-Complaints-To: usenet@ger.gmane.org
+NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:11 +0000 (UTC)
+Cc: i2c@lm-sensors.org
+To: video4linux-list@redhat.com
+Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:30 2008
+Return-path: <video4linux-list-bounces@redhat.com>
+Envelope-to: rh-video4linux-list@gmane.org
+Original-Received: from hormel.redhat.com ([209.132.177.30])
+ by lo.gmane.org with esmtp (Exim 4.50)
+ id 1JHjcK-0002zY-Jd
+ for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:29 +0100
+Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
+ by hormel.redhat.com (Postfix) with ESMTP
+ id 1D07D72F5C; Wed, 23 Jan 2008 12:42:02 -0500 (EST)
+Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
+ [172.16.52.254])
+ by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
+ m0NHfx7t017217 for <video4linux-list@listman.util.phx.redhat.com>;
+ Wed, 23 Jan 2008 12:41:59 -0500
+Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
+ by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHfxW4028112
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:59 -0500
+Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
+ by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfPdF000786
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:25 -0500
+Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:19 -0000
+Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
+ [87.189.47.31]
+ by mail.gmx.net (mp021) with SMTP; 23 Jan 2008 18:41:19 +0100
+X-Authenticated: #20450766
+X-Provags-ID: V01U2FsdGVkX18gZ14xakQgr3grhg4ys0olRWzKeUW5G+x4WUV9jY
+ iLvi2phxgtwjvM
+Original-Received: from lyakh (helo=localhost)
+ by axis700.grange with local-esmtp (Exim 4.63)
+ (envelope-from <g.liakhovetski@gmx.de>)
+ id 1JHjbX-00029t-5A; Wed, 23 Jan 2008 18:41:39 +0100
+X-X-Sender: lyakh@axis700.grange
+In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+X-Y-GMX-Trusted: 0
+X-RedHat-Spam-Score: 0
+X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
+X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
+X-loop: video4linux-list@redhat.com
+X-BeenThere: video4linux-list@redhat.com
+X-Mailman-Version: 2.1.5
+Precedence: junk
+List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
+List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
+List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
+List-Post: <mailto:video4linux-list@redhat.com>
+List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
+List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=subscribe>
+Original-Sender: video4linux-list-bounces@redhat.com
+Errors-To: video4linux-list-bounces@redhat.com
+Xref: news.gmane.org gmane.comp.video.video4linux:36471 gmane.linux.drivers.i2c:251
+Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36471>
+
+This driver will be used by the mt9m001 and the mt9v022 camera drivers,
+that can use a pca9536 to switch between 8 and 10 bit modes.
+
+Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+---
+ drivers/i2c/chips/Kconfig | 10 +++
+ drivers/i2c/chips/Makefile | 1 +
+ drivers/i2c/chips/pca9536.c | 153 +++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 164 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/i2c/chips/pca9536.c
+
+diff --git a/drivers/i2c/chips/Kconfig b/drivers/i2c/chips/Kconfig
+index 2e1c24f..6f492f1 100644
+--- a/drivers/i2c/chips/Kconfig
++++ b/drivers/i2c/chips/Kconfig
+@@ -65,6 +65,16 @@ config SENSORS_PCF8574
+ These devices are hard to detect and rarely found on mainstream
+ hardware. If unsure, say N.
+
++config SENSORS_PCA9536
++ tristate "Philips PCA9536 4-bit I/O port"
++ depends on EXPERIMENTAL
++ help
++ If you say yes here you get support for the Philips PCA9539
++ 4-bit I/O port.
++
++ This driver can also be built as a module. If so, the module
++ will be called pca9536.
++
+ config SENSORS_PCA9539
+ tristate "Philips PCA9539 16-bit I/O port"
+ depends on EXPERIMENTAL
+diff --git a/drivers/i2c/chips/Makefile b/drivers/i2c/chips/Makefile
+index ca924e1..e24c582 100644
+--- a/drivers/i2c/chips/Makefile
++++ b/drivers/i2c/chips/Makefile
+@@ -8,6 +8,7 @@ obj-$(CONFIG_DS1682) += ds1682.o
+ obj-$(CONFIG_SENSORS_EEPROM) += eeprom.o
+ obj-$(CONFIG_SENSORS_MAX6875) += max6875.o
+ obj-$(CONFIG_SENSORS_M41T00) += m41t00.o
++obj-$(CONFIG_SENSORS_PCA9536) += pca9536.o
+ obj-$(CONFIG_SENSORS_PCA9539) += pca9539.o
+ obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o
+ obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
+diff --git a/drivers/i2c/chips/pca9536.c b/drivers/i2c/chips/pca9536.c
+new file mode 100644
+index 0000000..08e5d8b
+--- /dev/null
++++ b/drivers/i2c/chips/pca9536.c
+@@ -0,0 +1,152 @@
++/*
++ * Driver for PCA9536 I/O Expander
++ *
++ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/videodev.h>
++#include <linux/slab.h>
++#include <linux/i2c.h>
++#include <linux/hwmon-sysfs.h>
++
++#include <media/v4l2-common.h>
++#include <media/v4l2-chip-ident.h>
++
++#define PCA9536_INPUT 0
++#define PCA9536_OUTPUT 1
++#define PCA9536_INVERT 2
++#define PCA9536_DIRECTION 3
++
++/* following are the sysfs callback functions */
++static ssize_t pca9536_show(struct device *dev, struct device_attribute *attr,
++ char *buf)
++{
++ struct sensor_device_attribute *psa = to_sensor_dev_attr(attr);
++ struct i2c_client *client = to_i2c_client(dev);
++
++ return sprintf(buf, "%d\n", i2c_smbus_read_byte_data(client,
++ psa->index));
++}
++
++static ssize_t pca9536_store(struct device *dev, struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct sensor_device_attribute *psa = to_sensor_dev_attr(attr);
++ struct i2c_client *client = to_i2c_client(dev);
++ unsigned long val = simple_strtoul(buf, NULL, 0);
++
++ if (val > 0xff)
++ return -EINVAL;
++
++ i2c_smbus_write_byte_data(client, psa->index, val);
++ return count;
++}
++
++int pca9536_set_level(struct i2c_client *client, u8 pin, u8 level)
++{
++ s32 data;
++
++ if (pin > 3)
++ return -EINVAL;
++
++ /* Switch to output */
++ data = i2c_smbus_read_byte_data(client, PCA9536_DIRECTION);
++ if (data < 0)
++ return data;
++ data = i2c_smbus_write_byte_data(client, PCA9536_DIRECTION,
++ data & ~(1 << pin));
++ if (data < 0)
++ return data;
++
++ /* Set level */
++ data = i2c_smbus_read_byte_data(client, PCA9536_OUTPUT);
++ if (data < 0)
++ return data;
++ if (level)
++ data |= (1 << pin);
++ else
++ data &= ~(1 << pin);
++ data = i2c_smbus_write_byte_data(client, PCA9536_OUTPUT, data);
++
++ return data;
++}
++EXPORT_SYMBOL(pca9536_set_level);
++
++/* Define the device attributes */
++
++#define PCA9536_ENTRY_RO(name, reg) \
++ static SENSOR_DEVICE_ATTR(name, S_IRUGO, pca9536_show, NULL, reg)
++
++#define PCA9536_ENTRY_RW(name, reg) \
++ static SENSOR_DEVICE_ATTR(name, S_IRUGO | S_IWUSR, pca9536_show, \
++ pca9536_store, reg)
++
++PCA9536_ENTRY_RO(input, PCA9536_INPUT);
++PCA9536_ENTRY_RW(output, PCA9536_OUTPUT);
++PCA9536_ENTRY_RW(invert, PCA9536_INVERT);
++PCA9536_ENTRY_RW(direction, PCA9536_DIRECTION);
++
++static struct attribute *pca9536_attributes[] = {
++ &sensor_dev_attr_input.dev_attr.attr,
++ &sensor_dev_attr_output.dev_attr.attr,
++ &sensor_dev_attr_invert.dev_attr.attr,
++ &sensor_dev_attr_direction.dev_attr.attr,
++ NULL
++};
++
++static struct attribute_group pca9536_defattr_group = {
++ .attrs = pca9536_attributes,
++};
++
++static int pca9536_probe(struct i2c_client *client)
++{
++ struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
++
++ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
++ pr_debug("%s: I2C-Adapter doesn't support I2C_FUNC_SMBUS_BYTE\n", __FUNCTION__);
++ return -EIO;
++ }
++
++ if (client->dev.platform_data)
++ /* This chip is going to be used from the kernel */
++ *(struct i2c_client **)client->dev.platform_data = client;
++
++ /* Register sysfs hooks */
++ return sysfs_create_group(&client->dev.kobj,
++ &pca9536_defattr_group);
++}
++
++static int pca9536_remove(struct i2c_client *client)
++{
++ sysfs_remove_group(&client->dev.kobj, &pca9536_defattr_group);
++ return 0;
++}
++
++static struct i2c_driver pca9536_i2c_driver = {
++ .driver = {
++ .name = "pca9536",
++ },
++ .probe = pca9536_probe,
++ .remove = pca9536_remove,
++};
++
++static int __init pca9536_mod_init(void)
++{
++ return i2c_add_driver(&pca9536_i2c_driver);
++}
++
++static void __exit pca9536_mod_exit(void)
++{
++ i2c_del_driver(&pca9536_i2c_driver);
++}
++
++module_init(pca9536_mod_init);
++module_exit(pca9536_mod_exit);
++
++MODULE_DESCRIPTION("PCA9536 driver");
++MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
++MODULE_LICENSE("GPL");
+--
+1.5.3.4
+
+--
+video4linux-list mailing list
+Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
+https://www.redhat.com/mailman/listinfo/video4linux-list
+
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml
new file mode 100644
index 0000000000..4ac9b73ff3
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l4-8.patch.eml
@@ -0,0 +1,781 @@
+Path: news.gmane.org!not-for-mail
+From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+Newsgroups: gmane.comp.video.video4linux
+Subject: [RFC PATCH 4/8] Add support for the MT9M001 camera
+Date: Wed, 23 Jan 2008 18:41:48 +0100 (CET)
+Lines: 710
+Approved: news@gmane.org
+Message-ID: <Pine.LNX.4.64.0801231825190.4932@axis700.grange>
+References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+NNTP-Posting-Host: lo.gmane.org
+Mime-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+X-Trace: ger.gmane.org 1201110157 28881 80.91.229.12 (23 Jan 2008 17:42:37 GMT)
+X-Complaints-To: usenet@ger.gmane.org
+NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:37 +0000 (UTC)
+To: video4linux-list@redhat.com
+Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:42:56 2008
+Return-path: <video4linux-list-bounces@redhat.com>
+Envelope-to: rh-video4linux-list@gmane.org
+Original-Received: from hormel.redhat.com ([209.132.177.30])
+ by lo.gmane.org with esmtp (Exim 4.50)
+ id 1JHjcT-00035B-5V
+ for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:38 +0100
+Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
+ by hormel.redhat.com (Postfix) with ESMTP
+ id 9E85472FB4; Wed, 23 Jan 2008 12:42:10 -0500 (EST)
+Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
+ [172.16.52.254])
+ by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
+ m0NHg8l9017245 for <video4linux-list@listman.util.phx.redhat.com>;
+ Wed, 23 Jan 2008 12:42:08 -0500
+Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
+ by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHg8vG028189
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:42:08 -0500
+Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
+ by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfZHu001044
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:35 -0500
+Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:29 -0000
+Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
+ [87.189.47.31]
+ by mail.gmx.net (mp052) with SMTP; 23 Jan 2008 18:41:29 +0100
+X-Authenticated: #20450766
+X-Provags-ID: V01U2FsdGVkX18JzEdNfKMJtAD7BzHkb2TLaDIMUqlssnktvE95Pt
+ 3/al7Wqsw8NYli
+Original-Received: from lyakh (helo=localhost)
+ by axis700.grange with local-esmtp (Exim 4.63)
+ (envelope-from <g.liakhovetski@gmx.de>) id 1JHjbg-00029w-Ku
+ for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:48 +0100
+X-X-Sender: lyakh@axis700.grange
+In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+X-Y-GMX-Trusted: 0
+X-RedHat-Spam-Score: 0
+X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
+X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
+X-loop: video4linux-list@redhat.com
+X-BeenThere: video4linux-list@redhat.com
+X-Mailman-Version: 2.1.5
+Precedence: junk
+List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
+List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
+List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
+List-Post: <mailto:video4linux-list@redhat.com>
+List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
+List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=subscribe>
+Original-Sender: video4linux-list-bounces@redhat.com
+Errors-To: video4linux-list-bounces@redhat.com
+Xref: news.gmane.org gmane.comp.video.video4linux:36473
+Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36473>
+
+This driver supports Micron MT9M001 monochrome and colour cameras.
+
+Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+---
+ drivers/media/video/Kconfig | 15 +
+ drivers/media/video/Makefile | 1 +
+ drivers/media/video/mt9m001.c | 649 +++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 665 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/video/mt9m001.c
+
+diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
+index dc0dfec..def5246 100644
+--- a/drivers/media/video/Kconfig
++++ b/drivers/media/video/Kconfig
+@@ -803,6 +803,21 @@ config SOC_CAMERA
+ over a bus like PCI or USB. For example some i2c camera hanging
+ directly on the data bus of an SoC.
+
++config SOC_CAMERA_MT9M001
++ tristate "mt9m001 support"
++ depends on SOC_CAMERA
++ select SENSORS_PCA9536 if MT9M001_PCA9536_SWITCH
++ help
++ This driver supports MT9M001 cameras from Micron, monochrome
++ and colour models.
++
++config MT9M001_PCA9536_SWITCH
++ bool "pca9536 datawidth switch for mt9m001"
++ depends on SOC_CAMERA_MT9M001
++ help
++ Select this if your MT9M001 camera uses a PCA9536 I2C GPIO
++ extender to switch between 8 and 10 bit datawidth modes
++
+ config VIDEO_PXA27X
+ tristate "PXA27x Quick Capture Interface driver"
+ depends on VIDEO_DEV && PXA27x
+diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
+index 81b7cd6..c56bfdb 100644
+--- a/drivers/media/video/Makefile
++++ b/drivers/media/video/Makefile
+@@ -118,5 +118,6 @@ obj-$(CONFIG_VIDEO_VIVI) += vivi.o
+
+ obj-$(CONFIG_VIDEO_PXA27X) += pxa_camera.o
+ obj-$(CONFIG_SOC_CAMERA) += soc_camera.o
++obj-$(CONFIG_SOC_CAMERA_MT9M001) += mt9m001.o
+
+ EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
+diff --git a/drivers/media/video/mt9m001.c b/drivers/media/video/mt9m001.c
+new file mode 100644
+index 0000000..dc4cc8f
+--- /dev/null
++++ b/drivers/media/video/mt9m001.c
+@@ -0,0 +1,649 @@
++/*
++ * Driver for MT9M001 CMOS Image Sensor from Micron
++ *
++ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/videodev.h>
++#include <linux/slab.h>
++#include <linux/i2c.h>
++#include <linux/log2.h>
++
++#include <media/v4l2-common.h>
++#include <media/v4l2-chip-ident.h>
++#include <media/soc_camera.h>
++
++/* mt9m001 i2c address 0x5d
++ * The platform has to define i2c_board_info
++ * and call i2c_register_board_info() */
++
++/* mt9m001 selected register addresses */
++#define MT9M001_CHIP_VERSION 0x00
++#define MT9M001_ROW_START 0x01
++#define MT9M001_COLUMN_START 0x02
++#define MT9M001_WINDOW_HEIGHT 0x03
++#define MT9M001_WINDOW_WIDTH 0x04
++#define MT9M001_HORIZONTAL_BLANKING 0x05
++#define MT9M001_VERTICAL_BLANKING 0x06
++#define MT9M001_OUTPUT_CONTROL 0x07
++#define MT9M001_SHUTTER_WIDTH 0x09
++#define MT9M001_FRAME_RESTART 0x0b
++#define MT9M001_SHUTTER_DELAY 0x0c
++#define MT9M001_RESET 0x0d
++#define MT9M001_READ_OPTIONS1 0x1e
++#define MT9M001_READ_OPTIONS2 0x20
++#define MT9M001_GLOBAL_GAIN 0x35
++#define MT9M001_CHIP_ENABLE 0xF1
++
++/* must be 32 bit, bitwise coded by reg_to_int and int_to_reg below */
++struct reg_access {
++ u16 value;
++ u8 address;
++ u8 rw;
++} __attribute__ ((packed));
++
++union reg_access_32 {
++ struct reg_access reg;
++ u32 ctrl;
++};
++
++enum reg_rw { REG_READ = 0, REG_WRITE = 1, };
++
++/*
++#define reg_to_int(rw, address, value) ({ \
++ union reg_access_32 u = {.reg = {value, address, rw}}; \
++ u.i32; \
++})
++*/
++
++/* rw has to be numerically most significant, because
++ * maximum, minimum and value are signed */
++#ifdef __LITTLE_ENDIAN
++#define reg_to_int(rw, address, value) (((value) & 0xffff) | (((address) & 0xff) << 16) | (((rw) & 0x7f) << 24))
++#else
++#define reg_to_int(rw, address, value) ((((value) & 0xffff) << 16) | (((address) & 0xff) << 8) | ((rw) & 0x7f))
++#endif
++
++static const struct soc_camera_data_format mt9m001_colour_formats[]= {
++ {
++ .name = "RGB Bayer (sRGB)",
++ .depth = 16,
++ .fourcc = V4L2_PIX_FMT_SBGGR8,
++ .colorspace = V4L2_COLORSPACE_SRGB,
++ }
++};
++
++static const struct soc_camera_data_format mt9m001_monochrome_formats[]= {
++ {
++ .name = "Monochrome 10 bit",
++ .depth = 10,
++ .fourcc = V4L2_PIX_FMT_Y16,
++ }, {
++ .name = "Monochrome 8 bit",
++ .depth = 8,
++ .fourcc = V4L2_PIX_FMT_GREY,
++ },
++};
++
++enum mt9m001_model {
++ MT9M001C12ST,
++ MT9M001C12STM
++};
++
++struct mt9m001 {
++ struct i2c_client *client;
++ struct soc_camera_device icd;
++ enum mt9m001_model model;
++ struct i2c_client *data_switch;
++ unsigned char autoexposure;
++ unsigned char datawidth;
++};
++
++static int reg_read(struct soc_camera_device *icd, const u8 reg)
++{
++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
++ struct i2c_client *client = mt9m001->client;
++ s32 data = i2c_smbus_read_word_data(client, reg);
++ return data < 0 ? data : swab16(data);
++}
++
++static int reg_write(struct soc_camera_device *icd, const u8 reg,
++ const u16 data)
++{
++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
++ return i2c_smbus_write_word_data(mt9m001->client, reg, swab16(data));
++}
++
++static int reg_set(struct soc_camera_device *icd, const u8 reg,
++ const u16 data)
++{
++ int ret;
++
++ if ((ret = reg_read(icd, reg)) < 0)
++ return ret;
++ return reg_write(icd, reg, ret | data);
++}
++
++static int reg_clear(struct soc_camera_device *icd, const u8 reg,
++ const u16 data)
++{
++ int ret;
++
++ if ((ret = reg_read(icd, reg)) < 0)
++ return ret;
++ return reg_write(icd, reg, ret & ~data);
++}
++
++static int mt9m001_init(struct soc_camera_device *icd)
++{
++ int ret;
++
++ /* Disable chip, synchronous option update */
++ dev_dbg(icd->vdev->dev, "%s\n", __FUNCTION__);
++
++ ret = reg_write(icd, MT9M001_RESET, 1);
++ if (ret >= 0)
++ ret = reg_write(icd, MT9M001_RESET, 0);
++ if (ret >= 0)
++ ret = reg_write(icd, MT9M001_OUTPUT_CONTROL, 0);
++
++ return ret >= 0 ? 0 : -EIO;
++}
++
++static int mt9m001_release(struct soc_camera_device *icd)
++{
++ /* Disable the chip */
++ reg_write(icd, MT9M001_OUTPUT_CONTROL, 0);
++ return 0;
++}
++
++static int mt9m001_start_capture(struct soc_camera_device *icd)
++{
++ /* Switch to master "normal" mode */
++ if (reg_write(icd, MT9M001_OUTPUT_CONTROL, 2) < 0)
++ return -EIO;
++ return 0;
++}
++
++static int mt9m001_stop_capture(struct soc_camera_device *icd)
++{
++ /* Stop sensor readout */
++ if (reg_write(icd, MT9M001_OUTPUT_CONTROL, 0) < 0)
++ return -EIO;
++ return 0;
++}
++
++extern int pca9536_set_level(struct i2c_client *client, u8 pin, u8 level);
++
++static int external_bus_switch(struct i2c_client *extender, int go8bit)
++{
++ if (! extender)
++ return -ENODEV;
++
++#ifdef CONFIG_MT9M001_PCA9536_SWITCH
++ return pca9536_set_level(extender, 0, go8bit);
++#else
++ return -ENODEV;
++#endif
++}
++
++static int mt9m001_set_capture_format(struct soc_camera_device *icd, __u32 pixfmt,
++ struct v4l2_rect *rect, unsigned int flags)
++{
++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
++ unsigned int width_flag = flags & (IS_DATAWIDTH_10 | IS_DATAWIDTH_9 |
++ IS_DATAWIDTH_8);
++ int ret;
++ const u16 hblank = 9, vblank = 25;
++
++ /* MT9M001 has all capture_format parameters fixed */
++ if (! (flags & IS_MASTER) ||
++ ! (flags & IS_PCLK_SAMPLE_RISING) ||
++ ! (flags & IS_HSYNC_ACTIVE_HIGH) ||
++ ! (flags & IS_VSYNC_ACTIVE_HIGH)) {
++ return -EINVAL;
++ }
++
++ /* Only one width bit may be set */
++ if (!is_power_of_2(width_flag))
++ return -EINVAL;
++
++ if ((mt9m001->datawidth != 10 && (width_flag == IS_DATAWIDTH_10)) ||
++ (mt9m001->datawidth != 9 && (width_flag == IS_DATAWIDTH_9)) ||
++ (mt9m001->datawidth != 8 && (width_flag == IS_DATAWIDTH_8))) {
++ /* data width switch requested */
++ if (! mt9m001->data_switch)
++ return -EINVAL;
++
++ /* Well, we actually only can do 10 or 8 bits... */
++ if (width_flag == IS_DATAWIDTH_9)
++ return -EINVAL;
++ ret = external_bus_switch(mt9m001->data_switch,
++ width_flag == IS_DATAWIDTH_8);
++ if (ret < 0)
++ return ret;
++
++ mt9m001->datawidth = width_flag == IS_DATAWIDTH_8 ? 8 : 10;
++ }
++
++ /* Blanking and start values - default... */
++ ret = reg_write(icd, MT9M001_HORIZONTAL_BLANKING, hblank);
++ if (ret >= 0)
++ ret = reg_write(icd, MT9M001_VERTICAL_BLANKING, vblank);
++
++ /* The caller provides a supported format, as verified per
++ * call to icd->try_fmt_cap() */
++ if (ret >= 0)
++ ret = reg_write(icd, MT9M001_COLUMN_START, rect->left);
++ if (ret >= 0)
++ ret = reg_write(icd, MT9M001_ROW_START, rect->top);
++ if (ret >= 0)
++ ret = reg_write(icd, MT9M001_WINDOW_WIDTH, rect->width - 1);
++ if (ret >= 0)
++ ret = reg_write(icd, MT9M001_WINDOW_HEIGHT, rect->height + icd->y_skip_top - 1);
++ if (ret >= 0 && mt9m001->autoexposure) {
++ ret = reg_write(icd, MT9M001_SHUTTER_WIDTH, rect->height + icd->y_skip_top + vblank);
++ if (ret >= 0) {
++ const struct v4l2_queryctrl *qctrl =
++ soc_camera_find_qctrl(icd->ops, V4L2_CID_EXPOSURE);
++ icd->exposure = (524 + (rect->height + icd->y_skip_top + vblank - 1) *
++ (qctrl->maximum - qctrl->minimum)) /
++ 1048 + qctrl->minimum;
++ }
++ }
++
++ return ret < 0 ? ret : 0;
++}
++
++static int mt9m001_try_fmt_cap(struct soc_camera_device *icd,
++ struct v4l2_format *f)
++{
++ if (f->fmt.pix.height < 32 + icd->y_skip_top)
++ f->fmt.pix.height = 32 + icd->y_skip_top;
++ if (f->fmt.pix.height > 1024 + icd->y_skip_top)
++ f->fmt.pix.height = 1024 + icd->y_skip_top;
++ if (f->fmt.pix.width < 48)
++ f->fmt.pix.width = 48;
++ if (f->fmt.pix.width > 1280)
++ f->fmt.pix.width = 1280;
++ f->fmt.pix.width &= ~0x01; /* has to be even, unsure why was ~3 */
++
++ return 0;
++}
++
++static unsigned int mt9m001_get_datawidth(struct soc_camera_device *icd)
++{
++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
++ return mt9m001->datawidth;
++}
++
++const struct v4l2_queryctrl mt9m001_controls[] = {
++ {
++ .id = V4L2_CID_VFLIP,
++ .type = V4L2_CTRL_TYPE_BOOLEAN,
++ .name = "Flip Vertically",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 0,
++ }, {
++ .id = V4L2_CID_GAIN,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Gain",
++ .minimum = 0,
++ .maximum = 127,
++ .step = 1,
++ .default_value = 64,
++ .flags = V4L2_CTRL_FLAG_SLIDER,
++ }, {
++ .id = V4L2_CID_EXPOSURE,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Exposure",
++ .minimum = 1,
++ .maximum = 255,
++ .step = 1,
++ .default_value = 255,
++ .flags = V4L2_CTRL_FLAG_SLIDER,
++ }, {
++ .id = V4L2_CID_AUTOEXPOSURE,
++ .type = V4L2_CTRL_TYPE_BOOLEAN,
++ .name = "Automatic Exposure",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 1,
++ }, {
++ .id = V4L2_CID_PRIVATE_BASE,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Register access",
++ .minimum = reg_to_int(REG_READ, 0, 0),
++ .maximum = reg_to_int(REG_WRITE, 0xff, (1 << 16) - 1),
++ .step = 1,
++ .default_value = 1,
++ }
++};
++
++static int mt9m001_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl);
++static int mt9m001_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl);
++
++static struct soc_camera_ops mt9m001_ops = {
++ .owner = THIS_MODULE,
++ .init = mt9m001_init,
++ .release = mt9m001_release,
++ .start_capture = mt9m001_start_capture,
++ .stop_capture = mt9m001_stop_capture,
++ .set_capture_format = mt9m001_set_capture_format,
++ .try_fmt_cap = mt9m001_try_fmt_cap,
++ .formats = NULL, /* Filled in later depending on the */
++ .num_formats = 0, /* camera type and data widths */
++ .get_datawidth = mt9m001_get_datawidth,
++ .controls = mt9m001_controls,
++ .num_controls = ARRAY_SIZE(mt9m001_controls),
++ .get_control = mt9m001_get_control,
++ .set_control = mt9m001_set_control,
++};
++
++static int mt9m001_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl)
++{
++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
++ int data;
++
++ switch (ctrl->id) {
++ case V4L2_CID_VFLIP:
++ data = reg_read(icd, MT9M001_READ_OPTIONS2);
++ if (data < 0)
++ return -EIO;
++ ctrl->value = !!(data & 0x8000);
++ break;
++ case V4L2_CID_AUTOEXPOSURE:
++ ctrl->value = mt9m001->autoexposure;
++ break;
++ case V4L2_CID_PRIVATE_BASE:
++ if (1) {
++ union reg_access_32 u;
++
++ u.ctrl = ctrl->value;
++ if (u.reg.rw != REG_READ)
++ return -EINVAL;
++ data = reg_read(icd, u.reg.address);
++ if (data < 0)
++ return -EIO;
++ u.reg.value = data;
++ ctrl->value = u.ctrl;
++ }
++ }
++ return 0;
++}
++
++static int mt9m001_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl)
++{
++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
++ const struct v4l2_queryctrl *qctrl;
++ int data;
++
++ qctrl = soc_camera_find_qctrl(&mt9m001_ops, ctrl->id);
++
++ if (!qctrl)
++ return -EINVAL;
++
++ switch (ctrl->id) {
++ case V4L2_CID_VFLIP:
++ if (ctrl->value)
++ data = reg_set(icd, MT9M001_READ_OPTIONS2, 0x8000);
++ else
++ data = reg_clear(icd, MT9M001_READ_OPTIONS2, 0x8000);
++ if (data < 0)
++ return -EIO;
++ break;
++ case V4L2_CID_GAIN:
++ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum)
++ return -EINVAL;
++ /* See Datasheet Table 7, Gain settings. */
++ if (ctrl->value <= qctrl->default_value) {
++ /* Pack it into 0..1 step 0.125, register values 0..8 */
++ unsigned long range = qctrl->default_value - qctrl->minimum;
++ data = ((ctrl->value - qctrl->minimum) * 8 + range / 2) / range;
++
++ printk("Setting gain %d\n", data);
++ data = reg_write(icd, MT9M001_GLOBAL_GAIN, data);
++ if (data < 0)
++ return -EIO;
++ } else {
++ /* Pack it into 1.125..15 variable step, register values 9..67 */
++ /* We assume qctrl->maximum - qctrl->default_value - 1 > 0 */
++ unsigned long range = qctrl->maximum - qctrl->default_value - 1;
++ unsigned long gain = ((ctrl->value - qctrl->default_value - 1) *
++ 111 + range / 2) / range + 9;
++
++ if (gain <= 32)
++ data = gain;
++ else if (gain <= 64)
++ data = ((gain - 32) * 16 + 16) / 32 + 80;
++ else
++ data = ((gain - 64) * 7 + 28) / 56 + 96;
++
++ dev_info(&icd->dev, "Setting gain from %d to %d\n",
++ reg_read(icd, MT9M001_GLOBAL_GAIN), data);
++ data = reg_write(icd, MT9M001_GLOBAL_GAIN, data);
++ if (data < 0)
++ return -EIO;
++ }
++
++ /* Success */
++ icd->gain = ctrl->value;
++ break;
++ case V4L2_CID_EXPOSURE:
++ /* mt9m001 has maximum == default */
++ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum)
++ return -EINVAL;
++ else {
++ unsigned long range = qctrl->maximum - qctrl->minimum;
++ unsigned long shutter = ((ctrl->value - qctrl->minimum) * 1048 +
++ range / 2) / range + 1;
++
++ dev_info(&icd->dev, "Setting shutter width from %d to %lu\n",
++ reg_read(icd, MT9M001_SHUTTER_WIDTH), shutter);
++ if (reg_write(icd, MT9M001_SHUTTER_WIDTH, shutter) < 0)
++ return -EIO;
++ icd->exposure = ctrl->value;
++ mt9m001->autoexposure = 0;
++ }
++ break;
++ case V4L2_CID_AUTOEXPOSURE:
++ if (ctrl->value) {
++ const u16 vblank = 25;
++ if (reg_write(icd, MT9M001_SHUTTER_WIDTH, icd->height +
++ icd->y_skip_top + vblank) < 0)
++ return -EIO;
++ qctrl = soc_camera_find_qctrl(icd->ops, V4L2_CID_EXPOSURE);
++ icd->exposure = (524 + (icd->height + icd->y_skip_top + vblank - 1) *
++ (qctrl->maximum - qctrl->minimum)) /
++ 1048 + qctrl->minimum;
++ mt9m001->autoexposure = 1;
++ } else
++ mt9m001->autoexposure = 0;
++ break;
++ case V4L2_CID_PRIVATE_BASE:
++ if (1) {
++ union reg_access_32 u;
++
++ u.ctrl = ctrl->value;
++ if (u.reg.rw != REG_WRITE)
++ return -EINVAL;
++ data = reg_write(icd, u.reg.address, u.reg.value);
++ if (data < 0)
++ return -EIO;
++ }
++ }
++ return 0;
++}
++
++/* Interface active, can use i2c. If it fails, it can indeed mean, that
++ * this wasn't our capture interface, so, we wait for the right one */
++static int mt9m001_video_probe(struct soc_camera_device *icd)
++{
++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
++ s32 data;
++ int ret;
++
++ /* We must have a parent by now. And it cannot be a wrong one.
++ * So this entire test is completely redundant. */
++ if (!icd->dev.parent ||
++ to_soc_camera_host(icd->dev.parent)->nr != icd->iface)
++ return -ENODEV;
++
++ /* Enable the chip */
++ data = reg_write(&mt9m001->icd, MT9M001_CHIP_ENABLE, 1);
++ dev_dbg(&icd->dev, "write: %d\n", data);
++
++ /* Read out the chip version register */
++ data = reg_read(icd, MT9M001_CHIP_VERSION);
++
++ /* must be 0x8411 or 0x8421 for colour sensor and 8431 for bw */
++ switch (data) {
++ case 0x8411:
++ case 0x8421:
++ mt9m001->model = MT9M001C12ST;
++ mt9m001_ops.formats = mt9m001_colour_formats;
++ mt9m001_ops.num_formats = ARRAY_SIZE(mt9m001_colour_formats);
++ break;
++ case 0x8431:
++ mt9m001->model = MT9M001C12STM;
++ mt9m001_ops.formats = mt9m001_monochrome_formats;
++ if (mt9m001->client->dev.platform_data)
++ mt9m001_ops.num_formats = ARRAY_SIZE(mt9m001_monochrome_formats);
++ else
++ mt9m001_ops.num_formats = 1;
++ break;
++ default:
++ ret = -ENODEV;
++ dev_err(&icd->dev,
++ "No MT9M001 chip detected, register read %x\n", data);
++ goto ei2c;
++ }
++
++ dev_info(&icd->dev, "Detected a MT9M001 chip ID %x (%s)\n", data,
++ data == 0x8431 ? "C12STM" : "C12ST");
++
++ /* Now that we know the model, we can start video */
++ ret = soc_camera_video_start(icd);
++ if (ret)
++ goto eisis;
++
++ return 0;
++
++eisis:
++ei2c:
++ return ret;
++}
++
++static void mt9m001_video_remove(struct soc_camera_device *icd)
++{
++ struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
++
++ dev_dbg(&icd->dev, "Video %x removed: %p, %p\n", mt9m001->client->addr,
++ mt9m001->icd.dev.parent, mt9m001->icd.vdev);
++ soc_camera_video_stop(&mt9m001->icd);
++}
++
++static int mt9m001_probe(struct i2c_client *client)
++{
++ struct mt9m001 *mt9m001;
++ struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
++ int ret;
++
++ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) {
++ pr_debug("%s: I2C-Adapter doesn't support I2C_FUNC_SMBUS_WORD\n", __FUNCTION__);
++ return -EIO;
++ }
++
++ if (!(mt9m001 = kzalloc(sizeof(struct mt9m001), GFP_KERNEL)))
++ return -ENOMEM;
++
++ mt9m001->client = client;
++ i2c_set_clientdata(client, mt9m001);
++
++ /* Second stage probe - when a capture adapter is there */
++ mt9m001->icd.probe = mt9m001_video_probe;
++ mt9m001->icd.remove = mt9m001_video_remove;
++ mt9m001->icd.ops = &mt9m001_ops;
++ mt9m001->icd.control = &client->dev;
++ mt9m001->icd.x_min = 20;
++ mt9m001->icd.y_min = 12;
++ mt9m001->icd.x_current = 20;
++ mt9m001->icd.y_current = 12;
++ mt9m001->icd.width_min = 48;
++ mt9m001->icd.width_max = 1280;
++ mt9m001->icd.height_min = 32;
++ mt9m001->icd.height_max = 1024;
++ mt9m001->icd.y_skip_top = 1;
++ /* Default datawidth - this is the only width this camera (normally)
++ * supports. It is only with extra logic that it can support
++ * other widths. Therefore it seems to be a sensible default. */
++ mt9m001->datawidth = 10;
++ /* Simulated autoexposure. If enabled, we calculate shutter width
++ * ourselves in the driver based on vertical blanking and frame width */
++ mt9m001->autoexposure = 1;
++
++ if (client->dev.platform_data) {
++ struct soc_camera_link *icl = client->dev.platform_data;
++ /* We have a data bus switch. We call pca9536 functions
++ * explicitly by name so the driver will not be unloaded,
++ * and we'll check mt9m001->data_switch anyway every time
++ * before calling. The only concern is that the driver
++ * doesn't detach itself from the device, but so far it is
++ * not supported by the I2C layer */
++ if (icl->extender)
++ mt9m001->data_switch = *icl->extender;
++ mt9m001->icd.iface = icl->bus_id;
++ }
++
++ ret = soc_camera_device_register(&mt9m001->icd);
++ if (ret)
++ goto eisdr;
++
++ return 0;
++
++eisdr:
++ kfree(mt9m001);
++ return ret;
++}
++
++static int mt9m001_remove(struct i2c_client *client)
++{
++ struct mt9m001 *mt9m001 = i2c_get_clientdata(client);
++
++ soc_camera_device_unregister(&mt9m001->icd);
++ kfree(mt9m001);
++
++ return 0;
++}
++
++static struct i2c_driver mt9m001_i2c_driver = {
++ .driver = {
++ .name = "mt9m001",
++ },
++ .probe = mt9m001_probe,
++ .remove = mt9m001_remove,
++};
++
++static int __init mt9m001_mod_init(void)
++{
++ return i2c_add_driver(&mt9m001_i2c_driver);
++}
++
++static void __exit mt9m001_mod_exit(void)
++{
++ i2c_del_driver(&mt9m001_i2c_driver);
++}
++
++module_init(mt9m001_mod_init);
++module_exit(mt9m001_mod_exit);
++
++MODULE_DESCRIPTION("Micron MT9M001 Camera driver");
++MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
++MODULE_LICENSE("GPL");
+--
+1.5.3.4
+
+--
+video4linux-list mailing list
+Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
+https://www.redhat.com/mailman/listinfo/video4linux-list
+
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml
new file mode 100644
index 0000000000..33fbf12e20
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l5-8.patch.eml
@@ -0,0 +1,882 @@
+Path: news.gmane.org!not-for-mail
+From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+Newsgroups: gmane.comp.video.video4linux
+Subject: [RFC PATCH 5/8] Add support for the MT9V022 camera
+Date: Wed, 23 Jan 2008 18:41:55 +0100 (CET)
+Lines: 811
+Approved: news@gmane.org
+Message-ID: <Pine.LNX.4.64.0801231826270.4932@axis700.grange>
+References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+NNTP-Posting-Host: lo.gmane.org
+Mime-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+X-Trace: ger.gmane.org 1201110170 28931 80.91.229.12 (23 Jan 2008 17:42:50 GMT)
+X-Complaints-To: usenet@ger.gmane.org
+NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:50 +0000 (UTC)
+To: video4linux-list@redhat.com
+Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:43:08 2008
+Return-path: <video4linux-list-bounces@redhat.com>
+Envelope-to: rh-video4linux-list@gmane.org
+Original-Received: from hormel.redhat.com ([209.132.177.30])
+ by lo.gmane.org with esmtp (Exim 4.50)
+ id 1JHjcd-0003BV-40
+ for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:47 +0100
+Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
+ by hormel.redhat.com (Postfix) with ESMTP
+ id C4D7773103; Wed, 23 Jan 2008 12:42:17 -0500 (EST)
+Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
+ [172.16.52.254])
+ by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
+ m0NHgEOS017265 for <video4linux-list@listman.util.phx.redhat.com>;
+ Wed, 23 Jan 2008 12:42:14 -0500
+Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
+ by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHgDux028248
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:42:13 -0500
+Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
+ by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfhB0001132
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:43 -0500
+Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:36 -0000
+Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
+ [87.189.47.31]
+ by mail.gmx.net (mp007) with SMTP; 23 Jan 2008 18:41:36 +0100
+X-Authenticated: #20450766
+X-Provags-ID: V01U2FsdGVkX195mwEUb8x5N9fm4LtKVLZ+GalahBZqOqI6J/GHUG
+ kn7bBfBiSjX3u4
+Original-Received: from lyakh (helo=localhost)
+ by axis700.grange with local-esmtp (Exim 4.63)
+ (envelope-from <g.liakhovetski@gmx.de>) id 1JHjbn-00029z-Tk
+ for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:41:55 +0100
+X-X-Sender: lyakh@axis700.grange
+In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+X-Y-GMX-Trusted: 0
+X-RedHat-Spam-Score: 0
+X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
+X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
+X-loop: video4linux-list@redhat.com
+X-BeenThere: video4linux-list@redhat.com
+X-Mailman-Version: 2.1.5
+Precedence: junk
+List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
+List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
+List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
+List-Post: <mailto:video4linux-list@redhat.com>
+List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
+List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=subscribe>
+Original-Sender: video4linux-list-bounces@redhat.com
+Errors-To: video4linux-list-bounces@redhat.com
+Xref: news.gmane.org gmane.comp.video.video4linux:36476
+Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36476>
+
+This driver supports Micron MT9V022 colour camera.
+
+Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+---
+ drivers/media/video/Kconfig | 14 +
+ drivers/media/video/Makefile | 1 +
+ drivers/media/video/mt9v022.c | 751 +++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 766 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/video/mt9v022.c
+
+diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
+index def5246..1359f8f 100644
+--- a/drivers/media/video/Kconfig
++++ b/drivers/media/video/Kconfig
+@@ -818,6 +818,20 @@ config MT9M001_PCA9536_SWITCH
+ Select this if your MT9M001 camera uses a PCA9536 I2C GPIO
+ extender to switch between 8 and 10 bit datawidth modes
+
++config SOC_CAMERA_MT9V022
++ tristate "mt9v022 support"
++ depends on SOC_CAMERA
++ select SENSORS_PCA9536 if MT9V022_PCA9536_SWITCH
++ help
++ This driver supports MT9V022 cameras from Micron
++
++config MT9V022_PCA9536_SWITCH
++ bool "pca9536 datawidth switch for mt9v022"
++ depends on SOC_CAMERA_MT9V022
++ help
++ Select this if your MT9V022 camera uses a PCA9536 I2C GPIO
++ extender to switch between 8 and 10 bit datawidth modes
++
+ config VIDEO_PXA27X
+ tristate "PXA27x Quick Capture Interface driver"
+ depends on VIDEO_DEV && PXA27x
+diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
+index c56bfdb..6eaf0ad 100644
+--- a/drivers/media/video/Makefile
++++ b/drivers/media/video/Makefile
+@@ -119,5 +119,6 @@ obj-$(CONFIG_VIDEO_VIVI) += vivi.o
+ obj-$(CONFIG_VIDEO_PXA27X) += pxa_camera.o
+ obj-$(CONFIG_SOC_CAMERA) += soc_camera.o
+ obj-$(CONFIG_SOC_CAMERA_MT9M001) += mt9m001.o
++obj-$(CONFIG_SOC_CAMERA_MT9V022) += mt9v022.o
+
+ EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core
+diff --git a/drivers/media/video/mt9v022.c b/drivers/media/video/mt9v022.c
+new file mode 100644
+index 0000000..d13b965
+--- /dev/null
++++ b/drivers/media/video/mt9v022.c
+@@ -0,0 +1,751 @@
++/*
++ * Driver for MT9V022 CMOS Image Sensor from Micron
++ *
++ * Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/videodev.h>
++#include <linux/slab.h>
++#include <linux/i2c.h>
++#include <linux/delay.h>
++#include <linux/log2.h>
++
++#include <media/v4l2-common.h>
++#include <media/v4l2-chip-ident.h>
++#include <media/soc_camera.h>
++
++/* mt9v022 i2c address 0x48, 0x4c, 0x58, 0x5c
++ * The platform has to define i2c_board_info
++ * and call i2c_register_board_info() */
++
++static char *sensor_type;
++module_param(sensor_type, charp, S_IRUGO);
++MODULE_PARM_DESC(sensor_type, "Sensor type: \"colour\" or \"monochrome\"\n");
++
++/* mt9v022 selected register addresses */
++#define MT9V022_CHIP_VERSION 0x00
++#define MT9V022_COLUMN_START 0x01
++#define MT9V022_ROW_START 0x02
++#define MT9V022_WINDOW_HEIGHT 0x03
++#define MT9V022_WINDOW_WIDTH 0x04
++#define MT9V022_HORIZONTAL_BLANKING 0x05
++#define MT9V022_VERTICAL_BLANKING 0x06
++#define MT9V022_CHIP_CONTROL 0x07
++#define MT9V022_SHUTTER_WIDTH1 0x08
++#define MT9V022_SHUTTER_WIDTH2 0x09
++#define MT9V022_SHUTTER_WIDTH_CTRL 0x0a
++#define MT9V022_TOTAL_SHUTTER_WIDTH 0x0b
++#define MT9V022_RESET 0x0c
++#define MT9V022_READ_MODE 0x0d
++#define MT9V022_MONITOR_MODE 0x0e
++#define MT9V022_PIXEL_OPERATION_MODE 0x0f
++#define MT9V022_LED_OUT_CONTROL 0x1b
++#define MT9V022_ADC_MODE_CONTROL 0x1c
++#define MT9V022_ANALOG_GAIN 0x34
++#define MT9V022_BLACK_LEVEL_CALIB_CTRL 0x47
++#define MT9V022_PIXCLK_FV_LV 0x74
++#define MT9V022_DIGITAL_TEST_PATTERN 0x7f
++#define MT9V022_AEC_AGC_ENABLE 0xAF
++#define MT9V022_MAX_TOTAL_SHUTTER_WIDTH 0xBD
++
++/* Progressive scan, master, defaults */
++#define MT9V022_CHIP_CONTROL_DEFAULT 0x188
++
++/* must be 32 bit, bitwise coded by reg_to_int and int_to_reg below */
++struct reg_access {
++ u16 value;
++ u8 address;
++ u8 rw;
++} __attribute__ ((packed));
++
++union reg_access_32 {
++ struct reg_access reg;
++ u32 ctrl;
++};
++
++enum reg_rw { REG_READ = 0, REG_WRITE = 1, };
++
++/*
++#define reg_to_int(rw, address, value) ({ \
++ union reg_access_32 u = {.reg = {value, address, rw}}; \
++ u.i32; \
++})
++*/
++
++/* rw has to be numerically most significant, because
++ * maximum, minimum and value are signed */
++#ifdef __LITTLE_ENDIAN
++#define reg_to_int(rw, address, value) (((value) & 0xffff) | (((address) & 0xff) << 16) | (((rw) & 0x7f) << 24))
++#else
++#define reg_to_int(rw, address, value) ((((value) & 0xffff) << 16) | (((address) & 0xff) << 8) | ((rw) & 0x7f))
++#endif
++
++static const struct soc_camera_data_format mt9v022_formats[]= {
++ {
++ .name = "RGB Bayer (sRGB)",
++ .depth = 8,
++ .fourcc = V4L2_PIX_FMT_SBGGR8,
++ .colorspace = V4L2_COLORSPACE_SRGB,
++ }, {
++ .name = "RGB Bayer (sRGB)",
++ .depth = 10,
++ .fourcc = V4L2_PIX_FMT_SBGGR16,
++ .colorspace = V4L2_COLORSPACE_SRGB,
++ }, {
++ .name = "Monochrome 10 bit",
++ .depth = 10,
++ .fourcc = V4L2_PIX_FMT_Y16,
++ }, {
++ .name = "Monochrome 8 bit",
++ .depth = 8,
++ .fourcc = V4L2_PIX_FMT_GREY,
++ },
++};
++
++enum mt9v022_sensor {
++ MT9V022_SENSOR_MONOCHROME,
++ MT9V022_SENSOR_COLOUR,
++};
++
++struct mt9v022 {
++ struct i2c_client *client;
++ struct soc_camera_device icd;
++ enum mt9v022_sensor sensor;
++ struct i2c_client *data_switch;
++ u16 chip_control;
++ unsigned char datawidth;
++};
++
++static int reg_read(struct soc_camera_device *icd, const u8 reg)
++{
++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
++ struct i2c_client *client = mt9v022->client;
++ s32 data = i2c_smbus_read_word_data(client, reg);
++ return data < 0 ? data : swab16(data);
++}
++
++static int reg_write(struct soc_camera_device *icd, const u8 reg,
++ const u16 data)
++{
++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
++ return i2c_smbus_write_word_data(mt9v022->client, reg, swab16(data));
++}
++
++static int reg_set(struct soc_camera_device *icd, const u8 reg,
++ const u16 data)
++{
++ int ret;
++
++ if ((ret = reg_read(icd, reg)) < 0)
++ return ret;
++ return reg_write(icd, reg, ret | data);
++}
++
++static int reg_clear(struct soc_camera_device *icd, const u8 reg,
++ const u16 data)
++{
++ int ret;
++
++ if ((ret = reg_read(icd, reg)) < 0)
++ return ret;
++ return reg_write(icd, reg, ret & ~data);
++}
++
++static int mt9v022_init(struct soc_camera_device *icd)
++{
++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
++ int ret;
++
++ /* Almost the default mode: master, parallel, simultaneous, and an
++ * undocumented bit 0x200, which is present in table 7, but not in 8,
++ * plus snapshot mode to disable scan for now */
++// mt9v022->chip_control |= 0x10;
++ ret = reg_write(icd, MT9V022_CHIP_CONTROL, mt9v022->chip_control);
++ if (ret >= 0)
++ reg_write(icd, MT9V022_READ_MODE, 0x300);
++
++ /* All defaults */
++ if (ret >= 0)
++ ret = reg_set(icd, MT9V022_AEC_AGC_ENABLE, 0x3); /* AEC, AGC on */
++ if (ret >= 0)
++ ret = reg_write(icd, MT9V022_MAX_TOTAL_SHUTTER_WIDTH, 480);
++ if (ret >= 0)
++ ret = reg_clear(icd, MT9V022_BLACK_LEVEL_CALIB_CTRL, 1); /* default - auto */
++ if (ret >= 0)
++ ret = reg_write(icd, MT9V022_DIGITAL_TEST_PATTERN, 0);
++
++ return ret < 0 ? ret :0;
++}
++
++static int mt9v022_release(struct soc_camera_device *icd)
++{
++ /* Nothing? */
++ return 0;
++}
++
++static int mt9v022_start_capture(struct soc_camera_device *icd)
++{
++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
++ /* Switch to master "normal" mode */
++ mt9v022->chip_control &= ~0x10;
++ if (reg_write(icd, MT9V022_CHIP_CONTROL,
++ mt9v022->chip_control) < 0)
++ return -EIO;
++ return 0;
++}
++
++static int mt9v022_stop_capture(struct soc_camera_device *icd)
++{
++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
++ /* Switch to snapshot mode */
++// mt9v022->chip_control |= 0x10;
++ if (reg_write(icd, MT9V022_CHIP_CONTROL,
++ mt9v022->chip_control) < 0)
++ return -EIO;
++ return 0;
++}
++
++extern int pca9536_set_level(struct i2c_client *client, u8 pin, u8 level);
++
++static int external_bus_switch(struct i2c_client *extender, int go8bit)
++{
++ if (! extender)
++ return -ENODEV;
++
++#ifdef CONFIG_MT9V022_PCA9536_SWITCH
++ return pca9536_set_level(extender, 0, go8bit);
++#else
++ return -ENODEV;
++#endif
++}
++
++static int mt9v022_set_capture_format(struct soc_camera_device *icd, __u32 pixfmt,
++ struct v4l2_rect *rect, unsigned int flags)
++{
++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
++ unsigned int width_flag = flags & (IS_DATAWIDTH_10 | IS_DATAWIDTH_9 |
++ IS_DATAWIDTH_8);
++ u16 pixclk = 0;
++ int ret;
++
++ /* Only one width bit may be set */
++ if (!is_power_of_2(width_flag))
++ return -EINVAL;
++
++ /* The caller provides a supported format, as verified per call to
++ * icd->try_fmt_cap(), datawidth is from our supported format list */
++ switch (pixfmt) {
++ case V4L2_PIX_FMT_GREY:
++ case V4L2_PIX_FMT_Y16:
++ if (mt9v022->sensor != MT9V022_SENSOR_MONOCHROME)
++ return -EINVAL;
++ break;
++ case V4L2_PIX_FMT_SBGGR8:
++ case V4L2_PIX_FMT_SBGGR16:
++ if (mt9v022->sensor != MT9V022_SENSOR_COLOUR)
++ return -EINVAL;
++ break;
++ case 0:
++ /* No format change, only geometry */
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ /* Like in example app. Contradicts the datasheet though */
++ ret = reg_read(icd, MT9V022_AEC_AGC_ENABLE);
++ if (ret >= 0) {
++ if (ret & 1) /* Autoexposure */
++ ret = reg_write(icd, MT9V022_MAX_TOTAL_SHUTTER_WIDTH,
++ rect->height + icd->y_skip_top + 43);
++ else
++ ret = reg_write(icd, MT9V022_TOTAL_SHUTTER_WIDTH,
++ rect->height + icd->y_skip_top + 43);
++ }
++ /* Setup frame format: defaults apart from width and height */
++ if (ret >= 0)
++ ret = reg_write(icd, MT9V022_COLUMN_START, rect->left);
++ if (ret >= 0)
++ ret = reg_write(icd, MT9V022_ROW_START, rect->top);
++ if (ret >= 0)
++ /* Default 94, Phytec driver says: "width + horizontal blank >= 660" */
++ ret = reg_write(icd, MT9V022_HORIZONTAL_BLANKING,
++ rect->width > 660 - 43 ? 43 : 660 - rect->width);
++ if (ret >= 0)
++ ret = reg_write(icd, MT9V022_VERTICAL_BLANKING, 45);
++ if (ret >= 0)
++ ret = reg_write(icd, MT9V022_WINDOW_WIDTH, rect->width);
++ if (ret >= 0)
++ ret = reg_write(icd, MT9V022_WINDOW_HEIGHT, rect->height + icd->y_skip_top);
++
++ if (ret < 0)
++ return ret;
++
++ dev_dbg(&icd->dev, "Frame %ux%u pixel\n", rect->width, rect->height);
++
++ if ((mt9v022->datawidth != 10 && (width_flag == IS_DATAWIDTH_10)) ||
++ (mt9v022->datawidth != 9 && (width_flag == IS_DATAWIDTH_9)) ||
++ (mt9v022->datawidth != 8 && (width_flag == IS_DATAWIDTH_8))) {
++ /* data width switch requested */
++ if (! mt9v022->data_switch)
++ return -EINVAL;
++
++ /* Well, we actually only can do 10 or 8 bits... */
++ if (width_flag == IS_DATAWIDTH_9)
++ return -EINVAL;
++
++ ret = external_bus_switch(mt9v022->data_switch,
++ width_flag == IS_DATAWIDTH_8);
++ if (ret < 0)
++ return ret;
++
++ mt9v022->datawidth = width_flag == IS_DATAWIDTH_8 ? 8 : 10;
++ }
++
++ if (flags & IS_PCLK_SAMPLE_RISING)
++ pixclk |= 0x10;
++
++ if (! (flags & IS_HSYNC_ACTIVE_HIGH))
++ pixclk |= 0x1;
++
++ if (! (flags & IS_VSYNC_ACTIVE_HIGH))
++ pixclk |= 0x2;
++
++ if ((ret = reg_write(icd, MT9V022_PIXCLK_FV_LV, pixclk)) < 0)
++ return ret;
++
++ if (! (flags & IS_MASTER))
++ mt9v022->chip_control &= ~0x8;
++
++ if ((ret = reg_write(icd, MT9V022_CHIP_CONTROL, mt9v022->chip_control)) < 0)
++ return ret;
++
++ dev_dbg(&icd->dev, "Calculated pixclk 0x%x, chip control 0x%x\n",
++ pixclk, mt9v022->chip_control);
++
++ return 0;
++}
++
++static int mt9v022_try_fmt_cap(struct soc_camera_device *icd,
++ struct v4l2_format *f)
++{
++ if (f->fmt.pix.height < 32 + icd->y_skip_top)
++ f->fmt.pix.height = 32 + icd->y_skip_top;
++ if (f->fmt.pix.height > 480 + icd->y_skip_top)
++ f->fmt.pix.height = 480 + icd->y_skip_top;
++ if (f->fmt.pix.width < 48)
++ f->fmt.pix.width = 48;
++ if (f->fmt.pix.width > 752)
++ f->fmt.pix.width = 752;
++ f->fmt.pix.width &= ~0x03; /* ? */
++
++ return 0;
++}
++
++static unsigned int mt9v022_get_datawidth(struct soc_camera_device *icd)
++{
++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
++ return mt9v022->datawidth;
++}
++
++const struct v4l2_queryctrl mt9v022_controls[] = {
++ {
++ .id = V4L2_CID_VFLIP,
++ .type = V4L2_CTRL_TYPE_BOOLEAN,
++ .name = "Flip Vertically",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 0,
++ }, {
++ .id = V4L2_CID_HFLIP,
++ .type = V4L2_CTRL_TYPE_BOOLEAN,
++ .name = "Flip Horizontally",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 0,
++ }, {
++ .id = V4L2_CID_GAIN,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Analog Gain",
++ .minimum = 64,
++ .maximum = 127,
++ .step = 1,
++ .default_value = 64,
++ .flags = V4L2_CTRL_FLAG_SLIDER,
++ }, {
++ .id = V4L2_CID_EXPOSURE,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Exposure",
++ .minimum = 1,
++ .maximum = 255,
++ .step = 1,
++ .default_value = 255,
++ .flags = V4L2_CTRL_FLAG_SLIDER,
++ }, {
++ .id = V4L2_CID_AUTOGAIN,
++ .type = V4L2_CTRL_TYPE_BOOLEAN,
++ .name = "Automatic Gain",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 1,
++ }, {
++ .id = V4L2_CID_AUTOEXPOSURE,
++ .type = V4L2_CTRL_TYPE_BOOLEAN,
++ .name = "Automatic Exposure",
++ .minimum = 0,
++ .maximum = 1,
++ .step = 1,
++ .default_value = 1,
++ }, {
++ .id = V4L2_CID_PRIVATE_BASE,
++ .type = V4L2_CTRL_TYPE_INTEGER,
++ .name = "Register access",
++ .minimum = reg_to_int(REG_READ, 0, 0),
++ .maximum = reg_to_int(REG_WRITE, 0xff, (1 << 16) - 1),
++ .step = 1,
++ .default_value = 1,
++ }
++};
++
++static int mt9v022_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl);
++static int mt9v022_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl);
++
++static struct soc_camera_ops mt9v022_ops = {
++ .owner = THIS_MODULE,
++ .init = mt9v022_init,
++ .release = mt9v022_release,
++ .start_capture = mt9v022_start_capture,
++ .stop_capture = mt9v022_stop_capture,
++ .set_capture_format = mt9v022_set_capture_format,
++ .try_fmt_cap = mt9v022_try_fmt_cap,
++ .formats = mt9v022_formats,
++ .num_formats = ARRAY_SIZE(mt9v022_formats),
++ .get_datawidth = mt9v022_get_datawidth,
++ .controls = mt9v022_controls,
++ .num_controls = ARRAY_SIZE(mt9v022_controls),
++ .get_control = mt9v022_get_control,
++ .set_control = mt9v022_set_control,
++};
++
++static int mt9v022_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl)
++{
++ int data;
++
++ switch (ctrl->id) {
++ case V4L2_CID_VFLIP:
++ data = reg_read(icd, MT9V022_READ_MODE);
++ if (data < 0)
++ return -EIO;
++ ctrl->value = !!(data & 0x10);
++ break;
++ case V4L2_CID_HFLIP:
++ data = reg_read(icd, MT9V022_READ_MODE);
++ if (data < 0)
++ return -EIO;
++ ctrl->value = !!(data & 0x20);
++ break;
++ case V4L2_CID_AUTOEXPOSURE:
++ data = reg_read(icd, MT9V022_AEC_AGC_ENABLE);
++ if (data < 0)
++ return -EIO;
++ ctrl->value = !!(data & 0x1);
++ break;
++ case V4L2_CID_AUTOGAIN:
++ data = reg_read(icd, MT9V022_AEC_AGC_ENABLE);
++ if (data < 0)
++ return -EIO;
++ ctrl->value = !!(data & 0x2);
++ break;
++ case V4L2_CID_PRIVATE_BASE:
++ if (1) {
++ union reg_access_32 u;
++
++ u.ctrl = ctrl->value;
++ if (u.reg.rw != REG_READ)
++ return -EINVAL;
++ data = reg_read(icd, u.reg.address);
++ if (data < 0)
++ return -EIO;
++ u.reg.value = data;
++ ctrl->value = u.ctrl;
++ }
++ }
++ return 0;
++}
++
++static int mt9v022_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl)
++{
++ int data;
++ const struct v4l2_queryctrl *qctrl;
++
++ qctrl = soc_camera_find_qctrl(&mt9v022_ops, ctrl->id);
++
++ if (!qctrl)
++ return -EINVAL;
++
++ switch (ctrl->id) {
++ case V4L2_CID_VFLIP:
++ if (ctrl->value)
++ data = reg_set(icd, MT9V022_READ_MODE, 0x10);
++ else
++ data = reg_clear(icd, MT9V022_READ_MODE, 0x10);
++ if (data < 0)
++ return -EIO;
++ break;
++ case V4L2_CID_HFLIP:
++ if (ctrl->value)
++ data = reg_set(icd, MT9V022_READ_MODE, 0x20);
++ else
++ data = reg_clear(icd, MT9V022_READ_MODE, 0x20);
++ if (data < 0)
++ return -EIO;
++ break;
++ case V4L2_CID_GAIN:
++ /* mt9v022 has minimum == default */
++ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum)
++ return -EINVAL;
++ else {
++ unsigned long range = qctrl->maximum - qctrl->minimum;
++ /* Datasheet says 16 to 64. autogain only works properly
++ * after setting gain to maximum 14. Larger values
++ * produce "white fly" noise effect. On the whole,
++ * manually setting analog gain does no good. */
++ unsigned long gain = ((ctrl->value - qctrl->minimum) * 10 +
++ range / 2) / range + 4;
++ if (gain >= 32)
++ gain &= ~1;
++ /* The user wants to set gain manually, hope, she
++ * knows, what she's doing... Switch AGC off. */
++
++ if (reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x2) < 0)
++ return -EIO;
++
++ dev_info(&icd->dev, "Setting gain from %d to %lu\n",
++ reg_read(icd, MT9V022_ANALOG_GAIN), gain);
++ if (reg_write(icd, MT9V022_ANALOG_GAIN, gain) < 0)
++ return -EIO;
++ icd->gain = ctrl->value;
++ }
++ break;
++ case V4L2_CID_EXPOSURE:
++ /* mt9v022 has maximum == default */
++ if (ctrl->value > qctrl->maximum || ctrl->value < qctrl->minimum)
++ return -EINVAL;
++ else {
++ unsigned long range = qctrl->maximum - qctrl->minimum;
++ unsigned long shutter = ((ctrl->value - qctrl->minimum) * 479 +
++ range / 2) / range + 1;
++ /* The user wants to set shutter width manually, hope, she
++ * knows, what she's doing... Switch AEC off. */
++
++ if (reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x1) < 0)
++ return -EIO;
++
++ dev_info(&icd->dev, "Setting shutter width from %d to %lu\n",
++ reg_read(icd, MT9V022_TOTAL_SHUTTER_WIDTH), shutter);
++ if (reg_write(icd, MT9V022_TOTAL_SHUTTER_WIDTH, shutter) < 0)
++ return -EIO;
++ icd->exposure = ctrl->value;
++ }
++ break;
++ case V4L2_CID_AUTOGAIN:
++ if (ctrl->value)
++ data = reg_set(icd, MT9V022_AEC_AGC_ENABLE, 0x2);
++ else
++ data = reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x2);
++ if (data < 0)
++ return -EIO;
++ break;
++ case V4L2_CID_AUTOEXPOSURE:
++ if (ctrl->value)
++ data = reg_set(icd, MT9V022_AEC_AGC_ENABLE, 0x1);
++ else
++ data = reg_clear(icd, MT9V022_AEC_AGC_ENABLE, 0x1);
++ if (data < 0)
++ return -EIO;
++ break;
++ case V4L2_CID_PRIVATE_BASE:
++ if (1) {
++ union reg_access_32 u;
++
++ u.ctrl = ctrl->value;
++ if (u.reg.rw != REG_WRITE)
++ return -EINVAL;
++ data = reg_write(icd, u.reg.address, u.reg.value);
++ if (data < 0)
++ return -EIO;
++ }
++ }
++ return 0;
++}
++
++/* Interface active, can use i2c. If it fails, it can indeed mean, that
++ * this wasn't our capture interface, so, we wait for the right one */
++static int mt9v022_video_probe(struct soc_camera_device *icd)
++{
++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
++ s32 data;
++ int ret;
++
++ if (!icd->dev.parent ||
++ to_soc_camera_host(icd->dev.parent)->nr != icd->iface)
++ return -ENODEV;
++
++ /* Read out the chip version register */
++ data = reg_read(icd, MT9V022_CHIP_VERSION);
++
++ /* must be 0x1311 or 0x1313 */
++ if (data != 0x1311 && data != 0x1313) {
++ ret = -ENODEV;
++ dev_info(&icd->dev, "No MT9V022 detected, ID register 0x%x\n",
++ data);
++ goto ei2c;
++ }
++
++ /* Soft reset */
++ ret = reg_write(icd, MT9V022_RESET, 1);
++ if (ret < 0)
++ goto ei2c;
++ /* 15 clock cycles */
++ udelay(200);
++ if (reg_read(icd, MT9V022_RESET)) {
++ dev_err(&icd->dev, "Resetting MT9V022 failed!\n");
++ goto ei2c;
++ }
++
++ /* Set monochrome or colour sensor type */
++ if (sensor_type && (!strcmp("colour", sensor_type) ||
++ !strcmp("color", sensor_type))) {
++ ret = reg_write(icd, MT9V022_PIXEL_OPERATION_MODE, 4 | 0x11);
++ mt9v022->sensor = MT9V022_SENSOR_COLOUR;
++ } else {
++ ret = reg_write(icd, MT9V022_PIXEL_OPERATION_MODE, 0x11);
++ mt9v022->sensor = MT9V022_SENSOR_MONOCHROME;
++ }
++
++ if (ret >= 0)
++ ret = soc_camera_video_start(icd);
++ if (ret < 0)
++ goto eisis;
++
++ dev_info(&icd->dev, "Detected a MT9V022 chip ID %x, %s sensor\n",
++ data, mt9v022->sensor == MT9V022_SENSOR_MONOCHROME ?
++ "monochrome" : "colour");
++
++ return 0;
++
++eisis:
++ei2c:
++ return ret;
++}
++
++static void mt9v022_video_remove(struct soc_camera_device *icd)
++{
++ struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
++
++ dev_dbg(&icd->dev, "Video %x removed: %p, %p\n", mt9v022->client->addr,
++ mt9v022->icd.dev.parent, mt9v022->icd.vdev);
++ soc_camera_video_stop(&mt9v022->icd);
++}
++
++static int mt9v022_probe(struct i2c_client *client)
++{
++ struct mt9v022 *mt9v022;
++ struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
++ int ret;
++
++ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_WORD_DATA)) {
++ pr_debug("%s: I2C-Adapter doesn't support I2C_FUNC_SMBUS_WORD\n", __FUNCTION__);
++ return -EIO;
++ }
++
++ if (!(mt9v022 = kzalloc(sizeof(struct mt9v022), GFP_KERNEL)))
++ return -ENOMEM;
++
++ mt9v022->chip_control = MT9V022_CHIP_CONTROL_DEFAULT;
++ mt9v022->client = client;
++ i2c_set_clientdata(client, mt9v022);
++
++ mt9v022->icd.probe = mt9v022_video_probe;
++ mt9v022->icd.remove = mt9v022_video_remove;
++ mt9v022->icd.ops = &mt9v022_ops;
++ mt9v022->icd.control = &client->dev;
++ mt9v022->icd.x_min = 1;
++ mt9v022->icd.y_min = 4;
++ mt9v022->icd.x_current = 1;
++ mt9v022->icd.y_current = 4;
++ mt9v022->icd.width_min = 48;
++ mt9v022->icd.width_max = 752;
++ mt9v022->icd.height_min = 32;
++ mt9v022->icd.height_max = 480;
++ mt9v022->icd.y_skip_top = 1;
++ /* Default datawidth - this is the only width this camera (normally)
++ * supports. It is only with extra logic that it can support
++ * other widths. Therefore it seems to be a sensible default. */
++ mt9v022->datawidth = 10;
++
++ if (client->dev.platform_data) {
++ struct soc_camera_link *icl = client->dev.platform_data;
++ /* We have a data bus switch. We call pca9536 functions
++ * explicitly by name so the driver will not be unloaded,
++ * and we'll check mt9v022->data_switch anyway every time
++ * before calling. The only concern is that the driver
++ * doesn't detach itself from the device, but so far it is
++ * not supported by the I2C layer */
++ if (icl->extender)
++ mt9v022->data_switch = *icl->extender;
++ mt9v022->icd.iface = icl->bus_id;
++ }
++
++ ret = soc_camera_device_register(&mt9v022->icd);
++ if (ret)
++ goto eisdr;
++
++ return 0;
++
++eisdr:
++ kfree(mt9v022);
++ return ret;
++}
++
++static int mt9v022_remove(struct i2c_client *client)
++{
++ struct mt9v022 *mt9v022 = i2c_get_clientdata(client);
++
++ soc_camera_device_unregister(&mt9v022->icd);
++ kfree(mt9v022);
++
++ return 0;
++}
++
++static struct i2c_driver mt9v022_i2c_driver = {
++ .driver = {
++ .name = "mt9v022",
++ },
++ .probe = mt9v022_probe,
++ .remove = mt9v022_remove,
++};
++
++static int __init mt9v022_mod_init(void)
++{
++ return i2c_add_driver(&mt9v022_i2c_driver);
++}
++
++static void __exit mt9v022_mod_exit(void)
++{
++ i2c_del_driver(&mt9v022_i2c_driver);
++}
++
++module_init(mt9v022_mod_init);
++module_exit(mt9v022_mod_exit);
++
++MODULE_DESCRIPTION("Micron MT9V022 Camera driver");
++MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
++MODULE_LICENSE("GPL");
+--
+1.5.3.4
+
+--
+video4linux-list mailing list
+Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
+https://www.redhat.com/mailman/listinfo/video4linux-list
+
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml
new file mode 100644
index 0000000000..bc771f238b
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l6-8.patch.eml
@@ -0,0 +1,100 @@
+Path: news.gmane.org!not-for-mail
+From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+Newsgroups: gmane.comp.video.video4linux
+Subject: [RFC PATCH 6/8] Add V4L2_CID_AUTOEXPOSURE control
+Date: Wed, 23 Jan 2008 18:42:01 +0100 (CET)
+Lines: 29
+Approved: news@gmane.org
+Message-ID: <Pine.LNX.4.64.0801231827200.4932@axis700.grange>
+References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+NNTP-Posting-Host: lo.gmane.org
+Mime-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+X-Trace: ger.gmane.org 1201110161 28894 80.91.229.12 (23 Jan 2008 17:42:41 GMT)
+X-Complaints-To: usenet@ger.gmane.org
+NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:41 +0000 (UTC)
+To: video4linux-list@redhat.com
+Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:43:01 2008
+Return-path: <video4linux-list-bounces@redhat.com>
+Envelope-to: rh-video4linux-list@gmane.org
+Original-Received: from hormel.redhat.com ([209.132.177.30])
+ by lo.gmane.org with esmtp (Exim 4.50)
+ id 1JHjcY-000394-S3
+ for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:43 +0100
+Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
+ by hormel.redhat.com (Postfix) with ESMTP
+ id 3B00D730EB; Wed, 23 Jan 2008 12:42:16 -0500 (EST)
+Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
+ [172.16.52.254])
+ by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
+ m0NHgEoZ017266 for <video4linux-list@listman.util.phx.redhat.com>;
+ Wed, 23 Jan 2008 12:42:14 -0500
+Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
+ by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHgDXf028250
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:42:13 -0500
+Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
+ by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfl3q001210
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:48 -0500
+Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:42 -0000
+Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
+ [87.189.47.31]
+ by mail.gmx.net (mp003) with SMTP; 23 Jan 2008 18:41:42 +0100
+X-Authenticated: #20450766
+X-Provags-ID: V01U2FsdGVkX19s1mA+rThsOt7hg+tJ7j4mHAPKhlRXDzhjWNVMNr
+ iM1Yi7GSzlRBY8
+Original-Received: from lyakh (helo=localhost)
+ by axis700.grange with local-esmtp (Exim 4.63)
+ (envelope-from <g.liakhovetski@gmx.de>) id 1JHjbt-0002A2-Vj
+ for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:42:01 +0100
+X-X-Sender: lyakh@axis700.grange
+In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+X-Y-GMX-Trusted: 0
+X-RedHat-Spam-Score: 0
+X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
+X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
+X-loop: video4linux-list@redhat.com
+X-BeenThere: video4linux-list@redhat.com
+X-Mailman-Version: 2.1.5
+Precedence: junk
+List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
+List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
+List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
+List-Post: <mailto:video4linux-list@redhat.com>
+List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
+List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=subscribe>
+Original-Sender: video4linux-list-bounces@redhat.com
+Errors-To: video4linux-list-bounces@redhat.com
+Xref: news.gmane.org gmane.comp.video.video4linux:36474
+Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36474>
+
+The MT9V022 camera has hardware AEC support, that can be switched on and
+off in software. MT9M001 emulates Autoexposure control in software. Add a
+V4L2 control, similar to already present Autogain.
+
+Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+---
+ include/linux/videodev2.h | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
+index ae9b24c..05b8c22 100644
+--- a/include/linux/videodev2.h
++++ b/include/linux/videodev2.h
+@@ -946,6 +946,7 @@ struct v4l2_querymenu
+ #define V4L2_CID_HCENTER (V4L2_CID_BASE+22)
+ #define V4L2_CID_VCENTER (V4L2_CID_BASE+23)
+ #define V4L2_CID_LASTP1 (V4L2_CID_BASE+24) /* last CID + 1 */
++#define V4L2_CID_AUTOEXPOSURE (V4L2_CID_BASE+25)
+
+ /* MPEG-class control IDs defined by V4L2 */
+ #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900)
+--
+1.5.3.4
+
+--
+video4linux-list mailing list
+Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
+https://www.redhat.com/mailman/listinfo/video4linux-list
+
diff --git a/packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml b/packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml
new file mode 100644
index 0000000000..31d42cfbee
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/pxav4l7-8.patch.eml
@@ -0,0 +1,113 @@
+Path: news.gmane.org!not-for-mail
+From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
+Newsgroups: gmane.comp.video.video4linux
+Subject: [RFC PATCH 7/8] Add two new fourcc codes for 16bpp formats
+Date: Wed, 23 Jan 2008 18:42:09 +0100 (CET)
+Lines: 42
+Approved: news@gmane.org
+Message-ID: <Pine.LNX.4.64.0801231830490.4932@axis700.grange>
+References: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+NNTP-Posting-Host: lo.gmane.org
+Mime-Version: 1.0
+Content-Type: TEXT/PLAIN; charset=US-ASCII
+X-Trace: ger.gmane.org 1201110167 28919 80.91.229.12 (23 Jan 2008 17:42:47 GMT)
+X-Complaints-To: usenet@ger.gmane.org
+NNTP-Posting-Date: Wed, 23 Jan 2008 17:42:47 +0000 (UTC)
+To: video4linux-list@redhat.com
+Original-X-From: video4linux-list-bounces@redhat.com Wed Jan 23 18:43:06 2008
+Return-path: <video4linux-list-bounces@redhat.com>
+Envelope-to: rh-video4linux-list@gmane.org
+Original-Received: from hormel.redhat.com ([209.132.177.30])
+ by lo.gmane.org with esmtp (Exim 4.50)
+ id 1JHjci-0003Dp-8K
+ for rh-video4linux-list@gmane.org; Wed, 23 Jan 2008 18:42:52 +0100
+Original-Received: from listman.util.phx.redhat.com (listman.util.phx.redhat.com [10.8.4.110])
+ by hormel.redhat.com (Postfix) with ESMTP
+ id 6BF2372FF8; Wed, 23 Jan 2008 12:42:25 -0500 (EST)
+Original-Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com
+ [172.16.52.254])
+ by listman.util.phx.redhat.com (8.13.1/8.13.1) with ESMTP id
+ m0NHgO9P017291 for <video4linux-list@listman.util.phx.redhat.com>;
+ Wed, 23 Jan 2008 12:42:24 -0500
+Original-Received: from mx3.redhat.com (mx3.redhat.com [172.16.48.32])
+ by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id m0NHgNmZ028352
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:42:23 -0500
+Original-Received: from mail.gmx.net (mail.gmx.net [213.165.64.20])
+ by mx3.redhat.com (8.13.1/8.13.1) with SMTP id m0NHfucU001324
+ for <video4linux-list@redhat.com>; Wed, 23 Jan 2008 12:41:56 -0500
+Original-Received: (qmail invoked by alias); 23 Jan 2008 17:41:50 -0000
+Original-Received: from p57BD2F1F.dip0.t-ipconnect.de (EHLO axis700.grange)
+ [87.189.47.31]
+ by mail.gmx.net (mp009) with SMTP; 23 Jan 2008 18:41:50 +0100
+X-Authenticated: #20450766
+X-Provags-ID: V01U2FsdGVkX19aKoUhVR5aPjFgx0HR7/IruYd7urwvhZz+IuYK4j
+ /KvctzVVJXbtdS
+Original-Received: from lyakh (helo=localhost)
+ by axis700.grange with local-esmtp (Exim 4.63)
+ (envelope-from <g.liakhovetski@gmx.de>) id 1JHjc1-0002A6-Re
+ for video4linux-list@redhat.com; Wed, 23 Jan 2008 18:42:09 +0100
+X-X-Sender: lyakh@axis700.grange
+In-Reply-To: <Pine.LNX.4.64.0801231646090.4932@axis700.grange>
+X-Y-GMX-Trusted: 0
+X-RedHat-Spam-Score: 0
+X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254
+X-Scanned-By: MIMEDefang 2.58 on 172.16.48.32
+X-loop: video4linux-list@redhat.com
+X-BeenThere: video4linux-list@redhat.com
+X-Mailman-Version: 2.1.5
+Precedence: junk
+List-Id: Linux and Kernel Video <video4linux-list.redhat.com>
+List-Unsubscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=unsubscribe>
+List-Archive: <https://www.redhat.com/mailman/private/video4linux-list>
+List-Post: <mailto:video4linux-list@redhat.com>
+List-Help: <mailto:video4linux-list-request@redhat.com?subject=help>
+List-Subscribe: <https://www.redhat.com/mailman/listinfo/video4linux-list>,
+ <mailto:video4linux-list-request@redhat.com?subject=subscribe>
+Original-Sender: video4linux-list-bounces@redhat.com
+Errors-To: video4linux-list-bounces@redhat.com
+Xref: news.gmane.org gmane.comp.video.video4linux:36475
+Archived-At: <http://permalink.gmane.org/gmane.comp.video.video4linux/36475>
+
+This adds two new fourcc codes (as per info at fourcc.org)
+for 16bpp mono and 16bpp Bayer formats.
+
+Signed-off-by: Steven Whitehouse <steve@chygwyn.com>
+---
+This is a resend of the patch earlier sent by Steven Whitehouse. For some
+reason, I didn't see the patch in both his emails sent to the list, only
+in copies I got directly by cc. So, strictly speaking this patch doesn't
+belong to this series, but I need these 2 codes, and I'm giving the full
+credit to the original author:-)
+
+ include/linux/videodev2.h | 2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
+index 05b8c22..b2c47c4 100644
+--- a/include/linux/videodev2.h
++++ b/include/linux/videodev2.h
+@@ -280,6 +280,7 @@ struct v4l2_pix_format
+ #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B','G','R','4') /* 32 BGR-8-8-8-8 */
+ #define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R','G','B','4') /* 32 RGB-8-8-8-8 */
+ #define V4L2_PIX_FMT_GREY v4l2_fourcc('G','R','E','Y') /* 8 Greyscale */
++#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y','1','6',' ') /* 16 Greyscale */
+ #define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y','V','U','9') /* 9 YVU 4:1:0 */
+ #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y','V','1','2') /* 12 YVU 4:2:0 */
+ #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y','U','Y','V') /* 16 YUV 4:2:2 */
+@@ -302,6 +303,7 @@ struct v4l2_pix_format
+
+ /* see http://www.siliconimaging.com/RGB%20Bayer.htm */
+ #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */
++#define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B','Y','R','2') /* 16 BGBG.. GRGR.. */
+
+ /* compressed formats */
+ #define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M','J','P','G') /* Motion-JPEG */
+--
+1.5.3.4
+
+--
+video4linux-list mailing list
+Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe
+https://www.redhat.com/mailman/listinfo/video4linux-list
+
diff --git a/packages/linux/linux-ezx-2.6.24/patches/series b/packages/linux/linux-ezx-2.6.24/patches/series
new file mode 100644
index 0000000000..5fb6a2bc23
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/series
@@ -0,0 +1,105 @@
+binutils-buildid-arm.patch
+pxa27x_overlay-r8.patch
+
+ezx-core.patch
+# ezx-core TODO: should be ezx-common
+# look at the pxa-regs.h diff and put each definition on the proper patch
+# register a machine type for each phone model
+
+# enable this patch ONLY if you have STUART connected and dont forget
+# to change your cmdline if you want console on STUART.
+#ezx-enable-stuart.patch
+
+ezx-bp.patch
+# ezx-bp TODO:
+# try to run this as a module - this may solve timing issues for opentapi.
+# suspend/resume (not sure if it can be handled here)
+# implement 2nd gen handshake support
+# move platform device to ezx-phone.c
+
+ezx-pm.patch
+
+ezx-pcap.patch
+# ezx-pcap TODO:
+# move vibrator level function to the vibrator driver
+
+a780-pcap.patch
+e680-pcap.patch
+a1200-pcap.patch
+e6-pcap.patch
+
+a780-mci.patch
+e680-mci.patch
+a1200-mci.patch
+e6-mci.patch
+
+pxa27x-udc-support.3.patch
+
+ezx-emu.patch
+# ezx-emu TODO:
+# userspace interface for controling emu
+# read adc to find which accessory is plugged
+a780-emu.patch
+e680-emu.patch
+
+pxa27x-udc-fix-a1200.patch #(see ezx-a1200.c)
+ezx-eoc.patch
+a1200-eoc.patch
+e6-eoc.patch
+
+ezx-mtd-map.patch
+
+ezx-serial-bug-workaround.patch
+
+pxa-kbd.patch
+a780-kbd.patch
+e680-kbd.patch
+a1200-kbd.patch
+
+pcap-ts.patch
+a780-ts.patch
+e680-ts.patch
+a1200-ts.patch
+e6-ts.patch
+
+ezx-backlight.patch
+
+a780-flip.patch
+e680-locksw.patch
+a1200-flip.patch
+
+a780-leds.patch
+e680-leds.patch
+
+a780-vibrator.patch
+
+# mux_cli patches
+mux_cli.patch
+mux-fix.patch
+mux-fix-init-errorpath.patch
+mux-remove-flipbuffers.patch
+mux-remove-get_halted_bit.patch
+mux-remove-usbh_finished_resume.patch
+mux-fix-makefile.patch
+mux-fix-tty-driver.patch
+mux-linux-2.6.21-fix.patch
+#mux-ifdef-ezx-features.patch
+#mux_debug.patch
+
+asoc-pxa-ssp.patch
+asoc-fix-loopback.patch
+ezx-asoc.patch
+
+# mux_cli TODO:
+# merge patches
+# try to understand the code and cleanup (painful)
+
+# Global TODO:
+# compile everything as module and test for insmod/rmmod
+# can NOT run as module (yet)
+# pxa-ohci, ts0710_mux, ts0710_mux_usb, ezx-bp
+
+# the folowing break too much stuff on other phones.
+
+# incomplete
+
diff --git a/packages/uboot/files/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/rokre2/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot/files/.mtn2git_empty
+++ b/packages/linux/linux-ezx-2.6.24/rokre2/.mtn2git_empty
diff --git a/packages/linux/linux-ezx-2.6.24/rokre2/defconfig b/packages/linux/linux-ezx-2.6.24/rokre2/defconfig
new file mode 100755
index 0000000000..206ae45fc7
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/rokre2/defconfig
@@ -0,0 +1,1189 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.23.1
+# Wed Oct 24 18:05:01 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+# CONFIG_PXA_EZX_A780 is not set
+# CONFIG_PXA_EZX_E2 is not set
+CONFIG_PXA_EZX_A1200=y
+# CONFIG_PXA_EZX_E6 is not set
+# CONFIG_EZX_BP is not set
+CONFIG_EZX_PCAP=y
+CONFIG_EZX_EOC=y
+# CONFIG_EZX_EMU is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+# CONFIG_SUSPEND is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_EZX is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=y
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_HWMON is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_EZX is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=y
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_SSP=y
+CONFIG_SND_PXA2XX_SOC_EZX=y
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_PCAP2=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/uboot/u-boot-1.1.2/.mtn2git_empty b/packages/linux/linux-ezx-2.6.24/rokre6/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot/u-boot-1.1.2/.mtn2git_empty
+++ b/packages/linux/linux-ezx-2.6.24/rokre6/.mtn2git_empty
diff --git a/packages/linux/linux-ezx-2.6.24/rokre6/defconfig b/packages/linux/linux-ezx-2.6.24/rokre6/defconfig
new file mode 100755
index 0000000000..733566adc6
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/rokre6/defconfig
@@ -0,0 +1,1203 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.23.1
+# Wed Oct 24 18:07:51 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-ezxdev"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+CONFIG_PXA_EZX=y
+# CONFIG_PXA_EZX_E680 is not set
+# CONFIG_PXA_EZX_A780 is not set
+# CONFIG_PXA_EZX_E2 is not set
+# CONFIG_PXA_EZX_A1200 is not set
+CONFIG_PXA_EZX_E6=y
+# CONFIG_EZX_BP is not set
+CONFIG_EZX_PCAP=y
+CONFIG_EZX_EOC=y
+# CONFIG_EZX_EMU is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=tty1 noinitrd root=/dev/mmcblk0p2 rootfstype=ext2 ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0 debug mem=32M@0xA0000000"
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+# CONFIG_SUSPEND is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=y
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+# CONFIG_MTD_CFI_I2 is not set
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x0
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_EZX is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_PXA=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_TOUCHSCREEN_PCAP=y
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=y
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+CONFIG_SPI_PXA2XX=m
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_HWMON is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_EZX is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+CONFIG_FB_PXA_PARAMETERS=y
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=y
+CONFIG_SND_PXA2XX_SOC=y
+CONFIG_SND_PXA2XX_SOC_SSP=y
+CONFIG_SND_PXA2XX_SOC_EZX=y
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_PCAP2=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+CONFIG_AUTOFS_FS=y
+CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+# CONFIG_CIFS_STATS2 is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ezx-2.6.24/update_patches.sh b/packages/linux/linux-ezx-2.6.24/update_patches.sh
new file mode 100644
index 0000000000..9a8d36e461
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/update_patches.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+set -e
+
+# Helper script to update patches and speedup filling the SRC_URI section of our .bb
+# Run it while in packages/linux/linux-ezx-2.6.x/
+
+[ -d patches ] && mtn drop -R patches
+rm -rf patches
+
+svn --quiet co http://svn.openezx.org/branches/kernel-2.6.24.x-patches patches
+find patches -type f -print0
+mtn add patches patches/*
+
+cat patches/series | grep ^[0-9A-Za-z] | sed -e 's/.*/\tfile:\/\/patches\/\0;patch=1 \\/'
+ls -1 patches/defconfig-* | sed -e 's/.*/\tfile:\/\/\0 \\/'
+
diff --git a/packages/linux/linux-ezx_2.6.24.bb b/packages/linux/linux-ezx_2.6.24.bb
new file mode 100644
index 0000000000..093ee1e94a
--- /dev/null
+++ b/packages/linux/linux-ezx_2.6.24.bb
@@ -0,0 +1,111 @@
+DESCRIPTION = "2.6 Linux Development Kernel for the Motorola GSM phones A780 and E680"
+AUTHOR = "The OpenEZX Team <openezx-devel@lists.openezx.org>"
+HOMEPAGE = "http://www.openezx.org"
+EZX = "ezxdev"
+PR = "${EZX}-r0"
+
+# unstable branch, use 2.6.21 if you want something working
+DEFAULT_PREFERENCE = "-99"
+DEFAULT_PREFERENCE_a780 = "99"
+
+
+# last sync: svn revision XXX
+
+require linux.inc
+
+RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
+
+SRC_URI = " \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://logo_linux_clut224.ppm \
+ \
+ file://patches/binutils-buildid-arm.patch;patch=1 \
+ file://patches/pxa27x_overlay-r8.patch;patch=1 \
+ file://patches/ezx-core.patch;patch=1 \
+ file://patches/ezx-bp.patch;patch=1 \
+ file://patches/ezx-pm.patch;patch=1 \
+ file://patches/ezx-pcap.patch;patch=1 \
+ file://patches/a780-pcap.patch;patch=1 \
+ file://patches/e680-pcap.patch;patch=1 \
+ file://patches/a1200-pcap.patch;patch=1 \
+ file://patches/e6-pcap.patch;patch=1 \
+ file://patches/a780-mci.patch;patch=1 \
+ file://patches/e680-mci.patch;patch=1 \
+ file://patches/a1200-mci.patch;patch=1 \
+ file://patches/e6-mci.patch;patch=1 \
+ file://patches/pxa27x-udc-support.3.patch;patch=1 \
+ file://patches/ezx-emu.patch;patch=1 \
+ file://patches/a780-emu.patch;patch=1 \
+ file://patches/e680-emu.patch;patch=1 \
+ file://patches/pxa27x-udc-fix-a1200.patch;patch=1 \
+ file://patches/ezx-eoc.patch;patch=1 \
+ file://patches/a1200-eoc.patch;patch=1 \
+ file://patches/e6-eoc.patch;patch=1 \
+ file://patches/ezx-mtd-map.patch;patch=1 \
+ file://patches/ezx-serial-bug-workaround.patch;patch=1 \
+ file://patches/pxa-kbd.patch;patch=1 \
+ file://patches/a780-kbd.patch;patch=1 \
+ file://patches/e680-kbd.patch;patch=1 \
+ file://patches/a1200-kbd.patch;patch=1 \
+ file://patches/pcap-ts.patch;patch=1 \
+ file://patches/a780-ts.patch;patch=1 \
+ file://patches/e680-ts.patch;patch=1 \
+ file://patches/a1200-ts.patch;patch=1 \
+ file://patches/e6-ts.patch;patch=1 \
+ file://patches/ezx-backlight.patch;patch=1 \
+ file://patches/a780-flip.patch;patch=1 \
+ file://patches/e680-locksw.patch;patch=1 \
+ file://patches/a1200-flip.patch;patch=1 \
+ file://patches/a780-leds.patch;patch=1 \
+ file://patches/e680-leds.patch;patch=1 \
+ file://patches/a780-vibrator.patch;patch=1 \
+ file://patches/mux_cli.patch;patch=1 \
+ file://patches/mux-fix.patch;patch=1 \
+ file://patches/mux-fix-init-errorpath.patch;patch=1 \
+ file://patches/mux-remove-flipbuffers.patch;patch=1 \
+ file://patches/mux-remove-get_halted_bit.patch;patch=1 \
+ file://patches/mux-remove-usbh_finished_resume.patch;patch=1 \
+ file://patches/mux-fix-makefile.patch;patch=1 \
+ file://patches/mux-fix-tty-driver.patch;patch=1 \
+ file://patches/mux-linux-2.6.21-fix.patch;patch=1 \
+ file://patches/asoc-pxa-ssp.patch;patch=1 \
+ file://patches/asoc-fix-loopback.patch;patch=1 \
+ file://patches/ezx-asoc.patch;patch=1 \
+ file://defconfig \
+ "
+
+S = "${WORKDIR}/linux-${PV}"
+
+
+##############################################################
+# kernel image resides on a seperate flash partition (for now)
+# But we can flash it from userspace (flash_unlock /dev/mtdX && flash_eraseall /dev/mtdX && flashcp /boot/zImage /dev/mtdX)
+# so lets make a package of it. What about a postinst that flashes the new kernel?
+
+COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = '(a780|e680|a1200|rorkre2|rokre6)'
+
+# For now the code for serial console is disabled in compress.c
+#CMDLINE_CON = "console=ttyS2,115200n8 console=tty1 "
+CMDLINE_CON = "console=tty1 "
+
+CMDLINE_ROOT = "root=/dev/mmcblk0p2 rootfstype=ext2 rootwait=1"
+CMDLINE_NFSROOT = "root=/dev/nfs rootfstype=nfs nfsroot=192.168.0.200:/export/ezx-image rootdelay=1 "
+# Uncomment to enable dyntick
+#CMDLINE_OTHER = "dyntick=enable"
+CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
+CMDLINE_IP = "ip=192.168.0.202:192.168.0.200:192.168.0.200:255.255.255.0"
+CMDLINE_MEM = "mem=32M@0xA0000000 mem=16M@0xAC000000"
+CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}"
+# Uncomment to use root-over-nfs-over-usb
+#CMDLINE_NFSROOT_USB = "${CMDLINE_CON} ${CMDLINE_NFSROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG} ${CMDLINE_MEM}"
+
+# 1024x1024 once was the maximum kernel size for boot-over-usb -- is it still?
+#KERNEL_IMAGE_MAXSIZE = "1294336"
+
+###############################################################
+# module configs specific to this kernel
+#
+#module_autoload_pxaficp_ir = "pxaficp_ir"
+#module_autoload_snd-pcm-oss = "snd-pcm-oss"
+
diff --git a/packages/linux/linux-gumstix_2.6.15.bb b/packages/linux/linux-gumstix_2.6.15.bb
index 9a9a4d4df3..3e0302fe5f 100644
--- a/packages/linux/linux-gumstix_2.6.15.bb
+++ b/packages/linux/linux-gumstix_2.6.15.bb
@@ -1,9 +1,9 @@
DESCRIPTION = "Linux Kernel for the Gumstix"
SECTION = "kernel"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
-DEPENDS = "uboot-utils"
+DEPENDS = "u-boot-utils-native"
COMPATIBLE_MACHINE = "gumstix"
diff --git a/packages/linux/linux-hackndev-2.6_git.bb b/packages/linux/linux-hackndev-2.6_git.bb
index 750be1a648..2d2a37f716 100644
--- a/packages/linux/linux-hackndev-2.6_git.bb
+++ b/packages/linux/linux-hackndev-2.6_git.bb
@@ -2,11 +2,11 @@ DESCRIPTION = "Hack&Dev's Linux kernel for Palm devices."
HOMEPAGE = "http://www.hackndev.com/"
SECTION = "kernel"
LICENSE = "GPL"
-PR = "r12"
+PR = "r13"
COMPATIBLE_MACHINE = "(palmld|palmtc|palmtt3|palmtt5|palmtx|palmz31|palmz72|palmt650)"
-SRC_URI = "git://git.hackndev.com/git/linux-hnd;protocol=http \
+SRC_URI = "git://git.hackndev.com/git/linux-hnd;protocol=git \
file://defconfig"
SRC_URI_append_palmtx += "http://www.busybox.net/downloads/busybox-1.1.0.tar.bz2 \
diff --git a/packages/uboot/u-boot-1.1.4/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot/u-boot-1.1.4/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/.mtn2git_empty
diff --git a/packages/uboot/u-boot-1.1.6/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot/u-boot-1.1.6/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig
new file mode 100644
index 0000000000..04c70cfba6
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus620/defconfig
@@ -0,0 +1,1339 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:39 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+CONFIG_MACH_A620=y
+CONFIG_A620_LCD=y
+CONFIG_A620_BUTTONS=y
+CONFIG_A620_PCMCIA=y
+CONFIG_A620_TS=y
+# CONFIG_A620_FLASHFAKE is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=m
+CONFIG_MTD_NAND_DISKONCHIP=m
+# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_RS232_SERIAL=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+CONFIG_ADC_BATTERY=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_REED_SOLOMON=m
+CONFIG_REED_SOLOMON_DEC16=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/uboot/u-boot-1.2.0/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot/u-boot-1.2.0/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig
new file mode 100644
index 0000000000..aa94442a9b
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/asus730/defconfig
@@ -0,0 +1,1459 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:40 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+CONFIG_MACH_A730=y
+# CONFIG_ASUS730_WM9712 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+CONFIG_PCMCIA_DEBUG=y
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+CONFIG_SENSORS_PCA9535=y
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+# CONFIG_SND_RECON is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+
+#
+# HID Devices
+#
+# CONFIG_HID is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/uboot/u-boot-1.2.0/fic-gta01/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot/u-boot-1.2.0/fic-gta01/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig
new file mode 100644
index 0000000000..1b32b68672
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/aximx50/defconfig
@@ -0,0 +1,1322 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:40 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+CONFIG_MACH_X50=y
+CONFIG_X50_VGA=y
+CONFIG_X50_BUTTONS=y
+CONFIG_X50_TS=y
+CONFIG_DRAM_BASE=0xa8000000
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_PXA27x=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+# CONFIG_HID is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/uboot/u-boot-1.2.0/turbostation/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot/u-boot-1.2.0/turbostation/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig
new file mode 100644
index 0000000000..d4881fb224
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/eteng500/defconfig
@@ -0,0 +1,1313 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:41 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+CONFIG_S3C2410_BOOT_ERROR_RESET=y
+# CONFIG_S3C2410_PM_DEBUG is not set
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+
+#
+# S3C2400 Machines
+#
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+
+#
+# S3C2410 Machines
+#
+# CONFIG_ARCH_SMDK2410 is not set
+# CONFIG_ARCH_H1940 is not set
+CONFIG_PM_H1940=y
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_AML_M5900 is not set
+# CONFIG_MACH_VR1000 is not set
+# CONFIG_MACH_QT2410 is not set
+
+#
+# S3C2412 Machines
+#
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_VSTMS is not set
+CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+
+#
+# S3C2440 Machines
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_MACH_RX3715 is not set
+# CONFIG_ARCH_S3C2440 is not set
+# CONFIG_MACH_NEXCODER_2440 is not set
+CONFIG_MACH_G500=y
+
+#
+# S3C2442 Machines
+#
+# CONFIG_MACH_RX1950 is not set
+# CONFIG_MACH_HTCHERMES is not set
+# CONFIG_MACH_HTC_TRINITY is not set
+
+#
+# S3C2443 Machines
+#
+# CONFIG_MACH_SMDK2443 is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=200
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=m
+CONFIG_MTD_NAND_S3C2410=m
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+CONFIG_MTD_NAND_S3C2410_HWECC=y
+CONFIG_MTD_NAND_S3C2410_CLKSTOP=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
+CONFIG_TOUCHSCREEN_S3C2410_ALT=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+# CONFIG_SERIAL_S3C2410_CONSOLE is not set
+CONFIG_SERIAL_CORE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_S3C24XX=y
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_BACKLIGHT_S3C2410=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+# CONFIG_FB_S3C2410_DEBUG is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+# CONFIG_HID is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_S3C2440=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+CONFIG_RTC_DRV_S3C=y
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+# CONFIG_DEBUG_S3C2410_PORT is not set
+CONFIG_DEBUG_S3C2410_UART=0
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig
new file mode 100644
index 0000000000..4249e4d6f5
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h1910/defconfig
@@ -0,0 +1,1392 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:41 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+CONFIG_ARCH_H1900=y
+CONFIG_IPAQ_H1900_LCD=y
+CONFIG_IPAQ_H1900_BUTTONS=y
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_ASIC3 is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_ASIC3 is not set
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_H1910=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_UDA1380=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+# CONFIG_HID is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/uboot/u-boot-omap2430sdp-1.1.4/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/uboot/u-boot-omap2430sdp-1.1.4/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig
new file mode 100644
index 0000000000..45c68468da
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h2200/defconfig
@@ -0,0 +1,1794 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:42 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+CONFIG_DMABOUNCE=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+CONFIG_ARCH_H2200=y
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+CONFIG_PCMCIA_DEBUG=y
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+CONFIG_PCMCIA_H2200=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_HAMCOP=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+CONFIG_ATMEL=m
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_USB_ZD1201=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+# CONFIG_ACX is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_H2200=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_MASTER_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+CONFIG_ADC_SAMCOP=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+CONFIG_SOC_HAMCOP=y
+CONFIG_SOC_SAMCOP_DMA=y
+# CONFIG_SOC_SAMCOP_DMA_DEBUG is not set
+CONFIG_SOC_MQ11XX=y
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_HAMCOP=y
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_BACKLIGHT_H2200=y
+CONFIG_LCD_H2200=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_MQ1100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_H2200=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_UDA1380=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_DEBUG=m
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+CONFIG_USB_PXA2XX_GPIO=y
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+CONFIG_MMC_SAMCOP=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/x11vnc/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/x11vnc/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig
new file mode 100644
index 0000000000..ead31f3055
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3600/defconfig
@@ -0,0 +1,1311 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:42 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+CONFIG_ARCH_SA1100=y
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_SA1100_H3100 is not set
+CONFIG_SA1100_H3600=y
+# CONFIG_SA1100_H3800 is not set
+CONFIG_SA1100_H3XXX=y
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA56X is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_JORNADA820 is not set
+# CONFIG_SA1100_XDA is not set
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SSP is not set
+# CONFIG_H3600_SLEEVE is not set
+CONFIG_SA1100_USB=m
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+CONFIG_IPAQ_H3600_LCD=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_SA1100=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4=y
+CONFIG_CPU_CACHE_V4WB=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+CONFIG_NODES_SHIFT=2
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_SA1110=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_MICRO=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_IPAQ_MICRO=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
+CONFIG_IPAQ_MICRO_BATTERY=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_IPAQ_MICRO=y
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP_SA11X0 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_SA1100=y
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+# CONFIG_HID is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/xcursor-transparent-theme/xcursor-transparent-theme-0.1.1/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xcursor-transparent-theme/xcursor-transparent-theme-0.1.1/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig
new file mode 100644
index 0000000000..4d110a7b21
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3800/defconfig
@@ -0,0 +1,1309 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:42 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+CONFIG_ARCH_SA1100=y
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+CONFIG_SA1100_H3800=y
+CONFIG_SA1100_H3XXX=y
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA56X is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_JORNADA820 is not set
+# CONFIG_SA1100_XDA is not set
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SSP is not set
+CONFIG_SA1100_USB=m
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_SA1100=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4=y
+CONFIG_CPU_CACHE_V4WB=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+CONFIG_NODES_SHIFT=2
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_SA1110=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_ASIC2=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ASIC2=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+CONFIG_ADC_ASIC2=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_HTC_ASIC2=y
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP_SA11X0 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_SA1100=y
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+# CONFIG_HID is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+# CONFIG_MMC_ASIC1 is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/xserver-common/files/ghi270/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xserver-common/files/ghi270/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig
new file mode 100644
index 0000000000..d386487e64
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h3900/defconfig
@@ -0,0 +1,1428 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:43 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+CONFIG_MACH_H3900=y
+CONFIG_IPAQ_H3900_LCD=y
+CONFIG_IPAQ_H3900_BACKLIGHT=y
+CONFIG_IPAQ_H3900_BATTERY=y
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_ASIC2=y
+# CONFIG_KEYBOARD_ASIC3 is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ASIC2=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+CONFIG_ADC_ASIC2=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_HTC_ASIC2=y
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_ASIC3 is not set
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+# CONFIG_MMC_ASIC1 is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common/etc/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xserver-kdrive-common/xserver-kdrive-common/etc/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig
new file mode 100644
index 0000000000..31ff20e487
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h4000/defconfig
@@ -0,0 +1,1555 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:43 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+CONFIG_MACH_H4000=y
+CONFIG_MACH_H4300=y
+CONFIG_IPAQ_H4000_LCD=y
+CONFIG_IPAQ_H4000_BACKLIGHT=y
+CONFIG_IPAQ_H4000_PCMCIA=y
+CONFIG_IPAQ_H4000_BT=m
+CONFIG_IPAQ_H4300_KBD=y
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+CONFIG_PXA_SSP=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+CONFIG_PCMCIA_DEBUG=y
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_DISKONCHIP=y
+# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+# CONFIG_ACX_MEM is not set
+CONFIG_ACX_CS=y
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_ASIC3 is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_RS232_SERIAL=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+CONFIG_ADC_BATTERY=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_ASIC3=y
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_H4000=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_UDA1380=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+CONFIG_USB_PXA2XX_GPIO=y
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_REED_SOLOMON=y
+CONFIG_REED_SOLOMON_DEC16=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig
new file mode 100644
index 0000000000..2dbeadd59f
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/h5000/defconfig
@@ -0,0 +1,1685 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:44 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+CONFIG_DMABOUNCE=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+CONFIG_ARCH_H5400=y
+CONFIG_IPAQ_H5400_BT=m
+CONFIG_IPAQ_H5400_LCD=y
+CONFIG_IPAQ_H5400_BL=y
+CONFIG_IPAQ_H5400_WIFI=m
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_ACX is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+CONFIG_GPIODEV_KEYS2=y
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_GPIO is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_H5400_BUZZER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_MASTER_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+CONFIG_ADC_SAMCOP=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+# CONFIG_IPAQ_SAMCOP_FSI is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+CONFIG_SOC_SAMCOP=y
+# CONFIG_SOC_HAMCOP is not set
+CONFIG_SOC_SAMCOP_DMA=y
+# CONFIG_SOC_SAMCOP_DMA_DEBUG is not set
+CONFIG_SOC_MQ11XX=y
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_SAMCOP=y
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_MQ1100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_H5XXX_AK4535 is not set
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+# CONFIG_SND_PXA2XX_SOC_MAGICIAN is not set
+# CONFIG_SND_PXA2XX_SOC_BLUEANGEL is not set
+CONFIG_SND_PXA2XX_SOC_H5000=m
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8731 is not set
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
+# CONFIG_SND_SOC_WM9705 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+# CONFIG_SND_SOC_WM9712 is not set
+# CONFIG_SND_SOC_UDA1380 is not set
+CONFIG_SND_SOC_AK4535=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+CONFIG_MMC_SAMCOP=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/Xsession.d/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/xserver-kdrive-common/xserver-kdrive-common/etc/X11/Xsession.d/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig
new file mode 100644
index 0000000000..26d28055db
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcalpine/defconfig
@@ -0,0 +1,1332 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:45 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+CONFIG_MACH_HTCALPINE=y
+CONFIG_HTCALPINE_CPLD=y
+CONFIG_HTCALPINE_PHONE=m
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/zroadmap/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/zroadmap/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig
new file mode 100644
index 0000000000..80a3269294
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcapache/defconfig
@@ -0,0 +1,1423 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:45 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_BOARD_IRQ_MAP_SMALL=y
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+CONFIG_MACH_HTCAPACHE=y
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+CONFIG_PXA27x_VOLTAGE=y
+CONFIG_PXA27x_VOLTAGE_MAX158xx=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+CONFIG_ACX_MEM=y
+# CONFIG_ACX_CS is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_GPIODEV_KEYS=y
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_PXA27x=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+CONFIG_ADC_AD7877=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+CONFIG_HTC_EGPIO=y
+CONFIG_HTC_BBKEYS=y
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_GPIO=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_HTCAPACHE=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_AK4641=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+CONFIG_RTC_DRV_PCF8563=m
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/zroadmap/files/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/zroadmap/files/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig
new file mode 100644
index 0000000000..28186f7df7
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcbeetles/defconfig
@@ -0,0 +1,1339 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:46 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+CONFIG_MACH_HTCBEETLES=y
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_HTCSABLE_LCD is not set
+# CONFIG_HTCSABLE_BACKLIGHT is not set
+# CONFIG_HTCSABLE_ROM is not set
+# CONFIG_HTCSABLE_BT is not set
+# CONFIG_HTCSABLE_PHONE is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_ASIC3 is not set
+CONFIG_KEYBOARD_PXA27x=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_ASIC3 is not set
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+# CONFIG_MMC_ASIC3 is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig
new file mode 100644
index 0000000000..c2e783a9a7
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcblueangel/defconfig
@@ -0,0 +1,1574 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:46 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+CONFIG_MACH_BLUEANGEL=y
+CONFIG_MACH_BLUEANGEL_LCD=y
+CONFIG_MACH_BLUEANGEL_BACKLIGHT=y
+CONFIG_MACH_BLUEANGEL_DS1WM=y
+CONFIG_MACH_BLUEANGEL_PCMCIA=y
+CONFIG_MACH_BLUEANGEL_SUSPEND=y
+CONFIG_MACH_BLUEANGEL_LEDS=y
+CONFIG_MACH_BLUEANGEL_ASIC3_LEDS=y
+CONFIG_MACH_BLUEANGEL_KEYPAD=y
+CONFIG_MACH_BLUEANGEL_POWER=y
+CONFIG_MACH_BLUEANGEL_ROM=y
+CONFIG_MACH_BLUEANGEL_DPRAM=y
+CONFIG_MACH_BLUEANGEL_PHONE=m
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+CONFIG_PXA26x=y
+CONFIG_PXA_SSP=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+CONFIG_PCMCIA_DEBUG=y
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=m
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=m
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+# CONFIG_ACX_MEM is not set
+CONFIG_ACX_CS=y
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_ASIC3=y
+CONFIG_KEYBOARD_TSC2200=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_TSC2200=y
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+CONFIG_TIHTC=m
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_MASTER_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+CONFIG_ADC_TSC2200_SSP=y
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+CONFIG_SOC_TSC2200=y
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_ASIC3=y
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_W100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_SSP=m
+# CONFIG_SND_PXA2XX_SOC_MAGICIAN is not set
+CONFIG_SND_PXA2XX_SOC_BLUEANGEL=m
+# CONFIG_SND_PXA2XX_SOC_H5000 is not set
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8731 is not set
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
+# CONFIG_SND_SOC_WM9705 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+# CONFIG_SND_SOC_WM9712 is not set
+CONFIG_SND_SOC_UDA1380=m
+# CONFIG_SND_SOC_AK4535 is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+CONFIG_USB_PXA2XX_GPIO=y
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig
new file mode 100644
index 0000000000..8abaeb97f8
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htchimalaya/defconfig
@@ -0,0 +1,1335 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:47 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+CONFIG_MACH_HIMALAYA=y
+# CONFIG_MACH_HIMALAYA_ASIC3 is not set
+# CONFIG_MACH_HIMALAYA_ROM is not set
+# CONFIG_HIMALAYA_LEDS is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA25x=y
+CONFIG_PXA26x=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_ASIC3 is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_ASIC3 is not set
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_CFB_FILLRECT is not set
+# CONFIG_FB_CFB_COPYAREA is not set
+# CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+# CONFIG_MMC_ASIC3 is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig
new file mode 100644
index 0000000000..ed6b2634a2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcsable/defconfig
@@ -0,0 +1,1450 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:47 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+CONFIG_MACH_HW6900=y
+CONFIG_HTCSABLE_LCD=y
+CONFIG_HTCSABLE_BACKLIGHT=y
+# CONFIG_HTCSABLE_ROM is not set
+# CONFIG_HTCSABLE_BT is not set
+# CONFIG_HTCSABLE_PHONE is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+CONFIG_ACX_MEM=y
+# CONFIG_ACX_CS is not set
+CONFIG_ACX_HTCSABLE=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_ASIC3 is not set
+CONFIG_KEYBOARD_PXA27x=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_POWER_SUPPLY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_ASIC3 is not set
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_HTCSABLE=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_AK4641=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig
new file mode 100644
index 0000000000..241d3a3759
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcuniversal/defconfig
@@ -0,0 +1,1456 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:47 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+CONFIG_MACH_HTCUNIVERSAL=y
+CONFIG_HTCUNIVERSAL_CORE=y
+CONFIG_HTCUNIVERSAL_UDC=y
+CONFIG_HTCUNIVERSAL_POWER=y
+CONFIG_HTCUNIVERSAL_BACKLIGHT=y
+CONFIG_HTCUNIVERSAL_LCD=y
+CONFIG_HTCUNIVERSAL_TS2=m
+CONFIG_HTCUNIVERSAL_BUTTONS=y
+CONFIG_HTCUNIVERSAL_BLUETOOTH=m
+CONFIG_HTCUNIVERSAL_ASIC3_LEDS=y
+CONFIG_HTCUNIVERSAL_PHONE=m
+# CONFIG_HTCUNIVERSAL_MDOC_G3 is not set
+CONFIG_HTCUNIVERSAL_AK4641=m
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+CONFIG_ACX_MEM=y
+# CONFIG_ACX_CS is not set
+CONFIG_ACX_HTCUNIVERSAL=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_ASIC3=y
+CONFIG_KEYBOARD_PXA27x=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=m
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_MASTER_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+CONFIG_HTC_ASIC3_DS1WM=y
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_ASIC3=y
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_HTCUNIVERSAL=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig
new file mode 100644
index 0000000000..bb0230cc2d
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/htcwallaby/defconfig
@@ -0,0 +1,1309 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:48 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+CONFIG_ARCH_SA1100=y
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA56X is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_JORNADA820 is not set
+CONFIG_SA1100_XDA=y
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SSP is not set
+CONFIG_SA1100_USB=m
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_SA1100=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4=y
+CONFIG_CPU_CACHE_V4WB=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+CONFIG_NODES_SHIFT=2
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_SA1110=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP_SA11X0 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_SA1100=y
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+# CONFIG_HID is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig
new file mode 100644
index 0000000000..e9f45ab8f3
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/hx4700/defconfig
@@ -0,0 +1,1811 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:44 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+CONFIG_MACH_H4700=y
+CONFIG_HX4700_NAVPOINT=y
+CONFIG_HX4700_CORE=y
+CONFIG_HX4700_BLUETOOTH=m
+CONFIG_HX4700_PCMCIA=y
+CONFIG_HX4700_LCD=y
+CONFIG_HX4700_LEDS=y
+CONFIG_HX4700_POWER2=y
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SUSPEND_SAVE_EXTRA_REGS=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+CONFIG_PCMCIA_DEBUG=y
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+CONFIG_ATMEL=m
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_USB_ZD1201=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_ACX=m
+# CONFIG_ACX_USB is not set
+CONFIG_ACX_MEM=y
+# CONFIG_ACX_CS is not set
+CONFIG_ACX_HX4700=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_ASIC3 is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+CONFIG_MOUSE_NAVPOINT=y
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_RS232_SERIAL=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_MASTER_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+CONFIG_ADC_BATTERY=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_PASIC3 is not set
+CONFIG_HTC_EGPIO=y
+# CONFIG_HTC_BBKEYS is not set
+CONFIG_HTC_ASIC3_DS1WM=y
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_ASIC3=y
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_W100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_HX4700=m
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+CONFIG_SND_AK4641=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_DEBUG=m
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+CONFIG_USB_PXA2XX_GPIO=y
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig
new file mode 100644
index 0000000000..89646accc5
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/looxc550/defconfig
@@ -0,0 +1,1335 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:48 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+CONFIG_MACH_LOOXC550=y
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+# CONFIG_PXA27x_VOLTAGE is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=y
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+CONFIG_ADC_BATTERY=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=y
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/magician/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/magician/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/magician/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig
new file mode 100644
index 0000000000..fb433633ab
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/magician/defconfig
@@ -0,0 +1,1664 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:44 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_BOARD_IRQ_MAP_SMALL=y
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_TOSHIBA_TMIO_OHCI is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_MACH_A730 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+CONFIG_MACH_MAGICIAN=y
+CONFIG_MAGICIAN_PM=y
+CONFIG_MAGICIAN_TS=m
+CONFIG_MAGICIAN_LCD=y
+CONFIG_MAGICIAN_PHONE=m
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+
+#
+# HTC_HW6X00
+#
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
+# CONFIG_MACH_HTCATHENA is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_MACH_X50 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_MACH_RECON is not set
+# CONFIG_MACH_GHI270HG is not set
+# CONFIG_MACH_GHI270 is not set
+# CONFIG_MACH_LOOXC550 is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=m
+CONFIG_PXA_SUSPEND_SAVE_EXTRA_REGS=y
+CONFIG_PXA27x_VOLTAGE=m
+CONFIG_PXA27x_VOLTAGE_MAX158xx=m
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+CONFIG_CPU_FREQ_PXA=m
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+# CONFIG_KEYBOARD_PXA27x is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_ADC=m
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+# CONFIG_SERIAL_PXA_CONSOLE is not set
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_PXA_IR=y
+CONFIG_SERIAL_CORE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_SA1100_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+CONFIG_TIHTC=m
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2490 is not set
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_MASTER_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+CONFIG_ADC_BATTERY=y
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+CONFIG_ADC_ADS7846_SSP=m
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+CONFIG_HTC_PASIC3=y
+CONFIG_HTC_EGPIO=y
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_PASIC3=y
+CONFIG_LEDS_GPIO=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HWTIMER=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+# CONFIG_SND_RECON is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_SSP=m
+CONFIG_SND_PXA2XX_SOC_MAGICIAN=m
+# CONFIG_SND_PXA2XX_SOC_BLUEANGEL is not set
+# CONFIG_SND_PXA2XX_SOC_H5000 is not set
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8731 is not set
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
+# CONFIG_SND_SOC_WM9705 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+# CONFIG_SND_SOC_WM9712 is not set
+CONFIG_SND_SOC_UDA1380=m
+# CONFIG_SND_SOC_AK4535 is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+# CONFIG_USB_GTCO is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+# CONFIG_USB_PXA2XX_GPIO is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig
new file mode 100644
index 0000000000..8bf07bed8d
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx1950/defconfig
@@ -0,0 +1,1370 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:49 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+# CONFIG_BOARD_IRQ_MAP_BIG is not set
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+# CONFIG_S3C2410_BOOT_ERROR_RESET is not set
+# CONFIG_S3C2410_PM_DEBUG is not set
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+
+#
+# S3C2400 Machines
+#
+CONFIG_CPU_S3C2410_DMA=y
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+
+#
+# S3C2410 Machines
+#
+# CONFIG_ARCH_SMDK2410 is not set
+# CONFIG_ARCH_H1940 is not set
+CONFIG_PM_H1940=y
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_AML_M5900 is not set
+# CONFIG_MACH_VR1000 is not set
+# CONFIG_MACH_QT2410 is not set
+
+#
+# S3C2412 Machines
+#
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_VSTMS is not set
+CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+
+#
+# S3C2440 Machines
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_MACH_RX3715 is not set
+# CONFIG_ARCH_S3C2440 is not set
+# CONFIG_MACH_NEXCODER_2440 is not set
+# CONFIG_MACH_G500 is not set
+CONFIG_CPU_S3C2442=y
+
+#
+# S3C2442 Machines
+#
+CONFIG_MACH_RX1950=y
+# CONFIG_MACH_HTCHERMES is not set
+# CONFIG_MACH_HTC_TRINITY is not set
+
+#
+# S3C2443 Machines
+#
+# CONFIG_MACH_SMDK2443 is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=200
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+# CONFIG_TXTOFFSET_DELTA is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=m
+CONFIG_MTD_NAND_S3C2410=m
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+# CONFIG_MTD_NAND_S3C2410_HWECC is not set
+# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+CONFIG_TOUCHSCREEN_S3C2410_DEBUG=y
+CONFIG_TOUCHSCREEN_S3C2410_ALT=y
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_S3C24XX=y
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_BACKLIGHT_S3C2410=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+# CONFIG_FB_S3C2410_DEBUG is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_S3C2410 is not set
+
+#
+# SoC audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_S3C2440=y
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+CONFIG_RTC_DRV_S3C=y
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+CONFIG_DEBUG_S3C2410_PORT=y
+CONFIG_DEBUG_S3C2410_UART=0
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig
new file mode 100644
index 0000000000..98f5b6cc8f
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.21/rx3000/defconfig
@@ -0,0 +1,1494 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21-hh20
+# Sun Jan 27 01:32:49 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_BOARD_IRQ_MAP_SMALL is not set
+CONFIG_BOARD_IRQ_MAP_BIG=y
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+CONFIG_S3C2410_BOOT_ERROR_RESET=y
+# CONFIG_S3C2410_PM_DEBUG is not set
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=2
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+
+#
+# S3C2400 Machines
+#
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+
+#
+# S3C2410 Machines
+#
+# CONFIG_ARCH_SMDK2410 is not set
+# CONFIG_ARCH_H1940 is not set
+CONFIG_PM_H1940=y
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_AML_M5900 is not set
+# CONFIG_MACH_VR1000 is not set
+# CONFIG_MACH_QT2410 is not set
+
+#
+# S3C2412 Machines
+#
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_VSTMS is not set
+CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+
+#
+# S3C2440 Machines
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+CONFIG_MACH_RX3715=y
+CONFIG_RX3000_BACKLIGHT=y
+CONFIG_RX3000_LEDS=y
+CONFIG_RX3000_BATTERY=y
+CONFIG_RX3000_BLUETOOTH=m
+CONFIG_RX3000_BUTTONS=y
+CONFIG_RX3000_SERIAL=y
+CONFIG_RX3000_TS=y
+CONFIG_RX3000_UDC=m
+# CONFIG_ARCH_S3C2440 is not set
+# CONFIG_MACH_NEXCODER_2440 is not set
+# CONFIG_MACH_G500 is not set
+
+#
+# S3C2442 Machines
+#
+# CONFIG_MACH_RX1950 is not set
+# CONFIG_MACH_HTCHERMES is not set
+# CONFIG_MACH_HTC_TRINITY is not set
+
+#
+# S3C2443 Machines
+#
+# CONFIG_MACH_SMDK2443 is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=200
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_TXTOFFSET_DELTA=y
+CONFIG_TXTOFFSET_DELTA_VALUE=0x00090000
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_DPM_DEBUG=y
+CONFIG_PM_SYSFS_DEPRECATED=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+# CONFIG_IP_NF_TARGET_TOS is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_RAW=m
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+# CONFIG_IP6_NF_MATCH_RT is not set
+# CONFIG_IP6_NF_MATCH_OPTS is not set
+# CONFIG_IP6_NF_MATCH_FRAG is not set
+# CONFIG_IP6_NF_MATCH_HL is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
+# CONFIG_IP6_NF_MATCH_AH is not set
+# CONFIG_IP6_NF_MATCH_MH is not set
+# CONFIG_IP6_NF_MATCH_EUI64 is not set
+# CONFIG_IP6_NF_FILTER is not set
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+# CONFIG_IEEE80211_CRYPT_WEP is not set
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=0
+CONFIG_MTDRAM_ERASE_SIZE=256
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_S3C2410=y
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+# CONFIG_MTD_NAND_S3C2410_HWECC is not set
+CONFIG_MTD_NAND_S3C2410_CLKSTOP=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+CONFIG_ACX_MEM=y
+# CONFIG_ACX_CS is not set
+CONFIG_ACX_RX3000=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_LED_TRIGGER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_GPIODEV_KEYS is not set
+# CONFIG_GPIODEV_KEYS2 is not set
+# CONFIG_GPIODEV_DIAGONAL is not set
+CONFIG_KEYBOARD_ASIC3=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_NAVPOINT is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
+# CONFIG_TOUCHSCREEN_S3C2410_ALT is not set
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_RS232_SERIAL is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_TIHTC is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+CONFIG_I2C_S3C2410=m
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_MASTER_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+# CONFIG_ADC_BATTERY is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_ADC=y
+# CONFIG_ADC_ADS7846_SSP is not set
+# CONFIG_ADC_TSC2200_SSP is not set
+# CONFIG_ADC_AD7877 is not set
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_SLEEVE_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_BBKEYS is not set
+CONFIG_HTC_ASIC3_DS1WM=y
+# CONFIG_SOC_SAMCOP is not set
+# CONFIG_SOC_HAMCOP is not set
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TSC2101 is not set
+# CONFIG_SOC_TSC2200 is not set
+
+#
+# LED devices
+#
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_S3C24XX is not set
+CONFIG_LEDS_ASIC3=y
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HWTIMER is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_LEDS_TRIGGER_SHARED=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+CONFIG_BACKLIGHT_S3C2410=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+# CONFIG_FB_S3C2410_DEBUG is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_VSFB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_S3C2410 is not set
+
+#
+# SoC audio support
+#
+CONFIG_SND_SOC=m
+
+#
+# SoC Platforms
+#
+
+#
+# SoC Audio for the Atmel AT91
+#
+
+#
+# SoC Audio for the Intel PXA2xx
+#
+
+#
+# SoC Audio for the Freescale i.MX
+#
+
+#
+# SoC Audio for the Samsung S3C24XX
+#
+CONFIG_SND_S3C24XX_SOC=m
+CONFIG_SND_S3C24XX_SOC_I2S=m
+CONFIG_SND_S3C24XX_SOC_RX3000=m
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8731 is not set
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8772 is not set
+# CONFIG_SND_SOC_WM8971 is not set
+# CONFIG_SND_SOC_WM8956 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8976 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8980 is not set
+# CONFIG_SND_SOC_WM9705 is not set
+# CONFIG_SND_SOC_WM9713 is not set
+# CONFIG_SND_SOC_WM9712 is not set
+CONFIG_SND_SOC_UDA1380=m
+# CONFIG_SND_SOC_AK4535 is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_S3C2440 is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+CONFIG_RTC_DRV_S3C=y
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+CONFIG_NLS_CODEPAGE_1251=m
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+# CONFIG_DEBUG_S3C2410_PORT is not set
+CONFIG_DEBUG_S3C2410_UART=2
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-handhelds-2.6.inc b/packages/linux/linux-handhelds-2.6.inc
index f58ef672aa..0db5e93974 100644
--- a/packages/linux/linux-handhelds-2.6.inc
+++ b/packages/linux/linux-handhelds-2.6.inc
@@ -23,7 +23,7 @@ HHV ?= "${@bb.data.getVar('PV',d,1).split('-')[1].split('hh')[-1]}"
KERNEL_PRIORITY = "${@'%d' % (int(bb.data.getVar('K_MAJOR',d,1)) * 100000000 + int(bb.data.getVar('K_MINOR',d,1)) * 1000000 + int(bb.data.getVar('K_MICRO',d,1)) * 10000 + float(bb.data.getVar('HHV',d,1)))}"
-KERNEL_FILENAME = "${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}"
+KERNEL_FILENAME = "${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE}.bin"
do_configure() {
diff --git a/packages/linux/linux-handhelds-2.6/asus620/defconfig b/packages/linux/linux-handhelds-2.6/asus620/defconfig
deleted file mode 100644
index 6d2f23c72d..0000000000
--- a/packages/linux/linux-handhelds-2.6/asus620/defconfig
+++ /dev/null
@@ -1,1280 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:25 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-CONFIG_MACH_A620=y
-CONFIG_A620_LCD=y
-CONFIG_A620_BUTTONS=y
-CONFIG_A620_PCMCIA=y
-CONFIG_A620_TS=y
-# CONFIG_A620_FLASHFAKE is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA25x=y
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-CONFIG_MTD_NAND_IDS=m
-CONFIG_MTD_NAND_DISKONCHIP=m
-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
-# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_RS232_SERIAL=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-CONFIG_ADC_BATTERY=y
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_REED_SOLOMON=m
-CONFIG_REED_SOLOMON_DEC16=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/asus730/defconfig b/packages/linux/linux-handhelds-2.6/asus730/defconfig
deleted file mode 100644
index 21d18f02ba..0000000000
--- a/packages/linux/linux-handhelds-2.6/asus730/defconfig
+++ /dev/null
@@ -1,1399 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:26 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-CONFIG_MACH_A730=y
-# CONFIG_ASUS730_WM9712 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA27x=y
-# CONFIG_PXA27x_VOLTAGE is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-CONFIG_PCMCIA_DEBUG=y
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IPAQ is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# PCMCIA network device support
-#
-# CONFIG_NET_PCMCIA is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-# CONFIG_KEYBOARD_PXA27x is not set
-# CONFIG_KEYBOARD_GPIO is not set
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-CONFIG_SENSORS_PCA9535=y
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_POWER_SUPPLY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-# CONFIG_SND_RECON is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-
-#
-# HID Devices
-#
-# CONFIG_HID is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/aximx50/defconfig b/packages/linux/linux-handhelds-2.6/aximx50/defconfig
deleted file mode 100644
index e3a31bd3a1..0000000000
--- a/packages/linux/linux-handhelds-2.6/aximx50/defconfig
+++ /dev/null
@@ -1,1263 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:26 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-CONFIG_MACH_X50=y
-CONFIG_X50_VGA=y
-CONFIG_X50_BUTTONS=y
-CONFIG_X50_TS=y
-CONFIG_DRAM_BASE=0xa8000000
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA27x=y
-# CONFIG_PXA27x_VOLTAGE is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_PXA27x=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_ADC_BATTERY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-CONFIG_ADC_ADS7846_SSP=y
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-# CONFIG_HID is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/eteng500/defconfig b/packages/linux/linux-handhelds-2.6/eteng500/defconfig
deleted file mode 100644
index a21a83339e..0000000000
--- a/packages/linux/linux-handhelds-2.6/eteng500/defconfig
+++ /dev/null
@@ -1,1254 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:27 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_NO_IOPORT=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-CONFIG_ARCH_S3C2410=y
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-CONFIG_PLAT_S3C24XX=y
-CONFIG_CPU_S3C244X=y
-CONFIG_S3C2410_BOOT_ERROR_RESET=y
-# CONFIG_S3C2410_PM_DEBUG is not set
-# CONFIG_S3C2410_PM_CHECK is not set
-CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
-CONFIG_S3C2410_DMA=y
-# CONFIG_S3C2410_DMA_DEBUG is not set
-
-#
-# S3C2400 Machines
-#
-CONFIG_S3C2410_PM=y
-CONFIG_S3C2410_GPIO=y
-CONFIG_S3C2410_CLOCK=y
-
-#
-# S3C2410 Machines
-#
-# CONFIG_ARCH_SMDK2410 is not set
-# CONFIG_ARCH_H1940 is not set
-CONFIG_PM_H1940=y
-# CONFIG_MACH_N30 is not set
-# CONFIG_ARCH_BAST is not set
-# CONFIG_MACH_OTOM is not set
-# CONFIG_MACH_AML_M5900 is not set
-# CONFIG_MACH_VR1000 is not set
-# CONFIG_MACH_QT2410 is not set
-
-#
-# S3C2412 Machines
-#
-# CONFIG_MACH_SMDK2413 is not set
-# CONFIG_MACH_VSTMS is not set
-CONFIG_CPU_S3C2440=y
-CONFIG_S3C2440_DMA=y
-
-#
-# S3C2440 Machines
-#
-# CONFIG_MACH_ANUBIS is not set
-# CONFIG_MACH_OSIRIS is not set
-# CONFIG_MACH_RX3715 is not set
-# CONFIG_ARCH_S3C2440 is not set
-# CONFIG_MACH_NEXCODER_2440 is not set
-CONFIG_MACH_G500=y
-
-#
-# S3C2442 Machines
-#
-# CONFIG_MACH_RX1950 is not set
-# CONFIG_MACH_HTCHERMES is not set
-# CONFIG_MACH_HTC_TRINITY is not set
-
-#
-# S3C2443 Machines
-#
-# CONFIG_MACH_SMDK2443 is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM920T=y
-CONFIG_CPU_32v4T=y
-CONFIG_CPU_ABRT_EV4T=y
-CONFIG_CPU_CACHE_V4WT=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_OUTER_CACHE is not set
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=200
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-CONFIG_MTD_NAND_IDS=m
-CONFIG_MTD_NAND_S3C2410=m
-# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
-CONFIG_MTD_NAND_S3C2410_HWECC=y
-CONFIG_MTD_NAND_S3C2410_CLKSTOP=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_S3C2410=y
-# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
-CONFIG_TOUCHSCREEN_S3C2410_ALT=y
-# CONFIG_TOUCHSCREEN_ADC is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_S3C2410=y
-# CONFIG_SERIAL_S3C2410_CONSOLE is not set
-CONFIG_SERIAL_CORE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_POWER_SUPPLY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_S3C24XX=y
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_BACKLIGHT_S3C2410=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_S3C2410=y
-# CONFIG_FB_S3C2410_DEBUG is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-# CONFIG_HID is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-CONFIG_USB_GADGET_S3C2410=y
-CONFIG_USB_S3C2410=y
-# CONFIG_USB_S3C2410_DEBUG is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_S3C2440=y
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-CONFIG_RTC_DRV_S3C=y
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-# CONFIG_DEBUG_S3C2410_PORT is not set
-CONFIG_DEBUG_S3C2410_UART=0
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-handhelds-2.6/h1910/defconfig b/packages/linux/linux-handhelds-2.6/h1910/defconfig
deleted file mode 100644
index 3c7ebb457d..0000000000
--- a/packages/linux/linux-handhelds-2.6/h1910/defconfig
+++ /dev/null
@@ -1,1333 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:27 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-CONFIG_ARCH_H1900=y
-CONFIG_IPAQ_H1900_LCD=y
-CONFIG_IPAQ_H1900_BUTTONS=y
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X30 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA25x=y
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-# CONFIG_KEYBOARD_ASIC3 is not set
-# CONFIG_KEYBOARD_GPIO is not set
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_ADC is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_POWER_SUPPLY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_ASIC3 is not set
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_H1910=m
-CONFIG_SND_PXA2xx_I2SOUND=m
-# CONFIG_SND_PXA2XX_AC97 is not set
-# CONFIG_SND_RECON is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-CONFIG_SND_UDA1380=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-# CONFIG_HID is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-CONFIG_MMC_ASIC3=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h2200/defconfig b/packages/linux/linux-handhelds-2.6/h2200/defconfig
deleted file mode 100644
index c46793dbe6..0000000000
--- a/packages/linux/linux-handhelds-2.6/h2200/defconfig
+++ /dev/null
@@ -1,1734 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:28 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-CONFIG_DMABOUNCE=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-CONFIG_ARCH_H2200=y
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA25x=y
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-CONFIG_PCMCIA_DEBUG=y
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-CONFIG_PCMCIA_H2200=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-# CONFIG_IRNET is not set
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIDTL1 is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBTUART is not set
-# CONFIG_BT_HCIVHCI is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-CONFIG_IEEE80211_SOFTMAC=m
-# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-CONFIG_MTD_NAND_HAMCOP=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-CONFIG_NET_WIRELESS_RTNETLINK=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-CONFIG_ATMEL=m
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-CONFIG_AIRO_CS=m
-CONFIG_PCMCIA_ATMEL=m
-CONFIG_PCMCIA_WL3501=m
-CONFIG_USB_ZD1201=m
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_ZD1211RW=m
-# CONFIG_ZD1211RW_DEBUG is not set
-# CONFIG_ACX is not set
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-# CONFIG_PCMCIA_PCNET is not set
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_H2200=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-CONFIG_W1=y
-
-#
-# 1-wire Bus Masters
-#
-# CONFIG_W1_MASTER_DS2490 is not set
-# CONFIG_W1_MASTER_DS2482 is not set
-CONFIG_W1_MASTER_DS1WM=y
-
-#
-# 1-wire Slaves
-#
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_SLAVE_DS2760=y
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-CONFIG_BATTERY_DS2760=y
-# CONFIG_ADC_BATTERY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-CONFIG_ADC_SAMCOP=y
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-CONFIG_SOC_HAMCOP=y
-CONFIG_SOC_SAMCOP_DMA=y
-# CONFIG_SOC_SAMCOP_DMA_DEBUG is not set
-CONFIG_SOC_MQ11XX=y
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_HAMCOP=y
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_BACKLIGHT_H2200=y
-CONFIG_LCD_H2200=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MBX is not set
-CONFIG_FB_MQ1100=y
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_H2200=m
-CONFIG_SND_PXA2xx_I2SOUND=m
-# CONFIG_SND_PXA2XX_AC97 is not set
-# CONFIG_SND_RECON is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-CONFIG_SND_UDA1380=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-# CONFIG_USB_GTCO is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_DM9601=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-CONFIG_USB_NET_MCS7830=m
-CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_CDC_SUBSET=m
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_KC2190=y
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_AIRCABLE=m
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_MOS7720=m
-CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_NAVMAN=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_SERIAL_DEBUG=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-CONFIG_USB_PXA2XX_GPIO=y
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-CONFIG_MMC_SAMCOP=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-CONFIG_CRYPTO_AES=m
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h3600/defconfig b/packages/linux/linux-handhelds-2.6/h3600/defconfig
deleted file mode 100644
index b20e9624da..0000000000
--- a/packages/linux/linux-handhelds-2.6/h3600/defconfig
+++ /dev/null
@@ -1,1252 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:28 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-# CONFIG_SA1100_COLLIE is not set
-# CONFIG_SA1100_H3100 is not set
-CONFIG_SA1100_H3600=y
-# CONFIG_SA1100_H3800 is not set
-CONFIG_SA1100_H3XXX=y
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA56X is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_JORNADA820 is not set
-# CONFIG_SA1100_XDA is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-# CONFIG_H3600_SLEEVE is not set
-CONFIG_SA1100_USB=y
-# CONFIG_SA1100_USB_NETLINK is not set
-# CONFIG_SA1100_USB_CHAR is not set
-CONFIG_IPAQ_H3600_LCD=y
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-CONFIG_NODES_SHIFT=2
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_SA1110=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_MICRO=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_IPAQ_MICRO=y
-# CONFIG_TOUCHSCREEN_ADC is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_ADC_BATTERY is not set
-CONFIG_IPAQ_MICRO_BATTERY=y
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_IPAQ_MICRO=y
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP_SA11X0 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-CONFIG_FB_SA1100=y
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-# CONFIG_HID is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h3800/defconfig b/packages/linux/linux-handhelds-2.6/h3800/defconfig
deleted file mode 100644
index e23511467a..0000000000
--- a/packages/linux/linux-handhelds-2.6/h3800/defconfig
+++ /dev/null
@@ -1,1249 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:29 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-# CONFIG_SA1100_COLLIE is not set
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-CONFIG_SA1100_H3800=y
-CONFIG_SA1100_H3XXX=y
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA56X is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_JORNADA820 is not set
-# CONFIG_SA1100_XDA is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-CONFIG_SA1100_USB=y
-# CONFIG_SA1100_USB_NETLINK is not set
-# CONFIG_SA1100_USB_CHAR is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-CONFIG_NODES_SHIFT=2
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_SA1110=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_ASIC2=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ASIC2=y
-# CONFIG_TOUCHSCREEN_ADC is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_ADC_BATTERY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-CONFIG_ADC_ASIC2=y
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_HTC_ASIC2=y
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP_SA11X0 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-CONFIG_FB_SA1100=y
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-# CONFIG_HID is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h3900/defconfig b/packages/linux/linux-handhelds-2.6/h3900/defconfig
deleted file mode 100644
index d52b267246..0000000000
--- a/packages/linux/linux-handhelds-2.6/h3900/defconfig
+++ /dev/null
@@ -1,1367 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:29 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-CONFIG_MACH_H3900=y
-CONFIG_IPAQ_H3900_LCD=y
-CONFIG_IPAQ_H3900_BACKLIGHT=y
-CONFIG_IPAQ_H3900_BATTERY=y
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X30 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA25x=y
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_ASIC2=y
-# CONFIG_KEYBOARD_ASIC3 is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ASIC2=y
-# CONFIG_TOUCHSCREEN_ADC is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_ADC_BATTERY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-CONFIG_ADC_ASIC2=y
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_HTC_ASIC2=y
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_ASIC3 is not set
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-# CONFIG_SND_RECON is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-CONFIG_MMC_ASIC3=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h4000/defconfig b/packages/linux/linux-handhelds-2.6/h4000/defconfig
deleted file mode 100644
index 1f47995434..0000000000
--- a/packages/linux/linux-handhelds-2.6/h4000/defconfig
+++ /dev/null
@@ -1,1493 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:30 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-CONFIG_MACH_H4000=y
-CONFIG_MACH_H4300=y
-CONFIG_IPAQ_H4000_IRDA=m
-CONFIG_IPAQ_H4000_LCD=y
-CONFIG_IPAQ_H4000_BACKLIGHT=y
-CONFIG_IPAQ_H4000_PCMCIA=y
-# CONFIG_IPAQ_H4000_BUTTONS is not set
-CONFIG_IPAQ_H4000_LEDS=y
-CONFIG_IPAQ_H4000_BT=m
-CONFIG_IPAQ_H4300_KBD=y
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X30 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA25x=y
-CONFIG_PXA_SSP=y
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-CONFIG_PCMCIA_DEBUG=y
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-# CONFIG_IRNET is not set
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIDTL1 is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBTUART is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-CONFIG_MTD_NAND_DISKONCHIP=y
-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
-# CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-CONFIG_NET_WIRELESS_RTNETLINK=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-# CONFIG_HERMES is not set
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_HOSTAP is not set
-CONFIG_ACX=m
-# CONFIG_ACX_MEM is not set
-CONFIG_ACX_CS=y
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-# CONFIG_NET_PCMCIA is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-# CONFIG_KEYBOARD_ASIC3 is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_RS232_SERIAL=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-CONFIG_ADC_BATTERY=y
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-CONFIG_ADC_ADS7846_SSP=y
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_ASIC3=y
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_H4000=m
-CONFIG_SND_PXA2xx_I2SOUND=m
-# CONFIG_SND_PXA2XX_AC97 is not set
-# CONFIG_SND_RECON is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-CONFIG_SND_UDA1380=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-CONFIG_USB_PXA2XX_GPIO=y
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-CONFIG_MMC_ASIC3=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_REED_SOLOMON=y
-CONFIG_REED_SOLOMON_DEC16=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/h5000/defconfig b/packages/linux/linux-handhelds-2.6/h5000/defconfig
deleted file mode 100644
index 8beab42a17..0000000000
--- a/packages/linux/linux-handhelds-2.6/h5000/defconfig
+++ /dev/null
@@ -1,1369 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:30 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-CONFIG_DMABOUNCE=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-CONFIG_ARCH_H5400=y
-CONFIG_IPAQ_H5400_BT=m
-CONFIG_IPAQ_H5400_LCD=y
-CONFIG_IPAQ_H5400_BL=y
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA25x=y
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-# CONFIG_IRNET is not set
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_PHYSMAP=y
-CONFIG_MTD_PHYSMAP_START=0x8000000
-CONFIG_MTD_PHYSMAP_LEN=0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IPAQ is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_GPIODEV_KEYS=y
-# CONFIG_GPIODEV_KEYS2 is not set
-CONFIG_GPIODEV_DIAGONAL=y
-# CONFIG_KEYBOARD_GPIO is not set
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_H5400_BUZZER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-CONFIG_W1=y
-
-#
-# 1-wire Bus Masters
-#
-CONFIG_W1_MASTER_DS1WM=y
-
-#
-# 1-wire Slaves
-#
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_SLAVE_DS2760=y
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-CONFIG_BATTERY_DS2760=y
-# CONFIG_ADC_BATTERY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-CONFIG_ADC_SAMCOP=y
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-# CONFIG_IPAQ_SAMCOP_FSI is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-CONFIG_SOC_SAMCOP=y
-# CONFIG_SOC_HAMCOP is not set
-CONFIG_SOC_SAMCOP_DMA=y
-# CONFIG_SOC_SAMCOP_DMA_DEBUG is not set
-CONFIG_SOC_MQ11XX=y
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SAMCOP=y
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MBX is not set
-CONFIG_FB_MQ1100=y
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-CONFIG_MMC_SAMCOP=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcalpine/defconfig b/packages/linux/linux-handhelds-2.6/htcalpine/defconfig
deleted file mode 100644
index cc6ea81fbc..0000000000
--- a/packages/linux/linux-handhelds-2.6/htcalpine/defconfig
+++ /dev/null
@@ -1,1273 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:31 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-CONFIG_MACH_HTCALPINE=y
-CONFIG_HTCALPINE_CPLD=y
-CONFIG_HTCALPINE_PHONE=m
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA27x=y
-# CONFIG_PXA27x_VOLTAGE is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-# CONFIG_KEYBOARD_PXA27x is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_POWER_SUPPLY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-CONFIG_ADC_ADS7846_SSP=y
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcapache/defconfig b/packages/linux/linux-handhelds-2.6/htcapache/defconfig
deleted file mode 100644
index 85ff1a53d7..0000000000
--- a/packages/linux/linux-handhelds-2.6/htcapache/defconfig
+++ /dev/null
@@ -1,1359 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:32 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-CONFIG_BOARD_IRQ_MAP_SMALL=y
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-CONFIG_MACH_HTCAPACHE=y
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-CONFIG_PXA27x_VOLTAGE=y
-CONFIG_PXA27x_VOLTAGE_MAX158xx=y
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-CONFIG_NET_WIRELESS_RTNETLINK=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_HOSTAP is not set
-CONFIG_ACX=m
-CONFIG_ACX_MEM=y
-# CONFIG_ACX_CS is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_GPIODEV_KEYS=y
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_PXA27x=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_POWER_SUPPLY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-CONFIG_ADC_AD7877=y
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-CONFIG_HTC_EGPIO=y
-CONFIG_HTC_BBKEYS=y
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_GPIO=y
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_HTCAPACHE=m
-CONFIG_SND_PXA2xx_I2SOUND=m
-# CONFIG_SND_PXA2XX_AC97 is not set
-# CONFIG_SND_RECON is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-CONFIG_SND_AK4641=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-CONFIG_RTC_DRV_PCF8563=m
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcbeetles/defconfig b/packages/linux/linux-handhelds-2.6/htcbeetles/defconfig
deleted file mode 100644
index df6c1c827d..0000000000
--- a/packages/linux/linux-handhelds-2.6/htcbeetles/defconfig
+++ /dev/null
@@ -1,1280 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:32 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-CONFIG_MACH_HTCBEETLES=y
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_HTCSABLE_LCD is not set
-# CONFIG_HTCSABLE_BACKLIGHT is not set
-# CONFIG_HTCSABLE_ROM is not set
-# CONFIG_HTCSABLE_BT is not set
-# CONFIG_HTCSABLE_PHONE is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X30 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA27x=y
-# CONFIG_PXA27x_VOLTAGE is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-# CONFIG_KEYBOARD_ASIC3 is not set
-CONFIG_KEYBOARD_PXA27x=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_POWER_SUPPLY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-CONFIG_ADC_ADS7846_SSP=y
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_ASIC3 is not set
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-# CONFIG_MMC_ASIC3 is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcblueangel/defconfig b/packages/linux/linux-handhelds-2.6/htcblueangel/defconfig
deleted file mode 100644
index 690c3d5993..0000000000
--- a/packages/linux/linux-handhelds-2.6/htcblueangel/defconfig
+++ /dev/null
@@ -1,1514 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:33 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-CONFIG_MACH_BLUEANGEL=y
-CONFIG_MACH_BLUEANGEL_LCD=y
-CONFIG_MACH_BLUEANGEL_BACKLIGHT=y
-CONFIG_MACH_BLUEANGEL_DS1WM=y
-CONFIG_MACH_BLUEANGEL_PCMCIA=y
-CONFIG_MACH_BLUEANGEL_SUSPEND=y
-CONFIG_MACH_BLUEANGEL_LEDS=y
-CONFIG_MACH_BLUEANGEL_ASIC3_LEDS=y
-CONFIG_MACH_BLUEANGEL_KEYPAD=y
-CONFIG_MACH_BLUEANGEL_POWER=y
-CONFIG_MACH_BLUEANGEL_ROM=y
-CONFIG_MACH_BLUEANGEL_DPRAM=y
-CONFIG_MACH_BLUEANGEL_PHONE=m
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X30 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA25x=y
-CONFIG_PXA26x=y
-CONFIG_PXA_SSP=y
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-CONFIG_PCMCIA_DEBUG=y
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIDTL1 is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBTUART is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=m
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=m
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=m
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IPAQ is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-CONFIG_NET_WIRELESS_RTNETLINK=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-# CONFIG_HERMES is not set
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_HOSTAP is not set
-CONFIG_ACX=m
-# CONFIG_ACX_MEM is not set
-CONFIG_ACX_CS=y
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-# CONFIG_NET_PCMCIA is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_ASIC3=y
-CONFIG_KEYBOARD_TSC2200=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_TSC2200=y
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-CONFIG_TIHTC=m
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-CONFIG_W1=y
-
-#
-# 1-wire Bus Masters
-#
-# CONFIG_W1_MASTER_DS2482 is not set
-CONFIG_W1_MASTER_DS1WM=y
-
-#
-# 1-wire Slaves
-#
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_SLAVE_DS2760=y
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-CONFIG_BATTERY_DS2760=y
-# CONFIG_ADC_BATTERY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-CONFIG_ADC_TSC2200_SSP=y
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-CONFIG_SOC_TSC2200=y
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_ASIC3=y
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MBX is not set
-CONFIG_FB_W100=y
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-# CONFIG_SND_RECON is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# SoC Platforms
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_SSP=m
-# CONFIG_SND_PXA2XX_SOC_MAGICIAN is not set
-CONFIG_SND_PXA2XX_SOC_BLUEANGEL=m
-# CONFIG_SND_PXA2XX_SOC_H5000 is not set
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8976 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-CONFIG_SND_SOC_UDA1380=m
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-CONFIG_USB_PXA2XX_GPIO=y
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-CONFIG_MMC_ASIC3=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htchimalaya/defconfig b/packages/linux/linux-handhelds-2.6/htchimalaya/defconfig
deleted file mode 100644
index 5389f69e7a..0000000000
--- a/packages/linux/linux-handhelds-2.6/htchimalaya/defconfig
+++ /dev/null
@@ -1,1276 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:33 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-CONFIG_MACH_HIMALAYA=y
-# CONFIG_MACH_HIMALAYA_ASIC3 is not set
-# CONFIG_MACH_HIMALAYA_ROM is not set
-# CONFIG_HIMALAYA_LEDS is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X30 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA25x=y
-CONFIG_PXA26x=y
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-# CONFIG_KEYBOARD_ASIC3 is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_POWER_SUPPLY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-CONFIG_ADC_ADS7846_SSP=y
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_ASIC3 is not set
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_CFB_FILLRECT is not set
-# CONFIG_FB_CFB_COPYAREA is not set
-# CONFIG_FB_CFB_IMAGEBLIT is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-# CONFIG_MMC_ASIC3 is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcsable/defconfig b/packages/linux/linux-handhelds-2.6/htcsable/defconfig
deleted file mode 100644
index ebdd7b8e9f..0000000000
--- a/packages/linux/linux-handhelds-2.6/htcsable/defconfig
+++ /dev/null
@@ -1,1386 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:34 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-CONFIG_MACH_HW6900=y
-CONFIG_HTCSABLE_LCD=y
-CONFIG_HTCSABLE_BACKLIGHT=y
-# CONFIG_HTCSABLE_ROM is not set
-# CONFIG_HTCSABLE_BT is not set
-# CONFIG_HTCSABLE_PHONE is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X30 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA27x=y
-# CONFIG_PXA27x_VOLTAGE is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=m
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_CFI_INTELEXT is not set
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IPAQ is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-CONFIG_NET_WIRELESS_RTNETLINK=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_HOSTAP is not set
-CONFIG_ACX=m
-CONFIG_ACX_MEM=y
-# CONFIG_ACX_CS is not set
-CONFIG_ACX_HTCSABLE=m
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-# CONFIG_KEYBOARD_ASIC3 is not set
-CONFIG_KEYBOARD_PXA27x=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_POWER_SUPPLY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-CONFIG_ADC_ADS7846_SSP=y
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_ASIC3 is not set
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_HTCSABLE=m
-CONFIG_SND_PXA2xx_I2SOUND=m
-# CONFIG_SND_PXA2XX_AC97 is not set
-# CONFIG_SND_RECON is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-CONFIG_SND_AK4641=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-CONFIG_MMC_ASIC3=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcuniversal/defconfig b/packages/linux/linux-handhelds-2.6/htcuniversal/defconfig
deleted file mode 100644
index 9a9c2451a1..0000000000
--- a/packages/linux/linux-handhelds-2.6/htcuniversal/defconfig
+++ /dev/null
@@ -1,1394 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:34 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-CONFIG_MACH_HTCUNIVERSAL=y
-CONFIG_HTCUNIVERSAL_CORE=y
-CONFIG_HTCUNIVERSAL_UDC=y
-CONFIG_HTCUNIVERSAL_POWER=y
-CONFIG_HTCUNIVERSAL_BACKLIGHT=y
-CONFIG_HTCUNIVERSAL_LCD=y
-CONFIG_HTCUNIVERSAL_TS2=m
-CONFIG_HTCUNIVERSAL_BUTTONS=y
-CONFIG_HTCUNIVERSAL_BLUETOOTH=m
-CONFIG_HTCUNIVERSAL_ASIC3_LEDS=y
-CONFIG_HTCUNIVERSAL_PHONE=m
-CONFIG_HTCUNIVERSAL_AK4641=m
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X30 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA27x=y
-# CONFIG_PXA27x_VOLTAGE is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-CONFIG_NET_WIRELESS_RTNETLINK=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_HOSTAP is not set
-CONFIG_ACX=m
-CONFIG_ACX_MEM=y
-# CONFIG_ACX_CS is not set
-CONFIG_ACX_HTCUNIVERSAL=m
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_ASIC3=y
-CONFIG_KEYBOARD_PXA27x=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=m
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-CONFIG_W1=y
-
-#
-# 1-wire Bus Masters
-#
-# CONFIG_W1_MASTER_DS2482 is not set
-CONFIG_W1_MASTER_DS1WM=y
-
-#
-# 1-wire Slaves
-#
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_SLAVE_DS2760=y
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-CONFIG_BATTERY_DS2760=y
-# CONFIG_ADC_BATTERY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-CONFIG_ADC_ADS7846_SSP=y
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-CONFIG_HTC_ASIC3_DS1WM=y
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_ASIC3=y
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_HTCUNIVERSAL=m
-CONFIG_SND_PXA2xx_I2SOUND=m
-# CONFIG_SND_PXA2XX_AC97 is not set
-# CONFIG_SND_RECON is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-CONFIG_MMC_ASIC3=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/htcwallaby/defconfig b/packages/linux/linux-handhelds-2.6/htcwallaby/defconfig
deleted file mode 100644
index 6b7f91d4d4..0000000000
--- a/packages/linux/linux-handhelds-2.6/htcwallaby/defconfig
+++ /dev/null
@@ -1,1251 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:35 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-# CONFIG_SA1100_COLLIE is not set
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA56X is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_JORNADA820 is not set
-CONFIG_SA1100_XDA=y
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-CONFIG_SA1100_USB=y
-# CONFIG_SA1100_USB_NETLINK is not set
-# CONFIG_SA1100_USB_CHAR is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-CONFIG_NODES_SHIFT=2
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_SA1110=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=m
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_CFI_INTELEXT is not set
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IPAQ is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_ADC is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_ADC_BATTERY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP_SA11X0 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-CONFIG_FB_SA1100=y
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-# CONFIG_HID is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/hx4700/defconfig b/packages/linux/linux-handhelds-2.6/hx4700/defconfig
deleted file mode 100644
index 90ecb03be0..0000000000
--- a/packages/linux/linux-handhelds-2.6/hx4700/defconfig
+++ /dev/null
@@ -1,1751 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:31 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-CONFIG_MACH_H4700=y
-CONFIG_HX4700_NAVPOINT=y
-CONFIG_HX4700_CORE=y
-CONFIG_HX4700_BLUETOOTH=m
-CONFIG_HX4700_PCMCIA=y
-CONFIG_HX4700_LCD=y
-CONFIG_HX4700_LEDS=y
-CONFIG_HX4700_POWER2=y
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X30 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SUSPEND_SAVE_EXTRA_REGS=y
-# CONFIG_PXA27x_VOLTAGE is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-CONFIG_PCMCIA_DEBUG=y
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-# CONFIG_IRNET is not set
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIDTL1 is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBTUART is not set
-# CONFIG_BT_HCIVHCI is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-CONFIG_IEEE80211_SOFTMAC=m
-# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IPAQ is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-CONFIG_NET_WIRELESS_RTNETLINK=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-CONFIG_ATMEL=m
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-CONFIG_AIRO_CS=m
-CONFIG_PCMCIA_ATMEL=m
-CONFIG_PCMCIA_WL3501=m
-CONFIG_USB_ZD1201=m
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_ZD1211RW=m
-# CONFIG_ZD1211RW_DEBUG is not set
-CONFIG_ACX=m
-# CONFIG_ACX_USB is not set
-CONFIG_ACX_MEM=y
-# CONFIG_ACX_CS is not set
-CONFIG_ACX_HX4700=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-# CONFIG_PCMCIA_PCNET is not set
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-CONFIG_PPPOE=m
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-# CONFIG_KEYBOARD_ASIC3 is not set
-# CONFIG_KEYBOARD_PXA27x is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-CONFIG_MOUSE_NAVPOINT=y
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_RS232_SERIAL=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-CONFIG_W1=y
-
-#
-# 1-wire Bus Masters
-#
-# CONFIG_W1_MASTER_DS2490 is not set
-# CONFIG_W1_MASTER_DS2482 is not set
-CONFIG_W1_MASTER_DS1WM=y
-
-#
-# 1-wire Slaves
-#
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_SLAVE_DS2760=y
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-CONFIG_BATTERY_DS2760=y
-CONFIG_ADC_BATTERY=y
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-CONFIG_ADC_ADS7846_SSP=y
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-CONFIG_HTC_ASIC3_DS1WM=y
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_ASIC3=y
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MBX is not set
-CONFIG_FB_W100=y
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_HX4700=m
-CONFIG_SND_PXA2xx_I2SOUND=m
-# CONFIG_SND_PXA2XX_AC97 is not set
-# CONFIG_SND_RECON is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-CONFIG_SND_AK4641=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_OHCI_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-# CONFIG_USB_GTCO is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_DM9601=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-CONFIG_USB_NET_MCS7830=m
-CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_NET_CDC_SUBSET=m
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_KC2190=y
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_AIRCABLE=m
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_MOS7720=m
-CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_NAVMAN=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_SERIAL_DEBUG=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-CONFIG_USB_PXA2XX_GPIO=y
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_PXA is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-CONFIG_MMC_ASIC3=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-CONFIG_CRYPTO_AES=m
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/looxc550/defconfig b/packages/linux/linux-handhelds-2.6/looxc550/defconfig
deleted file mode 100644
index 57d2552651..0000000000
--- a/packages/linux/linux-handhelds-2.6/looxc550/defconfig
+++ /dev/null
@@ -1,1276 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:35 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-# CONFIG_MACH_MAGICIAN is not set
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-CONFIG_MACH_LOOXC550=y
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA27x=y
-# CONFIG_PXA27x_VOLTAGE is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=y
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-# CONFIG_KEYBOARD_PXA27x is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=y
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-CONFIG_ADC_BATTERY=y
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-CONFIG_ADC_ADS7846_SSP=y
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-# CONFIG_SND is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/magician/defconfig b/packages/linux/linux-handhelds-2.6/magician/defconfig
deleted file mode 100644
index 6817d85f2d..0000000000
--- a/packages/linux/linux-handhelds-2.6/magician/defconfig
+++ /dev/null
@@ -1,1604 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:31 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-CONFIG_BOARD_IRQ_MAP_SMALL=y
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_TOSHIBA_TMIO_OHCI is not set
-# CONFIG_ARCH_ESERIES is not set
-# CONFIG_MACH_A620 is not set
-# CONFIG_MACH_A716 is not set
-# CONFIG_MACH_A730 is not set
-# CONFIG_ARCH_H1900 is not set
-# CONFIG_ARCH_H2200 is not set
-# CONFIG_MACH_H3900 is not set
-# CONFIG_MACH_H4000 is not set
-# CONFIG_MACH_H4700 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_ARCH_H5400 is not set
-# CONFIG_MACH_HIMALAYA is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_MACH_HTCALPINE is not set
-CONFIG_MACH_MAGICIAN=y
-CONFIG_MAGICIAN_PM=y
-CONFIG_MAGICIAN_TS=m
-CONFIG_MAGICIAN_LCD=y
-CONFIG_MAGICIAN_PHONE=m
-# CONFIG_MACH_HTCAPACHE is not set
-# CONFIG_MACH_BLUEANGEL is not set
-
-#
-# HTC_HW6X00
-#
-# CONFIG_MACH_HTCBEETLES is not set
-# CONFIG_MACH_HW6900 is not set
-# CONFIG_MACH_HTCATHENA is not set
-# CONFIG_ARCH_AXIMX3 is not set
-# CONFIG_ARCH_AXIMX5 is not set
-# CONFIG_MACH_X50 is not set
-# CONFIG_ARCH_ROVERP1 is not set
-# CONFIG_ARCH_ROVERP5P is not set
-# CONFIG_MACH_XSCALE_PALMLD is not set
-# CONFIG_MACH_T3XSCALE is not set
-# CONFIG_MACH_RECON is not set
-# CONFIG_MACH_GHI270HG is not set
-# CONFIG_MACH_GHI270 is not set
-# CONFIG_MACH_LOOXC550 is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=m
-CONFIG_PXA_SUSPEND_SAVE_EXTRA_REGS=y
-CONFIG_PXA27x_VOLTAGE=m
-CONFIG_PXA27x_VOLTAGE_MAX158xx=m
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA=m
-CONFIG_PXA25x_ALTERNATE_FREQS=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-# CONFIG_IRNET is not set
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=m
-CONFIG_MTD_BLOCK=m
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=m
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=m
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-CONFIG_MTD_CFI_INTELEXT=m
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=m
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_PHYSMAP=m
-CONFIG_MTD_PHYSMAP_START=0x8000000
-CONFIG_MTD_PHYSMAP_LEN=0
-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_IPAQ is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-# CONFIG_KEYBOARD_PXA27x is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_ADC=m
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-# CONFIG_SERIAL_PXA_CONSOLE is not set
-CONFIG_SERIAL_PXA_COUNT=4
-CONFIG_SERIAL_PXA_IR=y
-CONFIG_SERIAL_CORE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-CONFIG_TIHTC=m
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-CONFIG_W1=y
-
-#
-# 1-wire Bus Masters
-#
-# CONFIG_W1_MASTER_DS2490 is not set
-# CONFIG_W1_MASTER_DS2482 is not set
-CONFIG_W1_MASTER_DS1WM=y
-
-#
-# 1-wire Slaves
-#
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_SLAVE_DS2760=y
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-CONFIG_BATTERY_DS2760=y
-CONFIG_ADC_BATTERY=y
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-CONFIG_ADC_ADS7846_SSP=m
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-CONFIG_HTC_PASIC3=y
-CONFIG_HTC_EGPIO=y
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_T7L66XB is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TC6393XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_PASIC3=y
-CONFIG_LEDS_GPIO=y
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_HWTIMER=y
-CONFIG_LEDS_TRIGGER_BACKLIGHT=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-# CONFIG_SND_RECON is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# SoC Platforms
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_SSP=m
-CONFIG_SND_PXA2XX_SOC_MAGICIAN=m
-# CONFIG_SND_PXA2XX_SOC_BLUEANGEL is not set
-# CONFIG_SND_PXA2XX_SOC_H5000 is not set
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8976 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-CONFIG_SND_SOC_UDA1380=m
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-# CONFIG_USB_GTCO is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_PXA27X_DMA is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-# CONFIG_USB_PXA2XX_GPIO is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux-handhelds-2.6/rx1950/defconfig b/packages/linux/linux-handhelds-2.6/rx1950/defconfig
deleted file mode 100644
index 01317611b0..0000000000
--- a/packages/linux/linux-handhelds-2.6/rx1950/defconfig
+++ /dev/null
@@ -1,1311 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:36 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_NO_IOPORT=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-CONFIG_ARCH_S3C2410=y
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-# CONFIG_BOARD_IRQ_MAP_BIG is not set
-CONFIG_PLAT_S3C24XX=y
-CONFIG_CPU_S3C244X=y
-# CONFIG_S3C2410_BOOT_ERROR_RESET is not set
-# CONFIG_S3C2410_PM_DEBUG is not set
-# CONFIG_S3C2410_PM_CHECK is not set
-CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
-CONFIG_S3C2410_DMA=y
-# CONFIG_S3C2410_DMA_DEBUG is not set
-
-#
-# S3C2400 Machines
-#
-CONFIG_CPU_S3C2410_DMA=y
-CONFIG_S3C2410_PM=y
-CONFIG_S3C2410_GPIO=y
-CONFIG_S3C2410_CLOCK=y
-
-#
-# S3C2410 Machines
-#
-# CONFIG_ARCH_SMDK2410 is not set
-# CONFIG_ARCH_H1940 is not set
-CONFIG_PM_H1940=y
-# CONFIG_MACH_N30 is not set
-# CONFIG_ARCH_BAST is not set
-# CONFIG_MACH_OTOM is not set
-# CONFIG_MACH_AML_M5900 is not set
-# CONFIG_MACH_VR1000 is not set
-# CONFIG_MACH_QT2410 is not set
-
-#
-# S3C2412 Machines
-#
-# CONFIG_MACH_SMDK2413 is not set
-# CONFIG_MACH_VSTMS is not set
-CONFIG_CPU_S3C2440=y
-CONFIG_S3C2440_DMA=y
-
-#
-# S3C2440 Machines
-#
-# CONFIG_MACH_ANUBIS is not set
-# CONFIG_MACH_OSIRIS is not set
-# CONFIG_MACH_RX3715 is not set
-# CONFIG_ARCH_S3C2440 is not set
-# CONFIG_MACH_NEXCODER_2440 is not set
-# CONFIG_MACH_G500 is not set
-CONFIG_CPU_S3C2442=y
-
-#
-# S3C2442 Machines
-#
-CONFIG_MACH_RX1950=y
-# CONFIG_MACH_HTCHERMES is not set
-# CONFIG_MACH_HTC_TRINITY is not set
-
-#
-# S3C2443 Machines
-#
-# CONFIG_MACH_SMDK2443 is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM920T=y
-CONFIG_CPU_32v4T=y
-CONFIG_CPU_ABRT_EV4T=y
-CONFIG_CPU_CACHE_V4WT=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_OUTER_CACHE is not set
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=200
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-# CONFIG_TXTOFFSET_DELTA is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=m
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_PARTITIONS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-CONFIG_MTD_NAND_IDS=m
-CONFIG_MTD_NAND_S3C2410=m
-# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
-# CONFIG_MTD_NAND_S3C2410_HWECC is not set
-# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_TSDEV=y
-CONFIG_INPUT_TSDEV_SCREEN_X=240
-CONFIG_INPUT_TSDEV_SCREEN_Y=320
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_S3C2410=y
-CONFIG_TOUCHSCREEN_S3C2410_DEBUG=y
-CONFIG_TOUCHSCREEN_S3C2410_ALT=y
-# CONFIG_TOUCHSCREEN_ADC is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_S3C2410=y
-CONFIG_SERIAL_S3C2410_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_ADC_BATTERY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_S3C24XX=y
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_BACKLIGHT_S3C2410=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_S3C2410=y
-# CONFIG_FB_S3C2410_DEBUG is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_S3C2410 is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-CONFIG_USB_GADGET_S3C2410=y
-CONFIG_USB_S3C2410=y
-# CONFIG_USB_S3C2410_DEBUG is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_S3C2440=y
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-CONFIG_RTC_DRV_S3C=y
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-CONFIG_DEBUG_S3C2410_PORT=y
-CONFIG_DEBUG_S3C2410_UART=0
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-handhelds-2.6/rx3000/defconfig b/packages/linux/linux-handhelds-2.6/rx3000/defconfig
deleted file mode 100644
index 3096d39118..0000000000
--- a/packages/linux/linux-handhelds-2.6/rx3000/defconfig
+++ /dev/null
@@ -1,1428 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21-hh17
-# Sun Nov 11 00:39:36 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_NO_IOPORT=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-CONFIG_ARCH_S3C2410=y
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_BOARD_IRQ_MAP_SMALL is not set
-CONFIG_BOARD_IRQ_MAP_BIG=y
-CONFIG_PLAT_S3C24XX=y
-CONFIG_CPU_S3C244X=y
-CONFIG_S3C2410_BOOT_ERROR_RESET=y
-# CONFIG_S3C2410_PM_DEBUG is not set
-# CONFIG_S3C2410_PM_CHECK is not set
-CONFIG_S3C2410_LOWLEVEL_UART_PORT=2
-CONFIG_S3C2410_DMA=y
-# CONFIG_S3C2410_DMA_DEBUG is not set
-
-#
-# S3C2400 Machines
-#
-CONFIG_S3C2410_PM=y
-CONFIG_S3C2410_GPIO=y
-CONFIG_S3C2410_CLOCK=y
-
-#
-# S3C2410 Machines
-#
-# CONFIG_ARCH_SMDK2410 is not set
-# CONFIG_ARCH_H1940 is not set
-CONFIG_PM_H1940=y
-# CONFIG_MACH_N30 is not set
-# CONFIG_ARCH_BAST is not set
-# CONFIG_MACH_OTOM is not set
-# CONFIG_MACH_AML_M5900 is not set
-# CONFIG_MACH_VR1000 is not set
-# CONFIG_MACH_QT2410 is not set
-
-#
-# S3C2412 Machines
-#
-# CONFIG_MACH_SMDK2413 is not set
-# CONFIG_MACH_VSTMS is not set
-CONFIG_CPU_S3C2440=y
-CONFIG_S3C2440_DMA=y
-
-#
-# S3C2440 Machines
-#
-# CONFIG_MACH_ANUBIS is not set
-# CONFIG_MACH_OSIRIS is not set
-CONFIG_MACH_RX3715=y
-CONFIG_RX3000_BACKLIGHT=y
-CONFIG_RX3000_LEDS=y
-CONFIG_RX3000_BATTERY=y
-CONFIG_RX3000_BLUETOOTH=m
-CONFIG_RX3000_BUTTONS=y
-CONFIG_RX3000_SERIAL=y
-CONFIG_RX3000_TS=y
-CONFIG_RX3000_UDC=y
-# CONFIG_ARCH_S3C2440 is not set
-# CONFIG_MACH_NEXCODER_2440 is not set
-# CONFIG_MACH_G500 is not set
-
-#
-# S3C2442 Machines
-#
-# CONFIG_MACH_RX1950 is not set
-# CONFIG_MACH_HTCHERMES is not set
-# CONFIG_MACH_HTC_TRINITY is not set
-
-#
-# S3C2443 Machines
-#
-# CONFIG_MACH_SMDK2443 is not set
-
-#
-# Linux As Bootloader
-#
-# CONFIG_LAB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM920T=y
-CONFIG_CPU_32v4T=y
-CONFIG_CPU_ABRT_EV4T=y
-CONFIG_CPU_CACHE_V4WT=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_OUTER_CACHE is not set
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=200
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="keepinitrd"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-CONFIG_TXTOFFSET_DELTA=y
-CONFIG_TXTOFFSET_DELTA_VALUE=0x00090000
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_DPM_DEBUG=y
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=0
-CONFIG_MTDRAM_ERASE_SIZE=256
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-CONFIG_MTD_NAND_IDS=y
-CONFIG_MTD_NAND_S3C2410=y
-# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
-# CONFIG_MTD_NAND_S3C2410_HWECC is not set
-CONFIG_MTD_NAND_S3C2410_CLKSTOP=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-CONFIG_NET_WIRELESS_RTNETLINK=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_HOSTAP is not set
-CONFIG_ACX=m
-CONFIG_ACX_MEM=y
-# CONFIG_ACX_CS is not set
-CONFIG_ACX_RX3000=m
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_LED_TRIGGER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_GPIODEV_KEYS is not set
-# CONFIG_GPIODEV_KEYS2 is not set
-# CONFIG_GPIODEV_DIAGONAL is not set
-CONFIG_KEYBOARD_ASIC3=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_NAVPOINT is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-CONFIG_TOUCHSCREEN_S3C2410=y
-# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
-# CONFIG_TOUCHSCREEN_S3C2410_ALT is not set
-# CONFIG_TOUCHSCREEN_ADC is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_S3C2410=y
-CONFIG_SERIAL_S3C2410_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_RS232_SERIAL is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_TIHTC is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-CONFIG_I2C_S3C2410=m
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCA9535 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-CONFIG_W1=y
-
-#
-# 1-wire Bus Masters
-#
-# CONFIG_W1_MASTER_DS2482 is not set
-CONFIG_W1_MASTER_DS1WM=y
-
-#
-# 1-wire Slaves
-#
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_SLAVE_DS2760=y
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-CONFIG_BATTERY_DS2760=y
-# CONFIG_ADC_BATTERY is not set
-
-#
-# L3 serial bus support
-#
-# CONFIG_L3 is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_ADC=y
-# CONFIG_ADC_ADS7846_SSP is not set
-# CONFIG_ADC_TSC2200_SSP is not set
-# CONFIG_ADC_AD7877 is not set
-
-#
-# Compaq/iPAQ Drivers
-#
-
-#
-# Compaq/HP iPAQ Drivers
-#
-# CONFIG_IPAQ_SLEEVE is not set
-# CONFIG_SLEEVE_DEBUG is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC2 is not set
-CONFIG_HTC_ASIC3=y
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_BBKEYS is not set
-CONFIG_HTC_ASIC3_DS1WM=y
-# CONFIG_SOC_SAMCOP is not set
-# CONFIG_SOC_HAMCOP is not set
-# CONFIG_SOC_MQ11XX is not set
-# CONFIG_SOC_TC6387XB is not set
-# CONFIG_SOC_TSC2101 is not set
-# CONFIG_SOC_TSC2200 is not set
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_S3C24XX is not set
-CONFIG_LEDS_ASIC3=y
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HWTIMER is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LEDS_TRIGGER_SHARED=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_BACKLIGHT_S3C2410=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_IMAGEON is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_S3C2410=y
-# CONFIG_FB_S3C2410_DEBUG is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VSFB is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_S3C2410 is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# SoC Platforms
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-CONFIG_SND_S3C24XX_SOC=m
-CONFIG_SND_S3C24XX_SOC_I2S=m
-CONFIG_SND_S3C24XX_SOC_RX3000=m
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8976 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-CONFIG_SND_SOC_UDA1380=m
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_MQ11XX is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-CONFIG_USB_GADGET_S3C2410=y
-CONFIG_USB_S3C2410=y
-# CONFIG_USB_S3C2410_DEBUG is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-# CONFIG_USB_G_CHAR is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-# CONFIG_MMC_S3C2440 is not set
-# CONFIG_MMC_TMIO is not set
-# CONFIG_MMC_SAMCOP is not set
-CONFIG_MMC_ASIC3=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_S3C=y
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-CONFIG_NLS_CODEPAGE_1251=m
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-# CONFIG_DEBUG_S3C2410_PORT is not set
-CONFIG_DEBUG_S3C2410_UART=2
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh16.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh16.bb
deleted file mode 100644
index 275602762d..0000000000
--- a/packages/linux/linux-handhelds-2.6_2.6.21-hh16.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-SECTION = "kernel"
-DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
-LICENSE = "GPL"
-PR = "r2"
-
-DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
- file://defconfig"
-
-require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh17.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh17.bb
index ae3741e872..a9dd604d8f 100644
--- a/packages/linux/linux-handhelds-2.6_2.6.21-hh17.bb
+++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh17.bb
@@ -5,6 +5,10 @@ PR = "r3"
DEFAULT_PREFERENCE = "-1"
+# Override where to look for defconfigs and patches,
+# we have per-kernel-release sets.
+FILESPATH = "${FILE_DIRNAME}/linux-handhelds-2.6-2.6.21/${MACHINE}:${FILE_DIRNAME}/linux-handhelds-2.6-2.6.21"
+
SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
file://defconfig"
diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh18.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh18.bb
index b34d4630a0..cb6e7efc13 100644
--- a/packages/linux/linux-handhelds-2.6_2.6.21-hh18.bb
+++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh18.bb
@@ -5,6 +5,10 @@ PR = "r0"
DEFAULT_PREFERENCE = "-1"
+# Override where to look for defconfigs and patches,
+# we have per-kernel-release sets.
+FILESPATH = "${FILE_DIRNAME}/linux-handhelds-2.6-2.6.21/${MACHINE}:${FILE_DIRNAME}/linux-handhelds-2.6-2.6.21"
+
SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
file://defconfig"
diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh19.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh19.bb
deleted file mode 100644
index ec5844bfb5..0000000000
--- a/packages/linux/linux-handhelds-2.6_2.6.21-hh19.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-SECTION = "kernel"
-DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
-LICENSE = "GPL"
-PR = "r1"
-
-DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
- file://defconfig"
-
-require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb
new file mode 100644
index 0000000000..f15b71c325
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6_2.6.21-hh20.bb
@@ -0,0 +1,15 @@
+SECTION = "kernel"
+DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
+LICENSE = "GPL"
+PR = "r6"
+
+DEFAULT_PREFERENCE = "-1"
+
+# Override where to look for defconfigs and patches,
+# we have per-kernel-release sets.
+FILESPATH = "${FILE_DIRNAME}/linux-handhelds-2.6-2.6.21/${MACHINE}:${FILE_DIRNAME}/linux-handhelds-2.6-2.6.21"
+
+SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
+ file://defconfig"
+
+require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-handhelds-2.6_cvs.bb b/packages/linux/linux-handhelds-2.6_cvs.bb
index 4e008f5b6e..89cb68548f 100644
--- a/packages/linux/linux-handhelds-2.6_cvs.bb
+++ b/packages/linux/linux-handhelds-2.6_cvs.bb
@@ -6,10 +6,14 @@ PR = "r0"
DEFAULT_PREFERENCE = "-1"
+# Override where to look for defconfigs and patches,
+# we have per-kernel-release sets.
+FILESPATH = "${FILE_DIRNAME}/linux-handhelds-2.6-2.6.21/${MACHINE}:${FILE_DIRNAME}/linux-handhelds-2.6-2.6.21"
+
K_MAJOR = "2"
K_MINOR = "6"
K_MICRO = "21"
-HHV = "14"
+HHV = "20"
SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26 \
file://defconfig"
diff --git a/packages/linux/linux-ixp4xx.inc b/packages/linux/linux-ixp4xx.inc
index 02f80b06a1..9c4dd375a0 100644
--- a/packages/linux/linux-ixp4xx.inc
+++ b/packages/linux/linux-ixp4xx.inc
@@ -3,7 +3,7 @@
DESCRIPTION = "Linux 2.6.x kernel for IXP4xx devices"
COMPATIBLE_HOST = 'arm.*-linux.*'
-COMPATIBLE_MACHINE = '(ixp4xx|nslu2)'
+COMPATIBLE_MACHINE = '(ixp4xx|nslu2|syhl1)'
# To specify the console set KERNEL_CONSOLE in the .bb file.
diff --git a/packages/linux/linux-ixp4xx/defconfig-2.6.21.6 b/packages/linux/linux-ixp4xx/defconfig-2.6.21.7
index b7da2803fb..b7da2803fb 100644
--- a/packages/linux/linux-ixp4xx/defconfig-2.6.21.6
+++ b/packages/linux/linux-ixp4xx/defconfig-2.6.21.7
diff --git a/packages/linux/linux-ixp4xx/defconfig-2.6.23.8 b/packages/linux/linux-ixp4xx/defconfig-2.6.23.14
index efbd55195d..efbd55195d 100644
--- a/packages/linux/linux-ixp4xx/defconfig-2.6.23.8
+++ b/packages/linux/linux-ixp4xx/defconfig-2.6.23.14
diff --git a/packages/linux/linux-ixp4xx/defconfig-2.6.24 b/packages/linux/linux-ixp4xx/defconfig-2.6.24
new file mode 100644
index 0000000000..6aeb53b5ac
--- /dev/null
+++ b/packages/linux/linux-ixp4xx/defconfig-2.6.24
@@ -0,0 +1,1940 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.23.8
+# Wed Nov 21 22:15:10 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=m
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+CONFIG_ARCH_IXP4XX=y
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
+
+#
+# Intel IXP4xx Implementation Options
+#
+
+#
+# IXP4xx Platforms
+#
+CONFIG_MACH_NSLU2=y
+CONFIG_MACH_AVILA=y
+CONFIG_MACH_LOFT=y
+# CONFIG_ARCH_ADI_COYOTE is not set
+# CONFIG_MACH_GATEWAY7001 is not set
+# CONFIG_MACH_WG302V2 is not set
+CONFIG_ARCH_IXDP425=y
+CONFIG_MACH_IXDPG425=y
+# CONFIG_MACH_IXDP465 is not set
+# CONFIG_MACH_KIXRP435 is not set
+CONFIG_ARCH_IXCDP1100=y
+# CONFIG_ARCH_PRPMC1100 is not set
+CONFIG_MACH_NAS100D=y
+CONFIG_MACH_DSMG600=y
+CONFIG_ARCH_IXDP4XX=y
+CONFIG_MACH_FSG=y
+# CONFIG_MACH_GTWX5715 is not set
+
+#
+# IXP4xx Options
+#
+CONFIG_DMABOUNCE=y
+# CONFIG_IXP4XX_INDIRECT_PCI is not set
+CONFIG_IXP4XX_QMGR=y
+CONFIG_IXP4XX_NPE=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_CPU_BIG_ENDIAN=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+CONFIG_PCI=y
+CONFIG_PCI_SYSCALL=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+# CONFIG_NF_CT_PROTO_UDPLITE is not set
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+CONFIG_TIPC=m
+# CONFIG_TIPC_ADVANCED is not set
+# CONFIG_TIPC_DEBUG is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=m
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+CONFIG_IPDDP_DECAP=y
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_CMTP=m
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_RFKILL=m
+# CONFIG_RFKILL_INPUT is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+CONFIG_NFTL=y
+CONFIG_NFTL_RW=y
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+# CONFIG_MTD_CFI_NOSWAP is not set
+CONFIG_MTD_CFI_BE_BYTE_SWAP=y
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+CONFIG_MTD_IXP4XX=y
+# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=10240
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=m
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+# CONFIG_SCSI_SAS_LIBSAS is not set
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+CONFIG_ATA=m
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+CONFIG_SATA_VIA=m
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+CONFIG_PATA_ARTOP=m
+# CONFIG_PATA_ATIIXP 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_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC 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_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_PATA_PLATFORM is not set
+CONFIG_PATA_IXP4XX_CF=m
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+# CONFIG_DM_SNAPSHOT is not set
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+# CONFIG_DM_DELAY is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_IXP4XX_ETH=y
+# CONFIG_AX88796 is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_SC92031 is not set
+CONFIG_NETDEV_1000=y
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+CONFIG_VIA_VELOCITY=m
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+# CONFIG_LIBERTAS_DEBUG is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+# CONFIG_PRISM54 is not set
+CONFIG_USB_ZD1201=m
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+CONFIG_ISDN=m
+# CONFIG_ISDN_I4L is not set
+CONFIG_ISDN_CAPI=m
+CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+CONFIG_CAPI_TRACE=y
+# CONFIG_ISDN_CAPI_MIDDLEWARE is not set
+CONFIG_ISDN_CAPI_CAPI20=m
+
+#
+# CAPI hardware drivers
+#
+# CONFIG_CAPI_AVM is not set
+# CONFIG_CAPI_EICON is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_IXP4XX_BEEPER=y
+CONFIG_INPUT_ATI_REMOTE=m
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+# CONFIG_INPUT_POWERMATE is not set
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+# CONFIG_ROCKETPORT is not set
+# CONFIG_CYCLADES is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_MOXA_SMARTIO_NEW is not set
+# CONFIG_ISI is not set
+# CONFIG_SYNCLINKMP is not set
+# CONFIG_SYNCLINK_GT is not set
+CONFIG_N_HDLC=m
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=m
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_IXP4XX_WATCHDOG=m
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_IXP4XX=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# 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_GPIO=y
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_IOP3XX is not set
+# CONFIG_I2C_IXP4XX is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+CONFIG_I2C_TINY_USB=m
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+CONFIG_SENSORS_EEPROM=y
+CONFIG_SENSORS_PCF8574=m
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+CONFIG_W1=m
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_MATROX is not set
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+# CONFIG_W1_MASTER_DS1WM is not set
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+CONFIG_W1_SLAVE_DS2433_CRC=y
+# CONFIG_W1_SLAVE_DS2760 is not set
+CONFIG_HWMON=m
+CONFIG_HWMON_VID=m
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ABITUGURU3 is not set
+CONFIG_SENSORS_AD7418=m
+# 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_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 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_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 is not set
+CONFIG_SENSORS_W83781D=m
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_IXP4XX is not set
+CONFIG_LEDS_GPIO=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_V4L1 is not set
+# CONFIG_VIDEO_V4L1_COMPAT is not set
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+# CONFIG_TUNER_TEA5761 is not set
+CONFIG_VIDEO_SAA7134=m
+# CONFIG_VIDEO_SAA7134_ALSA is not set
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+# CONFIG_VIDEO_CX88_BLACKBIRD is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_ZC0301 is not set
+CONFIG_USB_ZR364XX=m
+# CONFIG_RADIO_ADAPTERS is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_BUF=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ 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_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR 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_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=m
+# CONFIG_USB_U132_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_DPCM is not set
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+CONFIG_USB_ADUTUX=m
+# CONFIG_USB_AUERSWALD is not set
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_BERRY_CHARGE=m
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+# CONFIG_USB_APPLEDISPLAY is not set
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_DS1672=y
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+CONFIG_RTC_DRV_ISL1208=y
+CONFIG_RTC_DRV_X1205=y
+CONFIG_RTC_DRV_PCF8563=y
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_BIND34=y
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+# CONFIG_CRYPTO_TEST is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=y
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.21.6 b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.21.7
index 457d379f5e..457d379f5e 100644
--- a/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.21.6
+++ b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.21.7
diff --git a/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.23.14 b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.23.14
new file mode 100644
index 0000000000..cdd7ecdf0e
--- /dev/null
+++ b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.23.14
@@ -0,0 +1,1940 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.23.8
+# Wed Nov 21 22:15:10 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=m
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+CONFIG_ARCH_IXP4XX=y
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
+
+#
+# Intel IXP4xx Implementation Options
+#
+
+#
+# IXP4xx Platforms
+#
+CONFIG_MACH_NSLU2=y
+CONFIG_MACH_AVILA=y
+CONFIG_MACH_LOFT=y
+# CONFIG_ARCH_ADI_COYOTE is not set
+# CONFIG_MACH_GATEWAY7001 is not set
+# CONFIG_MACH_WG302V2 is not set
+CONFIG_ARCH_IXDP425=y
+CONFIG_MACH_IXDPG425=y
+# CONFIG_MACH_IXDP465 is not set
+# CONFIG_MACH_KIXRP435 is not set
+CONFIG_ARCH_IXCDP1100=y
+# CONFIG_ARCH_PRPMC1100 is not set
+CONFIG_MACH_NAS100D=y
+CONFIG_MACH_DSMG600=y
+CONFIG_ARCH_IXDP4XX=y
+CONFIG_MACH_FSG=y
+# CONFIG_MACH_GTWX5715 is not set
+
+#
+# IXP4xx Options
+#
+CONFIG_DMABOUNCE=y
+# CONFIG_IXP4XX_INDIRECT_PCI is not set
+CONFIG_IXP4XX_QMGR=y
+CONFIG_IXP4XX_NPE=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_CPU_BIG_ENDIAN=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+CONFIG_PCI=y
+CONFIG_PCI_SYSCALL=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+# CONFIG_NF_CT_PROTO_UDPLITE is not set
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+CONFIG_TIPC=m
+# CONFIG_TIPC_ADVANCED is not set
+# CONFIG_TIPC_DEBUG is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=m
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+CONFIG_IPDDP_DECAP=y
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_CMTP=m
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_RFKILL=m
+# CONFIG_RFKILL_INPUT is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+CONFIG_NFTL=y
+CONFIG_NFTL_RW=y
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+# CONFIG_MTD_CFI_NOSWAP is not set
+CONFIG_MTD_CFI_BE_BYTE_SWAP=y
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+CONFIG_MTD_IXP4XX=y
+# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=10240
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=m
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+# CONFIG_SCSI_SAS_LIBSAS is not set
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+CONFIG_ATA=m
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+CONFIG_SATA_VIA=m
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+CONFIG_PATA_ARTOP=m
+# CONFIG_PATA_ATIIXP 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_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC 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_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_PATA_PLATFORM is not set
+CONFIG_PATA_IXP4XX_CF=m
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+# CONFIG_DM_SNAPSHOT is not set
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+# CONFIG_DM_DELAY is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_IXP4XX_ETH=y
+# CONFIG_AX88796 is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_SC92031 is not set
+CONFIG_NETDEV_1000=y
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+CONFIG_VIA_VELOCITY=m
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+# CONFIG_LIBERTAS_DEBUG is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+# CONFIG_PRISM54 is not set
+CONFIG_USB_ZD1201=m
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+CONFIG_ISDN=m
+# CONFIG_ISDN_I4L is not set
+CONFIG_ISDN_CAPI=m
+CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+CONFIG_CAPI_TRACE=y
+# CONFIG_ISDN_CAPI_MIDDLEWARE is not set
+CONFIG_ISDN_CAPI_CAPI20=m
+
+#
+# CAPI hardware drivers
+#
+# CONFIG_CAPI_AVM is not set
+# CONFIG_CAPI_EICON is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_IXP4XX_BEEPER=y
+CONFIG_INPUT_ATI_REMOTE=m
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+# CONFIG_INPUT_POWERMATE is not set
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+# CONFIG_ROCKETPORT is not set
+# CONFIG_CYCLADES is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_MOXA_SMARTIO_NEW is not set
+# CONFIG_ISI is not set
+# CONFIG_SYNCLINKMP is not set
+# CONFIG_SYNCLINK_GT is not set
+CONFIG_N_HDLC=m
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=m
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_IXP4XX_WATCHDOG=m
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_IXP4XX=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# 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_GPIO=y
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_IOP3XX is not set
+# CONFIG_I2C_IXP4XX is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+CONFIG_I2C_TINY_USB=m
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+CONFIG_SENSORS_EEPROM=y
+CONFIG_SENSORS_PCF8574=m
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+CONFIG_W1=m
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_MATROX is not set
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+# CONFIG_W1_MASTER_DS1WM is not set
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+CONFIG_W1_SLAVE_DS2433_CRC=y
+# CONFIG_W1_SLAVE_DS2760 is not set
+CONFIG_HWMON=m
+CONFIG_HWMON_VID=m
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ABITUGURU3 is not set
+CONFIG_SENSORS_AD7418=m
+# 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_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 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_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 is not set
+CONFIG_SENSORS_W83781D=m
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_IXP4XX=y
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_V4L1 is not set
+# CONFIG_VIDEO_V4L1_COMPAT is not set
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+# CONFIG_TUNER_TEA5761 is not set
+CONFIG_VIDEO_SAA7134=m
+# CONFIG_VIDEO_SAA7134_ALSA is not set
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+# CONFIG_VIDEO_CX88_BLACKBIRD is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_ZC0301 is not set
+CONFIG_USB_ZR364XX=m
+# CONFIG_RADIO_ADAPTERS is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_BUF=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ 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_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR 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_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=m
+# CONFIG_USB_U132_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_DPCM is not set
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+CONFIG_USB_ADUTUX=m
+# CONFIG_USB_AUERSWALD is not set
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_BERRY_CHARGE=m
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+# CONFIG_USB_APPLEDISPLAY is not set
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_DS1672=y
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+CONFIG_RTC_DRV_ISL1208=y
+CONFIG_RTC_DRV_X1205=y
+CONFIG_RTC_DRV_PCF8563=y
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_BIND34=y
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+# CONFIG_CRYPTO_TEST is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=y
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24 b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24
new file mode 100644
index 0000000000..37d1054c2a
--- /dev/null
+++ b/packages/linux/linux-ixp4xx/nslu2/defconfig-2.6.24
@@ -0,0 +1,1940 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.23.8
+# Wed Nov 21 22:15:10 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=m
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+CONFIG_ARCH_IXP4XX=y
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
+
+#
+# Intel IXP4xx Implementation Options
+#
+
+#
+# IXP4xx Platforms
+#
+CONFIG_MACH_NSLU2=y
+CONFIG_MACH_AVILA=y
+CONFIG_MACH_LOFT=y
+# CONFIG_ARCH_ADI_COYOTE is not set
+# CONFIG_MACH_GATEWAY7001 is not set
+# CONFIG_MACH_WG302V2 is not set
+CONFIG_ARCH_IXDP425=y
+CONFIG_MACH_IXDPG425=y
+# CONFIG_MACH_IXDP465 is not set
+# CONFIG_MACH_KIXRP435 is not set
+CONFIG_ARCH_IXCDP1100=y
+# CONFIG_ARCH_PRPMC1100 is not set
+CONFIG_MACH_NAS100D=y
+CONFIG_MACH_DSMG600=y
+CONFIG_ARCH_IXDP4XX=y
+CONFIG_MACH_FSG=y
+# CONFIG_MACH_GTWX5715 is not set
+
+#
+# IXP4xx Options
+#
+CONFIG_DMABOUNCE=y
+# CONFIG_IXP4XX_INDIRECT_PCI is not set
+CONFIG_IXP4XX_QMGR=y
+CONFIG_IXP4XX_NPE=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_CPU_BIG_ENDIAN=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+CONFIG_PCI=y
+CONFIG_PCI_SYSCALL=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" noirqdebug console=ttyS0,115200n8"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+# CONFIG_NF_CT_PROTO_UDPLITE is not set
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+CONFIG_TIPC=m
+# CONFIG_TIPC_ADVANCED is not set
+# CONFIG_TIPC_DEBUG is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+CONFIG_IPX=m
+# CONFIG_IPX_INTERN is not set
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=m
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
+CONFIG_IPDDP_DECAP=y
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_CMTP=m
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_RFKILL=m
+# CONFIG_RFKILL_INPUT is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+CONFIG_NFTL=y
+CONFIG_NFTL_RW=y
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+# CONFIG_MTD_CFI_NOSWAP is not set
+CONFIG_MTD_CFI_BE_BYTE_SWAP=y
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+CONFIG_MTD_IXP4XX=y
+# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=4
+CONFIG_BLK_DEV_RAM_SIZE=10240
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=m
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+# CONFIG_SCSI_SAS_LIBSAS is not set
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+CONFIG_ATA=m
+# CONFIG_ATA_NONSTANDARD is not set
+# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_SVW is not set
+# CONFIG_ATA_PIIX is not set
+# CONFIG_SATA_MV is not set
+# CONFIG_SATA_NV is not set
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_PROMISE is not set
+# CONFIG_SATA_SX4 is not set
+# CONFIG_SATA_SIL is not set
+# CONFIG_SATA_SIL24 is not set
+# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_ULI is not set
+CONFIG_SATA_VIA=m
+# CONFIG_SATA_VITESSE is not set
+# CONFIG_SATA_INIC162X is not set
+# CONFIG_PATA_ALI is not set
+# CONFIG_PATA_AMD is not set
+CONFIG_PATA_ARTOP=m
+# CONFIG_PATA_ATIIXP 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_CYPRESS is not set
+# CONFIG_PATA_EFAR is not set
+# CONFIG_ATA_GENERIC 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_IT821X is not set
+# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_JMICRON is not set
+# CONFIG_PATA_TRIFLEX is not set
+# CONFIG_PATA_MARVELL is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_OLDPIIX is not set
+# CONFIG_PATA_NETCELL is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OPTIDMA is not set
+# CONFIG_PATA_PDC_OLD is not set
+# CONFIG_PATA_RADISYS is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SERVERWORKS is not set
+# CONFIG_PATA_PDC2027X is not set
+# CONFIG_PATA_SIL680 is not set
+# CONFIG_PATA_SIS is not set
+# CONFIG_PATA_VIA is not set
+# CONFIG_PATA_WINBOND is not set
+# CONFIG_PATA_PLATFORM is not set
+CONFIG_PATA_IXP4XX_CF=m
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_RAID5_RESHAPE=y
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+# CONFIG_DM_SNAPSHOT is not set
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+# CONFIG_DM_DELAY is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_IXP4XX_ETH=y
+# CONFIG_AX88796 is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_SC92031 is not set
+CONFIG_NETDEV_1000=y
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+CONFIG_VIA_VELOCITY=m
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+# CONFIG_LIBERTAS_DEBUG is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+# CONFIG_PRISM54 is not set
+CONFIG_USB_ZD1201=m
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+CONFIG_ISDN=m
+# CONFIG_ISDN_I4L is not set
+CONFIG_ISDN_CAPI=m
+CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+CONFIG_CAPI_TRACE=y
+# CONFIG_ISDN_CAPI_MIDDLEWARE is not set
+CONFIG_ISDN_CAPI_CAPI20=m
+
+#
+# CAPI hardware drivers
+#
+# CONFIG_CAPI_AVM is not set
+# CONFIG_CAPI_EICON is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_IXP4XX_BEEPER=y
+CONFIG_INPUT_ATI_REMOTE=m
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+# CONFIG_INPUT_POWERMATE is not set
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+# CONFIG_ROCKETPORT is not set
+# CONFIG_CYCLADES is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_MOXA_SMARTIO_NEW is not set
+# CONFIG_ISI is not set
+# CONFIG_SYNCLINKMP is not set
+# CONFIG_SYNCLINK_GT is not set
+CONFIG_N_HDLC=m
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCI=m
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_IXP4XX_WATCHDOG=m
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_IXP4XX=y
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# 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_GPIO=y
+# CONFIG_I2C_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+# CONFIG_I2C_IOP3XX is not set
+# CONFIG_I2C_IXP4XX is not set
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+CONFIG_I2C_TINY_USB=m
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+CONFIG_SENSORS_EEPROM=y
+CONFIG_SENSORS_PCF8574=m
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+CONFIG_W1=m
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_MATROX is not set
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+# CONFIG_W1_MASTER_DS1WM is not set
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+CONFIG_W1_SLAVE_DS2433_CRC=y
+# CONFIG_W1_SLAVE_DS2760 is not set
+CONFIG_HWMON=m
+CONFIG_HWMON_VID=m
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ABITUGURU3 is not set
+CONFIG_SENSORS_AD7418=m
+# 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_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 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_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 is not set
+CONFIG_SENSORS_W83781D=m
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_IXP4XX is not set
+CONFIG_LEDS_GPIO=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_CPU_ACTIVITY=y
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_V4L1 is not set
+# CONFIG_VIDEO_V4L1_COMPAT is not set
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_SAA5246A=m
+CONFIG_VIDEO_SAA5249=m
+# CONFIG_TUNER_TEA5761 is not set
+CONFIG_VIDEO_SAA7134=m
+# CONFIG_VIDEO_SAA7134_ALSA is not set
+CONFIG_VIDEO_HEXIUM_ORION=m
+CONFIG_VIDEO_HEXIUM_GEMINI=m
+CONFIG_VIDEO_CX88=m
+CONFIG_VIDEO_CX88_ALSA=m
+# CONFIG_VIDEO_CX88_BLACKBIRD is not set
+# CONFIG_VIDEO_CAFE_CCIC is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_USBVISION is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_ZC0301 is not set
+CONFIG_USB_ZR364XX=m
+# CONFIG_RADIO_ADAPTERS is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_SAA7146=m
+CONFIG_VIDEO_SAA7146_VV=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_BUF=m
+CONFIG_VIDEO_BTCX=m
+CONFIG_VIDEO_IR_I2C=m
+CONFIG_VIDEO_IR=m
+CONFIG_VIDEO_TVEEPROM=m
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ 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_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR 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_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=m
+CONFIG_USB_EHCI_SPLIT_ISO=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=m
+# CONFIG_USB_U132_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_DPCM is not set
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+CONFIG_USB_ADUTUX=m
+# CONFIG_USB_AUERSWALD is not set
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_BERRY_CHARGE=m
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+# CONFIG_USB_APPLEDISPLAY is not set
+CONFIG_USB_SISUSBVGA=m
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=y
+CONFIG_RTC_DRV_DS1672=y
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+CONFIG_RTC_DRV_ISL1208=y
+CONFIG_RTC_DRV_X1205=y
+CONFIG_RTC_DRV_PCF8563=y
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_BIND34=y
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+# CONFIG_CRYPTO_TEST is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=y
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-ixp4xx_2.6.21.6.bb b/packages/linux/linux-ixp4xx_2.6.21.6.bb
deleted file mode 100644
index 288b9a7014..0000000000
--- a/packages/linux/linux-ixp4xx_2.6.21.6.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-require linux.inc
-require linux-ixp4xx.inc
-
-VANILLA_VERSION = "2.6.21"
-KERNEL_RELEASE = "2.6.21.6"
-
-PV = "${KERNEL_RELEASE}+svnr${SRCREV}"
-PR = "r3"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${KERNEL_RELEASE}.bz2;patch=1 \
- svn://svn.nslu2-linux.org/svnroot/kernel/trunk/patches;module=${VANILLA_VERSION};proto=http \
- file://defconfig-${KERNEL_RELEASE}"
-
-S = "${WORKDIR}/linux-${VANILLA_VERSION}"
-
-do_prepatch() {
- mv ${WORKDIR}/${VANILLA_VERSION} ${S}/patches && cd ${S} && quilt push -av
- mv patches patches.ixp4xx
- mv .pc .pc.old
- mv ${WORKDIR}/defconfig-${KERNEL_RELEASE} ${WORKDIR}/defconfig
-}
-
-addtask prepatch after do_unpack before do_patch
diff --git a/packages/linux/linux-ixp4xx_2.6.21.7.bb b/packages/linux/linux-ixp4xx_2.6.21.7.bb
new file mode 100644
index 0000000000..4d26621241
--- /dev/null
+++ b/packages/linux/linux-ixp4xx_2.6.21.7.bb
@@ -0,0 +1,24 @@
+require linux.inc
+require linux-ixp4xx.inc
+
+VANILLA_VERSION = "2.6.21"
+KERNEL_RELEASE = "2.6.21.7"
+
+PV = "${KERNEL_RELEASE}+svnr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${KERNEL_RELEASE}.bz2;patch=1 \
+ svn://svn.nslu2-linux.org/svnroot/kernel/trunk/patches;module=${VANILLA_VERSION};proto=http \
+ file://defconfig-${KERNEL_RELEASE}"
+
+S = "${WORKDIR}/linux-${VANILLA_VERSION}"
+
+do_prepatch() {
+ mv ${WORKDIR}/${VANILLA_VERSION} ${S}/patches && cd ${S} && quilt push -av
+ mv patches patches.ixp4xx
+ mv .pc .pc.old
+ mv ${WORKDIR}/defconfig-${KERNEL_RELEASE} ${WORKDIR}/defconfig
+}
+
+addtask prepatch after do_unpack before do_patch
diff --git a/packages/linux/linux-ixp4xx_2.6.23.14.bb b/packages/linux/linux-ixp4xx_2.6.23.14.bb
new file mode 100644
index 0000000000..b7c7682370
--- /dev/null
+++ b/packages/linux/linux-ixp4xx_2.6.23.14.bb
@@ -0,0 +1,41 @@
+require linux.inc
+require linux-ixp4xx.inc
+
+VANILLA_VERSION = "2.6.23"
+KERNEL_RELEASE = "2.6.23.14"
+
+# If you use a rc, you will need to use this:
+#PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}+svnr${SRCREV}"
+
+PV = "${KERNEL_RELEASE}+svnr${SRCREV}"
+PR = "r0"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${KERNEL_RELEASE}.bz2;patch=1 \
+ svn://svn.nslu2-linux.org/svnroot/kernel/trunk/patches;module=${VANILLA_VERSION};proto=http \
+ file://defconfig-${KERNEL_RELEASE}"
+
+S = "${WORKDIR}/linux-${VANILLA_VERSION}"
+
+# Apply the patches from the nslu2-linux project (after the patches in SRC_URI)
+do_postpatch() {
+ # Move away OE patches which have been already applied.
+ mv ${S}/patches ${S}/patches.oe
+ mv .pc .pc.oe
+
+ # Move the NSLU2 patches in place for quilt and apply them.
+ mv ${WORKDIR}/${VANILLA_VERSION} ${S}/patches && cd ${S} && quilt push -av
+
+ # Store the NSLU2 patches
+ mv ${S}/patches ${S}/patches.ixp4xx
+ mv .pc .pc.ixp4xx
+
+ # And move back the OE patches
+ mv ${S}/patches.oe ${S}/patches
+ mv .pc.oe .pc
+
+ # Copy the defconfig into ${WORKDIR}
+ mv ${WORKDIR}/defconfig-${KERNEL_RELEASE} ${WORKDIR}/defconfig
+}
+
+addtask postpatch after do_patch before do_configure
diff --git a/packages/linux/linux-ixp4xx_2.6.23.8.bb b/packages/linux/linux-ixp4xx_2.6.23.8.bb
deleted file mode 100644
index ab621f310a..0000000000
--- a/packages/linux/linux-ixp4xx_2.6.23.8.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-# The new ethernet driver included in the 2.6.23 version of the nslu2-linux.org kernel patches
-# has problems with providing the correct MAC address on the initial DHCP request.
-DEFAULT_PREFERENCE = "-1"
-
-require linux.inc
-require linux-ixp4xx.inc
-
-VANILLA_VERSION = "2.6.23"
-KERNEL_RELEASE = "2.6.23.8"
-
-# If you use a rc, you will need to use this:
-#PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}+svnr${SRCREV}"
-
-PV = "${KERNEL_RELEASE}+svnr${SRCREV}"
-PR = "r1"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${KERNEL_RELEASE}.bz2;patch=1 \
- svn://svn.nslu2-linux.org/svnroot/kernel/trunk/patches;module=${VANILLA_VERSION};proto=http \
- file://defconfig-${KERNEL_RELEASE}"
-
-S = "${WORKDIR}/linux-${VANILLA_VERSION}"
-
-do_prepatch() {
- mv ${WORKDIR}/${VANILLA_VERSION} ${S}/patches && cd ${S} && quilt push -av
- mv patches patches.ixp4xx
- mv .pc .pc.old
- mv ${WORKDIR}/defconfig-${KERNEL_RELEASE} ${WORKDIR}/defconfig
-}
-
-addtask prepatch after do_unpack before do_patch
diff --git a/packages/linux/linux-ixp4xx_2.6.24.bb b/packages/linux/linux-ixp4xx_2.6.24.bb
new file mode 100644
index 0000000000..9942433b56
--- /dev/null
+++ b/packages/linux/linux-ixp4xx_2.6.24.bb
@@ -0,0 +1,45 @@
+# Keep this until the dsmg600 via-velocity BE patch is forward-ported
+DEFAULT_PREFERENCE = "-1"
+
+require linux.inc
+require linux-ixp4xx.inc
+
+VANILLA_VERSION = "2.6.24"
+KERNEL_RELEASE = "2.6.24"
+
+# If you use a rc, you will need to use this:
+#PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}+svnr${SRCREV}"
+
+PV = "${KERNEL_RELEASE}+svnr${SRCREV}"
+PR = "r0"
+
+# ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${KERNEL_RELEASE}.bz2;patch=1 \
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \
+ svn://svn.nslu2-linux.org/svnroot/kernel/trunk/patches;module=${VANILLA_VERSION};proto=http \
+ file://defconfig-${KERNEL_RELEASE}"
+
+S = "${WORKDIR}/linux-${VANILLA_VERSION}"
+
+# Apply the patches from the nslu2-linux project (after the patches in SRC_URI)
+do_postpatch() {
+ # Move away OE patches which have been already applied.
+ [ -e patches ] && mv ${S}/patches ${S}/patches.oe
+ [ -e .pc ] && mv .pc .pc.oe
+
+ # Move the NSLU2 patches in place for quilt and apply them.
+ mv ${WORKDIR}/${VANILLA_VERSION} ${S}/patches && cd ${S} && quilt push -av
+
+ # Store the NSLU2 patches
+ mv ${S}/patches ${S}/patches.ixp4xx
+ mv .pc .pc.ixp4xx
+
+ # And move back the OE patches
+ [ -e patches.oe ] && mv ${S}/patches.oe ${S}/patches
+ [ -e .pc.oe ] && mv .pc.oe .pc
+
+ # Copy the defconfig into ${WORKDIR}
+ mv ${WORKDIR}/defconfig-${KERNEL_RELEASE} ${WORKDIR}/defconfig
+}
+
+addtask postpatch after do_patch before do_configure
diff --git a/packages/linux/linux-linkstationarm_2.6.12.bb b/packages/linux/linux-linkstationarm_2.6.12.bb
index 77703ad999..704309162c 100644
--- a/packages/linux/linux-linkstationarm_2.6.12.bb
+++ b/packages/linux/linux-linkstationarm_2.6.12.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Linux Kernel for ARM based Buffalo Linkstations"
SECTION = "kernel"
LICENSE = "GPL"
+DEPENDS += "u-boot-utils-native"
PR = "r2"
COMPATIBLE_MACHINE = "lsarm"
diff --git a/packages/linux/linux-linkstationppc_2.6.21-rc5.bb b/packages/linux/linux-linkstationppc_2.6.21-rc5.bb
index 7a6efb0059..6bcc0d9a06 100644
--- a/packages/linux/linux-linkstationppc_2.6.21-rc5.bb
+++ b/packages/linux/linux-linkstationppc_2.6.21-rc5.bb
@@ -3,7 +3,7 @@ SECTION = "kernel"
LICENSE = "GPL"
PR = "r0"
-DEPENDS = "dtc-native"
+DEPENDS = "dtc-native u-boot-utils-native"
COMPATIBLE_MACHINE = "(lsppchd|lsppchg)"
SRC_URI = "http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 \
diff --git a/packages/linux/linux-magicbox_2.6.18.6.bb b/packages/linux/linux-magicbox_2.6.18.6.bb
index 9410294020..bd9a1c4060 100644
--- a/packages/linux/linux-magicbox_2.6.18.6.bb
+++ b/packages/linux/linux-magicbox_2.6.18.6.bb
@@ -44,11 +44,11 @@ do_stage_append () {
#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split
install -d ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/powerpc ${STAGING_KERNEL_DIR}/arch/
- cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
- cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-ppc ${STAGING_KERNEL_DIR}/include/
}
diff --git a/packages/linux/linux-magicbox_2.6.19.2.bb b/packages/linux/linux-magicbox_2.6.19.2.bb
index 82576776f3..2c79a94e10 100644
--- a/packages/linux/linux-magicbox_2.6.19.2.bb
+++ b/packages/linux/linux-magicbox_2.6.19.2.bb
@@ -77,11 +77,11 @@ do_stage_append () {
#need ppc platforms includes + friends in order for external kernel modules to compile as headers as still split
install -d ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/powerpc ${STAGING_KERNEL_DIR}/arch/
- cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
- cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-ppc ${STAGING_KERNEL_DIR}/include/
}
@@ -93,7 +93,7 @@ do_install_append () {
powerpc${TARGET_VENDOR}-${TARGET_OS}-objcopy -O binary -R .note -R .comment -S ${DEPLOY_DIR_IMAGE}/vmlinux \
${DEPLOY_DIR_IMAGE}/linux.bin
gzip -f -9 ${DEPLOY_DIR_IMAGE}/linux.bin
- cp -a ${DEPLOY_DIR_IMAGE}/linux.bin.gz ${DEPLOY_DIR_IMAGE}/linux-${PV}-${MACHINE}-${DATETIME}.bin.gz
+ cp -pPR ${DEPLOY_DIR_IMAGE}/linux.bin.gz ${DEPLOY_DIR_IMAGE}/linux-${PV}-${MACHINE}-${DATETIME}.bin.gz
mkimage -A ppc -O linux -T kernel -C gzip -a 00000000 -e 00000000 -n "magicbox"-${PV} \
-d ${DEPLOY_DIR_IMAGE}/linux.bin.gz ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${MACHINE}-${DATETIME}.bin
rm ${DEPLOY_DIR_IMAGE}/vmlinux
diff --git a/packages/linux/linux-ml403-mvista-2.6.x_git.bb b/packages/linux/linux-ml403-mvista-2.6.x_git.bb
index 76fa75f65d..77b0bbc326 100644
--- a/packages/linux/linux-ml403-mvista-2.6.x_git.bb
+++ b/packages/linux/linux-ml403-mvista-2.6.x_git.bb
@@ -33,12 +33,12 @@ do_stage_append () {
#need ppc platforms includes + friends in order for external kernel modules to compile as headers a$
install -d ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/powerpc ${STAGING_KERNEL_DIR}/arch/
install -d ${STAGING_KERNEL_DIR}/include/asm
- cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
- cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-ppc ${STAGING_KERNEL_DIR}/include/
}
diff --git a/packages/linux/linux-ml403-slab-2.6.x_git.bb b/packages/linux/linux-ml403-slab-2.6.x_git.bb
index 75233492eb..f0408f365c 100644
--- a/packages/linux/linux-ml403-slab-2.6.x_git.bb
+++ b/packages/linux/linux-ml403-slab-2.6.x_git.bb
@@ -56,12 +56,12 @@ do_stage_append () {
#need ppc platforms includes + friends in order for external kernel modules to compile as headers a$
install -d ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/powerpc ${STAGING_KERNEL_DIR}/arch/
install -d ${STAGING_KERNEL_DIR}/include/asm
- cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
- cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-ppc ${STAGING_KERNEL_DIR}/include/
}
diff --git a/packages/linux/linux-omap.inc b/packages/linux/linux-omap.inc
index 83f134b878..52b0d27a6d 100644
--- a/packages/linux/linux-omap.inc
+++ b/packages/linux/linux-omap.inc
@@ -3,7 +3,7 @@ DESCRIPTION = "Linux kernel for OMAP processors"
LICENSE = "GPL"
#DEPENDS = ${@['u-boot','u-boot-omap2430sdp'][bb.data.getVar('MACHINE',d,1) == 'omap2430sdp']}
-DEPENDS = uboot-utils
+DEPENDS = "u-boot-utils-native"
inherit kernel
diff --git a/packages/linux/linux-omap2-git/omap2430sdp/.mtn2git_empty b/packages/linux/linux-omap2-git/omap2430sdp/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-omap2-git/omap2430sdp/.mtn2git_empty
diff --git a/packages/linux/linux-omap2-git/defconfig b/packages/linux/linux-omap2-git/omap2430sdp/defconfig
index f3897e48a3..f3897e48a3 100644
--- a/packages/linux/linux-omap2-git/defconfig
+++ b/packages/linux/linux-omap2-git/omap2430sdp/defconfig
diff --git a/packages/linux/linux-omap2-git/defconfig.eabi b/packages/linux/linux-omap2-git/omap2430sdp/defconfig.eabi
index f3897e48a3..f3897e48a3 100644
--- a/packages/linux/linux-omap2-git/defconfig.eabi
+++ b/packages/linux/linux-omap2-git/omap2430sdp/defconfig.eabi
diff --git a/packages/linux/linux-openmoko-devel/defconfig-2.6.24-rc6 b/packages/linux/linux-openmoko-devel/defconfig-2.6.24-rc6
new file mode 100644
index 0000000000..9dac6e8e8e
--- /dev/null
+++ b/packages/linux/linux-openmoko-devel/defconfig-2.6.24-rc6
@@ -0,0 +1,1814 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc6
+# Sat Dec 29 04:40:52 2007
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+# CONFIG_GENERIC_CLOCKEVENTS is not set
+CONFIG_MMU=y
+CONFIG_NO_IOPORT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION="-moko11"
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=m
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=m
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_PLAT_S3C24XX=y
+CONFIG_CPU_S3C244X=y
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+CONFIG_MACH_SMDK=y
+CONFIG_MACH_NEO1973=y
+CONFIG_PLAT_S3C=y
+CONFIG_CPU_LLSERIAL_S3C2410=y
+CONFIG_CPU_LLSERIAL_S3C2440=y
+
+#
+# Boot options
+#
+# CONFIG_S3C_BOOT_WATCHDOG is not set
+# CONFIG_S3C_BOOT_ERROR_RESET is not set
+
+#
+# Power management
+#
+CONFIG_S3C2410_PM_DEBUG=y
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C_LOWLEVEL_UART_PORT=0
+
+#
+# S3C2400 Machines
+#
+CONFIG_CPU_S3C2410=y
+CONFIG_CPU_S3C2410_DMA=y
+CONFIG_S3C2410_PM=y
+CONFIG_S3C2410_GPIO=y
+CONFIG_S3C2410_CLOCK=y
+CONFIG_S3C2410_PWM=y
+
+#
+# S3C2410 Machines
+#
+# CONFIG_ARCH_SMDK2410 is not set
+# CONFIG_ARCH_H1940 is not set
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_AML_M5900 is not set
+# CONFIG_MACH_VR1000 is not set
+CONFIG_MACH_QT2410=y
+CONFIG_MACH_NEO1973_GTA01=y
+
+#
+# S3C2412 Machines
+#
+# CONFIG_MACH_SMDK2413 is not set
+# CONFIG_MACH_SMDK2412 is not set
+# CONFIG_MACH_VSTMS is not set
+CONFIG_CPU_S3C2440=y
+CONFIG_S3C2440_DMA=y
+
+#
+# S3C2440 Machines
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_MACH_RX3715 is not set
+CONFIG_ARCH_S3C2440=y
+# CONFIG_MACH_NEXCODER_2440 is not set
+CONFIG_SMDK2440_CPU2440=y
+CONFIG_MACH_HXD8=y
+CONFIG_MACH_NEO1973_GTA02=y
+# CONFIG_NEO1973_GTA02_2440 is not set
+CONFIG_CPU_S3C2442=y
+
+#
+# S3C2442 Machines
+#
+# CONFIG_SMDK2440_CPU2442 is not set
+
+#
+# S3C2443 Machines
+#
+# CONFIG_MACH_SMDK2443 is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4T=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_OUTER_CACHE is not set
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=200
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="unused -- bootloader passes ATAG list debug "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+CONFIG_PM_DEBUG=y
+# CONFIG_PM_VERBOSE is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_XFRM_MIGRATE=y
+CONFIG_NET_KEY=m
+CONFIG_NET_KEY_MIGRATE=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+# CONFIG_IP_ROUTE_VERBOSE is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_MD5SIG=y
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+# CONFIG_NF_CT_PROTO_UDPLITE is not set
+# CONFIG_NF_CONNTRACK_AMANDA is not set
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+# CONFIG_IP_NF_MATCH_RECENT is not set
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+# CONFIG_NF_NAT_AMANDA is not set
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+# CONFIG_IP6_NF_RAW is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=y
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=y
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+CONFIG_NET_SCHED=y
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RR=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+# CONFIG_NET_CLS_POLICE is not set
+# CONFIG_NET_CLS_IND is not set
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+# CONFIG_BT_HCIBTSDIO is not set
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_FIB_RULES=y
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_S3C2410=y
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+CONFIG_MTD_NAND_S3C2410_HWECC=y
+CONFIG_MTD_NAND_S3C2410_CLKSTOP=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_UB=m
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+CONFIG_NET_PCI=y
+# CONFIG_B44 is not set
+CONFIG_CS89x0=m
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_EVBUG=m
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+CONFIG_KEYBOARD_STOWAWAY=m
+CONFIG_KEYBOARD_GPIO=m
+CONFIG_KEYBOARD_NEO1973=y
+CONFIG_KEYBOARD_QT2410=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_NR_TTY_DEVICES=4
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+CONFIG_I2C_S3C2410=y
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+CONFIG_SENSORS_PCF50606=y
+CONFIG_SENSORS_PCF50633=y
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+CONFIG_SENSORS_TSL256X=m
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_S3C24XX=y
+CONFIG_SPI_S3C24XX_GPIO=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_AD7418 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_ADT7470 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 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_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_S3C2410_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_MFD_GLAMO=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+# CONFIG_FB_S3C2410_DEBUG is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_LTV350QV is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_GTA01=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+CONFIG_DISPLAY_JBT6K74=y
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+CONFIG_FONT_6x11=y
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_LOGO_OPENMOKO_CLUT224 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# SPI devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=y
+CONFIG_SND_S3C24XX_SOC=y
+CONFIG_SND_S3C24XX_SOC_I2S=y
+CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753=y
+# CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753 is not set
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_WM8753=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_ISD200 is not set
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+CONFIG_USB_SERIAL_SAFE_PADDED=y
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+CONFIG_USB_BERRY_CHARGE=m
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGET is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+# CONFIG_MMC_SPI is not set
+CONFIG_MMC_S3C=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_S3C24XX=y
+# CONFIG_LEDS_GPIO is not set
+# CONFIG_LEDS_NEO1973_VIBRATOR is not set
+# CONFIG_LEDS_NEO1973_GTA02 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_S3C=m
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_YAFFS_FS=y
+CONFIG_YAFFS_YAFFS1=y
+# CONFIG_YAFFS_9BYTE_TAGS is not set
+# CONFIG_YAFFS_DOES_ECC is not set
+CONFIG_YAFFS_YAFFS2=y
+CONFIG_YAFFS_AUTO_YAFFS2=y
+# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
+CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS=10
+# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
+# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
+CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_WEAK_PW_HASH=y
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+CONFIG_DEBUG_S3C_PORT=y
+CONFIG_DEBUG_S3C_UART=2
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-openmoko-devel_2.6.23+2.6.24-rc7.bb b/packages/linux/linux-openmoko-devel_2.6.23+2.6.24-rc7.bb
new file mode 100644
index 0000000000..4543979eb3
--- /dev/null
+++ b/packages/linux/linux-openmoko-devel_2.6.23+2.6.24-rc7.bb
@@ -0,0 +1,59 @@
+require linux.inc
+require linux-openmoko.inc
+
+DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ OpenMoko"
+VANILLA_VERSION = "2.6.23"
+KERNEL_RELEASE = "2.6.24-rc7"
+
+KERNEL_VERSION = "${KERNEL_RELEASE}"
+
+# If you use a rc, you will need to use this:
+PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}+svnr${SRCREV}"
+PR = "r0"
+
+KERNEL_IMAGETYPE = "uImage"
+UBOOT_ENTRYPOINT = "30008000"
+
+##############################################################
+# source and patches
+#
+SRCREV_FORMAT = "patches-rconfig"
+
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=v2.6.24-rc7 \
+ svn://svn.openmoko.org/branches/src/target/kernel/2.6.24.x;module=patches;proto=http;name=patches \
+ svn://svn.openmoko.org/branches/src/target/kernel/2.6.24.x;module=config;proto=http;name=config "
+
+S = "${WORKDIR}/git"
+
+##############################################################
+# kernel image resides on a seperate flash partition (for now)
+#
+FILES_kernel-image = ""
+ALLOW_EMPTY = "1"
+
+COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02'
+
+CMDLINE = "unused -- bootloader passes ATAG list"
+
+###############################################################
+# module configs specific to this kernel
+#
+
+# usb
+module_autoload_ohci-hcd = "ohci-hcd"
+module_autoload_hci_usb = "hci_usb"
+module_autoload_g_ether = "g_ether"
+# audio
+module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753"
+# sd/mmc
+module_autoload_s3cmci = "s3cmci"
+
+do_prepatch() {
+ mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
+ mv patches patches.openmoko
+ mv .pc .pc.old
+ mv ${WORKDIR}/config/defconfig-${KERNEL_VERSION} ${WORKDIR}/defconfig
+}
+
+addtask prepatch after do_unpack before do_patch
diff --git a/packages/linux/linux-openmoko-devel_git.bb b/packages/linux/linux-openmoko-devel_git.bb
new file mode 100644
index 0000000000..b727478c76
--- /dev/null
+++ b/packages/linux/linux-openmoko-devel_git.bb
@@ -0,0 +1,46 @@
+require linux.inc
+require linux-openmoko.inc
+
+DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ OpenMoko"
+DEFAULT_PREFERENCE = "-1"
+
+KERNEL_RELEASE = "2.6.24-rc8"
+KERNEL_VERSION = "${KERNEL_RELEASE}"
+
+# If you use a rc, you will need to use this:
+PV = "${KERNEL_RELEASE}+git${SRCREV}"
+PR = "r0"
+
+KERNEL_IMAGETYPE = "uImage"
+UBOOT_ENTRYPOINT = "30008000"
+
+SRC_URI = "git://git.openmoko.org/git/kernel.git;protocol=git;branch=andy"
+S = "${WORKDIR}/git"
+
+##############################################################
+# kernel image resides on a seperate flash partition (for now)
+#
+FILES_kernel-image = ""
+ALLOW_EMPTY = "1"
+
+COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02'
+
+CMDLINE = "unused -- bootloader passes ATAG list"
+
+###############################################################
+# module configs specific to this kernel
+#
+
+# usb
+module_autoload_ohci-hcd = "ohci-hcd"
+module_autoload_hci_usb = "hci_usb"
+module_autoload_g_ether = "g_ether"
+# audio
+module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753"
+# sd/mmc
+module_autoload_s3cmci = "s3cmci"
+
+do_configure_prepend() {
+ mv defconfig-2.6.24 ${WORKDIR}/defconfig
+}
diff --git a/packages/linux/linux-openmoko-devel_svn+2.6.23.1.bb b/packages/linux/linux-openmoko-devel_svn+2.6.23.1.bb
deleted file mode 100644
index 5cca31d74b..0000000000
--- a/packages/linux/linux-openmoko-devel_svn+2.6.23.1.bb
+++ /dev/null
@@ -1,68 +0,0 @@
-require linux.inc
-require linux-openmoko.inc
-
-DESCRIPTION = "Linux 2.6.x (development) kernel for FIC SmartPhones shipping w/ OpenMoko"
-VANILLA_VERSION = "2.6.23"
-#KERNEL_VERSION = "2.6.23-rc9"
-KERNEL_RELEASE = "2.6.23.1"
-
-# If you use a rc, you will need to use this:
-#PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}-moko11+svnr${SRCREV}"
-
-KERNEL_VERSION = "${KERNEL_RELEASE}"
-PV = "${KERNEL_RELEASE}+svnr${SRCREV}"
-PR = "r3"
-
-KERNEL_IMAGETYPE = "uImage"
-UBOOT_ENTRYPOINT = "30008000"
-
-##############################################################
-# source and patches
-#
-SRCREV_FORMAT = "patches"
-SRCREV = "3140"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${KERNEL_VERSION}.bz2;patch=1 \
- svn://svn.openmoko.org/branches/src/target/kernel/2.6.23.x;module=patches;proto=http;name=patches \
- file://squashfs-2.6.23.patch;patch=1 \
- file://fix-EVIOCGRAB-semantics-2.6.22.5.patch;patch=1 \
-# file://printascii-2.6.23.patch;patch=1 \
- file://hack-gta02-cpu.patch;patch=1 \
- file://fix-gta01-flowcontrol2-2.6.23.patch;patch=1 \
- file://defconfig-2.6.23.1 \
- file://logo_linux_clut224.ppm"
-S = "${WORKDIR}/linux-${VANILLA_VERSION}"
-
-##############################################################
-# kernel image resides on a seperate flash partition (for now)
-#
-FILES_kernel-image = ""
-ALLOW_EMPTY = "1"
-
-COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE = 'fic-gta01|fic-gta02'
-
-CMDLINE = "unused -- bootloader passes ATAG list"
-
-###############################################################
-# module configs specific to this kernel
-#
-
-# usb
-module_autoload_ohci-hcd = "ohci-hcd"
-module_autoload_hci_usb = "hci_usb"
-module_autoload_g_ether = "g_ether"
-# audio
-module_autoload_snd-soc-neo1973-wm8753 = "snd-soc-neo1973-wm8753"
-# sd/mmc
-module_autoload_s3cmci = "s3cmci"
-
-do_prepatch() {
- mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
- mv patches patches.openmoko
- mv .pc .pc.old
- mv ${WORKDIR}/defconfig-${KERNEL_VERSION} ${WORKDIR}/defconfig
-}
-
-addtask prepatch after do_unpack before do_patch
diff --git a/packages/linux/linux-openmoko.inc b/packages/linux/linux-openmoko.inc
index fc4a547fd7..4f1981c8b3 100644
--- a/packages/linux/linux-openmoko.inc
+++ b/packages/linux/linux-openmoko.inc
@@ -1,9 +1,33 @@
# extra stuff we need for openmoko that is not in linux.inc
-
do_deploy_append() {
- mv ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${PR}-${MACHINE}.tgz ${DEPLOY_DIR_IMAGE}/modules-${PV}-${PR}-${MACHINE_CLASS}.tgz
- mv ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}-${DATETIME}.bin ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE_CLASS}.bin
+ mv ${DEPLOY_DIR_IMAGE}/modules-${PV}-${PR}-${MACHINE}.tgz ${DEPLOY_DIR_IMAGE}/modules-${PV}-${PR}-${MACHINE_CLASS}.tgz
+ mv ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE}.bin ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE_CLASS}.bin
rm -f ${KERNEL_IMAGE_SYMLINK_NAME}.bin
ln -sf ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${PR}-${MACHINE_CLASS}.bin ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE_CLASS}-latest.bin
}
+RDEPENDS_kernel-image += "mtd-utils"
+
+pkg_postinst_kernel-image () {
+if test "x$D" != "x"; then
+ exit 1
+else
+ if [ -f ${sysconfdir}/default/flashkernel ] ; then
+ echo "Upgrading Kernel in Flash"
+ echo "DO NOT stop this process"
+
+ MTD_KERNEL_PARTITION=`cat /proc/mtd | grep kernel | cut -d':' -f1`
+ MTD_KERNEL_PARTITION=/dev/$MTD_KERNEL_PARTITION
+
+ if [ "x$MTD_KERNEL_PARTITION" = "x" ] ; then
+ exit 1
+ fi
+
+ ${bindir}/flash_eraseall $MTD_KERNEL_PARTITION
+ ${bindir}/nandwrite -p $MTD_KERNEL_PARTITION /${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-${KERNEL_VERSION}
+ else
+ touch ${sysconfdir}/default/flashkernel
+ fi
+fi
+}
+
diff --git a/packages/linux/linux-openmoko/gta02-sound.patch b/packages/linux/linux-openmoko/gta02-sound.patch
index 66fc850350..f742c77303 100644
--- a/packages/linux/linux-openmoko/gta02-sound.patch
+++ b/packages/linux/linux-openmoko/gta02-sound.patch
@@ -280,7 +280,7 @@ Index: linux-2.6.22/sound/soc/s3c24xx/neo1973_gta02_wm8753.c
+static int lm4853_get_spk(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
-+ ucontrol->value.integer.value[0] = (lm4853_state & LM4853_AMP) >> 1;
++ ucontrol->value.integer.value[0] = (lm4853_state & LM4853_SPK) >> 1;
+
+ return 0;
+}
diff --git a/packages/linux/linux-openmoko_2.6.22.5.bb b/packages/linux/linux-openmoko_2.6.22.5.bb
index c623504c73..fe46c59a58 100644
--- a/packages/linux/linux-openmoko_2.6.22.5.bb
+++ b/packages/linux/linux-openmoko_2.6.22.5.bb
@@ -9,7 +9,7 @@ KERNEL_RELEASE = "2.6.22.5"
#PV = "${VANILLA_VERSION}+${KERNEL_RELEASE}-moko11+svnr${SRCREV}"
PV = "${KERNEL_RELEASE}-moko11+svnr${SRCREV}"
-PR = "r10"
+PR = "r13"
KERNEL_IMAGETYPE = "uImage"
UBOOT_ENTRYPOINT = "30008000"
@@ -29,7 +29,6 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${VANILLA_VERSION}.ta
file://iis-suspend.patch;patch=1 \
file://s3c24xx-pcm-suspend.patch;patch=1 \
file://gta-vibro-pwm-suspend.patch;patch=1 \
- file://glamo-report-vram-size-to-userspace.patch;patch=1 \
file://defconfig-${KERNEL_RELEASE}"
S = "${WORKDIR}/linux-${VANILLA_VERSION}"
@@ -37,7 +36,6 @@ S = "${WORKDIR}/linux-${VANILLA_VERSION}"
##############################################################
# kernel image resides on a seperate flash partition (for now)
#
-FILES_kernel-image = ""
ALLOW_EMPTY = "1"
COMPATIBLE_HOST = "arm.*-linux"
diff --git a/packages/linux/linux-rp-2.6.16/00-hostap.patch b/packages/linux/linux-rp-2.6.16/00-hostap.patch
deleted file mode 100644
index 20432b404a..0000000000
--- a/packages/linux/linux-rp-2.6.16/00-hostap.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Platform: Sharp Zaurus C760 running 2.6.16 and pcmciautils 013.
-
-root@c7x0:~# pccardctl ident
-Socket 0:
- product info: "Pretec", "CompactWLAN Card 802.11b", "2.5"
- manfid: 0x0156, 0x0002
- function: 6 (network)
-
-==========================================================================
-From: Jochen Friedrich
-
-Yet another card known to work OK with hostap_cs:
-
-# pccardctl ident
-Socket 0:
- no product info available
-Socket 1:
- product info: "U.S. Robotics", "IEEE 802.11b PC-CARD", "Version 01.02", ""
- manfid: 0x0156, 0x0002
- function: 6 (network)
-
-==========================================================================
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
- drivers/net/wireless/hostap/hostap_cs.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-Index: linux/drivers/net/wireless/hostap/hostap_cs.c
-===================================================================
---- linux.orig/drivers/net/wireless/hostap/hostap_cs.c 2006-05-17 10:23:00.000000000 +0200
-+++ linux/drivers/net/wireless/hostap/hostap_cs.c 2006-05-17 10:25:45.000000000 +0200
-@@ -923,6 +923,12 @@
- PCMCIA_DEVICE_PROD_ID12(
- "ZoomAir 11Mbps High", "Rate wireless Networking",
- 0x273fe3db, 0x32a1eaee),
-+ PCMCIA_DEVICE_PROD_ID123(
-+ "Pretec", "CompactWLAN Card 802.11b", "2.5",
-+ 0x1cadd3e5, 0xe697636c, 0x7a5bfcf1),
-+ PCMCIA_DEVICE_PROD_ID123(
-+ "U.S. Robotics", "IEEE 802.11b PC-CARD", "Version 01.02",
-+ 0xc7b8df9d, 0x1700d087, 0x4b74baa0),
- PCMCIA_DEVICE_NULL
- };
- MODULE_DEVICE_TABLE(pcmcia, hostap_cs_ids);
diff --git a/packages/linux/linux-rp-2.6.16/10-pcnet.patch b/packages/linux/linux-rp-2.6.16/10-pcnet.patch
deleted file mode 100644
index 2e1966e837..0000000000
--- a/packages/linux/linux-rp-2.6.16/10-pcnet.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-
-From: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
-Add TRENDnet TE-CF100 ethernet adapter to pcnet_cs list.
-
-product info: "Fast Ethernet", "CF Size PC Card", "1.0", ""
- manfid: 0x0149, 0xc1ab
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
- drivers/net/pcmcia/pcnet_cs.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-Index: netdev-2.6/drivers/net/pcmcia/pcnet_cs.c
-===================================================================
---- netdev-2.6.orig/drivers/net/pcmcia/pcnet_cs.c 2006-05-18 11:06:43.294022480 +0200
-+++ netdev-2.6/drivers/net/pcmcia/pcnet_cs.c 2006-05-18 11:10:31.548322552 +0200
-@@ -1768,6 +1768,8 @@
- PCMCIA_DEVICE_CIS_PROD_ID12("NDC", "Ethernet", 0x01c43ae1, 0x00b2e941, "NE2K.cis"),
- PCMCIA_DEVICE_CIS_PROD_ID12("PMX ", "PE-200", 0x34f3f1c8, 0x10b59f8c, "PE-200.cis"),
- PCMCIA_DEVICE_CIS_PROD_ID12("TAMARACK", "Ethernet", 0xcf434fba, 0x00b2e941, "tamarack.cis"),
-+ PCMCIA_DEVICE_PROD_ID123("Fast Ethernet", "CF Size PC Card", "1.0",
-+ 0xb4be14e3, 0x43ac239b, 0x0877b627),
- PCMCIA_DEVICE_NULL
- };
- MODULE_DEVICE_TABLE(pcmcia, pcnet_ids);
-
diff --git a/packages/linux/linux-rp-2.6.16/add-oz-release-string.patch b/packages/linux/linux-rp-2.6.16/add-oz-release-string.patch
deleted file mode 100644
index 22a6fd3943..0000000000
--- a/packages/linux/linux-rp-2.6.16/add-oz-release-string.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- linux-2.6.11-rc1/init/version.c~add-oz-release-string
-+++ linux-2.6.11-rc1/init/version.c
-@@ -29,5 +29,5 @@
- EXPORT_SYMBOL(system_utsname);
-
- const char linux_banner[] =
-- "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
-+ "Linux version " UTS_RELEASE OPENZAURUS_RELEASE " (" LINUX_COMPILE_BY "@"
- LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
---- linux-2.6.11-rc1/Makefile~add-oz-release-string
-+++ linux-2.6.11-rc1/Makefile
-@@ -827,6 +827,7 @@
- exit 1; \
- fi; \
- (echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"; \
-+ echo \#define OPENZAURUS_RELEASE \"$(OPENZAURUS_RELEASE)\"; \
- echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)`; \
- echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \
- )
diff --git a/packages/linux/linux-rp-2.6.16/defconfig-akita b/packages/linux/linux-rp-2.6.16/defconfig-akita
deleted file mode 100644
index 249466ac87..0000000000
--- a/packages/linux/linux-rp-2.6.16/defconfig-akita
+++ /dev/null
@@ -1,1572 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16
-# Thu Mar 23 22:11:12 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_IWMMXT=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-CONFIG_SND_PXA2xx_SOC_SPITZ=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-CONFIG_SND_SOC_WM8750=m
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-
-#
-# Video4Linux support is needed for USB Multimedia device support
-#
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.16/defconfig-c7x0 b/packages/linux/linux-rp-2.6.16/defconfig-c7x0
deleted file mode 100644
index 1d702f60c0..0000000000
--- a/packages/linux/linux-rp-2.6.16/defconfig-c7x0
+++ /dev/null
@@ -1,1608 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16
-# Mon May 22 09:00:01 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-CONFIG_MACH_CORGI=y
-CONFIG_MACH_SHEPHERD=y
-CONFIG_MACH_HUSKY=y
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_PXA_SHARP_C7xx=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_KEYBOARD_CORGI=y
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_CORGI=y
-# CONFIG_LEDS_TOSA is not set
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-CONFIG_FB_W100=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-CONFIG_SND_PXA2xx_SOC_CORGI=m
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_PWC is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.16/defconfig-collie b/packages/linux/linux-rp-2.6.16/defconfig-collie
deleted file mode 100644
index 67bda811c4..0000000000
--- a/packages/linux/linux-rp-2.6.16/defconfig-collie
+++ /dev/null
@@ -1,1154 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17-rc1
-# Wed Apr 19 21:01:15 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_DOUBLEFAULT=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_COLLIE=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-
-#
-# Processor Features
-#
-CONFIG_KEXEC=y
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-CONFIG_PCMCIA_SA1100=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-CONFIG_NODES_SHIFT=2
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=32M fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-CONFIG_MTD_OBSOLETE_CHIPS=y
-CONFIG_MTD_SHARP=y
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=1024
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-CONFIG_ATA_OVER_ETH=m
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_ARLAN is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_TSDEV=y
-CONFIG_INPUT_TSDEV_SCREEN_X=240
-CONFIG_INPUT_TSDEV_SCREEN_Y=320
-CONFIG_INPUT_EVDEV=y
-CONFIG_INPUT_EVBUG=y
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=m
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-# CONFIG_MCP_SA11X0 is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=y
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_MAESTRO 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
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-CONFIG_FB_SA1100=y
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-CONFIG_EXT2_FS_XATTR=y
-CONFIG_EXT2_FS_POSIX_ACL=y
-CONFIG_EXT2_FS_SECURITY=y
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=y
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.16/defconfig-hx2000 b/packages/linux/linux-rp-2.6.16/defconfig-hx2000
deleted file mode 100644
index c1344660f3..0000000000
--- a/packages/linux/linux-rp-2.6.16/defconfig-hx2000
+++ /dev/null
@@ -1,1028 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15-rc1-git7
-# Sat Nov 19 23:13:51 2005
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_CLEAN_COMPILE is not set
-CONFIG_BROKEN=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_SWAP is not set
-# CONFIG_SYSVIPC is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_HOTPLUG=y
-CONFIG_KOBJECT_UEVENT=y
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-CONFIG_MACH_HX2750=y
-CONFIG_PXA27x=y
-CONFIG_PXA_KEYS=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-CONFIG_ISA_DMA_API=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-# CONFIG_AIRO is not set
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_TSC2101=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-CONFIG_MFD_TSC2101=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_HX2750=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_WBSD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_JBD is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-# CONFIG_TMPFS is not set
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_MAGIC_SYSRQ is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-
diff --git a/packages/linux/linux-rp-2.6.16/defconfig-poodle b/packages/linux/linux-rp-2.6.16/defconfig-poodle
deleted file mode 100644
index 8450fc9b68..0000000000
--- a/packages/linux/linux-rp-2.6.16/defconfig-poodle
+++ /dev/null
@@ -1,1556 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17-rc1
-# Wed Apr 19 21:04:42 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_DOUBLEFAULT=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-CONFIG_MACH_POODLE=y
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=32M fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_EM28XX is not set
-CONFIG_USB_DSBR=m
-CONFIG_VIDEO_USBVIDEO=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.16/defconfig-qemuarm b/packages/linux/linux-rp-2.6.16/defconfig-qemuarm
deleted file mode 100644
index 33f9693d9b..0000000000
--- a/packages/linux/linux-rp-2.6.16/defconfig-qemuarm
+++ /dev/null
@@ -1,941 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15
-# Thu Feb 23 16:29:38 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_CLEAN_COMPILE=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_HOTPLUG=y
-CONFIG_KOBJECT_UEVENT=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-CONFIG_ARCH_INTEGRATOR=y
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-
-#
-# Integrator Options
-#
-# CONFIG_ARCH_INTEGRATOR_AP is not set
-CONFIG_ARCH_INTEGRATOR_CP=y
-CONFIG_ARCH_CINTEGRATOR=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-# CONFIG_CPU_ARM720T is not set
-# CONFIG_CPU_ARM920T is not set
-# CONFIG_CPU_ARM922T is not set
-CONFIG_CPU_ARM926T=y
-# CONFIG_CPU_ARM1020 is not set
-# CONFIG_CPU_ARM1022 is not set
-CONFIG_CPU_ARM1026=y
-# CONFIG_CPU_V6 is not set
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-CONFIG_ICST525=y
-
-#
-# Bus support
-#
-CONFIG_ARM_AMBA=y
-CONFIG_ISA_DMA_API=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_LEDS=y
-CONFIG_LEDS_TIMER=y
-CONFIG_LEDS_CPU=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyAMA0 console=tty1 user_debug=31"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
-CONFIG_CPU_FREQ_INTEGRATOR=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_VFP=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_APM is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_AFS_PARTS=y
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_GEOMETRY is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-CONFIG_SMC91X=y
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-CONFIG_SERIO_AMBAKMI=y
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-# CONFIG_SERIAL_AMBA_PL010 is not set
-CONFIG_SERIAL_AMBA_PL011=y
-CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
-CONFIG_FB_ARMCLCD=y
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_JBD is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFSD_TCP is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=y
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-# 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_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_ISO8859_1 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_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.16/defconfig-spitz b/packages/linux/linux-rp-2.6.16/defconfig-spitz
deleted file mode 100644
index d2b4c470aa..0000000000
--- a/packages/linux/linux-rp-2.6.16/defconfig-spitz
+++ /dev/null
@@ -1,1572 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16
-# Thu Mar 23 22:11:12 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_IWMMXT=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-CONFIG_SND_PXA2xx_SOC_SPITZ=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-CONFIG_SND_SOC_WM8750=m
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-
-#
-# Video4Linux support is needed for USB Multimedia device support
-#
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.16/defconfig-tosa b/packages/linux/linux-rp-2.6.16/defconfig-tosa
deleted file mode 100644
index 543aa10bb3..0000000000
--- a/packages/linux/linux-rp-2.6.16/defconfig-tosa
+++ /dev/null
@@ -1,1608 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-rc5-git5
-# Tue Mar 14 09:05:26 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-CONFIG_MACH_TOSA=y
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-CONFIG_TOSHIBA_TC6393XB=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_TMIO=y
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-CONFIG_KEYBOARD_TOSA=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_CORGI is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_WM97XX=y
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-CONFIG_TOUCHSCREEN_WM9712=y
-# CONFIG_TOUCHSCREEN_WM9713 is not set
-# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TOSA=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_W100 is not set
-CONFIG_FB_TMIO=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_BUS=y
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=y
-CONFIG_SND_PXA2xx_SOC_AC97=y
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_TOSA=y
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-CONFIG_SND_SOC_WM9712=y
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_PWC is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_GENERIC_ALLOCATOR=y
diff --git a/packages/linux/linux-rp-2.6.16/hrw-pcmcia-ids-r5.patch b/packages/linux/linux-rp-2.6.16/hrw-pcmcia-ids-r5.patch
deleted file mode 100644
index b09acacadd..0000000000
--- a/packages/linux/linux-rp-2.6.16/hrw-pcmcia-ids-r5.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
-Few cards informations submitted by OpenZaurus users.
-
-Seagate 8GB microdrive:
- product info: "SEAGATE", "ST1"
- manfid 0x0111, 0x0000
-
-One CF card:
- product info: "SAMSUNG", "04/05/06", "", ""
- manfid : 0x0000, 0x0000
-
-Ridata 8GB Pro 150X Compact Flash Card:
- product info: "SMI VENDOR", "SMI PRODUCT", ""
- manfid: 0x000a, 0x0000
-
- product info: "M-Systems", "CF500", ""
- manfid: 0x000a, 0x0000
-
- product info: "TRANSCEND", "TS4GCF120", ""
- manfid: 0x000a, 0x0000
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
- drivers/ide/legacy/ide-cs.c | 5 +++++
- drivers/net/pcmcia/pcnet_cs.c | 2 ++
- 2 files changed, 7 insertions(+)
-
-Index: linux-2.6.18/drivers/ide/legacy/ide-cs.c
-===================================================================
---- linux-2.6.18.orig/drivers/ide/legacy/ide-cs.c 2006-12-06 00:55:51.000000000 +0000
-+++ linux-2.6.18/drivers/ide/legacy/ide-cs.c 2006-12-06 00:55:55.000000000 +0000
-@@ -398,12 +398,17 @@ static struct pcmcia_device_id ide_ids[]
- PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDE", 0x547e66dc, 0x5c5ab149),
- PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDEII", 0x547e66dc, 0xb3662674),
- PCMCIA_DEVICE_PROD_ID12("LOOKMEET", "CBIDE2 ", 0xe37be2b5, 0x8671043b),
-+ PCMCIA_DEVICE_PROD_ID12("M-Systems", "CF500", 0x7ed2ad87, 0x7a13045c),
- PCMCIA_DEVICE_PROD_ID2("NinjaATA-", 0xebe0bd79),
- PCMCIA_DEVICE_PROD_ID12("PCMCIA", "CD-ROM", 0x281f1c5d, 0x66536591),
- PCMCIA_DEVICE_PROD_ID12("PCMCIA", "PnPIDE", 0x281f1c5d, 0x0c694728),
- PCMCIA_DEVICE_PROD_ID12("SHUTTLE TECHNOLOGY LTD.", "PCCARD-IDE/ATAPI Adapter", 0x4a3f0ba0, 0x322560e1),
-+ PCMCIA_DEVICE_PROD_ID12("SEAGATE", "ST1", 0x87c1b330, 0xe1f30883),
-+ PCMCIA_DEVICE_PROD_ID12("SAMSUNG", "04/05/06", 0x43d74cb4, 0x6a22777d),
-+ PCMCIA_DEVICE_PROD_ID12("SMI VENDOR", "SMI PRODUCT", 0x30896c92, 0x703cc5f6),
- PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "MK2001MPL", 0xb4585a1a, 0x3489e003),
- PCMCIA_DEVICE_PROD_ID1("TRANSCEND 512M ", 0xd0909443),
-+ PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF120", 0x709b1bf1, 0xf54a91c8),
- PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852),
- PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
- PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
-Index: linux-2.6.18/drivers/net/pcmcia/pcnet_cs.c
-===================================================================
---- linux-2.6.18.orig/drivers/net/pcmcia/pcnet_cs.c 2006-09-20 04:42:06.000000000 +0100
-+++ linux-2.6.18/drivers/net/pcmcia/pcnet_cs.c 2006-12-06 00:57:27.000000000 +0000
-@@ -1770,6 +1770,8 @@ static struct pcmcia_device_id pcnet_ids
- PCMCIA_DEVICE_CIS_PROD_ID12("TAMARACK", "Ethernet", 0xcf434fba, 0x00b2e941, "tamarack.cis"),
- PCMCIA_DEVICE_PROD_ID123("Fast Ethernet", "CF Size PC Card", "1.0",
- 0xb4be14e3, 0x43ac239b, 0x0877b627),
-+ PCMCIA_DEVICE_PROD_ID123("Ethernet", "CF Size PC Card", "1.0",
-+ 0x00b2e941, 0x43ac239b, 0x0877b627),
- PCMCIA_DEVICE_NULL
- };
- MODULE_DEVICE_TABLE(pcmcia, pcnet_ids);
diff --git a/packages/linux/linux-rp-2.6.16/locomo-kbd-hotkeys.patch b/packages/linux/linux-rp-2.6.16/locomo-kbd-hotkeys.patch
deleted file mode 100644
index 8b296780d4..0000000000
--- a/packages/linux/linux-rp-2.6.16/locomo-kbd-hotkeys.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- linux-2.6.16/drivers/input/keyboard/locomokbd.c 2006-05-11 18:15:17.392063008 +0200
-+++ linux-2.6.16/drivers/input/keyboard/locomokbd.c.ok 2006-05-11 18:14:55.870334808 +0200
-@@ -44,24 +44,29 @@
-
- #define LOCOMOKBD_NUMKEYS 128
-
--#define KEY_ACTIVITY KEY_F16
--#define KEY_CONTACT KEY_F18
--#define KEY_CENTER KEY_F15
-+
-+#define LOCOMO_KEY_CALENDER KEY_F1
-+#define LOCOMO_KEY_ADDRESS KEY_F2
-+#define LOCOMO_KEY_CANCEL KEY_F4
-+#define LOCOMO_KEY_CENTER KEY_F5
-+#define LOCOMO_KEY_MAIL KEY_F10
-+#define LOCOMO_KEY_OK KEY_F11
-+#define LOCOMO_KEY_MENU KEY_F12
-
- static unsigned char locomokbd_keycode[LOCOMOKBD_NUMKEYS] = {
-- 0, KEY_ESC, KEY_ACTIVITY, 0, 0, 0, 0, 0, 0, 0, /* 0 - 9 */
-- 0, 0, 0, 0, 0, 0, 0, KEY_MENU, KEY_HOME, KEY_CONTACT, /* 10 - 19 */
-- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 20 - 29 */
-- 0, 0, 0, KEY_CENTER, 0, KEY_MAIL, 0, 0, 0, 0, /* 30 - 39 */
-- 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_RIGHT, /* 40 - 49 */
-- KEY_UP, KEY_LEFT, 0, 0, KEY_P, 0, KEY_O, KEY_I, KEY_Y, KEY_T, /* 50 - 59 */
-- KEY_E, KEY_W, 0, 0, 0, 0, KEY_DOWN, KEY_ENTER, 0, 0, /* 60 - 69 */
-- KEY_BACKSPACE, 0, KEY_L, KEY_U, KEY_H, KEY_R, KEY_D, KEY_Q, 0, 0, /* 70 - 79 */
-- 0, 0, 0, 0, 0, 0, KEY_ENTER, KEY_RIGHTSHIFT, KEY_K, KEY_J, /* 80 - 89 */
-- KEY_G, KEY_F, KEY_X, KEY_S, 0, 0, 0, 0, 0, 0, /* 90 - 99 */
-- 0, 0, KEY_DOT, 0, KEY_COMMA, KEY_N, KEY_B, KEY_C, KEY_Z, KEY_A, /* 100 - 109 */
-- KEY_LEFTSHIFT, KEY_TAB, KEY_LEFTCTRL, 0, 0, 0, 0, 0, 0, 0, /* 110 - 119 */
-- KEY_M, KEY_SPACE, KEY_V, KEY_APOSTROPHE, KEY_SLASH, 0, 0, 0 /* 120 - 128 */
-+ 0, LOCOMO_KEY_CANCEL, LOCOMO_KEY_CALENDER, KEY_HOME, 0, 0, 0, 0, 0, 0, /* 0 - 9 */
-+ KEY_HOME, 0, 0, 0, 0, 0, 0, LOCOMO_KEY_MENU, KEY_HOME, LOCOMO_KEY_ADDRESS, /* 10 - 19 */
-+ 0, 0, 0, 0, 0, LOCOMO_KEY_MAIL, 0, 0, 0, 0, /* 20 - 29 */
-+ 0, 0, 0, LOCOMO_KEY_CENTER, 0, LOCOMO_KEY_MAIL, 0, 0, 0, 0, /* 30 - 39 */
-+ 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_RIGHT, /* 40 - 49 */
-+ KEY_UP, KEY_LEFT, 0, 0, KEY_P, 0, KEY_O, KEY_I, KEY_Y, KEY_T, /* 50 - 59 */
-+ KEY_E, KEY_W, 0, 0, 0, 0, KEY_DOWN, LOCOMO_KEY_OK, 0, 0, /* 60 - 69 */
-+ KEY_BACKSPACE, 0, KEY_L, KEY_U, KEY_H, KEY_R, KEY_D, KEY_Q, 0, 0, /* 70 - 79 */
-+ 0, 0, 0, 0, 0, 0, KEY_ENTER, KEY_RIGHTSHIFT, KEY_K, KEY_J, /* 80 - 89 */
-+ KEY_G, KEY_F, KEY_X, KEY_S, 0, 0, 0, 0, 0, 0, /* 90 - 99 */
-+ 0, 0, KEY_DOT, 0, KEY_COMMA, KEY_N, KEY_B, KEY_C, KEY_Z, KEY_A, /* 100 - 109 */
-+ KEY_LEFTSHIFT, KEY_TAB, KEY_LEFTCTRL, 0, 0, 0, 0, 0, 0, 0, /* 110 - 119 */
-+ KEY_M, KEY_SPACE, KEY_V, KEY_APOSTROPHE, KEY_SLASH, 0, 0, 0 /* 120 - 128 */
- };
-
- #define KB_ROWS 16
diff --git a/packages/linux/linux-rp-2.6.16/locomo-lcd-def-bightness.patch b/packages/linux/linux-rp-2.6.16/locomo-lcd-def-bightness.patch
deleted file mode 100644
index 6408ef9551..0000000000
--- a/packages/linux/linux-rp-2.6.16/locomo-lcd-def-bightness.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- linux-2.6.16/drivers/video/backlight/locomolcd.c.orig 2006-05-14 13:24:01.354435088 +0200
-+++ linux-2.6.16/drivers/video/backlight/locomolcd.c 2006-05-14 13:24:11.920828752 +0200
-@@ -201,7 +201,7 @@
- return PTR_ERR (locomolcd_bl_device);
-
- /* Set up frontlight so that screen is readable */
-- locomobl_data.brightness = 2;
-+ locomobl_data.brightness = 3;
- locomolcd_set_intensity(locomolcd_bl_device);
-
- return 0;
diff --git a/packages/linux/linux-rp-2.6.16/locomo-sysrq+keyrepeat.patch b/packages/linux/linux-rp-2.6.16/locomo-sysrq+keyrepeat.patch
deleted file mode 100644
index 7e233277da..0000000000
--- a/packages/linux/linux-rp-2.6.16/locomo-sysrq+keyrepeat.patch
+++ /dev/null
@@ -1,49 +0,0 @@
---- linux-2.6.16/drivers/input/keyboard/locomokbd.c.orig 2006-05-13 22:53:33.810228656 +0200
-+++ linux-2.6.16/drivers/input/keyboard/locomokbd.c 2006-05-13 22:56:56.544408376 +0200
-@@ -45,17 +45,20 @@
- #define LOCOMOKBD_NUMKEYS 128
-
-
--#define LOCOMO_KEY_CALENDER KEY_F1
--#define LOCOMO_KEY_ADDRESS KEY_F2
--#define LOCOMO_KEY_CANCEL KEY_F4
--#define LOCOMO_KEY_CENTER KEY_F5
--#define LOCOMO_KEY_MAIL KEY_F10
--#define LOCOMO_KEY_OK KEY_F11
-+#define LOCOMO_KEY_CALENDER KEY_LEFTCTRL
-+#define LOCOMO_KEY_ADDRESS KEY_LEFTALT /* Needed for SysRQ */
-+#define LOCOMO_KEY_HOME KEY_SYSRQ /* Needed for SysRQ */
- #define LOCOMO_KEY_MENU KEY_F12
-+#define LOCOMO_KEY_MAIL KEY_F10
-+#define LOCOMO_KEY_OK KEY_F11 /* Don't hardwire to KEY_RETURN */
-+#define LOCOMO_KEY_CANCEL KEY_POWER
-+#define LOCOMO_KEY_CENTER KEY_F5 /* Don't hardwire to KEY_RETURN */
-+
-+#define LOCOMO_KEY_FN KEY_F9
-
- static unsigned char locomokbd_keycode[LOCOMOKBD_NUMKEYS] = {
-- 0, LOCOMO_KEY_CANCEL, LOCOMO_KEY_CALENDER, KEY_HOME, 0, 0, 0, 0, 0, 0, /* 0 - 9 */
-- KEY_HOME, 0, 0, 0, 0, 0, 0, LOCOMO_KEY_MENU, KEY_HOME, LOCOMO_KEY_ADDRESS, /* 10 - 19 */
-+ 0, LOCOMO_KEY_CANCEL, LOCOMO_KEY_CALENDER, LOCOMO_KEY_HOME, 0, 0, 0, 0, 0, 0, /* 0 - 9 */
-+ 0, 0, 0, 0, 0, 0, 0, LOCOMO_KEY_MENU, 0, LOCOMO_KEY_ADDRESS, /* 10 - 19 */
- 0, 0, 0, 0, 0, LOCOMO_KEY_MAIL, 0, 0, 0, 0, /* 20 - 29 */
- 0, 0, 0, LOCOMO_KEY_CENTER, 0, LOCOMO_KEY_MAIL, 0, 0, 0, 0, /* 30 - 39 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_RIGHT, /* 40 - 49 */
-@@ -65,7 +68,7 @@
- 0, 0, 0, 0, 0, 0, KEY_ENTER, KEY_RIGHTSHIFT, KEY_K, KEY_J, /* 80 - 89 */
- KEY_G, KEY_F, KEY_X, KEY_S, 0, 0, 0, 0, 0, 0, /* 90 - 99 */
- 0, 0, KEY_DOT, 0, KEY_COMMA, KEY_N, KEY_B, KEY_C, KEY_Z, KEY_A, /* 100 - 109 */
-- KEY_LEFTSHIFT, KEY_TAB, KEY_LEFTCTRL, 0, 0, 0, 0, 0, 0, 0, /* 110 - 119 */
-+ KEY_LEFTSHIFT, KEY_TAB, LOCOMO_KEY_FN, 0, 0, 0, 0, 0, 0, 0, /* 110 - 119 */
- KEY_M, KEY_SPACE, KEY_V, KEY_APOSTROPHE, KEY_SLASH, 0, 0, 0 /* 120 - 128 */
- };
-
-@@ -76,7 +79,7 @@
- #define NR_SCANCODES 128
-
- #define KB_DELAY 8
--#define SCAN_INTERVAL (HZ/10)
-+#define SCAN_INTERVAL (HZ/20)
- #define LOCOMOKBD_PRESSED 1
-
- struct locomokbd {
diff --git a/packages/linux/linux-rp-2.6.16/maxpower-message.patch b/packages/linux/linux-rp-2.6.16/maxpower-message.patch
deleted file mode 100644
index 6e76be4d1c..0000000000
--- a/packages/linux/linux-rp-2.6.16/maxpower-message.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From: Daniel Drake <dsd@gentoo.org>
-Date: Fri, 26 May 2006 20:36:28 +0000 (+0100)
-Subject: [PATCH] USB: print message when device is rejected due to insufficient power
-X-Git-Tag: v2.6.18-rc1
-X-Git-Url: http://kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=1fbe75e12f0dd567c86533e13ba2605f3ecad2e1
-
-[PATCH] USB: print message when device is rejected due to insufficient power
-
-2.6.16 introduces USB power budgeting in the Linux kernel, and since then, a
-fair number of users have observed that some of their devices no longer work in
-unpowered hubs (this is not a bug, the devices claim that they need more than
-100mA).
-
-The very least we can do is print an informational message to the kernel log
-when this happens, otherwise it is not at all clear why the device was not
-accepted.
-
-Signed-off-by: Daniel Drake <dsd@gentoo.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
-
---- a/drivers/usb/core/hub.c
-+++ b/drivers/usb/core/hub.c
-@@ -1176,6 +1176,7 @@ static int choose_configuration(struct u
- {
- int i;
- int num_configs;
-+ int insufficient_power = 0;
- struct usb_host_config *c, *best;
-
- best = NULL;
-@@ -1228,8 +1229,10 @@ static int choose_configuration(struct u
- */
-
- /* Rule out configs that draw too much bus current */
-- if (c->desc.bMaxPower * 2 > udev->bus_mA)
-+ if (c->desc.bMaxPower * 2 > udev->bus_mA) {
-+ insufficient_power++;
- continue;
-+ }
-
- /* If the first config's first interface is COMM/2/0xff
- * (MSFT RNDIS), rule it out unless Linux has host-side
-@@ -1263,6 +1266,11 @@ static int choose_configuration(struct u
- best = c;
- }
-
-+ if (insufficient_power > 0)
-+ dev_info(&udev->dev, "rejected %d configuration%s "
-+ "due to insufficient available bus power\n",
-+ insufficient_power, plural(insufficient_power));
-+
- if (best) {
- i = best->desc.bConfigurationValue;
- dev_info(&udev->dev,
diff --git a/packages/linux/linux-rp-2.6.16/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.16/pxa-serial-hack.patch
deleted file mode 100644
index b3a7f786ea..0000000000
--- a/packages/linux/linux-rp-2.6.16/pxa-serial-hack.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-Index: linux-2.6.14/drivers/serial/8250.c
-===================================================================
---- linux-2.6.14.orig/drivers/serial/8250.c 2005-11-07 18:10:50.000000000 +0000
-+++ linux-2.6.14/drivers/serial/8250.c 2005-11-07 19:01:21.000000000 +0000
-@@ -2333,7 +2333,12 @@
- .devfs_name = "tts/",
- .dev_name = "ttyS",
- .major = TTY_MAJOR,
-+#ifdef CONFIG_SERIAL_PXA
-+ .minor = 64 + 3,
-+ .name_base = 3,
-+#else
- .minor = 64,
-+#endif
- .nr = UART_NR,
- .cons = SERIAL8250_CONSOLE,
- };
-Index: linux-2.6.14/drivers/serial/serial_core.c
-===================================================================
---- linux-2.6.14.orig/drivers/serial/serial_core.c 2005-11-07 18:10:50.000000000 +0000
-+++ linux-2.6.14/drivers/serial/serial_core.c 2005-11-07 19:01:21.000000000 +0000
-@@ -2126,6 +2126,7 @@
- normal->driver_name = drv->driver_name;
- normal->devfs_name = drv->devfs_name;
- normal->name = drv->dev_name;
-+ normal->name_base = drv->name_base;
- normal->major = drv->major;
- normal->minor_start = drv->minor;
- normal->type = TTY_DRIVER_TYPE_SERIAL;
-Index: linux-2.6.14/include/linux/serial_core.h
-===================================================================
---- linux-2.6.14.orig/include/linux/serial_core.h 2005-11-07 18:10:56.000000000 +0000
-+++ linux-2.6.14/include/linux/serial_core.h 2005-11-07 19:01:21.000000000 +0000
-@@ -322,6 +322,7 @@
- const char *driver_name;
- const char *dev_name;
- const char *devfs_name;
-+ int name_base;
- int major;
- int minor;
- int nr;
-Index: linux-2.6.14/drivers/serial/serial_cs.c
-===================================================================
---- linux-2.6.14.orig/drivers/serial/serial_cs.c 2005-10-28 01:02:08.000000000 +0100
-+++ linux-2.6.14/drivers/serial/serial_cs.c 2005-11-07 19:01:21.000000000 +0000
-@@ -294,7 +294,7 @@
- kio_addr_t iobase, int irq)
- {
- struct uart_port port;
-- int line;
-+ int line, linestart;
-
- memset(&port, 0, sizeof (struct uart_port));
- port.iobase = iobase;
-@@ -311,10 +311,16 @@
- return -EINVAL;
- }
-
-+#if CONFIG_SERIAL_PXA
-+ linestart = 3;
-+#else
-+ linestart = 0;
-+#endif
-+
- info->line[info->ndev] = line;
-- sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
-+ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line+linestart);
- info->node[info->ndev].major = TTY_MAJOR;
-- info->node[info->ndev].minor = 0x40 + line;
-+ info->node[info->ndev].minor = 0x40 + line + linestart;
- if (info->ndev > 0)
- info->node[info->ndev - 1].next = &info->node[info->ndev];
- info->ndev++;
diff --git a/packages/linux/linux-rp-2.6.16/rmk-mmc1.patch b/packages/linux/linux-rp-2.6.16/rmk-mmc1.patch
deleted file mode 100644
index 054b48d28d..0000000000
--- a/packages/linux/linux-rp-2.6.16/rmk-mmc1.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-
-The CSD contains a "read2write factor" which determines the multiplier to
-be applied to the read timeout to obtain the write timeout. We were
-ignoring this parameter, resulting in the possibility for writes being
-timed out too early.
-
-Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-
-diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
---- a/drivers/mmc/mmc.c
-+++ b/drivers/mmc/mmc.c
-@@ -549,6 +549,7 @@ static void mmc_decode_csd(struct mmc_ca
- csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
- csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
- csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
-+ csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
- csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
- csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
- } else {
-@@ -583,6 +584,7 @@ static void mmc_decode_csd(struct mmc_ca
- csd->read_partial = UNSTUFF_BITS(resp, 79, 1);
- csd->write_misalign = UNSTUFF_BITS(resp, 78, 1);
- csd->read_misalign = UNSTUFF_BITS(resp, 77, 1);
-+ csd->r2w_factor = UNSTUFF_BITS(resp, 26, 3);
- csd->write_blkbits = UNSTUFF_BITS(resp, 22, 4);
- csd->write_partial = UNSTUFF_BITS(resp, 21, 1);
- }
-diff --git a/drivers/mmc/mmc_block.c b/drivers/mmc/mmc_block.c
---- a/drivers/mmc/mmc_block.c
-+++ b/drivers/mmc/mmc_block.c
-@@ -187,6 +187,12 @@ static int mmc_blk_issue_rq(struct mmc_q
- brq.cmd.opcode = MMC_WRITE_BLOCK;
- brq.data.flags |= MMC_DATA_WRITE;
- brq.data.blocks = 1;
-+
-+ /*
-+ * Scale up the timeout by the r2w factor
-+ */
-+ brq.data.timeout_ns <<= card->csd.r2w_factor;
-+ brq.data.timeout_clks <<= card->csd.r2w_factor;
- }
-
- if (brq.data.blocks > 1) {
-diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
---- a/include/linux/mmc/card.h
-+++ b/include/linux/mmc/card.h
-@@ -28,6 +28,7 @@ struct mmc_csd {
- unsigned short cmdclass;
- unsigned short tacc_clks;
- unsigned int tacc_ns;
-+ unsigned int r2w_factor;
- unsigned int max_dtr;
- unsigned int read_blkbits;
- unsigned int write_blkbits;
-
-
--------------------------------------------------------------------
-List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
-FAQ: http://www.arm.linux.org.uk/mailinglists/faq.php
-Etiquette: http://www.arm.linux.org.uk/mailinglists/etiquette.php
-
diff --git a/packages/linux/linux-rp-2.6.16/rmk-mmc2.patch b/packages/linux/linux-rp-2.6.16/rmk-mmc2.patch
deleted file mode 100644
index cef02436d6..0000000000
--- a/packages/linux/linux-rp-2.6.16/rmk-mmc2.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-
-Always send a stop command at the end of a data transfer. If we avoid
-sending the stop command, some cards remain in data transfer mode, and
-refuse to accept further read/write commands.
-
-Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-
-diff --git a/drivers/mmc/pxamci.c b/drivers/mmc/pxamci.c
---- a/drivers/mmc/pxamci.c
-+++ b/drivers/mmc/pxamci.c
-@@ -291,7 +291,7 @@ static int pxamci_data_done(struct pxamc
- pxamci_disable_irq(host, DATA_TRAN_DONE);
-
- host->data = NULL;
-- if (host->mrq->stop && data->error == MMC_ERR_NONE) {
-+ if (host->mrq->stop) {
- pxamci_stop_clock(host);
- pxamci_start_cmd(host, host->mrq->stop, 0);
- } else {
-
-
--------------------------------------------------------------------
-List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
-FAQ: http://www.arm.linux.org.uk/mailinglists/faq.php
-Etiquette: http://www.arm.linux.org.uk/mailinglists/etiquette.php
-
diff --git a/packages/linux/linux-rp-2.6.16/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.16/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
deleted file mode 100644
index 18bf4268fc..0000000000
--- a/packages/linux/linux-rp-2.6.16/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-
-From: Petr Vandrovec <vandrove@vc.cvut.cz>
-
-Patch below adds support for using different prescaler than 16 for 16c950
-chips. This is needed for using Fujitsu-Siemens Connect2Air compact-flash
-card, which comes (apparently) with 806kHz clocks, and so you have to
-program prescaler for division by 7, and DLAB to 1, to get 115200Bd.
-
-To get card properly running you also have to add lines below to
-/etc/pcmcia/serial.opts so kernel knows that base speed is not 115200 but
-50400 (50400 * 16 = 806400; 806400 / 7 = 115200). As I've found no code
-specifying baud_rate in serial_cs, I assume that specifying it in
-serial.opts is right way to do this type of things.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER maximum possible
-baud rate passed to uart code was uartclk / 16 while correct value for
-these devices (and for 16c950) is uartclk / 4.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER devices with
-baud_rate 19200 or 9600 spd_cust did not work correctly. Not that such
-devices exist, but we should not ignore spd_cust, user probably knows why
-he asked for spd_cust.
-
-serial.opts:
-
-case "$MANFID-$FUNCID-$PRODID_1-$PRODID_2-$PRODID_3-$PRODID_4" in
-'0279,950b-2-GPRS Modem---')
- SERIAL_OPTS="baud_base 50400"
- ;;
-esac
-
-Cc: David Woodhouse <dwmw2@infradead.org>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
----
-
- drivers/serial/8250.c | 82 +++++++++++++++++++++++++++++++++++++++-----------
- 1 files changed, 64 insertions(+), 18 deletions(-)
-
-diff -puN drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver drivers/serial/8250.c
---- devel/drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver 2005-09-12 03:34:57.000000000 -0700
-+++ devel-akpm/drivers/serial/8250.c 2005-09-12 03:34:57.000000000 -0700
-@@ -1653,24 +1653,58 @@ static void serial8250_shutdown(struct u
- serial_unlink_irq_chain(up);
- }
-
--static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud)
-+static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud,
-+ unsigned int *prescaler)
- {
-- unsigned int quot;
--
-- /*
-- * Handle magic divisors for baud rates above baud_base on
-- * SMSC SuperIO chips.
-+ /*
-+ * Use special handling only if user did not supply its own divider.
-+ * spd_cust is defined in terms of baud_base, so always use default
-+ * prescaler when spd_cust is requested.
- */
-- if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/4))
-- quot = 0x8001;
-- else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/8))
-- quot = 0x8002;
-- else
-- quot = uart_get_divisor(port, baud);
-
-- return quot;
-+ *prescaler = 16;
-+ if (baud != 38400 || (port->flags & UPF_SPD_MASK) != UPF_SPD_CUST) {
-+ unsigned int quot = port->uartclk / baud;
-+
-+ /*
-+ * Handle magic divisors for baud rates above baud_base on
-+ * SMSC SuperIO chips.
-+ */
-+ if (port->flags & UPF_MAGIC_MULTIPLIER) {
-+ if (quot == 4) {
-+ return 0x8001;
-+ } else if (quot == 8) {
-+ return 0x8002;
-+ }
-+ }
-+ if (port->type == PORT_16C950) {
-+ /*
-+ * This computes TCR value (4 to 16), not CPR value (which can
-+ * be between 1.000 and 31.875) - chip I have uses XTAL of
-+ * 806400Hz, and so a division by 7 is required to get 115200Bd.
-+ * I'm leaving CPR disabled for now, until someone will
-+ * hit even more exotic XTAL (it is needed to get 500kbps
-+ * or 1000kbps from 18.432MHz XTAL, but I have no device
-+ * which would benefit from doing that).
-+ *
-+ * If we can use divide by 16, use it. Otherwise look for
-+ * better prescaler, from 15 to 4. If quotient cannot
-+ * be divided by any integer value between 4 and 15, use 4.
-+ */
-+ if (quot & 0x0F) {
-+ unsigned int div;
-+
-+ for (div = 15; div > 4; div--) {
-+ if (quot % div == 0) {
-+ break;
-+ }
-+ }
-+ *prescaler = div;
-+ return quot / div;
-+ }
-+ }
-+ }
-+ return uart_get_divisor(port, baud);
- }
-
- static void
-@@ -1680,7 +1714,7 @@ serial8250_set_termios(struct uart_port
- struct uart_8250_port *up = (struct uart_8250_port *)port;
- unsigned char cval, fcr = 0;
- unsigned long flags;
-- unsigned int baud, quot;
-+ unsigned int baud, quot, prescaler;
-
- switch (termios->c_cflag & CSIZE) {
- case CS5:
-@@ -1712,8 +1746,13 @@ serial8250_set_termios(struct uart_port
- /*
- * Ask the core to calculate the divisor for us.
- */
-- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-- quot = serial8250_get_divisor(port, baud);
-+
-+ if (port->type == PORT_16C950 || (port->flags & UPF_MAGIC_MULTIPLIER)) {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/4);
-+ } else {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-+ }
-+ quot = serial8250_get_divisor(port, baud, &prescaler);
-
- /*
- * Oxford Semi 952 rev B workaround
-@@ -1817,6 +1856,13 @@ serial8250_set_termios(struct uart_port
- serial_outp(up, UART_DLM, quot >> 8); /* MS of divisor */
-
- /*
-+ * Program prescaler for 16C950 chips.
-+ */
-+ if (up->port.type == PORT_16C950) {
-+ serial_icr_write(up, UART_TCR, prescaler == 16 ? 0 : prescaler);
-+ }
-+
-+ /*
- * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
- * is written without DLAB set, this mode will be disabled.
- */
-_
diff --git a/packages/linux/linux-rp-2.6.16/squashfs3.0-2.6.15.patch b/packages/linux/linux-rp-2.6.16/squashfs3.0-2.6.15.patch
deleted file mode 100644
index 6fec9eba03..0000000000
--- a/packages/linux/linux-rp-2.6.16/squashfs3.0-2.6.15.patch
+++ /dev/null
@@ -1,4174 +0,0 @@
-diff --new-file -urp linux-2.6.15/fs/Kconfig linux-2.6.15-squashfs3.0/fs/Kconfig
---- linux-2.6.15/fs/Kconfig 2006-03-01 22:37:27.000000000 +0000
-+++ linux-2.6.15-squashfs3.0/fs/Kconfig 2006-03-07 21:12:37.000000000 +0000
-@@ -1151,6 +1151,71 @@ config CRAMFS
-
- If unsure, say N.
-
-+config SQUASHFS
-+ tristate "SquashFS 3.0 - Squashed file system support"
-+ select ZLIB_INFLATE
-+ help
-+ Saying Y here includes support for SquashFS 3.0 (a Compressed Read-Only File
-+ System). Squashfs is a highly compressed read-only filesystem for Linux.
-+ It uses zlib compression to compress both files, inodes and directories.
-+ Inodes in the system are very small and all blocks are packed to minimise
-+ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
-+ SquashFS 3.0 supports 64 bit filesystems and files (larger than 4GB), full
-+ uid/gid information, hard links and timestamps.
-+
-+ Squashfs is intended for general read-only filesystem use, for archival
-+ use (i.e. in cases where a .tar.gz file may be used), and in embedded
-+ systems where low overhead is needed. Further information and filesystem tools
-+ are available from http://squashfs.sourceforge.net.
-+
-+ If you want to compile this as a module ( = code which can be
-+ inserted in and removed from the running kernel whenever you want),
-+ say M here and read <file:Documentation/modules.txt>. The module
-+ will be called squashfs. Note that the root file system (the one
-+ containing the directory /) cannot be compiled as a module.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_EMBEDDED
-+
-+ bool "Additional options for memory-constrained systems"
-+ depends on SQUASHFS
-+ default n
-+ help
-+ Saying Y here allows you to specify cache sizes and how Squashfs
-+ allocates memory. This is only intended for memory constrained
-+ systems.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_FRAGMENT_CACHE_SIZE
-+ int "Number of fragments cached" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default "3"
-+ help
-+ By default SquashFS caches the last 3 fragments read from
-+ the filesystem. Increasing this amount may mean SquashFS
-+ has to re-read fragments less often from disk, at the expense
-+ of extra system memory. Decreasing this amount will mean
-+ SquashFS uses less memory at the expense of extra reads from disk.
-+
-+ Note there must be at least one cached fragment. Anything
-+ much more than three will probably not make much difference.
-+
-+config SQUASHFS_VMALLOC
-+ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default n
-+ help
-+ By default SquashFS uses kmalloc to obtain fragment cache memory.
-+ Kmalloc memory is the standard kernel allocator, but it can fail
-+ on memory constrained systems. Because of the way Vmalloc works,
-+ Vmalloc can succeed when kmalloc fails. Specifying this option
-+ will make SquashFS always use Vmalloc to allocate the
-+ fragment cache memory.
-+
-+ If unsure, say N.
-+
- config VXFS_FS
- tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
- help
-diff --new-file -urp linux-2.6.15/fs/Makefile linux-2.6.15-squashfs3.0/fs/Makefile
---- linux-2.6.15/fs/Makefile 2006-03-01 22:37:27.000000000 +0000
-+++ linux-2.6.15-squashfs3.0/fs/Makefile 2006-03-07 21:12:37.000000000 +0000
-@@ -55,6 +55,7 @@ obj-$(CONFIG_EXT3_FS) += ext3/ # Before
- obj-$(CONFIG_JBD) += jbd/
- obj-$(CONFIG_EXT2_FS) += ext2/
- obj-$(CONFIG_CRAMFS) += cramfs/
-+obj-$(CONFIG_SQUASHFS) += squashfs/
- obj-$(CONFIG_RAMFS) += ramfs/
- obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
- obj-$(CONFIG_CODA_FS) += coda/
-diff --new-file -urp linux-2.6.15/fs/squashfs/inode.c linux-2.6.15-squashfs3.0/fs/squashfs/inode.c
---- linux-2.6.15/fs/squashfs/inode.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/fs/squashfs/inode.c 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,2127 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * inode.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+
-+static void squashfs_put_super(struct super_block *);
-+static int squashfs_statfs(struct super_block *, struct kstatfs *);
-+static int squashfs_symlink_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage4K(struct file *file, struct page *page);
-+static int squashfs_readdir(struct file *, void *, filldir_t);
-+static struct inode *squashfs_alloc_inode(struct super_block *sb);
-+static void squashfs_destroy_inode(struct inode *inode);
-+static int init_inodecache(void);
-+static void destroy_inodecache(void);
-+static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
-+ struct nameidata *);
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize);
-+static struct super_block *squashfs_get_sb(struct file_system_type *, int,
-+ const char *, void *);
-+
-+
-+static z_stream stream;
-+
-+static struct file_system_type squashfs_fs_type = {
-+ .owner = THIS_MODULE,
-+ .name = "squashfs",
-+ .get_sb = squashfs_get_sb,
-+ .kill_sb = kill_block_super,
-+ .fs_flags = FS_REQUIRES_DEV
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static struct super_operations squashfs_ops = {
-+ .alloc_inode = squashfs_alloc_inode,
-+ .destroy_inode = squashfs_destroy_inode,
-+ .statfs = squashfs_statfs,
-+ .put_super = squashfs_put_super,
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
-+ .readpage = squashfs_symlink_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops = {
-+ .readpage = squashfs_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
-+ .readpage = squashfs_readpage4K
-+};
-+
-+static struct file_operations squashfs_dir_ops = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir
-+};
-+
-+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
-+ .lookup = squashfs_lookup
-+};
-+
-+
-+static struct buffer_head *get_block_length(struct super_block *s,
-+ int *cur_index, int *offset, int *c_byte)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned short temp;
-+ struct buffer_head *bh;
-+
-+ if (!(bh = sb_bread(s, *cur_index)))
-+ goto out;
-+
-+ if (msblk->devblksize - *offset == 1) {
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ else
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ bh->b_data);
-+ else
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ bh->b_data);
-+ *c_byte = temp;
-+ *offset = 1;
-+ } else {
-+ if (msblk->swap) {
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ } else {
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ }
-+ *c_byte = temp;
-+ *offset += 2;
-+ }
-+
-+ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
-+ if (*offset == msblk->devblksize) {
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ *offset = 0;
-+ }
-+ if (*((unsigned char *) (bh->b_data + *offset)) !=
-+ SQUASHFS_MARKER_BYTE) {
-+ ERROR("Metadata block marker corrupt @ %x\n",
-+ *cur_index);
-+ brelse(bh);
-+ goto out;
-+ }
-+ (*offset)++;
-+ }
-+ return bh;
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
-+ msblk->devblksize_log2) + 2];
-+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
-+ unsigned int cur_index = index >> msblk->devblksize_log2;
-+ int bytes, avail_bytes, b = 0, k;
-+ char *c_buffer;
-+ unsigned int compressed;
-+ unsigned int c_byte = length;
-+
-+ if (c_byte) {
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ if (!(bh[0] = sb_getblk(s, cur_index)))
-+ goto block_release;
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b, bh);
-+ } else {
-+ if (!(bh[0] = get_block_length(s, &cur_index, &offset,
-+ &c_byte)))
-+ goto read_failure;
-+
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b - 1, bh + 1);
-+ }
-+
-+ if (compressed)
-+ down(&msblk->read_data_mutex);
-+
-+ for (bytes = 0, k = 0; k < b; k++) {
-+ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
-+ msblk->devblksize - offset :
-+ c_byte - bytes;
-+ wait_on_buffer(bh[k]);
-+ if (!buffer_uptodate(bh[k]))
-+ goto block_release;
-+ memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
-+ bytes += avail_bytes;
-+ offset = 0;
-+ brelse(bh[k]);
-+ }
-+
-+ /*
-+ * uncompress block
-+ */
-+ if (compressed) {
-+ int zlib_err;
-+
-+ stream.next_in = c_buffer;
-+ stream.avail_in = c_byte;
-+ stream.next_out = buffer;
-+ stream.avail_out = msblk->read_size;
-+
-+ if (((zlib_err = zlib_inflateInit(&stream)) != Z_OK) ||
-+ ((zlib_err = zlib_inflate(&stream, Z_FINISH))
-+ != Z_STREAM_END) || ((zlib_err =
-+ zlib_inflateEnd(&stream)) != Z_OK)) {
-+ ERROR("zlib_fs returned unexpected result 0x%x\n",
-+ zlib_err);
-+ bytes = 0;
-+ } else
-+ bytes = stream.total_out;
-+
-+ up(&msblk->read_data_mutex);
-+ }
-+
-+ if (next_index)
-+ *next_index = index + c_byte + (length ? 0 :
-+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
-+ ? 3 : 2));
-+ return bytes;
-+
-+block_release:
-+ while (--b >= 0)
-+ brelse(bh[b]);
-+
-+read_failure:
-+ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ int n, i, bytes, return_length = length;
-+ long long next_index;
-+
-+ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
-+
-+ while ( 1 ) {
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (msblk->block_cache[i].block == block)
-+ break;
-+
-+ down(&msblk->block_cache_mutex);
-+
-+ if (i == SQUASHFS_CACHED_BLKS) {
-+ /* read inode header block */
-+ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
-+ n ; n --, i = (i + 1) %
-+ SQUASHFS_CACHED_BLKS)
-+ if (msblk->block_cache[i].block !=
-+ SQUASHFS_USED_BLK)
-+ break;
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->waitq, &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->block_cache_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->waitq, &wait);
-+ continue;
-+ }
-+ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
-+
-+ if (msblk->block_cache[i].block ==
-+ SQUASHFS_INVALID_BLK) {
-+ if (!(msblk->block_cache[i].data =
-+ kmalloc(SQUASHFS_METADATA_SIZE,
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate cache"
-+ "block\n");
-+ up(&msblk->block_cache_mutex);
-+ goto out;
-+ }
-+ }
-+
-+ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
-+ up(&msblk->block_cache_mutex);
-+
-+ if (!(msblk->block_cache[i].length =
-+ squashfs_read_data(s,
-+ msblk->block_cache[i].data,
-+ block, 0, &next_index))) {
-+ ERROR("Unable to read cache block [%llx:%x]\n",
-+ block, offset);
-+ goto out;
-+ }
-+
-+ down(&msblk->block_cache_mutex);
-+ wake_up(&msblk->waitq);
-+ msblk->block_cache[i].block = block;
-+ msblk->block_cache[i].next_index = next_index;
-+ TRACE("Read cache block [%llx:%x]\n", block, offset);
-+ }
-+
-+ if (msblk->block_cache[i].block != block) {
-+ up(&msblk->block_cache_mutex);
-+ continue;
-+ }
-+
-+ if ((bytes = msblk->block_cache[i].length - offset) >= length) {
-+ if (buffer)
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, length);
-+ if (msblk->block_cache[i].length - offset == length) {
-+ *next_block = msblk->block_cache[i].next_index;
-+ *next_offset = 0;
-+ } else {
-+ *next_block = block;
-+ *next_offset = offset + length;
-+ }
-+ up(&msblk->block_cache_mutex);
-+ goto finish;
-+ } else {
-+ if (buffer) {
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, bytes);
-+ buffer += bytes;
-+ }
-+ block = msblk->block_cache[i].next_index;
-+ up(&msblk->block_cache_mutex);
-+ length -= bytes;
-+ offset = 0;
-+ }
-+ }
-+
-+finish:
-+ return return_length;
-+out:
-+ return 0;
-+}
-+
-+
-+static int get_fragment_location(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
-+ struct squashfs_fragment_entry fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment)
-+{
-+ down(&msblk->fragment_mutex);
-+ fragment->locked --;
-+ wake_up(&msblk->fragment_wait_queue);
-+ up(&msblk->fragment_mutex);
-+}
-+
-+
-+SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length)
-+{
-+ int i, n, nf;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+
-+ while ( 1 ) {
-+ down(&msblk->fragment_mutex);
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
-+ msblk->fragment[i].block != start_block; i++);
-+
-+ if (i == SQUASHFS_CACHED_FRAGMENTS) {
-+ nf = (msblk->next_fragment + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS;
-+ for (i = msblk->next_fragment, n =
-+ SQUASHFS_CACHED_FRAGMENTS; n &&
-+ msblk->fragment[i].locked; n--, i = (i + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS);
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->fragment_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ continue;
-+ }
-+ msblk->next_fragment = nf;
-+
-+ if (msblk->fragment[i].data == NULL)
-+ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC
-+ (SQUASHFS_FILE_MAX_SIZE))) {
-+ ERROR("Failed to allocate fragment "
-+ "cache block\n");
-+ up(&msblk->fragment_mutex);
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].locked = 1;
-+ up(&msblk->fragment_mutex);
-+
-+ if (!(msblk->fragment[i].length = squashfs_read_data(s,
-+ msblk->fragment[i].data,
-+ start_block, length, NULL))) {
-+ ERROR("Unable to read fragment cache block "
-+ "[%llx]\n", start_block);
-+ msblk->fragment[i].locked = 0;
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = start_block;
-+ TRACE("New fragment %d, start block %lld, locked %d\n",
-+ i, msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ msblk->fragment[i].locked++;
-+ up(&msblk->fragment_mutex);
-+ TRACE("Got fragment %d, start block %lld, locked %d\n", i,
-+ msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ return &msblk->fragment[i];
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header *inodeb)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = inodeb->inode_number;
-+ i->i_mtime.tv_sec = inodeb->mtime;
-+ i->i_atime.tv_sec = inodeb->mtime;
-+ i->i_ctime.tv_sec = inodeb->mtime;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header id, sid;
-+ struct squashfs_base_inode_header *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_reg_inode_header *inodep = &id.reg;
-+ struct squashfs_reg_inode_header *sinodep = &sid.reg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = 1;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ i->i_blksize = PAGE_CACHE_SIZE;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_LREG_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_lreg_inode_header *inodep = &id.lreg;
-+ struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ i->i_blksize = PAGE_CACHE_SIZE;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header *inodep = &id.dir;
-+ struct squashfs_dir_inode_header *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header *inodep = &id.dev;
-+ struct squashfs_dev_inode_header *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ struct squashfs_ipc_inode_header *inodep = &id.ipc;
-+ struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int read_fragment_index_table(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ /* Allocate fragment index table */
-+ if (!(msblk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ long long fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
-+ &msblk->fragment_index[i], 1);
-+ msblk->fragment_index[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget;
-+ msblk->read_blocklist = read_blocklist;
-+ msblk->read_fragment_index_table = read_fragment_index_table;
-+
-+ if (sblk->s_major == 1) {
-+ if (!squashfs_1_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 1.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if (sblk->s_major == 2) {
-+ if (!squashfs_2_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 2.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
-+ SQUASHFS_MINOR) {
-+ SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
-+ "filesystem\n", sblk->s_major, sblk->s_minor);
-+ SERROR("Please update your kernel\n");
-+ return 0;
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int squashfs_fill_super(struct super_block *s, void *data, int silent)
-+{
-+ struct squashfs_sb_info *msblk;
-+ struct squashfs_super_block *sblk;
-+ int i;
-+ char b[BDEVNAME_SIZE];
-+ struct inode *root;
-+
-+ TRACE("Entered squashfs_read_superblock\n");
-+
-+ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info),
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate superblock\n");
-+ goto failure;
-+ }
-+ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
-+ msblk = s->s_fs_info;
-+ sblk = &msblk->sblk;
-+
-+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
-+ msblk->devblksize_log2 = ffz(~msblk->devblksize);
-+
-+ init_MUTEX(&msblk->read_data_mutex);
-+ init_MUTEX(&msblk->read_page_mutex);
-+ init_MUTEX(&msblk->block_cache_mutex);
-+ init_MUTEX(&msblk->fragment_mutex);
-+ init_MUTEX(&msblk->meta_index_mutex);
-+
-+ init_waitqueue_head(&msblk->waitq);
-+ init_waitqueue_head(&msblk->fragment_wait_queue);
-+
-+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
-+ sizeof(struct squashfs_super_block) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ SERROR("unable to read superblock\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Check it is a SQUASHFS superblock */
-+ msblk->swap = 0;
-+ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
-+ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
-+ struct squashfs_super_block ssblk;
-+
-+ WARNING("Mounting a different endian SQUASHFS "
-+ "filesystem on %s\n", bdevname(s->s_bdev, b));
-+
-+ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
-+ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
-+ msblk->swap = 1;
-+ } else {
-+ SERROR("Can't find a SQUASHFS superblock on %s\n",
-+ bdevname(s->s_bdev, b));
-+ goto failed_mount;
-+ }
-+ }
-+
-+ /* Check the MAJOR & MINOR versions */
-+ if(!supported_squashfs_filesystem(msblk, silent))
-+ goto failed_mount;
-+
-+ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
-+ TRACE("Inodes are %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_INODES
-+ (sblk->flags) ? "un" : "");
-+ TRACE("Data is %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
-+ ? "un" : "");
-+ TRACE("Check data is %s present in the filesystem\n",
-+ SQUASHFS_CHECK_DATA(sblk->flags) ?
-+ "" : "not");
-+ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
-+ TRACE("Block size %d\n", sblk->block_size);
-+ TRACE("Number of inodes %d\n", sblk->inodes);
-+ if (sblk->s_major > 1)
-+ TRACE("Number of fragments %d\n", sblk->fragments);
-+ TRACE("Number of uids %d\n", sblk->no_uids);
-+ TRACE("Number of gids %d\n", sblk->no_guids);
-+ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
-+ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
-+ if (sblk->s_major > 1)
-+ TRACE("sblk->fragment_table_start %llx\n",
-+ sblk->fragment_table_start);
-+ TRACE("sblk->uid_start %llx\n", sblk->uid_start);
-+
-+ s->s_flags |= MS_RDONLY;
-+ s->s_op = &squashfs_ops;
-+
-+ /* Init inode_table block pointer array */
-+ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
-+ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+
-+ msblk->next_cache = 0;
-+
-+ /* Allocate read_data block */
-+ msblk->read_size = (sblk->block_size < SQUASHFS_METADATA_SIZE) ?
-+ SQUASHFS_METADATA_SIZE :
-+ sblk->block_size;
-+
-+ if (!(msblk->read_data = kmalloc(msblk->read_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_data block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate read_page block */
-+ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_page block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate uid and gid tables */
-+ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ goto failed_mount;
-+ }
-+ msblk->guid = msblk->uid + sblk->no_uids;
-+
-+ if (msblk->swap) {
-+ unsigned int suid[sblk->no_uids + sblk->no_guids];
-+
-+ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
-+ sblk->no_guids), (sizeof(unsigned int) * 8));
-+ } else
-+ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+
-+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
-+ goto allocate_root;
-+
-+ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
-+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate fragment block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
-+ msblk->fragment[i].locked = 0;
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].data = NULL;
-+ }
-+
-+ msblk->next_fragment = 0;
-+
-+ /* Allocate fragment index table */
-+ if (msblk->read_fragment_index_table(s) == 0)
-+ goto failed_mount;
-+
-+allocate_root:
-+ if ((root = (msblk->iget)(s, sblk->root_inode)) == NULL)
-+ goto failed_mount;
-+
-+ if ((s->s_root = d_alloc_root(root)) == NULL) {
-+ ERROR("Root inode create failed\n");
-+ iput(root);
-+ goto failed_mount;
-+ }
-+
-+ TRACE("Leaving squashfs_read_super\n");
-+ return 0;
-+
-+failed_mount:
-+ kfree(msblk->fragment_index);
-+ kfree(msblk->fragment);
-+ kfree(msblk->uid);
-+ kfree(msblk->read_page);
-+ kfree(msblk->read_data);
-+ kfree(msblk->block_cache);
-+ kfree(msblk->fragment_index_2);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ return -EINVAL;
-+
-+failure:
-+ return -ENOMEM;
-+}
-+
-+
-+static int squashfs_statfs(struct super_block *s, struct kstatfs *buf)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ TRACE("Entered squashfs_statfs\n");
-+
-+ buf->f_type = SQUASHFS_MAGIC;
-+ buf->f_bsize = sblk->block_size;
-+ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
-+ buf->f_bfree = buf->f_bavail = 0;
-+ buf->f_files = sblk->inodes;
-+ buf->f_ffree = 0;
-+ buf->f_namelen = SQUASHFS_NAME_LEN;
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_symlink_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ int index = page->index << PAGE_CACHE_SHIFT, length, bytes;
-+ long long block = SQUASHFS_I(inode)->start_block;
-+ int offset = SQUASHFS_I(inode)->offset;
-+ void *pageaddr = kmap(page);
-+
-+ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
-+ "%llx, offset %x\n", page->index,
-+ SQUASHFS_I(inode)->start_block,
-+ SQUASHFS_I(inode)->offset);
-+
-+ for (length = 0; length < index; length += bytes) {
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL,
-+ block, offset, PAGE_CACHE_SIZE, &block,
-+ &offset))) {
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block,
-+ offset);
-+ goto skip_read;
-+ }
-+ }
-+
-+ if (length != index) {
-+ ERROR("(squashfs_symlink_readpage) length != index\n");
-+ bytes = 0;
-+ goto skip_read;
-+ }
-+
-+ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE :
-+ i_size_read(inode) - length;
-+
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block,
-+ offset, bytes, &block, &offset)))
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
-+{
-+ struct meta_index *meta = NULL;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
-+
-+ if(msblk->meta_index == NULL)
-+ goto not_allocated;
-+
-+ for (i = 0; i < SQUASHFS_META_NUMBER; i ++)
-+ if (msblk->meta_index[i].inode_number == inode->i_ino &&
-+ msblk->meta_index[i].offset >= offset &&
-+ msblk->meta_index[i].offset <= index &&
-+ msblk->meta_index[i].locked == 0) {
-+ TRACE("locate_meta_index: entry %d, offset %d\n", i,
-+ msblk->meta_index[i].offset);
-+ meta = &msblk->meta_index[i];
-+ offset = meta->offset;
-+ }
-+
-+ if (meta)
-+ meta->locked = 1;
-+
-+not_allocated:
-+ up(&msblk->meta_index_mutex);
-+
-+ return meta;
-+}
-+
-+
-+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct meta_index *meta = NULL;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
-+
-+ if(msblk->meta_index == NULL) {
-+ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) *
-+ SQUASHFS_META_NUMBER, GFP_KERNEL))) {
-+ ERROR("Failed to allocate meta_index\n");
-+ goto failed;
-+ }
-+ for(i = 0; i < SQUASHFS_META_NUMBER; i++) {
-+ msblk->meta_index[i].inode_number = 0;
-+ msblk->meta_index[i].locked = 0;
-+ }
-+ msblk->next_meta_index = 0;
-+ }
-+
-+ for(i = SQUASHFS_META_NUMBER; i &&
-+ msblk->meta_index[msblk->next_meta_index].locked; i --)
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ if(i == 0) {
-+ TRACE("empty_meta_index: failed!\n");
-+ goto failed;
-+ }
-+
-+ TRACE("empty_meta_index: returned meta entry %d, %p\n",
-+ msblk->next_meta_index,
-+ &msblk->meta_index[msblk->next_meta_index]);
-+
-+ meta = &msblk->meta_index[msblk->next_meta_index];
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ meta->inode_number = inode->i_ino;
-+ meta->offset = offset;
-+ meta->skip = skip;
-+ meta->entries = 0;
-+ meta->locked = 1;
-+
-+failed:
-+ up(&msblk->meta_index_mutex);
-+ return meta;
-+}
-+
-+
-+void release_meta_index(struct inode *inode, struct meta_index *meta)
-+{
-+ meta->locked = 0;
-+}
-+
-+
-+static int read_block_index(struct super_block *s, int blocks, char *block_list,
-+ long long *start_block, int *offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned int *block_listp;
-+ int block = 0;
-+
-+ if (msblk->swap) {
-+ char sblock_list[blocks << 2];
-+
-+ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
-+ ((unsigned int *)sblock_list), blocks);
-+ } else
-+ if (!squashfs_get_cached_block(s, block_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+
-+ for (block_listp = (unsigned int *) block_list; blocks;
-+ block_listp++, blocks --)
-+ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
-+
-+ return block;
-+
-+failure:
-+ return -1;
-+}
-+
-+
-+#define SIZE 256
-+
-+static inline int calculate_skip(int blocks) {
-+ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
-+ return skip >= 7 ? 7 : skip + 1;
-+}
-+
-+
-+static int get_meta_index(struct inode *inode, int index,
-+ long long *index_block, int *index_offset,
-+ long long *data_block, char *block_list)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
-+ int offset = 0;
-+ struct meta_index *meta;
-+ struct meta_entry *meta_entry;
-+ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
-+ int cur_offset = SQUASHFS_I(inode)->offset;
-+ long long cur_data_block = SQUASHFS_I(inode)->start_block;
-+ int i;
-+
-+ index /= SQUASHFS_META_INDEXES * skip;
-+
-+ while ( offset < index ) {
-+ meta = locate_meta_index(inode, index, offset + 1);
-+
-+ if (meta == NULL) {
-+ if ((meta = empty_meta_index(inode, offset + 1,
-+ skip)) == NULL)
-+ goto all_done;
-+ } else {
-+ offset = index < meta->offset + meta->entries ? index :
-+ meta->offset + meta->entries - 1;
-+ meta_entry = &meta->meta_entry[offset - meta->offset];
-+ cur_index_block = meta_entry->index_block + sblk->inode_table_start;
-+ cur_offset = meta_entry->offset;
-+ cur_data_block = meta_entry->data_block;
-+ TRACE("get_meta_index: offset %d, meta->offset %d, "
-+ "meta->entries %d\n", offset, meta->offset,
-+ meta->entries);
-+ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
-+ " data_block 0x%llx\n", cur_index_block,
-+ cur_offset, cur_data_block);
-+ }
-+
-+ for (i = meta->offset + meta->entries; i <= index &&
-+ i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
-+ int blocks = skip * SQUASHFS_META_INDEXES;
-+
-+ while (blocks) {
-+ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) :
-+ blocks;
-+ int res = read_block_index(inode->i_sb, block,
-+ block_list, &cur_index_block,
-+ &cur_offset);
-+
-+ if (res == -1)
-+ goto failed;
-+
-+ cur_data_block += res;
-+ blocks -= block;
-+ }
-+
-+ meta_entry = &meta->meta_entry[i - meta->offset];
-+ meta_entry->index_block = cur_index_block - sblk->inode_table_start;
-+ meta_entry->offset = cur_offset;
-+ meta_entry->data_block = cur_data_block;
-+ meta->entries ++;
-+ offset ++;
-+ }
-+
-+ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
-+ meta->offset, meta->entries);
-+
-+ release_meta_index(inode, meta);
-+ }
-+
-+all_done:
-+ *index_block = cur_index_block;
-+ *index_offset = cur_offset;
-+ *data_block = cur_data_block;
-+
-+ return offset * SQUASHFS_META_INDEXES * skip;
-+
-+failed:
-+ release_meta_index(inode, meta);
-+ return -1;
-+}
-+
-+
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize)
-+{
-+ long long block_ptr;
-+ int offset;
-+ long long block;
-+ int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
-+ block_list);
-+
-+ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
-+ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset,
-+ block);
-+
-+ if(res == -1)
-+ goto failure;
-+
-+ index -= res;
-+
-+ while ( index ) {
-+ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
-+ int res = read_block_index(inode->i_sb, blocks, block_list,
-+ &block_ptr, &offset);
-+ if (res == -1)
-+ goto failure;
-+ block += res;
-+ index -= blocks;
-+ }
-+
-+ if (read_block_index(inode->i_sb, 1, block_list,
-+ &block_ptr, &offset) == -1)
-+ goto failure;
-+ *bsize = *((unsigned int *) block_list);
-+
-+ return block;
-+
-+failure:
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0;
-+ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
-+ void *pageaddr;
-+ struct squashfs_fragment_cache *fragment = NULL;
-+ char *data_ptr = msblk->read_page;
-+
-+ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
-+ int start_index = page->index & ~mask;
-+ int end_index = start_index | mask;
-+
-+ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT))
-+ goto skip_read;
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ if ((block = (msblk->read_blocklist)(inode, index, 1,
-+ block_list, NULL, &bsize)) == 0)
-+ goto skip_read;
-+
-+ down(&msblk->read_page_mutex);
-+
-+ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page,
-+ block, bsize, NULL))) {
-+ ERROR("Unable to read page, block %llx, size %x\n", block,
-+ bsize);
-+ up(&msblk->read_page_mutex);
-+ goto skip_read;
-+ }
-+ } else {
-+ if ((fragment = get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)->u.s1.fragment_size))
-+ == NULL) {
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ (int) SQUASHFS_I(inode)->
-+ u.s1.fragment_size);
-+ goto skip_read;
-+ }
-+ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset +
-+ (i_size_read(inode) & (sblk->block_size
-+ - 1));
-+ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset;
-+ data_ptr = fragment->data;
-+ }
-+
-+ for (i = start_index; i <= end_index && byte_offset < bytes;
-+ i++, byte_offset += PAGE_CACHE_SIZE) {
-+ struct page *push_page;
-+ int available_bytes = (bytes - byte_offset) > PAGE_CACHE_SIZE ?
-+ PAGE_CACHE_SIZE : bytes - byte_offset;
-+
-+ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n",
-+ bytes, i, byte_offset, available_bytes);
-+
-+ if (i == page->index) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+ } else if ((push_page =
-+ grab_cache_page_nowait(page->mapping, i))) {
-+ pageaddr = kmap_atomic(push_page, KM_USER0);
-+
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(push_page);
-+ SetPageUptodate(push_page);
-+ unlock_page(push_page);
-+ page_cache_release(push_page);
-+ }
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log))
-+ up(&msblk->read_page_mutex);
-+ else
-+ release_cached_fragment(msblk, fragment);
-+
-+ return 0;
-+
-+skip_read:
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage4K(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, bytes = 0;
-+ void *pageaddr;
-+
-+ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT)) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ goto skip_read;
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || page->index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ block = (msblk->read_blocklist)(inode, page->index, 1,
-+ block_list, NULL, &bsize);
-+
-+ down(&msblk->read_page_mutex);
-+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
-+ bsize, NULL);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (bytes)
-+ memcpy(pageaddr, msblk->read_page, bytes);
-+ else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ block, bsize);
-+ up(&msblk->read_page_mutex);
-+ } else {
-+ struct squashfs_fragment_cache *fragment =
-+ get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (fragment) {
-+ bytes = i_size_read(inode) & (sblk->block_size - 1);
-+ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)->
-+ u.s1.fragment_offset, bytes);
-+ release_cached_fragment(msblk, fragment);
-+ } else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block, (int)
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ }
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ f_pos =- 3;
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length + 3;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index *index = (struct squashfs_dir_index *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length + 3;
-+}
-+
-+
-+static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
-+
-+ while(file->f_pos < 3) {
-+ char *name;
-+ int size, i_ino;
-+
-+ if(file->f_pos == 0) {
-+ name = ".";
-+ size = 1;
-+ i_ino = i->i_ino;
-+ } else {
-+ name = "..";
-+ size = 2;
-+ i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
-+ }
-+ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
-+ (unsigned int) dirent, name, size, (int)
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]);
-+
-+ if (filldir(dirent, name, size,
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]) < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos += size;
-+ dirs_read++;
-+ }
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %d\n", name,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+static void squashfs_put_super(struct super_block *s)
-+{
-+ int i;
-+
-+ if (s->s_fs_info) {
-+ struct squashfs_sb_info *sbi = s->s_fs_info;
-+ if (sbi->block_cache)
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (sbi->block_cache[i].block !=
-+ SQUASHFS_INVALID_BLK)
-+ kfree(sbi->block_cache[i].data);
-+ if (sbi->fragment)
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
-+ SQUASHFS_FREE(sbi->fragment[i].data);
-+ kfree(sbi->fragment);
-+ kfree(sbi->block_cache);
-+ kfree(sbi->read_data);
-+ kfree(sbi->read_page);
-+ kfree(sbi->uid);
-+ kfree(sbi->fragment_index);
-+ kfree(sbi->fragment_index_2);
-+ kfree(sbi->meta_index);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ }
-+}
-+
-+
-+static struct super_block *squashfs_get_sb(struct file_system_type *fs_type,
-+ int flags, const char *dev_name, void *data)
-+{
-+ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super);
-+}
-+
-+
-+static int __init init_squashfs_fs(void)
-+{
-+ int err = init_inodecache();
-+ if (err)
-+ goto out;
-+
-+ printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
-+ "Phillip Lougher\n");
-+
-+ if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
-+ ERROR("Failed to allocate zlib workspace\n");
-+ destroy_inodecache();
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+
-+ if ((err = register_filesystem(&squashfs_fs_type))) {
-+ vfree(stream.workspace);
-+ destroy_inodecache();
-+ }
-+
-+out:
-+ return err;
-+}
-+
-+
-+static void __exit exit_squashfs_fs(void)
-+{
-+ vfree(stream.workspace);
-+ unregister_filesystem(&squashfs_fs_type);
-+ destroy_inodecache();
-+}
-+
-+
-+static kmem_cache_t * squashfs_inode_cachep;
-+
-+
-+static struct inode *squashfs_alloc_inode(struct super_block *sb)
-+{
-+ struct squashfs_inode_info *ei;
-+ ei = kmem_cache_alloc(squashfs_inode_cachep, SLAB_KERNEL);
-+ if (!ei)
-+ return NULL;
-+ return &ei->vfs_inode;
-+}
-+
-+
-+static void squashfs_destroy_inode(struct inode *inode)
-+{
-+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
-+}
-+
-+
-+static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
-+{
-+ struct squashfs_inode_info *ei = foo;
-+
-+ if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
-+ SLAB_CTOR_CONSTRUCTOR)
-+ inode_init_once(&ei->vfs_inode);
-+}
-+
-+
-+static int __init init_inodecache(void)
-+{
-+ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
-+ sizeof(struct squashfs_inode_info),
-+ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
-+ init_once, NULL);
-+ if (squashfs_inode_cachep == NULL)
-+ return -ENOMEM;
-+ return 0;
-+}
-+
-+
-+static void destroy_inodecache(void)
-+{
-+ if (kmem_cache_destroy(squashfs_inode_cachep))
-+ printk(KERN_INFO "squashfs_inode_cache: not all structures "
-+ "were freed\n");
-+}
-+
-+
-+module_init(init_squashfs_fs);
-+module_exit(exit_squashfs_fs);
-+MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
-+MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
-+MODULE_LICENSE("GPL");
-diff --new-file -urp linux-2.6.15/fs/squashfs/Makefile linux-2.6.15-squashfs3.0/fs/squashfs/Makefile
---- linux-2.6.15/fs/squashfs/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/fs/squashfs/Makefile 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,7 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
-+
-+obj-$(CONFIG_SQUASHFS) += squashfs.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
-diff --new-file -urp linux-2.6.15/fs/squashfs/squashfs2_0.c linux-2.6.15-squashfs3.0/fs/squashfs/squashfs2_0.c
---- linux-2.6.15/fs/squashfs/squashfs2_0.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/fs/squashfs/squashfs2_0.c 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,758 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs2_0.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
-+static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
-+ struct nameidata *);
-+
-+static struct file_operations squashfs_dir_ops_2 = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir_2
-+};
-+
-+static struct inode_operations squashfs_dir_inode_ops_2 = {
-+ .lookup = squashfs_lookup_2
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static int read_fragment_index_table_2(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index_2,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ unsigned int fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
-+ &msblk->fragment_index_2[i], 1);
-+ msblk->fragment_index_2[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
-+ struct squashfs_fragment_entry_2 fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry_2 sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = ino;
-+ i->i_mtime.tv_sec = sblk->mkfs_time;
-+ i->i_atime.tv_sec = sblk->mkfs_time;
-+ i->i_ctime.tv_sec = sblk->mkfs_time;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_nlink = 1;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget_2(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned int block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ unsigned int ino = SQUASHFS_MK_VFS_INODE(block
-+ - sblk->inode_table_start, offset);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header_2 id, sid;
-+ struct squashfs_base_inode_header_2 *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ struct squashfs_reg_inode_header_2 *inodep = &id.reg;
-+ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
-+ long long frag_blk;
-+ unsigned int frag_size;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location_2(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ i->i_blksize = PAGE_CACHE_SIZE;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %x, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header_2 *inodep = &id.dir;
-+ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header_2 *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header_2 *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header_2 *inodep = &id.dev;
-+ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%x:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index_2 index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index_2 *index = (struct squashfs_dir_index_2 *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index_2),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length;
-+}
-+
-+
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+
-+ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos, SQUASHFS_MK_VFS_INODE(
-+ dirh.start_block, dire->offset),
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (sorted && name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %lld\n", name,
-+ dirh.start_block, dire->offset, ino);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget_2;
-+ msblk->read_fragment_index_table = read_fragment_index_table_2;
-+
-+ sblk->bytes_used = sblk->bytes_used_2;
-+ sblk->uid_start = sblk->uid_start_2;
-+ sblk->guid_start = sblk->guid_start_2;
-+ sblk->inode_table_start = sblk->inode_table_start_2;
-+ sblk->directory_table_start = sblk->directory_table_start_2;
-+ sblk->fragment_table_start = sblk->fragment_table_start_2;
-+
-+ return 1;
-+}
-diff --new-file -urp linux-2.6.15/fs/squashfs/squashfs.h linux-2.6.15-squashfs3.0/fs/squashfs/squashfs.h
---- linux-2.6.15/fs/squashfs/squashfs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/fs/squashfs/squashfs.h 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs.h
-+ */
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#endif
-+
-+#ifdef SQUASHFS_TRACE
-+#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
-+#else
-+#define TRACE(s, args...) {}
-+#endif
-+
-+#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
-+
-+#define SERROR(s, args...) do { \
-+ if (!silent) \
-+ printk(KERN_ERR "SQUASHFS error: "s, ## args);\
-+ } while(0)
-+
-+#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
-+
-+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
-+{
-+ return list_entry(inode, struct squashfs_inode_info, vfs_inode);
-+}
-+
-+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
-+#define SQSH_EXTERN
-+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index);
-+extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset);
-+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment);
-+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length);
-+extern struct address_space_operations squashfs_symlink_aops;
-+extern struct address_space_operations squashfs_aops;
-+extern struct address_space_operations squashfs_aops_4K;
-+extern struct inode_operations squashfs_dir_inode_ops;
-+#else
-+#define SQSH_EXTERN static
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-diff --new-file -urp linux-2.6.15/include/linux/squashfs_fs.h linux-2.6.15-squashfs3.0/include/linux/squashfs_fs.h
---- linux-2.6.15/include/linux/squashfs_fs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/include/linux/squashfs_fs.h 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,911 @@
-+#ifndef SQUASHFS_FS
-+#define SQUASHFS_FS
-+
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs.h
-+ */
-+
-+#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_VMALLOC
-+#define SQUASHFS_ALLOC(a) vmalloc(a)
-+#define SQUASHFS_FREE(a) vfree(a)
-+#else
-+#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL)
-+#define SQUASHFS_FREE(a) kfree(a)
-+#endif
-+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
-+#define SQUASHFS_MAJOR 3
-+#define SQUASHFS_MINOR 0
-+#define SQUASHFS_MAGIC 0x73717368
-+#define SQUASHFS_MAGIC_SWAP 0x68737173
-+#define SQUASHFS_START 0
-+
-+/* size of metadata (inode and directory) blocks */
-+#define SQUASHFS_METADATA_SIZE 8192
-+#define SQUASHFS_METADATA_LOG 13
-+
-+/* default size of data blocks */
-+#define SQUASHFS_FILE_SIZE 65536
-+#define SQUASHFS_FILE_LOG 16
-+
-+#define SQUASHFS_FILE_MAX_SIZE 65536
-+
-+/* Max number of uids and gids */
-+#define SQUASHFS_UIDS 256
-+#define SQUASHFS_GUIDS 255
-+
-+/* Max length of filename (not 255) */
-+#define SQUASHFS_NAME_LEN 256
-+
-+#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
-+#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff)
-+#define SQUASHFS_INVALID_BLK ((long long) -1)
-+#define SQUASHFS_USED_BLK ((long long) -2)
-+
-+/* Filesystem flags */
-+#define SQUASHFS_NOI 0
-+#define SQUASHFS_NOD 1
-+#define SQUASHFS_CHECK 2
-+#define SQUASHFS_NOF 3
-+#define SQUASHFS_NO_FRAG 4
-+#define SQUASHFS_ALWAYS_FRAG 5
-+#define SQUASHFS_DUPLICATE 6
-+
-+#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
-+
-+#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOI)
-+
-+#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOD)
-+
-+#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOF)
-+
-+#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NO_FRAG)
-+
-+#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_ALWAYS_FRAG)
-+
-+#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_DUPLICATE)
-+
-+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_CHECK)
-+
-+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
-+ duplicate_checking) (noi | (nod << 1) | (check_data << 2) \
-+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
-+ (duplicate_checking << 6))
-+
-+/* Max number of types and file types */
-+#define SQUASHFS_DIR_TYPE 1
-+#define SQUASHFS_FILE_TYPE 2
-+#define SQUASHFS_SYMLINK_TYPE 3
-+#define SQUASHFS_BLKDEV_TYPE 4
-+#define SQUASHFS_CHRDEV_TYPE 5
-+#define SQUASHFS_FIFO_TYPE 6
-+#define SQUASHFS_SOCKET_TYPE 7
-+#define SQUASHFS_LDIR_TYPE 8
-+#define SQUASHFS_LREG_TYPE 9
-+
-+/* 1.0 filesystem type definitions */
-+#define SQUASHFS_TYPES 5
-+#define SQUASHFS_IPC_TYPE 0
-+
-+/* Flag whether block is compressed or uncompressed, bit is set if block is
-+ * uncompressed */
-+#define SQUASHFS_COMPRESSED_BIT (1 << 15)
-+
-+#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
-+ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
-+
-+#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
-+
-+#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
-+
-+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
-+
-+#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
-+
-+/*
-+ * Inode number ops. Inodes consist of a compressed block number, and an
-+ * uncompressed offset within that block
-+ */
-+#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
-+
-+#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
-+
-+#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\
-+ << 16) + (B)))
-+
-+/* Compute 32 bit VFS inode number from squashfs inode number */
-+#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \
-+ ((b) >> 2) + 1))
-+/* XXX */
-+
-+/* Translate between VFS mode and squashfs mode */
-+#define SQUASHFS_MODE(a) ((a) & 0xfff)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES(A) (A * sizeof(struct squashfs_fragment_entry))
-+
-+#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\
-+ sizeof(long long))
-+
-+/* cached data constants for filesystem */
-+#define SQUASHFS_CACHED_BLKS 8
-+
-+#define SQUASHFS_MAX_FILE_SIZE_LOG 64
-+
-+#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \
-+ (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
-+
-+#define SQUASHFS_MARKER_BYTE 0xff
-+
-+/* meta index cache */
-+#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
-+#define SQUASHFS_META_ENTRIES 31
-+#define SQUASHFS_META_NUMBER 8
-+#define SQUASHFS_SLOTS 4
-+
-+struct meta_entry {
-+ long long data_block;
-+ unsigned int index_block;
-+ unsigned short offset;
-+ unsigned short pad;
-+};
-+
-+struct meta_index {
-+ unsigned int inode_number;
-+ unsigned int offset;
-+ unsigned short entries;
-+ unsigned short skip;
-+ unsigned short locked;
-+ unsigned short pad;
-+ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES];
-+};
-+
-+
-+/*
-+ * definitions for structures on disk
-+ */
-+
-+typedef long long squashfs_block_t;
-+typedef long long squashfs_inode_t;
-+
-+struct squashfs_super_block {
-+ unsigned int s_magic;
-+ unsigned int inodes;
-+ unsigned int bytes_used_2;
-+ unsigned int uid_start_2;
-+ unsigned int guid_start_2;
-+ unsigned int inode_table_start_2;
-+ unsigned int directory_table_start_2;
-+ unsigned int s_major:16;
-+ unsigned int s_minor:16;
-+ unsigned int block_size_1:16;
-+ unsigned int block_log:16;
-+ unsigned int flags:8;
-+ unsigned int no_uids:8;
-+ unsigned int no_guids:8;
-+ unsigned int mkfs_time /* time of filesystem creation */;
-+ squashfs_inode_t root_inode;
-+ unsigned int block_size;
-+ unsigned int fragments;
-+ unsigned int fragment_table_start_2;
-+ long long bytes_used;
-+ long long uid_start;
-+ long long guid_start;
-+ long long inode_table_start;
-+ long long directory_table_start;
-+ long long fragment_table_start;
-+ long long unused;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_index {
-+ unsigned int index;
-+ unsigned int start_block;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_BASE_INODE_HEADER \
-+ unsigned int inode_type:4; \
-+ unsigned int mode:12; \
-+ unsigned int uid:8; \
-+ unsigned int guid:8; \
-+ unsigned int mtime; \
-+ unsigned int inode_number;
-+
-+struct squashfs_base_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_lreg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ long long file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int parent_inode;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int i_count:16;
-+ unsigned int parent_inode;
-+ struct squashfs_dir_index index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header {
-+ struct squashfs_base_inode_header base;
-+ struct squashfs_dev_inode_header dev;
-+ struct squashfs_symlink_inode_header symlink;
-+ struct squashfs_reg_inode_header reg;
-+ struct squashfs_lreg_inode_header lreg;
-+ struct squashfs_dir_inode_header dir;
-+ struct squashfs_ldir_inode_header ldir;
-+ struct squashfs_ipc_inode_header ipc;
-+};
-+
-+struct squashfs_dir_entry {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ int inode_number:16;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_header {
-+ unsigned int count:8;
-+ unsigned int start_block;
-+ unsigned int inode_number;
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry {
-+ long long start_block;
-+ unsigned int size;
-+ unsigned int unused;
-+} __attribute__ ((packed));
-+
-+extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
-+extern int squashfs_uncompress_init(void);
-+extern int squashfs_uncompress_exit(void);
-+
-+/*
-+ * macros to convert each packed bitfield structure from little endian to big
-+ * endian and vice versa. These are needed when creating or using a filesystem
-+ * on a machine with different byte ordering to the target architecture.
-+ *
-+ */
-+
-+#define SQUASHFS_SWAP_START \
-+ int bits;\
-+ int b_pos;\
-+ unsigned long long val;\
-+ unsigned char *s;\
-+ unsigned char *d;
-+
-+#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
-+ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
-+ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
-+ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
-+ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
-+ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
-+ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
-+ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
-+ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
-+ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
-+ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
-+ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
-+ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
-+ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
-+ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
-+ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
-+ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
-+ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
-+ SQUASHFS_SWAP((s)->unused, d, 888, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header))\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dev_inode_header)); \
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_reg_inode_header));\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_lreg_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 224, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 147, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 155, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
-+ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 2);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 16)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_INTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 4);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 32)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 64)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * bits / 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ bits)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+
-+struct squashfs_base_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int type:4;
-+ unsigned int offset:4;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
-+ SQUASHFS_SWAP((s)->guid, d, 20, 4);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header_1));\
-+ SQUASHFS_SWAP((s)->type, d, 24, 4);\
-+ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_1));\
-+ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_1));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_1));\
-+ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_1));\
-+ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
-+}
-+
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+
-+struct squashfs_dir_index_2 {
-+ unsigned int index:27;
-+ unsigned int start_block:29;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_base_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+ unsigned int i_count:16;
-+ struct squashfs_dir_index_2 index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header_2 {
-+ struct squashfs_base_inode_header_2 base;
-+ struct squashfs_dev_inode_header_2 dev;
-+ struct squashfs_symlink_inode_header_2 symlink;
-+ struct squashfs_reg_inode_header_2 reg;
-+ struct squashfs_dir_inode_header_2 dir;
-+ struct squashfs_ldir_inode_header_2 ldir;
-+ struct squashfs_ipc_inode_header_2 ipc;
-+};
-+
-+struct squashfs_dir_header_2 {
-+ unsigned int count:8;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_entry_2 {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry_2 {
-+ unsigned int start_block;
-+ unsigned int size;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_2)); \
-+ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_2));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_2));\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
-+ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 27);\
-+ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
-+ SQUASHFS_SWAP((s)->size, d, 56, 8);\
-+}
-+#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 32, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2))
-+
-+#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
-+ sizeof(int))
-+
-+#endif
-+
-+#ifdef __KERNEL__
-+
-+/*
-+ * macros used to swap each structure entry, taking into account
-+ * bitfields and different bitfield placing conventions on differing
-+ * architectures
-+ */
-+
-+#include <asm/byteorder.h>
-+
-+#ifdef __BIG_ENDIAN
-+ /* convert from little endian to big endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, b_pos)
-+#else
-+ /* convert from big endian to little endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, 64 - tbits - b_pos)
-+#endif
-+
-+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
-+ b_pos = pos % 8;\
-+ val = 0;\
-+ s = (unsigned char *)p + (pos / 8);\
-+ d = ((unsigned char *) &val) + 7;\
-+ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
-+ *d-- = *s++;\
-+ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
-+}
-+
-+#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
-+
-+#endif
-+#endif
-diff --new-file -urp linux-2.6.15/include/linux/squashfs_fs_i.h linux-2.6.15-squashfs3.0/include/linux/squashfs_fs_i.h
---- linux-2.6.15/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/include/linux/squashfs_fs_i.h 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,45 @@
-+#ifndef SQUASHFS_FS_I
-+#define SQUASHFS_FS_I
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_i.h
-+ */
-+
-+struct squashfs_inode_info {
-+ long long start_block;
-+ unsigned int offset;
-+ union {
-+ struct {
-+ long long fragment_start_block;
-+ unsigned int fragment_size;
-+ unsigned int fragment_offset;
-+ long long block_list_start;
-+ } s1;
-+ struct {
-+ long long directory_index_start;
-+ unsigned int directory_index_offset;
-+ unsigned int directory_index_count;
-+ unsigned int parent_inode;
-+ } s2;
-+ } u;
-+ struct inode vfs_inode;
-+};
-+#endif
-diff --new-file -urp linux-2.6.15/include/linux/squashfs_fs_sb.h linux-2.6.15-squashfs3.0/include/linux/squashfs_fs_sb.h
---- linux-2.6.15/include/linux/squashfs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/include/linux/squashfs_fs_sb.h 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,74 @@
-+#ifndef SQUASHFS_FS_SB
-+#define SQUASHFS_FS_SB
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_sb.h
-+ */
-+
-+#include <linux/squashfs_fs.h>
-+
-+struct squashfs_cache {
-+ long long block;
-+ int length;
-+ long long next_index;
-+ char *data;
-+};
-+
-+struct squashfs_fragment_cache {
-+ long long block;
-+ int length;
-+ unsigned int locked;
-+ char *data;
-+};
-+
-+struct squashfs_sb_info {
-+ struct squashfs_super_block sblk;
-+ int devblksize;
-+ int devblksize_log2;
-+ int swap;
-+ struct squashfs_cache *block_cache;
-+ struct squashfs_fragment_cache *fragment;
-+ int next_cache;
-+ int next_fragment;
-+ int next_meta_index;
-+ unsigned int *uid;
-+ unsigned int *guid;
-+ long long *fragment_index;
-+ unsigned int *fragment_index_2;
-+ unsigned int read_size;
-+ char *read_data;
-+ char *read_page;
-+ struct semaphore read_data_mutex;
-+ struct semaphore read_page_mutex;
-+ struct semaphore block_cache_mutex;
-+ struct semaphore fragment_mutex;
-+ struct semaphore meta_index_mutex;
-+ wait_queue_head_t waitq;
-+ wait_queue_head_t fragment_wait_queue;
-+ struct meta_index *meta_index;
-+ struct inode *(*iget)(struct super_block *s, squashfs_inode_t \
-+ inode);
-+ long long (*read_blocklist)(struct inode *inode, int \
-+ index, int readahead_blks, char *block_list, \
-+ unsigned short **block_p, unsigned int *bsize);
-+ int (*read_fragment_index_table)(struct super_block *s);
-+};
-+#endif
-diff --new-file -urp linux-2.6.15/init/do_mounts_rd.c linux-2.6.15-squashfs3.0/init/do_mounts_rd.c
---- linux-2.6.15/init/do_mounts_rd.c 2006-03-01 22:37:27.000000000 +0000
-+++ linux-2.6.15-squashfs3.0/init/do_mounts_rd.c 2006-03-07 21:12:37.000000000 +0000
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/cramfs_fs.h>
-+#include <linux/squashfs_fs.h>
- #include <linux/initrd.h>
- #include <linux/string.h>
-
-@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
- * numbers could not be found.
- *
- * We currently check for the following magic numbers:
-+ * squashfs
- * minix
- * ext2
- * romfs
-@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
- struct ext2_super_block *ext2sb;
- struct romfs_super_block *romfsb;
- struct cramfs_super *cramfsb;
-+ struct squashfs_super_block *squashfsb;
- int nblocks = -1;
- unsigned char *buf;
-
-@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
- ext2sb = (struct ext2_super_block *) buf;
- romfsb = (struct romfs_super_block *) buf;
- cramfsb = (struct cramfs_super *) buf;
-+ squashfsb = (struct squashfs_super_block *) buf;
- memset(buf, 0xe5, size);
-
- /*
-@@ -101,6 +105,15 @@ identify_ramdisk_image(int fd, int start
- goto done;
- }
-
-+ /* squashfs is at block zero too */
-+ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
-+ printk(KERN_NOTICE
-+ "RAMDISK: squashfs filesystem found at block %d\n",
-+ start_block);
-+ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
-+ goto done;
-+ }
-+
- /*
- * Read block 1 to test for minix and ext2 superblock
- */
diff --git a/packages/linux/linux-rp-2.6.17/00-hostap.patch b/packages/linux/linux-rp-2.6.17/00-hostap.patch
deleted file mode 100644
index 20432b404a..0000000000
--- a/packages/linux/linux-rp-2.6.17/00-hostap.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Platform: Sharp Zaurus C760 running 2.6.16 and pcmciautils 013.
-
-root@c7x0:~# pccardctl ident
-Socket 0:
- product info: "Pretec", "CompactWLAN Card 802.11b", "2.5"
- manfid: 0x0156, 0x0002
- function: 6 (network)
-
-==========================================================================
-From: Jochen Friedrich
-
-Yet another card known to work OK with hostap_cs:
-
-# pccardctl ident
-Socket 0:
- no product info available
-Socket 1:
- product info: "U.S. Robotics", "IEEE 802.11b PC-CARD", "Version 01.02", ""
- manfid: 0x0156, 0x0002
- function: 6 (network)
-
-==========================================================================
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
- drivers/net/wireless/hostap/hostap_cs.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-Index: linux/drivers/net/wireless/hostap/hostap_cs.c
-===================================================================
---- linux.orig/drivers/net/wireless/hostap/hostap_cs.c 2006-05-17 10:23:00.000000000 +0200
-+++ linux/drivers/net/wireless/hostap/hostap_cs.c 2006-05-17 10:25:45.000000000 +0200
-@@ -923,6 +923,12 @@
- PCMCIA_DEVICE_PROD_ID12(
- "ZoomAir 11Mbps High", "Rate wireless Networking",
- 0x273fe3db, 0x32a1eaee),
-+ PCMCIA_DEVICE_PROD_ID123(
-+ "Pretec", "CompactWLAN Card 802.11b", "2.5",
-+ 0x1cadd3e5, 0xe697636c, 0x7a5bfcf1),
-+ PCMCIA_DEVICE_PROD_ID123(
-+ "U.S. Robotics", "IEEE 802.11b PC-CARD", "Version 01.02",
-+ 0xc7b8df9d, 0x1700d087, 0x4b74baa0),
- PCMCIA_DEVICE_NULL
- };
- MODULE_DEVICE_TABLE(pcmcia, hostap_cs_ids);
diff --git a/packages/linux/linux-rp-2.6.17/10-pcnet.patch b/packages/linux/linux-rp-2.6.17/10-pcnet.patch
deleted file mode 100644
index 2e1966e837..0000000000
--- a/packages/linux/linux-rp-2.6.17/10-pcnet.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-
-From: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
-Add TRENDnet TE-CF100 ethernet adapter to pcnet_cs list.
-
-product info: "Fast Ethernet", "CF Size PC Card", "1.0", ""
- manfid: 0x0149, 0xc1ab
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
- drivers/net/pcmcia/pcnet_cs.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-Index: netdev-2.6/drivers/net/pcmcia/pcnet_cs.c
-===================================================================
---- netdev-2.6.orig/drivers/net/pcmcia/pcnet_cs.c 2006-05-18 11:06:43.294022480 +0200
-+++ netdev-2.6/drivers/net/pcmcia/pcnet_cs.c 2006-05-18 11:10:31.548322552 +0200
-@@ -1768,6 +1768,8 @@
- PCMCIA_DEVICE_CIS_PROD_ID12("NDC", "Ethernet", 0x01c43ae1, 0x00b2e941, "NE2K.cis"),
- PCMCIA_DEVICE_CIS_PROD_ID12("PMX ", "PE-200", 0x34f3f1c8, 0x10b59f8c, "PE-200.cis"),
- PCMCIA_DEVICE_CIS_PROD_ID12("TAMARACK", "Ethernet", 0xcf434fba, 0x00b2e941, "tamarack.cis"),
-+ PCMCIA_DEVICE_PROD_ID123("Fast Ethernet", "CF Size PC Card", "1.0",
-+ 0xb4be14e3, 0x43ac239b, 0x0877b627),
- PCMCIA_DEVICE_NULL
- };
- MODULE_DEVICE_TABLE(pcmcia, pcnet_ids);
-
diff --git a/packages/linux/linux-rp-2.6.17/add-oz-release-string.patch b/packages/linux/linux-rp-2.6.17/add-oz-release-string.patch
deleted file mode 100644
index 22a6fd3943..0000000000
--- a/packages/linux/linux-rp-2.6.17/add-oz-release-string.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- linux-2.6.11-rc1/init/version.c~add-oz-release-string
-+++ linux-2.6.11-rc1/init/version.c
-@@ -29,5 +29,5 @@
- EXPORT_SYMBOL(system_utsname);
-
- const char linux_banner[] =
-- "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
-+ "Linux version " UTS_RELEASE OPENZAURUS_RELEASE " (" LINUX_COMPILE_BY "@"
- LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
---- linux-2.6.11-rc1/Makefile~add-oz-release-string
-+++ linux-2.6.11-rc1/Makefile
-@@ -827,6 +827,7 @@
- exit 1; \
- fi; \
- (echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"; \
-+ echo \#define OPENZAURUS_RELEASE \"$(OPENZAURUS_RELEASE)\"; \
- echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)`; \
- echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))'; \
- )
diff --git a/packages/linux/linux-rp-2.6.17/asoc-v0.12.4_2.6.17.patch b/packages/linux/linux-rp-2.6.17/asoc-v0.12.4_2.6.17.patch
deleted file mode 100644
index 4f9672299b..0000000000
--- a/packages/linux/linux-rp-2.6.17/asoc-v0.12.4_2.6.17.patch
+++ /dev/null
@@ -1,31713 +0,0 @@
-Index: linux-2.6-pxa-new/Documentation/sound/alsa/soc/DAI.txt
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/Documentation/sound/alsa/soc/DAI.txt
-@@ -0,0 +1,546 @@
-+ASoC currently supports the three main Digital Audio Interfaces (DAI) found on
-+SoC controllers and portable audio CODECS today, namely AC97, I2S and PCM.
-+
-+
-+AC97
-+====
-+
-+ AC97 is a five wire interface commonly found on many PC sound cards. It is
-+now also popular in many portable devices. This DAI has a reset line and time
-+multiplexes its data on its SDATA_OUT (playback) and SDATA_IN (capture) lines.
-+The bit clock (BCLK) is always driven by the CODEC (usually 12.288MHz) and the
-+frame (FRAME) (usually 48kHz) is always driven by the controller. Each AC97
-+frame is 21uS long and is divided into 13 time slots.
-+
-+The AC97 specification can be found at :-
-+http://www.intel.com/design/chipsets/audio/ac97_r23.pdf
-+
-+
-+I2S
-+===
-+
-+ I2S is a common 4 wire DAI used in HiFi, STB and portable devices. The Tx and
-+Rx lines are used for audio transmision, whilst the bit clock (BCLK) and
-+left/right clock (LRC) synchronise the link. I2S is flexible in that either the
-+controller or CODEC can drive (master) the BCLK and LRC clock lines. Bit clock
-+usually varies depending on the sample rate and the master system clock
-+(SYSCLK). LRCLK is the same as the sample rate. A few devices support separate
-+ADC and DAC LRCLK's, this allows for similtanious capture and playback at
-+different sample rates.
-+
-+I2S has several different operating modes:-
-+
-+ o I2S - MSB is transmitted on the falling edge of the first BCLK after LRC
-+ transition.
-+
-+ o Left Justified - MSB is transmitted on transition of LRC.
-+
-+ o Right Justified - MSB is transmitted sample size BCLK's before LRC
-+ transition.
-+
-+PCM
-+===
-+
-+PCM is another 4 wire interface, very similar to I2S, that can support a more
-+flexible protocol. It has bit clock (BCLK) and sync (SYNC) lines that are used
-+to synchronise the link whilst the Tx and Rx lines are used to transmit and
-+receive the audio data. Bit clock usually varies depending on sample rate
-+whilst sync runs at the sample rate. PCM also supports Time Division
-+Multiplexing (TDM) in that several devices can use the bus similtaniuosly (This
-+is sometimes referred to as network mode).
-+
-+Common PCM operating modes:-
-+
-+ o Mode A - MSB is transmitted on falling edge of first BCLK after FRAME/SYNC.
-+
-+ o Mode B - MSB is transmitted on rising edge of FRAME/SYNC.
-+
-+
-+ASoC DAI Configuration
-+======================
-+
-+Every CODEC DAI and SoC DAI must have their capabilities defined in order to
-+be configured together at runtime when the audio and clocking parameters are
-+known. This is achieved by creating an array of struct snd_soc_hw_mode in the
-+the CODEC and SoC interface drivers. Each element in the array describes a DAI
-+mode and each mode is usually based upon the DAI system clock to sample rate
-+ratio (FS).
-+
-+i.e. 48k sample rate @ 256 FS = sytem clock of 12.288 MHz
-+ 48000 * 256 = 12288000
-+
-+The CPU and Codec DAI modes are then ANDed together at runtime to determine the
-+rutime DAI configuration for both the Codec and CPU.
-+
-+When creating a new codec or SoC DAI it's probably best to start of with a few
-+sample rates first and then test your interface.
-+
-+struct snd_soc_dai_mode is defined (in soc.h) as:-
-+
-+/* SoC DAI mode */
-+struct snd_soc_dai_mode {
-+ u16 fmt; /* SND_SOC_DAIFMT_* */
-+ u16 tdm; /* SND_SOC_HWTDM_* */
-+ u64 pcmfmt; /* SNDRV_PCM_FMTBIT_* */
-+ u16 pcmrate; /* SND_SOC_HWRATE_* */
-+ u16 pcmdir:2; /* SND_SOC_HWDIR_* */
-+ u16 flags:8; /* hw flags */
-+ u16 fs; /* mclk to rate divider */
-+ u64 bfs; /* mclk to bclk dividers */
-+ unsigned long priv; /* private mode data */
-+};
-+
-+fmt:
-+----
-+This field defines the DAI mode hardware format (e.g. I2S settings) and
-+supports the following settings:-
-+
-+ 1) hardware DAI formats
-+
-+#define SND_SOC_DAIFMT_I2S (1 << 0) /* I2S mode */
-+#define SND_SOC_DAIFMT_RIGHT_J (1 << 1) /* Right justified mode */
-+#define SND_SOC_DAIFMT_LEFT_J (1 << 2) /* Left Justified mode */
-+#define SND_SOC_DAIFMT_DSP_A (1 << 3) /* L data msb after FRM */
-+#define SND_SOC_DAIFMT_DSP_B (1 << 4) /* L data msb during FRM */
-+#define SND_SOC_DAIFMT_AC97 (1 << 5) /* AC97 */
-+
-+ 2) hw DAI signal inversions
-+
-+#define SND_SOC_DAIFMT_NB_NF (1 << 8) /* normal bit clock + frame */
-+#define SND_SOC_DAIFMT_NB_IF (1 << 9) /* normal bclk + inv frm */
-+#define SND_SOC_DAIFMT_IB_NF (1 << 10) /* invert bclk + nor frm */
-+#define SND_SOC_DAIFMT_IB_IF (1 << 11) /* invert bclk + frm */
-+
-+ 3) hw clock masters
-+ This is wrt the codec, the inverse is true for the interface
-+ i.e. if the codec is clk and frm master then the interface is
-+ clk and frame slave.
-+
-+#define SND_SOC_DAIFMT_CBM_CFM (1 << 12) /* codec clk & frm master */
-+#define SND_SOC_DAIFMT_CBS_CFM (1 << 13) /* codec clk slave & frm master */
-+#define SND_SOC_DAIFMT_CBM_CFS (1 << 14) /* codec clk master & frame slave */
-+#define SND_SOC_DAIFMT_CBS_CFS (1 << 15) /* codec clk & frm slave */
-+
-+At least one option from each section must be selected. Multiple selections are
-+also supported e.g.
-+
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_RIGHT_J | \
-+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_NB_IF | SND_SOC_DAIFMT_IB_NF | \
-+ SND_SOC_DAIFMT_IB_IF
-+
-+
-+tdm:
-+------
-+This field defines the Time Division Multiplexing left and right word
-+positions for the DAI mode if applicable. Set to SND_SOC_DAITDM_LRDW(0,0) for
-+no TDM.
-+
-+
-+pcmfmt:
-+---------
-+The hardware PCM format. This describes the PCM formats supported by the DAI
-+mode e.g.
-+
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE | SNDRV_PCM_FORMAT_S20_3LE | \
-+ SNDRV_PCM_FORMAT_S24_3LE
-+
-+pcmrate:
-+----------
-+The PCM sample rates supported by the DAI mode. e.g.
-+
-+ .pcmrate = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000
-+
-+
-+pcmdir:
-+---------
-+The stream directions supported by this mode. e.g. playback and capture
-+
-+
-+flags:
-+--------
-+The DAI hardware flags supported by the mode.
-+
-+/* use bfs mclk divider mode (BCLK = MCLK / x) */
-+#define SND_SOC_DAI_BFS_DIV 0x1
-+/* use bfs rate mulitplier (BCLK = RATE * x)*/
-+#define SND_SOC_DAI_BFS_RATE 0x2
-+/* use bfs rcw multiplier (BCLK = RATE * CHN * WORD SIZE) */
-+#define SND_SOC_DAI_BFS_RCW 0x4
-+/* capture and playback can use different clocks */
-+#define SND_SOC_DAI_ASYNC 0x8
-+
-+NOTE: Bitclock division and mulitiplication modes can be safely matched by the
-+core logic.
-+
-+
-+fs:
-+-----
-+The FS supported by this DAI mode FS is the ratio between the system clock and
-+the sample rate. See above
-+
-+bfs:
-+------
-+BFS is the ratio of BCLK to MCLK or the ratio of BCLK to sample rate (this
-+depends on the codec or CPU DAI).
-+
-+The BFS supported by the DAI mode. This can either be the ratio between the
-+bitclock (BCLK) and the sample rate OR the ratio between the system clock and
-+the sample rate. Depends on the flags above.
-+
-+priv:
-+-----
-+private codec mode data.
-+
-+
-+
-+Examples
-+========
-+
-+Note that Codec DAI and CPU DAI examples are interchangeable in these examples
-+as long as the bus master is reversed. i.e.
-+
-+ SND_SOC_DAIFMT_CBM_CFM would become SND_SOC_DAIFMT_CBS_CFS
-+ and vice versa.
-+
-+This applies to all SND_SOC_DAIFMT_CB*_CF*.
-+
-+Example 1
-+---------
-+
-+Simple codec that only runs at 8k & 48k @ 256FS in master mode, can generate a
-+BCLK of either MCLK/2 or MCLK/4.
-+
-+ /* codec master */
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(2) | SND_SOC_FSBD(4),
-+ }
-+
-+
-+Example 2
-+---------
-+Simple codec that only runs at 8k & 48k @ 256FS in master mode, can generate a
-+BCLK of either Rate * 32 or Rate * 64.
-+
-+ /* codec master */
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 32,
-+ },
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 64,
-+ },
-+
-+
-+Example 3
-+---------
-+Codec that runs at 8k & 48k @ 256FS in master mode, can generate a BCLK that
-+is a multiple of Rate * channels * word size. (RCW) i.e.
-+
-+ BCLK = 8000 * 2 * 16 (8k, stereo, 16bit)
-+ = 256kHz
-+
-+This codecs supports a RCW multiple of 1,2
-+
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_RCW,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBW(1) | SND_SOC_FSBW(2),
-+ }
-+
-+
-+Example 4
-+---------
-+Codec that only runs at 8k & 48k @ 256FS in master mode, can generate a
-+BCLK of either Rate * 32 or Rate * 64. Codec can also run in slave mode as long
-+as BCLK is rate * 32 or rate * 64.
-+
-+ /* codec master */
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 32,
-+ },
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 64,
-+ },
-+
-+ /* codec slave */
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmdir = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = 32,
-+ },
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmdir = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = 64,
-+ },
-+
-+
-+Example 5
-+---------
-+Codec that only runs at 8k, 16k, 32k, 48k, 96k @ 128FS, 192FS & 256FS in master
-+mode and can generate a BCLK of MCLK / (1,2,4,8,16). Codec can also run in slave
-+mode as and does not care about FS or BCLK (as long as there is enough bandwidth).
-+
-+ #define CODEC_FSB \
-+ (SND_SOC_FSBD(1) | SND_SOC_FSBD(2) | SND_SOC_FSBD(4) | \
-+ SND_SOC_FSBD(8) | SND_SOC_FSBD(16))
-+
-+ #define CODEC_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_32000 |\
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000)
-+
-+ /* codec master @ 128, 192 & 256 FS */
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = CODEC_RATES,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 128,
-+ .bfs = CODEC_FSB,
-+ },
-+
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = CODEC_RATES,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 192,
-+ .bfs = CODEC_FSB
-+ },
-+
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = CODEC_RATES,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = CODEC_FSB,
-+ },
-+
-+ /* codec slave */
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = CODEC_RATES,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+
-+
-+Example 6
-+---------
-+Codec that only runs at 8k, 44.1k, 48k @ different FS in master mode (for use
-+with a fixed MCLK) and can generate a BCLK of MCLK / (1,2,4,8,16).
-+Codec can also run in slave mode as and does not care about FS or BCLK (as long
-+as there is enough bandwidth). Codec can support 16, 24 and 32 bit PCM sample
-+sizes.
-+
-+ #define CODEC_FSB \
-+ (SND_SOC_FSBD(1) | SND_SOC_FSBD(2) | SND_SOC_FSBD(4) | \
-+ SND_SOC_FSBD(8) | SND_SOC_FSBD(16))
-+
-+ #define CODEC_PCM_FORMATS \
-+ (SNDRV_PCM_FORMAT_S16_LE | SNDRV_PCM_FORMAT_S20_3LE | \
-+ SNDRV_PCM_FORMAT_S24_3LE | SNDRV_PCM_FORMAT_S24_LE | SNDRV_PCM_FORMAT_S32_LE)
-+
-+ /* codec master */
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1536,
-+ .bfs = CODEC_FSB,
-+ },
-+
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 272,
-+ .bfs = CODEC_FSB,
-+ },
-+
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = CODEC_FSB,
-+ },
-+
-+ /* codec slave */
-+ {
-+ .fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FORMAT_S16_LE,
-+ .pcmrate = CODEC_RATES,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+
-+
-+Example 7
-+---------
-+AC97 Codec that does not support VRA (i.e only runs at 48k).
-+
-+ #define AC97_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+ #define AC97_PCM_FORMATS \
-+ (SNDRV_PCM_FORMAT_S16_LE | SNDRV_PCM_FORMAT_S18_3LE | \
-+ SNDRV_PCM_FORMAT_S20_3LE)
-+
-+ /* AC97 with no VRA */
-+ {
-+ .pcmfmt = AC97_PCM_FORMATS,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ }
-+
-+
-+Example 8
-+---------
-+
-+CPU DAI that supports 8k - 48k @ 256FS and BCLK = MCLK / 4 in master mode.
-+Slave mode (CPU DAI is FRAME master) supports 8k - 96k at any FS as long as
-+BCLK = 64 * rate. (Intel XScale I2S controller).
-+
-+ #define PXA_I2S_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF)
-+
-+ #define PXA_I2S_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+ #define PXA_I2S_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
-+
-+ /* priv is divider */
-+ static struct snd_soc_dai_mode pxa2xx_i2s_modes[] = {
-+ /* pxa2xx I2S frame and clock master modes */
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0x48,
-+ },
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0x34,
-+ },
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0x24,
-+ },
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0x1a,
-+ },
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0xd,
-+ },
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0xc,
-+ },
-+
-+ /* pxa2xx I2S frame master and clock slave mode */
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = PXA_I2S_RATES,
-+ .pcmdir = PXA_I2S_DIR,
-+ .fs = SND_SOC_FS_ALL,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .bfs = 64,
-+ .priv = 0x48,
-+ },
-+};
-Index: linux-2.6-pxa-new/Documentation/sound/alsa/soc/clocking.txt
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/Documentation/sound/alsa/soc/clocking.txt
-@@ -0,0 +1,314 @@
-+Audio Clocking
-+==============
-+
-+This text describes the audio clocking terms in ASoC and digital audio in
-+general. Note: Audio clocking can be complex !
-+
-+
-+Master Clock
-+------------
-+
-+Every audio subsystem is driven by a master clock (sometimes refered to as MCLK
-+or SYSCLK). This audio master clock can be derived from a number of sources
-+(e.g. crystal, PLL, CPU clock) and is responsible for producing the correct
-+audio playback and capture sample rates.
-+
-+Some master clocks (e.g. PLL's and CPU based clocks) are configuarble in that
-+their speed can be altered by software (depending on the system use and to save
-+power). Other master clocks are fixed at at set frequency (i.e. crystals).
-+
-+
-+DAI Clocks
-+----------
-+The Digital Audio Interface is usually driven by a Bit Clock (often referred to
-+as BCLK). This clock is used to drive the digital audio data across the link
-+between the codec and CPU.
-+
-+The DAI also has a frame clock to signal the start of each audio frame. This
-+clock is sometimes referred to as LRC (left right clock) or FRAME. This clock
-+runs at exactly the sample rate (LRC = Rate).
-+
-+Bit Clock can be generated as follows:-
-+
-+BCLK = MCLK / x
-+
-+ or
-+
-+BCLK = LRC * x
-+
-+ or
-+
-+BCLK = LRC * Channels * Word Size
-+
-+This relationship depends on the codec or SoC CPU in particular. ASoC can quite
-+easily match BCLK generated by division (SND_SOC_DAI_BFS_DIV) with BCLK by
-+multiplication (SND_SOC_DAI_BFS_RATE) or BCLK generated by
-+Rate * Channels * Word size (RCW or SND_SOC_DAI_BFS_RCW).
-+
-+
-+ASoC Clocking
-+-------------
-+
-+The ASoC core determines the clocking for each particular configuration at
-+runtime. This is to allow for dynamic audio clocking wereby the audio clock is
-+variable and depends on the system state or device usage scenario. i.e. a voice
-+call requires slower clocks (and hence less power) than MP3 playback.
-+
-+ASoC will call the config_sysclock() function for the target machine during the
-+audio parameters configuration. The function is responsible for then clocking
-+the machine audio subsytem and returning the audio clock speed to the core.
-+This function should also call the codec and cpu DAI clock_config() functions
-+to configure their respective internal clocking if required.
-+
-+
-+ASoC Clocking Control Flow
-+--------------------------
-+
-+The ASoC core will call the machine drivers config_sysclock() when most of the
-+DAI capabilities are known. The machine driver is then responsible for calling
-+the codec and/or CPU DAI drivers with the selected capabilities and the current
-+MCLK. Note that the machine driver is also resonsible for setting the MCLK (and
-+enabling it).
-+
-+ (1) Match Codec and CPU DAI capabilities. At this point we have
-+ matched the majority of the DAI fields and now need to make sure this
-+ mode is currently clockable.
-+
-+ (2) machine->config_sysclk() is now called with the matched DAI FS, sample
-+ rate and BCLK master. This function then gets/sets the current audio
-+ clock (depening on usage) and calls the codec and CPUI DAI drivers with
-+ the FS, rate, BCLK master and MCLK.
-+
-+ (3) Codec/CPU DAI config_sysclock(). This function checks that the FS, rate,
-+ BCLK master and MCLK are acceptable for the codec or CPU DAI. It also
-+ sets the DAI internal state to work with said clocks.
-+
-+The config_sysclk() functions for CPU, codec and machine should return the MCLK
-+on success and 0 on failure.
-+
-+
-+Examples (b = BCLK, l = LRC)
-+============================
-+
-+Example 1
-+---------
-+
-+Simple codec that only runs at 48k @ 256FS in master mode.
-+
-+CPU only runs as slave DAI, however it generates a variable MCLK.
-+
-+ -------- ---------
-+ | | <----mclk--- | |
-+ | Codec |b -----------> | CPU |
-+ | |l -----------> | |
-+ | | | |
-+ -------- ---------
-+
-+The codec driver has the following config_sysclock()
-+
-+ static unsigned int config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+ {
-+ /* make sure clock is 256 * rate */
-+ if(info->rate << 8 == clk) {
-+ dai->mclk = clk;
-+ return clk;
-+ }
-+
-+ return 0;
-+ }
-+
-+The CPU I2S DAI driver has the following config_sysclk()
-+
-+ static unsigned int config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+ {
-+ /* can we support this clk */
-+ if(set_audio_clk(clk) < 0)
-+ return -EINVAL;
-+
-+ dai->mclk = clk;
-+ return dai->clk;
-+ }
-+
-+The machine driver config_sysclk() in this example is as follows:-
-+
-+ unsigned int machine_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+ {
-+ int clk = info->rate * info->fs;
-+
-+ /* check that CPU can deliver clock */
-+ if(rtd->cpu_dai->config_sysclk(rtd->cpu_dai, info, clk) < 0)
-+ return -EINVAL;
-+
-+ /* can codec work with this clock */
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info, clk);
-+ }
-+
-+
-+Example 2
-+---------
-+
-+Codec that can master at 8k and 48k at various FS (and hence supports a fixed
-+set of input MCLK's) and can also be slave at various FS .
-+
-+The CPU can master at 8k and 48k @256 FS and can be slave at any FS.
-+
-+MCLK is a 12.288MHz crystal on this machine.
-+
-+ -------- ---------
-+ | | <---xtal---> | |
-+ | Codec |b <----------> | CPU |
-+ | |l <----------> | |
-+ | | | |
-+ -------- ---------
-+
-+
-+The codec driver has the following config_sysclock()
-+
-+ /* supported input clocks */
-+ const static int hifi_clks[] = {11289600, 12000000, 12288000,
-+ 16934400, 18432000};
-+
-+ static unsigned int config_hsysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+ {
-+ int i;
-+
-+ /* is clk supported */
-+ for(i = 0; i < ARRAY_SIZE(hifi_clks); i++) {
-+ if(clk == hifi_clks[i]) {
-+ dai->mclk = clk;
-+ return clk;
-+ }
-+ }
-+
-+ /* this clk is not supported */
-+ return 0;
-+ }
-+
-+The CPU I2S DAI driver has the following config_sysclk()
-+
-+ static unsigned int config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+ {
-+ /* are we master or slave */
-+ if (info->bclk_master &
-+ (SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS)) {
-+
-+ /* we can only master @ 256FS */
-+ if(info->rate << 8 == clk) {
-+ dai->mclk = clk;
-+ return dai->mclk;
-+ }
-+ } else {
-+ /* slave we can run at any FS */
-+ dai->mclk = clk;
-+ return dai->mclk;
-+ }
-+
-+ /* not supported */
-+ return dai->clk;
-+ }
-+
-+The machine driver config_sysclk() in this example is as follows:-
-+
-+ unsigned int machine_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+ {
-+ int clk = 12288000; /* 12.288MHz */
-+
-+ /* who's driving the link */
-+ if (info->bclk_master &
-+ (SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS)) {
-+ /* codec master */
-+
-+ /* check that CPU can work with clock */
-+ if(rtd->cpu_dai->config_sysclk(rtd->cpu_dai, info, clk) < 0)
-+ return -EINVAL;
-+
-+ /* can codec work with this clock */
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info, clk);
-+ } else {
-+ /* cpu master */
-+
-+ /* check that codec can work with clock */
-+ if(rtd->codec_dai->config_sysclk(rtd->codec_dai, info, clk) < 0)
-+ return -EINVAL;
-+
-+ /* can CPU work with this clock */
-+ return rtd->cpu_dai->config_sysclk(rtd->cpu_dai, info, clk);
-+ }
-+ }
-+
-+
-+
-+Example 3
-+---------
-+
-+Codec that masters at 8k ... 48k @256 FS. Codec can also be slave and
-+doesn't care about FS. The codec has an internal PLL and dividers to generate
-+the necessary internal clocks (for 256FS).
-+
-+CPU can only be slave and doesn't care about FS.
-+
-+MCLK is a non controllable 13MHz clock from the CPU.
-+
-+
-+ -------- ---------
-+ | | <----mclk--- | |
-+ | Codec |b <----------> | CPU |
-+ | |l <----------> | |
-+ | | | |
-+ -------- ---------
-+
-+The codec driver has the following config_sysclock()
-+
-+ /* valid PCM clock dividers * 2 */
-+ static int pcm_divs[] = {2, 6, 11, 4, 8, 12, 16};
-+
-+ static unsigned int config_vsysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+ {
-+ int i, j, best_clk = info->fs * info->rate;
-+
-+ /* can we run at this clk without the PLL ? */
-+ for (i = 0; i < ARRAY_SIZE(pcm_divs); i++) {
-+ if ((best_clk >> 1) * pcm_divs[i] == clk) {
-+ dai->pll_in = 0;
-+ dai->clk_div = pcm_divs[i];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+
-+ /* now check for PLL support */
-+ for (i = 0; i < ARRAY_SIZE(pll_div); i++) {
-+ if (pll_div[i].pll_in == clk) {
-+ for (j = 0; j < ARRAY_SIZE(pcm_divs); j++) {
-+ if (pll_div[i].pll_out == pcm_divs[j] * (best_clk >> 1)) {
-+ dai->pll_in = clk;
-+ dai->pll_out = pll_div[i].pll_out;
-+ dai->clk_div = pcm_divs[j];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+ }
-+ }
-+
-+ /* this clk is not supported */
-+ return 0;
-+ }
-+
-+
-+The CPU I2S DAI driver has the does not need a config_sysclk() as it can slave
-+at any FS.
-+
-+ unsigned int config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+ {
-+ /* codec has pll that generates mclk from 13MHz xtal */
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info, 13000000);
-+ }
-Index: linux-2.6-pxa-new/Documentation/sound/alsa/soc/codec.txt
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/Documentation/sound/alsa/soc/codec.txt
-@@ -0,0 +1,232 @@
-+ASoC Codec Driver
-+=================
-+
-+The codec driver is generic and hardware independent code that configures the
-+codec to provide audio capture and playback. It should contain no code that is
-+specific to the target platform or machine. All platform and machine specific
-+code should be added to the platform and machine drivers respectively.
-+
-+Each codec driver must provide the following features:-
-+
-+ 1) Digital audio interface (DAI) description
-+ 2) Digital audio interface configuration
-+ 3) PCM's description
-+ 4) Codec control IO - using I2C, 3 Wire(SPI) or both API's
-+ 5) Mixers and audio controls
-+ 6) Sysclk configuration
-+ 7) Codec audio operations
-+
-+Optionally, codec drivers can also provide:-
-+
-+ 8) DAPM description.
-+ 9) DAPM event handler.
-+10) DAC Digital mute control.
-+
-+It's probably best to use this guide in conjuction with the existing codec
-+driver code in sound/soc/codecs/
-+
-+ASoC Codec driver breakdown
-+===========================
-+
-+1 - Digital Audio Interface (DAI) description
-+---------------------------------------------
-+The DAI is a digital audio data transfer link between the codec and host SoC
-+CPU. It typically has data transfer capabilities in both directions
-+(playback and capture) and can run at a variety of different speeds.
-+Supported interfaces currently include AC97, I2S and generic PCM style links.
-+Please read DAI.txt for implementation information.
-+
-+
-+2 - Digital Audio Interface (DAI) configuration
-+-----------------------------------------------
-+DAI configuration is handled by the codec_pcm_prepare function and is
-+responsible for configuring and starting the DAI on the codec. This can be
-+called multiple times and is atomic. It can access the runtime parameters.
-+
-+This usually consists of a large function with numerous switch statements to
-+set up each configuration option. These options are set by the core at runtime.
-+
-+
-+3 - Codec PCM's
-+---------------
-+Each codec must have it's PCM's defined. This defines the number of channels,
-+stream names, callbacks and codec name. It is also used to register the DAI
-+with the ASoC core. The PCM structure also associates the DAI capabilities with
-+the ALSA PCM.
-+
-+e.g.
-+
-+static struct snd_soc_pcm_codec wm8731_pcm_client = {
-+ .name = "WM8731",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .capture = {
-+ .stream_name = "Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .config_sysclk = wm8731_config_sysclk,
-+ .ops = {
-+ .prepare = wm8731_pcm_prepare,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8731_hwfmt),
-+ .modes = &wm8731_hwfmt[0],
-+ },
-+};
-+
-+
-+4 - Codec control IO
-+--------------------
-+The codec can ususally be controlled via an I2C or SPI style interface (AC97
-+combines control with data in the DAI). The codec drivers will have to provide
-+functions to read and write the codec registers along with supplying a register
-+cache:-
-+
-+ /* IO control data and register cache */
-+ void *control_data; /* codec control (i2c/3wire) data */
-+ void *reg_cache;
-+
-+Codec read/write should do any data formatting and call the hardware read write
-+below to perform the IO. These functions are called by the core and alsa when
-+performing DAPM or changing the mixer:-
-+
-+ unsigned int (*read)(struct snd_soc_codec *, unsigned int);
-+ int (*write)(struct snd_soc_codec *, unsigned int, unsigned int);
-+
-+Codec hardware IO functions - usually points to either the I2C, SPI or AC97
-+read/write:-
-+
-+ hw_write_t hw_write;
-+ hw_read_t hw_read;
-+
-+
-+5 - Mixers and audio controls
-+-----------------------------
-+All the codec mixers and audio controls can be defined using the convenience
-+macros defined in soc.h.
-+
-+ #define SOC_SINGLE(xname, reg, shift, mask, invert)
-+
-+Defines a single control as follows:-
-+
-+ xname = Control name e.g. "Playback Volume"
-+ reg = codec register
-+ shift = control bit(s) offset in register
-+ mask = control bit size(s) e.g. mask of 7 = 3 bits
-+ invert = the control is inverted
-+
-+Other macros include:-
-+
-+ #define SOC_DOUBLE(xname, reg, shift_left, shift_right, mask, invert)
-+
-+A stereo control
-+
-+ #define SOC_DOUBLE_R(xname, reg_left, reg_right, shift, mask, invert)
-+
-+A stereo control spanning 2 registers
-+
-+ #define SOC_ENUM_SINGLE(xreg, xshift, xmask, xtexts)
-+
-+Defines an single enumerated control as follows:-
-+
-+ xreg = register
-+ xshift = control bit(s) offset in register
-+ xmask = control bit(s) size
-+ xtexts = pointer to array of strings that describe each setting
-+
-+ #define SOC_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, xtexts)
-+
-+Defines a stereo enumerated control
-+
-+
-+6 - System clock configuration.
-+-------------------------------
-+The system clock that drives the audio subsystem can change depending on sample
-+rate and the system power state. i.e.
-+
-+o Higher sample rates sometimes need a higher system clock.
-+o Low system power states can sometimes limit the available clocks.
-+
-+This function is a callback that the machine driver can call to set and
-+determine if the clock and sample rate combination is supported by the codec at
-+the present time (and system state).
-+
-+NOTE: If the codec has a PLL then it has a lot more flexability wrt clock and
-+sample rate combinations.
-+
-+Your config_sysclock function should return the MCLK if it's a valid
-+combination for your codec else 0;
-+
-+Please read clocking.txt now.
-+
-+
-+7 - Codec Audio Operations
-+--------------------------
-+The codec driver also supports the following alsa operations:-
-+
-+/* SoC audio ops */
-+struct snd_soc_ops {
-+ int (*startup)(snd_pcm_substream_t *);
-+ void (*shutdown)(snd_pcm_substream_t *);
-+ int (*hw_params)(snd_pcm_substream_t *, snd_pcm_hw_params_t *);
-+ int (*hw_free)(snd_pcm_substream_t *);
-+ int (*prepare)(snd_pcm_substream_t *);
-+};
-+
-+Please refer to the alsa driver PCM documentation for details.
-+http://www.alsa-project.org/~iwai/writing-an-alsa-driver/c436.htm
-+
-+
-+8 - DAPM description.
-+---------------------
-+The Dynamic Audio Power Management description describes the codec's power
-+components, their relationships and registers to the ASoC core. Please read
-+dapm.txt for details of building the description.
-+
-+Please also see the examples in other codec drivers.
-+
-+
-+9 - DAPM event handler
-+----------------------
-+This function is a callback that handles codec domain PM calls and system
-+domain PM calls (e.g. suspend and resume). It's used to put the codec to sleep
-+when not in use.
-+
-+Power states:-
-+
-+ SNDRV_CTL_POWER_D0: /* full On */
-+ /* vref/mid, clk and osc on, active */
-+
-+ SNDRV_CTL_POWER_D1: /* partial On */
-+ SNDRV_CTL_POWER_D2: /* partial On */
-+
-+ SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* everything off except vref/vmid, inactive */
-+
-+ SNDRV_CTL_POWER_D3cold: /* Everything Off, without power */
-+
-+
-+10 - Codec DAC digital mute control.
-+------------------------------------
-+Most codecs have a digital mute before the DAC's that can be used to minimise
-+any system noise. The mute stops any digital data from entering the DAC.
-+
-+A callback can be created that is called by the core for each codec DAI when the
-+mute is applied or freed.
-+
-+i.e.
-+
-+static int wm8974_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = wm8974_read_reg_cache(codec, WM8974_DAC) & 0xffbf;
-+ if(mute)
-+ wm8974_write(codec, WM8974_DAC, mute_reg | 0x40);
-+ else
-+ wm8974_write(codec, WM8974_DAC, mute_reg);
-+ return 0;
-+}
-Index: linux-2.6-pxa-new/Documentation/sound/alsa/soc/dapm.txt
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/Documentation/sound/alsa/soc/dapm.txt
-@@ -0,0 +1,297 @@
-+Dynamic Audio Power Management for Portable Devices
-+===================================================
-+
-+1. Description
-+==============
-+
-+Dynamic Audio Power Management (DAPM) is designed to allow portable Linux devices
-+to use the minimum amount of power within the audio subsystem at all times. It
-+is independent of other kernel PM and as such, can easily co-exist with the
-+other PM systems.
-+
-+DAPM is also completely transparent to all user space applications as all power
-+switching is done within the ASoC core. No code changes or recompiling are
-+required for user space applications. DAPM makes power switching descisions based
-+upon any audio stream (capture/playback) activity and audio mixer settings
-+within the device.
-+
-+DAPM spans the whole machine. It covers power control within the entire audio
-+subsystem, this includes internal codec power blocks and machine level power
-+systems.
-+
-+There are 4 power domains within DAPM
-+
-+ 1. Codec domain - VREF, VMID (core codec and audio power)
-+ Usually controlled at codec probe/remove and suspend/resume, although
-+ can be set at stream time if power is not needed for sidetone, etc.
-+
-+ 2. Platform/Machine domain - physically connected inputs and outputs
-+ Is platform/machine and user action specific, is configured by the
-+ machine driver and responds to asynchronous events e.g when HP
-+ are inserted
-+
-+ 3. Path domain - audio susbsystem signal paths
-+ Automatically set when mixer and mux settings are changed by the user.
-+ e.g. alsamixer, amixer.
-+
-+ 4. Stream domain - DAC's and ADC's.
-+ Enabled and disabled when stream playback/capture is started and
-+ stopped respectively. e.g. aplay, arecord.
-+
-+All DAPM power switching descisons are made automatically by consulting an audio
-+routing map of the whole machine. This map is specific to each machine and
-+consists of the interconnections between every audio component (including
-+internal codec components). All audio components that effect power are called
-+widgets hereafter.
-+
-+
-+2. DAPM Widgets
-+===============
-+
-+Audio DAPM widgets fall into a number of types:-
-+
-+ o Mixer - Mixes several analog signals into a single analog signal.
-+ o Mux - An analog switch that outputs only 1 of it's inputs.
-+ o PGA - A programmable gain amplifier or attenuation widget.
-+ o ADC - Analog to Digital Converter
-+ o DAC - Digital to Analog Converter
-+ o Switch - An analog switch
-+ o Input - A codec input pin
-+ o Output - A codec output pin
-+ o Headphone - Headphone (and optional Jack)
-+ o Mic - Mic (and optional Jack)
-+ o Line - Line Input/Output (and optional Jack)
-+ o Speaker - Speaker
-+ o Pre - Special PRE widget (exec before all others)
-+ o Post - Special POST widget (exec after all others)
-+
-+(Widgets are defined in include/sound/soc-dapm.h)
-+
-+Widgets are usually added in the codec driver and the machine driver. There are
-+convience macros defined in soc-dapm.h that can be used to quickly build a
-+list of widgets of the codecs and machines DAPM widgets.
-+
-+Most widgets have a name, register, shift and invert. Some widgets have extra
-+parameters for stream name and kcontrols.
-+
-+
-+2.1 Stream Domain Widgets
-+-------------------------
-+
-+Stream Widgets relate to the stream power domain and only consist of ADC's
-+(analog to digital converters) and DAC's (digital to analog converters).
-+
-+Stream widgets have the following format:-
-+
-+SND_SOC_DAPM_DAC(name, stream name, reg, shift, invert),
-+
-+NOTE: the stream name must match the corresponding stream name in your codecs
-+snd_soc_codec_dai.
-+
-+e.g. stream widgets for HiFi playback and capture
-+
-+SND_SOC_DAPM_DAC("HiFi DAC", "HiFi Playback", REG, 3, 1),
-+SND_SOC_DAPM_ADC("HiFi ADC", "HiFi Capture", REG, 2, 1),
-+
-+
-+2.2 Path Domain Widgets
-+-----------------------
-+
-+Path domain widgets have a ability to control or effect the audio signal or
-+audio paths within the audio subsystem. They have the following form:-
-+
-+SND_SOC_DAPM_PGA(name, reg, shift, invert, controls, num_controls)
-+
-+Any widget kcontrols can be set using the controls and num_controls members.
-+
-+e.g. Mixer widget (the kcontrols are declared first)
-+
-+/* Output Mixer */
-+static const snd_kcontrol_new_t wm8731_output_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Line Bypass Switch", WM8731_APANA, 3, 1, 0),
-+SOC_DAPM_SINGLE("Mic Sidetone Switch", WM8731_APANA, 5, 1, 0),
-+SOC_DAPM_SINGLE("HiFi Playback Switch", WM8731_APANA, 4, 1, 0),
-+};
-+
-+SND_SOC_DAPM_MIXER("Output Mixer", WM8731_PWR, 4, 1, wm8731_output_mixer_controls,
-+ ARRAY_SIZE(wm8731_output_mixer_controls)),
-+
-+
-+2.3 Platform/Machine domain Widgets
-+-----------------------------------
-+
-+Machine widgets are different from codec widgets in that they don't have a
-+codec register bit associated with them. A machine widget is assigned to each
-+machine audio component (non codec) that can be independently powered. e.g.
-+
-+ o Speaker Amp
-+ o Microphone Bias
-+ o Jack connectors
-+
-+A machine widget can have an optional call back.
-+
-+e.g. Jack connector widget for an external Mic that enables Mic Bias
-+when the Mic is inserted:-
-+
-+static int spitz_mic_bias(struct snd_soc_dapm_widget* w, int event)
-+{
-+ if(SND_SOC_DAPM_EVENT_ON(event))
-+ set_scoop_gpio(&spitzscoop2_device.dev, SPITZ_SCP2_MIC_BIAS);
-+ else
-+ reset_scoop_gpio(&spitzscoop2_device.dev, SPITZ_SCP2_MIC_BIAS);
-+
-+ return 0;
-+}
-+
-+SND_SOC_DAPM_MIC("Mic Jack", spitz_mic_bias),
-+
-+
-+2.4 Codec Domain
-+----------------
-+
-+The Codec power domain has no widgets and is handled by the codecs DAPM event
-+handler. This handler is called when the codec powerstate is changed wrt to any
-+stream event or by kernel PM events.
-+
-+
-+2.5 Virtual Widgets
-+-------------------
-+
-+Sometimes widgets exist in the codec or machine audio map that don't have any
-+corresponding register bit for power control. In this case it's necessary to
-+create a virtual widget - a widget with no control bits e.g.
-+
-+SND_SOC_DAPM_MIXER("AC97 Mixer", SND_SOC_DAPM_NOPM, 0, 0, NULL, 0),
-+
-+This can be used to merge to signal paths together in software.
-+
-+After all the widgets have been defined, they can then be added to the DAPM
-+subsystem individually with a call to snd_soc_dapm_new_control().
-+
-+
-+3. Codec Widget Interconnections
-+================================
-+
-+Widgets are connected to each other within the codec and machine by audio
-+paths (called interconnections). Each interconnection must be defined in order
-+to create a map of all audio paths between widgets.
-+This is easiest with a diagram of the codec (and schematic of the machine audio
-+system), as it requires joining widgets together via their audio signal paths.
-+
-+i.e. from the WM8731 codec's output mixer (wm8731.c)
-+
-+The WM8731 output mixer has 3 inputs (sources)
-+
-+ 1. Line Bypass Input
-+ 2. DAC (HiFi playback)
-+ 3. Mic Sidetone Input
-+
-+Each input in this example has a kcontrol associated with it (defined in example
-+above) and is connected to the output mixer via it's kcontrol name. We can now
-+connect the destination widget (wrt audio signal) with it's source widgets.
-+
-+ /* output mixer */
-+ {"Output Mixer", "Line Bypass Switch", "Line Input"},
-+ {"Output Mixer", "HiFi Playback Switch", "DAC"},
-+ {"Output Mixer", "Mic Sidetone Switch", "Mic Bias"},
-+
-+So we have :-
-+
-+ Destination Widget <=== Path Name <=== Source Widget
-+
-+Or:-
-+
-+ Sink, Path, Source
-+
-+Or :-
-+
-+ "Output Mixer" is connected to the "DAC" via the "HiFi Playback Switch".
-+
-+When there is no path name connecting widgets (e.g. a direct connection) we
-+pass NULL for the path name.
-+
-+Interconnections are created with a call to:-
-+
-+snd_soc_dapm_connect_input(codec, sink, path, source);
-+
-+Finally, snd_soc_dapm_new_widgets(codec) must be called after all widgets and
-+interconnections have been registered with the core. This causes the core to
-+scan the codec and machine so that the internal DAPM state matches the
-+physical state of the machine.
-+
-+
-+3.1 Machine Widget Interconnections
-+-----------------------------------
-+Machine widget interconnections are created in the same way as codec ones and
-+directly connect the codec pins to machine level widgets.
-+
-+e.g. connects the speaker out codec pins to the internal speaker.
-+
-+ /* ext speaker connected to codec pins LOUT2, ROUT2 */
-+ {"Ext Spk", NULL , "ROUT2"},
-+ {"Ext Spk", NULL , "LOUT2"},
-+
-+This allows the DAPM to power on and off pins that are connected (and in use)
-+and pins that are NC respectively.
-+
-+
-+4 Endpoint Widgets
-+===================
-+An endpoint is a start or end point (widget) of an audio signal within the
-+machine and includes the codec. e.g.
-+
-+ o Headphone Jack
-+ o Internal Speaker
-+ o Internal Mic
-+ o Mic Jack
-+ o Codec Pins
-+
-+When a codec pin is NC it can be marked as not used with a call to
-+
-+snd_soc_dapm_set_endpoint(codec, "Widget Name", 0);
-+
-+The last argument is 0 for inactive and 1 for active. This way the pin and its
-+input widget will never be powered up and consume power.
-+
-+This also applies to machine widgets. e.g. if a headphone is connected to a
-+jack then the jack can be marked active. If the headphone is removed, then
-+the headphone jack can be marked inactive.
-+
-+
-+5 DAPM Widget Events
-+====================
-+
-+Some widgets can register their interest with the DAPM core in PM events.
-+e.g. A Speaker with an amplifier registers a widget so the amplifier can be
-+powered only when the spk is in use.
-+
-+/* turn speaker amplifier on/off depending on use */
-+static int corgi_amp_event(struct snd_soc_dapm_widget *w, int event)
-+{
-+ if (SND_SOC_DAPM_EVENT_ON(event))
-+ set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_APM_ON);
-+ else
-+ reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_APM_ON);
-+
-+ return 0;
-+}
-+
-+/* corgi machine dapm widgets */
-+static const struct snd_soc_dapm_widget wm8731_dapm_widgets =
-+ SND_SOC_DAPM_SPK("Ext Spk", corgi_amp_event);
-+
-+Please see soc-dapm.h for all other widgets that support events.
-+
-+
-+5.1 Event types
-+---------------
-+
-+The following event types are supported by event widgets.
-+
-+/* dapm event types */
-+#define SND_SOC_DAPM_PRE_PMU 0x1 /* before widget power up */
-+#define SND_SOC_DAPM_POST_PMU 0x2 /* after widget power up */
-+#define SND_SOC_DAPM_PRE_PMD 0x4 /* before widget power down */
-+#define SND_SOC_DAPM_POST_PMD 0x8 /* after widget power down */
-+#define SND_SOC_DAPM_PRE_REG 0x10 /* before audio path setup */
-+#define SND_SOC_DAPM_POST_REG 0x20 /* after audio path setup */
-Index: linux-2.6-pxa-new/Documentation/sound/alsa/soc/machine.txt
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/Documentation/sound/alsa/soc/machine.txt
-@@ -0,0 +1,114 @@
-+ASoC Machine Driver
-+===================
-+
-+The ASoC machine (or board) driver is the code that glues together the platform
-+and codec drivers.
-+
-+The machine driver can contain codec and platform specific code. It registers
-+the audio subsystem with the kernel as a platform device and is represented by
-+the following struct:-
-+
-+/* SoC machine */
-+struct snd_soc_machine {
-+ char *name;
-+
-+ int (*probe)(struct platform_device *pdev);
-+ int (*remove)(struct platform_device *pdev);
-+
-+ /* the pre and post PM functions are used to do any PM work before and
-+ * after the codec and DAI's do any PM work. */
-+ int (*suspend_pre)(struct platform_device *pdev, pm_message_t state);
-+ int (*suspend_post)(struct platform_device *pdev, pm_message_t state);
-+ int (*resume_pre)(struct platform_device *pdev);
-+ int (*resume_post)(struct platform_device *pdev);
-+
-+ /* machine stream operations */
-+ struct snd_soc_ops *ops;
-+
-+ /* CPU <--> Codec DAI links */
-+ struct snd_soc_dai_link *dai_link;
-+ int num_links;
-+};
-+
-+probe()/remove()
-+----------------
-+probe/remove are optional. Do any machine specific probe here.
-+
-+
-+suspend()/resume()
-+------------------
-+The machine driver has pre and post versions of suspend and resume to take care
-+of any machine audio tasks that have to be done before or after the codec, DAI's
-+and DMA is suspended and resumed. Optional.
-+
-+
-+Machine operations
-+------------------
-+The machine specific audio operations can be set here. Again this is optional.
-+
-+
-+Machine DAI Configuration
-+-------------------------
-+The machine DAI configuration glues all the codec and CPU DAI's together. It can
-+also be used to set up the DAI system clock and for any machine related DAI
-+initialisation e.g. the machine audio map can be connected to the codec audio
-+map, unconnnected codec pins can be set as such. Please see corgi.c, spitz.c
-+for examples.
-+
-+struct snd_soc_dai_link is used to set up each DAI in your machine. e.g.
-+
-+/* corgi digital audio interface glue - connects codec <--> CPU */
-+static struct snd_soc_dai_link corgi_dai = {
-+ .name = "WM8731",
-+ .stream_name = "WM8731",
-+ .cpu_dai = &pxa_i2s_dai,
-+ .codec_dai = &wm8731_dai,
-+ .init = corgi_wm8731_init,
-+ .config_sysclk = corgi_config_sysclk,
-+};
-+
-+struct snd_soc_machine then sets up the machine with it's DAI's. e.g.
-+
-+/* corgi audio machine driver */
-+static struct snd_soc_machine snd_soc_machine_corgi = {
-+ .name = "Corgi",
-+ .dai_link = &corgi_dai,
-+ .num_links = 1,
-+ .ops = &corgi_ops,
-+};
-+
-+
-+Machine Audio Subsystem
-+-----------------------
-+
-+The machine soc device glues the platform, machine and codec driver together.
-+Private data can also be set here. e.g.
-+
-+/* corgi audio private data */
-+static struct wm8731_setup_data corgi_wm8731_setup = {
-+ .i2c_address = 0x1b,
-+};
-+
-+/* corgi audio subsystem */
-+static struct snd_soc_device corgi_snd_devdata = {
-+ .machine = &snd_soc_machine_corgi,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm8731,
-+ .codec_data = &corgi_wm8731_setup,
-+};
-+
-+
-+Machine Power Map
-+-----------------
-+
-+The machine driver can optionally extend the codec power map and to become an
-+audio power map of the audio subsystem. This allows for automatic power up/down
-+of speaker/HP amplifiers, etc. Codec pins can be connected to the machines jack
-+sockets in the machine init function. See soc/pxa/spitz.c and dapm.txt for
-+details.
-+
-+
-+Machine Controls
-+----------------
-+
-+Machine specific audio mixer controls can be added in the dai init function.
-\ No newline at end of file
-Index: linux-2.6-pxa-new/Documentation/sound/alsa/soc/overview.txt
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/Documentation/sound/alsa/soc/overview.txt
-@@ -0,0 +1,83 @@
-+ALSA SoC Layer
-+==============
-+
-+The overall project goal of the ALSA System on Chip (ASoC) layer is to provide
-+better ALSA support for embedded system on chip procesors (e.g. pxa2xx, au1x00,
-+iMX, etc) and portable audio codecs. Currently there is some support in the
-+kernel for SoC audio, however it has some limitations:-
-+
-+ * Currently, codec drivers are often tightly coupled to the underlying SoC
-+ cpu. This is not ideal and leads to code duplication i.e. Linux now has 4
-+ different wm8731 drivers for 4 different SoC platforms.
-+
-+ * There is no standard method to signal user initiated audio events.
-+ e.g. Headphone/Mic insertion, Headphone/Mic detection after an insertion
-+ event. These are quite common events on portable devices and ofter require
-+ machine specific code to re route audio, enable amps etc after such an event.
-+
-+ * Current drivers tend to power up the entire codec when playing
-+ (or recording) audio. This is fine for a PC, but tends to waste a lot of
-+ power on portable devices. There is also no support for saving power via
-+ changing codec oversampling rates, bias currents, etc.
-+
-+
-+ASoC Design
-+===========
-+
-+The ASoC layer is designed to address these issues and provide the following
-+features :-
-+
-+ * Codec independence. Allows reuse of codec drivers on other platforms
-+ and machines.
-+
-+ * Easy I2S/PCM audio interface setup between codec and SoC. Each SoC interface
-+ and codec registers it's audio interface capabilities with the core and are
-+ subsequently matched and configured when the application hw params are known.
-+
-+ * Dynamic Audio Power Management (DAPM). DAPM automatically sets the codec to
-+ it's minimum power state at all times. This includes powering up/down
-+ internal power blocks depending on the internal codec audio routing and any
-+ active streams.
-+
-+ * Pop and click reduction. Pops and clicks can be reduced by powering the
-+ codec up/down in the correct sequence (including using digital mute). ASoC
-+ signals the codec when to change power states.
-+
-+ * Machine specific controls: Allow machines to add controls to the sound card
-+ e.g. volume control for speaker amp.
-+
-+To achieve all this, ASoC basically splits an embedded audio system into 3
-+components :-
-+
-+ * Codec driver: The codec driver is platform independent and contains audio
-+ controls, audio interface capabilities, codec dapm definition and codec IO
-+ functions.
-+
-+ * Platform driver: The platform driver contains the audio dma engine and audio
-+ interface drivers (e.g. I2S, AC97, PCM) for that platform.
-+
-+ * Machine driver: The machine driver handles any machine specific controls and
-+ audio events. i.e. turing on an amp at start of playback.
-+
-+
-+Documentation
-+=============
-+
-+The documentation is spilt into the following sections:-
-+
-+overview.txt: This file.
-+
-+codec.txt: Codec driver internals.
-+
-+DAI.txt: Description of Digital Audio Interface standards and how to configure
-+a DAI within your codec and CPU DAI drivers.
-+
-+dapm.txt: Dynamic Audio Power Management
-+
-+platform.txt: Platform audio DMA and DAI.
-+
-+machine.txt: Machine driver internals.
-+
-+pop_clicks.txt: How to minimise audio artifacts.
-+
-+clocking.txt: ASoC clocking for best power performance.
-\ No newline at end of file
-Index: linux-2.6-pxa-new/Documentation/sound/alsa/soc/platform.txt
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/Documentation/sound/alsa/soc/platform.txt
-@@ -0,0 +1,58 @@
-+ASoC Platform Driver
-+====================
-+
-+An ASoC platform driver can be divided into audio DMA and SoC DAI configuration
-+and control. The platform drivers only target the SoC CPU and must have no board
-+specific code.
-+
-+Audio DMA
-+=========
-+
-+The platform DMA driver optionally supports the following alsa operations:-
-+
-+/* SoC audio ops */
-+struct snd_soc_ops {
-+ int (*startup)(snd_pcm_substream_t *);
-+ void (*shutdown)(snd_pcm_substream_t *);
-+ int (*hw_params)(snd_pcm_substream_t *, snd_pcm_hw_params_t *);
-+ int (*hw_free)(snd_pcm_substream_t *);
-+ int (*prepare)(snd_pcm_substream_t *);
-+ int (*trigger)(snd_pcm_substream_t *, int);
-+};
-+
-+The platform driver exports it's DMA functionailty via struct snd_soc_platform:-
-+
-+struct snd_soc_platform {
-+ char *name;
-+
-+ int (*probe)(struct platform_device *pdev);
-+ int (*remove)(struct platform_device *pdev);
-+ int (*suspend)(struct platform_device *pdev, struct snd_soc_cpu_dai *cpu_dai);
-+ int (*resume)(struct platform_device *pdev, struct snd_soc_cpu_dai *cpu_dai);
-+
-+ /* pcm creation and destruction */
-+ int (*pcm_new)(snd_card_t *, struct snd_soc_codec_dai *, snd_pcm_t *);
-+ void (*pcm_free)(snd_pcm_t *);
-+
-+ /* platform stream ops */
-+ snd_pcm_ops_t *pcm_ops;
-+};
-+
-+Please refer to the alsa driver documentation for details of audio DMA.
-+http://www.alsa-project.org/~iwai/writing-an-alsa-driver/c436.htm
-+
-+An example DMA driver is soc/pxa/pxa2xx-pcm.c
-+
-+
-+SoC DAI Drivers
-+===============
-+
-+Each SoC DAI driver must provide the following features:-
-+
-+ 1) Digital audio interface (DAI) description
-+ 2) Digital audio interface configuration
-+ 3) PCM's description
-+ 4) Sysclk configuration
-+ 5) Suspend and resume (optional)
-+
-+Please see codec.txt for a description of items 1 - 4.
-Index: linux-2.6-pxa-new/Documentation/sound/alsa/soc/pops_clicks.txt
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/Documentation/sound/alsa/soc/pops_clicks.txt
-@@ -0,0 +1,52 @@
-+Audio Pops and Clicks
-+=====================
-+
-+Pops and clicks are unwanted audio artifacts caused by the powering up and down
-+of components within the audio subsystem. This is noticable on PC's when an audio
-+module is either loaded or unloaded (at module load time the sound card is
-+powered up and causes a popping noise on the speakers).
-+
-+Pops and clicks can be more frequent on portable systems with DAPM. This is because
-+the components within the subsystem are being dynamically powered depending on
-+the audio usage and this can subsequently cause a small pop or click every time a
-+component power state is changed.
-+
-+
-+Minimising Playback Pops and Clicks
-+===================================
-+
-+Playback pops in portable audio subsystems cannot be completely eliminated atm,
-+however future audio codec hardware will have better pop and click supression.
-+Pops can be reduced within playback by powering the audio components in a
-+specific order. This order is different for startup and shutdown and follows
-+some basic rules:-
-+
-+ Startup Order :- DAC --> Mixers --> Output PGA --> Digital Unmute
-+
-+ Shutdown Order :- Digital Mute --> Output PGA --> Mixers --> DAC
-+
-+This assumes that the codec PCM output path from the DAC is via a mixer and then
-+a PGA (programmable gain amplifier) before being output to the speakers.
-+
-+
-+Minimising Capture Pops and Clicks
-+==================================
-+
-+Capture artifacts are somewhat easier to get rid as we can delay activating the
-+ADC until all the pops have occured. This follows similar power rules to
-+playback in that components are powered in a sequence depending upon stream
-+startup or shutdown.
-+
-+ Startup Order - Input PGA --> Mixers --> ADC
-+
-+ Shutdown Order - ADC --> Mixers --> Input PGA
-+
-+
-+Zipper Noise
-+============
-+An unwanted zipper noise can occur within the audio playback or capture stream
-+when a volume control is changed near its maximum gain value. The zipper noise
-+is heard when the gain increase or decrease changes the mean audio signal
-+amplitude too quickly. It can be minimised by enabling the zero cross setting
-+for each volume control. The ZC forces the gain change to occur when the signal
-+crosses the zero amplitude line.
-Index: linux-2.6-pxa-new/include/sound/ac97_codec.h
-===================================================================
---- linux-2.6-pxa-new.orig/include/sound/ac97_codec.h
-+++ linux-2.6-pxa-new/include/sound/ac97_codec.h
-@@ -425,6 +425,7 @@ struct snd_ac97_build_ops {
-
- struct snd_ac97_bus_ops {
- void (*reset) (struct snd_ac97 *ac97);
-+ void (*warm_reset)(struct snd_ac97 *ac97);
- void (*write) (struct snd_ac97 *ac97, unsigned short reg, unsigned short val);
- unsigned short (*read) (struct snd_ac97 *ac97, unsigned short reg);
- void (*wait) (struct snd_ac97 *ac97);
-Index: linux-2.6-pxa-new/include/sound/soc-dapm.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/include/sound/soc-dapm.h
-@@ -0,0 +1,286 @@
-+/*
-+ * linux/sound/soc-dapm.h -- ALSA SoC Dynamic Audio Power Management
-+ *
-+ * Author: Liam Girdwood
-+ * Created: Aug 11th 2005
-+ * Copyright: Wolfson Microelectronics. PLC.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __LINUX_SND_SOC_DAPM_H
-+#define __LINUX_SND_SOC_DAPM_H
-+
-+#include <linux/device.h>
-+#include <linux/types.h>
-+#include <sound/control.h>
-+#include <sound/soc.h>
-+
-+/* widget has no PM register bit */
-+#define SND_SOC_NOPM -1
-+
-+/*
-+ * SoC dynamic audio power managment
-+ *
-+ * We can have upto 4 power domains
-+ * 1. Codec domain - VREF, VMID
-+ * Usually controlled at codec probe/remove, although can be set
-+ * at stream time if power is not needed for sidetone, etc.
-+ * 2. Platform/Machine domain - physically connected inputs and outputs
-+ * Is platform/machine and user action specific, is set in the machine
-+ * driver and by userspace e.g when HP are inserted
-+ * 3. Path domain - Internal codec path mixers
-+ * Are automatically set when mixer and mux settings are
-+ * changed by the user.
-+ * 4. Stream domain - DAC's and ADC's.
-+ * Enabled when stream playback/capture is started.
-+ */
-+
-+/* codec domain */
-+#define SND_SOC_DAPM_VMID(wname) \
-+{ .id = snd_soc_dapm_vmid, .name = wname, .kcontrols = NULL, \
-+ .num_kcontrols = 0}
-+
-+/* platform domain */
-+#define SND_SOC_DAPM_INPUT(wname) \
-+{ .id = snd_soc_dapm_input, .name = wname, .kcontrols = NULL, \
-+ .num_kcontrols = 0}
-+#define SND_SOC_DAPM_OUTPUT(wname) \
-+{ .id = snd_soc_dapm_output, .name = wname, .kcontrols = NULL, \
-+ .num_kcontrols = 0}
-+#define SND_SOC_DAPM_MIC(wname, wevent) \
-+{ .id = snd_soc_dapm_mic, .name = wname, .kcontrols = NULL, \
-+ .num_kcontrols = 0, .event = wevent, \
-+ .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD}
-+#define SND_SOC_DAPM_HP(wname, wevent) \
-+{ .id = snd_soc_dapm_hp, .name = wname, .kcontrols = NULL, \
-+ .num_kcontrols = 0, .event = wevent, \
-+ .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD}
-+#define SND_SOC_DAPM_SPK(wname, wevent) \
-+{ .id = snd_soc_dapm_spk, .name = wname, .kcontrols = NULL, \
-+ .num_kcontrols = 0, .event = wevent, \
-+ .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD}
-+#define SND_SOC_DAPM_LINE(wname, wevent) \
-+{ .id = snd_soc_dapm_line, .name = wname, .kcontrols = NULL, \
-+ .num_kcontrols = 0, .event = wevent, \
-+ .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD}
-+
-+/* path domain */
-+#define SND_SOC_DAPM_PGA(wname, wreg, wshift, winvert,\
-+ wcontrols, wncontrols) \
-+{ .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \
-+ .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols}
-+#define SND_SOC_DAPM_MIXER(wname, wreg, wshift, winvert, \
-+ wcontrols, wncontrols)\
-+{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
-+ .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols}
-+#define SND_SOC_DAPM_MICBIAS(wname, wreg, wshift, winvert) \
-+{ .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \
-+ .invert = winvert, .kcontrols = NULL, .num_kcontrols = 0}
-+#define SND_SOC_DAPM_SWITCH(wname, wreg, wshift, winvert, wcontrols) \
-+{ .id = snd_soc_dapm_switch, .name = wname, .reg = wreg, .shift = wshift, \
-+ .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1}
-+#define SND_SOC_DAPM_MUX(wname, wreg, wshift, winvert, wcontrols) \
-+{ .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, .shift = wshift, \
-+ .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1}
-+
-+/* path domain with event - event handler must return 0 for success */
-+#define SND_SOC_DAPM_PGA_E(wname, wreg, wshift, winvert, wcontrols, \
-+ wncontrols, wevent, wflags) \
-+{ .id = snd_soc_dapm_pga, .name = wname, .reg = wreg, .shift = wshift, \
-+ .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols, \
-+ .event = wevent, .event_flags = wflags}
-+#define SND_SOC_DAPM_MIXER_E(wname, wreg, wshift, winvert, wcontrols, \
-+ wncontrols, wevent, wflags) \
-+{ .id = snd_soc_dapm_mixer, .name = wname, .reg = wreg, .shift = wshift, \
-+ .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = wncontrols, \
-+ .event = wevent, .event_flags = wflags}
-+#define SND_SOC_DAPM_MICBIAS_E(wname, wreg, wshift, winvert, wevent, wflags) \
-+{ .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \
-+ .invert = winvert, .kcontrols = NULL, .num_kcontrols = 0, \
-+ .event = wevent, .event_flags = wflags}
-+#define SND_SOC_DAPM_SWITCH_E(wname, wreg, wshift, winvert, wcontrols, \
-+ wevent, wflags) \
-+{ .id = snd_soc_dapm_switch, .name = wname, .reg = wreg, .shift = wshift, \
-+ .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1 \
-+ .event = wevent, .event_flags = wflags}
-+#define SND_SOC_DAPM_MUX_E(wname, wreg, wshift, winvert, wcontrols, \
-+ wevent, wflags) \
-+{ .id = snd_soc_dapm_mux, .name = wname, .reg = wreg, .shift = wshift, \
-+ .invert = winvert, .kcontrols = wcontrols, .num_kcontrols = 1, \
-+ .event = wevent, .event_flags = wflags}
-+
-+/* events that are pre and post DAPM */
-+#define SND_SOC_DAPM_PRE(wname, wevent) \
-+{ .id = snd_soc_dapm_pre, .name = wname, .kcontrols = NULL, \
-+ .num_kcontrols = 0, .event = wevent, \
-+ .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD}
-+#define SND_SOC_DAPM_POST(wname, wevent) \
-+{ .id = snd_soc_dapm_post, .name = wname, .kcontrols = NULL, \
-+ .num_kcontrols = 0, .event = wevent, \
-+ .event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD}
-+
-+/* stream domain */
-+#define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \
-+{ .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \
-+ .shift = wshift, .invert = winvert}
-+#define SND_SOC_DAPM_ADC(wname, stname, wreg, wshift, winvert) \
-+{ .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \
-+ .shift = wshift, .invert = winvert}
-+
-+/* dapm kcontrol types */
-+#define SOC_DAPM_SINGLE(xname, reg, shift, mask, invert) \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
-+ .info = snd_soc_info_volsw, \
-+ .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \
-+ .private_value = SOC_SINGLE_VALUE(reg, shift, mask, invert) }
-+#define SOC_DAPM_DOUBLE(xname, reg, shift_left, shift_right, mask, invert, \
-+ power) \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
-+ .info = snd_soc_info_volsw, \
-+ .get = snd_soc_dapm_get_volsw, .put = snd_soc_dapm_put_volsw, \
-+ .private_value = (reg) | ((shift_left) << 8) | ((shift_right) << 12) |\
-+ ((mask) << 16) | ((invert) << 24) }
-+#define SOC_DAPM_ENUM(xname, xenum) \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
-+ .info = snd_soc_info_enum_double, \
-+ .get = snd_soc_dapm_get_enum_double, \
-+ .put = snd_soc_dapm_put_enum_double, \
-+ .private_value = (unsigned long)&xenum }
-+
-+/* dapm stream operations */
-+#define SND_SOC_DAPM_STREAM_NOP 0x0
-+#define SND_SOC_DAPM_STREAM_START 0x1
-+#define SND_SOC_DAPM_STREAM_STOP 0x2
-+#define SND_SOC_DAPM_STREAM_SUSPEND 0x4
-+#define SND_SOC_DAPM_STREAM_RESUME 0x8
-+#define SND_SOC_DAPM_STREAM_PAUSE_PUSH 0x10
-+#define SND_SOC_DAPM_STREAM_PAUSE_RELEASE 0x20
-+
-+/* dapm event types */
-+#define SND_SOC_DAPM_PRE_PMU 0x1 /* before widget power up */
-+#define SND_SOC_DAPM_POST_PMU 0x2 /* after widget power up */
-+#define SND_SOC_DAPM_PRE_PMD 0x4 /* before widget power down */
-+#define SND_SOC_DAPM_POST_PMD 0x8 /* after widget power down */
-+#define SND_SOC_DAPM_PRE_REG 0x10 /* before audio path setup */
-+#define SND_SOC_DAPM_POST_REG 0x20 /* after audio path setup */
-+
-+/* convenience event type detection */
-+#define SND_SOC_DAPM_EVENT_ON(e) \
-+ (e & (SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU))
-+#define SND_SOC_DAPM_EVENT_OFF(e) \
-+ (e & (SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD))
-+
-+struct snd_soc_dapm_widget;
-+enum snd_soc_dapm_type;
-+struct snd_soc_dapm_path;
-+struct snd_soc_dapm_pin;
-+
-+/* dapm controls */
-+int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol);
-+int snd_soc_dapm_get_volsw(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol);
-+int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol);
-+int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol);
-+int snd_soc_dapm_new_control(struct snd_soc_codec *codec,
-+ const struct snd_soc_dapm_widget *widget);
-+
-+/* dapm path setup */
-+int snd_soc_dapm_connect_input(struct snd_soc_codec *codec,
-+ const char *sink_name, const char *control_name, const char *src_name);
-+int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec);
-+void snd_soc_dapm_free(struct snd_soc_device *socdev);
-+
-+/* dapm events */
-+int snd_soc_dapm_stream_event(struct snd_soc_codec *codec, char *stream,
-+ int event);
-+
-+/* dapm sys fs - used by the core */
-+int snd_soc_dapm_sys_add(struct device *dev);
-+
-+/* dapm audio endpoint control */
-+int snd_soc_dapm_set_endpoint(struct snd_soc_codec *codec,
-+ char *pin, int status);
-+int snd_soc_dapm_sync_endpoints(struct snd_soc_codec *codec);
-+
-+/* dapm widget types */
-+enum snd_soc_dapm_type {
-+ snd_soc_dapm_input = 0, /* input pin */
-+ snd_soc_dapm_output, /* output pin */
-+ snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */
-+ snd_soc_dapm_mixer, /* mixes several analog signals together */
-+ snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */
-+ snd_soc_dapm_adc, /* analog to digital converter */
-+ snd_soc_dapm_dac, /* digital to analog converter */
-+ snd_soc_dapm_micbias, /* microphone bias (power) */
-+ snd_soc_dapm_mic, /* microphone */
-+ snd_soc_dapm_hp, /* headphones */
-+ snd_soc_dapm_spk, /* speaker */
-+ snd_soc_dapm_line, /* line input/output */
-+ snd_soc_dapm_switch, /* analog switch */
-+ snd_soc_dapm_vmid, /* codec bias/vmid - to minimise pops */
-+ snd_soc_dapm_pre, /* machine specific pre widget - exec first */
-+ snd_soc_dapm_post, /* machine specific post widget - exec last */
-+};
-+
-+/* dapm audio path between two widgets */
-+struct snd_soc_dapm_path {
-+ char *name;
-+ char *long_name;
-+
-+ /* source (input) and sink (output) widgets */
-+ struct snd_soc_dapm_widget *source;
-+ struct snd_soc_dapm_widget *sink;
-+ struct snd_kcontrol *kcontrol;
-+
-+ /* status */
-+ u32 connect:1; /* source and sink widgets are connected */
-+ u32 walked:1; /* path has been walked */
-+
-+ struct list_head list_source;
-+ struct list_head list_sink;
-+ struct list_head list;
-+};
-+
-+/* dapm widget */
-+struct snd_soc_dapm_widget {
-+ enum snd_soc_dapm_type id;
-+ char *name; /* widget name */
-+ char *sname; /* stream name */
-+ struct snd_soc_codec *codec;
-+ struct list_head list;
-+
-+ /* dapm control */
-+ short reg; /* negative reg = no direct dapm */
-+ unsigned char shift; /* bits to shift */
-+ unsigned int saved_value; /* widget saved value */
-+ unsigned int value; /* widget current value */
-+ unsigned char power:1; /* block power status */
-+ unsigned char invert:1; /* invert the power bit */
-+ unsigned char active:1; /* active stream on DAC, ADC's */
-+ unsigned char connected:1; /* connected codec pin */
-+ unsigned char new:1; /* cnew complete */
-+ unsigned char ext:1; /* has external widgets */
-+ unsigned char muted:1; /* muted for pop reduction */
-+ unsigned char suspend:1; /* was active before suspend */
-+ unsigned char pmdown:1; /* waiting for timeout */
-+
-+ /* external events */
-+ unsigned short event_flags; /* flags to specify event types */
-+ int (*event)(struct snd_soc_dapm_widget*, int);
-+
-+ /* kcontrols that relate to this widget */
-+ int num_kcontrols;
-+ const struct snd_kcontrol_new *kcontrols;
-+
-+ /* widget input and outputs */
-+ struct list_head sources;
-+ struct list_head sinks;
-+};
-+
-+#endif
-Index: linux-2.6-pxa-new/include/sound/soc.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/include/sound/soc.h
-@@ -0,0 +1,487 @@
-+/*
-+ * linux/sound/soc.h -- ALSA SoC Layer
-+ *
-+ * Author: Liam Girdwood
-+ * Created: Aug 11th 2005
-+ * Copyright: Wolfson Microelectronics. PLC.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __LINUX_SND_SOC_H
-+#define __LINUX_SND_SOC_H
-+
-+#include <linux/platform_device.h>
-+#include <linux/types.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/control.h>
-+#include <sound/ac97_codec.h>
-+
-+#define SND_SOC_VERSION "0.12.4"
-+
-+/*
-+ * Convenience kcontrol builders
-+ */
-+#define SOC_SINGLE_VALUE(reg,shift,mask,invert) ((reg) | ((shift) << 8) |\
-+ ((shift) << 12) | ((mask) << 16) | ((invert) << 24))
-+#define SOC_SINGLE_VALUE_EXT(reg,mask,invert) ((reg) | ((mask) << 16) |\
-+ ((invert) << 31))
-+#define SOC_SINGLE(xname, reg, shift, mask, invert) \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
-+ .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\
-+ .put = snd_soc_put_volsw, \
-+ .private_value = SOC_SINGLE_VALUE(reg, shift, mask, invert) }
-+#define SOC_DOUBLE(xname, reg, shift_left, shift_right, mask, invert) \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
-+ .info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \
-+ .put = snd_soc_put_volsw, \
-+ .private_value = (reg) | ((shift_left) << 8) | \
-+ ((shift_right) << 12) | ((mask) << 16) | ((invert) << 24) }
-+#define SOC_DOUBLE_R(xname, reg_left, reg_right, shift, mask, invert) \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
-+ .info = snd_soc_info_volsw_2r, \
-+ .get = snd_soc_get_volsw_2r, .put = snd_soc_put_volsw_2r, \
-+ .private_value = (reg_left) | ((shift) << 8) | \
-+ ((mask) << 12) | ((invert) << 20) | ((reg_right) << 24) }
-+#define SOC_ENUM_DOUBLE(xreg, xshift_l, xshift_r, xmask, xtexts) \
-+{ .reg = xreg, .shift_l = xshift_l, .shift_r = xshift_r, \
-+ .mask = xmask, .texts = xtexts }
-+#define SOC_ENUM_SINGLE(xreg, xshift, xmask, xtexts) \
-+ SOC_ENUM_DOUBLE(xreg, xshift, xshift, xmask, xtexts)
-+#define SOC_ENUM_SINGLE_EXT(xmask, xtexts) \
-+{ .mask = xmask, .texts = xtexts }
-+#define SOC_ENUM(xname, xenum) \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname,\
-+ .info = snd_soc_info_enum_double, \
-+ .get = snd_soc_get_enum_double, .put = snd_soc_put_enum_double, \
-+ .private_value = (unsigned long)&xenum }
-+#define SOC_SINGLE_EXT(xname, xreg, xmask, xinvert,\
-+ xhandler_get, xhandler_put) \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
-+ .info = snd_soc_info_volsw_ext, \
-+ .get = xhandler_get, .put = xhandler_put, \
-+ .private_value = SOC_SINGLE_VALUE_EXT(xreg, xmask, xinvert) }
-+#define SOC_SINGLE_BOOL_EXT(xname, xdata, xhandler_get, xhandler_put) \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
-+ .info = snd_soc_info_bool_ext, \
-+ .get = xhandler_get, .put = xhandler_put, \
-+ .private_value = xdata }
-+#define SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put) \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
-+ .info = snd_soc_info_enum_ext, \
-+ .get = xhandler_get, .put = xhandler_put, \
-+ .private_value = (unsigned long)&xenum }
-+
-+/*
-+ * Digital Audio Interface (DAI) types
-+ */
-+#define SND_SOC_DAI_AC97 0x1
-+#define SND_SOC_DAI_I2S 0x2
-+#define SND_SOC_DAI_PCM 0x4
-+
-+/*
-+ * DAI hardware audio formats
-+ */
-+#define SND_SOC_DAIFMT_I2S (1 << 0) /* I2S mode */
-+#define SND_SOC_DAIFMT_RIGHT_J (1 << 1) /* Right justified mode */
-+#define SND_SOC_DAIFMT_LEFT_J (1 << 2) /* Left Justified mode */
-+#define SND_SOC_DAIFMT_DSP_A (1 << 3) /* L data msb after FRM or LRC */
-+#define SND_SOC_DAIFMT_DSP_B (1 << 4) /* L data msb during FRM or LRC */
-+#define SND_SOC_DAIFMT_AC97 (1 << 5) /* AC97 */
-+
-+/*
-+ * DAI hardware signal inversions
-+ */
-+#define SND_SOC_DAIFMT_NB_NF (1 << 8) /* normal bit clock + frame */
-+#define SND_SOC_DAIFMT_NB_IF (1 << 9) /* normal bclk + inv frm */
-+#define SND_SOC_DAIFMT_IB_NF (1 << 10) /* invert bclk + nor frm */
-+#define SND_SOC_DAIFMT_IB_IF (1 << 11) /* invert bclk + frm */
-+
-+/*
-+ * DAI hardware clock masters
-+ * This is wrt the codec, the inverse is true for the interface
-+ * i.e. if the codec is clk and frm master then the interface is
-+ * clk and frame slave.
-+ */
-+#define SND_SOC_DAIFMT_CBM_CFM (1 << 12) /* codec clk & frm master */
-+#define SND_SOC_DAIFMT_CBS_CFM (1 << 13) /* codec clk slave & frm master */
-+#define SND_SOC_DAIFMT_CBM_CFS (1 << 14) /* codec clk master & frame slave */
-+#define SND_SOC_DAIFMT_CBS_CFS (1 << 15) /* codec clk & frm slave */
-+
-+#define SND_SOC_DAIFMT_FORMAT_MASK 0x00ff
-+#define SND_SOC_DAIFMT_INV_MASK 0x0f00
-+#define SND_SOC_DAIFMT_CLOCK_MASK 0xf000
-+
-+/*
-+ * DAI hardware audio direction
-+ */
-+#define SND_SOC_DAIDIR_PLAYBACK 0x1
-+#define SND_SOC_DAIDIR_CAPTURE 0x2
-+
-+/*
-+ * DAI hardware Time Division Multiplexing (TDM) Slots
-+ * Left and Right data word positions
-+ * This is measured in words (sample size) and not bits.
-+ */
-+#define SND_SOC_DAITDM_LRDW(l,r) ((l << 8) | r)
-+
-+/*
-+ * DAI hardware clock ratios
-+ * bit clock can either be a generated by dividing mclk or
-+ * by multiplying sample rate, hence there are 2 definitions below
-+ * depending on codec type.
-+ */
-+/* ratio of sample rate to mclk/sysclk */
-+#define SND_SOC_FS_ALL 0xffff /* all mclk supported */
-+
-+/* bit clock dividers */
-+#define SND_SOC_FSBD(x) (1 << (x - 1)) /* ratio mclk:bclk */
-+#define SND_SOC_FSBD_REAL(x) (ffs(x))
-+
-+/* bit clock ratio to (sample rate * channels * word size) */
-+#define SND_SOC_FSBW(x) (1 << (x - 1))
-+#define SND_SOC_FSBW_REAL(x) (ffs(x))
-+/* all bclk ratios supported */
-+#define SND_SOC_FSB_ALL ~0ULL
-+
-+/*
-+ * DAI hardware flags
-+ */
-+/* use bfs mclk divider mode (BCLK = MCLK / x) */
-+#define SND_SOC_DAI_BFS_DIV 0x1
-+/* use bfs rate mulitplier (BCLK = RATE * x)*/
-+#define SND_SOC_DAI_BFS_RATE 0x2
-+/* use bfs rcw multiplier (BCLK = RATE * CHN * WORD SIZE) */
-+#define SND_SOC_DAI_BFS_RCW 0x4
-+/* capture and playback can use different clocks */
-+#define SND_SOC_DAI_ASYNC 0x8
-+/* can use gated BCLK */
-+#define SND_SOC_DAI_GATED 0x10
-+
-+/*
-+ * AC97 codec ID's bitmask
-+ */
-+#define SND_SOC_DAI_AC97_ID0 (1 << 0)
-+#define SND_SOC_DAI_AC97_ID1 (1 << 1)
-+#define SND_SOC_DAI_AC97_ID2 (1 << 2)
-+#define SND_SOC_DAI_AC97_ID3 (1 << 3)
-+
-+struct snd_soc_device;
-+struct snd_soc_pcm_stream;
-+struct snd_soc_ops;
-+struct snd_soc_dai_mode;
-+struct snd_soc_pcm_runtime;
-+struct snd_soc_codec_dai;
-+struct snd_soc_cpu_dai;
-+struct snd_soc_codec;
-+struct snd_soc_machine_config;
-+struct soc_enum;
-+struct snd_soc_ac97_ops;
-+struct snd_soc_clock_info;
-+
-+typedef int (*hw_write_t)(void *,const char* ,int);
-+typedef int (*hw_read_t)(void *,char* ,int);
-+
-+extern struct snd_ac97_bus_ops soc_ac97_ops;
-+
-+/* pcm <-> DAI connect */
-+void snd_soc_free_pcms(struct snd_soc_device *socdev);
-+int snd_soc_new_pcms(struct snd_soc_device *socdev, int idx, const char *xid);
-+int snd_soc_register_card(struct snd_soc_device *socdev);
-+
-+/* set runtime hw params */
-+int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream,
-+ const struct snd_pcm_hardware *hw);
-+int snd_soc_get_rate(int rate);
-+
-+/* codec IO */
-+#define snd_soc_read(codec, reg) codec->read(codec, reg)
-+#define snd_soc_write(codec, reg, value) codec->write(codec, reg, value)
-+
-+/* codec register bit access */
-+int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg,
-+ unsigned short mask, unsigned short value);
-+int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg,
-+ unsigned short mask, unsigned short value);
-+
-+int snd_soc_new_ac97_codec(struct snd_soc_codec *codec,
-+ struct snd_ac97_bus_ops *ops, int num);
-+void snd_soc_free_ac97_codec(struct snd_soc_codec *codec);
-+
-+/*
-+ *Controls
-+ */
-+struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
-+ void *data, char *long_name);
-+int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo);
-+int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo);
-+int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol);
-+int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol);
-+int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo);
-+int snd_soc_info_volsw_ext(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo);
-+int snd_soc_info_bool_ext(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo);
-+int snd_soc_get_volsw(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol);
-+int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol);
-+int snd_soc_info_volsw_2r(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo);
-+int snd_soc_get_volsw_2r(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol);
-+int snd_soc_put_volsw_2r(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol);
-+
-+/* SoC PCM stream information */
-+struct snd_soc_pcm_stream {
-+ char *stream_name;
-+ unsigned int rate_min; /* min rate */
-+ unsigned int rate_max; /* max rate */
-+ unsigned int channels_min; /* min channels */
-+ unsigned int channels_max; /* max channels */
-+ unsigned int active:1; /* stream is in use */
-+};
-+
-+/* SoC audio ops */
-+struct snd_soc_ops {
-+ int (*startup)(struct snd_pcm_substream *);
-+ void (*shutdown)(struct snd_pcm_substream *);
-+ int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
-+ int (*hw_free)(struct snd_pcm_substream *);
-+ int (*prepare)(struct snd_pcm_substream *);
-+ int (*trigger)(struct snd_pcm_substream *, int);
-+};
-+
-+/* SoC DAI hardware mode */
-+struct snd_soc_dai_mode {
-+ u16 fmt; /* SND_SOC_DAIFMT_* */
-+ u16 tdm; /* SND_SOC_HWTDM_* */
-+ u64 pcmfmt; /* SNDRV_PCM_FMTBIT_* */
-+ u16 pcmrate; /* SND_SOC_HWRATE_* */
-+ u16 pcmdir:2; /* SND_SOC_HWDIR_* */
-+ u16 flags:8; /* hw flags */
-+ u16 fs; /* mclk to rate divider */
-+ u64 bfs; /* mclk to bclk dividers */
-+ unsigned long priv; /* private mode data */
-+};
-+
-+/* DAI capabilities */
-+struct snd_soc_dai_cap {
-+ int num_modes; /* number of DAI modes */
-+ struct snd_soc_dai_mode *mode; /* array of supported DAI modes */
-+};
-+
-+/* SoC Codec DAI */
-+struct snd_soc_codec_dai {
-+ char *name;
-+ int id;
-+
-+ /* DAI capabilities */
-+ struct snd_soc_pcm_stream playback;
-+ struct snd_soc_pcm_stream capture;
-+ struct snd_soc_dai_cap caps;
-+
-+ /* DAI runtime info */
-+ struct snd_soc_dai_mode dai_runtime;
-+ struct snd_soc_ops ops;
-+ unsigned int (*config_sysclk)(struct snd_soc_codec_dai*,
-+ struct snd_soc_clock_info *info, unsigned int clk);
-+ int (*digital_mute)(struct snd_soc_codec *,
-+ struct snd_soc_codec_dai*, int);
-+ unsigned int mclk; /* the audio master clock */
-+ unsigned int pll_in; /* the PLL input clock */
-+ unsigned int pll_out; /* the PLL output clock */
-+ unsigned int clk_div; /* internal clock divider << 1 (for fractions) */
-+ unsigned int active;
-+ unsigned char pop_wait:1;
-+
-+ /* DAI private data */
-+ void *private_data;
-+};
-+
-+/* SoC CPU DAI */
-+struct snd_soc_cpu_dai {
-+
-+ /* DAI description */
-+ char *name;
-+ unsigned int id;
-+ unsigned char type;
-+
-+ /* DAI callbacks */
-+ int (*probe)(struct platform_device *pdev);
-+ void (*remove)(struct platform_device *pdev);
-+ int (*suspend)(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *cpu_dai);
-+ int (*resume)(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *cpu_dai);
-+ unsigned int (*config_sysclk)(struct snd_soc_cpu_dai *cpu_dai,
-+ struct snd_soc_clock_info *info, unsigned int clk);
-+
-+ /* DAI capabilities */
-+ struct snd_soc_pcm_stream capture;
-+ struct snd_soc_pcm_stream playback;
-+ struct snd_soc_dai_cap caps;
-+
-+ /* DAI runtime info */
-+ struct snd_soc_dai_mode dai_runtime;
-+ struct snd_soc_ops ops;
-+ struct snd_pcm_runtime *runtime;
-+ unsigned char active:1;
-+ unsigned int mclk;
-+ void *dma_data;
-+
-+ /* DAI private data */
-+ void *private_data;
-+};
-+
-+/* SoC Audio Codec */
-+struct snd_soc_codec {
-+ char *name;
-+ struct module *owner;
-+ struct mutex mutex;
-+
-+ /* callbacks */
-+ int (*dapm_event)(struct snd_soc_codec *codec, int event);
-+
-+ /* runtime */
-+ struct snd_card *card;
-+ struct snd_ac97 *ac97; /* for ad-hoc ac97 devices */
-+ unsigned int active;
-+ unsigned int pcm_devs;
-+ void *private_data;
-+
-+ /* codec IO */
-+ void *control_data; /* codec control (i2c/3wire) data */
-+ unsigned int (*read)(struct snd_soc_codec *, unsigned int);
-+ int (*write)(struct snd_soc_codec *, unsigned int, unsigned int);
-+ hw_write_t hw_write;
-+ hw_read_t hw_read;
-+ void *reg_cache;
-+ short reg_cache_size;
-+ short reg_cache_step;
-+
-+ /* dapm */
-+ struct list_head dapm_widgets;
-+ struct list_head dapm_paths;
-+ unsigned int dapm_state;
-+ unsigned int suspend_dapm_state;
-+
-+ /* codec DAI's */
-+ struct snd_soc_codec_dai *dai;
-+ unsigned int num_dai;
-+};
-+
-+/* codec device */
-+struct snd_soc_codec_device {
-+ int (*probe)(struct platform_device *pdev);
-+ int (*remove)(struct platform_device *pdev);
-+ int (*suspend)(struct platform_device *pdev, pm_message_t state);
-+ int (*resume)(struct platform_device *pdev);
-+};
-+
-+/* SoC platform interface */
-+struct snd_soc_platform {
-+ char *name;
-+
-+ int (*probe)(struct platform_device *pdev);
-+ int (*remove)(struct platform_device *pdev);
-+ int (*suspend)(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *cpu_dai);
-+ int (*resume)(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *cpu_dai);
-+
-+ /* pcm creation and destruction */
-+ int (*pcm_new)(struct snd_card *, struct snd_soc_codec_dai *,
-+ struct snd_pcm *);
-+ void (*pcm_free)(struct snd_pcm *);
-+
-+ /* platform stream ops */
-+ struct snd_pcm_ops *pcm_ops;
-+};
-+
-+/* SoC machine DAI configuration, glues a codec and cpu DAI together */
-+struct snd_soc_dai_link {
-+ char *name; /* Codec name */
-+ char *stream_name; /* Stream name */
-+
-+ /* DAI */
-+ struct snd_soc_codec_dai *codec_dai;
-+ struct snd_soc_cpu_dai *cpu_dai;
-+ u32 flags; /* DAI config preference flags */
-+
-+ /* codec/machine specific init - e.g. add machine controls */
-+ int (*init)(struct snd_soc_codec *codec);
-+
-+ /* audio sysclock configuration */
-+ unsigned int (*config_sysclk)(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info);
-+};
-+
-+/* SoC machine */
-+struct snd_soc_machine {
-+ char *name;
-+
-+ int (*probe)(struct platform_device *pdev);
-+ int (*remove)(struct platform_device *pdev);
-+
-+ /* the pre and post PM functions are used to do any PM work before and
-+ * after the codec and DAI's do any PM work. */
-+ int (*suspend_pre)(struct platform_device *pdev, pm_message_t state);
-+ int (*suspend_post)(struct platform_device *pdev, pm_message_t state);
-+ int (*resume_pre)(struct platform_device *pdev);
-+ int (*resume_post)(struct platform_device *pdev);
-+
-+ /* machine stream operations */
-+ struct snd_soc_ops *ops;
-+
-+ /* CPU <--> Codec DAI links */
-+ struct snd_soc_dai_link *dai_link;
-+ int num_links;
-+};
-+
-+/* SoC Device - the audio subsystem */
-+struct snd_soc_device {
-+ struct device *dev;
-+ struct snd_soc_machine *machine;
-+ struct snd_soc_platform *platform;
-+ struct snd_soc_codec *codec;
-+ struct snd_soc_codec_device *codec_dev;
-+ void *codec_data;
-+};
-+
-+/* runtime channel data */
-+struct snd_soc_pcm_runtime {
-+ struct snd_soc_codec_dai *codec_dai;
-+ struct snd_soc_cpu_dai *cpu_dai;
-+ struct snd_soc_device *socdev;
-+};
-+
-+/* enumerated kcontrol */
-+struct soc_enum {
-+ unsigned short reg;
-+ unsigned short reg2;
-+ unsigned char shift_l;
-+ unsigned char shift_r;
-+ unsigned int mask;
-+ const char **texts;
-+ void *dapm;
-+};
-+
-+/* clocking configuration data */
-+struct snd_soc_clock_info {
-+ unsigned int rate;
-+ unsigned int fs;
-+ unsigned int bclk_master;
-+};
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/Kconfig
-===================================================================
---- linux-2.6-pxa-new.orig/sound/Kconfig
-+++ linux-2.6-pxa-new/sound/Kconfig
-@@ -76,6 +76,8 @@ source "sound/sparc/Kconfig"
-
- source "sound/parisc/Kconfig"
-
-+source "sound/soc/Kconfig"
-+
- endmenu
-
- menu "Open Sound System"
-Index: linux-2.6-pxa-new/sound/soc/Kconfig
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/Kconfig
-@@ -0,0 +1,37 @@
-+#
-+# SoC audio configuration
-+#
-+
-+menu "SoC audio support"
-+ depends on SND!=n
-+
-+config SND_SOC_AC97_BUS
-+ bool
-+
-+config SND_SOC
-+ tristate "SoC audio support"
-+ ---help---
-+
-+ If you want SoC support, you should say Y here and also to the
-+ specific driver for your SoC below. You will also need to select the
-+ specific codec(s) attached to the SoC
-+
-+ This SoC audio support can also be built as a module. If so, the module
-+ will be called snd-soc-core.
-+
-+# All the supported Soc's
-+menu "Soc Platforms"
-+depends on SND_SOC
-+source "sound/soc/pxa/Kconfig"
-+source "sound/soc/at91/Kconfig"
-+source "sound/soc/imx/Kconfig"
-+source "sound/soc/s3c24xx/Kconfig"
-+endmenu
-+
-+# Supported codecs
-+menu "Soc Codecs"
-+depends on SND_SOC
-+source "sound/soc/codecs/Kconfig"
-+endmenu
-+
-+endmenu
-Index: linux-2.6-pxa-new/sound/soc/Makefile
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/Makefile
-@@ -0,0 +1,4 @@
-+snd-soc-core-objs := soc-core.o soc-dapm.o
-+
-+obj-$(CONFIG_SND_SOC) += snd-soc-core.o
-+obj-$(CONFIG_SND_SOC) += pxa/ at91/ imx/ s3c24xx/ codecs/
-Index: linux-2.6-pxa-new/sound/soc/codecs/Kconfig
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/Kconfig
-@@ -0,0 +1,90 @@
-+config SND_SOC_AC97_CODEC
-+ tristate "SoC generic AC97 support"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want generic AC97 support. This is not required
-+ for the AC97 codecs listed below.
-+
-+config SND_SOC_WM8711
-+ tristate "SoC driver for the WM8711 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM8711 codec.
-+
-+config SND_SOC_WM8510
-+ tristate "SoC driver for the WM8510 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM8711 codec.
-+
-+config SND_SOC_WM8731
-+ tristate "SoC driver for the WM8731 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM8731 codec.
-+
-+config SND_SOC_WM8750
-+ tristate "SoC driver for the WM8750 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM8750 codec.
-+
-+config SND_SOC_WM8753
-+ tristate "SoC driver for the WM8753 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM8753 codec.
-+
-+config SND_SOC_WM8772
-+ tristate "SoC driver for the WM8772 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM8772 codec.
-+
-+config SND_SOC_WM8971
-+ tristate "SoC driver for the WM8971 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM8971 codec.
-+
-+config SND_SOC_WM8976
-+ tristate "SoC driver for the WM8976 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM8976 codec.
-+
-+config SND_SOC_WM8974
-+ tristate "SoC driver for the WM8974 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM8974 codec.
-+
-+config SND_SOC_WM8980
-+ tristate "SoC driver for the WM8980 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM8980 codec.
-+
-+config SND_SOC_WM9713
-+ tristate "SoC driver for the WM9713 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM9713 codec.
-+
-+config SND_SOC_WM9712
-+ tristate "SoC driver for the WM9712 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the WM9712 codec.
-+
-+config SND_SOC_UDA1380
-+ tristate "SoC driver for the UDA1380 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the UDA1380 codec.
-+
-+config SND_SOC_AK4535
-+ tristate "SoC driver for the AK4535 codec"
-+ depends SND_SOC
-+ help
-+ Say Y or M if you want to support the AK4535 codec.
-Index: linux-2.6-pxa-new/sound/soc/codecs/Makefile
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/Makefile
-@@ -0,0 +1,31 @@
-+snd-soc-ac97-objs := ac97.o
-+snd-soc-wm8711-objs := wm8711.o
-+snd-soc-wm8510-objs := wm8510.o
-+snd-soc-wm8731-objs := wm8731.o
-+snd-soc-wm8750-objs := wm8750.o
-+snd-soc-wm8753-objs := wm8753.o
-+snd-soc-wm8772-objs := wm8772.o
-+snd-soc-wm8971-objs := wm8971.o
-+snd-soc-wm8974-objs := wm8974.o
-+snd-soc-wm8976-objs := wm8976.o
-+snd-soc-wm8980-objs := wm8980.o
-+snd-soc-uda1380-objs := uda1380.o
-+snd-soc-ak4535-objs := ak4535.o
-+snd-soc-wm9713-objs := wm9713.o
-+snd-soc-wm9712-objs := wm9712.o
-+
-+obj-$(CONFIG_SND_SOC_AC97_CODEC) += snd-soc-ac97.o
-+obj-$(CONFIG_SND_SOC_WM8711) += snd-soc-wm8711.o
-+obj-$(CONFIG_SND_SOC_WM8510) += snd-soc-wm8510.o
-+obj-$(CONFIG_SND_SOC_WM8731) += snd-soc-wm8731.o
-+obj-$(CONFIG_SND_SOC_WM8750) += snd-soc-wm8750.o
-+obj-$(CONFIG_SND_SOC_WM8753) += snd-soc-wm8753.o
-+obj-$(CONFIG_SND_SOC_WM8772) += snd-soc-wm8772.o
-+obj-$(CONFIG_SND_SOC_WM8971) += snd-soc-wm8971.o
-+obj-$(CONFIG_SND_SOC_WM8974) += snd-soc-wm8974.o
-+obj-$(CONFIG_SND_SOC_WM8976) += snd-soc-wm8976.o
-+obj-$(CONFIG_SND_SOC_WM8980) += snd-soc-wm8980.o
-+obj-$(CONFIG_SND_SOC_UDA1380) += snd-soc-uda1380.o
-+obj-$(CONFIG_SND_SOC_AK4535) += snd-soc-ak4535.o
-+obj-$(CONFIG_SND_SOC_WM9713) += snd-soc-wm9713.o
-+obj-$(CONFIG_SND_SOC_WM9712) += snd-soc-wm9712.o
-Index: linux-2.6-pxa-new/sound/soc/codecs/ac97.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/ac97.c
-@@ -0,0 +1,167 @@
-+/*
-+ * ac97.c -- ALSA Soc AC97 codec support
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 17th Oct 2005 Initial version.
-+ *
-+ * Generic AC97 support.
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/ac97_codec.h>
-+#include <sound/initval.h>
-+#include <sound/soc.h>
-+
-+#define AC97_VERSION "0.5"
-+
-+#define AC97_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define AC97_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000)
-+
-+/* may need to expand this */
-+static struct snd_soc_dai_mode soc_ac97[] = {
-+ {0, 0, SNDRV_PCM_FMTBIT_S16_LE, AC97_RATES},
-+ {0, 0, SNDRV_PCM_FMTBIT_S18_3LE, AC97_RATES},
-+ {0, 0, SNDRV_PCM_FMTBIT_S20_3LE, AC97_RATES},
-+};
-+
-+static int ac97_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ int reg = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
-+ AC97_PCM_FRONT_DAC_RATE : AC97_PCM_LR_ADC_RATE;
-+ return snd_ac97_set_rate(codec->ac97, reg, runtime->rate);
-+}
-+
-+static struct snd_soc_codec_dai ac97_dai = {
-+ .name = "AC97 HiFi",
-+ .playback = {
-+ .stream_name = "AC97 Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .stream_name = "AC97 Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .prepare = ac97_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(soc_ac97),
-+ .mode = soc_ac97,},
-+};
-+
-+static unsigned int ac97_read(struct snd_soc_codec *codec,
-+ unsigned int reg)
-+{
-+ return soc_ac97_ops.read(codec->ac97, reg);
-+}
-+
-+static int ac97_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int val)
-+{
-+ soc_ac97_ops.write(codec->ac97, reg, val);
-+ return 0;
-+}
-+
-+static int ac97_soc_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec;
-+ struct snd_ac97_bus *ac97_bus;
-+ struct snd_ac97_template ac97_template;
-+ int ret = 0;
-+
-+ printk(KERN_INFO "AC97 SoC Audio Codec %s\n", AC97_VERSION);
-+
-+ socdev->codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (socdev->codec == NULL)
-+ return -ENOMEM;
-+ codec = socdev->codec;
-+ mutex_init(&codec->mutex);
-+
-+ codec->name = "AC97";
-+ codec->owner = THIS_MODULE;
-+ codec->dai = &ac97_dai;
-+ codec->num_dai = 1;
-+ codec->write = ac97_write;
-+ codec->read = ac97_read;
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if(ret < 0)
-+ goto err;
-+
-+ /* add codec as bus device for standard ac97 */
-+ ret = snd_ac97_bus(codec->card, 0, &soc_ac97_ops, NULL, &ac97_bus);
-+ if(ret < 0)
-+ goto bus_err;
-+
-+ memset(&ac97_template, 0, sizeof(struct snd_ac97_template));
-+ ret = snd_ac97_mixer(ac97_bus, &ac97_template, &codec->ac97);
-+ if(ret < 0)
-+ goto bus_err;
-+
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0)
-+ goto bus_err;
-+ return 0;
-+
-+bus_err:
-+ snd_soc_free_pcms(socdev);
-+
-+err:
-+ kfree(socdev->codec->reg_cache);
-+ kfree(socdev->codec);
-+ socdev->codec = NULL;
-+ return ret;
-+}
-+
-+static int ac97_soc_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if(codec == NULL)
-+ return 0;
-+
-+ snd_soc_free_pcms(socdev);
-+ kfree(socdev->codec->reg_cache);
-+ kfree(socdev->codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_ac97= {
-+ .probe = ac97_soc_probe,
-+ .remove = ac97_soc_remove,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_ac97);
-+
-+MODULE_DESCRIPTION("Soc Generic AC97 driver");
-+MODULE_AUTHOR("Liam Girdwood");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/ac97.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/ac97.h
-@@ -0,0 +1,18 @@
-+/*
-+ * linux/sound/codecs/ac97.h -- ALSA SoC Layer
-+ *
-+ * Author: Liam Girdwood
-+ * Created: Dec 1st 2005
-+ * Copyright: Wolfson Microelectronics. PLC.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __LINUX_SND_SOC_AC97_H
-+#define __LINUX_SND_SOC_AC97_H
-+
-+extern struct snd_soc_codec_device soc_codec_dev_ac97;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/codecs/ak4535.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/ak4535.c
-@@ -0,0 +1,701 @@
-+/*
-+ * ak4535.c -- AK4535 ALSA Soc Audio driver
-+ *
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <richard@openedhand.com>
-+ *
-+ * Based on wm8753.c by Liam Girdwood
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/i2c.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+#include "ak4535.h"
-+
-+#define AUDIO_NAME "ak4535"
-+#define AK4535_VERSION "0.3"
-+
-+struct snd_soc_codec_device soc_codec_dev_ak4535;
-+
-+/*
-+ * ak4535 register cache
-+ */
-+static const u16 ak4535_reg[AK4535_CACHEREGNUM] = {
-+ 0x0000, 0x0080, 0x0000, 0x0003,
-+ 0x0002, 0x0000, 0x0011, 0x0001,
-+ 0x0000, 0x0040, 0x0036, 0x0010,
-+ 0x0000, 0x0000, 0x0057, 0x0000,
-+};
-+
-+#define AK4535_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_CBS_CFS | \
-+ SND_SOC_DAIFMT_NB_NF)
-+
-+#define AK4535_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define AK4535_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000)
-+
-+static struct snd_soc_dai_mode ak4535_modes[] = {
-+ /* codec frame and clock slave modes */
-+ {
-+ .fmt = AK4535_DAIFMT,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = AK4535_RATES,
-+ .pcmdir = AK4535_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = AK4535_DAIFMT,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = AK4535_RATES,
-+ .pcmdir = AK4535_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 32,
-+ },
-+};
-+
-+/*
-+ * read ak4535 register cache
-+ */
-+static inline unsigned int ak4535_read_reg_cache(struct snd_soc_codec *codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg >= AK4535_CACHEREGNUM)
-+ return -1;
-+ return cache[reg];
-+}
-+
-+/*
-+ * write ak4535 register cache
-+ */
-+static inline void ak4535_write_reg_cache(struct snd_soc_codec *codec,
-+ u16 reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg >= AK4535_CACHEREGNUM)
-+ return;
-+ cache[reg] = value;
-+}
-+
-+/*
-+ * write to the AK4535 register space
-+ */
-+static int ak4535_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[2];
-+
-+ /* data is
-+ * D15..D8 AK4535 register offset
-+ * D7...D0 register data
-+ */
-+ data[0] = reg & 0xff;
-+ data[1] = value & 0xff;
-+
-+ ak4535_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 2) == 2)
-+ return 0;
-+ else
-+ return -EIO;
-+}
-+
-+static const char *ak4535_mono_gain[] = {"+6dB", "-17dB"};
-+static const char *ak4535_mono_out[] = {"(L + R)/2", "Hi-Z"};
-+static const char *ak4535_hp_out[] = {"Stereo", "Mono"};
-+static const char *ak4535_deemp[] = {"44.1kHz", "Off", "48kHz", "32kHz"};
-+static const char *ak4535_mic_select[] = {"Internal", "External"};
-+
-+static const struct soc_enum ak4535_enum[] = {
-+ SOC_ENUM_SINGLE(AK4535_SIG1, 7, 2, ak4535_mono_gain),
-+ SOC_ENUM_SINGLE(AK4535_SIG1, 6, 2, ak4535_mono_out),
-+ SOC_ENUM_SINGLE(AK4535_MODE2, 2, 2, ak4535_hp_out),
-+ SOC_ENUM_SINGLE(AK4535_DAC, 0, 4, ak4535_deemp),
-+ SOC_ENUM_SINGLE(AK4535_MIC, 1, 2, ak4535_mic_select),
-+};
-+
-+static const struct snd_kcontrol_new ak4535_snd_controls[] = {
-+ SOC_SINGLE("ALC2 Switch", AK4535_SIG1, 1, 1, 0),
-+ SOC_ENUM("Mono 1 Output", ak4535_enum[1]),
-+ SOC_ENUM("Mono 1 Gain", ak4535_enum[0]),
-+ SOC_ENUM("Headphone Output", ak4535_enum[2]),
-+ SOC_ENUM("Playback Deemphasis", ak4535_enum[3]),
-+ SOC_SINGLE("Bass Volume", AK4535_DAC, 2, 3, 0),
-+ SOC_SINGLE("Mic Boost (+20dB) Switch", AK4535_MIC, 0, 1, 0),
-+ SOC_ENUM("Mic Select", ak4535_enum[4]),
-+ SOC_SINGLE("ALC Operation Time", AK4535_TIMER, 0, 3, 0),
-+ SOC_SINGLE("ALC Recovery Time", AK4535_TIMER, 2, 3, 0),
-+ SOC_SINGLE("ALC ZC Time", AK4535_TIMER, 4, 3, 0),
-+ SOC_SINGLE("ALC 1 Switch", AK4535_ALC1, 5, 1, 0),
-+ SOC_SINGLE("ALC 2 Switch", AK4535_ALC1, 6, 1, 0),
-+ SOC_SINGLE("ALC Volume", AK4535_ALC2, 0, 127, 0),
-+ SOC_SINGLE("Capture Volume", AK4535_PGA, 0, 127, 0),
-+ SOC_SINGLE("Left Playback Volume", AK4535_LATT, 0, 127, 1),
-+ SOC_SINGLE("Right Playback Volume", AK4535_RATT, 0, 127, 1),
-+ SOC_SINGLE("AUX Bypass Volume", AK4535_VOL, 0, 15, 0),
-+ SOC_SINGLE("Mic Sidetone Volume", AK4535_VOL, 4, 7, 0),
-+};
-+
-+/* add non dapm controls */
-+static int ak4535_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(ak4535_snd_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&ak4535_snd_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/* Mono 1 Mixer */
-+static const struct snd_kcontrol_new ak4535_mono1_mixer_controls[] = {
-+ SOC_DAPM_SINGLE("Mic Sidetone Switch", AK4535_SIG1, 4, 1, 0),
-+ SOC_DAPM_SINGLE("Mono Playback Switch", AK4535_SIG1, 5, 1, 0),
-+};
-+
-+/* Stereo Mixer */
-+static const struct snd_kcontrol_new ak4535_stereo_mixer_controls[] = {
-+ SOC_DAPM_SINGLE("Mic Sidetone Switch", AK4535_SIG2, 4, 1, 0),
-+ SOC_DAPM_SINGLE("Playback Switch", AK4535_SIG2, 7, 1, 0),
-+ SOC_DAPM_SINGLE("Aux Bypass Switch", AK4535_SIG2, 5, 1, 0),
-+};
-+
-+/* Input Mixer */
-+static const struct snd_kcontrol_new ak4535_input_mixer_controls[] = {
-+ SOC_DAPM_SINGLE("Mic Capture Switch", AK4535_MIC, 2, 1, 0),
-+ SOC_DAPM_SINGLE("Aux Capture Switch", AK4535_MIC, 5, 1, 0),
-+};
-+
-+/* Input mux */
-+static const struct snd_kcontrol_new ak4535_input_mux_control =
-+ SOC_DAPM_ENUM("Input Select", ak4535_enum[0]);
-+
-+/* HP L switch */
-+static const struct snd_kcontrol_new ak4535_hpl_control =
-+ SOC_DAPM_SINGLE("Switch", AK4535_SIG2, 1, 1, 1);
-+
-+/* HP R switch */
-+static const struct snd_kcontrol_new ak4535_hpr_control =
-+ SOC_DAPM_SINGLE("Switch", AK4535_SIG2, 0, 1, 1);
-+
-+/* Speaker switch */
-+static const struct snd_kcontrol_new ak4535_spk_control =
-+ SOC_DAPM_SINGLE("Switch", AK4535_MODE2, 0, 0, 0);
-+
-+/* mono 2 switch */
-+static const struct snd_kcontrol_new ak4535_mono2_control =
-+ SOC_DAPM_SINGLE("Switch", AK4535_SIG1, 0, 1, 0);
-+
-+/* Line out switch */
-+static const struct snd_kcontrol_new ak4535_line_control =
-+ SOC_DAPM_SINGLE("Switch", AK4535_SIG2, 6, 1, 0);
-+
-+/* ak4535 dapm widgets */
-+static const struct snd_soc_dapm_widget ak4535_dapm_widgets[] = {
-+ SND_SOC_DAPM_MIXER("Stereo Mixer", SND_SOC_NOPM, 0, 0,
-+ &ak4535_stereo_mixer_controls[0],
-+ ARRAY_SIZE(ak4535_stereo_mixer_controls)),
-+ SND_SOC_DAPM_MIXER("Mono1 Mixer", SND_SOC_NOPM, 0, 0,
-+ &ak4535_mono1_mixer_controls[0],
-+ ARRAY_SIZE(ak4535_mono1_mixer_controls)),
-+ SND_SOC_DAPM_MIXER("Input Mixer", SND_SOC_NOPM, 0, 0,
-+ &ak4535_input_mixer_controls[0],
-+ ARRAY_SIZE(ak4535_mono1_mixer_controls)),
-+ SND_SOC_DAPM_MUX("Input Mux", SND_SOC_NOPM, 0, 0,
-+ &ak4535_input_mux_control),
-+ SND_SOC_DAPM_DAC("DAC", "Playback", AK4535_PM2, 0, 0),
-+ SND_SOC_DAPM_SWITCH("Mono 2 Enable", SND_SOC_NOPM, 0, 0,
-+ &ak4535_mono2_control),
-+ SND_SOC_DAPM_SWITCH("Speaker Enable", SND_SOC_NOPM, 0, 0,
-+ &ak4535_spk_control),
-+ SND_SOC_DAPM_SWITCH("Line Out Enable", SND_SOC_NOPM, 0, 0,
-+ &ak4535_line_control),
-+ SND_SOC_DAPM_SWITCH("Left HP Enable", SND_SOC_NOPM, 0, 0,
-+ &ak4535_hpl_control),
-+ SND_SOC_DAPM_SWITCH("Right HP Enable", SND_SOC_NOPM, 0, 0,
-+ &ak4535_hpr_control),
-+ SND_SOC_DAPM_OUTPUT("LOUT"),
-+ SND_SOC_DAPM_OUTPUT("HPL"),
-+ SND_SOC_DAPM_OUTPUT("ROUT"),
-+ SND_SOC_DAPM_OUTPUT("HPR"),
-+ SND_SOC_DAPM_OUTPUT("SPP"),
-+ SND_SOC_DAPM_OUTPUT("SPN"),
-+ SND_SOC_DAPM_OUTPUT("MOUT1"),
-+ SND_SOC_DAPM_OUTPUT("MOUT2"),
-+ SND_SOC_DAPM_OUTPUT("MICOUT"),
-+ SND_SOC_DAPM_ADC("ADC", "Capture", AK4535_PM1, 0, 1),
-+ SND_SOC_DAPM_PGA("Spk Amp", AK4535_PM2, 3, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("HP R Amp", AK4535_PM2, 1, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("HP L Amp", AK4535_PM2, 2, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Mic", AK4535_PM1, 1, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Line Out", AK4535_PM1, 4, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Mono Out", AK4535_PM1, 3, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("AUX In", AK4535_PM1, 2, 0, NULL, 0),
-+
-+ SND_SOC_DAPM_MICBIAS("Mic Int Bias", AK4535_MIC, 3, 0),
-+ SND_SOC_DAPM_MICBIAS("Mic Ext Bias", AK4535_MIC, 4, 0),
-+ SND_SOC_DAPM_INPUT("MICIN"),
-+ SND_SOC_DAPM_INPUT("MICEXT"),
-+ SND_SOC_DAPM_INPUT("AUX"),
-+ SND_SOC_DAPM_INPUT("MIN"),
-+ SND_SOC_DAPM_INPUT("AIN"),
-+};
-+
-+static const char *audio_map[][3] = {
-+ /*stereo mixer */
-+ {"Stereo Mixer", "Playback Switch", "DAC"},
-+ {"Stereo Mixer", "Mic Sidetone Switch", "Mic"},
-+ {"Stereo Mixer", "Aux Bypass Switch", "AUX In"},
-+
-+ /* mono1 mixer */
-+ {"Mono1 Mixer", "Mic Sidetone Switch", "Mic"},
-+ {"Mono1 Mixer", "Mono Playback Switch", "DAC"},
-+
-+ /* mono2 mixer */
-+ {"Mono2 Mixer", "Mono Playback Switch", "Stereo Mixer"},
-+
-+ /* Mic */
-+ {"AIN", NULL, "Mic"},
-+ {"Input Mux", "Internal", "Mic Int Bias"},
-+ {"Input Mux", "External", "Mic Ext Bias"},
-+ {"Mic Int Bias", NULL, "MICIN"},
-+ {"Mic Ext Bias", NULL, "MICEXT"},
-+ {"MICOUT", NULL, "Input Mux"},
-+
-+ /* line out */
-+ {"LOUT", "Switch", "Line"},
-+ {"ROUT", "Switch", "Line Out Enable"},
-+ {"Line Out Enable", NULL, "Line Out"},
-+ {"Line Out", NULL, "Stereo Mixer"},
-+
-+ /* mono1 out */
-+ {"MOUT1", NULL, "Mono Out"},
-+ {"Mono Out", NULL, "Mono Mixer"},
-+
-+ /* left HP */
-+ {"HPL", "Switch", "Left HP Enable"},
-+ {"Left HP Enable", NULL, "HP L Amp"},
-+ {"HP L Amp", NULL, "Stereo Mixer"},
-+
-+ /* right HP */
-+ {"HPR", "Switch", "Right HP Enable"},
-+ {"Right HP Enable", NULL, "HP R Amp"},
-+ {"HP R Amp", NULL, "Stereo Mixer"},
-+
-+ /* speaker */
-+ {"SPP", "Switch", "Speaker Enable"},
-+ {"SPN", "Switch", "Speaker Enable"},
-+ {"Speaker Enable", NULL, "Spk Amp"},
-+ {"Spk Amp", NULL, "MIN"},
-+
-+ /* mono 2 */
-+ {"MOUT2", "Switch", "Mono 2 Enable"},
-+ {"Mono 2 Enable", NULL, "Stereo Mixer"},
-+
-+ /* Aux In */
-+ {"Aux In", NULL, "AUX"},
-+
-+ /* ADC */
-+ {"ADC", NULL, "Input Mixer"},
-+ {"Input Mixer", "Mic Capture Switch", "Mic"},
-+ {"Input Mixer", "Aux Capture Switch", "Aux In"},
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int ak4535_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(ak4535_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &ak4535_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path audio_mapnects */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+static int ak4535_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u8 mode = 0, mode2;
-+ int bfs;
-+
-+ mode2 = ak4535_read_reg_cache(codec, AK4535_MODE2);
-+ bfs = SND_SOC_FSBW_REAL(rtd->codec_dai->dai_runtime.bfs);
-+ snd_assert(bfs, return -ENODEV);
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ mode = 0x0002;
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ mode = 0x0001;
-+ break;
-+ }
-+
-+ /* set fs */
-+ switch (rtd->codec_dai->dai_runtime.fs) {
-+ case 1024:
-+ mode2 |= (0x3 << 5);
-+ break;
-+ case 512:
-+ mode2 |= (0x2 << 5);
-+ break;
-+ case 256:
-+ mode2 |= (0x1 << 5);
-+ break;
-+ }
-+
-+ /* bfs */
-+ if (bfs == 64)
-+ mode |= 0x4;
-+
-+ /* set rate */
-+ ak4535_write(codec, AK4535_MODE1, mode);
-+ ak4535_write(codec, AK4535_MODE2, mode2);
-+
-+ return 0;
-+}
-+
-+static unsigned int ak4535_config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ if (info->fs != 256)
-+ return 0;
-+
-+ /* we only support 256 FS atm */
-+ if (info->rate * info->fs == clk) {
-+ dai->mclk = clk;
-+ return clk;
-+ }
-+
-+ return 0;
-+}
-+
-+static int ak4535_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = ak4535_read_reg_cache(codec, AK4535_DAC) & 0xffdf;
-+ if (mute)
-+ ak4535_write(codec, AK4535_DAC, mute_reg);
-+ else
-+ ak4535_write(codec, AK4535_DAC, mute_reg | 0x20);
-+ return 0;
-+}
-+
-+static int ak4535_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* vref/mid, clk and osc on, dac unmute, active */
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* everything off except vref/vmid, dac mute, inactive */
-+ ak4535_write(codec, AK4535_PM1, 0x80);
-+ ak4535_write(codec, AK4535_PM2, 0x0);
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ /* everything off, inactive */
-+ ak4535_write(codec, AK4535_PM1, 0x0);
-+ ak4535_write(codec, AK4535_PM2, 0x80);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+struct snd_soc_codec_dai ak4535_dai = {
-+ .name = "AK4535",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .capture = {
-+ .stream_name = "Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .config_sysclk = ak4535_config_sysclk,
-+ .digital_mute = ak4535_mute,
-+ .ops = {
-+ .prepare = ak4535_pcm_prepare,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(ak4535_modes),
-+ .mode = ak4535_modes,
-+ },
-+};
-+EXPORT_SYMBOL_GPL(ak4535_dai);
-+
-+static int ak4535_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ ak4535_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int ak4535_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(ak4535_reg); i++) {
-+ data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+ ak4535_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ ak4535_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the AK4535 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int ak4535_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int ret = 0;
-+
-+ codec->name = "AK4535";
-+ codec->owner = THIS_MODULE;
-+ codec->read = ak4535_read_reg_cache;
-+ codec->write = ak4535_write;
-+ codec->dapm_event = ak4535_dapm_event;
-+ codec->dai = &ak4535_dai;
-+ codec->num_dai = 1;
-+ codec->reg_cache_size = ARRAY_SIZE(ak4535_reg);
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(ak4535_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache, ak4535_reg,
-+ sizeof(u16) * ARRAY_SIZE(ak4535_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(ak4535_reg);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if (ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* power on device */
-+ ak4535_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+
-+ ak4535_add_controls(codec);
-+ ak4535_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static struct snd_soc_device *ak4535_socdev;
-+
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+
-+#define I2C_DRIVERID_AK4535 0xfefe /* liam - need a proper id */
-+
-+static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END };
-+
-+/* Magic definition of all other variables and things */
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver ak4535_i2c_driver;
-+static struct i2c_client client_template;
-+
-+/* If the i2c layer weren't so broken, we could pass this kind of data
-+ around */
-+static int ak4535_codec_probe(struct i2c_adapter *adap, int addr, int kind)
-+{
-+ struct snd_soc_device *socdev = ak4535_socdev;
-+ struct ak4535_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct i2c_client *i2c;
-+ int ret;
-+
-+ if (addr != setup->i2c_address)
-+ return -ENODEV;
-+
-+ client_template.adapter = adap;
-+ client_template.addr = addr;
-+
-+ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (i2c == NULL){
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+ memcpy(i2c, &client_template, sizeof(struct i2c_client));
-+ i2c_set_clientdata(i2c, codec);
-+ codec->control_data = i2c;
-+
-+ ret = i2c_attach_client(i2c);
-+ if (ret < 0) {
-+ printk(KERN_ERR "failed to attach codec at addr %x\n", addr);
-+ goto err;
-+ }
-+
-+ ret = ak4535_init(socdev);
-+ if (ret < 0) {
-+ printk(KERN_ERR "failed to initialise AK4535\n");
-+ goto err;
-+ }
-+ return ret;
-+
-+err:
-+ kfree(codec);
-+ kfree(i2c);
-+ return ret;
-+}
-+
-+static int ak4535_i2c_detach(struct i2c_client *client)
-+{
-+ struct snd_soc_codec* codec = i2c_get_clientdata(client);
-+ i2c_detach_client(client);
-+ kfree(codec->reg_cache);
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+static int ak4535_i2c_attach(struct i2c_adapter *adap)
-+{
-+ return i2c_probe(adap, &addr_data, ak4535_codec_probe);
-+}
-+
-+/* corgi i2c codec control layer */
-+static struct i2c_driver ak4535_i2c_driver = {
-+ .driver = {
-+ .name = "AK4535 I2C Codec",
-+ .owner = THIS_MODULE,
-+ },
-+ .id = I2C_DRIVERID_AK4535,
-+ .attach_adapter = ak4535_i2c_attach,
-+ .detach_client = ak4535_i2c_detach,
-+ .command = NULL,
-+};
-+
-+static struct i2c_client client_template = {
-+ .name = "AK4535",
-+ .driver = &ak4535_i2c_driver,
-+};
-+#endif
-+
-+static int ak4535_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct ak4535_setup_data *setup;
-+ struct snd_soc_codec* codec;
-+ int ret = 0;
-+
-+ printk(KERN_INFO "AK4535 Audio Codec %s", AK4535_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ ak4535_socdev = socdev;
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ if (setup->i2c_address) {
-+ normal_i2c[0] = setup->i2c_address;
-+ codec->hw_write = (hw_write_t)i2c_master_send;
-+ ret = i2c_add_driver(&ak4535_i2c_driver);
-+ if (ret != 0)
-+ printk(KERN_ERR "can't add i2c driver");
-+ }
-+#else
-+ /* Add other interfaces here */
-+#endif
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int ak4535_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec* codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ ak4535_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ i2c_del_driver(&ak4535_i2c_driver);
-+#endif
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_ak4535 = {
-+ .probe = ak4535_probe,
-+ .remove = ak4535_remove,
-+ .suspend = ak4535_suspend,
-+ .resume = ak4535_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_ak4535);
-+
-+MODULE_DESCRIPTION("Soc AK4535 driver");
-+MODULE_AUTHOR("Richard Purdie");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/ak4535.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/ak4535.h
-@@ -0,0 +1,46 @@
-+/*
-+ * ak4535.h -- AK4535 Soc Audio driver
-+ *
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <richard@openedhand.com>
-+ *
-+ * Based on wm8753.h
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef _AK4535_H
-+#define _AK4535_H
-+
-+/* AK4535 register space */
-+
-+#define AK4535_PM1 0x0
-+#define AK4535_PM2 0x1
-+#define AK4535_SIG1 0x2
-+#define AK4535_SIG2 0x3
-+#define AK4535_MODE1 0x4
-+#define AK4535_MODE2 0x5
-+#define AK4535_DAC 0x6
-+#define AK4535_MIC 0x7
-+#define AK4535_TIMER 0x8
-+#define AK4535_ALC1 0x9
-+#define AK4535_ALC2 0xa
-+#define AK4535_PGA 0xb
-+#define AK4535_LATT 0xc
-+#define AK4535_RATT 0xd
-+#define AK4535_VOL 0xe
-+#define AK4535_STATUS 0xf
-+
-+#define AK4535_CACHEREGNUM 0x10
-+
-+struct ak4535_setup_data {
-+ unsigned short i2c_address;
-+};
-+
-+extern struct snd_soc_codec_dai ak4535_dai;
-+extern struct snd_soc_codec_device soc_codec_dev_ak4535;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/codecs/uda1380.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/uda1380.c
-@@ -0,0 +1,582 @@
-+/*
-+ * uda1380.c - Philips UDA1380 ALSA SoC audio driver
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Modified by Richard Purdie <richard@openedhand.com> to fit into SoC
-+ * codec model.
-+ *
-+ * Copyright (c) 2005 Giorgio Padrin <giorgio@mandarinlogiq.org>
-+ * Copyright 2005 Openedhand Ltd.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/types.h>
-+#include <linux/string.h>
-+#include <linux/slab.h>
-+#include <linux/errno.h>
-+#include <linux/ioctl.h>
-+#include <linux/delay.h>
-+#include <linux/i2c.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/control.h>
-+#include <sound/initval.h>
-+#include <sound/info.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include "uda1380.h"
-+
-+#define UDA1380_VERSION "0.4"
-+
-+/*
-+ * uda1380 register cache
-+ */
-+static const u16 uda1380_reg[UDA1380_CACHEREGNUM] = {
-+ 0x0502, 0x0000, 0x0000, 0x3f3f,
-+ 0x0202, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0xff00, 0x0000, 0x4800,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x8000, 0x0002, 0x0000,
-+};
-+
-+#define UDA1380_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_CBS_CFS | \
-+ SND_SOC_DAIFMT_NB_NF)
-+
-+#define UDA1380_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define UDA1380_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000)
-+
-+static struct snd_soc_dai_mode uda1380_modes[] = {
-+ /* slave rates capture & playback */
-+ {
-+ .fmt = UDA1380_DAIFMT,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = UDA1380_RATES,
-+ .pcmdir = UDA1380_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 64,
-+ },
-+
-+ /* slave rates playback */
-+ {
-+ .fmt = UDA1380_DAIFMT,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 64,
-+ },
-+};
-+
-+/*
-+ * read uda1380 register cache
-+ */
-+static inline unsigned int uda1380_read_reg_cache(struct snd_soc_codec *codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg == UDA1380_RESET)
-+ return 0;
-+ if (reg >= UDA1380_CACHEREGNUM)
-+ return -1;
-+ return cache[reg];
-+}
-+
-+/*
-+ * write uda1380 register cache
-+ */
-+static inline void uda1380_write_reg_cache(struct snd_soc_codec *codec,
-+ u16 reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg >= UDA1380_CACHEREGNUM)
-+ return;
-+ cache[reg] = value;
-+}
-+
-+/*
-+ * write to the UDA1380 register space
-+ */
-+static int uda1380_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[3];
-+
-+ /* data is
-+ * data[0] is register offset
-+ * data[1] is MS byte
-+ * data[2] is LS byte
-+ */
-+ data[0] = reg;
-+ data[1] = (value & 0xff00) >> 8;
-+ data[2] = value & 0x00ff;
-+
-+ uda1380_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 3) == 3)
-+ return 0;
-+ else
-+ return -EIO;
-+}
-+
-+#define uda1380_reset(c) uda1380_write(c, UDA1380_RESET, 0)
-+
-+/* declarations of ALSA reg_elem_REAL controls */
-+static const char *uda1380_deemp[] = {"None", "32kHz", "44.1kHz", "48kHz",
-+ "96kHz"};
-+static const char *uda1380_input_sel[] = {"Line", "Mic"};
-+
-+static const struct soc_enum uda1380_enum[] = {
-+ SOC_ENUM_DOUBLE(UDA1380_DEEMP, 0, 8, 5, uda1380_deemp),
-+ SOC_ENUM_SINGLE(UDA1380_ADC, 3, 2, uda1380_input_sel),
-+};
-+
-+static const struct snd_kcontrol_new uda1380_snd_controls[] = {
-+ SOC_DOUBLE("Playback Volume", UDA1380_MVOL, 0, 8, 127, 0),
-+ SOC_DOUBLE("Treble Volume", UDA1380_MODE, 4, 12, 3, 0),
-+ SOC_DOUBLE("Bass Volume", UDA1380_MODE, 0, 8, 15, 0),
-+ SOC_ENUM("Playback De-emphasis", uda1380_enum[0]),
-+ SOC_DOUBLE("Capture Volume", UDA1380_DEC, 0, 8, 127, 0),
-+ SOC_DOUBLE("Line Capture Volume", UDA1380_PGA, 0, 8, 15, 0),
-+ SOC_SINGLE("Mic Capture Volume", UDA1380_PGA, 8, 11, 0),
-+ SOC_DOUBLE("Playback Switch", UDA1380_DEEMP, 3, 11, 1, 0),
-+ SOC_SINGLE("Capture Switch", UDA1380_PGA, 15, 1, 0),
-+ SOC_SINGLE("AGC Timing", UDA1380_AGC, 8, 7, 0),
-+ SOC_SINGLE("AGC Target level", UDA1380_AGC, 2, 3, 1),
-+ SOC_SINGLE("AGC Switch", UDA1380_AGC, 0, 1, 0),
-+};
-+
-+/* add non dapm controls */
-+static int uda1380_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(uda1380_snd_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&uda1380_snd_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/* Input mux */
-+static const struct snd_kcontrol_new uda1380_input_mux_control =
-+ SOC_DAPM_ENUM("Input Select", uda1380_enum[1]);
-+
-+static const struct snd_soc_dapm_widget uda1380_dapm_widgets[] = {
-+ SND_SOC_DAPM_MUX("Input Mux", SND_SOC_NOPM, 0, 0,
-+ &uda1380_input_mux_control),
-+ SND_SOC_DAPM_PGA("Left PGA", UDA1380_PM, 3, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Right PGA", UDA1380_PM, 1, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Mic LNA", UDA1380_PM, 4, 0, NULL, 0),
-+ SND_SOC_DAPM_ADC("Left ADC", "Left Capture", UDA1380_PM, 2, 0),
-+ SND_SOC_DAPM_ADC("Right ADC", "Right Capture", UDA1380_PM, 0, 0),
-+ SND_SOC_DAPM_INPUT("VINM"),
-+ SND_SOC_DAPM_INPUT("VINL"),
-+ SND_SOC_DAPM_INPUT("VINR"),
-+ SND_SOC_DAPM_MIXER("Analog Mixer", UDA1380_PM, 6, 0, NULL, 0),
-+ SND_SOC_DAPM_OUTPUT("VOUTLHP"),
-+ SND_SOC_DAPM_OUTPUT("VOUTRHP"),
-+ SND_SOC_DAPM_OUTPUT("VOUTL"),
-+ SND_SOC_DAPM_OUTPUT("VOUTR"),
-+ SND_SOC_DAPM_DAC("DAC", "Playback", UDA1380_PM, 10, 0),
-+ SND_SOC_DAPM_PGA("HeadPhone Driver", UDA1380_PM, 13, 0, NULL, 0),
-+};
-+
-+static const char *audio_map[][3] = {
-+
-+ /* analog mixer setup is different from diagram for dapm */
-+ {"HeadPhone Driver", NULL, "Analog Mixer"},
-+ {"VOUTR", NULL, "Analog Mixer"},
-+ {"VOUTL", NULL, "Analog Mixer"},
-+ {"Analog Mixer", NULL, "VINR"},
-+ {"Analog Mixer", NULL, "VINL"},
-+ {"Analog Mixer", NULL, "DAC"},
-+
-+ /* headphone driver */
-+ {"VOUTLHP", NULL, "HeadPhone Driver"},
-+ {"VOUTRHP", NULL, "HeadPhone Driver"},
-+
-+ /* input mux */
-+ {"Left ADC", NULL, "Input Mux"},
-+ {"Input Mux", "Mic", "Mic LNA"},
-+ {"Input Mux", "Line", "Left PGA"},
-+
-+ /* right input */
-+ {"Right ADC", NULL, "Right PGA"},
-+
-+ /* inputs */
-+ {"Mic LNA", NULL, "VINM"},
-+ {"Left PGA", NULL, "VINL"},
-+ {"Right PGA", NULL, "VINR"},
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int uda1380_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(uda1380_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &uda1380_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path audio_mapnects */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+static int uda1380_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 clk = uda1380_read_reg_cache(codec, UDA1380_CLK);
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ uda1380_write(codec, UDA1380_CLK, R00_EN_DAC | R00_EN_INT | clk);
-+ else
-+ uda1380_write(codec, UDA1380_CLK, R00_EN_ADC | R00_EN_DEC | clk);
-+
-+ return 0;
-+}
-+
-+static void uda1380_pcm_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 clk = uda1380_read_reg_cache(codec, UDA1380_CLK);
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ uda1380_write(codec, UDA1380_CLK, ~(R00_EN_DAC | R00_EN_INT) & clk);
-+ else
-+ uda1380_write(codec, UDA1380_CLK, ~(R00_EN_ADC | R00_EN_DEC) & clk);
-+}
-+
-+static unsigned int uda1380_config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ if(info->fs != 256)
-+ return 0;
-+
-+ /* we only support 256 FS atm */
-+ if(info->rate * info->fs == clk) {
-+ dai->mclk = clk;
-+ return clk;
-+ }
-+
-+ return 0;
-+}
-+
-+static int uda1380_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = uda1380_read_reg_cache(codec, UDA1380_DEEMP) & 0xbfff;
-+ if(mute)
-+ uda1380_write(codec, UDA1380_DEEMP, mute_reg | 0x4000);
-+ else
-+ uda1380_write(codec, UDA1380_DEEMP, mute_reg);
-+ return 0;
-+}
-+
-+static int uda1380_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* everything off except internal bias */
-+ uda1380_write(codec, UDA1380_PM, R02_PON_BIAS);
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ /* everything off, inactive */
-+ uda1380_write(codec, UDA1380_PM, 0x0);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+struct snd_soc_codec_dai uda1380_dai = {
-+ .name = "UDA1380",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .capture = {
-+ .stream_name = "Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .config_sysclk = uda1380_config_sysclk,
-+ .digital_mute = uda1380_mute,
-+ .ops = {
-+ .prepare = uda1380_pcm_prepare,
-+ .shutdown = uda1380_pcm_shutdown,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(uda1380_modes),
-+ .mode = uda1380_modes,
-+ },
-+};
-+EXPORT_SYMBOL_GPL(uda1380_dai);
-+
-+static int uda1380_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ uda1380_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int uda1380_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(uda1380_reg); i++) {
-+ data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+ uda1380_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ uda1380_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the UDA1380 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int uda1380_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int ret = 0;
-+
-+ codec->name = "UDA1380";
-+ codec->owner = THIS_MODULE;
-+ codec->read = uda1380_read_reg_cache;
-+ codec->write = uda1380_write;
-+ codec->dapm_event = uda1380_dapm_event;
-+ codec->dai = &uda1380_dai;
-+ codec->num_dai = 1;
-+ codec->reg_cache_size = ARRAY_SIZE(uda1380_reg);
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(uda1380_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache, uda1380_reg,
-+ sizeof(u16) * ARRAY_SIZE(uda1380_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(uda1380_reg);
-+ uda1380_reset(codec);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if(ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* power on device */
-+ uda1380_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ uda1380_write(codec, UDA1380_CLK, 0);
-+
-+ /* uda1380 init */
-+ uda1380_add_controls(codec);
-+ uda1380_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if(ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static struct snd_soc_device *uda1380_socdev;
-+
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+
-+#define I2C_DRIVERID_UDA1380 0xfefe /* liam - need a proper id */
-+
-+static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END };
-+
-+/* Magic definition of all other variables and things */
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver uda1380_i2c_driver;
-+static struct i2c_client client_template;
-+
-+/* If the i2c layer weren't so broken, we could pass this kind of data
-+ around */
-+
-+static int uda1380_codec_probe(struct i2c_adapter *adap, int addr, int kind)
-+{
-+ struct snd_soc_device *socdev = uda1380_socdev;
-+ struct uda1380_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct i2c_client *i2c;
-+ int ret;
-+
-+ if (addr != setup->i2c_address)
-+ return -ENODEV;
-+
-+ client_template.adapter = adap;
-+ client_template.addr = addr;
-+
-+ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (i2c == NULL){
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+ memcpy(i2c, &client_template, sizeof(struct i2c_client));
-+ i2c_set_clientdata(i2c, codec);
-+ codec->control_data = i2c;
-+
-+ ret = i2c_attach_client(i2c);
-+ if(ret < 0) {
-+ printk(KERN_ERR "failed to attach codec at addr %x\n", addr);
-+ goto err;
-+ }
-+
-+ ret = uda1380_init(socdev);
-+ if(ret < 0) {
-+ printk(KERN_ERR "failed to initialise UDA1380\n");
-+ goto err;
-+ }
-+ return ret;
-+
-+err:
-+ kfree(codec);
-+ kfree(i2c);
-+ return ret;
-+}
-+
-+static int uda1380_i2c_detach(struct i2c_client *client)
-+{
-+ struct snd_soc_codec* codec = i2c_get_clientdata(client);
-+ i2c_detach_client(client);
-+ kfree(codec->reg_cache);
-+ kfree(client);
-+ return 0;
-+}
-+
-+static int uda1380_i2c_attach(struct i2c_adapter *adap)
-+{
-+ return i2c_probe(adap, &addr_data, uda1380_codec_probe);
-+}
-+
-+/* corgi i2c codec control layer */
-+static struct i2c_driver uda1380_i2c_driver = {
-+ .driver = {
-+ .name = "UDA1380 I2C Codec",
-+ .owner = THIS_MODULE,
-+ },
-+ .id = I2C_DRIVERID_UDA1380,
-+ .attach_adapter = uda1380_i2c_attach,
-+ .detach_client = uda1380_i2c_detach,
-+ .command = NULL,
-+};
-+
-+static struct i2c_client client_template = {
-+ .name = "UDA1380",
-+ .driver = &uda1380_i2c_driver,
-+};
-+#endif
-+
-+static int uda1380_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct uda1380_setup_data *setup;
-+ struct snd_soc_codec* codec;
-+ int ret = 0;
-+
-+ printk(KERN_INFO "UDA1380 Audio Codec %s", UDA1380_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ uda1380_socdev = socdev;
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ if (setup->i2c_address) {
-+ normal_i2c[0] = setup->i2c_address;
-+ codec->hw_write = (hw_write_t)i2c_master_send;
-+ ret = i2c_add_driver(&uda1380_i2c_driver);
-+ if (ret != 0)
-+ printk(KERN_ERR "can't add i2c driver");
-+ }
-+#else
-+ /* Add other interfaces here */
-+#endif
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int uda1380_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec* codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ uda1380_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ i2c_del_driver(&uda1380_i2c_driver);
-+#endif
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_uda1380 = {
-+ .probe = uda1380_probe,
-+ .remove = uda1380_remove,
-+ .suspend = uda1380_suspend,
-+ .resume = uda1380_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_uda1380);
-+
-+MODULE_AUTHOR("Giorgio Padrin");
-+MODULE_DESCRIPTION("Audio support for codec Philips UDA1380");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/uda1380.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/uda1380.h
-@@ -0,0 +1,56 @@
-+/*
-+ * Audio support for Philips UDA1380
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Copyright (c) 2005 Giorgio Padrin <giorgio@mandarinlogiq.org>
-+ */
-+
-+#define UDA1380_CLK 0x00
-+#define UDA1380_IFACE 0x01
-+#define UDA1380_PM 0x02
-+#define UDA1380_AMIX 0x03
-+#define UDA1380_HP 0x04
-+#define UDA1380_MVOL 0x10
-+#define UDA1380_MIXVOL 0x11
-+#define UDA1380_MODE 0x12
-+#define UDA1380_DEEMP 0x13
-+#define UDA1380_MIXER 0x14
-+#define UDA1380_INTSTAT 0x18
-+#define UDA1380_DEC 0x20
-+#define UDA1380_PGA 0x21
-+#define UDA1380_ADC 0x22
-+#define UDA1380_AGC 0x23
-+#define UDA1380_DECSTAT 0x28
-+#define UDA1380_RESET 0x7f
-+
-+#define UDA1380_CACHEREGNUM 0x24
-+
-+/* Register flags */
-+#define R00_EN_ADC 0x0800
-+#define R00_EN_DEC 0x0400
-+#define R00_EN_DAC 0x0200
-+#define R00_EN_INT 0x0100
-+#define R02_PON_HP 0x2000
-+#define R02_PON_DAC 0x0400
-+#define R02_PON_BIAS 0x0100
-+#define R02_PON_LNA 0x0010
-+#define R02_PON_PGAL 0x0008
-+#define R02_PON_ADCL 0x0004
-+#define R02_PON_PGAR 0x0002
-+#define R02_PON_ADCR 0x0001
-+#define R13_MTM 0x4000
-+#define R21_MT_ADC 0x8000
-+#define R22_SEL_LNA 0x0008
-+#define R22_SEL_MIC 0x0004
-+#define R22_SKIP_DCFIL 0x0002
-+#define R23_AGC_EN 0x0001
-+
-+struct uda1380_setup_data {
-+ unsigned short i2c_address;
-+};
-+
-+extern struct snd_soc_codec_dai uda1380_dai;
-+extern struct snd_soc_codec_device soc_codec_dev_uda1380;
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8731.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8731.c
-@@ -0,0 +1,886 @@
-+/*
-+ * wm8731.c -- WM8731 ALSA SoC Audio driver
-+ *
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <richard@openedhand.com>
-+ *
-+ * Based on wm8753.c by Liam Girdwood
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/i2c.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+#include "wm8731.h"
-+
-+#define AUDIO_NAME "wm8731"
-+#define WM8731_VERSION "0.12"
-+
-+/*
-+ * Debug
-+ */
-+
-+#define WM8731_DEBUG 0
-+
-+#ifdef WM8731_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...) do {} while (0)
-+#endif
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8731;
-+
-+/*
-+ * wm8731 register cache
-+ * We can't read the WM8731 register space when we are
-+ * using 2 wire for device control, so we cache them instead.
-+ * There is no point in caching the reset register
-+ */
-+static const u16 wm8731_reg[WM8731_CACHEREGNUM] = {
-+ 0x0097, 0x0097, 0x0079, 0x0079,
-+ 0x000a, 0x0008, 0x009f, 0x000a,
-+ 0x0000, 0x0000
-+};
-+
-+#define WM8731_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_RIGHT_J | \
-+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_NB_IF | SND_SOC_DAIFMT_IB_NF | \
-+ SND_SOC_DAIFMT_IB_IF)
-+
-+#define WM8731_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define WM8731_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
-+
-+#define WM8731_HIFI_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
-+
-+static struct snd_soc_dai_mode wm8731_modes[] = {
-+ /* codec frame and clock master modes */
-+ /* 8k */
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 1536,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 2304,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 1408,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 2112,
-+ .bfs = 64,
-+ },
-+
-+ /* 32k */
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 384,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 576,
-+ .bfs = 64,
-+ },
-+
-+ /* 44.1k & 48k */
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 384,
-+ .bfs = 64,
-+ },
-+
-+ /* 88.2 & 96k */
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 128,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 192,
-+ .bfs = 64,
-+ },
-+
-+ /* USB codec frame and clock master modes */
-+ /* 8k */
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1500,
-+ .bfs = SND_SOC_FSBD(1),
-+ },
-+
-+ /* 44.1k */
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 272,
-+ .bfs = SND_SOC_FSBD(1),
-+ },
-+
-+ /* 48k */
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 250,
-+ .bfs = SND_SOC_FSBD(1),
-+ },
-+
-+ /* 88.2k */
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 136,
-+ .bfs = SND_SOC_FSBD(1),
-+ },
-+
-+ /* 96k */
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 125,
-+ .bfs = SND_SOC_FSBD(1),
-+ },
-+
-+ /* codec frame and clock slave modes */
-+ {
-+ .fmt = WM8731_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM8731_HIFI_BITS,
-+ .pcmrate = WM8731_RATES,
-+ .pcmdir = WM8731_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+/*
-+ * read wm8731 register cache
-+ */
-+static inline unsigned int wm8731_read_reg_cache(struct snd_soc_codec *codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg == WM8731_RESET)
-+ return 0;
-+ if (reg >= WM8731_CACHEREGNUM)
-+ return -1;
-+ return cache[reg];
-+}
-+
-+/*
-+ * write wm8731 register cache
-+ */
-+static inline void wm8731_write_reg_cache(struct snd_soc_codec *codec,
-+ u16 reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg >= WM8731_CACHEREGNUM)
-+ return;
-+ cache[reg] = value;
-+}
-+
-+/*
-+ * write to the WM8731 register space
-+ */
-+static int wm8731_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[2];
-+
-+ /* data is
-+ * D15..D9 WM8731 register offset
-+ * D8...D0 register data
-+ */
-+ data[0] = (reg << 1) | ((value >> 8) & 0x0001);
-+ data[1] = value & 0x00ff;
-+
-+ wm8731_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 2) == 2)
-+ return 0;
-+ else
-+ return -EIO;
-+}
-+
-+#define wm8731_reset(c) wm8731_write(c, WM8731_RESET, 0)
-+
-+static const char *wm8731_input_select[] = {"Line In", "Mic"};
-+static const char *wm8731_deemph[] = {"None", "32Khz", "44.1Khz", "48Khz"};
-+
-+static const struct soc_enum wm8731_enum[] = {
-+ SOC_ENUM_SINGLE(WM8731_APANA, 2, 2, wm8731_input_select),
-+ SOC_ENUM_SINGLE(WM8731_APDIGI, 1, 4, wm8731_deemph),
-+};
-+
-+static const struct snd_kcontrol_new wm8731_snd_controls[] = {
-+
-+SOC_DOUBLE_R("Master Playback Volume", WM8731_LOUT1V, WM8731_ROUT1V,
-+ 0, 127, 0),
-+SOC_DOUBLE_R("Master Playback ZC Switch", WM8731_LOUT1V, WM8731_ROUT1V,
-+ 7, 1, 0),
-+
-+SOC_DOUBLE_R("Capture Volume", WM8731_LINVOL, WM8731_RINVOL, 0, 31, 0),
-+SOC_DOUBLE_R("Line Capture Switch", WM8731_LINVOL, WM8731_RINVOL, 7, 1, 1),
-+
-+SOC_SINGLE("Mic Boost (+20dB)", WM8731_APANA, 0, 1, 0),
-+SOC_SINGLE("Capture Mic Switch", WM8731_APANA, 1, 1, 1),
-+
-+SOC_SINGLE("Sidetone Playback Volume", WM8731_APANA, 6, 3, 1),
-+
-+SOC_SINGLE("ADC High Pass Filter Switch", WM8731_APDIGI, 0, 1, 1),
-+SOC_SINGLE("Store DC Offset Switch", WM8731_APDIGI, 4, 1, 0),
-+
-+SOC_ENUM("Playback De-emphasis", wm8731_enum[1]),
-+};
-+
-+/* add non dapm controls */
-+static int wm8731_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm8731_snd_controls); i++) {
-+ if ((err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8731_snd_controls[i],codec, NULL))) < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/* Output Mixer */
-+static const struct snd_kcontrol_new wm8731_output_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Line Bypass Switch", WM8731_APANA, 3, 1, 0),
-+SOC_DAPM_SINGLE("Mic Sidetone Switch", WM8731_APANA, 5, 1, 0),
-+SOC_DAPM_SINGLE("HiFi Playback Switch", WM8731_APANA, 4, 1, 0),
-+};
-+
-+/* Input mux */
-+static const struct snd_kcontrol_new wm8731_input_mux_controls =
-+SOC_DAPM_ENUM("Input Select", wm8731_enum[0]);
-+
-+static const struct snd_soc_dapm_widget wm8731_dapm_widgets[] = {
-+SND_SOC_DAPM_MIXER("Output Mixer", WM8731_PWR, 4, 1,
-+ &wm8731_output_mixer_controls[0],
-+ ARRAY_SIZE(wm8731_output_mixer_controls)),
-+SND_SOC_DAPM_DAC("DAC", "HiFi Playback", WM8731_PWR, 3, 1),
-+SND_SOC_DAPM_OUTPUT("LOUT"),
-+SND_SOC_DAPM_OUTPUT("LHPOUT"),
-+SND_SOC_DAPM_OUTPUT("ROUT"),
-+SND_SOC_DAPM_OUTPUT("RHPOUT"),
-+SND_SOC_DAPM_ADC("ADC", "HiFi Capture", WM8731_PWR, 2, 1),
-+SND_SOC_DAPM_MUX("Input Mux", SND_SOC_NOPM, 0, 0, &wm8731_input_mux_controls),
-+SND_SOC_DAPM_PGA("Line Input", WM8731_PWR, 0, 1, NULL, 0),
-+SND_SOC_DAPM_MICBIAS("Mic Bias", WM8731_PWR, 1, 1),
-+SND_SOC_DAPM_INPUT("MICIN"),
-+SND_SOC_DAPM_INPUT("RLINEIN"),
-+SND_SOC_DAPM_INPUT("LLINEIN"),
-+};
-+
-+static const char *intercon[][3] = {
-+ /* output mixer */
-+ {"Output Mixer", "Line Bypass Switch", "Line Input"},
-+ {"Output Mixer", "HiFi Playback Switch", "DAC"},
-+ {"Output Mixer", "Mic Sidetone Switch", "Mic Bias"},
-+
-+ /* outputs */
-+ {"RHPOUT", NULL, "Output Mixer"},
-+ {"ROUT", NULL, "Output Mixer"},
-+ {"LHPOUT", NULL, "Output Mixer"},
-+ {"LOUT", NULL, "Output Mixer"},
-+
-+ /* input mux */
-+ {"Input Mux", "Line In", "Line Input"},
-+ {"Input Mux", "Mic", "Mic Bias"},
-+ {"ADC", NULL, "Input Mux"},
-+
-+ /* inputs */
-+ {"Line Input", NULL, "LLINEIN"},
-+ {"Line Input", NULL, "RLINEIN"},
-+ {"Mic Bias", NULL, "MICIN"},
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int wm8731_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(wm8731_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8731_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path interconnects */
-+ for(i = 0; intercon[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, intercon[i][0],
-+ intercon[i][1], intercon[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+struct _coeff_div {
-+ u32 mclk;
-+ u32 rate;
-+ u16 fs;
-+ u8 sr:4;
-+ u8 bosr:1;
-+ u8 usb:1;
-+};
-+
-+/* codec mclk clock divider coefficients */
-+static const struct _coeff_div coeff_div[] = {
-+ /* 48k */
-+ {12288000, 48000, 256, 0x0, 0x0, 0x0},
-+ {18432000, 48000, 384, 0x0, 0x1, 0x0},
-+ {12000000, 48000, 250, 0x0, 0x0, 0x1},
-+
-+ /* 32k */
-+ {12288000, 32000, 384, 0x6, 0x0, 0x0},
-+ {18432000, 32000, 576, 0x6, 0x1, 0x0},
-+
-+ /* 8k */
-+ {12288000, 8000, 1536, 0x3, 0x0, 0x0},
-+ {18432000, 8000, 2304, 0x3, 0x1, 0x0},
-+ {11289600, 8000, 1408, 0xb, 0x0, 0x0},
-+ {16934400, 8000, 2112, 0xb, 0x1, 0x0},
-+ {12000000, 8000, 1500, 0x3, 0x0, 0x1},
-+
-+ /* 96k */
-+ {12288000, 96000, 128, 0x7, 0x0, 0x0},
-+ {18432000, 96000, 192, 0x7, 0x1, 0x0},
-+ {12000000, 96000, 125, 0x7, 0x0, 0x1},
-+
-+ /* 44.1k */
-+ {11289600, 44100, 256, 0x8, 0x0, 0x0},
-+ {16934400, 44100, 384, 0x8, 0x1, 0x0},
-+ {12000000, 44100, 272, 0x8, 0x1, 0x1},
-+
-+ /* 88.2k */
-+ {11289600, 88200, 128, 0xf, 0x0, 0x0},
-+ {16934400, 88200, 192, 0xf, 0x1, 0x0},
-+ {12000000, 88200, 136, 0xf, 0x1, 0x1},
-+};
-+
-+static inline int get_coeff(int mclk, int rate)
-+{
-+ int i;
-+
-+ for (i = 0; i < ARRAY_SIZE(coeff_div); i++) {
-+ if (coeff_div[i].rate == rate && coeff_div[i].mclk == mclk)
-+ return i;
-+ }
-+ return 0;
-+}
-+
-+/* WM8731 supports numerous clocks per sample rate */
-+static unsigned int wm8731_config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ dai->mclk = 0;
-+
-+ /* check that the calculated FS and rate actually match a clock from
-+ * the machine driver */
-+ if (info->fs * info->rate == clk)
-+ dai->mclk = clk;
-+
-+ return dai->mclk;
-+}
-+
-+static int wm8731_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 iface = 0, srate;
-+ int i = get_coeff(rtd->codec_dai->mclk,
-+ snd_soc_get_rate(rtd->codec_dai->dai_runtime.pcmrate));
-+
-+ /* set master/slave audio interface */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ iface |= 0x0040;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ break;
-+ }
-+ srate = (coeff_div[i].sr << 2) |
-+ (coeff_div[i].bosr << 1) | coeff_div[i].usb;
-+ wm8731_write(codec, WM8731_SRATE, srate);
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ iface |= 0x0002;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ iface |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ iface |= 0x0003;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_B:
-+ iface |= 0x0013;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ iface |= 0x0004;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ iface |= 0x0008;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ iface |= 0x000c;
-+ break;
-+ }
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_NB_NF:
-+ break;
-+ case SND_SOC_DAIFMT_IB_IF:
-+ iface |= 0x0090;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ iface |= 0x0080;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ iface |= 0x0010;
-+ break;
-+ }
-+
-+ /* set iface */
-+ wm8731_write(codec, WM8731_IFACE, iface);
-+
-+ /* set active */
-+ wm8731_write(codec, WM8731_ACTIVE, 0x0001);
-+ return 0;
-+}
-+
-+static void wm8731_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ /* deactivate */
-+ if (!codec->active) {
-+ udelay(50);
-+ wm8731_write(codec, WM8731_ACTIVE, 0x0);
-+ }
-+}
-+
-+static int wm8731_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = wm8731_read_reg_cache(codec, WM8731_APDIGI) & 0xfff7;
-+ if (mute)
-+ wm8731_write(codec, WM8731_APDIGI, mute_reg | 0x8);
-+ else
-+ wm8731_write(codec, WM8731_APDIGI, mute_reg);
-+ return 0;
-+}
-+
-+static int wm8731_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ u16 reg = wm8731_read_reg_cache(codec, WM8731_PWR) & 0xff7f;
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* vref/mid, osc on, dac unmute */
-+ wm8731_write(codec, WM8731_PWR, reg);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* everything off except vref/vmid, */
-+ wm8731_write(codec, WM8731_PWR, reg | 0x0040);
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ /* everything off, dac mute, inactive */
-+ wm8731_write(codec, WM8731_ACTIVE, 0x0);
-+ wm8731_write(codec, WM8731_PWR, 0xffff);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+struct snd_soc_codec_dai wm8731_dai = {
-+ .name = "WM8731",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .capture = {
-+ .stream_name = "Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .config_sysclk = wm8731_config_sysclk,
-+ .digital_mute = wm8731_mute,
-+ .ops = {
-+ .prepare = wm8731_pcm_prepare,
-+ .shutdown = wm8731_shutdown,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8731_modes),
-+ .mode = wm8731_modes,
-+ },
-+};
-+EXPORT_SYMBOL_GPL(wm8731_dai);
-+
-+static int wm8731_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ wm8731_write(codec, WM8731_ACTIVE, 0x0);
-+ wm8731_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm8731_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(wm8731_reg); i++) {
-+ data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+ wm8731_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm8731_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the WM8731 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int wm8731_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int reg, ret = 0;
-+
-+ codec->name = "WM8731";
-+ codec->owner = THIS_MODULE;
-+ codec->read = wm8731_read_reg_cache;
-+ codec->write = wm8731_write;
-+ codec->dapm_event = wm8731_dapm_event;
-+ codec->dai = &wm8731_dai;
-+ codec->num_dai = 1;
-+ codec->reg_cache_size = ARRAY_SIZE(wm8731_reg);
-+
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm8731_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache,
-+ wm8731_reg, sizeof(u16) * ARRAY_SIZE(wm8731_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm8731_reg);
-+
-+ wm8731_reset(codec);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if (ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* power on device */
-+ wm8731_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+
-+ /* set the update bits */
-+ reg = wm8731_read_reg_cache(codec, WM8731_LOUT1V);
-+ wm8731_write(codec, WM8731_LOUT1V, reg | 0x0100);
-+ reg = wm8731_read_reg_cache(codec, WM8731_ROUT1V);
-+ wm8731_write(codec, WM8731_ROUT1V, reg | 0x0100);
-+ reg = wm8731_read_reg_cache(codec, WM8731_LINVOL);
-+ wm8731_write(codec, WM8731_LINVOL, reg | 0x0100);
-+ reg = wm8731_read_reg_cache(codec, WM8731_RINVOL);
-+ wm8731_write(codec, WM8731_RINVOL, reg | 0x0100);
-+
-+ wm8731_add_controls(codec);
-+ wm8731_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static struct snd_soc_device *wm8731_socdev;
-+
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+
-+/*
-+ * WM8731 2 wire address is determined by GPIO5
-+ * state during powerup.
-+ * low = 0x1a
-+ * high = 0x1b
-+ */
-+static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END };
-+
-+/* Magic definition of all other variables and things */
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver wm8731_i2c_driver;
-+static struct i2c_client client_template;
-+
-+/* If the i2c layer weren't so broken, we could pass this kind of data
-+ around */
-+
-+static int wm8731_codec_probe(struct i2c_adapter *adap, int addr, int kind)
-+{
-+ struct snd_soc_device *socdev = wm8731_socdev;
-+ struct wm8731_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct i2c_client *i2c;
-+ int ret;
-+
-+ if (addr != setup->i2c_address)
-+ return -ENODEV;
-+
-+ client_template.adapter = adap;
-+ client_template.addr = addr;
-+
-+ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (i2c == NULL) {
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+ memcpy(i2c, &client_template, sizeof(struct i2c_client));
-+ i2c_set_clientdata(i2c, codec);
-+ codec->control_data = i2c;
-+
-+ ret = i2c_attach_client(i2c);
-+ if (ret < 0) {
-+ err("failed to attach codec at addr %x\n", addr);
-+ goto err;
-+ }
-+
-+ ret = wm8731_init(socdev);
-+ if (ret < 0) {
-+ err("failed to initialise WM8731\n");
-+ goto err;
-+ }
-+ return ret;
-+
-+err:
-+ kfree(codec);
-+ kfree(i2c);
-+ return ret;
-+}
-+
-+static int wm8731_i2c_detach(struct i2c_client *client)
-+{
-+ struct snd_soc_codec* codec = i2c_get_clientdata(client);
-+ i2c_detach_client(client);
-+ kfree(codec->reg_cache);
-+ kfree(client);
-+ return 0;
-+}
-+
-+static int wm8731_i2c_attach(struct i2c_adapter *adap)
-+{
-+ return i2c_probe(adap, &addr_data, wm8731_codec_probe);
-+}
-+
-+/* corgi i2c codec control layer */
-+static struct i2c_driver wm8731_i2c_driver = {
-+ .driver = {
-+ .name = "WM8731 I2C Codec",
-+ .owner = THIS_MODULE,
-+ },
-+ .id = I2C_DRIVERID_WM8731,
-+ .attach_adapter = wm8731_i2c_attach,
-+ .detach_client = wm8731_i2c_detach,
-+ .command = NULL,
-+};
-+
-+static struct i2c_client client_template = {
-+ .name = "WM8731",
-+ .driver = &wm8731_i2c_driver,
-+};
-+#endif
-+
-+static int wm8731_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct wm8731_setup_data *setup;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+
-+ info("WM8731 Audio Codec %s", WM8731_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ wm8731_socdev = socdev;
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ if (setup->i2c_address) {
-+ normal_i2c[0] = setup->i2c_address;
-+ codec->hw_write = (hw_write_t)i2c_master_send;
-+ ret = i2c_add_driver(&wm8731_i2c_driver);
-+ if (ret != 0)
-+ printk(KERN_ERR "can't add i2c driver");
-+ }
-+#else
-+ /* Add other interfaces here */
-+#endif
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int wm8731_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ wm8731_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ i2c_del_driver(&wm8731_i2c_driver);
-+#endif
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8731 = {
-+ .probe = wm8731_probe,
-+ .remove = wm8731_remove,
-+ .suspend = wm8731_suspend,
-+ .resume = wm8731_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm8731);
-+
-+MODULE_DESCRIPTION("ASoC WM8731 driver");
-+MODULE_AUTHOR("Richard Purdie");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8731.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8731.h
-@@ -0,0 +1,41 @@
-+/*
-+ * wm8731.h -- WM8731 Soc Audio driver
-+ *
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <richard@openedhand.com>
-+ *
-+ * Based on wm8753.h
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef _WM8731_H
-+#define _WM8731_H
-+
-+/* WM8731 register space */
-+
-+#define WM8731_LINVOL 0x00
-+#define WM8731_RINVOL 0x01
-+#define WM8731_LOUT1V 0x02
-+#define WM8731_ROUT1V 0x03
-+#define WM8731_APANA 0x04
-+#define WM8731_APDIGI 0x05
-+#define WM8731_PWR 0x06
-+#define WM8731_IFACE 0x07
-+#define WM8731_SRATE 0x08
-+#define WM8731_ACTIVE 0x09
-+#define WM8731_RESET 0x0f
-+
-+#define WM8731_CACHEREGNUM 10
-+
-+struct wm8731_setup_data {
-+ unsigned short i2c_address;
-+};
-+
-+extern struct snd_soc_codec_dai wm8731_dai;
-+extern struct snd_soc_codec_device soc_codec_dev_wm8731;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8750.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8750.c
-@@ -0,0 +1,1282 @@
-+/*
-+ * wm8750.c -- WM8750 ALSA SoC audio driver
-+ *
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <richard@openedhand.com>
-+ *
-+ * Based on WM8753.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/i2c.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+#include "wm8750.h"
-+
-+#define AUDIO_NAME "WM8750"
-+#define WM8750_VERSION "0.11"
-+
-+/*
-+ * Debug
-+ */
-+
-+#define WM8750_DEBUG 0
-+
-+#ifdef WM8750_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...) do {} while (0)
-+#endif
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+static struct workqueue_struct *wm8750_workq = NULL;
-+static struct work_struct wm8750_dapm_work;
-+
-+/*
-+ * wm8750 register cache
-+ * We can't read the WM8750 register space when we
-+ * are using 2 wire for device control, so we cache them instead.
-+ */
-+static const u16 wm8750_reg[] = {
-+ 0x0097, 0x0097, 0x0079, 0x0079, /* 0 */
-+ 0x0000, 0x0008, 0x0000, 0x000a, /* 4 */
-+ 0x0000, 0x0000, 0x00ff, 0x00ff, /* 8 */
-+ 0x000f, 0x000f, 0x0000, 0x0000, /* 12 */
-+ 0x0000, 0x007b, 0x0000, 0x0032, /* 16 */
-+ 0x0000, 0x00c3, 0x00c3, 0x00c0, /* 20 */
-+ 0x0000, 0x0000, 0x0000, 0x0000, /* 24 */
-+ 0x0000, 0x0000, 0x0000, 0x0000, /* 28 */
-+ 0x0000, 0x0000, 0x0050, 0x0050, /* 32 */
-+ 0x0050, 0x0050, 0x0050, 0x0050, /* 36 */
-+ 0x0079, 0x0079, 0x0079, /* 40 */
-+};
-+
-+#define WM8750_HIFI_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_RIGHT_J | \
-+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_NB_IF | SND_SOC_DAIFMT_IB_NF | \
-+ SND_SOC_DAIFMT_IB_IF)
-+
-+#define WM8750_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define WM8750_HIFI_FSB \
-+ (SND_SOC_FSBD(1) | SND_SOC_FSBD(2) | SND_SOC_FSBD(4) | \
-+ SND_SOC_FSBD(8) | SND_SOC_FSBD(16))
-+
-+#define WM8750_HIFI_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
-+
-+#define WM8750_HIFI_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
-+
-+static struct snd_soc_dai_mode wm8750_modes[] = {
-+ /* common codec frame and clock master modes */
-+ /* 8k */
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1536,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1408,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 2304,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 2112,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1500,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+
-+ /* 11.025k */
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1024,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1536,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1088,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+
-+ /* 16k */
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 768,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1152,
-+ .bfs = WM8750_HIFI_FSB
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 750,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+
-+ /* 22.05k */
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 512,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 768,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 544,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+
-+ /* 32k */
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 384,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 576,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 375,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+
-+ /* 44.1k & 48k */
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 384,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 272,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 250,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+
-+ /* 88.2k & 96k */
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 128,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 192,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 136,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 125,
-+ .bfs = WM8750_HIFI_FSB,
-+ },
-+
-+ /* codec frame and clock slave modes */
-+ {
-+ .fmt = WM8750_HIFI_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM8750_HIFI_BITS,
-+ .pcmrate = WM8750_HIFI_RATES,
-+ .pcmdir = WM8750_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+/*
-+ * read wm8750 register cache
-+ */
-+static inline unsigned int wm8750_read_reg_cache(struct snd_soc_codec *codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg > WM8750_CACHE_REGNUM)
-+ return -1;
-+ return cache[reg];
-+}
-+
-+/*
-+ * write wm8750 register cache
-+ */
-+static inline void wm8750_write_reg_cache(struct snd_soc_codec *codec,
-+ unsigned int reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg > WM8750_CACHE_REGNUM)
-+ return;
-+ cache[reg] = value;
-+}
-+
-+static int wm8750_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[2];
-+
-+ /* data is
-+ * D15..D9 WM8753 register offset
-+ * D8...D0 register data
-+ */
-+ data[0] = (reg << 1) | ((value >> 8) & 0x0001);
-+ data[1] = value & 0x00ff;
-+
-+ wm8750_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 2) == 2)
-+ return 0;
-+ else
-+ return -EIO;
-+}
-+
-+#define wm8750_reset(c) wm8750_write(c, WM8750_RESET, 0)
-+
-+/*
-+ * WM8750 Controls
-+ */
-+static const char *wm8750_bass[] = {"Linear Control", "Adaptive Boost"};
-+static const char *wm8750_bass_filter[] = { "130Hz @ 48kHz", "200Hz @ 48kHz" };
-+static const char *wm8750_treble[] = {"8kHz", "4kHz"};
-+static const char *wm8750_3d_lc[] = {"200Hz", "500Hz"};
-+static const char *wm8750_3d_uc[] = {"2.2kHz", "1.5kHz"};
-+static const char *wm8750_3d_func[] = {"Capture", "Playback"};
-+static const char *wm8750_alc_func[] = {"Off", "Right", "Left", "Stereo"};
-+static const char *wm8750_ng_type[] = {"Constant PGA Gain",
-+ "Mute ADC Output"};
-+static const char *wm8750_line_mux[] = {"Line 1", "Line 2", "Line 3", "PGA",
-+ "Differential"};
-+static const char *wm8750_pga_sel[] = {"Line 1", "Line 2", "Line 3",
-+ "Differential"};
-+static const char *wm8750_out3[] = {"VREF", "ROUT1 + Vol", "MonoOut",
-+ "ROUT1"};
-+static const char *wm8750_diff_sel[] = {"Line 1", "Line 2"};
-+static const char *wm8750_adcpol[] = {"Normal", "L Invert", "R Invert",
-+ "L + R Invert"};
-+static const char *wm8750_deemph[] = {"None", "32Khz", "44.1Khz", "48Khz"};
-+static const char *wm8750_mono_mux[] = {"Stereo", "Mono (Left)",
-+ "Mono (Right)", "Digital Mono"};
-+
-+static const struct soc_enum wm8750_enum[] = {
-+SOC_ENUM_SINGLE(WM8750_BASS, 7, 2, wm8750_bass),
-+SOC_ENUM_SINGLE(WM8750_BASS, 6, 2, wm8750_bass_filter),
-+SOC_ENUM_SINGLE(WM8750_TREBLE, 6, 2, wm8750_treble),
-+SOC_ENUM_SINGLE(WM8750_3D, 5, 2, wm8750_3d_lc),
-+SOC_ENUM_SINGLE(WM8750_3D, 6, 2, wm8750_3d_uc),
-+SOC_ENUM_SINGLE(WM8750_3D, 7, 2, wm8750_3d_func),
-+SOC_ENUM_SINGLE(WM8750_ALC1, 7, 4, wm8750_alc_func),
-+SOC_ENUM_SINGLE(WM8750_NGATE, 1, 2, wm8750_ng_type),
-+SOC_ENUM_SINGLE(WM8750_LOUTM1, 0, 5, wm8750_line_mux),
-+SOC_ENUM_SINGLE(WM8750_ROUTM1, 0, 5, wm8750_line_mux),
-+SOC_ENUM_SINGLE(WM8750_LADCIN, 6, 4, wm8750_pga_sel), /* 10 */
-+SOC_ENUM_SINGLE(WM8750_RADCIN, 6, 4, wm8750_pga_sel),
-+SOC_ENUM_SINGLE(WM8750_ADCTL2, 7, 4, wm8750_out3),
-+SOC_ENUM_SINGLE(WM8750_ADCIN, 8, 2, wm8750_diff_sel),
-+SOC_ENUM_SINGLE(WM8750_ADCDAC, 5, 4, wm8750_adcpol),
-+SOC_ENUM_SINGLE(WM8750_ADCDAC, 1, 4, wm8750_deemph),
-+SOC_ENUM_SINGLE(WM8750_ADCIN, 6, 4, wm8750_mono_mux), /* 16 */
-+
-+};
-+
-+static const struct snd_kcontrol_new wm8750_snd_controls[] = {
-+
-+SOC_DOUBLE_R("Capture Volume", WM8750_LINVOL, WM8750_RINVOL, 0, 63, 0),
-+SOC_DOUBLE_R("Capture ZC Switch", WM8750_LINVOL, WM8750_RINVOL, 6, 1, 0),
-+SOC_DOUBLE_R("Capture Switch", WM8750_LINVOL, WM8750_RINVOL, 7, 1, 1),
-+
-+SOC_DOUBLE_R("Headphone Playback ZC Switch", WM8750_LOUT1V,
-+ WM8750_ROUT1V, 7, 1, 0),
-+SOC_DOUBLE_R("Speaker Playback ZC Switch", WM8750_LOUT2V,
-+ WM8750_ROUT2V, 7, 1, 0),
-+
-+SOC_ENUM("Playback De-emphasis", wm8750_enum[15]),
-+
-+SOC_ENUM("Capture Polarity", wm8750_enum[14]),
-+SOC_SINGLE("Playback 6dB Attenuate", WM8750_ADCDAC, 7, 1, 0),
-+SOC_SINGLE("Capture 6dB Attenuate", WM8750_ADCDAC, 8, 1, 0),
-+
-+SOC_DOUBLE_R("PCM Volume", WM8750_LDAC, WM8750_RDAC, 0, 255, 0),
-+
-+SOC_ENUM("Bass Boost", wm8750_enum[0]),
-+SOC_ENUM("Bass Filter", wm8750_enum[1]),
-+SOC_SINGLE("Bass Volume", WM8750_BASS, 0, 15, 1),
-+
-+SOC_SINGLE("Treble Volume", WM8750_TREBLE, 0, 15, 0),
-+SOC_ENUM("Treble Cut-off", wm8750_enum[2]),
-+
-+SOC_SINGLE("3D Switch", WM8750_3D, 0, 1, 0),
-+SOC_SINGLE("3D Volume", WM8750_3D, 1, 15, 0),
-+SOC_ENUM("3D Lower Cut-off", wm8750_enum[3]),
-+SOC_ENUM("3D Upper Cut-off", wm8750_enum[4]),
-+SOC_ENUM("3D Mode", wm8750_enum[5]),
-+
-+SOC_SINGLE("ALC Capture Target Volume", WM8750_ALC1, 0, 7, 0),
-+SOC_SINGLE("ALC Capture Max Volume", WM8750_ALC1, 4, 7, 0),
-+SOC_ENUM("ALC Capture Function", wm8750_enum[6]),
-+SOC_SINGLE("ALC Capture ZC Switch", WM8750_ALC2, 7, 1, 0),
-+SOC_SINGLE("ALC Capture Hold Time", WM8750_ALC2, 0, 15, 0),
-+SOC_SINGLE("ALC Capture Decay Time", WM8750_ALC3, 4, 15, 0),
-+SOC_SINGLE("ALC Capture Attack Time", WM8750_ALC3, 0, 15, 0),
-+SOC_SINGLE("ALC Capture NG Threshold", WM8750_NGATE, 3, 31, 0),
-+SOC_ENUM("ALC Capture NG Type", wm8750_enum[4]),
-+SOC_SINGLE("ALC Capture NG Switch", WM8750_NGATE, 0, 1, 0),
-+
-+SOC_SINGLE("Left ADC Capture Volume", WM8750_LADC, 0, 255, 0),
-+SOC_SINGLE("Right ADC Capture Volume", WM8750_RADC, 0, 255, 0),
-+
-+SOC_SINGLE("ZC Timeout Switch", WM8750_ADCTL1, 0, 1, 0),
-+SOC_SINGLE("Playback Invert Switch", WM8750_ADCTL1, 1, 1, 0),
-+
-+SOC_SINGLE("Right Speaker Playback Invert Switch", WM8750_ADCTL2, 4, 1, 0),
-+
-+/* Unimplemented */
-+/* ADCDAC Bit 0 - ADCHPD */
-+/* ADCDAC Bit 4 - HPOR */
-+/* ADCTL1 Bit 2,3 - DATSEL */
-+/* ADCTL1 Bit 4,5 - DMONOMIX */
-+/* ADCTL1 Bit 6,7 - VSEL */
-+/* ADCTL2 Bit 2 - LRCM */
-+/* ADCTL2 Bit 3 - TRI */
-+/* ADCTL3 Bit 5 - HPFLREN */
-+/* ADCTL3 Bit 6 - VROI */
-+/* ADCTL3 Bit 7,8 - ADCLRM */
-+/* ADCIN Bit 4 - LDCM */
-+/* ADCIN Bit 5 - RDCM */
-+
-+SOC_DOUBLE_R("Mic Boost", WM8750_LADCIN, WM8750_RADCIN, 4, 3, 0),
-+
-+SOC_DOUBLE_R("Bypass Left Playback Volume", WM8750_LOUTM1,
-+ WM8750_LOUTM2, 4, 7, 1),
-+SOC_DOUBLE_R("Bypass Right Playback Volume", WM8750_ROUTM1,
-+ WM8750_ROUTM2, 4, 7, 1),
-+SOC_DOUBLE_R("Bypass Mono Playback Volume", WM8750_MOUTM1,
-+ WM8750_MOUTM2, 4, 7, 1),
-+
-+SOC_SINGLE("Mono Playback ZC Switch", WM8750_MOUTV, 7, 1, 0),
-+
-+SOC_DOUBLE_R("Headphone Playback Volume", WM8750_LOUT1V, WM8750_ROUT1V,
-+ 0, 127, 0),
-+SOC_DOUBLE_R("Speaker Playback Volume", WM8750_LOUT2V, WM8750_ROUT2V,
-+ 0, 127, 0),
-+
-+SOC_SINGLE("Mono Playback Volume", WM8750_MOUTV, 0, 127, 0),
-+
-+};
-+
-+/* add non dapm controls */
-+static int wm8750_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm8750_snd_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8750_snd_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+ return 0;
-+}
-+
-+/*
-+ * DAPM Controls
-+ */
-+
-+/* Left Mixer */
-+static const struct snd_kcontrol_new wm8750_left_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Playback Switch", WM8750_LOUTM1, 8, 1, 0),
-+SOC_DAPM_SINGLE("Left Bypass Switch", WM8750_LOUTM1, 7, 1, 0),
-+SOC_DAPM_SINGLE("Right Playback Switch", WM8750_LOUTM2, 8, 1, 0),
-+SOC_DAPM_SINGLE("Right Bypass Switch", WM8750_LOUTM2, 7, 1, 0),
-+};
-+
-+/* Right Mixer */
-+static const struct snd_kcontrol_new wm8750_right_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Left Playback Switch", WM8750_ROUTM1, 8, 1, 0),
-+SOC_DAPM_SINGLE("Left Bypass Switch", WM8750_ROUTM1, 7, 1, 0),
-+SOC_DAPM_SINGLE("Playback Switch", WM8750_ROUTM2, 8, 1, 0),
-+SOC_DAPM_SINGLE("Right Bypass Switch", WM8750_ROUTM2, 7, 1, 0),
-+};
-+
-+/* Mono Mixer */
-+static const struct snd_kcontrol_new wm8750_mono_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Left Playback Switch", WM8750_MOUTM1, 8, 1, 0),
-+SOC_DAPM_SINGLE("Left Bypass Switch", WM8750_MOUTM1, 7, 1, 0),
-+SOC_DAPM_SINGLE("Right Playback Switch", WM8750_MOUTM2, 8, 1, 0),
-+SOC_DAPM_SINGLE("Right Bypass Switch", WM8750_MOUTM2, 7, 1, 0),
-+};
-+
-+/* Left Line Mux */
-+static const struct snd_kcontrol_new wm8750_left_line_controls =
-+SOC_DAPM_ENUM("Route", wm8750_enum[8]);
-+
-+/* Right Line Mux */
-+static const struct snd_kcontrol_new wm8750_right_line_controls =
-+SOC_DAPM_ENUM("Route", wm8750_enum[9]);
-+
-+/* Left PGA Mux */
-+static const struct snd_kcontrol_new wm8750_left_pga_controls =
-+SOC_DAPM_ENUM("Route", wm8750_enum[10]);
-+
-+/* Right PGA Mux */
-+static const struct snd_kcontrol_new wm8750_right_pga_controls =
-+SOC_DAPM_ENUM("Route", wm8750_enum[11]);
-+
-+/* Out 3 Mux */
-+static const struct snd_kcontrol_new wm8750_out3_controls =
-+SOC_DAPM_ENUM("Route", wm8750_enum[12]);
-+
-+/* Differential Mux */
-+static const struct snd_kcontrol_new wm8750_diffmux_controls =
-+SOC_DAPM_ENUM("Route", wm8750_enum[13]);
-+
-+/* Mono ADC Mux */
-+static const struct snd_kcontrol_new wm8750_monomux_controls =
-+SOC_DAPM_ENUM("Route", wm8750_enum[16]);
-+
-+static const struct snd_soc_dapm_widget wm8750_dapm_widgets[] = {
-+ SND_SOC_DAPM_MIXER("Left Mixer", SND_SOC_NOPM, 0, 0,
-+ &wm8750_left_mixer_controls[0],
-+ ARRAY_SIZE(wm8750_left_mixer_controls)),
-+ SND_SOC_DAPM_MIXER("Right Mixer", SND_SOC_NOPM, 0, 0,
-+ &wm8750_right_mixer_controls[0],
-+ ARRAY_SIZE(wm8750_right_mixer_controls)),
-+ SND_SOC_DAPM_MIXER("Mono Mixer", WM8750_PWR2, 2, 0,
-+ &wm8750_mono_mixer_controls[0],
-+ ARRAY_SIZE(wm8750_mono_mixer_controls)),
-+
-+ SND_SOC_DAPM_PGA("Right Out 2", WM8750_PWR2, 3, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Left Out 2", WM8750_PWR2, 4, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Right Out 1", WM8750_PWR2, 5, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Left Out 1", WM8750_PWR2, 6, 0, NULL, 0),
-+ SND_SOC_DAPM_DAC("Right DAC", "Right Playback", WM8750_PWR2, 7, 0),
-+ SND_SOC_DAPM_DAC("Left DAC", "Left Playback", WM8750_PWR2, 8, 0),
-+
-+ SND_SOC_DAPM_MICBIAS("Mic Bias", WM8750_PWR1, 1, 0),
-+ SND_SOC_DAPM_ADC("Right ADC", "Right Capture", WM8750_PWR1, 2, 0),
-+ SND_SOC_DAPM_ADC("Left ADC", "Left Capture", WM8750_PWR1, 3, 0),
-+
-+ SND_SOC_DAPM_MUX("Left PGA Mux", WM8750_PWR1, 5, 0,
-+ &wm8750_left_pga_controls),
-+ SND_SOC_DAPM_MUX("Right PGA Mux", WM8750_PWR1, 4, 0,
-+ &wm8750_right_pga_controls),
-+ SND_SOC_DAPM_MUX("Left Line Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8750_left_line_controls),
-+ SND_SOC_DAPM_MUX("Right Line Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8750_right_line_controls),
-+
-+ SND_SOC_DAPM_MUX("Out3 Mux", SND_SOC_NOPM, 0, 0, &wm8750_out3_controls),
-+ SND_SOC_DAPM_PGA("Out 3", WM8750_PWR2, 1, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Mono Out 1", WM8750_PWR2, 2, 0, NULL, 0),
-+
-+ SND_SOC_DAPM_MUX("Differential Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8750_diffmux_controls),
-+ SND_SOC_DAPM_MUX("Left ADC Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8750_monomux_controls),
-+ SND_SOC_DAPM_MUX("Right ADC Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8750_monomux_controls),
-+
-+ SND_SOC_DAPM_OUTPUT("LOUT1"),
-+ SND_SOC_DAPM_OUTPUT("ROUT1"),
-+ SND_SOC_DAPM_OUTPUT("LOUT2"),
-+ SND_SOC_DAPM_OUTPUT("ROUT2"),
-+ SND_SOC_DAPM_OUTPUT("MONO"),
-+ SND_SOC_DAPM_OUTPUT("OUT3"),
-+
-+ SND_SOC_DAPM_INPUT("LINPUT1"),
-+ SND_SOC_DAPM_INPUT("LINPUT2"),
-+ SND_SOC_DAPM_INPUT("LINPUT3"),
-+ SND_SOC_DAPM_INPUT("RINPUT1"),
-+ SND_SOC_DAPM_INPUT("RINPUT2"),
-+ SND_SOC_DAPM_INPUT("RINPUT3"),
-+};
-+
-+static const char *audio_map[][3] = {
-+ /* left mixer */
-+ {"Left Mixer", "Playback Switch", "Left DAC"},
-+ {"Left Mixer", "Left Bypass Switch", "Left Line Mux"},
-+ {"Left Mixer", "Right Playback Switch", "Right DAC"},
-+ {"Left Mixer", "Right Bypass Switch", "Right Line Mux"},
-+
-+ /* right mixer */
-+ {"Right Mixer", "Left Playback Switch", "Left DAC"},
-+ {"Right Mixer", "Left Bypass Switch", "Left Line Mux"},
-+ {"Right Mixer", "Playback Switch", "Right DAC"},
-+ {"Right Mixer", "Right Bypass Switch", "Right Line Mux"},
-+
-+ /* left out 1 */
-+ {"Left Out 1", NULL, "Left Mixer"},
-+ {"LOUT1", NULL, "Left Out 1"},
-+
-+ /* left out 2 */
-+ {"Left Out 2", NULL, "Left Mixer"},
-+ {"LOUT2", NULL, "Left Out 2"},
-+
-+ /* right out 1 */
-+ {"Right Out 1", NULL, "Right Mixer"},
-+ {"ROUT1", NULL, "Right Out 1"},
-+
-+ /* right out 2 */
-+ {"Right Out 2", NULL, "Right Mixer"},
-+ {"ROUT2", NULL, "Right Out 2"},
-+
-+ /* mono mixer */
-+ {"Mono Mixer", "Left Playback Switch", "Left DAC"},
-+ {"Mono Mixer", "Left Bypass Switch", "Left Line Mux"},
-+ {"Mono Mixer", "Right Playback Switch", "Right DAC"},
-+ {"Mono Mixer", "Right Bypass Switch", "Right Line Mux"},
-+
-+ /* mono out */
-+ {"Mono Out 1", NULL, "Mono Mixer"},
-+ {"MONO1", NULL, "Mono Out 1"},
-+
-+ /* out 3 */
-+ {"Out3 Mux", "VREF", "VREF"},
-+ {"Out3 Mux", "ROUT1 + Vol", "ROUT1"},
-+ {"Out3 Mux", "ROUT1", "Right Mixer"},
-+ {"Out3 Mux", "MonoOut", "MONO1"},
-+ {"Out 3", NULL, "Out3 Mux"},
-+ {"OUT3", NULL, "Out 3"},
-+
-+ /* Left Line Mux */
-+ {"Left Line Mux", "Line 1", "LINPUT1"},
-+ {"Left Line Mux", "Line 2", "LINPUT2"},
-+ {"Left Line Mux", "Line 3", "LINPUT3"},
-+ {"Left Line Mux", "PGA", "Left PGA Mux"},
-+ {"Left Line Mux", "Differential", "Differential Mux"},
-+
-+ /* Right Line Mux */
-+ {"Right Line Mux", "Line 1", "RINPUT1"},
-+ {"Right Line Mux", "Line 2", "RINPUT2"},
-+ {"Right Line Mux", "Line 3", "RINPUT3"},
-+ {"Right Line Mux", "PGA", "Right PGA Mux"},
-+ {"Right Line Mux", "Differential", "Differential Mux"},
-+
-+ /* Left PGA Mux */
-+ {"Left PGA Mux", "Line 1", "LINPUT1"},
-+ {"Left PGA Mux", "Line 2", "LINPUT2"},
-+ {"Left PGA Mux", "Line 3", "LINPUT3"},
-+ {"Left PGA Mux", "Differential", "Differential Mux"},
-+
-+ /* Right PGA Mux */
-+ {"Right PGA Mux", "Line 1", "RINPUT1"},
-+ {"Right PGA Mux", "Line 2", "RINPUT2"},
-+ {"Right PGA Mux", "Line 3", "RINPUT3"},
-+ {"Right PGA Mux", "Differential", "Differential Mux"},
-+
-+ /* Differential Mux */
-+ {"Differential Mux", "Line 1", "LINPUT1"},
-+ {"Differential Mux", "Line 1", "RINPUT1"},
-+ {"Differential Mux", "Line 2", "LINPUT2"},
-+ {"Differential Mux", "Line 2", "RINPUT2"},
-+
-+ /* Left ADC Mux */
-+ {"Left ADC Mux", "Stereo", "Left PGA Mux"},
-+ {"Left ADC Mux", "Mono (Left)", "Left PGA Mux"},
-+ {"Left ADC Mux", "Digital Mono", "Left PGA Mux"},
-+
-+ /* Right ADC Mux */
-+ {"Right ADC Mux", "Stereo", "Right PGA Mux"},
-+ {"Right ADC Mux", "Mono (Right)", "Right PGA Mux"},
-+ {"Right ADC Mux", "Digital Mono", "Right PGA Mux"},
-+
-+ /* ADC */
-+ {"Left ADC", NULL, "Left ADC Mux"},
-+ {"Right ADC", NULL, "Right ADC Mux"},
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int wm8750_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(wm8750_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8750_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path audio_mapnects */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+struct _coeff_div {
-+ u32 mclk;
-+ u32 rate;
-+ u16 fs;
-+ u8 sr:5;
-+ u8 usb:1;
-+};
-+
-+/* codec hifi mclk clock divider coefficients */
-+static const struct _coeff_div coeff_div[] = {
-+ /* 8k */
-+ {12288000, 8000, 1536, 0x6, 0x0},
-+ {11289600, 8000, 1408, 0x16, 0x0},
-+ {18432000, 8000, 2304, 0x7, 0x0},
-+ {16934400, 8000, 2112, 0x17, 0x0},
-+ {12000000, 8000, 1500, 0x6, 0x1},
-+
-+ /* 11.025k */
-+ {11289600, 11025, 1024, 0x18, 0x0},
-+ {16934400, 11025, 1536, 0x19, 0x0},
-+ {12000000, 11025, 1088, 0x19, 0x1},
-+
-+ /* 16k */
-+ {12288000, 16000, 768, 0xa, 0x0},
-+ {18432000, 16000, 1152, 0xb, 0x0},
-+ {12000000, 16000, 750, 0xa, 0x1},
-+
-+ /* 22.05k */
-+ {11289600, 22050, 512, 0x1a, 0x0},
-+ {16934400, 22050, 768, 0x1b, 0x0},
-+ {12000000, 22050, 544, 0x1b, 0x1},
-+
-+ /* 32k */
-+ {12288000, 32000, 384, 0xc, 0x0},
-+ {18432000, 32000, 576, 0xd, 0x0},
-+ {12000000, 32000, 375, 0xa, 0x1},
-+
-+ /* 44.1k */
-+ {11289600, 44100, 256, 0x10, 0x0},
-+ {16934400, 44100, 384, 0x11, 0x0},
-+ {12000000, 44100, 272, 0x11, 0x1},
-+
-+ /* 48k */
-+ {12288000, 48000, 256, 0x0, 0x0},
-+ {18432000, 48000, 384, 0x1, 0x0},
-+ {12000000, 48000, 250, 0x0, 0x1},
-+
-+ /* 88.2k */
-+ {11289600, 88200, 128, 0x1e, 0x0},
-+ {16934400, 88200, 192, 0x1f, 0x0},
-+ {12000000, 88200, 136, 0x1f, 0x1},
-+
-+ /* 96k */
-+ {12288000, 96000, 128, 0xe, 0x0},
-+ {18432000, 96000, 192, 0xf, 0x0},
-+ {12000000, 96000, 125, 0xe, 0x1},
-+};
-+
-+static inline int get_coeff(int mclk, int rate)
-+{
-+ int i;
-+
-+ for (i = 0; i < ARRAY_SIZE(coeff_div); i++) {
-+ if (coeff_div[i].rate == rate && coeff_div[i].mclk == mclk)
-+ return i;
-+ }
-+
-+ printk(KERN_ERR "wm8750: could not get coeff for mclk %d @ rate %d\n",
-+ mclk, rate);
-+ return -EINVAL;
-+}
-+
-+/* WM8750 supports numerous input clocks per sample rate */
-+static unsigned int wm8750_config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ dai->mclk = clk;
-+ return dai->mclk;
-+}
-+
-+static int wm8750_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 iface = 0, bfs, srate = 0;
-+ int i = get_coeff(rtd->codec_dai->mclk,
-+ snd_soc_get_rate(rtd->codec_dai->dai_runtime.pcmrate));
-+
-+ /* is coefficient valid ? */
-+ if (i < 0)
-+ return i;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->codec_dai->dai_runtime.bfs);
-+
-+ /* set master/slave audio interface */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ iface = 0x0040;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ break;
-+ }
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ iface |= 0x0002;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ iface |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ iface |= 0x0003;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_B:
-+ iface |= 0x0013;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ iface |= 0x0004;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ iface |= 0x0008;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ iface |= 0x000c;
-+ break;
-+ }
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_NB_NF:
-+ break;
-+ case SND_SOC_DAIFMT_IB_IF:
-+ iface |= 0x0090;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ iface |= 0x0080;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ iface |= 0x0010;
-+ break;
-+ }
-+
-+ /* set bclk divisor rate */
-+ switch (bfs) {
-+ case 1:
-+ break;
-+ case 4:
-+ srate |= (0x1 << 7);
-+ break;
-+ case 8:
-+ srate |= (0x2 << 7);
-+ break;
-+ case 16:
-+ srate |= (0x3 << 7);
-+ break;
-+ }
-+
-+ /* set iface & srate */
-+ wm8750_write(codec, WM8750_IFACE, iface);
-+ wm8750_write(codec, WM8750_SRATE, srate |
-+ (coeff_div[i].sr << 1) | coeff_div[i].usb);
-+
-+ return 0;
-+}
-+
-+static int wm8750_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = wm8750_read_reg_cache(codec, WM8750_ADCDAC) & 0xfff7;
-+ if (mute)
-+ wm8750_write(codec, WM8750_ADCDAC, mute_reg | 0x8);
-+ else
-+ wm8750_write(codec, WM8750_ADCDAC, mute_reg);
-+ return 0;
-+}
-+
-+static int wm8750_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ u16 pwr_reg = wm8750_read_reg_cache(codec, WM8750_PWR1) & 0xfe3e;
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* set vmid to 50k and unmute dac */
-+ wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x00c0);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ /* set vmid to 5k for quick power up */
-+ wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x01c1);
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* mute dac and set vmid to 500k, enable VREF */
-+ wm8750_write(codec, WM8750_PWR1, pwr_reg | 0x0141);
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ wm8750_write(codec, WM8750_PWR1, 0x0001);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+struct snd_soc_codec_dai wm8750_dai = {
-+ .name = "WM8750",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .capture = {
-+ .stream_name = "Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .config_sysclk = wm8750_config_sysclk,
-+ .digital_mute = wm8750_mute,
-+ .ops = {
-+ .prepare = wm8750_pcm_prepare,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8750_modes),
-+ .mode = wm8750_modes,
-+ },
-+};
-+EXPORT_SYMBOL_GPL(wm8750_dai);
-+
-+static void wm8750_work(void *data)
-+{
-+ struct snd_soc_codec *codec = (struct snd_soc_codec *)data;
-+ wm8750_dapm_event(codec, codec->dapm_state);
-+}
-+
-+static int wm8750_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ wm8750_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm8750_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(wm8750_reg); i++) {
-+ if (i == WM8750_RESET)
-+ continue;
-+ data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+
-+ wm8750_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+
-+ /* charge wm8750 caps */
-+ if (codec->suspend_dapm_state == SNDRV_CTL_POWER_D0) {
-+ wm8750_dapm_event(codec, SNDRV_CTL_POWER_D2);
-+ codec->dapm_state = SNDRV_CTL_POWER_D0;
-+ queue_delayed_work(wm8750_workq, &wm8750_dapm_work,
-+ msecs_to_jiffies(1000));
-+ }
-+
-+ return 0;
-+}
-+
-+/*
-+ * initialise the WM8750 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int wm8750_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int reg, ret = 0;
-+
-+ codec->name = "WM8750";
-+ codec->owner = THIS_MODULE;
-+ codec->read = wm8750_read_reg_cache;
-+ codec->write = wm8750_write;
-+ codec->dapm_event = wm8750_dapm_event;
-+ codec->dai = &wm8750_dai;
-+ codec->num_dai = 1;
-+ codec->reg_cache_size = ARRAY_SIZE(wm8750_reg);
-+
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm8750_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache, wm8750_reg,
-+ sizeof(u16) * ARRAY_SIZE(wm8750_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm8750_reg);
-+
-+ wm8750_reset(codec);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if (ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* charge output caps */
-+ wm8750_dapm_event(codec, SNDRV_CTL_POWER_D2);
-+ codec->dapm_state = SNDRV_CTL_POWER_D3hot;
-+ queue_delayed_work(wm8750_workq, &wm8750_dapm_work,
-+ msecs_to_jiffies(1000));
-+
-+ /* set the update bits */
-+ reg = wm8750_read_reg_cache(codec, WM8750_LDAC);
-+ wm8750_write(codec, WM8750_LDAC, reg | 0x0100);
-+ reg = wm8750_read_reg_cache(codec, WM8750_RDAC);
-+ wm8750_write(codec, WM8750_RDAC, reg | 0x0100);
-+ reg = wm8750_read_reg_cache(codec, WM8750_LOUT1V);
-+ wm8750_write(codec, WM8750_LOUT1V, reg | 0x0100);
-+ reg = wm8750_read_reg_cache(codec, WM8750_ROUT1V);
-+ wm8750_write(codec, WM8750_ROUT1V, reg | 0x0100);
-+ reg = wm8750_read_reg_cache(codec, WM8750_LOUT2V);
-+ wm8750_write(codec, WM8750_LOUT2V, reg | 0x0100);
-+ reg = wm8750_read_reg_cache(codec, WM8750_ROUT2V);
-+ wm8750_write(codec, WM8750_ROUT2V, reg | 0x0100);
-+ reg = wm8750_read_reg_cache(codec, WM8750_LINVOL);
-+ wm8750_write(codec, WM8750_LINVOL, reg | 0x0100);
-+ reg = wm8750_read_reg_cache(codec, WM8750_RINVOL);
-+ wm8750_write(codec, WM8750_RINVOL, reg | 0x0100);
-+
-+ wm8750_add_controls(codec);
-+ wm8750_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+/* If the i2c layer weren't so broken, we could pass this kind of data
-+ around */
-+static struct snd_soc_device *wm8750_socdev;
-+
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+
-+/*
-+ * WM8731 2 wire address is determined by GPIO5
-+ * state during powerup.
-+ * low = 0x1a
-+ * high = 0x1b
-+ */
-+static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END };
-+
-+/* Magic definition of all other variables and things */
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver wm8750_i2c_driver;
-+static struct i2c_client client_template;
-+
-+static int wm8750_codec_probe(struct i2c_adapter *adap, int addr, int kind)
-+{
-+ struct snd_soc_device *socdev = wm8750_socdev;
-+ struct wm8750_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct i2c_client *i2c;
-+ int ret;
-+
-+ if (addr != setup->i2c_address)
-+ return -ENODEV;
-+
-+ client_template.adapter = adap;
-+ client_template.addr = addr;
-+
-+ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (i2c == NULL) {
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+ memcpy(i2c, &client_template, sizeof(struct i2c_client));
-+ i2c_set_clientdata(i2c, codec);
-+ codec->control_data = i2c;
-+
-+ ret = i2c_attach_client(i2c);
-+ if (ret < 0) {
-+ err("failed to attach codec at addr %x\n", addr);
-+ goto err;
-+ }
-+
-+ ret = wm8750_init(socdev);
-+ if (ret < 0) {
-+ err("failed to initialise WM8750\n");
-+ goto err;
-+ }
-+ return ret;
-+
-+err:
-+ kfree(codec);
-+ kfree(i2c);
-+ return ret;
-+}
-+
-+static int wm8750_i2c_detach(struct i2c_client *client)
-+{
-+ struct snd_soc_codec *codec = i2c_get_clientdata(client);
-+ i2c_detach_client(client);
-+ kfree(codec->reg_cache);
-+ kfree(client);
-+ return 0;
-+}
-+
-+static int wm8750_i2c_attach(struct i2c_adapter *adap)
-+{
-+ return i2c_probe(adap, &addr_data, wm8750_codec_probe);
-+}
-+
-+/* corgi i2c codec control layer */
-+static struct i2c_driver wm8750_i2c_driver = {
-+ .driver = {
-+ .name = "WM8750 I2C Codec",
-+ .owner = THIS_MODULE,
-+ },
-+ .id = I2C_DRIVERID_WM8750,
-+ .attach_adapter = wm8750_i2c_attach,
-+ .detach_client = wm8750_i2c_detach,
-+ .command = NULL,
-+};
-+
-+static struct i2c_client client_template = {
-+ .name = "WM8750",
-+ .driver = &wm8750_i2c_driver,
-+};
-+#endif
-+
-+static int wm8750_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct wm8750_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+
-+ info("WM8750 Audio Codec %s", WM8750_VERSION);
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+ wm8750_socdev = socdev;
-+ INIT_WORK(&wm8750_dapm_work, wm8750_work, codec);
-+ wm8750_workq = create_workqueue("wm8750");
-+ if (wm8750_workq == NULL) {
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ if (setup->i2c_address) {
-+ normal_i2c[0] = setup->i2c_address;
-+ codec->hw_write = (hw_write_t)i2c_master_send;
-+ ret = i2c_add_driver(&wm8750_i2c_driver);
-+ if (ret != 0)
-+ printk(KERN_ERR "can't add i2c driver");
-+ }
-+#else
-+ /* Add other interfaces here */
-+#endif
-+
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int wm8750_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ wm8750_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ if (wm8750_workq)
-+ destroy_workqueue(wm8750_workq);
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ i2c_del_driver(&wm8750_i2c_driver);
-+#endif
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8750 = {
-+ .probe = wm8750_probe,
-+ .remove = wm8750_remove,
-+ .suspend = wm8750_suspend,
-+ .resume = wm8750_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm8750);
-+
-+MODULE_DESCRIPTION("ASoC WM8750 driver");
-+MODULE_AUTHOR("Liam Girdwood");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8750.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8750.h
-@@ -0,0 +1,66 @@
-+/*
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Author: Richard Purdie <richard@openedhand.com>
-+ *
-+ * Based on WM8753.h
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#ifndef _WM8750_H
-+#define _WM8750_H
-+
-+/* WM8750 register space */
-+
-+#define WM8750_LINVOL 0x00
-+#define WM8750_RINVOL 0x01
-+#define WM8750_LOUT1V 0x02
-+#define WM8750_ROUT1V 0x03
-+#define WM8750_ADCDAC 0x05
-+#define WM8750_IFACE 0x07
-+#define WM8750_SRATE 0x08
-+#define WM8750_LDAC 0x0a
-+#define WM8750_RDAC 0x0b
-+#define WM8750_BASS 0x0c
-+#define WM8750_TREBLE 0x0d
-+#define WM8750_RESET 0x0f
-+#define WM8750_3D 0x10
-+#define WM8750_ALC1 0x11
-+#define WM8750_ALC2 0x12
-+#define WM8750_ALC3 0x13
-+#define WM8750_NGATE 0x14
-+#define WM8750_LADC 0x15
-+#define WM8750_RADC 0x16
-+#define WM8750_ADCTL1 0x17
-+#define WM8750_ADCTL2 0x18
-+#define WM8750_PWR1 0x19
-+#define WM8750_PWR2 0x1a
-+#define WM8750_ADCTL3 0x1b
-+#define WM8750_ADCIN 0x1f
-+#define WM8750_LADCIN 0x20
-+#define WM8750_RADCIN 0x21
-+#define WM8750_LOUTM1 0x22
-+#define WM8750_LOUTM2 0x23
-+#define WM8750_ROUTM1 0x24
-+#define WM8750_ROUTM2 0x25
-+#define WM8750_MOUTM1 0x26
-+#define WM8750_MOUTM2 0x27
-+#define WM8750_LOUT2V 0x28
-+#define WM8750_ROUT2V 0x29
-+#define WM8750_MOUTV 0x2a
-+
-+#define WM8750_CACHE_REGNUM 0x2a
-+
-+struct wm8750_setup_data {
-+ unsigned short i2c_address;
-+ unsigned int mclk;
-+};
-+
-+extern struct snd_soc_codec_dai wm8750_dai;
-+extern struct snd_soc_codec_device soc_codec_dev_wm8750;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8753.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8753.c
-@@ -0,0 +1,2128 @@
-+/*
-+ * wm8753.c -- WM8753 ALSA Soc Audio driver
-+ *
-+ * Copyright 2003 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Notes:
-+ * The WM8753 is a low power, high quality stereo codec with integrated PCM
-+ * codec designed for portable digital telephony applications.
-+ *
-+ * Dual DAI:-
-+ *
-+ * This driver support 2 DAI PCM's. This makes the default PCM available for
-+ * HiFi audio (e.g. MP3, ogg) playback/capture and the other PCM available for
-+ * voice.
-+ *
-+ * Please note that the voice PCM can be connected directly to a Bluetooth
-+ * codec or GSM modem and thus cannot be read or written to, although it is
-+ * available to be configured with snd_hw_params(), etc and kcontrols in the
-+ * normal alsa manner.
-+ *
-+ * Fast DAI switching:-
-+ *
-+ * The driver can now fast switch between the DAI configurations via a
-+ * an alsa kcontrol. This allows the PCM to remain open.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/i2c.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+#include "wm8753.h"
-+
-+#define AUDIO_NAME "wm8753"
-+#define WM8753_VERSION "0.16"
-+
-+/*
-+ * Debug
-+ */
-+
-+#define WM8753_DEBUG 0
-+
-+#ifdef WM8753_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...) do {} while (0)
-+#endif
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+static int caps_charge = 2000;
-+module_param(caps_charge, int, 0);
-+MODULE_PARM_DESC(caps_charge, "WM8753 cap charge time (msecs)");
-+
-+static struct workqueue_struct *wm8753_workq = NULL;
-+static struct work_struct wm8753_dapm_work;
-+static void wm8753_set_dai_mode(struct snd_soc_codec *codec,
-+ unsigned int mode);
-+
-+/*
-+ * wm8753 register cache
-+ * We can't read the WM8753 register space when we
-+ * are using 2 wire for device control, so we cache them instead.
-+ */
-+static const u16 wm8753_reg[] = {
-+ 0x0008, 0x0000, 0x000a, 0x000a,
-+ 0x0033, 0x0000, 0x0007, 0x00ff,
-+ 0x00ff, 0x000f, 0x000f, 0x007b,
-+ 0x0000, 0x0032, 0x0000, 0x00c3,
-+ 0x00c3, 0x00c0, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0055,
-+ 0x0005, 0x0050, 0x0055, 0x0050,
-+ 0x0055, 0x0050, 0x0055, 0x0079,
-+ 0x0079, 0x0079, 0x0079, 0x0079,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0097, 0x0097, 0x0000, 0x0004,
-+ 0x0000, 0x0083, 0x0024, 0x01ba,
-+ 0x0000, 0x0083, 0x0024, 0x01ba,
-+ 0x0000, 0x0000
-+};
-+
-+#define WM8753_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_RIGHT_J | \
-+ SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_NF | \
-+ SND_SOC_DAIFMT_NB_IF | SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_IB_IF)
-+
-+#define WM8753_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define WM8753_HIFI_FSB \
-+ (SND_SOC_FSBD(1) | SND_SOC_FSBD(2) | SND_SOC_FSBD(4) | \
-+ SND_SOC_FSBD(8) | SND_SOC_FSBD(16))
-+
-+#define WM8753_HIFI_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
-+
-+#define WM8753_HIFI_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
-+
-+/*
-+ * HiFi modes
-+ */
-+static struct snd_soc_dai_mode wm8753_hifi_modes[] = {
-+ /* codec frame and clock master modes */
-+ /* 8k */
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1536,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1408,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 2304,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 2112,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1500,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+
-+ /* 11.025k */
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1024,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1536,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1088,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+
-+ /* 16k */
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 768,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt= WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1152,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 750,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+
-+ /* 22.05k */
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 512,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 768,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 544,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+
-+ /* 32k */
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 384,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 576,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 375,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+
-+ /* 44.1k & 48k */
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 384,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 250,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 272,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+
-+ /* 88.2k & 96k */
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 128,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 192,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 136,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 125,
-+ .bfs = WM8753_HIFI_FSB,
-+ },
-+
-+ /* codec frame and clock slave modes */
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = WM8753_HIFI_RATES,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+#define WM8753_VOICE_FSB \
-+ (SND_SOC_FSBD(1) | SND_SOC_FSBD(2) | SND_SOC_FSBD(4) | \
-+ SND_SOC_FSBD(8) | SND_SOC_FSBD(16))
-+
-+#define WM8753_VOICE_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000)
-+
-+#define WM8753_VOICE_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
-+
-+/*
-+ * Voice modes
-+ */
-+static struct snd_soc_dai_mode wm8753_voice_modes[] = {
-+
-+ /* master modes */
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_VOICE_BITS,
-+ .pcmrate = WM8753_VOICE_RATES,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = WM8753_VOICE_FSB,
-+ },
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM8753_VOICE_BITS,
-+ .pcmrate = WM8753_VOICE_RATES,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 384,
-+ .bfs = WM8753_VOICE_FSB,
-+ },
-+
-+ /* slave modes */
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM8753_VOICE_BITS,
-+ .pcmrate = WM8753_VOICE_RATES,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+
-+/*
-+ * Mode 4
-+ */
-+static struct snd_soc_dai_mode wm8753_mixed_modes[] = {
-+ /* slave modes */
-+ {
-+ .fmt = WM8753_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM8753_HIFI_BITS,
-+ .pcmrate = WM8753_HIFI_RATES,
-+ .pcmdir = WM8753_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+/*
-+ * read wm8753 register cache
-+ */
-+static inline unsigned int wm8753_read_reg_cache(struct snd_soc_codec *codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg < 1 || reg > (ARRAY_SIZE(wm8753_reg) + 1))
-+ return -1;
-+ return cache[reg - 1];
-+}
-+
-+/*
-+ * write wm8753 register cache
-+ */
-+static inline void wm8753_write_reg_cache(struct snd_soc_codec *codec,
-+ unsigned int reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg < 1 || reg > 0x3f)
-+ return;
-+ cache[reg - 1] = value;
-+}
-+
-+/*
-+ * write to the WM8753 register space
-+ */
-+static int wm8753_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[2];
-+
-+ /* data is
-+ * D15..D9 WM8753 register offset
-+ * D8...D0 register data
-+ */
-+ data[0] = (reg << 1) | ((value >> 8) & 0x0001);
-+ data[1] = value & 0x00ff;
-+
-+ wm8753_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 2) == 2)
-+ return 0;
-+ else
-+ return -EIO;
-+}
-+
-+#define wm8753_reset(c) wm8753_write(c, WM8753_RESET, 0)
-+
-+/*
-+ * WM8753 Controls
-+ */
-+static const char *wm8753_base[] = {"Linear Control", "Adaptive Boost"};
-+static const char *wm8753_base_filter[] =
-+ {"130Hz @ 48kHz", "200Hz @ 48kHz", "100Hz @ 16kHz", "400Hz @ 48kHz",
-+ "100Hz @ 8kHz", "200Hz @ 8kHz"};
-+static const char *wm8753_treble[] = {"8kHz", "4kHz"};
-+static const char *wm8753_alc_func[] = {"Off", "Right", "Left", "Stereo"};
-+static const char *wm8753_ng_type[] = {"Constant PGA Gain", "Mute ADC Output"};
-+static const char *wm8753_3d_func[] = {"Capture", "Playback"};
-+static const char *wm8753_3d_uc[] = {"2.2kHz", "1.5kHz"};
-+static const char *wm8753_3d_lc[] = {"200Hz", "500Hz"};
-+static const char *wm8753_deemp[] = {"None", "32kHz", "44.1kHz", "48kHz"};
-+static const char *wm8753_mono_mix[] = {"Stereo", "Left", "Right", "Mono"};
-+static const char *wm8753_dac_phase[] = {"Non Inverted", "Inverted"};
-+static const char *wm8753_line_mix[] = {"Line 1 + 2", "Line 1 - 2",
-+ "Line 1", "Line 2"};
-+static const char *wm8753_mono_mux[] = {"Line Mix", "Rx Mix"};
-+static const char *wm8753_right_mux[] = {"Line 2", "Rx Mix"};
-+static const char *wm8753_left_mux[] = {"Line 1", "Rx Mix"};
-+static const char *wm8753_rxmsel[] = {"RXP - RXN", "RXP + RXN", "RXP", "RXN"};
-+static const char *wm8753_sidetone_mux[] = {"Left PGA", "Mic 1", "Mic 2",
-+ "Right PGA"};
-+static const char *wm8753_mono2_src[] = {"Inverted Mono 1", "Left", "Right",
-+ "Left + Right"};
-+static const char *wm8753_out3[] = {"VREF", "ROUT2", "Left + Right"};
-+static const char *wm8753_out4[] = {"VREF", "Capture ST", "LOUT2"};
-+static const char *wm8753_radcsel[] = {"PGA", "Line or RXP-RXN", "Sidetone"};
-+static const char *wm8753_ladcsel[] = {"PGA", "Line or RXP-RXN", "Line"};
-+static const char *wm8753_mono_adc[] = {"Stereo", "Analogue Mix Left",
-+ "Analogue Mix Right", "Digital Mono Mix"};
-+static const char *wm8753_adc_hp[] = {"3.4Hz @ 48kHz", "82Hz @ 16k",
-+ "82Hz @ 8kHz", "170Hz @ 8kHz"};
-+static const char *wm8753_adc_filter[] = {"HiFi", "Voice"};
-+static const char *wm8753_mic_sel[] = {"Mic 1", "Mic 2", "Mic 3"};
-+static const char *wm8753_dai_mode[] = {"DAI 0", "DAI 1", "DAI 2", "DAI 3"};
-+
-+static const struct soc_enum wm8753_enum[] = {
-+SOC_ENUM_SINGLE(WM8753_BASS, 7, 2, wm8753_base), // 0
-+SOC_ENUM_SINGLE(WM8753_BASS, 4, 6, wm8753_base_filter), // 1
-+SOC_ENUM_SINGLE(WM8753_TREBLE, 6, 2, wm8753_treble), // 2
-+SOC_ENUM_SINGLE(WM8753_ALC1, 7, 4, wm8753_alc_func), // 3
-+SOC_ENUM_SINGLE(WM8753_NGATE, 1, 2, wm8753_ng_type), // 4
-+SOC_ENUM_SINGLE(WM8753_3D, 7, 2, wm8753_3d_func), // 5
-+SOC_ENUM_SINGLE(WM8753_3D, 6, 2, wm8753_3d_uc), // 6
-+SOC_ENUM_SINGLE(WM8753_3D, 5, 2, wm8753_3d_lc), // 7
-+SOC_ENUM_SINGLE(WM8753_DAC, 1, 4, wm8753_deemp), // 8
-+SOC_ENUM_SINGLE(WM8753_DAC, 4, 4, wm8753_mono_mix), // 9
-+SOC_ENUM_SINGLE(WM8753_DAC, 6, 2, wm8753_dac_phase), // 10
-+SOC_ENUM_SINGLE(WM8753_INCTL1, 3, 4, wm8753_line_mix), // 11
-+SOC_ENUM_SINGLE(WM8753_INCTL1, 2, 2, wm8753_mono_mux), // 12
-+SOC_ENUM_SINGLE(WM8753_INCTL1, 1, 2, wm8753_right_mux), // 13
-+SOC_ENUM_SINGLE(WM8753_INCTL1, 0, 2, wm8753_left_mux), // 14
-+SOC_ENUM_SINGLE(WM8753_INCTL2, 6, 4, wm8753_rxmsel), // 15
-+SOC_ENUM_SINGLE(WM8753_INCTL2, 4, 4, wm8753_sidetone_mux),// 16
-+SOC_ENUM_SINGLE(WM8753_OUTCTL, 7, 4, wm8753_mono2_src), // 17
-+SOC_ENUM_SINGLE(WM8753_OUTCTL, 0, 3, wm8753_out3), // 18
-+SOC_ENUM_SINGLE(WM8753_ADCTL2, 7, 3, wm8753_out4), // 19
-+SOC_ENUM_SINGLE(WM8753_ADCIN, 2, 3, wm8753_radcsel), // 20
-+SOC_ENUM_SINGLE(WM8753_ADCIN, 0, 3, wm8753_ladcsel), // 21
-+SOC_ENUM_SINGLE(WM8753_ADCIN, 4, 4, wm8753_mono_adc), // 22
-+SOC_ENUM_SINGLE(WM8753_ADC, 2, 4, wm8753_adc_hp), // 23
-+SOC_ENUM_SINGLE(WM8753_ADC, 4, 2, wm8753_adc_filter), // 24
-+SOC_ENUM_SINGLE(WM8753_MICBIAS, 6, 3, wm8753_mic_sel), // 25
-+SOC_ENUM_SINGLE(WM8753_IOCTL, 2, 4, wm8753_dai_mode), // 26
-+};
-+
-+
-+static int wm8753_get_dai(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+ int mode = wm8753_read_reg_cache(codec, WM8753_IOCTL);
-+
-+ ucontrol->value.integer.value[0] = (mode & 0xc) >> 2;
-+ return 0;
-+}
-+
-+static int wm8753_set_dai(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+ int mode = wm8753_read_reg_cache(codec, WM8753_IOCTL);
-+
-+ if (((mode &0xc) >> 2) == ucontrol->value.integer.value[0])
-+ return 0;
-+
-+ mode &= 0xfff3;
-+ mode |= (ucontrol->value.integer.value[0] << 2);
-+
-+ wm8753_write(codec, WM8753_IOCTL, mode);
-+ wm8753_set_dai_mode(codec, ucontrol->value.integer.value[0]);
-+ return 1;
-+}
-+
-+static const struct snd_kcontrol_new wm8753_snd_controls[] = {
-+SOC_DOUBLE_R("PCM Volume", WM8753_LDAC, WM8753_RDAC, 0, 255, 0),
-+
-+SOC_DOUBLE_R("ADC Capture Volume", WM8753_LADC, WM8753_RADC, 0, 63, 0),
-+SOC_DOUBLE_R("ADC Capture Switch", WM8753_LINVOL, WM8753_RINVOL, 7, 1, 0),
-+SOC_DOUBLE_R("ADC Capture ZC Switch", WM8753_LINVOL, WM8753_RINVOL, 6, 1, 0),
-+
-+SOC_DOUBLE_R("Headphone Playback Volume", WM8753_LOUT1V, WM8753_ROUT1V, 0, 127, 0),
-+SOC_DOUBLE_R("Speaker Playback Volume", WM8753_LOUT2V, WM8753_ROUT2V, 0, 127, 0),
-+
-+SOC_SINGLE("Mono Playback Volume", WM8753_MOUTV, 0, 127, 0),
-+
-+SOC_DOUBLE_R("Bypass Playback Volume", WM8753_LOUTM1, WM8753_ROUTM1, 4, 7, 1),
-+SOC_DOUBLE_R("Sidetone Playback Volume", WM8753_LOUTM2, WM8753_ROUTM2, 4, 7, 1),
-+SOC_DOUBLE_R("Voice Playback Volume", WM8753_LOUTM2, WM8753_ROUTM2, 0, 7, 1),
-+
-+SOC_DOUBLE_R("Headphone Playback ZC Switch", WM8753_LOUT1V, WM8753_ROUT1V, 7, 1, 0),
-+SOC_DOUBLE_R("Speaker Playback ZC Switch", WM8753_LOUT2V, WM8753_ROUT2V, 7, 1, 0),
-+
-+SOC_SINGLE("Mono Bypass Playback Volume", WM8753_MOUTM1, 4, 7, 1),
-+SOC_SINGLE("Mono Sidetone Playback Volume", WM8753_MOUTM2, 4, 7, 1),
-+SOC_SINGLE("Mono Voice Playback Volume", WM8753_MOUTM2, 4, 7, 1),
-+SOC_SINGLE("Mono Playback ZC Switch", WM8753_MOUTV, 7, 1, 0),
-+
-+SOC_ENUM("Bass Boost", wm8753_enum[0]),
-+SOC_ENUM("Bass Filter", wm8753_enum[1]),
-+SOC_SINGLE("Bass Volume", WM8753_BASS, 0, 7, 1),
-+
-+SOC_SINGLE("Treble Volume", WM8753_TREBLE, 0, 7, 0),
-+SOC_ENUM("Treble Cut-off", wm8753_enum[2]),
-+
-+SOC_DOUBLE("Sidetone Capture Volume", WM8753_RECMIX1, 0, 4, 7, 1),
-+SOC_SINGLE("Voice Sidetone Capture Volume", WM8753_RECMIX2, 0, 7, 1),
-+
-+SOC_DOUBLE_R("Capture Volume", WM8753_LINVOL, WM8753_RINVOL, 0, 63, 0),
-+SOC_DOUBLE_R("Capture ZC Switch", WM8753_LINVOL, WM8753_RINVOL, 6, 1, 0),
-+SOC_DOUBLE_R("Capture Switch", WM8753_LINVOL, WM8753_RINVOL, 7, 1, 0),
-+
-+SOC_ENUM("Capture Filter Select", wm8753_enum[23]),
-+SOC_ENUM("Capture Filter Cut-off", wm8753_enum[24]),
-+SOC_SINGLE("Capture Filter Switch", WM8753_ADC, 0, 1, 1),
-+
-+SOC_SINGLE("ALC Capture Target Volume", WM8753_ALC1, 0, 7, 0),
-+SOC_SINGLE("ALC Capture Max Volume", WM8753_ALC1, 4, 7, 0),
-+SOC_ENUM("ALC Capture Function", wm8753_enum[3]),
-+SOC_SINGLE("ALC Capture ZC Switch", WM8753_ALC2, 8, 1, 0),
-+SOC_SINGLE("ALC Capture Hold Time", WM8753_ALC2, 0, 15, 1),
-+SOC_SINGLE("ALC Capture Decay Time", WM8753_ALC3, 4, 15, 1),
-+SOC_SINGLE("ALC Capture Attack Time", WM8753_ALC3, 0, 15, 0),
-+SOC_SINGLE("ALC Capture NG Threshold", WM8753_NGATE, 3, 31, 0),
-+SOC_ENUM("ALC Capture NG Type", wm8753_enum[4]),
-+SOC_SINGLE("ALC Capture NG Switch", WM8753_NGATE, 0, 1, 0),
-+
-+SOC_ENUM("3D Function", wm8753_enum[5]),
-+SOC_ENUM("3D Upper Cut-off", wm8753_enum[6]),
-+SOC_ENUM("3D Lower Cut-off", wm8753_enum[7]),
-+SOC_SINGLE("3D Volume", WM8753_3D, 1, 15, 0),
-+SOC_SINGLE("3D Switch", WM8753_3D, 0, 1, 0),
-+
-+SOC_SINGLE("Capture 6dB Attenuate", WM8753_ADCTL1, 2, 1, 0),
-+SOC_SINGLE("Playback 6dB Attenuate", WM8753_ADCTL1, 1, 1, 0),
-+
-+SOC_ENUM("De-emphasis", wm8753_enum[8]),
-+SOC_ENUM("Playback Mono Mix", wm8753_enum[9]),
-+SOC_ENUM("Playback Phase", wm8753_enum[10]),
-+
-+SOC_SINGLE("Mic2 Capture Volume", WM8753_INCTL1, 7, 3, 0),
-+SOC_SINGLE("Mic1 Capture Volume", WM8753_INCTL1, 5, 3, 0),
-+
-+SOC_ENUM_EXT("DAI Mode", wm8753_enum[26], wm8753_get_dai, wm8753_set_dai),
-+};
-+
-+/* add non dapm controls */
-+static int wm8753_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm8753_snd_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8753_snd_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+ return 0;
-+}
-+
-+/*
-+ * _DAPM_ Controls
-+ */
-+
-+/* Left Mixer */
-+static const struct snd_kcontrol_new wm8753_left_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Voice Playback Switch", WM8753_LOUTM2, 8, 1, 0),
-+SOC_DAPM_SINGLE("Sidetone Playback Switch", WM8753_LOUTM2, 7, 1, 0),
-+SOC_DAPM_SINGLE("Left Playback Switch", WM8753_LOUTM1, 8, 1, 0),
-+SOC_DAPM_SINGLE("Bypass Playback Switch", WM8753_LOUTM1, 7, 1, 0),
-+};
-+
-+/* Right mixer */
-+static const struct snd_kcontrol_new wm8753_right_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Voice Playback Switch", WM8753_ROUTM2, 8, 1, 0),
-+SOC_DAPM_SINGLE("Sidetone Playback Switch", WM8753_ROUTM2, 7, 1, 0),
-+SOC_DAPM_SINGLE("Right Playback Switch", WM8753_ROUTM1, 8, 1, 0),
-+SOC_DAPM_SINGLE("Bypass Playback Switch", WM8753_ROUTM1, 7, 1, 0),
-+};
-+
-+/* Mono mixer */
-+static const struct snd_kcontrol_new wm8753_mono_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Left Playback Switch", WM8753_MOUTM1, 8, 1, 0),
-+SOC_DAPM_SINGLE("Right Playback Switch", WM8753_MOUTM2, 8, 1, 0),
-+SOC_DAPM_SINGLE("Voice Playback Switch", WM8753_MOUTM2, 3, 1, 0),
-+SOC_DAPM_SINGLE("Sidetone Playback Switch", WM8753_MOUTM2, 7, 1, 0),
-+SOC_DAPM_SINGLE("Bypass Playback Switch", WM8753_MOUTM1, 7, 1, 0),
-+};
-+
-+/* Mono 2 Mux */
-+static const struct snd_kcontrol_new wm8753_mono2_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[17]);
-+
-+/* Out 3 Mux */
-+static const struct snd_kcontrol_new wm8753_out3_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[18]);
-+
-+/* Out 4 Mux */
-+static const struct snd_kcontrol_new wm8753_out4_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[19]);
-+
-+/* ADC Mono Mix */
-+static const struct snd_kcontrol_new wm8753_adc_mono_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[22]);
-+
-+/* Record mixer */
-+static const struct snd_kcontrol_new wm8753_record_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Voice Capture Switch", WM8753_RECMIX2, 3, 1, 0),
-+SOC_DAPM_SINGLE("Left Capture Switch", WM8753_RECMIX1, 3, 1, 0),
-+SOC_DAPM_SINGLE("Right Capture Switch", WM8753_RECMIX1, 7, 1, 0),
-+};
-+
-+/* Left ADC mux */
-+static const struct snd_kcontrol_new wm8753_adc_left_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[21]);
-+
-+/* Right ADC mux */
-+static const struct snd_kcontrol_new wm8753_adc_right_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[20]);
-+
-+/* MIC mux */
-+static const struct snd_kcontrol_new wm8753_mic_mux_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[16]);
-+
-+/* ALC mixer */
-+static const struct snd_kcontrol_new wm8753_alc_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Line Capture Switch", WM8753_INCTL2, 3, 1, 0),
-+SOC_DAPM_SINGLE("Mic2 Capture Switch", WM8753_INCTL2, 2, 1, 0),
-+SOC_DAPM_SINGLE("Mic1 Capture Switch", WM8753_INCTL2, 1, 1, 0),
-+SOC_DAPM_SINGLE("Rx Capture Switch", WM8753_INCTL2, 0, 1, 0),
-+};
-+
-+/* Left Line mux */
-+static const struct snd_kcontrol_new wm8753_line_left_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[14]);
-+
-+/* Right Line mux */
-+static const struct snd_kcontrol_new wm8753_line_right_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[13]);
-+
-+/* Mono Line mux */
-+static const struct snd_kcontrol_new wm8753_line_mono_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[12]);
-+
-+/* Line mux and mixer */
-+static const struct snd_kcontrol_new wm8753_line_mux_mix_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[11]);
-+
-+/* Rx mux and mixer */
-+static const struct snd_kcontrol_new wm8753_rx_mux_mix_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[15]);
-+
-+/* Mic Selector Mux */
-+static const struct snd_kcontrol_new wm8753_mic_sel_mux_controls =
-+SOC_DAPM_ENUM("Route", wm8753_enum[25]);
-+
-+static const struct snd_soc_dapm_widget wm8753_dapm_widgets[] = {
-+SND_SOC_DAPM_MICBIAS("Mic Bias", WM8753_PWR1, 5, 0),
-+SND_SOC_DAPM_MIXER("Left Mixer", WM8753_PWR4, 0, 0,
-+ &wm8753_left_mixer_controls[0], ARRAY_SIZE(wm8753_left_mixer_controls)),
-+SND_SOC_DAPM_PGA("Left Out 1", WM8753_PWR3, 8, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Left Out 2", WM8753_PWR3, 6, 0, NULL, 0),
-+SND_SOC_DAPM_DAC("Left DAC", "Left HiFi Playback", WM8753_PWR1, 3, 0),
-+SND_SOC_DAPM_OUTPUT("LOUT1"),
-+SND_SOC_DAPM_OUTPUT("LOUT2"),
-+SND_SOC_DAPM_MIXER("Right Mixer", WM8753_PWR4, 1, 0,
-+ &wm8753_right_mixer_controls[0], ARRAY_SIZE(wm8753_right_mixer_controls)),
-+SND_SOC_DAPM_PGA("Right Out 1", WM8753_PWR3, 7, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Right Out 2", WM8753_PWR3, 5, 0, NULL, 0),
-+SND_SOC_DAPM_DAC("Right DAC", "Right HiFi Playback", WM8753_PWR1, 2, 0),
-+SND_SOC_DAPM_OUTPUT("ROUT1"),
-+SND_SOC_DAPM_OUTPUT("ROUT2"),
-+SND_SOC_DAPM_MIXER("Mono Mixer", WM8753_PWR4, 2, 0,
-+ &wm8753_mono_mixer_controls[0], ARRAY_SIZE(wm8753_mono_mixer_controls)),
-+SND_SOC_DAPM_PGA("Mono Out 1", WM8753_PWR3, 2, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Mono Out 2", WM8753_PWR3, 1, 0, NULL, 0),
-+SND_SOC_DAPM_DAC("Voice DAC", "Voice Playback", WM8753_PWR1, 4, 0),
-+SND_SOC_DAPM_OUTPUT("MONO1"),
-+SND_SOC_DAPM_MUX("Mono 2 Mux", SND_SOC_NOPM, 0, 0, &wm8753_mono2_controls),
-+SND_SOC_DAPM_OUTPUT("MONO2"),
-+SND_SOC_DAPM_MIXER("Out3 Left + Right", -1, 0, 0, NULL, 0),
-+SND_SOC_DAPM_MUX("Out3 Mux", SND_SOC_NOPM, 0, 0, &wm8753_out3_controls),
-+SND_SOC_DAPM_PGA("Out 3", WM8753_PWR3, 4, 0, NULL, 0),
-+SND_SOC_DAPM_OUTPUT("OUT3"),
-+SND_SOC_DAPM_MUX("Out4 Mux", SND_SOC_NOPM, 0, 0, &wm8753_out4_controls),
-+SND_SOC_DAPM_PGA("Out 4", WM8753_PWR3, 3, 0, NULL, 0),
-+SND_SOC_DAPM_OUTPUT("OUT4"),
-+SND_SOC_DAPM_MIXER("Playback Mixer", WM8753_PWR4, 3, 0,
-+ &wm8753_record_mixer_controls[0],
-+ ARRAY_SIZE(wm8753_record_mixer_controls)),
-+SND_SOC_DAPM_ADC("Left ADC", "Left Voice Capture", WM8753_PWR2, 3, 0),
-+SND_SOC_DAPM_ADC("Right ADC", "Right Voice Capture", WM8753_PWR2, 2, 0),
-+SND_SOC_DAPM_MUX("Capture Left Mixer", SND_SOC_NOPM, 0, 0,
-+ &wm8753_adc_mono_controls),
-+SND_SOC_DAPM_MUX("Capture Right Mixer", SND_SOC_NOPM, 0, 0,
-+ &wm8753_adc_mono_controls),
-+SND_SOC_DAPM_MUX("Capture Left Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8753_adc_left_controls),
-+SND_SOC_DAPM_MUX("Capture Right Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8753_adc_right_controls),
-+SND_SOC_DAPM_MUX("Mic Sidetone Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8753_mic_mux_controls),
-+SND_SOC_DAPM_PGA("Left Capture Volume", WM8753_PWR2, 5, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Right Capture Volume", WM8753_PWR2, 4, 0, NULL, 0),
-+SND_SOC_DAPM_MIXER("ALC Mixer", WM8753_PWR2, 6, 0,
-+ &wm8753_alc_mixer_controls[0], ARRAY_SIZE(wm8753_alc_mixer_controls)),
-+SND_SOC_DAPM_MUX("Line Left Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8753_line_left_controls),
-+SND_SOC_DAPM_MUX("Line Right Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8753_line_right_controls),
-+SND_SOC_DAPM_MUX("Line Mono Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8753_line_mono_controls),
-+SND_SOC_DAPM_MUX("Line Mixer", SND_SOC_NOPM, 0, 0,
-+ &wm8753_line_mux_mix_controls),
-+SND_SOC_DAPM_MUX("Rx Mixer", SND_SOC_NOPM, 0, 0,
-+ &wm8753_rx_mux_mix_controls),
-+SND_SOC_DAPM_PGA("Mic 1 Volume", WM8753_PWR2, 8, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Mic 2 Volume", WM8753_PWR2, 7, 0, NULL, 0),
-+SND_SOC_DAPM_MUX("Mic Selection Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8753_mic_sel_mux_controls),
-+SND_SOC_DAPM_INPUT("LINE1"),
-+SND_SOC_DAPM_INPUT("LINE2"),
-+SND_SOC_DAPM_INPUT("RXP"),
-+SND_SOC_DAPM_INPUT("RXN"),
-+SND_SOC_DAPM_INPUT("ACIN"),
-+SND_SOC_DAPM_INPUT("ACOP"),
-+SND_SOC_DAPM_INPUT("MIC1N"),
-+SND_SOC_DAPM_INPUT("MIC1"),
-+SND_SOC_DAPM_INPUT("MIC2N"),
-+SND_SOC_DAPM_INPUT("MIC2"),
-+SND_SOC_DAPM_VMID("VREF"),
-+};
-+
-+static const char *audio_map[][3] = {
-+ /* left mixer */
-+ {"Left Mixer", "Left Playback Switch", "Left DAC"},
-+ {"Left Mixer", "Voice Playback Switch", "Voice DAC"},
-+ {"Left Mixer", "Sidetone Playback Switch", "Mic Sidetone Mux"},
-+ {"Left Mixer", "Bypass Playback Switch", "Line Left Mux"},
-+
-+ /* right mixer */
-+ {"Right Mixer", "Right Playback Switch", "Right DAC"},
-+ {"Right Mixer", "Voice Playback Switch", "Voice DAC"},
-+ {"Right Mixer", "Sidetone Playback Switch", "Mic Sidetone Mux"},
-+ {"Right Mixer", "Bypass Playback Switch", "Line Right Mux"},
-+
-+ /* mono mixer */
-+ {"Mono Mixer", "Voice Playback Switch", "Voice DAC"},
-+ {"Mono Mixer", "Left Playback Switch", "Left DAC"},
-+ {"Mono Mixer", "Right Playback Switch", "Right DAC"},
-+ {"Mono Mixer", "Sidetone Playback Switch", "Mic Sidetone Mux"},
-+ {"Mono Mixer", "Bypass Playback Switch", "Line Mono Mux"},
-+
-+ /* left out */
-+ {"Left Out 1", NULL, "Left Mixer"},
-+ {"Left Out 2", NULL, "Left Mixer"},
-+ {"LOUT1", NULL, "Left Out 1"},
-+ {"LOUT2", NULL, "Left Out 2"},
-+
-+ /* right out */
-+ {"Right Out 1", NULL, "Right Mixer"},
-+ {"Right Out 2", NULL, "Right Mixer"},
-+ {"ROUT1", NULL, "Right Out 1"},
-+ {"ROUT2", NULL, "Right Out 2"},
-+
-+ /* mono 1 out */
-+ {"Mono Out 1", NULL, "Mono Mixer"},
-+ {"MONO1", NULL, "Mono Out 1"},
-+
-+ /* mono 2 out */
-+ {"Mono 2 Mux", "Left + Right", "Out3 Left + Right"},
-+ {"Mono 2 Mux", "Inverted Mono 1", "MONO1"},
-+ {"Mono 2 Mux", "Left", "Left Mixer"},
-+ {"Mono 2 Mux", "Right", "Right Mixer"},
-+ {"Mono Out 2", NULL, "Mono 2 Mux"},
-+ {"MONO2", NULL, "Mono Out 2"},
-+
-+ /* out 3 */
-+ {"Out3 Left + Right", NULL, "Left Mixer"},
-+ {"Out3 Left + Right", NULL, "Right Mixer"},
-+ {"Out3 Mux", "VREF", "VREF"},
-+ {"Out3 Mux", "Left + Right", "Out3 Left + Right"},
-+ {"Out3 Mux", "ROUT2", "ROUT2"},
-+ {"Out 3", NULL, "Out3 Mux"},
-+ {"OUT3", NULL, "Out 3"},
-+
-+ /* out 4 */
-+ {"Out4 Mux", "VREF", "VREF"},
-+ {"Out4 Mux", "Capture ST", "Capture ST Mixer"},
-+ {"Out4 Mux", "LOUT2", "LOUT2"},
-+ {"Out 4", NULL, "Out4 Mux"},
-+ {"OUT4", NULL, "Out 4"},
-+
-+ /* record mixer */
-+ {"Playback Mixer", "Left Capture Switch", "Left Mixer"},
-+ {"Playback Mixer", "Voice Capture Switch", "Mono Mixer"},
-+ {"Playback Mixer", "Right Capture Switch", "Right Mixer"},
-+
-+ /* Mic/SideTone Mux */
-+ {"Mic Sidetone Mux", "Left PGA", "Left Capture Volume"},
-+ {"Mic Sidetone Mux", "Right PGA", "Right Capture Volume"},
-+ {"Mic Sidetone Mux", "Mic 1", "Mic 1 Volume"},
-+ {"Mic Sidetone Mux", "Mic 2", "Mic 2 Volume"},
-+
-+ /* Capture Left Mux */
-+ {"Capture Left Mux", "PGA", "Left Capture Volume"},
-+ {"Capture Left Mux", "Line or RXP-RXN", "Line Left Mux"},
-+ {"Capture Left Mux", "Line", "LINE1"},
-+
-+ /* Capture Right Mux */
-+ {"Capture Right Mux", "PGA", "Right Capture Volume"},
-+ {"Capture Right Mux", "Line or RXP-RXN", "Line Right Mux"},
-+ {"Capture Right Mux", "Sidetone", "Capture ST Mixer"},
-+
-+ /* Mono Capture mixer-mux */
-+ {"Capture Right Mixer", "Stereo", "Capture Right Mux"},
-+ {"Capture Left Mixer", "Analogue Mix Left", "Capture Left Mux"},
-+ {"Capture Left Mixer", "Analogue Mix Left", "Capture Right Mux"},
-+ {"Capture Right Mixer", "Analogue Mix Right", "Capture Left Mux"},
-+ {"Capture Right Mixer", "Analogue Mix Right", "Capture Right Mux"},
-+ {"Capture Left Mixer", "Digital Mono Mix", "Capture Left Mux"},
-+ {"Capture Left Mixer", "Digital Mono Mix", "Capture Right Mux"},
-+ {"Capture Right Mixer", "Digital Mono Mix", "Capture Left Mux"},
-+ {"Capture Right Mixer", "Digital Mono Mix", "Capture Right Mux"},
-+
-+ /* ADC */
-+ {"Left ADC", NULL, "Capture Left Mixer"},
-+ {"Right ADC", NULL, "Capture Right Mixer"},
-+
-+ /* Left Capture Volume */
-+ {"Left Capture Volume", NULL, "ACIN"},
-+
-+ /* Right Capture Volume */
-+ {"Right Capture Volume", NULL, "Mic 2 Volume"},
-+
-+ /* ALC Mixer */
-+ {"ALC Mixer", "Line Capture Switch", "Line Mixer"},
-+ {"ALC Mixer", "Mic2 Capture Switch", "Mic 2 Volume"},
-+ {"ALC Mixer", "Mic1 Capture Switch", "Mic 1 Volume"},
-+ {"ALC Mixer", "Rx Capture Switch", "Rx Mixer"},
-+
-+ /* Line Left Mux */
-+ {"Line Left Mux", "Line 1", "LINE1"},
-+ {"Line Left Mux", "Rx Mix", "Rx Mixer"},
-+
-+ /* Line Right Mux */
-+ {"Line Right Mux", "Line 2", "LINE2"},
-+ {"Line Right Mux", "Rx Mix", "Rx Mixer"},
-+
-+ /* Line Mono Mux */
-+ {"Line Mono Mux", "Line Mix", "Line Mixer"},
-+ {"Line Mono Mux", "Rx Mix", "Rx Mixer"},
-+
-+ /* Line Mixer/Mux */
-+ {"Line Mixer", "Line 1 + 2", "LINE1"},
-+ {"Line Mixer", "Line 1 - 2", "LINE1"},
-+ {"Line Mixer", "Line 1 + 2", "LINE2"},
-+ {"Line Mixer", "Line 1 - 2", "LINE2"},
-+ {"Line Mixer", "Line 1", "LINE1"},
-+ {"Line Mixer", "Line 2", "LINE2"},
-+
-+ /* Rx Mixer/Mux */
-+ {"Rx Mixer", "RXP - RXN", "RXP"},
-+ {"Rx Mixer", "RXP + RXN", "RXP"},
-+ {"Rx Mixer", "RXP - RXN", "RXN"},
-+ {"Rx Mixer", "RXP + RXN", "RXN"},
-+ {"Rx Mixer", "RXP", "RXP"},
-+ {"Rx Mixer", "RXN", "RXN"},
-+
-+ /* Mic 1 Volume */
-+ {"Mic 1 Volume", NULL, "MIC1N"},
-+ {"Mic 1 Volume", NULL, "Mic Selection Mux"},
-+
-+ /* Mic 2 Volume */
-+ {"Mic 2 Volume", NULL, "MIC2N"},
-+ {"Mic 2 Volume", NULL, "MIC2"},
-+
-+ /* Mic Selector Mux */
-+ {"Mic Selection Mux", "Mic 1", "MIC1"},
-+ {"Mic Selection Mux", "Mic 2", "MIC2N"},
-+ {"Mic Selection Mux", "Mic 3", "MIC2"},
-+
-+ /* ACOP */
-+ {"ACOP", NULL, "ALC Mixer"},
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int wm8753_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(wm8753_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8753_dapm_widgets[i]);
-+ }
-+
-+ /* set up the WM8753 audio map */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+/* PLL divisors */
-+struct _pll_div {
-+ u32 pll_in; /* ext clock input */
-+ u32 pll_out; /* pll out freq */
-+ u32 div2:1;
-+ u32 n:4;
-+ u32 k:24;
-+};
-+
-+/*
-+ * PLL divisors -
-+ */
-+static const struct _pll_div pll_div[] = {
-+ {13000000, 12288000, 0, 0x7, 0x23F54A},
-+ {13000000, 11289600, 0, 0x6, 0x3CA2F5},
-+ {12000000, 12288000, 0, 0x8, 0x0C49BA},
-+ {12000000, 11289600, 0, 0x7, 0x21B08A},
-+ {24000000, 12288000, 1, 0x8, 0x0C49BA},
-+ {24000000, 11289600, 1, 0x7, 0x21B08A},
-+ {12288000, 11289600, 0, 0x7, 0x166667},
-+ {26000000, 11289600, 1, 0x6, 0x3CA2F5},
-+ {26000000, 12288000, 1, 0x7, 0x23F54A},
-+};
-+
-+static u32 wm8753_config_pll(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int pll)
-+{
-+ u16 reg;
-+ int found = 0;
-+
-+ if (pll == 1) {
-+ reg = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0xffef;
-+ if (!dai->pll_in || !dai->mclk) {
-+ /* disable PLL1 */
-+ wm8753_write(codec, WM8753_PLL1CTL1, 0x0026);
-+ wm8753_write(codec, WM8753_CLOCK, reg);
-+ return 0;
-+ } else {
-+ u16 value = 0;
-+ int i = 0;
-+
-+ /* if we cant match, then use good values for N and K */
-+ for (;i < ARRAY_SIZE(pll_div); i++) {
-+ if (pll_div[i].pll_out == dai->pll_out &&
-+ pll_div[i].pll_in == dai->pll_in) {
-+ found = 1;
-+ break;
-+ }
-+ }
-+
-+ if (!found)
-+ goto err;
-+
-+ /* set up N and K PLL divisor ratios */
-+ /* bits 8:5 = PLL_N, bits 3:0 = PLL_K[21:18] */
-+ value = (pll_div[i].n << 5) + ((pll_div[i].k & 0x3c0000) >> 18);
-+ wm8753_write(codec, WM8753_PLL1CTL2, value);
-+
-+ /* bits 8:0 = PLL_K[17:9] */
-+ value = (pll_div[i].k & 0x03fe00) >> 9;
-+ wm8753_write(codec, WM8753_PLL1CTL3, value);
-+
-+ /* bits 8:0 = PLL_K[8:0] */
-+ value = pll_div[i].k & 0x0001ff;
-+ wm8753_write(codec, WM8753_PLL1CTL4, value);
-+
-+ /* set PLL1 as input and enable */
-+ wm8753_write(codec, WM8753_PLL1CTL1, 0x0027 |
-+ (pll_div[i].div2 << 3));
-+ wm8753_write(codec, WM8753_CLOCK, reg | 0x0010);
-+ }
-+ } else {
-+ reg = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0xfff7;
-+ if (!dai->pll_in || !dai->mclk) {
-+ /* disable PLL2 */
-+ wm8753_write(codec, WM8753_PLL2CTL1, 0x0026);
-+ wm8753_write(codec, WM8753_CLOCK, reg);
-+ return 0;
-+ } else {
-+ u16 value = 0;
-+ int i = 0;
-+
-+ /* if we cant match, then use good values for N and K */
-+ for (;i < ARRAY_SIZE(pll_div); i++) {
-+ if (pll_div[i].pll_out == dai->pll_out &&
-+ pll_div[i].pll_in == dai->pll_in) {
-+ found = 1;
-+ break;
-+ }
-+ }
-+
-+ if (!found)
-+ goto err;
-+
-+ /* set up N and K PLL divisor ratios */
-+ /* bits 8:5 = PLL_N, bits 3:0 = PLL_K[21:18] */
-+ value = (pll_div[i].n << 5) + ((pll_div[i].k & 0x3c0000) >> 18);
-+ wm8753_write(codec, WM8753_PLL2CTL2, value);
-+
-+ /* bits 8:0 = PLL_K[17:9] */
-+ value = (pll_div[i].k & 0x03fe00) >> 9;
-+ wm8753_write(codec, WM8753_PLL2CTL3, value);
-+
-+ /* bits 8:0 = PLL_K[8:0] */
-+ value = pll_div[i].k & 0x0001ff;
-+ wm8753_write(codec, WM8753_PLL2CTL4, value);
-+
-+ /* set PLL1 as input and enable */
-+ wm8753_write(codec, WM8753_PLL2CTL1, 0x0027 |
-+ (pll_div[i].div2 << 3));
-+ wm8753_write(codec, WM8753_CLOCK, reg | 0x0008);
-+ }
-+ }
-+
-+ return dai->pll_in;
-+err:
-+ return 0;
-+}
-+
-+struct _coeff_div {
-+ u32 mclk;
-+ u32 rate;
-+ u16 fs;
-+ u8 sr:5;
-+ u8 usb:1;
-+};
-+
-+/* codec hifi mclk (after PLL) clock divider coefficients */
-+static const struct _coeff_div coeff_div[] = {
-+ /* 8k */
-+ {12288000, 8000, 1536, 0x6, 0x0},
-+ {11289600, 8000, 1408, 0x16, 0x0},
-+ {18432000, 8000, 2304, 0x7, 0x0},
-+ {16934400, 8000, 2112, 0x17, 0x0},
-+ {12000000, 8000, 1500, 0x6, 0x1},
-+
-+ /* 11.025k */
-+ {11289600, 11025, 1024, 0x18, 0x0},
-+ {16934400, 11025, 1536, 0x19, 0x0},
-+ {12000000, 11025, 1088, 0x19, 0x1},
-+
-+ /* 16k */
-+ {12288000, 16000, 768, 0xa, 0x0},
-+ {18432000, 16000, 1152, 0xb, 0x0},
-+ {12000000, 16000, 750, 0xa, 0x1},
-+
-+ /* 22.05k */
-+ {11289600, 22050, 512, 0x1a, 0x0},
-+ {16934400, 22050, 768, 0x1b, 0x0},
-+ {12000000, 22050, 544, 0x1b, 0x1},
-+
-+ /* 32k */
-+ {12288000, 32000, 384, 0xc, 0x0},
-+ {18432000, 32000, 576, 0xd, 0x0},
-+ {12000000, 32000, 375, 0xa, 0x1},
-+
-+ /* 44.1k */
-+ {11289600, 44100, 256, 0x10, 0x0},
-+ {16934400, 44100, 384, 0x11, 0x0},
-+ {12000000, 44100, 272, 0x11, 0x1},
-+
-+ /* 48k */
-+ {12288000, 48000, 256, 0x0, 0x0},
-+ {18432000, 48000, 384, 0x1, 0x0},
-+ {12000000, 48000, 250, 0x0, 0x1},
-+
-+ /* 88.2k */
-+ {11289600, 88200, 128, 0x1e, 0x0},
-+ {16934400, 88200, 192, 0x1f, 0x0},
-+ {12000000, 88200, 136, 0x1f, 0x1},
-+
-+ /* 96k */
-+ {12288000, 96000, 128, 0xe, 0x0},
-+ {18432000, 96000, 192, 0xf, 0x0},
-+ {12000000, 96000, 125, 0xe, 0x1},
-+};
-+
-+static int get_coeff(int mclk, int rate)
-+{
-+ int i;
-+
-+ for (i = 0; i < ARRAY_SIZE(coeff_div); i++) {
-+ if (coeff_div[i].rate == rate && coeff_div[i].mclk == mclk)
-+ return i;
-+ }
-+ return -EINVAL;
-+}
-+
-+/* supported HiFi input clocks (that don't use PLL) */
-+const static int hifi_clks[] = {11289600, 12000000, 12288000,
-+ 16934400, 18432000};
-+
-+/* The HiFi interface can be clocked in one of two ways:-
-+ * o No PLL - MCLK is used directly.
-+ * o PLL - PLL is used to generate audio MCLK from input clock.
-+ *
-+ * We use the direct method if we can as it saves power.
-+ */
-+static unsigned int wm8753_config_i2s_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ int i, pll_out;
-+
-+ /* is clk supported without the PLL */
-+ for(i = 0; i < ARRAY_SIZE(hifi_clks); i++) {
-+ if (clk == hifi_clks[i]) {
-+ dai->mclk = clk;
-+ dai->pll_in = dai->pll_out = 0;
-+ dai->clk_div = 1;
-+ return clk;
-+ }
-+ }
-+
-+ /* determine best PLL output speed */
-+ if (info->bclk_master &
-+ (SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS)) {
-+ pll_out = info->fs * info->rate;
-+ } else {
-+ /* calc slave clock */
-+ switch (info->rate){
-+ case 11025:
-+ case 22050:
-+ case 44100:
-+ case 88200:
-+ pll_out = 11289600;
-+ break;
-+ default:
-+ pll_out = 12288000;
-+ break;
-+ }
-+ }
-+
-+ /* are input & output clocks supported by PLL */
-+ for (i = 0;i < ARRAY_SIZE(pll_div); i++) {
-+ if (pll_div[i].pll_in == clk && pll_div[i].pll_out == pll_out) {
-+ dai->pll_in = clk;
-+ dai->pll_out = dai->mclk = pll_out;
-+ return pll_out;
-+ }
-+ }
-+
-+ /* this clk is not supported */
-+ return 0;
-+}
-+
-+/* valid PCM clock dividers * 2 */
-+static int pcm_divs[] = {2, 6, 11, 4, 8, 12, 16};
-+
-+/* The Voice interface can be clocked in one of four ways:-
-+ * o No PLL - MCLK is used directly.
-+ * o Div - MCLK is directly divided.
-+ * o PLL - PLL is used to generate audio MCLK from input clock.
-+ * o PLL & Div - PLL and post divider are used.
-+ *
-+ * We use the non PLL methods if we can, as it saves power.
-+ */
-+
-+static unsigned int wm8753_config_pcm_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ int i, j, best_clk = info->fs * info->rate;
-+
-+ /* can we run at this clk without the PLL ? */
-+ for (i = 0; i < ARRAY_SIZE(pcm_divs); i++) {
-+ if ((best_clk >> 1) * pcm_divs[i] == clk) {
-+ dai->pll_in = 0;
-+ dai->clk_div = pcm_divs[i];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+
-+ /* now check for PLL support */
-+ for (i = 0; i < ARRAY_SIZE(pll_div); i++) {
-+ if (pll_div[i].pll_in == clk) {
-+ for (j = 0; j < ARRAY_SIZE(pcm_divs); j++) {
-+ if (pll_div[i].pll_out == pcm_divs[j] * (best_clk >> 1)) {
-+ dai->pll_in = clk;
-+ dai->pll_out = pll_div[i].pll_out;
-+ dai->clk_div = pcm_divs[j];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+ }
-+ }
-+
-+ /* this clk is not supported */
-+ return 0;
-+}
-+
-+/* set the format and bit size for ADC and Voice DAC */
-+static void wm8753_adc_vdac_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 voice = wm8753_read_reg_cache(codec, WM8753_PCM) & 0x01e0;
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ voice |= 0x0002;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ voice |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ voice |= 0x0003;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_B:
-+ voice |= 0x0013;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ voice |= 0x0004;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ voice |= 0x0008;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ voice |= 0x000c;
-+ break;
-+ }
-+
-+ wm8753_write(codec, WM8753_PCM, voice);
-+}
-+
-+/* configure PCM DAI */
-+static int wm8753_pcm_dai_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 voice, ioctl, srate, srate2, fs, bfs, clock;
-+ unsigned int rate;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->codec_dai->dai_runtime.bfs);
-+ fs = rtd->codec_dai->dai_runtime.fs;
-+ rate = snd_soc_get_rate(rtd->codec_dai->dai_runtime.pcmrate);
-+ voice = wm8753_read_reg_cache(codec, WM8753_PCM) & 0x001f;
-+
-+ /* set master/slave audio interface */
-+ ioctl = wm8753_read_reg_cache(codec, WM8753_IOCTL) & 0x01fd;
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ ioctl |= 0x0002;
-+ case SND_SOC_DAIFMT_CBM_CFS:
-+ voice |= 0x0040;
-+ break;
-+ }
-+
-+ /* do we need to enable the PLL */
-+ if (rtd->codec_dai->pll_in) {
-+ if (wm8753_config_pll(codec, rtd->codec_dai, 2) !=
-+ rtd->codec_dai->pll_in) {
-+ err("could not set pll to %d --> %d",
-+ rtd->codec_dai->pll_in, rtd->codec_dai->pll_out);
-+ return -ENODEV;
-+ }
-+ }
-+
-+ /* set up PCM divider */
-+ clock = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0x003f;
-+ switch (rtd->codec_dai->clk_div) {
-+ case 2: /* 1 */
-+ break;
-+ case 6: /* 3 */
-+ clock |= (0x2 << 6);
-+ break;
-+ case 11: /* 5.5 */
-+ clock |= (0x3 << 6);
-+ break;
-+ case 4: /* 2 */
-+ clock |= (0x4 << 6);
-+ break;
-+ case 8: /* 4 */
-+ clock |= (0x5 << 6);
-+ break;
-+ case 12: /* 6 */
-+ clock |= (0x6 << 6);
-+ break;
-+ case 16: /* 8 */
-+ clock |= (0x7 << 6);
-+ break;
-+ default:
-+ printk(KERN_ERR "wm8753: invalid PCM clk divider %d\n",
-+ rtd->codec_dai->clk_div);
-+ break;
-+ }
-+ wm8753_write(codec, WM8753_CLOCK, clock);
-+
-+ /* set bclk divisor rate */
-+ srate2 = wm8753_read_reg_cache(codec, WM8753_SRATE2) & 0x003f;
-+ switch (bfs) {
-+ case 1:
-+ break;
-+ case 2:
-+ srate2 |= (0x1 << 6);
-+ break;
-+ case 4:
-+ srate2 |= (0x2 << 6);
-+ break;
-+ case 8:
-+ srate2 |= (0x3 << 6);
-+ break;
-+ case 16:
-+ srate2 |= (0x4 << 6);
-+ break;
-+ }
-+ wm8753_write(codec, WM8753_SRATE2, srate2);
-+
-+ srate = wm8753_read_reg_cache(codec, WM8753_SRATE1) & 0x017f;
-+ if (rtd->codec_dai->dai_runtime.fs == 384)
-+ srate |= 0x80;
-+ wm8753_write(codec, WM8753_SRATE1, srate);
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ voice |= 0x0090;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ voice |= 0x0080;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ voice |= 0x0010;
-+ break;
-+ }
-+ //printk("voice %x %x ioctl %x %x srate2 %x %x srate1 %x %x\n",
-+ //WM8753_PCM, voice, WM8753_IOCTL, ioctl, WM8753_SRATE2,
-+ //srate2, WM8753_SRATE1, srate);
-+
-+ wm8753_write(codec, WM8753_IOCTL, ioctl);
-+ wm8753_write(codec, WM8753_PCM, voice);
-+ return 0;
-+}
-+
-+/* configure hifi DAC wordlength and format */
-+static void wm8753_hdac_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 hifi = wm8753_read_reg_cache(codec, WM8753_HIFI) & 0x01e0;
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ hifi |= 0x0002;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ hifi |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ hifi |= 0x0003;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_B:
-+ hifi |= 0x0013;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ hifi |= 0x0004;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ hifi |= 0x0008;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ hifi |= 0x000c;
-+ break;
-+ }
-+
-+ wm8753_write(codec, WM8753_HIFI, hifi);
-+}
-+
-+/* configure i2s (hifi) DAI clocking */
-+static int wm8753_i2s_dai_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 srate, bfs, hifi, ioctl;
-+ unsigned int rate;
-+ int i = 0;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->codec_dai->dai_runtime.bfs);
-+ rate = snd_soc_get_rate(rtd->codec_dai->dai_runtime.pcmrate);
-+ hifi = wm8753_read_reg_cache(codec, WM8753_HIFI) & 0x001f;
-+
-+ /* is coefficient valid ? */
-+ if ((i = get_coeff(rtd->codec_dai->mclk, rate)) < 0)
-+ return i;
-+
-+ srate = wm8753_read_reg_cache(codec, WM8753_SRATE1) & 0x01c0;
-+ wm8753_write(codec, WM8753_SRATE1, srate | (coeff_div[i].sr << 1) |
-+ coeff_div[i].usb);
-+
-+ /* do we need to enable the PLL */
-+ if (rtd->codec_dai->pll_in) {
-+ if (wm8753_config_pll(codec, rtd->codec_dai, 1) !=
-+ rtd->codec_dai->pll_in) {
-+ err("could not set pll to %d --> %d",
-+ rtd->codec_dai->pll_in, rtd->codec_dai->pll_out);
-+ return -ENODEV;
-+ }
-+ }
-+
-+ /* set bclk divisor rate */
-+ srate = wm8753_read_reg_cache(codec, WM8753_SRATE2) & 0x01c7;
-+ switch (bfs) {
-+ case 1:
-+ break;
-+ case 2:
-+ srate |= (0x1 << 3);
-+ break;
-+ case 4:
-+ srate |= (0x2 << 3);
-+ break;
-+ case 8:
-+ srate |= (0x3 << 3);
-+ break;
-+ case 16:
-+ srate |= (0x4 << 3);
-+ break;
-+ }
-+ wm8753_write(codec, WM8753_SRATE2, srate);
-+
-+ /* set master/slave audio interface */
-+ ioctl = wm8753_read_reg_cache(codec, WM8753_IOCTL) & 0x00fe;
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ ioctl |= 0x0001;
-+ case SND_SOC_DAIFMT_CBM_CFS:
-+ hifi |= 0x0040;
-+ break;
-+ }
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ hifi |= 0x0090;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ hifi |= 0x0080;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ hifi |= 0x0010;
-+ break;
-+ }
-+ wm8753_write(codec, WM8753_IOCTL, ioctl);
-+ wm8753_write(codec, WM8753_HIFI, hifi);
-+ return 0;
-+}
-+
-+static int wm8753_mode1v_prepare (struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 clock;
-+
-+ /* set clk source as pcmclk */
-+ clock = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0xfffb;
-+ wm8753_write(codec, WM8753_CLOCK, clock);
-+
-+ wm8753_adc_vdac_prepare(substream);
-+ return wm8753_pcm_dai_prepare(substream);
-+}
-+
-+static int wm8753_mode1h_prepare (struct snd_pcm_substream *substream)
-+{
-+ wm8753_hdac_prepare(substream);
-+ return wm8753_i2s_dai_prepare(substream);
-+}
-+
-+static int wm8753_mode2_prepare (struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 clock;
-+
-+ /* set clk source as pcmclk */
-+ clock = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0xfffb;
-+ wm8753_write(codec, WM8753_CLOCK, clock);
-+
-+ wm8753_adc_vdac_prepare(substream);
-+ return wm8753_i2s_dai_prepare(substream);
-+}
-+
-+static int wm8753_mode3_prepare (struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 clock;
-+
-+ /* set clk source as mclk */
-+ clock = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0xfffb;
-+ wm8753_write(codec, WM8753_CLOCK, clock | 0x4);
-+
-+ wm8753_hdac_prepare(substream);
-+ wm8753_adc_vdac_prepare(substream);
-+ return wm8753_i2s_dai_prepare(substream);
-+}
-+
-+static int wm8753_mode4_prepare (struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 clock;
-+
-+ /* set clk source as mclk */
-+ clock = wm8753_read_reg_cache(codec, WM8753_CLOCK) & 0xfffb;
-+ wm8753_write(codec, WM8753_CLOCK, clock | 0x4);
-+
-+ wm8753_hdac_prepare(substream);
-+ wm8753_adc_vdac_prepare(substream);
-+ return wm8753_i2s_dai_prepare(substream);
-+}
-+
-+static int wm8753_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = wm8753_read_reg_cache(codec, WM8753_DAC) & 0xfff7;
-+
-+ /* the digital mute covers the HiFi and Voice DAC's on the WM8753.
-+ * make sure we check if they are not both active when we mute */
-+ if (mute && dai->id == 1) {
-+ if (!wm8753_dai[WM8753_DAI_VOICE].playback.active ||
-+ !wm8753_dai[WM8753_DAI_HIFI].playback.active)
-+ wm8753_write(codec, WM8753_DAC, mute_reg | 0x8);
-+ } else {
-+ if (mute)
-+ wm8753_write(codec, WM8753_DAC, mute_reg | 0x8);
-+ else
-+ wm8753_write(codec, WM8753_DAC, mute_reg);
-+ }
-+
-+ return 0;
-+}
-+
-+static int wm8753_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ u16 pwr_reg = wm8753_read_reg_cache(codec, WM8753_PWR1) & 0xfe3e;
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* set vmid to 50k and unmute dac */
-+ wm8753_write(codec, WM8753_PWR1, pwr_reg | 0x00c0);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ /* set vmid to 5k for quick power up */
-+ wm8753_write(codec, WM8753_PWR1, pwr_reg | 0x01c1);
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* mute dac and set vmid to 500k, enable VREF */
-+ wm8753_write(codec, WM8753_PWR1, pwr_reg | 0x0141);
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ wm8753_write(codec, WM8753_PWR1, 0x0001);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+/*
-+ * The WM8753 supports upto 4 different and mutually exclusive DAI
-+ * configurations. This gives 2 PCM's available for use, hifi and voice.
-+ * NOTE: The Voice PCM cannot play or caputure audio to the CPU as it's DAI
-+ * is connected between the wm8753 and a BT codec or GSM modem.
-+ *
-+ * 1. Voice over PCM DAI - HIFI DAC over HIFI DAI
-+ * 2. Voice over HIFI DAI - HIFI disabled
-+ * 3. Voice disabled - HIFI over HIFI
-+ * 4. Voice disabled - HIFI over HIFI, uses voice DAI LRC for capture
-+ */
-+static const struct snd_soc_codec_dai wm8753_all_dai[] = {
-+/* DAI HiFi mode 1 */
-+{ .name = "WM8753 HiFi",
-+ .id = 1,
-+ .playback = {
-+ .stream_name = "HiFi Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = { /* dummy for fast DAI switching */
-+ .stream_name = "HiFi Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .config_sysclk = wm8753_config_i2s_sysclk,
-+ .digital_mute = wm8753_mute,
-+ .ops = {
-+ .prepare = wm8753_mode1h_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8753_hifi_modes),
-+ .mode = wm8753_hifi_modes,},
-+},
-+/* DAI Voice mode 1 */
-+{ .name = "WM8753 Voice",
-+ .id = 1,
-+ .playback = {
-+ .stream_name = "Voice Playback",
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .capture = {
-+ .stream_name = "Voice Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .config_sysclk = wm8753_config_pcm_sysclk,
-+ .digital_mute = wm8753_mute,
-+ .ops = {
-+ .prepare = wm8753_mode1v_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8753_voice_modes),
-+ .mode = wm8753_voice_modes,},
-+},
-+/* DAI HiFi mode 2 - dummy */
-+{ .name = "WM8753 HiFi",
-+ .id = 2,
-+},
-+/* DAI Voice mode 2 */
-+{ .name = "WM8753 Voice",
-+ .id = 2,
-+ .playback = {
-+ .stream_name = "Voice Playback",
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .capture = {
-+ .stream_name = "Voice Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .config_sysclk = wm8753_config_i2s_sysclk,
-+ .digital_mute = wm8753_mute,
-+ .ops = {
-+ .prepare = wm8753_mode2_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8753_voice_modes),
-+ .mode = wm8753_voice_modes,},
-+},
-+/* DAI HiFi mode 3 */
-+{ .name = "WM8753 HiFi",
-+ .id = 3,
-+ .playback = {
-+ .stream_name = "HiFi Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .stream_name = "HiFi Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .config_sysclk = wm8753_config_i2s_sysclk,
-+ .digital_mute = wm8753_mute,
-+ .ops = {
-+ .prepare = wm8753_mode3_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8753_hifi_modes),
-+ .mode = wm8753_hifi_modes,},
-+},
-+/* DAI Voice mode 3 - dummy */
-+{ .name = "WM8753 Voice",
-+ .id = 3,
-+},
-+/* DAI HiFi mode 4 */
-+{ .name = "WM8753 HiFi",
-+ .id = 4,
-+ .playback = {
-+ .stream_name = "HiFi Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .stream_name = "HiFi Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .config_sysclk = wm8753_config_i2s_sysclk,
-+ .digital_mute = wm8753_mute,
-+ .ops = {
-+ .prepare = wm8753_mode4_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8753_mixed_modes),
-+ .mode = wm8753_mixed_modes,},
-+},
-+/* DAI Voice mode 4 - dummy */
-+{ .name = "WM8753 Voice",
-+ .id = 4,
-+},
-+};
-+
-+struct snd_soc_codec_dai wm8753_dai[2];
-+EXPORT_SYMBOL_GPL(wm8753_dai);
-+
-+static void wm8753_set_dai_mode(struct snd_soc_codec *codec, unsigned int mode)
-+{
-+ if (mode < 4) {
-+ wm8753_dai[0] = wm8753_all_dai[mode << 1];
-+ wm8753_dai[1] = wm8753_all_dai[(mode << 1) + 1];
-+ }
-+}
-+
-+static void wm8753_work(void *data)
-+{
-+ struct snd_soc_codec *codec = (struct snd_soc_codec *)data;
-+ wm8753_dapm_event(codec, codec->dapm_state);
-+}
-+
-+static int wm8753_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ wm8753_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm8753_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(wm8753_reg); i++) {
-+ if (i + 1 == WM8753_RESET)
-+ continue;
-+ data[0] = ((i + 1) << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+
-+ wm8753_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+
-+ /* charge wm8753 caps */
-+ if (codec->suspend_dapm_state == SNDRV_CTL_POWER_D0) {
-+ wm8753_dapm_event(codec, SNDRV_CTL_POWER_D2);
-+ codec->dapm_state = SNDRV_CTL_POWER_D0;
-+ queue_delayed_work(wm8753_workq, &wm8753_dapm_work,
-+ msecs_to_jiffies(caps_charge));
-+ }
-+
-+ return 0;
-+}
-+
-+/*
-+ * initialise the WM8753 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int wm8753_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int reg, ret = 0;
-+
-+ codec->name = "WM8753";
-+ codec->owner = THIS_MODULE;
-+ codec->read = wm8753_read_reg_cache;
-+ codec->write = wm8753_write;
-+ codec->dapm_event = wm8753_dapm_event;
-+ codec->dai = wm8753_dai;
-+ codec->num_dai = 2;
-+ codec->reg_cache_size = ARRAY_SIZE(wm8753_reg);
-+
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm8753_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache, wm8753_reg,
-+ sizeof(u16) * ARRAY_SIZE(wm8753_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm8753_reg);
-+ wm8753_set_dai_mode(codec, 0);
-+
-+ wm8753_reset(codec);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if (ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* charge output caps */
-+ wm8753_dapm_event(codec, SNDRV_CTL_POWER_D2);
-+ codec->dapm_state = SNDRV_CTL_POWER_D3hot;
-+ queue_delayed_work(wm8753_workq,
-+ &wm8753_dapm_work, msecs_to_jiffies(caps_charge));
-+
-+ /* set the update bits */
-+ reg = wm8753_read_reg_cache(codec, WM8753_LDAC);
-+ wm8753_write(codec, WM8753_LDAC, reg | 0x0100);
-+ reg = wm8753_read_reg_cache(codec, WM8753_RDAC);
-+ wm8753_write(codec, WM8753_RDAC, reg | 0x0100);
-+ reg = wm8753_read_reg_cache(codec, WM8753_LOUT1V);
-+ wm8753_write(codec, WM8753_LOUT1V, reg | 0x0100);
-+ reg = wm8753_read_reg_cache(codec, WM8753_ROUT1V);
-+ wm8753_write(codec, WM8753_ROUT1V, reg | 0x0100);
-+ reg = wm8753_read_reg_cache(codec, WM8753_LOUT2V);
-+ wm8753_write(codec, WM8753_LOUT2V, reg | 0x0100);
-+ reg = wm8753_read_reg_cache(codec, WM8753_ROUT2V);
-+ wm8753_write(codec, WM8753_ROUT2V, reg | 0x0100);
-+ reg = wm8753_read_reg_cache(codec, WM8753_LINVOL);
-+ wm8753_write(codec, WM8753_LINVOL, reg | 0x0100);
-+ reg = wm8753_read_reg_cache(codec, WM8753_RINVOL);
-+ wm8753_write(codec, WM8753_RINVOL, reg | 0x0100);
-+
-+ wm8753_add_controls(codec);
-+ wm8753_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+/* If the i2c layer weren't so broken, we could pass this kind of data
-+ around */
-+static struct snd_soc_device *wm8753_socdev;
-+
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+
-+/*
-+ * WM8753 2 wire address is determined by GPIO5
-+ * state during powerup.
-+ * low = 0x1a
-+ * high = 0x1b
-+ */
-+#define I2C_DRIVERID_WM8753 0xfefe /* liam - need a proper id */
-+
-+static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END };
-+
-+/* Magic definition of all other variables and things */
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver wm8753_i2c_driver;
-+static struct i2c_client client_template;
-+
-+static int wm8753_codec_probe(struct i2c_adapter *adap, int addr, int kind)
-+{
-+ struct snd_soc_device *socdev = wm8753_socdev;
-+ struct wm8753_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct i2c_client *i2c;
-+ int ret;
-+
-+ if (addr != setup->i2c_address)
-+ return -ENODEV;
-+
-+ client_template.adapter = adap;
-+ client_template.addr = addr;
-+
-+ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (i2c == NULL){
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+ memcpy(i2c, &client_template, sizeof(struct i2c_client));
-+ i2c_set_clientdata(i2c, codec);
-+ codec->control_data = i2c;
-+
-+ ret = i2c_attach_client(i2c);
-+ if (ret < 0) {
-+ err("failed to attach codec at addr %x\n", addr);
-+ goto err;
-+ }
-+
-+ ret = wm8753_init(socdev);
-+ if (ret < 0) {
-+ err("failed to initialise WM8753\n");
-+ goto err;
-+ }
-+
-+ return ret;
-+
-+err:
-+ kfree(codec);
-+ kfree(i2c);
-+ return ret;
-+}
-+
-+static int wm8753_i2c_detach(struct i2c_client *client)
-+{
-+ struct snd_soc_codec *codec = i2c_get_clientdata(client);
-+ i2c_detach_client(client);
-+ kfree(codec->reg_cache);
-+ kfree(client);
-+ return 0;
-+}
-+
-+static int wm8753_i2c_attach(struct i2c_adapter *adap)
-+{
-+ return i2c_probe(adap, &addr_data, wm8753_codec_probe);
-+}
-+
-+/* corgi i2c codec control layer */
-+static struct i2c_driver wm8753_i2c_driver = {
-+ .driver = {
-+ .name = "WM8753 I2C Codec",
-+ .owner = THIS_MODULE,
-+ },
-+ .id = I2C_DRIVERID_WM8753,
-+ .attach_adapter = wm8753_i2c_attach,
-+ .detach_client = wm8753_i2c_detach,
-+ .command = NULL,
-+};
-+
-+static struct i2c_client client_template = {
-+ .name = "WM8753",
-+ .driver = &wm8753_i2c_driver,
-+};
-+#endif
-+
-+static int wm8753_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct wm8753_setup_data *setup;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+
-+ info("WM8753 Audio Codec %s", WM8753_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+ wm8753_socdev = socdev;
-+ INIT_WORK(&wm8753_dapm_work, wm8753_work, codec);
-+ wm8753_workq = create_workqueue("wm8753");
-+ if (wm8753_workq == NULL) {
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ if (setup->i2c_address) {
-+ normal_i2c[0] = setup->i2c_address;
-+ codec->hw_write = (hw_write_t)i2c_master_send;
-+ ret = i2c_add_driver(&wm8753_i2c_driver);
-+ if (ret != 0)
-+ printk(KERN_ERR "can't add i2c driver");
-+ }
-+#else
-+ /* Add other interfaces here */
-+#endif
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int wm8753_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ wm8753_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ if (wm8753_workq)
-+ destroy_workqueue(wm8753_workq);
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ i2c_del_driver(&wm8753_i2c_driver);
-+#endif
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8753 = {
-+ .probe = wm8753_probe,
-+ .remove = wm8753_remove,
-+ .suspend = wm8753_suspend,
-+ .resume = wm8753_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm8753);
-+
-+MODULE_DESCRIPTION("ASoC WM8753 driver");
-+MODULE_AUTHOR("Liam Girdwood");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8753.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8753.h
-@@ -0,0 +1,91 @@
-+/*
-+ * wm8753.h -- audio driver for WM8753
-+ *
-+ * Copyright 2003 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ */
-+
-+#ifndef _WM8753_H
-+#define _WM8753_H
-+
-+/* WM8753 register space */
-+
-+#define WM8753_DAC 0x01
-+#define WM8753_ADC 0x02
-+#define WM8753_PCM 0x03
-+#define WM8753_HIFI 0x04
-+#define WM8753_IOCTL 0x05
-+#define WM8753_SRATE1 0x06
-+#define WM8753_SRATE2 0x07
-+#define WM8753_LDAC 0x08
-+#define WM8753_RDAC 0x09
-+#define WM8753_BASS 0x0a
-+#define WM8753_TREBLE 0x0b
-+#define WM8753_ALC1 0x0c
-+#define WM8753_ALC2 0x0d
-+#define WM8753_ALC3 0x0e
-+#define WM8753_NGATE 0x0f
-+#define WM8753_LADC 0x10
-+#define WM8753_RADC 0x11
-+#define WM8753_ADCTL1 0x12
-+#define WM8753_3D 0x13
-+#define WM8753_PWR1 0x14
-+#define WM8753_PWR2 0x15
-+#define WM8753_PWR3 0x16
-+#define WM8753_PWR4 0x17
-+#define WM8753_ID 0x18
-+#define WM8753_INTPOL 0x19
-+#define WM8753_INTEN 0x1a
-+#define WM8753_GPIO1 0x1b
-+#define WM8753_GPIO2 0x1c
-+#define WM8753_RESET 0x1f
-+#define WM8753_RECMIX1 0x20
-+#define WM8753_RECMIX2 0x21
-+#define WM8753_LOUTM1 0x22
-+#define WM8753_LOUTM2 0x23
-+#define WM8753_ROUTM1 0x24
-+#define WM8753_ROUTM2 0x25
-+#define WM8753_MOUTM1 0x26
-+#define WM8753_MOUTM2 0x27
-+#define WM8753_LOUT1V 0x28
-+#define WM8753_ROUT1V 0x29
-+#define WM8753_LOUT2V 0x2a
-+#define WM8753_ROUT2V 0x2b
-+#define WM8753_MOUTV 0x2c
-+#define WM8753_OUTCTL 0x2d
-+#define WM8753_ADCIN 0x2e
-+#define WM8753_INCTL1 0x2f
-+#define WM8753_INCTL2 0x30
-+#define WM8753_LINVOL 0x31
-+#define WM8753_RINVOL 0x32
-+#define WM8753_MICBIAS 0x33
-+#define WM8753_CLOCK 0x34
-+#define WM8753_PLL1CTL1 0x35
-+#define WM8753_PLL1CTL2 0x36
-+#define WM8753_PLL1CTL3 0x37
-+#define WM8753_PLL1CTL4 0x38
-+#define WM8753_PLL2CTL1 0x39
-+#define WM8753_PLL2CTL2 0x3a
-+#define WM8753_PLL2CTL3 0x3b
-+#define WM8753_PLL2CTL4 0x3c
-+#define WM8753_BIASCTL 0x3d
-+#define WM8753_ADCTL2 0x3f
-+
-+struct wm8753_setup_data {
-+ unsigned short i2c_address;
-+};
-+
-+#define WM8753_DAI_HIFI 0
-+#define WM8753_DAI_VOICE 1
-+
-+extern struct snd_soc_codec_dai wm8753_dai[2];
-+extern struct snd_soc_codec_device soc_codec_dev_wm8753;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8772.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8772.c
-@@ -0,0 +1,806 @@
-+/*
-+ * wm8772.c -- WM8772 ALSA Soc Audio driver
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/i2c.h>
-+
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+#include "wm8772.h"
-+
-+#define AUDIO_NAME "WM8772"
-+#define WM8772_VERSION "0.3"
-+
-+/*
-+ * wm8772 register cache
-+ * We can't read the WM8772 register space when we
-+ * are using 2 wire for device control, so we cache them instead.
-+ */
-+static const u16 wm8772_reg[] = {
-+ 0x00ff, 0x00ff, 0x0120, 0x0000, /* 0 */
-+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, /* 4 */
-+ 0x00ff, 0x0000, 0x0080, 0x0040, /* 8 */
-+ 0x0000
-+};
-+
-+#define WM8772_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_RIGHT_J | \
-+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_IB_NF)
-+
-+#define WM8772_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define WM8772_PRATES \
-+ (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |\
-+ SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_192000)
-+
-+#define WM8772_CRATES \
-+ (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |\
-+ SNDRV_PCM_RATE_96000)
-+
-+static struct snd_soc_dai_mode wm8772_modes[] = {
-+ /* common codec frame and clock master modes */
-+ /* 32k */
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 768,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 512,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 384,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 192,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 128,
-+ .bfs = 64,
-+ },
-+
-+ /* 44.1k */
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 768,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 512,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 384,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 192,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 128,
-+ .bfs = 64,
-+ },
-+
-+ /* 48k */
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 768,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 512,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 384,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 192,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 128,
-+ .bfs = 64,
-+ },
-+
-+ /* 96k */
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 384,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8772_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 192,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8772_DIR,
-+ .pcmrate = SND_SOC_DAI_BFS_RATE,
-+ .fs = 128,
-+ .bfs = 64,
-+ },
-+
-+ /* 192k */
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_192000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 192,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_192000,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 128,
-+ .bfs = 64,
-+ },
-+
-+ /* slave mode */
-+ {
-+ .fmt = WM8772_DAIFMT,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = WM8772_PRATES,
-+ .pcmdir = SND_SOC_DAIDIR_PLAYBACK,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+ {
-+ .fmt = WM8772_DAIFMT,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = WM8772_CRATES,
-+ .pcmdir = SND_SOC_DAIDIR_CAPTURE,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+/*
-+ * read wm8772 register cache
-+ */
-+static inline unsigned int wm8772_read_reg_cache(struct snd_soc_codec * codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg > WM8772_CACHE_REGNUM)
-+ return -1;
-+ return cache[reg];
-+}
-+
-+/*
-+ * write wm8772 register cache
-+ */
-+static inline void wm8772_write_reg_cache(struct snd_soc_codec * codec,
-+ unsigned int reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg > WM8772_CACHE_REGNUM)
-+ return;
-+ cache[reg] = value;
-+}
-+
-+static int wm8772_write(struct snd_soc_codec * codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[2];
-+
-+ /* data is
-+ * D15..D9 WM8772 register offset
-+ * D8...D0 register data
-+ */
-+ data[0] = (reg << 1) | ((value >> 8) & 0x0001);
-+ data[1] = value & 0x00ff;
-+
-+ wm8772_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 2) == 2)
-+ return 0;
-+ else
-+ return -1;
-+}
-+
-+#define wm8772_reset(c) wm8772_write(c, WM8772_RESET, 0)
-+
-+/*
-+ * WM8772 Controls
-+ */
-+static const char *wm8772_zero_flag[] = {"All Ch", "Ch 1", "Ch 2", "Ch3"};
-+
-+static const struct soc_enum wm8772_enum[] = {
-+SOC_ENUM_SINGLE(WM8772_DACCTRL, 0, 4, wm8772_zero_flag),
-+};
-+
-+static const struct snd_kcontrol_new wm8772_snd_controls[] = {
-+
-+SOC_SINGLE("Left1 Playback Volume", WM8772_LDAC1VOL, 0, 255, 0),
-+SOC_SINGLE("Left2 Playback Volume", WM8772_LDAC2VOL, 0, 255, 0),
-+SOC_SINGLE("Left3 Playback Volume", WM8772_LDAC3VOL, 0, 255, 0),
-+SOC_SINGLE("Right1 Playback Volume", WM8772_RDAC1VOL, 0, 255, 0),
-+SOC_SINGLE("Right1 Playback Volume", WM8772_RDAC2VOL, 0, 255, 0),
-+SOC_SINGLE("Right1 Playback Volume", WM8772_RDAC3VOL, 0, 255, 0),
-+SOC_SINGLE("Master Playback Volume", WM8772_MDACVOL, 0, 255, 0),
-+
-+SOC_SINGLE("Playback Switch", WM8772_DACCH, 0, 1, 0),
-+SOC_SINGLE("Capture Switch", WM8772_ADCCTRL, 2, 1, 0),
-+
-+SOC_SINGLE("Demp1 Playback Switch", WM8772_DACCTRL, 6, 1, 0),
-+SOC_SINGLE("Demp2 Playback Switch", WM8772_DACCTRL, 7, 1, 0),
-+SOC_SINGLE("Demp3 Playback Switch", WM8772_DACCTRL, 8, 1, 0),
-+
-+SOC_SINGLE("Phase Invert 1 Switch", WM8772_IFACE, 6, 1, 0),
-+SOC_SINGLE("Phase Invert 2 Switch", WM8772_IFACE, 7, 1, 0),
-+SOC_SINGLE("Phase Invert 3 Switch", WM8772_IFACE, 8, 1, 0),
-+
-+SOC_SINGLE("Playback ZC Switch", WM8772_DACCTRL, 0, 1, 0),
-+
-+SOC_SINGLE("Capture High Pass Switch", WM8772_ADCCTRL, 3, 1, 0),
-+};
-+
-+/* add non dapm controls */
-+static int wm8772_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm8772_snd_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8772_snd_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+ return 0;
-+}
-+
-+/* valid wm8772 mclk frequencies */
-+static const int freq_table[5][6] = {
-+ {4096000, 6144000, 8192000, 12288000, 16384000, 24576000},
-+ {5644800, 8467000, 11289600, 16934000, 22579200, 33868800},
-+ {6144000, 9216000, 12288000, 18432000, 24576000, 36864000},
-+ {12288000, 18432000, 24576000, 36864000, 0, 0},
-+ {24576000, 36864000, 0, 0, 0},
-+};
-+
-+static unsigned int check_freq(int rate, unsigned int freq)
-+{
-+ int i;
-+
-+ for(i = 0; i < 6; i++) {
-+ if(freq == freq_table[i][rate])
-+ return freq;
-+ }
-+ return 0;
-+}
-+
-+static unsigned int wm8772_config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ switch (info->rate){
-+ case 32000:
-+ dai->mclk = check_freq(0, clk);
-+ break;
-+ case 44100:
-+ dai->mclk = check_freq(1, clk);
-+ break;
-+ case 48000:
-+ dai->mclk = check_freq(2, clk);
-+ break;
-+ case 96000:
-+ dai->mclk = check_freq(3, clk);
-+ break;
-+ case 192000:
-+ dai->mclk = check_freq(4, clk);
-+ break;
-+ default:
-+ dai->mclk = 0;
-+ }
-+ return dai->mclk;
-+}
-+
-+static int wm8772_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 diface = wm8772_read_reg_cache(codec, WM8772_IFACE) & 0xffc0;
-+ u16 diface_ctrl = wm8772_read_reg_cache(codec, WM8772_DACRATE) & 0xfe1f;
-+ u16 aiface = 0;
-+ u16 aiface_ctrl = wm8772_read_reg_cache(codec, WM8772_ADCCTRL) & 0xfcff;
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+
-+ /* set master/slave audio interface */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ diface_ctrl |= 0x0010;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ break;
-+ }
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ diface |= 0x0002;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ diface |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ diface |= 0x0003;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_B:
-+ diface |= 0x0007;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FORMAT_S20_3LE:
-+ diface |= 0x0010;
-+ break;
-+ case SNDRV_PCM_FORMAT_S24_3LE:
-+ diface |= 0x0020;
-+ break;
-+ case SNDRV_PCM_FORMAT_S32_LE:
-+ diface |= 0x0030;
-+ break;
-+ }
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_NB_NF:
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ diface |= 0x0008;
-+ break;
-+ }
-+
-+ /* set rate */
-+ switch (rtd->codec_dai->dai_runtime.fs) {
-+ case 768:
-+ diface_ctrl |= (0x5 << 6);
-+ break;
-+ case 512:
-+ diface_ctrl |= (0x4 << 6);
-+ break;
-+ case 384:
-+ diface_ctrl |= (0x3 << 6);
-+ break;
-+ case 256:
-+ diface_ctrl |= (0x2 << 6);
-+ break;
-+ case 192:
-+ diface_ctrl |= (0x1 << 6);
-+ break;
-+ }
-+
-+ wm8772_write(codec, WM8772_DACRATE, diface_ctrl);
-+ wm8772_write(codec, WM8772_IFACE, diface);
-+
-+ } else {
-+
-+ /* set master/slave audio interface */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ aiface |= 0x0010;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ break;
-+ }
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ aiface |= 0x0002;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ aiface |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ aiface |= 0x0003;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_B:
-+ aiface |= 0x0003;
-+ aiface_ctrl |= 0x0010;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ aiface |= 0x0004;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ aiface |= 0x0008;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ aiface |= 0x000c;
-+ break;
-+ }
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_NB_NF:
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ aiface_ctrl |= 0x0020;
-+ break;
-+ }
-+
-+ /* set rate */
-+ switch (rtd->codec_dai->dai_runtime.fs) {
-+ case 768:
-+ aiface |= (0x5 << 5);
-+ break;
-+ case 512:
-+ aiface |= (0x4 << 5);
-+ break;
-+ case 384:
-+ aiface |= (0x3 << 5);
-+ break;
-+ case 256:
-+ aiface |= (0x2 << 5);
-+ break;
-+ }
-+
-+ wm8772_write(codec, WM8772_ADCCTRL, aiface_ctrl);
-+ wm8772_write(codec, WM8772_ADCRATE, aiface);
-+ }
-+
-+ return 0;
-+}
-+
-+static int wm8772_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ u16 master = wm8772_read_reg_cache(codec, WM8772_DACRATE) & 0xffe0;
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* vref/mid, clk and osc on, dac unmute, active */
-+ wm8772_write(codec, WM8772_DACRATE, master);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* everything off except vref/vmid, dac mute, inactive */
-+ wm8772_write(codec, WM8772_DACRATE, master | 0x0f);
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ /* everything off, dac mute, inactive */
-+ wm8772_write(codec, WM8772_DACRATE, master | 0x1f);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+struct snd_soc_codec_dai wm8772_dai = {
-+ .name = "WM8772",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 6,
-+ },
-+ .capture = {
-+ .stream_name = "Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .config_sysclk = wm8772_config_sysclk,
-+ .ops = {
-+ .prepare = wm8772_pcm_prepare,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8772_modes),
-+ .mode = wm8772_modes,
-+ },
-+};
-+EXPORT_SYMBOL_GPL(wm8772_dai);
-+
-+static int wm8772_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ wm8772_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm8772_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(wm8772_reg); i++) {
-+ data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+ wm8772_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm8772_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the WM8772 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int wm8772_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int reg, ret = 0;
-+
-+ codec->name = "WM8772";
-+ codec->owner = THIS_MODULE;
-+ codec->read = wm8772_read_reg_cache;
-+ codec->write = wm8772_write;
-+ codec->dapm_event = wm8772_dapm_event;
-+ codec->dai = &wm8772_dai;
-+ codec->num_dai = 1;
-+ codec->reg_cache_size = ARRAY_SIZE(wm8772_reg);
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm8772_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache, wm8772_reg,
-+ sizeof(u16) * ARRAY_SIZE(wm8772_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm8772_reg);
-+
-+ wm8772_reset(codec);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if(ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* power on device */
-+ wm8772_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+
-+ /* set the update bits */
-+ reg = wm8772_read_reg_cache(codec, WM8772_MDACVOL);
-+ wm8772_write(codec, WM8772_MDACVOL, reg | 0x0100);
-+ reg = wm8772_read_reg_cache(codec, WM8772_LDAC1VOL);
-+ wm8772_write(codec, WM8772_LDAC1VOL, reg | 0x0100);
-+ reg = wm8772_read_reg_cache(codec, WM8772_LDAC2VOL);
-+ wm8772_write(codec, WM8772_LDAC2VOL, reg | 0x0100);
-+ reg = wm8772_read_reg_cache(codec, WM8772_LDAC3VOL);
-+ wm8772_write(codec, WM8772_LDAC3VOL, reg | 0x0100);
-+ reg = wm8772_read_reg_cache(codec, WM8772_RDAC1VOL);
-+ wm8772_write(codec, WM8772_RDAC1VOL, reg | 0x0100);
-+ reg = wm8772_read_reg_cache(codec, WM8772_RDAC2VOL);
-+ wm8772_write(codec, WM8772_RDAC2VOL, reg | 0x0100);
-+ reg = wm8772_read_reg_cache(codec, WM8772_RDAC3VOL);
-+ wm8772_write(codec, WM8772_RDAC3VOL, reg | 0x0100);
-+
-+ wm8772_add_controls(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static struct snd_soc_device *wm8772_socdev;
-+
-+static int wm8772_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct wm8772_setup_data *setup;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+
-+ printk(KERN_INFO "WM8772 Audio Codec %s", WM8772_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ wm8772_socdev = socdev;
-+
-+ /* Add other interfaces here */
-+#warning do SPI device probe here and then call wm8772_init()
-+
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int wm8772_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ wm8772_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+
-+ snd_soc_free_pcms(socdev);
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8772 = {
-+ .probe = wm8772_probe,
-+ .remove = wm8772_remove,
-+ .suspend = wm8772_suspend,
-+ .resume = wm8772_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm8772);
-+
-+MODULE_DESCRIPTION("ASoC WM8772 driver");
-+MODULE_AUTHOR("Liam Girdwood");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8772.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8772.h
-@@ -0,0 +1,40 @@
-+/*
-+ * wm8772.h -- audio driver for WM8772
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ */
-+
-+#ifndef _WM8772_H
-+#define _WM8772_H
-+
-+/* WM8772 register space */
-+
-+#define WM8772_LDAC1VOL 0x00
-+#define WM8772_RDAC1VOL 0x01
-+#define WM8772_DACCH 0x02
-+#define WM8772_IFACE 0x03
-+#define WM8772_LDAC2VOL 0x04
-+#define WM8772_RDAC2VOL 0x05
-+#define WM8772_LDAC3VOL 0x06
-+#define WM8772_RDAC3VOL 0x07
-+#define WM8772_MDACVOL 0x08
-+#define WM8772_DACCTRL 0x09
-+#define WM8772_DACRATE 0x0a
-+#define WM8772_ADCRATE 0x0b
-+#define WM8772_ADCCTRL 0x0c
-+#define WM8772_RESET 0x1f
-+
-+#define WM8772_CACHE_REGNUM 10
-+
-+extern struct snd_soc_codec_dai wm8772_dai;
-+extern struct snd_soc_codec_device soc_codec_dev_wm8772;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8971.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8971.c
-@@ -0,0 +1,1214 @@
-+/*
-+ * wm8971.c -- WM8971 ALSA SoC Audio driver
-+ *
-+ * Copyright 2005 Lab126, Inc.
-+ *
-+ * Author: Kenneth Kiraly <kiraly@lab126.com>
-+ *
-+ * Based on wm8753.c by Liam Girdwood
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/i2c.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+#include "wm8971.h"
-+
-+#define AUDIO_NAME "wm8971"
-+#define WM8971_VERSION "0.8"
-+
-+#undef WM8971_DEBUG
-+
-+#ifdef WM8971_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...) do {} while (0)
-+#endif
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+#define WM8971_REG_COUNT 43
-+
-+static struct workqueue_struct *wm8971_workq = NULL;
-+static struct work_struct wm8971_dapm_work;
-+
-+/*
-+ * wm8971 register cache
-+ * We can't read the WM8971 register space when we
-+ * are using 2 wire for device control, so we cache them instead.
-+ */
-+static const u16 wm8971_reg[] = {
-+ 0x0097, 0x0097, 0x0079, 0x0079, /* 0 */
-+ 0x0000, 0x0008, 0x0000, 0x000a, /* 4 */
-+ 0x0000, 0x0000, 0x00ff, 0x00ff, /* 8 */
-+ 0x000f, 0x000f, 0x0000, 0x0000, /* 12 */
-+ 0x0000, 0x007b, 0x0000, 0x0032, /* 16 */
-+ 0x0000, 0x00c3, 0x00c3, 0x00c0, /* 20 */
-+ 0x0000, 0x0000, 0x0000, 0x0000, /* 24 */
-+ 0x0000, 0x0000, 0x0000, 0x0000, /* 28 */
-+ 0x0000, 0x0000, 0x0050, 0x0050, /* 32 */
-+ 0x0050, 0x0050, 0x0050, 0x0050, /* 36 */
-+ 0x0079, 0x0079, 0x0079, /* 40 */
-+};
-+
-+#define WM8971_HIFI_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_RIGHT_J | \
-+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_NB_IF | SND_SOC_DAIFMT_IB_NF | \
-+ SND_SOC_DAIFMT_IB_IF)
-+
-+#define WM8971_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define WM8971_HIFI_FSB \
-+ (SND_SOC_FSBD(1) | SND_SOC_FSBD(2) | SND_SOC_FSBD(4) | \
-+ SND_SOC_FSBD(8) | SND_SOC_FSBD(16))
-+
-+#define WM8971_HIFI_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
-+
-+#define WM8971_HIFI_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
-+
-+static struct snd_soc_dai_mode wm8971_modes[] = {
-+ /* common codec frame and clock master modes */
-+ /* 8k */
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1536,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1408,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 2304,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 2112,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1500,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+
-+ /* 11.025k */
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1024,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1536,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1088,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+
-+ /* 16k */
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 768,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1152,
-+ .bfs = WM8971_HIFI_FSB
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 750,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+
-+ /* 22.05k */
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 512,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 768,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 544,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+
-+ /* 32k */
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 384,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 576,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 375,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+
-+ /* 44.1k & 48k */
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 384,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 272,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 250,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+
-+ /* 88.2k & 96k */
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 128,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 192,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 136,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 125,
-+ .bfs = WM8971_HIFI_FSB,
-+ },
-+
-+ /* codec frame and clock slave modes */
-+ {
-+ .fmt = WM8971_HIFI_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM8971_HIFI_BITS,
-+ .pcmrate = WM8971_HIFI_RATES,
-+ .pcmdir = WM8971_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+static inline unsigned int wm8971_read_reg_cache(struct snd_soc_codec *codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg < WM8971_REG_COUNT)
-+ return cache[reg];
-+
-+ return -1;
-+}
-+
-+static inline void wm8971_write_reg_cache(struct snd_soc_codec *codec,
-+ unsigned int reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg < WM8971_REG_COUNT)
-+ cache[reg] = value;
-+}
-+
-+static int wm8971_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[2];
-+
-+ /* data is
-+ * D15..D9 WM8753 register offset
-+ * D8...D0 register data
-+ */
-+ data[0] = (reg << 1) | ((value >> 8) & 0x0001);
-+ data[1] = value & 0x00ff;
-+
-+ wm8971_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 2) == 2)
-+ return 0;
-+ else
-+ return -EIO;
-+}
-+
-+#define wm8971_reset(c) wm8971_write(c, WM8971_RESET, 0)
-+
-+/* WM8971 Controls */
-+static const char *wm8971_bass[] = { "Linear Control", "Adaptive Boost" };
-+static const char *wm8971_bass_filter[] = { "130Hz @ 48kHz",
-+ "200Hz @ 48kHz" };
-+static const char *wm8971_treble[] = { "8kHz", "4kHz" };
-+static const char *wm8971_alc_func[] = { "Off", "Right", "Left", "Stereo" };
-+static const char *wm8971_ng_type[] = { "Constant PGA Gain",
-+ "Mute ADC Output" };
-+static const char *wm8971_deemp[] = { "None", "32kHz", "44.1kHz", "48kHz" };
-+static const char *wm8971_mono_mux[] = {"Stereo", "Mono (Left)",
-+ "Mono (Right)", "Digital Mono"};
-+static const char *wm8971_dac_phase[] = { "Non Inverted", "Inverted" };
-+static const char *wm8971_lline_mux[] = {"Line", "NC", "NC", "PGA",
-+ "Differential"};
-+static const char *wm8971_rline_mux[] = {"Line", "Mic", "NC", "PGA",
-+ "Differential"};
-+static const char *wm8971_lpga_sel[] = {"Line", "NC", "NC", "Differential"};
-+static const char *wm8971_rpga_sel[] = {"Line", "Mic", "NC", "Differential"};
-+static const char *wm8971_adcpol[] = {"Normal", "L Invert", "R Invert",
-+ "L + R Invert"};
-+
-+static const struct soc_enum wm8971_enum[] = {
-+ SOC_ENUM_SINGLE(WM8971_BASS, 7, 2, wm8971_bass), /* 0 */
-+ SOC_ENUM_SINGLE(WM8971_BASS, 6, 2, wm8971_bass_filter),
-+ SOC_ENUM_SINGLE(WM8971_TREBLE, 6, 2, wm8971_treble),
-+ SOC_ENUM_SINGLE(WM8971_ALC1, 7, 4, wm8971_alc_func),
-+ SOC_ENUM_SINGLE(WM8971_NGATE, 1, 2, wm8971_ng_type), /* 4 */
-+ SOC_ENUM_SINGLE(WM8971_ADCDAC, 1, 4, wm8971_deemp),
-+ SOC_ENUM_SINGLE(WM8971_ADCTL1, 4, 4, wm8971_mono_mux),
-+ SOC_ENUM_SINGLE(WM8971_ADCTL1, 1, 2, wm8971_dac_phase),
-+ SOC_ENUM_SINGLE(WM8971_LOUTM1, 0, 5, wm8971_lline_mux), /* 8 */
-+ SOC_ENUM_SINGLE(WM8971_ROUTM1, 0, 5, wm8971_rline_mux),
-+ SOC_ENUM_SINGLE(WM8971_LADCIN, 6, 4, wm8971_lpga_sel),
-+ SOC_ENUM_SINGLE(WM8971_RADCIN, 6, 4, wm8971_rpga_sel),
-+ SOC_ENUM_SINGLE(WM8971_ADCDAC, 5, 4, wm8971_adcpol), /* 12 */
-+ SOC_ENUM_SINGLE(WM8971_ADCIN, 6, 4, wm8971_mono_mux),
-+};
-+
-+static const struct snd_kcontrol_new wm8971_snd_controls[] = {
-+ SOC_DOUBLE_R("Capture Volume", WM8971_LINVOL, WM8971_RINVOL, 0, 63, 0),
-+ SOC_DOUBLE_R("Capture ZC Switch", WM8971_LINVOL, WM8971_RINVOL, 6, 1, 0),
-+ SOC_DOUBLE_R("Capture Switch", WM8971_LINVOL, WM8971_RINVOL, 7, 1, 1),
-+
-+ SOC_DOUBLE_R("Headphone Playback ZC Switch", WM8971_LOUT1V,
-+ WM8971_ROUT1V, 7, 1, 0),
-+ SOC_DOUBLE_R("Speaker Playback ZC Switch", WM8971_LOUT2V,
-+ WM8971_ROUT2V, 7, 1, 0),
-+ SOC_SINGLE("Mono Playback ZC Switch", WM8971_MOUTV, 7, 1, 0),
-+
-+ SOC_DOUBLE_R("PCM Volume", WM8971_LDAC, WM8971_RDAC, 0, 255, 0),
-+
-+ SOC_DOUBLE_R("Bypass Left Playback Volume", WM8971_LOUTM1,
-+ WM8971_LOUTM2, 4, 7, 1),
-+ SOC_DOUBLE_R("Bypass Right Playback Volume", WM8971_ROUTM1,
-+ WM8971_ROUTM2, 4, 7, 1),
-+ SOC_DOUBLE_R("Bypass Mono Playback Volume", WM8971_MOUTM1,
-+ WM8971_MOUTM2, 4, 7, 1),
-+
-+ SOC_DOUBLE_R("Headphone Playback Volume", WM8971_LOUT1V,
-+ WM8971_ROUT1V, 0, 127, 0),
-+ SOC_DOUBLE_R("Speaker Playback Volume", WM8971_LOUT2V,
-+ WM8971_ROUT2V, 0, 127, 0),
-+
-+ SOC_ENUM("Bass Boost", wm8971_enum[0]),
-+ SOC_ENUM("Bass Filter", wm8971_enum[1]),
-+ SOC_SINGLE("Bass Volume", WM8971_BASS, 0, 7, 1),
-+
-+ SOC_SINGLE("Treble Volume", WM8971_TREBLE, 0, 7, 0),
-+ SOC_ENUM("Treble Cut-off", wm8971_enum[2]),
-+
-+ SOC_SINGLE("Capture Filter Switch", WM8971_ADCDAC, 0, 1, 1),
-+
-+ SOC_SINGLE("ALC Target Volume", WM8971_ALC1, 0, 7, 0),
-+ SOC_SINGLE("ALC Max Volume", WM8971_ALC1, 4, 7, 0),
-+
-+ SOC_SINGLE("ALC Capture Target Volume", WM8971_ALC1, 0, 7, 0),
-+ SOC_SINGLE("ALC Capture Max Volume", WM8971_ALC1, 4, 7, 0),
-+ SOC_ENUM("ALC Capture Function", wm8971_enum[3]),
-+ SOC_SINGLE("ALC Capture ZC Switch", WM8971_ALC2, 7, 1, 0),
-+ SOC_SINGLE("ALC Capture Hold Time", WM8971_ALC2, 0, 15, 0),
-+ SOC_SINGLE("ALC Capture Decay Time", WM8971_ALC3, 4, 15, 0),
-+ SOC_SINGLE("ALC Capture Attack Time", WM8971_ALC3, 0, 15, 0),
-+ SOC_SINGLE("ALC Capture NG Threshold", WM8971_NGATE, 3, 31, 0),
-+ SOC_ENUM("ALC Capture NG Type", wm8971_enum[4]),
-+ SOC_SINGLE("ALC Capture NG Switch", WM8971_NGATE, 0, 1, 0),
-+
-+ SOC_SINGLE("Capture 6dB Attenuate", WM8971_ADCDAC, 8, 1, 0),
-+ SOC_SINGLE("Playback 6dB Attenuate", WM8971_ADCDAC, 7, 1, 0),
-+
-+ SOC_ENUM("Playback De-emphasis", wm8971_enum[5]),
-+ SOC_ENUM("Playback Function", wm8971_enum[6]),
-+ SOC_ENUM("Playback Phase", wm8971_enum[7]),
-+
-+ SOC_DOUBLE_R("Mic Boost", WM8971_LADCIN, WM8971_RADCIN, 4, 3, 0),
-+};
-+
-+/* add non-DAPM controls */
-+static int wm8971_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm8971_snd_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8971_snd_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/*
-+ * DAPM Controls
-+ */
-+
-+/* Left Mixer */
-+static const struct snd_kcontrol_new wm8971_left_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Playback Switch", WM8971_LOUTM1, 8, 1, 0),
-+SOC_DAPM_SINGLE("Left Bypass Switch", WM8971_LOUTM1, 7, 1, 0),
-+SOC_DAPM_SINGLE("Right Playback Switch", WM8971_LOUTM2, 8, 1, 0),
-+SOC_DAPM_SINGLE("Right Bypass Switch", WM8971_LOUTM2, 7, 1, 0),
-+};
-+
-+/* Right Mixer */
-+static const struct snd_kcontrol_new wm8971_right_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Left Playback Switch", WM8971_ROUTM1, 8, 1, 0),
-+SOC_DAPM_SINGLE("Left Bypass Switch", WM8971_ROUTM1, 7, 1, 0),
-+SOC_DAPM_SINGLE("Playback Switch", WM8971_ROUTM2, 8, 1, 0),
-+SOC_DAPM_SINGLE("Right Bypass Switch", WM8971_ROUTM2, 7, 1, 0),
-+};
-+
-+/* Mono Mixer */
-+static const struct snd_kcontrol_new wm8971_mono_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Left Playback Switch", WM8971_MOUTM1, 8, 1, 0),
-+SOC_DAPM_SINGLE("Left Bypass Switch", WM8971_MOUTM1, 7, 1, 0),
-+SOC_DAPM_SINGLE("Right Playback Switch", WM8971_MOUTM2, 8, 1, 0),
-+SOC_DAPM_SINGLE("Right Bypass Switch", WM8971_MOUTM2, 7, 1, 0),
-+};
-+
-+/* Left Line Mux */
-+static const struct snd_kcontrol_new wm8971_left_line_controls =
-+SOC_DAPM_ENUM("Route", wm8971_enum[8]);
-+
-+/* Right Line Mux */
-+static const struct snd_kcontrol_new wm8971_right_line_controls =
-+SOC_DAPM_ENUM("Route", wm8971_enum[9]);
-+
-+/* Left PGA Mux */
-+static const struct snd_kcontrol_new wm8971_left_pga_controls =
-+SOC_DAPM_ENUM("Route", wm8971_enum[10]);
-+
-+/* Right PGA Mux */
-+static const struct snd_kcontrol_new wm8971_right_pga_controls =
-+SOC_DAPM_ENUM("Route", wm8971_enum[11]);
-+
-+/* Mono ADC Mux */
-+static const struct snd_kcontrol_new wm8971_monomux_controls =
-+SOC_DAPM_ENUM("Route", wm8971_enum[13]);
-+
-+static const struct snd_soc_dapm_widget wm8971_dapm_widgets[] = {
-+ SND_SOC_DAPM_MIXER("Left Mixer", SND_SOC_NOPM, 0, 0,
-+ &wm8971_left_mixer_controls[0],
-+ ARRAY_SIZE(wm8971_left_mixer_controls)),
-+ SND_SOC_DAPM_MIXER("Right Mixer", SND_SOC_NOPM, 0, 0,
-+ &wm8971_right_mixer_controls[0],
-+ ARRAY_SIZE(wm8971_right_mixer_controls)),
-+ SND_SOC_DAPM_MIXER("Mono Mixer", WM8971_PWR2, 2, 0,
-+ &wm8971_mono_mixer_controls[0],
-+ ARRAY_SIZE(wm8971_mono_mixer_controls)),
-+
-+ SND_SOC_DAPM_PGA("Right Out 2", WM8971_PWR2, 3, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Left Out 2", WM8971_PWR2, 4, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Right Out 1", WM8971_PWR2, 5, 0, NULL, 0),
-+ SND_SOC_DAPM_PGA("Left Out 1", WM8971_PWR2, 6, 0, NULL, 0),
-+ SND_SOC_DAPM_DAC("Right DAC", "Right Playback", WM8971_PWR2, 7, 0),
-+ SND_SOC_DAPM_DAC("Left DAC", "Left Playback", WM8971_PWR2, 8, 0),
-+ SND_SOC_DAPM_PGA("Mono Out 1", WM8971_PWR2, 2, 0, NULL, 0),
-+
-+ SND_SOC_DAPM_MICBIAS("Mic Bias", WM8971_PWR1, 1, 0),
-+ SND_SOC_DAPM_ADC("Right ADC", "Right Capture", WM8971_PWR1, 2, 0),
-+ SND_SOC_DAPM_ADC("Left ADC", "Left Capture", WM8971_PWR1, 3, 0),
-+
-+ SND_SOC_DAPM_MUX("Left PGA Mux", WM8971_PWR1, 5, 0,
-+ &wm8971_left_pga_controls),
-+ SND_SOC_DAPM_MUX("Right PGA Mux", WM8971_PWR1, 4, 0,
-+ &wm8971_right_pga_controls),
-+ SND_SOC_DAPM_MUX("Left Line Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8971_left_line_controls),
-+ SND_SOC_DAPM_MUX("Right Line Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8971_right_line_controls),
-+
-+ SND_SOC_DAPM_MUX("Left ADC Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8971_monomux_controls),
-+ SND_SOC_DAPM_MUX("Right ADC Mux", SND_SOC_NOPM, 0, 0,
-+ &wm8971_monomux_controls),
-+
-+ SND_SOC_DAPM_OUTPUT("LOUT1"),
-+ SND_SOC_DAPM_OUTPUT("ROUT1"),
-+ SND_SOC_DAPM_OUTPUT("LOUT2"),
-+ SND_SOC_DAPM_OUTPUT("ROUT2"),
-+ SND_SOC_DAPM_OUTPUT("MONO"),
-+
-+ SND_SOC_DAPM_INPUT("LINPUT1"),
-+ SND_SOC_DAPM_INPUT("RINPUT1"),
-+ SND_SOC_DAPM_INPUT("MIC"),
-+};
-+
-+static const char *audio_map[][3] = {
-+ /* left mixer */
-+ {"Left Mixer", "Playback Switch", "Left DAC"},
-+ {"Left Mixer", "Left Bypass Switch", "Left Line Mux"},
-+ {"Left Mixer", "Right Playback Switch", "Right DAC"},
-+ {"Left Mixer", "Right Bypass Switch", "Right Line Mux"},
-+
-+ /* right mixer */
-+ {"Right Mixer", "Left Playback Switch", "Left DAC"},
-+ {"Right Mixer", "Left Bypass Switch", "Left Line Mux"},
-+ {"Right Mixer", "Playback Switch", "Right DAC"},
-+ {"Right Mixer", "Right Bypass Switch", "Right Line Mux"},
-+
-+ /* left out 1 */
-+ {"Left Out 1", NULL, "Left Mixer"},
-+ {"LOUT1", NULL, "Left Out 1"},
-+
-+ /* left out 2 */
-+ {"Left Out 2", NULL, "Left Mixer"},
-+ {"LOUT2", NULL, "Left Out 2"},
-+
-+ /* right out 1 */
-+ {"Right Out 1", NULL, "Right Mixer"},
-+ {"ROUT1", NULL, "Right Out 1"},
-+
-+ /* right out 2 */
-+ {"Right Out 2", NULL, "Right Mixer"},
-+ {"ROUT2", NULL, "Right Out 2"},
-+
-+ /* mono mixer */
-+ {"Mono Mixer", "Left Playback Switch", "Left DAC"},
-+ {"Mono Mixer", "Left Bypass Switch", "Left Line Mux"},
-+ {"Mono Mixer", "Right Playback Switch", "Right DAC"},
-+ {"Mono Mixer", "Right Bypass Switch", "Right Line Mux"},
-+
-+ /* mono out */
-+ {"Mono Out", NULL, "Mono Mixer"},
-+ {"MONO1", NULL, "Mono Out"},
-+
-+ /* Left Line Mux */
-+ {"Left Line Mux", "Line", "LINPUT1"},
-+ {"Left Line Mux", "PGA", "Left PGA Mux"},
-+ {"Left Line Mux", "Differential", "Differential Mux"},
-+
-+ /* Right Line Mux */
-+ {"Right Line Mux", "Line", "RINPUT1"},
-+ {"Right Line Mux", "Mic", "MIC"},
-+ {"Right Line Mux", "PGA", "Right PGA Mux"},
-+ {"Right Line Mux", "Differential", "Differential Mux"},
-+
-+ /* Left PGA Mux */
-+ {"Left PGA Mux", "Line", "LINPUT1"},
-+ {"Left PGA Mux", "Differential", "Differential Mux"},
-+
-+ /* Right PGA Mux */
-+ {"Right PGA Mux", "Line", "RINPUT1"},
-+ {"Right PGA Mux", "Differential", "Differential Mux"},
-+
-+ /* Differential Mux */
-+ {"Differential Mux", "Line", "LINPUT1"},
-+ {"Differential Mux", "Line", "RINPUT1"},
-+
-+ /* Left ADC Mux */
-+ {"Left ADC Mux", "Stereo", "Left PGA Mux"},
-+ {"Left ADC Mux", "Mono (Left)", "Left PGA Mux"},
-+ {"Left ADC Mux", "Digital Mono", "Left PGA Mux"},
-+
-+ /* Right ADC Mux */
-+ {"Right ADC Mux", "Stereo", "Right PGA Mux"},
-+ {"Right ADC Mux", "Mono (Right)", "Right PGA Mux"},
-+ {"Right ADC Mux", "Digital Mono", "Right PGA Mux"},
-+
-+ /* ADC */
-+ {"Left ADC", NULL, "Left ADC Mux"},
-+ {"Right ADC", NULL, "Right ADC Mux"},
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int wm8971_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(wm8971_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8971_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path audio_mapnects */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+struct _coeff_div {
-+ u32 mclk;
-+ u32 rate;
-+ u16 fs;
-+ u8 sr:5;
-+ u8 usb:1;
-+};
-+
-+/* codec hifi mclk clock divider coefficients */
-+static const struct _coeff_div coeff_div[] = {
-+ /* 8k */
-+ {12288000, 8000, 1536, 0x6, 0x0},
-+ {11289600, 8000, 1408, 0x16, 0x0},
-+ {18432000, 8000, 2304, 0x7, 0x0},
-+ {16934400, 8000, 2112, 0x17, 0x0},
-+ {12000000, 8000, 1500, 0x6, 0x1},
-+
-+ /* 11.025k */
-+ {11289600, 11025, 1024, 0x18, 0x0},
-+ {16934400, 11025, 1536, 0x19, 0x0},
-+ {12000000, 11025, 1088, 0x19, 0x1},
-+
-+ /* 16k */
-+ {12288000, 16000, 768, 0xa, 0x0},
-+ {18432000, 16000, 1152, 0xb, 0x0},
-+ {12000000, 16000, 750, 0xa, 0x1},
-+
-+ /* 22.05k */
-+ {11289600, 22050, 512, 0x1a, 0x0},
-+ {16934400, 22050, 768, 0x1b, 0x0},
-+ {12000000, 22050, 544, 0x1b, 0x1},
-+
-+ /* 32k */
-+ {12288000, 32000, 384, 0xc, 0x0},
-+ {18432000, 32000, 576, 0xd, 0x0},
-+ {12000000, 32000, 375, 0xa, 0x1},
-+
-+ /* 44.1k */
-+ {11289600, 44100, 256, 0x10, 0x0},
-+ {16934400, 44100, 384, 0x11, 0x0},
-+ {12000000, 44100, 272, 0x11, 0x1},
-+
-+ /* 48k */
-+ {12288000, 48000, 256, 0x0, 0x0},
-+ {18432000, 48000, 384, 0x1, 0x0},
-+ {12000000, 48000, 250, 0x0, 0x1},
-+
-+ /* 88.2k */
-+ {11289600, 88200, 128, 0x1e, 0x0},
-+ {16934400, 88200, 192, 0x1f, 0x0},
-+ {12000000, 88200, 136, 0x1f, 0x1},
-+
-+ /* 96k */
-+ {12288000, 96000, 128, 0xe, 0x0},
-+ {18432000, 96000, 192, 0xf, 0x0},
-+ {12000000, 96000, 125, 0xe, 0x1},
-+};
-+
-+static int get_coeff(int mclk, int rate)
-+{
-+ int i;
-+
-+ for (i = 0; i < ARRAY_SIZE(coeff_div); i++) {
-+ if (coeff_div[i].rate == rate && coeff_div[i].mclk == mclk)
-+ return i;
-+ }
-+ return -EINVAL;
-+}
-+
-+/* WM8971 supports numerous input clocks per sample rate */
-+static unsigned int wm8971_config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ dai->mclk = 0;
-+
-+ /* check that the calculated FS and rate actually match a clock from
-+ * the machine driver */
-+ if (info->fs * info->rate == clk)
-+ dai->mclk = clk;
-+
-+ return dai->mclk;
-+}
-+
-+static int wm8971_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 iface = 0, bfs, srate = 0;
-+ int i = get_coeff(rtd->codec_dai->mclk,
-+ snd_soc_get_rate(rtd->codec_dai->dai_runtime.pcmrate));
-+
-+ /* is coefficient valid ? */
-+ if (i < 0)
-+ return i;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->codec_dai->dai_runtime.bfs);
-+
-+ /* set master/slave audio interface */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ iface |= 0x0040;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ break;
-+ }
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ iface |= 0x0002;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ iface |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ iface |= 0x0003;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_B:
-+ iface |= 0x0013;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ iface |= 0x0004;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ iface |= 0x0008;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ iface |= 0x000c;
-+ break;
-+ }
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_NB_NF:
-+ break;
-+ case SND_SOC_DAIFMT_IB_IF:
-+ iface |= 0x0090;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ iface |= 0x0080;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ iface |= 0x0010;
-+ break;
-+ }
-+
-+ /* set bclk divisor rate */
-+ switch (bfs) {
-+ case 1:
-+ break;
-+ case 4:
-+ srate |= (0x1 << 7);
-+ break;
-+ case 8:
-+ srate |= (0x2 << 7);
-+ break;
-+ case 16:
-+ srate |= (0x3 << 7);
-+ break;
-+ }
-+
-+ /* set iface & srate */
-+ wm8971_write(codec, WM8971_AUDIO, iface);
-+ wm8971_write(codec, WM8971_SRATE, srate |
-+ (coeff_div[i].sr << 1) | coeff_div[i].usb);
-+ return 0;
-+}
-+
-+static int wm8971_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = wm8971_read_reg_cache(codec, WM8971_ADCDAC) & 0xfff7;
-+ if (mute)
-+ wm8971_write(codec, WM8971_ADCDAC, mute_reg | 0x8);
-+ else
-+ wm8971_write(codec, WM8971_ADCDAC, mute_reg);
-+ return 0;
-+}
-+
-+static int wm8971_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ u16 pwr_reg = wm8971_read_reg_cache(codec, WM8971_PWR1) & 0xfe3e;
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* set vmid to 50k and unmute dac */
-+ wm8971_write(codec, WM8971_PWR1, pwr_reg | 0x00c1);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ /* set vmid to 5k for quick power up */
-+ wm8971_write(codec, WM8971_PWR1, pwr_reg | 0x01c0);
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* mute dac and set vmid to 500k, enable VREF */
-+ wm8971_write(codec, WM8971_PWR1, pwr_reg | 0x0140);
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ wm8971_write(codec, WM8971_PWR1, 0x0001);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+struct snd_soc_codec_dai wm8971_dai = {
-+ .name = "WM8971",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .capture = {
-+ .stream_name = "Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .config_sysclk = wm8971_config_sysclk,
-+ .digital_mute = wm8971_mute,
-+ .ops = {
-+ .prepare = wm8971_pcm_prepare,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8971_modes),
-+ .mode = wm8971_modes,
-+ },
-+};
-+EXPORT_SYMBOL_GPL(wm8971_dai);
-+
-+static void wm8971_work(void *data)
-+{
-+ struct snd_soc_codec *codec = (struct snd_soc_codec *)data;
-+ wm8971_dapm_event(codec, codec->dapm_state);
-+}
-+
-+static int wm8971_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ wm8971_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm8971_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(wm8971_reg); i++) {
-+ if (i + 1 == WM8971_RESET)
-+ continue;
-+ data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+
-+ wm8971_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+
-+ /* charge wm8971 caps */
-+ if (codec->suspend_dapm_state == SNDRV_CTL_POWER_D0) {
-+ wm8971_dapm_event(codec, SNDRV_CTL_POWER_D2);
-+ codec->dapm_state = SNDRV_CTL_POWER_D0;
-+ queue_delayed_work(wm8971_workq, &wm8971_dapm_work,
-+ msecs_to_jiffies(1000));
-+ }
-+
-+ return 0;
-+}
-+
-+static int wm8971_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int reg, ret = 0;
-+
-+ codec->name = "WM8971";
-+ codec->owner = THIS_MODULE;
-+ codec->read = wm8971_read_reg_cache;
-+ codec->write = wm8971_write;
-+ codec->dapm_event = wm8971_dapm_event;
-+ codec->dai = &wm8971_dai;
-+ codec->reg_cache_size = ARRAY_SIZE(wm8971_reg);
-+ codec->num_dai = 1;
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm8971_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache, wm8971_reg,
-+ sizeof(u16) * ARRAY_SIZE(wm8971_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm8971_reg);
-+
-+ wm8971_reset(codec);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if (ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* charge output caps */
-+ wm8971_dapm_event(codec, SNDRV_CTL_POWER_D2);
-+ codec->dapm_state = SNDRV_CTL_POWER_D3hot;
-+ queue_delayed_work(wm8971_workq, &wm8971_dapm_work,
-+ msecs_to_jiffies(1000));
-+
-+ /* set the update bits */
-+ reg = wm8971_read_reg_cache(codec, WM8971_LDAC);
-+ wm8971_write(codec, WM8971_LDAC, reg | 0x0100);
-+ reg = wm8971_read_reg_cache(codec, WM8971_RDAC);
-+ wm8971_write(codec, WM8971_RDAC, reg | 0x0100);
-+
-+ reg = wm8971_read_reg_cache(codec, WM8971_LOUT1V);
-+ wm8971_write(codec, WM8971_LOUT1V, reg | 0x0100);
-+ reg = wm8971_read_reg_cache(codec, WM8971_ROUT1V);
-+ wm8971_write(codec, WM8971_ROUT1V, reg | 0x0100);
-+
-+ reg = wm8971_read_reg_cache(codec, WM8971_LOUT2V);
-+ wm8971_write(codec, WM8971_LOUT2V, reg | 0x0100);
-+ reg = wm8971_read_reg_cache(codec, WM8971_ROUT2V);
-+ wm8971_write(codec, WM8971_ROUT2V, reg | 0x0100);
-+
-+ reg = wm8971_read_reg_cache(codec, WM8971_LINVOL);
-+ wm8971_write(codec, WM8971_LINVOL, reg | 0x0100);
-+ reg = wm8971_read_reg_cache(codec, WM8971_RINVOL);
-+ wm8971_write(codec, WM8971_RINVOL, reg | 0x0100);
-+
-+ wm8971_add_controls(codec);
-+ wm8971_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+/* If the i2c layer weren't so broken, we could pass this kind of data
-+ around */
-+static struct snd_soc_device *wm8971_socdev;
-+
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+
-+/*
-+ * WM8731 2 wire address is determined by GPIO5
-+ * state during powerup.
-+ * low = 0x1a
-+ * high = 0x1b
-+ */
-+#define I2C_DRIVERID_WM8971 0xfefe /* liam - need a proper id */
-+
-+static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END };
-+
-+/* Magic definition of all other variables and things */
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver wm8971_i2c_driver;
-+static struct i2c_client client_template;
-+
-+static int wm8971_codec_probe(struct i2c_adapter *adap, int addr, int kind)
-+{
-+ struct snd_soc_device *socdev = wm8971_socdev;
-+ struct wm8971_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct i2c_client *i2c;
-+ int ret;
-+
-+ if (addr != setup->i2c_address)
-+ return -ENODEV;
-+
-+ client_template.adapter = adap;
-+ client_template.addr = addr;
-+
-+ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (i2c == NULL) {
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+ memcpy(i2c, &client_template, sizeof(struct i2c_client));
-+
-+ i2c_set_clientdata(i2c, codec);
-+
-+ codec->control_data = i2c;
-+
-+ ret = i2c_attach_client(i2c);
-+ if (ret < 0) {
-+ err("failed to attach codec at addr %x\n", addr);
-+ goto err;
-+ }
-+
-+ ret = wm8971_init(socdev);
-+ if (ret < 0) {
-+ err("failed to initialise WM8971\n");
-+ goto err;
-+ }
-+ return ret;
-+
-+err:
-+ kfree(codec);
-+ kfree(i2c);
-+ return ret;
-+}
-+
-+static int wm8971_i2c_detach(struct i2c_client *client)
-+{
-+ struct snd_soc_codec* codec = i2c_get_clientdata(client);
-+ i2c_detach_client(client);
-+ kfree(codec->reg_cache);
-+ kfree(client);
-+ return 0;
-+}
-+
-+static int wm8971_i2c_attach(struct i2c_adapter *adap)
-+{
-+ return i2c_probe(adap, &addr_data, wm8971_codec_probe);
-+}
-+
-+/* corgi i2c codec control layer */
-+static struct i2c_driver wm8971_i2c_driver = {
-+ .driver = {
-+ .name = "WM8971 I2C Codec",
-+ .owner = THIS_MODULE,
-+ },
-+ .id = I2C_DRIVERID_WM8971,
-+ .attach_adapter = wm8971_i2c_attach,
-+ .detach_client = wm8971_i2c_detach,
-+ .command = NULL,
-+};
-+
-+static struct i2c_client client_template = {
-+ .name = "WM8971",
-+ .driver = &wm8971_i2c_driver,
-+};
-+#endif
-+
-+static int wm8971_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct wm8971_setup_data *setup;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+
-+ info("WM8971 Audio Codec %s", WM8971_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+ wm8971_socdev = socdev;
-+
-+ INIT_WORK(&wm8971_dapm_work, wm8971_work, codec);
-+ wm8971_workq = create_workqueue("wm8971");
-+ if (wm8971_workq == NULL) {
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ if (setup->i2c_address) {
-+ normal_i2c[0] = setup->i2c_address;
-+ codec->hw_write = (hw_write_t)i2c_master_send;
-+ ret = i2c_add_driver(&wm8971_i2c_driver);
-+ if (ret != 0)
-+ printk(KERN_ERR "can't add i2c driver");
-+ }
-+#else
-+ /* Add other interfaces here */
-+#endif
-+
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int wm8971_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ wm8971_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ if (wm8971_workq)
-+ destroy_workqueue(wm8971_workq);
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ i2c_del_driver(&wm8971_i2c_driver);
-+#endif
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8971 = {
-+ .probe = wm8971_probe,
-+ .remove = wm8971_remove,
-+ .suspend = wm8971_suspend,
-+ .resume = wm8971_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm8971);
-+
-+MODULE_DESCRIPTION("ASoC WM8971 driver");
-+MODULE_AUTHOR("Lab126");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8971.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8971.h
-@@ -0,0 +1,61 @@
-+/*
-+ * wm8971.h -- audio driver for WM8971
-+ *
-+ * Copyright 2005 Lab126, Inc.
-+ *
-+ * Author: Kenneth Kiraly <kiraly@lab126.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ */
-+
-+#ifndef _WM8971_H
-+#define _WM8971_H
-+
-+#define WM8971_LINVOL 0x00
-+#define WM8971_RINVOL 0x01
-+#define WM8971_LOUT1V 0x02
-+#define WM8971_ROUT1V 0x03
-+#define WM8971_ADCDAC 0x05
-+#define WM8971_AUDIO 0x07
-+#define WM8971_SRATE 0x08
-+#define WM8971_LDAC 0x0a
-+#define WM8971_RDAC 0x0b
-+#define WM8971_BASS 0x0c
-+#define WM8971_TREBLE 0x0d
-+#define WM8971_RESET 0x0f
-+#define WM8971_ALC1 0x11
-+#define WM8971_ALC2 0x12
-+#define WM8971_ALC3 0x13
-+#define WM8971_NGATE 0x14
-+#define WM8971_LADC 0x15
-+#define WM8971_RADC 0x16
-+#define WM8971_ADCTL1 0x17
-+#define WM8971_ADCTL2 0x18
-+#define WM8971_PWR1 0x19
-+#define WM8971_PWR2 0x1a
-+#define WM8971_ADCTL3 0x1b
-+#define WM8971_ADCIN 0x1f
-+#define WM8971_LADCIN 0x20
-+#define WM8971_RADCIN 0x21
-+#define WM8971_LOUTM1 0x22
-+#define WM8971_LOUTM2 0x23
-+#define WM8971_ROUTM1 0x24
-+#define WM8971_ROUTM2 0x25
-+#define WM8971_MOUTM1 0x26
-+#define WM8971_MOUTM2 0x27
-+#define WM8971_LOUT2V 0x28
-+#define WM8971_ROUT2V 0x29
-+#define WM8971_MOUTV 0x2A
-+
-+struct wm8971_setup_data {
-+ unsigned short i2c_address;
-+};
-+
-+extern struct snd_soc_codec_dai wm8971_dai;
-+extern struct snd_soc_codec_device soc_codec_dev_wm8971;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8974.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8974.c
-@@ -0,0 +1,935 @@
-+/*
-+ * wm8974.c -- WM8974 ALSA Soc Audio driver
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ *
-+ * Author: Liam Girdwood <liam.girdwood@wolfsonmicro.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/i2c.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+#include "wm8974.h"
-+
-+#define AUDIO_NAME "wm8974"
-+#define WM8974_VERSION "0.5"
-+
-+/*
-+ * Debug
-+ */
-+
-+#define WM8974_DEBUG 0
-+
-+#ifdef WM8974_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...) do {} while (0)
-+#endif
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8974;
-+
-+/*
-+ * wm8974 register cache
-+ * We can't read the WM8974 register space when we are
-+ * using 2 wire for device control, so we cache them instead.
-+ */
-+static const u16 wm8974_reg[WM8974_CACHEREGNUM] = {
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0050, 0x0000, 0x0140, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x00ff,
-+ 0x0000, 0x0000, 0x0100, 0x00ff,
-+ 0x0000, 0x0000, 0x012c, 0x002c,
-+ 0x002c, 0x002c, 0x002c, 0x0000,
-+ 0x0032, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0038, 0x000b, 0x0032, 0x0000,
-+ 0x0008, 0x000c, 0x0093, 0x00e9,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0003, 0x0010, 0x0000, 0x0000,
-+ 0x0000, 0x0002, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0039, 0x0000,
-+ 0x0000,
-+};
-+
-+#define WM8974_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_RIGHT_J | \
-+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_NB_IF | SND_SOC_DAIFMT_IB_NF | \
-+ SND_SOC_DAIFMT_IB_IF)
-+
-+#define WM8974_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define WM8974_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000)
-+
-+#define WM8794_BCLK \
-+ (SND_SOC_FSBD(1) | SND_SOC_FSBD(2) | SND_SOC_FSBD(4) | SND_SOC_FSBD(8) |\
-+ SND_SOC_FSBD(16) | SND_SOC_FSBD(32))
-+
-+#define WM8794_HIFI_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
-+
-+static struct snd_soc_dai_mode wm8974_modes[] = {
-+ /* codec frame and clock master modes */
-+ {
-+ .fmt = WM8974_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8794_HIFI_BITS,
-+ .pcmrate = WM8974_RATES,
-+ .pcmdir = WM8974_DIR,
-+ .fs = 256,
-+ .bfs = WM8794_BCLK,
-+ },
-+
-+ /* codec frame and clock slave modes */
-+ {
-+ .fmt = WM8974_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM8794_HIFI_BITS,
-+ .pcmrate = WM8974_RATES,
-+ .pcmdir = WM8974_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+/*
-+ * read wm8974 register cache
-+ */
-+static inline unsigned int wm8974_read_reg_cache(struct snd_soc_codec * codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg == WM8974_RESET)
-+ return 0;
-+ if (reg >= WM8974_CACHEREGNUM)
-+ return -1;
-+ return cache[reg];
-+}
-+
-+/*
-+ * write wm8974 register cache
-+ */
-+static inline void wm8974_write_reg_cache(struct snd_soc_codec *codec,
-+ u16 reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg >= WM8974_CACHEREGNUM)
-+ return;
-+ cache[reg] = value;
-+}
-+
-+/*
-+ * write to the WM8974 register space
-+ */
-+static int wm8974_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[2];
-+
-+ /* data is
-+ * D15..D9 WM8974 register offset
-+ * D8...D0 register data
-+ */
-+ data[0] = (reg << 1) | ((value >> 8) & 0x0001);
-+ data[1] = value & 0x00ff;
-+
-+ wm8974_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 2) == 2)
-+ return 0;
-+ else
-+ return -EIO;
-+}
-+
-+#define wm8974_reset(c) wm8974_write(c, WM8974_RESET, 0)
-+
-+static const char *wm8974_companding[] = {"Off", "NC", "u-law", "A-law" };
-+static const char *wm8974_deemp[] = {"None", "32kHz", "44.1kHz", "48kHz" };
-+static const char *wm8974_eqmode[] = {"Capture", "Playback" };
-+static const char *wm8974_bw[] = {"Narrow", "Wide" };
-+static const char *wm8974_eq1[] = {"80Hz", "105Hz", "135Hz", "175Hz" };
-+static const char *wm8974_eq2[] = {"230Hz", "300Hz", "385Hz", "500Hz" };
-+static const char *wm8974_eq3[] = {"650Hz", "850Hz", "1.1kHz", "1.4kHz" };
-+static const char *wm8974_eq4[] = {"1.8kHz", "2.4kHz", "3.2kHz", "4.1kHz" };
-+static const char *wm8974_eq5[] = {"5.3kHz", "6.9kHz", "9kHz", "11.7kHz" };
-+static const char *wm8974_alc[] = {"ALC", "Limiter" };
-+
-+static const struct soc_enum wm8974_enum[] = {
-+ SOC_ENUM_SINGLE(WM8974_COMP, 1, 4, wm8974_companding), /* adc */
-+ SOC_ENUM_SINGLE(WM8974_COMP, 3, 4, wm8974_companding), /* dac */
-+ SOC_ENUM_SINGLE(WM8974_DAC, 4, 4, wm8974_deemp),
-+ SOC_ENUM_SINGLE(WM8974_EQ1, 8, 2, wm8974_eqmode),
-+
-+ SOC_ENUM_SINGLE(WM8974_EQ1, 5, 4, wm8974_eq1),
-+ SOC_ENUM_SINGLE(WM8974_EQ2, 8, 2, wm8974_bw),
-+ SOC_ENUM_SINGLE(WM8974_EQ2, 5, 4, wm8974_eq2),
-+ SOC_ENUM_SINGLE(WM8974_EQ3, 8, 2, wm8974_bw),
-+
-+ SOC_ENUM_SINGLE(WM8974_EQ3, 5, 4, wm8974_eq3),
-+ SOC_ENUM_SINGLE(WM8974_EQ4, 8, 2, wm8974_bw),
-+ SOC_ENUM_SINGLE(WM8974_EQ4, 5, 4, wm8974_eq4),
-+ SOC_ENUM_SINGLE(WM8974_EQ5, 8, 2, wm8974_bw),
-+
-+ SOC_ENUM_SINGLE(WM8974_EQ5, 5, 4, wm8974_eq5),
-+ SOC_ENUM_SINGLE(WM8974_ALC3, 8, 2, wm8974_alc),
-+};
-+
-+static const struct snd_kcontrol_new wm8974_snd_controls[] = {
-+
-+SOC_SINGLE("Digital Loopback Switch", WM8974_COMP, 0, 1, 0),
-+
-+SOC_ENUM("DAC Companding", wm8974_enum[1]),
-+SOC_ENUM("ADC Companding", wm8974_enum[0]),
-+
-+SOC_ENUM("Playback De-emphasis", wm8974_enum[2]),
-+SOC_SINGLE("DAC Inversion Switch", WM8974_DAC, 0, 1, 0),
-+
-+SOC_SINGLE("PCM Volume", WM8974_DACVOL, 0, 127, 0),
-+
-+SOC_SINGLE("High Pass Filter Switch", WM8974_ADC, 8, 1, 0),
-+SOC_SINGLE("High Pass Cut Off", WM8974_ADC, 4, 7, 0),
-+SOC_SINGLE("ADC Inversion Switch", WM8974_COMP, 0, 1, 0),
-+
-+SOC_SINGLE("Capture Volume", WM8974_ADCVOL, 0, 127, 0),
-+
-+SOC_ENUM("Equaliser Function", wm8974_enum[3]),
-+SOC_ENUM("EQ1 Cut Off", wm8974_enum[4]),
-+SOC_SINGLE("EQ1 Volume", WM8974_EQ1, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ2 Bandwith", wm8974_enum[5]),
-+SOC_ENUM("EQ2 Cut Off", wm8974_enum[6]),
-+SOC_SINGLE("EQ2 Volume", WM8974_EQ2, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ3 Bandwith", wm8974_enum[7]),
-+SOC_ENUM("EQ3 Cut Off", wm8974_enum[8]),
-+SOC_SINGLE("EQ3 Volume", WM8974_EQ3, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ4 Bandwith", wm8974_enum[9]),
-+SOC_ENUM("EQ4 Cut Off", wm8974_enum[10]),
-+SOC_SINGLE("EQ4 Volume", WM8974_EQ4, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ5 Bandwith", wm8974_enum[11]),
-+SOC_ENUM("EQ5 Cut Off", wm8974_enum[12]),
-+SOC_SINGLE("EQ5 Volume", WM8974_EQ5, 0, 31, 1),
-+
-+SOC_SINGLE("DAC Playback Limiter Switch", WM8974_DACLIM1, 8, 1, 0),
-+SOC_SINGLE("DAC Playback Limiter Decay", WM8974_DACLIM1, 4, 15, 0),
-+SOC_SINGLE("DAC Playback Limiter Attack", WM8974_DACLIM1, 0, 15, 0),
-+
-+SOC_SINGLE("DAC Playback Limiter Threshold", WM8974_DACLIM2, 4, 7, 0),
-+SOC_SINGLE("DAC Playback Limiter Boost", WM8974_DACLIM2, 0, 15, 0),
-+
-+SOC_SINGLE("ALC Enable Switch", WM8974_ALC1, 8, 1, 0),
-+SOC_SINGLE("ALC Capture Max Gain", WM8974_ALC1, 3, 7, 0),
-+SOC_SINGLE("ALC Capture Min Gain", WM8974_ALC1, 0, 7, 0),
-+
-+SOC_SINGLE("ALC Capture ZC Switch", WM8974_ALC2, 8, 1, 0),
-+SOC_SINGLE("ALC Capture Hold", WM8974_ALC2, 4, 7, 0),
-+SOC_SINGLE("ALC Capture Target", WM8974_ALC2, 0, 15, 0),
-+
-+SOC_ENUM("ALC Capture Mode", wm8974_enum[13]),
-+SOC_SINGLE("ALC Capture Decay", WM8974_ALC3, 4, 15, 0),
-+SOC_SINGLE("ALC Capture Attack", WM8974_ALC3, 0, 15, 0),
-+
-+SOC_SINGLE("ALC Capture Noise Gate Switch", WM8974_NGATE, 3, 1, 0),
-+SOC_SINGLE("ALC Capture Noise Gate Threshold", WM8974_NGATE, 0, 7, 0),
-+
-+SOC_SINGLE("Capture PGA ZC Switch", WM8974_INPPGA, 7, 1, 0),
-+SOC_SINGLE("Capture PGA Volume", WM8974_INPPGA, 0, 63, 0),
-+
-+SOC_SINGLE("Speaker Playback ZC Switch", WM8974_SPKVOL, 7, 1, 0),
-+SOC_SINGLE("Speaker Playback Switch", WM8974_SPKVOL, 6, 1, 1),
-+SOC_SINGLE("Speaker Playback Volume", WM8974_SPKVOL, 0, 63, 0),
-+
-+SOC_SINGLE("Capture Boost(+20dB)", WM8974_ADCBOOST, 8, 1, 0),
-+SOC_SINGLE("Mono Playback Switch", WM8974_MONOMIX, 6, 1, 0),
-+};
-+
-+/* add non dapm controls */
-+static int wm8974_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm8974_snd_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8974_snd_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/* Speaker Output Mixer */
-+static const struct snd_kcontrol_new wm8974_speaker_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Line Bypass Switch", WM8974_SPKMIX, 1, 1, 0),
-+SOC_DAPM_SINGLE("Aux Playback Switch", WM8974_SPKMIX, 5, 1, 0),
-+SOC_DAPM_SINGLE("PCM Playback Switch", WM8974_SPKMIX, 0, 1, 1),
-+};
-+
-+/* Mono Output Mixer */
-+static const struct snd_kcontrol_new wm8974_mono_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Line Bypass Switch", WM8974_MONOMIX, 1, 1, 0),
-+SOC_DAPM_SINGLE("Aux Playback Switch", WM8974_MONOMIX, 2, 1, 0),
-+SOC_DAPM_SINGLE("PCM Playback Switch", WM8974_MONOMIX, 0, 1, 1),
-+};
-+
-+/* AUX Input boost vol */
-+static const struct snd_kcontrol_new wm8974_aux_boost_controls =
-+SOC_DAPM_SINGLE("Aux Volume", WM8974_ADCBOOST, 0, 7, 0);
-+
-+/* Mic Input boost vol */
-+static const struct snd_kcontrol_new wm8974_mic_boost_controls =
-+SOC_DAPM_SINGLE("Mic Volume", WM8974_ADCBOOST, 4, 7, 0);
-+
-+/* Capture boost switch */
-+static const struct snd_kcontrol_new wm8974_capture_boost_controls =
-+SOC_DAPM_SINGLE("Capture Boost Switch", WM8974_INPPGA, 6, 1, 0);
-+
-+/* Aux In to PGA */
-+static const struct snd_kcontrol_new wm8974_aux_capture_boost_controls =
-+SOC_DAPM_SINGLE("Aux Capture Boost Switch", WM8974_INPPGA, 2, 1, 0);
-+
-+/* Mic P In to PGA */
-+static const struct snd_kcontrol_new wm8974_micp_capture_boost_controls =
-+SOC_DAPM_SINGLE("Mic P Capture Boost Switch", WM8974_INPPGA, 0, 1, 0);
-+
-+/* Mic N In to PGA */
-+static const struct snd_kcontrol_new wm8974_micn_capture_boost_controls =
-+SOC_DAPM_SINGLE("Mic N Capture Boost Switch", WM8974_INPPGA, 1, 1, 0);
-+
-+static const struct snd_soc_dapm_widget wm8974_dapm_widgets[] = {
-+SND_SOC_DAPM_MIXER("Speaker Mixer", WM8974_POWER3, 2, 0,
-+ &wm8974_speaker_mixer_controls[0],
-+ ARRAY_SIZE(wm8974_speaker_mixer_controls)),
-+SND_SOC_DAPM_MIXER("Mono Mixer", WM8974_POWER3, 3, 0,
-+ &wm8974_mono_mixer_controls[0],
-+ ARRAY_SIZE(wm8974_mono_mixer_controls)),
-+SND_SOC_DAPM_DAC("DAC", "HiFi Playback", WM8974_POWER3, 0, 0),
-+SND_SOC_DAPM_ADC("ADC", "HiFi Capture", WM8974_POWER3, 0, 0),
-+SND_SOC_DAPM_PGA("Aux Input", WM8974_POWER1, 6, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("SpkN Out", WM8974_POWER3, 5, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("SpkP Out", WM8974_POWER3, 6, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Mono Out", WM8974_POWER3, 7, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Mic PGA", WM8974_POWER2, 2, 0, NULL, 0),
-+
-+SND_SOC_DAPM_PGA("Aux Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8974_aux_boost_controls, 1),
-+SND_SOC_DAPM_PGA("Mic Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8974_mic_boost_controls, 1),
-+SND_SOC_DAPM_SWITCH("Capture Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8974_capture_boost_controls),
-+
-+SND_SOC_DAPM_MIXER("Boost Mixer", WM8974_POWER2, 4, 0, NULL, 0),
-+
-+SND_SOC_DAPM_MICBIAS("Mic Bias", WM8974_POWER1, 4, 0),
-+
-+SND_SOC_DAPM_INPUT("MICN"),
-+SND_SOC_DAPM_INPUT("MICP"),
-+SND_SOC_DAPM_INPUT("AUX"),
-+SND_SOC_DAPM_OUTPUT("MONOOUT"),
-+SND_SOC_DAPM_OUTPUT("SPKOUTP"),
-+SND_SOC_DAPM_OUTPUT("SPKOUTN"),
-+};
-+
-+static const char *audio_map[][3] = {
-+ /* Mono output mixer */
-+ {"Mono Mixer", "PCM Playback Switch", "DAC"},
-+ {"Mono Mixer", "Aux Playback Switch", "Aux Input"},
-+ {"Mono Mixer", "Line Bypass Switch", "Boost Mixer"},
-+
-+ /* Speaker output mixer */
-+ {"Speaker Mixer", "PCM Playback Switch", "DAC"},
-+ {"Speaker Mixer", "Aux Playback Switch", "Aux Input"},
-+ {"Speaker Mixer", "Line Bypass Switch", "Boost Mixer"},
-+
-+ /* Outputs */
-+ {"Mono Out", NULL, "Mono Mixer"},
-+ {"MONOOUT", NULL, "Mono Out"},
-+ {"SpkN Out", NULL, "Speaker Mixer"},
-+ {"SpkP Out", NULL, "Speaker Mixer"},
-+ {"SPKOUTN", NULL, "SpkN Out"},
-+ {"SPKOUTP", NULL, "SpkP Out"},
-+
-+ /* Boost Mixer */
-+ {"Boost Mixer", NULL, "ADC"},
-+ {"Capture Boost Switch", "Aux Capture Boost Switch", "AUX"},
-+ {"Aux Boost", "Aux Volume", "Boost Mixer"},
-+ {"Capture Boost", "Capture Switch", "Boost Mixer"},
-+ {"Mic Boost", "Mic Volume", "Boost Mixer"},
-+
-+ /* Inputs */
-+ {"MICP", NULL, "Mic Boost"},
-+ {"MICN", NULL, "Mic PGA"},
-+ {"Mic PGA", NULL, "Capture Boost"},
-+ {"AUX", NULL, "Aux Input"},
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int wm8974_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(wm8974_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8974_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path audio_mapnects */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+struct pll_ {
-+ unsigned int in_hz, out_hz;
-+ unsigned int pre:4; /* prescale - 1 */
-+ unsigned int n:4;
-+ unsigned int k;
-+};
-+
-+struct pll_ pll[] = {
-+ {12000000, 11289600, 0, 7, 0x86c220},
-+ {12000000, 12288000, 0, 8, 0x3126e8},
-+ {13000000, 11289600, 0, 6, 0xf28bd4},
-+ {13000000, 12288000, 0, 7, 0x8fd525},
-+ {12288000, 11289600, 0, 7, 0x59999a},
-+ {11289600, 12288000, 0, 8, 0x80dee9},
-+ /* liam - add more entries */
-+};
-+
-+static int set_pll(struct snd_soc_codec *codec, unsigned int in,
-+ unsigned int out)
-+{
-+ int i;
-+ u16 reg;
-+
-+ if(out == 0) {
-+ reg = wm8974_read_reg_cache(codec, WM8974_POWER1);
-+ wm8974_write(codec, WM8974_POWER1, reg & 0x1df);
-+ return 0;
-+ }
-+
-+ for(i = 0; i < ARRAY_SIZE(pll); i++) {
-+ if (in == pll[i].in_hz && out == pll[i].out_hz) {
-+ wm8974_write(codec, WM8974_PLLN, (pll[i].pre << 4) | pll[i].n);
-+ wm8974_write(codec, WM8974_PLLK1, pll[i].k >> 18);
-+ wm8974_write(codec, WM8974_PLLK1, (pll[i].k >> 9) && 0x1ff);
-+ wm8974_write(codec, WM8974_PLLK1, pll[i].k && 0x1ff);
-+ reg = wm8974_read_reg_cache(codec, WM8974_POWER1);
-+ wm8974_write(codec, WM8974_POWER1, reg | 0x020);
-+ return 0;
-+ }
-+ }
-+ return -EINVAL;
-+}
-+
-+/* mclk dividers * 2 */
-+static unsigned char mclk_div[] = {2, 3, 4, 6, 8, 12, 16, 24};
-+
-+/* we need 256FS to drive the DAC's and ADC's */
-+static unsigned int wm8974_config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ int i, j, best_clk = info->fs * info->rate;
-+
-+ /* can we run at this clk without the PLL ? */
-+ for (i = 0; i < ARRAY_SIZE(mclk_div); i++) {
-+ if ((best_clk >> 1) * mclk_div[i] == clk) {
-+ dai->pll_in = 0;
-+ dai->clk_div = mclk_div[i];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+
-+ /* now check for PLL support */
-+ for (i = 0; i < ARRAY_SIZE(pll); i++) {
-+ if (pll[i].in_hz == clk) {
-+ for (j = 0; j < ARRAY_SIZE(mclk_div); j++) {
-+ if (pll[i].out_hz == mclk_div[j] * (best_clk >> 1)) {
-+ dai->pll_in = clk;
-+ dai->pll_out = pll[i].out_hz;
-+ dai->clk_div = mclk_div[j];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+ }
-+ }
-+
-+ /* this clk is not supported */
-+ return 0;
-+}
-+
-+static int wm8974_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct snd_soc_codec_dai *dai = rtd->codec_dai;
-+ u16 iface = 0, bfs, clk = 0, adn;
-+ int fs = 48000 << 7, i;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->codec_dai->dai_runtime.bfs);
-+ switch (bfs) {
-+ case 2:
-+ clk |= 0x1 << 2;
-+ break;
-+ case 4:
-+ clk |= 0x2 << 2;
-+ break;
-+ case 8:
-+ clk |= 0x3 << 2;
-+ break;
-+ case 16:
-+ clk |= 0x4 << 2;
-+ break;
-+ case 32:
-+ clk |= 0x5 << 2;
-+ break;
-+ }
-+
-+ /* set master/slave audio interface */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ clk |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ break;
-+ }
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ iface |= 0x0010;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ iface |= 0x0008;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ iface |= 0x00018;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ iface |= 0x0020;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ iface |= 0x0040;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ iface |= 0x0060;
-+ break;
-+ }
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_NB_NF:
-+ break;
-+ case SND_SOC_DAIFMT_IB_IF:
-+ iface |= 0x0180;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ iface |= 0x0100;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ iface |= 0x0080;
-+ break;
-+ }
-+
-+ /* filter coefficient */
-+ adn = wm8974_read_reg_cache(codec, WM8974_ADD) & 0x1f1;
-+ switch (rtd->codec_dai->dai_runtime.pcmrate) {
-+ case SNDRV_PCM_RATE_8000:
-+ adn |= 0x5 << 1;
-+ fs = 8000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_11025:
-+ adn |= 0x4 << 1;
-+ fs = 11025 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_16000:
-+ adn |= 0x3 << 1;
-+ fs = 16000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_22050:
-+ adn |= 0x2 << 1;
-+ fs = 22050 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_32000:
-+ adn |= 0x1 << 1;
-+ fs = 32000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_44100:
-+ fs = 44100 << 7;
-+ break;
-+ }
-+
-+ /* do we need to enable the PLL */
-+ if(dai->pll_in)
-+ set_pll(codec, dai->pll_in, dai->pll_out);
-+
-+ /* divide the clock to 256 fs */
-+ for(i = 0; i < ARRAY_SIZE(mclk_div); i++) {
-+ if (dai->clk_div == mclk_div[i]) {
-+ clk |= i << 5;
-+ clk &= 0xff;
-+ goto set;
-+ }
-+ }
-+
-+set:
-+ /* set iface */
-+ wm8974_write(codec, WM8974_IFACE, iface);
-+ wm8974_write(codec, WM8974_CLOCK, clk);
-+
-+ return 0;
-+}
-+
-+static int wm8974_hw_free(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ set_pll(codec, 0, 0);
-+ return 0;
-+}
-+
-+static int wm8974_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = wm8974_read_reg_cache(codec, WM8974_DAC) & 0xffbf;
-+ if(mute)
-+ wm8974_write(codec, WM8974_DAC, mute_reg | 0x40);
-+ else
-+ wm8974_write(codec, WM8974_DAC, mute_reg);
-+ return 0;
-+}
-+
-+/* liam need to make this lower power with dapm */
-+static int wm8974_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* vref/mid, clk and osc on, dac unmute, active */
-+ wm8974_write(codec, WM8974_POWER1, 0x1ff);
-+ wm8974_write(codec, WM8974_POWER2, 0x1ff);
-+ wm8974_write(codec, WM8974_POWER3, 0x1ff);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* everything off except vref/vmid, dac mute, inactive */
-+
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ /* everything off, dac mute, inactive */
-+ wm8974_write(codec, WM8974_POWER1, 0x0);
-+ wm8974_write(codec, WM8974_POWER2, 0x0);
-+ wm8974_write(codec, WM8974_POWER3, 0x0);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+struct snd_soc_codec_dai wm8974_dai = {
-+ .name = "WM8974 HiFi",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ },
-+ .capture = {
-+ .stream_name = "Capture",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ },
-+ .config_sysclk = wm8974_config_sysclk,
-+ .digital_mute = wm8974_mute,
-+ .ops = {
-+ .prepare = wm8974_pcm_prepare,
-+ .hw_free = wm8974_hw_free,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8974_modes),
-+ .mode = wm8974_modes,
-+ },
-+};
-+EXPORT_SYMBOL_GPL(wm8974_dai);
-+
-+static int wm8974_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ wm8974_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm8974_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(wm8974_reg); i++) {
-+ data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+ wm8974_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm8974_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the WM8974 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int wm8974_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int ret = 0;
-+
-+ codec->name = "WM8974";
-+ codec->owner = THIS_MODULE;
-+ codec->read = wm8974_read_reg_cache;
-+ codec->write = wm8974_write;
-+ codec->dapm_event = wm8974_dapm_event;
-+ codec->dai = &wm8974_dai;
-+ codec->num_dai = 1;
-+ codec->reg_cache_size = ARRAY_SIZE(wm8974_reg);
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm8974_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache, wm8974_reg,
-+ sizeof(u16) * ARRAY_SIZE(wm8974_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm8974_reg);
-+
-+ wm8974_reset(codec);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if(ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* power on device */
-+ wm8974_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm8974_add_controls(codec);
-+ wm8974_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if(ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static struct snd_soc_device *wm8974_socdev;
-+
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+
-+/*
-+ * WM8974 2 wire address is 0x1a
-+ */
-+#define I2C_DRIVERID_WM8974 0xfefe /* liam - need a proper id */
-+
-+static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END };
-+
-+/* Magic definition of all other variables and things */
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver wm8974_i2c_driver;
-+static struct i2c_client client_template;
-+
-+/* If the i2c layer weren't so broken, we could pass this kind of data
-+ around */
-+
-+static int wm8974_codec_probe(struct i2c_adapter *adap, int addr, int kind)
-+{
-+ struct snd_soc_device *socdev = wm8974_socdev;
-+ struct wm8974_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct i2c_client *i2c;
-+ int ret;
-+
-+ if (addr != setup->i2c_address)
-+ return -ENODEV;
-+
-+ client_template.adapter = adap;
-+ client_template.addr = addr;
-+
-+ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (i2c == NULL) {
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+ memcpy(i2c, &client_template, sizeof(struct i2c_client));
-+ i2c_set_clientdata(i2c, codec);
-+ codec->control_data = i2c;
-+
-+ ret = i2c_attach_client(i2c);
-+ if(ret < 0) {
-+ err("failed to attach codec at addr %x\n", addr);
-+ goto err;
-+ }
-+
-+ ret = wm8974_init(socdev);
-+ if(ret < 0) {
-+ err("failed to initialise WM8974\n");
-+ goto err;
-+ }
-+ return ret;
-+
-+err:
-+ kfree(codec);
-+ kfree(i2c);
-+ return ret;
-+}
-+
-+static int wm8974_i2c_detach(struct i2c_client *client)
-+{
-+ struct snd_soc_codec *codec = i2c_get_clientdata(client);
-+ i2c_detach_client(client);
-+ kfree(codec->reg_cache);
-+ kfree(client);
-+ return 0;
-+}
-+
-+static int wm8974_i2c_attach(struct i2c_adapter *adap)
-+{
-+ return i2c_probe(adap, &addr_data, wm8974_codec_probe);
-+}
-+
-+/* corgi i2c codec control layer */
-+static struct i2c_driver wm8974_i2c_driver = {
-+ .driver = {
-+ .name = "WM8974 I2C Codec",
-+ .owner = THIS_MODULE,
-+ },
-+ .id = I2C_DRIVERID_WM8974,
-+ .attach_adapter = wm8974_i2c_attach,
-+ .detach_client = wm8974_i2c_detach,
-+ .command = NULL,
-+};
-+
-+static struct i2c_client client_template = {
-+ .name = "WM8974",
-+ .driver = &wm8974_i2c_driver,
-+};
-+#endif
-+
-+static int wm8974_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct wm8974_setup_data *setup;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+
-+ info("WM8974 Audio Codec %s", WM8974_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ wm8974_socdev = socdev;
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ if (setup->i2c_address) {
-+ normal_i2c[0] = setup->i2c_address;
-+ codec->hw_write = (hw_write_t)i2c_master_send;
-+ ret = i2c_add_driver(&wm8974_i2c_driver);
-+ if (ret != 0)
-+ printk(KERN_ERR "can't add i2c driver");
-+ }
-+#else
-+ /* Add other interfaces here */
-+#endif
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int wm8974_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ wm8974_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ i2c_del_driver(&wm8974_i2c_driver);
-+#endif
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8974 = {
-+ .probe = wm8974_probe,
-+ .remove = wm8974_remove,
-+ .suspend = wm8974_suspend,
-+ .resume = wm8974_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm8974);
-+
-+MODULE_DESCRIPTION("ASoC WM8974 driver");
-+MODULE_AUTHOR("Liam Girdwood");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8974.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8974.h
-@@ -0,0 +1,64 @@
-+/*
-+ * wm8974.h -- WM8974 Soc Audio driver
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef _WM8974_H
-+#define _WM8974_H
-+
-+/* WM8974 register space */
-+
-+#define WM8974_RESET 0x0
-+#define WM8974_POWER1 0x1
-+#define WM8974_POWER2 0x2
-+#define WM8974_POWER3 0x3
-+#define WM8974_IFACE 0x4
-+#define WM8974_COMP 0x5
-+#define WM8974_CLOCK 0x6
-+#define WM8974_ADD 0x7
-+#define WM8974_GPIO 0x8
-+#define WM8974_DAC 0xa
-+#define WM8974_DACVOL 0xb
-+#define WM8974_ADC 0xe
-+#define WM8974_ADCVOL 0xf
-+#define WM8974_EQ1 0x12
-+#define WM8974_EQ2 0x13
-+#define WM8974_EQ3 0x14
-+#define WM8974_EQ4 0x15
-+#define WM8974_EQ5 0x16
-+#define WM8974_DACLIM1 0x18
-+#define WM8974_DACLIM2 0x19
-+#define WM8974_NOTCH1 0x1b
-+#define WM8974_NOTCH2 0x1c
-+#define WM8974_NOTCH3 0x1d
-+#define WM8974_NOTCH4 0x1e
-+#define WM8974_ALC1 0x20
-+#define WM8974_ALC2 0x21
-+#define WM8974_ALC3 0x22
-+#define WM8974_NGATE 0x23
-+#define WM8974_PLLN 0x24
-+#define WM8974_PLLK1 0x25
-+#define WM8974_PLLK2 0x26
-+#define WM8974_PLLK3 0x27
-+#define WM8974_ATTEN 0x28
-+#define WM8974_INPUT 0x2c
-+#define WM8974_INPPGA 0x2d
-+#define WM8974_ADCBOOST 0x2f
-+#define WM8974_OUTPUT 0x31
-+#define WM8974_SPKMIX 0x32
-+#define WM8974_SPKVOL 0x36
-+#define WM8974_MONOMIX 0x38
-+
-+#define WM8974_CACHEREGNUM 57
-+
-+struct wm8974_setup_data {
-+ unsigned short i2c_address;
-+};
-+
-+extern struct snd_soc_codec_dai wm8974_dai;
-+extern struct snd_soc_codec_device soc_codec_dev_wm8974;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm9712.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm9712.c
-@@ -0,0 +1,781 @@
-+/*
-+ * wm9712.c -- ALSA Soc WM9712 codec support
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 4th Feb 2006 Initial version.
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/ac97_codec.h>
-+#include <sound/initval.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#define WM9712_VERSION "0.4"
-+
-+static unsigned int ac97_read(struct snd_soc_codec *codec,
-+ unsigned int reg);
-+static int ac97_write(struct snd_soc_codec *codec,
-+ unsigned int reg, unsigned int val);
-+
-+#define AC97_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define AC97_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000)
-+
-+/* may need to expand this */
-+static struct snd_soc_dai_mode ac97_modes[] = {
-+ {
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S18_3LE,
-+ .pcmrate = AC97_RATES,
-+ .pcmdir = AC97_DIR,
-+ },
-+};
-+
-+/*
-+ * WM9712 register cache
-+ */
-+static const u16 wm9712_reg[] = {
-+ 0x6174, 0x8000, 0x8000, 0x8000, // 6
-+ 0xf0f0, 0xaaa0, 0xc008, 0x6808, // e
-+ 0xe808, 0xaaa0, 0xad00, 0x8000, // 16
-+ 0xe808, 0x3000, 0x8000, 0x0000, // 1e
-+ 0x0000, 0x0000, 0x0000, 0x000f, // 26
-+ 0x0405, 0x0410, 0xbb80, 0xbb80, // 2e
-+ 0x0000, 0xbb80, 0x0000, 0x0000, // 36
-+ 0x0000, 0x2000, 0x0000, 0x0000, // 3e
-+ 0x0000, 0x0000, 0x0000, 0x0000, // 46
-+ 0x0000, 0x0000, 0xf83e, 0xffff, // 4e
-+ 0x0000, 0x0000, 0x0000, 0xf83e, // 56
-+ 0x0008, 0x0000, 0x0000, 0x0000, // 5e
-+ 0xb032, 0x3e00, 0x0000, 0x0000, // 66
-+ 0x0000, 0x0000, 0x0000, 0x0000, // 6e
-+ 0x0000, 0x0000, 0x0000, 0x0006, // 76
-+ 0x0001, 0x0000, 0x574d, 0x4c12, // 7e
-+ 0x0000, 0x0000 // virtual hp mixers
-+};
-+
-+/* virtual HP mixers regs */
-+#define HPL_MIXER 0x80
-+#define HPR_MIXER 0x82
-+
-+static const char *wm9712_alc_select[] = {"None", "Left", "Right", "Stereo"};
-+static const char *wm9712_alc_mux[] = {"Stereo", "Left", "Right", "None"};
-+static const char *wm9712_out3_src[] = {"Left", "VREF", "Left + Right",
-+ "Mono"};
-+static const char *wm9712_spk_src[] = {"Speaker Mix", "Headphone Mix"};
-+static const char *wm9712_rec_adc[] = {"Stereo", "Left", "Right", "Mute"};
-+static const char *wm9712_base[] = {"Linear Control", "Adaptive Boost"};
-+static const char *wm9712_rec_gain[] = {"+1.5dB Steps", "+0.75dB Steps"};
-+static const char *wm9712_mic[] = {"Mic 1", "Differential", "Mic 2",
-+ "Stereo"};
-+static const char *wm9712_rec_sel[] = {"Mic", "NC", "NC", "Speaker Mixer",
-+ "Line", "Headphone Mixer", "Phone Mixer", "Phone"};
-+static const char *wm9712_ng_type[] = {"Constant Gain", "Mute"};
-+static const char *wm9712_diff_sel[] = {"Mic", "Line"};
-+
-+static const struct soc_enum wm9712_enum[] = {
-+SOC_ENUM_SINGLE(AC97_PCI_SVID, 14, 4, wm9712_alc_select),
-+SOC_ENUM_SINGLE(AC97_VIDEO, 12, 4, wm9712_alc_mux),
-+SOC_ENUM_SINGLE(AC97_AUX, 9, 4, wm9712_out3_src),
-+SOC_ENUM_SINGLE(AC97_AUX, 8, 2, wm9712_spk_src),
-+SOC_ENUM_SINGLE(AC97_REC_SEL, 12, 4, wm9712_rec_adc),
-+SOC_ENUM_SINGLE(AC97_MASTER_TONE, 15, 2, wm9712_base),
-+SOC_ENUM_DOUBLE(AC97_REC_GAIN, 14, 6, 2, wm9712_rec_gain),
-+SOC_ENUM_SINGLE(AC97_MIC, 5, 4, wm9712_mic),
-+SOC_ENUM_SINGLE(AC97_REC_SEL, 8, 8, wm9712_rec_sel),
-+SOC_ENUM_SINGLE(AC97_REC_SEL, 0, 8, wm9712_rec_sel),
-+SOC_ENUM_SINGLE(AC97_PCI_SVID, 5, 2, wm9712_ng_type),
-+SOC_ENUM_SINGLE(0x5c, 8, 2, wm9712_diff_sel),
-+};
-+
-+static const struct snd_kcontrol_new wm9712_snd_ac97_controls[] = {
-+SOC_DOUBLE("Speaker Playback Volume", AC97_MASTER, 8, 0, 31, 1),
-+SOC_SINGLE("Speaker Playback Switch", AC97_MASTER, 15, 1, 1),
-+SOC_DOUBLE("Headphone Playback Volume", AC97_HEADPHONE, 8, 0, 31, 1),
-+SOC_SINGLE("Headphone Playback Switch", AC97_HEADPHONE,15, 1, 1),
-+
-+SOC_SINGLE("Speaker Playback ZC Switch", AC97_MASTER, 7, 1, 0),
-+SOC_SINGLE("Speaker Playback Invert Switch", AC97_MASTER, 6, 1, 0),
-+SOC_SINGLE("Headphone Playback ZC Switch", AC97_HEADPHONE, 7, 1, 0),
-+SOC_SINGLE("Mono Playback ZC Switch", AC97_MASTER_MONO, 7, 1, 0),
-+SOC_SINGLE("Mono Playback Volume", AC97_MASTER_MONO, 0, 31, 0),
-+
-+SOC_SINGLE("ALC Target Volume", AC97_CODEC_CLASS_REV, 12, 15, 0),
-+SOC_SINGLE("ALC Hold Time", AC97_CODEC_CLASS_REV, 8, 15, 0),
-+SOC_SINGLE("ALC Decay Time", AC97_CODEC_CLASS_REV, 4, 15, 0),
-+SOC_SINGLE("ALC Attack Time", AC97_CODEC_CLASS_REV, 0, 15, 0),
-+SOC_ENUM("ALC Function", wm9712_enum[0]),
-+SOC_SINGLE("ALC Max Volume", AC97_PCI_SVID, 11, 7, 0),
-+SOC_SINGLE("ALC ZC Timeout", AC97_PCI_SVID, 9, 3, 1),
-+SOC_SINGLE("ALC ZC Switch", AC97_PCI_SVID, 8, 1, 0),
-+SOC_SINGLE("ALC NG Switch", AC97_PCI_SVID, 7, 1, 0),
-+SOC_ENUM("ALC NG Type", wm9712_enum[10]),
-+SOC_SINGLE("ALC NG Threshold", AC97_PCI_SVID, 0, 31, 1),
-+
-+SOC_SINGLE("Mic Headphone Volume", AC97_VIDEO, 12, 7, 1),
-+SOC_SINGLE("ALC Headphone Volume", AC97_VIDEO, 7, 7, 1),
-+
-+SOC_SINGLE("Out3 Switch", AC97_AUX, 15, 1, 1),
-+SOC_SINGLE("Out3 ZC Switch", AC97_AUX, 7, 1, 1),
-+SOC_SINGLE("Out3 Volume", AC97_AUX, 0, 31, 1),
-+
-+SOC_SINGLE("PCBeep Bypass Headphone Volume", AC97_PC_BEEP, 12, 7, 1),
-+SOC_SINGLE("PCBeep Bypass Speaker Volume", AC97_PC_BEEP, 8, 7, 1),
-+SOC_SINGLE("PCBeep Bypass Phone Volume", AC97_PC_BEEP, 4, 7, 1),
-+
-+SOC_SINGLE("Aux Playback Headphone Volume", AC97_CD, 12, 7, 1),
-+SOC_SINGLE("Aux Playback Speaker Volume", AC97_CD, 8, 7, 1),
-+SOC_SINGLE("Aux Playback Phone Volume", AC97_CD, 4, 7, 1),
-+
-+SOC_SINGLE("Phone Volume", AC97_PHONE, 0, 15, 0),
-+SOC_DOUBLE("Line Capture Volume", AC97_LINE, 8, 0, 31, 1),
-+
-+SOC_SINGLE("Capture 20dB Boost Switch", AC97_REC_SEL, 14, 1, 0),
-+SOC_SINGLE("Capture to Phone 20dB Boost Switch", AC97_REC_SEL, 11, 1, 1),
-+
-+SOC_SINGLE("3D Upper Cut-off Switch", AC97_3D_CONTROL, 5, 1, 1),
-+SOC_SINGLE("3D Lower Cut-off Switch", AC97_3D_CONTROL, 4, 1, 1),
-+SOC_SINGLE("3D Playback Volume", AC97_3D_CONTROL, 0, 15, 0),
-+
-+SOC_ENUM("Bass Control", wm9712_enum[5]),
-+SOC_SINGLE("Bass Cut-off Switch", AC97_MASTER_TONE, 12, 1, 1),
-+SOC_SINGLE("Tone Cut-off Switch", AC97_MASTER_TONE, 4, 1, 1),
-+SOC_SINGLE("Playback Attenuate (-6dB) Switch", AC97_MASTER_TONE, 6, 1, 0),
-+SOC_SINGLE("Bass Volume", AC97_MASTER_TONE, 8, 15, 0),
-+SOC_SINGLE("Treble Volume", AC97_MASTER_TONE, 0, 15, 0),
-+
-+SOC_SINGLE("Capture ADC Switch", AC97_REC_GAIN, 15, 1, 1),
-+SOC_ENUM("Capture Volume Steps", wm9712_enum[6]),
-+SOC_DOUBLE("Capture Volume", AC97_REC_GAIN, 8, 0, 63, 1),
-+SOC_SINGLE("Capture ZC Switch", AC97_REC_GAIN, 7, 1, 0),
-+
-+SOC_SINGLE("Mic 1 Volume", AC97_MIC, 8, 31, 1),
-+SOC_SINGLE("Mic 2 Volume", AC97_MIC, 0, 31, 1),
-+SOC_SINGLE("Mic 20dB Boost Switch", AC97_MIC, 7, 1, 0),
-+};
-+
-+/* add non dapm controls */
-+static int wm9712_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm9712_snd_ac97_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm9712_snd_ac97_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+ return 0;
-+}
-+
-+/* We have to create a fake left and right HP mixers because
-+ * the codec only has a single control that is shared by both channels.
-+ * This makes it impossible to determine the audio path.
-+ */
-+static int mixer_event (struct snd_soc_dapm_widget *w, int event)
-+{
-+ u16 l, r, beep, line, phone, mic, pcm, aux;
-+
-+ l = ac97_read(w->codec, HPL_MIXER);
-+ r = ac97_read(w->codec, HPR_MIXER);
-+ beep = ac97_read(w->codec, AC97_PC_BEEP);
-+ mic = ac97_read(w->codec, AC97_VIDEO);
-+ phone = ac97_read(w->codec, AC97_PHONE);
-+ line = ac97_read(w->codec, AC97_LINE);
-+ pcm = ac97_read(w->codec, AC97_PCM);
-+ aux = ac97_read(w->codec, AC97_CD);
-+
-+ if (l & 0x1 || r & 0x1)
-+ ac97_write(w->codec, AC97_VIDEO, mic & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_VIDEO, mic | 0x8000);
-+
-+ if (l & 0x2 || r & 0x2)
-+ ac97_write(w->codec, AC97_PCM, pcm & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_PCM, pcm | 0x8000);
-+
-+ if (l & 0x4 || r & 0x4)
-+ ac97_write(w->codec, AC97_LINE, line & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_LINE, line | 0x8000);
-+
-+ if (l & 0x8 || r & 0x8)
-+ ac97_write(w->codec, AC97_PHONE, phone & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_PHONE, phone | 0x8000);
-+
-+ if (l & 0x10 || r & 0x10)
-+ ac97_write(w->codec, AC97_CD, aux & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_CD, aux | 0x8000);
-+
-+ if (l & 0x20 || r & 0x20)
-+ ac97_write(w->codec, AC97_PC_BEEP, beep & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_PC_BEEP, beep | 0x8000);
-+
-+ return 0;
-+}
-+
-+/* Left Headphone Mixers */
-+static const struct snd_kcontrol_new wm9712_hpl_mixer_controls[] = {
-+ SOC_DAPM_SINGLE("PCBeep Bypass Switch", HPL_MIXER, 5, 1, 0),
-+ SOC_DAPM_SINGLE("Aux Playback Switch", HPL_MIXER, 4, 1, 0),
-+ SOC_DAPM_SINGLE("Phone Bypass Switch", HPL_MIXER, 3, 1, 0),
-+ SOC_DAPM_SINGLE("Line Bypass Switch", HPL_MIXER, 2, 1, 0),
-+ SOC_DAPM_SINGLE("PCM Playback Switch", HPL_MIXER, 1, 1, 0),
-+ SOC_DAPM_SINGLE("Mic Sidetone Switch", HPL_MIXER, 0, 1, 0),
-+};
-+
-+/* Right Headphone Mixers */
-+static const struct snd_kcontrol_new wm9712_hpr_mixer_controls[] = {
-+ SOC_DAPM_SINGLE("PCBeep Bypass Switch", HPR_MIXER, 5, 1, 0),
-+ SOC_DAPM_SINGLE("Aux Playback Switch", HPR_MIXER, 4, 1, 0),
-+ SOC_DAPM_SINGLE("Phone Bypass Switch", HPR_MIXER, 3, 1, 0),
-+ SOC_DAPM_SINGLE("Line Bypass Switch", HPR_MIXER, 2, 1, 0),
-+ SOC_DAPM_SINGLE("PCM Playback Switch", HPR_MIXER, 1, 1, 0),
-+ SOC_DAPM_SINGLE("Mic Sidetone Switch", HPR_MIXER, 0, 1, 0),
-+};
-+
-+/* Speaker Mixer */
-+static const struct snd_kcontrol_new wm9712_speaker_mixer_controls[] = {
-+ SOC_DAPM_SINGLE("PCBeep Bypass Switch", AC97_PC_BEEP, 11, 1, 1),
-+ SOC_DAPM_SINGLE("Aux Playback Switch", AC97_CD, 11, 1, 1),
-+ SOC_DAPM_SINGLE("Phone Bypass Switch", AC97_PHONE, 14, 1, 1),
-+ SOC_DAPM_SINGLE("Line Bypass Switch", AC97_LINE, 14, 1, 1),
-+ SOC_DAPM_SINGLE("PCM Playback Switch", AC97_PCM, 14, 1, 1),
-+};
-+
-+/* Phone Mixer */
-+static const struct snd_kcontrol_new wm9712_phone_mixer_controls[] = {
-+ SOC_DAPM_SINGLE("PCBeep Bypass Switch", AC97_PC_BEEP, 7, 1, 1),
-+ SOC_DAPM_SINGLE("Aux Playback Switch", AC97_CD, 7, 1, 1),
-+ SOC_DAPM_SINGLE("Line Bypass Switch", AC97_LINE, 13, 1, 1),
-+ SOC_DAPM_SINGLE("PCM Playback Switch", AC97_PCM, 13, 1, 1),
-+ SOC_DAPM_SINGLE("Mic 1 Sidetone Switch", AC97_MIC, 14, 1, 1),
-+ SOC_DAPM_SINGLE("Mic 2 Sidetone Switch", AC97_MIC, 13, 1, 1),
-+};
-+
-+/* ALC headphone mux */
-+static const struct snd_kcontrol_new wm9712_alc_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9712_enum[1]);
-+
-+/* out 3 mux */
-+static const struct snd_kcontrol_new wm9712_out3_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9712_enum[2]);
-+
-+/* spk mux */
-+static const struct snd_kcontrol_new wm9712_spk_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9712_enum[3]);
-+
-+/* Capture to Phone mux */
-+static const struct snd_kcontrol_new wm9712_capture_phone_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9712_enum[4]);
-+
-+/* Capture left select */
-+static const struct snd_kcontrol_new wm9712_capture_selectl_controls =
-+SOC_DAPM_ENUM("Route", wm9712_enum[8]);
-+
-+/* Capture right select */
-+static const struct snd_kcontrol_new wm9712_capture_selectr_controls =
-+SOC_DAPM_ENUM("Route", wm9712_enum[9]);
-+
-+/* Mic select */
-+static const struct snd_kcontrol_new wm9712_mic_src_controls =
-+SOC_DAPM_ENUM("Route", wm9712_enum[7]);
-+
-+/* diff select */
-+static const struct snd_kcontrol_new wm9712_diff_sel_controls =
-+SOC_DAPM_ENUM("Route", wm9712_enum[11]);
-+
-+static const struct snd_soc_dapm_widget wm9712_dapm_widgets[] = {
-+SND_SOC_DAPM_MUX("ALC Sidetone Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9712_alc_mux_controls),
-+SND_SOC_DAPM_MUX("Out3 Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9712_out3_mux_controls),
-+SND_SOC_DAPM_MUX("Speaker Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9712_spk_mux_controls),
-+SND_SOC_DAPM_MUX("Capture Phone Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9712_capture_phone_mux_controls),
-+SND_SOC_DAPM_MUX("Left Capture Select", SND_SOC_NOPM, 0, 0,
-+ &wm9712_capture_selectl_controls),
-+SND_SOC_DAPM_MUX("Right Capture Select", SND_SOC_NOPM, 0, 0,
-+ &wm9712_capture_selectr_controls),
-+SND_SOC_DAPM_MUX("Mic Select Source", SND_SOC_NOPM, 0, 0,
-+ &wm9712_mic_src_controls),
-+SND_SOC_DAPM_MUX("Differential Source", SND_SOC_NOPM, 0, 0,
-+ &wm9712_diff_sel_controls),
-+SND_SOC_DAPM_MIXER("AC97 Mixer", SND_SOC_NOPM, 0, 0, NULL, 0),
-+SND_SOC_DAPM_MIXER_E("Left HP Mixer", AC97_INT_PAGING, 9, 1,
-+ &wm9712_hpl_mixer_controls[0], ARRAY_SIZE(wm9712_hpl_mixer_controls),
-+ mixer_event, SND_SOC_DAPM_POST_REG),
-+SND_SOC_DAPM_MIXER_E("Right HP Mixer", AC97_INT_PAGING, 8, 1,
-+ &wm9712_hpr_mixer_controls[0], ARRAY_SIZE(wm9712_hpr_mixer_controls),
-+ mixer_event, SND_SOC_DAPM_POST_REG),
-+SND_SOC_DAPM_MIXER("Phone Mixer", AC97_INT_PAGING, 6, 1,
-+ &wm9712_phone_mixer_controls[0], ARRAY_SIZE(wm9712_phone_mixer_controls)),
-+SND_SOC_DAPM_MIXER("Speaker Mixer", AC97_INT_PAGING, 7, 1,
-+ &wm9712_speaker_mixer_controls[0],
-+ ARRAY_SIZE(wm9712_speaker_mixer_controls)),
-+SND_SOC_DAPM_MIXER("Mono Mixer", SND_SOC_NOPM, 0, 0, NULL, 0),
-+SND_SOC_DAPM_DAC("Left DAC", "Left HiFi Playback", AC97_INT_PAGING, 14, 1),
-+SND_SOC_DAPM_DAC("Right DAC", "Right HiFi Playback", AC97_INT_PAGING, 13, 1),
-+SND_SOC_DAPM_DAC("Aux DAC", "Aux Playback", SND_SOC_NOPM, 0, 0),
-+SND_SOC_DAPM_ADC("Left ADC", "Left HiFi Capture", AC97_INT_PAGING, 12, 1),
-+SND_SOC_DAPM_ADC("Right ADC", "Right HiFi Capture", AC97_INT_PAGING, 11, 1),
-+SND_SOC_DAPM_PGA("Headphone PGA", AC97_INT_PAGING, 4, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Speaker PGA", AC97_INT_PAGING, 3, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Out 3 PGA", AC97_INT_PAGING, 5, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Line PGA", AC97_INT_PAGING, 2, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Phone PGA", AC97_INT_PAGING, 1, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Mic PGA", AC97_INT_PAGING, 0, 1, NULL, 0),
-+SND_SOC_DAPM_MICBIAS("Mic Bias", AC97_INT_PAGING, 10, 1),
-+SND_SOC_DAPM_OUTPUT("MONOOUT"),
-+SND_SOC_DAPM_OUTPUT("HPOUTL"),
-+SND_SOC_DAPM_OUTPUT("HPOUTR"),
-+SND_SOC_DAPM_OUTPUT("LOUT2"),
-+SND_SOC_DAPM_OUTPUT("ROUT2"),
-+SND_SOC_DAPM_OUTPUT("OUT3"),
-+SND_SOC_DAPM_INPUT("LINEINL"),
-+SND_SOC_DAPM_INPUT("LINEINR"),
-+SND_SOC_DAPM_INPUT("PHONE"),
-+SND_SOC_DAPM_INPUT("PCBEEP"),
-+SND_SOC_DAPM_INPUT("MIC1"),
-+SND_SOC_DAPM_INPUT("MIC2"),
-+};
-+
-+static const char *audio_map[][3] = {
-+ /* virtual mixer - mixes left & right channels for spk and mono */
-+ {"AC97 Mixer", NULL, "Left DAC"},
-+ {"AC97 Mixer", NULL, "Right DAC"},
-+
-+ /* Left HP mixer */
-+ {"Left HP Mixer", "PCBeep Bypass Switch", "PCBEEP"},
-+ {"Left HP Mixer", "Aux Playback Switch", "Aux DAC"},
-+ {"Left HP Mixer", "Phone Bypass Switch", "Phone PGA"},
-+ {"Left HP Mixer", "Line Bypass Switch", "Line PGA"},
-+ {"Left HP Mixer", "PCM Playback Switch", "Left DAC"},
-+ {"Left HP Mixer", "Mic Sidetone Switch", "Mic PGA"},
-+ {"Left HP Mixer", NULL, "ALC Sidetone Mux"},
-+ //{"Right HP Mixer", NULL, "HP Mixer"},
-+
-+ /* Right HP mixer */
-+ {"Right HP Mixer", "PCBeep Bypass Switch", "PCBEEP"},
-+ {"Right HP Mixer", "Aux Playback Switch", "Aux DAC"},
-+ {"Right HP Mixer", "Phone Bypass Switch", "Phone PGA"},
-+ {"Right HP Mixer", "Line Bypass Switch", "Line PGA"},
-+ {"Right HP Mixer", "PCM Playback Switch", "Right DAC"},
-+ {"Right HP Mixer", "Mic Sidetone Switch", "Mic PGA"},
-+ {"Right HP Mixer", NULL, "ALC Sidetone Mux"},
-+
-+ /* speaker mixer */
-+ {"Speaker Mixer", "PCBeep Bypass Switch", "PCBEEP"},
-+ {"Speaker Mixer", "Line Bypass Switch", "Line PGA"},
-+ {"Speaker Mixer", "PCM Playback Switch", "AC97 Mixer"},
-+ {"Speaker Mixer", "Phone Bypass Switch", "Phone PGA"},
-+ {"Speaker Mixer", "Aux Playback Switch", "Aux DAC"},
-+
-+ /* Phone mixer */
-+ {"Phone Mixer", "PCBeep Bypass Switch", "PCBEEP"},
-+ {"Phone Mixer", "Line Bypass Switch", "Line PGA"},
-+ {"Phone Mixer", "Aux Playback Switch", "Aux DAC"},
-+ {"Phone Mixer", "PCM Playback Switch", "AC97 Mixer"},
-+ {"Phone Mixer", "Mic 1 Sidetone Switch", "Mic PGA"},
-+ {"Phone Mixer", "Mic 2 Sidetone Switch", "Mic PGA"},
-+
-+ /* inputs */
-+ {"Line PGA", NULL, "LINEINL"},
-+ {"Line PGA", NULL, "LINEINR"},
-+ {"Phone PGA", NULL, "PHONE"},
-+ {"Mic PGA", NULL, "MIC1"},
-+ {"Mic PGA", NULL, "MIC2"},
-+
-+ /* left capture selector */
-+ {"Left Capture Select", "Mic", "MIC1"},
-+ {"Left Capture Select", "Speaker Mixer", "Speaker Mixer"},
-+ {"Left Capture Select", "Line", "LINEINL"},
-+ {"Left Capture Select", "Headphone Mixer", "Left HP Mixer"},
-+ {"Left Capture Select", "Phone Mixer", "Phone Mixer"},
-+ {"Left Capture Select", "Phone", "PHONE"},
-+
-+ /* right capture selector */
-+ {"Right Capture Select", "Mic", "MIC2"},
-+ {"Right Capture Select", "Speaker Mixer", "Speaker Mixer"},
-+ {"Right Capture Select", "Line", "LINEINR"},
-+ {"Right Capture Select", "Headphone Mixer", "Right HP Mixer"},
-+ {"Right Capture Select", "Phone Mixer", "Phone Mixer"},
-+ {"Right Capture Select", "Phone", "PHONE"},
-+
-+ /* ALC Sidetone */
-+ {"ALC Sidetone Mux", "Stereo", "Left Capture Select"},
-+ {"ALC Sidetone Mux", "Stereo", "Right Capture Select"},
-+ {"ALC Sidetone Mux", "Left", "Left Capture Select"},
-+ {"ALC Sidetone Mux", "Right", "Right Capture Select"},
-+
-+ /* ADC's */
-+ {"Left ADC", NULL, "Left Capture Select"},
-+ {"Right ADC", NULL, "Right Capture Select"},
-+
-+ /* outputs */
-+ {"MONOOUT", NULL, "Phone Mixer"},
-+ {"HPOUTL", NULL, "Headphone PGA"},
-+ {"Headphone PGA", NULL, "Left HP Mixer"},
-+ {"HPOUTR", NULL, "Headphone PGA"},
-+ {"Headphone PGA", NULL, "Right HP Mixer"},
-+
-+ /* mono hp mixer */
-+ {"Mono HP Mixer", NULL, "Left HP Mixer"},
-+ {"Mono HP Mixer", NULL, "Right HP Mixer"},
-+
-+ /* Out3 Mux */
-+ {"Out3 Mux", "Left", "Left HP Mixer"},
-+ {"Out3 Mux", "Mono", "Phone Mixer"},
-+ {"Out3 Mux", "Left + Right", "Mono HP Mixer"},
-+ {"Out 3 PGA", NULL, "Out3 Mux"},
-+ {"OUT3", NULL, "Out 3 PGA"},
-+
-+ /* speaker Mux */
-+ {"Speaker Mux", "Speaker Mix", "Speaker Mixer"},
-+ {"Speaker Mux", "Headphone Mix", "Mono HP Mixer"},
-+ {"Speaker PGA", NULL, "Speaker Mux"},
-+ {"LOUT2", NULL, "Speaker PGA"},
-+ {"ROUT2", NULL, "Speaker PGA"},
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+static int wm9712_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(wm9712_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm9712_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path audio_mapnects */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+static unsigned int ac97_read(struct snd_soc_codec *codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+
-+ if (reg == AC97_RESET || reg == AC97_GPIO_STATUS ||
-+ reg == AC97_VENDOR_ID1 || reg == AC97_VENDOR_ID2 ||
-+ reg == AC97_REC_GAIN)
-+ return soc_ac97_ops.read(codec->ac97, reg);
-+ else {
-+ reg = reg >> 1;
-+
-+ if (reg > (ARRAY_SIZE(wm9712_reg)))
-+ return -EIO;
-+
-+ return cache[reg];
-+ }
-+}
-+
-+static int ac97_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int val)
-+{
-+ u16 *cache = codec->reg_cache;
-+
-+ soc_ac97_ops.write(codec->ac97, reg, val);
-+ reg = reg >> 1;
-+ if (reg <= (ARRAY_SIZE(wm9712_reg)))
-+ cache[reg] = val;
-+
-+ return 0;
-+}
-+
-+static int ac97_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int reg;
-+ u16 vra;
-+
-+ vra = ac97_read(codec, AC97_EXTENDED_STATUS);
-+ ac97_write(codec, AC97_EXTENDED_STATUS, vra | 0x1);
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ reg = AC97_PCM_FRONT_DAC_RATE;
-+ else
-+ reg = AC97_PCM_LR_ADC_RATE;
-+
-+ return ac97_write(codec, reg, runtime->rate);
-+}
-+
-+static int ac97_aux_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 vra, xsle;
-+
-+ vra = ac97_read(codec, AC97_EXTENDED_STATUS);
-+ ac97_write(codec, AC97_EXTENDED_STATUS, vra | 0x1);
-+ xsle = ac97_read(codec, AC97_PCI_SID);
-+ ac97_write(codec, AC97_PCI_SID, xsle | 0x8000);
-+
-+ if (substream->stream != SNDRV_PCM_STREAM_PLAYBACK)
-+ return -ENODEV;
-+
-+ return ac97_write(codec, AC97_PCM_SURR_DAC_RATE, runtime->rate);
-+}
-+
-+struct snd_soc_codec_dai wm9712_dai[] = {
-+{
-+ .name = "AC97 HiFi",
-+ .playback = {
-+ .stream_name = "HiFi Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .stream_name = "HiFi Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .prepare = ac97_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(ac97_modes),
-+ .mode = ac97_modes,},
-+ },
-+ {
-+ .name = "AC97 Aux",
-+ .playback = {
-+ .stream_name = "Aux Playback",
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .ops = {
-+ .prepare = ac97_aux_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(ac97_modes),
-+ .mode = ac97_modes,},
-+ },
-+};
-+EXPORT_SYMBOL_GPL(wm9712_dai);
-+
-+static int wm9712_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ u16 reg;
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* liam - maybe enable thermal shutdown */
-+ reg = ac97_read(codec, AC97_EXTENDED_MID) & 0xdfff;
-+ ac97_write(codec, AC97_EXTENDED_MID, reg);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* enable master bias and vmid */
-+ reg = ac97_read(codec, AC97_EXTENDED_MID) & 0xbbff;
-+ ac97_write(codec, AC97_EXTENDED_MID, reg);
-+ ac97_write(codec, AC97_POWERDOWN, 0x0000);
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ /* disable everything including AC link */
-+ ac97_write(codec, AC97_EXTENDED_MID, 0xffff);
-+ ac97_write(codec, AC97_EXTENDED_MSTATUS, 0xffff);
-+ ac97_write(codec, AC97_POWERDOWN, 0xffff);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+static int wm9712_reset(struct snd_soc_codec *codec, int try_warm)
-+{
-+ if (try_warm && soc_ac97_ops.warm_reset) {
-+ soc_ac97_ops.warm_reset(codec->ac97);
-+ if (!(ac97_read(codec, 0) & 0x8000))
-+ return 1;
-+ }
-+
-+ soc_ac97_ops.reset(codec->ac97);
-+ if (ac97_read(codec, 0) & 0x8000)
-+ goto err;
-+ return 0;
-+
-+err:
-+ printk(KERN_ERR "WM9712 AC97 reset failed\n");
-+ return -EIO;
-+}
-+
-+static int wm9712_soc_suspend(struct platform_device *pdev,
-+ pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ wm9712_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm9712_soc_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i, ret;
-+ u16 *cache = codec->reg_cache;
-+
-+ ret = wm9712_reset(codec, 1);
-+ if (ret < 0){
-+ printk(KERN_ERR "could not reset AC97 codec\n");
-+ return ret;
-+ }
-+
-+ wm9712_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+
-+ if (ret == 0) {
-+ /* Sync reg_cache with the hardware after cold reset */
-+ for (i = 2; i < ARRAY_SIZE(wm9712_reg) << 1; i+=2) {
-+ if (i == AC97_INT_PAGING || i == AC97_POWERDOWN ||
-+ (i > 0x58 && i != 0x5c))
-+ continue;
-+ soc_ac97_ops.write(codec->ac97, i, cache[i>>1]);
-+ }
-+ }
-+
-+ if (codec->suspend_dapm_state == SNDRV_CTL_POWER_D0)
-+ wm9712_dapm_event(codec, SNDRV_CTL_POWER_D0);
-+
-+ return ret;
-+}
-+
-+static int wm9712_soc_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+
-+ printk(KERN_INFO "WM9711/WM9712 SoC Audio Codec %s\n", WM9712_VERSION);
-+
-+ socdev->codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (socdev->codec == NULL)
-+ return -ENOMEM;
-+ codec = socdev->codec;
-+ mutex_init(&codec->mutex);
-+
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm9712_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL) {
-+ kfree(codec->ac97);
-+ kfree(socdev->codec);
-+ socdev->codec = NULL;
-+ return -ENOMEM;
-+ }
-+ memcpy(codec->reg_cache, wm9712_reg, sizeof(u16) * ARRAY_SIZE(wm9712_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm9712_reg);
-+ codec->reg_cache_step = 2;
-+
-+ codec->name = "WM9712";
-+ codec->owner = THIS_MODULE;
-+ codec->dai = wm9712_dai;
-+ codec->num_dai = ARRAY_SIZE(wm9712_dai);
-+ codec->write = ac97_write;
-+ codec->read = ac97_read;
-+ codec->dapm_event = wm9712_dapm_event;
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ ret = snd_soc_new_ac97_codec(codec, &soc_ac97_ops, 0);
-+ if (ret < 0)
-+ goto err;
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if (ret < 0)
-+ goto pcm_err;
-+
-+ ret = wm9712_reset(codec, 0);
-+ if (ret < 0) {
-+ printk(KERN_ERR "AC97 link error\n");
-+ goto reset_err;
-+ }
-+
-+ /* set alc mux to none */
-+ ac97_write(codec, AC97_VIDEO, ac97_read(codec, AC97_VIDEO) | 0x3000);
-+
-+ wm9712_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm9712_add_controls(codec);
-+ wm9712_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0)
-+ goto reset_err;
-+
-+ return 0;
-+
-+reset_err:
-+ snd_soc_free_pcms(socdev);
-+
-+pcm_err:
-+ snd_soc_free_ac97_codec(codec);
-+
-+err:
-+ kfree(socdev->codec->reg_cache);
-+ kfree(socdev->codec);
-+ socdev->codec = NULL;
-+ return ret;
-+}
-+
-+static int wm9712_soc_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec == NULL)
-+ return 0;
-+
-+ snd_soc_dapm_free(socdev);
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_free_ac97_codec(codec);
-+ kfree(codec->reg_cache);
-+ kfree(codec);
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm9712 = {
-+ .probe = wm9712_soc_probe,
-+ .remove = wm9712_soc_remove,
-+ .suspend = wm9712_soc_suspend,
-+ .resume = wm9712_soc_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm9712);
-+
-+MODULE_DESCRIPTION("ASoC WM9711/WM9712 driver");
-+MODULE_AUTHOR("Liam Girdwood");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm9712.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm9712.h
-@@ -0,0 +1,14 @@
-+/*
-+ * wm9712.h -- WM9712 Soc Audio driver
-+ */
-+
-+#ifndef _WM9712_H
-+#define _WM9712_H
-+
-+#define WM9712_DAI_AC97_HIFI 0
-+#define WM9712_DAI_AC97_AUX 1
-+
-+extern struct snd_soc_codec_dai wm9712_dai[2];
-+extern struct snd_soc_codec_device soc_codec_dev_wm9712;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm9713.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm9713.c
-@@ -0,0 +1,1313 @@
-+/*
-+ * wm9713.c -- ALSA Soc WM9713 codec support
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 4th Feb 2006 Initial version.
-+ *
-+ * Features:-
-+ *
-+ * o Support for AC97 Codec, Voice DAC and Aux DAC
-+ * o Support for DAPM
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/ac97_codec.h>
-+#include <sound/initval.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#define WM9713_VERSION "0.12"
-+
-+struct wm9713 {
-+ u32 pll; /* current PLL frequency */
-+ u32 pll_resume; /* PLL resume frequency */
-+};
-+
-+static unsigned int ac97_read(struct snd_soc_codec *codec,
-+ unsigned int reg);
-+static int ac97_write(struct snd_soc_codec *codec,
-+ unsigned int reg, unsigned int val);
-+
-+#define AC97_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define AC97_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | \
-+ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | \
-+ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000)
-+
-+/* may need to expand this */
-+static struct snd_soc_dai_mode ac97_modes[] = {
-+ {
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S18_3LE,
-+ .pcmrate = AC97_RATES,
-+ },
-+};
-+
-+#define WM9713_VOICE_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | \
-+ SND_SOC_DAIFMT_RIGHT_J | SND_SOC_DAIFMT_DSP_A | \
-+ SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_NF | \
-+ SND_SOC_DAIFMT_NB_IF | SND_SOC_DAIFMT_IB_NF | \
-+ SND_SOC_DAIFMT_IB_IF)
-+
-+#define WM9713_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define WM9713_VOICE_FSB \
-+ (SND_SOC_FSBD(1) | SND_SOC_FSBD(2) | SND_SOC_FSBD(4) | \
-+ SND_SOC_FSBD(8) | SND_SOC_FSBD(16))
-+
-+#define WM9713_VOICE_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 | \
-+ SNDRV_PCM_RATE_96000)
-+
-+#define WM9713_HIFI_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
-+
-+/*
-+ * Voice modes
-+ */
-+static struct snd_soc_dai_mode wm9713_voice_modes[] = {
-+ /* master modes */
-+ {
-+ .fmt = WM9713_VOICE_DAIFMT | SND_SOC_DAIFMT_CBM_CFM | \
-+ SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = WM9713_HIFI_BITS,
-+ .pcmrate = WM9713_VOICE_RATES,
-+ .pcmdir = WM9713_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = WM9713_VOICE_FSB,
-+ },
-+
-+ /* slave modes */
-+ {
-+ .fmt = WM9713_VOICE_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM9713_HIFI_BITS,
-+ .pcmrate = WM9713_VOICE_RATES,
-+ .pcmdir = WM9713_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+/*
-+ * WM9713 register cache
-+ * Reg 0x3c bit 15 is used by touch driver.
-+ */
-+static const u16 wm9713_reg[] = {
-+ 0x6174, 0x8080, 0x8080, 0x8080, // 6
-+ 0xc880, 0xe808, 0xe808, 0x0808, // e
-+ 0x00da, 0x8000, 0xd600, 0xaaa0, // 16
-+ 0xaaa0, 0xaaa0, 0x0000, 0x0000, // 1e
-+ 0x0f0f, 0x0040, 0x0000, 0x7f00, // 26
-+ 0x0405, 0x0410, 0xbb80, 0xbb80, // 2e
-+ 0x0000, 0xbb80, 0x0000, 0x4523, // 36
-+ 0x0000, 0x2000, 0x7eff, 0xffff, // 3e
-+ 0x0000, 0x0000, 0x0080, 0x0000, // 46
-+ 0x0000, 0x0000, 0xfffe, 0xffff, // 4e
-+ 0x0000, 0x0000, 0x0000, 0xfffe, // 56
-+ 0x4000, 0x0000, 0x0000, 0x0000, // 5e
-+ 0xb032, 0x3e00, 0x0000, 0x0000, // 66
-+ 0x0000, 0x0000, 0x0000, 0x0000, // 6e
-+ 0x0000, 0x0000, 0x0000, 0x0006, // 76
-+ 0x0001, 0x0000, 0x574d, 0x4c13, // 7e
-+ 0x0000, 0x0000, 0x0000 // virtual hp & mic mixers
-+};
-+
-+/* virtual HP mixers regs */
-+#define HPL_MIXER 0x80
-+#define HPR_MIXER 0x82
-+#define MICB_MUX 0x82
-+
-+static const char *wm9713_mic_mixer[] = {"Stereo", "Mic 1", "Mic 2", "Mute"};
-+static const char *wm9713_rec_mux[] = {"Stereo", "Left", "Right", "Mute"};
-+static const char *wm9713_rec_src[] =
-+ {"Mic 1", "Mic 2", "Line", "Mono In", "Headphone", "Speaker",
-+ "Mono Out", "Zh"};
-+static const char *wm9713_rec_gain[] = {"+1.5dB Steps", "+0.75dB Steps"};
-+static const char *wm9713_alc_select[] = {"None", "Left", "Right", "Stereo"};
-+static const char *wm9713_mono_pga[] = {"Vmid", "Zh", "Mono", "Inv",
-+ "Mono Vmid", "Inv Vmid"};
-+static const char *wm9713_spk_pga[] =
-+ {"Vmid", "Zh", "Headphone", "Speaker", "Inv", "Headphone Vmid",
-+ "Speaker Vmid", "Inv Vmid"};
-+static const char *wm9713_hp_pga[] = {"Vmid", "Zh", "Headphone",
-+ "Headphone Vmid"};
-+static const char *wm9713_out3_pga[] = {"Vmid", "Zh", "Inv 1", "Inv 1 Vmid"};
-+static const char *wm9713_out4_pga[] = {"Vmid", "Zh", "Inv 2", "Inv 2 Vmid"};
-+static const char *wm9713_dac_inv[] =
-+ {"Off", "Mono", "Speaker", "Left Headphone", "Right Headphone",
-+ "Headphone Mono", "NC", "Vmid"};
-+static const char *wm9713_bass[] = {"Linear Control", "Adaptive Boost"};
-+static const char *wm9713_ng_type[] = {"Constant Gain", "Mute"};
-+static const char *wm9713_mic_select[] = {"Mic 1", "Mic 2 A", "Mic 2 B"};
-+static const char *wm9713_micb_select[] = {"MPB", "MPA"};
-+
-+static const struct soc_enum wm9713_enum[] = {
-+SOC_ENUM_SINGLE(AC97_LINE, 3, 4, wm9713_mic_mixer), /* record mic mixer 0 */
-+SOC_ENUM_SINGLE(AC97_VIDEO, 14, 4, wm9713_rec_mux), /* record mux hp 1 */
-+SOC_ENUM_SINGLE(AC97_VIDEO, 9, 4, wm9713_rec_mux), /* record mux mono 2 */
-+SOC_ENUM_SINGLE(AC97_VIDEO, 3, 8, wm9713_rec_src), /* record mux left 3 */
-+SOC_ENUM_SINGLE(AC97_VIDEO, 0, 8, wm9713_rec_src), /* record mux right 4*/
-+SOC_ENUM_DOUBLE(AC97_CD, 14, 6, 2, wm9713_rec_gain), /* record step size 5 */
-+SOC_ENUM_SINGLE(AC97_PCI_SVID, 14, 4, wm9713_alc_select), /* alc source select 6*/
-+SOC_ENUM_SINGLE(AC97_REC_GAIN, 14, 4, wm9713_mono_pga), /* mono input select 7 */
-+SOC_ENUM_SINGLE(AC97_REC_GAIN, 11, 8, wm9713_spk_pga), /* speaker left input select 8 */
-+SOC_ENUM_SINGLE(AC97_REC_GAIN, 8, 8, wm9713_spk_pga), /* speaker right input select 9 */
-+SOC_ENUM_SINGLE(AC97_REC_GAIN, 6, 3, wm9713_hp_pga), /* headphone left input 10 */
-+SOC_ENUM_SINGLE(AC97_REC_GAIN, 4, 3, wm9713_hp_pga), /* headphone right input 11 */
-+SOC_ENUM_SINGLE(AC97_REC_GAIN, 2, 4, wm9713_out3_pga), /* out 3 source 12 */
-+SOC_ENUM_SINGLE(AC97_REC_GAIN, 0, 4, wm9713_out4_pga), /* out 4 source 13 */
-+SOC_ENUM_SINGLE(AC97_REC_GAIN_MIC, 13, 8, wm9713_dac_inv), /* dac invert 1 14 */
-+SOC_ENUM_SINGLE(AC97_REC_GAIN_MIC, 10, 8, wm9713_dac_inv), /* dac invert 2 15 */
-+SOC_ENUM_SINGLE(AC97_GENERAL_PURPOSE, 15, 2, wm9713_bass), /* bass control 16 */
-+SOC_ENUM_SINGLE(AC97_PCI_SVID, 5, 2, wm9713_ng_type), /* noise gate type 17 */
-+SOC_ENUM_SINGLE(AC97_3D_CONTROL, 12, 3, wm9713_mic_select), /* mic selection 18 */
-+SOC_ENUM_SINGLE(MICB_MUX, 0, 2, wm9713_micb_select), /* mic selection 19 */
-+};
-+
-+static const struct snd_kcontrol_new wm9713_snd_ac97_controls[] = {
-+SOC_DOUBLE("Speaker Playback Volume", AC97_MASTER, 8, 0, 31, 1),
-+SOC_DOUBLE("Speaker Playback Switch", AC97_MASTER, 15, 7, 1, 1),
-+SOC_DOUBLE("Headphone Playback Volume", AC97_HEADPHONE, 8, 0, 31, 1),
-+SOC_DOUBLE("Headphone Playback Switch", AC97_HEADPHONE,15, 7, 1, 1),
-+SOC_DOUBLE("Line In Volume", AC97_PC_BEEP, 8, 0, 31, 1),
-+SOC_DOUBLE("PCM Playback Volume", AC97_PHONE, 8, 0, 31, 1),
-+SOC_SINGLE("Mic 1 Volume", AC97_MIC, 8, 31, 1),
-+SOC_SINGLE("Mic 2 Volume", AC97_MIC, 0, 31, 1),
-+
-+SOC_SINGLE("Mic Boost (+20dB) Switch", AC97_LINE, 5, 1, 0),
-+SOC_SINGLE("Mic Headphone Mixer Volume", AC97_LINE, 0, 7, 1),
-+
-+SOC_SINGLE("Capture Switch", AC97_CD, 15, 1, 1),
-+SOC_ENUM("Capture Volume Steps", wm9713_enum[5]),
-+SOC_DOUBLE("Capture Volume", AC97_CD, 8, 0, 63, 0),
-+SOC_SINGLE("Capture ZC Switch", AC97_CD, 7, 1, 0),
-+
-+SOC_SINGLE("Capture to Headphone Volume", AC97_VIDEO, 11, 7, 1),
-+SOC_SINGLE("Capture to Mono Boost (+20dB) Switch", AC97_VIDEO, 8, 1, 0),
-+SOC_SINGLE("Capture ADC Boost (+20dB) Switch", AC97_VIDEO, 6, 1, 0),
-+
-+SOC_SINGLE("ALC Target Volume", AC97_CODEC_CLASS_REV, 12, 15, 0),
-+SOC_SINGLE("ALC Hold Time", AC97_CODEC_CLASS_REV, 8, 15, 0),
-+SOC_SINGLE("ALC Decay Time ", AC97_CODEC_CLASS_REV, 4, 15, 0),
-+SOC_SINGLE("ALC Attack Time", AC97_CODEC_CLASS_REV, 0, 15, 0),
-+SOC_ENUM("ALC Function", wm9713_enum[6]),
-+SOC_SINGLE("ALC Max Volume", AC97_PCI_SVID, 11, 7, 0),
-+SOC_SINGLE("ALC ZC Timeout", AC97_PCI_SVID, 9, 3, 0),
-+SOC_SINGLE("ALC ZC Switch", AC97_PCI_SVID, 8, 1, 0),
-+SOC_SINGLE("ALC NG Switch", AC97_PCI_SVID, 7, 1, 0),
-+SOC_ENUM("ALC NG Type", wm9713_enum[17]),
-+SOC_SINGLE("ALC NG Threshold", AC97_PCI_SVID, 0, 31, 0),
-+
-+SOC_DOUBLE("Speaker Playback ZC Switch", AC97_MASTER, 14, 6, 1, 0),
-+SOC_DOUBLE("Headphone Playback ZC Switch", AC97_HEADPHONE, 14, 6, 1, 0),
-+
-+SOC_SINGLE("Out4 Playback Switch", AC97_MASTER_MONO, 15, 1, 1),
-+SOC_SINGLE("Out4 Playback ZC Switch", AC97_MASTER_MONO, 14, 1, 0),
-+SOC_SINGLE("Out4 Playback Volume", AC97_MASTER_MONO, 8, 63, 1),
-+
-+SOC_SINGLE("Out3 Playback Switch", AC97_MASTER_MONO, 7, 1, 1),
-+SOC_SINGLE("Out3 Playback ZC Switch", AC97_MASTER_MONO, 6, 1, 0),
-+SOC_SINGLE("Out3 Playback Volume", AC97_MASTER_MONO, 0, 63, 1),
-+
-+SOC_SINGLE("Mono Capture Volume", AC97_MASTER_TONE, 8, 31, 1),
-+SOC_SINGLE("Mono Playback Switch", AC97_MASTER_TONE, 7, 1, 1),
-+SOC_SINGLE("Mono Playback ZC Switch", AC97_MASTER_TONE, 6, 1, 0),
-+SOC_SINGLE("Mono Playback Volume", AC97_MASTER_TONE, 0, 31, 1),
-+
-+SOC_SINGLE("PC Beep Playback Headphone Volume", AC97_AUX, 12, 7, 1),
-+SOC_SINGLE("PC Beep Playback Speaker Volume", AC97_AUX, 8, 7, 1),
-+SOC_SINGLE("PC Beep Playback Mono Volume", AC97_AUX, 4, 7, 1),
-+
-+SOC_SINGLE("Voice Playback Headphone Volume", AC97_PCM, 12, 7, 1),
-+SOC_SINGLE("Voice Playback Master Volume", AC97_PCM, 8, 7, 1),
-+SOC_SINGLE("Voice Playback Mono Volume", AC97_PCM, 4, 7, 1),
-+
-+SOC_SINGLE("Aux Playback Headphone Volume", AC97_REC_SEL, 12, 7, 1),
-+SOC_SINGLE("Aux Playback Master Volume", AC97_REC_SEL, 8, 7, 1),
-+SOC_SINGLE("Aux Playback Mono Volume", AC97_REC_SEL, 4, 7, 1),
-+
-+SOC_ENUM("Bass Control", wm9713_enum[16]),
-+SOC_SINGLE("Bass Cut-off Switch", AC97_GENERAL_PURPOSE, 12, 1, 1),
-+SOC_SINGLE("Tone Cut-off Switch", AC97_GENERAL_PURPOSE, 4, 1, 1),
-+SOC_SINGLE("Playback Attenuate (-6dB) Switch", AC97_GENERAL_PURPOSE, 6, 1, 0),
-+SOC_SINGLE("Bass Volume", AC97_GENERAL_PURPOSE, 8, 15, 1),
-+SOC_SINGLE("Tone Volume", AC97_GENERAL_PURPOSE, 0, 15, 1),
-+
-+SOC_SINGLE("3D Upper Cut-off Switch", AC97_REC_GAIN_MIC, 5, 1, 0),
-+SOC_SINGLE("3D Lower Cut-off Switch", AC97_REC_GAIN_MIC, 4, 1, 0),
-+SOC_SINGLE("3D Depth", AC97_REC_GAIN_MIC, 0, 15, 1),
-+};
-+
-+/* add non dapm controls */
-+static int wm9713_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm9713_snd_ac97_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm9713_snd_ac97_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+ return 0;
-+}
-+
-+/* We have to create a fake left and right HP mixers because
-+ * the codec only has a single control that is shared by both channels.
-+ * This makes it impossible to determine the audio path using the current
-+ * register map, thus we add a new (virtual) register to help determine the
-+ * audio route within the device.
-+ */
-+static int mixer_event (struct snd_soc_dapm_widget *w, int event)
-+{
-+ u16 l, r, beep, tone, phone, rec, pcm, aux;
-+
-+ l = ac97_read(w->codec, HPL_MIXER);
-+ r = ac97_read(w->codec, HPR_MIXER);
-+ beep = ac97_read(w->codec, AC97_PC_BEEP);
-+ tone = ac97_read(w->codec, AC97_MASTER_TONE);
-+ phone = ac97_read(w->codec, AC97_PHONE);
-+ rec = ac97_read(w->codec, AC97_REC_SEL);
-+ pcm = ac97_read(w->codec, AC97_PCM);
-+ aux = ac97_read(w->codec, AC97_AUX);
-+
-+ if (event & SND_SOC_DAPM_PRE_REG)
-+ return 0;
-+ if (l & 0x1 || r & 0x1)
-+ ac97_write(w->codec, AC97_PC_BEEP, beep & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_PC_BEEP, beep | 0x8000);
-+
-+ if (l & 0x2 || r & 0x2)
-+ ac97_write(w->codec, AC97_MASTER_TONE, tone & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_MASTER_TONE, tone | 0x8000);
-+
-+ if (l & 0x4 || r & 0x4)
-+ ac97_write(w->codec, AC97_PHONE, phone & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_PHONE, phone | 0x8000);
-+
-+ if (l & 0x8 || r & 0x8)
-+ ac97_write(w->codec, AC97_REC_SEL, rec & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_REC_SEL, rec | 0x8000);
-+
-+ if (l & 0x10 || r & 0x10)
-+ ac97_write(w->codec, AC97_PCM, pcm & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_PCM, pcm | 0x8000);
-+
-+ if (l & 0x20 || r & 0x20)
-+ ac97_write(w->codec, AC97_AUX, aux & 0x7fff);
-+ else
-+ ac97_write(w->codec, AC97_AUX, aux | 0x8000);
-+
-+ return 0;
-+}
-+
-+/* Left Headphone Mixers */
-+static const struct snd_kcontrol_new wm9713_hpl_mixer_controls[] = {
-+SOC_DAPM_SINGLE("PC Beep Playback Switch", HPL_MIXER, 5, 1, 0),
-+SOC_DAPM_SINGLE("Voice Playback Switch", HPL_MIXER, 4, 1, 0),
-+SOC_DAPM_SINGLE("Aux Playback Switch", HPL_MIXER, 3, 1, 0),
-+SOC_DAPM_SINGLE("PCM Playback Switch", HPL_MIXER, 2, 1, 0),
-+SOC_DAPM_SINGLE("MonoIn Playback Switch", HPL_MIXER, 1, 1, 0),
-+SOC_DAPM_SINGLE("Bypass Playback Switch", HPL_MIXER, 0, 1, 0),
-+};
-+
-+/* Right Headphone Mixers */
-+static const struct snd_kcontrol_new wm9713_hpr_mixer_controls[] = {
-+SOC_DAPM_SINGLE("PC Beep Playback Switch", HPR_MIXER, 5, 1, 0),
-+SOC_DAPM_SINGLE("Voice Playback Switch", HPR_MIXER, 4, 1, 0),
-+SOC_DAPM_SINGLE("Aux Playback Switch", HPR_MIXER, 3, 1, 0),
-+SOC_DAPM_SINGLE("PCM Playback Switch", HPR_MIXER, 2, 1, 0),
-+SOC_DAPM_SINGLE("MonoIn Playback Switch", HPR_MIXER, 1, 1, 0),
-+SOC_DAPM_SINGLE("Bypass Playback Switch", HPR_MIXER, 0, 1, 0),
-+};
-+
-+/* headphone capture mux */
-+static const struct snd_kcontrol_new wm9713_hp_rec_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[1]);
-+
-+/* headphone mic mux */
-+static const struct snd_kcontrol_new wm9713_hp_mic_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[0]);
-+
-+/* Speaker Mixer */
-+static const struct snd_kcontrol_new wm9713_speaker_mixer_controls[] = {
-+SOC_DAPM_SINGLE("PC Beep Playback Switch", AC97_AUX, 11, 1, 1),
-+SOC_DAPM_SINGLE("Voice Playback Switch", AC97_PCM, 11, 1, 1),
-+SOC_DAPM_SINGLE("Aux Playback Switch", AC97_REC_SEL, 11, 1, 1),
-+SOC_DAPM_SINGLE("PCM Playback Switch", AC97_PHONE, 14, 1, 1),
-+SOC_DAPM_SINGLE("MonoIn Playback Switch", AC97_MASTER_TONE, 14, 1, 1),
-+SOC_DAPM_SINGLE("Bypass Playback Switch", AC97_PC_BEEP, 14, 1, 1),
-+};
-+
-+/* Mono Mixer */
-+static const struct snd_kcontrol_new wm9713_mono_mixer_controls[] = {
-+SOC_DAPM_SINGLE("PC Beep Playback Switch", AC97_AUX, 7, 1, 1),
-+SOC_DAPM_SINGLE("Voice Playback Switch", AC97_PCM, 7, 1, 1),
-+SOC_DAPM_SINGLE("Aux Playback Switch", AC97_REC_SEL, 7, 1, 1),
-+SOC_DAPM_SINGLE("PCM Playback Switch", AC97_PHONE, 13, 1, 1),
-+SOC_DAPM_SINGLE("MonoIn Playback Switch", AC97_MASTER_TONE, 13, 1, 1),
-+SOC_DAPM_SINGLE("Bypass Playback Switch", AC97_PC_BEEP, 13, 1, 1),
-+SOC_DAPM_SINGLE("Mic 1 Sidetone Switch", AC97_LINE, 7, 1, 1),
-+SOC_DAPM_SINGLE("Mic 2 Sidetone Switch", AC97_LINE, 6, 1, 1),
-+};
-+
-+/* mono mic mux */
-+static const struct snd_kcontrol_new wm9713_mono_mic_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[2]);
-+
-+/* mono output mux */
-+static const struct snd_kcontrol_new wm9713_mono_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[7]);
-+
-+/* speaker left output mux */
-+static const struct snd_kcontrol_new wm9713_hp_spkl_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[8]);
-+
-+/* speaker right output mux */
-+static const struct snd_kcontrol_new wm9713_hp_spkr_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[9]);
-+
-+/* headphone left output mux */
-+static const struct snd_kcontrol_new wm9713_hpl_out_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[10]);
-+
-+/* headphone right output mux */
-+static const struct snd_kcontrol_new wm9713_hpr_out_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[11]);
-+
-+/* Out3 mux */
-+static const struct snd_kcontrol_new wm9713_out3_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[12]);
-+
-+/* Out4 mux */
-+static const struct snd_kcontrol_new wm9713_out4_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[13]);
-+
-+/* DAC inv mux 1 */
-+static const struct snd_kcontrol_new wm9713_dac_inv1_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[14]);
-+
-+/* DAC inv mux 2 */
-+static const struct snd_kcontrol_new wm9713_dac_inv2_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[15]);
-+
-+/* Capture source left */
-+static const struct snd_kcontrol_new wm9713_rec_srcl_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[3]);
-+
-+/* Capture source right */
-+static const struct snd_kcontrol_new wm9713_rec_srcr_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[4]);
-+
-+/* mic source */
-+static const struct snd_kcontrol_new wm9713_mic_sel_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[18]);
-+
-+/* mic source B virtual control */
-+static const struct snd_kcontrol_new wm9713_micb_sel_mux_controls =
-+SOC_DAPM_ENUM("Route", wm9713_enum[19]);
-+
-+static const struct snd_soc_dapm_widget wm9713_dapm_widgets[] = {
-+SND_SOC_DAPM_MUX("Capture Headphone Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9713_hp_rec_mux_controls),
-+SND_SOC_DAPM_MUX("Sidetone Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9713_hp_mic_mux_controls),
-+SND_SOC_DAPM_MUX("Capture Mono Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9713_mono_mic_mux_controls),
-+SND_SOC_DAPM_MUX("Mono Out Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9713_mono_mux_controls),
-+SND_SOC_DAPM_MUX("Left Speaker Out Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9713_hp_spkl_mux_controls),
-+SND_SOC_DAPM_MUX("Right Speaker Out Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9713_hp_spkr_mux_controls),
-+SND_SOC_DAPM_MUX("Left Headphone Out Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9713_hpl_out_mux_controls),
-+SND_SOC_DAPM_MUX("Right Headphone Out Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9713_hpr_out_mux_controls),
-+SND_SOC_DAPM_MUX("Out 3 Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9713_out3_mux_controls),
-+SND_SOC_DAPM_MUX("Out 4 Mux", SND_SOC_NOPM, 0, 0,
-+ &wm9713_out4_mux_controls),
-+SND_SOC_DAPM_MUX("DAC Inv Mux 1", SND_SOC_NOPM, 0, 0,
-+ &wm9713_dac_inv1_mux_controls),
-+SND_SOC_DAPM_MUX("DAC Inv Mux 2", SND_SOC_NOPM, 0, 0,
-+ &wm9713_dac_inv2_mux_controls),
-+SND_SOC_DAPM_MUX("Left Capture Source", SND_SOC_NOPM, 0, 0,
-+ &wm9713_rec_srcl_mux_controls),
-+SND_SOC_DAPM_MUX("Right Capture Source", SND_SOC_NOPM, 0, 0,
-+ &wm9713_rec_srcr_mux_controls),
-+SND_SOC_DAPM_MUX("Mic A Source", SND_SOC_NOPM, 0, 0,
-+ &wm9713_mic_sel_mux_controls ),
-+SND_SOC_DAPM_MUX("Mic B Source", SND_SOC_NOPM, 0, 0,
-+ &wm9713_micb_sel_mux_controls ),
-+SND_SOC_DAPM_MIXER_E("Left HP Mixer", AC97_EXTENDED_MID, 3, 1,
-+ &wm9713_hpl_mixer_controls[0], ARRAY_SIZE(wm9713_hpl_mixer_controls),
-+ mixer_event, SND_SOC_DAPM_POST_REG),
-+SND_SOC_DAPM_MIXER_E("Right HP Mixer", AC97_EXTENDED_MID, 2, 1,
-+ &wm9713_hpr_mixer_controls[0], ARRAY_SIZE(wm9713_hpr_mixer_controls),
-+ mixer_event, SND_SOC_DAPM_POST_REG),
-+SND_SOC_DAPM_MIXER("Mono Mixer", AC97_EXTENDED_MID, 0, 1,
-+ &wm9713_mono_mixer_controls[0], ARRAY_SIZE(wm9713_mono_mixer_controls)),
-+SND_SOC_DAPM_MIXER("Speaker Mixer", AC97_EXTENDED_MID, 1, 1,
-+ &wm9713_speaker_mixer_controls[0],
-+ ARRAY_SIZE(wm9713_speaker_mixer_controls)),
-+SND_SOC_DAPM_DAC("Left DAC", "Left HiFi Playback", AC97_EXTENDED_MID, 7, 1),
-+SND_SOC_DAPM_DAC("Right DAC", "Right HiFi Playback", AC97_EXTENDED_MID, 6, 1),
-+SND_SOC_DAPM_MIXER("AC97 Mixer", SND_SOC_NOPM, 0, 0, NULL, 0),
-+SND_SOC_DAPM_MIXER("HP Mixer", SND_SOC_NOPM, 0, 0, NULL, 0),
-+SND_SOC_DAPM_MIXER("Capture Mixer", SND_SOC_NOPM, 0, 0, NULL, 0),
-+SND_SOC_DAPM_DAC("Voice DAC", "Voice Playback", AC97_EXTENDED_MID, 12, 1),
-+SND_SOC_DAPM_DAC("Aux DAC", "Aux Playback", AC97_EXTENDED_MID, 11, 1),
-+SND_SOC_DAPM_ADC("Left ADC", "Left HiFi Capture", AC97_EXTENDED_MID, 5, 1),
-+SND_SOC_DAPM_ADC("Right ADC", "Right HiFi Capture", AC97_EXTENDED_MID, 4, 1),
-+SND_SOC_DAPM_PGA("Left Headphone", AC97_EXTENDED_MSTATUS, 10, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Right Headphone", AC97_EXTENDED_MSTATUS, 9, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Left Speaker", AC97_EXTENDED_MSTATUS, 8, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Right Speaker", AC97_EXTENDED_MSTATUS, 7, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Out 3", AC97_EXTENDED_MSTATUS, 11, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Out 4", AC97_EXTENDED_MSTATUS, 12, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Mono Out", AC97_EXTENDED_MSTATUS, 13, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Left Line In", AC97_EXTENDED_MSTATUS, 6, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Right Line In", AC97_EXTENDED_MSTATUS, 5, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Mono In", AC97_EXTENDED_MSTATUS, 4, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Mic A PGA", AC97_EXTENDED_MSTATUS, 3, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Mic B PGA", AC97_EXTENDED_MSTATUS, 2, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Mic A Pre Amp", AC97_EXTENDED_MSTATUS, 1, 1, NULL, 0),
-+SND_SOC_DAPM_PGA("Mic B Pre Amp", AC97_EXTENDED_MSTATUS, 0, 1, NULL, 0),
-+SND_SOC_DAPM_MICBIAS("Mic Bias", AC97_EXTENDED_MSTATUS, 14, 1),
-+SND_SOC_DAPM_OUTPUT("MONO"),
-+SND_SOC_DAPM_OUTPUT("HPL"),
-+SND_SOC_DAPM_OUTPUT("HPR"),
-+SND_SOC_DAPM_OUTPUT("SPKL"),
-+SND_SOC_DAPM_OUTPUT("SPKR"),
-+SND_SOC_DAPM_OUTPUT("OUT3"),
-+SND_SOC_DAPM_OUTPUT("OUT4"),
-+SND_SOC_DAPM_INPUT("LINEL"),
-+SND_SOC_DAPM_INPUT("LINER"),
-+SND_SOC_DAPM_INPUT("MONOIN"),
-+SND_SOC_DAPM_INPUT("PCBEEP"),
-+SND_SOC_DAPM_INPUT("MIC1"),
-+SND_SOC_DAPM_INPUT("MIC2A"),
-+SND_SOC_DAPM_INPUT("MIC2B"),
-+SND_SOC_DAPM_VMID("VMID"),
-+};
-+
-+static const char *audio_map[][3] = {
-+ /* left HP mixer */
-+ {"Left HP Mixer", "PC Beep Playback Switch", "PCBEEP"},
-+ {"Left HP Mixer", "Voice Playback Switch", "Voice DAC"},
-+ {"Left HP Mixer", "Aux Playback Switch", "Aux DAC"},
-+ {"Left HP Mixer", "Bypass Playback Switch", "Left Line In"},
-+ {"Left HP Mixer", "PCM Playback Switch", "Left DAC"},
-+ {"Left HP Mixer", "MonoIn Playback Switch", "Mono In"},
-+ {"Left HP Mixer", NULL, "Capture Headphone Mux"},
-+
-+ /* right HP mixer */
-+ {"Right HP Mixer", "PC Beep Playback Switch", "PCBEEP"},
-+ {"Right HP Mixer", "Voice Playback Switch", "Voice DAC"},
-+ {"Right HP Mixer", "Aux Playback Switch", "Aux DAC"},
-+ {"Right HP Mixer", "Bypass Playback Switch", "Right Line In"},
-+ {"Right HP Mixer", "PCM Playback Switch", "Right DAC"},
-+ {"Right HP Mixer", "MonoIn Playback Switch", "Mono In"},
-+ {"Right HP Mixer", NULL, "Capture Headphone Mux"},
-+
-+ /* virtual mixer - mixes left & right channels for spk and mono */
-+ {"AC97 Mixer", NULL, "Left DAC"},
-+ {"AC97 Mixer", NULL, "Right DAC"},
-+ {"Line Mixer", NULL, "Right Line In"},
-+ {"Line Mixer", NULL, "Left Line In"},
-+ {"HP Mixer", NULL, "Left HP Mixer"},
-+ {"HP Mixer", NULL, "Right HP Mixer"},
-+ {"Capture Mixer", NULL, "Left Capture Source"},
-+ {"Capture Mixer", NULL, "Right Capture Source"},
-+
-+ /* speaker mixer */
-+ {"Speaker Mixer", "PC Beep Playback Switch", "PCBEEP"},
-+ {"Speaker Mixer", "Voice Playback Switch", "Voice DAC"},
-+ {"Speaker Mixer", "Aux Playback Switch", "Aux DAC"},
-+ {"Speaker Mixer", "Bypass Playback Switch", "Line Mixer"},
-+ {"Speaker Mixer", "PCM Playback Switch", "AC97 Mixer"},
-+ {"Speaker Mixer", "MonoIn Playback Switch", "Mono In"},
-+
-+ /* mono mixer */
-+ {"Mono Mixer", "PC Beep Playback Switch", "PCBEEP"},
-+ {"Mono Mixer", "Voice Playback Switch", "Voice DAC"},
-+ {"Mono Mixer", "Aux Playback Switch", "Aux DAC"},
-+ {"Mono Mixer", "Bypass Playback Switch", "Line Mixer"},
-+ {"Mono Mixer", "PCM Playback Switch", "AC97 Mixer"},
-+ {"Mono Mixer", NULL, "Capture Mono Mux"},
-+
-+ /* DAC inv mux 1 */
-+ {"DAC Inv Mux 1", "Mono", "Mono Mixer"},
-+ {"DAC Inv Mux 1", "Speaker", "Speaker Mixer"},
-+ {"DAC Inv Mux 1", "Left Headphone", "Left HP Mixer"},
-+ {"DAC Inv Mux 1", "Right Headphone", "Right HP Mixer"},
-+ {"DAC Inv Mux 1", "Headphone Mono", "HP Mixer"},
-+
-+ /* DAC inv mux 2 */
-+ {"DAC Inv Mux 2", "Mono", "Mono Mixer"},
-+ {"DAC Inv Mux 2", "Speaker", "Speaker Mixer"},
-+ {"DAC Inv Mux 2", "Left Headphone", "Left HP Mixer"},
-+ {"DAC Inv Mux 2", "Right Headphone", "Right HP Mixer"},
-+ {"DAC Inv Mux 2", "Headphone Mono", "HP Mixer"},
-+
-+ /* headphone left mux */
-+ {"Left Headphone Out Mux", "Headphone", "Left HP Mixer"},
-+
-+ /* headphone right mux */
-+ {"Right Headphone Out Mux", "Headphone", "Right HP Mixer"},
-+
-+ /* speaker left mux */
-+ {"Left Speaker Out Mux", "Headphone", "Left HP Mixer"},
-+ {"Left Speaker Out Mux", "Speaker", "Speaker Mixer"},
-+ {"Left Speaker Out Mux", "Inv", "DAC Inv Mux 1"},
-+
-+ /* speaker right mux */
-+ {"Right Speaker Out Mux", "Headphone", "Right HP Mixer"},
-+ {"Right Speaker Out Mux", "Speaker", "Speaker Mixer"},
-+ {"Right Speaker Out Mux", "Inv", "DAC Inv Mux 2"},
-+
-+ /* mono mux */
-+ {"Mono Out Mux", "Mono", "Mono Mixer"},
-+ {"Mono Out Mux", "Inv", "DAC Inv Mux 1"},
-+
-+ /* out 3 mux */
-+ {"Out 3 Mux", "Inv 1", "DAC Inv Mux 1"},
-+
-+ /* out 4 mux */
-+ {"Out 4 Mux", "Inv 2", "DAC Inv Mux 2"},
-+
-+ /* output pga */
-+ {"HPL", NULL, "Left Headphone"},
-+ {"Left Headphone", NULL, "Left Headphone Out Mux"},
-+ {"HPR", NULL, "Right Headphone"},
-+ {"Right Headphone", NULL, "Right Headphone Out Mux"},
-+ {"OUT3", NULL, "Out 3"},
-+ {"Out 3", NULL, "Out 3 Mux"},
-+ {"OUT4", NULL, "Out 4"},
-+ {"Out 4", NULL, "Out 4 Mux"},
-+ {"SPKL", NULL, "Left Speaker"},
-+ {"Left Speaker", NULL, "Left Speaker Out Mux"},
-+ {"SPKR", NULL, "Right Speaker"},
-+ {"Right Speaker", NULL, "Right Speaker Out Mux"},
-+ {"MONO", NULL, "Mono Out"},
-+ {"Mono Out", NULL, "Mono Out Mux"},
-+
-+ /* input pga */
-+ {"Left Line In", NULL, "LINEL"},
-+ {"Right Line In", NULL, "LINER"},
-+ {"Mono In", NULL, "MONOIN"},
-+ {"Mic A PGA", NULL, "Mic A Pre Amp"},
-+ {"Mic B PGA", NULL, "Mic B Pre Amp"},
-+
-+ /* left capture select */
-+ {"Left Capture Source", "Mic 1", "Mic A Pre Amp"},
-+ {"Left Capture Source", "Mic 2", "Mic B Pre Amp"},
-+ {"Left Capture Source", "Line", "LINEL"},
-+ {"Left Capture Source", "Mono In", "MONOIN"},
-+ {"Left Capture Source", "Headphone", "Left HP Mixer"},
-+ {"Left Capture Source", "Speaker", "Speaker Mixer"},
-+ {"Left Capture Source", "Mono Out", "Mono Mixer"},
-+
-+ /* right capture select */
-+ {"Right Capture Source", "Mic 1", "Mic A Pre Amp"},
-+ {"Right Capture Source", "Mic 2", "Mic B Pre Amp"},
-+ {"Right Capture Source", "Line", "LINER"},
-+ {"Right Capture Source", "Mono In", "MONOIN"},
-+ {"Right Capture Source", "Headphone", "Right HP Mixer"},
-+ {"Right Capture Source", "Speaker", "Speaker Mixer"},
-+ {"Right Capture Source", "Mono Out", "Mono Mixer"},
-+
-+ /* left ADC */
-+ {"Left ADC", NULL, "Left Capture Source"},
-+
-+ /* right ADC */
-+ {"Right ADC", NULL, "Right Capture Source"},
-+
-+ /* mic */
-+ {"Mic A Pre Amp", NULL, "Mic A Source"},
-+ {"Mic A Source", "Mic 1", "MIC1"},
-+ {"Mic A Source", "Mic 2 A", "MIC2A"},
-+ {"Mic A Source", "Mic 2 B", "Mic B Source"},
-+ {"Mic B Pre Amp", "MPB", "Mic B Source"},
-+ {"Mic B Source", NULL, "MIC2B"},
-+
-+ /* headphone capture */
-+ {"Capture Headphone Mux", "Stereo", "Capture Mixer"},
-+ {"Capture Headphone Mux", "Left", "Left Capture Source"},
-+ {"Capture Headphone Mux", "Right", "Right Capture Source"},
-+
-+ /* mono capture */
-+ {"Capture Mono Mux", "Stereo", "Capture Mixer"},
-+ {"Capture Mono Mux", "Left", "Left Capture Source"},
-+ {"Capture Mono Mux", "Right", "Right Capture Source"},
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+static int wm9713_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(wm9713_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm9713_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path audio_mapnects */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+static unsigned int ac97_read(struct snd_soc_codec *codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+
-+ if (reg == AC97_RESET || reg == AC97_GPIO_STATUS ||
-+ reg == AC97_VENDOR_ID1 || reg == AC97_VENDOR_ID2 ||
-+ reg == AC97_CD)
-+ return soc_ac97_ops.read(codec->ac97, reg);
-+ else {
-+ reg = reg >> 1;
-+
-+ if (reg > (ARRAY_SIZE(wm9713_reg)))
-+ return -EIO;
-+
-+ return cache[reg];
-+ }
-+}
-+
-+static int ac97_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int val)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg < 0x7c)
-+ soc_ac97_ops.write(codec->ac97, reg, val);
-+ reg = reg >> 1;
-+ if (reg <= (ARRAY_SIZE(wm9713_reg)))
-+ cache[reg] = val;
-+
-+ return 0;
-+}
-+
-+struct pll_ {
-+ unsigned int in_hz;
-+ unsigned int lf:1; /* allows low frequency use */
-+ unsigned int sdm:1; /* allows fraction n div */
-+ unsigned int divsel:1; /* enables input clock div */
-+ unsigned int divctl:1; /* input clock divider */
-+ unsigned int n:4;
-+ unsigned int k;
-+};
-+
-+struct pll_ pll[] = {
-+ {13000000, 0, 1, 0, 0, 7, 0x23f488},
-+ {2048000, 1, 0, 0, 0, 12, 0x0},
-+ {4096000, 1, 0, 0, 0, 6, 0x0},
-+ {12288000, 0, 0, 0, 0, 8, 0x0},
-+ /* liam - add more entries */
-+};
-+
-+/* we must have either 24.576MHz or a PLL freq */
-+static unsigned int wm9713_config_ac97sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ int i;
-+ dai->mclk = 0;
-+
-+ /* first check if we can get away witout burning any PLL power */
-+ if (24576000 == clk) {
-+ /* standard AC97 clock */
-+ dai->mclk = clk;
-+ goto out;
-+ }
-+
-+ /* ok no standard clock, so we must now try the PLL */
-+ for(i = 0; i < ARRAY_SIZE(pll); i++) {
-+ if (clk == pll[i].in_hz) {
-+ dai->mclk = clk; /* clock out */
-+ goto out;
-+ }
-+ }
-+
-+out:
-+ return dai->mclk;
-+}
-+
-+/* The WM9713 voice DAC can only run at 256FS. This interface and DAC are
-+ * clocked by the main AC97 clock divided down to 256 FS.
-+ */
-+static unsigned int wm9713_config_vsysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+
-+ int i, j, best_clk = info->fs * info->rate;
-+
-+ /* can we run at this clk without the PLL ? */
-+ for (i = 1; i <= 16; i++) {
-+ if (best_clk * i == clk) {
-+ dai->pll_in = 0;
-+ dai->clk_div = i << 1;
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+
-+ /* now check for PLL support */
-+ for (i = 0; i < ARRAY_SIZE(pll); i++) {
-+ if (pll[i].in_hz == clk) {
-+ for (j = 1; j <= 16; j++) {
-+ if (24576000 == j * best_clk) {
-+ dai->pll_in = clk;
-+ dai->pll_out = 24576000;
-+ dai->clk_div = j << 1;
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+ }
-+ }
-+
-+ /* this clk is not supported */
-+ return 0;
-+}
-+
-+u32 wm9713_set_pll(struct snd_soc_codec *codec, u32 in)
-+{
-+ struct wm9713 *wm = (struct wm9713*)codec->private_data;
-+ int i;
-+ u16 reg, reg2;
-+
-+ /* turn PLL off ? */
-+ if (in == 0) {
-+ /* disable PLL power and select ext source */
-+ reg = ac97_read(codec, AC97_HANDSET_RATE);
-+ ac97_write(codec, AC97_HANDSET_RATE, reg | 0x0080);
-+ reg = ac97_read(codec, AC97_EXTENDED_MID);
-+ ac97_write(codec, AC97_EXTENDED_MID, reg | 0x0200);
-+ wm->pll = 0;
-+ return 0;
-+ }
-+
-+ for (i = 0; i < ARRAY_SIZE(pll); i++) {
-+ if (pll[i].in_hz == in)
-+ goto found;
-+ }
-+ return -EINVAL;
-+
-+found:
-+ if (pll[i].sdm == 0) {
-+ reg = (pll[i].n << 12) | (pll[i].lf << 11) |
-+ (pll[i].divsel << 9) | (pll[i].divctl << 8);
-+ ac97_write(codec, AC97_LINE1_LEVEL, reg);
-+ } else {
-+ /* write the fractional k to the reg 0x46 pages */
-+ reg2 = (pll[i].n << 12) | (pll[i].lf << 11) | (pll[i].sdm << 10) |
-+ (pll[i].divsel << 9) | (pll[i].divctl << 8);
-+
-+ reg = reg2 | (0x5 << 4) | (pll[i].k >> 20); /* K [21:20] */
-+ ac97_write(codec, AC97_LINE1_LEVEL, reg);
-+
-+ reg = reg2 | (0x4 << 4) | ((pll[i].k >> 16) & 0xf); /* K [19:16] */
-+ ac97_write(codec, AC97_LINE1_LEVEL, reg);
-+
-+ reg = reg2 | (0x3 << 4) | ((pll[i].k >> 12) & 0xf); /* K [15:12] */
-+ ac97_write(codec, AC97_LINE1_LEVEL, reg);
-+
-+ reg = reg2 | (0x2 << 4) | ((pll[i].k >> 8) & 0xf); /* K [11:8] */
-+ ac97_write(codec, AC97_LINE1_LEVEL, reg);
-+
-+ reg = reg2 | (0x1 << 4) | ((pll[i].k >> 4) & 0xf); /* K [7:4] */
-+ ac97_write(codec, AC97_LINE1_LEVEL, reg);
-+
-+ reg = reg2 | (0x0 << 4) | (pll[i].k & 0xf); /* K [3:0] */
-+ ac97_write(codec, AC97_LINE1_LEVEL, reg);
-+ }
-+
-+ /* turn PLL on and select as source */
-+ reg = ac97_read(codec, AC97_EXTENDED_MID);
-+ ac97_write(codec, AC97_EXTENDED_MID, reg & 0xfdff);
-+ reg = ac97_read(codec, AC97_HANDSET_RATE);
-+ ac97_write(codec, AC97_HANDSET_RATE, reg & 0xff7f);
-+ /* wait 10ms AC97 link frames for the link to stabilise */
-+ schedule_timeout_interruptible(msecs_to_jiffies(10));
-+ wm->pll = in;
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(wm9713_set_pll);
-+
-+static int wm9713_voice_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 reg = 0x8000, bfs, div, gpio;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->codec_dai->dai_runtime.bfs);
-+ gpio = ac97_read(codec, AC97_GPIO_CFG) & 0xffe2;
-+
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK){
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ reg |= 0x4000;
-+ gpio |= 0x0008;
-+ break;
-+ case SND_SOC_DAIFMT_CBM_CFS:
-+ reg |= 0x6000;
-+ gpio |= 0x000c;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ reg |= 0x0200;
-+ gpio |= 0x000d;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFM:
-+ gpio |= 0x0009;
-+ break;
-+ }
-+ ac97_write(codec, AC97_GPIO_CFG, gpio);
-+
-+ /* enable PLL if needed */
-+ if (rtd->codec_dai->pll_in)
-+ wm9713_set_pll(codec, rtd->codec_dai->pll_in);
-+
-+ /* set the PCM divider */
-+ div = ac97_read(codec, AC97_HANDSET_RATE) & 0xf0ff;
-+ ac97_write(codec, AC97_HANDSET_RATE, div |
-+ ((rtd->codec_dai->clk_div >> 1) -1) << 8);
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ reg |= 0x00c0;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ reg |= 0x0080;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ reg |= 0x0040;
-+ break;
-+ }
-+
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ reg |= 0x0002;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ reg |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ reg |= 0x0003;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_B:
-+ reg |= 0x0043;
-+ break;
-+ }
-+
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ reg |= 0x0004;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ reg |= 0x0008;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ reg |= 0x000c;
-+ break;
-+ }
-+
-+ switch (bfs) {
-+ case 2:
-+ reg |= (0x1 << 9);
-+ break;
-+ case 4:
-+ reg |= (0x2 << 9);
-+ break;
-+ case 8:
-+ reg |= (0x3 << 9);
-+ break;
-+ case 16:
-+ reg |= (0x4 << 9);
-+ break;
-+ }
-+
-+ /* enable PCM interface in master mode */
-+ ac97_write(codec, AC97_CENTER_LFE_MASTER, reg);
-+ return 0;
-+}
-+
-+static void wm9713_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (!codec->active)
-+ wm9713_set_pll(codec, 0);
-+}
-+
-+static void wm9713_voiceshutdown(snd_pcm_substream_t *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 status;
-+
-+ wm9713_shutdown(substream);
-+
-+ /* Gracefully shut down the voice interface. */
-+ status = ac97_read(codec, AC97_EXTENDED_STATUS) | 0x1000;
-+ ac97_write(codec,AC97_HANDSET_RATE,0x0280);
-+ schedule_timeout_interruptible(msecs_to_jiffies(1));
-+ ac97_write(codec,AC97_HANDSET_RATE,0x0F80);
-+ ac97_write(codec,AC97_EXTENDED_MID,status);
-+}
-+
-+static int ac97_hifi_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int reg;
-+ u16 vra;
-+
-+ /* we need a 24576000Hz clock to run at the correct speed */
-+ if (rtd->codec_dai->mclk != 24576000)
-+ wm9713_set_pll(codec, rtd->codec_dai->mclk);
-+
-+ vra = ac97_read(codec, AC97_EXTENDED_STATUS);
-+ ac97_write(codec, AC97_EXTENDED_STATUS, vra | 0x1);
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ reg = AC97_PCM_FRONT_DAC_RATE;
-+ else
-+ reg = AC97_PCM_LR_ADC_RATE;
-+
-+ return ac97_write(codec, reg, runtime->rate);
-+}
-+
-+static int ac97_aux_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 vra, xsle;
-+
-+ /* we need a 24576000Hz clock to run at the correct speed */
-+ if (rtd->codec_dai->mclk != 24576000)
-+ wm9713_set_pll(codec, rtd->codec_dai->mclk);
-+
-+ vra = ac97_read(codec, AC97_EXTENDED_STATUS);
-+ ac97_write(codec, AC97_EXTENDED_STATUS, vra | 0x1);
-+ xsle = ac97_read(codec, AC97_PCI_SID);
-+ ac97_write(codec, AC97_PCI_SID, xsle | 0x8000);
-+
-+ if (substream->stream != SNDRV_PCM_STREAM_PLAYBACK)
-+ return -ENODEV;
-+
-+ return ac97_write(codec, AC97_PCM_SURR_DAC_RATE, runtime->rate);
-+}
-+
-+struct snd_soc_codec_dai wm9713_dai[] = {
-+{
-+ .name = "AC97 HiFi",
-+ .playback = {
-+ .stream_name = "HiFi Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .stream_name = "HiFi Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .config_sysclk = wm9713_config_ac97sysclk,
-+ .ops = {
-+ .shutdown = wm9713_shutdown,
-+ .prepare = ac97_hifi_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(ac97_modes),
-+ .mode = ac97_modes,},},
-+ {
-+ .name = "AC97 Aux",
-+ .playback = {
-+ .stream_name = "Aux Playback",
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .config_sysclk = wm9713_config_ac97sysclk,
-+ .ops = {
-+ .shutdown = wm9713_shutdown,
-+ .prepare = ac97_aux_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(ac97_modes),
-+ .mode = ac97_modes,}
-+ },
-+ {
-+ .name = "WM9713 Voice",
-+ .playback = {
-+ .stream_name = "Voice Playback",
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .capture = {
-+ .stream_name = "Voice Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .config_sysclk = wm9713_config_vsysclk,
-+ .ops = {
-+ .prepare = wm9713_voice_prepare,
-+ .shutdown = wm9713_voiceshutdown,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm9713_voice_modes),
-+ .mode = wm9713_voice_modes,},
-+ },
-+};
-+EXPORT_SYMBOL_GPL(wm9713_dai);
-+
-+int wm9713_reset(struct snd_soc_codec *codec, int try_warm)
-+{
-+ if (try_warm && soc_ac97_ops.warm_reset) {
-+ soc_ac97_ops.warm_reset(codec->ac97);
-+ if (!(ac97_read(codec, 0) & 0x8000))
-+ return 1;
-+ }
-+
-+ soc_ac97_ops.reset(codec->ac97);
-+ if (ac97_read(codec, 0) & 0x8000)
-+ return -EIO;
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(wm9713_reset);
-+
-+static int wm9713_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ u16 reg;
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* enable thermal shutdown */
-+ reg = ac97_read(codec, AC97_EXTENDED_MID) & 0x1bff;
-+ ac97_write(codec, AC97_EXTENDED_MID, reg);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* enable master bias and vmid */
-+ reg = ac97_read(codec, AC97_EXTENDED_MID) & 0x3bff;
-+ ac97_write(codec, AC97_EXTENDED_MID, reg);
-+ ac97_write(codec, AC97_POWERDOWN, 0x0000);
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ /* disable everything including AC link */
-+ ac97_write(codec, AC97_EXTENDED_MID, 0xffff);
-+ ac97_write(codec, AC97_EXTENDED_MSTATUS, 0xffff);
-+ ac97_write(codec, AC97_POWERDOWN, 0xffff);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+static int wm9713_soc_suspend(struct platform_device *pdev,
-+ pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct wm9713 *wm = (struct wm9713*)codec->private_data;
-+
-+ if (wm->pll) {
-+ wm->pll_resume = wm->pll;
-+ wm9713_set_pll(codec, 0);
-+ }
-+ wm9713_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm9713_soc_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct wm9713 *wm = (struct wm9713*)codec->private_data;
-+ int i, ret;
-+ u16 *cache = codec->reg_cache;
-+
-+ if ((ret = wm9713_reset(codec, 1)) < 0){
-+ printk(KERN_ERR "could not reset AC97 codec\n");
-+ return ret;
-+ }
-+
-+ wm9713_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+
-+ /* only synchronise the codec if warm reset failed */
-+ if (ret == 0) {
-+ for (i = 2; i < ARRAY_SIZE(wm9713_reg) << 1; i+=2) {
-+ if (i == AC97_POWERDOWN || i == AC97_EXTENDED_MID ||
-+ i == AC97_EXTENDED_MSTATUS || i > 0x66)
-+ continue;
-+ soc_ac97_ops.write(codec->ac97, i, cache[i>>1]);
-+ }
-+ }
-+
-+ if (wm->pll_resume) {
-+ wm9713_set_pll(codec, wm->pll_resume);
-+ wm->pll_resume = 0;
-+ }
-+
-+ if (codec->suspend_dapm_state == SNDRV_CTL_POWER_D0)
-+ wm9713_dapm_event(codec, SNDRV_CTL_POWER_D0);
-+
-+ return ret;
-+}
-+
-+static int wm9713_soc_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec;
-+ int ret = 0, reg;
-+
-+ printk(KERN_INFO "WM9713/WM9714 SoC Audio Codec %s\n", WM9713_VERSION);
-+
-+ socdev->codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (socdev->codec == NULL)
-+ return -ENOMEM;
-+ codec = socdev->codec;
-+ mutex_init(&codec->mutex);
-+
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm9713_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL){
-+ kfree(socdev->codec);
-+ socdev->codec = NULL;
-+ return -ENOMEM;
-+ }
-+ memcpy(codec->reg_cache, wm9713_reg,
-+ sizeof(u16) * ARRAY_SIZE(wm9713_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm9713_reg);
-+ codec->reg_cache_step = 2;
-+
-+ codec->private_data = kzalloc(sizeof(struct wm9713), GFP_KERNEL);
-+ if (codec->private_data == NULL) {
-+ kfree(codec->reg_cache);
-+ kfree(socdev->codec);
-+ socdev->codec = NULL;
-+ return -ENOMEM;
-+ }
-+
-+ codec->name = "WM9713";
-+ codec->owner = THIS_MODULE;
-+ codec->dai = wm9713_dai;
-+ codec->num_dai = ARRAY_SIZE(wm9713_dai);
-+ codec->write = ac97_write;
-+ codec->read = ac97_read;
-+ codec->dapm_event = wm9713_dapm_event;
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ ret = snd_soc_new_ac97_codec(codec, &soc_ac97_ops, 0);
-+ if (ret < 0)
-+ goto err;
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if (ret < 0)
-+ goto pcm_err;
-+
-+ /* do a cold reset for the controller and then try
-+ * a warm reset followed by an optional cold reset for codec */
-+ wm9713_reset(codec, 0);
-+ ret = wm9713_reset(codec, 1);
-+ if (ret < 0) {
-+ printk(KERN_ERR "AC97 link error\n");
-+ goto reset_err;
-+ }
-+
-+ wm9713_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+
-+ /* unmute the adc - move to kcontrol */
-+ reg = ac97_read(codec, AC97_CD) & 0x7fff;
-+ ac97_write(codec, AC97_CD, reg);
-+
-+ wm9713_add_controls(codec);
-+ wm9713_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0)
-+ goto reset_err;
-+ return 0;
-+
-+reset_err:
-+ snd_soc_free_pcms(socdev);
-+
-+pcm_err:
-+ snd_soc_free_ac97_codec(codec);
-+
-+err:
-+ kfree(socdev->codec->private_data);
-+ kfree(socdev->codec->reg_cache);
-+ kfree(socdev->codec);
-+ socdev->codec = NULL;
-+ return ret;
-+}
-+
-+static int wm9713_soc_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec == NULL)
-+ return 0;
-+
-+ snd_soc_dapm_free(socdev);
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_free_ac97_codec(codec);
-+ kfree(codec->private_data);
-+ kfree(codec->reg_cache);
-+ kfree(codec);
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm9713= {
-+ .probe = wm9713_soc_probe,
-+ .remove = wm9713_soc_remove,
-+ .suspend = wm9713_soc_suspend,
-+ .resume = wm9713_soc_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm9713);
-+
-+MODULE_DESCRIPTION("ASoC WM9713/WM9714 driver");
-+MODULE_AUTHOR("Liam Girdwood");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm9713.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm9713.h
-@@ -0,0 +1,18 @@
-+/*
-+ * wm9713.h -- WM9713 Soc Audio driver
-+ */
-+
-+#ifndef _WM9713_H
-+#define _WM9713_H
-+
-+#define WM9713_DAI_AC97_HIFI 0
-+#define WM9713_DAI_AC97_AUX 1
-+#define WM9713_DAI_PCM_VOICE 2
-+
-+extern struct snd_soc_codec_device soc_codec_dev_wm9713;
-+extern struct snd_soc_codec_dai wm9713_dai[3];
-+
-+u32 wm9713_set_pll(struct snd_soc_codec *codec, u32 in);
-+int wm9713_reset(struct snd_soc_codec *codec, int try_warm);
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/pxa/Kconfig
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/Kconfig
-@@ -0,0 +1,125 @@
-+menu "SoC Audio for the Intel PXA2xx"
-+
-+config SND_PXA2xx_SOC
-+ tristate "SoC Audio for the Intel PXA2xx chip"
-+ depends on ARCH_PXA && SND
-+ select SND_PCM
-+ help
-+ Say Y or M if you want to add support for codecs attached to
-+ the PXA2xx AC97, I2S or SSP interface. You will also need
-+ to select the audio interfaces to support below.
-+
-+config SND_PXA2xx_AC97
-+ tristate
-+ select SND_AC97_CODEC
-+
-+config SND_PXA2xx_SOC_AC97
-+ tristate
-+ select SND_AC97_BUS
-+ select SND_SOC_AC97_BUS
-+
-+config SND_PXA2xx_SOC_I2S
-+ tristate
-+
-+config SND_PXA2xx_SOC_SSP
-+ tristate
-+ select PXA_SSP
-+
-+config SND_PXA2xx_SOC_MAINSTONE
-+ tristate "SoC AC97 Audio support for Intel Mainstone"
-+ depends on SND_PXA2xx_SOC && MACH_MAINSTONE
-+ select SND_PXA2xx_AC97
-+ help
-+ Say Y if you want to add support for generic AC97 SoC audio on Mainstone.
-+
-+config SND_PXA2xx_SOC_MAINSTONE_WM8731
-+ tristate "SoC I2S Audio support for Intel Mainstone - WM8731"
-+ depends on SND_PXA2xx_SOC && MACH_MAINSTONE
-+ select SND_PXA2xx_SOC_I2S
-+ help
-+ Say Y if you want to add support for SoC audio on Mainstone
-+ with the WM8731.
-+
-+config SND_PXA2xx_SOC_MAINSTONE_WM8753
-+ tristate "SoC I2S/SSP Audio support for Intel Mainstone - WM8753"
-+ depends on SND_PXA2xx_SOC && MACH_MAINSTONE
-+ select SND_PXA2xx_SOC_I2S
-+ select SND_PXA2xx_SOC_SSP
-+ help
-+ Say Y if you want to add support for SoC audio on Mainstone
-+ with the WM8753.
-+
-+config SND_PXA2xx_SOC_MAINSTONE_WM8974
-+ tristate "SoC I2S Audio support for Intel Mainstone - WM8974"
-+ depends on SND_PXA2xx_SOC && MACH_MAINSTONE
-+ select SND_PXA2xx_SOC_I2S
-+ help
-+ Say Y if you want to add support for SoC audio on Mainstone
-+ with the WM8974.
-+
-+config SND_PXA2xx_SOC_MAINSTONE_WM9713
-+ tristate "SoC I2S/SSP Audio support for Intel Mainstone - WM9713"
-+ depends on SND_PXA2xx_SOC && MACH_MAINSTONE
-+ select SND_PXA2xx_SOC_AC97
-+ select SND_PXA2xx_SOC_SSP
-+ help
-+ Say Y if you want to add support for SoC voice audio on Mainstone
-+ with the WM9713.
-+
-+config SND_MAINSTONE_BASEBAND
-+ tristate "Example SoC Baseband Audio support for Intel Mainstone"
-+ depends on SND_PXA2xx_SOC && MACH_MAINSTONE
-+ select SND_PXA2xx_SOC_AC97
-+ help
-+ Say Y if you want to add support for SoC baseband on Mainstone
-+ with the WM9713 and example Baseband modem.
-+
-+config SND_MAINSTONE_BLUETOOTH
-+ tristate "Example SoC Bluetooth Audio support for Intel Mainstone"
-+ depends on SND_PXA2xx_SOC && MACH_MAINSTONE
-+ select SND_PXA2xx_SOC_I2S
-+ help
-+ Say Y if you want to add support for SoC bluetooth on Mainstone
-+ with the WM8753 and example Bluetooth codec.
-+
-+config SND_PXA2xx_SOC_MAINSTONE_WM9712
-+ tristate "SoC I2S/SSP Audio support for Intel Mainstone - WM9712"
-+ depends on SND_PXA2xx_SOC && MACH_MAINSTONE
-+ select SND_PXA2xx_SOC_AC97
-+ help
-+ Say Y if you want to add support for SoC voice audio on Mainstone
-+ with the WM9712.
-+
-+config SND_PXA2xx_SOC_CORGI
-+ tristate "SoC Audio support for Sharp Zaurus SL-C7x0"
-+ depends on SND_PXA2xx_SOC && PXA_SHARP_C7xx
-+ select SND_PXA2xx_SOC_I2S
-+ help
-+ Say Y if you want to add support for SoC audio on Sharp
-+ Zaurus SL-C7x0 models (Corgi, Shepherd, Husky).
-+
-+config SND_PXA2xx_SOC_SPITZ
-+ tristate "SoC Audio support for Sharp Zaurus SL-Cxx00"
-+ depends on SND_PXA2xx_SOC && PXA_SHARP_Cxx00
-+ select SND_PXA2xx_SOC_I2S
-+ help
-+ Say Y if you want to add support for SoC audio on Sharp
-+ Zaurus SL-Cxx00 models (Spitz, Borzoi and Akita).
-+
-+config SND_PXA2xx_SOC_POODLE
-+ tristate "SoC Audio support for Poodle"
-+ depends on SND_PXA2xx_SOC && MACH_POODLE
-+ select SND_PXA2xx_SOC_I2S
-+ help
-+ Say Y if you want to add support for SoC audio on Sharp
-+ Zaurus SL-5600 model (Poodle).
-+
-+config SND_PXA2xx_SOC_TOSA
-+ tristate "SoC AC97 Audio support for Tosa"
-+ depends on SND_PXA2xx_SOC && MACH_TOSA
-+ select SND_PXA2xx_SOC_AC97
-+ help
-+ Say Y if you want to add support for SoC audio on Sharp
-+ Zaurus SL-C6000x models (Tosa).
-+
-+endmenu
-Index: linux-2.6-pxa-new/sound/soc/pxa/Makefile
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/Makefile
-@@ -0,0 +1,36 @@
-+# PXA Platform Support
-+snd-soc-pxa2xx-objs := pxa2xx-pcm.o
-+snd-soc-pxa2xx-ac97-objs := pxa2xx-ac97.o
-+snd-soc-pxa2xx-i2s-objs := pxa2xx-i2s.o
-+snd-soc-pxa2xx-ssp-objs := pxa2xx-ssp.o
-+
-+obj-$(CONFIG_SND_PXA2xx_SOC) += snd-soc-pxa2xx.o
-+obj-$(CONFIG_SND_PXA2xx_SOC_AC97) += snd-soc-pxa2xx-ac97.o
-+obj-$(CONFIG_SND_PXA2xx_SOC_I2S) += snd-soc-pxa2xx-i2s.o
-+obj-$(CONFIG_SND_PXA2xx_SOC_SSP) += snd-soc-pxa2xx-ssp.o
-+
-+# PXA Machine Support
-+snd-soc-corgi-objs := corgi.o
-+snd-soc-mainstone-wm8731-objs := mainstone_wm8731.o
-+snd-soc-mainstone-wm8753-objs := mainstone_wm8753.o
-+snd-soc-mainstone-wm8974-objs := mainstone_wm8974.o
-+snd-soc-mainstone-wm9713-objs := mainstone_wm9713.o
-+snd-soc-mainstone-wm9712-objs := mainstone_wm9712.o
-+snd-soc-mainstone-baseband-objs := mainstone_baseband.o
-+snd-soc-mainstone-bluetooth-objs := mainstone_bluetooth.o
-+snd-soc-poodle-objs := poodle.o
-+snd-soc-tosa-objs := tosa.o
-+snd-soc-spitz-objs := spitz.o
-+
-+obj-$(CONFIG_SND_PXA2xx_SOC_CORGI) += snd-soc-corgi.o
-+obj-$(CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8731) += snd-soc-mainstone-wm8731.o
-+obj-$(CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753) += snd-soc-mainstone-wm8753.o
-+obj-$(CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8974) += snd-soc-mainstone-wm8974.o
-+obj-$(CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713) += snd-soc-mainstone-wm9713.o
-+obj-$(CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712) += snd-soc-mainstone-wm9712.o
-+obj-$(CONFIG_SND_MAINSTONE_BASEBAND) += snd-soc-mainstone-baseband.o
-+obj-$(CONFIG_SND_MAINSTONE_BLUETOOTH) += snd-soc-mainstone-bluetooth.o
-+obj-$(CONFIG_SND_PXA2xx_SOC_POODLE) += snd-soc-poodle.o
-+obj-$(CONFIG_SND_PXA2xx_SOC_TOSA) += snd-soc-tosa.o
-+obj-$(CONFIG_SND_PXA2xx_SOC_SPITZ) += snd-soc-spitz.o
-+
-Index: linux-2.6-pxa-new/sound/soc/pxa/corgi.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/corgi.c
-@@ -0,0 +1,361 @@
-+/*
-+ * corgi.c -- SoC audio for Corgi
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Authors: Liam Girdwood <liam.girdwood@wolfsonmicro.com>
-+ * Richard Purdie <richard@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 30th Nov 2005 Initial version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/timer.h>
-+#include <linux/interrupt.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/hardware/scoop.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/corgi.h>
-+#include <asm/arch/audio.h>
-+
-+#include "../codecs/wm8731.h"
-+#include "pxa2xx-pcm.h"
-+
-+#define CORGI_HP 0
-+#define CORGI_MIC 1
-+#define CORGI_LINE 2
-+#define CORGI_HEADSET 3
-+#define CORGI_HP_OFF 4
-+#define CORGI_SPK_ON 0
-+#define CORGI_SPK_OFF 1
-+
-+ /* audio clock in Hz - rounded from 12.235MHz */
-+#define CORGI_AUDIO_CLOCK 12288000
-+
-+static int corgi_jack_func;
-+static int corgi_spk_func;
-+
-+static void corgi_ext_control(struct snd_soc_codec *codec)
-+{
-+ int spk = 0, mic = 0, line = 0, hp = 0, hs = 0;
-+
-+ /* set up jack connection */
-+ switch (corgi_jack_func) {
-+ case CORGI_HP:
-+ hp = 1;
-+ /* set = unmute headphone */
-+ set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-+ set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
-+ break;
-+ case CORGI_MIC:
-+ mic = 1;
-+ /* reset = mute headphone */
-+ reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-+ reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
-+ break;
-+ case CORGI_LINE:
-+ line = 1;
-+ reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-+ reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
-+ break;
-+ case CORGI_HEADSET:
-+ hs = 1;
-+ mic = 1;
-+ reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-+ set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
-+ break;
-+ }
-+
-+ if (corgi_spk_func == CORGI_SPK_ON)
-+ spk = 1;
-+
-+ /* set the enpoints to their new connetion states */
-+ snd_soc_dapm_set_endpoint(codec, "Ext Spk", spk);
-+ snd_soc_dapm_set_endpoint(codec, "Mic Jack", mic);
-+ snd_soc_dapm_set_endpoint(codec, "Line Jack", line);
-+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", hp);
-+ snd_soc_dapm_set_endpoint(codec, "Headset Jack", hs);
-+
-+ /* signal a DAPM event */
-+ snd_soc_dapm_sync_endpoints(codec);
-+}
-+
-+static int corgi_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_codec *codec = rtd->socdev->codec;
-+
-+ /* check the jack status at stream startup */
-+ corgi_ext_control(codec);
-+ return 0;
-+}
-+
-+/* we need to unmute the HP at shutdown as the mute burns power on corgi */
-+static int corgi_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_codec *codec = rtd->socdev->codec;
-+
-+ /* set = unmute headphone */
-+ set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-+ set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
-+ return 0;
-+}
-+
-+static struct snd_soc_ops corgi_ops = {
-+ .startup = corgi_startup,
-+ .shutdown = corgi_shutdown,
-+};
-+
-+static int corgi_get_jack(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = corgi_jack_func;
-+ return 0;
-+}
-+
-+static int corgi_set_jack(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+
-+ if (corgi_jack_func == ucontrol->value.integer.value[0])
-+ return 0;
-+
-+ corgi_jack_func = ucontrol->value.integer.value[0];
-+ corgi_ext_control(codec);
-+ return 1;
-+}
-+
-+static int corgi_get_spk(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = corgi_spk_func;
-+ return 0;
-+}
-+
-+static int corgi_set_spk(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+
-+ if (corgi_spk_func == ucontrol->value.integer.value[0])
-+ return 0;
-+
-+ corgi_spk_func = ucontrol->value.integer.value[0];
-+ corgi_ext_control(codec);
-+ return 1;
-+}
-+
-+static int corgi_amp_event(struct snd_soc_dapm_widget *w, int event)
-+{
-+ if (SND_SOC_DAPM_EVENT_ON(event))
-+ set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_APM_ON);
-+ else
-+ reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_APM_ON);
-+
-+ return 0;
-+}
-+
-+static int corgi_mic_event(struct snd_soc_dapm_widget *w, int event)
-+{
-+ if (SND_SOC_DAPM_EVENT_ON(event))
-+ set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MIC_BIAS);
-+ else
-+ reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MIC_BIAS);
-+
-+ return 0;
-+}
-+
-+/* corgi machine dapm widgets */
-+static const struct snd_soc_dapm_widget wm8731_dapm_widgets[] = {
-+SND_SOC_DAPM_HP("Headphone Jack", NULL),
-+SND_SOC_DAPM_MIC("Mic Jack", corgi_mic_event),
-+SND_SOC_DAPM_SPK("Ext Spk", corgi_amp_event),
-+SND_SOC_DAPM_LINE("Line Jack", NULL),
-+SND_SOC_DAPM_HP("Headset Jack", NULL),
-+};
-+
-+/* Corgi machine audio map (connections to the codec pins) */
-+static const char *audio_map[][3] = {
-+
-+ /* headset Jack - in = micin, out = LHPOUT*/
-+ {"Headset Jack", NULL, "LHPOUT"},
-+
-+ /* headphone connected to LHPOUT1, RHPOUT1 */
-+ {"Headphone Jack", NULL, "LHPOUT"},
-+ {"Headphone Jack", NULL, "RHPOUT"},
-+
-+ /* speaker connected to LOUT, ROUT */
-+ {"Ext Spk", NULL, "ROUT"},
-+ {"Ext Spk", NULL, "LOUT"},
-+
-+ /* mic is connected to MICIN (via right channel of headphone jack) */
-+ {"MICIN", NULL, "Mic Jack"},
-+
-+ /* Same as the above but no mic bias for line signals */
-+ {"MICIN", NULL, "Line Jack"},
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+static const char *jack_function[] = {"Headphone", "Mic", "Line", "Headset",
-+ "Off"};
-+static const char *spk_function[] = {"On", "Off"};
-+static const struct soc_enum corgi_enum[] = {
-+ SOC_ENUM_SINGLE_EXT(5, jack_function),
-+ SOC_ENUM_SINGLE_EXT(2, spk_function),
-+};
-+
-+static const struct snd_kcontrol_new wm8731_corgi_controls[] = {
-+ SOC_ENUM_EXT("Jack Function", corgi_enum[0], corgi_get_jack,
-+ corgi_set_jack),
-+ SOC_ENUM_EXT("Speaker Function", corgi_enum[1], corgi_get_spk,
-+ corgi_set_spk),
-+};
-+
-+/*
-+ * Logic for a wm8731 as connected on a Sharp SL-C7x0 Device
-+ */
-+static int corgi_wm8731_init(struct snd_soc_codec *codec)
-+{
-+ int i, err;
-+
-+ snd_soc_dapm_set_endpoint(codec, "LLINEIN", 0);
-+ snd_soc_dapm_set_endpoint(codec, "RLINEIN", 0);
-+
-+ /* Add corgi specific controls */
-+ for (i = 0; i < ARRAY_SIZE(wm8731_corgi_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8731_corgi_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ /* Add corgi specific widgets */
-+ for(i = 0; i < ARRAY_SIZE(wm8731_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8731_dapm_widgets[i]);
-+ }
-+
-+ /* Set up corgi specific audio path audio_map */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+ return 0;
-+}
-+
-+static unsigned int corgi_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+{
-+ if (info->bclk_master & SND_SOC_DAIFMT_CBS_CFS) {
-+ /* pxa2xx is i2s master */
-+ switch (info->rate) {
-+ case 44100:
-+ case 88200:
-+ /* configure codec digital filters for 44.1, 88.2 */
-+ rtd->codec_dai->config_sysclk(rtd->codec_dai, info,
-+ 11289600);
-+ break;
-+ default:
-+ /* configure codec digital filters for all other rates */
-+ rtd->codec_dai->config_sysclk(rtd->codec_dai, info,
-+ CORGI_AUDIO_CLOCK);
-+ break;
-+ }
-+ /* config pxa i2s as master */
-+ return rtd->cpu_dai->config_sysclk(rtd->cpu_dai, info,
-+ CORGI_AUDIO_CLOCK);
-+ } else {
-+ /* codec is i2s master -
-+ * only configure codec DAI clock and filters */
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info,
-+ CORGI_AUDIO_CLOCK);
-+ }
-+}
-+
-+/* corgi digital audio interface glue - connects codec <--> CPU */
-+static struct snd_soc_dai_link corgi_dai = {
-+ .name = "WM8731",
-+ .stream_name = "WM8731",
-+ .cpu_dai = &pxa_i2s_dai,
-+ .codec_dai = &wm8731_dai,
-+ .init = corgi_wm8731_init,
-+ .config_sysclk = corgi_config_sysclk,
-+};
-+
-+/* corgi audio machine driver */
-+static struct snd_soc_machine snd_soc_machine_corgi = {
-+ .name = "Corgi",
-+ .dai_link = &corgi_dai,
-+ .num_links = 1,
-+ .ops = &corgi_ops,
-+};
-+
-+/* corgi audio private data */
-+static struct wm8731_setup_data corgi_wm8731_setup = {
-+ .i2c_address = 0x1b,
-+};
-+
-+/* corgi audio subsystem */
-+static struct snd_soc_device corgi_snd_devdata = {
-+ .machine = &snd_soc_machine_corgi,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm8731,
-+ .codec_data = &corgi_wm8731_setup,
-+};
-+
-+static struct platform_device *corgi_snd_device;
-+
-+static int __init corgi_init(void)
-+{
-+ int ret;
-+
-+ if (!(machine_is_corgi() || machine_is_shepherd() || machine_is_husky()))
-+ return -ENODEV;
-+
-+ corgi_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!corgi_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(corgi_snd_device, &corgi_snd_devdata);
-+ corgi_snd_devdata.dev = &corgi_snd_device->dev;
-+ ret = platform_device_add(corgi_snd_device);
-+
-+ if (ret)
-+ platform_device_put(corgi_snd_device);
-+
-+ return ret;
-+}
-+
-+static void __exit corgi_exit(void)
-+{
-+ platform_device_unregister(corgi_snd_device);
-+}
-+
-+module_init(corgi_init);
-+module_exit(corgi_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Richard Purdie");
-+MODULE_DESCRIPTION("ALSA SoC Corgi");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/mainstone.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/mainstone.c
-@@ -0,0 +1,126 @@
-+/*
-+ * mainstone.c -- SoC audio for Mainstone
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * Mainstone audio amplifier code taken from arch/arm/mach-pxa/mainstone.c
-+ * Copyright: MontaVista Software Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 30th Oct 2005 Initial version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/device.h>
-+#include <linux/i2c.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/mainstone.h>
-+#include <asm/arch/audio.h>
-+
-+#include "../codecs/ac97.h"
-+#include "pxa2xx-pcm.h"
-+
-+static struct snd_soc_machine mainstone;
-+static long mst_audio_suspend_mask;
-+
-+static int mainstone_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ mst_audio_suspend_mask = MST_MSCWR2;
-+ MST_MSCWR2 |= MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_resume(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 &= mst_audio_suspend_mask | ~MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_probe(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 &= ~MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_remove(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 |= MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static struct snd_soc_machine_config codecs[] = {
-+{
-+ .name = "AC97",
-+ .sname = "AC97 HiFi",
-+ .iface = &pxa_ac97_interface[0],
-+},
-+{
-+ .name = "AC97 Aux",
-+ .sname = "AC97 Aux",
-+ .iface = &pxa_ac97_interface[1],
-+},
-+};
-+
-+static struct snd_soc_machine mainstone = {
-+ .name = "Mainstone",
-+ .probe = mainstone_probe,
-+ .remove = mainstone_remove,
-+ .suspend_pre = mainstone_suspend,
-+ .resume_post = mainstone_resume,
-+ .config = codecs,
-+ .nconfigs = ARRAY_SIZE(codecs),
-+};
-+
-+static struct snd_soc_device mainstone_snd_devdata = {
-+ .machine = &mainstone,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_ac97,
-+};
-+
-+static struct platform_device *mainstone_snd_device;
-+
-+static int __init mainstone_init(void)
-+{
-+ int ret;
-+
-+ mainstone_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!mainstone_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(mainstone_snd_device, &mainstone_snd_devdata);
-+ mainstone_snd_devdata.dev = &mainstone_snd_device->dev;
-+ ret = platform_device_add(mainstone_snd_device);
-+
-+ if (ret)
-+ platform_device_put(mainstone_snd_device);
-+
-+ return ret;
-+}
-+
-+static void __exit mainstone_exit(void)
-+{
-+ platform_device_unregister(mainstone_snd_device);
-+}
-+
-+module_init(mainstone_init);
-+module_exit(mainstone_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("ALSA SoC Mainstone");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/mainstone_baseband.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/mainstone_baseband.c
-@@ -0,0 +1,249 @@
-+/*
-+ * mainstone_baseband.c
-+ * Mainstone Example Baseband modem -- ALSA Soc Audio Layer
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 15th Apr 2006 Initial version.
-+ *
-+ * This is example code to demonstrate connecting a baseband modem to the PCM
-+ * DAI on the WM9713 codec on the Intel Mainstone platform. It is by no means
-+ * complete as it requires code to control the modem.
-+ *
-+ * The architecture consists of the WM9713 AC97 DAI connected to the PXA27x
-+ * AC97 controller and the WM9713 PCM DAI connected to the basebands DAI. The
-+ * baseband is controlled via a serial port. Audio is routed between the PXA27x
-+ * and the baseband via internal WM9713 analog paths.
-+ *
-+ * This driver is not the baseband modem driver. This driver only calls
-+ * functions from the Baseband driver to set up it's PCM DAI.
-+ *
-+ * It's intended to use this driver as follows:-
-+ *
-+ * 1. open() WM9713 PCM audio device.
-+ * 2. open() serial device (for AT commands).
-+ * 3. configure PCM audio device (rate etc) - sets up WM9713 PCM DAI,
-+ * this will also set up the baseband PCM DAI (via calling baseband driver).
-+ * 4. send any further AT commands to set up baseband.
-+ * 5. configure codec audio mixer paths.
-+ * 6. open(), configure and read/write AC97 audio device - to Tx/Rx voice
-+ *
-+ * The PCM audio device is opened but IO is never performed on it as the IO is
-+ * directly between the codec and the baseband (and not the CPU).
-+ *
-+ * TODO:
-+ * o Implement callbacks
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/audio.h>
-+#include <asm/arch/ssp.h>
-+
-+#include "../codecs/wm9713.h"
-+#include "pxa2xx-pcm.h"
-+
-+static struct snd_soc_machine mainstone;
-+
-+#define BASEBAND_XXX_DAIFMT \
-+ (SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBS_CFS |\
-+ SND_SOC_DAIFMT_NB_NF)
-+
-+#define BASEBAND_XXX_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+/*
-+ * PCM modes - 8k 16bit mono baseband modem is master
-+ */
-+static struct snd_soc_dai_mode mainstone_example_modes[] = {
-+ /* port master clk & frame modes */
-+ {BASEBAND_XXX_DAIFMT, SND_SOC_DAITDM_LRDW(0,0), SNDRV_PCM_FORMAT_S16_LE,
-+ SNDRV_PCM_RATE_8000, BASEBAND_XXX_DIR, SND_SOC_DAI_BFS_RATE, 256, 64},
-+};
-+
-+/* Do specific baseband PCM voice startup here */
-+static int mainstone_baseband_startup(struct snd_pcm_substream *substream)
-+{
-+ return 0;
-+}
-+
-+/* Do specific baseband PCM voice shutdown here */
-+static void mainstone_baseband_shutdown (struct snd_pcm_substream *substream)
-+{
-+}
-+
-+/* Do specific baseband modem PCM voice hw params init here */
-+static int mainstone_baseband_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ return 0;
-+}
-+
-+/* Do specific baseband modem PCM voice hw params free here */
-+static int mainstone_baseband_hw_free(struct snd_pcm_substream *substream)
-+{
-+ return 0;
-+}
-+
-+static struct snd_soc_cpu_dai mainstone_example_dai[] = {
-+ { .name = "Baseband",
-+ .id = 0,
-+ .type = SND_SOC_DAI_PCM,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .ops = {
-+ .startup = mainstone_baseband_startup,
-+ .shutdown = mainstone_baseband_shutdown,
-+ .hw_params = mainstone_baseband_hw_params,
-+ .hw_free = mainstone_baseband_hw_free,
-+ },
-+ .caps = {
-+ .mode = mainstone_example_modes,
-+ .num_modes = ARRAY_SIZE(mainstone_example_modes),},
-+ },
-+};
-+
-+/* do we need to do any thing on the mainstone when the stream is
-+ * started and stopped
-+ */
-+static int mainstone_startup(struct snd_pcm_substream *substream)
-+{
-+ return 0;
-+}
-+
-+static void mainstone_shutdown(struct snd_pcm_substream *substream)
-+{
-+}
-+
-+static struct snd_soc_ops mainstone_ops = {
-+ .startup = mainstone_startup,
-+ .shutdown = mainstone_shutdown,
-+};
-+
-+/* PM */
-+static int mainstone_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ return 0;
-+}
-+
-+static int mainstone_resume(struct platform_device *pdev)
-+{
-+ return 0;
-+}
-+
-+static int mainstone_probe(struct platform_device *pdev)
-+{
-+ return 0;
-+}
-+
-+static int mainstone_remove(struct platform_device *pdev)
-+{
-+ return 0;
-+}
-+
-+static int mainstone_wm9713_init(struct snd_soc_codec *codec)
-+{
-+ return 0;
-+}
-+
-+unsigned int mainstone_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+{
-+ /* wm8753 has pll that generates mclk from 13MHz xtal */
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info, 13000000);
-+}
-+
-+/* the physical audio connections between the WM9713, Baseband and pxa2xx */
-+static struct snd_soc_dai_link mainstone_dai[] = {
-+{
-+ .name = "AC97",
-+ .stream_name = "AC97 HiFi",
-+ .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-+ .codec_dai = &wm9713_dai[WM9713_DAI_AC97_HIFI],
-+ .init = mainstone_wm9713_init,
-+},
-+{
-+ .name = "AC97 Aux",
-+ .stream_name = "AC97 Aux",
-+ .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-+ .codec_dai = &wm9713_dai[WM9713_DAI_AC97_AUX],
-+},
-+{
-+ .name = "Baseband",
-+ .stream_name = "Voice",
-+ .cpu_dai = mainstone_example_dai,
-+ .codec_dai = &wm9713_dai[WM9713_DAI_PCM_VOICE],
-+ .config_sysclk = mainstone_config_sysclk,
-+},
-+};
-+
-+static struct snd_soc_machine mainstone = {
-+ .name = "Mainstone",
-+ .probe = mainstone_probe,
-+ .remove = mainstone_remove,
-+ .suspend_pre = mainstone_suspend,
-+ .resume_post = mainstone_resume,
-+ .ops = &mainstone_ops,
-+ .dai_link = mainstone_dai,
-+ .num_links = ARRAY_SIZE(mainstone_dai),
-+};
-+
-+static struct snd_soc_device mainstone_snd_ac97_devdata = {
-+ .machine = &mainstone,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm9713,
-+};
-+
-+static struct platform_device *mainstone_snd_ac97_device;
-+
-+static int __init mainstone_init(void)
-+{
-+ int ret;
-+
-+ mainstone_snd_ac97_device = platform_device_alloc("soc-audio", -1);
-+ if (!mainstone_snd_ac97_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(mainstone_snd_ac97_device, &mainstone_snd_ac97_devdata);
-+ mainstone_snd_ac97_devdata.dev = &mainstone_snd_ac97_device->dev;
-+
-+ if((ret = platform_device_add(mainstone_snd_ac97_device)) != 0)
-+ platform_device_put(mainstone_snd_ac97_device);
-+
-+ return ret;
-+}
-+
-+static void __exit mainstone_exit(void)
-+{
-+ platform_device_unregister(mainstone_snd_ac97_device);
-+}
-+
-+module_init(mainstone_init);
-+module_exit(mainstone_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("Mainstone Example Baseband PCM Interface");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/mainstone_bluetooth.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/mainstone_bluetooth.c
-@@ -0,0 +1,399 @@
-+/*
-+ * mainstone_bluetooth.c
-+ * Mainstone Example Bluetooth -- ALSA Soc Audio Layer
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 15th May 2006 Initial version.
-+ *
-+ * This is example code to demonstrate connecting a bluetooth codec to the PCM
-+ * DAI on the WM8753 codec on the Intel Mainstone platform. It is by no means
-+ * complete as it requires code to control the BT codec.
-+ *
-+ * The architecture consists of the WM8753 HIFI DAI connected to the PXA27x
-+ * I2S controller and the WM8753 PCM DAI connected to the bluetooth DAI. The
-+ * bluetooth codec and wm8753 are controlled via I2C. Audio is routed between
-+ * the PXA27x and the bluetooth via internal WM8753 analog paths.
-+ *
-+ * This example supports the following audio input/outputs.
-+ *
-+ * o Board mounted Mic and Speaker (spk has amplifier)
-+ * o Headphones via jack socket
-+ * o BT source and sink
-+ *
-+ * This driver is not the bluetooth codec driver. This driver only calls
-+ * functions from the Bluetooth driver to set up it's PCM DAI.
-+ *
-+ * It's intended to use the driver as follows:-
-+ *
-+ * 1. open() WM8753 PCM audio device.
-+ * 2. configure PCM audio device (rate etc) - sets up WM8753 PCM DAI,
-+ * this should also set up the BT codec DAI (via calling bt driver).
-+ * 3. configure codec audio mixer paths.
-+ * 4. open(), configure and read/write HIFI audio device - to Tx/Rx voice
-+ *
-+ * The PCM audio device is opened but IO is never performed on it as the IO is
-+ * directly between the codec and the BT codec (and not the CPU).
-+ *
-+ * TODO:
-+ * o Implement callbacks
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/audio.h>
-+#include <asm/arch/ssp.h>
-+
-+#include "../codecs/wm8753.h"
-+#include "pxa2xx-pcm.h"
-+
-+static struct snd_soc_machine mainstone;
-+
-+#define BLUETOOTH_DAIFMT \
-+ (SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBS_CFS |\
-+ SND_SOC_DAIFMT_NB_NF)
-+
-+#define BLUETOOTH_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+/*
-+ * PCM modes - 8k 16bit mono BT codec is master
-+ */
-+static struct snd_soc_dai_mode mainstone_bt_modes[] = {
-+ /* port master clk & frame modes */
-+ {BLUETOOTH_DAIFMT, SND_SOC_DAITDM_LRDW(0,0), SNDRV_PCM_FORMAT_S16_LE,
-+ SNDRV_PCM_RATE_8000, BLUETOOTH_DIR, SND_SOC_DAI_BFS_RATE, 256, 64},
-+};
-+
-+/* Do specific bluetooth PCM startup here */
-+static int mainstone_bt_startup(struct snd_pcm_substream *substream)
-+{
-+ return 0;
-+}
-+
-+/* Do specific bluetooth PCM shutdown here */
-+static void mainstone_bt_shutdown (struct snd_pcm_substream *substream)
-+{
-+}
-+
-+/* Do pecific bluetooth PCM hw params init here */
-+static int mainstone_bt_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ return 0;
-+}
-+
-+/* Do specific bluetooth PCM hw params free here */
-+static int mainstone_bt_hw_free(struct snd_pcm_substream *substream)
-+{
-+ return 0;
-+}
-+
-+static struct snd_soc_cpu_dai mainstone_bt_dai[] = {
-+ { .name = "Bluetooth",
-+ .id = 0,
-+ .type = SND_SOC_DAI_PCM,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .ops = {
-+ .startup = mainstone_bt_startup,
-+ .shutdown = mainstone_bt_shutdown,
-+ .hw_params = mainstone_bt_hw_params,
-+ .hw_free = mainstone_bt_hw_free,
-+ },
-+ .caps = {
-+ .mode = mainstone_bt_modes,
-+ .num_modes = ARRAY_SIZE(mainstone_bt_modes),},
-+ },
-+};
-+
-+/* do we need to do any thing on the mainstone when the stream is
-+ * started and stopped
-+ */
-+static int mainstone_startup(struct snd_pcm_substream *substream)
-+{
-+ return 0;
-+}
-+
-+static void mainstone_shutdown(struct snd_pcm_substream *substream)
-+{
-+}
-+
-+static struct snd_soc_ops mainstone_ops = {
-+ .startup = mainstone_startup,
-+ .shutdown = mainstone_shutdown,
-+};
-+
-+/* PM */
-+static int mainstone_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ return 0;
-+}
-+
-+static int mainstone_resume(struct platform_device *pdev)
-+{
-+ return 0;
-+}
-+
-+static int mainstone_probe(struct platform_device *pdev)
-+{
-+ return 0;
-+}
-+
-+static int mainstone_remove(struct platform_device *pdev)
-+{
-+ return 0;
-+}
-+
-+/*
-+ * Machine audio functions.
-+ *
-+ * The machine now has 3 extra audio controls.
-+ *
-+ * Jack function: Sets function (device plugged into Jack) to nothing (Off)
-+ * or Headphones.
-+ *
-+ * Mic function: Set the on board Mic to On or Off
-+ * Spk function: Set the on board Spk to On or Off
-+ *
-+ * example: BT playback (of far end) and capture (of near end)
-+ * Set Mic and Speaker to On, open BT alsa interface as above and set up
-+ * internal audio paths.
-+ */
-+
-+static int machine_jack_func = 0;
-+static int machine_spk_func = 0;
-+static int machine_mic_func = 0;
-+
-+static int machine_get_jack(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = machine_jack_func;
-+ return 0;
-+}
-+
-+static int machine_set_jack(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+ machine_jack_func = ucontrol->value.integer.value[0];
-+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", machine_jack_func);
-+ return 0;
-+}
-+
-+static int machine_get_spk(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = machine_spk_func;
-+ return 0;
-+}
-+
-+static int machine_set_spk(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+ machine_spk_func = ucontrol->value.integer.value[0];
-+ snd_soc_dapm_set_endpoint(codec, "Spk", machine_spk_func);
-+ return 0;
-+}
-+
-+static int machine_get_mic(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = machine_spk_func;
-+ return 0;
-+}
-+
-+static int machine_set_mic(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+ machine_spk_func = ucontrol->value.integer.value[0];
-+ snd_soc_dapm_set_endpoint(codec, "Mic", machine_mic_func);
-+ return 0;
-+}
-+
-+/* turns on board speaker amp on/off */
-+static int machine_amp_event(struct snd_soc_dapm_widget *w, int event)
-+{
-+#if 0
-+ if (SND_SOC_DAPM_EVENT_ON(event))
-+ /* on */
-+ else
-+ /* off */
-+#endif
-+ return 0;
-+}
-+
-+/* machine dapm widgets */
-+static const struct snd_soc_dapm_widget machine_dapm_widgets[] = {
-+SND_SOC_DAPM_HP("Headphone Jack", NULL),
-+SND_SOC_DAPM_SPK("Spk", machine_amp_event),
-+SND_SOC_DAPM_MIC("Mic", NULL),
-+};
-+
-+/* machine connections to the codec pins */
-+static const char* audio_map[][3] = {
-+
-+ /* headphone connected to LOUT1, ROUT1 */
-+ {"Headphone Jack", NULL, "LOUT"},
-+ {"Headphone Jack", NULL, "ROUT"},
-+
-+ /* speaker connected to LOUT2, ROUT2 */
-+ {"Spk", NULL, "ROUT2"},
-+ {"Spk", NULL, "LOUT2"},
-+
-+ /* mic is connected to MIC1 (via Mic Bias) */
-+ {"MIC1", NULL, "Mic Bias"},
-+ {"Mic Bias", NULL, "Mic"},
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+static const char* jack_function[] = {"Off", "Headphone"};
-+static const char* spk_function[] = {"Off", "On"};
-+static const char* mic_function[] = {"Off", "On"};
-+static const struct soc_enum machine_ctl_enum[] = {
-+ SOC_ENUM_SINGLE_EXT(2, jack_function),
-+ SOC_ENUM_SINGLE_EXT(2, spk_function),
-+ SOC_ENUM_SINGLE_EXT(2, mic_function),
-+};
-+
-+static const struct snd_kcontrol_new wm8753_machine_controls[] = {
-+ SOC_ENUM_EXT("Jack Function", machine_ctl_enum[0], machine_get_jack, machine_set_jack),
-+ SOC_ENUM_EXT("Speaker Function", machine_ctl_enum[1], machine_get_spk, machine_set_spk),
-+ SOC_ENUM_EXT("Mic Function", machine_ctl_enum[2], machine_get_mic, machine_set_mic),
-+};
-+
-+static int mainstone_wm8753_init(struct snd_soc_codec *codec)
-+{
-+ int i, err;
-+
-+ /* not used on this machine - e.g. will never be powered up */
-+ snd_soc_dapm_set_endpoint(codec, "OUT3", 0);
-+ snd_soc_dapm_set_endpoint(codec, "OUT4", 0);
-+ snd_soc_dapm_set_endpoint(codec, "MONO2", 0);
-+ snd_soc_dapm_set_endpoint(codec, "MONO1", 0);
-+ snd_soc_dapm_set_endpoint(codec, "LINE1", 0);
-+ snd_soc_dapm_set_endpoint(codec, "LINE2", 0);
-+ snd_soc_dapm_set_endpoint(codec, "RXP", 0);
-+ snd_soc_dapm_set_endpoint(codec, "RXN", 0);
-+ snd_soc_dapm_set_endpoint(codec, "MIC2", 0);
-+
-+ /* Add machine specific controls */
-+ for (i = 0; i < ARRAY_SIZE(wm8753_machine_controls); i++) {
-+ if ((err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8753_machine_controls[i],codec, NULL))) < 0)
-+ return err;
-+ }
-+
-+ /* Add machine specific widgets */
-+ for(i = 0; i < ARRAY_SIZE(machine_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &machine_dapm_widgets[i]);
-+ }
-+
-+ /* Set up machine specific audio path audio_mapnects */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0], audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+ return 0;
-+}
-+
-+/* this configures the clocking between the WM8753 and the BT codec */
-+unsigned int mainstone_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+{
-+ /* wm8753 has pll that generates mclk from 13MHz xtal */
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info, 13000000);
-+}
-+
-+static struct snd_soc_dai_link mainstone_dai[] = {
-+{ /* Hifi Playback - for similatious use with voice below */
-+ .name = "WM8753",
-+ .stream_name = "WM8753 HiFi",
-+ .cpu_dai = &pxa_i2s_dai,
-+ .codec_dai = &wm8753_dai[WM8753_DAI_HIFI],
-+ .init = mainstone_wm8753_init,
-+ .config_sysclk = mainstone_config_sysclk,
-+},
-+{ /* Voice via BT */
-+ .name = "Bluetooth",
-+ .stream_name = "Voice",
-+ .cpu_dai = mainstone_bt_dai,
-+ .codec_dai = &wm8753_dai[WM8753_DAI_VOICE],
-+ .config_sysclk = mainstone_config_sysclk,
-+},
-+};
-+
-+static struct snd_soc_machine mainstone = {
-+ .name = "Mainstone",
-+ .probe = mainstone_probe,
-+ .remove = mainstone_remove,
-+ .suspend_pre = mainstone_suspend,
-+ .resume_post = mainstone_resume,
-+ .ops = &mainstone_ops,
-+ .dai_link = mainstone_dai,
-+ .num_links = ARRAY_SIZE(mainstone_dai),
-+};
-+
-+static struct snd_soc_device mainstone_snd_wm8753_devdata = {
-+ .machine = &mainstone,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm8753,
-+};
-+
-+static struct platform_device *mainstone_snd_wm8753_device;
-+
-+static int __init mainstone_init(void)
-+{
-+ int ret;
-+
-+ mainstone_snd_wm8753_device = platform_device_alloc("soc-audio", -1);
-+ if (!mainstone_snd_wm8753_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(mainstone_snd_wm8753_device, &mainstone_snd_wm8753_devdata);
-+ mainstone_snd_wm8753_devdata.dev = &mainstone_snd_wm8753_device->dev;
-+
-+ if((ret = platform_device_add(mainstone_snd_wm8753_device)) != 0)
-+ platform_device_put(mainstone_snd_wm8753_device);
-+
-+ return ret;
-+}
-+
-+static void __exit mainstone_exit(void)
-+{
-+ platform_device_unregister(mainstone_snd_wm8753_device);
-+}
-+
-+module_init(mainstone_init);
-+module_exit(mainstone_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("Mainstone Example Bluetooth PCM Interface");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/mainstone_wm8731.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/mainstone_wm8731.c
-@@ -0,0 +1,156 @@
-+/*
-+ * mainstone.c -- SoC audio for Mainstone
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * Mainstone audio amplifier code taken from arch/arm/mach-pxa/mainstone.c
-+ * Copyright: MontaVista Software Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 5th June 2006 Initial version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/device.h>
-+#include <linux/i2c.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/mainstone.h>
-+#include <asm/arch/audio.h>
-+
-+#include "../codecs/wm8731.h"
-+#include "pxa2xx-pcm.h"
-+
-+static struct snd_soc_machine mainstone;
-+
-+
-+static const struct snd_soc_dapm_widget dapm_widgets[] = {
-+ SND_SOC_DAPM_MIC("Int Mic", NULL),
-+ SND_SOC_DAPM_SPK("Ext Spk", NULL),
-+};
-+
-+static const char* intercon[][3] = {
-+
-+ /* speaker connected to LHPOUT */
-+ {"Ext Spk", NULL, "LHPOUT"},
-+
-+ /* mic is connected to Mic Jack, with WM8731 Mic Bias */
-+ {"MICIN", NULL, "Mic Bias"},
-+ {"Mic Bias", NULL, "Int Mic"},
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+/*
-+ * Logic for a wm8731 as connected on a Endrelia ETI-B1 board.
-+ */
-+static int mainstone_wm8731_init(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+
-+ /* Add specific widgets */
-+ for(i = 0; i < ARRAY_SIZE(dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &dapm_widgets[i]);
-+ }
-+
-+ /* Set up specific audio path interconnects */
-+ for(i = 0; intercon[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, intercon[i][0], intercon[i][1], intercon[i][2]);
-+ }
-+
-+ /* not connected */
-+ snd_soc_dapm_set_endpoint(codec, "RLINEIN", 0);
-+ snd_soc_dapm_set_endpoint(codec, "LLINEIN", 0);
-+
-+ /* always connected */
-+ snd_soc_dapm_set_endpoint(codec, "Int Mic", 1);
-+ snd_soc_dapm_set_endpoint(codec, "Ext Spk", 1);
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+
-+ return 0;
-+}
-+
-+unsigned int mainstone_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+{
-+ /* we have a 12.288MHz crystal */
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info, 12288000);
-+}
-+
-+static struct snd_soc_dai_link mainstone_dai[] = {
-+{
-+ .name = "WM8731",
-+ .stream_name = "WM8731 HiFi",
-+ .cpu_dai = &pxa_i2s_dai,
-+ .codec_dai = &wm8731_dai,
-+ .init = mainstone_wm8731_init,
-+ .config_sysclk = mainstone_config_sysclk,
-+},
-+};
-+
-+static struct snd_soc_machine mainstone = {
-+ .name = "Mainstone",
-+ .dai_link = mainstone_dai,
-+ .num_links = ARRAY_SIZE(mainstone_dai),
-+};
-+
-+static struct wm8731_setup_data corgi_wm8731_setup = {
-+ .i2c_address = 0x1b,
-+};
-+
-+static struct snd_soc_device mainstone_snd_devdata = {
-+ .machine = &mainstone,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm8731,
-+ .codec_data = &corgi_wm8731_setup,
-+};
-+
-+static struct platform_device *mainstone_snd_device;
-+
-+static int __init mainstone_init(void)
-+{
-+ int ret;
-+
-+ mainstone_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!mainstone_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(mainstone_snd_device, &mainstone_snd_devdata);
-+ mainstone_snd_devdata.dev = &mainstone_snd_device->dev;
-+ ret = platform_device_add(mainstone_snd_device);
-+
-+ if (ret)
-+ platform_device_put(mainstone_snd_device);
-+
-+ return ret;
-+}
-+
-+static void __exit mainstone_exit(void)
-+{
-+ platform_device_unregister(mainstone_snd_device);
-+}
-+
-+module_init(mainstone_init);
-+module_exit(mainstone_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("ALSA SoC WM8731 Mainstone");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/mainstone_wm8753.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/mainstone_wm8753.c
-@@ -0,0 +1,226 @@
-+/*
-+ * mainstone.c -- SoC audio for Mainstone
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * Mainstone audio amplifier code taken from arch/arm/mach-pxa/mainstone.c
-+ * Copyright: MontaVista Software Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 30th Oct 2005 Initial version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/device.h>
-+#include <linux/i2c.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/mainstone.h>
-+#include <asm/arch/audio.h>
-+
-+#include "../codecs/wm8753.h"
-+#include "pxa2xx-pcm.h"
-+
-+static struct snd_soc_machine mainstone;
-+
-+static int mainstone_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if(rtd->cpu_dai->type == SND_SOC_DAI_PCM && rtd->cpu_dai->id == 1) {
-+ /* enable USB on the go MUX so we can use SSPFRM2 */
-+ MST_MSCWR2 |= MST_MSCWR2_USB_OTG_SEL;
-+ MST_MSCWR2 &= ~MST_MSCWR2_USB_OTG_RST;
-+ }
-+ return 0;
-+}
-+
-+static void mainstone_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if(rtd->cpu_dai->type == SND_SOC_DAI_PCM && rtd->cpu_dai->id == 1) {
-+ /* disable USB on the go MUX so we can use ttyS0 */
-+ MST_MSCWR2 &= ~MST_MSCWR2_USB_OTG_SEL;
-+ MST_MSCWR2 |= MST_MSCWR2_USB_OTG_RST;
-+ }
-+}
-+
-+static struct snd_soc_ops mainstone_ops = {
-+ .startup = mainstone_startup,
-+ .shutdown = mainstone_shutdown,
-+};
-+
-+static long mst_audio_suspend_mask;
-+
-+static int mainstone_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ mst_audio_suspend_mask = MST_MSCWR2;
-+ MST_MSCWR2 |= MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_resume(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 &= mst_audio_suspend_mask | ~MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_probe(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 &= ~MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_remove(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 |= MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+/* example machine audio_mapnections */
-+static const char* audio_map[][3] = {
-+
-+ /* mic is connected to mic1 - with bias */
-+ {"MIC1", NULL, "Mic Bias"},
-+ {"MIC1N", NULL, "Mic Bias"},
-+ {"Mic Bias", NULL, "Mic1 Jack"},
-+ {"Mic Bias", NULL, "Mic1 Jack"},
-+
-+ {"ACIN", NULL, "ACOP"},
-+ {NULL, NULL, NULL},
-+};
-+
-+/* headphone detect support on my board */
-+static const char * hp_pol[] = {"Headphone", "Speaker"};
-+static const struct soc_enum wm8753_enum =
-+ SOC_ENUM_SINGLE(WM8753_OUTCTL, 1, 2, hp_pol);
-+
-+static const struct snd_kcontrol_new wm8753_mainstone_controls[] = {
-+ SOC_SINGLE("Headphone Detect Switch", WM8753_OUTCTL, 6, 1, 0),
-+ SOC_ENUM("Headphone Detect Polarity", wm8753_enum),
-+};
-+
-+/*
-+ * This is an example machine initialisation for a wm8753 connected to a
-+ * Mainstone II. It is missing logic to detect hp/mic insertions and logic
-+ * to re-route the audio in such an event.
-+ */
-+static int mainstone_wm8753_init(struct snd_soc_codec *codec)
-+{
-+ int i, err;
-+
-+ /* set up mainstone codec pins */
-+ snd_soc_dapm_set_endpoint(codec, "RXP", 0);
-+ snd_soc_dapm_set_endpoint(codec, "RXN", 0);
-+ snd_soc_dapm_set_endpoint(codec, "MIC2", 0);
-+
-+ /* add mainstone specific controls */
-+ for (i = 0; i < ARRAY_SIZE(wm8753_mainstone_controls); i++) {
-+ if ((err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8753_mainstone_controls[i],codec, NULL))) < 0)
-+ return err;
-+ }
-+
-+ /* set up mainstone specific audio path audio_mapnects */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0], audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+ return 0;
-+}
-+
-+unsigned int mainstone_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+{
-+ /* wm8753 has pll that generates mclk from 13MHz xtal */
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info, 13000000);
-+}
-+
-+static struct snd_soc_dai_link mainstone_dai[] = {
-+{ /* Hifi Playback - for similatious use with voice below */
-+ .name = "WM8753",
-+ .stream_name = "WM8753 HiFi",
-+ .cpu_dai = &pxa_i2s_dai,
-+ .codec_dai = &wm8753_dai[WM8753_DAI_HIFI],
-+ .init = mainstone_wm8753_init,
-+ .config_sysclk = mainstone_config_sysclk,
-+},
-+{ /* Voice via BT */
-+ .name = "Bluetooth",
-+ .stream_name = "Voice",
-+ .cpu_dai = &pxa_ssp_dai[1],
-+ .codec_dai = &wm8753_dai[WM8753_DAI_VOICE],
-+ .config_sysclk = mainstone_config_sysclk,
-+},
-+};
-+
-+static struct snd_soc_machine mainstone = {
-+ .name = "Mainstone",
-+ .probe = mainstone_probe,
-+ .remove = mainstone_remove,
-+ .suspend_pre = mainstone_suspend,
-+ .resume_post = mainstone_resume,
-+ .ops = &mainstone_ops,
-+ .dai_link = mainstone_dai,
-+ .num_links = ARRAY_SIZE(mainstone_dai),
-+};
-+
-+static struct wm8753_setup_data mainstone_wm8753_setup = {
-+ .i2c_address = 0x1a,
-+};
-+
-+static struct snd_soc_device mainstone_snd_devdata = {
-+ .machine = &mainstone,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm8753,
-+ .codec_data = &mainstone_wm8753_setup,
-+};
-+
-+static struct platform_device *mainstone_snd_device;
-+
-+static int __init mainstone_init(void)
-+{
-+ int ret;
-+
-+ mainstone_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!mainstone_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(mainstone_snd_device, &mainstone_snd_devdata);
-+ mainstone_snd_devdata.dev = &mainstone_snd_device->dev;
-+ ret = platform_device_add(mainstone_snd_device);
-+
-+ if (ret)
-+ platform_device_put(mainstone_snd_device);
-+
-+ return ret;
-+}
-+
-+static void __exit mainstone_exit(void)
-+{
-+ platform_device_unregister(mainstone_snd_device);
-+}
-+
-+module_init(mainstone_init);
-+module_exit(mainstone_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("ALSA SoC WM8753 Mainstone");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/mainstone_wm8974.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/mainstone_wm8974.c
-@@ -0,0 +1,112 @@
-+/*
-+ * mainstone.c -- SoC audio for Mainstone
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * Mainstone audio amplifier code taken from arch/arm/mach-pxa/mainstone.c
-+ * Copyright: MontaVista Software Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 30th Oct 2005 Initial version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/device.h>
-+#include <linux/i2c.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/mainstone.h>
-+#include <asm/arch/audio.h>
-+
-+#include "../codecs/wm8974.h"
-+#include "pxa2xx-pcm.h"
-+
-+static struct snd_soc_machine mainstone;
-+
-+static int mainstone_wm8974_init(struct snd_soc_codec *codec)
-+{
-+ return 0;
-+}
-+
-+unsigned int mainstone_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+{
-+ /* we have a PLL */
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info, 12288000);
-+
-+}
-+
-+static struct snd_soc_dai_link mainstone_dai[] = {
-+{
-+ .name = "WM8974",
-+ .stream_name = "WM8974 HiFi",
-+ .cpu_dai = &pxa_i2s_dai,
-+ .codec_dai = &wm8974_dai,
-+ .init = mainstone_wm8974_init,
-+ .config_sysclk = mainstone_config_sysclk,
-+},
-+};
-+
-+static struct snd_soc_machine mainstone = {
-+ .name = "Mainstone",
-+ .dai_link = mainstone_dai,
-+ .num_links = ARRAY_SIZE(mainstone_dai),
-+};
-+
-+static struct wm8974_setup_data mainstone_wm8974_setup = {
-+ .i2c_address = 0x1a,
-+};
-+
-+static struct snd_soc_device mainstone_snd_devdata = {
-+ .machine = &mainstone,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm8974,
-+ .codec_data = &mainstone_wm8974_setup,
-+};
-+
-+static struct platform_device *mainstone_snd_device;
-+
-+static int __init mainstone_init(void)
-+{
-+ int ret;
-+
-+ mainstone_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!mainstone_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(mainstone_snd_device, &mainstone_snd_devdata);
-+ mainstone_snd_devdata.dev = &mainstone_snd_device->dev;
-+ ret = platform_device_add(mainstone_snd_device);
-+
-+ if (ret)
-+ platform_device_put(mainstone_snd_device);
-+
-+ return ret;
-+}
-+
-+static void __exit mainstone_exit(void)
-+{
-+ platform_device_unregister(mainstone_snd_device);
-+}
-+
-+module_init(mainstone_init);
-+module_exit(mainstone_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("ALSA SoC Mainstone");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/mainstone_wm9712.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/mainstone_wm9712.c
-@@ -0,0 +1,171 @@
-+/*
-+ * mainstone.c -- SoC audio for Mainstone
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * Mainstone audio amplifier code taken from arch/arm/mach-pxa/mainstone.c
-+ * Copyright: MontaVista Software Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 29th Jan 2006 Initial version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/device.h>
-+#include <linux/i2c.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/mainstone.h>
-+#include <asm/arch/audio.h>
-+
-+#include "../codecs/wm9712.h"
-+#include "pxa2xx-pcm.h"
-+
-+static struct snd_soc_machine mainstone;
-+static long mst_audio_suspend_mask;
-+
-+static int mainstone_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ mst_audio_suspend_mask = MST_MSCWR2;
-+ MST_MSCWR2 |= MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_resume(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 &= mst_audio_suspend_mask | ~MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_probe(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 &= ~MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_remove(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 |= MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+/* mainstone machine dapm widgets */
-+static const struct snd_soc_dapm_widget mainstone_dapm_widgets[] = {
-+ SND_SOC_DAPM_MIC("Mic (Internal)", NULL),
-+};
-+
-+/* example machine interconnections */
-+static const char* intercon[][3] = {
-+
-+ /* mic is connected to mic1 - with bias */
-+ {"MIC1", NULL, "Mic Bias"},
-+ {"Mic Bias", NULL, "Mic (Internal)"},
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+/*
-+ * This is an example machine initialisation for a wm8753 connected to a
-+ * Mainstone II. It is missing logic to detect hp/mic insertions and logic
-+ * to re-route the audio in such an event.
-+ */
-+static int mainstone_wm9712_init(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ /* set up mainstone codec pins */
-+ snd_soc_dapm_set_endpoint(codec, "RXP", 0);
-+ snd_soc_dapm_set_endpoint(codec, "RXN", 0);
-+ //snd_soc_dapm_set_endpoint(codec, "MIC2", 0);
-+
-+ /* Add mainstone specific widgets */
-+ for(i = 0; i < ARRAY_SIZE(mainstone_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &mainstone_dapm_widgets[i]);
-+ }
-+
-+ /* set up mainstone specific audio path interconnects */
-+ for(i = 0; intercon[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, intercon[i][0], intercon[i][1], intercon[i][2]);
-+ }
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+ return 0;
-+}
-+
-+static struct snd_soc_dai_link mainstone_dai[] = {
-+{
-+ .name = "AC97",
-+ .stream_name = "AC97 HiFi",
-+ .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-+ .codec_dai = &wm9712_dai[WM9712_DAI_AC97_HIFI],
-+ .init = mainstone_wm9712_init,
-+},
-+{
-+ .name = "AC97 Aux",
-+ .stream_name = "AC97 Aux",
-+ .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-+ .codec_dai = &wm9712_dai[WM9712_DAI_AC97_AUX],
-+},
-+};
-+
-+static struct snd_soc_machine mainstone = {
-+ .name = "Mainstone",
-+ .probe = mainstone_probe,
-+ .remove = mainstone_remove,
-+ .suspend_pre = mainstone_suspend,
-+ .resume_post = mainstone_resume,
-+ .dai_link = mainstone_dai,
-+ .num_links = ARRAY_SIZE(mainstone_dai),
-+};
-+
-+static struct snd_soc_device mainstone_snd_ac97_devdata = {
-+ .machine = &mainstone,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm9712,
-+};
-+
-+static struct platform_device *mainstone_snd_ac97_device;
-+
-+static int __init mainstone_init(void)
-+{
-+ int ret;
-+
-+ mainstone_snd_ac97_device = platform_device_alloc("soc-audio", -1);
-+ if (!mainstone_snd_ac97_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(mainstone_snd_ac97_device, &mainstone_snd_ac97_devdata);
-+ mainstone_snd_ac97_devdata.dev = &mainstone_snd_ac97_device->dev;
-+
-+ if((ret = platform_device_add(mainstone_snd_ac97_device)) != 0)
-+ platform_device_put(mainstone_snd_ac97_device);
-+
-+ return ret;
-+}
-+
-+static void __exit mainstone_exit(void)
-+{
-+ platform_device_unregister(mainstone_snd_ac97_device);
-+}
-+
-+module_init(mainstone_init);
-+module_exit(mainstone_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("ALSA SoC WM9712 Mainstone");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/mainstone_wm9713.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/mainstone_wm9713.c
-@@ -0,0 +1,263 @@
-+/*
-+ * mainstone.c -- SoC audio for Mainstone
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * Mainstone audio amplifier code taken from arch/arm/mach-pxa/mainstone.c
-+ * Copyright: MontaVista Software Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 29th Jan 2006 Initial version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/device.h>
-+#include <linux/i2c.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/mainstone.h>
-+#include <asm/arch/audio.h>
-+
-+#include "../codecs/wm9713.h"
-+#include "pxa2xx-pcm.h"
-+
-+static struct snd_soc_machine mainstone;
-+
-+static int mainstone_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if(rtd->cpu_dai->type == SND_SOC_DAI_PCM && rtd->cpu_dai->id == 1) {
-+ /* enable USB on the go MUX so we can use SSPFRM2 */
-+ MST_MSCWR2 |= MST_MSCWR2_USB_OTG_SEL;
-+ MST_MSCWR2 &= ~MST_MSCWR2_USB_OTG_RST;
-+ }
-+ return 0;
-+}
-+
-+static void mainstone_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if(rtd->cpu_dai->type == SND_SOC_DAI_PCM && rtd->cpu_dai->id == 1) {
-+ /* disable USB on the go MUX so we can use ttyS0 */
-+ MST_MSCWR2 &= ~MST_MSCWR2_USB_OTG_SEL;
-+ MST_MSCWR2 |= MST_MSCWR2_USB_OTG_RST;
-+ }
-+}
-+
-+static struct snd_soc_ops mainstone_ops = {
-+ .startup = mainstone_startup,
-+ .shutdown = mainstone_shutdown,
-+};
-+
-+static int test = 0;
-+static int get_test(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = test;
-+ return 0;
-+}
-+
-+static int set_test(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+
-+ test = ucontrol->value.integer.value[0];
-+ if(test) {
-+
-+ } else {
-+
-+ }
-+ return 0;
-+}
-+
-+static long mst_audio_suspend_mask;
-+
-+static int mainstone_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ mst_audio_suspend_mask = MST_MSCWR2;
-+ MST_MSCWR2 |= MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_resume(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 &= mst_audio_suspend_mask | ~MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_probe(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 &= ~MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static int mainstone_remove(struct platform_device *pdev)
-+{
-+ MST_MSCWR2 |= MST_MSCWR2_AC97_SPKROFF;
-+ return 0;
-+}
-+
-+static const char* test_function[] = {"Off", "On"};
-+static const struct soc_enum mainstone_enum[] = {
-+ SOC_ENUM_SINGLE_EXT(2, test_function),
-+};
-+
-+static const struct snd_kcontrol_new mainstone_controls[] = {
-+ SOC_ENUM_EXT("ATest Function", mainstone_enum[0], get_test, set_test),
-+};
-+
-+/* mainstone machine dapm widgets */
-+static const struct snd_soc_dapm_widget mainstone_dapm_widgets[] = {
-+ SND_SOC_DAPM_MIC("Mic 1", NULL),
-+ SND_SOC_DAPM_MIC("Mic 2", NULL),
-+ SND_SOC_DAPM_MIC("Mic 3", NULL),
-+};
-+
-+/* example machine audio_mapnections */
-+static const char* audio_map[][3] = {
-+
-+ /* mic is connected to mic1 - with bias */
-+ {"MIC1", NULL, "Mic Bias"},
-+ {"Mic Bias", NULL, "Mic 1"},
-+ /* mic is connected to mic2A - with bias */
-+ {"MIC2A", NULL, "Mic Bias"},
-+ {"Mic Bias", NULL, "Mic 2"},
-+ /* mic is connected to mic2B - with bias */
-+ {"MIC2B", NULL, "Mic Bias"},
-+ {"Mic Bias", NULL, "Mic 3"},
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+/*
-+ * This is an example machine initialisation for a wm9713 connected to a
-+ * Mainstone II. It is missing logic to detect hp/mic insertions and logic
-+ * to re-route the audio in such an event.
-+ */
-+static int mainstone_wm9713_init(struct snd_soc_codec *codec)
-+{
-+ int i, err;
-+
-+ /* set up mainstone codec pins */
-+ snd_soc_dapm_set_endpoint(codec, "RXP", 0);
-+ snd_soc_dapm_set_endpoint(codec, "RXN", 0);
-+ //snd_soc_dapm_set_endpoint(codec, "MIC2", 0);
-+
-+ /* Add test specific controls */
-+ for (i = 0; i < ARRAY_SIZE(mainstone_controls); i++) {
-+ if ((err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&mainstone_controls[i],codec, NULL))) < 0)
-+ return err;
-+ }
-+
-+ /* Add mainstone specific widgets */
-+ for(i = 0; i < ARRAY_SIZE(mainstone_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &mainstone_dapm_widgets[i]);
-+ }
-+
-+ /* set up mainstone specific audio path audio_mapnects */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0], audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+ return 0;
-+}
-+
-+/* configure the system audio clock */
-+unsigned int mainstone_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+{
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info, 24576000);
-+}
-+
-+static struct snd_soc_dai_link mainstone_dai[] = {
-+{
-+ .name = "AC97",
-+ .stream_name = "AC97 HiFi",
-+ .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-+ .codec_dai = &wm9713_dai[WM9713_DAI_AC97_HIFI],
-+ .init = mainstone_wm9713_init,
-+ .config_sysclk = mainstone_config_sysclk,
-+},
-+{
-+ .name = "AC97 Aux",
-+ .stream_name = "AC97 Aux",
-+ .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-+ .codec_dai = &wm9713_dai[WM9713_DAI_AC97_AUX],
-+ .config_sysclk = mainstone_config_sysclk,
-+},
-+{
-+ .name = "WM9713",
-+ .stream_name = "WM9713 Voice",
-+ .cpu_dai = &pxa_ssp_dai[PXA2XX_DAI_SSP2],
-+ .codec_dai = &wm9713_dai[WM9713_DAI_PCM_VOICE],
-+ .config_sysclk = mainstone_config_sysclk,
-+},
-+};
-+
-+static struct snd_soc_machine mainstone = {
-+ .name = "Mainstone",
-+ .probe = mainstone_probe,
-+ .remove = mainstone_remove,
-+ .suspend_pre = mainstone_suspend,
-+ .resume_post = mainstone_resume,
-+ .ops = &mainstone_ops,
-+ .dai_link = mainstone_dai,
-+ .num_links = ARRAY_SIZE(mainstone_dai),
-+};
-+
-+static struct snd_soc_device mainstone_snd_ac97_devdata = {
-+ .machine = &mainstone,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm9713,
-+};
-+
-+static struct platform_device *mainstone_snd_ac97_device;
-+
-+static int __init mainstone_init(void)
-+{
-+ int ret;
-+
-+ mainstone_snd_ac97_device = platform_device_alloc("soc-audio", -1);
-+ if (!mainstone_snd_ac97_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(mainstone_snd_ac97_device, &mainstone_snd_ac97_devdata);
-+ mainstone_snd_ac97_devdata.dev = &mainstone_snd_ac97_device->dev;
-+
-+ if((ret = platform_device_add(mainstone_snd_ac97_device)) != 0)
-+ platform_device_put(mainstone_snd_ac97_device);
-+
-+ return ret;
-+}
-+
-+static void __exit mainstone_exit(void)
-+{
-+ platform_device_unregister(mainstone_snd_ac97_device);
-+}
-+
-+module_init(mainstone_init);
-+module_exit(mainstone_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("ALSA SoC WM9713 Mainstone");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/poodle.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/poodle.c
-@@ -0,0 +1,329 @@
-+/*
-+ * poodle.c -- SoC audio for Poodle
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Authors: Liam Girdwood <liam.girdwood@wolfsonmicro.com>
-+ * Richard Purdie <richard@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/timer.h>
-+#include <linux/interrupt.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/hardware/locomo.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/poodle.h>
-+#include <asm/arch/audio.h>
-+
-+#include "../codecs/wm8731.h"
-+#include "pxa2xx-pcm.h"
-+
-+#define POODLE_HP 1
-+#define POODLE_HP_OFF 0
-+#define POODLE_SPK_ON 1
-+#define POODLE_SPK_OFF 0
-+
-+ /* audio clock in Hz - rounded from 12.235MHz */
-+#define POODLE_AUDIO_CLOCK 12288000
-+
-+static int poodle_jack_func;
-+static int poodle_spk_func;
-+
-+static void poodle_ext_control(struct snd_soc_codec *codec)
-+{
-+ int spk = 0;
-+
-+ /* set up jack connection */
-+ if (poodle_jack_func == POODLE_HP) {
-+ /* set = unmute headphone */
-+ locomo_gpio_write(&poodle_locomo_device.dev,
-+ POODLE_LOCOMO_GPIO_MUTE_L, 1);
-+ locomo_gpio_write(&poodle_locomo_device.dev,
-+ POODLE_LOCOMO_GPIO_MUTE_R, 1);
-+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1);
-+ } else {
-+ locomo_gpio_write(&poodle_locomo_device.dev,
-+ POODLE_LOCOMO_GPIO_MUTE_L, 0);
-+ locomo_gpio_write(&poodle_locomo_device.dev,
-+ POODLE_LOCOMO_GPIO_MUTE_R, 0);
-+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-+ }
-+
-+ if (poodle_spk_func == POODLE_SPK_ON)
-+ spk = 1;
-+
-+ /* set the enpoints to their new connetion states */
-+ snd_soc_dapm_set_endpoint(codec, "Ext Spk", spk);
-+
-+ /* signal a DAPM event */
-+ snd_soc_dapm_sync_endpoints(codec);
-+}
-+
-+static int poodle_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_codec *codec = rtd->socdev->codec;
-+
-+ /* check the jack status at stream startup */
-+ poodle_ext_control(codec);
-+ return 0;
-+}
-+
-+/* we need to unmute the HP at shutdown as the mute burns power on poodle */
-+static int poodle_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_codec *codec = rtd->socdev->codec;
-+
-+ /* set = unmute headphone */
-+ locomo_gpio_write(&poodle_locomo_device.dev,
-+ POODLE_LOCOMO_GPIO_MUTE_L, 1);
-+ locomo_gpio_write(&poodle_locomo_device.dev,
-+ POODLE_LOCOMO_GPIO_MUTE_R, 1);
-+ return 0;
-+}
-+
-+static struct snd_soc_ops poodle_ops = {
-+ .startup = poodle_startup,
-+ .shutdown = poodle_shutdown,
-+};
-+
-+static int poodle_get_jack(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = poodle_jack_func;
-+ return 0;
-+}
-+
-+static int poodle_set_jack(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+
-+ if (poodle_jack_func == ucontrol->value.integer.value[0])
-+ return 0;
-+
-+ poodle_jack_func = ucontrol->value.integer.value[0];
-+ poodle_ext_control(codec);
-+ return 1;
-+}
-+
-+static int poodle_get_spk(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = poodle_spk_func;
-+ return 0;
-+}
-+
-+static int poodle_set_spk(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+
-+ if (poodle_spk_func == ucontrol->value.integer.value[0])
-+ return 0;
-+
-+ poodle_spk_func = ucontrol->value.integer.value[0];
-+ poodle_ext_control(codec);
-+ return 1;
-+}
-+
-+static int poodle_amp_event(struct snd_soc_dapm_widget *w, int event)
-+{
-+ if (SND_SOC_DAPM_EVENT_ON(event))
-+ locomo_gpio_write(&poodle_locomo_device.dev,
-+ POODLE_LOCOMO_GPIO_AMP_ON, 0);
-+ else
-+ locomo_gpio_write(&poodle_locomo_device.dev,
-+ POODLE_LOCOMO_GPIO_AMP_ON, 1);
-+
-+ return 0;
-+}
-+
-+/* poodle machine dapm widgets */
-+static const struct snd_soc_dapm_widget wm8731_dapm_widgets[] = {
-+SND_SOC_DAPM_HP("Headphone Jack", NULL),
-+SND_SOC_DAPM_SPK("Ext Spk", poodle_amp_event),
-+};
-+
-+/* Corgi machine audio_mapnections to the codec pins */
-+static const char *audio_map[][3] = {
-+
-+ /* headphone connected to LHPOUT1, RHPOUT1 */
-+ {"Headphone Jack", NULL, "LHPOUT"},
-+ {"Headphone Jack", NULL, "RHPOUT"},
-+
-+ /* speaker connected to LOUT, ROUT */
-+ {"Ext Spk", NULL, "ROUT"},
-+ {"Ext Spk", NULL, "LOUT"},
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+static const char *jack_function[] = {"Off", "Headphone"};
-+static const char *spk_function[] = {"Off", "On"};
-+static const struct soc_enum poodle_enum[] = {
-+ SOC_ENUM_SINGLE_EXT(2, jack_function),
-+ SOC_ENUM_SINGLE_EXT(2, spk_function),
-+};
-+
-+static const snd_kcontrol_new_t wm8731_poodle_controls[] = {
-+ SOC_ENUM_EXT("Jack Function", poodle_enum[0], poodle_get_jack,
-+ poodle_set_jack),
-+ SOC_ENUM_EXT("Speaker Function", poodle_enum[1], poodle_get_spk,
-+ poodle_set_spk),
-+};
-+
-+/*
-+ * Logic for a wm8731 as connected on a Sharp SL-C7x0 Device
-+ */
-+static int poodle_wm8731_init(struct snd_soc_codec *codec)
-+{
-+ int i, err;
-+
-+ snd_soc_dapm_set_endpoint(codec, "LLINEIN", 0);
-+ snd_soc_dapm_set_endpoint(codec, "RLINEIN", 0);
-+ snd_soc_dapm_set_endpoint(codec, "MICIN", 1);
-+
-+ /* Add poodle specific controls */
-+ for (i = 0; i < ARRAY_SIZE(wm8731_poodle_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8731_poodle_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ /* Add poodle specific widgets */
-+ for (i = 0; i < ARRAY_SIZE(wm8731_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8731_dapm_widgets[i]);
-+ }
-+
-+ /* Set up poodle specific audio path audio_map */
-+ for (i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+ return 0;
-+}
-+
-+static unsigned int poodle_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+{
-+ if (info->bclk_master & SND_SOC_DAIFMT_CBS_CFS) {
-+ /* pxa2xx is i2s master */
-+ switch (info->rate) {
-+ case 44100:
-+ case 88200:
-+ /* configure codec digital filters for 44.1, 88.2 */
-+ rtd->codec_dai->config_sysclk(rtd->codec_dai, info,
-+ 11289600);
-+ break;
-+ default:
-+ /* configure codec digital filters for all other rates */
-+ rtd->codec_dai->config_sysclk(rtd->codec_dai, info,
-+ POODLE_AUDIO_CLOCK);
-+ break;
-+ }
-+ return rtd->cpu_dai->config_sysclk(rtd->cpu_dai, info,
-+ POODLE_AUDIO_CLOCK);
-+ } else {
-+ /* codec is i2s master -
-+ * only configure codec DAI clock and filters */
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info,
-+ POODLE_AUDIO_CLOCK);
-+ }
-+}
-+
-+/* poodle digital audio interface glue - connects codec <--> CPU */
-+static struct snd_soc_dai_link poodle_dai = {
-+ .name = "WM8731",
-+ .stream_name = "WM8731",
-+ .cpu_dai = &pxa_i2s_dai,
-+ .codec_dai = &wm8731_dai,
-+ .init = poodle_wm8731_init,
-+ .config_sysclk = poodle_config_sysclk,
-+};
-+
-+/* poodle audio machine driver */
-+static struct snd_soc_machine snd_soc_machine_poodle = {
-+ .name = "Poodle",
-+ .dai_link = &poodle_dai,
-+ .num_links = 1,
-+ .ops = &poodle_ops,
-+};
-+
-+/* poodle audio private data */
-+static struct wm8731_setup_data poodle_wm8731_setup = {
-+ .i2c_address = 0x1b,
-+};
-+
-+/* poodle audio subsystem */
-+static struct snd_soc_device poodle_snd_devdata = {
-+ .machine = &snd_soc_machine_poodle,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm8731,
-+ .codec_data = &poodle_wm8731_setup,
-+};
-+
-+static struct platform_device *poodle_snd_device;
-+
-+static int __init poodle_init(void)
-+{
-+ int ret;
-+
-+ if (!machine_is_poodle())
-+ return -ENODEV;
-+
-+ locomo_gpio_set_dir(&poodle_locomo_device.dev,
-+ POODLE_LOCOMO_GPIO_AMP_ON, 0);
-+ /* should we mute HP at startup - burning power ?*/
-+ locomo_gpio_set_dir(&poodle_locomo_device.dev,
-+ POODLE_LOCOMO_GPIO_MUTE_L, 0);
-+ locomo_gpio_set_dir(&poodle_locomo_device.dev,
-+ POODLE_LOCOMO_GPIO_MUTE_R, 0);
-+
-+ poodle_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!poodle_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(poodle_snd_device, &poodle_snd_devdata);
-+ poodle_snd_devdata.dev = &poodle_snd_device->dev;
-+ ret = platform_device_add(poodle_snd_device);
-+
-+ if (ret)
-+ platform_device_put(poodle_snd_device);
-+
-+ return ret;
-+}
-+
-+static void __exit poodle_exit(void)
-+{
-+ platform_device_unregister(poodle_snd_device);
-+}
-+
-+module_init(poodle_init);
-+module_exit(poodle_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Richard Purdie");
-+MODULE_DESCRIPTION("ALSA SoC Poodle");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/pxa2xx-ac97.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/pxa2xx-ac97.c
-@@ -0,0 +1,437 @@
-+/*
-+ * linux/sound/pxa2xx-ac97.c -- AC97 support for the Intel PXA2xx chip.
-+ *
-+ * Author: Nicolas Pitre
-+ * Created: Dec 02, 2004
-+ * Copyright: MontaVista Software Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/interrupt.h>
-+#include <linux/wait.h>
-+#include <linux/delay.h>
-+
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/ac97_codec.h>
-+#include <sound/initval.h>
-+#include <sound/soc.h>
-+
-+#include <asm/irq.h>
-+#include <linux/mutex.h>
-+#include <asm/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/audio.h>
-+
-+#include "pxa2xx-pcm.h"
-+
-+static DEFINE_MUTEX(car_mutex);
-+static DECLARE_WAIT_QUEUE_HEAD(gsr_wq);
-+static volatile long gsr_bits;
-+
-+#define AC97_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define AC97_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000)
-+
-+/* may need to expand this */
-+static struct snd_soc_dai_mode pxa2xx_ac97_modes[] = {
-+ {
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = AC97_RATES,
-+ .pcmdir = AC97_DIR,
-+ },
-+};
-+
-+/*
-+ * Beware PXA27x bugs:
-+ *
-+ * o Slot 12 read from modem space will hang controller.
-+ * o CDONE, SDONE interrupt fails after any slot 12 IO.
-+ *
-+ * We therefore have an hybrid approach for waiting on SDONE (interrupt or
-+ * 1 jiffy timeout if interrupt never comes).
-+ */
-+
-+static unsigned short pxa2xx_ac97_read(struct snd_ac97 *ac97,
-+ unsigned short reg)
-+{
-+ unsigned short val = -1;
-+ volatile u32 *reg_addr;
-+
-+ mutex_lock(&car_mutex);
-+
-+ /* set up primary or secondary codec/modem space */
-+#ifdef CONFIG_PXA27x
-+ reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
-+#else
-+ if (reg == AC97_GPIO_STATUS)
-+ reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE;
-+ else
-+ reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
-+#endif
-+ reg_addr += (reg >> 1);
-+
-+#ifndef CONFIG_PXA27x
-+ if (reg == AC97_GPIO_STATUS) {
-+ /* read from controller cache */
-+ val = *reg_addr;
-+ goto out;
-+ }
-+#endif
-+
-+ /* start read access across the ac97 link */
-+ GSR = GSR_CDONE | GSR_SDONE;
-+ gsr_bits = 0;
-+ val = *reg_addr;
-+
-+ wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_SDONE, 1);
-+ if (!((GSR | gsr_bits) & GSR_SDONE)) {
-+ printk(KERN_ERR "%s: read error (ac97_reg=%x GSR=%#lx)\n",
-+ __FUNCTION__, reg, GSR | gsr_bits);
-+ val = -1;
-+ goto out;
-+ }
-+
-+ /* valid data now */
-+ GSR = GSR_CDONE | GSR_SDONE;
-+ gsr_bits = 0;
-+ val = *reg_addr;
-+ /* but we've just started another cycle... */
-+ wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_SDONE, 1);
-+
-+out: mutex_unlock(&car_mutex);
-+ return val;
-+}
-+
-+static void pxa2xx_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
-+ unsigned short val)
-+{
-+ volatile u32 *reg_addr;
-+
-+ mutex_lock(&car_mutex);
-+
-+ /* set up primary or secondary codec/modem space */
-+#ifdef CONFIG_PXA27x
-+ reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
-+#else
-+ if (reg == AC97_GPIO_STATUS)
-+ reg_addr = ac97->num ? &SMC_REG_BASE : &PMC_REG_BASE;
-+ else
-+ reg_addr = ac97->num ? &SAC_REG_BASE : &PAC_REG_BASE;
-+#endif
-+ reg_addr += (reg >> 1);
-+
-+ GSR = GSR_CDONE | GSR_SDONE;
-+ gsr_bits = 0;
-+ *reg_addr = val;
-+ wait_event_timeout(gsr_wq, (GSR | gsr_bits) & GSR_CDONE, 1);
-+ if (!((GSR | gsr_bits) & GSR_CDONE))
-+ printk(KERN_ERR "%s: write error (ac97_reg=%x GSR=%#lx)\n",
-+ __FUNCTION__, reg, GSR | gsr_bits);
-+
-+ mutex_unlock(&car_mutex);
-+}
-+
-+static void pxa2xx_ac97_warm_reset(struct snd_ac97 *ac97)
-+{
-+ gsr_bits = 0;
-+
-+#ifdef CONFIG_PXA27x
-+ /* warm reset broken on Bulverde,
-+ so manually keep AC97 reset high */
-+ pxa_gpio_mode(113 | GPIO_OUT | GPIO_DFLT_HIGH);
-+ udelay(10);
-+ GCR |= GCR_WARM_RST;
-+ pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
-+ udelay(500);
-+#else
-+ GCR |= GCR_WARM_RST | GCR_PRIRDY_IEN | GCR_SECRDY_IEN;
-+ wait_event_timeout(gsr_wq, gsr_bits & (GSR_PCR | GSR_SCR), 1);
-+#endif
-+
-+ if (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR)))
-+ printk(KERN_INFO "%s: warm reset timeout (GSR=%#lx)\n",
-+ __FUNCTION__, gsr_bits);
-+
-+ GCR &= ~(GCR_PRIRDY_IEN|GCR_SECRDY_IEN);
-+ GCR |= GCR_SDONE_IE|GCR_CDONE_IE;
-+}
-+
-+static void pxa2xx_ac97_cold_reset(struct snd_ac97 *ac97)
-+{
-+ GCR &= GCR_COLD_RST; /* clear everything but nCRST */
-+ GCR &= ~GCR_COLD_RST; /* then assert nCRST */
-+
-+ gsr_bits = 0;
-+#ifdef CONFIG_PXA27x
-+ /* PXA27x Developers Manual section 13.5.2.2.1 */
-+ pxa_set_cken(1 << 31, 1);
-+ udelay(5);
-+ pxa_set_cken(1 << 31, 0);
-+ GCR = GCR_COLD_RST;
-+ udelay(50);
-+#else
-+ GCR = GCR_COLD_RST;
-+ GCR |= GCR_CDONE_IE|GCR_SDONE_IE;
-+ wait_event_timeout(gsr_wq, gsr_bits & (GSR_PCR | GSR_SCR), 1);
-+#endif
-+
-+ if (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR)))
-+ printk(KERN_INFO "%s: cold reset timeout (GSR=%#lx)\n",
-+ __FUNCTION__, gsr_bits);
-+
-+ GCR &= ~(GCR_PRIRDY_IEN|GCR_SECRDY_IEN);
-+ GCR |= GCR_SDONE_IE|GCR_CDONE_IE;
-+}
-+
-+static irqreturn_t pxa2xx_ac97_irq(int irq, void *dev_id)
-+{
-+ long status;
-+
-+ status = GSR;
-+ if (status) {
-+ GSR = status;
-+ gsr_bits |= status;
-+ wake_up(&gsr_wq);
-+
-+#ifdef CONFIG_PXA27x
-+ /* Although we don't use those we still need to clear them
-+ since they tend to spuriously trigger when MMC is used
-+ (hardware bug? go figure)... */
-+ MISR = MISR_EOC;
-+ PISR = PISR_EOC;
-+ MCSR = MCSR_EOC;
-+#endif
-+
-+ return IRQ_HANDLED;
-+ }
-+
-+ return IRQ_NONE;
-+}
-+
-+struct snd_ac97_bus_ops soc_ac97_ops = {
-+ .read = pxa2xx_ac97_read,
-+ .write = pxa2xx_ac97_write,
-+ .warm_reset = pxa2xx_ac97_warm_reset,
-+ .reset = pxa2xx_ac97_cold_reset,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_stereo_out = {
-+ .name = "AC97 PCM Stereo out",
-+ .dev_addr = __PREG(PCDR),
-+ .drcmr = &DRCMRTXPCDR,
-+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-+ DCMD_BURST32 | DCMD_WIDTH4,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_stereo_in = {
-+ .name = "AC97 PCM Stereo in",
-+ .dev_addr = __PREG(PCDR),
-+ .drcmr = &DRCMRRXPCDR,
-+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-+ DCMD_BURST32 | DCMD_WIDTH4,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_aux_mono_out = {
-+ .name = "AC97 Aux PCM (Slot 5) Mono out",
-+ .dev_addr = __PREG(MODR),
-+ .drcmr = &DRCMRTXMODR,
-+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-+ DCMD_BURST16 | DCMD_WIDTH2,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_aux_mono_in = {
-+ .name = "AC97 Aux PCM (Slot 5) Mono in",
-+ .dev_addr = __PREG(MODR),
-+ .drcmr = &DRCMRRXMODR,
-+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-+ DCMD_BURST16 | DCMD_WIDTH2,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ac97_pcm_mic_mono_in = {
-+ .name = "AC97 Mic PCM (Slot 6) Mono in",
-+ .dev_addr = __PREG(MCDR),
-+ .drcmr = &DRCMRRXMCDR,
-+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-+ DCMD_BURST16 | DCMD_WIDTH2,
-+};
-+
-+#ifdef CONFIG_PM
-+static int pxa2xx_ac97_suspend(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ GCR |= GCR_ACLINK_OFF;
-+ pxa_set_cken(CKEN2_AC97, 0);
-+ return 0;
-+}
-+
-+static int pxa2xx_ac97_resume(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
-+ pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
-+ pxa_gpio_mode(GPIO28_BITCLK_AC97_MD);
-+ pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD);
-+#ifdef CONFIG_PXA27x
-+ /* Use GPIO 113 as AC97 Reset on Bulverde */
-+ pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
-+#endif
-+ pxa_set_cken(CKEN2_AC97, 1);
-+ return 0;
-+}
-+
-+#else
-+#define pxa2xx_ac97_suspend NULL
-+#define pxa2xx_ac97_resume NULL
-+#endif
-+
-+static int pxa2xx_ac97_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+
-+ ret = request_irq(IRQ_AC97, pxa2xx_ac97_irq, 0, "AC97", NULL);
-+ if (ret < 0)
-+ goto err;
-+
-+ pxa_gpio_mode(GPIO31_SYNC_AC97_MD);
-+ pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD);
-+ pxa_gpio_mode(GPIO28_BITCLK_AC97_MD);
-+ pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD);
-+#ifdef CONFIG_PXA27x
-+ /* Use GPIO 113 as AC97 Reset on Bulverde */
-+ pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
-+#endif
-+ pxa_set_cken(CKEN2_AC97, 1);
-+ return 0;
-+
-+ err:
-+ if (CKEN & CKEN2_AC97) {
-+ GCR |= GCR_ACLINK_OFF;
-+ free_irq(IRQ_AC97, NULL);
-+ pxa_set_cken(CKEN2_AC97, 0);
-+ }
-+ return ret;
-+}
-+
-+static void pxa2xx_ac97_remove(struct platform_device *pdev)
-+{
-+ GCR |= GCR_ACLINK_OFF;
-+ free_irq(IRQ_AC97, NULL);
-+ pxa_set_cken(CKEN2_AC97, 0);
-+}
-+
-+static int pxa2xx_ac97_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ rtd->cpu_dai->dma_data = &pxa2xx_ac97_pcm_stereo_out;
-+ else
-+ rtd->cpu_dai->dma_data = &pxa2xx_ac97_pcm_stereo_in;
-+
-+ return 0;
-+}
-+
-+static int pxa2xx_ac97_hw_aux_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ rtd->cpu_dai->dma_data = &pxa2xx_ac97_pcm_aux_mono_out;
-+ else
-+ rtd->cpu_dai->dma_data = &pxa2xx_ac97_pcm_aux_mono_in;
-+
-+ return 0;
-+}
-+
-+static int pxa2xx_ac97_hw_mic_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ return -ENODEV;
-+ else
-+ rtd->cpu_dai->dma_data = &pxa2xx_ac97_pcm_mic_mono_in;
-+
-+ return 0;
-+}
-+
-+/*
-+ * There is only 1 physical AC97 interface for pxa2xx, but it
-+ * has extra fifo's that can be used for aux DACs and ADCs.
-+ */
-+struct snd_soc_cpu_dai pxa_ac97_dai[] = {
-+{
-+ .name = "pxa2xx-ac97",
-+ .id = 0,
-+ .type = SND_SOC_DAI_AC97,
-+ .probe = pxa2xx_ac97_probe,
-+ .remove = pxa2xx_ac97_remove,
-+ .suspend = pxa2xx_ac97_suspend,
-+ .resume = pxa2xx_ac97_resume,
-+ .playback = {
-+ .stream_name = "AC97 Playback",
-+ .channels_min = 2,
-+ .channels_max = 2,},
-+ .capture = {
-+ .stream_name = "AC97 Capture",
-+ .channels_min = 2,
-+ .channels_max = 2,},
-+ .ops = {
-+ .hw_params = pxa2xx_ac97_hw_params,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(pxa2xx_ac97_modes),
-+ .mode = pxa2xx_ac97_modes,},
-+},
-+{
-+ .name = "pxa2xx-ac97-aux",
-+ .id = 1,
-+ .type = SND_SOC_DAI_AC97,
-+ .playback = {
-+ .stream_name = "AC97 Aux Playback",
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .capture = {
-+ .stream_name = "AC97 Aux Capture",
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .ops = {
-+ .hw_params = pxa2xx_ac97_hw_aux_params,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(pxa2xx_ac97_modes),
-+ .mode = pxa2xx_ac97_modes,},
-+},
-+{
-+ .name = "pxa2xx-ac97-mic",
-+ .id = 2,
-+ .type = SND_SOC_DAI_AC97,
-+ .capture = {
-+ .stream_name = "AC97 Mic Capture",
-+ .channels_min = 1,
-+ .channels_max = 1,},
-+ .ops = {
-+ .hw_params = pxa2xx_ac97_hw_mic_params,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(pxa2xx_ac97_modes),
-+ .mode = pxa2xx_ac97_modes,},},
-+};
-+
-+EXPORT_SYMBOL_GPL(pxa_ac97_dai);
-+EXPORT_SYMBOL_GPL(soc_ac97_ops);
-+
-+MODULE_AUTHOR("Nicolas Pitre");
-+MODULE_DESCRIPTION("AC97 driver for the Intel PXA2xx chip");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/pxa2xx-i2s.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/pxa2xx-i2s.c
-@@ -0,0 +1,354 @@
-+/*
-+ * pxa2xx-i2s.c -- ALSA Soc Audio Layer
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 12th Aug 2005 Initial version.
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/device.h>
-+#include <linux/delay.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/initval.h>
-+#include <sound/soc.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/audio.h>
-+
-+#include "pxa2xx-pcm.h"
-+
-+/* used to disable sysclk if external crystal is used */
-+static int extclk;
-+module_param(extclk, int, 0);
-+MODULE_PARM_DESC(extclk, "set to 1 to disable pxa2xx i2s sysclk");
-+
-+struct pxa_i2s_port {
-+ u32 sadiv;
-+ u32 sacr0;
-+ u32 sacr1;
-+ u32 saimr;
-+ int master;
-+};
-+static struct pxa_i2s_port pxa_i2s;
-+
-+#define PXA_I2S_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF)
-+
-+#define PXA_I2S_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define PXA_I2S_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
-+
-+/* priv is divider */
-+static struct snd_soc_dai_mode pxa2xx_i2s_modes[] = {
-+ /* pxa2xx I2S frame and clock master modes */
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0x48,
-+ },
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0x34,
-+ },
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0x24,
-+ },
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0x1a,
-+ },
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0xd,
-+ },
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = PXA_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBD(4),
-+ .priv = 0xc,
-+ },
-+
-+ /* pxa2xx I2S frame master and clock slave mode */
-+ {
-+ .fmt = PXA_I2S_DAIFMT | SND_SOC_DAIFMT_CBM_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = PXA_I2S_RATES,
-+ .pcmdir = PXA_I2S_DIR,
-+ .fs = SND_SOC_FS_ALL,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .bfs = 64,
-+ .priv = 0x48,
-+ },
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_i2s_pcm_stereo_out = {
-+ .name = "I2S PCM Stereo out",
-+ .dev_addr = __PREG(SADR),
-+ .drcmr = &DRCMRTXSADR,
-+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-+ DCMD_BURST32 | DCMD_WIDTH4,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_i2s_pcm_stereo_in = {
-+ .name = "I2S PCM Stereo in",
-+ .dev_addr = __PREG(SADR),
-+ .drcmr = &DRCMRRXSADR,
-+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-+ DCMD_BURST32 | DCMD_WIDTH4,
-+};
-+
-+static struct pxa2xx_gpio gpio_bus[] = {
-+ { /* I2S SoC Slave */
-+ .rx = GPIO29_SDATA_IN_I2S_MD,
-+ .tx = GPIO30_SDATA_OUT_I2S_MD,
-+ .clk = GPIO28_BITCLK_IN_I2S_MD,
-+ .frm = GPIO31_SYNC_I2S_MD,
-+ },
-+ { /* I2S SoC Master */
-+#ifdef CONFIG_PXA27x
-+ .sys = GPIO113_I2S_SYSCLK_MD,
-+#else
-+ .sys = GPIO32_SYSCLK_I2S_MD,
-+#endif
-+ .rx = GPIO29_SDATA_IN_I2S_MD,
-+ .tx = GPIO30_SDATA_OUT_I2S_MD,
-+ .clk = GPIO28_BITCLK_OUT_I2S_MD,
-+ .frm = GPIO31_SYNC_I2S_MD,
-+ },
-+};
-+
-+static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if (!rtd->cpu_dai->active) {
-+ SACR0 |= SACR0_RST;
-+ SACR0 = 0;
-+ }
-+
-+ return 0;
-+}
-+
-+/* wait for I2S controller to be ready */
-+static int pxa_i2s_wait(void)
-+{
-+ int i;
-+
-+ /* flush the Rx FIFO */
-+ for(i = 0; i < 16; i++)
-+ SADR;
-+ return 0;
-+}
-+
-+static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ pxa_i2s.master = 0;
-+ if (rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CBS_CFS)
-+ pxa_i2s.master = 1;
-+
-+ if (pxa_i2s.master && !extclk)
-+ pxa_gpio_mode(gpio_bus[pxa_i2s.master].sys);
-+
-+ pxa_gpio_mode(gpio_bus[pxa_i2s.master].rx);
-+ pxa_gpio_mode(gpio_bus[pxa_i2s.master].tx);
-+ pxa_gpio_mode(gpio_bus[pxa_i2s.master].frm);
-+ pxa_gpio_mode(gpio_bus[pxa_i2s.master].clk);
-+ pxa_set_cken(CKEN8_I2S, 1);
-+ pxa_i2s_wait();
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ rtd->cpu_dai->dma_data = &pxa2xx_i2s_pcm_stereo_out;
-+ else
-+ rtd->cpu_dai->dma_data = &pxa2xx_i2s_pcm_stereo_in;
-+
-+ /* is port used by another stream */
-+ if (!(SACR0 & SACR0_ENB)) {
-+
-+ SACR0 = 0;
-+ SACR1 = 0;
-+ if (pxa_i2s.master)
-+ SACR0 |= SACR0_BCKD;
-+
-+ SACR0 |= SACR0_RFTH(14) | SACR0_TFTH(1);
-+
-+ if (rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_LEFT_J)
-+ SACR1 |= SACR1_AMSL;
-+ }
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ SAIMR |= SAIMR_TFS;
-+ else
-+ SAIMR |= SAIMR_RFS;
-+
-+ SADIV = rtd->cpu_dai->dai_runtime.priv;
-+ return 0;
-+}
-+
-+static int pxa2xx_i2s_trigger(struct snd_pcm_substream *substream, int cmd)
-+{
-+ int ret = 0;
-+
-+ switch (cmd) {
-+ case SNDRV_PCM_TRIGGER_START:
-+ SACR0 |= SACR0_ENB;
-+ break;
-+ case SNDRV_PCM_TRIGGER_RESUME:
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ }
-+
-+ return ret;
-+}
-+
-+static void pxa2xx_i2s_shutdown(struct snd_pcm_substream *substream)
-+{
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ SACR1 |= SACR1_DRPL;
-+ SAIMR &= ~SAIMR_TFS;
-+ } else {
-+ SACR1 |= SACR1_DREC;
-+ SAIMR &= ~SAIMR_RFS;
-+ }
-+
-+ if (SACR1 & (SACR1_DREC | SACR1_DRPL)) {
-+ SACR0 &= ~SACR0_ENB;
-+ pxa_i2s_wait();
-+ pxa_set_cken(CKEN8_I2S, 0);
-+ }
-+}
-+
-+#ifdef CONFIG_PM
-+static int pxa2xx_i2s_suspend(struct platform_device *dev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ if (!dai->active)
-+ return 0;
-+
-+ /* store registers */
-+ pxa_i2s.sacr0 = SACR0;
-+ pxa_i2s.sacr1 = SACR1;
-+ pxa_i2s.saimr = SAIMR;
-+ pxa_i2s.sadiv = SADIV;
-+
-+ /* deactivate link */
-+ SACR0 &= ~SACR0_ENB;
-+ pxa_i2s_wait();
-+ return 0;
-+}
-+
-+static int pxa2xx_i2s_resume(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ if (!dai->active)
-+ return 0;
-+
-+ pxa_i2s_wait();
-+
-+ SACR0 = pxa_i2s.sacr0 &= ~SACR0_ENB;
-+ SACR1 = pxa_i2s.sacr1;
-+ SAIMR = pxa_i2s.saimr;
-+ SADIV = pxa_i2s.sadiv;
-+ SACR0 |= SACR0_ENB;
-+
-+ return 0;
-+}
-+
-+#else
-+#define pxa2xx_i2s_suspend NULL
-+#define pxa2xx_i2s_resume NULL
-+#endif
-+
-+/* pxa2xx I2S sysclock is always 256 FS */
-+static unsigned int pxa_i2s_config_sysclk(struct snd_soc_cpu_dai *iface,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ return info->rate << 8;
-+}
-+
-+struct snd_soc_cpu_dai pxa_i2s_dai = {
-+ .name = "pxa2xx-i2s",
-+ .id = 0,
-+ .type = SND_SOC_DAI_I2S,
-+ .suspend = pxa2xx_i2s_suspend,
-+ .resume = pxa2xx_i2s_resume,
-+ .config_sysclk = pxa_i2s_config_sysclk,
-+ .playback = {
-+ .channels_min = 2,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 2,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = pxa2xx_i2s_startup,
-+ .shutdown = pxa2xx_i2s_shutdown,
-+ .trigger = pxa2xx_i2s_trigger,
-+ .hw_params = pxa2xx_i2s_hw_params,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(pxa2xx_i2s_modes),
-+ .mode = pxa2xx_i2s_modes,},
-+};
-+
-+EXPORT_SYMBOL_GPL(pxa_i2s_dai);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("pxa2xx I2S SoC Interface");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/pxa2xx-pcm.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/pxa2xx-pcm.c
-@@ -0,0 +1,363 @@
-+/*
-+ * linux/sound/arm/pxa2xx-pcm.c -- ALSA PCM interface for the Intel PXA2xx chip
-+ *
-+ * Author: Nicolas Pitre
-+ * Created: Nov 30, 2004
-+ * Copyright: (C) 2004 MontaVista Software, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/slab.h>
-+#include <linux/dma-mapping.h>
-+
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+
-+#include <asm/dma.h>
-+#include <asm/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/audio.h>
-+
-+#include "pxa2xx-pcm.h"
-+
-+static const struct snd_pcm_hardware pxa2xx_pcm_hardware = {
-+ .info = SNDRV_PCM_INFO_MMAP |
-+ SNDRV_PCM_INFO_MMAP_VALID |
-+ SNDRV_PCM_INFO_INTERLEAVED |
-+ SNDRV_PCM_INFO_PAUSE |
-+ SNDRV_PCM_INFO_RESUME,
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE |
-+ SNDRV_PCM_FMTBIT_S24_LE |
-+ SNDRV_PCM_FMTBIT_S32_LE,
-+ .period_bytes_min = 32,
-+ .period_bytes_max = 8192 - 32,
-+ .periods_min = 1,
-+ .periods_max = PAGE_SIZE/sizeof(pxa_dma_desc),
-+ .buffer_bytes_max = 128 * 1024,
-+ .fifo_size = 32,
-+};
-+
-+struct pxa2xx_runtime_data {
-+ int dma_ch;
-+ struct pxa2xx_pcm_dma_params *params;
-+ pxa_dma_desc *dma_desc_array;
-+ dma_addr_t dma_desc_array_phys;
-+};
-+
-+static void pxa2xx_pcm_dma_irq(int dma_ch, void *dev_id)
-+{
-+ struct snd_pcm_substream *substream = dev_id;
-+ struct pxa2xx_runtime_data *prtd = substream->runtime->private_data;
-+ int dcsr;
-+
-+ dcsr = DCSR(dma_ch);
-+ DCSR(dma_ch) = dcsr & ~DCSR_STOPIRQEN;
-+
-+ if (dcsr & DCSR_ENDINTR) {
-+ snd_pcm_period_elapsed(substream);
-+ } else {
-+ printk( KERN_ERR "%s: DMA error on channel %d (DCSR=%#x)\n",
-+ prtd->params->name, dma_ch, dcsr );
-+ }
-+}
-+
-+static int pxa2xx_pcm_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct pxa2xx_runtime_data *prtd = runtime->private_data;
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct pxa2xx_pcm_dma_params *dma = rtd->cpu_dai->dma_data;
-+ size_t totsize = params_buffer_bytes(params);
-+ size_t period = params_period_bytes(params);
-+ pxa_dma_desc *dma_desc;
-+ dma_addr_t dma_buff_phys, next_desc_phys;
-+ int ret;
-+
-+ /* this may get called several times by oss emulation
-+ * with different params */
-+ if (prtd->params == NULL) {
-+ prtd->params = dma;
-+ ret = pxa_request_dma(prtd->params->name, DMA_PRIO_LOW,
-+ pxa2xx_pcm_dma_irq, substream);
-+ if (ret < 0)
-+ return ret;
-+ prtd->dma_ch = ret;
-+ } else if (prtd->params != dma) {
-+ pxa_free_dma(prtd->dma_ch);
-+ prtd->params = dma;
-+ ret = pxa_request_dma(prtd->params->name, DMA_PRIO_LOW,
-+ pxa2xx_pcm_dma_irq, substream);
-+ if (ret < 0)
-+ return ret;
-+ prtd->dma_ch = ret;
-+ }
-+
-+ snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);
-+ runtime->dma_bytes = totsize;
-+
-+ dma_desc = prtd->dma_desc_array;
-+ next_desc_phys = prtd->dma_desc_array_phys;
-+ dma_buff_phys = runtime->dma_addr;
-+ do {
-+ next_desc_phys += sizeof(pxa_dma_desc);
-+ dma_desc->ddadr = next_desc_phys;
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ dma_desc->dsadr = dma_buff_phys;
-+ dma_desc->dtadr = prtd->params->dev_addr;
-+ } else {
-+ dma_desc->dsadr = prtd->params->dev_addr;
-+ dma_desc->dtadr = dma_buff_phys;
-+ }
-+ if (period > totsize)
-+ period = totsize;
-+ dma_desc->dcmd = prtd->params->dcmd | period | DCMD_ENDIRQEN;
-+ dma_desc++;
-+ dma_buff_phys += period;
-+ } while (totsize -= period);
-+ dma_desc[-1].ddadr = prtd->dma_desc_array_phys;
-+
-+ return 0;
-+}
-+
-+static int pxa2xx_pcm_hw_free(struct snd_pcm_substream *substream)
-+{
-+ struct pxa2xx_runtime_data *prtd = substream->runtime->private_data;
-+
-+ if (prtd && prtd->params)
-+ *prtd->params->drcmr = 0;
-+
-+ if (prtd->dma_ch) {
-+ snd_pcm_set_runtime_buffer(substream, NULL);
-+ pxa_free_dma(prtd->dma_ch);
-+ prtd->dma_ch = 0;
-+ }
-+
-+ return 0;
-+}
-+
-+static int pxa2xx_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct pxa2xx_runtime_data *prtd = substream->runtime->private_data;
-+
-+ DCSR(prtd->dma_ch) &= ~DCSR_RUN;
-+ DCSR(prtd->dma_ch) = 0;
-+ DCMD(prtd->dma_ch) = 0;
-+ *prtd->params->drcmr = prtd->dma_ch | DRCMR_MAPVLD;
-+
-+ return 0;
-+}
-+
-+static int pxa2xx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
-+{
-+ struct pxa2xx_runtime_data *prtd = substream->runtime->private_data;
-+ int ret = 0;
-+
-+ switch (cmd) {
-+ case SNDRV_PCM_TRIGGER_START:
-+ DDADR(prtd->dma_ch) = prtd->dma_desc_array_phys;
-+ DCSR(prtd->dma_ch) = DCSR_RUN;
-+ break;
-+
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ DCSR(prtd->dma_ch) &= ~DCSR_RUN;
-+ break;
-+
-+ case SNDRV_PCM_TRIGGER_RESUME:
-+ DCSR(prtd->dma_ch) |= DCSR_RUN;
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ DDADR(prtd->dma_ch) = prtd->dma_desc_array_phys;
-+ DCSR(prtd->dma_ch) |= DCSR_RUN;
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ }
-+
-+ return ret;
-+}
-+
-+static snd_pcm_uframes_t
-+pxa2xx_pcm_pointer(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct pxa2xx_runtime_data *prtd = runtime->private_data;
-+
-+ dma_addr_t ptr = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
-+ DSADR(prtd->dma_ch) : DTADR(prtd->dma_ch);
-+ snd_pcm_uframes_t x = bytes_to_frames(runtime, ptr - runtime->dma_addr);
-+
-+ if (x == runtime->buffer_size)
-+ x = 0;
-+ return x;
-+}
-+
-+static int pxa2xx_pcm_open(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct pxa2xx_runtime_data *prtd;
-+ int ret;
-+
-+ snd_soc_set_runtime_hwparams(substream, &pxa2xx_pcm_hardware);
-+
-+ /*
-+ * For mysterious reasons (and despite what the manual says)
-+ * playback samples are lost if the DMA count is not a multiple
-+ * of the DMA burst size. Let's add a rule to enforce that.
-+ */
-+ ret = snd_pcm_hw_constraint_step(runtime, 0,
-+ SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 32);
-+ if (ret)
-+ goto out;
-+
-+ ret = snd_pcm_hw_constraint_step(runtime, 0,
-+ SNDRV_PCM_HW_PARAM_BUFFER_BYTES, 32);
-+ if (ret)
-+ goto out;
-+
-+ prtd = kzalloc(sizeof(struct pxa2xx_runtime_data), GFP_KERNEL);
-+ if (prtd == NULL) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+
-+ prtd->dma_desc_array =
-+ dma_alloc_writecombine(substream->pcm->card->dev, PAGE_SIZE,
-+ &prtd->dma_desc_array_phys, GFP_KERNEL);
-+ if (!prtd->dma_desc_array) {
-+ ret = -ENOMEM;
-+ goto err1;
-+ }
-+
-+ runtime->private_data = prtd;
-+ return 0;
-+
-+ err1:
-+ kfree(prtd);
-+ out:
-+ return ret;
-+}
-+
-+static int pxa2xx_pcm_close(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct pxa2xx_runtime_data *prtd = runtime->private_data;
-+
-+ dma_free_writecombine(substream->pcm->card->dev, PAGE_SIZE,
-+ prtd->dma_desc_array, prtd->dma_desc_array_phys);
-+ kfree(prtd);
-+ return 0;
-+}
-+
-+static int pxa2xx_pcm_mmap(struct snd_pcm_substream *substream,
-+ struct vm_area_struct *vma)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ return dma_mmap_writecombine(substream->pcm->card->dev, vma,
-+ runtime->dma_area,
-+ runtime->dma_addr,
-+ runtime->dma_bytes);
-+}
-+
-+struct snd_pcm_ops pxa2xx_pcm_ops = {
-+ .open = pxa2xx_pcm_open,
-+ .close = pxa2xx_pcm_close,
-+ .ioctl = snd_pcm_lib_ioctl,
-+ .hw_params = pxa2xx_pcm_hw_params,
-+ .hw_free = pxa2xx_pcm_hw_free,
-+ .prepare = pxa2xx_pcm_prepare,
-+ .trigger = pxa2xx_pcm_trigger,
-+ .pointer = pxa2xx_pcm_pointer,
-+ .mmap = pxa2xx_pcm_mmap,
-+};
-+
-+static int pxa2xx_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)
-+{
-+ struct snd_pcm_substream *substream = pcm->streams[stream].substream;
-+ struct snd_dma_buffer *buf = &substream->dma_buffer;
-+ size_t size = pxa2xx_pcm_hardware.buffer_bytes_max;
-+ buf->dev.type = SNDRV_DMA_TYPE_DEV;
-+ buf->dev.dev = pcm->card->dev;
-+ buf->private_data = NULL;
-+ buf->area = dma_alloc_writecombine(pcm->card->dev, size,
-+ &buf->addr, GFP_KERNEL);
-+ if (!buf->area)
-+ return -ENOMEM;
-+ buf->bytes = size;
-+ return 0;
-+}
-+
-+static void pxa2xx_pcm_free_dma_buffers(struct snd_pcm *pcm)
-+{
-+ struct snd_pcm_substream *substream;
-+ struct snd_dma_buffer *buf;
-+ int stream;
-+
-+ for (stream = 0; stream < 2; stream++) {
-+ substream = pcm->streams[stream].substream;
-+ if (!substream)
-+ continue;
-+
-+ buf = &substream->dma_buffer;
-+ if (!buf->area)
-+ continue;
-+
-+ dma_free_writecombine(pcm->card->dev, buf->bytes,
-+ buf->area, buf->addr);
-+ buf->area = NULL;
-+ }
-+}
-+
-+static u64 pxa2xx_pcm_dmamask = DMA_32BIT_MASK;
-+
-+int pxa2xx_pcm_new(struct snd_card *card, struct snd_soc_codec_dai *dai,
-+ struct snd_pcm *pcm)
-+{
-+ int ret = 0;
-+
-+ if (!card->dev->dma_mask)
-+ card->dev->dma_mask = &pxa2xx_pcm_dmamask;
-+ if (!card->dev->coherent_dma_mask)
-+ card->dev->coherent_dma_mask = DMA_32BIT_MASK;
-+
-+ if (dai->playback.channels_min) {
-+ ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
-+ SNDRV_PCM_STREAM_PLAYBACK);
-+ if (ret)
-+ goto out;
-+ }
-+
-+ if (dai->capture.channels_min) {
-+ ret = pxa2xx_pcm_preallocate_dma_buffer(pcm,
-+ SNDRV_PCM_STREAM_CAPTURE);
-+ if (ret)
-+ goto out;
-+ }
-+ out:
-+ return ret;
-+}
-+
-+struct snd_soc_platform pxa2xx_soc_platform = {
-+ .name = "pxa2xx-audio",
-+ .pcm_ops = &pxa2xx_pcm_ops,
-+ .pcm_new = pxa2xx_pcm_new,
-+ .pcm_free = pxa2xx_pcm_free_dma_buffers,
-+};
-+
-+EXPORT_SYMBOL_GPL(pxa2xx_soc_platform);
-+
-+MODULE_AUTHOR("Nicolas Pitre");
-+MODULE_DESCRIPTION("Intel PXA2xx PCM DMA module");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/pxa2xx-pcm.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/pxa2xx-pcm.h
-@@ -0,0 +1,48 @@
-+/*
-+ * linux/sound/arm/pxa2xx-pcm.h -- ALSA PCM interface for the Intel PXA2xx chip
-+ *
-+ * Author: Nicolas Pitre
-+ * Created: Nov 30, 2004
-+ * Copyright: MontaVista Software, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef _PXA2XX_PCM_H
-+#define _PXA2XX_PCM_H
-+
-+struct pxa2xx_pcm_dma_params {
-+ char *name; /* stream identifier */
-+ u32 dcmd; /* DMA descriptor dcmd field */
-+ volatile u32 *drcmr; /* the DMA request channel to use */
-+ u32 dev_addr; /* device physical address for DMA */
-+};
-+
-+struct pxa2xx_gpio {
-+ u32 sys;
-+ u32 rx;
-+ u32 tx;
-+ u32 clk;
-+ u32 frm;
-+};
-+
-+/* pxa2xx DAI ID's */
-+#define PXA2XX_DAI_AC97_HIFI 0
-+#define PXA2XX_DAI_AC97_AUX 1
-+#define PXA2XX_DAI_AC97_MIC 2
-+#define PXA2XX_DAI_I2S 0
-+#define PXA2XX_DAI_SSP1 0
-+#define PXA2XX_DAI_SSP2 1
-+#define PXA2XX_DAI_SSP3 2
-+
-+extern struct snd_soc_cpu_dai pxa_ac97_dai[3];
-+extern struct snd_soc_cpu_dai pxa_i2s_dai;
-+extern struct snd_soc_cpu_dai pxa_ssp_dai[3];
-+
-+/* platform data */
-+extern struct snd_soc_platform pxa2xx_soc_platform;
-+extern struct snd_ac97_bus_ops pxa2xx_ac97_ops;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/pxa/pxa2xx-ssp.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/pxa2xx-ssp.c
-@@ -0,0 +1,767 @@
-+/*
-+ * pxa2xx-ssp.c -- ALSA Soc Audio Layer
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 12th Aug 2005 Initial version.
-+ *
-+ * TODO:
-+ * o Fix master mode (bug)
-+ * o Fix resume (bug)
-+ * o Add support for other clocks
-+ * o Test network mode for > 16bit sample size
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/initval.h>
-+#include <sound/soc.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/audio.h>
-+#include <asm/arch/ssp.h>
-+
-+#include "pxa2xx-pcm.h"
-+
-+/*
-+ * SSP sysclock frequency in Hz
-+ * Neither default pxa2xx PLL clocks are good for audio, hence pxa27x
-+ * has audio clock. I would recommend using the pxa27x audio clock or an
-+ * external clock or making the codec master to gurantee better sample rates.
-+ */
-+#ifdef CONFIG_PXA27x
-+static int sysclk[3] = {13000000, 13000000, 13000000};
-+#else
-+static int sysclk[3] = {1843200, 1843200, 1843200};
-+#endif
-+module_param_array(sysclk, int, NULL, 0);
-+MODULE_PARM_DESC(sysclk, "sysclk frequency in Hz");
-+
-+/*
-+ * SSP sysclock source.
-+ * sysclk is ignored if audio clock is used
-+ */
-+#ifdef CONFIG_PXA27x
-+static int clksrc[3] = {0, 0, 0};
-+#else
-+static int clksrc[3] = {0, 0, 0};
-+#endif
-+module_param_array(clksrc, int, NULL, 0);
-+MODULE_PARM_DESC(clksrc,
-+ "sysclk source, 0 = internal PLL, 1 = ext, 2 = network, 3 = audio clock");
-+
-+/*
-+ * SSP GPIO's
-+ */
-+#define GPIO26_SSP1RX_MD (26 | GPIO_ALT_FN_1_IN)
-+#define GPIO25_SSP1TX_MD (25 | GPIO_ALT_FN_2_OUT)
-+#define GPIO23_SSP1CLKS_MD (23 | GPIO_ALT_FN_2_IN)
-+#define GPIO24_SSP1FRMS_MD (24 | GPIO_ALT_FN_2_IN)
-+#define GPIO23_SSP1CLKM_MD (23 | GPIO_ALT_FN_2_OUT)
-+#define GPIO24_SSP1FRMM_MD (24 | GPIO_ALT_FN_2_OUT)
-+
-+#define GPIO11_SSP2RX_MD (11 | GPIO_ALT_FN_2_IN)
-+#define GPIO13_SSP2TX_MD (13 | GPIO_ALT_FN_1_OUT)
-+#define GPIO22_SSP2CLKS_MD (22 | GPIO_ALT_FN_3_IN)
-+#define GPIO88_SSP2FRMS_MD (88 | GPIO_ALT_FN_3_IN)
-+#define GPIO22_SSP2CLKM_MD (22 | GPIO_ALT_FN_3_OUT)
-+#define GPIO88_SSP2FRMM_MD (88 | GPIO_ALT_FN_3_OUT)
-+
-+#define GPIO82_SSP3RX_MD (82 | GPIO_ALT_FN_1_IN)
-+#define GPIO81_SSP3TX_MD (81 | GPIO_ALT_FN_1_OUT)
-+#define GPIO84_SSP3CLKS_MD (84 | GPIO_ALT_FN_1_IN)
-+#define GPIO83_SSP3FRMS_MD (83 | GPIO_ALT_FN_1_IN)
-+#define GPIO84_SSP3CLKM_MD (84 | GPIO_ALT_FN_1_OUT)
-+#define GPIO83_SSP3FRMM_MD (83 | GPIO_ALT_FN_1_OUT)
-+
-+#define PXA_SSP_MDAIFMT \
-+ (SND_SOC_DAIFMT_DSP_B |SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_CBM_CFS | \
-+ SND_SOC_DAIFMT_CBS_CFM | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_NB_IF)
-+
-+#define PXA_SSP_SDAIFMT \
-+ (SND_SOC_DAIFMT_DSP_B |SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_CBM_CFS | \
-+ SND_SOC_DAIFMT_CBS_CFM | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_NB_IF)
-+
-+#define PXA_SSP_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define PXA_SSP_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | \
-+ SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000)
-+
-+#define PXA_SSP_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
-+
-+/*
-+ * SSP modes
-+ */
-+static struct snd_soc_dai_mode pxa2xx_ssp_modes[] = {
-+ /* port slave clk & frame modes */
-+ {
-+ .fmt = PXA_SSP_SDAIFMT,
-+ .pcmfmt = PXA_SSP_BITS,
-+ .pcmrate = PXA_SSP_RATES,
-+ .pcmdir = PXA_SSP_DIR,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+
-+ /* port master clk & frame modes */
-+#ifdef CONFIG_PXA27x
-+ {
-+ .fmt = PXA_SSP_MDAIFMT,
-+ .pcmfmt = PXA_SSP_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = PXA_SSP_DIR,
-+ .flags = SND_SOC_DAI_BFS_RCW,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBW(1),
-+ },
-+ {
-+ .fmt = PXA_SSP_MDAIFMT,
-+ .pcmfmt = PXA_SSP_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_11025,
-+ .pcmdir = PXA_SSP_DIR,
-+ .flags = SND_SOC_DAI_BFS_RCW,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBW(1),
-+ },
-+ {
-+ .fmt = PXA_SSP_MDAIFMT,
-+ .pcmfmt = PXA_SSP_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = PXA_SSP_DIR,
-+ .flags = SND_SOC_DAI_BFS_RCW,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBW(1),
-+ },
-+ {
-+ .fmt = PXA_SSP_MDAIFMT,
-+ .pcmfmt = PXA_SSP_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_22050,
-+ .pcmdir = PXA_SSP_DIR,
-+ .flags = SND_SOC_DAI_BFS_RCW,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBW(1),
-+ },
-+ {
-+ .fmt = PXA_SSP_MDAIFMT,
-+ .pcmfmt = PXA_SSP_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = PXA_SSP_DIR,
-+ .flags = SND_SOC_DAI_BFS_RCW,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBW(1),
-+ },
-+ {
-+ .fmt = PXA_SSP_MDAIFMT,
-+ .pcmfmt = PXA_SSP_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = PXA_SSP_DIR,
-+ .flags = SND_SOC_DAI_BFS_RCW,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBW(1),
-+ },
-+ {
-+ .fmt = PXA_SSP_MDAIFMT,
-+ .pcmfmt = PXA_SSP_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = PXA_SSP_DIR,
-+ .flags = SND_SOC_DAI_BFS_RCW,
-+ .fs = 256,
-+ .bfs = SND_SOC_FSBW(1),
-+ },
-+ {
-+ .fmt = PXA_SSP_MDAIFMT,
-+ .pcmfmt = PXA_SSP_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200,
-+ .pcmdir = PXA_SSP_DIR,
-+ .flags = SND_SOC_DAI_BFS_RCW,
-+ .fs = 128,
-+ .bfs = SND_SOC_FSBW(1),
-+ },
-+ {
-+ .fmt = PXA_SSP_MDAIFMT,
-+ .pcmfmt = PXA_SSP_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_96000,
-+ .pcmdir = PXA_SSP_DIR,
-+ .flags = SND_SOC_DAI_BFS_RCW,
-+ .fs = 128,
-+ .bfs = SND_SOC_FSBW(1),
-+ },
-+#endif
-+};
-+
-+static struct ssp_dev ssp[3];
-+#ifdef CONFIG_PM
-+static struct ssp_state ssp_state[3];
-+#endif
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_mono_out = {
-+ .name = "SSP1 PCM Mono out",
-+ .dev_addr = __PREG(SSDR_P1),
-+ .drcmr = &DRCMRTXSSDR,
-+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-+ DCMD_BURST16 | DCMD_WIDTH2,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_mono_in = {
-+ .name = "SSP1 PCM Mono in",
-+ .dev_addr = __PREG(SSDR_P1),
-+ .drcmr = &DRCMRRXSSDR,
-+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-+ DCMD_BURST16 | DCMD_WIDTH2,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_stereo_out = {
-+ .name = "SSP1 PCM Stereo out",
-+ .dev_addr = __PREG(SSDR_P1),
-+ .drcmr = &DRCMRTXSSDR,
-+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-+ DCMD_BURST16 | DCMD_WIDTH4,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp1_pcm_stereo_in = {
-+ .name = "SSP1 PCM Stereo in",
-+ .dev_addr = __PREG(SSDR_P1),
-+ .drcmr = &DRCMRRXSSDR,
-+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-+ DCMD_BURST16 | DCMD_WIDTH4,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_mono_out = {
-+ .name = "SSP2 PCM Mono out",
-+ .dev_addr = __PREG(SSDR_P2),
-+ .drcmr = &DRCMRTXSS2DR,
-+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-+ DCMD_BURST16 | DCMD_WIDTH2,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_mono_in = {
-+ .name = "SSP2 PCM Mono in",
-+ .dev_addr = __PREG(SSDR_P2),
-+ .drcmr = &DRCMRRXSS2DR,
-+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-+ DCMD_BURST16 | DCMD_WIDTH2,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_stereo_out = {
-+ .name = "SSP2 PCM Stereo out",
-+ .dev_addr = __PREG(SSDR_P2),
-+ .drcmr = &DRCMRTXSS2DR,
-+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-+ DCMD_BURST16 | DCMD_WIDTH4,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp2_pcm_stereo_in = {
-+ .name = "SSP2 PCM Stereo in",
-+ .dev_addr = __PREG(SSDR_P2),
-+ .drcmr = &DRCMRRXSS2DR,
-+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-+ DCMD_BURST16 | DCMD_WIDTH4,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_mono_out = {
-+ .name = "SSP3 PCM Mono out",
-+ .dev_addr = __PREG(SSDR_P3),
-+ .drcmr = &DRCMRTXSS3DR,
-+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-+ DCMD_BURST16 | DCMD_WIDTH2,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_mono_in = {
-+ .name = "SSP3 PCM Mono in",
-+ .dev_addr = __PREG(SSDR_P3),
-+ .drcmr = &DRCMRRXSS3DR,
-+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-+ DCMD_BURST16 | DCMD_WIDTH2,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_stereo_out = {
-+ .name = "SSP3 PCM Stereo out",
-+ .dev_addr = __PREG(SSDR_P3),
-+ .drcmr = &DRCMRTXSS3DR,
-+ .dcmd = DCMD_INCSRCADDR | DCMD_FLOWTRG |
-+ DCMD_BURST16 | DCMD_WIDTH4,
-+};
-+
-+static struct pxa2xx_pcm_dma_params pxa2xx_ssp3_pcm_stereo_in = {
-+ .name = "SSP3 PCM Stereo in",
-+ .dev_addr = __PREG(SSDR_P3),
-+ .drcmr = &DRCMRRXSS3DR,
-+ .dcmd = DCMD_INCTRGADDR | DCMD_FLOWSRC |
-+ DCMD_BURST16 | DCMD_WIDTH4,
-+};
-+
-+static struct pxa2xx_pcm_dma_params *ssp_dma_params[3][4] = {
-+ {&pxa2xx_ssp1_pcm_mono_out, &pxa2xx_ssp1_pcm_mono_in,
-+ &pxa2xx_ssp1_pcm_stereo_out,&pxa2xx_ssp1_pcm_stereo_in,},
-+ {&pxa2xx_ssp2_pcm_mono_out, &pxa2xx_ssp2_pcm_mono_in,
-+ &pxa2xx_ssp2_pcm_stereo_out, &pxa2xx_ssp2_pcm_stereo_in,},
-+ {&pxa2xx_ssp3_pcm_mono_out, &pxa2xx_ssp3_pcm_mono_in,
-+ &pxa2xx_ssp3_pcm_stereo_out,&pxa2xx_ssp3_pcm_stereo_in,},
-+};
-+
-+static struct pxa2xx_gpio ssp_gpios[3][4] = {
-+ {{ /* SSP1 SND_SOC_DAIFMT_CBM_CFM */
-+ .rx = GPIO26_SSP1RX_MD,
-+ .tx = GPIO25_SSP1TX_MD,
-+ .clk = (23 | GPIO_ALT_FN_2_IN),
-+ .frm = (24 | GPIO_ALT_FN_2_IN),
-+ },
-+ { /* SSP1 SND_SOC_DAIFMT_CBS_CFS */
-+ .rx = GPIO26_SSP1RX_MD,
-+ .tx = GPIO25_SSP1TX_MD,
-+ .clk = (23 | GPIO_ALT_FN_2_OUT),
-+ .frm = (24 | GPIO_ALT_FN_2_OUT),
-+ },
-+ { /* SSP1 SND_SOC_DAIFMT_CBS_CFM */
-+ .rx = GPIO26_SSP1RX_MD,
-+ .tx = GPIO25_SSP1TX_MD,
-+ .clk = (23 | GPIO_ALT_FN_2_OUT),
-+ .frm = (24 | GPIO_ALT_FN_2_IN),
-+ },
-+ { /* SSP1 SND_SOC_DAIFMT_CBM_CFS */
-+ .rx = GPIO26_SSP1RX_MD,
-+ .tx = GPIO25_SSP1TX_MD,
-+ .clk = (23 | GPIO_ALT_FN_2_IN),
-+ .frm = (24 | GPIO_ALT_FN_2_OUT),
-+ }},
-+ {{ /* SSP2 SND_SOC_DAIFMT_CBM_CFM */
-+ .rx = GPIO11_SSP2RX_MD,
-+ .tx = GPIO13_SSP2TX_MD,
-+ .clk = (22 | GPIO_ALT_FN_3_IN),
-+ .frm = (88 | GPIO_ALT_FN_3_IN),
-+ },
-+ { /* SSP2 SND_SOC_DAIFMT_CBS_CFS */
-+ .rx = GPIO11_SSP2RX_MD,
-+ .tx = GPIO13_SSP2TX_MD,
-+ .clk = (22 | GPIO_ALT_FN_3_OUT),
-+ .frm = (88 | GPIO_ALT_FN_3_OUT),
-+ },
-+ { /* SSP2 SND_SOC_DAIFMT_CBS_CFM */
-+ .rx = GPIO11_SSP2RX_MD,
-+ .tx = GPIO13_SSP2TX_MD,
-+ .clk = (22 | GPIO_ALT_FN_3_OUT),
-+ .frm = (88 | GPIO_ALT_FN_3_IN),
-+ },
-+ { /* SSP2 SND_SOC_DAIFMT_CBM_CFS */
-+ .rx = GPIO11_SSP2RX_MD,
-+ .tx = GPIO13_SSP2TX_MD,
-+ .clk = (22 | GPIO_ALT_FN_3_IN),
-+ .frm = (88 | GPIO_ALT_FN_3_OUT),
-+ }},
-+ {{ /* SSP3 SND_SOC_DAIFMT_CBM_CFM */
-+ .rx = GPIO82_SSP3RX_MD,
-+ .tx = GPIO81_SSP3TX_MD,
-+ .clk = (84 | GPIO_ALT_FN_3_IN),
-+ .frm = (83 | GPIO_ALT_FN_3_IN),
-+ },
-+ { /* SSP3 SND_SOC_DAIFMT_CBS_CFS */
-+ .rx = GPIO82_SSP3RX_MD,
-+ .tx = GPIO81_SSP3TX_MD,
-+ .clk = (84 | GPIO_ALT_FN_3_OUT),
-+ .frm = (83 | GPIO_ALT_FN_3_OUT),
-+ },
-+ { /* SSP3 SND_SOC_DAIFMT_CBS_CFM */
-+ .rx = GPIO82_SSP3RX_MD,
-+ .tx = GPIO81_SSP3TX_MD,
-+ .clk = (84 | GPIO_ALT_FN_3_OUT),
-+ .frm = (83 | GPIO_ALT_FN_3_IN),
-+ },
-+ { /* SSP3 SND_SOC_DAIFMT_CBM_CFS */
-+ .rx = GPIO82_SSP3RX_MD,
-+ .tx = GPIO81_SSP3TX_MD,
-+ .clk = (84 | GPIO_ALT_FN_3_IN),
-+ .frm = (83 | GPIO_ALT_FN_3_OUT),
-+ }},
-+};
-+
-+static int pxa2xx_ssp_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ int ret = 0;
-+
-+ if (!rtd->cpu_dai->active) {
-+ ret = ssp_init (&ssp[rtd->cpu_dai->id], rtd->cpu_dai->id + 1,
-+ SSP_NO_IRQ);
-+ if (ret < 0)
-+ return ret;
-+ ssp_disable(&ssp[rtd->cpu_dai->id]);
-+ }
-+ return ret;
-+}
-+
-+static void pxa2xx_ssp_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if (!rtd->cpu_dai->active) {
-+ ssp_disable(&ssp[rtd->cpu_dai->id]);
-+ ssp_exit(&ssp[rtd->cpu_dai->id]);
-+ }
-+}
-+
-+#ifdef CONFIG_PM
-+
-+#if defined (CONFIG_PXA27x)
-+static int cken[3] = {CKEN23_SSP1, CKEN3_SSP2, CKEN4_SSP3};
-+#else
-+static int cken[3] = {CKEN3_SSP, CKEN9_NSSP, CKEN10_ASSP};
-+#endif
-+
-+static int pxa2xx_ssp_suspend(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ if (!dai->active)
-+ return 0;
-+
-+ ssp_save_state(&ssp[dai->id], &ssp_state[dai->id]);
-+ pxa_set_cken(cken[dai->id], 0);
-+ return 0;
-+}
-+
-+static int pxa2xx_ssp_resume(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ if (!dai->active)
-+ return 0;
-+
-+ pxa_set_cken(cken[dai->id], 1);
-+ ssp_restore_state(&ssp[dai->id], &ssp_state[dai->id]);
-+ ssp_enable(&ssp[dai->id]);
-+
-+ return 0;
-+}
-+
-+#else
-+#define pxa2xx_ssp_suspend NULL
-+#define pxa2xx_ssp_resume NULL
-+#endif
-+
-+/* todo - check clk source and PLL before returning clock rate */
-+static unsigned int pxa_ssp_config_sysclk(struct snd_soc_cpu_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ /* audio clock ? (divide by 1) */
-+ if (clksrc[dai->id] == 3) {
-+ switch(info->rate){
-+ case 8000:
-+ case 16000:
-+ case 32000:
-+ case 48000:
-+ case 96000:
-+ return 12288000;
-+ break;
-+ case 11025:
-+ case 22050:
-+ case 44100:
-+ case 88200:
-+ return 11289600;
-+ break;
-+ }
-+ }
-+
-+ /* pll */
-+ return sysclk[dai->id];
-+}
-+
-+#ifdef CONFIG_PXA27x
-+static u32 pxa27x_set_audio_clk(unsigned int rate, unsigned int fs)
-+{
-+ u32 aclk = 0, div = 0;
-+
-+ if (rate == 0 || fs == 0)
-+ return 0;
-+
-+ switch(rate){
-+ case 8000:
-+ case 16000:
-+ case 32000:
-+ case 48000:
-+ case 96000:
-+ aclk = 0x2 << 4;
-+ div = 12288000 / (rate * fs);
-+ break;
-+ case 11025:
-+ case 22050:
-+ case 44100:
-+ case 88200:
-+ aclk = 0x1 << 4;
-+ div = 11289600 / (rate * fs);
-+ break;
-+ }
-+
-+ aclk |= ffs(div) - 1;
-+ return aclk;
-+}
-+#endif
-+
-+static inline int get_scr(int srate, int id)
-+{
-+ if (srate == 0)
-+ return 0;
-+ return (sysclk[id] / srate) - 1;
-+}
-+
-+static int pxa2xx_ssp_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ int fmt = 0, dma = 0, fs, chn = params_channels(params);
-+ u32 ssp_mode = 0, ssp_setup = 0, psp_mode = 0, rate = 0;
-+
-+ fs = rtd->cpu_dai->dai_runtime.fs;
-+
-+ /* select correct DMA params */
-+ if (substream->stream != SNDRV_PCM_STREAM_PLAYBACK)
-+ dma = 1;
-+ if (chn == 2 || rtd->cpu_dai->dai_runtime.pcmfmt != PXA_SSP_BITS)
-+ dma += 2;
-+ rtd->cpu_dai->dma_data = ssp_dma_params[rtd->cpu_dai->id][dma];
-+
-+ /* is port used by another stream */
-+ if (SSCR0 & SSCR0_SSE)
-+ return 0;
-+
-+ /* bit size */
-+ switch(rtd->cpu_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ ssp_mode |=SSCR0_DataSize(16);
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ ssp_mode |=(SSCR0_EDSS | SSCR0_DataSize(8));
-+ /* use network mode for stereo samples > 16 bits */
-+ if (chn == 2) {
-+ ssp_mode |= (SSCR0_MOD | SSCR0_SlotsPerFrm(2) << 24);
-+ /* active slots 0,1 */
-+ SSTSA_P(rtd->cpu_dai->id +1) = 0x3;
-+ SSRSA_P(rtd->cpu_dai->id +1) = 0x3;
-+ }
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ ssp_mode |= (SSCR0_EDSS | SSCR0_DataSize(16));
-+ /* use network mode for stereo samples > 16 bits */
-+ if (chn == 2) {
-+ ssp_mode |= (SSCR0_MOD | SSCR0_SlotsPerFrm(2) << 24);
-+ /* active slots 0,1 */
-+ SSTSA_P(rtd->cpu_dai->id +1) = 0x3;
-+ SSRSA_P(rtd->cpu_dai->id +1) = 0x3;
-+ }
-+ break;
-+ }
-+
-+ ssp_mode |= SSCR0_PSP;
-+ ssp_setup = SSCR1_RxTresh(14) | SSCR1_TxTresh(1) |
-+ SSCR1_TRAIL | SSCR1_RWOT;
-+
-+ switch(rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ ssp_setup |= (SSCR1_SCLKDIR | SSCR1_SFRMDIR);
-+ break;
-+ case SND_SOC_DAIFMT_CBM_CFS:
-+ ssp_setup |= SSCR1_SCLKDIR;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFM:
-+ ssp_setup |= SSCR1_SFRMDIR;
-+ break;
-+ }
-+
-+ switch(rtd->cpu_dai->dai_runtime.fmt) {
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ fmt = 1;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFM:
-+ fmt = 2;
-+ break;
-+ case SND_SOC_DAIFMT_CBM_CFS:
-+ fmt = 3;
-+ break;
-+ }
-+
-+ pxa_gpio_mode(ssp_gpios[rtd->cpu_dai->id][fmt].rx);
-+ pxa_gpio_mode(ssp_gpios[rtd->cpu_dai->id][fmt].tx);
-+ pxa_gpio_mode(ssp_gpios[rtd->cpu_dai->id][fmt].frm);
-+ pxa_gpio_mode(ssp_gpios[rtd->cpu_dai->id][fmt].clk);
-+
-+ switch (rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_NB_NF:
-+ psp_mode |= SSPSP_SFRMP | SSPSP_FSRT;
-+ break;
-+ }
-+
-+ if (rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_DSP_A)
-+ psp_mode |= SSPSP_SCMODE(2);
-+ if (rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_DSP_B)
-+ psp_mode |= SSPSP_SCMODE(3);
-+
-+ switch(clksrc[rtd->cpu_dai->id]) {
-+ case 2: /* network clock */
-+ ssp_mode |= SSCR0_NCS | SSCR0_MOD;
-+ case 1: /* external clock */
-+ ssp_mode |= SSCR0_ECS;
-+ case 0: /* internal clock */
-+ rate = get_scr(snd_soc_get_rate(rtd->cpu_dai->dai_runtime.pcmrate),
-+ rtd->cpu_dai->id);
-+ break;
-+#ifdef CONFIG_PXA27x
-+ case 3: /* audio clock */
-+ ssp_mode |= (1 << 30);
-+ SSACD_P(rtd->cpu_dai->id) = (0x1 << 3) |
-+ pxa27x_set_audio_clk(
-+ snd_soc_get_rate(rtd->cpu_dai->dai_runtime.pcmrate), fs);
-+ break;
-+#endif
-+ }
-+
-+ ssp_config(&ssp[rtd->cpu_dai->id], ssp_mode, ssp_setup, psp_mode,
-+ SSCR0_SerClkDiv(rate));
-+#if 0
-+ printk("SSCR0 %x SSCR1 %x SSTO %x SSPSP %x SSSR %x\n",
-+ SSCR0_P(rtd->cpu_dai->id+1), SSCR1_P(rtd->cpu_dai->id+1),
-+ SSTO_P(rtd->cpu_dai->id+1), SSPSP_P(rtd->cpu_dai->id+1),
-+ SSSR_P(rtd->cpu_dai->id+1));
-+#endif
-+ return 0;
-+}
-+
-+static int pxa2xx_ssp_trigger(struct snd_pcm_substream *substream, int cmd)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ int ret = 0;
-+
-+ switch (cmd) {
-+ case SNDRV_PCM_TRIGGER_RESUME:
-+ ssp_enable(&ssp[rtd->cpu_dai->id]);
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ SSCR1_P(rtd->cpu_dai->id+1) |= SSCR1_TSRE;
-+ else
-+ SSCR1_P(rtd->cpu_dai->id+1) |= SSCR1_RSRE;
-+ SSSR_P(rtd->cpu_dai->id+1) |= SSSR_P(rtd->cpu_dai->id+1);
-+ break;
-+ case SNDRV_PCM_TRIGGER_START:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ SSCR1_P(rtd->cpu_dai->id+1) |= SSCR1_TSRE;
-+ else
-+ SSCR1_P(rtd->cpu_dai->id+1) |= SSCR1_RSRE;
-+ ssp_enable(&ssp[rtd->cpu_dai->id]);
-+ break;
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ SSCR1_P(rtd->cpu_dai->id+1) &= ~SSCR1_TSRE;
-+ else
-+ SSCR1_P(rtd->cpu_dai->id+1) &= ~SSCR1_RSRE;
-+ break;
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ ssp_disable(&ssp[rtd->cpu_dai->id]);
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ SSCR1_P(rtd->cpu_dai->id+1) &= ~SSCR1_TSRE;
-+ else
-+ SSCR1_P(rtd->cpu_dai->id+1) &= ~SSCR1_RSRE;
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ }
-+#if 0
-+ printk("SSCR0 %x SSCR1 %x SSTO %x SSPSP %x SSSR %x\n",
-+ SSCR0_P(rtd->cpu_dai->id+1), SSCR1_P(rtd->cpu_dai->id+1),
-+ SSTO_P(rtd->cpu_dai->id+1), SSPSP_P(rtd->cpu_dai->id+1),
-+ SSSR_P(rtd->cpu_dai->id+1));
-+#endif
-+ return ret;
-+}
-+
-+struct snd_soc_cpu_dai pxa_ssp_dai[] = {
-+ { .name = "pxa2xx-ssp1",
-+ .id = 0,
-+ .type = SND_SOC_DAI_PCM,
-+ .suspend = pxa2xx_ssp_suspend,
-+ .resume = pxa2xx_ssp_resume,
-+ .config_sysclk = pxa_ssp_config_sysclk,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = pxa2xx_ssp_startup,
-+ .shutdown = pxa2xx_ssp_shutdown,
-+ .trigger = pxa2xx_ssp_trigger,
-+ .hw_params = pxa2xx_ssp_hw_params,},
-+ .caps = {
-+ .mode = pxa2xx_ssp_modes,
-+ .num_modes = ARRAY_SIZE(pxa2xx_ssp_modes),},
-+ },
-+ { .name = "pxa2xx-ssp2",
-+ .id = 1,
-+ .type = SND_SOC_DAI_PCM,
-+ .suspend = pxa2xx_ssp_suspend,
-+ .resume = pxa2xx_ssp_resume,
-+ .config_sysclk = pxa_ssp_config_sysclk,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = pxa2xx_ssp_startup,
-+ .shutdown = pxa2xx_ssp_shutdown,
-+ .trigger = pxa2xx_ssp_trigger,
-+ .hw_params = pxa2xx_ssp_hw_params,},
-+ .caps = {
-+ .mode = pxa2xx_ssp_modes,
-+ .num_modes = ARRAY_SIZE(pxa2xx_ssp_modes),},
-+ },
-+ { .name = "pxa2xx-ssp3",
-+ .id = 2,
-+ .type = SND_SOC_DAI_PCM,
-+ .suspend = pxa2xx_ssp_suspend,
-+ .resume = pxa2xx_ssp_resume,
-+ .config_sysclk = pxa_ssp_config_sysclk,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = pxa2xx_ssp_startup,
-+ .shutdown = pxa2xx_ssp_shutdown,
-+ .trigger = pxa2xx_ssp_trigger,
-+ .hw_params = pxa2xx_ssp_hw_params,},
-+ .caps = {
-+ .mode = pxa2xx_ssp_modes,
-+ .num_modes = ARRAY_SIZE(pxa2xx_ssp_modes),},
-+ },
-+};
-+
-+EXPORT_SYMBOL_GPL(pxa_ssp_dai);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("pxa2xx SSP/PCM SoC Interface");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/spitz.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/spitz.c
-@@ -0,0 +1,374 @@
-+/*
-+ * spitz.c -- SoC audio for Sharp SL-Cxx00 models Spitz, Borzoi and Akita
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Authors: Liam Girdwood <liam.girdwood@wolfsonmicro.com>
-+ * Richard Purdie <richard@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 30th Nov 2005 Initial version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/timer.h>
-+#include <linux/interrupt.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/hardware/scoop.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/akita.h>
-+#include <asm/arch/spitz.h>
-+#include <asm/mach-types.h>
-+#include "../codecs/wm8750.h"
-+#include "pxa2xx-pcm.h"
-+
-+#define SPITZ_HP 0
-+#define SPITZ_MIC 1
-+#define SPITZ_LINE 2
-+#define SPITZ_HEADSET 3
-+#define SPITZ_HP_OFF 4
-+#define SPITZ_SPK_ON 0
-+#define SPITZ_SPK_OFF 1
-+
-+ /* audio clock in Hz - rounded from 12.235MHz */
-+#define SPITZ_AUDIO_CLOCK 12288000
-+
-+static int spitz_jack_func;
-+static int spitz_spk_func;
-+
-+static void spitz_ext_control(struct snd_soc_codec *codec)
-+{
-+ if (spitz_spk_func == SPITZ_SPK_ON)
-+ snd_soc_dapm_set_endpoint(codec, "Ext Spk", 1);
-+ else
-+ snd_soc_dapm_set_endpoint(codec, "Ext Spk", 0);
-+
-+ /* set up jack connection */
-+ switch (spitz_jack_func) {
-+ case SPITZ_HP:
-+ /* enable and unmute hp jack, disable mic bias */
-+ snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1);
-+ set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
-+ set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
-+ break;
-+ case SPITZ_MIC:
-+ /* enable mic jack and bias, mute hp */
-+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Mic Jack", 1);
-+ reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
-+ reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
-+ break;
-+ case SPITZ_LINE:
-+ /* enable line jack, disable mic bias and mute hp */
-+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Line Jack", 1);
-+ reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
-+ reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
-+ break;
-+ case SPITZ_HEADSET:
-+ /* enable and unmute headset jack enable mic bias, mute L hp */
-+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Mic Jack", 1);
-+ snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Headset Jack", 1);
-+ reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
-+ set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
-+ break;
-+ case SPITZ_HP_OFF:
-+
-+ /* jack removed, everything off */
-+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
-+ snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
-+ reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
-+ reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
-+ break;
-+ }
-+ snd_soc_dapm_sync_endpoints(codec);
-+}
-+
-+static int spitz_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_codec *codec = rtd->socdev->codec;
-+
-+ /* check the jack status at stream startup */
-+ spitz_ext_control(codec);
-+ return 0;
-+}
-+
-+static struct snd_soc_ops spitz_ops = {
-+ .startup = spitz_startup,
-+};
-+
-+static int spitz_get_jack(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = spitz_jack_func;
-+ return 0;
-+}
-+
-+static int spitz_set_jack(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+
-+ if (spitz_jack_func == ucontrol->value.integer.value[0])
-+ return 0;
-+
-+ spitz_jack_func = ucontrol->value.integer.value[0];
-+ spitz_ext_control(codec);
-+ return 1;
-+}
-+
-+static int spitz_get_spk(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = spitz_spk_func;
-+ return 0;
-+}
-+
-+static int spitz_set_spk(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+
-+ if (spitz_spk_func == ucontrol->value.integer.value[0])
-+ return 0;
-+
-+ spitz_spk_func = ucontrol->value.integer.value[0];
-+ spitz_ext_control(codec);
-+ return 1;
-+}
-+
-+static int spitz_mic_bias(struct snd_soc_dapm_widget *w, int event)
-+{
-+ if (machine_is_borzoi() || machine_is_spitz()) {
-+ if (SND_SOC_DAPM_EVENT_ON(event))
-+ set_scoop_gpio(&spitzscoop2_device.dev,
-+ SPITZ_SCP2_MIC_BIAS);
-+ else
-+ reset_scoop_gpio(&spitzscoop2_device.dev,
-+ SPITZ_SCP2_MIC_BIAS);
-+ }
-+
-+ if (machine_is_akita()) {
-+ if (SND_SOC_DAPM_EVENT_ON(event))
-+ akita_set_ioexp(&akitaioexp_device.dev,
-+ AKITA_IOEXP_MIC_BIAS);
-+ else
-+ akita_reset_ioexp(&akitaioexp_device.dev,
-+ AKITA_IOEXP_MIC_BIAS);
-+ }
-+ return 0;
-+}
-+
-+/* spitz machine dapm widgets */
-+static const struct snd_soc_dapm_widget wm8750_dapm_widgets[] = {
-+ SND_SOC_DAPM_HP("Headphone Jack", NULL),
-+ SND_SOC_DAPM_MIC("Mic Jack", spitz_mic_bias),
-+ SND_SOC_DAPM_SPK("Ext Spk", NULL),
-+ SND_SOC_DAPM_LINE("Line Jack", NULL),
-+
-+ /* headset is a mic and mono headphone */
-+ SND_SOC_DAPM_HP("Headset Jack", NULL),
-+};
-+
-+/* Spitz machine audio_map */
-+static const char *audio_map[][3] = {
-+
-+ /* headphone connected to LOUT1, ROUT1 */
-+ {"Headphone Jack", NULL, "LOUT1"},
-+ {"Headphone Jack", NULL, "ROUT1"},
-+
-+ /* headset connected to ROUT1 and LINPUT1 with bias (def below) */
-+ {"Headset Jack", NULL, "ROUT1"},
-+
-+ /* ext speaker connected to LOUT2, ROUT2 */
-+ {"Ext Spk", NULL , "ROUT2"},
-+ {"Ext Spk", NULL , "LOUT2"},
-+
-+ /* mic is connected to input 1 - with bias */
-+ {"LINPUT1", NULL, "Mic Bias"},
-+ {"Mic Bias", NULL, "Mic Jack"},
-+
-+ /* line is connected to input 1 - no bias */
-+ {"LINPUT1", NULL, "Line Jack"},
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+static const char *jack_function[] = {"Headphone", "Mic", "Line", "Headset",
-+ "Off"};
-+static const char *spk_function[] = {"On", "Off"};
-+static const struct soc_enum spitz_enum[] = {
-+ SOC_ENUM_SINGLE_EXT(5, jack_function),
-+ SOC_ENUM_SINGLE_EXT(2, spk_function),
-+};
-+
-+static const struct snd_kcontrol_new wm8750_spitz_controls[] = {
-+ SOC_ENUM_EXT("Jack Function", spitz_enum[0], spitz_get_jack,
-+ spitz_set_jack),
-+ SOC_ENUM_EXT("Speaker Function", spitz_enum[1], spitz_get_spk,
-+ spitz_set_spk),
-+};
-+
-+/*
-+ * Logic for a wm8750 as connected on a Sharp SL-Cxx00 Device
-+ */
-+static int spitz_wm8750_init(struct snd_soc_codec *codec)
-+{
-+ int i, err;
-+
-+ /* NC codec pins */
-+ snd_soc_dapm_set_endpoint(codec, "RINPUT1", 0);
-+ snd_soc_dapm_set_endpoint(codec, "LINPUT2", 0);
-+ snd_soc_dapm_set_endpoint(codec, "RINPUT2", 0);
-+ snd_soc_dapm_set_endpoint(codec, "LINPUT3", 0);
-+ snd_soc_dapm_set_endpoint(codec, "RINPUT3", 0);
-+ snd_soc_dapm_set_endpoint(codec, "OUT3", 0);
-+ snd_soc_dapm_set_endpoint(codec, "MONO", 0);
-+
-+ /* Add spitz specific controls */
-+ for (i = 0; i < ARRAY_SIZE(wm8750_spitz_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8750_spitz_controls[i], codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ /* Add spitz specific widgets */
-+ for (i = 0; i < ARRAY_SIZE(wm8750_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8750_dapm_widgets[i]);
-+ }
-+
-+ /* Set up spitz specific audio path audio_map */
-+ for (i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+ return 0;
-+}
-+
-+static unsigned int spitz_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+{
-+ if (info->bclk_master & SND_SOC_DAIFMT_CBS_CFS) {
-+ /* pxa2xx is i2s master */
-+ switch (info->rate) {
-+ case 11025:
-+ case 22050:
-+ case 44100:
-+ case 88200:
-+ /* configure codec digital filters
-+ * for 11.025, 22.05, 44.1, 88.2 */
-+ rtd->codec_dai->config_sysclk(rtd->codec_dai, info,
-+ 11289600);
-+ break;
-+ default:
-+ /* configure codec digital filters for all other rates */
-+ rtd->codec_dai->config_sysclk(rtd->codec_dai, info,
-+ SPITZ_AUDIO_CLOCK);
-+ break;
-+ }
-+ /* configure pxa2xx i2s interface clocks as master */
-+ return rtd->cpu_dai->config_sysclk(rtd->cpu_dai, info,
-+ SPITZ_AUDIO_CLOCK);
-+ } else {
-+ /* codec is i2s master - only configure codec DAI clock */
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info,
-+ SPITZ_AUDIO_CLOCK);
-+ }
-+}
-+
-+/* spitz digital audio interface glue - connects codec <--> CPU */
-+static struct snd_soc_dai_link spitz_dai = {
-+ .name = "wm8750",
-+ .stream_name = "WM8750",
-+ .cpu_dai = &pxa_i2s_dai,
-+ .codec_dai = &wm8750_dai,
-+ .init = spitz_wm8750_init,
-+ .config_sysclk = spitz_config_sysclk,
-+};
-+
-+/* spitz audio machine driver */
-+static struct snd_soc_machine snd_soc_machine_spitz = {
-+ .name = "Spitz",
-+ .dai_link = &spitz_dai,
-+ .num_links = 1,
-+ .ops = &spitz_ops,
-+};
-+
-+/* spitz audio private data */
-+static struct wm8750_setup_data spitz_wm8750_setup = {
-+ .i2c_address = 0x1b,
-+};
-+
-+/* spitz audio subsystem */
-+static struct snd_soc_device spitz_snd_devdata = {
-+ .machine = &snd_soc_machine_spitz,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm8750,
-+ .codec_data = &spitz_wm8750_setup,
-+};
-+
-+static struct platform_device *spitz_snd_device;
-+
-+static int __init spitz_init(void)
-+{
-+ int ret;
-+
-+ if (!(machine_is_spitz() || machine_is_borzoi() || machine_is_akita()))
-+ return -ENODEV;
-+
-+ spitz_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!spitz_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(spitz_snd_device, &spitz_snd_devdata);
-+ spitz_snd_devdata.dev = &spitz_snd_device->dev;
-+ ret = platform_device_add(spitz_snd_device);
-+
-+ if (ret)
-+ platform_device_put(spitz_snd_device);
-+
-+ return ret;
-+}
-+
-+static void __exit spitz_exit(void)
-+{
-+ platform_device_unregister(spitz_snd_device);
-+}
-+
-+module_init(spitz_init);
-+module_exit(spitz_exit);
-+
-+MODULE_AUTHOR("Richard Purdie");
-+MODULE_DESCRIPTION("ALSA SoC Spitz");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/pxa/tosa.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/pxa/tosa.c
-@@ -0,0 +1,287 @@
-+/*
-+ * tosa.c -- SoC audio for Tosa
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Authors: Liam Girdwood <liam.girdwood@wolfsonmicro.com>
-+ * Richard Purdie <richard@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 30th Nov 2005 Initial version.
-+ *
-+ * GPIO's
-+ * 1 - Jack Insertion
-+ * 5 - Hookswitch (headset answer/hang up switch)
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/device.h>
-+
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/hardware/tmio.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/audio.h>
-+#include <asm/arch/tosa.h>
-+
-+#include "../codecs/wm9712.h"
-+#include "pxa2xx-pcm.h"
-+
-+static struct snd_soc_machine tosa;
-+
-+#define TOSA_HP 0
-+#define TOSA_MIC_INT 1
-+#define TOSA_HEADSET 2
-+#define TOSA_HP_OFF 3
-+#define TOSA_SPK_ON 0
-+#define TOSA_SPK_OFF 1
-+
-+static int tosa_jack_func;
-+static int tosa_spk_func;
-+
-+static void tosa_ext_control(struct snd_soc_codec *codec)
-+{
-+ int spk = 0, mic_int = 0, hp = 0, hs = 0;
-+
-+ /* set up jack connection */
-+ switch (tosa_jack_func) {
-+ case TOSA_HP:
-+ hp = 1;
-+ break;
-+ case TOSA_MIC_INT:
-+ mic_int = 1;
-+ break;
-+ case TOSA_HEADSET:
-+ hs = 1;
-+ break;
-+ }
-+
-+ if (tosa_spk_func == TOSA_SPK_ON)
-+ spk = 1;
-+
-+ snd_soc_dapm_set_endpoint(codec, "Speaker", spk);
-+ snd_soc_dapm_set_endpoint(codec, "Mic (Internal)", mic_int);
-+ snd_soc_dapm_set_endpoint(codec, "Headphone Jack", hp);
-+ snd_soc_dapm_set_endpoint(codec, "Headset Jack", hs);
-+ snd_soc_dapm_sync_endpoints(codec);
-+}
-+
-+static int tosa_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_codec *codec = rtd->socdev->codec;
-+
-+ /* check the jack status at stream startup */
-+ tosa_ext_control(codec);
-+ return 0;
-+}
-+
-+static struct snd_soc_ops tosa_ops = {
-+ .startup = tosa_startup,
-+};
-+
-+static int tosa_get_jack(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = tosa_jack_func;
-+ return 0;
-+}
-+
-+static int tosa_set_jack(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+
-+ if (tosa_jack_func == ucontrol->value.integer.value[0])
-+ return 0;
-+
-+ tosa_jack_func = ucontrol->value.integer.value[0];
-+ tosa_ext_control(codec);
-+ return 1;
-+}
-+
-+static int tosa_get_spk(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ ucontrol->value.integer.value[0] = tosa_spk_func;
-+ return 0;
-+}
-+
-+static int tosa_set_spk(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+
-+ if (tosa_spk_func == ucontrol->value.integer.value[0])
-+ return 0;
-+
-+ tosa_spk_func = ucontrol->value.integer.value[0];
-+ tosa_ext_control(codec);
-+ return 1;
-+}
-+
-+/* tosa dapm event handlers */
-+static int tosa_hp_event(struct snd_soc_dapm_widget *w, int event)
-+{
-+ if (SND_SOC_DAPM_EVENT_ON(event))
-+ set_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_L_MUTE);
-+ else
-+ reset_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_L_MUTE);
-+ return 0;
-+}
-+
-+/* tosa machine dapm widgets */
-+static const struct snd_soc_dapm_widget tosa_dapm_widgets[] = {
-+SND_SOC_DAPM_HP("Headphone Jack", tosa_hp_event),
-+SND_SOC_DAPM_HP("Headset Jack", NULL),
-+SND_SOC_DAPM_MIC("Mic (Internal)", NULL),
-+SND_SOC_DAPM_SPK("Speaker", NULL),
-+};
-+
-+/* tosa audio map */
-+static const char *audio_map[][3] = {
-+
-+ /* headphone connected to HPOUTL, HPOUTR */
-+ {"Headphone Jack", NULL, "HPOUTL"},
-+ {"Headphone Jack", NULL, "HPOUTR"},
-+
-+ /* ext speaker connected to LOUT2, ROUT2 */
-+ {"Speaker", NULL, "LOUT2"},
-+ {"Speaker", NULL, "ROUT2"},
-+
-+ /* internal mic is connected to mic1, mic2 differential - with bias */
-+ {"MIC1", NULL, "Mic Bias"},
-+ {"MIC2", NULL, "Mic Bias"},
-+ {"Mic Bias", NULL, "Mic (Internal)"},
-+
-+ /* headset is connected to HPOUTR, and LINEINR with bias */
-+ {"Headset Jack", NULL, "HPOUTR"},
-+ {"LINEINR", NULL, "Mic Bias"},
-+ {"Mic Bias", NULL, "Headset Jack"},
-+
-+ {NULL, NULL, NULL},
-+};
-+
-+static const char *jack_function[] = {"Headphone", "Mic", "Line", "Headset",
-+ "Off"};
-+static const char *spk_function[] = {"On", "Off"};
-+static const struct soc_enum tosa_enum[] = {
-+ SOC_ENUM_SINGLE_EXT(5, jack_function),
-+ SOC_ENUM_SINGLE_EXT(2, spk_function),
-+};
-+
-+static const struct snd_kcontrol_new tosa_controls[] = {
-+ SOC_ENUM_EXT("Jack Function", tosa_enum[0], tosa_get_jack,
-+ tosa_set_jack),
-+ SOC_ENUM_EXT("Speaker Function", tosa_enum[1], tosa_get_spk,
-+ tosa_set_spk),
-+};
-+
-+static int tosa_ac97_init(struct snd_soc_codec *codec)
-+{
-+ int i, err;
-+
-+ snd_soc_dapm_set_endpoint(codec, "OUT3", 0);
-+ snd_soc_dapm_set_endpoint(codec, "MONOOUT", 0);
-+
-+ /* add tosa specific controls */
-+ for (i = 0; i < ARRAY_SIZE(tosa_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&tosa_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ /* add tosa specific widgets */
-+ for (i = 0; i < ARRAY_SIZE(tosa_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &tosa_dapm_widgets[i]);
-+ }
-+
-+ /* set up tosa specific audio path audio_map */
-+ for (i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+ return 0;
-+}
-+
-+static struct snd_soc_dai_link tosa_dai[] = {
-+{
-+ .name = "AC97",
-+ .stream_name = "AC97 HiFi",
-+ .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
-+ .codec_dai = &wm9712_dai[WM9712_DAI_AC97_HIFI],
-+ .init = tosa_ac97_init,
-+},
-+{
-+ .name = "AC97 Aux",
-+ .stream_name = "AC97 Aux",
-+ .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
-+ .codec_dai = &wm9712_dai[WM9712_DAI_AC97_AUX],
-+},
-+};
-+
-+static struct snd_soc_machine tosa = {
-+ .name = "Tosa",
-+ .dai_link = tosa_dai,
-+ .num_links = ARRAY_SIZE(tosa_dai),
-+ .ops = &tosa_ops,
-+};
-+
-+static struct snd_soc_device tosa_snd_devdata = {
-+ .machine = &tosa,
-+ .platform = &pxa2xx_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm9712,
-+};
-+
-+static struct platform_device *tosa_snd_device;
-+
-+static int __init tosa_init(void)
-+{
-+ int ret;
-+
-+ if (!machine_is_tosa())
-+ return -ENODEV;
-+
-+ tosa_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!tosa_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(tosa_snd_device, &tosa_snd_devdata);
-+ tosa_snd_devdata.dev = &tosa_snd_device->dev;
-+ ret = platform_device_add(tosa_snd_device);
-+
-+ if (ret)
-+ platform_device_put(tosa_snd_device);
-+
-+ return ret;
-+}
-+
-+static void __exit tosa_exit(void)
-+{
-+ platform_device_unregister(tosa_snd_device);
-+}
-+
-+module_init(tosa_init);
-+module_exit(tosa_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Richard Purdie");
-+MODULE_DESCRIPTION("ALSA SoC Tosa");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/soc-dapm.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/soc-dapm.c
-@@ -0,0 +1,1327 @@
-+/*
-+ * soc-dapm.c -- ALSA SoC Dynamic Audio Power Management
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 12th Aug 2005 Initial version.
-+ * 25th Oct 2005 Implemented path power domain.
-+ * 18th Dec 2005 Implemented machine and stream level power domain.
-+ *
-+ * Features:
-+ * o Changes power status of internal codec blocks depending on the
-+ * dynamic configuration of codec internal audio paths and active
-+ * DAC's/ADC's.
-+ * o Platform power domain - can support external components i.e. amps and
-+ * mic/meadphone insertion events.
-+ * o Automatic Mic Bias support
-+ * o Jack insertion power event initiation - e.g. hp insertion will enable
-+ * sinks, dacs, etc
-+ * o Delayed powerdown of audio susbsytem to reduce pops between a quick
-+ * device reopen.
-+ *
-+ * Todo:
-+ * o DAPM power change sequencing - allow for configurable per
-+ * codec sequences.
-+ * o Support for analogue bias optimisation.
-+ * o Support for reduced codec oversampling rates.
-+ * o Support for reduced codec bias currents.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/bitops.h>
-+#include <linux/platform_device.h>
-+#include <linux/jiffies.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+/* debug */
-+#define DAPM_DEBUG 0
-+#if DAPM_DEBUG
-+#define dump_dapm(codec, action) dbg_dump_dapm(codec, action)
-+#define dbg(format, arg...) printk(format, ## arg)
-+#else
-+#define dump_dapm(codec, action)
-+#define dbg(format, arg...)
-+#endif
-+
-+#define POP_DEBUG 0
-+#if POP_DEBUG
-+#define POP_TIME 500 /* 500 msecs - change if pop debug is too fast */
-+#define pop_wait(time) schedule_timeout_interruptible(msecs_to_jiffies(time))
-+#define pop_dbg(format, arg...) printk(format, ## arg); pop_wait(POP_TIME)
-+#else
-+#define pop_dbg(format, arg...)
-+#define pop_wait(time)
-+#endif
-+
-+/* dapm power sequences - make this per codec in the future */
-+static int dapm_up_seq[] = {
-+ snd_soc_dapm_pre, snd_soc_dapm_micbias, snd_soc_dapm_mic,
-+ snd_soc_dapm_mux, snd_soc_dapm_dac, snd_soc_dapm_mixer, snd_soc_dapm_pga,
-+ snd_soc_dapm_adc, snd_soc_dapm_hp, snd_soc_dapm_spk, snd_soc_dapm_post
-+};
-+static int dapm_down_seq[] = {
-+ snd_soc_dapm_pre, snd_soc_dapm_adc, snd_soc_dapm_hp, snd_soc_dapm_spk,
-+ snd_soc_dapm_pga, snd_soc_dapm_mixer, snd_soc_dapm_dac, snd_soc_dapm_mic,
-+ snd_soc_dapm_micbias, snd_soc_dapm_mux, snd_soc_dapm_post
-+};
-+
-+static int dapm_status = 1;
-+module_param(dapm_status, int, 0);
-+MODULE_PARM_DESC(dapm_status, "enable DPM sysfs entries");
-+
-+/* create a new dapm widget */
-+static struct snd_soc_dapm_widget *dapm_cnew_widget(
-+ const struct snd_soc_dapm_widget *_widget)
-+{
-+ struct snd_soc_dapm_widget* widget;
-+ widget = kmalloc(sizeof(struct snd_soc_dapm_widget), GFP_KERNEL);
-+ if (!widget)
-+ return NULL;
-+
-+ memcpy(widget, _widget, sizeof(struct snd_soc_dapm_widget));
-+ return widget;
-+}
-+
-+/* set up initial codec paths */
-+static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
-+ struct snd_soc_dapm_path *p, int i)
-+{
-+ switch (w->id) {
-+ case snd_soc_dapm_switch:
-+ case snd_soc_dapm_mixer: {
-+ int val;
-+ int reg = w->kcontrols[i].private_value & 0xff;
-+ int shift = (w->kcontrols[i].private_value >> 8) & 0x0f;
-+ int mask = (w->kcontrols[i].private_value >> 16) & 0xff;
-+ int invert = (w->kcontrols[i].private_value >> 24) & 0x01;
-+
-+ val = snd_soc_read(w->codec, reg);
-+ val = (val >> shift) & mask;
-+
-+ if ((invert && !val) || (!invert && val))
-+ p->connect = 1;
-+ else
-+ p->connect = 0;
-+ }
-+ break;
-+ case snd_soc_dapm_mux: {
-+ struct soc_enum *e = (struct soc_enum *)w->kcontrols[i].private_value;
-+ int val, item, bitmask;
-+
-+ for (bitmask = 1; bitmask < e->mask; bitmask <<= 1)
-+ ;
-+ val = snd_soc_read(w->codec, e->reg);
-+ item = (val >> e->shift_l) & (bitmask - 1);
-+
-+ p->connect = 0;
-+ for (i = 0; i < e->mask; i++) {
-+ if (!(strcmp(p->name, e->texts[i])) && item == i)
-+ p->connect = 1;
-+ }
-+ }
-+ break;
-+ /* does not effect routing - always connected */
-+ case snd_soc_dapm_pga:
-+ case snd_soc_dapm_output:
-+ case snd_soc_dapm_adc:
-+ case snd_soc_dapm_input:
-+ case snd_soc_dapm_dac:
-+ case snd_soc_dapm_micbias:
-+ case snd_soc_dapm_vmid:
-+ p->connect = 1;
-+ break;
-+ /* does effect routing - dynamically connected */
-+ case snd_soc_dapm_hp:
-+ case snd_soc_dapm_mic:
-+ case snd_soc_dapm_spk:
-+ case snd_soc_dapm_line:
-+ case snd_soc_dapm_pre:
-+ case snd_soc_dapm_post:
-+ p->connect = 0;
-+ break;
-+ }
-+}
-+
-+/* connect mux widget to it's interconnecting audio paths */
-+static int dapm_connect_mux(struct snd_soc_codec *codec,
-+ struct snd_soc_dapm_widget *src, struct snd_soc_dapm_widget *dest,
-+ struct snd_soc_dapm_path *path, const char *control_name,
-+ const struct snd_kcontrol_new *kcontrol)
-+{
-+ struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
-+ int i;
-+
-+ for (i = 0; i < e->mask; i++) {
-+ if (!(strcmp(control_name, e->texts[i]))) {
-+ list_add(&path->list, &codec->dapm_paths);
-+ list_add(&path->list_sink, &dest->sources);
-+ list_add(&path->list_source, &src->sinks);
-+ path->name = (char*)e->texts[i];
-+ dapm_set_path_status(dest, path, 0);
-+ return 0;
-+ }
-+ }
-+
-+ return -ENODEV;
-+}
-+
-+/* connect mixer widget to it's interconnecting audio paths */
-+static int dapm_connect_mixer(struct snd_soc_codec *codec,
-+ struct snd_soc_dapm_widget *src, struct snd_soc_dapm_widget *dest,
-+ struct snd_soc_dapm_path *path, const char *control_name)
-+{
-+ int i;
-+
-+ /* search for mixer kcontrol */
-+ for (i = 0; i < dest->num_kcontrols; i++) {
-+ if (!strcmp(control_name, dest->kcontrols[i].name)) {
-+ list_add(&path->list, &codec->dapm_paths);
-+ list_add(&path->list_sink, &dest->sources);
-+ list_add(&path->list_source, &src->sinks);
-+ path->name = dest->kcontrols[i].name;
-+ dapm_set_path_status(dest, path, i);
-+ return 0;
-+ }
-+ }
-+ return -ENODEV;
-+}
-+
-+/* update dapm codec register bits */
-+static int dapm_update_bits(struct snd_soc_dapm_widget *widget)
-+{
-+ int change, power;
-+ unsigned short old, new;
-+ struct snd_soc_codec *codec = widget->codec;
-+
-+ /* check for valid widgets */
-+ if (widget->reg < 0 || widget->id == snd_soc_dapm_input ||
-+ widget->id == snd_soc_dapm_output ||
-+ widget->id == snd_soc_dapm_hp ||
-+ widget->id == snd_soc_dapm_mic ||
-+ widget->id == snd_soc_dapm_line ||
-+ widget->id == snd_soc_dapm_spk)
-+ return 0;
-+
-+ power = widget->power;
-+ if (widget->invert)
-+ power = (power ? 0:1);
-+
-+ old = snd_soc_read(codec, widget->reg);
-+ new = (old & ~(0x1 << widget->shift)) | (power << widget->shift);
-+
-+ change = old != new;
-+ if (change) {
-+ pop_dbg("pop test %s : %s in %d ms\n", widget->name,
-+ widget->power ? "on" : "off", POP_TIME);
-+ snd_soc_write(codec, widget->reg, new);
-+ pop_wait(POP_TIME);
-+ }
-+ dbg("reg old %x new %x change %d\n", old, new, change);
-+ return change;
-+}
-+
-+/* ramps the volume up or down to minimise pops before or after a
-+ * DAPM power event */
-+static int dapm_set_pga(struct snd_soc_dapm_widget *widget, int power)
-+{
-+ const struct snd_kcontrol_new *k = widget->kcontrols;
-+
-+ if (widget->muted && !power)
-+ return 0;
-+ if (!widget->muted && power)
-+ return 0;
-+
-+ if (widget->num_kcontrols && k) {
-+ int reg = k->private_value & 0xff;
-+ int shift = (k->private_value >> 8) & 0x0f;
-+ int mask = (k->private_value >> 16) & 0xff;
-+ int invert = (k->private_value >> 24) & 0x01;
-+
-+ if (power) {
-+ int i;
-+ /* power up has happended, increase volume to last level */
-+ if (invert) {
-+ for (i = mask; i > widget->saved_value; i--)
-+ snd_soc_update_bits(widget->codec, reg, mask, i);
-+ } else {
-+ for (i = 0; i < widget->saved_value; i++)
-+ snd_soc_update_bits(widget->codec, reg, mask, i);
-+ }
-+ widget->muted = 0;
-+ } else {
-+ /* power down is about to occur, decrease volume to mute */
-+ int val = snd_soc_read(widget->codec, reg);
-+ int i = widget->saved_value = (val >> shift) & mask;
-+ if (invert) {
-+ for (; i < mask; i++)
-+ snd_soc_update_bits(widget->codec, reg, mask, i);
-+ } else {
-+ for (; i > 0; i--)
-+ snd_soc_update_bits(widget->codec, reg, mask, i);
-+ }
-+ widget->muted = 1;
-+ }
-+ }
-+ return 0;
-+}
-+
-+/* create new dapm mixer control */
-+static int dapm_new_mixer(struct snd_soc_codec *codec,
-+ struct snd_soc_dapm_widget *w)
-+{
-+ int i, ret = 0;
-+ char name[32];
-+ struct snd_soc_dapm_path *path;
-+
-+ /* add kcontrol */
-+ for (i = 0; i < w->num_kcontrols; i++) {
-+
-+ /* match name */
-+ list_for_each_entry(path, &w->sources, list_sink) {
-+
-+ /* mixer/mux paths name must match control name */
-+ if (path->name != (char*)w->kcontrols[i].name)
-+ continue;
-+
-+ /* add dapm control with long name */
-+ snprintf(name, 32, "%s %s", w->name, w->kcontrols[i].name);
-+ path->long_name = kstrdup (name, GFP_KERNEL);
-+ if (path->long_name == NULL)
-+ return -ENOMEM;
-+
-+ path->kcontrol = snd_soc_cnew(&w->kcontrols[i], w,
-+ path->long_name);
-+ ret = snd_ctl_add(codec->card, path->kcontrol);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: failed to add dapm kcontrol %s\n",
-+ path->long_name);
-+ kfree(path->long_name);
-+ path->long_name = NULL;
-+ return ret;
-+ }
-+ }
-+ }
-+ return ret;
-+}
-+
-+/* create new dapm mux control */
-+static int dapm_new_mux(struct snd_soc_codec *codec,
-+ struct snd_soc_dapm_widget *w)
-+{
-+ struct snd_soc_dapm_path *path = NULL;
-+ struct snd_kcontrol *kcontrol;
-+ int ret = 0;
-+
-+ if (!w->num_kcontrols) {
-+ printk(KERN_ERR "asoc: mux %s has no controls\n", w->name);
-+ return -EINVAL;
-+ }
-+
-+ kcontrol = snd_soc_cnew(&w->kcontrols[0], w, w->name);
-+ ret = snd_ctl_add(codec->card, kcontrol);
-+ if (ret < 0)
-+ goto err;
-+
-+ list_for_each_entry(path, &w->sources, list_sink)
-+ path->kcontrol = kcontrol;
-+
-+ return ret;
-+
-+err:
-+ printk(KERN_ERR "asoc: failed to add kcontrol %s\n", w->name);
-+ return ret;
-+}
-+
-+/* create new dapm volume control */
-+static int dapm_new_pga(struct snd_soc_codec *codec,
-+ struct snd_soc_dapm_widget *w)
-+{
-+ struct snd_kcontrol *kcontrol;
-+ int ret = 0;
-+
-+ if (!w->num_kcontrols)
-+ return -EINVAL;
-+
-+ kcontrol = snd_soc_cnew(&w->kcontrols[0], w, w->name);
-+ ret = snd_ctl_add(codec->card, kcontrol);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: failed to add kcontrol %s\n", w->name);
-+ return ret;
-+ }
-+
-+ return ret;
-+}
-+
-+/* reset 'walked' bit for each dapm path */
-+static inline void dapm_clear_walk(struct snd_soc_codec *codec)
-+{
-+ struct snd_soc_dapm_path *p;
-+
-+ list_for_each_entry(p, &codec->dapm_paths, list)
-+ p->walked = 0;
-+}
-+
-+/*
-+ * Recursively check for a completed path to an active or physically connected
-+ * output widget. Returns number of complete paths.
-+ */
-+static int is_connected_output_ep(struct snd_soc_dapm_widget *widget)
-+{
-+ struct snd_soc_dapm_path *path;
-+ int con = 0;
-+
-+ if (widget->id == snd_soc_dapm_adc && widget->active)
-+ return 1;
-+
-+ if (widget->connected) {
-+ /* connected pin ? */
-+ if (widget->id == snd_soc_dapm_output && !widget->ext)
-+ return 1;
-+
-+ /* connected jack or spk ? */
-+ if (widget->id == snd_soc_dapm_hp || widget->id == snd_soc_dapm_spk ||
-+ widget->id == snd_soc_dapm_line)
-+ return 1;
-+ }
-+
-+ list_for_each_entry(path, &widget->sinks, list_source) {
-+ if (path->walked)
-+ continue;
-+
-+ if (path->sink && path->connect) {
-+ path->walked = 1;
-+ con += is_connected_output_ep(path->sink);
-+ }
-+ }
-+
-+ return con;
-+}
-+
-+/*
-+ * Recursively check for a completed path to an active or physically connected
-+ * input widget. Returns number of complete paths.
-+ */
-+static int is_connected_input_ep(struct snd_soc_dapm_widget *widget)
-+{
-+ struct snd_soc_dapm_path *path;
-+ int con = 0;
-+
-+ /* active stream ? */
-+ if (widget->id == snd_soc_dapm_dac && widget->active)
-+ return 1;
-+
-+ if (widget->connected) {
-+ /* connected pin ? */
-+ if (widget->id == snd_soc_dapm_input && !widget->ext)
-+ return 1;
-+
-+ /* connected VMID/Bias for lower pops */
-+ if (widget->id == snd_soc_dapm_vmid)
-+ return 1;
-+
-+ /* connected jack ? */
-+ if (widget->id == snd_soc_dapm_mic || widget->id == snd_soc_dapm_line)
-+ return 1;
-+ }
-+
-+ list_for_each_entry(path, &widget->sources, list_sink) {
-+ if (path->walked)
-+ continue;
-+
-+ if (path->source && path->connect) {
-+ path->walked = 1;
-+ con += is_connected_input_ep(path->source);
-+ }
-+ }
-+
-+ return con;
-+}
-+
-+/*
-+ * Scan each dapm widget for complete audio path.
-+ * A complete path is a route that has valid endpoints i.e.:-
-+ *
-+ * o DAC to output pin.
-+ * o Input Pin to ADC.
-+ * o Input pin to Output pin (bypass, sidetone)
-+ * o DAC to ADC (loopback).
-+ */
-+int dapm_power_widgets(struct snd_soc_codec *codec, int event)
-+{
-+ struct snd_soc_dapm_widget *w;
-+ int in, out, i, c = 1, *seq = NULL, ret = 0, power_change, power;
-+
-+ /* do we have a sequenced stream event */
-+ if (event == SND_SOC_DAPM_STREAM_START) {
-+ c = ARRAY_SIZE(dapm_up_seq);
-+ seq = dapm_up_seq;
-+ } else if (event == SND_SOC_DAPM_STREAM_STOP) {
-+ c = ARRAY_SIZE(dapm_down_seq);
-+ seq = dapm_down_seq;
-+ }
-+
-+ for(i = 0; i < c; i++) {
-+ list_for_each_entry(w, &codec->dapm_widgets, list) {
-+
-+ /* is widget in stream order */
-+ if (seq && seq[i] && w->id != seq[i])
-+ continue;
-+
-+ /* vmid - no action */
-+ if (w->id == snd_soc_dapm_vmid)
-+ continue;
-+
-+ /* active ADC */
-+ if (w->id == snd_soc_dapm_adc && w->active) {
-+ in = is_connected_input_ep(w);
-+ dapm_clear_walk(w->codec);
-+ w->power = (in != 0) ? 1 : 0;
-+ dapm_update_bits(w);
-+ continue;
-+ }
-+
-+ /* active DAC */
-+ if (w->id == snd_soc_dapm_dac && w->active) {
-+ out = is_connected_output_ep(w);
-+ dapm_clear_walk(w->codec);
-+ w->power = (out != 0) ? 1 : 0;
-+ dapm_update_bits(w);
-+ continue;
-+ }
-+
-+ /* programmable gain/attenuation */
-+ if (w->id == snd_soc_dapm_pga) {
-+ int on;
-+ in = is_connected_input_ep(w);
-+ dapm_clear_walk(w->codec);
-+ out = is_connected_output_ep(w);
-+ dapm_clear_walk(w->codec);
-+ w->power = on = (out != 0 && in != 0) ? 1 : 0;
-+
-+ if (!on)
-+ dapm_set_pga(w, on); /* lower volume to reduce pops */
-+ dapm_update_bits(w);
-+ if (on)
-+ dapm_set_pga(w, on); /* restore volume from zero */
-+
-+ continue;
-+ }
-+
-+ /* pre and post event widgets */
-+ if (w->id == snd_soc_dapm_pre) {
-+ if (!w->event)
-+ continue;
-+
-+ if (event == SND_SOC_DAPM_STREAM_START) {
-+ ret = w->event(w, SND_SOC_DAPM_PRE_PMU);
-+ if (ret < 0)
-+ return ret;
-+ } else if (event == SND_SOC_DAPM_STREAM_STOP) {
-+ ret = w->event(w, SND_SOC_DAPM_PRE_PMD);
-+ if (ret < 0)
-+ return ret;
-+ }
-+ continue;
-+ }
-+ if (w->id == snd_soc_dapm_post) {
-+ if (!w->event)
-+ continue;
-+
-+ if (event == SND_SOC_DAPM_STREAM_START) {
-+ ret = w->event(w, SND_SOC_DAPM_POST_PMU);
-+ if (ret < 0)
-+ return ret;
-+ } else if (event == SND_SOC_DAPM_STREAM_STOP) {
-+ ret = w->event(w, SND_SOC_DAPM_POST_PMD);
-+ if (ret < 0)
-+ return ret;
-+ }
-+ continue;
-+ }
-+
-+ /* all other widgets */
-+ in = is_connected_input_ep(w);
-+ dapm_clear_walk(w->codec);
-+ out = is_connected_output_ep(w);
-+ dapm_clear_walk(w->codec);
-+ power = (out != 0 && in != 0) ? 1 : 0;
-+ power_change = (w->power == power) ? 0: 1;
-+ w->power = power;
-+
-+ /* call any power change event handlers */
-+ if (power_change) {
-+ if (w->event) {
-+ dbg("power %s event for %s flags %x\n",
-+ w->power ? "on" : "off", w->name, w->event_flags);
-+ if (power) {
-+ /* power up event */
-+ if (w->event_flags & SND_SOC_DAPM_PRE_PMU) {
-+ ret = w->event(w, SND_SOC_DAPM_PRE_PMU);
-+ if (ret < 0)
-+ return ret;
-+ }
-+ dapm_update_bits(w);
-+ if (w->event_flags & SND_SOC_DAPM_POST_PMU){
-+ ret = w->event(w, SND_SOC_DAPM_POST_PMU);
-+ if (ret < 0)
-+ return ret;
-+ }
-+ } else {
-+ /* power down event */
-+ if (w->event_flags & SND_SOC_DAPM_PRE_PMD) {
-+ ret = w->event(w, SND_SOC_DAPM_PRE_PMD);
-+ if (ret < 0)
-+ return ret;
-+ }
-+ dapm_update_bits(w);
-+ if (w->event_flags & SND_SOC_DAPM_POST_PMD) {
-+ ret = w->event(w, SND_SOC_DAPM_POST_PMD);
-+ if (ret < 0)
-+ return ret;
-+ }
-+ }
-+ } else
-+ /* no event handler */
-+ dapm_update_bits(w);
-+ }
-+ }
-+ }
-+
-+ return ret;
-+}
-+
-+#if DAPM_DEBUG
-+static void dbg_dump_dapm(struct snd_soc_codec* codec, const char *action)
-+{
-+ struct snd_soc_dapm_widget *w;
-+ struct snd_soc_dapm_path *p = NULL;
-+ int in, out;
-+
-+ printk("DAPM %s %s\n", codec->name, action);
-+
-+ list_for_each_entry(w, &codec->dapm_widgets, list) {
-+
-+ /* only display widgets that effect routing */
-+ switch (w->id) {
-+ case snd_soc_dapm_pre:
-+ case snd_soc_dapm_post:
-+ case snd_soc_dapm_vmid:
-+ continue;
-+ case snd_soc_dapm_mux:
-+ case snd_soc_dapm_output:
-+ case snd_soc_dapm_input:
-+ case snd_soc_dapm_switch:
-+ case snd_soc_dapm_hp:
-+ case snd_soc_dapm_mic:
-+ case snd_soc_dapm_spk:
-+ case snd_soc_dapm_line:
-+ case snd_soc_dapm_micbias:
-+ case snd_soc_dapm_dac:
-+ case snd_soc_dapm_adc:
-+ case snd_soc_dapm_pga:
-+ case snd_soc_dapm_mixer:
-+ if (w->name) {
-+ in = is_connected_input_ep(w);
-+ dapm_clear_walk(w->codec);
-+ out = is_connected_output_ep(w);
-+ dapm_clear_walk(w->codec);
-+ printk("%s: %s in %d out %d\n", w->name,
-+ w->power ? "On":"Off",in, out);
-+
-+ list_for_each_entry(p, &w->sources, list_sink) {
-+ if (p->connect)
-+ printk(" in %s %s\n", p->name ? p->name : "static",
-+ p->source->name);
-+ }
-+ list_for_each_entry(p, &w->sinks, list_source) {
-+ p = list_entry(lp, struct snd_soc_dapm_path, list_source);
-+ if (p->connect)
-+ printk(" out %s %s\n", p->name ? p->name : "static",
-+ p->sink->name);
-+ }
-+ }
-+ break;
-+ }
-+ }
-+}
-+#endif
-+
-+/* test and update the power status of a mux widget */
-+int dapm_mux_update_power(struct snd_soc_dapm_widget *widget,
-+ struct snd_kcontrol *kcontrol, int mask, int val, struct soc_enum* e)
-+{
-+ struct snd_soc_dapm_path *path;
-+ int found = 0;
-+
-+ if (widget->id != snd_soc_dapm_mux)
-+ return -ENODEV;
-+
-+ if (!snd_soc_test_bits(widget->codec, e->reg, mask, val))
-+ return 0;
-+
-+ /* find dapm widget path assoc with kcontrol */
-+ list_for_each_entry(path, &widget->codec->dapm_paths, list) {
-+ if (path->kcontrol != kcontrol)
-+ continue;
-+
-+ if (!path->name || ! e->texts[val])
-+ continue;
-+
-+ found = 1;
-+ /* we now need to match the string in the enum to the path */
-+ if (!(strcmp(path->name, e->texts[val])))
-+ path->connect = 1; /* new connection */
-+ else
-+ path->connect = 0; /* old connection must be powered down */
-+ }
-+
-+ if (found)
-+ dapm_power_widgets(widget->codec, SND_SOC_DAPM_STREAM_NOP);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(dapm_mux_update_power);
-+
-+/* test and update the power status of a mixer widget */
-+int dapm_mixer_update_power(struct snd_soc_dapm_widget *widget,
-+ struct snd_kcontrol *kcontrol, int reg, int val_mask, int val, int invert)
-+{
-+ struct snd_soc_dapm_path *path;
-+ int found = 0;
-+
-+ if (widget->id != snd_soc_dapm_mixer)
-+ return -ENODEV;
-+
-+ if (!snd_soc_test_bits(widget->codec, reg, val_mask, val))
-+ return 0;
-+
-+ /* find dapm widget path assoc with kcontrol */
-+ list_for_each_entry(path, &widget->codec->dapm_paths, list) {
-+ if (path->kcontrol != kcontrol)
-+ continue;
-+
-+ /* found, now check type */
-+ found = 1;
-+ if (val)
-+ /* new connection */
-+ path->connect = invert ? 0:1;
-+ else
-+ /* old connection must be powered down */
-+ path->connect = invert ? 1:0;
-+ break;
-+ }
-+
-+ if (found)
-+ dapm_power_widgets(widget->codec, SND_SOC_DAPM_STREAM_NOP);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(dapm_mixer_update_power);
-+
-+/* show dapm widget status in sys fs */
-+static ssize_t dapm_widget_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct snd_soc_device *devdata = dev_get_drvdata(dev);
-+ struct snd_soc_codec *codec = devdata->codec;
-+ struct snd_soc_dapm_widget *w;
-+ int count = 0;
-+ char *state = "not set";
-+
-+ list_for_each_entry(w, &codec->dapm_widgets, list) {
-+
-+ /* only display widgets that burnm power */
-+ switch (w->id) {
-+ case snd_soc_dapm_hp:
-+ case snd_soc_dapm_mic:
-+ case snd_soc_dapm_spk:
-+ case snd_soc_dapm_line:
-+ case snd_soc_dapm_micbias:
-+ case snd_soc_dapm_dac:
-+ case snd_soc_dapm_adc:
-+ case snd_soc_dapm_pga:
-+ case snd_soc_dapm_mixer:
-+ if (w->name)
-+ count += sprintf(buf + count, "%s: %s\n",
-+ w->name, w->power ? "On":"Off");
-+ break;
-+ default:
-+ break;
-+ }
-+ }
-+
-+ switch(codec->dapm_state){
-+ case SNDRV_CTL_POWER_D0:
-+ state = "D0";
-+ break;
-+ case SNDRV_CTL_POWER_D1:
-+ state = "D1";
-+ break;
-+ case SNDRV_CTL_POWER_D2:
-+ state = "D2";
-+ break;
-+ case SNDRV_CTL_POWER_D3hot:
-+ state = "D3hot";
-+ break;
-+ case SNDRV_CTL_POWER_D3cold:
-+ state = "D3cold";
-+ break;
-+ }
-+ count += sprintf(buf + count, "PM State: %s\n", state);
-+
-+ return count;
-+}
-+
-+static DEVICE_ATTR(dapm_widget, 0444, dapm_widget_show, NULL);
-+
-+int snd_soc_dapm_sys_add(struct device *dev)
-+{
-+ int ret = 0;
-+
-+ if (dapm_status)
-+ ret = device_create_file(dev, &dev_attr_dapm_widget);
-+
-+ return ret;
-+}
-+
-+static void snd_soc_dapm_sys_remove(struct device *dev)
-+{
-+ if (dapm_status)
-+ device_remove_file(dev, &dev_attr_dapm_widget);
-+}
-+
-+/* free all dapm widgets and resources */
-+void dapm_free_widgets(struct snd_soc_codec *codec)
-+{
-+ struct snd_soc_dapm_widget *w, *next_w;
-+ struct snd_soc_dapm_path *p, *next_p;
-+
-+ list_for_each_entry_safe(w, next_w, &codec->dapm_widgets, list) {
-+ list_del(&w->list);
-+ kfree(w);
-+ }
-+
-+ list_for_each_entry_safe(p, next_p, &codec->dapm_paths, list) {
-+ list_del(&p->list);
-+ kfree(p->long_name);
-+ kfree(p);
-+ }
-+}
-+
-+/**
-+ * snd_soc_dapm_sync_endpoints - scan and power dapm paths
-+ * @codec: audio codec
-+ *
-+ * Walks all dapm audio paths and powers widgets according to their
-+ * stream or path usage.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_dapm_sync_endpoints(struct snd_soc_codec *codec)
-+{
-+ return dapm_power_widgets(codec, SND_SOC_DAPM_STREAM_NOP);
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_dapm_sync_endpoints);
-+
-+/**
-+ * snd_soc_dapm_connect_input - connect dapm widgets
-+ * @codec: audio codec
-+ * @sink: name of target widget
-+ * @control: mixer control name
-+ * @source: name of source name
-+ *
-+ * Connects 2 dapm widgets together via a named audio path. The sink is
-+ * the widget receiving the audio signal, whilst the source is the sender
-+ * of the audio signal.
-+ *
-+ * Returns 0 for success else error.
-+ */
-+int snd_soc_dapm_connect_input(struct snd_soc_codec *codec, const char *sink,
-+ const char * control, const char *source)
-+{
-+ struct snd_soc_dapm_path *path;
-+ struct snd_soc_dapm_widget *wsource = NULL, *wsink = NULL, *w;
-+ int ret = 0;
-+
-+ /* find src and dest widgets */
-+ list_for_each_entry(w, &codec->dapm_widgets, list) {
-+
-+ if (!wsink && !(strcmp(w->name, sink))) {
-+ wsink = w;
-+ continue;
-+ }
-+ if (!wsource && !(strcmp(w->name, source))) {
-+ wsource = w;
-+ }
-+ }
-+
-+ if (wsource == NULL || wsink == NULL)
-+ return -ENODEV;
-+
-+ path = kzalloc(sizeof(struct snd_soc_dapm_path), GFP_KERNEL);
-+ if (!path)
-+ return -ENOMEM;
-+
-+ path->source = wsource;
-+ path->sink = wsink;
-+ INIT_LIST_HEAD(&path->list);
-+ INIT_LIST_HEAD(&path->list_source);
-+ INIT_LIST_HEAD(&path->list_sink);
-+
-+ /* check for external widgets */
-+ if (wsink->id == snd_soc_dapm_input) {
-+ if (wsource->id == snd_soc_dapm_micbias ||
-+ wsource->id == snd_soc_dapm_mic ||
-+ wsink->id == snd_soc_dapm_line)
-+ wsink->ext = 1;
-+ }
-+ if (wsource->id == snd_soc_dapm_output) {
-+ if (wsink->id == snd_soc_dapm_spk ||
-+ wsink->id == snd_soc_dapm_hp ||
-+ wsink->id == snd_soc_dapm_line)
-+ wsource->ext = 1;
-+ }
-+
-+ /* connect static paths */
-+ if (control == NULL) {
-+ list_add(&path->list, &codec->dapm_paths);
-+ list_add(&path->list_sink, &wsink->sources);
-+ list_add(&path->list_source, &wsource->sinks);
-+ path->connect = 1;
-+ return 0;
-+ }
-+
-+ /* connect dynamic paths */
-+ switch(wsink->id) {
-+ case snd_soc_dapm_adc:
-+ case snd_soc_dapm_dac:
-+ case snd_soc_dapm_pga:
-+ case snd_soc_dapm_input:
-+ case snd_soc_dapm_output:
-+ case snd_soc_dapm_micbias:
-+ case snd_soc_dapm_vmid:
-+ case snd_soc_dapm_pre:
-+ case snd_soc_dapm_post:
-+ list_add(&path->list, &codec->dapm_paths);
-+ list_add(&path->list_sink, &wsink->sources);
-+ list_add(&path->list_source, &wsource->sinks);
-+ path->connect = 1;
-+ return 0;
-+ case snd_soc_dapm_mux:
-+ ret = dapm_connect_mux(codec, wsource, wsink, path, control,
-+ &wsink->kcontrols[0]);
-+ if (ret != 0)
-+ goto err;
-+ break;
-+ case snd_soc_dapm_switch:
-+ case snd_soc_dapm_mixer:
-+ ret = dapm_connect_mixer(codec, wsource, wsink, path, control);
-+ if (ret != 0)
-+ goto err;
-+ break;
-+ case snd_soc_dapm_hp:
-+ case snd_soc_dapm_mic:
-+ case snd_soc_dapm_line:
-+ case snd_soc_dapm_spk:
-+ list_add(&path->list, &codec->dapm_paths);
-+ list_add(&path->list_sink, &wsink->sources);
-+ list_add(&path->list_source, &wsource->sinks);
-+ path->connect = 0;
-+ return 0;
-+ }
-+ return 0;
-+
-+err:
-+ printk(KERN_WARNING "asoc: no dapm match for %s --> %s --> %s\n", source,
-+ control, sink);
-+ kfree(path);
-+ return ret;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_dapm_connect_input);
-+
-+/**
-+ * snd_soc_dapm_new_widgets - add new dapm widgets
-+ * @codec: audio codec
-+ *
-+ * Checks the codec for any new dapm widgets and creates them if found.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec)
-+{
-+ struct snd_soc_dapm_widget *w;
-+
-+ mutex_lock(&codec->mutex);
-+ list_for_each_entry(w, &codec->dapm_widgets, list)
-+ {
-+ if (w->new)
-+ continue;
-+
-+ switch(w->id) {
-+ case snd_soc_dapm_switch:
-+ case snd_soc_dapm_mixer:
-+ dapm_new_mixer(codec, w);
-+ break;
-+ case snd_soc_dapm_mux:
-+ dapm_new_mux(codec, w);
-+ break;
-+ case snd_soc_dapm_adc:
-+ case snd_soc_dapm_dac:
-+ case snd_soc_dapm_pga:
-+ dapm_new_pga(codec, w);
-+ break;
-+ case snd_soc_dapm_input:
-+ case snd_soc_dapm_output:
-+ case snd_soc_dapm_micbias:
-+ case snd_soc_dapm_spk:
-+ case snd_soc_dapm_hp:
-+ case snd_soc_dapm_mic:
-+ case snd_soc_dapm_line:
-+ case snd_soc_dapm_vmid:
-+ case snd_soc_dapm_pre:
-+ case snd_soc_dapm_post:
-+ break;
-+ }
-+ w->new = 1;
-+ }
-+
-+ dapm_power_widgets(codec, SND_SOC_DAPM_STREAM_NOP);
-+ mutex_unlock(&codec->mutex);
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_dapm_new_widgets);
-+
-+/**
-+ * snd_soc_dapm_get_volsw - dapm mixer get callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to get the value of a dapm mixer control.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_dapm_get_volsw(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol);
-+ int reg = kcontrol->private_value & 0xff;
-+ int shift = (kcontrol->private_value >> 8) & 0x0f;
-+ int rshift = (kcontrol->private_value >> 12) & 0x0f;
-+ int mask = (kcontrol->private_value >> 16) & 0xff;
-+ int invert = (kcontrol->private_value >> 24) & 0x01;
-+
-+ /* return the saved value if we are powered down */
-+ if (widget->id == snd_soc_dapm_pga && !widget->power) {
-+ ucontrol->value.integer.value[0] = widget->saved_value;
-+ return 0;
-+ }
-+
-+ ucontrol->value.integer.value[0] =
-+ (snd_soc_read(widget->codec, reg) >> shift) & mask;
-+ if (shift != rshift)
-+ ucontrol->value.integer.value[1] =
-+ (snd_soc_read(widget->codec, reg) >> rshift) & mask;
-+ if (invert) {
-+ ucontrol->value.integer.value[0] =
-+ mask - ucontrol->value.integer.value[0];
-+ if (shift != rshift)
-+ ucontrol->value.integer.value[1] =
-+ mask - ucontrol->value.integer.value[1];
-+ }
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_dapm_get_volsw);
-+
-+/**
-+ * snd_soc_dapm_put_volsw - dapm mixer set callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to set the value of a dapm mixer control.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol);
-+ int reg = kcontrol->private_value & 0xff;
-+ int shift = (kcontrol->private_value >> 8) & 0x0f;
-+ int rshift = (kcontrol->private_value >> 12) & 0x0f;
-+ int mask = (kcontrol->private_value >> 16) & 0xff;
-+ int invert = (kcontrol->private_value >> 24) & 0x01;
-+ unsigned short val, val2, val_mask;
-+ int ret;
-+
-+ val = (ucontrol->value.integer.value[0] & mask);
-+
-+ if (invert)
-+ val = mask - val;
-+ val_mask = mask << shift;
-+ val = val << shift;
-+ if (shift != rshift) {
-+ val2 = (ucontrol->value.integer.value[1] & mask);
-+ if (invert)
-+ val2 = mask - val2;
-+ val_mask |= mask << rshift;
-+ val |= val2 << rshift;
-+ }
-+
-+ mutex_lock(&widget->codec->mutex);
-+ widget->value = val;
-+
-+ /* save volume value if the widget is powered down */
-+ if (widget->id == snd_soc_dapm_pga && !widget->power) {
-+ widget->saved_value = val;
-+ mutex_unlock(&widget->codec->mutex);
-+ return 1;
-+ }
-+
-+ dapm_mixer_update_power(widget, kcontrol, reg, val_mask, val, invert);
-+ if (widget->event) {
-+ if (widget->event_flags & SND_SOC_DAPM_PRE_REG) {
-+ ret = widget->event(widget, SND_SOC_DAPM_PRE_REG);
-+ if (ret < 0)
-+ goto out;
-+ }
-+ ret = snd_soc_update_bits(widget->codec, reg, val_mask, val);
-+ if (widget->event_flags & SND_SOC_DAPM_POST_REG)
-+ ret = widget->event(widget, SND_SOC_DAPM_POST_REG);
-+ } else
-+ ret = snd_soc_update_bits(widget->codec, reg, val_mask, val);
-+
-+out:
-+ mutex_unlock(&widget->codec->mutex);
-+ return ret;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_dapm_put_volsw);
-+
-+/**
-+ * snd_soc_dapm_get_enum_double - dapm enumerated double mixer get callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to get the value of a dapm enumerated double mixer control.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol);
-+ struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
-+ unsigned short val, bitmask;
-+
-+ for (bitmask = 1; bitmask < e->mask; bitmask <<= 1)
-+ ;
-+ val = snd_soc_read(widget->codec, e->reg);
-+ ucontrol->value.enumerated.item[0] = (val >> e->shift_l) & (bitmask - 1);
-+ if (e->shift_l != e->shift_r)
-+ ucontrol->value.enumerated.item[1] =
-+ (val >> e->shift_r) & (bitmask - 1);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_dapm_get_enum_double);
-+
-+/**
-+ * snd_soc_dapm_put_enum_double - dapm enumerated double mixer set callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to set the value of a dapm enumerated double mixer control.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol);
-+ struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
-+ unsigned short val, mux;
-+ unsigned short mask, bitmask;
-+ int ret = 0;
-+
-+ for (bitmask = 1; bitmask < e->mask; bitmask <<= 1)
-+ ;
-+ if (ucontrol->value.enumerated.item[0] > e->mask - 1)
-+ return -EINVAL;
-+ mux = ucontrol->value.enumerated.item[0];
-+ val = mux << e->shift_l;
-+ mask = (bitmask - 1) << e->shift_l;
-+ if (e->shift_l != e->shift_r) {
-+ if (ucontrol->value.enumerated.item[1] > e->mask - 1)
-+ return -EINVAL;
-+ val |= ucontrol->value.enumerated.item[1] << e->shift_r;
-+ mask |= (bitmask - 1) << e->shift_r;
-+ }
-+
-+ mutex_lock(&widget->codec->mutex);
-+ widget->value = val;
-+ dapm_mux_update_power(widget, kcontrol, mask, mux, e);
-+ if (widget->event) {
-+ if (widget->event_flags & SND_SOC_DAPM_PRE_REG) {
-+ ret = widget->event(widget, SND_SOC_DAPM_PRE_REG);
-+ if (ret < 0)
-+ goto out;
-+ }
-+ ret = snd_soc_update_bits(widget->codec, e->reg, mask, val);
-+ if (widget->event_flags & SND_SOC_DAPM_POST_REG)
-+ ret = widget->event(widget, SND_SOC_DAPM_POST_REG);
-+ } else
-+ ret = snd_soc_update_bits(widget->codec, e->reg, mask, val);
-+
-+out:
-+ mutex_unlock(&widget->codec->mutex);
-+ return ret;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_dapm_put_enum_double);
-+
-+/**
-+ * snd_soc_dapm_new_control - create new dapm control
-+ * @codec: audio codec
-+ * @widget: widget template
-+ *
-+ * Creates a new dapm control based upon the template.
-+ *
-+ * Returns 0 for success else error.
-+ */
-+int snd_soc_dapm_new_control(struct snd_soc_codec *codec,
-+ const struct snd_soc_dapm_widget *widget)
-+{
-+ struct snd_soc_dapm_widget *w;
-+
-+ if ((w = dapm_cnew_widget(widget)) == NULL)
-+ return -ENOMEM;
-+
-+ w->codec = codec;
-+ INIT_LIST_HEAD(&w->sources);
-+ INIT_LIST_HEAD(&w->sinks);
-+ INIT_LIST_HEAD(&w->list);
-+ list_add(&w->list, &codec->dapm_widgets);
-+
-+ /* machine layer set ups unconnected pins and insertions */
-+ w->connected = 1;
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_dapm_new_control);
-+
-+/**
-+ * snd_soc_dapm_stream_event - send a stream event to the dapm core
-+ * @codec: audio codec
-+ * @stream: stream name
-+ * @event: stream event
-+ *
-+ * Sends a stream event to the dapm core. The core then makes any
-+ * necessary widget power changes.
-+ *
-+ * Returns 0 for success else error.
-+ */
-+int snd_soc_dapm_stream_event(struct snd_soc_codec *codec,
-+ char *stream, int event)
-+{
-+ struct snd_soc_dapm_widget *w;
-+
-+ mutex_lock(&codec->mutex);
-+ list_for_each_entry(w, &codec->dapm_widgets, list)
-+ {
-+ if (!w->sname)
-+ continue;
-+ dbg("widget %s\n %s stream %s event %d\n", w->name, w->sname,
-+ stream, event);
-+ if (strstr(w->sname, stream)) {
-+ switch(event) {
-+ case SND_SOC_DAPM_STREAM_START:
-+ w->active = 1;
-+ break;
-+ case SND_SOC_DAPM_STREAM_STOP:
-+ w->active = 0;
-+ break;
-+ case SND_SOC_DAPM_STREAM_SUSPEND:
-+ if (w->active)
-+ w->suspend = 1;
-+ w->active = 0;
-+ break;
-+ case SND_SOC_DAPM_STREAM_RESUME:
-+ if (w->suspend) {
-+ w->active = 1;
-+ w->suspend = 0;
-+ }
-+ break;
-+ case SND_SOC_DAPM_STREAM_PAUSE_PUSH:
-+ break;
-+ case SND_SOC_DAPM_STREAM_PAUSE_RELEASE:
-+ break;
-+ }
-+ }
-+ }
-+ mutex_unlock(&codec->mutex);
-+
-+ dapm_power_widgets(codec, event);
-+ dump_dapm(codec, __FUNCTION__);
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_dapm_stream_event);
-+
-+/**
-+ * snd_soc_dapm_set_endpoint - set audio endpoint status
-+ * @codec: audio codec
-+ * @endpoint: audio signal endpoint (or start point)
-+ * @status: point status
-+ *
-+ * Set audio endpoint status - connected or disconnected.
-+ *
-+ * Returns 0 for success else error.
-+ */
-+int snd_soc_dapm_set_endpoint(struct snd_soc_codec *codec,
-+ char *endpoint, int status)
-+{
-+ struct snd_soc_dapm_widget *w;
-+
-+ list_for_each_entry(w, &codec->dapm_widgets, list) {
-+ if (!strcmp(w->name, endpoint)) {
-+ w->connected = status;
-+ }
-+ }
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_dapm_set_endpoint);
-+
-+/**
-+ * snd_soc_dapm_free - free dapm resources
-+ * @socdev: SoC device
-+ *
-+ * Free all dapm widgets and resources.
-+ */
-+void snd_soc_dapm_free(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ snd_soc_dapm_sys_remove(socdev->dev);
-+ dapm_free_widgets(codec);
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_dapm_free);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("Dynamic Audio Power Management core for ALSA SoC");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/soc-core.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/soc-core.c
-@@ -0,0 +1,2063 @@
-+/*
-+ * soc-core.c -- ALSA SoC Audio Layer
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 12th Aug 2005 Initial version.
-+ * 25th Oct 2005 Working Codec, Interface and Platform registration.
-+ *
-+ * TODO:
-+ * o Add hw rules to enforce rates, etc.
-+ * o More testing with other codecs/machines.
-+ * o Add more codecs and platforms to ensure good API coverage.
-+ * o Support TDM on PCM and I2S
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/bitops.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+/* debug */
-+#define SOC_DEBUG 1
-+#if SOC_DEBUG
-+#define dbg(format, arg...) printk(format, ## arg)
-+#else
-+#define dbg(format, arg...)
-+#endif
-+/* debug DAI capabilities matching */
-+#define SOC_DEBUG_DAI 1
-+#if SOC_DEBUG_DAI
-+#define dbgc(format, arg...) printk(format, ## arg)
-+#else
-+#define dbgc(format, arg...)
-+#endif
-+
-+#define CODEC_CPU(codec, cpu) ((codec << 4) | cpu)
-+
-+static DEFINE_MUTEX(pcm_mutex);
-+static DEFINE_MUTEX(io_mutex);
-+static struct workqueue_struct *soc_workq;
-+static struct work_struct soc_stream_work;
-+static DECLARE_WAIT_QUEUE_HEAD(soc_pm_waitq);
-+
-+/* supported sample rates */
-+/* ATTENTION: these values depend on the definition in pcm.h! */
-+static const unsigned int rates[] = {
-+ 5512, 8000, 11025, 16000, 22050, 32000, 44100,
-+ 48000, 64000, 88200, 96000, 176400, 192000
-+};
-+
-+/*
-+ * This is a timeout to do a DAPM powerdown after a stream is closed().
-+ * It can be used to eliminate pops between different playback streams, e.g.
-+ * between two audio tracks.
-+ */
-+static int pmdown_time = 5000;
-+module_param(pmdown_time, int, 0);
-+MODULE_PARM_DESC(pmdown_time, "DAPM stream powerdown time (msecs)");
-+
-+#ifdef CONFIG_SND_SOC_AC97_BUS
-+/* unregister ac97 codec */
-+static int soc_ac97_dev_unregister(struct snd_soc_codec *codec)
-+{
-+ if (codec->ac97->dev.bus)
-+ device_unregister(&codec->ac97->dev);
-+ return 0;
-+}
-+
-+/* stop no dev release warning */
-+static void soc_ac97_device_release(struct device *dev){}
-+
-+/* register ac97 codec to bus */
-+static int soc_ac97_dev_register(struct snd_soc_codec *codec)
-+{
-+ int err;
-+
-+ codec->ac97->dev.bus = &ac97_bus_type;
-+ codec->ac97->dev.parent = NULL;
-+ codec->ac97->dev.release = soc_ac97_device_release;
-+
-+ snprintf(codec->ac97->dev.bus_id, BUS_ID_SIZE, "%d-%d:%s",
-+ codec->card->number, 0, codec->name);
-+ err = device_register(&codec->ac97->dev);
-+ if (err < 0) {
-+ snd_printk(KERN_ERR "Can't register ac97 bus\n");
-+ codec->ac97->dev.bus = NULL;
-+ return err;
-+ }
-+ return 0;
-+}
-+#endif
-+
-+static inline const char* get_dai_name(int type)
-+{
-+ switch(type) {
-+ case SND_SOC_DAI_AC97:
-+ return "AC97";
-+ case SND_SOC_DAI_I2S:
-+ return "I2S";
-+ case SND_SOC_DAI_PCM:
-+ return "PCM";
-+ }
-+ return NULL;
-+}
-+
-+/* get rate format from rate */
-+static inline int soc_get_rate_format(int rate)
-+{
-+ int i;
-+
-+ for (i = 0; i < ARRAY_SIZE(rates); i++) {
-+ if (rates[i] == rate)
-+ return 1 << i;
-+ }
-+ return 0;
-+}
-+
-+/* gets the audio system mclk/sysclk for the given parameters */
-+static unsigned inline int soc_get_mclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+{
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_machine *machine = socdev->machine;
-+ int i;
-+
-+ /* find the matching machine config and get it's mclk for the given
-+ * sample rate and hardware format */
-+ for(i = 0; i < machine->num_links; i++) {
-+ if (machine->dai_link[i].cpu_dai == rtd->cpu_dai &&
-+ machine->dai_link[i].config_sysclk)
-+ return machine->dai_link[i].config_sysclk(rtd, info);
-+ }
-+ return 0;
-+}
-+
-+/* changes a bitclk multiplier mask to a divider mask */
-+static u64 soc_bfs_rcw_to_div(u64 bfs, int rate, unsigned int mclk,
-+ unsigned int pcmfmt, unsigned int chn)
-+{
-+ int i, j;
-+ u64 bfs_ = 0;
-+ int size = snd_pcm_format_physical_width(pcmfmt), min = 0;
-+
-+ if (size <= 0)
-+ return 0;
-+
-+ /* the minimum bit clock that has enough bandwidth */
-+ min = size * rate * chn;
-+ dbgc("rcw --> div min bclk %d with mclk %d\n", min, mclk);
-+
-+ for (i = 0; i < 64; i++) {
-+ if ((bfs >> i) & 0x1) {
-+ j = min * (i + 1);
-+ bfs_ |= SND_SOC_FSBD(mclk/j);
-+ dbgc("rcw --> div support mult %d\n",
-+ SND_SOC_FSBD_REAL(1<<i));
-+ }
-+ }
-+
-+ return bfs_;
-+}
-+
-+/* changes a bitclk divider mask to a multiplier mask */
-+static u64 soc_bfs_div_to_rcw(u64 bfs, int rate, unsigned int mclk,
-+ unsigned int pcmfmt, unsigned int chn)
-+{
-+ int i, j;
-+ u64 bfs_ = 0;
-+
-+ int size = snd_pcm_format_physical_width(pcmfmt), min = 0;
-+
-+ if (size <= 0)
-+ return 0;
-+
-+ /* the minimum bit clock that has enough bandwidth */
-+ min = size * rate * chn;
-+ dbgc("div to rcw min bclk %d with mclk %d\n", min, mclk);
-+
-+ for (i = 0; i < 64; i++) {
-+ if ((bfs >> i) & 0x1) {
-+ j = mclk / (i + 1);
-+ if (j >= min) {
-+ bfs_ |= SND_SOC_FSBW(j/min);
-+ dbgc("div --> rcw support div %d\n",
-+ SND_SOC_FSBW_REAL(1<<i));
-+ }
-+ }
-+ }
-+
-+ return bfs_;
-+}
-+
-+/* changes a constant bitclk to a multiplier mask */
-+static u64 soc_bfs_rate_to_rcw(u64 bfs, int rate, unsigned int mclk,
-+ unsigned int pcmfmt, unsigned int chn)
-+{
-+ unsigned int bfs_ = rate * bfs;
-+ int size = snd_pcm_format_physical_width(pcmfmt), min = 0;
-+
-+ if (size <= 0)
-+ return 0;
-+
-+ /* the minimum bit clock that has enough bandwidth */
-+ min = size * rate * chn;
-+ dbgc("rate --> rcw min bclk %d with mclk %d\n", min, mclk);
-+
-+ if (bfs_ < min)
-+ return 0;
-+ else {
-+ bfs_ = SND_SOC_FSBW(bfs_/min);
-+ dbgc("rate --> rcw support div %d\n", SND_SOC_FSBW_REAL(bfs_));
-+ return bfs_;
-+ }
-+}
-+
-+/* changes a bitclk multiplier mask to a divider mask */
-+static u64 soc_bfs_rate_to_div(u64 bfs, int rate, unsigned int mclk,
-+ unsigned int pcmfmt, unsigned int chn)
-+{
-+ unsigned int bfs_ = rate * bfs;
-+ int size = snd_pcm_format_physical_width(pcmfmt), min = 0;
-+
-+ if (size <= 0)
-+ return 0;
-+
-+ /* the minimum bit clock that has enough bandwidth */
-+ min = size * rate * chn;
-+ dbgc("rate --> div min bclk %d with mclk %d\n", min, mclk);
-+
-+ if (bfs_ < min)
-+ return 0;
-+ else {
-+ bfs_ = SND_SOC_FSBW(mclk/bfs_);
-+ dbgc("rate --> div support div %d\n", SND_SOC_FSBD_REAL(bfs_));
-+ return bfs_;
-+ }
-+}
-+
-+/* Matches codec DAI and SoC CPU DAI hardware parameters */
-+static int soc_hw_match_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_dai_mode *codec_dai_mode = NULL;
-+ struct snd_soc_dai_mode *cpu_dai_mode = NULL;
-+ struct snd_soc_clock_info clk_info;
-+ unsigned int fs, mclk, rate = params_rate(params),
-+ chn, j, k, cpu_bclk, codec_bclk, pcmrate;
-+ u16 fmt = 0;
-+ u64 codec_bfs, cpu_bfs;
-+
-+ dbg("asoc: match version %s\n", SND_SOC_VERSION);
-+ clk_info.rate = rate;
-+ pcmrate = soc_get_rate_format(rate);
-+
-+ /* try and find a match from the codec and cpu DAI capabilities */
-+ for (j = 0; j < rtd->codec_dai->caps.num_modes; j++) {
-+ for (k = 0; k < rtd->cpu_dai->caps.num_modes; k++) {
-+ codec_dai_mode = &rtd->codec_dai->caps.mode[j];
-+ cpu_dai_mode = &rtd->cpu_dai->caps.mode[k];
-+
-+ if (!(codec_dai_mode->pcmrate & cpu_dai_mode->pcmrate &
-+ pcmrate)) {
-+ dbgc("asoc: DAI[%d:%d] failed to match rate\n", j, k);
-+ continue;
-+ }
-+
-+ fmt = codec_dai_mode->fmt & cpu_dai_mode->fmt;
-+ if (!(fmt & SND_SOC_DAIFMT_FORMAT_MASK)) {
-+ dbgc("asoc: DAI[%d:%d] failed to match format\n", j, k);
-+ continue;
-+ }
-+
-+ if (!(fmt & SND_SOC_DAIFMT_CLOCK_MASK)) {
-+ dbgc("asoc: DAI[%d:%d] failed to match clock masters\n",
-+ j, k);
-+ continue;
-+ }
-+
-+ if (!(fmt & SND_SOC_DAIFMT_INV_MASK)) {
-+ dbgc("asoc: DAI[%d:%d] failed to match invert\n", j, k);
-+ continue;
-+ }
-+
-+ if (!(codec_dai_mode->pcmfmt & cpu_dai_mode->pcmfmt)) {
-+ dbgc("asoc: DAI[%d:%d] failed to match pcm format\n", j, k);
-+ continue;
-+ }
-+
-+ if (!(codec_dai_mode->pcmdir & cpu_dai_mode->pcmdir)) {
-+ dbgc("asoc: DAI[%d:%d] failed to match direction\n", j, k);
-+ continue;
-+ }
-+
-+ /* todo - still need to add tdm selection */
-+ rtd->cpu_dai->dai_runtime.fmt =
-+ rtd->codec_dai->dai_runtime.fmt =
-+ 1 << (ffs(fmt & SND_SOC_DAIFMT_FORMAT_MASK) -1) |
-+ 1 << (ffs(fmt & SND_SOC_DAIFMT_CLOCK_MASK) - 1) |
-+ 1 << (ffs(fmt & SND_SOC_DAIFMT_INV_MASK) - 1);
-+ clk_info.bclk_master =
-+ rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK;
-+
-+ /* make sure the ratio between rate and master
-+ * clock is acceptable*/
-+ fs = (cpu_dai_mode->fs & codec_dai_mode->fs);
-+ if (fs == 0) {
-+ dbgc("asoc: DAI[%d:%d] failed to match FS\n", j, k);
-+ continue;
-+ }
-+ clk_info.fs = rtd->cpu_dai->dai_runtime.fs =
-+ rtd->codec_dai->dai_runtime.fs = fs;
-+
-+ /* calculate audio system clocking using slowest clocks possible*/
-+ mclk = soc_get_mclk(rtd, &clk_info);
-+ if (mclk == 0) {
-+ dbgc("asoc: DAI[%d:%d] configuration not clockable\n", j, k);
-+ dbgc("asoc: rate %d fs %d master %x\n", rate, fs,
-+ clk_info.bclk_master);
-+ continue;
-+ }
-+
-+ /* calculate word size (per channel) and frame size */
-+ rtd->codec_dai->dai_runtime.pcmfmt =
-+ rtd->cpu_dai->dai_runtime.pcmfmt =
-+ 1 << params_format(params);
-+
-+ chn = params_channels(params);
-+ /* i2s always has left and right */
-+ if (params_channels(params) == 1 &&
-+ rtd->cpu_dai->dai_runtime.fmt & (SND_SOC_DAIFMT_I2S |
-+ SND_SOC_DAIFMT_RIGHT_J | SND_SOC_DAIFMT_LEFT_J))
-+ chn <<= 1;
-+
-+ /* Calculate bfs - the ratio between bitclock and the sample rate
-+ * We must take into consideration the dividers and multipliers
-+ * used in the codec and cpu DAI modes. We always choose the
-+ * lowest possible clocks to reduce power.
-+ */
-+ switch (CODEC_CPU(codec_dai_mode->flags, cpu_dai_mode->flags)) {
-+ case CODEC_CPU(SND_SOC_DAI_BFS_DIV, SND_SOC_DAI_BFS_DIV):
-+ /* cpu & codec bfs dividers */
-+ rtd->cpu_dai->dai_runtime.bfs =
-+ rtd->codec_dai->dai_runtime.bfs =
-+ 1 << (fls(codec_dai_mode->bfs & cpu_dai_mode->bfs) - 1);
-+ break;
-+ case CODEC_CPU(SND_SOC_DAI_BFS_DIV, SND_SOC_DAI_BFS_RCW):
-+ /* normalise bfs codec divider & cpu rcw mult */
-+ codec_bfs = soc_bfs_div_to_rcw(codec_dai_mode->bfs, rate,
-+ mclk, rtd->codec_dai->dai_runtime.pcmfmt, chn);
-+ rtd->cpu_dai->dai_runtime.bfs =
-+ 1 << (ffs(codec_bfs & cpu_dai_mode->bfs) - 1);
-+ cpu_bfs = soc_bfs_rcw_to_div(cpu_dai_mode->bfs, rate, mclk,
-+ rtd->codec_dai->dai_runtime.pcmfmt, chn);
-+ rtd->codec_dai->dai_runtime.bfs =
-+ 1 << (fls(codec_dai_mode->bfs & cpu_bfs) - 1);
-+ break;
-+ case CODEC_CPU(SND_SOC_DAI_BFS_RCW, SND_SOC_DAI_BFS_DIV):
-+ /* normalise bfs codec rcw mult & cpu divider */
-+ codec_bfs = soc_bfs_rcw_to_div(codec_dai_mode->bfs, rate,
-+ mclk, rtd->codec_dai->dai_runtime.pcmfmt, chn);
-+ rtd->cpu_dai->dai_runtime.bfs =
-+ 1 << (fls(codec_bfs & cpu_dai_mode->bfs) -1);
-+ cpu_bfs = soc_bfs_div_to_rcw(cpu_dai_mode->bfs, rate, mclk,
-+ rtd->codec_dai->dai_runtime.pcmfmt, chn);
-+ rtd->codec_dai->dai_runtime.bfs =
-+ 1 << (ffs(codec_dai_mode->bfs & cpu_bfs) -1);
-+ break;
-+ case CODEC_CPU(SND_SOC_DAI_BFS_RCW, SND_SOC_DAI_BFS_RCW):
-+ /* codec & cpu bfs rate rcw multipliers */
-+ rtd->cpu_dai->dai_runtime.bfs =
-+ rtd->codec_dai->dai_runtime.bfs =
-+ 1 << (ffs(codec_dai_mode->bfs & cpu_dai_mode->bfs) -1);
-+ break;
-+ case CODEC_CPU(SND_SOC_DAI_BFS_DIV, SND_SOC_DAI_BFS_RATE):
-+ /* normalise cpu bfs rate const multiplier & codec div */
-+ cpu_bfs = soc_bfs_rate_to_div(cpu_dai_mode->bfs, rate,
-+ mclk, rtd->codec_dai->dai_runtime.pcmfmt, chn);
-+ if(codec_dai_mode->bfs & cpu_bfs) {
-+ rtd->codec_dai->dai_runtime.bfs = cpu_bfs;
-+ rtd->cpu_dai->dai_runtime.bfs = cpu_dai_mode->bfs;
-+ } else
-+ rtd->cpu_dai->dai_runtime.bfs = 0;
-+ break;
-+ case CODEC_CPU(SND_SOC_DAI_BFS_RCW, SND_SOC_DAI_BFS_RATE):
-+ /* normalise cpu bfs rate const multiplier & codec rcw mult */
-+ cpu_bfs = soc_bfs_rate_to_rcw(cpu_dai_mode->bfs, rate,
-+ mclk, rtd->codec_dai->dai_runtime.pcmfmt, chn);
-+ if(codec_dai_mode->bfs & cpu_bfs) {
-+ rtd->codec_dai->dai_runtime.bfs = cpu_bfs;
-+ rtd->cpu_dai->dai_runtime.bfs = cpu_dai_mode->bfs;
-+ } else
-+ rtd->cpu_dai->dai_runtime.bfs = 0;
-+ break;
-+ case CODEC_CPU(SND_SOC_DAI_BFS_RATE, SND_SOC_DAI_BFS_RCW):
-+ /* normalise cpu bfs rate rcw multiplier & codec const mult */
-+ codec_bfs = soc_bfs_rate_to_rcw(codec_dai_mode->bfs, rate,
-+ mclk, rtd->codec_dai->dai_runtime.pcmfmt, chn);
-+ if(cpu_dai_mode->bfs & codec_bfs) {
-+ rtd->cpu_dai->dai_runtime.bfs = codec_bfs;
-+ rtd->codec_dai->dai_runtime.bfs = codec_dai_mode->bfs;
-+ } else
-+ rtd->cpu_dai->dai_runtime.bfs = 0;
-+ break;
-+ case CODEC_CPU(SND_SOC_DAI_BFS_RATE, SND_SOC_DAI_BFS_DIV):
-+ /* normalise cpu bfs div & codec const mult */
-+ codec_bfs = soc_bfs_rate_to_div(codec_dai_mode->bfs, rate,
-+ mclk, rtd->codec_dai->dai_runtime.pcmfmt, chn);
-+ if(codec_dai_mode->bfs & codec_bfs) {
-+ rtd->cpu_dai->dai_runtime.bfs = codec_bfs;
-+ rtd->codec_dai->dai_runtime.bfs = codec_dai_mode->bfs;
-+ } else
-+ rtd->cpu_dai->dai_runtime.bfs = 0;
-+ break;
-+ case CODEC_CPU(SND_SOC_DAI_BFS_RATE, SND_SOC_DAI_BFS_RATE):
-+ /* cpu & codec constant mult */
-+ if(codec_dai_mode->bfs == cpu_dai_mode->bfs)
-+ rtd->cpu_dai->dai_runtime.bfs =
-+ rtd->codec_dai->dai_runtime.bfs =
-+ codec_dai_mode->bfs;
-+ else
-+ rtd->cpu_dai->dai_runtime.bfs =
-+ rtd->codec_dai->dai_runtime.bfs = 0;
-+ break;
-+ default:
-+ if(codec_dai_mode->flags == 0)
-+ printk(KERN_ERR "asoc: error missing codec DAI flags\n");
-+ else
-+ printk(KERN_ERR "asoc: error missing CPU DAI flags\n");
-+ break;
-+ }
-+
-+ /* make sure the bit clock speed is acceptable */
-+ if (!rtd->cpu_dai->dai_runtime.bfs ||
-+ !rtd->codec_dai->dai_runtime.bfs) {
-+ dbgc("asoc: DAI[%d:%d] failed to match BFS\n", j, k);
-+ dbgc("asoc: cpu_dai %llu codec %llu\n",
-+ rtd->cpu_dai->dai_runtime.bfs,
-+ rtd->codec_dai->dai_runtime.bfs);
-+ dbgc("asoc: mclk %d hwfmt %x\n", mclk, fmt);
-+ continue;
-+ }
-+
-+ goto found;
-+ }
-+ }
-+ printk(KERN_ERR "asoc: no matching DAI found between codec and CPU\n");
-+ return -EINVAL;
-+
-+found:
-+ /* we have matching DAI's, so complete the runtime info */
-+ rtd->codec_dai->dai_runtime.pcmrate =
-+ rtd->cpu_dai->dai_runtime.pcmrate =
-+ soc_get_rate_format(rate);
-+
-+ rtd->codec_dai->dai_runtime.priv = codec_dai_mode->priv;
-+ rtd->cpu_dai->dai_runtime.priv = cpu_dai_mode->priv;
-+ rtd->codec_dai->dai_runtime.flags = codec_dai_mode->flags;
-+ rtd->cpu_dai->dai_runtime.flags = cpu_dai_mode->flags;
-+
-+ /* for debug atm */
-+ dbg("asoc: DAI[%d:%d] Match OK\n", j, k);
-+ if (rtd->codec_dai->dai_runtime.flags == SND_SOC_DAI_BFS_DIV) {
-+ codec_bclk = (rtd->codec_dai->dai_runtime.fs * params_rate(params)) /
-+ SND_SOC_FSBD_REAL(rtd->codec_dai->dai_runtime.bfs);
-+ dbg("asoc: codec fs %d mclk %d bfs div %d bclk %d\n",
-+ rtd->codec_dai->dai_runtime.fs, mclk,
-+ SND_SOC_FSBD_REAL(rtd->codec_dai->dai_runtime.bfs), codec_bclk);
-+ } else if(rtd->codec_dai->dai_runtime.flags == SND_SOC_DAI_BFS_RATE) {
-+ codec_bclk = params_rate(params) * rtd->codec_dai->dai_runtime.bfs;
-+ dbg("asoc: codec fs %d mclk %d bfs rate mult %llu bclk %d\n",
-+ rtd->codec_dai->dai_runtime.fs, mclk,
-+ rtd->codec_dai->dai_runtime.bfs, codec_bclk);
-+ } else if (rtd->cpu_dai->dai_runtime.flags == SND_SOC_DAI_BFS_RCW) {
-+ codec_bclk = params_rate(params) * params_channels(params) *
-+ snd_pcm_format_physical_width(rtd->codec_dai->dai_runtime.pcmfmt) *
-+ SND_SOC_FSBW_REAL(rtd->codec_dai->dai_runtime.bfs);
-+ dbg("asoc: codec fs %d mclk %d bfs rcw mult %d bclk %d\n",
-+ rtd->codec_dai->dai_runtime.fs, mclk,
-+ SND_SOC_FSBW_REAL(rtd->codec_dai->dai_runtime.bfs), codec_bclk);
-+ } else
-+ codec_bclk = 0;
-+
-+ if (rtd->cpu_dai->dai_runtime.flags == SND_SOC_DAI_BFS_DIV) {
-+ cpu_bclk = (rtd->cpu_dai->dai_runtime.fs * params_rate(params)) /
-+ SND_SOC_FSBD_REAL(rtd->cpu_dai->dai_runtime.bfs);
-+ dbg("asoc: cpu fs %d mclk %d bfs div %d bclk %d\n",
-+ rtd->cpu_dai->dai_runtime.fs, mclk,
-+ SND_SOC_FSBD_REAL(rtd->cpu_dai->dai_runtime.bfs), cpu_bclk);
-+ } else if (rtd->cpu_dai->dai_runtime.flags == SND_SOC_DAI_BFS_RATE) {
-+ cpu_bclk = params_rate(params) * rtd->cpu_dai->dai_runtime.bfs;
-+ dbg("asoc: cpu fs %d mclk %d bfs rate mult %llu bclk %d\n",
-+ rtd->cpu_dai->dai_runtime.fs, mclk,
-+ rtd->cpu_dai->dai_runtime.bfs, cpu_bclk);
-+ } else if (rtd->cpu_dai->dai_runtime.flags == SND_SOC_DAI_BFS_RCW) {
-+ cpu_bclk = params_rate(params) * params_channels(params) *
-+ snd_pcm_format_physical_width(rtd->cpu_dai->dai_runtime.pcmfmt) *
-+ SND_SOC_FSBW_REAL(rtd->cpu_dai->dai_runtime.bfs);
-+ dbg("asoc: cpu fs %d mclk %d bfs mult rcw %d bclk %d\n",
-+ rtd->cpu_dai->dai_runtime.fs, mclk,
-+ SND_SOC_FSBW_REAL(rtd->cpu_dai->dai_runtime.bfs), cpu_bclk);
-+ } else
-+ cpu_bclk = 0;
-+
-+ /*
-+ * Check we have matching bitclocks. If we don't then it means the
-+ * sysclock returned by either the codec or cpu DAI (selected by the
-+ * machine sysclock function) is wrong compared with the supported DAI
-+ * modes for the codec or cpu DAI.
-+ */
-+ if (cpu_bclk != codec_bclk && cpu_bclk){
-+ printk(KERN_ERR
-+ "asoc: codec and cpu bitclocks differ, audio may be wrong speed\n"
-+ );
-+ printk(KERN_ERR "asoc: codec %d != cpu %d\n", codec_bclk, cpu_bclk);
-+ }
-+
-+ switch(rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ dbg("asoc: DAI codec BCLK master, LRC master\n");
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFM:
-+ dbg("asoc: DAI codec BCLK slave, LRC master\n");
-+ break;
-+ case SND_SOC_DAIFMT_CBM_CFS:
-+ dbg("asoc: DAI codec BCLK master, LRC slave\n");
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ dbg("asoc: DAI codec BCLK slave, LRC slave\n");
-+ break;
-+ }
-+ dbg("asoc: mode %x, invert %x\n",
-+ rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK,
-+ rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK);
-+ dbg("asoc: audio rate %d chn %d fmt %x\n", params_rate(params),
-+ params_channels(params), params_format(params));
-+
-+ return 0;
-+}
-+
-+static inline u32 get_rates(struct snd_soc_dai_mode *modes, int nmodes)
-+{
-+ int i;
-+ u32 rates = 0;
-+
-+ for(i = 0; i < nmodes; i++)
-+ rates |= modes[i].pcmrate;
-+
-+ return rates;
-+}
-+
-+static inline u64 get_formats(struct snd_soc_dai_mode *modes, int nmodes)
-+{
-+ int i;
-+ u64 formats = 0;
-+
-+ for(i = 0; i < nmodes; i++)
-+ formats |= modes[i].pcmfmt;
-+
-+ return formats;
-+}
-+
-+/*
-+ * Called by ALSA when a PCM substream is opened, the runtime->hw record is
-+ * then initialized and any private data can be allocated. This also calls
-+ * startup for the cpu DAI, platform, machine and codec DAI.
-+ */
-+static int soc_pcm_open(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct snd_soc_machine *machine = socdev->machine;
-+ struct snd_soc_platform *platform = socdev->platform;
-+ struct snd_soc_codec_dai *codec_dai = rtd->codec_dai;
-+ struct snd_soc_cpu_dai *cpu_dai = rtd->cpu_dai;
-+ int ret = 0;
-+
-+ mutex_lock(&pcm_mutex);
-+
-+ /* startup the audio subsystem */
-+ if (rtd->cpu_dai->ops.startup) {
-+ ret = rtd->cpu_dai->ops.startup(substream);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: can't open interface %s\n",
-+ rtd->cpu_dai->name);
-+ goto out;
-+ }
-+ }
-+
-+ if (platform->pcm_ops->open) {
-+ ret = platform->pcm_ops->open(substream);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: can't open platform %s\n", platform->name);
-+ goto platform_err;
-+ }
-+ }
-+
-+ if (machine->ops && machine->ops->startup) {
-+ ret = machine->ops->startup(substream);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: %s startup failed\n", machine->name);
-+ goto machine_err;
-+ }
-+ }
-+
-+ if (rtd->codec_dai->ops.startup) {
-+ ret = rtd->codec_dai->ops.startup(substream);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: can't open codec %s\n",
-+ rtd->codec_dai->name);
-+ goto codec_dai_err;
-+ }
-+ }
-+
-+ /* create runtime params from DMA, codec and cpu DAI */
-+ if (runtime->hw.rates)
-+ runtime->hw.rates &=
-+ get_rates(codec_dai->caps.mode, codec_dai->caps.num_modes) &
-+ get_rates(cpu_dai->caps.mode, cpu_dai->caps.num_modes);
-+ else
-+ runtime->hw.rates =
-+ get_rates(codec_dai->caps.mode, codec_dai->caps.num_modes) &
-+ get_rates(cpu_dai->caps.mode, cpu_dai->caps.num_modes);
-+ if (runtime->hw.formats)
-+ runtime->hw.formats &=
-+ get_formats(codec_dai->caps.mode, codec_dai->caps.num_modes) &
-+ get_formats(cpu_dai->caps.mode, cpu_dai->caps.num_modes);
-+ else
-+ runtime->hw.formats =
-+ get_formats(codec_dai->caps.mode, codec_dai->caps.num_modes) &
-+ get_formats(cpu_dai->caps.mode, cpu_dai->caps.num_modes);
-+
-+ /* Check that the codec and cpu DAI's are compatible */
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ runtime->hw.rate_min =
-+ max(rtd->codec_dai->playback.rate_min,
-+ rtd->cpu_dai->playback.rate_min);
-+ runtime->hw.rate_max =
-+ min(rtd->codec_dai->playback.rate_max,
-+ rtd->cpu_dai->playback.rate_max);
-+ runtime->hw.channels_min =
-+ max(rtd->codec_dai->playback.channels_min,
-+ rtd->cpu_dai->playback.channels_min);
-+ runtime->hw.channels_max =
-+ min(rtd->codec_dai->playback.channels_max,
-+ rtd->cpu_dai->playback.channels_max);
-+ } else {
-+ runtime->hw.rate_min =
-+ max(rtd->codec_dai->capture.rate_min,
-+ rtd->cpu_dai->capture.rate_min);
-+ runtime->hw.rate_max =
-+ min(rtd->codec_dai->capture.rate_max,
-+ rtd->cpu_dai->capture.rate_max);
-+ runtime->hw.channels_min =
-+ max(rtd->codec_dai->capture.channels_min,
-+ rtd->cpu_dai->capture.channels_min);
-+ runtime->hw.channels_max =
-+ min(rtd->codec_dai->capture.channels_max,
-+ rtd->cpu_dai->capture.channels_max);
-+ }
-+
-+ snd_pcm_limit_hw_rates(runtime);
-+ if (!runtime->hw.rates) {
-+ printk(KERN_ERR "asoc: %s <-> %s No matching rates\n",
-+ rtd->codec_dai->name, rtd->cpu_dai->name);
-+ goto codec_dai_err;
-+ }
-+ if (!runtime->hw.formats) {
-+ printk(KERN_ERR "asoc: %s <-> %s No matching formats\n",
-+ rtd->codec_dai->name, rtd->cpu_dai->name);
-+ goto codec_dai_err;
-+ }
-+ if (!runtime->hw.channels_min || !runtime->hw.channels_max) {
-+ printk(KERN_ERR "asoc: %s <-> %s No matching channels\n",
-+ rtd->codec_dai->name, rtd->cpu_dai->name);
-+ goto codec_dai_err;
-+ }
-+
-+ dbg("asoc: %s <-> %s info:\n", rtd->codec_dai->name, rtd->cpu_dai->name);
-+ dbg("asoc: rate mask 0x%x\n", runtime->hw.rates);
-+ dbg("asoc: min ch %d max ch %d\n", runtime->hw.channels_min,
-+ runtime->hw.channels_max);
-+ dbg("asoc: min rate %d max rate %d\n", runtime->hw.rate_min,
-+ runtime->hw.rate_max);
-+
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ rtd->cpu_dai->playback.active = rtd->codec_dai->playback.active = 1;
-+ else
-+ rtd->cpu_dai->capture.active = rtd->codec_dai->capture.active = 1;
-+ rtd->cpu_dai->active = rtd->codec_dai->active = 1;
-+ rtd->cpu_dai->runtime = runtime;
-+ socdev->codec->active++;
-+ mutex_unlock(&pcm_mutex);
-+ return 0;
-+
-+codec_dai_err:
-+ if (machine->ops && machine->ops->shutdown)
-+ machine->ops->shutdown(substream);
-+
-+machine_err:
-+ if (platform->pcm_ops->close)
-+ platform->pcm_ops->close(substream);
-+
-+platform_err:
-+ if (rtd->cpu_dai->ops.shutdown)
-+ rtd->cpu_dai->ops.shutdown(substream);
-+out:
-+ mutex_unlock(&pcm_mutex);
-+ return ret;
-+}
-+
-+/*
-+ * Power down the audio subsytem pmdown_time msecs after close is called.
-+ * This is to ensure there are no pops or clicks in between any music tracks
-+ * due to DAPM power cycling.
-+ */
-+static void close_delayed_work(void *data)
-+{
-+ struct snd_soc_device *socdev = data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct snd_soc_codec_dai *codec_dai;
-+ int i;
-+
-+ mutex_lock(&pcm_mutex);
-+ for(i = 0; i < codec->num_dai; i++) {
-+ codec_dai = &codec->dai[i];
-+
-+ dbg("pop wq checking: %s status: %s waiting: %s\n",
-+ codec_dai->playback.stream_name,
-+ codec_dai->playback.active ? "active" : "inactive",
-+ codec_dai->pop_wait ? "yes" : "no");
-+
-+ /* are we waiting on this codec DAI stream */
-+ if (codec_dai->pop_wait == 1) {
-+
-+ codec_dai->pop_wait = 0;
-+ snd_soc_dapm_stream_event(codec, codec_dai->playback.stream_name,
-+ SND_SOC_DAPM_STREAM_STOP);
-+
-+ /* power down the codec power domain if no longer active */
-+ if (codec->active == 0) {
-+ dbg("pop wq D3 %s %s\n", codec->name,
-+ codec_dai->playback.stream_name);
-+ if (codec->dapm_event)
-+ codec->dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ }
-+ }
-+ }
-+ mutex_unlock(&pcm_mutex);
-+}
-+
-+/*
-+ * Called by ALSA when a PCM substream is closed. Private data can be
-+ * freed here. The cpu DAI, codec DAI, machine and platform are also
-+ * shutdown.
-+ */
-+static int soc_codec_close(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_machine *machine = socdev->machine;
-+ struct snd_soc_platform *platform = socdev->platform;
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ mutex_lock(&pcm_mutex);
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ rtd->cpu_dai->playback.active = rtd->codec_dai->playback.active = 0;
-+ else
-+ rtd->cpu_dai->capture.active = rtd->codec_dai->capture.active = 0;
-+
-+ if (rtd->codec_dai->playback.active == 0 &&
-+ rtd->codec_dai->capture.active == 0) {
-+ rtd->cpu_dai->active = rtd->codec_dai->active = 0;
-+ }
-+ codec->active--;
-+
-+ if (rtd->cpu_dai->ops.shutdown)
-+ rtd->cpu_dai->ops.shutdown(substream);
-+
-+ if (rtd->codec_dai->ops.shutdown)
-+ rtd->codec_dai->ops.shutdown(substream);
-+
-+ if (machine->ops && machine->ops->shutdown)
-+ machine->ops->shutdown(substream);
-+
-+ if (platform->pcm_ops->close)
-+ platform->pcm_ops->close(substream);
-+ rtd->cpu_dai->runtime = NULL;
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ /* start delayed pop wq here for playback streams */
-+ rtd->codec_dai->pop_wait = 1;
-+ queue_delayed_work(soc_workq, &soc_stream_work,
-+ msecs_to_jiffies(pmdown_time));
-+ } else {
-+ /* capture streams can be powered down now */
-+ snd_soc_dapm_stream_event(codec, rtd->codec_dai->capture.stream_name,
-+ SND_SOC_DAPM_STREAM_STOP);
-+
-+ if (codec->active == 0 && rtd->codec_dai->pop_wait == 0){
-+ if (codec->dapm_event)
-+ codec->dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ }
-+ }
-+
-+ mutex_unlock(&pcm_mutex);
-+ return 0;
-+}
-+
-+/*
-+ * Called by ALSA when the PCM substream is prepared, can set format, sample
-+ * rate, etc. This function is non atomic and can be called multiple times,
-+ * it can refer to the runtime info.
-+ */
-+static int soc_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_platform *platform = socdev->platform;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int ret = 0;
-+
-+ mutex_lock(&pcm_mutex);
-+ if (platform->pcm_ops->prepare) {
-+ ret = platform->pcm_ops->prepare(substream);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: platform prepare error\n");
-+ goto out;
-+ }
-+ }
-+
-+ if (rtd->codec_dai->ops.prepare) {
-+ ret = rtd->codec_dai->ops.prepare(substream);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: codec DAI prepare error\n");
-+ goto out;
-+ }
-+ }
-+
-+ if (rtd->cpu_dai->ops.prepare)
-+ ret = rtd->cpu_dai->ops.prepare(substream);
-+
-+ /* we only want to start a DAPM playback stream if we are not waiting
-+ * on an existing one stopping */
-+ if (rtd->codec_dai->pop_wait) {
-+ /* we are waiting for the delayed work to start */
-+ if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
-+ snd_soc_dapm_stream_event(codec,
-+ rtd->codec_dai->capture.stream_name,
-+ SND_SOC_DAPM_STREAM_START);
-+ else {
-+ rtd->codec_dai->pop_wait = 0;
-+ cancel_delayed_work(&soc_stream_work);
-+ if (rtd->codec_dai->digital_mute)
-+ rtd->codec_dai->digital_mute(codec, rtd->codec_dai, 0);
-+ }
-+ } else {
-+ /* no delayed work - do we need to power up codec */
-+ if (codec->dapm_state != SNDRV_CTL_POWER_D0) {
-+
-+ if (codec->dapm_event)
-+ codec->dapm_event(codec, SNDRV_CTL_POWER_D1);
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ snd_soc_dapm_stream_event(codec,
-+ rtd->codec_dai->playback.stream_name,
-+ SND_SOC_DAPM_STREAM_START);
-+ else
-+ snd_soc_dapm_stream_event(codec,
-+ rtd->codec_dai->capture.stream_name,
-+ SND_SOC_DAPM_STREAM_START);
-+
-+ if (codec->dapm_event)
-+ codec->dapm_event(codec, SNDRV_CTL_POWER_D0);
-+ if (rtd->codec_dai->digital_mute)
-+ rtd->codec_dai->digital_mute(codec, rtd->codec_dai, 0);
-+
-+ } else {
-+ /* codec already powered - power on widgets */
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ snd_soc_dapm_stream_event(codec,
-+ rtd->codec_dai->playback.stream_name,
-+ SND_SOC_DAPM_STREAM_START);
-+ else
-+ snd_soc_dapm_stream_event(codec,
-+ rtd->codec_dai->capture.stream_name,
-+ SND_SOC_DAPM_STREAM_START);
-+ if (rtd->codec_dai->digital_mute)
-+ rtd->codec_dai->digital_mute(codec, rtd->codec_dai, 0);
-+ }
-+ }
-+
-+out:
-+ mutex_unlock(&pcm_mutex);
-+ return ret;
-+}
-+
-+/*
-+ * Called by ALSA when the hardware params are set by application. This
-+ * function can also be called multiple times and can allocate buffers
-+ * (using snd_pcm_lib_* ). It's non-atomic.
-+ */
-+static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_platform *platform = socdev->platform;
-+ struct snd_soc_machine *machine = socdev->machine;
-+ int ret = 0;
-+
-+ mutex_lock(&pcm_mutex);
-+
-+ /* we don't need to match any AC97 params */
-+ if (rtd->cpu_dai->type != SND_SOC_DAI_AC97) {
-+ ret = soc_hw_match_params(substream, params);
-+ if (ret < 0)
-+ goto out;
-+ } else {
-+ struct snd_soc_clock_info clk_info;
-+ clk_info.rate = params_rate(params);
-+ ret = soc_get_mclk(rtd, &clk_info);
-+ if (ret < 0)
-+ goto out;
-+ }
-+
-+ if (rtd->codec_dai->ops.hw_params) {
-+ ret = rtd->codec_dai->ops.hw_params(substream, params);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: can't set codec %s hw params\n",
-+ rtd->codec_dai->name);
-+ goto out;
-+ }
-+ }
-+
-+ if (rtd->cpu_dai->ops.hw_params) {
-+ ret = rtd->cpu_dai->ops.hw_params(substream, params);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: can't set interface %s hw params\n",
-+ rtd->cpu_dai->name);
-+ goto interface_err;
-+ }
-+ }
-+
-+ if (platform->pcm_ops->hw_params) {
-+ ret = platform->pcm_ops->hw_params(substream, params);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: can't set platform %s hw params\n",
-+ platform->name);
-+ goto platform_err;
-+ }
-+ }
-+
-+ if (machine->ops && machine->ops->hw_params) {
-+ ret = machine->ops->hw_params(substream, params);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: machine hw_params failed\n");
-+ goto machine_err;
-+ }
-+ }
-+
-+out:
-+ mutex_unlock(&pcm_mutex);
-+ return ret;
-+
-+machine_err:
-+ if (platform->pcm_ops->hw_free)
-+ platform->pcm_ops->hw_free(substream);
-+
-+platform_err:
-+ if (rtd->cpu_dai->ops.hw_free)
-+ rtd->cpu_dai->ops.hw_free(substream);
-+
-+interface_err:
-+ if (rtd->codec_dai->ops.hw_free)
-+ rtd->codec_dai->ops.hw_free(substream);
-+
-+ mutex_unlock(&pcm_mutex);
-+ return ret;
-+}
-+
-+/*
-+ * Free's resources allocated by hw_params, can be called multiple times
-+ */
-+static int soc_pcm_hw_free(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_platform *platform = socdev->platform;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct snd_soc_machine *machine = socdev->machine;
-+
-+ mutex_lock(&pcm_mutex);
-+
-+ /* apply codec digital mute */
-+ if (!codec->active && rtd->codec_dai->digital_mute)
-+ rtd->codec_dai->digital_mute(codec, rtd->codec_dai, 1);
-+
-+ /* free any machine hw params */
-+ if (machine->ops && machine->ops->hw_free)
-+ machine->ops->hw_free(substream);
-+
-+ /* free any DMA resources */
-+ if (platform->pcm_ops->hw_free)
-+ platform->pcm_ops->hw_free(substream);
-+
-+ /* now free hw params for the DAI's */
-+ if (rtd->codec_dai->ops.hw_free)
-+ rtd->codec_dai->ops.hw_free(substream);
-+
-+ if (rtd->cpu_dai->ops.hw_free)
-+ rtd->cpu_dai->ops.hw_free(substream);
-+
-+ mutex_unlock(&pcm_mutex);
-+ return 0;
-+}
-+
-+static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_platform *platform = socdev->platform;
-+ int ret;
-+
-+ if (rtd->codec_dai->ops.trigger) {
-+ ret = rtd->codec_dai->ops.trigger(substream, cmd);
-+ if (ret < 0)
-+ return ret;
-+ }
-+
-+ if (platform->pcm_ops->trigger) {
-+ ret = platform->pcm_ops->trigger(substream, cmd);
-+ if (ret < 0)
-+ return ret;
-+ }
-+
-+ if (rtd->cpu_dai->ops.trigger) {
-+ ret = rtd->cpu_dai->ops.trigger(substream, cmd);
-+ if (ret < 0)
-+ return ret;
-+ }
-+ return 0;
-+}
-+
-+/* ASoC PCM operations */
-+static struct snd_pcm_ops soc_pcm_ops = {
-+ .open = soc_pcm_open,
-+ .close = soc_codec_close,
-+ .hw_params = soc_pcm_hw_params,
-+ .hw_free = soc_pcm_hw_free,
-+ .prepare = soc_pcm_prepare,
-+ .trigger = soc_pcm_trigger,
-+};
-+
-+#ifdef CONFIG_PM
-+/* powers down audio subsystem for suspend */
-+static int soc_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_machine *machine = socdev->machine;
-+ struct snd_soc_platform *platform = socdev->platform;
-+ struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+
-+ /* mute any active DAC's */
-+ for(i = 0; i < machine->num_links; i++) {
-+ struct snd_soc_codec_dai *dai = machine->dai_link[i].codec_dai;
-+ if (dai->digital_mute && dai->playback.active)
-+ dai->digital_mute(codec, dai, 1);
-+ }
-+
-+ if (machine->suspend_pre)
-+ machine->suspend_pre(pdev, state);
-+
-+ for(i = 0; i < machine->num_links; i++) {
-+ struct snd_soc_cpu_dai *cpu_dai = machine->dai_link[i].cpu_dai;
-+ if (cpu_dai->suspend && cpu_dai->type != SND_SOC_DAI_AC97)
-+ cpu_dai->suspend(pdev, cpu_dai);
-+ if (platform->suspend)
-+ platform->suspend(pdev, cpu_dai);
-+ }
-+
-+ /* close any waiting streams and save state */
-+ flush_workqueue(soc_workq);
-+ codec->suspend_dapm_state = codec->dapm_state;
-+
-+ for(i = 0; i < codec->num_dai; i++) {
-+ char *stream = codec->dai[i].playback.stream_name;
-+ if (stream != NULL)
-+ snd_soc_dapm_stream_event(codec, stream,
-+ SND_SOC_DAPM_STREAM_SUSPEND);
-+ stream = codec->dai[i].capture.stream_name;
-+ if (stream != NULL)
-+ snd_soc_dapm_stream_event(codec, stream,
-+ SND_SOC_DAPM_STREAM_SUSPEND);
-+ }
-+
-+ if (codec_dev->suspend)
-+ codec_dev->suspend(pdev, state);
-+
-+ for(i = 0; i < machine->num_links; i++) {
-+ struct snd_soc_cpu_dai *cpu_dai = machine->dai_link[i].cpu_dai;
-+ if (cpu_dai->suspend && cpu_dai->type == SND_SOC_DAI_AC97)
-+ cpu_dai->suspend(pdev, cpu_dai);
-+ }
-+
-+ if (machine->suspend_post)
-+ machine->suspend_post(pdev, state);
-+
-+ return 0;
-+}
-+
-+/* powers up audio subsystem after a suspend */
-+static int soc_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_machine *machine = socdev->machine;
-+ struct snd_soc_platform *platform = socdev->platform;
-+ struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+
-+ if (machine->resume_pre)
-+ machine->resume_pre(pdev);
-+
-+ for(i = 0; i < machine->num_links; i++) {
-+ struct snd_soc_cpu_dai *cpu_dai = machine->dai_link[i].cpu_dai;
-+ if (cpu_dai->resume && cpu_dai->type == SND_SOC_DAI_AC97)
-+ cpu_dai->resume(pdev, cpu_dai);
-+ }
-+
-+ if (codec_dev->resume)
-+ codec_dev->resume(pdev);
-+
-+ for(i = 0; i < codec->num_dai; i++) {
-+ char* stream = codec->dai[i].playback.stream_name;
-+ if (stream != NULL)
-+ snd_soc_dapm_stream_event(codec, stream,
-+ SND_SOC_DAPM_STREAM_RESUME);
-+ stream = codec->dai[i].capture.stream_name;
-+ if (stream != NULL)
-+ snd_soc_dapm_stream_event(codec, stream,
-+ SND_SOC_DAPM_STREAM_RESUME);
-+ }
-+
-+ /* unmute any active DAC's */
-+ for(i = 0; i < machine->num_links; i++) {
-+ struct snd_soc_codec_dai *dai = machine->dai_link[i].codec_dai;
-+ if (dai->digital_mute && dai->playback.active)
-+ dai->digital_mute(codec, dai, 0);
-+ }
-+
-+ for(i = 0; i < machine->num_links; i++) {
-+ struct snd_soc_cpu_dai *cpu_dai = machine->dai_link[i].cpu_dai;
-+ if (cpu_dai->resume && cpu_dai->type != SND_SOC_DAI_AC97)
-+ cpu_dai->resume(pdev, cpu_dai);
-+ if (platform->resume)
-+ platform->resume(pdev, cpu_dai);
-+ }
-+
-+ if (machine->resume_post)
-+ machine->resume_post(pdev);
-+
-+ return 0;
-+}
-+
-+#else
-+#define soc_suspend NULL
-+#define soc_resume NULL
-+#endif
-+
-+/* probes a new socdev */
-+static int soc_probe(struct platform_device *pdev)
-+{
-+ int ret = 0, i;
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_machine *machine = socdev->machine;
-+ struct snd_soc_platform *platform = socdev->platform;
-+ struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
-+
-+ if (machine->probe) {
-+ ret = machine->probe(pdev);
-+ if(ret < 0)
-+ return ret;
-+ }
-+
-+ for (i = 0; i < machine->num_links; i++) {
-+ struct snd_soc_cpu_dai *cpu_dai = machine->dai_link[i].cpu_dai;
-+ if (cpu_dai->probe) {
-+ ret = cpu_dai->probe(pdev);
-+ if(ret < 0)
-+ goto cpu_dai_err;
-+ }
-+ }
-+
-+ if (codec_dev->probe) {
-+ ret = codec_dev->probe(pdev);
-+ if(ret < 0)
-+ goto cpu_dai_err;
-+ }
-+
-+ if (platform->probe) {
-+ ret = platform->probe(pdev);
-+ if(ret < 0)
-+ goto platform_err;
-+ }
-+
-+ /* DAPM stream work */
-+ soc_workq = create_workqueue("kdapm");
-+ if (soc_workq == NULL)
-+ goto work_err;
-+ INIT_WORK(&soc_stream_work, close_delayed_work, socdev);
-+ return 0;
-+
-+work_err:
-+ if (platform->remove)
-+ platform->remove(pdev);
-+
-+platform_err:
-+ if (codec_dev->remove)
-+ codec_dev->remove(pdev);
-+
-+cpu_dai_err:
-+ for (i--; i > 0; i--) {
-+ struct snd_soc_cpu_dai *cpu_dai = machine->dai_link[i].cpu_dai;
-+ if (cpu_dai->remove)
-+ cpu_dai->remove(pdev);
-+ }
-+
-+ if (machine->remove)
-+ machine->remove(pdev);
-+
-+ return ret;
-+}
-+
-+/* removes a socdev */
-+static int soc_remove(struct platform_device *pdev)
-+{
-+ int i;
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_machine *machine = socdev->machine;
-+ struct snd_soc_platform *platform = socdev->platform;
-+ struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
-+
-+ if (soc_workq)
-+ destroy_workqueue(soc_workq);
-+
-+ if (platform->remove)
-+ platform->remove(pdev);
-+
-+ if (codec_dev->remove)
-+ codec_dev->remove(pdev);
-+
-+ for (i = 0; i < machine->num_links; i++) {
-+ struct snd_soc_cpu_dai *cpu_dai = machine->dai_link[i].cpu_dai;
-+ if (cpu_dai->remove)
-+ cpu_dai->remove(pdev);
-+ }
-+
-+ if (machine->remove)
-+ machine->remove(pdev);
-+
-+ return 0;
-+}
-+
-+/* ASoC platform driver */
-+static struct platform_driver soc_driver = {
-+ .driver = {
-+ .name = "soc-audio",
-+ },
-+ .probe = soc_probe,
-+ .remove = soc_remove,
-+ .suspend = soc_suspend,
-+ .resume = soc_resume,
-+};
-+
-+/* create a new pcm */
-+static int soc_new_pcm(struct snd_soc_device *socdev,
-+ struct snd_soc_dai_link *dai_link, int num)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct snd_soc_codec_dai *codec_dai = dai_link->codec_dai;
-+ struct snd_soc_cpu_dai *cpu_dai = dai_link->cpu_dai;
-+ struct snd_soc_pcm_runtime *rtd;
-+ struct snd_pcm *pcm;
-+ char new_name[64];
-+ int ret = 0, playback = 0, capture = 0;
-+
-+ rtd = kzalloc(sizeof(struct snd_soc_pcm_runtime), GFP_KERNEL);
-+ if (rtd == NULL)
-+ return -ENOMEM;
-+ rtd->cpu_dai = cpu_dai;
-+ rtd->codec_dai = codec_dai;
-+ rtd->socdev = socdev;
-+
-+ /* check client and interface hw capabilities */
-+ sprintf(new_name, "%s %s-%s-%d",dai_link->stream_name, codec_dai->name,
-+ get_dai_name(cpu_dai->type), num);
-+
-+ if (codec_dai->playback.channels_min)
-+ playback = 1;
-+ if (codec_dai->capture.channels_min)
-+ capture = 1;
-+
-+ ret = snd_pcm_new(codec->card, new_name, codec->pcm_devs++, playback,
-+ capture, &pcm);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: can't create pcm for codec %s\n", codec->name);
-+ kfree(rtd);
-+ return ret;
-+ }
-+
-+ pcm->private_data = rtd;
-+ soc_pcm_ops.mmap = socdev->platform->pcm_ops->mmap;
-+ soc_pcm_ops.pointer = socdev->platform->pcm_ops->pointer;
-+ soc_pcm_ops.ioctl = socdev->platform->pcm_ops->ioctl;
-+ soc_pcm_ops.copy = socdev->platform->pcm_ops->copy;
-+ soc_pcm_ops.silence = socdev->platform->pcm_ops->silence;
-+ soc_pcm_ops.ack = socdev->platform->pcm_ops->ack;
-+ soc_pcm_ops.page = socdev->platform->pcm_ops->page;
-+
-+ if (playback)
-+ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &soc_pcm_ops);
-+
-+ if (capture)
-+ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &soc_pcm_ops);
-+
-+ ret = socdev->platform->pcm_new(codec->card, codec_dai, pcm);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: platform pcm constructor failed\n");
-+ kfree(rtd);
-+ return ret;
-+ }
-+
-+ pcm->private_free = socdev->platform->pcm_free;
-+ printk(KERN_INFO "asoc: %s <-> %s mapping ok\n", codec_dai->name,
-+ cpu_dai->name);
-+ return ret;
-+}
-+
-+/* codec register dump */
-+static ssize_t codec_reg_show(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct snd_soc_device *devdata = dev_get_drvdata(dev);
-+ struct snd_soc_codec *codec = devdata->codec;
-+ int i, step = 1, count = 0;
-+
-+ if (!codec->reg_cache_size)
-+ return 0;
-+
-+ if (codec->reg_cache_step)
-+ step = codec->reg_cache_step;
-+
-+ count += sprintf(buf, "%s registers\n", codec->name);
-+ for(i = 0; i < codec->reg_cache_size; i += step)
-+ count += sprintf(buf + count, "%2x: %4x\n", i, codec->read(codec, i));
-+
-+ return count;
-+}
-+static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL);
-+
-+/**
-+ * snd_soc_new_ac97_codec - initailise AC97 device
-+ * @codec: audio codec
-+ * @ops: AC97 bus operations
-+ * @num: AC97 codec number
-+ *
-+ * Initialises AC97 codec resources for use by ad-hoc devices only.
-+ */
-+int snd_soc_new_ac97_codec(struct snd_soc_codec *codec,
-+ struct snd_ac97_bus_ops *ops, int num)
-+{
-+ mutex_lock(&codec->mutex);
-+
-+ codec->ac97 = kzalloc(sizeof(struct snd_ac97), GFP_KERNEL);
-+ if (codec->ac97 == NULL) {
-+ mutex_unlock(&codec->mutex);
-+ return -ENOMEM;
-+ }
-+
-+ codec->ac97->bus = kzalloc(sizeof(struct snd_ac97_bus), GFP_KERNEL);
-+ if (codec->ac97->bus == NULL) {
-+ kfree(codec->ac97);
-+ codec->ac97 = NULL;
-+ mutex_unlock(&codec->mutex);
-+ return -ENOMEM;
-+ }
-+
-+ codec->ac97->bus->ops = ops;
-+ codec->ac97->num = num;
-+ mutex_unlock(&codec->mutex);
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_new_ac97_codec);
-+
-+/**
-+ * snd_soc_free_ac97_codec - free AC97 codec device
-+ * @codec: audio codec
-+ *
-+ * Frees AC97 codec device resources.
-+ */
-+void snd_soc_free_ac97_codec(struct snd_soc_codec *codec)
-+{
-+ mutex_lock(&codec->mutex);
-+ kfree(codec->ac97->bus);
-+ kfree(codec->ac97);
-+ codec->ac97 = NULL;
-+ mutex_unlock(&codec->mutex);
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_free_ac97_codec);
-+
-+/**
-+ * snd_soc_update_bits - update codec register bits
-+ * @codec: audio codec
-+ * @reg: codec register
-+ * @mask: register mask
-+ * @value: new value
-+ *
-+ * Writes new register value.
-+ *
-+ * Returns 1 for change else 0.
-+ */
-+int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg,
-+ unsigned short mask, unsigned short value)
-+{
-+ int change;
-+ unsigned short old, new;
-+
-+ mutex_lock(&io_mutex);
-+ old = snd_soc_read(codec, reg);
-+ new = (old & ~mask) | value;
-+ change = old != new;
-+ if (change)
-+ snd_soc_write(codec, reg, new);
-+
-+ mutex_unlock(&io_mutex);
-+ return change;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_update_bits);
-+
-+/**
-+ * snd_soc_test_bits - test register for change
-+ * @codec: audio codec
-+ * @reg: codec register
-+ * @mask: register mask
-+ * @value: new value
-+ *
-+ * Tests a register with a new value and checks if the new value is
-+ * different from the old value.
-+ *
-+ * Returns 1 for change else 0.
-+ */
-+int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg,
-+ unsigned short mask, unsigned short value)
-+{
-+ int change;
-+ unsigned short old, new;
-+
-+ mutex_lock(&io_mutex);
-+ old = snd_soc_read(codec, reg);
-+ new = (old & ~mask) | value;
-+ change = old != new;
-+ mutex_unlock(&io_mutex);
-+
-+ return change;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_test_bits);
-+
-+/**
-+ * snd_soc_get_rate - get int sample rate
-+ * @hwpcmrate: the hardware pcm rate
-+ *
-+ * Returns the audio rate integaer value, else 0.
-+ */
-+int snd_soc_get_rate(int hwpcmrate)
-+{
-+ int rate = ffs(hwpcmrate) - 1;
-+
-+ if (rate > ARRAY_SIZE(rates))
-+ return 0;
-+ return rates[rate];
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_get_rate);
-+
-+/**
-+ * snd_soc_new_pcms - create new sound card and pcms
-+ * @socdev: the SoC audio device
-+ *
-+ * Create a new sound card based upon the codec and interface pcms.
-+ *
-+ * Returns 0 for success, else error.
-+ */
-+int snd_soc_new_pcms(struct snd_soc_device *socdev, int idx, const char * xid)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct snd_soc_machine *machine = socdev->machine;
-+ int ret = 0, i;
-+
-+ mutex_lock(&codec->mutex);
-+
-+ /* register a sound card */
-+ codec->card = snd_card_new(idx, xid, codec->owner, 0);
-+ if (!codec->card) {
-+ printk(KERN_ERR "asoc: can't create sound card for codec %s\n",
-+ codec->name);
-+ mutex_unlock(&codec->mutex);
-+ return -ENODEV;
-+ }
-+
-+ codec->card->dev = socdev->dev;
-+ codec->card->private_data = codec;
-+ strncpy(codec->card->driver, codec->name, sizeof(codec->card->driver));
-+
-+ /* create the pcms */
-+ for(i = 0; i < machine->num_links; i++) {
-+ ret = soc_new_pcm(socdev, &machine->dai_link[i], i);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: can't create pcm %s\n",
-+ machine->dai_link[i].stream_name);
-+ mutex_unlock(&codec->mutex);
-+ return ret;
-+ }
-+ }
-+
-+ mutex_unlock(&codec->mutex);
-+ return ret;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_new_pcms);
-+
-+/**
-+ * snd_soc_register_card - register sound card
-+ * @socdev: the SoC audio device
-+ *
-+ * Register a SoC sound card. Also registers an AC97 device if the
-+ * codec is AC97 for ad hoc devices.
-+ *
-+ * Returns 0 for success, else error.
-+ */
-+int snd_soc_register_card(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct snd_soc_machine *machine = socdev->machine;
-+ int ret = 0, i, ac97 = 0, err = 0;
-+
-+ mutex_lock(&codec->mutex);
-+ for(i = 0; i < machine->num_links; i++) {
-+ if (socdev->machine->dai_link[i].init) {
-+ err = socdev->machine->dai_link[i].init(codec);
-+ if (err < 0) {
-+ printk(KERN_ERR "asoc: failed to init %s\n",
-+ socdev->machine->dai_link[i].stream_name);
-+ continue;
-+ }
-+ }
-+ if (socdev->machine->dai_link[i].cpu_dai->type == SND_SOC_DAI_AC97)
-+ ac97 = 1;
-+ }
-+ snprintf(codec->card->shortname, sizeof(codec->card->shortname),
-+ "%s", machine->name);
-+ snprintf(codec->card->longname, sizeof(codec->card->longname),
-+ "%s (%s)", machine->name, codec->name);
-+
-+ ret = snd_card_register(codec->card);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: failed to register soundcard for codec %s\n",
-+ codec->name);
-+ goto out;
-+ }
-+
-+#ifdef CONFIG_SND_SOC_AC97_BUS
-+ if (ac97) {
-+ ret = soc_ac97_dev_register(codec);
-+ if (ret < 0) {
-+ printk(KERN_ERR "asoc: AC97 device register failed\n");
-+ snd_card_free(codec->card);
-+ goto out;
-+ }
-+ }
-+#endif
-+
-+ err = snd_soc_dapm_sys_add(socdev->dev);
-+ if (err < 0)
-+ printk(KERN_WARNING "asoc: failed to add dapm sysfs entries\n");
-+
-+ err = device_create_file(socdev->dev, &dev_attr_codec_reg);
-+ if (err < 0)
-+ printk(KERN_WARNING "asoc: failed to add codec sysfs entries\n");
-+out:
-+ mutex_unlock(&codec->mutex);
-+ return ret;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_register_card);
-+
-+/**
-+ * snd_soc_free_pcms - free sound card and pcms
-+ * @socdev: the SoC audio device
-+ *
-+ * Frees sound card and pcms associated with the socdev.
-+ * Also unregister the codec if it is an AC97 device.
-+ */
-+void snd_soc_free_pcms(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ mutex_lock(&codec->mutex);
-+#ifdef CONFIG_SND_SOC_AC97_BUS
-+ if (codec->ac97)
-+ soc_ac97_dev_unregister(codec);
-+#endif
-+
-+ if (codec->card)
-+ snd_card_free(codec->card);
-+ device_remove_file(socdev->dev, &dev_attr_codec_reg);
-+ mutex_unlock(&codec->mutex);
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_free_pcms);
-+
-+/**
-+ * snd_soc_set_runtime_hwparams - set the runtime hardware parameters
-+ * @substream: the pcm substream
-+ * @hw: the hardware parameters
-+ *
-+ * Sets the substream runtime hardware parameters.
-+ */
-+int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream,
-+ const struct snd_pcm_hardware *hw)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ runtime->hw.info = hw->info;
-+ runtime->hw.formats = hw->formats;
-+ runtime->hw.period_bytes_min = hw->period_bytes_min;
-+ runtime->hw.period_bytes_max = hw->period_bytes_max;
-+ runtime->hw.periods_min = hw->periods_min;
-+ runtime->hw.periods_max = hw->periods_max;
-+ runtime->hw.buffer_bytes_max = hw->buffer_bytes_max;
-+ runtime->hw.fifo_size = hw->fifo_size;
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_set_runtime_hwparams);
-+
-+/**
-+ * snd_soc_cnew - create new control
-+ * @_template: control template
-+ * @data: control private data
-+ * @lnng_name: control long name
-+ *
-+ * Create a new mixer control from a template control.
-+ *
-+ * Returns 0 for success, else error.
-+ */
-+struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
-+ void *data, char *long_name)
-+{
-+ struct snd_kcontrol_new template;
-+
-+ memcpy(&template, _template, sizeof(template));
-+ if (long_name)
-+ template.name = long_name;
-+ template.access = SNDRV_CTL_ELEM_ACCESS_READWRITE;
-+ template.index = 0;
-+
-+ return snd_ctl_new1(&template, data);
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_cnew);
-+
-+/**
-+ * snd_soc_info_enum_double - enumerated double mixer info callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to provide information about a double enumerated
-+ * mixer control.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
-+
-+ uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
-+ uinfo->count = e->shift_l == e->shift_r ? 1 : 2;
-+ uinfo->value.enumerated.items = e->mask;
-+
-+ if (uinfo->value.enumerated.item > e->mask - 1)
-+ uinfo->value.enumerated.item = e->mask - 1;
-+ strcpy(uinfo->value.enumerated.name,
-+ e->texts[uinfo->value.enumerated.item]);
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_info_enum_double);
-+
-+/**
-+ * snd_soc_get_enum_double - enumerated double mixer get callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to get the value of a double enumerated mixer.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+ struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
-+ unsigned short val, bitmask;
-+
-+ for (bitmask = 1; bitmask < e->mask; bitmask <<= 1)
-+ ;
-+ val = snd_soc_read(codec, e->reg);
-+ ucontrol->value.enumerated.item[0] = (val >> e->shift_l) & (bitmask - 1);
-+ if (e->shift_l != e->shift_r)
-+ ucontrol->value.enumerated.item[1] =
-+ (val >> e->shift_r) & (bitmask - 1);
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_get_enum_double);
-+
-+/**
-+ * snd_soc_put_enum_double - enumerated double mixer put callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to set the value of a double enumerated mixer.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+ struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
-+ unsigned short val;
-+ unsigned short mask, bitmask;
-+
-+ for (bitmask = 1; bitmask < e->mask; bitmask <<= 1)
-+ ;
-+ if (ucontrol->value.enumerated.item[0] > e->mask - 1)
-+ return -EINVAL;
-+ val = ucontrol->value.enumerated.item[0] << e->shift_l;
-+ mask = (bitmask - 1) << e->shift_l;
-+ if (e->shift_l != e->shift_r) {
-+ if (ucontrol->value.enumerated.item[1] > e->mask - 1)
-+ return -EINVAL;
-+ val |= ucontrol->value.enumerated.item[1] << e->shift_r;
-+ mask |= (bitmask - 1) << e->shift_r;
-+ }
-+
-+ return snd_soc_update_bits(codec, e->reg, mask, val);
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_put_enum_double);
-+
-+/**
-+ * snd_soc_info_enum_ext - external enumerated single mixer info callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to provide information about an external enumerated
-+ * single mixer.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
-+
-+ uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
-+ uinfo->count = 1;
-+ uinfo->value.enumerated.items = e->mask;
-+
-+ if (uinfo->value.enumerated.item > e->mask - 1)
-+ uinfo->value.enumerated.item = e->mask - 1;
-+ strcpy(uinfo->value.enumerated.name,
-+ e->texts[uinfo->value.enumerated.item]);
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_info_enum_ext);
-+
-+/**
-+ * snd_soc_info_volsw_ext - external single mixer info callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to provide information about a single external mixer control.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_info_volsw_ext(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ int mask = kcontrol->private_value;
-+
-+ uinfo->type =
-+ mask == 1 ? SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER;
-+ uinfo->count = 1;
-+ uinfo->value.integer.min = 0;
-+ uinfo->value.integer.max = mask;
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_info_volsw_ext);
-+
-+/**
-+ * snd_soc_info_bool_ext - external single boolean mixer info callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to provide information about a single boolean external mixer control.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_info_bool_ext(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
-+ uinfo->count = 1;
-+ uinfo->value.integer.min = 0;
-+ uinfo->value.integer.max = 1;
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_info_bool_ext);
-+
-+/**
-+ * snd_soc_info_volsw - single mixer info callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to provide information about a single mixer control.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ int mask = (kcontrol->private_value >> 16) & 0xff;
-+ int shift = (kcontrol->private_value >> 8) & 0x0f;
-+ int rshift = (kcontrol->private_value >> 12) & 0x0f;
-+
-+ uinfo->type =
-+ mask == 1 ? SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER;
-+ uinfo->count = shift == rshift ? 1 : 2;
-+ uinfo->value.integer.min = 0;
-+ uinfo->value.integer.max = mask;
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_info_volsw);
-+
-+/**
-+ * snd_soc_get_volsw - single mixer get callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to get the value of a single mixer control.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_get_volsw(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+ int reg = kcontrol->private_value & 0xff;
-+ int shift = (kcontrol->private_value >> 8) & 0x0f;
-+ int rshift = (kcontrol->private_value >> 12) & 0x0f;
-+ int mask = (kcontrol->private_value >> 16) & 0xff;
-+ int invert = (kcontrol->private_value >> 24) & 0x01;
-+
-+ ucontrol->value.integer.value[0] =
-+ (snd_soc_read(codec, reg) >> shift) & mask;
-+ if (shift != rshift)
-+ ucontrol->value.integer.value[1] =
-+ (snd_soc_read(codec, reg) >> rshift) & mask;
-+ if (invert) {
-+ ucontrol->value.integer.value[0] =
-+ mask - ucontrol->value.integer.value[0];
-+ if (shift != rshift)
-+ ucontrol->value.integer.value[1] =
-+ mask - ucontrol->value.integer.value[1];
-+ }
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_get_volsw);
-+
-+/**
-+ * snd_soc_put_volsw - single mixer put callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to set the value of a single mixer control.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+ int reg = kcontrol->private_value & 0xff;
-+ int shift = (kcontrol->private_value >> 8) & 0x0f;
-+ int rshift = (kcontrol->private_value >> 12) & 0x0f;
-+ int mask = (kcontrol->private_value >> 16) & 0xff;
-+ int invert = (kcontrol->private_value >> 24) & 0x01;
-+ int err;
-+ unsigned short val, val2, val_mask;
-+
-+ val = (ucontrol->value.integer.value[0] & mask);
-+ if (invert)
-+ val = mask - val;
-+ val_mask = mask << shift;
-+ val = val << shift;
-+ if (shift != rshift) {
-+ val2 = (ucontrol->value.integer.value[1] & mask);
-+ if (invert)
-+ val2 = mask - val2;
-+ val_mask |= mask << rshift;
-+ val |= val2 << rshift;
-+ }
-+ err = snd_soc_update_bits(codec, reg, val_mask, val);
-+ return err;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_put_volsw);
-+
-+/**
-+ * snd_soc_info_volsw_2r - double mixer info callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to provide information about a double mixer control that
-+ * spans 2 codec registers.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_info_volsw_2r(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ int mask = (kcontrol->private_value >> 12) & 0xff;
-+
-+ uinfo->type =
-+ mask == 1 ? SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER;
-+ uinfo->count = 2;
-+ uinfo->value.integer.min = 0;
-+ uinfo->value.integer.max = mask;
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_info_volsw_2r);
-+
-+/**
-+ * snd_soc_get_volsw_2r - double mixer get callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to get the value of a double mixer control that spans 2 registers.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_get_volsw_2r(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+ int reg = kcontrol->private_value & 0xff;
-+ int reg2 = (kcontrol->private_value >> 24) & 0xff;
-+ int shift = (kcontrol->private_value >> 8) & 0x0f;
-+ int mask = (kcontrol->private_value >> 12) & 0xff;
-+ int invert = (kcontrol->private_value >> 20) & 0x01;
-+
-+ ucontrol->value.integer.value[0] =
-+ (snd_soc_read(codec, reg) >> shift) & mask;
-+ ucontrol->value.integer.value[1] =
-+ (snd_soc_read(codec, reg2) >> shift) & mask;
-+ if (invert) {
-+ ucontrol->value.integer.value[0] =
-+ mask - ucontrol->value.integer.value[0];
-+ ucontrol->value.integer.value[1] =
-+ mask - ucontrol->value.integer.value[1];
-+ }
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_get_volsw_2r);
-+
-+/**
-+ * snd_soc_put_volsw_2r - double mixer set callback
-+ * @kcontrol: mixer control
-+ * @uinfo: control element information
-+ *
-+ * Callback to set the value of a double mixer control that spans 2 registers.
-+ *
-+ * Returns 0 for success.
-+ */
-+int snd_soc_put_volsw_2r(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-+ int reg = kcontrol->private_value & 0xff;
-+ int reg2 = (kcontrol->private_value >> 24) & 0xff;
-+ int shift = (kcontrol->private_value >> 8) & 0x0f;
-+ int mask = (kcontrol->private_value >> 12) & 0xff;
-+ int invert = (kcontrol->private_value >> 20) & 0x01;
-+ int err;
-+ unsigned short val, val2, val_mask;
-+
-+ val_mask = mask << shift;
-+ val = (ucontrol->value.integer.value[0] & mask);
-+ val2 = (ucontrol->value.integer.value[1] & mask);
-+
-+ if (invert) {
-+ val = mask - val;
-+ val2 = mask - val2;
-+ }
-+
-+ val = val << shift;
-+ val2 = val2 << shift;
-+
-+ if ((err = snd_soc_update_bits(codec, reg, val_mask, val)) < 0)
-+ return err;
-+
-+ err = snd_soc_update_bits(codec, reg2, val_mask, val2);
-+ return err;
-+}
-+EXPORT_SYMBOL_GPL(snd_soc_put_volsw_2r);
-+
-+static int __devinit snd_soc_init(void)
-+{
-+ printk(KERN_INFO "ASoC version %s\n", SND_SOC_VERSION);
-+ return platform_driver_register(&soc_driver);
-+}
-+
-+static void snd_soc_exit(void)
-+{
-+ platform_driver_unregister(&soc_driver);
-+}
-+
-+module_init(snd_soc_init);
-+module_exit(snd_soc_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("ALSA SoC Core");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/at91/Kconfig
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/at91/Kconfig
-@@ -0,0 +1,24 @@
-+menu "SoC Audio for the Atmel AT91"
-+
-+config SND_AT91_SOC
-+ tristate "SoC Audio for the Atmel AT91 System-on-Chip"
-+ depends on ARCH_AT91 && SND
-+ select SND_PCM
-+ help
-+ Say Y or M if you want to add support for codecs attached to
-+ the AT91 SSC interface. You will also need
-+ to select the audio interfaces to support below.
-+
-+config SND_AT91_SOC_I2S
-+ tristate
-+
-+config SND_AT91_SOC_ETI_B1_WM8731
-+ tristate "SoC I2S Audio support for Endrelia ETI-B1 board"
-+ depends on SND_AT91_SOC && MACH_ETI_B1
-+ select SND_AT91_SOC_I2S
-+ select SND_SOC_WM8731
-+ help
-+ Say Y if you want to add support for SoC audio on Endrelia
-+ ETI-B1 board.
-+
-+endmenu
-Index: linux-2.6-pxa-new/sound/soc/at91/Makefile
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/at91/Makefile
-@@ -0,0 +1,11 @@
-+# AT91 Platform Support
-+snd-soc-at91-objs := at91rm9200-pcm.o
-+snd-soc-at91-i2s-objs := at91rm9200-i2s.o
-+
-+obj-$(CONFIG_SND_AT91_SOC) += snd-soc-at91.o
-+obj-$(CONFIG_SND_AT91_SOC_I2S) += snd-soc-at91-i2s.o
-+
-+# AT91 Machine Support
-+snd-soc-eti-b1-wm8731-objs := eti_b1_wm8731.o
-+
-+obj-$(CONFIG_SND_AT91_SOC_ETI_B1_WM8731) += snd-soc-eti-b1-wm8731.o
-Index: linux-2.6-pxa-new/sound/soc/at91/at91rm9200-i2s.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/at91/at91rm9200-i2s.c
-@@ -0,0 +1,715 @@
-+/*
-+ * at91rm9200-i2s.c -- ALSA Soc Audio Layer Platform driver and DMA engine
-+ *
-+ * Author: Frank Mandarino <fmandarino@endrelia.com>
-+ * Endrelia Technologies Inc.
-+ *
-+ * Based on pxa2xx Platform drivers by
-+ * Liam Girdwood <liam.girdwood@wolfsonmicro.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 3rd Mar 2006 Initial version.
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/interrupt.h>
-+#include <linux/device.h>
-+#include <linux/delay.h>
-+#include <linux/clk.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/initval.h>
-+#include <sound/soc.h>
-+
-+#include <asm/arch/at91rm9200.h>
-+#include <asm/arch/at91rm9200_ssc.h>
-+#include <asm/arch/at91rm9200_pdc.h>
-+#include <asm/arch/hardware.h>
-+
-+#include "at91rm9200-pcm.h"
-+
-+#if 0
-+#define DBG(x...) printk(KERN_DEBUG "at91rm9200-i2s:" x)
-+#else
-+#define DBG(x...)
-+#endif
-+
-+#define AT91RM9200_I2S_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_NB_NF)
-+
-+#define AT91RM9200_I2S_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+/* priv is (SSC_CMR.DIV << 16 | SSC_TCMR.PERIOD ) */
-+static struct snd_soc_dai_mode at91rm9200_i2s[] = {
-+
-+ /* 8k: BCLK = (MCLK/10) = (60MHz/50) = 1.2MHz */
-+ {
-+ .fmt = AT91RM9200_I2S_DAIFMT,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = AT91RM9200_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1500,
-+ .bfs = SND_SOC_FSBD(10),
-+ .priv = (25 << 16 | 74),
-+ },
-+
-+ /* 16k: BCLK = (MCLK/3) ~= (60MHz/14) = 4.285714MHz */
-+ {
-+ .fmt = AT91RM9200_I2S_DAIFMT,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_16000,
-+ .pcmdir = AT91RM9200_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 750,
-+ .bfs = SND_SOC_FSBD(3),
-+ .priv = (7 << 16 | 133),
-+ },
-+
-+ /* 32k: BCLK = (MCLK/3) ~= (60MHz/14) = 4.285714MHz */
-+ {
-+ .fmt = AT91RM9200_I2S_DAIFMT,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = AT91RM9200_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 375,
-+ .bfs = SND_SOC_FSBD(3),
-+ .priv = (7 << 16 | 66),
-+ },
-+
-+ /* 48k: BCLK = (MCLK/5) ~= (60MHz/26) = 2.3076923MHz */
-+ {
-+ .fmt = AT91RM9200_I2S_DAIFMT,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = AT91RM9200_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 250,
-+ .bfs SND_SOC_FSBD(5),
-+ .priv = (13 << 16 | 23),
-+ },
-+};
-+
-+
-+/*
-+ * SSC registers required by the PCM DMA engine.
-+ */
-+static struct at91rm9200_ssc_regs ssc_reg[3] = {
-+ {
-+ .cr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_SSC_CR),
-+ .ier = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_SSC_IER),
-+ .idr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_SSC_IDR),
-+ },
-+ {
-+ .cr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_SSC_CR),
-+ .ier = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_SSC_IER),
-+ .idr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_SSC_IDR),
-+ },
-+ {
-+ .cr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_SSC_CR),
-+ .ier = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_SSC_IER),
-+ .idr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_SSC_IDR),
-+ },
-+};
-+
-+static struct at91rm9200_pdc_regs pdc_tx_reg[3] = {
-+ {
-+ .xpr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_PDC_TPR),
-+ .xcr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_PDC_TCR),
-+ .xnpr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_PDC_TNPR),
-+ .xncr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_PDC_TNCR),
-+ .ptcr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_PDC_PTCR),
-+ },
-+ {
-+ .xpr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_PDC_TPR),
-+ .xcr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_PDC_TCR),
-+ .xnpr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_PDC_TNPR),
-+ .xncr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_PDC_TNCR),
-+ .ptcr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_PDC_PTCR),
-+ },
-+ {
-+ .xpr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_PDC_TPR),
-+ .xcr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_PDC_TCR),
-+ .xnpr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_PDC_TNPR),
-+ .xncr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_PDC_TNCR),
-+ .ptcr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_PDC_PTCR),
-+ },
-+};
-+
-+static struct at91rm9200_pdc_regs pdc_rx_reg[3] = {
-+ {
-+ .xpr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_PDC_RPR),
-+ .xcr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_PDC_RCR),
-+ .xnpr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_PDC_RNPR),
-+ .xncr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_PDC_RNCR),
-+ .ptcr = (void __iomem *) (AT91_VA_BASE_SSC0 + AT91_PDC_PTCR),
-+ },
-+ {
-+ .xpr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_PDC_RPR),
-+ .xcr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_PDC_RCR),
-+ .xnpr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_PDC_RNPR),
-+ .xncr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_PDC_RNCR),
-+ .ptcr = (void __iomem *) (AT91_VA_BASE_SSC1 + AT91_PDC_PTCR),
-+ },
-+ {
-+ .xpr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_PDC_RPR),
-+ .xcr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_PDC_RCR),
-+ .xnpr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_PDC_RNPR),
-+ .xncr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_PDC_RNCR),
-+ .ptcr = (void __iomem *) (AT91_VA_BASE_SSC2 + AT91_PDC_PTCR),
-+ },
-+};
-+
-+/*
-+ * SSC & PDC status bits for transmit and receive.
-+ */
-+static struct at91rm9200_ssc_mask ssc_tx_mask = {
-+ .ssc_enable = AT91_SSC_TXEN,
-+ .ssc_disable = AT91_SSC_TXDIS,
-+ .ssc_endx = AT91_SSC_ENDTX,
-+ .ssc_endbuf = AT91_SSC_TXBUFE,
-+ .pdc_enable = AT91_PDC_TXTEN,
-+ .pdc_disable = AT91_PDC_TXTDIS,
-+};
-+
-+static struct at91rm9200_ssc_mask ssc_rx_mask = {
-+ .ssc_enable = AT91_SSC_RXEN,
-+ .ssc_disable = AT91_SSC_RXDIS,
-+ .ssc_endx = AT91_SSC_ENDRX,
-+ .ssc_endbuf = AT91_SSC_RXBUFF,
-+ .pdc_enable = AT91_PDC_RXTEN,
-+ .pdc_disable = AT91_PDC_RXTDIS,
-+};
-+
-+/*
-+ * A MUTEX is used to protect an SSC initialzed flag which allows
-+ * the substream hw_params() call to initialize the SSC only if
-+ * there are no other substreams open. If there are other
-+ * substreams open, the hw_param() call can only check that
-+ * it is using the same format and rate.
-+ */
-+static DECLARE_MUTEX(ssc0_mutex);
-+static DECLARE_MUTEX(ssc1_mutex);
-+static DECLARE_MUTEX(ssc2_mutex);
-+
-+/*
-+ * DMA parameters.
-+ */
-+static at91rm9200_pcm_dma_params_t ssc_dma_params[3][2] = {
-+ {{
-+ .name = "SSC0/I2S PCM Stereo out",
-+ .ssc = &ssc_reg[0],
-+ .pdc = &pdc_tx_reg[0],
-+ .mask = &ssc_tx_mask,
-+ },
-+ {
-+ .name = "SSC0/I2S PCM Stereo in",
-+ .ssc = &ssc_reg[0],
-+ .pdc = &pdc_rx_reg[0],
-+ .mask = &ssc_rx_mask,
-+ }},
-+ {{
-+ .name = "SSC1/I2S PCM Stereo out",
-+ .ssc = &ssc_reg[1],
-+ .pdc = &pdc_tx_reg[1],
-+ .mask = &ssc_tx_mask,
-+ },
-+ {
-+ .name = "SSC1/I2S PCM Stereo in",
-+ .ssc = &ssc_reg[1],
-+ .pdc = &pdc_rx_reg[1],
-+ .mask = &ssc_rx_mask,
-+ }},
-+ {{
-+ .name = "SSC2/I2S PCM Stereo out",
-+ .ssc = &ssc_reg[2],
-+ .pdc = &pdc_tx_reg[2],
-+ .mask = &ssc_tx_mask,
-+ },
-+ {
-+ .name = "SSC1/I2S PCM Stereo in",
-+ .ssc = &ssc_reg[2],
-+ .pdc = &pdc_rx_reg[2],
-+ .mask = &ssc_rx_mask,
-+ }},
-+};
-+
-+
-+struct at91rm9200_ssc_state {
-+ u32 ssc_cmr;
-+ u32 ssc_rcmr;
-+ u32 ssc_rfmr;
-+ u32 ssc_tcmr;
-+ u32 ssc_tfmr;
-+ u32 ssc_sr;
-+ u32 ssc_imr;
-+};
-+
-+static struct at91rm9200_ssc_info {
-+ char *name;
-+ void __iomem *ssc_base;
-+ u32 pid;
-+ spinlock_t lock; /* lock for dir_mask */
-+ int dir_mask; /* 0=unused, 1=playback, 2=capture */
-+ struct semaphore *mutex;
-+ int initialized;
-+ int pcmfmt;
-+ int rate;
-+ at91rm9200_pcm_dma_params_t *dma_params[2];
-+ struct at91rm9200_ssc_state ssc_state;
-+
-+} ssc_info[3] = {
-+ {
-+ .name = "ssc0",
-+ .ssc_base = (void __iomem *) AT91_VA_BASE_SSC0,
-+ .pid = AT91_ID_SSC0,
-+ .lock = SPIN_LOCK_UNLOCKED,
-+ .dir_mask = 0,
-+ .mutex = &ssc0_mutex,
-+ .initialized = 0,
-+ },
-+ {
-+ .name = "ssc1",
-+ .ssc_base = (void __iomem *) AT91_VA_BASE_SSC1,
-+ .pid = AT91_ID_SSC1,
-+ .lock = SPIN_LOCK_UNLOCKED,
-+ .dir_mask = 0,
-+ .mutex = &ssc1_mutex,
-+ .initialized = 0,
-+ },
-+ {
-+ .name = "ssc2",
-+ .ssc_base = (void __iomem *) AT91_VA_BASE_SSC2,
-+ .pid = AT91_ID_SSC2,
-+ .lock = SPIN_LOCK_UNLOCKED,
-+ .dir_mask = 0,
-+ .mutex = &ssc2_mutex,
-+ .initialized = 0,
-+ },
-+};
-+
-+
-+static irqreturn_t at91rm9200_i2s_interrupt(int irq, void *dev_id)
-+{
-+ struct at91rm9200_ssc_info *ssc_p = dev_id;
-+ at91rm9200_pcm_dma_params_t *dma_params;
-+ u32 ssc_sr;
-+ int i;
-+
-+ ssc_sr = at91_ssc_read(ssc_p->ssc_base + AT91_SSC_SR)
-+ & at91_ssc_read(ssc_p->ssc_base + AT91_SSC_IMR);
-+
-+ /*
-+ * Loop through the substreams attached to this SSC. If
-+ * a DMA-related interrupt occurred on that substream, call
-+ * the DMA interrupt handler function, if one has been
-+ * registered in the dma_params structure by the PCM driver.
-+ */
-+ for (i = 0; i < ARRAY_SIZE(ssc_p->dma_params); i++) {
-+ dma_params = ssc_p->dma_params[i];
-+
-+ if (dma_params != NULL && dma_params->dma_intr_handler != NULL &&
-+ (ssc_sr &
-+ (dma_params->mask->ssc_endx | dma_params->mask->ssc_endbuf)))
-+
-+ dma_params->dma_intr_handler(ssc_sr, dma_params->substream);
-+ }
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static int at91rm9200_i2s_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct at91rm9200_ssc_info *ssc_p = &ssc_info[rtd->cpu_dai->id];
-+ int dir_mask;
-+
-+ DBG("i2s_startup: SSC_SR=0x%08lx\n",
-+ at91_ssc_read(ssc_p->ssc_base + AT91_SSC_SR));
-+ dir_mask = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0x1 : 0x2;
-+
-+ spin_lock_irq(&ssc_p->lock);
-+ if (ssc_p->dir_mask & dir_mask) {
-+ spin_unlock_irq(&ssc_p->lock);
-+ return -EBUSY;
-+ }
-+ ssc_p->dir_mask |= dir_mask;
-+ spin_unlock_irq(&ssc_p->lock);
-+
-+ return 0;
-+}
-+
-+static void at91rm9200_i2s_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct at91rm9200_ssc_info *ssc_p = &ssc_info[rtd->cpu_dai->id];
-+ at91rm9200_pcm_dma_params_t *dma_params = rtd->cpu_dai->dma_data;
-+ int dir, dir_mask;
-+
-+ dir = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0 : 1;
-+
-+ if (dma_params != NULL) {
-+ at91_ssc_write(dma_params->ssc->cr, dma_params->mask->ssc_disable);
-+ DBG("%s disabled SSC_SR=0x%08lx\n", (dir ? "receive" : "transmit"),
-+ at91_ssc_read(ssc_p->ssc_base + AT91_SSC_SR));
-+
-+ dma_params->substream = NULL;
-+ ssc_p->dma_params[dir] = NULL;
-+ }
-+
-+ dir_mask = 1 << dir;
-+
-+ spin_lock_irq(&ssc_p->lock);
-+ ssc_p->dir_mask &= ~dir_mask;
-+ if (!ssc_p->dir_mask) {
-+ /* Shutdown the SSC clock. */
-+ DBG("Stopping pid %d clock\n", ssc_p->pid);
-+ at91_sys_write(AT91_PMC_PCDR, 1<<ssc_p->pid);
-+
-+ if (ssc_p->initialized)
-+ free_irq(ssc_p->pid, ssc_p);
-+
-+ /* Reset the SSC */
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_CR, AT91_SSC_SWRST);
-+
-+ /* Force a re-init on the next hw_params() call. */
-+ ssc_p->initialized = 0;
-+ }
-+ spin_unlock_irq(&ssc_p->lock);
-+}
-+
-+#ifdef CONFIG_PM
-+static int at91rm9200_i2s_suspend(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ struct at91rm9200_ssc_info *ssc_p;
-+
-+ if(!dai->active)
-+ return 0;
-+
-+ ssc_p = &ssc_info[dai->id];
-+
-+ /* Save the status register before disabling transmit and receive. */
-+ ssc_p->state->ssc_sr = at91_ssc_read(ssc_p->ssc_base + AT91_SSC_SR);
-+ at91_ssc_write(ssc_p->ssc_base +
-+ AT91_SSC_CR, AT91_SSC_TXDIS | AT91_SSC_RXDIS);
-+
-+ /* Save the current interrupt mask, then disable unmasked interrupts. */
-+ ssc_p->state->ssc_imr = at91_ssc_read(ssc_p->ssc_base + AT91_SSC_IMR);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_IDR, ssc_p->state->ssc_imr);
-+
-+ ssc_p->state->ssc_cmr = at91_ssc_read(ssc_p->ssc_base + AT91_SSC_CMR);
-+ ssc_p->state->ssc_rcmr = at91_ssc_read(ssc_p->ssc_base + AT91_SSC_RCMR);
-+ ssc_p->state->ssc_rfmr = at91_ssc_read(ssc_p->ssc_base + AT91_SSC_RCMR);
-+ ssc_p->state->ssc_tcmr = at91_ssc_read(ssc_p->ssc_base + AT91_SSC_RCMR);
-+ ssc_p->state->ssc_tfmr = at91_ssc_read(ssc_p->ssc_base + AT91_SSC_RCMR);
-+
-+ return 0;
-+}
-+
-+static int at91rm9200_i2s_resume(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ struct at91rm9200_ssc_info *ssc_p;
-+ u32 cr_mask;
-+
-+ if(!dai->active)
-+ return 0;
-+
-+ ssc_p = &ssc_info[dai->id];
-+
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_RCMR, ssc_p->state->ssc_tfmr);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_RCMR, ssc_p->state->ssc_tcmr);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_RCMR, ssc_p->state->ssc_rfmr);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_RCMR, ssc_p->state->ssc_rcmr);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_CMR, ssc_p->state->ssc_cmr);
-+
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_IER, ssc_p->state->ssc_imr);
-+
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_CR,
-+ ((ssc_p->state->ssc_sr & AT91_SSC_RXENA) ? AT91_SSC_RXEN : 0) |
-+ ((ssc_p->state->ssc_sr & AT91_SSC_TXENA) ? AT91_SSC_TXEN : 0));
-+
-+ return 0;
-+}
-+
-+#else
-+#define at91rm9200_i2s_suspend NULL
-+#define at91rm9200_i2s_resume NULL
-+#endif
-+
-+static unsigned int at91rm9200_i2s_config_sysclk(
-+ struct snd_soc_cpu_dai *iface, struct snd_soc_clock_info *info,
-+ unsigned int clk)
-+{
-+ /* Currently, there is only support for USB (12Mhz) mode */
-+ if (clk != 12000000)
-+ return 0;
-+ return 12000000;
-+}
-+
-+static int at91rm9200_i2s_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ int id = rtd->cpu_dai->id;
-+ struct at91rm9200_ssc_info *ssc_p = &ssc_info[id];
-+ at91rm9200_pcm_dma_params_t *dma_params;
-+ unsigned int pcmfmt, rate;
-+ int dir, channels, bits;
-+ struct clk *mck_clk;
-+ unsigned long bclk;
-+ u32 div, period, tfmr, rfmr, tcmr, rcmr;
-+ int ret;
-+
-+ /*
-+ * Currently, there is only one set of dma params for
-+ * each direction. If more are added, this code will
-+ * have to be changed to select the proper set.
-+ */
-+ dir = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? 0 : 1;
-+
-+ dma_params = &ssc_dma_params[id][dir];
-+ dma_params->substream = substream;
-+
-+ ssc_p->dma_params[dir] = dma_params;
-+ rtd->cpu_dai->dma_data = dma_params;
-+
-+ rate = params_rate(params);
-+ channels = params_channels(params);
-+
-+ pcmfmt = rtd->cpu_dai->dai_runtime.pcmfmt;
-+ switch (pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ /* likely this is all we'll ever support, but ... */
-+ bits = 16;
-+ dma_params->pdc_xfer_size = 2;
-+ break;
-+ default:
-+ printk(KERN_WARNING "at91rm9200-i2s: unsupported format %x\n",
-+ pcmfmt);
-+ return -EINVAL;
-+ }
-+
-+ /* Don't allow both SSC substreams to initialize at the same time. */
-+ down(ssc_p->mutex);
-+
-+ /*
-+ * If this SSC is alreadly initialized, then this substream must use
-+ * the same format and rate.
-+ */
-+ if (ssc_p->initialized) {
-+ if (pcmfmt != ssc_p->pcmfmt || rate != ssc_p->rate) {
-+ printk(KERN_WARNING "at91rm9200-i2s: "
-+ "incompatible substream in other direction\n");
-+ up(ssc_p->mutex);
-+ return -EINVAL;
-+ }
-+ } else {
-+ /* Enable PMC peripheral clock for this SSC */
-+ DBG("Starting pid %d clock\n", ssc_p->pid);
-+ at91_sys_write(AT91_PMC_PCER, 1<<ssc_p->pid);
-+
-+ /* Reset the SSC */
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_CR, AT91_SSC_SWRST);
-+
-+ at91_ssc_write(ssc_p->ssc_base + AT91_PDC_RPR, 0);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_PDC_RCR, 0);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_PDC_RNPR, 0);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_PDC_RNCR, 0);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_PDC_TPR, 0);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_PDC_TCR, 0);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_PDC_TNPR, 0);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_PDC_TNCR, 0);
-+
-+ mck_clk = clk_get(NULL, "mck");
-+
-+ div = rtd->cpu_dai->dai_runtime.priv >> 16;
-+ period = rtd->cpu_dai->dai_runtime.priv & 0xffff;
-+ bclk = 60000000 / (2 * div);
-+
-+ DBG("mck %ld fsbd %d bfs %d bfs_real %d bclk %ld div %d period %d\n",
-+ clk_get_rate(mck_clk),
-+ SND_SOC_FSBD(6),
-+ rtd->cpu_dai->dai_runtime.bfs,
-+ SND_SOC_FSBD_REAL(rtd->cpu_dai->dai_runtime.bfs),
-+ bclk,
-+ div,
-+ period);
-+
-+ clk_put(mck_clk);
-+
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_CMR, div);
-+
-+ /*
-+ * Setup the TFMR and RFMR for the proper data format.
-+ */
-+ tfmr =
-+ (( AT91_SSC_FSEDGE_POSITIVE ) & AT91_SSC_FSEDGE)
-+ | (( 0 << 23) & AT91_SSC_FSDEN)
-+ | (( AT91_SSC_FSOS_NEGATIVE ) & AT91_SSC_FSOS)
-+ | (((bits - 1) << 16) & AT91_SSC_FSLEN)
-+ | (((channels - 1) << 8) & AT91_SSC_DATNB)
-+ | (( 1 << 7) & AT91_SSC_MSBF)
-+ | (( 0 << 5) & AT91_SSC_DATDEF)
-+ | (((bits - 1) << 0) & AT91_SSC_DATALEN);
-+ DBG("SSC_TFMR=0x%08x\n", tfmr);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_TFMR, tfmr);
-+
-+ rfmr =
-+ (( AT91_SSC_FSEDGE_POSITIVE ) & AT91_SSC_FSEDGE)
-+ | (( AT91_SSC_FSOS_NONE ) & AT91_SSC_FSOS)
-+ | (( 0 << 16) & AT91_SSC_FSLEN)
-+ | (((channels - 1) << 8) & AT91_SSC_DATNB)
-+ | (( 1 << 7) & AT91_SSC_MSBF)
-+ | (( 0 << 5) & AT91_SSC_LOOP)
-+ | (((bits - 1) << 0) & AT91_SSC_DATALEN);
-+
-+ DBG("SSC_RFMR=0x%08x\n", rfmr);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_RFMR, rfmr);
-+
-+ /*
-+ * Setup the TCMR and RCMR to generate the proper BCLK
-+ * and LRC signals.
-+ */
-+ tcmr =
-+ (( period << 24) & AT91_SSC_PERIOD)
-+ | (( 1 << 16) & AT91_SSC_STTDLY)
-+ | (( AT91_SSC_START_FALLING_RF ) & AT91_SSC_START)
-+ | (( AT91_SSC_CKI_FALLING ) & AT91_SSC_CKI)
-+ | (( AT91_SSC_CKO_CONTINUOUS ) & AT91_SSC_CKO)
-+ | (( AT91_SSC_CKS_DIV ) & AT91_SSC_CKS);
-+
-+ DBG("SSC_TCMR=0x%08x\n", tcmr);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_TCMR, tcmr);
-+
-+ rcmr =
-+ (( 0 << 24) & AT91_SSC_PERIOD)
-+ | (( 1 << 16) & AT91_SSC_STTDLY)
-+ | (( AT91_SSC_START_TX_RX ) & AT91_SSC_START)
-+ | (( AT91_SSC_CK_RISING ) & AT91_SSC_CKI)
-+ | (( AT91_SSC_CKO_NONE ) & AT91_SSC_CKO)
-+ | (( AT91_SSC_CKS_CLOCK ) & AT91_SSC_CKS);
-+
-+ DBG("SSC_RCMR=0x%08x\n", rcmr);
-+ at91_ssc_write(ssc_p->ssc_base + AT91_SSC_RCMR, rcmr);
-+
-+ if ((ret = request_irq(ssc_p->pid, at91rm9200_i2s_interrupt,
-+ 0, ssc_p->name, ssc_p)) < 0) {
-+ printk(KERN_WARNING "at91rm9200-i2s: request_irq failure\n");
-+ return ret;
-+ }
-+
-+ /*
-+ * Save the current substream parameters in order to check
-+ * that the substream in the opposite direction uses the
-+ * same parameters.
-+ */
-+ ssc_p->pcmfmt = pcmfmt;
-+ ssc_p->rate = rate;
-+ ssc_p->initialized = 1;
-+
-+ DBG("hw_params: SSC initialized\n");
-+ }
-+
-+ up(ssc_p->mutex);
-+
-+ return 0;
-+}
-+
-+
-+static int at91rm9200_i2s_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ at91rm9200_pcm_dma_params_t *dma_params = rtd->cpu_dai->dma_data;
-+
-+ at91_ssc_write(dma_params->ssc->cr, dma_params->mask->ssc_enable);
-+
-+ DBG("%s enabled SSC_SR=0x%08lx\n",
-+ substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? "transmit" : "receive",
-+ at91_ssc_read(ssc_info[rtd->cpu_dai->id].ssc_base + AT91_SSC_SR));
-+ return 0;
-+}
-+
-+
-+struct snd_soc_cpu_dai at91rm9200_i2s_dai[] = {
-+ { .name = "at91rm9200-ssc0/i2s",
-+ .id = 0,
-+ .type = SND_SOC_DAI_I2S,
-+ .suspend = at91rm9200_i2s_suspend,
-+ .resume = at91rm9200_i2s_resume,
-+ .config_sysclk = at91rm9200_i2s_config_sysclk,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = at91rm9200_i2s_startup,
-+ .shutdown = at91rm9200_i2s_shutdown,
-+ .prepare = at91rm9200_i2s_prepare,
-+ .hw_params = at91rm9200_i2s_hw_params,},
-+ .caps = {
-+ .mode = &at91rm9200_i2s[0],
-+ .num_modes = ARRAY_SIZE(at91rm9200_i2s),},
-+ },
-+ { .name = "at91rm9200-ssc1/i2s",
-+ .id = 1,
-+ .type = SND_SOC_DAI_I2S,
-+ .suspend = at91rm9200_i2s_suspend,
-+ .resume = at91rm9200_i2s_resume,
-+ .config_sysclk = at91rm9200_i2s_config_sysclk,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = at91rm9200_i2s_startup,
-+ .shutdown = at91rm9200_i2s_shutdown,
-+ .prepare = at91rm9200_i2s_prepare,
-+ .hw_params = at91rm9200_i2s_hw_params,},
-+ .caps = {
-+ .mode = &at91rm9200_i2s[0],
-+ .num_modes = ARRAY_SIZE(at91rm9200_i2s),},
-+ },
-+ { .name = "at91rm9200-ssc2/i2s",
-+ .id = 2,
-+ .type = SND_SOC_DAI_I2S,
-+ .suspend = at91rm9200_i2s_suspend,
-+ .resume = at91rm9200_i2s_resume,
-+ .config_sysclk = at91rm9200_i2s_config_sysclk,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = at91rm9200_i2s_startup,
-+ .shutdown = at91rm9200_i2s_shutdown,
-+ .prepare = at91rm9200_i2s_prepare,
-+ .hw_params = at91rm9200_i2s_hw_params,},
-+ .caps = {
-+ .mode = &at91rm9200_i2s[0],
-+ .num_modes = ARRAY_SIZE(at91rm9200_i2s),},
-+ },
-+};
-+
-+EXPORT_SYMBOL_GPL(at91rm9200_i2s_dai);
-+
-+/* Module information */
-+MODULE_AUTHOR("Frank Mandarino, fmandarino@endrelia.com, www.endrelia.com");
-+MODULE_DESCRIPTION("AT91RM9200 I2S ASoC Interface");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/at91/at91rm9200-pcm.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/at91/at91rm9200-pcm.c
-@@ -0,0 +1,428 @@
-+/*
-+ * at91rm9200-pcm.c -- ALSA PCM interface for the Atmel AT91RM9200 chip.
-+ *
-+ * Author: Frank Mandarino <fmandarino@endrelia.com>
-+ * Endrelia Technologies Inc.
-+ * Created: Mar 3, 2006
-+ *
-+ * Based on pxa2xx-pcm.c by:
-+ *
-+ * Author: Nicolas Pitre
-+ * Created: Nov 30, 2004
-+ * Copyright: (C) 2004 MontaVista Software, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/slab.h>
-+#include <linux/dma-mapping.h>
-+
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+
-+#include <asm/arch/at91rm9200.h>
-+#include <asm/arch/at91rm9200_ssc.h>
-+#include <asm/arch/at91rm9200_pdc.h>
-+#include <asm/arch/hardware.h>
-+
-+#include "at91rm9200-pcm.h"
-+
-+#if 0
-+#define DBG(x...) printk(KERN_INFO "at91rm9200-pcm: " x)
-+#else
-+#define DBG(x...)
-+#endif
-+
-+static const snd_pcm_hardware_t at91rm9200_pcm_hardware = {
-+ .info = SNDRV_PCM_INFO_MMAP |
-+ SNDRV_PCM_INFO_MMAP_VALID |
-+ SNDRV_PCM_INFO_INTERLEAVED |
-+ SNDRV_PCM_INFO_PAUSE,
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ .period_bytes_min = 32,
-+ .period_bytes_max = 8192,
-+ .periods_min = 2,
-+ .periods_max = 1024,
-+ .buffer_bytes_max = 32 * 1024,
-+};
-+
-+struct at91rm9200_runtime_data {
-+ at91rm9200_pcm_dma_params_t *params;
-+ dma_addr_t dma_buffer; /* physical address of dma buffer */
-+ dma_addr_t dma_buffer_end; /* first address beyond DMA buffer */
-+ size_t period_size;
-+ dma_addr_t period_ptr; /* physical address of next period */
-+ u32 pdc_xpr_save; /* PDC register save */
-+ u32 pdc_xcr_save;
-+ u32 pdc_xnpr_save;
-+ u32 pdc_xncr_save;
-+};
-+
-+static void at91rm9200_pcm_dma_irq(u32 ssc_sr,
-+ struct snd_pcm_substream *substream)
-+{
-+ struct at91rm9200_runtime_data *prtd = substream->runtime->private_data;
-+ at91rm9200_pcm_dma_params_t *params = prtd->params;
-+ static int count = 0;
-+
-+ count++;
-+
-+ if (ssc_sr & params->mask->ssc_endbuf) {
-+
-+ printk(KERN_WARNING
-+ "at91rm9200-pcm: buffer %s on %s (SSC_SR=%#x, count=%d)\n",
-+ substream->stream == SNDRV_PCM_STREAM_PLAYBACK
-+ ? "underrun" : "overrun",
-+ params->name, ssc_sr, count);
-+
-+ /* re-start the PDC */
-+ at91_ssc_write(params->pdc->ptcr, params->mask->pdc_disable);
-+
-+ prtd->period_ptr += prtd->period_size;
-+ if (prtd->period_ptr >= prtd->dma_buffer_end) {
-+ prtd->period_ptr = prtd->dma_buffer;
-+ }
-+
-+ at91_ssc_write(params->pdc->xpr, prtd->period_ptr);
-+ at91_ssc_write(params->pdc->xcr,
-+ prtd->period_size / params->pdc_xfer_size);
-+
-+ at91_ssc_write(params->pdc->ptcr, params->mask->pdc_enable);
-+ }
-+
-+ if (ssc_sr & params->mask->ssc_endx) {
-+
-+ /* Load the PDC next pointer and counter registers */
-+ prtd->period_ptr += prtd->period_size;
-+ if (prtd->period_ptr >= prtd->dma_buffer_end) {
-+ prtd->period_ptr = prtd->dma_buffer;
-+ }
-+ at91_ssc_write(params->pdc->xnpr, prtd->period_ptr);
-+ at91_ssc_write(params->pdc->xncr,
-+ prtd->period_size / params->pdc_xfer_size);
-+ }
-+
-+ snd_pcm_period_elapsed(substream);
-+}
-+
-+static int at91rm9200_pcm_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ snd_pcm_runtime_t *runtime = substream->runtime;
-+ struct at91rm9200_runtime_data *prtd = runtime->private_data;
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ /* this may get called several times by oss emulation
-+ * with different params */
-+
-+ snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);
-+ runtime->dma_bytes = params_buffer_bytes(params);
-+
-+ prtd->params = rtd->cpu_dai->dma_data;
-+ prtd->params->dma_intr_handler = at91rm9200_pcm_dma_irq;
-+
-+ prtd->dma_buffer = runtime->dma_addr;
-+ prtd->dma_buffer_end = runtime->dma_addr + runtime->dma_bytes;
-+ prtd->period_size = params_period_bytes(params);
-+
-+ DBG("hw_params: DMA for %s initialized (dma_bytes=%d, period_size=%d)\n",
-+ prtd->params->name, runtime->dma_bytes, prtd->period_size);
-+ return 0;
-+}
-+
-+static int at91rm9200_pcm_hw_free(struct snd_pcm_substream *substream)
-+{
-+ struct at91rm9200_runtime_data *prtd = substream->runtime->private_data;
-+ at91rm9200_pcm_dma_params_t *params = prtd->params;
-+
-+ if (params != NULL) {
-+ at91_ssc_write(params->pdc->ptcr, params->mask->pdc_disable);
-+ prtd->params->dma_intr_handler = NULL;
-+ }
-+
-+ return 0;
-+}
-+
-+static int at91rm9200_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct at91rm9200_runtime_data *prtd = substream->runtime->private_data;
-+ at91rm9200_pcm_dma_params_t *params = prtd->params;
-+
-+ at91_ssc_write(params->ssc->idr,
-+ params->mask->ssc_endx | params->mask->ssc_endbuf);
-+
-+ at91_ssc_write(params->pdc->ptcr, params->mask->pdc_disable);
-+ return 0;
-+}
-+
-+static int at91rm9200_pcm_trigger(struct snd_pcm_substream *substream,
-+ int cmd)
-+{
-+ struct at91rm9200_runtime_data *prtd = substream->runtime->private_data;
-+ at91rm9200_pcm_dma_params_t *params = prtd->params;
-+ int ret = 0;
-+
-+ switch (cmd) {
-+ case SNDRV_PCM_TRIGGER_START:
-+ prtd->period_ptr = prtd->dma_buffer;
-+
-+ at91_ssc_write(params->pdc->xpr, prtd->period_ptr);
-+ at91_ssc_write(params->pdc->xcr,
-+ prtd->period_size / params->pdc_xfer_size);
-+
-+ prtd->period_ptr += prtd->period_size;
-+ at91_ssc_write(params->pdc->xnpr, prtd->period_ptr);
-+ at91_ssc_write(params->pdc->xncr,
-+ prtd->period_size / params->pdc_xfer_size);
-+
-+ DBG("trigger: period_ptr=%lx, xpr=%lx, xcr=%ld, xnpr=%lx, xncr=%ld\n",
-+ (unsigned long) prtd->period_ptr,
-+ at91_ssc_read(params->pdc->xpr),
-+ at91_ssc_read(params->pdc->xcr),
-+ at91_ssc_read(params->pdc->xnpr),
-+ at91_ssc_read(params->pdc->xncr));
-+
-+ at91_ssc_write(params->ssc->ier,
-+ params->mask->ssc_endx | params->mask->ssc_endbuf);
-+
-+ at91_ssc_write(params->pdc->ptcr, params->mask->pdc_enable);
-+
-+ DBG("sr=%lx imr=%lx\n", at91_ssc_read(params->ssc->ier - 4),
-+ at91_ssc_read(params->ssc->ier + 8));
-+ break;
-+
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ at91_ssc_write(params->pdc->ptcr, params->mask->pdc_disable);
-+ break;
-+
-+ case SNDRV_PCM_TRIGGER_RESUME:
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ at91_ssc_write(params->pdc->ptcr, params->mask->pdc_enable);
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ }
-+
-+ return ret;
-+}
-+
-+static snd_pcm_uframes_t at91rm9200_pcm_pointer(
-+ struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct at91rm9200_runtime_data *prtd = runtime->private_data;
-+ at91rm9200_pcm_dma_params_t *params = prtd->params;
-+ dma_addr_t ptr;
-+ snd_pcm_uframes_t x;
-+
-+ ptr = (dma_addr_t) at91_ssc_read(params->pdc->xpr);
-+ x = bytes_to_frames(runtime, ptr - prtd->dma_buffer);
-+
-+ if (x == runtime->buffer_size)
-+ x = 0;
-+ return x;
-+}
-+
-+static int at91rm9200_pcm_open(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct at91rm9200_runtime_data *prtd;
-+ int ret = 0;
-+
-+ snd_soc_set_runtime_hwparams(substream, &at91rm9200_pcm_hardware);
-+
-+ /* ensure that buffer size is a multiple of period size */
-+ ret = snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
-+ if (ret < 0)
-+ goto out;
-+
-+ prtd = kzalloc(sizeof(struct at91rm9200_runtime_data), GFP_KERNEL);
-+ if (prtd == NULL) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+ runtime->private_data = prtd;
-+
-+ out:
-+ return ret;
-+}
-+
-+static int at91rm9200_pcm_close(struct snd_pcm_substream *substream)
-+{
-+ struct at91rm9200_runtime_data *prtd = substream->runtime->private_data;
-+
-+ kfree(prtd);
-+ return 0;
-+}
-+
-+static int at91rm9200_pcm_mmap(struct snd_pcm_substream *substream,
-+ struct vm_area_struct *vma)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+
-+ return dma_mmap_writecombine(substream->pcm->card->dev, vma,
-+ runtime->dma_area,
-+ runtime->dma_addr,
-+ runtime->dma_bytes);
-+}
-+
-+struct snd_pcm_ops at91rm9200_pcm_ops = {
-+ .open = at91rm9200_pcm_open,
-+ .close = at91rm9200_pcm_close,
-+ .ioctl = snd_pcm_lib_ioctl,
-+ .hw_params = at91rm9200_pcm_hw_params,
-+ .hw_free = at91rm9200_pcm_hw_free,
-+ .prepare = at91rm9200_pcm_prepare,
-+ .trigger = at91rm9200_pcm_trigger,
-+ .pointer = at91rm9200_pcm_pointer,
-+ .mmap = at91rm9200_pcm_mmap,
-+};
-+
-+static int at91rm9200_pcm_preallocate_dma_buffer(struct snd_pcm *pcm,
-+ int stream)
-+{
-+ struct snd_pcm_substream *substream = pcm->streams[stream].substream;
-+ struct snd_dma_buffer *buf = &substream->dma_buffer;
-+ size_t size = at91rm9200_pcm_hardware.buffer_bytes_max;
-+
-+ buf->dev.type = SNDRV_DMA_TYPE_DEV;
-+ buf->dev.dev = pcm->card->dev;
-+ buf->private_data = NULL;
-+ buf->area = dma_alloc_writecombine(pcm->card->dev, size,
-+ &buf->addr, GFP_KERNEL);
-+
-+ DBG("preallocate_dma_buffer: area=%p, addr=%p, size=%d\n",
-+ (void *) buf->area,
-+ (void *) buf->addr,
-+ size);
-+
-+ if (!buf->area)
-+ return -ENOMEM;
-+
-+ buf->bytes = size;
-+ return 0;
-+}
-+
-+static u64 at91rm9200_pcm_dmamask = 0xffffffff;
-+
-+static int at91rm9200_pcm_new(struct snd_card *card,
-+ struct snd_soc_codec_dai *dai, struct snd_pcm *pcm)
-+{
-+ int ret = 0;
-+
-+ if (!card->dev->dma_mask)
-+ card->dev->dma_mask = &at91rm9200_pcm_dmamask;
-+ if (!card->dev->coherent_dma_mask)
-+ card->dev->coherent_dma_mask = 0xffffffff;
-+
-+ if (dai->playback.channels_min) {
-+ ret = at91rm9200_pcm_preallocate_dma_buffer(pcm,
-+ SNDRV_PCM_STREAM_PLAYBACK);
-+ if (ret)
-+ goto out;
-+ }
-+
-+ if (dai->capture.channels_min) {
-+ ret = at91rm9200_pcm_preallocate_dma_buffer(pcm,
-+ SNDRV_PCM_STREAM_CAPTURE);
-+ if (ret)
-+ goto out;
-+ }
-+ out:
-+ return ret;
-+}
-+
-+static void at91rm9200_pcm_free_dma_buffers(struct snd_pcm *pcm)
-+{
-+ struct snd_pcm_substream *substream;
-+ struct snd_dma_buffer *buf;
-+ int stream;
-+
-+ for (stream = 0; stream < 2; stream++) {
-+ substream = pcm->streams[stream].substream;
-+ if (!substream)
-+ continue;
-+
-+ buf = &substream->dma_buffer;
-+ if (!buf->area)
-+ continue;
-+
-+ dma_free_writecombine(pcm->card->dev, buf->bytes,
-+ buf->area, buf->addr);
-+ buf->area = NULL;
-+ }
-+}
-+
-+static int at91rm9200_pcm_suspend(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ struct snd_pcm_runtime *runtime = dai->runtime;
-+ struct at91rm9200_runtime_data *prtd;
-+ at91rm9200_pcm_dma_params_t *params;
-+
-+ if (!runtime)
-+ return 0;
-+
-+ prtd = runtime->private_data;
-+ params = prtd->params;
-+
-+ /* disable the PDC and save the PDC registers */
-+
-+ at91_ssc_write(params->pdc->ptcr, params->mask->pdc_disable);
-+
-+ prtd->pdc_xpr_save = at91_ssc_read(params->pdc->xpr);
-+ prtd->pdc_xcr_save = at91_ssc_read(params->pdc->xcr);
-+ prtd->pdc_xnpr_save = at91_ssc_read(params->pdc->xnpr);
-+ prtd->pdc_xncr_save = at91_ssc_read(params->pdc->xncr);
-+
-+ return 0;
-+}
-+
-+static int at91rm9200_pcm_resume(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ struct snd_pcm_runtime *runtime = dai->runtime;
-+ struct at91rm9200_runtime_data *prtd;
-+ at91rm9200_pcm_dma_params_t *params;
-+
-+ if (!runtime)
-+ return 0;
-+
-+ prtd = runtime->private_data;
-+ params = prtd->params;
-+
-+ /* restore the PDC registers and enable the PDC */
-+ at91_ssc_write(params->pdc->xpr, prtd->pdc_xpr_save);
-+ at91_ssc_write(params->pdc->xcr, prtd->pdc_xcr_save);
-+ at91_ssc_write(params->pdc->xnpr, prtd->pdc_xnpr_save);
-+ at91_ssc_write(params->pdc->xncr, prtd->pdc_xncr_save);
-+
-+ at91_ssc_write(params->pdc->ptcr, params->mask->pdc_enable);
-+ return 0;
-+}
-+
-+struct snd_soc_platform at91rm9200_soc_platform = {
-+ .name = "at91rm9200-audio",
-+ .pcm_ops = &at91rm9200_pcm_ops,
-+ .pcm_new = at91rm9200_pcm_new,
-+ .pcm_free = at91rm9200_pcm_free_dma_buffers,
-+ .suspend = at91rm9200_pcm_suspend,
-+ .resume = at91rm9200_pcm_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(at91rm9200_soc_platform);
-+
-+MODULE_AUTHOR("Frank Mandarino <fmandarino@endrelia.com>");
-+MODULE_DESCRIPTION("Atmel AT91RM9200 PCM module");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/at91/at91rm9200-pcm.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/at91/at91rm9200-pcm.h
-@@ -0,0 +1,75 @@
-+/*
-+ * at91rm9200-pcm.h - ALSA PCM interface for the Atmel AT91RM9200 chip
-+ *
-+ * Author: Frank Mandarino <fmandarino@endrelia.com>
-+ * Endrelia Technologies Inc.
-+ * Created: Mar 3, 2006
-+ *
-+ * Based on pxa2xx-pcm.h by:
-+ *
-+ * Author: Nicolas Pitre
-+ * Created: Nov 30, 2004
-+ * Copyright: MontaVista Software, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+/*
-+ * Registers and status bits that are required by the PCM driver.
-+ */
-+struct at91rm9200_ssc_regs {
-+ void __iomem *cr; /* SSC control */
-+ void __iomem *ier; /* SSC interrupt enable */
-+ void __iomem *idr; /* SSC interrupt disable */
-+};
-+
-+struct at91rm9200_pdc_regs {
-+ void __iomem *xpr; /* PDC recv/trans pointer */
-+ void __iomem *xcr; /* PDC recv/trans counter */
-+ void __iomem *xnpr; /* PDC next recv/trans pointer */
-+ void __iomem *xncr; /* PDC next recv/trans counter */
-+ void __iomem *ptcr; /* PDC transfer control */
-+};
-+
-+struct at91rm9200_ssc_mask {
-+ u32 ssc_enable; /* SSC recv/trans enable */
-+ u32 ssc_disable; /* SSC recv/trans disable */
-+ u32 ssc_endx; /* SSC ENDTX or ENDRX */
-+ u32 ssc_endbuf; /* SSC TXBUFE or RXBUFF */
-+ u32 pdc_enable; /* PDC recv/trans enable */
-+ u32 pdc_disable; /* PDC recv/trans disable */
-+};
-+
-+
-+/*
-+ * This structure, shared between the PCM driver and the interface,
-+ * contains all information required by the PCM driver to perform the
-+ * PDC DMA operation. All fields except dma_intr_handler() are initialized
-+ * by the interface. The dms_intr_handler() pointer is set by the PCM
-+ * driver and called by the interface SSC interrupt handler if it is
-+ * non-NULL.
-+ */
-+typedef struct {
-+ char *name; /* stream identifier */
-+ int pdc_xfer_size; /* PDC counter increment in bytes */
-+ struct at91rm9200_ssc_regs *ssc; /* SSC register addresses */
-+ struct at91rm9200_pdc_regs *pdc; /* PDC receive/transmit registers */
-+ struct at91rm9200_ssc_mask *mask;/* SSC & PDC status bits */
-+ snd_pcm_substream_t *substream;
-+ void (*dma_intr_handler)(u32, snd_pcm_substream_t *);
-+} at91rm9200_pcm_dma_params_t;
-+
-+extern struct snd_soc_cpu_dai at91rm9200_i2s_dai[3];
-+extern struct snd_soc_platform at91rm9200_soc_platform;
-+
-+
-+/*
-+ * SSC I/O helpers.
-+ * E.g., at91_ssc_write(AT91_SSC(1) + AT91_SSC_CR, AT91_SSC_RXEN);
-+ */
-+#define AT91_SSC(x) (((x)==0) ? AT91_VA_BASE_SSC0 :\
-+ ((x)==1) ? AT91_VA_BASE_SSC1 : ((x)==2) ? AT91_VA_BASE_SSC2 : NULL)
-+#define at91_ssc_read(a) ((unsigned long) __raw_readl(a))
-+#define at91_ssc_write(a,v) __raw_writel((v),(a))
-Index: linux-2.6-pxa-new/sound/soc/imx/imx-ssi.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/imx/imx-ssi.c
-@@ -0,0 +1,452 @@
-+/*
-+ * imx-ssi.c -- SSI driver for Freescale IMX
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * Based on mxc-alsa-mc13783 (C) 2006 Freescale.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 29th Aug 2006 Initial version.
-+ *
-+ */
-+
-+#define IMX_DSP_DAIFMT \
-+ ( SND_SOC_DAIFMT_DSP__A |SND_SOC_DAIFMT_DSP_B | \
-+ SND_SOC_DAIFMT_CBS_CFS |SND_SOC_DAIFMT_CBM_CFS | \
-+ SND_SOC_DAIFMT_CBS_CFM |SND_SOC_DAIFMT_NB_NF |\
-+ SND_SOC_DAIFMT_NB_IF)
-+
-+#define IMX_DSP_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define IMX_DSP_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | \
-+ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | \
-+ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | \
-+ SNDRV_PCM_RATE_96000)
-+
-+#define IMX_DSP_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_LE)
-+
-+static struct snd_soc_dai_mode imx_dsp_pcm_modes[] = {
-+
-+ /* frame master and clock slave mode */
-+ {IMX_DSP_DAIFMT | SND_SOC_DAIFMT_CBM_CFS,
-+ SND_SOC_DAITDM_LRDW(0,0), IMX_DSP_BITS, IMX_DSP_RATES,
-+ IMX_DSP_DIR, 0, SND_SOC_FS_ALL,
-+ SND_SOC_FSB(32) | SND_SOC_FSB(32) | SND_SOC_FSB(16)},
-+
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi1_pcm_stereo_out = {
-+ .name = "SSI1 PCM Stereo out",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = emi_2_per,
-+ .watermark_level = SDMA_TXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI1_STX0,
-+ .event_id = DMA_REQ_SSI1_TX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi1_pcm_stereo_in = {
-+ .name = "SSI1 PCM Stereo in",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = per_2_emi,
-+ .watermark_level = SDMA_RXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI1_SRX0,
-+ .event_id = DMA_REQ_SSI1_RX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi2_pcm_stereo_out = {
-+ .name = "SSI2 PCM Stereo out",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = per_2_emi,
-+ .watermark_level = SDMA_TXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI2_STX0,
-+ .event_id = DMA_REQ_SSI2_TX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi2_pcm_stereo_in = {
-+ .name = "SSI2 PCM Stereo in",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = per_2_emi,
-+ .watermark_level = SDMA_RXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI2_SRX0,
-+ .event_id = DMA_REQ_SSI2_RX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+static int imx_dsp_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if (!rtd->cpu_dai->active) {
-+
-+ }
-+
-+ return 0;
-+}
-+
-+static int imx_ssi1_hw_tx_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 bfs, div;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->cpu_dai->dai_runtime.bfs);
-+
-+ SSI1_STCR = 0;
-+ SSI1_STCCR = 0;
-+
-+ /* DAI mode */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_DSP_B:
-+ SSI1_STCR |= SSI_STCR_TEFS; // data 1 bit after sync
-+ case SND_SOC_DAIFMT_DSP_A:
-+ SSI1_STCR |= SSI_STCR_TFSL; // frame is 1 bclk long
-+ break;
-+ }
-+
-+ /* DAI clock inversion */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ SSI1_STCR |= SSI_STCR_TFSI | SSI_STCR_TSCKP;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ SSI1_STCR |= SSI_STCR_TSCKP;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ SSI1_STCR |= SSI_STCR_TFSI;
-+ break;
-+ }
-+
-+ /* DAI data (word) size */
-+ switch(rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ SSI1_STCCR |= SSI_STCCR_WL(16);
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ SSI1_STCCR |= SSI_STCCR_WL(20);
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ SSI1_STCCR |= SSI_STCCR_WL(24);
-+ break;
-+ }
-+
-+ /* DAI clock master masks */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK){
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ SSI1_STCR |= SSI_STCR_TFDIR | SSI_STCR_TXDIR;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFM:
-+ SSI1_STCR |= SSI_STCR_TFDIR;
-+ break;
-+ case SND_SOC_DAIFMT_CBM_CFS:
-+ SSI1_STCR |= SSI_STCR_TXDIR;
-+ break;
-+ }
-+
-+ /* DAI BCLK ratio to SYSCLK / MCLK */
-+ /* prescaler modulus - todo */
-+ switch (bfs) {
-+ case 2:
-+ break;
-+ case 4:
-+ break;
-+ case 8:
-+ break;
-+ case 16:
-+ break;
-+ }
-+
-+ /* TDM - todo, only fifo 0 atm */
-+ SSI1_STCR |= SSI_STCR_TFEN0;
-+ SSI1_STCCR |= SSI_STCCR_DC(params_channels(params));
-+
-+ return 0;
-+}
-+
-+static int imx_ssi1_hw_rx_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 bfs, div;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->cpu_dai->dai_runtime.bfs);
-+
-+ SSI1_SRCR = 0;
-+ SSI1_SRCCR = 0;
-+
-+ /* DAI mode */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_DSP_B:
-+ SSI1_SRCR |= SSI_SRCR_REFS; // data 1 bit after sync
-+ case SND_SOC_DAIFMT_DSP_A:
-+ SSI1_SRCR |= SSI_SRCR_RFSL; // frame is 1 bclk long
-+ break;
-+ }
-+
-+ /* DAI clock inversion */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ SSI1_SRCR |= SSI_SRCR_TFSI | SSI_SRCR_TSCKP;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ SSI1_SRCR |= SSI_SRCR_RSCKP;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ SSI1_SRCR |= SSI_SRCR_RFSI;
-+ break;
-+ }
-+
-+ /* DAI data (word) size */
-+ switch(rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ SSI1_SRCCR |= SSI_SRCCR_WL(16);
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ SSI1_SRCCR |= SSI_SRCCR_WL(20);
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ SSI1_SRCCR |= SSI_SRCCR_WL(24);
-+ break;
-+ }
-+
-+ /* DAI clock master masks */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK){
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ SSI1_SRCR |= SSI_SRCR_RFDIR | SSI_SRCR_RXDIR;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFM:
-+ SSI1_SRCR |= SSI_SRCR_RFDIR;
-+ break;
-+ case SND_SOC_DAIFMT_CBM_CFS:
-+ SSI1_SRCR |= SSI_SRCR_RXDIR;
-+ break;
-+ }
-+
-+ /* DAI BCLK ratio to SYSCLK / MCLK */
-+ /* prescaler modulus - todo */
-+ switch (bfs) {
-+ case 2:
-+ break;
-+ case 4:
-+ break;
-+ case 8:
-+ break;
-+ case 16:
-+ break;
-+ }
-+
-+ /* TDM - todo, only fifo 0 atm */
-+ SSI1_SRCR |= SSI_SRCR_RFEN0;
-+ SSI1_SRCCR |= SSI_SRCCR_DC(params_channels(params));
-+
-+ return 0;
-+}
-+
-+static int imx_ssi_dsp_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ /* clear register if not enabled */
-+ if(!(SSI1_SCR & SSI_SCR_SSIEN))
-+ SSI1_SCR = 0;
-+
-+ /* async */
-+ if (rtd->cpu_dai->flags & SND_SOC_DAI_ASYNC)
-+ SSI1_SCR |= SSI_SCR_SYN;
-+
-+ /* DAI mode */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ SSI1_SCR |= SSI_SCR_NET;
-+ break;
-+ }
-+
-+ /* TDM - to complete */
-+
-+ /* Tx/Rx config */
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ return imx_ssi1_dsp_hw_tx_params(substream, params);
-+ } else {
-+ return imx_ssi1_dsp_hw_rx_params(substream, params);
-+ }
-+}
-+
-+
-+
-+static int imx_ssi_dsp_trigger(struct snd_pcm_substream *substream, int cmd)
-+{
-+ int ret = 0;
-+
-+ switch (cmd) {
-+ case SNDRV_PCM_TRIGGER_START:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ SSI1_SCR |= SSI_SCR_TE;
-+ SSI1_SIER |= SSI_SIER_TDMAE;
-+ } else {
-+ SSI1_SCR |= SSI_SCR_RE;
-+ SSI1_SIER |= SSI_SIER_RDMAE;
-+ }
-+ SSI1_SCR |= SSI_SCR_SSIEN;
-+
-+ break;
-+ case SNDRV_PCM_TRIGGER_RESUME:
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ SSI1_SCR |= SSI_SCR_TE;
-+ else
-+ SSI1_SCR |= SSI_SCR_RE;
-+ break
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ SSI1_SCR &= ~SSI_SCR_TE;
-+ else
-+ SSI1_SCR &= ~SSI_SCR_RE;
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ }
-+
-+ return ret;
-+}
-+
-+static void imx_ssi_dsp_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ /* shutdown SSI */
-+ if (!rtd->cpu_dai->active) {
-+ if(rtd->cpu_dai->id == 0)
-+ SSI1_SCR &= ~SSI_SCR_SSIEN;
-+ else
-+ SSI2_SCR &= ~SSI_SCR_SSIEN;
-+ }
-+}
-+
-+#ifdef CONFIG_PM
-+static int imx_ssi_dsp_suspend(struct platform_device *dev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ if(!dai->active)
-+ return 0;
-+
-+ if(rtd->cpu_dai->id == 0)
-+ SSI1_SCR &= ~SSI_SCR_SSIEN;
-+ else
-+ SSI2_SCR &= ~SSI_SCR_SSIEN;
-+
-+ return 0;
-+}
-+
-+static int imx_ssi_dsp_resume(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ if(!dai->active)
-+ return 0;
-+
-+ if(rtd->cpu_dai->id == 0)
-+ SSI1_SCR |= SSI_SCR_SSIEN;
-+ else
-+ SSI2_SCR |= SSI_SCR_SSIEN;
-+
-+ return 0;
-+}
-+
-+#else
-+#define imx_ssi_dsp_suspend NULL
-+#define imx_ssi_dsp_resume NULL
-+#endif
-+
-+static unsigned int imx_ssi_config_dsp_sysclk(struct snd_soc_cpu_dai *iface,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ return clk;
-+}
-+
-+struct snd_soc_cpu_dai imx_ssi_dsp_dai = {
-+ .name = "imx-dsp-1",
-+ .id = 0,
-+ .type = SND_SOC_DAI_PCM,
-+ .suspend = imx_ssi_dsp_suspend,
-+ .resume = imx_ssi_dsp_resume,
-+ .config_sysclk = imx_ssi_config_dsp_sysclk,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = imx_ssi_dsp_startup,
-+ .shutdown = imx_ssi_dsp_shutdown,
-+ .trigger = imx_ssi_trigger,
-+ .hw_params = imx_ssi_dsp_hw_params,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(imx_dsp_modes),
-+ .mode = imx_dsp_modes,},
-+},
-+{
-+ .name = "imx-dsp-2",
-+ .id = 1,
-+ .type = SND_SOC_DAI_PCM,
-+ .suspend = imx_ssi_dsp_suspend,
-+ .resume = imx_ssi_dsp_resume,
-+ .config_sysclk = imx_ssi_config_dsp_sysclk,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = imx_dsp_startup,
-+ .shutdown = imx_dsp_shutdown,
-+ .trigger = imx_ssi1_trigger,
-+ .hw_params = imx_ssi1_pcm_hw_params,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(imx_dsp_modes),
-+ .mode = imx_dsp_modes,},
-+};
-+
-+
-+EXPORT_SYMBOL_GPL(imx_ssi_dsp_dai);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("i.MX ASoC SSI driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/imx/Kconfig
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/imx/Kconfig
-@@ -0,0 +1,31 @@
-+menu "SoC Audio for the Freescale i.MX"
-+
-+config SND_MXC_SOC
-+ tristate "SoC Audio for the Freescale i.MX CPU"
-+ depends on ARCH_MXC && SND
-+ select SND_PCM
-+ help
-+ Say Y or M if you want to add support for codecs attached to
-+ the MXC AC97, I2S or SSP interface. You will also need
-+ to select the audio interfaces to support below.
-+
-+config SND_MXC_AC97
-+ tristate
-+ select SND_AC97_CODEC
-+
-+config SND_MXC_SOC_AC97
-+ tristate
-+ select SND_AC97_BUS
-+
-+config SND_MXC_SOC_SSI
-+ tristate
-+
-+config SND_MXC_SOC_MX3_WM8753
-+ tristate "SoC Audio support for MX31 - WM8753"
-+ depends on SND_MXC_SOC && ARCH_MX3
-+ select SND_MXC_SOC_SSI
-+ help
-+ Say Y if you want to add support for SoC audio on MX31ADS
-+ with the WM8753.
-+
-+endmenu
-Index: linux-2.6-pxa-new/sound/soc/imx/Makefile
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/imx/Makefile
-@@ -0,0 +1,18 @@
-+# i.MX Platform Support
-+snd-soc-imx21-objs := imx21-pcm.o
-+snd-soc-imx31-objs := imx31-pcm.o
-+snd-soc-imx-ac97-objs := imx-ac97.o
-+snd-soc-imx-i2s-objs := imx-i2s.o
-+
-+obj-$(CONFIG_SND_MXC_SOC) += snd-soc-imx.o
-+obj-$(CONFIG_SND_MXC_SOC_AC97) += snd-soc-imx-ac97.o
-+obj-$(CONFIG_SND_MXC_SOC_I2S) += snd-soc-imx-i2s.o
-+
-+# i.MX Machine Support
-+snd-soc-mx31ads-wm8753-objs := mx31ads_wm8753.o
-+obj-$(CONFIG_SND_SOC_MX31ADS_WM8753) += snd-soc-mx31ads-wm8753.o
-+snd-soc-mx21ads-wm8753-objs := mx21ads_wm8753.o
-+obj-$(CONFIG_SND_SOC_MX21ADS_WM8753) += snd-soc-mx21ads-wm8753.o
-+snd-soc-mx21ads-wm8731-objs := mx21ads_wm8731.o
-+obj-$(CONFIG_SND_SOC_MX21ADS_WM8731) += snd-soc-mx21ads-wm8731.o
-+
-Index: linux-2.6.17/sound/Makefile
-===================================================================
---- linux-2.6.17.orig/sound/Makefile 2006-06-18 02:49:35.000000000 +0100
-+++ linux-2.6.17/sound/Makefile 2006-07-04 14:04:41.000000000 +0100
-@@ -4,7 +4,7 @@
- obj-$(CONFIG_SOUND) += soundcore.o
- obj-$(CONFIG_SOUND_PRIME) += oss/
- obj-$(CONFIG_DMASOUND) += oss/
--obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/
-+obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/ soc/
-
- ifeq ($(CONFIG_SND),y)
- obj-y += last.o
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8711.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8711.c
-@@ -0,0 +1,843 @@
-+/*
-+ * wm8711.c -- WM8711 ALSA SoC Audio driver
-+ *
-+ * Copyright 2006 Wolfson Microelectronics
-+ *
-+ * Author: Mike Arthur <linux@wolfsonmicro.com>
-+ *
-+ * Based on wm8711.c by Richard Purdie
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/i2c.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+#include "wm8711.h"
-+
-+#define AUDIO_NAME "wm8711"
-+#define WM8711_VERSION "0.2"
-+
-+/*
-+ * Debug
-+ */
-+
-+#define WM8711_DEBUG 0
-+
-+#ifdef WM8711_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...) do {} while (0)
-+#endif
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8711;
-+
-+/*
-+ * wm8711 register cache
-+ * We can't read the WM8711 register space when we are
-+ * using 2 wire for device control, so we cache them instead.
-+ * There is no point in caching the reset register
-+ */
-+static const u16 wm8711_reg[WM8711_CACHEREGNUM] = {
-+ 0x0079, 0x0079, 0x000a, 0x0008,
-+ 0x009f, 0x000a, 0x0000, 0x0000
-+};
-+
-+#define WM8711_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_RIGHT_J | \
-+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_NB_IF | SND_SOC_DAIFMT_IB_NF | \
-+ SND_SOC_DAIFMT_IB_IF)
-+
-+#define WM8711_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK)
-+
-+#define WM8711_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
-+
-+#define WM8711_HIFI_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S24_LE | \
-+ SNDRV_PCM_FMTBIT_S32_LE)
-+
-+static struct snd_soc_dai_mode wm8711_modes[] = {
-+ /* codec frame and clock master modes */
-+ /* 8k */
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 1536,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 2304,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 1408,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 2112,
-+ .bfs = 64,
-+ },
-+
-+ /* 32k */
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 384,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_32000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 576,
-+ .bfs = 64,
-+ },
-+
-+ /* 44.1k & 48k */
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 256,
-+ .bfs = 64,
-+ },
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 384,
-+ .bfs = 64,
-+ },
-+
-+ /* 88.2 & 96k */
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 128,
-+ .bfs = 64,
-+
-+ },
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 192,
-+ .bfs = 64,
-+ },
-+
-+ /* USB codec frame and clock master modes */
-+ /* 8k */
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_8000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 1500,
-+ .bfs = SND_SOC_FSBD(1),
-+ },
-+
-+ /* 44.1k */
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 272,
-+ .bfs = SND_SOC_FSBD(1),
-+ },
-+
-+ /* 48k */
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_48000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 250,
-+ .bfs = SND_SOC_FSBD(1),
-+ },
-+
-+ /* 88.2k */
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_88200,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 136,
-+ .bfs = SND_SOC_FSBD(1),
-+ },
-+
-+ /* 96k */
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = SNDRV_PCM_RATE_96000,
-+ .pcmdir = WM8711_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 125,
-+ .bfs = SND_SOC_FSBD(1),
-+ },
-+
-+ /* codec frame and clock slave modes */
-+ {
-+ .fmt = WM8711_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM8711_HIFI_BITS,
-+ .pcmrate = WM8711_RATES,
-+ .pcmdir = WM8711_DIR,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+/*
-+ * read wm8711 register cache
-+ */
-+static inline unsigned int wm8711_read_reg_cache(struct snd_soc_codec * codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg == WM8711_RESET)
-+ return 0;
-+ if (reg >= WM8711_CACHEREGNUM)
-+ return -1;
-+ return cache[reg];
-+}
-+
-+/*
-+ * write wm8711 register cache
-+ */
-+static inline void wm8711_write_reg_cache(struct snd_soc_codec *codec,
-+ u16 reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg >= WM8711_CACHEREGNUM)
-+ return;
-+ cache[reg] = value;
-+}
-+
-+/*
-+ * write to the WM8711 register space
-+ */
-+static int wm8711_write(struct snd_soc_codec * codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[2];
-+
-+ /* data is
-+ * D15..D9 WM8753 register offset
-+ * D8...D0 register data
-+ */
-+ data[0] = (reg << 1) | ((value >> 8) & 0x0001);
-+ data[1] = value & 0x00ff;
-+
-+ wm8711_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 2) == 2)
-+ return 0;
-+ else
-+ return -EIO;
-+}
-+
-+#define wm8711_reset(c) wm8711_write(c, WM8711_RESET, 0)
-+
-+static const struct snd_kcontrol_new wm8711_snd_controls[] = {
-+
-+SOC_DOUBLE_R("Master Playback Volume", WM8711_LOUT1V, WM8711_ROUT1V,
-+ 0, 127, 0),
-+SOC_DOUBLE_R("Master Playback ZC Switch", WM8711_LOUT1V, WM8711_ROUT1V,
-+ 7, 1, 0),
-+
-+};
-+
-+/* add non dapm controls */
-+static int wm8711_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm8711_snd_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8711_snd_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/* Output Mixer */
-+static const snd_kcontrol_new_t wm8711_output_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Line Bypass Switch", WM8711_APANA, 3, 1, 0),
-+SOC_DAPM_SINGLE("HiFi Playback Switch", WM8711_APANA, 4, 1, 0),
-+};
-+
-+static const struct snd_soc_dapm_widget wm8711_dapm_widgets[] = {
-+SND_SOC_DAPM_MIXER("Output Mixer", WM8711_PWR, 4, 1,
-+ &wm8711_output_mixer_controls[0],
-+ ARRAY_SIZE(wm8711_output_mixer_controls)),
-+SND_SOC_DAPM_DAC("DAC", "HiFi Playback", WM8711_PWR, 3, 1),
-+SND_SOC_DAPM_OUTPUT("LOUT"),
-+SND_SOC_DAPM_OUTPUT("LHPOUT"),
-+SND_SOC_DAPM_OUTPUT("ROUT"),
-+SND_SOC_DAPM_OUTPUT("RHPOUT"),
-+};
-+
-+static const char *intercon[][3] = {
-+ /* output mixer */
-+ {"Output Mixer", "Line Bypass Switch", "Line Input"},
-+ {"Output Mixer", "HiFi Playback Switch", "DAC"},
-+
-+ /* outputs */
-+ {"RHPOUT", NULL, "Output Mixer"},
-+ {"ROUT", NULL, "Output Mixer"},
-+ {"LHPOUT", NULL, "Output Mixer"},
-+ {"LOUT", NULL, "Output Mixer"},
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int wm8711_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(wm8711_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8711_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path interconnects */
-+ for(i = 0; intercon[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, intercon[i][0], intercon[i][1],
-+ intercon[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+struct _coeff_div {
-+ u32 mclk;
-+ u32 rate;
-+ u16 fs;
-+ u8 sr:4;
-+ u8 bosr:1;
-+ u8 usb:1;
-+};
-+
-+/* codec mclk clock divider coefficients */
-+static const struct _coeff_div coeff_div[] = {
-+ /* 48k */
-+ {12288000, 48000, 256, 0x0, 0x0, 0x0},
-+ {18432000, 48000, 384, 0x0, 0x1, 0x0},
-+ {12000000, 48000, 250, 0x0, 0x0, 0x1},
-+
-+ /* 32k */
-+ {12288000, 32000, 384, 0x6, 0x0, 0x0},
-+ {18432000, 32000, 576, 0x6, 0x1, 0x0},
-+
-+ /* 8k */
-+ {12288000, 8000, 1536, 0x3, 0x0, 0x0},
-+ {18432000, 8000, 2304, 0x3, 0x1, 0x0},
-+ {11289600, 8000, 1408, 0xb, 0x0, 0x0},
-+ {16934400, 8000, 2112, 0xb, 0x1, 0x0},
-+ {12000000, 8000, 1500, 0x3, 0x0, 0x1},
-+
-+ /* 96k */
-+ {12288000, 96000, 128, 0x7, 0x0, 0x0},
-+ {18432000, 96000, 192, 0x7, 0x1, 0x0},
-+ {12000000, 96000, 125, 0x7, 0x0, 0x1},
-+
-+ /* 44.1k */
-+ {11289600, 44100, 256, 0x8, 0x0, 0x0},
-+ {16934400, 44100, 384, 0x8, 0x1, 0x0},
-+ {12000000, 44100, 272, 0x8, 0x1, 0x1},
-+
-+ /* 88.2k */
-+ {11289600, 88200, 128, 0xf, 0x0, 0x0},
-+ {16934400, 88200, 192, 0xf, 0x1, 0x0},
-+ {12000000, 88200, 136, 0xf, 0x1, 0x1},
-+};
-+
-+static inline int get_coeff(int mclk, int rate)
-+{
-+ int i;
-+
-+ for (i = 0; i < ARRAY_SIZE(coeff_div); i++) {
-+ if (coeff_div[i].rate == rate && coeff_div[i].mclk == mclk)
-+ return i;
-+ }
-+ return 0;
-+}
-+
-+/* WM8711 supports numerous clocks per sample rate */
-+static unsigned int wm8711_config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ dai->mclk = 0;
-+
-+ /* check that the calculated FS and rate actually match a clock from
-+ * the machine driver */
-+ if (info->fs * info->rate == clk)
-+ dai->mclk = clk;
-+
-+ return dai->mclk;
-+}
-+
-+static int wm8711_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 iface = 0, srate;
-+ int i = get_coeff(rtd->codec_dai->mclk,
-+ snd_soc_get_rate(rtd->codec_dai->dai_runtime.pcmrate));
-+
-+ /* set master/slave audio interface */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ iface |= 0x0040;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ break;
-+ }
-+ srate = (coeff_div[i].sr << 2) | (coeff_div[i].bosr << 1) |
-+ coeff_div[i].usb;
-+ wm8711_write(codec, WM8711_SRATE, srate);
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ iface |= 0x0002;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ iface |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ iface |= 0x0003;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_B:
-+ iface |= 0x0013;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FORMAT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FORMAT_S20_3LE:
-+ iface |= 0x0004;
-+ break;
-+ case SNDRV_PCM_FORMAT_S24_LE:
-+ iface |= 0x0008;
-+ break;
-+ case SNDRV_PCM_FORMAT_S32_LE:
-+ iface |= 0x000c;
-+ break;
-+ }
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_NB_NF:
-+ break;
-+ case SND_SOC_DAIFMT_IB_IF:
-+ iface |= 0x0090;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ iface |= 0x0080;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ iface |= 0x0010;
-+ break;
-+ }
-+
-+ /* set iface */
-+ wm8711_write(codec, WM8711_IFACE, iface);
-+
-+ /* set active */
-+ wm8711_write(codec, WM8711_ACTIVE, 0x0001);
-+ return 0;
-+}
-+
-+static void wm8711_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ /* deactivate */
-+ if (!codec->active) {
-+ udelay(50);
-+ wm8711_write(codec, WM8711_ACTIVE, 0x0);
-+ }
-+}
-+
-+static int wm8711_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = wm8711_read_reg_cache(codec, WM8711_APDIGI) & 0xfff7;
-+ if (mute)
-+ wm8711_write(codec, WM8711_APDIGI, mute_reg | 0x8);
-+ else
-+ wm8711_write(codec, WM8711_APDIGI, mute_reg);
-+
-+ return 0;
-+}
-+
-+static int wm8711_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+ u16 reg = wm8711_read_reg_cache(codec, WM8711_PWR) & 0xff7f;
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* vref/mid, osc on, dac unmute */
-+ wm8711_write(codec, WM8711_PWR, reg);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* everything off except vref/vmid, */
-+ wm8711_write(codec, WM8711_PWR, reg | 0x0040);
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ /* everything off, dac mute, inactive */
-+ wm8711_write(codec, WM8711_ACTIVE, 0x0);
-+ wm8711_write(codec, WM8711_PWR, 0xffff);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+struct snd_soc_codec_dai wm8711_dai = {
-+ .name = "WM8711",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .config_sysclk = wm8711_config_sysclk,
-+ .digital_mute = wm8711_mute,
-+ .ops = {
-+ .prepare = wm8711_pcm_prepare,
-+ .shutdown = wm8711_shutdown,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8711_modes),
-+ .mode = wm8711_modes,
-+ },
-+};
-+EXPORT_SYMBOL_GPL(wm8711_dai);
-+
-+static int wm8711_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ wm8711_write(codec, WM8711_ACTIVE, 0x0);
-+ wm8711_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm8711_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(wm8711_reg); i++) {
-+ data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+ wm8711_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm8711_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the WM8711 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int wm8711_init(struct snd_soc_device* socdev)
-+{
-+ struct snd_soc_codec* codec = socdev->codec;
-+ int reg, ret = 0;
-+
-+ codec->name = "WM8711";
-+ codec->owner = THIS_MODULE;
-+ codec->read = wm8711_read_reg_cache;
-+ codec->write = wm8711_write;
-+ codec->dapm_event = wm8711_dapm_event;
-+ codec->dai = &wm8711_dai;
-+ codec->num_dai = 1;
-+ codec->reg_cache_size = ARRAY_SIZE(wm8711_reg);
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm8711_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache, wm8711_reg,
-+ sizeof(u16) * ARRAY_SIZE(wm8711_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm8711_reg);
-+
-+ wm8711_reset(codec);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if (ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* power on device */
-+ wm8711_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+
-+ /* set the update bits */
-+ reg = wm8711_read_reg_cache(codec, WM8711_LOUT1V);
-+ wm8711_write(codec, WM8711_LOUT1V, reg | 0x0100);
-+ reg = wm8711_read_reg_cache(codec, WM8711_ROUT1V);
-+ wm8711_write(codec, WM8711_ROUT1V, reg | 0x0100);
-+
-+ wm8711_add_controls(codec);
-+ wm8711_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if (ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static struct snd_soc_device *wm8711_socdev;
-+
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+
-+/*
-+ * WM8711 2 wire address is determined by GPIO5
-+ * state during powerup.
-+ * low = 0x1a
-+ * high = 0x1b
-+ */
-+#define I2C_DRIVERID_WM8711 0xfefe /* liam - need a proper id */
-+
-+static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END };
-+
-+/* Magic definition of all other variables and things */
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver wm8711_i2c_driver;
-+static struct i2c_client client_template;
-+
-+/* If the i2c layer weren't so broken, we could pass this kind of data
-+ around */
-+
-+static int wm8711_codec_probe(struct i2c_adapter *adap, int addr, int kind)
-+{
-+ struct snd_soc_device *socdev = wm8711_socdev;
-+ struct wm8711_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct i2c_client *i2c;
-+ int ret;
-+
-+ if (addr != setup->i2c_address)
-+ return -ENODEV;
-+
-+ client_template.adapter = adap;
-+ client_template.addr = addr;
-+
-+ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (i2c == NULL){
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+ memcpy(i2c, &client_template, sizeof(struct i2c_client));
-+
-+ i2c_set_clientdata(i2c, codec);
-+
-+ codec->control_data = i2c;
-+
-+ ret = i2c_attach_client(i2c);
-+ if (ret < 0) {
-+ err("failed to attach codec at addr %x\n", addr);
-+ goto err;
-+ }
-+
-+ ret = wm8711_init(socdev);
-+ if (ret < 0) {
-+ err("failed to initialise WM8711\n");
-+ goto err;
-+ }
-+ return ret;
-+
-+err:
-+ kfree(codec);
-+ kfree(i2c);
-+ return ret;
-+
-+}
-+
-+static int wm8711_i2c_detach(struct i2c_client *client)
-+{
-+ struct snd_soc_codec* codec = i2c_get_clientdata(client);
-+
-+ i2c_detach_client(client);
-+
-+ kfree(codec->reg_cache);
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+static int wm8711_i2c_attach(struct i2c_adapter *adap)
-+{
-+ return i2c_probe(adap, &addr_data, wm8711_codec_probe);
-+}
-+
-+/* corgi i2c codec control layer */
-+static struct i2c_driver wm8711_i2c_driver = {
-+ .driver = {
-+ .name = "WM8711 I2C Codec",
-+ .owner = THIS_MODULE,
-+ },
-+ .id = I2C_DRIVERID_WM8711,
-+ .attach_adapter = wm8711_i2c_attach,
-+ .detach_client = wm8711_i2c_detach,
-+ .command = NULL,
-+};
-+
-+static struct i2c_client client_template = {
-+ .name = "WM8711",
-+ .driver = &wm8711_i2c_driver,
-+};
-+#endif
-+
-+static int wm8711_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct wm8711_setup_data *setup;
-+ struct snd_soc_codec* codec;
-+ int ret = 0;
-+
-+ info("WM8711 Audio Codec %s", WM8711_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ wm8711_socdev = socdev;
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ if (setup->i2c_address) {
-+ normal_i2c[0] = setup->i2c_address;
-+ codec->hw_write = (hw_write_t)i2c_master_send;
-+ ret = i2c_add_driver(&wm8711_i2c_driver);
-+ if (ret != 0)
-+ printk(KERN_ERR "can't add i2c driver");
-+ }
-+#else
-+ /* Add other interfaces here */
-+#endif
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int wm8711_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ wm8711_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ i2c_del_driver(&wm8711_i2c_driver);
-+#endif
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8711 = {
-+ .probe = wm8711_probe,
-+ .remove = wm8711_remove,
-+ .suspend = wm8711_suspend,
-+ .resume = wm8711_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm8711);
-+
-+MODULE_DESCRIPTION("ASoC WM8711 driver");
-+MODULE_AUTHOR("Mike Arthur");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8711.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8711.h
-@@ -0,0 +1,39 @@
-+/*
-+ * wm8711.h -- WM8711 Soc Audio driver
-+ *
-+ * Copyright 2006 Wolfson Microelectronics
-+ *
-+ * Author: Mike Arthur <linux@wolfsonmicro.com>
-+ *
-+ * Based on wm8731.h
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef _WM8711_H
-+#define _WM8711_H
-+
-+/* WM8711 register space */
-+
-+#define WM8711_LOUT1V 0x02
-+#define WM8711_ROUT1V 0x03
-+#define WM8711_APANA 0x04
-+#define WM8711_APDIGI 0x05
-+#define WM8711_PWR 0x06
-+#define WM8711_IFACE 0x07
-+#define WM8711_SRATE 0x08
-+#define WM8711_ACTIVE 0x09
-+#define WM8711_RESET 0x0f
-+
-+#define WM8711_CACHEREGNUM 8
-+
-+struct wm8711_setup_data {
-+ unsigned short i2c_address;
-+};
-+
-+extern struct snd_soc_codec_dai wm8711_dai;
-+extern struct snd_soc_codec_device soc_codec_dev_wm8711;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8980.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8980.c
-@@ -0,0 +1,991 @@
-+/*
-+ * wm8980.c -- WM8980 ALSA Soc Audio driver
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ *
-+ * Authors:
-+ * Mike Arthur <linux@wolfsonmicro.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/i2c.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+#include "wm8980.h"
-+
-+#define AUDIO_NAME "wm8980"
-+#define WM8980_VERSION "0.2"
-+
-+/*
-+ * Debug
-+ */
-+
-+#define WM8980_DEBUG 0
-+
-+#ifdef WM8980_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...) do {} while (0)
-+#endif
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8980;
-+
-+/*
-+ * wm8980 register cache
-+ * We can't read the WM8980 register space when we are
-+ * using 2 wire for device control, so we cache them instead.
-+ */
-+static const u16 wm8980_reg[WM8980_CACHEREGNUM] = {
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0050, 0x0000, 0x0140, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x00ff,
-+ 0x00ff, 0x0000, 0x0100, 0x00ff,
-+ 0x00ff, 0x0000, 0x012c, 0x002c,
-+ 0x002c, 0x002c, 0x002c, 0x0000,
-+ 0x0032, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0038, 0x000b, 0x0032, 0x0000,
-+ 0x0008, 0x000c, 0x0093, 0x00e9,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0033, 0x0010, 0x0010, 0x0100,
-+ 0x0100, 0x0002, 0x0001, 0x0001,
-+ 0x0039, 0x0039, 0x0039, 0x0039,
-+ 0x0001, 0x0001,
-+};
-+
-+#define WM8980_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_RIGHT_J | \
-+ SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_NF | \
-+ SND_SOC_DAIFMT_NB_IF | SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_IB_IF)
-+
-+#define WM8980_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define WM8980_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000)
-+
-+#define WM8980_PCM_FORMATS \
-+ (SNDRV_PCM_FORMAT_S16_LE | SNDRV_PCM_FORMAT_S20_3LE | \
-+ SNDRV_PCM_FORMAT_S24_3LE | SNDRV_PCM_FORMAT_S24_LE | \
-+ SNDRV_PCM_FORMAT_S32_LE)
-+
-+#define WM8980_BCLK \
-+ (SND_SOC_FSBD(1) | SND_SOC_FSBD(2) | SND_SOC_FSBD(4) | SND_SOC_FSBD(8) |\
-+ SND_SOC_FSBD(16) | SND_SOC_FSBD(32))
-+
-+static struct snd_soc_dai_mode wm8980_modes[] = {
-+ /* codec frame and clock master modes */
-+ {
-+ .fmt = WM8980_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8980_PCM_FORMATS,
-+ .pcmrate = WM8980_RATES,
-+ .pcmdir = WM8980_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = WM8980_BCLK,
-+ },
-+
-+ /* codec frame and clock slave modes */
-+ {
-+ .fmt = WM8980_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM8980_PCM_FORMATS,
-+ .pcmrate = WM8980_RATES,
-+ .pcmdir = WM8980_DIR,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+/*
-+ * read wm8980 register cache
-+ */
-+static inline unsigned int wm8980_read_reg_cache(struct snd_soc_codec *codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg == WM8980_RESET)
-+ return 0;
-+ if (reg >= WM8980_CACHEREGNUM)
-+ return -1;
-+ return cache[reg];
-+}
-+
-+/*
-+ * write wm8980 register cache
-+ */
-+static inline void wm8980_write_reg_cache(struct snd_soc_codec *codec,
-+ u16 reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg >= WM8980_CACHEREGNUM)
-+ return;
-+ cache[reg] = value;
-+}
-+
-+/*
-+ * write to the WM8980 register space
-+ */
-+static int wm8980_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[2];
-+
-+ /* data is
-+ * D15..D9 WM8980 register offset
-+ * D8...D0 register data
-+ */
-+ data[0] = (reg << 1) | ((value >> 8) & 0x0001);
-+ data[1] = value & 0x00ff;
-+
-+ wm8980_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 2) == 2)
-+ return 0;
-+ else
-+ return -1;
-+}
-+
-+#define wm8980_reset(c) wm8980_write(c, WM8980_RESET, 0)
-+
-+static const char *wm8980_companding[] = {"Off", "NC", "u-law", "A-law" };
-+static const char *wm8980_deemp[] = {"None", "32kHz", "44.1kHz", "48kHz" };
-+static const char *wm8980_eqmode[] = {"Capture", "Playback" };
-+static const char *wm8980_bw[] = {"Narrow", "Wide" };
-+static const char *wm8980_eq1[] = {"80Hz", "105Hz", "135Hz", "175Hz" };
-+static const char *wm8980_eq2[] = {"230Hz", "300Hz", "385Hz", "500Hz" };
-+static const char *wm8980_eq3[] = {"650Hz", "850Hz", "1.1kHz", "1.4kHz" };
-+static const char *wm8980_eq4[] = {"1.8kHz", "2.4kHz", "3.2kHz", "4.1kHz" };
-+static const char *wm8980_eq5[] = {"5.3kHz", "6.9kHz", "9kHz", "11.7kHz" };
-+static const char *wm8980_alc[] =
-+ {"ALC both on", "ALC left only", "ALC right only", "Limiter" };
-+
-+static const struct soc_enum wm8980_enum[] = {
-+ SOC_ENUM_SINGLE(WM8980_COMP, 1, 4, wm8980_companding), /* adc */
-+ SOC_ENUM_SINGLE(WM8980_COMP, 3, 4, wm8980_companding), /* dac */
-+ SOC_ENUM_SINGLE(WM8980_DAC, 4, 4, wm8980_deemp),
-+ SOC_ENUM_SINGLE(WM8980_EQ1, 8, 2, wm8980_eqmode),
-+
-+ SOC_ENUM_SINGLE(WM8980_EQ1, 5, 4, wm8980_eq1),
-+ SOC_ENUM_SINGLE(WM8980_EQ2, 8, 2, wm8980_bw),
-+ SOC_ENUM_SINGLE(WM8980_EQ2, 5, 4, wm8980_eq2),
-+ SOC_ENUM_SINGLE(WM8980_EQ3, 8, 2, wm8980_bw),
-+
-+ SOC_ENUM_SINGLE(WM8980_EQ3, 5, 4, wm8980_eq3),
-+ SOC_ENUM_SINGLE(WM8980_EQ4, 8, 2, wm8980_bw),
-+ SOC_ENUM_SINGLE(WM8980_EQ4, 5, 4, wm8980_eq4),
-+ SOC_ENUM_SINGLE(WM8980_EQ5, 8, 2, wm8980_bw),
-+
-+ SOC_ENUM_SINGLE(WM8980_EQ5, 5, 4, wm8980_eq5),
-+ SOC_ENUM_SINGLE(WM8980_ALC3, 8, 2, wm8980_alc),
-+};
-+
-+static const struct snd_kcontrol_new wm8980_snd_controls[] = {
-+SOC_SINGLE("Digital Loopback Switch", WM8980_COMP, 0, 1, 0),
-+
-+SOC_ENUM("ADC Companding", wm8980_enum[0]),
-+SOC_ENUM("DAC Companding", wm8980_enum[1]),
-+
-+SOC_SINGLE("Jack Detection Enable", WM8980_JACK1, 6, 1, 0),
-+
-+SOC_SINGLE("DAC Right Inversion Switch", WM8980_DAC, 1, 1, 0),
-+SOC_SINGLE("DAC Left Inversion Switch", WM8980_DAC, 0, 1, 0),
-+
-+SOC_SINGLE("Left Playback Volume", WM8980_DACVOLL, 0, 127, 0),
-+SOC_SINGLE("Right Playback Volume", WM8980_DACVOLR, 0, 127, 0),
-+
-+SOC_SINGLE("High Pass Filter Switch", WM8980_ADC, 8, 1, 0),
-+SOC_SINGLE("High Pass Filter Switch", WM8980_ADC, 8, 1, 0),
-+SOC_SINGLE("High Pass Cut Off", WM8980_ADC, 4, 7, 0),
-+SOC_SINGLE("Right ADC Inversion Switch", WM8980_ADC, 1, 1, 0),
-+SOC_SINGLE("Left ADC Inversion Switch", WM8980_ADC, 0, 1, 0),
-+
-+SOC_SINGLE("Left Capture Volume", WM8980_ADCVOLL, 0, 127, 0),
-+SOC_SINGLE("Right Capture Volume", WM8980_ADCVOLR, 0, 127, 0),
-+
-+SOC_ENUM("Equaliser Function", wm8980_enum[3]),
-+SOC_ENUM("EQ1 Cut Off", wm8980_enum[4]),
-+SOC_SINGLE("EQ1 Volume", WM8980_EQ1, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ2 Bandwith", wm8980_enum[5]),
-+SOC_ENUM("EQ2 Cut Off", wm8980_enum[6]),
-+SOC_SINGLE("EQ2 Volume", WM8980_EQ2, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ3 Bandwith", wm8980_enum[7]),
-+SOC_ENUM("EQ3 Cut Off", wm8980_enum[8]),
-+SOC_SINGLE("EQ3 Volume", WM8980_EQ3, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ4 Bandwith", wm8980_enum[9]),
-+SOC_ENUM("EQ4 Cut Off", wm8980_enum[10]),
-+SOC_SINGLE("EQ4 Volume", WM8980_EQ4, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ5 Bandwith", wm8980_enum[11]),
-+SOC_ENUM("EQ5 Cut Off", wm8980_enum[12]),
-+SOC_SINGLE("EQ5 Volume", WM8980_EQ5, 0, 31, 1),
-+
-+SOC_SINGLE("DAC Playback Limiter Switch", WM8980_DACLIM1, 8, 1, 0),
-+SOC_SINGLE("DAC Playback Limiter Decay", WM8980_DACLIM1, 4, 15, 0),
-+SOC_SINGLE("DAC Playback Limiter Attack", WM8980_DACLIM1, 0, 15, 0),
-+
-+SOC_SINGLE("DAC Playback Limiter Threshold", WM8980_DACLIM2, 4, 7, 0),
-+SOC_SINGLE("DAC Playback Limiter Boost", WM8980_DACLIM2, 0, 15, 0),
-+
-+SOC_SINGLE("ALC Enable Switch", WM8980_ALC1, 8, 1, 0),
-+SOC_SINGLE("ALC Capture Max Gain", WM8980_ALC1, 3, 7, 0),
-+SOC_SINGLE("ALC Capture Min Gain", WM8980_ALC1, 0, 7, 0),
-+
-+SOC_SINGLE("ALC Capture ZC Switch", WM8980_ALC2, 8, 1, 0),
-+SOC_SINGLE("ALC Capture Hold", WM8980_ALC2, 4, 7, 0),
-+SOC_SINGLE("ALC Capture Target", WM8980_ALC2, 0, 15, 0),
-+
-+SOC_ENUM("ALC Capture Mode", wm8980_enum[13]),
-+SOC_SINGLE("ALC Capture Decay", WM8980_ALC3, 4, 15, 0),
-+SOC_SINGLE("ALC Capture Attack", WM8980_ALC3, 0, 15, 0),
-+
-+SOC_SINGLE("ALC Capture Noise Gate Switch", WM8980_NGATE, 3, 1, 0),
-+SOC_SINGLE("ALC Capture Noise Gate Threshold", WM8980_NGATE, 0, 7, 0),
-+
-+SOC_SINGLE("Left Capture PGA ZC Switch", WM8980_INPPGAL, 7, 1, 0),
-+SOC_SINGLE("Left Capture PGA Volume", WM8980_INPPGAL, 0, 63, 0),
-+
-+SOC_SINGLE("Right Capture PGA ZC Switch", WM8980_INPPGAR, 7, 1, 0),
-+SOC_SINGLE("Right Capture PGA Volume", WM8980_INPPGAR, 0, 63, 0),
-+
-+SOC_SINGLE("Left Headphone Playback ZC Switch", WM8980_HPVOLL, 7, 1, 0),
-+SOC_SINGLE("Left Headphone Playback Switch", WM8980_HPVOLL, 6, 1, 1),
-+SOC_SINGLE("Left Headphone Playback Volume", WM8980_HPVOLL, 0, 63, 0),
-+
-+SOC_SINGLE("Right Headphone Playback ZC Switch", WM8980_HPVOLR, 7, 1, 0),
-+SOC_SINGLE("Right Headphone Playback Switch", WM8980_HPVOLR, 6, 1, 1),
-+SOC_SINGLE("Right Headphone Playback Volume", WM8980_HPVOLR, 0, 63, 0),
-+
-+SOC_SINGLE("Left Speaker Playback ZC Switch", WM8980_SPKVOLL, 7, 1, 0),
-+SOC_SINGLE("Left Speaker Playback Switch", WM8980_SPKVOLL, 6, 1, 1),
-+SOC_SINGLE("Left Speaker Playback Volume", WM8980_SPKVOLL, 0, 63, 0),
-+
-+SOC_SINGLE("Right Speaker Playback ZC Switch", WM8980_SPKVOLR, 7, 1, 0),
-+SOC_SINGLE("Right Speaker Playback Switch", WM8980_SPKVOLR, 6, 1, 1),
-+SOC_SINGLE("Right Speaker Playback Volume", WM8980_SPKVOLR, 0, 63, 0),
-+
-+SOC_DOUBLE_R("Capture Boost(+20dB)", WM8980_ADCBOOSTL, WM8980_ADCBOOSTR,
-+ 8, 1, 0),
-+};
-+
-+/* add non dapm controls */
-+static int wm8980_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm8980_snd_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8980_snd_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/* Left Output Mixer */
-+static const snd_kcontrol_new_t wm8980_left_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Right PCM Playback Switch", WM8980_OUTPUT, 6, 1, 1),
-+SOC_DAPM_SINGLE("Left PCM Playback Switch", WM8980_MIXL, 0, 1, 1),
-+SOC_DAPM_SINGLE("Line Bypass Switch", WM8980_MIXL, 1, 1, 0),
-+SOC_DAPM_SINGLE("Aux Playback Switch", WM8980_MIXL, 5, 1, 0),
-+};
-+
-+/* Right Output Mixer */
-+static const snd_kcontrol_new_t wm8980_right_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Left PCM Playback Switch", WM8980_OUTPUT, 5, 1, 1),
-+SOC_DAPM_SINGLE("Right PCM Playback Switch", WM8980_MIXR, 0, 1, 1),
-+SOC_DAPM_SINGLE("Line Bypass Switch", WM8980_MIXR, 1, 1, 0),
-+SOC_DAPM_SINGLE("Aux Playback Switch", WM8980_MIXR, 5, 1, 0),
-+};
-+
-+/* Left AUX Input boost vol */
-+static const snd_kcontrol_new_t wm8980_laux_boost_controls =
-+SOC_DAPM_SINGLE("Left Aux Volume", WM8980_ADCBOOSTL, 0, 3, 0);
-+
-+/* Right AUX Input boost vol */
-+static const snd_kcontrol_new_t wm8980_raux_boost_controls =
-+SOC_DAPM_SINGLE("Right Aux Volume", WM8980_ADCBOOSTR, 0, 3, 0);
-+
-+/* Left Input boost vol */
-+static const snd_kcontrol_new_t wm8980_lmic_boost_controls =
-+SOC_DAPM_SINGLE("Left Input Volume", WM8980_ADCBOOSTL, 4, 3, 0);
-+
-+/* Right Input boost vol */
-+static const snd_kcontrol_new_t wm8980_rmic_boost_controls =
-+SOC_DAPM_SINGLE("Right Input Volume", WM8980_ADCBOOSTR, 4, 3, 0);
-+
-+/* Left Aux In to PGA */
-+static const snd_kcontrol_new_t wm8980_laux_capture_boost_controls =
-+SOC_DAPM_SINGLE("Left Capture Switch", WM8980_ADCBOOSTL, 8, 1, 0);
-+
-+/* Right Aux In to PGA */
-+static const snd_kcontrol_new_t wm8980_raux_capture_boost_controls =
-+SOC_DAPM_SINGLE("Right Capture Switch", WM8980_ADCBOOSTR, 8, 1, 0);
-+
-+/* Left Input P In to PGA */
-+static const snd_kcontrol_new_t wm8980_lmicp_capture_boost_controls =
-+SOC_DAPM_SINGLE("Left Input P Capture Boost Switch", WM8980_INPUT, 0, 1, 0);
-+
-+/* Right Input P In to PGA */
-+static const snd_kcontrol_new_t wm8980_rmicp_capture_boost_controls =
-+SOC_DAPM_SINGLE("Right Input P Capture Boost Switch", WM8980_INPUT, 4, 1, 0);
-+
-+/* Left Input N In to PGA */
-+static const snd_kcontrol_new_t wm8980_lmicn_capture_boost_controls =
-+SOC_DAPM_SINGLE("Left Input N Capture Boost Switch", WM8980_INPUT, 1, 1, 0);
-+
-+/* Right Input N In to PGA */
-+static const snd_kcontrol_new_t wm8980_rmicn_capture_boost_controls =
-+SOC_DAPM_SINGLE("Right Input N Capture Boost Switch", WM8980_INPUT, 5, 1, 0);
-+
-+// TODO Widgets
-+static const struct snd_soc_dapm_widget wm8980_dapm_widgets[] = {
-+#if 0
-+//SND_SOC_DAPM_MUTE("Mono Mute", WM8980_MONOMIX, 6, 0),
-+//SND_SOC_DAPM_MUTE("Speaker Mute", WM8980_SPKMIX, 6, 0),
-+
-+SND_SOC_DAPM_MIXER("Speaker Mixer", WM8980_POWER3, 2, 0,
-+ &wm8980_speaker_mixer_controls[0],
-+ ARRAY_SIZE(wm8980_speaker_mixer_controls)),
-+SND_SOC_DAPM_MIXER("Mono Mixer", WM8980_POWER3, 3, 0,
-+ &wm8980_mono_mixer_controls[0],
-+ ARRAY_SIZE(wm8980_mono_mixer_controls)),
-+SND_SOC_DAPM_DAC("DAC", "HiFi Playback", WM8980_POWER3, 0, 0),
-+SND_SOC_DAPM_ADC("ADC", "HiFi Capture", WM8980_POWER3, 0, 0),
-+SND_SOC_DAPM_PGA("Aux Input", WM8980_POWER1, 6, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("SpkN Out", WM8980_POWER3, 5, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("SpkP Out", WM8980_POWER3, 6, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Mono Out", WM8980_POWER3, 7, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Mic PGA", WM8980_POWER2, 2, 0, NULL, 0),
-+
-+SND_SOC_DAPM_PGA("Aux Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8980_aux_boost_controls, 1),
-+SND_SOC_DAPM_PGA("Mic Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8980_mic_boost_controls, 1),
-+SND_SOC_DAPM_SWITCH("Capture Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8980_capture_boost_controls),
-+
-+SND_SOC_DAPM_MIXER("Boost Mixer", WM8980_POWER2, 4, 0, NULL, 0),
-+
-+SND_SOC_DAPM_MICBIAS("Mic Bias", WM8980_POWER1, 4, 0),
-+
-+SND_SOC_DAPM_INPUT("MICN"),
-+SND_SOC_DAPM_INPUT("MICP"),
-+SND_SOC_DAPM_INPUT("AUX"),
-+SND_SOC_DAPM_OUTPUT("MONOOUT"),
-+SND_SOC_DAPM_OUTPUT("SPKOUTP"),
-+SND_SOC_DAPM_OUTPUT("SPKOUTN"),
-+#endif
-+};
-+
-+static const char *audio_map[][3] = {
-+ /* Mono output mixer */
-+ {"Mono Mixer", "PCM Playback Switch", "DAC"},
-+ {"Mono Mixer", "Aux Playback Switch", "Aux Input"},
-+ {"Mono Mixer", "Line Bypass Switch", "Boost Mixer"},
-+
-+ /* Speaker output mixer */
-+ {"Speaker Mixer", "PCM Playback Switch", "DAC"},
-+ {"Speaker Mixer", "Aux Playback Switch", "Aux Input"},
-+ {"Speaker Mixer", "Line Bypass Switch", "Boost Mixer"},
-+
-+ /* Outputs */
-+ {"Mono Out", NULL, "Mono Mixer"},
-+ {"MONOOUT", NULL, "Mono Out"},
-+ {"SpkN Out", NULL, "Speaker Mixer"},
-+ {"SpkP Out", NULL, "Speaker Mixer"},
-+ {"SPKOUTN", NULL, "SpkN Out"},
-+ {"SPKOUTP", NULL, "SpkP Out"},
-+
-+ /* Boost Mixer */
-+ {"Boost Mixer", NULL, "ADC"},
-+ {"Capture Boost Switch", "Aux Capture Boost Switch", "AUX"},
-+ {"Aux Boost", "Aux Volume", "Boost Mixer"},
-+ {"Capture Boost", "Capture Switch", "Boost Mixer"},
-+ {"Mic Boost", "Mic Volume", "Boost Mixer"},
-+
-+ /* Inputs */
-+ {"MICP", NULL, "Mic Boost"},
-+ {"MICN", NULL, "Mic PGA"},
-+ {"Mic PGA", NULL, "Capture Boost"},
-+ {"AUX", NULL, "Aux Input"},
-+
-+ /* */
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int wm8980_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(wm8980_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8980_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path map */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0], audio_map[i][1],
-+ audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+struct pll_ {
-+ unsigned int in_hz, out_hz;
-+ unsigned int pre:4; /* prescale - 1 */
-+ unsigned int n:4;
-+ unsigned int k;
-+};
-+
-+struct pll_ pll[] = {
-+ {12000000, 11289600, 0, 7, 0x86c220},
-+ {12000000, 12288000, 0, 8, 0x3126e8},
-+ {13000000, 11289600, 0, 6, 0xf28bd4},
-+ {13000000, 12288000, 0, 7, 0x8fd525},
-+ {12288000, 11289600, 0, 7, 0x59999a},
-+ {11289600, 12288000, 0, 8, 0x80dee9},
-+ /* TODO: liam - add more entries */
-+};
-+
-+static int set_pll(struct snd_soc_codec *codec, unsigned int in,
-+ unsigned int out)
-+{
-+ int i;
-+ u16 reg;
-+
-+ if(out == 0) {
-+ reg = wm8980_read_reg_cache(codec, WM8980_POWER1);
-+ wm8980_write(codec, WM8980_POWER1, reg & 0x1df);
-+ return 0;
-+ }
-+
-+ for(i = 0; i < ARRAY_SIZE(pll); i++) {
-+ if (in == pll[i].in_hz && out == pll[i].out_hz) {
-+ wm8980_write(codec, WM8980_PLLN, (pll[i].pre << 4) | pll[i].n);
-+ wm8980_write(codec, WM8980_PLLK1, pll[i].k >> 18);
-+ wm8980_write(codec, WM8980_PLLK1, (pll[i].k >> 9) && 0x1ff);
-+ wm8980_write(codec, WM8980_PLLK1, pll[i].k && 0x1ff);
-+ reg = wm8980_read_reg_cache(codec, WM8980_POWER1);
-+ wm8980_write(codec, WM8980_POWER1, reg | 0x020);
-+ return 0;
-+ }
-+ }
-+ return -EINVAL;
-+}
-+
-+/* mclk dividers * 2 */
-+static unsigned char mclk_div[] = {2, 3, 4, 6, 8, 12, 16, 24};
-+
-+/* we need 256FS to drive the DAC's and ADC's */
-+static unsigned int wm8980_config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ int i, j, best_clk = info->fs * info->rate;
-+
-+ /* can we run at this clk without the PLL ? */
-+ for (i = 0; i < ARRAY_SIZE(mclk_div); i++) {
-+ if ((best_clk >> 1) * mclk_div[i] == clk) {
-+ dai->pll_in = 0;
-+ dai->clk_div = mclk_div[i];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+
-+ /* now check for PLL support */
-+ for (i = 0; i < ARRAY_SIZE(pll); i++) {
-+ if (pll[i].in_hz == clk) {
-+ for (j = 0; j < ARRAY_SIZE(mclk_div); j++) {
-+ if (pll[i].out_hz == mclk_div[j] * (best_clk >> 1)) {
-+ dai->pll_in = clk;
-+ dai->pll_out = pll[i].out_hz;
-+ dai->clk_div = mclk_div[j];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+ }
-+ }
-+
-+ /* this clk is not supported */
-+ return 0;
-+}
-+
-+static int wm8980_pcm_prepare(snd_pcm_substream_t *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct snd_soc_codec_dai *dai = rtd->codec_dai;
-+ u16 iface = 0, bfs, clk = 0, adn;
-+ int fs = 48000 << 7, i;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->codec_dai->dai_runtime.bfs);
-+ switch (bfs) {
-+ case 2:
-+ clk |= 0x1 << 2;
-+ break;
-+ case 4:
-+ clk |= 0x2 << 2;
-+ break;
-+ case 8:
-+ clk |= 0x3 << 2;
-+ break;
-+ case 16:
-+ clk |= 0x4 << 2;
-+ break;
-+ case 32:
-+ clk |= 0x5 << 2;
-+ break;
-+ }
-+
-+ /* set master/slave audio interface */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ clk |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ break;
-+ }
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ iface |= 0x0010;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ iface |= 0x0008;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ iface |= 0x00018;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ iface |= 0x0020;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ iface |= 0x0040;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ iface |= 0x0060;
-+ break;
-+ }
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_NB_NF:
-+ break;
-+ case SND_SOC_DAIFMT_IB_IF:
-+ iface |= 0x0180;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ iface |= 0x0100;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ iface |= 0x0080;
-+ break;
-+ }
-+
-+ /* filter coefficient */
-+ adn = wm8980_read_reg_cache(codec, WM8980_ADD) & 0x1f1;
-+ switch (rtd->codec_dai->dai_runtime.pcmrate) {
-+ case SNDRV_PCM_RATE_8000:
-+ adn |= 0x5 << 1;
-+ fs = 8000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_11025:
-+ adn |= 0x4 << 1;
-+ fs = 11025 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_16000:
-+ adn |= 0x3 << 1;
-+ fs = 16000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_22050:
-+ adn |= 0x2 << 1;
-+ fs = 22050 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_32000:
-+ adn |= 0x1 << 1;
-+ fs = 32000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_44100:
-+ fs = 44100 << 7;
-+ break;
-+ }
-+
-+ /* do we need to enable the PLL */
-+ if(dai->pll_in)
-+ set_pll(codec, dai->pll_in, dai->pll_out);
-+
-+ /* divide the clock to 256 fs */
-+ for(i = 0; i < ARRAY_SIZE(mclk_div); i++) {
-+ if (dai->clk_div == mclk_div[i]) {
-+ clk |= i << 5;
-+ clk &= 0xff;
-+ goto set;
-+ }
-+ }
-+
-+set:
-+ /* set iface */
-+ wm8980_write(codec, WM8980_IFACE, iface);
-+ wm8980_write(codec, WM8980_CLOCK, clk);
-+
-+ return 0;
-+}
-+
-+static int wm8980_hw_free(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ set_pll(codec, 0, 0);
-+ return 0;
-+}
-+
-+static int wm8980_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = wm8980_read_reg_cache(codec, WM8980_DAC) & 0xffbf;
-+ if(mute)
-+ wm8980_write(codec, WM8980_DAC, mute_reg | 0x40);
-+ else
-+ wm8980_write(codec, WM8980_DAC, mute_reg);
-+
-+ return 0;
-+}
-+
-+/* TODO: liam need to make this lower power with dapm */
-+static int wm8980_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* vref/mid, clk and osc on, dac unmute, active */
-+ wm8980_write(codec, WM8980_POWER1, 0x1ff);
-+ wm8980_write(codec, WM8980_POWER2, 0x1ff);
-+ wm8980_write(codec, WM8980_POWER3, 0x1ff);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* everything off except vref/vmid, dac mute, inactive */
-+
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ /* everything off, dac mute, inactive */
-+ wm8980_write(codec, WM8980_POWER1, 0x0);
-+ wm8980_write(codec, WM8980_POWER2, 0x0);
-+ wm8980_write(codec, WM8980_POWER3, 0x0);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+struct snd_soc_codec_dai wm8980_dai = {
-+ .name = "WM8980 HiFi",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .capture = {
-+ .stream_name = "Capture",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .config_sysclk = wm8980_config_sysclk,
-+ .digital_mute = wm8980_mute,
-+ .ops = {
-+ .prepare = wm8980_pcm_prepare,
-+ .hw_free = wm8980_hw_free,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8980_modes),
-+ .mode = wm8980_modes,
-+ },
-+};
-+EXPORT_SYMBOL_GPL(wm8980_dai);
-+
-+static int wm8980_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ wm8980_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm8980_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(wm8980_reg); i++) {
-+ data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+ wm8980_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm8980_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the WM8980 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int wm8980_init(struct snd_soc_device* socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int ret = 0;
-+
-+ codec->name = "WM8980";
-+ codec->owner = THIS_MODULE;
-+ codec->read = wm8980_read_reg_cache;
-+ codec->write = wm8980_write;
-+ codec->dapm_event = wm8980_dapm_event;
-+ codec->dai = &wm8980_dai;
-+ codec->num_dai = 1;
-+ codec->reg_cache_size = ARRAY_SIZE(wm8980_reg);
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm8980_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache, wm8980_reg,
-+ sizeof(u16) * ARRAY_SIZE(wm8980_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm8980_reg);
-+
-+ wm8980_reset(codec);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if(ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* power on device */
-+ wm8980_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm8980_add_controls(codec);
-+ wm8980_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if(ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static struct snd_soc_device *wm8980_socdev;
-+
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+
-+/*
-+ * WM8980 2 wire address is 0x1a
-+ */
-+#define I2C_DRIVERID_WM8980 0xfefe /* liam - need a proper id */
-+
-+static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END };
-+
-+/* Magic definition of all other variables and things */
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver wm8980_i2c_driver;
-+static struct i2c_client client_template;
-+
-+/* If the i2c layer weren't so broken, we could pass this kind of data
-+ around */
-+
-+static int wm8980_codec_probe(struct i2c_adapter *adap, int addr, int kind)
-+{
-+ struct snd_soc_device *socdev = wm8980_socdev;
-+ struct wm8980_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct i2c_client *i2c;
-+ int ret;
-+
-+ if (addr != setup->i2c_address)
-+ return -ENODEV;
-+
-+ client_template.adapter = adap;
-+ client_template.addr = addr;
-+
-+ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (i2c == NULL){
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+ memcpy(i2c, &client_template, sizeof(struct i2c_client));
-+
-+ i2c_set_clientdata(i2c, codec);
-+
-+ codec->control_data = i2c;
-+
-+ ret = i2c_attach_client(i2c);
-+ if(ret < 0) {
-+ err("failed to attach codec at addr %x\n", addr);
-+ goto err;
-+ }
-+
-+ ret = wm8980_init(socdev);
-+ if(ret < 0) {
-+ err("failed to initialise WM8980\n");
-+ goto err;
-+ }
-+ return ret;
-+
-+err:
-+ kfree(codec);
-+ kfree(i2c);
-+ return ret;
-+
-+}
-+
-+static int wm8980_i2c_detach(struct i2c_client *client)
-+{
-+ struct snd_soc_codec *codec = i2c_get_clientdata(client);
-+
-+ i2c_detach_client(client);
-+
-+ kfree(codec->reg_cache);
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+static int wm8980_i2c_attach(struct i2c_adapter *adap)
-+{
-+ return i2c_probe(adap, &addr_data, wm8980_codec_probe);
-+}
-+
-+/* corgi i2c codec control layer */
-+static struct i2c_driver wm8980_i2c_driver = {
-+ .driver = {
-+ .name = "WM8980 I2C Codec",
-+ .owner = THIS_MODULE,
-+ },
-+ .id = I2C_DRIVERID_WM8980,
-+ .attach_adapter = wm8980_i2c_attach,
-+ .detach_client = wm8980_i2c_detach,
-+ .command = NULL,
-+};
-+
-+static struct i2c_client client_template = {
-+ .name = "WM8980",
-+ .driver = &wm8980_i2c_driver,
-+};
-+#endif
-+
-+static int wm8980_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct wm8980_setup_data *setup;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+
-+ info("WM8980 Audio Codec %s", WM8980_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ wm8980_socdev = socdev;
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ if (setup->i2c_address) {
-+ normal_i2c[0] = setup->i2c_address;
-+ codec->hw_write = (hw_write_t)i2c_master_send;
-+ ret = i2c_add_driver(&wm8980_i2c_driver);
-+ if (ret != 0)
-+ printk(KERN_ERR "can't add i2c driver");
-+ }
-+#else
-+ /* Add other interfaces here */
-+#endif
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int wm8980_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ wm8980_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ i2c_del_driver(&wm8980_i2c_driver);
-+#endif
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8980 = {
-+ .probe = wm8980_probe,
-+ .remove = wm8980_remove,
-+ .suspend = wm8980_suspend,
-+ .resume = wm8980_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm8980);
-+
-+MODULE_DESCRIPTION("ASoC WM8980 driver");
-+MODULE_AUTHOR("Mike Arthur");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8980.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8980.h
-@@ -0,0 +1,77 @@
-+/*
-+ * wm8980.h -- WM8980 Soc Audio driver
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef _WM8980_H
-+#define _WM8980_H
-+
-+/* WM8980 register space */
-+
-+#define WM8980_RESET 0x0
-+#define WM8980_POWER1 0x1
-+#define WM8980_POWER2 0x2
-+#define WM8980_POWER3 0x3
-+#define WM8980_IFACE 0x4
-+#define WM8980_COMP 0x5
-+#define WM8980_CLOCK 0x6
-+#define WM8980_ADD 0x7
-+#define WM8980_GPIO 0x8
-+#define WM8980_JACK1 0x9
-+#define WM8980_DAC 0xa
-+#define WM8980_DACVOLL 0xb
-+#define WM8980_DACVOLR 0xc
-+#define WM8980_JACK2 0xd
-+#define WM8980_ADC 0xe
-+#define WM8980_ADCVOLL 0xf
-+#define WM8980_ADCVOLR 0x10
-+#define WM8980_EQ1 0x12
-+#define WM8980_EQ2 0x13
-+#define WM8980_EQ3 0x14
-+#define WM8980_EQ4 0x15
-+#define WM8980_EQ5 0x16
-+#define WM8980_DACLIM1 0x18
-+#define WM8980_DACLIM2 0x19
-+#define WM8980_NOTCH1 0x1b
-+#define WM8980_NOTCH2 0x1c
-+#define WM8980_NOTCH3 0x1d
-+#define WM8980_NOTCH4 0x1e
-+#define WM8980_ALC1 0x20
-+#define WM8980_ALC2 0x21
-+#define WM8980_ALC3 0x22
-+#define WM8980_NGATE 0x23
-+#define WM8980_PLLN 0x24
-+#define WM8980_PLLK1 0x25
-+#define WM8980_PLLK2 0x26
-+#define WM8980_PLLK3 0x27
-+#define WM8980_VIDEO 0x28
-+#define WM8980_3D 0x29
-+#define WM8980_BEEP 0x2b
-+#define WM8980_INPUT 0x2c
-+#define WM8980_INPPGAL 0x2d
-+#define WM8980_INPPGAR 0x2e
-+#define WM8980_ADCBOOSTL 0x2f
-+#define WM8980_ADCBOOSTR 0x30
-+#define WM8980_OUTPUT 0x31
-+#define WM8980_MIXL 0x32
-+#define WM8980_MIXR 0x33
-+#define WM8980_HPVOLL 0x34
-+#define WM8980_HPVOLR 0x35
-+#define WM8980_SPKVOLL 0x36
-+#define WM8980_SPKVOLR 0x37
-+#define WM8980_OUT3MIX 0x38
-+#define WM8980_MONOMIX 0x39
-+
-+#define WM8980_CACHEREGNUM 58
-+
-+struct wm8980_setup_data {
-+ unsigned short i2c_address;
-+};
-+
-+extern struct snd_soc_codec_dai wm8980_dai;
-+extern struct snd_soc_codec_device soc_codec_dev_wm8980;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/at91/eti_b1_wm8731.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/at91/eti_b1_wm8731.c
-@@ -0,0 +1,230 @@
-+/*
-+ * eti_b1_wm8731 -- SoC audio for Endrelia ETI_B1.
-+ *
-+ * Author: Frank Mandarino <fmandarino@endrelia.com>
-+ * Endrelia Technologies Inc.
-+ * Created: Mar 29, 2006
-+ *
-+ * Based on corgi.c by:
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2005 Openedhand Ltd.
-+ *
-+ * Authors: Liam Girdwood <liam.girdwood@wolfsonmicro.com>
-+ * Richard Purdie <richard@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 30th Nov 2005 Initial version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/clk.h>
-+#include <linux/timer.h>
-+#include <linux/interrupt.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+
-+#include <asm/arch/at91rm9200.h>
-+#include <asm/arch/gpio.h>
-+#include <asm/arch/hardware.h>
-+
-+#include "../codecs/wm8731.h"
-+#include "at91rm9200-pcm.h"
-+
-+#if 0
-+#define DBG(x...) printk(KERN_INFO "eti_b1_wm8731:" x)
-+#else
-+#define DBG(x...)
-+#endif
-+
-+static struct clk *pck1_clk;
-+static struct clk *pllb_clk;
-+
-+static int eti_b1_startup(snd_pcm_substream_t *substream)
-+{
-+ /* Start PCK1 clock. */
-+ clk_enable(pck1_clk);
-+ DBG("pck1 started\n");
-+
-+ return 0;
-+}
-+
-+static void eti_b1_shutdown(snd_pcm_substream_t *substream)
-+{
-+ /* Stop PCK1 clock. */
-+ clk_disable(pck1_clk);
-+ DBG("pck1 stopped\n");
-+}
-+
-+static struct snd_soc_ops eti_b1_ops = {
-+ .startup = eti_b1_startup,
-+ .shutdown = eti_b1_shutdown,
-+};
-+
-+
-+static const struct snd_soc_dapm_widget eti_b1_dapm_widgets[] = {
-+ SND_SOC_DAPM_MIC("Int Mic", NULL),
-+ SND_SOC_DAPM_SPK("Ext Spk", NULL),
-+};
-+
-+static const char *intercon[][3] = {
-+
-+ /* speaker connected to LHPOUT */
-+ {"Ext Spk", NULL, "LHPOUT"},
-+
-+ /* mic is connected to Mic Jack, with WM8731 Mic Bias */
-+ {"MICIN", NULL, "Mic Bias"},
-+ {"Mic Bias", NULL, "Int Mic"},
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+/*
-+ * Logic for a wm8731 as connected on a Endrelia ETI-B1 board.
-+ */
-+static int eti_b1_wm8731_init(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ DBG("eti_b1_wm8731_init() called\n");
-+
-+ /* Add specific widgets */
-+ for(i = 0; i < ARRAY_SIZE(eti_b1_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &eti_b1_dapm_widgets[i]);
-+ }
-+
-+ /* Set up specific audio path interconnects */
-+ for(i = 0; intercon[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, intercon[i][0],
-+ intercon[i][1], intercon[i][2]);
-+ }
-+
-+ /* not connected */
-+ snd_soc_dapm_set_endpoint(codec, "RLINEIN", 0);
-+ snd_soc_dapm_set_endpoint(codec, "LLINEIN", 0);
-+
-+ /* always connected */
-+ snd_soc_dapm_set_endpoint(codec, "Int Mic", 1);
-+ snd_soc_dapm_set_endpoint(codec, "Ext Spk", 1);
-+
-+ snd_soc_dapm_sync_endpoints(codec);
-+
-+ return 0;
-+}
-+
-+unsigned int eti_b1_config_sysclk(struct snd_soc_pcm_runtime *rtd,
-+ struct snd_soc_clock_info *info)
-+{
-+ if(info->bclk_master & SND_SOC_DAIFMT_CBS_CFS) {
-+ return rtd->codec_dai->config_sysclk(rtd->codec_dai, info, 12000000);
-+ }
-+ return 0;
-+}
-+
-+static struct snd_soc_dai_link eti_b1_dai = {
-+ .name = "WM8731",
-+ .stream_name = "WM8731",
-+ .cpu_dai = &at91rm9200_i2s_dai[1],
-+ .codec_dai = &wm8731_dai,
-+ .init = eti_b1_wm8731_init,
-+ .config_sysclk = eti_b1_config_sysclk,
-+};
-+
-+static struct snd_soc_machine snd_soc_machine_eti_b1 = {
-+ .name = "ETI_B1",
-+ .dai_link = &eti_b1_dai,
-+ .num_links = 1,
-+ .ops = &eti_b1_ops,
-+};
-+
-+static struct wm8731_setup_data eti_b1_wm8731_setup = {
-+ .i2c_address = 0x1a,
-+};
-+
-+static struct snd_soc_device eti_b1_snd_devdata = {
-+ .machine = &snd_soc_machine_eti_b1,
-+ .platform = &at91rm9200_soc_platform,
-+ .codec_dev = &soc_codec_dev_wm8731,
-+ .codec_data = &eti_b1_wm8731_setup,
-+};
-+
-+static struct platform_device *eti_b1_snd_device;
-+
-+static int __init eti_b1_init(void)
-+{
-+ int ret;
-+ u32 ssc_pio_lines;
-+
-+ eti_b1_snd_device = platform_device_alloc("soc-audio", -1);
-+ if (!eti_b1_snd_device)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(eti_b1_snd_device, &eti_b1_snd_devdata);
-+ eti_b1_snd_devdata.dev = &eti_b1_snd_device->dev;
-+
-+ ret = platform_device_add(eti_b1_snd_device);
-+ if (ret) {
-+ platform_device_put(eti_b1_snd_device);
-+ return ret;
-+ }
-+
-+ ssc_pio_lines = AT91_PB6_TF1 | AT91_PB7_TK1 | AT91_PB8_TD1
-+ | AT91_PB9_RD1 /* | AT91_PB10_RK1 | AT91_PB11_RF1 */;
-+
-+ /* Reset all PIO registers and assign lines to peripheral A */
-+ at91_sys_write(AT91_PIOB + PIO_PDR, ssc_pio_lines);
-+ at91_sys_write(AT91_PIOB + PIO_ODR, ssc_pio_lines);
-+ at91_sys_write(AT91_PIOB + PIO_IFDR, ssc_pio_lines);
-+ at91_sys_write(AT91_PIOB + PIO_CODR, ssc_pio_lines);
-+ at91_sys_write(AT91_PIOB + PIO_IDR, ssc_pio_lines);
-+ at91_sys_write(AT91_PIOB + PIO_MDDR, ssc_pio_lines);
-+ at91_sys_write(AT91_PIOB + PIO_PUDR, ssc_pio_lines);
-+ at91_sys_write(AT91_PIOB + PIO_ASR, ssc_pio_lines);
-+ at91_sys_write(AT91_PIOB + PIO_OWDR, ssc_pio_lines);
-+
-+ /*
-+ * Set PCK1 parent to PLLB and its rate to 12 Mhz.
-+ */
-+ pllb_clk = clk_get(NULL, "pllb");
-+ pck1_clk = clk_get(NULL, "pck1");
-+
-+ clk_set_parent(pck1_clk, pllb_clk);
-+ clk_set_rate(pck1_clk, 12000000);
-+
-+ DBG("MCLK rate %luHz\n", clk_get_rate(pck1_clk));
-+
-+ /* assign the GPIO pin to PCK1 */
-+ at91_set_B_periph(AT91_PIN_PA24, 0);
-+
-+ return ret;
-+}
-+
-+static void __exit eti_b1_exit(void)
-+{
-+ clk_put(pck1_clk);
-+ clk_put(pllb_clk);
-+
-+ platform_device_unregister(eti_b1_snd_device);
-+}
-+
-+module_init(eti_b1_init);
-+module_exit(eti_b1_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Frank Mandarino <fmandarino@endrelia.com>");
-+MODULE_DESCRIPTION("ALSA SoC ETI-B1-WM8731");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8510.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8510.c
-@@ -0,0 +1,895 @@
-+/*
-+ * wm8510.c -- WM8510 ALSA Soc Audio driver
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ *
-+ * Author: Liam Girdwood <liam.girdwood@wolfsonmicro.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/i2c.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+#include "wm8510.h"
-+
-+#define AUDIO_NAME "wm8510"
-+#define WM8510_VERSION "0.5"
-+
-+/*
-+ * Debug
-+ */
-+
-+#define WM8510_DEBUG 0
-+
-+#ifdef WM8510_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...) do {} while (0)
-+#endif
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8510;
-+
-+/*
-+ * wm8510 register cache
-+ * We can't read the WM8510 register space when we are
-+ * using 2 wire for device control, so we cache them instead.
-+ */
-+static const u16 wm8510_reg[WM8510_CACHEREGNUM] = {
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0050, 0x0000, 0x0140, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x00ff,
-+ 0x0000, 0x0000, 0x0100, 0x00ff,
-+ 0x0000, 0x0000, 0x012c, 0x002c,
-+ 0x002c, 0x002c, 0x002c, 0x0000,
-+ 0x0032, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0038, 0x000b, 0x0032, 0x0000,
-+ 0x0008, 0x000c, 0x0093, 0x00e9,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0003, 0x0010, 0x0000, 0x0000,
-+ 0x0000, 0x0002, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0039, 0x0000,
-+ 0x0000,
-+};
-+
-+#define WM8510_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_RIGHT_J | \
-+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_NB_IF | SND_SOC_DAIFMT_IB_NF | \
-+ SND_SOC_DAIFMT_IB_IF)
-+
-+#define WM8510_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define WM8510_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000)
-+
-+#define WM8794_BCLK \
-+ (SND_SOC_FSBD(1) | SND_SOC_FSBD(2) | SND_SOC_FSBD(4) | SND_SOC_FSBD(8) |\
-+ SND_SOC_FSBD(16) | SND_SOC_FSBD(32))
-+
-+#define WM8794_HIFI_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
-+
-+static struct snd_soc_dai_mode wm8510_modes[] = {
-+ /* codec frame and clock master modes */
-+ {
-+ .fmt = WM8510_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8794_HIFI_BITS,
-+ .pcmrate = WM8510_RATES,
-+ .pcmdir = WM8510_DIR,
-+ .fs = 256,
-+ .bfs = WM8794_BCLK,
-+ },
-+
-+ /* codec frame and clock slave modes */
-+ {
-+ .fmt = WM8510_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM8794_HIFI_BITS,
-+ .pcmrate = WM8510_RATES,
-+ .pcmdir = WM8510_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+/*
-+ * read wm8510 register cache
-+ */
-+static inline unsigned int wm8510_read_reg_cache(struct snd_soc_codec * codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg == WM8510_RESET)
-+ return 0;
-+ if (reg >= WM8510_CACHEREGNUM)
-+ return -1;
-+ return cache[reg];
-+}
-+
-+/*
-+ * write wm8510 register cache
-+ */
-+static inline void wm8510_write_reg_cache(struct snd_soc_codec *codec,
-+ u16 reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg >= WM8510_CACHEREGNUM)
-+ return;
-+ cache[reg] = value;
-+}
-+
-+/*
-+ * write to the WM8510 register space
-+ */
-+static int wm8510_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[2];
-+
-+ /* data is
-+ * D15..D9 WM8510 register offset
-+ * D8...D0 register data
-+ */
-+ data[0] = (reg << 1) | ((value >> 8) & 0x0001);
-+ data[1] = value & 0x00ff;
-+
-+ wm8510_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 2) == 2)
-+ return 0;
-+ else
-+ return -EIO;
-+}
-+
-+#define wm8510_reset(c) wm8510_write(c, WM8510_RESET, 0)
-+
-+static const char *wm8510_companding[] = {"Off", "NC", "u-law", "A-law" };
-+static const char *wm8510_deemp[] = {"None", "32kHz", "44.1kHz", "48kHz" };
-+static const char *wm8510_alc[] = {"ALC", "Limiter" };
-+
-+static const struct soc_enum wm8510_enum[] = {
-+ SOC_ENUM_SINGLE(WM8510_COMP, 1, 4, wm8510_companding), /* adc */
-+ SOC_ENUM_SINGLE(WM8510_COMP, 3, 4, wm8510_companding), /* dac */
-+ SOC_ENUM_SINGLE(WM8510_DAC, 4, 4, wm8510_deemp),
-+ SOC_ENUM_SINGLE(WM8510_ALC3, 8, 2, wm8510_alc),
-+};
-+
-+static const struct snd_kcontrol_new wm8510_snd_controls[] = {
-+
-+SOC_SINGLE("Digital Loopback Switch", WM8510_COMP, 0, 1, 0),
-+
-+SOC_ENUM("DAC Companding", wm8510_enum[1]),
-+SOC_ENUM("ADC Companding", wm8510_enum[0]),
-+
-+SOC_ENUM("Playback De-emphasis", wm8510_enum[2]),
-+SOC_SINGLE("DAC Inversion Switch", WM8510_DAC, 0, 1, 0),
-+
-+SOC_SINGLE("Master Playback Volume", WM8510_DACVOL, 0, 127, 0),
-+
-+SOC_SINGLE("High Pass Filter Switch", WM8510_ADC, 8, 1, 0),
-+SOC_SINGLE("High Pass Cut Off", WM8510_ADC, 4, 7, 0),
-+SOC_SINGLE("ADC Inversion Switch", WM8510_COMP, 0, 1, 0),
-+
-+SOC_SINGLE("Capture Volume", WM8510_ADCVOL, 0, 127, 0),
-+
-+SOC_SINGLE("DAC Playback Limiter Switch", WM8510_DACLIM1, 8, 1, 0),
-+SOC_SINGLE("DAC Playback Limiter Decay", WM8510_DACLIM1, 4, 15, 0),
-+SOC_SINGLE("DAC Playback Limiter Attack", WM8510_DACLIM1, 0, 15, 0),
-+
-+SOC_SINGLE("DAC Playback Limiter Threshold", WM8510_DACLIM2, 4, 7, 0),
-+SOC_SINGLE("DAC Playback Limiter Boost", WM8510_DACLIM2, 0, 15, 0),
-+
-+SOC_SINGLE("ALC Enable Switch", WM8510_ALC1, 8, 1, 0),
-+SOC_SINGLE("ALC Capture Max Gain", WM8510_ALC1, 3, 7, 0),
-+SOC_SINGLE("ALC Capture Min Gain", WM8510_ALC1, 0, 7, 0),
-+
-+SOC_SINGLE("ALC Capture ZC Switch", WM8510_ALC2, 8, 1, 0),
-+SOC_SINGLE("ALC Capture Hold", WM8510_ALC2, 4, 7, 0),
-+SOC_SINGLE("ALC Capture Target", WM8510_ALC2, 0, 15, 0),
-+
-+SOC_ENUM("ALC Capture Mode", wm8510_enum[3]),
-+SOC_SINGLE("ALC Capture Decay", WM8510_ALC3, 4, 15, 0),
-+SOC_SINGLE("ALC Capture Attack", WM8510_ALC3, 0, 15, 0),
-+
-+SOC_SINGLE("ALC Capture Noise Gate Switch", WM8510_NGATE, 3, 1, 0),
-+SOC_SINGLE("ALC Capture Noise Gate Threshold", WM8510_NGATE, 0, 7, 0),
-+
-+SOC_SINGLE("Capture PGA ZC Switch", WM8510_INPPGA, 7, 1, 0),
-+SOC_SINGLE("Capture PGA Volume", WM8510_INPPGA, 0, 63, 0),
-+
-+SOC_SINGLE("Speaker Playback ZC Switch", WM8510_SPKVOL, 7, 1, 0),
-+SOC_SINGLE("Speaker Playback Switch", WM8510_SPKVOL, 6, 1, 1),
-+SOC_SINGLE("Speaker Playback Volume", WM8510_SPKVOL, 0, 63, 0),
-+
-+SOC_SINGLE("Capture Boost(+20dB)", WM8510_ADCBOOST, 8, 1, 0),
-+SOC_SINGLE("Mono Playback Switch", WM8510_MONOMIX, 6, 1, 0),
-+};
-+
-+/* add non dapm controls */
-+static int wm8510_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm8510_snd_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8510_snd_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/* Speaker Output Mixer */
-+static const struct snd_kcontrol_new wm8510_speaker_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Line Bypass Switch", WM8510_SPKMIX, 1, 1, 0),
-+SOC_DAPM_SINGLE("Aux Playback Switch", WM8510_SPKMIX, 5, 1, 0),
-+SOC_DAPM_SINGLE("PCM Playback Switch", WM8510_SPKMIX, 0, 1, 1),
-+};
-+
-+/* Mono Output Mixer */
-+static const struct snd_kcontrol_new wm8510_mono_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Line Bypass Switch", WM8510_MONOMIX, 1, 1, 0),
-+SOC_DAPM_SINGLE("Aux Playback Switch", WM8510_MONOMIX, 2, 1, 0),
-+SOC_DAPM_SINGLE("PCM Playback Switch", WM8510_MONOMIX, 0, 1, 1),
-+};
-+
-+/* AUX Input boost vol */
-+static const struct snd_kcontrol_new wm8510_aux_boost_controls =
-+SOC_DAPM_SINGLE("Aux Volume", WM8510_ADCBOOST, 0, 7, 0);
-+
-+/* Mic Input boost vol */
-+static const struct snd_kcontrol_new wm8510_mic_boost_controls =
-+SOC_DAPM_SINGLE("Mic Volume", WM8510_ADCBOOST, 4, 7, 0);
-+
-+/* Capture boost switch */
-+static const struct snd_kcontrol_new wm8510_capture_boost_controls =
-+SOC_DAPM_SINGLE("Capture Boost Switch", WM8510_INPPGA, 6, 1, 0);
-+
-+/* Aux In to PGA */
-+static const struct snd_kcontrol_new wm8510_aux_capture_boost_controls =
-+SOC_DAPM_SINGLE("Aux Capture Boost Switch", WM8510_INPPGA, 2, 1, 0);
-+
-+/* Mic P In to PGA */
-+static const struct snd_kcontrol_new wm8510_micp_capture_boost_controls =
-+SOC_DAPM_SINGLE("Mic P Capture Boost Switch", WM8510_INPPGA, 0, 1, 0);
-+
-+/* Mic N In to PGA */
-+static const struct snd_kcontrol_new wm8510_micn_capture_boost_controls =
-+SOC_DAPM_SINGLE("Mic N Capture Boost Switch", WM8510_INPPGA, 1, 1, 0);
-+
-+static const struct snd_soc_dapm_widget wm8510_dapm_widgets[] = {
-+SND_SOC_DAPM_MIXER("Speaker Mixer", WM8510_POWER3, 2, 0,
-+ &wm8510_speaker_mixer_controls[0],
-+ ARRAY_SIZE(wm8510_speaker_mixer_controls)),
-+SND_SOC_DAPM_MIXER("Mono Mixer", WM8510_POWER3, 3, 0,
-+ &wm8510_mono_mixer_controls[0],
-+ ARRAY_SIZE(wm8510_mono_mixer_controls)),
-+SND_SOC_DAPM_DAC("DAC", "HiFi Playback", WM8510_POWER3, 0, 0),
-+SND_SOC_DAPM_ADC("ADC", "HiFi Capture", WM8510_POWER3, 0, 0),
-+SND_SOC_DAPM_PGA("Aux Input", WM8510_POWER1, 6, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("SpkN Out", WM8510_POWER3, 5, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("SpkP Out", WM8510_POWER3, 6, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Mono Out", WM8510_POWER3, 7, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Mic PGA", WM8510_POWER2, 2, 0, NULL, 0),
-+
-+SND_SOC_DAPM_PGA("Aux Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8510_aux_boost_controls, 1),
-+SND_SOC_DAPM_PGA("Mic Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8510_mic_boost_controls, 1),
-+SND_SOC_DAPM_SWITCH("Capture Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8510_capture_boost_controls),
-+
-+SND_SOC_DAPM_MIXER("Boost Mixer", WM8510_POWER2, 4, 0, NULL, 0),
-+
-+SND_SOC_DAPM_MICBIAS("Mic Bias", WM8510_POWER1, 4, 0),
-+
-+SND_SOC_DAPM_INPUT("MICN"),
-+SND_SOC_DAPM_INPUT("MICP"),
-+SND_SOC_DAPM_INPUT("AUX"),
-+SND_SOC_DAPM_OUTPUT("MONOOUT"),
-+SND_SOC_DAPM_OUTPUT("SPKOUTP"),
-+SND_SOC_DAPM_OUTPUT("SPKOUTN"),
-+};
-+
-+static const char *audio_map[][3] = {
-+ /* Mono output mixer */
-+ {"Mono Mixer", "PCM Playback Switch", "DAC"},
-+ {"Mono Mixer", "Aux Playback Switch", "Aux Input"},
-+ {"Mono Mixer", "Line Bypass Switch", "Boost Mixer"},
-+
-+ /* Speaker output mixer */
-+ {"Speaker Mixer", "PCM Playback Switch", "DAC"},
-+ {"Speaker Mixer", "Aux Playback Switch", "Aux Input"},
-+ {"Speaker Mixer", "Line Bypass Switch", "Boost Mixer"},
-+
-+ /* Outputs */
-+ {"Mono Out", NULL, "Mono Mixer"},
-+ {"MONOOUT", NULL, "Mono Out"},
-+ {"SpkN Out", NULL, "Speaker Mixer"},
-+ {"SpkP Out", NULL, "Speaker Mixer"},
-+ {"SPKOUTN", NULL, "SpkN Out"},
-+ {"SPKOUTP", NULL, "SpkP Out"},
-+
-+ /* Boost Mixer */
-+ {"Boost Mixer", NULL, "ADC"},
-+ {"Capture Boost Switch", "Aux Capture Boost Switch", "AUX"},
-+ {"Aux Boost", "Aux Volume", "Boost Mixer"},
-+ {"Capture Boost", "Capture Switch", "Boost Mixer"},
-+ {"Mic Boost", "Mic Volume", "Boost Mixer"},
-+
-+ /* Inputs */
-+ {"MICP", NULL, "Mic Boost"},
-+ {"MICN", NULL, "Mic PGA"},
-+ {"Mic PGA", NULL, "Capture Boost"},
-+ {"AUX", NULL, "Aux Input"},
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int wm8510_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(wm8510_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8510_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path audio_mapnects */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0],
-+ audio_map[i][1], audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+struct pll_ {
-+ unsigned int in_hz, out_hz;
-+ unsigned int pre:4; /* prescale - 1 */
-+ unsigned int n:4;
-+ unsigned int k;
-+};
-+
-+struct pll_ pll[] = {
-+ {12000000, 11289600, 0, 7, 0x86c220},
-+ {12000000, 12288000, 0, 8, 0x3126e8},
-+ {13000000, 11289600, 0, 6, 0xf28bd4},
-+ {13000000, 12288000, 0, 7, 0x8fd525},
-+ {12288000, 11289600, 0, 7, 0x59999a},
-+ {11289600, 12288000, 0, 8, 0x80dee9},
-+ /* liam - add more entries */
-+};
-+
-+static int set_pll(struct snd_soc_codec *codec, unsigned int in,
-+ unsigned int out)
-+{
-+ int i;
-+ u16 reg;
-+
-+ if(out == 0) {
-+ reg = wm8510_read_reg_cache(codec, WM8510_POWER1);
-+ wm8510_write(codec, WM8510_POWER1, reg & 0x1df);
-+ return 0;
-+ }
-+
-+ for(i = 0; i < ARRAY_SIZE(pll); i++) {
-+ if (in == pll[i].in_hz && out == pll[i].out_hz) {
-+ wm8510_write(codec, WM8510_PLLN, (pll[i].pre << 4) | pll[i].n);
-+ wm8510_write(codec, WM8510_PLLK1, pll[i].k >> 18);
-+ wm8510_write(codec, WM8510_PLLK1, (pll[i].k >> 9) && 0x1ff);
-+ wm8510_write(codec, WM8510_PLLK1, pll[i].k && 0x1ff);
-+ reg = wm8510_read_reg_cache(codec, WM8510_POWER1);
-+ wm8510_write(codec, WM8510_POWER1, reg | 0x020);
-+ return 0;
-+ }
-+ }
-+ return -EINVAL;
-+}
-+
-+/* mclk dividers * 2 */
-+static unsigned char mclk_div[] = {2, 3, 4, 6, 8, 12, 16, 24};
-+
-+/* we need 256FS to drive the DAC's and ADC's */
-+static unsigned int wm8510_config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ int i, j, best_clk = info->fs * info->rate;
-+
-+ /* can we run at this clk without the PLL ? */
-+ for (i = 0; i < ARRAY_SIZE(mclk_div); i++) {
-+ if ((best_clk >> 1) * mclk_div[i] == clk) {
-+ dai->pll_in = 0;
-+ dai->clk_div = mclk_div[i];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+
-+ /* now check for PLL support */
-+ for (i = 0; i < ARRAY_SIZE(pll); i++) {
-+ if (pll[i].in_hz == clk) {
-+ for (j = 0; j < ARRAY_SIZE(mclk_div); j++) {
-+ if (pll[i].out_hz == mclk_div[j] * (best_clk >> 1)) {
-+ dai->pll_in = clk;
-+ dai->pll_out = pll[i].out_hz;
-+ dai->clk_div = mclk_div[j];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+ }
-+ }
-+
-+ /* this clk is not supported */
-+ return 0;
-+}
-+
-+static int wm8510_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct snd_soc_codec_dai *dai = rtd->codec_dai;
-+ u16 iface = 0, bfs, clk = 0, adn;
-+ int fs = 48000 << 7, i;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->codec_dai->dai_runtime.bfs);
-+ switch (bfs) {
-+ case 2:
-+ clk |= 0x1 << 2;
-+ break;
-+ case 4:
-+ clk |= 0x2 << 2;
-+ break;
-+ case 8:
-+ clk |= 0x3 << 2;
-+ break;
-+ case 16:
-+ clk |= 0x4 << 2;
-+ break;
-+ case 32:
-+ clk |= 0x5 << 2;
-+ break;
-+ }
-+
-+ /* set master/slave audio interface */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ clk |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ break;
-+ }
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ iface |= 0x0010;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ iface |= 0x0008;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ iface |= 0x00018;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ iface |= 0x0020;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ iface |= 0x0040;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ iface |= 0x0060;
-+ break;
-+ }
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_NB_NF:
-+ break;
-+ case SND_SOC_DAIFMT_IB_IF:
-+ iface |= 0x0180;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ iface |= 0x0100;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ iface |= 0x0080;
-+ break;
-+ }
-+
-+ /* filter coefficient */
-+ adn = wm8510_read_reg_cache(codec, WM8510_ADD) & 0x1f1;
-+ switch (rtd->codec_dai->dai_runtime.pcmrate) {
-+ case SNDRV_PCM_RATE_8000:
-+ adn |= 0x5 << 1;
-+ fs = 8000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_11025:
-+ adn |= 0x4 << 1;
-+ fs = 11025 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_16000:
-+ adn |= 0x3 << 1;
-+ fs = 16000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_22050:
-+ adn |= 0x2 << 1;
-+ fs = 22050 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_32000:
-+ adn |= 0x1 << 1;
-+ fs = 32000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_44100:
-+ fs = 44100 << 7;
-+ break;
-+ }
-+
-+ /* do we need to enable the PLL */
-+ if(dai->pll_in)
-+ set_pll(codec, dai->pll_in, dai->pll_out);
-+
-+ /* divide the clock to 256 fs */
-+ for(i = 0; i < ARRAY_SIZE(mclk_div); i++) {
-+ if (dai->clk_div == mclk_div[i]) {
-+ clk |= i << 5;
-+ clk &= 0xff;
-+ goto set;
-+ }
-+ }
-+
-+set:
-+ /* set iface */
-+ wm8510_write(codec, WM8510_IFACE, iface);
-+ wm8510_write(codec, WM8510_CLOCK, clk);
-+
-+ return 0;
-+}
-+
-+static int wm8510_hw_free(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ set_pll(codec, 0, 0);
-+ return 0;
-+}
-+
-+static int wm8510_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = wm8510_read_reg_cache(codec, WM8510_DAC) & 0xffbf;
-+ if(mute)
-+ wm8510_write(codec, WM8510_DAC, mute_reg | 0x40);
-+ else
-+ wm8510_write(codec, WM8510_DAC, mute_reg);
-+ return 0;
-+}
-+
-+/* liam need to make this lower power with dapm */
-+static int wm8510_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* vref/mid, clk and osc on, dac unmute, active */
-+ wm8510_write(codec, WM8510_POWER1, 0x1ff);
-+ wm8510_write(codec, WM8510_POWER2, 0x1ff);
-+ wm8510_write(codec, WM8510_POWER3, 0x1ff);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* everything off except vref/vmid, dac mute, inactive */
-+
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ /* everything off, dac mute, inactive */
-+ wm8510_write(codec, WM8510_POWER1, 0x0);
-+ wm8510_write(codec, WM8510_POWER2, 0x0);
-+ wm8510_write(codec, WM8510_POWER3, 0x0);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+struct snd_soc_codec_dai wm8510_dai = {
-+ .name = "WM8510 HiFi",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ },
-+ .capture = {
-+ .stream_name = "Capture",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ },
-+ .config_sysclk = wm8510_config_sysclk,
-+ .digital_mute = wm8510_mute,
-+ .ops = {
-+ .prepare = wm8510_pcm_prepare,
-+ .hw_free = wm8510_hw_free,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8510_modes),
-+ .mode = wm8510_modes,
-+ },
-+};
-+EXPORT_SYMBOL_GPL(wm8510_dai);
-+
-+static int wm8510_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ wm8510_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm8510_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(wm8510_reg); i++) {
-+ data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+ wm8510_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm8510_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the WM8510 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int wm8510_init(struct snd_soc_device *socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int ret = 0;
-+
-+ codec->name = "WM8510";
-+ codec->owner = THIS_MODULE;
-+ codec->read = wm8510_read_reg_cache;
-+ codec->write = wm8510_write;
-+ codec->dapm_event = wm8510_dapm_event;
-+ codec->dai = &wm8510_dai;
-+ codec->num_dai = 1;
-+ codec->reg_cache_size = ARRAY_SIZE(wm8510_reg);
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm8510_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache, wm8510_reg,
-+ sizeof(u16) * ARRAY_SIZE(wm8510_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm8510_reg);
-+
-+ wm8510_reset(codec);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if(ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* power on device */
-+ wm8510_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm8510_add_controls(codec);
-+ wm8510_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if(ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static struct snd_soc_device *wm8510_socdev;
-+
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+
-+/*
-+ * WM8510 2 wire address is 0x1a
-+ */
-+#define I2C_DRIVERID_WM8510 0xfefe /* liam - need a proper id */
-+
-+static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END };
-+
-+/* Magic definition of all other variables and things */
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver wm8510_i2c_driver;
-+static struct i2c_client client_template;
-+
-+/* If the i2c layer weren't so broken, we could pass this kind of data
-+ around */
-+
-+static int wm8510_codec_probe(struct i2c_adapter *adap, int addr, int kind)
-+{
-+ struct snd_soc_device *socdev = wm8510_socdev;
-+ struct wm8510_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct i2c_client *i2c;
-+ int ret;
-+
-+ if (addr != setup->i2c_address)
-+ return -ENODEV;
-+
-+ client_template.adapter = adap;
-+ client_template.addr = addr;
-+
-+ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (i2c == NULL){
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+ memcpy(i2c, &client_template, sizeof(struct i2c_client));
-+ i2c_set_clientdata(i2c, codec);
-+ codec->control_data = i2c;
-+
-+ ret = i2c_attach_client(i2c);
-+ if(ret < 0) {
-+ err("failed to attach codec at addr %x\n", addr);
-+ goto err;
-+ }
-+
-+ ret = wm8510_init(socdev);
-+ if(ret < 0) {
-+ err("failed to initialise WM8510\n");
-+ goto err;
-+ }
-+ return ret;
-+
-+err:
-+ kfree(codec);
-+ kfree(i2c);
-+ return ret;
-+}
-+
-+static int wm8510_i2c_detach(struct i2c_client *client)
-+{
-+ struct snd_soc_codec *codec = i2c_get_clientdata(client);
-+ i2c_detach_client(client);
-+ kfree(codec->reg_cache);
-+ kfree(client);
-+ return 0;
-+}
-+
-+static int wm8510_i2c_attach(struct i2c_adapter *adap)
-+{
-+ return i2c_probe(adap, &addr_data, wm8510_codec_probe);
-+}
-+
-+/* corgi i2c codec control layer */
-+static struct i2c_driver wm8510_i2c_driver = {
-+ .driver = {
-+ .name = "WM8510 I2C Codec",
-+ .owner = THIS_MODULE,
-+ },
-+ .id = I2C_DRIVERID_WM8510,
-+ .attach_adapter = wm8510_i2c_attach,
-+ .detach_client = wm8510_i2c_detach,
-+ .command = NULL,
-+};
-+
-+static struct i2c_client client_template = {
-+ .name = "WM8510",
-+ .driver = &wm8510_i2c_driver,
-+};
-+#endif
-+
-+static int wm8510_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct wm8510_setup_data *setup;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+
-+ info("WM8510 Audio Codec %s", WM8510_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ wm8510_socdev = socdev;
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ if (setup->i2c_address) {
-+ normal_i2c[0] = setup->i2c_address;
-+ codec->hw_write = (hw_write_t)i2c_master_send;
-+ ret = i2c_add_driver(&wm8510_i2c_driver);
-+ if (ret != 0)
-+ printk(KERN_ERR "can't add i2c driver");
-+ }
-+#else
-+ /* Add other interfaces here */
-+#endif
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int wm8510_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ wm8510_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ i2c_del_driver(&wm8510_i2c_driver);
-+#endif
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8510 = {
-+ .probe = wm8510_probe,
-+ .remove = wm8510_remove,
-+ .suspend = wm8510_suspend,
-+ .resume = wm8510_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm8510);
-+
-+MODULE_DESCRIPTION("ASoC WM8510 driver");
-+MODULE_AUTHOR("Liam Girdwood");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8510.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8510.h
-@@ -0,0 +1,64 @@
-+/*
-+ * wm8510.h -- WM8510 Soc Audio driver
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef _WM8510_H
-+#define _WM8510_H
-+
-+/* WM8510 register space */
-+
-+#define WM8510_RESET 0x0
-+#define WM8510_POWER1 0x1
-+#define WM8510_POWER2 0x2
-+#define WM8510_POWER3 0x3
-+#define WM8510_IFACE 0x4
-+#define WM8510_COMP 0x5
-+#define WM8510_CLOCK 0x6
-+#define WM8510_ADD 0x7
-+#define WM8510_GPIO 0x8
-+#define WM8510_DAC 0xa
-+#define WM8510_DACVOL 0xb
-+#define WM8510_ADC 0xe
-+#define WM8510_ADCVOL 0xf
-+#define WM8510_EQ1 0x12
-+#define WM8510_EQ2 0x13
-+#define WM8510_EQ3 0x14
-+#define WM8510_EQ4 0x15
-+#define WM8510_EQ5 0x16
-+#define WM8510_DACLIM1 0x18
-+#define WM8510_DACLIM2 0x19
-+#define WM8510_NOTCH1 0x1b
-+#define WM8510_NOTCH2 0x1c
-+#define WM8510_NOTCH3 0x1d
-+#define WM8510_NOTCH4 0x1e
-+#define WM8510_ALC1 0x20
-+#define WM8510_ALC2 0x21
-+#define WM8510_ALC3 0x22
-+#define WM8510_NGATE 0x23
-+#define WM8510_PLLN 0x24
-+#define WM8510_PLLK1 0x25
-+#define WM8510_PLLK2 0x26
-+#define WM8510_PLLK3 0x27
-+#define WM8510_ATTEN 0x28
-+#define WM8510_INPUT 0x2c
-+#define WM8510_INPPGA 0x2d
-+#define WM8510_ADCBOOST 0x2f
-+#define WM8510_OUTPUT 0x31
-+#define WM8510_SPKMIX 0x32
-+#define WM8510_SPKVOL 0x36
-+#define WM8510_MONOMIX 0x38
-+
-+#define WM8510_CACHEREGNUM 57
-+
-+struct wm8510_setup_data {
-+ unsigned short i2c_address;
-+};
-+
-+extern struct snd_soc_codec_dai wm8510_dai;
-+extern struct snd_soc_codec_device soc_codec_dev_wm8510;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/imx/imx-ac97.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/imx/imx-ac97.c
-@@ -0,0 +1,281 @@
-+/*
-+ * imx-ssi.c -- SSI driver for Freescale IMX
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * Based on mxc-alsa-mc13783 (C) 2006 Freescale.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 29th Aug 2006 Initial version.
-+ *
-+ */
-+
-+#define IMX_AC97_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
-+ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |\
-+ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000)
-+
-+/* may need to expand this */
-+static struct snd_soc_dai_mode imx_ssi_ac97_modes[] = {
-+ {0, 0, SNDRV_PCM_FMTBIT_S16_LE, IMX_AC97_RATES},
-+ {0, 0, SNDRV_PCM_FMTBIT_S18_3LE, IMX_AC97_RATES},
-+ {0, 0, SNDRV_PCM_FMTBIT_S20_3LE, IMX_AC97_RATES},
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi1_pcm_stereo_out = {
-+ .name = "SSI1 PCM Stereo out",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = emi_2_per,
-+ .watermark_level = SDMA_TXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI1_STX0,
-+ .event_id = DMA_REQ_SSI1_TX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi1_pcm_stereo_in = {
-+ .name = "SSI1 PCM Stereo in",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = per_2_emi,
-+ .watermark_level = SDMA_RXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI1_SRX0,
-+ .event_id = DMA_REQ_SSI1_RX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi2_pcm_stereo_out = {
-+ .name = "SSI2 PCM Stereo out",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = per_2_emi,
-+ .watermark_level = SDMA_TXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI2_STX0,
-+ .event_id = DMA_REQ_SSI2_TX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi2_pcm_stereo_in = {
-+ .name = "SSI2 PCM Stereo in",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = per_2_emi,
-+ .watermark_level = SDMA_RXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI2_SRX0,
-+ .event_id = DMA_REQ_SSI2_RX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+static unsigned short imx_ssi_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
-+{
-+}
-+
-+static void imx_ssi_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
-+{
-+}
-+
-+static void imx_ssi_ac97_warm_reset(struct snd_ac97 *ac97)
-+{
-+}
-+
-+static void imx_ssi_ac97_cold_reset(struct snd_ac97 *ac97)
-+{
-+}
-+
-+struct snd_ac97_bus_ops soc_ac97_ops = {
-+ .read = imx_ssi_ac97_read,
-+ .write = imx_ssi_ac97_write,
-+ .warm_reset = imx_ssi_ac97_warm_reset,
-+ .reset = imx_ssi_ac97_cold_reset,
-+};
-+
-+
-+static intimx_ssi1_ac97_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+
-+
-+ return ret;
-+}
-+
-+static void imx_ssi1_ac97_remove(struct platform_device *pdev)
-+{
-+ /* shutdown SSI */
-+ if(rtd->cpu_dai->id == 0)
-+ SSI1_SCR &= ~SSI_SCR_SSIEN;
-+ else
-+ SSI2_SCR &= ~SSI_SCR_SSIEN;
-+ }
-+
-+}
-+
-+static int imx_ssi1_ac97_prepare(struct snd_pcm_substream *substream)
-+{
-+ // set vra
-+}
-+
-+static int imx_ssi_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if (!rtd->cpu_dai->active) {
-+
-+ }
-+
-+ return 0;
-+}
-+
-+static int imx_ssi1_trigger(struct snd_pcm_substream *substream, int cmd)
-+{
-+ int ret = 0;
-+
-+ switch (cmd) {
-+ case SNDRV_PCM_TRIGGER_START:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ SSI1_SCR |= SSI_SCR_TE;
-+ SSI1_SIER |= SSI_SIER_TDMAE;
-+ } else {
-+ SSI1_SCR |= SSI_SCR_RE;
-+ SSI1_SIER |= SSI_SIER_RDMAE;
-+ }
-+ SSI1_SCR |= SSI_SCR_SSIEN;
-+
-+ break;
-+ case SNDRV_PCM_TRIGGER_RESUME:
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ SSI1_SCR |= SSI_SCR_TE;
-+ else
-+ SSI1_SCR |= SSI_SCR_RE;
-+ break
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ SSI1_SCR &= ~SSI_SCR_TE;
-+ else
-+ SSI1_SCR &= ~SSI_SCR_RE;
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ }
-+
-+ return ret;
-+}
-+
-+static void imx_ssi_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+
-+}
-+
-+#ifdef CONFIG_PM
-+static int imx_ssi_suspend(struct platform_device *dev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ if(!dai->active)
-+ return 0;
-+
-+ if(rtd->cpu_dai->id == 0)
-+ SSI1_SCR &= ~SSI_SCR_SSIEN;
-+ else
-+ SSI2_SCR &= ~SSI_SCR_SSIEN;
-+
-+ return 0;
-+}
-+
-+static int imx_ssi_resume(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ if(!dai->active)
-+ return 0;
-+
-+ if(rtd->cpu_dai->id == 0)
-+ SSI1_SCR |= SSI_SCR_SSIEN;
-+ else
-+ SSI2_SCR |= SSI_SCR_SSIEN;
-+
-+ return 0;
-+}
-+
-+#else
-+#define imx_ssi_suspend NULL
-+#define imx_ssi_resume NULL
-+#endif
-+
-+static unsigned int imx_ssi_config_ac97_sysclk(struct snd_soc_cpu_dai *iface,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ return clk;
-+}
-+
-+struct snd_soc_cpu_dai imx_ssi_ac97_dai = {
-+ .name = "imx-ac97-1",
-+ .id = 0,
-+ .type = SND_SOC_DAI_AC97,
-+ .suspend = imx_ssi_suspend,
-+ .resume = imx_ssi_resume,
-+ .config_sysclk = imx_ssi_ac97_config_sysclk,
-+ .playback = {
-+ .channels_min = 2,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 2,
-+ .channels_max = 2,},
-+ .ops = {
-+ .probe = imx_ac97_probe,
-+ .remove = imx_ac97_shutdown,
-+ .trigger = imx_ssi1_trigger,
-+ .prepare = imx_ssi_ac97_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(imx_ssi_ac97_modes),
-+ .mode = imx_ssi_ac97_modes,},
-+},
-+{
-+ .name = "imx-ac97-2",
-+ .id = 1,
-+ .type = SND_SOC_DAI_AC97,
-+ .suspend = imx_ssi_suspend,
-+ .resume = imx_ssi_resume,
-+ .config_sysclk = imx_ssi_ac97_config_sysclk,
-+ .playback = {
-+ .channels_min = 2,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 2,
-+ .channels_max = 2,},
-+ .ops = {
-+ .probe = imx_ac97_probe,
-+ .remove = imx_ac97_shutdown,
-+ .trigger = imx_ssi1_trigger,
-+ .prepare = imx_ssi_ac97_prepare,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(imx_ssi_ac97_modes),
-+ .mode = imx_ssi_ac97_modes,},
-+};
-+
-+EXPORT_SYMBOL_GPL(imx_ssi_ac97_dai);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("i.MX ASoC AC97 driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/imx/imx-i2s.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/imx/imx-i2s.c
-@@ -0,0 +1,473 @@
-+/*
-+ * imx-ssi.c -- SSI driver for Freescale IMX
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * Based on mxc-alsa-mc13783 (C) 2006 Freescale.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 29th Aug 2006 Initial version.
-+ *
-+ */
-+
-+#define IMX_SSI_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J |\
-+ SND_SOC_DAIFMT_RIGHT_J | SND_SOC_DAIFMT_DSP__A |\
-+ SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBS_CFS |\
-+ SND_SOC_DAIFMT_CBM_CFS | SND_SOC_DAIFMT_CBS_CFM |\
-+ SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_NB_IF)
-+
-+#define IMX_SSI_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define IMX_SSI_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | \
-+ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | \
-+ SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | \
-+ SNDRV_PCM_RATE_96000)
-+
-+#define IMX_SSI_BITS \
-+ (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
-+ SNDRV_PCM_FMTBIT_S24_LE)
-+
-+static struct snd_soc_dai_mode imx_ssi_pcm_modes[] = {
-+
-+ /* frame master and clock slave mode */
-+ {
-+ .fmt = IMX_SSI_DAIFMT | SND_SOC_DAIFMT_CBM_CFS,
-+ .tdm = SND_SOC_DAITDM_LRDW(0,0),
-+ .pcmfmt = IMX_SSI_BITS,
-+ .pcmrate = IMX_SSI_RATES,
-+ .pcmdir = IMX_SSI_DIR,
-+ .flags = SND_SOC_DAI_BFS_RCW,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSBW(1) | SND_SOC_FSBW(2),
-+ },
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi1_pcm_stereo_out = {
-+ .name = "SSI1 PCM Stereo out",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = emi_2_per,
-+ .watermark_level = SDMA_TXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI1_STX0,
-+ .event_id = DMA_REQ_SSI1_TX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi1_pcm_stereo_in = {
-+ .name = "SSI1 PCM Stereo in",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = per_2_emi,
-+ .watermark_level = SDMA_RXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI1_SRX0,
-+ .event_id = DMA_REQ_SSI1_RX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi2_pcm_stereo_out = {
-+ .name = "SSI2 PCM Stereo out",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = per_2_emi,
-+ .watermark_level = SDMA_TXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI2_STX0,
-+ .event_id = DMA_REQ_SSI2_TX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+static imx_pcm_dma_params_t imx_ssi2_pcm_stereo_in = {
-+ .name = "SSI2 PCM Stereo in",
-+ .params = {
-+ .bd_number = 1,
-+ .transfer_type = per_2_emi,
-+ .watermark_level = SDMA_RXFIFO_WATERMARK,
-+ .word_size = TRANSFER_16BIT, // maybe add this in setup func
-+ .per_address = SSI2_SRX0,
-+ .event_id = DMA_REQ_SSI2_RX1,
-+ .peripheral_type = SSI,
-+ },
-+};
-+
-+
-+static int imx_ssi_startup(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ if (!rtd->cpu_dai->active) {
-+
-+ }
-+
-+ return 0;
-+}
-+
-+static int imx_ssi1_hw_tx_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 bfs, div;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->cpu_dai->dai_runtime.bfs);
-+
-+ SSI1_STCR = 0;
-+ SSI1_STCCR = 0;
-+
-+ /* DAI mode */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ SSI1_STCR |= SSI_STCR_TSCKP | SSI_STCR_TFSI |
-+ SSI_STCR_TEFS | SSI_STCR_TXBIT0;
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ SSI1_STCR |= SSI_STCR_TSCKP | SSI_STCR_TFSI | SSI_STCR_TXBIT0;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_B:
-+ SSI1_STCR |= SSI_STCR_TEFS; // data 1 bit after sync
-+ case SND_SOC_DAIFMT_DSP_A:
-+ SSI1_STCR |= SSI_STCR_TFSL; // frame is 1 bclk long
-+
-+ /* DAI clock inversion */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ SSI1_STCR |= SSI_STCR_TFSI | SSI_STCR_TSCKP;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ SSI1_STCR |= SSI_STCR_TSCKP;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ SSI1_STCR |= SSI_STCR_TFSI;
-+ break;
-+ }
-+ break;
-+ }
-+
-+ /* DAI data (word) size */
-+ switch(rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ SSI1_STCCR |= SSI_STCCR_WL(16);
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ SSI1_STCCR |= SSI_STCCR_WL(20);
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ SSI1_STCCR |= SSI_STCCR_WL(24);
-+ break;
-+ }
-+
-+ /* DAI clock master masks */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK){
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ SSI1_STCR |= SSI_STCR_TFDIR | SSI_STCR_TXDIR;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFM:
-+ SSI1_STCR |= SSI_STCR_TFDIR;
-+ break;
-+ case SND_SOC_DAIFMT_CBM_CFS:
-+ SSI1_STCR |= SSI_STCR_TXDIR;
-+ break;
-+ }
-+
-+ /* DAI BCLK ratio to SYSCLK / MCLK */
-+ /* prescaler modulus - todo */
-+ switch (bfs) {
-+ case 2:
-+ break;
-+ case 4:
-+ break;
-+ case 8:
-+ break;
-+ case 16:
-+ break;
-+ }
-+
-+ /* TDM - todo, only fifo 0 atm */
-+ SSI1_STCR |= SSI_STCR_TFEN0;
-+ SSI1_STCCR |= SSI_STCCR_DC(params_channels(params));
-+
-+ return 0;
-+}
-+
-+static int imx_ssi1_hw_rx_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ u16 bfs, div;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->cpu_dai->dai_runtime.bfs);
-+
-+ SSI1_SRCR = 0;
-+ SSI1_SRCCR = 0;
-+
-+ /* DAI mode */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ SSI1_SRCR |= SSI_SRCR_RSCKP | SSI_SRCR_RFSI |
-+ SSI_STCR_REFS | SSI_STCR_RXBIT0;
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ SSI1_SRCR |= SSI_SRCR_RSCKP | SSI_SRCR_RFSI | SSI_SRCR_RXBIT0;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_B:
-+ SSI1_SRCR |= SSI_SRCR_REFS; // data 1 bit after sync
-+ case SND_SOC_DAIFMT_DSP_A:
-+ SSI1_SRCR |= SSI_SRCR_RFSL; // frame is 1 bclk long
-+
-+ /* DAI clock inversion */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_IB_IF:
-+ SSI1_SRCR |= SSI_SRCR_TFSI | SSI_SRCR_TSCKP;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ SSI1_SRCR |= SSI_SRCR_RSCKP;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ SSI1_SRCR |= SSI_SRCR_RFSI;
-+ break;
-+ }
-+ break;
-+ }
-+
-+ /* DAI data (word) size */
-+ switch(rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ SSI1_SRCCR |= SSI_SRCCR_WL(16);
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ SSI1_SRCCR |= SSI_SRCCR_WL(20);
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ SSI1_SRCCR |= SSI_SRCCR_WL(24);
-+ break;
-+ }
-+
-+ /* DAI clock master masks */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK){
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ SSI1_SRCR |= SSI_SRCR_RFDIR | SSI_SRCR_RXDIR;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFM:
-+ SSI1_SRCR |= SSI_SRCR_RFDIR;
-+ break;
-+ case SND_SOC_DAIFMT_CBM_CFS:
-+ SSI1_SRCR |= SSI_SRCR_RXDIR;
-+ break;
-+ }
-+
-+ /* DAI BCLK ratio to SYSCLK / MCLK */
-+ /* prescaler modulus - todo */
-+ switch (bfs) {
-+ case 2:
-+ break;
-+ case 4:
-+ break;
-+ case 8:
-+ break;
-+ case 16:
-+ break;
-+ }
-+
-+ /* TDM - todo, only fifo 0 atm */
-+ SSI1_SRCR |= SSI_SRCR_RFEN0;
-+ SSI1_SRCCR |= SSI_SRCCR_DC(params_channels(params));
-+
-+ return 0;
-+}
-+
-+static int imx_ssi1_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ /* clear register if not enabled */
-+ if(!(SSI1_SCR & SSI_SCR_SSIEN))
-+ SSI1_SCR = 0;
-+
-+ /* async */
-+ if (rtd->cpu_dai->flags & SND_SOC_DAI_ASYNC)
-+ SSI1_SCR |= SSI_SCR_SYN;
-+
-+ /* DAI mode */
-+ switch(rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ SSI1_SCR |= SSI_SCR_NET;
-+ break;
-+ }
-+
-+ /* TDM - to complete */
-+
-+ /* Tx/Rx config */
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ return imx_ssi1_hw_tx_params(substream, params);
-+ } else {
-+ return imx_ssi1_hw_rx_params(substream, params);
-+ }
-+}
-+
-+
-+
-+static int imx_ssi1_trigger(struct snd_pcm_substream *substream, int cmd)
-+{
-+ int ret = 0;
-+
-+ switch (cmd) {
-+ case SNDRV_PCM_TRIGGER_START:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ SSI1_SCR |= SSI_SCR_TE;
-+ SSI1_SIER |= SSI_SIER_TDMAE;
-+ } else {
-+ SSI1_SCR |= SSI_SCR_RE;
-+ SSI1_SIER |= SSI_SIER_RDMAE;
-+ }
-+ SSI1_SCR |= SSI_SCR_SSIEN;
-+
-+ break;
-+ case SNDRV_PCM_TRIGGER_RESUME:
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ SSI1_SCR |= SSI_SCR_TE;
-+ else
-+ SSI1_SCR |= SSI_SCR_RE;
-+ break
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ SSI1_SCR &= ~SSI_SCR_TE;
-+ else
-+ SSI1_SCR &= ~SSI_SCR_RE;
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ }
-+
-+ return ret;
-+}
-+
-+static void imx_ssi_shutdown(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+
-+ /* shutdown SSI */
-+ if (!rtd->cpu_dai->active) {
-+ if(rtd->cpu_dai->id == 0)
-+ SSI1_SCR &= ~SSI_SCR_SSIEN;
-+ else
-+ SSI2_SCR &= ~SSI_SCR_SSIEN;
-+ }
-+}
-+
-+#ifdef CONFIG_PM
-+static int imx_ssi_suspend(struct platform_device *dev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ if(!dai->active)
-+ return 0;
-+
-+ if(rtd->cpu_dai->id == 0)
-+ SSI1_SCR &= ~SSI_SCR_SSIEN;
-+ else
-+ SSI2_SCR &= ~SSI_SCR_SSIEN;
-+
-+ return 0;
-+}
-+
-+static int imx_ssi_resume(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+ if(!dai->active)
-+ return 0;
-+
-+ if(rtd->cpu_dai->id == 0)
-+ SSI1_SCR |= SSI_SCR_SSIEN;
-+ else
-+ SSI2_SCR |= SSI_SCR_SSIEN;
-+
-+ return 0;
-+}
-+
-+#else
-+#define imx_ssi_suspend NULL
-+#define imx_ssi_resume NULL
-+#endif
-+
-+static unsigned int imx_ssi_config_pcm_sysclk(struct snd_soc_cpu_dai *iface,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ return clk;
-+}
-+
-+struct snd_soc_cpu_dai imx_ssi_pcm_dai = {
-+ .name = "imx-i2s-1",
-+ .id = 0,
-+ .type = SND_SOC_DAI_I2S,
-+ .suspend = imx_ssi_suspend,
-+ .resume = imx_ssi_resume,
-+ .config_sysclk = imx_ssi_config_pcm_sysclk,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = imx_ssi_startup,
-+ .shutdown = imx_ssi_shutdown,
-+ .trigger = imx_ssi1_trigger,
-+ .hw_params = imx_ssi1_pcm_hw_params,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(imx_ssi_modes),
-+ .mode = imx_ssi_modes,},
-+},
-+{
-+ .name = "imx-i2s-2",
-+ .id = 1,
-+ .type = SND_SOC_DAI_I2S,
-+ .suspend = imx_ssi_suspend,
-+ .resume = imx_ssi_resume,
-+ .config_sysclk = imx_ssi_config_pcm_sysclk,
-+ .playback = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 1,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = imx_ssi_startup,
-+ .shutdown = imx_ssi_shutdown,
-+ .trigger = imx_ssi1_trigger,
-+ .hw_params = imx_ssi1_pcm_hw_params,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(imx_ssi_modes),
-+ .mode = imx_ssi_modes,},
-+};
-+
-+
-+EXPORT_SYMBOL_GPL(imx_ssi_i2s_dai);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("i.MX ASoC I2S driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/include/linux/i2c-id.h
-===================================================================
---- linux-2.6.17/include/linux/i2c-id.h.orig 2006-11-25 00:15:33.571185017 +0100
-+++ linux-2.6.17/include/linux/i2c-id.h 2006-11-25 00:17:31.017877925 +0100
-@@ -113,6 +113,9 @@
- #define I2C_DRIVERID_PCF8563 83 /* Philips PCF8563 RTC */
- #define I2C_DRIVERID_RS5C372 84 /* Ricoh RS5C372 RTC */
-
-+#define I2C_DRIVERID_WM8731 89 /* Wolfson WM8731 audio codec */
-+#define I2C_DRIVERID_WM8750 90 /* Wolfson WM8750 audio codec */
-+
- #define I2C_DRIVERID_I2CDEV 900
- #define I2C_DRIVERID_ARP 902 /* SMBus ARP Client */
- #define I2C_DRIVERID_ALERT 903 /* SMBus Alert Responder Client */
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8976.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8976.c
-@@ -0,0 +1,953 @@
-+/*
-+ * wm8976.c -- WM8976 ALSA Soc Audio driver
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/i2c.h>
-+#include <linux/platform_device.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <sound/soc-dapm.h>
-+#include <sound/initval.h>
-+
-+#include "wm8976.h"
-+
-+#define AUDIO_NAME "wm8976"
-+#define WM8976_VERSION "0.2"
-+
-+/*
-+ * Debug
-+ */
-+
-+#define WM8976_DEBUG 0
-+
-+#ifdef WM8976_DEBUG
-+#define dbg(format, arg...) \
-+ printk(KERN_DEBUG AUDIO_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...) do {} while (0)
-+#endif
-+#define err(format, arg...) \
-+ printk(KERN_ERR AUDIO_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) \
-+ printk(KERN_INFO AUDIO_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) \
-+ printk(KERN_WARNING AUDIO_NAME ": " format "\n" , ## arg)
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8976;
-+
-+/*
-+ * wm8976 register cache
-+ * We can't read the WM8976 register space when we are
-+ * using 2 wire for device control, so we cache them instead.
-+ */
-+static const u16 wm8976_reg[WM8976_CACHEREGNUM] = {
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0050, 0x0000, 0x0140, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x00ff,
-+ 0x00ff, 0x0000, 0x0100, 0x00ff,
-+ 0x00ff, 0x0000, 0x012c, 0x002c,
-+ 0x002c, 0x002c, 0x002c, 0x0000,
-+ 0x0032, 0x0000, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0038, 0x000b, 0x0032, 0x0000,
-+ 0x0008, 0x000c, 0x0093, 0x00e9,
-+ 0x0000, 0x0000, 0x0000, 0x0000,
-+ 0x0033, 0x0010, 0x0010, 0x0100,
-+ 0x0100, 0x0002, 0x0001, 0x0001,
-+ 0x0039, 0x0039, 0x0039, 0x0039,
-+ 0x0001, 0x0001,
-+};
-+
-+#define WM8976_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_RIGHT_J | \
-+ SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_NF | \
-+ SND_SOC_DAIFMT_NB_IF | SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_IB_IF)
-+
-+#define WM8976_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define WM8976_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000)
-+
-+#define WM8976_PCM_FORMATS \
-+ (SNDRV_PCM_FORMAT_S16_LE | SNDRV_PCM_FORMAT_S20_3LE | \
-+ SNDRV_PCM_FORMAT_S24_3LE | SNDRV_PCM_FORMAT_S24_LE | \
-+ SNDRV_PCM_FORMAT_S32_LE)
-+
-+#define WM8976_BCLK \
-+ (SND_SOC_FSBD(1) | SND_SOC_FSBD(2) | SND_SOC_FSBD(4) | SND_SOC_FSBD(8) |\
-+ SND_SOC_FSBD(16) | SND_SOC_FSBD(32))
-+
-+static struct snd_soc_dai_mode wm8976_modes[] = {
-+ /* codec frame and clock master modes */
-+ {
-+ .fmt = WM8976_DAIFMT | SND_SOC_DAIFMT_CBM_CFM,
-+ .pcmfmt = WM8976_PCM_FORMATS,
-+ .pcmrate = WM8976_RATES,
-+ .pcmdir = WM8976_DIR,
-+ .flags = SND_SOC_DAI_BFS_DIV,
-+ .fs = 256,
-+ .bfs = WM8976_BCLK,
-+ },
-+
-+ /* codec frame and clock slave modes */
-+ {
-+ .fmt = WM8976_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = WM8976_PCM_FORMATS,
-+ .pcmrate = WM8976_RATES,
-+ .pcmdir = WM8976_DIR,
-+ .fs = SND_SOC_FS_ALL,
-+ .bfs = SND_SOC_FSB_ALL,
-+ },
-+};
-+
-+/*
-+ * read wm8976 register cache
-+ */
-+static inline unsigned int wm8976_read_reg_cache(struct snd_soc_codec *codec,
-+ unsigned int reg)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg == WM8976_RESET)
-+ return 0;
-+ if (reg >= WM8976_CACHEREGNUM)
-+ return -1;
-+ return cache[reg];
-+}
-+
-+/*
-+ * write wm8976 register cache
-+ */
-+static inline void wm8976_write_reg_cache(struct snd_soc_codec *codec,
-+ u16 reg, unsigned int value)
-+{
-+ u16 *cache = codec->reg_cache;
-+ if (reg >= WM8976_CACHEREGNUM)
-+ return;
-+ cache[reg] = value;
-+}
-+
-+/*
-+ * write to the WM8976 register space
-+ */
-+static int wm8976_write(struct snd_soc_codec *codec, unsigned int reg,
-+ unsigned int value)
-+{
-+ u8 data[2];
-+
-+ /* data is
-+ * D15..D9 WM8976 register offset
-+ * D8...D0 register data
-+ */
-+ data[0] = (reg << 1) | ((value >> 8) & 0x0001);
-+ data[1] = value & 0x00ff;
-+
-+ wm8976_write_reg_cache (codec, reg, value);
-+ if (codec->hw_write(codec->control_data, data, 2) == 2)
-+ return 0;
-+ else
-+ return -1;
-+}
-+
-+#define wm8976_reset(c) wm8976_write(c, WM8976_RESET, 0)
-+
-+static const char *wm8976_companding[] = {"Off", "NC", "u-law", "A-law" };
-+static const char *wm8976_deemp[] = {"None", "32kHz", "44.1kHz", "48kHz" };
-+static const char *wm8976_eqmode[] = {"Capture", "Playback" };
-+static const char *wm8976_bw[] = {"Narrow", "Wide" };
-+static const char *wm8976_eq1[] = {"80Hz", "105Hz", "135Hz", "175Hz" };
-+static const char *wm8976_eq2[] = {"230Hz", "300Hz", "385Hz", "500Hz" };
-+static const char *wm8976_eq3[] = {"650Hz", "850Hz", "1.1kHz", "1.4kHz" };
-+static const char *wm8976_eq4[] = {"1.8kHz", "2.4kHz", "3.2kHz", "4.1kHz" };
-+static const char *wm8976_eq5[] = {"5.3kHz", "6.9kHz", "9kHz", "11.7kHz" };
-+static const char *wm8976_alc[] =
-+ {"ALC both on", "ALC left only", "ALC right only", "Limiter" };
-+
-+static const struct soc_enum wm8976_enum[] = {
-+ SOC_ENUM_SINGLE(WM8976_COMP, 1, 4, wm8976_companding), /* adc */
-+ SOC_ENUM_SINGLE(WM8976_COMP, 3, 4, wm8976_companding), /* dac */
-+ SOC_ENUM_SINGLE(WM8976_DAC, 4, 4, wm8976_deemp),
-+ SOC_ENUM_SINGLE(WM8976_EQ1, 8, 2, wm8976_eqmode),
-+
-+ SOC_ENUM_SINGLE(WM8976_EQ1, 5, 4, wm8976_eq1),
-+ SOC_ENUM_SINGLE(WM8976_EQ2, 8, 2, wm8976_bw),
-+ SOC_ENUM_SINGLE(WM8976_EQ2, 5, 4, wm8976_eq2),
-+ SOC_ENUM_SINGLE(WM8976_EQ3, 8, 2, wm8976_bw),
-+
-+ SOC_ENUM_SINGLE(WM8976_EQ3, 5, 4, wm8976_eq3),
-+ SOC_ENUM_SINGLE(WM8976_EQ4, 8, 2, wm8976_bw),
-+ SOC_ENUM_SINGLE(WM8976_EQ4, 5, 4, wm8976_eq4),
-+ SOC_ENUM_SINGLE(WM8976_EQ5, 8, 2, wm8976_bw),
-+
-+ SOC_ENUM_SINGLE(WM8976_EQ5, 5, 4, wm8976_eq5),
-+ SOC_ENUM_SINGLE(WM8976_ALC3, 8, 2, wm8976_alc),
-+};
-+
-+static const struct snd_kcontrol_new wm8976_snd_controls[] = {
-+SOC_SINGLE("Digital Loopback Switch", WM8976_COMP, 0, 1, 0),
-+
-+SOC_ENUM("ADC Companding", wm8976_enum[0]),
-+SOC_ENUM("DAC Companding", wm8976_enum[1]),
-+
-+SOC_SINGLE("Jack Detection Enable", WM8976_JACK1, 6, 1, 0),
-+
-+SOC_DOUBLE("DAC Inversion Switch", WM8976_DAC, 0, 1, 1, 0),
-+
-+SOC_DOUBLE_R("Headphone Playback Volume", WM8976_DACVOLL, WM8976_DACVOLR, 0, 127, 0),
-+
-+SOC_SINGLE("High Pass Filter Switch", WM8976_ADC, 8, 1, 0),
-+SOC_SINGLE("High Pass Filter Switch", WM8976_ADC, 8, 1, 0),
-+SOC_SINGLE("High Pass Cut Off", WM8976_ADC, 4, 7, 0),
-+
-+SOC_DOUBLE("ADC Inversion Switch", WM8976_ADC, 0, 1, 1, 0),
-+
-+SOC_SINGLE("Capture Volume", WM8976_ADCVOL, 0, 127, 0),
-+
-+SOC_ENUM("Equaliser Function", wm8976_enum[3]),
-+SOC_ENUM("EQ1 Cut Off", wm8976_enum[4]),
-+SOC_SINGLE("EQ1 Volume", WM8976_EQ1, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ2 Bandwith", wm8976_enum[5]),
-+SOC_ENUM("EQ2 Cut Off", wm8976_enum[6]),
-+SOC_SINGLE("EQ2 Volume", WM8976_EQ2, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ3 Bandwith", wm8976_enum[7]),
-+SOC_ENUM("EQ3 Cut Off", wm8976_enum[8]),
-+SOC_SINGLE("EQ3 Volume", WM8976_EQ3, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ4 Bandwith", wm8976_enum[9]),
-+SOC_ENUM("EQ4 Cut Off", wm8976_enum[10]),
-+SOC_SINGLE("EQ4 Volume", WM8976_EQ4, 0, 31, 1),
-+
-+SOC_ENUM("Equaliser EQ5 Bandwith", wm8976_enum[11]),
-+SOC_ENUM("EQ5 Cut Off", wm8976_enum[12]),
-+SOC_SINGLE("EQ5 Volume", WM8976_EQ5, 0, 31, 1),
-+
-+SOC_SINGLE("DAC Playback Limiter Switch", WM8976_DACLIM1, 8, 1, 0),
-+SOC_SINGLE("DAC Playback Limiter Decay", WM8976_DACLIM1, 4, 15, 0),
-+SOC_SINGLE("DAC Playback Limiter Attack", WM8976_DACLIM1, 0, 15, 0),
-+
-+SOC_SINGLE("DAC Playback Limiter Threshold", WM8976_DACLIM2, 4, 7, 0),
-+SOC_SINGLE("DAC Playback Limiter Boost", WM8976_DACLIM2, 0, 15, 0),
-+
-+SOC_SINGLE("ALC Enable Switch", WM8976_ALC1, 8, 1, 0),
-+SOC_SINGLE("ALC Capture Max Gain", WM8976_ALC1, 3, 7, 0),
-+SOC_SINGLE("ALC Capture Min Gain", WM8976_ALC1, 0, 7, 0),
-+
-+SOC_SINGLE("ALC Capture ZC Switch", WM8976_ALC2, 8, 1, 0),
-+SOC_SINGLE("ALC Capture Hold", WM8976_ALC2, 4, 7, 0),
-+SOC_SINGLE("ALC Capture Target", WM8976_ALC2, 0, 15, 0),
-+
-+SOC_ENUM("ALC Capture Mode", wm8976_enum[13]),
-+SOC_SINGLE("ALC Capture Decay", WM8976_ALC3, 4, 15, 0),
-+SOC_SINGLE("ALC Capture Attack", WM8976_ALC3, 0, 15, 0),
-+
-+SOC_SINGLE("ALC Capture Noise Gate Switch", WM8976_NGATE, 3, 1, 0),
-+SOC_SINGLE("ALC Capture Noise Gate Threshold", WM8976_NGATE, 0, 7, 0),
-+
-+SOC_SINGLE("Capture PGA ZC Switch", WM8976_INPPGA, 7, 1, 0),
-+SOC_SINGLE("Capture PGA Volume", WM8976_INPPGA, 0, 63, 0),
-+
-+SOC_DOUBLE_R("Headphone Playback ZC Switch", WM8976_HPVOLL, WM8976_HPVOLR, 7, 1, 0),
-+SOC_DOUBLE_R("Headphone Playback Switch", WM8976_HPVOLL, WM8976_HPVOLR, 6, 1, 1),
-+SOC_DOUBLE_R("Headphone Playback Volume", WM8976_HPVOLL, WM8976_HPVOLR, 0, 63, 0),
-+
-+SOC_DOUBLE_R("Speaker Playback ZC Switch", WM8976_SPKVOLL, WM8976_SPKVOLR, 7, 1, 0),
-+SOC_DOUBLE_R("Speaker Playback Switch", WM8976_SPKVOLL, WM8976_SPKVOLR, 6, 1, 1),
-+SOC_DOUBLE_R("Speaker Playback Volume", WM8976_SPKVOLL, WM8976_SPKVOLR, 0, 63, 0),
-+
-+SOC_SINGLE("Capture Boost(+20dB)", WM8976_ADCBOOST, 8, 1, 0),
-+};
-+
-+/* add non dapm controls */
-+static int wm8976_add_controls(struct snd_soc_codec *codec)
-+{
-+ int err, i;
-+
-+ for (i = 0; i < ARRAY_SIZE(wm8976_snd_controls); i++) {
-+ err = snd_ctl_add(codec->card,
-+ snd_soc_cnew(&wm8976_snd_controls[i],codec, NULL));
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ return 0;
-+}
-+
-+/* Left Output Mixer */
-+static const snd_kcontrol_new_t wm8976_left_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Right PCM Playback Switch", WM8976_OUTPUT, 6, 1, 1),
-+SOC_DAPM_SINGLE("Left PCM Playback Switch", WM8976_MIXL, 0, 1, 1),
-+SOC_DAPM_SINGLE("Line Bypass Switch", WM8976_MIXL, 1, 1, 0),
-+SOC_DAPM_SINGLE("Aux Playback Switch", WM8976_MIXL, 5, 1, 0),
-+};
-+
-+/* Right Output Mixer */
-+static const snd_kcontrol_new_t wm8976_right_mixer_controls[] = {
-+SOC_DAPM_SINGLE("Left PCM Playback Switch", WM8976_OUTPUT, 5, 1, 1),
-+SOC_DAPM_SINGLE("Right PCM Playback Switch", WM8976_MIXR, 0, 1, 1),
-+SOC_DAPM_SINGLE("Line Bypass Switch", WM8976_MIXR, 1, 1, 0),
-+SOC_DAPM_SINGLE("Aux Playback Switch", WM8976_MIXR, 5, 1, 0),
-+};
-+
-+/* Left AUX Input boost vol */
-+static const snd_kcontrol_new_t wm8976_laux_boost_controls =
-+SOC_DAPM_SINGLE("Aux Volume", WM8976_ADCBOOST, 0, 3, 0);
-+
-+/* Left Input boost vol */
-+static const snd_kcontrol_new_t wm8976_lmic_boost_controls =
-+SOC_DAPM_SINGLE("Input Volume", WM8976_ADCBOOST, 4, 3, 0);
-+
-+/* Left Aux In to PGA */
-+static const snd_kcontrol_new_t wm8976_laux_capture_boost_controls =
-+SOC_DAPM_SINGLE("Capture Switch", WM8976_ADCBOOST, 8, 1, 0);
-+
-+/* Left Input P In to PGA */
-+static const snd_kcontrol_new_t wm8976_lmicp_capture_boost_controls =
-+SOC_DAPM_SINGLE("Input P Capture Boost Switch", WM8976_INPUT, 0, 1, 0);
-+
-+/* Left Input N In to PGA */
-+static const snd_kcontrol_new_t wm8976_lmicn_capture_boost_controls =
-+SOC_DAPM_SINGLE("Input N Capture Boost Switch", WM8976_INPUT, 1, 1, 0);
-+
-+// TODO Widgets
-+static const struct snd_soc_dapm_widget wm8976_dapm_widgets[] = {
-+#if 0
-+//SND_SOC_DAPM_MUTE("Mono Mute", WM8976_MONOMIX, 6, 0),
-+//SND_SOC_DAPM_MUTE("Speaker Mute", WM8976_SPKMIX, 6, 0),
-+
-+SND_SOC_DAPM_MIXER("Speaker Mixer", WM8976_POWER3, 2, 0,
-+ &wm8976_speaker_mixer_controls[0],
-+ ARRAY_SIZE(wm8976_speaker_mixer_controls)),
-+SND_SOC_DAPM_MIXER("Mono Mixer", WM8976_POWER3, 3, 0,
-+ &wm8976_mono_mixer_controls[0],
-+ ARRAY_SIZE(wm8976_mono_mixer_controls)),
-+SND_SOC_DAPM_DAC("DAC", "HiFi Playback", WM8976_POWER3, 0, 0),
-+SND_SOC_DAPM_ADC("ADC", "HiFi Capture", WM8976_POWER3, 0, 0),
-+SND_SOC_DAPM_PGA("Aux Input", WM8976_POWER1, 6, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("SpkN Out", WM8976_POWER3, 5, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("SpkP Out", WM8976_POWER3, 6, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Mono Out", WM8976_POWER3, 7, 0, NULL, 0),
-+SND_SOC_DAPM_PGA("Mic PGA", WM8976_POWER2, 2, 0, NULL, 0),
-+
-+SND_SOC_DAPM_PGA("Aux Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8976_aux_boost_controls, 1),
-+SND_SOC_DAPM_PGA("Mic Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8976_mic_boost_controls, 1),
-+SND_SOC_DAPM_SWITCH("Capture Boost", SND_SOC_NOPM, 0, 0,
-+ &wm8976_capture_boost_controls),
-+
-+SND_SOC_DAPM_MIXER("Boost Mixer", WM8976_POWER2, 4, 0, NULL, 0),
-+
-+SND_SOC_DAPM_MICBIAS("Mic Bias", WM8976_POWER1, 4, 0),
-+
-+SND_SOC_DAPM_INPUT("MICN"),
-+SND_SOC_DAPM_INPUT("MICP"),
-+SND_SOC_DAPM_INPUT("AUX"),
-+SND_SOC_DAPM_OUTPUT("MONOOUT"),
-+SND_SOC_DAPM_OUTPUT("SPKOUTP"),
-+SND_SOC_DAPM_OUTPUT("SPKOUTN"),
-+#endif
-+};
-+
-+static const char *audio_map[][3] = {
-+ /* Mono output mixer */
-+ {"Mono Mixer", "PCM Playback Switch", "DAC"},
-+ {"Mono Mixer", "Aux Playback Switch", "Aux Input"},
-+ {"Mono Mixer", "Line Bypass Switch", "Boost Mixer"},
-+
-+ /* Speaker output mixer */
-+ {"Speaker Mixer", "PCM Playback Switch", "DAC"},
-+ {"Speaker Mixer", "Aux Playback Switch", "Aux Input"},
-+ {"Speaker Mixer", "Line Bypass Switch", "Boost Mixer"},
-+
-+ /* Outputs */
-+ {"Mono Out", NULL, "Mono Mixer"},
-+ {"MONOOUT", NULL, "Mono Out"},
-+ {"SpkN Out", NULL, "Speaker Mixer"},
-+ {"SpkP Out", NULL, "Speaker Mixer"},
-+ {"SPKOUTN", NULL, "SpkN Out"},
-+ {"SPKOUTP", NULL, "SpkP Out"},
-+
-+ /* Boost Mixer */
-+ {"Boost Mixer", NULL, "ADC"},
-+ {"Capture Boost Switch", "Aux Capture Boost Switch", "AUX"},
-+ {"Aux Boost", "Aux Volume", "Boost Mixer"},
-+ {"Capture Boost", "Capture Switch", "Boost Mixer"},
-+ {"Mic Boost", "Mic Volume", "Boost Mixer"},
-+
-+ /* Inputs */
-+ {"MICP", NULL, "Mic Boost"},
-+ {"MICN", NULL, "Mic PGA"},
-+ {"Mic PGA", NULL, "Capture Boost"},
-+ {"AUX", NULL, "Aux Input"},
-+
-+ /* */
-+
-+ /* terminator */
-+ {NULL, NULL, NULL},
-+};
-+
-+static int wm8976_add_widgets(struct snd_soc_codec *codec)
-+{
-+ int i;
-+
-+ for(i = 0; i < ARRAY_SIZE(wm8976_dapm_widgets); i++) {
-+ snd_soc_dapm_new_control(codec, &wm8976_dapm_widgets[i]);
-+ }
-+
-+ /* set up audio path map */
-+ for(i = 0; audio_map[i][0] != NULL; i++) {
-+ snd_soc_dapm_connect_input(codec, audio_map[i][0], audio_map[i][1],
-+ audio_map[i][2]);
-+ }
-+
-+ snd_soc_dapm_new_widgets(codec);
-+ return 0;
-+}
-+
-+struct pll_ {
-+ unsigned int in_hz, out_hz;
-+ unsigned int pre:4; /* prescale - 1 */
-+ unsigned int n:4;
-+ unsigned int k;
-+};
-+
-+struct pll_ pll[] = {
-+ {12000000, 11289600, 0, 7, 0x86c220},
-+ {12000000, 12288000, 0, 8, 0x3126e8},
-+ {13000000, 11289600, 0, 6, 0xf28bd4},
-+ {13000000, 12288000, 0, 7, 0x8fd525},
-+ {12288000, 11289600, 0, 7, 0x59999a},
-+ {11289600, 12288000, 0, 8, 0x80dee9},
-+ /* TODO: liam - add more entries */
-+};
-+
-+static int set_pll(struct snd_soc_codec *codec, unsigned int in,
-+ unsigned int out)
-+{
-+ int i;
-+ u16 reg;
-+
-+ if(out == 0) {
-+ reg = wm8976_read_reg_cache(codec, WM8976_POWER1);
-+ wm8976_write(codec, WM8976_POWER1, reg & 0x1df);
-+ return 0;
-+ }
-+
-+ for(i = 0; i < ARRAY_SIZE(pll); i++) {
-+ if (in == pll[i].in_hz && out == pll[i].out_hz) {
-+ wm8976_write(codec, WM8976_PLLN, (pll[i].pre << 4) | pll[i].n);
-+ wm8976_write(codec, WM8976_PLLK1, pll[i].k >> 18);
-+ wm8976_write(codec, WM8976_PLLK1, (pll[i].k >> 9) && 0x1ff);
-+ wm8976_write(codec, WM8976_PLLK1, pll[i].k && 0x1ff);
-+ reg = wm8976_read_reg_cache(codec, WM8976_POWER1);
-+ wm8976_write(codec, WM8976_POWER1, reg | 0x020);
-+ return 0;
-+ }
-+ }
-+ return -EINVAL;
-+}
-+
-+/* mclk dividers * 2 */
-+static unsigned char mclk_div[] = {2, 3, 4, 6, 8, 12, 16, 24};
-+
-+/* we need 256FS to drive the DAC's and ADC's */
-+static unsigned int wm8976_config_sysclk(struct snd_soc_codec_dai *dai,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ int i, j, best_clk = info->fs * info->rate;
-+
-+ /* can we run at this clk without the PLL ? */
-+ for (i = 0; i < ARRAY_SIZE(mclk_div); i++) {
-+ if ((best_clk >> 1) * mclk_div[i] == clk) {
-+ dai->pll_in = 0;
-+ dai->clk_div = mclk_div[i];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+
-+ /* now check for PLL support */
-+ for (i = 0; i < ARRAY_SIZE(pll); i++) {
-+ if (pll[i].in_hz == clk) {
-+ for (j = 0; j < ARRAY_SIZE(mclk_div); j++) {
-+ if (pll[i].out_hz == mclk_div[j] * (best_clk >> 1)) {
-+ dai->pll_in = clk;
-+ dai->pll_out = pll[i].out_hz;
-+ dai->clk_div = mclk_div[j];
-+ dai->mclk = best_clk;
-+ return dai->mclk;
-+ }
-+ }
-+ }
-+ }
-+
-+ /* this clk is not supported */
-+ return 0;
-+}
-+
-+static int wm8976_pcm_prepare(snd_pcm_substream_t *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct snd_soc_codec_dai *dai = rtd->codec_dai;
-+ u16 iface = 0, bfs, clk = 0, adn;
-+ int fs = 48000 << 7, i;
-+
-+ bfs = SND_SOC_FSBD_REAL(rtd->codec_dai->dai_runtime.bfs);
-+ switch (bfs) {
-+ case 2:
-+ clk |= 0x1 << 2;
-+ break;
-+ case 4:
-+ clk |= 0x2 << 2;
-+ break;
-+ case 8:
-+ clk |= 0x3 << 2;
-+ break;
-+ case 16:
-+ clk |= 0x4 << 2;
-+ break;
-+ case 32:
-+ clk |= 0x5 << 2;
-+ break;
-+ }
-+
-+ /* set master/slave audio interface */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
-+ case SND_SOC_DAIFMT_CBM_CFM:
-+ clk |= 0x0001;
-+ break;
-+ case SND_SOC_DAIFMT_CBS_CFS:
-+ break;
-+ }
-+
-+ /* interface format */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
-+ case SND_SOC_DAIFMT_I2S:
-+ iface |= 0x0010;
-+ break;
-+ case SND_SOC_DAIFMT_RIGHT_J:
-+ break;
-+ case SND_SOC_DAIFMT_LEFT_J:
-+ iface |= 0x0008;
-+ break;
-+ case SND_SOC_DAIFMT_DSP_A:
-+ iface |= 0x00018;
-+ break;
-+ }
-+
-+ /* bit size */
-+ switch (rtd->codec_dai->dai_runtime.pcmfmt) {
-+ case SNDRV_PCM_FMTBIT_S16_LE:
-+ break;
-+ case SNDRV_PCM_FMTBIT_S20_3LE:
-+ iface |= 0x0020;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S24_LE:
-+ iface |= 0x0040;
-+ break;
-+ case SNDRV_PCM_FMTBIT_S32_LE:
-+ iface |= 0x0060;
-+ break;
-+ }
-+
-+ /* clock inversion */
-+ switch (rtd->codec_dai->dai_runtime.fmt & SND_SOC_DAIFMT_INV_MASK) {
-+ case SND_SOC_DAIFMT_NB_NF:
-+ break;
-+ case SND_SOC_DAIFMT_IB_IF:
-+ iface |= 0x0180;
-+ break;
-+ case SND_SOC_DAIFMT_IB_NF:
-+ iface |= 0x0100;
-+ break;
-+ case SND_SOC_DAIFMT_NB_IF:
-+ iface |= 0x0080;
-+ break;
-+ }
-+
-+ /* filter coefficient */
-+ adn = wm8976_read_reg_cache(codec, WM8976_ADD) & 0x1f1;
-+ switch (rtd->codec_dai->dai_runtime.pcmrate) {
-+ case SNDRV_PCM_RATE_8000:
-+ adn |= 0x5 << 1;
-+ fs = 8000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_11025:
-+ adn |= 0x4 << 1;
-+ fs = 11025 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_16000:
-+ adn |= 0x3 << 1;
-+ fs = 16000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_22050:
-+ adn |= 0x2 << 1;
-+ fs = 22050 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_32000:
-+ adn |= 0x1 << 1;
-+ fs = 32000 << 7;
-+ break;
-+ case SNDRV_PCM_RATE_44100:
-+ fs = 44100 << 7;
-+ break;
-+ }
-+
-+ /* do we need to enable the PLL */
-+ if(dai->pll_in)
-+ set_pll(codec, dai->pll_in, dai->pll_out);
-+
-+ /* divide the clock to 256 fs */
-+ for(i = 0; i < ARRAY_SIZE(mclk_div); i++) {
-+ if (dai->clk_div == mclk_div[i]) {
-+ clk |= i << 5;
-+ clk &= 0xff;
-+ goto set;
-+ }
-+ }
-+
-+set:
-+ /* set iface */
-+ wm8976_write(codec, WM8976_IFACE, iface);
-+ wm8976_write(codec, WM8976_CLOCK, clk);
-+
-+ return 0;
-+}
-+
-+static int wm8976_hw_free(struct snd_pcm_substream *substream)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ struct snd_soc_device *socdev = rtd->socdev;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ set_pll(codec, 0, 0);
-+ return 0;
-+}
-+
-+static int wm8976_mute(struct snd_soc_codec *codec,
-+ struct snd_soc_codec_dai *dai, int mute)
-+{
-+ u16 mute_reg = wm8976_read_reg_cache(codec, WM8976_DAC) & 0xffbf;
-+ if(mute)
-+ wm8976_write(codec, WM8976_DAC, mute_reg | 0x40);
-+ else
-+ wm8976_write(codec, WM8976_DAC, mute_reg);
-+
-+ return 0;
-+}
-+
-+/* TODO: liam need to make this lower power with dapm */
-+static int wm8976_dapm_event(struct snd_soc_codec *codec, int event)
-+{
-+
-+ switch (event) {
-+ case SNDRV_CTL_POWER_D0: /* full On */
-+ /* vref/mid, clk and osc on, dac unmute, active */
-+ wm8976_write(codec, WM8976_POWER1, 0x1ff);
-+ wm8976_write(codec, WM8976_POWER2, 0x1ff);
-+ wm8976_write(codec, WM8976_POWER3, 0x1ff);
-+ break;
-+ case SNDRV_CTL_POWER_D1: /* partial On */
-+ case SNDRV_CTL_POWER_D2: /* partial On */
-+ break;
-+ case SNDRV_CTL_POWER_D3hot: /* Off, with power */
-+ /* everything off except vref/vmid, dac mute, inactive */
-+
-+ break;
-+ case SNDRV_CTL_POWER_D3cold: /* Off, without power */
-+ /* everything off, dac mute, inactive */
-+ wm8976_write(codec, WM8976_POWER1, 0x0);
-+ wm8976_write(codec, WM8976_POWER2, 0x0);
-+ wm8976_write(codec, WM8976_POWER3, 0x0);
-+ break;
-+ }
-+ codec->dapm_state = event;
-+ return 0;
-+}
-+
-+struct snd_soc_codec_dai wm8976_dai = {
-+ .name = "WM8976 HiFi",
-+ .playback = {
-+ .stream_name = "Playback",
-+ .channels_min = 1,
-+ .channels_max = 2,
-+ },
-+ .capture = {
-+ .stream_name = "Capture",
-+ .channels_min = 1,
-+ .channels_max = 1,
-+ },
-+ .config_sysclk = wm8976_config_sysclk,
-+ .digital_mute = wm8976_mute,
-+ .ops = {
-+ .prepare = wm8976_pcm_prepare,
-+ .hw_free = wm8976_hw_free,
-+ },
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(wm8976_modes),
-+ .mode = wm8976_modes,
-+ },
-+};
-+EXPORT_SYMBOL_GPL(wm8976_dai);
-+
-+static int wm8976_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ wm8976_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+ return 0;
-+}
-+
-+static int wm8976_resume(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int i;
-+ u8 data[2];
-+ u16 *cache = codec->reg_cache;
-+
-+ /* Sync reg_cache with the hardware */
-+ for (i = 0; i < ARRAY_SIZE(wm8976_reg); i++) {
-+ data[0] = (i << 1) | ((cache[i] >> 8) & 0x0001);
-+ data[1] = cache[i] & 0x00ff;
-+ codec->hw_write(codec->control_data, data, 2);
-+ }
-+ wm8976_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm8976_dapm_event(codec, codec->suspend_dapm_state);
-+ return 0;
-+}
-+
-+/*
-+ * initialise the WM8976 driver
-+ * register the mixer and dsp interfaces with the kernel
-+ */
-+static int wm8976_init(struct snd_soc_device* socdev)
-+{
-+ struct snd_soc_codec *codec = socdev->codec;
-+ int ret = 0;
-+
-+ codec->name = "WM8976";
-+ codec->owner = THIS_MODULE;
-+ codec->read = wm8976_read_reg_cache;
-+ codec->write = wm8976_write;
-+ codec->dapm_event = wm8976_dapm_event;
-+ codec->dai = &wm8976_dai;
-+ codec->num_dai = 1;
-+ codec->reg_cache_size = ARRAY_SIZE(wm8976_reg);
-+ codec->reg_cache =
-+ kzalloc(sizeof(u16) * ARRAY_SIZE(wm8976_reg), GFP_KERNEL);
-+ if (codec->reg_cache == NULL)
-+ return -ENOMEM;
-+ memcpy(codec->reg_cache, wm8976_reg,
-+ sizeof(u16) * ARRAY_SIZE(wm8976_reg));
-+ codec->reg_cache_size = sizeof(u16) * ARRAY_SIZE(wm8976_reg);
-+
-+ wm8976_reset(codec);
-+
-+ /* register pcms */
-+ ret = snd_soc_new_pcms(socdev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1);
-+ if(ret < 0) {
-+ kfree(codec->reg_cache);
-+ return ret;
-+ }
-+
-+ /* power on device */
-+ wm8976_dapm_event(codec, SNDRV_CTL_POWER_D3hot);
-+ wm8976_add_controls(codec);
-+ wm8976_add_widgets(codec);
-+ ret = snd_soc_register_card(socdev);
-+ if(ret < 0) {
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+ }
-+
-+ return ret;
-+}
-+
-+static struct snd_soc_device *wm8976_socdev;
-+
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+
-+/*
-+ * WM8976 2 wire address is 0x1a
-+ */
-+#define I2C_DRIVERID_WM8976 0xfefe /* liam - need a proper id */
-+
-+static unsigned short normal_i2c[] = { 0, I2C_CLIENT_END };
-+
-+/* Magic definition of all other variables and things */
-+I2C_CLIENT_INSMOD;
-+
-+static struct i2c_driver wm8976_i2c_driver;
-+static struct i2c_client client_template;
-+
-+/* If the i2c layer weren't so broken, we could pass this kind of data
-+ around */
-+
-+static int wm8976_codec_probe(struct i2c_adapter *adap, int addr, int kind)
-+{
-+ struct snd_soc_device *socdev = wm8976_socdev;
-+ struct wm8976_setup_data *setup = socdev->codec_data;
-+ struct snd_soc_codec *codec = socdev->codec;
-+ struct i2c_client *i2c;
-+ int ret;
-+
-+ if (addr != setup->i2c_address)
-+ return -ENODEV;
-+
-+ client_template.adapter = adap;
-+ client_template.addr = addr;
-+
-+ i2c = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
-+ if (i2c == NULL){
-+ kfree(codec);
-+ return -ENOMEM;
-+ }
-+ memcpy(i2c, &client_template, sizeof(struct i2c_client));
-+
-+ i2c_set_clientdata(i2c, codec);
-+
-+ codec->control_data = i2c;
-+
-+ ret = i2c_attach_client(i2c);
-+ if(ret < 0) {
-+ err("failed to attach codec at addr %x\n", addr);
-+ goto err;
-+ }
-+
-+ ret = wm8976_init(socdev);
-+ if(ret < 0) {
-+ err("failed to initialise WM8976\n");
-+ goto err;
-+ }
-+ return ret;
-+
-+err:
-+ kfree(codec);
-+ kfree(i2c);
-+ return ret;
-+
-+}
-+
-+static int wm8976_i2c_detach(struct i2c_client *client)
-+{
-+ struct snd_soc_codec *codec = i2c_get_clientdata(client);
-+
-+ i2c_detach_client(client);
-+
-+ kfree(codec->reg_cache);
-+ kfree(client);
-+
-+ return 0;
-+}
-+
-+static int wm8976_i2c_attach(struct i2c_adapter *adap)
-+{
-+ return i2c_probe(adap, &addr_data, wm8976_codec_probe);
-+}
-+
-+/* corgi i2c codec control layer */
-+static struct i2c_driver wm8976_i2c_driver = {
-+ .driver = {
-+ .name = "WM8976 I2C Codec",
-+ .owner = THIS_MODULE,
-+ },
-+ .id = I2C_DRIVERID_WM8976,
-+ .attach_adapter = wm8976_i2c_attach,
-+ .detach_client = wm8976_i2c_detach,
-+ .command = NULL,
-+};
-+
-+static struct i2c_client client_template = {
-+ .name = "WM8976",
-+ .driver = &wm8976_i2c_driver,
-+};
-+#endif
-+
-+static int wm8976_probe(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct wm8976_setup_data *setup;
-+ struct snd_soc_codec *codec;
-+ int ret = 0;
-+
-+ info("WM8976 Audio Codec %s", WM8976_VERSION);
-+
-+ setup = socdev->codec_data;
-+ codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
-+ if (codec == NULL)
-+ return -ENOMEM;
-+
-+ socdev->codec = codec;
-+ mutex_init(&codec->mutex);
-+ INIT_LIST_HEAD(&codec->dapm_widgets);
-+ INIT_LIST_HEAD(&codec->dapm_paths);
-+
-+ wm8976_socdev = socdev;
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ if (setup->i2c_address) {
-+ normal_i2c[0] = setup->i2c_address;
-+ codec->hw_write = (hw_write_t)i2c_master_send;
-+ ret = i2c_add_driver(&wm8976_i2c_driver);
-+ if (ret != 0)
-+ printk(KERN_ERR "can't add i2c driver");
-+ }
-+#else
-+ /* Add other interfaces here */
-+#endif
-+ return ret;
-+}
-+
-+/* power down chip */
-+static int wm8976_remove(struct platform_device *pdev)
-+{
-+ struct snd_soc_device *socdev = platform_get_drvdata(pdev);
-+ struct snd_soc_codec *codec = socdev->codec;
-+
-+ if (codec->control_data)
-+ wm8976_dapm_event(codec, SNDRV_CTL_POWER_D3cold);
-+
-+ snd_soc_free_pcms(socdev);
-+ snd_soc_dapm_free(socdev);
-+#if defined (CONFIG_I2C) || defined (CONFIG_I2C_MODULE)
-+ i2c_del_driver(&wm8976_i2c_driver);
-+#endif
-+ kfree(codec);
-+
-+ return 0;
-+}
-+
-+struct snd_soc_codec_device soc_codec_dev_wm8976 = {
-+ .probe = wm8976_probe,
-+ .remove = wm8976_remove,
-+ .suspend = wm8976_suspend,
-+ .resume = wm8976_resume,
-+};
-+
-+EXPORT_SYMBOL_GPL(soc_codec_dev_wm8976);
-+
-+MODULE_DESCRIPTION("ASoC WM8976 driver");
-+MODULE_AUTHOR("Graeme Gregory");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/codecs/wm8976.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/codecs/wm8976.h
-@@ -0,0 +1,73 @@
-+/*
-+ * wm8976.h -- WM8976 Soc Audio driver
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef _WM8976_H
-+#define _WM8976_H
-+
-+/* WM8976 register space */
-+
-+#define WM8976_RESET 0x0
-+#define WM8976_POWER1 0x1
-+#define WM8976_POWER2 0x2
-+#define WM8976_POWER3 0x3
-+#define WM8976_IFACE 0x4
-+#define WM8976_COMP 0x5
-+#define WM8976_CLOCK 0x6
-+#define WM8976_ADD 0x7
-+#define WM8976_GPIO 0x8
-+#define WM8976_JACK1 0x9
-+#define WM8976_DAC 0xa
-+#define WM8976_DACVOLL 0xb
-+#define WM8976_DACVOLR 0xc
-+#define WM8976_JACK2 0xd
-+#define WM8976_ADC 0xe
-+#define WM8976_ADCVOL 0xf
-+#define WM8976_EQ1 0x12
-+#define WM8976_EQ2 0x13
-+#define WM8976_EQ3 0x14
-+#define WM8976_EQ4 0x15
-+#define WM8976_EQ5 0x16
-+#define WM8976_DACLIM1 0x18
-+#define WM8976_DACLIM2 0x19
-+#define WM8976_NOTCH1 0x1b
-+#define WM8976_NOTCH2 0x1c
-+#define WM8976_NOTCH3 0x1d
-+#define WM8976_NOTCH4 0x1e
-+#define WM8976_ALC1 0x20
-+#define WM8976_ALC2 0x21
-+#define WM8976_ALC3 0x22
-+#define WM8976_NGATE 0x23
-+#define WM8976_PLLN 0x24
-+#define WM8976_PLLK1 0x25
-+#define WM8976_PLLK2 0x26
-+#define WM8976_PLLK3 0x27
-+#define WM8976_3D 0x29
-+#define WM8976_BEEP 0x2b
-+#define WM8976_INPUT 0x2c
-+#define WM8976_INPPGA 0x2d
-+#define WM8976_ADCBOOST 0x2f
-+#define WM8976_OUTPUT 0x31
-+#define WM8976_MIXL 0x32
-+#define WM8976_MIXR 0x33
-+#define WM8976_HPVOLL 0x34
-+#define WM8976_HPVOLR 0x35
-+#define WM8976_SPKVOLL 0x36
-+#define WM8976_SPKVOLR 0x37
-+#define WM8976_OUT3MIX 0x38
-+#define WM8976_MONOMIX 0x39
-+
-+#define WM8976_CACHEREGNUM 58
-+
-+struct wm8976_setup_data {
-+ unsigned short i2c_address;
-+};
-+
-+extern struct snd_soc_codec_dai wm8976_dai;
-+extern struct snd_soc_codec_device soc_codec_dev_wm8976;
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/imx/imx21-pcm.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/imx/imx21-pcm.c
-@@ -0,0 +1,454 @@
-+/*
-+ * linux/sound/arm/mxc-pcm.c -- ALSA SoC interface for the Freescale i.MX CPU's
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * Based on pxa2xx-pcm.c by Nicolas Pitre, (C) 2004 MontaVista Software, Inc.
-+ * and on mxc-alsa-mc13783 (C) 2006 Freescale.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Revision history
-+ * 29th Aug 2006 Initial version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/slab.h>
-+#include <linux/dma-mapping.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <asm/dma.h>
-+#include <asm/hardware.h>
-+
-+#include "imx-pcm.h"
-+
-+/* debug */
-+#define IMX_DEBUG 0
-+#if IMX_DEBUG
-+#define dbg(format, arg...) printk(format, ## arg)
-+#else
-+#define dbg(format, arg...)
-+#endif
-+
-+static const struct snd_pcm_hardware mxc_pcm_hardware = {
-+ .info = (SNDRV_PCM_INFO_INTERLEAVED |
-+ SNDRV_PCM_INFO_BLOCK_TRANSFER |
-+ SNDRV_PCM_INFO_MMAP |
-+ SNDRV_PCM_INFO_MMAP_VALID |
-+ SNDRV_PCM_INFO_PAUSE |
-+ SNDRV_PCM_INFO_RESUME),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE |
-+ SNDRV_PCM_FMTBIT_S24_LE,
-+ .buffer_bytes_max = 32 * 1024,
-+ .period_bytes_min = 64,
-+ .period_bytes_max = 8 * 1024,
-+ .periods_min = 2,
-+ .periods_max = 255,
-+ .fifo_size = 0,
-+};
-+
-+struct mxc_runtime_data {
-+ int dma_ch;
-+ struct mxc_pcm_dma_param *dma_params;
-+};
-+
-+/*!
-+ * This function stops the current dma transfert for playback
-+ * and clears the dma pointers.
-+ *
-+ * @param substream pointer to the structure of the current stream.
-+ *
-+ */
-+static void audio_stop_dma(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct mxc_runtime_data *prtd = runtime->private_data;
-+ unsigned int dma_size = frames_to_bytes(runtime, runtime->period_size);
-+ unsigned int offset dma_size * s->periods;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&prtd->dma_lock, flags);
-+
-+ dbg("MXC : audio_stop_dma active = 0\n");
-+ prtd->active = 0;
-+ prtd->period = 0;
-+ prtd->periods = 0;
-+
-+ /* this stops the dma channel and clears the buffer ptrs */
-+ mxc_dma_stop(prtd->dma_wchannel);
-+ if(substream == SNDRV_PCM_STREAM_PLAYBACK)
-+ dma_unmap_single(NULL, runtime->dma_addr + offset, dma_size,
-+ DMA_TO_DEVICE);
-+ else
-+ dma_unmap_single(NULL, runtime->dma_addr + offset, dma_size,
-+ DMA_FROM_DEVICE);
-+
-+ spin_unlock_irqrestore(&prtd->dma_lock, flags);
-+}
-+
-+/*!
-+ * This function is called whenever a new audio block needs to be
-+ * transferred to mc13783. The function receives the address and the size
-+ * of the new block and start a new DMA transfer.
-+ *
-+ * @param substream pointer to the structure of the current stream.
-+ *
-+ */
-+static int dma_new_period(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct mxc_runtime_data *prtd = runtime->private_data;
-+ unsigned int dma_size;
-+ unsigned int offset;
-+ int ret=0;
-+ dma_request_t sdma_request;
-+
-+ if (prtd->active){
-+ memset(&sdma_request, 0, sizeof(dma_request_t));
-+ dma_size = frames_to_bytes(runtime, runtime->period_size);
-+ dbg("s->period (%x) runtime->periods (%d)\n",
-+ s->period,runtime->periods);
-+ dbg("runtime->period_size (%d) dma_size (%d)\n",
-+ (unsigned int)runtime->period_size,
-+ runtime->dma_bytes);
-+
-+ offset = dma_size * prtd->period;
-+ snd_assert(dma_size <= DMA_BUF_SIZE, );
-+ if(substream == SNDRV_PCM_STREAM_PLAYBACK)
-+ sdma_request.sourceAddr = (char*)(dma_map_single(NULL,
-+ runtime->dma_area + offset, dma_size, DMA_TO_DEVICE));
-+ else
-+ sdma_request.destAddr = (char*)(dma_map_single(NULL,
-+ runtime->dma_area + offset, dma_size, DMA_FROM_DEVICE));
-+ sdma_request.count = dma_size;
-+
-+ dbg("MXC: Start DMA offset (%d) size (%d)\n", offset,
-+ runtime->dma_bytes);
-+
-+ mxc_dma_set_config(prtd->dma_wchannel, &sdma_request, 0);
-+ if((ret = mxc_dma_start(prtd->dma_wchannel)) < 0) {
-+ dbg("audio_process_dma: cannot queue DMA buffer\
-+ (%i)\n", ret);
-+ return err;
-+ }
-+ prtd->tx_spin = 1; /* FGA little trick to retrieve DMA pos */
-+ prtd->period++;
-+ prtd->period %= runtime->periods;
-+ }
-+ return ret;
-+}
-+
-+
-+/*!
-+ * This is a callback which will be called
-+ * when a TX transfer finishes. The call occurs
-+ * in interrupt context.
-+ *
-+ * @param dat pointer to the structure of the current stream.
-+ *
-+ */
-+static void audio_dma_irq(void *data)
-+{
-+ struct snd_pcm_substream *substream;
-+ struct snd_pcm_runtime *runtime;
-+ struct mxc_runtime_data *prtd;
-+ unsigned int dma_size;
-+ unsigned int previous_period;
-+ unsigned int offset;
-+
-+ substream = data;
-+ runtime = substream->runtime;
-+ prtd = runtime->private_data;
-+ previous_period = prtd->periods;
-+ dma_size = frames_to_bytes(runtime, runtime->period_size);
-+ offset = dma_size * previous_period;
-+
-+ prtd->tx_spin = 0;
-+ prtd->periods++;
-+ prtd->periods %= runtime->periods;
-+
-+ /*
-+ * Give back to the CPU the access to the non cached memory
-+ */
-+ if(substream == SNDRV_PCM_STREAM_PLAYBACK)
-+ dma_unmap_single(NULL, runtime->dma_addr + offset, dma_size,
-+ DMA_TO_DEVICE);
-+ else
-+ dma_unmap_single(NULL, runtime->dma_addr + offset, dma_size,
-+ DMA_FROM_DEVICE);
-+ /*
-+ * If we are getting a callback for an active stream then we inform
-+ * the PCM middle layer we've finished a period
-+ */
-+ if (prtd->active)
-+ snd_pcm_period_elapsed(substream);
-+
-+ /*
-+ * Trig next DMA transfer
-+ */
-+ dma_new_period(substream);
-+}
-+
-+/*!
-+ * This function configures the hardware to allow audio
-+ * playback operations. It is called by ALSA framework.
-+ *
-+ * @param substream pointer to the structure of the current stream.
-+ *
-+ * @return 0 on success, -1 otherwise.
-+ */
-+static int
-+snd_mxc_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct mxc_runtime_data *prtd = runtime->private_data;
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ int ret = 0;
-+ prtd->period = 0;
-+ prtd->periods = 0;
-+
-+ dma_channel_params params;
-+ int channel = 0; // passed in ?
-+
-+ if ((ret = mxc_request_dma(&channel, "ALSA TX SDMA") < 0)){
-+ dbg("error requesting a write dma channel\n");
-+ return ret;
-+ }
-+
-+ /* configure DMA params */
-+ memset(&params, 0, sizeof(dma_channel_params));
-+ params.bd_number = 1;
-+ params.arg = s;
-+ params.callback = callback;
-+ params.transfer_type = emi_2_per;
-+ params.watermark_level = SDMA_TXFIFO_WATERMARK;
-+ params.word_size = TRANSFER_16BIT;
-+ //dbg(KERN_ERR "activating connection SSI1 - SDMA\n");
-+ params.per_address = SSI1_BASE_ADDR;
-+ params.event_id = DMA_REQ_SSI1_TX1;
-+ params.peripheral_type = SSI;
-+
-+ /* set up chn with params */
-+ mxc_dma_setup_channel(channel, &params);
-+ s->dma_wchannel = channel;
-+
-+ return ret;
-+}
-+
-+static int mxc_pcm_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ int ret;
-+
-+ if((ret=snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params))) < 0)
-+ return ret;
-+ runtime->dma_addr = virt_to_phys(runtime->dma_area);
-+
-+ return ret;
-+}
-+
-+static int mxc_pcm_hw_free(struct snd_pcm_substream *substream)
-+{
-+ return snd_pcm_lib_free_pages(substream);
-+}
-+
-+static int mxc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
-+{
-+ struct mxc_runtime_data *prtd = substream->runtime->private_data;
-+ int ret = 0;
-+
-+ switch (cmd) {
-+ case SNDRV_PCM_TRIGGER_START:
-+ prtd->tx_spin = 0;
-+ /* requested stream startup */
-+ prtd->active = 1;
-+ ret = dma_new_period(substream);
-+ break;
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ /* requested stream shutdown */
-+ ret = audio_stop_dma(substream);
-+ break;
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ prtd->active = 0;
-+ prtd->periods = 0;
-+ break;
-+ case SNDRV_PCM_TRIGGER_RESUME:
-+ prtd->active = 1;
-+ prtd->tx_spin = 0;
-+ ret = dma_new_period(substream);
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ prtd->active = 0;
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ prtd->active = 1;
-+ if (prtd->old_offset) {
-+ prtd->tx_spin = 0;
-+ ret = dma_new_period(substream);
-+ }
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ break;
-+ }
-+
-+ return ret;
-+}
-+
-+static snd_pcm_uframes_t mxc_pcm_pointer(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct mxc_runtime_data *prtd = runtime->private_data;
-+ unsigned int offset = 0;
-+
-+ /* tx_spin value is used here to check if a transfert is active */
-+ if (prtd->tx_spin){
-+ offset = (runtime->period_size * (prtd->periods)) +
-+ (runtime->period_size >> 1);
-+ if (offset >= runtime->buffer_size)
-+ offset = runtime->period_size >> 1;
-+ } else {
-+ offset = (runtime->period_size * (s->periods));
-+ if (offset >= runtime->buffer_size)
-+ offset = 0;
-+ }
-+
-+ return offset;
-+}
-+
-+
-+static int mxc_pcm_open(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct mxc_runtime_data *prtd;
-+ int ret;
-+
-+ snd_soc_set_runtime_hwparams(substream, &mxc_pcm_hardware);
-+
-+ if ((err = snd_pcm_hw_constraint_integer(runtime,
-+ SNDRV_PCM_HW_PARAM_PERIODS)) < 0)
-+ return err;
-+ if ((err = snd_pcm_hw_constraint_list(runtime, 0,
-+ SNDRV_PCM_HW_PARAM_RATE, &hw_playback_rates)) < 0)
-+ return err;
-+ msleep(10); // liam - why
-+
-+ /* setup DMA controller for playback */
-+ if((err = configure_write_channel(&mxc_mc13783->s[SNDRV_PCM_STREAM_PLAYBACK],
-+ audio_dma_irq)) < 0 )
-+ return err;
-+
-+ if((prtd = kzalloc(sizeof(struct mxc_runtime_data), GFP_KERNEL)) == NULL) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+
-+ runtime->private_data = prtd;
-+ return 0;
-+
-+ err1:
-+ kfree(prtd);
-+ out:
-+ return ret;
-+}
-+
-+static int mxc_pcm_close(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct mxc_runtime_data *prtd = runtime->private_data;
-+
-+// mxc_mc13783_t *chip;
-+ audio_stream_t *s;
-+ device_data_t* device;
-+ int ssi;
-+
-+ //chip = snd_pcm_substream_chip(substream);
-+ s = &chip->s[substream->pstr->stream];
-+ device = &s->stream_device;
-+ ssi = device->ssi;
-+
-+ //disable_stereodac();
-+
-+ ssi_transmit_enable(ssi, false);
-+ ssi_interrupt_disable(ssi, ssi_tx_dma_interrupt_enable);
-+ ssi_tx_fifo_enable(ssi, ssi_fifo_0, false);
-+ ssi_enable(ssi, false);
-+
-+ chip->s[substream->pstr->stream].stream = NULL;
-+
-+ return 0;
-+}
-+
-+static int
-+mxc_pcm_mmap(struct snd_pcm_substream *substream, struct vm_area_struct *vma)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ return dma_mmap_writecombine(substream->pcm->card->dev, vma,
-+ runtime->dma_area,
-+ runtime->dma_addr,
-+ runtime->dma_bytes);
-+}
-+
-+struct snd_pcm_ops mxc_pcm_ops = {
-+ .open = mxc_pcm_open,
-+ .close = mxc_pcm_close,
-+ .ioctl = snd_pcm_lib_ioctl,
-+ .hw_params = mxc_pcm_hw_params,
-+ .hw_free = mxc_pcm_hw_free,
-+ .prepare = mxc_pcm_prepare,
-+ .trigger = mxc_pcm_trigger,
-+ .pointer = mxc_pcm_pointer,
-+ .mmap = mxc_pcm_mmap,
-+};
-+
-+static u64 mxc_pcm_dmamask = 0xffffffff;
-+
-+int mxc_pcm_new(struct snd_card *card, struct snd_soc_codec_dai *dai,
-+ struct snd_pcm *pcm)
-+{
-+ int ret = 0;
-+
-+ if (!card->dev->dma_mask)
-+ card->dev->dma_mask = &mxc_pcm_dmamask;
-+ if (!card->dev->coherent_dma_mask)
-+ card->dev->coherent_dma_mask = 0xffffffff;
-+
-+ if (dai->playback.channels_min) {
-+ ret = mxc_pcm_preallocate_dma_buffer(pcm,
-+ SNDRV_PCM_STREAM_PLAYBACK);
-+ if (ret)
-+ goto out;
-+ }
-+
-+ if (dai->capture.channels_min) {
-+ ret = mxc_pcm_preallocate_dma_buffer(pcm,
-+ SNDRV_PCM_STREAM_CAPTURE);
-+ if (ret)
-+ goto out;
-+ }
-+ out:
-+ return ret;
-+}
-+
-+struct snd_soc_platform mxc_soc_platform = {
-+ .name = "mxc-audio",
-+ .pcm_ops = &mxc_pcm_ops,
-+ .pcm_new = mxc_pcm_new,
-+ .pcm_free = mxc_pcm_free_dma_buffers,
-+};
-+
-+EXPORT_SYMBOL_GPL(mxc_soc_platform);
-+
-+MODULE_AUTHOR("Liam Girdwood");
-+MODULE_DESCRIPTION("Freescale i.MX PCM DMA module");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/imx/imx21-pcm.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/imx/imx21-pcm.h
-@@ -0,0 +1,237 @@
-+/*
-+ * mxc-pcm.h :- ASoC platform header for Freescale i.MX
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef _MXC_PCM_H
-+#define _MXC_PCM_H
-+
-+struct {
-+ char *name; /* stream identifier */
-+ dma_channel_params dma_params;
-+} mxc_pcm_dma_param;
-+
-+extern struct snd_soc_cpu_dai mxc_ssi_dai[3];
-+
-+/* platform data */
-+extern struct snd_soc_platform mxc_soc_platform;
-+extern struct snd_ac97_bus_ops mxc_ac97_ops;
-+
-+/* temp until imx-regs.h is up2date */
-+#define SSI1_STX0 __REG(IMX_SSI1_BASE + 0x00)
-+#define SSI1_STX0_PHYS __PHYS_REG(IMX_SSI1_BASE + 0x00)
-+#define SSI1_STX1 __REG(IMX_SSI1_BASE + 0x04)
-+#define SSI1_STX1_PHYS __PHYS_REG(IMX_SSI1_BASE + 0x04)
-+#define SSI1_SRX0 __REG(IMX_SSI1_BASE + 0x08)
-+#define SSI1_SRX0_PHYS __PHYS_REG(IMX_SSI1_BASE + 0x08)
-+#define SSI1_SRX1 __REG(IMX_SSI1_BASE + 0x0c)
-+#define SSI1_SRX1_PHYS __PHYS_REG(IMX_SSI1_BASE + 0x0c)
-+#define SSI1_SCR __REG(IMX_SSI1_BASE + 0x10)
-+#define SSI1_SISR __REG(IMX_SSI1_BASE + 0x14)
-+#define SSI1_SIER __REG(IMX_SSI1_BASE + 0x18)
-+#define SSI1_STCR __REG(IMX_SSI1_BASE + 0x1c)
-+#define SSI1_SRCR __REG(IMX_SSI1_BASE + 0x20)
-+#define SSI1_STCCR __REG(IMX_SSI1_BASE + 0x24)
-+#define SSI1_SRCCR __REG(IMX_SSI1_BASE + 0x28)
-+#define SSI1_SFCSR __REG(IMX_SSI1_BASE + 0x2c)
-+#define SSI1_STR __REG(IMX_SSI1_BASE + 0x30)
-+#define SSI1_SOR __REG(IMX_SSI1_BASE + 0x34)
-+#define SSI1_SACNT __REG(IMX_SSI1_BASE + 0x38)
-+#define SSI1_SACADD __REG(IMX_SSI1_BASE + 0x3c)
-+#define SSI1_SACDAT __REG(IMX_SSI1_BASE + 0x40)
-+#define SSI1_SATAG __REG(IMX_SSI1_BASE + 0x44)
-+#define SSI1_STMSK __REG(IMX_SSI1_BASE + 0x48)
-+#define SSI1_SRMSK __REG(IMX_SSI1_BASE + 0x4c)
-+
-+#define SSI2_STX0 __REG(IMX_SSI2_BASE + 0x00)
-+#define SSI2_STX0_PHYS __PHYS_REG(IMX_SSI2_BASE + 0x00)
-+#define SSI2_STX1 __REG(IMX_SSI2_BASE + 0x04)
-+#define SSI2_STX1_PHYS __PHYS_REG(IMX_SSI2_BASE + 0x04)
-+#define SSI2_SRX0 __REG(IMX_SSI2_BASE + 0x08)
-+#define SSI2_SRX0_PHYS __PHYS_REG(IMX_SSI2_BASE + 0x08)
-+#define SSI2_SRX1 __REG(IMX_SSI2_BASE + 0x0c)
-+#define SSI2_SRX1_PHYS __PHYS_REG(IMX_SSI2_BASE + 0x0c)
-+#define SSI2_SCR __REG(IMX_SSI2_BASE + 0x10)
-+#define SSI2_SISR __REG(IMX_SSI2_BASE + 0x14)
-+#define SSI2_SIER __REG(IMX_SSI2_BASE + 0x18)
-+#define SSI2_STCR __REG(IMX_SSI2_BASE + 0x1c)
-+#define SSI2_SRCR __REG(IMX_SSI2_BASE + 0x20)
-+#define SSI2_STCCR __REG(IMX_SSI2_BASE + 0x24)
-+#define SSI2_SRCCR __REG(IMX_SSI2_BASE + 0x28)
-+#define SSI2_SFCSR __REG(IMX_SSI2_BASE + 0x2c)
-+#define SSI2_STR __REG(IMX_SSI2_BASE + 0x30)
-+#define SSI2_SOR __REG(IMX_SSI2_BASE + 0x34)
-+#define SSI2_SACNT __REG(IMX_SSI2_BASE + 0x38)
-+#define SSI2_SACADD __REG(IMX_SSI2_BASE + 0x3c)
-+#define SSI2_SACDAT __REG(IMX_SSI2_BASE + 0x40)
-+#define SSI2_SATAG __REG(IMX_SSI2_BASE + 0x44)
-+#define SSI2_STMSK __REG(IMX_SSI2_BASE + 0x48)
-+#define SSI2_SRMSK __REG(IMX_SSI2_BASE + 0x4c)
-+
-+#define SSI_SCR_CLK_IST (1 << 9)
-+#define SSI_SCR_TCH_EN (1 << 8)
-+#define SSI_SCR_SYS_CLK_EN (1 << 7)
-+#define SSI_SCR_I2S_MODE_NORM (0 << 5)
-+#define SSI_SCR_I2S_MODE_MSTR (1 << 5)
-+#define SSI_SCR_I2S_MODE_SLAVE (2 << 5)
-+#define SSI_SCR_SYN (1 << 4)
-+#define SSI_SCR_NET (1 << 3)
-+#define SSI_SCR_RE (1 << 2)
-+#define SSI_SCR_TE (1 << 1)
-+#define SSI_SCR_SSIEN (1 << 0)
-+
-+#define SSI_SISR_CMDAU (1 << 18)
-+#define SSI_SISR_CMDDU (1 << 17)
-+#define SSI_SISR_RXT (1 << 16)
-+#define SSI_SISR_RDR1 (1 << 15)
-+#define SSI_SISR_RDR0 (1 << 14)
-+#define SSI_SISR_TDE1 (1 << 13)
-+#define SSI_SISR_TDE0 (1 << 12)
-+#define SSI_SISR_ROE1 (1 << 11)
-+#define SSI_SISR_ROE0 (1 << 10)
-+#define SSI_SISR_TUE1 (1 << 9)
-+#define SSI_SISR_TUE0 (1 << 8)
-+#define SSI_SISR_TFS (1 << 7)
-+#define SSI_SISR_RFS (1 << 6)
-+#define SSI_SISR_TLS (1 << 5)
-+#define SSI_SISR_RLS (1 << 4)
-+#define SSI_SISR_RFF1 (1 << 3)
-+#define SSI_SISR_RFF0 (1 << 2)
-+#define SSI_SISR_TFE1 (1 << 1)
-+#define SSI_SISR_TFE0 (1 << 0)
-+
-+#define SSI_SIER_RDMAE (1 << 22)
-+#define SSI_SIER_RIE (1 << 21)
-+#define SSI_SIER_TDMAE (1 << 20)
-+#define SSI_SIER_TIE (1 << 19)
-+#define SSI_SIER_CMDAU_EN (1 << 18)
-+#define SSI_SIER_CMDDU_EN (1 << 17)
-+#define SSI_SIER_RXT_EN (1 << 16)
-+#define SSI_SIER_RDR1_EN (1 << 15)
-+#define SSI_SIER_RDR0_EN (1 << 14)
-+#define SSI_SIER_TDE1_EN (1 << 13)
-+#define SSI_SIER_TDE0_EN (1 << 12)
-+#define SSI_SIER_ROE1_EN (1 << 11)
-+#define SSI_SIER_ROE0_EN (1 << 10)
-+#define SSI_SIER_TUE1_EN (1 << 9)
-+#define SSI_SIER_TUE0_EN (1 << 8)
-+#define SSI_SIER_TFS_EN (1 << 7)
-+#define SSI_SIER_RFS_EN (1 << 6)
-+#define SSI_SIER_TLS_EN (1 << 5)
-+#define SSI_SIER_RLS_EN (1 << 4)
-+#define SSI_SIER_RFF1_EN (1 << 3)
-+#define SSI_SIER_RFF0_EN (1 << 2)
-+#define SSI_SIER_TFE1_EN (1 << 1)
-+#define SSI_SIER_TFE0_EN (1 << 0)
-+
-+#define SSI_STCR_TXBIT0 (1 << 9)
-+#define SSI_STCR_TFEN1 (1 << 8)
-+#define SSI_STCR_TFEN0 (1 << 7)
-+#define SSI_STCR_TFDIR (1 << 6)
-+#define SSI_STCR_TXDIR (1 << 5)
-+#define SSI_STCR_TSHFD (1 << 4)
-+#define SSI_STCR_TSCKP (1 << 3)
-+#define SSI_STCR_TFSI (1 << 2)
-+#define SSI_STCR_TFSL (1 << 1)
-+#define SSI_STCR_TEFS (1 << 0)
-+
-+#define SSI_SRCR_RXBIT0 (1 << 9)
-+#define SSI_SRCR_RFEN1 (1 << 8)
-+#define SSI_SRCR_RFEN0 (1 << 7)
-+#define SSI_SRCR_RFDIR (1 << 6)
-+#define SSI_SRCR_RXDIR (1 << 5)
-+#define SSI_SRCR_RSHFD (1 << 4)
-+#define SSI_SRCR_RSCKP (1 << 3)
-+#define SSI_SRCR_RFSI (1 << 2)
-+#define SSI_SRCR_RFSL (1 << 1)
-+#define SSI_SRCR_REFS (1 << 0)
-+
-+#define SSI_STCCR_DIV2 (1 << 18)
-+#define SSI_STCCR_PSR (1 << 15)
-+#define SSI_STCCR_WL(x) ((((x) - 2) >> 1) << 13)
-+#define SSI_STCCR_DC(x) (((x) & 0x1f) << 8)
-+#define SSI_STCCR_PM(x) (((x) & 0xff) << 0)
-+
-+#define SSI_SRCCR_DIV2 (1 << 18)
-+#define SSI_SRCCR_PSR (1 << 15)
-+#define SSI_SRCCR_WL(x) ((((x) - 2) >> 1) << 13)
-+#define SSI_SRCCR_DC(x) (((x) & 0x1f) << 8)
-+#define SSI_SRCCR_PM(x) (((x) & 0xff) << 0)
-+
-+
-+#define SSI_SFCSR_RFCNT1(x) (((x) & 0xf) << 28)
-+#define SSI_SFCSR_TFCNT1(x) (((x) & 0xf) << 24)
-+#define SSI_SFCSR_RFWM1(x) (((x) & 0xf) << 20)
-+#define SSI_SFCSR_TFWM1(x) (((x) & 0xf) << 16)
-+#define SSI_SFCSR_RFCNT0(x) (((x) & 0xf) << 12)
-+#define SSI_SFCSR_TFCNT0(x) (((x) & 0xf) << 8)
-+#define SSI_SFCSR_RFWM0(x) (((x) & 0xf) << 4)
-+#define SSI_SFCSR_TFWM0(x) (((x) & 0xf) << 0)
-+
-+#define SSI_STR_TEST (1 << 15)
-+#define SSI_STR_RCK2TCK (1 << 14)
-+#define SSI_STR_RFS2TFS (1 << 13)
-+#define SSI_STR_RXSTATE(x) (((x) & 0xf) << 8)
-+#define SSI_STR_TXD2RXD (1 << 7)
-+#define SSI_STR_TCK2RCK (1 << 6)
-+#define SSI_STR_TFS2RFS (1 << 5)
-+#define SSI_STR_TXSTATE(x) (((x) & 0xf) << 0)
-+
-+#define SSI_SOR_CLKOFF (1 << 6)
-+#define SSI_SOR_RX_CLR (1 << 5)
-+#define SSI_SOR_TX_CLR (1 << 4)
-+#define SSI_SOR_INIT (1 << 3)
-+#define SSI_SOR_WAIT(x) (((x) & 0x3) << 1)
-+#define SSI_SOR_SYNRST (1 << 0)
-+
-+#define SSI_SACNT_FRDIV(x) (((x) & 0x3f) << 5)
-+#define SSI_SACNT_WR (x << 4)
-+#define SSI_SACNT_RD (x << 3)
-+#define SSI_SACNT_TIF (x << 2)
-+#define SSI_SACNT_FV (x << 1)
-+#define SSI_SACNT_A97EN (x << 0)
-+
-+
-+/* AUDMUX registers */
-+#define AUDMUX_HPCR1 __REG(IMX_AUDMUX_BASE + 0x00)
-+#define AUDMUX_HPCR2 __REG(IMX_AUDMUX_BASE + 0x04)
-+#define AUDMUX_HPCR3 __REG(IMX_AUDMUX_BASE + 0x08)
-+#define AUDMUX_PPCR1 __REG(IMX_AUDMUX_BASE + 0x10)
-+#define AUDMUX_PPCR2 __REG(IMX_AUDMUX_BASE + 0x14)
-+#define AUDMUX_PPCR3 __REG(IMX_AUDMUX_BASE + 0x18)
-+
-+#define AUDMUX_HPCR_TFSDIR (1 << 31)
-+#define AUDMUX_HPCR_TCLKDIR (1 << 30)
-+#define AUDMUX_HPCR_TFCSEL_TX (0 << 26)
-+#define AUDMUX_HPCR_TFCSEL_RX (8 << 26)
-+#define AUDMUX_HPCR_TFCSEL(x) (((x) & 0x7) << 26)
-+#define AUDMUX_HPCR_RFSDIR (1 << 25)
-+#define AUDMUX_HPCR_RCLKDIR (1 << 24)
-+#define AUDMUX_HPCR_RFCSEL_TX (0 << 20)
-+#define AUDMUX_HPCR_RFCSEL_RX (8 << 20)
-+#define AUDMUX_HPCR_RFCSEL(x) (((x) & 0x7) << 20)
-+#define AUDMUX_HPCR_RXDSEL(x) (((x) & 0x7) << 13)
-+#define AUDMUX_HPCR_SYN (1 << 12)
-+#define AUDMUX_HPCR_TXRXEN (1 << 10)
-+#define AUDMUX_HPCR_INMEN (1 << 8)
-+#define AUDMUX_HPCR_INMMASK(x) (((x) & 0xff) << 0)
-+
-+#define AUDMUX_PPCR_TFSDIR (1 << 31)
-+#define AUDMUX_PPCR_TCLKDIR (1 << 30)
-+#define AUDMUX_PPCR_TFCSEL_TX (0 << 26)
-+#define AUDMUX_PPCR_TFCSEL_RX (8 << 26)
-+#define AUDMUX_PPCR_TFCSEL(x) (((x) & 0x7) << 26)
-+#define AUDMUX_PPCR_RFSDIR (1 << 25)
-+#define AUDMUX_PPCR_RCLKDIR (1 << 24)
-+#define AUDMUX_PPCR_RFCSEL_TX (0 << 20)
-+#define AUDMUX_PPCR_RFCSEL_RX (8 << 20)
-+#define AUDMUX_PPCR_RFCSEL(x) (((x) & 0x7) << 20)
-+#define AUDMUX_PPCR_RXDSEL(x) (((x) & 0x7) << 13)
-+#define AUDMUX_PPCR_SYN (1 << 12)
-+#define AUDMUX_PPCR_TXRXEN (1 << 10)
-+
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/imx/imx31-pcm.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/imx/imx31-pcm.c
-@@ -0,0 +1,454 @@
-+/*
-+ * linux/sound/arm/mxc-pcm.c -- ALSA SoC interface for the Freescale i.MX CPU's
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * Based on pxa2xx-pcm.c by Nicolas Pitre, (C) 2004 MontaVista Software, Inc.
-+ * and on mxc-alsa-mc13783 (C) 2006 Freescale.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Revision history
-+ * 29th Aug 2006 Initial version.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/slab.h>
-+#include <linux/dma-mapping.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+#include <asm/dma.h>
-+#include <asm/hardware.h>
-+
-+#include "imx-pcm.h"
-+
-+/* debug */
-+#define IMX_DEBUG 0
-+#if IMX_DEBUG
-+#define dbg(format, arg...) printk(format, ## arg)
-+#else
-+#define dbg(format, arg...)
-+#endif
-+
-+static const struct snd_pcm_hardware mxc_pcm_hardware = {
-+ .info = (SNDRV_PCM_INFO_INTERLEAVED |
-+ SNDRV_PCM_INFO_BLOCK_TRANSFER |
-+ SNDRV_PCM_INFO_MMAP |
-+ SNDRV_PCM_INFO_MMAP_VALID |
-+ SNDRV_PCM_INFO_PAUSE |
-+ SNDRV_PCM_INFO_RESUME),
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE |
-+ SNDRV_PCM_FMTBIT_S24_LE,
-+ .buffer_bytes_max = 32 * 1024,
-+ .period_bytes_min = 64,
-+ .period_bytes_max = 8 * 1024,
-+ .periods_min = 2,
-+ .periods_max = 255,
-+ .fifo_size = 0,
-+};
-+
-+struct mxc_runtime_data {
-+ int dma_ch;
-+ struct mxc_pcm_dma_param *dma_params;
-+};
-+
-+/*!
-+ * This function stops the current dma transfert for playback
-+ * and clears the dma pointers.
-+ *
-+ * @param substream pointer to the structure of the current stream.
-+ *
-+ */
-+static void audio_stop_dma(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct mxc_runtime_data *prtd = runtime->private_data;
-+ unsigned int dma_size = frames_to_bytes(runtime, runtime->period_size);
-+ unsigned int offset dma_size * s->periods;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&prtd->dma_lock, flags);
-+
-+ dbg("MXC : audio_stop_dma active = 0\n");
-+ prtd->active = 0;
-+ prtd->period = 0;
-+ prtd->periods = 0;
-+
-+ /* this stops the dma channel and clears the buffer ptrs */
-+ mxc_dma_stop(prtd->dma_wchannel);
-+ if(substream == SNDRV_PCM_STREAM_PLAYBACK)
-+ dma_unmap_single(NULL, runtime->dma_addr + offset, dma_size,
-+ DMA_TO_DEVICE);
-+ else
-+ dma_unmap_single(NULL, runtime->dma_addr + offset, dma_size,
-+ DMA_FROM_DEVICE);
-+
-+ spin_unlock_irqrestore(&prtd->dma_lock, flags);
-+}
-+
-+/*!
-+ * This function is called whenever a new audio block needs to be
-+ * transferred to mc13783. The function receives the address and the size
-+ * of the new block and start a new DMA transfer.
-+ *
-+ * @param substream pointer to the structure of the current stream.
-+ *
-+ */
-+static int dma_new_period(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct mxc_runtime_data *prtd = runtime->private_data;
-+ unsigned int dma_size;
-+ unsigned int offset;
-+ int ret=0;
-+ dma_request_t sdma_request;
-+
-+ if (prtd->active){
-+ memset(&sdma_request, 0, sizeof(dma_request_t));
-+ dma_size = frames_to_bytes(runtime, runtime->period_size);
-+ dbg("s->period (%x) runtime->periods (%d)\n",
-+ s->period,runtime->periods);
-+ dbg("runtime->period_size (%d) dma_size (%d)\n",
-+ (unsigned int)runtime->period_size,
-+ runtime->dma_bytes);
-+
-+ offset = dma_size * prtd->period;
-+ snd_assert(dma_size <= DMA_BUF_SIZE, );
-+ if(substream == SNDRV_PCM_STREAM_PLAYBACK)
-+ sdma_request.sourceAddr = (char*)(dma_map_single(NULL,
-+ runtime->dma_area + offset, dma_size, DMA_TO_DEVICE));
-+ else
-+ sdma_request.destAddr = (char*)(dma_map_single(NULL,
-+ runtime->dma_area + offset, dma_size, DMA_FROM_DEVICE));
-+ sdma_request.count = dma_size;
-+
-+ dbg("MXC: Start DMA offset (%d) size (%d)\n", offset,
-+ runtime->dma_bytes);
-+
-+ mxc_dma_set_config(prtd->dma_wchannel, &sdma_request, 0);
-+ if((ret = mxc_dma_start(prtd->dma_wchannel)) < 0) {
-+ dbg("audio_process_dma: cannot queue DMA buffer\
-+ (%i)\n", ret);
-+ return err;
-+ }
-+ prtd->tx_spin = 1; /* FGA little trick to retrieve DMA pos */
-+ prtd->period++;
-+ prtd->period %= runtime->periods;
-+ }
-+ return ret;
-+}
-+
-+
-+/*!
-+ * This is a callback which will be called
-+ * when a TX transfer finishes. The call occurs
-+ * in interrupt context.
-+ *
-+ * @param dat pointer to the structure of the current stream.
-+ *
-+ */
-+static void audio_dma_irq(void *data)
-+{
-+ struct snd_pcm_substream *substream;
-+ struct snd_pcm_runtime *runtime;
-+ struct mxc_runtime_data *prtd;
-+ unsigned int dma_size;
-+ unsigned int previous_period;
-+ unsigned int offset;
-+
-+ substream = data;
-+ runtime = substream->runtime;
-+ prtd = runtime->private_data;
-+ previous_period = prtd->periods;
-+ dma_size = frames_to_bytes(runtime, runtime->period_size);
-+ offset = dma_size * previous_period;
-+
-+ prtd->tx_spin = 0;
-+ prtd->periods++;
-+ prtd->periods %= runtime->periods;
-+
-+ /*
-+ * Give back to the CPU the access to the non cached memory
-+ */
-+ if(substream == SNDRV_PCM_STREAM_PLAYBACK)
-+ dma_unmap_single(NULL, runtime->dma_addr + offset, dma_size,
-+ DMA_TO_DEVICE);
-+ else
-+ dma_unmap_single(NULL, runtime->dma_addr + offset, dma_size,
-+ DMA_FROM_DEVICE);
-+ /*
-+ * If we are getting a callback for an active stream then we inform
-+ * the PCM middle layer we've finished a period
-+ */
-+ if (prtd->active)
-+ snd_pcm_period_elapsed(substream);
-+
-+ /*
-+ * Trig next DMA transfer
-+ */
-+ dma_new_period(substream);
-+}
-+
-+/*!
-+ * This function configures the hardware to allow audio
-+ * playback operations. It is called by ALSA framework.
-+ *
-+ * @param substream pointer to the structure of the current stream.
-+ *
-+ * @return 0 on success, -1 otherwise.
-+ */
-+static int
-+snd_mxc_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct mxc_runtime_data *prtd = runtime->private_data;
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ int ret = 0;
-+ prtd->period = 0;
-+ prtd->periods = 0;
-+
-+ dma_channel_params params;
-+ int channel = 0; // passed in ?
-+
-+ if ((ret = mxc_request_dma(&channel, "ALSA TX SDMA") < 0)){
-+ dbg("error requesting a write dma channel\n");
-+ return ret;
-+ }
-+
-+ /* configure DMA params */
-+ memset(&params, 0, sizeof(dma_channel_params));
-+ params.bd_number = 1;
-+ params.arg = s;
-+ params.callback = callback;
-+ params.transfer_type = emi_2_per;
-+ params.watermark_level = SDMA_TXFIFO_WATERMARK;
-+ params.word_size = TRANSFER_16BIT;
-+ //dbg(KERN_ERR "activating connection SSI1 - SDMA\n");
-+ params.per_address = SSI1_BASE_ADDR;
-+ params.event_id = DMA_REQ_SSI1_TX1;
-+ params.peripheral_type = SSI;
-+
-+ /* set up chn with params */
-+ mxc_dma_setup_channel(channel, &params);
-+ s->dma_wchannel = channel;
-+
-+ return ret;
-+}
-+
-+static int mxc_pcm_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ int ret;
-+
-+ if((ret=snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params))) < 0)
-+ return ret;
-+ runtime->dma_addr = virt_to_phys(runtime->dma_area);
-+
-+ return ret;
-+}
-+
-+static int mxc_pcm_hw_free(struct snd_pcm_substream *substream)
-+{
-+ return snd_pcm_lib_free_pages(substream);
-+}
-+
-+static int mxc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
-+{
-+ struct mxc_runtime_data *prtd = substream->runtime->private_data;
-+ int ret = 0;
-+
-+ switch (cmd) {
-+ case SNDRV_PCM_TRIGGER_START:
-+ prtd->tx_spin = 0;
-+ /* requested stream startup */
-+ prtd->active = 1;
-+ ret = dma_new_period(substream);
-+ break;
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ /* requested stream shutdown */
-+ ret = audio_stop_dma(substream);
-+ break;
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ prtd->active = 0;
-+ prtd->periods = 0;
-+ break;
-+ case SNDRV_PCM_TRIGGER_RESUME:
-+ prtd->active = 1;
-+ prtd->tx_spin = 0;
-+ ret = dma_new_period(substream);
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ prtd->active = 0;
-+ break;
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ prtd->active = 1;
-+ if (prtd->old_offset) {
-+ prtd->tx_spin = 0;
-+ ret = dma_new_period(substream);
-+ }
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ break;
-+ }
-+
-+ return ret;
-+}
-+
-+static snd_pcm_uframes_t mxc_pcm_pointer(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct mxc_runtime_data *prtd = runtime->private_data;
-+ unsigned int offset = 0;
-+
-+ /* tx_spin value is used here to check if a transfert is active */
-+ if (prtd->tx_spin){
-+ offset = (runtime->period_size * (prtd->periods)) +
-+ (runtime->period_size >> 1);
-+ if (offset >= runtime->buffer_size)
-+ offset = runtime->period_size >> 1;
-+ } else {
-+ offset = (runtime->period_size * (s->periods));
-+ if (offset >= runtime->buffer_size)
-+ offset = 0;
-+ }
-+
-+ return offset;
-+}
-+
-+
-+static int mxc_pcm_open(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct mxc_runtime_data *prtd;
-+ int ret;
-+
-+ snd_soc_set_runtime_hwparams(substream, &mxc_pcm_hardware);
-+
-+ if ((err = snd_pcm_hw_constraint_integer(runtime,
-+ SNDRV_PCM_HW_PARAM_PERIODS)) < 0)
-+ return err;
-+ if ((err = snd_pcm_hw_constraint_list(runtime, 0,
-+ SNDRV_PCM_HW_PARAM_RATE, &hw_playback_rates)) < 0)
-+ return err;
-+ msleep(10); // liam - why
-+
-+ /* setup DMA controller for playback */
-+ if((err = configure_write_channel(&mxc_mc13783->s[SNDRV_PCM_STREAM_PLAYBACK],
-+ audio_dma_irq)) < 0 )
-+ return err;
-+
-+ if((prtd = kzalloc(sizeof(struct mxc_runtime_data), GFP_KERNEL)) == NULL) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+
-+ runtime->private_data = prtd;
-+ return 0;
-+
-+ err1:
-+ kfree(prtd);
-+ out:
-+ return ret;
-+}
-+
-+static int mxc_pcm_close(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct mxc_runtime_data *prtd = runtime->private_data;
-+
-+// mxc_mc13783_t *chip;
-+ audio_stream_t *s;
-+ device_data_t* device;
-+ int ssi;
-+
-+ //chip = snd_pcm_substream_chip(substream);
-+ s = &chip->s[substream->pstr->stream];
-+ device = &s->stream_device;
-+ ssi = device->ssi;
-+
-+ //disable_stereodac();
-+
-+ ssi_transmit_enable(ssi, false);
-+ ssi_interrupt_disable(ssi, ssi_tx_dma_interrupt_enable);
-+ ssi_tx_fifo_enable(ssi, ssi_fifo_0, false);
-+ ssi_enable(ssi, false);
-+
-+ chip->s[substream->pstr->stream].stream = NULL;
-+
-+ return 0;
-+}
-+
-+static int
-+mxc_pcm_mmap(struct snd_pcm_substream *substream, struct vm_area_struct *vma)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ return dma_mmap_writecombine(substream->pcm->card->dev, vma,
-+ runtime->dma_area,
-+ runtime->dma_addr,
-+ runtime->dma_bytes);
-+}
-+
-+struct snd_pcm_ops mxc_pcm_ops = {
-+ .open = mxc_pcm_open,
-+ .close = mxc_pcm_close,
-+ .ioctl = snd_pcm_lib_ioctl,
-+ .hw_params = mxc_pcm_hw_params,
-+ .hw_free = mxc_pcm_hw_free,
-+ .prepare = mxc_pcm_prepare,
-+ .trigger = mxc_pcm_trigger,
-+ .pointer = mxc_pcm_pointer,
-+ .mmap = mxc_pcm_mmap,
-+};
-+
-+static u64 mxc_pcm_dmamask = 0xffffffff;
-+
-+int mxc_pcm_new(struct snd_card *card, struct snd_soc_codec_dai *dai,
-+ struct snd_pcm *pcm)
-+{
-+ int ret = 0;
-+
-+ if (!card->dev->dma_mask)
-+ card->dev->dma_mask = &mxc_pcm_dmamask;
-+ if (!card->dev->coherent_dma_mask)
-+ card->dev->coherent_dma_mask = 0xffffffff;
-+
-+ if (dai->playback.channels_min) {
-+ ret = mxc_pcm_preallocate_dma_buffer(pcm,
-+ SNDRV_PCM_STREAM_PLAYBACK);
-+ if (ret)
-+ goto out;
-+ }
-+
-+ if (dai->capture.channels_min) {
-+ ret = mxc_pcm_preallocate_dma_buffer(pcm,
-+ SNDRV_PCM_STREAM_CAPTURE);
-+ if (ret)
-+ goto out;
-+ }
-+ out:
-+ return ret;
-+}
-+
-+struct snd_soc_platform mxc_soc_platform = {
-+ .name = "mxc-audio",
-+ .pcm_ops = &mxc_pcm_ops,
-+ .pcm_new = mxc_pcm_new,
-+ .pcm_free = mxc_pcm_free_dma_buffers,
-+};
-+
-+EXPORT_SYMBOL_GPL(mxc_soc_platform);
-+
-+MODULE_AUTHOR("Liam Girdwood");
-+MODULE_DESCRIPTION("Freescale i.MX PCM DMA module");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/imx/imx31-pcm.h
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/imx/imx31-pcm.h
-@@ -0,0 +1,237 @@
-+/*
-+ * mxc-pcm.h :- ASoC platform header for Freescale i.MX
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef _MXC_PCM_H
-+#define _MXC_PCM_H
-+
-+struct {
-+ char *name; /* stream identifier */
-+ dma_channel_params dma_params;
-+} mxc_pcm_dma_param;
-+
-+extern struct snd_soc_cpu_dai mxc_ssi_dai[3];
-+
-+/* platform data */
-+extern struct snd_soc_platform mxc_soc_platform;
-+extern struct snd_ac97_bus_ops mxc_ac97_ops;
-+
-+/* temp until imx-regs.h is up2date */
-+#define SSI1_STX0 __REG(IMX_SSI1_BASE + 0x00)
-+#define SSI1_STX0_PHYS __PHYS_REG(IMX_SSI1_BASE + 0x00)
-+#define SSI1_STX1 __REG(IMX_SSI1_BASE + 0x04)
-+#define SSI1_STX1_PHYS __PHYS_REG(IMX_SSI1_BASE + 0x04)
-+#define SSI1_SRX0 __REG(IMX_SSI1_BASE + 0x08)
-+#define SSI1_SRX0_PHYS __PHYS_REG(IMX_SSI1_BASE + 0x08)
-+#define SSI1_SRX1 __REG(IMX_SSI1_BASE + 0x0c)
-+#define SSI1_SRX1_PHYS __PHYS_REG(IMX_SSI1_BASE + 0x0c)
-+#define SSI1_SCR __REG(IMX_SSI1_BASE + 0x10)
-+#define SSI1_SISR __REG(IMX_SSI1_BASE + 0x14)
-+#define SSI1_SIER __REG(IMX_SSI1_BASE + 0x18)
-+#define SSI1_STCR __REG(IMX_SSI1_BASE + 0x1c)
-+#define SSI1_SRCR __REG(IMX_SSI1_BASE + 0x20)
-+#define SSI1_STCCR __REG(IMX_SSI1_BASE + 0x24)
-+#define SSI1_SRCCR __REG(IMX_SSI1_BASE + 0x28)
-+#define SSI1_SFCSR __REG(IMX_SSI1_BASE + 0x2c)
-+#define SSI1_STR __REG(IMX_SSI1_BASE + 0x30)
-+#define SSI1_SOR __REG(IMX_SSI1_BASE + 0x34)
-+#define SSI1_SACNT __REG(IMX_SSI1_BASE + 0x38)
-+#define SSI1_SACADD __REG(IMX_SSI1_BASE + 0x3c)
-+#define SSI1_SACDAT __REG(IMX_SSI1_BASE + 0x40)
-+#define SSI1_SATAG __REG(IMX_SSI1_BASE + 0x44)
-+#define SSI1_STMSK __REG(IMX_SSI1_BASE + 0x48)
-+#define SSI1_SRMSK __REG(IMX_SSI1_BASE + 0x4c)
-+
-+#define SSI2_STX0 __REG(IMX_SSI2_BASE + 0x00)
-+#define SSI2_STX0_PHYS __PHYS_REG(IMX_SSI2_BASE + 0x00)
-+#define SSI2_STX1 __REG(IMX_SSI2_BASE + 0x04)
-+#define SSI2_STX1_PHYS __PHYS_REG(IMX_SSI2_BASE + 0x04)
-+#define SSI2_SRX0 __REG(IMX_SSI2_BASE + 0x08)
-+#define SSI2_SRX0_PHYS __PHYS_REG(IMX_SSI2_BASE + 0x08)
-+#define SSI2_SRX1 __REG(IMX_SSI2_BASE + 0x0c)
-+#define SSI2_SRX1_PHYS __PHYS_REG(IMX_SSI2_BASE + 0x0c)
-+#define SSI2_SCR __REG(IMX_SSI2_BASE + 0x10)
-+#define SSI2_SISR __REG(IMX_SSI2_BASE + 0x14)
-+#define SSI2_SIER __REG(IMX_SSI2_BASE + 0x18)
-+#define SSI2_STCR __REG(IMX_SSI2_BASE + 0x1c)
-+#define SSI2_SRCR __REG(IMX_SSI2_BASE + 0x20)
-+#define SSI2_STCCR __REG(IMX_SSI2_BASE + 0x24)
-+#define SSI2_SRCCR __REG(IMX_SSI2_BASE + 0x28)
-+#define SSI2_SFCSR __REG(IMX_SSI2_BASE + 0x2c)
-+#define SSI2_STR __REG(IMX_SSI2_BASE + 0x30)
-+#define SSI2_SOR __REG(IMX_SSI2_BASE + 0x34)
-+#define SSI2_SACNT __REG(IMX_SSI2_BASE + 0x38)
-+#define SSI2_SACADD __REG(IMX_SSI2_BASE + 0x3c)
-+#define SSI2_SACDAT __REG(IMX_SSI2_BASE + 0x40)
-+#define SSI2_SATAG __REG(IMX_SSI2_BASE + 0x44)
-+#define SSI2_STMSK __REG(IMX_SSI2_BASE + 0x48)
-+#define SSI2_SRMSK __REG(IMX_SSI2_BASE + 0x4c)
-+
-+#define SSI_SCR_CLK_IST (1 << 9)
-+#define SSI_SCR_TCH_EN (1 << 8)
-+#define SSI_SCR_SYS_CLK_EN (1 << 7)
-+#define SSI_SCR_I2S_MODE_NORM (0 << 5)
-+#define SSI_SCR_I2S_MODE_MSTR (1 << 5)
-+#define SSI_SCR_I2S_MODE_SLAVE (2 << 5)
-+#define SSI_SCR_SYN (1 << 4)
-+#define SSI_SCR_NET (1 << 3)
-+#define SSI_SCR_RE (1 << 2)
-+#define SSI_SCR_TE (1 << 1)
-+#define SSI_SCR_SSIEN (1 << 0)
-+
-+#define SSI_SISR_CMDAU (1 << 18)
-+#define SSI_SISR_CMDDU (1 << 17)
-+#define SSI_SISR_RXT (1 << 16)
-+#define SSI_SISR_RDR1 (1 << 15)
-+#define SSI_SISR_RDR0 (1 << 14)
-+#define SSI_SISR_TDE1 (1 << 13)
-+#define SSI_SISR_TDE0 (1 << 12)
-+#define SSI_SISR_ROE1 (1 << 11)
-+#define SSI_SISR_ROE0 (1 << 10)
-+#define SSI_SISR_TUE1 (1 << 9)
-+#define SSI_SISR_TUE0 (1 << 8)
-+#define SSI_SISR_TFS (1 << 7)
-+#define SSI_SISR_RFS (1 << 6)
-+#define SSI_SISR_TLS (1 << 5)
-+#define SSI_SISR_RLS (1 << 4)
-+#define SSI_SISR_RFF1 (1 << 3)
-+#define SSI_SISR_RFF0 (1 << 2)
-+#define SSI_SISR_TFE1 (1 << 1)
-+#define SSI_SISR_TFE0 (1 << 0)
-+
-+#define SSI_SIER_RDMAE (1 << 22)
-+#define SSI_SIER_RIE (1 << 21)
-+#define SSI_SIER_TDMAE (1 << 20)
-+#define SSI_SIER_TIE (1 << 19)
-+#define SSI_SIER_CMDAU_EN (1 << 18)
-+#define SSI_SIER_CMDDU_EN (1 << 17)
-+#define SSI_SIER_RXT_EN (1 << 16)
-+#define SSI_SIER_RDR1_EN (1 << 15)
-+#define SSI_SIER_RDR0_EN (1 << 14)
-+#define SSI_SIER_TDE1_EN (1 << 13)
-+#define SSI_SIER_TDE0_EN (1 << 12)
-+#define SSI_SIER_ROE1_EN (1 << 11)
-+#define SSI_SIER_ROE0_EN (1 << 10)
-+#define SSI_SIER_TUE1_EN (1 << 9)
-+#define SSI_SIER_TUE0_EN (1 << 8)
-+#define SSI_SIER_TFS_EN (1 << 7)
-+#define SSI_SIER_RFS_EN (1 << 6)
-+#define SSI_SIER_TLS_EN (1 << 5)
-+#define SSI_SIER_RLS_EN (1 << 4)
-+#define SSI_SIER_RFF1_EN (1 << 3)
-+#define SSI_SIER_RFF0_EN (1 << 2)
-+#define SSI_SIER_TFE1_EN (1 << 1)
-+#define SSI_SIER_TFE0_EN (1 << 0)
-+
-+#define SSI_STCR_TXBIT0 (1 << 9)
-+#define SSI_STCR_TFEN1 (1 << 8)
-+#define SSI_STCR_TFEN0 (1 << 7)
-+#define SSI_STCR_TFDIR (1 << 6)
-+#define SSI_STCR_TXDIR (1 << 5)
-+#define SSI_STCR_TSHFD (1 << 4)
-+#define SSI_STCR_TSCKP (1 << 3)
-+#define SSI_STCR_TFSI (1 << 2)
-+#define SSI_STCR_TFSL (1 << 1)
-+#define SSI_STCR_TEFS (1 << 0)
-+
-+#define SSI_SRCR_RXBIT0 (1 << 9)
-+#define SSI_SRCR_RFEN1 (1 << 8)
-+#define SSI_SRCR_RFEN0 (1 << 7)
-+#define SSI_SRCR_RFDIR (1 << 6)
-+#define SSI_SRCR_RXDIR (1 << 5)
-+#define SSI_SRCR_RSHFD (1 << 4)
-+#define SSI_SRCR_RSCKP (1 << 3)
-+#define SSI_SRCR_RFSI (1 << 2)
-+#define SSI_SRCR_RFSL (1 << 1)
-+#define SSI_SRCR_REFS (1 << 0)
-+
-+#define SSI_STCCR_DIV2 (1 << 18)
-+#define SSI_STCCR_PSR (1 << 15)
-+#define SSI_STCCR_WL(x) ((((x) - 2) >> 1) << 13)
-+#define SSI_STCCR_DC(x) (((x) & 0x1f) << 8)
-+#define SSI_STCCR_PM(x) (((x) & 0xff) << 0)
-+
-+#define SSI_SRCCR_DIV2 (1 << 18)
-+#define SSI_SRCCR_PSR (1 << 15)
-+#define SSI_SRCCR_WL(x) ((((x) - 2) >> 1) << 13)
-+#define SSI_SRCCR_DC(x) (((x) & 0x1f) << 8)
-+#define SSI_SRCCR_PM(x) (((x) & 0xff) << 0)
-+
-+
-+#define SSI_SFCSR_RFCNT1(x) (((x) & 0xf) << 28)
-+#define SSI_SFCSR_TFCNT1(x) (((x) & 0xf) << 24)
-+#define SSI_SFCSR_RFWM1(x) (((x) & 0xf) << 20)
-+#define SSI_SFCSR_TFWM1(x) (((x) & 0xf) << 16)
-+#define SSI_SFCSR_RFCNT0(x) (((x) & 0xf) << 12)
-+#define SSI_SFCSR_TFCNT0(x) (((x) & 0xf) << 8)
-+#define SSI_SFCSR_RFWM0(x) (((x) & 0xf) << 4)
-+#define SSI_SFCSR_TFWM0(x) (((x) & 0xf) << 0)
-+
-+#define SSI_STR_TEST (1 << 15)
-+#define SSI_STR_RCK2TCK (1 << 14)
-+#define SSI_STR_RFS2TFS (1 << 13)
-+#define SSI_STR_RXSTATE(x) (((x) & 0xf) << 8)
-+#define SSI_STR_TXD2RXD (1 << 7)
-+#define SSI_STR_TCK2RCK (1 << 6)
-+#define SSI_STR_TFS2RFS (1 << 5)
-+#define SSI_STR_TXSTATE(x) (((x) & 0xf) << 0)
-+
-+#define SSI_SOR_CLKOFF (1 << 6)
-+#define SSI_SOR_RX_CLR (1 << 5)
-+#define SSI_SOR_TX_CLR (1 << 4)
-+#define SSI_SOR_INIT (1 << 3)
-+#define SSI_SOR_WAIT(x) (((x) & 0x3) << 1)
-+#define SSI_SOR_SYNRST (1 << 0)
-+
-+#define SSI_SACNT_FRDIV(x) (((x) & 0x3f) << 5)
-+#define SSI_SACNT_WR (x << 4)
-+#define SSI_SACNT_RD (x << 3)
-+#define SSI_SACNT_TIF (x << 2)
-+#define SSI_SACNT_FV (x << 1)
-+#define SSI_SACNT_A97EN (x << 0)
-+
-+
-+/* AUDMUX registers */
-+#define AUDMUX_HPCR1 __REG(IMX_AUDMUX_BASE + 0x00)
-+#define AUDMUX_HPCR2 __REG(IMX_AUDMUX_BASE + 0x04)
-+#define AUDMUX_HPCR3 __REG(IMX_AUDMUX_BASE + 0x08)
-+#define AUDMUX_PPCR1 __REG(IMX_AUDMUX_BASE + 0x10)
-+#define AUDMUX_PPCR2 __REG(IMX_AUDMUX_BASE + 0x14)
-+#define AUDMUX_PPCR3 __REG(IMX_AUDMUX_BASE + 0x18)
-+
-+#define AUDMUX_HPCR_TFSDIR (1 << 31)
-+#define AUDMUX_HPCR_TCLKDIR (1 << 30)
-+#define AUDMUX_HPCR_TFCSEL_TX (0 << 26)
-+#define AUDMUX_HPCR_TFCSEL_RX (8 << 26)
-+#define AUDMUX_HPCR_TFCSEL(x) (((x) & 0x7) << 26)
-+#define AUDMUX_HPCR_RFSDIR (1 << 25)
-+#define AUDMUX_HPCR_RCLKDIR (1 << 24)
-+#define AUDMUX_HPCR_RFCSEL_TX (0 << 20)
-+#define AUDMUX_HPCR_RFCSEL_RX (8 << 20)
-+#define AUDMUX_HPCR_RFCSEL(x) (((x) & 0x7) << 20)
-+#define AUDMUX_HPCR_RXDSEL(x) (((x) & 0x7) << 13)
-+#define AUDMUX_HPCR_SYN (1 << 12)
-+#define AUDMUX_HPCR_TXRXEN (1 << 10)
-+#define AUDMUX_HPCR_INMEN (1 << 8)
-+#define AUDMUX_HPCR_INMMASK(x) (((x) & 0xff) << 0)
-+
-+#define AUDMUX_PPCR_TFSDIR (1 << 31)
-+#define AUDMUX_PPCR_TCLKDIR (1 << 30)
-+#define AUDMUX_PPCR_TFCSEL_TX (0 << 26)
-+#define AUDMUX_PPCR_TFCSEL_RX (8 << 26)
-+#define AUDMUX_PPCR_TFCSEL(x) (((x) & 0x7) << 26)
-+#define AUDMUX_PPCR_RFSDIR (1 << 25)
-+#define AUDMUX_PPCR_RCLKDIR (1 << 24)
-+#define AUDMUX_PPCR_RFCSEL_TX (0 << 20)
-+#define AUDMUX_PPCR_RFCSEL_RX (8 << 20)
-+#define AUDMUX_PPCR_RFCSEL(x) (((x) & 0x7) << 20)
-+#define AUDMUX_PPCR_RXDSEL(x) (((x) & 0x7) << 13)
-+#define AUDMUX_PPCR_SYN (1 << 12)
-+#define AUDMUX_PPCR_TXRXEN (1 << 10)
-+
-+
-+#endif
-Index: linux-2.6-pxa-new/sound/soc/s3c24xx/s3c24xx-i2s.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/s3c24xx/s3c24xx-i2s.c
-@@ -0,0 +1,271 @@
-+/*
-+ * s3c24xx-i2s.c -- ALSA Soc Audio Layer
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Graeme Gregory
-+ * graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 10th Nov 2006 Initial version.
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/device.h>
-+#include <linux/delay.h>
-+#include <linux/clk.h>
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/initval.h>
-+#include <sound/soc.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/io.h>
-+#include <asm/arch/regs-iis.h>
-+#include <asm/arch/regs-gpio.h>
-+#include <asm/arch/regs-clock.h>
-+#include <asm/arch/audio.h>
-+#include <asm/dma.h>
-+#include <asm/arch/dma.h>
-+
-+#include "s3c24xx-pcm.h"
-+
-+/* used to disable sysclk if external crystal is used */
-+static int extclk = 0;
-+module_param(extclk, int, 0);
-+MODULE_PARM_DESC(extclk, "set to 1 to disable s3c24XX i2s sysclk");
-+
-+#define S3C24XX_I2S_DAIFMT \
-+ (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF)
-+
-+#define S3C24XX_I2S_DIR \
-+ (SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
-+
-+#define S3C24XX_I2S_RATES \
-+ (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
-+ SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
-+ SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000)
-+
-+/* priv is divider */
-+static struct snd_soc_dai_mode s3c24xx_i2s_modes[] =
-+{
-+ /* s3c24xx I2S frame and clock master modes */
-+ {
-+ .fmt = S3C24XX_I2S_DAIFMT | SND_SOC_DAIFMT_CBS_CFS,
-+ .pcmfmt = SNDRV_PCM_FMTBIT_S16_LE,
-+ .pcmrate = SNDRV_PCM_RATE_44100,
-+ .pcmdir = S3C24XX_I2S_DIR,
-+ .flags = SND_SOC_DAI_BFS_RATE,
-+ .fs = 384,
-+ .bfs = 32,
-+ .priv = 0x00
-+ },
-+};
-+
-+static struct s3c2410_dma_client s3c24xx_dma_client_out = {
-+ .name = "I2S PCM Stereo out"
-+};
-+
-+static struct s3c2410_dma_client s3c24xx_dma_client_in = {
-+ .name = "I2S PCM Stereo in"
-+};
-+
-+static s3c24xx_pcm_dma_params_t s3c24xx_i2s_pcm_stereo_out = {
-+ .client = &s3c24xx_dma_client_out,
-+ .channel = DMACH_I2S_OUT,
-+ .dma_addr = S3C2410_PA_IIS+S3C2410_IISFIFO
-+};
-+
-+static s3c24xx_pcm_dma_params_t s3c24xx_i2s_pcm_stereo_in = {
-+ .client = &s3c24xx_dma_client_in,
-+ .channel = DMACH_I2S_IN,
-+ .dma_addr = S3C2410_PA_IIS+S3C2410_IISFIFO
-+};
-+
-+
-+struct s3c24xx_i2s_port {
-+ int master;
-+};
-+static struct s3c24xx_i2s_port s3c24xx_i2s;
-+
-+/* Empty for the s3c24xx platforms */
-+static int s3c24xx_i2s_startup(struct snd_pcm_substream *substream)
-+{
-+ return 0;
-+}
-+
-+static int s3c24xx_i2s_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ unsigned long iiscon;
-+ unsigned long iismod;
-+ unsigned long iisfcon;
-+
-+ s3c24xx_i2s.master = 0;
-+ if(rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_CBS_CFS)
-+ s3c24xx_i2s.master = 1;
-+
-+ /* Configure the I2S pins in correct mode */
-+ s3c2410_gpio_cfgpin(S3C2410_GPE0,S3C2410_GPE0_I2SLRCK);
-+ if (s3c24xx_i2s.master && !extclk){
-+ printk("Setting Clock Output as we are Master\n");
-+ s3c2410_gpio_cfgpin(S3C2410_GPE1,S3C2410_GPE1_I2SSCLK);
-+ }
-+ s3c2410_gpio_cfgpin(S3C2410_GPE2,S3C2410_GPE2_CDCLK);
-+ s3c2410_gpio_cfgpin(S3C2410_GPE3,S3C2410_GPE3_I2SSDI);
-+ s3c2410_gpio_cfgpin(S3C2410_GPE4,S3C2410_GPE4_I2SSDO);
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ {
-+ rtd->cpu_dai->dma_data = &s3c24xx_i2s_pcm_stereo_out;
-+ }
-+ else
-+ {
-+ rtd->cpu_dai->dma_data = &s3c24xx_i2s_pcm_stereo_in;
-+ }
-+
-+ /* Working copies of registers */
-+ iiscon=readl(S3C24XX_VA_IIS+S3C2410_IISCON);
-+ iismod=readl(S3C24XX_VA_IIS+S3C2410_IISMOD);
-+ iisfcon=readl(S3C24XX_VA_IIS+S3C2410_IISFCON);
-+ /* is port used by another stream */
-+ if (!(iiscon & S3C2410_IISCON_IISEN)) {
-+
-+ /* Clear the registers */
-+
-+ iismod |= S3C2410_IISMOD_32FS | S3C2410_IISMOD_384FS;
-+
-+ if (!s3c24xx_i2s.master)
-+ iismod |= S3C2410_IISMOD_SLAVE;
-+
-+ if (rtd->cpu_dai->dai_runtime.fmt & SND_SOC_DAIFMT_LEFT_J)
-+ iismod |= S3C2410_IISMOD_MSB;
-+ }
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ {
-+ iismod |= S3C2410_IISMOD_TXMODE;
-+ iiscon |= S3C2410_IISCON_TXDMAEN;
-+ iisfcon |= S3C2410_IISFCON_TXDMA | S3C2410_IISFCON_TXENABLE;
-+ }
-+ else
-+ {
-+ iismod |= S3C2410_IISMOD_RXMODE;
-+ iiscon |= S3C2410_IISCON_RXDMAEN;
-+ iisfcon |= S3C2410_IISFCON_RXDMA | S3C2410_IISFCON_RXENABLE;
-+ }
-+
-+ writel(iiscon, S3C24XX_VA_IIS+S3C2410_IISCON);
-+ writel(iismod, S3C24XX_VA_IIS+S3C2410_IISMOD);
-+ writel(iisfcon, S3C24XX_VA_IIS+S3C2410_IISFCON);
-+
-+ printk("IISCON: %lx IISMOD: %lx", iiscon, iismod);
-+
-+ return 0;
-+}
-+
-+static int s3c24xx_i2s_trigger(struct snd_pcm_substream *substream, int cmd)
-+{
-+ int ret = 0;
-+ unsigned long iiscon;
-+
-+ switch (cmd) {
-+ case SNDRV_PCM_TRIGGER_START:
-+ /* Enable the IIS unit */
-+ iiscon = readl(S3C24XX_VA_IIS+S3C2410_IISCON);
-+ iiscon |= S3C2410_IISCON_IISEN;
-+ writel(iiscon, S3C24XX_VA_IIS+S3C2410_IISCON);
-+ break;
-+ case SNDRV_PCM_TRIGGER_RESUME:
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ }
-+
-+ return ret;
-+}
-+
-+static void s3c24xx_i2s_shutdown(struct snd_pcm_substream *substream)
-+{
-+ unsigned long iismod, iiscon;
-+
-+ iismod=readl(S3C24XX_VA_IIS+S3C2410_IISMOD);
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ iismod &= ~S3C2410_IISMOD_TXMODE;
-+ } else {
-+ iismod &= ~S3C2410_IISMOD_RXMODE;
-+ }
-+
-+ writel(iismod,S3C24XX_VA_IIS+S3C2410_IISMOD);
-+
-+ iiscon=readl(S3C24XX_VA_IIS+S3C2410_IISCON);
-+
-+ if (iismod & ( S3C2410_IISMOD_TXMODE | S3C2410_IISMOD_RXMODE )) {
-+ iiscon &= ! S3C2410_IISCON_IISEN;
-+ writel(iiscon,S3C24XX_VA_IIS+S3C2410_IISCON);
-+ }
-+}
-+
-+#ifdef CONFIG_PM
-+static int s3c24xx_i2s_suspend(struct platform_device *dev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+}
-+
-+static int s3c24xx_i2s_resume(struct platform_device *pdev,
-+ struct snd_soc_cpu_dai *dai)
-+{
-+}
-+
-+#else
-+#define s3c24xx_i2s_suspend NULL
-+#define s3c24xx_i2s_resume NULL
-+#endif
-+
-+/* s3c24xx I2S sysclock is always 384 FS */
-+static unsigned int s3c24xx_i2s_config_sysclk(struct snd_soc_cpu_dai *iface,
-+ struct snd_soc_clock_info *info, unsigned int clk)
-+{
-+ return info->rate * 384;
-+}
-+
-+struct snd_soc_cpu_dai s3c24xx_i2s_dai = {
-+ .name = "s3c24xx-i2s",
-+ .id = 0,
-+ .type = SND_SOC_DAI_I2S,
-+ .suspend = s3c24xx_i2s_suspend,
-+ .resume = s3c24xx_i2s_resume,
-+ .config_sysclk = s3c24xx_i2s_config_sysclk,
-+ .playback = {
-+ .channels_min = 2,
-+ .channels_max = 2,},
-+ .capture = {
-+ .channels_min = 2,
-+ .channels_max = 2,},
-+ .ops = {
-+ .startup = s3c24xx_i2s_startup,
-+ .shutdown = s3c24xx_i2s_shutdown,
-+ .trigger = s3c24xx_i2s_trigger,
-+ .hw_params = s3c24xx_i2s_hw_params,},
-+ .caps = {
-+ .num_modes = ARRAY_SIZE(s3c24xx_i2s_modes),
-+ .mode = s3c24xx_i2s_modes,},
-+};
-+
-+EXPORT_SYMBOL_GPL(s3c24xx_i2s_dai);
-+
-+/* Module information */
-+MODULE_AUTHOR("Graeme Gregory, graeme.gregory@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("s3c24xx I2S SoC Interface");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/s3c24xx/s3c24xx-pcm.c
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/s3c24xx/s3c24xx-pcm.c
-@@ -0,0 +1,362 @@
-+/*
-+ * s3c24xx-pcm.c -- ALSA Soc Audio Layer
-+ *
-+ * Copyright 2005 Wolfson Microelectronics PLC.
-+ * Author: Graeme Gregory
-+ * graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 10th Nov 2006 Initial version.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/slab.h>
-+#include <linux/dma-mapping.h>
-+
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/soc.h>
-+
-+#include <asm/dma.h>
-+#include <asm/io.h>
-+#include <asm/hardware.h>
-+#include <asm/arch/dma.h>
-+#include <asm/arch/audio.h>
-+
-+#include "s3c24xx-pcm.h"
-+
-+static const struct snd_pcm_hardware s3c24xx_pcm_hardware = {
-+ .info = SNDRV_PCM_INFO_MMAP |
-+ SNDRV_PCM_INFO_MMAP_VALID |
-+ SNDRV_PCM_INFO_INTERLEAVED |
-+ SNDRV_PCM_INFO_PAUSE |
-+ SNDRV_PCM_INFO_RESUME,
-+ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-+ .period_bytes_min = 32,
-+ .period_bytes_max = 8192,
-+ .periods_min = 1,
-+ .periods_max = 8192,
-+ .buffer_bytes_max = 256 * 1024,
-+ .fifo_size = 32,
-+};
-+
-+struct s3c24xx_runtime_data {
-+ dma_addr_t dma_buffer;
-+ dma_addr_t dma_buffer_end;
-+ size_t period_size;
-+ dma_addr_t period_ptr;
-+ s3c24xx_pcm_dma_params_t *params;
-+};
-+
-+/* Move the pointer onto the next period, dealing with wrap around.
-+ */
-+void static next_period(struct s3c24xx_runtime_data *prtd)
-+{
-+ prtd->period_ptr+=prtd->period_size;
-+ if(prtd->period_ptr>=prtd->dma_buffer_end)
-+ {
-+ prtd->period_ptr=prtd->dma_buffer;
-+ }
-+}
-+
-+void s3c24xx_audio_buffdone(struct s3c2410_dma_chan *channel,
-+ void *dev_id, int size,
-+ enum s3c2410_dma_buffresult result)
-+{
-+ struct snd_pcm_substream *substream = dev_id;
-+ struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
-+
-+ if(result==S3C2410_RES_OK)
-+ {
-+ next_period(prtd);
-+ s3c2410_dma_enqueue(prtd->params->channel, substream, prtd->period_ptr, prtd->period_size);
-+ }
-+ snd_pcm_period_elapsed(substream);
-+
-+}
-+
-+static int s3c24xx_pcm_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct s3c24xx_runtime_data *prtd = runtime->private_data;
-+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
-+ s3c24xx_pcm_dma_params_t *dma = rtd->cpu_dai->dma_data;
-+ int ret;
-+
-+ printk("Entered s3c24xx hw_params\n");
-+
-+ snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);
-+ runtime->dma_bytes = params_buffer_bytes(params);
-+
-+ prtd->params=dma;
-+ if(ret=s3c2410_dma_request(prtd->params->channel,
-+ prtd->params->client,NULL))
-+ {
-+ printk("Failed to get dma channel %d for %s\n",prtd->params->channel,
-+ prtd->params->client->name);
-+ return ret;
-+ }
-+
-+ //s3c2410_dma_setflags(prtd->params->channel,S3C2410_DMAF_AUTOSTART);
-+ if(substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ {
-+ s3c2410_dma_devconfig(prtd->params->channel, S3C2410_DMASRC_MEM,
-+ S3C2410_DISRCC_INC | S3C2410_DISRCC_APB,
-+ prtd->params->dma_addr);
-+ }
-+ else
-+ {
-+ s3c2410_dma_devconfig(prtd->params->channel, S3C2410_DMASRC_HW,
-+ S3C2410_DISRCC_INC | S3C2410_DISRCC_APB,
-+ prtd->params->dma_addr);
-+ }
-+
-+ s3c2410_dma_config(prtd->params->channel,2,S3C2410_DCON_HANDSHAKE);
-+
-+ s3c2410_dma_set_buffdone_fn(prtd->params->channel, s3c24xx_audio_buffdone);
-+
-+ prtd->dma_buffer = runtime->dma_addr;
-+ prtd->dma_buffer_end = runtime->dma_addr + runtime->dma_bytes;
-+ prtd->period_size = params_period_bytes(params);
-+
-+ return 0;
-+}
-+
-+static int s3c24xx_pcm_hw_free(struct snd_pcm_substream *substream)
-+{
-+ struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
-+
-+ printk("Entered s3c24xx hw_free\n");
-+
-+ return 0;
-+}
-+
-+static int s3c24xx_pcm_prepare(struct snd_pcm_substream *substream)
-+{
-+ struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
-+
-+ printk("Entered s3c24xx prepare\n");
-+
-+ /* Set the period that is to be queued in DMA */
-+ prtd->period_ptr = prtd->dma_buffer;
-+
-+ /* queue the first period */
-+ s3c2410_dma_enqueue(prtd->params->channel, substream, prtd->period_ptr, prtd->period_size);
-+
-+ /* Move to next period to be queued */
-+ next_period(prtd);
-+
-+ /* queue the second buffer */
-+ s3c2410_dma_enqueue(prtd->params->channel, substream, prtd->period_ptr, prtd->period_size);
-+
-+
-+ return 0;
-+}
-+
-+static int s3c24xx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
-+{
-+ struct s3c24xx_runtime_data *prtd = substream->runtime->private_data;
-+ int ret = 0;
-+
-+ printk("Entered s3c24xx trigger\n");
-+ switch (cmd) {
-+ case SNDRV_PCM_TRIGGER_START:
-+ case SNDRV_PCM_TRIGGER_RESUME:
-+ case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-+ s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_START);
-+ break;
-+
-+ case SNDRV_PCM_TRIGGER_STOP:
-+ case SNDRV_PCM_TRIGGER_SUSPEND:
-+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-+ s3c2410_dma_ctrl(prtd->params->channel, S3C2410_DMAOP_STOP);
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ }
-+
-+ return ret;
-+}
-+
-+static snd_pcm_uframes_t s3c24xx_pcm_pointer(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct s3c24xx_runtime_data *prtd = runtime->private_data;
-+ dma_addr_t dst,src;
-+ snd_pcm_uframes_t x;
-+
-+ printk("Entered s3c24xx pointer\n");
-+
-+ s3c2410_dma_getposition(prtd->params->channel, &src, &dst);
-+
-+ printk("DMA Position: %lx, %lx\n", src, dst);
-+
-+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-+ {
-+ x = bytes_to_frames(runtime, src - prtd->dma_buffer);
-+ }
-+ else
-+ {
-+ x = bytes_to_frames(runtime, dst - prtd->dma_buffer);
-+ }
-+
-+ if (x == runtime->buffer_size)
-+ x=0;
-+ return x;
-+
-+}
-+
-+static int s3c24xx_pcm_open(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct s3c24xx_runtime_data *prtd;
-+ int ret;
-+
-+ printk("Entered s3c24xx open\n");
-+
-+ snd_soc_set_runtime_hwparams(substream, &s3c24xx_pcm_hardware);
-+
-+ if((prtd = kzalloc(sizeof(struct s3c24xx_runtime_data), GFP_KERNEL)) == NULL)
-+ {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+
-+ runtime->private_data = prtd;
-+ return 0;
-+
-+out:
-+ return ret;
-+}
-+
-+static int s3c24xx_pcm_close(struct snd_pcm_substream *substream)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+ struct s3c24xx_runtime_data *prtd = runtime->private_data;
-+
-+ printk("Entered s3c24xx close\n");
-+
-+ s3c2410_dma_free(prtd->params->channel, prtd->params->client);
-+
-+ return 0;
-+}
-+
-+static int
-+s3c24xx_pcm_mmap(struct snd_pcm_substream *substream, struct vm_area_struct *vma)
-+{
-+ struct snd_pcm_runtime *runtime = substream->runtime;
-+
-+ printk("Entered s3c24xx mmap\n");
-+
-+ return dma_mmap_writecombine(substream->pcm->card->dev, vma,
-+ runtime->dma_area,
-+ runtime->dma_addr,
-+ runtime->dma_bytes);
-+}
-+
-+struct snd_pcm_ops s3c24xx_pcm_ops = {
-+ .open = s3c24xx_pcm_open,
-+ .close = s3c24xx_pcm_close,
-+ .ioctl = snd_pcm_lib_ioctl,
-+ .hw_params = s3c24xx_pcm_hw_params,
-+ .hw_free = s3c24xx_pcm_hw_free,
-+ .prepare = s3c24xx_pcm_prepare,
-+ .trigger = s3c24xx_pcm_trigger,
-+ .pointer = s3c24xx_pcm_pointer,
-+ .mmap = s3c24xx_pcm_mmap,
-+};
-+
-+static int s3c24xx_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)
-+{
-+ struct snd_pcm_substream *substream = pcm->streams[stream].substream;
-+ struct snd_dma_buffer *buf = &substream->dma_buffer;
-+ size_t size = s3c24xx_pcm_hardware.buffer_bytes_max;
-+
-+ printk("Entered s3c24xx preaccolate_dma_buffer\n");
-+
-+ buf->dev.type = SNDRV_DMA_TYPE_DEV;
-+ buf->dev.dev = pcm->card->dev;
-+ buf->private_data = NULL;
-+ buf->area = dma_alloc_writecombine(pcm->card->dev, size,
-+ &buf->addr, GFP_KERNEL);
-+ if (!buf->area)
-+ return -ENOMEM;
-+ buf->bytes = size;
-+ return 0;
-+}
-+
-+static void s3c24xx_pcm_free_dma_buffers(struct snd_pcm *pcm)
-+{
-+ struct snd_pcm_substream *substream;
-+ struct snd_dma_buffer *buf;
-+ int stream;
-+
-+ printk("Entered s3c24xx free_dma_buffers\n");
-+
-+ for (stream = 0; stream < 2; stream++) {
-+ substream = pcm->streams[stream].substream;
-+ if (!substream)
-+ continue;
-+
-+ buf = &substream->dma_buffer;
-+ if (!buf->area)
-+ continue;
-+
-+ dma_free_writecombine(pcm->card->dev, buf->bytes,
-+ buf->area, buf->addr);
-+ buf->area = NULL;
-+ }
-+}
-+
-+static u64 s3c24xx_pcm_dmamask = 0xffffffff;
-+
-+int s3c24xx_pcm_new(struct snd_card *card, struct snd_soc_codec_dai *dai,
-+ struct snd_pcm *pcm)
-+{
-+ int ret = 0;
-+
-+ printk("Entered s3c24xx new\n");
-+
-+ if (!card->dev->dma_mask)
-+ card->dev->dma_mask = &s3c24xx_pcm_dmamask;
-+ if (!card->dev->coherent_dma_mask)
-+ card->dev->coherent_dma_mask = 0xffffffff;
-+
-+ if (dai->playback.channels_min) {
-+ ret = s3c24xx_pcm_preallocate_dma_buffer(pcm, SNDRV_PCM_STREAM_PLAYBACK);
-+ if (ret)
-+ goto out;
-+ }
-+
-+ if (dai->capture.channels_min) {
-+ ret = s3c24xx_pcm_preallocate_dma_buffer(pcm, SNDRV_PCM_STREAM_CAPTURE);
-+ if (ret)
-+ goto out;
-+ }
-+ out:
-+ return ret;
-+}
-+
-+struct snd_soc_platform s3c24xx_soc_platform = {
-+ .name = "s3c24xx-audio",
-+ .pcm_ops = &s3c24xx_pcm_ops,
-+ .pcm_new = s3c24xx_pcm_new,
-+ .pcm_free = s3c24xx_pcm_free_dma_buffers,
-+};
-+
-+EXPORT_SYMBOL_GPL(s3c24xx_soc_platform);
-+
-+MODULE_AUTHOR("Graeme Gregory");
-+MODULE_DESCRIPTION("Samsung S3C24XX PCM DMA module");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6-pxa-new/sound/soc/s3c24xx/Kconfig
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/s3c24xx/Kconfig
-@@ -0,0 +1,26 @@
-+menu "SoC Audio for the Atmel AT91"
-+
-+config SND_S3C24XX_SOC
-+ tristate "SoC Audio for the Samsung S3C24xx System-on-Chip"
-+ depends on ARCH_S3C2410 && SND
-+ select SND_PCM
-+ help
-+ Say Y or M if you want to add support for codecs attached to
-+ the Samsung S3C24xx.
-+
-+config SND_S3C24XX_SOC_I2S
-+ tristate
-+
-+config SND_S3C24XX_SOC_AC97
-+ tristate
-+
-+# graeme - add mach dep
-+config SND_S3C24XX_SOC_SMDK2440
-+ tristate "SoC I2S Audio support for SMDK2440"
-+ depends on SND_S3C24XX_SOC
-+ select SND_S3C24XX_SOC_I2S
-+ select SND_SOC_UDA1380
-+ help
-+ Say Y if you want to add support for SoC audio on
-+
-+endmenu
-Index: linux-2.6-pxa-new/sound/soc/s3c24xx/Makefile
-===================================================================
---- /dev/null
-+++ linux-2.6-pxa-new/sound/soc/s3c24xx/Makefile
-@@ -0,0 +1,11 @@
-+# S3C24xx Platform Support
-+snd-soc-s3c24xx-objs := s3c24xx-pcm.o
-+snd-soc-at91-i2s-objs := s3c24xx-i2s.o
-+
-+obj-$(CONFIG_SND_S3C24XX_SOC) += snd-soc-s3c24xx.o
-+obj-$(CONFIG_SND_S3C24XX_SOC_I2S) += snd-soc-s3c24xx-i2s.o
-+
-+# S3C24xx Machine Support
-+snd-soc-smdk2440-uda1380-objs := smdk2440_uda1380.o
-+
-+obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2440) += snd-soc-smdk2440-uda1380.o
diff --git a/packages/linux/linux-rp-2.6.17/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.17/connectplus-remove-ide-HACK.patch
deleted file mode 100644
index 4414b21191..0000000000
--- a/packages/linux/linux-rp-2.6.17/connectplus-remove-ide-HACK.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: linux-2.6.13/drivers/ide/legacy/ide-cs.c
-===================================================================
---- linux-2.6.13.orig/drivers/ide/legacy/ide-cs.c 2005-09-01 22:43:46.000000000 +0100
-+++ linux-2.6.13/drivers/ide/legacy/ide-cs.c 2005-09-01 22:45:46.000000000 +0100
-@@ -488,7 +488,6 @@
- PCMCIA_DEVICE_PROD_ID123("KODAK Picture Card ", "KODAK ", "V100K", 0x94a0d8f3, 0xe4fc3ea0, 0xe5e7eed4),
- PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
- PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
-- PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
- PCMCIA_DEVICE_NULL,
- };
- MODULE_DEVICE_TABLE(pcmcia, ide_ids);
diff --git a/packages/linux/linux-rp-2.6.17/defconfig-akita b/packages/linux/linux-rp-2.6.17/defconfig-akita
deleted file mode 100644
index 249466ac87..0000000000
--- a/packages/linux/linux-rp-2.6.17/defconfig-akita
+++ /dev/null
@@ -1,1572 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16
-# Thu Mar 23 22:11:12 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_IWMMXT=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-CONFIG_SND_PXA2xx_SOC_SPITZ=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-CONFIG_SND_SOC_WM8750=m
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-
-#
-# Video4Linux support is needed for USB Multimedia device support
-#
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.17/defconfig-c7x0 b/packages/linux/linux-rp-2.6.17/defconfig-c7x0
deleted file mode 100644
index 1d702f60c0..0000000000
--- a/packages/linux/linux-rp-2.6.17/defconfig-c7x0
+++ /dev/null
@@ -1,1608 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16
-# Mon May 22 09:00:01 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-CONFIG_MACH_CORGI=y
-CONFIG_MACH_SHEPHERD=y
-CONFIG_MACH_HUSKY=y
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_PXA_SHARP_C7xx=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_KEYBOARD_CORGI=y
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_CORGI=y
-# CONFIG_LEDS_TOSA is not set
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-CONFIG_FB_W100=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-CONFIG_SND_PXA2xx_SOC_CORGI=m
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_PWC is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.17/defconfig-collie b/packages/linux/linux-rp-2.6.17/defconfig-collie
deleted file mode 100644
index f488d42d93..0000000000
--- a/packages/linux/linux-rp-2.6.17/defconfig-collie
+++ /dev/null
@@ -1,1641 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Tue Jul 4 16:35:35 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_COLLIE=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-
-#
-# Processor Features
-#
-CONFIG_KEXEC=y
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-CONFIG_PCMCIA_SA1100=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-CONFIG_NODES_SHIFT=2
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=32M fbcon=rotate:1 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_USB_IRDA=m
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_SA1100_FIR=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-CONFIG_MTD_OBSOLETE_CHIPS=y
-CONFIG_MTD_SHARP=y
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_SA1100=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_ARLAN is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_MCP=y
-CONFIG_MCP_SA11X0=y
-CONFIG_MCP_UCB1200=y
-# CONFIG_MCP_UCB1200_AUDIO is not set
-CONFIG_MCP_UCB1200_TS=m
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_LOCOMO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_MAESTRO 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
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_FIRMWARE_EDID is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-CONFIG_FB_SA1100=y
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-CONFIG_LOGO_OZ240_CLUT224=y
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-CONFIG_USB_NET_CDC_SUBSET=m
-# CONFIG_USB_ALI_M5632 is not set
-# CONFIG_USB_AN2720 is not set
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_EPSON2888 is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ANYDATA=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OMNINET is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-CONFIG_USB_GADGET_SA1100=y
-CONFIG_USB_SA1100=y
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-CONFIG_USB_FILE_STORAGE_TEST=y
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.17/defconfig-hx2000 b/packages/linux/linux-rp-2.6.17/defconfig-hx2000
deleted file mode 100644
index ea56989b75..0000000000
--- a/packages/linux/linux-rp-2.6.17/defconfig-hx2000
+++ /dev/null
@@ -1,1028 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15-rc1-git7
-# Sat Nov 19 23:13:51 2005
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_UID16=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-# CONFIG_CLEAN_COMPILE is not set
-CONFIG_BROKEN=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_SWAP is not set
-# CONFIG_SYSVIPC is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_HOTPLUG=y
-CONFIG_KOBJECT_UEVENT=y
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-CONFIG_MACH_HX2750=y
-CONFIG_PXA27x=y
-CONFIG_PXA_KEYS=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-CONFIG_ISA_DMA_API=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-# CONFIG_AIRO is not set
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_TSC2101=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_SA1100_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-CONFIG_MFD_TSC2101=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_HX2750=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_WBSD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_JBD is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-# CONFIG_TMPFS is not set
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_MAGIC_SYSRQ is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-
diff --git a/packages/linux/linux-rp-2.6.17/defconfig-poodle b/packages/linux/linux-rp-2.6.17/defconfig-poodle
deleted file mode 100644
index deacd170f2..0000000000
--- a/packages/linux/linux-rp-2.6.17/defconfig-poodle
+++ /dev/null
@@ -1,1655 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Jul 10 23:38:56 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-CONFIG_MACH_POODLE=y
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_EM28XX is not set
-CONFIG_USB_DSBR=m
-CONFIG_VIDEO_USBVIDEO=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-CONFIG_LOGO_OZ240_CLUT224=y
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8731 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8974 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_MAINSTONE_BASEBAND is not set
-# CONFIG_SND_MAINSTONE_BLUETOOTH is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_POODLE=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.17/defconfig-qemuarm b/packages/linux/linux-rp-2.6.17/defconfig-qemuarm
deleted file mode 100644
index e34fe5c090..0000000000
--- a/packages/linux/linux-rp-2.6.17/defconfig-qemuarm
+++ /dev/null
@@ -1,1190 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Sat Aug 26 22:45:02 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-CONFIG_ARCH_VERSATILE=y
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Versatile platform type
-#
-CONFIG_ARCH_VERSATILE_PB=y
-# CONFIG_MACH_VERSATILE_AB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-# CONFIG_KEXEC is not set
-CONFIG_ARM_VIC=y
-CONFIG_ICST307=y
-
-#
-# Bus support
-#
-CONFIG_ARM_AMBA=y
-CONFIG_PCI=y
-# CONFIG_PCI_DEBUG is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_LEDS=y
-CONFIG_LEDS_TIMER=y
-CONFIG_LEDS_CPU=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_VFP=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_APM is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_AFS_PARTS=y
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_GEOMETRY is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=y
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-CONFIG_SCSI_SYM53C8XX_2=y
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-CONFIG_SCSI_SYM53C8XX_MMIO=y
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_SMC91X=y
-# CONFIG_DM9000 is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-CONFIG_SERIO_AMBAKMI=y
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_AMBA_PL011=y
-CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-# CONFIG_LEDS_CLASS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-# CONFIG_LEDS_TRIGGERS is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-CONFIG_FB_ARMCLCD=y
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_UHCI_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFSD_TCP is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=y
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-# 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_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_ISO8859_1 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_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.17/defconfig-qemux86 b/packages/linux/linux-rp-2.6.17/defconfig-qemux86
deleted file mode 100644
index 6fe280985f..0000000000
--- a/packages/linux/linux-rp-2.6.17/defconfig-qemux86
+++ /dev/null
@@ -1,1562 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Oct 16 19:42:42 2006
-#
-CONFIG_X86_32=y
-CONFIG_SEMAPHORE_SLEEPERS=y
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_DMI=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_CPUSETS is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_VM86=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_LBD=y
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# Processor type and features
-#
-CONFIG_SMP=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_ES7000 is not set
-CONFIG_M386=y
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_X86_PPRO_FENCE=y
-CONFIG_X86_F00F_BUG=y
-CONFIG_X86_INTEL_USERCOPY=y
-# CONFIG_HPET_TIMER is not set
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_NONFATAL=y
-CONFIG_X86_MCE_P4THERMAL=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-CONFIG_IRQBALANCE=y
-# CONFIG_REGPARM is not set
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=250
-# CONFIG_KEXEC is not set
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_HOTPLUG_CPU is not set
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_VIDEO=m
-# CONFIG_ACPI_HOTKEY is not set
-CONFIG_ACPI_FAN=y
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_ASUS is not set
-CONFIG_ACPI_IBM=m
-# CONFIG_ACPI_IBM_DOCK is not set
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-# CONFIG_PCIEPORTBUS is not set
-# CONFIG_PCI_MSI is not set
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=y
-CONFIG_BINFMT_MISC=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=y
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=y
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=y
-CONFIG_PARPORT_PC=y
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=y
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-CONFIG_BLK_DEV_IDECD=y
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-CONFIG_BLK_DEV_CMD640=y
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_RZ1000=y
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-# CONFIG_BLK_DEV_AEC62XX 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_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 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_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-CONFIG_BLK_DEV_PIIX=y
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-CONFIG_SCSI_DPT_I2O=m
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-CONFIG_SCSI_SATA=y
-# CONFIG_SCSI_SATA_AHCI is not set
-# CONFIG_SCSI_SATA_SVW is not set
-CONFIG_SCSI_ATA_PIIX=y
-# CONFIG_SCSI_SATA_MV is not set
-# CONFIG_SCSI_SATA_NV is not set
-# CONFIG_SCSI_PDC_ADMA is not set
-# CONFIG_SCSI_SATA_QSTOR is not set
-# CONFIG_SCSI_SATA_PROMISE is not set
-CONFIG_SCSI_SATA_SX4=m
-# CONFIG_SCSI_SATA_SIL is not set
-# CONFIG_SCSI_SATA_SIL24 is not set
-CONFIG_SCSI_SATA_SIS=m
-# CONFIG_SCSI_SATA_ULI is not set
-# CONFIG_SCSI_SATA_VIA is not set
-# CONFIG_SCSI_SATA_VITESSE is not set
-CONFIG_SCSI_SATA_INTEL_COMBINED=y
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA 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_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-CONFIG_SCSI_IPR=m
-# CONFIG_SCSI_IPR_TRACE is not set
-# CONFIG_SCSI_IPR_DUMP is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_IEEE1394=y
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_OUI_DB is not set
-# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
-# CONFIG_IEEE1394_EXPORT_FULL_API is not set
-
-#
-# Device Drivers
-#
-
-#
-# Texas Instruments PCILynx requires I2C
-#
-CONFIG_IEEE1394_OHCI1394=y
-
-#
-# Protocol Drivers
-#
-# CONFIG_IEEE1394_VIDEO1394 is not set
-# CONFIG_IEEE1394_SBP2 is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-# CONFIG_IEEE1394_DV1394 is not set
-CONFIG_IEEE1394_RAWIO=y
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_LANCE is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-CONFIG_NET_ISA=y
-# CONFIG_E2100 is not set
-# CONFIG_EWRK3 is not set
-# CONFIG_EEXPRESS is not set
-# CONFIG_EEXPRESS_PRO is not set
-# CONFIG_HPLAN_PLUS is not set
-# CONFIG_HPLAN is not set
-# CONFIG_LP486E is not set
-# CONFIG_ETH16I is not set
-CONFIG_NE2000=y
-# CONFIG_ZNET is not set
-# CONFIG_SEEQ8005 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_AC3200 is not set
-# CONFIG_APRICOT is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_CS89x0 is not set
-# CONFIG_DGRS is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-CONFIG_NE2K_PCI=y
-# CONFIG_8139CP is not set
-CONFIG_8139TOO=y
-CONFIG_8139TOO_PIO=y
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_NET_POCKET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-CONFIG_S2IO=m
-# CONFIG_S2IO_NAPI is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-CONFIG_PRINTER=y
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
-# CONFIG_TIPAR is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-CONFIG_AGP=y
-# CONFIG_AGP_ALI is not set
-# CONFIG_AGP_ATI is not set
-# CONFIG_AGP_AMD is not set
-# CONFIG_AGP_AMD64 is not set
-CONFIG_AGP_INTEL=y
-# CONFIG_AGP_NVIDIA is not set
-# CONFIG_AGP_SIS is not set
-# CONFIG_AGP_SWORKS is not set
-# CONFIG_AGP_VIA is not set
-# CONFIG_AGP_EFFICEON is not set
-CONFIG_DRM=y
-# CONFIG_DRM_TDFX is not set
-# CONFIG_DRM_R128 is not set
-# CONFIG_DRM_RADEON is not set
-# CONFIG_DRM_I810 is not set
-# CONFIG_DRM_I830 is not set
-# CONFIG_DRM_I915 is not set
-# CONFIG_DRM_MGA is not set
-# CONFIG_DRM_SIS is not set
-# CONFIG_DRM_VIA is not set
-# CONFIG_DRM_SAVAGE is not set
-# CONFIG_MWAVE is not set
-# CONFIG_CS5535_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-# CONFIG_IBM_ASM is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
-# CONFIG_FB_VESA_STD is not set
-CONFIG_FB_VESA_TNG=y
-CONFIG_FB_VESA_DEFAULT_MODE="640x480-32@60"
-CONFIG_VIDEO_SELECT=y
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_I810 is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_CYBLA is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=y
-CONFIG_SND_AC97_BUS=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ISA devices
-#
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB 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_MIRO is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_WAVEFRONT is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5535AUDIO 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_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR 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_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_USX2Y is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGETKIT is not set
-CONFIG_USB_PHIDGETSERVO=m
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-# CONFIG_EDAC is not set
-
-#
-# Real Time Clock
-#
-# CONFIG_RTC_CLASS is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-CONFIG_UDF_FS=y
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-# CONFIG_NFS_V3 is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-# CONFIG_NFSD_V3 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
-# CONFIG_KPROBES is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=15
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_UNWIND_INFO is not set
-CONFIG_EARLY_PRINTK=y
-CONFIG_STACK_BACKTRACE_COLS=2
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-CONFIG_DOUBLEFAULT=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_KTIME_SCALAR=y
diff --git a/packages/linux/linux-rp-2.6.17/defconfig-spitz b/packages/linux/linux-rp-2.6.17/defconfig-spitz
deleted file mode 100644
index 824fd57aaa..0000000000
--- a/packages/linux/linux-rp-2.6.17/defconfig-spitz
+++ /dev/null
@@ -1,1603 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Sun Sep 3 23:29:17 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_IWMMXT=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rw fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-CONFIG_LOGO_OZ640_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-CONFIG_SND_PXA2xx_SOC_SPITZ=m
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-CONFIG_SND_SOC_WM8750=m
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
diff --git a/packages/linux/linux-rp-2.6.17/defconfig-tosa b/packages/linux/linux-rp-2.6.17/defconfig-tosa
deleted file mode 100644
index b2ac915e07..0000000000
--- a/packages/linux/linux-rp-2.6.17/defconfig-tosa
+++ /dev/null
@@ -1,1609 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-rc5-git5
-# Tue Mar 14 09:05:26 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-CONFIG_MACH_TOSA=y
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-CONFIG_TOSHIBA_TC6393XB=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_TMIO=y
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-CONFIG_KEYBOARD_TOSA=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_CORGI is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_WM97XX=y
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-CONFIG_TOUCHSCREEN_WM9712=y
-# CONFIG_TOUCHSCREEN_WM9713 is not set
-# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TOSA=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_W100 is not set
-CONFIG_FB_TMIO=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_BUS=y
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=y
-CONFIG_SND_PXA2xx_SOC_AC97=y
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_TOSA=y
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-CONFIG_SND_SOC_WM9712=y
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_PWC is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_GENERIC_ALLOCATOR=y
diff --git a/packages/linux/linux-rp-2.6.17/hrw-pcmcia-ids-r5.patch b/packages/linux/linux-rp-2.6.17/hrw-pcmcia-ids-r5.patch
deleted file mode 100644
index b09acacadd..0000000000
--- a/packages/linux/linux-rp-2.6.17/hrw-pcmcia-ids-r5.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
-Few cards informations submitted by OpenZaurus users.
-
-Seagate 8GB microdrive:
- product info: "SEAGATE", "ST1"
- manfid 0x0111, 0x0000
-
-One CF card:
- product info: "SAMSUNG", "04/05/06", "", ""
- manfid : 0x0000, 0x0000
-
-Ridata 8GB Pro 150X Compact Flash Card:
- product info: "SMI VENDOR", "SMI PRODUCT", ""
- manfid: 0x000a, 0x0000
-
- product info: "M-Systems", "CF500", ""
- manfid: 0x000a, 0x0000
-
- product info: "TRANSCEND", "TS4GCF120", ""
- manfid: 0x000a, 0x0000
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
- drivers/ide/legacy/ide-cs.c | 5 +++++
- drivers/net/pcmcia/pcnet_cs.c | 2 ++
- 2 files changed, 7 insertions(+)
-
-Index: linux-2.6.18/drivers/ide/legacy/ide-cs.c
-===================================================================
---- linux-2.6.18.orig/drivers/ide/legacy/ide-cs.c 2006-12-06 00:55:51.000000000 +0000
-+++ linux-2.6.18/drivers/ide/legacy/ide-cs.c 2006-12-06 00:55:55.000000000 +0000
-@@ -398,12 +398,17 @@ static struct pcmcia_device_id ide_ids[]
- PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDE", 0x547e66dc, 0x5c5ab149),
- PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDEII", 0x547e66dc, 0xb3662674),
- PCMCIA_DEVICE_PROD_ID12("LOOKMEET", "CBIDE2 ", 0xe37be2b5, 0x8671043b),
-+ PCMCIA_DEVICE_PROD_ID12("M-Systems", "CF500", 0x7ed2ad87, 0x7a13045c),
- PCMCIA_DEVICE_PROD_ID2("NinjaATA-", 0xebe0bd79),
- PCMCIA_DEVICE_PROD_ID12("PCMCIA", "CD-ROM", 0x281f1c5d, 0x66536591),
- PCMCIA_DEVICE_PROD_ID12("PCMCIA", "PnPIDE", 0x281f1c5d, 0x0c694728),
- PCMCIA_DEVICE_PROD_ID12("SHUTTLE TECHNOLOGY LTD.", "PCCARD-IDE/ATAPI Adapter", 0x4a3f0ba0, 0x322560e1),
-+ PCMCIA_DEVICE_PROD_ID12("SEAGATE", "ST1", 0x87c1b330, 0xe1f30883),
-+ PCMCIA_DEVICE_PROD_ID12("SAMSUNG", "04/05/06", 0x43d74cb4, 0x6a22777d),
-+ PCMCIA_DEVICE_PROD_ID12("SMI VENDOR", "SMI PRODUCT", 0x30896c92, 0x703cc5f6),
- PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "MK2001MPL", 0xb4585a1a, 0x3489e003),
- PCMCIA_DEVICE_PROD_ID1("TRANSCEND 512M ", 0xd0909443),
-+ PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF120", 0x709b1bf1, 0xf54a91c8),
- PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852),
- PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
- PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
-Index: linux-2.6.18/drivers/net/pcmcia/pcnet_cs.c
-===================================================================
---- linux-2.6.18.orig/drivers/net/pcmcia/pcnet_cs.c 2006-09-20 04:42:06.000000000 +0100
-+++ linux-2.6.18/drivers/net/pcmcia/pcnet_cs.c 2006-12-06 00:57:27.000000000 +0000
-@@ -1770,6 +1770,8 @@ static struct pcmcia_device_id pcnet_ids
- PCMCIA_DEVICE_CIS_PROD_ID12("TAMARACK", "Ethernet", 0xcf434fba, 0x00b2e941, "tamarack.cis"),
- PCMCIA_DEVICE_PROD_ID123("Fast Ethernet", "CF Size PC Card", "1.0",
- 0xb4be14e3, 0x43ac239b, 0x0877b627),
-+ PCMCIA_DEVICE_PROD_ID123("Ethernet", "CF Size PC Card", "1.0",
-+ 0x00b2e941, 0x43ac239b, 0x0877b627),
- PCMCIA_DEVICE_NULL
- };
- MODULE_DEVICE_TABLE(pcmcia, pcnet_ids);
diff --git a/packages/linux/linux-rp-2.6.17/orinoco-remove-all-which-are-in-hostap-HACK.patch b/packages/linux/linux-rp-2.6.17/orinoco-remove-all-which-are-in-hostap-HACK.patch
deleted file mode 100644
index 380349f809..0000000000
--- a/packages/linux/linux-rp-2.6.17/orinoco-remove-all-which-are-in-hostap-HACK.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-This patch should resolve problem when people get eth0 (orinoco_cs) instead of wlan0 (hostap_cs)
-with their WiFi cards.
-
-Patch will NEVER been accepted upstream.
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
-Index: linux/drivers/net/wireless/orinoco_cs.c
-===================================================================
---- linux.orig/drivers/net/wireless/orinoco_cs.c 2006-08-23 16:04:10.000000000 +0200
-+++ linux/drivers/net/wireless/orinoco_cs.c 2006-08-23 16:17:43.000000000 +0200
-@@ -453,33 +453,21 @@
- "Pavel Roskin <proski@gnu.org>, et al)";
-
- static struct pcmcia_device_id orinoco_cs_ids[] = {
-- PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100), /* SonicWALL Long Range Wireless Card */
-- PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7300), /* Sohoware NCP110, Philips 802.11b */
- PCMCIA_DEVICE_MANF_CARD(0x0089, 0x0002), /* AnyPoint(TM) Wireless II PC Card */
-- PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), /* 3Com AirConnect PCI 777A */
-- PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000), /* PROXIM RangeLAN-DS/LAN PC CARD */
- PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002), /* Compaq WL100 11 Mbps Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0002), /* Lucent Orinoco and old Intersil */
- PCMCIA_DEVICE_MANF_CARD(0x016b, 0x0001), /* Ericsson WLAN Card C11 */
- PCMCIA_DEVICE_MANF_CARD(0x01eb, 0x080a), /* Nortel Networks eMobility 802.11 Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x01ff, 0x0008), /* Intermec MobileLAN 11Mbps 802.11b WLAN Card */
-- PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002), /* Samsung SWL2000-N 11Mb/s WLAN Card */
- PCMCIA_DEVICE_MANF_CARD(0x0261, 0x0002), /* AirWay 802.11 Adapter (PCMCIA) */
- PCMCIA_DEVICE_MANF_CARD(0x0268, 0x0001), /* ARtem Onair */
- PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0305), /* Buffalo WLI-PCM-S11 */
-- PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612), /* Linksys WPC11 Version 2.5 */
-- PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1613), /* Linksys WPC11 Version 3 */
-- PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0002), /* Compaq HNW-100 11 Mbps Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0673), /* Linksys WCF12 Wireless CompactFlash Card */
-- PCMCIA_DEVICE_MANF_CARD(0x02aa, 0x0002), /* ASUS SpaceLink WL-100 */
- PCMCIA_DEVICE_MANF_CARD(0x02ac, 0x0002), /* SpeedStream SS1021 Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x14ea, 0xb001), /* PLANEX RoadLannerWave GW-NS11H */
-- PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x7300), /* Airvast WN-100 */
- PCMCIA_DEVICE_MANF_CARD(0x9005, 0x0021), /* Adaptec Ultra Wireless ANW-8030 */
- PCMCIA_DEVICE_MANF_CARD(0xc001, 0x0008), /* CONTEC FLEXSCAN/FX-DDS110-PCC */
- PCMCIA_DEVICE_MANF_CARD(0xc250, 0x0002), /* Conceptronic CON11Cpro, EMTAC A2424i */
-- PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002), /* Safeway 802.11b, ZCOMAX AirRunner/XI-300 */
-- PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005), /* D-Link DCF660, Sandisk Connect SDWCFB-000 */
- PCMCIA_DEVICE_PROD_ID12(" ", "IEEE 802.11 Wireless LAN/PC Card", 0x3b6e20c8, 0xefccafe9),
- PCMCIA_DEVICE_PROD_ID12("3Com", "3CRWE737A AirConnect Wireless LAN PC Card", 0x41240e5b, 0x56010af3),
- PCMCIA_DEVICE_PROD_ID12("ACTIONTEC", "PRISM Wireless LAN PC Card", 0x393089da, 0xa71e69d5),
-@@ -487,31 +475,25 @@
- PCMCIA_DEVICE_PROD_ID123("AIRVAST", "IEEE 802.11b Wireless PCMCIA Card", "HFA3863", 0xea569531, 0x4bcb9645, 0x355cb092),
- PCMCIA_DEVICE_PROD_ID12("Allied Telesyn", "AT-WCL452 Wireless PCMCIA Radio", 0x5cd01705, 0x4271660f),
- PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11b_PC_CARD_25", 0x78fc06ee, 0xdb9aa842),
-- PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11B_CF_CARD_25", 0x78fc06ee, 0x45a50c1e),
- PCMCIA_DEVICE_PROD_ID12("Avaya Communication", "Avaya Wireless PC Card", 0xd8a43b78, 0x0d341169),
- PCMCIA_DEVICE_PROD_ID12("BENQ", "AWL100 PCMCIA ADAPTER", 0x35dadc74, 0x01f7fedb),
- PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-PCM-L11G", 0x2decece3, 0xf57ca4b3),
-- PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-CF-S11G", 0x2decece3, 0x82067c18),
- PCMCIA_DEVICE_PROD_ID12("Cabletron", "RoamAbout 802.11 DS", 0x32d445f5, 0xedeffd90),
-- PCMCIA_DEVICE_PROD_ID12("Compaq", "WL200_11Mbps_Wireless_PCI_Card", 0x54f7c49c, 0x15a75e5b),
- PCMCIA_DEVICE_PROD_ID123("corega", "WL PCCL-11", "ISL37300P", 0x0a21501a, 0x59868926, 0xc9049a39),
- PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCC-11", 0x5261440f, 0xa6405584),
- PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCCA-11", 0x5261440f, 0xdf6115f9),
- PCMCIA_DEVICE_PROD_ID12("corega_K.K.", "Wireless_LAN_PCCB-11", 0x29e33311, 0xee7a27ae),
- PCMCIA_DEVICE_PROD_ID12("D", "Link DRC-650 11Mbps WLAN Card", 0x71b18589, 0xf144e3ac),
-- PCMCIA_DEVICE_PROD_ID12("D", "Link DWL-650 11Mbps WLAN Card", 0x71b18589, 0xb6f1b0ab),
- PCMCIA_DEVICE_PROD_ID12("D-Link Corporation", "D-Link DWL-650H 11Mbps WLAN Adapter", 0xef544d24, 0xcd8ea916),
- PCMCIA_DEVICE_PROD_ID12("Digital Data Communications", "WPC-0100", 0xfdd73470, 0xe0b6f146),
- PCMCIA_DEVICE_PROD_ID12("ELSA", "AirLancer MC-11", 0x4507a33a, 0xef54f0e3),
- PCMCIA_DEVICE_PROD_ID12("HyperLink", "Wireless PC Card 11Mbps", 0x56cc3f1a, 0x0bcf220c),
- PCMCIA_DEVICE_PROD_ID123("Instant Wireless ", " Network PC CARD", "Version 01.02", 0x11d901af, 0x6e9bd926, 0x4b74baa0),
- PCMCIA_DEVICE_PROD_ID12("Intel", "PRO/Wireless 2011 LAN PC Card", 0x816cc815, 0x07f58077),
-- PCMCIA_DEVICE_PROD_ID12("INTERSIL", "HFA384x/IEEE", 0x74c5e40d, 0xdb472a18),
- PCMCIA_DEVICE_PROD_ID12("INTERSIL", "I-GATE 11M PC Card / PC Card plus", 0x74c5e40d, 0x8304ff77),
- PCMCIA_DEVICE_PROD_ID12("Intersil", "PRISM 2_5 PCMCIA ADAPTER", 0x4b801a17, 0x6345a0bf),
- PCMCIA_DEVICE_PROD_ID123("Intersil", "PRISM Freedom PCMCIA Adapter", "ISL37100P", 0x4b801a17, 0xf222ec2d, 0x630d52b2),
- PCMCIA_DEVICE_PROD_ID12("LeArtery", "SYNCBYAIR 11Mbps Wireless LAN PC Card", 0x7e3b326a, 0x49893e92),
-- PCMCIA_DEVICE_PROD_ID12("Linksys", "Wireless CompactFlash Card", 0x0733cc81, 0x0c52f395),
- PCMCIA_DEVICE_PROD_ID12("Lucent Technologies", "WaveLAN/IEEE", 0x23eb9949, 0xc562e72a),
- PCMCIA_DEVICE_PROD_ID12("MELCO", "WLI-PCM-L11", 0x481e0094, 0x7360e410),
- PCMCIA_DEVICE_PROD_ID12("MELCO", "WLI-PCM-L11G", 0x481e0094, 0xf57ca4b3),
-@@ -529,10 +511,8 @@
- PCMCIA_DEVICE_PROD_ID12("PROXIM", "LAN PCI CARD HARMONY 80211B", 0xc6536a5e, 0x9f494e26),
- PCMCIA_DEVICE_PROD_ID12("SAMSUNG", "11Mbps WLAN Card", 0x43d74cb4, 0x579bd91b),
- PCMCIA_DEVICE_PROD_ID12("SMC", "SMC2532W-B EliteConnect Wireless Adapter", 0xc4f8b18b, 0x196bd757),
-- PCMCIA_DEVICE_PROD_ID12("SMC", "SMC2632W", 0xc4f8b18b, 0x474a1f2a),
- PCMCIA_DEVICE_PROD_ID12("Symbol Technologies", "LA4111 Spectrum24 Wireless LAN PC Card", 0x3f02b4d6, 0x3663cb0e),
- PCMCIA_DEVICE_PROD_ID123("The Linksys Group, Inc.", "Instant Wireless Network PC Card", "ISL37300P", 0xa5f472c2, 0x590eb502, 0xc9049a39),
-- PCMCIA_DEVICE_PROD_ID12("ZoomAir 11Mbps High", "Rate wireless Networking", 0x273fe3db, 0x32a1eaee),
- PCMCIA_DEVICE_NULL,
- };
- MODULE_DEVICE_TABLE(pcmcia, orinoco_cs_ids);
diff --git a/packages/linux/linux-rp-2.6.17/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.17/pxa-serial-hack.patch
deleted file mode 100644
index b3a7f786ea..0000000000
--- a/packages/linux/linux-rp-2.6.17/pxa-serial-hack.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-Index: linux-2.6.14/drivers/serial/8250.c
-===================================================================
---- linux-2.6.14.orig/drivers/serial/8250.c 2005-11-07 18:10:50.000000000 +0000
-+++ linux-2.6.14/drivers/serial/8250.c 2005-11-07 19:01:21.000000000 +0000
-@@ -2333,7 +2333,12 @@
- .devfs_name = "tts/",
- .dev_name = "ttyS",
- .major = TTY_MAJOR,
-+#ifdef CONFIG_SERIAL_PXA
-+ .minor = 64 + 3,
-+ .name_base = 3,
-+#else
- .minor = 64,
-+#endif
- .nr = UART_NR,
- .cons = SERIAL8250_CONSOLE,
- };
-Index: linux-2.6.14/drivers/serial/serial_core.c
-===================================================================
---- linux-2.6.14.orig/drivers/serial/serial_core.c 2005-11-07 18:10:50.000000000 +0000
-+++ linux-2.6.14/drivers/serial/serial_core.c 2005-11-07 19:01:21.000000000 +0000
-@@ -2126,6 +2126,7 @@
- normal->driver_name = drv->driver_name;
- normal->devfs_name = drv->devfs_name;
- normal->name = drv->dev_name;
-+ normal->name_base = drv->name_base;
- normal->major = drv->major;
- normal->minor_start = drv->minor;
- normal->type = TTY_DRIVER_TYPE_SERIAL;
-Index: linux-2.6.14/include/linux/serial_core.h
-===================================================================
---- linux-2.6.14.orig/include/linux/serial_core.h 2005-11-07 18:10:56.000000000 +0000
-+++ linux-2.6.14/include/linux/serial_core.h 2005-11-07 19:01:21.000000000 +0000
-@@ -322,6 +322,7 @@
- const char *driver_name;
- const char *dev_name;
- const char *devfs_name;
-+ int name_base;
- int major;
- int minor;
- int nr;
-Index: linux-2.6.14/drivers/serial/serial_cs.c
-===================================================================
---- linux-2.6.14.orig/drivers/serial/serial_cs.c 2005-10-28 01:02:08.000000000 +0100
-+++ linux-2.6.14/drivers/serial/serial_cs.c 2005-11-07 19:01:21.000000000 +0000
-@@ -294,7 +294,7 @@
- kio_addr_t iobase, int irq)
- {
- struct uart_port port;
-- int line;
-+ int line, linestart;
-
- memset(&port, 0, sizeof (struct uart_port));
- port.iobase = iobase;
-@@ -311,10 +311,16 @@
- return -EINVAL;
- }
-
-+#if CONFIG_SERIAL_PXA
-+ linestart = 3;
-+#else
-+ linestart = 0;
-+#endif
-+
- info->line[info->ndev] = line;
-- sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
-+ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line+linestart);
- info->node[info->ndev].major = TTY_MAJOR;
-- info->node[info->ndev].minor = 0x40 + line;
-+ info->node[info->ndev].minor = 0x40 + line + linestart;
- if (info->ndev > 0)
- info->node[info->ndev - 1].next = &info->node[info->ndev];
- info->ndev++;
diff --git a/packages/linux/linux-rp-2.6.17/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.17/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
deleted file mode 100644
index 18bf4268fc..0000000000
--- a/packages/linux/linux-rp-2.6.17/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-
-From: Petr Vandrovec <vandrove@vc.cvut.cz>
-
-Patch below adds support for using different prescaler than 16 for 16c950
-chips. This is needed for using Fujitsu-Siemens Connect2Air compact-flash
-card, which comes (apparently) with 806kHz clocks, and so you have to
-program prescaler for division by 7, and DLAB to 1, to get 115200Bd.
-
-To get card properly running you also have to add lines below to
-/etc/pcmcia/serial.opts so kernel knows that base speed is not 115200 but
-50400 (50400 * 16 = 806400; 806400 / 7 = 115200). As I've found no code
-specifying baud_rate in serial_cs, I assume that specifying it in
-serial.opts is right way to do this type of things.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER maximum possible
-baud rate passed to uart code was uartclk / 16 while correct value for
-these devices (and for 16c950) is uartclk / 4.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER devices with
-baud_rate 19200 or 9600 spd_cust did not work correctly. Not that such
-devices exist, but we should not ignore spd_cust, user probably knows why
-he asked for spd_cust.
-
-serial.opts:
-
-case "$MANFID-$FUNCID-$PRODID_1-$PRODID_2-$PRODID_3-$PRODID_4" in
-'0279,950b-2-GPRS Modem---')
- SERIAL_OPTS="baud_base 50400"
- ;;
-esac
-
-Cc: David Woodhouse <dwmw2@infradead.org>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
----
-
- drivers/serial/8250.c | 82 +++++++++++++++++++++++++++++++++++++++-----------
- 1 files changed, 64 insertions(+), 18 deletions(-)
-
-diff -puN drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver drivers/serial/8250.c
---- devel/drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver 2005-09-12 03:34:57.000000000 -0700
-+++ devel-akpm/drivers/serial/8250.c 2005-09-12 03:34:57.000000000 -0700
-@@ -1653,24 +1653,58 @@ static void serial8250_shutdown(struct u
- serial_unlink_irq_chain(up);
- }
-
--static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud)
-+static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud,
-+ unsigned int *prescaler)
- {
-- unsigned int quot;
--
-- /*
-- * Handle magic divisors for baud rates above baud_base on
-- * SMSC SuperIO chips.
-+ /*
-+ * Use special handling only if user did not supply its own divider.
-+ * spd_cust is defined in terms of baud_base, so always use default
-+ * prescaler when spd_cust is requested.
- */
-- if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/4))
-- quot = 0x8001;
-- else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/8))
-- quot = 0x8002;
-- else
-- quot = uart_get_divisor(port, baud);
-
-- return quot;
-+ *prescaler = 16;
-+ if (baud != 38400 || (port->flags & UPF_SPD_MASK) != UPF_SPD_CUST) {
-+ unsigned int quot = port->uartclk / baud;
-+
-+ /*
-+ * Handle magic divisors for baud rates above baud_base on
-+ * SMSC SuperIO chips.
-+ */
-+ if (port->flags & UPF_MAGIC_MULTIPLIER) {
-+ if (quot == 4) {
-+ return 0x8001;
-+ } else if (quot == 8) {
-+ return 0x8002;
-+ }
-+ }
-+ if (port->type == PORT_16C950) {
-+ /*
-+ * This computes TCR value (4 to 16), not CPR value (which can
-+ * be between 1.000 and 31.875) - chip I have uses XTAL of
-+ * 806400Hz, and so a division by 7 is required to get 115200Bd.
-+ * I'm leaving CPR disabled for now, until someone will
-+ * hit even more exotic XTAL (it is needed to get 500kbps
-+ * or 1000kbps from 18.432MHz XTAL, but I have no device
-+ * which would benefit from doing that).
-+ *
-+ * If we can use divide by 16, use it. Otherwise look for
-+ * better prescaler, from 15 to 4. If quotient cannot
-+ * be divided by any integer value between 4 and 15, use 4.
-+ */
-+ if (quot & 0x0F) {
-+ unsigned int div;
-+
-+ for (div = 15; div > 4; div--) {
-+ if (quot % div == 0) {
-+ break;
-+ }
-+ }
-+ *prescaler = div;
-+ return quot / div;
-+ }
-+ }
-+ }
-+ return uart_get_divisor(port, baud);
- }
-
- static void
-@@ -1680,7 +1714,7 @@ serial8250_set_termios(struct uart_port
- struct uart_8250_port *up = (struct uart_8250_port *)port;
- unsigned char cval, fcr = 0;
- unsigned long flags;
-- unsigned int baud, quot;
-+ unsigned int baud, quot, prescaler;
-
- switch (termios->c_cflag & CSIZE) {
- case CS5:
-@@ -1712,8 +1746,13 @@ serial8250_set_termios(struct uart_port
- /*
- * Ask the core to calculate the divisor for us.
- */
-- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-- quot = serial8250_get_divisor(port, baud);
-+
-+ if (port->type == PORT_16C950 || (port->flags & UPF_MAGIC_MULTIPLIER)) {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/4);
-+ } else {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-+ }
-+ quot = serial8250_get_divisor(port, baud, &prescaler);
-
- /*
- * Oxford Semi 952 rev B workaround
-@@ -1817,6 +1856,13 @@ serial8250_set_termios(struct uart_port
- serial_outp(up, UART_DLM, quot >> 8); /* MS of divisor */
-
- /*
-+ * Program prescaler for 16C950 chips.
-+ */
-+ if (up->port.type == PORT_16C950) {
-+ serial_icr_write(up, UART_TCR, prescaler == 16 ? 0 : prescaler);
-+ }
-+
-+ /*
- * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
- * is written without DLAB set, this mode will be disabled.
- */
-_
diff --git a/packages/linux/linux-rp-2.6.17/squashfs3.0-2.6.15.patch b/packages/linux/linux-rp-2.6.17/squashfs3.0-2.6.15.patch
deleted file mode 100644
index 6fec9eba03..0000000000
--- a/packages/linux/linux-rp-2.6.17/squashfs3.0-2.6.15.patch
+++ /dev/null
@@ -1,4174 +0,0 @@
-diff --new-file -urp linux-2.6.15/fs/Kconfig linux-2.6.15-squashfs3.0/fs/Kconfig
---- linux-2.6.15/fs/Kconfig 2006-03-01 22:37:27.000000000 +0000
-+++ linux-2.6.15-squashfs3.0/fs/Kconfig 2006-03-07 21:12:37.000000000 +0000
-@@ -1151,6 +1151,71 @@ config CRAMFS
-
- If unsure, say N.
-
-+config SQUASHFS
-+ tristate "SquashFS 3.0 - Squashed file system support"
-+ select ZLIB_INFLATE
-+ help
-+ Saying Y here includes support for SquashFS 3.0 (a Compressed Read-Only File
-+ System). Squashfs is a highly compressed read-only filesystem for Linux.
-+ It uses zlib compression to compress both files, inodes and directories.
-+ Inodes in the system are very small and all blocks are packed to minimise
-+ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
-+ SquashFS 3.0 supports 64 bit filesystems and files (larger than 4GB), full
-+ uid/gid information, hard links and timestamps.
-+
-+ Squashfs is intended for general read-only filesystem use, for archival
-+ use (i.e. in cases where a .tar.gz file may be used), and in embedded
-+ systems where low overhead is needed. Further information and filesystem tools
-+ are available from http://squashfs.sourceforge.net.
-+
-+ If you want to compile this as a module ( = code which can be
-+ inserted in and removed from the running kernel whenever you want),
-+ say M here and read <file:Documentation/modules.txt>. The module
-+ will be called squashfs. Note that the root file system (the one
-+ containing the directory /) cannot be compiled as a module.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_EMBEDDED
-+
-+ bool "Additional options for memory-constrained systems"
-+ depends on SQUASHFS
-+ default n
-+ help
-+ Saying Y here allows you to specify cache sizes and how Squashfs
-+ allocates memory. This is only intended for memory constrained
-+ systems.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_FRAGMENT_CACHE_SIZE
-+ int "Number of fragments cached" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default "3"
-+ help
-+ By default SquashFS caches the last 3 fragments read from
-+ the filesystem. Increasing this amount may mean SquashFS
-+ has to re-read fragments less often from disk, at the expense
-+ of extra system memory. Decreasing this amount will mean
-+ SquashFS uses less memory at the expense of extra reads from disk.
-+
-+ Note there must be at least one cached fragment. Anything
-+ much more than three will probably not make much difference.
-+
-+config SQUASHFS_VMALLOC
-+ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default n
-+ help
-+ By default SquashFS uses kmalloc to obtain fragment cache memory.
-+ Kmalloc memory is the standard kernel allocator, but it can fail
-+ on memory constrained systems. Because of the way Vmalloc works,
-+ Vmalloc can succeed when kmalloc fails. Specifying this option
-+ will make SquashFS always use Vmalloc to allocate the
-+ fragment cache memory.
-+
-+ If unsure, say N.
-+
- config VXFS_FS
- tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
- help
-diff --new-file -urp linux-2.6.15/fs/Makefile linux-2.6.15-squashfs3.0/fs/Makefile
---- linux-2.6.15/fs/Makefile 2006-03-01 22:37:27.000000000 +0000
-+++ linux-2.6.15-squashfs3.0/fs/Makefile 2006-03-07 21:12:37.000000000 +0000
-@@ -55,6 +55,7 @@ obj-$(CONFIG_EXT3_FS) += ext3/ # Before
- obj-$(CONFIG_JBD) += jbd/
- obj-$(CONFIG_EXT2_FS) += ext2/
- obj-$(CONFIG_CRAMFS) += cramfs/
-+obj-$(CONFIG_SQUASHFS) += squashfs/
- obj-$(CONFIG_RAMFS) += ramfs/
- obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
- obj-$(CONFIG_CODA_FS) += coda/
-diff --new-file -urp linux-2.6.15/fs/squashfs/inode.c linux-2.6.15-squashfs3.0/fs/squashfs/inode.c
---- linux-2.6.15/fs/squashfs/inode.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/fs/squashfs/inode.c 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,2127 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * inode.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+
-+static void squashfs_put_super(struct super_block *);
-+static int squashfs_statfs(struct super_block *, struct kstatfs *);
-+static int squashfs_symlink_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage4K(struct file *file, struct page *page);
-+static int squashfs_readdir(struct file *, void *, filldir_t);
-+static struct inode *squashfs_alloc_inode(struct super_block *sb);
-+static void squashfs_destroy_inode(struct inode *inode);
-+static int init_inodecache(void);
-+static void destroy_inodecache(void);
-+static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
-+ struct nameidata *);
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize);
-+static struct super_block *squashfs_get_sb(struct file_system_type *, int,
-+ const char *, void *);
-+
-+
-+static z_stream stream;
-+
-+static struct file_system_type squashfs_fs_type = {
-+ .owner = THIS_MODULE,
-+ .name = "squashfs",
-+ .get_sb = squashfs_get_sb,
-+ .kill_sb = kill_block_super,
-+ .fs_flags = FS_REQUIRES_DEV
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static struct super_operations squashfs_ops = {
-+ .alloc_inode = squashfs_alloc_inode,
-+ .destroy_inode = squashfs_destroy_inode,
-+ .statfs = squashfs_statfs,
-+ .put_super = squashfs_put_super,
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
-+ .readpage = squashfs_symlink_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops = {
-+ .readpage = squashfs_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
-+ .readpage = squashfs_readpage4K
-+};
-+
-+static struct file_operations squashfs_dir_ops = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir
-+};
-+
-+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
-+ .lookup = squashfs_lookup
-+};
-+
-+
-+static struct buffer_head *get_block_length(struct super_block *s,
-+ int *cur_index, int *offset, int *c_byte)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned short temp;
-+ struct buffer_head *bh;
-+
-+ if (!(bh = sb_bread(s, *cur_index)))
-+ goto out;
-+
-+ if (msblk->devblksize - *offset == 1) {
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ else
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ bh->b_data);
-+ else
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ bh->b_data);
-+ *c_byte = temp;
-+ *offset = 1;
-+ } else {
-+ if (msblk->swap) {
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ } else {
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ }
-+ *c_byte = temp;
-+ *offset += 2;
-+ }
-+
-+ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
-+ if (*offset == msblk->devblksize) {
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ *offset = 0;
-+ }
-+ if (*((unsigned char *) (bh->b_data + *offset)) !=
-+ SQUASHFS_MARKER_BYTE) {
-+ ERROR("Metadata block marker corrupt @ %x\n",
-+ *cur_index);
-+ brelse(bh);
-+ goto out;
-+ }
-+ (*offset)++;
-+ }
-+ return bh;
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
-+ msblk->devblksize_log2) + 2];
-+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
-+ unsigned int cur_index = index >> msblk->devblksize_log2;
-+ int bytes, avail_bytes, b = 0, k;
-+ char *c_buffer;
-+ unsigned int compressed;
-+ unsigned int c_byte = length;
-+
-+ if (c_byte) {
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ if (!(bh[0] = sb_getblk(s, cur_index)))
-+ goto block_release;
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b, bh);
-+ } else {
-+ if (!(bh[0] = get_block_length(s, &cur_index, &offset,
-+ &c_byte)))
-+ goto read_failure;
-+
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b - 1, bh + 1);
-+ }
-+
-+ if (compressed)
-+ down(&msblk->read_data_mutex);
-+
-+ for (bytes = 0, k = 0; k < b; k++) {
-+ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
-+ msblk->devblksize - offset :
-+ c_byte - bytes;
-+ wait_on_buffer(bh[k]);
-+ if (!buffer_uptodate(bh[k]))
-+ goto block_release;
-+ memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
-+ bytes += avail_bytes;
-+ offset = 0;
-+ brelse(bh[k]);
-+ }
-+
-+ /*
-+ * uncompress block
-+ */
-+ if (compressed) {
-+ int zlib_err;
-+
-+ stream.next_in = c_buffer;
-+ stream.avail_in = c_byte;
-+ stream.next_out = buffer;
-+ stream.avail_out = msblk->read_size;
-+
-+ if (((zlib_err = zlib_inflateInit(&stream)) != Z_OK) ||
-+ ((zlib_err = zlib_inflate(&stream, Z_FINISH))
-+ != Z_STREAM_END) || ((zlib_err =
-+ zlib_inflateEnd(&stream)) != Z_OK)) {
-+ ERROR("zlib_fs returned unexpected result 0x%x\n",
-+ zlib_err);
-+ bytes = 0;
-+ } else
-+ bytes = stream.total_out;
-+
-+ up(&msblk->read_data_mutex);
-+ }
-+
-+ if (next_index)
-+ *next_index = index + c_byte + (length ? 0 :
-+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
-+ ? 3 : 2));
-+ return bytes;
-+
-+block_release:
-+ while (--b >= 0)
-+ brelse(bh[b]);
-+
-+read_failure:
-+ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ int n, i, bytes, return_length = length;
-+ long long next_index;
-+
-+ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
-+
-+ while ( 1 ) {
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (msblk->block_cache[i].block == block)
-+ break;
-+
-+ down(&msblk->block_cache_mutex);
-+
-+ if (i == SQUASHFS_CACHED_BLKS) {
-+ /* read inode header block */
-+ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
-+ n ; n --, i = (i + 1) %
-+ SQUASHFS_CACHED_BLKS)
-+ if (msblk->block_cache[i].block !=
-+ SQUASHFS_USED_BLK)
-+ break;
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->waitq, &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->block_cache_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->waitq, &wait);
-+ continue;
-+ }
-+ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
-+
-+ if (msblk->block_cache[i].block ==
-+ SQUASHFS_INVALID_BLK) {
-+ if (!(msblk->block_cache[i].data =
-+ kmalloc(SQUASHFS_METADATA_SIZE,
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate cache"
-+ "block\n");
-+ up(&msblk->block_cache_mutex);
-+ goto out;
-+ }
-+ }
-+
-+ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
-+ up(&msblk->block_cache_mutex);
-+
-+ if (!(msblk->block_cache[i].length =
-+ squashfs_read_data(s,
-+ msblk->block_cache[i].data,
-+ block, 0, &next_index))) {
-+ ERROR("Unable to read cache block [%llx:%x]\n",
-+ block, offset);
-+ goto out;
-+ }
-+
-+ down(&msblk->block_cache_mutex);
-+ wake_up(&msblk->waitq);
-+ msblk->block_cache[i].block = block;
-+ msblk->block_cache[i].next_index = next_index;
-+ TRACE("Read cache block [%llx:%x]\n", block, offset);
-+ }
-+
-+ if (msblk->block_cache[i].block != block) {
-+ up(&msblk->block_cache_mutex);
-+ continue;
-+ }
-+
-+ if ((bytes = msblk->block_cache[i].length - offset) >= length) {
-+ if (buffer)
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, length);
-+ if (msblk->block_cache[i].length - offset == length) {
-+ *next_block = msblk->block_cache[i].next_index;
-+ *next_offset = 0;
-+ } else {
-+ *next_block = block;
-+ *next_offset = offset + length;
-+ }
-+ up(&msblk->block_cache_mutex);
-+ goto finish;
-+ } else {
-+ if (buffer) {
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, bytes);
-+ buffer += bytes;
-+ }
-+ block = msblk->block_cache[i].next_index;
-+ up(&msblk->block_cache_mutex);
-+ length -= bytes;
-+ offset = 0;
-+ }
-+ }
-+
-+finish:
-+ return return_length;
-+out:
-+ return 0;
-+}
-+
-+
-+static int get_fragment_location(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
-+ struct squashfs_fragment_entry fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment)
-+{
-+ down(&msblk->fragment_mutex);
-+ fragment->locked --;
-+ wake_up(&msblk->fragment_wait_queue);
-+ up(&msblk->fragment_mutex);
-+}
-+
-+
-+SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length)
-+{
-+ int i, n, nf;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+
-+ while ( 1 ) {
-+ down(&msblk->fragment_mutex);
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
-+ msblk->fragment[i].block != start_block; i++);
-+
-+ if (i == SQUASHFS_CACHED_FRAGMENTS) {
-+ nf = (msblk->next_fragment + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS;
-+ for (i = msblk->next_fragment, n =
-+ SQUASHFS_CACHED_FRAGMENTS; n &&
-+ msblk->fragment[i].locked; n--, i = (i + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS);
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->fragment_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ continue;
-+ }
-+ msblk->next_fragment = nf;
-+
-+ if (msblk->fragment[i].data == NULL)
-+ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC
-+ (SQUASHFS_FILE_MAX_SIZE))) {
-+ ERROR("Failed to allocate fragment "
-+ "cache block\n");
-+ up(&msblk->fragment_mutex);
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].locked = 1;
-+ up(&msblk->fragment_mutex);
-+
-+ if (!(msblk->fragment[i].length = squashfs_read_data(s,
-+ msblk->fragment[i].data,
-+ start_block, length, NULL))) {
-+ ERROR("Unable to read fragment cache block "
-+ "[%llx]\n", start_block);
-+ msblk->fragment[i].locked = 0;
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = start_block;
-+ TRACE("New fragment %d, start block %lld, locked %d\n",
-+ i, msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ msblk->fragment[i].locked++;
-+ up(&msblk->fragment_mutex);
-+ TRACE("Got fragment %d, start block %lld, locked %d\n", i,
-+ msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ return &msblk->fragment[i];
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header *inodeb)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = inodeb->inode_number;
-+ i->i_mtime.tv_sec = inodeb->mtime;
-+ i->i_atime.tv_sec = inodeb->mtime;
-+ i->i_ctime.tv_sec = inodeb->mtime;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header id, sid;
-+ struct squashfs_base_inode_header *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_reg_inode_header *inodep = &id.reg;
-+ struct squashfs_reg_inode_header *sinodep = &sid.reg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = 1;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ i->i_blksize = PAGE_CACHE_SIZE;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_LREG_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_lreg_inode_header *inodep = &id.lreg;
-+ struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ i->i_blksize = PAGE_CACHE_SIZE;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header *inodep = &id.dir;
-+ struct squashfs_dir_inode_header *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header *inodep = &id.dev;
-+ struct squashfs_dev_inode_header *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ struct squashfs_ipc_inode_header *inodep = &id.ipc;
-+ struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int read_fragment_index_table(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ /* Allocate fragment index table */
-+ if (!(msblk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ long long fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
-+ &msblk->fragment_index[i], 1);
-+ msblk->fragment_index[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget;
-+ msblk->read_blocklist = read_blocklist;
-+ msblk->read_fragment_index_table = read_fragment_index_table;
-+
-+ if (sblk->s_major == 1) {
-+ if (!squashfs_1_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 1.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if (sblk->s_major == 2) {
-+ if (!squashfs_2_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 2.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
-+ SQUASHFS_MINOR) {
-+ SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
-+ "filesystem\n", sblk->s_major, sblk->s_minor);
-+ SERROR("Please update your kernel\n");
-+ return 0;
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int squashfs_fill_super(struct super_block *s, void *data, int silent)
-+{
-+ struct squashfs_sb_info *msblk;
-+ struct squashfs_super_block *sblk;
-+ int i;
-+ char b[BDEVNAME_SIZE];
-+ struct inode *root;
-+
-+ TRACE("Entered squashfs_read_superblock\n");
-+
-+ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info),
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate superblock\n");
-+ goto failure;
-+ }
-+ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
-+ msblk = s->s_fs_info;
-+ sblk = &msblk->sblk;
-+
-+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
-+ msblk->devblksize_log2 = ffz(~msblk->devblksize);
-+
-+ init_MUTEX(&msblk->read_data_mutex);
-+ init_MUTEX(&msblk->read_page_mutex);
-+ init_MUTEX(&msblk->block_cache_mutex);
-+ init_MUTEX(&msblk->fragment_mutex);
-+ init_MUTEX(&msblk->meta_index_mutex);
-+
-+ init_waitqueue_head(&msblk->waitq);
-+ init_waitqueue_head(&msblk->fragment_wait_queue);
-+
-+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
-+ sizeof(struct squashfs_super_block) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ SERROR("unable to read superblock\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Check it is a SQUASHFS superblock */
-+ msblk->swap = 0;
-+ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
-+ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
-+ struct squashfs_super_block ssblk;
-+
-+ WARNING("Mounting a different endian SQUASHFS "
-+ "filesystem on %s\n", bdevname(s->s_bdev, b));
-+
-+ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
-+ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
-+ msblk->swap = 1;
-+ } else {
-+ SERROR("Can't find a SQUASHFS superblock on %s\n",
-+ bdevname(s->s_bdev, b));
-+ goto failed_mount;
-+ }
-+ }
-+
-+ /* Check the MAJOR & MINOR versions */
-+ if(!supported_squashfs_filesystem(msblk, silent))
-+ goto failed_mount;
-+
-+ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
-+ TRACE("Inodes are %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_INODES
-+ (sblk->flags) ? "un" : "");
-+ TRACE("Data is %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
-+ ? "un" : "");
-+ TRACE("Check data is %s present in the filesystem\n",
-+ SQUASHFS_CHECK_DATA(sblk->flags) ?
-+ "" : "not");
-+ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
-+ TRACE("Block size %d\n", sblk->block_size);
-+ TRACE("Number of inodes %d\n", sblk->inodes);
-+ if (sblk->s_major > 1)
-+ TRACE("Number of fragments %d\n", sblk->fragments);
-+ TRACE("Number of uids %d\n", sblk->no_uids);
-+ TRACE("Number of gids %d\n", sblk->no_guids);
-+ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
-+ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
-+ if (sblk->s_major > 1)
-+ TRACE("sblk->fragment_table_start %llx\n",
-+ sblk->fragment_table_start);
-+ TRACE("sblk->uid_start %llx\n", sblk->uid_start);
-+
-+ s->s_flags |= MS_RDONLY;
-+ s->s_op = &squashfs_ops;
-+
-+ /* Init inode_table block pointer array */
-+ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
-+ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+
-+ msblk->next_cache = 0;
-+
-+ /* Allocate read_data block */
-+ msblk->read_size = (sblk->block_size < SQUASHFS_METADATA_SIZE) ?
-+ SQUASHFS_METADATA_SIZE :
-+ sblk->block_size;
-+
-+ if (!(msblk->read_data = kmalloc(msblk->read_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_data block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate read_page block */
-+ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_page block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate uid and gid tables */
-+ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ goto failed_mount;
-+ }
-+ msblk->guid = msblk->uid + sblk->no_uids;
-+
-+ if (msblk->swap) {
-+ unsigned int suid[sblk->no_uids + sblk->no_guids];
-+
-+ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
-+ sblk->no_guids), (sizeof(unsigned int) * 8));
-+ } else
-+ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+
-+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
-+ goto allocate_root;
-+
-+ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
-+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate fragment block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
-+ msblk->fragment[i].locked = 0;
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].data = NULL;
-+ }
-+
-+ msblk->next_fragment = 0;
-+
-+ /* Allocate fragment index table */
-+ if (msblk->read_fragment_index_table(s) == 0)
-+ goto failed_mount;
-+
-+allocate_root:
-+ if ((root = (msblk->iget)(s, sblk->root_inode)) == NULL)
-+ goto failed_mount;
-+
-+ if ((s->s_root = d_alloc_root(root)) == NULL) {
-+ ERROR("Root inode create failed\n");
-+ iput(root);
-+ goto failed_mount;
-+ }
-+
-+ TRACE("Leaving squashfs_read_super\n");
-+ return 0;
-+
-+failed_mount:
-+ kfree(msblk->fragment_index);
-+ kfree(msblk->fragment);
-+ kfree(msblk->uid);
-+ kfree(msblk->read_page);
-+ kfree(msblk->read_data);
-+ kfree(msblk->block_cache);
-+ kfree(msblk->fragment_index_2);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ return -EINVAL;
-+
-+failure:
-+ return -ENOMEM;
-+}
-+
-+
-+static int squashfs_statfs(struct super_block *s, struct kstatfs *buf)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ TRACE("Entered squashfs_statfs\n");
-+
-+ buf->f_type = SQUASHFS_MAGIC;
-+ buf->f_bsize = sblk->block_size;
-+ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
-+ buf->f_bfree = buf->f_bavail = 0;
-+ buf->f_files = sblk->inodes;
-+ buf->f_ffree = 0;
-+ buf->f_namelen = SQUASHFS_NAME_LEN;
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_symlink_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ int index = page->index << PAGE_CACHE_SHIFT, length, bytes;
-+ long long block = SQUASHFS_I(inode)->start_block;
-+ int offset = SQUASHFS_I(inode)->offset;
-+ void *pageaddr = kmap(page);
-+
-+ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
-+ "%llx, offset %x\n", page->index,
-+ SQUASHFS_I(inode)->start_block,
-+ SQUASHFS_I(inode)->offset);
-+
-+ for (length = 0; length < index; length += bytes) {
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL,
-+ block, offset, PAGE_CACHE_SIZE, &block,
-+ &offset))) {
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block,
-+ offset);
-+ goto skip_read;
-+ }
-+ }
-+
-+ if (length != index) {
-+ ERROR("(squashfs_symlink_readpage) length != index\n");
-+ bytes = 0;
-+ goto skip_read;
-+ }
-+
-+ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE :
-+ i_size_read(inode) - length;
-+
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block,
-+ offset, bytes, &block, &offset)))
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
-+{
-+ struct meta_index *meta = NULL;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
-+
-+ if(msblk->meta_index == NULL)
-+ goto not_allocated;
-+
-+ for (i = 0; i < SQUASHFS_META_NUMBER; i ++)
-+ if (msblk->meta_index[i].inode_number == inode->i_ino &&
-+ msblk->meta_index[i].offset >= offset &&
-+ msblk->meta_index[i].offset <= index &&
-+ msblk->meta_index[i].locked == 0) {
-+ TRACE("locate_meta_index: entry %d, offset %d\n", i,
-+ msblk->meta_index[i].offset);
-+ meta = &msblk->meta_index[i];
-+ offset = meta->offset;
-+ }
-+
-+ if (meta)
-+ meta->locked = 1;
-+
-+not_allocated:
-+ up(&msblk->meta_index_mutex);
-+
-+ return meta;
-+}
-+
-+
-+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct meta_index *meta = NULL;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
-+
-+ if(msblk->meta_index == NULL) {
-+ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) *
-+ SQUASHFS_META_NUMBER, GFP_KERNEL))) {
-+ ERROR("Failed to allocate meta_index\n");
-+ goto failed;
-+ }
-+ for(i = 0; i < SQUASHFS_META_NUMBER; i++) {
-+ msblk->meta_index[i].inode_number = 0;
-+ msblk->meta_index[i].locked = 0;
-+ }
-+ msblk->next_meta_index = 0;
-+ }
-+
-+ for(i = SQUASHFS_META_NUMBER; i &&
-+ msblk->meta_index[msblk->next_meta_index].locked; i --)
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ if(i == 0) {
-+ TRACE("empty_meta_index: failed!\n");
-+ goto failed;
-+ }
-+
-+ TRACE("empty_meta_index: returned meta entry %d, %p\n",
-+ msblk->next_meta_index,
-+ &msblk->meta_index[msblk->next_meta_index]);
-+
-+ meta = &msblk->meta_index[msblk->next_meta_index];
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ meta->inode_number = inode->i_ino;
-+ meta->offset = offset;
-+ meta->skip = skip;
-+ meta->entries = 0;
-+ meta->locked = 1;
-+
-+failed:
-+ up(&msblk->meta_index_mutex);
-+ return meta;
-+}
-+
-+
-+void release_meta_index(struct inode *inode, struct meta_index *meta)
-+{
-+ meta->locked = 0;
-+}
-+
-+
-+static int read_block_index(struct super_block *s, int blocks, char *block_list,
-+ long long *start_block, int *offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned int *block_listp;
-+ int block = 0;
-+
-+ if (msblk->swap) {
-+ char sblock_list[blocks << 2];
-+
-+ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
-+ ((unsigned int *)sblock_list), blocks);
-+ } else
-+ if (!squashfs_get_cached_block(s, block_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+
-+ for (block_listp = (unsigned int *) block_list; blocks;
-+ block_listp++, blocks --)
-+ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
-+
-+ return block;
-+
-+failure:
-+ return -1;
-+}
-+
-+
-+#define SIZE 256
-+
-+static inline int calculate_skip(int blocks) {
-+ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
-+ return skip >= 7 ? 7 : skip + 1;
-+}
-+
-+
-+static int get_meta_index(struct inode *inode, int index,
-+ long long *index_block, int *index_offset,
-+ long long *data_block, char *block_list)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
-+ int offset = 0;
-+ struct meta_index *meta;
-+ struct meta_entry *meta_entry;
-+ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
-+ int cur_offset = SQUASHFS_I(inode)->offset;
-+ long long cur_data_block = SQUASHFS_I(inode)->start_block;
-+ int i;
-+
-+ index /= SQUASHFS_META_INDEXES * skip;
-+
-+ while ( offset < index ) {
-+ meta = locate_meta_index(inode, index, offset + 1);
-+
-+ if (meta == NULL) {
-+ if ((meta = empty_meta_index(inode, offset + 1,
-+ skip)) == NULL)
-+ goto all_done;
-+ } else {
-+ offset = index < meta->offset + meta->entries ? index :
-+ meta->offset + meta->entries - 1;
-+ meta_entry = &meta->meta_entry[offset - meta->offset];
-+ cur_index_block = meta_entry->index_block + sblk->inode_table_start;
-+ cur_offset = meta_entry->offset;
-+ cur_data_block = meta_entry->data_block;
-+ TRACE("get_meta_index: offset %d, meta->offset %d, "
-+ "meta->entries %d\n", offset, meta->offset,
-+ meta->entries);
-+ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
-+ " data_block 0x%llx\n", cur_index_block,
-+ cur_offset, cur_data_block);
-+ }
-+
-+ for (i = meta->offset + meta->entries; i <= index &&
-+ i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
-+ int blocks = skip * SQUASHFS_META_INDEXES;
-+
-+ while (blocks) {
-+ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) :
-+ blocks;
-+ int res = read_block_index(inode->i_sb, block,
-+ block_list, &cur_index_block,
-+ &cur_offset);
-+
-+ if (res == -1)
-+ goto failed;
-+
-+ cur_data_block += res;
-+ blocks -= block;
-+ }
-+
-+ meta_entry = &meta->meta_entry[i - meta->offset];
-+ meta_entry->index_block = cur_index_block - sblk->inode_table_start;
-+ meta_entry->offset = cur_offset;
-+ meta_entry->data_block = cur_data_block;
-+ meta->entries ++;
-+ offset ++;
-+ }
-+
-+ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
-+ meta->offset, meta->entries);
-+
-+ release_meta_index(inode, meta);
-+ }
-+
-+all_done:
-+ *index_block = cur_index_block;
-+ *index_offset = cur_offset;
-+ *data_block = cur_data_block;
-+
-+ return offset * SQUASHFS_META_INDEXES * skip;
-+
-+failed:
-+ release_meta_index(inode, meta);
-+ return -1;
-+}
-+
-+
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize)
-+{
-+ long long block_ptr;
-+ int offset;
-+ long long block;
-+ int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
-+ block_list);
-+
-+ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
-+ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset,
-+ block);
-+
-+ if(res == -1)
-+ goto failure;
-+
-+ index -= res;
-+
-+ while ( index ) {
-+ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
-+ int res = read_block_index(inode->i_sb, blocks, block_list,
-+ &block_ptr, &offset);
-+ if (res == -1)
-+ goto failure;
-+ block += res;
-+ index -= blocks;
-+ }
-+
-+ if (read_block_index(inode->i_sb, 1, block_list,
-+ &block_ptr, &offset) == -1)
-+ goto failure;
-+ *bsize = *((unsigned int *) block_list);
-+
-+ return block;
-+
-+failure:
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0;
-+ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
-+ void *pageaddr;
-+ struct squashfs_fragment_cache *fragment = NULL;
-+ char *data_ptr = msblk->read_page;
-+
-+ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
-+ int start_index = page->index & ~mask;
-+ int end_index = start_index | mask;
-+
-+ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT))
-+ goto skip_read;
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ if ((block = (msblk->read_blocklist)(inode, index, 1,
-+ block_list, NULL, &bsize)) == 0)
-+ goto skip_read;
-+
-+ down(&msblk->read_page_mutex);
-+
-+ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page,
-+ block, bsize, NULL))) {
-+ ERROR("Unable to read page, block %llx, size %x\n", block,
-+ bsize);
-+ up(&msblk->read_page_mutex);
-+ goto skip_read;
-+ }
-+ } else {
-+ if ((fragment = get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)->u.s1.fragment_size))
-+ == NULL) {
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ (int) SQUASHFS_I(inode)->
-+ u.s1.fragment_size);
-+ goto skip_read;
-+ }
-+ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset +
-+ (i_size_read(inode) & (sblk->block_size
-+ - 1));
-+ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset;
-+ data_ptr = fragment->data;
-+ }
-+
-+ for (i = start_index; i <= end_index && byte_offset < bytes;
-+ i++, byte_offset += PAGE_CACHE_SIZE) {
-+ struct page *push_page;
-+ int available_bytes = (bytes - byte_offset) > PAGE_CACHE_SIZE ?
-+ PAGE_CACHE_SIZE : bytes - byte_offset;
-+
-+ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n",
-+ bytes, i, byte_offset, available_bytes);
-+
-+ if (i == page->index) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+ } else if ((push_page =
-+ grab_cache_page_nowait(page->mapping, i))) {
-+ pageaddr = kmap_atomic(push_page, KM_USER0);
-+
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(push_page);
-+ SetPageUptodate(push_page);
-+ unlock_page(push_page);
-+ page_cache_release(push_page);
-+ }
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log))
-+ up(&msblk->read_page_mutex);
-+ else
-+ release_cached_fragment(msblk, fragment);
-+
-+ return 0;
-+
-+skip_read:
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage4K(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, bytes = 0;
-+ void *pageaddr;
-+
-+ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT)) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ goto skip_read;
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || page->index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ block = (msblk->read_blocklist)(inode, page->index, 1,
-+ block_list, NULL, &bsize);
-+
-+ down(&msblk->read_page_mutex);
-+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
-+ bsize, NULL);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (bytes)
-+ memcpy(pageaddr, msblk->read_page, bytes);
-+ else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ block, bsize);
-+ up(&msblk->read_page_mutex);
-+ } else {
-+ struct squashfs_fragment_cache *fragment =
-+ get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (fragment) {
-+ bytes = i_size_read(inode) & (sblk->block_size - 1);
-+ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)->
-+ u.s1.fragment_offset, bytes);
-+ release_cached_fragment(msblk, fragment);
-+ } else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block, (int)
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ }
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ f_pos =- 3;
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length + 3;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index *index = (struct squashfs_dir_index *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length + 3;
-+}
-+
-+
-+static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
-+
-+ while(file->f_pos < 3) {
-+ char *name;
-+ int size, i_ino;
-+
-+ if(file->f_pos == 0) {
-+ name = ".";
-+ size = 1;
-+ i_ino = i->i_ino;
-+ } else {
-+ name = "..";
-+ size = 2;
-+ i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
-+ }
-+ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
-+ (unsigned int) dirent, name, size, (int)
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]);
-+
-+ if (filldir(dirent, name, size,
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]) < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos += size;
-+ dirs_read++;
-+ }
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %d\n", name,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+static void squashfs_put_super(struct super_block *s)
-+{
-+ int i;
-+
-+ if (s->s_fs_info) {
-+ struct squashfs_sb_info *sbi = s->s_fs_info;
-+ if (sbi->block_cache)
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (sbi->block_cache[i].block !=
-+ SQUASHFS_INVALID_BLK)
-+ kfree(sbi->block_cache[i].data);
-+ if (sbi->fragment)
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
-+ SQUASHFS_FREE(sbi->fragment[i].data);
-+ kfree(sbi->fragment);
-+ kfree(sbi->block_cache);
-+ kfree(sbi->read_data);
-+ kfree(sbi->read_page);
-+ kfree(sbi->uid);
-+ kfree(sbi->fragment_index);
-+ kfree(sbi->fragment_index_2);
-+ kfree(sbi->meta_index);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ }
-+}
-+
-+
-+static struct super_block *squashfs_get_sb(struct file_system_type *fs_type,
-+ int flags, const char *dev_name, void *data)
-+{
-+ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super);
-+}
-+
-+
-+static int __init init_squashfs_fs(void)
-+{
-+ int err = init_inodecache();
-+ if (err)
-+ goto out;
-+
-+ printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
-+ "Phillip Lougher\n");
-+
-+ if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
-+ ERROR("Failed to allocate zlib workspace\n");
-+ destroy_inodecache();
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+
-+ if ((err = register_filesystem(&squashfs_fs_type))) {
-+ vfree(stream.workspace);
-+ destroy_inodecache();
-+ }
-+
-+out:
-+ return err;
-+}
-+
-+
-+static void __exit exit_squashfs_fs(void)
-+{
-+ vfree(stream.workspace);
-+ unregister_filesystem(&squashfs_fs_type);
-+ destroy_inodecache();
-+}
-+
-+
-+static kmem_cache_t * squashfs_inode_cachep;
-+
-+
-+static struct inode *squashfs_alloc_inode(struct super_block *sb)
-+{
-+ struct squashfs_inode_info *ei;
-+ ei = kmem_cache_alloc(squashfs_inode_cachep, SLAB_KERNEL);
-+ if (!ei)
-+ return NULL;
-+ return &ei->vfs_inode;
-+}
-+
-+
-+static void squashfs_destroy_inode(struct inode *inode)
-+{
-+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
-+}
-+
-+
-+static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
-+{
-+ struct squashfs_inode_info *ei = foo;
-+
-+ if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
-+ SLAB_CTOR_CONSTRUCTOR)
-+ inode_init_once(&ei->vfs_inode);
-+}
-+
-+
-+static int __init init_inodecache(void)
-+{
-+ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
-+ sizeof(struct squashfs_inode_info),
-+ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
-+ init_once, NULL);
-+ if (squashfs_inode_cachep == NULL)
-+ return -ENOMEM;
-+ return 0;
-+}
-+
-+
-+static void destroy_inodecache(void)
-+{
-+ if (kmem_cache_destroy(squashfs_inode_cachep))
-+ printk(KERN_INFO "squashfs_inode_cache: not all structures "
-+ "were freed\n");
-+}
-+
-+
-+module_init(init_squashfs_fs);
-+module_exit(exit_squashfs_fs);
-+MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
-+MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
-+MODULE_LICENSE("GPL");
-diff --new-file -urp linux-2.6.15/fs/squashfs/Makefile linux-2.6.15-squashfs3.0/fs/squashfs/Makefile
---- linux-2.6.15/fs/squashfs/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/fs/squashfs/Makefile 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,7 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
-+
-+obj-$(CONFIG_SQUASHFS) += squashfs.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
-diff --new-file -urp linux-2.6.15/fs/squashfs/squashfs2_0.c linux-2.6.15-squashfs3.0/fs/squashfs/squashfs2_0.c
---- linux-2.6.15/fs/squashfs/squashfs2_0.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/fs/squashfs/squashfs2_0.c 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,758 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs2_0.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
-+static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
-+ struct nameidata *);
-+
-+static struct file_operations squashfs_dir_ops_2 = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir_2
-+};
-+
-+static struct inode_operations squashfs_dir_inode_ops_2 = {
-+ .lookup = squashfs_lookup_2
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static int read_fragment_index_table_2(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index_2,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ unsigned int fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
-+ &msblk->fragment_index_2[i], 1);
-+ msblk->fragment_index_2[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
-+ struct squashfs_fragment_entry_2 fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry_2 sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = ino;
-+ i->i_mtime.tv_sec = sblk->mkfs_time;
-+ i->i_atime.tv_sec = sblk->mkfs_time;
-+ i->i_ctime.tv_sec = sblk->mkfs_time;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_nlink = 1;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget_2(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned int block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ unsigned int ino = SQUASHFS_MK_VFS_INODE(block
-+ - sblk->inode_table_start, offset);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header_2 id, sid;
-+ struct squashfs_base_inode_header_2 *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ struct squashfs_reg_inode_header_2 *inodep = &id.reg;
-+ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
-+ long long frag_blk;
-+ unsigned int frag_size;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location_2(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ i->i_blksize = PAGE_CACHE_SIZE;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %x, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header_2 *inodep = &id.dir;
-+ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header_2 *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header_2 *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header_2 *inodep = &id.dev;
-+ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%x:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index_2 index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index_2 *index = (struct squashfs_dir_index_2 *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index_2),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length;
-+}
-+
-+
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+
-+ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos, SQUASHFS_MK_VFS_INODE(
-+ dirh.start_block, dire->offset),
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (sorted && name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %lld\n", name,
-+ dirh.start_block, dire->offset, ino);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget_2;
-+ msblk->read_fragment_index_table = read_fragment_index_table_2;
-+
-+ sblk->bytes_used = sblk->bytes_used_2;
-+ sblk->uid_start = sblk->uid_start_2;
-+ sblk->guid_start = sblk->guid_start_2;
-+ sblk->inode_table_start = sblk->inode_table_start_2;
-+ sblk->directory_table_start = sblk->directory_table_start_2;
-+ sblk->fragment_table_start = sblk->fragment_table_start_2;
-+
-+ return 1;
-+}
-diff --new-file -urp linux-2.6.15/fs/squashfs/squashfs.h linux-2.6.15-squashfs3.0/fs/squashfs/squashfs.h
---- linux-2.6.15/fs/squashfs/squashfs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/fs/squashfs/squashfs.h 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs.h
-+ */
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#endif
-+
-+#ifdef SQUASHFS_TRACE
-+#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
-+#else
-+#define TRACE(s, args...) {}
-+#endif
-+
-+#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
-+
-+#define SERROR(s, args...) do { \
-+ if (!silent) \
-+ printk(KERN_ERR "SQUASHFS error: "s, ## args);\
-+ } while(0)
-+
-+#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
-+
-+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
-+{
-+ return list_entry(inode, struct squashfs_inode_info, vfs_inode);
-+}
-+
-+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
-+#define SQSH_EXTERN
-+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index);
-+extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset);
-+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment);
-+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length);
-+extern struct address_space_operations squashfs_symlink_aops;
-+extern struct address_space_operations squashfs_aops;
-+extern struct address_space_operations squashfs_aops_4K;
-+extern struct inode_operations squashfs_dir_inode_ops;
-+#else
-+#define SQSH_EXTERN static
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-diff --new-file -urp linux-2.6.15/include/linux/squashfs_fs.h linux-2.6.15-squashfs3.0/include/linux/squashfs_fs.h
---- linux-2.6.15/include/linux/squashfs_fs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/include/linux/squashfs_fs.h 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,911 @@
-+#ifndef SQUASHFS_FS
-+#define SQUASHFS_FS
-+
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs.h
-+ */
-+
-+#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_VMALLOC
-+#define SQUASHFS_ALLOC(a) vmalloc(a)
-+#define SQUASHFS_FREE(a) vfree(a)
-+#else
-+#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL)
-+#define SQUASHFS_FREE(a) kfree(a)
-+#endif
-+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
-+#define SQUASHFS_MAJOR 3
-+#define SQUASHFS_MINOR 0
-+#define SQUASHFS_MAGIC 0x73717368
-+#define SQUASHFS_MAGIC_SWAP 0x68737173
-+#define SQUASHFS_START 0
-+
-+/* size of metadata (inode and directory) blocks */
-+#define SQUASHFS_METADATA_SIZE 8192
-+#define SQUASHFS_METADATA_LOG 13
-+
-+/* default size of data blocks */
-+#define SQUASHFS_FILE_SIZE 65536
-+#define SQUASHFS_FILE_LOG 16
-+
-+#define SQUASHFS_FILE_MAX_SIZE 65536
-+
-+/* Max number of uids and gids */
-+#define SQUASHFS_UIDS 256
-+#define SQUASHFS_GUIDS 255
-+
-+/* Max length of filename (not 255) */
-+#define SQUASHFS_NAME_LEN 256
-+
-+#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
-+#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff)
-+#define SQUASHFS_INVALID_BLK ((long long) -1)
-+#define SQUASHFS_USED_BLK ((long long) -2)
-+
-+/* Filesystem flags */
-+#define SQUASHFS_NOI 0
-+#define SQUASHFS_NOD 1
-+#define SQUASHFS_CHECK 2
-+#define SQUASHFS_NOF 3
-+#define SQUASHFS_NO_FRAG 4
-+#define SQUASHFS_ALWAYS_FRAG 5
-+#define SQUASHFS_DUPLICATE 6
-+
-+#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
-+
-+#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOI)
-+
-+#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOD)
-+
-+#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOF)
-+
-+#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NO_FRAG)
-+
-+#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_ALWAYS_FRAG)
-+
-+#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_DUPLICATE)
-+
-+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_CHECK)
-+
-+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
-+ duplicate_checking) (noi | (nod << 1) | (check_data << 2) \
-+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
-+ (duplicate_checking << 6))
-+
-+/* Max number of types and file types */
-+#define SQUASHFS_DIR_TYPE 1
-+#define SQUASHFS_FILE_TYPE 2
-+#define SQUASHFS_SYMLINK_TYPE 3
-+#define SQUASHFS_BLKDEV_TYPE 4
-+#define SQUASHFS_CHRDEV_TYPE 5
-+#define SQUASHFS_FIFO_TYPE 6
-+#define SQUASHFS_SOCKET_TYPE 7
-+#define SQUASHFS_LDIR_TYPE 8
-+#define SQUASHFS_LREG_TYPE 9
-+
-+/* 1.0 filesystem type definitions */
-+#define SQUASHFS_TYPES 5
-+#define SQUASHFS_IPC_TYPE 0
-+
-+/* Flag whether block is compressed or uncompressed, bit is set if block is
-+ * uncompressed */
-+#define SQUASHFS_COMPRESSED_BIT (1 << 15)
-+
-+#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
-+ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
-+
-+#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
-+
-+#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
-+
-+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
-+
-+#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
-+
-+/*
-+ * Inode number ops. Inodes consist of a compressed block number, and an
-+ * uncompressed offset within that block
-+ */
-+#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
-+
-+#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
-+
-+#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\
-+ << 16) + (B)))
-+
-+/* Compute 32 bit VFS inode number from squashfs inode number */
-+#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \
-+ ((b) >> 2) + 1))
-+/* XXX */
-+
-+/* Translate between VFS mode and squashfs mode */
-+#define SQUASHFS_MODE(a) ((a) & 0xfff)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES(A) (A * sizeof(struct squashfs_fragment_entry))
-+
-+#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\
-+ sizeof(long long))
-+
-+/* cached data constants for filesystem */
-+#define SQUASHFS_CACHED_BLKS 8
-+
-+#define SQUASHFS_MAX_FILE_SIZE_LOG 64
-+
-+#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \
-+ (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
-+
-+#define SQUASHFS_MARKER_BYTE 0xff
-+
-+/* meta index cache */
-+#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
-+#define SQUASHFS_META_ENTRIES 31
-+#define SQUASHFS_META_NUMBER 8
-+#define SQUASHFS_SLOTS 4
-+
-+struct meta_entry {
-+ long long data_block;
-+ unsigned int index_block;
-+ unsigned short offset;
-+ unsigned short pad;
-+};
-+
-+struct meta_index {
-+ unsigned int inode_number;
-+ unsigned int offset;
-+ unsigned short entries;
-+ unsigned short skip;
-+ unsigned short locked;
-+ unsigned short pad;
-+ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES];
-+};
-+
-+
-+/*
-+ * definitions for structures on disk
-+ */
-+
-+typedef long long squashfs_block_t;
-+typedef long long squashfs_inode_t;
-+
-+struct squashfs_super_block {
-+ unsigned int s_magic;
-+ unsigned int inodes;
-+ unsigned int bytes_used_2;
-+ unsigned int uid_start_2;
-+ unsigned int guid_start_2;
-+ unsigned int inode_table_start_2;
-+ unsigned int directory_table_start_2;
-+ unsigned int s_major:16;
-+ unsigned int s_minor:16;
-+ unsigned int block_size_1:16;
-+ unsigned int block_log:16;
-+ unsigned int flags:8;
-+ unsigned int no_uids:8;
-+ unsigned int no_guids:8;
-+ unsigned int mkfs_time /* time of filesystem creation */;
-+ squashfs_inode_t root_inode;
-+ unsigned int block_size;
-+ unsigned int fragments;
-+ unsigned int fragment_table_start_2;
-+ long long bytes_used;
-+ long long uid_start;
-+ long long guid_start;
-+ long long inode_table_start;
-+ long long directory_table_start;
-+ long long fragment_table_start;
-+ long long unused;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_index {
-+ unsigned int index;
-+ unsigned int start_block;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_BASE_INODE_HEADER \
-+ unsigned int inode_type:4; \
-+ unsigned int mode:12; \
-+ unsigned int uid:8; \
-+ unsigned int guid:8; \
-+ unsigned int mtime; \
-+ unsigned int inode_number;
-+
-+struct squashfs_base_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_lreg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ long long file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int parent_inode;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int i_count:16;
-+ unsigned int parent_inode;
-+ struct squashfs_dir_index index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header {
-+ struct squashfs_base_inode_header base;
-+ struct squashfs_dev_inode_header dev;
-+ struct squashfs_symlink_inode_header symlink;
-+ struct squashfs_reg_inode_header reg;
-+ struct squashfs_lreg_inode_header lreg;
-+ struct squashfs_dir_inode_header dir;
-+ struct squashfs_ldir_inode_header ldir;
-+ struct squashfs_ipc_inode_header ipc;
-+};
-+
-+struct squashfs_dir_entry {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ int inode_number:16;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_header {
-+ unsigned int count:8;
-+ unsigned int start_block;
-+ unsigned int inode_number;
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry {
-+ long long start_block;
-+ unsigned int size;
-+ unsigned int unused;
-+} __attribute__ ((packed));
-+
-+extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
-+extern int squashfs_uncompress_init(void);
-+extern int squashfs_uncompress_exit(void);
-+
-+/*
-+ * macros to convert each packed bitfield structure from little endian to big
-+ * endian and vice versa. These are needed when creating or using a filesystem
-+ * on a machine with different byte ordering to the target architecture.
-+ *
-+ */
-+
-+#define SQUASHFS_SWAP_START \
-+ int bits;\
-+ int b_pos;\
-+ unsigned long long val;\
-+ unsigned char *s;\
-+ unsigned char *d;
-+
-+#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
-+ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
-+ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
-+ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
-+ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
-+ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
-+ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
-+ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
-+ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
-+ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
-+ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
-+ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
-+ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
-+ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
-+ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
-+ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
-+ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
-+ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
-+ SQUASHFS_SWAP((s)->unused, d, 888, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header))\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dev_inode_header)); \
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_reg_inode_header));\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_lreg_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 224, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 147, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 155, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
-+ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 2);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 16)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_INTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 4);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 32)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 64)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * bits / 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ bits)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+
-+struct squashfs_base_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int type:4;
-+ unsigned int offset:4;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
-+ SQUASHFS_SWAP((s)->guid, d, 20, 4);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header_1));\
-+ SQUASHFS_SWAP((s)->type, d, 24, 4);\
-+ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_1));\
-+ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_1));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_1));\
-+ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_1));\
-+ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
-+}
-+
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+
-+struct squashfs_dir_index_2 {
-+ unsigned int index:27;
-+ unsigned int start_block:29;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_base_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+ unsigned int i_count:16;
-+ struct squashfs_dir_index_2 index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header_2 {
-+ struct squashfs_base_inode_header_2 base;
-+ struct squashfs_dev_inode_header_2 dev;
-+ struct squashfs_symlink_inode_header_2 symlink;
-+ struct squashfs_reg_inode_header_2 reg;
-+ struct squashfs_dir_inode_header_2 dir;
-+ struct squashfs_ldir_inode_header_2 ldir;
-+ struct squashfs_ipc_inode_header_2 ipc;
-+};
-+
-+struct squashfs_dir_header_2 {
-+ unsigned int count:8;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_entry_2 {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry_2 {
-+ unsigned int start_block;
-+ unsigned int size;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_2)); \
-+ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_2));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_2));\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
-+ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 27);\
-+ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
-+ SQUASHFS_SWAP((s)->size, d, 56, 8);\
-+}
-+#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 32, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2))
-+
-+#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
-+ sizeof(int))
-+
-+#endif
-+
-+#ifdef __KERNEL__
-+
-+/*
-+ * macros used to swap each structure entry, taking into account
-+ * bitfields and different bitfield placing conventions on differing
-+ * architectures
-+ */
-+
-+#include <asm/byteorder.h>
-+
-+#ifdef __BIG_ENDIAN
-+ /* convert from little endian to big endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, b_pos)
-+#else
-+ /* convert from big endian to little endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, 64 - tbits - b_pos)
-+#endif
-+
-+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
-+ b_pos = pos % 8;\
-+ val = 0;\
-+ s = (unsigned char *)p + (pos / 8);\
-+ d = ((unsigned char *) &val) + 7;\
-+ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
-+ *d-- = *s++;\
-+ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
-+}
-+
-+#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
-+
-+#endif
-+#endif
-diff --new-file -urp linux-2.6.15/include/linux/squashfs_fs_i.h linux-2.6.15-squashfs3.0/include/linux/squashfs_fs_i.h
---- linux-2.6.15/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/include/linux/squashfs_fs_i.h 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,45 @@
-+#ifndef SQUASHFS_FS_I
-+#define SQUASHFS_FS_I
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_i.h
-+ */
-+
-+struct squashfs_inode_info {
-+ long long start_block;
-+ unsigned int offset;
-+ union {
-+ struct {
-+ long long fragment_start_block;
-+ unsigned int fragment_size;
-+ unsigned int fragment_offset;
-+ long long block_list_start;
-+ } s1;
-+ struct {
-+ long long directory_index_start;
-+ unsigned int directory_index_offset;
-+ unsigned int directory_index_count;
-+ unsigned int parent_inode;
-+ } s2;
-+ } u;
-+ struct inode vfs_inode;
-+};
-+#endif
-diff --new-file -urp linux-2.6.15/include/linux/squashfs_fs_sb.h linux-2.6.15-squashfs3.0/include/linux/squashfs_fs_sb.h
---- linux-2.6.15/include/linux/squashfs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.15-squashfs3.0/include/linux/squashfs_fs_sb.h 2006-03-07 21:12:37.000000000 +0000
-@@ -0,0 +1,74 @@
-+#ifndef SQUASHFS_FS_SB
-+#define SQUASHFS_FS_SB
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_sb.h
-+ */
-+
-+#include <linux/squashfs_fs.h>
-+
-+struct squashfs_cache {
-+ long long block;
-+ int length;
-+ long long next_index;
-+ char *data;
-+};
-+
-+struct squashfs_fragment_cache {
-+ long long block;
-+ int length;
-+ unsigned int locked;
-+ char *data;
-+};
-+
-+struct squashfs_sb_info {
-+ struct squashfs_super_block sblk;
-+ int devblksize;
-+ int devblksize_log2;
-+ int swap;
-+ struct squashfs_cache *block_cache;
-+ struct squashfs_fragment_cache *fragment;
-+ int next_cache;
-+ int next_fragment;
-+ int next_meta_index;
-+ unsigned int *uid;
-+ unsigned int *guid;
-+ long long *fragment_index;
-+ unsigned int *fragment_index_2;
-+ unsigned int read_size;
-+ char *read_data;
-+ char *read_page;
-+ struct semaphore read_data_mutex;
-+ struct semaphore read_page_mutex;
-+ struct semaphore block_cache_mutex;
-+ struct semaphore fragment_mutex;
-+ struct semaphore meta_index_mutex;
-+ wait_queue_head_t waitq;
-+ wait_queue_head_t fragment_wait_queue;
-+ struct meta_index *meta_index;
-+ struct inode *(*iget)(struct super_block *s, squashfs_inode_t \
-+ inode);
-+ long long (*read_blocklist)(struct inode *inode, int \
-+ index, int readahead_blks, char *block_list, \
-+ unsigned short **block_p, unsigned int *bsize);
-+ int (*read_fragment_index_table)(struct super_block *s);
-+};
-+#endif
-diff --new-file -urp linux-2.6.15/init/do_mounts_rd.c linux-2.6.15-squashfs3.0/init/do_mounts_rd.c
---- linux-2.6.15/init/do_mounts_rd.c 2006-03-01 22:37:27.000000000 +0000
-+++ linux-2.6.15-squashfs3.0/init/do_mounts_rd.c 2006-03-07 21:12:37.000000000 +0000
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/cramfs_fs.h>
-+#include <linux/squashfs_fs.h>
- #include <linux/initrd.h>
- #include <linux/string.h>
-
-@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
- * numbers could not be found.
- *
- * We currently check for the following magic numbers:
-+ * squashfs
- * minix
- * ext2
- * romfs
-@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
- struct ext2_super_block *ext2sb;
- struct romfs_super_block *romfsb;
- struct cramfs_super *cramfsb;
-+ struct squashfs_super_block *squashfsb;
- int nblocks = -1;
- unsigned char *buf;
-
-@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
- ext2sb = (struct ext2_super_block *) buf;
- romfsb = (struct romfs_super_block *) buf;
- cramfsb = (struct cramfs_super *) buf;
-+ squashfsb = (struct squashfs_super_block *) buf;
- memset(buf, 0xe5, size);
-
- /*
-@@ -101,6 +105,15 @@ identify_ramdisk_image(int fd, int start
- goto done;
- }
-
-+ /* squashfs is at block zero too */
-+ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
-+ printk(KERN_NOTICE
-+ "RAMDISK: squashfs filesystem found at block %d\n",
-+ start_block);
-+ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
-+ goto done;
-+ }
-+
- /*
- * Read block 1 to test for minix and ext2 superblock
- */
diff --git a/packages/linux/linux-rp-2.6.17/tosa-lcdnoise-r0.patch b/packages/linux/linux-rp-2.6.17/tosa-lcdnoise-r0.patch
deleted file mode 100644
index cb014fb8bc..0000000000
--- a/packages/linux/linux-rp-2.6.17/tosa-lcdnoise-r0.patch
+++ /dev/null
@@ -1,157 +0,0 @@
-Index: linux-tosa/arch/arm/mach-pxa/tosa.c
-===================================================================
---- linux-tosa.orig/arch/arm/mach-pxa/tosa.c 2006-08-29 16:52:59.000000000 +0100
-+++ linux-tosa/arch/arm/mach-pxa/tosa.c 2006-08-29 16:55:25.959706776 +0100
-@@ -2,6 +2,7 @@
- * Support for Sharp SL-C6000x PDAs
- * Model: (Tosa)
- *
-+ * Copyright (c) 2006 Wolfson Microelectronics PLC.
- * Copyright (c) 2005 Dirk Opfer
- *
- * Based on code written by Sharp/Lineo for 2.4 kernels
-@@ -46,6 +47,8 @@
- #include <asm/hardware/tmio.h>
- #include <asm/mach/sharpsl_param.h>
-
-+#include <linux/wm97xx.h>
-+
- #include "generic.h"
-
- /*
-@@ -428,6 +431,16 @@
- },
- };
-
-+
-+/*
-+ * Tosa Touchscreen device
-+ */
-+
-+static struct wm97xx_machinfo tosa_ts_machinfo = {
-+ .get_hsync_time = tosa_get_hsync_time,
-+ .wait_hsync = tosa_wait_hsync,
-+};
-+
- /*
- * Tosa Blueooth
- */
-@@ -457,6 +470,7 @@
- GPSR(TOSA_GPIO_ON_RESET) = GPIO_bit(TOSA_GPIO_ON_RESET);
-
- mdelay(1000);
-+ wm97xx_unset_machinfo();
- }
-
- static void tosa_restart(void)
-@@ -501,6 +515,8 @@
- platform_scoop_config = &tosa_pcmcia_config;
-
- platform_add_devices(devices, ARRAY_SIZE(devices));
-+
-+ wm97xx_set_machinfo(&tosa_ts_machinfo);
- }
-
- static void __init fixup_tosa(struct machine_desc *desc,
-Index: linux-tosa/arch/arm/mach-pxa/tosa_lcd.c
-===================================================================
---- linux-tosa.orig/arch/arm/mach-pxa/tosa_lcd.c 2006-08-29 16:52:59.000000000 +0100
-+++ linux-tosa/arch/arm/mach-pxa/tosa_lcd.c 2006-08-29 16:55:32.818664056 +0100
-@@ -1,6 +1,7 @@
- /*
- * LCD / Backlight control code for Sharp SL-6000x (tosa)
- *
-+ * Copyright (c) 2006 Wolfson Microelectronics PLC.
- * Copyright (c) 2005 Dirk Opfer
- *
- * This program is free software; you can redistribute it and/or modify
-@@ -59,6 +60,8 @@
- static struct ssp_dev tosa_nssp_dev;
- static struct ssp_state tosa_nssp_state;
- static spinlock_t tosa_nssp_lock;
-+static int blanked;
-+static unsigned long hsync_time;
-
- static unsigned short normal_i2c[] = {
- DAC_BASE,
-@@ -130,6 +133,17 @@
- pxa_nssp_output(TG_GPOSR,0x02); /* GPOS0=powercontrol, GPOS1=GPIO, GPOS2=TCTL */
- }
-
-+static unsigned long calc_hsync_time(const struct fb_videomode *mode) {
-+ /* The 25 and 44 'magic numbers' are from Sharp's 2.4 patches */
-+ if (mode->yres == 640) {
-+ return 25;
-+ }
-+ if (mode->yres == 320) {
-+ return 44;
-+ }
-+ return 0;
-+}
-+
- static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode)
- {
- const int value = TG_REG0_COLOR | TG_REG0_UD | TG_REG0_LR;
-@@ -154,6 +168,8 @@
- /* set common voltage */
- i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj);
-
-+ blanked = 0;
-+ hsync_time = calc_hsync_time(mode);
- }
-
- static void tosa_lcd_tg_off(struct device *dev)
-@@ -172,6 +188,8 @@
-
- /* L3V Off */
- reset_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON);
-+
-+ blanked = 1;
- }
-
- static int tosa_detect_client(struct i2c_adapter* adapter, int address, int kind) {
-@@ -238,6 +256,23 @@
- return 0;
- }
-
-+unsigned long tosa_get_hsync_time(void)
-+{
-+/* This method should eventually contain the correct algorithm for calculating
-+ the hsync_time */
-+ if (blanked)
-+ return 0;
-+ else
-+ return hsync_time;
-+}
-+
-+void tosa_wait_hsync(void)
-+{
-+ /* Waits for a rising edge on the VGA line */
-+ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) == 0);
-+ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) != 0);
-+}
-+
- static struct i2c_driver tosa_driver={
- .id = TOSA_LCD_I2C_DEVICEID,
- .attach_adapter = tosa_attach_adapter,
-Index: linux-tosa/include/asm-arm/arch-pxa/tosa.h
-===================================================================
---- linux-tosa.orig/include/asm-arm/arch-pxa/tosa.h 2006-08-29 16:52:59.000000000 +0100
-+++ linux-tosa/include/asm-arm/arch-pxa/tosa.h 2006-08-29 16:55:12.442761664 +0100
-@@ -1,6 +1,7 @@
- /*
- * Hardware specific definitions for Sharp SL-C6000x series of PDAs
- *
-+ * Copyright (c) 2006 Wolfson Microelectronics PLC.
- * Copyright (c) 2005 Dirk Opfer
- *
- * Based on Sharp's 2.4 kernel patches
-@@ -187,4 +188,8 @@
- extern struct platform_device tosascoop_jc_device;
- extern struct platform_device tosascoop_device;
- extern struct platform_device tc6393_device;
-+
-+unsigned long tosa_get_hsync_time(void);
-+void tosa_wait_hsync(void);
-+
- #endif /* _ASM_ARCH_TOSA_H_ */
diff --git a/packages/linux/linux-rp-2.6.17/vesafb-tng-1.0-rc2-git-20060629.patch b/packages/linux/linux-rp-2.6.17/vesafb-tng-1.0-rc2-git-20060629.patch
deleted file mode 100644
index 188ce6094e..0000000000
--- a/packages/linux/linux-rp-2.6.17/vesafb-tng-1.0-rc2-git-20060629.patch
+++ /dev/null
@@ -1,3089 +0,0 @@
-# Patch generated against a6047eef1c465c38aacfbdab193161b3f0cd144
----
-# Documentation/fb/vesafb.txt | 250 ++++--
-# arch/i386/boot/video.S | 12
-# drivers/video/Kconfig | 56 +
-# drivers/video/Makefile | 6
-# drivers/video/fbmem.c | 1
-# drivers/video/modedb.c | 1
-# drivers/video/vesafb-thread.c | 727 +++++++++++++++++++
-# drivers/video/vesafb-tng.c | 1598 ++++++++++++++++++++++++++++++++++++++++++
-# include/linux/sched.h | 2
-# include/video/vesa.h | 150 +++
-# kernel/fork.c | 35
-# mm/memory.c | 1
-# mm/mmap.c | 1
-# 13 files changed, 2748 insertions(+), 92 deletions(-)
-#
---- linux-2.6.17.orig/Documentation/fb/vesafb.txt
-+++ linux-2.6.17/Documentation/fb/vesafb.txt
-@@ -2,16 +2,18 @@
- What is vesafb?
- ===============
-
--This is a generic driver for a graphic framebuffer on intel boxes.
-+Vesafb is a generic framebuffer driver for x86 and x86_64 boxes.
-
--The idea is simple: Turn on graphics mode at boot time with the help
--of the BIOS, and use this as framebuffer device /dev/fb0, like the m68k
--(and other) ports do.
-+VESA BIOS Extensions Version 2.0 are required, because we need access to
-+a linear frame buffer. VBE 3.0 is required if you want to use modes with a
-+higher (than the standard 60 Hz) refresh rate.
-
--This means we decide at boot time whenever we want to run in text or
--graphics mode. Switching mode later on (in protected mode) is
--impossible; BIOS calls work in real mode only. VESA BIOS Extensions
--Version 2.0 are required, because we need a linear frame buffer.
-+The VESA framebuffer driver comes in two flavors - the standard 'vesafb'
-+and 'vesafb-tng'. Vesafb-tng is available only on 32-bit x86 due to the
-+technology it uses (vm86). Vesafb-tng has more features than vesafb
-+(adjusting the refresh rate on VBE 3.0 compliant boards, switching the
-+video mode without rebooting, selecting a mode by providing its
-+modedb name, and more).
-
- Advantages:
-
-@@ -29,26 +31,35 @@ Disadvantages:
- How to use it?
- ==============
-
--Switching modes is done using the vga=... boot parameter. Read
--Documentation/svga.txt for details.
-+If you are running a 32-bit x86 system and you decide to use vesafb-tng,
-+you can either compile the driver into the kernel or use it as a module.
-+The graphics mode you want to use is in both cases specified using the
-+standard modedb format.
-
--You should compile in both vgacon (for text mode) and vesafb (for
--graphics mode). Which of them takes over the console depends on
--whenever the specified mode is text or graphics.
-+If your system doesn't support vm86 calls, things get a little more tricky.
-+Since on such systems you can't do BIOS calls from protected mode in which
-+kernel runs, you have to decide at boot time whenever you want to run in text
-+or in graphics mode. Switching mode later on is impossible. Switching modes
-+is done using the vga=... boot parameter. Read Documentation/svga.txt for
-+details. Below is a more detailed description of what to do on systems using
-+the standard vesafb driver.
-
--The graphic modes are NOT in the list which you get if you boot with
--vga=ask and hit return. The mode you wish to use is derived from the
--VESA mode number. Here are those VESA mode numbers:
-+You should compile in both vgacon (for text mode) and vesafb (for graphics
-+mode). Which of them takes over the console depends on whenever the
-+specified mode is text or graphics.
-+
-+The graphic modes are NOT in the list which you get if you boot with vga=ask
-+and hit return. The mode you wish to use is derived from the VESA mode number.
-+Here are those VESA mode numbers:
-
- | 640x480 800x600 1024x768 1280x1024
- ----+-------------------------------------
--256 | 0x101 0x103 0x105 0x107
--32k | 0x110 0x113 0x116 0x119
--64k | 0x111 0x114 0x117 0x11A
--16M | 0x112 0x115 0x118 0x11B
-+256 | 0x101 0x103 0x105 0x107
-+32k | 0x110 0x113 0x116 0x119
-+64k | 0x111 0x114 0x117 0x11A
-+16M | 0x112 0x115 0x118 0x11B
-
--The video mode number of the Linux kernel is the VESA mode number plus
--0x200.
-+The video mode number of the Linux kernel is the VESA mode number plus 0x200.
-
- Linux_kernel_mode_number = VESA_mode_number + 0x200
-
-@@ -56,15 +67,15 @@ So the table for the Kernel mode numbers
-
- | 640x480 800x600 1024x768 1280x1024
- ----+-------------------------------------
--256 | 0x301 0x303 0x305 0x307
--32k | 0x310 0x313 0x316 0x319
--64k | 0x311 0x314 0x317 0x31A
--16M | 0x312 0x315 0x318 0x31B
-+256 | 0x301 0x303 0x305 0x307
-+32k | 0x310 0x313 0x316 0x319
-+64k | 0x311 0x314 0x317 0x31A
-+16M | 0x312 0x315 0x318 0x31B
-
--To enable one of those modes you have to specify "vga=ask" in the
--lilo.conf file and rerun LILO. Then you can type in the desired
--mode at the "vga=ask" prompt. For example if you like to use
--1024x768x256 colors you have to say "305" at this prompt.
-+To enable one of those modes you have to specify "vga=ask" in the lilo.conf
-+file and rerun LILO. Then you can type in the desired mode at the "vga=ask"
-+prompt. For example if you like to use 1024x768x256 colors you have to say
-+"305" at this prompt.
-
- If this does not work, this might be because your BIOS does not support
- linear framebuffers or because it does not support this mode at all.
-@@ -72,11 +83,12 @@ Even if your board does, it might be the
- Extensions v2.0 are required, 1.2 is NOT sufficient. You will get a
- "bad mode number" message if something goes wrong.
-
--1. Note: LILO cannot handle hex, for booting directly with
-+1. Note: LILO cannot handle hex, for booting directly with
- "vga=mode-number" you have to transform the numbers to decimal.
- 2. Note: Some newer versions of LILO appear to work with those hex values,
- if you set the 0x in front of the numbers.
-
-+
- X11
- ===
-
-@@ -84,98 +96,164 @@ XF68_FBDev should work just fine, but it
- another (accelerated) X-Server like XF86_SVGA might or might not work.
- It depends on X-Server and graphics board.
-
--The X-Server must restore the video mode correctly, else you end up
-+The X-Server must restore the video mode correctly, or else you end up
- with a broken console (and vesafb cannot do anything about this).
-+With vesafb-tng chances are that the console will be restored properly
-+even if the X server messes up the video mode.
-
-
- Refresh rates
- =============
-
--There is no way to change the vesafb video mode and/or timings after
--booting linux. If you are not happy with the 60 Hz refresh rate, you
--have these options:
-+With VBE 3.0 compatible BIOSes and vesafb-tng it is possible to change
-+the refresh rate either at boot time (by specifying the @<rr> part of
-+the mode name) or later, using the fbset utility.
-
-- * configure and load the DOS-Tools for your the graphics board (if
-- available) and boot linux with loadlin.
-- * use a native driver (matroxfb/atyfb) instead if vesafb. If none
-+If you want to use the default BIOS refresh rate while switching modes
-+on a running system, set pixclock to 0.
-+
-+With VBE 2.0 there is no way to change the mode timings after booting
-+Linux. If you are not happy with the 60 Hz refresh rate, you have
-+the following options:
-+
-+ * Configure and load the DOS tools for your the graphics board (if
-+ available) and boot Linux with loadlin.
-+ * Use a native driver (matroxfb/atyfb) instead of vesafb. If none
- is available, write a new one!
-- * VBE 3.0 might work too. I have neither a gfx board with VBE 3.0
-- support nor the specs, so I have not checked this yet.
-+ * Use a BIOS editor to change the default refresh rate (such an
-+ editor does exist at least for ATI Radeon BIOSes).
-+ * If you're running a non-vm86 and VBE 3.0 compatible system, you can
-+ use a kernel patch (vesafb-rrc) to hard-code some mode timings in
-+ the kernel and use these while setting the video mode at boot time.
-+
-+Note that there are some boards (nVidia 59**, 57** and newer models)
-+claiming that their Video BIOS is VBE 3.0 compliant, while ignoring the
-+CRTC values provided by software such as vesafb-tng. You'll not be able
-+to adjust the refresh rate if you're using one of these boards.
-
-
- Configuration
- =============
-
--The VESA BIOS provides protected mode interface for changing
--some parameters. vesafb can use it for palette changes and
--to pan the display. It is turned off by default because it
--seems not to work with some BIOS versions, but there are options
--to turn it on.
-+The VESA BIOS provides protected mode interface for changing some parameters.
-+vesafb can use it for palette changes and to pan the display. It is turned
-+off by default because it seems not to work with some BIOS versions, but
-+there are options to turn it on.
-
--You can pass options to vesafb using "video=vesafb:option" on
--the kernel command line. Multiple options should be separated
--by comma, like this: "video=vesafb:ypan,invers"
-+You can pass options to vesafb using "video=vesafb:option" on the kernel
-+command line. Multiple options should be separated by a comma, like this:
-+"video=vesafb:ypan,1024x768-32@85"
-
--Accepted options:
-+Note that vesafb-tng still uses the "video=vesafb:option" format of the
-+kernel command line video parameter. "video=vesafb-tng:xxx" is incorrect.
-
--invers no comment...
-+Accepted options (both vesafb and vesafb-tng):
-
--ypan enable display panning using the VESA protected mode
-- interface. The visible screen is just a window of the
-- video memory, console scrolling is done by changing the
-- start of the window.
-- pro: * scrolling (fullscreen) is fast, because there is
-- no need to copy around data.
-- * You'll get scrollback (the Shift-PgUp thing),
-- the video memory can be used as scrollback buffer
-- kontra: * scrolling only parts of the screen causes some
-- ugly flicker effects (boot logo flickers for
-- example).
-+ypan Enable display panning using the VESA protected mode interface
-+ The visible screen is just a window of the video memory,
-+ console scrolling is done by changing the start of the window.
-+ pro: * scrolling (fullscreen) is fast, because there is
-+ no need to copy around data.
-+ * you'll get scrollback (the Shift-PgUp thing),
-+ the video memory can be used as scrollback buffer
-+ con: * scrolling only parts of the screen causes some
-+ ugly flicker effects (boot logo flickers for
-+ example).
-
--ywrap Same as ypan, but assumes your gfx board can wrap-around
-- the video memory (i.e. starts reading from top if it
-- reaches the end of video memory). Faster than ypan.
-+ywrap Same as ypan, but assumes your gfx board can wrap-around the video
-+ memory (i.e. starts reading from top if it reaches the end of
-+ video memory). Faster than ypan.
-
--redraw scroll by redrawing the affected part of the screen, this
-- is the safe (and slow) default.
-+redraw Scroll by redrawing the affected part of the screen, this is the
-+ safe (and slow) default.
-
-+vgapal Use the standard VGA registers for palette changes.
-
--vgapal Use the standard vga registers for palette changes.
-- This is the default.
--pmipal Use the protected mode interface for palette changes.
-+pmipal Use the protected mode interface for palette changes.
-+ This is the default is the protected mode interface is available.
-
--mtrr:n setup memory type range registers for the vesafb framebuffer
-- where n:
-- 0 - disabled (equivalent to nomtrr) (default)
-- 1 - uncachable
-- 2 - write-back
-- 3 - write-combining
-- 4 - write-through
-+mtrr:n Setup memory type range registers for the vesafb framebuffer
-+ where n:
-+ 0 - disabled (equivalent to nomtrr) (default)
-+ 1 - uncachable
-+ 2 - write-back
-+ 3 - write-combining
-+ 4 - write-through
-
-- If you see the following in dmesg, choose the type that matches the
-- old one. In this example, use "mtrr:2".
-+ If you see the following in dmesg, choose the type that matches
-+ the old one. In this example, use "mtrr:2".
- ...
- mtrr: type mismatch for e0000000,8000000 old: write-back new: write-combining
- ...
-
--nomtrr disable mtrr
-+nomtrr Do not use memory type range registers for vesafb.
-
- vremap:n
- remap 'n' MiB of video RAM. If 0 or not specified, remap memory
-- according to video mode. (2.5.66 patch/idea by Antonino Daplas
-- reversed to give override possibility (allocate more fb memory
-- than the kernel would) to 2.4 by tmb@iki.fi)
-+ according to video mode. (2.5.66 patch/idea by Antonino Daplas
-+ reversed to give override possibility (allocate more fb memory
-+ than the kernel would) to 2.4 by tmb@iki.fi)
-
- vtotal:n
- if the video BIOS of your card incorrectly determines the total
- amount of video RAM, use this option to override the BIOS (in MiB).
-
--Have fun!
-+Options accepted only by vesafb-tng:
-
-- Gerd
-+<mode> The mode you want to set, in the standard modedb format. Refer to
-+ modedb.txt for a detailed description. If you specify a mode that is
-+ not supported by your board's BIOS, vesafb-tng will attempt to set a
-+ similar mode. The list of supported modes can be found in
-+ /proc/fbx/modes, where x is the framebuffer number (usually 0).
-+ When vesafb-tng is compiled as a module, the mode string should be
-+ provided as a value of the parameter 'mode'.
-+
-+vbemode:x
-+ Force the use of VBE mode x. The mode will only be set if it's
-+ found in the VBE-provided list of supported modes.
-+ NOTE: The mode number 'x' should be specified in VESA mode number
-+ notation, not the Linux kernel one (eg. 257 instead of 769).
-+ HINT: If you use this option because normal <mode> parameter does
-+ not work for you and you use a X server, you'll probably want to
-+ set the 'nocrtc' option to ensure that the video mode is properly
-+ restored after console <-> X switches.
-+
-+nocrtc Do not use CRTC timings while setting the video mode. This option
-+ makes sence only with VBE 3.0 compliant systems. Use it if you have
-+ problems with modes set in the standard way. Note that using this
-+ option means that any refresh rate adjustments will be ignored
-+ and the refresh rate will stay at your BIOS default (60 Hz).
-+
-+noedid Do not try to fetch and use EDID-provided modes.
-+
-+noblank Disable hardware blanking.
-+
-+gtf Force the use of VESA's GTF (Generalized Timing Formula). Specifying
-+ this will cause vesafb to skip its internal modedb and EDID-modedb
-+ and jump straight to the GTF part of the code (normally used only if
-+ everything else failed). This can be useful if you want to get as
-+ much as possible from your graphics board but your BIOS doesn't
-+ support modes with the refresh rates you require. Note that you may
-+ need to specify the maxhf, maxvf and maxclk parameters if they are not
-+ provided by the EDID block.
-+
-+Additionally, the following parameters may be provided. They all override the
-+EDID-provided values and BIOS defaults. Refer to your monitor's specs to get
-+the correct values for maxhf, maxvf and maxclk for your hardware.
-+
-+maxhf:n Maximum horizontal frequency (in kHz).
-+maxvf:n Maximum vertical frequency (in Hz).
-+maxclk:n Maximum pixel clock (in MHz).
-+
-+Have fun!
-
- --
-+Original document for the vesafb driver by
- Gerd Knorr <kraxel@goldbach.in-berlin.de>
-
--Minor (mostly typo) changes
--by Nico Schmoigl <schmoigl@rumms.uni-mannheim.de>
-+Minor (mostly typo) changes by
-+Nico Schmoigl <schmoigl@rumms.uni-mannheim.de>
-+
-+Extended documentation for vm86, VBE 3.0 and vesafb-tng by
-+Michal Januszewski <spock@gentoo.org>
-+
---- linux-2.6.17.orig/arch/i386/boot/video.S
-+++ linux-2.6.17/arch/i386/boot/video.S
-@@ -165,10 +165,12 @@ basret: ret
- # parameters in the default 80x25 mode -- these are set directly,
- # because some very obscure BIOSes supply insane values.
- mode_params:
-+#ifdef CONFIG_FB_VESA_STD
- #ifdef CONFIG_VIDEO_SELECT
- cmpb $0, graphic_mode
- jnz mopar_gr
- #endif
-+#endif
- movb $0x03, %ah # Read cursor position
- xorb %bh, %bh
- int $0x10
-@@ -201,6 +203,7 @@ mopar2: movb %al, %fs:(PARAM_VIDEO_LINES
- ret
-
- #ifdef CONFIG_VIDEO_SELECT
-+#ifdef CONFIG_FB_VESA_STD
- # Fetching of VESA frame buffer parameters
- mopar_gr:
- leaw modelist+1024, %di
-@@ -283,6 +286,7 @@ dac_done:
- movw %es, %fs:(PARAM_VESAPM_SEG)
- movw %di, %fs:(PARAM_VESAPM_OFF)
- no_pm: ret
-+#endif
-
- # The video mode menu
- mode_menu:
-@@ -497,10 +501,12 @@ mode_set:
-
- cmpb $VIDEO_FIRST_V7>>8, %ah
- jz setv7
--
-+
-+#ifdef CONFIG_FB_VESA_STD
- cmpb $VIDEO_FIRST_VESA>>8, %ah
- jnc check_vesa
--
-+#endif
-+
- orb %ah, %ah
- jz setmenu
-
-@@ -572,6 +578,7 @@ setr1: lodsw
- movw -4(%si), %ax # Fetch mode ID
- jmp _m_s
-
-+#ifdef CONFIG_FB_VESA_STD
- check_vesa:
- leaw modelist+1024, %di
- subb $VIDEO_FIRST_VESA>>8, %bh
-@@ -605,6 +612,7 @@ check_vesa:
- ret
-
- _setbad: jmp setbad # Ugly...
-+#endif
-
- # Recalculate vertical display end registers -- this fixes various
- # inconsistencies of extended modes on many adapters. Called when
---- linux-2.6.17.orig/drivers/video/Kconfig
-+++ linux-2.6.17/drivers/video/Kconfig
-@@ -472,8 +472,22 @@ config FB_TGA
- cards. Say Y if you have one of those.
-
- config FB_VESA
-- bool "VESA VGA graphics support"
-- depends on (FB = y) && X86
-+ tristate "VESA VGA graphics support"
-+ depends on (FB = y) && (X86 || X86_64)
-+ help
-+ This is the frame buffer device driver for generic VESA 2.0
-+ compliant graphic cards. The older VESA 1.2 cards are not supported.
-+ You will get a boot time penguin logo at no additional cost. Please
-+ read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
-+
-+choice
-+ prompt "VESA driver type"
-+ depends on FB_VESA
-+ default FB_VESA_STD if X86_64
-+ default FB_VESA_TNG if X86
-+
-+config FB_VESA_STD
-+ bool "vesafb"
- select FB_CFB_FILLRECT
- select FB_CFB_COPYAREA
- select FB_CFB_IMAGEBLIT
-@@ -481,7 +495,43 @@ config FB_VESA
- This is the frame buffer device driver for generic VESA 2.0
- compliant graphic cards. The older VESA 1.2 cards are not supported.
- You will get a boot time penguin logo at no additional cost. Please
-- read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
-+ read <file:Documentation/fb/vesafb.txt>. Choose this driver if you
-+ are experiencing problems with vesafb-tng or if you own a 64-bit system.
-+
-+ Note that this driver cannot be compiled as a module.
-+
-+config FB_VESA_TNG
-+ bool "vesafb-tng"
-+ depends on !X86_64
-+ select FB_MODE_HELPERS
-+ select FB_CFB_FILLRECT
-+ select FB_CFB_COPYAREA
-+ select FB_CFB_IMAGEBLIT
-+ help
-+ This is the frame buffer device driver for generic VESA 2.0
-+ compliant graphic cards. It is capable of taking advantage of
-+ VBE 3.0 features. With this driver you will be able to adjust
-+ the refresh rate (VBE 3.0 compliant boards only) and change
-+ the graphic mode on-the-fly.
-+
-+ You will also get a boot time penguin logo at no additional cost. Please
-+ read <file:Documentation/fb/vesafb.txt>.
-+
-+endchoice
-+
-+config FB_VESA_DEFAULT_MODE
-+ string "VESA default mode"
-+ depends on FB_VESA_TNG
-+ default "640x480@60"
-+ help
-+ This option is used to determine the default mode vesafb is
-+ supposed to switch to in case no mode is provided as a kernel
-+ command line parameter.
-+
-+config VIDEO_SELECT
-+ bool
-+ depends on FB_VESA
-+ default y
-
- config VIDEO_SELECT
- bool
---- linux-2.6.17.orig/drivers/video/Makefile
-+++ linux-2.6.17/drivers/video/Makefile
-@@ -97,7 +97,11 @@ obj-$(CONFIG_FB_IMX) += imx
- obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o
-
- # Platform or fallback drivers go here
--obj-$(CONFIG_FB_VESA) += vesafb.o
-+ifeq ($(CONFIG_FB_VESA_STD),y)
-+ obj-y += vesafb.o
-+else
-+ obj-$(CONFIG_FB_VESA) += vesafb-thread.o vesafb-tng.o
-+endif
- obj-$(CONFIG_FB_VGA16) += vga16fb.o vgastate.o
- obj-$(CONFIG_FB_OF) += offb.o
-
---- linux-2.6.17.orig/drivers/video/fbmem.c
-+++ linux-2.6.17/drivers/video/fbmem.c
-@@ -1438,6 +1438,7 @@ fbmem_init(void)
- printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
- fb_class = NULL;
- }
-+
- return 0;
- }
-
---- linux-2.6.17.orig/drivers/video/modedb.c
-+++ linux-2.6.17/drivers/video/modedb.c
-@@ -671,6 +671,7 @@ void fb_var_to_videomode(struct fb_video
- {
- u32 pixclock, hfreq, htotal, vtotal;
-
-+ mode->refresh = 0;
- mode->name = NULL;
- mode->xres = var->xres;
- mode->yres = var->yres;
---- /dev/null
-+++ linux-2.6.17/drivers/video/vesafb-thread.c
-@@ -0,0 +1,727 @@
-+/*
-+ * Framebuffer driver for VBE 2.0+ compliant graphic boards.
-+ * Kernel thread and vm86 routines.
-+ *
-+ * (c) 2004-2006 Michal Januszewski <spock@gentoo.org>
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/slab.h>
-+#include <linux/workqueue.h>
-+#include <linux/completion.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/mm.h>
-+#include <linux/delay.h>
-+#include <linux/signal.h>
-+#include <linux/suspend.h>
-+#include <linux/unistd.h>
-+#include <video/vesa.h>
-+#include <video/edid.h>
-+#include <asm/mman.h>
-+#include <asm/page.h>
-+#include <asm/vm86.h>
-+#include <asm/thread_info.h>
-+#include <asm/uaccess.h>
-+#include <asm/mmu_context.h>
-+#include "edid.h"
-+
-+#ifdef MODULE
-+int errno;
-+#endif
-+
-+static DECLARE_COMPLETION(vesafb_th_completion);
-+static DECLARE_MUTEX(vesafb_task_list_sem);
-+static LIST_HEAD(vesafb_task_list);
-+static DECLARE_WAIT_QUEUE_HEAD(vesafb_wait);
-+
-+static struct vm86_struct vm86;
-+static int vesafb_pid = 0;
-+
-+_syscall3(int,ioperm,unsigned long, a, unsigned long, b, unsigned long, c);
-+_syscall1(int,vm86old,struct vm86_struct __user*, v86);
-+
-+#define DEFAULT_VM86_FLAGS (IF_MASK | IOPL_MASK)
-+#define VM86_PUSHW(x) \
-+do { \
-+ vm86.regs.esp -= 2; \
-+ *(u16*)(STACK_ADDR + vm86.regs.esp) = x; \
-+} while(0);
-+
-+/* Stack, the return code and buffers will be put into
-+ * one contiguous memory chunk:
-+ *
-+ * [ STACK | RET_CODE | BUFFER ]
-+ *
-+ * Some video BIOSes (sis6326) try to store data somewhere
-+ * in 0x7000-0x7fff, so we zeromap more memory to be safe.
-+ */
-+#define IVTBDA_SIZE PAGE_SIZE
-+#define RET_CODE_SIZE 0x0010
-+#define STACK_SIZE 0x0500
-+#define BUFFER_SIZE 0x10000
-+
-+/* The amount of memory that will be allocated should be a multiple
-+ * of PAGE_SIZE. */
-+#define __MEM_SIZE (RET_CODE_SIZE + STACK_SIZE + BUFFER_SIZE)
-+#define REAL_MEM_SIZE (((__MEM_SIZE / PAGE_SIZE) + 1) * PAGE_SIZE)
-+
-+#define IVTBDA_ADDR 0x00000
-+#define STACK_ADDR (IVTBDA_ADDR + IVTBDA_SIZE)
-+#define RET_CODE_ADDR (STACK_ADDR + STACK_SIZE)
-+#define BUF_ADDR (RET_CODE_ADDR + RET_CODE_SIZE)
-+
-+#define FLAG_D (1 << 10)
-+
-+/* Segment prefix opcodes */
-+enum {
-+ P_CS = 0x2e,
-+ P_SS = 0x36,
-+ P_DS = 0x3e,
-+ P_ES = 0x26,
-+ P_FS = 0x64,
-+ P_GS = 0x65
-+};
-+
-+/* Emulated vm86 ins instruction */
-+static void vm86_ins(int size)
-+{
-+ u32 edx, edi;
-+ edx = vm86.regs.edx & 0xffff;
-+ edi = (vm86.regs.edi & 0xffff) + (u32)(vm86.regs.es << 4);
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("std\n");
-+ else
-+ asm volatile ("cld\n");
-+
-+ switch (size) {
-+ case 4:
-+ asm volatile ("insl\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ case 2:
-+ asm volatile ("insw\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ case 1:
-+ asm volatile ("insb\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ }
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("cld\n");
-+
-+ edi -= (u32)(vm86.regs.es << 4);
-+
-+ vm86.regs.edi &= 0xffff0000;
-+ vm86.regs.edi |= edi & 0xffff;
-+}
-+
-+static void vm86_rep_ins(int size)
-+{
-+ u16 cx = vm86.regs.ecx;
-+ while (cx--)
-+ vm86_ins(size);
-+
-+ vm86.regs.ecx &= 0xffff0000;
-+}
-+
-+/* Emulated vm86 outs instruction */
-+static void vm86_outs(int size, int segment)
-+{
-+ u32 edx, esi, base;
-+
-+ edx = vm86.regs.edx & 0xffff;
-+ esi = vm86.regs.esi & 0xffff;
-+
-+ switch (segment) {
-+ case P_CS: base = vm86.regs.cs; break;
-+ case P_SS: base = vm86.regs.ss; break;
-+ case P_ES: base = vm86.regs.es; break;
-+ case P_FS: base = vm86.regs.fs; break;
-+ case P_GS: base = vm86.regs.gs; break;
-+ default: base = vm86.regs.ds; break;
-+ }
-+
-+ esi += base << 4;
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("std\n");
-+ else
-+ asm volatile ("cld\n");
-+
-+ switch (size) {
-+ case 4:
-+ asm volatile ("outsl\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ case 2:
-+ asm volatile ("outsw\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ case 1:
-+ asm volatile ("outsb\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ }
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("cld");
-+
-+ esi -= base << 4;
-+ vm86.regs.esi &= 0xffff0000;
-+ vm86.regs.esi |= (esi & 0xffff);
-+}
-+
-+static void vm86_rep_outs(int size, int segment)
-+{
-+ u16 cx = vm86.regs.ecx;
-+ while (cx--)
-+ vm86_outs(size, segment);
-+
-+ vm86.regs.ecx &= 0xffff0000;
-+}
-+
-+static int vm86_do_unknown(void)
-+{
-+ u8 data32 = 0, segment = P_DS, rep = 0;
-+ u8 *instr;
-+ int ret = 0, i = 0;
-+
-+ instr = (u8*)((vm86.regs.cs << 4) + vm86.regs.eip);
-+
-+ while (1) {
-+ switch(instr[i]) {
-+ case 0x66: /* operand size prefix */
-+ data32 = 1 - data32;
-+ i++;
-+ break;
-+ case 0xf2: /* repnz */
-+ case 0xf3: /* rep */
-+ rep = 1;
-+ i++;
-+ break;
-+ case P_CS: /* segment prefix */
-+ case P_SS:
-+ case P_DS:
-+ case P_ES:
-+ case P_FS:
-+ case P_GS:
-+ segment = instr[i];
-+ i++;
-+ break;
-+ case 0xf0: /* LOCK - ignored */
-+ case 0x67: /* address size prefix - ignored */
-+ i++;
-+ break;
-+ case 0x6c: /* insb */
-+ if (rep)
-+ vm86_rep_ins(1);
-+ else
-+ vm86_ins(1);
-+ i++;
-+ goto out;
-+ case 0x6d: /* insw / insd */
-+ if (rep) {
-+ if (data32)
-+ vm86_rep_ins(4);
-+ else
-+ vm86_rep_ins(2);
-+ } else {
-+ if (data32)
-+ vm86_ins(4);
-+ else
-+ vm86_ins(2);
-+ }
-+ i++;
-+ goto out;
-+ case 0x6e: /* outsb */
-+ if (rep)
-+ vm86_rep_outs(1, segment);
-+ else
-+ vm86_outs(1, segment);
-+ i++;
-+ goto out;
-+ case 0x6f: /* outsw / outsd */
-+ if (rep) {
-+ if (data32)
-+ vm86_rep_outs(4, segment);
-+ else
-+ vm86_rep_outs(2, segment);
-+ } else {
-+ if (data32)
-+ vm86_outs(4, segment);
-+ else
-+ vm86_outs(2, segment);
-+ }
-+ i++;
-+ goto out;
-+ case 0xe4: /* inb xx */
-+ asm volatile (
-+ "inb %w1, %b0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]), "0" (vm86.regs.eax));
-+ i += 2;
-+ goto out;
-+ case 0xe5: /* inw xx / ind xx */
-+ if (data32) {
-+ asm volatile (
-+ "inl %w1, %0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]),
-+ "0" (vm86.regs.eax));
-+ } else {
-+ asm volatile (
-+ "inw %w1, %w0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]),
-+ "0" (vm86.regs.eax));
-+ }
-+ i += 2;
-+ goto out;
-+
-+ case 0xec: /* inb dx */
-+ asm volatile (
-+ "inb %w1, %b0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx), "0" (vm86.regs.eax));
-+ i++;
-+ goto out;
-+ case 0xed: /* inw dx / ind dx */
-+ if (data32) {
-+ asm volatile (
-+ "inl %w1, %0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx));
-+ } else {
-+ asm volatile (
-+ "inw %w1, %w0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx));
-+ }
-+ i++;
-+ goto out;
-+ case 0xe6: /* outb xx */
-+ asm volatile (
-+ "outb %b0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax), "d" (instr[i+1]));
-+ i += 2;
-+ goto out;
-+ case 0xe7: /* outw xx / outd xx */
-+ if (data32) {
-+ asm volatile (
-+ "outl %0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (instr[i+1]));
-+ } else {
-+ asm volatile (
-+ "outw %w0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (instr[i+1]));
-+ }
-+ i += 2;
-+ goto out;
-+ case 0xee: /* outb dx */
-+ asm volatile (
-+ "outb %b0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax), "d" (vm86.regs.edx));
-+ i++;
-+ goto out;
-+ case 0xef: /* outw dx / outd dx */
-+ if (data32) {
-+ asm volatile (
-+ "outl %0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (vm86.regs.edx));
-+ } else {
-+ asm volatile (
-+ "outw %w0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (vm86.regs.edx));
-+ }
-+ i++;
-+ goto out;
-+ default:
-+ printk(KERN_ERR "vesafb: BUG, opcode 0x%x emulation "
-+ "not supported (EIP: 0x%lx)\n",
-+ instr[i], (u32)(vm86.regs.cs << 4) +
-+ vm86.regs.eip);
-+ ret = 1;
-+ goto out;
-+ }
-+ }
-+out: vm86.regs.eip += i;
-+ return ret;
-+}
-+
-+void vesafb_do_vm86(struct vm86_regs *regs)
-+{
-+ unsigned int ret;
-+ u8 *retcode = (void*)RET_CODE_ADDR;
-+
-+ memset(&vm86,0,sizeof(vm86));
-+ memcpy(&vm86.regs, regs, sizeof(struct vm86_regs));
-+
-+ /* The return code */
-+ retcode[0] = 0xcd; /* int opcode */
-+ retcode[1] = 0xff; /* int number (255) */
-+
-+ /* We use int 0xff to get back to protected mode */
-+ memset(&vm86.int_revectored, 0, sizeof(vm86.int_revectored));
-+ ((unsigned char *)&vm86.int_revectored)[0xff / 8] |= (1 << (0xff % 8));
-+
-+ /*
-+ * We want to call int 0x10, so we set:
-+ * CS = 0x42 = 0x10 * 4 + 2
-+ * IP = 0x40 = 0x10 * 4
-+ * and SS:ESP. It's up to the caller to set the rest of the registers.
-+ */
-+ vm86.regs.eflags = DEFAULT_VM86_FLAGS;
-+ vm86.regs.cs = *(unsigned short *)0x42;
-+ vm86.regs.eip = *(unsigned short *)0x40;
-+ vm86.regs.ss = (STACK_ADDR >> 4);
-+ vm86.regs.esp = ((STACK_ADDR & 0x0000f) + STACK_SIZE);
-+
-+ /* These will be fetched off the stack when we come to an iret in the
-+ * int's 0x10 code. */
-+ VM86_PUSHW(DEFAULT_VM86_FLAGS);
-+ VM86_PUSHW((RET_CODE_ADDR >> 4)); /* return code segment */
-+ VM86_PUSHW((RET_CODE_ADDR & 0x0000f)); /* return code offset */
-+
-+ while(1) {
-+ ret = vm86old(&vm86);
-+
-+ if (VM86_TYPE(ret) == VM86_INTx) {
-+ int vint = VM86_ARG(ret);
-+
-+ /* If exit from vm86 was caused by int 0xff, then
-+ * we're done.. */
-+ if (vint == 0xff)
-+ goto out;
-+
-+ /* .. otherwise, we have to call the int handler
-+ * manually */
-+ VM86_PUSHW(vm86.regs.eflags);
-+ VM86_PUSHW(vm86.regs.cs);
-+ VM86_PUSHW(vm86.regs.eip);
-+
-+ vm86.regs.cs = *(u16 *)((vint << 2) + 2);
-+ vm86.regs.eip = *(u16 *)(vint << 2);
-+ vm86.regs.eflags &= ~(VIF_MASK | TF_MASK);
-+ } else if (VM86_TYPE(ret) == VM86_UNKNOWN) {
-+ if (vm86_do_unknown())
-+ goto out;
-+ } else {
-+ printk(KERN_ERR "vesafb: BUG, returned from "
-+ "vm86 with %x (EIP: 0x%lx)\n",
-+ ret, (u32)(vm86.regs.cs << 4) +
-+ vm86.regs.eip);
-+ goto out;
-+ }
-+ }
-+
-+out: /* copy the registers' state back to the caller's struct */
-+ memcpy(regs, &vm86.regs, sizeof(struct vm86_regs));
-+}
-+
-+static int vesafb_remap_pfn_range(unsigned long start, unsigned long end,
-+ unsigned long pgoff, unsigned long prot,
-+ int type)
-+{
-+ struct vm_area_struct *vma;
-+ struct mm_struct *mm = current->mm;
-+ int ret = 0;
-+
-+ vma = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
-+ if (!vma)
-+ return -ENOMEM;
-+ memset(vma, 0, sizeof(*vma));
-+ down_write(&mm->mmap_sem);
-+ vma->vm_mm = mm;
-+ vma->vm_start = start;
-+ vma->vm_end = end;
-+ vma->vm_flags = VM_READ | VM_WRITE | VM_EXEC;
-+ vma->vm_flags |= mm->def_flags;
-+ vma->vm_page_prot.pgprot = prot;
-+ vma->vm_pgoff = pgoff;
-+
-+ if ((ret = insert_vm_struct(mm, vma))) {
-+ up_write(&mm->mmap_sem);
-+ kmem_cache_free(vm_area_cachep, vma);
-+ return ret;
-+ }
-+
-+ if (type) {
-+ ret = zeromap_page_range(vma,
-+ vma->vm_start,
-+ vma->vm_end - vma->vm_start,
-+ vma->vm_page_prot);
-+ } else {
-+ vma->vm_flags |= VM_SHARED;
-+ ret = remap_pfn_range(vma,
-+ vma->vm_start,
-+ vma->vm_pgoff,
-+ vma->vm_end - vma->vm_start,
-+ vma->vm_page_prot);
-+ }
-+ up_write(&mm->mmap_sem);
-+ return ret;
-+}
-+
-+static inline int vesafb_init_mem(void)
-+{
-+ int ret = 0;
-+
-+ /* The memory chunks we're remapping here should be multiples
-+ * of PAGE_SIZE. */
-+ ret += vesafb_remap_pfn_range(0x00000, IVTBDA_SIZE, 0,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 0);
-+ ret += vesafb_remap_pfn_range(IVTBDA_SIZE, REAL_MEM_SIZE, 0,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 1);
-+ ret += vesafb_remap_pfn_range(0x9f000, 0x100000,
-+ 0x9f000 >> PAGE_SHIFT,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 0);
-+ if (ret)
-+ printk(KERN_ERR "vesafb thread: memory remapping failed\n");
-+
-+ return ret;
-+}
-+
-+#define vesafb_get_string(str) \
-+{ \
-+ /* The address is in the form ssssoooo, where oooo = offset, \
-+ * ssss = segment */ \
-+ addr = ((p_vbe(tsk->buf)->str & 0xffff0000) >> 12) + \
-+ (p_vbe(tsk->buf)->str & 0x0000ffff); \
-+ \
-+ /* The data is in ROM which is shared between processes, so we \
-+ * just translate the real mode address into one visible from \
-+ * kernel space */ \
-+ if (addr >= 0xa0000) { \
-+ p_vbe(tsk->buf)->str = (u32) __va(addr); \
-+ \
-+ /* The data is in the buffer, we just have to convert the \
-+ * address so that it points into the buffer user provided. */ \
-+ } else if (addr > BUF_ADDR && addr < BUF_ADDR + \
-+ sizeof(struct vesafb_vbe_ib)) { \
-+ addr -= BUF_ADDR; \
-+ p_vbe(tsk->buf)->str = (u32) (tsk->buf + addr); \
-+ \
-+ /* This should never happen: someone was insane enough to put \
-+ * the data somewhere in RAM.. */ \
-+ } else { \
-+ p_vbe(tsk->buf)->str = (u32) ""; \
-+ } \
-+}
-+
-+void vesafb_handle_getvbeib(struct vesafb_task *tsk)
-+{
-+ int addr, res;
-+
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.edi = (BUF_ADDR & 0x000f);
-+ strncpy(p_vbe(BUF_ADDR)->vbe_signature, "VBE2", 4);
-+
-+ vesafb_do_vm86(&tsk->regs);
-+ memcpy(tsk->buf, (void*)(BUF_ADDR), sizeof(struct vesafb_vbe_ib));
-+
-+ /* The OEM fields were not defined prior to VBE 2.0 */
-+ if (p_vbe(tsk->buf)->vbe_version >= 0x200) {
-+ vesafb_get_string(oem_string_ptr);
-+ vesafb_get_string(oem_vendor_name_ptr);
-+ vesafb_get_string(oem_product_name_ptr);
-+ vesafb_get_string(oem_product_rev_ptr);
-+ }
-+
-+ /* This is basically the same as vesafb_get_string() */
-+ addr = ((p_vbe(tsk->buf)->mode_list_ptr & 0xffff0000) >> 12) +
-+ (p_vbe(tsk->buf)->mode_list_ptr & 0x0000ffff);
-+
-+ if (addr >= 0xa0000) {
-+ p_vbe(tsk->buf)->mode_list_ptr = (u32) __va(addr);
-+ } else if (addr > BUF_ADDR && addr < BUF_ADDR +
-+ sizeof(struct vesafb_vbe_ib)) {
-+ addr -= BUF_ADDR;
-+ p_vbe(tsk->buf)->mode_list_ptr = (u32) (tsk->buf + addr);
-+ } else {
-+ res = 0;
-+ printk(KERN_WARNING "vesafb: warning, copying modelist "
-+ "from somewhere in RAM!\n");
-+ while (*(u16*)(addr+res) != 0xffff &&
-+ res < (sizeof(p_vbe(tsk->buf)->reserved) - 2)) {
-+ *(u16*) ((u32)&(p_vbe(tsk->buf)->reserved) + res) =
-+ *(u16*)(addr+res);
-+ res += 2;
-+ }
-+ *(u16*) ((u32)&(p_vbe(tsk->buf)->reserved) + res) = 0xffff;
-+ }
-+}
-+
-+int vesafb_handle_tasks(void)
-+{
-+ struct vesafb_task *tsk;
-+ struct list_head *curr, *next;
-+ int ret = 0;
-+
-+ down(&vesafb_task_list_sem);
-+ list_for_each_safe(curr, next, &vesafb_task_list) {
-+ tsk = list_entry(curr, struct vesafb_task, node);
-+
-+ if (tsk->flags & TF_EXIT) {
-+ ret = 1;
-+ goto task_done;
-+ }
-+ if (tsk->flags & TF_GETVBEIB) {
-+ vesafb_handle_getvbeib(tsk);
-+ goto task_done;
-+ }
-+ /* Do we need to store a pointer to the buffer in ES:EDI? */
-+ if (tsk->flags & TF_BUF_DI) {
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.edi = (BUF_ADDR & 0x000f);
-+ }
-+ /* Sometimes the pointer has to be in ES:EBX. */
-+ if (tsk->flags & TF_BUF_BX) {
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.ebx = (BUF_ADDR & 0x000f);
-+ }
-+ if (tsk->flags & (TF_BUF_DI | TF_BUF_BX))
-+ memcpy((void*)BUF_ADDR, tsk->buf, tsk->buf_len);
-+
-+ vesafb_do_vm86(&tsk->regs);
-+
-+ if (tsk->flags & TF_RETURN_BUF)
-+ memcpy(tsk->buf, (void*)BUF_ADDR, tsk->buf_len);
-+
-+task_done: list_del(curr);
-+ complete(&tsk->done);
-+ }
-+
-+ /* If we're going to kill this thread, don't allow any elements
-+ * to be added to the task list. */
-+ if (!ret)
-+ up(&vesafb_task_list_sem);
-+
-+ return ret;
-+}
-+
-+/*
-+ * This 'hybrid' thread serves as a backend for vesafb-tng, handling all vm86
-+ * calls. It is started as a kernel thread. It then creates its own mm struct,
-+ * thus separating itself from any userspace processes. At this moment, it
-+ * stops being a kernel thread (kernel threads have mm = NULL) and becomes
-+ * a 'hybrid' thread -- one that has full access to kernel space, yet runs
-+ * with its own address space.
-+ *
-+ * This is necessary because in order to make vm86 calls some parts of the
-+ * first 1MB of RAM have to be setup to mimic the real mode. These are:
-+ * - interrupt vector table [0x00000-0x003ff]
-+ * - BIOS data area [0x00400-0x004ff]
-+ * - Extended BIOS data area [0x9fc00-0x9ffff]
-+ * - the video RAM [0xa0000-0xbffff]
-+ * - video BIOS [0xc0000-0xcffff]
-+ * - motherboard BIOS [0xf0000-0xfffff]
-+ */
-+int vesafb_thread(void *unused)
-+{
-+ int err = 0;
-+
-+ set_fs(KERNEL_DS);
-+ daemonize("vesafb");
-+
-+ if (set_new_mm()) {
-+ err = -ENOMEM;
-+ goto thr_end;
-+ }
-+ if (vesafb_init_mem()) {
-+ err = -ENOMEM;
-+ goto thr_end;
-+ }
-+
-+ DPRINTK("started vesafb thread\n");
-+
-+ /* Having an IO bitmap makes things faster as we avoid GPFs
-+ * when running vm86 code. We can live if it fails, though,
-+ * so don't bother checking for errors. */
-+ ioperm(0,1024,1);
-+ set_user_nice(current, -10);
-+
-+ complete(&vesafb_th_completion);
-+
-+ while (1) {
-+ if (vesafb_handle_tasks())
-+ break;
-+ wait_event_interruptible(vesafb_wait,
-+ !list_empty(&vesafb_task_list));
-+ try_to_freeze();
-+ }
-+
-+out: DPRINTK("exiting the vesafb thread\n");
-+ vesafb_pid = -1;
-+
-+ /* Now that all callers know this thread is no longer running
-+ * (pid < 0), allow them to continue. */
-+ up(&vesafb_task_list_sem);
-+ return err;
-+thr_end:
-+ down(&vesafb_task_list_sem);
-+ complete(&vesafb_th_completion);
-+ goto out;
-+}
-+
-+int vesafb_queue_task(struct vesafb_task *tsk)
-+{
-+ down(&vesafb_task_list_sem);
-+ if (vesafb_pid < 0)
-+ return -1;
-+ list_add_tail(&tsk->node, &vesafb_task_list);
-+ up(&vesafb_task_list_sem);
-+ wake_up(&vesafb_wait);
-+ return 0;
-+}
-+
-+int vesafb_wait_for_thread(void)
-+{
-+ /* PID 0 means that the thread is still initializing. */
-+ if (vesafb_pid < 0)
-+ return -1;
-+ wait_for_completion(&vesafb_th_completion);
-+ return 0;
-+}
-+
-+int __init vesafb_init_thread(void)
-+{
-+ vesafb_pid = kernel_thread(vesafb_thread,NULL,0);
-+ return 0;
-+}
-+
-+#ifdef MODULE
-+void __exit vesafb_kill_thread(void)
-+{
-+ struct vesafb_task *tsk;
-+ if (vesafb_pid <= 0)
-+ return;
-+
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ return;
-+ tsk->flags |= TF_EXIT;
-+ vesafb_queue_task(tsk);
-+ vesafb_wait_for_task(tsk);
-+ kfree(tsk);
-+ return;
-+}
-+module_exit(vesafb_kill_thread);
-+#endif
-+module_init(vesafb_init_thread);
-+
-+EXPORT_SYMBOL_GPL(vesafb_queue_task);
-+EXPORT_SYMBOL_GPL(vesafb_wait_for_thread);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Michal Januszewski");
-+
---- /dev/null
-+++ linux-2.6.17/drivers/video/vesafb-tng.c
-@@ -0,0 +1,1598 @@
-+/*
-+ * Framebuffer driver for VBE 2.0+ compliant graphic boards
-+ *
-+ * (c) 2004-2006 Michal Januszewski <spock@gentoo.org>
-+ * Based upon vesafb code by Gerd Knorr <kraxel@goldbach.in-berlin.de>
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/string.h>
-+#include <linux/mm.h>
-+#include <linux/tty.h>
-+#include <linux/delay.h>
-+#include <linux/fb.h>
-+#include <linux/ioport.h>
-+#include <linux/init.h>
-+#include <linux/proc_fs.h>
-+#include <linux/completion.h>
-+#include <linux/platform_device.h>
-+#include <video/edid.h>
-+#include <video/vesa.h>
-+#include <video/vga.h>
-+#include <asm/io.h>
-+#include <asm/mtrr.h>
-+#include <asm/page.h>
-+#include <asm/pgtable.h>
-+#include "edid.h"
-+
-+#define dac_reg (0x3c8)
-+#define dac_val (0x3c9)
-+
-+#define VESAFB_NEED_EXACT_RES 1
-+#define VESAFB_NEED_EXACT_DEPTH 2
-+
-+/* --------------------------------------------------------------------- */
-+
-+static struct fb_var_screeninfo vesafb_defined __initdata = {
-+ .activate = FB_ACTIVATE_NOW,
-+ .height = 0,
-+ .width = 0,
-+ .right_margin = 32,
-+ .upper_margin = 16,
-+ .lower_margin = 4,
-+ .vsync_len = 4,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+};
-+
-+static struct fb_fix_screeninfo vesafb_fix __initdata = {
-+ .id = "VESA VGA",
-+ .type = FB_TYPE_PACKED_PIXELS,
-+ .accel = FB_ACCEL_NONE,
-+};
-+
-+static int mtrr = 0; /* disable mtrr by default */
-+static int blank = 1; /* enable blanking by default */
-+static int ypan = 0; /* 0 - nothing, 1 - ypan, 2 - ywrap */
-+static int pmi_setpal = 1; /* pmi for palette changes */
-+static u16 *pmi_base = NULL; /* protected mode interface location */
-+static void (*pmi_start)(void) = NULL;
-+static void (*pmi_pal)(void) = NULL;
-+static struct vesafb_vbe_ib vbe_ib;
-+static struct vesafb_mode_ib *vbe_modes;
-+static int vbe_modes_cnt = 0;
-+static struct fb_info *vesafb_info = NULL;
-+static int nocrtc = 0; /* ignore CRTC settings */
-+static int noedid __initdata = 0; /* don't try DDC transfers */
-+static int vram_remap __initdata = 0; /* set amount of memory to be used */
-+static int vram_total __initdata = 0; /* set total amount of memory */
-+static u16 maxclk __initdata = 0; /* maximum pixel clock */
-+static u16 maxvf __initdata = 0; /* maximum vertical frequency */
-+static u16 maxhf __initdata = 0; /* maximum horizontal frequency */
-+static int gtf __initdata = 0; /* forces use of the GTF */
-+static char *mode_option __initdata = NULL;
-+static u16 vbemode __initdata = 0;
-+
-+/* --------------------------------------------------------------------- */
-+
-+static int vesafb_find_vbe_mode(int xres, int yres, int depth,
-+ unsigned char flags)
-+{
-+ int i, match = -1, h = 0, d = 0x7fffffff;
-+
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ h = abs(vbe_modes[i].x_res - xres) +
-+ abs(vbe_modes[i].y_res - yres) +
-+ abs(depth - vbe_modes[i].depth);
-+ if (h == 0)
-+ return i;
-+ if (h < d || (h == d && vbe_modes[i].depth > depth)) {
-+ d = h;
-+ match = i;
-+ }
-+ }
-+ i = 1;
-+
-+ if (flags & VESAFB_NEED_EXACT_DEPTH && vbe_modes[match].depth != depth)
-+ i = 0;
-+ if (flags & VESAFB_NEED_EXACT_RES && d > 24)
-+ i = 0;
-+ if (i != 0)
-+ return match;
-+ else
-+ return -1;
-+}
-+
-+static int vesafb_pan_display(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ int offset;
-+
-+ offset = (var->yoffset * info->fix.line_length + var->xoffset) / 4;
-+
-+ /* It turns out it's not the best idea to do panning via vm86,
-+ * so we only allow it if we have a PMI. */
-+ if (pmi_start) {
-+ __asm__ __volatile__(
-+ "call *(%%edi)"
-+ : /* no return value */
-+ : "a" (0x4f07), /* EAX */
-+ "b" (0), /* EBX */
-+ "c" (offset), /* ECX */
-+ "d" (offset >> 16), /* EDX */
-+ "D" (&pmi_start)); /* EDI */
-+ }
-+ return 0;
-+}
-+
-+static int vesafb_blank(int blank, struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int err = 1;
-+
-+ if (vbe_ib.capabilities & VBE_CAP_VGACOMPAT) {
-+ int loop = 10000;
-+ u8 seq = 0, crtc17 = 0;
-+
-+ if (blank == FB_BLANK_POWERDOWN) {
-+ seq = 0x20;
-+ crtc17 = 0x00;
-+ err = 0;
-+ } else {
-+ seq = 0x00;
-+ crtc17 = 0x80;
-+ err = (blank == FB_BLANK_UNBLANK) ? 0 : -EINVAL;
-+ }
-+
-+ vga_wseq(NULL, 0x00, 0x01);
-+ seq |= vga_rseq(NULL, 0x01) & ~0x20;
-+ vga_wseq(NULL, 0x00, seq);
-+
-+ crtc17 |= vga_rcrt(NULL, 0x17) & ~0x80;
-+ while (loop--);
-+ vga_wcrt(NULL, 0x17, crtc17);
-+ vga_wseq(NULL, 0x00, 0x03);
-+ } else {
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f10;
-+ switch (blank) {
-+ case FB_BLANK_UNBLANK:
-+ tsk->regs.ebx = 0x0001;
-+ break;
-+ case FB_BLANK_NORMAL:
-+ tsk->regs.ebx = 0x0101; /* standby */
-+ break;
-+ case FB_BLANK_POWERDOWN:
-+ tsk->regs.ebx = 0x0401; /* powerdown */
-+ break;
-+ default:
-+ goto out;
-+ }
-+ tsk->flags = TF_CALL;
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) == 0x004f)
-+ err = 0;
-+out: kfree(tsk);
-+ }
-+ return err;
-+}
-+
-+static int vesafb_setpalette(struct vesafb_pal_entry *entries, int count,
-+ int start, struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int i = ((struct vesafb_par*)info->par)->mode_idx;
-+ int ret = 0;
-+
-+ /* We support palette modifications for 8 bpp modes only, so
-+ * there can never be more than 256 entries. */
-+ if (start + count > 256)
-+ return -EINVAL;
-+
-+ /* Use VGA registers if mode is VGA-compatible. */
-+ if (i >= 0 && i < vbe_modes_cnt &&
-+ vbe_modes[i].mode_attr & VBE_MODE_VGACOMPAT) {
-+ for (i = 0; i < count; i++) {
-+ outb_p(start + i, dac_reg);
-+ outb_p(entries[i].red, dac_val);
-+ outb_p(entries[i].green, dac_val);
-+ outb_p(entries[i].blue, dac_val);
-+ }
-+ } else if (pmi_setpal) {
-+ __asm__ __volatile__(
-+ "call *(%%esi)"
-+ : /* no return value */
-+ : "a" (0x4f09), /* EAX */
-+ "b" (0), /* EBX */
-+ "c" (count), /* ECX */
-+ "d" (start), /* EDX */
-+ "D" (entries), /* EDI */
-+ "S" (&pmi_pal)); /* ESI */
-+ } else {
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f09;
-+ tsk->regs.ebx = 0x0;
-+ tsk->regs.ecx = count;
-+ tsk->regs.edx = start;
-+ tsk->buf = entries;
-+ tsk->buf_len = sizeof(struct vesafb_pal_entry) * count;
-+ tsk->flags = TF_CALL | TF_BUF_DI;
-+
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ ret = 1;
-+ kfree(tsk);
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_setcolreg(unsigned regno, unsigned red, unsigned green,
-+ unsigned blue, unsigned transp,
-+ struct fb_info *info)
-+{
-+ struct vesafb_pal_entry entry;
-+ int shift = 16 - info->var.green.length;
-+ int ret = 0;
-+
-+ if (regno >= info->cmap.len)
-+ return -EINVAL;
-+
-+ if (info->var.bits_per_pixel == 8) {
-+ entry.red = red >> shift;
-+ entry.green = green >> shift;
-+ entry.blue = blue >> shift;
-+ entry.pad = 0;
-+
-+ ret = vesafb_setpalette(&entry, 1, regno, info);
-+ } else if (regno < 16) {
-+ switch (info->var.bits_per_pixel) {
-+ case 16:
-+ if (info->var.red.offset == 10) {
-+ /* 1:5:5:5 */
-+ ((u32*) (info->pseudo_palette))[regno] =
-+ ((red & 0xf800) >> 1) |
-+ ((green & 0xf800) >> 6) |
-+ ((blue & 0xf800) >> 11);
-+ } else {
-+ /* 0:5:6:5 */
-+ ((u32*) (info->pseudo_palette))[regno] =
-+ ((red & 0xf800) ) |
-+ ((green & 0xfc00) >> 5) |
-+ ((blue & 0xf800) >> 11);
-+ }
-+ break;
-+
-+ case 24:
-+ case 32:
-+ red >>= 8;
-+ green >>= 8;
-+ blue >>= 8;
-+ ((u32 *)(info->pseudo_palette))[regno] =
-+ (red << info->var.red.offset) |
-+ (green << info->var.green.offset) |
-+ (blue << info->var.blue.offset);
-+ break;
-+ }
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
-+{
-+ struct vesafb_pal_entry *entries;
-+ int shift = 16 - info->var.green.length;
-+ int i, ret = 0;
-+
-+ if (info->var.bits_per_pixel == 8) {
-+ if (cmap->start + cmap->len > info->cmap.start +
-+ info->cmap.len || cmap->start < info->cmap.start)
-+ return -EINVAL;
-+
-+ entries = vmalloc(sizeof(struct vesafb_pal_entry) * cmap->len);
-+ if (!entries)
-+ return -ENOMEM;
-+ for (i = 0; i < cmap->len; i++) {
-+ entries[i].red = cmap->red[i] >> shift;
-+ entries[i].green = cmap->green[i] >> shift;
-+ entries[i].blue = cmap->blue[i] >> shift;
-+ entries[i].pad = 0;
-+ }
-+ ret = vesafb_setpalette(entries, cmap->len, cmap->start, info);
-+ vfree(entries);
-+ } else {
-+ /* For modes with bpp > 8, we only set the pseudo palette in
-+ * the fb_info struct. We rely on vesafb_setcolreg to do all
-+ * sanity checking. */
-+ for (i = 0; i < cmap->len; i++) {
-+ ret += vesafb_setcolreg(cmap->start + i, cmap->red[i],
-+ cmap->green[i], cmap->blue[i],
-+ 0, info);
-+ }
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_set_par(struct fb_info *info)
-+{
-+ struct vesafb_par *par = (struct vesafb_par *) info->par;
-+ struct vesafb_task *tsk;
-+ struct vesafb_crtc_ib *crtc = NULL;
-+ struct vesafb_mode_ib *mode = NULL;
-+ int i, err = 0, depth = info->var.bits_per_pixel;
-+
-+ if (depth > 8 && depth != 32)
-+ depth = info->var.red.length + info->var.green.length +
-+ info->var.blue.length;
-+
-+ i = vesafb_find_vbe_mode(info->var.xres, info->var.yres, depth,
-+ VESAFB_NEED_EXACT_RES |
-+ VESAFB_NEED_EXACT_DEPTH);
-+ if (i >= 0)
-+ mode = &vbe_modes[i];
-+ else
-+ return -EINVAL;
-+
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f02;
-+ tsk->regs.ebx = mode->mode_id | 0x4000; /* use LFB */
-+ tsk->flags = TF_CALL;
-+
-+ if (vbe_ib.vbe_version >= 0x0300 && !nocrtc &&
-+ info->var.pixclock != 0) {
-+ tsk->regs.ebx |= 0x0800; /* use CRTC data */
-+ tsk->flags |= TF_BUF_DI;
-+ crtc = kmalloc(sizeof(struct vesafb_crtc_ib), GFP_KERNEL);
-+ if (!crtc) {
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+ crtc->horiz_start = info->var.xres + info->var.right_margin;
-+ crtc->horiz_end = crtc->horiz_start + info->var.hsync_len;
-+ crtc->horiz_total = crtc->horiz_end + info->var.left_margin;
-+
-+ crtc->vert_start = info->var.yres + info->var.lower_margin;
-+ crtc->vert_end = crtc->vert_start + info->var.vsync_len;
-+ crtc->vert_total = crtc->vert_end + info->var.upper_margin;
-+
-+ crtc->pixel_clock = PICOS2KHZ(info->var.pixclock) * 1000;
-+ crtc->refresh_rate = (u16)(100 * (crtc->pixel_clock /
-+ (crtc->vert_total * crtc->horiz_total)));
-+ crtc->flags = 0;
-+
-+ if (info->var.vmode & FB_VMODE_DOUBLE)
-+ crtc->flags |= 0x1;
-+ if (info->var.vmode & FB_VMODE_INTERLACED)
-+ crtc->flags |= 0x2;
-+ if (!(info->var.sync & FB_SYNC_HOR_HIGH_ACT))
-+ crtc->flags |= 0x4;
-+ if (!(info->var.sync & FB_SYNC_VERT_HIGH_ACT))
-+ crtc->flags |= 0x8;
-+ memcpy(&par->crtc, crtc, sizeof(struct vesafb_crtc_ib));
-+ } else
-+ memset(&par->crtc, 0, sizeof(struct vesafb_crtc_ib));
-+
-+ tsk->buf = (void*)crtc;
-+ tsk->buf_len = sizeof(struct vesafb_crtc_ib);
-+
-+ if (vesafb_queue_task (tsk)) {
-+ err = -EINVAL;
-+ goto out;
-+ }
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_ERR "vesafb: mode switch failed (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ err = -EINVAL;
-+ goto out;
-+ }
-+ par->mode_idx = i;
-+
-+ /* For 8bpp modes, always try to set the DAC to 8 bits. */
-+ if (vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC &&
-+ mode->bits_per_pixel <= 8) {
-+ vesafb_reset_task(tsk);
-+ tsk->flags = TF_CALL;
-+ tsk->regs.eax = 0x4f08;
-+ tsk->regs.ebx = 0x0800;
-+
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f ||
-+ ((tsk->regs.ebx & 0xff00) >> 8) != 8) {
-+ /* We've failed to set the DAC palette format -
-+ * time to correct var. */
-+ info->var.red.length = 6;
-+ info->var.green.length = 6;
-+ info->var.blue.length = 6;
-+ }
-+ }
-+
-+ info->fix.visual = (info->var.bits_per_pixel == 8) ?
-+ FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
-+ info->fix.line_length = mode->bytes_per_scan_line;
-+
-+ DPRINTK("set new mode %dx%d-%d (0x%x)\n",
-+ info->var.xres, info->var.yres, info->var.bits_per_pixel,
-+ mode->mode_id);
-+
-+out: if (crtc != NULL)
-+ kfree(crtc);
-+ kfree(tsk);
-+
-+ return err;
-+}
-+
-+static void vesafb_setup_var(struct fb_var_screeninfo *var, struct fb_info *info,
-+ struct vesafb_mode_ib *mode)
-+{
-+ var->xres = mode->x_res;
-+ var->yres = mode->y_res;
-+ var->xres_virtual = mode->x_res;
-+ var->yres_virtual = (ypan) ?
-+ info->fix.smem_len / mode->bytes_per_scan_line :
-+ mode->y_res;
-+ var->xoffset = 0;
-+ var->yoffset = 0;
-+ var->bits_per_pixel = mode->bits_per_pixel;
-+
-+ if (var->bits_per_pixel == 15)
-+ var->bits_per_pixel = 16;
-+
-+ if (var->bits_per_pixel > 8) {
-+ var->red.offset = mode->red_off;
-+ var->red.length = mode->red_len;
-+ var->green.offset = mode->green_off;
-+ var->green.length = mode->green_len;
-+ var->blue.offset = mode->blue_off;
-+ var->blue.length = mode->blue_len;
-+ var->transp.offset = mode->rsvd_off;
-+ var->transp.length = mode->rsvd_len;
-+
-+ DPRINTK("directcolor: size=%d:%d:%d:%d, shift=%d:%d:%d:%d\n",
-+ mode->rsvd_len,
-+ mode->red_len,
-+ mode->green_len,
-+ mode->blue_len,
-+ mode->rsvd_off,
-+ mode->red_off,
-+ mode->green_off,
-+ mode->blue_off);
-+ } else {
-+ var->red.offset = 0;
-+ var->green.offset = 0;
-+ var->blue.offset = 0;
-+ var->transp.offset = 0;
-+
-+ /* We're assuming that we can switch the DAC to 8 bits. If
-+ * this proves to be incorrect, we'll update the fields
-+ * later in set_par(). */
-+ if (vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC) {
-+ var->red.length = 8;
-+ var->green.length = 8;
-+ var->blue.length = 8;
-+ var->transp.length = 0;
-+ } else {
-+ var->red.length = 6;
-+ var->green.length = 6;
-+ var->blue.length = 6;
-+ var->transp.length = 0;
-+ }
-+ }
-+}
-+
-+static void inline vesafb_check_limits(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ struct fb_videomode *mode;
-+
-+ if (!var->pixclock)
-+ return;
-+ if (vbe_ib.vbe_version < 0x0300) {
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60, var, info);
-+ return;
-+ }
-+ if (!fb_validate_mode(var, info))
-+ return;
-+ mode = fb_find_best_mode(var, &info->modelist);
-+ if (mode) {
-+ DPRINTK("find_best_mode: %d %d @ %d (vmode: %d)\n",
-+ mode->xres, mode->yres, mode->refresh, mode->vmode);
-+ if (mode->xres == var->xres && mode->yres == var->yres &&
-+ !(mode->vmode & (FB_VMODE_INTERLACED | FB_VMODE_DOUBLE))) {
-+ fb_videomode_to_var(var, mode);
-+ return;
-+ }
-+ }
-+ if (info->monspecs.gtf && !fb_get_mode(FB_MAXTIMINGS, 0, var, info))
-+ return;
-+ /* Use default refresh rate */
-+ var->pixclock = 0;
-+}
-+
-+static int vesafb_check_var(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ int match = -1;
-+ int depth = var->red.length + var->green.length + var->blue.length;
-+
-+ /* Various apps will use bits_per_pixel to set the color depth,
-+ * which is theoretically incorrect, but which we'll try to handle
-+ * here. */
-+ if (depth == 0 || abs(depth - var->bits_per_pixel) >= 8)
-+ depth = var->bits_per_pixel;
-+ match = vesafb_find_vbe_mode(var->xres, var->yres, depth,
-+ VESAFB_NEED_EXACT_RES);
-+
-+ if (match == -1) {
-+ DPRINTK("vesafb: mode %dx%d-%d not found\n", var->xres,
-+ var->yres, depth);
-+ return -EINVAL;
-+ }
-+
-+ vesafb_setup_var(var, info, &vbe_modes[match]);
-+ DPRINTK("found mode 0x%x (%dx%d-%dbpp)\n",
-+ vbe_modes[match].mode_id, vbe_modes[match].x_res,
-+ vbe_modes[match].y_res, vbe_modes[match].depth);
-+
-+ /* Check whether we have remapped enough memory for this mode. */
-+ if (var->yres * vbe_modes[match].bytes_per_scan_line >
-+ info->fix.smem_len) {
-+ return -EINVAL;
-+ }
-+
-+ if ((var->vmode & FB_VMODE_DOUBLE) &&
-+ !(vbe_modes[match].mode_attr & 0x100))
-+ var->vmode &= ~FB_VMODE_DOUBLE;
-+ if ((var->vmode & FB_VMODE_INTERLACED) &&
-+ !(vbe_modes[match].mode_attr & 0x200))
-+ var->vmode &= ~FB_VMODE_INTERLACED;
-+ vesafb_check_limits(var, info);
-+ return 0;
-+}
-+
-+static int vesafb_open(struct fb_info *info, int user)
-+{
-+ struct vesafb_task *tsk = NULL;
-+ struct vesafb_par *par = info->par;
-+ int cnt = atomic_read(&par->ref_count);
-+
-+ if (!cnt) {
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ goto out;
-+
-+ /* Get the VBE state buffer size. We want all available
-+ * hardware state data (CL = 0x0f). */
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0000;
-+ tsk->flags = TF_CALL;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_WARNING "vesafb: VBE state buffer size "
-+ "cannot be determined (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ goto out;
-+ }
-+
-+ par->vbe_state_size = 64 * (tsk->regs.ebx & 0xffff);
-+ par->vbe_state = kzalloc(par->vbe_state_size, GFP_KERNEL);
-+ if (!par->vbe_state)
-+ goto out;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0001;
-+ tsk->flags = TF_CALL | TF_BUF_BX | TF_RETURN_BUF;
-+ tsk->buf = (void*)(par->vbe_state);
-+ tsk->buf_len = par->vbe_state_size;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto getstate_failed;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_WARNING "vesafb: VBE get state call "
-+ "failed (eax: 0x%lx)\n", tsk->regs.eax);
-+ goto getstate_failed;
-+ }
-+ }
-+out:
-+ atomic_inc(&par->ref_count);
-+ if (tsk)
-+ kfree(tsk);
-+ return 0;
-+
-+getstate_failed:
-+ kfree(par->vbe_state);
-+ par->vbe_state = NULL;
-+ par->vbe_state_size = 0;
-+ goto out;
-+}
-+
-+static int vesafb_release(struct fb_info *info, int user)
-+{
-+ struct vesafb_task *tsk = NULL;
-+ struct vesafb_par *par = info->par;
-+ int cnt = atomic_read(&par->ref_count);
-+
-+ if (!cnt)
-+ return -EINVAL;
-+
-+ if (cnt == 1 && par->vbe_state && par->vbe_state_size) {
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ goto out;
-+
-+ tsk->regs.eax = 0x0003;
-+ tsk->regs.ebx = 0x0000;
-+ tsk->flags = TF_CALL;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0002;
-+ tsk->buf = (void*)(par->vbe_state);
-+ tsk->buf_len = par->vbe_state_size;
-+ tsk->flags = TF_CALL | TF_BUF_BX;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ printk(KERN_WARNING "vesafb: VBE state restore call "
-+ "failed (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ }
-+out:
-+ atomic_dec(&par->ref_count);
-+ if (tsk)
-+ kfree(tsk);
-+ return 0;
-+}
-+
-+static int __init vesafb_probe(struct platform_device *device);
-+
-+static struct fb_ops vesafb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_open = vesafb_open,
-+ .fb_release = vesafb_release,
-+ .fb_setcolreg = vesafb_setcolreg,
-+ .fb_setcmap = vesafb_setcmap,
-+ .fb_pan_display = vesafb_pan_display,
-+ .fb_blank = vesafb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_check_var = vesafb_check_var,
-+ .fb_set_par = vesafb_set_par
-+};
-+
-+static struct platform_driver vesafb_driver = {
-+ .probe = vesafb_probe,
-+ .driver = {
-+ .name = "vesafb",
-+ },
-+};
-+
-+static struct platform_device *vesafb_device;
-+
-+#ifndef MODULE
-+int __init vesafb_setup(char *options)
-+{
-+ char *this_opt;
-+
-+ if (!options || !*options)
-+ return 0;
-+
-+ DPRINTK("options %s\n",options);
-+
-+ while ((this_opt = strsep(&options, ",")) != NULL) {
-+ if (!*this_opt) continue;
-+
-+ DPRINTK("this_opt: %s\n",this_opt);
-+
-+ if (! strcmp(this_opt, "redraw"))
-+ ypan=0;
-+ else if (! strcmp(this_opt, "ypan"))
-+ ypan=1;
-+ else if (! strcmp(this_opt, "ywrap"))
-+ ypan=2;
-+ else if (! strcmp(this_opt, "vgapal"))
-+ pmi_setpal=0;
-+ else if (! strcmp(this_opt, "pmipal"))
-+ pmi_setpal=1;
-+ else if (! strncmp(this_opt, "mtrr:", 5))
-+ mtrr = simple_strtoul(this_opt+5, NULL, 0);
-+ else if (! strcmp(this_opt, "nomtrr"))
-+ mtrr=0;
-+ else if (! strcmp(this_opt, "nocrtc"))
-+ nocrtc=1;
-+ else if (! strcmp(this_opt, "noedid"))
-+ noedid=1;
-+ else if (! strcmp(this_opt, "noblank"))
-+ blank=0;
-+ else if (! strcmp(this_opt, "gtf"))
-+ gtf=1;
-+ else if (! strncmp(this_opt, "vtotal:", 7))
-+ vram_total = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "vremap:", 7))
-+ vram_remap = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "maxhf:", 6))
-+ maxhf = simple_strtoul(this_opt + 6, NULL, 0);
-+ else if (! strncmp(this_opt, "maxvf:", 6))
-+ maxvf = simple_strtoul(this_opt + 6, NULL, 0);
-+ else if (! strncmp(this_opt, "maxclk:", 7))
-+ maxclk = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "vbemode:", 8))
-+ vbemode = simple_strtoul(this_opt + 8, NULL,0);
-+ else if (this_opt[0] >= '0' && this_opt[0] <= '9') {
-+ DPRINTK("mode_option: %s\n",this_opt);
-+ mode_option = this_opt;
-+ } else {
-+ printk(KERN_WARNING
-+ "vesafb: unrecognized option %s\n", this_opt);
-+ }
-+ }
-+
-+ return 0;
-+}
-+#endif /* !MODULE */
-+
-+static int vesafb_read_proc_modes(char *buf, char **start, off_t offset,
-+ int len, int *eof, void *private)
-+{
-+ int clen = 0, i;
-+
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ clen += sprintf(buf + clen, "%dx%d-%d\n", vbe_modes[i].x_res,
-+ vbe_modes[i].y_res, vbe_modes[i].depth);
-+ }
-+ *start = buf + offset;
-+
-+ if (clen > offset) {
-+ clen -= offset;
-+ } else {
-+ clen = 0;
-+ }
-+ return clen;
-+}
-+
-+static int vesafb_read_proc_vbe_info(char *buf, char **start, off_t offset,
-+ int len, int *eof, void *private)
-+{
-+ int clen = 0;
-+
-+ clen += sprintf(buf + clen, "Version: %d.%d\n",
-+ ((vbe_ib.vbe_version & 0xff00) >> 8),
-+ vbe_ib.vbe_version & 0xff);
-+ clen += sprintf(buf + clen, "Vendor: %s\n",
-+ (char*)vbe_ib.oem_vendor_name_ptr);
-+ clen += sprintf(buf + clen, "Product: %s\n",
-+ (char*)vbe_ib.oem_product_name_ptr);
-+ clen += sprintf(buf + clen, "OEM rev: %s\n",
-+ (char*)vbe_ib.oem_product_rev_ptr);
-+ clen += sprintf(buf + clen, "OEM string: %s\n",
-+ (char*)vbe_ib.oem_string_ptr);
-+
-+ *start = buf + offset;
-+
-+ if (clen > offset) {
-+ clen -= offset;
-+ } else {
-+ clen = 0;
-+ }
-+ return clen;
-+}
-+
-+static int __init inline vesafb_vbe_getinfo(struct vesafb_task *tsk)
-+{
-+ tsk->regs.eax = 0x4f00;
-+ tsk->flags = TF_CALL | TF_GETVBEIB;
-+ tsk->buf = &vbe_ib;
-+ tsk->buf_len = sizeof(vbe_ib);
-+ if (vesafb_queue_task (tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if (vbe_ib.vbe_version < 0x0200) {
-+ printk(KERN_ERR "vesafb: Sorry, pre-VBE 2.0 cards are "
-+ "not supported.\n");
-+ return -EINVAL;
-+ }
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_ERR "vesafb: Getting mode info block failed "
-+ "(eax=0x%x)\n", (u32)tsk->regs.eax);
-+ return -EINVAL;
-+ }
-+
-+ printk(KERN_INFO "vesafb: %s, %s, %s (OEM: %s)\n",
-+ (char*)vbe_ib.oem_vendor_name_ptr,
-+ (char*)vbe_ib.oem_product_name_ptr,
-+ (char*)vbe_ib.oem_product_rev_ptr,
-+ (char*)vbe_ib.oem_string_ptr);
-+
-+ printk(KERN_INFO "vesafb: VBE version: %d.%d\n",
-+ ((vbe_ib.vbe_version & 0xff00) >> 8),
-+ vbe_ib.vbe_version & 0xff);
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getmodes(struct vesafb_task *tsk)
-+{
-+ u16 *mode = 0;
-+ int off = 0;
-+
-+ /* Count available modes. */
-+ mode = (u16*)vbe_ib.mode_list_ptr;
-+ while (*mode != 0xffff) {
-+ vbe_modes_cnt++;
-+ mode++;
-+ }
-+
-+ vbe_modes = kmalloc(sizeof(struct vesafb_mode_ib)*
-+ vbe_modes_cnt, GFP_KERNEL);
-+ if (!vbe_modes)
-+ return -ENOMEM;
-+
-+ /* Get mode info for all available modes. */
-+ mode = (u16*)vbe_ib.mode_list_ptr;
-+
-+ while (*mode != 0xffff) {
-+ struct vesafb_mode_ib *mib;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f01;
-+ tsk->regs.ecx = (u32) *mode;
-+ tsk->flags = TF_CALL | TF_RETURN_BUF | TF_BUF_DI;
-+ tsk->buf = vbe_modes+off;
-+ tsk->buf_len = sizeof(struct vesafb_mode_ib);
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+ mib = p_mode(tsk->buf);
-+ mib->mode_id = *mode;
-+
-+ /* We only want modes that are supported with the currennt
-+ * hardware configuration (D0), color (D3), graphics (D4)
-+ * and that have support for the LFB (D7). */
-+ if ((mib->mode_attr & 0x99) == 0x99 &&
-+ mib->bits_per_pixel >= 8) {
-+ off++;
-+ } else {
-+ vbe_modes_cnt--;
-+ }
-+ mode++;
-+ mib->depth = mib->red_len + mib->green_len + mib->blue_len;
-+ /* Handle 8bpp modes and modes with broken color component
-+ * lengths. */
-+ if (mib->depth == 0 ||
-+ (mib->depth == 24 && mib->bits_per_pixel == 32))
-+ mib->depth = mib->bits_per_pixel;
-+ }
-+
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getpmi(struct vesafb_task *tsk)
-+{
-+ int i;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f0a;
-+ tsk->regs.ebx = 0x0;
-+ tsk->flags = TF_CALL;
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f || tsk->regs.es < 0xc000) {
-+ pmi_setpal = ypan = 0;
-+ } else {
-+ pmi_base = (u16*)phys_to_virt(((u32)tsk->regs.es << 4) +
-+ tsk->regs.edi);
-+ pmi_start = (void*)((char*)pmi_base + pmi_base[1]);
-+ pmi_pal = (void*)((char*)pmi_base + pmi_base[2]);
-+ printk(KERN_INFO "vesafb: protected mode interface info at "
-+ "%04x:%04x\n",
-+ (u16)tsk->regs.es, (u16)tsk->regs.edi);
-+ printk(KERN_INFO "vesafb: pmi: set display start = %p, "
-+ "set palette = %p\n", pmi_start, pmi_pal);
-+
-+ if (pmi_base[3]) {
-+ printk(KERN_INFO "vesafb: pmi: ports = ");
-+ for (i = pmi_base[3]/2; pmi_base[i] != 0xffff; i++)
-+ printk("%x ",pmi_base[i]);
-+ printk("\n");
-+
-+ /*
-+ * memory areas not supported (yet?)
-+ *
-+ * Rules are: we have to set up a descriptor for the
-+ * requested memory area and pass it in the ES register
-+ * to the BIOS function.
-+ */
-+ if (pmi_base[i] != 0xffff) {
-+ printk(KERN_INFO "vesafb: can't handle memory "
-+ "requests, pmi disabled\n");
-+ ypan = pmi_setpal = 0;
-+ }
-+ }
-+ }
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getedid(struct vesafb_task *tsk,
-+ struct fb_info *info)
-+{
-+ int res = 0;
-+
-+ if (noedid || vbe_ib.vbe_version < 0x0300)
-+ return -EINVAL;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f15;
-+ tsk->regs.ebx = 0;
-+ tsk->regs.ecx = 0;
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ return -EINVAL;
-+
-+ if ((tsk->regs.ebx & 0x3) == 3) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports both "
-+ "DDC1 and DDC2 transfers\n");
-+ } else if ((tsk->regs.ebx & 0x3) == 2) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports DDC2 "
-+ "transfers\n");
-+ } else if ((tsk->regs.ebx & 0x3) == 1) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports DDC1 "
-+ "transfers\n");
-+ } else {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware doesn't support "
-+ "DDC transfers\n");
-+ return -EINVAL;
-+ }
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f15;
-+ tsk->regs.ebx = 1;
-+ tsk->regs.ecx = tsk->regs.edx = 0;
-+ tsk->flags = TF_CALL | TF_RETURN_BUF | TF_BUF_DI;
-+ tsk->buf = kmalloc(EDID_LENGTH, GFP_KERNEL);
-+ tsk->buf_len = EDID_LENGTH;
-+
-+ if (vesafb_queue_task(tsk)) {
-+ res = -EINVAL;
-+ goto out;
-+ }
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) == 0x004f) {
-+ fb_edid_to_monspecs(tsk->buf, &info->monspecs);
-+ fb_videomode_to_modelist(info->monspecs.modedb,
-+ info->monspecs.modedb_len, &info->modelist);
-+ if (info->monspecs.vfmax && info->monspecs.hfmax) {
-+ /* If the maximum pixel clock wasn't specified in
-+ * the EDID block, set it to 300 MHz. */
-+ if (info->monspecs.dclkmax == 0)
-+ info->monspecs.dclkmax = 300 * 1000000;
-+ info->monspecs.gtf = 1;
-+ } else {
-+ res = -EINVAL;
-+ }
-+ }
-+
-+out: kfree(tsk->buf);
-+ return res;
-+}
-+
-+static void __init inline vesafb_vbe_getmonspecs(struct vesafb_task *tsk,
-+ struct fb_info *info)
-+{
-+ struct fb_var_screeninfo var;
-+ int i;
-+ memset(&info->monspecs, 0, sizeof(struct fb_monspecs));
-+
-+ /* If we didn't get all necessary data from the EDID block,
-+ * mark it as incompatible with the GTF. */
-+ if (vesafb_vbe_getedid(tsk, info))
-+ info->monspecs.gtf = 0;
-+
-+ /* Kernel command line overrides. */
-+ if (maxclk)
-+ info->monspecs.dclkmax = maxclk * 1000000;
-+ if (maxvf)
-+ info->monspecs.vfmax = maxvf;
-+ if (maxhf)
-+ info->monspecs.hfmax = maxhf * 1000;
-+
-+ /* In case DDC transfers are not supported the user can provide
-+ * monitor limits manually. Lower limits are set to "safe" values. */
-+ if (info->monspecs.gtf == 0 && maxclk && maxvf && maxhf) {
-+ info->monspecs.dclkmin = 0;
-+ info->monspecs.vfmin = 60;
-+ info->monspecs.hfmin = 29000;
-+ info->monspecs.gtf = 1;
-+ }
-+
-+ if (info->monspecs.gtf) {
-+ printk(KERN_INFO
-+ "vesafb: monitor limits: vf = %d Hz, hf = %d kHz, "
-+ "clk = %d MHz\n", info->monspecs.vfmax,
-+ (int)(info->monspecs.hfmax / 1000),
-+ (int)(info->monspecs.dclkmax / 1000000));
-+ /* Add valid VESA video modes to our modelist. */
-+ for (i = 0; i < VESA_MODEDB_SIZE; i++) {
-+ fb_videomode_to_var(&var, (struct fb_videomode *)
-+ &vesa_modes[i]);
-+ if (!fb_validate_mode(&var, info))
-+ fb_add_videomode((struct fb_videomode *)
-+ &vesa_modes[i],
-+ &info->modelist);
-+ }
-+ } else {
-+ /* Add all VESA video modes to our modelist. */
-+ fb_videomode_to_modelist((struct fb_videomode *)vesa_modes,
-+ VESA_MODEDB_SIZE, &info->modelist);
-+ printk(KERN_INFO "vesafb: no monitor limits have been set\n");
-+ }
-+ return;
-+}
-+
-+static int __init inline vesafb_vbe_init(struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int res = 0;
-+
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ return -EINVAL;
-+ if ((res = vesafb_vbe_getinfo(tsk)) != 0)
-+ goto out;
-+ if ((res = vesafb_vbe_getmodes(tsk)) != 0)
-+ goto out;
-+ if (pmi_setpal || ypan)
-+ vesafb_vbe_getpmi(tsk);
-+
-+ INIT_LIST_HEAD(&info->modelist);
-+ vesafb_vbe_getmonspecs(tsk, info);
-+
-+out: kfree(tsk);
-+ return res;
-+}
-+
-+static int __init decode_mode(u32 *xres, u32 *yres, u32 *bpp, u32 *refresh)
-+{
-+ int len = strlen(mode_option), i, err = 0;
-+ u8 res_specified = 0, bpp_specified = 0, refresh_specified = 0,
-+ yres_specified = 0;
-+
-+ for (i = len-1; i >= 0; i--) {
-+ switch (mode_option[i]) {
-+ case '@':
-+ len = i;
-+ if (!refresh_specified && !bpp_specified &&
-+ !yres_specified) {
-+ *refresh = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ refresh_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case '-':
-+ len = i;
-+ if (!bpp_specified && !yres_specified) {
-+ *bpp = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ bpp_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case 'x':
-+ if (!yres_specified) {
-+ *yres = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ yres_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case '0'...'9':
-+ break;
-+ default:
-+ goto out;
-+ }
-+ }
-+
-+ if (i < 0 && yres_specified) {
-+ *xres = simple_strtoul(mode_option, NULL, 0);
-+ res_specified = 1;
-+ }
-+
-+out: if (!res_specified || !yres_specified) {
-+ printk(KERN_ERR "vesafb: invalid resolution, "
-+ "%s not specified\n",
-+ (!res_specified) ? "width" : "height");
-+ err = -EINVAL;
-+ }
-+
-+ return err;
-+}
-+
-+static int __init vesafb_init_set_mode(struct fb_info *info)
-+{
-+ struct fb_videomode *fbmode;
-+ struct fb_videomode mode;
-+ int i, modeid, refresh = 0;
-+ u8 refresh_specified = 0;
-+
-+ if (!mode_option)
-+ mode_option = CONFIG_FB_VESA_DEFAULT_MODE;
-+
-+ if (vbemode > 0) {
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ if (vbe_modes[i].mode_id == vbemode) {
-+ info->var.vmode = FB_VMODE_NONINTERLACED;
-+ info->var.sync = FB_SYNC_VERT_HIGH_ACT;
-+ vesafb_setup_var(&info->var, info,
-+ &vbe_modes[i]);
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON,
-+ 60, &info->var, info);
-+ /* With pixclock set to 0, the default BIOS
-+ * timings will be used in set_par(). */
-+ info->var.pixclock = 0;
-+ modeid = i;
-+ goto out;
-+ }
-+ }
-+ printk(KERN_INFO "specified VBE mode %d not found\n",
-+ vbemode);
-+ vbemode = 0;
-+ }
-+
-+ /* Decode the mode specified on the kernel command line. We save
-+ * the depth into bits_per_pixel, which is wrong, but will work
-+ * anyway. */
-+ if (decode_mode(&info->var.xres, &info->var.yres,
-+ &info->var.bits_per_pixel, &refresh))
-+ return -EINVAL;
-+ if (refresh)
-+ refresh_specified = 1;
-+ else
-+ refresh = 60;
-+
-+ /* Look for a matching VBE mode. We can live if an exact match
-+ * cannot be found. */
-+ modeid = vesafb_find_vbe_mode(info->var.xres, info->var.yres,
-+ info->var.bits_per_pixel, 0);
-+
-+ if (modeid == -1) {
-+ return -EINVAL;
-+ } else {
-+ info->var.vmode = FB_VMODE_NONINTERLACED;
-+ info->var.sync = FB_SYNC_VERT_HIGH_ACT;
-+ vesafb_setup_var(&info->var, info, &vbe_modes[modeid]);
-+ }
-+ if (vbe_ib.vbe_version < 0x0300) {
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60,
-+ &info->var, info);
-+ goto out;
-+ }
-+ if (!gtf) {
-+ struct fb_videomode tmode;
-+
-+ if (refresh_specified) {
-+ fb_var_to_videomode(&tmode, &info->var);
-+ tmode.refresh = refresh;
-+ fbmode = fb_find_nearest_mode(&tmode,
-+ &info->modelist);
-+ } else
-+ fbmode = fb_find_best_mode(&info->var,
-+ &info->modelist);
-+
-+ if (fbmode->xres == info->var.xres &&
-+ fbmode->yres == info->var.yres &&
-+ !(fbmode->vmode & (FB_VMODE_INTERLACED | FB_VMODE_DOUBLE))
-+ && (!refresh_specified ||
-+ abs(refresh - fbmode->refresh) <= 5)) {
-+ fb_videomode_to_var(&info->var, fbmode);
-+ return modeid;
-+ }
-+ }
-+ i = FB_MAXTIMINGS;
-+ if (!info->monspecs.gtf)
-+ i = FB_IGNOREMON | FB_VSYNCTIMINGS;
-+ else if (refresh_specified)
-+ i = FB_VSYNCTIMINGS;
-+ if (!fb_get_mode(i, refresh, &info->var, info))
-+ goto out;
-+ if (info->monspecs.gtf &&
-+ !fb_get_mode(FB_MAXTIMINGS, 0, &info->var, info))
-+ goto out;
-+ /* Use default refresh rate */
-+ printk(KERN_WARNING "vesafb: using default BIOS refresh rate\n");
-+ info->var.pixclock = 0;
-+
-+out:
-+ fb_var_to_videomode(&mode, &info->var);
-+ fb_add_videomode(&mode, &info->modelist);
-+ return modeid;
-+}
-+
-+static int __init vesafb_probe(struct platform_device *dev)
-+{
-+ char entry[16];
-+ struct fb_info *info;
-+ struct vesafb_mode_ib *mode = NULL;
-+ int err = 0, i, h;
-+ unsigned int size_vmode;
-+ unsigned int size_remap;
-+ unsigned int size_total;
-+
-+ vesafb_info = info = framebuffer_alloc(sizeof(struct vesafb_par) +
-+ sizeof(u32) * 256, &dev->dev);
-+ if (!info)
-+ return -ENOMEM;
-+
-+ if (vesafb_wait_for_thread()) {
-+ printk(KERN_ERR "vesafb: vesafb thread not running\n");
-+ framebuffer_release(info);
-+ return -EINVAL;
-+ }
-+
-+ if (vesafb_vbe_init(info)) {
-+ printk(KERN_ERR "vesafb: vbe_init failed\n");
-+ err = -EINVAL;
-+ goto out;
-+ }
-+
-+ vesafb_fix.ypanstep = ypan ? 1 : 0;
-+ vesafb_fix.ywrapstep = (ypan>1) ? 1 : 0;
-+
-+ info->pseudo_palette = ((u8*)info->par + sizeof(struct vesafb_par));
-+ info->fbops = &vesafb_ops;
-+ info->var = vesafb_defined;
-+ info->fix = vesafb_fix;
-+
-+ if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
-+ err = -ENXIO;
-+ goto out;
-+ }
-+
-+ i = vesafb_init_set_mode(info);
-+ if (i < 0) {
-+ err = -EINVAL;
-+ goto out_cmap;
-+ } else
-+ mode = &vbe_modes[i];
-+
-+ /* Disable blanking if the user requested so. */
-+ if (!blank) {
-+ info->fbops->fb_blank = NULL;
-+ }
-+
-+ /* Find out how much IO memory is required for the mode with
-+ * the highest resolution. */
-+ size_remap = 0;
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ h = vbe_modes[i].bytes_per_scan_line * vbe_modes[i].y_res;
-+ if (h > size_remap)
-+ size_remap = h;
-+ }
-+ size_remap *= 2;
-+
-+ /* size_vmode -- that is the amount of memory needed for the
-+ * used video mode, i.e. the minimum amount of
-+ * memory we need. */
-+ if (mode != NULL) {
-+ size_vmode = info->var.yres * mode->bytes_per_scan_line;
-+ } else {
-+ size_vmode = info->var.yres * info->var.xres *
-+ ((info->var.bits_per_pixel + 7) >> 3);
-+ }
-+
-+ /* size_total -- all video memory we have. Used for mtrr
-+ * entries, ressource allocation and bounds
-+ * checking. */
-+ size_total = vbe_ib.total_memory * 65536;
-+ if (vram_total)
-+ size_total = vram_total * 1024 * 1024;
-+ if (size_total < size_vmode)
-+ size_total = size_vmode;
-+ ((struct vesafb_par*)(info->par))->mem_total = size_total;
-+
-+ /* size_remap -- the amount of video memory we are going to
-+ * use for vesafb. With modern cards it is no
-+ * option to simply use size_total as th
-+ * wastes plenty of kernel address space. */
-+ if (vram_remap)
-+ size_remap = vram_remap * 1024 * 1024;
-+ if (size_remap < size_vmode)
-+ size_remap = size_vmode;
-+ if (size_remap > size_total)
-+ size_remap = size_total;
-+
-+ info->fix.smem_len = size_remap;
-+ info->fix.smem_start = mode->phys_base_ptr;
-+
-+ /* We have to set it here, because when setup_var() was called,
-+ * smem_len wasn't defined yet. */
-+ info->var.yres_virtual = info->fix.smem_len /
-+ mode->bytes_per_scan_line;
-+
-+ if (ypan && info->var.yres_virtual > info->var.yres) {
-+ printk(KERN_INFO "vesafb: scrolling: %s "
-+ "using protected mode interface, "
-+ "yres_virtual=%d\n",
-+ (ypan > 1) ? "ywrap" : "ypan",info->var.yres_virtual);
-+ } else {
-+ printk(KERN_INFO "vesafb: scrolling: redraw\n");
-+ info->var.yres_virtual = info->var.yres;
-+ ypan = 0;
-+ }
-+
-+ info->flags = FBINFO_FLAG_DEFAULT |
-+ (ypan) ? FBINFO_HWACCEL_YPAN : 0;
-+
-+ if (!ypan)
-+ info->fbops->fb_pan_display = NULL;
-+
-+ if (!request_mem_region(info->fix.smem_start, size_total, "vesafb")) {
-+ printk(KERN_WARNING "vesafb: cannot reserve video memory at "
-+ "0x%lx\n", info->fix.smem_start);
-+ /* We cannot make this fatal. Sometimes this comes from magic
-+ spaces our resource handlers simply don't know about. */
-+ }
-+
-+ info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len);
-+
-+ if (!info->screen_base) {
-+ printk(KERN_ERR
-+ "vesafb: abort, cannot ioremap video memory "
-+ "0x%x @ 0x%lx\n",
-+ info->fix.smem_len, info->fix.smem_start);
-+ err = -EIO;
-+ goto out_mem;
-+ }
-+
-+ /* Request failure does not faze us, as vgacon probably has this
-+ region already (FIXME) */
-+ request_region(0x3c0, 32, "vesafb");
-+
-+#ifdef CONFIG_MTRR
-+ if (mtrr && !(info->fix.smem_start & (PAGE_SIZE - 1))) {
-+ int temp_size = size_total;
-+ unsigned int type = 0;
-+
-+ switch (mtrr) {
-+ case 1:
-+ type = MTRR_TYPE_UNCACHABLE;
-+ break;
-+ case 2:
-+ type = MTRR_TYPE_WRBACK;
-+ break;
-+ case 3:
-+ type = MTRR_TYPE_WRCOMB;
-+ break;
-+ case 4:
-+ type = MTRR_TYPE_WRTHROUGH;
-+ break;
-+ default:
-+ type = 0;
-+ break;
-+ }
-+
-+ if (type) {
-+ int rc;
-+
-+ /* Find the largest power-of-two */
-+ while (temp_size & (temp_size - 1))
-+ temp_size &= (temp_size - 1);
-+
-+ /* Try and find a power of two to add */
-+ do {
-+ rc = mtrr_add(info->fix.smem_start,
-+ temp_size, type, 1);
-+ temp_size >>= 1;
-+ } while (temp_size >= PAGE_SIZE && rc == -EINVAL);
-+ }
-+ }
-+#endif /* CONFIG_MTRR */
-+
-+ if (register_framebuffer(info) < 0) {
-+ printk(KERN_ERR
-+ "vesafb: failed to register framebuffer device\n");
-+ err = -EINVAL;
-+ goto out_mem;
-+ }
-+
-+ printk(KERN_INFO "vesafb: framebuffer at 0x%lx, mapped to 0x%p, "
-+ "using %dk, total %dk\n", info->fix.smem_start,
-+ info->screen_base, size_remap/1024, size_total/1024);
-+ printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node,
-+ info->fix.id);
-+
-+ sprintf(entry, "fb%d", info->node);
-+ proc_mkdir(entry, 0);
-+
-+ sprintf(entry, "fb%d/modes", info->node);
-+ create_proc_read_entry(entry, 0, 0, vesafb_read_proc_modes, NULL);
-+
-+ sprintf(entry, "fb%d/vbe_info", info->node);
-+ create_proc_read_entry(entry, 0, 0, vesafb_read_proc_vbe_info, NULL);
-+ return 0;
-+
-+out_mem:
-+ release_mem_region(info->fix.smem_start, size_total);
-+ if (!list_empty(&info->modelist))
-+ fb_destroy_modelist(&info->modelist);
-+ fb_destroy_modedb(info->monspecs.modedb);
-+out_cmap:
-+ fb_dealloc_cmap(&info->cmap);
-+out:
-+ framebuffer_release(info);
-+ vesafb_info = NULL;
-+ kfree(vbe_modes);
-+ vbe_modes = NULL;
-+ return err;
-+}
-+
-+int __init vesafb_init(void)
-+{
-+ int ret;
-+#ifndef MODULE
-+ char *option = NULL;
-+
-+ if (fb_get_options("vesafb", &option))
-+ return -ENODEV;
-+ vesafb_setup(option);
-+#endif
-+ ret = platform_driver_register(&vesafb_driver);
-+
-+ if (!ret) {
-+ vesafb_device = platform_device_alloc("vesafb", 0);
-+
-+ if (vesafb_device)
-+ ret = platform_device_add(vesafb_device);
-+ else
-+ ret = -ENOMEM;
-+
-+ if (ret) {
-+ platform_device_put(vesafb_device);
-+ platform_driver_unregister(&vesafb_driver);
-+ }
-+ }
-+ return ret;
-+}
-+
-+module_init(vesafb_init);
-+
-+#ifdef MODULE
-+void __exit vesafb_exit(void)
-+{
-+ char entry[16];
-+
-+ if (vesafb_info)
-+ unregister_framebuffer(vesafb_info);
-+
-+ platform_device_unregister(vesafb_device);
-+ platform_driver_unregister(&vesafb_driver);
-+
-+ if (vesafb_info) {
-+ struct vesafb_par *par = (struct vesafb_par*)vesafb_info->par;
-+
-+ sprintf(entry, "fb%d/modes", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ sprintf(entry, "fb%d/vbe_info", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ sprintf(entry, "fb%d", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ iounmap(vesafb_info->screen_base);
-+ release_mem_region(vesafb_info->fix.smem_start,
-+ par->mem_total);
-+ fb_dealloc_cmap(&vesafb_info->cmap);
-+ if (!list_empty(&vesafb_info->modelist))
-+ fb_destroy_modelist(&vesafb_info->modelist);
-+ fb_destroy_modedb(vesafb_info->monspecs.modedb);
-+ framebuffer_release(vesafb_info);
-+ }
-+
-+ if (vbe_modes != NULL)
-+ kfree(vbe_modes);
-+}
-+
-+module_exit(vesafb_exit);
-+
-+static inline int param_get_scroll(char *buffer, struct kernel_param *kp)
-+{
-+ return 0;
-+}
-+static inline int param_set_scroll(const char *val, struct kernel_param *kp)
-+{
-+ ypan = 0;
-+
-+ if (! strcmp(val, "redraw"))
-+ ypan = 0;
-+ else if (! strcmp(val, "ypan"))
-+ ypan = 1;
-+ else if (! strcmp(val, "ywrap"))
-+ ypan = 2;
-+
-+ return 0;
-+}
-+
-+#define param_check_scroll(name, p) __param_check(name, p, void);
-+
-+module_param_named(scroll, ypan, scroll, 0);
-+MODULE_PARM_DESC(scroll,"Scrolling mode, set to 'redraw', 'ypan' or 'ywrap'");
-+module_param_named(vgapal, pmi_setpal, invbool, 0);
-+MODULE_PARM_DESC(vgapal,"bool: set palette using VGA registers");
-+module_param_named(pmipal, pmi_setpal, bool, 0);
-+MODULE_PARM_DESC(pmipal,"bool: set palette using PMI calls");
-+module_param_named(nomtrr, mtrr, invbool, 0);
-+MODULE_PARM_DESC(nomtrr,"bool: disable use of MTRR registers");
-+module_param(blank, bool, 1);
-+MODULE_PARM_DESC(blank,"bool: enable hardware blanking");
-+module_param(nocrtc, bool, 0);
-+MODULE_PARM_DESC(nocrtc,"bool: ignore CRTC timings when setting modes");
-+module_param(noedid, bool, 0);
-+MODULE_PARM_DESC(noedid,"bool: ignore EDID-provided monitor limits "
-+ "when setting modes");
-+module_param(gtf, bool, 0);
-+MODULE_PARM_DESC(gtf,"bool: force use of VESA GTF to calculate mode timings");
-+module_param(vram_remap, uint, 0);
-+MODULE_PARM_DESC(vram_remap,"Set amount of video memory to be used [MiB]");
-+module_param(vram_total, uint, 0);
-+MODULE_PARM_DESC(vram_total,"Set total amount of video memoery [MiB]");
-+module_param(maxclk, ushort, 0);
-+MODULE_PARM_DESC(maxclk,"Maximum pixelclock [MHz], overrides EDID data");
-+module_param(maxhf, ushort, 0);
-+MODULE_PARM_DESC(maxhf,"Maximum horizontal frequency [kHz], "
-+ "overrides EDID data");
-+module_param(maxvf, ushort, 0);
-+MODULE_PARM_DESC(maxvf,"Maximum vertical frequency [Hz], "
-+ "overrides EDID data");
-+module_param_named(mode, mode_option, charp, 0);
-+MODULE_PARM_DESC(mode, "Specify resolution as "
-+ "\"<xres>x<yres>[-<bpp>][@<refresh>]\"");
-+module_param(vbemode, ushort, 0);
-+MODULE_PARM_DESC(vbemode,"VBE mode number to set, overrides 'mode' setting");
-+
-+#endif /* MODULE */
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Michal Januszewski");
-+MODULE_DESCRIPTION("Framebuffer driver for VBE2.0+ compliant graphics boards");
-+
---- linux-2.6.17.orig/include/linux/sched.h
-+++ linux-2.6.17/include/linux/sched.h
-@@ -1159,6 +1159,8 @@ extern void mmput(struct mm_struct *);
- extern struct mm_struct *get_task_mm(struct task_struct *task);
- /* Remove the current tasks stale references to the old mm_struct */
- extern void mm_release(struct task_struct *, struct mm_struct *);
-+/* Create a new mm for a kernel thread */
-+extern int set_new_mm(void);
-
- extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *);
- extern void flush_thread(void);
---- /dev/null
-+++ linux-2.6.17/include/video/vesa.h
-@@ -0,0 +1,150 @@
-+#if 0
-+#define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , \
-+ ## args)
-+#else
-+#define DPRINTK(fmt, args...)
-+#endif
-+
-+#define p_crtc(arg) ((struct vesafb_crtc_ib*)(arg))
-+#define p_vbe(arg) ((struct vesafb_vbe_ib*)(arg))
-+#define p_mode(arg) ((struct vesafb_mode_ib*)(arg))
-+
-+struct vesafb_task {
-+ u8 flags;
-+ void *buf;
-+ int buf_len;
-+ struct vm86_regs regs;
-+ struct list_head node;
-+ struct completion done;
-+};
-+
-+/* Vesafb task flags and masks */
-+#define TF_CALL 0x00
-+#define TF_EXIT 0x01
-+#define TF_GETVBEIB 0x02
-+#define TF_BUF_DI 0x04
-+#define TF_BUF_BX 0x08
-+#define TF_RETURN_BUF 0x10
-+
-+/* Macros and functions for manipulating vesafb tasks */
-+#define vesafb_create_task(task) \
-+do { \
-+ task = kmalloc(sizeof(struct vesafb_task), GFP_ATOMIC); \
-+ if (task) \
-+ memset(task, 0, sizeof(struct vesafb_task)); \
-+ init_completion(&task->done); \
-+} while (0)
-+
-+#define vesafb_wait_for_task(task) wait_for_completion(&task->done);
-+#define vesafb_reset_task(task) init_completion(&task->done);
-+int vesafb_queue_task(struct vesafb_task *task);
-+
-+/* Functions for controlling the vesafb thread */
-+int vesafb_wait_for_thread(void);
-+
-+#define VBE_CAP_CAN_SWITCH_DAC 0x01
-+#define VBE_CAP_VGACOMPAT 0x02
-+
-+/* This struct is 512 bytes long */
-+struct vesafb_vbe_ib {
-+ char vbe_signature[4];
-+ u16 vbe_version;
-+ u32 oem_string_ptr;
-+ u32 capabilities;
-+ u32 mode_list_ptr;
-+ u16 total_memory;
-+ u16 oem_software_rev;
-+ u32 oem_vendor_name_ptr;
-+ u32 oem_product_name_ptr;
-+ u32 oem_product_rev_ptr;
-+ u8 reserved[222];
-+ char oem_data[256];
-+} __attribute__ ((packed));
-+
-+struct vesafb_crtc_ib {
-+ u16 horiz_total;
-+ u16 horiz_start;
-+ u16 horiz_end;
-+ u16 vert_total;
-+ u16 vert_start;
-+ u16 vert_end;
-+ u8 flags;
-+ u32 pixel_clock;
-+ u16 refresh_rate;
-+ u8 reserved[40];
-+} __attribute__ ((packed));
-+
-+#define VBE_MODE_VGACOMPAT 0x20
-+
-+struct vesafb_mode_ib {
-+ /* for all VBE revisions */
-+ u16 mode_attr;
-+ u8 winA_attr;
-+ u8 winB_attr;
-+ u16 win_granularity;
-+ u16 win_size;
-+ u16 winA_seg;
-+ u16 winB_seg;
-+ u32 win_func_ptr;
-+ u16 bytes_per_scan_line;
-+
-+ /* for VBE 1.2+ */
-+ u16 x_res;
-+ u16 y_res;
-+ u8 x_char_size;
-+ u8 y_char_size;
-+ u8 planes;
-+ u8 bits_per_pixel;
-+ u8 banks;
-+ u8 memory_model;
-+ u8 bank_size;
-+ u8 image_pages;
-+ u8 reserved1;
-+
-+ /* Direct color fields for direct/6 and YUV/7 memory models. */
-+ /* Offsets are bit positions of lsb in the mask. */
-+ u8 red_len;
-+ u8 red_off;
-+ u8 green_len;
-+ u8 green_off;
-+ u8 blue_len;
-+ u8 blue_off;
-+ u8 rsvd_len;
-+ u8 rsvd_off;
-+ u8 direct_color_info; /* direct color mode attributes */
-+
-+ /* for VBE 2.0+ */
-+ u32 phys_base_ptr;
-+ u8 reserved2[6];
-+
-+ /* for VBE 3.0+ */
-+ u16 lin_bytes_per_scan_line;
-+ u8 bnk_image_pages;
-+ u8 lin_image_pages;
-+ u8 lin_red_len;
-+ u8 lin_red_off;
-+ u8 lin_green_len;
-+ u8 lin_green_off;
-+ u8 lin_blue_len;
-+ u8 lin_blue_off;
-+ u8 lin_rsvd_len;
-+ u8 lin_rsvd_off;
-+ u32 max_pixel_clock;
-+ u16 mode_id;
-+ u8 depth;
-+} __attribute__ ((packed));
-+
-+struct vesafb_pal_entry {
-+ u_char blue, green, red, pad;
-+} __attribute__ ((packed));
-+
-+struct vesafb_par {
-+ u8 *vbe_state;
-+ int vbe_state_size;
-+ atomic_t ref_count;
-+
-+ u32 mem_total;
-+ int mode_idx;
-+ struct vesafb_crtc_ib crtc;
-+};
-+
---- linux-2.6.17.orig/kernel/fork.c
-+++ linux-2.6.17/kernel/fork.c
-@@ -97,6 +97,7 @@ kmem_cache_t *fs_cachep;
-
- /* SLAB cache for vm_area_struct structures */
- kmem_cache_t *vm_area_cachep;
-+EXPORT_SYMBOL_GPL(vm_area_cachep);
-
- /* SLAB cache for mm_struct structures (tsk->mm) */
- static kmem_cache_t *mm_cachep;
-@@ -383,6 +384,40 @@ void mmput(struct mm_struct *mm)
- EXPORT_SYMBOL_GPL(mmput);
-
- /**
-+ * set_new_mm - allocate, init and activate a new mm for a kernel thread
-+ */
-+int set_new_mm(void)
-+{
-+ struct mm_struct *mm;
-+ struct task_struct *tsk = current;
-+ struct mm_struct *active_mm;
-+
-+ mm = mm_alloc();
-+ if (!mm)
-+ goto fail_nomem;
-+ if (init_new_context(current,mm))
-+ goto fail_nocontext;
-+
-+ task_lock(tsk);
-+ tsk->flags |= PF_BORROWED_MM;
-+ active_mm = tsk->active_mm;
-+ current->mm = mm;
-+ current->active_mm = mm;
-+ activate_mm(active_mm, mm);
-+ task_unlock(current);
-+
-+ /* Drop the previous active_mm */
-+ mmdrop(active_mm);
-+ return 0;
-+
-+fail_nocontext:
-+ mmdrop(mm);
-+fail_nomem:
-+ return -EINVAL;
-+}
-+EXPORT_SYMBOL_GPL(set_new_mm);
-+
-+/**
- * get_task_mm - acquire a reference to the task's mm
- *
- * Returns %NULL if the task has no mm. Checks PF_BORROWED_MM (meaning
---- linux-2.6.17.orig/mm/memory.c
-+++ linux-2.6.17/mm/memory.c
-@@ -1162,6 +1162,7 @@ int zeromap_page_range(struct vm_area_st
- } while (pgd++, addr = next, addr != end);
- return err;
- }
-+EXPORT_SYMBOL_GPL(zeromap_page_range);
-
- pte_t * fastcall get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl)
- {
---- linux-2.6.17.orig/mm/mmap.c
-+++ linux-2.6.17/mm/mmap.c
-@@ -1996,6 +1996,7 @@ int insert_vm_struct(struct mm_struct *
- vma_link(mm, vma, prev, rb_link, rb_parent);
- return 0;
- }
-+EXPORT_SYMBOL_GPL(insert_vm_struct);
-
- /*
- * Copy the vma structure to a new location in the same mm,
diff --git a/packages/linux/linux-rp-2.6.17/wm9712-reset-loop-r2.patch b/packages/linux/linux-rp-2.6.17/wm9712-reset-loop-r2.patch
deleted file mode 100644
index 96919b6b02..0000000000
--- a/packages/linux/linux-rp-2.6.17/wm9712-reset-loop-r2.patch
+++ /dev/null
@@ -1,44 +0,0 @@
- sound/soc/codecs/wm9712.c | 28 ++++++++++++++++++----------
- 1 file changed, 18 insertions(+), 10 deletions(-)
-
-Index: linux-2.6.18/sound/soc/codecs/wm9712.c
-===================================================================
---- linux-2.6.18.orig/sound/soc/codecs/wm9712.c 2006-12-05 23:25:33.000000000 +0000
-+++ linux-2.6.18/sound/soc/codecs/wm9712.c 2006-12-05 23:27:20.000000000 +0000
-@@ -618,18 +618,26 @@ static int wm9712_dapm_event(struct snd_
-
- static int wm9712_reset(struct snd_soc_codec *codec, int try_warm)
- {
-- if (try_warm && soc_ac97_ops.warm_reset) {
-- soc_ac97_ops.warm_reset(codec->ac97);
-- if (!(ac97_read(codec, 0) & 0x8000))
-- return 1;
-- }
-+ int retry = 3;
-+
-+ while (retry--)
-+ {
-+ if(try_warm && soc_ac97_ops.warm_reset) {
-+ soc_ac97_ops.warm_reset(codec->ac97);
-+ if(ac97_read(codec, 0) & 0x8000)
-+ continue;
-+ else
-+ return 1;
-+ }
-
-- soc_ac97_ops.reset(codec->ac97);
-- if (ac97_read(codec, 0) & 0x8000)
-- goto err;
-- return 0;
-+ soc_ac97_ops.reset(codec->ac97);
-+ if(ac97_read(codec, 0) & 0x8000)
-+ continue;
-+ else
-+ return 0;
-+
-+ }
-
--err:
- printk(KERN_ERR "WM9712 AC97 reset failed\n");
- return -EIO;
- }
diff --git a/packages/linux/linux-rp-2.6.17/wm9712-suspend-cold-res-r2.patch b/packages/linux/linux-rp-2.6.17/wm9712-suspend-cold-res-r2.patch
deleted file mode 100644
index e91e54f963..0000000000
--- a/packages/linux/linux-rp-2.6.17/wm9712-suspend-cold-res-r2.patch
+++ /dev/null
@@ -1,16 +0,0 @@
- sound/soc/codecs/wm9712.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: linux-2.6.18/sound/soc/codecs/wm9712.c
-===================================================================
---- linux-2.6.18.orig/sound/soc/codecs/wm9712.c 2006-12-05 23:19:53.000000000 +0000
-+++ linux-2.6.18/sound/soc/codecs/wm9712.c 2006-12-05 23:22:04.000000000 +0000
-@@ -651,7 +651,7 @@ static int wm9712_soc_resume(struct plat
- int i, ret;
- u16 *cache = codec->reg_cache;
-
-- ret = wm9712_reset(codec, 1);
-+ ret = wm9712_reset(codec, 0);
- if (ret < 0){
- printk(KERN_ERR "could not reset AC97 codec\n");
- return ret;
diff --git a/packages/linux/linux-rp-2.6.17/wm97xx-lcdnoise-r0.patch b/packages/linux/linux-rp-2.6.17/wm97xx-lcdnoise-r0.patch
deleted file mode 100644
index 191de3af22..0000000000
--- a/packages/linux/linux-rp-2.6.17/wm97xx-lcdnoise-r0.patch
+++ /dev/null
@@ -1,208 +0,0 @@
-Index: linux-tosa/drivers/input/touchscreen/wm9712.c
-===================================================================
---- linux-tosa.orig/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:50.923275896 +0100
-@@ -1,7 +1,7 @@
- /*
- * wm9712.c -- Codec driver for Wolfson WM9712 AC97 Codecs.
- *
-- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
- * Author: Liam Girdwood
- * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
- * Parts Copyright : Ian Molton <spyro@f2s.com>
-@@ -13,6 +13,12 @@
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
-+ * Revision history
-+ * 4th Jul 2005 Initial version.
-+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
-+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
-+ * touchscreen interference.
-+ *
- */
-
- #include <linux/module.h>
-@@ -28,6 +34,10 @@
- #define WM9705_VERSION "0.60"
- #define DEFAULT_PRESSURE 0xb0c0
-
-+#define CCNT(a) asm volatile ("mrc p14, 0, %0, C1, C1, 0" : "=r"(a))
-+#define CCNT_ON() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+#define CCNT_OFF() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+
- /*
- * Debug
- */
-@@ -243,6 +253,36 @@
- return wm->dig[2] & WM9712_PDEN;
- }
-
-+
-+#ifdef CONFIG_MACH_TOSA
-+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
-+ * before sampling the Y axis of the touchscreen */
-+static inline void wm9712_lcd_sync_on(struct wm97xx* wm, int adcsel) {
-+ unsigned long timer1 = 0, timer2 = 0, wait_time = 0;
-+ if (adcsel == WM97XX_ADCSEL_Y) {
-+ wait_time = wm97xx_calc_lcd_waittime(wm);
-+
-+ CCNT_ON();
-+
-+ if (wait_time) {
-+ /* wait for LCD rising edge */
-+ wm_machinfo->wait_hsync();
-+ /* get clock */
-+ CCNT(timer1);
-+ CCNT(timer2);
-+
-+ while ((timer2 - timer1) < wait_time) {
-+ CCNT(timer2);
-+ }
-+ }
-+ }
-+}
-+
-+static inline void wm9712_lcd_sync_off(void) {
-+ CCNT_OFF();
-+}
-+#endif
-+
- /*
- * Read a sample from the WM9712 adc in polling mode.
- */
-@@ -260,6 +300,9 @@
- /* set up digitiser */
- if (adcsel & 0x8000)
- adcsel = ((adcsel & 0x7fff) + 3) << 12;
-+ #ifdef CONFIG_MACH_TOSA
-+ wm9712_lcd_sync_on(wm, adcsel);
-+ #endif
- wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, adcsel | WM97XX_POLL | WM97XX_DELAY(delay));
-
- /* wait 3 AC97 time slots + delay for conversion */
-@@ -282,6 +325,10 @@
-
- *sample = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-
-+ #ifdef CONFIG_MACH_TOSA
-+ wm9712_lcd_sync_off();
-+ #endif
-+
- /* check we have correct sample */
- if ((*sample & WM97XX_ADCSEL_MASK) != adcsel) {
- dbg ("adc wrong sample, read %x got %x", adcsel,
-@@ -303,11 +350,12 @@
- static int wm9712_poll_touch(struct wm97xx* wm, struct wm97xx_data *data)
- {
- int rc;
--
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_X, &data->x)) != RC_VALID)
- return rc;
-+
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_Y, &data->y)) != RC_VALID)
- return rc;
-+
- if (pil && !five_wire) {
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_PRES, &data->p)) != RC_VALID)
- return rc;
-Index: linux-tosa/drivers/input/touchscreen/wm97xx-core.c
-===================================================================
---- linux-tosa.orig/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:50.924275744 +0100
-@@ -2,7 +2,7 @@
- * wm97xx-core.c -- Touch screen driver core for Wolfson WM9705, WM9712
- * and WM9713 AC97 Codecs.
- *
-- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
- * Author: Liam Girdwood
- * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
- * Parts Copyright : Ian Molton <spyro@f2s.com>
-@@ -67,6 +67,9 @@
- * GPIOs) and 2.6 power management.
- * 29th Nov 2004 Added WM9713 support.
- * 4th Jul 2005 Moved codec specific code out to seperate files.
-+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
-+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
-+ * touchscreen interference.
- */
-
- #include <linux/module.h>
-@@ -94,6 +97,7 @@
- static DECLARE_MUTEX(gpio_sem);
- static LIST_HEAD(wm97xx_misc_list);
- static struct wm97xx* wm_codec = NULL;
-+struct wm97xx_machinfo *wm_machinfo;
-
- /*
- * WM97xx - enable/disable AUX ADC sysfs
-@@ -832,6 +836,23 @@
- mdev->remove(wm_codec);
- }
-
-+#ifdef CONFIG_MACH_TOSA
-+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
-+ * before sampling the Y axis of the touchscreen */
-+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm) {
-+ unsigned long hsync_time = wm_machinfo->get_hsync_time();
-+ return hsync_time;
-+}
-+
-+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo) {
-+ wm_machinfo = machinfo;
-+}
-+
-+void wm97xx_unset_machinfo() {
-+ wm_machinfo = NULL;
-+}
-+#endif
-+
- static struct device_driver wm97xx_driver = {
- .name = "ac97",
- .bus = &ac97_bus_type,
-@@ -861,6 +882,9 @@
- EXPORT_SYMBOL_GPL(wm97xx_reg_write);
- EXPORT_SYMBOL_GPL(wm97xx_register_misc_dev);
- EXPORT_SYMBOL_GPL(wm97xx_unregister_misc_dev);
-+EXPORT_SYMBOL_GPL(wm97xx_calc_lcd_waittime);
-+EXPORT_SYMBOL_GPL(wm97xx_set_machinfo);
-+EXPORT_SYMBOL_GPL(wm97xx_unset_machinfo);
-
- module_init(wm97xx_init);
- module_exit(wm97xx_exit);
-Index: linux-tosa/include/linux/wm97xx.h
-===================================================================
---- linux-tosa.orig/include/linux/wm97xx.h 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/include/linux/wm97xx.h 2006-08-29 16:52:50.924275744 +0100
-@@ -207,6 +207,7 @@
-
- struct wm97xx;
- extern struct wm97xx_codec_drv wm97xx_codec;
-+extern struct wm97xx_machinfo *wm_machinfo;
-
- /*
- * Codec driver interface - allows mapping to WM9705/12/13 and newer codecs
-@@ -253,6 +254,11 @@
- struct list_head list;
- };
-
-+struct wm97xx_machinfo {
-+ unsigned long (*get_hsync_time)(void);
-+ void (*wait_hsync)(void);
-+};
-+
- int wm97xx_register_misc_dev(struct wm97xx_misc_dev* mdev);
- void wm97xx_unregister_misc_dev(struct wm97xx_misc_dev* mdev);
-
-@@ -281,4 +287,9 @@
- int wm97xx_acc_startup(struct wm97xx* wm);
- void wm97xx_acc_shutdown(struct wm97xx* wm);
-
-+
-+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm);
-+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo);
-+void wm97xx_unset_machinfo(void);
-+
- #endif
diff --git a/packages/linux/linux-rp-2.6.19+git/add-oz-release-string.patch b/packages/linux/linux-rp-2.6.19+git/add-oz-release-string.patch
deleted file mode 100644
index a80a1d5528..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/add-oz-release-string.patch
+++ /dev/null
@@ -1,28 +0,0 @@
----
- Makefile | 1 +
- init/version.c | 2 +-
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-Index: git/init/version.c
-===================================================================
---- git.orig/init/version.c 2006-10-31 16:09:47.000000000 +0000
-+++ git/init/version.c 2006-10-31 16:24:54.000000000 +0000
-@@ -35,5 +35,5 @@ struct uts_namespace init_uts_ns = {
- EXPORT_SYMBOL_GPL(init_uts_ns);
-
- const char linux_banner[] =
-- "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
-+ "Linux version " UTS_RELEASE OPENZAURUS_RELEASE " (" LINUX_COMPILE_BY "@"
- LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
-Index: git/Makefile
-===================================================================
---- git.orig/Makefile 2006-10-31 16:08:28.000000000 +0000
-+++ git/Makefile 2006-10-31 16:27:02.000000000 +0000
-@@ -905,6 +905,7 @@ endef
- define filechk_version.h
- (echo \#define LINUX_VERSION_CODE $(shell \
- expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
-+ echo \#define OPENZAURUS_RELEASE \"$(OPENZAURUS_RELEASE)\"; \
- echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
- endef
-
diff --git a/packages/linux/linux-rp-2.6.19+git/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.19+git/connectplus-remove-ide-HACK.patch
deleted file mode 100644
index 4414b21191..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/connectplus-remove-ide-HACK.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: linux-2.6.13/drivers/ide/legacy/ide-cs.c
-===================================================================
---- linux-2.6.13.orig/drivers/ide/legacy/ide-cs.c 2005-09-01 22:43:46.000000000 +0100
-+++ linux-2.6.13/drivers/ide/legacy/ide-cs.c 2005-09-01 22:45:46.000000000 +0100
-@@ -488,7 +488,6 @@
- PCMCIA_DEVICE_PROD_ID123("KODAK Picture Card ", "KODAK ", "V100K", 0x94a0d8f3, 0xe4fc3ea0, 0xe5e7eed4),
- PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
- PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
-- PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
- PCMCIA_DEVICE_NULL,
- };
- MODULE_DEVICE_TABLE(pcmcia, ide_ids);
diff --git a/packages/linux/linux-rp-2.6.19+git/defconfig-akita b/packages/linux/linux-rp-2.6.19+git/defconfig-akita
deleted file mode 100644
index 249466ac87..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/defconfig-akita
+++ /dev/null
@@ -1,1572 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16
-# Thu Mar 23 22:11:12 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_IWMMXT=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-CONFIG_SND_PXA2xx_SOC_SPITZ=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-CONFIG_SND_SOC_WM8750=m
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-
-#
-# Video4Linux support is needed for USB Multimedia device support
-#
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.19+git/defconfig-c7x0 b/packages/linux/linux-rp-2.6.19+git/defconfig-c7x0
deleted file mode 100644
index 1d702f60c0..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/defconfig-c7x0
+++ /dev/null
@@ -1,1608 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16
-# Mon May 22 09:00:01 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-CONFIG_MACH_CORGI=y
-CONFIG_MACH_SHEPHERD=y
-CONFIG_MACH_HUSKY=y
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_PXA_SHARP_C7xx=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_KEYBOARD_CORGI=y
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_CORGI=y
-# CONFIG_LEDS_TOSA is not set
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-CONFIG_FB_W100=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-CONFIG_SND_PXA2xx_SOC_CORGI=m
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_PWC is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.19+git/defconfig-collie b/packages/linux/linux-rp-2.6.19+git/defconfig-collie
deleted file mode 100644
index f488d42d93..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/defconfig-collie
+++ /dev/null
@@ -1,1641 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Tue Jul 4 16:35:35 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_COLLIE=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-
-#
-# Processor Features
-#
-CONFIG_KEXEC=y
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-CONFIG_PCMCIA_SA1100=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-CONFIG_NODES_SHIFT=2
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=32M fbcon=rotate:1 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_USB_IRDA=m
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_SA1100_FIR=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-CONFIG_MTD_OBSOLETE_CHIPS=y
-CONFIG_MTD_SHARP=y
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_SA1100=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_ARLAN is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_MCP=y
-CONFIG_MCP_SA11X0=y
-CONFIG_MCP_UCB1200=y
-# CONFIG_MCP_UCB1200_AUDIO is not set
-CONFIG_MCP_UCB1200_TS=m
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_LOCOMO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_MAESTRO 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
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_FIRMWARE_EDID is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-CONFIG_FB_SA1100=y
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-CONFIG_LOGO_OZ240_CLUT224=y
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-CONFIG_USB_NET_CDC_SUBSET=m
-# CONFIG_USB_ALI_M5632 is not set
-# CONFIG_USB_AN2720 is not set
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_EPSON2888 is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ANYDATA=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OMNINET is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-CONFIG_USB_GADGET_SA1100=y
-CONFIG_USB_SA1100=y
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-CONFIG_USB_FILE_STORAGE_TEST=y
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.19+git/defconfig-hx2000 b/packages/linux/linux-rp-2.6.19+git/defconfig-hx2000
deleted file mode 100644
index 296c462641..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/defconfig-hx2000
+++ /dev/null
@@ -1,1161 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20-rc2
-# Mon Jan 1 01:49:04 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_MACH_HX2750=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-CONFIG_PXA_KEYS=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-CONFIG_PM_DEBUG=y
-# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_TOUCHSCREEN_TSC2101=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-CONFIG_MFD_TSC2101=y
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_HX2750=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
diff --git a/packages/linux/linux-rp-2.6.19+git/defconfig-poodle b/packages/linux/linux-rp-2.6.19+git/defconfig-poodle
deleted file mode 100644
index deacd170f2..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/defconfig-poodle
+++ /dev/null
@@ -1,1655 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Jul 10 23:38:56 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-CONFIG_MACH_POODLE=y
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_EM28XX is not set
-CONFIG_USB_DSBR=m
-CONFIG_VIDEO_USBVIDEO=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-CONFIG_LOGO_OZ240_CLUT224=y
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8731 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8974 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_MAINSTONE_BASEBAND is not set
-# CONFIG_SND_MAINSTONE_BLUETOOTH is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_POODLE=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.19+git/defconfig-qemuarm b/packages/linux/linux-rp-2.6.19+git/defconfig-qemuarm
deleted file mode 100644
index abb6726556..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/defconfig-qemuarm
+++ /dev/null
@@ -1,1193 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Sat Aug 26 22:45:02 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-CONFIG_ARCH_VERSATILE=y
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Versatile platform type
-#
-CONFIG_ARCH_VERSATILE_PB=y
-# CONFIG_MACH_VERSATILE_AB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-# CONFIG_KEXEC is not set
-CONFIG_ARM_VIC=y
-CONFIG_ICST307=y
-
-#
-# Bus support
-#
-CONFIG_ARM_AMBA=y
-CONFIG_PCI=y
-# CONFIG_PCI_DEBUG is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_LEDS=y
-CONFIG_LEDS_TIMER=y
-CONFIG_LEDS_CPU=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_VFP=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_APM is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_AFS_PARTS=y
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_GEOMETRY is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=y
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-CONFIG_SCSI_SYM53C8XX_2=y
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-CONFIG_SCSI_SYM53C8XX_MMIO=y
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_SMC91X=y
-# CONFIG_DM9000 is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-CONFIG_SERIO_AMBAKMI=y
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_AMBA_PL011=y
-CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-# CONFIG_LEDS_CLASS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-# CONFIG_LEDS_TRIGGERS is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-CONFIG_FB_ARMCLCD=y
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_UHCI_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFSD_TCP is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=y
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-# 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_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_ISO8859_1 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_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-rp-2.6.19+git/defconfig-qemux86 b/packages/linux/linux-rp-2.6.19+git/defconfig-qemux86
deleted file mode 100644
index fb66874b90..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/defconfig-qemux86
+++ /dev/null
@@ -1,1566 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Oct 16 19:42:42 2006
-#
-CONFIG_X86_32=y
-CONFIG_SEMAPHORE_SLEEPERS=y
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_DMI=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_CPUSETS is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_VM86=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_LBD=y
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# Processor type and features
-#
-CONFIG_SMP=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_ES7000 is not set
-CONFIG_M386=y
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_X86_PPRO_FENCE=y
-CONFIG_X86_F00F_BUG=y
-CONFIG_X86_INTEL_USERCOPY=y
-# CONFIG_HPET_TIMER is not set
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_NONFATAL=y
-CONFIG_X86_MCE_P4THERMAL=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-CONFIG_IRQBALANCE=y
-# CONFIG_REGPARM is not set
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=250
-# CONFIG_KEXEC is not set
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_HOTPLUG_CPU is not set
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_VIDEO=m
-# CONFIG_ACPI_HOTKEY is not set
-CONFIG_ACPI_FAN=y
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_ASUS is not set
-CONFIG_ACPI_IBM=m
-# CONFIG_ACPI_IBM_DOCK is not set
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-# CONFIG_PCIEPORTBUS is not set
-# CONFIG_PCI_MSI is not set
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=y
-CONFIG_BINFMT_MISC=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=y
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=y
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=y
-CONFIG_PARPORT_PC=y
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=y
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-CONFIG_BLK_DEV_IDECD=y
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-CONFIG_BLK_DEV_CMD640=y
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_RZ1000=y
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-# CONFIG_BLK_DEV_AEC62XX 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_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 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_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-CONFIG_BLK_DEV_PIIX=y
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-CONFIG_SCSI_DPT_I2O=m
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-CONFIG_SCSI_SATA=y
-# CONFIG_SCSI_SATA_AHCI is not set
-# CONFIG_SCSI_SATA_SVW is not set
-CONFIG_SCSI_ATA_PIIX=y
-# CONFIG_SCSI_SATA_MV is not set
-# CONFIG_SCSI_SATA_NV is not set
-# CONFIG_SCSI_PDC_ADMA is not set
-# CONFIG_SCSI_SATA_QSTOR is not set
-# CONFIG_SCSI_SATA_PROMISE is not set
-CONFIG_SCSI_SATA_SX4=m
-# CONFIG_SCSI_SATA_SIL is not set
-# CONFIG_SCSI_SATA_SIL24 is not set
-CONFIG_SCSI_SATA_SIS=m
-# CONFIG_SCSI_SATA_ULI is not set
-# CONFIG_SCSI_SATA_VIA is not set
-# CONFIG_SCSI_SATA_VITESSE is not set
-CONFIG_SCSI_SATA_INTEL_COMBINED=y
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA 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_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-CONFIG_SCSI_IPR=m
-# CONFIG_SCSI_IPR_TRACE is not set
-# CONFIG_SCSI_IPR_DUMP is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_IEEE1394=y
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_OUI_DB is not set
-# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
-# CONFIG_IEEE1394_EXPORT_FULL_API is not set
-
-#
-# Device Drivers
-#
-
-#
-# Texas Instruments PCILynx requires I2C
-#
-CONFIG_IEEE1394_OHCI1394=y
-
-#
-# Protocol Drivers
-#
-# CONFIG_IEEE1394_VIDEO1394 is not set
-# CONFIG_IEEE1394_SBP2 is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-# CONFIG_IEEE1394_DV1394 is not set
-CONFIG_IEEE1394_RAWIO=y
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_LANCE is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-CONFIG_NET_ISA=y
-# CONFIG_E2100 is not set
-# CONFIG_EWRK3 is not set
-# CONFIG_EEXPRESS is not set
-# CONFIG_EEXPRESS_PRO is not set
-# CONFIG_HPLAN_PLUS is not set
-# CONFIG_HPLAN is not set
-# CONFIG_LP486E is not set
-# CONFIG_ETH16I is not set
-CONFIG_NE2000=y
-# CONFIG_ZNET is not set
-# CONFIG_SEEQ8005 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_AC3200 is not set
-# CONFIG_APRICOT is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_CS89x0 is not set
-# CONFIG_DGRS is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-CONFIG_NE2K_PCI=y
-# CONFIG_8139CP is not set
-CONFIG_8139TOO=y
-CONFIG_8139TOO_PIO=y
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_NET_POCKET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-CONFIG_S2IO=m
-# CONFIG_S2IO_NAPI is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-CONFIG_PRINTER=y
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
-# CONFIG_TIPAR is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-CONFIG_AGP=y
-# CONFIG_AGP_ALI is not set
-# CONFIG_AGP_ATI is not set
-# CONFIG_AGP_AMD is not set
-# CONFIG_AGP_AMD64 is not set
-CONFIG_AGP_INTEL=y
-# CONFIG_AGP_NVIDIA is not set
-# CONFIG_AGP_SIS is not set
-# CONFIG_AGP_SWORKS is not set
-# CONFIG_AGP_VIA is not set
-# CONFIG_AGP_EFFICEON is not set
-CONFIG_DRM=y
-# CONFIG_DRM_TDFX is not set
-# CONFIG_DRM_R128 is not set
-# CONFIG_DRM_RADEON is not set
-# CONFIG_DRM_I810 is not set
-# CONFIG_DRM_I830 is not set
-# CONFIG_DRM_I915 is not set
-# CONFIG_DRM_MGA is not set
-# CONFIG_DRM_SIS is not set
-# CONFIG_DRM_VIA is not set
-# CONFIG_DRM_SAVAGE is not set
-# CONFIG_MWAVE is not set
-# CONFIG_CS5535_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-# CONFIG_IBM_ASM is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
-# CONFIG_FB_VESA_STD is not set
-CONFIG_FB_VESA_TNG=y
-CONFIG_FB_VESA_DEFAULT_MODE="640x480-32@60"
-CONFIG_VIDEO_SELECT=y
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_I810 is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_CYBLA is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=y
-CONFIG_SND_AC97_BUS=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ISA devices
-#
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB 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_MIRO is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_WAVEFRONT is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5535AUDIO 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_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR 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_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_USX2Y is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_OHCI_HCD is not set
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGETKIT is not set
-CONFIG_USB_PHIDGETSERVO=m
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-# CONFIG_EDAC is not set
-
-#
-# Real Time Clock
-#
-# CONFIG_RTC_CLASS is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-CONFIG_UDF_FS=y
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-# CONFIG_NFS_V3 is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-# CONFIG_NFSD_V3 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
-# CONFIG_KPROBES is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=15
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_UNWIND_INFO is not set
-CONFIG_EARLY_PRINTK=y
-CONFIG_STACK_BACKTRACE_COLS=2
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-CONFIG_DOUBLEFAULT=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_KTIME_SCALAR=y
diff --git a/packages/linux/linux-rp-2.6.19+git/defconfig-spitz b/packages/linux/linux-rp-2.6.19+git/defconfig-spitz
deleted file mode 100644
index 824fd57aaa..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/defconfig-spitz
+++ /dev/null
@@ -1,1603 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Sun Sep 3 23:29:17 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_IWMMXT=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rw fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-CONFIG_LOGO_OZ640_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-CONFIG_SND_PXA2xx_SOC_SPITZ=m
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-CONFIG_SND_SOC_WM8750=m
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
diff --git a/packages/linux/linux-rp-2.6.19+git/defconfig-tosa b/packages/linux/linux-rp-2.6.19+git/defconfig-tosa
deleted file mode 100644
index 4144e5cf38..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/defconfig-tosa
+++ /dev/null
@@ -1,1608 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-rc5-git5
-# Tue Mar 14 09:05:26 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-CONFIG_MACH_TOSA=y
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-CONFIG_TOSHIBA_TC6393XB=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_TMIO=y
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-CONFIG_KEYBOARD_TOSA=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_CORGI is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_WM97XX=y
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-CONFIG_TOUCHSCREEN_WM9712=y
-# CONFIG_TOUCHSCREEN_WM9713 is not set
-# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TOSA=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_W100 is not set
-CONFIG_FB_TMIO=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_BUS=y
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=y
-CONFIG_SND_PXA2xx_SOC_AC97=y
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_TOSA=y
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-CONFIG_SND_SOC_WM9712=y
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_PWC is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_GENERIC_ALLOCATOR=y
diff --git a/packages/linux/linux-rp-2.6.19+git/hrw-pcmcia-ids-r5.patch b/packages/linux/linux-rp-2.6.19+git/hrw-pcmcia-ids-r5.patch
deleted file mode 100644
index b09acacadd..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/hrw-pcmcia-ids-r5.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
-Few cards informations submitted by OpenZaurus users.
-
-Seagate 8GB microdrive:
- product info: "SEAGATE", "ST1"
- manfid 0x0111, 0x0000
-
-One CF card:
- product info: "SAMSUNG", "04/05/06", "", ""
- manfid : 0x0000, 0x0000
-
-Ridata 8GB Pro 150X Compact Flash Card:
- product info: "SMI VENDOR", "SMI PRODUCT", ""
- manfid: 0x000a, 0x0000
-
- product info: "M-Systems", "CF500", ""
- manfid: 0x000a, 0x0000
-
- product info: "TRANSCEND", "TS4GCF120", ""
- manfid: 0x000a, 0x0000
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
- drivers/ide/legacy/ide-cs.c | 5 +++++
- drivers/net/pcmcia/pcnet_cs.c | 2 ++
- 2 files changed, 7 insertions(+)
-
-Index: linux-2.6.18/drivers/ide/legacy/ide-cs.c
-===================================================================
---- linux-2.6.18.orig/drivers/ide/legacy/ide-cs.c 2006-12-06 00:55:51.000000000 +0000
-+++ linux-2.6.18/drivers/ide/legacy/ide-cs.c 2006-12-06 00:55:55.000000000 +0000
-@@ -398,12 +398,17 @@ static struct pcmcia_device_id ide_ids[]
- PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDE", 0x547e66dc, 0x5c5ab149),
- PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDEII", 0x547e66dc, 0xb3662674),
- PCMCIA_DEVICE_PROD_ID12("LOOKMEET", "CBIDE2 ", 0xe37be2b5, 0x8671043b),
-+ PCMCIA_DEVICE_PROD_ID12("M-Systems", "CF500", 0x7ed2ad87, 0x7a13045c),
- PCMCIA_DEVICE_PROD_ID2("NinjaATA-", 0xebe0bd79),
- PCMCIA_DEVICE_PROD_ID12("PCMCIA", "CD-ROM", 0x281f1c5d, 0x66536591),
- PCMCIA_DEVICE_PROD_ID12("PCMCIA", "PnPIDE", 0x281f1c5d, 0x0c694728),
- PCMCIA_DEVICE_PROD_ID12("SHUTTLE TECHNOLOGY LTD.", "PCCARD-IDE/ATAPI Adapter", 0x4a3f0ba0, 0x322560e1),
-+ PCMCIA_DEVICE_PROD_ID12("SEAGATE", "ST1", 0x87c1b330, 0xe1f30883),
-+ PCMCIA_DEVICE_PROD_ID12("SAMSUNG", "04/05/06", 0x43d74cb4, 0x6a22777d),
-+ PCMCIA_DEVICE_PROD_ID12("SMI VENDOR", "SMI PRODUCT", 0x30896c92, 0x703cc5f6),
- PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "MK2001MPL", 0xb4585a1a, 0x3489e003),
- PCMCIA_DEVICE_PROD_ID1("TRANSCEND 512M ", 0xd0909443),
-+ PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF120", 0x709b1bf1, 0xf54a91c8),
- PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852),
- PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
- PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
-Index: linux-2.6.18/drivers/net/pcmcia/pcnet_cs.c
-===================================================================
---- linux-2.6.18.orig/drivers/net/pcmcia/pcnet_cs.c 2006-09-20 04:42:06.000000000 +0100
-+++ linux-2.6.18/drivers/net/pcmcia/pcnet_cs.c 2006-12-06 00:57:27.000000000 +0000
-@@ -1770,6 +1770,8 @@ static struct pcmcia_device_id pcnet_ids
- PCMCIA_DEVICE_CIS_PROD_ID12("TAMARACK", "Ethernet", 0xcf434fba, 0x00b2e941, "tamarack.cis"),
- PCMCIA_DEVICE_PROD_ID123("Fast Ethernet", "CF Size PC Card", "1.0",
- 0xb4be14e3, 0x43ac239b, 0x0877b627),
-+ PCMCIA_DEVICE_PROD_ID123("Ethernet", "CF Size PC Card", "1.0",
-+ 0x00b2e941, 0x43ac239b, 0x0877b627),
- PCMCIA_DEVICE_NULL
- };
- MODULE_DEVICE_TABLE(pcmcia, pcnet_ids);
diff --git a/packages/linux/linux-rp-2.6.19+git/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.19+git/pxa-serial-hack.patch
deleted file mode 100644
index 9ece71331a..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/pxa-serial-hack.patch
+++ /dev/null
@@ -1,80 +0,0 @@
----
- drivers/serial/8250.c | 5 +++++
- drivers/serial/serial_core.c | 1 +
- drivers/serial/serial_cs.c | 12 +++++++++---
- include/linux/serial_core.h | 1 +
- 4 files changed, 16 insertions(+), 3 deletions(-)
-
-Index: git/drivers/serial/8250.c
-===================================================================
---- git.orig/drivers/serial/8250.c 2006-10-31 16:29:50.000000000 +0000
-+++ git/drivers/serial/8250.c 2006-10-31 16:29:53.000000000 +0000
-@@ -2429,7 +2429,12 @@ static struct uart_driver serial8250_reg
- .driver_name = "serial",
- .dev_name = "ttyS",
- .major = TTY_MAJOR,
-+#ifdef CONFIG_SERIAL_PXA
-+ .minor = 64 + 3,
-+ .name_base = 3,
-+#else
- .minor = 64,
-+#endif
- .nr = UART_NR,
- .cons = SERIAL8250_CONSOLE,
- };
-Index: git/drivers/serial/serial_core.c
-===================================================================
---- git.orig/drivers/serial/serial_core.c 2006-10-31 16:09:17.000000000 +0000
-+++ git/drivers/serial/serial_core.c 2006-10-31 16:29:53.000000000 +0000
-@@ -2183,6 +2183,7 @@ int uart_register_driver(struct uart_dri
- normal->owner = drv->owner;
- normal->driver_name = drv->driver_name;
- normal->name = drv->dev_name;
-+ normal->name_base = drv->name_base;
- normal->major = drv->major;
- normal->minor_start = drv->minor;
- normal->type = TTY_DRIVER_TYPE_SERIAL;
-Index: git/include/linux/serial_core.h
-===================================================================
---- git.orig/include/linux/serial_core.h 2006-10-31 16:09:45.000000000 +0000
-+++ git/include/linux/serial_core.h 2006-10-31 16:30:36.000000000 +0000
-@@ -339,6 +339,7 @@ struct uart_driver {
- struct module *owner;
- const char *driver_name;
- const char *dev_name;
-+ int name_base;
- int major;
- int minor;
- int nr;
-Index: git/drivers/serial/serial_cs.c
-===================================================================
---- git.orig/drivers/serial/serial_cs.c 2006-10-31 16:09:17.000000000 +0000
-+++ git/drivers/serial/serial_cs.c 2006-10-31 16:29:53.000000000 +0000
-@@ -390,7 +390,7 @@ static int setup_serial(struct pcmcia_de
- kio_addr_t iobase, int irq)
- {
- struct uart_port port;
-- int line;
-+ int line, linestart;
-
- memset(&port, 0, sizeof (struct uart_port));
- port.iobase = iobase;
-@@ -411,10 +411,16 @@ static int setup_serial(struct pcmcia_de
- return -EINVAL;
- }
-
-+#if CONFIG_SERIAL_PXA
-+ linestart = 3;
-+#else
-+ linestart = 0;
-+#endif
-+
- info->line[info->ndev] = line;
-- sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
-+ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line+linestart);
- info->node[info->ndev].major = TTY_MAJOR;
-- info->node[info->ndev].minor = 0x40 + line;
-+ info->node[info->ndev].minor = 0x40 + line + linestart;
- if (info->ndev > 0)
- info->node[info->ndev - 1].next = &info->node[info->ndev];
- info->ndev++;
diff --git a/packages/linux/linux-rp-2.6.19+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.19+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
deleted file mode 100644
index 18bf4268fc..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-
-From: Petr Vandrovec <vandrove@vc.cvut.cz>
-
-Patch below adds support for using different prescaler than 16 for 16c950
-chips. This is needed for using Fujitsu-Siemens Connect2Air compact-flash
-card, which comes (apparently) with 806kHz clocks, and so you have to
-program prescaler for division by 7, and DLAB to 1, to get 115200Bd.
-
-To get card properly running you also have to add lines below to
-/etc/pcmcia/serial.opts so kernel knows that base speed is not 115200 but
-50400 (50400 * 16 = 806400; 806400 / 7 = 115200). As I've found no code
-specifying baud_rate in serial_cs, I assume that specifying it in
-serial.opts is right way to do this type of things.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER maximum possible
-baud rate passed to uart code was uartclk / 16 while correct value for
-these devices (and for 16c950) is uartclk / 4.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER devices with
-baud_rate 19200 or 9600 spd_cust did not work correctly. Not that such
-devices exist, but we should not ignore spd_cust, user probably knows why
-he asked for spd_cust.
-
-serial.opts:
-
-case "$MANFID-$FUNCID-$PRODID_1-$PRODID_2-$PRODID_3-$PRODID_4" in
-'0279,950b-2-GPRS Modem---')
- SERIAL_OPTS="baud_base 50400"
- ;;
-esac
-
-Cc: David Woodhouse <dwmw2@infradead.org>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
----
-
- drivers/serial/8250.c | 82 +++++++++++++++++++++++++++++++++++++++-----------
- 1 files changed, 64 insertions(+), 18 deletions(-)
-
-diff -puN drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver drivers/serial/8250.c
---- devel/drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver 2005-09-12 03:34:57.000000000 -0700
-+++ devel-akpm/drivers/serial/8250.c 2005-09-12 03:34:57.000000000 -0700
-@@ -1653,24 +1653,58 @@ static void serial8250_shutdown(struct u
- serial_unlink_irq_chain(up);
- }
-
--static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud)
-+static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud,
-+ unsigned int *prescaler)
- {
-- unsigned int quot;
--
-- /*
-- * Handle magic divisors for baud rates above baud_base on
-- * SMSC SuperIO chips.
-+ /*
-+ * Use special handling only if user did not supply its own divider.
-+ * spd_cust is defined in terms of baud_base, so always use default
-+ * prescaler when spd_cust is requested.
- */
-- if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/4))
-- quot = 0x8001;
-- else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/8))
-- quot = 0x8002;
-- else
-- quot = uart_get_divisor(port, baud);
-
-- return quot;
-+ *prescaler = 16;
-+ if (baud != 38400 || (port->flags & UPF_SPD_MASK) != UPF_SPD_CUST) {
-+ unsigned int quot = port->uartclk / baud;
-+
-+ /*
-+ * Handle magic divisors for baud rates above baud_base on
-+ * SMSC SuperIO chips.
-+ */
-+ if (port->flags & UPF_MAGIC_MULTIPLIER) {
-+ if (quot == 4) {
-+ return 0x8001;
-+ } else if (quot == 8) {
-+ return 0x8002;
-+ }
-+ }
-+ if (port->type == PORT_16C950) {
-+ /*
-+ * This computes TCR value (4 to 16), not CPR value (which can
-+ * be between 1.000 and 31.875) - chip I have uses XTAL of
-+ * 806400Hz, and so a division by 7 is required to get 115200Bd.
-+ * I'm leaving CPR disabled for now, until someone will
-+ * hit even more exotic XTAL (it is needed to get 500kbps
-+ * or 1000kbps from 18.432MHz XTAL, but I have no device
-+ * which would benefit from doing that).
-+ *
-+ * If we can use divide by 16, use it. Otherwise look for
-+ * better prescaler, from 15 to 4. If quotient cannot
-+ * be divided by any integer value between 4 and 15, use 4.
-+ */
-+ if (quot & 0x0F) {
-+ unsigned int div;
-+
-+ for (div = 15; div > 4; div--) {
-+ if (quot % div == 0) {
-+ break;
-+ }
-+ }
-+ *prescaler = div;
-+ return quot / div;
-+ }
-+ }
-+ }
-+ return uart_get_divisor(port, baud);
- }
-
- static void
-@@ -1680,7 +1714,7 @@ serial8250_set_termios(struct uart_port
- struct uart_8250_port *up = (struct uart_8250_port *)port;
- unsigned char cval, fcr = 0;
- unsigned long flags;
-- unsigned int baud, quot;
-+ unsigned int baud, quot, prescaler;
-
- switch (termios->c_cflag & CSIZE) {
- case CS5:
-@@ -1712,8 +1746,13 @@ serial8250_set_termios(struct uart_port
- /*
- * Ask the core to calculate the divisor for us.
- */
-- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-- quot = serial8250_get_divisor(port, baud);
-+
-+ if (port->type == PORT_16C950 || (port->flags & UPF_MAGIC_MULTIPLIER)) {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/4);
-+ } else {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-+ }
-+ quot = serial8250_get_divisor(port, baud, &prescaler);
-
- /*
- * Oxford Semi 952 rev B workaround
-@@ -1817,6 +1856,13 @@ serial8250_set_termios(struct uart_port
- serial_outp(up, UART_DLM, quot >> 8); /* MS of divisor */
-
- /*
-+ * Program prescaler for 16C950 chips.
-+ */
-+ if (up->port.type == PORT_16C950) {
-+ serial_icr_write(up, UART_TCR, prescaler == 16 ? 0 : prescaler);
-+ }
-+
-+ /*
- * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
- * is written without DLAB set, this mode will be disabled.
- */
-_
diff --git a/packages/linux/linux-rp-2.6.19+git/sharpsl-pm-postresume-r1.patch b/packages/linux/linux-rp-2.6.19+git/sharpsl-pm-postresume-r1.patch
deleted file mode 100644
index 409daf03e6..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/sharpsl-pm-postresume-r1.patch
+++ /dev/null
@@ -1,30 +0,0 @@
- arch/arm/common/sharpsl_pm.c | 3 +++
- include/asm-arm/hardware/sharpsl_pm.h | 1 +
- 2 files changed, 4 insertions(+)
-
-Index: git/include/asm-arm/hardware/sharpsl_pm.h
-===================================================================
---- git.orig/include/asm-arm/hardware/sharpsl_pm.h 2006-10-31 16:09:33.000000000 +0000
-+++ git/include/asm-arm/hardware/sharpsl_pm.h 2006-11-07 22:08:41.000000000 +0000
-@@ -26,6 +26,7 @@ struct sharpsl_charger_machinfo {
- void (*presuspend)(void);
- void (*postsuspend)(void);
- void (*earlyresume)(void);
-+ void (*postresume)(void);
- unsigned long (*read_devdata)(int);
- #define SHARPSL_BATT_VOLT 1
- #define SHARPSL_BATT_TEMP 2
-Index: git/arch/arm/common/sharpsl_pm.c
-===================================================================
---- git.orig/arch/arm/common/sharpsl_pm.c 2006-11-07 22:03:48.000000000 +0000
-+++ git/arch/arm/common/sharpsl_pm.c 2006-11-07 22:04:20.000000000 +0000
-@@ -584,6 +584,9 @@ static int corgi_pxa_pm_enter(suspend_st
- if (sharpsl_pm.machinfo->earlyresume)
- sharpsl_pm.machinfo->earlyresume();
-
-+ if (sharpsl_pm.machinfo->postresume)
-+ sharpsl_pm.machinfo->postresume();
-+
- dev_dbg(sharpsl_pm.dev, "SharpSL resuming...\n");
-
- return 0;
diff --git a/packages/linux/linux-rp-2.6.19+git/squashfs3.0-2.6.15.patch b/packages/linux/linux-rp-2.6.19+git/squashfs3.0-2.6.15.patch
deleted file mode 100644
index 405d4ec124..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/squashfs3.0-2.6.15.patch
+++ /dev/null
@@ -1,4191 +0,0 @@
- fs/Kconfig | 65 +
- fs/Makefile | 1
- fs/squashfs/Makefile | 7
- fs/squashfs/inode.c | 2124 +++++++++++++++++++++++++++++++++++++++++
- fs/squashfs/squashfs.h | 86 +
- fs/squashfs/squashfs2_0.c | 757 ++++++++++++++
- include/linux/squashfs_fs.h | 911 +++++++++++++++++
- include/linux/squashfs_fs_i.h | 45
- include/linux/squashfs_fs_sb.h | 74 +
- init/do_mounts_rd.c | 13
- 10 files changed, 4083 insertions(+)
-
-Index: git/fs/Kconfig
-===================================================================
---- git.orig/fs/Kconfig 2006-10-31 16:09:22.000000000 +0000
-+++ git/fs/Kconfig 2006-10-31 21:26:45.000000000 +0000
-@@ -1407,6 +1407,71 @@ config CRAMFS
-
- If unsure, say N.
-
-+config SQUASHFS
-+ tristate "SquashFS 3.0 - Squashed file system support"
-+ select ZLIB_INFLATE
-+ help
-+ Saying Y here includes support for SquashFS 3.0 (a Compressed Read-Only File
-+ System). Squashfs is a highly compressed read-only filesystem for Linux.
-+ It uses zlib compression to compress both files, inodes and directories.
-+ Inodes in the system are very small and all blocks are packed to minimise
-+ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
-+ SquashFS 3.0 supports 64 bit filesystems and files (larger than 4GB), full
-+ uid/gid information, hard links and timestamps.
-+
-+ Squashfs is intended for general read-only filesystem use, for archival
-+ use (i.e. in cases where a .tar.gz file may be used), and in embedded
-+ systems where low overhead is needed. Further information and filesystem tools
-+ are available from http://squashfs.sourceforge.net.
-+
-+ If you want to compile this as a module ( = code which can be
-+ inserted in and removed from the running kernel whenever you want),
-+ say M here and read <file:Documentation/modules.txt>. The module
-+ will be called squashfs. Note that the root file system (the one
-+ containing the directory /) cannot be compiled as a module.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_EMBEDDED
-+
-+ bool "Additional options for memory-constrained systems"
-+ depends on SQUASHFS
-+ default n
-+ help
-+ Saying Y here allows you to specify cache sizes and how Squashfs
-+ allocates memory. This is only intended for memory constrained
-+ systems.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_FRAGMENT_CACHE_SIZE
-+ int "Number of fragments cached" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default "3"
-+ help
-+ By default SquashFS caches the last 3 fragments read from
-+ the filesystem. Increasing this amount may mean SquashFS
-+ has to re-read fragments less often from disk, at the expense
-+ of extra system memory. Decreasing this amount will mean
-+ SquashFS uses less memory at the expense of extra reads from disk.
-+
-+ Note there must be at least one cached fragment. Anything
-+ much more than three will probably not make much difference.
-+
-+config SQUASHFS_VMALLOC
-+ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default n
-+ help
-+ By default SquashFS uses kmalloc to obtain fragment cache memory.
-+ Kmalloc memory is the standard kernel allocator, but it can fail
-+ on memory constrained systems. Because of the way Vmalloc works,
-+ Vmalloc can succeed when kmalloc fails. Specifying this option
-+ will make SquashFS always use Vmalloc to allocate the
-+ fragment cache memory.
-+
-+ If unsure, say N.
-+
- config VXFS_FS
- tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
- depends on BLOCK
-Index: git/fs/Makefile
-===================================================================
---- git.orig/fs/Makefile 2006-10-31 16:09:22.000000000 +0000
-+++ git/fs/Makefile 2006-10-31 21:26:45.000000000 +0000
-@@ -67,6 +67,7 @@ obj-$(CONFIG_JBD) += jbd/
- obj-$(CONFIG_JBD2) += jbd2/
- obj-$(CONFIG_EXT2_FS) += ext2/
- obj-$(CONFIG_CRAMFS) += cramfs/
-+obj-$(CONFIG_SQUASHFS) += squashfs/
- obj-$(CONFIG_RAMFS) += ramfs/
- obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
- obj-$(CONFIG_CODA_FS) += coda/
-Index: git/fs/squashfs/inode.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/inode.c 2006-11-01 18:01:32.000000000 +0000
-@@ -0,0 +1,2124 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * inode.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+
-+static void squashfs_put_super(struct super_block *);
-+static int squashfs_statfs(struct dentry *, struct kstatfs *);
-+static int squashfs_symlink_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage4K(struct file *file, struct page *page);
-+static int squashfs_readdir(struct file *, void *, filldir_t);
-+static struct inode *squashfs_alloc_inode(struct super_block *sb);
-+static void squashfs_destroy_inode(struct inode *inode);
-+static int init_inodecache(void);
-+static void destroy_inodecache(void);
-+static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
-+ struct nameidata *);
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize);
-+static int squashfs_get_sb(struct file_system_type *, int,
-+ const char *, void *, struct vfsmount *);
-+
-+
-+static z_stream stream;
-+
-+static struct file_system_type squashfs_fs_type = {
-+ .owner = THIS_MODULE,
-+ .name = "squashfs",
-+ .get_sb = squashfs_get_sb,
-+ .kill_sb = kill_block_super,
-+ .fs_flags = FS_REQUIRES_DEV
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static struct super_operations squashfs_ops = {
-+ .alloc_inode = squashfs_alloc_inode,
-+ .destroy_inode = squashfs_destroy_inode,
-+ .statfs = squashfs_statfs,
-+ .put_super = squashfs_put_super,
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
-+ .readpage = squashfs_symlink_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops = {
-+ .readpage = squashfs_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
-+ .readpage = squashfs_readpage4K
-+};
-+
-+static struct file_operations squashfs_dir_ops = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir
-+};
-+
-+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
-+ .lookup = squashfs_lookup
-+};
-+
-+
-+static struct buffer_head *get_block_length(struct super_block *s,
-+ int *cur_index, int *offset, int *c_byte)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned short temp;
-+ struct buffer_head *bh;
-+
-+ if (!(bh = sb_bread(s, *cur_index)))
-+ goto out;
-+
-+ if (msblk->devblksize - *offset == 1) {
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ else
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ bh->b_data);
-+ else
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ bh->b_data);
-+ *c_byte = temp;
-+ *offset = 1;
-+ } else {
-+ if (msblk->swap) {
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ } else {
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ }
-+ *c_byte = temp;
-+ *offset += 2;
-+ }
-+
-+ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
-+ if (*offset == msblk->devblksize) {
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ *offset = 0;
-+ }
-+ if (*((unsigned char *) (bh->b_data + *offset)) !=
-+ SQUASHFS_MARKER_BYTE) {
-+ ERROR("Metadata block marker corrupt @ %x\n",
-+ *cur_index);
-+ brelse(bh);
-+ goto out;
-+ }
-+ (*offset)++;
-+ }
-+ return bh;
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
-+ msblk->devblksize_log2) + 2];
-+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
-+ unsigned int cur_index = index >> msblk->devblksize_log2;
-+ int bytes, avail_bytes, b = 0, k;
-+ char *c_buffer;
-+ unsigned int compressed;
-+ unsigned int c_byte = length;
-+
-+ if (c_byte) {
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ if (!(bh[0] = sb_getblk(s, cur_index)))
-+ goto block_release;
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b, bh);
-+ } else {
-+ if (!(bh[0] = get_block_length(s, &cur_index, &offset,
-+ &c_byte)))
-+ goto read_failure;
-+
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b - 1, bh + 1);
-+ }
-+
-+ if (compressed)
-+ down(&msblk->read_data_mutex);
-+
-+ for (bytes = 0, k = 0; k < b; k++) {
-+ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
-+ msblk->devblksize - offset :
-+ c_byte - bytes;
-+ wait_on_buffer(bh[k]);
-+ if (!buffer_uptodate(bh[k]))
-+ goto block_release;
-+ memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
-+ bytes += avail_bytes;
-+ offset = 0;
-+ brelse(bh[k]);
-+ }
-+
-+ /*
-+ * uncompress block
-+ */
-+ if (compressed) {
-+ int zlib_err;
-+
-+ stream.next_in = c_buffer;
-+ stream.avail_in = c_byte;
-+ stream.next_out = buffer;
-+ stream.avail_out = msblk->read_size;
-+
-+ if (((zlib_err = zlib_inflateInit(&stream)) != Z_OK) ||
-+ ((zlib_err = zlib_inflate(&stream, Z_FINISH))
-+ != Z_STREAM_END) || ((zlib_err =
-+ zlib_inflateEnd(&stream)) != Z_OK)) {
-+ ERROR("zlib_fs returned unexpected result 0x%x\n",
-+ zlib_err);
-+ bytes = 0;
-+ } else
-+ bytes = stream.total_out;
-+
-+ up(&msblk->read_data_mutex);
-+ }
-+
-+ if (next_index)
-+ *next_index = index + c_byte + (length ? 0 :
-+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
-+ ? 3 : 2));
-+ return bytes;
-+
-+block_release:
-+ while (--b >= 0)
-+ brelse(bh[b]);
-+
-+read_failure:
-+ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ int n, i, bytes, return_length = length;
-+ long long next_index;
-+
-+ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
-+
-+ while ( 1 ) {
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (msblk->block_cache[i].block == block)
-+ break;
-+
-+ down(&msblk->block_cache_mutex);
-+
-+ if (i == SQUASHFS_CACHED_BLKS) {
-+ /* read inode header block */
-+ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
-+ n ; n --, i = (i + 1) %
-+ SQUASHFS_CACHED_BLKS)
-+ if (msblk->block_cache[i].block !=
-+ SQUASHFS_USED_BLK)
-+ break;
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->waitq, &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->block_cache_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->waitq, &wait);
-+ continue;
-+ }
-+ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
-+
-+ if (msblk->block_cache[i].block ==
-+ SQUASHFS_INVALID_BLK) {
-+ if (!(msblk->block_cache[i].data =
-+ kmalloc(SQUASHFS_METADATA_SIZE,
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate cache"
-+ "block\n");
-+ up(&msblk->block_cache_mutex);
-+ goto out;
-+ }
-+ }
-+
-+ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
-+ up(&msblk->block_cache_mutex);
-+
-+ if (!(msblk->block_cache[i].length =
-+ squashfs_read_data(s,
-+ msblk->block_cache[i].data,
-+ block, 0, &next_index))) {
-+ ERROR("Unable to read cache block [%llx:%x]\n",
-+ block, offset);
-+ goto out;
-+ }
-+
-+ down(&msblk->block_cache_mutex);
-+ wake_up(&msblk->waitq);
-+ msblk->block_cache[i].block = block;
-+ msblk->block_cache[i].next_index = next_index;
-+ TRACE("Read cache block [%llx:%x]\n", block, offset);
-+ }
-+
-+ if (msblk->block_cache[i].block != block) {
-+ up(&msblk->block_cache_mutex);
-+ continue;
-+ }
-+
-+ if ((bytes = msblk->block_cache[i].length - offset) >= length) {
-+ if (buffer)
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, length);
-+ if (msblk->block_cache[i].length - offset == length) {
-+ *next_block = msblk->block_cache[i].next_index;
-+ *next_offset = 0;
-+ } else {
-+ *next_block = block;
-+ *next_offset = offset + length;
-+ }
-+ up(&msblk->block_cache_mutex);
-+ goto finish;
-+ } else {
-+ if (buffer) {
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, bytes);
-+ buffer += bytes;
-+ }
-+ block = msblk->block_cache[i].next_index;
-+ up(&msblk->block_cache_mutex);
-+ length -= bytes;
-+ offset = 0;
-+ }
-+ }
-+
-+finish:
-+ return return_length;
-+out:
-+ return 0;
-+}
-+
-+
-+static int get_fragment_location(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
-+ struct squashfs_fragment_entry fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment)
-+{
-+ down(&msblk->fragment_mutex);
-+ fragment->locked --;
-+ wake_up(&msblk->fragment_wait_queue);
-+ up(&msblk->fragment_mutex);
-+}
-+
-+
-+SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length)
-+{
-+ int i, n, nf;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+
-+ while ( 1 ) {
-+ down(&msblk->fragment_mutex);
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
-+ msblk->fragment[i].block != start_block; i++);
-+
-+ if (i == SQUASHFS_CACHED_FRAGMENTS) {
-+ nf = (msblk->next_fragment + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS;
-+ for (i = msblk->next_fragment, n =
-+ SQUASHFS_CACHED_FRAGMENTS; n &&
-+ msblk->fragment[i].locked; n--, i = (i + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS);
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->fragment_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ continue;
-+ }
-+ msblk->next_fragment = nf;
-+
-+ if (msblk->fragment[i].data == NULL)
-+ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC
-+ (SQUASHFS_FILE_MAX_SIZE))) {
-+ ERROR("Failed to allocate fragment "
-+ "cache block\n");
-+ up(&msblk->fragment_mutex);
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].locked = 1;
-+ up(&msblk->fragment_mutex);
-+
-+ if (!(msblk->fragment[i].length = squashfs_read_data(s,
-+ msblk->fragment[i].data,
-+ start_block, length, NULL))) {
-+ ERROR("Unable to read fragment cache block "
-+ "[%llx]\n", start_block);
-+ msblk->fragment[i].locked = 0;
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = start_block;
-+ TRACE("New fragment %d, start block %lld, locked %d\n",
-+ i, msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ msblk->fragment[i].locked++;
-+ up(&msblk->fragment_mutex);
-+ TRACE("Got fragment %d, start block %lld, locked %d\n", i,
-+ msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ return &msblk->fragment[i];
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header *inodeb)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = inodeb->inode_number;
-+ i->i_mtime.tv_sec = inodeb->mtime;
-+ i->i_atime.tv_sec = inodeb->mtime;
-+ i->i_ctime.tv_sec = inodeb->mtime;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header id, sid;
-+ struct squashfs_base_inode_header *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_reg_inode_header *inodep = &id.reg;
-+ struct squashfs_reg_inode_header *sinodep = &sid.reg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = 1;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_LREG_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_lreg_inode_header *inodep = &id.lreg;
-+ struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header *inodep = &id.dir;
-+ struct squashfs_dir_inode_header *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header *inodep = &id.dev;
-+ struct squashfs_dev_inode_header *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ struct squashfs_ipc_inode_header *inodep = &id.ipc;
-+ struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int read_fragment_index_table(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ /* Allocate fragment index table */
-+ if (!(msblk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ long long fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
-+ &msblk->fragment_index[i], 1);
-+ msblk->fragment_index[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget;
-+ msblk->read_blocklist = read_blocklist;
-+ msblk->read_fragment_index_table = read_fragment_index_table;
-+
-+ if (sblk->s_major == 1) {
-+ if (!squashfs_1_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 1.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if (sblk->s_major == 2) {
-+ if (!squashfs_2_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 2.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
-+ SQUASHFS_MINOR) {
-+ SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
-+ "filesystem\n", sblk->s_major, sblk->s_minor);
-+ SERROR("Please update your kernel\n");
-+ return 0;
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int squashfs_fill_super(struct super_block *s, void *data, int silent)
-+{
-+ struct squashfs_sb_info *msblk;
-+ struct squashfs_super_block *sblk;
-+ int i;
-+ char b[BDEVNAME_SIZE];
-+ struct inode *root;
-+
-+ TRACE("Entered squashfs_read_superblock\n");
-+
-+ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info),
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate superblock\n");
-+ goto failure;
-+ }
-+ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
-+ msblk = s->s_fs_info;
-+ sblk = &msblk->sblk;
-+
-+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
-+ msblk->devblksize_log2 = ffz(~msblk->devblksize);
-+
-+ init_MUTEX(&msblk->read_data_mutex);
-+ init_MUTEX(&msblk->read_page_mutex);
-+ init_MUTEX(&msblk->block_cache_mutex);
-+ init_MUTEX(&msblk->fragment_mutex);
-+ init_MUTEX(&msblk->meta_index_mutex);
-+
-+ init_waitqueue_head(&msblk->waitq);
-+ init_waitqueue_head(&msblk->fragment_wait_queue);
-+
-+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
-+ sizeof(struct squashfs_super_block) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ SERROR("unable to read superblock\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Check it is a SQUASHFS superblock */
-+ msblk->swap = 0;
-+ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
-+ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
-+ struct squashfs_super_block ssblk;
-+
-+ WARNING("Mounting a different endian SQUASHFS "
-+ "filesystem on %s\n", bdevname(s->s_bdev, b));
-+
-+ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
-+ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
-+ msblk->swap = 1;
-+ } else {
-+ SERROR("Can't find a SQUASHFS superblock on %s\n",
-+ bdevname(s->s_bdev, b));
-+ goto failed_mount;
-+ }
-+ }
-+
-+ /* Check the MAJOR & MINOR versions */
-+ if(!supported_squashfs_filesystem(msblk, silent))
-+ goto failed_mount;
-+
-+ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
-+ TRACE("Inodes are %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_INODES
-+ (sblk->flags) ? "un" : "");
-+ TRACE("Data is %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
-+ ? "un" : "");
-+ TRACE("Check data is %s present in the filesystem\n",
-+ SQUASHFS_CHECK_DATA(sblk->flags) ?
-+ "" : "not");
-+ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
-+ TRACE("Block size %d\n", sblk->block_size);
-+ TRACE("Number of inodes %d\n", sblk->inodes);
-+ if (sblk->s_major > 1)
-+ TRACE("Number of fragments %d\n", sblk->fragments);
-+ TRACE("Number of uids %d\n", sblk->no_uids);
-+ TRACE("Number of gids %d\n", sblk->no_guids);
-+ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
-+ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
-+ if (sblk->s_major > 1)
-+ TRACE("sblk->fragment_table_start %llx\n",
-+ sblk->fragment_table_start);
-+ TRACE("sblk->uid_start %llx\n", sblk->uid_start);
-+
-+ s->s_flags |= MS_RDONLY;
-+ s->s_op = &squashfs_ops;
-+
-+ /* Init inode_table block pointer array */
-+ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
-+ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+
-+ msblk->next_cache = 0;
-+
-+ /* Allocate read_data block */
-+ msblk->read_size = (sblk->block_size < SQUASHFS_METADATA_SIZE) ?
-+ SQUASHFS_METADATA_SIZE :
-+ sblk->block_size;
-+
-+ if (!(msblk->read_data = kmalloc(msblk->read_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_data block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate read_page block */
-+ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_page block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate uid and gid tables */
-+ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ goto failed_mount;
-+ }
-+ msblk->guid = msblk->uid + sblk->no_uids;
-+
-+ if (msblk->swap) {
-+ unsigned int suid[sblk->no_uids + sblk->no_guids];
-+
-+ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
-+ sblk->no_guids), (sizeof(unsigned int) * 8));
-+ } else
-+ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+
-+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
-+ goto allocate_root;
-+
-+ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
-+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate fragment block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
-+ msblk->fragment[i].locked = 0;
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].data = NULL;
-+ }
-+
-+ msblk->next_fragment = 0;
-+
-+ /* Allocate fragment index table */
-+ if (msblk->read_fragment_index_table(s) == 0)
-+ goto failed_mount;
-+
-+allocate_root:
-+ if ((root = (msblk->iget)(s, sblk->root_inode)) == NULL)
-+ goto failed_mount;
-+
-+ if ((s->s_root = d_alloc_root(root)) == NULL) {
-+ ERROR("Root inode create failed\n");
-+ iput(root);
-+ goto failed_mount;
-+ }
-+
-+ TRACE("Leaving squashfs_read_super\n");
-+ return 0;
-+
-+failed_mount:
-+ kfree(msblk->fragment_index);
-+ kfree(msblk->fragment);
-+ kfree(msblk->uid);
-+ kfree(msblk->read_page);
-+ kfree(msblk->read_data);
-+ kfree(msblk->block_cache);
-+ kfree(msblk->fragment_index_2);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ return -EINVAL;
-+
-+failure:
-+ return -ENOMEM;
-+}
-+
-+
-+static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf)
-+{
-+ struct super_block *s = dentry->d_sb;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ TRACE("Entered squashfs_statfs\n");
-+
-+ buf->f_type = SQUASHFS_MAGIC;
-+ buf->f_bsize = sblk->block_size;
-+ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
-+ buf->f_bfree = buf->f_bavail = 0;
-+ buf->f_files = sblk->inodes;
-+ buf->f_ffree = 0;
-+ buf->f_namelen = SQUASHFS_NAME_LEN;
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_symlink_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ int index = page->index << PAGE_CACHE_SHIFT, length, bytes;
-+ long long block = SQUASHFS_I(inode)->start_block;
-+ int offset = SQUASHFS_I(inode)->offset;
-+ void *pageaddr = kmap(page);
-+
-+ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
-+ "%llx, offset %x\n", page->index,
-+ SQUASHFS_I(inode)->start_block,
-+ SQUASHFS_I(inode)->offset);
-+
-+ for (length = 0; length < index; length += bytes) {
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL,
-+ block, offset, PAGE_CACHE_SIZE, &block,
-+ &offset))) {
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block,
-+ offset);
-+ goto skip_read;
-+ }
-+ }
-+
-+ if (length != index) {
-+ ERROR("(squashfs_symlink_readpage) length != index\n");
-+ bytes = 0;
-+ goto skip_read;
-+ }
-+
-+ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE :
-+ i_size_read(inode) - length;
-+
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block,
-+ offset, bytes, &block, &offset)))
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
-+{
-+ struct meta_index *meta = NULL;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
-+
-+ if(msblk->meta_index == NULL)
-+ goto not_allocated;
-+
-+ for (i = 0; i < SQUASHFS_META_NUMBER; i ++)
-+ if (msblk->meta_index[i].inode_number == inode->i_ino &&
-+ msblk->meta_index[i].offset >= offset &&
-+ msblk->meta_index[i].offset <= index &&
-+ msblk->meta_index[i].locked == 0) {
-+ TRACE("locate_meta_index: entry %d, offset %d\n", i,
-+ msblk->meta_index[i].offset);
-+ meta = &msblk->meta_index[i];
-+ offset = meta->offset;
-+ }
-+
-+ if (meta)
-+ meta->locked = 1;
-+
-+not_allocated:
-+ up(&msblk->meta_index_mutex);
-+
-+ return meta;
-+}
-+
-+
-+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct meta_index *meta = NULL;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
-+
-+ if(msblk->meta_index == NULL) {
-+ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) *
-+ SQUASHFS_META_NUMBER, GFP_KERNEL))) {
-+ ERROR("Failed to allocate meta_index\n");
-+ goto failed;
-+ }
-+ for(i = 0; i < SQUASHFS_META_NUMBER; i++) {
-+ msblk->meta_index[i].inode_number = 0;
-+ msblk->meta_index[i].locked = 0;
-+ }
-+ msblk->next_meta_index = 0;
-+ }
-+
-+ for(i = SQUASHFS_META_NUMBER; i &&
-+ msblk->meta_index[msblk->next_meta_index].locked; i --)
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ if(i == 0) {
-+ TRACE("empty_meta_index: failed!\n");
-+ goto failed;
-+ }
-+
-+ TRACE("empty_meta_index: returned meta entry %d, %p\n",
-+ msblk->next_meta_index,
-+ &msblk->meta_index[msblk->next_meta_index]);
-+
-+ meta = &msblk->meta_index[msblk->next_meta_index];
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ meta->inode_number = inode->i_ino;
-+ meta->offset = offset;
-+ meta->skip = skip;
-+ meta->entries = 0;
-+ meta->locked = 1;
-+
-+failed:
-+ up(&msblk->meta_index_mutex);
-+ return meta;
-+}
-+
-+
-+void release_meta_index(struct inode *inode, struct meta_index *meta)
-+{
-+ meta->locked = 0;
-+}
-+
-+
-+static int read_block_index(struct super_block *s, int blocks, char *block_list,
-+ long long *start_block, int *offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned int *block_listp;
-+ int block = 0;
-+
-+ if (msblk->swap) {
-+ char sblock_list[blocks << 2];
-+
-+ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
-+ ((unsigned int *)sblock_list), blocks);
-+ } else
-+ if (!squashfs_get_cached_block(s, block_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+
-+ for (block_listp = (unsigned int *) block_list; blocks;
-+ block_listp++, blocks --)
-+ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
-+
-+ return block;
-+
-+failure:
-+ return -1;
-+}
-+
-+
-+#define SIZE 256
-+
-+static inline int calculate_skip(int blocks) {
-+ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
-+ return skip >= 7 ? 7 : skip + 1;
-+}
-+
-+
-+static int get_meta_index(struct inode *inode, int index,
-+ long long *index_block, int *index_offset,
-+ long long *data_block, char *block_list)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
-+ int offset = 0;
-+ struct meta_index *meta;
-+ struct meta_entry *meta_entry;
-+ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
-+ int cur_offset = SQUASHFS_I(inode)->offset;
-+ long long cur_data_block = SQUASHFS_I(inode)->start_block;
-+ int i;
-+
-+ index /= SQUASHFS_META_INDEXES * skip;
-+
-+ while ( offset < index ) {
-+ meta = locate_meta_index(inode, index, offset + 1);
-+
-+ if (meta == NULL) {
-+ if ((meta = empty_meta_index(inode, offset + 1,
-+ skip)) == NULL)
-+ goto all_done;
-+ } else {
-+ offset = index < meta->offset + meta->entries ? index :
-+ meta->offset + meta->entries - 1;
-+ meta_entry = &meta->meta_entry[offset - meta->offset];
-+ cur_index_block = meta_entry->index_block + sblk->inode_table_start;
-+ cur_offset = meta_entry->offset;
-+ cur_data_block = meta_entry->data_block;
-+ TRACE("get_meta_index: offset %d, meta->offset %d, "
-+ "meta->entries %d\n", offset, meta->offset,
-+ meta->entries);
-+ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
-+ " data_block 0x%llx\n", cur_index_block,
-+ cur_offset, cur_data_block);
-+ }
-+
-+ for (i = meta->offset + meta->entries; i <= index &&
-+ i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
-+ int blocks = skip * SQUASHFS_META_INDEXES;
-+
-+ while (blocks) {
-+ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) :
-+ blocks;
-+ int res = read_block_index(inode->i_sb, block,
-+ block_list, &cur_index_block,
-+ &cur_offset);
-+
-+ if (res == -1)
-+ goto failed;
-+
-+ cur_data_block += res;
-+ blocks -= block;
-+ }
-+
-+ meta_entry = &meta->meta_entry[i - meta->offset];
-+ meta_entry->index_block = cur_index_block - sblk->inode_table_start;
-+ meta_entry->offset = cur_offset;
-+ meta_entry->data_block = cur_data_block;
-+ meta->entries ++;
-+ offset ++;
-+ }
-+
-+ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
-+ meta->offset, meta->entries);
-+
-+ release_meta_index(inode, meta);
-+ }
-+
-+all_done:
-+ *index_block = cur_index_block;
-+ *index_offset = cur_offset;
-+ *data_block = cur_data_block;
-+
-+ return offset * SQUASHFS_META_INDEXES * skip;
-+
-+failed:
-+ release_meta_index(inode, meta);
-+ return -1;
-+}
-+
-+
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize)
-+{
-+ long long block_ptr;
-+ int offset;
-+ long long block;
-+ int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
-+ block_list);
-+
-+ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
-+ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset,
-+ block);
-+
-+ if(res == -1)
-+ goto failure;
-+
-+ index -= res;
-+
-+ while ( index ) {
-+ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
-+ int res = read_block_index(inode->i_sb, blocks, block_list,
-+ &block_ptr, &offset);
-+ if (res == -1)
-+ goto failure;
-+ block += res;
-+ index -= blocks;
-+ }
-+
-+ if (read_block_index(inode->i_sb, 1, block_list,
-+ &block_ptr, &offset) == -1)
-+ goto failure;
-+ *bsize = *((unsigned int *) block_list);
-+
-+ return block;
-+
-+failure:
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0;
-+ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
-+ void *pageaddr;
-+ struct squashfs_fragment_cache *fragment = NULL;
-+ char *data_ptr = msblk->read_page;
-+
-+ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
-+ int start_index = page->index & ~mask;
-+ int end_index = start_index | mask;
-+
-+ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT))
-+ goto skip_read;
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ if ((block = (msblk->read_blocklist)(inode, index, 1,
-+ block_list, NULL, &bsize)) == 0)
-+ goto skip_read;
-+
-+ down(&msblk->read_page_mutex);
-+
-+ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page,
-+ block, bsize, NULL))) {
-+ ERROR("Unable to read page, block %llx, size %x\n", block,
-+ bsize);
-+ up(&msblk->read_page_mutex);
-+ goto skip_read;
-+ }
-+ } else {
-+ if ((fragment = get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)->u.s1.fragment_size))
-+ == NULL) {
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ (int) SQUASHFS_I(inode)->
-+ u.s1.fragment_size);
-+ goto skip_read;
-+ }
-+ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset +
-+ (i_size_read(inode) & (sblk->block_size
-+ - 1));
-+ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset;
-+ data_ptr = fragment->data;
-+ }
-+
-+ for (i = start_index; i <= end_index && byte_offset < bytes;
-+ i++, byte_offset += PAGE_CACHE_SIZE) {
-+ struct page *push_page;
-+ int available_bytes = (bytes - byte_offset) > PAGE_CACHE_SIZE ?
-+ PAGE_CACHE_SIZE : bytes - byte_offset;
-+
-+ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n",
-+ bytes, i, byte_offset, available_bytes);
-+
-+ if (i == page->index) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+ } else if ((push_page =
-+ grab_cache_page_nowait(page->mapping, i))) {
-+ pageaddr = kmap_atomic(push_page, KM_USER0);
-+
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(push_page);
-+ SetPageUptodate(push_page);
-+ unlock_page(push_page);
-+ page_cache_release(push_page);
-+ }
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log))
-+ up(&msblk->read_page_mutex);
-+ else
-+ release_cached_fragment(msblk, fragment);
-+
-+ return 0;
-+
-+skip_read:
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage4K(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, bytes = 0;
-+ void *pageaddr;
-+
-+ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT)) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ goto skip_read;
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || page->index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ block = (msblk->read_blocklist)(inode, page->index, 1,
-+ block_list, NULL, &bsize);
-+
-+ down(&msblk->read_page_mutex);
-+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
-+ bsize, NULL);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (bytes)
-+ memcpy(pageaddr, msblk->read_page, bytes);
-+ else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ block, bsize);
-+ up(&msblk->read_page_mutex);
-+ } else {
-+ struct squashfs_fragment_cache *fragment =
-+ get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (fragment) {
-+ bytes = i_size_read(inode) & (sblk->block_size - 1);
-+ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)->
-+ u.s1.fragment_offset, bytes);
-+ release_cached_fragment(msblk, fragment);
-+ } else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block, (int)
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ }
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ f_pos =- 3;
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length + 3;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index *index = (struct squashfs_dir_index *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length + 3;
-+}
-+
-+
-+static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
-+
-+ while(file->f_pos < 3) {
-+ char *name;
-+ int size, i_ino;
-+
-+ if(file->f_pos == 0) {
-+ name = ".";
-+ size = 1;
-+ i_ino = i->i_ino;
-+ } else {
-+ name = "..";
-+ size = 2;
-+ i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
-+ }
-+ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
-+ (unsigned int) dirent, name, size, (int)
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]);
-+
-+ if (filldir(dirent, name, size,
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]) < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos += size;
-+ dirs_read++;
-+ }
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %d\n", name,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+static void squashfs_put_super(struct super_block *s)
-+{
-+ int i;
-+
-+ if (s->s_fs_info) {
-+ struct squashfs_sb_info *sbi = s->s_fs_info;
-+ if (sbi->block_cache)
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (sbi->block_cache[i].block !=
-+ SQUASHFS_INVALID_BLK)
-+ kfree(sbi->block_cache[i].data);
-+ if (sbi->fragment)
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
-+ SQUASHFS_FREE(sbi->fragment[i].data);
-+ kfree(sbi->fragment);
-+ kfree(sbi->block_cache);
-+ kfree(sbi->read_data);
-+ kfree(sbi->read_page);
-+ kfree(sbi->uid);
-+ kfree(sbi->fragment_index);
-+ kfree(sbi->fragment_index_2);
-+ kfree(sbi->meta_index);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ }
-+}
-+
-+
-+static int squashfs_get_sb(struct file_system_type *fs_type,
-+ int flags, const char *dev_name, void *data, struct vfsmount *mnt)
-+{
-+ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, mnt);
-+}
-+
-+
-+static int __init init_squashfs_fs(void)
-+{
-+ int err = init_inodecache();
-+ if (err)
-+ goto out;
-+
-+ printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
-+ "Phillip Lougher\n");
-+
-+ if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
-+ ERROR("Failed to allocate zlib workspace\n");
-+ destroy_inodecache();
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+
-+ if ((err = register_filesystem(&squashfs_fs_type))) {
-+ vfree(stream.workspace);
-+ destroy_inodecache();
-+ }
-+
-+out:
-+ return err;
-+}
-+
-+
-+static void __exit exit_squashfs_fs(void)
-+{
-+ vfree(stream.workspace);
-+ unregister_filesystem(&squashfs_fs_type);
-+ destroy_inodecache();
-+}
-+
-+
-+static kmem_cache_t * squashfs_inode_cachep;
-+
-+
-+static struct inode *squashfs_alloc_inode(struct super_block *sb)
-+{
-+ struct squashfs_inode_info *ei;
-+ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL);
-+ if (!ei)
-+ return NULL;
-+ return &ei->vfs_inode;
-+}
-+
-+
-+static void squashfs_destroy_inode(struct inode *inode)
-+{
-+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
-+}
-+
-+
-+static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
-+{
-+ struct squashfs_inode_info *ei = foo;
-+
-+ if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
-+ SLAB_CTOR_CONSTRUCTOR)
-+ inode_init_once(&ei->vfs_inode);
-+}
-+
-+
-+static int __init init_inodecache(void)
-+{
-+ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
-+ sizeof(struct squashfs_inode_info),
-+ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
-+ init_once, NULL);
-+ if (squashfs_inode_cachep == NULL)
-+ return -ENOMEM;
-+ return 0;
-+}
-+
-+
-+static void destroy_inodecache(void)
-+{
-+ kmem_cache_destroy(squashfs_inode_cachep);
-+}
-+
-+
-+module_init(init_squashfs_fs);
-+module_exit(exit_squashfs_fs);
-+MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
-+MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
-Index: git/fs/squashfs/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/Makefile 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,7 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
-+
-+obj-$(CONFIG_SQUASHFS) += squashfs.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
-Index: git/fs/squashfs/squashfs2_0.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/squashfs2_0.c 2006-11-01 18:01:49.000000000 +0000
-@@ -0,0 +1,757 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs2_0.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
-+static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
-+ struct nameidata *);
-+
-+static struct file_operations squashfs_dir_ops_2 = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir_2
-+};
-+
-+static struct inode_operations squashfs_dir_inode_ops_2 = {
-+ .lookup = squashfs_lookup_2
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static int read_fragment_index_table_2(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index_2,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ unsigned int fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
-+ &msblk->fragment_index_2[i], 1);
-+ msblk->fragment_index_2[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
-+ struct squashfs_fragment_entry_2 fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry_2 sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = ino;
-+ i->i_mtime.tv_sec = sblk->mkfs_time;
-+ i->i_atime.tv_sec = sblk->mkfs_time;
-+ i->i_ctime.tv_sec = sblk->mkfs_time;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_nlink = 1;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget_2(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned int block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ unsigned int ino = SQUASHFS_MK_VFS_INODE(block
-+ - sblk->inode_table_start, offset);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header_2 id, sid;
-+ struct squashfs_base_inode_header_2 *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ struct squashfs_reg_inode_header_2 *inodep = &id.reg;
-+ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
-+ long long frag_blk;
-+ unsigned int frag_size;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location_2(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %x, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header_2 *inodep = &id.dir;
-+ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header_2 *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header_2 *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header_2 *inodep = &id.dev;
-+ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%x:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index_2 index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index_2 *index = (struct squashfs_dir_index_2 *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index_2),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length;
-+}
-+
-+
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+
-+ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos, SQUASHFS_MK_VFS_INODE(
-+ dirh.start_block, dire->offset),
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (sorted && name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %lld\n", name,
-+ dirh.start_block, dire->offset, ino);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget_2;
-+ msblk->read_fragment_index_table = read_fragment_index_table_2;
-+
-+ sblk->bytes_used = sblk->bytes_used_2;
-+ sblk->uid_start = sblk->uid_start_2;
-+ sblk->guid_start = sblk->guid_start_2;
-+ sblk->inode_table_start = sblk->inode_table_start_2;
-+ sblk->directory_table_start = sblk->directory_table_start_2;
-+ sblk->fragment_table_start = sblk->fragment_table_start_2;
-+
-+ return 1;
-+}
-Index: git/fs/squashfs/squashfs.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/squashfs.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs.h
-+ */
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#endif
-+
-+#ifdef SQUASHFS_TRACE
-+#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
-+#else
-+#define TRACE(s, args...) {}
-+#endif
-+
-+#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
-+
-+#define SERROR(s, args...) do { \
-+ if (!silent) \
-+ printk(KERN_ERR "SQUASHFS error: "s, ## args);\
-+ } while(0)
-+
-+#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
-+
-+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
-+{
-+ return list_entry(inode, struct squashfs_inode_info, vfs_inode);
-+}
-+
-+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
-+#define SQSH_EXTERN
-+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index);
-+extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset);
-+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment);
-+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length);
-+extern struct address_space_operations squashfs_symlink_aops;
-+extern struct address_space_operations squashfs_aops;
-+extern struct address_space_operations squashfs_aops_4K;
-+extern struct inode_operations squashfs_dir_inode_ops;
-+#else
-+#define SQSH_EXTERN static
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-Index: git/include/linux/squashfs_fs.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/linux/squashfs_fs.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,911 @@
-+#ifndef SQUASHFS_FS
-+#define SQUASHFS_FS
-+
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs.h
-+ */
-+
-+#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_VMALLOC
-+#define SQUASHFS_ALLOC(a) vmalloc(a)
-+#define SQUASHFS_FREE(a) vfree(a)
-+#else
-+#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL)
-+#define SQUASHFS_FREE(a) kfree(a)
-+#endif
-+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
-+#define SQUASHFS_MAJOR 3
-+#define SQUASHFS_MINOR 0
-+#define SQUASHFS_MAGIC 0x73717368
-+#define SQUASHFS_MAGIC_SWAP 0x68737173
-+#define SQUASHFS_START 0
-+
-+/* size of metadata (inode and directory) blocks */
-+#define SQUASHFS_METADATA_SIZE 8192
-+#define SQUASHFS_METADATA_LOG 13
-+
-+/* default size of data blocks */
-+#define SQUASHFS_FILE_SIZE 65536
-+#define SQUASHFS_FILE_LOG 16
-+
-+#define SQUASHFS_FILE_MAX_SIZE 65536
-+
-+/* Max number of uids and gids */
-+#define SQUASHFS_UIDS 256
-+#define SQUASHFS_GUIDS 255
-+
-+/* Max length of filename (not 255) */
-+#define SQUASHFS_NAME_LEN 256
-+
-+#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
-+#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff)
-+#define SQUASHFS_INVALID_BLK ((long long) -1)
-+#define SQUASHFS_USED_BLK ((long long) -2)
-+
-+/* Filesystem flags */
-+#define SQUASHFS_NOI 0
-+#define SQUASHFS_NOD 1
-+#define SQUASHFS_CHECK 2
-+#define SQUASHFS_NOF 3
-+#define SQUASHFS_NO_FRAG 4
-+#define SQUASHFS_ALWAYS_FRAG 5
-+#define SQUASHFS_DUPLICATE 6
-+
-+#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
-+
-+#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOI)
-+
-+#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOD)
-+
-+#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOF)
-+
-+#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NO_FRAG)
-+
-+#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_ALWAYS_FRAG)
-+
-+#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_DUPLICATE)
-+
-+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_CHECK)
-+
-+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
-+ duplicate_checking) (noi | (nod << 1) | (check_data << 2) \
-+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
-+ (duplicate_checking << 6))
-+
-+/* Max number of types and file types */
-+#define SQUASHFS_DIR_TYPE 1
-+#define SQUASHFS_FILE_TYPE 2
-+#define SQUASHFS_SYMLINK_TYPE 3
-+#define SQUASHFS_BLKDEV_TYPE 4
-+#define SQUASHFS_CHRDEV_TYPE 5
-+#define SQUASHFS_FIFO_TYPE 6
-+#define SQUASHFS_SOCKET_TYPE 7
-+#define SQUASHFS_LDIR_TYPE 8
-+#define SQUASHFS_LREG_TYPE 9
-+
-+/* 1.0 filesystem type definitions */
-+#define SQUASHFS_TYPES 5
-+#define SQUASHFS_IPC_TYPE 0
-+
-+/* Flag whether block is compressed or uncompressed, bit is set if block is
-+ * uncompressed */
-+#define SQUASHFS_COMPRESSED_BIT (1 << 15)
-+
-+#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
-+ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
-+
-+#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
-+
-+#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
-+
-+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
-+
-+#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
-+
-+/*
-+ * Inode number ops. Inodes consist of a compressed block number, and an
-+ * uncompressed offset within that block
-+ */
-+#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
-+
-+#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
-+
-+#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\
-+ << 16) + (B)))
-+
-+/* Compute 32 bit VFS inode number from squashfs inode number */
-+#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \
-+ ((b) >> 2) + 1))
-+/* XXX */
-+
-+/* Translate between VFS mode and squashfs mode */
-+#define SQUASHFS_MODE(a) ((a) & 0xfff)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES(A) (A * sizeof(struct squashfs_fragment_entry))
-+
-+#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\
-+ sizeof(long long))
-+
-+/* cached data constants for filesystem */
-+#define SQUASHFS_CACHED_BLKS 8
-+
-+#define SQUASHFS_MAX_FILE_SIZE_LOG 64
-+
-+#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \
-+ (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
-+
-+#define SQUASHFS_MARKER_BYTE 0xff
-+
-+/* meta index cache */
-+#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
-+#define SQUASHFS_META_ENTRIES 31
-+#define SQUASHFS_META_NUMBER 8
-+#define SQUASHFS_SLOTS 4
-+
-+struct meta_entry {
-+ long long data_block;
-+ unsigned int index_block;
-+ unsigned short offset;
-+ unsigned short pad;
-+};
-+
-+struct meta_index {
-+ unsigned int inode_number;
-+ unsigned int offset;
-+ unsigned short entries;
-+ unsigned short skip;
-+ unsigned short locked;
-+ unsigned short pad;
-+ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES];
-+};
-+
-+
-+/*
-+ * definitions for structures on disk
-+ */
-+
-+typedef long long squashfs_block_t;
-+typedef long long squashfs_inode_t;
-+
-+struct squashfs_super_block {
-+ unsigned int s_magic;
-+ unsigned int inodes;
-+ unsigned int bytes_used_2;
-+ unsigned int uid_start_2;
-+ unsigned int guid_start_2;
-+ unsigned int inode_table_start_2;
-+ unsigned int directory_table_start_2;
-+ unsigned int s_major:16;
-+ unsigned int s_minor:16;
-+ unsigned int block_size_1:16;
-+ unsigned int block_log:16;
-+ unsigned int flags:8;
-+ unsigned int no_uids:8;
-+ unsigned int no_guids:8;
-+ unsigned int mkfs_time /* time of filesystem creation */;
-+ squashfs_inode_t root_inode;
-+ unsigned int block_size;
-+ unsigned int fragments;
-+ unsigned int fragment_table_start_2;
-+ long long bytes_used;
-+ long long uid_start;
-+ long long guid_start;
-+ long long inode_table_start;
-+ long long directory_table_start;
-+ long long fragment_table_start;
-+ long long unused;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_index {
-+ unsigned int index;
-+ unsigned int start_block;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_BASE_INODE_HEADER \
-+ unsigned int inode_type:4; \
-+ unsigned int mode:12; \
-+ unsigned int uid:8; \
-+ unsigned int guid:8; \
-+ unsigned int mtime; \
-+ unsigned int inode_number;
-+
-+struct squashfs_base_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_lreg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ long long file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int parent_inode;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int i_count:16;
-+ unsigned int parent_inode;
-+ struct squashfs_dir_index index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header {
-+ struct squashfs_base_inode_header base;
-+ struct squashfs_dev_inode_header dev;
-+ struct squashfs_symlink_inode_header symlink;
-+ struct squashfs_reg_inode_header reg;
-+ struct squashfs_lreg_inode_header lreg;
-+ struct squashfs_dir_inode_header dir;
-+ struct squashfs_ldir_inode_header ldir;
-+ struct squashfs_ipc_inode_header ipc;
-+};
-+
-+struct squashfs_dir_entry {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ int inode_number:16;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_header {
-+ unsigned int count:8;
-+ unsigned int start_block;
-+ unsigned int inode_number;
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry {
-+ long long start_block;
-+ unsigned int size;
-+ unsigned int unused;
-+} __attribute__ ((packed));
-+
-+extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
-+extern int squashfs_uncompress_init(void);
-+extern int squashfs_uncompress_exit(void);
-+
-+/*
-+ * macros to convert each packed bitfield structure from little endian to big
-+ * endian and vice versa. These are needed when creating or using a filesystem
-+ * on a machine with different byte ordering to the target architecture.
-+ *
-+ */
-+
-+#define SQUASHFS_SWAP_START \
-+ int bits;\
-+ int b_pos;\
-+ unsigned long long val;\
-+ unsigned char *s;\
-+ unsigned char *d;
-+
-+#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
-+ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
-+ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
-+ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
-+ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
-+ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
-+ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
-+ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
-+ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
-+ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
-+ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
-+ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
-+ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
-+ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
-+ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
-+ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
-+ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
-+ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
-+ SQUASHFS_SWAP((s)->unused, d, 888, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header))\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dev_inode_header)); \
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_reg_inode_header));\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_lreg_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 224, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 147, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 155, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
-+ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 2);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 16)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_INTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 4);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 32)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 64)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * bits / 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ bits)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+
-+struct squashfs_base_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int type:4;
-+ unsigned int offset:4;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
-+ SQUASHFS_SWAP((s)->guid, d, 20, 4);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header_1));\
-+ SQUASHFS_SWAP((s)->type, d, 24, 4);\
-+ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_1));\
-+ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_1));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_1));\
-+ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_1));\
-+ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
-+}
-+
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+
-+struct squashfs_dir_index_2 {
-+ unsigned int index:27;
-+ unsigned int start_block:29;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_base_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+ unsigned int i_count:16;
-+ struct squashfs_dir_index_2 index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header_2 {
-+ struct squashfs_base_inode_header_2 base;
-+ struct squashfs_dev_inode_header_2 dev;
-+ struct squashfs_symlink_inode_header_2 symlink;
-+ struct squashfs_reg_inode_header_2 reg;
-+ struct squashfs_dir_inode_header_2 dir;
-+ struct squashfs_ldir_inode_header_2 ldir;
-+ struct squashfs_ipc_inode_header_2 ipc;
-+};
-+
-+struct squashfs_dir_header_2 {
-+ unsigned int count:8;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_entry_2 {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry_2 {
-+ unsigned int start_block;
-+ unsigned int size;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_2)); \
-+ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_2));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_2));\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
-+ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 27);\
-+ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
-+ SQUASHFS_SWAP((s)->size, d, 56, 8);\
-+}
-+#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 32, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2))
-+
-+#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
-+ sizeof(int))
-+
-+#endif
-+
-+#ifdef __KERNEL__
-+
-+/*
-+ * macros used to swap each structure entry, taking into account
-+ * bitfields and different bitfield placing conventions on differing
-+ * architectures
-+ */
-+
-+#include <asm/byteorder.h>
-+
-+#ifdef __BIG_ENDIAN
-+ /* convert from little endian to big endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, b_pos)
-+#else
-+ /* convert from big endian to little endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, 64 - tbits - b_pos)
-+#endif
-+
-+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
-+ b_pos = pos % 8;\
-+ val = 0;\
-+ s = (unsigned char *)p + (pos / 8);\
-+ d = ((unsigned char *) &val) + 7;\
-+ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
-+ *d-- = *s++;\
-+ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
-+}
-+
-+#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
-+
-+#endif
-+#endif
-Index: git/include/linux/squashfs_fs_i.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/linux/squashfs_fs_i.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,45 @@
-+#ifndef SQUASHFS_FS_I
-+#define SQUASHFS_FS_I
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_i.h
-+ */
-+
-+struct squashfs_inode_info {
-+ long long start_block;
-+ unsigned int offset;
-+ union {
-+ struct {
-+ long long fragment_start_block;
-+ unsigned int fragment_size;
-+ unsigned int fragment_offset;
-+ long long block_list_start;
-+ } s1;
-+ struct {
-+ long long directory_index_start;
-+ unsigned int directory_index_offset;
-+ unsigned int directory_index_count;
-+ unsigned int parent_inode;
-+ } s2;
-+ } u;
-+ struct inode vfs_inode;
-+};
-+#endif
-Index: git/include/linux/squashfs_fs_sb.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/linux/squashfs_fs_sb.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,74 @@
-+#ifndef SQUASHFS_FS_SB
-+#define SQUASHFS_FS_SB
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_sb.h
-+ */
-+
-+#include <linux/squashfs_fs.h>
-+
-+struct squashfs_cache {
-+ long long block;
-+ int length;
-+ long long next_index;
-+ char *data;
-+};
-+
-+struct squashfs_fragment_cache {
-+ long long block;
-+ int length;
-+ unsigned int locked;
-+ char *data;
-+};
-+
-+struct squashfs_sb_info {
-+ struct squashfs_super_block sblk;
-+ int devblksize;
-+ int devblksize_log2;
-+ int swap;
-+ struct squashfs_cache *block_cache;
-+ struct squashfs_fragment_cache *fragment;
-+ int next_cache;
-+ int next_fragment;
-+ int next_meta_index;
-+ unsigned int *uid;
-+ unsigned int *guid;
-+ long long *fragment_index;
-+ unsigned int *fragment_index_2;
-+ unsigned int read_size;
-+ char *read_data;
-+ char *read_page;
-+ struct semaphore read_data_mutex;
-+ struct semaphore read_page_mutex;
-+ struct semaphore block_cache_mutex;
-+ struct semaphore fragment_mutex;
-+ struct semaphore meta_index_mutex;
-+ wait_queue_head_t waitq;
-+ wait_queue_head_t fragment_wait_queue;
-+ struct meta_index *meta_index;
-+ struct inode *(*iget)(struct super_block *s, squashfs_inode_t \
-+ inode);
-+ long long (*read_blocklist)(struct inode *inode, int \
-+ index, int readahead_blks, char *block_list, \
-+ unsigned short **block_p, unsigned int *bsize);
-+ int (*read_fragment_index_table)(struct super_block *s);
-+};
-+#endif
-Index: git/init/do_mounts_rd.c
-===================================================================
---- git.orig/init/do_mounts_rd.c 2006-10-31 16:09:47.000000000 +0000
-+++ git/init/do_mounts_rd.c 2006-10-31 21:26:45.000000000 +0000
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/cramfs_fs.h>
-+#include <linux/squashfs_fs.h>
- #include <linux/initrd.h>
- #include <linux/string.h>
-
-@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
- * numbers could not be found.
- *
- * We currently check for the following magic numbers:
-+ * squashfs
- * minix
- * ext2
- * romfs
-@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
- struct ext2_super_block *ext2sb;
- struct romfs_super_block *romfsb;
- struct cramfs_super *cramfsb;
-+ struct squashfs_super_block *squashfsb;
- int nblocks = -1;
- unsigned char *buf;
-
-@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
- ext2sb = (struct ext2_super_block *) buf;
- romfsb = (struct romfs_super_block *) buf;
- cramfsb = (struct cramfs_super *) buf;
-+ squashfsb = (struct squashfs_super_block *) buf;
- memset(buf, 0xe5, size);
-
- /*
-@@ -101,6 +105,15 @@ identify_ramdisk_image(int fd, int start
- goto done;
- }
-
-+ /* squashfs is at block zero too */
-+ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
-+ printk(KERN_NOTICE
-+ "RAMDISK: squashfs filesystem found at block %d\n",
-+ start_block);
-+ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
-+ goto done;
-+ }
-+
- /*
- * Read block 1 to test for minix and ext2 superblock
- */
diff --git a/packages/linux/linux-rp-2.6.19+git/tmio-nand-r7.patch b/packages/linux/linux-rp-2.6.19+git/tmio-nand-r7.patch
deleted file mode 100644
index b6ce56eea4..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/tmio-nand-r7.patch
+++ /dev/null
@@ -1,593 +0,0 @@
- drivers/mtd/nand/Kconfig | 7
- drivers/mtd/nand/Makefile | 1
- drivers/mtd/nand/tmio.c | 554 ++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 562 insertions(+)
-
-Index: git/drivers/mtd/nand/tmio.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/drivers/mtd/nand/tmio.c 2006-11-07 23:31:12.000000000 +0000
-@@ -0,0 +1,554 @@
-+/*
-+ * A device driver for NAND flash connected to a Toshiba Mobile IO
-+ * controller. This is known to work with the following variants:
-+ * TC6393XB revision 3
-+ *
-+ * Maintainer: Chris Humbert <mahadri+mtd@drigon.com>
-+ *
-+ * Copyright (C) 2005 Chris Humbert
-+ * Copyright (C) 2005 Dirk Opfer
-+ * Copyright (C) 2004 SHARP
-+ * Copyright (C) 2002 Lineo Japan, Inc.
-+ * Copyright (C) Ian Molton and Sebastian Carlier
-+ *
-+ * Based on Sharp's NAND driver, sharp_sl_tc6393.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/delay.h>
-+#include <linux/wait.h>
-+#include <linux/ioport.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/nand.h>
-+#include <linux/mtd/nand_ecc.h>
-+#include <linux/mtd/partitions.h>
-+#include <asm/io.h>
-+#include <asm/hardware/tmio.h>
-+
-+#include <linux/interrupt.h>
-+
-+#define mtd_printk(level, mtd, format, arg...) \
-+ printk (level "%s: " format, mtd->name, ## arg)
-+#define mtd_warn(mtd, format, arg...) \
-+ mtd_printk (KERN_WARNING, mtd, format, ## arg)
-+
-+/*--------------------------------------------------------------------------*/
-+
-+/* tmio_nfcr.mode Register Command List */
-+#define FCR_MODE_DATA 0x94 // Data Data_Mode
-+#define FCR_MODE_COMMAND 0x95 // Data Command_Mode
-+#define FCR_MODE_ADDRESS 0x96 // Data Address_Mode
-+
-+#define FCR_MODE_HWECC_CALC 0xB4 // HW-ECC Data
-+#define FCR_MODE_HWECC_RESULT 0xD4 // HW-ECC Calculation Result Read_Mode
-+#define FCR_MODE_HWECC_RESET 0xF4 // HW-ECC Reset
-+
-+#define FCR_MODE_POWER_ON 0x0C // Power Supply ON to SSFDC card
-+#define FCR_MODE_POWER_OFF 0x08 // Power Supply OFF to SSFDC card
-+
-+#define FCR_MODE_LED_OFF 0x00 // LED OFF
-+#define FCR_MODE_LED_ON 0x04 // LED ON
-+
-+#define FCR_MODE_EJECT_ON 0x68 // Ejection Demand from Penguin is Advanced
-+#define FCR_MODE_EJECT_OFF 0x08 // Ejection Demand from Penguin is Not Advanced
-+
-+#define FCR_MODE_LOCK 0x6C // Operates By Lock_Mode. Ejection Switch is Invalid
-+#define FCR_MODE_UNLOCK 0x0C // Operates By UnLock_Mode.Ejection Switch is Effective
-+
-+#define FCR_MODE_CONTROLLER_ID 0x40 // Controller ID Read
-+#define FCR_MODE_STANDBY 0x00 // SSFDC card Changes Standby State
-+
-+#define FCR_MODE_WE 0x80
-+#define FCR_MODE_ECC1 0x40
-+#define FCR_MODE_ECC0 0x20
-+#define FCR_MODE_CE 0x10
-+#define FCR_MODE_PCNT1 0x08
-+#define FCR_MODE_PCNT0 0x04
-+#define FCR_MODE_ALE 0x02
-+#define FCR_MODE_CLE 0x01
-+
-+#define FCR_STATUS_BUSY 0x80
-+
-+/*
-+ * NAND Flash Host Controller Configuration Register
-+ */
-+struct tmio_nfhccr {
-+ u8 x00[4];
-+ u16 command; /* 0x04 Command */
-+ u8 x01[0x0a];
-+ u16 base[2]; /* 0x10 NAND Flash Control Reg Base Addr*/
-+ u8 x02[0x29];
-+ u8 intp; /* 0x3d Interrupt Pin */
-+ u8 x03[0x0a];
-+ u8 inte; /* 0x48 Interrupt Enable */
-+ u8 x04;
-+ u8 ec; /* 0x4a Event Control */
-+ u8 x05;
-+ u8 icc; /* 0x4c Internal Clock Control */
-+ u8 x06[0x0e];
-+ u8 eccc; /* 0x5b ECC Control */
-+ u8 x07[4];
-+ u8 nftc; /* 0x60 NAND Flash Transaction Control */
-+ u8 nfm; /* 0x61 NAND Flash Monitor */
-+ u8 nfpsc; /* 0x62 NAND Flash Power Supply Control */
-+ u8 nfdc; /* 0x63 NAND Flash Detect Control */
-+ u8 x08[0x9c];
-+} __attribute__ ((packed));
-+
-+/*
-+ * NAND Flash Control Register
-+ */
-+struct tmio_nfcr {
-+union {
-+ u8 u8; /* 0x00 Data Register */
-+ u16 u16;
-+ u32 u32;
-+} __attribute__ ((packed));
-+ u8 mode; /* 0x04 Mode Register */
-+ u8 status; /* 0x05 Status Register */
-+ u8 isr; /* 0x06 Interrupt Status Register */
-+ u8 imr; /* 0x07 Interrupt Mask Register */
-+} __attribute__ ((packed));
-+
-+struct tmio_nand {
-+ struct mtd_info mtd;
-+ struct nand_chip chip;
-+
-+ struct tmio_nfhccr __iomem * ccr;
-+ struct tmio_nfcr __iomem * fcr;
-+
-+ unsigned int irq;
-+
-+ /* for tmio_nand_read_byte */
-+ u8 read;
-+ unsigned read_good:1;
-+};
-+
-+#define mtd_to_tmio(m) container_of(m, struct tmio_nand, mtd)
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static void tmio_nand_hwcontrol(struct mtd_info *mtd, int cmd,
-+ unsigned int ctrl)
-+{
-+ struct tmio_nand *tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem *fcr = tmio->fcr;
-+ struct nand_chip *chip = mtd->priv;
-+
-+ if (ctrl & NAND_CTRL_CHANGE) {
-+ u8 mode;
-+
-+ if (ctrl & NAND_NCE) {
-+ mode = FCR_MODE_DATA;
-+
-+ if (ctrl & NAND_CLE)
-+ mode |= FCR_MODE_CLE;
-+ else
-+ mode &= ~FCR_MODE_CLE;
-+
-+ if (ctrl & NAND_ALE)
-+ mode |= FCR_MODE_ALE;
-+ else
-+ mode &= ~FCR_MODE_ALE;
-+ } else {
-+ mode = FCR_MODE_STANDBY;
-+ }
-+
-+ iowrite8 (mode, &fcr->mode);
-+ tmio->read_good = 0;
-+ }
-+
-+ if (cmd != NAND_CMD_NONE)
-+ writeb(cmd, chip->IO_ADDR_W);
-+}
-+
-+static int tmio_nand_dev_ready (struct mtd_info* mtd)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ return !(ioread8 (&fcr->status) & FCR_STATUS_BUSY);
-+}
-+
-+static irqreturn_t tmio_irq (int irq, void *__tmio)
-+{
-+ struct tmio_nand* tmio = __tmio;
-+ struct nand_chip* this = &tmio->chip;
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ /* disable RDYREQ interrupt */
-+ iowrite8 (0x00, &fcr->imr);
-+
-+ if (unlikely (!waitqueue_active (&this->controller->wq)))
-+ printk (KERN_WARNING TMIO_NAME_NAND ": spurious interrupt\n");
-+
-+ wake_up (&this->controller->wq);
-+ return IRQ_HANDLED;
-+}
-+
-+/*
-+ * The TMIO core has a RDYREQ interrupt on the posedge of #SMRB.
-+ * This interrupt is normally disabled, but for long operations like
-+ * erase and write, we enable it to wake us up. The irq handler
-+ * disables the interrupt.
-+ */
-+static int
-+tmio_nand_wait (struct mtd_info *mtd, struct nand_chip *this)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+ long timeout;
-+
-+ /* enable RDYREQ interrupt */
-+ iowrite8 (0x0f, &fcr->isr);
-+ iowrite8 (0x81, &fcr->imr);
-+
-+ timeout = wait_event_timeout (this->controller->wq, tmio_nand_dev_ready (mtd),
-+ msecs_to_jiffies (this->state == FL_ERASING ? 400 : 20));
-+
-+ if (unlikely (!tmio_nand_dev_ready (mtd))) {
-+ iowrite8 (0x00, &fcr->imr);
-+ mtd_warn (mtd, "still busy with %s after %d ms\n",
-+ this->state == FL_ERASING ? "erase" : "program",
-+ this->state == FL_ERASING ? 400 : 20);
-+
-+ } else if (unlikely (!timeout)) {
-+ iowrite8 (0x00, &fcr->imr);
-+ mtd_warn (mtd, "timeout waiting for interrupt\n");
-+ }
-+
-+ this->cmdfunc (mtd, NAND_CMD_STATUS, -1, -1);
-+ return this->read_byte (mtd);
-+}
-+
-+/*
-+ * The TMIO controller combines two 8-bit data bytes into one 16-bit
-+ * word. This function separates them so nand_base.c works as expected,
-+ * especially its NAND_CMD_READID routines.
-+ *
-+ * To prevent stale data from being read, tmio_nand_hwcontrol() clears
-+ * tmio->read_good.
-+ */
-+static u_char tmio_nand_read_byte (struct mtd_info *mtd)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+ unsigned int data;
-+
-+ if (tmio->read_good--)
-+ return tmio->read;
-+
-+ data = ioread16 (&fcr->u16);
-+ tmio->read = data >> 8;
-+ return data;
-+}
-+
-+/*
-+ * The TMIO controller converts an 8-bit NAND interface to a 16-bit
-+ * bus interface, so all data reads and writes must be 16-bit wide.
-+ * Thus, we implement 16-bit versions of the read, write, and verify
-+ * buffer functions.
-+ */
-+static void
-+tmio_nand_write_buf (struct mtd_info *mtd, const u_char *buf, int len)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ iowrite16_rep (&fcr->u16, buf, len >> 1);
-+}
-+
-+static void tmio_nand_read_buf (struct mtd_info *mtd, u_char *buf, int len)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ ioread16_rep (&fcr->u16, buf, len >> 1);
-+}
-+
-+static int
-+tmio_nand_verify_buf (struct mtd_info *mtd, const u_char *buf, int len)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+ u16* p = (u16*) buf;
-+
-+ for (len >>= 1; len; len--)
-+ if (*(p++) != ioread16 (&fcr->u16))
-+ return -EFAULT;
-+ return 0;
-+}
-+
-+static void tmio_nand_enable_hwecc (struct mtd_info* mtd, int mode)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ iowrite8 (FCR_MODE_HWECC_RESET, &fcr->mode);
-+ ioread8 (&fcr->u8); /* dummy read */
-+ iowrite8 (FCR_MODE_HWECC_CALC, &fcr->mode);
-+}
-+
-+static int tmio_nand_calculate_ecc (struct mtd_info* mtd, const u_char* dat,
-+ u_char* ecc_code)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+ unsigned int ecc;
-+
-+ iowrite8 (FCR_MODE_HWECC_RESULT, &fcr->mode);
-+
-+ ecc = ioread16 (&fcr->u16);
-+ ecc_code[1] = ecc; // 000-255 LP7-0
-+ ecc_code[0] = ecc >> 8; // 000-255 LP15-8
-+ ecc = ioread16 (&fcr->u16);
-+ ecc_code[2] = ecc; // 000-255 CP5-0,11b
-+ ecc_code[4] = ecc >> 8; // 256-511 LP7-0
-+ ecc = ioread16 (&fcr->u16);
-+ ecc_code[3] = ecc; // 256-511 LP15-8
-+ ecc_code[5] = ecc >> 8; // 256-511 CP5-0,11b
-+
-+ iowrite8 (FCR_MODE_DATA, &fcr->mode);
-+ return 0;
-+}
-+
-+static void tmio_hw_init (struct device *dev, struct tmio_nand *tmio)
-+{
-+ struct resource* nfcr = tmio_resource_control (dev);
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct tmio_nfhccr __iomem * ccr = tmio->ccr;
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+ unsigned long base;
-+
-+ /* (89h) SMD Buffer ON By TC6393XB SystemConfig gpibfc1 */
-+ tdev->ops->clock (dev, 1);
-+ tdev->ops->function (dev, 1);
-+
-+ /* (4Ch) CLKRUN Enable 1st spcrunc */
-+ iowrite8 (0x81, &ccr->icc);
-+
-+ /* (10h)BaseAddress 0x1000 spba.spba2 */
-+ base = nfcr->start - tdev->iomem->start;
-+ iowrite16 (base, ccr->base + 0);
-+ iowrite16 (base >> 16, ccr->base + 1);
-+
-+ /* (04h)Command Register I/O spcmd */
-+ iowrite8 (0x02, &ccr->command);
-+
-+ /* (62h) Power Supply Control ssmpwc */
-+ /* HardPowerOFF - SuspendOFF - PowerSupplyWait_4MS */
-+ iowrite8 (0x02, &ccr->nfpsc);
-+
-+ /* (63h) Detect Control ssmdtc */
-+ iowrite8 (0x02, &ccr->nfdc);
-+
-+ /* Interrupt status register clear sintst */
-+ iowrite8 (0x0f, &fcr->isr);
-+
-+ /* After power supply, Media are reset smode */
-+ iowrite8 (FCR_MODE_POWER_ON, &fcr->mode);
-+ iowrite8 (FCR_MODE_COMMAND, &fcr->mode);
-+ iowrite8 (NAND_CMD_RESET, &fcr->u8);
-+
-+ /* Standby Mode smode */
-+ iowrite8 (FCR_MODE_STANDBY, &fcr->mode);
-+
-+ mdelay (5);
-+}
-+
-+static void tmio_hw_stop (struct device *dev, struct tmio_nand *tmio)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ iowrite8 (FCR_MODE_POWER_OFF, &fcr->mode);
-+ tdev->ops->function (dev, 0);
-+ tdev->ops->clock (dev, 0);
-+}
-+
-+/*--------------------------------------------------------------------------*/
-+
-+#ifdef CONFIG_MTD_PARTITIONS
-+static const char *part_probes[] = { "cmdlinepart", NULL };
-+#endif
-+
-+static int tmio_probe (struct device *dev)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct tmio_nand_platform_data* tnpd = dev->platform_data;
-+ struct resource* ccr = tmio_resource_config (dev);
-+ struct resource* fcr = tmio_resource_control (dev);
-+ struct resource* irq = tmio_resource_irq (dev);
-+ struct tmio_nand* tmio;
-+ struct mtd_info* mtd;
-+ struct nand_chip* this;
-+ struct mtd_partition* parts;
-+ int nbparts = 0;
-+ int retval;
-+
-+ if (!tnpd)
-+ return -EINVAL;
-+
-+ retval = request_resource (tdev->iomem, ccr);
-+ if (retval)
-+ goto err_request_ccr;
-+
-+ retval = request_resource (tdev->iomem, fcr);
-+ if (retval)
-+ goto err_request_fcr;
-+
-+ tmio = kzalloc (sizeof *tmio, GFP_KERNEL);
-+ if (!tmio) {
-+ retval = -ENOMEM;
-+ goto err_kzalloc;
-+ }
-+
-+ dev_set_drvdata (dev, tmio);
-+ mtd = &tmio->mtd;
-+ this = &tmio->chip;
-+ mtd->priv = this;
-+ mtd->name = TMIO_NAME_NAND;
-+
-+ tmio->ccr = ioremap (ccr->start, ccr->end - ccr->start + 1);
-+ if (!tmio->ccr) {
-+ retval = -EIO;
-+ goto err_iomap_ccr;
-+ }
-+
-+ tmio->fcr = ioremap (fcr->start, fcr->end - fcr->start + 1);
-+ if (!tmio->fcr) {
-+ retval = -EIO;
-+ goto err_iomap_fcr;
-+ }
-+
-+ tmio_hw_init (dev, tmio);
-+
-+ /* Set address of NAND IO lines */
-+ this->IO_ADDR_R = tmio->fcr;
-+ this->IO_ADDR_W = tmio->fcr;
-+
-+ /* Set address of hardware control function */
-+ this->cmd_ctrl = tmio_nand_hwcontrol;
-+ this->dev_ready = tmio_nand_dev_ready;
-+ this->read_byte = tmio_nand_read_byte;
-+ this->write_buf = tmio_nand_write_buf;
-+ this->read_buf = tmio_nand_read_buf;
-+ this->verify_buf = tmio_nand_verify_buf;
-+
-+ /* set eccmode using hardware ECC */
-+ this->ecc.mode = NAND_ECC_HW;
-+ this->ecc.size = 512;
-+ this->ecc.bytes = 6;
-+ this->ecc.hwctl = tmio_nand_enable_hwecc;
-+ this->ecc.calculate = tmio_nand_calculate_ecc;
-+ this->ecc.correct = nand_correct_data;
-+ this->badblock_pattern = tnpd->badblock_pattern;
-+
-+ /* 15 us command delay time */
-+ this->chip_delay = 15;
-+
-+ if (irq->start) {
-+ retval = request_irq (irq->start, &tmio_irq,
-+ SA_INTERRUPT, irq->name, tmio);
-+ if (!retval) {
-+ tmio->irq = irq->start;
-+ this->waitfunc = tmio_nand_wait;
-+ } else
-+ mtd_warn (mtd, "request_irq error %d\n", retval);
-+ }
-+
-+ /* Scan to find existence of the device */
-+ if (nand_scan (mtd, 1)) {
-+ retval = -ENODEV;
-+ goto err_scan;
-+ }
-+
-+ /* Register the partitions */
-+#ifdef CONFIG_MTD_PARTITIONS
-+ nbparts = parse_mtd_partitions (mtd, part_probes, &parts, 0);
-+#endif
-+ if (nbparts <= 0) {
-+ parts = tnpd->partition;
-+ nbparts = tnpd->num_partitions;
-+ }
-+
-+ add_mtd_partitions (mtd, parts, nbparts);
-+ return 0;
-+
-+err_scan:
-+ if (tmio->irq)
-+ free_irq (tmio->irq, tmio);
-+ tmio_hw_stop (dev, tmio);
-+ iounmap (tmio->fcr);
-+err_iomap_fcr:
-+ iounmap (tmio->ccr);
-+err_iomap_ccr:
-+ kfree (tmio);
-+err_kzalloc:
-+ release_resource (fcr);
-+err_request_fcr:
-+ release_resource (ccr);
-+err_request_ccr:
-+ return retval;
-+}
-+
-+static int tmio_remove (struct device *dev)
-+{
-+ struct tmio_nand* tmio = dev_get_drvdata (dev);
-+
-+ nand_release (&tmio->mtd);
-+ if (tmio->irq)
-+ free_irq (tmio->irq, tmio);
-+ tmio_hw_stop (dev, tmio);
-+ iounmap (tmio->fcr);
-+ iounmap (tmio->ccr);
-+ kfree (tmio);
-+ release_resource (tmio_resource_control (dev));
-+ release_resource (tmio_resource_config (dev));
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+static int tmio_suspend (struct device *dev, pm_message_t state)
-+{
-+ tmio_hw_stop (dev, dev_get_drvdata (dev));
-+ return 0;
-+}
-+
-+static int tmio_resume (struct device *dev)
-+{
-+ tmio_hw_init (dev, dev_get_drvdata (dev));
-+ return 0;
-+}
-+#endif
-+
-+static struct device_driver tmio_driver = {
-+ .name = TMIO_NAME_NAND,
-+ .bus = &tmio_bus_type,
-+ .probe = tmio_probe,
-+ .remove = tmio_remove,
-+#ifdef CONFIG_PM
-+ .suspend = tmio_suspend,
-+ .resume = tmio_resume,
-+#endif
-+};
-+
-+static int __init tmio_init (void) {
-+ return driver_register (&tmio_driver);
-+}
-+
-+static void __exit tmio_exit (void) {
-+ driver_unregister (&tmio_driver);
-+}
-+
-+module_init (tmio_init);
-+module_exit (tmio_exit);
-+
-+MODULE_LICENSE ("GPL");
-+MODULE_AUTHOR ("Dirk Opfer, Chris Humbert");
-+MODULE_DESCRIPTION ("NAND flash driver on Toshiba Mobile IO controller");
-Index: git/drivers/mtd/nand/Kconfig
-===================================================================
---- git.orig/drivers/mtd/nand/Kconfig 2006-10-31 16:09:03.000000000 +0000
-+++ git/drivers/mtd/nand/Kconfig 2006-11-07 22:13:09.000000000 +0000
-@@ -63,6 +63,13 @@ config MTD_NAND_AMS_DELTA
- help
- Support for NAND flash on Amstrad E3 (Delta).
-
-+config MTD_NAND_TMIO
-+ tristate "NAND Flash device on Toshiba Mobile IO Controller"
-+ depends on MTD_NAND && TOSHIBA_TC6393XB
-+ help
-+ Support for NAND flash connected to a Toshiba Mobile IO
-+ Controller in some PDAs, including the Sharp SL6000x.
-+
- config MTD_NAND_TOTO
- tristate "NAND Flash device on TOTO board"
- depends on ARCH_OMAP && MTD_NAND && BROKEN
-Index: git/drivers/mtd/nand/Makefile
-===================================================================
---- git.orig/drivers/mtd/nand/Makefile 2006-10-31 16:09:03.000000000 +0000
-+++ git/drivers/mtd/nand/Makefile 2006-11-07 22:13:09.000000000 +0000
-@@ -22,5 +22,6 @@ obj-$(CONFIG_MTD_NAND_TS7250) += ts7250
- obj-$(CONFIG_MTD_NAND_NANDSIM) += nandsim.o
- obj-$(CONFIG_MTD_NAND_CS553X) += cs553x_nand.o
- obj-$(CONFIG_MTD_NAND_NDFC) += ndfc.o
-+obj-$(CONFIG_MTD_NAND_TMIO) += tmio.o
-
- nand-objs = nand_base.o nand_bbt.o
diff --git a/packages/linux/linux-rp-2.6.19+git/tmio-ohci-r6.patch b/packages/linux/linux-rp-2.6.19+git/tmio-ohci-r6.patch
deleted file mode 100644
index 9fdd2962c9..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/tmio-ohci-r6.patch
+++ /dev/null
@@ -1,929 +0,0 @@
-
- drivers/usb/host/Kconfig | 1
- drivers/usb/host/ohci-hcd.c | 1
- drivers/usb/host/ohci-tmio.c | 894 +++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 896 insertions(+)
-
-Index: git/drivers/usb/host/ohci-tmio.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/drivers/usb/host/ohci-tmio.c 2006-11-07 21:48:33.000000000 +0000
-@@ -0,0 +1,894 @@
-+/*
-+ * OHCI HCD (Host Controller Driver) for USB.
-+ *
-+ * (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
-+ * (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
-+ * (C) Copyright 2002 Hewlett-Packard Company
-+ *
-+ * Bus glue for Toshiba Mobile IO (TMIO) Controller's OHCI core
-+ * (C) Copyright 2005 Chris Humbert <mahadri-usb@drigon.com>
-+ *
-+ * This is known to work with the following variants:
-+ * TC6393XB revision 3 (32kB SRAM)
-+ *
-+ * The TMIO's OHCI core DMAs through a small internal buffer that
-+ * is directly addressable by the CPU. dma_declare_coherent_memory
-+ * and DMA bounce buffers allow the higher-level OHCI host driver to
-+ * work. However, the dma API doesn't handle dma mapping failures
-+ * well (dma_sg_map() is a prime example), so it is unusable.
-+ *
-+ * This HC pretends be a PIO-ish controller and uses the kernel's
-+ * generic allocator for the entire SRAM. Using the USB core's
-+ * usb_operations, we provide hcd_buffer_alloc/free. Using the OHCI's
-+ * ohci_ops, we provide memory management for OHCI's TDs and EDs. We
-+ * internally queue a URB's TDs until enough dma memory is available
-+ * to enqueue them with the HC.
-+ *
-+ * Written from sparse documentation from Toshiba and Sharp's driver
-+ * for the 2.4 kernel,
-+ * usb-ohci-tc6393.c (C) Copyright 2004 Lineo Solutions, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/fs.h>
-+#include <linux/mount.h>
-+#include <linux/pagemap.h>
-+#include <linux/init.h>
-+#include <linux/namei.h>
-+#include <linux/sched.h>
-+
-+#include <linux/genalloc.h>
-+#include <asm/dma-mapping.h> /* for consistent_sync() */
-+#include <asm/hardware/tmio.h>
-+
-+/*-------------------------------------------------------------------------*/
-+
-+/*
-+ * USB Host Controller Configuration Register
-+ */
-+struct tmio_uhccr {
-+ u8 x00[8];
-+ u8 revid; /* 0x08 Revision ID */
-+ u8 x01[7];
-+ u16 basel; /* 0x10 USB Control Register Base Address Low */
-+ u16 baseh; /* 0x12 USB Control Register Base Address High */
-+ u8 x02[0x2c];
-+ u8 ilme; /* 0x40 Internal Local Memory Enable */
-+ u8 x03[0x0b];
-+ u16 pm; /* 0x4c Power Management */
-+ u8 x04[2];
-+ u8 intc; /* 0x50 INT Control */
-+ u8 x05[3];
-+ u16 lmw1l; /* 0x54 Local Memory Window 1 LMADRS Low */
-+ u16 lmw1h; /* 0x56 Local Memory Window 1 LMADRS High */
-+ u16 lmw1bl; /* 0x58 Local Memory Window 1 Base Address Low */
-+ u16 lmw1bh; /* 0x5A Local Memory Window 1 Base Address High */
-+ u16 lmw2l; /* 0x5C Local Memory Window 2 LMADRS Low */
-+ u16 lmw2h; /* 0x5E Local Memory Window 2 LMADRS High */
-+ u16 lmw2bl; /* 0x60 Local Memory Window 2 Base Address Low */
-+ u16 lmw2bh; /* 0x62 Local Memory Window 2 Base Address High */
-+ u8 x06[0x98];
-+ u8 misc; /* 0xFC MISC */
-+ u8 x07[3];
-+} __attribute__ ((packed));
-+
-+union tmio_uhccr_pm {
-+ u16 raw;
-+struct {
-+ unsigned gcken:1; /* D0 */
-+ unsigned ckrnen:1; /* D1 */
-+ unsigned uspw1:1; /* D2 USB Port 1 Power Disable */
-+ unsigned uspw2:1; /* D3 USB Port 2 Power Disable */
-+ unsigned x00:4;
-+ unsigned pmee:1; /* D8 */
-+ unsigned x01:6;
-+ unsigned pmes:1; /* D15 */
-+} __attribute__ ((packed));
-+} __attribute__ ((packed));
-+
-+/*-------------------------------------------------------------------------*/
-+
-+struct tmio_dma_pool {
-+ struct device* dev;
-+ unsigned int size;
-+};
-+
-+struct tmio_hcd {
-+ struct gen_pool* poolp;
-+ struct usb_operations ops;
-+ struct tmio_dma_pool td_pool;
-+ struct tmio_dma_pool ed_pool;
-+
-+ struct tmio_uhccr __iomem *ccr;
-+ void __iomem * sram;
-+ size_t sram_len;
-+};
-+
-+#define hcd_to_tmio(hcd) ((struct tmio_hcd*)(hcd_to_ohci (hcd) + 1))
-+
-+struct tmio_td {
-+ void* data; /* td's data buffer */
-+ void __iomem * bounce; /* dma bounce buffer */
-+ dma_addr_t dma; /* bounce buffer dma address */
-+ size_t len; /* bounce buffer length */
-+ u32 info; /* parameter for td_fill */
-+};
-+
-+struct tmio_urb {
-+ int td_add; /* next index to be added */
-+ int td_queue; /* next index to be HC enqueued */
-+
-+ struct tmio_td td [0]; /* private td data */
-+};
-+
-+static inline struct tmio_urb *urb_to_turb (struct urb *urb)
-+{
-+ urb_priv_t* urb_priv = urb->hcpriv;
-+ return (struct tmio_urb*)(urb_priv->td + urb_priv->length);
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+/* gen_pool_alloc page allocator callback */
-+static unsigned long tmio_pool_callback(struct gen_pool *poolp)
-+{
-+ return 0;
-+}
-+
-+static inline void tmio_pool_destroy(struct tmio_hcd *tmio)
-+{
-+ struct gen_pool *poolp = tmio->poolp;
-+
-+ if (!poolp)
-+ return;
-+ if (poolp->h)
-+ kfree(poolp->h);
-+ kfree(poolp);
-+ tmio->poolp = NULL;
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+#define BOUNDED_XYL(x,y,ylen) (((y) <= (x)) && ((x) < ((y)+(ylen))))
-+#define BOUNDED_XYY(x,y1,y2) (((y1) <= (x)) && ((x) < (y2)))
-+
-+static inline dma_addr_t tmio_virt_to_dma (struct usb_hcd *hcd, void *vaddr)
-+{
-+ struct resource* sram = tmio_resource_mem (hcd->self.controller);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+
-+ return BOUNDED_XYL (vaddr, tmio->sram, tmio->sram_len)
-+ ? sram->start + (vaddr - tmio->sram)
-+ : ~0;
-+}
-+
-+static inline void* tmio_dma_to_virt (struct usb_hcd *hcd, dma_addr_t handle)
-+{
-+ struct resource* sram = tmio_resource_mem (hcd->self.controller);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+
-+ return BOUNDED_XYY (handle, sram->start, sram->end + 1)
-+ ? tmio->sram + handle - sram->start
-+ : NULL;
-+}
-+
-+/*
-+ * allocate dma-able memory in the device's internal sram
-+ *
-+ * The generic pool allocator's minimum chunk size is 32 bytes,
-+ * which is the cache line size on the PXA255, so we don't need
-+ * to do anything special for smaller requests.
-+ */
-+static inline void *tmio_dma_alloc (struct device *dev, size_t size,
-+ dma_addr_t *handle, gfp_t mem_flags)
-+{
-+ struct usb_hcd* hcd = dev_get_drvdata (dev);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+ void* virt = (void*) gen_pool_alloc (tmio->poolp, size);
-+
-+ return (*handle = tmio_virt_to_dma (hcd, virt)) == ~0 ? NULL : virt;
-+}
-+
-+static inline void tmio_dma_free (struct device *dev, size_t size,
-+ void *cpu_addr, dma_addr_t handle)
-+{
-+ struct usb_hcd* hcd = dev_get_drvdata (dev);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+ dma_addr_t dma = tmio_virt_to_dma (hcd, cpu_addr);
-+
-+ if (unlikely (dma == ~0)) {
-+ dev_err (dev, "trying to free bad address 0x%p\n", cpu_addr);
-+ return;
-+ }
-+
-+ if (unlikely (handle != dma))
-+ dev_err (dev, "dma address mismatch for 0x%p: %08x != %08x\n",
-+ cpu_addr, handle, dma);
-+
-+ gen_pool_free (tmio->poolp, (unsigned long) cpu_addr, size);
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static void *tmio_dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
-+ dma_addr_t *handle)
-+{
-+ struct tmio_dma_pool *tdp = (struct tmio_dma_pool*) pool;
-+ return tmio_dma_alloc (tdp->dev, tdp->size, handle, mem_flags);
-+}
-+
-+static void
-+tmio_dma_pool_free (struct dma_pool *pool, void *vaddr, dma_addr_t addr)
-+{
-+ struct tmio_dma_pool *tdp = (struct tmio_dma_pool*) pool;
-+ return tmio_dma_free (tdp->dev, tdp->size, vaddr, addr);
-+}
-+
-+static void *tmio_buffer_alloc (struct usb_bus *bus, size_t size,
-+ gfp_t mem_flags, dma_addr_t *dma)
-+{
-+ return tmio_dma_alloc (bus->controller, size, dma, mem_flags);
-+}
-+
-+static void tmio_buffer_free (struct usb_bus *bus, size_t size,
-+ void *addr, dma_addr_t dma)
-+{
-+ tmio_dma_free (bus->controller, size, addr, dma);
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static void tmio_hc_stop (struct usb_hcd *hcd)
-+{
-+ struct device* dev = hcd->self.controller;
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+ struct tmio_uhccr __iomem* ccr = tmio->ccr;
-+ union tmio_uhccr_pm pm = {0};
-+
-+ pm.gcken = 1;
-+ pm.ckrnen = 1;
-+ pm.uspw1 = 1;
-+ pm.uspw2 = 1;
-+
-+ iowrite8 (0, &ccr->intc);
-+ iowrite8 (0, &ccr->ilme);
-+ iowrite16(0, &ccr->basel);
-+ iowrite16(0, &ccr->baseh);
-+ iowrite16(pm.raw, &ccr->pm);
-+
-+ tdev->ops->function (dev, 0);
-+ tdev->ops->clock (dev, 0);
-+}
-+
-+static void tmio_hc_start (struct usb_hcd *hcd)
-+{
-+ struct device* dev = hcd->self.controller;
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+ struct tmio_uhccr __iomem* ccr = tmio->ccr;
-+ union tmio_uhccr_pm pm = {0};
-+
-+ pm.pmes = 1;
-+ pm.pmee = 1;
-+ pm.ckrnen = 1;
-+ pm.gcken = 1;
-+
-+ tdev->ops->clock (dev, 1);
-+ tdev->ops->function (dev, 1);
-+
-+ iowrite16(pm.raw, &ccr->pm);
-+ iowrite16(hcd->rsrc_start, &ccr->basel);
-+ iowrite16(hcd->rsrc_start >> 16, &ccr->baseh);
-+ iowrite8 (1, &ccr->ilme);
-+ iowrite8 (2, &ccr->intc);
-+
-+ consistent_sync (tmio->sram, tmio->sram_len, DMA_BIDIRECTIONAL);
-+
-+ dev_info (dev, "revision %d @ 0x%08llx, irq %d\n",
-+ ioread8 (&ccr->revid), hcd->rsrc_start, hcd->irq);
-+}
-+
-+static void tmio_stop (struct usb_hcd *hcd)
-+{
-+ struct ohci_hcd* ohci = hcd_to_ohci (hcd);
-+
-+ /* NULL these so ohci_stop() doesn't try to free them */
-+ ohci->hcca = NULL;
-+ ohci->td_cache = NULL;
-+ ohci->ed_cache = NULL;
-+
-+ ohci_stop (hcd);
-+ tmio_hc_stop (hcd);
-+ tmio_pool_destroy (hcd_to_tmio (hcd));
-+
-+ /* We don't free the hcca because tmio_hc_stop() turns off
-+ * the sram and the memory allocation data is destroyed. */
-+}
-+
-+static int tmio_start (struct usb_hcd *hcd)
-+{
-+ struct device* dev = hcd->self.controller;
-+ struct ohci_hcd* ohci = hcd_to_ohci (hcd);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+ int retval;
-+
-+ tmio_hc_start (hcd);
-+
-+ tmio->poolp = gen_pool_create(0, fls(tmio->sram_len) - 1,
-+ tmio_pool_callback, 0);
-+ if (!tmio->poolp) {
-+ retval = -ENOMEM;
-+ goto err_gen_pool_create;
-+ }
-+
-+ gen_pool_free (tmio->poolp, (unsigned long)(tmio->sram),
-+ tmio->sram_len);
-+
-+ ohci->hcca = tmio_dma_alloc (dev, sizeof *ohci->hcca,
-+ &ohci->hcca_dma, GFP_KERNEL);
-+ if (!ohci->hcca) {
-+ retval = -ENOMEM;
-+ goto err_hcca_alloc;
-+ }
-+
-+ /* for our dma_pool_alloc/free hooks */
-+ ohci->td_cache = (struct dma_pool*) &tmio->td_pool;
-+ ohci->ed_cache = (struct dma_pool*) &tmio->ed_pool;
-+
-+ if ((retval = ohci_init (ohci)) < 0)
-+ goto err_ohci_init;
-+
-+ if ((retval = ohci_run (ohci)) < 0)
-+ goto err_ohci_run;
-+
-+ return 0;
-+
-+err_ohci_run:
-+ err ("can't start %s", hcd->self.bus_name);
-+err_ohci_init:
-+err_hcca_alloc:
-+err_gen_pool_create:
-+ tmio_stop (hcd);
-+ return retval;
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static inline void *tmio_urb_dma_to_virt(struct urb *urb, dma_addr_t dma)
-+{
-+ if (BOUNDED_XYL(dma, urb->transfer_dma, urb->transfer_buffer_length))
-+ return urb->transfer_buffer + dma - urb->transfer_dma;
-+
-+ if (BOUNDED_XYL(dma, urb->setup_dma, sizeof (struct usb_ctrlrequest)))
-+ return urb->setup_packet + dma - urb->setup_dma;
-+
-+ return NULL;
-+}
-+
-+static struct tmio_td* tmio_td_find (struct td *td, int *index)
-+{
-+ struct urb* urb = td->urb;
-+ urb_priv_t* urb_priv = urb->hcpriv;
-+ struct tmio_urb* turb = urb_to_turb (urb);
-+ int i;
-+
-+ for (i=0; i < urb_priv->length; i++)
-+ if (urb_priv->td[i] == td) {
-+ *index = i;
-+ return turb->td + i;
-+ }
-+
-+ return NULL;
-+}
-+
-+/*
-+ * map the td's data to dma-able memory
-+ *
-+ * if this td transfers data,
-+ * sets tmtd->data to the urb's data buffer
-+ * sets tmtd->dma to dma-able memory
-+ * sets tmtd->bounce to non-NULL if a bounce buffer is allocated
-+ * copies the urb's data buffer to the bounce buffer if necessary
-+ */
-+static int tmio_td_dma_map (struct ohci_hcd *ohci, struct urb *urb,
-+ struct tmio_td *tmtd, int idx)
-+{
-+ struct usb_hcd* hcd = ohci_to_hcd (ohci);
-+ struct device* dev = hcd->self.controller;
-+ dma_addr_t dma;
-+
-+ if (!tmtd->len)
-+ return 0;
-+
-+ if (tmio_dma_to_virt (hcd, tmtd->dma))
-+ return 0;
-+
-+ tmtd->data = tmio_urb_dma_to_virt (urb, tmtd->dma);
-+ if (unlikely (!tmtd->data)) {
-+ dev_err (dev, "TD has bad dma address 0x%08x\n", tmtd->dma);
-+ return 0;
-+ }
-+
-+ tmtd->bounce = tmio_dma_alloc (dev, tmtd->len, &dma, GFP_ATOMIC);
-+ if (!tmtd->bounce)
-+ return -ENOMEM;
-+
-+ if ((usb_pipecontrol (urb->pipe) && !idx) || usb_pipeout (urb->pipe)) {
-+ consistent_sync (tmtd->bounce, tmtd->len, DMA_TO_DEVICE);
-+ memcpy (tmtd->bounce, tmtd->data, tmtd->len);
-+ } else
-+ consistent_sync (tmtd->bounce, tmtd->len, DMA_FROM_DEVICE);
-+
-+ tmtd->dma = dma;
-+ return 0;
-+}
-+
-+/*
-+ * unmaps the td's data from dma-able memory
-+ *
-+ * if a bounce buffer has been allocated,
-+ * copy the bounce buffer to the urb's data buffer if necessary
-+ * free the bounce buffer
-+ */
-+static void tmio_td_dma_unmap (struct ohci_hcd *ohci, struct td *td)
-+{
-+ struct device* dev = (ohci_to_hcd (ohci))->self.controller;
-+ struct urb* urb = td->urb;
-+ int idx;
-+ struct tmio_td* tmtd = tmio_td_find (td, &idx);
-+
-+ if (!tmtd->bounce)
-+ return;
-+
-+ if (usb_pipein (urb->pipe) && (usb_pipecontrol (urb->pipe) ? idx : 1)) {
-+ memcpy (tmtd->data, tmtd->bounce, tmtd->len);
-+ consistent_sync (tmtd->data, tmtd->len, DMA_TO_DEVICE);
-+ }
-+
-+ tmio_dma_free (dev, tmtd->len, tmtd->bounce, tmtd->dma);
-+}
-+
-+static int tmio_urb_runqueue (struct ohci_hcd *ohci, struct urb *urb)
-+{
-+ struct tmio_urb* turb = urb_to_turb (urb);
-+ urb_priv_t* urb_priv= urb->hcpriv;
-+ int start = turb->td_queue;
-+ int retval = 0;
-+ int i;
-+
-+ for (i = start; i < turb->td_add; i = ++turb->td_queue) {
-+ struct tmio_td *tmtd = turb->td + i;
-+
-+ if ((retval = tmio_td_dma_map (ohci, urb, tmtd, i)))
-+ break;
-+
-+ td_fill (ohci, tmtd->info, tmtd->dma, tmtd->len, urb, i);
-+ }
-+
-+ if (i <= start)
-+ return retval;
-+
-+ /* kickstart the appropriate list */
-+ wmb ();
-+ switch (urb_priv->ed->type) {
-+ case PIPE_BULK:
-+ ohci_writel (ohci, OHCI_BLF, &ohci->regs->cmdstatus);
-+ break;
-+ case PIPE_CONTROL:
-+ ohci_writel (ohci, OHCI_CLF, &ohci->regs->cmdstatus);
-+ break;
-+ }
-+
-+ return retval;
-+}
-+
-+/*
-+ * This needs to be called with ohci->lock held so the pending urb list
-+ * isn't modified.
-+ */
-+static int tmio_ohci_runqueue (struct ohci_hcd *ohci)
-+{
-+ urb_priv_t* priv;
-+ int retval = 0;
-+
-+ list_for_each_entry_reverse (priv, &ohci->pending, pending)
-+ if ((retval = tmio_urb_runqueue (ohci, priv->td[0]->urb)))
-+ return retval;
-+
-+ return retval;
-+}
-+
-+static void tmio_td_fill (struct ohci_hcd *ohci, u32 info,
-+ dma_addr_t data, int len, struct urb *urb, int index)
-+{
-+ struct tmio_urb* turb = urb_to_turb (urb);
-+ struct tmio_td* tmtd = turb->td + index;
-+
-+ tmtd->data = NULL;
-+ tmtd->bounce = NULL;
-+ tmtd->dma = data;
-+ tmtd->len = len;
-+ tmtd->info = info;
-+ turb->td_add = index + 1;
-+}
-+
-+static void
-+tmio_td_done (struct ohci_hcd *ohci, struct urb *urb, struct td *td)
-+{
-+ tmio_td_dma_unmap (ohci, td);
-+ td_done (ohci, urb, td);
-+}
-+
-+const static struct ohci_ops tmio_ops = {
-+ .dma_pool_alloc = tmio_dma_pool_alloc,
-+ .dma_pool_free = tmio_dma_pool_free,
-+ .td_fill = tmio_td_fill,
-+ .td_done = tmio_td_done,
-+};
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static irqreturn_t tmio_irq (struct usb_hcd *hcd, struct pt_regs *ptregs)
-+{
-+ irqreturn_t retval = ohci_irq (hcd, ptregs);
-+
-+ if (retval == IRQ_HANDLED) {
-+ struct ohci_hcd *ohci = hcd_to_ohci (hcd);
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&ohci->lock, flags);
-+ tmio_ohci_runqueue (ohci);
-+ spin_unlock_irqrestore (&ohci->lock, flags);
-+ }
-+
-+ return retval;
-+}
-+
-+/*
-+ * This is ohci_urb_enqueue with:
-+ * dma address sanitization for tmio_urb_dma_to_virt()
-+ * allocate extra space in urb_priv for our private data
-+ * initialize urb_priv->td[0]->urb for tmio_ohci_runqueue()
-+ * call tmio_ohci_runqueue() after submitting TDs
-+ */
-+static int tmio_urb_enqueue (
-+ struct usb_hcd *hcd,
-+ struct usb_host_endpoint *ep,
-+ struct urb *urb,
-+ gfp_t mem_flags
-+) {
-+ struct ohci_hcd *ohci = hcd_to_ohci (hcd);
-+ struct ed *ed;
-+ urb_priv_t *urb_priv;
-+ unsigned int pipe = urb->pipe;
-+ int i, size = 0;
-+ unsigned long flags;
-+ int retval = 0;
-+
-+#ifdef OHCI_VERBOSE_DEBUG
-+ urb_print (urb, "SUB", usb_pipein (pipe));
-+#endif
-+
-+ /* make sure we can convert dma offsets back to virtual addresses */
-+ if (!tmio_dma_to_virt (hcd, urb->setup_dma))
-+ urb->setup_dma = 0;
-+
-+ if (!tmio_dma_to_virt (hcd, urb->transfer_dma))
-+ urb->transfer_dma = sizeof (struct usb_ctrlrequest);
-+
-+ /* every endpoint has a ed, locate and maybe (re)initialize it */
-+ if (! (ed = ed_get (ohci, ep, urb->dev, pipe, urb->interval)))
-+ return -ENOMEM;
-+
-+ /* for the private part of the URB we need the number of TDs (size) */
-+ switch (ed->type) {
-+ case PIPE_CONTROL:
-+ /* td_submit_urb() doesn't yet handle these */
-+ if (urb->transfer_buffer_length > 4096)
-+ return -EMSGSIZE;
-+
-+ /* 1 TD for setup, 1 for ACK, plus ... */
-+ size = 2;
-+ /* FALLTHROUGH */
-+ // case PIPE_INTERRUPT:
-+ // case PIPE_BULK:
-+ default:
-+ /* one TD for every 4096 Bytes (can be upto 8K) */
-+ size += urb->transfer_buffer_length / 4096;
-+ /* ... and for any remaining bytes ... */
-+ if ((urb->transfer_buffer_length % 4096) != 0)
-+ size++;
-+ /* ... and maybe a zero length packet to wrap it up */
-+ if (size == 0)
-+ size++;
-+ else if ((urb->transfer_flags & URB_ZERO_PACKET) != 0
-+ && (urb->transfer_buffer_length
-+ % usb_maxpacket (urb->dev, pipe,
-+ usb_pipeout (pipe))) == 0)
-+ size++;
-+ break;
-+ case PIPE_ISOCHRONOUS: /* number of packets from URB */
-+ size = urb->number_of_packets;
-+ break;
-+ }
-+
-+ /* allocate the private part of the URB */
-+ urb_priv = kzalloc (sizeof (urb_priv_t)
-+ + size * sizeof (struct td*)
-+ + sizeof (struct tmio_urb)
-+ + size * sizeof (struct tmio_td),
-+ mem_flags);
-+ if (!urb_priv)
-+ return -ENOMEM;
-+ INIT_LIST_HEAD (&urb_priv->pending);
-+ urb_priv->length = size;
-+ urb_priv->ed = ed;
-+
-+ /* allocate the TDs (deferring hash chain updates) */
-+ for (i = 0; i < size; i++) {
-+ urb_priv->td [i] = td_alloc (ohci, mem_flags);
-+ if (!urb_priv->td [i]) {
-+ urb_priv->length = i;
-+ urb_free_priv (ohci, urb_priv);
-+ return -ENOMEM;
-+ }
-+ urb_priv->td [i]->urb = urb;
-+ }
-+
-+ spin_lock_irqsave (&ohci->lock, flags);
-+
-+ /* don't submit to a dead HC */
-+ if (!HC_IS_RUNNING(hcd->state)) {
-+ retval = -ENODEV;
-+ goto fail;
-+ }
-+
-+ /* in case of unlink-during-submit */
-+ spin_lock (&urb->lock);
-+ if (urb->status != -EINPROGRESS) {
-+ spin_unlock (&urb->lock);
-+ urb->hcpriv = urb_priv;
-+ finish_urb (ohci, urb, NULL);
-+ retval = 0;
-+ goto fail;
-+ }
-+
-+ /* schedule the ed if needed */
-+ if (ed->state == ED_IDLE) {
-+ retval = ed_schedule (ohci, ed);
-+ if (retval < 0)
-+ goto fail0;
-+ if (ed->type == PIPE_ISOCHRONOUS) {
-+ u16 frame = ohci_frame_no(ohci);
-+
-+ /* delay a few frames before the first TD */
-+ frame += max_t (u16, 8, ed->interval);
-+ frame &= ~(ed->interval - 1);
-+ frame |= ed->branch;
-+ urb->start_frame = frame;
-+
-+ /* yes, only URB_ISO_ASAP is supported, and
-+ * urb->start_frame is never used as input.
-+ */
-+ }
-+ } else if (ed->type == PIPE_ISOCHRONOUS)
-+ urb->start_frame = ed->last_iso + ed->interval;
-+
-+ /* fill the TDs and link them to the ed; and
-+ * enable that part of the schedule, if needed
-+ * and update count of queued periodic urbs
-+ */
-+ urb->hcpriv = urb_priv;
-+ td_submit_urb (ohci, urb);
-+ tmio_ohci_runqueue (ohci);
-+
-+fail0:
-+ spin_unlock (&urb->lock);
-+fail:
-+ if (retval)
-+ urb_free_priv (ohci, urb_priv);
-+ spin_unlock_irqrestore (&ohci->lock, flags);
-+ return retval;
-+}
-+
-+static const struct hc_driver tmio_hc_driver = {
-+ .description = hcd_name,
-+ .product_desc = "TMIO OHCI USB Host Controller",
-+ .hcd_priv_size = sizeof (struct ohci_hcd)
-+ + sizeof (struct tmio_hcd),
-+
-+ /* generic hardware linkage */
-+ .irq = tmio_irq,
-+ .flags = HCD_USB11 | HCD_MEMORY,
-+
-+ /* basic lifecycle operations */
-+ .start = tmio_start,
-+ .stop = tmio_stop,
-+
-+ /* managing i/o requests and associated device resources */
-+ .urb_enqueue = tmio_urb_enqueue,
-+ .urb_dequeue = ohci_urb_dequeue,
-+ .endpoint_disable = ohci_endpoint_disable,
-+
-+ /* scheduling support */
-+ .get_frame_number = ohci_get_frame,
-+
-+ /* root hub support */
-+ .hub_status_data = ohci_hub_status_data,
-+ .hub_control = ohci_hub_control,
-+#ifdef CONFIG_PM
-+ .bus_suspend = ohci_bus_suspend,
-+ .bus_resume = ohci_bus_resume,
-+#endif
-+ .start_port_reset = ohci_start_port_reset,
-+};
-+
-+/*-------------------------------------------------------------------------*/
-+
-+/* configure so an HC device and id are always provided */
-+/* always called with process context; sleeping is OK */
-+
-+/**
-+ * tmio_probe - initialize TMIO-based HCDs
-+ * Context: !in_interrupt()
-+ *
-+ * Allocates basic resources for this USB host controller, and
-+ * then invokes the start() method for the HCD associated with it
-+ * through the hotplug entry's driver_data.
-+ */
-+static int tmio_probe (struct device *dev)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct resource* config = tmio_resource_config (dev);
-+ struct resource* regs = tmio_resource_control (dev);
-+ struct resource* sram = tmio_resource_mem (dev);
-+ struct resource* irq = tmio_resource_irq (dev);
-+ struct usb_operations* ops;
-+ struct tmio_hcd* tmio;
-+ struct ohci_hcd* ohci;
-+ struct usb_hcd* hcd;
-+ int retval;
-+
-+ if (usb_disabled ())
-+ return -ENODEV;
-+
-+ if (dev->dma_mask || dev->coherent_dma_mask) {
-+ dev_err (dev, "DMA not supported\n");
-+ return -ENODEV;
-+ }
-+
-+ hcd = usb_create_hcd (&tmio_hc_driver, dev, dev->bus_id);
-+ if (!hcd) {
-+ retval = -ENOMEM;
-+ goto err_create_hcd;
-+ }
-+
-+ tmio = hcd_to_tmio (hcd);
-+ tmio->td_pool.dev = dev;
-+ tmio->ed_pool.dev = dev;
-+ tmio->td_pool.size = sizeof (struct td);
-+ tmio->ed_pool.size = sizeof (struct ed);
-+ ohci = hcd_to_ohci (hcd);
-+ ohci_hcd_init (ohci);
-+ ohci->ops = &tmio_ops;
-+
-+ retval = request_resource (tdev->iomem, config);
-+ if (retval)
-+ goto err_request_config_resource;
-+
-+ retval = request_resource (tdev->iomem, regs);
-+ if (retval)
-+ goto err_request_regs_resource;
-+
-+ retval = request_resource (tdev->iomem, sram);
-+ if (retval)
-+ goto err_request_sram_resource;
-+
-+ hcd->rsrc_start = regs->start;
-+ hcd->rsrc_len = regs->end - regs->start + 1;
-+ tmio->sram_len = sram->end - sram->start + 1;
-+
-+ tmio->ccr = ioremap (config->start, config->end - config->start + 1);
-+ if (!tmio->ccr) {
-+ retval = -ENOMEM;
-+ goto err_ioremap_ccr;
-+ }
-+
-+ hcd->regs = ioremap (hcd->rsrc_start, hcd->rsrc_len);
-+ if (!hcd->regs) {
-+ retval = -ENOMEM;
-+ goto err_ioremap_regs;
-+ }
-+
-+ tmio->sram = ioremap (sram->start, tmio->sram_len);
-+ if (!tmio->sram) {
-+ retval = -ENOMEM;
-+ goto err_ioremap_sram;
-+ }
-+
-+ /* drivers should use our coherent buffer allocator */
-+ ops = &tmio->ops;
-+ memcpy (ops, hcd->self.op, sizeof *ops);
-+ ops->buffer_alloc = tmio_buffer_alloc;
-+ ops->buffer_free = tmio_buffer_free;
-+ hcd->self.op = ops;
-+
-+ retval = usb_add_hcd (hcd, irq->start, SA_INTERRUPT);
-+ if (retval)
-+ goto err_usb_add_hcd;
-+
-+ return 0;
-+
-+err_usb_add_hcd:
-+ iounmap (tmio->sram);
-+err_ioremap_sram:
-+ iounmap (hcd->regs);
-+err_ioremap_regs:
-+ iounmap (tmio->ccr);
-+err_ioremap_ccr:
-+ release_resource (sram);
-+err_request_sram_resource:
-+ release_resource (regs);
-+err_request_regs_resource:
-+ release_resource (config);
-+err_request_config_resource:
-+ usb_put_hcd (hcd);
-+err_create_hcd:
-+ return retval;
-+}
-+
-+/* may be called without controller electrically present */
-+/* may be called with controller, bus, and devices active */
-+
-+/**
-+ * tmio_remove - shutdown processing for TMIO-based HCDs
-+ * @dev: USB Host Controller being removed
-+ * Context: !in_interrupt()
-+ *
-+ * Reverses the effect of tmio_probe(), first invoking
-+ * the HCD's stop() method. It is always called from a thread
-+ * context, normally "rmmod", "apmd", or something similar.
-+ */
-+static int tmio_remove (struct device *dev)
-+{
-+ struct usb_hcd* hcd = dev_get_drvdata (dev);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+
-+ usb_remove_hcd (hcd);
-+ iounmap (tmio->sram);
-+ iounmap (hcd->regs);
-+ iounmap (tmio->ccr);
-+ release_resource (tmio_resource_mem (dev));
-+ release_resource (tmio_resource_control (dev));
-+ release_resource (tmio_resource_config (dev));
-+ usb_put_hcd (hcd);
-+ return 0;
-+}
-+
-+static struct device_driver tmio_ohci = {
-+ .name = TMIO_NAME_OHCI,
-+ .bus = &tmio_bus_type,
-+ .probe = tmio_probe,
-+ .remove = tmio_remove,
-+};
-+
-+static int __init tmio_init (void)
-+{
-+ dbg (DRIVER_INFO " (%s)", TMIO_SOC_NAME);
-+ dbg ("block sizes: ed %d td %d",
-+ sizeof (struct ed), sizeof (struct td));
-+
-+ return driver_register (&tmio_ohci);
-+}
-+
-+static void __exit tmio_exit (void)
-+{
-+ driver_unregister (&tmio_ohci);
-+}
-+
-+module_init (tmio_init);
-+module_exit (tmio_exit);
-Index: git/drivers/usb/host/Kconfig
-===================================================================
---- git.orig/drivers/usb/host/Kconfig 2006-11-07 21:46:32.000000000 +0000
-+++ git/drivers/usb/host/Kconfig 2006-11-07 21:48:38.000000000 +0000
-@@ -84,6 +84,7 @@ config USB_OHCI_HCD
- depends on USB && USB_ARCH_HAS_OHCI
- select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3
- select I2C if ARCH_PNX4008
-+ select GENERIC_ALLOCATOR if TOSHIBA_TC6393XB
- ---help---
- The Open Host Controller Interface (OHCI) is a standard for accessing
- USB 1.1 host controller hardware. It does more in hardware than Intel's
-Index: git/drivers/usb/host/ohci-hcd.c
-===================================================================
---- git.orig/drivers/usb/host/ohci-hcd.c 2006-11-07 21:46:32.000000000 +0000
-+++ git/drivers/usb/host/ohci-hcd.c 2006-11-07 21:48:33.000000000 +0000
-@@ -944,6 +944,7 @@ MODULE_LICENSE ("GPL");
- || defined(CONFIG_ARCH_OMAP) \
- || defined (CONFIG_ARCH_LH7A404) \
- || defined (CONFIG_PXA27x) \
-+ || defined (CONFIG_TOSHIBA_TC6393XB) \
- || defined (CONFIG_ARCH_EP93XX) \
- || defined (CONFIG_SOC_AU1X00) \
- || defined (CONFIG_USB_OHCI_HCD_PPC_SOC) \
diff --git a/packages/linux/linux-rp-2.6.19+git/tmio-tc6393-r8.patch b/packages/linux/linux-rp-2.6.19+git/tmio-tc6393-r8.patch
deleted file mode 100644
index 2f1b47d783..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/tmio-tc6393-r8.patch
+++ /dev/null
@@ -1,800 +0,0 @@
- arch/arm/common/Kconfig | 3
- arch/arm/common/Makefile | 1
- arch/arm/common/tc6393xb.c | 668 ++++++++++++++++++++++++++++++++++++++++
- arch/arm/mach-pxa/Kconfig | 1
- include/asm-arm/arch-pxa/irqs.h | 10
- include/asm-arm/hardware/tmio.h | 44 ++
- 6 files changed, 727 insertions(+)
-
-Index: git/arch/arm/common/tc6393xb.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/arch/arm/common/tc6393xb.c 2006-11-07 22:14:49.000000000 +0000
-@@ -0,0 +1,668 @@
-+/*
-+ * Toshiba TC6393XB SoC support
-+ *
-+ * Maintainer: Chris Humbert <mahadri-kernel@drigon.com>
-+ *
-+ * Copyright (c) 2005-2006 Chris Humbert
-+ * Copyright (c) 2005 Dirk Opfer
-+ *
-+ * Based on code written by Sharp/Lineo for 2.4 kernels
-+ * Based on locomo.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/delay.h>
-+#include <linux/errno.h>
-+#include <linux/ioport.h>
-+#include <linux/device.h>
-+#include <linux/platform_device.h>
-+#include <linux/slab.h>
-+#include <linux/spinlock.h>
-+#include <linux/fb.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/mach-types.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#include <asm/mach/irq.h>
-+#include <asm/arch/irqs.h>
-+#include <asm/hardware/tmio.h>
-+
-+#ifndef TMIO_SOC_TC6393XB
-+#error "TC6393XB SoC not configured"
-+#endif
-+
-+/*--------------------------------------------------------------------------*/
-+
-+/* cell ids must be 0-based because they are used as array indexes. */
-+#define TC6393_CELL_NAND 0
-+#define TC6393_CELL_SD 1
-+#define TC6393_CELL_OHCI 2
-+#define TC6393_CELL_SERIAL 3
-+#define TC6393_CELL_LCD 4
-+#define TC6393_NUM_CELLS 5
-+
-+#define TC6393_RESOURCE(_name, _start, _end, _flags) \
-+ { \
-+ .name = _name, \
-+ .start = _start, \
-+ .end = _end, \
-+ .flags = _flags, \
-+ }
-+
-+#define TC6393_MEM(name, start, size) \
-+ TC6393_RESOURCE(name, start, (start) + (size) - 1, IORESOURCE_MEM)
-+
-+#define TC6393_IRQ(name, irq) \
-+ TC6393_RESOURCE(name, irq, irq, IORESOURCE_IRQ)
-+
-+const static struct resource tc6393_NAND_resource[] = {
-+ TC6393_MEM (TMIO_NAME_NAND, 0x000100, 0x100),
-+ TC6393_MEM (TMIO_NAME_NAND, 0x001000, 0x008),
-+ TC6393_MEM (TMIO_NAME_NAND, 0, 0),
-+ TC6393_IRQ (TMIO_NAME_NAND, IRQ_TC6393_NAND),
-+};
-+
-+const static struct resource tc6393_SD_resource[] = {
-+ TC6393_MEM (TMIO_NAME_SD, 0x000200, 0x100),
-+ TC6393_MEM (TMIO_NAME_SD, 0x002000, 0x200),
-+ TC6393_MEM (TMIO_NAME_SD, 0, 0),
-+ TC6393_IRQ (TMIO_NAME_SD, IRQ_TC6393_SD),
-+};
-+
-+const static struct resource tc6393_OHCI_resource[] = {
-+ TC6393_MEM (TMIO_NAME_OHCI, 0x000300, 0x100),
-+ TC6393_MEM (TMIO_NAME_OHCI, 0x003000, 0x100),
-+ TC6393_MEM (TMIO_NAME_OHCI, 0x010000, 32 * 1024),
-+ TC6393_IRQ (TMIO_NAME_OHCI, IRQ_TC6393_OHCI),
-+};
-+
-+const static struct resource tc6393_SERIAL_resource[] = {
-+ TC6393_MEM (TMIO_NAME_SERIAL, 0x000400, 0x100),
-+ TC6393_MEM (TMIO_NAME_SERIAL, 0x004000, 0x100),
-+ TC6393_MEM (TMIO_NAME_SERIAL, 0, 0),
-+ TC6393_IRQ (TMIO_NAME_SERIAL, IRQ_TC6393_SERIAL),
-+};
-+
-+const static struct resource tc6393_LCD_resource[] = {
-+ TC6393_MEM (TMIO_NAME_LCD, 0x000500, 0x100),
-+ TC6393_MEM (TMIO_NAME_LCD, 0x005000, 0x200),
-+ TC6393_MEM (TMIO_NAME_LCD, 0x100000, 1024 * 1024),
-+ TC6393_IRQ (TMIO_NAME_LCD, IRQ_TC6393_LCD),
-+};
-+
-+#define TC6393_CELL(_NAME) \
-+ [TC6393_CELL_##_NAME] = { \
-+ .name = TMIO_NAME_##_NAME, \
-+ .id = TC6393_CELL_##_NAME, \
-+ .resource = tc6393_##_NAME##_resource, \
-+ .num_resources = ARRAY_SIZE (tc6393_##_NAME##_resource), \
-+ }
-+
-+struct tc6393_cell {
-+ const char* name;
-+ unsigned int id;
-+ const struct resource* resource;
-+ unsigned int num_resources;
-+};
-+
-+const static struct tc6393_cell tc6393_cell [TC6393_NUM_CELLS] = {
-+ TC6393_CELL (NAND ),
-+ TC6393_CELL (SD ),
-+ TC6393_CELL (OHCI ),
-+ TC6393_CELL (SERIAL ),
-+ TC6393_CELL (LCD ),
-+};
-+
-+/*--------------------------------------------------------------------------*/
-+
-+/*
-+ * TC6393 System Configuration Register
-+ */
-+struct tc6393_scr {
-+ u8 x00[8];
-+ u8 revid; /* 0x08 Revision ID */
-+ u8 x01[0x47];
-+ u8 isr; /* 0x50 Interrupt Status */
-+ u8 x02;
-+ u8 imr; /* 0x52 Interrupt Mask */
-+ u8 x03;
-+ u8 irr; /* 0x54 Interrupt Routing */
-+ u8 x04[0x0b];
-+ u16 gper; /* 0x60 GP Enable */
-+ u8 x05[2];
-+ u16 gpi_sr[2]; /* 0x64 GPI Status */
-+ u16 gpi_imr[2]; /* 0x68 GPI INT Mask */
-+ u16 gpi_eder[2]; /* 0x6c GPI Edge Detect Enable */
-+ u16 gpi_lir[4]; /* 0x70 GPI Level Invert */
-+ u16 gpo_dsr[2]; /* 0x78 GPO Data Set */
-+ u16 gpo_doecr[2]; /* 0x7c GPO Data OE Control */
-+ u16 gp_iarcr[2]; /* 0x80 GP Internal Active Reg Control */
-+ u16 gp_iarlcr[2]; /* 0x84 GP Internal Active Reg Level Con*/
-+ u8 gpi_bcr[4]; /* 0x88 GPI Buffer Control */
-+ u16 gpa_iarcr; /* 0x8c GPa Internal Active Reg Control */
-+ u8 x06[2];
-+ u16 gpa_iarlcr; /* 0x90 GPa Internal Active Reg Level Co*/
-+ u8 x07[2];
-+ u16 gpa_bcr; /* 0x94 GPa Buffer Control */
-+ u8 x08[2];
-+ u16 ccr; /* 0x98 Clock Control */
-+ u16 pll2cr; /* 0x9a PLL2 Control */
-+ u16 pll1cr[2]; /* 0x9c PLL1 Control */
-+ u8 diarcr; /* 0xa0 Device Internal Active Reg Contr*/
-+ u8 dbocr; /* 0xa1 Device Buffer Off Control */
-+ u8 x09[0x3e];
-+ u8 fer; /* 0xe0 Function Enable */
-+ u8 x10[3];
-+ u16 mcr; /* 0xe4 Mode Control */
-+ u8 x11[0x14];
-+ u8 config; /* 0xfc Configuration Control */
-+ u8 x12[2];
-+ u8 debug; /* 0xff Debug */
-+} __attribute__ ((packed));
-+
-+union tc6393_scr_fer {
-+ u8 raw;
-+struct {
-+ unsigned usben:1; /* D0 USB enable */
-+ unsigned lcdcven:1; /* D1 polysylicon TFT enable */
-+ unsigned slcden:1; /* D2 SLCD enable */
-+} __attribute__ ((packed));
-+} __attribute__ ((packed));
-+
-+union tc6393_scr_ccr {
-+ u16 raw;
-+struct {
-+ unsigned ck32ken:1; /* D0 SD host clock enable */
-+ unsigned usbcken:1; /* D1 USB host clock enable */
-+ unsigned x00:2;
-+ unsigned sharp:1; /* D4 ??? set in Sharp's code */
-+ unsigned x01:3;
-+ enum { disable = 0,
-+ m12MHz = 1,
-+ m24MHz = 2,
-+ m48MHz = 3,
-+ } mclksel:3; /* D10-D8 LCD controller clock */
-+ unsigned x02:1;
-+ enum { h24MHz = 0,
-+ h48MHz = 1,
-+ } hclksel:2; /* D13-D12 host bus clock */
-+ unsigned x03:2;
-+} __attribute__ ((packed));
-+} __attribute__ ((packed));
-+
-+/*--------------------------------------------------------------------------*/
-+
-+struct tc6393 {
-+ spinlock_t lock; /* read-modify-write lock */
-+ struct device* dev; /* TC6393 device */
-+ struct tc6393_scr __iomem *scr; /* system configuration reg */
-+
-+ struct resource rscr; /* system config reg resource */
-+ struct resource* iomem; /* entire TC6393 iomem resource */
-+ unsigned int irq; /* hardware cascade irq */
-+
-+ struct tmio_device tdev [TC6393_NUM_CELLS];
-+};
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static u32 tc6393_ioread32 (const void __iomem *addr)
-+{
-+ return ((u32) ioread16 (addr)) | (((u32) ioread16 (addr + 2)) << 16);
-+}
-+
-+static u32 tc6393_iowrite32 (u32 val, const void __iomem *addr)
-+{
-+ iowrite16 (val, addr);
-+ iowrite16 (val >> 16, addr + 2);
-+ return val;
-+}
-+
-+u32 get_tc6393_gpio (struct device *dev)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+
-+ return tc6393_ioread32 (scr->gpo_dsr);
-+}
-+EXPORT_SYMBOL (get_tc6393_gpio);
-+
-+u32 set_tc6393_gpio (struct device *dev, u32 bits)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ unsigned long flags;
-+ u32 dsr;
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ dsr = tc6393_ioread32 (scr->gpo_dsr) | bits;
-+ tc6393_iowrite32 (dsr, scr->gpo_dsr);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+
-+ return dsr;
-+}
-+EXPORT_SYMBOL (set_tc6393_gpio);
-+
-+u32 reset_tc6393_gpio (struct device *dev, u32 bits)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ unsigned long flags;
-+ u32 dsr;
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ dsr = tc6393_ioread32 (scr->gpo_dsr) & ~bits;
-+ tc6393_iowrite32 (dsr, scr->gpo_dsr);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+
-+ return dsr;
-+}
-+EXPORT_SYMBOL (reset_tc6393_gpio);
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static void
-+tc6393_irq (unsigned int irq, struct irqdesc *desc)
-+{
-+ struct tc6393* tc6393 = get_irq_chipdata (irq);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ unsigned int isr;
-+ unsigned int bit;
-+ unsigned int i;
-+
-+ desc->chip->ack (irq);
-+
-+ while ((isr = ioread8(&scr->isr) & ~ioread8(&scr->imr)))
-+ for (bit = 1, i = IRQ_TC6393_START; i <= IRQ_TC6393_LCD;
-+ bit <<= 1, i++)
-+ if (isr & bit)
-+ desc_handle_irq (i, irq_desc + i);
-+}
-+
-+static void tc6393_irq_ack (unsigned int irq)
-+{
-+}
-+
-+static void tc6393_irq_mask (unsigned int irq)
-+{
-+ struct tc6393* tc6393 = get_irq_chipdata (irq);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ iowrite8 (ioread8 (&scr->imr) | (1 << (irq - IRQ_TC6393_START)),
-+ &scr->imr);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+}
-+
-+static void tc6393_irq_unmask (unsigned int irq)
-+{
-+ struct tc6393* tc6393 = get_irq_chipdata (irq);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ iowrite8 (ioread8 (&scr->imr) & ~(1 << (irq - IRQ_TC6393_START)),
-+ &scr->imr);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+}
-+
-+static struct irqchip tc6393_chip = {
-+ .ack = tc6393_irq_ack,
-+ .mask = tc6393_irq_mask,
-+ .unmask = tc6393_irq_unmask,
-+};
-+
-+static void tc6393_attach_irq (struct tc6393 *tc6393)
-+{
-+ unsigned int irq;
-+
-+ for (irq = IRQ_TC6393_START; irq <= IRQ_TC6393_LCD; irq++) {
-+ set_irq_chip (irq, &tc6393_chip);
-+ set_irq_chipdata(irq, tc6393);
-+ set_irq_handler (irq, do_edge_IRQ);
-+ set_irq_flags (irq, IRQF_VALID | IRQF_PROBE);
-+ }
-+
-+ set_irq_type (tc6393->irq, IRQT_FALLING);
-+ set_irq_chipdata (tc6393->irq, tc6393);
-+ set_irq_chained_handler (tc6393->irq, tc6393_irq);
-+}
-+
-+static void tc6393_detach_irq (struct tc6393 *tc6393)
-+{
-+ unsigned int irq;
-+
-+ set_irq_chained_handler (tc6393->irq, NULL);
-+ set_irq_chipdata (tc6393->irq, NULL);
-+
-+ for (irq = IRQ_TC6393_START; irq <= IRQ_TC6393_LCD; irq++) {
-+ set_irq_flags (irq, 0);
-+ set_irq_chip (irq, NULL);
-+ set_irq_chipdata(irq, NULL);
-+ }
-+}
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static int tc6393_bus_match (struct device *dev, struct device_driver *drv)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ const struct tc6393_cell* cell = tdev->soc_data;
-+
-+ return !strcmp (cell->name, drv->name);
-+}
-+
-+static int tc6393_bus_suspend (struct device *dev, pm_message_t state)
-+{
-+ struct device_driver* drv = dev->driver;
-+ return drv && drv->suspend ? drv->suspend (dev, state) : 0;
-+}
-+
-+static int tc6393_bus_resume (struct device *dev)
-+{
-+ struct device_driver* drv = dev->driver;
-+ return drv && drv->resume ? drv->resume (dev) : 0;
-+}
-+
-+struct bus_type tc6393_bus_type = {
-+ .name = TMIO_NAME_BUS,
-+ .match = tc6393_bus_match,
-+ .suspend = tc6393_bus_suspend,
-+ .resume = tc6393_bus_resume,
-+};
-+EXPORT_SYMBOL (tc6393_bus_type);
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static void tc6393_cell_clock (struct device *dev, int enable)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ const struct tc6393_cell* cell = tdev->soc_data;
-+ struct tc6393* tc6393 = dev_get_drvdata (dev->parent);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ union tc6393_scr_ccr ccr;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ ccr.raw = ioread16 (&scr->ccr);
-+
-+ switch (cell->id) {
-+ case TC6393_CELL_SD: ccr.ck32ken = enable; break;
-+ case TC6393_CELL_OHCI: ccr.usbcken = enable; break;
-+ case TC6393_CELL_LCD:
-+ ccr.mclksel = enable ? m48MHz : disable;
-+ break;
-+ }
-+
-+ printk (KERN_DEBUG TMIO_NAME_CORE ": scr->ccr = %04x\n", ccr.raw);
-+
-+ iowrite16(ccr.raw, &scr->ccr);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+}
-+
-+static void tc6393_cell_function (struct device *dev, int enable)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ const struct tc6393_cell* cell = tdev->soc_data;
-+ struct tc6393* tc6393 = dev_get_drvdata (dev->parent);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ union tc6393_scr_fer fer;
-+ unsigned long flags;
-+
-+ if (cell->id == TC6393_CELL_NAND) {
-+ if (enable) {
-+ /* SMD buffer on */
-+ printk (KERN_DEBUG TMIO_NAME_CORE ": SMD buffer on\n");
-+ iowrite8 (0xff, scr->gpi_bcr + 1);
-+ }
-+ return;
-+ }
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ fer.raw = ioread16 (&scr->fer);
-+
-+ switch (cell->id) {
-+ case TC6393_CELL_OHCI: fer.usben = enable; break;
-+ case TC6393_CELL_LCD: fer.slcden = enable; break;
-+ }
-+
-+ printk (KERN_DEBUG TMIO_NAME_CORE ": scr->fer = %02x\n", fer.raw);
-+
-+ iowrite8 (fer.raw, &scr->fer);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+}
-+
-+static void
-+tc6393_lcd_mode (struct device *dev, const struct fb_videomode *mode)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev->parent);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+
-+ iowrite16 (mode->pixclock, scr->pll1cr + 0);
-+ iowrite16 (mode->pixclock >> 16, scr->pll1cr + 1);
-+}
-+
-+static struct tmio_cell_ops tc6393_cell_ops = {
-+ .clock = tc6393_cell_clock,
-+ .function = tc6393_cell_function,
-+ .lcd_mode = tc6393_lcd_mode,
-+};
-+
-+static void tc6393_device_release (struct device *dev)
-+{
-+}
-+
-+static int
-+tc6393_device_register (struct tc6393 *tc6393, struct tmio_cell *tcell)
-+{
-+ const struct tc6393_cell* cell;
-+ struct tmio_device* tdev;
-+ struct device* dev;
-+ int i;
-+
-+ for (i = 0; strcmp (tcell->name, tc6393_cell [i].name); )
-+ if (++i >= ARRAY_SIZE(tc6393_cell))
-+ return -EINVAL;
-+
-+ cell = tc6393_cell + i;
-+ tdev = tc6393->tdev + i;
-+ dev = &tdev->dev;
-+
-+ tdev->ops = &tc6393_cell_ops;
-+ tdev->iomem = tc6393->iomem;
-+ tdev->soc_data = (void*) cell;
-+
-+ dev->parent = tc6393->dev;
-+ strncpy (dev->bus_id, cell->name, sizeof dev->bus_id);
-+ dev->bus = &tc6393_bus_type;
-+ dev->dma_mask = tc6393->dev->dma_mask;
-+ dev->coherent_dma_mask = tc6393->dev->coherent_dma_mask;
-+ dev->release = tc6393_device_release;
-+ dev->platform_data = tcell->platform_data;
-+
-+ for (i=0; i < cell->num_resources; i++) {
-+ const struct resource* cr = cell->resource + i;
-+ struct resource* dr = tdev->resource + i;
-+
-+ dr->name = cr->name;
-+ dr->start = cr->start;
-+ dr->end = cr->end;
-+ dr->flags = cr->flags;
-+
-+ /* convert memory offsets to absolutes */
-+ if (cr->flags & IORESOURCE_MEM) {
-+ dr->start += tc6393->iomem->start;
-+ dr->end += tc6393->iomem->start;
-+ }
-+ }
-+
-+ return device_register (dev);
-+}
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static void tc6393_hw_init (struct tc6393 *tc6393)
-+{
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ struct tc6393_platform_data* tcpd = tc6393->dev->platform_data;
-+
-+ tcpd->enable (tc6393->dev);
-+
-+ iowrite8 (0, &scr->fer);
-+ iowrite16(tcpd->scr_pll2cr, &scr->pll2cr);
-+ iowrite16(tcpd->scr_ccr, &scr->ccr);
-+ iowrite16(tcpd->scr_mcr, &scr->mcr);
-+ iowrite16(tcpd->scr_gper, &scr->gper);
-+ iowrite8 (0, &scr->irr);
-+ iowrite8 (0xbf, &scr->imr);
-+ iowrite16(tcpd->scr_gpo_dsr, scr->gpo_dsr + 0);
-+ iowrite16(tcpd->scr_gpo_dsr >> 16, scr->gpo_dsr + 1);
-+ iowrite16(tcpd->scr_gpo_doecr, scr->gpo_doecr + 0);
-+ iowrite16(tcpd->scr_gpo_doecr >> 16, scr->gpo_doecr + 1);
-+}
-+
-+static int tc6393_probe (struct device *dev)
-+{
-+ struct platform_device* pdev = to_platform_device (dev);
-+ struct tc6393_platform_data* tcpd = dev->platform_data;
-+ struct tc6393* tc6393;
-+ struct resource* iomem;
-+ struct resource* rscr;
-+ int retval;
-+ int i;
-+
-+ iomem = platform_get_resource (pdev, IORESOURCE_MEM, 0);
-+ if (!iomem)
-+ return -EINVAL;
-+
-+ tc6393 = kzalloc (sizeof *tc6393, GFP_KERNEL);
-+ if (!tc6393) {
-+ retval = -ENOMEM;
-+ goto err_kzalloc;
-+ }
-+
-+ dev_set_drvdata (dev, tc6393);
-+ spin_lock_init (&tc6393->lock);
-+ tc6393->dev = dev;
-+ tc6393->iomem = iomem;
-+ tc6393->irq = platform_get_irq (pdev, 0);
-+
-+ rscr = &tc6393->rscr;
-+ rscr->name = TMIO_NAME_CORE;
-+ rscr->start = iomem->start;
-+ rscr->end = iomem->start + 0xff;
-+ rscr->flags = IORESOURCE_MEM;
-+
-+ retval = request_resource (iomem, rscr);
-+ if (retval)
-+ goto err_request_scr;
-+
-+ tc6393->scr = ioremap (rscr->start, rscr->end - rscr->start + 1);
-+ if (!tc6393->scr) {
-+ retval = -ENOMEM;
-+ goto err_ioremap;
-+ }
-+
-+ tc6393_hw_init (tc6393);
-+
-+ printk (KERN_INFO "Toshiba %s revision %d at 0x%08lx, irq %d\n",
-+ TMIO_SOC_NAME, ioread8 (&tc6393->scr->revid),
-+ iomem->start, tc6393->irq);
-+
-+ if (tc6393->irq)
-+ tc6393_attach_irq (tc6393);
-+
-+ for (i = 0; i < tcpd->num_cells; i++)
-+ tc6393_device_register (tc6393, tcpd->cell + i);
-+
-+ return 0;
-+
-+err_ioremap:
-+ release_resource (rscr);
-+err_request_scr:
-+ kfree(tc6393);
-+err_kzalloc:
-+ release_resource (iomem);
-+ return retval;
-+}
-+
-+static int tc6393_dev_remove (struct device *dev, void *data)
-+{
-+ device_unregister (dev);
-+ return 0;
-+}
-+
-+static int tc6393_remove (struct device *dev)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev);
-+
-+ device_for_each_child (dev, tc6393, tc6393_dev_remove);
-+
-+ if (tc6393->irq)
-+ tc6393_detach_irq (tc6393);
-+
-+ iounmap (tc6393->scr);
-+ release_resource (&tc6393->rscr);
-+ release_resource (tc6393->iomem);
-+ kfree (tc6393);
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+static int tc6393_suspend (struct device *dev, pm_message_t state)
-+{
-+ struct tc6393_platform_data* tcpd = dev->platform_data;
-+ tcpd->disable (dev);
-+ return 0;
-+}
-+
-+static int tc6393_resume (struct device *dev)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev);
-+ tc6393_hw_init (tc6393);
-+ return 0;
-+}
-+#endif
-+
-+static struct device_driver tc6393_device_driver = {
-+ .name = TMIO_SOC_NAME,
-+ .bus = &platform_bus_type,
-+ .probe = tc6393_probe,
-+ .remove = tc6393_remove,
-+#ifdef CONFIG_PM
-+ .suspend = tc6393_suspend,
-+ .resume = tc6393_resume,
-+#endif
-+};
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static int __init tc6393_init (void)
-+{
-+ int retval = bus_register (&tc6393_bus_type);
-+ if (retval)
-+ return retval;
-+
-+ return driver_register (&tc6393_device_driver);
-+}
-+
-+static void __exit tc6393_exit (void)
-+{
-+ driver_unregister (&tc6393_device_driver);
-+ bus_unregister (&tc6393_bus_type);
-+}
-+
-+module_init (tc6393_init);
-+module_exit (tc6393_exit);
-+
-+MODULE_DESCRIPTION ("TC6393 SoC bus driver");
-+MODULE_AUTHOR ("Chris Humbert, Dirk Opfer");
-+MODULE_LICENSE ("GPL");
-Index: git/arch/arm/common/Kconfig
-===================================================================
---- git.orig/arch/arm/common/Kconfig 2006-10-31 16:08:28.000000000 +0000
-+++ git/arch/arm/common/Kconfig 2006-11-07 22:13:09.000000000 +0000
-@@ -31,3 +31,6 @@ config SHARPSL_PM
-
- config SHARP_SCOOP
- bool
-+
-+config TOSHIBA_TC6393XB
-+ bool
-Index: git/arch/arm/mach-pxa/Kconfig
-===================================================================
---- git.orig/arch/arm/mach-pxa/Kconfig 2006-11-07 22:13:06.000000000 +0000
-+++ git/arch/arm/mach-pxa/Kconfig 2006-11-07 23:30:34.000000000 +0000
-@@ -128,6 +128,7 @@ config MACH_BORZOI
- config MACH_TOSA
- bool "Enable Sharp SL-6000x (Tosa) Support"
- depends PXA_SHARPSL_25x
-+ select TOSHIBA_TC6393XB
-
- config PXA25x
- bool
-Index: git/arch/arm/common/Makefile
-===================================================================
---- git.orig/arch/arm/common/Makefile 2006-10-31 16:08:28.000000000 +0000
-+++ git/arch/arm/common/Makefile 2006-11-07 22:13:09.000000000 +0000
-@@ -17,3 +17,4 @@ obj-$(CONFIG_SHARPSL_PM) += sharpsl_pm.o
- obj-$(CONFIG_SHARP_SCOOP) += scoop.o
- obj-$(CONFIG_ARCH_IXP2000) += uengine.o
- obj-$(CONFIG_ARCH_IXP23XX) += uengine.o
-+obj-$(CONFIG_TOSHIBA_TC6393XB) += tc6393xb.o
-Index: git/include/asm-arm/hardware/tmio.h
-===================================================================
---- git.orig/include/asm-arm/hardware/tmio.h 2006-11-07 22:13:09.000000000 +0000
-+++ git/include/asm-arm/hardware/tmio.h 2006-11-07 22:13:09.000000000 +0000
-@@ -91,6 +91,50 @@ struct tmio_device {
-
- /*--------------------------------------------------------------------------*/
-
-+/*
-+ * TC6393XB SoC
-+ */
-+#ifdef CONFIG_TOSHIBA_TC6393XB
-+#define TMIO_SOC_TC6393XB
-+#define TMIO_SOC_NAME "TC6393XB"
-+#define TMIO_NAME_BUS "tc6393-bus"
-+#define TMIO_NAME_CORE "tc6393-core"
-+#define TMIO_NAME_NAND "tc6393-nand"
-+#define TMIO_NAME_SD "tc6393-sd"
-+#define TMIO_NAME_OHCI "tc6393-ohci"
-+#define TMIO_NAME_SERIAL "tc6393-serial"
-+#define TMIO_NAME_LCD "tc6393-lcd"
-+#define tmio_bus_type tc6393_bus_type
-+
-+#define TC6393_GPIO(x) (1 << (x))
-+
-+extern struct bus_type tc6393_bus_type;
-+
-+struct tc6393_platform_data {
-+ u16 scr_pll2cr; /* PLL2 Control */
-+ u16 scr_ccr; /* Clock Control */
-+ u16 scr_mcr; /* Mode Control */
-+ u16 scr_gper; /* GP Enable */
-+ u32 scr_gpo_doecr; /* GPO Data OE Control */
-+ u32 scr_gpo_dsr; /* GPO Data Set */
-+
-+ /* cells to register as devices */
-+ struct tmio_cell* cell;
-+ unsigned int num_cells;
-+
-+ /* callbacks to enable and disable the TC6393XB's power and clock */
-+ void (*enable) (struct device *dev);
-+ void (*disable) (struct device *dev);
-+};
-+
-+u32 get_tc6393_gpio (struct device *dev);
-+u32 set_tc6393_gpio (struct device *dev, u32 bits);
-+u32 reset_tc6393_gpio (struct device *dev, u32 bits);
-+
-+/*--------------------------------------------------------------------------*/
-+
-+#else
- #error "no TMIO SoC configured"
-+#endif
-
- #endif
-Index: git/include/asm-arm/arch-pxa/irqs.h
-===================================================================
---- git.orig/include/asm-arm/arch-pxa/irqs.h 2006-10-31 16:09:33.000000000 +0000
-+++ git/include/asm-arm/arch-pxa/irqs.h 2006-11-07 22:13:09.000000000 +0000
-@@ -163,17 +163,27 @@
- #define IRQ_LOCOMO_SPI_OVRN (IRQ_BOARD_END + 20)
- #define IRQ_LOCOMO_SPI_TEND (IRQ_BOARD_END + 21)
-
-+#define IRQ_TC6393_START (IRQ_BOARD_END)
-+#define IRQ_TC6393_NAND (IRQ_BOARD_END + 0)
-+#define IRQ_TC6393_SD (IRQ_BOARD_END + 1)
-+#define IRQ_TC6393_OHCI (IRQ_BOARD_END + 2)
-+#define IRQ_TC6393_SERIAL (IRQ_BOARD_END + 3)
-+#define IRQ_TC6393_LCD (IRQ_BOARD_END + 4)
-+
- /*
- * Figure out the MAX IRQ number.
- *
- * If we have an SA1111, the max IRQ is S1_BVD1_STSCHG+1.
- * If we have an LoCoMo, the max IRQ is IRQ_LOCOMO_SPI_TEND+1
-+ * If we have an TC6393XB, the max IRQ is IRQ_TC6393_LCD+1
- * Otherwise, we have the standard IRQs only.
- */
- #ifdef CONFIG_SA1111
- #define NR_IRQS (IRQ_S1_BVD1_STSCHG + 1)
- #elif defined(CONFIG_SHARP_LOCOMO)
- #define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1)
-+#elif defined(CONFIG_TOSHIBA_TC6393XB)
-+#define NR_IRQS (IRQ_TC6393_LCD + 1)
- #elif defined(CONFIG_ARCH_LUBBOCK) || \
- defined(CONFIG_MACH_LOGICPD_PXA270) || \
- defined(CONFIG_MACH_MAINSTONE)
diff --git a/packages/linux/linux-rp-2.6.19+git/tosa-keyboard-r18.patch b/packages/linux/linux-rp-2.6.19+git/tosa-keyboard-r18.patch
deleted file mode 100644
index 00bac40db5..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/tosa-keyboard-r18.patch
+++ /dev/null
@@ -1,515 +0,0 @@
- drivers/input/keyboard/Kconfig | 12 -
- drivers/input/keyboard/Makefile | 1
- drivers/input/keyboard/tosakbd.c | 467 +++++++++++++++++++++++++++++++++++++++
- 3 files changed, 479 insertions(+), 1 deletion(-)
-
-Index: git/drivers/input/keyboard/Kconfig
-===================================================================
---- git.orig/drivers/input/keyboard/Kconfig 2006-10-31 16:08:57.000000000 +0000
-+++ git/drivers/input/keyboard/Kconfig 2006-11-07 22:13:10.000000000 +0000
-@@ -148,12 +148,22 @@ config KEYBOARD_SPITZ
- depends on PXA_SHARPSL
- default y
- help
-- Say Y here to enable the keyboard on the Sharp Zaurus SL-C1000,
-+ Say Y here to enable the keyboard on the Sharp Zaurus SL-C1000,
- SL-C3000 and Sl-C3100 series of PDAs.
-
- To compile this driver as a module, choose M here: the
- module will be called spitzkbd.
-
-+config KEYBOARD_TOSA
-+ tristate "Tosa keyboard"
-+ depends on PXA_SHARPSL
-+ default y
-+ help
-+ Say Y here to enable the keyboard on the Sharp Zaurus SL-6000x (Tosa)
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called tosakbd.
-+
- config KEYBOARD_AMIGA
- tristate "Amiga keyboard"
- depends on AMIGA
-Index: git/drivers/input/keyboard/Makefile
-===================================================================
---- git.orig/drivers/input/keyboard/Makefile 2006-10-31 16:08:57.000000000 +0000
-+++ git/drivers/input/keyboard/Makefile 2006-11-07 22:13:10.000000000 +0000
-@@ -17,4 +17,5 @@ obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkb
- obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
- obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
- obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
-+obj-$(CONFIG_KEYBOARD_TOSA) += tosakbd.o
-
-Index: git/drivers/input/keyboard/tosakbd.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/drivers/input/keyboard/tosakbd.c 2006-11-07 23:27:19.000000000 +0000
-@@ -0,0 +1,467 @@
-+/*
-+ * Keyboard driver for Sharp Tosa models (SL-6000x)
-+ *
-+ * Copyright (c) 2005 Dirk Opfer
-+ *
-+ * Based on xtkbd.c/locomkbd.c/corgikbd.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/init.h>
-+#include <linux/input.h>
-+#include <linux/interrupt.h>
-+#include <linux/jiffies.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+
-+#include <asm/arch/tosa.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+
-+
-+#define TOSA_KEY_STROBE_NUM (11)
-+#define TOSA_KEY_SENSE_NUM (7)
-+
-+#define KEYMASK_ON (0x1<<0)
-+#define KEYMASK_REC (0x1<<1)
-+#define KEYMASK_SYNC (0x1<<2)
-+
-+#define KB_ROWS 7
-+#define KB_COLS 11
-+#define KB_ROWMASK(r) (1 << (r))
-+#define SCANCODE(r,c) ( ((r)<<4) + (c) + 1 )
-+#define NR_SCANCODES (SCANCODE(KB_ROWS-1,KB_COLS)+1+1)
-+
-+#define SCAN_INTERVAL (HZ/10)
-+#define HP_SCAN_INTERVAL (150) /* ms */
-+#define HP_STABLE_COUNT 2
-+
-+#define TOSA_KEY_CALENDER KEY_F1
-+#define TOSA_KEY_ADDRESS KEY_F2
-+#define TOSA_KEY_FN KEY_F3
-+#define TOSA_KEY_CANCEL KEY_F4
-+#define TOSA_KEY_OFF KEY_SUSPEND
-+#define TOSA_KEY_CENTER KEY_F5
-+#define TOSA_KEY_REC KEY_F6
-+#define TOSA_KEY_LIGHT KEY_F7
-+#define TOSA_KEY_RECORD KEY_F8
-+#define TOSA_KEY_HOME KEY_F9
-+#define TOSA_KEY_MAIL KEY_F10
-+#define TOSA_KEY_OK KEY_F11
-+#define TOSA_KEY_MENU KEY_F12
-+#define TOSA_KEY_SYNC KEY_F13
-+
-+#define GET_ROWS_STATUS(c) ((GPLR2 & TOSA_GPIO_ALL_SENSE_BIT) >> TOSA_GPIO_ALL_SENSE_RSHIFT)
-+#define KB_DISCHARGE_DELAY 10
-+#define KB_ACTIVATE_DELAY 10
-+
-+
-+static unsigned char tosakbd_keycode[NR_SCANCODES] = {
-+ 0, /* 0 */
-+ 0, KEY_W, 0, 0, 0, KEY_K, KEY_BACKSPACE, KEY_P, 0, 0, 0, TOSA_KEY_OFF, 0, 0, 0, 0, /*1 - 16*/
-+ KEY_Q, KEY_E, KEY_T, KEY_Y, 0, KEY_O, KEY_I, KEY_COMMA, 0, 0, 0, TOSA_KEY_RECORD, 0, 0, 0, 0, /*17 - 32*/
-+ KEY_A, KEY_D, KEY_G, KEY_U, 0, KEY_L, KEY_ENTER, KEY_DOT, 0, 0, 0, TOSA_KEY_SYNC, 0, 0, 0, 0, /*33 - 48*/
-+ KEY_Z, KEY_C, KEY_V, KEY_J, TOSA_KEY_ADDRESS, TOSA_KEY_CANCEL, TOSA_KEY_CENTER, TOSA_KEY_OK, KEY_LEFTSHIFT, 0 , 0,0 , 0, 0, 0, 0, /*49 - 64*/
-+ KEY_S, KEY_R, KEY_B, KEY_N, TOSA_KEY_CALENDER, TOSA_KEY_HOME, TOSA_KEY_REC, TOSA_KEY_LIGHT, 0, KEY_RIGHTSHIFT, 0, 0, 0, 0, 0, 0, /*65 - 80*/
-+ KEY_TAB, KEY_SLASH, KEY_H, KEY_M, TOSA_KEY_MENU, 0, KEY_UP, 0, 0, 0, TOSA_KEY_FN, 0, 0, 0, 0, 0, /*81 - 96*/
-+ KEY_X, KEY_F, KEY_SPACE, KEY_APOSTROPHE, TOSA_KEY_MAIL, KEY_LEFT, KEY_DOWN, KEY_RIGHT, 0, 0, 0, 0, 0, /*97 - 109*/
-+};
-+
-+struct tosakbd {
-+ unsigned char keycode[ARRAY_SIZE(tosakbd_keycode)];
-+ struct input_dev *input;
-+
-+ spinlock_t lock;
-+ struct timer_list timer;
-+ struct timer_list hptimer;
-+
-+ int hp_state;
-+ int hp_count;
-+
-+ unsigned int suspended;
-+ unsigned long suspend_jiffies;
-+};
-+
-+/* Helper functions for reading the keyboard matrix
-+ * Note: We should really be using pxa_gpio_mode to alter GPDR but it
-+ * requires a function call per GPIO bit which is excessive
-+ * when we need to access 12 bits at once, multiple times.
-+ * These functions must be called within local_irq_save()/local_irq_restore()
-+ * or similar.
-+ */
-+static inline void tosakbd_discharge_all(void)
-+{
-+ /* STROBE All HiZ */
-+ GPCR1 = TOSA_GPIO_HIGH_STROBE_BIT;
-+ GPDR1 &= ~TOSA_GPIO_HIGH_STROBE_BIT;
-+ GPCR2 = TOSA_GPIO_LOW_STROBE_BIT;
-+ GPDR2 &= ~TOSA_GPIO_LOW_STROBE_BIT;
-+}
-+
-+static inline void tosakbd_activate_all(void)
-+{
-+ /* STROBE ALL -> High */
-+ GPSR1 = TOSA_GPIO_HIGH_STROBE_BIT;
-+ GPDR1 |= TOSA_GPIO_HIGH_STROBE_BIT;
-+ GPSR2 = TOSA_GPIO_LOW_STROBE_BIT;
-+ GPDR2 |= TOSA_GPIO_LOW_STROBE_BIT;
-+
-+ udelay(KB_DISCHARGE_DELAY);
-+
-+ /* STATE CLEAR */
-+ GEDR2 |= TOSA_GPIO_ALL_SENSE_BIT;
-+}
-+
-+static inline void tosakbd_activate_col(int col)
-+{
-+ if (col<=5) {
-+ /* STROBE col -> High, not col -> HiZ */
-+ GPSR1 = TOSA_GPIO_STROBE_BIT(col);
-+ GPDR1 = (GPDR1 & ~TOSA_GPIO_HIGH_STROBE_BIT) | TOSA_GPIO_STROBE_BIT(col);
-+ } else {
-+ /* STROBE col -> High, not col -> HiZ */
-+ GPSR2 = TOSA_GPIO_STROBE_BIT(col);
-+ GPDR2 = (GPDR2 & ~TOSA_GPIO_LOW_STROBE_BIT) | TOSA_GPIO_STROBE_BIT(col);
-+ }
-+}
-+
-+static inline void tosakbd_reset_col(int col)
-+{
-+ if (col<=5) {
-+ /* STROBE col -> Low */
-+ GPCR1 = TOSA_GPIO_STROBE_BIT(col);
-+ /* STROBE col -> out, not col -> HiZ */
-+ GPDR1 = (GPDR1 & ~TOSA_GPIO_HIGH_STROBE_BIT) | TOSA_GPIO_STROBE_BIT(col);
-+ } else {
-+ /* STROBE col -> Low */
-+ GPCR2 = TOSA_GPIO_STROBE_BIT(col);
-+ /* STROBE col -> out, not col -> HiZ */
-+ GPDR2 = (GPDR2 & ~TOSA_GPIO_LOW_STROBE_BIT) | TOSA_GPIO_STROBE_BIT(col);
-+ }
-+}
-+
-+/*
-+ * Read the GPIOs for POWER, RECORD and SYNC
-+ */
-+static int read_port_key_status_raw(void)
-+{
-+ int val=0;
-+
-+ /* Power key */
-+ if ((GPLR0 & GPIO_bit(TOSA_GPIO_ON_KEY))==0)
-+ val |= KEYMASK_ON;
-+ /* Record key */
-+ if ((GPLR0 & GPIO_bit(TOSA_GPIO_RECORD_BTN))==0)
-+ val |= KEYMASK_REC;
-+ /* Sync key */
-+ if ((GPLR0 & GPIO_bit(TOSA_GPIO_SYNC))==0)
-+ val |= KEYMASK_SYNC;
-+ return val;
-+}
-+
-+
-+/*
-+ * The tosa keyboard only generates interrupts when a key is pressed.
-+ * So when a key is pressed, we enable a timer. This timer scans the
-+ * keyboard, and this is how we detect when the key is released.
-+ */
-+
-+/* Scan the hardware keyboard and push any changes up through the input layer */
-+static void tosakbd_scankeyboard(struct tosakbd *tosakbd_data)
-+{
-+ unsigned int row, col, rowd;
-+ unsigned long flags;
-+ unsigned int num_pressed = 0;
-+
-+ if (tosakbd_data->suspended)
-+ return;
-+
-+ spin_lock_irqsave(&tosakbd_data->lock, flags);
-+
-+ for (col = 0; col < KB_COLS; col++) {
-+ /*
-+ * Discharge the output driver capacitatance
-+ * in the keyboard matrix. (Yes it is significant..)
-+ */
-+ tosakbd_discharge_all();
-+ udelay(KB_DISCHARGE_DELAY);
-+
-+ tosakbd_activate_col( col);
-+ udelay(KB_ACTIVATE_DELAY);
-+
-+ rowd = GET_ROWS_STATUS(col);
-+
-+ for (row = 0; row < KB_ROWS; row++) {
-+ unsigned int scancode, pressed;
-+ scancode = SCANCODE(row, col);
-+ pressed = rowd & KB_ROWMASK(row);
-+ input_report_key(tosakbd_data->input, tosakbd_data->keycode[scancode], pressed);
-+ if (pressed)
-+ num_pressed++;
-+ }
-+
-+ tosakbd_reset_col(col);
-+ }
-+
-+ tosakbd_activate_all();
-+
-+ rowd = read_port_key_status_raw();
-+
-+ for (row = 0; row < 3; row++ ) {
-+ unsigned int scancode, pressed;
-+ scancode = SCANCODE(row, KB_COLS);
-+ pressed = rowd & KB_ROWMASK(row);
-+ input_report_key(tosakbd_data->input, tosakbd_data->keycode[scancode], pressed);
-+ if (pressed)
-+ num_pressed++;
-+
-+ if (pressed && (tosakbd_data->keycode[scancode] == TOSA_KEY_OFF)
-+ && time_after(jiffies, tosakbd_data->suspend_jiffies + msecs_to_jiffies(1000))) {
-+ input_event(tosakbd_data->input, EV_PWR, TOSA_KEY_OFF, 1);
-+ tosakbd_data->suspend_jiffies = jiffies;
-+ }
-+ }
-+
-+ input_sync(tosakbd_data->input);
-+
-+ /* if any keys are pressed, enable the timer */
-+ if (num_pressed)
-+ mod_timer(&tosakbd_data->timer, jiffies + SCAN_INTERVAL);
-+
-+ spin_unlock_irqrestore(&tosakbd_data->lock, flags);
-+}
-+
-+/*
-+ * tosa keyboard interrupt handler.
-+ */
-+static irqreturn_t tosakbd_interrupt(int irq, void *dev_id)
-+{
-+ struct tosakbd *tosakbd_data = dev_id;
-+
-+ if (!timer_pending(&tosakbd_data->timer))
-+ {
-+ /** wait chattering delay **/
-+ udelay(20);
-+ tosakbd_scankeyboard(tosakbd_data);
-+ }
-+
-+ return IRQ_HANDLED;
-+}
-+
-+/*
-+ * tosa timer checking for released keys
-+ */
-+static void tosakbd_timer_callback(unsigned long data)
-+{
-+ struct tosakbd *tosakbd_data = (struct tosakbd *) data;
-+ tosakbd_scankeyboard(tosakbd_data);
-+}
-+
-+/*
-+ * The headphone generates an interrupt.
-+ * We debounce the switche and pass them to the input system.
-+ */
-+
-+static irqreturn_t tosakbd_hp_isr(int irq, void *dev_id)
-+{
-+ struct tosakbd *tosakbd_data = dev_id;
-+
-+ if (!timer_pending(&tosakbd_data->hptimer))
-+ mod_timer(&tosakbd_data->hptimer, jiffies + msecs_to_jiffies(HP_SCAN_INTERVAL));
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static void tosakbd_hp_timer(unsigned long data)
-+{
-+ struct tosakbd *tosakbd_data = (struct tosakbd *) data;
-+ unsigned long state;
-+ unsigned long flags;
-+
-+ state = (GPLR(TOSA_GPIO_EAR_IN) & GPIO_bit(TOSA_GPIO_EAR_IN));
-+ if (state != tosakbd_data->hp_state) {
-+ tosakbd_data->hp_count = 0;
-+ tosakbd_data->hp_state = state;
-+ } else if (tosakbd_data->hp_count < HP_STABLE_COUNT) {
-+ tosakbd_data->hp_count++;
-+ }
-+
-+ if (tosakbd_data->hp_count >= HP_STABLE_COUNT) {
-+ spin_lock_irqsave(&tosakbd_data->lock, flags);
-+
-+ input_report_switch(tosakbd_data->input, SW_HEADPHONE_INSERT, ((GPLR(TOSA_GPIO_EAR_IN) & GPIO_bit(TOSA_GPIO_EAR_IN)) == 0));
-+ input_sync(tosakbd_data->input);
-+
-+ spin_unlock_irqrestore(&tosakbd_data->lock, flags);
-+ } else {
-+ mod_timer(&tosakbd_data->hptimer, jiffies + msecs_to_jiffies(HP_SCAN_INTERVAL));
-+ }
-+}
-+
-+#ifdef CONFIG_PM
-+static int tosakbd_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ struct tosakbd *tosakbd = platform_get_drvdata(dev);
-+
-+ tosakbd->suspended = 1;
-+
-+ return 0;
-+}
-+
-+static int tosakbd_resume(struct platform_device *dev)
-+{
-+ struct tosakbd *tosakbd = platform_get_drvdata(dev);
-+
-+ /* Upon resume, ignore the suspend key for a short while */
-+ tosakbd->suspend_jiffies = jiffies;
-+ tosakbd->suspended = 0;
-+
-+ return 0;
-+}
-+#else
-+#define tosakbd_suspend NULL
-+#define tosakbd_resume NULL
-+#endif
-+
-+static int __init tosakbd_probe(struct platform_device *pdev) {
-+
-+ int i;
-+ struct tosakbd *tosakbd;
-+ struct input_dev *input_dev;
-+
-+ tosakbd = kzalloc(sizeof(struct tosakbd), GFP_KERNEL);
-+ if (!tosakbd)
-+ return -ENOMEM;
-+
-+ input_dev = input_allocate_device();
-+ if (!input_dev) {
-+ kfree(tosakbd);
-+ return -ENOMEM;
-+ }
-+
-+ platform_set_drvdata(pdev,tosakbd);
-+
-+ spin_lock_init(&tosakbd->lock);
-+
-+ /* Init Keyboard rescan timer */
-+ init_timer(&tosakbd->timer);
-+ tosakbd->timer.function = tosakbd_timer_callback;
-+ tosakbd->timer.data = (unsigned long) tosakbd;
-+
-+ /* Init Headphone Timer */
-+ init_timer(&tosakbd->hptimer);
-+ tosakbd->hptimer.function = tosakbd_hp_timer;
-+ tosakbd->hptimer.data = (unsigned long) tosakbd;
-+
-+ tosakbd->suspend_jiffies = jiffies;
-+
-+ tosakbd->input = input_dev;
-+
-+ input_dev->private = tosakbd;
-+ input_dev->name = "Tosa Keyboard";
-+ input_dev->phys = "tosakbd/input0";
-+ input_dev->cdev.dev = &pdev->dev;
-+
-+ input_dev->id.bustype = BUS_HOST;
-+ input_dev->id.vendor = 0x0001;
-+ input_dev->id.product = 0x0001;
-+ input_dev->id.version = 0x0100;
-+
-+ input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_PWR) | BIT(EV_SW);
-+ input_dev->keycode = tosakbd->keycode;
-+ input_dev->keycodesize = sizeof(unsigned char);
-+ input_dev->keycodemax = ARRAY_SIZE(tosakbd_keycode);
-+
-+ memcpy(tosakbd->keycode, tosakbd_keycode, sizeof(tosakbd->keycode));
-+ for (i = 0; i < ARRAY_SIZE(tosakbd_keycode); i++)
-+ set_bit(tosakbd->keycode[i], input_dev->keybit);
-+ clear_bit(0, input_dev->keybit);
-+ set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
-+
-+ input_register_device(tosakbd->input);
-+
-+ /* Setup sense interrupts - RisingEdge Detect, sense lines as inputs */
-+ for (i = 0; i < TOSA_KEY_SENSE_NUM; i++) {
-+ pxa_gpio_mode( TOSA_GPIO_KEY_SENSE(i) | GPIO_IN);
-+ if (request_irq(TOSA_IRQ_GPIO_KEY_SENSE(i), tosakbd_interrupt,
-+ SA_INTERRUPT | SA_TRIGGER_RISING, "tosakbd", tosakbd)) {
-+ printk("tosakbd: Can't get IRQ: %d !\n", i);
-+ }
-+ }
-+
-+ /* Set Strobe lines as outputs - set high */
-+ for (i = 0; i < TOSA_KEY_STROBE_NUM; i++) {
-+ pxa_gpio_mode( TOSA_GPIO_KEY_STROBE(i) | GPIO_OUT | GPIO_DFLT_HIGH);
-+ }
-+
-+ // Power&Rec Button
-+ pxa_gpio_mode( TOSA_GPIO_ON_KEY | GPIO_IN);
-+ pxa_gpio_mode( TOSA_GPIO_RECORD_BTN | GPIO_IN);
-+ pxa_gpio_mode( TOSA_GPIO_SYNC | GPIO_IN);
-+ pxa_gpio_mode( TOSA_GPIO_EAR_IN | GPIO_IN);
-+
-+ if (request_irq(TOSA_IRQ_GPIO_ON_KEY, tosakbd_interrupt, SA_INTERRUPT | SA_TRIGGER_FALLING, "On key", tosakbd) ||
-+ request_irq(TOSA_IRQ_GPIO_RECORD_BTN, tosakbd_interrupt, SA_INTERRUPT | SA_TRIGGER_FALLING, "Record key", tosakbd) ||
-+ request_irq(TOSA_IRQ_GPIO_SYNC, tosakbd_interrupt, SA_INTERRUPT | SA_TRIGGER_FALLING, "Sync key", tosakbd) ||
-+ request_irq(TOSA_IRQ_GPIO_EAR_IN, tosakbd_hp_isr, SA_INTERRUPT | SA_TRIGGER_FALLING, "HP in", tosakbd)) {
-+ printk("Could not allocate KEYBD IRQ!\n");
-+ }
-+
-+ printk(KERN_INFO "input: Tosa Keyboard Registered\n");
-+
-+ return 0;
-+}
-+
-+static int tosakbd_remove(struct platform_device *dev) {
-+
-+ int i;
-+ struct tosakbd *tosakbd = platform_get_drvdata(dev);
-+
-+ for (i = 0; i < TOSA_KEY_SENSE_NUM; i++)
-+ free_irq(TOSA_IRQ_GPIO_KEY_SENSE(i),tosakbd);
-+
-+ free_irq(TOSA_IRQ_GPIO_ON_KEY,tosakbd);
-+ free_irq(TOSA_IRQ_GPIO_RECORD_BTN,tosakbd);
-+ free_irq(TOSA_IRQ_GPIO_SYNC,tosakbd);
-+
-+ del_timer_sync(&tosakbd->timer);
-+
-+ input_unregister_device(tosakbd->input);
-+
-+ kfree(tosakbd);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver tosakbd_driver = {
-+ .probe = tosakbd_probe,
-+ .remove = tosakbd_remove,
-+ .suspend = tosakbd_suspend,
-+ .resume = tosakbd_resume,
-+ .driver = {
-+ .name = "tosa-keyboard",
-+ },
-+};
-+
-+static int __devinit tosakbd_init(void)
-+{
-+ return platform_driver_register(&tosakbd_driver);
-+}
-+
-+static void __exit tosakbd_exit(void)
-+{
-+ platform_driver_unregister(&tosakbd_driver);
-+}
-+
-+module_init(tosakbd_init);
-+module_exit(tosakbd_exit);
-+
-+MODULE_AUTHOR("Dirk Opfer <Dirk@Opfer-Online.de>");
-+MODULE_DESCRIPTION("Tosa Keyboard Driver");
-+MODULE_LICENSE("GPLv2");
diff --git a/packages/linux/linux-rp-2.6.19+git/tosa-lcdnoise-r1.patch b/packages/linux/linux-rp-2.6.19+git/tosa-lcdnoise-r1.patch
deleted file mode 100644
index 624098bc64..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/tosa-lcdnoise-r1.patch
+++ /dev/null
@@ -1,157 +0,0 @@
-Index: linux-2.6.18/arch/arm/mach-pxa/tosa.c
-===================================================================
---- linux-2.6.18.orig/arch/arm/mach-pxa/tosa.c 2006-09-20 17:14:14.000000000 +0200
-+++ linux-2.6.18/arch/arm/mach-pxa/tosa.c 2006-09-20 17:14:43.000000000 +0200
-@@ -2,6 +2,7 @@
- * Support for Sharp SL-C6000x PDAs
- * Model: (Tosa)
- *
-+ * Copyright (c) 2006 Wolfson Microelectronics PLC.
- * Copyright (c) 2005 Dirk Opfer
- *
- * Based on code written by Sharp/Lineo for 2.4 kernels
-@@ -47,6 +48,8 @@
- #include <asm/hardware/tmio.h>
- #include <asm/mach/sharpsl_param.h>
-
-+#include <linux/wm97xx.h>
-+
- #include "generic.h"
-
- /*
-@@ -429,6 +432,16 @@
- },
- };
-
-+
-+/*
-+ * Tosa Touchscreen device
-+ */
-+
-+static struct wm97xx_machinfo tosa_ts_machinfo = {
-+ .get_hsync_time = tosa_get_hsync_time,
-+ .wait_hsync = tosa_wait_hsync,
-+};
-+
- /*
- * Tosa Blueooth
- */
-@@ -458,6 +471,7 @@
- GPSR(TOSA_GPIO_ON_RESET) = GPIO_bit(TOSA_GPIO_ON_RESET);
-
- mdelay(1000);
-+ wm97xx_unset_machinfo();
- arm_machine_restart('h');
- }
-
-@@ -503,6 +517,8 @@
- platform_scoop_config = &tosa_pcmcia_config;
-
- platform_add_devices(devices, ARRAY_SIZE(devices));
-+
-+ wm97xx_set_machinfo(&tosa_ts_machinfo);
- }
-
- static void __init fixup_tosa(struct machine_desc *desc,
-Index: linux-2.6.18/arch/arm/mach-pxa/tosa_lcd.c
-===================================================================
---- linux-2.6.18.orig/arch/arm/mach-pxa/tosa_lcd.c 2006-09-20 17:14:14.000000000 +0200
-+++ linux-2.6.18/arch/arm/mach-pxa/tosa_lcd.c 2006-09-20 17:14:15.000000000 +0200
-@@ -1,6 +1,7 @@
- /*
- * LCD / Backlight control code for Sharp SL-6000x (tosa)
- *
-+ * Copyright (c) 2006 Wolfson Microelectronics PLC.
- * Copyright (c) 2005 Dirk Opfer
- *
- * This program is free software; you can redistribute it and/or modify
-@@ -59,6 +60,8 @@
- static struct ssp_dev tosa_nssp_dev;
- static struct ssp_state tosa_nssp_state;
- static spinlock_t tosa_nssp_lock;
-+static int blanked;
-+static unsigned long hsync_time;
-
- static unsigned short normal_i2c[] = {
- DAC_BASE,
-@@ -130,6 +133,17 @@
- pxa_nssp_output(TG_GPOSR,0x02); /* GPOS0=powercontrol, GPOS1=GPIO, GPOS2=TCTL */
- }
-
-+static unsigned long calc_hsync_time(const struct fb_videomode *mode) {
-+ /* The 25 and 44 'magic numbers' are from Sharp's 2.4 patches */
-+ if (mode->yres == 640) {
-+ return 25;
-+ }
-+ if (mode->yres == 320) {
-+ return 44;
-+ }
-+ return 0;
-+}
-+
- static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode)
- {
- const int value = TG_REG0_COLOR | TG_REG0_UD | TG_REG0_LR;
-@@ -154,6 +168,8 @@
- /* set common voltage */
- i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj);
-
-+ blanked = 0;
-+ hsync_time = calc_hsync_time(mode);
- }
-
- static void tosa_lcd_tg_off(struct device *dev)
-@@ -172,6 +188,8 @@
-
- /* L3V Off */
- reset_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON);
-+
-+ blanked = 1;
- }
-
- static int tosa_detect_client(struct i2c_adapter* adapter, int address, int kind) {
-@@ -238,6 +256,23 @@
- return 0;
- }
-
-+unsigned long tosa_get_hsync_time(void)
-+{
-+/* This method should eventually contain the correct algorithm for calculating
-+ the hsync_time */
-+ if (blanked)
-+ return 0;
-+ else
-+ return hsync_time;
-+}
-+
-+void tosa_wait_hsync(void)
-+{
-+ /* Waits for a rising edge on the VGA line */
-+ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) == 0);
-+ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) != 0);
-+}
-+
- static struct i2c_driver tosa_driver={
- .id = TOSA_LCD_I2C_DEVICEID,
- .attach_adapter = tosa_attach_adapter,
-Index: linux-2.6.18/include/asm-arm/arch-pxa/tosa.h
-===================================================================
---- linux-2.6.18.orig/include/asm-arm/arch-pxa/tosa.h 2006-09-20 17:14:13.000000000 +0200
-+++ linux-2.6.18/include/asm-arm/arch-pxa/tosa.h 2006-09-20 17:14:15.000000000 +0200
-@@ -1,6 +1,7 @@
- /*
- * Hardware specific definitions for Sharp SL-C6000x series of PDAs
- *
-+ * Copyright (c) 2006 Wolfson Microelectronics PLC.
- * Copyright (c) 2005 Dirk Opfer
- *
- * Based on Sharp's 2.4 kernel patches
-@@ -187,4 +188,8 @@
- extern struct platform_device tosascoop_jc_device;
- extern struct platform_device tosascoop_device;
- extern struct platform_device tc6393_device;
-+
-+unsigned long tosa_get_hsync_time(void);
-+void tosa_wait_hsync(void);
-+
- #endif /* _ASM_ARCH_TOSA_H_ */
diff --git a/packages/linux/linux-rp-2.6.19+git/tosa-tmio-lcd-r10.patch b/packages/linux/linux-rp-2.6.19+git/tosa-tmio-lcd-r10.patch
deleted file mode 100644
index aef3a047c1..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/tosa-tmio-lcd-r10.patch
+++ /dev/null
@@ -1,472 +0,0 @@
- arch/arm/mach-pxa/Kconfig | 5
- arch/arm/mach-pxa/Makefile | 2
- arch/arm/mach-pxa/tosa.c | 49 +++++-
- arch/arm/mach-pxa/tosa_lcd.c | 344 +++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 396 insertions(+), 4 deletions(-)
-
-Index: git/arch/arm/mach-pxa/Makefile
-===================================================================
---- git.orig/arch/arm/mach-pxa/Makefile 2006-11-07 22:13:10.000000000 +0000
-+++ git/arch/arm/mach-pxa/Makefile 2006-11-07 23:29:38.000000000 +0000
-@@ -17,7 +17,7 @@ obj-$(CONFIG_PXA_SHARP_C7xx) += corgi.o
- obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o sharpsl_pm.o spitz_pm.o
- obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o
- obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o sharpsl_pm.o poodle_pm.o
--obj-$(CONFIG_MACH_TOSA) += tosa.o sharpsl_pm.o tosa_pm.o
-+obj-$(CONFIG_MACH_TOSA) += tosa.o sharpsl_pm.o tosa_pm.o tosa_lcd.o
- obj-$(CONFIG_MACH_HX2750) += hx2750.o hx2750_test.o
-
- # Support for blinky lights
-Index: git/arch/arm/mach-pxa/tosa_lcd.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/arch/arm/mach-pxa/tosa_lcd.c 2006-11-07 23:29:25.000000000 +0000
-@@ -0,0 +1,344 @@
-+/*
-+ * LCD / Backlight control code for Sharp SL-6000x (tosa)
-+ *
-+ * Copyright (c) 2005 Dirk Opfer
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/slab.h>
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/i2c.h>
-+#include <linux/fb.h>
-+
-+#include <asm/mach/sharpsl_param.h>
-+#include <asm/hardware.h>
-+#include <asm/hardware/scoop.h>
-+#include <asm/hardware/tmio.h>
-+#include <asm/arch/ssp.h>
-+#include <asm/arch/sharpsl.h>
-+#include <asm/arch/tosa.h>
-+#include <asm/arch/pxa-regs.h>
-+
-+#define DAC_BASE 0x4e
-+#define DAC_CH1 0
-+#define DAC_CH2 1
-+
-+#define TG_REG0_VQV 0x0001
-+#define TG_REG0_COLOR 0x0002
-+#define TG_REG0_UD 0x0004
-+#define TG_REG0_LR 0x0008
-+#define COMADJ_DEFAULT 97
-+#define TOSA_LCD_I2C_DEVICEID 0x4711 // Fixme: new value
-+
-+static void tosa_lcd_tg_init(struct device *dev);
-+static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode);
-+static void tosa_lcd_tg_off(struct device *dev);
-+static void tosa_set_backlight(int intensity);
-+
-+const static struct tmio_lcd_ops tosa_tc6393_lcd_ops = {
-+ .init = tosa_lcd_tg_init,
-+ .tg_on = tosa_lcd_tg_on,
-+ .tg_off = tosa_lcd_tg_off,
-+};
-+
-+static struct platform_device *tosabl_device;
-+static struct i2c_driver tosa_driver;
-+static struct i2c_client* tosa_i2c_dac;
-+static int initialised;
-+static int comadj;
-+static int bl_intensity;
-+static struct ssp_dev tosa_nssp_dev;
-+static struct ssp_state tosa_nssp_state;
-+static spinlock_t tosa_nssp_lock;
-+
-+static unsigned short normal_i2c[] = {
-+ DAC_BASE,
-+ I2C_CLIENT_END
-+};
-+I2C_CLIENT_INSMOD;
-+
-+static struct corgibl_machinfo tosa_bl_machinfo = {
-+ .max_intensity = 255,
-+ .default_intensity = 68,
-+ .limit_mask = 0x0b,
-+ .set_bl_intensity = tosa_set_backlight,
-+};
-+
-+int tosa_bl_intensity(void)
-+{
-+ return bl_intensity;
-+}
-+
-+static void pxa_nssp_output(unsigned char reg, unsigned char data)
-+{
-+ unsigned long flag, dummy;
-+ u32 dat = ( ((reg << 5) & 0xe0) | (data & 0x1f) );
-+ spin_lock_irqsave(&tosa_nssp_lock, flag);
-+
-+ ssp_config(&tosa_nssp_dev, (SSCR0_Motorola | (SSCR0_DSS & 0x07 )), 0, 0, SSCR0_SerClkDiv(128));
-+ ssp_enable(&tosa_nssp_dev);
-+
-+ ssp_write_word(&tosa_nssp_dev,dat);
-+
-+ /* Read null data back from device to prevent SSP overflow */
-+ ssp_read_word(&tosa_nssp_dev, &dummy);
-+ ssp_disable(&tosa_nssp_dev);
-+ spin_unlock_irqrestore(&tosa_nssp_lock, flag);
-+
-+}
-+
-+static void tosa_set_backlight(int intensity)
-+{
-+ if (!tosa_i2c_dac)
-+ return;
-+
-+ bl_intensity = intensity;
-+ /* SetBacklightDuty */
-+ i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH2, (unsigned char)intensity);
-+
-+ /* SetBacklightVR */
-+ if (intensity)
-+ set_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_BL_C20MA);
-+ else
-+ reset_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_BL_C20MA);
-+
-+ /* bl_enable GP04=1 otherwise GP04=0*/
-+ pxa_nssp_output(TG_GPODR2, intensity ? 0x01 : 0x00);
-+}
-+
-+static void tosa_lcd_tg_init(struct device *dev)
-+{
-+ /* L3V On */
-+ set_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON);
-+ mdelay(60);
-+
-+ /* TG On */
-+ reset_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_TG_ON);
-+ mdelay(60);
-+
-+ pxa_nssp_output(TG_TPOSCTL,0x00); /* delayed 0clk TCTL signal for VGA */
-+ pxa_nssp_output(TG_GPOSR,0x02); /* GPOS0=powercontrol, GPOS1=GPIO, GPOS2=TCTL */
-+}
-+
-+static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode)
-+{
-+ const int value = TG_REG0_COLOR | TG_REG0_UD | TG_REG0_LR;
-+ pxa_nssp_output(TG_PNLCTL, value | (mode->yres == 320 ? 0 : TG_REG0_VQV));
-+
-+ /* TG LCD pannel power up */
-+ pxa_nssp_output(TG_PINICTL,0x4);
-+ mdelay(50);
-+
-+ /* TG LCD GVSS */
-+ pxa_nssp_output(TG_PINICTL,0x0);
-+
-+ if (!initialised)
-+ {
-+ /* after the pannel is powered up the first time, we can access the i2c bus */
-+ /* so probe for the DAC */
-+ i2c_add_driver(&tosa_driver);
-+ initialised = 1;
-+ mdelay(50);
-+ }
-+ if (tosa_i2c_dac)
-+ /* set common voltage */
-+ i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj);
-+
-+}
-+
-+static void tosa_lcd_tg_off(struct device *dev)
-+{
-+ /* TG LCD VHSA off */
-+ pxa_nssp_output(TG_PINICTL,0x4);
-+ mdelay(50);
-+
-+ /* TG LCD signal off */
-+ pxa_nssp_output(TG_PINICTL,0x6);
-+ mdelay(50);
-+
-+ /* TG Off */
-+ set_tc6393_gpio(&tc6393_device.dev, TOSA_TC6393_TG_ON);
-+ mdelay(100);
-+
-+ /* L3V Off */
-+ reset_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON);
-+}
-+
-+static int tosa_detect_client(struct i2c_adapter* adapter, int address, int kind) {
-+ int err = 0;
-+
-+ printk("Tosa-LCD: DAC detected address:0x%2.2x\n",address);
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA ))
-+ goto ERROR0;
-+
-+ if (!(tosa_i2c_dac = (struct i2c_client*)kzalloc(sizeof(*tosa_i2c_dac), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto ERROR0;
-+ }
-+
-+ //i2c_set_clientdata(tosa_i2c_dac, data);
-+ tosa_i2c_dac->addr = address;
-+ tosa_i2c_dac->adapter = adapter;
-+ tosa_i2c_dac->driver = &tosa_driver;
-+ tosa_i2c_dac->dev.parent = &tc6393_device.dev;
-+ strcpy(tosa_i2c_dac->name, "tosa lcd");
-+ if ((err = i2c_attach_client(tosa_i2c_dac)))
-+ goto ERROR3;
-+
-+ /* Now i2c is ready, allocate the backlight device*/
-+ tosabl_device = platform_device_alloc("corgi-bl", -1);
-+ if (!tosabl_device) {
-+ err = -ENOMEM;
-+ goto ERROR4;
-+ }
-+
-+ /* set parent device */
-+ tosabl_device->dev.parent = &tosa_i2c_dac->dev;
-+ tosabl_device->dev.platform_data = &tosa_bl_machinfo;
-+
-+ err = platform_device_add(tosabl_device);
-+
-+ if (err)
-+ platform_device_put(tosabl_device);
-+
-+ /* set common voltage */
-+ i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj);
-+
-+ return 0;
-+ERROR4:
-+ i2c_detach_client(tosa_i2c_dac);
-+ERROR3:
-+ kfree(tosa_i2c_dac);
-+ERROR0:
-+ return err;
-+}
-+
-+static int tosa_attach_adapter(struct i2c_adapter* adapter) {
-+ return i2c_probe(adapter, &addr_data, &tosa_detect_client);
-+}
-+
-+static int tosa_detach_client(struct i2c_client* client) {
-+ int err;
-+
-+ if ((err = i2c_detach_client(client))) {
-+ printk(KERN_ERR "tosa: Cannot deregister client\n");
-+ return err;
-+ }
-+ kfree(client);
-+ return 0;
-+}
-+
-+static struct i2c_driver tosa_driver={
-+ .id = TOSA_LCD_I2C_DEVICEID,
-+ .attach_adapter = tosa_attach_adapter,
-+ .detach_client = tosa_detach_client,
-+};
-+
-+static int __init tosa_lcd_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+ spin_lock_init(&tosa_nssp_lock);
-+
-+ if (!pdev->dev.platform_data)
-+ return -EINVAL;
-+
-+ /* Set Common Voltage */
-+ comadj = sharpsl_param.comadj == -1 ? COMADJ_DEFAULT : sharpsl_param.comadj;
-+
-+ ret=ssp_init(&tosa_nssp_dev,2,0);
-+
-+ /* initialize SSP */
-+ pxa_gpio_mode(GPIO83_NSSP_TX);
-+ pxa_gpio_mode(GPIO81_NSSP_CLK_OUT);
-+ pxa_gpio_mode(GPIO82_NSSP_FRM_OUT);
-+
-+ if (ret)
-+ printk(KERN_ERR "Unable to register NSSP handler!\n");
-+ else {
-+ struct tmio_lcd_ops* *tmio_ops = pdev->dev.platform_data;
-+ ssp_disable(&tosa_nssp_dev);
-+ initialised = 0;
-+
-+ /* Set the lcd functions */
-+ *tmio_ops = (struct tmio_lcd_ops*) &tosa_tc6393_lcd_ops;
-+ }
-+
-+ return ret;
-+}
-+
-+static int tosa_lcd_remove(struct platform_device *pdev)
-+{
-+ /* delete the lcd functions */
-+ struct tmio_lcd_ops* *tmio_ops = pdev->dev.platform_data;
-+ *tmio_ops = NULL;
-+
-+ ssp_exit(&tosa_nssp_dev);
-+
-+ if (tosa_i2c_dac) {
-+ i2c_detach_client(tosa_i2c_dac);
-+ kfree(tosa_i2c_dac);
-+ }
-+
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+
-+static int tosa_lcd_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ ssp_flush(&tosa_nssp_dev);
-+ ssp_save_state(&tosa_nssp_dev,&tosa_nssp_state);
-+ return 0;
-+}
-+
-+static int tosa_lcd_resume(struct platform_device *pdev)
-+{
-+ printk("tosa_lcd_resume\n");
-+ ssp_restore_state(&tosa_nssp_dev,&tosa_nssp_state);
-+ ssp_enable(&tosa_nssp_dev);
-+ printk("tosa_lcd_resume ok\n");
-+ return 0;
-+}
-+#else
-+
-+#define tosa_lcd_suspend NULL
-+#define tosa_lcd_resume NULL
-+
-+#endif
-+
-+
-+static struct platform_driver tosalcd_driver = {
-+ .probe = tosa_lcd_probe,
-+ .remove = tosa_lcd_remove,
-+ .suspend = tosa_lcd_suspend,
-+ .resume = tosa_lcd_resume,
-+ .driver = {
-+ .name = "tosa-lcd",
-+ },
-+};
-+
-+static int __init tosa_lcd_init(void)
-+{
-+ return platform_driver_register(&tosalcd_driver);
-+}
-+
-+static void __exit tosa_lcd_cleanup (void)
-+{
-+ platform_driver_unregister (&tosalcd_driver);
-+}
-+
-+device_initcall(tosa_lcd_init);
-+module_exit (tosa_lcd_cleanup);
-+
-+MODULE_DESCRIPTION ("Tosa LCD device");
-+MODULE_AUTHOR ("Dirk Opfer");
-+MODULE_LICENSE ("GPL v2");
-Index: git/arch/arm/mach-pxa/tosa.c
-===================================================================
---- git.orig/arch/arm/mach-pxa/tosa.c 2006-11-07 22:13:10.000000000 +0000
-+++ git/arch/arm/mach-pxa/tosa.c 2006-11-07 23:29:38.000000000 +0000
-@@ -24,6 +24,7 @@
- #include <linux/mtd/partitions.h>
- #include <linux/pm.h>
- #include <linux/delay.h>
-+#include <linux/fb.h>
-
- #include <asm/setup.h>
- #include <asm/memory.h>
-@@ -48,7 +49,6 @@
-
- #include "generic.h"
-
--
- /*
- * SCOOP Device
- */
-@@ -345,7 +345,38 @@ static struct tmio_nand_platform_data to
- .badblock_pattern = &tosa_tc6393_nand_bbt,
- };
-
--extern struct tmio_lcd_platform_data tosa_tc6393_lcd_platform_data;
-+static struct fb_videomode tosa_tc6393_lcd_mode[] = {
-+ {
-+ .xres = 480,
-+ .yres = 640,
-+ .pixclock = 0x002cdf00,/* PLL divisor */
-+ .left_margin = 0x004c,
-+ .right_margin = 0x005b,
-+ .upper_margin = 0x0001,
-+ .lower_margin = 0x000d,
-+ .hsync_len = 0x0002,
-+ .vsync_len = 0x0001,
-+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+ },{
-+ .xres = 240,
-+ .yres = 320,
-+ .pixclock = 0x00e7f203,/* PLL divisor */
-+ .left_margin = 0x0024,
-+ .right_margin = 0x002f,
-+ .upper_margin = 0x0001,
-+ .lower_margin = 0x000d,
-+ .hsync_len = 0x0002,
-+ .vsync_len = 0x0001,
-+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+}};
-+
-+struct tmio_lcd_platform_data tosa_tc6393_lcd_platform_data = {
-+ .ops = NULL,
-+ .modelist = tosa_tc6393_lcd_mode,
-+ .num_modes = ARRAY_SIZE(tosa_tc6393_lcd_mode),
-+};
-
- static struct tmio_cell tosa_tc6393_cells[] = {
- {
-@@ -384,6 +415,19 @@ struct platform_device tc6393_device = {
- .num_resources = ARRAY_SIZE(tc6393_resources),
- .resource = tc6393_resources,
- };
-+EXPORT_SYMBOL (tc6393_device);
-+
-+/*
-+ * Tosa LCD / Backlight stuff
-+ */
-+static struct platform_device tosalcd_device = {
-+ .name = "tosa-lcd",
-+ .id = -1,
-+ .dev = {
-+ .parent = &tc6393_device.dev,
-+ .platform_data = &tosa_tc6393_lcd_platform_data.ops,
-+ },
-+};
-
- static struct platform_device *devices[] __initdata = {
- &tosascoop_device,
-@@ -391,6 +435,7 @@ static struct platform_device *devices[]
- &tosakbd_device,
- &tosaled_device,
- &tc6393_device,
-+ &tosalcd_device,
- };
-
- static void tosa_poweroff(void)
-Index: git/arch/arm/mach-pxa/Kconfig
-===================================================================
---- git.orig/arch/arm/mach-pxa/Kconfig 2006-11-07 22:13:10.000000000 +0000
-+++ git/arch/arm/mach-pxa/Kconfig 2006-11-07 22:13:10.000000000 +0000
-@@ -129,7 +129,10 @@ config MACH_TOSA
- bool "Enable Sharp SL-6000x (Tosa) Support"
- depends PXA_SHARPSL_25x
- select TOSHIBA_TC6393XB
-- select SHARPSL_PM
-+ select I2C
-+ select I2C_PXA
-+ select SHARPSL_PM
-+ select PXA_SSP
-
- config PXA25x
- bool
diff --git a/packages/linux/linux-rp-2.6.19+git/wm9712-reset-loop-r2.patch b/packages/linux/linux-rp-2.6.19+git/wm9712-reset-loop-r2.patch
deleted file mode 100644
index 78e81ea83a..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/wm9712-reset-loop-r2.patch
+++ /dev/null
@@ -1,44 +0,0 @@
- sound/soc/codecs/wm9712.c | 28 ++++++++++++++++++----------
- 1 file changed, 18 insertions(+), 10 deletions(-)
-
-Index: git/sound/soc/codecs/wm9712.c
-===================================================================
---- git.orig/sound/soc/codecs/wm9712.c 2006-11-07 22:10:01.000000000 +0000
-+++ git/sound/soc/codecs/wm9712.c 2006-11-07 22:11:50.000000000 +0000
-@@ -618,18 +618,26 @@ static int wm9712_dapm_event(struct snd_
-
- static int wm9712_reset(struct snd_soc_codec *codec, int try_warm)
- {
-- if (try_warm && soc_ac97_ops.warm_reset) {
-- soc_ac97_ops.warm_reset(codec->ac97);
-- if (!(ac97_read(codec, 0) & 0x8000))
-- return 1;
-- }
-+ int retry = 3;
-
-- soc_ac97_ops.reset(codec->ac97);
-- if (ac97_read(codec, 0) & 0x8000)
-- goto err;
-- return 0;
-+ while (retry--)
-+ {
-+ if(try_warm && soc_ac97_ops.warm_reset) {
-+ soc_ac97_ops.warm_reset(codec->ac97);
-+ if(ac97_read(codec, 0) & 0x8000)
-+ continue;
-+ else
-+ return 1;
-+ }
-+
-+ soc_ac97_ops.reset(codec->ac97);
-+ if(ac97_read(codec, 0) & 0x8000)
-+ continue;
-+ else
-+ return 0;
-+
-+ }
-
--err:
- printk(KERN_ERR "WM9712 AC97 reset failed\n");
- return -EIO;
- }
diff --git a/packages/linux/linux-rp-2.6.19+git/wm9712-suspend-cold-res-r2.patch b/packages/linux/linux-rp-2.6.19+git/wm9712-suspend-cold-res-r2.patch
deleted file mode 100644
index 5179b47cc4..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/wm9712-suspend-cold-res-r2.patch
+++ /dev/null
@@ -1,16 +0,0 @@
- sound/soc/codecs/wm9712.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: git/sound/soc/codecs/wm9712.c
-===================================================================
---- git.orig/sound/soc/codecs/wm9712.c 2006-11-07 21:57:34.000000000 +0000
-+++ git/sound/soc/codecs/wm9712.c 2006-11-07 21:59:30.000000000 +0000
-@@ -651,7 +651,7 @@ static int wm9712_soc_resume(struct plat
- int i, ret;
- u16 *cache = codec->reg_cache;
-
-- ret = wm9712_reset(codec, 1);
-+ ret = wm9712_reset(codec, 0);
- if (ret < 0){
- printk(KERN_ERR "could not reset AC97 codec\n");
- return ret;
diff --git a/packages/linux/linux-rp-2.6.19+git/wm97xx-lcdnoise-r0.patch b/packages/linux/linux-rp-2.6.19+git/wm97xx-lcdnoise-r0.patch
deleted file mode 100644
index 191de3af22..0000000000
--- a/packages/linux/linux-rp-2.6.19+git/wm97xx-lcdnoise-r0.patch
+++ /dev/null
@@ -1,208 +0,0 @@
-Index: linux-tosa/drivers/input/touchscreen/wm9712.c
-===================================================================
---- linux-tosa.orig/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:50.923275896 +0100
-@@ -1,7 +1,7 @@
- /*
- * wm9712.c -- Codec driver for Wolfson WM9712 AC97 Codecs.
- *
-- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
- * Author: Liam Girdwood
- * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
- * Parts Copyright : Ian Molton <spyro@f2s.com>
-@@ -13,6 +13,12 @@
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
-+ * Revision history
-+ * 4th Jul 2005 Initial version.
-+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
-+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
-+ * touchscreen interference.
-+ *
- */
-
- #include <linux/module.h>
-@@ -28,6 +34,10 @@
- #define WM9705_VERSION "0.60"
- #define DEFAULT_PRESSURE 0xb0c0
-
-+#define CCNT(a) asm volatile ("mrc p14, 0, %0, C1, C1, 0" : "=r"(a))
-+#define CCNT_ON() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+#define CCNT_OFF() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+
- /*
- * Debug
- */
-@@ -243,6 +253,36 @@
- return wm->dig[2] & WM9712_PDEN;
- }
-
-+
-+#ifdef CONFIG_MACH_TOSA
-+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
-+ * before sampling the Y axis of the touchscreen */
-+static inline void wm9712_lcd_sync_on(struct wm97xx* wm, int adcsel) {
-+ unsigned long timer1 = 0, timer2 = 0, wait_time = 0;
-+ if (adcsel == WM97XX_ADCSEL_Y) {
-+ wait_time = wm97xx_calc_lcd_waittime(wm);
-+
-+ CCNT_ON();
-+
-+ if (wait_time) {
-+ /* wait for LCD rising edge */
-+ wm_machinfo->wait_hsync();
-+ /* get clock */
-+ CCNT(timer1);
-+ CCNT(timer2);
-+
-+ while ((timer2 - timer1) < wait_time) {
-+ CCNT(timer2);
-+ }
-+ }
-+ }
-+}
-+
-+static inline void wm9712_lcd_sync_off(void) {
-+ CCNT_OFF();
-+}
-+#endif
-+
- /*
- * Read a sample from the WM9712 adc in polling mode.
- */
-@@ -260,6 +300,9 @@
- /* set up digitiser */
- if (adcsel & 0x8000)
- adcsel = ((adcsel & 0x7fff) + 3) << 12;
-+ #ifdef CONFIG_MACH_TOSA
-+ wm9712_lcd_sync_on(wm, adcsel);
-+ #endif
- wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, adcsel | WM97XX_POLL | WM97XX_DELAY(delay));
-
- /* wait 3 AC97 time slots + delay for conversion */
-@@ -282,6 +325,10 @@
-
- *sample = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-
-+ #ifdef CONFIG_MACH_TOSA
-+ wm9712_lcd_sync_off();
-+ #endif
-+
- /* check we have correct sample */
- if ((*sample & WM97XX_ADCSEL_MASK) != adcsel) {
- dbg ("adc wrong sample, read %x got %x", adcsel,
-@@ -303,11 +350,12 @@
- static int wm9712_poll_touch(struct wm97xx* wm, struct wm97xx_data *data)
- {
- int rc;
--
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_X, &data->x)) != RC_VALID)
- return rc;
-+
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_Y, &data->y)) != RC_VALID)
- return rc;
-+
- if (pil && !five_wire) {
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_PRES, &data->p)) != RC_VALID)
- return rc;
-Index: linux-tosa/drivers/input/touchscreen/wm97xx-core.c
-===================================================================
---- linux-tosa.orig/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:50.924275744 +0100
-@@ -2,7 +2,7 @@
- * wm97xx-core.c -- Touch screen driver core for Wolfson WM9705, WM9712
- * and WM9713 AC97 Codecs.
- *
-- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
- * Author: Liam Girdwood
- * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
- * Parts Copyright : Ian Molton <spyro@f2s.com>
-@@ -67,6 +67,9 @@
- * GPIOs) and 2.6 power management.
- * 29th Nov 2004 Added WM9713 support.
- * 4th Jul 2005 Moved codec specific code out to seperate files.
-+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
-+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
-+ * touchscreen interference.
- */
-
- #include <linux/module.h>
-@@ -94,6 +97,7 @@
- static DECLARE_MUTEX(gpio_sem);
- static LIST_HEAD(wm97xx_misc_list);
- static struct wm97xx* wm_codec = NULL;
-+struct wm97xx_machinfo *wm_machinfo;
-
- /*
- * WM97xx - enable/disable AUX ADC sysfs
-@@ -832,6 +836,23 @@
- mdev->remove(wm_codec);
- }
-
-+#ifdef CONFIG_MACH_TOSA
-+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
-+ * before sampling the Y axis of the touchscreen */
-+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm) {
-+ unsigned long hsync_time = wm_machinfo->get_hsync_time();
-+ return hsync_time;
-+}
-+
-+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo) {
-+ wm_machinfo = machinfo;
-+}
-+
-+void wm97xx_unset_machinfo() {
-+ wm_machinfo = NULL;
-+}
-+#endif
-+
- static struct device_driver wm97xx_driver = {
- .name = "ac97",
- .bus = &ac97_bus_type,
-@@ -861,6 +882,9 @@
- EXPORT_SYMBOL_GPL(wm97xx_reg_write);
- EXPORT_SYMBOL_GPL(wm97xx_register_misc_dev);
- EXPORT_SYMBOL_GPL(wm97xx_unregister_misc_dev);
-+EXPORT_SYMBOL_GPL(wm97xx_calc_lcd_waittime);
-+EXPORT_SYMBOL_GPL(wm97xx_set_machinfo);
-+EXPORT_SYMBOL_GPL(wm97xx_unset_machinfo);
-
- module_init(wm97xx_init);
- module_exit(wm97xx_exit);
-Index: linux-tosa/include/linux/wm97xx.h
-===================================================================
---- linux-tosa.orig/include/linux/wm97xx.h 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/include/linux/wm97xx.h 2006-08-29 16:52:50.924275744 +0100
-@@ -207,6 +207,7 @@
-
- struct wm97xx;
- extern struct wm97xx_codec_drv wm97xx_codec;
-+extern struct wm97xx_machinfo *wm_machinfo;
-
- /*
- * Codec driver interface - allows mapping to WM9705/12/13 and newer codecs
-@@ -253,6 +254,11 @@
- struct list_head list;
- };
-
-+struct wm97xx_machinfo {
-+ unsigned long (*get_hsync_time)(void);
-+ void (*wait_hsync)(void);
-+};
-+
- int wm97xx_register_misc_dev(struct wm97xx_misc_dev* mdev);
- void wm97xx_unregister_misc_dev(struct wm97xx_misc_dev* mdev);
-
-@@ -281,4 +287,9 @@
- int wm97xx_acc_startup(struct wm97xx* wm);
- void wm97xx_acc_shutdown(struct wm97xx* wm);
-
-+
-+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm);
-+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo);
-+void wm97xx_unset_machinfo(void);
-+
- #endif
diff --git a/packages/linux/linux-rp-2.6.20/add-oz-release-string.patch b/packages/linux/linux-rp-2.6.20/add-oz-release-string.patch
deleted file mode 100644
index a80a1d5528..0000000000
--- a/packages/linux/linux-rp-2.6.20/add-oz-release-string.patch
+++ /dev/null
@@ -1,28 +0,0 @@
----
- Makefile | 1 +
- init/version.c | 2 +-
- 2 files changed, 2 insertions(+), 1 deletion(-)
-
-Index: git/init/version.c
-===================================================================
---- git.orig/init/version.c 2006-10-31 16:09:47.000000000 +0000
-+++ git/init/version.c 2006-10-31 16:24:54.000000000 +0000
-@@ -35,5 +35,5 @@ struct uts_namespace init_uts_ns = {
- EXPORT_SYMBOL_GPL(init_uts_ns);
-
- const char linux_banner[] =
-- "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
-+ "Linux version " UTS_RELEASE OPENZAURUS_RELEASE " (" LINUX_COMPILE_BY "@"
- LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
-Index: git/Makefile
-===================================================================
---- git.orig/Makefile 2006-10-31 16:08:28.000000000 +0000
-+++ git/Makefile 2006-10-31 16:27:02.000000000 +0000
-@@ -905,6 +905,7 @@ endef
- define filechk_version.h
- (echo \#define LINUX_VERSION_CODE $(shell \
- expr $(VERSION) \* 65536 + $(PATCHLEVEL) \* 256 + $(SUBLEVEL)); \
-+ echo \#define OPENZAURUS_RELEASE \"$(OPENZAURUS_RELEASE)\"; \
- echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
- endef
-
diff --git a/packages/linux/linux-rp-2.6.20/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.20/connectplus-remove-ide-HACK.patch
deleted file mode 100644
index 4414b21191..0000000000
--- a/packages/linux/linux-rp-2.6.20/connectplus-remove-ide-HACK.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: linux-2.6.13/drivers/ide/legacy/ide-cs.c
-===================================================================
---- linux-2.6.13.orig/drivers/ide/legacy/ide-cs.c 2005-09-01 22:43:46.000000000 +0100
-+++ linux-2.6.13/drivers/ide/legacy/ide-cs.c 2005-09-01 22:45:46.000000000 +0100
-@@ -488,7 +488,6 @@
- PCMCIA_DEVICE_PROD_ID123("KODAK Picture Card ", "KODAK ", "V100K", 0x94a0d8f3, 0xe4fc3ea0, 0xe5e7eed4),
- PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
- PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
-- PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
- PCMCIA_DEVICE_NULL,
- };
- MODULE_DEVICE_TABLE(pcmcia, ide_ids);
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-akita b/packages/linux/linux-rp-2.6.20/defconfig-akita
deleted file mode 100644
index c89d954696..0000000000
--- a/packages/linux/linux-rp-2.6.20/defconfig-akita
+++ /dev/null
@@ -1,1739 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Thu Mar 29 12:24:24 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-CONFIG_SND_PXA2xx_SOC_SPITZ=m
-# CONFIG_SND_PXA2xx_SOC_MAGICIAN is not set
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-CONFIG_SND_SOC_WM8750=m
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8976 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-CONFIG_SHARPSL_RC=m
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-c7x0 b/packages/linux/linux-rp-2.6.20/defconfig-c7x0
deleted file mode 100644
index 452e0a669c..0000000000
--- a/packages/linux/linux-rp-2.6.20/defconfig-c7x0
+++ /dev/null
@@ -1,1786 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Thu Mar 29 13:32:11 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-CONFIG_MACH_CORGI=y
-CONFIG_MACH_SHEPHERD=y
-CONFIG_MACH_HUSKY=y
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-CONFIG_PXA_SHARP_C7xx=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_CPU_FREQ_PXA25x=y
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_KEYBOARD_CORGI=y
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_CORGI=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-CONFIG_VIDEO_USBVIDEO=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-CONFIG_USB_DSBR=m
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MBX is not set
-CONFIG_FB_W100=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-CONFIG_SND_PXA2xx_SOC_CORGI=m
-# CONFIG_SND_PXA2xx_SOC_MAGICIAN is not set
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8976 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-collie b/packages/linux/linux-rp-2.6.20/defconfig-collie
deleted file mode 100644
index 422ed94df3..0000000000
--- a/packages/linux/linux-rp-2.6.20/defconfig-collie
+++ /dev/null
@@ -1,1739 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20.4
-# Fri Apr 6 23:20:59 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-# CONFIG_ELF_CORE is not set
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_COLLIE=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-CONFIG_PCMCIA_SA1100=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-CONFIG_NODES_SHIFT=2
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_USB_IRDA=m
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_SA1100_FIR=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-CONFIG_MTD_OBSOLETE_CHIPS=y
-CONFIG_MTD_SHARP=y
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SA1100=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_ARLAN is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-# CONFIG_SPI_BITBANG is not set
-CONFIG_SPI_LOCOMO=m
-
-#
-# SPI Protocol Masters
-#
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_MCP=y
-CONFIG_MCP_SA11X0=y
-CONFIG_MCP_UCB1200=y
-CONFIG_MCP_UCB1200_TS=m
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=m
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK 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_USB_DSBR is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-CONFIG_FB_SA1100=y
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-CONFIG_USB_NET_CDC_SUBSET=m
-# CONFIG_USB_ALI_M5632 is not set
-# CONFIG_USB_AN2720 is not set
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_EPSON2888 is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-CONFIG_MMC_DEBUG=y
-CONFIG_MMC_BLOCK=m
-# CONFIG_MMC_TIFM_SD is not set
-CONFIG_MMC_SPI=m
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=m
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=m
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=m
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-hx2000 b/packages/linux/linux-rp-2.6.20/defconfig-hx2000
deleted file mode 100644
index 2a67a2d045..0000000000
--- a/packages/linux/linux-rp-2.6.20/defconfig-hx2000
+++ /dev/null
@@ -1,1165 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20-rc2
-# Mon Jan 1 01:49:04 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_MACH_HX2750=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-CONFIG_PXA_KEYS=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-CONFIG_PM_DEBUG=y
-# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_TOUCHSCREEN_TSC2101=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-CONFIG_MFD_TSC2101=y
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_HX2750=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-poodle b/packages/linux/linux-rp-2.6.20/defconfig-poodle
deleted file mode 100644
index 13616c08f1..0000000000
--- a/packages/linux/linux-rp-2.6.20/defconfig-poodle
+++ /dev/null
@@ -1,1656 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Jul 10 23:38:56 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-CONFIG_MACH_POODLE=y
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_EM28XX is not set
-CONFIG_USB_DSBR=m
-CONFIG_VIDEO_USBVIDEO=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-CONFIG_LOGO_OZ240_CLUT224=y
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8731 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8974 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_MAINSTONE_BASEBAND is not set
-# CONFIG_SND_MAINSTONE_BLUETOOTH is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_POODLE=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-qemuarm b/packages/linux/linux-rp-2.6.20/defconfig-qemuarm
deleted file mode 100644
index f70b6db7c7..0000000000
--- a/packages/linux/linux-rp-2.6.20/defconfig-qemuarm
+++ /dev/null
@@ -1,1193 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Sat Aug 26 22:45:02 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-CONFIG_ARCH_VERSATILE=y
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Versatile platform type
-#
-CONFIG_ARCH_VERSATILE_PB=y
-# CONFIG_MACH_VERSATILE_AB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-# CONFIG_KEXEC is not set
-CONFIG_ARM_VIC=y
-CONFIG_ICST307=y
-
-#
-# Bus support
-#
-CONFIG_ARM_AMBA=y
-CONFIG_PCI=y
-# CONFIG_PCI_DEBUG is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_LEDS=y
-CONFIG_LEDS_TIMER=y
-CONFIG_LEDS_CPU=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_VFP=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_APM is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_AFS_PARTS=y
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_GEOMETRY is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=51200
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=y
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-CONFIG_SCSI_SYM53C8XX_2=y
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-CONFIG_SCSI_SYM53C8XX_MMIO=y
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_SMC91X=y
-# CONFIG_DM9000 is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-CONFIG_SERIO_AMBAKMI=y
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_AMBA_PL011=y
-CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-# CONFIG_LEDS_CLASS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-# CONFIG_LEDS_TRIGGERS is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-CONFIG_FB_ARMCLCD=y
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_UHCI_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFSD_TCP is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=y
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-# 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_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_ISO8859_1 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_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-qemux86 b/packages/linux/linux-rp-2.6.20/defconfig-qemux86
deleted file mode 100644
index 08e0a0c6c7..0000000000
--- a/packages/linux/linux-rp-2.6.20/defconfig-qemux86
+++ /dev/null
@@ -1,1567 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Oct 16 19:42:42 2006
-#
-CONFIG_X86_32=y
-CONFIG_SEMAPHORE_SLEEPERS=y
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_DMI=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_CPUSETS is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_VM86=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_LBD=y
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# Processor type and features
-#
-CONFIG_SMP=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_ES7000 is not set
-CONFIG_M386=y
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_X86_PPRO_FENCE=y
-CONFIG_X86_F00F_BUG=y
-CONFIG_X86_INTEL_USERCOPY=y
-# CONFIG_HPET_TIMER is not set
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_NONFATAL=y
-CONFIG_X86_MCE_P4THERMAL=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-CONFIG_IRQBALANCE=y
-# CONFIG_REGPARM is not set
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=250
-# CONFIG_KEXEC is not set
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_HOTPLUG_CPU is not set
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_VIDEO=m
-# CONFIG_ACPI_HOTKEY is not set
-CONFIG_ACPI_FAN=y
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_ASUS is not set
-CONFIG_ACPI_IBM=m
-# CONFIG_ACPI_IBM_DOCK is not set
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-# CONFIG_PCIEPORTBUS is not set
-# CONFIG_PCI_MSI is not set
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=y
-CONFIG_BINFMT_MISC=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=y
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=y
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=y
-CONFIG_PARPORT_PC=y
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=y
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=51200
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-CONFIG_BLK_DEV_IDECD=y
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-CONFIG_BLK_DEV_CMD640=y
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_RZ1000=y
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-# CONFIG_BLK_DEV_AEC62XX 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_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 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_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-CONFIG_BLK_DEV_PIIX=y
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-CONFIG_SCSI_DPT_I2O=m
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-CONFIG_SCSI_SATA=y
-# CONFIG_SCSI_SATA_AHCI is not set
-# CONFIG_SCSI_SATA_SVW is not set
-CONFIG_SCSI_ATA_PIIX=y
-# CONFIG_SCSI_SATA_MV is not set
-# CONFIG_SCSI_SATA_NV is not set
-# CONFIG_SCSI_PDC_ADMA is not set
-# CONFIG_SCSI_SATA_QSTOR is not set
-# CONFIG_SCSI_SATA_PROMISE is not set
-CONFIG_SCSI_SATA_SX4=m
-# CONFIG_SCSI_SATA_SIL is not set
-# CONFIG_SCSI_SATA_SIL24 is not set
-CONFIG_SCSI_SATA_SIS=m
-# CONFIG_SCSI_SATA_ULI is not set
-# CONFIG_SCSI_SATA_VIA is not set
-# CONFIG_SCSI_SATA_VITESSE is not set
-CONFIG_SCSI_SATA_INTEL_COMBINED=y
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA 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_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-CONFIG_SCSI_IPR=m
-# CONFIG_SCSI_IPR_TRACE is not set
-# CONFIG_SCSI_IPR_DUMP is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_IEEE1394=y
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_OUI_DB is not set
-# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
-# CONFIG_IEEE1394_EXPORT_FULL_API is not set
-
-#
-# Device Drivers
-#
-
-#
-# Texas Instruments PCILynx requires I2C
-#
-CONFIG_IEEE1394_OHCI1394=y
-
-#
-# Protocol Drivers
-#
-# CONFIG_IEEE1394_VIDEO1394 is not set
-# CONFIG_IEEE1394_SBP2 is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-# CONFIG_IEEE1394_DV1394 is not set
-CONFIG_IEEE1394_RAWIO=y
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_LANCE is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-CONFIG_NET_ISA=y
-# CONFIG_E2100 is not set
-# CONFIG_EWRK3 is not set
-# CONFIG_EEXPRESS is not set
-# CONFIG_EEXPRESS_PRO is not set
-# CONFIG_HPLAN_PLUS is not set
-# CONFIG_HPLAN is not set
-# CONFIG_LP486E is not set
-# CONFIG_ETH16I is not set
-CONFIG_NE2000=y
-# CONFIG_ZNET is not set
-# CONFIG_SEEQ8005 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_AC3200 is not set
-# CONFIG_APRICOT is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_CS89x0 is not set
-# CONFIG_DGRS is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-CONFIG_NE2K_PCI=y
-# CONFIG_8139CP is not set
-CONFIG_8139TOO=y
-CONFIG_8139TOO_PIO=y
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_NET_POCKET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-CONFIG_S2IO=m
-# CONFIG_S2IO_NAPI is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-CONFIG_PRINTER=y
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
-# CONFIG_TIPAR is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-CONFIG_AGP=y
-# CONFIG_AGP_ALI is not set
-# CONFIG_AGP_ATI is not set
-# CONFIG_AGP_AMD is not set
-# CONFIG_AGP_AMD64 is not set
-CONFIG_AGP_INTEL=y
-# CONFIG_AGP_NVIDIA is not set
-# CONFIG_AGP_SIS is not set
-# CONFIG_AGP_SWORKS is not set
-# CONFIG_AGP_VIA is not set
-# CONFIG_AGP_EFFICEON is not set
-CONFIG_DRM=y
-# CONFIG_DRM_TDFX is not set
-# CONFIG_DRM_R128 is not set
-# CONFIG_DRM_RADEON is not set
-# CONFIG_DRM_I810 is not set
-# CONFIG_DRM_I830 is not set
-# CONFIG_DRM_I915 is not set
-# CONFIG_DRM_MGA is not set
-# CONFIG_DRM_SIS is not set
-# CONFIG_DRM_VIA is not set
-# CONFIG_DRM_SAVAGE is not set
-# CONFIG_MWAVE is not set
-# CONFIG_CS5535_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-# CONFIG_IBM_ASM is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
-# CONFIG_FB_VESA_STD is not set
-CONFIG_FB_VESA_TNG=y
-CONFIG_FB_VESA_DEFAULT_MODE="640x480-32@60"
-CONFIG_VIDEO_SELECT=y
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_I810 is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_CYBLA is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=y
-CONFIG_SND_AC97_BUS=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ISA devices
-#
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB 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_MIRO is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_WAVEFRONT is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5535AUDIO 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_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR 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_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_USX2Y is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGETKIT is not set
-CONFIG_USB_PHIDGETSERVO=m
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-# CONFIG_EDAC is not set
-
-#
-# Real Time Clock
-#
-# CONFIG_RTC_CLASS is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-CONFIG_UDF_FS=y
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-# CONFIG_NFS_V3 is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-# CONFIG_NFSD_V3 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
-# CONFIG_KPROBES is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=15
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_UNWIND_INFO is not set
-CONFIG_EARLY_PRINTK=y
-CONFIG_STACK_BACKTRACE_COLS=2
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-CONFIG_DOUBLEFAULT=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_KTIME_SCALAR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-spitz b/packages/linux/linux-rp-2.6.20/defconfig-spitz
deleted file mode 100644
index 4ee5b814fb..0000000000
--- a/packages/linux/linux-rp-2.6.20/defconfig-spitz
+++ /dev/null
@@ -1,1739 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Tue Jun 26 23:12:35 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw fbcon=rotate:1 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-CONFIG_SND_PXA2xx_SOC_SPITZ=m
-# CONFIG_SND_PXA2xx_SOC_MAGICIAN is not set
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-CONFIG_SND_SOC_WM8750=m
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8976 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-CONFIG_SHARPSL_RC=m
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-spitz.flash b/packages/linux/linux-rp-2.6.20/defconfig-spitz.flash
deleted file mode 100644
index 2cbd1cc704..0000000000
--- a/packages/linux/linux-rp-2.6.20/defconfig-spitz.flash
+++ /dev/null
@@ -1,1604 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Sun Sep 3 23:29:17 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_IWMMXT=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rw fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-CONFIG_LOGO_OZ640_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-CONFIG_SND_AC97_BUS=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-CONFIG_SND_PXA2xx_SOC_SPITZ=m
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-CONFIG_SND_SOC_WM8750=m
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=m
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_SHARPSL_RC=m
diff --git a/packages/linux/linux-rp-2.6.20/defconfig-tosa b/packages/linux/linux-rp-2.6.20/defconfig-tosa
deleted file mode 100644
index 4360f7a179..0000000000
--- a/packages/linux/linux-rp-2.6.20/defconfig-tosa
+++ /dev/null
@@ -1,1612 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-rc5-git5
-# Tue Mar 14 09:05:26 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-CONFIG_MACH_TOSA=y
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-CONFIG_TOSHIBA_TC6393XB=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_TMIO=y
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-CONFIG_KEYBOARD_TOSA=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_CORGI is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_WM97XX=y
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-CONFIG_TOUCHSCREEN_WM9712=y
-# CONFIG_TOUCHSCREEN_WM9713 is not set
-# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TOSA=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_W100 is not set
-CONFIG_FB_TMIO=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_BUS=y
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=y
-CONFIG_SND_PXA2xx_SOC_AC97=y
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_TOSA=y
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-CONFIG_SND_SOC_WM9712=y
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_PWC is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_GENERIC_ALLOCATOR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.20/orinoco-remove-all-which-are-in-hostap-HACK.patch b/packages/linux/linux-rp-2.6.20/orinoco-remove-all-which-are-in-hostap-HACK.patch
deleted file mode 100644
index 380349f809..0000000000
--- a/packages/linux/linux-rp-2.6.20/orinoco-remove-all-which-are-in-hostap-HACK.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-This patch should resolve problem when people get eth0 (orinoco_cs) instead of wlan0 (hostap_cs)
-with their WiFi cards.
-
-Patch will NEVER been accepted upstream.
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
-Index: linux/drivers/net/wireless/orinoco_cs.c
-===================================================================
---- linux.orig/drivers/net/wireless/orinoco_cs.c 2006-08-23 16:04:10.000000000 +0200
-+++ linux/drivers/net/wireless/orinoco_cs.c 2006-08-23 16:17:43.000000000 +0200
-@@ -453,33 +453,21 @@
- "Pavel Roskin <proski@gnu.org>, et al)";
-
- static struct pcmcia_device_id orinoco_cs_ids[] = {
-- PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100), /* SonicWALL Long Range Wireless Card */
-- PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7300), /* Sohoware NCP110, Philips 802.11b */
- PCMCIA_DEVICE_MANF_CARD(0x0089, 0x0002), /* AnyPoint(TM) Wireless II PC Card */
-- PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), /* 3Com AirConnect PCI 777A */
-- PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000), /* PROXIM RangeLAN-DS/LAN PC CARD */
- PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002), /* Compaq WL100 11 Mbps Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0002), /* Lucent Orinoco and old Intersil */
- PCMCIA_DEVICE_MANF_CARD(0x016b, 0x0001), /* Ericsson WLAN Card C11 */
- PCMCIA_DEVICE_MANF_CARD(0x01eb, 0x080a), /* Nortel Networks eMobility 802.11 Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x01ff, 0x0008), /* Intermec MobileLAN 11Mbps 802.11b WLAN Card */
-- PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002), /* Samsung SWL2000-N 11Mb/s WLAN Card */
- PCMCIA_DEVICE_MANF_CARD(0x0261, 0x0002), /* AirWay 802.11 Adapter (PCMCIA) */
- PCMCIA_DEVICE_MANF_CARD(0x0268, 0x0001), /* ARtem Onair */
- PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0305), /* Buffalo WLI-PCM-S11 */
-- PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612), /* Linksys WPC11 Version 2.5 */
-- PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1613), /* Linksys WPC11 Version 3 */
-- PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0002), /* Compaq HNW-100 11 Mbps Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0673), /* Linksys WCF12 Wireless CompactFlash Card */
-- PCMCIA_DEVICE_MANF_CARD(0x02aa, 0x0002), /* ASUS SpaceLink WL-100 */
- PCMCIA_DEVICE_MANF_CARD(0x02ac, 0x0002), /* SpeedStream SS1021 Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x14ea, 0xb001), /* PLANEX RoadLannerWave GW-NS11H */
-- PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x7300), /* Airvast WN-100 */
- PCMCIA_DEVICE_MANF_CARD(0x9005, 0x0021), /* Adaptec Ultra Wireless ANW-8030 */
- PCMCIA_DEVICE_MANF_CARD(0xc001, 0x0008), /* CONTEC FLEXSCAN/FX-DDS110-PCC */
- PCMCIA_DEVICE_MANF_CARD(0xc250, 0x0002), /* Conceptronic CON11Cpro, EMTAC A2424i */
-- PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002), /* Safeway 802.11b, ZCOMAX AirRunner/XI-300 */
-- PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005), /* D-Link DCF660, Sandisk Connect SDWCFB-000 */
- PCMCIA_DEVICE_PROD_ID12(" ", "IEEE 802.11 Wireless LAN/PC Card", 0x3b6e20c8, 0xefccafe9),
- PCMCIA_DEVICE_PROD_ID12("3Com", "3CRWE737A AirConnect Wireless LAN PC Card", 0x41240e5b, 0x56010af3),
- PCMCIA_DEVICE_PROD_ID12("ACTIONTEC", "PRISM Wireless LAN PC Card", 0x393089da, 0xa71e69d5),
-@@ -487,31 +475,25 @@
- PCMCIA_DEVICE_PROD_ID123("AIRVAST", "IEEE 802.11b Wireless PCMCIA Card", "HFA3863", 0xea569531, 0x4bcb9645, 0x355cb092),
- PCMCIA_DEVICE_PROD_ID12("Allied Telesyn", "AT-WCL452 Wireless PCMCIA Radio", 0x5cd01705, 0x4271660f),
- PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11b_PC_CARD_25", 0x78fc06ee, 0xdb9aa842),
-- PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11B_CF_CARD_25", 0x78fc06ee, 0x45a50c1e),
- PCMCIA_DEVICE_PROD_ID12("Avaya Communication", "Avaya Wireless PC Card", 0xd8a43b78, 0x0d341169),
- PCMCIA_DEVICE_PROD_ID12("BENQ", "AWL100 PCMCIA ADAPTER", 0x35dadc74, 0x01f7fedb),
- PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-PCM-L11G", 0x2decece3, 0xf57ca4b3),
-- PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-CF-S11G", 0x2decece3, 0x82067c18),
- PCMCIA_DEVICE_PROD_ID12("Cabletron", "RoamAbout 802.11 DS", 0x32d445f5, 0xedeffd90),
-- PCMCIA_DEVICE_PROD_ID12("Compaq", "WL200_11Mbps_Wireless_PCI_Card", 0x54f7c49c, 0x15a75e5b),
- PCMCIA_DEVICE_PROD_ID123("corega", "WL PCCL-11", "ISL37300P", 0x0a21501a, 0x59868926, 0xc9049a39),
- PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCC-11", 0x5261440f, 0xa6405584),
- PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCCA-11", 0x5261440f, 0xdf6115f9),
- PCMCIA_DEVICE_PROD_ID12("corega_K.K.", "Wireless_LAN_PCCB-11", 0x29e33311, 0xee7a27ae),
- PCMCIA_DEVICE_PROD_ID12("D", "Link DRC-650 11Mbps WLAN Card", 0x71b18589, 0xf144e3ac),
-- PCMCIA_DEVICE_PROD_ID12("D", "Link DWL-650 11Mbps WLAN Card", 0x71b18589, 0xb6f1b0ab),
- PCMCIA_DEVICE_PROD_ID12("D-Link Corporation", "D-Link DWL-650H 11Mbps WLAN Adapter", 0xef544d24, 0xcd8ea916),
- PCMCIA_DEVICE_PROD_ID12("Digital Data Communications", "WPC-0100", 0xfdd73470, 0xe0b6f146),
- PCMCIA_DEVICE_PROD_ID12("ELSA", "AirLancer MC-11", 0x4507a33a, 0xef54f0e3),
- PCMCIA_DEVICE_PROD_ID12("HyperLink", "Wireless PC Card 11Mbps", 0x56cc3f1a, 0x0bcf220c),
- PCMCIA_DEVICE_PROD_ID123("Instant Wireless ", " Network PC CARD", "Version 01.02", 0x11d901af, 0x6e9bd926, 0x4b74baa0),
- PCMCIA_DEVICE_PROD_ID12("Intel", "PRO/Wireless 2011 LAN PC Card", 0x816cc815, 0x07f58077),
-- PCMCIA_DEVICE_PROD_ID12("INTERSIL", "HFA384x/IEEE", 0x74c5e40d, 0xdb472a18),
- PCMCIA_DEVICE_PROD_ID12("INTERSIL", "I-GATE 11M PC Card / PC Card plus", 0x74c5e40d, 0x8304ff77),
- PCMCIA_DEVICE_PROD_ID12("Intersil", "PRISM 2_5 PCMCIA ADAPTER", 0x4b801a17, 0x6345a0bf),
- PCMCIA_DEVICE_PROD_ID123("Intersil", "PRISM Freedom PCMCIA Adapter", "ISL37100P", 0x4b801a17, 0xf222ec2d, 0x630d52b2),
- PCMCIA_DEVICE_PROD_ID12("LeArtery", "SYNCBYAIR 11Mbps Wireless LAN PC Card", 0x7e3b326a, 0x49893e92),
-- PCMCIA_DEVICE_PROD_ID12("Linksys", "Wireless CompactFlash Card", 0x0733cc81, 0x0c52f395),
- PCMCIA_DEVICE_PROD_ID12("Lucent Technologies", "WaveLAN/IEEE", 0x23eb9949, 0xc562e72a),
- PCMCIA_DEVICE_PROD_ID12("MELCO", "WLI-PCM-L11", 0x481e0094, 0x7360e410),
- PCMCIA_DEVICE_PROD_ID12("MELCO", "WLI-PCM-L11G", 0x481e0094, 0xf57ca4b3),
-@@ -529,10 +511,8 @@
- PCMCIA_DEVICE_PROD_ID12("PROXIM", "LAN PCI CARD HARMONY 80211B", 0xc6536a5e, 0x9f494e26),
- PCMCIA_DEVICE_PROD_ID12("SAMSUNG", "11Mbps WLAN Card", 0x43d74cb4, 0x579bd91b),
- PCMCIA_DEVICE_PROD_ID12("SMC", "SMC2532W-B EliteConnect Wireless Adapter", 0xc4f8b18b, 0x196bd757),
-- PCMCIA_DEVICE_PROD_ID12("SMC", "SMC2632W", 0xc4f8b18b, 0x474a1f2a),
- PCMCIA_DEVICE_PROD_ID12("Symbol Technologies", "LA4111 Spectrum24 Wireless LAN PC Card", 0x3f02b4d6, 0x3663cb0e),
- PCMCIA_DEVICE_PROD_ID123("The Linksys Group, Inc.", "Instant Wireless Network PC Card", "ISL37300P", 0xa5f472c2, 0x590eb502, 0xc9049a39),
-- PCMCIA_DEVICE_PROD_ID12("ZoomAir 11Mbps High", "Rate wireless Networking", 0x273fe3db, 0x32a1eaee),
- PCMCIA_DEVICE_NULL,
- };
- MODULE_DEVICE_TABLE(pcmcia, orinoco_cs_ids);
diff --git a/packages/linux/linux-rp-2.6.20/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.20/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
deleted file mode 100644
index 18bf4268fc..0000000000
--- a/packages/linux/linux-rp-2.6.20/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-
-From: Petr Vandrovec <vandrove@vc.cvut.cz>
-
-Patch below adds support for using different prescaler than 16 for 16c950
-chips. This is needed for using Fujitsu-Siemens Connect2Air compact-flash
-card, which comes (apparently) with 806kHz clocks, and so you have to
-program prescaler for division by 7, and DLAB to 1, to get 115200Bd.
-
-To get card properly running you also have to add lines below to
-/etc/pcmcia/serial.opts so kernel knows that base speed is not 115200 but
-50400 (50400 * 16 = 806400; 806400 / 7 = 115200). As I've found no code
-specifying baud_rate in serial_cs, I assume that specifying it in
-serial.opts is right way to do this type of things.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER maximum possible
-baud rate passed to uart code was uartclk / 16 while correct value for
-these devices (and for 16c950) is uartclk / 4.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER devices with
-baud_rate 19200 or 9600 spd_cust did not work correctly. Not that such
-devices exist, but we should not ignore spd_cust, user probably knows why
-he asked for spd_cust.
-
-serial.opts:
-
-case "$MANFID-$FUNCID-$PRODID_1-$PRODID_2-$PRODID_3-$PRODID_4" in
-'0279,950b-2-GPRS Modem---')
- SERIAL_OPTS="baud_base 50400"
- ;;
-esac
-
-Cc: David Woodhouse <dwmw2@infradead.org>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
----
-
- drivers/serial/8250.c | 82 +++++++++++++++++++++++++++++++++++++++-----------
- 1 files changed, 64 insertions(+), 18 deletions(-)
-
-diff -puN drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver drivers/serial/8250.c
---- devel/drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver 2005-09-12 03:34:57.000000000 -0700
-+++ devel-akpm/drivers/serial/8250.c 2005-09-12 03:34:57.000000000 -0700
-@@ -1653,24 +1653,58 @@ static void serial8250_shutdown(struct u
- serial_unlink_irq_chain(up);
- }
-
--static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud)
-+static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud,
-+ unsigned int *prescaler)
- {
-- unsigned int quot;
--
-- /*
-- * Handle magic divisors for baud rates above baud_base on
-- * SMSC SuperIO chips.
-+ /*
-+ * Use special handling only if user did not supply its own divider.
-+ * spd_cust is defined in terms of baud_base, so always use default
-+ * prescaler when spd_cust is requested.
- */
-- if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/4))
-- quot = 0x8001;
-- else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/8))
-- quot = 0x8002;
-- else
-- quot = uart_get_divisor(port, baud);
-
-- return quot;
-+ *prescaler = 16;
-+ if (baud != 38400 || (port->flags & UPF_SPD_MASK) != UPF_SPD_CUST) {
-+ unsigned int quot = port->uartclk / baud;
-+
-+ /*
-+ * Handle magic divisors for baud rates above baud_base on
-+ * SMSC SuperIO chips.
-+ */
-+ if (port->flags & UPF_MAGIC_MULTIPLIER) {
-+ if (quot == 4) {
-+ return 0x8001;
-+ } else if (quot == 8) {
-+ return 0x8002;
-+ }
-+ }
-+ if (port->type == PORT_16C950) {
-+ /*
-+ * This computes TCR value (4 to 16), not CPR value (which can
-+ * be between 1.000 and 31.875) - chip I have uses XTAL of
-+ * 806400Hz, and so a division by 7 is required to get 115200Bd.
-+ * I'm leaving CPR disabled for now, until someone will
-+ * hit even more exotic XTAL (it is needed to get 500kbps
-+ * or 1000kbps from 18.432MHz XTAL, but I have no device
-+ * which would benefit from doing that).
-+ *
-+ * If we can use divide by 16, use it. Otherwise look for
-+ * better prescaler, from 15 to 4. If quotient cannot
-+ * be divided by any integer value between 4 and 15, use 4.
-+ */
-+ if (quot & 0x0F) {
-+ unsigned int div;
-+
-+ for (div = 15; div > 4; div--) {
-+ if (quot % div == 0) {
-+ break;
-+ }
-+ }
-+ *prescaler = div;
-+ return quot / div;
-+ }
-+ }
-+ }
-+ return uart_get_divisor(port, baud);
- }
-
- static void
-@@ -1680,7 +1714,7 @@ serial8250_set_termios(struct uart_port
- struct uart_8250_port *up = (struct uart_8250_port *)port;
- unsigned char cval, fcr = 0;
- unsigned long flags;
-- unsigned int baud, quot;
-+ unsigned int baud, quot, prescaler;
-
- switch (termios->c_cflag & CSIZE) {
- case CS5:
-@@ -1712,8 +1746,13 @@ serial8250_set_termios(struct uart_port
- /*
- * Ask the core to calculate the divisor for us.
- */
-- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-- quot = serial8250_get_divisor(port, baud);
-+
-+ if (port->type == PORT_16C950 || (port->flags & UPF_MAGIC_MULTIPLIER)) {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/4);
-+ } else {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-+ }
-+ quot = serial8250_get_divisor(port, baud, &prescaler);
-
- /*
- * Oxford Semi 952 rev B workaround
-@@ -1817,6 +1856,13 @@ serial8250_set_termios(struct uart_port
- serial_outp(up, UART_DLM, quot >> 8); /* MS of divisor */
-
- /*
-+ * Program prescaler for 16C950 chips.
-+ */
-+ if (up->port.type == PORT_16C950) {
-+ serial_icr_write(up, UART_TCR, prescaler == 16 ? 0 : prescaler);
-+ }
-+
-+ /*
- * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
- * is written without DLAB set, this mode will be disabled.
- */
-_
diff --git a/packages/linux/linux-rp-2.6.20/sharpsl-rc-r1.patch b/packages/linux/linux-rp-2.6.20/sharpsl-rc-r1.patch
deleted file mode 100644
index da83fdf5eb..0000000000
--- a/packages/linux/linux-rp-2.6.20/sharpsl-rc-r1.patch
+++ /dev/null
@@ -1,519 +0,0 @@
-Index: linux-2.6.20/arch/arm/mach-pxa/spitz.c
-===================================================================
---- linux-2.6.20.orig/arch/arm/mach-pxa/spitz.c
-+++ linux-2.6.20/arch/arm/mach-pxa/spitz.c
-@@ -244,6 +244,13 @@ static struct platform_device spitzkbd_d
- .id = -1,
- };
-
-+/*
-+ * Spitz Remote Control Device
-+ */
-+static struct platform_device sharpsl_rc_device = {
-+ .name = "sharpsl-remote-control",
-+ .id = -1,
-+};
-
- /*
- * Spitz LEDs
-@@ -476,6 +483,7 @@ static struct platform_device *devices[]
- &spitzscoop_device,
- &spitzssp_device,
- &spitzkbd_device,
-+ &sharpsl_rc_device,
- &spitzts_device,
- &spitzbl_device,
- &spitzled_device,
-Index: linux-2.6.20/drivers/input/keyboard/Kconfig
-===================================================================
---- linux-2.6.20.orig/drivers/input/keyboard/Kconfig
-+++ linux-2.6.20/drivers/input/keyboard/Kconfig
-@@ -154,6 +154,17 @@ config KEYBOARD_SPITZ
- To compile this driver as a module, choose M here: the
- module will be called spitzkbd.
-
-+config SHARPSL_RC
-+ tristate "Sharp SL-Cxx00 Remote Control"
-+ depends on PXA_SHARPSL
-+ default y
-+ help
-+ Say Y here to enable the remote on the Sharp Zaurus SL-Cxx00,
-+ SL-C1000, SL-C3000 and Sl-C3100 series of PDAs.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called sharpsl_rc.
-+
- config KEYBOARD_AMIGA
- tristate "Amiga keyboard"
- depends on AMIGA
-Index: linux-2.6.20/drivers/input/keyboard/Makefile
-===================================================================
---- linux-2.6.20.orig/drivers/input/keyboard/Makefile
-+++ linux-2.6.20/drivers/input/keyboard/Makefile
-@@ -14,6 +14,7 @@ obj-$(CONFIG_KEYBOARD_NEWTON) += newton
- obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o
- obj-$(CONFIG_KEYBOARD_CORGI) += corgikbd.o
- obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o
-+obj-$(CONFIG_SHARPSL_RC) += sharpsl_rc.o
- obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
- obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
- obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
-Index: linux-2.6.20/drivers/input/keyboard/sharpsl_rc.c
-===================================================================
---- /dev/null
-+++ linux-2.6.20/drivers/input/keyboard/sharpsl_rc.c
-@@ -0,0 +1,291 @@
-+/*
-+ * Keyboard driver for Sharp Clamshell Models (SL-Cxx00)
-+ *
-+ * Copyright (c) 2004-2005 Richard Purdie
-+ *
-+ * Based on corgikbd.c and Sharp's RC driver
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#define DEBUG 1
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/init.h>
-+#include <linux/input.h>
-+#include <linux/interrupt.h>
-+#include <linux/jiffies.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+
-+#ifdef CONFIG_MACH_SPITZ
-+#include <asm/arch/spitz.h>
-+#endif
-+#ifdef CONFIG_MACH_CORGI
-+#include <asm/arch/corgi.h>
-+#endif
-+
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/hardware/scoop.h>
-+#include <asm/arch/sharpsl.h>
-+#include <asm/hardware/sharpsl_pm.h>
-+
-+#define DPRINTK(fmt, args...) dev_dbg(data->dev, fmt "\n", ##args)
-+
-+struct remote_control_key {
-+ unsigned char min;
-+ unsigned char max;
-+ unsigned char key;
-+};
-+
-+#ifdef CONFIG_MACH_SPITZ
-+#define REMOTE_AKIN_PULLUP SPITZ_SCP2_AKIN_PULLUP
-+#define REMOTE_SCOOP_DEVICE spitzscoop2_device
-+#define REMOTE_GPIO_INT SPITZ_GPIO_AK_INT
-+#define REMOTE_IRQ_INT SPITZ_IRQ_GPIO_AK_INT
-+static struct remote_control_key remote_keys[] = {
-+ { 25, 35, KEY_STOPCD},
-+ { 55, 65, KEY_PLAYPAUSE},
-+ { 85, 95, KEY_NEXTSONG},
-+ { 115, 125, KEY_VOLUMEUP},
-+ { 145, 155, KEY_PREVIOUSSONG},
-+ { 180, 190, KEY_MUTE},
-+ { 215, 225, KEY_VOLUMEDOWN},
-+};
-+#endif
-+#ifdef CONFIG_MACH_CORGI
-+#define REMOTE_AKIN_PULLUP CORGI_SCP_AKIN_PULLUP
-+#define REMOTE_SCOOP_DEVICE corgiscoop_device
-+#define REMOTE_GPIO_INT CORGI_GPIO_AK_INT
-+#define REMOTE_IRQ_INT CORGI_IRQ_GPIO_AK_INT
-+static struct remote_control_key remote_keys[] = {
-+ //These need to be fixed for the CE-RH1's values
-+ { 25, 35, KEY_STOPCD},
-+ { 55, 65, KEY_PLAYPAUSE},
-+ { 85, 95, KEY_NEXTSONG},
-+ { 115, 125, KEY_VOLUMEUP},
-+ { 145, 155, KEY_PREVIOUSSONG},
-+ { 180, 190, KEY_MUTE},
-+ { 215, 225, KEY_VOLUMEDOWN},
-+};
-+#endif
-+
-+#define RELEASE_HI 230
-+#define MAX_EARPHONE 6
-+#define RC_POLL_MS 10
-+#define RC_FINISH_MS 500
-+#define WAIT_STATE 3
-+#define NOISE_THRESHOLD 100
-+
-+struct sharpsl_rc {
-+ struct input_dev *input;
-+ struct device *dev;
-+
-+ spinlock_t lock;
-+ struct timer_list rctimer;
-+ struct timer_list rctimer_finish;
-+
-+ unsigned int handling_press;
-+ unsigned int noise;
-+ unsigned int state;
-+ unsigned int last_key;
-+};
-+
-+static int get_remocon_raw(void)
-+{
-+ int i, val;
-+
-+ val = sharpsl_pm_pxa_read_max1111(MAX1111_REMCOM);
-+ for (i = 0; i < ARRAY_SIZE(remote_keys); ++i) {
-+ if (val >= remote_keys[i].min
-+ && val <= remote_keys[i].max) {
-+ printk("get_remocon_raw: VAL=%i, KEY=%i\n", val, remote_keys[i].key);
-+ return remote_keys[i].key;
-+ }
-+ }
-+ return 0;
-+}
-+
-+static irqreturn_t sharpsl_rc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ struct sharpsl_rc *data = dev_id;
-+ DPRINTK("sharpsl_rc_interrupt %d\n", irq);
-+ if (!data->handling_press) {
-+ DPRINTK("handling interrupt");
-+ data->handling_press = 1;
-+ data->noise = 0;
-+ data->state = 0;
-+ data->last_key = 0;
-+
-+ reset_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
-+
-+ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+static void sharpsl_rc_timer_callback(unsigned long dataPtr)
-+{
-+ struct sharpsl_rc *data = (struct sharpsl_rc *) dataPtr;
-+ int timer = 1;
-+ int key = get_remocon_raw();
-+ DPRINTK("timer callback, key: %d", key);
-+
-+ //wait for value to stabilize
-+ if (data->state < WAIT_STATE) {
-+ if (data->last_key != key) {
-+ ++data->noise;
-+ if (data->noise > NOISE_THRESHOLD) {
-+ DPRINTK("too much noise, bailing");
-+ timer = 0;
-+ }
-+ data->state = 0;
-+ } else {
-+ ++data->state;
-+ }
-+ data->last_key = key;
-+
-+ //stable value, send event
-+ } else if (data->state == WAIT_STATE) {
-+ data->noise = 0;
-+ //non-key returned, skip the rest of the states and bail now
-+ if (data->last_key == 0) {
-+ DPRINTK("non-key detected %d, noise: %d", data->last_key, data->noise);
-+ timer = 0;
-+ //send button press
-+ } else {
-+ DPRINTK("key press detected %d, noise %d", data->last_key, data->noise);
-+ input_report_key(data->input, data->last_key, 1);
-+ }
-+ ++data->state;
-+
-+ //wait until key is released
-+ } else if (data->state < WAIT_STATE * 2) {
-+ if (key == data->last_key
-+ && data->noise < NOISE_THRESHOLD) {
-+ data->state = WAIT_STATE + 1;
-+ ++data->noise;
-+ } else {
-+ ++data->state;
-+ }
-+ //key is released, send event
-+ } else {
-+ //send button release
-+ DPRINTK("release key %d", data->last_key);
-+ input_report_key(data->input, data->last_key, 0);
-+ timer = 0;
-+ }
-+ if (timer) {
-+ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
-+ } else {
-+ set_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
-+ data->handling_press = 0;
-+ }
-+}
-+
-+static int __init sharpsl_rc_probe(struct platform_device *pdev)
-+{
-+ struct sharpsl_rc *sharpsl_rc;
-+ struct input_dev *input_dev;
-+ int i, ret;
-+
-+ dev_dbg(&pdev->dev, "sharpsl_rc_probe\n");
-+
-+ sharpsl_rc = kzalloc(sizeof(struct sharpsl_rc), GFP_KERNEL);
-+ input_dev = input_allocate_device();
-+ if (!sharpsl_rc || !input_dev) {
-+ kfree(sharpsl_rc);
-+ input_free_device(input_dev);
-+ return -ENOMEM;
-+ }
-+
-+ platform_set_drvdata(pdev, sharpsl_rc);
-+
-+ sharpsl_rc->dev = &pdev->dev;
-+ sharpsl_rc->input = input_dev;
-+ spin_lock_init(&sharpsl_rc->lock);
-+
-+ /* Init Remote Control Timer */
-+ init_timer(&sharpsl_rc->rctimer);
-+ sharpsl_rc->rctimer.function = sharpsl_rc_timer_callback;
-+ sharpsl_rc->rctimer.data = (unsigned long) sharpsl_rc;
-+
-+ input_dev->name = "Sharp Remote Control CE-RHX";
-+ input_dev->phys = "sharpsl_rc/input0";
-+ input_dev->id.bustype = BUS_HOST;
-+ input_dev->id.vendor = 0x0001;
-+ input_dev->id.product = 0x0001;
-+ input_dev->id.version = 0x0100;
-+ input_dev->cdev.dev = &pdev->dev;
-+ input_dev->private = sharpsl_rc;
-+
-+ input_dev->evbit[0] = BIT(EV_KEY);
-+
-+ for (i = 0; i <= ARRAY_SIZE(remote_keys); i++)
-+ set_bit(remote_keys[i].key, input_dev->keybit);
-+
-+ input_register_device(sharpsl_rc->input);
-+
-+ pxa_gpio_mode(REMOTE_GPIO_INT | GPIO_IN);
-+ ret = request_irq(REMOTE_IRQ_INT,
-+ sharpsl_rc_interrupt,
-+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
-+ "sharpsl_rc",
-+ sharpsl_rc);
-+ if (ret < 0) {
-+ dev_dbg(&pdev->dev, "Can't get IRQ: %d!\n", i);
-+ kfree(sharpsl_rc);
-+ input_free_device(input_dev);
-+ return ret;
-+ }
-+
-+ return 0;
-+}
-+
-+static int sharpsl_rc_remove(struct platform_device *pdev)
-+{
-+ struct sharpsl_rc *sharpsl_rc = platform_get_drvdata(pdev);
-+
-+ dev_dbg(&pdev->dev, "sharpsl_rc_remove\n");
-+
-+ free_irq(REMOTE_IRQ_INT, sharpsl_rc);
-+ del_timer_sync(&sharpsl_rc->rctimer);
-+ input_unregister_device(sharpsl_rc->input);
-+ kfree(sharpsl_rc);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver sharpsl_rc_driver = {
-+ .probe = sharpsl_rc_probe,
-+ .remove = sharpsl_rc_remove,
-+ .suspend = NULL,
-+ .resume = NULL,
-+ .driver = {
-+ .name = "sharpsl-remote-control",
-+ },
-+};
-+
-+static int __devinit sharpsl_rc_init(void)
-+{
-+ printk("sharpsl_rc_init\n");
-+ return platform_driver_register(&sharpsl_rc_driver);
-+}
-+
-+static void __exit sharpsl_rc_exit(void)
-+{
-+ printk("sharpsl_rc_exit\n");
-+ platform_driver_unregister(&sharpsl_rc_driver);
-+}
-+
-+module_init(sharpsl_rc_init);
-+module_exit(sharpsl_rc_exit);
-+
-+MODULE_AUTHOR("Justin Patrin <papercrane@reversefold.com>");
-+MODULE_AUTHOR("Richard Purdie <rpurdie@rpsys.net>");
-+MODULE_DESCRIPTION("SharpSL Remote Control Driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.20/drivers/input/keyboard/spitzkbd.c
-===================================================================
---- linux-2.6.20.orig/drivers/input/keyboard/spitzkbd.c
-+++ linux-2.6.20/drivers/input/keyboard/spitzkbd.c
-@@ -19,6 +19,7 @@
- #include <linux/jiffies.h>
- #include <linux/module.h>
- #include <linux/slab.h>
-+#include <linux/kmod.h>
-
- #include <asm/arch/spitz.h>
- #include <asm/arch/hardware.h>
-@@ -279,13 +280,21 @@ static irqreturn_t spitzkbd_hinge_isr(in
- static int sharpsl_hinge_state;
- static int hinge_count;
-
-+void spitzkbd_handle_sharpsl_rc(void *arg) {
-+ request_module("sharpsl_rc");
-+}
-+
-+DECLARE_WORK(spitzkbd_work, spitzkbd_handle_sharpsl_rc);
-+
- static void spitzkbd_hinge_timer(unsigned long data)
- {
- struct spitzkbd *spitzkbd_data = (struct spitzkbd *) data;
- unsigned long state;
- unsigned long flags;
-+ unsigned int headphone, remote;
-
- state = GPLR(SPITZ_GPIO_SWA) & (GPIO_bit(SPITZ_GPIO_SWA)|GPIO_bit(SPITZ_GPIO_SWB));
-+ state |= (GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN));
- state |= (GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT));
- if (state != sharpsl_hinge_state) {
- hinge_count = 0;
-@@ -299,9 +308,18 @@ static void spitzkbd_hinge_timer(unsigne
-
- input_report_switch(spitzkbd_data->input, SW_LID, ((GPLR(SPITZ_GPIO_SWA) & GPIO_bit(SPITZ_GPIO_SWA)) != 0));
- input_report_switch(spitzkbd_data->input, SW_TABLET_MODE, ((GPLR(SPITZ_GPIO_SWB) & GPIO_bit(SPITZ_GPIO_SWB)) != 0));
-- input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) != 0));
-+
-+ headphone = ((GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN)) != 0);
-+ input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, headphone);
-+
-+ remote = headphone && ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) == 0);
-+ input_report_switch(spitzkbd_data->input, SW_REMOTE_INSERT, remote);
- input_sync(spitzkbd_data->input);
-
-+ if (remote) {
-+ schedule_work(&spitzkbd_work);
-+ }
-+
- spin_unlock_irqrestore(&spitzkbd_data->lock, flags);
- } else {
- mod_timer(&spitzkbd_data->htimer, jiffies + msecs_to_jiffies(HINGE_SCAN_INTERVAL));
-@@ -394,6 +412,7 @@ static int __init spitzkbd_probe(struct
- set_bit(SW_LID, input_dev->swbit);
- set_bit(SW_TABLET_MODE, input_dev->swbit);
- set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
-+ set_bit(SW_REMOTE_INSERT, input_dev->swbit);
-
- err = input_register_device(input_dev);
- if (err)
-@@ -431,9 +450,12 @@ static int __init spitzkbd_probe(struct
- request_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd_hinge_isr,
- IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
- "Spitzkbd SWB", spitzkbd);
-- request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
-+ request_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd_hinge_isr,
- IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
- "Spitzkbd HP", spitzkbd);
-+ request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
-+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
-+ "Spitzkbd HP Type", spitzkbd);
-
- return 0;
-
-@@ -454,6 +476,7 @@ static int spitzkbd_remove(struct platfo
- free_irq(SPITZ_IRQ_GPIO_ON_KEY, spitzkbd);
- free_irq(SPITZ_IRQ_GPIO_SWA, spitzkbd);
- free_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd);
-+ free_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd);
- free_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd);
-
- del_timer_sync(&spitzkbd->htimer);
-Index: linux-2.6.20/arch/arm/mach-pxa/sharpsl.h
-===================================================================
---- linux-2.6.20.orig/arch/arm/mach-pxa/sharpsl.h
-+++ linux-2.6.20/arch/arm/mach-pxa/sharpsl.h
-@@ -50,15 +50,10 @@ void spitz_wait_hsync(void);
-
- #define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x))
-
--/* MAX1111 Channel Definitions */
--#define MAX1111_BATT_VOLT 4u
--#define MAX1111_BATT_TEMP 2u
--#define MAX1111_ACIN_VOLT 6u
--
- extern struct battery_thresh spitz_battery_levels_acin[];
- extern struct battery_thresh spitz_battery_levels_noac[];
- void sharpsl_pm_pxa_init(void);
- void sharpsl_pm_pxa_remove(void);
--int sharpsl_pm_pxa_read_max1111(int channel);
-+
-
-
-Index: linux-2.6.20/arch/arm/mach-pxa/sharpsl_pm.c
-===================================================================
---- linux-2.6.20.orig/arch/arm/mach-pxa/sharpsl_pm.c
-+++ linux-2.6.20/arch/arm/mach-pxa/sharpsl_pm.c
-@@ -135,6 +135,8 @@ int sharpsl_pm_pxa_read_max1111(int chan
- | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR);
- }
-
-+EXPORT_SYMBOL(sharpsl_pm_pxa_read_max1111);
-+
- void sharpsl_pm_pxa_init(void)
- {
- pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN);
-Index: linux-2.6.20/include/asm-arm/hardware/sharpsl_pm.h
-===================================================================
---- linux-2.6.20.orig/include/asm-arm/hardware/sharpsl_pm.h
-+++ linux-2.6.20/include/asm-arm/hardware/sharpsl_pm.h
-@@ -104,3 +104,10 @@ irqreturn_t sharpsl_ac_isr(int irq, void
- irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id);
- irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id);
-
-+/* MAX1111 Channel Definitions */
-+#define MAX1111_REMCOM 0u
-+#define MAX1111_BATT_VOLT 4u
-+#define MAX1111_BATT_TEMP 2u
-+#define MAX1111_ACIN_VOLT 6u
-+
-+int sharpsl_pm_pxa_read_max1111(int channel);
-Index: linux-2.6.20/include/linux/input.h
-===================================================================
---- linux-2.6.20.orig/include/linux/input.h
-+++ linux-2.6.20/include/linux/input.h
-@@ -602,6 +602,7 @@ struct input_absinfo {
- #define SW_LID 0x00 /* set = lid shut */
- #define SW_TABLET_MODE 0x01 /* set = tablet mode */
- #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
-+#define SW_REMOTE_INSERT 0x04 /* set = remote */
- #define SW_MAX 0x0f
-
- /*
-Index: linux-2.6.20/arch/arm/mach-pxa/spitz_pm.c
-===================================================================
---- linux-2.6.20.orig/arch/arm/mach-pxa/spitz_pm.c
-+++ linux-2.6.20/arch/arm/mach-pxa/spitz_pm.c
-@@ -161,6 +161,13 @@ static int spitz_should_wakeup(unsigned
- if (resume_on_alarm && (PEDR & PWER_RTC))
- is_resume |= PWER_RTC;
-
-+ printk("wakeup: PEDR: %x, PKSR: %x, HP_IN: %x, AK_INT: %x\n", PEDR, PKSR, GPIO_bit(SPITZ_GPIO_HP_IN), GPIO_bit(SPITZ_GPIO_AK_INT));
-+
-+ //remote/headphone interrupt, wakeup
-+ if (PEDR == 0 && (PKSR & 0xc0d01) != 0) {
-+ is_resume |= PWER_RTC;
-+ }
-+
- dev_dbg(sharpsl_pm.dev, "is_resume: %x\n",is_resume);
- return is_resume;
- }
diff --git a/packages/linux/linux-rp-2.6.20/squashfs3.0-2.6.15.patch b/packages/linux/linux-rp-2.6.20/squashfs3.0-2.6.15.patch
deleted file mode 100644
index 405d4ec124..0000000000
--- a/packages/linux/linux-rp-2.6.20/squashfs3.0-2.6.15.patch
+++ /dev/null
@@ -1,4191 +0,0 @@
- fs/Kconfig | 65 +
- fs/Makefile | 1
- fs/squashfs/Makefile | 7
- fs/squashfs/inode.c | 2124 +++++++++++++++++++++++++++++++++++++++++
- fs/squashfs/squashfs.h | 86 +
- fs/squashfs/squashfs2_0.c | 757 ++++++++++++++
- include/linux/squashfs_fs.h | 911 +++++++++++++++++
- include/linux/squashfs_fs_i.h | 45
- include/linux/squashfs_fs_sb.h | 74 +
- init/do_mounts_rd.c | 13
- 10 files changed, 4083 insertions(+)
-
-Index: git/fs/Kconfig
-===================================================================
---- git.orig/fs/Kconfig 2006-10-31 16:09:22.000000000 +0000
-+++ git/fs/Kconfig 2006-10-31 21:26:45.000000000 +0000
-@@ -1407,6 +1407,71 @@ config CRAMFS
-
- If unsure, say N.
-
-+config SQUASHFS
-+ tristate "SquashFS 3.0 - Squashed file system support"
-+ select ZLIB_INFLATE
-+ help
-+ Saying Y here includes support for SquashFS 3.0 (a Compressed Read-Only File
-+ System). Squashfs is a highly compressed read-only filesystem for Linux.
-+ It uses zlib compression to compress both files, inodes and directories.
-+ Inodes in the system are very small and all blocks are packed to minimise
-+ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
-+ SquashFS 3.0 supports 64 bit filesystems and files (larger than 4GB), full
-+ uid/gid information, hard links and timestamps.
-+
-+ Squashfs is intended for general read-only filesystem use, for archival
-+ use (i.e. in cases where a .tar.gz file may be used), and in embedded
-+ systems where low overhead is needed. Further information and filesystem tools
-+ are available from http://squashfs.sourceforge.net.
-+
-+ If you want to compile this as a module ( = code which can be
-+ inserted in and removed from the running kernel whenever you want),
-+ say M here and read <file:Documentation/modules.txt>. The module
-+ will be called squashfs. Note that the root file system (the one
-+ containing the directory /) cannot be compiled as a module.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_EMBEDDED
-+
-+ bool "Additional options for memory-constrained systems"
-+ depends on SQUASHFS
-+ default n
-+ help
-+ Saying Y here allows you to specify cache sizes and how Squashfs
-+ allocates memory. This is only intended for memory constrained
-+ systems.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_FRAGMENT_CACHE_SIZE
-+ int "Number of fragments cached" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default "3"
-+ help
-+ By default SquashFS caches the last 3 fragments read from
-+ the filesystem. Increasing this amount may mean SquashFS
-+ has to re-read fragments less often from disk, at the expense
-+ of extra system memory. Decreasing this amount will mean
-+ SquashFS uses less memory at the expense of extra reads from disk.
-+
-+ Note there must be at least one cached fragment. Anything
-+ much more than three will probably not make much difference.
-+
-+config SQUASHFS_VMALLOC
-+ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default n
-+ help
-+ By default SquashFS uses kmalloc to obtain fragment cache memory.
-+ Kmalloc memory is the standard kernel allocator, but it can fail
-+ on memory constrained systems. Because of the way Vmalloc works,
-+ Vmalloc can succeed when kmalloc fails. Specifying this option
-+ will make SquashFS always use Vmalloc to allocate the
-+ fragment cache memory.
-+
-+ If unsure, say N.
-+
- config VXFS_FS
- tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
- depends on BLOCK
-Index: git/fs/Makefile
-===================================================================
---- git.orig/fs/Makefile 2006-10-31 16:09:22.000000000 +0000
-+++ git/fs/Makefile 2006-10-31 21:26:45.000000000 +0000
-@@ -67,6 +67,7 @@ obj-$(CONFIG_JBD) += jbd/
- obj-$(CONFIG_JBD2) += jbd2/
- obj-$(CONFIG_EXT2_FS) += ext2/
- obj-$(CONFIG_CRAMFS) += cramfs/
-+obj-$(CONFIG_SQUASHFS) += squashfs/
- obj-$(CONFIG_RAMFS) += ramfs/
- obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
- obj-$(CONFIG_CODA_FS) += coda/
-Index: git/fs/squashfs/inode.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/inode.c 2006-11-01 18:01:32.000000000 +0000
-@@ -0,0 +1,2124 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * inode.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+
-+static void squashfs_put_super(struct super_block *);
-+static int squashfs_statfs(struct dentry *, struct kstatfs *);
-+static int squashfs_symlink_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage4K(struct file *file, struct page *page);
-+static int squashfs_readdir(struct file *, void *, filldir_t);
-+static struct inode *squashfs_alloc_inode(struct super_block *sb);
-+static void squashfs_destroy_inode(struct inode *inode);
-+static int init_inodecache(void);
-+static void destroy_inodecache(void);
-+static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
-+ struct nameidata *);
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize);
-+static int squashfs_get_sb(struct file_system_type *, int,
-+ const char *, void *, struct vfsmount *);
-+
-+
-+static z_stream stream;
-+
-+static struct file_system_type squashfs_fs_type = {
-+ .owner = THIS_MODULE,
-+ .name = "squashfs",
-+ .get_sb = squashfs_get_sb,
-+ .kill_sb = kill_block_super,
-+ .fs_flags = FS_REQUIRES_DEV
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static struct super_operations squashfs_ops = {
-+ .alloc_inode = squashfs_alloc_inode,
-+ .destroy_inode = squashfs_destroy_inode,
-+ .statfs = squashfs_statfs,
-+ .put_super = squashfs_put_super,
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
-+ .readpage = squashfs_symlink_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops = {
-+ .readpage = squashfs_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
-+ .readpage = squashfs_readpage4K
-+};
-+
-+static struct file_operations squashfs_dir_ops = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir
-+};
-+
-+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
-+ .lookup = squashfs_lookup
-+};
-+
-+
-+static struct buffer_head *get_block_length(struct super_block *s,
-+ int *cur_index, int *offset, int *c_byte)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned short temp;
-+ struct buffer_head *bh;
-+
-+ if (!(bh = sb_bread(s, *cur_index)))
-+ goto out;
-+
-+ if (msblk->devblksize - *offset == 1) {
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ else
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ bh->b_data);
-+ else
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ bh->b_data);
-+ *c_byte = temp;
-+ *offset = 1;
-+ } else {
-+ if (msblk->swap) {
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ } else {
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ }
-+ *c_byte = temp;
-+ *offset += 2;
-+ }
-+
-+ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
-+ if (*offset == msblk->devblksize) {
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ *offset = 0;
-+ }
-+ if (*((unsigned char *) (bh->b_data + *offset)) !=
-+ SQUASHFS_MARKER_BYTE) {
-+ ERROR("Metadata block marker corrupt @ %x\n",
-+ *cur_index);
-+ brelse(bh);
-+ goto out;
-+ }
-+ (*offset)++;
-+ }
-+ return bh;
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
-+ msblk->devblksize_log2) + 2];
-+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
-+ unsigned int cur_index = index >> msblk->devblksize_log2;
-+ int bytes, avail_bytes, b = 0, k;
-+ char *c_buffer;
-+ unsigned int compressed;
-+ unsigned int c_byte = length;
-+
-+ if (c_byte) {
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ if (!(bh[0] = sb_getblk(s, cur_index)))
-+ goto block_release;
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b, bh);
-+ } else {
-+ if (!(bh[0] = get_block_length(s, &cur_index, &offset,
-+ &c_byte)))
-+ goto read_failure;
-+
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b - 1, bh + 1);
-+ }
-+
-+ if (compressed)
-+ down(&msblk->read_data_mutex);
-+
-+ for (bytes = 0, k = 0; k < b; k++) {
-+ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
-+ msblk->devblksize - offset :
-+ c_byte - bytes;
-+ wait_on_buffer(bh[k]);
-+ if (!buffer_uptodate(bh[k]))
-+ goto block_release;
-+ memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
-+ bytes += avail_bytes;
-+ offset = 0;
-+ brelse(bh[k]);
-+ }
-+
-+ /*
-+ * uncompress block
-+ */
-+ if (compressed) {
-+ int zlib_err;
-+
-+ stream.next_in = c_buffer;
-+ stream.avail_in = c_byte;
-+ stream.next_out = buffer;
-+ stream.avail_out = msblk->read_size;
-+
-+ if (((zlib_err = zlib_inflateInit(&stream)) != Z_OK) ||
-+ ((zlib_err = zlib_inflate(&stream, Z_FINISH))
-+ != Z_STREAM_END) || ((zlib_err =
-+ zlib_inflateEnd(&stream)) != Z_OK)) {
-+ ERROR("zlib_fs returned unexpected result 0x%x\n",
-+ zlib_err);
-+ bytes = 0;
-+ } else
-+ bytes = stream.total_out;
-+
-+ up(&msblk->read_data_mutex);
-+ }
-+
-+ if (next_index)
-+ *next_index = index + c_byte + (length ? 0 :
-+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
-+ ? 3 : 2));
-+ return bytes;
-+
-+block_release:
-+ while (--b >= 0)
-+ brelse(bh[b]);
-+
-+read_failure:
-+ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ int n, i, bytes, return_length = length;
-+ long long next_index;
-+
-+ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
-+
-+ while ( 1 ) {
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (msblk->block_cache[i].block == block)
-+ break;
-+
-+ down(&msblk->block_cache_mutex);
-+
-+ if (i == SQUASHFS_CACHED_BLKS) {
-+ /* read inode header block */
-+ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
-+ n ; n --, i = (i + 1) %
-+ SQUASHFS_CACHED_BLKS)
-+ if (msblk->block_cache[i].block !=
-+ SQUASHFS_USED_BLK)
-+ break;
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->waitq, &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->block_cache_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->waitq, &wait);
-+ continue;
-+ }
-+ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
-+
-+ if (msblk->block_cache[i].block ==
-+ SQUASHFS_INVALID_BLK) {
-+ if (!(msblk->block_cache[i].data =
-+ kmalloc(SQUASHFS_METADATA_SIZE,
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate cache"
-+ "block\n");
-+ up(&msblk->block_cache_mutex);
-+ goto out;
-+ }
-+ }
-+
-+ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
-+ up(&msblk->block_cache_mutex);
-+
-+ if (!(msblk->block_cache[i].length =
-+ squashfs_read_data(s,
-+ msblk->block_cache[i].data,
-+ block, 0, &next_index))) {
-+ ERROR("Unable to read cache block [%llx:%x]\n",
-+ block, offset);
-+ goto out;
-+ }
-+
-+ down(&msblk->block_cache_mutex);
-+ wake_up(&msblk->waitq);
-+ msblk->block_cache[i].block = block;
-+ msblk->block_cache[i].next_index = next_index;
-+ TRACE("Read cache block [%llx:%x]\n", block, offset);
-+ }
-+
-+ if (msblk->block_cache[i].block != block) {
-+ up(&msblk->block_cache_mutex);
-+ continue;
-+ }
-+
-+ if ((bytes = msblk->block_cache[i].length - offset) >= length) {
-+ if (buffer)
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, length);
-+ if (msblk->block_cache[i].length - offset == length) {
-+ *next_block = msblk->block_cache[i].next_index;
-+ *next_offset = 0;
-+ } else {
-+ *next_block = block;
-+ *next_offset = offset + length;
-+ }
-+ up(&msblk->block_cache_mutex);
-+ goto finish;
-+ } else {
-+ if (buffer) {
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, bytes);
-+ buffer += bytes;
-+ }
-+ block = msblk->block_cache[i].next_index;
-+ up(&msblk->block_cache_mutex);
-+ length -= bytes;
-+ offset = 0;
-+ }
-+ }
-+
-+finish:
-+ return return_length;
-+out:
-+ return 0;
-+}
-+
-+
-+static int get_fragment_location(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
-+ struct squashfs_fragment_entry fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment)
-+{
-+ down(&msblk->fragment_mutex);
-+ fragment->locked --;
-+ wake_up(&msblk->fragment_wait_queue);
-+ up(&msblk->fragment_mutex);
-+}
-+
-+
-+SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length)
-+{
-+ int i, n, nf;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+
-+ while ( 1 ) {
-+ down(&msblk->fragment_mutex);
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
-+ msblk->fragment[i].block != start_block; i++);
-+
-+ if (i == SQUASHFS_CACHED_FRAGMENTS) {
-+ nf = (msblk->next_fragment + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS;
-+ for (i = msblk->next_fragment, n =
-+ SQUASHFS_CACHED_FRAGMENTS; n &&
-+ msblk->fragment[i].locked; n--, i = (i + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS);
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->fragment_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ continue;
-+ }
-+ msblk->next_fragment = nf;
-+
-+ if (msblk->fragment[i].data == NULL)
-+ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC
-+ (SQUASHFS_FILE_MAX_SIZE))) {
-+ ERROR("Failed to allocate fragment "
-+ "cache block\n");
-+ up(&msblk->fragment_mutex);
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].locked = 1;
-+ up(&msblk->fragment_mutex);
-+
-+ if (!(msblk->fragment[i].length = squashfs_read_data(s,
-+ msblk->fragment[i].data,
-+ start_block, length, NULL))) {
-+ ERROR("Unable to read fragment cache block "
-+ "[%llx]\n", start_block);
-+ msblk->fragment[i].locked = 0;
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = start_block;
-+ TRACE("New fragment %d, start block %lld, locked %d\n",
-+ i, msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ msblk->fragment[i].locked++;
-+ up(&msblk->fragment_mutex);
-+ TRACE("Got fragment %d, start block %lld, locked %d\n", i,
-+ msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ return &msblk->fragment[i];
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header *inodeb)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = inodeb->inode_number;
-+ i->i_mtime.tv_sec = inodeb->mtime;
-+ i->i_atime.tv_sec = inodeb->mtime;
-+ i->i_ctime.tv_sec = inodeb->mtime;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header id, sid;
-+ struct squashfs_base_inode_header *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_reg_inode_header *inodep = &id.reg;
-+ struct squashfs_reg_inode_header *sinodep = &sid.reg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = 1;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_LREG_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_lreg_inode_header *inodep = &id.lreg;
-+ struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header *inodep = &id.dir;
-+ struct squashfs_dir_inode_header *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header *inodep = &id.dev;
-+ struct squashfs_dev_inode_header *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ struct squashfs_ipc_inode_header *inodep = &id.ipc;
-+ struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int read_fragment_index_table(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ /* Allocate fragment index table */
-+ if (!(msblk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ long long fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
-+ &msblk->fragment_index[i], 1);
-+ msblk->fragment_index[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget;
-+ msblk->read_blocklist = read_blocklist;
-+ msblk->read_fragment_index_table = read_fragment_index_table;
-+
-+ if (sblk->s_major == 1) {
-+ if (!squashfs_1_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 1.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if (sblk->s_major == 2) {
-+ if (!squashfs_2_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 2.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
-+ SQUASHFS_MINOR) {
-+ SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
-+ "filesystem\n", sblk->s_major, sblk->s_minor);
-+ SERROR("Please update your kernel\n");
-+ return 0;
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int squashfs_fill_super(struct super_block *s, void *data, int silent)
-+{
-+ struct squashfs_sb_info *msblk;
-+ struct squashfs_super_block *sblk;
-+ int i;
-+ char b[BDEVNAME_SIZE];
-+ struct inode *root;
-+
-+ TRACE("Entered squashfs_read_superblock\n");
-+
-+ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info),
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate superblock\n");
-+ goto failure;
-+ }
-+ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
-+ msblk = s->s_fs_info;
-+ sblk = &msblk->sblk;
-+
-+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
-+ msblk->devblksize_log2 = ffz(~msblk->devblksize);
-+
-+ init_MUTEX(&msblk->read_data_mutex);
-+ init_MUTEX(&msblk->read_page_mutex);
-+ init_MUTEX(&msblk->block_cache_mutex);
-+ init_MUTEX(&msblk->fragment_mutex);
-+ init_MUTEX(&msblk->meta_index_mutex);
-+
-+ init_waitqueue_head(&msblk->waitq);
-+ init_waitqueue_head(&msblk->fragment_wait_queue);
-+
-+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
-+ sizeof(struct squashfs_super_block) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ SERROR("unable to read superblock\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Check it is a SQUASHFS superblock */
-+ msblk->swap = 0;
-+ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
-+ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
-+ struct squashfs_super_block ssblk;
-+
-+ WARNING("Mounting a different endian SQUASHFS "
-+ "filesystem on %s\n", bdevname(s->s_bdev, b));
-+
-+ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
-+ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
-+ msblk->swap = 1;
-+ } else {
-+ SERROR("Can't find a SQUASHFS superblock on %s\n",
-+ bdevname(s->s_bdev, b));
-+ goto failed_mount;
-+ }
-+ }
-+
-+ /* Check the MAJOR & MINOR versions */
-+ if(!supported_squashfs_filesystem(msblk, silent))
-+ goto failed_mount;
-+
-+ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
-+ TRACE("Inodes are %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_INODES
-+ (sblk->flags) ? "un" : "");
-+ TRACE("Data is %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
-+ ? "un" : "");
-+ TRACE("Check data is %s present in the filesystem\n",
-+ SQUASHFS_CHECK_DATA(sblk->flags) ?
-+ "" : "not");
-+ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
-+ TRACE("Block size %d\n", sblk->block_size);
-+ TRACE("Number of inodes %d\n", sblk->inodes);
-+ if (sblk->s_major > 1)
-+ TRACE("Number of fragments %d\n", sblk->fragments);
-+ TRACE("Number of uids %d\n", sblk->no_uids);
-+ TRACE("Number of gids %d\n", sblk->no_guids);
-+ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
-+ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
-+ if (sblk->s_major > 1)
-+ TRACE("sblk->fragment_table_start %llx\n",
-+ sblk->fragment_table_start);
-+ TRACE("sblk->uid_start %llx\n", sblk->uid_start);
-+
-+ s->s_flags |= MS_RDONLY;
-+ s->s_op = &squashfs_ops;
-+
-+ /* Init inode_table block pointer array */
-+ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
-+ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+
-+ msblk->next_cache = 0;
-+
-+ /* Allocate read_data block */
-+ msblk->read_size = (sblk->block_size < SQUASHFS_METADATA_SIZE) ?
-+ SQUASHFS_METADATA_SIZE :
-+ sblk->block_size;
-+
-+ if (!(msblk->read_data = kmalloc(msblk->read_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_data block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate read_page block */
-+ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_page block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate uid and gid tables */
-+ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ goto failed_mount;
-+ }
-+ msblk->guid = msblk->uid + sblk->no_uids;
-+
-+ if (msblk->swap) {
-+ unsigned int suid[sblk->no_uids + sblk->no_guids];
-+
-+ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
-+ sblk->no_guids), (sizeof(unsigned int) * 8));
-+ } else
-+ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+
-+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
-+ goto allocate_root;
-+
-+ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
-+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate fragment block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
-+ msblk->fragment[i].locked = 0;
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].data = NULL;
-+ }
-+
-+ msblk->next_fragment = 0;
-+
-+ /* Allocate fragment index table */
-+ if (msblk->read_fragment_index_table(s) == 0)
-+ goto failed_mount;
-+
-+allocate_root:
-+ if ((root = (msblk->iget)(s, sblk->root_inode)) == NULL)
-+ goto failed_mount;
-+
-+ if ((s->s_root = d_alloc_root(root)) == NULL) {
-+ ERROR("Root inode create failed\n");
-+ iput(root);
-+ goto failed_mount;
-+ }
-+
-+ TRACE("Leaving squashfs_read_super\n");
-+ return 0;
-+
-+failed_mount:
-+ kfree(msblk->fragment_index);
-+ kfree(msblk->fragment);
-+ kfree(msblk->uid);
-+ kfree(msblk->read_page);
-+ kfree(msblk->read_data);
-+ kfree(msblk->block_cache);
-+ kfree(msblk->fragment_index_2);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ return -EINVAL;
-+
-+failure:
-+ return -ENOMEM;
-+}
-+
-+
-+static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf)
-+{
-+ struct super_block *s = dentry->d_sb;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ TRACE("Entered squashfs_statfs\n");
-+
-+ buf->f_type = SQUASHFS_MAGIC;
-+ buf->f_bsize = sblk->block_size;
-+ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
-+ buf->f_bfree = buf->f_bavail = 0;
-+ buf->f_files = sblk->inodes;
-+ buf->f_ffree = 0;
-+ buf->f_namelen = SQUASHFS_NAME_LEN;
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_symlink_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ int index = page->index << PAGE_CACHE_SHIFT, length, bytes;
-+ long long block = SQUASHFS_I(inode)->start_block;
-+ int offset = SQUASHFS_I(inode)->offset;
-+ void *pageaddr = kmap(page);
-+
-+ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
-+ "%llx, offset %x\n", page->index,
-+ SQUASHFS_I(inode)->start_block,
-+ SQUASHFS_I(inode)->offset);
-+
-+ for (length = 0; length < index; length += bytes) {
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL,
-+ block, offset, PAGE_CACHE_SIZE, &block,
-+ &offset))) {
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block,
-+ offset);
-+ goto skip_read;
-+ }
-+ }
-+
-+ if (length != index) {
-+ ERROR("(squashfs_symlink_readpage) length != index\n");
-+ bytes = 0;
-+ goto skip_read;
-+ }
-+
-+ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE :
-+ i_size_read(inode) - length;
-+
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block,
-+ offset, bytes, &block, &offset)))
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
-+{
-+ struct meta_index *meta = NULL;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
-+
-+ if(msblk->meta_index == NULL)
-+ goto not_allocated;
-+
-+ for (i = 0; i < SQUASHFS_META_NUMBER; i ++)
-+ if (msblk->meta_index[i].inode_number == inode->i_ino &&
-+ msblk->meta_index[i].offset >= offset &&
-+ msblk->meta_index[i].offset <= index &&
-+ msblk->meta_index[i].locked == 0) {
-+ TRACE("locate_meta_index: entry %d, offset %d\n", i,
-+ msblk->meta_index[i].offset);
-+ meta = &msblk->meta_index[i];
-+ offset = meta->offset;
-+ }
-+
-+ if (meta)
-+ meta->locked = 1;
-+
-+not_allocated:
-+ up(&msblk->meta_index_mutex);
-+
-+ return meta;
-+}
-+
-+
-+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct meta_index *meta = NULL;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
-+
-+ if(msblk->meta_index == NULL) {
-+ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) *
-+ SQUASHFS_META_NUMBER, GFP_KERNEL))) {
-+ ERROR("Failed to allocate meta_index\n");
-+ goto failed;
-+ }
-+ for(i = 0; i < SQUASHFS_META_NUMBER; i++) {
-+ msblk->meta_index[i].inode_number = 0;
-+ msblk->meta_index[i].locked = 0;
-+ }
-+ msblk->next_meta_index = 0;
-+ }
-+
-+ for(i = SQUASHFS_META_NUMBER; i &&
-+ msblk->meta_index[msblk->next_meta_index].locked; i --)
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ if(i == 0) {
-+ TRACE("empty_meta_index: failed!\n");
-+ goto failed;
-+ }
-+
-+ TRACE("empty_meta_index: returned meta entry %d, %p\n",
-+ msblk->next_meta_index,
-+ &msblk->meta_index[msblk->next_meta_index]);
-+
-+ meta = &msblk->meta_index[msblk->next_meta_index];
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ meta->inode_number = inode->i_ino;
-+ meta->offset = offset;
-+ meta->skip = skip;
-+ meta->entries = 0;
-+ meta->locked = 1;
-+
-+failed:
-+ up(&msblk->meta_index_mutex);
-+ return meta;
-+}
-+
-+
-+void release_meta_index(struct inode *inode, struct meta_index *meta)
-+{
-+ meta->locked = 0;
-+}
-+
-+
-+static int read_block_index(struct super_block *s, int blocks, char *block_list,
-+ long long *start_block, int *offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned int *block_listp;
-+ int block = 0;
-+
-+ if (msblk->swap) {
-+ char sblock_list[blocks << 2];
-+
-+ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
-+ ((unsigned int *)sblock_list), blocks);
-+ } else
-+ if (!squashfs_get_cached_block(s, block_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+
-+ for (block_listp = (unsigned int *) block_list; blocks;
-+ block_listp++, blocks --)
-+ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
-+
-+ return block;
-+
-+failure:
-+ return -1;
-+}
-+
-+
-+#define SIZE 256
-+
-+static inline int calculate_skip(int blocks) {
-+ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
-+ return skip >= 7 ? 7 : skip + 1;
-+}
-+
-+
-+static int get_meta_index(struct inode *inode, int index,
-+ long long *index_block, int *index_offset,
-+ long long *data_block, char *block_list)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
-+ int offset = 0;
-+ struct meta_index *meta;
-+ struct meta_entry *meta_entry;
-+ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
-+ int cur_offset = SQUASHFS_I(inode)->offset;
-+ long long cur_data_block = SQUASHFS_I(inode)->start_block;
-+ int i;
-+
-+ index /= SQUASHFS_META_INDEXES * skip;
-+
-+ while ( offset < index ) {
-+ meta = locate_meta_index(inode, index, offset + 1);
-+
-+ if (meta == NULL) {
-+ if ((meta = empty_meta_index(inode, offset + 1,
-+ skip)) == NULL)
-+ goto all_done;
-+ } else {
-+ offset = index < meta->offset + meta->entries ? index :
-+ meta->offset + meta->entries - 1;
-+ meta_entry = &meta->meta_entry[offset - meta->offset];
-+ cur_index_block = meta_entry->index_block + sblk->inode_table_start;
-+ cur_offset = meta_entry->offset;
-+ cur_data_block = meta_entry->data_block;
-+ TRACE("get_meta_index: offset %d, meta->offset %d, "
-+ "meta->entries %d\n", offset, meta->offset,
-+ meta->entries);
-+ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
-+ " data_block 0x%llx\n", cur_index_block,
-+ cur_offset, cur_data_block);
-+ }
-+
-+ for (i = meta->offset + meta->entries; i <= index &&
-+ i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
-+ int blocks = skip * SQUASHFS_META_INDEXES;
-+
-+ while (blocks) {
-+ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) :
-+ blocks;
-+ int res = read_block_index(inode->i_sb, block,
-+ block_list, &cur_index_block,
-+ &cur_offset);
-+
-+ if (res == -1)
-+ goto failed;
-+
-+ cur_data_block += res;
-+ blocks -= block;
-+ }
-+
-+ meta_entry = &meta->meta_entry[i - meta->offset];
-+ meta_entry->index_block = cur_index_block - sblk->inode_table_start;
-+ meta_entry->offset = cur_offset;
-+ meta_entry->data_block = cur_data_block;
-+ meta->entries ++;
-+ offset ++;
-+ }
-+
-+ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
-+ meta->offset, meta->entries);
-+
-+ release_meta_index(inode, meta);
-+ }
-+
-+all_done:
-+ *index_block = cur_index_block;
-+ *index_offset = cur_offset;
-+ *data_block = cur_data_block;
-+
-+ return offset * SQUASHFS_META_INDEXES * skip;
-+
-+failed:
-+ release_meta_index(inode, meta);
-+ return -1;
-+}
-+
-+
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize)
-+{
-+ long long block_ptr;
-+ int offset;
-+ long long block;
-+ int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
-+ block_list);
-+
-+ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
-+ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset,
-+ block);
-+
-+ if(res == -1)
-+ goto failure;
-+
-+ index -= res;
-+
-+ while ( index ) {
-+ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
-+ int res = read_block_index(inode->i_sb, blocks, block_list,
-+ &block_ptr, &offset);
-+ if (res == -1)
-+ goto failure;
-+ block += res;
-+ index -= blocks;
-+ }
-+
-+ if (read_block_index(inode->i_sb, 1, block_list,
-+ &block_ptr, &offset) == -1)
-+ goto failure;
-+ *bsize = *((unsigned int *) block_list);
-+
-+ return block;
-+
-+failure:
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0;
-+ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
-+ void *pageaddr;
-+ struct squashfs_fragment_cache *fragment = NULL;
-+ char *data_ptr = msblk->read_page;
-+
-+ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
-+ int start_index = page->index & ~mask;
-+ int end_index = start_index | mask;
-+
-+ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT))
-+ goto skip_read;
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ if ((block = (msblk->read_blocklist)(inode, index, 1,
-+ block_list, NULL, &bsize)) == 0)
-+ goto skip_read;
-+
-+ down(&msblk->read_page_mutex);
-+
-+ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page,
-+ block, bsize, NULL))) {
-+ ERROR("Unable to read page, block %llx, size %x\n", block,
-+ bsize);
-+ up(&msblk->read_page_mutex);
-+ goto skip_read;
-+ }
-+ } else {
-+ if ((fragment = get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)->u.s1.fragment_size))
-+ == NULL) {
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ (int) SQUASHFS_I(inode)->
-+ u.s1.fragment_size);
-+ goto skip_read;
-+ }
-+ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset +
-+ (i_size_read(inode) & (sblk->block_size
-+ - 1));
-+ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset;
-+ data_ptr = fragment->data;
-+ }
-+
-+ for (i = start_index; i <= end_index && byte_offset < bytes;
-+ i++, byte_offset += PAGE_CACHE_SIZE) {
-+ struct page *push_page;
-+ int available_bytes = (bytes - byte_offset) > PAGE_CACHE_SIZE ?
-+ PAGE_CACHE_SIZE : bytes - byte_offset;
-+
-+ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n",
-+ bytes, i, byte_offset, available_bytes);
-+
-+ if (i == page->index) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+ } else if ((push_page =
-+ grab_cache_page_nowait(page->mapping, i))) {
-+ pageaddr = kmap_atomic(push_page, KM_USER0);
-+
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(push_page);
-+ SetPageUptodate(push_page);
-+ unlock_page(push_page);
-+ page_cache_release(push_page);
-+ }
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log))
-+ up(&msblk->read_page_mutex);
-+ else
-+ release_cached_fragment(msblk, fragment);
-+
-+ return 0;
-+
-+skip_read:
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage4K(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, bytes = 0;
-+ void *pageaddr;
-+
-+ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT)) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ goto skip_read;
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || page->index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ block = (msblk->read_blocklist)(inode, page->index, 1,
-+ block_list, NULL, &bsize);
-+
-+ down(&msblk->read_page_mutex);
-+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
-+ bsize, NULL);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (bytes)
-+ memcpy(pageaddr, msblk->read_page, bytes);
-+ else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ block, bsize);
-+ up(&msblk->read_page_mutex);
-+ } else {
-+ struct squashfs_fragment_cache *fragment =
-+ get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (fragment) {
-+ bytes = i_size_read(inode) & (sblk->block_size - 1);
-+ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)->
-+ u.s1.fragment_offset, bytes);
-+ release_cached_fragment(msblk, fragment);
-+ } else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block, (int)
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ }
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ f_pos =- 3;
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length + 3;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index *index = (struct squashfs_dir_index *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length + 3;
-+}
-+
-+
-+static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
-+
-+ while(file->f_pos < 3) {
-+ char *name;
-+ int size, i_ino;
-+
-+ if(file->f_pos == 0) {
-+ name = ".";
-+ size = 1;
-+ i_ino = i->i_ino;
-+ } else {
-+ name = "..";
-+ size = 2;
-+ i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
-+ }
-+ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
-+ (unsigned int) dirent, name, size, (int)
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]);
-+
-+ if (filldir(dirent, name, size,
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]) < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos += size;
-+ dirs_read++;
-+ }
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %d\n", name,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+static void squashfs_put_super(struct super_block *s)
-+{
-+ int i;
-+
-+ if (s->s_fs_info) {
-+ struct squashfs_sb_info *sbi = s->s_fs_info;
-+ if (sbi->block_cache)
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (sbi->block_cache[i].block !=
-+ SQUASHFS_INVALID_BLK)
-+ kfree(sbi->block_cache[i].data);
-+ if (sbi->fragment)
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
-+ SQUASHFS_FREE(sbi->fragment[i].data);
-+ kfree(sbi->fragment);
-+ kfree(sbi->block_cache);
-+ kfree(sbi->read_data);
-+ kfree(sbi->read_page);
-+ kfree(sbi->uid);
-+ kfree(sbi->fragment_index);
-+ kfree(sbi->fragment_index_2);
-+ kfree(sbi->meta_index);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ }
-+}
-+
-+
-+static int squashfs_get_sb(struct file_system_type *fs_type,
-+ int flags, const char *dev_name, void *data, struct vfsmount *mnt)
-+{
-+ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, mnt);
-+}
-+
-+
-+static int __init init_squashfs_fs(void)
-+{
-+ int err = init_inodecache();
-+ if (err)
-+ goto out;
-+
-+ printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
-+ "Phillip Lougher\n");
-+
-+ if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
-+ ERROR("Failed to allocate zlib workspace\n");
-+ destroy_inodecache();
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+
-+ if ((err = register_filesystem(&squashfs_fs_type))) {
-+ vfree(stream.workspace);
-+ destroy_inodecache();
-+ }
-+
-+out:
-+ return err;
-+}
-+
-+
-+static void __exit exit_squashfs_fs(void)
-+{
-+ vfree(stream.workspace);
-+ unregister_filesystem(&squashfs_fs_type);
-+ destroy_inodecache();
-+}
-+
-+
-+static kmem_cache_t * squashfs_inode_cachep;
-+
-+
-+static struct inode *squashfs_alloc_inode(struct super_block *sb)
-+{
-+ struct squashfs_inode_info *ei;
-+ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL);
-+ if (!ei)
-+ return NULL;
-+ return &ei->vfs_inode;
-+}
-+
-+
-+static void squashfs_destroy_inode(struct inode *inode)
-+{
-+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
-+}
-+
-+
-+static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
-+{
-+ struct squashfs_inode_info *ei = foo;
-+
-+ if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
-+ SLAB_CTOR_CONSTRUCTOR)
-+ inode_init_once(&ei->vfs_inode);
-+}
-+
-+
-+static int __init init_inodecache(void)
-+{
-+ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
-+ sizeof(struct squashfs_inode_info),
-+ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
-+ init_once, NULL);
-+ if (squashfs_inode_cachep == NULL)
-+ return -ENOMEM;
-+ return 0;
-+}
-+
-+
-+static void destroy_inodecache(void)
-+{
-+ kmem_cache_destroy(squashfs_inode_cachep);
-+}
-+
-+
-+module_init(init_squashfs_fs);
-+module_exit(exit_squashfs_fs);
-+MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
-+MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
-Index: git/fs/squashfs/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/Makefile 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,7 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
-+
-+obj-$(CONFIG_SQUASHFS) += squashfs.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
-Index: git/fs/squashfs/squashfs2_0.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/squashfs2_0.c 2006-11-01 18:01:49.000000000 +0000
-@@ -0,0 +1,757 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs2_0.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
-+static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
-+ struct nameidata *);
-+
-+static struct file_operations squashfs_dir_ops_2 = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir_2
-+};
-+
-+static struct inode_operations squashfs_dir_inode_ops_2 = {
-+ .lookup = squashfs_lookup_2
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static int read_fragment_index_table_2(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index_2,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ unsigned int fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
-+ &msblk->fragment_index_2[i], 1);
-+ msblk->fragment_index_2[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
-+ struct squashfs_fragment_entry_2 fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry_2 sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = ino;
-+ i->i_mtime.tv_sec = sblk->mkfs_time;
-+ i->i_atime.tv_sec = sblk->mkfs_time;
-+ i->i_ctime.tv_sec = sblk->mkfs_time;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_nlink = 1;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget_2(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned int block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ unsigned int ino = SQUASHFS_MK_VFS_INODE(block
-+ - sblk->inode_table_start, offset);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header_2 id, sid;
-+ struct squashfs_base_inode_header_2 *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ struct squashfs_reg_inode_header_2 *inodep = &id.reg;
-+ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
-+ long long frag_blk;
-+ unsigned int frag_size;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location_2(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %x, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header_2 *inodep = &id.dir;
-+ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header_2 *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header_2 *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header_2 *inodep = &id.dev;
-+ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%x:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index_2 index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index_2 *index = (struct squashfs_dir_index_2 *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index_2),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length;
-+}
-+
-+
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+
-+ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos, SQUASHFS_MK_VFS_INODE(
-+ dirh.start_block, dire->offset),
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (sorted && name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %lld\n", name,
-+ dirh.start_block, dire->offset, ino);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget_2;
-+ msblk->read_fragment_index_table = read_fragment_index_table_2;
-+
-+ sblk->bytes_used = sblk->bytes_used_2;
-+ sblk->uid_start = sblk->uid_start_2;
-+ sblk->guid_start = sblk->guid_start_2;
-+ sblk->inode_table_start = sblk->inode_table_start_2;
-+ sblk->directory_table_start = sblk->directory_table_start_2;
-+ sblk->fragment_table_start = sblk->fragment_table_start_2;
-+
-+ return 1;
-+}
-Index: git/fs/squashfs/squashfs.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/squashfs.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs.h
-+ */
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#endif
-+
-+#ifdef SQUASHFS_TRACE
-+#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
-+#else
-+#define TRACE(s, args...) {}
-+#endif
-+
-+#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
-+
-+#define SERROR(s, args...) do { \
-+ if (!silent) \
-+ printk(KERN_ERR "SQUASHFS error: "s, ## args);\
-+ } while(0)
-+
-+#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
-+
-+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
-+{
-+ return list_entry(inode, struct squashfs_inode_info, vfs_inode);
-+}
-+
-+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
-+#define SQSH_EXTERN
-+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index);
-+extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset);
-+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment);
-+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length);
-+extern struct address_space_operations squashfs_symlink_aops;
-+extern struct address_space_operations squashfs_aops;
-+extern struct address_space_operations squashfs_aops_4K;
-+extern struct inode_operations squashfs_dir_inode_ops;
-+#else
-+#define SQSH_EXTERN static
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-Index: git/include/linux/squashfs_fs.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/linux/squashfs_fs.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,911 @@
-+#ifndef SQUASHFS_FS
-+#define SQUASHFS_FS
-+
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs.h
-+ */
-+
-+#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_VMALLOC
-+#define SQUASHFS_ALLOC(a) vmalloc(a)
-+#define SQUASHFS_FREE(a) vfree(a)
-+#else
-+#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL)
-+#define SQUASHFS_FREE(a) kfree(a)
-+#endif
-+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
-+#define SQUASHFS_MAJOR 3
-+#define SQUASHFS_MINOR 0
-+#define SQUASHFS_MAGIC 0x73717368
-+#define SQUASHFS_MAGIC_SWAP 0x68737173
-+#define SQUASHFS_START 0
-+
-+/* size of metadata (inode and directory) blocks */
-+#define SQUASHFS_METADATA_SIZE 8192
-+#define SQUASHFS_METADATA_LOG 13
-+
-+/* default size of data blocks */
-+#define SQUASHFS_FILE_SIZE 65536
-+#define SQUASHFS_FILE_LOG 16
-+
-+#define SQUASHFS_FILE_MAX_SIZE 65536
-+
-+/* Max number of uids and gids */
-+#define SQUASHFS_UIDS 256
-+#define SQUASHFS_GUIDS 255
-+
-+/* Max length of filename (not 255) */
-+#define SQUASHFS_NAME_LEN 256
-+
-+#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
-+#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff)
-+#define SQUASHFS_INVALID_BLK ((long long) -1)
-+#define SQUASHFS_USED_BLK ((long long) -2)
-+
-+/* Filesystem flags */
-+#define SQUASHFS_NOI 0
-+#define SQUASHFS_NOD 1
-+#define SQUASHFS_CHECK 2
-+#define SQUASHFS_NOF 3
-+#define SQUASHFS_NO_FRAG 4
-+#define SQUASHFS_ALWAYS_FRAG 5
-+#define SQUASHFS_DUPLICATE 6
-+
-+#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
-+
-+#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOI)
-+
-+#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOD)
-+
-+#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOF)
-+
-+#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NO_FRAG)
-+
-+#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_ALWAYS_FRAG)
-+
-+#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_DUPLICATE)
-+
-+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_CHECK)
-+
-+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
-+ duplicate_checking) (noi | (nod << 1) | (check_data << 2) \
-+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
-+ (duplicate_checking << 6))
-+
-+/* Max number of types and file types */
-+#define SQUASHFS_DIR_TYPE 1
-+#define SQUASHFS_FILE_TYPE 2
-+#define SQUASHFS_SYMLINK_TYPE 3
-+#define SQUASHFS_BLKDEV_TYPE 4
-+#define SQUASHFS_CHRDEV_TYPE 5
-+#define SQUASHFS_FIFO_TYPE 6
-+#define SQUASHFS_SOCKET_TYPE 7
-+#define SQUASHFS_LDIR_TYPE 8
-+#define SQUASHFS_LREG_TYPE 9
-+
-+/* 1.0 filesystem type definitions */
-+#define SQUASHFS_TYPES 5
-+#define SQUASHFS_IPC_TYPE 0
-+
-+/* Flag whether block is compressed or uncompressed, bit is set if block is
-+ * uncompressed */
-+#define SQUASHFS_COMPRESSED_BIT (1 << 15)
-+
-+#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
-+ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
-+
-+#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
-+
-+#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
-+
-+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
-+
-+#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
-+
-+/*
-+ * Inode number ops. Inodes consist of a compressed block number, and an
-+ * uncompressed offset within that block
-+ */
-+#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
-+
-+#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
-+
-+#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\
-+ << 16) + (B)))
-+
-+/* Compute 32 bit VFS inode number from squashfs inode number */
-+#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \
-+ ((b) >> 2) + 1))
-+/* XXX */
-+
-+/* Translate between VFS mode and squashfs mode */
-+#define SQUASHFS_MODE(a) ((a) & 0xfff)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES(A) (A * sizeof(struct squashfs_fragment_entry))
-+
-+#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\
-+ sizeof(long long))
-+
-+/* cached data constants for filesystem */
-+#define SQUASHFS_CACHED_BLKS 8
-+
-+#define SQUASHFS_MAX_FILE_SIZE_LOG 64
-+
-+#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \
-+ (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
-+
-+#define SQUASHFS_MARKER_BYTE 0xff
-+
-+/* meta index cache */
-+#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
-+#define SQUASHFS_META_ENTRIES 31
-+#define SQUASHFS_META_NUMBER 8
-+#define SQUASHFS_SLOTS 4
-+
-+struct meta_entry {
-+ long long data_block;
-+ unsigned int index_block;
-+ unsigned short offset;
-+ unsigned short pad;
-+};
-+
-+struct meta_index {
-+ unsigned int inode_number;
-+ unsigned int offset;
-+ unsigned short entries;
-+ unsigned short skip;
-+ unsigned short locked;
-+ unsigned short pad;
-+ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES];
-+};
-+
-+
-+/*
-+ * definitions for structures on disk
-+ */
-+
-+typedef long long squashfs_block_t;
-+typedef long long squashfs_inode_t;
-+
-+struct squashfs_super_block {
-+ unsigned int s_magic;
-+ unsigned int inodes;
-+ unsigned int bytes_used_2;
-+ unsigned int uid_start_2;
-+ unsigned int guid_start_2;
-+ unsigned int inode_table_start_2;
-+ unsigned int directory_table_start_2;
-+ unsigned int s_major:16;
-+ unsigned int s_minor:16;
-+ unsigned int block_size_1:16;
-+ unsigned int block_log:16;
-+ unsigned int flags:8;
-+ unsigned int no_uids:8;
-+ unsigned int no_guids:8;
-+ unsigned int mkfs_time /* time of filesystem creation */;
-+ squashfs_inode_t root_inode;
-+ unsigned int block_size;
-+ unsigned int fragments;
-+ unsigned int fragment_table_start_2;
-+ long long bytes_used;
-+ long long uid_start;
-+ long long guid_start;
-+ long long inode_table_start;
-+ long long directory_table_start;
-+ long long fragment_table_start;
-+ long long unused;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_index {
-+ unsigned int index;
-+ unsigned int start_block;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_BASE_INODE_HEADER \
-+ unsigned int inode_type:4; \
-+ unsigned int mode:12; \
-+ unsigned int uid:8; \
-+ unsigned int guid:8; \
-+ unsigned int mtime; \
-+ unsigned int inode_number;
-+
-+struct squashfs_base_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_lreg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ long long file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int parent_inode;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int i_count:16;
-+ unsigned int parent_inode;
-+ struct squashfs_dir_index index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header {
-+ struct squashfs_base_inode_header base;
-+ struct squashfs_dev_inode_header dev;
-+ struct squashfs_symlink_inode_header symlink;
-+ struct squashfs_reg_inode_header reg;
-+ struct squashfs_lreg_inode_header lreg;
-+ struct squashfs_dir_inode_header dir;
-+ struct squashfs_ldir_inode_header ldir;
-+ struct squashfs_ipc_inode_header ipc;
-+};
-+
-+struct squashfs_dir_entry {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ int inode_number:16;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_header {
-+ unsigned int count:8;
-+ unsigned int start_block;
-+ unsigned int inode_number;
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry {
-+ long long start_block;
-+ unsigned int size;
-+ unsigned int unused;
-+} __attribute__ ((packed));
-+
-+extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
-+extern int squashfs_uncompress_init(void);
-+extern int squashfs_uncompress_exit(void);
-+
-+/*
-+ * macros to convert each packed bitfield structure from little endian to big
-+ * endian and vice versa. These are needed when creating or using a filesystem
-+ * on a machine with different byte ordering to the target architecture.
-+ *
-+ */
-+
-+#define SQUASHFS_SWAP_START \
-+ int bits;\
-+ int b_pos;\
-+ unsigned long long val;\
-+ unsigned char *s;\
-+ unsigned char *d;
-+
-+#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
-+ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
-+ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
-+ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
-+ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
-+ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
-+ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
-+ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
-+ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
-+ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
-+ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
-+ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
-+ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
-+ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
-+ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
-+ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
-+ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
-+ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
-+ SQUASHFS_SWAP((s)->unused, d, 888, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header))\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dev_inode_header)); \
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_reg_inode_header));\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_lreg_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 224, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 147, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 155, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
-+ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 2);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 16)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_INTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 4);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 32)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 64)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * bits / 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ bits)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+
-+struct squashfs_base_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int type:4;
-+ unsigned int offset:4;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
-+ SQUASHFS_SWAP((s)->guid, d, 20, 4);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header_1));\
-+ SQUASHFS_SWAP((s)->type, d, 24, 4);\
-+ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_1));\
-+ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_1));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_1));\
-+ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_1));\
-+ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
-+}
-+
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+
-+struct squashfs_dir_index_2 {
-+ unsigned int index:27;
-+ unsigned int start_block:29;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_base_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+ unsigned int i_count:16;
-+ struct squashfs_dir_index_2 index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header_2 {
-+ struct squashfs_base_inode_header_2 base;
-+ struct squashfs_dev_inode_header_2 dev;
-+ struct squashfs_symlink_inode_header_2 symlink;
-+ struct squashfs_reg_inode_header_2 reg;
-+ struct squashfs_dir_inode_header_2 dir;
-+ struct squashfs_ldir_inode_header_2 ldir;
-+ struct squashfs_ipc_inode_header_2 ipc;
-+};
-+
-+struct squashfs_dir_header_2 {
-+ unsigned int count:8;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_entry_2 {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry_2 {
-+ unsigned int start_block;
-+ unsigned int size;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_2)); \
-+ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_2));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_2));\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
-+ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 27);\
-+ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
-+ SQUASHFS_SWAP((s)->size, d, 56, 8);\
-+}
-+#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 32, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2))
-+
-+#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
-+ sizeof(int))
-+
-+#endif
-+
-+#ifdef __KERNEL__
-+
-+/*
-+ * macros used to swap each structure entry, taking into account
-+ * bitfields and different bitfield placing conventions on differing
-+ * architectures
-+ */
-+
-+#include <asm/byteorder.h>
-+
-+#ifdef __BIG_ENDIAN
-+ /* convert from little endian to big endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, b_pos)
-+#else
-+ /* convert from big endian to little endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, 64 - tbits - b_pos)
-+#endif
-+
-+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
-+ b_pos = pos % 8;\
-+ val = 0;\
-+ s = (unsigned char *)p + (pos / 8);\
-+ d = ((unsigned char *) &val) + 7;\
-+ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
-+ *d-- = *s++;\
-+ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
-+}
-+
-+#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
-+
-+#endif
-+#endif
-Index: git/include/linux/squashfs_fs_i.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/linux/squashfs_fs_i.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,45 @@
-+#ifndef SQUASHFS_FS_I
-+#define SQUASHFS_FS_I
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_i.h
-+ */
-+
-+struct squashfs_inode_info {
-+ long long start_block;
-+ unsigned int offset;
-+ union {
-+ struct {
-+ long long fragment_start_block;
-+ unsigned int fragment_size;
-+ unsigned int fragment_offset;
-+ long long block_list_start;
-+ } s1;
-+ struct {
-+ long long directory_index_start;
-+ unsigned int directory_index_offset;
-+ unsigned int directory_index_count;
-+ unsigned int parent_inode;
-+ } s2;
-+ } u;
-+ struct inode vfs_inode;
-+};
-+#endif
-Index: git/include/linux/squashfs_fs_sb.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/linux/squashfs_fs_sb.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,74 @@
-+#ifndef SQUASHFS_FS_SB
-+#define SQUASHFS_FS_SB
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_sb.h
-+ */
-+
-+#include <linux/squashfs_fs.h>
-+
-+struct squashfs_cache {
-+ long long block;
-+ int length;
-+ long long next_index;
-+ char *data;
-+};
-+
-+struct squashfs_fragment_cache {
-+ long long block;
-+ int length;
-+ unsigned int locked;
-+ char *data;
-+};
-+
-+struct squashfs_sb_info {
-+ struct squashfs_super_block sblk;
-+ int devblksize;
-+ int devblksize_log2;
-+ int swap;
-+ struct squashfs_cache *block_cache;
-+ struct squashfs_fragment_cache *fragment;
-+ int next_cache;
-+ int next_fragment;
-+ int next_meta_index;
-+ unsigned int *uid;
-+ unsigned int *guid;
-+ long long *fragment_index;
-+ unsigned int *fragment_index_2;
-+ unsigned int read_size;
-+ char *read_data;
-+ char *read_page;
-+ struct semaphore read_data_mutex;
-+ struct semaphore read_page_mutex;
-+ struct semaphore block_cache_mutex;
-+ struct semaphore fragment_mutex;
-+ struct semaphore meta_index_mutex;
-+ wait_queue_head_t waitq;
-+ wait_queue_head_t fragment_wait_queue;
-+ struct meta_index *meta_index;
-+ struct inode *(*iget)(struct super_block *s, squashfs_inode_t \
-+ inode);
-+ long long (*read_blocklist)(struct inode *inode, int \
-+ index, int readahead_blks, char *block_list, \
-+ unsigned short **block_p, unsigned int *bsize);
-+ int (*read_fragment_index_table)(struct super_block *s);
-+};
-+#endif
-Index: git/init/do_mounts_rd.c
-===================================================================
---- git.orig/init/do_mounts_rd.c 2006-10-31 16:09:47.000000000 +0000
-+++ git/init/do_mounts_rd.c 2006-10-31 21:26:45.000000000 +0000
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/cramfs_fs.h>
-+#include <linux/squashfs_fs.h>
- #include <linux/initrd.h>
- #include <linux/string.h>
-
-@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
- * numbers could not be found.
- *
- * We currently check for the following magic numbers:
-+ * squashfs
- * minix
- * ext2
- * romfs
-@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
- struct ext2_super_block *ext2sb;
- struct romfs_super_block *romfsb;
- struct cramfs_super *cramfsb;
-+ struct squashfs_super_block *squashfsb;
- int nblocks = -1;
- unsigned char *buf;
-
-@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
- ext2sb = (struct ext2_super_block *) buf;
- romfsb = (struct romfs_super_block *) buf;
- cramfsb = (struct cramfs_super *) buf;
-+ squashfsb = (struct squashfs_super_block *) buf;
- memset(buf, 0xe5, size);
-
- /*
-@@ -101,6 +105,15 @@ identify_ramdisk_image(int fd, int start
- goto done;
- }
-
-+ /* squashfs is at block zero too */
-+ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
-+ printk(KERN_NOTICE
-+ "RAMDISK: squashfs filesystem found at block %d\n",
-+ start_block);
-+ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
-+ goto done;
-+ }
-+
- /*
- * Read block 1 to test for minix and ext2 superblock
- */
diff --git a/packages/linux/linux-rp-2.6.20/vesafb-tng-1.0-rc2-2.6.20-rc2.patch b/packages/linux/linux-rp-2.6.20/vesafb-tng-1.0-rc2-2.6.20-rc2.patch
deleted file mode 100644
index b1b0fc3549..0000000000
--- a/packages/linux/linux-rp-2.6.20/vesafb-tng-1.0-rc2-2.6.20-rc2.patch
+++ /dev/null
@@ -1,3141 +0,0 @@
-diff --git a/Documentation/fb/vesafb.txt b/Documentation/fb/vesafb.txt
-index ee277dd..93d6e6e 100644
---- a/Documentation/fb/vesafb.txt
-+++ b/Documentation/fb/vesafb.txt
-@@ -2,16 +2,18 @@
- What is vesafb?
- ===============
-
--This is a generic driver for a graphic framebuffer on intel boxes.
-+Vesafb is a generic framebuffer driver for x86 and x86_64 boxes.
-
--The idea is simple: Turn on graphics mode at boot time with the help
--of the BIOS, and use this as framebuffer device /dev/fb0, like the m68k
--(and other) ports do.
-+VESA BIOS Extensions Version 2.0 are required, because we need access to
-+a linear frame buffer. VBE 3.0 is required if you want to use modes with a
-+higher (than the standard 60 Hz) refresh rate.
-
--This means we decide at boot time whenever we want to run in text or
--graphics mode. Switching mode later on (in protected mode) is
--impossible; BIOS calls work in real mode only. VESA BIOS Extensions
--Version 2.0 are required, because we need a linear frame buffer.
-+The VESA framebuffer driver comes in two flavors - the standard 'vesafb'
-+and 'vesafb-tng'. Vesafb-tng is available only on 32-bit x86 due to the
-+technology it uses (vm86). Vesafb-tng has more features than vesafb
-+(adjusting the refresh rate on VBE 3.0 compliant boards, switching the
-+video mode without rebooting, selecting a mode by providing its
-+modedb name, and more).
-
- Advantages:
-
-@@ -29,26 +31,35 @@ Disadvantages:
- How to use it?
- ==============
-
--Switching modes is done using the vga=... boot parameter. Read
--Documentation/svga.txt for details.
-+If you are running a 32-bit x86 system and you decide to use vesafb-tng,
-+you can either compile the driver into the kernel or use it as a module.
-+The graphics mode you want to use is in both cases specified using the
-+standard modedb format.
-
--You should compile in both vgacon (for text mode) and vesafb (for
--graphics mode). Which of them takes over the console depends on
--whenever the specified mode is text or graphics.
-+If your system doesn't support vm86 calls, things get a little more tricky.
-+Since on such systems you can't do BIOS calls from protected mode in which
-+kernel runs, you have to decide at boot time whenever you want to run in text
-+or in graphics mode. Switching mode later on is impossible. Switching modes
-+is done using the vga=... boot parameter. Read Documentation/svga.txt for
-+details. Below is a more detailed description of what to do on systems using
-+the standard vesafb driver.
-
--The graphic modes are NOT in the list which you get if you boot with
--vga=ask and hit return. The mode you wish to use is derived from the
--VESA mode number. Here are those VESA mode numbers:
-+You should compile in both vgacon (for text mode) and vesafb (for graphics
-+mode). Which of them takes over the console depends on whenever the
-+specified mode is text or graphics.
-+
-+The graphic modes are NOT in the list which you get if you boot with vga=ask
-+and hit return. The mode you wish to use is derived from the VESA mode number.
-+Here are those VESA mode numbers:
-
- | 640x480 800x600 1024x768 1280x1024
- ----+-------------------------------------
--256 | 0x101 0x103 0x105 0x107
--32k | 0x110 0x113 0x116 0x119
--64k | 0x111 0x114 0x117 0x11A
--16M | 0x112 0x115 0x118 0x11B
-+256 | 0x101 0x103 0x105 0x107
-+32k | 0x110 0x113 0x116 0x119
-+64k | 0x111 0x114 0x117 0x11A
-+16M | 0x112 0x115 0x118 0x11B
-
--The video mode number of the Linux kernel is the VESA mode number plus
--0x200.
-+The video mode number of the Linux kernel is the VESA mode number plus 0x200.
-
- Linux_kernel_mode_number = VESA_mode_number + 0x200
-
-@@ -56,15 +67,15 @@ So the table for the Kernel mode numbers are:
-
- | 640x480 800x600 1024x768 1280x1024
- ----+-------------------------------------
--256 | 0x301 0x303 0x305 0x307
--32k | 0x310 0x313 0x316 0x319
--64k | 0x311 0x314 0x317 0x31A
--16M | 0x312 0x315 0x318 0x31B
-+256 | 0x301 0x303 0x305 0x307
-+32k | 0x310 0x313 0x316 0x319
-+64k | 0x311 0x314 0x317 0x31A
-+16M | 0x312 0x315 0x318 0x31B
-
--To enable one of those modes you have to specify "vga=ask" in the
--lilo.conf file and rerun LILO. Then you can type in the desired
--mode at the "vga=ask" prompt. For example if you like to use
--1024x768x256 colors you have to say "305" at this prompt.
-+To enable one of those modes you have to specify "vga=ask" in the lilo.conf
-+file and rerun LILO. Then you can type in the desired mode at the "vga=ask"
-+prompt. For example if you like to use 1024x768x256 colors you have to say
-+"305" at this prompt.
-
- If this does not work, this might be because your BIOS does not support
- linear framebuffers or because it does not support this mode at all.
-@@ -72,11 +83,12 @@ Even if your board does, it might be the BIOS which does not. VESA BIOS
- Extensions v2.0 are required, 1.2 is NOT sufficient. You will get a
- "bad mode number" message if something goes wrong.
-
--1. Note: LILO cannot handle hex, for booting directly with
-+1. Note: LILO cannot handle hex, for booting directly with
- "vga=mode-number" you have to transform the numbers to decimal.
- 2. Note: Some newer versions of LILO appear to work with those hex values,
- if you set the 0x in front of the numbers.
-
-+
- X11
- ===
-
-@@ -84,98 +96,164 @@ XF68_FBDev should work just fine, but it is non-accelerated. Running
- another (accelerated) X-Server like XF86_SVGA might or might not work.
- It depends on X-Server and graphics board.
-
--The X-Server must restore the video mode correctly, else you end up
-+The X-Server must restore the video mode correctly, or else you end up
- with a broken console (and vesafb cannot do anything about this).
-+With vesafb-tng chances are that the console will be restored properly
-+even if the X server messes up the video mode.
-
-
- Refresh rates
- =============
-
--There is no way to change the vesafb video mode and/or timings after
--booting linux. If you are not happy with the 60 Hz refresh rate, you
--have these options:
-+With VBE 3.0 compatible BIOSes and vesafb-tng it is possible to change
-+the refresh rate either at boot time (by specifying the @<rr> part of
-+the mode name) or later, using the fbset utility.
-+
-+If you want to use the default BIOS refresh rate while switching modes
-+on a running system, set pixclock to 0.
-
-- * configure and load the DOS-Tools for your the graphics board (if
-- available) and boot linux with loadlin.
-- * use a native driver (matroxfb/atyfb) instead if vesafb. If none
-+With VBE 2.0 there is no way to change the mode timings after booting
-+Linux. If you are not happy with the 60 Hz refresh rate, you have
-+the following options:
-+
-+ * Configure and load the DOS tools for your the graphics board (if
-+ available) and boot Linux with loadlin.
-+ * Use a native driver (matroxfb/atyfb) instead of vesafb. If none
- is available, write a new one!
-- * VBE 3.0 might work too. I have neither a gfx board with VBE 3.0
-- support nor the specs, so I have not checked this yet.
-+ * Use a BIOS editor to change the default refresh rate (such an
-+ editor does exist at least for ATI Radeon BIOSes).
-+ * If you're running a non-vm86 and VBE 3.0 compatible system, you can
-+ use a kernel patch (vesafb-rrc) to hard-code some mode timings in
-+ the kernel and use these while setting the video mode at boot time.
-+
-+Note that there are some boards (nVidia 59**, 57** and newer models)
-+claiming that their Video BIOS is VBE 3.0 compliant, while ignoring the
-+CRTC values provided by software such as vesafb-tng. You'll not be able
-+to adjust the refresh rate if you're using one of these boards.
-
-
- Configuration
- =============
-
--The VESA BIOS provides protected mode interface for changing
--some parameters. vesafb can use it for palette changes and
--to pan the display. It is turned off by default because it
--seems not to work with some BIOS versions, but there are options
--to turn it on.
--
--You can pass options to vesafb using "video=vesafb:option" on
--the kernel command line. Multiple options should be separated
--by comma, like this: "video=vesafb:ypan,invers"
--
--Accepted options:
--
--invers no comment...
--
--ypan enable display panning using the VESA protected mode
-- interface. The visible screen is just a window of the
-- video memory, console scrolling is done by changing the
-- start of the window.
-- pro: * scrolling (fullscreen) is fast, because there is
-- no need to copy around data.
-- * You'll get scrollback (the Shift-PgUp thing),
-- the video memory can be used as scrollback buffer
-- kontra: * scrolling only parts of the screen causes some
-- ugly flicker effects (boot logo flickers for
-- example).
--
--ywrap Same as ypan, but assumes your gfx board can wrap-around
-- the video memory (i.e. starts reading from top if it
-- reaches the end of video memory). Faster than ypan.
--
--redraw scroll by redrawing the affected part of the screen, this
-- is the safe (and slow) default.
--
--
--vgapal Use the standard vga registers for palette changes.
-- This is the default.
--pmipal Use the protected mode interface for palette changes.
--
--mtrr:n setup memory type range registers for the vesafb framebuffer
-- where n:
-- 0 - disabled (equivalent to nomtrr) (default)
-- 1 - uncachable
-- 2 - write-back
-- 3 - write-combining
-- 4 - write-through
--
-- If you see the following in dmesg, choose the type that matches the
-- old one. In this example, use "mtrr:2".
-+The VESA BIOS provides protected mode interface for changing some parameters.
-+vesafb can use it for palette changes and to pan the display. It is turned
-+off by default because it seems not to work with some BIOS versions, but
-+there are options to turn it on.
-+
-+You can pass options to vesafb using "video=vesafb:option" on the kernel
-+command line. Multiple options should be separated by a comma, like this:
-+"video=vesafb:ypan,1024x768-32@85"
-+
-+Note that vesafb-tng still uses the "video=vesafb:option" format of the
-+kernel command line video parameter. "video=vesafb-tng:xxx" is incorrect.
-+
-+Accepted options (both vesafb and vesafb-tng):
-+
-+ypan Enable display panning using the VESA protected mode interface
-+ The visible screen is just a window of the video memory,
-+ console scrolling is done by changing the start of the window.
-+ pro: * scrolling (fullscreen) is fast, because there is
-+ no need to copy around data.
-+ * you'll get scrollback (the Shift-PgUp thing),
-+ the video memory can be used as scrollback buffer
-+ con: * scrolling only parts of the screen causes some
-+ ugly flicker effects (boot logo flickers for
-+ example).
-+
-+ywrap Same as ypan, but assumes your gfx board can wrap-around the video
-+ memory (i.e. starts reading from top if it reaches the end of
-+ video memory). Faster than ypan.
-+
-+redraw Scroll by redrawing the affected part of the screen, this is the
-+ safe (and slow) default.
-+
-+vgapal Use the standard VGA registers for palette changes.
-+
-+pmipal Use the protected mode interface for palette changes.
-+ This is the default is the protected mode interface is available.
-+
-+mtrr:n Setup memory type range registers for the vesafb framebuffer
-+ where n:
-+ 0 - disabled (equivalent to nomtrr) (default)
-+ 1 - uncachable
-+ 2 - write-back
-+ 3 - write-combining
-+ 4 - write-through
-+
-+ If you see the following in dmesg, choose the type that matches
-+ the old one. In this example, use "mtrr:2".
- ...
- mtrr: type mismatch for e0000000,8000000 old: write-back new: write-combining
- ...
-
--nomtrr disable mtrr
-+nomtrr Do not use memory type range registers for vesafb.
-
- vremap:n
- remap 'n' MiB of video RAM. If 0 or not specified, remap memory
-- according to video mode. (2.5.66 patch/idea by Antonino Daplas
-- reversed to give override possibility (allocate more fb memory
-- than the kernel would) to 2.4 by tmb@iki.fi)
-+ according to video mode. (2.5.66 patch/idea by Antonino Daplas
-+ reversed to give override possibility (allocate more fb memory
-+ than the kernel would) to 2.4 by tmb@iki.fi)
-
- vtotal:n
- if the video BIOS of your card incorrectly determines the total
- amount of video RAM, use this option to override the BIOS (in MiB).
-
--Have fun!
-+Options accepted only by vesafb-tng:
-+
-+<mode> The mode you want to set, in the standard modedb format. Refer to
-+ modedb.txt for a detailed description. If you specify a mode that is
-+ not supported by your board's BIOS, vesafb-tng will attempt to set a
-+ similar mode. The list of supported modes can be found in
-+ /proc/fbx/modes, where x is the framebuffer number (usually 0).
-+ When vesafb-tng is compiled as a module, the mode string should be
-+ provided as a value of the parameter 'mode'.
-+
-+vbemode:x
-+ Force the use of VBE mode x. The mode will only be set if it's
-+ found in the VBE-provided list of supported modes.
-+ NOTE: The mode number 'x' should be specified in VESA mode number
-+ notation, not the Linux kernel one (eg. 257 instead of 769).
-+ HINT: If you use this option because normal <mode> parameter does
-+ not work for you and you use a X server, you'll probably want to
-+ set the 'nocrtc' option to ensure that the video mode is properly
-+ restored after console <-> X switches.
-+
-+nocrtc Do not use CRTC timings while setting the video mode. This option
-+ makes sence only with VBE 3.0 compliant systems. Use it if you have
-+ problems with modes set in the standard way. Note that using this
-+ option means that any refresh rate adjustments will be ignored
-+ and the refresh rate will stay at your BIOS default (60 Hz).
-+
-+noedid Do not try to fetch and use EDID-provided modes.
-+
-+noblank Disable hardware blanking.
-+
-+gtf Force the use of VESA's GTF (Generalized Timing Formula). Specifying
-+ this will cause vesafb to skip its internal modedb and EDID-modedb
-+ and jump straight to the GTF part of the code (normally used only if
-+ everything else failed). This can be useful if you want to get as
-+ much as possible from your graphics board but your BIOS doesn't
-+ support modes with the refresh rates you require. Note that you may
-+ need to specify the maxhf, maxvf and maxclk parameters if they are not
-+ provided by the EDID block.
-+
-+Additionally, the following parameters may be provided. They all override the
-+EDID-provided values and BIOS defaults. Refer to your monitor's specs to get
-+the correct values for maxhf, maxvf and maxclk for your hardware.
-+
-+maxhf:n Maximum horizontal frequency (in kHz).
-+maxvf:n Maximum vertical frequency (in Hz).
-+maxclk:n Maximum pixel clock (in MHz).
-
-- Gerd
-+Have fun!
-
- --
-+Original document for the vesafb driver by
- Gerd Knorr <kraxel@goldbach.in-berlin.de>
-
--Minor (mostly typo) changes
--by Nico Schmoigl <schmoigl@rumms.uni-mannheim.de>
-+Minor (mostly typo) changes by
-+Nico Schmoigl <schmoigl@rumms.uni-mannheim.de>
-+
-+Extended documentation for vm86, VBE 3.0 and vesafb-tng by
-+Michal Januszewski <spock@gentoo.org>
-+
-diff --git a/arch/i386/boot/video.S b/arch/i386/boot/video.S
-index 2c5b5cc..2c2d4b5 100644
---- a/arch/i386/boot/video.S
-+++ b/arch/i386/boot/video.S
-@@ -163,10 +163,12 @@ basret: ret
- # parameters in the default 80x25 mode -- these are set directly,
- # because some very obscure BIOSes supply insane values.
- mode_params:
-+#ifdef CONFIG_FB_VESA_STD
- #ifdef CONFIG_VIDEO_SELECT
- cmpb $0, graphic_mode
- jnz mopar_gr
- #endif
-+#endif
- movb $0x03, %ah # Read cursor position
- xorb %bh, %bh
- int $0x10
-@@ -199,6 +201,7 @@ mopar2: movb %al, %fs:(PARAM_VIDEO_LINES)
- ret
-
- #ifdef CONFIG_VIDEO_SELECT
-+#ifdef CONFIG_FB_VESA_STD
- # Fetching of VESA frame buffer parameters
- mopar_gr:
- leaw modelist+1024, %di
-@@ -281,6 +284,7 @@ dac_done:
- movw %es, %fs:(PARAM_VESAPM_SEG)
- movw %di, %fs:(PARAM_VESAPM_OFF)
- no_pm: ret
-+#endif
-
- # The video mode menu
- mode_menu:
-@@ -495,10 +499,12 @@ mode_set:
-
- cmpb $VIDEO_FIRST_V7>>8, %ah
- jz setv7
--
-+
-+#ifdef CONFIG_FB_VESA_STD
- cmpb $VIDEO_FIRST_VESA>>8, %ah
- jnc check_vesa
--
-+#endif
-+
- orb %ah, %ah
- jz setmenu
-
-@@ -570,6 +576,7 @@ setr1: lodsw
- movw -4(%si), %ax # Fetch mode ID
- jmp _m_s
-
-+#ifdef CONFIG_FB_VESA_STD
- check_vesa:
- leaw modelist+1024, %di
- subb $VIDEO_FIRST_VESA>>8, %bh
-@@ -603,6 +610,7 @@ check_vesa:
- ret
-
- _setbad: jmp setbad # Ugly...
-+#endif
-
- # Recalculate vertical display end registers -- this fixes various
- # inconsistencies of extended modes on many adapters. Called when
-diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c
-index 1393523..8a05f95 100644
---- a/drivers/char/sysrq.c
-+++ b/drivers/char/sysrq.c
-@@ -240,7 +240,7 @@ static void send_sig_all(int sig)
- struct task_struct *p;
-
- for_each_process(p) {
-- if (p->mm && !is_init(p))
-+ if (p->mm && !is_init(p) && !(p->flags & PF_BORROWED_MM))
- /* Not swapper, init nor kernel thread */
- force_sig(sig, p);
- }
-diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
-index 4e83f01..ae122fd 100644
---- a/drivers/video/Kconfig
-+++ b/drivers/video/Kconfig
-@@ -547,8 +547,22 @@ config FB_TGA
- cards. Say Y if you have one of those.
-
- config FB_VESA
-- bool "VESA VGA graphics support"
-- depends on (FB = y) && X86
-+ tristate "VESA VGA graphics support"
-+ depends on (FB = y) && (X86 || X86_64)
-+ help
-+ This is the frame buffer device driver for generic VESA 2.0
-+ compliant graphic cards. The older VESA 1.2 cards are not supported.
-+ You will get a boot time penguin logo at no additional cost. Please
-+ read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
-+
-+choice
-+ prompt "VESA driver type"
-+ depends on FB_VESA
-+ default FB_VESA_STD if X86_64
-+ default FB_VESA_TNG if X86
-+
-+config FB_VESA_STD
-+ bool "vesafb"
- select FB_CFB_FILLRECT
- select FB_CFB_COPYAREA
- select FB_CFB_IMAGEBLIT
-@@ -557,7 +571,43 @@ config FB_VESA
- This is the frame buffer device driver for generic VESA 2.0
- compliant graphic cards. The older VESA 1.2 cards are not supported.
- You will get a boot time penguin logo at no additional cost. Please
-- read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
-+ read <file:Documentation/fb/vesafb.txt>. Choose this driver if you
-+ are experiencing problems with vesafb-tng or if you own a 64-bit system.
-+
-+ Note that this driver cannot be compiled as a module.
-+
-+config FB_VESA_TNG
-+ bool "vesafb-tng"
-+ depends on !X86_64
-+ select FB_MODE_HELPERS
-+ select FB_CFB_FILLRECT
-+ select FB_CFB_COPYAREA
-+ select FB_CFB_IMAGEBLIT
-+ help
-+ This is an enhanced generic frame buffer device driver for
-+ VBE 2.0 compliant graphic cards. It can take advantage of VBE 3.0
-+ features (refresh rate adjustment) when these are available.
-+ The driver also makes it possible to change the video mode
-+ on the fly and to switch back to text mode when it's unloaded.
-+
-+ If the driver is compiled as a module, the module will be called
-+ vesafb-tng.
-+
-+endchoice
-+
-+config FB_VESA_DEFAULT_MODE
-+ string "VESA default mode"
-+ depends on FB_VESA_TNG
-+ default "640x480@60"
-+ help
-+ This option is used to determine the default mode vesafb is
-+ supposed to switch to in case no mode is provided as a kernel
-+ command line parameter.
-+
-+config VIDEO_SELECT
-+ bool
-+ depends on FB_VESA
-+ default y
-
- config FB_IMAC
- bool "Intel-based Macintosh Framebuffer Support"
-diff --git a/drivers/video/Makefile b/drivers/video/Makefile
-index 309a26d..e57b0e7 100644
---- a/drivers/video/Makefile
-+++ b/drivers/video/Makefile
-@@ -102,7 +102,11 @@ obj-$(CONFIG_FB_PNX4008_DUM_RGB) += pnx4008/
- obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o
-
- # Platform or fallback drivers go here
--obj-$(CONFIG_FB_VESA) += vesafb.o
-+ifeq ($(CONFIG_FB_VESA_STD),y)
-+ obj-y += vesafb.o
-+else
-+ obj-$(CONFIG_FB_VESA) += vesafb-thread.o vesafb-tng.o
-+endif
- obj-$(CONFIG_FB_IMAC) += imacfb.o
- obj-$(CONFIG_FB_VGA16) += vga16fb.o vgastate.o
- obj-$(CONFIG_FB_OF) += offb.o
-diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
-index 3cfea31..bfb39cc 100644
---- a/drivers/video/fbmem.c
-+++ b/drivers/video/fbmem.c
-@@ -1408,6 +1408,7 @@ fbmem_init(void)
- printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
- fb_class = NULL;
- }
-+
- return 0;
- }
-
-diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c
-index 5df41f6..f838a53 100644
---- a/drivers/video/modedb.c
-+++ b/drivers/video/modedb.c
-@@ -674,6 +674,7 @@ void fb_var_to_videomode(struct fb_videomode *mode,
- {
- u32 pixclock, hfreq, htotal, vtotal;
-
-+ mode->refresh = 0;
- mode->name = NULL;
- mode->xres = var->xres;
- mode->yres = var->yres;
-@@ -1025,3 +1026,4 @@ EXPORT_SYMBOL(fb_find_best_mode);
- EXPORT_SYMBOL(fb_find_nearest_mode);
- EXPORT_SYMBOL(fb_videomode_to_modelist);
- EXPORT_SYMBOL(fb_find_mode);
-+EXPORT_SYMBOL(fb_destroy_modelist);
-diff --git a/drivers/video/vesafb-thread.c b/drivers/video/vesafb-thread.c
-new file mode 100644
-index 0000000..543e202
---- /dev/null
-+++ b/drivers/video/vesafb-thread.c
-@@ -0,0 +1,751 @@
-+/*
-+ * Framebuffer driver for VBE 2.0+ compliant graphic boards.
-+ * Kernel thread and vm86 routines.
-+ *
-+ * (c) 2004-2006 Michal Januszewski <spock@gentoo.org>
-+ *
-+ */
-+
-+#include <linux/workqueue.h>
-+#include <linux/completion.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/mm.h>
-+#include <linux/delay.h>
-+#include <linux/signal.h>
-+#include <linux/freezer.h>
-+#include <linux/suspend.h>
-+#include <linux/unistd.h>
-+#include <video/vesa.h>
-+#include <video/edid.h>
-+#include <asm/mman.h>
-+#include <asm/page.h>
-+#include <asm/vm86.h>
-+#include <asm/thread_info.h>
-+#include <asm/uaccess.h>
-+#include <asm/mmu_context.h>
-+#include "edid.h"
-+
-+static int errno;
-+
-+static DECLARE_COMPLETION(vesafb_th_completion);
-+static DECLARE_MUTEX(vesafb_task_list_sem);
-+static LIST_HEAD(vesafb_task_list);
-+static DECLARE_WAIT_QUEUE_HEAD(vesafb_wait);
-+
-+static struct vm86_struct vm86;
-+static int vesafb_pid = 0;
-+
-+#define DEFAULT_VM86_FLAGS (IF_MASK | IOPL_MASK)
-+#define VM86_PUSHW(x) \
-+do { \
-+ vm86.regs.esp -= 2; \
-+ *(u16*)(STACK_ADDR + vm86.regs.esp) = x; \
-+} while(0);
-+
-+/* Stack, the return code and buffers will be put into
-+ * one contiguous memory chunk:
-+ *
-+ * [ STACK | RET_CODE | BUFFER ]
-+ *
-+ * Some video BIOSes (sis6326) try to store data somewhere
-+ * in 0x7000-0x7fff, so we zeromap more memory to be safe.
-+ */
-+#define IVTBDA_SIZE PAGE_SIZE
-+#define RET_CODE_SIZE 0x0010
-+#define STACK_SIZE 0x0500
-+#define BUFFER_SIZE 0x10000
-+
-+/* The amount of memory that will be allocated should be a multiple
-+ * of PAGE_SIZE. */
-+#define __MEM_SIZE (RET_CODE_SIZE + STACK_SIZE + BUFFER_SIZE)
-+#define REAL_MEM_SIZE (((__MEM_SIZE / PAGE_SIZE) + 1) * PAGE_SIZE)
-+
-+#define IVTBDA_ADDR 0x00000
-+#define STACK_ADDR (IVTBDA_ADDR + IVTBDA_SIZE)
-+#define RET_CODE_ADDR (STACK_ADDR + STACK_SIZE)
-+#define BUF_ADDR (RET_CODE_ADDR + RET_CODE_SIZE)
-+
-+#define FLAG_D (1 << 10)
-+
-+/* Syscalls used by the vesafb thread */
-+static int vm86old(struct vm86_struct __user* v86)
-+{
-+ long res;
-+ __asm__ volatile ("push %%ebx; movl %2, %%ebx ; int $0x80 ; pop %%ebx"
-+ : "=a" (res)
-+ : "0" (__NR_vm86old), "ri" ((long)(v86)) : "memory");
-+
-+ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) {
-+ errno = -res;
-+ res = -1;
-+ }
-+ return (int)res;
-+}
-+
-+static int ioperm(unsigned long a, unsigned long b, unsigned long c)
-+{
-+ long res;
-+ __asm__ volatile ("push %%ebx; movl %2, %%ebx ; int $0x80 ; pop %%ebx"
-+ : "=a" (res)
-+ : "0" (__NR_ioperm), "ri" ((long)(a)), "c" ((long)(b)),
-+ "d" ((long)(c)) : "memory");
-+
-+ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) {
-+ errno = -res;
-+ res = -1;
-+ }
-+ return (int)res;
-+}
-+
-+/* Segment prefix opcodes */
-+enum {
-+ P_CS = 0x2e,
-+ P_SS = 0x36,
-+ P_DS = 0x3e,
-+ P_ES = 0x26,
-+ P_FS = 0x64,
-+ P_GS = 0x65
-+};
-+
-+/* Emulated vm86 ins instruction */
-+static void vm86_ins(int size)
-+{
-+ u32 edx, edi;
-+ edx = vm86.regs.edx & 0xffff;
-+ edi = (vm86.regs.edi & 0xffff) + (u32)(vm86.regs.es << 4);
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("std\n");
-+ else
-+ asm volatile ("cld\n");
-+
-+ switch (size) {
-+ case 4:
-+ asm volatile ("insl\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ case 2:
-+ asm volatile ("insw\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ case 1:
-+ asm volatile ("insb\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ }
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("cld\n");
-+
-+ edi -= (u32)(vm86.regs.es << 4);
-+
-+ vm86.regs.edi &= 0xffff0000;
-+ vm86.regs.edi |= edi & 0xffff;
-+}
-+
-+static void vm86_rep_ins(int size)
-+{
-+ u16 cx = vm86.regs.ecx;
-+ while (cx--)
-+ vm86_ins(size);
-+
-+ vm86.regs.ecx &= 0xffff0000;
-+}
-+
-+/* Emulated vm86 outs instruction */
-+static void vm86_outs(int size, int segment)
-+{
-+ u32 edx, esi, base;
-+
-+ edx = vm86.regs.edx & 0xffff;
-+ esi = vm86.regs.esi & 0xffff;
-+
-+ switch (segment) {
-+ case P_CS: base = vm86.regs.cs; break;
-+ case P_SS: base = vm86.regs.ss; break;
-+ case P_ES: base = vm86.regs.es; break;
-+ case P_FS: base = vm86.regs.fs; break;
-+ case P_GS: base = vm86.regs.gs; break;
-+ default: base = vm86.regs.ds; break;
-+ }
-+
-+ esi += base << 4;
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("std\n");
-+ else
-+ asm volatile ("cld\n");
-+
-+ switch (size) {
-+ case 4:
-+ asm volatile ("outsl\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ case 2:
-+ asm volatile ("outsw\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ case 1:
-+ asm volatile ("outsb\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ }
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("cld");
-+
-+ esi -= base << 4;
-+ vm86.regs.esi &= 0xffff0000;
-+ vm86.regs.esi |= (esi & 0xffff);
-+}
-+
-+static void vm86_rep_outs(int size, int segment)
-+{
-+ u16 cx = vm86.regs.ecx;
-+ while (cx--)
-+ vm86_outs(size, segment);
-+
-+ vm86.regs.ecx &= 0xffff0000;
-+}
-+
-+static int vm86_do_unknown(void)
-+{
-+ u8 data32 = 0, segment = P_DS, rep = 0;
-+ u8 *instr;
-+ int ret = 0, i = 0;
-+
-+ instr = (u8*)((vm86.regs.cs << 4) + vm86.regs.eip);
-+
-+ while (1) {
-+ switch(instr[i]) {
-+ case 0x66: /* operand size prefix */
-+ data32 = 1 - data32;
-+ i++;
-+ break;
-+ case 0xf2: /* repnz */
-+ case 0xf3: /* rep */
-+ rep = 1;
-+ i++;
-+ break;
-+ case P_CS: /* segment prefix */
-+ case P_SS:
-+ case P_DS:
-+ case P_ES:
-+ case P_FS:
-+ case P_GS:
-+ segment = instr[i];
-+ i++;
-+ break;
-+ case 0xf0: /* LOCK - ignored */
-+ case 0x67: /* address size prefix - ignored */
-+ i++;
-+ break;
-+ case 0x6c: /* insb */
-+ if (rep)
-+ vm86_rep_ins(1);
-+ else
-+ vm86_ins(1);
-+ i++;
-+ goto out;
-+ case 0x6d: /* insw / insd */
-+ if (rep) {
-+ if (data32)
-+ vm86_rep_ins(4);
-+ else
-+ vm86_rep_ins(2);
-+ } else {
-+ if (data32)
-+ vm86_ins(4);
-+ else
-+ vm86_ins(2);
-+ }
-+ i++;
-+ goto out;
-+ case 0x6e: /* outsb */
-+ if (rep)
-+ vm86_rep_outs(1, segment);
-+ else
-+ vm86_outs(1, segment);
-+ i++;
-+ goto out;
-+ case 0x6f: /* outsw / outsd */
-+ if (rep) {
-+ if (data32)
-+ vm86_rep_outs(4, segment);
-+ else
-+ vm86_rep_outs(2, segment);
-+ } else {
-+ if (data32)
-+ vm86_outs(4, segment);
-+ else
-+ vm86_outs(2, segment);
-+ }
-+ i++;
-+ goto out;
-+ case 0xe4: /* inb xx */
-+ asm volatile (
-+ "inb %w1, %b0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]), "0" (vm86.regs.eax));
-+ i += 2;
-+ goto out;
-+ case 0xe5: /* inw xx / ind xx */
-+ if (data32) {
-+ asm volatile (
-+ "inl %w1, %0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]),
-+ "0" (vm86.regs.eax));
-+ } else {
-+ asm volatile (
-+ "inw %w1, %w0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]),
-+ "0" (vm86.regs.eax));
-+ }
-+ i += 2;
-+ goto out;
-+
-+ case 0xec: /* inb dx */
-+ asm volatile (
-+ "inb %w1, %b0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx), "0" (vm86.regs.eax));
-+ i++;
-+ goto out;
-+ case 0xed: /* inw dx / ind dx */
-+ if (data32) {
-+ asm volatile (
-+ "inl %w1, %0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx));
-+ } else {
-+ asm volatile (
-+ "inw %w1, %w0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx));
-+ }
-+ i++;
-+ goto out;
-+ case 0xe6: /* outb xx */
-+ asm volatile (
-+ "outb %b0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax), "d" (instr[i+1]));
-+ i += 2;
-+ goto out;
-+ case 0xe7: /* outw xx / outd xx */
-+ if (data32) {
-+ asm volatile (
-+ "outl %0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (instr[i+1]));
-+ } else {
-+ asm volatile (
-+ "outw %w0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (instr[i+1]));
-+ }
-+ i += 2;
-+ goto out;
-+ case 0xee: /* outb dx */
-+ asm volatile (
-+ "outb %b0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax), "d" (vm86.regs.edx));
-+ i++;
-+ goto out;
-+ case 0xef: /* outw dx / outd dx */
-+ if (data32) {
-+ asm volatile (
-+ "outl %0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (vm86.regs.edx));
-+ } else {
-+ asm volatile (
-+ "outw %w0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (vm86.regs.edx));
-+ }
-+ i++;
-+ goto out;
-+ default:
-+ printk(KERN_ERR "vesafb: BUG, opcode 0x%x emulation "
-+ "not supported (EIP: 0x%lx)\n",
-+ instr[i], (u32)(vm86.regs.cs << 4) +
-+ vm86.regs.eip);
-+ ret = 1;
-+ goto out;
-+ }
-+ }
-+out: vm86.regs.eip += i;
-+ return ret;
-+}
-+
-+void vesafb_do_vm86(struct vm86_regs *regs)
-+{
-+ unsigned int ret;
-+ u8 *retcode = (void*)RET_CODE_ADDR;
-+
-+ memset(&vm86,0,sizeof(vm86));
-+ memcpy(&vm86.regs, regs, sizeof(struct vm86_regs));
-+
-+ /* The return code */
-+ retcode[0] = 0xcd; /* int opcode */
-+ retcode[1] = 0xff; /* int number (255) */
-+
-+ /* We use int 0xff to get back to protected mode */
-+ memset(&vm86.int_revectored, 0, sizeof(vm86.int_revectored));
-+ ((unsigned char *)&vm86.int_revectored)[0xff / 8] |= (1 << (0xff % 8));
-+
-+ /*
-+ * We want to call int 0x10, so we set:
-+ * CS = 0x42 = 0x10 * 4 + 2
-+ * IP = 0x40 = 0x10 * 4
-+ * and SS:ESP. It's up to the caller to set the rest of the registers.
-+ */
-+ vm86.regs.eflags = DEFAULT_VM86_FLAGS;
-+ vm86.regs.cs = *(unsigned short *)0x42;
-+ vm86.regs.eip = *(unsigned short *)0x40;
-+ vm86.regs.ss = (STACK_ADDR >> 4);
-+ vm86.regs.esp = ((STACK_ADDR & 0x0000f) + STACK_SIZE);
-+
-+ /* These will be fetched off the stack when we come to an iret in the
-+ * int's 0x10 code. */
-+ VM86_PUSHW(DEFAULT_VM86_FLAGS);
-+ VM86_PUSHW((RET_CODE_ADDR >> 4)); /* return code segment */
-+ VM86_PUSHW((RET_CODE_ADDR & 0x0000f)); /* return code offset */
-+
-+ while(1) {
-+ ret = vm86old(&vm86);
-+
-+ if (VM86_TYPE(ret) == VM86_INTx) {
-+ int vint = VM86_ARG(ret);
-+
-+ /* If exit from vm86 was caused by int 0xff, then
-+ * we're done.. */
-+ if (vint == 0xff)
-+ goto out;
-+
-+ /* .. otherwise, we have to call the int handler
-+ * manually */
-+ VM86_PUSHW(vm86.regs.eflags);
-+ VM86_PUSHW(vm86.regs.cs);
-+ VM86_PUSHW(vm86.regs.eip);
-+
-+ vm86.regs.cs = *(u16 *)((vint << 2) + 2);
-+ vm86.regs.eip = *(u16 *)(vint << 2);
-+ vm86.regs.eflags &= ~(VIF_MASK | TF_MASK);
-+ } else if (VM86_TYPE(ret) == VM86_UNKNOWN) {
-+ if (vm86_do_unknown())
-+ goto out;
-+ } else {
-+ printk(KERN_ERR "vesafb: BUG, returned from "
-+ "vm86 with %x (EIP: 0x%lx)\n",
-+ ret, (u32)(vm86.regs.cs << 4) +
-+ vm86.regs.eip);
-+ goto out;
-+ }
-+ }
-+
-+out: /* copy the registers' state back to the caller's struct */
-+ memcpy(regs, &vm86.regs, sizeof(struct vm86_regs));
-+}
-+
-+static int vesafb_remap_pfn_range(unsigned long start, unsigned long end,
-+ unsigned long pgoff, unsigned long prot,
-+ int type)
-+{
-+ struct vm_area_struct *vma;
-+ struct mm_struct *mm = current->mm;
-+ int ret = 0;
-+
-+ vma = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
-+ if (!vma)
-+ return -ENOMEM;
-+ memset(vma, 0, sizeof(*vma));
-+ down_write(&mm->mmap_sem);
-+ vma->vm_mm = mm;
-+ vma->vm_start = start;
-+ vma->vm_end = end;
-+ vma->vm_flags = VM_READ | VM_WRITE | VM_EXEC;
-+ vma->vm_flags |= mm->def_flags;
-+ vma->vm_page_prot.pgprot = prot;
-+ vma->vm_pgoff = pgoff;
-+
-+ if ((ret = insert_vm_struct(mm, vma))) {
-+ up_write(&mm->mmap_sem);
-+ kmem_cache_free(vm_area_cachep, vma);
-+ return ret;
-+ }
-+
-+ if (type) {
-+ ret = zeromap_page_range(vma,
-+ vma->vm_start,
-+ vma->vm_end - vma->vm_start,
-+ vma->vm_page_prot);
-+ } else {
-+ vma->vm_flags |= VM_SHARED;
-+ ret = remap_pfn_range(vma,
-+ vma->vm_start,
-+ vma->vm_pgoff,
-+ vma->vm_end - vma->vm_start,
-+ vma->vm_page_prot);
-+ }
-+ up_write(&mm->mmap_sem);
-+ return ret;
-+}
-+
-+static inline int vesafb_init_mem(void)
-+{
-+ int ret = 0;
-+
-+ /* The memory chunks we're remapping here should be multiples
-+ * of PAGE_SIZE. */
-+ ret += vesafb_remap_pfn_range(0x00000, IVTBDA_SIZE, 0,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 0);
-+ ret += vesafb_remap_pfn_range(IVTBDA_SIZE, REAL_MEM_SIZE, 0,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 1);
-+ ret += vesafb_remap_pfn_range(0x9f000, 0x100000,
-+ 0x9f000 >> PAGE_SHIFT,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 0);
-+ if (ret)
-+ printk(KERN_ERR "vesafb thread: memory remapping failed\n");
-+
-+ return ret;
-+}
-+
-+#define vesafb_get_string(str) \
-+{ \
-+ /* The address is in the form ssssoooo, where oooo = offset, \
-+ * ssss = segment */ \
-+ addr = ((p_vbe(tsk->buf)->str & 0xffff0000) >> 12) + \
-+ (p_vbe(tsk->buf)->str & 0x0000ffff); \
-+ \
-+ /* The data is in ROM which is shared between processes, so we \
-+ * just translate the real mode address into one visible from \
-+ * kernel space */ \
-+ if (addr >= 0xa0000) { \
-+ p_vbe(tsk->buf)->str = (u32) __va(addr); \
-+ \
-+ /* The data is in the buffer, we just have to convert the \
-+ * address so that it points into the buffer user provided. */ \
-+ } else if (addr > BUF_ADDR && addr < BUF_ADDR + \
-+ sizeof(struct vesafb_vbe_ib)) { \
-+ addr -= BUF_ADDR; \
-+ p_vbe(tsk->buf)->str = (u32) (tsk->buf + addr); \
-+ \
-+ /* This should never happen: someone was insane enough to put \
-+ * the data somewhere in RAM.. */ \
-+ } else { \
-+ p_vbe(tsk->buf)->str = (u32) ""; \
-+ } \
-+}
-+
-+void vesafb_handle_getvbeib(struct vesafb_task *tsk)
-+{
-+ int addr, res;
-+
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.edi = (BUF_ADDR & 0x000f);
-+ strncpy(p_vbe(BUF_ADDR)->vbe_signature, "VBE2", 4);
-+
-+ vesafb_do_vm86(&tsk->regs);
-+ memcpy(tsk->buf, (void*)(BUF_ADDR), sizeof(struct vesafb_vbe_ib));
-+
-+ /* The OEM fields were not defined prior to VBE 2.0 */
-+ if (p_vbe(tsk->buf)->vbe_version >= 0x200) {
-+ vesafb_get_string(oem_string_ptr);
-+ vesafb_get_string(oem_vendor_name_ptr);
-+ vesafb_get_string(oem_product_name_ptr);
-+ vesafb_get_string(oem_product_rev_ptr);
-+ }
-+
-+ /* This is basically the same as vesafb_get_string() */
-+ addr = ((p_vbe(tsk->buf)->mode_list_ptr & 0xffff0000) >> 12) +
-+ (p_vbe(tsk->buf)->mode_list_ptr & 0x0000ffff);
-+
-+ if (addr >= 0xa0000) {
-+ p_vbe(tsk->buf)->mode_list_ptr = (u32) __va(addr);
-+ } else if (addr > BUF_ADDR && addr < BUF_ADDR +
-+ sizeof(struct vesafb_vbe_ib)) {
-+ addr -= BUF_ADDR;
-+ p_vbe(tsk->buf)->mode_list_ptr = (u32) (tsk->buf + addr);
-+ } else {
-+ res = 0;
-+ printk(KERN_WARNING "vesafb: warning, copying modelist "
-+ "from somewhere in RAM!\n");
-+ while (*(u16*)(addr+res) != 0xffff &&
-+ res < (sizeof(p_vbe(tsk->buf)->reserved) - 2)) {
-+ *(u16*) ((u32)&(p_vbe(tsk->buf)->reserved) + res) =
-+ *(u16*)(addr+res);
-+ res += 2;
-+ }
-+ *(u16*) ((u32)&(p_vbe(tsk->buf)->reserved) + res) = 0xffff;
-+ }
-+}
-+
-+int vesafb_handle_tasks(void)
-+{
-+ struct vesafb_task *tsk;
-+ struct list_head *curr, *next;
-+ int ret = 0;
-+
-+ down(&vesafb_task_list_sem);
-+ list_for_each_safe(curr, next, &vesafb_task_list) {
-+ tsk = list_entry(curr, struct vesafb_task, node);
-+
-+ if (tsk->flags & TF_EXIT) {
-+ ret = 1;
-+ goto task_done;
-+ }
-+ if (tsk->flags & TF_GETVBEIB) {
-+ vesafb_handle_getvbeib(tsk);
-+ goto task_done;
-+ }
-+ /* Do we need to store a pointer to the buffer in ES:EDI? */
-+ if (tsk->flags & TF_BUF_DI) {
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.edi = (BUF_ADDR & 0x000f);
-+ }
-+ /* Sometimes the pointer has to be in ES:EBX. */
-+ if (tsk->flags & TF_BUF_BX) {
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.ebx = (BUF_ADDR & 0x000f);
-+ }
-+ if (tsk->flags & (TF_BUF_DI | TF_BUF_BX))
-+ memcpy((void*)BUF_ADDR, tsk->buf, tsk->buf_len);
-+
-+ vesafb_do_vm86(&tsk->regs);
-+
-+ if (tsk->flags & TF_RETURN_BUF)
-+ memcpy(tsk->buf, (void*)BUF_ADDR, tsk->buf_len);
-+
-+task_done: list_del(curr);
-+ complete(&tsk->done);
-+ }
-+
-+ /* If we're going to kill this thread, don't allow any elements
-+ * to be added to the task list. */
-+ if (!ret)
-+ up(&vesafb_task_list_sem);
-+
-+ return ret;
-+}
-+
-+/*
-+ * This 'hybrid' thread serves as a backend for vesafb-tng, handling all vm86
-+ * calls. It is started as a kernel thread. It then creates its own mm struct,
-+ * thus separating itself from any userspace processes. At this moment, it
-+ * stops being a kernel thread (kernel threads have mm = NULL) and becomes
-+ * a 'hybrid' thread -- one that has full access to kernel space, yet runs
-+ * with its own address space.
-+ *
-+ * This is necessary because in order to make vm86 calls some parts of the
-+ * first 1MB of RAM have to be setup to mimic the real mode. These are:
-+ * - interrupt vector table [0x00000-0x003ff]
-+ * - BIOS data area [0x00400-0x004ff]
-+ * - Extended BIOS data area [0x9fc00-0x9ffff]
-+ * - the video RAM [0xa0000-0xbffff]
-+ * - video BIOS [0xc0000-0xcffff]
-+ * - motherboard BIOS [0xf0000-0xfffff]
-+ */
-+int vesafb_thread(void *unused)
-+{
-+ int err = 0;
-+
-+ set_fs(KERNEL_DS);
-+ daemonize("vesafb");
-+
-+ if (set_new_mm()) {
-+ err = -ENOMEM;
-+ goto thr_end;
-+ }
-+ if (vesafb_init_mem()) {
-+ err = -ENOMEM;
-+ goto thr_end;
-+ }
-+
-+ DPRINTK("started vesafb thread\n");
-+
-+ /* Having an IO bitmap makes things faster as we avoid GPFs
-+ * when running vm86 code. We can live if it fails, though,
-+ * so don't bother checking for errors. */
-+ ioperm(0,1024,1);
-+ set_user_nice(current, -10);
-+
-+ complete(&vesafb_th_completion);
-+
-+ while (1) {
-+ if (vesafb_handle_tasks())
-+ break;
-+ wait_event_interruptible(vesafb_wait,
-+ !list_empty(&vesafb_task_list));
-+ try_to_freeze();
-+ }
-+
-+out: DPRINTK("exiting the vesafb thread\n");
-+ vesafb_pid = -1;
-+
-+ /* Now that all callers know this thread is no longer running
-+ * (pid < 0), allow them to continue. */
-+ up(&vesafb_task_list_sem);
-+ return err;
-+thr_end:
-+ down(&vesafb_task_list_sem);
-+ complete(&vesafb_th_completion);
-+ goto out;
-+}
-+
-+int vesafb_queue_task(struct vesafb_task *tsk)
-+{
-+ down(&vesafb_task_list_sem);
-+ if (vesafb_pid < 0)
-+ return -1;
-+ list_add_tail(&tsk->node, &vesafb_task_list);
-+ up(&vesafb_task_list_sem);
-+ wake_up(&vesafb_wait);
-+ return 0;
-+}
-+
-+int vesafb_wait_for_thread(void)
-+{
-+ /* PID 0 means that the thread is still initializing. */
-+ if (vesafb_pid < 0)
-+ return -1;
-+ wait_for_completion(&vesafb_th_completion);
-+ return 0;
-+}
-+
-+int __init vesafb_init_thread(void)
-+{
-+ vesafb_pid = kernel_thread(vesafb_thread,NULL,0);
-+ return 0;
-+}
-+
-+#ifdef MODULE
-+void __exit vesafb_kill_thread(void)
-+{
-+ struct vesafb_task *tsk;
-+ if (vesafb_pid <= 0)
-+ return;
-+
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ return;
-+ tsk->flags |= TF_EXIT;
-+ vesafb_queue_task(tsk);
-+ vesafb_wait_for_task(tsk);
-+ kfree(tsk);
-+ return;
-+}
-+module_exit(vesafb_kill_thread);
-+#endif
-+module_init(vesafb_init_thread);
-+
-+EXPORT_SYMBOL_GPL(vesafb_queue_task);
-+EXPORT_SYMBOL_GPL(vesafb_wait_for_thread);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Michal Januszewski");
-+
-diff --git a/drivers/video/vesafb-tng.c b/drivers/video/vesafb-tng.c
-new file mode 100644
-index 0000000..b4d4394
---- /dev/null
-+++ b/drivers/video/vesafb-tng.c
-@@ -0,0 +1,1586 @@
-+/*
-+ * Framebuffer driver for VBE 2.0+ compliant graphic boards
-+ *
-+ * (c) 2004-2006 Michal Januszewski <spock@gentoo.org>
-+ * Based upon vesafb code by Gerd Knorr <kraxel@goldbach.in-berlin.de>
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/string.h>
-+#include <linux/mm.h>
-+#include <linux/tty.h>
-+#include <linux/delay.h>
-+#include <linux/fb.h>
-+#include <linux/ioport.h>
-+#include <linux/init.h>
-+#include <linux/proc_fs.h>
-+#include <linux/completion.h>
-+#include <linux/platform_device.h>
-+#include <video/edid.h>
-+#include <video/vesa.h>
-+#include <video/vga.h>
-+#include <asm/io.h>
-+#include <asm/mtrr.h>
-+#include <asm/page.h>
-+#include <asm/pgtable.h>
-+#include "edid.h"
-+
-+#define dac_reg (0x3c8)
-+#define dac_val (0x3c9)
-+
-+#define VESAFB_NEED_EXACT_RES 1
-+#define VESAFB_NEED_EXACT_DEPTH 2
-+
-+/* --------------------------------------------------------------------- */
-+
-+static struct fb_var_screeninfo vesafb_defined __initdata = {
-+ .activate = FB_ACTIVATE_NOW,
-+ .height = 0,
-+ .width = 0,
-+ .right_margin = 32,
-+ .upper_margin = 16,
-+ .lower_margin = 4,
-+ .vsync_len = 4,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+};
-+
-+static struct fb_fix_screeninfo vesafb_fix __initdata = {
-+ .id = "VESA VGA",
-+ .type = FB_TYPE_PACKED_PIXELS,
-+ .accel = FB_ACCEL_NONE,
-+};
-+
-+static int mtrr = 0; /* disable mtrr by default */
-+static int blank = 1; /* enable blanking by default */
-+static int ypan = 0; /* 0 - nothing, 1 - ypan, 2 - ywrap */
-+static int pmi_setpal = 1; /* pmi for palette changes */
-+static u16 *pmi_base = NULL; /* protected mode interface location */
-+static void (*pmi_start)(void) = NULL;
-+static void (*pmi_pal)(void) = NULL;
-+static struct vesafb_vbe_ib vbe_ib;
-+static struct vesafb_mode_ib *vbe_modes;
-+static int vbe_modes_cnt = 0;
-+static struct fb_info *vesafb_info = NULL;
-+static int nocrtc = 0; /* ignore CRTC settings */
-+static int noedid __initdata = 0; /* don't try DDC transfers */
-+static int vram_remap __initdata = 0; /* set amount of memory to be used */
-+static int vram_total __initdata = 0; /* set total amount of memory */
-+static u16 maxclk __initdata = 0; /* maximum pixel clock */
-+static u16 maxvf __initdata = 0; /* maximum vertical frequency */
-+static u16 maxhf __initdata = 0; /* maximum horizontal frequency */
-+static int gtf __initdata = 0; /* forces use of the GTF */
-+static char *mode_option __initdata = NULL;
-+static u16 vbemode __initdata = 0;
-+
-+/* --------------------------------------------------------------------- */
-+
-+static int vesafb_find_vbe_mode(int xres, int yres, int depth,
-+ unsigned char flags)
-+{
-+ int i, match = -1, h = 0, d = 0x7fffffff;
-+
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ h = abs(vbe_modes[i].x_res - xres) +
-+ abs(vbe_modes[i].y_res - yres) +
-+ abs(depth - vbe_modes[i].depth);
-+ if (h == 0)
-+ return i;
-+ if (h < d || (h == d && vbe_modes[i].depth > depth)) {
-+ d = h;
-+ match = i;
-+ }
-+ }
-+ i = 1;
-+
-+ if (flags & VESAFB_NEED_EXACT_DEPTH && vbe_modes[match].depth != depth)
-+ i = 0;
-+ if (flags & VESAFB_NEED_EXACT_RES && d > 24)
-+ i = 0;
-+ if (i != 0)
-+ return match;
-+ else
-+ return -1;
-+}
-+
-+static int vesafb_pan_display(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ int offset;
-+
-+ offset = (var->yoffset * info->fix.line_length + var->xoffset) / 4;
-+
-+ /* It turns out it's not the best idea to do panning via vm86,
-+ * so we only allow it if we have a PMI. */
-+ if (pmi_start) {
-+ __asm__ __volatile__(
-+ "call *(%%edi)"
-+ : /* no return value */
-+ : "a" (0x4f07), /* EAX */
-+ "b" (0), /* EBX */
-+ "c" (offset), /* ECX */
-+ "d" (offset >> 16), /* EDX */
-+ "D" (&pmi_start)); /* EDI */
-+ }
-+ return 0;
-+}
-+
-+static int vesafb_blank(int blank, struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int err = 1;
-+
-+ if (vbe_ib.capabilities & VBE_CAP_VGACOMPAT) {
-+ int loop = 10000;
-+ u8 seq = 0, crtc17 = 0;
-+
-+ if (blank == FB_BLANK_POWERDOWN) {
-+ seq = 0x20;
-+ crtc17 = 0x00;
-+ err = 0;
-+ } else {
-+ seq = 0x00;
-+ crtc17 = 0x80;
-+ err = (blank == FB_BLANK_UNBLANK) ? 0 : -EINVAL;
-+ }
-+
-+ vga_wseq(NULL, 0x00, 0x01);
-+ seq |= vga_rseq(NULL, 0x01) & ~0x20;
-+ vga_wseq(NULL, 0x00, seq);
-+
-+ crtc17 |= vga_rcrt(NULL, 0x17) & ~0x80;
-+ while (loop--);
-+ vga_wcrt(NULL, 0x17, crtc17);
-+ vga_wseq(NULL, 0x00, 0x03);
-+ } else {
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f10;
-+ switch (blank) {
-+ case FB_BLANK_UNBLANK:
-+ tsk->regs.ebx = 0x0001;
-+ break;
-+ case FB_BLANK_NORMAL:
-+ tsk->regs.ebx = 0x0101; /* standby */
-+ break;
-+ case FB_BLANK_POWERDOWN:
-+ tsk->regs.ebx = 0x0401; /* powerdown */
-+ break;
-+ default:
-+ goto out;
-+ }
-+ tsk->flags = TF_CALL;
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) == 0x004f)
-+ err = 0;
-+out: kfree(tsk);
-+ }
-+ return err;
-+}
-+
-+static int vesafb_setpalette(struct vesafb_pal_entry *entries, int count,
-+ int start, struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int i = ((struct vesafb_par*)info->par)->mode_idx;
-+ int ret = 0;
-+
-+ /* We support palette modifications for 8 bpp modes only, so
-+ * there can never be more than 256 entries. */
-+ if (start + count > 256)
-+ return -EINVAL;
-+
-+ /* Use VGA registers if mode is VGA-compatible. */
-+ if (i >= 0 && i < vbe_modes_cnt &&
-+ vbe_modes[i].mode_attr & VBE_MODE_VGACOMPAT) {
-+ for (i = 0; i < count; i++) {
-+ outb_p(start + i, dac_reg);
-+ outb_p(entries[i].red, dac_val);
-+ outb_p(entries[i].green, dac_val);
-+ outb_p(entries[i].blue, dac_val);
-+ }
-+ } else if (pmi_setpal) {
-+ __asm__ __volatile__(
-+ "call *(%%esi)"
-+ : /* no return value */
-+ : "a" (0x4f09), /* EAX */
-+ "b" (0), /* EBX */
-+ "c" (count), /* ECX */
-+ "d" (start), /* EDX */
-+ "D" (entries), /* EDI */
-+ "S" (&pmi_pal)); /* ESI */
-+ } else {
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f09;
-+ tsk->regs.ebx = 0x0;
-+ tsk->regs.ecx = count;
-+ tsk->regs.edx = start;
-+ tsk->buf = entries;
-+ tsk->buf_len = sizeof(struct vesafb_pal_entry) * count;
-+ tsk->flags = TF_CALL | TF_BUF_DI;
-+
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ ret = 1;
-+ kfree(tsk);
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_setcolreg(unsigned regno, unsigned red, unsigned green,
-+ unsigned blue, unsigned transp,
-+ struct fb_info *info)
-+{
-+ struct vesafb_pal_entry entry;
-+ int shift = 16 - info->var.green.length;
-+ int ret = 0;
-+
-+ if (regno >= info->cmap.len)
-+ return -EINVAL;
-+
-+ if (info->var.bits_per_pixel == 8) {
-+ entry.red = red >> shift;
-+ entry.green = green >> shift;
-+ entry.blue = blue >> shift;
-+ entry.pad = 0;
-+
-+ ret = vesafb_setpalette(&entry, 1, regno, info);
-+ } else if (regno < 16) {
-+ switch (info->var.bits_per_pixel) {
-+ case 16:
-+ if (info->var.red.offset == 10) {
-+ /* 1:5:5:5 */
-+ ((u32*) (info->pseudo_palette))[regno] =
-+ ((red & 0xf800) >> 1) |
-+ ((green & 0xf800) >> 6) |
-+ ((blue & 0xf800) >> 11);
-+ } else {
-+ /* 0:5:6:5 */
-+ ((u32*) (info->pseudo_palette))[regno] =
-+ ((red & 0xf800) ) |
-+ ((green & 0xfc00) >> 5) |
-+ ((blue & 0xf800) >> 11);
-+ }
-+ break;
-+
-+ case 24:
-+ case 32:
-+ red >>= 8;
-+ green >>= 8;
-+ blue >>= 8;
-+ ((u32 *)(info->pseudo_palette))[regno] =
-+ (red << info->var.red.offset) |
-+ (green << info->var.green.offset) |
-+ (blue << info->var.blue.offset);
-+ break;
-+ }
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
-+{
-+ struct vesafb_pal_entry *entries;
-+ int shift = 16 - info->var.green.length;
-+ int i, ret = 0;
-+
-+ if (info->var.bits_per_pixel == 8) {
-+ if (cmap->start + cmap->len > info->cmap.start +
-+ info->cmap.len || cmap->start < info->cmap.start)
-+ return -EINVAL;
-+
-+ entries = vmalloc(sizeof(struct vesafb_pal_entry) * cmap->len);
-+ if (!entries)
-+ return -ENOMEM;
-+ for (i = 0; i < cmap->len; i++) {
-+ entries[i].red = cmap->red[i] >> shift;
-+ entries[i].green = cmap->green[i] >> shift;
-+ entries[i].blue = cmap->blue[i] >> shift;
-+ entries[i].pad = 0;
-+ }
-+ ret = vesafb_setpalette(entries, cmap->len, cmap->start, info);
-+ vfree(entries);
-+ } else {
-+ /* For modes with bpp > 8, we only set the pseudo palette in
-+ * the fb_info struct. We rely on vesafb_setcolreg to do all
-+ * sanity checking. */
-+ for (i = 0; i < cmap->len; i++) {
-+ ret += vesafb_setcolreg(cmap->start + i, cmap->red[i],
-+ cmap->green[i], cmap->blue[i],
-+ 0, info);
-+ }
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_set_par(struct fb_info *info)
-+{
-+ struct vesafb_par *par = (struct vesafb_par *) info->par;
-+ struct vesafb_task *tsk;
-+ struct vesafb_crtc_ib *crtc = NULL;
-+ struct vesafb_mode_ib *mode = NULL;
-+ int i, err = 0, depth = info->var.bits_per_pixel;
-+
-+ if (depth > 8 && depth != 32)
-+ depth = info->var.red.length + info->var.green.length +
-+ info->var.blue.length;
-+
-+ i = vesafb_find_vbe_mode(info->var.xres, info->var.yres, depth,
-+ VESAFB_NEED_EXACT_RES |
-+ VESAFB_NEED_EXACT_DEPTH);
-+ if (i >= 0)
-+ mode = &vbe_modes[i];
-+ else
-+ return -EINVAL;
-+
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f02;
-+ tsk->regs.ebx = mode->mode_id | 0x4000; /* use LFB */
-+ tsk->flags = TF_CALL;
-+
-+ if (vbe_ib.vbe_version >= 0x0300 && !nocrtc &&
-+ info->var.pixclock != 0) {
-+ tsk->regs.ebx |= 0x0800; /* use CRTC data */
-+ tsk->flags |= TF_BUF_DI;
-+ crtc = kmalloc(sizeof(struct vesafb_crtc_ib), GFP_KERNEL);
-+ if (!crtc) {
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+ crtc->horiz_start = info->var.xres + info->var.right_margin;
-+ crtc->horiz_end = crtc->horiz_start + info->var.hsync_len;
-+ crtc->horiz_total = crtc->horiz_end + info->var.left_margin;
-+
-+ crtc->vert_start = info->var.yres + info->var.lower_margin;
-+ crtc->vert_end = crtc->vert_start + info->var.vsync_len;
-+ crtc->vert_total = crtc->vert_end + info->var.upper_margin;
-+
-+ crtc->pixel_clock = PICOS2KHZ(info->var.pixclock) * 1000;
-+ crtc->refresh_rate = (u16)(100 * (crtc->pixel_clock /
-+ (crtc->vert_total * crtc->horiz_total)));
-+ crtc->flags = 0;
-+
-+ if (info->var.vmode & FB_VMODE_DOUBLE)
-+ crtc->flags |= 0x1;
-+ if (info->var.vmode & FB_VMODE_INTERLACED)
-+ crtc->flags |= 0x2;
-+ if (!(info->var.sync & FB_SYNC_HOR_HIGH_ACT))
-+ crtc->flags |= 0x4;
-+ if (!(info->var.sync & FB_SYNC_VERT_HIGH_ACT))
-+ crtc->flags |= 0x8;
-+ memcpy(&par->crtc, crtc, sizeof(struct vesafb_crtc_ib));
-+ } else
-+ memset(&par->crtc, 0, sizeof(struct vesafb_crtc_ib));
-+
-+ tsk->buf = (void*)crtc;
-+ tsk->buf_len = sizeof(struct vesafb_crtc_ib);
-+
-+ if (vesafb_queue_task (tsk)) {
-+ err = -EINVAL;
-+ goto out;
-+ }
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_ERR "vesafb: mode switch failed (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ err = -EINVAL;
-+ goto out;
-+ }
-+ par->mode_idx = i;
-+
-+ /* For 8bpp modes, always try to set the DAC to 8 bits. */
-+ if (vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC &&
-+ mode->bits_per_pixel <= 8) {
-+ vesafb_reset_task(tsk);
-+ tsk->flags = TF_CALL;
-+ tsk->regs.eax = 0x4f08;
-+ tsk->regs.ebx = 0x0800;
-+
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f ||
-+ ((tsk->regs.ebx & 0xff00) >> 8) != 8) {
-+ /* We've failed to set the DAC palette format -
-+ * time to correct var. */
-+ info->var.red.length = 6;
-+ info->var.green.length = 6;
-+ info->var.blue.length = 6;
-+ }
-+ }
-+
-+ info->fix.visual = (info->var.bits_per_pixel == 8) ?
-+ FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
-+ info->fix.line_length = mode->bytes_per_scan_line;
-+
-+ DPRINTK("set new mode %dx%d-%d (0x%x)\n",
-+ info->var.xres, info->var.yres, info->var.bits_per_pixel,
-+ mode->mode_id);
-+
-+out: if (crtc != NULL)
-+ kfree(crtc);
-+ kfree(tsk);
-+
-+ return err;
-+}
-+
-+static void vesafb_setup_var(struct fb_var_screeninfo *var, struct fb_info *info,
-+ struct vesafb_mode_ib *mode)
-+{
-+ var->xres = mode->x_res;
-+ var->yres = mode->y_res;
-+ var->xres_virtual = mode->x_res;
-+ var->yres_virtual = (ypan) ?
-+ info->fix.smem_len / mode->bytes_per_scan_line :
-+ mode->y_res;
-+ var->xoffset = 0;
-+ var->yoffset = 0;
-+ var->bits_per_pixel = mode->bits_per_pixel;
-+
-+ if (var->bits_per_pixel == 15)
-+ var->bits_per_pixel = 16;
-+
-+ if (var->bits_per_pixel > 8) {
-+ var->red.offset = mode->red_off;
-+ var->red.length = mode->red_len;
-+ var->green.offset = mode->green_off;
-+ var->green.length = mode->green_len;
-+ var->blue.offset = mode->blue_off;
-+ var->blue.length = mode->blue_len;
-+ var->transp.offset = mode->rsvd_off;
-+ var->transp.length = mode->rsvd_len;
-+
-+ DPRINTK("directcolor: size=%d:%d:%d:%d, shift=%d:%d:%d:%d\n",
-+ mode->rsvd_len,
-+ mode->red_len,
-+ mode->green_len,
-+ mode->blue_len,
-+ mode->rsvd_off,
-+ mode->red_off,
-+ mode->green_off,
-+ mode->blue_off);
-+ } else {
-+ var->red.offset = 0;
-+ var->green.offset = 0;
-+ var->blue.offset = 0;
-+ var->transp.offset = 0;
-+
-+ /* We're assuming that we can switch the DAC to 8 bits. If
-+ * this proves to be incorrect, we'll update the fields
-+ * later in set_par(). */
-+ if (vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC) {
-+ var->red.length = 8;
-+ var->green.length = 8;
-+ var->blue.length = 8;
-+ var->transp.length = 0;
-+ } else {
-+ var->red.length = 6;
-+ var->green.length = 6;
-+ var->blue.length = 6;
-+ var->transp.length = 0;
-+ }
-+ }
-+}
-+
-+static void inline vesafb_check_limits(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ struct fb_videomode *mode;
-+
-+ if (!var->pixclock)
-+ return;
-+ if (vbe_ib.vbe_version < 0x0300) {
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60, var, info);
-+ return;
-+ }
-+ if (!fb_validate_mode(var, info))
-+ return;
-+ mode = fb_find_best_mode(var, &info->modelist);
-+ if (mode) {
-+ DPRINTK("find_best_mode: %d %d @ %d (vmode: %d)\n",
-+ mode->xres, mode->yres, mode->refresh, mode->vmode);
-+ if (mode->xres == var->xres && mode->yres == var->yres &&
-+ !(mode->vmode & (FB_VMODE_INTERLACED | FB_VMODE_DOUBLE))) {
-+ fb_videomode_to_var(var, mode);
-+ return;
-+ }
-+ }
-+ if (info->monspecs.gtf && !fb_get_mode(FB_MAXTIMINGS, 0, var, info))
-+ return;
-+ /* Use default refresh rate */
-+ var->pixclock = 0;
-+}
-+
-+static int vesafb_check_var(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ int match = -1;
-+ int depth = var->red.length + var->green.length + var->blue.length;
-+
-+ /* Various apps will use bits_per_pixel to set the color depth,
-+ * which is theoretically incorrect, but which we'll try to handle
-+ * here. */
-+ if (depth == 0 || abs(depth - var->bits_per_pixel) >= 8)
-+ depth = var->bits_per_pixel;
-+ match = vesafb_find_vbe_mode(var->xres, var->yres, depth,
-+ VESAFB_NEED_EXACT_RES);
-+
-+ if (match == -1) {
-+ DPRINTK("vesafb: mode %dx%d-%d not found\n", var->xres,
-+ var->yres, depth);
-+ return -EINVAL;
-+ }
-+
-+ vesafb_setup_var(var, info, &vbe_modes[match]);
-+ DPRINTK("found mode 0x%x (%dx%d-%dbpp)\n",
-+ vbe_modes[match].mode_id, vbe_modes[match].x_res,
-+ vbe_modes[match].y_res, vbe_modes[match].depth);
-+
-+ /* Check whether we have remapped enough memory for this mode. */
-+ if (var->yres * vbe_modes[match].bytes_per_scan_line >
-+ info->fix.smem_len) {
-+ return -EINVAL;
-+ }
-+
-+ if ((var->vmode & FB_VMODE_DOUBLE) &&
-+ !(vbe_modes[match].mode_attr & 0x100))
-+ var->vmode &= ~FB_VMODE_DOUBLE;
-+ if ((var->vmode & FB_VMODE_INTERLACED) &&
-+ !(vbe_modes[match].mode_attr & 0x200))
-+ var->vmode &= ~FB_VMODE_INTERLACED;
-+ vesafb_check_limits(var, info);
-+ return 0;
-+}
-+
-+static int vesafb_open(struct fb_info *info, int user)
-+{
-+ struct vesafb_task *tsk = NULL;
-+ struct vesafb_par *par = info->par;
-+ int cnt = atomic_read(&par->ref_count);
-+
-+ if (!cnt) {
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ goto out;
-+
-+ /* Get the VBE state buffer size. We want all available
-+ * hardware state data (CL = 0x0f). */
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0000;
-+ tsk->flags = TF_CALL;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_WARNING "vesafb: VBE state buffer size "
-+ "cannot be determined (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ goto out;
-+ }
-+
-+ par->vbe_state_size = 64 * (tsk->regs.ebx & 0xffff);
-+ par->vbe_state = kzalloc(par->vbe_state_size, GFP_KERNEL);
-+ if (!par->vbe_state)
-+ goto out;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0001;
-+ tsk->flags = TF_CALL | TF_BUF_BX | TF_RETURN_BUF;
-+ tsk->buf = (void*)(par->vbe_state);
-+ tsk->buf_len = par->vbe_state_size;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto getstate_failed;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_WARNING "vesafb: VBE get state call "
-+ "failed (eax: 0x%lx)\n", tsk->regs.eax);
-+ goto getstate_failed;
-+ }
-+ }
-+out:
-+ atomic_inc(&par->ref_count);
-+ if (tsk)
-+ kfree(tsk);
-+ return 0;
-+
-+getstate_failed:
-+ kfree(par->vbe_state);
-+ par->vbe_state = NULL;
-+ par->vbe_state_size = 0;
-+ goto out;
-+}
-+
-+static int vesafb_release(struct fb_info *info, int user)
-+{
-+ struct vesafb_task *tsk = NULL;
-+ struct vesafb_par *par = info->par;
-+ int cnt = atomic_read(&par->ref_count);
-+
-+ if (!cnt)
-+ return -EINVAL;
-+
-+ if (cnt == 1 && par->vbe_state && par->vbe_state_size) {
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ goto out;
-+
-+ tsk->regs.eax = 0x0003;
-+ tsk->regs.ebx = 0x0000;
-+ tsk->flags = TF_CALL;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0002;
-+ tsk->buf = (void*)(par->vbe_state);
-+ tsk->buf_len = par->vbe_state_size;
-+ tsk->flags = TF_CALL | TF_BUF_BX;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ printk(KERN_WARNING "vesafb: VBE state restore call "
-+ "failed (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ }
-+out:
-+ atomic_dec(&par->ref_count);
-+ if (tsk)
-+ kfree(tsk);
-+ return 0;
-+}
-+
-+static int __init vesafb_probe(struct platform_device *device);
-+
-+static struct fb_ops vesafb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_open = vesafb_open,
-+ .fb_release = vesafb_release,
-+ .fb_setcolreg = vesafb_setcolreg,
-+ .fb_setcmap = vesafb_setcmap,
-+ .fb_pan_display = vesafb_pan_display,
-+ .fb_blank = vesafb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_check_var = vesafb_check_var,
-+ .fb_set_par = vesafb_set_par
-+};
-+
-+static struct platform_driver vesafb_driver = {
-+ .probe = vesafb_probe,
-+ .driver = {
-+ .name = "vesafb",
-+ },
-+};
-+
-+static struct platform_device *vesafb_device;
-+
-+#ifndef MODULE
-+int __init vesafb_setup(char *options)
-+{
-+ char *this_opt;
-+
-+ if (!options || !*options)
-+ return 0;
-+
-+ DPRINTK("options %s\n",options);
-+
-+ while ((this_opt = strsep(&options, ",")) != NULL) {
-+ if (!*this_opt) continue;
-+
-+ DPRINTK("this_opt: %s\n",this_opt);
-+
-+ if (! strcmp(this_opt, "redraw"))
-+ ypan=0;
-+ else if (! strcmp(this_opt, "ypan"))
-+ ypan=1;
-+ else if (! strcmp(this_opt, "ywrap"))
-+ ypan=2;
-+ else if (! strcmp(this_opt, "vgapal"))
-+ pmi_setpal=0;
-+ else if (! strcmp(this_opt, "pmipal"))
-+ pmi_setpal=1;
-+ else if (! strncmp(this_opt, "mtrr:", 5))
-+ mtrr = simple_strtoul(this_opt+5, NULL, 0);
-+ else if (! strcmp(this_opt, "nomtrr"))
-+ mtrr=0;
-+ else if (! strcmp(this_opt, "nocrtc"))
-+ nocrtc=1;
-+ else if (! strcmp(this_opt, "noedid"))
-+ noedid=1;
-+ else if (! strcmp(this_opt, "noblank"))
-+ blank=0;
-+ else if (! strcmp(this_opt, "gtf"))
-+ gtf=1;
-+ else if (! strncmp(this_opt, "vtotal:", 7))
-+ vram_total = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "vremap:", 7))
-+ vram_remap = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "maxhf:", 6))
-+ maxhf = simple_strtoul(this_opt + 6, NULL, 0);
-+ else if (! strncmp(this_opt, "maxvf:", 6))
-+ maxvf = simple_strtoul(this_opt + 6, NULL, 0);
-+ else if (! strncmp(this_opt, "maxclk:", 7))
-+ maxclk = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "vbemode:", 8))
-+ vbemode = simple_strtoul(this_opt + 8, NULL,0);
-+ else if (this_opt[0] >= '0' && this_opt[0] <= '9') {
-+ DPRINTK("mode_option: %s\n",this_opt);
-+ mode_option = this_opt;
-+ } else {
-+ printk(KERN_WARNING
-+ "vesafb: unrecognized option %s\n", this_opt);
-+ }
-+ }
-+
-+ return 0;
-+}
-+#endif /* !MODULE */
-+
-+static int vesafb_read_proc_modes(char *buf, char **start, off_t offset,
-+ int len, int *eof, void *private)
-+{
-+ int clen = 0, i;
-+
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ clen += min(snprintf(buf + clen, len - clen, "%dx%d-%d\n", vbe_modes[i].x_res,
-+ vbe_modes[i].y_res, vbe_modes[i].depth), len - clen);
-+ }
-+ *eof = 1;
-+ return clen;
-+}
-+
-+static int vesafb_read_proc_vbe_info(char *buf, char **start, off_t offset,
-+ int len, int *eof, void *private)
-+{
-+ int clen = 0;
-+
-+ clen += min(snprintf(buf + clen, len, "Version: %d.%d\n",
-+ ((vbe_ib.vbe_version & 0xff00) >> 8),
-+ vbe_ib.vbe_version & 0xff), len);
-+ clen += min(snprintf(buf + clen, len - clen, "Vendor: %s\n",
-+ (char*)vbe_ib.oem_vendor_name_ptr), len - clen);
-+ clen += min(snprintf(buf + clen, len - clen, "Product: %s\n",
-+ (char*)vbe_ib.oem_product_name_ptr), len - clen);
-+ clen += min(snprintf(buf + clen, len - clen, "OEM rev: %s\n",
-+ (char*)vbe_ib.oem_product_rev_ptr), len - clen);
-+ clen += min(snprintf(buf + clen, len - clen, "OEM string: %s\n",
-+ (char*)vbe_ib.oem_string_ptr), len - clen);
-+
-+ *eof = 1;
-+ return clen;
-+}
-+
-+static int __init inline vesafb_vbe_getinfo(struct vesafb_task *tsk)
-+{
-+ tsk->regs.eax = 0x4f00;
-+ tsk->flags = TF_CALL | TF_GETVBEIB;
-+ tsk->buf = &vbe_ib;
-+ tsk->buf_len = sizeof(vbe_ib);
-+ if (vesafb_queue_task (tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if (vbe_ib.vbe_version < 0x0200) {
-+ printk(KERN_ERR "vesafb: Sorry, pre-VBE 2.0 cards are "
-+ "not supported.\n");
-+ return -EINVAL;
-+ }
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_ERR "vesafb: Getting mode info block failed "
-+ "(eax=0x%x)\n", (u32)tsk->regs.eax);
-+ return -EINVAL;
-+ }
-+
-+ printk(KERN_INFO "vesafb: %s, %s, %s (OEM: %s)\n",
-+ (char*)vbe_ib.oem_vendor_name_ptr,
-+ (char*)vbe_ib.oem_product_name_ptr,
-+ (char*)vbe_ib.oem_product_rev_ptr,
-+ (char*)vbe_ib.oem_string_ptr);
-+
-+ printk(KERN_INFO "vesafb: VBE version: %d.%d\n",
-+ ((vbe_ib.vbe_version & 0xff00) >> 8),
-+ vbe_ib.vbe_version & 0xff);
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getmodes(struct vesafb_task *tsk)
-+{
-+ u16 *mode = 0;
-+ int off = 0;
-+
-+ /* Count available modes. */
-+ mode = (u16*)vbe_ib.mode_list_ptr;
-+ while (*mode != 0xffff) {
-+ vbe_modes_cnt++;
-+ mode++;
-+ }
-+
-+ vbe_modes = kmalloc(sizeof(struct vesafb_mode_ib)*
-+ vbe_modes_cnt, GFP_KERNEL);
-+ if (!vbe_modes)
-+ return -ENOMEM;
-+
-+ /* Get mode info for all available modes. */
-+ mode = (u16*)vbe_ib.mode_list_ptr;
-+
-+ while (*mode != 0xffff) {
-+ struct vesafb_mode_ib *mib;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f01;
-+ tsk->regs.ecx = (u32) *mode;
-+ tsk->flags = TF_CALL | TF_RETURN_BUF | TF_BUF_DI;
-+ tsk->buf = vbe_modes+off;
-+ tsk->buf_len = sizeof(struct vesafb_mode_ib);
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+ mib = p_mode(tsk->buf);
-+ mib->mode_id = *mode;
-+
-+ /* We only want modes that are supported with the currennt
-+ * hardware configuration (D0), color (D3), graphics (D4)
-+ * and that have support for the LFB (D7). */
-+ if ((mib->mode_attr & 0x99) == 0x99 &&
-+ mib->bits_per_pixel >= 8) {
-+ off++;
-+ } else {
-+ vbe_modes_cnt--;
-+ }
-+ mode++;
-+ mib->depth = mib->red_len + mib->green_len + mib->blue_len;
-+ /* Handle 8bpp modes and modes with broken color component
-+ * lengths. */
-+ if (mib->depth == 0 ||
-+ (mib->depth == 24 && mib->bits_per_pixel == 32))
-+ mib->depth = mib->bits_per_pixel;
-+ }
-+
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getpmi(struct vesafb_task *tsk)
-+{
-+ int i;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f0a;
-+ tsk->regs.ebx = 0x0;
-+ tsk->flags = TF_CALL;
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f || tsk->regs.es < 0xc000) {
-+ pmi_setpal = ypan = 0;
-+ } else {
-+ pmi_base = (u16*)phys_to_virt(((u32)tsk->regs.es << 4) +
-+ tsk->regs.edi);
-+ pmi_start = (void*)((char*)pmi_base + pmi_base[1]);
-+ pmi_pal = (void*)((char*)pmi_base + pmi_base[2]);
-+ printk(KERN_INFO "vesafb: protected mode interface info at "
-+ "%04x:%04x\n",
-+ (u16)tsk->regs.es, (u16)tsk->regs.edi);
-+ printk(KERN_INFO "vesafb: pmi: set display start = %p, "
-+ "set palette = %p\n", pmi_start, pmi_pal);
-+
-+ if (pmi_base[3]) {
-+ printk(KERN_INFO "vesafb: pmi: ports = ");
-+ for (i = pmi_base[3]/2; pmi_base[i] != 0xffff; i++)
-+ printk("%x ",pmi_base[i]);
-+ printk("\n");
-+
-+ /*
-+ * memory areas not supported (yet?)
-+ *
-+ * Rules are: we have to set up a descriptor for the
-+ * requested memory area and pass it in the ES register
-+ * to the BIOS function.
-+ */
-+ if (pmi_base[i] != 0xffff) {
-+ printk(KERN_INFO "vesafb: can't handle memory "
-+ "requests, pmi disabled\n");
-+ ypan = pmi_setpal = 0;
-+ }
-+ }
-+ }
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getedid(struct vesafb_task *tsk,
-+ struct fb_info *info)
-+{
-+ int res = 0;
-+
-+ if (noedid || vbe_ib.vbe_version < 0x0300)
-+ return -EINVAL;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f15;
-+ tsk->regs.ebx = 0;
-+ tsk->regs.ecx = 0;
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ return -EINVAL;
-+
-+ if ((tsk->regs.ebx & 0x3) == 3) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports both "
-+ "DDC1 and DDC2 transfers\n");
-+ } else if ((tsk->regs.ebx & 0x3) == 2) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports DDC2 "
-+ "transfers\n");
-+ } else if ((tsk->regs.ebx & 0x3) == 1) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports DDC1 "
-+ "transfers\n");
-+ } else {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware doesn't support "
-+ "DDC transfers\n");
-+ return -EINVAL;
-+ }
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f15;
-+ tsk->regs.ebx = 1;
-+ tsk->regs.ecx = tsk->regs.edx = 0;
-+ tsk->flags = TF_CALL | TF_RETURN_BUF | TF_BUF_DI;
-+ tsk->buf = kmalloc(EDID_LENGTH, GFP_KERNEL);
-+ tsk->buf_len = EDID_LENGTH;
-+
-+ if (vesafb_queue_task(tsk)) {
-+ res = -EINVAL;
-+ goto out;
-+ }
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) == 0x004f) {
-+ fb_edid_to_monspecs(tsk->buf, &info->monspecs);
-+ fb_videomode_to_modelist(info->monspecs.modedb,
-+ info->monspecs.modedb_len, &info->modelist);
-+ if (info->monspecs.vfmax && info->monspecs.hfmax) {
-+ /* If the maximum pixel clock wasn't specified in
-+ * the EDID block, set it to 300 MHz. */
-+ if (info->monspecs.dclkmax == 0)
-+ info->monspecs.dclkmax = 300 * 1000000;
-+ info->monspecs.gtf = 1;
-+ } else {
-+ res = -EINVAL;
-+ }
-+ }
-+
-+out: kfree(tsk->buf);
-+ return res;
-+}
-+
-+static void __init inline vesafb_vbe_getmonspecs(struct vesafb_task *tsk,
-+ struct fb_info *info)
-+{
-+ struct fb_var_screeninfo var;
-+ int i;
-+ memset(&info->monspecs, 0, sizeof(struct fb_monspecs));
-+
-+ /* If we didn't get all necessary data from the EDID block,
-+ * mark it as incompatible with the GTF. */
-+ if (vesafb_vbe_getedid(tsk, info))
-+ info->monspecs.gtf = 0;
-+
-+ /* Kernel command line overrides. */
-+ if (maxclk)
-+ info->monspecs.dclkmax = maxclk * 1000000;
-+ if (maxvf)
-+ info->monspecs.vfmax = maxvf;
-+ if (maxhf)
-+ info->monspecs.hfmax = maxhf * 1000;
-+
-+ /* In case DDC transfers are not supported the user can provide
-+ * monitor limits manually. Lower limits are set to "safe" values. */
-+ if (info->monspecs.gtf == 0 && maxclk && maxvf && maxhf) {
-+ info->monspecs.dclkmin = 0;
-+ info->monspecs.vfmin = 60;
-+ info->monspecs.hfmin = 29000;
-+ info->monspecs.gtf = 1;
-+ }
-+
-+ if (info->monspecs.gtf) {
-+ printk(KERN_INFO
-+ "vesafb: monitor limits: vf = %d Hz, hf = %d kHz, "
-+ "clk = %d MHz\n", info->monspecs.vfmax,
-+ (int)(info->monspecs.hfmax / 1000),
-+ (int)(info->monspecs.dclkmax / 1000000));
-+ /* Add valid VESA video modes to our modelist. */
-+ for (i = 0; i < VESA_MODEDB_SIZE; i++) {
-+ fb_videomode_to_var(&var, (struct fb_videomode *)
-+ &vesa_modes[i]);
-+ if (!fb_validate_mode(&var, info))
-+ fb_add_videomode((struct fb_videomode *)
-+ &vesa_modes[i],
-+ &info->modelist);
-+ }
-+ } else {
-+ /* Add all VESA video modes to our modelist. */
-+ fb_videomode_to_modelist((struct fb_videomode *)vesa_modes,
-+ VESA_MODEDB_SIZE, &info->modelist);
-+ printk(KERN_INFO "vesafb: no monitor limits have been set\n");
-+ }
-+ return;
-+}
-+
-+static int __init inline vesafb_vbe_init(struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int res = 0;
-+
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ return -EINVAL;
-+ if ((res = vesafb_vbe_getinfo(tsk)) != 0)
-+ goto out;
-+ if ((res = vesafb_vbe_getmodes(tsk)) != 0)
-+ goto out;
-+ if (pmi_setpal || ypan)
-+ vesafb_vbe_getpmi(tsk);
-+
-+ INIT_LIST_HEAD(&info->modelist);
-+ vesafb_vbe_getmonspecs(tsk, info);
-+
-+out: kfree(tsk);
-+ return res;
-+}
-+
-+static int __init decode_mode(u32 *xres, u32 *yres, u32 *bpp, u32 *refresh)
-+{
-+ int len = strlen(mode_option), i, err = 0;
-+ u8 res_specified = 0, bpp_specified = 0, refresh_specified = 0,
-+ yres_specified = 0;
-+
-+ for (i = len-1; i >= 0; i--) {
-+ switch (mode_option[i]) {
-+ case '@':
-+ len = i;
-+ if (!refresh_specified && !bpp_specified &&
-+ !yres_specified) {
-+ *refresh = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ refresh_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case '-':
-+ len = i;
-+ if (!bpp_specified && !yres_specified) {
-+ *bpp = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ bpp_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case 'x':
-+ if (!yres_specified) {
-+ *yres = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ yres_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case '0'...'9':
-+ break;
-+ default:
-+ goto out;
-+ }
-+ }
-+
-+ if (i < 0 && yres_specified) {
-+ *xres = simple_strtoul(mode_option, NULL, 0);
-+ res_specified = 1;
-+ }
-+
-+out: if (!res_specified || !yres_specified) {
-+ printk(KERN_ERR "vesafb: invalid resolution, "
-+ "%s not specified\n",
-+ (!res_specified) ? "width" : "height");
-+ err = -EINVAL;
-+ }
-+
-+ return err;
-+}
-+
-+static int __init vesafb_init_set_mode(struct fb_info *info)
-+{
-+ struct fb_videomode *fbmode;
-+ struct fb_videomode mode;
-+ int i, modeid, refresh = 0;
-+ u8 refresh_specified = 0;
-+
-+ if (!mode_option)
-+ mode_option = CONFIG_FB_VESA_DEFAULT_MODE;
-+
-+ if (vbemode > 0) {
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ if (vbe_modes[i].mode_id == vbemode) {
-+ info->var.vmode = FB_VMODE_NONINTERLACED;
-+ info->var.sync = FB_SYNC_VERT_HIGH_ACT;
-+ vesafb_setup_var(&info->var, info,
-+ &vbe_modes[i]);
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON,
-+ 60, &info->var, info);
-+ /* With pixclock set to 0, the default BIOS
-+ * timings will be used in set_par(). */
-+ info->var.pixclock = 0;
-+ modeid = i;
-+ goto out;
-+ }
-+ }
-+ printk(KERN_INFO "specified VBE mode %d not found\n",
-+ vbemode);
-+ vbemode = 0;
-+ }
-+
-+ /* Decode the mode specified on the kernel command line. We save
-+ * the depth into bits_per_pixel, which is wrong, but will work
-+ * anyway. */
-+ if (decode_mode(&info->var.xres, &info->var.yres,
-+ &info->var.bits_per_pixel, &refresh))
-+ return -EINVAL;
-+ if (refresh)
-+ refresh_specified = 1;
-+ else
-+ refresh = 60;
-+
-+ /* Look for a matching VBE mode. We can live if an exact match
-+ * cannot be found. */
-+ modeid = vesafb_find_vbe_mode(info->var.xres, info->var.yres,
-+ info->var.bits_per_pixel, 0);
-+
-+ if (modeid == -1) {
-+ return -EINVAL;
-+ } else {
-+ info->var.vmode = FB_VMODE_NONINTERLACED;
-+ info->var.sync = FB_SYNC_VERT_HIGH_ACT;
-+ vesafb_setup_var(&info->var, info, &vbe_modes[modeid]);
-+ }
-+ if (vbe_ib.vbe_version < 0x0300) {
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60,
-+ &info->var, info);
-+ goto out;
-+ }
-+ if (!gtf) {
-+ struct fb_videomode tmode;
-+
-+ if (refresh_specified) {
-+ fb_var_to_videomode(&tmode, &info->var);
-+ tmode.refresh = refresh;
-+ fbmode = fb_find_nearest_mode(&tmode,
-+ &info->modelist);
-+ } else
-+ fbmode = fb_find_best_mode(&info->var,
-+ &info->modelist);
-+
-+ if (fbmode->xres == info->var.xres &&
-+ fbmode->yres == info->var.yres &&
-+ !(fbmode->vmode & (FB_VMODE_INTERLACED | FB_VMODE_DOUBLE))
-+ && (!refresh_specified ||
-+ abs(refresh - fbmode->refresh) <= 5)) {
-+ fb_videomode_to_var(&info->var, fbmode);
-+ return modeid;
-+ }
-+ }
-+ i = FB_MAXTIMINGS;
-+ if (!info->monspecs.gtf)
-+ i = FB_IGNOREMON | FB_VSYNCTIMINGS;
-+ else if (refresh_specified)
-+ i = FB_VSYNCTIMINGS;
-+ if (!fb_get_mode(i, refresh, &info->var, info))
-+ goto out;
-+ if (info->monspecs.gtf &&
-+ !fb_get_mode(FB_MAXTIMINGS, 0, &info->var, info))
-+ goto out;
-+ /* Use default refresh rate */
-+ printk(KERN_WARNING "vesafb: using default BIOS refresh rate\n");
-+ info->var.pixclock = 0;
-+
-+out:
-+ fb_var_to_videomode(&mode, &info->var);
-+ fb_add_videomode(&mode, &info->modelist);
-+ return modeid;
-+}
-+
-+static int __init vesafb_probe(struct platform_device *dev)
-+{
-+ char entry[16];
-+ struct fb_info *info;
-+ struct vesafb_mode_ib *mode = NULL;
-+ int err = 0, i, h;
-+ unsigned int size_vmode;
-+ unsigned int size_remap;
-+ unsigned int size_total;
-+
-+ vesafb_info = info = framebuffer_alloc(sizeof(struct vesafb_par) +
-+ sizeof(u32) * 256, &dev->dev);
-+ if (!info)
-+ return -ENOMEM;
-+
-+ if (vesafb_wait_for_thread()) {
-+ printk(KERN_ERR "vesafb: vesafb thread not running\n");
-+ framebuffer_release(info);
-+ return -EINVAL;
-+ }
-+
-+ if (vesafb_vbe_init(info)) {
-+ printk(KERN_ERR "vesafb: vbe_init failed\n");
-+ err = -EINVAL;
-+ goto out;
-+ }
-+
-+ vesafb_fix.ypanstep = ypan ? 1 : 0;
-+ vesafb_fix.ywrapstep = (ypan>1) ? 1 : 0;
-+
-+ info->pseudo_palette = ((u8*)info->par + sizeof(struct vesafb_par));
-+ info->fbops = &vesafb_ops;
-+ info->var = vesafb_defined;
-+ info->fix = vesafb_fix;
-+
-+ if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
-+ err = -ENXIO;
-+ goto out;
-+ }
-+
-+ i = vesafb_init_set_mode(info);
-+ if (i < 0) {
-+ err = -EINVAL;
-+ goto out_cmap;
-+ } else
-+ mode = &vbe_modes[i];
-+
-+ /* Disable blanking if the user requested so. */
-+ if (!blank) {
-+ info->fbops->fb_blank = NULL;
-+ }
-+
-+ /* Find out how much IO memory is required for the mode with
-+ * the highest resolution. */
-+ size_remap = 0;
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ h = vbe_modes[i].bytes_per_scan_line * vbe_modes[i].y_res;
-+ if (h > size_remap)
-+ size_remap = h;
-+ }
-+ size_remap *= 2;
-+
-+ /* size_vmode -- that is the amount of memory needed for the
-+ * used video mode, i.e. the minimum amount of
-+ * memory we need. */
-+ if (mode != NULL) {
-+ size_vmode = info->var.yres * mode->bytes_per_scan_line;
-+ } else {
-+ size_vmode = info->var.yres * info->var.xres *
-+ ((info->var.bits_per_pixel + 7) >> 3);
-+ }
-+
-+ /* size_total -- all video memory we have. Used for mtrr
-+ * entries, ressource allocation and bounds
-+ * checking. */
-+ size_total = vbe_ib.total_memory * 65536;
-+ if (vram_total)
-+ size_total = vram_total * 1024 * 1024;
-+ if (size_total < size_vmode)
-+ size_total = size_vmode;
-+ ((struct vesafb_par*)(info->par))->mem_total = size_total;
-+
-+ /* size_remap -- the amount of video memory we are going to
-+ * use for vesafb. With modern cards it is no
-+ * option to simply use size_total as th
-+ * wastes plenty of kernel address space. */
-+ if (vram_remap)
-+ size_remap = vram_remap * 1024 * 1024;
-+ if (size_remap < size_vmode)
-+ size_remap = size_vmode;
-+ if (size_remap > size_total)
-+ size_remap = size_total;
-+
-+ info->fix.smem_len = size_remap;
-+ info->fix.smem_start = mode->phys_base_ptr;
-+
-+ /* We have to set it here, because when setup_var() was called,
-+ * smem_len wasn't defined yet. */
-+ info->var.yres_virtual = info->fix.smem_len /
-+ mode->bytes_per_scan_line;
-+
-+ if (ypan && info->var.yres_virtual > info->var.yres) {
-+ printk(KERN_INFO "vesafb: scrolling: %s "
-+ "using protected mode interface, "
-+ "yres_virtual=%d\n",
-+ (ypan > 1) ? "ywrap" : "ypan",info->var.yres_virtual);
-+ } else {
-+ printk(KERN_INFO "vesafb: scrolling: redraw\n");
-+ info->var.yres_virtual = info->var.yres;
-+ ypan = 0;
-+ }
-+
-+ info->flags = FBINFO_FLAG_DEFAULT |
-+ (ypan) ? FBINFO_HWACCEL_YPAN : 0;
-+
-+ if (!ypan)
-+ info->fbops->fb_pan_display = NULL;
-+
-+ if (!request_mem_region(info->fix.smem_start, size_total, "vesafb")) {
-+ printk(KERN_WARNING "vesafb: cannot reserve video memory at "
-+ "0x%lx\n", info->fix.smem_start);
-+ /* We cannot make this fatal. Sometimes this comes from magic
-+ spaces our resource handlers simply don't know about. */
-+ }
-+
-+ info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len);
-+
-+ if (!info->screen_base) {
-+ printk(KERN_ERR
-+ "vesafb: abort, cannot ioremap video memory "
-+ "0x%x @ 0x%lx\n",
-+ info->fix.smem_len, info->fix.smem_start);
-+ err = -EIO;
-+ goto out_mem;
-+ }
-+
-+ /* Request failure does not faze us, as vgacon probably has this
-+ region already (FIXME) */
-+ request_region(0x3c0, 32, "vesafb");
-+
-+#ifdef CONFIG_MTRR
-+ if (mtrr && !(info->fix.smem_start & (PAGE_SIZE - 1))) {
-+ int temp_size = size_total;
-+ unsigned int type = 0;
-+
-+ switch (mtrr) {
-+ case 1:
-+ type = MTRR_TYPE_UNCACHABLE;
-+ break;
-+ case 2:
-+ type = MTRR_TYPE_WRBACK;
-+ break;
-+ case 3:
-+ type = MTRR_TYPE_WRCOMB;
-+ break;
-+ case 4:
-+ type = MTRR_TYPE_WRTHROUGH;
-+ break;
-+ default:
-+ type = 0;
-+ break;
-+ }
-+
-+ if (type) {
-+ int rc;
-+
-+ /* Find the largest power-of-two */
-+ while (temp_size & (temp_size - 1))
-+ temp_size &= (temp_size - 1);
-+
-+ /* Try and find a power of two to add */
-+ do {
-+ rc = mtrr_add(info->fix.smem_start,
-+ temp_size, type, 1);
-+ temp_size >>= 1;
-+ } while (temp_size >= PAGE_SIZE && rc == -EINVAL);
-+ }
-+ }
-+#endif /* CONFIG_MTRR */
-+
-+ if (register_framebuffer(info) < 0) {
-+ printk(KERN_ERR
-+ "vesafb: failed to register framebuffer device\n");
-+ err = -EINVAL;
-+ goto out_mem;
-+ }
-+
-+ printk(KERN_INFO "vesafb: framebuffer at 0x%lx, mapped to 0x%p, "
-+ "using %dk, total %dk\n", info->fix.smem_start,
-+ info->screen_base, size_remap/1024, size_total/1024);
-+ printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node,
-+ info->fix.id);
-+
-+ sprintf(entry, "fb%d", info->node);
-+ proc_mkdir(entry, 0);
-+
-+ sprintf(entry, "fb%d/modes", info->node);
-+ create_proc_read_entry(entry, 0, 0, vesafb_read_proc_modes, NULL);
-+
-+ sprintf(entry, "fb%d/vbe_info", info->node);
-+ create_proc_read_entry(entry, 0, 0, vesafb_read_proc_vbe_info, NULL);
-+ return 0;
-+
-+out_mem:
-+ release_mem_region(info->fix.smem_start, size_total);
-+ if (!list_empty(&info->modelist))
-+ fb_destroy_modelist(&info->modelist);
-+ fb_destroy_modedb(info->monspecs.modedb);
-+out_cmap:
-+ fb_dealloc_cmap(&info->cmap);
-+out:
-+ framebuffer_release(info);
-+ vesafb_info = NULL;
-+ kfree(vbe_modes);
-+ vbe_modes = NULL;
-+ return err;
-+}
-+
-+int __init vesafb_init(void)
-+{
-+ int ret;
-+#ifndef MODULE
-+ char *option = NULL;
-+
-+ if (fb_get_options("vesafb", &option))
-+ return -ENODEV;
-+ vesafb_setup(option);
-+#endif
-+ ret = platform_driver_register(&vesafb_driver);
-+
-+ if (!ret) {
-+ vesafb_device = platform_device_alloc("vesafb", 0);
-+
-+ if (vesafb_device)
-+ ret = platform_device_add(vesafb_device);
-+ else
-+ ret = -ENOMEM;
-+
-+ if (ret) {
-+ platform_device_put(vesafb_device);
-+ platform_driver_unregister(&vesafb_driver);
-+ }
-+ }
-+ return ret;
-+}
-+
-+module_init(vesafb_init);
-+
-+#ifdef MODULE
-+void __exit vesafb_exit(void)
-+{
-+ char entry[16];
-+
-+ if (vesafb_info)
-+ unregister_framebuffer(vesafb_info);
-+
-+ platform_device_unregister(vesafb_device);
-+ platform_driver_unregister(&vesafb_driver);
-+
-+ if (vesafb_info) {
-+ struct vesafb_par *par = (struct vesafb_par*)vesafb_info->par;
-+
-+ sprintf(entry, "fb%d/modes", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ sprintf(entry, "fb%d/vbe_info", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ sprintf(entry, "fb%d", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ iounmap(vesafb_info->screen_base);
-+ release_mem_region(vesafb_info->fix.smem_start,
-+ par->mem_total);
-+ fb_dealloc_cmap(&vesafb_info->cmap);
-+ if (!list_empty(&vesafb_info->modelist))
-+ fb_destroy_modelist(&vesafb_info->modelist);
-+ fb_destroy_modedb(vesafb_info->monspecs.modedb);
-+ framebuffer_release(vesafb_info);
-+ }
-+
-+ if (vbe_modes != NULL)
-+ kfree(vbe_modes);
-+}
-+
-+module_exit(vesafb_exit);
-+
-+static inline int param_get_scroll(char *buffer, struct kernel_param *kp)
-+{
-+ return 0;
-+}
-+static inline int param_set_scroll(const char *val, struct kernel_param *kp)
-+{
-+ ypan = 0;
-+
-+ if (! strcmp(val, "redraw"))
-+ ypan = 0;
-+ else if (! strcmp(val, "ypan"))
-+ ypan = 1;
-+ else if (! strcmp(val, "ywrap"))
-+ ypan = 2;
-+
-+ return 0;
-+}
-+
-+#define param_check_scroll(name, p) __param_check(name, p, void);
-+
-+module_param_named(scroll, ypan, scroll, 0);
-+MODULE_PARM_DESC(scroll,"Scrolling mode, set to 'redraw', 'ypan' or 'ywrap'");
-+module_param_named(vgapal, pmi_setpal, invbool, 0);
-+MODULE_PARM_DESC(vgapal,"bool: set palette using VGA registers");
-+module_param_named(pmipal, pmi_setpal, bool, 0);
-+MODULE_PARM_DESC(pmipal,"bool: set palette using PMI calls");
-+module_param(mtrr, uint, 0);
-+MODULE_PARM_DESC(mtrr,"Memory Type Range Registers setting. Use 0 to disable.");
-+module_param(blank, bool, 1);
-+MODULE_PARM_DESC(blank,"bool: enable hardware blanking");
-+module_param(nocrtc, bool, 0);
-+MODULE_PARM_DESC(nocrtc,"bool: ignore CRTC timings when setting modes");
-+module_param(noedid, bool, 0);
-+MODULE_PARM_DESC(noedid,"bool: ignore EDID-provided monitor limits "
-+ "when setting modes");
-+module_param(gtf, bool, 0);
-+MODULE_PARM_DESC(gtf,"bool: force use of VESA GTF to calculate mode timings");
-+module_param(vram_remap, uint, 0);
-+MODULE_PARM_DESC(vram_remap,"Set amount of video memory to be used [MiB]");
-+module_param(vram_total, uint, 0);
-+MODULE_PARM_DESC(vram_total,"Set total amount of video memoery [MiB]");
-+module_param(maxclk, ushort, 0);
-+MODULE_PARM_DESC(maxclk,"Maximum pixelclock [MHz], overrides EDID data");
-+module_param(maxhf, ushort, 0);
-+MODULE_PARM_DESC(maxhf,"Maximum horizontal frequency [kHz], "
-+ "overrides EDID data");
-+module_param(maxvf, ushort, 0);
-+MODULE_PARM_DESC(maxvf,"Maximum vertical frequency [Hz], "
-+ "overrides EDID data");
-+module_param_named(mode, mode_option, charp, 0);
-+MODULE_PARM_DESC(mode, "Specify resolution as "
-+ "\"<xres>x<yres>[-<bpp>][@<refresh>]\"");
-+module_param(vbemode, ushort, 0);
-+MODULE_PARM_DESC(vbemode,"VBE mode number to set, overrides 'mode' setting");
-+
-+#endif /* MODULE */
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Michal Januszewski");
-+MODULE_DESCRIPTION("Framebuffer driver for VBE2.0+ compliant graphics boards");
-+
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 4463735..7283e48 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1390,6 +1390,8 @@ extern void mmput(struct mm_struct *);
- extern struct mm_struct *get_task_mm(struct task_struct *task);
- /* Remove the current tasks stale references to the old mm_struct */
- extern void mm_release(struct task_struct *, struct mm_struct *);
-+/* Create a new mm for a kernel thread */
-+extern int set_new_mm(void);
-
- extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *);
- extern void flush_thread(void);
-diff --git a/include/video/vesa.h b/include/video/vesa.h
-new file mode 100644
-index 0000000..bb5abcf
---- /dev/null
-+++ b/include/video/vesa.h
-@@ -0,0 +1,150 @@
-+#if 0
-+#define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , \
-+ ## args)
-+#else
-+#define DPRINTK(fmt, args...)
-+#endif
-+
-+#define p_crtc(arg) ((struct vesafb_crtc_ib*)(arg))
-+#define p_vbe(arg) ((struct vesafb_vbe_ib*)(arg))
-+#define p_mode(arg) ((struct vesafb_mode_ib*)(arg))
-+
-+struct vesafb_task {
-+ u8 flags;
-+ void *buf;
-+ int buf_len;
-+ struct vm86_regs regs;
-+ struct list_head node;
-+ struct completion done;
-+};
-+
-+/* Vesafb task flags and masks */
-+#define TF_CALL 0x00
-+#define TF_EXIT 0x01
-+#define TF_GETVBEIB 0x02
-+#define TF_BUF_DI 0x04
-+#define TF_BUF_BX 0x08
-+#define TF_RETURN_BUF 0x10
-+
-+/* Macros and functions for manipulating vesafb tasks */
-+#define vesafb_create_task(task) \
-+do { \
-+ task = kmalloc(sizeof(struct vesafb_task), GFP_ATOMIC); \
-+ if (task) \
-+ memset(task, 0, sizeof(struct vesafb_task)); \
-+ init_completion(&task->done); \
-+} while (0)
-+
-+#define vesafb_wait_for_task(task) wait_for_completion(&task->done);
-+#define vesafb_reset_task(task) init_completion(&task->done);
-+int vesafb_queue_task(struct vesafb_task *task);
-+
-+/* Functions for controlling the vesafb thread */
-+int vesafb_wait_for_thread(void);
-+
-+#define VBE_CAP_CAN_SWITCH_DAC 0x01
-+#define VBE_CAP_VGACOMPAT 0x02
-+
-+/* This struct is 512 bytes long */
-+struct vesafb_vbe_ib {
-+ char vbe_signature[4];
-+ u16 vbe_version;
-+ u32 oem_string_ptr;
-+ u32 capabilities;
-+ u32 mode_list_ptr;
-+ u16 total_memory;
-+ u16 oem_software_rev;
-+ u32 oem_vendor_name_ptr;
-+ u32 oem_product_name_ptr;
-+ u32 oem_product_rev_ptr;
-+ u8 reserved[222];
-+ char oem_data[256];
-+} __attribute__ ((packed));
-+
-+struct vesafb_crtc_ib {
-+ u16 horiz_total;
-+ u16 horiz_start;
-+ u16 horiz_end;
-+ u16 vert_total;
-+ u16 vert_start;
-+ u16 vert_end;
-+ u8 flags;
-+ u32 pixel_clock;
-+ u16 refresh_rate;
-+ u8 reserved[40];
-+} __attribute__ ((packed));
-+
-+#define VBE_MODE_VGACOMPAT 0x20
-+
-+struct vesafb_mode_ib {
-+ /* for all VBE revisions */
-+ u16 mode_attr;
-+ u8 winA_attr;
-+ u8 winB_attr;
-+ u16 win_granularity;
-+ u16 win_size;
-+ u16 winA_seg;
-+ u16 winB_seg;
-+ u32 win_func_ptr;
-+ u16 bytes_per_scan_line;
-+
-+ /* for VBE 1.2+ */
-+ u16 x_res;
-+ u16 y_res;
-+ u8 x_char_size;
-+ u8 y_char_size;
-+ u8 planes;
-+ u8 bits_per_pixel;
-+ u8 banks;
-+ u8 memory_model;
-+ u8 bank_size;
-+ u8 image_pages;
-+ u8 reserved1;
-+
-+ /* Direct color fields for direct/6 and YUV/7 memory models. */
-+ /* Offsets are bit positions of lsb in the mask. */
-+ u8 red_len;
-+ u8 red_off;
-+ u8 green_len;
-+ u8 green_off;
-+ u8 blue_len;
-+ u8 blue_off;
-+ u8 rsvd_len;
-+ u8 rsvd_off;
-+ u8 direct_color_info; /* direct color mode attributes */
-+
-+ /* for VBE 2.0+ */
-+ u32 phys_base_ptr;
-+ u8 reserved2[6];
-+
-+ /* for VBE 3.0+ */
-+ u16 lin_bytes_per_scan_line;
-+ u8 bnk_image_pages;
-+ u8 lin_image_pages;
-+ u8 lin_red_len;
-+ u8 lin_red_off;
-+ u8 lin_green_len;
-+ u8 lin_green_off;
-+ u8 lin_blue_len;
-+ u8 lin_blue_off;
-+ u8 lin_rsvd_len;
-+ u8 lin_rsvd_off;
-+ u32 max_pixel_clock;
-+ u16 mode_id;
-+ u8 depth;
-+} __attribute__ ((packed));
-+
-+struct vesafb_pal_entry {
-+ u_char blue, green, red, pad;
-+} __attribute__ ((packed));
-+
-+struct vesafb_par {
-+ u8 *vbe_state;
-+ int vbe_state_size;
-+ atomic_t ref_count;
-+
-+ u32 mem_total;
-+ int mode_idx;
-+ struct vesafb_crtc_ib crtc;
-+};
-+
-diff --git a/kernel/fork.c b/kernel/fork.c
-index fc723e5..dc8f93b 100644
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -100,6 +100,7 @@ struct kmem_cache *fs_cachep;
-
- /* SLAB cache for vm_area_struct structures */
- struct kmem_cache *vm_area_cachep;
-+EXPORT_SYMBOL_GPL(vm_area_cachep);
-
- /* SLAB cache for mm_struct structures (tsk->mm) */
- static struct kmem_cache *mm_cachep;
-@@ -399,6 +400,40 @@ void mmput(struct mm_struct *mm)
- EXPORT_SYMBOL_GPL(mmput);
-
- /**
-+ * set_new_mm - allocate, init and activate a new mm for a kernel thread
-+ */
-+int set_new_mm(void)
-+{
-+ struct mm_struct *mm;
-+ struct task_struct *tsk = current;
-+ struct mm_struct *active_mm;
-+
-+ mm = mm_alloc();
-+ if (!mm)
-+ goto fail_nomem;
-+ if (init_new_context(current,mm))
-+ goto fail_nocontext;
-+
-+ task_lock(tsk);
-+ tsk->flags |= PF_BORROWED_MM;
-+ active_mm = tsk->active_mm;
-+ current->mm = mm;
-+ current->active_mm = mm;
-+ activate_mm(active_mm, mm);
-+ task_unlock(current);
-+
-+ /* Drop the previous active_mm */
-+ mmdrop(active_mm);
-+ return 0;
-+
-+fail_nocontext:
-+ mmdrop(mm);
-+fail_nomem:
-+ return -EINVAL;
-+}
-+EXPORT_SYMBOL_GPL(set_new_mm);
-+
-+/**
- * get_task_mm - acquire a reference to the task's mm
- *
- * Returns %NULL if the task has no mm. Checks PF_BORROWED_MM (meaning
-diff --git a/mm/memory.c b/mm/memory.c
-index 563792f..a9519ea 100644
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -1193,6 +1193,7 @@ int zeromap_page_range(struct vm_area_struct *vma,
- } while (pgd++, addr = next, addr != end);
- return err;
- }
-+EXPORT_SYMBOL_GPL(zeromap_page_range);
-
- pte_t * fastcall get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl)
- {
-diff --git a/mm/mmap.c b/mm/mmap.c
-index 9717337..6fa5b1c 100644
---- a/mm/mmap.c
-+++ b/mm/mmap.c
-@@ -2024,6 +2024,7 @@ int insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma)
- vma_link(mm, vma, prev, rb_link, rb_parent);
- return 0;
- }
-+EXPORT_SYMBOL_GPL(insert_vm_struct);
-
- /*
- * Copy the vma structure to a new location in the same mm,
diff --git a/packages/linux/linux-rp-2.6.20/wm97xx-lcdnoise-r0.patch b/packages/linux/linux-rp-2.6.20/wm97xx-lcdnoise-r0.patch
deleted file mode 100644
index 191de3af22..0000000000
--- a/packages/linux/linux-rp-2.6.20/wm97xx-lcdnoise-r0.patch
+++ /dev/null
@@ -1,208 +0,0 @@
-Index: linux-tosa/drivers/input/touchscreen/wm9712.c
-===================================================================
---- linux-tosa.orig/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:50.923275896 +0100
-@@ -1,7 +1,7 @@
- /*
- * wm9712.c -- Codec driver for Wolfson WM9712 AC97 Codecs.
- *
-- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
- * Author: Liam Girdwood
- * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
- * Parts Copyright : Ian Molton <spyro@f2s.com>
-@@ -13,6 +13,12 @@
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
-+ * Revision history
-+ * 4th Jul 2005 Initial version.
-+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
-+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
-+ * touchscreen interference.
-+ *
- */
-
- #include <linux/module.h>
-@@ -28,6 +34,10 @@
- #define WM9705_VERSION "0.60"
- #define DEFAULT_PRESSURE 0xb0c0
-
-+#define CCNT(a) asm volatile ("mrc p14, 0, %0, C1, C1, 0" : "=r"(a))
-+#define CCNT_ON() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+#define CCNT_OFF() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+
- /*
- * Debug
- */
-@@ -243,6 +253,36 @@
- return wm->dig[2] & WM9712_PDEN;
- }
-
-+
-+#ifdef CONFIG_MACH_TOSA
-+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
-+ * before sampling the Y axis of the touchscreen */
-+static inline void wm9712_lcd_sync_on(struct wm97xx* wm, int adcsel) {
-+ unsigned long timer1 = 0, timer2 = 0, wait_time = 0;
-+ if (adcsel == WM97XX_ADCSEL_Y) {
-+ wait_time = wm97xx_calc_lcd_waittime(wm);
-+
-+ CCNT_ON();
-+
-+ if (wait_time) {
-+ /* wait for LCD rising edge */
-+ wm_machinfo->wait_hsync();
-+ /* get clock */
-+ CCNT(timer1);
-+ CCNT(timer2);
-+
-+ while ((timer2 - timer1) < wait_time) {
-+ CCNT(timer2);
-+ }
-+ }
-+ }
-+}
-+
-+static inline void wm9712_lcd_sync_off(void) {
-+ CCNT_OFF();
-+}
-+#endif
-+
- /*
- * Read a sample from the WM9712 adc in polling mode.
- */
-@@ -260,6 +300,9 @@
- /* set up digitiser */
- if (adcsel & 0x8000)
- adcsel = ((adcsel & 0x7fff) + 3) << 12;
-+ #ifdef CONFIG_MACH_TOSA
-+ wm9712_lcd_sync_on(wm, adcsel);
-+ #endif
- wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, adcsel | WM97XX_POLL | WM97XX_DELAY(delay));
-
- /* wait 3 AC97 time slots + delay for conversion */
-@@ -282,6 +325,10 @@
-
- *sample = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-
-+ #ifdef CONFIG_MACH_TOSA
-+ wm9712_lcd_sync_off();
-+ #endif
-+
- /* check we have correct sample */
- if ((*sample & WM97XX_ADCSEL_MASK) != adcsel) {
- dbg ("adc wrong sample, read %x got %x", adcsel,
-@@ -303,11 +350,12 @@
- static int wm9712_poll_touch(struct wm97xx* wm, struct wm97xx_data *data)
- {
- int rc;
--
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_X, &data->x)) != RC_VALID)
- return rc;
-+
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_Y, &data->y)) != RC_VALID)
- return rc;
-+
- if (pil && !five_wire) {
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_PRES, &data->p)) != RC_VALID)
- return rc;
-Index: linux-tosa/drivers/input/touchscreen/wm97xx-core.c
-===================================================================
---- linux-tosa.orig/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:50.924275744 +0100
-@@ -2,7 +2,7 @@
- * wm97xx-core.c -- Touch screen driver core for Wolfson WM9705, WM9712
- * and WM9713 AC97 Codecs.
- *
-- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
- * Author: Liam Girdwood
- * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
- * Parts Copyright : Ian Molton <spyro@f2s.com>
-@@ -67,6 +67,9 @@
- * GPIOs) and 2.6 power management.
- * 29th Nov 2004 Added WM9713 support.
- * 4th Jul 2005 Moved codec specific code out to seperate files.
-+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
-+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
-+ * touchscreen interference.
- */
-
- #include <linux/module.h>
-@@ -94,6 +97,7 @@
- static DECLARE_MUTEX(gpio_sem);
- static LIST_HEAD(wm97xx_misc_list);
- static struct wm97xx* wm_codec = NULL;
-+struct wm97xx_machinfo *wm_machinfo;
-
- /*
- * WM97xx - enable/disable AUX ADC sysfs
-@@ -832,6 +836,23 @@
- mdev->remove(wm_codec);
- }
-
-+#ifdef CONFIG_MACH_TOSA
-+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
-+ * before sampling the Y axis of the touchscreen */
-+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm) {
-+ unsigned long hsync_time = wm_machinfo->get_hsync_time();
-+ return hsync_time;
-+}
-+
-+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo) {
-+ wm_machinfo = machinfo;
-+}
-+
-+void wm97xx_unset_machinfo() {
-+ wm_machinfo = NULL;
-+}
-+#endif
-+
- static struct device_driver wm97xx_driver = {
- .name = "ac97",
- .bus = &ac97_bus_type,
-@@ -861,6 +882,9 @@
- EXPORT_SYMBOL_GPL(wm97xx_reg_write);
- EXPORT_SYMBOL_GPL(wm97xx_register_misc_dev);
- EXPORT_SYMBOL_GPL(wm97xx_unregister_misc_dev);
-+EXPORT_SYMBOL_GPL(wm97xx_calc_lcd_waittime);
-+EXPORT_SYMBOL_GPL(wm97xx_set_machinfo);
-+EXPORT_SYMBOL_GPL(wm97xx_unset_machinfo);
-
- module_init(wm97xx_init);
- module_exit(wm97xx_exit);
-Index: linux-tosa/include/linux/wm97xx.h
-===================================================================
---- linux-tosa.orig/include/linux/wm97xx.h 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/include/linux/wm97xx.h 2006-08-29 16:52:50.924275744 +0100
-@@ -207,6 +207,7 @@
-
- struct wm97xx;
- extern struct wm97xx_codec_drv wm97xx_codec;
-+extern struct wm97xx_machinfo *wm_machinfo;
-
- /*
- * Codec driver interface - allows mapping to WM9705/12/13 and newer codecs
-@@ -253,6 +254,11 @@
- struct list_head list;
- };
-
-+struct wm97xx_machinfo {
-+ unsigned long (*get_hsync_time)(void);
-+ void (*wait_hsync)(void);
-+};
-+
- int wm97xx_register_misc_dev(struct wm97xx_misc_dev* mdev);
- void wm97xx_unregister_misc_dev(struct wm97xx_misc_dev* mdev);
-
-@@ -281,4 +287,9 @@
- int wm97xx_acc_startup(struct wm97xx* wm);
- void wm97xx_acc_shutdown(struct wm97xx* wm);
-
-+
-+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm);
-+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo);
-+void wm97xx_unset_machinfo(void);
-+
- #endif
diff --git a/packages/linux/linux-rp-2.6.21/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.21/connectplus-remove-ide-HACK.patch
deleted file mode 100644
index 4414b21191..0000000000
--- a/packages/linux/linux-rp-2.6.21/connectplus-remove-ide-HACK.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: linux-2.6.13/drivers/ide/legacy/ide-cs.c
-===================================================================
---- linux-2.6.13.orig/drivers/ide/legacy/ide-cs.c 2005-09-01 22:43:46.000000000 +0100
-+++ linux-2.6.13/drivers/ide/legacy/ide-cs.c 2005-09-01 22:45:46.000000000 +0100
-@@ -488,7 +488,6 @@
- PCMCIA_DEVICE_PROD_ID123("KODAK Picture Card ", "KODAK ", "V100K", 0x94a0d8f3, 0xe4fc3ea0, 0xe5e7eed4),
- PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
- PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
-- PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
- PCMCIA_DEVICE_NULL,
- };
- MODULE_DEVICE_TABLE(pcmcia, ide_ids);
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-akita b/packages/linux/linux-rp-2.6.21/defconfig-akita
deleted file mode 100644
index cc4cc782db..0000000000
--- a/packages/linux/linux-rp-2.6.21/defconfig-akita
+++ /dev/null
@@ -1,1744 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Thu Mar 29 12:24:24 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-
-#
-# Soc Platforms
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-CONFIG_SND_PXA2xx_SOC_SPITZ=m
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_SPITZ=m
-# CONFIG_SND_PXA2XX_SOC_MAGICIAN is not set
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-CONFIG_SND_SOC_WM8750=m
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8976 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-CONFIG_SHARPSL_RC=m
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-bootcdx86 b/packages/linux/linux-rp-2.6.21/defconfig-bootcdx86
deleted file mode 100644
index d439d89813..0000000000
--- a/packages/linux/linux-rp-2.6.21/defconfig-bootcdx86
+++ /dev/null
@@ -1,1606 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21
-# Mon Jun 11 12:01:43 2007
-#
-CONFIG_X86_32=y
-CONFIG_GENERIC_TIME=y
-CONFIG_CLOCKSOURCE_WATCHDOG=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_SEMAPHORE_SLEEPERS=y
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_ZONE_DMA=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_DMI=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_CPUSETS is not set
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-CONFIG_IOSCHED_CFQ=y
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_CFQ=y
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
-
-#
-# Processor type and features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_SMP=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_ES7000 is not set
-# CONFIG_PARAVIRT is not set
-# CONFIG_M386 is not set
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-CONFIG_MPENTIUMII=y
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MCORE2 is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-CONFIG_X86_CMPXCHG64=y
-CONFIG_X86_GOOD_APIC=y
-CONFIG_X86_INTEL_USERCOPY=y
-CONFIG_X86_USE_PPRO_CHECKSUM=y
-CONFIG_X86_TSC=y
-CONFIG_HPET_TIMER=y
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_NONFATAL=y
-CONFIG_X86_MCE_P4THERMAL=y
-CONFIG_VM86=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_3G_OPT is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-CONFIG_IRQBALANCE=y
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_HZ_300 is not set
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=250
-# CONFIG_KEXEC is not set
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_RELOCATABLE is not set
-CONFIG_PHYSICAL_ALIGN=0x100000
-# CONFIG_HOTPLUG_CPU is not set
-# CONFIG_COMPAT_VDSO is not set
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_PROCFS=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_FAN=y
-# CONFIG_ACPI_DOCK is not set
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_ASUS is not set
-# CONFIG_ACPI_IBM is not set
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-CONFIG_PCIEPORTBUS=y
-CONFIG_PCIEAER=y
-CONFIG_PCI_MSI=y
-CONFIG_HT_IRQ=y
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-CONFIG_K8_NB=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=65536
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# Misc devices
-#
-# CONFIG_IBM_ASM is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_TIFM_CORE is not set
-# CONFIG_SONY_LAPTOP is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA 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_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_SEAGATE is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_SRP is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Macintosh device drivers
-#
-# CONFIG_MAC_EMUMOUSEBTN is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-CONFIG_NET_VENDOR_3COM=y
-# CONFIG_EL1 is not set
-# CONFIG_EL2 is not set
-# CONFIG_ELPLUS is not set
-# CONFIG_EL16 is not set
-# CONFIG_EL3 is not set
-# CONFIG_3C515 is not set
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-CONFIG_LANCE=m
-CONFIG_NET_VENDOR_SMC=y
-CONFIG_WD80x3=m
-CONFIG_ULTRA=m
-CONFIG_SMC9194=m
-# CONFIG_NET_VENDOR_RACAL is not set
-
-#
-# Tulip family network device support
-#
-CONFIG_NET_TULIP=y
-# CONFIG_DE2104X is not set
-CONFIG_TULIP=m
-CONFIG_TULIP_MWI=y
-CONFIG_TULIP_MMIO=y
-CONFIG_TULIP_NAPI=y
-CONFIG_TULIP_NAPI_HW_MITIGATION=y
-CONFIG_DE4X5=m
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_ULI526X=m
-CONFIG_AT1700=m
-CONFIG_DEPCA=m
-CONFIG_HP100=m
-CONFIG_NET_ISA=y
-# CONFIG_E2100 is not set
-# CONFIG_EWRK3 is not set
-# CONFIG_EEXPRESS is not set
-# CONFIG_EEXPRESS_PRO is not set
-# CONFIG_HPLAN_PLUS is not set
-# CONFIG_HPLAN is not set
-# CONFIG_LP486E is not set
-# CONFIG_ETH16I is not set
-CONFIG_NE2000=y
-# CONFIG_ZNET is not set
-# CONFIG_SEEQ8005 is not set
-CONFIG_NET_PCI=y
-CONFIG_PCNET32=m
-CONFIG_PCNET32_NAPI=y
-CONFIG_AMD8111_ETH=m
-CONFIG_AMD8111E_NAPI=y
-CONFIG_ADAPTEC_STARFIRE=m
-CONFIG_ADAPTEC_STARFIRE_NAPI=y
-CONFIG_AC3200=m
-CONFIG_APRICOT=m
-CONFIG_B44=m
-CONFIG_FORCEDETH=m
-CONFIG_FORCEDETH_NAPI=y
-CONFIG_CS89x0=m
-CONFIG_DGRS=m
-CONFIG_EEPRO100=m
-CONFIG_E100=m
-CONFIG_FEALNX=m
-CONFIG_NATSEMI=m
-CONFIG_NE2K_PCI=y
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-CONFIG_8139TOO_PIO=y
-CONFIG_8139TOO_TUNE_TWISTER=y
-CONFIG_8139TOO_8129=y
-# CONFIG_8139_OLD_RX_RESET is not set
-CONFIG_SIS900=m
-CONFIG_EPIC100=m
-CONFIG_SUNDANCE=m
-CONFIG_SUNDANCE_MMIO=y
-CONFIG_TLAN=m
-CONFIG_VIA_RHINE=m
-CONFIG_VIA_RHINE_MMIO=y
-CONFIG_VIA_RHINE_NAPI=y
-CONFIG_SC92031=m
-
-#
-# Ethernet (1000 Mbit)
-#
-CONFIG_ACENIC=m
-CONFIG_ACENIC_OMIT_TIGON_I=y
-CONFIG_DL2K=m
-CONFIG_E1000=m
-CONFIG_E1000_NAPI=y
-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
-CONFIG_NS83820=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_R8169=m
-CONFIG_R8169_NAPI=y
-CONFIG_SIS190=m
-CONFIG_SKGE=m
-CONFIG_SKY2=m
-CONFIG_SK98LIN=m
-CONFIG_VIA_VELOCITY=m
-CONFIG_TIGON3=m
-CONFIG_BNX2=m
-CONFIG_QLA3XXX=m
-CONFIG_ATL1=m
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_CHELSIO_T3 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NETXEN_NIC is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-CONFIG_AGP=m
-CONFIG_AGP_ALI=m
-CONFIG_AGP_ATI=m
-CONFIG_AGP_AMD=m
-CONFIG_AGP_AMD64=m
-CONFIG_AGP_INTEL=m
-CONFIG_AGP_NVIDIA=m
-CONFIG_AGP_SIS=m
-CONFIG_AGP_SWORKS=m
-CONFIG_AGP_VIA=m
-CONFIG_AGP_EFFICEON=m
-# CONFIG_DRM is not set
-# CONFIG_DRM_I830 is not set
-# CONFIG_DRM_I915 is not set
-# CONFIG_MWAVE is not set
-# CONFIG_PC8736x_GPIO is not set
-# CONFIG_NSC_GPIO is not set
-# CONFIG_CS5535_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
-# CONFIG_FB_VESA_STD is not set
-CONFIG_FB_VESA_TNG=y
-CONFIG_FB_VESA_DEFAULT_MODE="640x480-16@60"
-CONFIG_VIDEO_SELECT=y
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_I810 is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_S3 is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_CYBLA is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ISA devices
-#
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB 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_MIRO is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_WAVEFRONT is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5535AUDIO is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGODJ 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_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR 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_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-CONFIG_SND_AC97_POWER_SAVE=y
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_USX2Y is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=y
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-CONFIG_USB_SUSPEND=y
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_SPLIT_ISO=y
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-# CONFIG_USB_GTCO is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_MON is not set
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-# CONFIG_EDAC is not set
-
-#
-# Real Time Clock
-#
-# CONFIG_RTC_CLASS is not set
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# Auxiliary Display support
-#
-
-#
-# Virtualization
-#
-# CONFIG_KVM is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf-8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
-# CONFIG_KPROBES is not set
-
-#
-# Kernel hacking
-#
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=15
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_EARLY_PRINTK=y
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-CONFIG_DOUBLEFAULT=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_TWOFISH_586 is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_AES_586 is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-CONFIG_CRYPTO_DEV_PADLOCK=m
-CONFIG_CRYPTO_DEV_PADLOCK_AES=m
-CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
-CONFIG_CRYPTO_DEV_GEODE=m
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_AUDIT_GENERIC=y
-# CONFIG_LZO is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_KTIME_SCALAR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-c7x0 b/packages/linux/linux-rp-2.6.21/defconfig-c7x0
deleted file mode 100644
index 1ff275cee5..0000000000
--- a/packages/linux/linux-rp-2.6.21/defconfig-c7x0
+++ /dev/null
@@ -1,1787 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Thu Mar 29 13:32:11 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-CONFIG_MACH_CORGI=y
-CONFIG_MACH_SHEPHERD=y
-CONFIG_MACH_HUSKY=y
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-CONFIG_PXA_SHARP_C7xx=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_CPU_FREQ_PXA25x=y
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_KEYBOARD_CORGI=y
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_CORGI=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-CONFIG_VIDEO_USBVIDEO=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-CONFIG_USB_DSBR=m
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MBX is not set
-CONFIG_FB_W100=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_CORGI=m
-# CONFIG_SND_PXA2XX_SOC_MAGICIAN is not set
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8976 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-collie b/packages/linux/linux-rp-2.6.21/defconfig-collie
deleted file mode 100644
index 422ed94df3..0000000000
--- a/packages/linux/linux-rp-2.6.21/defconfig-collie
+++ /dev/null
@@ -1,1739 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20.4
-# Fri Apr 6 23:20:59 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-# CONFIG_ELF_CORE is not set
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_COLLIE=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-CONFIG_PCMCIA_SA1100=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-CONFIG_NODES_SHIFT=2
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_USB_IRDA=m
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_SA1100_FIR=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-CONFIG_MTD_OBSOLETE_CHIPS=y
-CONFIG_MTD_SHARP=y
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SA1100=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_ARLAN is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-# CONFIG_SPI_BITBANG is not set
-CONFIG_SPI_LOCOMO=m
-
-#
-# SPI Protocol Masters
-#
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_MCP=y
-CONFIG_MCP_SA11X0=y
-CONFIG_MCP_UCB1200=y
-CONFIG_MCP_UCB1200_TS=m
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=m
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK 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_USB_DSBR is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-CONFIG_FB_SA1100=y
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-CONFIG_USB_NET_CDC_SUBSET=m
-# CONFIG_USB_ALI_M5632 is not set
-# CONFIG_USB_AN2720 is not set
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_EPSON2888 is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-CONFIG_MMC_DEBUG=y
-CONFIG_MMC_BLOCK=m
-# CONFIG_MMC_TIFM_SD is not set
-CONFIG_MMC_SPI=m
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=m
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=m
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=m
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-hx2000 b/packages/linux/linux-rp-2.6.21/defconfig-hx2000
deleted file mode 100644
index b962caa27c..0000000000
--- a/packages/linux/linux-rp-2.6.21/defconfig-hx2000
+++ /dev/null
@@ -1,1166 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20-rc2
-# Mon Jan 1 01:49:04 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_MACH_HX2750=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-CONFIG_PXA_KEYS=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-CONFIG_PM_DEBUG=y
-# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_TOUCHSCREEN_TSC2101=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-CONFIG_MFD_TSC2101=y
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_HX2750=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-poodle b/packages/linux/linux-rp-2.6.21/defconfig-poodle
deleted file mode 100644
index fa7b83df77..0000000000
--- a/packages/linux/linux-rp-2.6.21/defconfig-poodle
+++ /dev/null
@@ -1,1657 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Jul 10 23:38:56 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-CONFIG_MACH_POODLE=y
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_EM28XX is not set
-CONFIG_USB_DSBR=m
-CONFIG_VIDEO_USBVIDEO=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-CONFIG_LOGO_OZ240_CLUT224=y
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8731 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8974 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_MAINSTONE_BASEBAND is not set
-# CONFIG_SND_MAINSTONE_BLUETOOTH is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_POODLE=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-qemuarm b/packages/linux/linux-rp-2.6.21/defconfig-qemuarm
deleted file mode 100644
index 35cf3f5b17..0000000000
--- a/packages/linux/linux-rp-2.6.21/defconfig-qemuarm
+++ /dev/null
@@ -1,1194 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Sat Aug 26 22:45:02 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-CONFIG_ARCH_VERSATILE=y
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Versatile platform type
-#
-CONFIG_ARCH_VERSATILE_PB=y
-# CONFIG_MACH_VERSATILE_AB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-# CONFIG_KEXEC is not set
-CONFIG_ARM_VIC=y
-CONFIG_ICST307=y
-
-#
-# Bus support
-#
-CONFIG_ARM_AMBA=y
-CONFIG_PCI=y
-# CONFIG_PCI_DEBUG is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_LEDS=y
-CONFIG_LEDS_TIMER=y
-CONFIG_LEDS_CPU=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_VFP=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_APM is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_AFS_PARTS=y
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_GEOMETRY is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=51200
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=y
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-CONFIG_SCSI_SYM53C8XX_2=y
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-CONFIG_SCSI_SYM53C8XX_MMIO=y
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_SMC91X=y
-# CONFIG_DM9000 is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-CONFIG_SERIO_AMBAKMI=y
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_AMBA_PL011=y
-CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-# CONFIG_LEDS_CLASS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-# CONFIG_LEDS_TRIGGERS is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-CONFIG_FB_ARMCLCD=y
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_UHCI_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFSD_TCP is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=y
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-# 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_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_ISO8859_1 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_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-qemux86 b/packages/linux/linux-rp-2.6.21/defconfig-qemux86
deleted file mode 100644
index 0d26596d78..0000000000
--- a/packages/linux/linux-rp-2.6.21/defconfig-qemux86
+++ /dev/null
@@ -1,1568 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Oct 16 19:42:42 2006
-#
-CONFIG_X86_32=y
-CONFIG_SEMAPHORE_SLEEPERS=y
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_DMI=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_CPUSETS is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_VM86=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_LBD=y
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# Processor type and features
-#
-CONFIG_SMP=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_ES7000 is not set
-CONFIG_M386=y
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_X86_PPRO_FENCE=y
-CONFIG_X86_F00F_BUG=y
-CONFIG_X86_INTEL_USERCOPY=y
-# CONFIG_HPET_TIMER is not set
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_NONFATAL=y
-CONFIG_X86_MCE_P4THERMAL=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-CONFIG_IRQBALANCE=y
-# CONFIG_REGPARM is not set
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=250
-# CONFIG_KEXEC is not set
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_HOTPLUG_CPU is not set
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_VIDEO=m
-# CONFIG_ACPI_HOTKEY is not set
-CONFIG_ACPI_FAN=y
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_ASUS is not set
-CONFIG_ACPI_IBM=m
-# CONFIG_ACPI_IBM_DOCK is not set
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-# CONFIG_PCIEPORTBUS is not set
-# CONFIG_PCI_MSI is not set
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=y
-CONFIG_BINFMT_MISC=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=y
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=y
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=y
-CONFIG_PARPORT_PC=y
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=y
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=51200
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-CONFIG_BLK_DEV_IDECD=y
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-CONFIG_BLK_DEV_CMD640=y
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_RZ1000=y
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-# CONFIG_BLK_DEV_AEC62XX 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_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 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_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-CONFIG_BLK_DEV_PIIX=y
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-CONFIG_SCSI_DPT_I2O=m
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-CONFIG_SCSI_SATA=y
-# CONFIG_SCSI_SATA_AHCI is not set
-# CONFIG_SCSI_SATA_SVW is not set
-CONFIG_SCSI_ATA_PIIX=y
-# CONFIG_SCSI_SATA_MV is not set
-# CONFIG_SCSI_SATA_NV is not set
-# CONFIG_SCSI_PDC_ADMA is not set
-# CONFIG_SCSI_SATA_QSTOR is not set
-# CONFIG_SCSI_SATA_PROMISE is not set
-CONFIG_SCSI_SATA_SX4=m
-# CONFIG_SCSI_SATA_SIL is not set
-# CONFIG_SCSI_SATA_SIL24 is not set
-CONFIG_SCSI_SATA_SIS=m
-# CONFIG_SCSI_SATA_ULI is not set
-# CONFIG_SCSI_SATA_VIA is not set
-# CONFIG_SCSI_SATA_VITESSE is not set
-CONFIG_SCSI_SATA_INTEL_COMBINED=y
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA 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_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-CONFIG_SCSI_IPR=m
-# CONFIG_SCSI_IPR_TRACE is not set
-# CONFIG_SCSI_IPR_DUMP is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_IEEE1394=y
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_OUI_DB is not set
-# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
-# CONFIG_IEEE1394_EXPORT_FULL_API is not set
-
-#
-# Device Drivers
-#
-
-#
-# Texas Instruments PCILynx requires I2C
-#
-CONFIG_IEEE1394_OHCI1394=y
-
-#
-# Protocol Drivers
-#
-# CONFIG_IEEE1394_VIDEO1394 is not set
-# CONFIG_IEEE1394_SBP2 is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-# CONFIG_IEEE1394_DV1394 is not set
-CONFIG_IEEE1394_RAWIO=y
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_LANCE is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-CONFIG_NET_ISA=y
-# CONFIG_E2100 is not set
-# CONFIG_EWRK3 is not set
-# CONFIG_EEXPRESS is not set
-# CONFIG_EEXPRESS_PRO is not set
-# CONFIG_HPLAN_PLUS is not set
-# CONFIG_HPLAN is not set
-# CONFIG_LP486E is not set
-# CONFIG_ETH16I is not set
-CONFIG_NE2000=y
-# CONFIG_ZNET is not set
-# CONFIG_SEEQ8005 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_AC3200 is not set
-# CONFIG_APRICOT is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_CS89x0 is not set
-# CONFIG_DGRS is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-CONFIG_NE2K_PCI=y
-# CONFIG_8139CP is not set
-CONFIG_8139TOO=y
-CONFIG_8139TOO_PIO=y
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_NET_POCKET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-CONFIG_S2IO=m
-# CONFIG_S2IO_NAPI is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-CONFIG_PRINTER=y
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
-# CONFIG_TIPAR is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-CONFIG_AGP=y
-# CONFIG_AGP_ALI is not set
-# CONFIG_AGP_ATI is not set
-# CONFIG_AGP_AMD is not set
-# CONFIG_AGP_AMD64 is not set
-CONFIG_AGP_INTEL=y
-# CONFIG_AGP_NVIDIA is not set
-# CONFIG_AGP_SIS is not set
-# CONFIG_AGP_SWORKS is not set
-# CONFIG_AGP_VIA is not set
-# CONFIG_AGP_EFFICEON is not set
-CONFIG_DRM=y
-# CONFIG_DRM_TDFX is not set
-# CONFIG_DRM_R128 is not set
-# CONFIG_DRM_RADEON is not set
-# CONFIG_DRM_I810 is not set
-# CONFIG_DRM_I830 is not set
-# CONFIG_DRM_I915 is not set
-# CONFIG_DRM_MGA is not set
-# CONFIG_DRM_SIS is not set
-# CONFIG_DRM_VIA is not set
-# CONFIG_DRM_SAVAGE is not set
-# CONFIG_MWAVE is not set
-# CONFIG_CS5535_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-# CONFIG_IBM_ASM is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
-# CONFIG_FB_VESA_STD is not set
-CONFIG_FB_VESA_TNG=y
-CONFIG_FB_VESA_DEFAULT_MODE="640x480-32@60"
-CONFIG_VIDEO_SELECT=y
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_I810 is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_CYBLA is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=y
-CONFIG_SND_AC97_BUS=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ISA devices
-#
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB 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_MIRO is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_WAVEFRONT is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5535AUDIO 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_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR 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_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_USX2Y is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGETKIT is not set
-CONFIG_USB_PHIDGETSERVO=m
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-# CONFIG_EDAC is not set
-
-#
-# Real Time Clock
-#
-# CONFIG_RTC_CLASS is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-CONFIG_UDF_FS=y
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-# CONFIG_NFS_V3 is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-# CONFIG_NFSD_V3 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
-# CONFIG_KPROBES is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=15
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_UNWIND_INFO is not set
-CONFIG_EARLY_PRINTK=y
-CONFIG_STACK_BACKTRACE_COLS=2
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-CONFIG_DOUBLEFAULT=y
-CONFIG_TIMER_STATS=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_KTIME_SCALAR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-spitz b/packages/linux/linux-rp-2.6.21/defconfig-spitz
deleted file mode 100644
index ce9b90066b..0000000000
--- a/packages/linux/linux-rp-2.6.21/defconfig-spitz
+++ /dev/null
@@ -1,1781 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21
-# Sat Jun 30 20:16:08 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw fbcon=rotate:1 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_USB_DSBR is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# SoC Platforms
-#
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_SPITZ=m
-CONFIG_SND_SOC_WM8750=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-# CONFIG_USB_GTCO is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-# CONFIG_USB_BERRY_CHARGE is not set
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_SHARPSL_RC=m \ No newline at end of file
diff --git a/packages/linux/linux-rp-2.6.21/defconfig-tosa b/packages/linux/linux-rp-2.6.21/defconfig-tosa
deleted file mode 100644
index 392acf47e9..0000000000
--- a/packages/linux/linux-rp-2.6.21/defconfig-tosa
+++ /dev/null
@@ -1,1613 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-rc5-git5
-# Tue Mar 14 09:05:26 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-CONFIG_MACH_TOSA=y
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-CONFIG_TOSHIBA_TC6393XB=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_TMIO=y
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-CONFIG_KEYBOARD_TOSA=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_CORGI is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_WM97XX=y
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-CONFIG_TOUCHSCREEN_WM9712=y
-# CONFIG_TOUCHSCREEN_WM9713 is not set
-# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TOSA=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_W100 is not set
-CONFIG_FB_TMIO=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_BUS=y
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=y
-CONFIG_SND_PXA2xx_SOC_AC97=y
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_TOSA=y
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-CONFIG_SND_SOC_WM9712=y
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_PWC is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_GENERIC_ALLOCATOR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.21/hostap-monitor-mode.patch b/packages/linux/linux-rp-2.6.21/hostap-monitor-mode.patch
deleted file mode 100644
index 641fd19e50..0000000000
--- a/packages/linux/linux-rp-2.6.21/hostap-monitor-mode.patch
+++ /dev/null
@@ -1,209 +0,0 @@
-This is a patch that I've been maintaining for a few years, and I'd
-really like to see it added to the mainstream zaurus kernel so I can
-finally stop distributing my own.
-
-This patch only effects the card while in monitor mode, and does not
-cause any known stability issues.
-
-http://patches.aircrack-ng.org/hostap-kernel-2.6.18.patch
-
-Rick Farina (Zero_Chaos)
-
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:30:18.000000000 -0400
-@@ -69,6 +69,9 @@
- iface = netdev_priv(dev);
- local = iface->local;
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ goto xmit;
-+
- if (skb->len < ETH_HLEN) {
- printk(KERN_DEBUG "%s: hostap_data_start_xmit: short skb "
- "(len=%d)\n", dev->name, skb->len);
-@@ -234,6 +237,7 @@
- memcpy(skb_put(skb, ETH_ALEN), &hdr.addr4, ETH_ALEN);
- }
-
-+xmit:
- iface->stats.tx_packets++;
- iface->stats.tx_bytes += skb->len;
-
-@@ -404,8 +408,6 @@
- }
-
- if (skb->len < 24) {
-- printk(KERN_DEBUG "%s: hostap_master_start_xmit: short skb "
-- "(len=%d)\n", dev->name, skb->len);
- ret = 0;
- iface->stats.tx_dropped++;
- goto fail;
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.orig
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.rej
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:30:18.000000000 -0400
-@@ -1005,6 +1005,35 @@
- return fid;
- }
-
-+static int prism2_monitor_enable(struct net_device *dev)
-+{
-+ if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE, 5)) {
-+ printk(KERN_DEBUG "Port type setting for monitor mode "
-+ "failed\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hfa384x_cmd(dev, HFA384X_CMDCODE_TEST | (0x0a << 8),
-+ 0, NULL, NULL)) {
-+ printk(KERN_DEBUG "Could not enter testmode 0x0a\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
-+ HFA384X_WEPFLAGS_PRIVACYINVOKED |
-+ HFA384X_WEPFLAGS_HOSTENCRYPT |
-+ HFA384X_WEPFLAGS_HOSTDECRYPT)) {
-+ printk(KERN_DEBUG "WEP flags setting failed\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hostap_set_word(dev, HFA384X_RID_PROMISCUOUSMODE, 1)) {
-+ printk(KERN_DEBUG "Could not set promiscuous mode\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ return 0;
-+}
-
- static int prism2_reset_port(struct net_device *dev)
- {
-@@ -1031,6 +1060,10 @@
- "port\n", dev->name);
- }
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ /* force mode 0x0a after port 0 reset */
-+ return prism2_monitor_enable(dev);
-+
- /* It looks like at least some STA firmware versions reset
- * fragmentation threshold back to 2346 after enable command. Restore
- * the configured value, if it differs from this default. */
-@@ -1466,6 +1499,10 @@
- return 1;
- }
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ /* force mode 0x0a after port 0 reset */
-+ prism2_monitor_enable(dev);
-+
- local->hw_ready = 1;
- local->hw_reset_tries = 0;
- local->hw_resetting = 0;
-@@ -3156,6 +3193,7 @@
- local->func->hw_config = prism2_hw_config;
- local->func->hw_reset = prism2_hw_reset;
- local->func->hw_shutdown = prism2_hw_shutdown;
-+ local->func->monitor_enable = prism2_monitor_enable;
- local->func->reset_port = prism2_reset_port;
- local->func->schedule_reset = prism2_schedule_reset;
- #ifdef PRISM2_DOWNLOAD_SUPPORT
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_hw.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:30:18.000000000 -0400
-@@ -1104,33 +1104,7 @@
-
- printk(KERN_DEBUG "Enabling monitor mode\n");
- hostap_monitor_set_type(local);
--
-- if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE,
-- HFA384X_PORTTYPE_PSEUDO_IBSS)) {
-- printk(KERN_DEBUG "Port type setting for monitor mode "
-- "failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- /* Host decrypt is needed to get the IV and ICV fields;
-- * however, monitor mode seems to remove WEP flag from frame
-- * control field */
-- if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
-- HFA384X_WEPFLAGS_HOSTENCRYPT |
-- HFA384X_WEPFLAGS_HOSTDECRYPT)) {
-- printk(KERN_DEBUG "WEP flags setting failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- if (local->func->reset_port(dev) ||
-- local->func->cmd(dev, HFA384X_CMDCODE_TEST |
-- (HFA384X_TEST_MONITOR << 8),
-- 0, NULL, NULL)) {
-- printk(KERN_DEBUG "Setting monitor mode failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- return 0;
-+ return local->func->reset_port(dev);
- }
-
-
-@@ -1199,7 +1173,7 @@
- local->iw_mode = *mode;
-
- if (local->iw_mode == IW_MODE_MONITOR)
-- hostap_monitor_mode_enable(local);
-+ return hostap_monitor_mode_enable(local);
- else if (local->iw_mode == IW_MODE_MASTER && !local->host_encrypt &&
- !local->fw_encrypt_ok) {
- printk(KERN_DEBUG "%s: defaulting to host-based encryption as "
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:30:18.000000000 -0400
-@@ -331,7 +331,7 @@
- if (local->iw_mode == IW_MODE_REPEAT)
- return HFA384X_PORTTYPE_WDS;
- if (local->iw_mode == IW_MODE_MONITOR)
-- return HFA384X_PORTTYPE_PSEUDO_IBSS;
-+ return 5; /*HFA384X_PORTTYPE_PSEUDO_IBSS;*/
- return HFA384X_PORTTYPE_HOSTAP;
- }
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_main.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:30:18.000000000 -0400
-@@ -48,6 +48,8 @@
- { 0x1260, 0x3873, PCI_ANY_ID, PCI_ANY_ID },
- /* Samsung MagicLAN SWL-2210P */
- { 0x167d, 0xa000, PCI_ANY_ID, PCI_ANY_ID },
-+ /* NETGEAR MA311 */
-+ { 0x1385, 0x3872, PCI_ANY_ID, PCI_ANY_ID },
- { 0 }
- };
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_pci.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:30:18.000000000 -0400
-@@ -101,6 +101,7 @@
- { 0xc250, 0x0002 } /* EMTAC A2424i */,
- { 0xd601, 0x0002 } /* Z-Com XI300 */,
- { 0xd601, 0x0005 } /* Zcomax XI-325H 200mW */,
-+ { 0xd601, 0x0010 } /* Zcomax XI-325H 100mW */,
- { 0, 0}
- };
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_plx.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:30:18.000000000 -0400
-@@ -575,6 +575,7 @@
- int (*hw_config)(struct net_device *dev, int initial);
- void (*hw_reset)(struct net_device *dev);
- void (*hw_shutdown)(struct net_device *dev, int no_disable);
-+ int (*monitor_enable)(struct net_device *dev);
- int (*reset_port)(struct net_device *dev);
- void (*schedule_reset)(local_info_t *local);
- int (*download)(local_info_t *local,
diff --git a/packages/linux/linux-rp-2.6.21/orinoco-remove-all-which-are-in-hostap-HACK.patch b/packages/linux/linux-rp-2.6.21/orinoco-remove-all-which-are-in-hostap-HACK.patch
deleted file mode 100644
index 380349f809..0000000000
--- a/packages/linux/linux-rp-2.6.21/orinoco-remove-all-which-are-in-hostap-HACK.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-This patch should resolve problem when people get eth0 (orinoco_cs) instead of wlan0 (hostap_cs)
-with their WiFi cards.
-
-Patch will NEVER been accepted upstream.
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
-
-Index: linux/drivers/net/wireless/orinoco_cs.c
-===================================================================
---- linux.orig/drivers/net/wireless/orinoco_cs.c 2006-08-23 16:04:10.000000000 +0200
-+++ linux/drivers/net/wireless/orinoco_cs.c 2006-08-23 16:17:43.000000000 +0200
-@@ -453,33 +453,21 @@
- "Pavel Roskin <proski@gnu.org>, et al)";
-
- static struct pcmcia_device_id orinoco_cs_ids[] = {
-- PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100), /* SonicWALL Long Range Wireless Card */
-- PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7300), /* Sohoware NCP110, Philips 802.11b */
- PCMCIA_DEVICE_MANF_CARD(0x0089, 0x0002), /* AnyPoint(TM) Wireless II PC Card */
-- PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), /* 3Com AirConnect PCI 777A */
-- PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000), /* PROXIM RangeLAN-DS/LAN PC CARD */
- PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002), /* Compaq WL100 11 Mbps Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0002), /* Lucent Orinoco and old Intersil */
- PCMCIA_DEVICE_MANF_CARD(0x016b, 0x0001), /* Ericsson WLAN Card C11 */
- PCMCIA_DEVICE_MANF_CARD(0x01eb, 0x080a), /* Nortel Networks eMobility 802.11 Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x01ff, 0x0008), /* Intermec MobileLAN 11Mbps 802.11b WLAN Card */
-- PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002), /* Samsung SWL2000-N 11Mb/s WLAN Card */
- PCMCIA_DEVICE_MANF_CARD(0x0261, 0x0002), /* AirWay 802.11 Adapter (PCMCIA) */
- PCMCIA_DEVICE_MANF_CARD(0x0268, 0x0001), /* ARtem Onair */
- PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0305), /* Buffalo WLI-PCM-S11 */
-- PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612), /* Linksys WPC11 Version 2.5 */
-- PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1613), /* Linksys WPC11 Version 3 */
-- PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0002), /* Compaq HNW-100 11 Mbps Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0673), /* Linksys WCF12 Wireless CompactFlash Card */
-- PCMCIA_DEVICE_MANF_CARD(0x02aa, 0x0002), /* ASUS SpaceLink WL-100 */
- PCMCIA_DEVICE_MANF_CARD(0x02ac, 0x0002), /* SpeedStream SS1021 Wireless Adapter */
- PCMCIA_DEVICE_MANF_CARD(0x14ea, 0xb001), /* PLANEX RoadLannerWave GW-NS11H */
-- PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x7300), /* Airvast WN-100 */
- PCMCIA_DEVICE_MANF_CARD(0x9005, 0x0021), /* Adaptec Ultra Wireless ANW-8030 */
- PCMCIA_DEVICE_MANF_CARD(0xc001, 0x0008), /* CONTEC FLEXSCAN/FX-DDS110-PCC */
- PCMCIA_DEVICE_MANF_CARD(0xc250, 0x0002), /* Conceptronic CON11Cpro, EMTAC A2424i */
-- PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002), /* Safeway 802.11b, ZCOMAX AirRunner/XI-300 */
-- PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005), /* D-Link DCF660, Sandisk Connect SDWCFB-000 */
- PCMCIA_DEVICE_PROD_ID12(" ", "IEEE 802.11 Wireless LAN/PC Card", 0x3b6e20c8, 0xefccafe9),
- PCMCIA_DEVICE_PROD_ID12("3Com", "3CRWE737A AirConnect Wireless LAN PC Card", 0x41240e5b, 0x56010af3),
- PCMCIA_DEVICE_PROD_ID12("ACTIONTEC", "PRISM Wireless LAN PC Card", 0x393089da, 0xa71e69d5),
-@@ -487,31 +475,25 @@
- PCMCIA_DEVICE_PROD_ID123("AIRVAST", "IEEE 802.11b Wireless PCMCIA Card", "HFA3863", 0xea569531, 0x4bcb9645, 0x355cb092),
- PCMCIA_DEVICE_PROD_ID12("Allied Telesyn", "AT-WCL452 Wireless PCMCIA Radio", 0x5cd01705, 0x4271660f),
- PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11b_PC_CARD_25", 0x78fc06ee, 0xdb9aa842),
-- PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11B_CF_CARD_25", 0x78fc06ee, 0x45a50c1e),
- PCMCIA_DEVICE_PROD_ID12("Avaya Communication", "Avaya Wireless PC Card", 0xd8a43b78, 0x0d341169),
- PCMCIA_DEVICE_PROD_ID12("BENQ", "AWL100 PCMCIA ADAPTER", 0x35dadc74, 0x01f7fedb),
- PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-PCM-L11G", 0x2decece3, 0xf57ca4b3),
-- PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-CF-S11G", 0x2decece3, 0x82067c18),
- PCMCIA_DEVICE_PROD_ID12("Cabletron", "RoamAbout 802.11 DS", 0x32d445f5, 0xedeffd90),
-- PCMCIA_DEVICE_PROD_ID12("Compaq", "WL200_11Mbps_Wireless_PCI_Card", 0x54f7c49c, 0x15a75e5b),
- PCMCIA_DEVICE_PROD_ID123("corega", "WL PCCL-11", "ISL37300P", 0x0a21501a, 0x59868926, 0xc9049a39),
- PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCC-11", 0x5261440f, 0xa6405584),
- PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCCA-11", 0x5261440f, 0xdf6115f9),
- PCMCIA_DEVICE_PROD_ID12("corega_K.K.", "Wireless_LAN_PCCB-11", 0x29e33311, 0xee7a27ae),
- PCMCIA_DEVICE_PROD_ID12("D", "Link DRC-650 11Mbps WLAN Card", 0x71b18589, 0xf144e3ac),
-- PCMCIA_DEVICE_PROD_ID12("D", "Link DWL-650 11Mbps WLAN Card", 0x71b18589, 0xb6f1b0ab),
- PCMCIA_DEVICE_PROD_ID12("D-Link Corporation", "D-Link DWL-650H 11Mbps WLAN Adapter", 0xef544d24, 0xcd8ea916),
- PCMCIA_DEVICE_PROD_ID12("Digital Data Communications", "WPC-0100", 0xfdd73470, 0xe0b6f146),
- PCMCIA_DEVICE_PROD_ID12("ELSA", "AirLancer MC-11", 0x4507a33a, 0xef54f0e3),
- PCMCIA_DEVICE_PROD_ID12("HyperLink", "Wireless PC Card 11Mbps", 0x56cc3f1a, 0x0bcf220c),
- PCMCIA_DEVICE_PROD_ID123("Instant Wireless ", " Network PC CARD", "Version 01.02", 0x11d901af, 0x6e9bd926, 0x4b74baa0),
- PCMCIA_DEVICE_PROD_ID12("Intel", "PRO/Wireless 2011 LAN PC Card", 0x816cc815, 0x07f58077),
-- PCMCIA_DEVICE_PROD_ID12("INTERSIL", "HFA384x/IEEE", 0x74c5e40d, 0xdb472a18),
- PCMCIA_DEVICE_PROD_ID12("INTERSIL", "I-GATE 11M PC Card / PC Card plus", 0x74c5e40d, 0x8304ff77),
- PCMCIA_DEVICE_PROD_ID12("Intersil", "PRISM 2_5 PCMCIA ADAPTER", 0x4b801a17, 0x6345a0bf),
- PCMCIA_DEVICE_PROD_ID123("Intersil", "PRISM Freedom PCMCIA Adapter", "ISL37100P", 0x4b801a17, 0xf222ec2d, 0x630d52b2),
- PCMCIA_DEVICE_PROD_ID12("LeArtery", "SYNCBYAIR 11Mbps Wireless LAN PC Card", 0x7e3b326a, 0x49893e92),
-- PCMCIA_DEVICE_PROD_ID12("Linksys", "Wireless CompactFlash Card", 0x0733cc81, 0x0c52f395),
- PCMCIA_DEVICE_PROD_ID12("Lucent Technologies", "WaveLAN/IEEE", 0x23eb9949, 0xc562e72a),
- PCMCIA_DEVICE_PROD_ID12("MELCO", "WLI-PCM-L11", 0x481e0094, 0x7360e410),
- PCMCIA_DEVICE_PROD_ID12("MELCO", "WLI-PCM-L11G", 0x481e0094, 0xf57ca4b3),
-@@ -529,10 +511,8 @@
- PCMCIA_DEVICE_PROD_ID12("PROXIM", "LAN PCI CARD HARMONY 80211B", 0xc6536a5e, 0x9f494e26),
- PCMCIA_DEVICE_PROD_ID12("SAMSUNG", "11Mbps WLAN Card", 0x43d74cb4, 0x579bd91b),
- PCMCIA_DEVICE_PROD_ID12("SMC", "SMC2532W-B EliteConnect Wireless Adapter", 0xc4f8b18b, 0x196bd757),
-- PCMCIA_DEVICE_PROD_ID12("SMC", "SMC2632W", 0xc4f8b18b, 0x474a1f2a),
- PCMCIA_DEVICE_PROD_ID12("Symbol Technologies", "LA4111 Spectrum24 Wireless LAN PC Card", 0x3f02b4d6, 0x3663cb0e),
- PCMCIA_DEVICE_PROD_ID123("The Linksys Group, Inc.", "Instant Wireless Network PC Card", "ISL37300P", 0xa5f472c2, 0x590eb502, 0xc9049a39),
-- PCMCIA_DEVICE_PROD_ID12("ZoomAir 11Mbps High", "Rate wireless Networking", 0x273fe3db, 0x32a1eaee),
- PCMCIA_DEVICE_NULL,
- };
- MODULE_DEVICE_TABLE(pcmcia, orinoco_cs_ids);
diff --git a/packages/linux/linux-rp-2.6.21/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.21/pxa-serial-hack.patch
deleted file mode 100644
index bf20f46a05..0000000000
--- a/packages/linux/linux-rp-2.6.21/pxa-serial-hack.patch
+++ /dev/null
@@ -1,90 +0,0 @@
----
- drivers/serial/8250.c | 5 +++++
- drivers/serial/serial_core.c | 1 +
- drivers/serial/serial_cs.c | 12 +++++++++---
- include/linux/serial_core.h | 1 +
- 4 files changed, 16 insertions(+), 3 deletions(-)
-
-Index: linux-2.6.20/drivers/serial/8250.c
-===================================================================
---- linux-2.6.20.orig/drivers/serial/8250.c 2007-04-27 13:37:26.000000000 +0100
-+++ linux-2.6.20/drivers/serial/8250.c 2007-04-27 13:38:16.000000000 +0100
-@@ -2429,7 +2429,12 @@
- .driver_name = "serial",
- .dev_name = "ttyS",
- .major = TTY_MAJOR,
-+#ifdef CONFIG_SERIAL_PXA
-+ .minor = 64 + 4,
-+ .name_base = 4,
-+#else
- .minor = 64,
-+#endif
- .nr = UART_NR,
- .cons = SERIAL8250_CONSOLE,
- };
-Index: linux-2.6.20/drivers/serial/serial_core.c
-===================================================================
---- linux-2.6.20.orig/drivers/serial/serial_core.c 2007-02-04 18:44:54.000000000 +0000
-+++ linux-2.6.20/drivers/serial/serial_core.c 2007-04-27 13:39:39.000000000 +0100
-@@ -2068,7 +2068,8 @@
- printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
- port->dev ? port->dev->bus_id : "",
- port->dev ? ": " : "",
-- drv->dev_name, port->line, address, port->irq, uart_type(port));
-+ drv->dev_name, port->line + drv->name_base, address, port->irq,
-+ uart_type(port));
- }
-
- static void
-@@ -2183,6 +2184,7 @@
- normal->owner = drv->owner;
- normal->driver_name = drv->driver_name;
- normal->name = drv->dev_name;
-+ normal->name_base = drv->name_base;
- normal->major = drv->major;
- normal->minor_start = drv->minor;
- normal->type = TTY_DRIVER_TYPE_SERIAL;
-Index: linux-2.6.20/include/linux/serial_core.h
-===================================================================
---- linux-2.6.20.orig/include/linux/serial_core.h 2007-02-04 18:44:54.000000000 +0000
-+++ linux-2.6.20/include/linux/serial_core.h 2007-04-27 13:37:27.000000000 +0100
-@@ -341,6 +341,7 @@
- struct module *owner;
- const char *driver_name;
- const char *dev_name;
-+ int name_base;
- int major;
- int minor;
- int nr;
-Index: linux-2.6.20/drivers/serial/serial_cs.c
-===================================================================
---- linux-2.6.20.orig/drivers/serial/serial_cs.c 2007-02-04 18:44:54.000000000 +0000
-+++ linux-2.6.20/drivers/serial/serial_cs.c 2007-04-27 13:40:34.000000000 +0100
-@@ -390,7 +390,7 @@
- kio_addr_t iobase, int irq)
- {
- struct uart_port port;
-- int line;
-+ int line, linestart;
-
- memset(&port, 0, sizeof (struct uart_port));
- port.iobase = iobase;
-@@ -411,10 +411,16 @@
- return -EINVAL;
- }
-
-+#if CONFIG_SERIAL_PXA
-+ linestart = 4;
-+#else
-+ linestart = 0;
-+#endif
-+
- info->line[info->ndev] = line;
-- sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
-+ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line+linestart);
- info->node[info->ndev].major = TTY_MAJOR;
-- info->node[info->ndev].minor = 0x40 + line;
-+ info->node[info->ndev].minor = 0x40 + line + linestart;
- if (info->ndev > 0)
- info->node[info->ndev - 1].next = &info->node[info->ndev];
- info->ndev++;
diff --git a/packages/linux/linux-rp-2.6.21/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.21/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
deleted file mode 100644
index 18bf4268fc..0000000000
--- a/packages/linux/linux-rp-2.6.21/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-
-From: Petr Vandrovec <vandrove@vc.cvut.cz>
-
-Patch below adds support for using different prescaler than 16 for 16c950
-chips. This is needed for using Fujitsu-Siemens Connect2Air compact-flash
-card, which comes (apparently) with 806kHz clocks, and so you have to
-program prescaler for division by 7, and DLAB to 1, to get 115200Bd.
-
-To get card properly running you also have to add lines below to
-/etc/pcmcia/serial.opts so kernel knows that base speed is not 115200 but
-50400 (50400 * 16 = 806400; 806400 / 7 = 115200). As I've found no code
-specifying baud_rate in serial_cs, I assume that specifying it in
-serial.opts is right way to do this type of things.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER maximum possible
-baud rate passed to uart code was uartclk / 16 while correct value for
-these devices (and for 16c950) is uartclk / 4.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER devices with
-baud_rate 19200 or 9600 spd_cust did not work correctly. Not that such
-devices exist, but we should not ignore spd_cust, user probably knows why
-he asked for spd_cust.
-
-serial.opts:
-
-case "$MANFID-$FUNCID-$PRODID_1-$PRODID_2-$PRODID_3-$PRODID_4" in
-'0279,950b-2-GPRS Modem---')
- SERIAL_OPTS="baud_base 50400"
- ;;
-esac
-
-Cc: David Woodhouse <dwmw2@infradead.org>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
----
-
- drivers/serial/8250.c | 82 +++++++++++++++++++++++++++++++++++++++-----------
- 1 files changed, 64 insertions(+), 18 deletions(-)
-
-diff -puN drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver drivers/serial/8250.c
---- devel/drivers/serial/8250.c~serial-add-support-for-non-standard-xtals-to-16c950-driver 2005-09-12 03:34:57.000000000 -0700
-+++ devel-akpm/drivers/serial/8250.c 2005-09-12 03:34:57.000000000 -0700
-@@ -1653,24 +1653,58 @@ static void serial8250_shutdown(struct u
- serial_unlink_irq_chain(up);
- }
-
--static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud)
-+static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud,
-+ unsigned int *prescaler)
- {
-- unsigned int quot;
--
-- /*
-- * Handle magic divisors for baud rates above baud_base on
-- * SMSC SuperIO chips.
-+ /*
-+ * Use special handling only if user did not supply its own divider.
-+ * spd_cust is defined in terms of baud_base, so always use default
-+ * prescaler when spd_cust is requested.
- */
-- if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/4))
-- quot = 0x8001;
-- else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/8))
-- quot = 0x8002;
-- else
-- quot = uart_get_divisor(port, baud);
-
-- return quot;
-+ *prescaler = 16;
-+ if (baud != 38400 || (port->flags & UPF_SPD_MASK) != UPF_SPD_CUST) {
-+ unsigned int quot = port->uartclk / baud;
-+
-+ /*
-+ * Handle magic divisors for baud rates above baud_base on
-+ * SMSC SuperIO chips.
-+ */
-+ if (port->flags & UPF_MAGIC_MULTIPLIER) {
-+ if (quot == 4) {
-+ return 0x8001;
-+ } else if (quot == 8) {
-+ return 0x8002;
-+ }
-+ }
-+ if (port->type == PORT_16C950) {
-+ /*
-+ * This computes TCR value (4 to 16), not CPR value (which can
-+ * be between 1.000 and 31.875) - chip I have uses XTAL of
-+ * 806400Hz, and so a division by 7 is required to get 115200Bd.
-+ * I'm leaving CPR disabled for now, until someone will
-+ * hit even more exotic XTAL (it is needed to get 500kbps
-+ * or 1000kbps from 18.432MHz XTAL, but I have no device
-+ * which would benefit from doing that).
-+ *
-+ * If we can use divide by 16, use it. Otherwise look for
-+ * better prescaler, from 15 to 4. If quotient cannot
-+ * be divided by any integer value between 4 and 15, use 4.
-+ */
-+ if (quot & 0x0F) {
-+ unsigned int div;
-+
-+ for (div = 15; div > 4; div--) {
-+ if (quot % div == 0) {
-+ break;
-+ }
-+ }
-+ *prescaler = div;
-+ return quot / div;
-+ }
-+ }
-+ }
-+ return uart_get_divisor(port, baud);
- }
-
- static void
-@@ -1680,7 +1714,7 @@ serial8250_set_termios(struct uart_port
- struct uart_8250_port *up = (struct uart_8250_port *)port;
- unsigned char cval, fcr = 0;
- unsigned long flags;
-- unsigned int baud, quot;
-+ unsigned int baud, quot, prescaler;
-
- switch (termios->c_cflag & CSIZE) {
- case CS5:
-@@ -1712,8 +1746,13 @@ serial8250_set_termios(struct uart_port
- /*
- * Ask the core to calculate the divisor for us.
- */
-- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-- quot = serial8250_get_divisor(port, baud);
-+
-+ if (port->type == PORT_16C950 || (port->flags & UPF_MAGIC_MULTIPLIER)) {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/4);
-+ } else {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-+ }
-+ quot = serial8250_get_divisor(port, baud, &prescaler);
-
- /*
- * Oxford Semi 952 rev B workaround
-@@ -1817,6 +1856,13 @@ serial8250_set_termios(struct uart_port
- serial_outp(up, UART_DLM, quot >> 8); /* MS of divisor */
-
- /*
-+ * Program prescaler for 16C950 chips.
-+ */
-+ if (up->port.type == PORT_16C950) {
-+ serial_icr_write(up, UART_TCR, prescaler == 16 ? 0 : prescaler);
-+ }
-+
-+ /*
- * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
- * is written without DLAB set, this mode will be disabled.
- */
-_
diff --git a/packages/linux/linux-rp-2.6.21/sharpsl-rc-r1.patch b/packages/linux/linux-rp-2.6.21/sharpsl-rc-r1.patch
deleted file mode 100644
index da83fdf5eb..0000000000
--- a/packages/linux/linux-rp-2.6.21/sharpsl-rc-r1.patch
+++ /dev/null
@@ -1,519 +0,0 @@
-Index: linux-2.6.20/arch/arm/mach-pxa/spitz.c
-===================================================================
---- linux-2.6.20.orig/arch/arm/mach-pxa/spitz.c
-+++ linux-2.6.20/arch/arm/mach-pxa/spitz.c
-@@ -244,6 +244,13 @@ static struct platform_device spitzkbd_d
- .id = -1,
- };
-
-+/*
-+ * Spitz Remote Control Device
-+ */
-+static struct platform_device sharpsl_rc_device = {
-+ .name = "sharpsl-remote-control",
-+ .id = -1,
-+};
-
- /*
- * Spitz LEDs
-@@ -476,6 +483,7 @@ static struct platform_device *devices[]
- &spitzscoop_device,
- &spitzssp_device,
- &spitzkbd_device,
-+ &sharpsl_rc_device,
- &spitzts_device,
- &spitzbl_device,
- &spitzled_device,
-Index: linux-2.6.20/drivers/input/keyboard/Kconfig
-===================================================================
---- linux-2.6.20.orig/drivers/input/keyboard/Kconfig
-+++ linux-2.6.20/drivers/input/keyboard/Kconfig
-@@ -154,6 +154,17 @@ config KEYBOARD_SPITZ
- To compile this driver as a module, choose M here: the
- module will be called spitzkbd.
-
-+config SHARPSL_RC
-+ tristate "Sharp SL-Cxx00 Remote Control"
-+ depends on PXA_SHARPSL
-+ default y
-+ help
-+ Say Y here to enable the remote on the Sharp Zaurus SL-Cxx00,
-+ SL-C1000, SL-C3000 and Sl-C3100 series of PDAs.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called sharpsl_rc.
-+
- config KEYBOARD_AMIGA
- tristate "Amiga keyboard"
- depends on AMIGA
-Index: linux-2.6.20/drivers/input/keyboard/Makefile
-===================================================================
---- linux-2.6.20.orig/drivers/input/keyboard/Makefile
-+++ linux-2.6.20/drivers/input/keyboard/Makefile
-@@ -14,6 +14,7 @@ obj-$(CONFIG_KEYBOARD_NEWTON) += newton
- obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o
- obj-$(CONFIG_KEYBOARD_CORGI) += corgikbd.o
- obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o
-+obj-$(CONFIG_SHARPSL_RC) += sharpsl_rc.o
- obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
- obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
- obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
-Index: linux-2.6.20/drivers/input/keyboard/sharpsl_rc.c
-===================================================================
---- /dev/null
-+++ linux-2.6.20/drivers/input/keyboard/sharpsl_rc.c
-@@ -0,0 +1,291 @@
-+/*
-+ * Keyboard driver for Sharp Clamshell Models (SL-Cxx00)
-+ *
-+ * Copyright (c) 2004-2005 Richard Purdie
-+ *
-+ * Based on corgikbd.c and Sharp's RC driver
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#define DEBUG 1
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/init.h>
-+#include <linux/input.h>
-+#include <linux/interrupt.h>
-+#include <linux/jiffies.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+
-+#ifdef CONFIG_MACH_SPITZ
-+#include <asm/arch/spitz.h>
-+#endif
-+#ifdef CONFIG_MACH_CORGI
-+#include <asm/arch/corgi.h>
-+#endif
-+
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/hardware/scoop.h>
-+#include <asm/arch/sharpsl.h>
-+#include <asm/hardware/sharpsl_pm.h>
-+
-+#define DPRINTK(fmt, args...) dev_dbg(data->dev, fmt "\n", ##args)
-+
-+struct remote_control_key {
-+ unsigned char min;
-+ unsigned char max;
-+ unsigned char key;
-+};
-+
-+#ifdef CONFIG_MACH_SPITZ
-+#define REMOTE_AKIN_PULLUP SPITZ_SCP2_AKIN_PULLUP
-+#define REMOTE_SCOOP_DEVICE spitzscoop2_device
-+#define REMOTE_GPIO_INT SPITZ_GPIO_AK_INT
-+#define REMOTE_IRQ_INT SPITZ_IRQ_GPIO_AK_INT
-+static struct remote_control_key remote_keys[] = {
-+ { 25, 35, KEY_STOPCD},
-+ { 55, 65, KEY_PLAYPAUSE},
-+ { 85, 95, KEY_NEXTSONG},
-+ { 115, 125, KEY_VOLUMEUP},
-+ { 145, 155, KEY_PREVIOUSSONG},
-+ { 180, 190, KEY_MUTE},
-+ { 215, 225, KEY_VOLUMEDOWN},
-+};
-+#endif
-+#ifdef CONFIG_MACH_CORGI
-+#define REMOTE_AKIN_PULLUP CORGI_SCP_AKIN_PULLUP
-+#define REMOTE_SCOOP_DEVICE corgiscoop_device
-+#define REMOTE_GPIO_INT CORGI_GPIO_AK_INT
-+#define REMOTE_IRQ_INT CORGI_IRQ_GPIO_AK_INT
-+static struct remote_control_key remote_keys[] = {
-+ //These need to be fixed for the CE-RH1's values
-+ { 25, 35, KEY_STOPCD},
-+ { 55, 65, KEY_PLAYPAUSE},
-+ { 85, 95, KEY_NEXTSONG},
-+ { 115, 125, KEY_VOLUMEUP},
-+ { 145, 155, KEY_PREVIOUSSONG},
-+ { 180, 190, KEY_MUTE},
-+ { 215, 225, KEY_VOLUMEDOWN},
-+};
-+#endif
-+
-+#define RELEASE_HI 230
-+#define MAX_EARPHONE 6
-+#define RC_POLL_MS 10
-+#define RC_FINISH_MS 500
-+#define WAIT_STATE 3
-+#define NOISE_THRESHOLD 100
-+
-+struct sharpsl_rc {
-+ struct input_dev *input;
-+ struct device *dev;
-+
-+ spinlock_t lock;
-+ struct timer_list rctimer;
-+ struct timer_list rctimer_finish;
-+
-+ unsigned int handling_press;
-+ unsigned int noise;
-+ unsigned int state;
-+ unsigned int last_key;
-+};
-+
-+static int get_remocon_raw(void)
-+{
-+ int i, val;
-+
-+ val = sharpsl_pm_pxa_read_max1111(MAX1111_REMCOM);
-+ for (i = 0; i < ARRAY_SIZE(remote_keys); ++i) {
-+ if (val >= remote_keys[i].min
-+ && val <= remote_keys[i].max) {
-+ printk("get_remocon_raw: VAL=%i, KEY=%i\n", val, remote_keys[i].key);
-+ return remote_keys[i].key;
-+ }
-+ }
-+ return 0;
-+}
-+
-+static irqreturn_t sharpsl_rc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ struct sharpsl_rc *data = dev_id;
-+ DPRINTK("sharpsl_rc_interrupt %d\n", irq);
-+ if (!data->handling_press) {
-+ DPRINTK("handling interrupt");
-+ data->handling_press = 1;
-+ data->noise = 0;
-+ data->state = 0;
-+ data->last_key = 0;
-+
-+ reset_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
-+
-+ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+static void sharpsl_rc_timer_callback(unsigned long dataPtr)
-+{
-+ struct sharpsl_rc *data = (struct sharpsl_rc *) dataPtr;
-+ int timer = 1;
-+ int key = get_remocon_raw();
-+ DPRINTK("timer callback, key: %d", key);
-+
-+ //wait for value to stabilize
-+ if (data->state < WAIT_STATE) {
-+ if (data->last_key != key) {
-+ ++data->noise;
-+ if (data->noise > NOISE_THRESHOLD) {
-+ DPRINTK("too much noise, bailing");
-+ timer = 0;
-+ }
-+ data->state = 0;
-+ } else {
-+ ++data->state;
-+ }
-+ data->last_key = key;
-+
-+ //stable value, send event
-+ } else if (data->state == WAIT_STATE) {
-+ data->noise = 0;
-+ //non-key returned, skip the rest of the states and bail now
-+ if (data->last_key == 0) {
-+ DPRINTK("non-key detected %d, noise: %d", data->last_key, data->noise);
-+ timer = 0;
-+ //send button press
-+ } else {
-+ DPRINTK("key press detected %d, noise %d", data->last_key, data->noise);
-+ input_report_key(data->input, data->last_key, 1);
-+ }
-+ ++data->state;
-+
-+ //wait until key is released
-+ } else if (data->state < WAIT_STATE * 2) {
-+ if (key == data->last_key
-+ && data->noise < NOISE_THRESHOLD) {
-+ data->state = WAIT_STATE + 1;
-+ ++data->noise;
-+ } else {
-+ ++data->state;
-+ }
-+ //key is released, send event
-+ } else {
-+ //send button release
-+ DPRINTK("release key %d", data->last_key);
-+ input_report_key(data->input, data->last_key, 0);
-+ timer = 0;
-+ }
-+ if (timer) {
-+ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
-+ } else {
-+ set_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
-+ data->handling_press = 0;
-+ }
-+}
-+
-+static int __init sharpsl_rc_probe(struct platform_device *pdev)
-+{
-+ struct sharpsl_rc *sharpsl_rc;
-+ struct input_dev *input_dev;
-+ int i, ret;
-+
-+ dev_dbg(&pdev->dev, "sharpsl_rc_probe\n");
-+
-+ sharpsl_rc = kzalloc(sizeof(struct sharpsl_rc), GFP_KERNEL);
-+ input_dev = input_allocate_device();
-+ if (!sharpsl_rc || !input_dev) {
-+ kfree(sharpsl_rc);
-+ input_free_device(input_dev);
-+ return -ENOMEM;
-+ }
-+
-+ platform_set_drvdata(pdev, sharpsl_rc);
-+
-+ sharpsl_rc->dev = &pdev->dev;
-+ sharpsl_rc->input = input_dev;
-+ spin_lock_init(&sharpsl_rc->lock);
-+
-+ /* Init Remote Control Timer */
-+ init_timer(&sharpsl_rc->rctimer);
-+ sharpsl_rc->rctimer.function = sharpsl_rc_timer_callback;
-+ sharpsl_rc->rctimer.data = (unsigned long) sharpsl_rc;
-+
-+ input_dev->name = "Sharp Remote Control CE-RHX";
-+ input_dev->phys = "sharpsl_rc/input0";
-+ input_dev->id.bustype = BUS_HOST;
-+ input_dev->id.vendor = 0x0001;
-+ input_dev->id.product = 0x0001;
-+ input_dev->id.version = 0x0100;
-+ input_dev->cdev.dev = &pdev->dev;
-+ input_dev->private = sharpsl_rc;
-+
-+ input_dev->evbit[0] = BIT(EV_KEY);
-+
-+ for (i = 0; i <= ARRAY_SIZE(remote_keys); i++)
-+ set_bit(remote_keys[i].key, input_dev->keybit);
-+
-+ input_register_device(sharpsl_rc->input);
-+
-+ pxa_gpio_mode(REMOTE_GPIO_INT | GPIO_IN);
-+ ret = request_irq(REMOTE_IRQ_INT,
-+ sharpsl_rc_interrupt,
-+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
-+ "sharpsl_rc",
-+ sharpsl_rc);
-+ if (ret < 0) {
-+ dev_dbg(&pdev->dev, "Can't get IRQ: %d!\n", i);
-+ kfree(sharpsl_rc);
-+ input_free_device(input_dev);
-+ return ret;
-+ }
-+
-+ return 0;
-+}
-+
-+static int sharpsl_rc_remove(struct platform_device *pdev)
-+{
-+ struct sharpsl_rc *sharpsl_rc = platform_get_drvdata(pdev);
-+
-+ dev_dbg(&pdev->dev, "sharpsl_rc_remove\n");
-+
-+ free_irq(REMOTE_IRQ_INT, sharpsl_rc);
-+ del_timer_sync(&sharpsl_rc->rctimer);
-+ input_unregister_device(sharpsl_rc->input);
-+ kfree(sharpsl_rc);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver sharpsl_rc_driver = {
-+ .probe = sharpsl_rc_probe,
-+ .remove = sharpsl_rc_remove,
-+ .suspend = NULL,
-+ .resume = NULL,
-+ .driver = {
-+ .name = "sharpsl-remote-control",
-+ },
-+};
-+
-+static int __devinit sharpsl_rc_init(void)
-+{
-+ printk("sharpsl_rc_init\n");
-+ return platform_driver_register(&sharpsl_rc_driver);
-+}
-+
-+static void __exit sharpsl_rc_exit(void)
-+{
-+ printk("sharpsl_rc_exit\n");
-+ platform_driver_unregister(&sharpsl_rc_driver);
-+}
-+
-+module_init(sharpsl_rc_init);
-+module_exit(sharpsl_rc_exit);
-+
-+MODULE_AUTHOR("Justin Patrin <papercrane@reversefold.com>");
-+MODULE_AUTHOR("Richard Purdie <rpurdie@rpsys.net>");
-+MODULE_DESCRIPTION("SharpSL Remote Control Driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.20/drivers/input/keyboard/spitzkbd.c
-===================================================================
---- linux-2.6.20.orig/drivers/input/keyboard/spitzkbd.c
-+++ linux-2.6.20/drivers/input/keyboard/spitzkbd.c
-@@ -19,6 +19,7 @@
- #include <linux/jiffies.h>
- #include <linux/module.h>
- #include <linux/slab.h>
-+#include <linux/kmod.h>
-
- #include <asm/arch/spitz.h>
- #include <asm/arch/hardware.h>
-@@ -279,13 +280,21 @@ static irqreturn_t spitzkbd_hinge_isr(in
- static int sharpsl_hinge_state;
- static int hinge_count;
-
-+void spitzkbd_handle_sharpsl_rc(void *arg) {
-+ request_module("sharpsl_rc");
-+}
-+
-+DECLARE_WORK(spitzkbd_work, spitzkbd_handle_sharpsl_rc);
-+
- static void spitzkbd_hinge_timer(unsigned long data)
- {
- struct spitzkbd *spitzkbd_data = (struct spitzkbd *) data;
- unsigned long state;
- unsigned long flags;
-+ unsigned int headphone, remote;
-
- state = GPLR(SPITZ_GPIO_SWA) & (GPIO_bit(SPITZ_GPIO_SWA)|GPIO_bit(SPITZ_GPIO_SWB));
-+ state |= (GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN));
- state |= (GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT));
- if (state != sharpsl_hinge_state) {
- hinge_count = 0;
-@@ -299,9 +308,18 @@ static void spitzkbd_hinge_timer(unsigne
-
- input_report_switch(spitzkbd_data->input, SW_LID, ((GPLR(SPITZ_GPIO_SWA) & GPIO_bit(SPITZ_GPIO_SWA)) != 0));
- input_report_switch(spitzkbd_data->input, SW_TABLET_MODE, ((GPLR(SPITZ_GPIO_SWB) & GPIO_bit(SPITZ_GPIO_SWB)) != 0));
-- input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) != 0));
-+
-+ headphone = ((GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN)) != 0);
-+ input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, headphone);
-+
-+ remote = headphone && ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) == 0);
-+ input_report_switch(spitzkbd_data->input, SW_REMOTE_INSERT, remote);
- input_sync(spitzkbd_data->input);
-
-+ if (remote) {
-+ schedule_work(&spitzkbd_work);
-+ }
-+
- spin_unlock_irqrestore(&spitzkbd_data->lock, flags);
- } else {
- mod_timer(&spitzkbd_data->htimer, jiffies + msecs_to_jiffies(HINGE_SCAN_INTERVAL));
-@@ -394,6 +412,7 @@ static int __init spitzkbd_probe(struct
- set_bit(SW_LID, input_dev->swbit);
- set_bit(SW_TABLET_MODE, input_dev->swbit);
- set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
-+ set_bit(SW_REMOTE_INSERT, input_dev->swbit);
-
- err = input_register_device(input_dev);
- if (err)
-@@ -431,9 +450,12 @@ static int __init spitzkbd_probe(struct
- request_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd_hinge_isr,
- IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
- "Spitzkbd SWB", spitzkbd);
-- request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
-+ request_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd_hinge_isr,
- IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
- "Spitzkbd HP", spitzkbd);
-+ request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
-+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
-+ "Spitzkbd HP Type", spitzkbd);
-
- return 0;
-
-@@ -454,6 +476,7 @@ static int spitzkbd_remove(struct platfo
- free_irq(SPITZ_IRQ_GPIO_ON_KEY, spitzkbd);
- free_irq(SPITZ_IRQ_GPIO_SWA, spitzkbd);
- free_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd);
-+ free_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd);
- free_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd);
-
- del_timer_sync(&spitzkbd->htimer);
-Index: linux-2.6.20/arch/arm/mach-pxa/sharpsl.h
-===================================================================
---- linux-2.6.20.orig/arch/arm/mach-pxa/sharpsl.h
-+++ linux-2.6.20/arch/arm/mach-pxa/sharpsl.h
-@@ -50,15 +50,10 @@ void spitz_wait_hsync(void);
-
- #define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x))
-
--/* MAX1111 Channel Definitions */
--#define MAX1111_BATT_VOLT 4u
--#define MAX1111_BATT_TEMP 2u
--#define MAX1111_ACIN_VOLT 6u
--
- extern struct battery_thresh spitz_battery_levels_acin[];
- extern struct battery_thresh spitz_battery_levels_noac[];
- void sharpsl_pm_pxa_init(void);
- void sharpsl_pm_pxa_remove(void);
--int sharpsl_pm_pxa_read_max1111(int channel);
-+
-
-
-Index: linux-2.6.20/arch/arm/mach-pxa/sharpsl_pm.c
-===================================================================
---- linux-2.6.20.orig/arch/arm/mach-pxa/sharpsl_pm.c
-+++ linux-2.6.20/arch/arm/mach-pxa/sharpsl_pm.c
-@@ -135,6 +135,8 @@ int sharpsl_pm_pxa_read_max1111(int chan
- | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR);
- }
-
-+EXPORT_SYMBOL(sharpsl_pm_pxa_read_max1111);
-+
- void sharpsl_pm_pxa_init(void)
- {
- pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN);
-Index: linux-2.6.20/include/asm-arm/hardware/sharpsl_pm.h
-===================================================================
---- linux-2.6.20.orig/include/asm-arm/hardware/sharpsl_pm.h
-+++ linux-2.6.20/include/asm-arm/hardware/sharpsl_pm.h
-@@ -104,3 +104,10 @@ irqreturn_t sharpsl_ac_isr(int irq, void
- irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id);
- irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id);
-
-+/* MAX1111 Channel Definitions */
-+#define MAX1111_REMCOM 0u
-+#define MAX1111_BATT_VOLT 4u
-+#define MAX1111_BATT_TEMP 2u
-+#define MAX1111_ACIN_VOLT 6u
-+
-+int sharpsl_pm_pxa_read_max1111(int channel);
-Index: linux-2.6.20/include/linux/input.h
-===================================================================
---- linux-2.6.20.orig/include/linux/input.h
-+++ linux-2.6.20/include/linux/input.h
-@@ -602,6 +602,7 @@ struct input_absinfo {
- #define SW_LID 0x00 /* set = lid shut */
- #define SW_TABLET_MODE 0x01 /* set = tablet mode */
- #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
-+#define SW_REMOTE_INSERT 0x04 /* set = remote */
- #define SW_MAX 0x0f
-
- /*
-Index: linux-2.6.20/arch/arm/mach-pxa/spitz_pm.c
-===================================================================
---- linux-2.6.20.orig/arch/arm/mach-pxa/spitz_pm.c
-+++ linux-2.6.20/arch/arm/mach-pxa/spitz_pm.c
-@@ -161,6 +161,13 @@ static int spitz_should_wakeup(unsigned
- if (resume_on_alarm && (PEDR & PWER_RTC))
- is_resume |= PWER_RTC;
-
-+ printk("wakeup: PEDR: %x, PKSR: %x, HP_IN: %x, AK_INT: %x\n", PEDR, PKSR, GPIO_bit(SPITZ_GPIO_HP_IN), GPIO_bit(SPITZ_GPIO_AK_INT));
-+
-+ //remote/headphone interrupt, wakeup
-+ if (PEDR == 0 && (PKSR & 0xc0d01) != 0) {
-+ is_resume |= PWER_RTC;
-+ }
-+
- dev_dbg(sharpsl_pm.dev, "is_resume: %x\n",is_resume);
- return is_resume;
- }
diff --git a/packages/linux/linux-rp-2.6.21/squashfs3.0-2.6.15.patch b/packages/linux/linux-rp-2.6.21/squashfs3.0-2.6.15.patch
deleted file mode 100644
index 405d4ec124..0000000000
--- a/packages/linux/linux-rp-2.6.21/squashfs3.0-2.6.15.patch
+++ /dev/null
@@ -1,4191 +0,0 @@
- fs/Kconfig | 65 +
- fs/Makefile | 1
- fs/squashfs/Makefile | 7
- fs/squashfs/inode.c | 2124 +++++++++++++++++++++++++++++++++++++++++
- fs/squashfs/squashfs.h | 86 +
- fs/squashfs/squashfs2_0.c | 757 ++++++++++++++
- include/linux/squashfs_fs.h | 911 +++++++++++++++++
- include/linux/squashfs_fs_i.h | 45
- include/linux/squashfs_fs_sb.h | 74 +
- init/do_mounts_rd.c | 13
- 10 files changed, 4083 insertions(+)
-
-Index: git/fs/Kconfig
-===================================================================
---- git.orig/fs/Kconfig 2006-10-31 16:09:22.000000000 +0000
-+++ git/fs/Kconfig 2006-10-31 21:26:45.000000000 +0000
-@@ -1407,6 +1407,71 @@ config CRAMFS
-
- If unsure, say N.
-
-+config SQUASHFS
-+ tristate "SquashFS 3.0 - Squashed file system support"
-+ select ZLIB_INFLATE
-+ help
-+ Saying Y here includes support for SquashFS 3.0 (a Compressed Read-Only File
-+ System). Squashfs is a highly compressed read-only filesystem for Linux.
-+ It uses zlib compression to compress both files, inodes and directories.
-+ Inodes in the system are very small and all blocks are packed to minimise
-+ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
-+ SquashFS 3.0 supports 64 bit filesystems and files (larger than 4GB), full
-+ uid/gid information, hard links and timestamps.
-+
-+ Squashfs is intended for general read-only filesystem use, for archival
-+ use (i.e. in cases where a .tar.gz file may be used), and in embedded
-+ systems where low overhead is needed. Further information and filesystem tools
-+ are available from http://squashfs.sourceforge.net.
-+
-+ If you want to compile this as a module ( = code which can be
-+ inserted in and removed from the running kernel whenever you want),
-+ say M here and read <file:Documentation/modules.txt>. The module
-+ will be called squashfs. Note that the root file system (the one
-+ containing the directory /) cannot be compiled as a module.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_EMBEDDED
-+
-+ bool "Additional options for memory-constrained systems"
-+ depends on SQUASHFS
-+ default n
-+ help
-+ Saying Y here allows you to specify cache sizes and how Squashfs
-+ allocates memory. This is only intended for memory constrained
-+ systems.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_FRAGMENT_CACHE_SIZE
-+ int "Number of fragments cached" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default "3"
-+ help
-+ By default SquashFS caches the last 3 fragments read from
-+ the filesystem. Increasing this amount may mean SquashFS
-+ has to re-read fragments less often from disk, at the expense
-+ of extra system memory. Decreasing this amount will mean
-+ SquashFS uses less memory at the expense of extra reads from disk.
-+
-+ Note there must be at least one cached fragment. Anything
-+ much more than three will probably not make much difference.
-+
-+config SQUASHFS_VMALLOC
-+ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default n
-+ help
-+ By default SquashFS uses kmalloc to obtain fragment cache memory.
-+ Kmalloc memory is the standard kernel allocator, but it can fail
-+ on memory constrained systems. Because of the way Vmalloc works,
-+ Vmalloc can succeed when kmalloc fails. Specifying this option
-+ will make SquashFS always use Vmalloc to allocate the
-+ fragment cache memory.
-+
-+ If unsure, say N.
-+
- config VXFS_FS
- tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
- depends on BLOCK
-Index: git/fs/Makefile
-===================================================================
---- git.orig/fs/Makefile 2006-10-31 16:09:22.000000000 +0000
-+++ git/fs/Makefile 2006-10-31 21:26:45.000000000 +0000
-@@ -67,6 +67,7 @@ obj-$(CONFIG_JBD) += jbd/
- obj-$(CONFIG_JBD2) += jbd2/
- obj-$(CONFIG_EXT2_FS) += ext2/
- obj-$(CONFIG_CRAMFS) += cramfs/
-+obj-$(CONFIG_SQUASHFS) += squashfs/
- obj-$(CONFIG_RAMFS) += ramfs/
- obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
- obj-$(CONFIG_CODA_FS) += coda/
-Index: git/fs/squashfs/inode.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/inode.c 2006-11-01 18:01:32.000000000 +0000
-@@ -0,0 +1,2124 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * inode.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+
-+static void squashfs_put_super(struct super_block *);
-+static int squashfs_statfs(struct dentry *, struct kstatfs *);
-+static int squashfs_symlink_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage4K(struct file *file, struct page *page);
-+static int squashfs_readdir(struct file *, void *, filldir_t);
-+static struct inode *squashfs_alloc_inode(struct super_block *sb);
-+static void squashfs_destroy_inode(struct inode *inode);
-+static int init_inodecache(void);
-+static void destroy_inodecache(void);
-+static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
-+ struct nameidata *);
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize);
-+static int squashfs_get_sb(struct file_system_type *, int,
-+ const char *, void *, struct vfsmount *);
-+
-+
-+static z_stream stream;
-+
-+static struct file_system_type squashfs_fs_type = {
-+ .owner = THIS_MODULE,
-+ .name = "squashfs",
-+ .get_sb = squashfs_get_sb,
-+ .kill_sb = kill_block_super,
-+ .fs_flags = FS_REQUIRES_DEV
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static struct super_operations squashfs_ops = {
-+ .alloc_inode = squashfs_alloc_inode,
-+ .destroy_inode = squashfs_destroy_inode,
-+ .statfs = squashfs_statfs,
-+ .put_super = squashfs_put_super,
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
-+ .readpage = squashfs_symlink_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops = {
-+ .readpage = squashfs_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
-+ .readpage = squashfs_readpage4K
-+};
-+
-+static struct file_operations squashfs_dir_ops = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir
-+};
-+
-+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
-+ .lookup = squashfs_lookup
-+};
-+
-+
-+static struct buffer_head *get_block_length(struct super_block *s,
-+ int *cur_index, int *offset, int *c_byte)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned short temp;
-+ struct buffer_head *bh;
-+
-+ if (!(bh = sb_bread(s, *cur_index)))
-+ goto out;
-+
-+ if (msblk->devblksize - *offset == 1) {
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ else
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ bh->b_data);
-+ else
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ bh->b_data);
-+ *c_byte = temp;
-+ *offset = 1;
-+ } else {
-+ if (msblk->swap) {
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ } else {
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ }
-+ *c_byte = temp;
-+ *offset += 2;
-+ }
-+
-+ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
-+ if (*offset == msblk->devblksize) {
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ *offset = 0;
-+ }
-+ if (*((unsigned char *) (bh->b_data + *offset)) !=
-+ SQUASHFS_MARKER_BYTE) {
-+ ERROR("Metadata block marker corrupt @ %x\n",
-+ *cur_index);
-+ brelse(bh);
-+ goto out;
-+ }
-+ (*offset)++;
-+ }
-+ return bh;
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
-+ msblk->devblksize_log2) + 2];
-+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
-+ unsigned int cur_index = index >> msblk->devblksize_log2;
-+ int bytes, avail_bytes, b = 0, k;
-+ char *c_buffer;
-+ unsigned int compressed;
-+ unsigned int c_byte = length;
-+
-+ if (c_byte) {
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ if (!(bh[0] = sb_getblk(s, cur_index)))
-+ goto block_release;
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b, bh);
-+ } else {
-+ if (!(bh[0] = get_block_length(s, &cur_index, &offset,
-+ &c_byte)))
-+ goto read_failure;
-+
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b - 1, bh + 1);
-+ }
-+
-+ if (compressed)
-+ down(&msblk->read_data_mutex);
-+
-+ for (bytes = 0, k = 0; k < b; k++) {
-+ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
-+ msblk->devblksize - offset :
-+ c_byte - bytes;
-+ wait_on_buffer(bh[k]);
-+ if (!buffer_uptodate(bh[k]))
-+ goto block_release;
-+ memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
-+ bytes += avail_bytes;
-+ offset = 0;
-+ brelse(bh[k]);
-+ }
-+
-+ /*
-+ * uncompress block
-+ */
-+ if (compressed) {
-+ int zlib_err;
-+
-+ stream.next_in = c_buffer;
-+ stream.avail_in = c_byte;
-+ stream.next_out = buffer;
-+ stream.avail_out = msblk->read_size;
-+
-+ if (((zlib_err = zlib_inflateInit(&stream)) != Z_OK) ||
-+ ((zlib_err = zlib_inflate(&stream, Z_FINISH))
-+ != Z_STREAM_END) || ((zlib_err =
-+ zlib_inflateEnd(&stream)) != Z_OK)) {
-+ ERROR("zlib_fs returned unexpected result 0x%x\n",
-+ zlib_err);
-+ bytes = 0;
-+ } else
-+ bytes = stream.total_out;
-+
-+ up(&msblk->read_data_mutex);
-+ }
-+
-+ if (next_index)
-+ *next_index = index + c_byte + (length ? 0 :
-+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
-+ ? 3 : 2));
-+ return bytes;
-+
-+block_release:
-+ while (--b >= 0)
-+ brelse(bh[b]);
-+
-+read_failure:
-+ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ int n, i, bytes, return_length = length;
-+ long long next_index;
-+
-+ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
-+
-+ while ( 1 ) {
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (msblk->block_cache[i].block == block)
-+ break;
-+
-+ down(&msblk->block_cache_mutex);
-+
-+ if (i == SQUASHFS_CACHED_BLKS) {
-+ /* read inode header block */
-+ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
-+ n ; n --, i = (i + 1) %
-+ SQUASHFS_CACHED_BLKS)
-+ if (msblk->block_cache[i].block !=
-+ SQUASHFS_USED_BLK)
-+ break;
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->waitq, &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->block_cache_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->waitq, &wait);
-+ continue;
-+ }
-+ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
-+
-+ if (msblk->block_cache[i].block ==
-+ SQUASHFS_INVALID_BLK) {
-+ if (!(msblk->block_cache[i].data =
-+ kmalloc(SQUASHFS_METADATA_SIZE,
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate cache"
-+ "block\n");
-+ up(&msblk->block_cache_mutex);
-+ goto out;
-+ }
-+ }
-+
-+ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
-+ up(&msblk->block_cache_mutex);
-+
-+ if (!(msblk->block_cache[i].length =
-+ squashfs_read_data(s,
-+ msblk->block_cache[i].data,
-+ block, 0, &next_index))) {
-+ ERROR("Unable to read cache block [%llx:%x]\n",
-+ block, offset);
-+ goto out;
-+ }
-+
-+ down(&msblk->block_cache_mutex);
-+ wake_up(&msblk->waitq);
-+ msblk->block_cache[i].block = block;
-+ msblk->block_cache[i].next_index = next_index;
-+ TRACE("Read cache block [%llx:%x]\n", block, offset);
-+ }
-+
-+ if (msblk->block_cache[i].block != block) {
-+ up(&msblk->block_cache_mutex);
-+ continue;
-+ }
-+
-+ if ((bytes = msblk->block_cache[i].length - offset) >= length) {
-+ if (buffer)
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, length);
-+ if (msblk->block_cache[i].length - offset == length) {
-+ *next_block = msblk->block_cache[i].next_index;
-+ *next_offset = 0;
-+ } else {
-+ *next_block = block;
-+ *next_offset = offset + length;
-+ }
-+ up(&msblk->block_cache_mutex);
-+ goto finish;
-+ } else {
-+ if (buffer) {
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, bytes);
-+ buffer += bytes;
-+ }
-+ block = msblk->block_cache[i].next_index;
-+ up(&msblk->block_cache_mutex);
-+ length -= bytes;
-+ offset = 0;
-+ }
-+ }
-+
-+finish:
-+ return return_length;
-+out:
-+ return 0;
-+}
-+
-+
-+static int get_fragment_location(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
-+ struct squashfs_fragment_entry fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment)
-+{
-+ down(&msblk->fragment_mutex);
-+ fragment->locked --;
-+ wake_up(&msblk->fragment_wait_queue);
-+ up(&msblk->fragment_mutex);
-+}
-+
-+
-+SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length)
-+{
-+ int i, n, nf;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+
-+ while ( 1 ) {
-+ down(&msblk->fragment_mutex);
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
-+ msblk->fragment[i].block != start_block; i++);
-+
-+ if (i == SQUASHFS_CACHED_FRAGMENTS) {
-+ nf = (msblk->next_fragment + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS;
-+ for (i = msblk->next_fragment, n =
-+ SQUASHFS_CACHED_FRAGMENTS; n &&
-+ msblk->fragment[i].locked; n--, i = (i + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS);
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->fragment_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ continue;
-+ }
-+ msblk->next_fragment = nf;
-+
-+ if (msblk->fragment[i].data == NULL)
-+ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC
-+ (SQUASHFS_FILE_MAX_SIZE))) {
-+ ERROR("Failed to allocate fragment "
-+ "cache block\n");
-+ up(&msblk->fragment_mutex);
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].locked = 1;
-+ up(&msblk->fragment_mutex);
-+
-+ if (!(msblk->fragment[i].length = squashfs_read_data(s,
-+ msblk->fragment[i].data,
-+ start_block, length, NULL))) {
-+ ERROR("Unable to read fragment cache block "
-+ "[%llx]\n", start_block);
-+ msblk->fragment[i].locked = 0;
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = start_block;
-+ TRACE("New fragment %d, start block %lld, locked %d\n",
-+ i, msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ msblk->fragment[i].locked++;
-+ up(&msblk->fragment_mutex);
-+ TRACE("Got fragment %d, start block %lld, locked %d\n", i,
-+ msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ return &msblk->fragment[i];
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header *inodeb)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = inodeb->inode_number;
-+ i->i_mtime.tv_sec = inodeb->mtime;
-+ i->i_atime.tv_sec = inodeb->mtime;
-+ i->i_ctime.tv_sec = inodeb->mtime;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header id, sid;
-+ struct squashfs_base_inode_header *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_reg_inode_header *inodep = &id.reg;
-+ struct squashfs_reg_inode_header *sinodep = &sid.reg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = 1;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_LREG_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_lreg_inode_header *inodep = &id.lreg;
-+ struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header *inodep = &id.dir;
-+ struct squashfs_dir_inode_header *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header *inodep = &id.dev;
-+ struct squashfs_dev_inode_header *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ struct squashfs_ipc_inode_header *inodep = &id.ipc;
-+ struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int read_fragment_index_table(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ /* Allocate fragment index table */
-+ if (!(msblk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ long long fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
-+ &msblk->fragment_index[i], 1);
-+ msblk->fragment_index[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget;
-+ msblk->read_blocklist = read_blocklist;
-+ msblk->read_fragment_index_table = read_fragment_index_table;
-+
-+ if (sblk->s_major == 1) {
-+ if (!squashfs_1_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 1.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if (sblk->s_major == 2) {
-+ if (!squashfs_2_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 2.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
-+ SQUASHFS_MINOR) {
-+ SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
-+ "filesystem\n", sblk->s_major, sblk->s_minor);
-+ SERROR("Please update your kernel\n");
-+ return 0;
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int squashfs_fill_super(struct super_block *s, void *data, int silent)
-+{
-+ struct squashfs_sb_info *msblk;
-+ struct squashfs_super_block *sblk;
-+ int i;
-+ char b[BDEVNAME_SIZE];
-+ struct inode *root;
-+
-+ TRACE("Entered squashfs_read_superblock\n");
-+
-+ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info),
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate superblock\n");
-+ goto failure;
-+ }
-+ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
-+ msblk = s->s_fs_info;
-+ sblk = &msblk->sblk;
-+
-+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
-+ msblk->devblksize_log2 = ffz(~msblk->devblksize);
-+
-+ init_MUTEX(&msblk->read_data_mutex);
-+ init_MUTEX(&msblk->read_page_mutex);
-+ init_MUTEX(&msblk->block_cache_mutex);
-+ init_MUTEX(&msblk->fragment_mutex);
-+ init_MUTEX(&msblk->meta_index_mutex);
-+
-+ init_waitqueue_head(&msblk->waitq);
-+ init_waitqueue_head(&msblk->fragment_wait_queue);
-+
-+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
-+ sizeof(struct squashfs_super_block) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ SERROR("unable to read superblock\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Check it is a SQUASHFS superblock */
-+ msblk->swap = 0;
-+ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
-+ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
-+ struct squashfs_super_block ssblk;
-+
-+ WARNING("Mounting a different endian SQUASHFS "
-+ "filesystem on %s\n", bdevname(s->s_bdev, b));
-+
-+ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
-+ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
-+ msblk->swap = 1;
-+ } else {
-+ SERROR("Can't find a SQUASHFS superblock on %s\n",
-+ bdevname(s->s_bdev, b));
-+ goto failed_mount;
-+ }
-+ }
-+
-+ /* Check the MAJOR & MINOR versions */
-+ if(!supported_squashfs_filesystem(msblk, silent))
-+ goto failed_mount;
-+
-+ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
-+ TRACE("Inodes are %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_INODES
-+ (sblk->flags) ? "un" : "");
-+ TRACE("Data is %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
-+ ? "un" : "");
-+ TRACE("Check data is %s present in the filesystem\n",
-+ SQUASHFS_CHECK_DATA(sblk->flags) ?
-+ "" : "not");
-+ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
-+ TRACE("Block size %d\n", sblk->block_size);
-+ TRACE("Number of inodes %d\n", sblk->inodes);
-+ if (sblk->s_major > 1)
-+ TRACE("Number of fragments %d\n", sblk->fragments);
-+ TRACE("Number of uids %d\n", sblk->no_uids);
-+ TRACE("Number of gids %d\n", sblk->no_guids);
-+ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
-+ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
-+ if (sblk->s_major > 1)
-+ TRACE("sblk->fragment_table_start %llx\n",
-+ sblk->fragment_table_start);
-+ TRACE("sblk->uid_start %llx\n", sblk->uid_start);
-+
-+ s->s_flags |= MS_RDONLY;
-+ s->s_op = &squashfs_ops;
-+
-+ /* Init inode_table block pointer array */
-+ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
-+ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+
-+ msblk->next_cache = 0;
-+
-+ /* Allocate read_data block */
-+ msblk->read_size = (sblk->block_size < SQUASHFS_METADATA_SIZE) ?
-+ SQUASHFS_METADATA_SIZE :
-+ sblk->block_size;
-+
-+ if (!(msblk->read_data = kmalloc(msblk->read_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_data block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate read_page block */
-+ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_page block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate uid and gid tables */
-+ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ goto failed_mount;
-+ }
-+ msblk->guid = msblk->uid + sblk->no_uids;
-+
-+ if (msblk->swap) {
-+ unsigned int suid[sblk->no_uids + sblk->no_guids];
-+
-+ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
-+ sblk->no_guids), (sizeof(unsigned int) * 8));
-+ } else
-+ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+
-+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
-+ goto allocate_root;
-+
-+ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
-+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate fragment block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
-+ msblk->fragment[i].locked = 0;
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].data = NULL;
-+ }
-+
-+ msblk->next_fragment = 0;
-+
-+ /* Allocate fragment index table */
-+ if (msblk->read_fragment_index_table(s) == 0)
-+ goto failed_mount;
-+
-+allocate_root:
-+ if ((root = (msblk->iget)(s, sblk->root_inode)) == NULL)
-+ goto failed_mount;
-+
-+ if ((s->s_root = d_alloc_root(root)) == NULL) {
-+ ERROR("Root inode create failed\n");
-+ iput(root);
-+ goto failed_mount;
-+ }
-+
-+ TRACE("Leaving squashfs_read_super\n");
-+ return 0;
-+
-+failed_mount:
-+ kfree(msblk->fragment_index);
-+ kfree(msblk->fragment);
-+ kfree(msblk->uid);
-+ kfree(msblk->read_page);
-+ kfree(msblk->read_data);
-+ kfree(msblk->block_cache);
-+ kfree(msblk->fragment_index_2);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ return -EINVAL;
-+
-+failure:
-+ return -ENOMEM;
-+}
-+
-+
-+static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf)
-+{
-+ struct super_block *s = dentry->d_sb;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ TRACE("Entered squashfs_statfs\n");
-+
-+ buf->f_type = SQUASHFS_MAGIC;
-+ buf->f_bsize = sblk->block_size;
-+ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
-+ buf->f_bfree = buf->f_bavail = 0;
-+ buf->f_files = sblk->inodes;
-+ buf->f_ffree = 0;
-+ buf->f_namelen = SQUASHFS_NAME_LEN;
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_symlink_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ int index = page->index << PAGE_CACHE_SHIFT, length, bytes;
-+ long long block = SQUASHFS_I(inode)->start_block;
-+ int offset = SQUASHFS_I(inode)->offset;
-+ void *pageaddr = kmap(page);
-+
-+ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
-+ "%llx, offset %x\n", page->index,
-+ SQUASHFS_I(inode)->start_block,
-+ SQUASHFS_I(inode)->offset);
-+
-+ for (length = 0; length < index; length += bytes) {
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL,
-+ block, offset, PAGE_CACHE_SIZE, &block,
-+ &offset))) {
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block,
-+ offset);
-+ goto skip_read;
-+ }
-+ }
-+
-+ if (length != index) {
-+ ERROR("(squashfs_symlink_readpage) length != index\n");
-+ bytes = 0;
-+ goto skip_read;
-+ }
-+
-+ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE :
-+ i_size_read(inode) - length;
-+
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block,
-+ offset, bytes, &block, &offset)))
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
-+{
-+ struct meta_index *meta = NULL;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
-+
-+ if(msblk->meta_index == NULL)
-+ goto not_allocated;
-+
-+ for (i = 0; i < SQUASHFS_META_NUMBER; i ++)
-+ if (msblk->meta_index[i].inode_number == inode->i_ino &&
-+ msblk->meta_index[i].offset >= offset &&
-+ msblk->meta_index[i].offset <= index &&
-+ msblk->meta_index[i].locked == 0) {
-+ TRACE("locate_meta_index: entry %d, offset %d\n", i,
-+ msblk->meta_index[i].offset);
-+ meta = &msblk->meta_index[i];
-+ offset = meta->offset;
-+ }
-+
-+ if (meta)
-+ meta->locked = 1;
-+
-+not_allocated:
-+ up(&msblk->meta_index_mutex);
-+
-+ return meta;
-+}
-+
-+
-+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct meta_index *meta = NULL;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
-+
-+ if(msblk->meta_index == NULL) {
-+ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) *
-+ SQUASHFS_META_NUMBER, GFP_KERNEL))) {
-+ ERROR("Failed to allocate meta_index\n");
-+ goto failed;
-+ }
-+ for(i = 0; i < SQUASHFS_META_NUMBER; i++) {
-+ msblk->meta_index[i].inode_number = 0;
-+ msblk->meta_index[i].locked = 0;
-+ }
-+ msblk->next_meta_index = 0;
-+ }
-+
-+ for(i = SQUASHFS_META_NUMBER; i &&
-+ msblk->meta_index[msblk->next_meta_index].locked; i --)
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ if(i == 0) {
-+ TRACE("empty_meta_index: failed!\n");
-+ goto failed;
-+ }
-+
-+ TRACE("empty_meta_index: returned meta entry %d, %p\n",
-+ msblk->next_meta_index,
-+ &msblk->meta_index[msblk->next_meta_index]);
-+
-+ meta = &msblk->meta_index[msblk->next_meta_index];
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ meta->inode_number = inode->i_ino;
-+ meta->offset = offset;
-+ meta->skip = skip;
-+ meta->entries = 0;
-+ meta->locked = 1;
-+
-+failed:
-+ up(&msblk->meta_index_mutex);
-+ return meta;
-+}
-+
-+
-+void release_meta_index(struct inode *inode, struct meta_index *meta)
-+{
-+ meta->locked = 0;
-+}
-+
-+
-+static int read_block_index(struct super_block *s, int blocks, char *block_list,
-+ long long *start_block, int *offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned int *block_listp;
-+ int block = 0;
-+
-+ if (msblk->swap) {
-+ char sblock_list[blocks << 2];
-+
-+ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
-+ ((unsigned int *)sblock_list), blocks);
-+ } else
-+ if (!squashfs_get_cached_block(s, block_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+
-+ for (block_listp = (unsigned int *) block_list; blocks;
-+ block_listp++, blocks --)
-+ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
-+
-+ return block;
-+
-+failure:
-+ return -1;
-+}
-+
-+
-+#define SIZE 256
-+
-+static inline int calculate_skip(int blocks) {
-+ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
-+ return skip >= 7 ? 7 : skip + 1;
-+}
-+
-+
-+static int get_meta_index(struct inode *inode, int index,
-+ long long *index_block, int *index_offset,
-+ long long *data_block, char *block_list)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
-+ int offset = 0;
-+ struct meta_index *meta;
-+ struct meta_entry *meta_entry;
-+ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
-+ int cur_offset = SQUASHFS_I(inode)->offset;
-+ long long cur_data_block = SQUASHFS_I(inode)->start_block;
-+ int i;
-+
-+ index /= SQUASHFS_META_INDEXES * skip;
-+
-+ while ( offset < index ) {
-+ meta = locate_meta_index(inode, index, offset + 1);
-+
-+ if (meta == NULL) {
-+ if ((meta = empty_meta_index(inode, offset + 1,
-+ skip)) == NULL)
-+ goto all_done;
-+ } else {
-+ offset = index < meta->offset + meta->entries ? index :
-+ meta->offset + meta->entries - 1;
-+ meta_entry = &meta->meta_entry[offset - meta->offset];
-+ cur_index_block = meta_entry->index_block + sblk->inode_table_start;
-+ cur_offset = meta_entry->offset;
-+ cur_data_block = meta_entry->data_block;
-+ TRACE("get_meta_index: offset %d, meta->offset %d, "
-+ "meta->entries %d\n", offset, meta->offset,
-+ meta->entries);
-+ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
-+ " data_block 0x%llx\n", cur_index_block,
-+ cur_offset, cur_data_block);
-+ }
-+
-+ for (i = meta->offset + meta->entries; i <= index &&
-+ i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
-+ int blocks = skip * SQUASHFS_META_INDEXES;
-+
-+ while (blocks) {
-+ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) :
-+ blocks;
-+ int res = read_block_index(inode->i_sb, block,
-+ block_list, &cur_index_block,
-+ &cur_offset);
-+
-+ if (res == -1)
-+ goto failed;
-+
-+ cur_data_block += res;
-+ blocks -= block;
-+ }
-+
-+ meta_entry = &meta->meta_entry[i - meta->offset];
-+ meta_entry->index_block = cur_index_block - sblk->inode_table_start;
-+ meta_entry->offset = cur_offset;
-+ meta_entry->data_block = cur_data_block;
-+ meta->entries ++;
-+ offset ++;
-+ }
-+
-+ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
-+ meta->offset, meta->entries);
-+
-+ release_meta_index(inode, meta);
-+ }
-+
-+all_done:
-+ *index_block = cur_index_block;
-+ *index_offset = cur_offset;
-+ *data_block = cur_data_block;
-+
-+ return offset * SQUASHFS_META_INDEXES * skip;
-+
-+failed:
-+ release_meta_index(inode, meta);
-+ return -1;
-+}
-+
-+
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize)
-+{
-+ long long block_ptr;
-+ int offset;
-+ long long block;
-+ int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
-+ block_list);
-+
-+ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
-+ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset,
-+ block);
-+
-+ if(res == -1)
-+ goto failure;
-+
-+ index -= res;
-+
-+ while ( index ) {
-+ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
-+ int res = read_block_index(inode->i_sb, blocks, block_list,
-+ &block_ptr, &offset);
-+ if (res == -1)
-+ goto failure;
-+ block += res;
-+ index -= blocks;
-+ }
-+
-+ if (read_block_index(inode->i_sb, 1, block_list,
-+ &block_ptr, &offset) == -1)
-+ goto failure;
-+ *bsize = *((unsigned int *) block_list);
-+
-+ return block;
-+
-+failure:
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0;
-+ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
-+ void *pageaddr;
-+ struct squashfs_fragment_cache *fragment = NULL;
-+ char *data_ptr = msblk->read_page;
-+
-+ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
-+ int start_index = page->index & ~mask;
-+ int end_index = start_index | mask;
-+
-+ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT))
-+ goto skip_read;
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ if ((block = (msblk->read_blocklist)(inode, index, 1,
-+ block_list, NULL, &bsize)) == 0)
-+ goto skip_read;
-+
-+ down(&msblk->read_page_mutex);
-+
-+ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page,
-+ block, bsize, NULL))) {
-+ ERROR("Unable to read page, block %llx, size %x\n", block,
-+ bsize);
-+ up(&msblk->read_page_mutex);
-+ goto skip_read;
-+ }
-+ } else {
-+ if ((fragment = get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)->u.s1.fragment_size))
-+ == NULL) {
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ (int) SQUASHFS_I(inode)->
-+ u.s1.fragment_size);
-+ goto skip_read;
-+ }
-+ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset +
-+ (i_size_read(inode) & (sblk->block_size
-+ - 1));
-+ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset;
-+ data_ptr = fragment->data;
-+ }
-+
-+ for (i = start_index; i <= end_index && byte_offset < bytes;
-+ i++, byte_offset += PAGE_CACHE_SIZE) {
-+ struct page *push_page;
-+ int available_bytes = (bytes - byte_offset) > PAGE_CACHE_SIZE ?
-+ PAGE_CACHE_SIZE : bytes - byte_offset;
-+
-+ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n",
-+ bytes, i, byte_offset, available_bytes);
-+
-+ if (i == page->index) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+ } else if ((push_page =
-+ grab_cache_page_nowait(page->mapping, i))) {
-+ pageaddr = kmap_atomic(push_page, KM_USER0);
-+
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(push_page);
-+ SetPageUptodate(push_page);
-+ unlock_page(push_page);
-+ page_cache_release(push_page);
-+ }
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log))
-+ up(&msblk->read_page_mutex);
-+ else
-+ release_cached_fragment(msblk, fragment);
-+
-+ return 0;
-+
-+skip_read:
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage4K(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, bytes = 0;
-+ void *pageaddr;
-+
-+ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT)) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ goto skip_read;
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || page->index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ block = (msblk->read_blocklist)(inode, page->index, 1,
-+ block_list, NULL, &bsize);
-+
-+ down(&msblk->read_page_mutex);
-+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
-+ bsize, NULL);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (bytes)
-+ memcpy(pageaddr, msblk->read_page, bytes);
-+ else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ block, bsize);
-+ up(&msblk->read_page_mutex);
-+ } else {
-+ struct squashfs_fragment_cache *fragment =
-+ get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (fragment) {
-+ bytes = i_size_read(inode) & (sblk->block_size - 1);
-+ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)->
-+ u.s1.fragment_offset, bytes);
-+ release_cached_fragment(msblk, fragment);
-+ } else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block, (int)
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ }
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ f_pos =- 3;
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length + 3;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index *index = (struct squashfs_dir_index *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length + 3;
-+}
-+
-+
-+static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
-+
-+ while(file->f_pos < 3) {
-+ char *name;
-+ int size, i_ino;
-+
-+ if(file->f_pos == 0) {
-+ name = ".";
-+ size = 1;
-+ i_ino = i->i_ino;
-+ } else {
-+ name = "..";
-+ size = 2;
-+ i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
-+ }
-+ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
-+ (unsigned int) dirent, name, size, (int)
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]);
-+
-+ if (filldir(dirent, name, size,
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]) < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos += size;
-+ dirs_read++;
-+ }
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %d\n", name,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+static void squashfs_put_super(struct super_block *s)
-+{
-+ int i;
-+
-+ if (s->s_fs_info) {
-+ struct squashfs_sb_info *sbi = s->s_fs_info;
-+ if (sbi->block_cache)
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (sbi->block_cache[i].block !=
-+ SQUASHFS_INVALID_BLK)
-+ kfree(sbi->block_cache[i].data);
-+ if (sbi->fragment)
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
-+ SQUASHFS_FREE(sbi->fragment[i].data);
-+ kfree(sbi->fragment);
-+ kfree(sbi->block_cache);
-+ kfree(sbi->read_data);
-+ kfree(sbi->read_page);
-+ kfree(sbi->uid);
-+ kfree(sbi->fragment_index);
-+ kfree(sbi->fragment_index_2);
-+ kfree(sbi->meta_index);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ }
-+}
-+
-+
-+static int squashfs_get_sb(struct file_system_type *fs_type,
-+ int flags, const char *dev_name, void *data, struct vfsmount *mnt)
-+{
-+ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, mnt);
-+}
-+
-+
-+static int __init init_squashfs_fs(void)
-+{
-+ int err = init_inodecache();
-+ if (err)
-+ goto out;
-+
-+ printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
-+ "Phillip Lougher\n");
-+
-+ if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
-+ ERROR("Failed to allocate zlib workspace\n");
-+ destroy_inodecache();
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+
-+ if ((err = register_filesystem(&squashfs_fs_type))) {
-+ vfree(stream.workspace);
-+ destroy_inodecache();
-+ }
-+
-+out:
-+ return err;
-+}
-+
-+
-+static void __exit exit_squashfs_fs(void)
-+{
-+ vfree(stream.workspace);
-+ unregister_filesystem(&squashfs_fs_type);
-+ destroy_inodecache();
-+}
-+
-+
-+static kmem_cache_t * squashfs_inode_cachep;
-+
-+
-+static struct inode *squashfs_alloc_inode(struct super_block *sb)
-+{
-+ struct squashfs_inode_info *ei;
-+ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL);
-+ if (!ei)
-+ return NULL;
-+ return &ei->vfs_inode;
-+}
-+
-+
-+static void squashfs_destroy_inode(struct inode *inode)
-+{
-+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
-+}
-+
-+
-+static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
-+{
-+ struct squashfs_inode_info *ei = foo;
-+
-+ if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
-+ SLAB_CTOR_CONSTRUCTOR)
-+ inode_init_once(&ei->vfs_inode);
-+}
-+
-+
-+static int __init init_inodecache(void)
-+{
-+ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
-+ sizeof(struct squashfs_inode_info),
-+ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
-+ init_once, NULL);
-+ if (squashfs_inode_cachep == NULL)
-+ return -ENOMEM;
-+ return 0;
-+}
-+
-+
-+static void destroy_inodecache(void)
-+{
-+ kmem_cache_destroy(squashfs_inode_cachep);
-+}
-+
-+
-+module_init(init_squashfs_fs);
-+module_exit(exit_squashfs_fs);
-+MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
-+MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
-Index: git/fs/squashfs/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/Makefile 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,7 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
-+
-+obj-$(CONFIG_SQUASHFS) += squashfs.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
-Index: git/fs/squashfs/squashfs2_0.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/squashfs2_0.c 2006-11-01 18:01:49.000000000 +0000
-@@ -0,0 +1,757 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs2_0.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
-+static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
-+ struct nameidata *);
-+
-+static struct file_operations squashfs_dir_ops_2 = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir_2
-+};
-+
-+static struct inode_operations squashfs_dir_inode_ops_2 = {
-+ .lookup = squashfs_lookup_2
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static int read_fragment_index_table_2(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index_2,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ unsigned int fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
-+ &msblk->fragment_index_2[i], 1);
-+ msblk->fragment_index_2[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
-+ struct squashfs_fragment_entry_2 fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry_2 sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = ino;
-+ i->i_mtime.tv_sec = sblk->mkfs_time;
-+ i->i_atime.tv_sec = sblk->mkfs_time;
-+ i->i_ctime.tv_sec = sblk->mkfs_time;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_nlink = 1;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget_2(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned int block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ unsigned int ino = SQUASHFS_MK_VFS_INODE(block
-+ - sblk->inode_table_start, offset);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header_2 id, sid;
-+ struct squashfs_base_inode_header_2 *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ struct squashfs_reg_inode_header_2 *inodep = &id.reg;
-+ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
-+ long long frag_blk;
-+ unsigned int frag_size;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location_2(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %x, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header_2 *inodep = &id.dir;
-+ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header_2 *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header_2 *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header_2 *inodep = &id.dev;
-+ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%x:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index_2 index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index_2 *index = (struct squashfs_dir_index_2 *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index_2),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length;
-+}
-+
-+
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+
-+ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos, SQUASHFS_MK_VFS_INODE(
-+ dirh.start_block, dire->offset),
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (sorted && name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %lld\n", name,
-+ dirh.start_block, dire->offset, ino);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget_2;
-+ msblk->read_fragment_index_table = read_fragment_index_table_2;
-+
-+ sblk->bytes_used = sblk->bytes_used_2;
-+ sblk->uid_start = sblk->uid_start_2;
-+ sblk->guid_start = sblk->guid_start_2;
-+ sblk->inode_table_start = sblk->inode_table_start_2;
-+ sblk->directory_table_start = sblk->directory_table_start_2;
-+ sblk->fragment_table_start = sblk->fragment_table_start_2;
-+
-+ return 1;
-+}
-Index: git/fs/squashfs/squashfs.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/fs/squashfs/squashfs.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs.h
-+ */
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#endif
-+
-+#ifdef SQUASHFS_TRACE
-+#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
-+#else
-+#define TRACE(s, args...) {}
-+#endif
-+
-+#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
-+
-+#define SERROR(s, args...) do { \
-+ if (!silent) \
-+ printk(KERN_ERR "SQUASHFS error: "s, ## args);\
-+ } while(0)
-+
-+#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
-+
-+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
-+{
-+ return list_entry(inode, struct squashfs_inode_info, vfs_inode);
-+}
-+
-+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
-+#define SQSH_EXTERN
-+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index);
-+extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset);
-+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment);
-+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length);
-+extern struct address_space_operations squashfs_symlink_aops;
-+extern struct address_space_operations squashfs_aops;
-+extern struct address_space_operations squashfs_aops_4K;
-+extern struct inode_operations squashfs_dir_inode_ops;
-+#else
-+#define SQSH_EXTERN static
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-Index: git/include/linux/squashfs_fs.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/linux/squashfs_fs.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,911 @@
-+#ifndef SQUASHFS_FS
-+#define SQUASHFS_FS
-+
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs.h
-+ */
-+
-+#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_VMALLOC
-+#define SQUASHFS_ALLOC(a) vmalloc(a)
-+#define SQUASHFS_FREE(a) vfree(a)
-+#else
-+#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL)
-+#define SQUASHFS_FREE(a) kfree(a)
-+#endif
-+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
-+#define SQUASHFS_MAJOR 3
-+#define SQUASHFS_MINOR 0
-+#define SQUASHFS_MAGIC 0x73717368
-+#define SQUASHFS_MAGIC_SWAP 0x68737173
-+#define SQUASHFS_START 0
-+
-+/* size of metadata (inode and directory) blocks */
-+#define SQUASHFS_METADATA_SIZE 8192
-+#define SQUASHFS_METADATA_LOG 13
-+
-+/* default size of data blocks */
-+#define SQUASHFS_FILE_SIZE 65536
-+#define SQUASHFS_FILE_LOG 16
-+
-+#define SQUASHFS_FILE_MAX_SIZE 65536
-+
-+/* Max number of uids and gids */
-+#define SQUASHFS_UIDS 256
-+#define SQUASHFS_GUIDS 255
-+
-+/* Max length of filename (not 255) */
-+#define SQUASHFS_NAME_LEN 256
-+
-+#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
-+#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff)
-+#define SQUASHFS_INVALID_BLK ((long long) -1)
-+#define SQUASHFS_USED_BLK ((long long) -2)
-+
-+/* Filesystem flags */
-+#define SQUASHFS_NOI 0
-+#define SQUASHFS_NOD 1
-+#define SQUASHFS_CHECK 2
-+#define SQUASHFS_NOF 3
-+#define SQUASHFS_NO_FRAG 4
-+#define SQUASHFS_ALWAYS_FRAG 5
-+#define SQUASHFS_DUPLICATE 6
-+
-+#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
-+
-+#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOI)
-+
-+#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOD)
-+
-+#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOF)
-+
-+#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NO_FRAG)
-+
-+#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_ALWAYS_FRAG)
-+
-+#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_DUPLICATE)
-+
-+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_CHECK)
-+
-+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
-+ duplicate_checking) (noi | (nod << 1) | (check_data << 2) \
-+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
-+ (duplicate_checking << 6))
-+
-+/* Max number of types and file types */
-+#define SQUASHFS_DIR_TYPE 1
-+#define SQUASHFS_FILE_TYPE 2
-+#define SQUASHFS_SYMLINK_TYPE 3
-+#define SQUASHFS_BLKDEV_TYPE 4
-+#define SQUASHFS_CHRDEV_TYPE 5
-+#define SQUASHFS_FIFO_TYPE 6
-+#define SQUASHFS_SOCKET_TYPE 7
-+#define SQUASHFS_LDIR_TYPE 8
-+#define SQUASHFS_LREG_TYPE 9
-+
-+/* 1.0 filesystem type definitions */
-+#define SQUASHFS_TYPES 5
-+#define SQUASHFS_IPC_TYPE 0
-+
-+/* Flag whether block is compressed or uncompressed, bit is set if block is
-+ * uncompressed */
-+#define SQUASHFS_COMPRESSED_BIT (1 << 15)
-+
-+#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
-+ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
-+
-+#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
-+
-+#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
-+
-+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
-+
-+#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
-+
-+/*
-+ * Inode number ops. Inodes consist of a compressed block number, and an
-+ * uncompressed offset within that block
-+ */
-+#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
-+
-+#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
-+
-+#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\
-+ << 16) + (B)))
-+
-+/* Compute 32 bit VFS inode number from squashfs inode number */
-+#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \
-+ ((b) >> 2) + 1))
-+/* XXX */
-+
-+/* Translate between VFS mode and squashfs mode */
-+#define SQUASHFS_MODE(a) ((a) & 0xfff)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES(A) (A * sizeof(struct squashfs_fragment_entry))
-+
-+#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\
-+ sizeof(long long))
-+
-+/* cached data constants for filesystem */
-+#define SQUASHFS_CACHED_BLKS 8
-+
-+#define SQUASHFS_MAX_FILE_SIZE_LOG 64
-+
-+#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \
-+ (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
-+
-+#define SQUASHFS_MARKER_BYTE 0xff
-+
-+/* meta index cache */
-+#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
-+#define SQUASHFS_META_ENTRIES 31
-+#define SQUASHFS_META_NUMBER 8
-+#define SQUASHFS_SLOTS 4
-+
-+struct meta_entry {
-+ long long data_block;
-+ unsigned int index_block;
-+ unsigned short offset;
-+ unsigned short pad;
-+};
-+
-+struct meta_index {
-+ unsigned int inode_number;
-+ unsigned int offset;
-+ unsigned short entries;
-+ unsigned short skip;
-+ unsigned short locked;
-+ unsigned short pad;
-+ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES];
-+};
-+
-+
-+/*
-+ * definitions for structures on disk
-+ */
-+
-+typedef long long squashfs_block_t;
-+typedef long long squashfs_inode_t;
-+
-+struct squashfs_super_block {
-+ unsigned int s_magic;
-+ unsigned int inodes;
-+ unsigned int bytes_used_2;
-+ unsigned int uid_start_2;
-+ unsigned int guid_start_2;
-+ unsigned int inode_table_start_2;
-+ unsigned int directory_table_start_2;
-+ unsigned int s_major:16;
-+ unsigned int s_minor:16;
-+ unsigned int block_size_1:16;
-+ unsigned int block_log:16;
-+ unsigned int flags:8;
-+ unsigned int no_uids:8;
-+ unsigned int no_guids:8;
-+ unsigned int mkfs_time /* time of filesystem creation */;
-+ squashfs_inode_t root_inode;
-+ unsigned int block_size;
-+ unsigned int fragments;
-+ unsigned int fragment_table_start_2;
-+ long long bytes_used;
-+ long long uid_start;
-+ long long guid_start;
-+ long long inode_table_start;
-+ long long directory_table_start;
-+ long long fragment_table_start;
-+ long long unused;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_index {
-+ unsigned int index;
-+ unsigned int start_block;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_BASE_INODE_HEADER \
-+ unsigned int inode_type:4; \
-+ unsigned int mode:12; \
-+ unsigned int uid:8; \
-+ unsigned int guid:8; \
-+ unsigned int mtime; \
-+ unsigned int inode_number;
-+
-+struct squashfs_base_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_lreg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ long long file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int parent_inode;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int i_count:16;
-+ unsigned int parent_inode;
-+ struct squashfs_dir_index index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header {
-+ struct squashfs_base_inode_header base;
-+ struct squashfs_dev_inode_header dev;
-+ struct squashfs_symlink_inode_header symlink;
-+ struct squashfs_reg_inode_header reg;
-+ struct squashfs_lreg_inode_header lreg;
-+ struct squashfs_dir_inode_header dir;
-+ struct squashfs_ldir_inode_header ldir;
-+ struct squashfs_ipc_inode_header ipc;
-+};
-+
-+struct squashfs_dir_entry {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ int inode_number:16;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_header {
-+ unsigned int count:8;
-+ unsigned int start_block;
-+ unsigned int inode_number;
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry {
-+ long long start_block;
-+ unsigned int size;
-+ unsigned int unused;
-+} __attribute__ ((packed));
-+
-+extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
-+extern int squashfs_uncompress_init(void);
-+extern int squashfs_uncompress_exit(void);
-+
-+/*
-+ * macros to convert each packed bitfield structure from little endian to big
-+ * endian and vice versa. These are needed when creating or using a filesystem
-+ * on a machine with different byte ordering to the target architecture.
-+ *
-+ */
-+
-+#define SQUASHFS_SWAP_START \
-+ int bits;\
-+ int b_pos;\
-+ unsigned long long val;\
-+ unsigned char *s;\
-+ unsigned char *d;
-+
-+#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
-+ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
-+ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
-+ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
-+ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
-+ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
-+ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
-+ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
-+ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
-+ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
-+ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
-+ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
-+ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
-+ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
-+ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
-+ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
-+ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
-+ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
-+ SQUASHFS_SWAP((s)->unused, d, 888, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header))\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dev_inode_header)); \
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_reg_inode_header));\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_lreg_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 224, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 147, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 155, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
-+ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 2);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 16)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_INTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 4);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 32)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 64)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * bits / 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ bits)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+
-+struct squashfs_base_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int type:4;
-+ unsigned int offset:4;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
-+ SQUASHFS_SWAP((s)->guid, d, 20, 4);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header_1));\
-+ SQUASHFS_SWAP((s)->type, d, 24, 4);\
-+ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_1));\
-+ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_1));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_1));\
-+ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_1));\
-+ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
-+}
-+
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+
-+struct squashfs_dir_index_2 {
-+ unsigned int index:27;
-+ unsigned int start_block:29;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_base_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+ unsigned int i_count:16;
-+ struct squashfs_dir_index_2 index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header_2 {
-+ struct squashfs_base_inode_header_2 base;
-+ struct squashfs_dev_inode_header_2 dev;
-+ struct squashfs_symlink_inode_header_2 symlink;
-+ struct squashfs_reg_inode_header_2 reg;
-+ struct squashfs_dir_inode_header_2 dir;
-+ struct squashfs_ldir_inode_header_2 ldir;
-+ struct squashfs_ipc_inode_header_2 ipc;
-+};
-+
-+struct squashfs_dir_header_2 {
-+ unsigned int count:8;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_entry_2 {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry_2 {
-+ unsigned int start_block;
-+ unsigned int size;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_2)); \
-+ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_2));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_2));\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
-+ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 27);\
-+ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
-+ SQUASHFS_SWAP((s)->size, d, 56, 8);\
-+}
-+#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 32, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2))
-+
-+#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
-+ sizeof(int))
-+
-+#endif
-+
-+#ifdef __KERNEL__
-+
-+/*
-+ * macros used to swap each structure entry, taking into account
-+ * bitfields and different bitfield placing conventions on differing
-+ * architectures
-+ */
-+
-+#include <asm/byteorder.h>
-+
-+#ifdef __BIG_ENDIAN
-+ /* convert from little endian to big endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, b_pos)
-+#else
-+ /* convert from big endian to little endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, 64 - tbits - b_pos)
-+#endif
-+
-+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
-+ b_pos = pos % 8;\
-+ val = 0;\
-+ s = (unsigned char *)p + (pos / 8);\
-+ d = ((unsigned char *) &val) + 7;\
-+ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
-+ *d-- = *s++;\
-+ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
-+}
-+
-+#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
-+
-+#endif
-+#endif
-Index: git/include/linux/squashfs_fs_i.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/linux/squashfs_fs_i.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,45 @@
-+#ifndef SQUASHFS_FS_I
-+#define SQUASHFS_FS_I
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_i.h
-+ */
-+
-+struct squashfs_inode_info {
-+ long long start_block;
-+ unsigned int offset;
-+ union {
-+ struct {
-+ long long fragment_start_block;
-+ unsigned int fragment_size;
-+ unsigned int fragment_offset;
-+ long long block_list_start;
-+ } s1;
-+ struct {
-+ long long directory_index_start;
-+ unsigned int directory_index_offset;
-+ unsigned int directory_index_count;
-+ unsigned int parent_inode;
-+ } s2;
-+ } u;
-+ struct inode vfs_inode;
-+};
-+#endif
-Index: git/include/linux/squashfs_fs_sb.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/include/linux/squashfs_fs_sb.h 2006-10-31 21:26:45.000000000 +0000
-@@ -0,0 +1,74 @@
-+#ifndef SQUASHFS_FS_SB
-+#define SQUASHFS_FS_SB
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_sb.h
-+ */
-+
-+#include <linux/squashfs_fs.h>
-+
-+struct squashfs_cache {
-+ long long block;
-+ int length;
-+ long long next_index;
-+ char *data;
-+};
-+
-+struct squashfs_fragment_cache {
-+ long long block;
-+ int length;
-+ unsigned int locked;
-+ char *data;
-+};
-+
-+struct squashfs_sb_info {
-+ struct squashfs_super_block sblk;
-+ int devblksize;
-+ int devblksize_log2;
-+ int swap;
-+ struct squashfs_cache *block_cache;
-+ struct squashfs_fragment_cache *fragment;
-+ int next_cache;
-+ int next_fragment;
-+ int next_meta_index;
-+ unsigned int *uid;
-+ unsigned int *guid;
-+ long long *fragment_index;
-+ unsigned int *fragment_index_2;
-+ unsigned int read_size;
-+ char *read_data;
-+ char *read_page;
-+ struct semaphore read_data_mutex;
-+ struct semaphore read_page_mutex;
-+ struct semaphore block_cache_mutex;
-+ struct semaphore fragment_mutex;
-+ struct semaphore meta_index_mutex;
-+ wait_queue_head_t waitq;
-+ wait_queue_head_t fragment_wait_queue;
-+ struct meta_index *meta_index;
-+ struct inode *(*iget)(struct super_block *s, squashfs_inode_t \
-+ inode);
-+ long long (*read_blocklist)(struct inode *inode, int \
-+ index, int readahead_blks, char *block_list, \
-+ unsigned short **block_p, unsigned int *bsize);
-+ int (*read_fragment_index_table)(struct super_block *s);
-+};
-+#endif
-Index: git/init/do_mounts_rd.c
-===================================================================
---- git.orig/init/do_mounts_rd.c 2006-10-31 16:09:47.000000000 +0000
-+++ git/init/do_mounts_rd.c 2006-10-31 21:26:45.000000000 +0000
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/cramfs_fs.h>
-+#include <linux/squashfs_fs.h>
- #include <linux/initrd.h>
- #include <linux/string.h>
-
-@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
- * numbers could not be found.
- *
- * We currently check for the following magic numbers:
-+ * squashfs
- * minix
- * ext2
- * romfs
-@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
- struct ext2_super_block *ext2sb;
- struct romfs_super_block *romfsb;
- struct cramfs_super *cramfsb;
-+ struct squashfs_super_block *squashfsb;
- int nblocks = -1;
- unsigned char *buf;
-
-@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
- ext2sb = (struct ext2_super_block *) buf;
- romfsb = (struct romfs_super_block *) buf;
- cramfsb = (struct cramfs_super *) buf;
-+ squashfsb = (struct squashfs_super_block *) buf;
- memset(buf, 0xe5, size);
-
- /*
-@@ -101,6 +105,15 @@ identify_ramdisk_image(int fd, int start
- goto done;
- }
-
-+ /* squashfs is at block zero too */
-+ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
-+ printk(KERN_NOTICE
-+ "RAMDISK: squashfs filesystem found at block %d\n",
-+ start_block);
-+ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
-+ goto done;
-+ }
-+
- /*
- * Read block 1 to test for minix and ext2 superblock
- */
diff --git a/packages/linux/linux-rp-2.6.21/vesafb-tng-1.0-rc2-2.6.20-rc2.patch b/packages/linux/linux-rp-2.6.21/vesafb-tng-1.0-rc2-2.6.20-rc2.patch
deleted file mode 100644
index b1b0fc3549..0000000000
--- a/packages/linux/linux-rp-2.6.21/vesafb-tng-1.0-rc2-2.6.20-rc2.patch
+++ /dev/null
@@ -1,3141 +0,0 @@
-diff --git a/Documentation/fb/vesafb.txt b/Documentation/fb/vesafb.txt
-index ee277dd..93d6e6e 100644
---- a/Documentation/fb/vesafb.txt
-+++ b/Documentation/fb/vesafb.txt
-@@ -2,16 +2,18 @@
- What is vesafb?
- ===============
-
--This is a generic driver for a graphic framebuffer on intel boxes.
-+Vesafb is a generic framebuffer driver for x86 and x86_64 boxes.
-
--The idea is simple: Turn on graphics mode at boot time with the help
--of the BIOS, and use this as framebuffer device /dev/fb0, like the m68k
--(and other) ports do.
-+VESA BIOS Extensions Version 2.0 are required, because we need access to
-+a linear frame buffer. VBE 3.0 is required if you want to use modes with a
-+higher (than the standard 60 Hz) refresh rate.
-
--This means we decide at boot time whenever we want to run in text or
--graphics mode. Switching mode later on (in protected mode) is
--impossible; BIOS calls work in real mode only. VESA BIOS Extensions
--Version 2.0 are required, because we need a linear frame buffer.
-+The VESA framebuffer driver comes in two flavors - the standard 'vesafb'
-+and 'vesafb-tng'. Vesafb-tng is available only on 32-bit x86 due to the
-+technology it uses (vm86). Vesafb-tng has more features than vesafb
-+(adjusting the refresh rate on VBE 3.0 compliant boards, switching the
-+video mode without rebooting, selecting a mode by providing its
-+modedb name, and more).
-
- Advantages:
-
-@@ -29,26 +31,35 @@ Disadvantages:
- How to use it?
- ==============
-
--Switching modes is done using the vga=... boot parameter. Read
--Documentation/svga.txt for details.
-+If you are running a 32-bit x86 system and you decide to use vesafb-tng,
-+you can either compile the driver into the kernel or use it as a module.
-+The graphics mode you want to use is in both cases specified using the
-+standard modedb format.
-
--You should compile in both vgacon (for text mode) and vesafb (for
--graphics mode). Which of them takes over the console depends on
--whenever the specified mode is text or graphics.
-+If your system doesn't support vm86 calls, things get a little more tricky.
-+Since on such systems you can't do BIOS calls from protected mode in which
-+kernel runs, you have to decide at boot time whenever you want to run in text
-+or in graphics mode. Switching mode later on is impossible. Switching modes
-+is done using the vga=... boot parameter. Read Documentation/svga.txt for
-+details. Below is a more detailed description of what to do on systems using
-+the standard vesafb driver.
-
--The graphic modes are NOT in the list which you get if you boot with
--vga=ask and hit return. The mode you wish to use is derived from the
--VESA mode number. Here are those VESA mode numbers:
-+You should compile in both vgacon (for text mode) and vesafb (for graphics
-+mode). Which of them takes over the console depends on whenever the
-+specified mode is text or graphics.
-+
-+The graphic modes are NOT in the list which you get if you boot with vga=ask
-+and hit return. The mode you wish to use is derived from the VESA mode number.
-+Here are those VESA mode numbers:
-
- | 640x480 800x600 1024x768 1280x1024
- ----+-------------------------------------
--256 | 0x101 0x103 0x105 0x107
--32k | 0x110 0x113 0x116 0x119
--64k | 0x111 0x114 0x117 0x11A
--16M | 0x112 0x115 0x118 0x11B
-+256 | 0x101 0x103 0x105 0x107
-+32k | 0x110 0x113 0x116 0x119
-+64k | 0x111 0x114 0x117 0x11A
-+16M | 0x112 0x115 0x118 0x11B
-
--The video mode number of the Linux kernel is the VESA mode number plus
--0x200.
-+The video mode number of the Linux kernel is the VESA mode number plus 0x200.
-
- Linux_kernel_mode_number = VESA_mode_number + 0x200
-
-@@ -56,15 +67,15 @@ So the table for the Kernel mode numbers are:
-
- | 640x480 800x600 1024x768 1280x1024
- ----+-------------------------------------
--256 | 0x301 0x303 0x305 0x307
--32k | 0x310 0x313 0x316 0x319
--64k | 0x311 0x314 0x317 0x31A
--16M | 0x312 0x315 0x318 0x31B
-+256 | 0x301 0x303 0x305 0x307
-+32k | 0x310 0x313 0x316 0x319
-+64k | 0x311 0x314 0x317 0x31A
-+16M | 0x312 0x315 0x318 0x31B
-
--To enable one of those modes you have to specify "vga=ask" in the
--lilo.conf file and rerun LILO. Then you can type in the desired
--mode at the "vga=ask" prompt. For example if you like to use
--1024x768x256 colors you have to say "305" at this prompt.
-+To enable one of those modes you have to specify "vga=ask" in the lilo.conf
-+file and rerun LILO. Then you can type in the desired mode at the "vga=ask"
-+prompt. For example if you like to use 1024x768x256 colors you have to say
-+"305" at this prompt.
-
- If this does not work, this might be because your BIOS does not support
- linear framebuffers or because it does not support this mode at all.
-@@ -72,11 +83,12 @@ Even if your board does, it might be the BIOS which does not. VESA BIOS
- Extensions v2.0 are required, 1.2 is NOT sufficient. You will get a
- "bad mode number" message if something goes wrong.
-
--1. Note: LILO cannot handle hex, for booting directly with
-+1. Note: LILO cannot handle hex, for booting directly with
- "vga=mode-number" you have to transform the numbers to decimal.
- 2. Note: Some newer versions of LILO appear to work with those hex values,
- if you set the 0x in front of the numbers.
-
-+
- X11
- ===
-
-@@ -84,98 +96,164 @@ XF68_FBDev should work just fine, but it is non-accelerated. Running
- another (accelerated) X-Server like XF86_SVGA might or might not work.
- It depends on X-Server and graphics board.
-
--The X-Server must restore the video mode correctly, else you end up
-+The X-Server must restore the video mode correctly, or else you end up
- with a broken console (and vesafb cannot do anything about this).
-+With vesafb-tng chances are that the console will be restored properly
-+even if the X server messes up the video mode.
-
-
- Refresh rates
- =============
-
--There is no way to change the vesafb video mode and/or timings after
--booting linux. If you are not happy with the 60 Hz refresh rate, you
--have these options:
-+With VBE 3.0 compatible BIOSes and vesafb-tng it is possible to change
-+the refresh rate either at boot time (by specifying the @<rr> part of
-+the mode name) or later, using the fbset utility.
-+
-+If you want to use the default BIOS refresh rate while switching modes
-+on a running system, set pixclock to 0.
-
-- * configure and load the DOS-Tools for your the graphics board (if
-- available) and boot linux with loadlin.
-- * use a native driver (matroxfb/atyfb) instead if vesafb. If none
-+With VBE 2.0 there is no way to change the mode timings after booting
-+Linux. If you are not happy with the 60 Hz refresh rate, you have
-+the following options:
-+
-+ * Configure and load the DOS tools for your the graphics board (if
-+ available) and boot Linux with loadlin.
-+ * Use a native driver (matroxfb/atyfb) instead of vesafb. If none
- is available, write a new one!
-- * VBE 3.0 might work too. I have neither a gfx board with VBE 3.0
-- support nor the specs, so I have not checked this yet.
-+ * Use a BIOS editor to change the default refresh rate (such an
-+ editor does exist at least for ATI Radeon BIOSes).
-+ * If you're running a non-vm86 and VBE 3.0 compatible system, you can
-+ use a kernel patch (vesafb-rrc) to hard-code some mode timings in
-+ the kernel and use these while setting the video mode at boot time.
-+
-+Note that there are some boards (nVidia 59**, 57** and newer models)
-+claiming that their Video BIOS is VBE 3.0 compliant, while ignoring the
-+CRTC values provided by software such as vesafb-tng. You'll not be able
-+to adjust the refresh rate if you're using one of these boards.
-
-
- Configuration
- =============
-
--The VESA BIOS provides protected mode interface for changing
--some parameters. vesafb can use it for palette changes and
--to pan the display. It is turned off by default because it
--seems not to work with some BIOS versions, but there are options
--to turn it on.
--
--You can pass options to vesafb using "video=vesafb:option" on
--the kernel command line. Multiple options should be separated
--by comma, like this: "video=vesafb:ypan,invers"
--
--Accepted options:
--
--invers no comment...
--
--ypan enable display panning using the VESA protected mode
-- interface. The visible screen is just a window of the
-- video memory, console scrolling is done by changing the
-- start of the window.
-- pro: * scrolling (fullscreen) is fast, because there is
-- no need to copy around data.
-- * You'll get scrollback (the Shift-PgUp thing),
-- the video memory can be used as scrollback buffer
-- kontra: * scrolling only parts of the screen causes some
-- ugly flicker effects (boot logo flickers for
-- example).
--
--ywrap Same as ypan, but assumes your gfx board can wrap-around
-- the video memory (i.e. starts reading from top if it
-- reaches the end of video memory). Faster than ypan.
--
--redraw scroll by redrawing the affected part of the screen, this
-- is the safe (and slow) default.
--
--
--vgapal Use the standard vga registers for palette changes.
-- This is the default.
--pmipal Use the protected mode interface for palette changes.
--
--mtrr:n setup memory type range registers for the vesafb framebuffer
-- where n:
-- 0 - disabled (equivalent to nomtrr) (default)
-- 1 - uncachable
-- 2 - write-back
-- 3 - write-combining
-- 4 - write-through
--
-- If you see the following in dmesg, choose the type that matches the
-- old one. In this example, use "mtrr:2".
-+The VESA BIOS provides protected mode interface for changing some parameters.
-+vesafb can use it for palette changes and to pan the display. It is turned
-+off by default because it seems not to work with some BIOS versions, but
-+there are options to turn it on.
-+
-+You can pass options to vesafb using "video=vesafb:option" on the kernel
-+command line. Multiple options should be separated by a comma, like this:
-+"video=vesafb:ypan,1024x768-32@85"
-+
-+Note that vesafb-tng still uses the "video=vesafb:option" format of the
-+kernel command line video parameter. "video=vesafb-tng:xxx" is incorrect.
-+
-+Accepted options (both vesafb and vesafb-tng):
-+
-+ypan Enable display panning using the VESA protected mode interface
-+ The visible screen is just a window of the video memory,
-+ console scrolling is done by changing the start of the window.
-+ pro: * scrolling (fullscreen) is fast, because there is
-+ no need to copy around data.
-+ * you'll get scrollback (the Shift-PgUp thing),
-+ the video memory can be used as scrollback buffer
-+ con: * scrolling only parts of the screen causes some
-+ ugly flicker effects (boot logo flickers for
-+ example).
-+
-+ywrap Same as ypan, but assumes your gfx board can wrap-around the video
-+ memory (i.e. starts reading from top if it reaches the end of
-+ video memory). Faster than ypan.
-+
-+redraw Scroll by redrawing the affected part of the screen, this is the
-+ safe (and slow) default.
-+
-+vgapal Use the standard VGA registers for palette changes.
-+
-+pmipal Use the protected mode interface for palette changes.
-+ This is the default is the protected mode interface is available.
-+
-+mtrr:n Setup memory type range registers for the vesafb framebuffer
-+ where n:
-+ 0 - disabled (equivalent to nomtrr) (default)
-+ 1 - uncachable
-+ 2 - write-back
-+ 3 - write-combining
-+ 4 - write-through
-+
-+ If you see the following in dmesg, choose the type that matches
-+ the old one. In this example, use "mtrr:2".
- ...
- mtrr: type mismatch for e0000000,8000000 old: write-back new: write-combining
- ...
-
--nomtrr disable mtrr
-+nomtrr Do not use memory type range registers for vesafb.
-
- vremap:n
- remap 'n' MiB of video RAM. If 0 or not specified, remap memory
-- according to video mode. (2.5.66 patch/idea by Antonino Daplas
-- reversed to give override possibility (allocate more fb memory
-- than the kernel would) to 2.4 by tmb@iki.fi)
-+ according to video mode. (2.5.66 patch/idea by Antonino Daplas
-+ reversed to give override possibility (allocate more fb memory
-+ than the kernel would) to 2.4 by tmb@iki.fi)
-
- vtotal:n
- if the video BIOS of your card incorrectly determines the total
- amount of video RAM, use this option to override the BIOS (in MiB).
-
--Have fun!
-+Options accepted only by vesafb-tng:
-+
-+<mode> The mode you want to set, in the standard modedb format. Refer to
-+ modedb.txt for a detailed description. If you specify a mode that is
-+ not supported by your board's BIOS, vesafb-tng will attempt to set a
-+ similar mode. The list of supported modes can be found in
-+ /proc/fbx/modes, where x is the framebuffer number (usually 0).
-+ When vesafb-tng is compiled as a module, the mode string should be
-+ provided as a value of the parameter 'mode'.
-+
-+vbemode:x
-+ Force the use of VBE mode x. The mode will only be set if it's
-+ found in the VBE-provided list of supported modes.
-+ NOTE: The mode number 'x' should be specified in VESA mode number
-+ notation, not the Linux kernel one (eg. 257 instead of 769).
-+ HINT: If you use this option because normal <mode> parameter does
-+ not work for you and you use a X server, you'll probably want to
-+ set the 'nocrtc' option to ensure that the video mode is properly
-+ restored after console <-> X switches.
-+
-+nocrtc Do not use CRTC timings while setting the video mode. This option
-+ makes sence only with VBE 3.0 compliant systems. Use it if you have
-+ problems with modes set in the standard way. Note that using this
-+ option means that any refresh rate adjustments will be ignored
-+ and the refresh rate will stay at your BIOS default (60 Hz).
-+
-+noedid Do not try to fetch and use EDID-provided modes.
-+
-+noblank Disable hardware blanking.
-+
-+gtf Force the use of VESA's GTF (Generalized Timing Formula). Specifying
-+ this will cause vesafb to skip its internal modedb and EDID-modedb
-+ and jump straight to the GTF part of the code (normally used only if
-+ everything else failed). This can be useful if you want to get as
-+ much as possible from your graphics board but your BIOS doesn't
-+ support modes with the refresh rates you require. Note that you may
-+ need to specify the maxhf, maxvf and maxclk parameters if they are not
-+ provided by the EDID block.
-+
-+Additionally, the following parameters may be provided. They all override the
-+EDID-provided values and BIOS defaults. Refer to your monitor's specs to get
-+the correct values for maxhf, maxvf and maxclk for your hardware.
-+
-+maxhf:n Maximum horizontal frequency (in kHz).
-+maxvf:n Maximum vertical frequency (in Hz).
-+maxclk:n Maximum pixel clock (in MHz).
-
-- Gerd
-+Have fun!
-
- --
-+Original document for the vesafb driver by
- Gerd Knorr <kraxel@goldbach.in-berlin.de>
-
--Minor (mostly typo) changes
--by Nico Schmoigl <schmoigl@rumms.uni-mannheim.de>
-+Minor (mostly typo) changes by
-+Nico Schmoigl <schmoigl@rumms.uni-mannheim.de>
-+
-+Extended documentation for vm86, VBE 3.0 and vesafb-tng by
-+Michal Januszewski <spock@gentoo.org>
-+
-diff --git a/arch/i386/boot/video.S b/arch/i386/boot/video.S
-index 2c5b5cc..2c2d4b5 100644
---- a/arch/i386/boot/video.S
-+++ b/arch/i386/boot/video.S
-@@ -163,10 +163,12 @@ basret: ret
- # parameters in the default 80x25 mode -- these are set directly,
- # because some very obscure BIOSes supply insane values.
- mode_params:
-+#ifdef CONFIG_FB_VESA_STD
- #ifdef CONFIG_VIDEO_SELECT
- cmpb $0, graphic_mode
- jnz mopar_gr
- #endif
-+#endif
- movb $0x03, %ah # Read cursor position
- xorb %bh, %bh
- int $0x10
-@@ -199,6 +201,7 @@ mopar2: movb %al, %fs:(PARAM_VIDEO_LINES)
- ret
-
- #ifdef CONFIG_VIDEO_SELECT
-+#ifdef CONFIG_FB_VESA_STD
- # Fetching of VESA frame buffer parameters
- mopar_gr:
- leaw modelist+1024, %di
-@@ -281,6 +284,7 @@ dac_done:
- movw %es, %fs:(PARAM_VESAPM_SEG)
- movw %di, %fs:(PARAM_VESAPM_OFF)
- no_pm: ret
-+#endif
-
- # The video mode menu
- mode_menu:
-@@ -495,10 +499,12 @@ mode_set:
-
- cmpb $VIDEO_FIRST_V7>>8, %ah
- jz setv7
--
-+
-+#ifdef CONFIG_FB_VESA_STD
- cmpb $VIDEO_FIRST_VESA>>8, %ah
- jnc check_vesa
--
-+#endif
-+
- orb %ah, %ah
- jz setmenu
-
-@@ -570,6 +576,7 @@ setr1: lodsw
- movw -4(%si), %ax # Fetch mode ID
- jmp _m_s
-
-+#ifdef CONFIG_FB_VESA_STD
- check_vesa:
- leaw modelist+1024, %di
- subb $VIDEO_FIRST_VESA>>8, %bh
-@@ -603,6 +610,7 @@ check_vesa:
- ret
-
- _setbad: jmp setbad # Ugly...
-+#endif
-
- # Recalculate vertical display end registers -- this fixes various
- # inconsistencies of extended modes on many adapters. Called when
-diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c
-index 1393523..8a05f95 100644
---- a/drivers/char/sysrq.c
-+++ b/drivers/char/sysrq.c
-@@ -240,7 +240,7 @@ static void send_sig_all(int sig)
- struct task_struct *p;
-
- for_each_process(p) {
-- if (p->mm && !is_init(p))
-+ if (p->mm && !is_init(p) && !(p->flags & PF_BORROWED_MM))
- /* Not swapper, init nor kernel thread */
- force_sig(sig, p);
- }
-diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
-index 4e83f01..ae122fd 100644
---- a/drivers/video/Kconfig
-+++ b/drivers/video/Kconfig
-@@ -547,8 +547,22 @@ config FB_TGA
- cards. Say Y if you have one of those.
-
- config FB_VESA
-- bool "VESA VGA graphics support"
-- depends on (FB = y) && X86
-+ tristate "VESA VGA graphics support"
-+ depends on (FB = y) && (X86 || X86_64)
-+ help
-+ This is the frame buffer device driver for generic VESA 2.0
-+ compliant graphic cards. The older VESA 1.2 cards are not supported.
-+ You will get a boot time penguin logo at no additional cost. Please
-+ read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
-+
-+choice
-+ prompt "VESA driver type"
-+ depends on FB_VESA
-+ default FB_VESA_STD if X86_64
-+ default FB_VESA_TNG if X86
-+
-+config FB_VESA_STD
-+ bool "vesafb"
- select FB_CFB_FILLRECT
- select FB_CFB_COPYAREA
- select FB_CFB_IMAGEBLIT
-@@ -557,7 +571,43 @@ config FB_VESA
- This is the frame buffer device driver for generic VESA 2.0
- compliant graphic cards. The older VESA 1.2 cards are not supported.
- You will get a boot time penguin logo at no additional cost. Please
-- read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
-+ read <file:Documentation/fb/vesafb.txt>. Choose this driver if you
-+ are experiencing problems with vesafb-tng or if you own a 64-bit system.
-+
-+ Note that this driver cannot be compiled as a module.
-+
-+config FB_VESA_TNG
-+ bool "vesafb-tng"
-+ depends on !X86_64
-+ select FB_MODE_HELPERS
-+ select FB_CFB_FILLRECT
-+ select FB_CFB_COPYAREA
-+ select FB_CFB_IMAGEBLIT
-+ help
-+ This is an enhanced generic frame buffer device driver for
-+ VBE 2.0 compliant graphic cards. It can take advantage of VBE 3.0
-+ features (refresh rate adjustment) when these are available.
-+ The driver also makes it possible to change the video mode
-+ on the fly and to switch back to text mode when it's unloaded.
-+
-+ If the driver is compiled as a module, the module will be called
-+ vesafb-tng.
-+
-+endchoice
-+
-+config FB_VESA_DEFAULT_MODE
-+ string "VESA default mode"
-+ depends on FB_VESA_TNG
-+ default "640x480@60"
-+ help
-+ This option is used to determine the default mode vesafb is
-+ supposed to switch to in case no mode is provided as a kernel
-+ command line parameter.
-+
-+config VIDEO_SELECT
-+ bool
-+ depends on FB_VESA
-+ default y
-
- config FB_IMAC
- bool "Intel-based Macintosh Framebuffer Support"
-diff --git a/drivers/video/Makefile b/drivers/video/Makefile
-index 309a26d..e57b0e7 100644
---- a/drivers/video/Makefile
-+++ b/drivers/video/Makefile
-@@ -102,7 +102,11 @@ obj-$(CONFIG_FB_PNX4008_DUM_RGB) += pnx4008/
- obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o
-
- # Platform or fallback drivers go here
--obj-$(CONFIG_FB_VESA) += vesafb.o
-+ifeq ($(CONFIG_FB_VESA_STD),y)
-+ obj-y += vesafb.o
-+else
-+ obj-$(CONFIG_FB_VESA) += vesafb-thread.o vesafb-tng.o
-+endif
- obj-$(CONFIG_FB_IMAC) += imacfb.o
- obj-$(CONFIG_FB_VGA16) += vga16fb.o vgastate.o
- obj-$(CONFIG_FB_OF) += offb.o
-diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
-index 3cfea31..bfb39cc 100644
---- a/drivers/video/fbmem.c
-+++ b/drivers/video/fbmem.c
-@@ -1408,6 +1408,7 @@ fbmem_init(void)
- printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
- fb_class = NULL;
- }
-+
- return 0;
- }
-
-diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c
-index 5df41f6..f838a53 100644
---- a/drivers/video/modedb.c
-+++ b/drivers/video/modedb.c
-@@ -674,6 +674,7 @@ void fb_var_to_videomode(struct fb_videomode *mode,
- {
- u32 pixclock, hfreq, htotal, vtotal;
-
-+ mode->refresh = 0;
- mode->name = NULL;
- mode->xres = var->xres;
- mode->yres = var->yres;
-@@ -1025,3 +1026,4 @@ EXPORT_SYMBOL(fb_find_best_mode);
- EXPORT_SYMBOL(fb_find_nearest_mode);
- EXPORT_SYMBOL(fb_videomode_to_modelist);
- EXPORT_SYMBOL(fb_find_mode);
-+EXPORT_SYMBOL(fb_destroy_modelist);
-diff --git a/drivers/video/vesafb-thread.c b/drivers/video/vesafb-thread.c
-new file mode 100644
-index 0000000..543e202
---- /dev/null
-+++ b/drivers/video/vesafb-thread.c
-@@ -0,0 +1,751 @@
-+/*
-+ * Framebuffer driver for VBE 2.0+ compliant graphic boards.
-+ * Kernel thread and vm86 routines.
-+ *
-+ * (c) 2004-2006 Michal Januszewski <spock@gentoo.org>
-+ *
-+ */
-+
-+#include <linux/workqueue.h>
-+#include <linux/completion.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/mm.h>
-+#include <linux/delay.h>
-+#include <linux/signal.h>
-+#include <linux/freezer.h>
-+#include <linux/suspend.h>
-+#include <linux/unistd.h>
-+#include <video/vesa.h>
-+#include <video/edid.h>
-+#include <asm/mman.h>
-+#include <asm/page.h>
-+#include <asm/vm86.h>
-+#include <asm/thread_info.h>
-+#include <asm/uaccess.h>
-+#include <asm/mmu_context.h>
-+#include "edid.h"
-+
-+static int errno;
-+
-+static DECLARE_COMPLETION(vesafb_th_completion);
-+static DECLARE_MUTEX(vesafb_task_list_sem);
-+static LIST_HEAD(vesafb_task_list);
-+static DECLARE_WAIT_QUEUE_HEAD(vesafb_wait);
-+
-+static struct vm86_struct vm86;
-+static int vesafb_pid = 0;
-+
-+#define DEFAULT_VM86_FLAGS (IF_MASK | IOPL_MASK)
-+#define VM86_PUSHW(x) \
-+do { \
-+ vm86.regs.esp -= 2; \
-+ *(u16*)(STACK_ADDR + vm86.regs.esp) = x; \
-+} while(0);
-+
-+/* Stack, the return code and buffers will be put into
-+ * one contiguous memory chunk:
-+ *
-+ * [ STACK | RET_CODE | BUFFER ]
-+ *
-+ * Some video BIOSes (sis6326) try to store data somewhere
-+ * in 0x7000-0x7fff, so we zeromap more memory to be safe.
-+ */
-+#define IVTBDA_SIZE PAGE_SIZE
-+#define RET_CODE_SIZE 0x0010
-+#define STACK_SIZE 0x0500
-+#define BUFFER_SIZE 0x10000
-+
-+/* The amount of memory that will be allocated should be a multiple
-+ * of PAGE_SIZE. */
-+#define __MEM_SIZE (RET_CODE_SIZE + STACK_SIZE + BUFFER_SIZE)
-+#define REAL_MEM_SIZE (((__MEM_SIZE / PAGE_SIZE) + 1) * PAGE_SIZE)
-+
-+#define IVTBDA_ADDR 0x00000
-+#define STACK_ADDR (IVTBDA_ADDR + IVTBDA_SIZE)
-+#define RET_CODE_ADDR (STACK_ADDR + STACK_SIZE)
-+#define BUF_ADDR (RET_CODE_ADDR + RET_CODE_SIZE)
-+
-+#define FLAG_D (1 << 10)
-+
-+/* Syscalls used by the vesafb thread */
-+static int vm86old(struct vm86_struct __user* v86)
-+{
-+ long res;
-+ __asm__ volatile ("push %%ebx; movl %2, %%ebx ; int $0x80 ; pop %%ebx"
-+ : "=a" (res)
-+ : "0" (__NR_vm86old), "ri" ((long)(v86)) : "memory");
-+
-+ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) {
-+ errno = -res;
-+ res = -1;
-+ }
-+ return (int)res;
-+}
-+
-+static int ioperm(unsigned long a, unsigned long b, unsigned long c)
-+{
-+ long res;
-+ __asm__ volatile ("push %%ebx; movl %2, %%ebx ; int $0x80 ; pop %%ebx"
-+ : "=a" (res)
-+ : "0" (__NR_ioperm), "ri" ((long)(a)), "c" ((long)(b)),
-+ "d" ((long)(c)) : "memory");
-+
-+ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) {
-+ errno = -res;
-+ res = -1;
-+ }
-+ return (int)res;
-+}
-+
-+/* Segment prefix opcodes */
-+enum {
-+ P_CS = 0x2e,
-+ P_SS = 0x36,
-+ P_DS = 0x3e,
-+ P_ES = 0x26,
-+ P_FS = 0x64,
-+ P_GS = 0x65
-+};
-+
-+/* Emulated vm86 ins instruction */
-+static void vm86_ins(int size)
-+{
-+ u32 edx, edi;
-+ edx = vm86.regs.edx & 0xffff;
-+ edi = (vm86.regs.edi & 0xffff) + (u32)(vm86.regs.es << 4);
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("std\n");
-+ else
-+ asm volatile ("cld\n");
-+
-+ switch (size) {
-+ case 4:
-+ asm volatile ("insl\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ case 2:
-+ asm volatile ("insw\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ case 1:
-+ asm volatile ("insb\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ }
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("cld\n");
-+
-+ edi -= (u32)(vm86.regs.es << 4);
-+
-+ vm86.regs.edi &= 0xffff0000;
-+ vm86.regs.edi |= edi & 0xffff;
-+}
-+
-+static void vm86_rep_ins(int size)
-+{
-+ u16 cx = vm86.regs.ecx;
-+ while (cx--)
-+ vm86_ins(size);
-+
-+ vm86.regs.ecx &= 0xffff0000;
-+}
-+
-+/* Emulated vm86 outs instruction */
-+static void vm86_outs(int size, int segment)
-+{
-+ u32 edx, esi, base;
-+
-+ edx = vm86.regs.edx & 0xffff;
-+ esi = vm86.regs.esi & 0xffff;
-+
-+ switch (segment) {
-+ case P_CS: base = vm86.regs.cs; break;
-+ case P_SS: base = vm86.regs.ss; break;
-+ case P_ES: base = vm86.regs.es; break;
-+ case P_FS: base = vm86.regs.fs; break;
-+ case P_GS: base = vm86.regs.gs; break;
-+ default: base = vm86.regs.ds; break;
-+ }
-+
-+ esi += base << 4;
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("std\n");
-+ else
-+ asm volatile ("cld\n");
-+
-+ switch (size) {
-+ case 4:
-+ asm volatile ("outsl\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ case 2:
-+ asm volatile ("outsw\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ case 1:
-+ asm volatile ("outsb\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ }
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("cld");
-+
-+ esi -= base << 4;
-+ vm86.regs.esi &= 0xffff0000;
-+ vm86.regs.esi |= (esi & 0xffff);
-+}
-+
-+static void vm86_rep_outs(int size, int segment)
-+{
-+ u16 cx = vm86.regs.ecx;
-+ while (cx--)
-+ vm86_outs(size, segment);
-+
-+ vm86.regs.ecx &= 0xffff0000;
-+}
-+
-+static int vm86_do_unknown(void)
-+{
-+ u8 data32 = 0, segment = P_DS, rep = 0;
-+ u8 *instr;
-+ int ret = 0, i = 0;
-+
-+ instr = (u8*)((vm86.regs.cs << 4) + vm86.regs.eip);
-+
-+ while (1) {
-+ switch(instr[i]) {
-+ case 0x66: /* operand size prefix */
-+ data32 = 1 - data32;
-+ i++;
-+ break;
-+ case 0xf2: /* repnz */
-+ case 0xf3: /* rep */
-+ rep = 1;
-+ i++;
-+ break;
-+ case P_CS: /* segment prefix */
-+ case P_SS:
-+ case P_DS:
-+ case P_ES:
-+ case P_FS:
-+ case P_GS:
-+ segment = instr[i];
-+ i++;
-+ break;
-+ case 0xf0: /* LOCK - ignored */
-+ case 0x67: /* address size prefix - ignored */
-+ i++;
-+ break;
-+ case 0x6c: /* insb */
-+ if (rep)
-+ vm86_rep_ins(1);
-+ else
-+ vm86_ins(1);
-+ i++;
-+ goto out;
-+ case 0x6d: /* insw / insd */
-+ if (rep) {
-+ if (data32)
-+ vm86_rep_ins(4);
-+ else
-+ vm86_rep_ins(2);
-+ } else {
-+ if (data32)
-+ vm86_ins(4);
-+ else
-+ vm86_ins(2);
-+ }
-+ i++;
-+ goto out;
-+ case 0x6e: /* outsb */
-+ if (rep)
-+ vm86_rep_outs(1, segment);
-+ else
-+ vm86_outs(1, segment);
-+ i++;
-+ goto out;
-+ case 0x6f: /* outsw / outsd */
-+ if (rep) {
-+ if (data32)
-+ vm86_rep_outs(4, segment);
-+ else
-+ vm86_rep_outs(2, segment);
-+ } else {
-+ if (data32)
-+ vm86_outs(4, segment);
-+ else
-+ vm86_outs(2, segment);
-+ }
-+ i++;
-+ goto out;
-+ case 0xe4: /* inb xx */
-+ asm volatile (
-+ "inb %w1, %b0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]), "0" (vm86.regs.eax));
-+ i += 2;
-+ goto out;
-+ case 0xe5: /* inw xx / ind xx */
-+ if (data32) {
-+ asm volatile (
-+ "inl %w1, %0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]),
-+ "0" (vm86.regs.eax));
-+ } else {
-+ asm volatile (
-+ "inw %w1, %w0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]),
-+ "0" (vm86.regs.eax));
-+ }
-+ i += 2;
-+ goto out;
-+
-+ case 0xec: /* inb dx */
-+ asm volatile (
-+ "inb %w1, %b0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx), "0" (vm86.regs.eax));
-+ i++;
-+ goto out;
-+ case 0xed: /* inw dx / ind dx */
-+ if (data32) {
-+ asm volatile (
-+ "inl %w1, %0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx));
-+ } else {
-+ asm volatile (
-+ "inw %w1, %w0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx));
-+ }
-+ i++;
-+ goto out;
-+ case 0xe6: /* outb xx */
-+ asm volatile (
-+ "outb %b0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax), "d" (instr[i+1]));
-+ i += 2;
-+ goto out;
-+ case 0xe7: /* outw xx / outd xx */
-+ if (data32) {
-+ asm volatile (
-+ "outl %0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (instr[i+1]));
-+ } else {
-+ asm volatile (
-+ "outw %w0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (instr[i+1]));
-+ }
-+ i += 2;
-+ goto out;
-+ case 0xee: /* outb dx */
-+ asm volatile (
-+ "outb %b0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax), "d" (vm86.regs.edx));
-+ i++;
-+ goto out;
-+ case 0xef: /* outw dx / outd dx */
-+ if (data32) {
-+ asm volatile (
-+ "outl %0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (vm86.regs.edx));
-+ } else {
-+ asm volatile (
-+ "outw %w0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (vm86.regs.edx));
-+ }
-+ i++;
-+ goto out;
-+ default:
-+ printk(KERN_ERR "vesafb: BUG, opcode 0x%x emulation "
-+ "not supported (EIP: 0x%lx)\n",
-+ instr[i], (u32)(vm86.regs.cs << 4) +
-+ vm86.regs.eip);
-+ ret = 1;
-+ goto out;
-+ }
-+ }
-+out: vm86.regs.eip += i;
-+ return ret;
-+}
-+
-+void vesafb_do_vm86(struct vm86_regs *regs)
-+{
-+ unsigned int ret;
-+ u8 *retcode = (void*)RET_CODE_ADDR;
-+
-+ memset(&vm86,0,sizeof(vm86));
-+ memcpy(&vm86.regs, regs, sizeof(struct vm86_regs));
-+
-+ /* The return code */
-+ retcode[0] = 0xcd; /* int opcode */
-+ retcode[1] = 0xff; /* int number (255) */
-+
-+ /* We use int 0xff to get back to protected mode */
-+ memset(&vm86.int_revectored, 0, sizeof(vm86.int_revectored));
-+ ((unsigned char *)&vm86.int_revectored)[0xff / 8] |= (1 << (0xff % 8));
-+
-+ /*
-+ * We want to call int 0x10, so we set:
-+ * CS = 0x42 = 0x10 * 4 + 2
-+ * IP = 0x40 = 0x10 * 4
-+ * and SS:ESP. It's up to the caller to set the rest of the registers.
-+ */
-+ vm86.regs.eflags = DEFAULT_VM86_FLAGS;
-+ vm86.regs.cs = *(unsigned short *)0x42;
-+ vm86.regs.eip = *(unsigned short *)0x40;
-+ vm86.regs.ss = (STACK_ADDR >> 4);
-+ vm86.regs.esp = ((STACK_ADDR & 0x0000f) + STACK_SIZE);
-+
-+ /* These will be fetched off the stack when we come to an iret in the
-+ * int's 0x10 code. */
-+ VM86_PUSHW(DEFAULT_VM86_FLAGS);
-+ VM86_PUSHW((RET_CODE_ADDR >> 4)); /* return code segment */
-+ VM86_PUSHW((RET_CODE_ADDR & 0x0000f)); /* return code offset */
-+
-+ while(1) {
-+ ret = vm86old(&vm86);
-+
-+ if (VM86_TYPE(ret) == VM86_INTx) {
-+ int vint = VM86_ARG(ret);
-+
-+ /* If exit from vm86 was caused by int 0xff, then
-+ * we're done.. */
-+ if (vint == 0xff)
-+ goto out;
-+
-+ /* .. otherwise, we have to call the int handler
-+ * manually */
-+ VM86_PUSHW(vm86.regs.eflags);
-+ VM86_PUSHW(vm86.regs.cs);
-+ VM86_PUSHW(vm86.regs.eip);
-+
-+ vm86.regs.cs = *(u16 *)((vint << 2) + 2);
-+ vm86.regs.eip = *(u16 *)(vint << 2);
-+ vm86.regs.eflags &= ~(VIF_MASK | TF_MASK);
-+ } else if (VM86_TYPE(ret) == VM86_UNKNOWN) {
-+ if (vm86_do_unknown())
-+ goto out;
-+ } else {
-+ printk(KERN_ERR "vesafb: BUG, returned from "
-+ "vm86 with %x (EIP: 0x%lx)\n",
-+ ret, (u32)(vm86.regs.cs << 4) +
-+ vm86.regs.eip);
-+ goto out;
-+ }
-+ }
-+
-+out: /* copy the registers' state back to the caller's struct */
-+ memcpy(regs, &vm86.regs, sizeof(struct vm86_regs));
-+}
-+
-+static int vesafb_remap_pfn_range(unsigned long start, unsigned long end,
-+ unsigned long pgoff, unsigned long prot,
-+ int type)
-+{
-+ struct vm_area_struct *vma;
-+ struct mm_struct *mm = current->mm;
-+ int ret = 0;
-+
-+ vma = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
-+ if (!vma)
-+ return -ENOMEM;
-+ memset(vma, 0, sizeof(*vma));
-+ down_write(&mm->mmap_sem);
-+ vma->vm_mm = mm;
-+ vma->vm_start = start;
-+ vma->vm_end = end;
-+ vma->vm_flags = VM_READ | VM_WRITE | VM_EXEC;
-+ vma->vm_flags |= mm->def_flags;
-+ vma->vm_page_prot.pgprot = prot;
-+ vma->vm_pgoff = pgoff;
-+
-+ if ((ret = insert_vm_struct(mm, vma))) {
-+ up_write(&mm->mmap_sem);
-+ kmem_cache_free(vm_area_cachep, vma);
-+ return ret;
-+ }
-+
-+ if (type) {
-+ ret = zeromap_page_range(vma,
-+ vma->vm_start,
-+ vma->vm_end - vma->vm_start,
-+ vma->vm_page_prot);
-+ } else {
-+ vma->vm_flags |= VM_SHARED;
-+ ret = remap_pfn_range(vma,
-+ vma->vm_start,
-+ vma->vm_pgoff,
-+ vma->vm_end - vma->vm_start,
-+ vma->vm_page_prot);
-+ }
-+ up_write(&mm->mmap_sem);
-+ return ret;
-+}
-+
-+static inline int vesafb_init_mem(void)
-+{
-+ int ret = 0;
-+
-+ /* The memory chunks we're remapping here should be multiples
-+ * of PAGE_SIZE. */
-+ ret += vesafb_remap_pfn_range(0x00000, IVTBDA_SIZE, 0,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 0);
-+ ret += vesafb_remap_pfn_range(IVTBDA_SIZE, REAL_MEM_SIZE, 0,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 1);
-+ ret += vesafb_remap_pfn_range(0x9f000, 0x100000,
-+ 0x9f000 >> PAGE_SHIFT,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 0);
-+ if (ret)
-+ printk(KERN_ERR "vesafb thread: memory remapping failed\n");
-+
-+ return ret;
-+}
-+
-+#define vesafb_get_string(str) \
-+{ \
-+ /* The address is in the form ssssoooo, where oooo = offset, \
-+ * ssss = segment */ \
-+ addr = ((p_vbe(tsk->buf)->str & 0xffff0000) >> 12) + \
-+ (p_vbe(tsk->buf)->str & 0x0000ffff); \
-+ \
-+ /* The data is in ROM which is shared between processes, so we \
-+ * just translate the real mode address into one visible from \
-+ * kernel space */ \
-+ if (addr >= 0xa0000) { \
-+ p_vbe(tsk->buf)->str = (u32) __va(addr); \
-+ \
-+ /* The data is in the buffer, we just have to convert the \
-+ * address so that it points into the buffer user provided. */ \
-+ } else if (addr > BUF_ADDR && addr < BUF_ADDR + \
-+ sizeof(struct vesafb_vbe_ib)) { \
-+ addr -= BUF_ADDR; \
-+ p_vbe(tsk->buf)->str = (u32) (tsk->buf + addr); \
-+ \
-+ /* This should never happen: someone was insane enough to put \
-+ * the data somewhere in RAM.. */ \
-+ } else { \
-+ p_vbe(tsk->buf)->str = (u32) ""; \
-+ } \
-+}
-+
-+void vesafb_handle_getvbeib(struct vesafb_task *tsk)
-+{
-+ int addr, res;
-+
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.edi = (BUF_ADDR & 0x000f);
-+ strncpy(p_vbe(BUF_ADDR)->vbe_signature, "VBE2", 4);
-+
-+ vesafb_do_vm86(&tsk->regs);
-+ memcpy(tsk->buf, (void*)(BUF_ADDR), sizeof(struct vesafb_vbe_ib));
-+
-+ /* The OEM fields were not defined prior to VBE 2.0 */
-+ if (p_vbe(tsk->buf)->vbe_version >= 0x200) {
-+ vesafb_get_string(oem_string_ptr);
-+ vesafb_get_string(oem_vendor_name_ptr);
-+ vesafb_get_string(oem_product_name_ptr);
-+ vesafb_get_string(oem_product_rev_ptr);
-+ }
-+
-+ /* This is basically the same as vesafb_get_string() */
-+ addr = ((p_vbe(tsk->buf)->mode_list_ptr & 0xffff0000) >> 12) +
-+ (p_vbe(tsk->buf)->mode_list_ptr & 0x0000ffff);
-+
-+ if (addr >= 0xa0000) {
-+ p_vbe(tsk->buf)->mode_list_ptr = (u32) __va(addr);
-+ } else if (addr > BUF_ADDR && addr < BUF_ADDR +
-+ sizeof(struct vesafb_vbe_ib)) {
-+ addr -= BUF_ADDR;
-+ p_vbe(tsk->buf)->mode_list_ptr = (u32) (tsk->buf + addr);
-+ } else {
-+ res = 0;
-+ printk(KERN_WARNING "vesafb: warning, copying modelist "
-+ "from somewhere in RAM!\n");
-+ while (*(u16*)(addr+res) != 0xffff &&
-+ res < (sizeof(p_vbe(tsk->buf)->reserved) - 2)) {
-+ *(u16*) ((u32)&(p_vbe(tsk->buf)->reserved) + res) =
-+ *(u16*)(addr+res);
-+ res += 2;
-+ }
-+ *(u16*) ((u32)&(p_vbe(tsk->buf)->reserved) + res) = 0xffff;
-+ }
-+}
-+
-+int vesafb_handle_tasks(void)
-+{
-+ struct vesafb_task *tsk;
-+ struct list_head *curr, *next;
-+ int ret = 0;
-+
-+ down(&vesafb_task_list_sem);
-+ list_for_each_safe(curr, next, &vesafb_task_list) {
-+ tsk = list_entry(curr, struct vesafb_task, node);
-+
-+ if (tsk->flags & TF_EXIT) {
-+ ret = 1;
-+ goto task_done;
-+ }
-+ if (tsk->flags & TF_GETVBEIB) {
-+ vesafb_handle_getvbeib(tsk);
-+ goto task_done;
-+ }
-+ /* Do we need to store a pointer to the buffer in ES:EDI? */
-+ if (tsk->flags & TF_BUF_DI) {
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.edi = (BUF_ADDR & 0x000f);
-+ }
-+ /* Sometimes the pointer has to be in ES:EBX. */
-+ if (tsk->flags & TF_BUF_BX) {
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.ebx = (BUF_ADDR & 0x000f);
-+ }
-+ if (tsk->flags & (TF_BUF_DI | TF_BUF_BX))
-+ memcpy((void*)BUF_ADDR, tsk->buf, tsk->buf_len);
-+
-+ vesafb_do_vm86(&tsk->regs);
-+
-+ if (tsk->flags & TF_RETURN_BUF)
-+ memcpy(tsk->buf, (void*)BUF_ADDR, tsk->buf_len);
-+
-+task_done: list_del(curr);
-+ complete(&tsk->done);
-+ }
-+
-+ /* If we're going to kill this thread, don't allow any elements
-+ * to be added to the task list. */
-+ if (!ret)
-+ up(&vesafb_task_list_sem);
-+
-+ return ret;
-+}
-+
-+/*
-+ * This 'hybrid' thread serves as a backend for vesafb-tng, handling all vm86
-+ * calls. It is started as a kernel thread. It then creates its own mm struct,
-+ * thus separating itself from any userspace processes. At this moment, it
-+ * stops being a kernel thread (kernel threads have mm = NULL) and becomes
-+ * a 'hybrid' thread -- one that has full access to kernel space, yet runs
-+ * with its own address space.
-+ *
-+ * This is necessary because in order to make vm86 calls some parts of the
-+ * first 1MB of RAM have to be setup to mimic the real mode. These are:
-+ * - interrupt vector table [0x00000-0x003ff]
-+ * - BIOS data area [0x00400-0x004ff]
-+ * - Extended BIOS data area [0x9fc00-0x9ffff]
-+ * - the video RAM [0xa0000-0xbffff]
-+ * - video BIOS [0xc0000-0xcffff]
-+ * - motherboard BIOS [0xf0000-0xfffff]
-+ */
-+int vesafb_thread(void *unused)
-+{
-+ int err = 0;
-+
-+ set_fs(KERNEL_DS);
-+ daemonize("vesafb");
-+
-+ if (set_new_mm()) {
-+ err = -ENOMEM;
-+ goto thr_end;
-+ }
-+ if (vesafb_init_mem()) {
-+ err = -ENOMEM;
-+ goto thr_end;
-+ }
-+
-+ DPRINTK("started vesafb thread\n");
-+
-+ /* Having an IO bitmap makes things faster as we avoid GPFs
-+ * when running vm86 code. We can live if it fails, though,
-+ * so don't bother checking for errors. */
-+ ioperm(0,1024,1);
-+ set_user_nice(current, -10);
-+
-+ complete(&vesafb_th_completion);
-+
-+ while (1) {
-+ if (vesafb_handle_tasks())
-+ break;
-+ wait_event_interruptible(vesafb_wait,
-+ !list_empty(&vesafb_task_list));
-+ try_to_freeze();
-+ }
-+
-+out: DPRINTK("exiting the vesafb thread\n");
-+ vesafb_pid = -1;
-+
-+ /* Now that all callers know this thread is no longer running
-+ * (pid < 0), allow them to continue. */
-+ up(&vesafb_task_list_sem);
-+ return err;
-+thr_end:
-+ down(&vesafb_task_list_sem);
-+ complete(&vesafb_th_completion);
-+ goto out;
-+}
-+
-+int vesafb_queue_task(struct vesafb_task *tsk)
-+{
-+ down(&vesafb_task_list_sem);
-+ if (vesafb_pid < 0)
-+ return -1;
-+ list_add_tail(&tsk->node, &vesafb_task_list);
-+ up(&vesafb_task_list_sem);
-+ wake_up(&vesafb_wait);
-+ return 0;
-+}
-+
-+int vesafb_wait_for_thread(void)
-+{
-+ /* PID 0 means that the thread is still initializing. */
-+ if (vesafb_pid < 0)
-+ return -1;
-+ wait_for_completion(&vesafb_th_completion);
-+ return 0;
-+}
-+
-+int __init vesafb_init_thread(void)
-+{
-+ vesafb_pid = kernel_thread(vesafb_thread,NULL,0);
-+ return 0;
-+}
-+
-+#ifdef MODULE
-+void __exit vesafb_kill_thread(void)
-+{
-+ struct vesafb_task *tsk;
-+ if (vesafb_pid <= 0)
-+ return;
-+
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ return;
-+ tsk->flags |= TF_EXIT;
-+ vesafb_queue_task(tsk);
-+ vesafb_wait_for_task(tsk);
-+ kfree(tsk);
-+ return;
-+}
-+module_exit(vesafb_kill_thread);
-+#endif
-+module_init(vesafb_init_thread);
-+
-+EXPORT_SYMBOL_GPL(vesafb_queue_task);
-+EXPORT_SYMBOL_GPL(vesafb_wait_for_thread);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Michal Januszewski");
-+
-diff --git a/drivers/video/vesafb-tng.c b/drivers/video/vesafb-tng.c
-new file mode 100644
-index 0000000..b4d4394
---- /dev/null
-+++ b/drivers/video/vesafb-tng.c
-@@ -0,0 +1,1586 @@
-+/*
-+ * Framebuffer driver for VBE 2.0+ compliant graphic boards
-+ *
-+ * (c) 2004-2006 Michal Januszewski <spock@gentoo.org>
-+ * Based upon vesafb code by Gerd Knorr <kraxel@goldbach.in-berlin.de>
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/string.h>
-+#include <linux/mm.h>
-+#include <linux/tty.h>
-+#include <linux/delay.h>
-+#include <linux/fb.h>
-+#include <linux/ioport.h>
-+#include <linux/init.h>
-+#include <linux/proc_fs.h>
-+#include <linux/completion.h>
-+#include <linux/platform_device.h>
-+#include <video/edid.h>
-+#include <video/vesa.h>
-+#include <video/vga.h>
-+#include <asm/io.h>
-+#include <asm/mtrr.h>
-+#include <asm/page.h>
-+#include <asm/pgtable.h>
-+#include "edid.h"
-+
-+#define dac_reg (0x3c8)
-+#define dac_val (0x3c9)
-+
-+#define VESAFB_NEED_EXACT_RES 1
-+#define VESAFB_NEED_EXACT_DEPTH 2
-+
-+/* --------------------------------------------------------------------- */
-+
-+static struct fb_var_screeninfo vesafb_defined __initdata = {
-+ .activate = FB_ACTIVATE_NOW,
-+ .height = 0,
-+ .width = 0,
-+ .right_margin = 32,
-+ .upper_margin = 16,
-+ .lower_margin = 4,
-+ .vsync_len = 4,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+};
-+
-+static struct fb_fix_screeninfo vesafb_fix __initdata = {
-+ .id = "VESA VGA",
-+ .type = FB_TYPE_PACKED_PIXELS,
-+ .accel = FB_ACCEL_NONE,
-+};
-+
-+static int mtrr = 0; /* disable mtrr by default */
-+static int blank = 1; /* enable blanking by default */
-+static int ypan = 0; /* 0 - nothing, 1 - ypan, 2 - ywrap */
-+static int pmi_setpal = 1; /* pmi for palette changes */
-+static u16 *pmi_base = NULL; /* protected mode interface location */
-+static void (*pmi_start)(void) = NULL;
-+static void (*pmi_pal)(void) = NULL;
-+static struct vesafb_vbe_ib vbe_ib;
-+static struct vesafb_mode_ib *vbe_modes;
-+static int vbe_modes_cnt = 0;
-+static struct fb_info *vesafb_info = NULL;
-+static int nocrtc = 0; /* ignore CRTC settings */
-+static int noedid __initdata = 0; /* don't try DDC transfers */
-+static int vram_remap __initdata = 0; /* set amount of memory to be used */
-+static int vram_total __initdata = 0; /* set total amount of memory */
-+static u16 maxclk __initdata = 0; /* maximum pixel clock */
-+static u16 maxvf __initdata = 0; /* maximum vertical frequency */
-+static u16 maxhf __initdata = 0; /* maximum horizontal frequency */
-+static int gtf __initdata = 0; /* forces use of the GTF */
-+static char *mode_option __initdata = NULL;
-+static u16 vbemode __initdata = 0;
-+
-+/* --------------------------------------------------------------------- */
-+
-+static int vesafb_find_vbe_mode(int xres, int yres, int depth,
-+ unsigned char flags)
-+{
-+ int i, match = -1, h = 0, d = 0x7fffffff;
-+
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ h = abs(vbe_modes[i].x_res - xres) +
-+ abs(vbe_modes[i].y_res - yres) +
-+ abs(depth - vbe_modes[i].depth);
-+ if (h == 0)
-+ return i;
-+ if (h < d || (h == d && vbe_modes[i].depth > depth)) {
-+ d = h;
-+ match = i;
-+ }
-+ }
-+ i = 1;
-+
-+ if (flags & VESAFB_NEED_EXACT_DEPTH && vbe_modes[match].depth != depth)
-+ i = 0;
-+ if (flags & VESAFB_NEED_EXACT_RES && d > 24)
-+ i = 0;
-+ if (i != 0)
-+ return match;
-+ else
-+ return -1;
-+}
-+
-+static int vesafb_pan_display(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ int offset;
-+
-+ offset = (var->yoffset * info->fix.line_length + var->xoffset) / 4;
-+
-+ /* It turns out it's not the best idea to do panning via vm86,
-+ * so we only allow it if we have a PMI. */
-+ if (pmi_start) {
-+ __asm__ __volatile__(
-+ "call *(%%edi)"
-+ : /* no return value */
-+ : "a" (0x4f07), /* EAX */
-+ "b" (0), /* EBX */
-+ "c" (offset), /* ECX */
-+ "d" (offset >> 16), /* EDX */
-+ "D" (&pmi_start)); /* EDI */
-+ }
-+ return 0;
-+}
-+
-+static int vesafb_blank(int blank, struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int err = 1;
-+
-+ if (vbe_ib.capabilities & VBE_CAP_VGACOMPAT) {
-+ int loop = 10000;
-+ u8 seq = 0, crtc17 = 0;
-+
-+ if (blank == FB_BLANK_POWERDOWN) {
-+ seq = 0x20;
-+ crtc17 = 0x00;
-+ err = 0;
-+ } else {
-+ seq = 0x00;
-+ crtc17 = 0x80;
-+ err = (blank == FB_BLANK_UNBLANK) ? 0 : -EINVAL;
-+ }
-+
-+ vga_wseq(NULL, 0x00, 0x01);
-+ seq |= vga_rseq(NULL, 0x01) & ~0x20;
-+ vga_wseq(NULL, 0x00, seq);
-+
-+ crtc17 |= vga_rcrt(NULL, 0x17) & ~0x80;
-+ while (loop--);
-+ vga_wcrt(NULL, 0x17, crtc17);
-+ vga_wseq(NULL, 0x00, 0x03);
-+ } else {
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f10;
-+ switch (blank) {
-+ case FB_BLANK_UNBLANK:
-+ tsk->regs.ebx = 0x0001;
-+ break;
-+ case FB_BLANK_NORMAL:
-+ tsk->regs.ebx = 0x0101; /* standby */
-+ break;
-+ case FB_BLANK_POWERDOWN:
-+ tsk->regs.ebx = 0x0401; /* powerdown */
-+ break;
-+ default:
-+ goto out;
-+ }
-+ tsk->flags = TF_CALL;
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) == 0x004f)
-+ err = 0;
-+out: kfree(tsk);
-+ }
-+ return err;
-+}
-+
-+static int vesafb_setpalette(struct vesafb_pal_entry *entries, int count,
-+ int start, struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int i = ((struct vesafb_par*)info->par)->mode_idx;
-+ int ret = 0;
-+
-+ /* We support palette modifications for 8 bpp modes only, so
-+ * there can never be more than 256 entries. */
-+ if (start + count > 256)
-+ return -EINVAL;
-+
-+ /* Use VGA registers if mode is VGA-compatible. */
-+ if (i >= 0 && i < vbe_modes_cnt &&
-+ vbe_modes[i].mode_attr & VBE_MODE_VGACOMPAT) {
-+ for (i = 0; i < count; i++) {
-+ outb_p(start + i, dac_reg);
-+ outb_p(entries[i].red, dac_val);
-+ outb_p(entries[i].green, dac_val);
-+ outb_p(entries[i].blue, dac_val);
-+ }
-+ } else if (pmi_setpal) {
-+ __asm__ __volatile__(
-+ "call *(%%esi)"
-+ : /* no return value */
-+ : "a" (0x4f09), /* EAX */
-+ "b" (0), /* EBX */
-+ "c" (count), /* ECX */
-+ "d" (start), /* EDX */
-+ "D" (entries), /* EDI */
-+ "S" (&pmi_pal)); /* ESI */
-+ } else {
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f09;
-+ tsk->regs.ebx = 0x0;
-+ tsk->regs.ecx = count;
-+ tsk->regs.edx = start;
-+ tsk->buf = entries;
-+ tsk->buf_len = sizeof(struct vesafb_pal_entry) * count;
-+ tsk->flags = TF_CALL | TF_BUF_DI;
-+
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ ret = 1;
-+ kfree(tsk);
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_setcolreg(unsigned regno, unsigned red, unsigned green,
-+ unsigned blue, unsigned transp,
-+ struct fb_info *info)
-+{
-+ struct vesafb_pal_entry entry;
-+ int shift = 16 - info->var.green.length;
-+ int ret = 0;
-+
-+ if (regno >= info->cmap.len)
-+ return -EINVAL;
-+
-+ if (info->var.bits_per_pixel == 8) {
-+ entry.red = red >> shift;
-+ entry.green = green >> shift;
-+ entry.blue = blue >> shift;
-+ entry.pad = 0;
-+
-+ ret = vesafb_setpalette(&entry, 1, regno, info);
-+ } else if (regno < 16) {
-+ switch (info->var.bits_per_pixel) {
-+ case 16:
-+ if (info->var.red.offset == 10) {
-+ /* 1:5:5:5 */
-+ ((u32*) (info->pseudo_palette))[regno] =
-+ ((red & 0xf800) >> 1) |
-+ ((green & 0xf800) >> 6) |
-+ ((blue & 0xf800) >> 11);
-+ } else {
-+ /* 0:5:6:5 */
-+ ((u32*) (info->pseudo_palette))[regno] =
-+ ((red & 0xf800) ) |
-+ ((green & 0xfc00) >> 5) |
-+ ((blue & 0xf800) >> 11);
-+ }
-+ break;
-+
-+ case 24:
-+ case 32:
-+ red >>= 8;
-+ green >>= 8;
-+ blue >>= 8;
-+ ((u32 *)(info->pseudo_palette))[regno] =
-+ (red << info->var.red.offset) |
-+ (green << info->var.green.offset) |
-+ (blue << info->var.blue.offset);
-+ break;
-+ }
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
-+{
-+ struct vesafb_pal_entry *entries;
-+ int shift = 16 - info->var.green.length;
-+ int i, ret = 0;
-+
-+ if (info->var.bits_per_pixel == 8) {
-+ if (cmap->start + cmap->len > info->cmap.start +
-+ info->cmap.len || cmap->start < info->cmap.start)
-+ return -EINVAL;
-+
-+ entries = vmalloc(sizeof(struct vesafb_pal_entry) * cmap->len);
-+ if (!entries)
-+ return -ENOMEM;
-+ for (i = 0; i < cmap->len; i++) {
-+ entries[i].red = cmap->red[i] >> shift;
-+ entries[i].green = cmap->green[i] >> shift;
-+ entries[i].blue = cmap->blue[i] >> shift;
-+ entries[i].pad = 0;
-+ }
-+ ret = vesafb_setpalette(entries, cmap->len, cmap->start, info);
-+ vfree(entries);
-+ } else {
-+ /* For modes with bpp > 8, we only set the pseudo palette in
-+ * the fb_info struct. We rely on vesafb_setcolreg to do all
-+ * sanity checking. */
-+ for (i = 0; i < cmap->len; i++) {
-+ ret += vesafb_setcolreg(cmap->start + i, cmap->red[i],
-+ cmap->green[i], cmap->blue[i],
-+ 0, info);
-+ }
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_set_par(struct fb_info *info)
-+{
-+ struct vesafb_par *par = (struct vesafb_par *) info->par;
-+ struct vesafb_task *tsk;
-+ struct vesafb_crtc_ib *crtc = NULL;
-+ struct vesafb_mode_ib *mode = NULL;
-+ int i, err = 0, depth = info->var.bits_per_pixel;
-+
-+ if (depth > 8 && depth != 32)
-+ depth = info->var.red.length + info->var.green.length +
-+ info->var.blue.length;
-+
-+ i = vesafb_find_vbe_mode(info->var.xres, info->var.yres, depth,
-+ VESAFB_NEED_EXACT_RES |
-+ VESAFB_NEED_EXACT_DEPTH);
-+ if (i >= 0)
-+ mode = &vbe_modes[i];
-+ else
-+ return -EINVAL;
-+
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f02;
-+ tsk->regs.ebx = mode->mode_id | 0x4000; /* use LFB */
-+ tsk->flags = TF_CALL;
-+
-+ if (vbe_ib.vbe_version >= 0x0300 && !nocrtc &&
-+ info->var.pixclock != 0) {
-+ tsk->regs.ebx |= 0x0800; /* use CRTC data */
-+ tsk->flags |= TF_BUF_DI;
-+ crtc = kmalloc(sizeof(struct vesafb_crtc_ib), GFP_KERNEL);
-+ if (!crtc) {
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+ crtc->horiz_start = info->var.xres + info->var.right_margin;
-+ crtc->horiz_end = crtc->horiz_start + info->var.hsync_len;
-+ crtc->horiz_total = crtc->horiz_end + info->var.left_margin;
-+
-+ crtc->vert_start = info->var.yres + info->var.lower_margin;
-+ crtc->vert_end = crtc->vert_start + info->var.vsync_len;
-+ crtc->vert_total = crtc->vert_end + info->var.upper_margin;
-+
-+ crtc->pixel_clock = PICOS2KHZ(info->var.pixclock) * 1000;
-+ crtc->refresh_rate = (u16)(100 * (crtc->pixel_clock /
-+ (crtc->vert_total * crtc->horiz_total)));
-+ crtc->flags = 0;
-+
-+ if (info->var.vmode & FB_VMODE_DOUBLE)
-+ crtc->flags |= 0x1;
-+ if (info->var.vmode & FB_VMODE_INTERLACED)
-+ crtc->flags |= 0x2;
-+ if (!(info->var.sync & FB_SYNC_HOR_HIGH_ACT))
-+ crtc->flags |= 0x4;
-+ if (!(info->var.sync & FB_SYNC_VERT_HIGH_ACT))
-+ crtc->flags |= 0x8;
-+ memcpy(&par->crtc, crtc, sizeof(struct vesafb_crtc_ib));
-+ } else
-+ memset(&par->crtc, 0, sizeof(struct vesafb_crtc_ib));
-+
-+ tsk->buf = (void*)crtc;
-+ tsk->buf_len = sizeof(struct vesafb_crtc_ib);
-+
-+ if (vesafb_queue_task (tsk)) {
-+ err = -EINVAL;
-+ goto out;
-+ }
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_ERR "vesafb: mode switch failed (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ err = -EINVAL;
-+ goto out;
-+ }
-+ par->mode_idx = i;
-+
-+ /* For 8bpp modes, always try to set the DAC to 8 bits. */
-+ if (vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC &&
-+ mode->bits_per_pixel <= 8) {
-+ vesafb_reset_task(tsk);
-+ tsk->flags = TF_CALL;
-+ tsk->regs.eax = 0x4f08;
-+ tsk->regs.ebx = 0x0800;
-+
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f ||
-+ ((tsk->regs.ebx & 0xff00) >> 8) != 8) {
-+ /* We've failed to set the DAC palette format -
-+ * time to correct var. */
-+ info->var.red.length = 6;
-+ info->var.green.length = 6;
-+ info->var.blue.length = 6;
-+ }
-+ }
-+
-+ info->fix.visual = (info->var.bits_per_pixel == 8) ?
-+ FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
-+ info->fix.line_length = mode->bytes_per_scan_line;
-+
-+ DPRINTK("set new mode %dx%d-%d (0x%x)\n",
-+ info->var.xres, info->var.yres, info->var.bits_per_pixel,
-+ mode->mode_id);
-+
-+out: if (crtc != NULL)
-+ kfree(crtc);
-+ kfree(tsk);
-+
-+ return err;
-+}
-+
-+static void vesafb_setup_var(struct fb_var_screeninfo *var, struct fb_info *info,
-+ struct vesafb_mode_ib *mode)
-+{
-+ var->xres = mode->x_res;
-+ var->yres = mode->y_res;
-+ var->xres_virtual = mode->x_res;
-+ var->yres_virtual = (ypan) ?
-+ info->fix.smem_len / mode->bytes_per_scan_line :
-+ mode->y_res;
-+ var->xoffset = 0;
-+ var->yoffset = 0;
-+ var->bits_per_pixel = mode->bits_per_pixel;
-+
-+ if (var->bits_per_pixel == 15)
-+ var->bits_per_pixel = 16;
-+
-+ if (var->bits_per_pixel > 8) {
-+ var->red.offset = mode->red_off;
-+ var->red.length = mode->red_len;
-+ var->green.offset = mode->green_off;
-+ var->green.length = mode->green_len;
-+ var->blue.offset = mode->blue_off;
-+ var->blue.length = mode->blue_len;
-+ var->transp.offset = mode->rsvd_off;
-+ var->transp.length = mode->rsvd_len;
-+
-+ DPRINTK("directcolor: size=%d:%d:%d:%d, shift=%d:%d:%d:%d\n",
-+ mode->rsvd_len,
-+ mode->red_len,
-+ mode->green_len,
-+ mode->blue_len,
-+ mode->rsvd_off,
-+ mode->red_off,
-+ mode->green_off,
-+ mode->blue_off);
-+ } else {
-+ var->red.offset = 0;
-+ var->green.offset = 0;
-+ var->blue.offset = 0;
-+ var->transp.offset = 0;
-+
-+ /* We're assuming that we can switch the DAC to 8 bits. If
-+ * this proves to be incorrect, we'll update the fields
-+ * later in set_par(). */
-+ if (vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC) {
-+ var->red.length = 8;
-+ var->green.length = 8;
-+ var->blue.length = 8;
-+ var->transp.length = 0;
-+ } else {
-+ var->red.length = 6;
-+ var->green.length = 6;
-+ var->blue.length = 6;
-+ var->transp.length = 0;
-+ }
-+ }
-+}
-+
-+static void inline vesafb_check_limits(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ struct fb_videomode *mode;
-+
-+ if (!var->pixclock)
-+ return;
-+ if (vbe_ib.vbe_version < 0x0300) {
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60, var, info);
-+ return;
-+ }
-+ if (!fb_validate_mode(var, info))
-+ return;
-+ mode = fb_find_best_mode(var, &info->modelist);
-+ if (mode) {
-+ DPRINTK("find_best_mode: %d %d @ %d (vmode: %d)\n",
-+ mode->xres, mode->yres, mode->refresh, mode->vmode);
-+ if (mode->xres == var->xres && mode->yres == var->yres &&
-+ !(mode->vmode & (FB_VMODE_INTERLACED | FB_VMODE_DOUBLE))) {
-+ fb_videomode_to_var(var, mode);
-+ return;
-+ }
-+ }
-+ if (info->monspecs.gtf && !fb_get_mode(FB_MAXTIMINGS, 0, var, info))
-+ return;
-+ /* Use default refresh rate */
-+ var->pixclock = 0;
-+}
-+
-+static int vesafb_check_var(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ int match = -1;
-+ int depth = var->red.length + var->green.length + var->blue.length;
-+
-+ /* Various apps will use bits_per_pixel to set the color depth,
-+ * which is theoretically incorrect, but which we'll try to handle
-+ * here. */
-+ if (depth == 0 || abs(depth - var->bits_per_pixel) >= 8)
-+ depth = var->bits_per_pixel;
-+ match = vesafb_find_vbe_mode(var->xres, var->yres, depth,
-+ VESAFB_NEED_EXACT_RES);
-+
-+ if (match == -1) {
-+ DPRINTK("vesafb: mode %dx%d-%d not found\n", var->xres,
-+ var->yres, depth);
-+ return -EINVAL;
-+ }
-+
-+ vesafb_setup_var(var, info, &vbe_modes[match]);
-+ DPRINTK("found mode 0x%x (%dx%d-%dbpp)\n",
-+ vbe_modes[match].mode_id, vbe_modes[match].x_res,
-+ vbe_modes[match].y_res, vbe_modes[match].depth);
-+
-+ /* Check whether we have remapped enough memory for this mode. */
-+ if (var->yres * vbe_modes[match].bytes_per_scan_line >
-+ info->fix.smem_len) {
-+ return -EINVAL;
-+ }
-+
-+ if ((var->vmode & FB_VMODE_DOUBLE) &&
-+ !(vbe_modes[match].mode_attr & 0x100))
-+ var->vmode &= ~FB_VMODE_DOUBLE;
-+ if ((var->vmode & FB_VMODE_INTERLACED) &&
-+ !(vbe_modes[match].mode_attr & 0x200))
-+ var->vmode &= ~FB_VMODE_INTERLACED;
-+ vesafb_check_limits(var, info);
-+ return 0;
-+}
-+
-+static int vesafb_open(struct fb_info *info, int user)
-+{
-+ struct vesafb_task *tsk = NULL;
-+ struct vesafb_par *par = info->par;
-+ int cnt = atomic_read(&par->ref_count);
-+
-+ if (!cnt) {
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ goto out;
-+
-+ /* Get the VBE state buffer size. We want all available
-+ * hardware state data (CL = 0x0f). */
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0000;
-+ tsk->flags = TF_CALL;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_WARNING "vesafb: VBE state buffer size "
-+ "cannot be determined (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ goto out;
-+ }
-+
-+ par->vbe_state_size = 64 * (tsk->regs.ebx & 0xffff);
-+ par->vbe_state = kzalloc(par->vbe_state_size, GFP_KERNEL);
-+ if (!par->vbe_state)
-+ goto out;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0001;
-+ tsk->flags = TF_CALL | TF_BUF_BX | TF_RETURN_BUF;
-+ tsk->buf = (void*)(par->vbe_state);
-+ tsk->buf_len = par->vbe_state_size;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto getstate_failed;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_WARNING "vesafb: VBE get state call "
-+ "failed (eax: 0x%lx)\n", tsk->regs.eax);
-+ goto getstate_failed;
-+ }
-+ }
-+out:
-+ atomic_inc(&par->ref_count);
-+ if (tsk)
-+ kfree(tsk);
-+ return 0;
-+
-+getstate_failed:
-+ kfree(par->vbe_state);
-+ par->vbe_state = NULL;
-+ par->vbe_state_size = 0;
-+ goto out;
-+}
-+
-+static int vesafb_release(struct fb_info *info, int user)
-+{
-+ struct vesafb_task *tsk = NULL;
-+ struct vesafb_par *par = info->par;
-+ int cnt = atomic_read(&par->ref_count);
-+
-+ if (!cnt)
-+ return -EINVAL;
-+
-+ if (cnt == 1 && par->vbe_state && par->vbe_state_size) {
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ goto out;
-+
-+ tsk->regs.eax = 0x0003;
-+ tsk->regs.ebx = 0x0000;
-+ tsk->flags = TF_CALL;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0002;
-+ tsk->buf = (void*)(par->vbe_state);
-+ tsk->buf_len = par->vbe_state_size;
-+ tsk->flags = TF_CALL | TF_BUF_BX;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ printk(KERN_WARNING "vesafb: VBE state restore call "
-+ "failed (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ }
-+out:
-+ atomic_dec(&par->ref_count);
-+ if (tsk)
-+ kfree(tsk);
-+ return 0;
-+}
-+
-+static int __init vesafb_probe(struct platform_device *device);
-+
-+static struct fb_ops vesafb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_open = vesafb_open,
-+ .fb_release = vesafb_release,
-+ .fb_setcolreg = vesafb_setcolreg,
-+ .fb_setcmap = vesafb_setcmap,
-+ .fb_pan_display = vesafb_pan_display,
-+ .fb_blank = vesafb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_check_var = vesafb_check_var,
-+ .fb_set_par = vesafb_set_par
-+};
-+
-+static struct platform_driver vesafb_driver = {
-+ .probe = vesafb_probe,
-+ .driver = {
-+ .name = "vesafb",
-+ },
-+};
-+
-+static struct platform_device *vesafb_device;
-+
-+#ifndef MODULE
-+int __init vesafb_setup(char *options)
-+{
-+ char *this_opt;
-+
-+ if (!options || !*options)
-+ return 0;
-+
-+ DPRINTK("options %s\n",options);
-+
-+ while ((this_opt = strsep(&options, ",")) != NULL) {
-+ if (!*this_opt) continue;
-+
-+ DPRINTK("this_opt: %s\n",this_opt);
-+
-+ if (! strcmp(this_opt, "redraw"))
-+ ypan=0;
-+ else if (! strcmp(this_opt, "ypan"))
-+ ypan=1;
-+ else if (! strcmp(this_opt, "ywrap"))
-+ ypan=2;
-+ else if (! strcmp(this_opt, "vgapal"))
-+ pmi_setpal=0;
-+ else if (! strcmp(this_opt, "pmipal"))
-+ pmi_setpal=1;
-+ else if (! strncmp(this_opt, "mtrr:", 5))
-+ mtrr = simple_strtoul(this_opt+5, NULL, 0);
-+ else if (! strcmp(this_opt, "nomtrr"))
-+ mtrr=0;
-+ else if (! strcmp(this_opt, "nocrtc"))
-+ nocrtc=1;
-+ else if (! strcmp(this_opt, "noedid"))
-+ noedid=1;
-+ else if (! strcmp(this_opt, "noblank"))
-+ blank=0;
-+ else if (! strcmp(this_opt, "gtf"))
-+ gtf=1;
-+ else if (! strncmp(this_opt, "vtotal:", 7))
-+ vram_total = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "vremap:", 7))
-+ vram_remap = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "maxhf:", 6))
-+ maxhf = simple_strtoul(this_opt + 6, NULL, 0);
-+ else if (! strncmp(this_opt, "maxvf:", 6))
-+ maxvf = simple_strtoul(this_opt + 6, NULL, 0);
-+ else if (! strncmp(this_opt, "maxclk:", 7))
-+ maxclk = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "vbemode:", 8))
-+ vbemode = simple_strtoul(this_opt + 8, NULL,0);
-+ else if (this_opt[0] >= '0' && this_opt[0] <= '9') {
-+ DPRINTK("mode_option: %s\n",this_opt);
-+ mode_option = this_opt;
-+ } else {
-+ printk(KERN_WARNING
-+ "vesafb: unrecognized option %s\n", this_opt);
-+ }
-+ }
-+
-+ return 0;
-+}
-+#endif /* !MODULE */
-+
-+static int vesafb_read_proc_modes(char *buf, char **start, off_t offset,
-+ int len, int *eof, void *private)
-+{
-+ int clen = 0, i;
-+
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ clen += min(snprintf(buf + clen, len - clen, "%dx%d-%d\n", vbe_modes[i].x_res,
-+ vbe_modes[i].y_res, vbe_modes[i].depth), len - clen);
-+ }
-+ *eof = 1;
-+ return clen;
-+}
-+
-+static int vesafb_read_proc_vbe_info(char *buf, char **start, off_t offset,
-+ int len, int *eof, void *private)
-+{
-+ int clen = 0;
-+
-+ clen += min(snprintf(buf + clen, len, "Version: %d.%d\n",
-+ ((vbe_ib.vbe_version & 0xff00) >> 8),
-+ vbe_ib.vbe_version & 0xff), len);
-+ clen += min(snprintf(buf + clen, len - clen, "Vendor: %s\n",
-+ (char*)vbe_ib.oem_vendor_name_ptr), len - clen);
-+ clen += min(snprintf(buf + clen, len - clen, "Product: %s\n",
-+ (char*)vbe_ib.oem_product_name_ptr), len - clen);
-+ clen += min(snprintf(buf + clen, len - clen, "OEM rev: %s\n",
-+ (char*)vbe_ib.oem_product_rev_ptr), len - clen);
-+ clen += min(snprintf(buf + clen, len - clen, "OEM string: %s\n",
-+ (char*)vbe_ib.oem_string_ptr), len - clen);
-+
-+ *eof = 1;
-+ return clen;
-+}
-+
-+static int __init inline vesafb_vbe_getinfo(struct vesafb_task *tsk)
-+{
-+ tsk->regs.eax = 0x4f00;
-+ tsk->flags = TF_CALL | TF_GETVBEIB;
-+ tsk->buf = &vbe_ib;
-+ tsk->buf_len = sizeof(vbe_ib);
-+ if (vesafb_queue_task (tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if (vbe_ib.vbe_version < 0x0200) {
-+ printk(KERN_ERR "vesafb: Sorry, pre-VBE 2.0 cards are "
-+ "not supported.\n");
-+ return -EINVAL;
-+ }
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_ERR "vesafb: Getting mode info block failed "
-+ "(eax=0x%x)\n", (u32)tsk->regs.eax);
-+ return -EINVAL;
-+ }
-+
-+ printk(KERN_INFO "vesafb: %s, %s, %s (OEM: %s)\n",
-+ (char*)vbe_ib.oem_vendor_name_ptr,
-+ (char*)vbe_ib.oem_product_name_ptr,
-+ (char*)vbe_ib.oem_product_rev_ptr,
-+ (char*)vbe_ib.oem_string_ptr);
-+
-+ printk(KERN_INFO "vesafb: VBE version: %d.%d\n",
-+ ((vbe_ib.vbe_version & 0xff00) >> 8),
-+ vbe_ib.vbe_version & 0xff);
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getmodes(struct vesafb_task *tsk)
-+{
-+ u16 *mode = 0;
-+ int off = 0;
-+
-+ /* Count available modes. */
-+ mode = (u16*)vbe_ib.mode_list_ptr;
-+ while (*mode != 0xffff) {
-+ vbe_modes_cnt++;
-+ mode++;
-+ }
-+
-+ vbe_modes = kmalloc(sizeof(struct vesafb_mode_ib)*
-+ vbe_modes_cnt, GFP_KERNEL);
-+ if (!vbe_modes)
-+ return -ENOMEM;
-+
-+ /* Get mode info for all available modes. */
-+ mode = (u16*)vbe_ib.mode_list_ptr;
-+
-+ while (*mode != 0xffff) {
-+ struct vesafb_mode_ib *mib;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f01;
-+ tsk->regs.ecx = (u32) *mode;
-+ tsk->flags = TF_CALL | TF_RETURN_BUF | TF_BUF_DI;
-+ tsk->buf = vbe_modes+off;
-+ tsk->buf_len = sizeof(struct vesafb_mode_ib);
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+ mib = p_mode(tsk->buf);
-+ mib->mode_id = *mode;
-+
-+ /* We only want modes that are supported with the currennt
-+ * hardware configuration (D0), color (D3), graphics (D4)
-+ * and that have support for the LFB (D7). */
-+ if ((mib->mode_attr & 0x99) == 0x99 &&
-+ mib->bits_per_pixel >= 8) {
-+ off++;
-+ } else {
-+ vbe_modes_cnt--;
-+ }
-+ mode++;
-+ mib->depth = mib->red_len + mib->green_len + mib->blue_len;
-+ /* Handle 8bpp modes and modes with broken color component
-+ * lengths. */
-+ if (mib->depth == 0 ||
-+ (mib->depth == 24 && mib->bits_per_pixel == 32))
-+ mib->depth = mib->bits_per_pixel;
-+ }
-+
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getpmi(struct vesafb_task *tsk)
-+{
-+ int i;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f0a;
-+ tsk->regs.ebx = 0x0;
-+ tsk->flags = TF_CALL;
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f || tsk->regs.es < 0xc000) {
-+ pmi_setpal = ypan = 0;
-+ } else {
-+ pmi_base = (u16*)phys_to_virt(((u32)tsk->regs.es << 4) +
-+ tsk->regs.edi);
-+ pmi_start = (void*)((char*)pmi_base + pmi_base[1]);
-+ pmi_pal = (void*)((char*)pmi_base + pmi_base[2]);
-+ printk(KERN_INFO "vesafb: protected mode interface info at "
-+ "%04x:%04x\n",
-+ (u16)tsk->regs.es, (u16)tsk->regs.edi);
-+ printk(KERN_INFO "vesafb: pmi: set display start = %p, "
-+ "set palette = %p\n", pmi_start, pmi_pal);
-+
-+ if (pmi_base[3]) {
-+ printk(KERN_INFO "vesafb: pmi: ports = ");
-+ for (i = pmi_base[3]/2; pmi_base[i] != 0xffff; i++)
-+ printk("%x ",pmi_base[i]);
-+ printk("\n");
-+
-+ /*
-+ * memory areas not supported (yet?)
-+ *
-+ * Rules are: we have to set up a descriptor for the
-+ * requested memory area and pass it in the ES register
-+ * to the BIOS function.
-+ */
-+ if (pmi_base[i] != 0xffff) {
-+ printk(KERN_INFO "vesafb: can't handle memory "
-+ "requests, pmi disabled\n");
-+ ypan = pmi_setpal = 0;
-+ }
-+ }
-+ }
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getedid(struct vesafb_task *tsk,
-+ struct fb_info *info)
-+{
-+ int res = 0;
-+
-+ if (noedid || vbe_ib.vbe_version < 0x0300)
-+ return -EINVAL;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f15;
-+ tsk->regs.ebx = 0;
-+ tsk->regs.ecx = 0;
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ return -EINVAL;
-+
-+ if ((tsk->regs.ebx & 0x3) == 3) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports both "
-+ "DDC1 and DDC2 transfers\n");
-+ } else if ((tsk->regs.ebx & 0x3) == 2) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports DDC2 "
-+ "transfers\n");
-+ } else if ((tsk->regs.ebx & 0x3) == 1) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports DDC1 "
-+ "transfers\n");
-+ } else {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware doesn't support "
-+ "DDC transfers\n");
-+ return -EINVAL;
-+ }
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f15;
-+ tsk->regs.ebx = 1;
-+ tsk->regs.ecx = tsk->regs.edx = 0;
-+ tsk->flags = TF_CALL | TF_RETURN_BUF | TF_BUF_DI;
-+ tsk->buf = kmalloc(EDID_LENGTH, GFP_KERNEL);
-+ tsk->buf_len = EDID_LENGTH;
-+
-+ if (vesafb_queue_task(tsk)) {
-+ res = -EINVAL;
-+ goto out;
-+ }
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) == 0x004f) {
-+ fb_edid_to_monspecs(tsk->buf, &info->monspecs);
-+ fb_videomode_to_modelist(info->monspecs.modedb,
-+ info->monspecs.modedb_len, &info->modelist);
-+ if (info->monspecs.vfmax && info->monspecs.hfmax) {
-+ /* If the maximum pixel clock wasn't specified in
-+ * the EDID block, set it to 300 MHz. */
-+ if (info->monspecs.dclkmax == 0)
-+ info->monspecs.dclkmax = 300 * 1000000;
-+ info->monspecs.gtf = 1;
-+ } else {
-+ res = -EINVAL;
-+ }
-+ }
-+
-+out: kfree(tsk->buf);
-+ return res;
-+}
-+
-+static void __init inline vesafb_vbe_getmonspecs(struct vesafb_task *tsk,
-+ struct fb_info *info)
-+{
-+ struct fb_var_screeninfo var;
-+ int i;
-+ memset(&info->monspecs, 0, sizeof(struct fb_monspecs));
-+
-+ /* If we didn't get all necessary data from the EDID block,
-+ * mark it as incompatible with the GTF. */
-+ if (vesafb_vbe_getedid(tsk, info))
-+ info->monspecs.gtf = 0;
-+
-+ /* Kernel command line overrides. */
-+ if (maxclk)
-+ info->monspecs.dclkmax = maxclk * 1000000;
-+ if (maxvf)
-+ info->monspecs.vfmax = maxvf;
-+ if (maxhf)
-+ info->monspecs.hfmax = maxhf * 1000;
-+
-+ /* In case DDC transfers are not supported the user can provide
-+ * monitor limits manually. Lower limits are set to "safe" values. */
-+ if (info->monspecs.gtf == 0 && maxclk && maxvf && maxhf) {
-+ info->monspecs.dclkmin = 0;
-+ info->monspecs.vfmin = 60;
-+ info->monspecs.hfmin = 29000;
-+ info->monspecs.gtf = 1;
-+ }
-+
-+ if (info->monspecs.gtf) {
-+ printk(KERN_INFO
-+ "vesafb: monitor limits: vf = %d Hz, hf = %d kHz, "
-+ "clk = %d MHz\n", info->monspecs.vfmax,
-+ (int)(info->monspecs.hfmax / 1000),
-+ (int)(info->monspecs.dclkmax / 1000000));
-+ /* Add valid VESA video modes to our modelist. */
-+ for (i = 0; i < VESA_MODEDB_SIZE; i++) {
-+ fb_videomode_to_var(&var, (struct fb_videomode *)
-+ &vesa_modes[i]);
-+ if (!fb_validate_mode(&var, info))
-+ fb_add_videomode((struct fb_videomode *)
-+ &vesa_modes[i],
-+ &info->modelist);
-+ }
-+ } else {
-+ /* Add all VESA video modes to our modelist. */
-+ fb_videomode_to_modelist((struct fb_videomode *)vesa_modes,
-+ VESA_MODEDB_SIZE, &info->modelist);
-+ printk(KERN_INFO "vesafb: no monitor limits have been set\n");
-+ }
-+ return;
-+}
-+
-+static int __init inline vesafb_vbe_init(struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int res = 0;
-+
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ return -EINVAL;
-+ if ((res = vesafb_vbe_getinfo(tsk)) != 0)
-+ goto out;
-+ if ((res = vesafb_vbe_getmodes(tsk)) != 0)
-+ goto out;
-+ if (pmi_setpal || ypan)
-+ vesafb_vbe_getpmi(tsk);
-+
-+ INIT_LIST_HEAD(&info->modelist);
-+ vesafb_vbe_getmonspecs(tsk, info);
-+
-+out: kfree(tsk);
-+ return res;
-+}
-+
-+static int __init decode_mode(u32 *xres, u32 *yres, u32 *bpp, u32 *refresh)
-+{
-+ int len = strlen(mode_option), i, err = 0;
-+ u8 res_specified = 0, bpp_specified = 0, refresh_specified = 0,
-+ yres_specified = 0;
-+
-+ for (i = len-1; i >= 0; i--) {
-+ switch (mode_option[i]) {
-+ case '@':
-+ len = i;
-+ if (!refresh_specified && !bpp_specified &&
-+ !yres_specified) {
-+ *refresh = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ refresh_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case '-':
-+ len = i;
-+ if (!bpp_specified && !yres_specified) {
-+ *bpp = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ bpp_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case 'x':
-+ if (!yres_specified) {
-+ *yres = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ yres_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case '0'...'9':
-+ break;
-+ default:
-+ goto out;
-+ }
-+ }
-+
-+ if (i < 0 && yres_specified) {
-+ *xres = simple_strtoul(mode_option, NULL, 0);
-+ res_specified = 1;
-+ }
-+
-+out: if (!res_specified || !yres_specified) {
-+ printk(KERN_ERR "vesafb: invalid resolution, "
-+ "%s not specified\n",
-+ (!res_specified) ? "width" : "height");
-+ err = -EINVAL;
-+ }
-+
-+ return err;
-+}
-+
-+static int __init vesafb_init_set_mode(struct fb_info *info)
-+{
-+ struct fb_videomode *fbmode;
-+ struct fb_videomode mode;
-+ int i, modeid, refresh = 0;
-+ u8 refresh_specified = 0;
-+
-+ if (!mode_option)
-+ mode_option = CONFIG_FB_VESA_DEFAULT_MODE;
-+
-+ if (vbemode > 0) {
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ if (vbe_modes[i].mode_id == vbemode) {
-+ info->var.vmode = FB_VMODE_NONINTERLACED;
-+ info->var.sync = FB_SYNC_VERT_HIGH_ACT;
-+ vesafb_setup_var(&info->var, info,
-+ &vbe_modes[i]);
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON,
-+ 60, &info->var, info);
-+ /* With pixclock set to 0, the default BIOS
-+ * timings will be used in set_par(). */
-+ info->var.pixclock = 0;
-+ modeid = i;
-+ goto out;
-+ }
-+ }
-+ printk(KERN_INFO "specified VBE mode %d not found\n",
-+ vbemode);
-+ vbemode = 0;
-+ }
-+
-+ /* Decode the mode specified on the kernel command line. We save
-+ * the depth into bits_per_pixel, which is wrong, but will work
-+ * anyway. */
-+ if (decode_mode(&info->var.xres, &info->var.yres,
-+ &info->var.bits_per_pixel, &refresh))
-+ return -EINVAL;
-+ if (refresh)
-+ refresh_specified = 1;
-+ else
-+ refresh = 60;
-+
-+ /* Look for a matching VBE mode. We can live if an exact match
-+ * cannot be found. */
-+ modeid = vesafb_find_vbe_mode(info->var.xres, info->var.yres,
-+ info->var.bits_per_pixel, 0);
-+
-+ if (modeid == -1) {
-+ return -EINVAL;
-+ } else {
-+ info->var.vmode = FB_VMODE_NONINTERLACED;
-+ info->var.sync = FB_SYNC_VERT_HIGH_ACT;
-+ vesafb_setup_var(&info->var, info, &vbe_modes[modeid]);
-+ }
-+ if (vbe_ib.vbe_version < 0x0300) {
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60,
-+ &info->var, info);
-+ goto out;
-+ }
-+ if (!gtf) {
-+ struct fb_videomode tmode;
-+
-+ if (refresh_specified) {
-+ fb_var_to_videomode(&tmode, &info->var);
-+ tmode.refresh = refresh;
-+ fbmode = fb_find_nearest_mode(&tmode,
-+ &info->modelist);
-+ } else
-+ fbmode = fb_find_best_mode(&info->var,
-+ &info->modelist);
-+
-+ if (fbmode->xres == info->var.xres &&
-+ fbmode->yres == info->var.yres &&
-+ !(fbmode->vmode & (FB_VMODE_INTERLACED | FB_VMODE_DOUBLE))
-+ && (!refresh_specified ||
-+ abs(refresh - fbmode->refresh) <= 5)) {
-+ fb_videomode_to_var(&info->var, fbmode);
-+ return modeid;
-+ }
-+ }
-+ i = FB_MAXTIMINGS;
-+ if (!info->monspecs.gtf)
-+ i = FB_IGNOREMON | FB_VSYNCTIMINGS;
-+ else if (refresh_specified)
-+ i = FB_VSYNCTIMINGS;
-+ if (!fb_get_mode(i, refresh, &info->var, info))
-+ goto out;
-+ if (info->monspecs.gtf &&
-+ !fb_get_mode(FB_MAXTIMINGS, 0, &info->var, info))
-+ goto out;
-+ /* Use default refresh rate */
-+ printk(KERN_WARNING "vesafb: using default BIOS refresh rate\n");
-+ info->var.pixclock = 0;
-+
-+out:
-+ fb_var_to_videomode(&mode, &info->var);
-+ fb_add_videomode(&mode, &info->modelist);
-+ return modeid;
-+}
-+
-+static int __init vesafb_probe(struct platform_device *dev)
-+{
-+ char entry[16];
-+ struct fb_info *info;
-+ struct vesafb_mode_ib *mode = NULL;
-+ int err = 0, i, h;
-+ unsigned int size_vmode;
-+ unsigned int size_remap;
-+ unsigned int size_total;
-+
-+ vesafb_info = info = framebuffer_alloc(sizeof(struct vesafb_par) +
-+ sizeof(u32) * 256, &dev->dev);
-+ if (!info)
-+ return -ENOMEM;
-+
-+ if (vesafb_wait_for_thread()) {
-+ printk(KERN_ERR "vesafb: vesafb thread not running\n");
-+ framebuffer_release(info);
-+ return -EINVAL;
-+ }
-+
-+ if (vesafb_vbe_init(info)) {
-+ printk(KERN_ERR "vesafb: vbe_init failed\n");
-+ err = -EINVAL;
-+ goto out;
-+ }
-+
-+ vesafb_fix.ypanstep = ypan ? 1 : 0;
-+ vesafb_fix.ywrapstep = (ypan>1) ? 1 : 0;
-+
-+ info->pseudo_palette = ((u8*)info->par + sizeof(struct vesafb_par));
-+ info->fbops = &vesafb_ops;
-+ info->var = vesafb_defined;
-+ info->fix = vesafb_fix;
-+
-+ if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
-+ err = -ENXIO;
-+ goto out;
-+ }
-+
-+ i = vesafb_init_set_mode(info);
-+ if (i < 0) {
-+ err = -EINVAL;
-+ goto out_cmap;
-+ } else
-+ mode = &vbe_modes[i];
-+
-+ /* Disable blanking if the user requested so. */
-+ if (!blank) {
-+ info->fbops->fb_blank = NULL;
-+ }
-+
-+ /* Find out how much IO memory is required for the mode with
-+ * the highest resolution. */
-+ size_remap = 0;
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ h = vbe_modes[i].bytes_per_scan_line * vbe_modes[i].y_res;
-+ if (h > size_remap)
-+ size_remap = h;
-+ }
-+ size_remap *= 2;
-+
-+ /* size_vmode -- that is the amount of memory needed for the
-+ * used video mode, i.e. the minimum amount of
-+ * memory we need. */
-+ if (mode != NULL) {
-+ size_vmode = info->var.yres * mode->bytes_per_scan_line;
-+ } else {
-+ size_vmode = info->var.yres * info->var.xres *
-+ ((info->var.bits_per_pixel + 7) >> 3);
-+ }
-+
-+ /* size_total -- all video memory we have. Used for mtrr
-+ * entries, ressource allocation and bounds
-+ * checking. */
-+ size_total = vbe_ib.total_memory * 65536;
-+ if (vram_total)
-+ size_total = vram_total * 1024 * 1024;
-+ if (size_total < size_vmode)
-+ size_total = size_vmode;
-+ ((struct vesafb_par*)(info->par))->mem_total = size_total;
-+
-+ /* size_remap -- the amount of video memory we are going to
-+ * use for vesafb. With modern cards it is no
-+ * option to simply use size_total as th
-+ * wastes plenty of kernel address space. */
-+ if (vram_remap)
-+ size_remap = vram_remap * 1024 * 1024;
-+ if (size_remap < size_vmode)
-+ size_remap = size_vmode;
-+ if (size_remap > size_total)
-+ size_remap = size_total;
-+
-+ info->fix.smem_len = size_remap;
-+ info->fix.smem_start = mode->phys_base_ptr;
-+
-+ /* We have to set it here, because when setup_var() was called,
-+ * smem_len wasn't defined yet. */
-+ info->var.yres_virtual = info->fix.smem_len /
-+ mode->bytes_per_scan_line;
-+
-+ if (ypan && info->var.yres_virtual > info->var.yres) {
-+ printk(KERN_INFO "vesafb: scrolling: %s "
-+ "using protected mode interface, "
-+ "yres_virtual=%d\n",
-+ (ypan > 1) ? "ywrap" : "ypan",info->var.yres_virtual);
-+ } else {
-+ printk(KERN_INFO "vesafb: scrolling: redraw\n");
-+ info->var.yres_virtual = info->var.yres;
-+ ypan = 0;
-+ }
-+
-+ info->flags = FBINFO_FLAG_DEFAULT |
-+ (ypan) ? FBINFO_HWACCEL_YPAN : 0;
-+
-+ if (!ypan)
-+ info->fbops->fb_pan_display = NULL;
-+
-+ if (!request_mem_region(info->fix.smem_start, size_total, "vesafb")) {
-+ printk(KERN_WARNING "vesafb: cannot reserve video memory at "
-+ "0x%lx\n", info->fix.smem_start);
-+ /* We cannot make this fatal. Sometimes this comes from magic
-+ spaces our resource handlers simply don't know about. */
-+ }
-+
-+ info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len);
-+
-+ if (!info->screen_base) {
-+ printk(KERN_ERR
-+ "vesafb: abort, cannot ioremap video memory "
-+ "0x%x @ 0x%lx\n",
-+ info->fix.smem_len, info->fix.smem_start);
-+ err = -EIO;
-+ goto out_mem;
-+ }
-+
-+ /* Request failure does not faze us, as vgacon probably has this
-+ region already (FIXME) */
-+ request_region(0x3c0, 32, "vesafb");
-+
-+#ifdef CONFIG_MTRR
-+ if (mtrr && !(info->fix.smem_start & (PAGE_SIZE - 1))) {
-+ int temp_size = size_total;
-+ unsigned int type = 0;
-+
-+ switch (mtrr) {
-+ case 1:
-+ type = MTRR_TYPE_UNCACHABLE;
-+ break;
-+ case 2:
-+ type = MTRR_TYPE_WRBACK;
-+ break;
-+ case 3:
-+ type = MTRR_TYPE_WRCOMB;
-+ break;
-+ case 4:
-+ type = MTRR_TYPE_WRTHROUGH;
-+ break;
-+ default:
-+ type = 0;
-+ break;
-+ }
-+
-+ if (type) {
-+ int rc;
-+
-+ /* Find the largest power-of-two */
-+ while (temp_size & (temp_size - 1))
-+ temp_size &= (temp_size - 1);
-+
-+ /* Try and find a power of two to add */
-+ do {
-+ rc = mtrr_add(info->fix.smem_start,
-+ temp_size, type, 1);
-+ temp_size >>= 1;
-+ } while (temp_size >= PAGE_SIZE && rc == -EINVAL);
-+ }
-+ }
-+#endif /* CONFIG_MTRR */
-+
-+ if (register_framebuffer(info) < 0) {
-+ printk(KERN_ERR
-+ "vesafb: failed to register framebuffer device\n");
-+ err = -EINVAL;
-+ goto out_mem;
-+ }
-+
-+ printk(KERN_INFO "vesafb: framebuffer at 0x%lx, mapped to 0x%p, "
-+ "using %dk, total %dk\n", info->fix.smem_start,
-+ info->screen_base, size_remap/1024, size_total/1024);
-+ printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node,
-+ info->fix.id);
-+
-+ sprintf(entry, "fb%d", info->node);
-+ proc_mkdir(entry, 0);
-+
-+ sprintf(entry, "fb%d/modes", info->node);
-+ create_proc_read_entry(entry, 0, 0, vesafb_read_proc_modes, NULL);
-+
-+ sprintf(entry, "fb%d/vbe_info", info->node);
-+ create_proc_read_entry(entry, 0, 0, vesafb_read_proc_vbe_info, NULL);
-+ return 0;
-+
-+out_mem:
-+ release_mem_region(info->fix.smem_start, size_total);
-+ if (!list_empty(&info->modelist))
-+ fb_destroy_modelist(&info->modelist);
-+ fb_destroy_modedb(info->monspecs.modedb);
-+out_cmap:
-+ fb_dealloc_cmap(&info->cmap);
-+out:
-+ framebuffer_release(info);
-+ vesafb_info = NULL;
-+ kfree(vbe_modes);
-+ vbe_modes = NULL;
-+ return err;
-+}
-+
-+int __init vesafb_init(void)
-+{
-+ int ret;
-+#ifndef MODULE
-+ char *option = NULL;
-+
-+ if (fb_get_options("vesafb", &option))
-+ return -ENODEV;
-+ vesafb_setup(option);
-+#endif
-+ ret = platform_driver_register(&vesafb_driver);
-+
-+ if (!ret) {
-+ vesafb_device = platform_device_alloc("vesafb", 0);
-+
-+ if (vesafb_device)
-+ ret = platform_device_add(vesafb_device);
-+ else
-+ ret = -ENOMEM;
-+
-+ if (ret) {
-+ platform_device_put(vesafb_device);
-+ platform_driver_unregister(&vesafb_driver);
-+ }
-+ }
-+ return ret;
-+}
-+
-+module_init(vesafb_init);
-+
-+#ifdef MODULE
-+void __exit vesafb_exit(void)
-+{
-+ char entry[16];
-+
-+ if (vesafb_info)
-+ unregister_framebuffer(vesafb_info);
-+
-+ platform_device_unregister(vesafb_device);
-+ platform_driver_unregister(&vesafb_driver);
-+
-+ if (vesafb_info) {
-+ struct vesafb_par *par = (struct vesafb_par*)vesafb_info->par;
-+
-+ sprintf(entry, "fb%d/modes", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ sprintf(entry, "fb%d/vbe_info", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ sprintf(entry, "fb%d", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ iounmap(vesafb_info->screen_base);
-+ release_mem_region(vesafb_info->fix.smem_start,
-+ par->mem_total);
-+ fb_dealloc_cmap(&vesafb_info->cmap);
-+ if (!list_empty(&vesafb_info->modelist))
-+ fb_destroy_modelist(&vesafb_info->modelist);
-+ fb_destroy_modedb(vesafb_info->monspecs.modedb);
-+ framebuffer_release(vesafb_info);
-+ }
-+
-+ if (vbe_modes != NULL)
-+ kfree(vbe_modes);
-+}
-+
-+module_exit(vesafb_exit);
-+
-+static inline int param_get_scroll(char *buffer, struct kernel_param *kp)
-+{
-+ return 0;
-+}
-+static inline int param_set_scroll(const char *val, struct kernel_param *kp)
-+{
-+ ypan = 0;
-+
-+ if (! strcmp(val, "redraw"))
-+ ypan = 0;
-+ else if (! strcmp(val, "ypan"))
-+ ypan = 1;
-+ else if (! strcmp(val, "ywrap"))
-+ ypan = 2;
-+
-+ return 0;
-+}
-+
-+#define param_check_scroll(name, p) __param_check(name, p, void);
-+
-+module_param_named(scroll, ypan, scroll, 0);
-+MODULE_PARM_DESC(scroll,"Scrolling mode, set to 'redraw', 'ypan' or 'ywrap'");
-+module_param_named(vgapal, pmi_setpal, invbool, 0);
-+MODULE_PARM_DESC(vgapal,"bool: set palette using VGA registers");
-+module_param_named(pmipal, pmi_setpal, bool, 0);
-+MODULE_PARM_DESC(pmipal,"bool: set palette using PMI calls");
-+module_param(mtrr, uint, 0);
-+MODULE_PARM_DESC(mtrr,"Memory Type Range Registers setting. Use 0 to disable.");
-+module_param(blank, bool, 1);
-+MODULE_PARM_DESC(blank,"bool: enable hardware blanking");
-+module_param(nocrtc, bool, 0);
-+MODULE_PARM_DESC(nocrtc,"bool: ignore CRTC timings when setting modes");
-+module_param(noedid, bool, 0);
-+MODULE_PARM_DESC(noedid,"bool: ignore EDID-provided monitor limits "
-+ "when setting modes");
-+module_param(gtf, bool, 0);
-+MODULE_PARM_DESC(gtf,"bool: force use of VESA GTF to calculate mode timings");
-+module_param(vram_remap, uint, 0);
-+MODULE_PARM_DESC(vram_remap,"Set amount of video memory to be used [MiB]");
-+module_param(vram_total, uint, 0);
-+MODULE_PARM_DESC(vram_total,"Set total amount of video memoery [MiB]");
-+module_param(maxclk, ushort, 0);
-+MODULE_PARM_DESC(maxclk,"Maximum pixelclock [MHz], overrides EDID data");
-+module_param(maxhf, ushort, 0);
-+MODULE_PARM_DESC(maxhf,"Maximum horizontal frequency [kHz], "
-+ "overrides EDID data");
-+module_param(maxvf, ushort, 0);
-+MODULE_PARM_DESC(maxvf,"Maximum vertical frequency [Hz], "
-+ "overrides EDID data");
-+module_param_named(mode, mode_option, charp, 0);
-+MODULE_PARM_DESC(mode, "Specify resolution as "
-+ "\"<xres>x<yres>[-<bpp>][@<refresh>]\"");
-+module_param(vbemode, ushort, 0);
-+MODULE_PARM_DESC(vbemode,"VBE mode number to set, overrides 'mode' setting");
-+
-+#endif /* MODULE */
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Michal Januszewski");
-+MODULE_DESCRIPTION("Framebuffer driver for VBE2.0+ compliant graphics boards");
-+
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 4463735..7283e48 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1390,6 +1390,8 @@ extern void mmput(struct mm_struct *);
- extern struct mm_struct *get_task_mm(struct task_struct *task);
- /* Remove the current tasks stale references to the old mm_struct */
- extern void mm_release(struct task_struct *, struct mm_struct *);
-+/* Create a new mm for a kernel thread */
-+extern int set_new_mm(void);
-
- extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *);
- extern void flush_thread(void);
-diff --git a/include/video/vesa.h b/include/video/vesa.h
-new file mode 100644
-index 0000000..bb5abcf
---- /dev/null
-+++ b/include/video/vesa.h
-@@ -0,0 +1,150 @@
-+#if 0
-+#define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , \
-+ ## args)
-+#else
-+#define DPRINTK(fmt, args...)
-+#endif
-+
-+#define p_crtc(arg) ((struct vesafb_crtc_ib*)(arg))
-+#define p_vbe(arg) ((struct vesafb_vbe_ib*)(arg))
-+#define p_mode(arg) ((struct vesafb_mode_ib*)(arg))
-+
-+struct vesafb_task {
-+ u8 flags;
-+ void *buf;
-+ int buf_len;
-+ struct vm86_regs regs;
-+ struct list_head node;
-+ struct completion done;
-+};
-+
-+/* Vesafb task flags and masks */
-+#define TF_CALL 0x00
-+#define TF_EXIT 0x01
-+#define TF_GETVBEIB 0x02
-+#define TF_BUF_DI 0x04
-+#define TF_BUF_BX 0x08
-+#define TF_RETURN_BUF 0x10
-+
-+/* Macros and functions for manipulating vesafb tasks */
-+#define vesafb_create_task(task) \
-+do { \
-+ task = kmalloc(sizeof(struct vesafb_task), GFP_ATOMIC); \
-+ if (task) \
-+ memset(task, 0, sizeof(struct vesafb_task)); \
-+ init_completion(&task->done); \
-+} while (0)
-+
-+#define vesafb_wait_for_task(task) wait_for_completion(&task->done);
-+#define vesafb_reset_task(task) init_completion(&task->done);
-+int vesafb_queue_task(struct vesafb_task *task);
-+
-+/* Functions for controlling the vesafb thread */
-+int vesafb_wait_for_thread(void);
-+
-+#define VBE_CAP_CAN_SWITCH_DAC 0x01
-+#define VBE_CAP_VGACOMPAT 0x02
-+
-+/* This struct is 512 bytes long */
-+struct vesafb_vbe_ib {
-+ char vbe_signature[4];
-+ u16 vbe_version;
-+ u32 oem_string_ptr;
-+ u32 capabilities;
-+ u32 mode_list_ptr;
-+ u16 total_memory;
-+ u16 oem_software_rev;
-+ u32 oem_vendor_name_ptr;
-+ u32 oem_product_name_ptr;
-+ u32 oem_product_rev_ptr;
-+ u8 reserved[222];
-+ char oem_data[256];
-+} __attribute__ ((packed));
-+
-+struct vesafb_crtc_ib {
-+ u16 horiz_total;
-+ u16 horiz_start;
-+ u16 horiz_end;
-+ u16 vert_total;
-+ u16 vert_start;
-+ u16 vert_end;
-+ u8 flags;
-+ u32 pixel_clock;
-+ u16 refresh_rate;
-+ u8 reserved[40];
-+} __attribute__ ((packed));
-+
-+#define VBE_MODE_VGACOMPAT 0x20
-+
-+struct vesafb_mode_ib {
-+ /* for all VBE revisions */
-+ u16 mode_attr;
-+ u8 winA_attr;
-+ u8 winB_attr;
-+ u16 win_granularity;
-+ u16 win_size;
-+ u16 winA_seg;
-+ u16 winB_seg;
-+ u32 win_func_ptr;
-+ u16 bytes_per_scan_line;
-+
-+ /* for VBE 1.2+ */
-+ u16 x_res;
-+ u16 y_res;
-+ u8 x_char_size;
-+ u8 y_char_size;
-+ u8 planes;
-+ u8 bits_per_pixel;
-+ u8 banks;
-+ u8 memory_model;
-+ u8 bank_size;
-+ u8 image_pages;
-+ u8 reserved1;
-+
-+ /* Direct color fields for direct/6 and YUV/7 memory models. */
-+ /* Offsets are bit positions of lsb in the mask. */
-+ u8 red_len;
-+ u8 red_off;
-+ u8 green_len;
-+ u8 green_off;
-+ u8 blue_len;
-+ u8 blue_off;
-+ u8 rsvd_len;
-+ u8 rsvd_off;
-+ u8 direct_color_info; /* direct color mode attributes */
-+
-+ /* for VBE 2.0+ */
-+ u32 phys_base_ptr;
-+ u8 reserved2[6];
-+
-+ /* for VBE 3.0+ */
-+ u16 lin_bytes_per_scan_line;
-+ u8 bnk_image_pages;
-+ u8 lin_image_pages;
-+ u8 lin_red_len;
-+ u8 lin_red_off;
-+ u8 lin_green_len;
-+ u8 lin_green_off;
-+ u8 lin_blue_len;
-+ u8 lin_blue_off;
-+ u8 lin_rsvd_len;
-+ u8 lin_rsvd_off;
-+ u32 max_pixel_clock;
-+ u16 mode_id;
-+ u8 depth;
-+} __attribute__ ((packed));
-+
-+struct vesafb_pal_entry {
-+ u_char blue, green, red, pad;
-+} __attribute__ ((packed));
-+
-+struct vesafb_par {
-+ u8 *vbe_state;
-+ int vbe_state_size;
-+ atomic_t ref_count;
-+
-+ u32 mem_total;
-+ int mode_idx;
-+ struct vesafb_crtc_ib crtc;
-+};
-+
-diff --git a/kernel/fork.c b/kernel/fork.c
-index fc723e5..dc8f93b 100644
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -100,6 +100,7 @@ struct kmem_cache *fs_cachep;
-
- /* SLAB cache for vm_area_struct structures */
- struct kmem_cache *vm_area_cachep;
-+EXPORT_SYMBOL_GPL(vm_area_cachep);
-
- /* SLAB cache for mm_struct structures (tsk->mm) */
- static struct kmem_cache *mm_cachep;
-@@ -399,6 +400,40 @@ void mmput(struct mm_struct *mm)
- EXPORT_SYMBOL_GPL(mmput);
-
- /**
-+ * set_new_mm - allocate, init and activate a new mm for a kernel thread
-+ */
-+int set_new_mm(void)
-+{
-+ struct mm_struct *mm;
-+ struct task_struct *tsk = current;
-+ struct mm_struct *active_mm;
-+
-+ mm = mm_alloc();
-+ if (!mm)
-+ goto fail_nomem;
-+ if (init_new_context(current,mm))
-+ goto fail_nocontext;
-+
-+ task_lock(tsk);
-+ tsk->flags |= PF_BORROWED_MM;
-+ active_mm = tsk->active_mm;
-+ current->mm = mm;
-+ current->active_mm = mm;
-+ activate_mm(active_mm, mm);
-+ task_unlock(current);
-+
-+ /* Drop the previous active_mm */
-+ mmdrop(active_mm);
-+ return 0;
-+
-+fail_nocontext:
-+ mmdrop(mm);
-+fail_nomem:
-+ return -EINVAL;
-+}
-+EXPORT_SYMBOL_GPL(set_new_mm);
-+
-+/**
- * get_task_mm - acquire a reference to the task's mm
- *
- * Returns %NULL if the task has no mm. Checks PF_BORROWED_MM (meaning
-diff --git a/mm/memory.c b/mm/memory.c
-index 563792f..a9519ea 100644
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -1193,6 +1193,7 @@ int zeromap_page_range(struct vm_area_struct *vma,
- } while (pgd++, addr = next, addr != end);
- return err;
- }
-+EXPORT_SYMBOL_GPL(zeromap_page_range);
-
- pte_t * fastcall get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl)
- {
-diff --git a/mm/mmap.c b/mm/mmap.c
-index 9717337..6fa5b1c 100644
---- a/mm/mmap.c
-+++ b/mm/mmap.c
-@@ -2024,6 +2024,7 @@ int insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma)
- vma_link(mm, vma, prev, rb_link, rb_parent);
- return 0;
- }
-+EXPORT_SYMBOL_GPL(insert_vm_struct);
-
- /*
- * Copy the vma structure to a new location in the same mm,
diff --git a/packages/linux/linux-rp-2.6.21/wm97xx-lcdnoise-r0.patch b/packages/linux/linux-rp-2.6.21/wm97xx-lcdnoise-r0.patch
deleted file mode 100644
index 191de3af22..0000000000
--- a/packages/linux/linux-rp-2.6.21/wm97xx-lcdnoise-r0.patch
+++ /dev/null
@@ -1,208 +0,0 @@
-Index: linux-tosa/drivers/input/touchscreen/wm9712.c
-===================================================================
---- linux-tosa.orig/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:50.923275896 +0100
-@@ -1,7 +1,7 @@
- /*
- * wm9712.c -- Codec driver for Wolfson WM9712 AC97 Codecs.
- *
-- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
- * Author: Liam Girdwood
- * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
- * Parts Copyright : Ian Molton <spyro@f2s.com>
-@@ -13,6 +13,12 @@
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
-+ * Revision history
-+ * 4th Jul 2005 Initial version.
-+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
-+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
-+ * touchscreen interference.
-+ *
- */
-
- #include <linux/module.h>
-@@ -28,6 +34,10 @@
- #define WM9705_VERSION "0.60"
- #define DEFAULT_PRESSURE 0xb0c0
-
-+#define CCNT(a) asm volatile ("mrc p14, 0, %0, C1, C1, 0" : "=r"(a))
-+#define CCNT_ON() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+#define CCNT_OFF() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+
- /*
- * Debug
- */
-@@ -243,6 +253,36 @@
- return wm->dig[2] & WM9712_PDEN;
- }
-
-+
-+#ifdef CONFIG_MACH_TOSA
-+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
-+ * before sampling the Y axis of the touchscreen */
-+static inline void wm9712_lcd_sync_on(struct wm97xx* wm, int adcsel) {
-+ unsigned long timer1 = 0, timer2 = 0, wait_time = 0;
-+ if (adcsel == WM97XX_ADCSEL_Y) {
-+ wait_time = wm97xx_calc_lcd_waittime(wm);
-+
-+ CCNT_ON();
-+
-+ if (wait_time) {
-+ /* wait for LCD rising edge */
-+ wm_machinfo->wait_hsync();
-+ /* get clock */
-+ CCNT(timer1);
-+ CCNT(timer2);
-+
-+ while ((timer2 - timer1) < wait_time) {
-+ CCNT(timer2);
-+ }
-+ }
-+ }
-+}
-+
-+static inline void wm9712_lcd_sync_off(void) {
-+ CCNT_OFF();
-+}
-+#endif
-+
- /*
- * Read a sample from the WM9712 adc in polling mode.
- */
-@@ -260,6 +300,9 @@
- /* set up digitiser */
- if (adcsel & 0x8000)
- adcsel = ((adcsel & 0x7fff) + 3) << 12;
-+ #ifdef CONFIG_MACH_TOSA
-+ wm9712_lcd_sync_on(wm, adcsel);
-+ #endif
- wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, adcsel | WM97XX_POLL | WM97XX_DELAY(delay));
-
- /* wait 3 AC97 time slots + delay for conversion */
-@@ -282,6 +325,10 @@
-
- *sample = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-
-+ #ifdef CONFIG_MACH_TOSA
-+ wm9712_lcd_sync_off();
-+ #endif
-+
- /* check we have correct sample */
- if ((*sample & WM97XX_ADCSEL_MASK) != adcsel) {
- dbg ("adc wrong sample, read %x got %x", adcsel,
-@@ -303,11 +350,12 @@
- static int wm9712_poll_touch(struct wm97xx* wm, struct wm97xx_data *data)
- {
- int rc;
--
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_X, &data->x)) != RC_VALID)
- return rc;
-+
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_Y, &data->y)) != RC_VALID)
- return rc;
-+
- if (pil && !five_wire) {
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_PRES, &data->p)) != RC_VALID)
- return rc;
-Index: linux-tosa/drivers/input/touchscreen/wm97xx-core.c
-===================================================================
---- linux-tosa.orig/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:50.924275744 +0100
-@@ -2,7 +2,7 @@
- * wm97xx-core.c -- Touch screen driver core for Wolfson WM9705, WM9712
- * and WM9713 AC97 Codecs.
- *
-- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
- * Author: Liam Girdwood
- * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
- * Parts Copyright : Ian Molton <spyro@f2s.com>
-@@ -67,6 +67,9 @@
- * GPIOs) and 2.6 power management.
- * 29th Nov 2004 Added WM9713 support.
- * 4th Jul 2005 Moved codec specific code out to seperate files.
-+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
-+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
-+ * touchscreen interference.
- */
-
- #include <linux/module.h>
-@@ -94,6 +97,7 @@
- static DECLARE_MUTEX(gpio_sem);
- static LIST_HEAD(wm97xx_misc_list);
- static struct wm97xx* wm_codec = NULL;
-+struct wm97xx_machinfo *wm_machinfo;
-
- /*
- * WM97xx - enable/disable AUX ADC sysfs
-@@ -832,6 +836,23 @@
- mdev->remove(wm_codec);
- }
-
-+#ifdef CONFIG_MACH_TOSA
-+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
-+ * before sampling the Y axis of the touchscreen */
-+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm) {
-+ unsigned long hsync_time = wm_machinfo->get_hsync_time();
-+ return hsync_time;
-+}
-+
-+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo) {
-+ wm_machinfo = machinfo;
-+}
-+
-+void wm97xx_unset_machinfo() {
-+ wm_machinfo = NULL;
-+}
-+#endif
-+
- static struct device_driver wm97xx_driver = {
- .name = "ac97",
- .bus = &ac97_bus_type,
-@@ -861,6 +882,9 @@
- EXPORT_SYMBOL_GPL(wm97xx_reg_write);
- EXPORT_SYMBOL_GPL(wm97xx_register_misc_dev);
- EXPORT_SYMBOL_GPL(wm97xx_unregister_misc_dev);
-+EXPORT_SYMBOL_GPL(wm97xx_calc_lcd_waittime);
-+EXPORT_SYMBOL_GPL(wm97xx_set_machinfo);
-+EXPORT_SYMBOL_GPL(wm97xx_unset_machinfo);
-
- module_init(wm97xx_init);
- module_exit(wm97xx_exit);
-Index: linux-tosa/include/linux/wm97xx.h
-===================================================================
---- linux-tosa.orig/include/linux/wm97xx.h 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/include/linux/wm97xx.h 2006-08-29 16:52:50.924275744 +0100
-@@ -207,6 +207,7 @@
-
- struct wm97xx;
- extern struct wm97xx_codec_drv wm97xx_codec;
-+extern struct wm97xx_machinfo *wm_machinfo;
-
- /*
- * Codec driver interface - allows mapping to WM9705/12/13 and newer codecs
-@@ -253,6 +254,11 @@
- struct list_head list;
- };
-
-+struct wm97xx_machinfo {
-+ unsigned long (*get_hsync_time)(void);
-+ void (*wait_hsync)(void);
-+};
-+
- int wm97xx_register_misc_dev(struct wm97xx_misc_dev* mdev);
- void wm97xx_unregister_misc_dev(struct wm97xx_misc_dev* mdev);
-
-@@ -281,4 +287,9 @@
- int wm97xx_acc_startup(struct wm97xx* wm);
- void wm97xx_acc_shutdown(struct wm97xx* wm);
-
-+
-+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm);
-+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo);
-+void wm97xx_unset_machinfo(void);
-+
- #endif
diff --git a/packages/linux/linux-rp-2.6.22/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.22/connectplus-remove-ide-HACK.patch
deleted file mode 100644
index 4414b21191..0000000000
--- a/packages/linux/linux-rp-2.6.22/connectplus-remove-ide-HACK.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: linux-2.6.13/drivers/ide/legacy/ide-cs.c
-===================================================================
---- linux-2.6.13.orig/drivers/ide/legacy/ide-cs.c 2005-09-01 22:43:46.000000000 +0100
-+++ linux-2.6.13/drivers/ide/legacy/ide-cs.c 2005-09-01 22:45:46.000000000 +0100
-@@ -488,7 +488,6 @@
- PCMCIA_DEVICE_PROD_ID123("KODAK Picture Card ", "KODAK ", "V100K", 0x94a0d8f3, 0xe4fc3ea0, 0xe5e7eed4),
- PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
- PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
-- PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
- PCMCIA_DEVICE_NULL,
- };
- MODULE_DEVICE_TABLE(pcmcia, ide_ids);
diff --git a/packages/linux/linux-rp-2.6.22/defconfig-akita b/packages/linux/linux-rp-2.6.22/defconfig-akita
deleted file mode 100644
index dd8cb8558f..0000000000
--- a/packages/linux/linux-rp-2.6.22/defconfig-akita
+++ /dev/null
@@ -1,1747 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Thu Mar 29 12:24:24 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_WLAN_80211=y
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-
-#
-# Soc Platforms
-#
-CONFIG_SND_PXA2xx_SOC=m
-CONFIG_SND_PXA2xx_SOC_I2S=m
-CONFIG_SND_PXA2xx_SOC_SPITZ=m
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_SPITZ=m
-# CONFIG_SND_PXA2XX_SOC_MAGICIAN is not set
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-# CONFIG_SND_SOC_WM8731 is not set
-CONFIG_SND_SOC_WM8750=m
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8976 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_TIMER_STATS=y
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-CONFIG_SHARPSL_RC=m
diff --git a/packages/linux/linux-rp-2.6.22/defconfig-bootcdx86 b/packages/linux/linux-rp-2.6.22/defconfig-bootcdx86
deleted file mode 100644
index 833f72ac9e..0000000000
--- a/packages/linux/linux-rp-2.6.22/defconfig-bootcdx86
+++ /dev/null
@@ -1,1607 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21
-# Mon Jun 11 12:01:43 2007
-#
-CONFIG_X86_32=y
-CONFIG_GENERIC_TIME=y
-CONFIG_CLOCKSOURCE_WATCHDOG=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_SEMAPHORE_SLEEPERS=y
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_ZONE_DMA=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_DMI=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_CPUSETS is not set
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-CONFIG_IOSCHED_CFQ=y
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_CFQ=y
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
-
-#
-# Processor type and features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_SMP=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_ES7000 is not set
-# CONFIG_PARAVIRT is not set
-# CONFIG_M386 is not set
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-CONFIG_MPENTIUMII=y
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MCORE2 is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-CONFIG_X86_CMPXCHG64=y
-CONFIG_X86_GOOD_APIC=y
-CONFIG_X86_INTEL_USERCOPY=y
-CONFIG_X86_USE_PPRO_CHECKSUM=y
-CONFIG_X86_TSC=y
-CONFIG_HPET_TIMER=y
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_NONFATAL=y
-CONFIG_X86_MCE_P4THERMAL=y
-CONFIG_VM86=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_3G_OPT is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-CONFIG_IRQBALANCE=y
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_HZ_300 is not set
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=250
-# CONFIG_KEXEC is not set
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_RELOCATABLE is not set
-CONFIG_PHYSICAL_ALIGN=0x100000
-# CONFIG_HOTPLUG_CPU is not set
-# CONFIG_COMPAT_VDSO is not set
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_PROCFS=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_FAN=y
-# CONFIG_ACPI_DOCK is not set
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_ASUS is not set
-# CONFIG_ACPI_IBM is not set
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-CONFIG_PCIEPORTBUS=y
-CONFIG_PCIEAER=y
-CONFIG_PCI_MSI=y
-CONFIG_HT_IRQ=y
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-CONFIG_K8_NB=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=65536
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# Misc devices
-#
-# CONFIG_IBM_ASM is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_TIFM_CORE is not set
-# CONFIG_SONY_LAPTOP is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA 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_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_SEAGATE is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_SRP is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Macintosh device drivers
-#
-# CONFIG_MAC_EMUMOUSEBTN is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-CONFIG_NET_VENDOR_3COM=y
-# CONFIG_EL1 is not set
-# CONFIG_EL2 is not set
-# CONFIG_ELPLUS is not set
-# CONFIG_EL16 is not set
-# CONFIG_EL3 is not set
-# CONFIG_3C515 is not set
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-CONFIG_LANCE=m
-CONFIG_NET_VENDOR_SMC=y
-CONFIG_WD80x3=m
-CONFIG_ULTRA=m
-CONFIG_SMC9194=m
-# CONFIG_NET_VENDOR_RACAL is not set
-
-#
-# Tulip family network device support
-#
-CONFIG_NET_TULIP=y
-# CONFIG_DE2104X is not set
-CONFIG_TULIP=m
-CONFIG_TULIP_MWI=y
-CONFIG_TULIP_MMIO=y
-CONFIG_TULIP_NAPI=y
-CONFIG_TULIP_NAPI_HW_MITIGATION=y
-CONFIG_DE4X5=m
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_ULI526X=m
-CONFIG_AT1700=m
-CONFIG_DEPCA=m
-CONFIG_HP100=m
-CONFIG_NET_ISA=y
-# CONFIG_E2100 is not set
-# CONFIG_EWRK3 is not set
-# CONFIG_EEXPRESS is not set
-# CONFIG_EEXPRESS_PRO is not set
-# CONFIG_HPLAN_PLUS is not set
-# CONFIG_HPLAN is not set
-# CONFIG_LP486E is not set
-# CONFIG_ETH16I is not set
-CONFIG_NE2000=y
-# CONFIG_ZNET is not set
-# CONFIG_SEEQ8005 is not set
-CONFIG_NET_PCI=y
-CONFIG_PCNET32=m
-CONFIG_PCNET32_NAPI=y
-CONFIG_AMD8111_ETH=m
-CONFIG_AMD8111E_NAPI=y
-CONFIG_ADAPTEC_STARFIRE=m
-CONFIG_ADAPTEC_STARFIRE_NAPI=y
-CONFIG_AC3200=m
-CONFIG_APRICOT=m
-CONFIG_B44=m
-CONFIG_FORCEDETH=m
-CONFIG_FORCEDETH_NAPI=y
-CONFIG_CS89x0=m
-CONFIG_DGRS=m
-CONFIG_EEPRO100=m
-CONFIG_E100=m
-CONFIG_FEALNX=m
-CONFIG_NATSEMI=m
-CONFIG_NE2K_PCI=y
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-CONFIG_8139TOO_PIO=y
-CONFIG_8139TOO_TUNE_TWISTER=y
-CONFIG_8139TOO_8129=y
-# CONFIG_8139_OLD_RX_RESET is not set
-CONFIG_SIS900=m
-CONFIG_EPIC100=m
-CONFIG_SUNDANCE=m
-CONFIG_SUNDANCE_MMIO=y
-CONFIG_TLAN=m
-CONFIG_VIA_RHINE=m
-CONFIG_VIA_RHINE_MMIO=y
-CONFIG_VIA_RHINE_NAPI=y
-CONFIG_SC92031=m
-
-#
-# Ethernet (1000 Mbit)
-#
-CONFIG_ACENIC=m
-CONFIG_ACENIC_OMIT_TIGON_I=y
-CONFIG_DL2K=m
-CONFIG_E1000=m
-CONFIG_E1000_NAPI=y
-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
-CONFIG_NS83820=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_R8169=m
-CONFIG_R8169_NAPI=y
-CONFIG_SIS190=m
-CONFIG_SKGE=m
-CONFIG_SKY2=m
-CONFIG_SK98LIN=m
-CONFIG_VIA_VELOCITY=m
-CONFIG_TIGON3=m
-CONFIG_BNX2=m
-CONFIG_QLA3XXX=m
-CONFIG_ATL1=m
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_CHELSIO_T3 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NETXEN_NIC is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-CONFIG_AGP=m
-CONFIG_AGP_ALI=m
-CONFIG_AGP_ATI=m
-CONFIG_AGP_AMD=m
-CONFIG_AGP_AMD64=m
-CONFIG_AGP_INTEL=m
-CONFIG_AGP_NVIDIA=m
-CONFIG_AGP_SIS=m
-CONFIG_AGP_SWORKS=m
-CONFIG_AGP_VIA=m
-CONFIG_AGP_EFFICEON=m
-# CONFIG_DRM is not set
-# CONFIG_DRM_I830 is not set
-# CONFIG_DRM_I915 is not set
-# CONFIG_MWAVE is not set
-# CONFIG_PC8736x_GPIO is not set
-# CONFIG_NSC_GPIO is not set
-# CONFIG_CS5535_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
-# CONFIG_FB_VESA_STD is not set
-CONFIG_FB_VESA_TNG=y
-CONFIG_FB_VESA_DEFAULT_MODE="640x480-16@60"
-CONFIG_VIDEO_SELECT=y
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_I810 is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_S3 is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_CYBLA is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ISA devices
-#
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB 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_MIRO is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_WAVEFRONT is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5535AUDIO is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGODJ 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_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR 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_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-CONFIG_SND_AC97_POWER_SAVE=y
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_USX2Y is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=y
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-CONFIG_USB_SUSPEND=y
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_SPLIT_ISO=y
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-# CONFIG_USB_GTCO is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_MON is not set
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-# CONFIG_EDAC is not set
-
-#
-# Real Time Clock
-#
-# CONFIG_RTC_CLASS is not set
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# Auxiliary Display support
-#
-
-#
-# Virtualization
-#
-# CONFIG_KVM is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf-8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
-# CONFIG_KPROBES is not set
-
-#
-# Kernel hacking
-#
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=15
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_EARLY_PRINTK=y
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-CONFIG_DOUBLEFAULT=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_TWOFISH_586 is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_AES_586 is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-CONFIG_CRYPTO_DEV_PADLOCK=m
-CONFIG_CRYPTO_DEV_PADLOCK_AES=m
-CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
-CONFIG_CRYPTO_DEV_GEODE=m
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_AUDIT_GENERIC=y
-# CONFIG_LZO is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_KTIME_SCALAR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.22/defconfig-c7x0 b/packages/linux/linux-rp-2.6.22/defconfig-c7x0
deleted file mode 100644
index d9b3e2b93f..0000000000
--- a/packages/linux/linux-rp-2.6.22/defconfig-c7x0
+++ /dev/null
@@ -1,1789 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Thu Mar 29 13:32:11 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-CONFIG_MACH_CORGI=y
-CONFIG_MACH_SHEPHERD=y
-CONFIG_MACH_HUSKY=y
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-CONFIG_PXA_SHARP_C7xx=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_CPU_FREQ_PXA25x=y
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_WLAN_80211=y
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_KEYBOARD_CORGI=y
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_CORGI=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-CONFIG_VIDEO_USBVIDEO=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-CONFIG_USB_DSBR=m
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MBX is not set
-CONFIG_FB_W100=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_CORGI=m
-# CONFIG_SND_PXA2XX_SOC_MAGICIAN is not set
-
-#
-# SoC Audio for the Atmel AT91
-#
-
-#
-# SoC Audio for the Freescale i.MX
-#
-
-#
-# SoC Audio for the Samsung S3C24XX
-#
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8711 is not set
-# CONFIG_SND_SOC_WM8510 is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8956 is not set
-# CONFIG_SND_SOC_WM8960 is not set
-# CONFIG_SND_SOC_WM8976 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM8980 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.22/defconfig-collie b/packages/linux/linux-rp-2.6.22/defconfig-collie
deleted file mode 100644
index 49d9596b92..0000000000
--- a/packages/linux/linux-rp-2.6.22/defconfig-collie
+++ /dev/null
@@ -1,1741 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20.4
-# Fri Apr 6 23:20:59 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-# CONFIG_ELF_CORE is not set
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_COLLIE=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-CONFIG_PCMCIA_SA1100=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-CONFIG_NODES_SHIFT=2
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_USB_IRDA=m
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_SA1100_FIR=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-CONFIG_MTD_OBSOLETE_CHIPS=y
-CONFIG_MTD_SHARP=y
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SA1100=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_ARLAN is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-# CONFIG_SPI_BITBANG is not set
-CONFIG_SPI_LOCOMO=m
-
-#
-# SPI Protocol Masters
-#
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_MCP=y
-CONFIG_MCP_SA11X0=y
-CONFIG_MCP_UCB1200=y
-CONFIG_MCP_UCB1200_TS=m
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=m
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK 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_USB_DSBR is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-CONFIG_FB_SA1100=y
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-CONFIG_USB_NET_CDC_SUBSET=m
-# CONFIG_USB_ALI_M5632 is not set
-# CONFIG_USB_AN2720 is not set
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_EPSON2888 is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-CONFIG_MMC_DEBUG=y
-CONFIG_MMC_BLOCK=m
-# CONFIG_MMC_TIFM_SD is not set
-CONFIG_MMC_SPI=m
-CONFIG_MMC_UNSAFE_RESUME=y
-
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=m
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=m
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=m
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.22/defconfig-htcuniversal b/packages/linux/linux-rp-2.6.22/defconfig-htcuniversal
deleted file mode 100644
index 04e9070b80..0000000000
--- a/packages/linux/linux-rp-2.6.22/defconfig-htcuniversal
+++ /dev/null
@@ -1,1305 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.22
-# Thu Aug 23 16:10:44 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-# CONFIG_GENERIC_CLOCKEVENTS is not set
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_HX2750 is not set
-CONFIG_MACH_HTCUNIVERSAL=y
-
-#
-# HTC Universal support
-#
-CONFIG_HTCUNIVERSAL_CORE=y
-CONFIG_HTCUNIVERSAL_UDC=y
-CONFIG_HTCUNIVERSAL_POWER=y
-CONFIG_HTCUNIVERSAL_BACKLIGHT=y
-CONFIG_HTCUNIVERSAL_LCD=y
-CONFIG_HTCUNIVERSAL_TS2=y
-CONFIG_HTCUNIVERSAL_BUTTONS=y
-CONFIG_HTCUNIVERSAL_BLUETOOTH=m
-CONFIG_HTCUNIVERSAL_ASIC3_LEDS=y
-CONFIG_HTCUNIVERSAL_PHONE=m
-# CONFIG_HTCUNIVERSAL_AK4641 is not set
-CONFIG_PXA27x=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_TICK_ONESHOT is not set
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SYSFS_DEPRECATED=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=y
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=y
-# CONFIG_IRNET is not set
-CONFIG_IRCOMM=y
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=y
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_PXA_FICP=y
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_EXT=y
-# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-# CONFIG_MTD_CHAR is not set
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=4096
-CONFIG_MTDRAM_ERASE_SIZE=128
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-# CONFIG_NET_ETHERNET is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NETDEV_10000=y
-
-#
-# Wireless LAN
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
-CONFIG_ACX=m
-CONFIG_ACX_MEM=y
-# CONFIG_ACX_CS is not set
-CONFIG_ACX_HTCUNIVERSAL=m
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_KEYBOARD_PXA27x=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_APPLETOUCH is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=m
-CONFIG_I2C_BOARDINFO=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_GPIO is not set
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_STUB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-CONFIG_W1=y
-
-#
-# 1-wire Bus Masters
-#
-# CONFIG_W1_MASTER_DS2482 is not set
-CONFIG_W1_MASTER_DS1WM=y
-
-#
-# 1-wire Slaves
-#
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_SLAVE_DS2760=y
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-CONFIG_BATTERY_DS2760=y
-# CONFIG_HWMON is not set
-
-#
-# Misc devices
-#
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_HTC_ASIC3=y
-CONFIG_HTC_ASIC3_DS1WM=y
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_ASIC3=y
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# System on Chip audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-# CONFIG_MMC_PXA is not set
-CONFIG_MMC_ASIC3=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=y
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_BIND34 is not set
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-CONFIG_NLS_CODEPAGE_1250=y
-CONFIG_NLS_CODEPAGE_1251=y
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=y
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=y
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.22/defconfig-hx2000 b/packages/linux/linux-rp-2.6.22/defconfig-hx2000
deleted file mode 100644
index ee05db4e5a..0000000000
--- a/packages/linux/linux-rp-2.6.22/defconfig-hx2000
+++ /dev/null
@@ -1,1168 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20-rc2
-# Mon Jan 1 01:49:04 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_MACH_HX2750=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-CONFIG_PXA_KEYS=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-CONFIG_PM_DEBUG=y
-# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_TOUCHSCREEN_TSC2101=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-CONFIG_MFD_TSC2101=y
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_HX2750=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_TIMER_STATS=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.22/defconfig-poodle b/packages/linux/linux-rp-2.6.22/defconfig-poodle
deleted file mode 100644
index 387b5e9bff..0000000000
--- a/packages/linux/linux-rp-2.6.22/defconfig-poodle
+++ /dev/null
@@ -1,1659 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Jul 10 23:38:56 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-CONFIG_MACH_POODLE=y
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_EM28XX is not set
-CONFIG_USB_DSBR=m
-CONFIG_VIDEO_USBVIDEO=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-CONFIG_LOGO_OZ240_CLUT224=y
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8731 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8974 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_MAINSTONE_BASEBAND is not set
-# CONFIG_SND_MAINSTONE_BLUETOOTH is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_POODLE=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-CONFIG_MMC_UNSAFE_RESUME=y
-
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.22/defconfig-qemuarm b/packages/linux/linux-rp-2.6.22/defconfig-qemuarm
deleted file mode 100644
index 35cf3f5b17..0000000000
--- a/packages/linux/linux-rp-2.6.22/defconfig-qemuarm
+++ /dev/null
@@ -1,1194 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Sat Aug 26 22:45:02 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-CONFIG_ARCH_VERSATILE=y
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Versatile platform type
-#
-CONFIG_ARCH_VERSATILE_PB=y
-# CONFIG_MACH_VERSATILE_AB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-# CONFIG_KEXEC is not set
-CONFIG_ARM_VIC=y
-CONFIG_ICST307=y
-
-#
-# Bus support
-#
-CONFIG_ARM_AMBA=y
-CONFIG_PCI=y
-# CONFIG_PCI_DEBUG is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_LEDS=y
-CONFIG_LEDS_TIMER=y
-CONFIG_LEDS_CPU=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_VFP=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_APM is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_AFS_PARTS=y
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_GEOMETRY is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=51200
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=y
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-CONFIG_SCSI_SYM53C8XX_2=y
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-CONFIG_SCSI_SYM53C8XX_MMIO=y
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_SMC91X=y
-# CONFIG_DM9000 is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-CONFIG_SERIO_AMBAKMI=y
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_AMBA_PL011=y
-CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-# CONFIG_LEDS_CLASS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-# CONFIG_LEDS_TRIGGERS is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-CONFIG_FB_ARMCLCD=y
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_UHCI_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFSD_TCP is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=y
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-# 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_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_ISO8859_1 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_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.22/defconfig-qemux86 b/packages/linux/linux-rp-2.6.22/defconfig-qemux86
deleted file mode 100644
index e9eb83e2dd..0000000000
--- a/packages/linux/linux-rp-2.6.22/defconfig-qemux86
+++ /dev/null
@@ -1,1568 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Oct 16 19:42:42 2006
-#
-CONFIG_X86_32=y
-CONFIG_SEMAPHORE_SLEEPERS=y
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_DMI=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_CPUSETS is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_VM86=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_LBD=y
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# Processor type and features
-#
-CONFIG_SMP=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_ES7000 is not set
-CONFIG_M386=y
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_X86_PPRO_FENCE=y
-CONFIG_X86_F00F_BUG=y
-CONFIG_X86_INTEL_USERCOPY=y
-# CONFIG_HPET_TIMER is not set
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_NONFATAL=y
-CONFIG_X86_MCE_P4THERMAL=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-CONFIG_IRQBALANCE=y
-# CONFIG_REGPARM is not set
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=250
-# CONFIG_KEXEC is not set
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_HOTPLUG_CPU is not set
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_VIDEO=m
-# CONFIG_ACPI_HOTKEY is not set
-CONFIG_ACPI_FAN=y
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_ASUS is not set
-CONFIG_ACPI_IBM=m
-# CONFIG_ACPI_IBM_DOCK is not set
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-# CONFIG_PCIEPORTBUS is not set
-# CONFIG_PCI_MSI is not set
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=y
-CONFIG_BINFMT_MISC=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=y
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=y
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=y
-CONFIG_PARPORT_PC=y
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=y
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=51200
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-CONFIG_BLK_DEV_IDECD=y
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-CONFIG_BLK_DEV_CMD640=y
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_RZ1000=y
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-# CONFIG_BLK_DEV_AEC62XX 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_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 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_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-CONFIG_BLK_DEV_PIIX=y
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-CONFIG_SCSI_DPT_I2O=m
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-CONFIG_SCSI_SATA=y
-# CONFIG_SCSI_SATA_AHCI is not set
-# CONFIG_SCSI_SATA_SVW is not set
-CONFIG_SCSI_ATA_PIIX=y
-# CONFIG_SCSI_SATA_MV is not set
-# CONFIG_SCSI_SATA_NV is not set
-# CONFIG_SCSI_PDC_ADMA is not set
-# CONFIG_SCSI_SATA_QSTOR is not set
-# CONFIG_SCSI_SATA_PROMISE is not set
-CONFIG_SCSI_SATA_SX4=m
-# CONFIG_SCSI_SATA_SIL is not set
-# CONFIG_SCSI_SATA_SIL24 is not set
-CONFIG_SCSI_SATA_SIS=m
-# CONFIG_SCSI_SATA_ULI is not set
-# CONFIG_SCSI_SATA_VIA is not set
-# CONFIG_SCSI_SATA_VITESSE is not set
-CONFIG_SCSI_SATA_INTEL_COMBINED=y
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA 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_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-CONFIG_SCSI_IPR=m
-# CONFIG_SCSI_IPR_TRACE is not set
-# CONFIG_SCSI_IPR_DUMP is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_IEEE1394=y
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_OUI_DB is not set
-# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
-# CONFIG_IEEE1394_EXPORT_FULL_API is not set
-
-#
-# Device Drivers
-#
-
-#
-# Texas Instruments PCILynx requires I2C
-#
-CONFIG_IEEE1394_OHCI1394=y
-
-#
-# Protocol Drivers
-#
-# CONFIG_IEEE1394_VIDEO1394 is not set
-# CONFIG_IEEE1394_SBP2 is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-# CONFIG_IEEE1394_DV1394 is not set
-CONFIG_IEEE1394_RAWIO=y
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_LANCE is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-CONFIG_NET_ISA=y
-# CONFIG_E2100 is not set
-# CONFIG_EWRK3 is not set
-# CONFIG_EEXPRESS is not set
-# CONFIG_EEXPRESS_PRO is not set
-# CONFIG_HPLAN_PLUS is not set
-# CONFIG_HPLAN is not set
-# CONFIG_LP486E is not set
-# CONFIG_ETH16I is not set
-CONFIG_NE2000=y
-# CONFIG_ZNET is not set
-# CONFIG_SEEQ8005 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_AC3200 is not set
-# CONFIG_APRICOT is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_CS89x0 is not set
-# CONFIG_DGRS is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-CONFIG_NE2K_PCI=y
-# CONFIG_8139CP is not set
-CONFIG_8139TOO=y
-CONFIG_8139TOO_PIO=y
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_NET_POCKET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-CONFIG_S2IO=m
-# CONFIG_S2IO_NAPI is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-CONFIG_PRINTER=y
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
-# CONFIG_TIPAR is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-CONFIG_AGP=y
-# CONFIG_AGP_ALI is not set
-# CONFIG_AGP_ATI is not set
-# CONFIG_AGP_AMD is not set
-# CONFIG_AGP_AMD64 is not set
-CONFIG_AGP_INTEL=y
-# CONFIG_AGP_NVIDIA is not set
-# CONFIG_AGP_SIS is not set
-# CONFIG_AGP_SWORKS is not set
-# CONFIG_AGP_VIA is not set
-# CONFIG_AGP_EFFICEON is not set
-CONFIG_DRM=y
-# CONFIG_DRM_TDFX is not set
-# CONFIG_DRM_R128 is not set
-# CONFIG_DRM_RADEON is not set
-# CONFIG_DRM_I810 is not set
-# CONFIG_DRM_I830 is not set
-# CONFIG_DRM_I915 is not set
-# CONFIG_DRM_MGA is not set
-# CONFIG_DRM_SIS is not set
-# CONFIG_DRM_VIA is not set
-# CONFIG_DRM_SAVAGE is not set
-# CONFIG_MWAVE is not set
-# CONFIG_CS5535_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-# CONFIG_IBM_ASM is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
-# CONFIG_FB_VESA_STD is not set
-CONFIG_FB_VESA_TNG=y
-CONFIG_FB_VESA_DEFAULT_MODE="640x480-32@60"
-CONFIG_VIDEO_SELECT=y
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_I810 is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_CYBLA is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=y
-CONFIG_SND_AC97_BUS=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ISA devices
-#
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB 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_MIRO is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_WAVEFRONT is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5535AUDIO 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_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR 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_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_USX2Y is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGETKIT is not set
-CONFIG_USB_PHIDGETSERVO=m
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-# CONFIG_EDAC is not set
-
-#
-# Real Time Clock
-#
-# CONFIG_RTC_CLASS is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-CONFIG_UDF_FS=y
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-# CONFIG_NFS_V3 is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-# CONFIG_NFSD_V3 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
-# CONFIG_KPROBES is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=15
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_UNWIND_INFO is not set
-CONFIG_EARLY_PRINTK=y
-CONFIG_STACK_BACKTRACE_COLS=2
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-CONFIG_DOUBLEFAULT=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_KTIME_SCALAR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.22/defconfig-spitz b/packages/linux/linux-rp-2.6.22/defconfig-spitz
deleted file mode 100644
index 6d833ac0fe..0000000000
--- a/packages/linux/linux-rp-2.6.22/defconfig-spitz
+++ /dev/null
@@ -1,1723 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.22-rc6
-# Sun Jul 1 22:44:06 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-# CONFIG_GENERIC_CLOCKEVENTS is not set
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-# CONFIG_TICK_ONESHOT is not set
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-# CONFIG_KINGSUN_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_EXT=y
-# CONFIG_MAC80211 is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-# CONFIG_RFKILL is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDEPCI_PCIBUS_ORDER is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-# CONFIG_DM_DELAY is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NETDEV_10000=y
-
-#
-# Wireless LAN
-#
-CONFIG_WLAN_PRE80211=y
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-CONFIG_WLAN_80211=y
-# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_LIBERTAS is not set
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-CONFIG_AIRO_CS=m
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_KEYBOARD_PXA27x is not set
-# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_GPIO is not set
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TINY_USB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-
-#
-# Misc devices
-#
-# CONFIG_BLINK is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-CONFIG_V4L_USB_DRIVERS=y
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-# CONFIG_USB_ZR364XX is not set
-CONFIG_RADIO_ADAPTERS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=m
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_SPITZ=m
-CONFIG_SND_SOC_WM8750=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-# CONFIG_USB_BERRY_CHARGE is not set
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=y
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_SYSFS is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-# CONFIG_SUNRPC_BIND34 is not set
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_LZO_COMPRESS=m
-CONFIG_LZO_DECOMPRESS=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.22/defconfig-tosa b/packages/linux/linux-rp-2.6.22/defconfig-tosa
deleted file mode 100644
index ef44385067..0000000000
--- a/packages/linux/linux-rp-2.6.22/defconfig-tosa
+++ /dev/null
@@ -1,1620 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-rc5-git5
-# Tue Mar 14 09:05:26 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-CONFIG_MACH_TOSA=y
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-CONFIG_TOSHIBA_TC6393XB=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_TMIO=y
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-CONFIG_KEYBOARD_TOSA=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_CORGI is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_WM97XX=y
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-CONFIG_TOUCHSCREEN_WM9712=y
-CONFIG_TOUCHSCREEN_TOSA=y
-# CONFIG_TOUCHSCREEN_WM9713 is not set
-# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TOSA=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_W100 is not set
-CONFIG_FB_TMIO=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_AC97_BUS=y
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2XX_SOC=y
-CONFIG_SND_PXA2XX_SOC_AC97=y
-# CONFIG_SND_PXA2XX_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2XX_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2XX_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2XX_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2XX_SOC_CORGI is not set
-# CONFIG_SND_PXA2XX_SOC_SPITZ is not set
-CONFIG_SND_PXA2XX_SOC_TOSA=y
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-CONFIG_SND_SOC_WM9712=y
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_PWC is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_GENERIC_ALLOCATOR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.22/hostap-monitor-mode.patch b/packages/linux/linux-rp-2.6.22/hostap-monitor-mode.patch
deleted file mode 100644
index 641fd19e50..0000000000
--- a/packages/linux/linux-rp-2.6.22/hostap-monitor-mode.patch
+++ /dev/null
@@ -1,209 +0,0 @@
-This is a patch that I've been maintaining for a few years, and I'd
-really like to see it added to the mainstream zaurus kernel so I can
-finally stop distributing my own.
-
-This patch only effects the card while in monitor mode, and does not
-cause any known stability issues.
-
-http://patches.aircrack-ng.org/hostap-kernel-2.6.18.patch
-
-Rick Farina (Zero_Chaos)
-
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:30:18.000000000 -0400
-@@ -69,6 +69,9 @@
- iface = netdev_priv(dev);
- local = iface->local;
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ goto xmit;
-+
- if (skb->len < ETH_HLEN) {
- printk(KERN_DEBUG "%s: hostap_data_start_xmit: short skb "
- "(len=%d)\n", dev->name, skb->len);
-@@ -234,6 +237,7 @@
- memcpy(skb_put(skb, ETH_ALEN), &hdr.addr4, ETH_ALEN);
- }
-
-+xmit:
- iface->stats.tx_packets++;
- iface->stats.tx_bytes += skb->len;
-
-@@ -404,8 +408,6 @@
- }
-
- if (skb->len < 24) {
-- printk(KERN_DEBUG "%s: hostap_master_start_xmit: short skb "
-- "(len=%d)\n", dev->name, skb->len);
- ret = 0;
- iface->stats.tx_dropped++;
- goto fail;
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.orig
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.rej
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:30:18.000000000 -0400
-@@ -1005,6 +1005,35 @@
- return fid;
- }
-
-+static int prism2_monitor_enable(struct net_device *dev)
-+{
-+ if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE, 5)) {
-+ printk(KERN_DEBUG "Port type setting for monitor mode "
-+ "failed\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hfa384x_cmd(dev, HFA384X_CMDCODE_TEST | (0x0a << 8),
-+ 0, NULL, NULL)) {
-+ printk(KERN_DEBUG "Could not enter testmode 0x0a\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
-+ HFA384X_WEPFLAGS_PRIVACYINVOKED |
-+ HFA384X_WEPFLAGS_HOSTENCRYPT |
-+ HFA384X_WEPFLAGS_HOSTDECRYPT)) {
-+ printk(KERN_DEBUG "WEP flags setting failed\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hostap_set_word(dev, HFA384X_RID_PROMISCUOUSMODE, 1)) {
-+ printk(KERN_DEBUG "Could not set promiscuous mode\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ return 0;
-+}
-
- static int prism2_reset_port(struct net_device *dev)
- {
-@@ -1031,6 +1060,10 @@
- "port\n", dev->name);
- }
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ /* force mode 0x0a after port 0 reset */
-+ return prism2_monitor_enable(dev);
-+
- /* It looks like at least some STA firmware versions reset
- * fragmentation threshold back to 2346 after enable command. Restore
- * the configured value, if it differs from this default. */
-@@ -1466,6 +1499,10 @@
- return 1;
- }
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ /* force mode 0x0a after port 0 reset */
-+ prism2_monitor_enable(dev);
-+
- local->hw_ready = 1;
- local->hw_reset_tries = 0;
- local->hw_resetting = 0;
-@@ -3156,6 +3193,7 @@
- local->func->hw_config = prism2_hw_config;
- local->func->hw_reset = prism2_hw_reset;
- local->func->hw_shutdown = prism2_hw_shutdown;
-+ local->func->monitor_enable = prism2_monitor_enable;
- local->func->reset_port = prism2_reset_port;
- local->func->schedule_reset = prism2_schedule_reset;
- #ifdef PRISM2_DOWNLOAD_SUPPORT
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_hw.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:30:18.000000000 -0400
-@@ -1104,33 +1104,7 @@
-
- printk(KERN_DEBUG "Enabling monitor mode\n");
- hostap_monitor_set_type(local);
--
-- if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE,
-- HFA384X_PORTTYPE_PSEUDO_IBSS)) {
-- printk(KERN_DEBUG "Port type setting for monitor mode "
-- "failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- /* Host decrypt is needed to get the IV and ICV fields;
-- * however, monitor mode seems to remove WEP flag from frame
-- * control field */
-- if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
-- HFA384X_WEPFLAGS_HOSTENCRYPT |
-- HFA384X_WEPFLAGS_HOSTDECRYPT)) {
-- printk(KERN_DEBUG "WEP flags setting failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- if (local->func->reset_port(dev) ||
-- local->func->cmd(dev, HFA384X_CMDCODE_TEST |
-- (HFA384X_TEST_MONITOR << 8),
-- 0, NULL, NULL)) {
-- printk(KERN_DEBUG "Setting monitor mode failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- return 0;
-+ return local->func->reset_port(dev);
- }
-
-
-@@ -1199,7 +1173,7 @@
- local->iw_mode = *mode;
-
- if (local->iw_mode == IW_MODE_MONITOR)
-- hostap_monitor_mode_enable(local);
-+ return hostap_monitor_mode_enable(local);
- else if (local->iw_mode == IW_MODE_MASTER && !local->host_encrypt &&
- !local->fw_encrypt_ok) {
- printk(KERN_DEBUG "%s: defaulting to host-based encryption as "
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:30:18.000000000 -0400
-@@ -331,7 +331,7 @@
- if (local->iw_mode == IW_MODE_REPEAT)
- return HFA384X_PORTTYPE_WDS;
- if (local->iw_mode == IW_MODE_MONITOR)
-- return HFA384X_PORTTYPE_PSEUDO_IBSS;
-+ return 5; /*HFA384X_PORTTYPE_PSEUDO_IBSS;*/
- return HFA384X_PORTTYPE_HOSTAP;
- }
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_main.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:30:18.000000000 -0400
-@@ -48,6 +48,8 @@
- { 0x1260, 0x3873, PCI_ANY_ID, PCI_ANY_ID },
- /* Samsung MagicLAN SWL-2210P */
- { 0x167d, 0xa000, PCI_ANY_ID, PCI_ANY_ID },
-+ /* NETGEAR MA311 */
-+ { 0x1385, 0x3872, PCI_ANY_ID, PCI_ANY_ID },
- { 0 }
- };
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_pci.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:30:18.000000000 -0400
-@@ -101,6 +101,7 @@
- { 0xc250, 0x0002 } /* EMTAC A2424i */,
- { 0xd601, 0x0002 } /* Z-Com XI300 */,
- { 0xd601, 0x0005 } /* Zcomax XI-325H 200mW */,
-+ { 0xd601, 0x0010 } /* Zcomax XI-325H 100mW */,
- { 0, 0}
- };
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_plx.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:30:18.000000000 -0400
-@@ -575,6 +575,7 @@
- int (*hw_config)(struct net_device *dev, int initial);
- void (*hw_reset)(struct net_device *dev);
- void (*hw_shutdown)(struct net_device *dev, int no_disable);
-+ int (*monitor_enable)(struct net_device *dev);
- int (*reset_port)(struct net_device *dev);
- void (*schedule_reset)(local_info_t *local);
- int (*download)(local_info_t *local,
diff --git a/packages/linux/linux-rp-2.6.22/htcuni-acx.patch b/packages/linux/linux-rp-2.6.22/htcuni-acx.patch
deleted file mode 100644
index 769674c935..0000000000
--- a/packages/linux/linux-rp-2.6.22/htcuni-acx.patch
+++ /dev/null
@@ -1,33526 +0,0 @@
----
- drivers/net/wireless/Kconfig | 31
- drivers/net/wireless/Makefile | 2
- drivers/net/wireless/acx/Kconfig | 113
- drivers/net/wireless/acx/Makefile | 21
- drivers/net/wireless/acx/acx.h | 14
- drivers/net/wireless/acx/acx_config.h | 50
- drivers/net/wireless/acx/acx_func.h | 710 ++
- drivers/net/wireless/acx/acx_hw.h | 18
- drivers/net/wireless/acx/acx_struct.h | 2114 ++++++++
- drivers/net/wireless/acx/common.c | 7388 ++++++++++++++++++++++++++++
- drivers/net/wireless/acx/conv.c | 504 +
- drivers/net/wireless/acx/cs.c | 5703 +++++++++++++++++++++
- drivers/net/wireless/acx/htcsable_acx.c | 118
- drivers/net/wireless/acx/htcuniversal_acx.c | 108
- drivers/net/wireless/acx/hx4700_acx.c | 108
- drivers/net/wireless/acx/ioctl.c | 2748 ++++++++++
- drivers/net/wireless/acx/mem.c | 5363 ++++++++++++++++++++
- drivers/net/wireless/acx/pci.c | 4234 ++++++++++++++++
- drivers/net/wireless/acx/rx3000_acx.c | 110
- drivers/net/wireless/acx/setrate.c | 213
- drivers/net/wireless/acx/usb.c | 1922 +++++++
- drivers/net/wireless/acx/wlan.c | 424 +
- drivers/net/wireless/acx/wlan_compat.h | 260
- drivers/net/wireless/acx/wlan_hdr.h | 497 +
- drivers/net/wireless/acx/wlan_mgmt.h | 582 ++
- 25 files changed, 33355 insertions(+)
-
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_config.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_config.h 2007-08-23 18:46:40.000000000 +0200
-@@ -0,0 +1,50 @@
-+#define ACX_RELEASE "v0.3.36"
-+
-+/*
-+ * Test out all the channels in reg domain 0x10
-+ */
-+#define ACX_ALLOW_ALLCHANNELS
-+
-+/* set to 0 if you don't want any debugging code to be compiled in */
-+/* set to 1 if you want some debugging */
-+/* set to 2 if you want extensive debug log */
-+#define ACX_DEBUG 0
-+
-+/*
-+ * Since we'll be changing channels a lot
-+#define ACX_DEFAULT_MSG (L_ASSOC|L_INIT)
-+*/
-+#define ACX_DEFAULT_MSG (L_ASSOC|L_INIT)
-+
-+/* assume 32bit I/O width
-+ * (16bit is also compatible with Compact Flash) */
-+#define ACX_IO_WIDTH 32
-+
-+/* Set this to 1 if you want monitor mode to use
-+ * phy header. Currently it is not useful anyway since we
-+ * don't know what useful info (if any) is in phy header.
-+ * If you want faster/smaller code, say 0 here */
-+#define WANT_PHY_HDR 0
-+
-+/* whether to do Tx descriptor cleanup in softirq (i.e. not in IRQ
-+ * handler) or not. Note that doing it later does slightly increase
-+ * system load, so still do that stuff in the IRQ handler for now,
-+ * even if that probably means worse latency */
-+#define TX_CLEANUP_IN_SOFTIRQ 0
-+
-+/* if you want very experimental 802.11 power save mode features */
-+#define POWER_SAVE_80211 0
-+
-+/* if you want very early packet fragmentation bits and pieces */
-+#define ACX_FRAGMENTATION 0
-+
-+/* Locking: */
-+/* very talkative */
-+/* #define PARANOID_LOCKING 1 */
-+/* normal (use when bug-free) */
-+#define DO_LOCKING 1
-+/* else locking is disabled! */
-+
-+/* 0 - normal mode */
-+/* 1 - development/debug: probe for IEs on modprobe */
-+#define CMD_DISCOVERY 0
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_func.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_func.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,710 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+
-+/***********************************************************************
-+** LOGGING
-+**
-+** - Avoid SHOUTING needlessly. Avoid excessive verbosity.
-+** Gradually remove messages which are old debugging aids.
-+**
-+** - Use printk() for messages which are to be always logged.
-+** Supply either 'acx:' or '<devname>:' prefix so that user
-+** can figure out who's speaking among other kernel chatter.
-+** acx: is for general issues (e.g. "acx: no firmware image!")
-+** while <devname>: is related to a particular device
-+** (think about multi-card setup). Double check that message
-+** is not confusing to the average user.
-+**
-+** - use printk KERN_xxx level only if message is not a WARNING
-+** but is INFO, ERR etc.
-+**
-+** - Use printk_ratelimited() for messages which may flood
-+** (e.g. "rx DUP pkt!").
-+**
-+** - Use log() for messages which may be omitted (and they
-+** _will_ be omitted in non-debug builds). Note that
-+** message levels may be disabled at compile-time selectively,
-+** thus select them wisely. Example: L_DEBUG is the lowest
-+** (most likely to be compiled out) -> use for less important stuff.
-+**
-+** - Do not print important stuff with log(), or else people
-+** will never build non-debug driver.
-+**
-+** Style:
-+** hex: capital letters, zero filled (e.g. 0x02AC)
-+** str: dont start from capitals, no trailing periods ("tx: queue is stopped")
-+*/
-+#if ACX_DEBUG > 1
-+
-+void log_fn_enter(const char *funcname);
-+void log_fn_exit(const char *funcname);
-+void log_fn_exit_v(const char *funcname, int v);
-+
-+#define FN_ENTER \
-+ do { \
-+ if (unlikely(acx_debug & L_FUNC)) { \
-+ log_fn_enter(__func__); \
-+ } \
-+ } while (0)
-+
-+#define FN_EXIT1(v) \
-+ do { \
-+ if (unlikely(acx_debug & L_FUNC)) { \
-+ log_fn_exit_v(__func__, v); \
-+ } \
-+ } while (0)
-+#define FN_EXIT0 \
-+ do { \
-+ if (unlikely(acx_debug & L_FUNC)) { \
-+ log_fn_exit(__func__); \
-+ } \
-+ } while (0)
-+
-+#else
-+
-+#define FN_ENTER
-+#define FN_EXIT1(v)
-+#define FN_EXIT0
-+
-+#endif /* ACX_DEBUG > 1 */
-+
-+
-+#if ACX_DEBUG
-+
-+#define log(chan, args...) \
-+ do { \
-+ if (acx_debug & (chan)) \
-+ printk(KERN_DEBUG args); \
-+ } while (0)
-+#define printk_ratelimited(args...) printk(args)
-+
-+#else /* Non-debug build: */
-+
-+#define log(chan, args...)
-+/* Standard way of log flood prevention */
-+#define printk_ratelimited(args...) \
-+do { \
-+ if (printk_ratelimit()) \
-+ printk(args); \
-+} while (0)
-+
-+#endif /* ACX_DEBUG */
-+
-+void acx_print_mac(const char *head, const u8 *mac, const char *tail);
-+
-+/* Optimized out to nothing in non-debug build */
-+static inline void
-+acxlog_mac(int level, const char *head, const u8 *mac, const char *tail)
-+{
-+ if (acx_debug & level) {
-+ acx_print_mac(head, mac, tail);
-+ }
-+}
-+
-+
-+/***********************************************************************
-+** MAC address helpers
-+*/
-+static inline void
-+MAC_COPY(u8 *mac, const u8 *src)
-+{
-+ *(u32*)mac = *(u32*)src;
-+ ((u16*)mac)[2] = ((u16*)src)[2];
-+ /* kernel's memcpy will do the same: memcpy(dst, src, ETH_ALEN); */
-+}
-+
-+static inline void
-+MAC_FILL(u8 *mac, u8 val)
-+{
-+ memset(mac, val, ETH_ALEN);
-+}
-+
-+static inline void
-+MAC_BCAST(u8 *mac)
-+{
-+ ((u16*)mac)[2] = *(u32*)mac = -1;
-+}
-+
-+static inline void
-+MAC_ZERO(u8 *mac)
-+{
-+ ((u16*)mac)[2] = *(u32*)mac = 0;
-+}
-+
-+static inline int
-+mac_is_equal(const u8 *a, const u8 *b)
-+{
-+ /* can't beat this */
-+ return memcmp(a, b, ETH_ALEN) == 0;
-+}
-+
-+static inline int
-+mac_is_bcast(const u8 *mac)
-+{
-+ /* AND together 4 first bytes with sign-extended 2 last bytes
-+ ** Only bcast address gives 0xffffffff. +1 gives 0 */
-+ return ( *(s32*)mac & ((s16*)mac)[2] ) + 1 == 0;
-+}
-+
-+static inline int
-+mac_is_zero(const u8 *mac)
-+{
-+ return ( *(u32*)mac | ((u16*)mac)[2] ) == 0;
-+}
-+
-+static inline int
-+mac_is_directed(const u8 *mac)
-+{
-+ return (mac[0] & 1)==0;
-+}
-+
-+static inline int
-+mac_is_mcast(const u8 *mac)
-+{
-+ return (mac[0] & 1) && !mac_is_bcast(mac);
-+}
-+
-+#define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X"
-+#define MAC(bytevector) \
-+ ((unsigned char *)bytevector)[0], \
-+ ((unsigned char *)bytevector)[1], \
-+ ((unsigned char *)bytevector)[2], \
-+ ((unsigned char *)bytevector)[3], \
-+ ((unsigned char *)bytevector)[4], \
-+ ((unsigned char *)bytevector)[5]
-+
-+
-+/***********************************************************************
-+** Random helpers
-+*/
-+#define TO_STRING(x) #x
-+#define STRING(x) TO_STRING(x)
-+
-+#define CLEAR_BIT(val, mask) ((val) &= ~(mask))
-+#define SET_BIT(val, mask) ((val) |= (mask))
-+
-+/* undefined if v==0 */
-+static inline unsigned int
-+lowest_bit(u16 v)
-+{
-+ unsigned int n = 0;
-+ while (!(v & 0xf)) { v>>=4; n+=4; }
-+ while (!(v & 1)) { v>>=1; n++; }
-+ return n;
-+}
-+
-+/* undefined if v==0 */
-+static inline unsigned int
-+highest_bit(u16 v)
-+{
-+ unsigned int n = 0;
-+ while (v>0xf) { v>>=4; n+=4; }
-+ while (v>1) { v>>=1; n++; }
-+ return n;
-+}
-+
-+/* undefined if v==0 */
-+static inline int
-+has_only_one_bit(u16 v)
-+{
-+ return ((v-1) ^ v) >= v;
-+}
-+
-+
-+static inline int
-+is_hidden_essid(char *essid)
-+{
-+ return (('\0' == essid[0]) ||
-+ ((' ' == essid[0]) && ('\0' == essid[1])));
-+}
-+
-+/***********************************************************************
-+** LOCKING
-+** We have adev->sem and adev->lock.
-+**
-+** We employ following naming convention in order to get locking right:
-+**
-+** acx_e_xxxx - external entry points called from process context.
-+** It is okay to sleep. adev->sem is to be taken on entry.
-+** acx_i_xxxx - external entry points possibly called from atomic context.
-+** Sleeping is not allowed (and thus down(sem) is not legal!)
-+** acx_s_xxxx - potentially sleeping functions. Do not ever call under lock!
-+** acx_l_xxxx - functions which expect lock to be already taken.
-+** rest - non-sleeping functions which do not require locking
-+** but may be run under lock
-+**
-+** A small number of local helpers do not have acx_[eisl]_ prefix.
-+** They are always close to caller and are to be reviewed locally.
-+**
-+** Theory of operation:
-+**
-+** All process-context entry points (_e_ functions) take sem
-+** immediately. IRQ handler and other 'atomic-context' entry points
-+** (_i_ functions) take lock immediately on entry, but dont take sem
-+** because that might sleep.
-+**
-+** Thus *all* code is either protected by sem or lock, or both.
-+**
-+** Code which must not run concurrently with IRQ takes lock.
-+** Such code is marked with _l_.
-+**
-+** This results in the following rules of thumb useful in code review:
-+**
-+** + If a function calls _s_ fn, it must be an _s_ itself.
-+** + You can call _l_ fn only (a) from another _l_ fn
-+** or (b) from _s_, _e_ or _i_ fn by taking lock, calling _l_,
-+** and dropping lock.
-+** + All IRQ code runs under lock.
-+** + Any _s_ fn is running under sem.
-+** + Code under sem can race only with IRQ code.
-+** + Code under sem+lock cannot race with anything.
-+*/
-+
-+/* These functions *must* be inline or they will break horribly on SPARC, due
-+ * to its weird semantics for save/restore flags */
-+
-+#if defined(PARANOID_LOCKING) /* Lock debugging */
-+
-+void acx_lock_debug(acx_device_t *adev, const char* where);
-+void acx_unlock_debug(acx_device_t *adev, const char* where);
-+void acx_down_debug(acx_device_t *adev, const char* where);
-+void acx_up_debug(acx_device_t *adev, const char* where);
-+void acx_lock_unhold(void);
-+void acx_sem_unhold(void);
-+
-+static inline void
-+acx_lock_helper(acx_device_t *adev, unsigned long *fp, const char* where)
-+{
-+ acx_lock_debug(adev, where);
-+ spin_lock_irqsave(&adev->lock, *fp);
-+}
-+static inline void
-+acx_unlock_helper(acx_device_t *adev, unsigned long *fp, const char* where)
-+{
-+ acx_unlock_debug(adev, where);
-+ spin_unlock_irqrestore(&adev->lock, *fp);
-+}
-+static inline void
-+acx_down_helper(acx_device_t *adev, const char* where)
-+{
-+ acx_down_debug(adev, where);
-+}
-+static inline void
-+acx_up_helper(acx_device_t *adev, const char* where)
-+{
-+ acx_up_debug(adev, where);
-+}
-+#define acx_lock(adev, flags) acx_lock_helper(adev, &(flags), __FILE__ ":" STRING(__LINE__))
-+#define acx_unlock(adev, flags) acx_unlock_helper(adev, &(flags), __FILE__ ":" STRING(__LINE__))
-+#define acx_sem_lock(adev) acx_down_helper(adev, __FILE__ ":" STRING(__LINE__))
-+#define acx_sem_unlock(adev) acx_up_helper(adev, __FILE__ ":" STRING(__LINE__))
-+
-+#elif defined(DO_LOCKING)
-+
-+#define acx_lock(adev, flags) spin_lock_irqsave(&adev->lock, flags)
-+#define acx_unlock(adev, flags) spin_unlock_irqrestore(&adev->lock, flags)
-+#define acx_sem_lock(adev) down(&adev->sem)
-+#define acx_sem_unlock(adev) up(&adev->sem)
-+#define acx_lock_unhold() ((void)0)
-+#define acx_sem_unhold() ((void)0)
-+
-+#else /* no locking! :( */
-+
-+#define acx_lock(adev, flags) ((void)0)
-+#define acx_unlock(adev, flags) ((void)0)
-+#define acx_sem_lock(adev) ((void)0)
-+#define acx_sem_unlock(adev) ((void)0)
-+#define acx_lock_unhold() ((void)0)
-+#define acx_sem_unhold() ((void)0)
-+
-+#endif
-+
-+
-+/***********************************************************************
-+*/
-+
-+/* Can race with rx path (which is not protected by sem):
-+** rx -> process_[re]assocresp() -> set_status(ASSOCIATED) -> wake_queue()
-+** Can race with tx_complete IRQ:
-+** IRQ -> acxpci_l_clean_txdesc -> acx_wake_queue
-+** Review carefully all callsites */
-+static inline void
-+acx_stop_queue(struct net_device *ndev, const char *msg)
-+{
-+ if (netif_queue_stopped(ndev))
-+ return;
-+
-+ netif_stop_queue(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: stop queue %s\n", msg);
-+}
-+
-+static inline int
-+acx_queue_stopped(struct net_device *ndev)
-+{
-+ return netif_queue_stopped(ndev);
-+}
-+
-+/*
-+static inline void
-+acx_start_queue(struct net_device *ndev, const char *msg)
-+{
-+ netif_start_queue(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: start queue %s\n", msg);
-+}
-+*/
-+
-+static inline void
-+acx_wake_queue(struct net_device *ndev, const char *msg)
-+{
-+ netif_wake_queue(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: wake queue %s\n", msg);
-+}
-+
-+static inline void
-+acx_carrier_off(struct net_device *ndev, const char *msg)
-+{
-+ netif_carrier_off(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: carrier off %s\n", msg);
-+}
-+
-+static inline void
-+acx_carrier_on(struct net_device *ndev, const char *msg)
-+{
-+ netif_carrier_on(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: carrier on %s\n", msg);
-+}
-+
-+/* This function does not need locking UNLESS you call it
-+** as acx_set_status(ACX_STATUS_4_ASSOCIATED), bacause this can
-+** wake queue. This can race with stop_queue elsewhere. */
-+void acx_set_status(acx_device_t *adev, u16 status);
-+
-+
-+/***********************************************************************
-+** Communication with firmware
-+*/
-+#define CMD_TIMEOUT_MS(n) (n)
-+#define ACX_CMD_TIMEOUT_DEFAULT CMD_TIMEOUT_MS(50)
-+
-+#if ACX_DEBUG
-+
-+/* We want to log cmd names */
-+int acxpci_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
-+int acxmem_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
-+int acxusb_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
-+static inline int
-+acx_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
-+ if (IS_PCI(adev))
-+ return acxpci_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
-+ return acxusb_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
-+}
-+#define acx_s_issue_cmd(adev,cmd,param,len) \
-+ acx_s_issue_cmd_timeo_debug(adev,cmd,param,len,ACX_CMD_TIMEOUT_DEFAULT,#cmd)
-+#define acx_s_issue_cmd_timeo(adev,cmd,param,len,timeo) \
-+ acx_s_issue_cmd_timeo_debug(adev,cmd,param,len,timeo,#cmd)
-+int acx_s_configure_debug(acx_device_t *adev, void *pdr, int type, const char* str);
-+#define acx_s_configure(adev,pdr,type) \
-+ acx_s_configure_debug(adev,pdr,type,#type)
-+int acx_s_interrogate_debug(acx_device_t *adev, void *pdr, int type, const char* str);
-+#define acx_s_interrogate(adev,pdr,type) \
-+ acx_s_interrogate_debug(adev,pdr,type,#type)
-+
-+#else
-+
-+int acxpci_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
-+int acxmem_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
-+int acxusb_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
-+static inline int
-+acx_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
-+ if (IS_PCI(adev))
-+ return acxpci_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
-+ return acxusb_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
-+}
-+static inline int
-+acx_s_issue_cmd(acx_device_t *adev, unsigned cmd, void *param, unsigned len)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
-+ if (IS_PCI(adev))
-+ return acxpci_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
-+ return acxusb_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
-+}
-+int acx_s_configure(acx_device_t *adev, void *pdr, int type);
-+int acx_s_interrogate(acx_device_t *adev, void *pdr, int type);
-+
-+#endif
-+
-+void acx_s_cmd_start_scan(acx_device_t *adev);
-+
-+
-+/***********************************************************************
-+** Ioctls
-+*/
-+int
-+acx111pci_ioctl_info(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra);
-+int
-+acx100pci_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra);
-+int
-+acx100mem_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra);
-+
-+
-+/***********************************************************************
-+** /proc
-+*/
-+#ifdef CONFIG_PROC_FS
-+int acx_proc_register_entries(const struct net_device *ndev);
-+int acx_proc_unregister_entries(const struct net_device *ndev);
-+#else
-+static inline int
-+acx_proc_register_entries(const struct net_device *ndev) { return OK; }
-+static inline int
-+acx_proc_unregister_entries(const struct net_device *ndev) { return OK; }
-+#endif
-+
-+
-+/***********************************************************************
-+*/
-+firmware_image_t *acx_s_read_fw(struct device *dev, const char *file, u32 *size);
-+int acxpci_s_upload_radio(acx_device_t *adev);
-+int acxmem_s_upload_radio(acx_device_t *adev);
-+
-+
-+/***********************************************************************
-+** Unsorted yet :)
-+*/
-+int acxpci_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
-+int acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
-+int acxusb_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
-+static inline int
-+acx_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_read_phy_reg(adev, reg, charbuf);
-+ if (IS_PCI(adev))
-+ return acxpci_s_read_phy_reg(adev, reg, charbuf);
-+ return acxusb_s_read_phy_reg(adev, reg, charbuf);
-+}
-+
-+int acxpci_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
-+int acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
-+int acxusb_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
-+static inline int
-+acx_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_write_phy_reg(adev, reg, value);
-+ if (IS_PCI(adev))
-+ return acxpci_s_write_phy_reg(adev, reg, value);
-+ return acxusb_s_write_phy_reg(adev, reg, value);
-+}
-+
-+tx_t* acxpci_l_alloc_tx(acx_device_t *adev);
-+tx_t* acxmem_l_alloc_tx(acx_device_t *adev);
-+tx_t* acxusb_l_alloc_tx(acx_device_t *adev);
-+static inline tx_t*
-+acx_l_alloc_tx(acx_device_t *adev)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_l_alloc_tx(adev);
-+ if (IS_PCI(adev))
-+ return acxpci_l_alloc_tx(adev);
-+ return acxusb_l_alloc_tx(adev);
-+}
-+
-+void acxusb_l_dealloc_tx(tx_t *tx_opaque);
-+void acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque);
-+static inline void
-+acx_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque)
-+{
-+#ifdef ACX_MEM
-+ acxmem_l_dealloc_tx (adev, tx_opaque);
-+#else
-+ if (IS_USB(adev))
-+ acxusb_l_dealloc_tx(tx_opaque);
-+#endif
-+}
-+
-+void* acxpci_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
-+void* acxmem_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
-+void* acxusb_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
-+static inline void*
-+acx_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque)
-+{
-+#if defined (ACX_MEM)
-+ return acxmem_l_get_txbuf(adev, tx_opaque);
-+#else
-+ if (IS_PCI(adev))
-+ return acxpci_l_get_txbuf(adev, tx_opaque);
-+ return acxusb_l_get_txbuf(adev, tx_opaque);
-+#endif
-+}
-+
-+void acxpci_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
-+void acxmem_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
-+void acxusb_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
-+static inline void
-+acx_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len)
-+{
-+#if defined (ACX_MEM)
-+ acxmem_l_tx_data(adev, tx_opaque, len);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_l_tx_data(adev, tx_opaque, len);
-+ else
-+ acxusb_l_tx_data(adev, tx_opaque, len);
-+#endif
-+}
-+
-+static inline wlan_hdr_t*
-+acx_get_wlan_hdr(acx_device_t *adev, const rxbuffer_t *rxbuf)
-+{
-+ return (wlan_hdr_t*)((u8*)&rxbuf->hdr_a3 + adev->phy_header_len);
-+}
-+
-+void acxpci_l_power_led(acx_device_t *adev, int enable);
-+int acxpci_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf);
-+unsigned int acxpci_l_clean_txdesc(acx_device_t *adev);
-+void acxpci_l_clean_txdesc_emergency(acx_device_t *adev);
-+int acxpci_s_create_hostdesc_queues(acx_device_t *adev);
-+void acxpci_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start);
-+void acxpci_free_desc_queues(acx_device_t *adev);
-+char* acxpci_s_proc_diag_output(char *p, acx_device_t *adev);
-+int acxpci_proc_eeprom_output(char *p, acx_device_t *adev);
-+void acxpci_set_interrupt_mask(acx_device_t *adev);
-+int acx100pci_s_set_tx_level(acx_device_t *adev, u8 level_dbm);
-+
-+void acxmem_l_power_led(acx_device_t *adev, int enable);
-+int acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf);
-+unsigned int acxmem_l_clean_txdesc(acx_device_t *adev);
-+void acxmem_l_clean_txdesc_emergency(acx_device_t *adev);
-+int acxmem_s_create_hostdesc_queues(acx_device_t *adev);
-+void acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start);
-+void acxmem_free_desc_queues(acx_device_t *adev);
-+char* acxmem_s_proc_diag_output(char *p, acx_device_t *adev);
-+int acxmem_proc_eeprom_output(char *p, acx_device_t *adev);
-+void acxmem_set_interrupt_mask(acx_device_t *adev);
-+int acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm);
-+
-+void acx_s_msleep(int ms);
-+int acx_s_init_mac(acx_device_t *adev);
-+void acx_set_reg_domain(acx_device_t *adev, unsigned char reg_dom_id);
-+void acx_set_timer(acx_device_t *adev, int timeout_us);
-+void acx_update_capabilities(acx_device_t *adev);
-+void acx_s_start(acx_device_t *adev);
-+
-+void acx_s_update_card_settings(acx_device_t *adev);
-+void acx_s_parse_configoption(acx_device_t *adev, const acx111_ie_configoption_t *pcfg);
-+void acx_l_update_ratevector(acx_device_t *adev);
-+
-+void acx_init_task_scheduler(acx_device_t *adev);
-+void acx_schedule_task(acx_device_t *adev, unsigned int set_flag);
-+
-+int acx_e_ioctl_old(struct net_device *ndev, struct ifreq *ifr, int cmd);
-+
-+client_t *acx_l_sta_list_get(acx_device_t *adev, const u8 *address);
-+void acx_l_sta_list_del(acx_device_t *adev, client_t *clt);
-+
-+int acx_l_transmit_disassoc(acx_device_t *adev, client_t *clt);
-+void acx_i_timer(unsigned long a);
-+int acx_s_complete_scan(acx_device_t *adev);
-+
-+struct sk_buff *acx_rxbuf_to_ether(acx_device_t *adev, rxbuffer_t *rxbuf);
-+int acx_ether_to_txbuf(acx_device_t *adev, void *txbuf, const struct sk_buff *skb);
-+
-+u8 acx_signal_determine_quality(u8 signal, u8 noise);
-+
-+void acx_l_process_rxbuf(acx_device_t *adev, rxbuffer_t *rxbuf);
-+void acx_l_handle_txrate_auto(acx_device_t *adev, struct client *txc,
-+ u16 intended_rate, u8 rate100, u16 rate111, u8 error,
-+ int pkts_to_ignore);
-+
-+void acx_dump_bytes(const void *, int);
-+void acx_log_bad_eid(wlan_hdr_t* hdr, int len, wlan_ie_t* ie_ptr);
-+
-+u8 acx_rate111to100(u16);
-+
-+void acx_s_set_defaults(acx_device_t *adev);
-+
-+#if !ACX_DEBUG
-+static inline const char* acx_get_packet_type_string(u16 fc) { return ""; }
-+#else
-+const char* acx_get_packet_type_string(u16 fc);
-+#endif
-+const char* acx_cmd_status_str(unsigned int state);
-+
-+int acx_i_start_xmit(struct sk_buff *skb, struct net_device *ndev);
-+
-+void great_inquisitor(acx_device_t *adev);
-+
-+void acx_s_get_firmware_version(acx_device_t *adev);
-+void acx_display_hardware_details(acx_device_t *adev);
-+
-+int acx_e_change_mtu(struct net_device *ndev, int mtu);
-+struct net_device_stats* acx_e_get_stats(struct net_device *ndev);
-+struct iw_statistics* acx_e_get_wireless_stats(struct net_device *ndev);
-+
-+#ifdef ACX_MEM
-+int __init acxmem_e_init_module(void);
-+void __exit acxmem_e_cleanup_module(void);
-+void acxmem_e_release(struct device *dev);
-+#else
-+int __init acxpci_e_init_module(void);
-+int __init acxusb_e_init_module(void);
-+void __exit acxpci_e_cleanup_module(void);
-+void __exit acxusb_e_cleanup_module(void);
-+#endif
-+int __init acx_cs_init(void);
-+void __exit acx_cs_cleanup(void);
-Index: linux-2.6.22/drivers/net/wireless/acx/acx.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,14 @@
-+#if defined(CONFIG_ACX_MEM) && !defined(ACX_MEM)
-+#define ACX_MEM
-+#endif
-+
-+#if defined(CONFIG_ACX_CS) && !defined(ACX_MEM)
-+#define ACX_MEM
-+#endif
-+
-+#include "acx_config.h"
-+#include "wlan_compat.h"
-+#include "wlan_hdr.h"
-+#include "wlan_mgmt.h"
-+#include "acx_struct.h"
-+#include "acx_func.h"
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_hw.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_hw.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,18 @@
-+/*
-+ * Interface for ACX slave memory driver
-+ *
-+ * Copyright (c) 2006 SDG Systems, LLC
-+ *
-+ * GPL
-+ *
-+ */
-+
-+#ifndef _ACX_HW_H
-+#define _ACX_HW_H
-+
-+struct acx_hardware_data {
-+ int (*start_hw)( void );
-+ int (*stop_hw)( void );
-+};
-+
-+#endif /* _ACX_HW_H */
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_struct.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_struct.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,2114 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** Forward declarations of types
-+*/
-+typedef struct tx tx_t;
-+typedef struct acx_device acx_device_t;
-+typedef struct client client_t;
-+typedef struct rxdesc rxdesc_t;
-+typedef struct txdesc txdesc_t;
-+typedef struct rxhostdesc rxhostdesc_t;
-+typedef struct txhostdesc txhostdesc_t;
-+
-+
-+/***********************************************************************
-+** Debug / log functionality
-+*/
-+enum {
-+ L_LOCK = (ACX_DEBUG>1)*0x0001, /* locking debug log */
-+ L_INIT = (ACX_DEBUG>0)*0x0002, /* special card initialization logging */
-+ L_IRQ = (ACX_DEBUG>0)*0x0004, /* interrupt stuff */
-+ L_ASSOC = (ACX_DEBUG>0)*0x0008, /* assocation (network join) and station log */
-+ L_FUNC = (ACX_DEBUG>1)*0x0020, /* logging of function enter / leave */
-+ L_XFER = (ACX_DEBUG>1)*0x0080, /* logging of transfers and mgmt */
-+ L_DATA = (ACX_DEBUG>1)*0x0100, /* logging of transfer data */
-+ L_DEBUG = (ACX_DEBUG>1)*0x0200, /* log of debug info */
-+ L_IOCTL = (ACX_DEBUG>0)*0x0400, /* log ioctl calls */
-+ L_CTL = (ACX_DEBUG>1)*0x0800, /* log of low-level ctl commands */
-+ L_BUFR = (ACX_DEBUG>1)*0x1000, /* debug rx buffer mgmt (ring buffer etc.) */
-+ L_XFER_BEACON = (ACX_DEBUG>1)*0x2000, /* also log beacon packets */
-+ L_BUFT = (ACX_DEBUG>1)*0x4000, /* debug tx buffer mgmt (ring buffer etc.) */
-+ L_USBRXTX = (ACX_DEBUG>0)*0x8000, /* debug USB rx/tx operations */
-+ L_BUF = L_BUFR + L_BUFT,
-+ L_ANY = 0xffff
-+};
-+
-+#if ACX_DEBUG
-+extern unsigned int acx_debug;
-+#else
-+enum { acx_debug = 0 };
-+#endif
-+
-+
-+/***********************************************************************
-+** Random helpers
-+*/
-+#define ACX_PACKED __attribute__ ((packed))
-+
-+#define VEC_SIZE(a) (sizeof(a)/sizeof(a[0]))
-+
-+/* Use worker_queues for 2.5/2.6 kernels and queue tasks for 2.4 kernels
-+ (used for the 'bottom half' of the interrupt routine) */
-+
-+#include <linux/workqueue.h>
-+#define USE_WORKER_TASKS
-+#define WORK_STRUCT struct work_struct
-+#define SCHEDULE_WORK schedule_work
-+#define FLUSH_SCHEDULED_WORK flush_scheduled_work
-+
-+
-+/***********************************************************************
-+** Constants
-+*/
-+#define OK 0
-+#define NOT_OK 1
-+
-+/* The supported chip models */
-+#define CHIPTYPE_ACX100 1
-+#define CHIPTYPE_ACX111 2
-+
-+#define IS_ACX100(adev) ((adev)->chip_type == CHIPTYPE_ACX100)
-+#define IS_ACX111(adev) ((adev)->chip_type == CHIPTYPE_ACX111)
-+
-+/* Supported interfaces */
-+#define DEVTYPE_PCI 0
-+#define DEVTYPE_USB 1
-+#define DEVTYPE_MEM 2
-+
-+#if !defined(CONFIG_ACX_PCI) && !defined(CONFIG_ACX_USB) && !defined(CONFIG_ACX_MEM) && !defined(CONFIG_ACX_CS)
-+#error Driver must include PCI, USB, PCMCIA or memory mapped interface support. You selected none of them.
-+#endif
-+
-+#if defined(CONFIG_ACX_PCI)
-+ #if !defined(CONFIG_ACX_USB)
-+ #define IS_PCI(adev) 1
-+ #else
-+ #define IS_PCI(adev) ((adev)->dev_type == DEVTYPE_PCI)
-+ #endif
-+#else
-+ #define IS_PCI(adev) 0
-+#endif
-+
-+#if defined(CONFIG_ACX_USB)
-+ #if !defined(CONFIG_ACX_PCI)
-+ #define IS_USB(adev) 1
-+ #else
-+ #define IS_USB(adev) ((adev)->dev_type == DEVTYPE_USB)
-+ #endif
-+#else
-+ #define IS_USB(adev) 0
-+#endif
-+
-+#if defined(CONFIG_ACX_MEM) || defined(CONFIG_ACX_CS)
-+ #define IS_MEM(adev) 1
-+#else
-+ #define IS_MEM(adev) 0
-+#endif
-+
-+/* Driver defaults */
-+#define DEFAULT_DTIM_INTERVAL 10
-+/* used to be 2048, but FreeBSD driver changed it to 4096 to work properly
-+** in noisy wlans */
-+#define DEFAULT_MSDU_LIFETIME 4096
-+#define DEFAULT_RTS_THRESHOLD 2312 /* max. size: disable RTS mechanism */
-+#define DEFAULT_BEACON_INTERVAL 100
-+
-+#define ACX100_BAP_DATALEN_MAX 4096
-+#define ACX100_RID_GUESSING_MAXLEN 2048 /* I'm not really sure */
-+#define ACX100_RIDDATA_MAXLEN ACX100_RID_GUESSING_MAXLEN
-+
-+/* Support Constants */
-+/* Radio type names, found in Win98 driver's TIACXLN.INF */
-+#define RADIO_MAXIM_0D 0x0d
-+#define RADIO_RFMD_11 0x11
-+#define RADIO_RALINK_15 0x15
-+/* used in ACX111 cards (WG311v2, WL-121, ...): */
-+#define RADIO_RADIA_16 0x16
-+/* most likely *sometimes* used in ACX111 cards: */
-+#define RADIO_UNKNOWN_17 0x17
-+/* FwRad19.bin was found in a Safecom driver; must be an ACX111 radio: */
-+#define RADIO_UNKNOWN_19 0x19
-+#define RADIO_UNKNOWN_1B 0x1b /* radio in SafeCom SWLUT-54125 USB adapter; entirely unknown!! */
-+
-+/* Controller Commands */
-+/* can be found in table cmdTable in firmware "Rev. 1.5.0" (FW150) */
-+#define ACX1xx_CMD_RESET 0x00
-+#define ACX1xx_CMD_INTERROGATE 0x01
-+#define ACX1xx_CMD_CONFIGURE 0x02
-+#define ACX1xx_CMD_ENABLE_RX 0x03
-+#define ACX1xx_CMD_ENABLE_TX 0x04
-+#define ACX1xx_CMD_DISABLE_RX 0x05
-+#define ACX1xx_CMD_DISABLE_TX 0x06
-+#define ACX1xx_CMD_FLUSH_QUEUE 0x07
-+#define ACX1xx_CMD_SCAN 0x08
-+#define ACX1xx_CMD_STOP_SCAN 0x09
-+#define ACX1xx_CMD_CONFIG_TIM 0x0a
-+#define ACX1xx_CMD_JOIN 0x0b
-+#define ACX1xx_CMD_WEP_MGMT 0x0c
-+#ifdef OLD_FIRMWARE_VERSIONS
-+#define ACX100_CMD_HALT 0x0e /* mapped to unknownCMD in FW150 */
-+#else
-+#define ACX1xx_CMD_MEM_READ 0x0d
-+#define ACX1xx_CMD_MEM_WRITE 0x0e
-+#endif
-+#define ACX1xx_CMD_SLEEP 0x0f
-+#define ACX1xx_CMD_WAKE 0x10
-+#define ACX1xx_CMD_UNKNOWN_11 0x11 /* mapped to unknownCMD in FW150 */
-+#define ACX100_CMD_INIT_MEMORY 0x12
-+#define ACX1FF_CMD_DISABLE_RADIO 0x12 /* new firmware? TNETW1450? */
-+#define ACX1xx_CMD_CONFIG_BEACON 0x13
-+#define ACX1xx_CMD_CONFIG_PROBE_RESPONSE 0x14
-+#define ACX1xx_CMD_CONFIG_NULL_DATA 0x15
-+#define ACX1xx_CMD_CONFIG_PROBE_REQUEST 0x16
-+#define ACX1xx_CMD_FCC_TEST 0x17
-+#define ACX1xx_CMD_RADIOINIT 0x18
-+#define ACX111_CMD_RADIOCALIB 0x19
-+#define ACX1FF_CMD_NOISE_HISTOGRAM 0x1c /* new firmware? TNETW1450? */
-+#define ACX1FF_CMD_RX_RESET 0x1d /* new firmware? TNETW1450? */
-+#define ACX1FF_CMD_LNA_CONTROL 0x20 /* new firmware? TNETW1450? */
-+#define ACX1FF_CMD_CONTROL_DBG_TRACE 0x21 /* new firmware? TNETW1450? */
-+
-+/* 'After Interrupt' Commands */
-+#define ACX_AFTER_IRQ_CMD_STOP_SCAN 0x01
-+#define ACX_AFTER_IRQ_CMD_ASSOCIATE 0x02
-+#define ACX_AFTER_IRQ_CMD_RADIO_RECALIB 0x04
-+#define ACX_AFTER_IRQ_UPDATE_CARD_CFG 0x08
-+#define ACX_AFTER_IRQ_TX_CLEANUP 0x10
-+#define ACX_AFTER_IRQ_COMPLETE_SCAN 0x20
-+#define ACX_AFTER_IRQ_RESTART_SCAN 0x40
-+
-+/***********************************************************************
-+** Tx/Rx buffer sizes and watermarks
-+**
-+** This will alloc and use DMAable buffers of
-+** WLAN_A4FR_MAXLEN_WEP_FCS * (RX_CNT + TX_CNT) bytes
-+** RX/TX_CNT=32 -> ~150k DMA buffers
-+** RX/TX_CNT=16 -> ~75k DMA buffers
-+**
-+** 2005-10-10: reduced memory usage by lowering both to 16
-+*/
-+#define RX_CNT 16
-+#define TX_CNT 16
-+
-+/* we clean up txdescs when we have N free txdesc: */
-+#define TX_CLEAN_BACKLOG (TX_CNT/4)
-+#define TX_START_CLEAN (TX_CNT - TX_CLEAN_BACKLOG)
-+#define TX_EMERG_CLEAN 2
-+/* we stop queue if we have < N free txbufs: */
-+#define TX_STOP_QUEUE 3
-+/* we start queue if we have >= N free txbufs: */
-+#define TX_START_QUEUE 5
-+
-+/***********************************************************************
-+** Interrogate/Configure cmd constants
-+**
-+** NB: length includes JUST the data part of the IE
-+** (does not include size of the (type,len) pair)
-+**
-+** TODO: seems that acx100, acx100usb, acx111 have some differences,
-+** fix code with regard to this!
-+*/
-+
-+#define DEF_IE(name, val, len) enum { ACX##name=val, ACX##name##_LEN=len }
-+
-+/* Information Elements: Network Parameters, Static Configuration Entities */
-+/* these are handled by real_cfgtable in firmware "Rev 1.5.0" (FW150) */
-+DEF_IE(1xx_IE_UNKNOWN_00 ,0x0000, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(100_IE_ACX_TIMER ,0x0001, 0x10);
-+DEF_IE(1xx_IE_POWER_MGMT ,0x0002, 0x06); /* TNETW1450: length 0x18!! */
-+DEF_IE(1xx_IE_QUEUE_CONFIG ,0x0003, 0x1c);
-+DEF_IE(100_IE_BLOCK_SIZE ,0x0004, 0x02);
-+DEF_IE(1FF_IE_SLOT_TIME ,0x0004, 0x08); /* later firmware versions only? */
-+DEF_IE(1xx_IE_MEMORY_CONFIG_OPTIONS ,0x0005, 0x14);
-+DEF_IE(1FF_IE_QUEUE_HEAD ,0x0005, 0x14 /* FIXME: length? */);
-+DEF_IE(1xx_IE_RATE_FALLBACK ,0x0006, 0x01); /* TNETW1450: length 2 */
-+DEF_IE(100_IE_WEP_OPTIONS ,0x0007, 0x03);
-+DEF_IE(111_IE_RADIO_BAND ,0x0007, -1);
-+DEF_IE(1FF_IE_TIMING_CFG ,0x0007, -1); /* later firmware versions; TNETW1450 only? */
-+DEF_IE(100_IE_SSID ,0x0008, 0x20); /* huh? */
-+DEF_IE(1xx_IE_MEMORY_MAP ,0x0008, 0x28); /* huh? TNETW1450 has length 0x40!! */
-+DEF_IE(1xx_IE_SCAN_STATUS ,0x0009, 0x04); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1xx_IE_ASSOC_ID ,0x000a, 0x02);
-+DEF_IE(1xx_IE_UNKNOWN_0B ,0x000b, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1FF_IE_TX_POWER_LEVEL_TABLE ,0x000b, 0x18); /* later firmware versions; TNETW1450 only? */
-+DEF_IE(100_IE_UNKNOWN_0C ,0x000c, -1); /* very small implementation in FW150! */
-+/* ACX100 has an equivalent struct in the cmd mailbox directly after reset.
-+ * 0x14c seems extremely large, will trash stack on failure (memset!)
-+ * in case of small input struct --> OOPS! */
-+DEF_IE(111_IE_CONFIG_OPTIONS ,0x000c, 0x14c);
-+DEF_IE(1xx_IE_FWREV ,0x000d, 0x18);
-+DEF_IE(1xx_IE_FCS_ERROR_COUNT ,0x000e, 0x04);
-+DEF_IE(1xx_IE_MEDIUM_USAGE ,0x000f, 0x08);
-+DEF_IE(1xx_IE_RXCONFIG ,0x0010, 0x04);
-+DEF_IE(100_IE_UNKNOWN_11 ,0x0011, -1); /* NONBINARY: large implementation in FW150! link quality readings or so? */
-+DEF_IE(111_IE_QUEUE_THRESH ,0x0011, -1);
-+DEF_IE(100_IE_UNKNOWN_12 ,0x0012, -1); /* NONBINARY: VERY large implementation in FW150!! */
-+DEF_IE(111_IE_BSS_POWER_SAVE ,0x0012, /* -1 */ 2);
-+DEF_IE(1xx_IE_FIRMWARE_STATISTICS ,0x0013, 0x9c); /* TNETW1450: length 0x134!! */
-+DEF_IE(1FF_IE_RX_INTR_CONFIG ,0x0014, 0x14); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1xx_IE_FEATURE_CONFIG ,0x0015, 0x08);
-+DEF_IE(111_IE_KEY_CHOOSE ,0x0016, 0x04); /* for rekeying. really len=4?? */
-+DEF_IE(1FF_IE_MISC_CONFIG_TABLE ,0x0017, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_WONE_CONFIG ,0x0018, -1); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_TID_CONFIG ,0x001a, 0x2c); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_CALIB_ASSESSMENT ,0x001e, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_BEACON_FILTER_OPTIONS ,0x001f, 0x02); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_LOW_RSSI_THRESH_OPT ,0x0020, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_NOISE_HISTOGRAM_RESULTS ,0x0021, 0x30); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_PACKET_DETECT_THRESH ,0x0023, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_TX_CONFIG_OPTIONS ,0x0024, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_CCA_THRESHOLD ,0x0025, 0x02); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_EVENT_MASK ,0x0026, 0x08); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_DTIM_PERIOD ,0x0027, 0x02); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_ACI_CONFIG_SET ,0x0029, 0x06); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(1FF_IE_EEPROM_VER ,0x0030, 0x04); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(1xx_IE_DOT11_STATION_ID ,0x1001, 0x06);
-+DEF_IE(100_IE_DOT11_UNKNOWN_1002 ,0x1002, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(111_IE_DOT11_FRAG_THRESH ,0x1002, -1); /* mapped to cfgInvalid in FW150; TNETW1450 has length 2!! */
-+DEF_IE(100_IE_DOT11_BEACON_PERIOD ,0x1003, 0x02); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1xx_IE_DOT11_DTIM_PERIOD ,0x1004, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1FF_IE_DOT11_MAX_RX_LIFETIME ,0x1004, -1); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(1xx_IE_DOT11_SHORT_RETRY_LIMIT ,0x1005, 0x01); /* TNETW1450: length 2 */
-+DEF_IE(1xx_IE_DOT11_LONG_RETRY_LIMIT ,0x1006, 0x01); /* TNETW1450: length 2 */
-+DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_WRITE ,0x1007, 0x20); /* configure default keys; TNETW1450 has length 0x24!! */
-+DEF_IE(1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME ,0x1008, 0x04);
-+DEF_IE(1xx_IE_DOT11_GROUP_ADDR ,0x1009, -1);
-+DEF_IE(1xx_IE_DOT11_CURRENT_REG_DOMAIN ,0x100a, 0x02);
-+/* It's harmless to have larger struct. Use USB case always. */
-+DEF_IE(1xx_IE_DOT11_CURRENT_ANTENNA ,0x100b, 0x02); /* in fact len=1 for PCI */
-+DEF_IE(1xx_IE_DOT11_UNKNOWN_100C ,0x100c, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1xx_IE_DOT11_TX_POWER_LEVEL ,0x100d, 0x01); /* TNETW1450 has length 2!! */
-+DEF_IE(1xx_IE_DOT11_CURRENT_CCA_MODE ,0x100e, 0x02); /* in fact len=1 for PCI */
-+/* USB doesn't return anything - len==0?! */
-+DEF_IE(100_IE_DOT11_ED_THRESHOLD ,0x100f, 0x04);
-+DEF_IE(1xx_IE_DOT11_WEP_DEFAULT_KEY_SET ,0x1010, 0x01); /* set default key ID; TNETW1450: length 2 */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1011 ,0x1011, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1FF_IE_DOT11_CURR_5GHZ_REGDOM ,0x1011, -1); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1012 ,0x1012, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1013 ,0x1013, -1); /* mapped to cfgInvalid in FW150 */
-+
-+#if 0
-+/* Experimentally obtained on acx100, fw 1.9.8.b
-+** -1 means that fw returned 'invalid IE'
-+** 0200 FC00 nnnn... are test read contents: u16 type, u16 len, data
-+** (AA are poison bytes marking bytes not written by fw)
-+**
-+** Looks like acx100 fw does not update len field (thus len=256-4=FC here)
-+** A number of IEs seem to trash type,len fields
-+** IEs marked 'huge' return gobs of data (no poison bytes remain)
-+*/
-+DEF_IE(100_IE_INVAL_00, 0x0000, -1);
-+DEF_IE(100_IE_INVAL_01, 0x0001, -1); /* IE_ACX_TIMER, len=16 on older fw */
-+DEF_IE(100_IE_POWER_MGMT, 0x0002, 4); /* 0200FC00 00040000 AAAAAAAA */
-+DEF_IE(100_IE_QUEUE_CONFIG, 0x0003, 28); /* 0300FC00 48060000 9CAD0000 0101AAAA DCB00000 E4B00000 9CAA0000 00AAAAAA */
-+DEF_IE(100_IE_BLOCK_SIZE, 0x0004, 2); /* 0400FC00 0001AAAA AAAAAAAA AAAAAAAA */
-+/* write only: */
-+DEF_IE(100_IE_MEMORY_CONFIG_OPTIONS, 0x0005, 20);
-+DEF_IE(100_IE_RATE_FALLBACK, 0x0006, 1); /* 0600FC00 00AAAAAA AAAAAAAA AAAAAAAA */
-+/* write only: */
-+DEF_IE(100_IE_WEP_OPTIONS, 0x0007, 3);
-+DEF_IE(100_IE_MEMORY_MAP, 0x0008, 40); /* huge: 0800FC00 30000000 6CA20000 70A20000... */
-+/* gives INVAL on read: */
-+DEF_IE(100_IE_SCAN_STATUS, 0x0009, -1);
-+DEF_IE(100_IE_ASSOC_ID, 0x000a, 2); /* huge: 0A00FC00 00000000 01040800 00000000... */
-+DEF_IE(100_IE_INVAL_0B, 0x000b, -1);
-+/* 'command rejected': */
-+DEF_IE(100_IE_CONFIG_OPTIONS, 0x000c, -3);
-+DEF_IE(100_IE_FWREV, 0x000d, 24); /* 0D00FC00 52657620 312E392E 382E6200 AAAAAAAA AAAAAAAA 05050201 AAAAAAAA */
-+DEF_IE(100_IE_FCS_ERROR_COUNT, 0x000e, 4);
-+DEF_IE(100_IE_MEDIUM_USAGE, 0x000f, 8); /* E41F0000 2D780300 FCC91300 AAAAAAAA */
-+DEF_IE(100_IE_RXCONFIG, 0x0010, 4); /* 1000FC00 00280000 AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_QUEUE_THRESH, 0x0011, 12); /* 1100FC00 AAAAAAAA 00000000 00000000 */
-+DEF_IE(100_IE_BSS_POWER_SAVE, 0x0012, 1); /* 1200FC00 00AAAAAA AAAAAAAA AAAAAAAA */
-+/* read only, variable len */
-+DEF_IE(100_IE_FIRMWARE_STATISTICS, 0x0013, 256); /* 0000AC00 00000000 ... */
-+DEF_IE(100_IE_INT_CONFIG, 0x0014, 20); /* 00000000 00000000 00000000 00000000 5D74D105 00000000 AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_FEATURE_CONFIG, 0x0015, 8); /* 1500FC00 16000000 AAAAAAAA AAAAAAAA */
-+/* returns 'invalid MAC': */
-+DEF_IE(100_IE_KEY_CHOOSE, 0x0016, -4);
-+DEF_IE(100_IE_INVAL_17, 0x0017, -1);
-+DEF_IE(100_IE_UNKNOWN_18, 0x0018, 0); /* null len?! 1800FC00 AAAAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_UNKNOWN_19, 0x0019, 256); /* huge: 1900FC00 9C1F00EA FEFFFFEA FEFFFFEA... */
-+DEF_IE(100_IE_INVAL_1A, 0x001A, -1);
-+
-+DEF_IE(100_IE_DOT11_INVAL_1000, 0x1000, -1);
-+DEF_IE(100_IE_DOT11_STATION_ID, 0x1001, 6); /* huge: 0110FC00 58B10E2F 03000000 00000000... */
-+DEF_IE(100_IE_DOT11_INVAL_1002, 0x1002, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1003, 0x1003, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1004, 0x1004, -1);
-+DEF_IE(100_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1);
-+DEF_IE(100_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1);
-+/* write only: */
-+DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, 32);
-+DEF_IE(100_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4); /* huge: 0810FC00 00020000 F4010000 00000000... */
-+/* undoc but returns something */
-+DEF_IE(100_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* huge: 0910FC00 00000000 00000000 00000000... */
-+DEF_IE(100_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1); /* 0A10FC00 30AAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_CURRENT_ANTENNA, 0x100b, 1); /* 0B10FC00 8FAAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_INVAL_100C, 0x100c, -1);
-+DEF_IE(100_IE_DOT11_TX_POWER_LEVEL, 0x100d, 2); /* 00000000 0100AAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_CURRENT_CCA_MODE, 0x100e, 1); /* 0E10FC00 0DAAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_ED_THRESHOLD, 0x100f, 4); /* 0F10FC00 70000000 AAAAAAAA AAAAAAAA */
-+/* set default key ID */
-+DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1); /* 1010FC00 00AAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_INVAL_1011, 0x1011, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1012, 0x1012, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1013, 0x1013, -1);
-+DEF_IE(100_IE_DOT11_UNKNOWN_1014, 0x1014, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1015, 0x1015, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1016, 0x1016, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1017, 0x1017, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1018, 0x1018, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1019, 0x1019, 256); /* huge */
-+#endif
-+
-+#if 0
-+/* Experimentally obtained on PCI acx111 Xterasys XN-2522g, fw 1.2.1.34
-+** -1 means that fw returned 'invalid IE'
-+** 0400 0800 nnnn... are test read contents: u16 type, u16 len, data
-+** (AA are poison bytes marking bytes not written by fw)
-+**
-+** Looks like acx111 fw reports real len!
-+*/
-+DEF_IE(111_IE_INVAL_00, 0x0000, -1);
-+DEF_IE(111_IE_INVAL_01, 0x0001, -1);
-+DEF_IE(111_IE_POWER_MGMT, 0x0002, 12);
-+/* write only, variable len: 12 + rxqueue_cnt*8 + txqueue_cnt*4: */
-+DEF_IE(111_IE_MEMORY_CONFIG, 0x0003, 24);
-+DEF_IE(111_IE_BLOCK_SIZE, 0x0004, 8); /* 04000800 AA00AAAA AAAAAAAA */
-+/* variable len: 8 + rxqueue_cnt*8 + txqueue_cnt*8: */
-+DEF_IE(111_IE_QUEUE_HEAD, 0x0005, 24);
-+DEF_IE(111_IE_RATE_FALLBACK, 0x0006, 1);
-+/* acx100 name:WEP_OPTIONS */
-+/* said to have len:1 (not true, actually returns 12 bytes): */
-+DEF_IE(111_IE_RADIO_BAND, 0x0007, 12); /* 07000C00 AAAA1F00 FF03AAAA AAAAAAAA */
-+DEF_IE(111_IE_MEMORY_MAP, 0x0008, 48);
-+/* said to have len:4, but gives INVAL on read: */
-+DEF_IE(111_IE_SCAN_STATUS, 0x0009, -1);
-+DEF_IE(111_IE_ASSOC_ID, 0x000a, 2);
-+/* write only, len is not known: */
-+DEF_IE(111_IE_UNKNOWN_0B, 0x000b, 0);
-+/* read only, variable len. I see 67 byte reads: */
-+DEF_IE(111_IE_CONFIG_OPTIONS, 0x000c, 67); /* 0C004300 01160500 ... */
-+DEF_IE(111_IE_FWREV, 0x000d, 24);
-+DEF_IE(111_IE_FCS_ERROR_COUNT, 0x000e, 4);
-+DEF_IE(111_IE_MEDIUM_USAGE, 0x000f, 8);
-+DEF_IE(111_IE_RXCONFIG, 0x0010, 4);
-+DEF_IE(111_IE_QUEUE_THRESH, 0x0011, 12);
-+DEF_IE(111_IE_BSS_POWER_SAVE, 0x0012, 1);
-+/* read only, variable len. I see 240 byte reads: */
-+DEF_IE(111_IE_FIRMWARE_STATISTICS, 0x0013, 240); /* 1300F000 00000000 ... */
-+/* said to have len=17. looks like fw pads it to 20: */
-+DEF_IE(111_IE_INT_CONFIG, 0x0014, 20); /* 14001400 00000000 00000000 00000000 00000000 00000000 */
-+DEF_IE(111_IE_FEATURE_CONFIG, 0x0015, 8);
-+/* said to be name:KEY_INDICATOR, len:4, but gives INVAL on read: */
-+DEF_IE(111_IE_KEY_CHOOSE, 0x0016, -1);
-+/* said to have len:4, but in fact returns 8: */
-+DEF_IE(111_IE_MAX_USB_XFR, 0x0017, 8); /* 17000800 00014000 00000000 */
-+DEF_IE(111_IE_INVAL_18, 0x0018, -1);
-+DEF_IE(111_IE_INVAL_19, 0x0019, -1);
-+/* undoc but returns something: */
-+/* huh, fw indicates len=20 but uses 4 more bytes in buffer??? */
-+DEF_IE(111_IE_UNKNOWN_1A, 0x001A, 20); /* 1A001400 AA00AAAA 0000020F FF030000 00020000 00000007 04000000 */
-+
-+DEF_IE(111_IE_DOT11_INVAL_1000, 0x1000, -1);
-+DEF_IE(111_IE_DOT11_STATION_ID, 0x1001, 6);
-+DEF_IE(111_IE_DOT11_FRAG_THRESH, 0x1002, 2);
-+/* acx100 only? gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_BEACON_PERIOD, 0x1003, -1);
-+/* said to be MAX_RECV_MSDU_LIFETIME: */
-+DEF_IE(111_IE_DOT11_DTIM_PERIOD, 0x1004, 4);
-+DEF_IE(111_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1);
-+DEF_IE(111_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1);
-+/* acx100 only? gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, -1);
-+DEF_IE(111_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4);
-+/* undoc but returns something. maybe it's 2 multicast MACs to listen to? */
-+DEF_IE(111_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* 09100C00 00000000 00000000 00000000 */
-+DEF_IE(111_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1);
-+DEF_IE(111_IE_DOT11_CURRENT_ANTENNA, 0x100b, 2);
-+DEF_IE(111_IE_DOT11_INVAL_100C, 0x100c, -1);
-+DEF_IE(111_IE_DOT11_TX_POWER_LEVEL, 0x100d, 1);
-+/* said to have len=1 but gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_CURRENT_CCA_MODE, 0x100e, -1);
-+/* said to have len=4 but gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_ED_THRESHOLD, 0x100f, -1);
-+/* set default key ID. write only: */
-+DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1);
-+/* undoc but returns something: */
-+DEF_IE(111_IE_DOT11_UNKNOWN_1011, 0x1011, 1); /* 11100100 20 */
-+DEF_IE(111_IE_DOT11_INVAL_1012, 0x1012, -1);
-+DEF_IE(111_IE_DOT11_INVAL_1013, 0x1013, -1);
-+#endif
-+
-+
-+/***********************************************************************
-+**Information Frames Structures
-+*/
-+
-+/* Used in beacon frames and the like */
-+#define DOT11RATEBYTE_1 (1*2)
-+#define DOT11RATEBYTE_2 (2*2)
-+#define DOT11RATEBYTE_5_5 (5*2+1)
-+#define DOT11RATEBYTE_11 (11*2)
-+#define DOT11RATEBYTE_22 (22*2)
-+#define DOT11RATEBYTE_6_G (6*2)
-+#define DOT11RATEBYTE_9_G (9*2)
-+#define DOT11RATEBYTE_12_G (12*2)
-+#define DOT11RATEBYTE_18_G (18*2)
-+#define DOT11RATEBYTE_24_G (24*2)
-+#define DOT11RATEBYTE_36_G (36*2)
-+#define DOT11RATEBYTE_48_G (48*2)
-+#define DOT11RATEBYTE_54_G (54*2)
-+#define DOT11RATEBYTE_BASIC 0x80 /* flags rates included in basic rate set */
-+
-+
-+/***********************************************************************
-+** rxbuffer_t
-+**
-+** This is the format of rx data returned by acx
-+*/
-+
-+/* I've hoped it's a 802.11 PHY header, but no...
-+ * so far, I've seen on acx111:
-+ * 0000 3a00 0000 0000 IBSS Beacons
-+ * 0000 3c00 0000 0000 ESS Beacons
-+ * 0000 2700 0000 0000 Probe requests
-+ * --vda
-+ */
-+typedef struct phy_hdr {
-+ u8 unknown[4];
-+ u8 acx111_unknown[4];
-+} ACX_PACKED phy_hdr_t;
-+
-+/* seems to be a bit similar to hfa384x_rx_frame.
-+ * These fields are still not quite obvious, though.
-+ * Some seem to have different meanings... */
-+
-+#define RXBUF_HDRSIZE 12
-+#define RXBUF_BYTES_RCVD(adev, rxbuf) \
-+ ((le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0xfff) - (adev)->phy_header_len)
-+#define RXBUF_BYTES_USED(rxbuf) \
-+ ((le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0xfff) + RXBUF_HDRSIZE)
-+/* USBism */
-+#define RXBUF_IS_TXSTAT(rxbuf) (le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0x8000)
-+/*
-+mac_cnt_rcvd:
-+ 12 bits: length of frame from control field to first byte of FCS
-+ 3 bits: reserved
-+ 1 bit: 1 = it's a tx status info, not a rx packet (USB only)
-+
-+mac_cnt_mblks:
-+ 6 bits: number of memory block used to store frame in adapter memory
-+ 1 bit: Traffic Indicator bit in TIM of received Beacon was set
-+
-+mac_status: 1 byte (bitmap):
-+ 7 Matching BSSID
-+ 6 Matching SSID
-+ 5 BDCST Address 1 field is a broadcast
-+ 4 VBM received beacon frame has more than one set bit (?!)
-+ 3 TIM Set bit representing this station is set in TIM of received beacon
-+ 2 GROUP Address 1 is a multicast
-+ 1 ADDR1 Address 1 matches our MAC
-+ 0 FCSGD FSC is good
-+
-+phy_stat_baseband: 1 byte (bitmap):
-+ 7 Preamble frame had a long preamble
-+ 6 PLCP Error CRC16 error in PLCP header
-+ 5 Unsup_Mod unsupported modulation
-+ 4 Selected Antenna antenna 1 was used to receive this frame
-+ 3 PBCC/CCK frame used: 1=PBCC, 0=CCK modulation
-+ 2 OFDM frame used OFDM modulation
-+ 1 TI Protection protection frame was detected
-+ 0 Reserved
-+
-+phy_plcp_signal: 1 byte:
-+ Receive PLCP Signal field from the Baseband Processor
-+
-+phy_level: 1 byte:
-+ receive AGC gain level (can be used to measure receive signal strength)
-+
-+phy_snr: 1 byte:
-+ estimated noise power of equalized receive signal
-+ at input of FEC decoder (can be used to measure receive signal quality)
-+
-+time: 4 bytes:
-+ timestamp sampled from either the Access Manager TSF counter
-+ or free-running microsecond counter when the MAC receives
-+ first byte of PLCP header.
-+*/
-+
-+typedef struct rxbuffer {
-+ u16 mac_cnt_rcvd; /* only 12 bits are len! (0xfff) */
-+ u8 mac_cnt_mblks;
-+ u8 mac_status;
-+ u8 phy_stat_baseband; /* bit 0x80: used LNA (Low-Noise Amplifier) */
-+ u8 phy_plcp_signal;
-+ u8 phy_level; /* PHY stat */
-+ u8 phy_snr; /* PHY stat */
-+ u32 time; /* timestamp upon MAC rcv first byte */
-+/* 4-byte (acx100) or 8-byte (acx111) phy header will be here
-+** if RX_CFG1_INCLUDE_PHY_HDR is in effect:
-+** phy_hdr_t phy */
-+ wlan_hdr_a3_t hdr_a3;
-+ /* maximally sized data part of wlan packet */
-+ u8 data_a3[WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN];
-+ /* can add hdr/data_a4 if needed */
-+} ACX_PACKED rxbuffer_t;
-+
-+
-+/*--- Firmware statistics ----------------------------------------------------*/
-+
-+/* define a random 100 bytes more to catch firmware versions which
-+ * provide a bigger struct */
-+#define FW_STATS_FUTURE_EXTENSION 100
-+
-+typedef struct fw_stats_tx {
-+ u32 tx_desc_of;
-+} ACX_PACKED fw_stats_tx_t;
-+
-+typedef struct fw_stats_rx {
-+ u32 rx_oom;
-+ u32 rx_hdr_of;
-+ u32 rx_hw_stuck; /* old: u32 rx_hdr_use_next */
-+ u32 rx_dropped_frame;
-+ u32 rx_frame_ptr_err;
-+ u32 rx_xfr_hint_trig;
-+ u32 rx_aci_events; /* later versions only */
-+ u32 rx_aci_resets; /* later versions only */
-+} ACX_PACKED fw_stats_rx_t;
-+
-+typedef struct fw_stats_dma {
-+ u32 rx_dma_req;
-+ u32 rx_dma_err;
-+ u32 tx_dma_req;
-+ u32 tx_dma_err;
-+} ACX_PACKED fw_stats_dma_t;
-+
-+typedef struct fw_stats_irq {
-+ u32 cmd_cplt;
-+ u32 fiq;
-+ u32 rx_hdrs;
-+ u32 rx_cmplt;
-+ u32 rx_mem_of;
-+ u32 rx_rdys;
-+ u32 irqs;
-+ u32 tx_procs;
-+ u32 decrypt_done;
-+ u32 dma_0_done;
-+ u32 dma_1_done;
-+ u32 tx_exch_complet;
-+ u32 commands;
-+ u32 rx_procs;
-+ u32 hw_pm_mode_changes;
-+ u32 host_acks;
-+ u32 pci_pm;
-+ u32 acm_wakeups;
-+} ACX_PACKED fw_stats_irq_t;
-+
-+typedef struct fw_stats_wep {
-+ u32 wep_key_count;
-+ u32 wep_default_key_count;
-+ u32 dot11_def_key_mib;
-+ u32 wep_key_not_found;
-+ u32 wep_decrypt_fail;
-+ u32 wep_pkt_decrypt;
-+ u32 wep_decrypt_irqs;
-+} ACX_PACKED fw_stats_wep_t;
-+
-+typedef struct fw_stats_pwr {
-+ u32 tx_start_ctr;
-+ u32 no_ps_tx_too_short;
-+ u32 rx_start_ctr;
-+ u32 no_ps_rx_too_short;
-+ u32 lppd_started;
-+ u32 no_lppd_too_noisy;
-+ u32 no_lppd_too_short;
-+ u32 no_lppd_matching_frame;
-+} ACX_PACKED fw_stats_pwr_t;
-+
-+typedef struct fw_stats_mic {
-+ u32 mic_rx_pkts;
-+ u32 mic_calc_fail;
-+} ACX_PACKED fw_stats_mic_t;
-+
-+typedef struct fw_stats_aes {
-+ u32 aes_enc_fail;
-+ u32 aes_dec_fail;
-+ u32 aes_enc_pkts;
-+ u32 aes_dec_pkts;
-+ u32 aes_enc_irq;
-+ u32 aes_dec_irq;
-+} ACX_PACKED fw_stats_aes_t;
-+
-+typedef struct fw_stats_event {
-+ u32 heartbeat;
-+ u32 calibration;
-+ u32 rx_mismatch;
-+ u32 rx_mem_empty;
-+ u32 rx_pool;
-+ u32 oom_late;
-+ u32 phy_tx_err;
-+ u32 tx_stuck;
-+} ACX_PACKED fw_stats_event_t;
-+
-+/* mainly for size calculation only */
-+typedef struct fw_stats {
-+ u16 type;
-+ u16 len;
-+ fw_stats_tx_t tx;
-+ fw_stats_rx_t rx;
-+ fw_stats_dma_t dma;
-+ fw_stats_irq_t irq;
-+ fw_stats_wep_t wep;
-+ fw_stats_pwr_t pwr;
-+ fw_stats_mic_t mic;
-+ fw_stats_aes_t aes;
-+ fw_stats_event_t evt;
-+ u8 _padding[FW_STATS_FUTURE_EXTENSION];
-+} fw_stats_t;
-+
-+/* Firmware version struct */
-+
-+typedef struct fw_ver {
-+ u16 cmd;
-+ u16 size;
-+ char fw_id[20];
-+ u32 hw_id;
-+} ACX_PACKED fw_ver_t;
-+
-+#define FW_ID_SIZE 20
-+
-+typedef struct shared_queueindicator {
-+ u32 indicator;
-+ u16 host_lock;
-+ u16 fw_lock;
-+} ACX_PACKED queueindicator_t;
-+
-+/*--- WEP stuff --------------------------------------------------------------*/
-+#define DOT11_MAX_DEFAULT_WEP_KEYS 4
-+
-+/* non-firmware struct, no packing necessary */
-+typedef struct wep_key {
-+ size_t size; /* most often used member first */
-+ u8 index;
-+ u8 key[29];
-+ u16 strange_filler;
-+} wep_key_t; /* size = 264 bytes (33*8) */
-+/* FIXME: We don't have size 264! Or is there 2 bytes beyond the key
-+ * (strange_filler)? */
-+
-+/* non-firmware struct, no packing necessary */
-+typedef struct key_struct {
-+ u8 addr[ETH_ALEN]; /* 0x00 */
-+ u16 filler1; /* 0x06 */
-+ u32 filler2; /* 0x08 */
-+ u32 index; /* 0x0c */
-+ u16 len; /* 0x10 */
-+ u8 key[29]; /* 0x12; is this long enough??? */
-+} key_struct_t; /* size = 276. FIXME: where is the remaining space?? */
-+
-+
-+/*--- Client (peer) info -----------------------------------------------------*/
-+/* adev->sta_list[] is used for:
-+** accumulating and processing of scan results
-+** keeping client info in AP mode
-+** keeping AP info in STA mode (AP is the only one 'client')
-+** keeping peer info in ad-hoc mode
-+** non-firmware struct --> no packing necessary */
-+enum {
-+ CLIENT_EMPTY_SLOT_0 = 0,
-+ CLIENT_EXIST_1 = 1,
-+ CLIENT_AUTHENTICATED_2 = 2,
-+ CLIENT_ASSOCIATED_3 = 3,
-+ CLIENT_JOIN_CANDIDATE = 4
-+};
-+struct client {
-+ /* most frequent access first */
-+ u8 used; /* misnamed, more like 'status' */
-+ struct client* next;
-+ unsigned long mtime; /* last time we heard it, in jiffies */
-+ size_t essid_len; /* length of ESSID (without '\0') */
-+ u32 sir; /* Standard IR */
-+ u32 snr; /* Signal to Noise Ratio */
-+ u16 aid; /* association ID */
-+ u16 seq; /* from client's auth req */
-+ u16 auth_alg; /* from client's auth req */
-+ u16 cap_info; /* from client's assoc req */
-+ u16 rate_cap; /* what client supports (all rates) */
-+ u16 rate_bas; /* what client supports (basic rates) */
-+ u16 rate_cfg; /* what is allowed (by iwconfig etc) */
-+ u16 rate_cur; /* currently used rate mask */
-+ u8 rate_100; /* currently used rate byte (acx100 only) */
-+ u8 address[ETH_ALEN];
-+ u8 bssid[ETH_ALEN]; /* ad-hoc hosts can have bssid != mac */
-+ u8 channel;
-+ u8 auth_step;
-+ u8 ignore_count;
-+ u8 fallback_count;
-+ u8 stepup_count;
-+ char essid[IW_ESSID_MAX_SIZE + 1]; /* ESSID and trailing '\0' */
-+/* FIXME: this one is too damn big */
-+ char challenge_text[WLAN_CHALLENGE_LEN];
-+};
-+
-+
-+/***********************************************************************
-+** Hardware structures
-+*/
-+
-+/* An opaque typesafe helper type
-+ *
-+ * Some hardware fields are actually pointers,
-+ * but they have to remain u32, since using ptr instead
-+ * (8 bytes on 64bit systems!) would disrupt the fixed descriptor
-+ * format the acx firmware expects in the non-user area.
-+ * Since we cannot cram an 8 byte ptr into 4 bytes, we need to
-+ * enforce that pointed to data remains in low memory
-+ * (address value needs to fit in 4 bytes) on 64bit systems.
-+ *
-+ * This is easy to get wrong, thus we are using a small struct
-+ * and special macros to access it. Macros will check for
-+ * attempts to overflow an acx_ptr with value > 0xffffffff.
-+ *
-+ * Attempts to use acx_ptr without macros result in compile-time errors */
-+
-+typedef struct {
-+ u32 v;
-+} ACX_PACKED acx_ptr;
-+
-+#if ACX_DEBUG
-+#define CHECK32(n) BUG_ON(sizeof(n)>4 && (long)(n)>0xffffff00)
-+#else
-+#define CHECK32(n) ((void)0)
-+#endif
-+
-+/* acx_ptr <-> integer conversion */
-+#define cpu2acx(n) ({ CHECK32(n); ((acx_ptr){ .v = cpu_to_le32(n) }); })
-+#define acx2cpu(a) (le32_to_cpu(a.v))
-+
-+/* acx_ptr <-> pointer conversion */
-+#define ptr2acx(p) ({ CHECK32(p); ((acx_ptr){ .v = cpu_to_le32((u32)(long)(p)) }); })
-+#define acx2ptr(a) ((void*)le32_to_cpu(a.v))
-+
-+/* Values for rate field (acx100 only) */
-+#define RATE100_1 10
-+#define RATE100_2 20
-+#define RATE100_5 55
-+#define RATE100_11 110
-+#define RATE100_22 220
-+/* This bit denotes use of PBCC:
-+** (PBCC encoding is usable with 11 and 22 Mbps speeds only) */
-+#define RATE100_PBCC511 0x80
-+
-+/* Bit values for rate111 field */
-+#define RATE111_1 0x0001 /* DBPSK */
-+#define RATE111_2 0x0002 /* DQPSK */
-+#define RATE111_5 0x0004 /* CCK or PBCC */
-+#define RATE111_6 0x0008 /* CCK-OFDM or OFDM */
-+#define RATE111_9 0x0010 /* CCK-OFDM or OFDM */
-+#define RATE111_11 0x0020 /* CCK or PBCC */
-+#define RATE111_12 0x0040 /* CCK-OFDM or OFDM */
-+#define RATE111_18 0x0080 /* CCK-OFDM or OFDM */
-+#define RATE111_22 0x0100 /* PBCC */
-+#define RATE111_24 0x0200 /* CCK-OFDM or OFDM */
-+#define RATE111_36 0x0400 /* CCK-OFDM or OFDM */
-+#define RATE111_48 0x0800 /* CCK-OFDM or OFDM */
-+#define RATE111_54 0x1000 /* CCK-OFDM or OFDM */
-+#define RATE111_RESERVED 0x2000
-+#define RATE111_PBCC511 0x4000 /* PBCC mod at 5.5 or 11Mbit (else CCK) */
-+#define RATE111_SHORTPRE 0x8000 /* short preamble */
-+/* Special 'try everything' value */
-+#define RATE111_ALL 0x1fff
-+/* These bits denote acx100 compatible settings */
-+#define RATE111_ACX100_COMPAT 0x0127
-+/* These bits denote 802.11b compatible settings */
-+#define RATE111_80211B_COMPAT 0x0027
-+
-+/* Descriptor Ctl field bits
-+ * init value is 0x8e, "idle" value is 0x82 (in idle tx descs)
-+ */
-+#define DESC_CTL_SHORT_PREAMBLE 0x01 /* preamble type: 0 = long; 1 = short */
-+#define DESC_CTL_FIRSTFRAG 0x02 /* this is the 1st frag of the frame */
-+#define DESC_CTL_AUTODMA 0x04
-+#define DESC_CTL_RECLAIM 0x08 /* ready to reuse */
-+#define DESC_CTL_HOSTDONE 0x20 /* host has finished processing */
-+#define DESC_CTL_ACXDONE 0x40 /* acx has finished processing */
-+/* host owns the desc [has to be released last, AFTER modifying all other desc fields!] */
-+#define DESC_CTL_HOSTOWN 0x80
-+#define DESC_CTL_ACXDONE_HOSTOWN (DESC_CTL_ACXDONE | DESC_CTL_HOSTOWN)
-+
-+/* Descriptor Status field
-+ */
-+#define DESC_STATUS_FULL (1 << 31)
-+
-+/* NB: some bits may be interesting for Monitor mode tx (aka Raw tx): */
-+#define DESC_CTL2_SEQ 0x01 /* don't increase sequence field */
-+#define DESC_CTL2_FCS 0x02 /* don't add the FCS */
-+#define DESC_CTL2_MORE_FRAG 0x04
-+#define DESC_CTL2_RETRY 0x08 /* don't increase retry field */
-+#define DESC_CTL2_POWER 0x10 /* don't increase power mgmt. field */
-+#define DESC_CTL2_RTS 0x20 /* do RTS/CTS magic before sending */
-+#define DESC_CTL2_WEP 0x40 /* encrypt this frame */
-+#define DESC_CTL2_DUR 0x80 /* don't increase duration field */
-+
-+/***********************************************************************
-+** PCI structures
-+*/
-+/* IRQ Constants
-+** (outside of "#ifdef PCI" because USB (mis)uses HOST_INT_SCAN_COMPLETE) */
-+#define HOST_INT_RX_DATA 0x0001
-+#define HOST_INT_TX_COMPLETE 0x0002
-+#define HOST_INT_TX_XFER 0x0004
-+#define HOST_INT_RX_COMPLETE 0x0008
-+#define HOST_INT_DTIM 0x0010
-+#define HOST_INT_BEACON 0x0020
-+#define HOST_INT_TIMER 0x0040
-+#define HOST_INT_KEY_NOT_FOUND 0x0080
-+#define HOST_INT_IV_ICV_FAILURE 0x0100
-+#define HOST_INT_CMD_COMPLETE 0x0200
-+#define HOST_INT_INFO 0x0400
-+#define HOST_INT_OVERFLOW 0x0800
-+#define HOST_INT_PROCESS_ERROR 0x1000
-+#define HOST_INT_SCAN_COMPLETE 0x2000
-+#define HOST_INT_FCS_THRESHOLD 0x4000
-+#define HOST_INT_UNKNOWN 0x8000
-+
-+/* Outside of "#ifdef PCI" because USB needs to know sizeof()
-+** of txdesc and rxdesc: */
-+struct txdesc {
-+ acx_ptr pNextDesc; /* pointer to next txdesc */
-+ acx_ptr HostMemPtr; /* 0x04 */
-+ acx_ptr AcxMemPtr; /* 0x08 */
-+ u32 tx_time; /* 0x0c */
-+ u16 total_length; /* 0x10 */
-+ u16 Reserved; /* 0x12 */
-+
-+/* The following 16 bytes do not change when acx100 owns the descriptor */
-+/* BUG: fw clears last byte of this area which is supposedly reserved
-+** for driver use. amd64 blew up. We dare not use it now */
-+ u32 dummy[4];
-+
-+ u8 Ctl_8; /* 0x24, 8bit value */
-+ u8 Ctl2_8; /* 0x25, 8bit value */
-+ u8 error; /* 0x26 */
-+ u8 ack_failures; /* 0x27 */
-+
-+ union {
-+ /*
-+ * Packing doesn't work correctly on ARM unless unions are on
-+ * 4 byte boundaries.
-+ */
-+ struct {
-+ u8 rts_failures; /* 0x28 */
-+ u8 rts_ok; /* 0x29 */
-+ u16 d1;
-+ } ACX_PACKED rts;
-+ struct {
-+ u16 d1;
-+ u8 rate; /* 0x2a */
-+ u8 queue_ctrl; /* 0x2b */
-+ } ACX_PACKED r1;
-+ struct {
-+ u16 d1;
-+ u16 rate111; /* 0x2a */
-+ } ACX_PACKED r2;
-+ } ACX_PACKED u;
-+ u32 queue_info; /* 0x2c (acx100, reserved on acx111) */
-+} ACX_PACKED; /* size : 48 = 0x30 */
-+/* NB: acx111 txdesc structure is 4 byte larger */
-+/* All these 4 extra bytes are reserved. tx alloc code takes them into account */
-+
-+struct rxdesc {
-+ acx_ptr pNextDesc; /* 0x00 */
-+ acx_ptr HostMemPtr; /* 0x04 */
-+ acx_ptr ACXMemPtr; /* 0x08 */
-+ u32 rx_time; /* 0x0c */
-+ u16 total_length; /* 0x10 */
-+ u16 WEP_length; /* 0x12 */
-+ u32 WEP_ofs; /* 0x14 */
-+
-+/* the following 16 bytes do not change when acx100 owns the descriptor */
-+ u8 driverWorkspace[16]; /* 0x18 */
-+
-+ u8 Ctl_8;
-+ u8 rate;
-+ u8 error;
-+ u8 SNR; /* Signal-to-Noise Ratio */
-+ u8 RxLevel;
-+ u8 queue_ctrl;
-+ u16 unknown;
-+ u32 unknown2;
-+} ACX_PACKED; /* size 52 = 0x34 */
-+
-+#if defined(ACX_PCI) || defined(ACX_MEM)
-+
-+/* Register I/O offsets */
-+#define ACX100_EEPROM_ID_OFFSET 0x380
-+
-+/* please add further ACX hardware register definitions only when
-+ it turns out you need them in the driver, and please try to use
-+ firmware functionality instead, since using direct I/O access instead
-+ of letting the firmware do it might confuse the firmware's state
-+ machine */
-+
-+/* ***** ABSOLUTELY ALWAYS KEEP OFFSETS IN SYNC WITH THE INITIALIZATION
-+** OF THE I/O ARRAYS!!!! (grep for '^IO_ACX') ***** */
-+enum {
-+ IO_ACX_SOFT_RESET = 0,
-+
-+ IO_ACX_SLV_MEM_ADDR,
-+ IO_ACX_SLV_MEM_DATA,
-+ IO_ACX_SLV_MEM_CTL,
-+ IO_ACX_SLV_END_CTL,
-+
-+ IO_ACX_FEMR, /* Function Event Mask */
-+
-+ IO_ACX_INT_TRIG,
-+ IO_ACX_IRQ_MASK,
-+ IO_ACX_IRQ_STATUS_NON_DES,
-+ IO_ACX_IRQ_STATUS_CLEAR, /* CLEAR = clear on read */
-+ IO_ACX_IRQ_ACK,
-+ IO_ACX_HINT_TRIG,
-+
-+ IO_ACX_ENABLE,
-+
-+ IO_ACX_EEPROM_CTL,
-+ IO_ACX_EEPROM_ADDR,
-+ IO_ACX_EEPROM_DATA,
-+ IO_ACX_EEPROM_CFG,
-+
-+ IO_ACX_PHY_ADDR,
-+ IO_ACX_PHY_DATA,
-+ IO_ACX_PHY_CTL,
-+
-+ IO_ACX_GPIO_OE,
-+
-+ IO_ACX_GPIO_OUT,
-+
-+ IO_ACX_CMD_MAILBOX_OFFS,
-+ IO_ACX_INFO_MAILBOX_OFFS,
-+ IO_ACX_EEPROM_INFORMATION,
-+
-+ IO_ACX_EE_START,
-+ IO_ACX_SOR_CFG,
-+ IO_ACX_ECPU_CTRL
-+};
-+/* ***** ABSOLUTELY ALWAYS KEEP OFFSETS IN SYNC WITH THE INITIALIZATION
-+** OF THE I/O ARRAYS!!!! (grep for '^IO_ACX') ***** */
-+
-+/* Values for IO_ACX_INT_TRIG register: */
-+/* inform hw that rxdesc in queue needs processing */
-+#define INT_TRIG_RXPRC 0x08
-+/* inform hw that txdesc in queue needs processing */
-+#define INT_TRIG_TXPRC 0x04
-+/* ack that we received info from info mailbox */
-+#define INT_TRIG_INFOACK 0x02
-+/* inform hw that we have filled command mailbox */
-+#define INT_TRIG_CMD 0x01
-+
-+struct txhostdesc {
-+ acx_ptr data_phy; /* 0x00 [u8 *] */
-+ u16 data_offset; /* 0x04 */
-+ u16 reserved; /* 0x06 */
-+ u16 Ctl_16; /* 16bit value, endianness!! */
-+ u16 length; /* 0x0a */
-+ acx_ptr desc_phy_next; /* 0x0c [txhostdesc *] */
-+ acx_ptr pNext; /* 0x10 [txhostdesc *] */
-+ u32 Status; /* 0x14, unused on Tx */
-+/* From here on you can use this area as you want (variable length, too!) */
-+ u8 *data;
-+} ACX_PACKED;
-+
-+struct rxhostdesc {
-+ acx_ptr data_phy; /* 0x00 [rxbuffer_t *] */
-+ u16 data_offset; /* 0x04 */
-+ u16 reserved; /* 0x06 */
-+ u16 Ctl_16; /* 0x08; 16bit value, endianness!! */
-+ u16 length; /* 0x0a */
-+ acx_ptr desc_phy_next; /* 0x0c [rxhostdesc_t *] */
-+ acx_ptr pNext; /* 0x10 [rxhostdesc_t *] */
-+ u32 Status; /* 0x14 */
-+/* From here on you can use this area as you want (variable length, too!) */
-+ rxbuffer_t *data;
-+} ACX_PACKED;
-+
-+#endif /* ACX_PCI */
-+
-+/***********************************************************************
-+** USB structures and constants
-+*/
-+#ifdef ACX_USB
-+
-+/* Used for usb_txbuffer.desc field */
-+#define USB_TXBUF_TXDESC 0xA
-+/* Size of header (everything up to data[]) */
-+#define USB_TXBUF_HDRSIZE 14
-+typedef struct usb_txbuffer {
-+ u16 desc;
-+ u16 mpdu_len;
-+ u8 queue_index;
-+ u8 rate;
-+ u32 hostdata;
-+ u8 ctrl1;
-+ u8 ctrl2;
-+ u16 data_len;
-+ /* wlan packet content is placed here: */
-+ u8 data[WLAN_A4FR_MAXLEN_WEP_FCS];
-+} ACX_PACKED usb_txbuffer_t;
-+
-+/* USB returns either rx packets (see rxbuffer) or
-+** these "tx status" structs: */
-+typedef struct usb_txstatus {
-+ u16 mac_cnt_rcvd; /* only 12 bits are len! (0xfff) */
-+ u8 queue_index;
-+ u8 mac_status; /* seen 0x20 on tx failure */
-+ u32 hostdata;
-+ u8 rate;
-+ u8 ack_failures;
-+ u8 rts_failures;
-+ u8 rts_ok;
-+} ACX_PACKED usb_txstatus_t;
-+
-+typedef struct usb_tx {
-+ unsigned busy:1;
-+ struct urb *urb;
-+ acx_device_t *adev;
-+ /* actual USB bulk output data block is here: */
-+ usb_txbuffer_t bulkout;
-+} usb_tx_t;
-+
-+struct usb_rx_plain {
-+ unsigned busy:1;
-+ struct urb *urb;
-+ acx_device_t *adev;
-+ rxbuffer_t bulkin;
-+};
-+
-+typedef struct usb_rx {
-+ unsigned busy:1;
-+ struct urb *urb;
-+ acx_device_t *adev;
-+ rxbuffer_t bulkin;
-+ /* Make entire structure 4k. Report if it breaks something. */
-+ u8 padding[4*1024 - sizeof(struct usb_rx_plain)];
-+} usb_rx_t;
-+#endif /* ACX_USB */
-+
-+
-+/* Config Option structs */
-+
-+typedef struct co_antennas {
-+ u8 type;
-+ u8 len;
-+ u8 list[2];
-+} ACX_PACKED co_antennas_t;
-+
-+typedef struct co_powerlevels {
-+ u8 type;
-+ u8 len;
-+ u16 list[8];
-+} ACX_PACKED co_powerlevels_t;
-+
-+typedef struct co_datarates {
-+ u8 type;
-+ u8 len;
-+ u8 list[8];
-+} ACX_PACKED co_datarates_t;
-+
-+typedef struct co_domains {
-+ u8 type;
-+ u8 len;
-+ u8 list[6];
-+} ACX_PACKED co_domains_t;
-+
-+typedef struct co_product_id {
-+ u8 type;
-+ u8 len;
-+ u8 list[128];
-+} ACX_PACKED co_product_id_t;
-+
-+typedef struct co_manuf_id {
-+ u8 type;
-+ u8 len;
-+ u8 list[128];
-+} ACX_PACKED co_manuf_t;
-+
-+typedef struct co_fixed {
-+ char NVSv[8];
-+/* u16 NVS_vendor_offs; ACX111-only */
-+/* u16 unknown; ACX111-only */
-+ u8 MAC[6]; /* ACX100-only */
-+ u16 probe_delay; /* ACX100-only */
-+ u32 eof_memory;
-+ u8 dot11CCAModes;
-+ u8 dot11Diversity;
-+ u8 dot11ShortPreambleOption;
-+ u8 dot11PBCCOption;
-+ u8 dot11ChannelAgility;
-+ u8 dot11PhyType; /* FIXME: does 802.11 call it "dot11PHYType"? */
-+ u8 dot11TempType;
-+ u8 table_count;
-+} ACX_PACKED co_fixed_t;
-+
-+typedef struct acx111_ie_configoption {
-+ u16 type;
-+ u16 len;
-+/* Do not access below members directly, they are in fact variable length */
-+ co_fixed_t fixed;
-+ co_antennas_t antennas;
-+ co_powerlevels_t power_levels;
-+ co_datarates_t data_rates;
-+ co_domains_t domains;
-+ co_product_id_t product_id;
-+ co_manuf_t manufacturer;
-+ u8 _padding[4];
-+} ACX_PACKED acx111_ie_configoption_t;
-+
-+
-+/***********************************************************************
-+** Main acx per-device data structure
-+*/
-+#define ACX_STATE_FW_LOADED 0x01
-+#define ACX_STATE_IFACE_UP 0x02
-+
-+/* MAC mode (BSS type) defines
-+ * Note that they shouldn't be redefined, since they are also used
-+ * during communication with firmware */
-+#define ACX_MODE_0_ADHOC 0
-+#define ACX_MODE_1_UNUSED 1
-+#define ACX_MODE_2_STA 2
-+#define ACX_MODE_3_AP 3
-+/* These are our own inventions. Sending these to firmware
-+** makes it stop emitting beacons, which is exactly what we want
-+** for these modes */
-+#define ACX_MODE_MONITOR 0xfe
-+#define ACX_MODE_OFF 0xff
-+/* 'Submode': identifies exact status of ADHOC/STA host */
-+#define ACX_STATUS_0_STOPPED 0
-+#define ACX_STATUS_1_SCANNING 1
-+#define ACX_STATUS_2_WAIT_AUTH 2
-+#define ACX_STATUS_3_AUTHENTICATED 3
-+#define ACX_STATUS_4_ASSOCIATED 4
-+
-+/* FIXME: this should be named something like struct acx_priv (typedef'd to
-+ * acx_priv_t) */
-+
-+/* non-firmware struct, no packing necessary */
-+struct acx_device {
-+ /* most frequent accesses first (dereferencing and cache line!) */
-+
-+ /*** Locking ***/
-+ /* FIXME: try to convert semaphore to more efficient mutex according
-+ to Ingo Molnar's docs (but not before driver is in mainline or
-+ pre-mutex Linux 2.6.10 is very outdated). */
-+ struct semaphore sem;
-+ spinlock_t lock;
-+#if defined(PARANOID_LOCKING) /* Lock debugging */
-+ const char *last_sem;
-+ const char *last_lock;
-+ unsigned long sem_time;
-+ unsigned long lock_time;
-+#endif
-+#ifdef ACX_MEM
-+ spinlock_t txbuf_lock;
-+#endif
-+
-+ /*** Linux network device ***/
-+ struct net_device *ndev; /* pointer to linux netdevice */
-+
-+ /*** Device statistics ***/
-+ struct net_device_stats stats; /* net device statistics */
-+#ifdef WIRELESS_EXT
-+ struct iw_statistics wstats; /* wireless statistics */
-+#endif
-+ /*** Power managment ***/
-+ struct pm_dev *pm; /* PM crap */
-+
-+ /*** Management timer ***/
-+ struct timer_list mgmt_timer;
-+
-+ /*** Hardware identification ***/
-+ const char *chip_name;
-+ u8 dev_type;
-+ u8 chip_type;
-+ u8 form_factor;
-+ u8 radio_type;
-+ u8 eeprom_version;
-+
-+ /*** Config retrieved from EEPROM ***/
-+ char cfgopt_NVSv[8];
-+ u16 cfgopt_NVS_vendor_offs;
-+ u8 cfgopt_MAC[6];
-+ u16 cfgopt_probe_delay;
-+ u32 cfgopt_eof_memory;
-+ u8 cfgopt_dot11CCAModes;
-+ u8 cfgopt_dot11Diversity;
-+ u8 cfgopt_dot11ShortPreambleOption;
-+ u8 cfgopt_dot11PBCCOption;
-+ u8 cfgopt_dot11ChannelAgility;
-+ u8 cfgopt_dot11PhyType;
-+ u8 cfgopt_dot11TempType;
-+ co_antennas_t cfgopt_antennas;
-+ co_powerlevels_t cfgopt_power_levels;
-+ co_datarates_t cfgopt_data_rates;
-+ co_domains_t cfgopt_domains;
-+ co_product_id_t cfgopt_product_id;
-+ co_manuf_t cfgopt_manufacturer;
-+
-+ /*** Firmware identification ***/
-+ char firmware_version[FW_ID_SIZE+1];
-+ u32 firmware_numver;
-+ u32 firmware_id;
-+ const u16 *ie_len;
-+ const u16 *ie_len_dot11;
-+
-+ /*** Device state ***/
-+ u16 dev_state_mask;
-+ u8 led_power; /* power LED status */
-+ u32 get_mask; /* mask of settings to fetch from the card */
-+ u32 set_mask; /* mask of settings to write to the card */
-+
-+ /* Barely used in USB case */
-+ u16 irq_status;
-+
-+ u8 after_interrupt_jobs; /* mini job list for doing actions after an interrupt occurred */
-+ WORK_STRUCT after_interrupt_task; /* our task for after interrupt actions */
-+
-+ /*** scanning ***/
-+ u16 scan_count; /* number of times to do channel scan */
-+ u8 scan_mode; /* 0 == active, 1 == passive, 2 == background */
-+ u8 scan_rate;
-+ u16 scan_duration;
-+ u16 scan_probe_delay;
-+#if WIRELESS_EXT > 15
-+ struct iw_spy_data spy_data; /* FIXME: needs to be implemented! */
-+#endif
-+
-+ /*** Wireless network settings ***/
-+ /* copy of the device address (ifconfig hw ether) that we actually use
-+ ** for 802.11; copied over from the network device's MAC address
-+ ** (ifconfig) when it makes sense only */
-+ u8 dev_addr[MAX_ADDR_LEN];
-+ u8 bssid[ETH_ALEN]; /* the BSSID after having joined */
-+ u8 ap[ETH_ALEN]; /* The AP we want, FF:FF:FF:FF:FF:FF is any */
-+ u16 aid; /* The Association ID sent from the AP / last used AID if we're an AP */
-+ u16 mode; /* mode from iwconfig */
-+ int monitor_type; /* ARPHRD_IEEE80211 or ARPHRD_IEEE80211_PRISM */
-+ u16 status; /* 802.11 association status */
-+ u8 essid_active; /* specific ESSID active, or select any? */
-+ u8 essid_len; /* to avoid dozens of strlen() */
-+ /* INCLUDES \0 termination for easy printf - but many places
-+ ** simply want the string data memcpy'd plus a length indicator!
-+ ** Keep that in mind... */
-+ char essid[IW_ESSID_MAX_SIZE+1];
-+ /* essid we are going to use for association, in case of "essid 'any'"
-+ ** and in case of hidden ESSID (use configured ESSID then) */
-+ char essid_for_assoc[IW_ESSID_MAX_SIZE+1];
-+ char nick[IW_ESSID_MAX_SIZE+1]; /* see essid! */
-+ u8 channel;
-+ u8 reg_dom_id; /* reg domain setting */
-+ u16 reg_dom_chanmask;
-+ u16 auth_or_assoc_retries;
-+ u16 scan_retries;
-+ unsigned long scan_start; /* YES, jiffies is defined as "unsigned long" */
-+
-+ /* stations known to us (if we're an ap) */
-+ client_t sta_list[32]; /* tab is larger than list, so that */
-+ client_t *sta_hash_tab[64]; /* hash collisions are not likely */
-+ client_t *ap_client; /* this one is our AP (STA mode only) */
-+
-+ int dup_count;
-+ int nondup_count;
-+ unsigned long dup_msg_expiry;
-+ u16 last_seq_ctrl; /* duplicate packet detection */
-+
-+ /* 802.11 power save mode */
-+ u8 ps_wakeup_cfg;
-+ u8 ps_listen_interval;
-+ u8 ps_options;
-+ u8 ps_hangover_period;
-+ u32 ps_enhanced_transition_time;
-+ u32 ps_beacon_rx_time;
-+
-+ /*** PHY settings ***/
-+ u8 fallback_threshold;
-+ u8 stepup_threshold;
-+ u16 rate_basic;
-+ u16 rate_oper;
-+ u16 rate_bcast;
-+ u16 rate_bcast100;
-+ u8 rate_auto; /* false if "iwconfig rate N" (WITHOUT 'auto'!) */
-+ u8 preamble_mode; /* 0 == Long Preamble, 1 == Short, 2 == Auto */
-+ u8 preamble_cur;
-+
-+ u8 tx_disabled;
-+ u8 tx_level_dbm;
-+ /* u8 tx_level_val; */
-+ /* u8 tx_level_auto; whether to do automatic power adjustment */
-+
-+ unsigned long recalib_time_last_success;
-+ unsigned long recalib_time_last_attempt;
-+ int recalib_failure_count;
-+ int recalib_msg_ratelimit;
-+ int retry_errors_msg_ratelimit;
-+
-+ unsigned long brange_time_last_state_change; /* time the power LED was last changed */
-+ u8 brange_last_state; /* last state of the LED */
-+ u8 brange_max_quality; /* maximum quality that equates to full speed */
-+
-+ u8 sensitivity;
-+ u8 antenna; /* antenna settings */
-+ u8 ed_threshold; /* energy detect threshold */
-+ u8 cca; /* clear channel assessment */
-+
-+ u16 rts_threshold;
-+ u16 frag_threshold;
-+ u32 short_retry;
-+ u32 long_retry;
-+ u16 msdu_lifetime;
-+ u16 listen_interval; /* given in units of beacon interval */
-+ u32 beacon_interval;
-+
-+ u16 capabilities;
-+ u8 rate_supported_len;
-+ u8 rate_supported[13];
-+
-+ /*** Encryption settings (WEP) ***/
-+ u32 auth_alg; /* used in transmit_authen1 */
-+ u8 wep_enabled;
-+ u8 wep_restricted;
-+ u8 wep_current_index;
-+ wep_key_t wep_keys[DOT11_MAX_DEFAULT_WEP_KEYS]; /* the default WEP keys */
-+ key_struct_t wep_key_struct[10];
-+
-+ /*** Unknown ***/
-+ u8 dtim_interval;
-+
-+#ifdef ACX_MEM
-+ u32 acx_txbuf_start;
-+ int acx_txbuf_numblocks;
-+ u32 acx_txbuf_free; /* addr of head of free list */
-+ int acx_txbuf_blocks_free; /* how many are still open */
-+ queueindicator_t *acx_queue_indicator;
-+#endif
-+
-+ /*** Card Rx/Tx management ***/
-+ u16 rx_config_1;
-+ u16 rx_config_2;
-+ u16 memblocksize;
-+ unsigned int tx_free;
-+ unsigned int tx_head; /* keep as close as possible to Tx stuff below (cache line) */
-+ u16 phy_header_len;
-+
-+/*************************************************************************
-+ *** PCI/USB/... must be last or else hw agnostic code breaks horribly ***
-+ *************************************************************************/
-+
-+ /* hack to let common code compile. FIXME */
-+ dma_addr_t rxhostdesc_startphy;
-+
-+ /*** PCI stuff ***/
-+#if defined(ACX_PCI) || defined(ACX_MEM)
-+ /* pointers to tx buffers, tx host descriptors (in host memory)
-+ ** and tx descs in device memory */
-+ unsigned int tx_tail;
-+ u8 *txbuf_start;
-+ txhostdesc_t *txhostdesc_start;
-+ txdesc_t *txdesc_start; /* points to PCI-mapped memory */
-+ dma_addr_t txbuf_startphy;
-+ dma_addr_t txhostdesc_startphy;
-+ /* sizes of above host memory areas */
-+ unsigned int txbuf_area_size;
-+ unsigned int txhostdesc_area_size;
-+
-+ unsigned int txdesc_size; /* size of txdesc; ACX111 = ACX100 + 4 */
-+ client_t *txc[TX_CNT];
-+ u16 txr[TX_CNT];
-+
-+ /* same for rx */
-+ unsigned int rx_tail;
-+ rxbuffer_t *rxbuf_start;
-+ rxhostdesc_t *rxhostdesc_start;
-+ rxdesc_t *rxdesc_start;
-+ /* physical addresses of above host memory areas */
-+ dma_addr_t rxbuf_startphy;
-+ /* dma_addr_t rxhostdesc_startphy; */
-+ unsigned int rxbuf_area_size;
-+ unsigned int rxhostdesc_area_size;
-+
-+ u8 need_radio_fw;
-+ u8 irqs_active; /* whether irq sending is activated */
-+
-+ const u16 *io; /* points to ACX100 or ACX111 PCI I/O register address set */
-+
-+#ifdef ACX_PCI
-+ struct pci_dev *pdev;
-+#endif
-+#ifdef ACX_MEM
-+ struct device *dev;
-+#endif
-+
-+#ifdef ACX_PCI
-+ unsigned long membase;
-+#endif
-+#ifdef ACX_MEM
-+ volatile u32 *membase;
-+#endif
-+ unsigned long membase2;
-+#ifdef ACX_PCI
-+ void __iomem *iobase;
-+#endif
-+#ifdef ACX_MEM
-+ volatile u32 *iobase;
-+#endif
-+ void __iomem *iobase2;
-+ /* command interface */
-+ u8 __iomem *cmd_area;
-+ u8 __iomem *info_area;
-+
-+ u16 irq_mask; /* interrupt types to mask out (not wanted) with many IRQs activated */
-+ u16 irq_mask_off; /* interrupt types to mask out (not wanted) with IRQs off */
-+ unsigned int irq_loops_this_jiffy;
-+ unsigned long irq_last_jiffies;
-+#endif
-+
-+ /*** USB stuff ***/
-+#ifdef ACX_USB
-+ struct usb_device *usbdev;
-+
-+ rxbuffer_t rxtruncbuf;
-+
-+ usb_tx_t *usb_tx;
-+ usb_rx_t *usb_rx;
-+
-+ int bulkinep; /* bulk-in endpoint */
-+ int bulkoutep; /* bulk-out endpoint */
-+ int rxtruncsize;
-+#endif
-+
-+};
-+
-+static inline acx_device_t*
-+ndev2adev(struct net_device *ndev)
-+{
-+ return netdev_priv(ndev);
-+}
-+
-+
-+/* For use with ACX1xx_IE_RXCONFIG */
-+/* bit description
-+ * 13 include additional header (length etc.) *required*
-+ * struct is defined in 'struct rxbuffer'
-+ * is this bit acx100 only? does acx111 always put the header,
-+ * and bit setting is irrelevant? --vda
-+ * 10 receive frames only with SSID used in last join cmd
-+ * 9 discard broadcast
-+ * 8 receive packets for multicast address 1
-+ * 7 receive packets for multicast address 0
-+ * 6 discard all multicast packets
-+ * 5 discard frames from foreign BSSID
-+ * 4 discard frames with foreign destination MAC address
-+ * 3 promiscuous mode (receive ALL frames, disable filter)
-+ * 2 include FCS
-+ * 1 include phy header
-+ * 0 ???
-+ */
-+#define RX_CFG1_INCLUDE_RXBUF_HDR 0x2000 /* ACX100 only */
-+#define RX_CFG1_FILTER_SSID 0x0400
-+#define RX_CFG1_FILTER_BCAST 0x0200
-+#define RX_CFG1_RCV_MC_ADDR1 0x0100
-+#define RX_CFG1_RCV_MC_ADDR0 0x0080
-+#define RX_CFG1_FILTER_ALL_MULTI 0x0040
-+#define RX_CFG1_FILTER_BSSID 0x0020
-+#define RX_CFG1_FILTER_MAC 0x0010
-+#define RX_CFG1_RCV_PROMISCUOUS 0x0008
-+#define RX_CFG1_INCLUDE_FCS 0x0004
-+#define RX_CFG1_INCLUDE_PHY_HDR (WANT_PHY_HDR ? 0x0002 : 0)
-+/* bit description
-+ * 11 receive association requests etc.
-+ * 10 receive authentication frames
-+ * 9 receive beacon frames
-+ * 8 receive contention free packets
-+ * 7 receive control frames
-+ * 6 receive data frames
-+ * 5 receive broken frames
-+ * 4 receive management frames
-+ * 3 receive probe requests
-+ * 2 receive probe responses
-+ * 1 receive RTS/CTS/ACK frames
-+ * 0 receive other
-+ */
-+#define RX_CFG2_RCV_ASSOC_REQ 0x0800
-+#define RX_CFG2_RCV_AUTH_FRAMES 0x0400
-+#define RX_CFG2_RCV_BEACON_FRAMES 0x0200
-+#define RX_CFG2_RCV_CONTENTION_FREE 0x0100
-+#define RX_CFG2_RCV_CTRL_FRAMES 0x0080
-+#define RX_CFG2_RCV_DATA_FRAMES 0x0040
-+#define RX_CFG2_RCV_BROKEN_FRAMES 0x0020
-+#define RX_CFG2_RCV_MGMT_FRAMES 0x0010
-+#define RX_CFG2_RCV_PROBE_REQ 0x0008
-+#define RX_CFG2_RCV_PROBE_RESP 0x0004
-+#define RX_CFG2_RCV_ACK_FRAMES 0x0002
-+#define RX_CFG2_RCV_OTHER 0x0001
-+
-+/* For use with ACX1xx_IE_FEATURE_CONFIG */
-+#define FEATURE1_80MHZ_CLOCK 0x00000040L
-+#define FEATURE1_4X 0x00000020L
-+#define FEATURE1_LOW_RX 0x00000008L
-+#define FEATURE1_EXTRA_LOW_RX 0x00000001L
-+
-+#define FEATURE2_SNIFFER 0x00000080L
-+#define FEATURE2_NO_TXCRYPT 0x00000001L
-+
-+/*-- get and set mask values --*/
-+#define GETSET_LED_POWER 0x00000001L
-+#define GETSET_STATION_ID 0x00000002L
-+#define SET_TEMPLATES 0x00000004L
-+#define SET_STA_LIST 0x00000008L
-+#define GETSET_TX 0x00000010L
-+#define GETSET_RX 0x00000020L
-+#define SET_RXCONFIG 0x00000040L
-+#define GETSET_ANTENNA 0x00000080L
-+#define GETSET_SENSITIVITY 0x00000100L
-+#define GETSET_TXPOWER 0x00000200L
-+#define GETSET_ED_THRESH 0x00000400L
-+#define GETSET_CCA 0x00000800L
-+#define GETSET_POWER_80211 0x00001000L
-+#define GETSET_RETRY 0x00002000L
-+#define GETSET_REG_DOMAIN 0x00004000L
-+#define GETSET_CHANNEL 0x00008000L
-+/* Used when ESSID changes etc and we need to scan for AP anew */
-+#define GETSET_RESCAN 0x00010000L
-+#define GETSET_MODE 0x00020000L
-+#define GETSET_WEP 0x00040000L
-+#define SET_WEP_OPTIONS 0x00080000L
-+#define SET_MSDU_LIFETIME 0x00100000L
-+#define SET_RATE_FALLBACK 0x00200000L
-+
-+/* keep in sync with the above */
-+#define GETSET_ALL (0 \
-+/* GETSET_LED_POWER */ | 0x00000001L \
-+/* GETSET_STATION_ID */ | 0x00000002L \
-+/* SET_TEMPLATES */ | 0x00000004L \
-+/* SET_STA_LIST */ | 0x00000008L \
-+/* GETSET_TX */ | 0x00000010L \
-+/* GETSET_RX */ | 0x00000020L \
-+/* SET_RXCONFIG */ | 0x00000040L \
-+/* GETSET_ANTENNA */ | 0x00000080L \
-+/* GETSET_SENSITIVITY */| 0x00000100L \
-+/* GETSET_TXPOWER */ | 0x00000200L \
-+/* GETSET_ED_THRESH */ | 0x00000400L \
-+/* GETSET_CCA */ | 0x00000800L \
-+/* GETSET_POWER_80211 */| 0x00001000L \
-+/* GETSET_RETRY */ | 0x00002000L \
-+/* GETSET_REG_DOMAIN */ | 0x00004000L \
-+/* GETSET_CHANNEL */ | 0x00008000L \
-+/* GETSET_RESCAN */ | 0x00010000L \
-+/* GETSET_MODE */ | 0x00020000L \
-+/* GETSET_WEP */ | 0x00040000L \
-+/* SET_WEP_OPTIONS */ | 0x00080000L \
-+/* SET_MSDU_LIFETIME */ | 0x00100000L \
-+/* SET_RATE_FALLBACK */ | 0x00200000L \
-+ )
-+
-+
-+/***********************************************************************
-+** Firmware loading
-+*/
-+#include <linux/firmware.h> /* request_firmware() */
-+#include <linux/pci.h> /* struct pci_device */
-+
-+
-+/***********************************************************************
-+*/
-+typedef struct acx100_ie_memblocksize {
-+ u16 type;
-+ u16 len;
-+ u16 size;
-+} ACX_PACKED acx100_ie_memblocksize_t;
-+
-+typedef struct acx100_ie_queueconfig {
-+ u16 type;
-+ u16 len;
-+ u32 AreaSize;
-+ u32 RxQueueStart;
-+ u8 QueueOptions;
-+ u8 NumTxQueues;
-+ u8 NumRxDesc; /* for USB only */
-+ u8 pad1;
-+ u32 QueueEnd;
-+ u32 HostQueueEnd; /* QueueEnd2 */
-+ u32 TxQueueStart;
-+ u8 TxQueuePri;
-+ u8 NumTxDesc;
-+ u16 pad2;
-+} ACX_PACKED acx100_ie_queueconfig_t;
-+
-+typedef struct acx111_ie_queueconfig {
-+ u16 type;
-+ u16 len;
-+ u32 tx_memory_block_address;
-+ u32 rx_memory_block_address;
-+ u32 rx1_queue_address;
-+ u32 reserved1;
-+ u32 tx1_queue_address;
-+ u8 tx1_attributes;
-+ u16 reserved2;
-+ u8 reserved3;
-+} ACX_PACKED acx111_ie_queueconfig_t;
-+
-+typedef struct acx100_ie_memconfigoption {
-+ u16 type;
-+ u16 len;
-+ u32 DMA_config;
-+ acx_ptr pRxHostDesc;
-+ u32 rx_mem;
-+ u32 tx_mem;
-+ u16 RxBlockNum;
-+ u16 TxBlockNum;
-+} ACX_PACKED acx100_ie_memconfigoption_t;
-+
-+typedef struct acx111_ie_memoryconfig {
-+ u16 type;
-+ u16 len;
-+ u16 no_of_stations;
-+ u16 memory_block_size;
-+ u8 tx_rx_memory_block_allocation;
-+ u8 count_rx_queues;
-+ u8 count_tx_queues;
-+ u8 options;
-+ u8 fragmentation;
-+ u16 reserved1;
-+ u8 reserved2;
-+
-+ /* start of rx1 block */
-+ u8 rx_queue1_count_descs;
-+ u8 rx_queue1_reserved1;
-+ u8 rx_queue1_type; /* must be set to 7 */
-+ u8 rx_queue1_prio; /* must be set to 0 */
-+ acx_ptr rx_queue1_host_rx_start;
-+ /* end of rx1 block */
-+
-+ /* start of tx1 block */
-+ u8 tx_queue1_count_descs;
-+ u8 tx_queue1_reserved1;
-+ u8 tx_queue1_reserved2;
-+ u8 tx_queue1_attributes;
-+ /* end of tx1 block */
-+} ACX_PACKED acx111_ie_memoryconfig_t;
-+
-+typedef struct acx_ie_memmap {
-+ u16 type;
-+ u16 len;
-+ u32 CodeStart;
-+ u32 CodeEnd;
-+ u32 WEPCacheStart;
-+ u32 WEPCacheEnd;
-+ u32 PacketTemplateStart;
-+ u32 PacketTemplateEnd;
-+ u32 QueueStart;
-+ u32 QueueEnd;
-+ u32 PoolStart;
-+ u32 PoolEnd;
-+} ACX_PACKED acx_ie_memmap_t;
-+
-+typedef struct acx111_ie_feature_config {
-+ u16 type;
-+ u16 len;
-+ u32 feature_options;
-+ u32 data_flow_options;
-+} ACX_PACKED acx111_ie_feature_config_t;
-+
-+typedef struct acx111_ie_tx_level {
-+ u16 type;
-+ u16 len;
-+ u8 level;
-+} ACX_PACKED acx111_ie_tx_level_t;
-+
-+#define PS_CFG_ENABLE 0x80
-+#define PS_CFG_PENDING 0x40 /* status flag when entering PS */
-+#define PS_CFG_WAKEUP_MODE_MASK 0x07
-+#define PS_CFG_WAKEUP_BY_HOST 0x03
-+#define PS_CFG_WAKEUP_EACH_ITVL 0x02
-+#define PS_CFG_WAKEUP_ON_DTIM 0x01
-+#define PS_CFG_WAKEUP_ALL_BEAC 0x00
-+
-+/* Enhanced PS mode: sleep until Rx Beacon w/ the STA's AID bit set
-+** in the TIM; newer firmwares only(?) */
-+#define PS_OPT_ENA_ENHANCED_PS 0x04
-+#define PS_OPT_TX_PSPOLL 0x02 /* send PSPoll frame to fetch waiting frames from AP (on frame with matching AID) */
-+#define PS_OPT_STILL_RCV_BCASTS 0x01
-+
-+typedef struct acx100_ie_powersave {
-+ u16 type;
-+ u16 len;
-+ u8 wakeup_cfg;
-+ u8 listen_interval; /* for EACH_ITVL: wake up every "beacon units" interval */
-+ u8 options;
-+ u8 hangover_period; /* remaining wake time after Tx MPDU w/ PS bit, in values of 1/1024 seconds */
-+ u16 enhanced_ps_transition_time; /* rem. wake time for Enh. PS */
-+} ACX_PACKED acx100_ie_powersave_t;
-+
-+typedef struct acx111_ie_powersave {
-+ u16 type;
-+ u16 len;
-+ u8 wakeup_cfg;
-+ u8 listen_interval; /* for EACH_ITVL: wake up every "beacon units" interval */
-+ u8 options;
-+ u8 hangover_period; /* remaining wake time after Tx MPDU w/ PS bit, in values of 1/1024 seconds */
-+ u32 beacon_rx_time;
-+ u32 enhanced_ps_transition_time; /* rem. wake time for Enh. PS */
-+} ACX_PACKED acx111_ie_powersave_t;
-+
-+
-+/***********************************************************************
-+** Commands and template structures
-+*/
-+
-+/*
-+** SCAN command structure
-+**
-+** even though acx100 scan rates match RATE100 constants,
-+** acx111 ones do not match! Therefore we do not use RATE100 #defines */
-+#define ACX_SCAN_RATE_1 10
-+#define ACX_SCAN_RATE_2 20
-+#define ACX_SCAN_RATE_5 55
-+#define ACX_SCAN_RATE_11 110
-+#define ACX_SCAN_RATE_22 220
-+#define ACX_SCAN_RATE_PBCC 0x80 /* OR with this if needed */
-+#define ACX_SCAN_OPT_ACTIVE 0x00 /* a bit mask */
-+#define ACX_SCAN_OPT_PASSIVE 0x01
-+/* Background scan: we go into Power Save mode (by transmitting
-+** NULL data frame to AP with the power mgmt bit set), do the scan,
-+** and then exit Power Save mode. A plus is that AP buffers frames
-+** for us while we do background scan. Thus we avoid frame losses.
-+** Background scan can be active or passive, just like normal one */
-+#define ACX_SCAN_OPT_BACKGROUND 0x02
-+typedef struct acx100_scan {
-+ u16 count; /* number of scans to do, 0xffff == continuous */
-+ u16 start_chan;
-+ u16 flags; /* channel list mask; 0x8000 == all channels? */
-+ u8 max_rate; /* max. probe rate */
-+ u8 options; /* bit mask, see defines above */
-+ u16 chan_duration;
-+ u16 max_probe_delay;
-+} ACX_PACKED acx100_scan_t; /* length 0xc */
-+
-+#define ACX111_SCAN_RATE_6 0x0B
-+#define ACX111_SCAN_RATE_9 0x0F
-+#define ACX111_SCAN_RATE_12 0x0A
-+#define ACX111_SCAN_RATE_18 0x0E
-+#define ACX111_SCAN_RATE_24 0x09
-+#define ACX111_SCAN_RATE_36 0x0D
-+#define ACX111_SCAN_RATE_48 0x08
-+#define ACX111_SCAN_RATE_54 0x0C
-+#define ACX111_SCAN_OPT_5GHZ 0x04 /* else 2.4GHZ */
-+#define ACX111_SCAN_MOD_SHORTPRE 0x01 /* you can combine SHORTPRE and PBCC */
-+#define ACX111_SCAN_MOD_PBCC 0x80
-+#define ACX111_SCAN_MOD_OFDM 0x40
-+typedef struct acx111_scan {
-+ u16 count; /* number of scans to do */
-+ u8 channel_list_select; /* 0: scan all channels, 1: from chan_list only */
-+ u16 reserved1;
-+ u8 reserved2;
-+ u8 rate; /* rate for probe requests (if active scan) */
-+ u8 options; /* bit mask, see defines above */
-+ u16 chan_duration; /* min time to wait for reply on one channel (in TU) */
-+ /* (active scan only) (802.11 section 11.1.3.2.2) */
-+ u16 max_probe_delay; /* max time to wait for reply on one channel (active scan) */
-+ /* time to listen on a channel (passive scan) */
-+ u8 modulation;
-+ u8 channel_list[26]; /* bits 7:0 first byte: channels 8:1 */
-+ /* bits 7:0 second byte: channels 16:9 */
-+ /* 26 bytes is enough to cover 802.11a */
-+} ACX_PACKED acx111_scan_t;
-+
-+
-+/*
-+** Radio calibration command structure
-+*/
-+typedef struct acx111_cmd_radiocalib {
-+/* 0x80000000 == automatic calibration by firmware, according to interval;
-+ * bits 0..3: select calibration methods to go through:
-+ * calib based on DC, AfeDC, Tx mismatch, Tx equilization */
-+ u32 methods;
-+ u32 interval;
-+} ACX_PACKED acx111_cmd_radiocalib_t;
-+
-+
-+/*
-+** Packet template structures
-+**
-+** Packet templates store contents of Beacon, Probe response, Probe request,
-+** Null data frame, and TIM data frame. Firmware automatically transmits
-+** contents of template at appropriate time:
-+** - Beacon: when configured as AP or Ad-hoc
-+** - Probe response: when configured as AP or Ad-hoc, whenever
-+** a Probe request frame is received
-+** - Probe request: when host issues SCAN command (active)
-+** - Null data frame: when entering 802.11 power save mode
-+** - TIM data: at the end of Beacon frames (if no TIM template
-+** is configured, then transmits default TIM)
-+** NB:
-+** - size field must be set to size of actual template
-+** (NOT sizeof(struct) - templates are variable in length),
-+** size field is not itself counted.
-+** - members flagged with an asterisk must be initialized with host,
-+** rest must be zero filled.
-+** - variable length fields shown only in comments */
-+typedef struct acx_template_tim {
-+ u16 size;
-+ u8 tim_eid; /* 00 1 TIM IE ID * */
-+ u8 len; /* 01 1 Length * */
-+ u8 dtim_cnt; /* 02 1 DTIM Count */
-+ u8 dtim_period; /* 03 1 DTIM Period */
-+ u8 bitmap_ctrl; /* 04 1 Bitmap Control * (except bit0) */
-+ /* 05 n Partial Virtual Bitmap * */
-+ u8 variable[0x100 - 1-1-1-1-1];
-+} ACX_PACKED acx_template_tim_t;
-+
-+typedef struct acx_template_probereq {
-+ u16 size;
-+ u16 fc; /* 00 2 fc * */
-+ u16 dur; /* 02 2 Duration */
-+ u8 da[6]; /* 04 6 Destination Address * */
-+ u8 sa[6]; /* 0A 6 Source Address * */
-+ u8 bssid[6]; /* 10 6 BSSID * */
-+ u16 seq; /* 16 2 Sequence Control */
-+ /* 18 n SSID * */
-+ /* nn n Supported Rates * */
-+ u8 variable[0x44 - 2-2-6-6-6-2];
-+} ACX_PACKED acx_template_probereq_t;
-+
-+typedef struct acx_template_proberesp {
-+ u16 size;
-+ u16 fc; /* 00 2 fc * (bits [15:12] and [10:8] per 802.11 section 7.1.3.1) */
-+ u16 dur; /* 02 2 Duration */
-+ u8 da[6]; /* 04 6 Destination Address */
-+ u8 sa[6]; /* 0A 6 Source Address */
-+ u8 bssid[6]; /* 10 6 BSSID */
-+ u16 seq; /* 16 2 Sequence Control */
-+ u8 timestamp[8];/* 18 8 Timestamp */
-+ u16 beacon_interval; /* 20 2 Beacon Interval * */
-+ u16 cap; /* 22 2 Capability Information * */
-+ /* 24 n SSID * */
-+ /* nn n Supported Rates * */
-+ /* nn 1 DS Parameter Set * */
-+ u8 variable[0x54 - 2-2-6-6-6-2-8-2-2];
-+} ACX_PACKED acx_template_proberesp_t;
-+#define acx_template_beacon_t acx_template_proberesp_t
-+#define acx_template_beacon acx_template_proberesp
-+
-+typedef struct acx_template_nullframe {
-+ u16 size;
-+ struct wlan_hdr_a3 hdr;
-+} ACX_PACKED acx_template_nullframe_t;
-+
-+
-+/*
-+** JOIN command structure
-+**
-+** as opposed to acx100, acx111 dtim interval is AFTER rates_basic111.
-+** NOTE: took me about an hour to get !@#$%^& packing right --> struct packing is eeeeevil... */
-+typedef struct acx_joinbss {
-+ u8 bssid[ETH_ALEN];
-+ u16 beacon_interval;
-+ union {
-+ struct {
-+ u8 dtim_interval;
-+ u8 rates_basic;
-+ u8 rates_supported;
-+ /*
-+ * ARM compiler doesn't pack correctly unless unions
-+ * inside structures are multiples of 4 bytes. Ugh.
-+ */
-+ u8 genfrm_txrate; /* generated frame (bcn, proberesp, RTS, PSpoll) tx rate */
-+ } ACX_PACKED acx100;
-+ struct {
-+ u16 rates_basic;
-+ u8 dtim_interval;
-+ u8 genfrm_txrate; /* generated frame (bcn, proberesp, RTS, PSpoll) tx rate */
-+ } ACX_PACKED acx111;
-+ /*
-+ * ARM compiler doesn't pack correctly unles unions are aligned on
-+ * 4 byte boundaries and are multiples of 4 bytes.
-+ */
-+ struct {
-+ u8 d1;
-+ u8 d2;
-+ u8 d3;
-+ u8 genfrm_txrate;
-+ } ACX_PACKED txrate;
-+ } ACX_PACKED u;
-+ u8 genfrm_mod_pre; /* generated frame modulation/preamble:
-+ ** bit7: PBCC, bit6: OFDM (else CCK/DQPSK/DBPSK)
-+ ** bit5: short pre */
-+ u8 macmode; /* BSS Type, must be one of ACX_MODE_xxx */
-+ u8 channel;
-+ u8 essid_len;
-+ char essid[IW_ESSID_MAX_SIZE];
-+} ACX_PACKED acx_joinbss_t;
-+
-+#define JOINBSS_RATES_1 0x01
-+#define JOINBSS_RATES_2 0x02
-+#define JOINBSS_RATES_5 0x04
-+#define JOINBSS_RATES_11 0x08
-+#define JOINBSS_RATES_22 0x10
-+
-+/* Looks like missing bits are used to indicate 11g rates!
-+** (it follows from the fact that constants below match 1:1 to RATE111_nn)
-+** This was actually seen! Look at that Assoc Request sent by acx111,
-+** it _does_ contain 11g rates in basic set:
-+01:30:20.070772 Beacon (xxx) [1.0* 2.0* 5.5* 11.0* 6.0* 9.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit] ESS CH: 1
-+01:30:20.074425 Authentication (Open System)-1: Succesful
-+01:30:20.076539 Authentication (Open System)-2:
-+01:30:20.076620 Acknowledgment
-+01:30:20.088546 Assoc Request (xxx) [1.0* 2.0* 5.5* 6.0* 9.0* 11.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit]
-+01:30:20.122413 Assoc Response AID(1) :: Succesful
-+01:30:20.122679 Acknowledgment
-+01:30:20.173204 Beacon (xxx) [1.0* 2.0* 5.5* 11.0* 6.0* 9.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit] ESS CH: 1
-+*/
-+#define JOINBSS_RATES_BASIC111_1 0x0001
-+#define JOINBSS_RATES_BASIC111_2 0x0002
-+#define JOINBSS_RATES_BASIC111_5 0x0004
-+#define JOINBSS_RATES_BASIC111_11 0x0020
-+#define JOINBSS_RATES_BASIC111_22 0x0100
-+
-+
-+/***********************************************************************
-+*/
-+typedef struct mem_read_write {
-+ u16 addr;
-+ u16 type; /* 0x0 int. RAM / 0xffff MAC reg. / 0x81 PHY RAM / 0x82 PHY reg.; or maybe it's actually 0x30 for MAC? Better verify it by writing and reading back and checking whether the value holds! */
-+ u32 len;
-+ u32 data;
-+} ACX_PACKED mem_read_write_t;
-+
-+typedef struct firmware_image {
-+ u32 chksum;
-+ u32 size;
-+ u8 data[1]; /* the byte array of the actual firmware... */
-+} ACX_PACKED firmware_image_t;
-+
-+typedef struct acx_cmd_radioinit {
-+ u32 offset;
-+ u32 len;
-+} ACX_PACKED acx_cmd_radioinit_t;
-+
-+typedef struct acx100_ie_wep_options {
-+ u16 type;
-+ u16 len;
-+ u16 NumKeys; /* max # of keys */
-+ u8 WEPOption; /* 0 == decrypt default key only, 1 == override decrypt */
-+ u8 Pad; /* used only for acx111 */
-+} ACX_PACKED acx100_ie_wep_options_t;
-+
-+typedef struct ie_dot11WEPDefaultKey {
-+ u16 type;
-+ u16 len;
-+ u8 action;
-+ u8 keySize;
-+ u8 defaultKeyNum;
-+ u8 key[29]; /* check this! was Key[19] */
-+} ACX_PACKED ie_dot11WEPDefaultKey_t;
-+
-+typedef struct acx111WEPDefaultKey {
-+ u8 MacAddr[ETH_ALEN];
-+ u16 action; /* NOTE: this is a u16, NOT a u8!! */
-+ u16 reserved;
-+ u8 keySize;
-+ u8 type;
-+ u8 index;
-+ u8 defaultKeyNum;
-+ u8 counter[6];
-+ u8 key[32]; /* up to 32 bytes (for TKIP!) */
-+} ACX_PACKED acx111WEPDefaultKey_t;
-+
-+typedef struct ie_dot11WEPDefaultKeyID {
-+ u16 type;
-+ u16 len;
-+ u8 KeyID;
-+} ACX_PACKED ie_dot11WEPDefaultKeyID_t;
-+
-+typedef struct acx100_cmd_wep_mgmt {
-+ u8 MacAddr[ETH_ALEN];
-+ u16 Action;
-+ u16 KeySize;
-+ u8 Key[29]; /* 29*8 == 232bits == WEP256 */
-+} ACX_PACKED acx100_cmd_wep_mgmt_t;
-+
-+typedef struct acx_ie_generic {
-+ u16 type;
-+ u16 len;
-+ union {
-+ /* Association ID IE: just a 16bit value: */
-+ u16 aid;
-+ /* generic member for quick implementation of commands */
-+ u8 bytes[32];
-+ } ACX_PACKED m;
-+} ACX_PACKED acx_ie_generic_t;
-+
-+/***********************************************************************
-+*/
-+#define CHECK_SIZEOF(type,size) { \
-+ extern void BUG_bad_size_for_##type(void); \
-+ if (sizeof(type)!=(size)) BUG_bad_size_for_##type(); \
-+}
-+
-+static inline void
-+acx_struct_size_check(void)
-+{
-+ CHECK_SIZEOF(txdesc_t, 0x30);
-+ CHECK_SIZEOF(acx100_ie_memconfigoption_t, 24);
-+ CHECK_SIZEOF(acx100_ie_queueconfig_t, 0x20);
-+ CHECK_SIZEOF(acx_joinbss_t, 0x30);
-+ /* IEs need 4 bytes for (type,len) tuple */
-+ CHECK_SIZEOF(acx111_ie_configoption_t, ACX111_IE_CONFIG_OPTIONS_LEN + 4);
-+}
-+
-+
-+/***********************************************************************
-+** Global data
-+*/
-+extern const u8 acx_bitpos2ratebyte[];
-+extern const u8 acx_bitpos2rate100[];
-+
-+extern const u8 acx_reg_domain_ids[];
-+extern const char * const acx_reg_domain_strings[];
-+enum {
-+ acx_reg_domain_ids_len = 8
-+};
-+
-+extern const struct iw_handler_def acx_ioctl_handler_def;
-Index: linux-2.6.22/drivers/net/wireless/acx/common.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/common.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,7388 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/types.h>
-+#include <linux/slab.h>
-+#include <linux/delay.h>
-+#include <linux/proc_fs.h>
-+#include <linux/if_arp.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/wireless.h>
-+#include <linux/pm.h>
-+#include <linux/vmalloc.h>
-+#include <net/iw_handler.h>
-+
-+#include "acx_hw.h"
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+*/
-+static client_t *acx_l_sta_list_alloc(acx_device_t *adev);
-+static client_t *acx_l_sta_list_get_from_hash(acx_device_t *adev, const u8 *address);
-+
-+static int acx_l_process_data_frame_master(acx_device_t *adev, rxbuffer_t *rxbuf);
-+static int acx_l_process_data_frame_client(acx_device_t *adev, rxbuffer_t *rxbuf);
-+/* static int acx_l_process_NULL_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala); */
-+static int acx_l_process_mgmt_frame(acx_device_t *adev, rxbuffer_t *rxbuf);
-+static void acx_l_process_disassoc_from_sta(acx_device_t *adev, const wlan_fr_disassoc_t *req);
-+static void acx_l_process_disassoc_from_ap(acx_device_t *adev, const wlan_fr_disassoc_t *req);
-+static void acx_l_process_deauth_from_sta(acx_device_t *adev, const wlan_fr_deauthen_t *req);
-+static void acx_l_process_deauth_from_ap(acx_device_t *adev, const wlan_fr_deauthen_t *req);
-+static int acx_l_process_probe_response(acx_device_t *adev, wlan_fr_proberesp_t *req, const rxbuffer_t *rxbuf);
-+static int acx_l_process_assocresp(acx_device_t *adev, const wlan_fr_assocresp_t *req);
-+static int acx_l_process_reassocresp(acx_device_t *adev, const wlan_fr_reassocresp_t *req);
-+static int acx_l_process_authen(acx_device_t *adev, const wlan_fr_authen_t *req);
-+static int acx_l_transmit_assocresp(acx_device_t *adev, const wlan_fr_assocreq_t *req);
-+static int acx_l_transmit_reassocresp(acx_device_t *adev, const wlan_fr_reassocreq_t *req);
-+static int acx_l_transmit_deauthen(acx_device_t *adev, const u8 *addr, u16 reason);
-+static int acx_l_transmit_authen1(acx_device_t *adev);
-+static int acx_l_transmit_authen2(acx_device_t *adev, const wlan_fr_authen_t *req, client_t *clt);
-+static int acx_l_transmit_authen3(acx_device_t *adev, const wlan_fr_authen_t *req);
-+static int acx_l_transmit_authen4(acx_device_t *adev, const wlan_fr_authen_t *req);
-+static int acx_l_transmit_assoc_req(acx_device_t *adev);
-+
-+
-+/***********************************************************************
-+*/
-+#if ACX_DEBUG
-+unsigned int acx_debug /* will add __read_mostly later */ = ACX_DEFAULT_MSG;
-+/* parameter is 'debug', corresponding var is acx_debug */
-+module_param_named(debug, acx_debug, uint, 0);
-+MODULE_PARM_DESC(debug, "Debug level mask (see L_xxx constants)");
-+#endif
-+
-+#ifdef MODULE_LICENSE
-+MODULE_LICENSE("Dual MPL/GPL");
-+#endif
-+/* USB had this: MODULE_AUTHOR("Martin Wawro <martin.wawro AT uni-dortmund.de>"); */
-+MODULE_AUTHOR("ACX100 Open Source Driver development team");
-+MODULE_DESCRIPTION("Driver for TI ACX1xx based wireless cards (CardBus/PCI/USB)");
-+
-+
-+/***********************************************************************
-+*/
-+/* Probably a number of acx's intermediate buffers for USB transfers,
-+** not to be confused with number of descriptors in tx/rx rings
-+** (which are not directly accessible to host in USB devices) */
-+#define USB_RX_CNT 10
-+#define USB_TX_CNT 10
-+
-+
-+/***********************************************************************
-+*/
-+
-+/* minutes to wait until next radio recalibration: */
-+#define RECALIB_PAUSE 5
-+
-+/* Please keep acx_reg_domain_ids_len in sync... */
-+const u8 acx_reg_domain_ids[acx_reg_domain_ids_len] =
-+ { 0x10, 0x20, 0x30, 0x31, 0x32, 0x40, 0x41, 0x51 };
-+static const u16 reg_domain_channel_masks[acx_reg_domain_ids_len] =
-+#ifdef ACX_ALLOW_ALLCHANNELS
-+ { 0x3fff, 0x07ff, 0x1fff, 0x0600, 0x1e00, 0x2000, 0x3fff, 0x01fc };
-+#else
-+ { 0x07ff, 0x07ff, 0x1fff, 0x0600, 0x1e00, 0x2000, 0x3fff, 0x01fc };
-+#endif
-+const char * const
-+acx_reg_domain_strings[] = {
-+ /* 0 */ " 1-11 FCC (USA)",
-+ /* 1 */ " 1-11 DOC/IC (Canada)",
-+/* BTW: WLAN use in ETSI is regulated by ETSI standard EN 300 328-2 V1.1.2 */
-+ /* 2 */ " 1-13 ETSI (Europe)",
-+ /* 3 */ "10-11 Spain",
-+ /* 4 */ "10-13 France",
-+ /* 5 */ " 14 MKK (Japan)",
-+ /* 6 */ " 1-14 MKK1",
-+ /* 7 */ " 3-9 Israel (not all firmware versions)",
-+ NULL /* needs to remain as last entry */
-+};
-+
-+
-+
-+/***********************************************************************
-+** Debugging support
-+*/
-+#ifdef PARANOID_LOCKING
-+static unsigned max_lock_time;
-+static unsigned max_sem_time;
-+
-+void
-+acx_lock_unhold() { max_lock_time = 0; }
-+void
-+acx_sem_unhold() { max_sem_time = 0; }
-+
-+static inline const char*
-+sanitize_str(const char *s)
-+{
-+ const char* t = strrchr(s, '/');
-+ if (t) return t + 1;
-+ return s;
-+}
-+
-+void
-+acx_lock_debug(acx_device_t *adev, const char* where)
-+{
-+ unsigned int count = 100*1000*1000;
-+ where = sanitize_str(where);
-+ while (--count) {
-+ if (!spin_is_locked(&adev->lock)) break;
-+ cpu_relax();
-+ }
-+ if (!count) {
-+ printk(KERN_EMERG "LOCKUP: already taken at %s!\n", adev->last_lock);
-+ BUG();
-+ }
-+ adev->last_lock = where;
-+ rdtscl(adev->lock_time);
-+}
-+void
-+acx_unlock_debug(acx_device_t *adev, const char* where)
-+{
-+#ifdef SMP
-+ if (!spin_is_locked(&adev->lock)) {
-+ where = sanitize_str(where);
-+ printk(KERN_EMERG "STRAY UNLOCK at %s!\n", where);
-+ BUG();
-+ }
-+#endif
-+ if (acx_debug & L_LOCK) {
-+ unsigned long diff;
-+ rdtscl(diff);
-+ diff -= adev->lock_time;
-+ if (diff > max_lock_time) {
-+ where = sanitize_str(where);
-+ printk("max lock hold time %ld CPU ticks from %s "
-+ "to %s\n", diff, adev->last_lock, where);
-+ max_lock_time = diff;
-+ }
-+ }
-+}
-+void
-+acx_down_debug(acx_device_t *adev, const char* where)
-+{
-+ int sem_count;
-+ unsigned long timeout = jiffies + 5*HZ;
-+
-+ where = sanitize_str(where);
-+
-+ for (;;) {
-+ sem_count = atomic_read(&adev->sem.count);
-+ if (sem_count) break;
-+ if (time_after(jiffies, timeout))
-+ break;
-+ msleep(5);
-+ }
-+ if (!sem_count) {
-+ printk(KERN_EMERG "D STATE at %s! last sem at %s\n",
-+ where, adev->last_sem);
-+ dump_stack();
-+ }
-+ adev->last_sem = where;
-+ adev->sem_time = jiffies;
-+ down(&adev->sem);
-+ if (acx_debug & L_LOCK) {
-+ printk("%s: sem_down %d -> %d\n",
-+ where, sem_count, atomic_read(&adev->sem.count));
-+ }
-+}
-+void
-+acx_up_debug(acx_device_t *adev, const char* where)
-+{
-+ int sem_count = atomic_read(&adev->sem.count);
-+ if (sem_count) {
-+ where = sanitize_str(where);
-+ printk(KERN_EMERG "STRAY UP at %s! sem.count=%d\n", where, sem_count);
-+ dump_stack();
-+ }
-+ if (acx_debug & L_LOCK) {
-+ unsigned long diff = jiffies - adev->sem_time;
-+ if (diff > max_sem_time) {
-+ where = sanitize_str(where);
-+ printk("max sem hold time %ld jiffies from %s "
-+ "to %s\n", diff, adev->last_sem, where);
-+ max_sem_time = diff;
-+ }
-+ }
-+ up(&adev->sem);
-+ if (acx_debug & L_LOCK) {
-+ where = sanitize_str(where);
-+ printk("%s: sem_up %d -> %d\n",
-+ where, sem_count, atomic_read(&adev->sem.count));
-+ }
-+}
-+#endif /* PARANOID_LOCKING */
-+
-+
-+/***********************************************************************
-+*/
-+#if ACX_DEBUG > 1
-+
-+static int acx_debug_func_indent;
-+#define DEBUG_TSC 0
-+#define FUNC_INDENT_INCREMENT 2
-+
-+#if DEBUG_TSC
-+#define TIMESTAMP(d) unsigned long d; rdtscl(d)
-+#else
-+#define TIMESTAMP(d) unsigned long d = jiffies
-+#endif
-+
-+static const char
-+spaces[] = " " " "; /* Nx10 spaces */
-+
-+void
-+log_fn_enter(const char *funcname)
-+{
-+ int indent;
-+ TIMESTAMP(d);
-+
-+ indent = acx_debug_func_indent;
-+ if (indent >= sizeof(spaces))
-+ indent = sizeof(spaces)-1;
-+
-+ printk("%08ld %s==> %s\n",
-+ d % 100000000,
-+ spaces + (sizeof(spaces)-1) - indent,
-+ funcname
-+ );
-+
-+ acx_debug_func_indent += FUNC_INDENT_INCREMENT;
-+}
-+void
-+log_fn_exit(const char *funcname)
-+{
-+ int indent;
-+ TIMESTAMP(d);
-+
-+ acx_debug_func_indent -= FUNC_INDENT_INCREMENT;
-+
-+ indent = acx_debug_func_indent;
-+ if (indent >= sizeof(spaces))
-+ indent = sizeof(spaces)-1;
-+
-+ printk("%08ld %s<== %s\n",
-+ d % 100000000,
-+ spaces + (sizeof(spaces)-1) - indent,
-+ funcname
-+ );
-+}
-+void
-+log_fn_exit_v(const char *funcname, int v)
-+{
-+ int indent;
-+ TIMESTAMP(d);
-+
-+ acx_debug_func_indent -= FUNC_INDENT_INCREMENT;
-+
-+ indent = acx_debug_func_indent;
-+ if (indent >= sizeof(spaces))
-+ indent = sizeof(spaces)-1;
-+
-+ printk("%08ld %s<== %s: %08X\n",
-+ d % 100000000,
-+ spaces + (sizeof(spaces)-1) - indent,
-+ funcname,
-+ v
-+ );
-+}
-+#endif /* ACX_DEBUG > 1 */
-+
-+
-+/***********************************************************************
-+** Basically a msleep with logging
-+*/
-+void
-+acx_s_msleep(int ms)
-+{
-+ FN_ENTER;
-+ msleep(ms);
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** Not inlined: it's larger than it seems
-+*/
-+void
-+acx_print_mac(const char *head, const u8 *mac, const char *tail)
-+{
-+ printk("%s"MACSTR"%s", head, MAC(mac), tail);
-+}
-+
-+
-+/***********************************************************************
-+** acx_get_status_name
-+*/
-+static const char*
-+acx_get_status_name(u16 status)
-+{
-+ static const char * const str[] = {
-+ "STOPPED", "SCANNING", "WAIT_AUTH",
-+ "AUTHENTICATED", "ASSOCIATED", "INVALID??"
-+ };
-+ if (status > VEC_SIZE(str)-1)
-+ status = VEC_SIZE(str)-1;
-+
-+ return str[status];
-+}
-+
-+
-+/***********************************************************************
-+** acx_get_packet_type_string
-+*/
-+#if ACX_DEBUG
-+const char*
-+acx_get_packet_type_string(u16 fc)
-+{
-+ static const char * const mgmt_arr[] = {
-+ "MGMT/AssocReq", "MGMT/AssocResp", "MGMT/ReassocReq",
-+ "MGMT/ReassocResp", "MGMT/ProbeReq", "MGMT/ProbeResp",
-+ "MGMT/UNKNOWN", "MGMT/UNKNOWN", "MGMT/Beacon", "MGMT/ATIM",
-+ "MGMT/Disassoc", "MGMT/Authen", "MGMT/Deauthen"
-+ };
-+ static const char * const ctl_arr[] = {
-+ "CTL/PSPoll", "CTL/RTS", "CTL/CTS", "CTL/Ack", "CTL/CFEnd",
-+ "CTL/CFEndCFAck"
-+ };
-+ static const char * const data_arr[] = {
-+ "DATA/DataOnly", "DATA/Data CFAck", "DATA/Data CFPoll",
-+ "DATA/Data CFAck/CFPoll", "DATA/Null", "DATA/CFAck",
-+ "DATA/CFPoll", "DATA/CFAck/CFPoll"
-+ };
-+ const char *str;
-+ u8 fstype = (WF_FC_FSTYPE & fc) >> 4;
-+ u8 ctl;
-+
-+ switch (WF_FC_FTYPE & fc) {
-+ case WF_FTYPE_MGMT:
-+ if (fstype < VEC_SIZE(mgmt_arr))
-+ str = mgmt_arr[fstype];
-+ else
-+ str = "MGMT/UNKNOWN";
-+ break;
-+ case WF_FTYPE_CTL:
-+ ctl = fstype - 0x0a;
-+ if (ctl < VEC_SIZE(ctl_arr))
-+ str = ctl_arr[ctl];
-+ else
-+ str = "CTL/UNKNOWN";
-+ break;
-+ case WF_FTYPE_DATA:
-+ if (fstype < VEC_SIZE(data_arr))
-+ str = data_arr[fstype];
-+ else
-+ str = "DATA/UNKNOWN";
-+ break;
-+ default:
-+ str = "UNKNOWN";
-+ break;
-+ }
-+ return str;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_wlan_reason_str
-+*/
-+static inline const char*
-+acx_wlan_reason_str(u16 reason)
-+{
-+ static const char* const reason_str[] = {
-+ /* 0 */ "?",
-+ /* 1 */ "unspecified",
-+ /* 2 */ "prev auth is not valid",
-+ /* 3 */ "leaving BBS",
-+ /* 4 */ "due to inactivity",
-+ /* 5 */ "AP is busy",
-+ /* 6 */ "got class 2 frame from non-auth'ed STA",
-+ /* 7 */ "got class 3 frame from non-assoc'ed STA",
-+ /* 8 */ "STA has left BSS",
-+ /* 9 */ "assoc without auth is not allowed",
-+ /* 10 */ "bad power setting (802.11h)",
-+ /* 11 */ "bad channel (802.11i)",
-+ /* 12 */ "?",
-+ /* 13 */ "invalid IE",
-+ /* 14 */ "MIC failure",
-+ /* 15 */ "four-way handshake timeout",
-+ /* 16 */ "group key handshake timeout",
-+ /* 17 */ "IE is different",
-+ /* 18 */ "invalid group cipher",
-+ /* 19 */ "invalid pairwise cipher",
-+ /* 20 */ "invalid AKMP",
-+ /* 21 */ "unsupported RSN version",
-+ /* 22 */ "invalid RSN IE cap",
-+ /* 23 */ "802.1x failed",
-+ /* 24 */ "cipher suite rejected"
-+ };
-+ return reason < VEC_SIZE(reason_str) ? reason_str[reason] : "?";
-+}
-+
-+
-+/***********************************************************************
-+** acx_cmd_status_str
-+*/
-+const char*
-+acx_cmd_status_str(unsigned int state)
-+{
-+ static const char * const cmd_error_strings[] = {
-+ "Idle",
-+ "Success",
-+ "Unknown Command",
-+ "Invalid Information Element",
-+ "Channel rejected",
-+ "Channel invalid in current regulatory domain",
-+ "MAC invalid",
-+ "Command rejected (read-only information element)",
-+ "Command rejected",
-+ "Already asleep",
-+ "TX in progress",
-+ "Already awake",
-+ "Write only",
-+ "RX in progress",
-+ "Invalid parameter",
-+ "Scan in progress",
-+ "Failed"
-+ };
-+ return state < VEC_SIZE(cmd_error_strings) ?
-+ cmd_error_strings[state] : "?";
-+}
-+
-+
-+/***********************************************************************
-+** get_status_string
-+*/
-+static inline const char*
-+get_status_string(unsigned int status)
-+{
-+ /* A bit shortened, but hopefully still understandable */
-+ static const char * const status_str[] = {
-+ /* 0 */ "Successful",
-+ /* 1 */ "Unspecified failure",
-+ /* 2 */ "reserved",
-+ /* 3 */ "reserved",
-+ /* 4 */ "reserved",
-+ /* 5 */ "reserved",
-+ /* 6 */ "reserved",
-+ /* 7 */ "reserved",
-+ /* 8 */ "reserved",
-+ /* 9 */ "reserved",
-+ /*10 */ "Cannot support all requested capabilities in Capability Information field",
-+ /*11 */ "Reassoc denied (reason outside of 802.11b scope)",
-+ /*12 */ "Assoc denied (reason outside of 802.11b scope) -- maybe MAC filtering by peer?",
-+ /*13 */ "Responding station doesnt support specified auth algorithm -- maybe WEP auth Open vs. Restricted?",
-+ /*14 */ "Auth rejected: wrong transaction sequence number",
-+ /*15 */ "Auth rejected: challenge failure",
-+ /*16 */ "Auth rejected: timeout for next frame in sequence",
-+ /*17 */ "Assoc denied: too many STAs on this AP",
-+ /*18 */ "Assoc denied: requesting STA doesnt support all data rates in basic set",
-+ /*19 */ "Assoc denied: requesting STA doesnt support Short Preamble",
-+ /*20 */ "Assoc denied: requesting STA doesnt support PBCC Modulation",
-+ /*21 */ "Assoc denied: requesting STA doesnt support Channel Agility"
-+ /*22 */ "reserved",
-+ /*23 */ "reserved",
-+ /*24 */ "reserved",
-+ /*25 */ "Assoc denied: requesting STA doesnt support Short Slot Time",
-+ /*26 */ "Assoc denied: requesting STA doesnt support DSSS-OFDM"
-+ };
-+
-+ return status_str[status < VEC_SIZE(status_str) ? status : 2];
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void
-+acx_log_bad_eid(wlan_hdr_t* hdr, int len, wlan_ie_t* ie_ptr)
-+{
-+ if (acx_debug & L_ASSOC) {
-+ int offset = (u8*)ie_ptr - (u8*)hdr;
-+ printk("acx: unknown EID %d in mgmt frame at offset %d. IE: ",
-+ ie_ptr->eid, offset);
-+ /* IE len can be bogus, IE can extend past packet end. Oh well... */
-+ acx_dump_bytes(ie_ptr, ie_ptr->len + 2);
-+ if (acx_debug & L_DATA) {
-+ printk("frame (%s): ",
-+ acx_get_packet_type_string(le16_to_cpu(hdr->fc)));
-+ acx_dump_bytes(hdr, len);
-+ }
-+ }
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#if ACX_DEBUG
-+void
-+acx_dump_bytes(const void *data, int num)
-+{
-+ const u8* ptr = (const u8*)data;
-+
-+ if (num <= 0) {
-+ printk("\n");
-+ return;
-+ }
-+
-+ while (num >= 16) {
-+ printk( "%02X %02X %02X %02X %02X %02X %02X %02X "
-+ "%02X %02X %02X %02X %02X %02X %02X %02X\n",
-+ ptr[0], ptr[1], ptr[2], ptr[3],
-+ ptr[4], ptr[5], ptr[6], ptr[7],
-+ ptr[8], ptr[9], ptr[10], ptr[11],
-+ ptr[12], ptr[13], ptr[14], ptr[15]);
-+ num -= 16;
-+ ptr += 16;
-+ }
-+ if (num > 0) {
-+ while (--num > 0)
-+ printk("%02X ", *ptr++);
-+ printk("%02X\n", *ptr);
-+ }
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_s_get_firmware_version
-+*/
-+void
-+acx_s_get_firmware_version(acx_device_t *adev)
-+{
-+ fw_ver_t fw;
-+ u8 hexarr[4] = { 0, 0, 0, 0 };
-+ int hexidx = 0, val = 0;
-+ const char *num;
-+ char c;
-+
-+ FN_ENTER;
-+
-+ memset(fw.fw_id, 'E', FW_ID_SIZE);
-+ acx_s_interrogate(adev, &fw, ACX1xx_IE_FWREV);
-+ memcpy(adev->firmware_version, fw.fw_id, FW_ID_SIZE);
-+ adev->firmware_version[FW_ID_SIZE] = '\0';
-+
-+ log(L_DEBUG, "fw_ver: fw_id='%s' hw_id=%08X\n",
-+ adev->firmware_version, fw.hw_id);
-+
-+ if (strncmp(fw.fw_id, "Rev ", 4) != 0) {
-+ printk("acx: strange firmware version string "
-+ "'%s', please report\n", adev->firmware_version);
-+ adev->firmware_numver = 0x01090407; /* assume 1.9.4.7 */
-+ } else {
-+ num = &fw.fw_id[4];
-+ while (1) {
-+ c = *num++;
-+ if ((c == '.') || (c == '\0')) {
-+ hexarr[hexidx++] = val;
-+ if ((hexidx > 3) || (c == '\0')) /* end? */
-+ break;
-+ val = 0;
-+ continue;
-+ }
-+ if ((c >= '0') && (c <= '9'))
-+ c -= '0';
-+ else
-+ c = c - 'a' + (char)10;
-+ val = val*16 + c;
-+ }
-+
-+ adev->firmware_numver = (u32)(
-+ (hexarr[0] << 24) | (hexarr[1] << 16)
-+ | (hexarr[2] << 8) | hexarr[3]);
-+ log(L_DEBUG, "firmware_numver 0x%08X\n", adev->firmware_numver);
-+ }
-+ if (IS_ACX111(adev)) {
-+ if (adev->firmware_numver == 0x00010011) {
-+ /* This one does not survive floodpinging */
-+ printk("acx: firmware '%s' is known to be buggy, "
-+ "please upgrade\n", adev->firmware_version);
-+ }
-+ }
-+
-+ adev->firmware_id = le32_to_cpu(fw.hw_id);
-+
-+ /* we're able to find out more detailed chip names now */
-+ switch (adev->firmware_id & 0xffff0000) {
-+ case 0x01010000:
-+ case 0x01020000:
-+ adev->chip_name = "TNETW1100A";
-+ break;
-+ case 0x01030000:
-+ adev->chip_name = "TNETW1100B";
-+ break;
-+ case 0x03000000:
-+ case 0x03010000:
-+ adev->chip_name = "TNETW1130";
-+ break;
-+ case 0x04030000: /* 0x04030101 is TNETW1450 */
-+ adev->chip_name = "TNETW1450";
-+ break;
-+ default:
-+ printk("acx: unknown chip ID 0x%08X, "
-+ "please report\n", adev->firmware_id);
-+ break;
-+ }
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_display_hardware_details
-+**
-+** Displays hw/fw version, radio type etc...
-+*/
-+void
-+acx_display_hardware_details(acx_device_t *adev)
-+{
-+ const char *radio_str, *form_str;
-+
-+ FN_ENTER;
-+
-+ switch (adev->radio_type) {
-+ case RADIO_MAXIM_0D:
-+ radio_str = "Maxim";
-+ break;
-+ case RADIO_RFMD_11:
-+ radio_str = "RFMD";
-+ break;
-+ case RADIO_RALINK_15:
-+ radio_str = "Ralink";
-+ break;
-+ case RADIO_RADIA_16:
-+ radio_str = "Radia";
-+ break;
-+ case RADIO_UNKNOWN_17:
-+ /* TI seems to have a radio which is
-+ * additionally 802.11a capable, too */
-+ radio_str = "802.11a/b/g radio?! Please report";
-+ break;
-+ case RADIO_UNKNOWN_19:
-+ radio_str = "A radio used by Safecom cards?! Please report";
-+ break;
-+ case RADIO_UNKNOWN_1B:
-+ radio_str = "An unknown radio used by TNETW1450 USB adapters";
-+ break;
-+ default:
-+ radio_str = "UNKNOWN, please report radio type name!";
-+ break;
-+ }
-+
-+ switch (adev->form_factor) {
-+ case 0x00:
-+ form_str = "unspecified";
-+ break;
-+ case 0x01:
-+ form_str = "(mini-)PCI / CardBus";
-+ break;
-+ case 0x02:
-+ form_str = "USB";
-+ break;
-+ case 0x03:
-+ form_str = "Compact Flash";
-+ break;
-+ default:
-+ form_str = "UNKNOWN, please report";
-+ break;
-+ }
-+
-+ printk("acx: === chipset %s, radio type 0x%02X (%s), "
-+ "form factor 0x%02X (%s), EEPROM version 0x%02X: "
-+ "uploaded firmware '%s' ===\n",
-+ adev->chip_name, adev->radio_type, radio_str,
-+ adev->form_factor, form_str, adev->eeprom_version,
-+ adev->firmware_version);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx_e_change_mtu(struct net_device *ndev, int mtu)
-+{
-+ enum {
-+ MIN_MTU = 256,
-+ MAX_MTU = WLAN_DATA_MAXLEN - (ETH_HLEN)
-+ };
-+
-+ if (mtu < MIN_MTU || mtu > MAX_MTU)
-+ return -EINVAL;
-+
-+ ndev->mtu = mtu;
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_e_get_stats, acx_e_get_wireless_stats
-+*/
-+struct net_device_stats*
-+acx_e_get_stats(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ return &adev->stats;
-+}
-+
-+struct iw_statistics*
-+acx_e_get_wireless_stats(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ return &adev->wstats;
-+}
-+
-+
-+/***********************************************************************
-+** maps acx111 tx descr rate field to acx100 one
-+*/
-+const u8
-+acx_bitpos2rate100[] = {
-+ RATE100_1 ,/* 0 */
-+ RATE100_2 ,/* 1 */
-+ RATE100_5 ,/* 2 */
-+ RATE100_2 ,/* 3, should not happen */
-+ RATE100_2 ,/* 4, should not happen */
-+ RATE100_11 ,/* 5 */
-+ RATE100_2 ,/* 6, should not happen */
-+ RATE100_2 ,/* 7, should not happen */
-+ RATE100_22 ,/* 8 */
-+ RATE100_2 ,/* 9, should not happen */
-+ RATE100_2 ,/* 10, should not happen */
-+ RATE100_2 ,/* 11, should not happen */
-+ RATE100_2 ,/* 12, should not happen */
-+ RATE100_2 ,/* 13, should not happen */
-+ RATE100_2 ,/* 14, should not happen */
-+ RATE100_2 ,/* 15, should not happen */
-+};
-+
-+u8
-+acx_rate111to100(u16 r) {
-+ return acx_bitpos2rate100[highest_bit(r)];
-+}
-+
-+
-+/***********************************************************************
-+** Calculate level like the feb 2003 windows driver seems to do
-+*/
-+static u8
-+acx_signal_to_winlevel(u8 rawlevel)
-+{
-+ /* u8 winlevel = (u8) (0.5 + 0.625 * rawlevel); */
-+ u8 winlevel = ((4 + (rawlevel * 5)) / 8);
-+
-+ if (winlevel > 100)
-+ winlevel = 100;
-+ return winlevel;
-+}
-+
-+u8
-+acx_signal_determine_quality(u8 signal, u8 noise)
-+{
-+ int qual;
-+
-+ qual = (((signal - 30) * 100 / 70) + (100 - noise * 4)) / 2;
-+
-+ if (qual > 100)
-+ return 100;
-+ if (qual < 0)
-+ return 0;
-+ return qual;
-+}
-+
-+
-+/***********************************************************************
-+** Interrogate/configure commands
-+*/
-+
-+/* FIXME: the lengths given here probably aren't always correct.
-+ * They should be gradually replaced by proper "sizeof(acx1XX_ie_XXXX)-4",
-+ * unless the firmware actually expects a different length than the struct length */
-+static const u16
-+acx100_ie_len[] = {
-+ 0,
-+ ACX100_IE_ACX_TIMER_LEN,
-+ sizeof(acx100_ie_powersave_t)-4, /* is that 6 or 8??? */
-+ ACX1xx_IE_QUEUE_CONFIG_LEN,
-+ ACX100_IE_BLOCK_SIZE_LEN,
-+ ACX1xx_IE_MEMORY_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_RATE_FALLBACK_LEN,
-+ ACX100_IE_WEP_OPTIONS_LEN,
-+ ACX1xx_IE_MEMORY_MAP_LEN, /* ACX1xx_IE_SSID_LEN, */
-+ 0,
-+ ACX1xx_IE_ASSOC_ID_LEN,
-+ 0,
-+ ACX111_IE_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_FWREV_LEN,
-+ ACX1xx_IE_FCS_ERROR_COUNT_LEN,
-+ ACX1xx_IE_MEDIUM_USAGE_LEN,
-+ ACX1xx_IE_RXCONFIG_LEN,
-+ 0,
-+ 0,
-+ sizeof(fw_stats_t)-4,
-+ 0,
-+ ACX1xx_IE_FEATURE_CONFIG_LEN,
-+ ACX111_IE_KEY_CHOOSE_LEN,
-+ ACX1FF_IE_MISC_CONFIG_TABLE_LEN,
-+ ACX1FF_IE_WONE_CONFIG_LEN,
-+ 0,
-+ ACX1FF_IE_TID_CONFIG_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_CALIB_ASSESSMENT_LEN,
-+ ACX1FF_IE_BEACON_FILTER_OPTIONS_LEN,
-+ ACX1FF_IE_LOW_RSSI_THRESH_OPT_LEN,
-+ ACX1FF_IE_NOISE_HISTOGRAM_RESULTS_LEN,
-+ 0,
-+ ACX1FF_IE_PACKET_DETECT_THRESH_LEN,
-+ ACX1FF_IE_TX_CONFIG_OPTIONS_LEN,
-+ ACX1FF_IE_CCA_THRESHOLD_LEN,
-+ ACX1FF_IE_EVENT_MASK_LEN,
-+ ACX1FF_IE_DTIM_PERIOD_LEN,
-+ 0,
-+ ACX1FF_IE_ACI_CONFIG_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_EEPROM_VER_LEN,
-+};
-+
-+static const u16
-+acx100_ie_len_dot11[] = {
-+ 0,
-+ ACX1xx_IE_DOT11_STATION_ID_LEN,
-+ 0,
-+ ACX100_IE_DOT11_BEACON_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_DTIM_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN,
-+ ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN,
-+ ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE_LEN,
-+ ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_TX_POWER_LEVEL_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN,
-+ ACX100_IE_DOT11_ED_THRESHOLD_LEN,
-+ ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+};
-+
-+static const u16
-+acx111_ie_len[] = {
-+ 0,
-+ ACX100_IE_ACX_TIMER_LEN,
-+ sizeof(acx111_ie_powersave_t)-4,
-+ ACX1xx_IE_QUEUE_CONFIG_LEN,
-+ ACX100_IE_BLOCK_SIZE_LEN,
-+ ACX1xx_IE_MEMORY_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_RATE_FALLBACK_LEN,
-+ ACX100_IE_WEP_OPTIONS_LEN,
-+ ACX1xx_IE_MEMORY_MAP_LEN, /* ACX1xx_IE_SSID_LEN, */
-+ 0,
-+ ACX1xx_IE_ASSOC_ID_LEN,
-+ 0,
-+ ACX111_IE_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_FWREV_LEN,
-+ ACX1xx_IE_FCS_ERROR_COUNT_LEN,
-+ ACX1xx_IE_MEDIUM_USAGE_LEN,
-+ ACX1xx_IE_RXCONFIG_LEN,
-+ 0,
-+ 0,
-+ sizeof(fw_stats_t)-4,
-+ 0,
-+ ACX1xx_IE_FEATURE_CONFIG_LEN,
-+ ACX111_IE_KEY_CHOOSE_LEN,
-+ ACX1FF_IE_MISC_CONFIG_TABLE_LEN,
-+ ACX1FF_IE_WONE_CONFIG_LEN,
-+ 0,
-+ ACX1FF_IE_TID_CONFIG_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_CALIB_ASSESSMENT_LEN,
-+ ACX1FF_IE_BEACON_FILTER_OPTIONS_LEN,
-+ ACX1FF_IE_LOW_RSSI_THRESH_OPT_LEN,
-+ ACX1FF_IE_NOISE_HISTOGRAM_RESULTS_LEN,
-+ 0,
-+ ACX1FF_IE_PACKET_DETECT_THRESH_LEN,
-+ ACX1FF_IE_TX_CONFIG_OPTIONS_LEN,
-+ ACX1FF_IE_CCA_THRESHOLD_LEN,
-+ ACX1FF_IE_EVENT_MASK_LEN,
-+ ACX1FF_IE_DTIM_PERIOD_LEN,
-+ 0,
-+ ACX1FF_IE_ACI_CONFIG_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_EEPROM_VER_LEN,
-+};
-+
-+static const u16
-+acx111_ie_len_dot11[] = {
-+ 0,
-+ ACX1xx_IE_DOT11_STATION_ID_LEN,
-+ 0,
-+ ACX100_IE_DOT11_BEACON_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_DTIM_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN,
-+ ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN,
-+ ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE_LEN,
-+ ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_TX_POWER_LEVEL_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN,
-+ ACX100_IE_DOT11_ED_THRESHOLD_LEN,
-+ ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+};
-+
-+
-+#undef FUNC
-+#define FUNC "configure"
-+#if !ACX_DEBUG
-+int
-+acx_s_configure(acx_device_t *adev, void *pdr, int type)
-+{
-+#else
-+int
-+acx_s_configure_debug(acx_device_t *adev, void *pdr, int type, const char* typestr)
-+{
-+#endif
-+ u16 len;
-+ int res;
-+
-+ if (type < 0x1000)
-+ len = adev->ie_len[type];
-+ else
-+ len = adev->ie_len_dot11[type - 0x1000];
-+
-+ log(L_CTL, FUNC"(type:%s,len:%u)\n", typestr, len);
-+ if (unlikely(!len)) {
-+ log(L_DEBUG, "zero-length type %s?!\n", typestr);
-+ }
-+
-+ ((acx_ie_generic_t *)pdr)->type = cpu_to_le16(type);
-+ ((acx_ie_generic_t *)pdr)->len = cpu_to_le16(len);
-+ res = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIGURE, pdr, len + 4);
-+ if (unlikely(OK != res)) {
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(type:%s) FAILED\n", adev->ndev->name, typestr);
-+#else
-+ printk("%s: "FUNC"(type:0x%X) FAILED\n", adev->ndev->name, type);
-+#endif
-+ /* dump_stack() is already done in issue_cmd() */
-+ }
-+ return res;
-+}
-+
-+#undef FUNC
-+#define FUNC "interrogate"
-+#if !ACX_DEBUG
-+int
-+acx_s_interrogate(acx_device_t *adev, void *pdr, int type)
-+{
-+#else
-+int
-+acx_s_interrogate_debug(acx_device_t *adev, void *pdr, int type,
-+ const char* typestr)
-+{
-+#endif
-+ u16 len;
-+ int res;
-+
-+ /* FIXME: no check whether this exceeds the array yet.
-+ * We should probably remember the number of entries... */
-+ if (type < 0x1000)
-+ len = adev->ie_len[type];
-+ else
-+ len = adev->ie_len_dot11[type-0x1000];
-+
-+ log(L_CTL, FUNC"(type:%s,len:%u)\n", typestr, len);
-+
-+ ((acx_ie_generic_t *)pdr)->type = cpu_to_le16(type);
-+ ((acx_ie_generic_t *)pdr)->len = cpu_to_le16(len);
-+ res = acx_s_issue_cmd(adev, ACX1xx_CMD_INTERROGATE, pdr, len + 4);
-+ if (unlikely(OK != res)) {
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(type:%s) FAILED\n", adev->ndev->name, typestr);
-+#else
-+ printk("%s: "FUNC"(type:0x%X) FAILED\n", adev->ndev->name, type);
-+#endif
-+ /* dump_stack() is already done in issue_cmd() */
-+ }
-+ return res;
-+}
-+
-+#if CMD_DISCOVERY
-+void
-+great_inquisitor(acx_device_t *adev)
-+{
-+ static struct {
-+ u16 type;
-+ u16 len;
-+ /* 0x200 was too large here: */
-+ u8 data[0x100 - 4];
-+ } ACX_PACKED ie;
-+ u16 type;
-+
-+ FN_ENTER;
-+
-+ /* 0..0x20, 0x1000..0x1020 */
-+ for (type = 0; type <= 0x1020; type++) {
-+ if (type == 0x21)
-+ type = 0x1000;
-+ ie.type = cpu_to_le16(type);
-+ ie.len = cpu_to_le16(sizeof(ie) - 4);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_INTERROGATE, &ie, sizeof(ie));
-+ }
-+ FN_EXIT0;
-+}
-+#endif
-+
-+
-+#ifdef CONFIG_PROC_FS
-+/***********************************************************************
-+** /proc files
-+*/
-+/***********************************************************************
-+** acx_l_proc_output
-+** Generate content for our /proc entry
-+**
-+** Arguments:
-+** buf is a pointer to write output to
-+** adev is the usual pointer to our private struct acx_device
-+** Returns:
-+** number of bytes actually written to buf
-+** Side effects:
-+** none
-+*/
-+static int
-+acx_l_proc_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ p += sprintf(p,
-+ "acx driver version:\t\t" ACX_RELEASE "\n"
-+ "Wireless extension version:\t" STRING(WIRELESS_EXT) "\n"
-+ "chip name:\t\t\t%s (0x%08X)\n"
-+ "radio type:\t\t\t0x%02X\n"
-+ "form factor:\t\t\t0x%02X\n"
-+ "EEPROM version:\t\t\t0x%02X\n"
-+ "firmware version:\t\t%s (0x%08X)\n",
-+ adev->chip_name, adev->firmware_id,
-+ adev->radio_type,
-+ adev->form_factor,
-+ adev->eeprom_version,
-+ adev->firmware_version, adev->firmware_numver);
-+
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ struct client *bss = &adev->sta_list[i];
-+ if (!bss->used) continue;
-+ p += sprintf(p, "BSS %u BSSID "MACSTR" ESSID %s channel %u "
-+ "Cap 0x%X SIR %u SNR %u\n",
-+ i, MAC(bss->bssid), (char*)bss->essid, bss->channel,
-+ bss->cap_info, bss->sir, bss->snr);
-+ }
-+ p += sprintf(p, "status:\t\t\t%u (%s)\n",
-+ adev->status, acx_get_status_name(adev->status));
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_s_proc_diag_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ unsigned long flags;
-+ unsigned int len = 0, partlen;
-+ u32 temp1, temp2;
-+ u8 *st, *st_end;
-+#ifdef __BIG_ENDIAN
-+ u8 *st2;
-+#endif
-+ fw_stats_t *fw_stats;
-+ char *part_str = NULL;
-+ fw_stats_tx_t *tx = NULL;
-+ fw_stats_rx_t *rx = NULL;
-+ fw_stats_dma_t *dma = NULL;
-+ fw_stats_irq_t *irq = NULL;
-+ fw_stats_wep_t *wep = NULL;
-+ fw_stats_pwr_t *pwr = NULL;
-+ fw_stats_mic_t *mic = NULL;
-+ fw_stats_aes_t *aes = NULL;
-+ fw_stats_event_t *evt = NULL;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+#if defined (ACX_MEM)
-+ p = acxmem_s_proc_diag_output(p, adev);
-+#else
-+ if (IS_PCI(adev))
-+ p = acxpci_s_proc_diag_output(p, adev);
-+#endif
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** network status **\n"
-+ "dev_state_mask 0x%04X\n"
-+ "status %u (%s), "
-+ "mode %u, channel %u, "
-+ "reg_dom_id 0x%02X, reg_dom_chanmask 0x%04X, ",
-+ adev->dev_state_mask,
-+ adev->status, acx_get_status_name(adev->status),
-+ adev->mode, adev->channel,
-+ adev->reg_dom_id, adev->reg_dom_chanmask
-+ );
-+ p += sprintf(p,
-+ "ESSID \"%s\", essid_active %d, essid_len %d, "
-+ "essid_for_assoc \"%s\", nick \"%s\"\n"
-+ "WEP ena %d, restricted %d, idx %d\n",
-+ adev->essid, adev->essid_active, (int)adev->essid_len,
-+ adev->essid_for_assoc, adev->nick,
-+ adev->wep_enabled, adev->wep_restricted,
-+ adev->wep_current_index);
-+ p += sprintf(p, "dev_addr "MACSTR"\n", MAC(adev->dev_addr));
-+ p += sprintf(p, "bssid "MACSTR"\n", MAC(adev->bssid));
-+ p += sprintf(p, "ap_filter "MACSTR"\n", MAC(adev->ap));
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** PHY status **\n"
-+ "tx_disabled %d, tx_level_dbm %d\n" /* "tx_level_val %d, tx_level_auto %d\n" */
-+ "sensitivity %d, antenna 0x%02X, ed_threshold %d, cca %d, preamble_mode %d\n"
-+ "rate_basic 0x%04X, rate_oper 0x%04X\n"
-+ "rts_threshold %d, frag_threshold %d, short_retry %d, long_retry %d\n"
-+ "msdu_lifetime %d, listen_interval %d, beacon_interval %d\n",
-+ adev->tx_disabled, adev->tx_level_dbm, /* adev->tx_level_val, adev->tx_level_auto, */
-+ adev->sensitivity, adev->antenna, adev->ed_threshold, adev->cca, adev->preamble_mode,
-+ adev->rate_basic, adev->rate_oper,
-+ adev->rts_threshold, adev->frag_threshold, adev->short_retry, adev->long_retry,
-+ adev->msdu_lifetime, adev->listen_interval, adev->beacon_interval);
-+
-+ acx_unlock(adev, flags);
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** Firmware **\n"
-+ "NOTE: version dependent statistics layout, "
-+ "please report if you suspect wrong parsing!\n"
-+ "\n"
-+ "version \"%s\"\n", adev->firmware_version);
-+
-+ /* TODO: may replace kmalloc/memset with kzalloc once
-+ * Linux 2.6.14 is widespread */
-+ fw_stats = kmalloc(sizeof(*fw_stats), GFP_KERNEL);
-+ if (!fw_stats) {
-+ FN_EXIT1(0);
-+ return 0;
-+ }
-+ memset(fw_stats, 0, sizeof(*fw_stats));
-+
-+ st = (u8 *)fw_stats;
-+
-+ part_str = "statistics query command";
-+
-+ if (OK != acx_s_interrogate(adev, st, ACX1xx_IE_FIRMWARE_STATISTICS))
-+ goto fw_stats_end;
-+
-+ st += sizeof(u16);
-+ len = *(u16 *)st;
-+
-+ if (len > sizeof(*fw_stats)) {
-+ p += sprintf(p,
-+ "firmware version with bigger fw_stats struct detected\n"
-+ "(%u vs. %u), please report\n", len, sizeof(fw_stats_t));
-+ if (len > sizeof(*fw_stats)) {
-+ p += sprintf(p, "struct size exceeded allocation!\n");
-+ len = sizeof(*fw_stats);
-+ }
-+ }
-+ st += sizeof(u16);
-+ st_end = st - 2*sizeof(u16) + len;
-+
-+#ifdef __BIG_ENDIAN
-+ /* let's make one bold assumption here:
-+ * (hopefully!) *all* statistics fields are u32 only,
-+ * thus if we need to make endianness corrections
-+ * we can simply do them in one go, in advance */
-+ st2 = (u8 *)fw_stats;
-+ for (temp1 = 0; temp1 < len; temp1 += 4, st2 += 4)
-+ *(u32 *)st2 = le32_to_cpu(*(u32 *)st2);
-+#endif
-+
-+ part_str = "Rx/Tx";
-+
-+ /* directly at end of a struct part? --> no error! */
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ tx = (fw_stats_tx_t *)st;
-+ st += sizeof(fw_stats_tx_t);
-+ rx = (fw_stats_rx_t *)st;
-+ st += sizeof(fw_stats_rx_t);
-+ partlen = sizeof(fw_stats_tx_t) + sizeof(fw_stats_rx_t);
-+
-+ if (IS_ACX100(adev)) {
-+ /* at least ACX100 PCI F/W 1.9.8.b
-+ * and ACX100 USB F/W 1.0.7-USB
-+ * don't have those two fields... */
-+ st -= 2*sizeof(u32);
-+
-+ /* our parsing doesn't quite match this firmware yet,
-+ * log failure */
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = temp2 = 999999999;
-+ } else {
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = rx->rx_aci_events;
-+ temp2 = rx->rx_aci_resets;
-+ }
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " tx_desc_overfl %u\n"
-+ " rx_OutOfMem %u, rx_hdr_overfl %u, rx_hw_stuck %u\n"
-+ " rx_dropped_frame %u, rx_frame_ptr_err %u, rx_xfr_hint_trig %u\n"
-+ " rx_aci_events %u, rx_aci_resets %u\n",
-+ part_str,
-+ tx->tx_desc_of,
-+ rx->rx_oom,
-+ rx->rx_hdr_of,
-+ rx->rx_hw_stuck,
-+ rx->rx_dropped_frame,
-+ rx->rx_frame_ptr_err,
-+ rx->rx_xfr_hint_trig,
-+ temp1,
-+ temp2);
-+
-+ part_str = "DMA";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ dma = (fw_stats_dma_t *)st;
-+ partlen = sizeof(fw_stats_dma_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " rx_dma_req %u, rx_dma_err %u, tx_dma_req %u, tx_dma_err %u\n",
-+ part_str,
-+ dma->rx_dma_req,
-+ dma->rx_dma_err,
-+ dma->tx_dma_req,
-+ dma->tx_dma_err);
-+
-+ part_str = "IRQ";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ irq = (fw_stats_irq_t *)st;
-+ partlen = sizeof(fw_stats_irq_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " cmd_cplt %u, fiq %u\n"
-+ " rx_hdrs %u, rx_cmplt %u, rx_mem_overfl %u, rx_rdys %u\n"
-+ " irqs %u, tx_procs %u, decrypt_done %u\n"
-+ " dma_0_done %u, dma_1_done %u, tx_exch_complet %u\n"
-+ " commands %u, rx_procs %u, hw_pm_mode_changes %u\n"
-+ " host_acks %u, pci_pm %u, acm_wakeups %u\n",
-+ part_str,
-+ irq->cmd_cplt,
-+ irq->fiq,
-+ irq->rx_hdrs,
-+ irq->rx_cmplt,
-+ irq->rx_mem_of,
-+ irq->rx_rdys,
-+ irq->irqs,
-+ irq->tx_procs,
-+ irq->decrypt_done,
-+ irq->dma_0_done,
-+ irq->dma_1_done,
-+ irq->tx_exch_complet,
-+ irq->commands,
-+ irq->rx_procs,
-+ irq->hw_pm_mode_changes,
-+ irq->host_acks,
-+ irq->pci_pm,
-+ irq->acm_wakeups);
-+
-+ part_str = "WEP";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ wep = (fw_stats_wep_t *)st;
-+ partlen = sizeof(fw_stats_wep_t);
-+ st += partlen;
-+
-+ if (
-+ (IS_PCI(adev) && IS_ACX100(adev))
-+ || (IS_USB(adev) && IS_ACX100(adev))
-+ || (IS_MEM(adev) && IS_ACX100(adev))
-+ ) {
-+ /* at least ACX100 PCI F/W 1.9.8.b,
-+ * ACX100 USB F/W 1.0.7-USB
-+ * and ACX100 Generic Slave F/W 1.10.7.K
-+ * don't have those two fields...
-+ */
-+ st -= 2*sizeof(u32);
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = temp2 = 999999999;
-+ } else {
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = wep->wep_pkt_decrypt;
-+ temp2 = wep->wep_decrypt_irqs;
-+ }
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " wep_key_count %u, wep_default_key_count %u, dot11_def_key_mib %u\n"
-+ " wep_key_not_found %u, wep_decrypt_fail %u\n"
-+ " wep_pkt_decrypt %u, wep_decrypt_irqs %u\n",
-+ part_str,
-+ wep->wep_key_count,
-+ wep->wep_default_key_count,
-+ wep->dot11_def_key_mib,
-+ wep->wep_key_not_found,
-+ wep->wep_decrypt_fail,
-+ temp1,
-+ temp2);
-+
-+ part_str = "power";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ pwr = (fw_stats_pwr_t *)st;
-+ partlen = sizeof(fw_stats_pwr_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " tx_start_ctr %u, no_ps_tx_too_short %u\n"
-+ " rx_start_ctr %u, no_ps_rx_too_short %u\n"
-+ " lppd_started %u\n"
-+ " no_lppd_too_noisy %u, no_lppd_too_short %u, no_lppd_matching_frame %u\n",
-+ part_str,
-+ pwr->tx_start_ctr,
-+ pwr->no_ps_tx_too_short,
-+ pwr->rx_start_ctr,
-+ pwr->no_ps_rx_too_short,
-+ pwr->lppd_started,
-+ pwr->no_lppd_too_noisy,
-+ pwr->no_lppd_too_short,
-+ pwr->no_lppd_matching_frame);
-+
-+ part_str = "MIC";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ mic = (fw_stats_mic_t *)st;
-+ partlen = sizeof(fw_stats_mic_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " mic_rx_pkts %u, mic_calc_fail %u\n",
-+ part_str,
-+ mic->mic_rx_pkts,
-+ mic->mic_calc_fail);
-+
-+ part_str = "AES";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ aes = (fw_stats_aes_t *)st;
-+ partlen = sizeof(fw_stats_aes_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " aes_enc_fail %u, aes_dec_fail %u\n"
-+ " aes_enc_pkts %u, aes_dec_pkts %u\n"
-+ " aes_enc_irq %u, aes_dec_irq %u\n",
-+ part_str,
-+ aes->aes_enc_fail,
-+ aes->aes_dec_fail,
-+ aes->aes_enc_pkts,
-+ aes->aes_dec_pkts,
-+ aes->aes_enc_irq,
-+ aes->aes_dec_irq);
-+
-+ part_str = "event";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ evt = (fw_stats_event_t *)st;
-+ partlen = sizeof(fw_stats_event_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " heartbeat %u, calibration %u\n"
-+ " rx_mismatch %u, rx_mem_empty %u, rx_pool %u\n"
-+ " oom_late %u\n"
-+ " phy_tx_err %u, tx_stuck %u\n",
-+ part_str,
-+ evt->heartbeat,
-+ evt->calibration,
-+ evt->rx_mismatch,
-+ evt->rx_mem_empty,
-+ evt->rx_pool,
-+ evt->oom_late,
-+ evt->phy_tx_err,
-+ evt->tx_stuck);
-+
-+ if (st < st_end)
-+ goto fw_stats_bigger;
-+
-+ goto fw_stats_end;
-+
-+fw_stats_fail:
-+ st -= partlen;
-+ p += sprintf(p,
-+ "failed at %s part (size %u), offset %u (struct size %u), "
-+ "please report\n", part_str, partlen,
-+ (int)st - (int)fw_stats, len);
-+
-+fw_stats_bigger:
-+ for (; st < st_end; st += 4)
-+ p += sprintf(p,
-+ "UNKN%3d: %u\n", (int)st - (int)fw_stats, *(u32 *)st);
-+
-+fw_stats_end:
-+ kfree(fw_stats);
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_s_proc_phy_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /*
-+ if (RADIO_RFMD_11 != adev->radio_type) {
-+ printk("sorry, not yet adapted for radio types "
-+ "other than RFMD, please verify "
-+ "PHY size etc. first!\n");
-+ goto end;
-+ }
-+ */
-+
-+ /* The PHY area is only 0x80 bytes long; further pages after that
-+ * only have some page number registers with altered value,
-+ * all other registers remain the same. */
-+ for (i = 0; i < 0x80; i++) {
-+ acx_s_read_phy_reg(adev, i, p++);
-+ }
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+** acx_e_read_proc_XXXX
-+** Handle our /proc entry
-+**
-+** Arguments:
-+** standard kernel read_proc interface
-+** Returns:
-+** number of bytes written to buf
-+** Side effects:
-+** none
-+*/
-+static int
-+acx_e_read_proc(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ unsigned long flags;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+ acx_lock(adev, flags);
-+ /* fill buf */
-+ length = acx_l_proc_output(buf, adev);
-+ acx_unlock(adev, flags);
-+ acx_sem_unlock(adev);
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = buf + offset;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+static char _buf[32768];
-+static int
-+acx_e_read_proc_diag(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+ /* fill buf */
-+ length = acx_s_proc_diag_output(_buf, adev);
-+ acx_sem_unlock(adev);
-+
-+ memcpy(buf, _buf + offset, count);
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = count;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+static int
-+acx_e_read_proc_eeprom(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ /* fill buf */
-+ length = 0;
-+#if defined (ACX_MEM)
-+ acx_sem_lock(adev);
-+ length = acxmem_proc_eeprom_output(buf, adev);
-+ acx_sem_unlock(adev);
-+#else
-+ if (IS_PCI(adev)) {
-+ acx_sem_lock(adev);
-+ length = acxpci_proc_eeprom_output(buf, adev);
-+ acx_sem_unlock(adev);
-+ }
-+#endif
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = buf + offset;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+static int
-+acx_e_read_proc_phy(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+ /* fill buf */
-+ length = acx_s_proc_phy_output(buf, adev);
-+ acx_sem_unlock(adev);
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = buf + offset;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+
-+/***********************************************************************
-+** /proc files registration
-+*/
-+static const char * const
-+proc_files[] = { "", "_diag", "_eeprom", "_phy" };
-+
-+static read_proc_t * const
-+proc_funcs[] = {
-+ acx_e_read_proc,
-+ acx_e_read_proc_diag,
-+ acx_e_read_proc_eeprom,
-+ acx_e_read_proc_phy
-+};
-+
-+static int
-+manage_proc_entries(const struct net_device *ndev, int remove)
-+{
-+ acx_device_t *adev = ndev2adev((struct net_device *)ndev);
-+ char procbuf[80];
-+ int i;
-+
-+ for (i = 0; i < VEC_SIZE(proc_files); i++) {
-+ snprintf(procbuf, sizeof(procbuf),
-+ "driver/acx_%s%s", ndev->name, proc_files[i]);
-+ log(L_INIT, "%sing /proc entry %s\n",
-+ remove ? "remov" : "creat", procbuf);
-+ if (!remove) {
-+ if (!create_proc_read_entry(procbuf, 0, 0, proc_funcs[i], adev)) {
-+ printk("acx: cannot register /proc entry %s\n", procbuf);
-+ return NOT_OK;
-+ }
-+ } else {
-+ remove_proc_entry(procbuf, NULL);
-+ }
-+ }
-+ return OK;
-+}
-+
-+int
-+acx_proc_register_entries(const struct net_device *ndev)
-+{
-+ return manage_proc_entries(ndev, 0);
-+}
-+
-+int
-+acx_proc_unregister_entries(const struct net_device *ndev)
-+{
-+ return manage_proc_entries(ndev, 1);
-+}
-+#endif /* CONFIG_PROC_FS */
-+
-+
-+/***********************************************************************
-+** acx_cmd_join_bssid
-+**
-+** Common code for both acx100 and acx111.
-+*/
-+/* NB: does NOT match RATE100_nn but matches ACX[111]_SCAN_RATE_n */
-+static const u8
-+bitpos2genframe_txrate[] = {
-+ 10, /* 0. 1 Mbit/s */
-+ 20, /* 1. 2 Mbit/s */
-+ 55, /* 2. 5.5 Mbit/s */
-+ 0x0B, /* 3. 6 Mbit/s */
-+ 0x0F, /* 4. 9 Mbit/s */
-+ 110, /* 5. 11 Mbit/s */
-+ 0x0A, /* 6. 12 Mbit/s */
-+ 0x0E, /* 7. 18 Mbit/s */
-+ 220, /* 8. 22 Mbit/s */
-+ 0x09, /* 9. 24 Mbit/s */
-+ 0x0D, /* 10. 36 Mbit/s */
-+ 0x08, /* 11. 48 Mbit/s */
-+ 0x0C, /* 12. 54 Mbit/s */
-+ 10, /* 13. 1 Mbit/s, should never happen */
-+ 10, /* 14. 1 Mbit/s, should never happen */
-+ 10, /* 15. 1 Mbit/s, should never happen */
-+};
-+
-+/* Looks scary, eh?
-+** Actually, each one compiled into one AND and one SHIFT,
-+** 31 bytes in x86 asm (more if uints are replaced by u16/u8) */
-+static inline unsigned int
-+rate111to5bits(unsigned int rate)
-+{
-+ return (rate & 0x7)
-+ | ( (rate & RATE111_11) / (RATE111_11/JOINBSS_RATES_11) )
-+ | ( (rate & RATE111_22) / (RATE111_22/JOINBSS_RATES_22) )
-+ ;
-+}
-+
-+static void
-+acx_s_cmd_join_bssid(acx_device_t *adev, const u8 *bssid)
-+{
-+ acx_joinbss_t tmp;
-+ int dtim_interval;
-+ int i;
-+
-+ if (mac_is_zero(bssid))
-+ return;
-+
-+ FN_ENTER;
-+
-+ dtim_interval = (ACX_MODE_0_ADHOC == adev->mode) ?
-+ 1 : adev->dtim_interval;
-+
-+ memset(&tmp, 0, sizeof(tmp));
-+
-+ for (i = 0; i < ETH_ALEN; i++) {
-+ tmp.bssid[i] = bssid[ETH_ALEN-1 - i];
-+ }
-+
-+ tmp.beacon_interval = cpu_to_le16(adev->beacon_interval);
-+
-+ /* Basic rate set. Control frame responses (such as ACK or CTS frames)
-+ ** are sent with one of these rates */
-+ if (IS_ACX111(adev)) {
-+ /* It was experimentally determined that rates_basic
-+ ** can take 11g rates as well, not only rates
-+ ** defined with JOINBSS_RATES_BASIC111_nnn.
-+ ** Just use RATE111_nnn constants... */
-+ tmp.u.acx111.dtim_interval = dtim_interval;
-+ tmp.u.acx111.rates_basic = cpu_to_le16(adev->rate_basic);
-+ log(L_ASSOC, "rates_basic:%04X, rates_supported:%04X\n",
-+ adev->rate_basic, adev->rate_oper);
-+ } else {
-+ tmp.u.acx100.dtim_interval = dtim_interval;
-+ tmp.u.acx100.rates_basic = rate111to5bits(adev->rate_basic);
-+ tmp.u.acx100.rates_supported = rate111to5bits(adev->rate_oper);
-+ log(L_ASSOC, "rates_basic:%04X->%02X, "
-+ "rates_supported:%04X->%02X\n",
-+ adev->rate_basic, tmp.u.acx100.rates_basic,
-+ adev->rate_oper, tmp.u.acx100.rates_supported);
-+ }
-+
-+ /* Setting up how Beacon, Probe Response, RTS, and PS-Poll frames
-+ ** will be sent (rate/modulation/preamble) */
-+ tmp.u.txrate.genfrm_txrate = bitpos2genframe_txrate[lowest_bit(adev->rate_basic)];
-+ tmp.genfrm_mod_pre = 0; /* FIXME: was = adev->capab_short (which was always 0); */
-+ /* we can use short pre *if* all peers can understand it */
-+ /* FIXME #2: we need to correctly set PBCC/OFDM bits here too */
-+
-+ /* we switch fw to STA mode in MONITOR mode, it seems to be
-+ ** the only mode where fw does not emit beacons by itself
-+ ** but allows us to send anything (we really want to retain
-+ ** ability to tx arbitrary frames in MONITOR mode)
-+ */
-+ tmp.macmode = (adev->mode != ACX_MODE_MONITOR ? adev->mode : ACX_MODE_2_STA);
-+ tmp.channel = adev->channel;
-+ tmp.essid_len = adev->essid_len;
-+ /* NOTE: the code memcpy'd essid_len + 1 before, which is WRONG! */
-+ memcpy(tmp.essid, adev->essid, tmp.essid_len);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_JOIN, &tmp, tmp.essid_len + 0x11);
-+
-+ log(L_ASSOC|L_DEBUG, "BSS_Type = %u\n", tmp.macmode);
-+ acxlog_mac(L_ASSOC|L_DEBUG, "JoinBSSID MAC:", adev->bssid, "\n");
-+
-+ acx_update_capabilities(adev);
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_cmd_start_scan
-+**
-+** Issue scan command to the hardware
-+**
-+** unified function for both ACX111 and ACX100
-+*/
-+static void
-+acx_s_scan_chan(acx_device_t *adev)
-+{
-+ union {
-+ acx111_scan_t acx111;
-+ acx100_scan_t acx100;
-+ } s;
-+
-+ FN_ENTER;
-+
-+ memset(&s, 0, sizeof(s));
-+
-+ /* first common positions... */
-+
-+ s.acx111.count = cpu_to_le16(adev->scan_count);
-+ s.acx111.rate = adev->scan_rate;
-+ s.acx111.options = adev->scan_mode;
-+ s.acx111.chan_duration = cpu_to_le16(adev->scan_duration);
-+ s.acx111.max_probe_delay = cpu_to_le16(adev->scan_probe_delay);
-+
-+ /* ...then differences */
-+
-+ if (IS_ACX111(adev)) {
-+ s.acx111.channel_list_select = 0; /* scan every allowed channel */
-+ /*s.acx111.channel_list_select = 1;*/ /* scan given channels */
-+ /*s.acx111.modulation = 0x40;*/ /* long preamble? OFDM? -> only for active scan */
-+ s.acx111.modulation = 0;
-+ /*s.acx111.channel_list[0] = 6;
-+ s.acx111.channel_list[1] = 4;*/
-+ } else {
-+ s.acx100.start_chan = cpu_to_le16(1);
-+ s.acx100.flags = cpu_to_le16(0x8000);
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_SCAN, &s, sizeof(s));
-+ FN_EXIT0;
-+}
-+
-+
-+void
-+acx_s_cmd_start_scan(acx_device_t *adev)
-+{
-+ /* time_before check is 'just in case' thing */
-+ if (!(adev->irq_status & HOST_INT_SCAN_COMPLETE)
-+ && time_before(jiffies, adev->scan_start + 10*HZ)
-+ ) {
-+ log(L_INIT, "start_scan: seems like previous scan "
-+ "is still running. Not starting anew. Please report\n");
-+ return;
-+ }
-+
-+ log(L_INIT, "starting radio scan\n");
-+ /* remember that fw is commanded to do scan */
-+ adev->scan_start = jiffies;
-+ CLEAR_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
-+ /* issue it */
-+ acx_s_scan_chan(adev);
-+}
-+
-+
-+/***********************************************************************
-+** acx111 feature config
-+*/
-+static int
-+acx111_s_get_feature_config(acx_device_t *adev,
-+ u32 *feature_options, u32 *data_flow_options)
-+{
-+ struct acx111_ie_feature_config feat;
-+
-+ if (!IS_ACX111(adev)) {
-+ return NOT_OK;
-+ }
-+
-+ memset(&feat, 0, sizeof(feat));
-+
-+ if (OK != acx_s_interrogate(adev, &feat, ACX1xx_IE_FEATURE_CONFIG)) {
-+ return NOT_OK;
-+ }
-+ log(L_DEBUG,
-+ "got Feature option:0x%X, DataFlow option: 0x%X\n",
-+ feat.feature_options,
-+ feat.data_flow_options);
-+
-+ if (feature_options)
-+ *feature_options = le32_to_cpu(feat.feature_options);
-+ if (data_flow_options)
-+ *data_flow_options = le32_to_cpu(feat.data_flow_options);
-+
-+ return OK;
-+}
-+
-+static int
-+acx111_s_set_feature_config(acx_device_t *adev,
-+ u32 feature_options, u32 data_flow_options,
-+ unsigned int mode /* 0 == remove, 1 == add, 2 == set */)
-+{
-+ struct acx111_ie_feature_config feat;
-+
-+ if (!IS_ACX111(adev)) {
-+ return NOT_OK;
-+ }
-+
-+ if ((mode < 0) || (mode > 2))
-+ return NOT_OK;
-+
-+ if (mode != 2)
-+ /* need to modify old data */
-+ acx111_s_get_feature_config(adev, &feat.feature_options, &feat.data_flow_options);
-+ else {
-+ /* need to set a completely new value */
-+ feat.feature_options = 0;
-+ feat.data_flow_options = 0;
-+ }
-+
-+ if (mode == 0) { /* remove */
-+ CLEAR_BIT(feat.feature_options, cpu_to_le32(feature_options));
-+ CLEAR_BIT(feat.data_flow_options, cpu_to_le32(data_flow_options));
-+ } else { /* add or set */
-+ SET_BIT(feat.feature_options, cpu_to_le32(feature_options));
-+ SET_BIT(feat.data_flow_options, cpu_to_le32(data_flow_options));
-+ }
-+
-+ log(L_DEBUG,
-+ "old: feature 0x%08X dataflow 0x%08X. mode: %u\n"
-+ "new: feature 0x%08X dataflow 0x%08X\n",
-+ feature_options, data_flow_options, mode,
-+ le32_to_cpu(feat.feature_options),
-+ le32_to_cpu(feat.data_flow_options));
-+
-+ if (OK != acx_s_configure(adev, &feat, ACX1xx_IE_FEATURE_CONFIG)) {
-+ return NOT_OK;
-+ }
-+
-+ return OK;
-+}
-+
-+static inline int
-+acx111_s_feature_off(acx_device_t *adev, u32 f, u32 d)
-+{
-+ return acx111_s_set_feature_config(adev, f, d, 0);
-+}
-+static inline int
-+acx111_s_feature_on(acx_device_t *adev, u32 f, u32 d)
-+{
-+ return acx111_s_set_feature_config(adev, f, d, 1);
-+}
-+static inline int
-+acx111_s_feature_set(acx_device_t *adev, u32 f, u32 d)
-+{
-+ return acx111_s_set_feature_config(adev, f, d, 2);
-+}
-+
-+
-+/***********************************************************************
-+** acx100_s_init_memory_pools
-+*/
-+static int
-+acx100_s_init_memory_pools(acx_device_t *adev, const acx_ie_memmap_t *mmt)
-+{
-+ acx100_ie_memblocksize_t MemoryBlockSize;
-+ acx100_ie_memconfigoption_t MemoryConfigOption;
-+ int TotalMemoryBlocks;
-+ int RxBlockNum;
-+ int TotalRxBlockSize;
-+ int TxBlockNum;
-+ int TotalTxBlockSize;
-+
-+ FN_ENTER;
-+
-+ /* Let's see if we can follow this:
-+ first we select our memory block size (which I think is
-+ completely arbitrary) */
-+ MemoryBlockSize.size = cpu_to_le16(adev->memblocksize);
-+
-+ /* Then we alert the card to our decision of block size */
-+ if (OK != acx_s_configure(adev, &MemoryBlockSize, ACX100_IE_BLOCK_SIZE)) {
-+ goto bad;
-+ }
-+
-+ /* We figure out how many total blocks we can create, using
-+ the block size we chose, and the beginning and ending
-+ memory pointers, i.e.: end-start/size */
-+ TotalMemoryBlocks = (le32_to_cpu(mmt->PoolEnd) - le32_to_cpu(mmt->PoolStart)) / adev->memblocksize;
-+
-+ log(L_DEBUG, "TotalMemoryBlocks=%u (%u bytes)\n",
-+ TotalMemoryBlocks, TotalMemoryBlocks*adev->memblocksize);
-+
-+ /* MemoryConfigOption.DMA_config bitmask:
-+ access to ACX memory is to be done:
-+ 0x00080000 using PCI conf space?!
-+ 0x00040000 using IO instructions?
-+ 0x00000000 using memory access instructions
-+ 0x00020000 using local memory block linked list (else what?)
-+ 0x00010000 using host indirect descriptors (else host must access ACX memory?)
-+ */
-+#if defined (ACX_MEM)
-+ /*
-+ * ACX ignores DMA_config for generic slave mode.
-+ */
-+ MemoryConfigOption.DMA_config = 0;
-+ /* Declare start of the Rx host pool */
-+ MemoryConfigOption.pRxHostDesc = cpu2acx(0);
-+ log(L_DEBUG, "pRxHostDesc 0x%08X, rxhostdesc_startphy 0x%lX\n",
-+ acx2cpu(MemoryConfigOption.pRxHostDesc),
-+ (long)adev->rxhostdesc_startphy);
-+#else
-+ if (IS_PCI(adev)) {
-+ MemoryConfigOption.DMA_config = cpu_to_le32(0x30000);
-+ /* Declare start of the Rx host pool */
-+ MemoryConfigOption.pRxHostDesc = cpu2acx(adev->rxhostdesc_startphy);
-+ log(L_DEBUG, "pRxHostDesc 0x%08X, rxhostdesc_startphy 0x%lX\n",
-+ acx2cpu(MemoryConfigOption.pRxHostDesc),
-+ (long)adev->rxhostdesc_startphy);
-+ } else {
-+ MemoryConfigOption.DMA_config = cpu_to_le32(0x20000);
-+ }
-+#endif
-+
-+ /* 50% of the allotment of memory blocks go to tx descriptors */
-+ TxBlockNum = TotalMemoryBlocks / 2;
-+ MemoryConfigOption.TxBlockNum = cpu_to_le16(TxBlockNum);
-+
-+ /* and 50% go to the rx descriptors */
-+ RxBlockNum = TotalMemoryBlocks - TxBlockNum;
-+ MemoryConfigOption.RxBlockNum = cpu_to_le16(RxBlockNum);
-+
-+ /* size of the tx and rx descriptor queues */
-+ TotalTxBlockSize = TxBlockNum * adev->memblocksize;
-+ TotalRxBlockSize = RxBlockNum * adev->memblocksize;
-+ log(L_DEBUG, "TxBlockNum %u RxBlockNum %u TotalTxBlockSize %u "
-+ "TotalTxBlockSize %u\n", TxBlockNum, RxBlockNum,
-+ TotalTxBlockSize, TotalRxBlockSize);
-+
-+
-+ /* align the tx descriptor queue to an alignment of 0x20 (32 bytes) */
-+ MemoryConfigOption.rx_mem =
-+ cpu_to_le32((le32_to_cpu(mmt->PoolStart) + 0x1f) & ~0x1f);
-+
-+ /* align the rx descriptor queue to units of 0x20
-+ * and offset it by the tx descriptor queue */
-+ MemoryConfigOption.tx_mem =
-+ cpu_to_le32((le32_to_cpu(mmt->PoolStart) + TotalRxBlockSize + 0x1f) & ~0x1f);
-+ log(L_DEBUG, "rx_mem %08X rx_mem %08X\n",
-+ MemoryConfigOption.tx_mem, MemoryConfigOption.rx_mem);
-+
-+ /* alert the device to our decision */
-+ if (OK != acx_s_configure(adev, &MemoryConfigOption, ACX1xx_IE_MEMORY_CONFIG_OPTIONS)) {
-+ goto bad;
-+ }
-+
-+ /* and tell the device to kick it into gear */
-+ if (OK != acx_s_issue_cmd(adev, ACX100_CMD_INIT_MEMORY, NULL, 0)) {
-+ goto bad;
-+ }
-+#ifdef ACX_MEM
-+ /*
-+ * slave memory interface has to manage the transmit pools for the ACX,
-+ * so it needs to know what we chose here.
-+ */
-+ adev->acx_txbuf_start = MemoryConfigOption.tx_mem;
-+ adev->acx_txbuf_numblocks = MemoryConfigOption.TxBlockNum;
-+#endif
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx100_s_create_dma_regions
-+**
-+** Note that this fn messes up heavily with hardware, but we cannot
-+** lock it (we need to sleep). Not a problem since IRQs can't happen
-+*/
-+static int
-+acx100_s_create_dma_regions(acx_device_t *adev)
-+{
-+ acx100_ie_queueconfig_t queueconf;
-+ acx_ie_memmap_t memmap;
-+ int res = NOT_OK;
-+ u32 tx_queue_start, rx_queue_start;
-+
-+ FN_ENTER;
-+
-+ /* read out the acx100 physical start address for the queues */
-+ if (OK != acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ tx_queue_start = le32_to_cpu(memmap.QueueStart);
-+ rx_queue_start = tx_queue_start + TX_CNT * sizeof(txdesc_t);
-+
-+ log(L_DEBUG, "initializing Queue Indicator\n");
-+
-+ memset(&queueconf, 0, sizeof(queueconf));
-+
-+ /* Not needed for PCI or slave memory, so we can avoid setting them altogether */
-+ if (IS_USB(adev)) {
-+ queueconf.NumTxDesc = USB_TX_CNT;
-+ queueconf.NumRxDesc = USB_RX_CNT;
-+ }
-+
-+ /* calculate size of queues */
-+ queueconf.AreaSize = cpu_to_le32(
-+ TX_CNT * sizeof(txdesc_t) +
-+ RX_CNT * sizeof(rxdesc_t) + 8
-+ );
-+ queueconf.NumTxQueues = 1; /* number of tx queues */
-+ /* sets the beginning of the tx descriptor queue */
-+ queueconf.TxQueueStart = memmap.QueueStart;
-+ /* done by memset: queueconf.TxQueuePri = 0; */
-+ queueconf.RxQueueStart = cpu_to_le32(rx_queue_start);
-+ queueconf.QueueOptions = 1; /* auto reset descriptor */
-+ /* sets the end of the rx descriptor queue */
-+ queueconf.QueueEnd = cpu_to_le32(
-+ rx_queue_start + RX_CNT * sizeof(rxdesc_t)
-+ );
-+ /* sets the beginning of the next queue */
-+ queueconf.HostQueueEnd = cpu_to_le32(le32_to_cpu(queueconf.QueueEnd) + 8);
-+ if (OK != acx_s_configure(adev, &queueconf, ACX1xx_IE_QUEUE_CONFIG)) {
-+ goto fail;
-+ }
-+
-+#if defined (ACX_MEM)
-+ /* sets the beginning of the rx descriptor queue, after the tx descrs */
-+ adev->acx_queue_indicator =
-+ (queueindicator_t *) le32_to_cpu (queueconf.QueueEnd);
-+ if (OK != acxmem_s_create_hostdesc_queues(adev))
-+ goto fail;
-+
-+ acxmem_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+#else
-+ if (IS_PCI(adev)) {
-+ /* sets the beginning of the rx descriptor queue, after the tx descrs */
-+ if (OK != acxpci_s_create_hostdesc_queues(adev))
-+ goto fail;
-+ acxpci_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+ }
-+#endif
-+
-+ if (OK != acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ /*
-+ * Have to make sure we skip past the Queue Indicator (QueueEnd) and Host Queue Indicator
-+ * maps, each of which are 8 bytes and follow immediately after the transmit and
-+ * receive queues.
-+ */
-+ memmap.PoolStart = cpu_to_le32(
-+ (le32_to_cpu(memmap.QueueEnd) + 4 + 0x1f) & ~0x1f
-+ );
-+
-+ if (OK != acx_s_configure(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ if (OK != acx100_s_init_memory_pools(adev, &memmap)) {
-+ goto fail;
-+ }
-+
-+ res = OK;
-+ goto end;
-+
-+fail:
-+ acx_s_msleep(1000); /* ? */
-+#if defined (ACX_MEM)
-+ acxmem_free_desc_queues(adev);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_free_desc_queues(adev);
-+#endif
-+end:
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acx111_s_create_dma_regions
-+**
-+** Note that this fn messes heavily with hardware, but we cannot
-+** lock it (we need to sleep). Not a problem since IRQs can't happen
-+*/
-+#define ACX111_PERCENT(percent) ((percent)/5)
-+
-+static int
-+acx111_s_create_dma_regions(acx_device_t *adev)
-+{
-+ struct acx111_ie_memoryconfig memconf;
-+ struct acx111_ie_queueconfig queueconf;
-+ u32 tx_queue_start, rx_queue_start;
-+
-+ FN_ENTER;
-+
-+ /* Calculate memory positions and queue sizes */
-+
-+ /* Set up our host descriptor pool + data pool */
-+#if defined (ACX_MEM)
-+ if (OK != acxmem_s_create_hostdesc_queues(adev))
-+ goto fail;
-+#else
-+ if (IS_PCI(adev)) {
-+ if (OK != acxpci_s_create_hostdesc_queues(adev))
-+ goto fail;
-+ }
-+#endif
-+
-+ memset(&memconf, 0, sizeof(memconf));
-+ /* the number of STAs (STA contexts) to support
-+ ** NB: was set to 1 and everything seemed to work nevertheless... */
-+ memconf.no_of_stations = cpu_to_le16(VEC_SIZE(adev->sta_list));
-+ /* specify the memory block size. Default is 256 */
-+ memconf.memory_block_size = cpu_to_le16(adev->memblocksize);
-+ /* let's use 50%/50% for tx/rx (specify percentage, units of 5%) */
-+ memconf.tx_rx_memory_block_allocation = ACX111_PERCENT(50);
-+ /* set the count of our queues
-+ ** NB: struct acx111_ie_memoryconfig shall be modified
-+ ** if we ever will switch to more than one rx and/or tx queue */
-+ memconf.count_rx_queues = 1;
-+ memconf.count_tx_queues = 1;
-+ /* 0 == Busmaster Indirect Memory Organization, which is what we want
-+ * (using linked host descs with their allocated mem).
-+ * 2 == Generic Bus Slave */
-+ /* done by memset: memconf.options = 0; */
-+ /* let's use 25% for fragmentations and 75% for frame transfers
-+ * (specified in units of 5%) */
-+ memconf.fragmentation = ACX111_PERCENT(75);
-+ /* Rx descriptor queue config */
-+ memconf.rx_queue1_count_descs = RX_CNT;
-+ memconf.rx_queue1_type = 7; /* must be set to 7 */
-+ /* done by memset: memconf.rx_queue1_prio = 0; low prio */
-+#if defined (ACX_MEM)
-+ memconf.rx_queue1_host_rx_start = cpu2acx(adev->rxhostdesc_startphy);
-+#else
-+ if (IS_PCI(adev)) {
-+ memconf.rx_queue1_host_rx_start = cpu2acx(adev->rxhostdesc_startphy);
-+ }
-+#endif
-+ /* Tx descriptor queue config */
-+ memconf.tx_queue1_count_descs = TX_CNT;
-+ /* done by memset: memconf.tx_queue1_attributes = 0; lowest priority */
-+
-+ /* NB1: this looks wrong: (memconf,ACX1xx_IE_QUEUE_CONFIG),
-+ ** (queueconf,ACX1xx_IE_MEMORY_CONFIG_OPTIONS) look swapped, eh?
-+ ** But it is actually correct wrt IE numbers.
-+ ** NB2: sizeof(memconf) == 28 == 0x1c but configure(ACX1xx_IE_QUEUE_CONFIG)
-+ ** writes 0x20 bytes (because same IE for acx100 uses struct acx100_ie_queueconfig
-+ ** which is 4 bytes larger. what a mess. TODO: clean it up) */
-+ if (OK != acx_s_configure(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG)) {
-+ goto fail;
-+ }
-+
-+ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
-+
-+ tx_queue_start = le32_to_cpu(queueconf.tx1_queue_address);
-+ rx_queue_start = le32_to_cpu(queueconf.rx1_queue_address);
-+
-+ log(L_INIT, "dump queue head (from card):\n"
-+ "len: %u\n"
-+ "tx_memory_block_address: %X\n"
-+ "rx_memory_block_address: %X\n"
-+ "tx1_queue address: %X\n"
-+ "rx1_queue address: %X\n",
-+ le16_to_cpu(queueconf.len),
-+ le32_to_cpu(queueconf.tx_memory_block_address),
-+ le32_to_cpu(queueconf.rx_memory_block_address),
-+ tx_queue_start,
-+ rx_queue_start);
-+
-+#if defined (ACX_MEM)
-+ acxmem_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+#endif
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+#if defined (ACX_MEM)
-+ acxmem_free_desc_queues(adev);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_free_desc_queues(adev);
-+#endif
-+
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static void
-+acx_s_initialize_rx_config(acx_device_t *adev)
-+{
-+ struct {
-+ u16 id;
-+ u16 len;
-+ u16 rx_cfg1;
-+ u16 rx_cfg2;
-+ } ACX_PACKED cfg;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_OFF:
-+ adev->rx_config_1 = (u16) (0
-+ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
-+ /* | RX_CFG1_FILTER_SSID */
-+ /* | RX_CFG1_FILTER_BCAST */
-+ /* | RX_CFG1_RCV_MC_ADDR1 */
-+ /* | RX_CFG1_RCV_MC_ADDR0 */
-+ /* | RX_CFG1_FILTER_ALL_MULTI */
-+ /* | RX_CFG1_FILTER_BSSID */
-+ /* | RX_CFG1_FILTER_MAC */
-+ /* | RX_CFG1_RCV_PROMISCUOUS */
-+ /* | RX_CFG1_INCLUDE_FCS */
-+ /* | RX_CFG1_INCLUDE_PHY_HDR */
-+ );
-+ adev->rx_config_2 = (u16) (0
-+ /*| RX_CFG2_RCV_ASSOC_REQ */
-+ /*| RX_CFG2_RCV_AUTH_FRAMES */
-+ /*| RX_CFG2_RCV_BEACON_FRAMES */
-+ /*| RX_CFG2_RCV_CONTENTION_FREE */
-+ /*| RX_CFG2_RCV_CTRL_FRAMES */
-+ /*| RX_CFG2_RCV_DATA_FRAMES */
-+ /*| RX_CFG2_RCV_BROKEN_FRAMES */
-+ /*| RX_CFG2_RCV_MGMT_FRAMES */
-+ /*| RX_CFG2_RCV_PROBE_REQ */
-+ /*| RX_CFG2_RCV_PROBE_RESP */
-+ /*| RX_CFG2_RCV_ACK_FRAMES */
-+ /*| RX_CFG2_RCV_OTHER */
-+ );
-+ break;
-+ case ACX_MODE_MONITOR:
-+ adev->rx_config_1 = (u16) (0
-+ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
-+ /* | RX_CFG1_FILTER_SSID */
-+ /* | RX_CFG1_FILTER_BCAST */
-+ /* | RX_CFG1_RCV_MC_ADDR1 */
-+ /* | RX_CFG1_RCV_MC_ADDR0 */
-+ /* | RX_CFG1_FILTER_ALL_MULTI */
-+ /* | RX_CFG1_FILTER_BSSID */
-+ /* | RX_CFG1_FILTER_MAC */
-+ | RX_CFG1_RCV_PROMISCUOUS
-+ /* | RX_CFG1_INCLUDE_FCS */
-+ /* | RX_CFG1_INCLUDE_PHY_HDR */
-+ );
-+ adev->rx_config_2 = (u16) (0
-+ | RX_CFG2_RCV_ASSOC_REQ
-+ | RX_CFG2_RCV_AUTH_FRAMES
-+ | RX_CFG2_RCV_BEACON_FRAMES
-+ | RX_CFG2_RCV_CONTENTION_FREE
-+ | RX_CFG2_RCV_CTRL_FRAMES
-+ | RX_CFG2_RCV_DATA_FRAMES
-+ | RX_CFG2_RCV_BROKEN_FRAMES
-+ | RX_CFG2_RCV_MGMT_FRAMES
-+ | RX_CFG2_RCV_PROBE_REQ
-+ | RX_CFG2_RCV_PROBE_RESP
-+ | RX_CFG2_RCV_ACK_FRAMES
-+ | RX_CFG2_RCV_OTHER
-+ );
-+ break;
-+ default:
-+ adev->rx_config_1 = (u16) (0
-+ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
-+ /* | RX_CFG1_FILTER_SSID */
-+ /* | RX_CFG1_FILTER_BCAST */
-+ /* | RX_CFG1_RCV_MC_ADDR1 */
-+ /* | RX_CFG1_RCV_MC_ADDR0 */
-+ /* | RX_CFG1_FILTER_ALL_MULTI */
-+ /* | RX_CFG1_FILTER_BSSID */
-+ | RX_CFG1_FILTER_MAC
-+ /* | RX_CFG1_RCV_PROMISCUOUS */
-+ /* | RX_CFG1_INCLUDE_FCS */
-+ /* | RX_CFG1_INCLUDE_PHY_HDR */
-+ );
-+ adev->rx_config_2 = (u16) (0
-+ | RX_CFG2_RCV_ASSOC_REQ
-+ | RX_CFG2_RCV_AUTH_FRAMES
-+ | RX_CFG2_RCV_BEACON_FRAMES
-+ | RX_CFG2_RCV_CONTENTION_FREE
-+ | RX_CFG2_RCV_CTRL_FRAMES
-+ | RX_CFG2_RCV_DATA_FRAMES
-+ /*| RX_CFG2_RCV_BROKEN_FRAMES */
-+ | RX_CFG2_RCV_MGMT_FRAMES
-+ | RX_CFG2_RCV_PROBE_REQ
-+ | RX_CFG2_RCV_PROBE_RESP
-+ /*| RX_CFG2_RCV_ACK_FRAMES */
-+ | RX_CFG2_RCV_OTHER
-+ );
-+ break;
-+ }
-+ adev->rx_config_1 |= RX_CFG1_INCLUDE_RXBUF_HDR;
-+
-+ if ((adev->rx_config_1 & RX_CFG1_INCLUDE_PHY_HDR)
-+ || (adev->firmware_numver >= 0x02000000))
-+ adev->phy_header_len = IS_ACX111(adev) ? 8 : 4;
-+ else
-+ adev->phy_header_len = 0;
-+
-+ log(L_INIT, "setting RXconfig to %04X:%04X\n",
-+ adev->rx_config_1, adev->rx_config_2);
-+ cfg.rx_cfg1 = cpu_to_le16(adev->rx_config_1);
-+ cfg.rx_cfg2 = cpu_to_le16(adev->rx_config_2);
-+ acx_s_configure(adev, &cfg, ACX1xx_IE_RXCONFIG);
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_set_defaults
-+*/
-+void
-+acx_s_set_defaults(acx_device_t *adev)
-+{
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ /* do it before getting settings, prevent bogus channel 0 warning */
-+ adev->channel = 1;
-+
-+ /* query some settings from the card.
-+ * NOTE: for some settings, e.g. CCA and ED (ACX100!), an initial
-+ * query is REQUIRED, otherwise the card won't work correctly! */
-+ adev->get_mask = GETSET_ANTENNA|GETSET_SENSITIVITY|GETSET_STATION_ID|GETSET_REG_DOMAIN;
-+ /* Only ACX100 supports ED and CCA */
-+ if (IS_ACX100(adev))
-+ adev->get_mask |= GETSET_CCA|GETSET_ED_THRESH;
-+
-+ acx_s_update_card_settings(adev);
-+
-+ acx_lock(adev, flags);
-+
-+ /* set our global interrupt mask */
-+#if defined (ACX_MEM)
-+ acxmem_set_interrupt_mask(adev);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_set_interrupt_mask(adev);
-+#endif
-+
-+ adev->led_power = 1; /* LED is active on startup */
-+ adev->brange_max_quality = 60; /* LED blink max quality is 60 */
-+ adev->brange_time_last_state_change = jiffies;
-+
-+ /* copy the MAC address we just got from the card
-+ * into our MAC address used during current 802.11 session */
-+ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr);
-+ MAC_BCAST(adev->ap);
-+
-+ adev->essid_len =
-+ snprintf(adev->essid, sizeof(adev->essid), "STA%02X%02X%02X",
-+ adev->dev_addr[3], adev->dev_addr[4], adev->dev_addr[5]);
-+ adev->essid_active = 1;
-+
-+ /* we have a nick field to waste, so why not abuse it
-+ * to announce the driver version? ;-) */
-+ strncpy(adev->nick, "acx " ACX_RELEASE, IW_ESSID_MAX_SIZE);
-+
-+#if defined (ACX_MEM)
-+ adev->reg_dom_id = adev->cfgopt_domains.list[0];
-+#else
-+ if (IS_PCI(adev)) { /* FIXME: this should be made to apply to USB, too! */
-+ /* first regulatory domain entry in EEPROM == default reg. domain */
-+ adev->reg_dom_id = adev->cfgopt_domains.list[0];
-+ }
-+#endif
-+
-+ /* 0xffff would be better, but then we won't get a "scan complete"
-+ * interrupt, so our current infrastructure will fail: */
-+ adev->scan_count = 1;
-+ adev->scan_mode = ACX_SCAN_OPT_ACTIVE;
-+ adev->scan_duration = 100;
-+ adev->scan_probe_delay = 200;
-+ /* reported to break scanning: adev->scan_probe_delay = adev->cfgopt_probe_delay; */
-+ adev->scan_rate = ACX_SCAN_RATE_1;
-+
-+ adev->mode = ACX_MODE_2_STA;
-+ adev->auth_alg = WLAN_AUTH_ALG_OPENSYSTEM;
-+ adev->listen_interval = 100;
-+ adev->beacon_interval = DEFAULT_BEACON_INTERVAL;
-+ adev->dtim_interval = DEFAULT_DTIM_INTERVAL;
-+
-+ adev->msdu_lifetime = DEFAULT_MSDU_LIFETIME;
-+
-+ adev->rts_threshold = DEFAULT_RTS_THRESHOLD;
-+ adev->frag_threshold = 2346;
-+
-+ /* use standard default values for retry limits */
-+ adev->short_retry = 7; /* max. retries for (short) non-RTS packets */
-+ adev->long_retry = 4; /* max. retries for long (RTS) packets */
-+
-+ adev->preamble_mode = 2; /* auto */
-+ adev->fallback_threshold = 3;
-+ adev->stepup_threshold = 10;
-+ adev->rate_bcast = RATE111_1;
-+ adev->rate_bcast100 = RATE100_1;
-+ adev->rate_basic = RATE111_1 | RATE111_2;
-+ adev->rate_auto = 1;
-+ if (IS_ACX111(adev)) {
-+ adev->rate_oper = RATE111_ALL;
-+ } else {
-+ adev->rate_oper = RATE111_ACX100_COMPAT;
-+ }
-+
-+ /* Supported Rates element - the rates here are given in units of
-+ * 500 kbit/s, plus 0x80 added. See 802.11-1999.pdf item 7.3.2.2 */
-+ acx_l_update_ratevector(adev);
-+
-+ /* set some more defaults */
-+ if (IS_ACX111(adev)) {
-+ /* 30mW (15dBm) is default, at least in my acx111 card: */
-+ adev->tx_level_dbm = 15;
-+ } else {
-+ /* don't use max. level, since it might be dangerous
-+ * (e.g. WRT54G people experience
-+ * excessive Tx power damage!) */
-+ adev->tx_level_dbm = 18;
-+ /*
-+ * Lower power for the iPaq hx4700
-+ */
-+ if (IS_MEM(adev)) {
-+ adev->tx_level_dbm = 14;
-+ }
-+ }
-+ /* adev->tx_level_auto = 1; */
-+ if (IS_ACX111(adev)) {
-+ /* start with sensitivity level 1 out of 3: */
-+ adev->sensitivity = 1;
-+ }
-+
-+/* #define ENABLE_POWER_SAVE */
-+#ifdef ENABLE_POWER_SAVE
-+ adev->ps_wakeup_cfg = PS_CFG_ENABLE | PS_CFG_WAKEUP_ALL_BEAC;
-+ adev->ps_listen_interval = 1;
-+ adev->ps_options = PS_OPT_ENA_ENHANCED_PS | PS_OPT_TX_PSPOLL | PS_OPT_STILL_RCV_BCASTS;
-+ adev->ps_hangover_period = 30;
-+ adev->ps_enhanced_transition_time = 0;
-+#else
-+ adev->ps_wakeup_cfg = 0;
-+ adev->ps_listen_interval = 0;
-+ adev->ps_options = 0;
-+ adev->ps_hangover_period = 0;
-+ adev->ps_enhanced_transition_time = 0;
-+#endif
-+
-+ /* These settings will be set in fw on ifup */
-+ adev->set_mask = 0
-+ | GETSET_RETRY
-+ | SET_MSDU_LIFETIME
-+ /* configure card to do rate fallback when in auto rate mode */
-+ | SET_RATE_FALLBACK
-+ | SET_RXCONFIG
-+ | GETSET_TXPOWER
-+ /* better re-init the antenna value we got above */
-+ | GETSET_ANTENNA
-+#if POWER_SAVE_80211
-+ | GETSET_POWER_80211
-+#endif
-+ ;
-+
-+ acx_unlock(adev, flags);
-+ acx_lock_unhold(); /* hold time 844814 CPU ticks @2GHz */
-+
-+ acx_s_initialize_rx_config(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** FIXME: this should be solved in a general way for all radio types
-+** by decoding the radio firmware module,
-+** since it probably has some standard structure describing how to
-+** set the power level of the radio module which it controls.
-+** Or maybe not, since the radio module probably has a function interface
-+** instead which then manages Tx level programming :-\
-+*/
-+static int
-+acx111_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ struct acx111_ie_tx_level tx_level;
-+
-+ /* my acx111 card has two power levels in its configoptions (== EEPROM):
-+ * 1 (30mW) [15dBm]
-+ * 2 (10mW) [10dBm]
-+ * For now, just assume all other acx111 cards have the same.
-+ * FIXME: Ideally we would query it here, but we first need a
-+ * standard way to query individual configoptions easily.
-+ * Well, now we have proper cfgopt txpower variables, but this still
-+ * hasn't been done yet, since it also requires dBm <-> mW conversion here... */
-+ if (level_dbm <= 12) {
-+ tx_level.level = 2; /* 10 dBm */
-+ adev->tx_level_dbm = 10;
-+ } else {
-+ tx_level.level = 1; /* 15 dBm */
-+ adev->tx_level_dbm = 15;
-+ }
-+ if (level_dbm != adev->tx_level_dbm)
-+ log(L_INIT, "acx111 firmware has specific "
-+ "power levels only: adjusted %d dBm to %d dBm!\n",
-+ level_dbm, adev->tx_level_dbm);
-+
-+ return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
-+}
-+
-+static int
-+acx_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ if (IS_ACX111(adev)) {
-+ return acx111_s_set_tx_level(adev, level_dbm);
-+ }
-+#if defined (ACX_MEM)
-+ return acx100mem_s_set_tx_level(adev, level_dbm);
-+#else
-+ if (IS_PCI(adev)) {
-+ return acx100pci_s_set_tx_level(adev, level_dbm);
-+ }
-+#endif
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#ifdef UNUSED
-+/* Returns the current tx level (ACX111) */
-+static u8
-+acx111_s_get_tx_level(acx_device_t *adev)
-+{
-+ struct acx111_ie_tx_level tx_level;
-+
-+ tx_level.level = 0;
-+ acx_s_interrogate(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
-+ return tx_level.level;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_l_rxmonitor
-+** Called from IRQ context only
-+*/
-+static void
-+acx_l_rxmonitor(acx_device_t *adev, const rxbuffer_t *rxbuf)
-+{
-+ wlansniffrm_t *msg;
-+ struct sk_buff *skb;
-+ void *datap;
-+ unsigned int skb_len;
-+ int payload_offset;
-+
-+ FN_ENTER;
-+
-+ /* we are in big luck: the acx100 doesn't modify any of the fields */
-+ /* in the 802.11 frame. just pass this packet into the PF_PACKET */
-+ /* subsystem. yeah. */
-+ payload_offset = ((u8*)acx_get_wlan_hdr(adev, rxbuf) - (u8*)rxbuf);
-+ skb_len = RXBUF_BYTES_USED(rxbuf) - payload_offset;
-+
-+ /* sanity check */
-+ if (unlikely(skb_len > WLAN_A4FR_MAXLEN_WEP)) {
-+ printk("%s: monitor mode panic: oversized frame!\n",
-+ adev->ndev->name);
-+ goto end;
-+ }
-+
-+ if (adev->ndev->type == ARPHRD_IEEE80211_PRISM)
-+ skb_len += sizeof(*msg);
-+
-+ /* allocate skb */
-+ skb = dev_alloc_skb(skb_len);
-+ if (unlikely(!skb)) {
-+ printk("%s: no memory for skb (%u bytes)\n",
-+ adev->ndev->name, skb_len);
-+ goto end;
-+ }
-+
-+ skb_put(skb, skb_len);
-+
-+ if (adev->ndev->type == ARPHRD_IEEE80211) {
-+ /* when in raw 802.11 mode, just copy frame as-is */
-+ datap = skb->data;
-+ } else if (adev->ndev->type == ARPHRD_IEEE80211_PRISM) {
-+ /* emulate prism header */
-+ msg = (wlansniffrm_t*)skb->data;
-+ datap = msg + 1;
-+
-+ msg->msgcode = WLANSNIFFFRM;
-+ msg->msglen = sizeof(*msg);
-+ strncpy(msg->devname, adev->ndev->name, sizeof(msg->devname)-1);
-+ msg->devname[sizeof(msg->devname)-1] = '\0';
-+
-+ msg->hosttime.did = WLANSNIFFFRM_hosttime;
-+ msg->hosttime.status = WLANITEM_STATUS_data_ok;
-+ msg->hosttime.len = 4;
-+ msg->hosttime.data = jiffies;
-+
-+ msg->mactime.did = WLANSNIFFFRM_mactime;
-+ msg->mactime.status = WLANITEM_STATUS_data_ok;
-+ msg->mactime.len = 4;
-+ msg->mactime.data = rxbuf->time;
-+
-+ msg->channel.did = WLANSNIFFFRM_channel;
-+ msg->channel.status = WLANITEM_STATUS_data_ok;
-+ msg->channel.len = 4;
-+ msg->channel.data = adev->channel;
-+
-+ msg->rssi.did = WLANSNIFFFRM_rssi;
-+ msg->rssi.status = WLANITEM_STATUS_no_value;
-+ msg->rssi.len = 4;
-+ msg->rssi.data = 0;
-+
-+ msg->sq.did = WLANSNIFFFRM_sq;
-+ msg->sq.status = WLANITEM_STATUS_no_value;
-+ msg->sq.len = 4;
-+ msg->sq.data = 0;
-+
-+ msg->signal.did = WLANSNIFFFRM_signal;
-+ msg->signal.status = WLANITEM_STATUS_data_ok;
-+ msg->signal.len = 4;
-+ msg->signal.data = rxbuf->phy_snr;
-+
-+ msg->noise.did = WLANSNIFFFRM_noise;
-+ msg->noise.status = WLANITEM_STATUS_data_ok;
-+ msg->noise.len = 4;
-+ msg->noise.data = rxbuf->phy_level;
-+
-+ msg->rate.did = WLANSNIFFFRM_rate;
-+ msg->rate.status = WLANITEM_STATUS_data_ok;
-+ msg->rate.len = 4;
-+ msg->rate.data = rxbuf->phy_plcp_signal / 5;
-+
-+ msg->istx.did = WLANSNIFFFRM_istx;
-+ msg->istx.status = WLANITEM_STATUS_data_ok;
-+ msg->istx.len = 4;
-+ msg->istx.data = 0; /* tx=0: it's not a tx packet */
-+
-+ skb_len -= sizeof(*msg);
-+
-+ msg->frmlen.did = WLANSNIFFFRM_signal;
-+ msg->frmlen.status = WLANITEM_STATUS_data_ok;
-+ msg->frmlen.len = 4;
-+ msg->frmlen.data = skb_len;
-+ } else {
-+ printk("acx: unsupported netdev type %d!\n", adev->ndev->type);
-+ dev_kfree_skb(skb);
-+ return;
-+ }
-+
-+ /* sanity check (keep it here) */
-+ if (unlikely((int)skb_len < 0)) {
-+ printk("acx: skb_len=%d. Driver bug, please report\n", (int)skb_len);
-+ dev_kfree_skb(skb);
-+ return;
-+ }
-+ memcpy(datap, ((unsigned char*)rxbuf)+payload_offset, skb_len);
-+
-+ skb->dev = adev->ndev;
-+ skb->dev->last_rx = jiffies;
-+
-+ skb_reset_mac_header(skb);
-+ skb->ip_summed = CHECKSUM_NONE;
-+ skb->pkt_type = PACKET_OTHERHOST;
-+ skb->protocol = htons(ETH_P_80211_RAW);
-+ netif_rx(skb);
-+
-+ adev->stats.rx_packets++;
-+ adev->stats.rx_bytes += skb->len;
-+
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_rx_ieee802_11_frame
-+**
-+** Called from IRQ context only
-+*/
-+
-+/* All these contortions are for saner dup logging
-+**
-+** We want: (a) to know about excessive dups
-+** (b) to not spam kernel log about occasional dups
-+**
-+** 1/64 threshold was chosen by running "ping -A"
-+** It gave "rx: 59 DUPs in 2878 packets" only with 4 parallel
-+** "ping -A" streams running. */
-+/* 2005-10-11: bumped up to 1/8
-+** subtract a $smallint from dup_count in order to
-+** avoid "2 DUPs in 19 packets" messages */
-+static inline int
-+acx_l_handle_dup(acx_device_t *adev, u16 seq)
-+{
-+ if (adev->dup_count) {
-+ adev->nondup_count++;
-+ if (time_after(jiffies, adev->dup_msg_expiry)) {
-+ /* Log only if more than 1 dup in 64 packets */
-+ if (adev->nondup_count/8 < adev->dup_count-5) {
-+ printk(KERN_INFO "%s: rx: %d DUPs in "
-+ "%d packets received in 10 secs\n",
-+ adev->ndev->name,
-+ adev->dup_count,
-+ adev->nondup_count);
-+ }
-+ adev->dup_count = 0;
-+ adev->nondup_count = 0;
-+ }
-+ }
-+ if (unlikely(seq == adev->last_seq_ctrl)) {
-+ if (!adev->dup_count++)
-+ adev->dup_msg_expiry = jiffies + 10*HZ;
-+ adev->stats.rx_errors++;
-+ return 1; /* a dup */
-+ }
-+ adev->last_seq_ctrl = seq;
-+ return 0;
-+}
-+
-+static int
-+acx_l_rx_ieee802_11_frame(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ unsigned int ftype, fstype;
-+ const wlan_hdr_t *hdr;
-+ int result = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+
-+ /* see IEEE 802.11-1999.pdf chapter 7 "MAC frame formats" */
-+ if (unlikely((hdr->fc & WF_FC_PVERi) != 0)) {
-+ printk_ratelimited(KERN_INFO "rx: unsupported 802.11 protocol\n");
-+ goto end;
-+ }
-+
-+ ftype = hdr->fc & WF_FC_FTYPEi;
-+ fstype = hdr->fc & WF_FC_FSTYPEi;
-+
-+ switch (ftype) {
-+ /* check data frames first, for speed */
-+ case WF_FTYPE_DATAi:
-+ switch (fstype) {
-+ case WF_FSTYPE_DATAONLYi:
-+ if (acx_l_handle_dup(adev, hdr->seq))
-+ break; /* a dup, simply discard it */
-+
-+ /* TODO:
-+ if (WF_FC_FROMTODSi == (hdr->fc & WF_FC_FROMTODSi)) {
-+ result = acx_l_process_data_frame_wds(adev, rxbuf);
-+ break;
-+ }
-+ */
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_3_AP:
-+ result = acx_l_process_data_frame_master(adev, rxbuf);
-+ break;
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ result = acx_l_process_data_frame_client(adev, rxbuf);
-+ break;
-+ }
-+ case WF_FSTYPE_DATA_CFACKi:
-+ case WF_FSTYPE_DATA_CFPOLLi:
-+ case WF_FSTYPE_DATA_CFACK_CFPOLLi:
-+ case WF_FSTYPE_CFPOLLi:
-+ case WF_FSTYPE_CFACK_CFPOLLi:
-+ /* see above.
-+ acx_process_class_frame(adev, rxbuf, 3); */
-+ break;
-+ case WF_FSTYPE_NULLi:
-+ /* acx_l_process_NULL_frame(adev, rxbuf, 3); */
-+ break;
-+ /* FIXME: same here, see above */
-+ case WF_FSTYPE_CFACKi:
-+ default:
-+ break;
-+ }
-+ break;
-+ case WF_FTYPE_MGMTi:
-+ result = acx_l_process_mgmt_frame(adev, rxbuf);
-+ break;
-+ case WF_FTYPE_CTLi:
-+ if (fstype == WF_FSTYPE_PSPOLLi)
-+ result = OK;
-+ /* this call is irrelevant, since
-+ * acx_process_class_frame is a stub, so return
-+ * immediately instead.
-+ * return acx_process_class_frame(adev, rxbuf, 3); */
-+ break;
-+ default:
-+ break;
-+ }
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_rxbuf
-+**
-+** NB: used by USB code also
-+*/
-+void
-+acx_l_process_rxbuf(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ struct wlan_hdr *hdr;
-+ unsigned int qual;
-+ int buf_len;
-+ u16 fc;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+ fc = le16_to_cpu(hdr->fc);
-+ /* length of frame from control field to first byte of FCS */
-+ buf_len = RXBUF_BYTES_RCVD(adev, rxbuf);
-+
-+ if ( ((WF_FC_FSTYPE & fc) != WF_FSTYPE_BEACON)
-+ || (acx_debug & L_XFER_BEACON)
-+ ) {
-+ log(L_XFER|L_DATA, "rx: %s "
-+ "time:%u len:%u signal:%u SNR:%u macstat:%02X "
-+ "phystat:%02X phyrate:%u status:%u\n",
-+ acx_get_packet_type_string(fc),
-+ le32_to_cpu(rxbuf->time),
-+ buf_len,
-+ acx_signal_to_winlevel(rxbuf->phy_level),
-+ acx_signal_to_winlevel(rxbuf->phy_snr),
-+ rxbuf->mac_status,
-+ rxbuf->phy_stat_baseband,
-+ rxbuf->phy_plcp_signal,
-+ adev->status);
-+ }
-+
-+ if (unlikely(acx_debug & L_DATA)) {
-+ printk("rx: 802.11 buf[%u]: ", buf_len);
-+ acx_dump_bytes(hdr, buf_len);
-+ }
-+
-+ /* FIXME: should check for Rx errors (rxbuf->mac_status?
-+ * discard broken packets - but NOT for monitor!)
-+ * and update Rx packet statistics here */
-+
-+ if (unlikely(adev->mode == ACX_MODE_MONITOR)) {
-+ acx_l_rxmonitor(adev, rxbuf);
-+ } else if (likely(buf_len >= WLAN_HDR_A3_LEN)) {
-+ acx_l_rx_ieee802_11_frame(adev, rxbuf);
-+ } else {
-+ log(L_DEBUG|L_XFER|L_DATA,
-+ "rx: NOT receiving packet (%s): "
-+ "size too small (%u)\n",
-+ acx_get_packet_type_string(fc),
-+ buf_len);
-+ }
-+
-+ /* Now check Rx quality level, AFTER processing packet.
-+ * I tried to figure out how to map these levels to dBm
-+ * values, but for the life of me I really didn't
-+ * manage to get it. Either these values are not meant to
-+ * be expressed in dBm, or it's some pretty complicated
-+ * calculation. */
-+
-+#ifdef FROM_SCAN_SOURCE_ONLY
-+ /* only consider packets originating from the MAC
-+ * address of the device that's managing our BSSID.
-+ * Disable it for now, since it removes information (levels
-+ * from different peers) and slows the Rx path. */
-+ if (adev->ap_client
-+ && mac_is_equal(hdr->a2, adev->ap_client->address)) {
-+#endif
-+ adev->wstats.qual.level = acx_signal_to_winlevel(rxbuf->phy_level);
-+ adev->wstats.qual.noise = acx_signal_to_winlevel(rxbuf->phy_snr);
-+#ifndef OLD_QUALITY
-+ qual = acx_signal_determine_quality(adev->wstats.qual.level,
-+ adev->wstats.qual.noise);
-+#else
-+ qual = (adev->wstats.qual.noise <= 100) ?
-+ 100 - adev->wstats.qual.noise : 0;
-+#endif
-+ adev->wstats.qual.qual = qual;
-+ adev->wstats.qual.updated = 7; /* all 3 indicators updated */
-+#ifdef FROM_SCAN_SOURCE_ONLY
-+ }
-+#endif
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_handle_txrate_auto
-+**
-+** Theory of operation:
-+** client->rate_cap is a bitmask of rates client is capable of.
-+** client->rate_cfg is a bitmask of allowed (configured) rates.
-+** It is set as a result of iwconfig rate N [auto]
-+** or iwpriv set_rates "N,N,N N,N,N" commands.
-+** It can be fixed (e.g. 0x0080 == 18Mbit only),
-+** auto (0x00ff == 18Mbit or any lower value),
-+** and code handles any bitmask (0x1081 == try 54Mbit,18Mbit,1Mbit _only_).
-+**
-+** client->rate_cur is a value for rate111 field in tx descriptor.
-+** It is always set to txrate_cfg sans zero or more most significant
-+** bits. This routine handles selection of new rate_cur value depending on
-+** outcome of last tx event.
-+**
-+** client->rate_100 is a precalculated rate value for acx100
-+** (we can do without it, but will need to calculate it on each tx).
-+**
-+** You cannot configure mixed usage of 5.5 and/or 11Mbit rate
-+** with PBCC and CCK modulation. Either both at CCK or both at PBCC.
-+** In theory you can implement it, but so far it is considered not worth doing.
-+**
-+** 22Mbit, of course, is PBCC always. */
-+
-+/* maps acx100 tx descr rate field to acx111 one */
-+static u16
-+rate100to111(u8 r)
-+{
-+ switch (r) {
-+ case RATE100_1: return RATE111_1;
-+ case RATE100_2: return RATE111_2;
-+ case RATE100_5:
-+ case (RATE100_5 | RATE100_PBCC511): return RATE111_5;
-+ case RATE100_11:
-+ case (RATE100_11 | RATE100_PBCC511): return RATE111_11;
-+ case RATE100_22: return RATE111_22;
-+ default:
-+ printk("acx: unexpected acx100 txrate: %u! "
-+ "Please report\n", r);
-+ return RATE111_1;
-+ }
-+}
-+
-+
-+void
-+acx_l_handle_txrate_auto(acx_device_t *adev, struct client *txc,
-+ u16 cur, u8 rate100, u16 rate111,
-+ u8 error, int pkts_to_ignore)
-+{
-+ u16 sent_rate;
-+ int slower_rate_was_used;
-+
-+ /* vda: hmm. current code will do this:
-+ ** 1. send packets at 11 Mbit, stepup++
-+ ** 2. will try to send at 22Mbit. hardware will see no ACK,
-+ ** retries at 11Mbit, success. code notes that used rate
-+ ** is lower. stepup = 0, fallback++
-+ ** 3. repeat step 2 fallback_count times. Fall back to
-+ ** 11Mbit. go to step 1.
-+ ** If stepup_count is large (say, 16) and fallback_count
-+ ** is small (3), this wouldn't be too bad wrt throughput */
-+
-+ if (unlikely(!cur)) {
-+ printk("acx: BUG! ratemask is empty\n");
-+ return; /* or else we may lock up the box */
-+ }
-+
-+ /* do some preparations, i.e. calculate the one rate that was
-+ * used to send this packet */
-+ if (IS_ACX111(adev)) {
-+ sent_rate = 1 << highest_bit(rate111 & RATE111_ALL);
-+ } else {
-+ sent_rate = rate100to111(rate100);
-+ }
-+ /* sent_rate has only one bit set now, corresponding to tx rate
-+ * which was used by hardware to tx this particular packet */
-+
-+ /* now do the actual auto rate management */
-+ log(L_XFER, "tx: %sclient=%p/"MACSTR" used=%04X cur=%04X cfg=%04X "
-+ "__=%u/%u ^^=%u/%u\n",
-+ (txc->ignore_count > 0) ? "[IGN] " : "",
-+ txc, MAC(txc->address), sent_rate, cur, txc->rate_cfg,
-+ txc->fallback_count, adev->fallback_threshold,
-+ txc->stepup_count, adev->stepup_threshold
-+ );
-+
-+ /* we need to ignore old packets already in the tx queue since
-+ * they use older rate bytes configured before our last rate change,
-+ * otherwise our mechanism will get confused by interpreting old data.
-+ * Do it after logging above */
-+ if (txc->ignore_count) {
-+ txc->ignore_count--;
-+ return;
-+ }
-+
-+ /* true only if the only nonzero bit in sent_rate is
-+ ** less significant than highest nonzero bit in cur */
-+ slower_rate_was_used = ( cur > ((sent_rate<<1)-1) );
-+
-+ if (slower_rate_was_used || error) {
-+ txc->stepup_count = 0;
-+ if (++txc->fallback_count <= adev->fallback_threshold)
-+ return;
-+ txc->fallback_count = 0;
-+
-+ /* clear highest 1 bit in cur */
-+ sent_rate = RATE111_54;
-+ while (!(cur & sent_rate)) sent_rate >>= 1;
-+ CLEAR_BIT(cur, sent_rate);
-+ if (!cur) /* we can't disable all rates! */
-+ cur = sent_rate;
-+ log(L_XFER, "tx: falling back to ratemask %04X\n", cur);
-+
-+ } else { /* there was neither lower rate nor error */
-+ txc->fallback_count = 0;
-+ if (++txc->stepup_count <= adev->stepup_threshold)
-+ return;
-+ txc->stepup_count = 0;
-+
-+ /* Sanitize. Sort of not needed, but I dont trust hw that much...
-+ ** what if it can report bogus tx rates sometimes? */
-+ while (!(cur & sent_rate)) sent_rate >>= 1;
-+
-+ /* try to find a higher sent_rate that isn't yet in our
-+ * current set, but is an allowed cfg */
-+ while (1) {
-+ sent_rate <<= 1;
-+ if (sent_rate > txc->rate_cfg)
-+ /* no higher rates allowed by config */
-+ return;
-+ if (!(cur & sent_rate) && (txc->rate_cfg & sent_rate))
-+ /* found */
-+ break;
-+ /* not found, try higher one */
-+ }
-+ SET_BIT(cur, sent_rate);
-+ log(L_XFER, "tx: stepping up to ratemask %04X\n", cur);
-+ }
-+
-+ txc->rate_cur = cur;
-+ txc->ignore_count = pkts_to_ignore;
-+ /* calculate acx100 style rate byte if needed */
-+ if (IS_ACX100(adev)) {
-+ txc->rate_100 = acx_bitpos2rate100[highest_bit(cur)];
-+ }
-+}
-+
-+
-+/***********************************************************************
-+** acx_i_start_xmit
-+**
-+** Called by network core. Can be called outside of process context.
-+*/
-+int
-+acx_i_start_xmit(struct sk_buff *skb, struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ tx_t *tx;
-+ void *txbuf;
-+ unsigned long flags;
-+ int txresult = NOT_OK;
-+ int len;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(!skb)) {
-+ /* indicate success */
-+ txresult = OK;
-+ goto end_no_unlock;
-+ }
-+ if (unlikely(!adev)) {
-+ goto end_no_unlock;
-+ }
-+
-+ acx_lock(adev, flags);
-+
-+ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) {
-+ goto end;
-+ }
-+ if (unlikely(adev->mode == ACX_MODE_OFF)) {
-+ goto end;
-+ }
-+ if (unlikely(acx_queue_stopped(ndev))) {
-+ log(L_DEBUG, "%s: called when queue stopped\n", __func__);
-+ goto end;
-+ }
-+ if (unlikely(ACX_STATUS_4_ASSOCIATED != adev->status)) {
-+ log(L_XFER, "trying to xmit, but not associated yet: "
-+ "aborting...\n");
-+ /* silently drop the packet, since we're not connected yet */
-+ txresult = OK;
-+ /* ...but indicate an error nevertheless */
-+ adev->stats.tx_errors++;
-+ goto end;
-+ }
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (unlikely(!tx)) {
-+#ifndef ACX_MEM
-+ /*
-+ * generic slave interface has to make do with the tiny amount, around
-+ * 7k, of transmit buffer space on the ACX itself. It is likely this will
-+ * frequently be full.
-+ */
-+ printk_ratelimited("%s: start_xmit: txdesc ring is full, "
-+ "dropping tx\n", ndev->name);
-+#endif
-+ txresult = NOT_OK;
-+ goto end;
-+ }
-+
-+ txbuf = acx_l_get_txbuf(adev, tx);
-+ if (unlikely(!txbuf)) {
-+ /* Card was removed */
-+ txresult = NOT_OK;
-+ acx_l_dealloc_tx(adev, tx);
-+ goto end;
-+ }
-+ len = acx_ether_to_txbuf(adev, txbuf, skb);
-+ if (unlikely(len < 0)) {
-+ /* Error in packet conversion */
-+ txresult = NOT_OK;
-+ acx_l_dealloc_tx(adev, tx);
-+ goto end;
-+ }
-+ acx_l_tx_data(adev, tx, len);
-+ ndev->trans_start = jiffies;
-+
-+ txresult = OK;
-+ adev->stats.tx_packets++;
-+ adev->stats.tx_bytes += skb->len;
-+
-+end:
-+ acx_unlock(adev, flags);
-+
-+end_no_unlock:
-+ if ((txresult == OK) && skb)
-+ dev_kfree_skb_any(skb);
-+
-+ FN_EXIT1(txresult);
-+ return txresult;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_update_ratevector
-+**
-+** Updates adev->rate_supported[_len] according to rate_{basic,oper}
-+*/
-+const u8
-+acx_bitpos2ratebyte[] = {
-+ DOT11RATEBYTE_1,
-+ DOT11RATEBYTE_2,
-+ DOT11RATEBYTE_5_5,
-+ DOT11RATEBYTE_6_G,
-+ DOT11RATEBYTE_9_G,
-+ DOT11RATEBYTE_11,
-+ DOT11RATEBYTE_12_G,
-+ DOT11RATEBYTE_18_G,
-+ DOT11RATEBYTE_22,
-+ DOT11RATEBYTE_24_G,
-+ DOT11RATEBYTE_36_G,
-+ DOT11RATEBYTE_48_G,
-+ DOT11RATEBYTE_54_G,
-+};
-+
-+void
-+acx_l_update_ratevector(acx_device_t *adev)
-+{
-+ u16 bcfg = adev->rate_basic;
-+ u16 ocfg = adev->rate_oper;
-+ u8 *supp = adev->rate_supported;
-+ const u8 *dot11 = acx_bitpos2ratebyte;
-+
-+ FN_ENTER;
-+
-+ while (ocfg) {
-+ if (ocfg & 1) {
-+ *supp = *dot11;
-+ if (bcfg & 1) {
-+ *supp |= 0x80;
-+ }
-+ supp++;
-+ }
-+ dot11++;
-+ ocfg >>= 1;
-+ bcfg >>= 1;
-+ }
-+ adev->rate_supported_len = supp - adev->rate_supported;
-+ if (acx_debug & L_ASSOC) {
-+ printk("new ratevector: ");
-+ acx_dump_bytes(adev->rate_supported, adev->rate_supported_len);
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_init
-+*/
-+static void
-+acx_l_sta_list_init(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+ memset(adev->sta_hash_tab, 0, sizeof(adev->sta_hash_tab));
-+ memset(adev->sta_list, 0, sizeof(adev->sta_list));
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_get_from_hash
-+*/
-+static inline client_t*
-+acx_l_sta_list_get_from_hash(acx_device_t *adev, const u8 *address)
-+{
-+ return adev->sta_hash_tab[address[5] % VEC_SIZE(adev->sta_hash_tab)];
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_get
-+*/
-+client_t*
-+acx_l_sta_list_get(acx_device_t *adev, const u8 *address)
-+{
-+ client_t *client;
-+ FN_ENTER;
-+ client = acx_l_sta_list_get_from_hash(adev, address);
-+ while (client) {
-+ if (mac_is_equal(address, client->address)) {
-+ client->mtime = jiffies;
-+ break;
-+ }
-+ client = client->next;
-+ }
-+ FN_EXIT0;
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_del
-+*/
-+void
-+acx_l_sta_list_del(acx_device_t *adev, client_t *victim)
-+{
-+ client_t *client, *next;
-+
-+ client = acx_l_sta_list_get_from_hash(adev, victim->address);
-+ next = client;
-+ /* tricky. next = client on first iteration only,
-+ ** on all other iters next = client->next */
-+ while (next) {
-+ if (next == victim) {
-+ client->next = victim->next;
-+ /* Overkill */
-+ memset(victim, 0, sizeof(*victim));
-+ break;
-+ }
-+ client = next;
-+ next = client->next;
-+ }
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_alloc
-+**
-+** Never fails - will evict oldest client if needed
-+*/
-+static client_t*
-+acx_l_sta_list_alloc(acx_device_t *adev)
-+{
-+ int i;
-+ unsigned long age, oldest_age;
-+ client_t *client, *oldest;
-+
-+ FN_ENTER;
-+
-+ oldest = &adev->sta_list[0];
-+ oldest_age = 0;
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ client = &adev->sta_list[i];
-+
-+ if (!client->used) {
-+ goto found;
-+ } else {
-+ age = jiffies - client->mtime;
-+ if (oldest_age < age) {
-+ oldest_age = age;
-+ oldest = client;
-+ }
-+ }
-+ }
-+ acx_l_sta_list_del(adev, oldest);
-+ client = oldest;
-+found:
-+ memset(client, 0, sizeof(*client));
-+ FN_EXIT0;
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_add
-+**
-+** Never fails - will evict oldest client if needed
-+*/
-+/* In case we will reimplement it differently... */
-+#define STA_LIST_ADD_CAN_FAIL 0
-+
-+static client_t*
-+acx_l_sta_list_add(acx_device_t *adev, const u8 *address)
-+{
-+ client_t *client;
-+ int index;
-+
-+ FN_ENTER;
-+
-+ client = acx_l_sta_list_alloc(adev);
-+
-+ client->mtime = jiffies;
-+ MAC_COPY(client->address, address);
-+ client->used = CLIENT_EXIST_1;
-+ client->auth_alg = WLAN_AUTH_ALG_SHAREDKEY;
-+ client->auth_step = 1;
-+ /* give some tentative peer rate values
-+ ** (needed because peer may do auth without probing us first,
-+ ** thus we'll have no idea of peer's ratevector yet).
-+ ** Will be overwritten by scanning or assoc code */
-+ client->rate_cap = adev->rate_basic;
-+ client->rate_cfg = adev->rate_basic;
-+ client->rate_cur = 1 << lowest_bit(adev->rate_basic);
-+
-+ index = address[5] % VEC_SIZE(adev->sta_hash_tab);
-+ client->next = adev->sta_hash_tab[index];
-+ adev->sta_hash_tab[index] = client;
-+
-+ acxlog_mac(L_ASSOC, "sta_list_add: sta=", address, "\n");
-+
-+ FN_EXIT0;
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_get_or_add
-+**
-+** Never fails - will evict oldest client if needed
-+*/
-+static client_t*
-+acx_l_sta_list_get_or_add(acx_device_t *adev, const u8 *address)
-+{
-+ client_t *client = acx_l_sta_list_get(adev, address);
-+ if (!client)
-+ client = acx_l_sta_list_add(adev, address);
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_set_status
-+**
-+** This function is called in many atomic regions, must not sleep
-+**
-+** This function does not need locking UNLESS you call it
-+** as acx_set_status(ACX_STATUS_4_ASSOCIATED), bacause this can
-+** wake queue. This can race with stop_queue elsewhere.
-+** See acx_stop_queue comment. */
-+void
-+acx_set_status(acx_device_t *adev, u16 new_status)
-+{
-+#define QUEUE_OPEN_AFTER_ASSOC 1 /* this really seems to be needed now */
-+ u16 old_status = adev->status;
-+
-+ FN_ENTER;
-+
-+ log(L_ASSOC, "%s(%d):%s\n",
-+ __func__, new_status, acx_get_status_name(new_status));
-+
-+ /* wireless_send_event never sleeps */
-+ if (ACX_STATUS_4_ASSOCIATED == new_status) {
-+ union iwreq_data wrqu;
-+
-+ wrqu.data.length = 0;
-+ wrqu.data.flags = 0;
-+ wireless_send_event(adev->ndev, SIOCGIWSCAN, &wrqu, NULL);
-+
-+ wrqu.data.length = 0;
-+ wrqu.data.flags = 0;
-+ MAC_COPY(wrqu.ap_addr.sa_data, adev->bssid);
-+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-+ wireless_send_event(adev->ndev, SIOCGIWAP, &wrqu, NULL);
-+ } else {
-+ union iwreq_data wrqu;
-+
-+ /* send event with empty BSSID to indicate we're not associated */
-+ MAC_ZERO(wrqu.ap_addr.sa_data);
-+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-+ wireless_send_event(adev->ndev, SIOCGIWAP, &wrqu, NULL);
-+ }
-+
-+ adev->status = new_status;
-+
-+ switch (new_status) {
-+ case ACX_STATUS_1_SCANNING:
-+ adev->scan_retries = 0;
-+ /* 1.0 s initial scan time */
-+ acx_set_timer(adev, 1000000);
-+ break;
-+ case ACX_STATUS_2_WAIT_AUTH:
-+ case ACX_STATUS_3_AUTHENTICATED:
-+ adev->auth_or_assoc_retries = 0;
-+ acx_set_timer(adev, 1500000); /* 1.5 s */
-+ break;
-+ }
-+
-+#if QUEUE_OPEN_AFTER_ASSOC
-+ if (new_status == ACX_STATUS_4_ASSOCIATED) {
-+ if (old_status < ACX_STATUS_4_ASSOCIATED) {
-+ /* ah, we're newly associated now,
-+ * so let's indicate carrier */
-+ acx_carrier_on(adev->ndev, "after association");
-+ acx_wake_queue(adev->ndev, "after association");
-+ }
-+ } else {
-+ /* not associated any more, so let's kill carrier */
-+ if (old_status >= ACX_STATUS_4_ASSOCIATED) {
-+ acx_carrier_off(adev->ndev, "after losing association");
-+ acx_stop_queue(adev->ndev, "after losing association");
-+ }
-+ }
-+#endif
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_i_timer
-+**
-+** Fires up periodically. Used to kick scan/auth/assoc if something goes wrong
-+*/
-+void
-+acx_i_timer(unsigned long address)
-+{
-+ unsigned long flags;
-+ acx_device_t *adev = (acx_device_t*)address;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ log(L_DEBUG|L_ASSOC, "%s: adev->status=%d (%s)\n",
-+ __func__, adev->status, acx_get_status_name(adev->status));
-+
-+ switch (adev->status) {
-+ case ACX_STATUS_1_SCANNING:
-+ /* was set to 0 by set_status() */
-+ if (++adev->scan_retries < 7) {
-+ acx_set_timer(adev, 1000000);
-+ /* used to interrogate for scan status.
-+ ** We rely on SCAN_COMPLETE IRQ instead */
-+ log(L_ASSOC, "continuing scan (%d sec)\n",
-+ adev->scan_retries);
-+ } else {
-+ log(L_ASSOC, "stopping scan\n");
-+ /* send stop_scan cmd when we leave the interrupt context,
-+ * and make a decision what to do next (COMPLETE_SCAN) */
-+ acx_schedule_task(adev,
-+ ACX_AFTER_IRQ_CMD_STOP_SCAN + ACX_AFTER_IRQ_COMPLETE_SCAN);
-+ }
-+ break;
-+ case ACX_STATUS_2_WAIT_AUTH:
-+ /* was set to 0 by set_status() */
-+ if (++adev->auth_or_assoc_retries < 10) {
-+ log(L_ASSOC, "resend authen1 request (attempt %d)\n",
-+ adev->auth_or_assoc_retries + 1);
-+ acx_l_transmit_authen1(adev);
-+ } else {
-+ /* time exceeded: fall back to scanning mode */
-+ log(L_ASSOC,
-+ "authen1 request reply timeout, giving up\n");
-+ /* we are a STA, need to find AP anyhow */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING);
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_RESTART_SCAN);
-+ }
-+ /* used to be 1500000, but some other driver uses 2.5s */
-+ acx_set_timer(adev, 2500000);
-+ break;
-+ case ACX_STATUS_3_AUTHENTICATED:
-+ /* was set to 0 by set_status() */
-+ if (++adev->auth_or_assoc_retries < 10) {
-+ log(L_ASSOC, "resend assoc request (attempt %d)\n",
-+ adev->auth_or_assoc_retries + 1);
-+ acx_l_transmit_assoc_req(adev);
-+ } else {
-+ /* time exceeded: give up */
-+ log(L_ASSOC,
-+ "association request reply timeout, giving up\n");
-+ /* we are a STA, need to find AP anyhow */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING);
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_RESTART_SCAN);
-+ }
-+ acx_set_timer(adev, 2500000); /* see above */
-+ break;
-+ case ACX_STATUS_4_ASSOCIATED:
-+ default:
-+ break;
-+ }
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_set_timer
-+**
-+** Sets the 802.11 state management timer's timeout.
-+*/
-+void
-+acx_set_timer(acx_device_t *adev, int timeout_us)
-+{
-+ FN_ENTER;
-+
-+ log(L_DEBUG|L_IRQ, "%s(%u ms)\n", __func__, timeout_us/1000);
-+ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
-+ printk("attempt to set the timer "
-+ "when the card interface is not up!\n");
-+ goto end;
-+ }
-+
-+ /* first check if the timer was already initialized, THEN modify it */
-+ if (adev->mgmt_timer.function) {
-+ mod_timer(&adev->mgmt_timer,
-+ jiffies + (timeout_us * HZ / 1000000));
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_assocresp
-+**
-+** We are an AP here
-+*/
-+static const u8
-+dot11ratebyte[] = {
-+ DOT11RATEBYTE_1,
-+ DOT11RATEBYTE_2,
-+ DOT11RATEBYTE_5_5,
-+ DOT11RATEBYTE_6_G,
-+ DOT11RATEBYTE_9_G,
-+ DOT11RATEBYTE_11,
-+ DOT11RATEBYTE_12_G,
-+ DOT11RATEBYTE_18_G,
-+ DOT11RATEBYTE_22,
-+ DOT11RATEBYTE_24_G,
-+ DOT11RATEBYTE_36_G,
-+ DOT11RATEBYTE_48_G,
-+ DOT11RATEBYTE_54_G,
-+};
-+
-+static inline int
-+find_pos(const u8 *p, int size, u8 v)
-+{
-+ int i;
-+ for (i = 0; i < size; i++)
-+ if (p[i] == v)
-+ return i;
-+ /* printk a message about strange byte? */
-+ return 0;
-+}
-+
-+static void
-+add_bits_to_ratemasks(u8* ratevec, int len, u16* brate, u16* orate)
-+{
-+ while (len--) {
-+ int n = 1 << find_pos(dot11ratebyte,
-+ sizeof(dot11ratebyte), *ratevec & 0x7f);
-+ if (*ratevec & 0x80)
-+ *brate |= n;
-+ *orate |= n;
-+ ratevec++;
-+ }
-+}
-+
-+static int
-+acx_l_transmit_assocresp(acx_device_t *adev, const wlan_fr_assocreq_t *req)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct assocresp_frame_body *body;
-+ u8 *p;
-+ const u8 *da;
-+ /* const u8 *sa; */
-+ const u8 *bssid;
-+ client_t *clt;
-+
-+ FN_ENTER;
-+
-+ /* sa = req->hdr->a1; */
-+ da = req->hdr->a2;
-+ bssid = req->hdr->a3;
-+
-+ clt = acx_l_sta_list_get(adev, da);
-+ if (!clt)
-+ goto ok;
-+
-+ /* Assoc without auth is a big no-no */
-+ /* Let's be liberal: if already assoc'ed STA sends assoc req again,
-+ ** we won't be rude */
-+ if (clt->used != CLIENT_AUTHENTICATED_2
-+ && clt->used != CLIENT_ASSOCIATED_3) {
-+ acx_l_transmit_deauthen(adev, da, WLAN_MGMT_REASON_CLASS2_NONAUTH);
-+ goto bad;
-+ }
-+
-+ clt->used = CLIENT_ASSOCIATED_3;
-+
-+ if (clt->aid == 0)
-+ clt->aid = ++adev->aid;
-+ clt->cap_info = ieee2host16(*(req->cap_info));
-+
-+ /* We cheat here a bit. We don't really care which rates are flagged
-+ ** as basic by the client, so we stuff them in single ratemask */
-+ clt->rate_cap = 0;
-+ if (req->supp_rates)
-+ add_bits_to_ratemasks(req->supp_rates->rates,
-+ req->supp_rates->len, &clt->rate_cap, &clt->rate_cap);
-+ if (req->ext_rates)
-+ add_bits_to_ratemasks(req->ext_rates->rates,
-+ req->ext_rates->len, &clt->rate_cap, &clt->rate_cap);
-+ /* We can check that client supports all basic rates,
-+ ** and deny assoc if not. But let's be liberal, right? ;) */
-+ clt->rate_cfg = clt->rate_cap & adev->rate_oper;
-+ if (!clt->rate_cfg) clt->rate_cfg = 1 << lowest_bit(adev->rate_oper);
-+ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg);
-+ if (IS_ACX100(adev))
-+ clt->rate_100 = acx_bitpos2rate100[lowest_bit(clt->rate_cfg)];
-+ clt->fallback_count = clt->stepup_count = 0;
-+ clt->ignore_count = 16;
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_ASSOCRESPi;
-+ head->dur = req->hdr->dur;
-+ MAC_COPY(head->da, da);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, bssid);
-+ head->seq = req->hdr->seq;
-+
-+ body->cap_info = host2ieee16(adev->capabilities);
-+ body->status = host2ieee16(0);
-+ body->aid = host2ieee16(clt->aid);
-+ p = wlan_fill_ie_rates((u8*)&body->rates, adev->rate_supported_len,
-+ adev->rate_supported);
-+ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len,
-+ adev->rate_supported);
-+
-+ acx_l_tx_data(adev, tx, p - (u8*)head);
-+ok:
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+* acx_l_transmit_reassocresp
-+
-+You may be wondering, just like me, what the hell ReAuth is.
-+In practice it was seen sent by STA when STA feels like losing connection.
-+
-+[802.11]
-+
-+5.4.2.3 Reassociation
-+
-+Association is sufficient for no-transition message delivery between
-+IEEE 802.11 stations. Additional functionality is needed to support
-+BSS-transition mobility. The additional required functionality
-+is provided by the reassociation service. Reassociation is a DSS.
-+The reassociation service is invoked to 'move' a current association
-+from one AP to another. This keeps the DS informed of the current
-+mapping between AP and STA as the station moves from BSS to BSS within
-+an ESS. Reassociation also enables changing association attributes
-+of an established association while the STA remains associated with
-+the same AP. Reassociation is always initiated by the mobile STA.
-+
-+5.4.3.1 Authentication
-+...
-+A STA may be authenticated with many other STAs at any given instant.
-+
-+5.4.3.1.1 Preauthentication
-+
-+Because the authentication process could be time-consuming (depending
-+on the authentication protocol in use), the authentication service can
-+be invoked independently of the association service. Preauthentication
-+is typically done by a STA while it is already associated with an AP
-+(with which it previously authenticated). IEEE 802.11 does not require
-+that STAs preauthenticate with APs. However, authentication is required
-+before an association can be established. If the authentication is left
-+until reassociation time, this may impact the speed with which a STA can
-+reassociate between APs, limiting BSS-transition mobility performance.
-+The use of preauthentication takes the authentication service overhead
-+out of the time-critical reassociation process.
-+
-+5.7.3 Reassociation
-+
-+For a STA to reassociate, the reassociation service causes the following
-+message to occur:
-+
-+ Reassociation request
-+
-+* Message type: Management
-+* Message subtype: Reassociation request
-+* Information items:
-+ - IEEE address of the STA
-+ - IEEE address of the AP with which the STA will reassociate
-+ - IEEE address of the AP with which the STA is currently associated
-+ - ESSID
-+* Direction of message: From STA to 'new' AP
-+
-+The address of the current AP is included for efficiency. The inclusion
-+of the current AP address facilitates MAC reassociation to be independent
-+of the DS implementation.
-+
-+ Reassociation response
-+* Message type: Management
-+* Message subtype: Reassociation response
-+* Information items:
-+ - Result of the requested reassociation. (success/failure)
-+ - If the reassociation is successful, the response shall include the AID.
-+* Direction of message: From AP to STA
-+
-+7.2.3.6 Reassociation Request frame format
-+
-+The frame body of a management frame of subtype Reassociation Request
-+contains the information shown in Table 9.
-+
-+Table 9 Reassociation Request frame body
-+Order Information
-+1 Capability information
-+2 Listen interval
-+3 Current AP address
-+4 SSID
-+5 Supported rates
-+
-+7.2.3.7 Reassociation Response frame format
-+
-+The frame body of a management frame of subtype Reassociation Response
-+contains the information shown in Table 10.
-+
-+Table 10 Reassociation Response frame body
-+Order Information
-+1 Capability information
-+2 Status code
-+3 Association ID (AID)
-+4 Supported rates
-+
-+*/
-+static int
-+acx_l_transmit_reassocresp(acx_device_t *adev, const wlan_fr_reassocreq_t *req)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct reassocresp_frame_body *body;
-+ u8 *p;
-+ const u8 *da;
-+ /* const u8 *sa; */
-+ const u8 *bssid;
-+ client_t *clt;
-+
-+ FN_ENTER;
-+
-+ /* sa = req->hdr->a1; */
-+ da = req->hdr->a2;
-+ bssid = req->hdr->a3;
-+
-+ /* Must be already authenticated, so it must be in the list */
-+ clt = acx_l_sta_list_get(adev, da);
-+ if (!clt)
-+ goto ok;
-+
-+ /* Assoc without auth is a big no-no */
-+ /* Already assoc'ed STAs sending ReAssoc req are ok per 802.11 */
-+ if (clt->used != CLIENT_AUTHENTICATED_2
-+ && clt->used != CLIENT_ASSOCIATED_3) {
-+ acx_l_transmit_deauthen(adev, da, WLAN_MGMT_REASON_CLASS2_NONAUTH);
-+ goto bad;
-+ }
-+
-+ clt->used = CLIENT_ASSOCIATED_3;
-+ if (clt->aid == 0) {
-+ clt->aid = ++adev->aid;
-+ }
-+ if (req->cap_info)
-+ clt->cap_info = ieee2host16(*(req->cap_info));
-+
-+ /* We cheat here a bit. We don't really care which rates are flagged
-+ ** as basic by the client, so we stuff them in single ratemask */
-+ clt->rate_cap = 0;
-+ if (req->supp_rates)
-+ add_bits_to_ratemasks(req->supp_rates->rates,
-+ req->supp_rates->len, &clt->rate_cap, &clt->rate_cap);
-+ if (req->ext_rates)
-+ add_bits_to_ratemasks(req->ext_rates->rates,
-+ req->ext_rates->len, &clt->rate_cap, &clt->rate_cap);
-+ /* We can check that client supports all basic rates,
-+ ** and deny assoc if not. But let's be liberal, right? ;) */
-+ clt->rate_cfg = clt->rate_cap & adev->rate_oper;
-+ if (!clt->rate_cfg) clt->rate_cfg = 1 << lowest_bit(adev->rate_oper);
-+ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg);
-+ if (IS_ACX100(adev))
-+ clt->rate_100 = acx_bitpos2rate100[lowest_bit(clt->rate_cfg)];
-+
-+ clt->fallback_count = clt->stepup_count = 0;
-+ clt->ignore_count = 16;
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto ok;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto ok;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_REASSOCRESPi;
-+ head->dur = req->hdr->dur;
-+ MAC_COPY(head->da, da);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, bssid);
-+ head->seq = req->hdr->seq;
-+
-+ /* IEs: 1. caps */
-+ body->cap_info = host2ieee16(adev->capabilities);
-+ /* 2. status code */
-+ body->status = host2ieee16(0);
-+ /* 3. AID */
-+ body->aid = host2ieee16(clt->aid);
-+ /* 4. supp rates */
-+ p = wlan_fill_ie_rates((u8*)&body->rates, adev->rate_supported_len,
-+ adev->rate_supported);
-+ /* 5. ext supp rates */
-+ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len,
-+ adev->rate_supported);
-+
-+ acx_l_tx_data(adev, tx, p - (u8*)head);
-+ok:
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_disassoc_from_sta
-+*/
-+static void
-+acx_l_process_disassoc_from_sta(acx_device_t *adev, const wlan_fr_disassoc_t *req)
-+{
-+ const u8 *ta;
-+ client_t *clt;
-+
-+ FN_ENTER;
-+
-+ ta = req->hdr->a2;
-+ clt = acx_l_sta_list_get(adev, ta);
-+ if (!clt)
-+ goto end;
-+
-+ if (clt->used != CLIENT_ASSOCIATED_3
-+ && clt->used != CLIENT_AUTHENTICATED_2) {
-+ /* it's disassociating, but it's
-+ ** not even authenticated! Let it know that */
-+ acxlog_mac(L_ASSOC|L_XFER, "peer ", ta, "has sent disassoc "
-+ "req but it is not even auth'ed! sending deauth\n");
-+ acx_l_transmit_deauthen(adev, ta,
-+ WLAN_MGMT_REASON_CLASS2_NONAUTH);
-+ clt->used = CLIENT_EXIST_1;
-+ } else {
-+ /* mark it as auth'ed only */
-+ clt->used = CLIENT_AUTHENTICATED_2;
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_deauthen_from_sta
-+*/
-+static void
-+acx_l_process_deauth_from_sta(acx_device_t *adev, const wlan_fr_deauthen_t *req)
-+{
-+ const wlan_hdr_t *hdr;
-+ client_t *client;
-+
-+ FN_ENTER;
-+
-+ hdr = req->hdr;
-+
-+ if (acx_debug & L_ASSOC) {
-+ acx_print_mac("got deauth from sta:", hdr->a2, " ");
-+ acx_print_mac("a1:", hdr->a1, " ");
-+ acx_print_mac("a3:", hdr->a3, " ");
-+ acx_print_mac("adev->addr:", adev->dev_addr, " ");
-+ acx_print_mac("adev->bssid:", adev->bssid, "\n");
-+ }
-+
-+ if (!mac_is_equal(adev->dev_addr, hdr->a1)) {
-+ goto end;
-+ }
-+
-+ client = acx_l_sta_list_get(adev, hdr->a2);
-+ if (!client) {
-+ goto end;
-+ }
-+ client->used = CLIENT_EXIST_1;
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_disassoc_from_ap
-+*/
-+static void
-+acx_l_process_disassoc_from_ap(acx_device_t *adev, const wlan_fr_disassoc_t *req)
-+{
-+ FN_ENTER;
-+
-+ if (!adev->ap_client) {
-+ /* Hrm, we aren't assoc'ed yet anyhow... */
-+ goto end;
-+ }
-+
-+ printk("%s: got disassoc frame with reason %d (%s)\n",
-+ adev->ndev->name, *req->reason,
-+ acx_wlan_reason_str(*req->reason));
-+
-+ if (mac_is_equal(adev->dev_addr, req->hdr->a1)) {
-+ acx_l_transmit_deauthen(adev, adev->bssid,
-+ WLAN_MGMT_REASON_DEAUTH_LEAVING);
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_deauth_from_ap
-+*/
-+static void
-+acx_l_process_deauth_from_ap(acx_device_t *adev, const wlan_fr_deauthen_t *req)
-+{
-+ FN_ENTER;
-+
-+ if (!adev->ap_client) {
-+ /* Hrm, we aren't assoc'ed yet anyhow... */
-+ goto end;
-+ }
-+
-+ printk("%s: got deauth frame with reason %d (%s)\n",
-+ adev->ndev->name, *req->reason,
-+ acx_wlan_reason_str(*req->reason));
-+
-+ /* Chk: is ta verified to be from our AP? */
-+ if (mac_is_equal(adev->dev_addr, req->hdr->a1)) {
-+ log(L_DEBUG, "AP sent us deauth packet\n");
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_rx
-+**
-+** The end of the Rx path. Pulls data from a rxhostdesc into a socket
-+** buffer and feeds it to the network stack via netif_rx().
-+*/
-+static void
-+acx_l_rx(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ FN_ENTER;
-+ if (likely(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
-+ struct sk_buff *skb;
-+ skb = acx_rxbuf_to_ether(adev, rxbuf);
-+ if (likely(skb)) {
-+ netif_rx(skb);
-+ adev->ndev->last_rx = jiffies;
-+ adev->stats.rx_packets++;
-+ adev->stats.rx_bytes += skb->len;
-+ }
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_data_frame_master
-+*/
-+static int
-+acx_l_process_data_frame_master(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ struct wlan_hdr *hdr;
-+ struct tx *tx;
-+ void *txbuf;
-+ int len;
-+ int result = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+
-+ switch (WF_FC_FROMTODSi & hdr->fc) {
-+ case 0:
-+ case WF_FC_FROMDSi:
-+ log(L_DEBUG, "ap->sta or adhoc->adhoc data frame ignored\n");
-+ goto done;
-+ case WF_FC_TODSi:
-+ break;
-+ default: /* WF_FC_FROMTODSi */
-+ log(L_DEBUG, "wds data frame ignored (TODO)\n");
-+ goto done;
-+ }
-+
-+ /* check if it is our BSSID, if not, leave */
-+ if (!mac_is_equal(adev->bssid, hdr->a1)) {
-+ goto done;
-+ }
-+
-+ if (mac_is_equal(adev->dev_addr, hdr->a3)) {
-+ /* this one is for us */
-+ acx_l_rx(adev, rxbuf);
-+ } else {
-+ if (mac_is_bcast(hdr->a3)) {
-+ /* this one is bcast, rx it too */
-+ acx_l_rx(adev, rxbuf);
-+ }
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx) {
-+ goto fail;
-+ }
-+ /* repackage, tx, and hope it someday reaches its destination */
-+ /* order is important, we do it in-place */
-+ MAC_COPY(hdr->a1, hdr->a3);
-+ MAC_COPY(hdr->a3, hdr->a2);
-+ MAC_COPY(hdr->a2, adev->bssid);
-+ /* To_DS = 0, From_DS = 1 */
-+ hdr->fc = WF_FC_FROMDSi + WF_FTYPE_DATAi;
-+
-+ txbuf = acx_l_get_txbuf(adev, tx);
-+ if (txbuf) {
-+ len = RXBUF_BYTES_RCVD(adev, rxbuf);
-+ memcpy(txbuf, hdr, len);
-+ acx_l_tx_data(adev, tx, len);
-+ } else {
-+ acx_l_dealloc_tx(adev, tx);
-+ }
-+ }
-+done:
-+ result = OK;
-+fail:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_data_frame_client
-+*/
-+static int
-+acx_l_process_data_frame_client(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ const u8 *da, *bssid;
-+ const wlan_hdr_t *hdr;
-+ struct net_device *ndev = adev->ndev;
-+ int result = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ if (ACX_STATUS_4_ASSOCIATED != adev->status)
-+ goto drop;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+
-+ switch (WF_FC_FROMTODSi & hdr->fc) {
-+ case 0:
-+ if (adev->mode != ACX_MODE_0_ADHOC) {
-+ log(L_DEBUG, "adhoc->adhoc data frame ignored\n");
-+ goto drop;
-+ }
-+ bssid = hdr->a3;
-+ break;
-+ case WF_FC_FROMDSi:
-+ if (adev->mode != ACX_MODE_2_STA) {
-+ log(L_DEBUG, "ap->sta data frame ignored\n");
-+ goto drop;
-+ }
-+ bssid = hdr->a2;
-+ break;
-+ case WF_FC_TODSi:
-+ log(L_DEBUG, "sta->ap data frame ignored\n");
-+ goto drop;
-+ default: /* WF_FC_FROMTODSi: wds->wds */
-+ log(L_DEBUG, "wds data frame ignored (todo)\n");
-+ goto drop;
-+ }
-+
-+ da = hdr->a1;
-+
-+ if (unlikely(acx_debug & L_DEBUG)) {
-+ acx_print_mac("rx: da=", da, "");
-+ acx_print_mac(" bssid=", bssid, "");
-+ acx_print_mac(" adev->bssid=", adev->bssid, "");
-+ acx_print_mac(" adev->addr=", adev->dev_addr, "\n");
-+ }
-+
-+ /* promiscuous mode --> receive all packets */
-+ if (unlikely(ndev->flags & IFF_PROMISC))
-+ goto process;
-+
-+ /* FIRST, check if it is our BSSID */
-+ if (!mac_is_equal(adev->bssid, bssid)) {
-+ /* is not our BSSID, so bail out */
-+ goto drop;
-+ }
-+
-+ /* then, check if it is our address */
-+ if (mac_is_equal(adev->dev_addr, da)) {
-+ goto process;
-+ }
-+
-+ /* then, check if it is broadcast */
-+ if (mac_is_bcast(da)) {
-+ goto process;
-+ }
-+
-+ if (mac_is_mcast(da)) {
-+ /* unconditionally receive all multicasts */
-+ if (ndev->flags & IFF_ALLMULTI)
-+ goto process;
-+
-+ /* FIXME: need to check against the list of
-+ * multicast addresses that are configured
-+ * for the interface (ifconfig) */
-+ log(L_XFER, "FIXME: multicast packet, need to check "
-+ "against a list of multicast addresses "
-+ "(to be created!); accepting packet for now\n");
-+ /* for now, just accept it here */
-+ goto process;
-+ }
-+
-+ log(L_DEBUG, "rx: foreign packet, dropping\n");
-+ goto drop;
-+process:
-+ /* receive packet */
-+ acx_l_rx(adev, rxbuf);
-+
-+ result = OK;
-+drop:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_mgmt_frame
-+**
-+** Theory of operation: mgmt packet gets parsed (to make it easy
-+** to access variable-sized IEs), results stored in 'parsed'.
-+** Then we react to the packet.
-+*/
-+typedef union parsed_mgmt_req {
-+ wlan_fr_mgmt_t mgmt;
-+ wlan_fr_assocreq_t assocreq;
-+ wlan_fr_reassocreq_t reassocreq;
-+ wlan_fr_assocresp_t assocresp;
-+ wlan_fr_reassocresp_t reassocresp;
-+ wlan_fr_beacon_t beacon;
-+ wlan_fr_disassoc_t disassoc;
-+ wlan_fr_authen_t authen;
-+ wlan_fr_deauthen_t deauthen;
-+ wlan_fr_proberesp_t proberesp;
-+} parsed_mgmt_req_t;
-+
-+void BUG_excessive_stack_usage(void);
-+
-+static int
-+acx_l_process_mgmt_frame(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ parsed_mgmt_req_t parsed; /* takes ~100 bytes of stack */
-+ wlan_hdr_t *hdr;
-+ int adhoc, sta_scan, sta, ap;
-+ int len;
-+
-+ if (sizeof(parsed) > 256)
-+ BUG_excessive_stack_usage();
-+
-+ FN_ENTER;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+
-+ /* Management frames never have these set */
-+ if (WF_FC_FROMTODSi & hdr->fc) {
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+ }
-+
-+ len = RXBUF_BYTES_RCVD(adev, rxbuf);
-+ if (WF_FC_ISWEPi & hdr->fc)
-+ len -= 0x10;
-+
-+ adhoc = (adev->mode == ACX_MODE_0_ADHOC);
-+ sta_scan = ((adev->mode == ACX_MODE_2_STA)
-+ && (adev->status != ACX_STATUS_4_ASSOCIATED));
-+ sta = ((adev->mode == ACX_MODE_2_STA)
-+ && (adev->status == ACX_STATUS_4_ASSOCIATED));
-+ ap = (adev->mode == ACX_MODE_3_AP);
-+
-+ switch (WF_FC_FSTYPEi & hdr->fc) {
-+ /* beacons first, for speed */
-+ case WF_FSTYPE_BEACONi:
-+ memset(&parsed.beacon, 0, sizeof(parsed.beacon));
-+ parsed.beacon.hdr = hdr;
-+ parsed.beacon.len = len;
-+ if (acx_debug & L_DATA) {
-+ printk("beacon len:%d fc:%04X dur:%04X seq:%04X",
-+ len, hdr->fc, hdr->dur, hdr->seq);
-+ acx_print_mac(" a1:", hdr->a1, "");
-+ acx_print_mac(" a2:", hdr->a2, "");
-+ acx_print_mac(" a3:", hdr->a3, "\n");
-+ }
-+ wlan_mgmt_decode_beacon(&parsed.beacon);
-+ /* beacon and probe response are very similar, so... */
-+ acx_l_process_probe_response(adev, &parsed.beacon, rxbuf);
-+ break;
-+ case WF_FSTYPE_ASSOCREQi:
-+ if (!ap)
-+ break;
-+ memset(&parsed.assocreq, 0, sizeof(parsed.assocreq));
-+ parsed.assocreq.hdr = hdr;
-+ parsed.assocreq.len = len;
-+ wlan_mgmt_decode_assocreq(&parsed.assocreq);
-+ if (mac_is_equal(hdr->a1, adev->bssid)
-+ && mac_is_equal(hdr->a3, adev->bssid)) {
-+ acx_l_transmit_assocresp(adev, &parsed.assocreq);
-+ }
-+ break;
-+ case WF_FSTYPE_REASSOCREQi:
-+ if (!ap)
-+ break;
-+ memset(&parsed.assocreq, 0, sizeof(parsed.assocreq));
-+ parsed.assocreq.hdr = hdr;
-+ parsed.assocreq.len = len;
-+ wlan_mgmt_decode_assocreq(&parsed.assocreq);
-+ /* reassocreq and assocreq are equivalent */
-+ acx_l_transmit_reassocresp(adev, &parsed.reassocreq);
-+ break;
-+ case WF_FSTYPE_ASSOCRESPi:
-+ if (!sta_scan)
-+ break;
-+ memset(&parsed.assocresp, 0, sizeof(parsed.assocresp));
-+ parsed.assocresp.hdr = hdr;
-+ parsed.assocresp.len = len;
-+ wlan_mgmt_decode_assocresp(&parsed.assocresp);
-+ acx_l_process_assocresp(adev, &parsed.assocresp);
-+ break;
-+ case WF_FSTYPE_REASSOCRESPi:
-+ if (!sta_scan)
-+ break;
-+ memset(&parsed.assocresp, 0, sizeof(parsed.assocresp));
-+ parsed.assocresp.hdr = hdr;
-+ parsed.assocresp.len = len;
-+ wlan_mgmt_decode_assocresp(&parsed.assocresp);
-+ acx_l_process_reassocresp(adev, &parsed.reassocresp);
-+ break;
-+ case WF_FSTYPE_PROBEREQi:
-+ if (ap || adhoc) {
-+ /* FIXME: since we're supposed to be an AP,
-+ ** we need to return a Probe Response packet.
-+ ** Currently firmware is doing it for us,
-+ ** but firmware is buggy! See comment elsewhere --vda */
-+ }
-+ break;
-+ case WF_FSTYPE_PROBERESPi:
-+ memset(&parsed.proberesp, 0, sizeof(parsed.proberesp));
-+ parsed.proberesp.hdr = hdr;
-+ parsed.proberesp.len = len;
-+ wlan_mgmt_decode_proberesp(&parsed.proberesp);
-+ acx_l_process_probe_response(adev, &parsed.proberesp, rxbuf);
-+ break;
-+ case 6:
-+ case 7:
-+ /* exit */
-+ break;
-+ case WF_FSTYPE_ATIMi:
-+ /* exit */
-+ break;
-+ case WF_FSTYPE_DISASSOCi:
-+ if (!sta && !ap)
-+ break;
-+ memset(&parsed.disassoc, 0, sizeof(parsed.disassoc));
-+ parsed.disassoc.hdr = hdr;
-+ parsed.disassoc.len = len;
-+ wlan_mgmt_decode_disassoc(&parsed.disassoc);
-+ if (sta)
-+ acx_l_process_disassoc_from_ap(adev, &parsed.disassoc);
-+ else
-+ acx_l_process_disassoc_from_sta(adev, &parsed.disassoc);
-+ break;
-+ case WF_FSTYPE_AUTHENi:
-+ if (!sta_scan && !ap)
-+ break;
-+ memset(&parsed.authen, 0, sizeof(parsed.authen));
-+ parsed.authen.hdr = hdr;
-+ parsed.authen.len = len;
-+ wlan_mgmt_decode_authen(&parsed.authen);
-+ acx_l_process_authen(adev, &parsed.authen);
-+ break;
-+ case WF_FSTYPE_DEAUTHENi:
-+ if (!sta && !ap)
-+ break;
-+ memset(&parsed.deauthen, 0, sizeof(parsed.deauthen));
-+ parsed.deauthen.hdr = hdr;
-+ parsed.deauthen.len = len;
-+ wlan_mgmt_decode_deauthen(&parsed.deauthen);
-+ if (sta)
-+ acx_l_process_deauth_from_ap(adev, &parsed.deauthen);
-+ else
-+ acx_l_process_deauth_from_sta(adev, &parsed.deauthen);
-+ break;
-+ }
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+#ifdef UNUSED
-+/***********************************************************************
-+** acx_process_class_frame
-+**
-+** Called from IRQ context only
-+*/
-+static int
-+acx_process_class_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala)
-+{
-+ return OK;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_l_process_NULL_frame
-+*/
-+#ifdef BOGUS_ITS_NOT_A_NULL_FRAME_HANDLER_AT_ALL
-+static int
-+acx_l_process_NULL_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala)
-+{
-+ const signed char *esi;
-+ const u8 *ebx;
-+ const wlan_hdr_t *hdr;
-+ const client_t *client;
-+ int result = NOT_OK;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+
-+ switch (WF_FC_FROMTODSi & hdr->fc) {
-+ case 0:
-+ esi = hdr->a1;
-+ ebx = hdr->a2;
-+ break;
-+ case WF_FC_FROMDSi:
-+ esi = hdr->a1;
-+ ebx = hdr->a3;
-+ break;
-+ case WF_FC_TODSi:
-+ esi = hdr->a1;
-+ ebx = hdr->a2;
-+ break;
-+ default: /* WF_FC_FROMTODSi */
-+ esi = hdr->a1; /* added by me! --vda */
-+ ebx = hdr->a2;
-+ }
-+
-+ if (esi[0x0] < 0) {
-+ result = OK;
-+ goto done;
-+ }
-+
-+ client = acx_l_sta_list_get(adev, ebx);
-+ if (client)
-+ result = NOT_OK;
-+ else {
-+#ifdef IS_IT_BROKEN
-+ log(L_DEBUG|L_XFER, "<transmit_deauth 7>\n");
-+ acx_l_transmit_deauthen(adev, ebx,
-+ WLAN_MGMT_REASON_CLASS2_NONAUTH);
-+#else
-+ log(L_DEBUG, "received NULL frame from unknown client! "
-+ "We really shouldn't send deauthen here, right?\n");
-+#endif
-+ result = OK;
-+ }
-+done:
-+ return result;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_l_process_probe_response
-+*/
-+static int
-+acx_l_process_probe_response(acx_device_t *adev, wlan_fr_proberesp_t *req,
-+ const rxbuffer_t *rxbuf)
-+{
-+ struct client *bss;
-+ wlan_hdr_t *hdr;
-+
-+ FN_ENTER;
-+
-+ hdr = req->hdr;
-+
-+ if (mac_is_equal(hdr->a3, adev->dev_addr)) {
-+ log(L_ASSOC, "huh, scan found our own MAC!?\n");
-+ goto ok; /* just skip this one silently */
-+ }
-+
-+ bss = acx_l_sta_list_get_or_add(adev, hdr->a2);
-+
-+ /* NB: be careful modifying bss data! It may be one
-+ ** of the already known clients (like our AP if we are a STA)
-+ ** Thus do not blindly modify e.g. current ratemask! */
-+
-+ if (STA_LIST_ADD_CAN_FAIL && !bss) {
-+ /* uh oh, we found more sites/stations than we can handle with
-+ * our current setup: pull the emergency brake and stop scanning! */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_STOP_SCAN);
-+ /* TODO: a nice comment what below call achieves --vda */
-+ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH);
-+ goto ok;
-+ }
-+ /* NB: get_or_add already filled bss->address = hdr->a2 */
-+ MAC_COPY(bss->bssid, hdr->a3);
-+
-+ /* copy the ESSID element */
-+ if (req->ssid && req->ssid->len <= IW_ESSID_MAX_SIZE) {
-+ bss->essid_len = req->ssid->len;
-+ memcpy(bss->essid, req->ssid->ssid, req->ssid->len);
-+ bss->essid[req->ssid->len] = '\0';
-+ } else {
-+ /* Either no ESSID IE or oversized one */
-+ printk("%s: received packet has bogus ESSID\n",
-+ adev->ndev->name);
-+ }
-+
-+ if (req->ds_parms)
-+ bss->channel = req->ds_parms->curr_ch;
-+ if (req->cap_info)
-+ bss->cap_info = ieee2host16(*req->cap_info);
-+
-+ bss->sir = acx_signal_to_winlevel(rxbuf->phy_level);
-+ bss->snr = acx_signal_to_winlevel(rxbuf->phy_snr);
-+
-+ bss->rate_cap = 0; /* operational mask */
-+ bss->rate_bas = 0; /* basic mask */
-+ if (req->supp_rates)
-+ add_bits_to_ratemasks(req->supp_rates->rates,
-+ req->supp_rates->len, &bss->rate_bas, &bss->rate_cap);
-+ if (req->ext_rates)
-+ add_bits_to_ratemasks(req->ext_rates->rates,
-+ req->ext_rates->len, &bss->rate_bas, &bss->rate_cap);
-+ /* Fix up any possible bogosity - code elsewhere
-+ * is not expecting empty masks */
-+ if (!bss->rate_cap)
-+ bss->rate_cap = adev->rate_basic;
-+ if (!bss->rate_bas)
-+ bss->rate_bas = 1 << lowest_bit(bss->rate_cap);
-+ if (!bss->rate_cur)
-+ bss->rate_cur = 1 << lowest_bit(bss->rate_bas);
-+
-+ /* People moan about this being too noisy at L_ASSOC */
-+ log(L_DEBUG,
-+ "found %s: ESSID=\"%s\" ch=%d "
-+ "BSSID="MACSTR" caps=0x%04X SIR=%d SNR=%d\n",
-+ (bss->cap_info & WF_MGMT_CAP_IBSS) ? "Ad-Hoc peer" : "AP",
-+ bss->essid, bss->channel, MAC(bss->bssid), bss->cap_info,
-+ bss->sir, bss->snr);
-+ok:
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_assocresp
-+*/
-+static int
-+acx_l_process_assocresp(acx_device_t *adev, const wlan_fr_assocresp_t *req)
-+{
-+ const wlan_hdr_t *hdr;
-+ int res = OK;
-+
-+ FN_ENTER;
-+
-+ hdr = req->hdr;
-+
-+ if ((ACX_MODE_2_STA == adev->mode)
-+ && mac_is_equal(adev->dev_addr, hdr->a1)) {
-+ u16 st = ieee2host16(*(req->status));
-+ if (WLAN_MGMT_STATUS_SUCCESS == st) {
-+ adev->aid = ieee2host16(*(req->aid));
-+ /* tell the card we are associated when
-+ ** we are out of interrupt context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_ASSOCIATE);
-+ } else {
-+
-+ /* TODO: we shall delete peer from sta_list, and try
-+ ** other candidates... */
-+
-+ printk("%s: association FAILED: peer sent "
-+ "Status Code %d (%s)\n",
-+ adev->ndev->name, st, get_status_string(st));
-+ res = NOT_OK;
-+ }
-+ }
-+
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_reassocresp
-+*/
-+static int
-+acx_l_process_reassocresp(acx_device_t *adev, const wlan_fr_reassocresp_t *req)
-+{
-+ const wlan_hdr_t *hdr;
-+ int result = NOT_OK;
-+ u16 st;
-+
-+ FN_ENTER;
-+
-+ hdr = req->hdr;
-+
-+ if (!mac_is_equal(adev->dev_addr, hdr->a1)) {
-+ goto end;
-+ }
-+ st = ieee2host16(*(req->status));
-+ if (st == WLAN_MGMT_STATUS_SUCCESS) {
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ result = OK;
-+ } else {
-+ printk("%s: reassociation FAILED: peer sent "
-+ "response code %d (%s)\n",
-+ adev->ndev->name, st, get_status_string(st));
-+ }
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_authen
-+**
-+** Called only in STA_SCAN or AP mode
-+*/
-+static int
-+acx_l_process_authen(acx_device_t *adev, const wlan_fr_authen_t *req)
-+{
-+ const wlan_hdr_t *hdr;
-+ client_t *clt;
-+ wlan_ie_challenge_t *chal;
-+ u16 alg, seq, status;
-+ int ap, result;
-+
-+ FN_ENTER;
-+
-+ hdr = req->hdr;
-+
-+ if (acx_debug & L_ASSOC) {
-+ acx_print_mac("AUTHEN adev->addr=", adev->dev_addr, " ");
-+ acx_print_mac("a1=", hdr->a1, " ");
-+ acx_print_mac("a2=", hdr->a2, " ");
-+ acx_print_mac("a3=", hdr->a3, " ");
-+ acx_print_mac("adev->bssid=", adev->bssid, "\n");
-+ }
-+
-+ if (!mac_is_equal(adev->dev_addr, hdr->a1)
-+ || !mac_is_equal(adev->bssid, hdr->a3)) {
-+ result = OK;
-+ goto end;
-+ }
-+
-+ alg = ieee2host16(*(req->auth_alg));
-+ seq = ieee2host16(*(req->auth_seq));
-+ status = ieee2host16(*(req->status));
-+
-+ log(L_ASSOC, "auth algorithm %d, auth sequence %d, status %d\n", alg, seq, status);
-+
-+ ap = (adev->mode == ACX_MODE_3_AP);
-+
-+ if (adev->auth_alg <= 1) {
-+ if (adev->auth_alg != alg) {
-+ log(L_ASSOC, "auth algorithm mismatch: "
-+ "our:%d peer:%d\n", adev->auth_alg, alg);
-+ result = NOT_OK;
-+ goto end;
-+ }
-+ }
-+ if (ap) {
-+ clt = acx_l_sta_list_get_or_add(adev, hdr->a2);
-+ if (STA_LIST_ADD_CAN_FAIL && !clt) {
-+ log(L_ASSOC, "could not allocate room for client\n");
-+ result = NOT_OK;
-+ goto end;
-+ }
-+ } else {
-+ clt = adev->ap_client;
-+ if (!mac_is_equal(clt->address, hdr->a2)) {
-+ printk("%s: malformed auth frame from AP?!\n",
-+ adev->ndev->name);
-+ result = NOT_OK;
-+ goto end;
-+ }
-+ }
-+
-+ /* now check which step in the authentication sequence we are
-+ * currently in, and act accordingly */
-+ switch (seq) {
-+ case 1:
-+ if (!ap)
-+ break;
-+ acx_l_transmit_authen2(adev, req, clt);
-+ break;
-+ case 2:
-+ if (ap)
-+ break;
-+ if (status == WLAN_MGMT_STATUS_SUCCESS) {
-+ if (alg == WLAN_AUTH_ALG_OPENSYSTEM) {
-+ acx_set_status(adev, ACX_STATUS_3_AUTHENTICATED);
-+ acx_l_transmit_assoc_req(adev);
-+ } else
-+ if (alg == WLAN_AUTH_ALG_SHAREDKEY) {
-+ acx_l_transmit_authen3(adev, req);
-+ }
-+ } else {
-+ printk("%s: auth FAILED: peer sent "
-+ "response code %d (%s), "
-+ "still waiting for authentication\n",
-+ adev->ndev->name,
-+ status, get_status_string(status));
-+ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH);
-+ }
-+ break;
-+ case 3:
-+ if (!ap)
-+ break;
-+ if ((clt->auth_alg != WLAN_AUTH_ALG_SHAREDKEY)
-+ || (alg != WLAN_AUTH_ALG_SHAREDKEY)
-+ || (clt->auth_step != 2))
-+ break;
-+ chal = req->challenge;
-+ if (!chal
-+ || memcmp(chal->challenge, clt->challenge_text, WLAN_CHALLENGE_LEN)
-+ || (chal->eid != WLAN_EID_CHALLENGE)
-+ || (chal->len != WLAN_CHALLENGE_LEN)
-+ )
-+ break;
-+ acx_l_transmit_authen4(adev, req);
-+ MAC_COPY(clt->address, hdr->a2);
-+ clt->used = CLIENT_AUTHENTICATED_2;
-+ clt->auth_step = 4;
-+ clt->seq = ieee2host16(hdr->seq);
-+ break;
-+ case 4:
-+ if (ap)
-+ break;
-+ /* ok, we're through: we're authenticated. Woohoo!! */
-+ acx_set_status(adev, ACX_STATUS_3_AUTHENTICATED);
-+ log(L_ASSOC, "Authenticated!\n");
-+ /* now that we're authenticated, request association */
-+ acx_l_transmit_assoc_req(adev);
-+ break;
-+ }
-+ result = OK;
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_gen_challenge
-+*/
-+static inline void
-+acx_gen_challenge(wlan_ie_challenge_t* d)
-+{
-+ FN_ENTER;
-+ d->eid = WLAN_EID_CHALLENGE;
-+ d->len = WLAN_CHALLENGE_LEN;
-+ get_random_bytes(d->challenge, WLAN_CHALLENGE_LEN);
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_deauthen
-+*/
-+static int
-+acx_l_transmit_deauthen(acx_device_t *adev, const u8 *addr, u16 reason)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct deauthen_frame_body *body;
-+
-+ FN_ENTER;
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = (WF_FTYPE_MGMTi | WF_FSTYPE_DEAUTHENi);
-+ head->dur = 0;
-+ MAC_COPY(head->da, addr);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, adev->bssid);
-+ head->seq = 0;
-+
-+ log(L_DEBUG|L_ASSOC|L_XFER,
-+ "sending deauthen to "MACSTR" for %d\n",
-+ MAC(addr), reason);
-+
-+ body->reason = host2ieee16(reason);
-+
-+ /* body is fixed size here, but beware of cutting-and-pasting this -
-+ ** do not use sizeof(*body) for variable sized mgmt packets! */
-+ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + sizeof(*body));
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_authen1
-+*/
-+static int
-+acx_l_transmit_authen1(acx_device_t *adev)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct auth_frame_body *body;
-+
-+ FN_ENTER;
-+
-+ log(L_ASSOC, "sending authentication1 request (auth algo %d), "
-+ "awaiting response\n", adev->auth_alg);
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_AUTHENi;
-+ /* duration should be 0 instead of 0x8000 to have
-+ * the firmware calculate the value, right? */
-+ head->dur = 0;
-+ MAC_COPY(head->da, adev->bssid);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, adev->bssid);
-+ head->seq = 0;
-+
-+ body->auth_alg = host2ieee16(adev->auth_alg);
-+ body->auth_seq = host2ieee16(1);
-+ body->status = host2ieee16(0);
-+
-+ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + 2 + 2 + 2);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_authen2
-+*/
-+static int
-+acx_l_transmit_authen2(acx_device_t *adev, const wlan_fr_authen_t *req,
-+ client_t *clt)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct auth_frame_body *body;
-+ unsigned int packet_len;
-+
-+ FN_ENTER;
-+
-+ if (!clt)
-+ goto ok;
-+
-+ MAC_COPY(clt->address, req->hdr->a2);
-+#ifdef UNUSED
-+ clt->ps = ((WF_FC_PWRMGTi & req->hdr->fc) != 0);
-+#endif
-+ clt->auth_alg = ieee2host16(*(req->auth_alg));
-+ clt->auth_step = 2;
-+ clt->seq = ieee2host16(req->hdr->seq);
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_AUTHENi;
-+ head->dur = 0 /* req->hdr->dur */;
-+ MAC_COPY(head->da, req->hdr->a2);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, req->hdr->a3);
-+ head->seq = 0 /* req->hdr->seq */;
-+
-+ /* already in IEEE format, no endianness conversion */
-+ body->auth_alg = *(req->auth_alg);
-+ body->auth_seq = host2ieee16(2);
-+ body->status = host2ieee16(0);
-+
-+ packet_len = WLAN_HDR_A3_LEN + 2 + 2 + 2;
-+ if (ieee2host16(*(req->auth_alg)) == WLAN_AUTH_ALG_OPENSYSTEM) {
-+ clt->used = CLIENT_AUTHENTICATED_2;
-+ } else { /* shared key */
-+ acx_gen_challenge(&body->challenge);
-+ memcpy(&clt->challenge_text, body->challenge.challenge, WLAN_CHALLENGE_LEN);
-+ packet_len += 2 + 2 + 2 + 1+1+WLAN_CHALLENGE_LEN;
-+ }
-+
-+ acxlog_mac(L_ASSOC|L_XFER,
-+ "transmit_auth2: BSSID=", head->bssid, "\n");
-+
-+ acx_l_tx_data(adev, tx, packet_len);
-+ok:
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_authen3
-+*/
-+static int
-+acx_l_transmit_authen3(acx_device_t *adev, const wlan_fr_authen_t *req)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct auth_frame_body *body;
-+ unsigned int packet_len;
-+
-+ FN_ENTER;
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto ok;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto ok;
-+ }
-+ body = (void*)(head + 1);
-+
-+ /* add WF_FC_ISWEPi: auth step 3 needs to be encrypted */
-+ head->fc = WF_FC_ISWEPi + WF_FSTYPE_AUTHENi;
-+ /* FIXME: is this needed?? authen4 does it...
-+ * I think it's even wrong since we shouldn't re-use old
-+ * values but instead let the firmware calculate proper ones
-+ head->dur = req->hdr->dur;
-+ head->seq = req->hdr->seq;
-+ */
-+ MAC_COPY(head->da, adev->bssid);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, adev->bssid);
-+
-+ /* already in IEEE format, no endianness conversion */
-+ body->auth_alg = *(req->auth_alg);
-+ body->auth_seq = host2ieee16(3);
-+ body->status = host2ieee16(0);
-+ memcpy(&body->challenge, req->challenge, req->challenge->len + 2);
-+ packet_len = WLAN_HDR_A3_LEN + 8 + req->challenge->len;
-+
-+ log(L_ASSOC|L_XFER, "transmit_authen3!\n");
-+
-+ acx_l_tx_data(adev, tx, packet_len);
-+ok:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_authen4
-+*/
-+static int
-+acx_l_transmit_authen4(acx_device_t *adev, const wlan_fr_authen_t *req)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct auth_frame_body *body;
-+
-+ FN_ENTER;
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto ok;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto ok;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_AUTHENi; /* 0xb0 */
-+ head->dur = 0 /* req->hdr->dur */;
-+ MAC_COPY(head->da, req->hdr->a2);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, req->hdr->a3);
-+ head->seq = 0 /* req->hdr->seq */;
-+
-+ /* already in IEEE format, no endianness conversion */
-+ body->auth_alg = *(req->auth_alg);
-+ body->auth_seq = host2ieee16(4);
-+ body->status = host2ieee16(0);
-+
-+ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + 2 + 2 + 2);
-+ok:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_assoc_req
-+**
-+** adev->ap_client is a current candidate AP here
-+*/
-+static int
-+acx_l_transmit_assoc_req(acx_device_t *adev)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ u8 *body, *p, *prate;
-+ unsigned int packet_len;
-+ u16 cap;
-+
-+ FN_ENTER;
-+
-+ log(L_ASSOC, "sending association request, "
-+ "awaiting response. NOT ASSOCIATED YET\n");
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_ASSOCREQi;
-+ head->dur = host2ieee16(0x8000);
-+ MAC_COPY(head->da, adev->bssid);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, adev->bssid);
-+ head->seq = 0;
-+
-+ p = body;
-+ /* now start filling the AssocReq frame body */
-+
-+ /* since this assoc request will most likely only get
-+ * sent in the STA to AP case (and not when Ad-Hoc IBSS),
-+ * the cap combination indicated here will thus be
-+ * WF_MGMT_CAP_ESSi *always* (no IBSS ever)
-+ * The specs are more than non-obvious on all that:
-+ *
-+ * 802.11 7.3.1.4 Capability Information field
-+ ** APs set the ESS subfield to 1 and the IBSS subfield to 0 within
-+ ** Beacon or Probe Response management frames. STAs within an IBSS
-+ ** set the ESS subfield to 0 and the IBSS subfield to 1 in transmitted
-+ ** Beacon or Probe Response management frames
-+ **
-+ ** APs set the Privacy subfield to 1 within transmitted Beacon,
-+ ** Probe Response, Association Response, and Reassociation Response
-+ ** if WEP is required for all data type frames within the BSS.
-+ ** STAs within an IBSS set the Privacy subfield to 1 in Beacon
-+ ** or Probe Response management frames if WEP is required
-+ ** for all data type frames within the IBSS */
-+
-+ /* note that returning 0 will be refused by several APs...
-+ * (so this indicates that you're probably supposed to
-+ * "confirm" the ESS mode) */
-+ cap = WF_MGMT_CAP_ESSi;
-+
-+ /* this one used to be a check on wep_restricted,
-+ * but more likely it's wep_enabled instead */
-+ if (adev->wep_enabled)
-+ SET_BIT(cap, WF_MGMT_CAP_PRIVACYi);
-+
-+ /* Probably we can just set these always, because our hw is
-+ ** capable of shortpre and PBCC --vda */
-+ /* only ask for short preamble if the peer station supports it */
-+ if (adev->ap_client->cap_info & WF_MGMT_CAP_SHORT)
-+ SET_BIT(cap, WF_MGMT_CAP_SHORTi);
-+ /* only ask for PBCC support if the peer station supports it */
-+ if (adev->ap_client->cap_info & WF_MGMT_CAP_PBCC)
-+ SET_BIT(cap, WF_MGMT_CAP_PBCCi);
-+
-+ /* IEs: 1. caps */
-+ *(u16*)p = cap; p += 2;
-+ /* 2. listen interval */
-+ *(u16*)p = host2ieee16(adev->listen_interval); p += 2;
-+ /* 3. ESSID */
-+ p = wlan_fill_ie_ssid(p,
-+ strlen(adev->essid_for_assoc), adev->essid_for_assoc);
-+ /* 4. supp rates */
-+ prate = p;
-+ p = wlan_fill_ie_rates(p,
-+ adev->rate_supported_len, adev->rate_supported);
-+ /* 5. ext supp rates */
-+ p = wlan_fill_ie_rates_ext(p,
-+ adev->rate_supported_len, adev->rate_supported);
-+
-+ if (acx_debug & L_DEBUG) {
-+ printk("association: rates element\n");
-+ acx_dump_bytes(prate, p - prate);
-+ }
-+
-+ /* calculate lengths */
-+ packet_len = WLAN_HDR_A3_LEN + (p - body);
-+
-+ log(L_ASSOC, "association: requesting caps 0x%04X, ESSID \"%s\"\n",
-+ cap, adev->essid_for_assoc);
-+
-+ acx_l_tx_data(adev, tx, packet_len);
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_disassoc
-+**
-+** FIXME: looks like incomplete implementation of a helper:
-+** acx_l_transmit_disassoc(adev, clt) - kick this client (we're an AP)
-+** acx_l_transmit_disassoc(adev, NULL) - leave BSSID (we're a STA)
-+*/
-+#ifdef BROKEN
-+int
-+acx_l_transmit_disassoc(acx_device_t *adev, client_t *clt)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct disassoc_frame_body *body;
-+
-+ FN_ENTER;
-+/* if (clt != NULL) { */
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+/* clt->used = CLIENT_AUTHENTICATED_2; - not (yet?) associated */
-+
-+ head->fc = WF_FSTYPE_DISASSOCi;
-+ head->dur = 0;
-+ /* huh? It muchly depends on whether we're STA or AP...
-+ ** sta->ap: da=bssid, sa=own, bssid=bssid
-+ ** ap->sta: da=sta, sa=bssid, bssid=bssid. FIXME! */
-+ MAC_COPY(head->da, adev->bssid);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, adev->dev_addr);
-+ head->seq = 0;
-+
-+ /* "Class 3 frame received from nonassociated station." */
-+ body->reason = host2ieee16(7);
-+
-+ /* fixed size struct, ok to sizeof */
-+ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + sizeof(*body));
-+/* } */
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_s_complete_scan
-+**
-+** Called either from after_interrupt_task() if:
-+** 1) there was Scan_Complete IRQ, or
-+** 2) scanning expired in timer()
-+** We need to decide which ESS or IBSS to join.
-+** Iterates thru adev->sta_list:
-+** if adev->ap is not bcast, will join only specified
-+** ESS or IBSS with this bssid
-+** checks peers' caps for ESS/IBSS bit
-+** checks peers' SSID, allows exact match or hidden SSID
-+** If station to join is chosen:
-+** points adev->ap_client to the chosen struct client
-+** sets adev->essid_for_assoc for future assoc attempt
-+** Auth/assoc is not yet performed
-+** Returns OK if there is no need to restart scan
-+*/
-+int
-+acx_s_complete_scan(acx_device_t *adev)
-+{
-+ struct client *bss;
-+ unsigned long flags;
-+ u16 needed_cap;
-+ int i;
-+ int idx_found = -1;
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ needed_cap = WF_MGMT_CAP_IBSS; /* 2, we require Ad-Hoc */
-+ break;
-+ case ACX_MODE_2_STA:
-+ needed_cap = WF_MGMT_CAP_ESS; /* 1, we require Managed */
-+ break;
-+ default:
-+ printk("acx: driver bug: mode=%d in complete_scan()\n", adev->mode);
-+ dump_stack();
-+ goto end;
-+ }
-+
-+ acx_lock(adev, flags);
-+
-+ /* TODO: sta_iterator hiding implementation would be nice here... */
-+
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ bss = &adev->sta_list[i];
-+ if (!bss->used) continue;
-+
-+
-+ log(L_ASSOC, "scan table: SSID=\"%s\" CH=%d SIR=%d SNR=%d\n",
-+ bss->essid, bss->channel, bss->sir, bss->snr);
-+
-+ if (!mac_is_bcast(adev->ap))
-+ if (!mac_is_equal(bss->bssid, adev->ap))
-+ continue; /* keep looking */
-+
-+ /* broken peer with no mode flags set? */
-+ if (unlikely(!(bss->cap_info & (WF_MGMT_CAP_ESS | WF_MGMT_CAP_IBSS)))) {
-+ printk("%s: strange peer "MACSTR" found with "
-+ "neither ESS (AP) nor IBSS (Ad-Hoc) "
-+ "capability - skipped\n",
-+ adev->ndev->name, MAC(bss->address));
-+ continue;
-+ }
-+ log(L_ASSOC, "peer_cap 0x%04X, needed_cap 0x%04X\n",
-+ bss->cap_info, needed_cap);
-+
-+ /* does peer station support what we need? */
-+ if ((bss->cap_info & needed_cap) != needed_cap)
-+ continue; /* keep looking */
-+
-+ /* strange peer with NO basic rates?! */
-+ if (unlikely(!bss->rate_bas)) {
-+ printk("%s: strange peer "MACSTR" with empty rate set "
-+ "- skipped\n",
-+ adev->ndev->name, MAC(bss->address));
-+ continue;
-+ }
-+
-+ /* do we support all basic rates of this peer? */
-+ if ((bss->rate_bas & adev->rate_oper) != bss->rate_bas) {
-+/* we probably need to have all rates as operational rates,
-+ even in case of an 11M-only configuration */
-+#ifdef THIS_IS_TROUBLESOME
-+ printk("%s: peer "MACSTR": incompatible basic rates "
-+ "(AP requests 0x%04X, we have 0x%04X) "
-+ "- skipped\n",
-+ adev->ndev->name, MAC(bss->address),
-+ bss->rate_bas, adev->rate_oper);
-+ continue;
-+#else
-+ printk("%s: peer "MACSTR": incompatible basic rates "
-+ "(AP requests 0x%04X, we have 0x%04X). "
-+ "Considering anyway...\n",
-+ adev->ndev->name, MAC(bss->address),
-+ bss->rate_bas, adev->rate_oper);
-+#endif
-+ }
-+
-+ if ( !(adev->reg_dom_chanmask & (1<<(bss->channel-1))) ) {
-+ printk("%s: warning: peer "MACSTR" is on channel %d "
-+ "outside of channel range of current "
-+ "regulatory domain - couldn't join "
-+ "even if other settings match. "
-+ "You might want to adapt your config\n",
-+ adev->ndev->name, MAC(bss->address),
-+ bss->channel);
-+ continue; /* keep looking */
-+ }
-+
-+ if (!adev->essid_active || !strcmp(bss->essid, adev->essid)) {
-+ log(L_ASSOC,
-+ "found station with matching ESSID! ('%s' "
-+ "station, '%s' config)\n",
-+ bss->essid,
-+ (adev->essid_active) ? adev->essid : "[any]");
-+ /* TODO: continue looking for peer with better SNR */
-+ bss->used = CLIENT_JOIN_CANDIDATE;
-+ idx_found = i;
-+
-+ /* stop searching if this station is
-+ * on the current channel, otherwise
-+ * keep looking for an even better match */
-+ if (bss->channel == adev->channel)
-+ break;
-+ } else
-+ if (is_hidden_essid(bss->essid)) {
-+ /* hmm, station with empty or single-space SSID:
-+ * using hidden SSID broadcast?
-+ */
-+ /* This behaviour is broken: which AP from zillion
-+ ** of APs with hidden SSID you'd try?
-+ ** We should use Probe requests to get Probe responses
-+ ** and check for real SSID (are those never hidden?) */
-+ bss->used = CLIENT_JOIN_CANDIDATE;
-+ if (idx_found == -1)
-+ idx_found = i;
-+ log(L_ASSOC, "found station with empty or "
-+ "single-space (hidden) SSID, considering "
-+ "for assoc attempt\n");
-+ /* ...and keep looking for better matches */
-+ } else {
-+ log(L_ASSOC, "ESSID doesn't match! ('%s' "
-+ "station, '%s' config)\n",
-+ bss->essid,
-+ (adev->essid_active) ? adev->essid : "[any]");
-+ }
-+ }
-+
-+ /* TODO: iterate thru join candidates instead */
-+ /* TODO: rescan if not associated within some timeout */
-+ if (idx_found != -1) {
-+ char *essid_src;
-+ size_t essid_len;
-+
-+ bss = &adev->sta_list[idx_found];
-+ adev->ap_client = bss;
-+
-+ if (is_hidden_essid(bss->essid)) {
-+ /* if the ESSID of the station we found is empty
-+ * (no broadcast), then use user-configured ESSID
-+ * instead */
-+ essid_src = adev->essid;
-+ essid_len = adev->essid_len;
-+ } else {
-+ essid_src = bss->essid;
-+ essid_len = strlen(bss->essid);
-+ }
-+
-+ acx_update_capabilities(adev);
-+
-+ memcpy(adev->essid_for_assoc, essid_src, essid_len);
-+ adev->essid_for_assoc[essid_len] = '\0';
-+ adev->channel = bss->channel;
-+ MAC_COPY(adev->bssid, bss->bssid);
-+
-+ bss->rate_cfg = (bss->rate_cap & adev->rate_oper);
-+ bss->rate_cur = 1 << lowest_bit(bss->rate_cfg);
-+ bss->rate_100 = acx_rate111to100(bss->rate_cur);
-+
-+ acxlog_mac(L_ASSOC,
-+ "matching station found: ", adev->bssid, ", joining\n");
-+
-+ /* TODO: do we need to switch to the peer's channel first? */
-+
-+ if (ACX_MODE_0_ADHOC == adev->mode) {
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ } else {
-+ acx_l_transmit_authen1(adev);
-+ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH);
-+ }
-+ } else { /* idx_found == -1 */
-+ /* uh oh, no station found in range */
-+ if (ACX_MODE_0_ADHOC == adev->mode) {
-+ printk("%s: no matching station found in range, "
-+ "generating our own IBSS instead\n",
-+ adev->ndev->name);
-+ /* we do it the HostAP way: */
-+ MAC_COPY(adev->bssid, adev->dev_addr);
-+ adev->bssid[0] |= 0x02; /* 'local assigned addr' bit */
-+ /* add IBSS bit to our caps... */
-+ acx_update_capabilities(adev);
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ /* In order to cmd_join be called below */
-+ idx_found = 0;
-+ } else {
-+ /* we shall scan again, AP can be
-+ ** just temporarily powered off */
-+ log(L_ASSOC,
-+ "no matching station found in range yet\n");
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING);
-+ result = NOT_OK;
-+ }
-+ }
-+
-+ acx_unlock(adev, flags);
-+
-+ if (idx_found != -1) {
-+ if (ACX_MODE_0_ADHOC == adev->mode) {
-+ /* need to update channel in beacon template */
-+ SET_BIT(adev->set_mask, SET_TEMPLATES);
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask)
-+ acx_s_update_card_settings(adev);
-+ }
-+ /* Inform firmware on our decision to start or join BSS */
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ }
-+
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_read_fw
-+**
-+** Loads a firmware image
-+**
-+** Returns:
-+** 0 unable to load file
-+** pointer to firmware success
-+*/
-+firmware_image_t*
-+acx_s_read_fw(struct device *dev, const char *file, u32 *size)
-+{
-+ firmware_image_t *res;
-+ const struct firmware *fw_entry;
-+
-+ res = NULL;
-+ log(L_INIT, "requesting firmware image '%s'\n", file);
-+ if (!request_firmware(&fw_entry, file, dev)) {
-+ *size = 8;
-+ if (fw_entry->size >= 8)
-+ *size = 8 + le32_to_cpu(*(u32 *)(fw_entry->data + 4));
-+ if (fw_entry->size != *size) {
-+ printk("acx: firmware size does not match "
-+ "firmware header: %d != %d, "
-+ "aborting fw upload\n",
-+ (int) fw_entry->size, (int) *size);
-+ goto release_ret;
-+ }
-+ res = vmalloc(*size);
-+ if (!res) {
-+ printk("acx: no memory for firmware "
-+ "(%u bytes)\n", *size);
-+ goto release_ret;
-+ }
-+ memcpy(res, fw_entry->data, fw_entry->size);
-+release_ret:
-+ release_firmware(fw_entry);
-+ return res;
-+ }
-+ printk("acx: firmware image '%s' was not provided. "
-+ "Check your hotplug scripts\n", file);
-+
-+ /* checksum will be verified in write_fw, so don't bother here */
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_set_wepkey
-+*/
-+static void
-+acx100_s_set_wepkey(acx_device_t *adev)
-+{
-+ ie_dot11WEPDefaultKey_t dk;
-+ int i;
-+
-+ for (i = 0; i < DOT11_MAX_DEFAULT_WEP_KEYS; i++) {
-+ if (adev->wep_keys[i].size != 0) {
-+ log(L_INIT, "setting WEP key: %d with "
-+ "total size: %d\n", i, (int) adev->wep_keys[i].size);
-+ dk.action = 1;
-+ dk.keySize = adev->wep_keys[i].size;
-+ dk.defaultKeyNum = i;
-+ memcpy(dk.key, adev->wep_keys[i].key, dk.keySize);
-+ acx_s_configure(adev, &dk, ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE);
-+ }
-+ }
-+}
-+
-+static void
-+acx111_s_set_wepkey(acx_device_t *adev)
-+{
-+ acx111WEPDefaultKey_t dk;
-+ int i;
-+
-+ for (i = 0; i < DOT11_MAX_DEFAULT_WEP_KEYS; i++) {
-+ if (adev->wep_keys[i].size != 0) {
-+ log(L_INIT, "setting WEP key: %d with "
-+ "total size: %d\n", i, (int) adev->wep_keys[i].size);
-+ memset(&dk, 0, sizeof(dk));
-+ dk.action = cpu_to_le16(1); /* "add key"; yes, that's a 16bit value */
-+ dk.keySize = adev->wep_keys[i].size;
-+
-+ /* are these two lines necessary? */
-+ dk.type = 0; /* default WEP key */
-+ dk.index = 0; /* ignored when setting default key */
-+
-+ dk.defaultKeyNum = i;
-+ memcpy(dk.key, adev->wep_keys[i].key, dk.keySize);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WEP_MGMT, &dk, sizeof(dk));
-+ }
-+ }
-+}
-+
-+static void
-+acx_s_set_wepkey(acx_device_t *adev)
-+{
-+ if (IS_ACX111(adev))
-+ acx111_s_set_wepkey(adev);
-+ else
-+ acx100_s_set_wepkey(adev);
-+}
-+
-+
-+/***********************************************************************
-+** acx100_s_init_wep
-+**
-+** FIXME: this should probably be moved into the new card settings
-+** management, but since we're also modifying the memory map layout here
-+** due to the WEP key space we want, we should take care...
-+*/
-+static int
-+acx100_s_init_wep(acx_device_t *adev)
-+{
-+ acx100_ie_wep_options_t options;
-+ ie_dot11WEPDefaultKeyID_t dk;
-+ acx_ie_memmap_t pt;
-+ int res = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ if (OK != acx_s_interrogate(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ log(L_DEBUG, "CodeEnd:%X\n", pt.CodeEnd);
-+
-+ pt.WEPCacheStart = cpu_to_le32(le32_to_cpu(pt.CodeEnd) + 0x4);
-+ pt.WEPCacheEnd = cpu_to_le32(le32_to_cpu(pt.CodeEnd) + 0x4);
-+
-+ if (OK != acx_s_configure(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ /* let's choose maximum setting: 4 default keys, plus 10 other keys: */
-+ options.NumKeys = cpu_to_le16(DOT11_MAX_DEFAULT_WEP_KEYS + 10);
-+ options.WEPOption = 0x00;
-+
-+ log(L_ASSOC, "%s: writing WEP options\n", __func__);
-+ acx_s_configure(adev, &options, ACX100_IE_WEP_OPTIONS);
-+
-+ acx100_s_set_wepkey(adev);
-+
-+ if (adev->wep_keys[adev->wep_current_index].size != 0) {
-+ log(L_ASSOC, "setting active default WEP key number: %d\n",
-+ adev->wep_current_index);
-+ dk.KeyID = adev->wep_current_index;
-+ acx_s_configure(adev, &dk, ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET); /* 0x1010 */
-+ }
-+ /* FIXME!!! wep_key_struct is filled nowhere! But adev
-+ * is initialized to 0, and we don't REALLY need those keys either */
-+/* for (i = 0; i < 10; i++) {
-+ if (adev->wep_key_struct[i].len != 0) {
-+ MAC_COPY(wep_mgmt.MacAddr, adev->wep_key_struct[i].addr);
-+ wep_mgmt.KeySize = cpu_to_le16(adev->wep_key_struct[i].len);
-+ memcpy(&wep_mgmt.Key, adev->wep_key_struct[i].key, le16_to_cpu(wep_mgmt.KeySize));
-+ wep_mgmt.Action = cpu_to_le16(1);
-+ log(L_ASSOC, "writing WEP key %d (len %d)\n", i, le16_to_cpu(wep_mgmt.KeySize));
-+ if (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_WEP_MGMT, &wep_mgmt, sizeof(wep_mgmt))) {
-+ adev->wep_key_struct[i].index = i;
-+ }
-+ }
-+ }
-+*/
-+
-+ /* now retrieve the updated WEPCacheEnd pointer... */
-+ if (OK != acx_s_interrogate(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
-+ printk("%s: ACX1xx_IE_MEMORY_MAP read #2 FAILED\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ /* ...and tell it to start allocating templates at that location */
-+ /* (no endianness conversion needed) */
-+ pt.PacketTemplateStart = pt.WEPCacheEnd;
-+
-+ if (OK != acx_s_configure(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
-+ printk("%s: ACX1xx_IE_MEMORY_MAP write #2 FAILED\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ res = OK;
-+
-+fail:
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+static int
-+acx_s_init_max_template_generic(acx_device_t *adev, unsigned int len, unsigned int cmd)
-+{
-+ int res;
-+ union {
-+ acx_template_nullframe_t null;
-+ acx_template_beacon_t b;
-+ acx_template_tim_t tim;
-+ acx_template_probereq_t preq;
-+ acx_template_proberesp_t presp;
-+ } templ;
-+
-+ memset(&templ, 0, len);
-+ templ.null.size = cpu_to_le16(len - 2);
-+ res = acx_s_issue_cmd(adev, cmd, &templ, len);
-+ return res;
-+}
-+
-+static inline int
-+acx_s_init_max_null_data_template(acx_device_t *adev)
-+{
-+ return acx_s_init_max_template_generic(
-+ adev, sizeof(acx_template_nullframe_t), ACX1xx_CMD_CONFIG_NULL_DATA
-+ );
-+}
-+
-+static inline int
-+acx_s_init_max_beacon_template(acx_device_t *adev)
-+{
-+ return acx_s_init_max_template_generic(
-+ adev, sizeof(acx_template_beacon_t), ACX1xx_CMD_CONFIG_BEACON
-+ );
-+}
-+
-+static inline int
-+acx_s_init_max_tim_template(acx_device_t *adev)
-+{
-+ return acx_s_init_max_template_generic(
-+ adev, sizeof(acx_template_tim_t), ACX1xx_CMD_CONFIG_TIM
-+ );
-+}
-+
-+static inline int
-+acx_s_init_max_probe_response_template(acx_device_t *adev)
-+{
-+ return acx_s_init_max_template_generic(
-+ adev, sizeof(acx_template_proberesp_t), ACX1xx_CMD_CONFIG_PROBE_RESPONSE
-+ );
-+}
-+
-+static inline int
-+acx_s_init_max_probe_request_template(acx_device_t *adev)
-+{
-+ return acx_s_init_max_template_generic(
-+ adev, sizeof(acx_template_probereq_t), ACX1xx_CMD_CONFIG_PROBE_REQUEST
-+ );
-+}
-+
-+/***********************************************************************
-+** acx_s_set_tim_template
-+**
-+** FIXME: In full blown driver we will regularly update partial virtual bitmap
-+** by calling this function
-+** (it can be done by irq handler on each DTIM irq or by timer...)
-+
-+[802.11 7.3.2.6] TIM information element:
-+- 1 EID
-+- 1 Length
-+1 1 DTIM Count
-+ indicates how many beacons (including this) appear before next DTIM
-+ (0=this one is a DTIM)
-+2 1 DTIM Period
-+ number of beacons between successive DTIMs
-+ (0=reserved, 1=all TIMs are DTIMs, 2=every other, etc)
-+3 1 Bitmap Control
-+ bit0: Traffic Indicator bit associated with Assoc ID 0 (Bcast AID?)
-+ set to 1 in TIM elements with a value of 0 in the DTIM Count field
-+ when one or more broadcast or multicast frames are buffered at the AP.
-+ bit1-7: Bitmap Offset (logically Bitmap_Offset = Bitmap_Control & 0xFE).
-+4 n Partial Virtual Bitmap
-+ Visible part of traffic-indication bitmap.
-+ Full bitmap consists of 2008 bits (251 octets) such that bit number N
-+ (0<=N<=2007) in the bitmap corresponds to bit number (N mod 8)
-+ in octet number N/8 where the low-order bit of each octet is bit0,
-+ and the high order bit is bit7.
-+ Each set bit in virtual bitmap corresponds to traffic buffered by AP
-+ for a specific station (with corresponding AID?).
-+ Partial Virtual Bitmap shows a part of bitmap which has non-zero.
-+ Bitmap Offset is a number of skipped zero octets (see above).
-+ 'Missing' octets at the tail are also assumed to be zero.
-+ Example: Length=6, Bitmap_Offset=2, Partial_Virtual_Bitmap=55 55 55
-+ This means that traffic-indication bitmap is:
-+ 00000000 00000000 01010101 01010101 01010101 00000000 00000000...
-+ (is bit0 in the map is always 0 and real value is in Bitmap Control bit0?)
-+*/
-+static int
-+acx_s_set_tim_template(acx_device_t *adev)
-+{
-+/* For now, configure smallish test bitmap, all zero ("no pending data") */
-+ enum { bitmap_size = 5 };
-+
-+ acx_template_tim_t t;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ memset(&t, 0, sizeof(t));
-+ t.size = 5 + bitmap_size; /* eid+len+count+period+bmap_ctrl + bmap */
-+ t.tim_eid = WLAN_EID_TIM;
-+ t.len = 3 + bitmap_size; /* count+period+bmap_ctrl + bmap */
-+ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_TIM, &t, sizeof(t));
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_fill_beacon_or_proberesp_template
-+**
-+** For frame format info, please see 802.11-1999.pdf item 7.2.3.9 and below!!
-+**
-+** NB: we use the fact that
-+** struct acx_template_proberesp and struct acx_template_beacon are the same
-+** (well, almost...)
-+**
-+** [802.11] Beacon's body consist of these IEs:
-+** 1 Timestamp
-+** 2 Beacon interval
-+** 3 Capability information
-+** 4 SSID
-+** 5 Supported rates (up to 8 rates)
-+** 6 FH Parameter Set (frequency-hopping PHYs only)
-+** 7 DS Parameter Set (direct sequence PHYs only)
-+** 8 CF Parameter Set (only if PCF is supported)
-+** 9 IBSS Parameter Set (ad-hoc only)
-+**
-+** Beacon only:
-+** 10 TIM (AP only) (see 802.11 7.3.2.6)
-+** 11 Country Information (802.11d)
-+** 12 FH Parameters (802.11d)
-+** 13 FH Pattern Table (802.11d)
-+** ... (?!! did not yet find relevant PDF file... --vda)
-+** 19 ERP Information (extended rate PHYs)
-+** 20 Extended Supported Rates (if more than 8 rates)
-+**
-+** Proberesp only:
-+** 10 Country information (802.11d)
-+** 11 FH Parameters (802.11d)
-+** 12 FH Pattern Table (802.11d)
-+** 13-n Requested information elements (802.11d)
-+** ????
-+** 18 ERP Information (extended rate PHYs)
-+** 19 Extended Supported Rates (if more than 8 rates)
-+*/
-+static int
-+acx_fill_beacon_or_proberesp_template(acx_device_t *adev,
-+ struct acx_template_beacon *templ,
-+ u16 fc /* in host order! */)
-+{
-+ int len;
-+ u8 *p;
-+
-+ FN_ENTER;
-+
-+ memset(templ, 0, sizeof(*templ));
-+ MAC_BCAST(templ->da);
-+ MAC_COPY(templ->sa, adev->dev_addr);
-+ MAC_COPY(templ->bssid, adev->bssid);
-+
-+ templ->beacon_interval = cpu_to_le16(adev->beacon_interval);
-+ acx_update_capabilities(adev);
-+ templ->cap = cpu_to_le16(adev->capabilities);
-+
-+ p = templ->variable;
-+ p = wlan_fill_ie_ssid(p, adev->essid_len, adev->essid);
-+ p = wlan_fill_ie_rates(p, adev->rate_supported_len, adev->rate_supported);
-+ p = wlan_fill_ie_ds_parms(p, adev->channel);
-+ /* NB: should go AFTER tim, but acx seem to keep tim last always */
-+ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len, adev->rate_supported);
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ /* ATIM window */
-+ p = wlan_fill_ie_ibss_parms(p, 0); break;
-+ case ACX_MODE_3_AP:
-+ /* TIM IE is set up as separate template */
-+ break;
-+ }
-+
-+ len = p - (u8*)templ;
-+ templ->fc = cpu_to_le16(WF_FTYPE_MGMT | fc);
-+ /* - 2: do not count 'u16 size' field */
-+ templ->size = cpu_to_le16(len - 2);
-+
-+ FN_EXIT1(len);
-+ return len;
-+}
-+
-+
-+#if POWER_SAVE_80211
-+/***********************************************************************
-+** acx_s_set_null_data_template
-+*/
-+static int
-+acx_s_set_null_data_template(acx_device_t *adev)
-+{
-+ struct acx_template_nullframe b;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ /* memset(&b, 0, sizeof(b)); not needed, setting all members */
-+
-+ b.size = cpu_to_le16(sizeof(b) - 2);
-+ b.hdr.fc = WF_FTYPE_MGMTi | WF_FSTYPE_NULLi;
-+ b.hdr.dur = 0;
-+ MAC_BCAST(b.hdr.a1);
-+ MAC_COPY(b.hdr.a2, adev->dev_addr);
-+ MAC_COPY(b.hdr.a3, adev->bssid);
-+ b.hdr.seq = 0;
-+
-+ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_NULL_DATA, &b, sizeof(b));
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_s_set_beacon_template
-+*/
-+static int
-+acx_s_set_beacon_template(acx_device_t *adev)
-+{
-+ struct acx_template_beacon bcn;
-+ int len, result;
-+
-+ FN_ENTER;
-+
-+ len = acx_fill_beacon_or_proberesp_template(adev, &bcn, WF_FSTYPE_BEACON);
-+ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_BEACON, &bcn, len);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_set_probe_response_template
-+*/
-+static int
-+acx_s_set_probe_response_template(acx_device_t *adev)
-+{
-+ struct acx_template_proberesp pr;
-+ int len, result;
-+
-+ FN_ENTER;
-+
-+ len = acx_fill_beacon_or_proberesp_template(adev, &pr, WF_FSTYPE_PROBERESP);
-+ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_PROBE_RESPONSE, &pr, len);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_init_packet_templates()
-+**
-+** NOTE: order is very important here, to have a correct memory layout!
-+** init templates: max Probe Request (station mode), max NULL data,
-+** max Beacon, max TIM, max Probe Response.
-+*/
-+static int
-+acx_s_init_packet_templates(acx_device_t *adev)
-+{
-+ acx_ie_memmap_t mm; /* ACX100 only */
-+ int result = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ log(L_DEBUG|L_INIT, "initializing max packet templates\n");
-+
-+ if (OK != acx_s_init_max_probe_request_template(adev))
-+ goto failed;
-+
-+ if (OK != acx_s_init_max_null_data_template(adev))
-+ goto failed;
-+
-+ if (OK != acx_s_init_max_beacon_template(adev))
-+ goto failed;
-+
-+ if (OK != acx_s_init_max_tim_template(adev))
-+ goto failed;
-+
-+ if (OK != acx_s_init_max_probe_response_template(adev))
-+ goto failed;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111 doesn't need the memory map magic below,
-+ * and the other templates will be set later (acx_start) */
-+ result = OK;
-+ goto success;
-+ }
-+
-+ /* ACX100 will have its TIM template set,
-+ * and we also need to update the memory map */
-+
-+ if (OK != acx_s_set_tim_template(adev))
-+ goto failed_acx100;
-+
-+ log(L_DEBUG, "sizeof(memmap)=%d bytes\n", (int)sizeof(mm));
-+
-+ if (OK != acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP))
-+ goto failed_acx100;
-+
-+ mm.QueueStart = cpu_to_le32(le32_to_cpu(mm.PacketTemplateEnd) + 4);
-+ if (OK != acx_s_configure(adev, &mm, ACX1xx_IE_MEMORY_MAP))
-+ goto failed_acx100;
-+
-+ result = OK;
-+ goto success;
-+
-+failed_acx100:
-+ log(L_DEBUG|L_INIT,
-+ /* "cb=0x%X\n" */
-+ "ACXMemoryMap:\n"
-+ ".CodeStart=0x%X\n"
-+ ".CodeEnd=0x%X\n"
-+ ".WEPCacheStart=0x%X\n"
-+ ".WEPCacheEnd=0x%X\n"
-+ ".PacketTemplateStart=0x%X\n"
-+ ".PacketTemplateEnd=0x%X\n",
-+ /* len, */
-+ le32_to_cpu(mm.CodeStart),
-+ le32_to_cpu(mm.CodeEnd),
-+ le32_to_cpu(mm.WEPCacheStart),
-+ le32_to_cpu(mm.WEPCacheEnd),
-+ le32_to_cpu(mm.PacketTemplateStart),
-+ le32_to_cpu(mm.PacketTemplateEnd));
-+
-+failed:
-+ printk("%s: %s() FAILED\n", adev->ndev->name, __func__);
-+
-+success:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_s_set_probe_request_template(acx_device_t *adev)
-+{
-+ struct acx_template_probereq probereq;
-+ char *p;
-+ int res;
-+ int frame_len;
-+
-+ FN_ENTER;
-+
-+ memset(&probereq, 0, sizeof(probereq));
-+
-+ probereq.fc = WF_FTYPE_MGMTi | WF_FSTYPE_PROBEREQi;
-+ MAC_BCAST(probereq.da);
-+ MAC_COPY(probereq.sa, adev->dev_addr);
-+ MAC_BCAST(probereq.bssid);
-+
-+ p = probereq.variable;
-+ p = wlan_fill_ie_ssid(p, adev->essid_len, adev->essid);
-+ p = wlan_fill_ie_rates(p, adev->rate_supported_len, adev->rate_supported);
-+ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len, adev->rate_supported);
-+ frame_len = p - (char*)&probereq;
-+ probereq.size = cpu_to_le16(frame_len - 2);
-+
-+ res = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_PROBE_REQUEST, &probereq, frame_len);
-+ FN_EXIT0;
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_init_mac
-+*/
-+int
-+acx_s_init_mac(acx_device_t *adev)
-+{
-+ int result = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ if (IS_ACX111(adev)) {
-+ adev->ie_len = acx111_ie_len;
-+ adev->ie_len_dot11 = acx111_ie_len_dot11;
-+ } else {
-+ adev->ie_len = acx100_ie_len;
-+ adev->ie_len_dot11 = acx100_ie_len_dot11;
-+ }
-+
-+#if defined (ACX_MEM)
-+ adev->memblocksize = 256; /* 256 is default */
-+ /* try to load radio for both ACX100 and ACX111, since both
-+ * chips have at least some firmware versions making use of an
-+ * external radio module */
-+ acxmem_s_upload_radio(adev);
-+#else
-+ if (IS_PCI(adev)) {
-+ adev->memblocksize = 256; /* 256 is default */
-+ /* try to load radio for both ACX100 and ACX111, since both
-+ * chips have at least some firmware versions making use of an
-+ * external radio module */
-+ acxpci_s_upload_radio(adev);
-+ } else {
-+ adev->memblocksize = 128;
-+ }
-+#endif
-+
-+ if (IS_ACX111(adev)) {
-+ /* for ACX111, the order is different from ACX100
-+ 1. init packet templates
-+ 2. create station context and create dma regions
-+ 3. init wep default keys
-+ */
-+ if (OK != acx_s_init_packet_templates(adev))
-+ goto fail;
-+ if (OK != acx111_s_create_dma_regions(adev)) {
-+ printk("%s: acx111_create_dma_regions FAILED\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ } else {
-+ if (OK != acx100_s_init_wep(adev))
-+ goto fail;
-+ if (OK != acx_s_init_packet_templates(adev))
-+ goto fail;
-+ if (OK != acx100_s_create_dma_regions(adev)) {
-+ printk("%s: acx100_create_dma_regions FAILED\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ }
-+
-+ MAC_COPY(adev->ndev->dev_addr, adev->dev_addr);
-+ result = OK;
-+
-+fail:
-+ if (result)
-+ printk("acx: init_mac() FAILED\n");
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+void
-+acx_s_set_sane_reg_domain(acx_device_t *adev, int do_set)
-+{
-+ unsigned mask;
-+
-+ unsigned int i;
-+
-+ for (i = 0; i < sizeof(acx_reg_domain_ids); i++)
-+ if (acx_reg_domain_ids[i] == adev->reg_dom_id)
-+ break;
-+
-+ if (sizeof(acx_reg_domain_ids) == i) {
-+ log(L_INIT, "Invalid or unsupported regulatory domain"
-+ " 0x%02X specified, falling back to FCC (USA)!"
-+ " Please report if this sounds fishy!\n",
-+ adev->reg_dom_id);
-+ i = 0;
-+ adev->reg_dom_id = acx_reg_domain_ids[i];
-+
-+ /* since there was a mismatch, we need to force updating */
-+ do_set = 1;
-+ }
-+
-+ if (do_set) {
-+ acx_ie_generic_t dom;
-+ dom.m.bytes[0] = adev->reg_dom_id;
-+ acx_s_configure(adev, &dom, ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN);
-+ }
-+
-+ adev->reg_dom_chanmask = reg_domain_channel_masks[i];
-+
-+ mask = (1 << (adev->channel - 1));
-+ if (!(adev->reg_dom_chanmask & mask)) {
-+ /* hmm, need to adjust our channel to reside within domain */
-+ mask = 1;
-+ for (i = 1; i <= 14; i++) {
-+ if (adev->reg_dom_chanmask & mask) {
-+ printk("%s: adjusting selected channel from %d "
-+ "to %d due to new regulatory domain\n",
-+ adev->ndev->name, adev->channel, i);
-+ adev->channel = i;
-+ break;
-+ }
-+ mask <<= 1;
-+ }
-+ }
-+}
-+
-+
-+#if POWER_SAVE_80211
-+static void
-+acx_s_update_80211_powersave_mode(acx_device_t *adev)
-+{
-+ /* merge both structs in a union to be able to have common code */
-+ union {
-+ acx111_ie_powersave_t acx111;
-+ acx100_ie_powersave_t acx100;
-+ } pm;
-+
-+ /* change 802.11 power save mode settings */
-+ log(L_INIT, "updating 802.11 power save mode settings: "
-+ "wakeup_cfg 0x%02X, listen interval %u, "
-+ "options 0x%02X, hangover period %u, "
-+ "enhanced_ps_transition_time %u\n",
-+ adev->ps_wakeup_cfg, adev->ps_listen_interval,
-+ adev->ps_options, adev->ps_hangover_period,
-+ adev->ps_enhanced_transition_time);
-+ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT);
-+ log(L_INIT, "Previous PS mode settings: wakeup_cfg 0x%02X, "
-+ "listen interval %u, options 0x%02X, "
-+ "hangover period %u, "
-+ "enhanced_ps_transition_time %u, beacon_rx_time %u\n",
-+ pm.acx111.wakeup_cfg,
-+ pm.acx111.listen_interval,
-+ pm.acx111.options,
-+ pm.acx111.hangover_period,
-+ IS_ACX111(adev) ?
-+ pm.acx111.enhanced_ps_transition_time
-+ : pm.acx100.enhanced_ps_transition_time,
-+ IS_ACX111(adev) ?
-+ pm.acx111.beacon_rx_time
-+ : (u32)-1
-+ );
-+ pm.acx111.wakeup_cfg = adev->ps_wakeup_cfg;
-+ pm.acx111.listen_interval = adev->ps_listen_interval;
-+ pm.acx111.options = adev->ps_options;
-+ pm.acx111.hangover_period = adev->ps_hangover_period;
-+ if (IS_ACX111(adev)) {
-+ pm.acx111.beacon_rx_time = cpu_to_le32(adev->ps_beacon_rx_time);
-+ pm.acx111.enhanced_ps_transition_time = cpu_to_le32(adev->ps_enhanced_transition_time);
-+ } else {
-+ pm.acx100.enhanced_ps_transition_time = cpu_to_le16(adev->ps_enhanced_transition_time);
-+ }
-+ acx_s_configure(adev, &pm, ACX1xx_IE_POWER_MGMT);
-+ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT);
-+ log(L_INIT, "wakeup_cfg: 0x%02X\n", pm.acx111.wakeup_cfg);
-+ acx_s_msleep(40);
-+ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT);
-+ log(L_INIT, "wakeup_cfg: 0x%02X\n", pm.acx111.wakeup_cfg);
-+ log(L_INIT, "power save mode change %s\n",
-+ (pm.acx111.wakeup_cfg & PS_CFG_PENDING) ? "FAILED" : "was successful");
-+ /* FIXME: maybe verify via PS_CFG_PENDING bit here
-+ * that power save mode change was successful. */
-+ /* FIXME: we shouldn't trigger a scan immediately after
-+ * fiddling with power save mode (since the firmware is sending
-+ * a NULL frame then). */
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_s_update_card_settings
-+**
-+** Applies accumulated changes in various adev->xxxx members
-+** Called by ioctl commit handler, acx_start, acx_set_defaults,
-+** acx_s_after_interrupt_task (if IRQ_CMD_UPDATE_CARD_CFG),
-+*/
-+static void
-+acx111_s_sens_radio_16_17(acx_device_t *adev)
-+{
-+ u32 feature1, feature2;
-+
-+ if ((adev->sensitivity < 1) || (adev->sensitivity > 3)) {
-+ printk("%s: invalid sensitivity setting (1..3), "
-+ "setting to 1\n", adev->ndev->name);
-+ adev->sensitivity = 1;
-+ }
-+ acx111_s_get_feature_config(adev, &feature1, &feature2);
-+ CLEAR_BIT(feature1, FEATURE1_LOW_RX|FEATURE1_EXTRA_LOW_RX);
-+ if (adev->sensitivity > 1)
-+ SET_BIT(feature1, FEATURE1_LOW_RX);
-+ if (adev->sensitivity > 2)
-+ SET_BIT(feature1, FEATURE1_EXTRA_LOW_RX);
-+ acx111_s_feature_set(adev, feature1, feature2);
-+}
-+
-+
-+void
-+acx_s_update_card_settings(acx_device_t *adev)
-+{
-+ unsigned long flags;
-+ unsigned int start_scan = 0;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ log(L_INIT, "get_mask 0x%08X, set_mask 0x%08X\n",
-+ adev->get_mask, adev->set_mask);
-+
-+ /* Track dependencies betweed various settings */
-+
-+ if (adev->set_mask & (GETSET_MODE|GETSET_RESCAN|GETSET_WEP)) {
-+ log(L_INIT, "important setting has been changed. "
-+ "Need to update packet templates, too\n");
-+ SET_BIT(adev->set_mask, SET_TEMPLATES);
-+ }
-+ if (adev->set_mask & GETSET_CHANNEL) {
-+ /* This will actually tune RX/TX to the channel */
-+ SET_BIT(adev->set_mask, GETSET_RX|GETSET_TX);
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ /* Beacons contain channel# - update them */
-+ SET_BIT(adev->set_mask, SET_TEMPLATES);
-+ }
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ start_scan = 1;
-+ }
-+ }
-+
-+ /* Apply settings */
-+
-+#ifdef WHY_SHOULD_WE_BOTHER /* imagine we were just powered off */
-+ /* send a disassoc request in case it's required */
-+ if (adev->set_mask & (GETSET_MODE|GETSET_RESCAN|GETSET_CHANNEL|GETSET_WEP)) {
-+ if (ACX_MODE_2_STA == adev->mode) {
-+ if (ACX_STATUS_4_ASSOCIATED == adev->status) {
-+ log(L_ASSOC, "we were ASSOCIATED - "
-+ "sending disassoc request\n");
-+ acx_lock(adev, flags);
-+ acx_l_transmit_disassoc(adev, NULL);
-+ /* FIXME: deauth? */
-+ acx_unlock(adev, flags);
-+ }
-+ /* need to reset some other stuff as well */
-+ log(L_DEBUG, "resetting bssid\n");
-+ MAC_ZERO(adev->bssid);
-+ SET_BIT(adev->set_mask, SET_TEMPLATES|SET_STA_LIST);
-+ start_scan = 1;
-+ }
-+ }
-+#endif
-+
-+ if (adev->get_mask & GETSET_STATION_ID) {
-+ u8 stationID[4 + ACX1xx_IE_DOT11_STATION_ID_LEN];
-+ const u8 *paddr;
-+
-+ acx_s_interrogate(adev, &stationID, ACX1xx_IE_DOT11_STATION_ID);
-+ paddr = &stationID[4];
-+ for (i = 0; i < ETH_ALEN; i++) {
-+ /* we copy the MAC address (reversed in
-+ * the card) to the netdevice's MAC
-+ * address, and on ifup it will be
-+ * copied into iwadev->dev_addr */
-+ adev->ndev->dev_addr[ETH_ALEN - 1 - i] = paddr[i];
-+ }
-+ CLEAR_BIT(adev->get_mask, GETSET_STATION_ID);
-+ }
-+
-+ if (adev->get_mask & GETSET_SENSITIVITY) {
-+ if ((RADIO_RFMD_11 == adev->radio_type)
-+ || (RADIO_MAXIM_0D == adev->radio_type)
-+ || (RADIO_RALINK_15 == adev->radio_type)) {
-+ acx_s_read_phy_reg(adev, 0x30, &adev->sensitivity);
-+ } else {
-+ log(L_INIT, "don't know how to get sensitivity "
-+ "for radio type 0x%02X\n", adev->radio_type);
-+ adev->sensitivity = 0;
-+ }
-+ log(L_INIT, "got sensitivity value %u\n", adev->sensitivity);
-+
-+ CLEAR_BIT(adev->get_mask, GETSET_SENSITIVITY);
-+ }
-+
-+ if (adev->get_mask & GETSET_ANTENNA) {
-+ u8 antenna[4 + ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN];
-+
-+ memset(antenna, 0, sizeof(antenna));
-+ acx_s_interrogate(adev, antenna, ACX1xx_IE_DOT11_CURRENT_ANTENNA);
-+ adev->antenna = antenna[4];
-+ log(L_INIT, "got antenna value 0x%02X\n", adev->antenna);
-+ CLEAR_BIT(adev->get_mask, GETSET_ANTENNA);
-+ }
-+
-+ if (adev->get_mask & GETSET_ED_THRESH) {
-+ if (IS_ACX100(adev)) {
-+ u8 ed_threshold[4 + ACX100_IE_DOT11_ED_THRESHOLD_LEN];
-+
-+ memset(ed_threshold, 0, sizeof(ed_threshold));
-+ acx_s_interrogate(adev, ed_threshold, ACX100_IE_DOT11_ED_THRESHOLD);
-+ adev->ed_threshold = ed_threshold[4];
-+ } else {
-+ log(L_INIT, "acx111 doesn't support ED\n");
-+ adev->ed_threshold = 0;
-+ }
-+ log(L_INIT, "got Energy Detect (ED) threshold %u\n", adev->ed_threshold);
-+ CLEAR_BIT(adev->get_mask, GETSET_ED_THRESH);
-+ }
-+
-+ if (adev->get_mask & GETSET_CCA) {
-+ if (IS_ACX100(adev)) {
-+ u8 cca[4 + ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN];
-+
-+ memset(cca, 0, sizeof(adev->cca));
-+ acx_s_interrogate(adev, cca, ACX1xx_IE_DOT11_CURRENT_CCA_MODE);
-+ adev->cca = cca[4];
-+ } else {
-+ log(L_INIT, "acx111 doesn't support CCA\n");
-+ adev->cca = 0;
-+ }
-+ log(L_INIT, "got Channel Clear Assessment (CCA) value %u\n", adev->cca);
-+ CLEAR_BIT(adev->get_mask, GETSET_CCA);
-+ }
-+
-+ if (adev->get_mask & GETSET_REG_DOMAIN) {
-+ acx_ie_generic_t dom;
-+
-+ acx_s_interrogate(adev, &dom, ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN);
-+ adev->reg_dom_id = dom.m.bytes[0];
-+ acx_s_set_sane_reg_domain(adev, 0);
-+ log(L_INIT, "got regulatory domain 0x%02X\n", adev->reg_dom_id);
-+ CLEAR_BIT(adev->get_mask, GETSET_REG_DOMAIN);
-+ }
-+
-+ if (adev->set_mask & GETSET_STATION_ID) {
-+ u8 stationID[4 + ACX1xx_IE_DOT11_STATION_ID_LEN];
-+ u8 *paddr;
-+
-+ paddr = &stationID[4];
-+ memcpy(adev->dev_addr, adev->ndev->dev_addr, ETH_ALEN);
-+ for (i = 0; i < ETH_ALEN; i++) {
-+ /* copy the MAC address we obtained when we noticed
-+ * that the ethernet iface's MAC changed
-+ * to the card (reversed in
-+ * the card!) */
-+ paddr[i] = adev->dev_addr[ETH_ALEN - 1 - i];
-+ }
-+ acx_s_configure(adev, &stationID, ACX1xx_IE_DOT11_STATION_ID);
-+ CLEAR_BIT(adev->set_mask, GETSET_STATION_ID);
-+ }
-+
-+ if (adev->set_mask & SET_TEMPLATES) {
-+ log(L_INIT, "updating packet templates\n");
-+ switch (adev->mode) {
-+ case ACX_MODE_2_STA:
-+ acx_s_set_probe_request_template(adev);
-+#if POWER_SAVE_80211
-+ acx_s_set_null_data_template(adev);
-+#endif
-+ break;
-+ case ACX_MODE_0_ADHOC:
-+ acx_s_set_probe_request_template(adev);
-+#if POWER_SAVE_80211
-+ /* maybe power save functionality is somehow possible
-+ * for Ad-Hoc mode, too... FIXME: verify it somehow? firmware debug fields? */
-+ acx_s_set_null_data_template(adev);
-+#endif
-+ /* fall through */
-+ case ACX_MODE_3_AP:
-+ acx_s_set_beacon_template(adev);
-+ acx_s_set_tim_template(adev);
-+ /* BTW acx111 firmware would not send probe responses
-+ ** if probe request does not have all basic rates flagged
-+ ** by 0x80! Thus firmware does not conform to 802.11,
-+ ** it should ignore 0x80 bit in ratevector from STA.
-+ ** We can 'fix' it by not using this template and
-+ ** sending probe responses by hand. TODO --vda */
-+ acx_s_set_probe_response_template(adev);
-+ }
-+ /* Needed if generated frames are to be emitted at different tx rate now */
-+ log(L_IRQ, "redoing cmd_join_bssid() after template cfg\n");
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ CLEAR_BIT(adev->set_mask, SET_TEMPLATES);
-+ }
-+ if (adev->set_mask & SET_STA_LIST) {
-+ acx_lock(adev, flags);
-+ acx_l_sta_list_init(adev);
-+ CLEAR_BIT(adev->set_mask, SET_STA_LIST);
-+ acx_unlock(adev, flags);
-+ }
-+ if (adev->set_mask & SET_RATE_FALLBACK) {
-+ u8 rate[4 + ACX1xx_IE_RATE_FALLBACK_LEN];
-+
-+ /* configure to not do fallbacks when not in auto rate mode */
-+ rate[4] = (adev->rate_auto) ? /* adev->txrate_fallback_retries */ 1 : 0;
-+ log(L_INIT, "updating Tx fallback to %u retries\n", rate[4]);
-+ acx_s_configure(adev, &rate, ACX1xx_IE_RATE_FALLBACK);
-+ CLEAR_BIT(adev->set_mask, SET_RATE_FALLBACK);
-+ }
-+ if (adev->set_mask & GETSET_TXPOWER) {
-+ log(L_INIT, "updating transmit power: %u dBm\n",
-+ adev->tx_level_dbm);
-+ acx_s_set_tx_level(adev, adev->tx_level_dbm);
-+ CLEAR_BIT(adev->set_mask, GETSET_TXPOWER);
-+ }
-+
-+ if (adev->set_mask & GETSET_SENSITIVITY) {
-+ log(L_INIT, "updating sensitivity value: %u\n",
-+ adev->sensitivity);
-+ switch (adev->radio_type) {
-+ case RADIO_RFMD_11:
-+ case RADIO_MAXIM_0D:
-+ case RADIO_RALINK_15:
-+ acx_s_write_phy_reg(adev, 0x30, adev->sensitivity);
-+ break;
-+ case RADIO_RADIA_16:
-+ case RADIO_UNKNOWN_17:
-+ acx111_s_sens_radio_16_17(adev);
-+ break;
-+ default:
-+ log(L_INIT, "don't know how to modify sensitivity "
-+ "for radio type 0x%02X\n", adev->radio_type);
-+ }
-+ CLEAR_BIT(adev->set_mask, GETSET_SENSITIVITY);
-+ }
-+
-+ if (adev->set_mask & GETSET_ANTENNA) {
-+ /* antenna */
-+ u8 antenna[4 + ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN];
-+
-+ memset(antenna, 0, sizeof(antenna));
-+ antenna[4] = adev->antenna;
-+ log(L_INIT, "updating antenna value: 0x%02X\n",
-+ adev->antenna);
-+ acx_s_configure(adev, &antenna, ACX1xx_IE_DOT11_CURRENT_ANTENNA);
-+ CLEAR_BIT(adev->set_mask, GETSET_ANTENNA);
-+ }
-+
-+ if (adev->set_mask & GETSET_ED_THRESH) {
-+ /* ed_threshold */
-+ log(L_INIT, "updating Energy Detect (ED) threshold: %u\n",
-+ adev->ed_threshold);
-+ if (IS_ACX100(adev)) {
-+ u8 ed_threshold[4 + ACX100_IE_DOT11_ED_THRESHOLD_LEN];
-+
-+ memset(ed_threshold, 0, sizeof(ed_threshold));
-+ ed_threshold[4] = adev->ed_threshold;
-+ acx_s_configure(adev, &ed_threshold, ACX100_IE_DOT11_ED_THRESHOLD);
-+ }
-+ else
-+ log(L_INIT, "acx111 doesn't support ED!\n");
-+ CLEAR_BIT(adev->set_mask, GETSET_ED_THRESH);
-+ }
-+
-+ if (adev->set_mask & GETSET_CCA) {
-+ /* CCA value */
-+ log(L_INIT, "updating Channel Clear Assessment "
-+ "(CCA) value: 0x%02X\n", adev->cca);
-+ if (IS_ACX100(adev)) {
-+ u8 cca[4 + ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN];
-+
-+ memset(cca, 0, sizeof(cca));
-+ cca[4] = adev->cca;
-+ acx_s_configure(adev, &cca, ACX1xx_IE_DOT11_CURRENT_CCA_MODE);
-+ }
-+ else
-+ log(L_INIT, "acx111 doesn't support CCA!\n");
-+ CLEAR_BIT(adev->set_mask, GETSET_CCA);
-+ }
-+
-+ if (adev->set_mask & GETSET_LED_POWER) {
-+ /* Enable Tx */
-+ log(L_INIT, "updating power LED status: %u\n", adev->led_power);
-+
-+ acx_lock(adev, flags);
-+#if defined (ACX_MEM)
-+ acxmem_l_power_led(adev, adev->led_power);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_l_power_led(adev, adev->led_power);
-+#endif
-+ CLEAR_BIT(adev->set_mask, GETSET_LED_POWER);
-+ acx_unlock(adev, flags);
-+ }
-+
-+ if (adev->set_mask & GETSET_POWER_80211) {
-+#if POWER_SAVE_80211
-+ acx_s_update_80211_powersave_mode(adev);
-+#endif
-+ CLEAR_BIT(adev->set_mask, GETSET_POWER_80211);
-+ }
-+
-+ if (adev->set_mask & GETSET_CHANNEL) {
-+ /* channel */
-+ log(L_INIT, "updating channel to: %u\n", adev->channel);
-+ CLEAR_BIT(adev->set_mask, GETSET_CHANNEL);
-+ }
-+
-+ if (adev->set_mask & GETSET_TX) {
-+ /* set Tx */
-+ log(L_INIT, "updating: %s Tx\n",
-+ adev->tx_disabled ? "disable" : "enable");
-+ if (adev->tx_disabled)
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
-+ else
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_TX, &adev->channel, 1);
-+ CLEAR_BIT(adev->set_mask, GETSET_TX);
-+ }
-+
-+ if (adev->set_mask & GETSET_RX) {
-+ /* Enable Rx */
-+ log(L_INIT, "updating: enable Rx on channel: %u\n",
-+ adev->channel);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_RX, &adev->channel, 1);
-+ CLEAR_BIT(adev->set_mask, GETSET_RX);
-+ }
-+
-+ if (adev->set_mask & GETSET_RETRY) {
-+ u8 short_retry[4 + ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN];
-+ u8 long_retry[4 + ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN];
-+
-+ log(L_INIT, "updating short retry limit: %u, long retry limit: %u\n",
-+ adev->short_retry, adev->long_retry);
-+ short_retry[0x4] = adev->short_retry;
-+ long_retry[0x4] = adev->long_retry;
-+ acx_s_configure(adev, &short_retry, ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT);
-+ acx_s_configure(adev, &long_retry, ACX1xx_IE_DOT11_LONG_RETRY_LIMIT);
-+ CLEAR_BIT(adev->set_mask, GETSET_RETRY);
-+ }
-+
-+ if (adev->set_mask & SET_MSDU_LIFETIME) {
-+ u8 xmt_msdu_lifetime[4 + ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN];
-+
-+ log(L_INIT, "updating tx MSDU lifetime: %u\n",
-+ adev->msdu_lifetime);
-+ *(u32 *)&xmt_msdu_lifetime[4] = cpu_to_le32((u32)adev->msdu_lifetime);
-+ acx_s_configure(adev, &xmt_msdu_lifetime, ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME);
-+ CLEAR_BIT(adev->set_mask, SET_MSDU_LIFETIME);
-+ }
-+
-+ if (adev->set_mask & GETSET_REG_DOMAIN) {
-+ log(L_INIT, "updating regulatory domain: 0x%02X\n",
-+ adev->reg_dom_id);
-+ acx_s_set_sane_reg_domain(adev, 1);
-+ CLEAR_BIT(adev->set_mask, GETSET_REG_DOMAIN);
-+ }
-+
-+ if (adev->set_mask & GETSET_MODE) {
-+ adev->ndev->type = (adev->mode == ACX_MODE_MONITOR) ?
-+ adev->monitor_type : ARPHRD_ETHER;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_3_AP:
-+
-+ acx_lock(adev, flags);
-+ acx_l_sta_list_init(adev);
-+ adev->aid = 0;
-+ adev->ap_client = NULL;
-+ MAC_COPY(adev->bssid, adev->dev_addr);
-+ /* this basically says "we're connected" */
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ acx_unlock(adev, flags);
-+
-+ acx111_s_feature_off(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER);
-+ /* start sending beacons */
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ break;
-+ case ACX_MODE_MONITOR:
-+ acx111_s_feature_on(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER);
-+ /* this stops beacons */
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ /* this basically says "we're connected" */
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG|SET_WEP_OPTIONS);
-+ break;
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ acx111_s_feature_off(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER);
-+
-+ acx_lock(adev, flags);
-+ adev->aid = 0;
-+ adev->ap_client = NULL;
-+ acx_unlock(adev, flags);
-+
-+ /* we want to start looking for peer or AP */
-+ start_scan = 1;
-+ break;
-+ case ACX_MODE_OFF:
-+ /* TODO: disable RX/TX, stop any scanning activity etc: */
-+ /* adev->tx_disabled = 1; */
-+ /* SET_BIT(adev->set_mask, GETSET_RX|GETSET_TX); */
-+
-+ /* This stops beacons (invalid macmode...) */
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ acx_set_status(adev, ACX_STATUS_0_STOPPED);
-+ break;
-+ }
-+ CLEAR_BIT(adev->set_mask, GETSET_MODE);
-+ }
-+
-+ if (adev->set_mask & SET_RXCONFIG) {
-+ acx_s_initialize_rx_config(adev);
-+ CLEAR_BIT(adev->set_mask, SET_RXCONFIG);
-+ }
-+
-+ if (adev->set_mask & GETSET_RESCAN) {
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ start_scan = 1;
-+ break;
-+ }
-+ CLEAR_BIT(adev->set_mask, GETSET_RESCAN);
-+ }
-+
-+ if (adev->set_mask & GETSET_WEP) {
-+ /* encode */
-+
-+ ie_dot11WEPDefaultKeyID_t dkey;
-+#ifdef DEBUG_WEP
-+ struct {
-+ u16 type;
-+ u16 len;
-+ u8 val;
-+ } ACX_PACKED keyindic;
-+#endif
-+ log(L_INIT, "updating WEP key settings\n");
-+
-+ acx_s_set_wepkey(adev);
-+
-+ dkey.KeyID = adev->wep_current_index;
-+ log(L_INIT, "setting WEP key %u as default\n", dkey.KeyID);
-+ acx_s_configure(adev, &dkey, ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET);
-+#ifdef DEBUG_WEP
-+ keyindic.val = 3;
-+ acx_s_configure(adev, &keyindic, ACX111_IE_KEY_CHOOSE);
-+#endif
-+ start_scan = 1;
-+ CLEAR_BIT(adev->set_mask, GETSET_WEP);
-+ }
-+
-+ if (adev->set_mask & SET_WEP_OPTIONS) {
-+ acx100_ie_wep_options_t options;
-+ if (IS_ACX111(adev)) {
-+ log(L_DEBUG, "setting WEP Options for acx111 is not supported\n");
-+ } else {
-+ log(L_INIT, "setting WEP Options\n");
-+ acx100_s_init_wep(adev);
-+#if 0
-+ /* let's choose maximum setting: 4 default keys,
-+ * plus 10 other keys: */
-+ options.NumKeys = cpu_to_le16(DOT11_MAX_DEFAULT_WEP_KEYS + 10);
-+ /* don't decrypt default key only,
-+ * don't override decryption: */
-+ options.WEPOption = 0;
-+ if (adev->mode == ACX_MODE_MONITOR) {
-+ /* don't decrypt default key only,
-+ * override decryption mechanism: */
-+ options.WEPOption = 2;
-+ }
-+
-+ acx_s_configure(adev, &options, ACX100_IE_WEP_OPTIONS);
-+#endif
-+ }
-+ CLEAR_BIT(adev->set_mask, SET_WEP_OPTIONS);
-+ }
-+
-+ /* Rescan was requested */
-+ if (start_scan) {
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ /* We can avoid clearing list if join code
-+ ** will be a bit more clever about not picking
-+ ** 'bad' AP over and over again */
-+ acx_lock(adev, flags);
-+ adev->ap_client = NULL;
-+ acx_l_sta_list_init(adev);
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING);
-+ acx_unlock(adev, flags);
-+
-+ acx_s_cmd_start_scan(adev);
-+ }
-+ }
-+
-+ /* debug, rate, and nick don't need any handling */
-+ /* what about sniffing mode?? */
-+
-+ log(L_INIT, "get_mask 0x%08X, set_mask 0x%08X - after update\n",
-+ adev->get_mask, adev->set_mask);
-+
-+/* end: */
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_e_after_interrupt_task
-+*/
-+static int
-+acx_s_recalib_radio(acx_device_t *adev)
-+{
-+ if (IS_ACX111(adev)) {
-+ acx111_cmd_radiocalib_t cal;
-+
-+ printk("%s: recalibrating radio\n", adev->ndev->name);
-+ /* automatic recalibration, choose all methods: */
-+ cal.methods = cpu_to_le32(0x8000000f);
-+ /* automatic recalibration every 60 seconds (value in TUs)
-+ * I wonder what the firmware default here is? */
-+ cal.interval = cpu_to_le32(58594);
-+ return acx_s_issue_cmd_timeo(adev, ACX111_CMD_RADIOCALIB,
-+ &cal, sizeof(cal), CMD_TIMEOUT_MS(100));
-+ } else {
-+ /* On ACX100, we need to recalibrate the radio
-+ * by issuing a GETSET_TX|GETSET_RX */
-+ if (/* (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0)) &&
-+ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0)) && */
-+ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_TX, &adev->channel, 1)) &&
-+ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_RX, &adev->channel, 1)) )
-+ return OK;
-+ return NOT_OK;
-+ }
-+}
-+
-+static void
-+acx_s_after_interrupt_recalib(acx_device_t *adev)
-+{
-+ int res;
-+
-+ /* this helps with ACX100 at least;
-+ * hopefully ACX111 also does a
-+ * recalibration here */
-+
-+ /* clear flag beforehand, since we want to make sure
-+ * it's cleared; then only set it again on specific circumstances */
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+
-+ /* better wait a bit between recalibrations to
-+ * prevent overheating due to torturing the card
-+ * into working too long despite high temperature
-+ * (just a safety measure) */
-+ if (adev->recalib_time_last_success
-+ && time_before(jiffies, adev->recalib_time_last_success
-+ + RECALIB_PAUSE * 60 * HZ)) {
-+ if (adev->recalib_msg_ratelimit <= 4) {
-+ printk("%s: less than " STRING(RECALIB_PAUSE)
-+ " minutes since last radio recalibration, "
-+ "not recalibrating (maybe card is too hot?)\n",
-+ adev->ndev->name);
-+ adev->recalib_msg_ratelimit++;
-+ if (adev->recalib_msg_ratelimit == 5)
-+ printk("disabling above message until next recalib\n");
-+ }
-+ return;
-+ }
-+
-+ adev->recalib_msg_ratelimit = 0;
-+
-+ /* note that commands sometimes fail (card busy),
-+ * so only clear flag if we were fully successful */
-+ res = acx_s_recalib_radio(adev);
-+ if (res == OK) {
-+ printk("%s: successfully recalibrated radio\n",
-+ adev->ndev->name);
-+ adev->recalib_time_last_success = jiffies;
-+ adev->recalib_failure_count = 0;
-+ } else {
-+ /* failed: resubmit, but only limited
-+ * amount of times within some time range
-+ * to prevent endless loop */
-+
-+ adev->recalib_time_last_success = 0; /* we failed */
-+
-+ /* if some time passed between last
-+ * attempts, then reset failure retry counter
-+ * to be able to do next recalib attempt */
-+ if (time_after(jiffies, adev->recalib_time_last_attempt + 5*HZ))
-+ adev->recalib_failure_count = 0;
-+
-+ if (adev->recalib_failure_count < 5) {
-+ /* increment inside only, for speedup of outside path */
-+ adev->recalib_failure_count++;
-+ adev->recalib_time_last_attempt = jiffies;
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+ }
-+ }
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
-+static void
-+acx_e_after_interrupt_task(struct work_struct *work)
-+{
-+ acx_device_t *adev = container_of(work, acx_device_t, after_interrupt_task);
-+#else
-+ static void
-+ acx_e_after_interrupt_task(void *data)
-+ {
-+ struct net_device *ndev = (struct net_device*)data;
-+ acx_device_t *adev = ndev2adev(ndev);
-+#endif
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ if (!adev->after_interrupt_jobs)
-+ goto end; /* no jobs to do */
-+
-+#if TX_CLEANUP_IN_SOFTIRQ
-+ /* can happen only on PCI */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_TX_CLEANUP) {
-+ acx_lock(adev, flags);
-+ acxpci_l_clean_txdesc(adev);
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_TX_CLEANUP);
-+ acx_unlock(adev, flags);
-+ }
-+#endif
-+ /* we see lotsa tx errors */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_RADIO_RECALIB) {
-+ acx_s_after_interrupt_recalib(adev);
-+ }
-+
-+ /* a poor interrupt code wanted to do update_card_settings() */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_UPDATE_CARD_CFG) {
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask)
-+ acx_s_update_card_settings(adev);
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+ }
-+
-+ /* 1) we detected that no Scan_Complete IRQ came from fw, or
-+ ** 2) we found too many STAs */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_STOP_SCAN) {
-+ log(L_IRQ, "sending a stop scan cmd...\n");
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_STOP_SCAN, NULL, 0);
-+ /* HACK: set the IRQ bit, since we won't get a
-+ * scan complete IRQ any more on ACX111 (works on ACX100!),
-+ * since _we_, not a fw, have stopped the scan */
-+ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_STOP_SCAN);
-+ }
-+
-+ /* either fw sent Scan_Complete or we detected that
-+ ** no Scan_Complete IRQ came from fw. Finish scanning,
-+ ** pick join partner if any */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_COMPLETE_SCAN) {
-+ if (adev->status == ACX_STATUS_1_SCANNING) {
-+ if (OK != acx_s_complete_scan(adev)) {
-+ SET_BIT(adev->after_interrupt_jobs,
-+ ACX_AFTER_IRQ_RESTART_SCAN);
-+ }
-+ } else {
-+ /* + scan kills current join status - restore it
-+ ** (do we need it for STA?) */
-+ /* + does it happen only with active scans?
-+ ** active and passive scans? ALL scans including
-+ ** background one? */
-+ /* + was not verified that everything is restored
-+ ** (but at least we start to emit beacons again) */
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ log(L_IRQ, "redoing cmd_join_bssid() after scan\n");
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ }
-+ }
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_COMPLETE_SCAN);
-+ }
-+
-+ /* STA auth or assoc timed out, start over again */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_RESTART_SCAN) {
-+ log(L_IRQ, "sending a start_scan cmd...\n");
-+ acx_s_cmd_start_scan(adev);
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_RESTART_SCAN);
-+ }
-+
-+ /* whee, we got positive assoc response! 8) */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_ASSOCIATE) {
-+ acx_ie_generic_t pdr;
-+ /* tiny race window exists, checking that we still a STA */
-+ switch (adev->mode) {
-+ case ACX_MODE_2_STA:
-+ pdr.m.aid = cpu_to_le16(adev->aid);
-+ acx_s_configure(adev, &pdr, ACX1xx_IE_ASSOC_ID);
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ log(L_ASSOC|L_DEBUG, "ASSOCIATED!\n");
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_ASSOCIATE);
-+ }
-+ }
-+end:
-+ acx_sem_unlock(adev);
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_schedule_task
-+**
-+** Schedule the call of the after_interrupt method after leaving
-+** the interrupt context.
-+*/
-+void
-+acx_schedule_task(acx_device_t *adev, unsigned int set_flag)
-+{
-+ SET_BIT(adev->after_interrupt_jobs, set_flag);
-+ SCHEDULE_WORK(&adev->after_interrupt_task);
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void
-+acx_init_task_scheduler(acx_device_t *adev)
-+{
-+ /* configure task scheduler */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
-+ INIT_WORK(&adev->after_interrupt_task, acx_e_after_interrupt_task);
-+#else
-+ INIT_WORK(&adev->after_interrupt_task, acx_e_after_interrupt_task,
-+ adev->ndev);
-+#endif
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_start
-+*/
-+void
-+acx_s_start(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+
-+ /*
-+ * Ok, now we do everything that can possibly be done with ioctl
-+ * calls to make sure that when it was called before the card
-+ * was up we get the changes asked for
-+ */
-+
-+ SET_BIT(adev->set_mask, SET_TEMPLATES|SET_STA_LIST|GETSET_WEP
-+ |GETSET_TXPOWER|GETSET_ANTENNA|GETSET_ED_THRESH|GETSET_CCA
-+ |GETSET_REG_DOMAIN|GETSET_MODE|GETSET_CHANNEL
-+ |GETSET_TX|GETSET_RX|GETSET_STATION_ID);
-+
-+ log(L_INIT, "updating initial settings on iface activation\n");
-+ acx_s_update_card_settings(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_update_capabilities
-+*/
-+void
-+acx_update_capabilities(acx_device_t *adev)
-+{
-+ u16 cap = 0;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_3_AP:
-+ SET_BIT(cap, WF_MGMT_CAP_ESS); break;
-+ case ACX_MODE_0_ADHOC:
-+ SET_BIT(cap, WF_MGMT_CAP_IBSS); break;
-+ /* other types of stations do not emit beacons */
-+ }
-+
-+ if (adev->wep_restricted) {
-+ SET_BIT(cap, WF_MGMT_CAP_PRIVACY);
-+ }
-+ if (adev->cfgopt_dot11ShortPreambleOption) {
-+ SET_BIT(cap, WF_MGMT_CAP_SHORT);
-+ }
-+ if (adev->cfgopt_dot11PBCCOption) {
-+ SET_BIT(cap, WF_MGMT_CAP_PBCC);
-+ }
-+ if (adev->cfgopt_dot11ChannelAgility) {
-+ SET_BIT(cap, WF_MGMT_CAP_AGILITY);
-+ }
-+ log(L_DEBUG, "caps updated from 0x%04X to 0x%04X\n",
-+ adev->capabilities, cap);
-+ adev->capabilities = cap;
-+}
-+
-+/***********************************************************************
-+** Common function to parse ALL configoption struct formats
-+** (ACX100 and ACX111; FIXME: how to make it work with ACX100 USB!?!?).
-+** FIXME: logging should be removed here and added to a /proc file instead
-+*/
-+void
-+acx_s_parse_configoption(acx_device_t *adev, const acx111_ie_configoption_t *pcfg)
-+{
-+ const u8 *pEle;
-+ int i;
-+ int is_acx111 = IS_ACX111(adev);
-+
-+ if (acx_debug & L_DEBUG) {
-+ printk("configoption struct content:\n");
-+ acx_dump_bytes(pcfg, sizeof(*pcfg));
-+ }
-+
-+ if (( is_acx111 && (adev->eeprom_version == 5))
-+ || (!is_acx111 && (adev->eeprom_version == 4))
-+ || (!is_acx111 && (adev->eeprom_version == 5))) {
-+ /* these versions are known to be supported */
-+ } else {
-+ printk("unknown chip and EEPROM version combination (%s, v%d), "
-+ "don't know how to parse config options yet. "
-+ "Please report\n", is_acx111 ? "ACX111" : "ACX100",
-+ adev->eeprom_version);
-+ return;
-+ }
-+
-+ /* first custom-parse the first part which has chip-specific layout */
-+
-+ pEle = (const u8 *) pcfg;
-+
-+ pEle += 4; /* skip (type,len) header */
-+
-+ memcpy(adev->cfgopt_NVSv, pEle, sizeof(adev->cfgopt_NVSv));
-+ pEle += sizeof(adev->cfgopt_NVSv);
-+
-+ if (is_acx111) {
-+ adev->cfgopt_NVS_vendor_offs = le16_to_cpu(*(u16 *)pEle);
-+ pEle += sizeof(adev->cfgopt_NVS_vendor_offs);
-+
-+ adev->cfgopt_probe_delay = 200; /* good default value? */
-+ pEle += 2; /* FIXME: unknown, value 0x0001 */
-+ } else {
-+ memcpy(adev->cfgopt_MAC, pEle, sizeof(adev->cfgopt_MAC));
-+ pEle += sizeof(adev->cfgopt_MAC);
-+
-+ adev->cfgopt_probe_delay = le16_to_cpu(*(u16 *)pEle);
-+ pEle += sizeof(adev->cfgopt_probe_delay);
-+ if ((adev->cfgopt_probe_delay < 100) || (adev->cfgopt_probe_delay > 500)) {
-+ printk("strange probe_delay value %d, "
-+ "tweaking to 200\n", adev->cfgopt_probe_delay);
-+ adev->cfgopt_probe_delay = 200;
-+ }
-+ }
-+
-+ adev->cfgopt_eof_memory = le32_to_cpu(*(u32 *)pEle);
-+ pEle += sizeof(adev->cfgopt_eof_memory);
-+
-+ printk("NVS_vendor_offs:%04X probe_delay:%d eof_memory:%d\n",
-+ adev->cfgopt_NVS_vendor_offs,
-+ adev->cfgopt_probe_delay,
-+ adev->cfgopt_eof_memory);
-+
-+ adev->cfgopt_dot11CCAModes = *pEle++;
-+ adev->cfgopt_dot11Diversity = *pEle++;
-+ adev->cfgopt_dot11ShortPreambleOption = *pEle++;
-+ adev->cfgopt_dot11PBCCOption = *pEle++;
-+ adev->cfgopt_dot11ChannelAgility = *pEle++;
-+ adev->cfgopt_dot11PhyType = *pEle++;
-+ adev->cfgopt_dot11TempType = *pEle++;
-+ printk("CCAModes:%02X Diversity:%02X ShortPreOpt:%02X "
-+ "PBCC:%02X ChanAgil:%02X PHY:%02X Temp:%02X\n",
-+ adev->cfgopt_dot11CCAModes,
-+ adev->cfgopt_dot11Diversity,
-+ adev->cfgopt_dot11ShortPreambleOption,
-+ adev->cfgopt_dot11PBCCOption,
-+ adev->cfgopt_dot11ChannelAgility,
-+ adev->cfgopt_dot11PhyType,
-+ adev->cfgopt_dot11TempType);
-+
-+ /* then use common parsing for next part which has common layout */
-+
-+ pEle++; /* skip table_count (6) */
-+
-+ if (IS_MEM(adev) && IS_ACX100(adev))
-+ {
-+ /*
-+ * For iPaq hx4700 Generic Slave F/W 1.10.7.K. I'm not sure if these
-+ * 4 extra bytes are before the dot11 things above or after, so I'm just
-+ * going to guess after. If someone sees these aren't reasonable numbers,
-+ * please fix this.
-+ * The area from which the dot11 values above are read contains:
-+ * 04 01 01 01 00 05 01 06 00 02 01 02
-+ * the 8 dot11 reads above take care of 8 of them, but which 8...
-+ */
-+ pEle += 4;
-+ }
-+
-+ adev->cfgopt_antennas.type = pEle[0];
-+ adev->cfgopt_antennas.len = pEle[1];
-+ printk("AntennaID:%02X Len:%02X Data:",
-+ adev->cfgopt_antennas.type, adev->cfgopt_antennas.len);
-+ for (i = 0; i < pEle[1]; i++) {
-+ adev->cfgopt_antennas.list[i] = pEle[i+2];
-+ printk("%02X ", pEle[i+2]);
-+ }
-+ printk("\n");
-+
-+ pEle += pEle[1] + 2;
-+ adev->cfgopt_power_levels.type = pEle[0];
-+ adev->cfgopt_power_levels.len = pEle[1];
-+ printk("PowerLevelID:%02X Len:%02X Data:",
-+ adev->cfgopt_power_levels.type, adev->cfgopt_power_levels.len);
-+ for (i = 0; i < pEle[1]; i++) {
-+ adev->cfgopt_power_levels.list[i] = le16_to_cpu(*(u16 *)&pEle[i*2+2]);
-+ printk("%04X ", adev->cfgopt_power_levels.list[i]);
-+ }
-+ printk("\n");
-+
-+ pEle += pEle[1]*2 + 2;
-+ adev->cfgopt_data_rates.type = pEle[0];
-+ adev->cfgopt_data_rates.len = pEle[1];
-+ printk("DataRatesID:%02X Len:%02X Data:",
-+ adev->cfgopt_data_rates.type, adev->cfgopt_data_rates.len);
-+ for (i = 0; i < pEle[1]; i++) {
-+ adev->cfgopt_data_rates.list[i] = pEle[i+2];
-+ printk("%02X ", pEle[i+2]);
-+ }
-+ printk("\n");
-+
-+ pEle += pEle[1] + 2;
-+ adev->cfgopt_domains.type = pEle[0];
-+ adev->cfgopt_domains.len = pEle[1];
-+ if (IS_MEM(adev) && IS_ACX100(adev))
-+ {
-+ /*
-+ * For iPaq hx4700 Generic Slave F/W 1.10.7.K.
-+ * There's an extra byte between this structure and the next
-+ * that is not accounted for with this structure's length. It's
-+ * most likely a bug in the firmware, but we can fix it here
-+ * by bumping the length of this field by 1.
-+ */
-+ adev->cfgopt_domains.len++;
-+ }
-+ printk("DomainID:%02X Len:%02X Data:",
-+ adev->cfgopt_domains.type, adev->cfgopt_domains.len);
-+ for (i = 0; i < adev->cfgopt_domains.len; i++) {
-+ adev->cfgopt_domains.list[i] = pEle[i+2];
-+ printk("%02X ", pEle[i+2]);
-+ }
-+ printk("\n");
-+
-+ pEle += adev->cfgopt_domains.len + 2;
-+
-+ adev->cfgopt_product_id.type = pEle[0];
-+ adev->cfgopt_product_id.len = pEle[1];
-+ for (i = 0; i < pEle[1]; i++) {
-+ adev->cfgopt_product_id.list[i] = pEle[i+2];
-+ }
-+ printk("ProductID:%02X Len:%02X Data:%.*s\n",
-+ adev->cfgopt_product_id.type, adev->cfgopt_product_id.len,
-+ adev->cfgopt_product_id.len, (char *)adev->cfgopt_product_id.list);
-+
-+ pEle += pEle[1] + 2;
-+ adev->cfgopt_manufacturer.type = pEle[0];
-+ adev->cfgopt_manufacturer.len = pEle[1];
-+ for (i = 0; i < pEle[1]; i++) {
-+ adev->cfgopt_manufacturer.list[i] = pEle[i+2];
-+ }
-+ printk("ManufacturerID:%02X Len:%02X Data:%.*s\n",
-+ adev->cfgopt_manufacturer.type, adev->cfgopt_manufacturer.len,
-+ adev->cfgopt_manufacturer.len, (char *)adev->cfgopt_manufacturer.list);
-+/*
-+ printk("EEPROM part:\n");
-+ for (i=0; i<58; i++) {
-+ printk("%02X =======> 0x%02X\n",
-+ i, (u8 *)adev->cfgopt_NVSv[i-2]);
-+ }
-+*/
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int __init
-+acx_e_init_module(void)
-+{
-+ int r1,r2,r3,r4;
-+
-+ acx_struct_size_check();
-+
-+ printk("acx: this driver is still EXPERIMENTAL\n"
-+ "acx: reading README file and/or Craig's HOWTO is "
-+ "recommended, visit http://acx100.sf.net in case "
-+ "of further questions/discussion\n");
-+
-+#if defined(CONFIG_ACX_PCI)
-+ r1 = acxpci_e_init_module();
-+#else
-+ r1 = -EINVAL;
-+#endif
-+#if defined(CONFIG_ACX_MEM)
-+ r2 = acxmem_e_init_module();
-+#else
-+ r2 = -EINVAL;
-+#endif
-+#if defined(CONFIG_ACX_USB)
-+ r3 = acxusb_e_init_module();
-+#else
-+ r3 = -EINVAL;
-+#endif
-+#if defined(CONFIG_ACX_CS)
-+ r4 = acx_cs_init();
-+#else
-+ r4 = -EINVAL;
-+#endif
-+ if (r2 && r1 && r3 && r4) { /* all failed! */
-+ if (r3 || r1)
-+ return r3 ? r3 : r1;
-+ else
-+ return r2;
-+ }
-+ /* return success if at least one succeeded */
-+ return 0;
-+
-+}
-+
-+static void __exit
-+acx_e_cleanup_module(void)
-+{
-+#if defined(CONFIG_ACX_PCI)
-+ acxpci_e_cleanup_module();
-+#endif
-+#if defined(CONFIG_ACX_MEM)
-+ acxmem_e_cleanup_module();
-+#endif
-+#if defined(CONFIG_ACX_USB)
-+ acxusb_e_cleanup_module();
-+#endif
-+#if defined(CONFIG_ACX_CS)
-+ acx_cs_cleanup();
-+#endif
-+}
-+
-+module_init(acx_e_init_module)
-+module_exit(acx_e_cleanup_module)
-Index: linux-2.6.22/drivers/net/wireless/acx/conv.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/conv.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,504 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+#include <linux/skbuff.h>
-+#include <linux/if_arp.h>
-+#include <linux/etherdevice.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+** proto_is_stt
-+**
-+** Searches the 802.1h Selective Translation Table for a given
-+** protocol.
-+**
-+** prottype - protocol number (in host order) to search for.
-+**
-+** Returns:
-+** 1 - if the table is empty or a match is found.
-+** 0 - if the table is non-empty and a match is not found.
-+**
-+** Based largely on p80211conv.c of the linux-wlan-ng project
-+*/
-+static inline int
-+proto_is_stt(unsigned int proto)
-+{
-+ /* Always return found for now. This is the behavior used by the */
-+ /* Zoom Win95 driver when 802.1h mode is selected */
-+ /* TODO: If necessary, add an actual search we'll probably
-+ need this to match the CMAC's way of doing things.
-+ Need to do some testing to confirm.
-+ */
-+
-+ if (proto == 0x80f3) /* APPLETALK */
-+ return 1;
-+
-+ return 0;
-+/* return ((prottype == ETH_P_AARP) || (prottype == ETH_P_IPX)); */
-+}
-+
-+/* Helpers */
-+
-+static inline void
-+store_llc_snap(struct wlan_llc *llc)
-+{
-+ llc->dsap = 0xaa; /* SNAP, see IEEE 802 */
-+ llc->ssap = 0xaa;
-+ llc->ctl = 0x03;
-+}
-+static inline int
-+llc_is_snap(const struct wlan_llc *llc)
-+{
-+ return (llc->dsap == 0xaa)
-+ && (llc->ssap == 0xaa)
-+ && (llc->ctl == 0x03);
-+}
-+static inline void
-+store_oui_rfc1042(struct wlan_snap *snap)
-+{
-+ snap->oui[0] = 0;
-+ snap->oui[1] = 0;
-+ snap->oui[2] = 0;
-+}
-+static inline int
-+oui_is_rfc1042(const struct wlan_snap *snap)
-+{
-+ return (snap->oui[0] == 0)
-+ && (snap->oui[1] == 0)
-+ && (snap->oui[2] == 0);
-+}
-+static inline void
-+store_oui_8021h(struct wlan_snap *snap)
-+{
-+ snap->oui[0] = 0;
-+ snap->oui[1] = 0;
-+ snap->oui[2] = 0xf8;
-+}
-+static inline int
-+oui_is_8021h(const struct wlan_snap *snap)
-+{
-+ return (snap->oui[0] == 0)
-+ && (snap->oui[1] == 0)
-+ && (snap->oui[2] == 0xf8);
-+}
-+
-+
-+/***********************************************************************
-+** acx_ether_to_txbuf
-+**
-+** Uses the contents of the ether frame to build the elements of
-+** the 802.11 frame.
-+**
-+** We don't actually set up the frame header here. That's the
-+** MAC's job. We're only handling conversion of DIXII or 802.3+LLC
-+** frames to something that works with 802.11.
-+**
-+** Based largely on p80211conv.c of the linux-wlan-ng project
-+*/
-+int
-+acx_ether_to_txbuf(acx_device_t *adev, void *txbuf, const struct sk_buff *skb)
-+{
-+ struct wlan_hdr_a3 *w_hdr;
-+ struct wlan_ethhdr *e_hdr;
-+ struct wlan_llc *e_llc;
-+ struct wlan_snap *e_snap;
-+ const u8 *a1, *a3;
-+ int header_len, payload_len = -1;
-+ /* protocol type or data length, depending on whether
-+ * DIX or 802.3 ethernet format */
-+ u16 proto;
-+ u16 fc;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(!skb->len)) {
-+ log(L_DEBUG, "zero-length skb!\n");
-+ goto end;
-+ }
-+
-+ w_hdr = (struct wlan_hdr_a3*)txbuf;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_MONITOR:
-+ /* NB: one day we might want to play with DESC_CTL2_FCS
-+ ** Will need to stop doing "- WLAN_FCS_LEN" here then */
-+ if (unlikely(skb->len >= WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_FCS_LEN)) {
-+ printk("%s: can't tx oversized frame (%d bytes)\n",
-+ adev->ndev->name, skb->len);
-+ goto end;
-+ }
-+ memcpy(w_hdr, skb->data, skb->len);
-+ payload_len = skb->len;
-+ goto end;
-+ }
-+
-+ /* step 1: classify ether frame, DIX or 802.3? */
-+ e_hdr = (wlan_ethhdr_t *)skb->data;
-+ proto = ntohs(e_hdr->type);
-+ if (proto <= 1500) {
-+ log(L_DEBUG, "tx: 802.3 len: %d\n", skb->len);
-+ /* codes <= 1500 reserved for 802.3 lengths */
-+ /* it's 802.3, pass ether payload unchanged, */
-+ /* trim off ethernet header and copy payload to txdesc */
-+ header_len = WLAN_HDR_A3_LEN;
-+ } else {
-+ /* it's DIXII, time for some conversion */
-+ /* Create 802.11 packet. Header also contains llc and snap. */
-+
-+ log(L_DEBUG, "tx: DIXII len: %d\n", skb->len);
-+
-+ /* size of header is 802.11 header + llc + snap */
-+ header_len = WLAN_HDR_A3_LEN + sizeof(wlan_llc_t) + sizeof(wlan_snap_t);
-+ /* llc is located behind the 802.11 header */
-+ e_llc = (wlan_llc_t*)(w_hdr + 1);
-+ /* snap is located behind the llc */
-+ e_snap = (wlan_snap_t*)(e_llc + 1);
-+
-+ /* setup the LLC header */
-+ store_llc_snap(e_llc);
-+
-+ /* setup the SNAP header */
-+ e_snap->type = htons(proto);
-+ if (proto_is_stt(proto)) {
-+ store_oui_8021h(e_snap);
-+ } else {
-+ store_oui_rfc1042(e_snap);
-+ }
-+ }
-+ /* trim off ethernet header and copy payload to txbuf */
-+ payload_len = skb->len - sizeof(wlan_ethhdr_t);
-+ /* TODO: can we just let acx DMA payload from skb instead? */
-+ memcpy((u8*)txbuf + header_len, skb->data + sizeof(wlan_ethhdr_t), payload_len);
-+ payload_len += header_len;
-+
-+ /* Set up the 802.11 header */
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi);
-+ a1 = e_hdr->daddr;
-+ a3 = adev->bssid;
-+ break;
-+ case ACX_MODE_2_STA:
-+ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi | WF_FC_TODSi);
-+ a1 = adev->bssid;
-+ a3 = e_hdr->daddr;
-+ break;
-+ case ACX_MODE_3_AP:
-+ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi | WF_FC_FROMDSi);
-+ a1 = e_hdr->daddr;
-+ a3 = e_hdr->saddr;
-+ break;
-+ default:
-+ printk("%s: error - converting eth to wlan in unknown mode\n",
-+ adev->ndev->name);
-+ payload_len = -1;
-+ goto end;
-+ }
-+ if (adev->wep_enabled)
-+ SET_BIT(fc, WF_FC_ISWEPi);
-+
-+ w_hdr->fc = fc;
-+ w_hdr->dur = 0;
-+ MAC_COPY(w_hdr->a1, a1);
-+ MAC_COPY(w_hdr->a2, adev->dev_addr);
-+ MAC_COPY(w_hdr->a3, a3);
-+ w_hdr->seq = 0;
-+
-+#ifdef DEBUG_CONVERT
-+ if (acx_debug & L_DATA) {
-+ printk("original eth frame [%d]: ", skb->len);
-+ acx_dump_bytes(skb->data, skb->len);
-+ printk("802.11 frame [%d]: ", payload_len);
-+ acx_dump_bytes(w_hdr, payload_len);
-+ }
-+#endif
-+
-+end:
-+ FN_EXIT1(payload_len);
-+ return payload_len;
-+}
-+
-+
-+/***********************************************************************
-+** acx_rxbuf_to_ether
-+**
-+** Uses the contents of a received 802.11 frame to build an ether
-+** frame.
-+**
-+** This function extracts the src and dest address from the 802.11
-+** frame to use in the construction of the eth frame.
-+**
-+** Based largely on p80211conv.c of the linux-wlan-ng project
-+*/
-+struct sk_buff*
-+acx_rxbuf_to_ether(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ struct wlan_hdr *w_hdr;
-+ struct wlan_ethhdr *e_hdr;
-+ struct wlan_llc *e_llc;
-+ struct wlan_snap *e_snap;
-+ struct sk_buff *skb;
-+ const u8 *daddr;
-+ const u8 *saddr;
-+ const u8 *e_payload;
-+ int buflen, payload_length;
-+ unsigned int payload_offset, mtu;
-+ u16 fc;
-+
-+ FN_ENTER;
-+
-+ /* This looks complex because it must handle possible
-+ ** phy header in rxbuff */
-+ w_hdr = acx_get_wlan_hdr(adev, rxbuf);
-+ payload_offset = WLAN_HDR_A3_LEN; /* it is relative to w_hdr */
-+ payload_length = RXBUF_BYTES_USED(rxbuf) /* entire rxbuff... */
-+ - ((u8*)w_hdr - (u8*)rxbuf) /* minus space before 802.11 frame */
-+ - WLAN_HDR_A3_LEN; /* minus 802.11 header */
-+
-+ /* setup some vars for convenience */
-+ fc = w_hdr->fc;
-+ switch (WF_FC_FROMTODSi & fc) {
-+ case 0:
-+ daddr = w_hdr->a1;
-+ saddr = w_hdr->a2;
-+ break;
-+ case WF_FC_FROMDSi:
-+ daddr = w_hdr->a1;
-+ saddr = w_hdr->a3;
-+ break;
-+ case WF_FC_TODSi:
-+ daddr = w_hdr->a3;
-+ saddr = w_hdr->a2;
-+ break;
-+ default: /* WF_FC_FROMTODSi */
-+ payload_offset += (WLAN_HDR_A4_LEN - WLAN_HDR_A3_LEN);
-+ payload_length -= (WLAN_HDR_A4_LEN - WLAN_HDR_A3_LEN);
-+ daddr = w_hdr->a3;
-+ saddr = w_hdr->a4;
-+ }
-+
-+ if ((WF_FC_ISWEPi & fc) && IS_ACX100(adev)) {
-+ /* chop off the IV+ICV WEP header and footer */
-+ log(L_DATA|L_DEBUG, "rx: WEP packet, "
-+ "chopping off IV and ICV\n");
-+ payload_offset += WLAN_WEP_IV_LEN;
-+ payload_length -= WLAN_WEP_IV_LEN + WLAN_WEP_ICV_LEN;
-+ }
-+
-+ if (unlikely(payload_length < 0)) {
-+ printk("%s: rx frame too short, ignored\n", adev->ndev->name);
-+ goto ret_null;
-+ }
-+
-+ e_hdr = (wlan_ethhdr_t*) ((u8*) w_hdr + payload_offset);
-+ e_llc = (wlan_llc_t*) e_hdr;
-+ e_snap = (wlan_snap_t*) (e_llc + 1);
-+ mtu = adev->ndev->mtu;
-+ e_payload = (u8*) (e_snap + 1);
-+
-+ log(L_DATA, "rx: payload_offset %d, payload_length %d\n",
-+ payload_offset, payload_length);
-+ log(L_XFER|L_DATA,
-+ "rx: frame info: llc=%02X%02X%02X "
-+ "snap.oui=%02X%02X%02X snap.type=%04X\n",
-+ e_llc->dsap, e_llc->ssap, e_llc->ctl,
-+ e_snap->oui[0], e_snap->oui[1], e_snap->oui[2],
-+ ntohs(e_snap->type));
-+
-+ /* Test for the various encodings */
-+ if ((payload_length >= sizeof(wlan_ethhdr_t))
-+ && ((e_llc->dsap != 0xaa) || (e_llc->ssap != 0xaa))
-+ && ( (mac_is_equal(daddr, e_hdr->daddr))
-+ || (mac_is_equal(saddr, e_hdr->saddr))
-+ )
-+ ) {
-+ /* 802.3 Encapsulated: */
-+ /* wlan frame body contains complete eth frame (header+body) */
-+ log(L_DEBUG|L_DATA, "rx: 802.3 ENCAP len=%d\n", payload_length);
-+
-+ if (unlikely(payload_length > (mtu + ETH_HLEN))) {
-+ printk("%s: rx: ENCAP frame too large (%d > %d)\n",
-+ adev->ndev->name,
-+ payload_length, mtu + ETH_HLEN);
-+ goto ret_null;
-+ }
-+
-+ /* allocate space and setup host buffer */
-+ buflen = payload_length;
-+ /* Attempt to align IP header (14 bytes eth header + 2 = 16) */
-+ skb = dev_alloc_skb(buflen + 2);
-+ if (unlikely(!skb))
-+ goto no_skb;
-+ skb_reserve(skb, 2);
-+ skb_put(skb, buflen); /* make room */
-+
-+ /* now copy the data from the 80211 frame */
-+ memcpy(skb->data, e_hdr, payload_length);
-+
-+ } else if ( (payload_length >= sizeof(wlan_llc_t)+sizeof(wlan_snap_t))
-+ && llc_is_snap(e_llc) ) {
-+ /* wlan frame body contains: AA AA 03 ... (it's a SNAP) */
-+
-+ if ( !oui_is_rfc1042(e_snap)
-+ || (proto_is_stt(ieee2host16(e_snap->type)) /* && (ethconv == WLAN_ETHCONV_8021h) */)) {
-+ log(L_DEBUG|L_DATA, "rx: SNAP+RFC1042 len=%d\n", payload_length);
-+ /* wlan frame body contains: AA AA 03 !(00 00 00) ... -or- */
-+ /* wlan frame body contains: AA AA 03 00 00 00 0x80f3 ... */
-+ /* build eth hdr, type = len, copy AA AA 03... as eth body */
-+ /* it's a SNAP + RFC1042 frame && protocol is in STT */
-+
-+ if (unlikely(payload_length > mtu)) {
-+ printk("%s: rx: SNAP frame too large (%d > %d)\n",
-+ adev->ndev->name,
-+ payload_length, mtu);
-+ goto ret_null;
-+ }
-+
-+ /* allocate space and setup host buffer */
-+ buflen = payload_length + ETH_HLEN;
-+ skb = dev_alloc_skb(buflen + 2);
-+ if (unlikely(!skb))
-+ goto no_skb;
-+ skb_reserve(skb, 2);
-+ skb_put(skb, buflen); /* make room */
-+
-+ /* create 802.3 header */
-+ e_hdr = (wlan_ethhdr_t*) skb->data;
-+ MAC_COPY(e_hdr->daddr, daddr);
-+ MAC_COPY(e_hdr->saddr, saddr);
-+ e_hdr->type = htons(payload_length);
-+
-+ /* Now copy the data from the 80211 frame.
-+ Make room in front for the eth header, and keep the
-+ llc and snap from the 802.11 payload */
-+ memcpy(skb->data + ETH_HLEN,
-+ e_llc, payload_length);
-+
-+ } else {
-+ /* wlan frame body contains: AA AA 03 00 00 00 [type] [tail] */
-+ /* build eth hdr, type=[type], copy [tail] as eth body */
-+ log(L_DEBUG|L_DATA, "rx: 802.1h/RFC1042 len=%d\n",
-+ payload_length);
-+ /* it's an 802.1h frame (an RFC1042 && protocol is not in STT) */
-+ /* build a DIXII + RFC894 */
-+
-+ payload_length -= sizeof(wlan_llc_t) + sizeof(wlan_snap_t);
-+ if (unlikely(payload_length > mtu)) {
-+ printk("%s: rx: DIXII frame too large (%d > %d)\n",
-+ adev->ndev->name,
-+ payload_length, mtu);
-+ goto ret_null;
-+ }
-+
-+ /* allocate space and setup host buffer */
-+ buflen = payload_length + ETH_HLEN;
-+ skb = dev_alloc_skb(buflen + 2);
-+ if (unlikely(!skb))
-+ goto no_skb;
-+ skb_reserve(skb, 2);
-+ skb_put(skb, buflen); /* make room */
-+
-+ /* create 802.3 header */
-+ e_hdr = (wlan_ethhdr_t *) skb->data;
-+ MAC_COPY(e_hdr->daddr, daddr);
-+ MAC_COPY(e_hdr->saddr, saddr);
-+ e_hdr->type = e_snap->type;
-+
-+ /* Now copy the data from the 80211 frame.
-+ Make room in front for the eth header, and cut off the
-+ llc and snap from the 802.11 payload */
-+ memcpy(skb->data + ETH_HLEN,
-+ e_payload, payload_length);
-+ }
-+
-+ } else {
-+ log(L_DEBUG|L_DATA, "rx: NON-ENCAP len=%d\n", payload_length);
-+ /* build eth hdr, type=len, copy wlan body as eth body */
-+ /* any NON-ENCAP */
-+ /* it's a generic 80211+LLC or IPX 'Raw 802.3' */
-+ /* build an 802.3 frame */
-+
-+ if (unlikely(payload_length > mtu)) {
-+ printk("%s: rx: OTHER frame too large (%d > %d)\n",
-+ adev->ndev->name, payload_length, mtu);
-+ goto ret_null;
-+ }
-+
-+ /* allocate space and setup host buffer */
-+ buflen = payload_length + ETH_HLEN;
-+ skb = dev_alloc_skb(buflen + 2);
-+ if (unlikely(!skb))
-+ goto no_skb;
-+ skb_reserve(skb, 2);
-+ skb_put(skb, buflen); /* make room */
-+
-+ /* set up the 802.3 header */
-+ e_hdr = (wlan_ethhdr_t *) skb->data;
-+ MAC_COPY(e_hdr->daddr, daddr);
-+ MAC_COPY(e_hdr->saddr, saddr);
-+ e_hdr->type = htons(payload_length);
-+
-+ /* now copy the data from the 80211 frame */
-+ memcpy(skb->data + ETH_HLEN, e_llc, payload_length);
-+ }
-+
-+ skb->dev = adev->ndev;
-+ skb->protocol = eth_type_trans(skb, adev->ndev);
-+
-+#ifdef DEBUG_CONVERT
-+ if (acx_debug & L_DATA) {
-+ int len = RXBUF_BYTES_RCVD(adev, rxbuf);
-+ printk("p802.11 frame [%d]: ", len);
-+ acx_dump_bytes(w_hdr, len);
-+ printk("eth frame [%d]: ", skb->len);
-+ acx_dump_bytes(skb->data, skb->len);
-+ }
-+#endif
-+
-+ FN_EXIT0;
-+ return skb;
-+
-+no_skb:
-+ printk("%s: rx: no memory for skb (%d bytes)\n",
-+ adev->ndev->name, buflen + 2);
-+ret_null:
-+ FN_EXIT1((int)NULL);
-+ return NULL;
-+}
-Index: linux-2.6.22/drivers/net/wireless/acx/cs.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/cs.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,5703 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+**
-+** Slave memory interface support:
-+**
-+** Todd Blumer - SDG Systems
-+** Bill Reese - HP
-+** Eric McCorkle - Shadowsun
-+**
-+** CF support, (c) Fabrice Crohas, Paul Sokolovsky
-+*/
-+#define ACX_MEM 1
-+
-+/*
-+ * non-zero makes it dump the ACX memory to the console then
-+ * panic when you cat /proc/driver/acx_wlan0_diag
-+ */
-+#define DUMP_MEM_DEFINED 1
-+
-+#define DUMP_MEM_DURING_DIAG 0
-+#define DUMP_IF_SLOW 0
-+
-+#define PATCH_AROUND_BAD_SPOTS 1
-+#define HX4700_FIRMWARE_CHECKSUM 0x0036862e
-+#define HX4700_ALTERNATE_FIRMWARE_CHECKSUM 0x00368a75
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+
-+/* Linux 2.6.18+ uses <linux/utsrelease.h> */
-+#ifndef UTS_RELEASE
-+#include <linux/utsrelease.h>
-+#endif
-+
-+#include <linux/compiler.h> /* required for Lx 2.6.8 ?? */
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/sched.h>
-+#include <linux/types.h>
-+#include <linux/skbuff.h>
-+#include <linux/slab.h>
-+#include <linux/if_arp.h>
-+#include <linux/irq.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+#include <linux/netdevice.h>
-+#include <linux/ioport.h>
-+#include <linux/pci.h>
-+#include <linux/platform_device.h>
-+#include <linux/pm.h>
-+#include <linux/vmalloc.h>
-+#include <linux/delay.h>
-+#include <linux/workqueue.h>
-+#include <linux/inetdevice.h>
-+
-+#define PCMCIA_DEBUG 1
-+
-+/*
-+ All the PCMCIA modules use PCMCIA_DEBUG to control debugging. If
-+ you do not define PCMCIA_DEBUG at all, all the debug code will be
-+ left out. If you compile with PCMCIA_DEBUG=0, the debug code will
-+ be present but disabled -- but it can then be enabled for specific
-+ modules at load time with a 'pc_debug=#' option to insmod.
-+
-+*/
-+#include <pcmcia/cs_types.h>
-+#include <pcmcia/cs.h>
-+#include <pcmcia/cistpl.h>
-+#include <pcmcia/cisreg.h>
-+#include <pcmcia/ds.h>
-+#include "acx.h"
-+#include "acx_hw.h"
-+
-+#ifdef PCMCIA_DEBUG
-+static int pc_debug = PCMCIA_DEBUG;
-+module_param(pc_debug, int, 0);
-+static char *version = "$Revision: 1.10 $";
-+#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args);
-+#else
-+#define DEBUG(n, args...)
-+#endif
-+
-+
-+static win_req_t memwin;
-+
-+typedef struct local_info_t {
-+ dev_node_t node;
-+ struct net_device *ndev;
-+} local_info_t;
-+
-+static struct net_device *resume_ndev;
-+
-+
-+/***********************************************************************
-+*/
-+
-+#define CARD_EEPROM_ID_SIZE 6
-+
-+#include <asm/io.h>
-+
-+#define REG_ACX_VENDOR_ID 0x900
-+/*
-+ * This is the vendor id on the HX4700, anyway
-+ */
-+#define ACX_VENDOR_ID 0x8400104c
-+
-+typedef enum {
-+ ACX_SOFT_RESET = 0,
-+
-+ ACX_SLV_REG_ADDR,
-+ ACX_SLV_REG_DATA,
-+ ACX_SLV_REG_ADATA,
-+
-+ ACX_SLV_MEM_CP,
-+ ACX_SLV_MEM_ADDR,
-+ ACX_SLV_MEM_DATA,
-+ ACX_SLV_MEM_CTL,
-+} acxreg_t;
-+
-+/***********************************************************************
-+*/
-+static void acxmem_i_tx_timeout(struct net_device *ndev);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id);
-+#else
-+static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-+#endif
-+static void acxmem_i_set_multicast_list(struct net_device *ndev);
-+
-+static int acxmem_e_open(struct net_device *ndev);
-+static int acxmem_e_close(struct net_device *ndev);
-+static void acxmem_s_up(struct net_device *ndev);
-+static void acxmem_s_down(struct net_device *ndev);
-+
-+static void dump_acxmem (acx_device_t *adev, u32 start, int length);
-+static int acxmem_complete_hw_reset (acx_device_t *adev);
-+static void acxmem_s_delete_dma_regions(acx_device_t *adev);
-+
-+static int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+acxmem_e_suspend( struct net_device *ndev, pm_message_t state);
-+#else
-+acxmem_e_suspend( struct net_device *ndev, u32 state);
-+#endif
-+static void
-+fw_resumer(struct work_struct *notused);
-+//fw_resumer( void *data );
-+
-+static int acx_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)
-+{
-+ struct net_device *ndev = ptr;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ /*
-+ * Upper level ioctl() handlers send a NETDEV_CHANGEADDR if the MAC address changes.
-+ */
-+
-+ if (NETDEV_CHANGEADDR == event) {
-+ /*
-+ * the upper layers put the new MAC address in ndev->dev_addr; we just copy
-+ * it over and update the ACX with it.
-+ */
-+ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr);
-+ adev->set_mask |= GETSET_STATION_ID;
-+ acx_s_update_card_settings (adev);
-+ }
-+
-+ return 0;
-+}
-+
-+static struct notifier_block acx_netdev_notifier = {
-+ .notifier_call = acx_netdev_event,
-+};
-+
-+/***********************************************************************
-+** Register access
-+*/
-+
-+/* Pick one */
-+/* #define INLINE_IO static */
-+#define INLINE_IO static inline
-+
-+INLINE_IO u32
-+read_id_register (acx_device_t *adev)
-+{
-+ writel (0x24, &adev->iobase[ACX_SLV_REG_ADDR]);
-+ return readl (&adev->iobase[ACX_SLV_REG_DATA]);
-+}
-+
-+INLINE_IO u32
-+read_reg32(acx_device_t *adev, unsigned int offset)
-+{
-+ u32 val;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ return readl(((u8*)adev->iobase) + addr);
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ val = readl( &adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return val;
-+}
-+
-+INLINE_IO u16
-+read_reg16(acx_device_t *adev, unsigned int offset)
-+{
-+ u16 lo;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ return readw(((u8 *) adev->iobase) + addr);
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ lo = readw( (u16 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return lo;
-+}
-+
-+INLINE_IO u8
-+read_reg8(acx_device_t *adev, unsigned int offset)
-+{
-+ u8 lo;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20)
-+ return readb(((u8 *)adev->iobase) + addr);
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ lo = readw( (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return (u8)lo;
-+}
-+
-+INLINE_IO void
-+write_reg32(acx_device_t *adev, unsigned int offset, u32 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writel(val, ((u8*)adev->iobase) + addr);
-+ return;
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writel( val, &adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+INLINE_IO void
-+write_reg16(acx_device_t *adev, unsigned int offset, u16 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writew(val, ((u8 *)adev->iobase) + addr);
-+ return;
-+ }
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writew( val, (u16 *) &adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+INLINE_IO void
-+write_reg8(acx_device_t *adev, unsigned int offset, u8 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writeb(val, ((u8 *) adev->iobase) + addr);
-+ return;
-+ }
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writeb( val, (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+/* Handle PCI posting properly:
-+ * Make sure that writes reach the adapter in case they require to be executed
-+ * *before* the next write, by reading a random (and safely accessible) register.
-+ * This call has to be made if there is no read following (which would flush the data
-+ * to the adapter), yet the written data has to reach the adapter immediately. */
-+INLINE_IO void
-+write_flush(acx_device_t *adev)
-+{
-+ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */
-+ /* faster version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should also be safe): */
-+ (void) readl(adev->iobase);
-+}
-+
-+INLINE_IO void
-+set_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
-+ u32 tmp;
-+
-+ tmp = read_reg32 (adev, offset);
-+ tmp = tmp | bits;
-+ write_reg32 (adev, offset, tmp);
-+ write_flush (adev);
-+}
-+
-+INLINE_IO void
-+clear_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
-+ u32 tmp;
-+
-+ tmp = read_reg32 (adev, offset);
-+ tmp = tmp & ~bits;
-+ write_reg32 (adev, offset, tmp);
-+ write_flush (adev);
-+}
-+
-+/*
-+ * Copy from PXA memory to the ACX memory. This assumes both the PXA and ACX
-+ * addresses are 32 bit aligned. Count is in bytes.
-+ */
-+INLINE_IO void
-+write_slavemem32 (acx_device_t *adev, u32 slave_address, u32 val)
-+{
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, val);
-+}
-+
-+INLINE_IO u32
-+read_slavemem32 (acx_device_t *adev, u32 slave_address)
-+{
-+ u32 val;
-+
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
-+ udelay (10);
-+ val = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+
-+ return val;
-+}
-+
-+INLINE_IO void
-+write_slavemem8 (acx_device_t *adev, u32 slave_address, u8 val)
-+{
-+ u32 data;
-+ u32 base;
-+ int offset;
-+
-+ /*
-+ * Get the word containing the target address and the byte offset in that word.
-+ */
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+ data &= ~(0xff << offset);
-+ data |= val << offset;
-+ write_slavemem32 (adev, base, data);
-+}
-+
-+INLINE_IO u8
-+read_slavemem8 (acx_device_t *adev, u32 slave_address)
-+{
-+ u8 val;
-+ u32 base;
-+ u32 data;
-+ int offset;
-+
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+
-+ val = (data >> offset) & 0xff;
-+
-+ return val;
-+}
-+
-+/*
-+ * doesn't split across word boundaries
-+ */
-+INLINE_IO void
-+write_slavemem16 (acx_device_t *adev, u32 slave_address, u16 val)
-+{
-+ u32 data;
-+ u32 base;
-+ int offset;
-+
-+ /*
-+ * Get the word containing the target address and the byte offset in that word.
-+ */
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+ data &= ~(0xffff << offset);
-+ data |= val << offset;
-+ write_slavemem32 (adev, base, data);
-+}
-+
-+/*
-+ * doesn't split across word boundaries
-+ */
-+INLINE_IO u16
-+read_slavemem16 (acx_device_t *adev, u32 slave_address)
-+{
-+ u16 val;
-+ u32 base;
-+ u32 data;
-+ int offset;
-+
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+
-+ val = (data >> offset) & 0xffff;
-+
-+ return val;
-+}
-+
-+/*
-+ * Copy from slave memory
-+ *
-+ * TODO - rewrite using address autoincrement, handle partial words
-+ */
-+void
-+copy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count) {
-+ u32 tmp = 0;
-+ u8 *ptmp = (u8 *) &tmp;
-+
-+ /*
-+ * Right now I'm making the assumption that the destination is aligned, but
-+ * I'd better check.
-+ */
-+ if ((u32) destination & 3) {
-+ printk ("acx copy_from_slavemem: warning! destination not word-aligned!\n");
-+ }
-+
-+ while (count >= 4) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
-+ udelay (10);
-+ *((u32 *) destination) = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ count -= 4;
-+ source += 4;
-+ destination += 4;
-+ }
-+
-+ /*
-+ * If the word reads above didn't satisfy the count, read one more word
-+ * and transfer a byte at a time until the request is satisfied.
-+ */
-+ if (count) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
-+ udelay (10);
-+ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ while (count--) {
-+ *destination++ = *ptmp++;
-+ }
-+ }
-+}
-+
-+/*
-+ * Copy to slave memory
-+ *
-+ * TODO - rewrite using autoincrement, handle partial words
-+ */
-+void
-+copy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
-+{
-+ u32 tmp = 0;
-+ u8* ptmp = (u8 *) &tmp;
-+ static u8 src[512]; /* make static to avoid huge stack objects */
-+
-+ /*
-+ * For now, make sure the source is word-aligned by copying it to a word-aligned
-+ * buffer. Someday rewrite to avoid the extra copy.
-+ */
-+ if (count > sizeof (src)) {
-+ printk ("acx copy_to_slavemem: Warning! buffer overflow!\n");
-+ count = sizeof (src);
-+ }
-+ memcpy (src, source, count);
-+ source = src;
-+
-+ while (count >= 4) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, *((u32 *) source));
-+ count -= 4;
-+ source += 4;
-+ destination += 4;
-+ }
-+
-+ /*
-+ * If there are leftovers read the next word from the acx and merge in
-+ * what they want to write.
-+ */
-+ if (count) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ while (count--) {
-+ *ptmp++ = *source++;
-+ }
-+ /*
-+ * reset address in case we're currently in auto-increment mode
-+ */
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, tmp);
-+ udelay (10);
-+ }
-+
-+}
-+
-+/*
-+ * Block copy to slave buffers using memory block chain mode. Copies to the ACX
-+ * transmit buffer structure with minimal intervention on our part.
-+ * Interrupts should be disabled when calling this.
-+ */
-+void
-+chaincopy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
-+{
-+ u32 val;
-+ u32 *data = (u32 *) source;
-+ static u8 aligned_source[WLAN_A4FR_MAXLEN_WEP_FCS];
-+
-+ /*
-+ * Warn if the pointers don't look right. Destination must fit in [23:5] with
-+ * zero elsewhere and source should be 32 bit aligned.
-+ * This should never happen since we're in control of both, but I want to know about
-+ * it if it does.
-+ */
-+ if ((destination & 0x00ffffe0) != destination) {
-+ printk ("acx chaincopy: destination block 0x%04x not aligned!\n", destination);
-+ }
-+ if (count > sizeof aligned_source) {
-+ printk( KERN_ERR "chaincopy_to_slavemem overflow!\n" );
-+ count = sizeof aligned_source;
-+ }
-+ if ((u32) source & 3) {
-+ memcpy (aligned_source, source, count);
-+ data = (u32 *) aligned_source;
-+ }
-+
-+ /*
-+ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
-+ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
-+ */
-+ val = 2 << 16 | 1 << 2;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
-+
-+ /*
-+ * SLV_MEM_CP[23:5] = start of 1st block
-+ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
-+ */
-+ val = destination & 0x00ffffe0;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
-+
-+ /*
-+ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
-+ */
-+ val = (destination & 0x00ffffe0) + (1<<2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
-+
-+ /*
-+ * Write the data to the slave data register, rounding up to the end
-+ * of the word containing the last byte (hence the > 0)
-+ */
-+ while (count > 0) {
-+ writel (*data++, &adev->iobase[ACX_SLV_MEM_DATA]);
-+ count -= 4;
-+ }
-+}
-+
-+
-+/*
-+ * Block copy from slave buffers using memory block chain mode. Copies from the ACX
-+ * receive buffer structures with minimal intervention on our part.
-+ * Interrupts should be disabled when calling this.
-+ */
-+void
-+chaincopy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count)
-+{
-+ u32 val;
-+ u32 *data = (u32 *) destination;
-+ static u8 aligned_destination[WLAN_A4FR_MAXLEN_WEP_FCS];
-+ int saved_count = count;
-+
-+ /*
-+ * Warn if the pointers don't look right. Destination must fit in [23:5] with
-+ * zero elsewhere and source should be 32 bit aligned.
-+ * Turns out the network stack sends unaligned things, so fix them before
-+ * copying to the ACX.
-+ */
-+ if ((source & 0x00ffffe0) != source) {
-+ printk ("acx chaincopy: source block 0x%04x not aligned!\n", source);
-+ dump_acxmem (adev, 0, 0x10000);
-+ }
-+ if ((u32) destination & 3) {
-+ //printk ("acx chaincopy: data destination not word aligned!\n");
-+ data = (u32 *) aligned_destination;
-+ if (count > sizeof aligned_destination) {
-+ printk( KERN_ERR "chaincopy_from_slavemem overflow!\n" );
-+ count = sizeof aligned_destination;
-+ }
-+ }
-+
-+ /*
-+ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
-+ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
-+ */
-+ val = (2 << 16) | (1 << 2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
-+
-+ /*
-+ * SLV_MEM_CP[23:5] = start of 1st block
-+ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
-+ */
-+ val = source & 0x00ffffe0;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
-+
-+ /*
-+ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
-+ */
-+ val = (source & 0x00ffffe0) + (1<<2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
-+
-+ /*
-+ * Read the data from the slave data register, rounding up to the end
-+ * of the word containing the last byte (hence the > 0)
-+ */
-+ while (count > 0) {
-+ *data++ = readl (&adev->iobase[ACX_SLV_MEM_DATA]);
-+ count -= 4;
-+ }
-+
-+ /*
-+ * If the destination wasn't aligned, we would have saved it in
-+ * the aligned buffer, so copy it where it should go.
-+ */
-+ if ((u32) destination & 3) {
-+ memcpy (destination, aligned_destination, saved_count);
-+ }
-+}
-+
-+char
-+printable (char c)
-+{
-+ return ((c >= 20) && (c < 127)) ? c : '.';
-+}
-+
-+#if DUMP_MEM_DEFINED > 0
-+static void
-+dump_acxmem (acx_device_t *adev, u32 start, int length)
-+{
-+ int i;
-+ u8 buf[16];
-+
-+ while (length > 0) {
-+ printk ("%04x ", start);
-+ copy_from_slavemem (adev, buf, start, 16);
-+ for (i = 0; (i < 16) && (i < length); i++) {
-+ printk ("%02x ", buf[i]);
-+ }
-+ for (i = 0; (i < 16) && (i < length); i++) {
-+ printk ("%c", printable (buf[i]));
-+ }
-+ printk ("\n");
-+ start += 16;
-+ length -= 16;
-+ }
-+}
-+#endif
-+
-+static void
-+enable_acx_irq(acx_device_t *adev);
-+static void
-+disable_acx_irq(acx_device_t *adev);
-+
-+/*
-+ * Return an acx pointer to the next transmit data block.
-+ */
-+u32
-+allocate_acx_txbuf_space (acx_device_t *adev, int count) {
-+ u32 block, next, last_block;
-+ int blocks_needed;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&adev->txbuf_lock, flags);
-+ /*
-+ * Take 4 off the memory block size to account for the reserved word at the start of
-+ * the block.
-+ */
-+ blocks_needed = count / (adev->memblocksize - 4);
-+ if (count % (adev->memblocksize - 4))
-+ blocks_needed++;
-+
-+ if (blocks_needed <= adev->acx_txbuf_blocks_free) {
-+ /*
-+ * Take blocks at the head of the free list.
-+ */
-+ last_block = block = adev->acx_txbuf_free;
-+
-+ /*
-+ * Follow block pointers through the requested number of blocks both to
-+ * find the new head of the free list and to set the flags for the blocks
-+ * appropriately.
-+ */
-+ while (blocks_needed--) {
-+ /*
-+ * Keep track of the last block of the allocation
-+ */
-+ last_block = adev->acx_txbuf_free;
-+
-+ /*
-+ * Make sure the end control flag is not set.
-+ */
-+ next = read_slavemem32 (adev, adev->acx_txbuf_free) & 0x7ffff;
-+ write_slavemem32 (adev, adev->acx_txbuf_free, next);
-+
-+ /*
-+ * Update the new head of the free list
-+ */
-+ adev->acx_txbuf_free = next << 5;
-+ adev->acx_txbuf_blocks_free--;
-+
-+ }
-+
-+ /*
-+ * Flag the last block both by clearing out the next pointer
-+ * and marking the control field.
-+ */
-+ write_slavemem32 (adev, last_block, 0x02000000);
-+
-+ /*
-+ * If we're out of buffers make sure the free list pointer is NULL
-+ */
-+ if (!adev->acx_txbuf_blocks_free) {
-+ adev->acx_txbuf_free = 0;
-+ }
-+ }
-+ else {
-+ block = 0;
-+ }
-+ spin_unlock_irqrestore (&adev->txbuf_lock, flags);
-+ return block;
-+}
-+
-+/*
-+ * Return buffer space back to the pool by following the next pointers until we find
-+ * the block marked as the end. Point the last block to the head of the free list,
-+ * then update the head of the free list to point to the newly freed memory.
-+ * This routine gets called in interrupt context, so it shouldn't block to protect
-+ * the integrity of the linked list. The ISR already holds the lock.
-+ */
-+void
-+reclaim_acx_txbuf_space (acx_device_t *adev, u32 blockptr) {
-+ u32 cur, last, next;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave (&adev->txbuf_lock, flags);
-+ if ((blockptr >= adev->acx_txbuf_start) &&
-+ (blockptr <= adev->acx_txbuf_start +
-+ (adev->acx_txbuf_numblocks - 1) * adev->memblocksize)) {
-+ cur = blockptr;
-+ do {
-+ last = cur;
-+ next = read_slavemem32 (adev, cur);
-+
-+ /*
-+ * Advance to the next block in this allocation
-+ */
-+ cur = (next & 0x7ffff) << 5;
-+
-+ /*
-+ * This block now counts as free.
-+ */
-+ adev->acx_txbuf_blocks_free++;
-+ } while (!(next & 0x02000000));
-+
-+ /*
-+ * last now points to the last block of that allocation. Update the pointer
-+ * in that block to point to the free list and reset the free list to the
-+ * first block of the free call. If there were no free blocks, make sure
-+ * the new end of the list marks itself as truly the end.
-+ */
-+ if (adev->acx_txbuf_free) {
-+ write_slavemem32 (adev, last, adev->acx_txbuf_free >> 5);
-+ }
-+ else {
-+ write_slavemem32 (adev, last, 0x02000000);
-+ }
-+ adev->acx_txbuf_free = blockptr;
-+ }
-+ spin_unlock_irqrestore(&adev->txbuf_lock, flags);
-+}
-+
-+/*
-+ * Initialize the pieces managing the transmit buffer pool on the ACX. The transmit
-+ * buffer is a circular queue with one 32 bit word reserved at the beginning of each
-+ * block. The upper 13 bits are a control field, of which only 0x02000000 has any
-+ * meaning. The lower 19 bits are the address of the next block divided by 32.
-+ */
-+void
-+init_acx_txbuf (acx_device_t *adev) {
-+
-+ /*
-+ * acx100_s_init_memory_pools set up txbuf_start and txbuf_numblocks for us.
-+ * All we need to do is reset the rest of the bookeeping.
-+ */
-+
-+ adev->acx_txbuf_free = adev->acx_txbuf_start;
-+ adev->acx_txbuf_blocks_free = adev->acx_txbuf_numblocks;
-+
-+ /*
-+ * Initialization leaves the last transmit pool block without a pointer back to
-+ * the head of the list, but marked as the end of the list. That's how we want
-+ * to see it, too, so leave it alone. This is only ever called after a firmware
-+ * reset, so the ACX memory is in the state we want.
-+ */
-+
-+}
-+
-+INLINE_IO int
-+adev_present(acx_device_t *adev)
-+{
-+ /* fast version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should be safe): */
-+ return readl(adev->iobase) != 0xffffffff;
-+}
-+
-+/***********************************************************************
-+*/
-+static inline txdesc_t*
-+get_txdesc(acx_device_t *adev, int index)
-+{
-+ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size);
-+}
-+
-+static inline txdesc_t*
-+advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc)
-+{
-+ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size);
-+}
-+
-+static txhostdesc_t*
-+get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return &adev->txhostdesc_start[index*2];
-+}
-+
-+static inline client_t*
-+get_txc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return adev->txc[index];
-+}
-+
-+static inline u16
-+get_txr(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ index /= adev->txdesc_size;
-+ return adev->txr[index];
-+}
-+
-+static inline void
-+put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ adev->txc[index] = c;
-+ adev->txr[index] = r111;
-+}
-+
-+
-+/***********************************************************************
-+** EEPROM and PHY read/write helpers
-+*/
-+/***********************************************************************
-+** acxmem_read_eeprom_byte
-+**
-+** Function called to read an octet in the EEPROM.
-+**
-+** This function is used by acxmem_e_probe to check if the
-+** connected card is a legal one or not.
-+**
-+** Arguments:
-+** adev ptr to acx_device structure
-+** addr address to read in the EEPROM
-+** charbuf ptr to a char. This is where the read octet
-+** will be stored
-+*/
-+int
-+acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf)
-+{
-+ int result;
-+ int count;
-+
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for EEPROM read\n",
-+ adev->ndev->name);
-+ result = NOT_OK;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA);
-+ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf);
-+ result = OK;
-+
-+fail:
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** We don't lock hw accesses here since we never r/w eeprom in IRQ
-+** Note: this function sleeps only because of GFP_KERNEL alloc
-+*/
-+#ifdef UNUSED
-+int
-+acxmem_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf)
-+{
-+ u8 *data_verify = NULL;
-+ unsigned long flags;
-+ int count, i;
-+ int result = NOT_OK;
-+ u16 gpio_orig;
-+
-+ printk("acx: WARNING! I would write to EEPROM now. "
-+ "Since I really DON'T want to unless you know "
-+ "what you're doing (THIS CODE WILL PROBABLY "
-+ "NOT WORK YET!), I will abort that now. And "
-+ "definitely make sure to make a "
-+ "/proc/driver/acx_wlan0_eeprom backup copy first!!! "
-+ "(the EEPROM content includes the PCI config header!! "
-+ "If you kill important stuff, then you WILL "
-+ "get in trouble and people DID get in trouble already)\n");
-+ return OK;
-+
-+ FN_ENTER;
-+
-+ data_verify = kmalloc(len, GFP_KERNEL);
-+ if (!data_verify) {
-+ goto end;
-+ }
-+
-+ /* first we need to enable the OE (EEPROM Output Enable) GPIO line
-+ * to be able to write to the EEPROM.
-+ * NOTE: an EEPROM writing success has been reported,
-+ * but you probably have to modify GPIO_OUT, too,
-+ * and you probably need to activate a different GPIO
-+ * line instead! */
-+ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE);
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1);
-+ write_flush(adev);
-+
-+ /* ok, now start writing the data out */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i));
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 1);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("WARNING, DANGER!!! "
-+ "Timeout waiting for EEPROM write\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+ }
-+
-+ /* disable EEPROM writing */
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig);
-+ write_flush(adev);
-+
-+ /* now start a verification run */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("timeout waiting for EEPROM read\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+
-+ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA);
-+ }
-+
-+ if (0 == memcmp(charbuf, data_verify, len))
-+ result = OK; /* read data matches, success */
-+
-+end:
-+ kfree(data_verify);
-+ FN_EXIT1(result);
-+ return result;
-+}
-+#endif /* UNUSED */
-+
-+
-+/***********************************************************************
-+** acxmem_s_read_phy_reg
-+**
-+** Messing with rx/tx disabling and enabling here
-+** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic
-+*/
-+int
-+acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
-+{
-+ int result = NOT_OK;
-+ int count;
-+
-+ FN_ENTER;
-+
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for phy read\n",
-+ adev->ndev->name);
-+ *charbuf = 0;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ log(L_DEBUG, "count was %u\n", count);
-+ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA);
-+
-+ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg);
-+ result = OK;
-+ goto fail; /* silence compiler warning */
-+fail:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
-+{
-+ int count;
-+ FN_ENTER;
-+
-+ /* mprusko said that 32bit accesses result in distorted sensitivity
-+ * on his card. Unconfirmed, looks like it's not true (most likely since we
-+ * now properly flush writes). */
-+ write_reg32(adev, IO_ACX_PHY_DATA, value);
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 1);
-+ write_flush(adev);
-+
-+ count = 0xffff;
-+ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for phy read\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg);
-+ fail:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+#define NO_AUTO_INCREMENT 1
-+
-+/***********************************************************************
-+** acxmem_s_write_fw
-+**
-+** Write the firmware image into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** 1 firmware image corrupted
-+** 0 success
-+*/
-+static int
-+acxmem_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset)
-+{
-+ int len, size, checkMismatch = -1;
-+ u32 sum, v32, tmp, id;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+ write_flush(adev);
-+#endif
-+#endif
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ sum += p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+ len += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+ write_flush(adev);
-+#endif
-+ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32);
-+ write_flush(adev);
-+#endif
-+ write_slavemem32 (adev, offset + len - 4, v32);
-+
-+ id = read_id_register (adev);
-+
-+ /*
-+ * check the data written
-+ */
-+ tmp = read_slavemem32 (adev, offset + len - 4);
-+ if (checkMismatch && (tmp != v32)) {
-+ printk ("first data mismatch at 0x%08x good 0x%08x bad 0x%08x id 0x%08x\n",
-+ offset + len - 4, v32, tmp, id);
-+ checkMismatch = 0;
-+ }
-+ }
-+ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n",
-+ size, sum, le32_to_cpu(fw_image->chksum));
-+
-+ /* compare our checksum with the stored image checksum */
-+ return (sum != le32_to_cpu(fw_image->chksum));
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_validate_fw
-+**
-+** Compare the firmware image given with
-+** the firmware image written into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** NOT_OK firmware image corrupted or not correctly written
-+** OK success
-+*/
-+static int
-+acxmem_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image,
-+ u32 offset)
-+{
-+ u32 sum, v32, w32;
-+ int len, size;
-+ int result = OK;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+#endif
-+
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ p += 4;
-+ len += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+#endif
-+ udelay(10);
-+ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA);
-+#endif
-+ w32 = read_slavemem32 (adev, offset + len - 4);
-+
-+ if (unlikely(w32 != v32)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "data parts at offset %d don't match\n(0x%08X vs. 0x%08X)!\n"
-+ "I/O timing issues or defective memory, with DWL-xx0+? "
-+ "ACX_IO_WIDTH=16 may help. Please report\n",
-+ len, v32, w32);
-+ result = NOT_OK;
-+ break;
-+ }
-+
-+ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24);
-+ }
-+
-+ /* sum control verification */
-+ if (result != NOT_OK) {
-+ if (sum != le32_to_cpu(fw_image->chksum)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "checksums don't match!\n");
-+ result = NOT_OK;
-+ }
-+ }
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_upload_fw
-+**
-+** Called from acx_reset_dev
-+*/
-+static int
-+acxmem_s_upload_fw(acx_device_t *adev)
-+{
-+ firmware_image_t *fw_image = NULL;
-+ int res = NOT_OK;
-+ int try;
-+ u32 file_size;
-+ char *filename = "WLANGEN.BIN";
-+#ifdef PATCH_AROUND_BAD_SPOTS
-+ u32 offset;
-+ int i;
-+ /*
-+ * arm-linux-objdump -d patch.bin, or
-+ * od -Ax -t x4 patch.bin after finding the bounds
-+ * of the .text section with arm-linux-objdump -s patch.bin
-+ */
-+ u32 patch[] = {
-+ 0xe584c030, 0xe59fc008,
-+ 0xe92d1000, 0xe59fc004, 0xe8bd8000, 0x0000080c,
-+ 0x0000aa68, 0x605a2200, 0x2c0a689c, 0x2414d80a,
-+ 0x2f00689f, 0x1c27d007, 0x06241e7c, 0x2f000e24,
-+ 0xe000d1f6, 0x602e6018, 0x23036468, 0x480203db,
-+ 0x60ca6003, 0xbdf0750a, 0xffff0808
-+ };
-+#endif
-+
-+ FN_ENTER;
-+ /* No combined image; tell common we need the radio firmware, too */
-+ adev->need_radio_fw = 1;
-+
-+ fw_image = acx_s_read_fw(adev->dev, filename, &file_size);
-+ if (!fw_image) {
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+ }
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxmem_s_write_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (main): %d\n", res);
-+ if (OK == res) {
-+ res = acxmem_s_validate_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw "
-+ "(main): %d\n", res);
-+ }
-+
-+ if (OK == res) {
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED);
-+ break;
-+ }
-+ printk("acx: firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+#ifdef PATCH_AROUND_BAD_SPOTS
-+ /*
-+ * Only want to do this if the firmware is exactly what we expect for an
-+ * iPaq 4700; otherwise, bad things would ensue.
-+ */
-+ if ((HX4700_FIRMWARE_CHECKSUM == fw_image->chksum) ||
-+ (HX4700_ALTERNATE_FIRMWARE_CHECKSUM == fw_image->chksum)) {
-+ /*
-+ * Put the patch after the main firmware image. 0x950c contains
-+ * the ACX's idea of the end of the firmware. Use that location to
-+ * load ours (which depends on that location being 0xab58) then
-+ * update that location to point to after ours.
-+ */
-+
-+ offset = read_slavemem32 (adev, 0x950c);
-+
-+ log (L_DEBUG, "acx: patching in at 0x%04x\n", offset);
-+
-+ for (i = 0; i < sizeof(patch) / sizeof(patch[0]); i++) {
-+ write_slavemem32 (adev, offset, patch[i]);
-+ offset += sizeof(u32);
-+ }
-+
-+ /*
-+ * Patch the instruction at 0x0804 to branch to our ARM patch at 0xab58
-+ */
-+ write_slavemem32 (adev, 0x0804, 0xea000000 + (0xab58-0x0804-8)/4);
-+
-+ /*
-+ * Patch the instructions at 0x1f40 to branch to our Thumb patch at 0xab74
-+ *
-+ * 4a00 ldr r2, [pc, #0]
-+ * 4710 bx r2
-+ * .data 0xab74+1
-+ */
-+ write_slavemem32 (adev, 0x1f40, 0x47104a00);
-+ write_slavemem32 (adev, 0x1f44, 0x0000ab74+1);
-+
-+ /*
-+ * Bump the end of the firmware up to beyond our patch.
-+ */
-+ write_slavemem32 (adev, 0x950c, offset);
-+
-+ }
-+#endif
-+
-+ vfree(fw_image);
-+
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_upload_radio
-+**
-+** Uploads the appropriate radio module firmware into the card.
-+*/
-+int
-+acxmem_s_upload_radio(acx_device_t *adev)
-+{
-+ acx_ie_memmap_t mm;
-+ firmware_image_t *radio_image;
-+ acx_cmd_radioinit_t radioinit;
-+ int res = NOT_OK;
-+ int try;
-+ u32 offset;
-+ u32 size;
-+ char filename[sizeof("RADIONN.BIN")];
-+
-+ if (!adev->need_radio_fw) return OK;
-+
-+ FN_ENTER;
-+
-+ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+ offset = le32_to_cpu(mm.CodeEnd);
-+
-+ snprintf(filename, sizeof(filename), "RADIO%02x.BIN",
-+ adev->radio_type);
-+ radio_image = acx_s_read_fw(adev->dev, filename, &size);
-+ if (!radio_image) {
-+ printk("acx: can't load radio module '%s'\n", filename);
-+ goto fail;
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxmem_s_write_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res);
-+ if (OK == res) {
-+ res = acxmem_s_validate_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res);
-+ }
-+
-+ if (OK == res)
-+ break;
-+ printk("acx: radio firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
-+ radioinit.offset = cpu_to_le32(offset);
-+
-+ /* no endian conversion needed, remains in card CPU area: */
-+ radioinit.len = radio_image->size;
-+
-+ vfree(radio_image);
-+
-+ if (OK != res)
-+ goto fail;
-+
-+ /* will take a moment so let's have a big timeout */
-+ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT,
-+ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000));
-+
-+ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+
-+fail:
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+/***********************************************************************
-+** acxmem_l_reset_mac
-+**
-+** MAC will be reset
-+** Call context: reset_dev
-+*/
-+static void
-+acxmem_l_reset_mac(acx_device_t *adev)
-+{
-+ int count;
-+ FN_ENTER;
-+
-+ /* halt eCPU */
-+ set_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
-+
-+ /* now do soft reset of eCPU, set bit */
-+ set_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
-+ log(L_DEBUG, "%s: enable soft reset...\n", __func__);
-+
-+ /* Windows driver sleeps here for a while with this sequence */
-+ for (count = 0; count < 200; count++) {
-+ udelay (50);
-+ }
-+
-+ /* now clear bit again: deassert eCPU reset */
-+ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__);
-+ clear_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
-+
-+ /* now start a burst read from initial EEPROM */
-+ set_regbits (adev, IO_ACX_EE_START, 0x1);
-+
-+ /*
-+ * Windows driver sleeps here for a while with this sequence
-+ */
-+ for (count = 0; count < 200; count++) {
-+ udelay (50);
-+ }
-+
-+ /* Windows driver writes 0x10000 to register 0x808 here */
-+
-+ write_reg32 (adev, 0x808, 0x10000);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_verify_init
-+*/
-+static int
-+acxmem_s_verify_init(acx_device_t *adev)
-+{
-+ int result = NOT_OK;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ timeout = jiffies + 2*HZ;
-+ for (;;) {
-+ u32 irqstat = read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if ((irqstat != 0xFFFFFFFF) && (irqstat & HOST_INT_FCS_THRESHOLD)) {
-+ result = OK;
-+ write_reg32(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD);
-+ break;
-+ }
-+ if (time_after(jiffies, timeout))
-+ break;
-+ /* Init may take up to ~0.5 sec total */
-+ acx_s_msleep(50);
-+ }
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** A few low-level helpers
-+**
-+** Note: these functions are not protected by lock
-+** and thus are never allowed to be called from IRQ.
-+** Also they must not race with fw upload which uses same hw regs
-+*/
-+
-+/***********************************************************************
-+** acxmem_write_cmd_type_status
-+*/
-+
-+static inline void
-+acxmem_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status)
-+{
-+ write_slavemem32 (adev, (u32) adev->cmd_area, type | (status << 16));
-+ write_flush(adev);
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_read_cmd_type_status
-+*/
-+static u32
-+acxmem_read_cmd_type_status(acx_device_t *adev)
-+{
-+ u32 cmd_type, cmd_status;
-+
-+ cmd_type = read_slavemem32 (adev, (u32) adev->cmd_area);
-+
-+ cmd_status = (cmd_type >> 16);
-+ cmd_type = (u16)cmd_type;
-+
-+ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n",
-+ cmd_type, cmd_status,
-+ acx_cmd_status_str(cmd_status));
-+
-+ return cmd_status;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_reset_dev
-+**
-+** Arguments:
-+** netdevice that contains the adev variable
-+** Returns:
-+** NOT_OK on fail
-+** OK on success
-+** Side effects:
-+** device is hard reset
-+** Call context:
-+** acxmem_e_probe
-+** Comment:
-+** This resets the device using low level hardware calls
-+** as well as uploads and verifies the firmware to the card
-+*/
-+
-+static inline void
-+init_mboxes(acx_device_t *adev)
-+{
-+ u32 cmd_offs, info_offs;
-+
-+ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS);
-+ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS);
-+ adev->cmd_area = (u8*) cmd_offs;
-+ adev->info_area = (u8*) info_offs;
-+ /*
-+ log(L_DEBUG, "iobase2=%p\n"
-+ */
-+ log( L_DEBUG, "cmd_mbox_offset=%X cmd_area=%p\n"
-+ "info_mbox_offset=%X info_area=%p\n",
-+ cmd_offs, adev->cmd_area,
-+ info_offs, adev->info_area);
-+}
-+
-+
-+static inline void
-+read_eeprom_area(acx_device_t *adev)
-+{
-+#if ACX_DEBUG > 1
-+ int offs;
-+ u8 tmp;
-+
-+ for (offs = 0x8c; offs < 0xb9; offs++)
-+ acxmem_read_eeprom_byte(adev, offs, &tmp);
-+#endif
-+}
-+
-+static int
-+acxmem_s_reset_dev(acx_device_t *adev)
-+{
-+ const char* msg = "";
-+ unsigned long flags;
-+ int result = NOT_OK;
-+ u16 hardware_info;
-+ u16 ecpu_ctrl;
-+ int count;
-+ u32 tmp;
-+
-+ FN_ENTER;
-+ /*
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CP, 0);
-+ */
-+ /* reset the device to make sure the eCPU is stopped
-+ * to upload the firmware correctly */
-+
-+ acx_lock(adev, flags);
-+
-+ /* Windows driver does some funny things here */
-+ /*
-+ * clear bit 0x200 in register 0x2A0
-+ */
-+ clear_regbits (adev, 0x2A0, 0x200);
-+
-+ /*
-+ * Set bit 0x200 in ACX_GPIO_OUT
-+ */
-+ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
-+
-+ /*
-+ * read register 0x900 until its value is 0x8400104C, sleeping
-+ * in between reads if it's not immediate
-+ */
-+ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
-+ count = 500;
-+ while (count-- && (tmp != ACX_VENDOR_ID)) {
-+ mdelay (10);
-+ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
-+ }
-+
-+ /* end what Windows driver does */
-+
-+ acxmem_l_reset_mac(adev);
-+
-+ ecpu_ctrl = read_reg32(adev, IO_ACX_ECPU_CTRL) & 1;
-+ if (!ecpu_ctrl) {
-+ msg = "eCPU is already running. ";
-+ goto end_unlock;
-+ }
-+
-+#ifdef WE_DONT_NEED_THAT_DO_WE
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) {
-+ /* eCPU most likely means "embedded CPU" */
-+ msg = "eCPU did not start after boot from flash. ";
-+ goto end_unlock;
-+ }
-+
-+ /* check sense on reset flags */
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) {
-+ printk("%s: eCPU did not start after boot (SOR), "
-+ "is this fatal?\n", adev->ndev->name);
-+ }
-+#endif
-+ /* scan, if any, is stopped now, setting corresponding IRQ bit */
-+ adev->irq_status |= HOST_INT_SCAN_COMPLETE;
-+
-+ acx_unlock(adev, flags);
-+
-+ /* need to know radio type before fw load */
-+ /* Need to wait for arrival of this information in a loop,
-+ * most probably since eCPU runs some init code from EEPROM
-+ * (started burst read in reset_mac()) which also
-+ * sets the radio type ID */
-+
-+ count = 0xffff;
-+ do {
-+ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION);
-+ if (!--count) {
-+ msg = "eCPU didn't indicate radio type";
-+ goto end_fail;
-+ }
-+ cpu_relax();
-+ } while (!(hardware_info & 0xff00)); /* radio type still zero? */
-+ printk("ACX radio type 0x%02x\n", (hardware_info >> 8) & 0xff);
-+ /* printk("DEBUG: count %d\n", count); */
-+ adev->form_factor = hardware_info & 0xff;
-+ adev->radio_type = hardware_info >> 8;
-+
-+ /* load the firmware */
-+ if (OK != acxmem_s_upload_fw(adev))
-+ goto end_fail;
-+
-+ /* acx_s_msleep(10); this one really shouldn't be required */
-+
-+ /* now start eCPU by clearing bit */
-+ clear_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
-+ log(L_DEBUG, "booted eCPU up and waiting for completion...\n");
-+
-+ /* Windows driver clears bit 0x200 in register 0x2A0 here */
-+ clear_regbits (adev, 0x2A0, 0x200);
-+
-+ /* Windows driver sets bit 0x200 in ACX_GPIO_OUT here */
-+ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
-+ /* wait for eCPU bootup */
-+ if (OK != acxmem_s_verify_init(adev)) {
-+ msg = "timeout waiting for eCPU. ";
-+ goto end_fail;
-+ }
-+ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n");
-+ init_mboxes(adev);
-+ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
-+
-+ /* test that EEPROM is readable */
-+ read_eeprom_area(adev);
-+
-+ result = OK;
-+ goto end;
-+
-+/* Finish error message. Indicate which function failed */
-+end_unlock:
-+ acx_unlock(adev, flags);
-+end_fail:
-+ printk("acx: %sreset_dev() FAILED\n", msg);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_issue_cmd_timeo
-+**
-+** Sends command to fw, extract result
-+**
-+** NB: we do _not_ take lock inside, so be sure to not touch anything
-+** which may interfere with IRQ handler operation
-+**
-+** TODO: busy wait is a bit silly, so:
-+** 1) stop doing many iters - go to sleep after first
-+** 2) go to waitqueue based approach: wait, not poll!
-+*/
-+#undef FUNC
-+#define FUNC "issue_cmd"
-+
-+#if !ACX_DEBUG
-+int
-+acxmem_s_issue_cmd_timeo(
-+ acx_device_t *adev,
-+ unsigned int cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout)
-+{
-+#else
-+int
-+acxmem_s_issue_cmd_timeo_debug(
-+ acx_device_t *adev,
-+ unsigned cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout,
-+ const char* cmdstr)
-+{
-+ unsigned long start = jiffies;
-+#endif
-+ const char *devname;
-+ unsigned counter;
-+ u16 irqtype;
-+ int i, j;
-+ u8 *p;
-+ u16 cmd_status;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ devname = adev->ndev->name;
-+ if (!devname || !devname[0] || devname[4]=='%')
-+ devname = "acx";
-+
-+ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n",
-+ cmdstr, buflen, cmd_timeout,
-+ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
-+
-+ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) {
-+ printk("%s: "FUNC"(): firmware is not loaded yet, "
-+ "cannot execute commands!\n", devname);
-+ goto bad;
-+ }
-+
-+ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) {
-+ printk("input buffer (len=%u):\n", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+
-+ /* wait for firmware to become idle for our command submission */
-+ timeout = HZ/5;
-+ counter = (timeout * 1000 / HZ) - 1; /* in ms */
-+ timeout += jiffies;
-+ do {
-+ cmd_status = acxmem_read_cmd_type_status(adev);
-+ /* Test for IDLE state */
-+ if (!cmd_status)
-+ break;
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ if (!counter) {
-+ /* the card doesn't get idle, we're in trouble */
-+ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n",
-+ devname, cmd_status);
-+#if DUMP_IF_SLOW > 0
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("not idle");
-+#endif
-+ goto bad;
-+ } else if (counter < 190) { /* if waited >10ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. "
-+ "Please report\n", 199 - counter);
-+ }
-+
-+ /* now write the parameters of the command if needed */
-+ if (buffer && buflen) {
-+ /* if it's an INTERROGATE command, just pass the length
-+ * of parameters to read, as data */
-+#if CMD_DISCOVERY
-+ if (cmd == ACX1xx_CMD_INTERROGATE)
-+ memset_io(adev->cmd_area + 4, 0xAA, buflen);
-+#endif
-+ /*
-+ * slave memory version
-+ */
-+ copy_to_slavemem (adev, (u32) (adev->cmd_area + 4), buffer,
-+ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen);
-+ }
-+ /* now write the actual command type */
-+ acxmem_write_cmd_type_status(adev, cmd, 0);
-+
-+ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */
-+ adev->irq_status &= ~HOST_INT_CMD_COMPLETE;
-+
-+ /* execute command */
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD);
-+ write_flush(adev);
-+
-+ /* wait for firmware to process command */
-+
-+ /* Ensure nonzero and not too large timeout.
-+ ** Also converts e.g. 100->99, 200->199
-+ ** which is nice but not essential */
-+ cmd_timeout = (cmd_timeout-1) | 1;
-+ if (unlikely(cmd_timeout > 1199))
-+ cmd_timeout = 1199;
-+
-+ /* we schedule away sometimes (timeout can be large) */
-+ counter = cmd_timeout;
-+ timeout = jiffies + cmd_timeout * HZ / 1000;
-+ do {
-+ if (!adev->irqs_active) { /* IRQ disabled: poll */
-+ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ write_reg16(adev, IO_ACX_IRQ_ACK,
-+ HOST_INT_CMD_COMPLETE);
-+ break;
-+ }
-+ } else { /* Wait when IRQ will set the bit */
-+ irqtype = adev->irq_status;
-+ if (irqtype & HOST_INT_CMD_COMPLETE)
-+ break;
-+ }
-+
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ /* save state for debugging */
-+ cmd_status = acxmem_read_cmd_type_status(adev);
-+
-+ /* put the card in IDLE state */
-+ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
-+
-+ if (!counter) { /* timed out! */
-+ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. "
-+ "irq bits:0x%04X irq_status:0x%04X timeout:%dms "
-+ "cmd_status:%d (%s)\n",
-+ devname, (adev->irqs_active) ? "waiting" : "polling",
-+ irqtype, adev->irq_status, cmd_timeout,
-+ cmd_status, acx_cmd_status_str(cmd_status));
-+ printk("%s: "FUNC"(): device irq status 0x%04x\n",
-+ devname, read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES));
-+ printk("%s: "FUNC"(): IO_ACX_IRQ_MASK 0x%04x IO_ACX_FEMR 0x%04x\n",
-+ devname,
-+ read_reg16 (adev, IO_ACX_IRQ_MASK),
-+ read_reg16 (adev, IO_ACX_FEMR));
-+ if (read_reg16 (adev, IO_ACX_IRQ_MASK) == 0xffff) {
-+ printk ("acxmem: firmware probably hosed - reloading\n");
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+ {
-+ pm_message_t state;
-+ /* acxmem_e_suspend (resume_pdev, state); */
-+ acxmem_e_suspend (adev->ndev , state);
-+ }
-+#else
-+ acxmem_e_suspend (adev, 0);
-+#endif
-+ {
-+ resume_ndev = adev->ndev;
-+ fw_resumer (NULL);
-+ }
-+ }
-+
-+ goto bad;
-+ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. "
-+ "count:%d. Please report\n",
-+ (adev->irqs_active) ? "waited" : "polled",
-+ cmd_timeout - counter, counter);
-+ }
-+
-+ if (1 != cmd_status) { /* it is not a 'Success' */
-+ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). "
-+ "Took %dms of %d\n",
-+ devname, cmd_status, acx_cmd_status_str(cmd_status),
-+ cmd_timeout - counter, cmd_timeout);
-+ /* zero out result buffer
-+ * WARNING: this will trash stack in case of illegally large input
-+ * length! */
-+ if (buflen > 388) {
-+ /*
-+ * 388 is maximum command length
-+ */
-+ printk ("invalid length 0x%08x\n", buflen);
-+ buflen = 388;
-+ }
-+ p = (u8 *) buffer;
-+ for (i = 0; i < buflen; i+= 16) {
-+ printk ("%04x:", i);
-+ for (j = 0; (j < 16) && (i+j < buflen); j++) {
-+ printk (" %02x", *p++);
-+ }
-+ printk ("\n");
-+ }
-+ if (buffer && buflen)
-+ memset(buffer, 0, buflen);
-+ goto bad;
-+ }
-+
-+ /* read in result parameters if needed */
-+ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) {
-+ copy_from_slavemem (adev, buffer, (u32) (adev->cmd_area + 4), buflen);
-+ if (acx_debug & L_DEBUG) {
-+ printk("output buffer (len=%u): ", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+ }
-+
-+/* ok: */
-+ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n",
-+ cmdstr, jiffies - start);
-+ FN_EXIT1(OK);
-+ return OK;
-+
-+bad:
-+ /* Give enough info so that callers can avoid
-+ ** printing their own diagnostic messages */
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
-+#else
-+ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
-+#endif
-+ dump_stack();
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#if defined(NONESSENTIAL_FEATURES)
-+typedef struct device_id {
-+ unsigned char id[6];
-+ char *descr;
-+ char *type;
-+} device_id_t;
-+
-+static const device_id_t
-+device_ids[] =
-+{
-+ {
-+ {'G', 'l', 'o', 'b', 'a', 'l'},
-+ NULL,
-+ NULL,
-+ },
-+ {
-+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-+ "uninitialized",
-+ "SpeedStream SS1021 or Gigafast WF721-AEX"
-+ },
-+ {
-+ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85},
-+ "non-standard",
-+ "DrayTek Vigor 520"
-+ },
-+ {
-+ {'?', '?', '?', '?', '?', '?'},
-+ "non-standard",
-+ "Level One WPC-0200"
-+ },
-+ {
-+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-+ "empty",
-+ "DWL-650+ variant"
-+ }
-+};
-+
-+static void
-+acx_show_card_eeprom_id(acx_device_t *adev)
-+{
-+ unsigned char buffer[CARD_EEPROM_ID_SIZE];
-+ int i;
-+
-+ memset(&buffer, 0, CARD_EEPROM_ID_SIZE);
-+ /* use direct EEPROM access */
-+ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) {
-+ if (OK != acxmem_read_eeprom_byte(adev,
-+ ACX100_EEPROM_ID_OFFSET + i,
-+ &buffer[i])) {
-+ printk("acx: reading EEPROM FAILED\n");
-+ break;
-+ }
-+ }
-+
-+ for (i = 0; i < VEC_SIZE(device_ids); i++) {
-+ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) {
-+ if (device_ids[i].descr) {
-+ printk("acx: EEPROM card ID string check "
-+ "found %s card ID: is this %s?\n",
-+ device_ids[i].descr, device_ids[i].type);
-+ }
-+ break;
-+ }
-+ }
-+ if (i == VEC_SIZE(device_ids)) {
-+ printk("acx: EEPROM card ID string check found "
-+ "unknown card: expected 'Global', got '%.*s\'. "
-+ "Please report\n", CARD_EEPROM_ID_SIZE, buffer);
-+ }
-+}
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+/***********************************************************************
-+** acxmem_free_desc_queues
-+**
-+** Releases the queues that have been allocated, the
-+** others have been initialised to NULL so this
-+** function can be used if only part of the queues were allocated.
-+*/
-+
-+void
-+acxmem_free_desc_queues(acx_device_t *adev)
-+{
-+#define ACX_FREE_QUEUE(size, ptr, phyaddr) \
-+ if (ptr) { \
-+ kfree(ptr); \
-+ ptr = NULL; \
-+ size = 0; \
-+ }
-+
-+ FN_ENTER;
-+
-+ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy);
-+
-+ adev->txdesc_start = NULL;
-+
-+ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy);
-+
-+ adev->rxdesc_start = NULL;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_delete_dma_regions
-+*/
-+static void
-+acxmem_s_delete_dma_regions(acx_device_t *adev)
-+{
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+ /* disable radio Tx/Rx. Shouldn't we use the firmware commands
-+ * here instead? Or are we that much down the road that it's no
-+ * longer possible here? */
-+ /*
-+ * slave memory interface really doesn't like this.
-+ */
-+ /*
-+ write_reg16(adev, IO_ACX_ENABLE, 0);
-+ */
-+
-+ acx_s_msleep(100);
-+
-+ acx_lock(adev, flags);
-+ acxmem_free_desc_queues(adev);
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_probe
-+**
-+** Probe routine called when a PCI device w/ matching ID is found.
-+** Here's the sequence:
-+** - Allocate the PCI resources.
-+** - Read the PCMCIA attribute memory to make sure we have a WLAN card
-+** - Reset the MAC
-+** - Initialize the dev and wlan data
-+** - Initialize the MAC
-+**
-+** pdev - ptr to pci device structure containing info about pci configuration
-+** id - ptr to the device id entry that matched this device
-+*/
-+static const u16
-+IO_ACX100[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_END_CTL */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x007c, /* IO_ACX_INT_TRIG */
-+ 0x0098, /* IO_ACX_IRQ_MASK */
-+ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00ac, /* IO_ACX_IRQ_ACK */
-+ 0x00b0, /* IO_ACX_HINT_TRIG */
-+
-+ 0x0104, /* IO_ACX_ENABLE */
-+
-+ 0x0250, /* IO_ACX_EEPROM_CTL */
-+ 0x0254, /* IO_ACX_EEPROM_ADDR */
-+ 0x0258, /* IO_ACX_EEPROM_DATA */
-+ 0x025c, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0268, /* IO_ACX_PHY_ADDR */
-+ 0x026c, /* IO_ACX_PHY_DATA */
-+ 0x0270, /* IO_ACX_PHY_CTL */
-+
-+ 0x0290, /* IO_ACX_GPIO_OE */
-+
-+ 0x0298, /* IO_ACX_GPIO_OUT */
-+
-+ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x02d0, /* IO_ACX_EE_START */
-+ 0x02d4, /* IO_ACX_SOR_CFG */
-+ 0x02d8 /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static const u16
-+IO_ACX111[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_MEM_CP */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x00b4, /* IO_ACX_INT_TRIG */
-+ 0x00d4, /* IO_ACX_IRQ_MASK */
-+ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */
-+ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00e8, /* IO_ACX_IRQ_ACK */
-+ 0x00ec, /* IO_ACX_HINT_TRIG */
-+
-+ 0x01d0, /* IO_ACX_ENABLE */
-+
-+ 0x0338, /* IO_ACX_EEPROM_CTL */
-+ 0x033c, /* IO_ACX_EEPROM_ADDR */
-+ 0x0340, /* IO_ACX_EEPROM_DATA */
-+ 0x0344, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0350, /* IO_ACX_PHY_ADDR */
-+ 0x0354, /* IO_ACX_PHY_DATA */
-+ 0x0358, /* IO_ACX_PHY_CTL */
-+
-+ 0x0374, /* IO_ACX_GPIO_OE */
-+
-+ 0x037c, /* IO_ACX_GPIO_OUT */
-+
-+ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x0390, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x0100, /* IO_ACX_EE_START */
-+ 0x0104, /* IO_ACX_SOR_CFG */
-+ 0x0108, /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static void
-+dummy_netdev_init(struct net_device *ndev) {}
-+
-+/*
-+ * Most of the acx specific pieces of hardware reset.
-+ */
-+static int
-+acxmem_complete_hw_reset (acx_device_t *adev)
-+{
-+ acx111_ie_configoption_t co;
-+
-+ /* NB: read_reg() reads may return bogus data before reset_dev(),
-+ * since the firmware which directly controls large parts of the I/O
-+ * registers isn't initialized yet.
-+ * acx100 seems to be more affected than acx111 */
-+ if (OK != acxmem_s_reset_dev (adev))
-+ return -1;
-+
-+ if (IS_ACX100(adev)) {
-+ /* ACX100: configopt struct in cmd mailbox - directly after reset */
-+ copy_from_slavemem (adev, (u8*) &co, (u32) adev->cmd_area, sizeof (co));
-+ }
-+
-+ if (OK != acx_s_init_mac(adev))
-+ return -3;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111: configopt struct needs to be queried after full init */
-+ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS);
-+ }
-+
-+ /*
-+ * Set up transmit buffer administration
-+ */
-+ init_acx_txbuf (adev);
-+
-+ /*
-+ * Windows driver writes 0x01000000 to register 0x288, RADIO_CTL, if the form factor
-+ * is 3. It also write protects the EEPROM by writing 1<<9 to GPIO_OUT
-+ */
-+ if (adev->form_factor == 3) {
-+ set_regbits (adev, 0x288, 0x01000000);
-+ set_regbits (adev, 0x298, 1<<9);
-+ }
-+
-+/* TODO: merge them into one function, they are called just once and are the same for pci & usb */
-+ if (OK != acxmem_read_eeprom_byte(adev, 0x05, &adev->eeprom_version))
-+ return -2;
-+
-+ acx_s_parse_configoption(adev, &co);
-+ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */
-+ acx_display_hardware_details(adev);
-+
-+ return 0;
-+}
-+
-+static int acx_init_netdev(struct net_device *ndev, struct device *dev, int base_addr, int addr_size, int irq)
-+{
-+ const char *chip_name;
-+ int result = -EIO;
-+ int err;
-+ u8 chip_type;
-+ acx_device_t *adev = NULL;
-+
-+ FN_ENTER;
-+
-+ /* FIXME: prism54 calls pci_set_mwi() here,
-+ * should we do/support the same? */
-+
-+ /* chiptype is u8 but id->driver_data is ulong
-+ ** Works for now (possible values are 1 and 2) */
-+ chip_type = CHIPTYPE_ACX100;
-+ /* acx100 and acx111 have different PCI memory regions */
-+ if (chip_type == CHIPTYPE_ACX100) {
-+ chip_name = "ACX100";
-+ } else if (chip_type == CHIPTYPE_ACX111) {
-+ chip_name = "ACX111";
-+ } else {
-+ printk("acx: unknown chip type 0x%04X\n", chip_type);
-+ goto fail_unknown_chiptype;
-+ }
-+
-+ printk("acx: found %s-based wireless network card\n", chip_name);
-+ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug);
-+
-+
-+ dev_set_drvdata(dev, ndev);
-+
-+ ether_setup(ndev);
-+
-+ ndev->irq = irq;
-+
-+ ndev->base_addr = base_addr;
-+printk (KERN_INFO "memwinbase=%lx memwinsize=%u\n",memwin.Base,memwin.Size);
-+ if (addr_size == 0 || ndev->irq == 0)
-+ goto fail_hw_params;
-+ ndev->open = &acxmem_e_open;
-+ ndev->stop = &acxmem_e_close;
-+ //pdev->dev.release = &acxmem_e_release;
-+ ndev->hard_start_xmit = &acx_i_start_xmit;
-+ ndev->get_stats = &acx_e_get_stats;
-+#if IW_HANDLER_VERSION <= 5
-+ ndev->get_wireless_stats = &acx_e_get_wireless_stats;
-+#endif
-+ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
-+ ndev->set_multicast_list = &acxmem_i_set_multicast_list;
-+ ndev->tx_timeout = &acxmem_i_tx_timeout;
-+ ndev->change_mtu = &acx_e_change_mtu;
-+ ndev->watchdog_timeo = 4 * HZ;
-+
-+ adev = ndev2adev(ndev);
-+ spin_lock_init(&adev->lock); /* initial state: unlocked */
-+ spin_lock_init(&adev->txbuf_lock);
-+ /* We do not start with downed sem: we want PARANOID_LOCKING to work */
-+ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
-+ /* since nobody can see new netdev yet, we can as well
-+ ** just _presume_ that we're under sem (instead of actually taking it): */
-+ /* acx_sem_lock(adev); */
-+ adev->dev = dev;
-+ adev->ndev = ndev;
-+ adev->dev_type = DEVTYPE_MEM;
-+ adev->chip_type = chip_type;
-+ adev->chip_name = chip_name;
-+ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111;
-+ adev->membase = (volatile u32 *) ndev->base_addr;
-+ adev->iobase = (volatile u32 *) ioremap_nocache (ndev->base_addr, addr_size);
-+ /* to find crashes due to weird driver access
-+ * to unconfigured interface (ifup) */
-+ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead;
-+
-+#if defined(NONESSENTIAL_FEATURES)
-+ acx_show_card_eeprom_id(adev);
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+#ifdef SET_MODULE_OWNER
-+ SET_MODULE_OWNER(ndev);
-+#endif
-+ // need to fix that @@
-+ SET_NETDEV_DEV(ndev, dev);
-+
-+ log(L_IRQ|L_INIT, "using IRQ %d\n", ndev->irq);
-+
-+ /* ok, pci setup is finished, now start initializing the card */
-+
-+ if (OK != acxmem_complete_hw_reset (adev))
-+ goto fail_reset;
-+
-+ /*
-+ * Set up default things for most of the card settings.
-+ */
-+ acx_s_set_defaults(adev);
-+
-+ /* Register the card, AFTER everything else has been set up,
-+ * since otherwise an ioctl could step on our feet due to
-+ * firmware operations happening in parallel or uninitialized data */
-+ err = register_netdev(ndev);
-+ if (OK != err) {
-+ printk("acx: register_netdev() FAILED: %d\n", err);
-+ goto fail_register_netdev;
-+ }
-+
-+ acx_proc_register_entries(ndev);
-+
-+ /* Now we have our device, so make sure the kernel doesn't try
-+ * to send packets even though we're not associated to a network yet */
-+ acx_stop_queue(ndev, "on probe");
-+ acx_carrier_off(ndev, "on probe");
-+
-+ /*
-+ * Set up a default monitor type so that poor combinations of initialization
-+ * sequences in monitor mode don't end up destroying the hardware type.
-+ */
-+ adev->monitor_type = ARPHRD_ETHER;
-+
-+ /*
-+ * Register to receive inetaddr notifier changes. This will allow us to
-+ * catch if the user changes the MAC address of the interface.
-+ */
-+ register_netdevice_notifier(&acx_netdev_notifier);
-+
-+ /* after register_netdev() userspace may start working with dev
-+ * (in particular, on other CPUs), we only need to up the sem */
-+ /* acx_sem_unlock(adev); */
-+
-+ printk("acx "ACX_RELEASE": net device %s, driver compiled "
-+ "against wireless extensions %d and Linux %s\n",
-+ ndev->name, WIRELESS_EXT, UTS_RELEASE);
-+
-+#if CMD_DISCOVERY
-+ great_inquisitor(adev);
-+#endif
-+
-+ result = OK;
-+ goto done;
-+
-+ /* error paths: undo everything in reverse order... */
-+
-+fail_register_netdev:
-+
-+ acxmem_s_delete_dma_regions(adev);
-+
-+fail_reset:
-+fail_hw_params:
-+ free_netdev(ndev);
-+fail_unknown_chiptype:
-+
-+
-+done:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_remove
-+**
-+** Shut device down (if not hot unplugged)
-+** and deallocate PCI resources for the acx chip.
-+**
-+** pdev - ptr to PCI device structure containing info about pci configuration
-+*/
-+static int __devexit
-+acxmem_e_remove(struct pcmcia_device *link)
-+{
-+ struct net_device *ndev;
-+ acx_device_t *adev;
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ ndev = ((local_info_t*)link->priv)->ndev;
-+ if (!ndev) {
-+ log(L_DEBUG, "%s: card is unused. Skipping any release code\n",
-+ __func__);
-+ goto end;
-+ }
-+
-+ adev = ndev2adev(ndev);
-+
-+ /* If device wasn't hot unplugged... */
-+ if (adev_present(adev)) {
-+
-+ acx_sem_lock(adev);
-+
-+ /* disable both Tx and Rx to shut radio down properly */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
-+
-+#ifdef REDUNDANT
-+ /* put the eCPU to sleep to save power
-+ * Halting is not possible currently,
-+ * since not supported by all firmware versions */
-+ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0);
-+#endif
-+ acx_lock(adev, flags);
-+
-+ /* disable power LED to save power :-) */
-+ log(L_INIT, "switching off power LED to save power\n");
-+ acxmem_l_power_led(adev, 0);
-+
-+ /* stop our eCPU */
-+ if (IS_ACX111(adev)) {
-+ /* FIXME: does this actually keep halting the eCPU?
-+ * I don't think so...
-+ */
-+ acxmem_l_reset_mac(adev);
-+ } else {
-+ u16 temp;
-+
-+ /* halt eCPU */
-+ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
-+ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
-+ write_flush(adev);
-+ }
-+
-+ acx_unlock(adev, flags);
-+
-+ acx_sem_unlock(adev);
-+ }
-+
-+
-+ /*
-+ * Unregister the notifier chain
-+ */
-+ unregister_netdevice_notifier(&acx_netdev_notifier);
-+
-+ /* unregister the device to not let the kernel
-+ * (e.g. ioctls) access a half-deconfigured device
-+ * NB: this will cause acxmem_e_close() to be called,
-+ * thus we shouldn't call it under sem! */
-+ log(L_INIT, "removing device %s\n", ndev->name);
-+ unregister_netdev(ndev);
-+
-+ /* unregister_netdev ensures that no references to us left.
-+ * For paranoid reasons we continue to follow the rules */
-+ acx_sem_lock(adev);
-+
-+ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) {
-+ acxmem_s_down(ndev);
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ }
-+
-+ acx_proc_unregister_entries(ndev);
-+
-+ acxmem_s_delete_dma_regions(adev);
-+
-+ /* finally, clean up PCI bus state */
-+ if (adev->iobase) iounmap((void *)adev->iobase);
-+
-+ acx_sem_unlock(adev);
-+
-+ /* Free netdev (quite late,
-+ * since otherwise we might get caught off-guard
-+ * by a netdev timeout handler execution
-+ * expecting to see a working dev...) */
-+ free_netdev(ndev);
-+
-+ printk ("e_remove done\n");
-+end:
-+ FN_EXIT0;
-+
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** TODO: PM code needs to be fixed / debugged / tested.
-+*/
-+#ifdef CONFIG_PM
-+static int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+acxmem_e_suspend( struct net_device *ndev, pm_message_t state)
-+#else
-+acxmem_e_suspend( struct net_device *ndev, u32 state)
-+#endif
-+{
-+ FN_ENTER;
-+ acx_device_t *adev;
-+ printk("acx: suspend handler is experimental!\n");
-+ printk("sus: dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ goto end;
-+ // @@ need to get it from link or something like that
-+ adev = ndev2adev(ndev);
-+ printk("sus: adev %p\n", adev);
-+
-+ acx_sem_lock(adev);
-+
-+ netif_device_detach(adev->ndev); /* this one cannot sleep */
-+ acxmem_s_down(adev->ndev);
-+ /* down() does not set it to 0xffff, but here we really want that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ acxmem_s_delete_dma_regions(adev);
-+
-+ /*
-+ * Turn the ACX chip off.
-+ */
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+static void
-+fw_resumer(struct work_struct *notused)
-+{
-+ acx_device_t *adev;
-+ struct net_device *ndev = resume_ndev;
-+
-+ printk("acx: resume handler is experimental!\n");
-+ printk("rsm: got dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ return;
-+
-+ adev = ndev2adev(ndev);
-+ printk("rsm: got adev %p\n", adev);
-+
-+ acx_sem_lock(adev);
-+
-+ /*
-+ * Turn on the ACX.
-+ */
-+
-+ acxmem_complete_hw_reset (adev);
-+
-+ /*
-+ * done by acx_s_set_defaults for initial startup
-+ */
-+ acxmem_set_interrupt_mask(adev);
-+
-+ printk ("rsm: bringing up interface\n");
-+ SET_BIT (adev->set_mask, GETSET_ALL);
-+ acxmem_s_up(ndev);
-+ printk("rsm: acx up done\n");
-+
-+ /* now even reload all card parameters as they were before suspend,
-+ * and possibly be back in the network again already :-)
-+ */
-+ /* - most settings updated in acxmem_s_up()
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) {
-+ adev->set_mask = GETSET_ALL;
-+ acx_s_update_card_settings(adev);
-+ printk("rsm: settings updated\n");
-+ }
-+ */
-+ netif_device_attach(ndev);
-+ printk("rsm: device attached\n");
-+
-+ acx_sem_unlock(adev);
-+}
-+
-+DECLARE_WORK( fw_resume_work, fw_resumer );
-+
-+static int
-+acxmem_e_resume(struct pcmcia_device *link)
-+{
-+ FN_ENTER;
-+
-+ //resume_pdev = pdev;
-+ schedule_work( &fw_resume_work );
-+
-+ FN_EXIT0;
-+ return OK;
-+}
-+#endif /* CONFIG_PM */
-+
-+
-+/***********************************************************************
-+** acxmem_s_up
-+**
-+** This function is called by acxmem_e_open (when ifconfig sets the device as up)
-+**
-+** Side effects:
-+** - Enables on-card interrupt requests
-+** - calls acx_s_start
-+*/
-+
-+static void
-+enable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask);
-+ write_reg16(adev, IO_ACX_FEMR, 0x8000);
-+ adev->irqs_active = 1;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxmem_s_up(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+ enable_acx_irq(adev);
-+ acx_unlock(adev, flags);
-+
-+ /* acx fw < 1.9.3.e has a hardware timer, and older drivers
-+ ** used to use it. But we don't do that anymore, our OS
-+ ** has reliable software timers */
-+ init_timer(&adev->mgmt_timer);
-+ adev->mgmt_timer.function = acx_i_timer;
-+ adev->mgmt_timer.data = (unsigned long)adev;
-+
-+ /* Need to set ACX_STATE_IFACE_UP first, or else
-+ ** timer won't be started by acx_set_status() */
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ /* actual scan cmd will happen in start() */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING); break;
-+ case ACX_MODE_3_AP:
-+ case ACX_MODE_MONITOR:
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break;
-+ }
-+
-+ acx_s_start(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_down
-+**
-+** This disables the netdevice
-+**
-+** Side effects:
-+** - disables on-card interrupt request
-+*/
-+
-+static void
-+disable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+
-+ /* I guess mask is not 0xffff because acx100 won't signal
-+ ** cmd completion then (needed for ifup).
-+ ** Someone with acx100 please confirm */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ adev->irqs_active = 0;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxmem_s_down(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ /* Disable IRQs first, so that IRQs cannot race with us */
-+ /* then wait until interrupts have finished executing on other CPUs */
-+ acx_lock(adev, flags);
-+ disable_acx_irq(adev);
-+ synchronize_irq(adev->pdev->irq);
-+ acx_unlock(adev, flags);
-+
-+ /* we really don't want to have an asynchronous tasklet disturb us
-+ ** after something vital for its job has been shut down, so
-+ ** end all remaining work now.
-+ **
-+ ** NB: carrier_off (done by set_status below) would lead to
-+ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK().
-+ ** That's why we do FLUSH first.
-+ **
-+ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK()
-+ ** waits for acx_e_after_interrupt_task to complete if it is running
-+ ** on another CPU, but acx_e_after_interrupt_task
-+ ** will sleep on sem forever, because it is taken by us!
-+ ** Work around that by temporary sem unlock.
-+ ** This will fail miserably if we'll be hit by concurrent
-+ ** iwconfig or something in between. TODO! */
-+ acx_sem_unlock(adev);
-+ FLUSH_SCHEDULED_WORK();
-+ acx_sem_lock(adev);
-+
-+ /* This is possible:
-+ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task ->
-+ ** -> set_status(ASSOCIATED) -> wake_queue()
-+ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK
-+ ** lock/unlock is just paranoia, maybe not needed */
-+ acx_lock(adev, flags);
-+ acx_stop_queue(ndev, "on ifdown");
-+ acx_set_status(adev, ACX_STATUS_0_STOPPED);
-+ acx_unlock(adev, flags);
-+
-+ /* kernel/timer.c says it's illegal to del_timer_sync()
-+ ** a timer which restarts itself. We guarantee this cannot
-+ ** ever happen because acx_i_timer() never does this if
-+ ** status is ACX_STATUS_0_STOPPED */
-+ del_timer_sync(&adev->mgmt_timer);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_open
-+**
-+** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP
-+** from clear to set. In other words: ifconfig up.
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxmem_e_open(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ acx_init_task_scheduler(adev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D0); ? */
-+
-+#if 0
-+ /* request shared IRQ handler */
-+ if (request_irq(ndev->irq, acxmem_i_interrupt, SA_INTERRUPT, ndev->name, ndev)) {
-+ printk("%s: request_irq FAILED\n", ndev->name);
-+ result = -EAGAIN;
-+ goto done;
-+ }
-+ set_irq_type (ndev->irq, IRQT_FALLING);
-+ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq);
-+#endif
-+
-+ /* ifup device */
-+ acxmem_s_up(ndev);
-+
-+ /* We don't currently have to do anything else.
-+ * The setup of the MAC should be subsequently completed via
-+ * the mlme commands.
-+ * Higher layers know we're ready from dev->start==1 and
-+ * dev->tbusy==0. Our rx path knows to pass up received/
-+ * frames because of dev->flags&IFF_UP is true.
-+ */
-+done:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_close
-+**
-+** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP
-+** from set to clear. I.e. called by "ifconfig DEV down"
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxmem_e_close(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* ifdown device */
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ if (netif_device_present(ndev)) {
-+ acxmem_s_down(ndev);
-+ }
-+
-+ /* disable all IRQs, release shared IRQ handler */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ free_irq(ndev->irq, ndev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */
-+
-+ /* We currently don't have to do anything else.
-+ * Higher layers know we're not ready from dev->start==0 and
-+ * dev->tbusy==1. Our rx path knows to not pass up received
-+ * frames because of dev->flags&IFF_UP is false.
-+ */
-+ acx_sem_unlock(adev);
-+
-+ log(L_INIT, "closed device\n");
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_tx_timeout
-+**
-+** Called from network core. Must not sleep!
-+*/
-+static void
-+acxmem_i_tx_timeout(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ unsigned int tx_num_cleaned;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* clean processed tx descs, they may have been completely full */
-+ tx_num_cleaned = acxmem_l_clean_txdesc(adev);
-+
-+ /* nothing cleaned, yet (almost) no free buffers available?
-+ * --> clean all tx descs, no matter which status!!
-+ * Note that I strongly suspect that doing emergency cleaning
-+ * may confuse the firmware. This is a last ditch effort to get
-+ * ANYTHING to work again...
-+ *
-+ * TODO: it's best to simply reset & reinit hw from scratch...
-+ */
-+ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) {
-+ printk("%s: FAILED to free any of the many full tx buffers. "
-+ "Switching to emergency freeing. "
-+ "Please report!\n", ndev->name);
-+ acxmem_l_clean_txdesc_emergency(adev);
-+ }
-+
-+ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status))
-+ acx_wake_queue(ndev, "after tx timeout");
-+
-+ /* stall may have happened due to radio drift, so recalib radio */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+
-+ /* do unimportant work last */
-+ printk("%s: tx timeout!\n", ndev->name);
-+ adev->stats.tx_errors++;
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_set_multicast_list
-+** FIXME: most likely needs refinement
-+*/
-+static void
-+acxmem_i_set_multicast_list(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* firmwares don't have allmulti capability,
-+ * so just use promiscuous mode instead in this case. */
-+ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
-+ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ /* let kernel know in case *we* needed to set promiscuous */
-+ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI);
-+ } else {
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI);
-+ }
-+
-+ /* cannot update card settings directly here, atomic context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_l_process_rxdesc
-+**
-+** Called directly and only from the IRQ handler
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_rxbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_rxbuffer(const acx_device_t *adev)
-+{
-+ register const struct rxhostdesc *rxhostdesc;
-+ int i;
-+ /* no FN_ENTER here, we don't want that */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+ if (unlikely(!rxhostdesc)) return;
-+ for (i = 0; i < RX_CNT; i++) {
-+ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
-+ printk("rx: buf %d full\n", i);
-+ rxhostdesc++;
-+ }
-+}
-+#endif
-+
-+static void
-+acxmem_l_process_rxdesc(acx_device_t *adev)
-+{
-+ register rxhostdesc_t *hostdesc;
-+ register rxdesc_t *rxdesc;
-+ unsigned count, tail;
-+ u32 addr;
-+ u8 Ctl_8;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(acx_debug & L_BUFR))
-+ log_rxbuffer(adev);
-+
-+ /* First, have a loop to determine the first descriptor that's
-+ * full, just in case there's a mismatch between our current
-+ * rx_tail and the full descriptor we're supposed to handle. */
-+ tail = adev->rx_tail;
-+ count = RX_CNT;
-+ while (1) {
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+ rxdesc = &adev->rxdesc_start[tail];
-+ /* advance tail regardless of outcome of the below test */
-+ tail = (tail + 1) % RX_CNT;
-+
-+ /*
-+ * Unlike the PCI interface, where the ACX can write directly to
-+ * the host descriptors, on the slave memory interface we have to
-+ * pull these. All we really need to do is check the Ctl_8 field
-+ * in the rx descriptor on the ACX, which should be 0x11000000 if
-+ * we should process it.
-+ */
-+ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+ if ((Ctl_8 & DESC_CTL_HOSTOWN) &&
-+ (Ctl_8 & DESC_CTL_ACXDONE))
-+ break; /* found it! */
-+
-+ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */
-+ goto end;
-+ }
-+
-+ /* now process descriptors, starting with the first we figured out */
-+ while (1) {
-+ log(L_BUFR, "rx: tail=%u Ctl_8=%02X\n", tail, Ctl_8);
-+ /*
-+ * If the ACX has CTL_RECLAIM set on this descriptor there
-+ * is no buffer associated; it just wants us to tell it to
-+ * reclaim the memory.
-+ */
-+ if (!(Ctl_8 & DESC_CTL_RECLAIM)) {
-+
-+ /*
-+ * slave interface - pull data now
-+ */
-+ hostdesc->length = read_slavemem16 (adev, (u32) &(rxdesc->total_length));
-+
-+ /*
-+ * hostdesc->data is an rxbuffer_t, which includes header information,
-+ * but the length in the data packet doesn't. The header information
-+ * takes up an additional 12 bytes, so add that to the length we copy.
-+ */
-+ addr = read_slavemem32 (adev, (u32) &(rxdesc->ACXMemPtr));
-+ if (addr) {
-+ /*
-+ * How can &(rxdesc->ACXMemPtr) above ever be zero? Looks like we
-+ * get that now and then - try to trap it for debug.
-+ */
-+ if (addr & 0xffff0000) {
-+ printk("rxdesc 0x%08x\n", (u32) rxdesc);
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("Bad access!");
-+ }
-+ chaincopy_from_slavemem (adev, (u8 *) hostdesc->data, addr,
-+ hostdesc->length +
-+ (u32) &((rxbuffer_t *)0)->hdr_a3);
-+ acx_l_process_rxbuf(adev, hostdesc->data);
-+ }
-+ }
-+ else {
-+ printk ("rx reclaim only!\n");
-+ }
-+
-+ hostdesc->Status = 0;
-+
-+ /*
-+ * Let the ACX know we're done.
-+ */
-+ CLEAR_BIT (Ctl_8, DESC_CTL_HOSTOWN);
-+ SET_BIT (Ctl_8, DESC_CTL_HOSTDONE);
-+ SET_BIT (Ctl_8, DESC_CTL_RECLAIM);
-+ write_slavemem8 (adev, (u32) &rxdesc->Ctl_8, Ctl_8);
-+
-+ /*
-+ * Now tell the ACX we've finished with the receive buffer so
-+ * it can finish the reclaim.
-+ */
-+ write_reg16 (adev, IO_ACX_INT_TRIG, INT_TRIG_RXPRC);
-+
-+ /* ok, descriptor is handled, now check the next descriptor */
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+ rxdesc = &adev->rxdesc_start[tail];
-+
-+ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+
-+ /* if next descriptor is empty, then bail out */
-+ if (!(Ctl_8 & DESC_CTL_HOSTOWN) || !(Ctl_8 & DESC_CTL_ACXDONE))
-+ break;
-+
-+ tail = (tail + 1) % RX_CNT;
-+ }
-+end:
-+ adev->rx_tail = tail;
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_interrupt
-+**
-+** IRQ handler (atomic context, must not sleep, blah, blah)
-+*/
-+
-+/* scan is complete. all frames now on the receive queue are valid */
-+#define INFO_SCAN_COMPLETE 0x0001
-+#define INFO_WEP_KEY_NOT_FOUND 0x0002
-+/* hw has been reset as the result of a watchdog timer timeout */
-+#define INFO_WATCH_DOG_RESET 0x0003
-+/* failed to send out NULL frame from PS mode notification to AP */
-+/* recommended action: try entering 802.11 PS mode again */
-+#define INFO_PS_FAIL 0x0004
-+/* encryption/decryption process on a packet failed */
-+#define INFO_IV_ICV_FAILURE 0x0005
-+
-+/* Info mailbox format:
-+2 bytes: type
-+2 bytes: status
-+more bytes may follow
-+ rumors say about status:
-+ 0x0000 info available (set by hw)
-+ 0x0001 information received (must be set by host)
-+ 0x1000 info available, mailbox overflowed (messages lost) (set by hw)
-+ but in practice we've seen:
-+ 0x9000 when we did not set status to 0x0001 on prev message
-+ 0x1001 when we did set it
-+ 0x0000 was never seen
-+ conclusion: this is really a bitfield:
-+ 0x1000 is 'info available' bit
-+ 'mailbox overflowed' bit is 0x8000, not 0x1000
-+ value of 0x0000 probably means that there are no messages at all
-+ P.S. I dunno how in hell hw is supposed to notice that messages are lost -
-+ it does NOT clear bit 0x0001, and this bit will probably stay forever set
-+ after we set it once. Let's hope this will be fixed in firmware someday
-+*/
-+
-+static void
-+handle_info_irq(acx_device_t *adev)
-+{
-+#if ACX_DEBUG
-+ static const char * const info_type_msg[] = {
-+ "(unknown)",
-+ "scan complete",
-+ "WEP key not found",
-+ "internal watchdog reset was done",
-+ "failed to send powersave (NULL frame) notification to AP",
-+ "encrypt/decrypt on a packet has failed",
-+ "TKIP tx keys disabled",
-+ "TKIP rx keys disabled",
-+ "TKIP rx: key ID not found",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "TKIP IV value exceeds thresh"
-+ };
-+#endif
-+ u32 info_type, info_status;
-+
-+ info_type = read_slavemem32 (adev, (u32) adev->info_area);
-+
-+ info_status = (info_type >> 16);
-+ info_type = (u16)info_type;
-+
-+ /* inform fw that we have read this info message */
-+ write_slavemem32(adev, (u32) adev->info_area, info_type | 0x00010000);
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK);
-+ write_flush(adev);
-+
-+ log(L_CTL, "info_type:%04X info_status:%04X\n",
-+ info_type, info_status);
-+
-+ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n",
-+ info_status, info_type,
-+ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ?
-+ 0 : info_type]
-+ );
-+}
-+
-+
-+static void
-+log_unusual_irq(u16 irqtype) {
-+ /*
-+ if (!printk_ratelimit())
-+ return;
-+ */
-+
-+ printk("acx: got");
-+ if (irqtype & HOST_INT_TX_XFER) {
-+ printk(" Tx_Xfer");
-+ }
-+ if (irqtype & HOST_INT_RX_COMPLETE) {
-+ printk(" Rx_Complete");
-+ }
-+ if (irqtype & HOST_INT_DTIM) {
-+ printk(" DTIM");
-+ }
-+ if (irqtype & HOST_INT_BEACON) {
-+ printk(" Beacon");
-+ }
-+ if (irqtype & HOST_INT_TIMER) {
-+ log(L_IRQ, " Timer");
-+ }
-+ if (irqtype & HOST_INT_KEY_NOT_FOUND) {
-+ printk(" Key_Not_Found");
-+ }
-+ if (irqtype & HOST_INT_IV_ICV_FAILURE) {
-+ printk(" IV_ICV_Failure (crypto)");
-+ }
-+ /* HOST_INT_CMD_COMPLETE */
-+ /* HOST_INT_INFO */
-+ if (irqtype & HOST_INT_OVERFLOW) {
-+ printk(" Overflow");
-+ }
-+ if (irqtype & HOST_INT_PROCESS_ERROR) {
-+ printk(" Process_Error");
-+ }
-+ /* HOST_INT_SCAN_COMPLETE */
-+ if (irqtype & HOST_INT_FCS_THRESHOLD) {
-+ printk(" FCS_Threshold");
-+ }
-+ if (irqtype & HOST_INT_UNKNOWN) {
-+ printk(" Unknown");
-+ }
-+ printk(" IRQ(s)\n");
-+}
-+
-+
-+static void
-+update_link_quality_led(acx_device_t *adev)
-+{
-+ int qual;
-+
-+ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise);
-+ if (qual > adev->brange_max_quality)
-+ qual = adev->brange_max_quality;
-+
-+ if (time_after(jiffies, adev->brange_time_last_state_change +
-+ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) {
-+ acxmem_l_power_led(adev, (adev->brange_last_state == 0));
-+ adev->brange_last_state ^= 1; /* toggle */
-+ adev->brange_time_last_state_change = jiffies;
-+ }
-+}
-+
-+
-+#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */
-+
-+static irqreturn_t
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+acxmem_i_interrupt(int irq, void *dev_id)
-+#else
-+acxmwm_i_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+#endif
-+{
-+ acx_device_t *adev;
-+ unsigned long flags;
-+ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY;
-+ register u16 irqtype;
-+ u16 unmasked;
-+
-+ adev = ndev2adev((struct net_device*)dev_id);
-+
-+ /* LOCKING: can just spin_lock() since IRQs are disabled anyway.
-+ * I am paranoid */
-+ acx_lock(adev, flags);
-+
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ if (unlikely(0xffff == unmasked)) {
-+ /* 0xffff value hints at missing hardware,
-+ * so don't do anything.
-+ * Not very clean, but other drivers do the same... */
-+ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n");
-+ goto none;
-+ }
-+
-+ /* We will check only "interesting" IRQ types */
-+ irqtype = unmasked & ~adev->irq_mask;
-+ if (!irqtype) {
-+ /* We are on a shared IRQ line and it wasn't our IRQ */
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n",
-+ unmasked, adev->irq_mask);
-+ goto none;
-+ }
-+
-+ /* Done here because IRQ_NONEs taking three lines of log
-+ ** drive me crazy */
-+ FN_ENTER;
-+
-+#define IRQ_ITERATE 1
-+#if IRQ_ITERATE
-+if (jiffies != adev->irq_last_jiffies) {
-+ adev->irq_loops_this_jiffy = 0;
-+ adev->irq_last_jiffies = jiffies;
-+}
-+
-+/* safety condition; we'll normally abort loop below
-+ * in case no IRQ type occurred */
-+while (likely(--irqcount)) {
-+#endif
-+ /* ACK all IRQs ASAP */
-+ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff);
-+
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n",
-+ unmasked, adev->irq_mask, irqtype);
-+
-+ /* Handle most important IRQ types first */
-+ if (irqtype & HOST_INT_RX_DATA) {
-+ log(L_IRQ, "got Rx_Data IRQ\n");
-+ acxmem_l_process_rxdesc(adev);
-+ }
-+ if (irqtype & HOST_INT_TX_COMPLETE) {
-+ log(L_IRQ, "got Tx_Complete IRQ\n");
-+ /* don't clean up on each Tx complete, wait a bit
-+ * unless we're going towards full, in which case
-+ * we do it immediately, too (otherwise we might lockup
-+ * with a full Tx buffer if we go into
-+ * acxmem_l_clean_txdesc() at a time when we won't wakeup
-+ * the net queue in there for some reason...) */
-+ if (adev->tx_free <= TX_START_CLEAN) {
-+#if TX_CLEANUP_IN_SOFTIRQ
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP);
-+#else
-+ acxmem_l_clean_txdesc(adev);
-+#endif
-+ }
-+ }
-+
-+ /* Less frequent ones */
-+ if (irqtype & (0
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ | HOST_INT_SCAN_COMPLETE
-+ )) {
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ log(L_IRQ, "got Command_Complete IRQ\n");
-+ /* save the state for the running issue_cmd() */
-+ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE);
-+ }
-+ if (irqtype & HOST_INT_INFO) {
-+ handle_info_irq(adev);
-+ }
-+ if (irqtype & HOST_INT_SCAN_COMPLETE) {
-+ log(L_IRQ, "got Scan_Complete IRQ\n");
-+ /* need to do that in process context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN);
-+ /* remember that fw is not scanning anymore */
-+ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
-+ }
-+ }
-+
-+ /* These we just log, but either they happen rarely
-+ * or we keep them masked out */
-+ if (irqtype & (0
-+ /* | HOST_INT_RX_DATA */
-+ /* | HOST_INT_TX_COMPLETE */
-+ | HOST_INT_TX_XFER
-+ | HOST_INT_RX_COMPLETE
-+ | HOST_INT_DTIM
-+ | HOST_INT_BEACON
-+ | HOST_INT_TIMER
-+ | HOST_INT_KEY_NOT_FOUND
-+ | HOST_INT_IV_ICV_FAILURE
-+ /* | HOST_INT_CMD_COMPLETE */
-+ /* | HOST_INT_INFO */
-+ | HOST_INT_OVERFLOW
-+ | HOST_INT_PROCESS_ERROR
-+ /* | HOST_INT_SCAN_COMPLETE */
-+ | HOST_INT_FCS_THRESHOLD
-+ | HOST_INT_UNKNOWN
-+ )) {
-+ log_unusual_irq(irqtype);
-+ }
-+
-+#if IRQ_ITERATE
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ irqtype = unmasked & ~adev->irq_mask;
-+ /* Bail out if no new IRQ bits or if all are masked out */
-+ if (!irqtype)
-+ break;
-+
-+ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) {
-+ printk(KERN_ERR "acx: too many interrupts per jiffy!\n");
-+ /* Looks like card floods us with IRQs! Try to stop that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ /* This will short-circuit all future attempts to handle IRQ.
-+ * We cant do much more... */
-+ adev->irq_mask = 0;
-+ break;
-+ }
-+}
-+#endif
-+ /* Routine to perform blink with range */
-+ if (unlikely(adev->led_power == 2))
-+ update_link_quality_led(adev);
-+
-+/* handled: */
-+ /* write_flush(adev); - not needed, last op was read anyway */
-+ acx_unlock(adev, flags);
-+ FN_EXIT0;
-+ return IRQ_HANDLED;
-+
-+none:
-+ acx_unlock(adev, flags);
-+ return IRQ_NONE;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_power_led
-+*/
-+void
-+acxmem_l_power_led(acx_device_t *adev, int enable)
-+{
-+ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800;
-+
-+ /* A hack. Not moving message rate limiting to adev->xxx
-+ * (it's only a debug message after all) */
-+ static int rate_limit = 0;
-+
-+ if (rate_limit++ < 3)
-+ log(L_IOCTL, "Please report in case toggling the power "
-+ "LED doesn't work for your card!\n");
-+ if (enable)
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled);
-+ else
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled);
-+}
-+
-+
-+/***********************************************************************
-+** Ioctls
-+*/
-+
-+/***********************************************************************
-+*/
-+int
-+acx111pci_ioctl_info(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+#if ACX_DEBUG > 1
-+ acx_device_t *adev = ndev2adev(ndev);
-+ rxdesc_t *rxdesc;
-+ txdesc_t *txdesc;
-+ rxhostdesc_t *rxhostdesc;
-+ txhostdesc_t *txhostdesc;
-+ struct acx111_ie_memoryconfig memconf;
-+ struct acx111_ie_queueconfig queueconf;
-+ unsigned long flags;
-+ int i;
-+ char memmap[0x34];
-+ char rxconfig[0x8];
-+ char fcserror[0x8];
-+ char ratefallback[0x5];
-+
-+ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) )
-+ return OK;
-+ /* using printk() since we checked debug flag already */
-+
-+ acx_sem_lock(adev);
-+
-+ if (!IS_ACX111(adev)) {
-+ printk("acx111-specific function called "
-+ "with non-acx111 chip, aborting\n");
-+ goto end_ok;
-+ }
-+
-+ /* get Acx111 Memory Configuration */
-+ memset(&memconf, 0, sizeof(memconf));
-+ /* BTW, fails with 12 (Write only) error code.
-+ ** Retained for easy testing of issue_cmd error handling :) */
-+ printk ("Interrogating queue config\n");
-+ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG);
-+ printk ("done with queue config\n");
-+
-+ /* get Acx111 Queue Configuration */
-+ memset(&queueconf, 0, sizeof(queueconf));
-+ printk ("Interrogating mem config options\n");
-+ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
-+ printk ("done with mem config options\n");
-+
-+ /* get Acx111 Memory Map */
-+ memset(memmap, 0, sizeof(memmap));
-+ printk ("Interrogating mem map\n");
-+ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP);
-+ printk ("done with mem map\n");
-+
-+ /* get Acx111 Rx Config */
-+ memset(rxconfig, 0, sizeof(rxconfig));
-+ printk ("Interrogating rxconfig\n");
-+ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG);
-+ printk ("done with queue rxconfig\n");
-+
-+ /* get Acx111 fcs error count */
-+ memset(fcserror, 0, sizeof(fcserror));
-+ printk ("Interrogating fcs err count\n");
-+ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT);
-+ printk ("done with err count\n");
-+
-+ /* get Acx111 rate fallback */
-+ memset(ratefallback, 0, sizeof(ratefallback));
-+ printk ("Interrogating rate fallback\n");
-+ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK);
-+ printk ("done with rate fallback\n");
-+
-+ /* force occurrence of a beacon interrupt */
-+ /* TODO: comment why is this necessary */
-+ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON);
-+
-+ /* dump Acx111 Mem Configuration */
-+ printk("dump mem config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Number of stations: %1X\n"
-+ "Memory block size: %1X\n"
-+ "tx/rx memory block allocation: %1X\n"
-+ "count rx: %X / tx: %X queues\n"
-+ "options %1X\n"
-+ "fragmentation %1X\n"
-+ "Rx Queue 1 Count Descriptors: %X\n"
-+ "Rx Queue 1 Host Memory Start: %X\n"
-+ "Tx Queue 1 Count Descriptors: %X\n"
-+ "Tx Queue 1 Attributes: %X\n",
-+ memconf.len, (int) sizeof(memconf),
-+ memconf.no_of_stations,
-+ memconf.memory_block_size,
-+ memconf.tx_rx_memory_block_allocation,
-+ memconf.count_rx_queues, memconf.count_tx_queues,
-+ memconf.options,
-+ memconf.fragmentation,
-+ memconf.rx_queue1_count_descs,
-+ acx2cpu(memconf.rx_queue1_host_rx_start),
-+ memconf.tx_queue1_count_descs,
-+ memconf.tx_queue1_attributes);
-+
-+ /* dump Acx111 Queue Configuration */
-+ printk("dump queue head:\n"
-+ "data read: %d, struct size: %d\n"
-+ "tx_memory_block_address (from card): %X\n"
-+ "rx_memory_block_address (from card): %X\n"
-+ "rx1_queue address (from card): %X\n"
-+ "tx1_queue address (from card): %X\n"
-+ "tx1_queue attributes (from card): %X\n",
-+ queueconf.len, (int) sizeof(queueconf),
-+ queueconf.tx_memory_block_address,
-+ queueconf.rx_memory_block_address,
-+ queueconf.rx1_queue_address,
-+ queueconf.tx1_queue_address,
-+ queueconf.tx1_attributes);
-+
-+ /* dump Acx111 Mem Map */
-+ printk("dump mem map:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Code start: %X\n"
-+ "Code end: %X\n"
-+ "WEP default key start: %X\n"
-+ "WEP default key end: %X\n"
-+ "STA table start: %X\n"
-+ "STA table end: %X\n"
-+ "Packet template start: %X\n"
-+ "Packet template end: %X\n"
-+ "Queue memory start: %X\n"
-+ "Queue memory end: %X\n"
-+ "Packet memory pool start: %X\n"
-+ "Packet memory pool end: %X\n"
-+ "iobase: %p\n"
-+ "iobase2: %p\n",
-+ *((u16 *)&memmap[0x02]), (int) sizeof(memmap),
-+ *((u32 *)&memmap[0x04]),
-+ *((u32 *)&memmap[0x08]),
-+ *((u32 *)&memmap[0x0C]),
-+ *((u32 *)&memmap[0x10]),
-+ *((u32 *)&memmap[0x14]),
-+ *((u32 *)&memmap[0x18]),
-+ *((u32 *)&memmap[0x1C]),
-+ *((u32 *)&memmap[0x20]),
-+ *((u32 *)&memmap[0x24]),
-+ *((u32 *)&memmap[0x28]),
-+ *((u32 *)&memmap[0x2C]),
-+ *((u32 *)&memmap[0x30]),
-+ adev->iobase,
-+ adev->iobase2);
-+
-+ /* dump Acx111 Rx Config */
-+ printk("dump rx config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "rx config: %X\n"
-+ "rx filter config: %X\n",
-+ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig),
-+ *((u16 *)&rxconfig[0x04]),
-+ *((u16 *)&rxconfig[0x06]));
-+
-+ /* dump Acx111 fcs error */
-+ printk("dump fcserror:\n"
-+ "data read: %d, struct size: %d\n"
-+ "fcserrors: %X\n",
-+ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror),
-+ *((u32 *)&fcserror[0x04]));
-+
-+ /* dump Acx111 rate fallback */
-+ printk("dump rate fallback:\n"
-+ "data read: %d, struct size: %d\n"
-+ "ratefallback: %X\n",
-+ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback),
-+ *((u8 *)&ratefallback[0x04]));
-+
-+ /* protect against IRQ */
-+ acx_lock(adev, flags);
-+
-+ /* dump acx111 internal rx descriptor ring buffer */
-+ rxdesc = adev->rxdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump internal rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n"
-+ "RxStatus (dynamic) 0x%X\n"
-+ "Mod/Pre (dynamic) 0x%X\n",
-+ i,
-+ rxdesc,
-+ acx2cpu(rxdesc->pNextDesc),
-+ acx2cpu(rxdesc->ACXMemPtr),
-+ rxdesc->Ctl_8,
-+ rxdesc->rate,
-+ rxdesc->error,
-+ rxdesc->SNR);
-+ rxdesc++;
-+ }
-+
-+ /* dump host rx descriptor ring buffer */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump host rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ rxhostdesc,
-+ acx2cpu(rxhostdesc->data_phy),
-+ rxhostdesc->data_offset,
-+ le16_to_cpu(rxhostdesc->Ctl_16),
-+ le16_to_cpu(rxhostdesc->length),
-+ acx2cpu(rxhostdesc->desc_phy_next),
-+ rxhostdesc->Status);
-+ rxhostdesc++;
-+ }
-+
-+ /* dump acx111 internal tx descriptor ring buffer */
-+ txdesc = adev->txdesc_start;
-+
-+ /* loop over complete transmit pool */
-+ if (txdesc) for (i = 0; i < TX_CNT; i++) {
-+ printk("\ndump internal txdesc %d:\n"
-+ "size 0x%X\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "host mem pointer (dynamic) 0x%X\n"
-+ "length (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "CTL2 (dynamic) 0x%X\n"
-+ "Status (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n",
-+ i,
-+ (int) sizeof(struct txdesc),
-+ txdesc,
-+ acx2cpu(txdesc->pNextDesc),
-+ acx2cpu(txdesc->AcxMemPtr),
-+ acx2cpu(txdesc->HostMemPtr),
-+ le16_to_cpu(txdesc->total_length),
-+ txdesc->Ctl_8,
-+ txdesc->Ctl2_8, txdesc->error,
-+ txdesc->u.r1.rate);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+
-+ /* dump host tx descriptor ring buffer */
-+
-+ txhostdesc = adev->txhostdesc_start;
-+
-+ /* loop over complete host send pool */
-+ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) {
-+ printk("\ndump host txdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ txhostdesc,
-+ acx2cpu(txhostdesc->data_phy),
-+ txhostdesc->data_offset,
-+ le16_to_cpu(txhostdesc->Ctl_16),
-+ le16_to_cpu(txhostdesc->length),
-+ acx2cpu(txhostdesc->desc_phy_next),
-+ le32_to_cpu(txhostdesc->Status));
-+ txhostdesc++;
-+ }
-+
-+ /* write_reg16(adev, 0xb4, 0x4); */
-+
-+ acx_unlock(adev, flags);
-+end_ok:
-+
-+ acx_sem_unlock(adev);
-+#endif /* ACX_DEBUG */
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100mem_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ u16 gpio_old;
-+
-+ if (!IS_ACX100(adev)) {
-+ /* WARNING!!!
-+ * Removing this check *might* damage
-+ * hardware, since we're tweaking GPIOs here after all!!!
-+ * You've been warned...
-+ * WARNING!!! */
-+ printk("acx: sorry, setting bias level for non-acx100 "
-+ "is not supported yet\n");
-+ return OK;
-+ }
-+
-+ if (*extra > 7) {
-+ printk("acx: invalid bias parameter, range is 0-7\n");
-+ return -EINVAL;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ /* Need to lock accesses to [IO_ACX_GPIO_OUT]:
-+ * IRQ handler uses it to update LED */
-+ acx_lock(adev, flags);
-+ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT);
-+ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8));
-+ acx_unlock(adev, flags);
-+
-+ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old);
-+ printk("%s: PHY power amplifier bias: old:%d, new:%d\n",
-+ ndev->name,
-+ (gpio_old & 0x0700) >> 8, (unsigned char)*extra);
-+
-+ acx_sem_unlock(adev);
-+
-+ return OK;
-+}
-+
-+/***************************************************************
-+** acxmem_l_alloc_tx
-+** Actually returns a txdesc_t* ptr
-+**
-+** FIXME: in case of fragments, should allocate multiple descrs
-+** after figuring out how many we need and whether we still have
-+** sufficiently many.
-+*/
-+tx_t*
-+acxmem_l_alloc_tx(acx_device_t *adev)
-+{
-+ struct txdesc *txdesc;
-+ unsigned head;
-+ u8 ctl8;
-+ static int txattempts = 0;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(!adev->tx_free)) {
-+ printk("acx: BUG: no free txdesc left\n");
-+ /*
-+ * Probably the ACX ignored a transmit attempt and now there's a packet
-+ * sitting in the queue we think should be transmitting but the ACX doesn't
-+ * know about.
-+ * On the first pass, send the ACX a TxProc interrupt to try moving
-+ * things along, and if that doesn't work (ie, we get called again) completely
-+ * flush the transmit queue.
-+ */
-+ if (txattempts < 10) {
-+ txattempts++;
-+ printk ("acx: trying to wake up ACX\n");
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
-+ write_flush(adev); }
-+ else {
-+ txattempts = 0;
-+ printk ("acx: flushing transmit queue.\n");
-+ acxmem_l_clean_txdesc_emergency (adev);
-+ }
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ /*
-+ * Make a quick check to see if there is transmit buffer space on
-+ * the ACX. This can't guarantee there is enough space for the packet
-+ * since we don't yet know how big it is, but it will prevent at least some
-+ * annoyances.
-+ */
-+ if (!adev->acx_txbuf_blocks_free) {
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ head = adev->tx_head;
-+ /*
-+ * txdesc points to ACX memory
-+ */
-+ txdesc = get_txdesc(adev, head);
-+ ctl8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+
-+ /*
-+ * If we don't own the buffer (HOSTOWN) it is certainly not free; however,
-+ * we may have previously thought we had enough memory to send
-+ * a packet, allocated the buffer then gave up when we found not enough
-+ * transmit buffer space on the ACX. In that case, HOSTOWN and
-+ * ACXDONE will both be set.
-+ */
-+ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_HOSTOWN))) {
-+ /* whoops, descr at current index is not free, so probably
-+ * ring buffer already full */
-+ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find "
-+ "free txdesc\n", head, ctl8);
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ /* Needed in case txdesc won't be eventually submitted for tx */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_ACXDONE_HOSTOWN);
-+
-+ adev->tx_free--;
-+ log(L_BUFT, "tx: got desc %u, %u remain\n",
-+ head, adev->tx_free);
-+ /* Keep a few free descs between head and tail of tx ring.
-+ ** It is not absolutely needed, just feels safer */
-+ if (adev->tx_free < TX_STOP_QUEUE) {
-+ log(L_BUF, "stop queue (%u tx desc left)\n",
-+ adev->tx_free);
-+ acx_stop_queue(adev->ndev, NULL);
-+ }
-+
-+ /* returning current descriptor, so advance to next free one */
-+ adev->tx_head = (head + 1) % TX_CNT;
-+end:
-+ FN_EXIT0;
-+
-+ return (tx_t*)txdesc;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_l_dealloc_tx
-+** Clears out a previously allocatedvoid acxmem_l_dealloc_tx(tx_t *tx_opaque);
-+ transmit descriptor. The ACX
-+** can get confused if we skip transmit descriptors in the queue,
-+** so when we don't need a descriptor return it to its original
-+** state and move the queue head pointer back.
-+**
-+*/
-+void
-+acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque)
-+{
-+ /*
-+ * txdesc is the address of the descriptor on the ACX.
-+ */
-+ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
-+ txdesc_t tmptxdesc;
-+ int index;
-+
-+ memset (&tmptxdesc, 0, sizeof(tmptxdesc));
-+ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
-+ tmptxdesc.u.r1.rate = 0x0a;
-+
-+ /*
-+ * Clear out all of the transmit descriptor except for the next pointer
-+ */
-+ copy_to_slavemem (adev, (u32) &(txdesc->HostMemPtr),
-+ (u8 *) &(tmptxdesc.HostMemPtr),
-+ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc));
-+
-+ /*
-+ * This is only called immediately after we've allocated, so we should
-+ * be able to set the head back to this descriptor.
-+ */
-+ index = ((u8*) txdesc - (u8*)adev->txdesc_start) / adev->txdesc_size;
-+ printk ("acx_dealloc: moving head from %d to %d\n", adev->tx_head, index);
-+ adev->tx_head = index;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void*
-+acxmem_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
-+{
-+ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_tx_data
-+**
-+** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
-+** Can be called from acx_i_start_xmit (data frames from net core).
-+**
-+** FIXME: in case of fragments, should loop over the number of
-+** pre-allocated tx descrs, properly setting up transfer data and
-+** CTL_xxx flags according to fragment number.
-+*/
-+void
-+acxmem_update_queue_indicator (acx_device_t *adev, int txqueue)
-+{
-+#ifdef USING_MORE_THAN_ONE_TRANSMIT_QUEUE
-+ u32 indicator;
-+ unsigned long flags;
-+ int count;
-+
-+ /*
-+ * Can't handle an interrupt while we're fiddling with the ACX's lock,
-+ * according to TI. The ACX is supposed to hold fw_lock for at most
-+ * 500ns.
-+ */
-+ local_irq_save (flags);
-+
-+ /*
-+ * Wait for ACX to release the lock (at most 500ns).
-+ */
-+ count = 0;
-+ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
-+ && (count++ < 50)) {
-+ ndelay (10);
-+ }
-+ if (count < 50) {
-+
-+ /*
-+ * Take out the host lock - anything non-zero will work, so don't worry about
-+ * be/le
-+ */
-+ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 1);
-+
-+ /*
-+ * Avoid a race condition
-+ */
-+ count = 0;
-+ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
-+ && (count++ < 50)) {
-+ ndelay (10);
-+ }
-+
-+ if (count < 50) {
-+ /*
-+ * Mark the queue active
-+ */
-+ indicator = read_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator));
-+ indicator |= cpu_to_le32 (1 << txqueue);
-+ write_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator), indicator);
-+ }
-+
-+ /*
-+ * Release the host lock
-+ */
-+ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 0);
-+
-+ }
-+
-+ /*
-+ * Restore interrupts
-+ */
-+ local_irq_restore (flags);
-+#endif
-+}
-+
-+void
-+acxmem_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len)
-+{
-+ /*
-+ * txdesc is the address on the ACX
-+ */
-+ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
-+ txhostdesc_t *hostdesc1, *hostdesc2;
-+ client_t *clt;
-+ u16 rate_cur;
-+ u8 Ctl_8, Ctl2_8;
-+ u32 addr;
-+
-+ FN_ENTER;
-+ /* fw doesn't tx such packets anyhow */
-+ if (unlikely(len < WLAN_HDR_A3_LEN))
-+ goto end;
-+
-+ hostdesc1 = get_txhostdesc(adev, txdesc);
-+ /* modify flag status in separate variable to be able to write it back
-+ * in one big swoop later (also in order to have less device memory
-+ * accesses) */
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */
-+
-+ hostdesc2 = hostdesc1 + 1;
-+
-+ /* DON'T simply set Ctl field to 0 here globally,
-+ * it needs to maintain a consistent flag status (those are state flags!!),
-+ * otherwise it may lead to severe disruption. Only set or reset particular
-+ * flags at the exact moment this is needed... */
-+
-+ /* let chip do RTS/CTS handshaking before sending
-+ * in case packet size exceeds threshold */
-+ if (len > adev->rts_threshold)
-+ SET_BIT(Ctl2_8, DESC_CTL2_RTS);
-+ else
-+ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS);
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1);
-+ break;
-+ case ACX_MODE_2_STA:
-+ clt = adev->ap_client;
-+ break;
-+#if 0
-+/* testing was done on acx111: */
-+ case ACX_MODE_MONITOR:
-+ SET_BIT(Ctl2_8, 0
-+/* sends CTS to self before packet */
-+ + DESC_CTL2_SEQ /* don't increase sequence field */
-+/* not working (looks like good fcs is still added) */
-+ + DESC_CTL2_FCS /* don't add the FCS */
-+/* not tested */
-+ + DESC_CTL2_MORE_FRAG
-+/* not tested */
-+ + DESC_CTL2_RETRY /* don't increase retry field */
-+/* not tested */
-+ + DESC_CTL2_POWER /* don't increase power mgmt. field */
-+/* no effect */
-+ + DESC_CTL2_WEP /* encrypt this frame */
-+/* not tested */
-+ + DESC_CTL2_DUR /* don't increase duration field */
-+ );
-+ /* fallthrough */
-+#endif
-+ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
-+ clt = NULL;
-+ break;
-+ }
-+
-+ rate_cur = clt ? clt->rate_cur : adev->rate_bcast;
-+ if (unlikely(!rate_cur)) {
-+ printk("acx: driver bug! bad ratemask\n");
-+ goto end;
-+ }
-+
-+ /* used in tx cleanup routine for auto rate and accounting: */
-+ put_txcr(adev, txdesc, clt, rate_cur);
-+
-+ write_slavemem16 (adev, (u32) &(txdesc->total_length), cpu_to_le16(len));
-+ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN);
-+ if (IS_ACX111(adev)) {
-+ /* note that if !txdesc->do_auto, txrate->cur
-+ ** has only one nonzero bit */
-+ txdesc->u.r2.rate111 = cpu_to_le16(
-+ rate_cur
-+ /* WARNING: I was never able to make it work with prism54 AP.
-+ ** It was falling down to 1Mbit where shortpre is not applicable,
-+ ** and not working at all at "5,11 basic rates only" setting.
-+ ** I even didn't see tx packets in radio packet capture.
-+ ** Disabled for now --vda */
-+ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */
-+ );
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ /* should add this to rate111 above as necessary */
-+ | (clt->pbcc511 ? RATE111_PBCC511 : 0)
-+#endif
-+ hostdesc1->length = cpu_to_le16(len);
-+ } else { /* ACX100 */
-+ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100;
-+ write_slavemem8 (adev, (u32) &(txdesc->u.r1.rate), rate_100);
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ if (clt->pbcc511) {
-+ if (n == RATE100_5 || n == RATE100_11)
-+ n |= RATE100_PBCC511;
-+ }
-+
-+ if (clt->shortpre && (clt->cur != RATE111_1))
-+ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */
-+#endif
-+ /* set autodma and reclaim and 1st mpdu */
-+ SET_BIT(Ctl_8, DESC_CTL_FIRSTFRAG);
-+
-+#if ACX_FRAGMENTATION
-+ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */
-+#endif
-+ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN);
-+
-+ /*
-+ * Since we're not using autodma copy the packet data to the acx now.
-+ * Even host descriptors point to the packet header, and the odd indexed
-+ * descriptor following points to the packet data.
-+ *
-+ * The first step is to find free memory in the ACX transmit buffers.
-+ * They don't necessarily map one to one with the transmit queue entries,
-+ * so search through them starting just after the last one used.
-+ */
-+ addr = allocate_acx_txbuf_space (adev, len);
-+ if (addr) {
-+ chaincopy_to_slavemem (adev, addr, hostdesc1->data, len);
-+ }
-+ else {
-+ /*
-+ * Bummer. We thought we might have enough room in the transmit
-+ * buffers to send this packet, but it turns out we don't. alloc_tx
-+ * has already marked this transmit descriptor as HOSTOWN and ACXDONE,
-+ * which means the ACX will hang when it gets to this descriptor unless
-+ * we do something about it. Having a bubble in the transmit queue just
-+ * doesn't seem to work, so we have to reset this transmit queue entry's
-+ * state to its original value and back up our head pointer to point
-+ * back to this entry.
-+ */
-+ hostdesc1->length = 0;
-+ hostdesc2->length = 0;
-+ write_slavemem16 (adev, (u32) &(txdesc->total_length), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG);
-+ adev->tx_head = ((u8*) txdesc - (u8*) adev->txdesc_start) / adev->txdesc_size;
-+ goto end;
-+ }
-+ /*
-+ * Tell the ACX where the packet is.
-+ */
-+ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), addr);
-+
-+ }
-+ /* don't need to clean ack/rts statistics here, already
-+ * done on descr cleanup */
-+
-+ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors
-+ * are now owned by the acx100; do this as LAST operation */
-+ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN);
-+ /* flush writes before we release hostdesc to the adapter here */
-+ //wmb();
-+
-+ /* write back modified flags */
-+ /*
-+ * At this point Ctl_8 should just be FIRSTFRAG
-+ */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl2_8),Ctl2_8);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), Ctl_8);
-+ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */
-+
-+ /*
-+ * Update the queue indicator to say there's data on the first queue.
-+ */
-+ acxmem_update_queue_indicator (adev, 0);
-+
-+ /* flush writes before we tell the adapter that it's its turn now */
-+ mmiowb();
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
-+ write_flush(adev);
-+
-+ /* log the packet content AFTER sending it,
-+ * in order to not delay sending any further than absolutely needed
-+ * Do separate logs for acx100/111 to have human-readable rates */
-+ if (unlikely(acx_debug & (L_XFER|L_DATA))) {
-+ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc;
-+ if (IS_ACX111(adev))
-+ printk("tx: pkt (%s): len %d "
-+ "rate %04X%s status %u\n",
-+ acx_get_packet_type_string(le16_to_cpu(fc)), len,
-+ le16_to_cpu(txdesc->u.r2.rate111),
-+ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "",
-+ adev->status);
-+ else
-+ printk("tx: pkt (%s): len %d rate %03u%s status %u\n",
-+ acx_get_packet_type_string(fc), len,
-+ read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate)),
-+ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "",
-+ adev->status);
-+
-+ if (acx_debug & L_DATA) {
-+ printk("tx: 802.11 [%d]: ", len);
-+ acx_dump_bytes(hostdesc1->data, len);
-+ }
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_clean_txdesc
-+**
-+** This function resets the txdescs' status when the ACX100
-+** signals the TX done IRQ (txdescs have been processed), starting with
-+** the pool index of the descriptor which we would use next,
-+** in order to make sure that we can be as fast as possible
-+** in filling new txdescs.
-+** Everytime we get called we know where the next packet to be cleaned is.
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_txbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_txbuffer(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+ u8 Ctl_8;
-+
-+ /* no FN_ENTER here, we don't want that */
-+ /* no locks here, since it's entirely non-critical code */
-+ txdesc = adev->txdesc_start;
-+ if (unlikely(!txdesc)) return;
-+ printk("tx: desc->Ctl8's:");
-+ for (i = 0; i < TX_CNT; i++) {
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ printk(" %02X", Ctl_8);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ printk("\n");
-+}
-+#endif
-+
-+
-+static void
-+handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger)
-+{
-+ const char *err = "unknown error";
-+
-+ /* hmm, should we handle this as a mask
-+ * of *several* bits?
-+ * For now I think only caring about
-+ * individual bits is ok... */
-+ switch (error) {
-+ case 0x01:
-+ err = "no Tx due to error in other fragment";
-+ adev->wstats.discard.fragment++;
-+ break;
-+ case 0x02:
-+ err = "Tx aborted";
-+ adev->stats.tx_aborted_errors++;
-+ break;
-+ case 0x04:
-+ err = "Tx desc wrong parameters";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x08:
-+ err = "WEP key not found";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x10:
-+ err = "MSDU lifetime timeout? - try changing "
-+ "'iwconfig retry lifetime XXX'";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x20:
-+ err = "excessive Tx retries due to either distance "
-+ "too high or unable to Tx or Tx frame error - "
-+ "try changing 'iwconfig txpower XXX' or "
-+ "'sens'itivity or 'retry'";
-+ adev->wstats.discard.retries++;
-+ /* Tx error 0x20 also seems to occur on
-+ * overheating, so I'm not sure whether we
-+ * actually want to do aggressive radio recalibration,
-+ * since people maybe won't notice then that their hardware
-+ * is slowly getting cooked...
-+ * Or is it still a safe long distance from utter
-+ * radio non-functionality despite many radio recalibs
-+ * to final destructive overheating of the hardware?
-+ * In this case we really should do recalib here...
-+ * I guess the only way to find out is to do a
-+ * potentially fatal self-experiment :-\
-+ * Or maybe only recalib in case we're using Tx
-+ * rate auto (on errors switching to lower speed
-+ * --> less heat?) or 802.11 power save mode?
-+ *
-+ * ok, just do it. */
-+ if (++adev->retry_errors_msg_ratelimit % 4 == 0) {
-+ if (adev->retry_errors_msg_ratelimit <= 20) {
-+ printk("%s: several excessive Tx "
-+ "retry errors occurred, attempting "
-+ "to recalibrate radio. Radio "
-+ "drift might be caused by increasing "
-+ "card temperature, please check the card "
-+ "before it's too late!\n",
-+ adev->ndev->name);
-+ if (adev->retry_errors_msg_ratelimit == 20)
-+ printk("disabling above message\n");
-+ }
-+
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+ }
-+ break;
-+ case 0x40:
-+ err = "Tx buffer overflow";
-+ adev->stats.tx_fifo_errors++;
-+ break;
-+ case 0x80:
-+ err = "DMA error";
-+ adev->wstats.discard.misc++;
-+ break;
-+ }
-+ adev->stats.tx_errors++;
-+ if (adev->stats.tx_errors <= 20)
-+ printk("%s: tx error 0x%02X, buf %02u! (%s)\n",
-+ adev->ndev->name, error, finger, err);
-+ else
-+ printk("%s: tx error 0x%02X, buf %02u!\n",
-+ adev->ndev->name, error, finger);
-+}
-+
-+
-+unsigned int
-+acxmem_l_clean_txdesc(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ unsigned finger;
-+ int num_cleaned;
-+ u16 r111;
-+ u8 error, ack_failures, rts_failures, rts_ok, r100, Ctl_8;
-+ u32 acxmem;
-+ txdesc_t tmptxdesc;
-+
-+ FN_ENTER;
-+
-+ /*
-+ * Set up a template descriptor for re-initialization. The only
-+ * things that get set are Ctl_8 and the rate, and the rate defaults
-+ * to 1Mbps.
-+ */
-+ memset (&tmptxdesc, 0, sizeof (tmptxdesc));
-+ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
-+ tmptxdesc.u.r1.rate = 0x0a;
-+
-+ if (unlikely(acx_debug & L_DEBUG))
-+ log_txbuffer(adev);
-+
-+ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail);
-+
-+ /* We know first descr which is not free yet. We advance it as far
-+ ** as we see correct bits set in following descs (if next desc
-+ ** is NOT free, we shouldn't advance at all). We know that in
-+ ** front of tx_tail may be "holes" with isolated free descs.
-+ ** We will catch up when all intermediate descs will be freed also */
-+
-+ finger = adev->tx_tail;
-+ num_cleaned = 0;
-+ while (likely(finger != adev->tx_head)) {
-+ txdesc = get_txdesc(adev, finger);
-+
-+ /* If we allocated txdesc on tx path but then decided
-+ ** to NOT use it, then it will be left as a free "bubble"
-+ ** in the "allocated for tx" part of the ring.
-+ ** We may meet it on the next ring pass here. */
-+
-+ /* stop if not marked as "tx finished" and "host owned" */
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ if ((Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN)
-+ != DESC_CTL_ACXDONE_HOSTOWN) {
-+ if (unlikely(!num_cleaned)) { /* maybe remove completely */
-+ log(L_BUFT, "clean_txdesc: tail isn't free. "
-+ "tail:%d head:%d\n",
-+ adev->tx_tail, adev->tx_head);
-+ }
-+ break;
-+ }
-+
-+ /* remember desc values... */
-+ error = read_slavemem8 (adev, (u32) &(txdesc->error));
-+ ack_failures = read_slavemem8 (adev, (u32) &(txdesc->ack_failures));
-+ rts_failures = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures));
-+ rts_ok = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok));
-+ r100 = read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate));
-+ r111 = le16_to_cpu(read_slavemem16 (adev, (u32) &(txdesc->u.r2.rate111)));
-+
-+ /* need to check for certain error conditions before we
-+ * clean the descriptor: we still need valid descr data here */
-+ if (unlikely(0x30 & error)) {
-+ /* only send IWEVTXDROP in case of retry or lifetime exceeded;
-+ * all other errors mean we screwed up locally */
-+ union iwreq_data wrqu;
-+ wlan_hdr_t *hdr;
-+ txhostdesc_t *hostdesc;
-+
-+ hostdesc = get_txhostdesc(adev, txdesc);
-+ hdr = (wlan_hdr_t *)hostdesc->data;
-+ MAC_COPY(wrqu.addr.sa_data, hdr->a1);
-+ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL);
-+ }
-+
-+ /*
-+ * Free up the transmit data buffers
-+ */
-+ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (acxmem) {
-+ reclaim_acx_txbuf_space (adev, acxmem);
-+ }
-+
-+ /* ...and free the desc by clearing all the fields
-+ except the next pointer */
-+ copy_to_slavemem (adev,
-+ (u32) &(txdesc->HostMemPtr),
-+ (u8 *) &(tmptxdesc.HostMemPtr),
-+ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc)
-+ );
-+
-+ adev->tx_free++;
-+ num_cleaned++;
-+
-+ if ((adev->tx_free >= TX_START_QUEUE)
-+ && (adev->status == ACX_STATUS_4_ASSOCIATED)
-+ && (acx_queue_stopped(adev->ndev))
-+ ) {
-+ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n",
-+ adev->tx_free);
-+ acx_wake_queue(adev->ndev, NULL);
-+ }
-+
-+ /* do error checking, rate handling and logging
-+ * AFTER having done the work, it's faster */
-+
-+ /* do rate handling */
-+ if (adev->rate_auto) {
-+ struct client *clt = get_txc(adev, txdesc);
-+ if (clt) {
-+ u16 cur = get_txr(adev, txdesc);
-+ if (clt->rate_cur == cur) {
-+ acx_l_handle_txrate_auto(adev, clt,
-+ cur, /* intended rate */
-+ r100, r111, /* actually used rate */
-+ (error & 0x30), /* was there an error? */
-+ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free);
-+ }
-+ }
-+ }
-+
-+ if (unlikely(error))
-+ handle_tx_error(adev, error, finger);
-+
-+ if (IS_ACX111(adev))
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n",
-+ finger, ack_failures, rts_failures, rts_ok, r111);
-+ else
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n",
-+ finger, ack_failures, rts_failures, rts_ok, r100);
-+
-+ /* update pointer for descr to be cleaned next */
-+ finger = (finger + 1) % TX_CNT;
-+ }
-+
-+ /* remember last position */
-+ adev->tx_tail = finger;
-+/* end: */
-+ FN_EXIT1(num_cleaned);
-+ return num_cleaned;
-+}
-+
-+/* clean *all* Tx descriptors, and regardless of their previous state.
-+ * Used for brute-force reset handling. */
-+void
-+acxmem_l_clean_txdesc_emergency(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+ u32 acxmem;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc = get_txdesc(adev, i);
-+
-+ /* free it */
-+ write_slavemem8 (adev, (u32) &(txdesc->ack_failures), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->error), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN);
-+
-+ /*
-+ * Clean up the memory allocated on the ACX for this transmit descriptor.
-+ */
-+ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (acxmem) {
-+ reclaim_acx_txbuf_space (adev, acxmem);
-+ }
-+
-+ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), 0);
-+ }
-+
-+ adev->tx_free = TX_CNT;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_create_tx_host_desc_queue
-+*/
-+
-+static void*
-+allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg)
-+{
-+ void *ptr;
-+ ptr = kmalloc (size, GFP_KERNEL);
-+ /*
-+ * The ACX can't use the physical address, so we'll have to fake it
-+ * later and it might be handy to have the virtual address.
-+ */
-+ *phy = (dma_addr_t) NULL;
-+
-+ if (ptr) {
-+ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n",
-+ msg, (int)size, ptr, (unsigned long long)*phy);
-+ memset(ptr, 0, size);
-+ return ptr;
-+ }
-+ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n",
-+ msg, (int)size);
-+ return NULL;
-+}
-+
-+
-+/*
-+ * In the generic slave memory access mode, most of the stuff in
-+ * the txhostdesc_t is unused. It's only here because the rest of
-+ * the ACX driver expects it to be since the PCI version uses indirect
-+ * host memory organization with DMA. Since we're not using DMA the
-+ * only use we have for the host descriptors is to store the packets
-+ * on the way out.
-+ */
-+static int
-+acxmem_s_create_tx_host_desc_queue(acx_device_t *adev)
-+{
-+ txhostdesc_t *hostdesc;
-+ u8 *txbuf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate TX buffer */
-+ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS;
-+
-+ adev->txbuf_start = allocate(adev, adev->txbuf_area_size,
-+ &adev->txbuf_startphy, "txbuf_start");
-+ if (!adev->txbuf_start)
-+ goto fail;
-+
-+ /* allocate the TX host descriptor queue pool */
-+ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc);
-+
-+ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size,
-+ &adev->txhostdesc_startphy, "txhostdesc_start");
-+ if (!adev->txhostdesc_start)
-+ goto fail;
-+
-+ /* check for proper alignment of TX host descriptor pool */
-+ if ((long) adev->txhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ hostdesc = adev->txhostdesc_start;
-+ txbuf = adev->txbuf_start;
-+
-+#if 0
-+/* Each tx buffer is accessed by hardware via
-+** txdesc -> txhostdesc(s) -> txbuffer(s).
-+** We use only one txhostdesc per txdesc, but it looks like
-+** acx111 is buggy: it accesses second txhostdesc
-+** (via hostdesc.desc_phy_next field) even if
-+** txdesc->length == hostdesc->length and thus
-+** entire packet was placed into first txhostdesc.
-+** Due to this bug acx111 hangs unless second txhostdesc
-+** has le16_to_cpu(hostdesc.length) = 3 (or larger)
-+** Storing NULL into hostdesc.desc_phy_next
-+** doesn't seem to help.
-+**
-+** Update: although it worked on Xterasys XN-2522g
-+** with len=3 trick, WG311v2 is even more bogus, doesn't work.
-+** Keeping this code (#ifdef'ed out) for documentational purposes.
-+*/
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ hostdesc_phy += sizeof(*hostdesc);
-+ if (!(i & 1)) {
-+ hostdesc->data_phy = cpu2acx(txbuf_phy);
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
-+ /* hostdesc->length = ... */
-+ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
-+ hostdesc->pNext = ptr2acx(NULL);
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ hostdesc->data = txbuf;
-+
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ } else {
-+ /* hostdesc->data_phy = ... */
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ /* hostdesc->Ctl_16 = ... */
-+ hostdesc->length = cpu_to_le16(3); /* bug workaround */
-+ /* hostdesc->desc_phy_next = ... */
-+ /* hostdesc->pNext = ... */
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ /* hostdesc->data = ... */
-+ }
-+ hostdesc++;
-+ }
-+#endif
-+/* We initialize two hostdescs so that they point to adjacent
-+** memory areas. Thus txbuf is really just a contiguous memory area */
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ /* ->data is a non-hardware field: */
-+ hostdesc->data = txbuf;
-+
-+ if (!(i & 1)) {
-+ txbuf += WLAN_HDR_A3_LEN;
-+ } else {
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
-+ }
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_tx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_create_rx_host_desc_queue
-+*/
-+/* the whole size of a data buffer (header plus data body)
-+ * plus 32 bytes safety offset at the end */
-+#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32)
-+
-+static int
-+acxmem_s_create_rx_host_desc_queue(acx_device_t *adev)
-+{
-+ rxhostdesc_t *hostdesc;
-+ rxbuffer_t *rxbuf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate the RX host descriptor queue pool */
-+ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc);
-+
-+ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size,
-+ &adev->rxhostdesc_startphy, "rxhostdesc_start");
-+ if (!adev->rxhostdesc_start)
-+ goto fail;
-+
-+ /* check for proper alignment of RX host descriptor pool */
-+ if ((long) adev->rxhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ /* allocate Rx buffer pool which will be used by the acx
-+ * to store the whole content of the received frames in it */
-+ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE;
-+
-+ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size,
-+ &adev->rxbuf_startphy, "rxbuf_start");
-+ if (!adev->rxbuf_start)
-+ goto fail;
-+
-+ rxbuf = adev->rxbuf_start;
-+ hostdesc = adev->rxhostdesc_start;
-+
-+ /* don't make any popular C programming pointer arithmetic mistakes
-+ * here, otherwise I'll kill you...
-+ * (and don't dare asking me why I'm warning you about that...) */
-+ for (i = 0; i < RX_CNT; i++) {
-+ hostdesc->data = rxbuf;
-+ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE);
-+ rxbuf++;
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_rx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_create_hostdesc_queues
-+*/
-+int
-+acxmem_s_create_hostdesc_queues(acx_device_t *adev)
-+{
-+ int result;
-+ result = acxmem_s_create_tx_host_desc_queue(adev);
-+ if (OK != result) return result;
-+ result = acxmem_s_create_rx_host_desc_queue(adev);
-+ return result;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_tx_desc_queue
-+*/
-+static void
-+acxmem_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start)
-+{
-+ txdesc_t *txdesc;
-+ u32 clr;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ if (IS_ACX100(adev))
-+ adev->txdesc_size = sizeof(*txdesc);
-+ else
-+ /* the acx111 txdesc is 4 bytes larger */
-+ adev->txdesc_size = sizeof(*txdesc) + 4;
-+
-+ /*
-+ * This refers to an ACX address, not one of ours
-+ */
-+ adev->txdesc_start = (txdesc_t *) tx_queue_start;
-+
-+ log(L_DEBUG, "adev->txdesc_start=%p\n",
-+ adev->txdesc_start);
-+
-+ adev->tx_free = TX_CNT;
-+ /* done by memset: adev->tx_head = 0; */
-+ /* done by memset: adev->tx_tail = 0; */
-+ txdesc = adev->txdesc_start;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111 has a preinitialized Tx buffer! */
-+ /* loop over whole send pool */
-+ /* FIXME: do we have to do the hostmemptr stuff here?? */
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
-+ /* reserve two (hdr desc and payload desc) */
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ } else {
-+ /* ACX100 Tx buffer needs to be initialized by us */
-+ /* clear whole send pool. sizeof is safe here (we are acx100) */
-+
-+ /*
-+ * adev->txdesc_start refers to device memory, so we can't write
-+ * directly to it.
-+ */
-+ clr = (u32) adev->txdesc_start;
-+ while (clr < (u32) adev->txdesc_start + (TX_CNT * sizeof(*txdesc))) {
-+ write_slavemem32 (adev, clr, 0);
-+ clr += 4;
-+ }
-+
-+ /* loop over whole send pool */
-+ for (i = 0; i < TX_CNT; i++) {
-+ log(L_DEBUG, "configure card tx descriptor: 0x%p, "
-+ "size: 0x%X\n", txdesc, adev->txdesc_size);
-+
-+ /* initialise ctl */
-+ /*
-+ * No auto DMA here
-+ */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8),
-+ (u8) (DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG));
-+ /* done by memset(0): txdesc->Ctl2_8 = 0; */
-+
-+ /* point to next txdesc */
-+ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
-+ (u32) cpu_to_le32 ((u8 *) txdesc + adev->txdesc_size));
-+
-+ /* go to the next one */
-+ /* ++ is safe here (we are acx100) */
-+ txdesc++;
-+ }
-+ /* go back to the last one */
-+ txdesc--;
-+ /* and point to the first making it a ring buffer */
-+ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
-+ (u32) cpu_to_le32 (tx_queue_start));
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_rx_desc_queue
-+*/
-+static void
-+acxmem_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start)
-+{
-+ rxdesc_t *rxdesc;
-+ u32 mem_offs;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* done by memset: adev->rx_tail = 0; */
-+
-+ /* ACX111 doesn't need any further config: preconfigures itself.
-+ * Simply print ring buffer for debugging */
-+ if (IS_ACX111(adev)) {
-+ /* rxdesc_start already set here */
-+
-+ adev->rxdesc_start = (rxdesc_t *) rx_queue_start;
-+
-+ rxdesc = adev->rxdesc_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc);
-+ rxdesc = adev->rxdesc_start = (rxdesc_t *)
-+ acx2cpu(rxdesc->pNextDesc);
-+ }
-+ } else {
-+ /* we didn't pre-calculate rxdesc_start in case of ACX100 */
-+ /* rxdesc_start should be right AFTER Tx pool */
-+ adev->rxdesc_start = (rxdesc_t *)
-+ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t)));
-+ /* NB: sizeof(txdesc_t) above is valid because we know
-+ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere!
-+ ** acx111's txdesc is larger! */
-+
-+ mem_offs = (u32) adev->rxdesc_start;
-+ while (mem_offs < (u32) adev->rxdesc_start + (RX_CNT * sizeof (*rxdesc))) {
-+ write_slavemem32 (adev, mem_offs, 0);
-+ mem_offs += 4;
-+ }
-+
-+ /* loop over whole receive pool */
-+ rxdesc = adev->rxdesc_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc);
-+ /* point to next rxdesc */
-+ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
-+ (u32) cpu_to_le32 ((u8 *) rxdesc + sizeof(*rxdesc)));
-+ /* go to the next one */
-+ rxdesc++;
-+ }
-+ /* go to the last one */
-+ rxdesc--;
-+
-+ /* and point to the first making it a ring buffer */
-+ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
-+ (u32) cpu_to_le32 (rx_queue_start));
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_desc_queues
-+*/
-+void
-+acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start)
-+{
-+ u32 *p;
-+ int i;
-+
-+ acxmem_create_tx_desc_queue(adev, tx_queue_start);
-+ acxmem_create_rx_desc_queue(adev, rx_queue_start);
-+ p = (u32 *) adev->acx_queue_indicator;
-+ for (i = 0; i < 4; i++) {
-+ write_slavemem32 (adev, (u32) p, 0);
-+ p++;
-+ }
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_proc_diag_output
-+*/
-+char*
-+acxmem_s_proc_diag_output(char *p, acx_device_t *adev)
-+{
-+ const char *rtl, *thd, *ttl;
-+ txdesc_t *txdesc;
-+ u8 Ctl_8;
-+ rxdesc_t *rxdesc;
-+ int i;
-+ u32 tmp;
-+ txdesc_t txd;
-+ u8 buf[0x200];
-+ int j, k;
-+
-+ FN_ENTER;
-+
-+#if DUMP_MEM_DURING_DIAG > 0
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("dump finished");
-+#endif
-+
-+ p += sprintf(p, "** Rx buf **\n");
-+ rxdesc = adev->rxdesc_start;
-+ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
-+ rtl = (i == adev->rx_tail) ? " [tail]" : "";
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+ if (Ctl_8 & DESC_CTL_HOSTOWN)
-+ p += sprintf(p, "%02u (%02x) FULL%s\n", i, Ctl_8, rtl);
-+ else
-+ p += sprintf(p, "%02u (%02x) empty%s\n", i, Ctl_8, rtl);
-+ rxdesc++;
-+ }
-+ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free,
-+ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running");
-+
-+ p += sprintf(p, "** Tx buf %d blocks total, %d available, free list head %04x\n",
-+ adev->acx_txbuf_numblocks, adev->acx_txbuf_blocks_free, adev->acx_txbuf_free);
-+ txdesc = adev->txdesc_start;
-+ if (txdesc) {
-+ for (i = 0; i < TX_CNT; i++) {
-+ thd = (i == adev->tx_head) ? " [head]" : "";
-+ ttl = (i == adev->tx_tail) ? " [tail]" : "";
-+ copy_from_slavemem (adev, (u8 *) &txd, (u32) txdesc, sizeof (txd));
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ if (Ctl_8 & DESC_CTL_ACXDONE)
-+ p += sprintf(p, "%02u ready to free (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ else if (Ctl_8 & DESC_CTL_HOSTOWN)
-+ p += sprintf(p, "%02u available (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ else
-+ p += sprintf(p, "%02u busy (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ tmp = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (tmp) {
-+ p += sprintf (p, " %04x", tmp);
-+ while ((tmp = read_slavemem32 (adev, (u32) tmp)) != 0x02000000) {
-+ tmp <<= 5;
-+ p += sprintf (p, " %04x", tmp);
-+ }
-+ }
-+ p += sprintf (p, "\n");
-+ p += sprintf (p, " %04x: %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %02x %02x %02x %02x\n"
-+ "%02x %02x %02x %02x %04x\n",
-+ (u32) txdesc,
-+ txd.pNextDesc.v, txd.HostMemPtr.v, txd.AcxMemPtr.v, txd.tx_time,
-+ txd.total_length, txd.Reserved,
-+ txd.dummy[0], txd.dummy[1], txd.dummy[2], txd.dummy[3],
-+ txd.Ctl_8, txd.Ctl2_8, txd.error, txd.ack_failures,
-+ txd.u.rts.rts_failures, txd.u.rts.rts_ok, txd.u.r1.rate, txd.u.r1.queue_ctrl,
-+ txd.queue_info
-+ );
-+ if (txd.AcxMemPtr.v) {
-+ copy_from_slavemem (adev, buf, txd.AcxMemPtr.v, sizeof (buf));
-+ for (j = 0; (j < txd.total_length) && (j<(sizeof(buf)-4)); j+=16) {
-+ p += sprintf (p, " ");
-+ for (k = 0; (k < 16) && (j+k < txd.total_length); k++) {
-+ p += sprintf (p, " %02x", buf[j+k+4]);
-+ }
-+ p += sprintf (p, "\n");
-+ }
-+ }
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ }
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** Generic slave data **\n"
-+ "irq_mask 0x%04x irq_status 0x%04x irq on acx 0x%04x\n"
-+ "txbuf_start 0x%p, txbuf_area_size %u\n"
-+ "txdesc_size %u, txdesc_start 0x%p\n"
-+ "txhostdesc_start 0x%p, txhostdesc_area_size %u\n"
-+ "txbuf start 0x%04x, txbuf size %d\n"
-+ "rxdesc_start 0x%p\n"
-+ "rxhostdesc_start 0x%p, rxhostdesc_area_size %u\n"
-+ "rxbuf_start 0x%p, rxbuf_area_size %u\n",
-+ adev->irq_mask, adev->irq_status, read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES),
-+ adev->txbuf_start, adev->txbuf_area_size,
-+ adev->txdesc_size, adev->txdesc_start,
-+ adev->txhostdesc_start, adev->txhostdesc_area_size,
-+ adev->acx_txbuf_start, adev->acx_txbuf_numblocks * adev->memblocksize,
-+ adev->rxdesc_start,
-+ adev->rxhostdesc_start, adev->rxhostdesc_area_size,
-+ adev->rxbuf_start, adev->rxbuf_area_size);
-+ FN_EXIT0;
-+ return p;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxmem_proc_eeprom_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < 0x400; i++) {
-+ acxmem_read_eeprom_byte(adev, i, p++);
-+ }
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void
-+acxmem_set_interrupt_mask(acx_device_t *adev)
-+{
-+ if (IS_ACX111(adev)) {
-+ adev->irq_mask = (u16) ~(0
-+ | HOST_INT_RX_DATA
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ /* | HOST_INT_RX_COMPLETE */
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ | HOST_INT_IV_ICV_FAILURE
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ | HOST_INT_OVERFLOW
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ | HOST_INT_FCS_THRESHOLD
-+ | HOST_INT_UNKNOWN
-+ );
-+ /* Or else acx100 won't signal cmd completion, right? */
-+ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */
-+ } else {
-+ adev->irq_mask = (u16) ~(0
-+ | HOST_INT_RX_DATA
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ /* | HOST_INT_RX_COMPLETE */
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ /* | HOST_INT_IV_ICV_FAILURE */
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ /* | HOST_INT_OVERFLOW */
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ /* | HOST_INT_FCS_THRESHOLD */
-+ /* | HOST_INT_BEACON_MISSED */
-+ );
-+ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */
-+ }
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ struct acx111_ie_tx_level tx_level;
-+
-+ /* since it can be assumed that at least the Maxim radio has a
-+ * maximum power output of 20dBm and since it also can be
-+ * assumed that these values drive the DAC responsible for
-+ * setting the linear Tx level, I'd guess that these values
-+ * should be the corresponding linear values for a dBm value,
-+ * in other words: calculate the values from that formula:
-+ * Y [dBm] = 10 * log (X [mW])
-+ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm)
-+ * and you're done...
-+ * Hopefully that's ok, but you never know if we're actually
-+ * right... (especially since Windows XP doesn't seem to show
-+ * actual Tx dBm values :-P) */
-+
-+ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the
-+ * values are EXACTLY mW!!! Not sure about RFMD and others,
-+ * though... */
-+ static const u8 dbm2val_maxim[21] = {
-+ 63, 63, 63, 62,
-+ 61, 61, 60, 60,
-+ 59, 58, 57, 55,
-+ 53, 50, 47, 43,
-+ 38, 31, 23, 13,
-+ 0
-+ };
-+ static const u8 dbm2val_rfmd[21] = {
-+ 0, 0, 0, 1,
-+ 2, 2, 3, 3,
-+ 4, 5, 6, 8,
-+ 10, 13, 16, 20,
-+ 25, 32, 41, 50,
-+ 63
-+ };
-+ const u8 *table;
-+
-+ switch (adev->radio_type) {
-+ case RADIO_MAXIM_0D:
-+ table = &dbm2val_maxim[0];
-+ break;
-+ case RADIO_RFMD_11:
-+ case RADIO_RALINK_15:
-+ table = &dbm2val_rfmd[0];
-+ break;
-+ default:
-+ printk("%s: unknown/unsupported radio type, "
-+ "cannot modify tx power level yet!\n",
-+ adev->ndev->name);
-+ return NOT_OK;
-+ }
-+ /*
-+ * The hx4700 EEPROM, at least, only supports 1 power setting. The configure
-+ * routine matches the PA bias with the gain, so just use its default value.
-+ * The values are: 0x2b for the gain and 0x03 for the PA bias. The firmware
-+ * writes the gain level to the Tx gain control DAC and the PA bias to the Maxim
-+ * radio's PA bias register. The firmware limits itself to 0 - 64 when writing to the
-+ * gain control DAC.
-+ *
-+ * Physically between the ACX and the radio, higher Tx gain control DAC values result
-+ * in less power output; 0 volts to the Maxim radio results in the highest output power
-+ * level, which I'm assuming matches up with 0 in the Tx Gain DAC register.
-+ *
-+ * Although there is only the 1 power setting, one of the radio firmware functions adjusts
-+ * the transmit power level up and down. That function is called by the ACX FIQ handler
-+ * under certain conditions.
-+ */
-+ tx_level.level = 1;
-+ //return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
-+
-+ printk("%s: changing radio power level to %u dBm (%u)\n",
-+ adev->ndev->name, level_dbm, table[level_dbm]);
-+ acxmem_s_write_phy_reg(adev, 0x11, table[level_dbm]);
-+
-+ return 0;
-+}
-+
-+void acxmem_e_release(struct device *dev) {
-+}
-+
-+/***********************************************************************
-+** acx_cs part
-+**
-+** called by pcmcia card service
-+*/
-+
-+/*
-+ The event() function is this driver's Card Services event handler.
-+ It will be called by Card Services when an appropriate card status
-+ event is received. The config() and release() entry points are
-+ used to configure or release a socket, in response to card
-+ insertion and ejection events. They are invoked from the acx_cs
-+ event handler.
-+*/
-+
-+static int acx_cs_config(struct pcmcia_device *link);
-+static void acx_cs_release(struct pcmcia_device *link);
-+
-+/*
-+ The attach() and detach() entry points are used to create and destroy
-+ "instances" of the driver, where each instance represents everything
-+ needed to manage one actual PCMCIA card.
-+*/
-+
-+static void acx_cs_detach(struct pcmcia_device *p_dev);
-+
-+/*
-+ You'll also need to prototype all the functions that will actually
-+ be used to talk to your device. See 'pcmem_cs' for a good example
-+ of a fully self-sufficient driver; the other drivers rely more or
-+ less on other parts of the kernel.
-+*/
-+
-+/*
-+ A linked list of "instances" of the acxnet device. Each actual
-+ PCMCIA card corresponds to one device instance, and is described
-+ by one struct pcmcia_device structure (defined in ds.h).
-+
-+ You may not want to use a linked list for this -- for example, the
-+ memory card driver uses an array of struct pcmcia_device pointers, where minor
-+ device numbers are used to derive the corresponding array index.
-+*/
-+
-+/*
-+ A driver needs to provide a dev_node_t structure for each device
-+ on a card. In some cases, there is only one device per card (for
-+ example, ethernet cards, modems). In other cases, there may be
-+ many actual or logical devices (SCSI adapters, memory cards with
-+ multiple partitions). The dev_node_t structures need to be kept
-+ in a linked list starting at the 'dev' field of a struct pcmcia_device
-+ structure. We allocate them in the card's private data structure,
-+ because they generally shouldn't be allocated dynamically.
-+
-+ In this case, we also provide a flag to indicate if a device is
-+ "stopped" due to a power management event, or card ejection. The
-+ device IO routines can use a flag like this to throttle IO to a
-+ card that is not ready to accept it.
-+*/
-+
-+
-+/*======================================================================
-+
-+ acx_attach() creates an "instance" of the driver, allocating
-+ local data structures for one device. The device is registered
-+ with Card Services.
-+
-+ The dev_link structure is initialized, but we don't actually
-+ configure the card at this point -- we wait until we receive a
-+ card insertion event.
-+
-+ ======================================================================*/
-+
-+static int acx_cs_probe(struct pcmcia_device *link)
-+{
-+ local_info_t *local;
-+ struct net_device *ndev;
-+
-+ DEBUG(0, "acx_attach()\n");
-+
-+ ndev = alloc_netdev(sizeof(acx_device_t), "wlan%d", dummy_netdev_init);
-+ if (!ndev) {
-+ printk("acx: no memory for netdevice struct\n");
-+ return -ENOMEM;
-+ }
-+
-+ /* Interrupt setup */
-+ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
-+ link->irq.IRQInfo1 = IRQ_LEVEL_ID;
-+ link->irq.Handler = acxmem_i_interrupt;
-+ link->irq.Instance = ndev;
-+
-+ /*
-+ General socket configuration defaults can go here. In this
-+ client, we assume very little, and rely on the CIS for almost
-+ everything. In most clients, many details (i.e., number, sizes,
-+ and attributes of IO windows) are fixed by the nature of the
-+ device, and can be hard-wired here.
-+ */
-+ link->conf.Attributes = CONF_ENABLE_IRQ;
-+ link->conf.IntType = INT_MEMORY_AND_IO;
-+ link->conf.Present = PRESENT_OPTION | PRESENT_COPY;
-+
-+ /* Allocate space for private device-specific data */
-+ local = kzalloc(sizeof(local_info_t), GFP_KERNEL);
-+ if (!local) {
-+ printk(KERN_ERR "acx_cs: no memory for new device\n");
-+ return -ENOMEM;
-+ }
-+ local->ndev = ndev;
-+
-+ link->priv = local;
-+
-+ return acx_cs_config(link);
-+} /* acx_attach */
-+
-+/*======================================================================
-+
-+ This deletes a driver "instance". The device is de-registered
-+ with Card Services. If it has been released, all local data
-+ structures are freed. Otherwise, the structures will be freed
-+ when the device is released.
-+
-+ ======================================================================*/
-+
-+static void acx_cs_detach(struct pcmcia_device *link)
-+{
-+ DEBUG(0, "acx_detach(0x%p)\n", link);
-+
-+
-+ if ( ((local_info_t*)link->priv)->ndev ) {
-+ acxmem_e_close( ((local_info_t*)link->priv)->ndev );
-+ }
-+
-+ acx_cs_release(link);
-+
-+ ((local_info_t*)link->priv)->ndev = NULL;
-+
-+ kfree(link->priv);
-+} /* acx_detach */
-+
-+/*======================================================================
-+
-+ acx_config() is scheduled to run after a CARD_INSERTION event
-+ is received, to configure the PCMCIA socket, and to make the
-+ device available to the system.
-+
-+ ======================================================================*/
-+
-+#define CS_CHECK(fn, ret) \
-+do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-+
-+static int acx_cs_config(struct pcmcia_device *link)
-+{
-+ tuple_t tuple;
-+ cisparse_t parse;
-+ local_info_t *local = link->priv;
-+ int last_fn, last_ret;
-+ u_char buf[64];
-+ win_req_t req;
-+ memreq_t map;
-+// int i;
-+// acx_device_t *adev;
-+
-+// adev = (acx_device_t *)link->priv;
-+
-+ DEBUG(0, "acx_cs_config(0x%p)\n", link);
-+
-+ /*
-+ In this loop, we scan the CIS for configuration table entries,
-+ each of which describes a valid card configuration, including
-+ voltage, IO window, memory window, and interrupt settings.
-+
-+ We make no assumptions about the card to be configured: we use
-+ just the information available in the CIS. In an ideal world,
-+ this would work for any PCMCIA card, but it requires a complete
-+ and accurate CIS. In practice, a driver usually "knows" most of
-+ these things without consulting the CIS, and most client drivers
-+ will only use the CIS to fill in implementation-defined details.
-+ */
-+ tuple.Attributes = 0;
-+ tuple.TupleData = (cisdata_t *)buf;
-+ tuple.TupleDataMax = sizeof(buf);
-+ tuple.TupleOffset = 0;
-+ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-+
-+ /* don't trust the CIS on this; Linksys got it wrong */
-+ //link->conf.Present = 0x63;
-+
-+ CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
-+ while (1) {
-+ cistpl_cftable_entry_t dflt = { 0 };
-+ cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
-+ if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
-+ pcmcia_parse_tuple(link, &tuple, &parse) != 0)
-+ goto next_entry;
-+
-+ if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;
-+ if (cfg->index == 0) goto next_entry;
-+ link->conf.ConfigIndex = cfg->index;
-+
-+ /* Does this card need audio output? */
-+ if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
-+ link->conf.Attributes |= CONF_ENABLE_SPKR;
-+ link->conf.Status = CCSR_AUDIO_ENA;
-+ }
-+
-+ /* Use power settings for Vcc and Vpp if present */
-+ /* Note that the CIS values need to be rescaled */
-+ if (cfg->vpp1.present & (1<<CISTPL_POWER_VNOM))
-+ link->conf.Vpp =
-+ cfg->vpp1.param[CISTPL_POWER_VNOM]/10000;
-+ else if (dflt.vpp1.present & (1<<CISTPL_POWER_VNOM))
-+ link->conf.Vpp =
-+ dflt.vpp1.param[CISTPL_POWER_VNOM]/10000;
-+
-+ /* Do we need to allocate an interrupt? */
-+ if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
-+ link->conf.Attributes |= CONF_ENABLE_IRQ;
-+ if ((cfg->mem.nwin > 0) || (dflt.mem.nwin > 0)) {
-+ cistpl_mem_t *mem =
-+ (cfg->mem.nwin) ? &cfg->mem : &dflt.mem;
-+// req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_AM|WIN_ENABLE|WIN_USE_WAIT;
-+ req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE|WIN_USE_WAIT;
-+ req.Base = mem->win[0].host_addr;
-+ req.Size = mem->win[0].len;
-+ req.Size=0x1000;
-+ req.AccessSpeed = 0;
-+ if (pcmcia_request_window(&link, &req, &link->win) != 0)
-+ goto next_entry;
-+ map.Page = 0; map.CardOffset = mem->win[0].card_addr;
-+ if (pcmcia_map_mem_page(link->win, &map) != 0)
-+ goto next_entry;
-+ else
-+ printk(KERN_INFO "MEMORY WINDOW FOUND!!!\n");
-+ }
-+ /* If we got this far, we're cool! */
-+ break;
-+
-+ next_entry:
-+ CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
-+ }
-+
-+ if (link->conf.Attributes & CONF_ENABLE_IRQ) {
-+ printk(KERN_INFO "requesting Irq...\n");
-+ CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-+ }
-+
-+ /*
-+ This actually configures the PCMCIA socket -- setting up
-+ the I/O windows and the interrupt mapping, and putting the
-+ card and host interface into "Memory and IO" mode.
-+ */
-+ CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
-+ DEBUG(0,"RequestConfiguration OK\n");
-+
-+
-+ memwin.Base=req.Base;
-+ memwin.Size=req.Size;
-+
-+ acx_init_netdev(local->ndev, &link->dev, memwin.Base, memwin.Size, link->irq.AssignedIRQ);
-+
-+#if 1
-+ /*
-+ At this point, the dev_node_t structure(s) need to be
-+ initialized and arranged in a linked list at link->dev_node.
-+ */
-+ strcpy(local->node.dev_name, local->ndev->name );
-+ local->node.major = local->node.minor = 0;
-+ link->dev_node = &local->node;
-+
-+ /* Finally, report what we've done */
-+ printk(KERN_INFO "%s: index 0x%02x: ",
-+ local->ndev->name, link->conf.ConfigIndex);
-+#endif
-+ if (link->conf.Attributes & CONF_ENABLE_IRQ)
-+ printk("irq %d", link->irq.AssignedIRQ);
-+ if (link->io.NumPorts1)
-+ printk(", io 0x%04x-0x%04x", link->io.BasePort1,
-+ link->io.BasePort1+link->io.NumPorts1-1);
-+ if (link->io.NumPorts2)
-+ printk(" & 0x%04x-0x%04x", link->io.BasePort2,
-+ link->io.BasePort2+link->io.NumPorts2-1);
-+ if (link->win)
-+ printk(", mem 0x%06lx-0x%06lx\n", req.Base,
-+ req.Base+req.Size-1);
-+ return 0;
-+
-+ cs_failed:
-+ cs_error(link, last_fn, last_ret);
-+ acx_cs_release(link);
-+ return -ENODEV;
-+} /* acx_config */
-+
-+/*======================================================================
-+
-+ After a card is removed, acx_release() will unregister the
-+ device, and release the PCMCIA configuration. If the device is
-+ still open, this will be postponed until it is closed.
-+
-+ ======================================================================*/
-+
-+static void acx_cs_release(struct pcmcia_device *link)
-+{
-+ DEBUG(0, "acx_release(0x%p)\n", link);
-+ acxmem_e_remove(link);
-+ pcmcia_disable_device(link);
-+}
-+
-+static int acx_cs_suspend(struct pcmcia_device *link)
-+{
-+ local_info_t *local = link->priv;
-+
-+ pm_message_t state;
-+ acxmem_e_suspend ( local->ndev, state);
-+ /* Already done in suspend
-+ * netif_device_detach(local->ndev); */
-+
-+ return 0;
-+}
-+
-+static int acx_cs_resume(struct pcmcia_device *link)
-+{
-+ local_info_t *local = link->priv;
-+
-+ FN_ENTER;
-+ resume_ndev = local->ndev;
-+
-+ schedule_work( &fw_resume_work );
-+
-+ /* Already done in suspend
-+ if (link->open) {
-+ // do we need reset for ACX, if so what function nane is ?
-+ //reset_acx_card(local->eth_dev);
-+ netif_device_attach(local->ndev);
-+ } */
-+
-+ FN_EXIT0;
-+ return 0;
-+}
-+
-+static struct pcmcia_device_id acx_ids[] = {
-+ PCMCIA_DEVICE_MANF_CARD(0x0097, 0x8402),
-+ PCMCIA_DEVICE_MANF_CARD(0x0250, 0xb001),
-+ PCMCIA_DEVICE_NULL,
-+};
-+MODULE_DEVICE_TABLE(pcmcia, acx_ids);
-+
-+static struct pcmcia_driver acx_driver = {
-+ .owner = THIS_MODULE,
-+ .drv = {
-+ .name = "acx_cs",
-+ },
-+ .probe = acx_cs_probe,
-+ .remove = acx_cs_detach,
-+ .id_table = acx_ids,
-+ .suspend = acx_cs_suspend,
-+ .resume = acx_cs_resume,
-+};
-+
-+int acx_cs_init(void)
-+{
-+ /* return success if at least one succeeded */
-+ DEBUG(0, "acxcs_init()\n");
-+ return pcmcia_register_driver(&acx_driver);
-+}
-+
-+void acx_cs_cleanup(void)
-+{
-+ pcmcia_unregister_driver(&acx_driver);
-+}
-+
-+/*
-+ This program is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU General Public License
-+ as published by the Free Software Foundation; either version 2
-+ of the License, or (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ In addition:
-+
-+ Redistribution and use in source and binary forms, with or without
-+ modification, are permitted provided that the following conditions
-+ are met:
-+
-+ 1. Redistributions of source code must retain the above copyright
-+ notice, this list of conditions and the following disclaimer.
-+ 2. Redistributions in binary form must reproduce the above copyright
-+ notice, this list of conditions and the following disclaimer in the
-+ documentation and/or other materials provided with the distribution.
-+ 3. The name of the author may not be used to endorse or promote
-+ products derived from this software without specific prior written
-+ permission.
-+
-+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ POSSIBILITY OF SUCH DAMAGE.
-+*/
-+
-+MODULE_DESCRIPTION( "ACX Cardbus Driver" );
-+MODULE_LICENSE( "GPL" );
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/htcsable_acx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/htcsable_acx.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,118 @@
-+/*
-+ * WLAN (TI TNETW1100B) support in the HTC Sable
-+ *
-+ * Copyright (c) 2006 SDG Systems, LLC
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * 28-March-2006 Todd Blumer <todd@sdgsystems.com>
-+ */
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+
-+#include <asm/hardware.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <linux/mfd/asic3_base.h>
-+#include <asm/arch/htcsable-gpio.h>
-+#include <asm/arch/htcsable-asic.h>
-+#include <asm/io.h>
-+
-+#include "acx_hw.h"
-+
-+#define WLAN_BASE PXA_CS2_PHYS
-+
-+/*
-+off: b15 c8 d3
-+on: d3 c8 b5 b5-
-+*/
-+
-+#define GPIO_NR_HTCSABLE_ACX111 111
-+
-+static int
-+htcsable_wlan_stop( void );
-+
-+static int
-+htcsable_wlan_start( void )
-+{
-+ printk( "htcsable_wlan_start\n" );
-+
-+ /*asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_RESET, 0);*/
-+ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_PWR_3, 1<<GPIOC_ACX_PWR_3); /* related to acx */
-+ SET_HTCSABLE_GPIO(ACX111, 1);
-+ asic3_set_gpio_out_b(&htcsable_asic3.dev, 1<<GPIOB_ACX_PWR_1, 1<<GPIOB_ACX_PWR_1);
-+ asic3_set_gpio_out_d(&htcsable_asic3.dev, 1<<GPIOD_ACX_PWR_2, 1<<GPIOD_ACX_PWR_2);
-+ mdelay(260);
-+ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_RESET, 1<<GPIOC_ACX_RESET);
-+
-+ return 0;
-+}
-+
-+static int
-+htcsable_wlan_stop( void )
-+{
-+ printk( "htcsable_wlan_stop\n" );
-+ asic3_set_gpio_out_b(&htcsable_asic3.dev, 1<<GPIOB_ACX_PWR_1, 0);
-+ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_RESET, 0);
-+ asic3_set_gpio_out_d(&htcsable_asic3.dev, 1<<GPIOD_ACX_PWR_2, 0);
-+ SET_HTCSABLE_GPIO(ACX111, 0); /* not necessary to power down this one? */
-+ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_PWR_3, 0); /* not necessary to power down this one? */
-+
-+ return 0;
-+}
-+
-+static struct resource acx_resources[] = {
-+ [0] = {
-+ .start = WLAN_BASE,
-+ .end = WLAN_BASE + 0x20,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+// .start = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
-+// .end = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+static struct acx_hardware_data acx_data = {
-+ .start_hw = htcsable_wlan_start,
-+ .stop_hw = htcsable_wlan_stop,
-+};
-+
-+static struct platform_device acx_device = {
-+ .name = "acx-mem",
-+ .dev = {
-+ .platform_data = &acx_data,
-+ },
-+ .num_resources = ARRAY_SIZE( acx_resources ),
-+ .resource = acx_resources,
-+};
-+
-+static int __init
-+htcsable_wlan_init( void )
-+{
-+ printk( "htcsable_wlan_init: acx-mem platform_device_register\n" );
-+ acx_device.resource[1].start = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOB_IRQ_BASE+GPIOB_ACX_IRQ_N;
-+ acx_device.resource[1].end = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOB_IRQ_BASE+GPIOB_ACX_IRQ_N;
-+ return platform_device_register( &acx_device );
-+}
-+
-+
-+static void __exit
-+htcsable_wlan_exit( void )
-+{
-+ platform_device_unregister( &acx_device );
-+}
-+
-+module_init( htcsable_wlan_init );
-+module_exit( htcsable_wlan_exit );
-+
-+MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
-+MODULE_DESCRIPTION( "WLAN driver for HTC Sable" );
-+MODULE_LICENSE( "GPL" );
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/htcuniversal_acx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/htcuniversal_acx.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,108 @@
-+/*
-+ * WLAN (TI TNETW1100B) support in the HTC Universal
-+ *
-+ * Copyright (c) 2006 SDG Systems, LLC
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * 28-March-2006 Todd Blumer <todd@sdgsystems.com>
-+ */
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+
-+#include <asm/hardware.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <linux/soc/asic3_base.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+#include <asm/io.h>
-+
-+#include "acx_hw.h"
-+
-+#define WLAN_BASE PXA_CS2_PHYS
-+
-+
-+static int
-+htcuniversal_wlan_start( void )
-+{
-+ htcuniversal_egpio_enable(1<<EGPIO6_WIFI_ON);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_PWR1_ON, 1<<GPIOC_WIFI_PWR1_ON);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR3_ON, 1<<GPIOD_WIFI_PWR3_ON);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR2_ON, 1<<GPIOD_WIFI_PWR2_ON);
-+ mdelay(100);
-+
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_RESET, 0);
-+ mdelay(100);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_RESET, 1<<GPIOC_WIFI_RESET);
-+ mdelay(100);
-+ return 0;
-+}
-+
-+static int
-+htcuniversal_wlan_stop( void )
-+{
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_RESET, 0);
-+
-+ htcuniversal_egpio_disable(1<<EGPIO6_WIFI_ON);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_PWR1_ON, 0);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR2_ON, 0);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR3_ON, 0);
-+ return 0;
-+}
-+
-+static struct resource acx_resources[] = {
-+ [0] = {
-+ .start = WLAN_BASE,
-+ .end = WLAN_BASE + 0x20,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+// .start = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
-+// .end = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+static struct acx_hardware_data acx_data = {
-+ .start_hw = htcuniversal_wlan_start,
-+ .stop_hw = htcuniversal_wlan_stop,
-+};
-+
-+static struct platform_device acx_device = {
-+ .name = "acx-mem",
-+ .dev = {
-+ .platform_data = &acx_data,
-+ },
-+ .num_resources = ARRAY_SIZE( acx_resources ),
-+ .resource = acx_resources,
-+};
-+
-+static int __init
-+htcuniversal_wlan_init( void )
-+{
-+ printk( "htcuniversal_wlan_init: acx-mem platform_device_register\n" );
-+ acx_device.resource[1].start = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N;
-+ acx_device.resource[1].end = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N;
-+ return platform_device_register( &acx_device );
-+}
-+
-+
-+static void __exit
-+htcuniversal_wlan_exit( void )
-+{
-+ platform_device_unregister( &acx_device );
-+}
-+
-+module_init( htcuniversal_wlan_init );
-+module_exit( htcuniversal_wlan_exit );
-+
-+MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
-+MODULE_DESCRIPTION( "WLAN driver for HTC Universal" );
-+MODULE_LICENSE( "GPL" );
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/hx4700_acx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/hx4700_acx.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,108 @@
-+/*
-+ * WLAN (TI TNETW1100B) support in the hx470x.
-+ *
-+ * Copyright (c) 2006 SDG Systems, LLC
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * 28-March-2006 Todd Blumer <todd@sdgsystems.com>
-+ */
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+#include <linux/leds.h>
-+
-+#include <asm/hardware.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/hx4700-gpio.h>
-+#include <asm/arch/hx4700-core.h>
-+#include <asm/io.h>
-+
-+#include "acx_hw.h"
-+
-+#define WLAN_OFFSET 0x1000000
-+#define WLAN_BASE (PXA_CS5_PHYS+WLAN_OFFSET)
-+
-+
-+static int
-+hx4700_wlan_start( void )
-+{
-+ SET_HX4700_GPIO( WLAN_RESET_N, 0 );
-+ mdelay(5);
-+ hx4700_egpio_enable( EGPIO0_VCC_3V3_EN );
-+ mdelay(100);
-+ hx4700_egpio_enable( EGPIO7_VCC_3V3_WL_EN );
-+ mdelay(150);
-+ hx4700_egpio_enable( EGPIO1_WL_VREG_EN | EGPIO2_VCC_2V1_WL_EN |
-+ EGPIO6_WL1V8_EN );
-+ mdelay(10);
-+ SET_HX4700_GPIO( WLAN_RESET_N, 1 );
-+ mdelay(50);
-+ led_trigger_event_shared(hx4700_radio_trig, LED_FULL);
-+ return 0;
-+}
-+
-+static int
-+hx4700_wlan_stop( void )
-+{
-+ hx4700_egpio_disable( EGPIO0_VCC_3V3_EN | EGPIO1_WL_VREG_EN |
-+ EGPIO7_VCC_3V3_WL_EN | EGPIO2_VCC_2V1_WL_EN |
-+ EGPIO6_WL1V8_EN );
-+ SET_HX4700_GPIO( WLAN_RESET_N, 0 );
-+ led_trigger_event_shared(hx4700_radio_trig, LED_OFF);
-+ return 0;
-+}
-+
-+static struct resource acx_resources[] = {
-+ [0] = {
-+ .start = WLAN_BASE,
-+ .end = WLAN_BASE + 0x20,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+ .start = HX4700_IRQ(WLAN_IRQ_N),
-+ .end = HX4700_IRQ(WLAN_IRQ_N),
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+static struct acx_hardware_data acx_data = {
-+ .start_hw = hx4700_wlan_start,
-+ .stop_hw = hx4700_wlan_stop,
-+};
-+
-+static struct platform_device acx_device = {
-+ .name = "acx-mem",
-+ .dev = {
-+ .platform_data = &acx_data,
-+ },
-+ .num_resources = ARRAY_SIZE( acx_resources ),
-+ .resource = acx_resources,
-+};
-+
-+static int __init
-+hx4700_wlan_init( void )
-+{
-+ printk( "hx4700_wlan_init: acx-mem platform_device_register\n" );
-+ return platform_device_register( &acx_device );
-+}
-+
-+
-+static void __exit
-+hx4700_wlan_exit( void )
-+{
-+ platform_device_unregister( &acx_device );
-+}
-+
-+module_init( hx4700_wlan_init );
-+module_exit( hx4700_wlan_exit );
-+
-+MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
-+MODULE_DESCRIPTION( "WLAN driver for iPAQ hx4700" );
-+MODULE_LICENSE( "GPL" );
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/ioctl.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/ioctl.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,2748 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+#include <linux/kernel.h>
-+#include <linux/types.h>
-+#include <asm/io.h>
-+/* #include <asm/uaccess.h> */ /* required for 2.4.x kernels; verify_write() */
-+#include <linux/if_arp.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+*/
-+
-+/* channel frequencies
-+ * TODO: Currently, every other 802.11 driver keeps its own copy of this. In
-+ * the long run this should be integrated into ieee802_11.h or wireless.h or
-+ * whatever IEEE802.11x framework evolves */
-+static const u16 acx_channel_freq[] = {
-+ 2412, 2417, 2422, 2427, 2432, 2437, 2442,
-+ 2447, 2452, 2457, 2462, 2467, 2472, 2484,
-+};
-+
-+
-+/***********************************************************************
-+** acx_ioctl_commit
-+*/
-+static int
-+acx_ioctl_commit(struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask)
-+ acx_s_update_card_settings(adev);
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_name(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ static const char * const names[] = { "IEEE 802.11b+/g+", "IEEE 802.11b+" };
-+
-+ strcpy(wrqu->name, names[IS_ACX111(adev) ? 0 : 1]);
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_freq
-+*/
-+static int
-+acx_ioctl_set_freq(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int channel = -1;
-+ unsigned int mult = 1;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if (wrqu->freq.e == 0 && wrqu->freq.m <= 1000) {
-+ /* Setting by channel number */
-+ channel = wrqu->freq.m;
-+ } else {
-+ /* If setting by frequency, convert to a channel */
-+ int i;
-+
-+ for (i = 0; i < (6 - wrqu->freq.e); i++)
-+ mult *= 10;
-+
-+ for (i = 1; i <= 14; i++)
-+ if (wrqu->freq.m == acx_channel_freq[i - 1] * mult)
-+ channel = i;
-+ }
-+
-+ if (channel > 14) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ adev->channel = channel;
-+ /* hmm, the following code part is strange, but this is how
-+ * it was being done before... */
-+ log(L_IOCTL, "Changing to channel %d\n", channel);
-+ SET_BIT(adev->set_mask, GETSET_CHANNEL);
-+
-+ result = -EINPROGRESS; /* need to call commit handler */
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static inline int
-+acx_ioctl_get_freq(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ wrqu->freq.e = 0;
-+ wrqu->freq.m = adev->channel;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_mode
-+*/
-+static int
-+acx_ioctl_set_mode(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ switch (wrqu->mode) {
-+ case IW_MODE_AUTO:
-+ adev->mode = ACX_MODE_OFF;
-+ break;
-+ case IW_MODE_MONITOR:
-+ adev->mode = ACX_MODE_MONITOR;
-+ break;
-+ case IW_MODE_ADHOC:
-+ adev->mode = ACX_MODE_0_ADHOC;
-+ break;
-+ case IW_MODE_INFRA:
-+ adev->mode = ACX_MODE_2_STA;
-+ break;
-+ case IW_MODE_MASTER:
-+ printk("acx: master mode (HostAP) is very, very "
-+ "experimental! It might work partially, but "
-+ "better get prepared for nasty surprises "
-+ "at any time\n");
-+ adev->mode = ACX_MODE_3_AP;
-+ break;
-+ case IW_MODE_REPEAT:
-+ case IW_MODE_SECOND:
-+ default:
-+ result = -EOPNOTSUPP;
-+ goto end_unlock;
-+ }
-+
-+ log(L_ASSOC, "new adev->mode=%d\n", adev->mode);
-+ SET_BIT(adev->set_mask, GETSET_MODE);
-+ result = -EINPROGRESS;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_mode(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = 0;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_OFF:
-+ wrqu->mode = IW_MODE_AUTO; break;
-+ case ACX_MODE_MONITOR:
-+ wrqu->mode = IW_MODE_MONITOR; break;
-+ case ACX_MODE_0_ADHOC:
-+ wrqu->mode = IW_MODE_ADHOC; break;
-+ case ACX_MODE_2_STA:
-+ wrqu->mode = IW_MODE_INFRA; break;
-+ case ACX_MODE_3_AP:
-+ wrqu->mode = IW_MODE_MASTER; break;
-+ default:
-+ result = -EOPNOTSUPP;
-+ }
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_set_sens(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->sens;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ acx_sem_lock(adev);
-+
-+ adev->sensitivity = (1 == vwrq->disabled) ? 0 : vwrq->value;
-+ SET_BIT(adev->set_mask, GETSET_SENSITIVITY);
-+
-+ acx_sem_unlock(adev);
-+
-+ return -EINPROGRESS;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_sens(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->sens;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ if (IS_USB(adev))
-+ /* setting the PHY reg via fw cmd doesn't work yet */
-+ return -EOPNOTSUPP;
-+
-+ /* acx_sem_lock(adev); */
-+
-+ vwrq->value = adev->sensitivity;
-+ vwrq->disabled = (vwrq->value == 0);
-+ vwrq->fixed = 1;
-+
-+ /* acx_sem_unlock(adev); */
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_ap
-+**
-+** Sets the MAC address of the AP to associate with
-+*/
-+static int
-+acx_ioctl_set_ap(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct sockaddr *awrq = &wrqu->ap_addr;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = 0;
-+ const u8 *ap;
-+
-+ FN_ENTER;
-+ if (NULL == awrq) {
-+ result = -EFAULT;
-+ goto end;
-+ }
-+ if (ARPHRD_ETHER != awrq->sa_family) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ ap = awrq->sa_data;
-+ acxlog_mac(L_IOCTL, "set AP=", ap, "\n");
-+
-+ MAC_COPY(adev->ap, ap);
-+
-+ /* We want to start rescan in managed or ad-hoc mode,
-+ ** otherwise just set adev->ap.
-+ ** "iwconfig <if> ap <mac> mode managed": we must be able
-+ ** to set ap _first_ and _then_ set mode */
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ /* FIXME: if there is a convention on what zero AP means,
-+ ** please add a comment about that. I don't know of any --vda */
-+ if (mac_is_zero(ap)) {
-+ /* "off" == 00:00:00:00:00:00 */
-+ MAC_BCAST(adev->ap);
-+ log(L_IOCTL, "Not reassociating\n");
-+ } else {
-+ log(L_IOCTL, "Forcing reassociation\n");
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ }
-+ break;
-+ }
-+ result = -EINPROGRESS;
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_ap(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct sockaddr *awrq = &wrqu->ap_addr;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ if (ACX_STATUS_4_ASSOCIATED == adev->status) {
-+ /* as seen in Aironet driver, airo.c */
-+ MAC_COPY(awrq->sa_data, adev->bssid);
-+ } else {
-+ MAC_ZERO(awrq->sa_data);
-+ }
-+ awrq->sa_family = ARPHRD_ETHER;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_aplist
-+**
-+** Deprecated in favor of iwscan.
-+** We simply return the list of currently available stations in range,
-+** don't do a new scan.
-+*/
-+static int
-+acx_ioctl_get_aplist(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->data;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ struct sockaddr *address = (struct sockaddr *) extra;
-+ struct iw_quality qual[IW_MAX_AP];
-+ int i, cur;
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ /* we have AP list only in STA mode */
-+ if (ACX_MODE_2_STA != adev->mode) {
-+ result = -EOPNOTSUPP;
-+ goto end;
-+ }
-+
-+ cur = 0;
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ struct client *bss = &adev->sta_list[i];
-+ if (!bss->used) continue;
-+ MAC_COPY(address[cur].sa_data, bss->bssid);
-+ address[cur].sa_family = ARPHRD_ETHER;
-+ qual[cur].level = bss->sir;
-+ qual[cur].noise = bss->snr;
-+#ifndef OLD_QUALITY
-+ qual[cur].qual = acx_signal_determine_quality(qual[cur].level,
-+ qual[cur].noise);
-+#else
-+ qual[cur].qual = (qual[cur].noise <= 100) ?
-+ 100 - qual[cur].noise : 0;
-+#endif
-+ /* no scan: level/noise/qual not updated: */
-+ qual[cur].updated = 0;
-+ cur++;
-+ }
-+ if (cur) {
-+ dwrq->flags = 1;
-+ memcpy(extra + sizeof(struct sockaddr)*cur, &qual,
-+ sizeof(struct iw_quality)*cur);
-+ }
-+ dwrq->length = cur;
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_set_scan(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* don't start scan if device is not up yet */
-+ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
-+ result = -EAGAIN;
-+ goto end_unlock;
-+ }
-+
-+ /* This is NOT a rescan for new AP!
-+ ** Do not use SET_BIT(GETSET_RESCAN); */
-+ acx_s_cmd_start_scan(adev);
-+ result = OK;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+/* end: */
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_scan_add_station
-+*/
-+/* helper. not sure whether it's really a _s_leeping fn */
-+static char*
-+acx_s_scan_add_station(
-+ acx_device_t *adev,
-+ char *ptr,
-+ char *end_buf,
-+ struct client *bss)
-+{
-+ struct iw_event iwe;
-+ char *ptr_rate;
-+
-+ FN_ENTER;
-+
-+ /* MAC address has to be added first */
-+ iwe.cmd = SIOCGIWAP;
-+ iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
-+ MAC_COPY(iwe.u.ap_addr.sa_data, bss->bssid);
-+ acxlog_mac(L_IOCTL, "scan, station address: ", bss->bssid, "\n");
-+ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_ADDR_LEN);
-+
-+ /* Add ESSID */
-+ iwe.cmd = SIOCGIWESSID;
-+ iwe.u.data.length = bss->essid_len;
-+ iwe.u.data.flags = 1;
-+ log(L_IOCTL, "scan, essid: %s\n", bss->essid);
-+ ptr = iwe_stream_add_point(ptr, end_buf, &iwe, bss->essid);
-+
-+ /* Add mode */
-+ iwe.cmd = SIOCGIWMODE;
-+ if (bss->cap_info & (WF_MGMT_CAP_ESS | WF_MGMT_CAP_IBSS)) {
-+ if (bss->cap_info & WF_MGMT_CAP_ESS)
-+ iwe.u.mode = IW_MODE_MASTER;
-+ else
-+ iwe.u.mode = IW_MODE_ADHOC;
-+ log(L_IOCTL, "scan, mode: %d\n", iwe.u.mode);
-+ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_UINT_LEN);
-+ }
-+
-+ /* Add frequency */
-+ iwe.cmd = SIOCGIWFREQ;
-+ iwe.u.freq.m = acx_channel_freq[bss->channel - 1] * 100000;
-+ iwe.u.freq.e = 1;
-+ log(L_IOCTL, "scan, frequency: %d\n", iwe.u.freq.m);
-+ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_FREQ_LEN);
-+
-+ /* Add link quality */
-+ iwe.cmd = IWEVQUAL;
-+ /* FIXME: these values should be expressed in dBm, but we don't know
-+ * how to calibrate it yet */
-+ iwe.u.qual.level = bss->sir;
-+ iwe.u.qual.noise = bss->snr;
-+#ifndef OLD_QUALITY
-+ iwe.u.qual.qual = acx_signal_determine_quality(iwe.u.qual.level,
-+ iwe.u.qual.noise);
-+#else
-+ iwe.u.qual.qual = (iwe.u.qual.noise <= 100) ?
-+ 100 - iwe.u.qual.noise : 0;
-+#endif
-+ iwe.u.qual.updated = 7;
-+ log(L_IOCTL, "scan, link quality: %d/%d/%d\n",
-+ iwe.u.qual.level, iwe.u.qual.noise, iwe.u.qual.qual);
-+ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_QUAL_LEN);
-+
-+ /* Add encryption */
-+ iwe.cmd = SIOCGIWENCODE;
-+ if (bss->cap_info & WF_MGMT_CAP_PRIVACY)
-+ iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;
-+ else
-+ iwe.u.data.flags = IW_ENCODE_DISABLED;
-+ iwe.u.data.length = 0;
-+ log(L_IOCTL, "scan, encryption flags: %X\n", iwe.u.data.flags);
-+ ptr = iwe_stream_add_point(ptr, end_buf, &iwe, bss->essid);
-+
-+ /* add rates */
-+ iwe.cmd = SIOCGIWRATE;
-+ iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0;
-+ ptr_rate = ptr + IW_EV_LCP_LEN;
-+
-+ {
-+ u16 rate = bss->rate_cap;
-+ const u8* p = acx_bitpos2ratebyte;
-+ while (rate) {
-+ if (rate & 1) {
-+ iwe.u.bitrate.value = *p * 500000; /* units of 500kb/s */
-+ log(L_IOCTL, "scan, rate: %d\n", iwe.u.bitrate.value);
-+ ptr_rate = iwe_stream_add_value(ptr, ptr_rate, end_buf,
-+ &iwe, IW_EV_PARAM_LEN);
-+ }
-+ rate >>= 1;
-+ p++;
-+ }}
-+
-+ if ((ptr_rate - ptr) > (ptrdiff_t)IW_EV_LCP_LEN)
-+ ptr = ptr_rate;
-+
-+ /* drop remaining station data items for now */
-+
-+ FN_EXIT0;
-+ return ptr;
-+}
-+
-+
-+/***********************************************************************
-+ * acx_ioctl_get_scan
-+ */
-+static int
-+acx_ioctl_get_scan(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->data;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ char *ptr = extra;
-+ int i;
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* no scan available if device is not up yet */
-+ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
-+ log(L_IOCTL, "iface not up yet\n");
-+ result = -EAGAIN;
-+ goto end_unlock;
-+ }
-+
-+#ifdef ENODATA_TO_BE_USED_AFTER_SCAN_ERROR_ONLY
-+ if (adev->bss_table_count == 0) {
-+ /* no stations found */
-+ result = -ENODATA;
-+ goto end_unlock;
-+ }
-+#endif
-+
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ struct client *bss = &adev->sta_list[i];
-+ if (!bss->used) continue;
-+ ptr = acx_s_scan_add_station(adev, ptr,
-+ extra + IW_SCAN_MAX_DATA, bss);
-+ }
-+ dwrq->length = ptr - extra;
-+ dwrq->flags = 0;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+/* end: */
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_essid
-+*/
-+static int
-+acx_ioctl_set_essid(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->essid;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int len = dwrq->length;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if (len < 0) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ log(L_IOCTL, "set ESSID '%*s', length %d, flags 0x%04X\n",
-+ len, extra, len, dwrq->flags);
-+
-+#if WIRELESS_EXT >= 21
-+ /* WE 21 gives real ESSID strlen, not +1 (trailing zero):
-+ * see LKML "[patch] drivers/net/wireless: correct reported ssid lengths" */
-+ len += 1;
-+#endif
-+
-+ acx_sem_lock(adev);
-+
-+ /* ESSID disabled? */
-+ if (0 == dwrq->flags) {
-+ adev->essid_active = 0;
-+
-+ } else {
-+ if (len > IW_ESSID_MAX_SIZE) {
-+ result = -E2BIG;
-+ goto end_unlock;
-+ }
-+
-+ if (len >= sizeof(adev->essid))
-+ len = sizeof(adev->essid) - 1;
-+ memcpy(adev->essid, extra, len);
-+ adev->essid[len] = '\0';
-+ /* Paranoia: just in case there is a '\0'... */
-+ adev->essid_len = strlen(adev->essid);
-+ adev->essid_active = 1;
-+ }
-+
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+
-+ result = -EINPROGRESS;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_essid(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->essid;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ dwrq->flags = adev->essid_active;
-+ if (adev->essid_active) {
-+ memcpy(extra, adev->essid, adev->essid_len);
-+ extra[adev->essid_len] = '\0';
-+ dwrq->length = adev->essid_len + 1;
-+ dwrq->flags = 1;
-+ }
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_update_client_rates
-+*/
-+static void
-+acx_l_update_client_rates(acx_device_t *adev, u16 rate)
-+{
-+ int i;
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ client_t *clt = &adev->sta_list[i];
-+ if (!clt->used) continue;
-+ clt->rate_cfg = (clt->rate_cap & rate);
-+ if (!clt->rate_cfg) {
-+ /* no compatible rates left: kick client */
-+ acxlog_mac(L_ASSOC, "client ",clt->address," kicked: "
-+ "rates are not compatible anymore\n");
-+ acx_l_sta_list_del(adev, clt);
-+ continue;
-+ }
-+ clt->rate_cur &= clt->rate_cfg;
-+ if (!clt->rate_cur) {
-+ /* current rate become invalid, choose a valid one */
-+ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg);
-+ }
-+ if (IS_ACX100(adev))
-+ clt->rate_100 = acx_bitpos2rate100[highest_bit(clt->rate_cur)];
-+ clt->fallback_count = clt->stepup_count = 0;
-+ clt->ignore_count = 16;
-+ }
-+ switch (adev->mode) {
-+ case ACX_MODE_2_STA:
-+ if (adev->ap_client && !adev->ap_client->used) {
-+ /* Owwww... we kicked our AP!! :) */
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ }
-+ }
-+}
-+
-+
-+/***********************************************************************
-+*/
-+/* maps bits from acx111 rate to rate in Mbits */
-+static const unsigned int
-+acx111_rate_tbl[] = {
-+ 1000000, /* 0 */
-+ 2000000, /* 1 */
-+ 5500000, /* 2 */
-+ 6000000, /* 3 */
-+ 9000000, /* 4 */
-+ 11000000, /* 5 */
-+ 12000000, /* 6 */
-+ 18000000, /* 7 */
-+ 22000000, /* 8 */
-+ 24000000, /* 9 */
-+ 36000000, /* 10 */
-+ 48000000, /* 11 */
-+ 54000000, /* 12 */
-+ 500000, /* 13, should not happen */
-+ 500000, /* 14, should not happen */
-+ 500000, /* 15, should not happen */
-+};
-+
-+/***********************************************************************
-+ * acx_ioctl_set_rate
-+ */
-+static int
-+acx_ioctl_set_rate(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->param;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ u16 txrate_cfg = 1;
-+ unsigned long flags;
-+ int autorate;
-+ int result = -EINVAL;
-+
-+ FN_ENTER;
-+ log(L_IOCTL, "rate %d fixed 0x%X disabled 0x%X flags 0x%X\n",
-+ vwrq->value, vwrq->fixed, vwrq->disabled, vwrq->flags);
-+
-+ if ((0 == vwrq->fixed) || (1 == vwrq->fixed)) {
-+ int i = VEC_SIZE(acx111_rate_tbl)-1;
-+ if (vwrq->value == -1)
-+ /* "iwconfig rate auto" --> choose highest */
-+ vwrq->value = IS_ACX100(adev) ? 22000000 : 54000000;
-+ while (i >= 0) {
-+ if (vwrq->value == acx111_rate_tbl[i]) {
-+ txrate_cfg <<= i;
-+ i = 0;
-+ break;
-+ }
-+ i--;
-+ }
-+ if (i == -1) { /* no matching rate */
-+ result = -EINVAL;
-+ goto end;
-+ }
-+ } else { /* rate N, N<1000 (driver specific): we don't use this */
-+ result = -EOPNOTSUPP;
-+ goto end;
-+ }
-+ /* now: only one bit is set in txrate_cfg, corresponding to
-+ ** indicated rate */
-+
-+ autorate = (vwrq->fixed == 0) && (RATE111_1 != txrate_cfg);
-+ if (autorate) {
-+ /* convert 00100000 -> 00111111 */
-+ txrate_cfg = (txrate_cfg<<1)-1;
-+ }
-+
-+ if (IS_ACX100(adev)) {
-+ txrate_cfg &= RATE111_ACX100_COMPAT;
-+ if (!txrate_cfg) {
-+ result = -ENOTSUPP; /* rate is not supported by acx100 */
-+ goto end;
-+ }
-+ }
-+
-+ acx_sem_lock(adev);
-+ acx_lock(adev, flags);
-+
-+ adev->rate_auto = autorate;
-+ adev->rate_oper = txrate_cfg;
-+ adev->rate_basic = txrate_cfg;
-+ /* only do that in auto mode, non-auto will be able to use
-+ * one specific Tx rate only anyway */
-+ if (autorate) {
-+ /* only use 802.11b base rates, for standard 802.11b H/W
-+ * compatibility */
-+ adev->rate_basic &= RATE111_80211B_COMPAT;
-+ }
-+ adev->rate_bcast = 1 << lowest_bit(txrate_cfg);
-+ if (IS_ACX100(adev))
-+ adev->rate_bcast100 = acx_rate111to100(adev->rate_bcast);
-+ acx_l_update_ratevector(adev);
-+ acx_l_update_client_rates(adev, txrate_cfg);
-+
-+ /* Do/don't do tx rate fallback; beacon contents and rate */
-+ SET_BIT(adev->set_mask, SET_RATE_FALLBACK|SET_TEMPLATES);
-+ result = -EINPROGRESS;
-+
-+ acx_unlock(adev, flags);
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_rate
-+*/
-+static int
-+acx_ioctl_get_rate(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->param;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ u16 rate;
-+
-+ acx_lock(adev, flags);
-+ rate = adev->rate_oper;
-+ if (adev->ap_client)
-+ rate = adev->ap_client->rate_cur;
-+ vwrq->value = acx111_rate_tbl[highest_bit(rate)];
-+ vwrq->fixed = !adev->rate_auto;
-+ vwrq->disabled = 0;
-+ acx_unlock(adev, flags);
-+
-+ return OK;
-+}
-+
-+static int
-+acx_ioctl_set_rts(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->rts;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int val = vwrq->value;
-+
-+ if (vwrq->disabled)
-+ val = 2312;
-+ if ((val < 0) || (val > 2312))
-+ return -EINVAL;
-+
-+ adev->rts_threshold = val;
-+ return OK;
-+}
-+
-+static inline int
-+acx_ioctl_get_rts(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->rts;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ vwrq->value = adev->rts_threshold;
-+ vwrq->disabled = (vwrq->value >= 2312);
-+ vwrq->fixed = 1;
-+ return OK;
-+}
-+
-+
-+#if ACX_FRAGMENTATION
-+static int
-+acx_ioctl_set_frag(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int val = vwrq->value;
-+
-+ if (vwrq->disabled)
-+ val = 32767;
-+ else
-+ if ((val < 256) || (val > 2347))
-+ return -EINVAL;
-+
-+ adev->frag_threshold = val;
-+ return OK;
-+}
-+
-+static inline int
-+acx_ioctl_get_frag(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->frag;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ vwrq->value = adev->frag_threshold;
-+ vwrq->disabled = (vwrq->value >= 2347);
-+ vwrq->fixed = 1;
-+ return OK;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_encode
-+*/
-+static int
-+acx_ioctl_set_encode(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->encoding;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int index;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ log(L_IOCTL, "set encoding flags=0x%04X, size=%d, key: %s\n",
-+ dwrq->flags, dwrq->length, extra ? "set" : "No key");
-+
-+ acx_sem_lock(adev);
-+
-+ index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
-+
-+ if (dwrq->length > 0) {
-+ /* if index is 0 or invalid, use default key */
-+ if ((index < 0) || (index > 3))
-+ index = (int)adev->wep_current_index;
-+
-+ if (0 == (dwrq->flags & IW_ENCODE_NOKEY)) {
-+ if (dwrq->length > 29)
-+ dwrq->length = 29; /* restrict it */
-+
-+ if (dwrq->length > 13) {
-+ /* 29*8 == 232, WEP256 */
-+ adev->wep_keys[index].size = 29;
-+ } else if (dwrq->length > 5) {
-+ /* 13*8 == 104bit, WEP128 */
-+ adev->wep_keys[index].size = 13;
-+ } else if (dwrq->length > 0) {
-+ /* 5*8 == 40bit, WEP64 */
-+ adev->wep_keys[index].size = 5;
-+ } else {
-+ /* disable key */
-+ adev->wep_keys[index].size = 0;
-+ }
-+
-+ memset(adev->wep_keys[index].key, 0,
-+ sizeof(adev->wep_keys[index].key));
-+ memcpy(adev->wep_keys[index].key, extra, dwrq->length);
-+ }
-+ } else {
-+ /* set transmit key */
-+ if ((index >= 0) && (index <= 3))
-+ adev->wep_current_index = index;
-+ else if (0 == (dwrq->flags & IW_ENCODE_MODE)) {
-+ /* complain if we were not just setting
-+ * the key mode */
-+ result = -EINVAL;
-+ goto end_unlock;
-+ }
-+ }
-+
-+ adev->wep_enabled = !(dwrq->flags & IW_ENCODE_DISABLED);
-+
-+ if (dwrq->flags & IW_ENCODE_OPEN) {
-+ adev->auth_alg = WLAN_AUTH_ALG_OPENSYSTEM;
-+ adev->wep_restricted = 0;
-+
-+ } else if (dwrq->flags & IW_ENCODE_RESTRICTED) {
-+ adev->auth_alg = WLAN_AUTH_ALG_SHAREDKEY;
-+ adev->wep_restricted = 1;
-+ }
-+
-+ /* set flag to make sure the card WEP settings get updated */
-+ SET_BIT(adev->set_mask, GETSET_WEP);
-+
-+ log(L_IOCTL, "len=%d, key at 0x%p, flags=0x%X\n",
-+ dwrq->length, extra, dwrq->flags);
-+
-+ for (index = 0; index <= 3; index++) {
-+ if (adev->wep_keys[index].size) {
-+ log(L_IOCTL, "index=%d, size=%d, key at 0x%p\n",
-+ adev->wep_keys[index].index,
-+ (int) adev->wep_keys[index].size,
-+ adev->wep_keys[index].key);
-+ }
-+ }
-+ result = -EINPROGRESS;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_encode
-+*/
-+static int
-+acx_ioctl_get_encode(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->encoding;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
-+
-+ FN_ENTER;
-+
-+ if (adev->wep_enabled == 0) {
-+ dwrq->flags = IW_ENCODE_DISABLED;
-+ } else {
-+ if ((index < 0) || (index > 3))
-+ index = (int)adev->wep_current_index;
-+
-+ dwrq->flags = (adev->wep_restricted == 1) ?
-+ IW_ENCODE_RESTRICTED : IW_ENCODE_OPEN;
-+ dwrq->length = adev->wep_keys[index].size;
-+
-+ memcpy(extra, adev->wep_keys[index].key,
-+ adev->wep_keys[index].size);
-+ }
-+
-+ /* set the current index */
-+ SET_BIT(dwrq->flags, index + 1);
-+
-+ log(L_IOCTL, "len=%d, key=%p, flags=0x%X\n",
-+ dwrq->length, dwrq->pointer,
-+ dwrq->flags);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_set_power(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->power;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = -EINPROGRESS;
-+
-+ FN_ENTER;
-+
-+ log(L_IOCTL, "set 802.11 powersave flags=0x%04X\n", vwrq->flags);
-+
-+ acx_sem_lock(adev);
-+
-+ if (vwrq->disabled) {
-+ CLEAR_BIT(adev->ps_wakeup_cfg, PS_CFG_ENABLE);
-+ SET_BIT(adev->set_mask, GETSET_POWER_80211);
-+ goto end;
-+ }
-+ if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) {
-+ u16 ps_timeout = (vwrq->value * 1024) / 1000;
-+
-+ if (ps_timeout > 255)
-+ ps_timeout = 255;
-+ log(L_IOCTL, "setting PS timeout value to %d time units "
-+ "due to %dus\n", ps_timeout, vwrq->value);
-+ adev->ps_hangover_period = ps_timeout;
-+ } else if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_PERIOD) {
-+ u16 ps_periods = vwrq->value / 1000000;
-+
-+ if (ps_periods > 255)
-+ ps_periods = 255;
-+ log(L_IOCTL, "setting PS period value to %d periods "
-+ "due to %dus\n", ps_periods, vwrq->value);
-+ adev->ps_listen_interval = ps_periods;
-+ CLEAR_BIT(adev->ps_wakeup_cfg, PS_CFG_WAKEUP_MODE_MASK);
-+ SET_BIT(adev->ps_wakeup_cfg, PS_CFG_WAKEUP_EACH_ITVL);
-+ }
-+
-+ switch (vwrq->flags & IW_POWER_MODE) {
-+ /* FIXME: are we doing the right thing here? */
-+ case IW_POWER_UNICAST_R:
-+ CLEAR_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS);
-+ break;
-+ case IW_POWER_MULTICAST_R:
-+ SET_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS);
-+ break;
-+ case IW_POWER_ALL_R:
-+ SET_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS);
-+ break;
-+ case IW_POWER_ON:
-+ break;
-+ default:
-+ log(L_IOCTL, "unknown PS mode\n");
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ SET_BIT(adev->ps_wakeup_cfg, PS_CFG_ENABLE);
-+ SET_BIT(adev->set_mask, GETSET_POWER_80211);
-+end:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_power(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->power;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ log(L_IOCTL, "Get 802.11 Power Save flags = 0x%04X\n", vwrq->flags);
-+ vwrq->disabled = ((adev->ps_wakeup_cfg & PS_CFG_ENABLE) == 0);
-+ if (vwrq->disabled)
-+ goto end;
-+
-+ if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) {
-+ vwrq->value = adev->ps_hangover_period * 1000 / 1024;
-+ vwrq->flags = IW_POWER_TIMEOUT;
-+ } else {
-+ vwrq->value = adev->ps_listen_interval * 1000000;
-+ vwrq->flags = IW_POWER_PERIOD|IW_POWER_RELATIVE;
-+ }
-+ if (adev->ps_options & PS_OPT_STILL_RCV_BCASTS)
-+ SET_BIT(vwrq->flags, IW_POWER_ALL_R);
-+ else
-+ SET_BIT(vwrq->flags, IW_POWER_UNICAST_R);
-+end:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_txpow
-+*/
-+static inline int
-+acx_ioctl_get_txpow(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->power;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ vwrq->flags = IW_TXPOW_DBM;
-+ vwrq->disabled = 0;
-+ vwrq->fixed = 1;
-+ vwrq->value = adev->tx_level_dbm;
-+
-+ log(L_IOCTL, "get txpower:%d dBm\n", adev->tx_level_dbm);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_txpow
-+*/
-+static int
-+acx_ioctl_set_txpow(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->power;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ log(L_IOCTL, "set txpower:%d, disabled:%d, flags:0x%04X\n",
-+ vwrq->value, vwrq->disabled, vwrq->flags);
-+
-+ acx_sem_lock(adev);
-+
-+ if (vwrq->disabled != adev->tx_disabled) {
-+ SET_BIT(adev->set_mask, GETSET_TX);
-+ }
-+
-+ adev->tx_disabled = vwrq->disabled;
-+ if (vwrq->value == -1) {
-+ if (vwrq->disabled) {
-+ adev->tx_level_dbm = 0;
-+ log(L_IOCTL, "disable radio tx\n");
-+ } else {
-+ /* adev->tx_level_auto = 1; */
-+ log(L_IOCTL, "set tx power auto (NIY)\n");
-+ }
-+ } else {
-+ adev->tx_level_dbm = vwrq->value <= 20 ? vwrq->value : 20;
-+ /* adev->tx_level_auto = 0; */
-+ log(L_IOCTL, "set txpower=%d dBm\n", adev->tx_level_dbm);
-+ }
-+ SET_BIT(adev->set_mask, GETSET_TXPOWER);
-+
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_range
-+*/
-+static int
-+acx_ioctl_get_range(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->data;
-+ struct iw_range *range = (struct iw_range *)extra;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int i,n;
-+
-+ FN_ENTER;
-+
-+ if (!dwrq->pointer)
-+ goto end;
-+
-+ dwrq->length = sizeof(struct iw_range);
-+ memset(range, 0, sizeof(struct iw_range));
-+ n = 0;
-+ for (i = 1; i <= 14; i++) {
-+ if (adev->reg_dom_chanmask & (1 << (i - 1))) {
-+ range->freq[n].i = i;
-+ range->freq[n].m = acx_channel_freq[i - 1] * 100000;
-+ range->freq[n].e = 1; /* units are MHz */
-+ n++;
-+ }
-+ }
-+ range->num_channels = n;
-+ range->num_frequency = n;
-+
-+ range->min_rts = 0;
-+ range->max_rts = 2312;
-+
-+#if ACX_FRAGMENTATION
-+ range->min_frag = 256;
-+ range->max_frag = 2312;
-+#endif
-+
-+ range->encoding_size[0] = 5;
-+ range->encoding_size[1] = 13;
-+ range->encoding_size[2] = 29;
-+ range->num_encoding_sizes = 3;
-+ range->max_encoding_tokens = 4;
-+
-+ range->min_pmp = 0;
-+ range->max_pmp = 5000000;
-+ range->min_pmt = 0;
-+ range->max_pmt = 65535 * 1000;
-+ range->pmp_flags = IW_POWER_PERIOD;
-+ range->pmt_flags = IW_POWER_TIMEOUT;
-+ range->pm_capa = IW_POWER_PERIOD | IW_POWER_TIMEOUT | IW_POWER_ALL_R;
-+
-+ if (IS_ACX100(adev)) { /* ACX100 has direct radio programming - arbitrary levels, so offer a lot */
-+ for (i = 0; i <= IW_MAX_TXPOWER - 1; i++)
-+ range->txpower[i] = 20 * i / (IW_MAX_TXPOWER - 1);
-+ range->num_txpower = IW_MAX_TXPOWER;
-+ range->txpower_capa = IW_TXPOW_DBM;
-+ }
-+ else {
-+ int count = min(IW_MAX_TXPOWER, (int)adev->cfgopt_power_levels.len);
-+ for (i = 0; i <= count; i++)
-+ range->txpower[i] = adev->cfgopt_power_levels.list[i];
-+ range->num_txpower = count;
-+ /* this list is given in mW */
-+ range->txpower_capa = IW_TXPOW_MWATT;
-+ }
-+
-+ range->we_version_compiled = WIRELESS_EXT;
-+ range->we_version_source = 0x9;
-+
-+ range->retry_capa = IW_RETRY_LIMIT;
-+ range->retry_flags = IW_RETRY_LIMIT;
-+ range->min_retry = 1;
-+ range->max_retry = 255;
-+
-+ range->r_time_flags = IW_RETRY_LIFETIME;
-+ range->min_r_time = 0;
-+ /* FIXME: lifetime ranges and orders of magnitude are strange?? */
-+ range->max_r_time = 65535;
-+
-+ if (IS_USB(adev))
-+ range->sensitivity = 0;
-+ else if (IS_ACX111(adev))
-+ range->sensitivity = 3;
-+ else
-+ range->sensitivity = 255;
-+
-+ for (i=0; i < adev->rate_supported_len; i++) {
-+ range->bitrate[i] = (adev->rate_supported[i] & ~0x80) * 500000;
-+ /* never happens, but keep it, to be safe: */
-+ if (range->bitrate[i] == 0)
-+ break;
-+ }
-+ range->num_bitrates = i;
-+
-+ range->max_qual.qual = 100;
-+ range->max_qual.level = 100;
-+ range->max_qual.noise = 100;
-+ /* TODO: better values */
-+ range->avg_qual.qual = 90;
-+ range->avg_qual.level = 80;
-+ range->avg_qual.noise = 2;
-+
-+end:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** Private functions
-+*/
-+
-+/***********************************************************************
-+** acx_ioctl_get_nick
-+*/
-+static inline int
-+acx_ioctl_get_nick(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->data;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ strcpy(extra, adev->nick);
-+ dwrq->length = strlen(extra) + 1;
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_nick
-+*/
-+static int
-+acx_ioctl_set_nick(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->data;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ if (dwrq->length > IW_ESSID_MAX_SIZE + 1) {
-+ result = -E2BIG;
-+ goto end_unlock;
-+ }
-+
-+ /* extra includes trailing \0, so it's ok */
-+ strcpy(adev->nick, extra);
-+ result = OK;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_retry
-+*/
-+static int
-+acx_ioctl_get_retry(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->retry;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned int type = vwrq->flags & IW_RETRY_TYPE;
-+ unsigned int modifier = vwrq->flags & IW_RETRY_MODIFIER;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* return the short retry number by default */
-+ if (type == IW_RETRY_LIFETIME) {
-+ vwrq->flags = IW_RETRY_LIFETIME;
-+ vwrq->value = adev->msdu_lifetime;
-+ } else if (modifier == IW_RETRY_MAX) {
-+ vwrq->flags = IW_RETRY_LIMIT | IW_RETRY_MAX;
-+ vwrq->value = adev->long_retry;
-+ } else {
-+ vwrq->flags = IW_RETRY_LIMIT;
-+ if (adev->long_retry != adev->short_retry)
-+ SET_BIT(vwrq->flags, IW_RETRY_MIN);
-+ vwrq->value = adev->short_retry;
-+ }
-+
-+ /* can't be disabled */
-+ vwrq->disabled = (u8)0;
-+ result = OK;
-+
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_retry
-+*/
-+static int
-+acx_ioctl_set_retry(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->retry;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if (!vwrq) {
-+ result = -EFAULT;
-+ goto end;
-+ }
-+ if (vwrq->disabled) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ result = -EINVAL;
-+ if (IW_RETRY_LIMIT == (vwrq->flags & IW_RETRY_TYPE)) {
-+ printk("old retry limits: short %d long %d\n",
-+ adev->short_retry, adev->long_retry);
-+ if (vwrq->flags & IW_RETRY_MAX) {
-+ adev->long_retry = vwrq->value;
-+ } else if (vwrq->flags & IW_RETRY_MIN) {
-+ adev->short_retry = vwrq->value;
-+ } else {
-+ /* no modifier: set both */
-+ adev->long_retry = vwrq->value;
-+ adev->short_retry = vwrq->value;
-+ }
-+ printk("new retry limits: short %d long %d\n",
-+ adev->short_retry, adev->long_retry);
-+ SET_BIT(adev->set_mask, GETSET_RETRY);
-+ result = -EINPROGRESS;
-+ }
-+ else if (vwrq->flags & IW_RETRY_LIFETIME) {
-+ adev->msdu_lifetime = vwrq->value;
-+ printk("new MSDU lifetime: %d\n", adev->msdu_lifetime);
-+ SET_BIT(adev->set_mask, SET_MSDU_LIFETIME);
-+ result = -EINPROGRESS;
-+ }
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/************************ private ioctls ******************************/
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_debug
-+*/
-+#if ACX_DEBUG
-+static int
-+acx_ioctl_set_debug(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ unsigned int debug_new = *((unsigned int *)extra);
-+ int result = -EINVAL;
-+
-+ log(L_ANY, "setting debug from %04X to %04X\n", acx_debug, debug_new);
-+ acx_debug = debug_new;
-+
-+ result = OK;
-+ return result;
-+
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_ioctl_list_reg_domain
-+*/
-+static int
-+acx_ioctl_list_reg_domain(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ int i = 1;
-+ const char * const *entry = acx_reg_domain_strings;
-+
-+ printk("dom# chan# domain/country\n");
-+ while (*entry)
-+ printk("%4d %s\n", i++, *entry++);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_reg_domain
-+*/
-+static int
-+acx_ioctl_set_reg_domain(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if ((*extra < 1) || ((size_t)*extra > acx_reg_domain_ids_len)) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ adev->reg_dom_id = acx_reg_domain_ids[*extra - 1];
-+ SET_BIT(adev->set_mask, GETSET_REG_DOMAIN);
-+
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_reg_domain
-+*/
-+static int
-+acx_ioctl_get_reg_domain(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int dom,i;
-+
-+ /* no locking */
-+ dom = adev->reg_dom_id;
-+
-+ for (i = 1; i <= acx_reg_domain_ids_len; i++) {
-+ if (acx_reg_domain_ids[i-1] == dom) {
-+ log(L_IOCTL, "regulatory domain is currently set "
-+ "to %d (0x%X): %s\n", i, dom,
-+ acx_reg_domain_strings[i-1]);
-+ *extra = i;
-+ break;
-+ }
-+ }
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_short_preamble
-+*/
-+static const char * const
-+preamble_modes[] = {
-+ "off",
-+ "on",
-+ "auto (peer capability dependent)",
-+ "unknown mode, error"
-+};
-+
-+static int
-+acx_ioctl_set_short_preamble(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int i;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if ((unsigned char)*extra > 2) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ adev->preamble_mode = (u8)*extra;
-+ switch (adev->preamble_mode) {
-+ case 0: /* long */
-+ adev->preamble_cur = 0;
-+ break;
-+ case 1:
-+ /* short, kick incapable peers */
-+ adev->preamble_cur = 1;
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ client_t *clt = &adev->sta_list[i];
-+ if (!clt->used) continue;
-+ if (!(clt->cap_info & WF_MGMT_CAP_SHORT)) {
-+ clt->used = CLIENT_EMPTY_SLOT_0;
-+ }
-+ }
-+ switch (adev->mode) {
-+ case ACX_MODE_2_STA:
-+ if (adev->ap_client && !adev->ap_client->used) {
-+ /* We kicked our AP :) */
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ }
-+ }
-+ break;
-+ case 2: /* auto. short only if all peers are short-capable */
-+ adev->preamble_cur = 1;
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ client_t *clt = &adev->sta_list[i];
-+ if (!clt->used) continue;
-+ if (!(clt->cap_info & WF_MGMT_CAP_SHORT)) {
-+ adev->preamble_cur = 0;
-+ break;
-+ }
-+ }
-+ break;
-+ }
-+ printk("new short preamble setting: configured %s, active %s\n",
-+ preamble_modes[adev->preamble_mode],
-+ preamble_modes[adev->preamble_cur]);
-+ result = OK;
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_short_preamble
-+*/
-+static int
-+acx_ioctl_get_short_preamble(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ acx_sem_lock(adev);
-+
-+ printk("current short preamble setting: configured %s, active %s\n",
-+ preamble_modes[adev->preamble_mode],
-+ preamble_modes[adev->preamble_cur]);
-+
-+ *extra = (char)adev->preamble_mode;
-+
-+ acx_sem_unlock(adev);
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_antenna
-+**
-+** TX and RX antenna can be set separately but this function good
-+** for testing 0-4 bits
-+*/
-+static int
-+acx_ioctl_set_antenna(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ acx_sem_lock(adev);
-+
-+ printk("old antenna value: 0x%02X (COMBINED bit mask)\n"
-+ "Rx antenna selection:\n"
-+ "0x00 ant. 1\n"
-+ "0x40 ant. 2\n"
-+ "0x80 full diversity\n"
-+ "0xc0 partial diversity\n"
-+ "0x0f dwell time mask (in units of us)\n"
-+ "Tx antenna selection:\n"
-+ "0x00 ant. 2\n" /* yep, those ARE reversed! */
-+ "0x20 ant. 1\n"
-+ "new antenna value: 0x%02X\n",
-+ adev->antenna, (u8)*extra);
-+
-+ adev->antenna = (u8)*extra;
-+ SET_BIT(adev->set_mask, GETSET_ANTENNA);
-+
-+ acx_sem_unlock(adev);
-+
-+ return -EINPROGRESS;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_antenna
-+*/
-+static int
-+acx_ioctl_get_antenna(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ /* no locking. it's pointless to lock a single load */
-+ printk("current antenna value: 0x%02X (COMBINED bit mask)\n"
-+ "Rx antenna selection:\n"
-+ "0x00 ant. 1\n"
-+ "0x40 ant. 2\n"
-+ "0x80 full diversity\n"
-+ "0xc0 partial diversity\n"
-+ "Tx antenna selection:\n"
-+ "0x00 ant. 2\n" /* yep, those ARE reversed! */
-+ "0x20 ant. 1\n", adev->antenna);
-+
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_rx_antenna
-+**
-+** 0 = antenna1; 1 = antenna2; 2 = full diversity; 3 = partial diversity
-+** Could anybody test which antenna is the external one?
-+*/
-+static int
-+acx_ioctl_set_rx_antenna(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if (*extra > 3) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ printk("old antenna value: 0x%02X\n", adev->antenna);
-+
-+ acx_sem_lock(adev);
-+
-+ adev->antenna &= 0x3f;
-+ SET_BIT(adev->antenna, (*extra << 6));
-+ SET_BIT(adev->set_mask, GETSET_ANTENNA);
-+ printk("new antenna value: 0x%02X\n", adev->antenna);
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_tx_antenna
-+**
-+** Arguments: 0 == antenna2; 1 == antenna1;
-+** Could anybody test which antenna is the external one?
-+*/
-+static int
-+acx_ioctl_set_tx_antenna(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if (*extra > 1) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ printk("old antenna value: 0x%02X\n", adev->antenna);
-+
-+ acx_sem_lock(adev);
-+
-+ adev->antenna &= ~0x30;
-+ SET_BIT(adev->antenna, ((*extra & 0x01) << 5));
-+ SET_BIT(adev->set_mask, GETSET_ANTENNA);
-+ printk("new antenna value: 0x%02X\n", adev->antenna);
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_wlansniff
-+**
-+** can we just remove this in favor of monitor mode? --vda
-+*/
-+static int
-+acx_ioctl_wlansniff(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned int *params = (unsigned int*)extra;
-+ unsigned int enable = (unsigned int)(params[0] > 0);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* not using printk() here, since it distorts kismet display
-+ * when printk messages activated */
-+ log(L_IOCTL, "setting monitor to: 0x%02X\n", params[0]);
-+
-+ switch (params[0]) {
-+ case 0:
-+ /* no monitor mode. hmm, should we simply ignore it
-+ * or go back to enabling adev->netdev->type ARPHRD_ETHER? */
-+ break;
-+ case 1:
-+ adev->monitor_type = ARPHRD_IEEE80211_PRISM;
-+ break;
-+ case 2:
-+ adev->monitor_type = ARPHRD_IEEE80211;
-+ break;
-+ }
-+
-+ if (params[0]) {
-+ adev->mode = ACX_MODE_MONITOR;
-+ SET_BIT(adev->set_mask, GETSET_MODE);
-+ }
-+
-+ if (enable) {
-+ adev->channel = params[1];
-+ SET_BIT(adev->set_mask, GETSET_RX);
-+ }
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_unknown11
-+** FIXME: looks like some sort of "iwpriv kick_sta MAC" but it's broken
-+*/
-+static int
-+acx_ioctl_unknown11(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+#ifdef BROKEN
-+ struct iw_param *vwrq = &wrqu->param;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ client_t client;
-+ int result;
-+
-+ acx_sem_lock(adev);
-+ acx_lock(adev, flags);
-+
-+ acx_l_transmit_disassoc(adev, &client);
-+ result = OK;
-+
-+ acx_unlock(adev, flags);
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+#endif
-+ return -EINVAL;
-+}
-+
-+
-+/***********************************************************************
-+** debug helper function to be able to debug various issues relatively easily
-+*/
-+static int
-+acx_ioctl_dbg_set_masks(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ const unsigned int *params = (unsigned int*)extra;
-+ int result;
-+
-+ acx_sem_lock(adev);
-+
-+ log(L_IOCTL, "setting flags in settings mask: "
-+ "get_mask %08X set_mask %08X\n"
-+ "before: get_mask %08X set_mask %08X\n",
-+ params[0], params[1],
-+ adev->get_mask, adev->set_mask);
-+ SET_BIT(adev->get_mask, params[0]);
-+ SET_BIT(adev->set_mask, params[1]);
-+ log(L_IOCTL, "after: get_mask %08X set_mask %08X\n",
-+ adev->get_mask, adev->set_mask);
-+ result = -EINPROGRESS; /* immediately call commit handler */
-+
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+* acx_ioctl_set_rates
-+*
-+* This ioctl takes string parameter. Examples:
-+* iwpriv wlan0 SetRates "1,2"
-+* use 1 and 2 Mbit rates, both are in basic rate set
-+* iwpriv wlan0 SetRates "1,2 5,11"
-+* use 1,2,5.5,11 Mbit rates. 1 and 2 are basic
-+* iwpriv wlan0 SetRates "1,2 5c,11c"
-+* same ('c' means 'CCK modulation' and it is a default for 5 and 11)
-+* iwpriv wlan0 SetRates "1,2 5p,11p"
-+* use 1,2,5.5,11 Mbit, 1,2 are basic. 5 and 11 are using PBCC
-+* iwpriv wlan0 SetRates "1,2,5,11 22p"
-+* use 1,2,5.5,11,22 Mbit. 1,2,5.5 and 11 are basic. 22 is using PBCC
-+* (this is the maximum acx100 can do (modulo x4 mode))
-+* iwpriv wlan0 SetRates "1,2,5,11 22"
-+* same. 802.11 defines only PBCC modulation
-+* for 22 and 33 Mbit rates, so there is no ambiguity
-+* iwpriv wlan0 SetRates "1,2,5,11 6o,9o,12o,18o,24o,36o,48o,54o"
-+* 1,2,5.5 and 11 are basic. 11g OFDM rates are enabled but
-+* they are not in basic rate set. 22 Mbit is disabled.
-+* iwpriv wlan0 SetRates "1,2,5,11 6,9,12,18,24,36,48,54"
-+* same. OFDM is default for 11g rates except 22 and 33 Mbit,
-+* thus 'o' is optional
-+* iwpriv wlan0 SetRates "1,2,5,11 6d,9d,12d,18d,24d,36d,48d,54d"
-+* 1,2,5.5 and 11 are basic. 11g CCK-OFDM rates are enabled
-+* (acx111 does not support CCK-OFDM, driver will reject this cmd)
-+* iwpriv wlan0 SetRates "6,9,12 18,24,36,48,54"
-+* 6,9,12 are basic, rest of 11g rates is enabled. Using OFDM
-+*/
-+#include "setrate.c"
-+
-+/* disallow: 33Mbit (unsupported by hw) */
-+/* disallow: CCKOFDM (unsupported by hw) */
-+static int
-+acx111_supported(int mbit, int modulation, void *opaque)
-+{
-+ if (mbit==33) return -ENOTSUPP;
-+ if (modulation==DOT11_MOD_CCKOFDM) return -ENOTSUPP;
-+ return OK;
-+}
-+
-+static const u16
-+acx111mask[] = {
-+ [DOT11_RATE_1 ] = RATE111_1 ,
-+ [DOT11_RATE_2 ] = RATE111_2 ,
-+ [DOT11_RATE_5 ] = RATE111_5 ,
-+ [DOT11_RATE_11] = RATE111_11,
-+ [DOT11_RATE_22] = RATE111_22,
-+ /* [DOT11_RATE_33] = */
-+ [DOT11_RATE_6 ] = RATE111_6 ,
-+ [DOT11_RATE_9 ] = RATE111_9 ,
-+ [DOT11_RATE_12] = RATE111_12,
-+ [DOT11_RATE_18] = RATE111_18,
-+ [DOT11_RATE_24] = RATE111_24,
-+ [DOT11_RATE_36] = RATE111_36,
-+ [DOT11_RATE_48] = RATE111_48,
-+ [DOT11_RATE_54] = RATE111_54,
-+};
-+
-+static u32
-+acx111_gen_mask(int mbit, int modulation, void *opaque)
-+{
-+ /* lower 16 bits show selected 1, 2, CCK and OFDM rates */
-+ /* upper 16 bits show selected PBCC rates */
-+ u32 m = acx111mask[rate_mbit2enum(mbit)];
-+ if (modulation==DOT11_MOD_PBCC)
-+ return m<<16;
-+ return m;
-+}
-+
-+static int
-+verify_rate(u32 rate, int chip_type)
-+{
-+ /* never happens. be paranoid */
-+ if (!rate) return -EINVAL;
-+
-+ /* disallow: mixing PBCC and CCK at 5 and 11Mbit
-+ ** (can be supported, but needs complicated handling in tx code) */
-+ if (( rate & ((RATE111_11+RATE111_5)<<16) )
-+ && ( rate & (RATE111_11+RATE111_5) )
-+ ) {
-+ return -ENOTSUPP;
-+ }
-+ if (CHIPTYPE_ACX100 == chip_type) {
-+ if ( rate & ~(RATE111_ACX100_COMPAT+(RATE111_ACX100_COMPAT<<16)) )
-+ return -ENOTSUPP;
-+ }
-+ return 0;
-+}
-+
-+static int
-+acx_ioctl_set_rates(struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ int result;
-+ u32 brate = 0, orate = 0; /* basic, operational rate set */
-+
-+ FN_ENTER;
-+
-+ log(L_IOCTL, "set_rates %s\n", extra);
-+ result = fill_ratemasks(extra, &brate, &orate,
-+ acx111_supported, acx111_gen_mask, 0);
-+ if (result) goto end;
-+ SET_BIT(orate, brate);
-+ log(L_IOCTL, "brate %08X orate %08X\n", brate, orate);
-+
-+ result = verify_rate(brate, adev->chip_type);
-+ if (result) goto end;
-+ result = verify_rate(orate, adev->chip_type);
-+ if (result) goto end;
-+
-+ acx_sem_lock(adev);
-+ acx_lock(adev, flags);
-+
-+ adev->rate_basic = brate;
-+ adev->rate_oper = orate;
-+ /* TODO: ideally, we shall monitor highest basic rate
-+ ** which was successfully sent to every peer
-+ ** (say, last we checked, everybody could hear 5.5 Mbits)
-+ ** and use that for bcasts when we want to reach all peers.
-+ ** For beacons, we probably shall use lowest basic rate
-+ ** because we want to reach all *potential* new peers too */
-+ adev->rate_bcast = 1 << lowest_bit(brate);
-+ if (IS_ACX100(adev))
-+ adev->rate_bcast100 = acx_rate111to100(adev->rate_bcast);
-+ adev->rate_auto = !has_only_one_bit(orate);
-+ acx_l_update_client_rates(adev, orate);
-+ /* TODO: get rid of ratevector, build it only when needed */
-+ acx_l_update_ratevector(adev);
-+
-+ /* Do/don't do tx rate fallback; beacon contents and rate */
-+ SET_BIT(adev->set_mask, SET_RATE_FALLBACK|SET_TEMPLATES);
-+ result = -EINPROGRESS;
-+
-+ acx_unlock(adev, flags);
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_phy_chan_busy_percentage
-+*/
-+static int
-+acx_ioctl_get_phy_chan_busy_percentage(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ struct {
-+ u16 type;
-+ u16 len;
-+ u32 busytime;
-+ u32 totaltime;
-+ } ACX_PACKED usage;
-+ int result;
-+
-+ acx_sem_lock(adev);
-+
-+ if (OK != acx_s_interrogate(adev, &usage, ACX1xx_IE_MEDIUM_USAGE)) {
-+ result = NOT_OK;
-+ goto end_unlock;
-+ }
-+
-+ usage.busytime = le32_to_cpu(usage.busytime);
-+ usage.totaltime = le32_to_cpu(usage.totaltime);
-+
-+ /* yes, this is supposed to be "Medium" (singular of media),
-+ not "average"! OK, reword the message to make it obvious... */
-+ printk("%s: busy percentage of medium (since last invocation): %d%% "
-+ "(%u of %u microseconds)\n",
-+ ndev->name,
-+ usage.busytime / ((usage.totaltime / 100) + 1),
-+ usage.busytime, usage.totaltime);
-+
-+ result = OK;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_ed_threshold
-+*/
-+static inline int
-+acx_ioctl_set_ed_threshold(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ acx_sem_lock(adev);
-+
-+ printk("old ED threshold value: %d\n", adev->ed_threshold);
-+ adev->ed_threshold = (unsigned char)*extra;
-+ printk("new ED threshold value: %d\n", (unsigned char)*extra);
-+ SET_BIT(adev->set_mask, GETSET_ED_THRESH);
-+
-+ acx_sem_unlock(adev);
-+
-+ return -EINPROGRESS;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_cca
-+*/
-+static inline int
-+acx_ioctl_set_cca(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ acx_sem_lock(adev);
-+
-+ printk("old CCA value: 0x%02X\n", adev->cca);
-+ adev->cca = (unsigned char)*extra;
-+ printk("new CCA value: 0x%02X\n", (unsigned char)*extra);
-+ SET_BIT(adev->set_mask, GETSET_CCA);
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static const char * const
-+scan_modes[] = { "active", "passive", "background" };
-+
-+static void
-+acx_print_scan_params(acx_device_t *adev, const char* head)
-+{
-+ printk("%s: %smode %d (%s), min chan time %dTU, "
-+ "max chan time %dTU, max scan rate byte: %d\n",
-+ adev->ndev->name, head,
-+ adev->scan_mode, scan_modes[adev->scan_mode],
-+ adev->scan_probe_delay, adev->scan_duration, adev->scan_rate);
-+}
-+
-+static int
-+acx_ioctl_set_scan_params(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+ const int *params = (int *)extra;
-+
-+ acx_sem_lock(adev);
-+
-+ acx_print_scan_params(adev, "old scan parameters: ");
-+ if ((params[0] != -1) && (params[0] >= 0) && (params[0] <= 2))
-+ adev->scan_mode = params[0];
-+ if (params[1] != -1)
-+ adev->scan_probe_delay = params[1];
-+ if (params[2] != -1)
-+ adev->scan_duration = params[2];
-+ if ((params[3] != -1) && (params[3] <= 255))
-+ adev->scan_rate = params[3];
-+ acx_print_scan_params(adev, "new scan parameters: ");
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+static int
-+acx_ioctl_get_scan_params(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+ int *params = (int *)extra;
-+
-+ acx_sem_lock(adev);
-+
-+ acx_print_scan_params(adev, "current scan parameters: ");
-+ params[0] = adev->scan_mode;
-+ params[1] = adev->scan_probe_delay;
-+ params[2] = adev->scan_duration;
-+ params[3] = adev->scan_rate;
-+ result = OK;
-+
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx100_ioctl_set_led_power(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ static const char * const led_modes[] = { "off", "on", "LinkQuality" };
-+
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ acx_sem_lock(adev);
-+
-+ printk("%s: power LED status: old %d (%s), ",
-+ ndev->name,
-+ adev->led_power,
-+ led_modes[adev->led_power]);
-+ adev->led_power = extra[0];
-+ if (adev->led_power > 2) adev->led_power = 2;
-+ printk("new %d (%s)\n",
-+ adev->led_power,
-+ led_modes[adev->led_power]);
-+
-+ if (adev->led_power == 2) {
-+ printk("%s: max link quality setting: old %d, ",
-+ ndev->name, adev->brange_max_quality);
-+ if (extra[1])
-+ adev->brange_max_quality = extra[1];
-+ printk("new %d\n", adev->brange_max_quality);
-+ }
-+
-+ SET_BIT(adev->set_mask, GETSET_LED_POWER);
-+
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static inline int
-+acx100_ioctl_get_led_power(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ acx_sem_lock(adev);
-+
-+ extra[0] = adev->led_power;
-+ if (adev->led_power == 2)
-+ extra[1] = adev->brange_max_quality;
-+ else
-+ extra[1] = -1;
-+
-+ acx_sem_unlock(adev);
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx111_ioctl_info(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->param;
-+ if (!IS_PCI(ndev2adev(ndev)))
-+ return OK;
-+ return acx111pci_ioctl_info(ndev, info, vwrq, extra);
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx100_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->param;
-+ if (IS_USB(ndev2adev(ndev))) {
-+ printk("acx: set_phy_amp_bias() is not supported on USB\n");
-+ return OK;
-+ }
-+#ifdef ACX_MEM
-+ return acx100mem_ioctl_set_phy_amp_bias(ndev, info, vwrq, extra);
-+#else
-+ return acx100pci_ioctl_set_phy_amp_bias(ndev, info, vwrq, extra);
-+#endif
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static const iw_handler acx_ioctl_handler[] =
-+{
-+ acx_ioctl_commit, /* SIOCSIWCOMMIT */
-+ acx_ioctl_get_name, /* SIOCGIWNAME */
-+ NULL, /* SIOCSIWNWID */
-+ NULL, /* SIOCGIWNWID */
-+ acx_ioctl_set_freq, /* SIOCSIWFREQ */
-+ acx_ioctl_get_freq, /* SIOCGIWFREQ */
-+ acx_ioctl_set_mode, /* SIOCSIWMODE */
-+ acx_ioctl_get_mode, /* SIOCGIWMODE */
-+ acx_ioctl_set_sens, /* SIOCSIWSENS */
-+ acx_ioctl_get_sens, /* SIOCGIWSENS */
-+ NULL, /* SIOCSIWRANGE */
-+ acx_ioctl_get_range, /* SIOCGIWRANGE */
-+ NULL, /* SIOCSIWPRIV */
-+ NULL, /* SIOCGIWPRIV */
-+ NULL, /* SIOCSIWSTATS */
-+ NULL, /* SIOCGIWSTATS */
-+#if IW_HANDLER_VERSION > 4
-+ iw_handler_set_spy, /* SIOCSIWSPY */
-+ iw_handler_get_spy, /* SIOCGIWSPY */
-+ iw_handler_set_thrspy, /* SIOCSIWTHRSPY */
-+ iw_handler_get_thrspy, /* SIOCGIWTHRSPY */
-+#else /* IW_HANDLER_VERSION > 4 */
-+#ifdef WIRELESS_SPY
-+ NULL /* acx_ioctl_set_spy FIXME */, /* SIOCSIWSPY */
-+ NULL /* acx_ioctl_get_spy */, /* SIOCGIWSPY */
-+#else /* WSPY */
-+ NULL, /* SIOCSIWSPY */
-+ NULL, /* SIOCGIWSPY */
-+#endif /* WSPY */
-+ NULL, /* [nothing] */
-+ NULL, /* [nothing] */
-+#endif /* IW_HANDLER_VERSION > 4 */
-+ acx_ioctl_set_ap, /* SIOCSIWAP */
-+ acx_ioctl_get_ap, /* SIOCGIWAP */
-+ NULL, /* [nothing] */
-+ acx_ioctl_get_aplist, /* SIOCGIWAPLIST */
-+ acx_ioctl_set_scan, /* SIOCSIWSCAN */
-+ acx_ioctl_get_scan, /* SIOCGIWSCAN */
-+ acx_ioctl_set_essid, /* SIOCSIWESSID */
-+ acx_ioctl_get_essid, /* SIOCGIWESSID */
-+ acx_ioctl_set_nick, /* SIOCSIWNICKN */
-+ acx_ioctl_get_nick, /* SIOCGIWNICKN */
-+ NULL, /* [nothing] */
-+ NULL, /* [nothing] */
-+ acx_ioctl_set_rate, /* SIOCSIWRATE */
-+ acx_ioctl_get_rate, /* SIOCGIWRATE */
-+ acx_ioctl_set_rts, /* SIOCSIWRTS */
-+ acx_ioctl_get_rts, /* SIOCGIWRTS */
-+#if ACX_FRAGMENTATION
-+ acx_ioctl_set_frag, /* SIOCSIWFRAG */
-+ acx_ioctl_get_frag, /* SIOCGIWFRAG */
-+#else
-+ NULL, /* SIOCSIWFRAG */
-+ NULL, /* SIOCGIWFRAG */
-+#endif
-+ acx_ioctl_set_txpow, /* SIOCSIWTXPOW */
-+ acx_ioctl_get_txpow, /* SIOCGIWTXPOW */
-+ acx_ioctl_set_retry, /* SIOCSIWRETRY */
-+ acx_ioctl_get_retry, /* SIOCGIWRETRY */
-+ acx_ioctl_set_encode, /* SIOCSIWENCODE */
-+ acx_ioctl_get_encode, /* SIOCGIWENCODE */
-+ acx_ioctl_set_power, /* SIOCSIWPOWER */
-+ acx_ioctl_get_power, /* SIOCGIWPOWER */
-+};
-+
-+
-+/***********************************************************************
-+*/
-+
-+/* if you plan to reorder something, make sure to reorder all other places
-+ * accordingly! */
-+/* SET/GET convention: SETs must have even position, GETs odd */
-+#define ACX100_IOCTL SIOCIWFIRSTPRIV
-+enum {
-+ ACX100_IOCTL_DEBUG = ACX100_IOCTL,
-+ ACX100_IOCTL_GET__________UNUSED1,
-+ ACX100_IOCTL_SET_PLED,
-+ ACX100_IOCTL_GET_PLED,
-+ ACX100_IOCTL_SET_RATES,
-+ ACX100_IOCTL_LIST_DOM,
-+ ACX100_IOCTL_SET_DOM,
-+ ACX100_IOCTL_GET_DOM,
-+ ACX100_IOCTL_SET_SCAN_PARAMS,
-+ ACX100_IOCTL_GET_SCAN_PARAMS,
-+ ACX100_IOCTL_SET_PREAMB,
-+ ACX100_IOCTL_GET_PREAMB,
-+ ACX100_IOCTL_SET_ANT,
-+ ACX100_IOCTL_GET_ANT,
-+ ACX100_IOCTL_RX_ANT,
-+ ACX100_IOCTL_TX_ANT,
-+ ACX100_IOCTL_SET_PHY_AMP_BIAS,
-+ ACX100_IOCTL_GET_PHY_CHAN_BUSY,
-+ ACX100_IOCTL_SET_ED,
-+ ACX100_IOCTL_GET__________UNUSED3,
-+ ACX100_IOCTL_SET_CCA,
-+ ACX100_IOCTL_GET__________UNUSED4,
-+ ACX100_IOCTL_MONITOR,
-+ ACX100_IOCTL_TEST,
-+ ACX100_IOCTL_DBG_SET_MASKS,
-+ ACX111_IOCTL_INFO,
-+ ACX100_IOCTL_DBG_SET_IO,
-+ ACX100_IOCTL_DBG_GET_IO
-+};
-+
-+
-+static const iw_handler acx_ioctl_private_handler[] =
-+{
-+#if ACX_DEBUG
-+[ACX100_IOCTL_DEBUG - ACX100_IOCTL] = acx_ioctl_set_debug,
-+#endif
-+[ACX100_IOCTL_SET_PLED - ACX100_IOCTL] = acx100_ioctl_set_led_power,
-+[ACX100_IOCTL_GET_PLED - ACX100_IOCTL] = acx100_ioctl_get_led_power,
-+[ACX100_IOCTL_SET_RATES - ACX100_IOCTL] = acx_ioctl_set_rates,
-+[ACX100_IOCTL_LIST_DOM - ACX100_IOCTL] = acx_ioctl_list_reg_domain,
-+[ACX100_IOCTL_SET_DOM - ACX100_IOCTL] = acx_ioctl_set_reg_domain,
-+[ACX100_IOCTL_GET_DOM - ACX100_IOCTL] = acx_ioctl_get_reg_domain,
-+[ACX100_IOCTL_SET_SCAN_PARAMS - ACX100_IOCTL] = acx_ioctl_set_scan_params,
-+[ACX100_IOCTL_GET_SCAN_PARAMS - ACX100_IOCTL] = acx_ioctl_get_scan_params,
-+[ACX100_IOCTL_SET_PREAMB - ACX100_IOCTL] = acx_ioctl_set_short_preamble,
-+[ACX100_IOCTL_GET_PREAMB - ACX100_IOCTL] = acx_ioctl_get_short_preamble,
-+[ACX100_IOCTL_SET_ANT - ACX100_IOCTL] = acx_ioctl_set_antenna,
-+[ACX100_IOCTL_GET_ANT - ACX100_IOCTL] = acx_ioctl_get_antenna,
-+[ACX100_IOCTL_RX_ANT - ACX100_IOCTL] = acx_ioctl_set_rx_antenna,
-+[ACX100_IOCTL_TX_ANT - ACX100_IOCTL] = acx_ioctl_set_tx_antenna,
-+[ACX100_IOCTL_SET_PHY_AMP_BIAS - ACX100_IOCTL] = acx100_ioctl_set_phy_amp_bias,
-+[ACX100_IOCTL_GET_PHY_CHAN_BUSY - ACX100_IOCTL] = acx_ioctl_get_phy_chan_busy_percentage,
-+[ACX100_IOCTL_SET_ED - ACX100_IOCTL] = acx_ioctl_set_ed_threshold,
-+[ACX100_IOCTL_SET_CCA - ACX100_IOCTL] = acx_ioctl_set_cca,
-+[ACX100_IOCTL_MONITOR - ACX100_IOCTL] = acx_ioctl_wlansniff,
-+[ACX100_IOCTL_TEST - ACX100_IOCTL] = acx_ioctl_unknown11,
-+[ACX100_IOCTL_DBG_SET_MASKS - ACX100_IOCTL] = acx_ioctl_dbg_set_masks,
-+[ACX111_IOCTL_INFO - ACX100_IOCTL] = acx111_ioctl_info,
-+};
-+
-+
-+static const struct iw_priv_args acx_ioctl_private_args[] = {
-+#if ACX_DEBUG
-+{ cmd : ACX100_IOCTL_DEBUG,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetDebug" },
-+#endif
-+{ cmd : ACX100_IOCTL_SET_PLED,
-+ set_args : IW_PRIV_TYPE_BYTE | 2,
-+ get_args : 0,
-+ name : "SetLEDPower" },
-+{ cmd : ACX100_IOCTL_GET_PLED,
-+ set_args : 0,
-+ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 2,
-+ name : "GetLEDPower" },
-+{ cmd : ACX100_IOCTL_SET_RATES,
-+ set_args : IW_PRIV_TYPE_CHAR | 256,
-+ get_args : 0,
-+ name : "SetRates" },
-+{ cmd : ACX100_IOCTL_LIST_DOM,
-+ set_args : 0,
-+ get_args : 0,
-+ name : "ListRegDomain" },
-+{ cmd : ACX100_IOCTL_SET_DOM,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetRegDomain" },
-+{ cmd : ACX100_IOCTL_GET_DOM,
-+ set_args : 0,
-+ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ name : "GetRegDomain" },
-+{ cmd : ACX100_IOCTL_SET_SCAN_PARAMS,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4,
-+ get_args : 0,
-+ name : "SetScanParams" },
-+{ cmd : ACX100_IOCTL_GET_SCAN_PARAMS,
-+ set_args : 0,
-+ get_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4,
-+ name : "GetScanParams" },
-+{ cmd : ACX100_IOCTL_SET_PREAMB,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetSPreamble" },
-+{ cmd : ACX100_IOCTL_GET_PREAMB,
-+ set_args : 0,
-+ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ name : "GetSPreamble" },
-+{ cmd : ACX100_IOCTL_SET_ANT,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetAntenna" },
-+{ cmd : ACX100_IOCTL_GET_ANT,
-+ set_args : 0,
-+ get_args : 0,
-+ name : "GetAntenna" },
-+{ cmd : ACX100_IOCTL_RX_ANT,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetRxAnt" },
-+{ cmd : ACX100_IOCTL_TX_ANT,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetTxAnt" },
-+{ cmd : ACX100_IOCTL_SET_PHY_AMP_BIAS,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetPhyAmpBias"},
-+{ cmd : ACX100_IOCTL_GET_PHY_CHAN_BUSY,
-+ set_args : 0,
-+ get_args : 0,
-+ name : "GetPhyChanBusy" },
-+{ cmd : ACX100_IOCTL_SET_ED,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetED" },
-+{ cmd : ACX100_IOCTL_SET_CCA,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetCCA" },
-+{ cmd : ACX100_IOCTL_MONITOR,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2,
-+ get_args : 0,
-+ name : "monitor" },
-+{ cmd : ACX100_IOCTL_TEST,
-+ set_args : 0,
-+ get_args : 0,
-+ name : "Test" },
-+{ cmd : ACX100_IOCTL_DBG_SET_MASKS,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2,
-+ get_args : 0,
-+ name : "DbgSetMasks" },
-+{ cmd : ACX111_IOCTL_INFO,
-+ set_args : 0,
-+ get_args : 0,
-+ name : "GetAcx111Info" },
-+{ cmd : ACX100_IOCTL_DBG_SET_IO,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4,
-+ get_args : 0,
-+ name : "DbgSetIO" },
-+{ cmd : ACX100_IOCTL_DBG_GET_IO,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3,
-+ get_args : 0,
-+ name : "DbgGetIO" },
-+};
-+
-+
-+const struct iw_handler_def acx_ioctl_handler_def =
-+{
-+ .num_standard = VEC_SIZE(acx_ioctl_handler),
-+ .num_private = VEC_SIZE(acx_ioctl_private_handler),
-+ .num_private_args = VEC_SIZE(acx_ioctl_private_args),
-+ .standard = (iw_handler *) acx_ioctl_handler,
-+ .private = (iw_handler *) acx_ioctl_private_handler,
-+ .private_args = (struct iw_priv_args *) acx_ioctl_private_args,
-+#if IW_HANDLER_VERSION > 5
-+ .get_wireless_stats = acx_e_get_wireless_stats
-+#endif /* IW > 5 */
-+};
-Index: linux-2.6.22/drivers/net/wireless/acx/Kconfig
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/Kconfig 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,113 @@
-+config ACX
-+ tristate "TI acx100/acx111 802.11b/g wireless chipsets"
-+ depends on NET_RADIO && EXPERIMENTAL
-+ select FW_LOADER
-+ ---help---
-+ A driver for 802.11b/g wireless cards based on
-+ Texas Instruments acx100 and acx111 chipsets.
-+
-+ This driver supports Host AP mode that allows
-+ your computer to act as an IEEE 802.11 access point.
-+ This driver is new and experimental.
-+
-+ Texas Instruments did not take part in development of this driver
-+ in any way, shape or form.
-+
-+ The driver can be compiled as a module and will be named "acx".
-+
-+config ACX_PCI
-+ bool "TI acx100/acx111 802.11b/g PCI"
-+ depends on ACX && PCI
-+ ---help---
-+ Include PCI and CardBus support in acx.
-+
-+ acx chipsets need their firmware loaded at startup.
-+ You will need to provide a firmware image via hotplug.
-+
-+ Firmware may be in a form of single image 40-100kb in size
-+ (a 'combined' firmware) or two images - main image
-+ (again 40-100kb) and radio image (~10kb or less).
-+
-+ Firmware images are requested from hotplug using following names:
-+
-+ tiacx100 - main firmware image for acx100 chipset
-+ tiacx100rNN - radio acx100 firmware for radio type NN
-+ tiacx100cNN - combined acx100 firmware for radio type NN
-+ tiacx111 - main acx111 firmware
-+ tiacx111rNN - radio acx111 firmware for radio type NN
-+ tiacx111cNN - combined acx111 firmware for radio type NN
-+
-+ Driver will attempt to load combined image first.
-+ If no such image is found, it will try to load main image
-+ and radio image instead.
-+
-+ Firmware files are not covered by GPL and are not distributed
-+ with this driver for legal reasons.
-+
-+config ACX_USB
-+ bool "TI acx100/acx111 802.11b/g USB"
-+ depends on ACX && (USB=y || USB=ACX)
-+ ---help---
-+ Include USB support in acx.
-+
-+ There is only one currently known device in this category,
-+ D-Link DWL-120+, but newer devices seem to be on the horizon.
-+
-+ acx chipsets need their firmware loaded at startup.
-+ You will need to provide a firmware image via hotplug.
-+
-+ Firmware for USB device is requested from hotplug
-+ by the 'tiacx100usb' name.
-+
-+ Firmware files are not covered by GPL and are not distributed
-+ with this driver for legal reasons.
-+
-+config ACX_MEM
-+ bool "TI acx100/acx111 802.11b/g memory mapped slave 16 interface"
-+ depends on ACX
-+ ---help---
-+ acx chipsets need their firmware loaded at startup.
-+ You will need to provide a firmware image via hotplug.
-+
-+ Firmware for USB device is requested from hotplug
-+ by the 'tiacx100usb' name.
-+
-+ Firmware files are not covered by GPL and are not distributed
-+ with this driver for legal reasons.
-+
-+config ACX_CS
-+ bool "TI acx100/acx111 802.11b/g cardbus interface"
-+ depends on ACX
-+ ---help---
-+ acx chipsets need their firmware loaded at startup.
-+ You will need to provide a firmware image via hotplug.
-+
-+ This driver is based on memory mapped driver.
-+
-+ Firmware files are not covered by GPL and are not distributed
-+ with this driver for legal reasons.
-+
-+config ACX_HX4700
-+ tristate "ACX support for the iPAQ hx4700 using ACX_MEM"
-+ depends on HX4700_CORE && ACX_MEM
-+ ---help---
-+ Include memory interface support in acx for the iPAQ hx4700.
-+
-+config ACX_HTCUNIVERSAL
-+ tristate "ACX support for the HTC Universal using ACX_MEM"
-+ depends on HTCUNIVERSAL_CORE && HTC_ASIC3 && ACX_MEM
-+ ---help---
-+ Include memory interface support in acx for the HTC Universal.
-+
-+config ACX_HTCSABLE
-+ tristate "ACX support for the HTC Sable (IPAQ hw6915) using ACX_MEM"
-+ depends on MACH_HW6900 && HTC_ASIC3 && ACX_MEM
-+ ---help---
-+ Include memory interface support in acx for the HTC Sable (IPAQ hw6915).
-+
-+config ACX_RX3000
-+ tristate "ACX support for the iPAQ RX3000 using ACX_MEM"
-+ depends on MACH_RX3715 && ACX_MEM && LEDS_ASIC3
-+ ---help---
-+ Include memory interface support in acx for the IPAQ RX3000.
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/Makefile 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,21 @@
-+#obj-m += acx.o
-+
-+#acx-obj-y += pci.o
-+#acx-obj-y += usb.o
-+
-+#acx-objs := wlan.o conv.o ioctl.o common.o $(acx-obj-y)
-+
-+# Use this if you have proper Kconfig integration:
-+
-+obj-$(CONFIG_ACX) += acx.o
-+obj-$(CONFIG_ACX_HX4700) += hx4700_acx.o
-+obj-$(CONFIG_ACX_HTCUNIVERSAL) += htcuniversal_acx.o
-+obj-$(CONFIG_ACX_HTCSABLE) += htcsable_acx.o
-+obj-$(CONFIG_ACX_RX3000) += rx3000_acx.o
-+#
-+acx-obj-$(CONFIG_ACX_PCI) += pci.o
-+acx-obj-$(CONFIG_ACX_USB) += usb.o
-+acx-obj-$(CONFIG_ACX_MEM) += mem.o
-+acx-obj-$(CONFIG_ACX_CS) += cs.o
-+#
-+acx-objs := wlan.o conv.o ioctl.o common.o $(acx-obj-y)
-Index: linux-2.6.22/drivers/net/wireless/acx/mem.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/mem.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,5363 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+**
-+** Slave memory interface support:
-+**
-+** Todd Blumer - SDG Systems
-+** Bill Reese - HP
-+** Eric McCorkle - Shadowsun
-+*/
-+#define ACX_MEM 1
-+
-+/*
-+ * non-zero makes it dump the ACX memory to the console then
-+ * panic when you cat /proc/driver/acx_wlan0_diag
-+ */
-+#define DUMP_MEM_DEFINED 1
-+
-+#define DUMP_MEM_DURING_DIAG 0
-+#define DUMP_IF_SLOW 0
-+
-+#define PATCH_AROUND_BAD_SPOTS 1
-+#define HX4700_FIRMWARE_CHECKSUM 0x0036862e
-+#define HX4700_ALTERNATE_FIRMWARE_CHECKSUM 0x00368a75
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+
-+/* Linux 2.6.18+ uses <linux/utsrelease.h> */
-+#ifndef UTS_RELEASE
-+#include <linux/utsrelease.h>
-+#endif
-+
-+#include <linux/compiler.h> /* required for Lx 2.6.8 ?? */
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/sched.h>
-+#include <linux/types.h>
-+#include <linux/skbuff.h>
-+#include <linux/slab.h>
-+#include <linux/if_arp.h>
-+#include <linux/irq.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+#include <linux/netdevice.h>
-+#include <linux/ioport.h>
-+#include <linux/pci.h>
-+#include <linux/platform_device.h>
-+#include <linux/pm.h>
-+#include <linux/vmalloc.h>
-+#include <linux/delay.h>
-+#include <linux/workqueue.h>
-+#include <linux/inetdevice.h>
-+
-+#include "acx.h"
-+#include "acx_hw.h"
-+
-+/***********************************************************************
-+*/
-+
-+#define CARD_EEPROM_ID_SIZE 6
-+
-+#include <asm/io.h>
-+
-+#define REG_ACX_VENDOR_ID 0x900
-+/*
-+ * This is the vendor id on the HX4700, anyway
-+ */
-+#define ACX_VENDOR_ID 0x8400104c
-+
-+typedef enum {
-+ ACX_SOFT_RESET = 0,
-+
-+ ACX_SLV_REG_ADDR,
-+ ACX_SLV_REG_DATA,
-+ ACX_SLV_REG_ADATA,
-+
-+ ACX_SLV_MEM_CP,
-+ ACX_SLV_MEM_ADDR,
-+ ACX_SLV_MEM_DATA,
-+ ACX_SLV_MEM_CTL,
-+} acxreg_t;
-+
-+/***********************************************************************
-+*/
-+static void acxmem_i_tx_timeout(struct net_device *ndev);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id);
-+#else
-+static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-+#endif
-+static void acxmem_i_set_multicast_list(struct net_device *ndev);
-+
-+static int acxmem_e_open(struct net_device *ndev);
-+static int acxmem_e_close(struct net_device *ndev);
-+static void acxmem_s_up(struct net_device *ndev);
-+static void acxmem_s_down(struct net_device *ndev);
-+
-+static void dump_acxmem (acx_device_t *adev, u32 start, int length);
-+static int acxmem_complete_hw_reset (acx_device_t *adev);
-+static void acxmem_s_delete_dma_regions(acx_device_t *adev);
-+
-+static struct platform_device *resume_pdev;
-+
-+static int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+acxmem_e_suspend(struct platform_device *pdev, pm_message_t state);
-+#else
-+acxmem_e_suspend(struct device *pdev, u32 state);
-+#endif
-+static void
-+fw_resumer(struct work_struct *notused);
-+//fw_resumer( void *data );
-+
-+static int acx_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)
-+{
-+ struct net_device *ndev = ptr;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ /*
-+ * Upper level ioctl() handlers send a NETDEV_CHANGEADDR if the MAC address changes.
-+ */
-+
-+ if (NETDEV_CHANGEADDR == event) {
-+ /*
-+ * the upper layers put the new MAC address in ndev->dev_addr; we just copy
-+ * it over and update the ACX with it.
-+ */
-+ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr);
-+ adev->set_mask |= GETSET_STATION_ID;
-+ acx_s_update_card_settings (adev);
-+ }
-+
-+ return 0;
-+}
-+
-+static struct notifier_block acx_netdev_notifier = {
-+ .notifier_call = acx_netdev_event,
-+};
-+
-+/***********************************************************************
-+** Register access
-+*/
-+
-+/* Pick one */
-+/* #define INLINE_IO static */
-+#define INLINE_IO static inline
-+
-+INLINE_IO u32
-+read_id_register (acx_device_t *adev)
-+{
-+ writel (0x24, &adev->iobase[ACX_SLV_REG_ADDR]);
-+ return readl (&adev->iobase[ACX_SLV_REG_DATA]);
-+}
-+
-+INLINE_IO u32
-+read_reg32(acx_device_t *adev, unsigned int offset)
-+{
-+ u32 val;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ return readl(((u8*)adev->iobase) + addr);
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ val = readl( &adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return val;
-+}
-+
-+INLINE_IO u16
-+read_reg16(acx_device_t *adev, unsigned int offset)
-+{
-+ u16 lo;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ return readw(((u8 *) adev->iobase) + addr);
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ lo = readw( (u16 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return lo;
-+}
-+
-+INLINE_IO u8
-+read_reg8(acx_device_t *adev, unsigned int offset)
-+{
-+ u8 lo;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20)
-+ return readb(((u8 *)adev->iobase) + addr);
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ lo = readw( (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return (u8)lo;
-+}
-+
-+INLINE_IO void
-+write_reg32(acx_device_t *adev, unsigned int offset, u32 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writel(val, ((u8*)adev->iobase) + addr);
-+ return;
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writel( val, &adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+INLINE_IO void
-+write_reg16(acx_device_t *adev, unsigned int offset, u16 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writew(val, ((u8 *)adev->iobase) + addr);
-+ return;
-+ }
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writew( val, (u16 *) &adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+INLINE_IO void
-+write_reg8(acx_device_t *adev, unsigned int offset, u8 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writeb(val, ((u8 *) adev->iobase) + addr);
-+ return;
-+ }
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writeb( val, (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+/* Handle PCI posting properly:
-+ * Make sure that writes reach the adapter in case they require to be executed
-+ * *before* the next write, by reading a random (and safely accessible) register.
-+ * This call has to be made if there is no read following (which would flush the data
-+ * to the adapter), yet the written data has to reach the adapter immediately. */
-+INLINE_IO void
-+write_flush(acx_device_t *adev)
-+{
-+ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */
-+ /* faster version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should also be safe): */
-+ (void) readl(adev->iobase);
-+}
-+
-+INLINE_IO void
-+set_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
-+ u32 tmp;
-+
-+ tmp = read_reg32 (adev, offset);
-+ tmp = tmp | bits;
-+ write_reg32 (adev, offset, tmp);
-+ write_flush (adev);
-+}
-+
-+INLINE_IO void
-+clear_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
-+ u32 tmp;
-+
-+ tmp = read_reg32 (adev, offset);
-+ tmp = tmp & ~bits;
-+ write_reg32 (adev, offset, tmp);
-+ write_flush (adev);
-+}
-+
-+/*
-+ * Copy from PXA memory to the ACX memory. This assumes both the PXA and ACX
-+ * addresses are 32 bit aligned. Count is in bytes.
-+ */
-+INLINE_IO void
-+write_slavemem32 (acx_device_t *adev, u32 slave_address, u32 val)
-+{
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, val);
-+}
-+
-+INLINE_IO u32
-+read_slavemem32 (acx_device_t *adev, u32 slave_address)
-+{
-+ u32 val;
-+
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
-+ udelay (10);
-+ val = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+
-+ return val;
-+}
-+
-+INLINE_IO void
-+write_slavemem8 (acx_device_t *adev, u32 slave_address, u8 val)
-+{
-+ u32 data;
-+ u32 base;
-+ int offset;
-+
-+ /*
-+ * Get the word containing the target address and the byte offset in that word.
-+ */
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+ data &= ~(0xff << offset);
-+ data |= val << offset;
-+ write_slavemem32 (adev, base, data);
-+}
-+
-+INLINE_IO u8
-+read_slavemem8 (acx_device_t *adev, u32 slave_address)
-+{
-+ u8 val;
-+ u32 base;
-+ u32 data;
-+ int offset;
-+
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+
-+ val = (data >> offset) & 0xff;
-+
-+ return val;
-+}
-+
-+/*
-+ * doesn't split across word boundaries
-+ */
-+INLINE_IO void
-+write_slavemem16 (acx_device_t *adev, u32 slave_address, u16 val)
-+{
-+ u32 data;
-+ u32 base;
-+ int offset;
-+
-+ /*
-+ * Get the word containing the target address and the byte offset in that word.
-+ */
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+ data &= ~(0xffff << offset);
-+ data |= val << offset;
-+ write_slavemem32 (adev, base, data);
-+}
-+
-+/*
-+ * doesn't split across word boundaries
-+ */
-+INLINE_IO u16
-+read_slavemem16 (acx_device_t *adev, u32 slave_address)
-+{
-+ u16 val;
-+ u32 base;
-+ u32 data;
-+ int offset;
-+
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+
-+ val = (data >> offset) & 0xffff;
-+
-+ return val;
-+}
-+
-+/*
-+ * Copy from slave memory
-+ *
-+ * TODO - rewrite using address autoincrement, handle partial words
-+ */
-+void
-+copy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count) {
-+ u32 tmp = 0;
-+ u8 *ptmp = (u8 *) &tmp;
-+
-+ /*
-+ * Right now I'm making the assumption that the destination is aligned, but
-+ * I'd better check.
-+ */
-+ if ((u32) destination & 3) {
-+ printk ("acx copy_from_slavemem: warning! destination not word-aligned!\n");
-+ }
-+
-+ while (count >= 4) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
-+ udelay (10);
-+ *((u32 *) destination) = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ count -= 4;
-+ source += 4;
-+ destination += 4;
-+ }
-+
-+ /*
-+ * If the word reads above didn't satisfy the count, read one more word
-+ * and transfer a byte at a time until the request is satisfied.
-+ */
-+ if (count) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
-+ udelay (10);
-+ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ while (count--) {
-+ *destination++ = *ptmp++;
-+ }
-+ }
-+}
-+
-+/*
-+ * Copy to slave memory
-+ *
-+ * TODO - rewrite using autoincrement, handle partial words
-+ */
-+void
-+copy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
-+{
-+ u32 tmp = 0;
-+ u8* ptmp = (u8 *) &tmp;
-+ static u8 src[512]; /* make static to avoid huge stack objects */
-+
-+ /*
-+ * For now, make sure the source is word-aligned by copying it to a word-aligned
-+ * buffer. Someday rewrite to avoid the extra copy.
-+ */
-+ if (count > sizeof (src)) {
-+ printk ("acx copy_to_slavemem: Warning! buffer overflow!\n");
-+ count = sizeof (src);
-+ }
-+ memcpy (src, source, count);
-+ source = src;
-+
-+ while (count >= 4) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, *((u32 *) source));
-+ count -= 4;
-+ source += 4;
-+ destination += 4;
-+ }
-+
-+ /*
-+ * If there are leftovers read the next word from the acx and merge in
-+ * what they want to write.
-+ */
-+ if (count) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ while (count--) {
-+ *ptmp++ = *source++;
-+ }
-+ /*
-+ * reset address in case we're currently in auto-increment mode
-+ */
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, tmp);
-+ udelay (10);
-+ }
-+
-+}
-+
-+/*
-+ * Block copy to slave buffers using memory block chain mode. Copies to the ACX
-+ * transmit buffer structure with minimal intervention on our part.
-+ * Interrupts should be disabled when calling this.
-+ */
-+void
-+chaincopy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
-+{
-+ u32 val;
-+ u32 *data = (u32 *) source;
-+ static u8 aligned_source[WLAN_A4FR_MAXLEN_WEP_FCS];
-+
-+ /*
-+ * Warn if the pointers don't look right. Destination must fit in [23:5] with
-+ * zero elsewhere and source should be 32 bit aligned.
-+ * This should never happen since we're in control of both, but I want to know about
-+ * it if it does.
-+ */
-+ if ((destination & 0x00ffffe0) != destination) {
-+ printk ("acx chaincopy: destination block 0x%04x not aligned!\n", destination);
-+ }
-+ if (count > sizeof aligned_source) {
-+ printk( KERN_ERR "chaincopy_to_slavemem overflow!\n" );
-+ count = sizeof aligned_source;
-+ }
-+ if ((u32) source & 3) {
-+ memcpy (aligned_source, source, count);
-+ data = (u32 *) aligned_source;
-+ }
-+
-+ /*
-+ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
-+ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
-+ */
-+ val = 2 << 16 | 1 << 2;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
-+
-+ /*
-+ * SLV_MEM_CP[23:5] = start of 1st block
-+ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
-+ */
-+ val = destination & 0x00ffffe0;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
-+
-+ /*
-+ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
-+ */
-+ val = (destination & 0x00ffffe0) + (1<<2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
-+
-+ /*
-+ * Write the data to the slave data register, rounding up to the end
-+ * of the word containing the last byte (hence the > 0)
-+ */
-+ while (count > 0) {
-+ writel (*data++, &adev->iobase[ACX_SLV_MEM_DATA]);
-+ count -= 4;
-+ }
-+}
-+
-+
-+/*
-+ * Block copy from slave buffers using memory block chain mode. Copies from the ACX
-+ * receive buffer structures with minimal intervention on our part.
-+ * Interrupts should be disabled when calling this.
-+ */
-+void
-+chaincopy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count)
-+{
-+ u32 val;
-+ u32 *data = (u32 *) destination;
-+ static u8 aligned_destination[WLAN_A4FR_MAXLEN_WEP_FCS];
-+ int saved_count = count;
-+
-+ /*
-+ * Warn if the pointers don't look right. Destination must fit in [23:5] with
-+ * zero elsewhere and source should be 32 bit aligned.
-+ * Turns out the network stack sends unaligned things, so fix them before
-+ * copying to the ACX.
-+ */
-+ if ((source & 0x00ffffe0) != source) {
-+ printk ("acx chaincopy: source block 0x%04x not aligned!\n", source);
-+ dump_acxmem (adev, 0, 0x10000);
-+ }
-+ if ((u32) destination & 3) {
-+ //printk ("acx chaincopy: data destination not word aligned!\n");
-+ data = (u32 *) aligned_destination;
-+ if (count > sizeof aligned_destination) {
-+ printk( KERN_ERR "chaincopy_from_slavemem overflow!\n" );
-+ count = sizeof aligned_destination;
-+ }
-+ }
-+
-+ /*
-+ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
-+ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
-+ */
-+ val = (2 << 16) | (1 << 2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
-+
-+ /*
-+ * SLV_MEM_CP[23:5] = start of 1st block
-+ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
-+ */
-+ val = source & 0x00ffffe0;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
-+
-+ /*
-+ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
-+ */
-+ val = (source & 0x00ffffe0) + (1<<2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
-+
-+ /*
-+ * Read the data from the slave data register, rounding up to the end
-+ * of the word containing the last byte (hence the > 0)
-+ */
-+ while (count > 0) {
-+ *data++ = readl (&adev->iobase[ACX_SLV_MEM_DATA]);
-+ count -= 4;
-+ }
-+
-+ /*
-+ * If the destination wasn't aligned, we would have saved it in
-+ * the aligned buffer, so copy it where it should go.
-+ */
-+ if ((u32) destination & 3) {
-+ memcpy (destination, aligned_destination, saved_count);
-+ }
-+}
-+
-+char
-+printable (char c)
-+{
-+ return ((c >= 20) && (c < 127)) ? c : '.';
-+}
-+
-+#if DUMP_MEM_DEFINED > 0
-+static void
-+dump_acxmem (acx_device_t *adev, u32 start, int length)
-+{
-+ int i;
-+ u8 buf[16];
-+
-+ while (length > 0) {
-+ printk ("%04x ", start);
-+ copy_from_slavemem (adev, buf, start, 16);
-+ for (i = 0; (i < 16) && (i < length); i++) {
-+ printk ("%02x ", buf[i]);
-+ }
-+ for (i = 0; (i < 16) && (i < length); i++) {
-+ printk ("%c", printable (buf[i]));
-+ }
-+ printk ("\n");
-+ start += 16;
-+ length -= 16;
-+ }
-+}
-+#endif
-+
-+static void
-+enable_acx_irq(acx_device_t *adev);
-+static void
-+disable_acx_irq(acx_device_t *adev);
-+
-+/*
-+ * Return an acx pointer to the next transmit data block.
-+ */
-+u32
-+allocate_acx_txbuf_space (acx_device_t *adev, int count) {
-+ u32 block, next, last_block;
-+ int blocks_needed;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&adev->txbuf_lock, flags);
-+ /*
-+ * Take 4 off the memory block size to account for the reserved word at the start of
-+ * the block.
-+ */
-+ blocks_needed = count / (adev->memblocksize - 4);
-+ if (count % (adev->memblocksize - 4))
-+ blocks_needed++;
-+
-+ if (blocks_needed <= adev->acx_txbuf_blocks_free) {
-+ /*
-+ * Take blocks at the head of the free list.
-+ */
-+ last_block = block = adev->acx_txbuf_free;
-+
-+ /*
-+ * Follow block pointers through the requested number of blocks both to
-+ * find the new head of the free list and to set the flags for the blocks
-+ * appropriately.
-+ */
-+ while (blocks_needed--) {
-+ /*
-+ * Keep track of the last block of the allocation
-+ */
-+ last_block = adev->acx_txbuf_free;
-+
-+ /*
-+ * Make sure the end control flag is not set.
-+ */
-+ next = read_slavemem32 (adev, adev->acx_txbuf_free) & 0x7ffff;
-+ write_slavemem32 (adev, adev->acx_txbuf_free, next);
-+
-+ /*
-+ * Update the new head of the free list
-+ */
-+ adev->acx_txbuf_free = next << 5;
-+ adev->acx_txbuf_blocks_free--;
-+
-+ }
-+
-+ /*
-+ * Flag the last block both by clearing out the next pointer
-+ * and marking the control field.
-+ */
-+ write_slavemem32 (adev, last_block, 0x02000000);
-+
-+ /*
-+ * If we're out of buffers make sure the free list pointer is NULL
-+ */
-+ if (!adev->acx_txbuf_blocks_free) {
-+ adev->acx_txbuf_free = 0;
-+ }
-+ }
-+ else {
-+ block = 0;
-+ }
-+ spin_unlock_irqrestore (&adev->txbuf_lock, flags);
-+ return block;
-+}
-+
-+/*
-+ * Return buffer space back to the pool by following the next pointers until we find
-+ * the block marked as the end. Point the last block to the head of the free list,
-+ * then update the head of the free list to point to the newly freed memory.
-+ * This routine gets called in interrupt context, so it shouldn't block to protect
-+ * the integrity of the linked list. The ISR already holds the lock.
-+ */
-+void
-+reclaim_acx_txbuf_space (acx_device_t *adev, u32 blockptr) {
-+ u32 cur, last, next;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave (&adev->txbuf_lock, flags);
-+ if ((blockptr >= adev->acx_txbuf_start) &&
-+ (blockptr <= adev->acx_txbuf_start +
-+ (adev->acx_txbuf_numblocks - 1) * adev->memblocksize)) {
-+ cur = blockptr;
-+ do {
-+ last = cur;
-+ next = read_slavemem32 (adev, cur);
-+
-+ /*
-+ * Advance to the next block in this allocation
-+ */
-+ cur = (next & 0x7ffff) << 5;
-+
-+ /*
-+ * This block now counts as free.
-+ */
-+ adev->acx_txbuf_blocks_free++;
-+ } while (!(next & 0x02000000));
-+
-+ /*
-+ * last now points to the last block of that allocation. Update the pointer
-+ * in that block to point to the free list and reset the free list to the
-+ * first block of the free call. If there were no free blocks, make sure
-+ * the new end of the list marks itself as truly the end.
-+ */
-+ if (adev->acx_txbuf_free) {
-+ write_slavemem32 (adev, last, adev->acx_txbuf_free >> 5);
-+ }
-+ else {
-+ write_slavemem32 (adev, last, 0x02000000);
-+ }
-+ adev->acx_txbuf_free = blockptr;
-+ }
-+ spin_unlock_irqrestore(&adev->txbuf_lock, flags);
-+}
-+
-+/*
-+ * Initialize the pieces managing the transmit buffer pool on the ACX. The transmit
-+ * buffer is a circular queue with one 32 bit word reserved at the beginning of each
-+ * block. The upper 13 bits are a control field, of which only 0x02000000 has any
-+ * meaning. The lower 19 bits are the address of the next block divided by 32.
-+ */
-+void
-+init_acx_txbuf (acx_device_t *adev) {
-+
-+ /*
-+ * acx100_s_init_memory_pools set up txbuf_start and txbuf_numblocks for us.
-+ * All we need to do is reset the rest of the bookeeping.
-+ */
-+
-+ adev->acx_txbuf_free = adev->acx_txbuf_start;
-+ adev->acx_txbuf_blocks_free = adev->acx_txbuf_numblocks;
-+
-+ /*
-+ * Initialization leaves the last transmit pool block without a pointer back to
-+ * the head of the list, but marked as the end of the list. That's how we want
-+ * to see it, too, so leave it alone. This is only ever called after a firmware
-+ * reset, so the ACX memory is in the state we want.
-+ */
-+
-+}
-+
-+INLINE_IO int
-+adev_present(acx_device_t *adev)
-+{
-+ /* fast version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should be safe): */
-+ return readl(adev->iobase) != 0xffffffff;
-+}
-+
-+/***********************************************************************
-+*/
-+static inline txdesc_t*
-+get_txdesc(acx_device_t *adev, int index)
-+{
-+ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size);
-+}
-+
-+static inline txdesc_t*
-+advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc)
-+{
-+ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size);
-+}
-+
-+static txhostdesc_t*
-+get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return &adev->txhostdesc_start[index*2];
-+}
-+
-+static inline client_t*
-+get_txc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return adev->txc[index];
-+}
-+
-+static inline u16
-+get_txr(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ index /= adev->txdesc_size;
-+ return adev->txr[index];
-+}
-+
-+static inline void
-+put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ adev->txc[index] = c;
-+ adev->txr[index] = r111;
-+}
-+
-+
-+/***********************************************************************
-+** EEPROM and PHY read/write helpers
-+*/
-+/***********************************************************************
-+** acxmem_read_eeprom_byte
-+**
-+** Function called to read an octet in the EEPROM.
-+**
-+** This function is used by acxmem_e_probe to check if the
-+** connected card is a legal one or not.
-+**
-+** Arguments:
-+** adev ptr to acx_device structure
-+** addr address to read in the EEPROM
-+** charbuf ptr to a char. This is where the read octet
-+** will be stored
-+*/
-+int
-+acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf)
-+{
-+ int result;
-+ int count;
-+
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for EEPROM read\n",
-+ adev->ndev->name);
-+ result = NOT_OK;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA);
-+ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf);
-+ result = OK;
-+
-+fail:
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** We don't lock hw accesses here since we never r/w eeprom in IRQ
-+** Note: this function sleeps only because of GFP_KERNEL alloc
-+*/
-+#ifdef UNUSED
-+int
-+acxmem_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf)
-+{
-+ u8 *data_verify = NULL;
-+ unsigned long flags;
-+ int count, i;
-+ int result = NOT_OK;
-+ u16 gpio_orig;
-+
-+ printk("acx: WARNING! I would write to EEPROM now. "
-+ "Since I really DON'T want to unless you know "
-+ "what you're doing (THIS CODE WILL PROBABLY "
-+ "NOT WORK YET!), I will abort that now. And "
-+ "definitely make sure to make a "
-+ "/proc/driver/acx_wlan0_eeprom backup copy first!!! "
-+ "(the EEPROM content includes the PCI config header!! "
-+ "If you kill important stuff, then you WILL "
-+ "get in trouble and people DID get in trouble already)\n");
-+ return OK;
-+
-+ FN_ENTER;
-+
-+ data_verify = kmalloc(len, GFP_KERNEL);
-+ if (!data_verify) {
-+ goto end;
-+ }
-+
-+ /* first we need to enable the OE (EEPROM Output Enable) GPIO line
-+ * to be able to write to the EEPROM.
-+ * NOTE: an EEPROM writing success has been reported,
-+ * but you probably have to modify GPIO_OUT, too,
-+ * and you probably need to activate a different GPIO
-+ * line instead! */
-+ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE);
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1);
-+ write_flush(adev);
-+
-+ /* ok, now start writing the data out */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i));
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 1);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("WARNING, DANGER!!! "
-+ "Timeout waiting for EEPROM write\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+ }
-+
-+ /* disable EEPROM writing */
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig);
-+ write_flush(adev);
-+
-+ /* now start a verification run */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("timeout waiting for EEPROM read\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+
-+ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA);
-+ }
-+
-+ if (0 == memcmp(charbuf, data_verify, len))
-+ result = OK; /* read data matches, success */
-+
-+end:
-+ kfree(data_verify);
-+ FN_EXIT1(result);
-+ return result;
-+}
-+#endif /* UNUSED */
-+
-+
-+/***********************************************************************
-+** acxmem_s_read_phy_reg
-+**
-+** Messing with rx/tx disabling and enabling here
-+** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic
-+*/
-+int
-+acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
-+{
-+ int result = NOT_OK;
-+ int count;
-+
-+ FN_ENTER;
-+
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for phy read\n",
-+ adev->ndev->name);
-+ *charbuf = 0;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ log(L_DEBUG, "count was %u\n", count);
-+ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA);
-+
-+ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg);
-+ result = OK;
-+ goto fail; /* silence compiler warning */
-+fail:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
-+{
-+ int count;
-+ FN_ENTER;
-+
-+ /* mprusko said that 32bit accesses result in distorted sensitivity
-+ * on his card. Unconfirmed, looks like it's not true (most likely since we
-+ * now properly flush writes). */
-+ write_reg32(adev, IO_ACX_PHY_DATA, value);
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 1);
-+ write_flush(adev);
-+
-+ count = 0xffff;
-+ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for phy read\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg);
-+ fail:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+#define NO_AUTO_INCREMENT 1
-+
-+/***********************************************************************
-+** acxmem_s_write_fw
-+**
-+** Write the firmware image into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** 1 firmware image corrupted
-+** 0 success
-+*/
-+static int
-+acxmem_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset)
-+{
-+ int len, size, checkMismatch = -1;
-+ u32 sum, v32, tmp, id;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+ write_flush(adev);
-+#endif
-+#endif
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ sum += p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+ len += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+ write_flush(adev);
-+#endif
-+ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32);
-+ write_flush(adev);
-+#endif
-+ write_slavemem32 (adev, offset + len - 4, v32);
-+
-+ id = read_id_register (adev);
-+
-+ /*
-+ * check the data written
-+ */
-+ tmp = read_slavemem32 (adev, offset + len - 4);
-+ if (checkMismatch && (tmp != v32)) {
-+ printk ("first data mismatch at 0x%08x good 0x%08x bad 0x%08x id 0x%08x\n",
-+ offset + len - 4, v32, tmp, id);
-+ checkMismatch = 0;
-+ }
-+ }
-+ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n",
-+ size, sum, le32_to_cpu(fw_image->chksum));
-+
-+ /* compare our checksum with the stored image checksum */
-+ return (sum != le32_to_cpu(fw_image->chksum));
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_validate_fw
-+**
-+** Compare the firmware image given with
-+** the firmware image written into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** NOT_OK firmware image corrupted or not correctly written
-+** OK success
-+*/
-+static int
-+acxmem_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image,
-+ u32 offset)
-+{
-+ u32 sum, v32, w32;
-+ int len, size;
-+ int result = OK;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+#endif
-+
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ p += 4;
-+ len += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+#endif
-+ udelay(10);
-+ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA);
-+#endif
-+ w32 = read_slavemem32 (adev, offset + len - 4);
-+
-+ if (unlikely(w32 != v32)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "data parts at offset %d don't match\n(0x%08X vs. 0x%08X)!\n"
-+ "I/O timing issues or defective memory, with DWL-xx0+? "
-+ "ACX_IO_WIDTH=16 may help. Please report\n",
-+ len, v32, w32);
-+ result = NOT_OK;
-+ break;
-+ }
-+
-+ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24);
-+ }
-+
-+ /* sum control verification */
-+ if (result != NOT_OK) {
-+ if (sum != le32_to_cpu(fw_image->chksum)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "checksums don't match!\n");
-+ result = NOT_OK;
-+ }
-+ }
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_upload_fw
-+**
-+** Called from acx_reset_dev
-+*/
-+static int
-+acxmem_s_upload_fw(acx_device_t *adev)
-+{
-+ firmware_image_t *fw_image = NULL;
-+ int res = NOT_OK;
-+ int try;
-+ u32 file_size;
-+ char *filename = "WLANGEN.BIN";
-+#ifdef PATCH_AROUND_BAD_SPOTS
-+ u32 offset;
-+ int i;
-+ /*
-+ * arm-linux-objdump -d patch.bin, or
-+ * od -Ax -t x4 patch.bin after finding the bounds
-+ * of the .text section with arm-linux-objdump -s patch.bin
-+ */
-+ u32 patch[] = {
-+ 0xe584c030, 0xe59fc008,
-+ 0xe92d1000, 0xe59fc004, 0xe8bd8000, 0x0000080c,
-+ 0x0000aa68, 0x605a2200, 0x2c0a689c, 0x2414d80a,
-+ 0x2f00689f, 0x1c27d007, 0x06241e7c, 0x2f000e24,
-+ 0xe000d1f6, 0x602e6018, 0x23036468, 0x480203db,
-+ 0x60ca6003, 0xbdf0750a, 0xffff0808
-+ };
-+#endif
-+
-+ FN_ENTER;
-+ /* No combined image; tell common we need the radio firmware, too */
-+ adev->need_radio_fw = 1;
-+
-+ fw_image = acx_s_read_fw(adev->dev, filename, &file_size);
-+ if (!fw_image) {
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+ }
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxmem_s_write_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (main): %d\n", res);
-+ if (OK == res) {
-+ res = acxmem_s_validate_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw "
-+ "(main): %d\n", res);
-+ }
-+
-+ if (OK == res) {
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED);
-+ break;
-+ }
-+ printk("acx: firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+#ifdef PATCH_AROUND_BAD_SPOTS
-+ /*
-+ * Only want to do this if the firmware is exactly what we expect for an
-+ * iPaq 4700; otherwise, bad things would ensue.
-+ */
-+ if ((HX4700_FIRMWARE_CHECKSUM == fw_image->chksum) ||
-+ (HX4700_ALTERNATE_FIRMWARE_CHECKSUM == fw_image->chksum)) {
-+ /*
-+ * Put the patch after the main firmware image. 0x950c contains
-+ * the ACX's idea of the end of the firmware. Use that location to
-+ * load ours (which depends on that location being 0xab58) then
-+ * update that location to point to after ours.
-+ */
-+
-+ offset = read_slavemem32 (adev, 0x950c);
-+
-+ log (L_DEBUG, "acx: patching in at 0x%04x\n", offset);
-+
-+ for (i = 0; i < sizeof(patch) / sizeof(patch[0]); i++) {
-+ write_slavemem32 (adev, offset, patch[i]);
-+ offset += sizeof(u32);
-+ }
-+
-+ /*
-+ * Patch the instruction at 0x0804 to branch to our ARM patch at 0xab58
-+ */
-+ write_slavemem32 (adev, 0x0804, 0xea000000 + (0xab58-0x0804-8)/4);
-+
-+ /*
-+ * Patch the instructions at 0x1f40 to branch to our Thumb patch at 0xab74
-+ *
-+ * 4a00 ldr r2, [pc, #0]
-+ * 4710 bx r2
-+ * .data 0xab74+1
-+ */
-+ write_slavemem32 (adev, 0x1f40, 0x47104a00);
-+ write_slavemem32 (adev, 0x1f44, 0x0000ab74+1);
-+
-+ /*
-+ * Bump the end of the firmware up to beyond our patch.
-+ */
-+ write_slavemem32 (adev, 0x950c, offset);
-+
-+ }
-+#endif
-+
-+ vfree(fw_image);
-+
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_upload_radio
-+**
-+** Uploads the appropriate radio module firmware into the card.
-+*/
-+int
-+acxmem_s_upload_radio(acx_device_t *adev)
-+{
-+ acx_ie_memmap_t mm;
-+ firmware_image_t *radio_image;
-+ acx_cmd_radioinit_t radioinit;
-+ int res = NOT_OK;
-+ int try;
-+ u32 offset;
-+ u32 size;
-+ char filename[sizeof("RADIONN.BIN")];
-+
-+ if (!adev->need_radio_fw) return OK;
-+
-+ FN_ENTER;
-+
-+ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+ offset = le32_to_cpu(mm.CodeEnd);
-+
-+ snprintf(filename, sizeof(filename), "RADIO%02x.BIN",
-+ adev->radio_type);
-+ radio_image = acx_s_read_fw(adev->dev, filename, &size);
-+ if (!radio_image) {
-+ printk("acx: can't load radio module '%s'\n", filename);
-+ goto fail;
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxmem_s_write_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res);
-+ if (OK == res) {
-+ res = acxmem_s_validate_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res);
-+ }
-+
-+ if (OK == res)
-+ break;
-+ printk("acx: radio firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
-+ radioinit.offset = cpu_to_le32(offset);
-+
-+ /* no endian conversion needed, remains in card CPU area: */
-+ radioinit.len = radio_image->size;
-+
-+ vfree(radio_image);
-+
-+ if (OK != res)
-+ goto fail;
-+
-+ /* will take a moment so let's have a big timeout */
-+ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT,
-+ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000));
-+
-+ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+
-+fail:
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+/***********************************************************************
-+** acxmem_l_reset_mac
-+**
-+** MAC will be reset
-+** Call context: reset_dev
-+*/
-+static void
-+acxmem_l_reset_mac(acx_device_t *adev)
-+{
-+ int count;
-+ FN_ENTER;
-+
-+ /* halt eCPU */
-+ set_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
-+
-+ /* now do soft reset of eCPU, set bit */
-+ set_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
-+ log(L_DEBUG, "%s: enable soft reset...\n", __func__);
-+
-+ /* Windows driver sleeps here for a while with this sequence */
-+ for (count = 0; count < 200; count++) {
-+ udelay (50);
-+ }
-+
-+ /* now clear bit again: deassert eCPU reset */
-+ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__);
-+ clear_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
-+
-+ /* now start a burst read from initial EEPROM */
-+ set_regbits (adev, IO_ACX_EE_START, 0x1);
-+
-+ /*
-+ * Windows driver sleeps here for a while with this sequence
-+ */
-+ for (count = 0; count < 200; count++) {
-+ udelay (50);
-+ }
-+
-+ /* Windows driver writes 0x10000 to register 0x808 here */
-+
-+ write_reg32 (adev, 0x808, 0x10000);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_verify_init
-+*/
-+static int
-+acxmem_s_verify_init(acx_device_t *adev)
-+{
-+ int result = NOT_OK;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ timeout = jiffies + 2*HZ;
-+ for (;;) {
-+ u32 irqstat = read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if ((irqstat != 0xFFFFFFFF) && (irqstat & HOST_INT_FCS_THRESHOLD)) {
-+ result = OK;
-+ write_reg32(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD);
-+ break;
-+ }
-+ if (time_after(jiffies, timeout))
-+ break;
-+ /* Init may take up to ~0.5 sec total */
-+ acx_s_msleep(50);
-+ }
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** A few low-level helpers
-+**
-+** Note: these functions are not protected by lock
-+** and thus are never allowed to be called from IRQ.
-+** Also they must not race with fw upload which uses same hw regs
-+*/
-+
-+/***********************************************************************
-+** acxmem_write_cmd_type_status
-+*/
-+
-+static inline void
-+acxmem_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status)
-+{
-+ write_slavemem32 (adev, (u32) adev->cmd_area, type | (status << 16));
-+ write_flush(adev);
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_read_cmd_type_status
-+*/
-+static u32
-+acxmem_read_cmd_type_status(acx_device_t *adev)
-+{
-+ u32 cmd_type, cmd_status;
-+
-+ cmd_type = read_slavemem32 (adev, (u32) adev->cmd_area);
-+
-+ cmd_status = (cmd_type >> 16);
-+ cmd_type = (u16)cmd_type;
-+
-+ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n",
-+ cmd_type, cmd_status,
-+ acx_cmd_status_str(cmd_status));
-+
-+ return cmd_status;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_reset_dev
-+**
-+** Arguments:
-+** netdevice that contains the adev variable
-+** Returns:
-+** NOT_OK on fail
-+** OK on success
-+** Side effects:
-+** device is hard reset
-+** Call context:
-+** acxmem_e_probe
-+** Comment:
-+** This resets the device using low level hardware calls
-+** as well as uploads and verifies the firmware to the card
-+*/
-+
-+static inline void
-+init_mboxes(acx_device_t *adev)
-+{
-+ u32 cmd_offs, info_offs;
-+
-+ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS);
-+ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS);
-+ adev->cmd_area = (u8*) cmd_offs;
-+ adev->info_area = (u8*) info_offs;
-+ /*
-+ log(L_DEBUG, "iobase2=%p\n"
-+ */
-+ log( L_DEBUG, "cmd_mbox_offset=%X cmd_area=%p\n"
-+ "info_mbox_offset=%X info_area=%p\n",
-+ cmd_offs, adev->cmd_area,
-+ info_offs, adev->info_area);
-+}
-+
-+
-+static inline void
-+read_eeprom_area(acx_device_t *adev)
-+{
-+#if ACX_DEBUG > 1
-+ int offs;
-+ u8 tmp;
-+
-+ for (offs = 0x8c; offs < 0xb9; offs++)
-+ acxmem_read_eeprom_byte(adev, offs, &tmp);
-+#endif
-+}
-+
-+static int
-+acxmem_s_reset_dev(acx_device_t *adev)
-+{
-+ const char* msg = "";
-+ unsigned long flags;
-+ int result = NOT_OK;
-+ u16 hardware_info;
-+ u16 ecpu_ctrl;
-+ int count;
-+ u32 tmp;
-+
-+ FN_ENTER;
-+ /*
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CP, 0);
-+ */
-+ /* reset the device to make sure the eCPU is stopped
-+ * to upload the firmware correctly */
-+
-+ acx_lock(adev, flags);
-+
-+ /* Windows driver does some funny things here */
-+ /*
-+ * clear bit 0x200 in register 0x2A0
-+ */
-+ clear_regbits (adev, 0x2A0, 0x200);
-+
-+ /*
-+ * Set bit 0x200 in ACX_GPIO_OUT
-+ */
-+ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
-+
-+ /*
-+ * read register 0x900 until its value is 0x8400104C, sleeping
-+ * in between reads if it's not immediate
-+ */
-+ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
-+ count = 500;
-+ while (count-- && (tmp != ACX_VENDOR_ID)) {
-+ mdelay (10);
-+ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
-+ }
-+
-+ /* end what Windows driver does */
-+
-+ acxmem_l_reset_mac(adev);
-+
-+ ecpu_ctrl = read_reg32(adev, IO_ACX_ECPU_CTRL) & 1;
-+ if (!ecpu_ctrl) {
-+ msg = "eCPU is already running. ";
-+ goto end_unlock;
-+ }
-+
-+#ifdef WE_DONT_NEED_THAT_DO_WE
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) {
-+ /* eCPU most likely means "embedded CPU" */
-+ msg = "eCPU did not start after boot from flash. ";
-+ goto end_unlock;
-+ }
-+
-+ /* check sense on reset flags */
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) {
-+ printk("%s: eCPU did not start after boot (SOR), "
-+ "is this fatal?\n", adev->ndev->name);
-+ }
-+#endif
-+ /* scan, if any, is stopped now, setting corresponding IRQ bit */
-+ adev->irq_status |= HOST_INT_SCAN_COMPLETE;
-+
-+ acx_unlock(adev, flags);
-+
-+ /* need to know radio type before fw load */
-+ /* Need to wait for arrival of this information in a loop,
-+ * most probably since eCPU runs some init code from EEPROM
-+ * (started burst read in reset_mac()) which also
-+ * sets the radio type ID */
-+
-+ count = 0xffff;
-+ do {
-+ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION);
-+ if (!--count) {
-+ msg = "eCPU didn't indicate radio type";
-+ goto end_fail;
-+ }
-+ cpu_relax();
-+ } while (!(hardware_info & 0xff00)); /* radio type still zero? */
-+ printk("ACX radio type 0x%02x\n", (hardware_info >> 8) & 0xff);
-+ /* printk("DEBUG: count %d\n", count); */
-+ adev->form_factor = hardware_info & 0xff;
-+ adev->radio_type = hardware_info >> 8;
-+
-+ /* load the firmware */
-+ if (OK != acxmem_s_upload_fw(adev))
-+ goto end_fail;
-+
-+ /* acx_s_msleep(10); this one really shouldn't be required */
-+
-+ /* now start eCPU by clearing bit */
-+ clear_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
-+ log(L_DEBUG, "booted eCPU up and waiting for completion...\n");
-+
-+ /* Windows driver clears bit 0x200 in register 0x2A0 here */
-+ clear_regbits (adev, 0x2A0, 0x200);
-+
-+ /* Windows driver sets bit 0x200 in ACX_GPIO_OUT here */
-+ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
-+ /* wait for eCPU bootup */
-+ if (OK != acxmem_s_verify_init(adev)) {
-+ msg = "timeout waiting for eCPU. ";
-+ goto end_fail;
-+ }
-+ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n");
-+ init_mboxes(adev);
-+ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
-+
-+ /* test that EEPROM is readable */
-+ read_eeprom_area(adev);
-+
-+ result = OK;
-+ goto end;
-+
-+/* Finish error message. Indicate which function failed */
-+end_unlock:
-+ acx_unlock(adev, flags);
-+end_fail:
-+ printk("acx: %sreset_dev() FAILED\n", msg);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_issue_cmd_timeo
-+**
-+** Sends command to fw, extract result
-+**
-+** NB: we do _not_ take lock inside, so be sure to not touch anything
-+** which may interfere with IRQ handler operation
-+**
-+** TODO: busy wait is a bit silly, so:
-+** 1) stop doing many iters - go to sleep after first
-+** 2) go to waitqueue based approach: wait, not poll!
-+*/
-+#undef FUNC
-+#define FUNC "issue_cmd"
-+
-+#if !ACX_DEBUG
-+int
-+acxmem_s_issue_cmd_timeo(
-+ acx_device_t *adev,
-+ unsigned int cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout)
-+{
-+#else
-+int
-+acxmem_s_issue_cmd_timeo_debug(
-+ acx_device_t *adev,
-+ unsigned cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout,
-+ const char* cmdstr)
-+{
-+ unsigned long start = jiffies;
-+#endif
-+ const char *devname;
-+ unsigned counter;
-+ u16 irqtype;
-+ int i, j;
-+ u8 *p;
-+ u16 cmd_status;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ devname = adev->ndev->name;
-+ if (!devname || !devname[0] || devname[4]=='%')
-+ devname = "acx";
-+
-+ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n",
-+ cmdstr, buflen, cmd_timeout,
-+ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
-+
-+ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) {
-+ printk("%s: "FUNC"(): firmware is not loaded yet, "
-+ "cannot execute commands!\n", devname);
-+ goto bad;
-+ }
-+
-+ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) {
-+ printk("input buffer (len=%u):\n", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+
-+ /* wait for firmware to become idle for our command submission */
-+ timeout = HZ/5;
-+ counter = (timeout * 1000 / HZ) - 1; /* in ms */
-+ timeout += jiffies;
-+ do {
-+ cmd_status = acxmem_read_cmd_type_status(adev);
-+ /* Test for IDLE state */
-+ if (!cmd_status)
-+ break;
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ if (!counter) {
-+ /* the card doesn't get idle, we're in trouble */
-+ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n",
-+ devname, cmd_status);
-+#if DUMP_IF_SLOW > 0
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("not idle");
-+#endif
-+ goto bad;
-+ } else if (counter < 190) { /* if waited >10ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. "
-+ "Please report\n", 199 - counter);
-+ }
-+
-+ /* now write the parameters of the command if needed */
-+ if (buffer && buflen) {
-+ /* if it's an INTERROGATE command, just pass the length
-+ * of parameters to read, as data */
-+#if CMD_DISCOVERY
-+ if (cmd == ACX1xx_CMD_INTERROGATE)
-+ memset_io(adev->cmd_area + 4, 0xAA, buflen);
-+#endif
-+ /*
-+ * slave memory version
-+ */
-+ copy_to_slavemem (adev, (u32) (adev->cmd_area + 4), buffer,
-+ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen);
-+ }
-+ /* now write the actual command type */
-+ acxmem_write_cmd_type_status(adev, cmd, 0);
-+
-+ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */
-+ adev->irq_status &= ~HOST_INT_CMD_COMPLETE;
-+
-+ /* execute command */
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD);
-+ write_flush(adev);
-+
-+ /* wait for firmware to process command */
-+
-+ /* Ensure nonzero and not too large timeout.
-+ ** Also converts e.g. 100->99, 200->199
-+ ** which is nice but not essential */
-+ cmd_timeout = (cmd_timeout-1) | 1;
-+ if (unlikely(cmd_timeout > 1199))
-+ cmd_timeout = 1199;
-+
-+ /* we schedule away sometimes (timeout can be large) */
-+ counter = cmd_timeout;
-+ timeout = jiffies + cmd_timeout * HZ / 1000;
-+ do {
-+ if (!adev->irqs_active) { /* IRQ disabled: poll */
-+ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ write_reg16(adev, IO_ACX_IRQ_ACK,
-+ HOST_INT_CMD_COMPLETE);
-+ break;
-+ }
-+ } else { /* Wait when IRQ will set the bit */
-+ irqtype = adev->irq_status;
-+ if (irqtype & HOST_INT_CMD_COMPLETE)
-+ break;
-+ }
-+
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ /* save state for debugging */
-+ cmd_status = acxmem_read_cmd_type_status(adev);
-+
-+ /* put the card in IDLE state */
-+ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
-+
-+ if (!counter) { /* timed out! */
-+ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. "
-+ "irq bits:0x%04X irq_status:0x%04X timeout:%dms "
-+ "cmd_status:%d (%s)\n",
-+ devname, (adev->irqs_active) ? "waiting" : "polling",
-+ irqtype, adev->irq_status, cmd_timeout,
-+ cmd_status, acx_cmd_status_str(cmd_status));
-+ printk("%s: "FUNC"(): device irq status 0x%04x\n",
-+ devname, read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES));
-+ printk("%s: "FUNC"(): IO_ACX_IRQ_MASK 0x%04x IO_ACX_FEMR 0x%04x\n",
-+ devname,
-+ read_reg16 (adev, IO_ACX_IRQ_MASK),
-+ read_reg16 (adev, IO_ACX_FEMR));
-+ if (read_reg16 (adev, IO_ACX_IRQ_MASK) == 0xffff) {
-+ printk ("acxmem: firmware probably hosed - reloading\n");
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+ {
-+ pm_message_t state;
-+ acxmem_e_suspend (resume_pdev, state);
-+ }
-+#else
-+ acxmem_e_suspend (adev->dev, 0);
-+#endif
-+ {
-+ struct work_struct *notused;
-+ fw_resumer (notused);
-+ }
-+ }
-+
-+ goto bad;
-+ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. "
-+ "count:%d. Please report\n",
-+ (adev->irqs_active) ? "waited" : "polled",
-+ cmd_timeout - counter, counter);
-+ }
-+
-+ if (1 != cmd_status) { /* it is not a 'Success' */
-+ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). "
-+ "Took %dms of %d\n",
-+ devname, cmd_status, acx_cmd_status_str(cmd_status),
-+ cmd_timeout - counter, cmd_timeout);
-+ /* zero out result buffer
-+ * WARNING: this will trash stack in case of illegally large input
-+ * length! */
-+ if (buflen > 388) {
-+ /*
-+ * 388 is maximum command length
-+ */
-+ printk ("invalid length 0x%08x\n", buflen);
-+ buflen = 388;
-+ }
-+ p = (u8 *) buffer;
-+ for (i = 0; i < buflen; i+= 16) {
-+ printk ("%04x:", i);
-+ for (j = 0; (j < 16) && (i+j < buflen); j++) {
-+ printk (" %02x", *p++);
-+ }
-+ printk ("\n");
-+ }
-+
-+ if (buffer && buflen)
-+ memset(buffer, 0, buflen);
-+ goto bad;
-+ }
-+
-+ /* read in result parameters if needed */
-+ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) {
-+ copy_from_slavemem (adev, buffer, (u32) (adev->cmd_area + 4), buflen);
-+ if (acx_debug & L_DEBUG) {
-+ printk("output buffer (len=%u): ", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+ }
-+
-+/* ok: */
-+ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n",
-+ cmdstr, jiffies - start);
-+ FN_EXIT1(OK);
-+ return OK;
-+
-+bad:
-+ /* Give enough info so that callers can avoid
-+ ** printing their own diagnostic messages */
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
-+#else
-+ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
-+#endif
-+ dump_stack();
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#if defined(NONESSENTIAL_FEATURES)
-+typedef struct device_id {
-+ unsigned char id[6];
-+ char *descr;
-+ char *type;
-+} device_id_t;
-+
-+static const device_id_t
-+device_ids[] =
-+{
-+ {
-+ {'G', 'l', 'o', 'b', 'a', 'l'},
-+ NULL,
-+ NULL,
-+ },
-+ {
-+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-+ "uninitialized",
-+ "SpeedStream SS1021 or Gigafast WF721-AEX"
-+ },
-+ {
-+ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85},
-+ "non-standard",
-+ "DrayTek Vigor 520"
-+ },
-+ {
-+ {'?', '?', '?', '?', '?', '?'},
-+ "non-standard",
-+ "Level One WPC-0200"
-+ },
-+ {
-+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-+ "empty",
-+ "DWL-650+ variant"
-+ }
-+};
-+
-+static void
-+acx_show_card_eeprom_id(acx_device_t *adev)
-+{
-+ unsigned char buffer[CARD_EEPROM_ID_SIZE];
-+ int i;
-+
-+ memset(&buffer, 0, CARD_EEPROM_ID_SIZE);
-+ /* use direct EEPROM access */
-+ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) {
-+ if (OK != acxmem_read_eeprom_byte(adev,
-+ ACX100_EEPROM_ID_OFFSET + i,
-+ &buffer[i])) {
-+ printk("acx: reading EEPROM FAILED\n");
-+ break;
-+ }
-+ }
-+
-+ for (i = 0; i < VEC_SIZE(device_ids); i++) {
-+ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) {
-+ if (device_ids[i].descr) {
-+ printk("acx: EEPROM card ID string check "
-+ "found %s card ID: is this %s?\n",
-+ device_ids[i].descr, device_ids[i].type);
-+ }
-+ break;
-+ }
-+ }
-+ if (i == VEC_SIZE(device_ids)) {
-+ printk("acx: EEPROM card ID string check found "
-+ "unknown card: expected 'Global', got '%.*s\'. "
-+ "Please report\n", CARD_EEPROM_ID_SIZE, buffer);
-+ }
-+}
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+/***********************************************************************
-+** acxmem_free_desc_queues
-+**
-+** Releases the queues that have been allocated, the
-+** others have been initialised to NULL so this
-+** function can be used if only part of the queues were allocated.
-+*/
-+
-+void
-+acxmem_free_desc_queues(acx_device_t *adev)
-+{
-+#define ACX_FREE_QUEUE(size, ptr, phyaddr) \
-+ if (ptr) { \
-+ kfree(ptr); \
-+ ptr = NULL; \
-+ size = 0; \
-+ }
-+
-+ FN_ENTER;
-+
-+ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy);
-+
-+ adev->txdesc_start = NULL;
-+
-+ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy);
-+
-+ adev->rxdesc_start = NULL;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_delete_dma_regions
-+*/
-+static void
-+acxmem_s_delete_dma_regions(acx_device_t *adev)
-+{
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+ /* disable radio Tx/Rx. Shouldn't we use the firmware commands
-+ * here instead? Or are we that much down the road that it's no
-+ * longer possible here? */
-+ /*
-+ * slave memory interface really doesn't like this.
-+ */
-+ /*
-+ write_reg16(adev, IO_ACX_ENABLE, 0);
-+ */
-+
-+ acx_s_msleep(100);
-+
-+ acx_lock(adev, flags);
-+ acxmem_free_desc_queues(adev);
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_probe
-+**
-+** Probe routine called when a PCI device w/ matching ID is found.
-+** Here's the sequence:
-+** - Allocate the PCI resources.
-+** - Read the PCMCIA attribute memory to make sure we have a WLAN card
-+** - Reset the MAC
-+** - Initialize the dev and wlan data
-+** - Initialize the MAC
-+**
-+** pdev - ptr to pci device structure containing info about pci configuration
-+** id - ptr to the device id entry that matched this device
-+*/
-+static const u16
-+IO_ACX100[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_END_CTL */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x007c, /* IO_ACX_INT_TRIG */
-+ 0x0098, /* IO_ACX_IRQ_MASK */
-+ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00ac, /* IO_ACX_IRQ_ACK */
-+ 0x00b0, /* IO_ACX_HINT_TRIG */
-+
-+ 0x0104, /* IO_ACX_ENABLE */
-+
-+ 0x0250, /* IO_ACX_EEPROM_CTL */
-+ 0x0254, /* IO_ACX_EEPROM_ADDR */
-+ 0x0258, /* IO_ACX_EEPROM_DATA */
-+ 0x025c, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0268, /* IO_ACX_PHY_ADDR */
-+ 0x026c, /* IO_ACX_PHY_DATA */
-+ 0x0270, /* IO_ACX_PHY_CTL */
-+
-+ 0x0290, /* IO_ACX_GPIO_OE */
-+
-+ 0x0298, /* IO_ACX_GPIO_OUT */
-+
-+ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x02d0, /* IO_ACX_EE_START */
-+ 0x02d4, /* IO_ACX_SOR_CFG */
-+ 0x02d8 /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static const u16
-+IO_ACX111[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_MEM_CP */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x00b4, /* IO_ACX_INT_TRIG */
-+ 0x00d4, /* IO_ACX_IRQ_MASK */
-+ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */
-+ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00e8, /* IO_ACX_IRQ_ACK */
-+ 0x00ec, /* IO_ACX_HINT_TRIG */
-+
-+ 0x01d0, /* IO_ACX_ENABLE */
-+
-+ 0x0338, /* IO_ACX_EEPROM_CTL */
-+ 0x033c, /* IO_ACX_EEPROM_ADDR */
-+ 0x0340, /* IO_ACX_EEPROM_DATA */
-+ 0x0344, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0350, /* IO_ACX_PHY_ADDR */
-+ 0x0354, /* IO_ACX_PHY_DATA */
-+ 0x0358, /* IO_ACX_PHY_CTL */
-+
-+ 0x0374, /* IO_ACX_GPIO_OE */
-+
-+ 0x037c, /* IO_ACX_GPIO_OUT */
-+
-+ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x0390, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x0100, /* IO_ACX_EE_START */
-+ 0x0104, /* IO_ACX_SOR_CFG */
-+ 0x0108, /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static void
-+dummy_netdev_init(struct net_device *ndev) {}
-+
-+/*
-+ * Most of the acx specific pieces of hardware reset.
-+ */
-+static int
-+acxmem_complete_hw_reset (acx_device_t *adev)
-+{
-+ acx111_ie_configoption_t co;
-+
-+ /* NB: read_reg() reads may return bogus data before reset_dev(),
-+ * since the firmware which directly controls large parts of the I/O
-+ * registers isn't initialized yet.
-+ * acx100 seems to be more affected than acx111 */
-+ if (OK != acxmem_s_reset_dev (adev))
-+ return -1;
-+
-+ if (IS_ACX100(adev)) {
-+ /* ACX100: configopt struct in cmd mailbox - directly after reset */
-+ copy_from_slavemem (adev, (u8*) &co, (u32) adev->cmd_area, sizeof (co));
-+ }
-+
-+ if (OK != acx_s_init_mac(adev))
-+ return -3;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111: configopt struct needs to be queried after full init */
-+ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS);
-+ }
-+
-+ /*
-+ * Set up transmit buffer administration
-+ */
-+ init_acx_txbuf (adev);
-+
-+ /*
-+ * Windows driver writes 0x01000000 to register 0x288, RADIO_CTL, if the form factor
-+ * is 3. It also write protects the EEPROM by writing 1<<9 to GPIO_OUT
-+ */
-+ if (adev->form_factor == 3) {
-+ set_regbits (adev, 0x288, 0x01000000);
-+ set_regbits (adev, 0x298, 1<<9);
-+ }
-+
-+/* TODO: merge them into one function, they are called just once and are the same for pci & usb */
-+ if (OK != acxmem_read_eeprom_byte(adev, 0x05, &adev->eeprom_version))
-+ return -2;
-+
-+ acx_s_parse_configoption(adev, &co);
-+ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */
-+ acx_display_hardware_details(adev);
-+
-+ return 0;
-+}
-+
-+static int __devinit
-+acxmem_e_probe(struct platform_device *pdev)
-+{
-+ struct acx_hardware_data *hwdata = pdev->dev.platform_data;
-+ acx_device_t *adev = NULL;
-+ struct net_device *ndev = NULL;
-+ const char *chip_name;
-+ int result = -EIO;
-+ int err;
-+ int i;
-+ unsigned long addr_size=0;
-+ u8 chip_type;
-+
-+ FN_ENTER;
-+ (void) hwdata->start_hw();
-+
-+ /* FIXME: prism54 calls pci_set_mwi() here,
-+ * should we do/support the same? */
-+
-+ /* chiptype is u8 but id->driver_data is ulong
-+ ** Works for now (possible values are 1 and 2) */
-+ chip_type = CHIPTYPE_ACX100;
-+ /* acx100 and acx111 have different PCI memory regions */
-+ if (chip_type == CHIPTYPE_ACX100) {
-+ chip_name = "ACX100";
-+ } else if (chip_type == CHIPTYPE_ACX111) {
-+ chip_name = "ACX111";
-+ } else {
-+ printk("acx: unknown chip type 0x%04X\n", chip_type);
-+ goto fail_unknown_chiptype;
-+ }
-+
-+ printk("acx: found %s-based wireless network card\n", chip_name);
-+ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug);
-+
-+ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init);
-+ /* (NB: memsets to 0 entire area) */
-+ if (!ndev) {
-+ printk("acx: no memory for netdevice struct\n");
-+ goto fail_alloc_netdev;
-+ }
-+
-+ platform_set_drvdata (pdev, ndev);
-+
-+ ether_setup(ndev);
-+
-+ /*
-+ * use platform_data resources that were provided
-+ */
-+ ndev->irq = 0;
-+ for (i=0; i<pdev->num_resources; i++) {
-+ if (pdev->resource[i].flags == IORESOURCE_IRQ) {
-+ ndev->irq = pdev->resource[i].start;
-+ }
-+ else if (pdev->resource[i].flags == IORESOURCE_MEM) {
-+ ndev->base_addr = pdev->resource[i].start;
-+ addr_size = pdev->resource[i].end - pdev->resource[i].start;
-+ }
-+ }
-+ if (addr_size == 0 || ndev->irq == 0)
-+ goto fail_hw_params;
-+ ndev->open = &acxmem_e_open;
-+ ndev->stop = &acxmem_e_close;
-+ pdev->dev.release = &acxmem_e_release;
-+ ndev->hard_start_xmit = &acx_i_start_xmit;
-+ ndev->get_stats = &acx_e_get_stats;
-+#if IW_HANDLER_VERSION <= 5
-+ ndev->get_wireless_stats = &acx_e_get_wireless_stats;
-+#endif
-+ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
-+ ndev->set_multicast_list = &acxmem_i_set_multicast_list;
-+ ndev->tx_timeout = &acxmem_i_tx_timeout;
-+ ndev->change_mtu = &acx_e_change_mtu;
-+ ndev->watchdog_timeo = 4 * HZ;
-+
-+ adev = ndev2adev(ndev);
-+ spin_lock_init(&adev->lock); /* initial state: unlocked */
-+ spin_lock_init(&adev->txbuf_lock);
-+ /* We do not start with downed sem: we want PARANOID_LOCKING to work */
-+ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
-+ /* since nobody can see new netdev yet, we can as well
-+ ** just _presume_ that we're under sem (instead of actually taking it): */
-+ /* acx_sem_lock(adev); */
-+ adev->dev = &pdev->dev;
-+ adev->ndev = ndev;
-+ adev->dev_type = DEVTYPE_MEM;
-+ adev->chip_type = chip_type;
-+ adev->chip_name = chip_name;
-+ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111;
-+ adev->membase = (volatile u32 *) ndev->base_addr;
-+ adev->iobase = (volatile u32 *) ioremap_nocache (ndev->base_addr, addr_size);
-+ /* to find crashes due to weird driver access
-+ * to unconfigured interface (ifup) */
-+ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead;
-+
-+#if defined(NONESSENTIAL_FEATURES)
-+ acx_show_card_eeprom_id(adev);
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+#ifdef SET_MODULE_OWNER
-+ SET_MODULE_OWNER(ndev);
-+#endif
-+ SET_NETDEV_DEV(ndev, &pdev->dev);
-+
-+ log(L_IRQ|L_INIT, "using IRQ %d\n", ndev->irq);
-+
-+ /* ok, pci setup is finished, now start initializing the card */
-+
-+ if (OK != acxmem_complete_hw_reset (adev))
-+ goto fail_reset;
-+
-+ /*
-+ * Set up default things for most of the card settings.
-+ */
-+ acx_s_set_defaults(adev);
-+
-+ /* Register the card, AFTER everything else has been set up,
-+ * since otherwise an ioctl could step on our feet due to
-+ * firmware operations happening in parallel or uninitialized data */
-+ err = register_netdev(ndev);
-+ if (OK != err) {
-+ printk("acx: register_netdev() FAILED: %d\n", err);
-+ goto fail_register_netdev;
-+ }
-+
-+ acx_proc_register_entries(ndev);
-+
-+ /* Now we have our device, so make sure the kernel doesn't try
-+ * to send packets even though we're not associated to a network yet */
-+ acx_stop_queue(ndev, "on probe");
-+ acx_carrier_off(ndev, "on probe");
-+
-+ /*
-+ * Set up a default monitor type so that poor combinations of initialization
-+ * sequences in monitor mode don't end up destroying the hardware type.
-+ */
-+ adev->monitor_type = ARPHRD_ETHER;
-+
-+ /*
-+ * Register to receive inetaddr notifier changes. This will allow us to
-+ * catch if the user changes the MAC address of the interface.
-+ */
-+ register_netdevice_notifier(&acx_netdev_notifier);
-+
-+ /* after register_netdev() userspace may start working with dev
-+ * (in particular, on other CPUs), we only need to up the sem */
-+ /* acx_sem_unlock(adev); */
-+
-+ printk("acx "ACX_RELEASE": net device %s, driver compiled "
-+ "against wireless extensions %d and Linux %s\n",
-+ ndev->name, WIRELESS_EXT, UTS_RELEASE);
-+
-+#if CMD_DISCOVERY
-+ great_inquisitor(adev);
-+#endif
-+
-+ result = OK;
-+ goto done;
-+
-+ /* error paths: undo everything in reverse order... */
-+
-+fail_register_netdev:
-+
-+ acxmem_s_delete_dma_regions(adev);
-+
-+fail_reset:
-+fail_hw_params:
-+ free_netdev(ndev);
-+fail_alloc_netdev:
-+fail_unknown_chiptype:
-+
-+
-+done:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_remove
-+**
-+** Shut device down (if not hot unplugged)
-+** and deallocate PCI resources for the acx chip.
-+**
-+** pdev - ptr to PCI device structure containing info about pci configuration
-+*/
-+static int __devexit
-+acxmem_e_remove(struct platform_device *pdev)
-+{
-+ struct acx_hardware_data *hwdata = pdev->dev.platform_data;
-+ struct net_device *ndev;
-+ acx_device_t *adev;
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ ndev = (struct net_device*) platform_get_drvdata(pdev);
-+ if (!ndev) {
-+ log(L_DEBUG, "%s: card is unused. Skipping any release code\n",
-+ __func__);
-+ goto end;
-+ }
-+
-+ adev = ndev2adev(ndev);
-+
-+ /* If device wasn't hot unplugged... */
-+ if (adev_present(adev)) {
-+
-+ acx_sem_lock(adev);
-+
-+ /* disable both Tx and Rx to shut radio down properly */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
-+
-+#ifdef REDUNDANT
-+ /* put the eCPU to sleep to save power
-+ * Halting is not possible currently,
-+ * since not supported by all firmware versions */
-+ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0);
-+#endif
-+ acx_lock(adev, flags);
-+
-+ /* disable power LED to save power :-) */
-+ log(L_INIT, "switching off power LED to save power\n");
-+ acxmem_l_power_led(adev, 0);
-+
-+ /* stop our eCPU */
-+ if (IS_ACX111(adev)) {
-+ /* FIXME: does this actually keep halting the eCPU?
-+ * I don't think so...
-+ */
-+ acxmem_l_reset_mac(adev);
-+ } else {
-+ u16 temp;
-+
-+ /* halt eCPU */
-+ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
-+ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
-+ write_flush(adev);
-+ }
-+
-+ acx_unlock(adev, flags);
-+
-+ acx_sem_unlock(adev);
-+ }
-+
-+
-+ /*
-+ * Unregister the notifier chain
-+ */
-+ unregister_netdevice_notifier(&acx_netdev_notifier);
-+
-+ /* unregister the device to not let the kernel
-+ * (e.g. ioctls) access a half-deconfigured device
-+ * NB: this will cause acxmem_e_close() to be called,
-+ * thus we shouldn't call it under sem! */
-+ log(L_INIT, "removing device %s\n", ndev->name);
-+ unregister_netdev(ndev);
-+
-+ /* unregister_netdev ensures that no references to us left.
-+ * For paranoid reasons we continue to follow the rules */
-+ acx_sem_lock(adev);
-+
-+ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) {
-+ acxmem_s_down(ndev);
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ }
-+
-+ acx_proc_unregister_entries(ndev);
-+
-+ acxmem_s_delete_dma_regions(adev);
-+
-+ /* finally, clean up PCI bus state */
-+ if (adev->iobase) iounmap((void *)adev->iobase);
-+
-+ acx_sem_unlock(adev);
-+
-+ /* Free netdev (quite late,
-+ * since otherwise we might get caught off-guard
-+ * by a netdev timeout handler execution
-+ * expecting to see a working dev...) */
-+ free_netdev(ndev);
-+
-+ (void) hwdata->stop_hw();
-+
-+ printk ("e_remove done\n");
-+end:
-+ FN_EXIT0;
-+
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** TODO: PM code needs to be fixed / debugged / tested.
-+*/
-+#ifdef CONFIG_PM
-+static int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+acxmem_e_suspend(struct platform_device *pdev, pm_message_t state)
-+#else
-+acxmem_e_suspend(struct device *pdev, u32 state)
-+#endif
-+{
-+ struct net_device *ndev = platform_get_drvdata(pdev);
-+ acx_device_t *adev;
-+ struct acx_hardware_data *hwdata;
-+
-+ FN_ENTER;
-+ printk("acx: suspend handler is experimental!\n");
-+ printk("sus: dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ goto end;
-+
-+ adev = ndev2adev(ndev);
-+ printk("sus: adev %p\n", adev);
-+
-+ hwdata = adev->dev->platform_data;
-+
-+ acx_sem_lock(adev);
-+
-+ netif_device_detach(ndev); /* this one cannot sleep */
-+ acxmem_s_down(ndev);
-+ /* down() does not set it to 0xffff, but here we really want that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ acxmem_s_delete_dma_regions(adev);
-+
-+ /*
-+ * Turn the ACX chip off.
-+ */
-+ hwdata->stop_hw();
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+
-+static void
-+fw_resumer(struct work_struct *notused)
-+{
-+ struct platform_device *pdev = resume_pdev;
-+ struct net_device *ndev = platform_get_drvdata(pdev);
-+ acx_device_t *adev;
-+ struct acx_hardware_data *hwdata;
-+
-+ printk("acx: resume handler is experimental!\n");
-+ printk("rsm: got dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ return;
-+
-+ adev = ndev2adev(ndev);
-+ printk("rsm: got adev %p\n", adev);
-+
-+ acx_sem_lock(adev);
-+
-+ hwdata = adev->dev->platform_data;
-+
-+ /*
-+ * Turn on the ACX.
-+ */
-+ hwdata->start_hw();
-+
-+ acxmem_complete_hw_reset (adev);
-+
-+ /*
-+ * done by acx_s_set_defaults for initial startup
-+ */
-+ acxmem_set_interrupt_mask(adev);
-+
-+ printk ("rsm: bringing up interface\n");
-+ SET_BIT (adev->set_mask, GETSET_ALL);
-+ acxmem_s_up(ndev);
-+ printk("rsm: acx up done\n");
-+
-+ /* now even reload all card parameters as they were before suspend,
-+ * and possibly be back in the network again already :-)
-+ */
-+ /* - most settings updated in acxmem_s_up()
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) {
-+ adev->set_mask = GETSET_ALL;
-+ acx_s_update_card_settings(adev);
-+ printk("rsm: settings updated\n");
-+ }
-+ */
-+ netif_device_attach(ndev);
-+ printk("rsm: device attached\n");
-+
-+ acx_sem_unlock(adev);
-+}
-+
-+DECLARE_WORK( fw_resume_work, fw_resumer );
-+
-+static int
-+acxmem_e_resume(struct platform_device *pdev)
-+{
-+ FN_ENTER;
-+
-+ resume_pdev = pdev;
-+ schedule_work( &fw_resume_work );
-+
-+ FN_EXIT0;
-+ return OK;
-+}
-+#endif /* CONFIG_PM */
-+
-+
-+/***********************************************************************
-+** acxmem_s_up
-+**
-+** This function is called by acxmem_e_open (when ifconfig sets the device as up)
-+**
-+** Side effects:
-+** - Enables on-card interrupt requests
-+** - calls acx_s_start
-+*/
-+
-+static void
-+enable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask);
-+ write_reg16(adev, IO_ACX_FEMR, 0x8000);
-+ adev->irqs_active = 1;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxmem_s_up(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+ enable_acx_irq(adev);
-+ acx_unlock(adev, flags);
-+
-+ /* acx fw < 1.9.3.e has a hardware timer, and older drivers
-+ ** used to use it. But we don't do that anymore, our OS
-+ ** has reliable software timers */
-+ init_timer(&adev->mgmt_timer);
-+ adev->mgmt_timer.function = acx_i_timer;
-+ adev->mgmt_timer.data = (unsigned long)adev;
-+
-+ /* Need to set ACX_STATE_IFACE_UP first, or else
-+ ** timer won't be started by acx_set_status() */
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ /* actual scan cmd will happen in start() */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING); break;
-+ case ACX_MODE_3_AP:
-+ case ACX_MODE_MONITOR:
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break;
-+ }
-+
-+ acx_s_start(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_down
-+**
-+** This disables the netdevice
-+**
-+** Side effects:
-+** - disables on-card interrupt request
-+*/
-+
-+static void
-+disable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+
-+ /* I guess mask is not 0xffff because acx100 won't signal
-+ ** cmd completion then (needed for ifup).
-+ ** Someone with acx100 please confirm */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ adev->irqs_active = 0;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxmem_s_down(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ /* Disable IRQs first, so that IRQs cannot race with us */
-+ /* then wait until interrupts have finished executing on other CPUs */
-+ acx_lock(adev, flags);
-+ disable_acx_irq(adev);
-+ synchronize_irq(adev->pdev->irq);
-+ acx_unlock(adev, flags);
-+
-+ /* we really don't want to have an asynchronous tasklet disturb us
-+ ** after something vital for its job has been shut down, so
-+ ** end all remaining work now.
-+ **
-+ ** NB: carrier_off (done by set_status below) would lead to
-+ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK().
-+ ** That's why we do FLUSH first.
-+ **
-+ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK()
-+ ** waits for acx_e_after_interrupt_task to complete if it is running
-+ ** on another CPU, but acx_e_after_interrupt_task
-+ ** will sleep on sem forever, because it is taken by us!
-+ ** Work around that by temporary sem unlock.
-+ ** This will fail miserably if we'll be hit by concurrent
-+ ** iwconfig or something in between. TODO! */
-+ acx_sem_unlock(adev);
-+ FLUSH_SCHEDULED_WORK();
-+ acx_sem_lock(adev);
-+
-+ /* This is possible:
-+ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task ->
-+ ** -> set_status(ASSOCIATED) -> wake_queue()
-+ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK
-+ ** lock/unlock is just paranoia, maybe not needed */
-+ acx_lock(adev, flags);
-+ acx_stop_queue(ndev, "on ifdown");
-+ acx_set_status(adev, ACX_STATUS_0_STOPPED);
-+ acx_unlock(adev, flags);
-+
-+ /* kernel/timer.c says it's illegal to del_timer_sync()
-+ ** a timer which restarts itself. We guarantee this cannot
-+ ** ever happen because acx_i_timer() never does this if
-+ ** status is ACX_STATUS_0_STOPPED */
-+ del_timer_sync(&adev->mgmt_timer);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_open
-+**
-+** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP
-+** from clear to set. In other words: ifconfig up.
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxmem_e_open(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ acx_init_task_scheduler(adev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D0); ? */
-+
-+ /* request shared IRQ handler */
-+ if (request_irq(ndev->irq, acxmem_i_interrupt, SA_INTERRUPT, ndev->name, ndev)) {
-+ printk("%s: request_irq FAILED\n", ndev->name);
-+ result = -EAGAIN;
-+ goto done;
-+ }
-+ set_irq_type (ndev->irq, IRQT_FALLING);
-+ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq);
-+
-+ /* ifup device */
-+ acxmem_s_up(ndev);
-+
-+ /* We don't currently have to do anything else.
-+ * The setup of the MAC should be subsequently completed via
-+ * the mlme commands.
-+ * Higher layers know we're ready from dev->start==1 and
-+ * dev->tbusy==0. Our rx path knows to pass up received/
-+ * frames because of dev->flags&IFF_UP is true.
-+ */
-+done:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_close
-+**
-+** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP
-+** from set to clear. I.e. called by "ifconfig DEV down"
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxmem_e_close(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* ifdown device */
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ if (netif_device_present(ndev)) {
-+ acxmem_s_down(ndev);
-+ }
-+
-+ /* disable all IRQs, release shared IRQ handler */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ free_irq(ndev->irq, ndev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */
-+
-+ /* We currently don't have to do anything else.
-+ * Higher layers know we're not ready from dev->start==0 and
-+ * dev->tbusy==1. Our rx path knows to not pass up received
-+ * frames because of dev->flags&IFF_UP is false.
-+ */
-+ acx_sem_unlock(adev);
-+
-+ log(L_INIT, "closed device\n");
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_tx_timeout
-+**
-+** Called from network core. Must not sleep!
-+*/
-+static void
-+acxmem_i_tx_timeout(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ unsigned int tx_num_cleaned;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* clean processed tx descs, they may have been completely full */
-+ tx_num_cleaned = acxmem_l_clean_txdesc(adev);
-+
-+ /* nothing cleaned, yet (almost) no free buffers available?
-+ * --> clean all tx descs, no matter which status!!
-+ * Note that I strongly suspect that doing emergency cleaning
-+ * may confuse the firmware. This is a last ditch effort to get
-+ * ANYTHING to work again...
-+ *
-+ * TODO: it's best to simply reset & reinit hw from scratch...
-+ */
-+ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) {
-+ printk("%s: FAILED to free any of the many full tx buffers. "
-+ "Switching to emergency freeing. "
-+ "Please report!\n", ndev->name);
-+ acxmem_l_clean_txdesc_emergency(adev);
-+ }
-+
-+ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status))
-+ acx_wake_queue(ndev, "after tx timeout");
-+
-+ /* stall may have happened due to radio drift, so recalib radio */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+
-+ /* do unimportant work last */
-+ printk("%s: tx timeout!\n", ndev->name);
-+ adev->stats.tx_errors++;
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_set_multicast_list
-+** FIXME: most likely needs refinement
-+*/
-+static void
-+acxmem_i_set_multicast_list(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* firmwares don't have allmulti capability,
-+ * so just use promiscuous mode instead in this case. */
-+ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
-+ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ /* let kernel know in case *we* needed to set promiscuous */
-+ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI);
-+ } else {
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI);
-+ }
-+
-+ /* cannot update card settings directly here, atomic context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_l_process_rxdesc
-+**
-+** Called directly and only from the IRQ handler
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_rxbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_rxbuffer(const acx_device_t *adev)
-+{
-+ register const struct rxhostdesc *rxhostdesc;
-+ int i;
-+ /* no FN_ENTER here, we don't want that */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+ if (unlikely(!rxhostdesc)) return;
-+ for (i = 0; i < RX_CNT; i++) {
-+ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
-+ printk("rx: buf %d full\n", i);
-+ rxhostdesc++;
-+ }
-+}
-+#endif
-+
-+static void
-+acxmem_l_process_rxdesc(acx_device_t *adev)
-+{
-+ register rxhostdesc_t *hostdesc;
-+ register rxdesc_t *rxdesc;
-+ unsigned count, tail;
-+ u32 addr;
-+ u8 Ctl_8;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(acx_debug & L_BUFR))
-+ log_rxbuffer(adev);
-+
-+ /* First, have a loop to determine the first descriptor that's
-+ * full, just in case there's a mismatch between our current
-+ * rx_tail and the full descriptor we're supposed to handle. */
-+ tail = adev->rx_tail;
-+ count = RX_CNT;
-+ while (1) {
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+ rxdesc = &adev->rxdesc_start[tail];
-+ /* advance tail regardless of outcome of the below test */
-+ tail = (tail + 1) % RX_CNT;
-+
-+ /*
-+ * Unlike the PCI interface, where the ACX can write directly to
-+ * the host descriptors, on the slave memory interface we have to
-+ * pull these. All we really need to do is check the Ctl_8 field
-+ * in the rx descriptor on the ACX, which should be 0x11000000 if
-+ * we should process it.
-+ */
-+ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+ if ((Ctl_8 & DESC_CTL_HOSTOWN) &&
-+ (Ctl_8 & DESC_CTL_ACXDONE))
-+ break; /* found it! */
-+
-+ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */
-+ goto end;
-+ }
-+
-+ /* now process descriptors, starting with the first we figured out */
-+ while (1) {
-+ log(L_BUFR, "rx: tail=%u Ctl_8=%02X\n", tail, Ctl_8);
-+ /*
-+ * If the ACX has CTL_RECLAIM set on this descriptor there
-+ * is no buffer associated; it just wants us to tell it to
-+ * reclaim the memory.
-+ */
-+ if (!(Ctl_8 & DESC_CTL_RECLAIM)) {
-+
-+ /*
-+ * slave interface - pull data now
-+ */
-+ hostdesc->length = read_slavemem16 (adev, (u32) &(rxdesc->total_length));
-+
-+ /*
-+ * hostdesc->data is an rxbuffer_t, which includes header information,
-+ * but the length in the data packet doesn't. The header information
-+ * takes up an additional 12 bytes, so add that to the length we copy.
-+ */
-+ addr = read_slavemem32 (adev, (u32) &(rxdesc->ACXMemPtr));
-+ if (addr) {
-+ /*
-+ * How can &(rxdesc->ACXMemPtr) above ever be zero? Looks like we
-+ * get that now and then - try to trap it for debug.
-+ */
-+ if (addr & 0xffff0000) {
-+ printk("rxdesc 0x%08x\n", (u32) rxdesc);
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("Bad access!");
-+ }
-+ chaincopy_from_slavemem (adev, (u8 *) hostdesc->data, addr,
-+ hostdesc->length +
-+ (u32) &((rxbuffer_t *)0)->hdr_a3);
-+ acx_l_process_rxbuf(adev, hostdesc->data);
-+ }
-+ }
-+ else {
-+ printk ("rx reclaim only!\n");
-+ }
-+
-+ hostdesc->Status = 0;
-+
-+ /*
-+ * Let the ACX know we're done.
-+ */
-+ CLEAR_BIT (Ctl_8, DESC_CTL_HOSTOWN);
-+ SET_BIT (Ctl_8, DESC_CTL_HOSTDONE);
-+ SET_BIT (Ctl_8, DESC_CTL_RECLAIM);
-+ write_slavemem8 (adev, (u32) &rxdesc->Ctl_8, Ctl_8);
-+
-+ /*
-+ * Now tell the ACX we've finished with the receive buffer so
-+ * it can finish the reclaim.
-+ */
-+ write_reg16 (adev, IO_ACX_INT_TRIG, INT_TRIG_RXPRC);
-+
-+ /* ok, descriptor is handled, now check the next descriptor */
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+ rxdesc = &adev->rxdesc_start[tail];
-+
-+ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+
-+ /* if next descriptor is empty, then bail out */
-+ if (!(Ctl_8 & DESC_CTL_HOSTOWN) || !(Ctl_8 & DESC_CTL_ACXDONE))
-+ break;
-+
-+ tail = (tail + 1) % RX_CNT;
-+ }
-+end:
-+ adev->rx_tail = tail;
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_interrupt
-+**
-+** IRQ handler (atomic context, must not sleep, blah, blah)
-+*/
-+
-+/* scan is complete. all frames now on the receive queue are valid */
-+#define INFO_SCAN_COMPLETE 0x0001
-+#define INFO_WEP_KEY_NOT_FOUND 0x0002
-+/* hw has been reset as the result of a watchdog timer timeout */
-+#define INFO_WATCH_DOG_RESET 0x0003
-+/* failed to send out NULL frame from PS mode notification to AP */
-+/* recommended action: try entering 802.11 PS mode again */
-+#define INFO_PS_FAIL 0x0004
-+/* encryption/decryption process on a packet failed */
-+#define INFO_IV_ICV_FAILURE 0x0005
-+
-+/* Info mailbox format:
-+2 bytes: type
-+2 bytes: status
-+more bytes may follow
-+ rumors say about status:
-+ 0x0000 info available (set by hw)
-+ 0x0001 information received (must be set by host)
-+ 0x1000 info available, mailbox overflowed (messages lost) (set by hw)
-+ but in practice we've seen:
-+ 0x9000 when we did not set status to 0x0001 on prev message
-+ 0x1001 when we did set it
-+ 0x0000 was never seen
-+ conclusion: this is really a bitfield:
-+ 0x1000 is 'info available' bit
-+ 'mailbox overflowed' bit is 0x8000, not 0x1000
-+ value of 0x0000 probably means that there are no messages at all
-+ P.S. I dunno how in hell hw is supposed to notice that messages are lost -
-+ it does NOT clear bit 0x0001, and this bit will probably stay forever set
-+ after we set it once. Let's hope this will be fixed in firmware someday
-+*/
-+
-+static void
-+handle_info_irq(acx_device_t *adev)
-+{
-+#if ACX_DEBUG
-+ static const char * const info_type_msg[] = {
-+ "(unknown)",
-+ "scan complete",
-+ "WEP key not found",
-+ "internal watchdog reset was done",
-+ "failed to send powersave (NULL frame) notification to AP",
-+ "encrypt/decrypt on a packet has failed",
-+ "TKIP tx keys disabled",
-+ "TKIP rx keys disabled",
-+ "TKIP rx: key ID not found",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "TKIP IV value exceeds thresh"
-+ };
-+#endif
-+ u32 info_type, info_status;
-+
-+ info_type = read_slavemem32 (adev, (u32) adev->info_area);
-+
-+ info_status = (info_type >> 16);
-+ info_type = (u16)info_type;
-+
-+ /* inform fw that we have read this info message */
-+ write_slavemem32(adev, (u32) adev->info_area, info_type | 0x00010000);
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK);
-+ write_flush(adev);
-+
-+ log(L_CTL, "info_type:%04X info_status:%04X\n",
-+ info_type, info_status);
-+
-+ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n",
-+ info_status, info_type,
-+ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ?
-+ 0 : info_type]
-+ );
-+}
-+
-+
-+static void
-+log_unusual_irq(u16 irqtype) {
-+ /*
-+ if (!printk_ratelimit())
-+ return;
-+ */
-+
-+ printk("acx: got");
-+ if (irqtype & HOST_INT_TX_XFER) {
-+ printk(" Tx_Xfer");
-+ }
-+ if (irqtype & HOST_INT_RX_COMPLETE) {
-+ printk(" Rx_Complete");
-+ }
-+ if (irqtype & HOST_INT_DTIM) {
-+ printk(" DTIM");
-+ }
-+ if (irqtype & HOST_INT_BEACON) {
-+ printk(" Beacon");
-+ }
-+ if (irqtype & HOST_INT_TIMER) {
-+ log(L_IRQ, " Timer");
-+ }
-+ if (irqtype & HOST_INT_KEY_NOT_FOUND) {
-+ printk(" Key_Not_Found");
-+ }
-+ if (irqtype & HOST_INT_IV_ICV_FAILURE) {
-+ printk(" IV_ICV_Failure (crypto)");
-+ }
-+ /* HOST_INT_CMD_COMPLETE */
-+ /* HOST_INT_INFO */
-+ if (irqtype & HOST_INT_OVERFLOW) {
-+ printk(" Overflow");
-+ }
-+ if (irqtype & HOST_INT_PROCESS_ERROR) {
-+ printk(" Process_Error");
-+ }
-+ /* HOST_INT_SCAN_COMPLETE */
-+ if (irqtype & HOST_INT_FCS_THRESHOLD) {
-+ printk(" FCS_Threshold");
-+ }
-+ if (irqtype & HOST_INT_UNKNOWN) {
-+ printk(" Unknown");
-+ }
-+ printk(" IRQ(s)\n");
-+}
-+
-+
-+static void
-+update_link_quality_led(acx_device_t *adev)
-+{
-+ int qual;
-+
-+ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise);
-+ if (qual > adev->brange_max_quality)
-+ qual = adev->brange_max_quality;
-+
-+ if (time_after(jiffies, adev->brange_time_last_state_change +
-+ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) {
-+ acxmem_l_power_led(adev, (adev->brange_last_state == 0));
-+ adev->brange_last_state ^= 1; /* toggle */
-+ adev->brange_time_last_state_change = jiffies;
-+ }
-+}
-+
-+
-+#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */
-+
-+static irqreturn_t
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+acxmem_i_interrupt(int irq, void *dev_id)
-+#else
-+acxmwm_i_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+#endif
-+{
-+ acx_device_t *adev;
-+ unsigned long flags;
-+ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY;
-+ register u16 irqtype;
-+ u16 unmasked;
-+
-+ adev = ndev2adev((struct net_device*)dev_id);
-+
-+ /* LOCKING: can just spin_lock() since IRQs are disabled anyway.
-+ * I am paranoid */
-+ acx_lock(adev, flags);
-+
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ if (unlikely(0xffff == unmasked)) {
-+ /* 0xffff value hints at missing hardware,
-+ * so don't do anything.
-+ * Not very clean, but other drivers do the same... */
-+ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n");
-+ goto none;
-+ }
-+
-+ /* We will check only "interesting" IRQ types */
-+ irqtype = unmasked & ~adev->irq_mask;
-+ if (!irqtype) {
-+ /* We are on a shared IRQ line and it wasn't our IRQ */
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n",
-+ unmasked, adev->irq_mask);
-+ goto none;
-+ }
-+
-+ /* Done here because IRQ_NONEs taking three lines of log
-+ ** drive me crazy */
-+ FN_ENTER;
-+
-+#define IRQ_ITERATE 1
-+#if IRQ_ITERATE
-+if (jiffies != adev->irq_last_jiffies) {
-+ adev->irq_loops_this_jiffy = 0;
-+ adev->irq_last_jiffies = jiffies;
-+}
-+
-+/* safety condition; we'll normally abort loop below
-+ * in case no IRQ type occurred */
-+while (likely(--irqcount)) {
-+#endif
-+ /* ACK all IRQs ASAP */
-+ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff);
-+
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n",
-+ unmasked, adev->irq_mask, irqtype);
-+
-+ /* Handle most important IRQ types first */
-+ if (irqtype & HOST_INT_RX_DATA) {
-+ log(L_IRQ, "got Rx_Data IRQ\n");
-+ acxmem_l_process_rxdesc(adev);
-+ }
-+ if (irqtype & HOST_INT_TX_COMPLETE) {
-+ log(L_IRQ, "got Tx_Complete IRQ\n");
-+ /* don't clean up on each Tx complete, wait a bit
-+ * unless we're going towards full, in which case
-+ * we do it immediately, too (otherwise we might lockup
-+ * with a full Tx buffer if we go into
-+ * acxmem_l_clean_txdesc() at a time when we won't wakeup
-+ * the net queue in there for some reason...) */
-+ if (adev->tx_free <= TX_START_CLEAN) {
-+#if TX_CLEANUP_IN_SOFTIRQ
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP);
-+#else
-+ acxmem_l_clean_txdesc(adev);
-+#endif
-+ }
-+ }
-+
-+ /* Less frequent ones */
-+ if (irqtype & (0
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ | HOST_INT_SCAN_COMPLETE
-+ )) {
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ log(L_IRQ, "got Command_Complete IRQ\n");
-+ /* save the state for the running issue_cmd() */
-+ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE);
-+ }
-+ if (irqtype & HOST_INT_INFO) {
-+ handle_info_irq(adev);
-+ }
-+ if (irqtype & HOST_INT_SCAN_COMPLETE) {
-+ log(L_IRQ, "got Scan_Complete IRQ\n");
-+ /* need to do that in process context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN);
-+ /* remember that fw is not scanning anymore */
-+ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
-+ }
-+ }
-+
-+ /* These we just log, but either they happen rarely
-+ * or we keep them masked out */
-+ if (irqtype & (0
-+ /* | HOST_INT_RX_DATA */
-+ /* | HOST_INT_TX_COMPLETE */
-+ | HOST_INT_TX_XFER
-+ | HOST_INT_RX_COMPLETE
-+ | HOST_INT_DTIM
-+ | HOST_INT_BEACON
-+ | HOST_INT_TIMER
-+ | HOST_INT_KEY_NOT_FOUND
-+ | HOST_INT_IV_ICV_FAILURE
-+ /* | HOST_INT_CMD_COMPLETE */
-+ /* | HOST_INT_INFO */
-+ | HOST_INT_OVERFLOW
-+ | HOST_INT_PROCESS_ERROR
-+ /* | HOST_INT_SCAN_COMPLETE */
-+ | HOST_INT_FCS_THRESHOLD
-+ | HOST_INT_UNKNOWN
-+ )) {
-+ log_unusual_irq(irqtype);
-+ }
-+
-+#if IRQ_ITERATE
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ irqtype = unmasked & ~adev->irq_mask;
-+ /* Bail out if no new IRQ bits or if all are masked out */
-+ if (!irqtype)
-+ break;
-+
-+ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) {
-+ printk(KERN_ERR "acx: too many interrupts per jiffy!\n");
-+ /* Looks like card floods us with IRQs! Try to stop that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ /* This will short-circuit all future attempts to handle IRQ.
-+ * We cant do much more... */
-+ adev->irq_mask = 0;
-+ break;
-+ }
-+}
-+#endif
-+ /* Routine to perform blink with range */
-+ if (unlikely(adev->led_power == 2))
-+ update_link_quality_led(adev);
-+
-+/* handled: */
-+ /* write_flush(adev); - not needed, last op was read anyway */
-+ acx_unlock(adev, flags);
-+ FN_EXIT0;
-+ return IRQ_HANDLED;
-+
-+none:
-+ acx_unlock(adev, flags);
-+ return IRQ_NONE;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_power_led
-+*/
-+void
-+acxmem_l_power_led(acx_device_t *adev, int enable)
-+{
-+ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800;
-+
-+ /* A hack. Not moving message rate limiting to adev->xxx
-+ * (it's only a debug message after all) */
-+ static int rate_limit = 0;
-+
-+ if (rate_limit++ < 3)
-+ log(L_IOCTL, "Please report in case toggling the power "
-+ "LED doesn't work for your card!\n");
-+ if (enable)
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled);
-+ else
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled);
-+}
-+
-+
-+/***********************************************************************
-+** Ioctls
-+*/
-+
-+/***********************************************************************
-+*/
-+int
-+acx111pci_ioctl_info(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+#if ACX_DEBUG > 1
-+ acx_device_t *adev = ndev2adev(ndev);
-+ rxdesc_t *rxdesc;
-+ txdesc_t *txdesc;
-+ rxhostdesc_t *rxhostdesc;
-+ txhostdesc_t *txhostdesc;
-+ struct acx111_ie_memoryconfig memconf;
-+ struct acx111_ie_queueconfig queueconf;
-+ unsigned long flags;
-+ int i;
-+ char memmap[0x34];
-+ char rxconfig[0x8];
-+ char fcserror[0x8];
-+ char ratefallback[0x5];
-+
-+ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) )
-+ return OK;
-+ /* using printk() since we checked debug flag already */
-+
-+ acx_sem_lock(adev);
-+
-+ if (!IS_ACX111(adev)) {
-+ printk("acx111-specific function called "
-+ "with non-acx111 chip, aborting\n");
-+ goto end_ok;
-+ }
-+
-+ /* get Acx111 Memory Configuration */
-+ memset(&memconf, 0, sizeof(memconf));
-+ /* BTW, fails with 12 (Write only) error code.
-+ ** Retained for easy testing of issue_cmd error handling :) */
-+ printk ("Interrogating queue config\n");
-+ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG);
-+ printk ("done with queue config\n");
-+
-+ /* get Acx111 Queue Configuration */
-+ memset(&queueconf, 0, sizeof(queueconf));
-+ printk ("Interrogating mem config options\n");
-+ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
-+ printk ("done with mem config options\n");
-+
-+ /* get Acx111 Memory Map */
-+ memset(memmap, 0, sizeof(memmap));
-+ printk ("Interrogating mem map\n");
-+ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP);
-+ printk ("done with mem map\n");
-+
-+ /* get Acx111 Rx Config */
-+ memset(rxconfig, 0, sizeof(rxconfig));
-+ printk ("Interrogating rxconfig\n");
-+ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG);
-+ printk ("done with queue rxconfig\n");
-+
-+ /* get Acx111 fcs error count */
-+ memset(fcserror, 0, sizeof(fcserror));
-+ printk ("Interrogating fcs err count\n");
-+ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT);
-+ printk ("done with err count\n");
-+
-+ /* get Acx111 rate fallback */
-+ memset(ratefallback, 0, sizeof(ratefallback));
-+ printk ("Interrogating rate fallback\n");
-+ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK);
-+ printk ("done with rate fallback\n");
-+
-+ /* force occurrence of a beacon interrupt */
-+ /* TODO: comment why is this necessary */
-+ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON);
-+
-+ /* dump Acx111 Mem Configuration */
-+ printk("dump mem config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Number of stations: %1X\n"
-+ "Memory block size: %1X\n"
-+ "tx/rx memory block allocation: %1X\n"
-+ "count rx: %X / tx: %X queues\n"
-+ "options %1X\n"
-+ "fragmentation %1X\n"
-+ "Rx Queue 1 Count Descriptors: %X\n"
-+ "Rx Queue 1 Host Memory Start: %X\n"
-+ "Tx Queue 1 Count Descriptors: %X\n"
-+ "Tx Queue 1 Attributes: %X\n",
-+ memconf.len, (int) sizeof(memconf),
-+ memconf.no_of_stations,
-+ memconf.memory_block_size,
-+ memconf.tx_rx_memory_block_allocation,
-+ memconf.count_rx_queues, memconf.count_tx_queues,
-+ memconf.options,
-+ memconf.fragmentation,
-+ memconf.rx_queue1_count_descs,
-+ acx2cpu(memconf.rx_queue1_host_rx_start),
-+ memconf.tx_queue1_count_descs,
-+ memconf.tx_queue1_attributes);
-+
-+ /* dump Acx111 Queue Configuration */
-+ printk("dump queue head:\n"
-+ "data read: %d, struct size: %d\n"
-+ "tx_memory_block_address (from card): %X\n"
-+ "rx_memory_block_address (from card): %X\n"
-+ "rx1_queue address (from card): %X\n"
-+ "tx1_queue address (from card): %X\n"
-+ "tx1_queue attributes (from card): %X\n",
-+ queueconf.len, (int) sizeof(queueconf),
-+ queueconf.tx_memory_block_address,
-+ queueconf.rx_memory_block_address,
-+ queueconf.rx1_queue_address,
-+ queueconf.tx1_queue_address,
-+ queueconf.tx1_attributes);
-+
-+ /* dump Acx111 Mem Map */
-+ printk("dump mem map:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Code start: %X\n"
-+ "Code end: %X\n"
-+ "WEP default key start: %X\n"
-+ "WEP default key end: %X\n"
-+ "STA table start: %X\n"
-+ "STA table end: %X\n"
-+ "Packet template start: %X\n"
-+ "Packet template end: %X\n"
-+ "Queue memory start: %X\n"
-+ "Queue memory end: %X\n"
-+ "Packet memory pool start: %X\n"
-+ "Packet memory pool end: %X\n"
-+ "iobase: %p\n"
-+ "iobase2: %p\n",
-+ *((u16 *)&memmap[0x02]), (int) sizeof(memmap),
-+ *((u32 *)&memmap[0x04]),
-+ *((u32 *)&memmap[0x08]),
-+ *((u32 *)&memmap[0x0C]),
-+ *((u32 *)&memmap[0x10]),
-+ *((u32 *)&memmap[0x14]),
-+ *((u32 *)&memmap[0x18]),
-+ *((u32 *)&memmap[0x1C]),
-+ *((u32 *)&memmap[0x20]),
-+ *((u32 *)&memmap[0x24]),
-+ *((u32 *)&memmap[0x28]),
-+ *((u32 *)&memmap[0x2C]),
-+ *((u32 *)&memmap[0x30]),
-+ adev->iobase,
-+ adev->iobase2);
-+
-+ /* dump Acx111 Rx Config */
-+ printk("dump rx config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "rx config: %X\n"
-+ "rx filter config: %X\n",
-+ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig),
-+ *((u16 *)&rxconfig[0x04]),
-+ *((u16 *)&rxconfig[0x06]));
-+
-+ /* dump Acx111 fcs error */
-+ printk("dump fcserror:\n"
-+ "data read: %d, struct size: %d\n"
-+ "fcserrors: %X\n",
-+ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror),
-+ *((u32 *)&fcserror[0x04]));
-+
-+ /* dump Acx111 rate fallback */
-+ printk("dump rate fallback:\n"
-+ "data read: %d, struct size: %d\n"
-+ "ratefallback: %X\n",
-+ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback),
-+ *((u8 *)&ratefallback[0x04]));
-+
-+ /* protect against IRQ */
-+ acx_lock(adev, flags);
-+
-+ /* dump acx111 internal rx descriptor ring buffer */
-+ rxdesc = adev->rxdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump internal rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n"
-+ "RxStatus (dynamic) 0x%X\n"
-+ "Mod/Pre (dynamic) 0x%X\n",
-+ i,
-+ rxdesc,
-+ acx2cpu(rxdesc->pNextDesc),
-+ acx2cpu(rxdesc->ACXMemPtr),
-+ rxdesc->Ctl_8,
-+ rxdesc->rate,
-+ rxdesc->error,
-+ rxdesc->SNR);
-+ rxdesc++;
-+ }
-+
-+ /* dump host rx descriptor ring buffer */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump host rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ rxhostdesc,
-+ acx2cpu(rxhostdesc->data_phy),
-+ rxhostdesc->data_offset,
-+ le16_to_cpu(rxhostdesc->Ctl_16),
-+ le16_to_cpu(rxhostdesc->length),
-+ acx2cpu(rxhostdesc->desc_phy_next),
-+ rxhostdesc->Status);
-+ rxhostdesc++;
-+ }
-+
-+ /* dump acx111 internal tx descriptor ring buffer */
-+ txdesc = adev->txdesc_start;
-+
-+ /* loop over complete transmit pool */
-+ if (txdesc) for (i = 0; i < TX_CNT; i++) {
-+ printk("\ndump internal txdesc %d:\n"
-+ "size 0x%X\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "host mem pointer (dynamic) 0x%X\n"
-+ "length (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "CTL2 (dynamic) 0x%X\n"
-+ "Status (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n",
-+ i,
-+ (int) sizeof(struct txdesc),
-+ txdesc,
-+ acx2cpu(txdesc->pNextDesc),
-+ acx2cpu(txdesc->AcxMemPtr),
-+ acx2cpu(txdesc->HostMemPtr),
-+ le16_to_cpu(txdesc->total_length),
-+ txdesc->Ctl_8,
-+ txdesc->Ctl2_8, txdesc->error,
-+ txdesc->u.r1.rate);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+
-+ /* dump host tx descriptor ring buffer */
-+
-+ txhostdesc = adev->txhostdesc_start;
-+
-+ /* loop over complete host send pool */
-+ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) {
-+ printk("\ndump host txdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ txhostdesc,
-+ acx2cpu(txhostdesc->data_phy),
-+ txhostdesc->data_offset,
-+ le16_to_cpu(txhostdesc->Ctl_16),
-+ le16_to_cpu(txhostdesc->length),
-+ acx2cpu(txhostdesc->desc_phy_next),
-+ le32_to_cpu(txhostdesc->Status));
-+ txhostdesc++;
-+ }
-+
-+ /* write_reg16(adev, 0xb4, 0x4); */
-+
-+ acx_unlock(adev, flags);
-+end_ok:
-+
-+ acx_sem_unlock(adev);
-+#endif /* ACX_DEBUG */
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100mem_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ u16 gpio_old;
-+
-+ if (!IS_ACX100(adev)) {
-+ /* WARNING!!!
-+ * Removing this check *might* damage
-+ * hardware, since we're tweaking GPIOs here after all!!!
-+ * You've been warned...
-+ * WARNING!!! */
-+ printk("acx: sorry, setting bias level for non-acx100 "
-+ "is not supported yet\n");
-+ return OK;
-+ }
-+
-+ if (*extra > 7) {
-+ printk("acx: invalid bias parameter, range is 0-7\n");
-+ return -EINVAL;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ /* Need to lock accesses to [IO_ACX_GPIO_OUT]:
-+ * IRQ handler uses it to update LED */
-+ acx_lock(adev, flags);
-+ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT);
-+ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8));
-+ acx_unlock(adev, flags);
-+
-+ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old);
-+ printk("%s: PHY power amplifier bias: old:%d, new:%d\n",
-+ ndev->name,
-+ (gpio_old & 0x0700) >> 8, (unsigned char)*extra);
-+
-+ acx_sem_unlock(adev);
-+
-+ return OK;
-+}
-+
-+/***************************************************************
-+** acxmem_l_alloc_tx
-+** Actually returns a txdesc_t* ptr
-+**
-+** FIXME: in case of fragments, should allocate multiple descrs
-+** after figuring out how many we need and whether we still have
-+** sufficiently many.
-+*/
-+tx_t*
-+acxmem_l_alloc_tx(acx_device_t *adev)
-+{
-+ struct txdesc *txdesc;
-+ unsigned head;
-+ u8 ctl8;
-+ static int txattempts = 0;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(!adev->tx_free)) {
-+ printk("acx: BUG: no free txdesc left\n");
-+ /*
-+ * Probably the ACX ignored a transmit attempt and now there's a packet
-+ * sitting in the queue we think should be transmitting but the ACX doesn't
-+ * know about.
-+ * On the first pass, send the ACX a TxProc interrupt to try moving
-+ * things along, and if that doesn't work (ie, we get called again) completely
-+ * flush the transmit queue.
-+ */
-+ if (txattempts < 10) {
-+ txattempts++;
-+ printk ("acx: trying to wake up ACX\n");
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
-+ write_flush(adev); }
-+ else {
-+ txattempts = 0;
-+ printk ("acx: flushing transmit queue.\n");
-+ acxmem_l_clean_txdesc_emergency (adev);
-+ }
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ /*
-+ * Make a quick check to see if there is transmit buffer space on
-+ * the ACX. This can't guarantee there is enough space for the packet
-+ * since we don't yet know how big it is, but it will prevent at least some
-+ * annoyances.
-+ */
-+ if (!adev->acx_txbuf_blocks_free) {
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ head = adev->tx_head;
-+ /*
-+ * txdesc points to ACX memory
-+ */
-+ txdesc = get_txdesc(adev, head);
-+ ctl8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+
-+ /*
-+ * If we don't own the buffer (HOSTOWN) it is certainly not free; however,
-+ * we may have previously thought we had enough memory to send
-+ * a packet, allocated the buffer then gave up when we found not enough
-+ * transmit buffer space on the ACX. In that case, HOSTOWN and
-+ * ACXDONE will both be set.
-+ */
-+ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_HOSTOWN))) {
-+ /* whoops, descr at current index is not free, so probably
-+ * ring buffer already full */
-+ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find "
-+ "free txdesc\n", head, ctl8);
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ /* Needed in case txdesc won't be eventually submitted for tx */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_ACXDONE_HOSTOWN);
-+
-+ adev->tx_free--;
-+ log(L_BUFT, "tx: got desc %u, %u remain\n",
-+ head, adev->tx_free);
-+ /* Keep a few free descs between head and tail of tx ring.
-+ ** It is not absolutely needed, just feels safer */
-+ if (adev->tx_free < TX_STOP_QUEUE) {
-+ log(L_BUF, "stop queue (%u tx desc left)\n",
-+ adev->tx_free);
-+ acx_stop_queue(adev->ndev, NULL);
-+ }
-+
-+ /* returning current descriptor, so advance to next free one */
-+ adev->tx_head = (head + 1) % TX_CNT;
-+end:
-+ FN_EXIT0;
-+
-+ return (tx_t*)txdesc;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_l_dealloc_tx
-+** Clears out a previously allocatedvoid acxmem_l_dealloc_tx(tx_t *tx_opaque);
-+ transmit descriptor. The ACX
-+** can get confused if we skip transmit descriptors in the queue,
-+** so when we don't need a descriptor return it to its original
-+** state and move the queue head pointer back.
-+**
-+*/
-+void
-+acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque)
-+{
-+ /*
-+ * txdesc is the address of the descriptor on the ACX.
-+ */
-+ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
-+ txdesc_t tmptxdesc;
-+ int index;
-+
-+ memset (&tmptxdesc, 0, sizeof(tmptxdesc));
-+ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
-+ tmptxdesc.u.r1.rate = 0x0a;
-+
-+ /*
-+ * Clear out all of the transmit descriptor except for the next pointer
-+ */
-+ copy_to_slavemem (adev, (u32) &(txdesc->HostMemPtr),
-+ (u8 *) &(tmptxdesc.HostMemPtr),
-+ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc));
-+
-+ /*
-+ * This is only called immediately after we've allocated, so we should
-+ * be able to set the head back to this descriptor.
-+ */
-+ index = ((u8*) txdesc - (u8*)adev->txdesc_start) / adev->txdesc_size;
-+ printk ("acx_dealloc: moving head from %d to %d\n", adev->tx_head, index);
-+ adev->tx_head = index;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void*
-+acxmem_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
-+{
-+ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_tx_data
-+**
-+** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
-+** Can be called from acx_i_start_xmit (data frames from net core).
-+**
-+** FIXME: in case of fragments, should loop over the number of
-+** pre-allocated tx descrs, properly setting up transfer data and
-+** CTL_xxx flags according to fragment number.
-+*/
-+void
-+acxmem_update_queue_indicator (acx_device_t *adev, int txqueue)
-+{
-+#ifdef USING_MORE_THAN_ONE_TRANSMIT_QUEUE
-+ u32 indicator;
-+ unsigned long flags;
-+ int count;
-+
-+ /*
-+ * Can't handle an interrupt while we're fiddling with the ACX's lock,
-+ * according to TI. The ACX is supposed to hold fw_lock for at most
-+ * 500ns.
-+ */
-+ local_irq_save (flags);
-+
-+ /*
-+ * Wait for ACX to release the lock (at most 500ns).
-+ */
-+ count = 0;
-+ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
-+ && (count++ < 50)) {
-+ ndelay (10);
-+ }
-+ if (count < 50) {
-+
-+ /*
-+ * Take out the host lock - anything non-zero will work, so don't worry about
-+ * be/le
-+ */
-+ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 1);
-+
-+ /*
-+ * Avoid a race condition
-+ */
-+ count = 0;
-+ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
-+ && (count++ < 50)) {
-+ ndelay (10);
-+ }
-+
-+ if (count < 50) {
-+ /*
-+ * Mark the queue active
-+ */
-+ indicator = read_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator));
-+ indicator |= cpu_to_le32 (1 << txqueue);
-+ write_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator), indicator);
-+ }
-+
-+ /*
-+ * Release the host lock
-+ */
-+ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 0);
-+
-+ }
-+
-+ /*
-+ * Restore interrupts
-+ */
-+ local_irq_restore (flags);
-+#endif
-+}
-+
-+void
-+acxmem_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len)
-+{
-+ /*
-+ * txdesc is the address on the ACX
-+ */
-+ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
-+ txhostdesc_t *hostdesc1, *hostdesc2;
-+ client_t *clt;
-+ u16 rate_cur;
-+ u8 Ctl_8, Ctl2_8;
-+ u32 addr;
-+
-+ FN_ENTER;
-+ /* fw doesn't tx such packets anyhow */
-+ if (unlikely(len < WLAN_HDR_A3_LEN))
-+ goto end;
-+
-+ hostdesc1 = get_txhostdesc(adev, txdesc);
-+ /* modify flag status in separate variable to be able to write it back
-+ * in one big swoop later (also in order to have less device memory
-+ * accesses) */
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */
-+
-+ hostdesc2 = hostdesc1 + 1;
-+
-+ /* DON'T simply set Ctl field to 0 here globally,
-+ * it needs to maintain a consistent flag status (those are state flags!!),
-+ * otherwise it may lead to severe disruption. Only set or reset particular
-+ * flags at the exact moment this is needed... */
-+
-+ /* let chip do RTS/CTS handshaking before sending
-+ * in case packet size exceeds threshold */
-+ if (len > adev->rts_threshold)
-+ SET_BIT(Ctl2_8, DESC_CTL2_RTS);
-+ else
-+ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS);
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1);
-+ break;
-+ case ACX_MODE_2_STA:
-+ clt = adev->ap_client;
-+ break;
-+#if 0
-+/* testing was done on acx111: */
-+ case ACX_MODE_MONITOR:
-+ SET_BIT(Ctl2_8, 0
-+/* sends CTS to self before packet */
-+ + DESC_CTL2_SEQ /* don't increase sequence field */
-+/* not working (looks like good fcs is still added) */
-+ + DESC_CTL2_FCS /* don't add the FCS */
-+/* not tested */
-+ + DESC_CTL2_MORE_FRAG
-+/* not tested */
-+ + DESC_CTL2_RETRY /* don't increase retry field */
-+/* not tested */
-+ + DESC_CTL2_POWER /* don't increase power mgmt. field */
-+/* no effect */
-+ + DESC_CTL2_WEP /* encrypt this frame */
-+/* not tested */
-+ + DESC_CTL2_DUR /* don't increase duration field */
-+ );
-+ /* fallthrough */
-+#endif
-+ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
-+ clt = NULL;
-+ break;
-+ }
-+
-+ rate_cur = clt ? clt->rate_cur : adev->rate_bcast;
-+ if (unlikely(!rate_cur)) {
-+ printk("acx: driver bug! bad ratemask\n");
-+ goto end;
-+ }
-+
-+ /* used in tx cleanup routine for auto rate and accounting: */
-+ put_txcr(adev, txdesc, clt, rate_cur);
-+
-+ write_slavemem16 (adev, (u32) &(txdesc->total_length), cpu_to_le16(len));
-+ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN);
-+ if (IS_ACX111(adev)) {
-+ /* note that if !txdesc->do_auto, txrate->cur
-+ ** has only one nonzero bit */
-+ txdesc->u.r2.rate111 = cpu_to_le16(
-+ rate_cur
-+ /* WARNING: I was never able to make it work with prism54 AP.
-+ ** It was falling down to 1Mbit where shortpre is not applicable,
-+ ** and not working at all at "5,11 basic rates only" setting.
-+ ** I even didn't see tx packets in radio packet capture.
-+ ** Disabled for now --vda */
-+ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */
-+ );
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ /* should add this to rate111 above as necessary */
-+ | (clt->pbcc511 ? RATE111_PBCC511 : 0)
-+#endif
-+ hostdesc1->length = cpu_to_le16(len);
-+ } else { /* ACX100 */
-+ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100;
-+ write_slavemem8 (adev, (u32) &(txdesc->u.r1.rate), rate_100);
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ if (clt->pbcc511) {
-+ if (n == RATE100_5 || n == RATE100_11)
-+ n |= RATE100_PBCC511;
-+ }
-+
-+ if (clt->shortpre && (clt->cur != RATE111_1))
-+ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */
-+#endif
-+ /* set autodma and reclaim and 1st mpdu */
-+ SET_BIT(Ctl_8, DESC_CTL_FIRSTFRAG);
-+
-+#if ACX_FRAGMENTATION
-+ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */
-+#endif
-+ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN);
-+
-+ /*
-+ * Since we're not using autodma copy the packet data to the acx now.
-+ * Even host descriptors point to the packet header, and the odd indexed
-+ * descriptor following points to the packet data.
-+ *
-+ * The first step is to find free memory in the ACX transmit buffers.
-+ * They don't necessarily map one to one with the transmit queue entries,
-+ * so search through them starting just after the last one used.
-+ */
-+ addr = allocate_acx_txbuf_space (adev, len);
-+ if (addr) {
-+ chaincopy_to_slavemem (adev, addr, hostdesc1->data, len);
-+ }
-+ else {
-+ /*
-+ * Bummer. We thought we might have enough room in the transmit
-+ * buffers to send this packet, but it turns out we don't. alloc_tx
-+ * has already marked this transmit descriptor as HOSTOWN and ACXDONE,
-+ * which means the ACX will hang when it gets to this descriptor unless
-+ * we do something about it. Having a bubble in the transmit queue just
-+ * doesn't seem to work, so we have to reset this transmit queue entry's
-+ * state to its original value and back up our head pointer to point
-+ * back to this entry.
-+ */
-+ hostdesc1->length = 0;
-+ hostdesc2->length = 0;
-+ write_slavemem16 (adev, (u32) &(txdesc->total_length), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG);
-+ adev->tx_head = ((u8*) txdesc - (u8*) adev->txdesc_start) / adev->txdesc_size;
-+ goto end;
-+ }
-+ /*
-+ * Tell the ACX where the packet is.
-+ */
-+ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), addr);
-+
-+ }
-+ /* don't need to clean ack/rts statistics here, already
-+ * done on descr cleanup */
-+
-+ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors
-+ * are now owned by the acx100; do this as LAST operation */
-+ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN);
-+ /* flush writes before we release hostdesc to the adapter here */
-+ //wmb();
-+
-+ /* write back modified flags */
-+ /*
-+ * At this point Ctl_8 should just be FIRSTFRAG
-+ */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl2_8),Ctl2_8);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), Ctl_8);
-+ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */
-+
-+ /*
-+ * Update the queue indicator to say there's data on the first queue.
-+ */
-+ acxmem_update_queue_indicator (adev, 0);
-+
-+ /* flush writes before we tell the adapter that it's its turn now */
-+ mmiowb();
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
-+ write_flush(adev);
-+
-+ /* log the packet content AFTER sending it,
-+ * in order to not delay sending any further than absolutely needed
-+ * Do separate logs for acx100/111 to have human-readable rates */
-+ if (unlikely(acx_debug & (L_XFER|L_DATA))) {
-+ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc;
-+ if (IS_ACX111(adev))
-+ printk("tx: pkt (%s): len %d "
-+ "rate %04X%s status %u\n",
-+ acx_get_packet_type_string(le16_to_cpu(fc)), len,
-+ le16_to_cpu(txdesc->u.r2.rate111),
-+ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "",
-+ adev->status);
-+ else
-+ printk("tx: pkt (%s): len %d rate %03u%s status %u\n",
-+ acx_get_packet_type_string(fc), len,
-+ read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate)),
-+ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "",
-+ adev->status);
-+
-+ if (acx_debug & L_DATA) {
-+ printk("tx: 802.11 [%d]: ", len);
-+ acx_dump_bytes(hostdesc1->data, len);
-+ }
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_clean_txdesc
-+**
-+** This function resets the txdescs' status when the ACX100
-+** signals the TX done IRQ (txdescs have been processed), starting with
-+** the pool index of the descriptor which we would use next,
-+** in order to make sure that we can be as fast as possible
-+** in filling new txdescs.
-+** Everytime we get called we know where the next packet to be cleaned is.
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_txbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_txbuffer(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+ u8 Ctl_8;
-+
-+ /* no FN_ENTER here, we don't want that */
-+ /* no locks here, since it's entirely non-critical code */
-+ txdesc = adev->txdesc_start;
-+ if (unlikely(!txdesc)) return;
-+ printk("tx: desc->Ctl8's:");
-+ for (i = 0; i < TX_CNT; i++) {
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ printk(" %02X", Ctl_8);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ printk("\n");
-+}
-+#endif
-+
-+
-+static void
-+handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger)
-+{
-+ const char *err = "unknown error";
-+
-+ /* hmm, should we handle this as a mask
-+ * of *several* bits?
-+ * For now I think only caring about
-+ * individual bits is ok... */
-+ switch (error) {
-+ case 0x01:
-+ err = "no Tx due to error in other fragment";
-+ adev->wstats.discard.fragment++;
-+ break;
-+ case 0x02:
-+ err = "Tx aborted";
-+ adev->stats.tx_aborted_errors++;
-+ break;
-+ case 0x04:
-+ err = "Tx desc wrong parameters";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x08:
-+ err = "WEP key not found";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x10:
-+ err = "MSDU lifetime timeout? - try changing "
-+ "'iwconfig retry lifetime XXX'";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x20:
-+ err = "excessive Tx retries due to either distance "
-+ "too high or unable to Tx or Tx frame error - "
-+ "try changing 'iwconfig txpower XXX' or "
-+ "'sens'itivity or 'retry'";
-+ adev->wstats.discard.retries++;
-+ /* Tx error 0x20 also seems to occur on
-+ * overheating, so I'm not sure whether we
-+ * actually want to do aggressive radio recalibration,
-+ * since people maybe won't notice then that their hardware
-+ * is slowly getting cooked...
-+ * Or is it still a safe long distance from utter
-+ * radio non-functionality despite many radio recalibs
-+ * to final destructive overheating of the hardware?
-+ * In this case we really should do recalib here...
-+ * I guess the only way to find out is to do a
-+ * potentially fatal self-experiment :-\
-+ * Or maybe only recalib in case we're using Tx
-+ * rate auto (on errors switching to lower speed
-+ * --> less heat?) or 802.11 power save mode?
-+ *
-+ * ok, just do it. */
-+ if (++adev->retry_errors_msg_ratelimit % 4 == 0) {
-+ if (adev->retry_errors_msg_ratelimit <= 20) {
-+ printk("%s: several excessive Tx "
-+ "retry errors occurred, attempting "
-+ "to recalibrate radio. Radio "
-+ "drift might be caused by increasing "
-+ "card temperature, please check the card "
-+ "before it's too late!\n",
-+ adev->ndev->name);
-+ if (adev->retry_errors_msg_ratelimit == 20)
-+ printk("disabling above message\n");
-+ }
-+
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+ }
-+ break;
-+ case 0x40:
-+ err = "Tx buffer overflow";
-+ adev->stats.tx_fifo_errors++;
-+ break;
-+ case 0x80:
-+ err = "DMA error";
-+ adev->wstats.discard.misc++;
-+ break;
-+ }
-+ adev->stats.tx_errors++;
-+ if (adev->stats.tx_errors <= 20)
-+ printk("%s: tx error 0x%02X, buf %02u! (%s)\n",
-+ adev->ndev->name, error, finger, err);
-+ else
-+ printk("%s: tx error 0x%02X, buf %02u!\n",
-+ adev->ndev->name, error, finger);
-+}
-+
-+
-+unsigned int
-+acxmem_l_clean_txdesc(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ unsigned finger;
-+ int num_cleaned;
-+ u16 r111;
-+ u8 error, ack_failures, rts_failures, rts_ok, r100, Ctl_8;
-+ u32 acxmem;
-+ txdesc_t tmptxdesc;
-+
-+ FN_ENTER;
-+
-+ /*
-+ * Set up a template descriptor for re-initialization. The only
-+ * things that get set are Ctl_8 and the rate, and the rate defaults
-+ * to 1Mbps.
-+ */
-+ memset (&tmptxdesc, 0, sizeof (tmptxdesc));
-+ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
-+ tmptxdesc.u.r1.rate = 0x0a;
-+
-+ if (unlikely(acx_debug & L_DEBUG))
-+ log_txbuffer(adev);
-+
-+ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail);
-+
-+ /* We know first descr which is not free yet. We advance it as far
-+ ** as we see correct bits set in following descs (if next desc
-+ ** is NOT free, we shouldn't advance at all). We know that in
-+ ** front of tx_tail may be "holes" with isolated free descs.
-+ ** We will catch up when all intermediate descs will be freed also */
-+
-+ finger = adev->tx_tail;
-+ num_cleaned = 0;
-+ while (likely(finger != adev->tx_head)) {
-+ txdesc = get_txdesc(adev, finger);
-+
-+ /* If we allocated txdesc on tx path but then decided
-+ ** to NOT use it, then it will be left as a free "bubble"
-+ ** in the "allocated for tx" part of the ring.
-+ ** We may meet it on the next ring pass here. */
-+
-+ /* stop if not marked as "tx finished" and "host owned" */
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ if ((Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN)
-+ != DESC_CTL_ACXDONE_HOSTOWN) {
-+ if (unlikely(!num_cleaned)) { /* maybe remove completely */
-+ log(L_BUFT, "clean_txdesc: tail isn't free. "
-+ "tail:%d head:%d\n",
-+ adev->tx_tail, adev->tx_head);
-+ }
-+ break;
-+ }
-+
-+ /* remember desc values... */
-+ error = read_slavemem8 (adev, (u32) &(txdesc->error));
-+ ack_failures = read_slavemem8 (adev, (u32) &(txdesc->ack_failures));
-+ rts_failures = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures));
-+ rts_ok = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok));
-+ r100 = read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate));
-+ r111 = le16_to_cpu(read_slavemem16 (adev, (u32) &(txdesc->u.r2.rate111)));
-+
-+ /* need to check for certain error conditions before we
-+ * clean the descriptor: we still need valid descr data here */
-+ if (unlikely(0x30 & error)) {
-+ /* only send IWEVTXDROP in case of retry or lifetime exceeded;
-+ * all other errors mean we screwed up locally */
-+ union iwreq_data wrqu;
-+ wlan_hdr_t *hdr;
-+ txhostdesc_t *hostdesc;
-+
-+ hostdesc = get_txhostdesc(adev, txdesc);
-+ hdr = (wlan_hdr_t *)hostdesc->data;
-+ MAC_COPY(wrqu.addr.sa_data, hdr->a1);
-+ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL);
-+ }
-+
-+ /*
-+ * Free up the transmit data buffers
-+ */
-+ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (acxmem) {
-+ reclaim_acx_txbuf_space (adev, acxmem);
-+ }
-+
-+ /* ...and free the desc by clearing all the fields
-+ except the next pointer */
-+ copy_to_slavemem (adev,
-+ (u32) &(txdesc->HostMemPtr),
-+ (u8 *) &(tmptxdesc.HostMemPtr),
-+ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc)
-+ );
-+
-+ adev->tx_free++;
-+ num_cleaned++;
-+
-+ if ((adev->tx_free >= TX_START_QUEUE)
-+ && (adev->status == ACX_STATUS_4_ASSOCIATED)
-+ && (acx_queue_stopped(adev->ndev))
-+ ) {
-+ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n",
-+ adev->tx_free);
-+ acx_wake_queue(adev->ndev, NULL);
-+ }
-+
-+ /* do error checking, rate handling and logging
-+ * AFTER having done the work, it's faster */
-+
-+ /* do rate handling */
-+ if (adev->rate_auto) {
-+ struct client *clt = get_txc(adev, txdesc);
-+ if (clt) {
-+ u16 cur = get_txr(adev, txdesc);
-+ if (clt->rate_cur == cur) {
-+ acx_l_handle_txrate_auto(adev, clt,
-+ cur, /* intended rate */
-+ r100, r111, /* actually used rate */
-+ (error & 0x30), /* was there an error? */
-+ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free);
-+ }
-+ }
-+ }
-+
-+ if (unlikely(error))
-+ handle_tx_error(adev, error, finger);
-+
-+ if (IS_ACX111(adev))
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n",
-+ finger, ack_failures, rts_failures, rts_ok, r111);
-+ else
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n",
-+ finger, ack_failures, rts_failures, rts_ok, r100);
-+
-+ /* update pointer for descr to be cleaned next */
-+ finger = (finger + 1) % TX_CNT;
-+ }
-+
-+ /* remember last position */
-+ adev->tx_tail = finger;
-+/* end: */
-+ FN_EXIT1(num_cleaned);
-+ return num_cleaned;
-+}
-+
-+/* clean *all* Tx descriptors, and regardless of their previous state.
-+ * Used for brute-force reset handling. */
-+void
-+acxmem_l_clean_txdesc_emergency(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+ u32 acxmem;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc = get_txdesc(adev, i);
-+
-+ /* free it */
-+ write_slavemem8 (adev, (u32) &(txdesc->ack_failures), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->error), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN);
-+
-+ /*
-+ * Clean up the memory allocated on the ACX for this transmit descriptor.
-+ */
-+ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (acxmem) {
-+ reclaim_acx_txbuf_space (adev, acxmem);
-+ }
-+
-+ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), 0);
-+ }
-+
-+ adev->tx_free = TX_CNT;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_create_tx_host_desc_queue
-+*/
-+
-+static void*
-+allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg)
-+{
-+ void *ptr;
-+ ptr = kmalloc (size, GFP_KERNEL);
-+ /*
-+ * The ACX can't use the physical address, so we'll have to fake it
-+ * later and it might be handy to have the virtual address.
-+ */
-+ *phy = (dma_addr_t) NULL;
-+
-+ if (ptr) {
-+ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n",
-+ msg, (int)size, ptr, (unsigned long long)*phy);
-+ memset(ptr, 0, size);
-+ return ptr;
-+ }
-+ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n",
-+ msg, (int)size);
-+ return NULL;
-+}
-+
-+
-+/*
-+ * In the generic slave memory access mode, most of the stuff in
-+ * the txhostdesc_t is unused. It's only here because the rest of
-+ * the ACX driver expects it to be since the PCI version uses indirect
-+ * host memory organization with DMA. Since we're not using DMA the
-+ * only use we have for the host descriptors is to store the packets
-+ * on the way out.
-+ */
-+static int
-+acxmem_s_create_tx_host_desc_queue(acx_device_t *adev)
-+{
-+ txhostdesc_t *hostdesc;
-+ u8 *txbuf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate TX buffer */
-+ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS;
-+
-+ adev->txbuf_start = allocate(adev, adev->txbuf_area_size,
-+ &adev->txbuf_startphy, "txbuf_start");
-+ if (!adev->txbuf_start)
-+ goto fail;
-+
-+ /* allocate the TX host descriptor queue pool */
-+ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc);
-+
-+ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size,
-+ &adev->txhostdesc_startphy, "txhostdesc_start");
-+ if (!adev->txhostdesc_start)
-+ goto fail;
-+
-+ /* check for proper alignment of TX host descriptor pool */
-+ if ((long) adev->txhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ hostdesc = adev->txhostdesc_start;
-+ txbuf = adev->txbuf_start;
-+
-+#if 0
-+/* Each tx buffer is accessed by hardware via
-+** txdesc -> txhostdesc(s) -> txbuffer(s).
-+** We use only one txhostdesc per txdesc, but it looks like
-+** acx111 is buggy: it accesses second txhostdesc
-+** (via hostdesc.desc_phy_next field) even if
-+** txdesc->length == hostdesc->length and thus
-+** entire packet was placed into first txhostdesc.
-+** Due to this bug acx111 hangs unless second txhostdesc
-+** has le16_to_cpu(hostdesc.length) = 3 (or larger)
-+** Storing NULL into hostdesc.desc_phy_next
-+** doesn't seem to help.
-+**
-+** Update: although it worked on Xterasys XN-2522g
-+** with len=3 trick, WG311v2 is even more bogus, doesn't work.
-+** Keeping this code (#ifdef'ed out) for documentational purposes.
-+*/
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ hostdesc_phy += sizeof(*hostdesc);
-+ if (!(i & 1)) {
-+ hostdesc->data_phy = cpu2acx(txbuf_phy);
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
-+ /* hostdesc->length = ... */
-+ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
-+ hostdesc->pNext = ptr2acx(NULL);
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ hostdesc->data = txbuf;
-+
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ } else {
-+ /* hostdesc->data_phy = ... */
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ /* hostdesc->Ctl_16 = ... */
-+ hostdesc->length = cpu_to_le16(3); /* bug workaround */
-+ /* hostdesc->desc_phy_next = ... */
-+ /* hostdesc->pNext = ... */
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ /* hostdesc->data = ... */
-+ }
-+ hostdesc++;
-+ }
-+#endif
-+/* We initialize two hostdescs so that they point to adjacent
-+** memory areas. Thus txbuf is really just a contiguous memory area */
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ /* ->data is a non-hardware field: */
-+ hostdesc->data = txbuf;
-+
-+ if (!(i & 1)) {
-+ txbuf += WLAN_HDR_A3_LEN;
-+ } else {
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
-+ }
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_tx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_create_rx_host_desc_queue
-+*/
-+/* the whole size of a data buffer (header plus data body)
-+ * plus 32 bytes safety offset at the end */
-+#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32)
-+
-+static int
-+acxmem_s_create_rx_host_desc_queue(acx_device_t *adev)
-+{
-+ rxhostdesc_t *hostdesc;
-+ rxbuffer_t *rxbuf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate the RX host descriptor queue pool */
-+ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc);
-+
-+ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size,
-+ &adev->rxhostdesc_startphy, "rxhostdesc_start");
-+ if (!adev->rxhostdesc_start)
-+ goto fail;
-+
-+ /* check for proper alignment of RX host descriptor pool */
-+ if ((long) adev->rxhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ /* allocate Rx buffer pool which will be used by the acx
-+ * to store the whole content of the received frames in it */
-+ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE;
-+
-+ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size,
-+ &adev->rxbuf_startphy, "rxbuf_start");
-+ if (!adev->rxbuf_start)
-+ goto fail;
-+
-+ rxbuf = adev->rxbuf_start;
-+ hostdesc = adev->rxhostdesc_start;
-+
-+ /* don't make any popular C programming pointer arithmetic mistakes
-+ * here, otherwise I'll kill you...
-+ * (and don't dare asking me why I'm warning you about that...) */
-+ for (i = 0; i < RX_CNT; i++) {
-+ hostdesc->data = rxbuf;
-+ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE);
-+ rxbuf++;
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_rx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_create_hostdesc_queues
-+*/
-+int
-+acxmem_s_create_hostdesc_queues(acx_device_t *adev)
-+{
-+ int result;
-+ result = acxmem_s_create_tx_host_desc_queue(adev);
-+ if (OK != result) return result;
-+ result = acxmem_s_create_rx_host_desc_queue(adev);
-+ return result;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_tx_desc_queue
-+*/
-+static void
-+acxmem_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start)
-+{
-+ txdesc_t *txdesc;
-+ u32 clr;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ if (IS_ACX100(adev))
-+ adev->txdesc_size = sizeof(*txdesc);
-+ else
-+ /* the acx111 txdesc is 4 bytes larger */
-+ adev->txdesc_size = sizeof(*txdesc) + 4;
-+
-+ /*
-+ * This refers to an ACX address, not one of ours
-+ */
-+ adev->txdesc_start = (txdesc_t *) tx_queue_start;
-+
-+ log(L_DEBUG, "adev->txdesc_start=%p\n",
-+ adev->txdesc_start);
-+
-+ adev->tx_free = TX_CNT;
-+ /* done by memset: adev->tx_head = 0; */
-+ /* done by memset: adev->tx_tail = 0; */
-+ txdesc = adev->txdesc_start;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111 has a preinitialized Tx buffer! */
-+ /* loop over whole send pool */
-+ /* FIXME: do we have to do the hostmemptr stuff here?? */
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
-+ /* reserve two (hdr desc and payload desc) */
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ } else {
-+ /* ACX100 Tx buffer needs to be initialized by us */
-+ /* clear whole send pool. sizeof is safe here (we are acx100) */
-+
-+ /*
-+ * adev->txdesc_start refers to device memory, so we can't write
-+ * directly to it.
-+ */
-+ clr = (u32) adev->txdesc_start;
-+ while (clr < (u32) adev->txdesc_start + (TX_CNT * sizeof(*txdesc))) {
-+ write_slavemem32 (adev, clr, 0);
-+ clr += 4;
-+ }
-+
-+ /* loop over whole send pool */
-+ for (i = 0; i < TX_CNT; i++) {
-+ log(L_DEBUG, "configure card tx descriptor: 0x%p, "
-+ "size: 0x%X\n", txdesc, adev->txdesc_size);
-+
-+ /* initialise ctl */
-+ /*
-+ * No auto DMA here
-+ */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8),
-+ (u8) (DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG));
-+ /* done by memset(0): txdesc->Ctl2_8 = 0; */
-+
-+ /* point to next txdesc */
-+ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
-+ (u32) cpu_to_le32 ((u8 *) txdesc + adev->txdesc_size));
-+
-+ /* go to the next one */
-+ /* ++ is safe here (we are acx100) */
-+ txdesc++;
-+ }
-+ /* go back to the last one */
-+ txdesc--;
-+ /* and point to the first making it a ring buffer */
-+ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
-+ (u32) cpu_to_le32 (tx_queue_start));
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_rx_desc_queue
-+*/
-+static void
-+acxmem_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start)
-+{
-+ rxdesc_t *rxdesc;
-+ u32 mem_offs;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* done by memset: adev->rx_tail = 0; */
-+
-+ /* ACX111 doesn't need any further config: preconfigures itself.
-+ * Simply print ring buffer for debugging */
-+ if (IS_ACX111(adev)) {
-+ /* rxdesc_start already set here */
-+
-+ adev->rxdesc_start = (rxdesc_t *) rx_queue_start;
-+
-+ rxdesc = adev->rxdesc_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc);
-+ rxdesc = adev->rxdesc_start = (rxdesc_t *)
-+ acx2cpu(rxdesc->pNextDesc);
-+ }
-+ } else {
-+ /* we didn't pre-calculate rxdesc_start in case of ACX100 */
-+ /* rxdesc_start should be right AFTER Tx pool */
-+ adev->rxdesc_start = (rxdesc_t *)
-+ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t)));
-+ /* NB: sizeof(txdesc_t) above is valid because we know
-+ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere!
-+ ** acx111's txdesc is larger! */
-+
-+ mem_offs = (u32) adev->rxdesc_start;
-+ while (mem_offs < (u32) adev->rxdesc_start + (RX_CNT * sizeof (*rxdesc))) {
-+ write_slavemem32 (adev, mem_offs, 0);
-+ mem_offs += 4;
-+ }
-+
-+ /* loop over whole receive pool */
-+ rxdesc = adev->rxdesc_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc);
-+ /* point to next rxdesc */
-+ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
-+ (u32) cpu_to_le32 ((u8 *) rxdesc + sizeof(*rxdesc)));
-+ /* go to the next one */
-+ rxdesc++;
-+ }
-+ /* go to the last one */
-+ rxdesc--;
-+
-+ /* and point to the first making it a ring buffer */
-+ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
-+ (u32) cpu_to_le32 (rx_queue_start));
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_desc_queues
-+*/
-+void
-+acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start)
-+{
-+ u32 *p;
-+ int i;
-+
-+ acxmem_create_tx_desc_queue(adev, tx_queue_start);
-+ acxmem_create_rx_desc_queue(adev, rx_queue_start);
-+ p = (u32 *) adev->acx_queue_indicator;
-+ for (i = 0; i < 4; i++) {
-+ write_slavemem32 (adev, (u32) p, 0);
-+ p++;
-+ }
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_proc_diag_output
-+*/
-+char*
-+acxmem_s_proc_diag_output(char *p, acx_device_t *adev)
-+{
-+ const char *rtl, *thd, *ttl;
-+ txdesc_t *txdesc;
-+ u8 Ctl_8;
-+ rxdesc_t *rxdesc;
-+ int i;
-+ u32 tmp;
-+ txdesc_t txd;
-+ u8 buf[0x200];
-+ int j, k;
-+
-+ FN_ENTER;
-+
-+#if DUMP_MEM_DURING_DIAG > 0
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("dump finished");
-+#endif
-+
-+ p += sprintf(p, "** Rx buf **\n");
-+ rxdesc = adev->rxdesc_start;
-+ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
-+ rtl = (i == adev->rx_tail) ? " [tail]" : "";
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+ if (Ctl_8 & DESC_CTL_HOSTOWN)
-+ p += sprintf(p, "%02u (%02x) FULL%s\n", i, Ctl_8, rtl);
-+ else
-+ p += sprintf(p, "%02u (%02x) empty%s\n", i, Ctl_8, rtl);
-+ rxdesc++;
-+ }
-+ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free,
-+ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running");
-+
-+ p += sprintf(p, "** Tx buf %d blocks total, %d available, free list head %04x\n",
-+ adev->acx_txbuf_numblocks, adev->acx_txbuf_blocks_free, adev->acx_txbuf_free);
-+ txdesc = adev->txdesc_start;
-+ if (txdesc) {
-+ for (i = 0; i < TX_CNT; i++) {
-+ thd = (i == adev->tx_head) ? " [head]" : "";
-+ ttl = (i == adev->tx_tail) ? " [tail]" : "";
-+ copy_from_slavemem (adev, (u8 *) &txd, (u32) txdesc, sizeof (txd));
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ if (Ctl_8 & DESC_CTL_ACXDONE)
-+ p += sprintf(p, "%02u ready to free (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ else if (Ctl_8 & DESC_CTL_HOSTOWN)
-+ p += sprintf(p, "%02u available (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ else
-+ p += sprintf(p, "%02u busy (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ tmp = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (tmp) {
-+ p += sprintf (p, " %04x", tmp);
-+ while ((tmp = read_slavemem32 (adev, (u32) tmp)) != 0x02000000) {
-+ tmp <<= 5;
-+ p += sprintf (p, " %04x", tmp);
-+ }
-+ }
-+ p += sprintf (p, "\n");
-+ p += sprintf (p, " %04x: %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %02x %02x %02x %02x\n"
-+ "%02x %02x %02x %02x %04x\n",
-+ (u32) txdesc,
-+ txd.pNextDesc.v, txd.HostMemPtr.v, txd.AcxMemPtr.v, txd.tx_time,
-+ txd.total_length, txd.Reserved,
-+ txd.dummy[0], txd.dummy[1], txd.dummy[2], txd.dummy[3],
-+ txd.Ctl_8, txd.Ctl2_8, txd.error, txd.ack_failures,
-+ txd.u.rts.rts_failures, txd.u.rts.rts_ok, txd.u.r1.rate, txd.u.r1.queue_ctrl,
-+ txd.queue_info
-+ );
-+ if (txd.AcxMemPtr.v) {
-+ copy_from_slavemem (adev, buf, txd.AcxMemPtr.v, sizeof (buf));
-+ for (j = 0; (j < txd.total_length) && (j<(sizeof(buf)-4)); j+=16) {
-+ p += sprintf (p, " ");
-+ for (k = 0; (k < 16) && (j+k < txd.total_length); k++) {
-+ p += sprintf (p, " %02x", buf[j+k+4]);
-+ }
-+ p += sprintf (p, "\n");
-+ }
-+ }
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ }
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** Generic slave data **\n"
-+ "irq_mask 0x%04x irq_status 0x%04x irq on acx 0x%04x\n"
-+ "txbuf_start 0x%p, txbuf_area_size %u\n"
-+ "txdesc_size %u, txdesc_start 0x%p\n"
-+ "txhostdesc_start 0x%p, txhostdesc_area_size %u\n"
-+ "txbuf start 0x%04x, txbuf size %d\n"
-+ "rxdesc_start 0x%p\n"
-+ "rxhostdesc_start 0x%p, rxhostdesc_area_size %u\n"
-+ "rxbuf_start 0x%p, rxbuf_area_size %u\n",
-+ adev->irq_mask, adev->irq_status, read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES),
-+ adev->txbuf_start, adev->txbuf_area_size,
-+ adev->txdesc_size, adev->txdesc_start,
-+ adev->txhostdesc_start, adev->txhostdesc_area_size,
-+ adev->acx_txbuf_start, adev->acx_txbuf_numblocks * adev->memblocksize,
-+ adev->rxdesc_start,
-+ adev->rxhostdesc_start, adev->rxhostdesc_area_size,
-+ adev->rxbuf_start, adev->rxbuf_area_size);
-+ FN_EXIT0;
-+ return p;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxmem_proc_eeprom_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < 0x400; i++) {
-+ acxmem_read_eeprom_byte(adev, i, p++);
-+ }
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void
-+acxmem_set_interrupt_mask(acx_device_t *adev)
-+{
-+ if (IS_ACX111(adev)) {
-+ adev->irq_mask = (u16) ~(0
-+ | HOST_INT_RX_DATA
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ /* | HOST_INT_RX_COMPLETE */
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ | HOST_INT_IV_ICV_FAILURE
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ | HOST_INT_OVERFLOW
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ | HOST_INT_FCS_THRESHOLD
-+ | HOST_INT_UNKNOWN
-+ );
-+ /* Or else acx100 won't signal cmd completion, right? */
-+ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */
-+ } else {
-+ adev->irq_mask = (u16) ~(0
-+ | HOST_INT_RX_DATA
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ /* | HOST_INT_RX_COMPLETE */
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ /* | HOST_INT_IV_ICV_FAILURE */
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ /* | HOST_INT_OVERFLOW */
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ /* | HOST_INT_FCS_THRESHOLD */
-+ /* | HOST_INT_BEACON_MISSED */
-+ );
-+ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */
-+ }
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ struct acx111_ie_tx_level tx_level;
-+
-+ /* since it can be assumed that at least the Maxim radio has a
-+ * maximum power output of 20dBm and since it also can be
-+ * assumed that these values drive the DAC responsible for
-+ * setting the linear Tx level, I'd guess that these values
-+ * should be the corresponding linear values for a dBm value,
-+ * in other words: calculate the values from that formula:
-+ * Y [dBm] = 10 * log (X [mW])
-+ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm)
-+ * and you're done...
-+ * Hopefully that's ok, but you never know if we're actually
-+ * right... (especially since Windows XP doesn't seem to show
-+ * actual Tx dBm values :-P) */
-+
-+ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the
-+ * values are EXACTLY mW!!! Not sure about RFMD and others,
-+ * though... */
-+ static const u8 dbm2val_maxim[21] = {
-+ 63, 63, 63, 62,
-+ 61, 61, 60, 60,
-+ 59, 58, 57, 55,
-+ 53, 50, 47, 43,
-+ 38, 31, 23, 13,
-+ 0
-+ };
-+ static const u8 dbm2val_rfmd[21] = {
-+ 0, 0, 0, 1,
-+ 2, 2, 3, 3,
-+ 4, 5, 6, 8,
-+ 10, 13, 16, 20,
-+ 25, 32, 41, 50,
-+ 63
-+ };
-+ const u8 *table;
-+
-+ switch (adev->radio_type) {
-+ case RADIO_MAXIM_0D:
-+ table = &dbm2val_maxim[0];
-+ break;
-+ case RADIO_RFMD_11:
-+ case RADIO_RALINK_15:
-+ table = &dbm2val_rfmd[0];
-+ break;
-+ default:
-+ printk("%s: unknown/unsupported radio type, "
-+ "cannot modify tx power level yet!\n",
-+ adev->ndev->name);
-+ return NOT_OK;
-+ }
-+ /*
-+ * The hx4700 EEPROM, at least, only supports 1 power setting. The configure
-+ * routine matches the PA bias with the gain, so just use its default value.
-+ * The values are: 0x2b for the gain and 0x03 for the PA bias. The firmware
-+ * writes the gain level to the Tx gain control DAC and the PA bias to the Maxim
-+ * radio's PA bias register. The firmware limits itself to 0 - 64 when writing to the
-+ * gain control DAC.
-+ *
-+ * Physically between the ACX and the radio, higher Tx gain control DAC values result
-+ * in less power output; 0 volts to the Maxim radio results in the highest output power
-+ * level, which I'm assuming matches up with 0 in the Tx Gain DAC register.
-+ *
-+ * Although there is only the 1 power setting, one of the radio firmware functions adjusts
-+ * the transmit power level up and down. That function is called by the ACX FIQ handler
-+ * under certain conditions.
-+ */
-+ tx_level.level = 1;
-+ //return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
-+
-+ printk("%s: changing radio power level to %u dBm (%u)\n",
-+ adev->ndev->name, level_dbm, table[level_dbm]);
-+ acxmem_s_write_phy_reg(adev, 0x11, table[level_dbm]);
-+
-+ return 0;
-+}
-+
-+
-+static struct platform_driver
-+acxmem_drv_id = {
-+ .driver = {
-+ .name = "acx-mem",
-+ },
-+ .probe = acxmem_e_probe,
-+ .remove = __devexit_p(acxmem_e_remove),
-+#ifdef CONFIG_PM
-+ .suspend = acxmem_e_suspend,
-+ .resume = acxmem_e_resume
-+#endif /* CONFIG_PM */
-+};
-+
-+
-+/***********************************************************************
-+** acxmem_e_init_module
-+**
-+** Module initialization routine, called once at module load time
-+*/
-+int __init
-+acxmem_e_init_module(void)
-+{
-+ int res;
-+
-+ FN_ENTER;
-+
-+#if (ACX_IO_WIDTH==32)
-+ printk("acx: compiled to use 32bit I/O access. "
-+ "I/O timing issues might occur, such as "
-+ "non-working firmware upload. Report them\n");
-+#else
-+ printk("acx: compiled to use 16bit I/O access only "
-+ "(compatibility mode)\n");
-+#endif
-+
-+#ifdef __LITTLE_ENDIAN
-+#define ENDIANNESS_STRING "running on a little-endian CPU\n"
-+#else
-+#define ENDIANNESS_STRING "running on a BIG-ENDIAN CPU\n"
-+#endif
-+ log(L_INIT,
-+ ENDIANNESS_STRING
-+ "PCI module " ACX_RELEASE " initialized, "
-+ "waiting for cards to probe...\n"
-+ );
-+
-+ res = platform_driver_register (&acxmem_drv_id);
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_cleanup_module
-+**
-+** Called at module unload time. This is our last chance to
-+** clean up after ourselves.
-+*/
-+void __exit
-+acxmem_e_cleanup_module(void)
-+{
-+ FN_ENTER;
-+
-+ printk ("cleanup_module\n");
-+ platform_driver_unregister( &acxmem_drv_id );
-+
-+ FN_EXIT0;
-+}
-+
-+void acxmem_e_release(struct device *dev) {
-+}
-+
-+MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
-+MODULE_DESCRIPTION( "ACX Slave Memory Driver" );
-+MODULE_LICENSE( "GPL" );
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/pci.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/pci.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,4234 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+#define ACX_PCI 1
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+
-+/* Linux 2.6.18+ uses <linux/utsrelease.h> */
-+#ifndef UTS_RELEASE
-+#include <linux/utsrelease.h>
-+#endif
-+
-+#include <linux/compiler.h> /* required for Lx 2.6.8 ?? */
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/sched.h>
-+#include <linux/types.h>
-+#include <linux/skbuff.h>
-+#include <linux/slab.h>
-+#include <linux/if_arp.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+#include <linux/netdevice.h>
-+#include <linux/ioport.h>
-+#include <linux/pci.h>
-+#include <linux/pm.h>
-+#include <linux/vmalloc.h>
-+#include <linux/dma-mapping.h>
-+
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+*/
-+#define PCI_TYPE (PCI_USES_MEM | PCI_ADDR0 | PCI_NO_ACPI_WAKE)
-+#define PCI_ACX100_REGION1 0x01
-+#define PCI_ACX100_REGION1_SIZE 0x1000 /* Memory size - 4K bytes */
-+#define PCI_ACX100_REGION2 0x02
-+#define PCI_ACX100_REGION2_SIZE 0x10000 /* Memory size - 64K bytes */
-+
-+#define PCI_ACX111_REGION1 0x00
-+#define PCI_ACX111_REGION1_SIZE 0x2000 /* Memory size - 8K bytes */
-+#define PCI_ACX111_REGION2 0x01
-+#define PCI_ACX111_REGION2_SIZE 0x20000 /* Memory size - 128K bytes */
-+
-+/* Texas Instruments Vendor ID */
-+#define PCI_VENDOR_ID_TI 0x104c
-+
-+/* ACX100 22Mb/s WLAN controller */
-+#define PCI_DEVICE_ID_TI_TNETW1100A 0x8400
-+#define PCI_DEVICE_ID_TI_TNETW1100B 0x8401
-+
-+/* ACX111 54Mb/s WLAN controller */
-+#define PCI_DEVICE_ID_TI_TNETW1130 0x9066
-+
-+/* PCI Class & Sub-Class code, Network-'Other controller' */
-+#define PCI_CLASS_NETWORK_OTHERS 0x0280
-+
-+#define CARD_EEPROM_ID_SIZE 6
-+
-+#ifndef PCI_D0
-+/* From include/linux/pci.h */
-+#define PCI_D0 0
-+#define PCI_D1 1
-+#define PCI_D2 2
-+#define PCI_D3hot 3
-+#define PCI_D3cold 4
-+#define PCI_UNKNOWN 5
-+#define PCI_POWER_ERROR -1
-+#endif
-+
-+
-+/***********************************************************************
-+*/
-+static void acxpci_i_tx_timeout(struct net_device *ndev);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+static irqreturn_t acxpci_i_interrupt(int irq, void *dev_id);
-+#else
-+static irqreturn_t acxpci_i_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-+#endif
-+static void acxpci_i_set_multicast_list(struct net_device *ndev);
-+
-+static int acxpci_e_open(struct net_device *ndev);
-+static int acxpci_e_close(struct net_device *ndev);
-+static void acxpci_s_up(struct net_device *ndev);
-+static void acxpci_s_down(struct net_device *ndev);
-+
-+
-+/***********************************************************************
-+** Register access
-+*/
-+
-+/* Pick one */
-+/* #define INLINE_IO static */
-+#define INLINE_IO static inline
-+
-+INLINE_IO u32
-+read_reg32(acx_device_t *adev, unsigned int offset)
-+{
-+#if ACX_IO_WIDTH == 32
-+ return readl((u8 *)adev->iobase + adev->io[offset]);
-+#else
-+ return readw((u8 *)adev->iobase + adev->io[offset])
-+ + (readw((u8 *)adev->iobase + adev->io[offset] + 2) << 16);
-+#endif
-+}
-+
-+INLINE_IO u16
-+read_reg16(acx_device_t *adev, unsigned int offset)
-+{
-+ return readw((u8 *)adev->iobase + adev->io[offset]);
-+}
-+
-+INLINE_IO u8
-+read_reg8(acx_device_t *adev, unsigned int offset)
-+{
-+ return readb((u8 *)adev->iobase + adev->io[offset]);
-+}
-+
-+INLINE_IO void
-+write_reg32(acx_device_t *adev, unsigned int offset, u32 val)
-+{
-+#if ACX_IO_WIDTH == 32
-+ writel(val, (u8 *)adev->iobase + adev->io[offset]);
-+#else
-+ writew(val & 0xffff, (u8 *)adev->iobase + adev->io[offset]);
-+ writew(val >> 16, (u8 *)adev->iobase + adev->io[offset] + 2);
-+#endif
-+}
-+
-+INLINE_IO void
-+write_reg16(acx_device_t *adev, unsigned int offset, u16 val)
-+{
-+ writew(val, (u8 *)adev->iobase + adev->io[offset]);
-+}
-+
-+INLINE_IO void
-+write_reg8(acx_device_t *adev, unsigned int offset, u8 val)
-+{
-+ writeb(val, (u8 *)adev->iobase + adev->io[offset]);
-+}
-+
-+/* Handle PCI posting properly:
-+ * Make sure that writes reach the adapter in case they require to be executed
-+ * *before* the next write, by reading a random (and safely accessible) register.
-+ * This call has to be made if there is no read following (which would flush the data
-+ * to the adapter), yet the written data has to reach the adapter immediately. */
-+INLINE_IO void
-+write_flush(acx_device_t *adev)
-+{
-+ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */
-+ /* faster version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should also be safe): */
-+ readb(adev->iobase);
-+}
-+
-+INLINE_IO int
-+adev_present(acx_device_t *adev)
-+{
-+ /* fast version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should be safe): */
-+ return readl(adev->iobase) != 0xffffffff;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static inline txdesc_t*
-+get_txdesc(acx_device_t *adev, int index)
-+{
-+ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size);
-+}
-+
-+static inline txdesc_t*
-+advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc)
-+{
-+ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size);
-+}
-+
-+static txhostdesc_t*
-+get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return &adev->txhostdesc_start[index*2];
-+}
-+
-+static inline client_t*
-+get_txc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return adev->txc[index];
-+}
-+
-+static inline u16
-+get_txr(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ index /= adev->txdesc_size;
-+ return adev->txr[index];
-+}
-+
-+static inline void
-+put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ adev->txc[index] = c;
-+ adev->txr[index] = r111;
-+}
-+
-+
-+/***********************************************************************
-+** EEPROM and PHY read/write helpers
-+*/
-+/***********************************************************************
-+** acxpci_read_eeprom_byte
-+**
-+** Function called to read an octet in the EEPROM.
-+**
-+** This function is used by acxpci_e_probe to check if the
-+** connected card is a legal one or not.
-+**
-+** Arguments:
-+** adev ptr to acx_device structure
-+** addr address to read in the EEPROM
-+** charbuf ptr to a char. This is where the read octet
-+** will be stored
-+*/
-+int
-+acxpci_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf)
-+{
-+ int result;
-+ int count;
-+
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for EEPROM read\n",
-+ adev->ndev->name);
-+ result = NOT_OK;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA);
-+ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf);
-+ result = OK;
-+
-+fail:
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** We don't lock hw accesses here since we never r/w eeprom in IRQ
-+** Note: this function sleeps only because of GFP_KERNEL alloc
-+*/
-+#ifdef UNUSED
-+int
-+acxpci_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf)
-+{
-+ u8 *data_verify = NULL;
-+ unsigned long flags;
-+ int count, i;
-+ int result = NOT_OK;
-+ u16 gpio_orig;
-+
-+ printk("acx: WARNING! I would write to EEPROM now. "
-+ "Since I really DON'T want to unless you know "
-+ "what you're doing (THIS CODE WILL PROBABLY "
-+ "NOT WORK YET!), I will abort that now. And "
-+ "definitely make sure to make a "
-+ "/proc/driver/acx_wlan0_eeprom backup copy first!!! "
-+ "(the EEPROM content includes the PCI config header!! "
-+ "If you kill important stuff, then you WILL "
-+ "get in trouble and people DID get in trouble already)\n");
-+ return OK;
-+
-+ FN_ENTER;
-+
-+ data_verify = kmalloc(len, GFP_KERNEL);
-+ if (!data_verify) {
-+ goto end;
-+ }
-+
-+ /* first we need to enable the OE (EEPROM Output Enable) GPIO line
-+ * to be able to write to the EEPROM.
-+ * NOTE: an EEPROM writing success has been reported,
-+ * but you probably have to modify GPIO_OUT, too,
-+ * and you probably need to activate a different GPIO
-+ * line instead! */
-+ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE);
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1);
-+ write_flush(adev);
-+
-+ /* ok, now start writing the data out */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i));
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 1);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("WARNING, DANGER!!! "
-+ "Timeout waiting for EEPROM write\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+ }
-+
-+ /* disable EEPROM writing */
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig);
-+ write_flush(adev);
-+
-+ /* now start a verification run */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("timeout waiting for EEPROM read\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+
-+ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA);
-+ }
-+
-+ if (0 == memcmp(charbuf, data_verify, len))
-+ result = OK; /* read data matches, success */
-+
-+end:
-+ kfree(data_verify);
-+ FN_EXIT1(result);
-+ return result;
-+}
-+#endif /* UNUSED */
-+
-+
-+/***********************************************************************
-+** acxpci_s_read_phy_reg
-+**
-+** Messing with rx/tx disabling and enabling here
-+** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic
-+*/
-+int
-+acxpci_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
-+{
-+ int result = NOT_OK;
-+ int count;
-+
-+ FN_ENTER;
-+
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for phy read\n",
-+ adev->ndev->name);
-+ *charbuf = 0;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ log(L_DEBUG, "count was %u\n", count);
-+ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA);
-+
-+ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg);
-+ result = OK;
-+ goto fail; /* silence compiler warning */
-+fail:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxpci_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
-+{
-+ FN_ENTER;
-+
-+ /* mprusko said that 32bit accesses result in distorted sensitivity
-+ * on his card. Unconfirmed, looks like it's not true (most likely since we
-+ * now properly flush writes). */
-+ write_reg32(adev, IO_ACX_PHY_DATA, value);
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 1);
-+ write_flush(adev);
-+ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+#define NO_AUTO_INCREMENT 1
-+
-+/***********************************************************************
-+** acxpci_s_write_fw
-+**
-+** Write the firmware image into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** 1 firmware image corrupted
-+** 0 success
-+*/
-+static int
-+acxpci_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset)
-+{
-+ int len, size;
-+ u32 sum, v32;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+ write_flush(adev);
-+#endif
-+
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ sum += p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+ len += 4;
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+ write_flush(adev);
-+#endif
-+ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32);
-+ }
-+
-+ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n",
-+ size, sum, le32_to_cpu(fw_image->chksum));
-+
-+ /* compare our checksum with the stored image checksum */
-+ return (sum != le32_to_cpu(fw_image->chksum));
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_validate_fw
-+**
-+** Compare the firmware image given with
-+** the firmware image written into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** NOT_OK firmware image corrupted or not correctly written
-+** OK success
-+*/
-+static int
-+acxpci_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image,
-+ u32 offset)
-+{
-+ u32 sum, v32, w32;
-+ int len, size;
-+ int result = OK;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+#endif
-+
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ p += 4;
-+ len += 4;
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+#endif
-+ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA);
-+
-+ if (unlikely(w32 != v32)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "data parts at offset %d don't match (0x%08X vs. 0x%08X)! "
-+ "I/O timing issues or defective memory, with DWL-xx0+? "
-+ "ACX_IO_WIDTH=16 may help. Please report\n",
-+ len, v32, w32);
-+ result = NOT_OK;
-+ break;
-+ }
-+
-+ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24);
-+ }
-+
-+ /* sum control verification */
-+ if (result != NOT_OK) {
-+ if (sum != le32_to_cpu(fw_image->chksum)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "checksums don't match!\n");
-+ result = NOT_OK;
-+ }
-+ }
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_upload_fw
-+**
-+** Called from acx_reset_dev
-+*/
-+static int
-+acxpci_s_upload_fw(acx_device_t *adev)
-+{
-+ firmware_image_t *fw_image = NULL;
-+ int res = NOT_OK;
-+ int try;
-+ u32 file_size;
-+ char filename[sizeof("tiacx1NNcNN")];
-+
-+ FN_ENTER;
-+
-+ /* print exact chipset and radio ID to make sure people really get a clue on which files exactly they are supposed to provide,
-+ * since firmware loading is the biggest enduser PITA with these chipsets.
-+ * Not printing radio ID in 0xHEX in order to not confuse them into wrong file naming */
-+ printk( "acx: need to load firmware for acx1%02d chipset with radio ID %02x, please provide via firmware hotplug:\n"
-+ "acx: either one file only (<c>ombined firmware image file, radio-specific) or two files (radio-less base image file *plus* separate <r>adio-specific extension file)\n",
-+ IS_ACX111(adev)*11, adev->radio_type);
-+
-+ /* Try combined, then main image */
-+ adev->need_radio_fw = 0;
-+ snprintf(filename, sizeof(filename), "tiacx1%02dc%02X",
-+ IS_ACX111(adev)*11, adev->radio_type);
-+
-+ fw_image = acx_s_read_fw(&adev->pdev->dev, filename, &file_size);
-+ if (!fw_image) {
-+ adev->need_radio_fw = 1;
-+ filename[sizeof("tiacx1NN")-1] = '\0';
-+ fw_image = acx_s_read_fw(&adev->pdev->dev, filename, &file_size);
-+ if (!fw_image) {
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+ }
-+ }
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxpci_s_write_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (main/combined): %d\n", res);
-+ if (OK == res) {
-+ res = acxpci_s_validate_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw "
-+ "(main/combined): %d\n", res);
-+ }
-+
-+ if (OK == res) {
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED);
-+ break;
-+ }
-+ printk("acx: firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+ vfree(fw_image);
-+
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_upload_radio
-+**
-+** Uploads the appropriate radio module firmware into the card.
-+*/
-+int
-+acxpci_s_upload_radio(acx_device_t *adev)
-+{
-+ acx_ie_memmap_t mm;
-+ firmware_image_t *radio_image;
-+ acx_cmd_radioinit_t radioinit;
-+ int res = NOT_OK;
-+ int try;
-+ u32 offset;
-+ u32 size;
-+ char filename[sizeof("tiacx1NNrNN")];
-+
-+ if (!adev->need_radio_fw) return OK;
-+
-+ FN_ENTER;
-+
-+ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+ offset = le32_to_cpu(mm.CodeEnd);
-+
-+ snprintf(filename, sizeof(filename), "tiacx1%02dr%02X",
-+ IS_ACX111(adev)*11,
-+ adev->radio_type);
-+ radio_image = acx_s_read_fw(&adev->pdev->dev, filename, &size);
-+ if (!radio_image) {
-+ printk("acx: can't load radio module '%s'\n", filename);
-+ goto fail;
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxpci_s_write_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res);
-+ if (OK == res) {
-+ res = acxpci_s_validate_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res);
-+ }
-+
-+ if (OK == res)
-+ break;
-+ printk("acx: radio firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
-+ radioinit.offset = cpu_to_le32(offset);
-+ /* no endian conversion needed, remains in card CPU area: */
-+ radioinit.len = radio_image->size;
-+
-+ vfree(radio_image);
-+
-+ if (OK != res)
-+ goto fail;
-+
-+ /* will take a moment so let's have a big timeout */
-+ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT,
-+ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000));
-+
-+ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+fail:
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_l_reset_mac
-+**
-+** MAC will be reset
-+** Call context: reset_dev
-+*/
-+static void
-+acxpci_l_reset_mac(acx_device_t *adev)
-+{
-+ u16 temp;
-+
-+ FN_ENTER;
-+
-+ /* halt eCPU */
-+ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
-+ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
-+
-+ /* now do soft reset of eCPU, set bit */
-+ temp = read_reg16(adev, IO_ACX_SOFT_RESET) | 0x1;
-+ log(L_DEBUG, "%s: enable soft reset...\n", __func__);
-+ write_reg16(adev, IO_ACX_SOFT_RESET, temp);
-+ write_flush(adev);
-+
-+ /* now clear bit again: deassert eCPU reset */
-+ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__);
-+ write_reg16(adev, IO_ACX_SOFT_RESET, temp & ~0x1);
-+
-+ /* now start a burst read from initial EEPROM */
-+ temp = read_reg16(adev, IO_ACX_EE_START) | 0x1;
-+ write_reg16(adev, IO_ACX_EE_START, temp);
-+ write_flush(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_verify_init
-+*/
-+static int
-+acxpci_s_verify_init(acx_device_t *adev)
-+{
-+ int result = NOT_OK;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ timeout = jiffies + 2*HZ;
-+ for (;;) {
-+ u16 irqstat = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if (irqstat & HOST_INT_FCS_THRESHOLD) {
-+ result = OK;
-+ write_reg16(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD);
-+ break;
-+ }
-+ if (time_after(jiffies, timeout))
-+ break;
-+ /* Init may take up to ~0.5 sec total */
-+ acx_s_msleep(50);
-+ }
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** A few low-level helpers
-+**
-+** Note: these functions are not protected by lock
-+** and thus are never allowed to be called from IRQ.
-+** Also they must not race with fw upload which uses same hw regs
-+*/
-+
-+/***********************************************************************
-+** acxpci_write_cmd_type_status
-+*/
-+
-+static inline void
-+acxpci_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status)
-+{
-+ writel(type | (status << 16), adev->cmd_area);
-+ write_flush(adev);
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_read_cmd_type_status
-+*/
-+static u32
-+acxpci_read_cmd_type_status(acx_device_t *adev)
-+{
-+ u32 cmd_type, cmd_status;
-+
-+ cmd_type = readl(adev->cmd_area);
-+ cmd_status = (cmd_type >> 16);
-+ cmd_type = (u16)cmd_type;
-+
-+ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n",
-+ cmd_type, cmd_status,
-+ acx_cmd_status_str(cmd_status));
-+
-+ return cmd_status;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_reset_dev
-+**
-+** Arguments:
-+** netdevice that contains the adev variable
-+** Returns:
-+** NOT_OK on fail
-+** OK on success
-+** Side effects:
-+** device is hard reset
-+** Call context:
-+** acxpci_e_probe
-+** Comment:
-+** This resets the device using low level hardware calls
-+** as well as uploads and verifies the firmware to the card
-+*/
-+
-+static inline void
-+init_mboxes(acx_device_t *adev)
-+{
-+ u32 cmd_offs, info_offs;
-+
-+ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS);
-+ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS);
-+ adev->cmd_area = (u8 *)adev->iobase2 + cmd_offs;
-+ adev->info_area = (u8 *)adev->iobase2 + info_offs;
-+ log(L_DEBUG, "iobase2=%p\n"
-+ "cmd_mbox_offset=%X cmd_area=%p\n"
-+ "info_mbox_offset=%X info_area=%p\n",
-+ adev->iobase2,
-+ cmd_offs, adev->cmd_area,
-+ info_offs, adev->info_area);
-+}
-+
-+
-+static inline void
-+read_eeprom_area(acx_device_t *adev)
-+{
-+#if ACX_DEBUG > 1
-+ int offs;
-+ u8 tmp;
-+
-+ for (offs = 0x8c; offs < 0xb9; offs++)
-+ acxpci_read_eeprom_byte(adev, offs, &tmp);
-+#endif
-+}
-+
-+
-+static int
-+acxpci_s_reset_dev(acx_device_t *adev)
-+{
-+ const char* msg = "";
-+ unsigned long flags;
-+ int result = NOT_OK;
-+ u16 hardware_info;
-+ u16 ecpu_ctrl;
-+ int count;
-+
-+ FN_ENTER;
-+
-+ /* reset the device to make sure the eCPU is stopped
-+ * to upload the firmware correctly */
-+
-+ acx_lock(adev, flags);
-+
-+ acxpci_l_reset_mac(adev);
-+
-+ ecpu_ctrl = read_reg16(adev, IO_ACX_ECPU_CTRL) & 1;
-+ if (!ecpu_ctrl) {
-+ msg = "eCPU is already running. ";
-+ goto end_unlock;
-+ }
-+
-+#ifdef WE_DONT_NEED_THAT_DO_WE
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) {
-+ /* eCPU most likely means "embedded CPU" */
-+ msg = "eCPU did not start after boot from flash. ";
-+ goto end_unlock;
-+ }
-+
-+ /* check sense on reset flags */
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) {
-+ printk("%s: eCPU did not start after boot (SOR), "
-+ "is this fatal?\n", adev->ndev->name);
-+ }
-+#endif
-+ /* scan, if any, is stopped now, setting corresponding IRQ bit */
-+ adev->irq_status |= HOST_INT_SCAN_COMPLETE;
-+
-+ acx_unlock(adev, flags);
-+
-+ /* need to know radio type before fw load */
-+ /* Need to wait for arrival of this information in a loop,
-+ * most probably since eCPU runs some init code from EEPROM
-+ * (started burst read in reset_mac()) which also
-+ * sets the radio type ID */
-+
-+ count = 0xffff;
-+ do {
-+ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION);
-+ if (!--count) {
-+ msg = "eCPU didn't indicate radio type";
-+ goto end_fail;
-+ }
-+ cpu_relax();
-+ } while (!(hardware_info & 0xff00)); /* radio type still zero? */
-+
-+ /* printk("DEBUG: count %d\n", count); */
-+ adev->form_factor = hardware_info & 0xff;
-+ adev->radio_type = hardware_info >> 8;
-+
-+ /* load the firmware */
-+ if (OK != acxpci_s_upload_fw(adev))
-+ goto end_fail;
-+
-+ /* acx_s_msleep(10); this one really shouldn't be required */
-+
-+ /* now start eCPU by clearing bit */
-+ write_reg16(adev, IO_ACX_ECPU_CTRL, ecpu_ctrl & ~0x1);
-+ log(L_DEBUG, "booted eCPU up and waiting for completion...\n");
-+
-+ /* wait for eCPU bootup */
-+ if (OK != acxpci_s_verify_init(adev)) {
-+ msg = "timeout waiting for eCPU. ";
-+ goto end_fail;
-+ }
-+ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n");
-+
-+ init_mboxes(adev);
-+ acxpci_write_cmd_type_status(adev, 0, 0);
-+
-+ /* test that EEPROM is readable */
-+ read_eeprom_area(adev);
-+
-+ result = OK;
-+ goto end;
-+
-+/* Finish error message. Indicate which function failed */
-+end_unlock:
-+ acx_unlock(adev, flags);
-+end_fail:
-+ printk("acx: %sreset_dev() FAILED\n", msg);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_issue_cmd_timeo
-+**
-+** Sends command to fw, extract result
-+**
-+** NB: we do _not_ take lock inside, so be sure to not touch anything
-+** which may interfere with IRQ handler operation
-+**
-+** TODO: busy wait is a bit silly, so:
-+** 1) stop doing many iters - go to sleep after first
-+** 2) go to waitqueue based approach: wait, not poll!
-+*/
-+#undef FUNC
-+#define FUNC "issue_cmd"
-+
-+#if !ACX_DEBUG
-+int
-+acxpci_s_issue_cmd_timeo(
-+ acx_device_t *adev,
-+ unsigned int cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout)
-+{
-+#else
-+int
-+acxpci_s_issue_cmd_timeo_debug(
-+ acx_device_t *adev,
-+ unsigned cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout,
-+ const char* cmdstr)
-+{
-+ unsigned long start = jiffies;
-+#endif
-+ const char *devname;
-+ unsigned counter;
-+ u16 irqtype;
-+ u16 cmd_status;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ devname = adev->ndev->name;
-+ if (!devname || !devname[0] || devname[4]=='%')
-+ devname = "acx";
-+
-+ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n",
-+ cmdstr, buflen, cmd_timeout,
-+ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
-+
-+ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) {
-+ printk("%s: "FUNC"(): firmware is not loaded yet, "
-+ "cannot execute commands!\n", devname);
-+ goto bad;
-+ }
-+
-+ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) {
-+ printk("input buffer (len=%u):\n", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+
-+ /* wait for firmware to become idle for our command submission */
-+ timeout = HZ/5;
-+ counter = (timeout * 1000 / HZ) - 1; /* in ms */
-+ timeout += jiffies;
-+ do {
-+ cmd_status = acxpci_read_cmd_type_status(adev);
-+ /* Test for IDLE state */
-+ if (!cmd_status)
-+ break;
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ if (!counter) {
-+ /* the card doesn't get idle, we're in trouble */
-+ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n",
-+ devname, cmd_status);
-+ goto bad;
-+ } else if (counter < 190) { /* if waited >10ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. "
-+ "Please report\n", 199 - counter);
-+ }
-+
-+ /* now write the parameters of the command if needed */
-+ if (buffer && buflen) {
-+ /* if it's an INTERROGATE command, just pass the length
-+ * of parameters to read, as data */
-+#if CMD_DISCOVERY
-+ if (cmd == ACX1xx_CMD_INTERROGATE)
-+ memset_io(adev->cmd_area + 4, 0xAA, buflen);
-+#endif
-+ /* adev->cmd_area points to PCI device's memory, not to RAM! */
-+ memcpy_toio(adev->cmd_area + 4, buffer,
-+ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen);
-+ }
-+ /* now write the actual command type */
-+ acxpci_write_cmd_type_status(adev, cmd, 0);
-+ /* execute command */
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD);
-+ write_flush(adev);
-+
-+ /* wait for firmware to process command */
-+
-+ /* Ensure nonzero and not too large timeout.
-+ ** Also converts e.g. 100->99, 200->199
-+ ** which is nice but not essential */
-+ cmd_timeout = (cmd_timeout-1) | 1;
-+ if (unlikely(cmd_timeout > 1199))
-+ cmd_timeout = 1199;
-+ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */
-+ adev->irq_status &= ~HOST_INT_CMD_COMPLETE;
-+
-+ /* we schedule away sometimes (timeout can be large) */
-+ counter = cmd_timeout;
-+ timeout = jiffies + cmd_timeout * HZ / 1000;
-+ do {
-+ if (!adev->irqs_active) { /* IRQ disabled: poll */
-+ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ write_reg16(adev, IO_ACX_IRQ_ACK,
-+ HOST_INT_CMD_COMPLETE);
-+ break;
-+ }
-+ } else { /* Wait when IRQ will set the bit */
-+ irqtype = adev->irq_status;
-+ if (irqtype & HOST_INT_CMD_COMPLETE)
-+ break;
-+ }
-+
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ /* save state for debugging */
-+ cmd_status = acxpci_read_cmd_type_status(adev);
-+
-+ /* put the card in IDLE state */
-+ acxpci_write_cmd_type_status(adev, 0, 0);
-+
-+ if (!counter) { /* timed out! */
-+ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. "
-+ "irq bits:0x%04X irq_status:0x%04X timeout:%dms "
-+ "cmd_status:%d (%s)\n",
-+ devname, (adev->irqs_active) ? "waiting" : "polling",
-+ irqtype, adev->irq_status, cmd_timeout,
-+ cmd_status, acx_cmd_status_str(cmd_status));
-+ goto bad;
-+ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. "
-+ "count:%d. Please report\n",
-+ (adev->irqs_active) ? "waited" : "polled",
-+ cmd_timeout - counter, counter);
-+ }
-+
-+ if (1 != cmd_status) { /* it is not a 'Success' */
-+ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). "
-+ "Took %dms of %d\n",
-+ devname, cmd_status, acx_cmd_status_str(cmd_status),
-+ cmd_timeout - counter, cmd_timeout);
-+ /* zero out result buffer
-+ * WARNING: this will trash stack in case of illegally large input
-+ * length! */
-+ if (buffer && buflen)
-+ memset(buffer, 0, buflen);
-+ goto bad;
-+ }
-+
-+ /* read in result parameters if needed */
-+ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) {
-+ /* adev->cmd_area points to PCI device's memory, not to RAM! */
-+ memcpy_fromio(buffer, adev->cmd_area + 4, buflen);
-+ if (acx_debug & L_DEBUG) {
-+ printk("output buffer (len=%u): ", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+ }
-+/* ok: */
-+ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n",
-+ cmdstr, jiffies - start);
-+ FN_EXIT1(OK);
-+ return OK;
-+
-+bad:
-+ /* Give enough info so that callers can avoid
-+ ** printing their own diagnostic messages */
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
-+#else
-+ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
-+#endif
-+ dump_stack();
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#ifdef NONESSENTIAL_FEATURES
-+typedef struct device_id {
-+ unsigned char id[6];
-+ char *descr;
-+ char *type;
-+} device_id_t;
-+
-+static const device_id_t
-+device_ids[] =
-+{
-+ {
-+ {'G', 'l', 'o', 'b', 'a', 'l'},
-+ NULL,
-+ NULL,
-+ },
-+ {
-+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-+ "uninitialized",
-+ "SpeedStream SS1021 or Gigafast WF721-AEX"
-+ },
-+ {
-+ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85},
-+ "non-standard",
-+ "DrayTek Vigor 520"
-+ },
-+ {
-+ {'?', '?', '?', '?', '?', '?'},
-+ "non-standard",
-+ "Level One WPC-0200"
-+ },
-+ {
-+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-+ "empty",
-+ "DWL-650+ variant"
-+ }
-+};
-+
-+static void
-+acx_show_card_eeprom_id(acx_device_t *adev)
-+{
-+ unsigned char buffer[CARD_EEPROM_ID_SIZE];
-+ int i;
-+
-+ memset(&buffer, 0, CARD_EEPROM_ID_SIZE);
-+ /* use direct EEPROM access */
-+ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) {
-+ if (OK != acxpci_read_eeprom_byte(adev,
-+ ACX100_EEPROM_ID_OFFSET + i,
-+ &buffer[i])) {
-+ printk("acx: reading EEPROM FAILED\n");
-+ break;
-+ }
-+ }
-+
-+ for (i = 0; i < VEC_SIZE(device_ids); i++) {
-+ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) {
-+ if (device_ids[i].descr) {
-+ printk("acx: EEPROM card ID string check "
-+ "found %s card ID: is this %s?\n",
-+ device_ids[i].descr, device_ids[i].type);
-+ }
-+ break;
-+ }
-+ }
-+ if (i == VEC_SIZE(device_ids)) {
-+ printk("acx: EEPROM card ID string check found "
-+ "unknown card: expected 'Global', got '%.*s\'. "
-+ "Please report\n", CARD_EEPROM_ID_SIZE, buffer);
-+ }
-+}
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+
-+/***********************************************************************
-+** acxpci_free_desc_queues
-+**
-+** Releases the queues that have been allocated, the
-+** others have been initialised to NULL so this
-+** function can be used if only part of the queues were allocated.
-+*/
-+
-+static inline void
-+free_coherent(struct pci_dev *hwdev, size_t size,
-+ void *vaddr, dma_addr_t dma_handle)
-+{
-+ dma_free_coherent(hwdev == NULL ? NULL : &hwdev->dev,
-+ size, vaddr, dma_handle);
-+}
-+
-+void
-+acxpci_free_desc_queues(acx_device_t *adev)
-+{
-+#define ACX_FREE_QUEUE(size, ptr, phyaddr) \
-+ if (ptr) { \
-+ free_coherent(0, size, ptr, phyaddr); \
-+ ptr = NULL; \
-+ size = 0; \
-+ }
-+
-+ FN_ENTER;
-+
-+ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy);
-+
-+ adev->txdesc_start = NULL;
-+
-+ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy);
-+
-+ adev->rxdesc_start = NULL;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_delete_dma_regions
-+*/
-+static void
-+acxpci_s_delete_dma_regions(acx_device_t *adev)
-+{
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+ /* disable radio Tx/Rx. Shouldn't we use the firmware commands
-+ * here instead? Or are we that much down the road that it's no
-+ * longer possible here? */
-+ write_reg16(adev, IO_ACX_ENABLE, 0);
-+
-+ acx_s_msleep(100);
-+
-+ acx_lock(adev, flags);
-+ acxpci_free_desc_queues(adev);
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_e_probe
-+**
-+** Probe routine called when a PCI device w/ matching ID is found.
-+** Here's the sequence:
-+** - Allocate the PCI resources.
-+** - Read the PCMCIA attribute memory to make sure we have a WLAN card
-+** - Reset the MAC
-+** - Initialize the dev and wlan data
-+** - Initialize the MAC
-+**
-+** pdev - ptr to pci device structure containing info about pci configuration
-+** id - ptr to the device id entry that matched this device
-+*/
-+static const u16
-+IO_ACX100[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_END_CTL */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x007c, /* IO_ACX_INT_TRIG */
-+ 0x0098, /* IO_ACX_IRQ_MASK */
-+ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00ac, /* IO_ACX_IRQ_ACK */
-+ 0x00b0, /* IO_ACX_HINT_TRIG */
-+
-+ 0x0104, /* IO_ACX_ENABLE */
-+
-+ 0x0250, /* IO_ACX_EEPROM_CTL */
-+ 0x0254, /* IO_ACX_EEPROM_ADDR */
-+ 0x0258, /* IO_ACX_EEPROM_DATA */
-+ 0x025c, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0268, /* IO_ACX_PHY_ADDR */
-+ 0x026c, /* IO_ACX_PHY_DATA */
-+ 0x0270, /* IO_ACX_PHY_CTL */
-+
-+ 0x0290, /* IO_ACX_GPIO_OE */
-+
-+ 0x0298, /* IO_ACX_GPIO_OUT */
-+
-+ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x02d0, /* IO_ACX_EE_START */
-+ 0x02d4, /* IO_ACX_SOR_CFG */
-+ 0x02d8 /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static const u16
-+IO_ACX111[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_END_CTL */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x00b4, /* IO_ACX_INT_TRIG */
-+ 0x00d4, /* IO_ACX_IRQ_MASK */
-+ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */
-+ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00e8, /* IO_ACX_IRQ_ACK */
-+ 0x00ec, /* IO_ACX_HINT_TRIG */
-+
-+ 0x01d0, /* IO_ACX_ENABLE */
-+
-+ 0x0338, /* IO_ACX_EEPROM_CTL */
-+ 0x033c, /* IO_ACX_EEPROM_ADDR */
-+ 0x0340, /* IO_ACX_EEPROM_DATA */
-+ 0x0344, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0350, /* IO_ACX_PHY_ADDR */
-+ 0x0354, /* IO_ACX_PHY_DATA */
-+ 0x0358, /* IO_ACX_PHY_CTL */
-+
-+ 0x0374, /* IO_ACX_GPIO_OE */
-+
-+ 0x037c, /* IO_ACX_GPIO_OUT */
-+
-+ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x0390, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x0100, /* IO_ACX_EE_START */
-+ 0x0104, /* IO_ACX_SOR_CFG */
-+ 0x0108, /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static void
-+dummy_netdev_init(struct net_device *ndev) {}
-+
-+static int __devinit
-+acxpci_e_probe(struct pci_dev *pdev, const struct pci_device_id *id)
-+{
-+ acx111_ie_configoption_t co;
-+ unsigned long mem_region1 = 0;
-+ unsigned long mem_region2 = 0;
-+ unsigned long mem_region1_size;
-+ unsigned long mem_region2_size;
-+ unsigned long phymem1;
-+ unsigned long phymem2;
-+ void *mem1 = NULL;
-+ void *mem2 = NULL;
-+ acx_device_t *adev = NULL;
-+ struct net_device *ndev = NULL;
-+ const char *chip_name;
-+ int result = -EIO;
-+ int err;
-+ u8 chip_type;
-+
-+ FN_ENTER;
-+
-+ /* Enable the PCI device */
-+ if (pci_enable_device(pdev)) {
-+ printk("acx: pci_enable_device() FAILED\n");
-+ result = -ENODEV;
-+ goto fail_pci_enable_device;
-+ }
-+
-+ /* enable busmastering (required for CardBus) */
-+ pci_set_master(pdev);
-+
-+ /* FIXME: prism54 calls pci_set_mwi() here,
-+ * should we do/support the same? */
-+
-+ /* chiptype is u8 but id->driver_data is ulong
-+ ** Works for now (possible values are 1 and 2) */
-+ chip_type = (u8)id->driver_data;
-+ /* acx100 and acx111 have different PCI memory regions */
-+ if (chip_type == CHIPTYPE_ACX100) {
-+ chip_name = "ACX100";
-+ mem_region1 = PCI_ACX100_REGION1;
-+ mem_region1_size = PCI_ACX100_REGION1_SIZE;
-+
-+ mem_region2 = PCI_ACX100_REGION2;
-+ mem_region2_size = PCI_ACX100_REGION2_SIZE;
-+ } else if (chip_type == CHIPTYPE_ACX111) {
-+ chip_name = "ACX111";
-+ mem_region1 = PCI_ACX111_REGION1;
-+ mem_region1_size = PCI_ACX111_REGION1_SIZE;
-+
-+ mem_region2 = PCI_ACX111_REGION2;
-+ mem_region2_size = PCI_ACX111_REGION2_SIZE;
-+ } else {
-+ printk("acx: unknown chip type 0x%04X\n", chip_type);
-+ goto fail_unknown_chiptype;
-+ }
-+
-+ /* Figure out our resources */
-+ phymem1 = pci_resource_start(pdev, mem_region1);
-+ phymem2 = pci_resource_start(pdev, mem_region2);
-+ if (!request_mem_region(phymem1, pci_resource_len(pdev, mem_region1), "acx_1")) {
-+ printk("acx: cannot reserve PCI memory region 1 (are you sure "
-+ "you have CardBus support in kernel?)\n");
-+ goto fail_request_mem_region1;
-+ }
-+ if (!request_mem_region(phymem2, pci_resource_len(pdev, mem_region2), "acx_2")) {
-+ printk("acx: cannot reserve PCI memory region 2\n");
-+ goto fail_request_mem_region2;
-+ }
-+
-+ /* this used to be ioremap(), but ioremap_nocache()
-+ * is much less risky, right? (and slower?)
-+ * FIXME: we may want to go back to cached variant if it's
-+ * certain that our code really properly handles
-+ * cached operation (memory barriers, volatile?, ...)
-+ * (but always keep this comment here regardless!)
-+ * Possibly make this a driver config setting? */
-+
-+ mem1 = ioremap_nocache(phymem1, mem_region1_size);
-+ if (!mem1) {
-+ printk("acx: ioremap() FAILED\n");
-+ goto fail_ioremap1;
-+ }
-+ mem2 = ioremap_nocache(phymem2, mem_region2_size);
-+ if (!mem2) {
-+ printk("acx: ioremap() #2 FAILED\n");
-+ goto fail_ioremap2;
-+ }
-+
-+ printk("acx: found %s-based wireless network card at %s, irq:%d, "
-+ "phymem1:0x%lX, phymem2:0x%lX, mem1:0x%p, mem1_size:%ld, "
-+ "mem2:0x%p, mem2_size:%ld\n",
-+ chip_name, pci_name(pdev), pdev->irq, phymem1, phymem2,
-+ mem1, mem_region1_size,
-+ mem2, mem_region2_size);
-+ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug);
-+
-+ if (0 == pdev->irq) {
-+ printk("acx: can't use IRQ 0\n");
-+ goto fail_irq;
-+ }
-+
-+ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init);
-+ /* (NB: memsets to 0 entire area) */
-+ if (!ndev) {
-+ printk("acx: no memory for netdevice struct\n");
-+ goto fail_alloc_netdev;
-+ }
-+
-+ ether_setup(ndev);
-+ ndev->open = &acxpci_e_open;
-+ ndev->stop = &acxpci_e_close;
-+ ndev->hard_start_xmit = &acx_i_start_xmit;
-+ ndev->get_stats = &acx_e_get_stats;
-+#if IW_HANDLER_VERSION <= 5
-+ ndev->get_wireless_stats = &acx_e_get_wireless_stats;
-+#endif
-+ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
-+ ndev->set_multicast_list = &acxpci_i_set_multicast_list;
-+ ndev->tx_timeout = &acxpci_i_tx_timeout;
-+ ndev->change_mtu = &acx_e_change_mtu;
-+ ndev->watchdog_timeo = 4 * HZ;
-+ ndev->irq = pdev->irq;
-+ ndev->base_addr = pci_resource_start(pdev, 0);
-+
-+ adev = ndev2adev(ndev);
-+ spin_lock_init(&adev->lock); /* initial state: unlocked */
-+ /* We do not start with downed sem: we want PARANOID_LOCKING to work */
-+ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
-+ /* since nobody can see new netdev yet, we can as well
-+ ** just _presume_ that we're under sem (instead of actually taking it): */
-+ /* acx_sem_lock(adev); */
-+ adev->pdev = pdev;
-+ adev->ndev = ndev;
-+ adev->dev_type = DEVTYPE_PCI;
-+ adev->chip_type = chip_type;
-+ adev->chip_name = chip_name;
-+ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111;
-+ adev->membase = phymem1;
-+ adev->iobase = mem1;
-+ adev->membase2 = phymem2;
-+ adev->iobase2 = mem2;
-+ /* to find crashes due to weird driver access
-+ * to unconfigured interface (ifup) */
-+ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead;
-+
-+#ifdef NONESSENTIAL_FEATURES
-+ acx_show_card_eeprom_id(adev);
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+#ifdef SET_MODULE_OWNER
-+ SET_MODULE_OWNER(ndev);
-+#endif
-+ SET_NETDEV_DEV(ndev, &pdev->dev);
-+
-+ log(L_IRQ|L_INIT, "using IRQ %d\n", pdev->irq);
-+
-+ /* need to be able to restore PCI state after a suspend */
-+ pci_save_state(pdev);
-+ pci_set_drvdata(pdev, ndev);
-+
-+ /* ok, pci setup is finished, now start initializing the card */
-+
-+ /* NB: read_reg() reads may return bogus data before reset_dev(),
-+ * since the firmware which directly controls large parts of the I/O
-+ * registers isn't initialized yet.
-+ * acx100 seems to be more affected than acx111 */
-+ if (OK != acxpci_s_reset_dev(adev))
-+ goto fail_reset;
-+
-+ if (IS_ACX100(adev)) {
-+ /* ACX100: configopt struct in cmd mailbox - directly after reset */
-+ memcpy_fromio(&co, adev->cmd_area, sizeof(co));
-+ }
-+
-+ if (OK != acx_s_init_mac(adev))
-+ goto fail_init_mac;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111: configopt struct needs to be queried after full init */
-+ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS);
-+ }
-+
-+/* TODO: merge them into one function, they are called just once and are the same for pci & usb */
-+ if (OK != acxpci_read_eeprom_byte(adev, 0x05, &adev->eeprom_version))
-+ goto fail_read_eeprom_version;
-+
-+ acx_s_parse_configoption(adev, &co);
-+ acx_s_set_defaults(adev);
-+ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */
-+ acx_display_hardware_details(adev);
-+
-+ /* Register the card, AFTER everything else has been set up,
-+ * since otherwise an ioctl could step on our feet due to
-+ * firmware operations happening in parallel or uninitialized data */
-+ err = register_netdev(ndev);
-+ if (OK != err) {
-+ printk("acx: register_netdev() FAILED: %d\n", err);
-+ goto fail_register_netdev;
-+ }
-+
-+ acx_proc_register_entries(ndev);
-+
-+ /* Now we have our device, so make sure the kernel doesn't try
-+ * to send packets even though we're not associated to a network yet */
-+ acx_stop_queue(ndev, "on probe");
-+ acx_carrier_off(ndev, "on probe");
-+
-+ /* after register_netdev() userspace may start working with dev
-+ * (in particular, on other CPUs), we only need to up the sem */
-+ /* acx_sem_unlock(adev); */
-+
-+ printk("acx "ACX_RELEASE": net device %s, driver compiled "
-+ "against wireless extensions %d and Linux %s\n",
-+ ndev->name, WIRELESS_EXT, UTS_RELEASE);
-+
-+#if CMD_DISCOVERY
-+ great_inquisitor(adev);
-+#endif
-+
-+ result = OK;
-+ goto done;
-+
-+ /* error paths: undo everything in reverse order... */
-+
-+fail_register_netdev:
-+
-+ acxpci_s_delete_dma_regions(adev);
-+ pci_set_drvdata(pdev, NULL);
-+
-+fail_init_mac:
-+fail_read_eeprom_version:
-+fail_reset:
-+
-+ free_netdev(ndev);
-+fail_alloc_netdev:
-+fail_irq:
-+
-+ iounmap(mem2);
-+fail_ioremap2:
-+
-+ iounmap(mem1);
-+fail_ioremap1:
-+
-+ release_mem_region(pci_resource_start(pdev, mem_region2),
-+ pci_resource_len(pdev, mem_region2));
-+fail_request_mem_region2:
-+
-+ release_mem_region(pci_resource_start(pdev, mem_region1),
-+ pci_resource_len(pdev, mem_region1));
-+fail_request_mem_region1:
-+fail_unknown_chiptype:
-+
-+ pci_disable_device(pdev);
-+fail_pci_enable_device:
-+
-+ pci_set_power_state(pdev, PCI_D3hot);
-+
-+done:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_e_remove
-+**
-+** Shut device down (if not hot unplugged)
-+** and deallocate PCI resources for the acx chip.
-+**
-+** pdev - ptr to PCI device structure containing info about pci configuration
-+*/
-+static void __devexit
-+acxpci_e_remove(struct pci_dev *pdev)
-+{
-+ struct net_device *ndev;
-+ acx_device_t *adev;
-+ unsigned long mem_region1, mem_region2;
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ ndev = (struct net_device*) pci_get_drvdata(pdev);
-+ if (!ndev) {
-+ log(L_DEBUG, "%s: card is unused. Skipping any release code\n",
-+ __func__);
-+ goto end;
-+ }
-+
-+ adev = ndev2adev(ndev);
-+
-+ /* If device wasn't hot unplugged... */
-+ if (adev_present(adev)) {
-+
-+ acx_sem_lock(adev);
-+
-+ /* disable both Tx and Rx to shut radio down properly */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
-+
-+#ifdef REDUNDANT
-+ /* put the eCPU to sleep to save power
-+ * Halting is not possible currently,
-+ * since not supported by all firmware versions */
-+ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0);
-+#endif
-+ acx_lock(adev, flags);
-+ /* disable power LED to save power :-) */
-+ log(L_INIT, "switching off power LED to save power\n");
-+ acxpci_l_power_led(adev, 0);
-+ /* stop our eCPU */
-+ if (IS_ACX111(adev)) {
-+ /* FIXME: does this actually keep halting the eCPU?
-+ * I don't think so...
-+ */
-+ acxpci_l_reset_mac(adev);
-+ } else {
-+ u16 temp;
-+ /* halt eCPU */
-+ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
-+ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
-+ write_flush(adev);
-+ }
-+ acx_unlock(adev, flags);
-+
-+ acx_sem_unlock(adev);
-+ }
-+
-+ /* unregister the device to not let the kernel
-+ * (e.g. ioctls) access a half-deconfigured device
-+ * NB: this will cause acxpci_e_close() to be called,
-+ * thus we shouldn't call it under sem! */
-+ log(L_INIT, "removing device %s\n", ndev->name);
-+ unregister_netdev(ndev);
-+
-+ /* unregister_netdev ensures that no references to us left.
-+ * For paranoid reasons we continue to follow the rules */
-+ acx_sem_lock(adev);
-+
-+ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) {
-+ acxpci_s_down(ndev);
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ }
-+
-+ acx_proc_unregister_entries(ndev);
-+
-+ if (IS_ACX100(adev)) {
-+ mem_region1 = PCI_ACX100_REGION1;
-+ mem_region2 = PCI_ACX100_REGION2;
-+ } else {
-+ mem_region1 = PCI_ACX111_REGION1;
-+ mem_region2 = PCI_ACX111_REGION2;
-+ }
-+
-+ /* finally, clean up PCI bus state */
-+ acxpci_s_delete_dma_regions(adev);
-+ if (adev->iobase) iounmap(adev->iobase);
-+ if (adev->iobase2) iounmap(adev->iobase2);
-+ release_mem_region(pci_resource_start(pdev, mem_region1),
-+ pci_resource_len(pdev, mem_region1));
-+ release_mem_region(pci_resource_start(pdev, mem_region2),
-+ pci_resource_len(pdev, mem_region2));
-+ pci_disable_device(pdev);
-+
-+ /* remove dev registration */
-+ pci_set_drvdata(pdev, NULL);
-+
-+ acx_sem_unlock(adev);
-+
-+ /* Free netdev (quite late,
-+ * since otherwise we might get caught off-guard
-+ * by a netdev timeout handler execution
-+ * expecting to see a working dev...) */
-+ free_netdev(ndev);
-+
-+ /* put device into ACPI D3 mode (shutdown) */
-+ pci_set_power_state(pdev, PCI_D3hot);
-+
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** TODO: PM code needs to be fixed / debugged / tested.
-+*/
-+#ifdef CONFIG_PM
-+static int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+acxpci_e_suspend(struct pci_dev *pdev, pm_message_t state)
-+#else
-+acxpci_e_suspend(struct pci_dev *pdev, u32 state)
-+#endif
-+{
-+ struct net_device *ndev = pci_get_drvdata(pdev);
-+ acx_device_t *adev;
-+
-+ FN_ENTER;
-+ printk("acx: suspend handler is experimental!\n");
-+ printk("sus: dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ goto end;
-+
-+ adev = ndev2adev(ndev);
-+ printk("sus: adev %p\n", adev);
-+
-+ acx_sem_lock(adev);
-+
-+ netif_device_detach(ndev); /* this one cannot sleep */
-+ acxpci_s_down(ndev);
-+ /* down() does not set it to 0xffff, but here we really want that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ acxpci_s_delete_dma_regions(adev);
-+ pci_save_state(pdev);
-+ pci_set_power_state(pdev, PCI_D3hot);
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+static int
-+acxpci_e_resume(struct pci_dev *pdev)
-+{
-+ struct net_device *ndev = pci_get_drvdata(pdev);
-+ acx_device_t *adev;
-+
-+ FN_ENTER;
-+
-+ printk("acx: resume handler is experimental!\n");
-+ printk("rsm: got dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ goto end;
-+
-+ adev = ndev2adev(ndev);
-+ printk("rsm: got adev %p\n", adev);
-+
-+ acx_sem_lock(adev);
-+
-+ pci_set_power_state(pdev, PCI_D0);
-+ printk("rsm: power state PCI_D0 set\n");
-+ pci_restore_state(pdev);
-+ printk("rsm: PCI state restored\n");
-+
-+ if (OK != acxpci_s_reset_dev(adev))
-+ goto end_unlock;
-+ printk("rsm: device reset done\n");
-+ if (OK != acx_s_init_mac(adev))
-+ goto end_unlock;
-+ printk("rsm: init MAC done\n");
-+
-+ acxpci_s_up(ndev);
-+ printk("rsm: acx up done\n");
-+
-+ /* now even reload all card parameters as they were before suspend,
-+ * and possibly be back in the network again already :-) */
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) {
-+ adev->set_mask = GETSET_ALL;
-+ acx_s_update_card_settings(adev);
-+ printk("rsm: settings updated\n");
-+ }
-+ netif_device_attach(ndev);
-+ printk("rsm: device attached\n");
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+end:
-+ /* we need to return OK here anyway, right? */
-+ FN_EXIT0;
-+ return OK;
-+}
-+#endif /* CONFIG_PM */
-+
-+
-+/***********************************************************************
-+** acxpci_s_up
-+**
-+** This function is called by acxpci_e_open (when ifconfig sets the device as up)
-+**
-+** Side effects:
-+** - Enables on-card interrupt requests
-+** - calls acx_s_start
-+*/
-+
-+static void
-+enable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask);
-+ write_reg16(adev, IO_ACX_FEMR, 0x8000);
-+ adev->irqs_active = 1;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxpci_s_up(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+ enable_acx_irq(adev);
-+ acx_unlock(adev, flags);
-+
-+ /* acx fw < 1.9.3.e has a hardware timer, and older drivers
-+ ** used to use it. But we don't do that anymore, our OS
-+ ** has reliable software timers */
-+ init_timer(&adev->mgmt_timer);
-+ adev->mgmt_timer.function = acx_i_timer;
-+ adev->mgmt_timer.data = (unsigned long)adev;
-+
-+ /* Need to set ACX_STATE_IFACE_UP first, or else
-+ ** timer won't be started by acx_set_status() */
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ /* actual scan cmd will happen in start() */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING); break;
-+ case ACX_MODE_3_AP:
-+ case ACX_MODE_MONITOR:
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break;
-+ }
-+
-+ acx_s_start(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_down
-+**
-+** NB: device may be already hot unplugged if called from acxpci_e_remove()
-+**
-+** Disables on-card interrupt request, stops softirq and timer, stops queue,
-+** sets status == STOPPED
-+*/
-+
-+static void
-+disable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+
-+ /* I guess mask is not 0xffff because acx100 won't signal
-+ ** cmd completion then (needed for ifup).
-+ ** Someone with acx100 please confirm */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ adev->irqs_active = 0;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxpci_s_down(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ /* Disable IRQs first, so that IRQs cannot race with us */
-+ /* then wait until interrupts have finished executing on other CPUs */
-+ acx_lock(adev, flags);
-+ disable_acx_irq(adev);
-+ synchronize_irq(adev->pdev->irq);
-+ acx_unlock(adev, flags);
-+
-+ /* we really don't want to have an asynchronous tasklet disturb us
-+ ** after something vital for its job has been shut down, so
-+ ** end all remaining work now.
-+ **
-+ ** NB: carrier_off (done by set_status below) would lead to
-+ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK().
-+ ** That's why we do FLUSH first.
-+ **
-+ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK()
-+ ** waits for acx_e_after_interrupt_task to complete if it is running
-+ ** on another CPU, but acx_e_after_interrupt_task
-+ ** will sleep on sem forever, because it is taken by us!
-+ ** Work around that by temporary sem unlock.
-+ ** This will fail miserably if we'll be hit by concurrent
-+ ** iwconfig or something in between. TODO! */
-+ acx_sem_unlock(adev);
-+ FLUSH_SCHEDULED_WORK();
-+ acx_sem_lock(adev);
-+
-+ /* This is possible:
-+ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task ->
-+ ** -> set_status(ASSOCIATED) -> wake_queue()
-+ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK
-+ ** lock/unlock is just paranoia, maybe not needed */
-+ acx_lock(adev, flags);
-+ acx_stop_queue(ndev, "on ifdown");
-+ acx_set_status(adev, ACX_STATUS_0_STOPPED);
-+ acx_unlock(adev, flags);
-+
-+ /* kernel/timer.c says it's illegal to del_timer_sync()
-+ ** a timer which restarts itself. We guarantee this cannot
-+ ** ever happen because acx_i_timer() never does this if
-+ ** status is ACX_STATUS_0_STOPPED */
-+ del_timer_sync(&adev->mgmt_timer);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_e_open
-+**
-+** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP
-+** from clear to set. In other words: ifconfig up.
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxpci_e_open(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ acx_init_task_scheduler(adev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D0); ? */
-+
-+ /* request shared IRQ handler */
-+ if (request_irq(ndev->irq, acxpci_i_interrupt, SA_SHIRQ, ndev->name, ndev)) {
-+ printk("%s: request_irq FAILED\n", ndev->name);
-+ result = -EAGAIN;
-+ goto done;
-+ }
-+ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq);
-+
-+ /* ifup device */
-+ acxpci_s_up(ndev);
-+
-+ /* We don't currently have to do anything else.
-+ * The setup of the MAC should be subsequently completed via
-+ * the mlme commands.
-+ * Higher layers know we're ready from dev->start==1 and
-+ * dev->tbusy==0. Our rx path knows to pass up received/
-+ * frames because of dev->flags&IFF_UP is true.
-+ */
-+done:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_e_close
-+**
-+** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP
-+** from set to clear. I.e. called by "ifconfig DEV down"
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxpci_e_close(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* ifdown device */
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ if (netif_device_present(ndev)) {
-+ acxpci_s_down(ndev);
-+ }
-+
-+ /* disable all IRQs, release shared IRQ handler */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ free_irq(ndev->irq, ndev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */
-+
-+ /* We currently don't have to do anything else.
-+ * Higher layers know we're not ready from dev->start==0 and
-+ * dev->tbusy==1. Our rx path knows to not pass up received
-+ * frames because of dev->flags&IFF_UP is false.
-+ */
-+ acx_sem_unlock(adev);
-+
-+ log(L_INIT, "closed device\n");
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_i_tx_timeout
-+**
-+** Called from network core. Must not sleep!
-+*/
-+static void
-+acxpci_i_tx_timeout(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ unsigned int tx_num_cleaned;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* clean processed tx descs, they may have been completely full */
-+ tx_num_cleaned = acxpci_l_clean_txdesc(adev);
-+
-+ /* nothing cleaned, yet (almost) no free buffers available?
-+ * --> clean all tx descs, no matter which status!!
-+ * Note that I strongly suspect that doing emergency cleaning
-+ * may confuse the firmware. This is a last ditch effort to get
-+ * ANYTHING to work again...
-+ *
-+ * TODO: it's best to simply reset & reinit hw from scratch...
-+ */
-+ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) {
-+ printk("%s: FAILED to free any of the many full tx buffers. "
-+ "Switching to emergency freeing. "
-+ "Please report!\n", ndev->name);
-+ acxpci_l_clean_txdesc_emergency(adev);
-+ }
-+
-+ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status))
-+ acx_wake_queue(ndev, "after tx timeout");
-+
-+ /* stall may have happened due to radio drift, so recalib radio */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+
-+ /* do unimportant work last */
-+ printk("%s: tx timeout!\n", ndev->name);
-+ adev->stats.tx_errors++;
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_i_set_multicast_list
-+** FIXME: most likely needs refinement
-+*/
-+static void
-+acxpci_i_set_multicast_list(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* firmwares don't have allmulti capability,
-+ * so just use promiscuous mode instead in this case. */
-+ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
-+ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ /* let kernel know in case *we* needed to set promiscuous */
-+ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI);
-+ } else {
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI);
-+ }
-+
-+ /* cannot update card settings directly here, atomic context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_l_process_rxdesc
-+**
-+** Called directly and only from the IRQ handler
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_rxbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_rxbuffer(const acx_device_t *adev)
-+{
-+ register const struct rxhostdesc *rxhostdesc;
-+ int i;
-+ /* no FN_ENTER here, we don't want that */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+ if (unlikely(!rxhostdesc)) return;
-+ for (i = 0; i < RX_CNT; i++) {
-+ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
-+ printk("rx: buf %d full\n", i);
-+ rxhostdesc++;
-+ }
-+}
-+#endif
-+
-+static void
-+acxpci_l_process_rxdesc(acx_device_t *adev)
-+{
-+ register rxhostdesc_t *hostdesc;
-+ unsigned count, tail;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(acx_debug & L_BUFR))
-+ log_rxbuffer(adev);
-+
-+ /* First, have a loop to determine the first descriptor that's
-+ * full, just in case there's a mismatch between our current
-+ * rx_tail and the full descriptor we're supposed to handle. */
-+ tail = adev->rx_tail;
-+ count = RX_CNT;
-+ while (1) {
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+ /* advance tail regardless of outcome of the below test */
-+ tail = (tail + 1) % RX_CNT;
-+
-+ if ((hostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ && (hostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
-+ break; /* found it! */
-+
-+ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */
-+ goto end;
-+ }
-+
-+ /* now process descriptors, starting with the first we figured out */
-+ while (1) {
-+ log(L_BUFR, "rx: tail=%u Ctl_16=%04X Status=%08X\n",
-+ tail, hostdesc->Ctl_16, hostdesc->Status);
-+
-+ acx_l_process_rxbuf(adev, hostdesc->data);
-+
-+ hostdesc->Status = 0;
-+ /* flush all writes before adapter sees CTL_HOSTOWN change */
-+ wmb();
-+ /* Host no longer owns this, needs to be LAST */
-+ CLEAR_BIT(hostdesc->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
-+
-+ /* ok, descriptor is handled, now check the next descriptor */
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+
-+ /* if next descriptor is empty, then bail out */
-+ if (!(hostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ || !(hostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
-+ break;
-+
-+ tail = (tail + 1) % RX_CNT;
-+ }
-+end:
-+ adev->rx_tail = tail;
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_i_interrupt
-+**
-+** IRQ handler (atomic context, must not sleep, blah, blah)
-+*/
-+
-+/* scan is complete. all frames now on the receive queue are valid */
-+#define INFO_SCAN_COMPLETE 0x0001
-+#define INFO_WEP_KEY_NOT_FOUND 0x0002
-+/* hw has been reset as the result of a watchdog timer timeout */
-+#define INFO_WATCH_DOG_RESET 0x0003
-+/* failed to send out NULL frame from PS mode notification to AP */
-+/* recommended action: try entering 802.11 PS mode again */
-+#define INFO_PS_FAIL 0x0004
-+/* encryption/decryption process on a packet failed */
-+#define INFO_IV_ICV_FAILURE 0x0005
-+
-+/* Info mailbox format:
-+2 bytes: type
-+2 bytes: status
-+more bytes may follow
-+ rumors say about status:
-+ 0x0000 info available (set by hw)
-+ 0x0001 information received (must be set by host)
-+ 0x1000 info available, mailbox overflowed (messages lost) (set by hw)
-+ but in practice we've seen:
-+ 0x9000 when we did not set status to 0x0001 on prev message
-+ 0x1001 when we did set it
-+ 0x0000 was never seen
-+ conclusion: this is really a bitfield:
-+ 0x1000 is 'info available' bit
-+ 'mailbox overflowed' bit is 0x8000, not 0x1000
-+ value of 0x0000 probably means that there are no messages at all
-+ P.S. I dunno how in hell hw is supposed to notice that messages are lost -
-+ it does NOT clear bit 0x0001, and this bit will probably stay forever set
-+ after we set it once. Let's hope this will be fixed in firmware someday
-+*/
-+
-+static void
-+handle_info_irq(acx_device_t *adev)
-+{
-+#if ACX_DEBUG
-+ static const char * const info_type_msg[] = {
-+ "(unknown)",
-+ "scan complete",
-+ "WEP key not found",
-+ "internal watchdog reset was done",
-+ "failed to send powersave (NULL frame) notification to AP",
-+ "encrypt/decrypt on a packet has failed",
-+ "TKIP tx keys disabled",
-+ "TKIP rx keys disabled",
-+ "TKIP rx: key ID not found",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "TKIP IV value exceeds thresh"
-+ };
-+#endif
-+ u32 info_type, info_status;
-+
-+ info_type = readl(adev->info_area);
-+ info_status = (info_type >> 16);
-+ info_type = (u16)info_type;
-+
-+ /* inform fw that we have read this info message */
-+ writel(info_type | 0x00010000, adev->info_area);
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK);
-+ write_flush(adev);
-+
-+ log(L_CTL, "info_type:%04X info_status:%04X\n",
-+ info_type, info_status);
-+
-+ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n",
-+ info_status, info_type,
-+ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ?
-+ 0 : info_type]
-+ );
-+}
-+
-+
-+static void
-+log_unusual_irq(u16 irqtype) {
-+ /*
-+ if (!printk_ratelimit())
-+ return;
-+ */
-+
-+ printk("acx: got");
-+ if (irqtype & HOST_INT_RX_DATA) {
-+ printk(" Rx_Data");
-+ }
-+ /* HOST_INT_TX_COMPLETE */
-+ if (irqtype & HOST_INT_TX_XFER) {
-+ printk(" Tx_Xfer");
-+ }
-+ /* HOST_INT_RX_COMPLETE */
-+ if (irqtype & HOST_INT_DTIM) {
-+ printk(" DTIM");
-+ }
-+ if (irqtype & HOST_INT_BEACON) {
-+ printk(" Beacon");
-+ }
-+ if (irqtype & HOST_INT_TIMER) {
-+ log(L_IRQ, " Timer");
-+ }
-+ if (irqtype & HOST_INT_KEY_NOT_FOUND) {
-+ printk(" Key_Not_Found");
-+ }
-+ if (irqtype & HOST_INT_IV_ICV_FAILURE) {
-+ printk(" IV_ICV_Failure (crypto)");
-+ }
-+ /* HOST_INT_CMD_COMPLETE */
-+ /* HOST_INT_INFO */
-+ if (irqtype & HOST_INT_OVERFLOW) {
-+ printk(" Overflow");
-+ }
-+ if (irqtype & HOST_INT_PROCESS_ERROR) {
-+ printk(" Process_Error");
-+ }
-+ /* HOST_INT_SCAN_COMPLETE */
-+ if (irqtype & HOST_INT_FCS_THRESHOLD) {
-+ printk(" FCS_Threshold");
-+ }
-+ if (irqtype & HOST_INT_UNKNOWN) {
-+ printk(" Unknown");
-+ }
-+ printk(" IRQ(s)\n");
-+}
-+
-+
-+static void
-+update_link_quality_led(acx_device_t *adev)
-+{
-+ int qual;
-+
-+ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise);
-+ if (qual > adev->brange_max_quality)
-+ qual = adev->brange_max_quality;
-+
-+ if (time_after(jiffies, adev->brange_time_last_state_change +
-+ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) {
-+ acxpci_l_power_led(adev, (adev->brange_last_state == 0));
-+ adev->brange_last_state ^= 1; /* toggle */
-+ adev->brange_time_last_state_change = jiffies;
-+ }
-+}
-+
-+
-+#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */
-+
-+static irqreturn_t
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+acxpci_i_interrupt(int irq, void *dev_id)
-+#else
-+acxpci_i_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+#endif
-+{
-+ acx_device_t *adev;
-+ unsigned long flags;
-+ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY;
-+ register u16 irqtype;
-+ u16 unmasked;
-+
-+ adev = ndev2adev((struct net_device*)dev_id);
-+
-+ /* LOCKING: can just spin_lock() since IRQs are disabled anyway.
-+ * I am paranoid */
-+ acx_lock(adev, flags);
-+
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ if (unlikely(0xffff == unmasked)) {
-+ /* 0xffff value hints at missing hardware,
-+ * so don't do anything.
-+ * Not very clean, but other drivers do the same... */
-+ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n");
-+ goto none;
-+ }
-+
-+ /* We will check only "interesting" IRQ types */
-+ irqtype = unmasked & ~adev->irq_mask;
-+ if (!irqtype) {
-+ /* We are on a shared IRQ line and it wasn't our IRQ */
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n",
-+ unmasked, adev->irq_mask);
-+ goto none;
-+ }
-+
-+ /* Done here because IRQ_NONEs taking three lines of log
-+ ** drive me crazy */
-+ FN_ENTER;
-+
-+#define IRQ_ITERATE 1
-+#if IRQ_ITERATE
-+if (jiffies != adev->irq_last_jiffies) {
-+ adev->irq_loops_this_jiffy = 0;
-+ adev->irq_last_jiffies = jiffies;
-+}
-+
-+/* safety condition; we'll normally abort loop below
-+ * in case no IRQ type occurred */
-+while (likely(--irqcount)) {
-+#endif
-+ /* ACK all IRQs ASAP */
-+ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff);
-+
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n",
-+ unmasked, adev->irq_mask, irqtype);
-+
-+ /* Handle most important IRQ types first */
-+ if (irqtype & HOST_INT_RX_COMPLETE) {
-+ log(L_IRQ, "got Rx_Complete IRQ\n");
-+ acxpci_l_process_rxdesc(adev);
-+ }
-+ if (irqtype & HOST_INT_TX_COMPLETE) {
-+ log(L_IRQ, "got Tx_Complete IRQ\n");
-+ /* don't clean up on each Tx complete, wait a bit
-+ * unless we're going towards full, in which case
-+ * we do it immediately, too (otherwise we might lockup
-+ * with a full Tx buffer if we go into
-+ * acxpci_l_clean_txdesc() at a time when we won't wakeup
-+ * the net queue in there for some reason...) */
-+ if (adev->tx_free <= TX_START_CLEAN) {
-+#if TX_CLEANUP_IN_SOFTIRQ
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP);
-+#else
-+ acxpci_l_clean_txdesc(adev);
-+#endif
-+ }
-+ }
-+
-+ /* Less frequent ones */
-+ if (irqtype & (0
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ | HOST_INT_SCAN_COMPLETE
-+ )) {
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ log(L_IRQ, "got Command_Complete IRQ\n");
-+ /* save the state for the running issue_cmd() */
-+ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE);
-+ }
-+ if (irqtype & HOST_INT_INFO) {
-+ handle_info_irq(adev);
-+ }
-+ if (irqtype & HOST_INT_SCAN_COMPLETE) {
-+ log(L_IRQ, "got Scan_Complete IRQ\n");
-+ /* need to do that in process context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN);
-+ /* remember that fw is not scanning anymore */
-+ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
-+ }
-+ }
-+
-+ /* These we just log, but either they happen rarely
-+ * or we keep them masked out */
-+ if (irqtype & (0
-+ | HOST_INT_RX_DATA
-+ /* | HOST_INT_TX_COMPLETE */
-+ | HOST_INT_TX_XFER
-+ /* | HOST_INT_RX_COMPLETE */
-+ | HOST_INT_DTIM
-+ | HOST_INT_BEACON
-+ | HOST_INT_TIMER
-+ | HOST_INT_KEY_NOT_FOUND
-+ | HOST_INT_IV_ICV_FAILURE
-+ /* | HOST_INT_CMD_COMPLETE */
-+ /* | HOST_INT_INFO */
-+ | HOST_INT_OVERFLOW
-+ | HOST_INT_PROCESS_ERROR
-+ /* | HOST_INT_SCAN_COMPLETE */
-+ | HOST_INT_FCS_THRESHOLD
-+ | HOST_INT_UNKNOWN
-+ )) {
-+ log_unusual_irq(irqtype);
-+ }
-+
-+#if IRQ_ITERATE
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ irqtype = unmasked & ~adev->irq_mask;
-+ /* Bail out if no new IRQ bits or if all are masked out */
-+ if (!irqtype)
-+ break;
-+
-+ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) {
-+ printk(KERN_ERR "acx: too many interrupts per jiffy!\n");
-+ /* Looks like card floods us with IRQs! Try to stop that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ /* This will short-circuit all future attempts to handle IRQ.
-+ * We cant do much more... */
-+ adev->irq_mask = 0;
-+ break;
-+ }
-+}
-+#endif
-+ /* Routine to perform blink with range */
-+ if (unlikely(adev->led_power == 2))
-+ update_link_quality_led(adev);
-+
-+/* handled: */
-+ /* write_flush(adev); - not needed, last op was read anyway */
-+ acx_unlock(adev, flags);
-+ FN_EXIT0;
-+ return IRQ_HANDLED;
-+
-+none:
-+ acx_unlock(adev, flags);
-+ return IRQ_NONE;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_l_power_led
-+*/
-+void
-+acxpci_l_power_led(acx_device_t *adev, int enable)
-+{
-+ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800;
-+
-+ /* A hack. Not moving message rate limiting to adev->xxx
-+ * (it's only a debug message after all) */
-+ static int rate_limit = 0;
-+
-+ if (rate_limit++ < 3)
-+ log(L_IOCTL, "Please report in case toggling the power "
-+ "LED doesn't work for your card!\n");
-+ if (enable)
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled);
-+ else
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled);
-+}
-+
-+
-+/***********************************************************************
-+** Ioctls
-+*/
-+
-+/***********************************************************************
-+*/
-+int
-+acx111pci_ioctl_info(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+#if ACX_DEBUG > 1
-+ acx_device_t *adev = ndev2adev(ndev);
-+ rxdesc_t *rxdesc;
-+ txdesc_t *txdesc;
-+ rxhostdesc_t *rxhostdesc;
-+ txhostdesc_t *txhostdesc;
-+ struct acx111_ie_memoryconfig memconf;
-+ struct acx111_ie_queueconfig queueconf;
-+ unsigned long flags;
-+ int i;
-+ char memmap[0x34];
-+ char rxconfig[0x8];
-+ char fcserror[0x8];
-+ char ratefallback[0x5];
-+
-+ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) )
-+ return OK;
-+ /* using printk() since we checked debug flag already */
-+
-+ acx_sem_lock(adev);
-+
-+ if (!IS_ACX111(adev)) {
-+ printk("acx111-specific function called "
-+ "with non-acx111 chip, aborting\n");
-+ goto end_ok;
-+ }
-+
-+ /* get Acx111 Memory Configuration */
-+ memset(&memconf, 0, sizeof(memconf));
-+ /* BTW, fails with 12 (Write only) error code.
-+ ** Retained for easy testing of issue_cmd error handling :) */
-+ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG);
-+
-+ /* get Acx111 Queue Configuration */
-+ memset(&queueconf, 0, sizeof(queueconf));
-+ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
-+
-+ /* get Acx111 Memory Map */
-+ memset(memmap, 0, sizeof(memmap));
-+ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP);
-+
-+ /* get Acx111 Rx Config */
-+ memset(rxconfig, 0, sizeof(rxconfig));
-+ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG);
-+
-+ /* get Acx111 fcs error count */
-+ memset(fcserror, 0, sizeof(fcserror));
-+ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT);
-+
-+ /* get Acx111 rate fallback */
-+ memset(ratefallback, 0, sizeof(ratefallback));
-+ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK);
-+
-+ /* force occurrence of a beacon interrupt */
-+ /* TODO: comment why is this necessary */
-+ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON);
-+
-+ /* dump Acx111 Mem Configuration */
-+ printk("dump mem config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Number of stations: %1X\n"
-+ "Memory block size: %1X\n"
-+ "tx/rx memory block allocation: %1X\n"
-+ "count rx: %X / tx: %X queues\n"
-+ "options %1X\n"
-+ "fragmentation %1X\n"
-+ "Rx Queue 1 Count Descriptors: %X\n"
-+ "Rx Queue 1 Host Memory Start: %X\n"
-+ "Tx Queue 1 Count Descriptors: %X\n"
-+ "Tx Queue 1 Attributes: %X\n",
-+ memconf.len, (int) sizeof(memconf),
-+ memconf.no_of_stations,
-+ memconf.memory_block_size,
-+ memconf.tx_rx_memory_block_allocation,
-+ memconf.count_rx_queues, memconf.count_tx_queues,
-+ memconf.options,
-+ memconf.fragmentation,
-+ memconf.rx_queue1_count_descs,
-+ acx2cpu(memconf.rx_queue1_host_rx_start),
-+ memconf.tx_queue1_count_descs,
-+ memconf.tx_queue1_attributes);
-+
-+ /* dump Acx111 Queue Configuration */
-+ printk("dump queue head:\n"
-+ "data read: %d, struct size: %d\n"
-+ "tx_memory_block_address (from card): %X\n"
-+ "rx_memory_block_address (from card): %X\n"
-+ "rx1_queue address (from card): %X\n"
-+ "tx1_queue address (from card): %X\n"
-+ "tx1_queue attributes (from card): %X\n",
-+ queueconf.len, (int) sizeof(queueconf),
-+ queueconf.tx_memory_block_address,
-+ queueconf.rx_memory_block_address,
-+ queueconf.rx1_queue_address,
-+ queueconf.tx1_queue_address,
-+ queueconf.tx1_attributes);
-+
-+ /* dump Acx111 Mem Map */
-+ printk("dump mem map:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Code start: %X\n"
-+ "Code end: %X\n"
-+ "WEP default key start: %X\n"
-+ "WEP default key end: %X\n"
-+ "STA table start: %X\n"
-+ "STA table end: %X\n"
-+ "Packet template start: %X\n"
-+ "Packet template end: %X\n"
-+ "Queue memory start: %X\n"
-+ "Queue memory end: %X\n"
-+ "Packet memory pool start: %X\n"
-+ "Packet memory pool end: %X\n"
-+ "iobase: %p\n"
-+ "iobase2: %p\n",
-+ *((u16 *)&memmap[0x02]), (int) sizeof(memmap),
-+ *((u32 *)&memmap[0x04]),
-+ *((u32 *)&memmap[0x08]),
-+ *((u32 *)&memmap[0x0C]),
-+ *((u32 *)&memmap[0x10]),
-+ *((u32 *)&memmap[0x14]),
-+ *((u32 *)&memmap[0x18]),
-+ *((u32 *)&memmap[0x1C]),
-+ *((u32 *)&memmap[0x20]),
-+ *((u32 *)&memmap[0x24]),
-+ *((u32 *)&memmap[0x28]),
-+ *((u32 *)&memmap[0x2C]),
-+ *((u32 *)&memmap[0x30]),
-+ adev->iobase,
-+ adev->iobase2);
-+
-+ /* dump Acx111 Rx Config */
-+ printk("dump rx config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "rx config: %X\n"
-+ "rx filter config: %X\n",
-+ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig),
-+ *((u16 *)&rxconfig[0x04]),
-+ *((u16 *)&rxconfig[0x06]));
-+
-+ /* dump Acx111 fcs error */
-+ printk("dump fcserror:\n"
-+ "data read: %d, struct size: %d\n"
-+ "fcserrors: %X\n",
-+ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror),
-+ *((u32 *)&fcserror[0x04]));
-+
-+ /* dump Acx111 rate fallback */
-+ printk("dump rate fallback:\n"
-+ "data read: %d, struct size: %d\n"
-+ "ratefallback: %X\n",
-+ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback),
-+ *((u8 *)&ratefallback[0x04]));
-+
-+ /* protect against IRQ */
-+ acx_lock(adev, flags);
-+
-+ /* dump acx111 internal rx descriptor ring buffer */
-+ rxdesc = adev->rxdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump internal rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n"
-+ "RxStatus (dynamic) 0x%X\n"
-+ "Mod/Pre (dynamic) 0x%X\n",
-+ i,
-+ rxdesc,
-+ acx2cpu(rxdesc->pNextDesc),
-+ acx2cpu(rxdesc->ACXMemPtr),
-+ rxdesc->Ctl_8,
-+ rxdesc->rate,
-+ rxdesc->error,
-+ rxdesc->SNR);
-+ rxdesc++;
-+ }
-+
-+ /* dump host rx descriptor ring buffer */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump host rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ rxhostdesc,
-+ acx2cpu(rxhostdesc->data_phy),
-+ rxhostdesc->data_offset,
-+ le16_to_cpu(rxhostdesc->Ctl_16),
-+ le16_to_cpu(rxhostdesc->length),
-+ acx2cpu(rxhostdesc->desc_phy_next),
-+ rxhostdesc->Status);
-+ rxhostdesc++;
-+ }
-+
-+ /* dump acx111 internal tx descriptor ring buffer */
-+ txdesc = adev->txdesc_start;
-+
-+ /* loop over complete transmit pool */
-+ if (txdesc) for (i = 0; i < TX_CNT; i++) {
-+ printk("\ndump internal txdesc %d:\n"
-+ "size 0x%X\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "host mem pointer (dynamic) 0x%X\n"
-+ "length (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "CTL2 (dynamic) 0x%X\n"
-+ "Status (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n",
-+ i,
-+ (int) sizeof(struct txdesc),
-+ txdesc,
-+ acx2cpu(txdesc->pNextDesc),
-+ acx2cpu(txdesc->AcxMemPtr),
-+ acx2cpu(txdesc->HostMemPtr),
-+ le16_to_cpu(txdesc->total_length),
-+ txdesc->Ctl_8,
-+ txdesc->Ctl2_8, txdesc->error,
-+ txdesc->u.r1.rate);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+
-+ /* dump host tx descriptor ring buffer */
-+
-+ txhostdesc = adev->txhostdesc_start;
-+
-+ /* loop over complete host send pool */
-+ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) {
-+ printk("\ndump host txdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ txhostdesc,
-+ acx2cpu(txhostdesc->data_phy),
-+ txhostdesc->data_offset,
-+ le16_to_cpu(txhostdesc->Ctl_16),
-+ le16_to_cpu(txhostdesc->length),
-+ acx2cpu(txhostdesc->desc_phy_next),
-+ le32_to_cpu(txhostdesc->Status));
-+ txhostdesc++;
-+ }
-+
-+ /* write_reg16(adev, 0xb4, 0x4); */
-+
-+ acx_unlock(adev, flags);
-+end_ok:
-+
-+ acx_sem_unlock(adev);
-+#endif /* ACX_DEBUG */
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100pci_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ u16 gpio_old;
-+
-+ if (!IS_ACX100(adev)) {
-+ /* WARNING!!!
-+ * Removing this check *might* damage
-+ * hardware, since we're tweaking GPIOs here after all!!!
-+ * You've been warned...
-+ * WARNING!!! */
-+ printk("acx: sorry, setting bias level for non-acx100 "
-+ "is not supported yet\n");
-+ return OK;
-+ }
-+
-+ if (*extra > 7) {
-+ printk("acx: invalid bias parameter, range is 0-7\n");
-+ return -EINVAL;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ /* Need to lock accesses to [IO_ACX_GPIO_OUT]:
-+ * IRQ handler uses it to update LED */
-+ acx_lock(adev, flags);
-+ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT);
-+ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8));
-+ acx_unlock(adev, flags);
-+
-+ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old);
-+ printk("%s: PHY power amplifier bias: old:%d, new:%d\n",
-+ ndev->name,
-+ (gpio_old & 0x0700) >> 8, (unsigned char)*extra);
-+
-+ acx_sem_unlock(adev);
-+
-+ return OK;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_l_alloc_tx
-+** Actually returns a txdesc_t* ptr
-+**
-+** FIXME: in case of fragments, should allocate multiple descrs
-+** after figuring out how many we need and whether we still have
-+** sufficiently many.
-+*/
-+tx_t*
-+acxpci_l_alloc_tx(acx_device_t *adev)
-+{
-+ struct txdesc *txdesc;
-+ unsigned head;
-+ u8 ctl8;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(!adev->tx_free)) {
-+ printk("acx: BUG: no free txdesc left\n");
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ head = adev->tx_head;
-+ txdesc = get_txdesc(adev, head);
-+ ctl8 = txdesc->Ctl_8;
-+
-+ /* 2005-10-11: there were several bug reports on this happening
-+ ** but now cause seems to be understood & fixed */
-+ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_ACXDONE_HOSTOWN))) {
-+ /* whoops, descr at current index is not free, so probably
-+ * ring buffer already full */
-+ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find "
-+ "free txdesc\n", head, ctl8);
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ /* Needed in case txdesc won't be eventually submitted for tx */
-+ txdesc->Ctl_8 = DESC_CTL_ACXDONE_HOSTOWN;
-+
-+ adev->tx_free--;
-+ log(L_BUFT, "tx: got desc %u, %u remain\n",
-+ head, adev->tx_free);
-+ /* Keep a few free descs between head and tail of tx ring.
-+ ** It is not absolutely needed, just feels safer */
-+ if (adev->tx_free < TX_STOP_QUEUE) {
-+ log(L_BUF, "stop queue (%u tx desc left)\n",
-+ adev->tx_free);
-+ acx_stop_queue(adev->ndev, NULL);
-+ }
-+
-+ /* returning current descriptor, so advance to next free one */
-+ adev->tx_head = (head + 1) % TX_CNT;
-+end:
-+ FN_EXIT0;
-+
-+ return (tx_t*)txdesc;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void*
-+acxpci_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
-+{
-+ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_l_tx_data
-+**
-+** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
-+** Can be called from acx_i_start_xmit (data frames from net core).
-+**
-+** FIXME: in case of fragments, should loop over the number of
-+** pre-allocated tx descrs, properly setting up transfer data and
-+** CTL_xxx flags according to fragment number.
-+*/
-+void
-+acxpci_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len)
-+{
-+ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
-+ txhostdesc_t *hostdesc1, *hostdesc2;
-+ client_t *clt;
-+ u16 rate_cur;
-+ u8 Ctl_8, Ctl2_8;
-+
-+ FN_ENTER;
-+
-+ /* fw doesn't tx such packets anyhow */
-+ if (unlikely(len < WLAN_HDR_A3_LEN))
-+ goto end;
-+
-+ hostdesc1 = get_txhostdesc(adev, txdesc);
-+ /* modify flag status in separate variable to be able to write it back
-+ * in one big swoop later (also in order to have less device memory
-+ * accesses) */
-+ Ctl_8 = txdesc->Ctl_8;
-+ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */
-+
-+ hostdesc2 = hostdesc1 + 1;
-+
-+ /* DON'T simply set Ctl field to 0 here globally,
-+ * it needs to maintain a consistent flag status (those are state flags!!),
-+ * otherwise it may lead to severe disruption. Only set or reset particular
-+ * flags at the exact moment this is needed... */
-+
-+ /* let chip do RTS/CTS handshaking before sending
-+ * in case packet size exceeds threshold */
-+ if (len > adev->rts_threshold)
-+ SET_BIT(Ctl2_8, DESC_CTL2_RTS);
-+ else
-+ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS);
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1);
-+ break;
-+ case ACX_MODE_2_STA:
-+ clt = adev->ap_client;
-+ break;
-+#if 0
-+/* testing was done on acx111: */
-+ case ACX_MODE_MONITOR:
-+ SET_BIT(Ctl2_8, 0
-+/* sends CTS to self before packet */
-+ + DESC_CTL2_SEQ /* don't increase sequence field */
-+/* not working (looks like good fcs is still added) */
-+ + DESC_CTL2_FCS /* don't add the FCS */
-+/* not tested */
-+ + DESC_CTL2_MORE_FRAG
-+/* not tested */
-+ + DESC_CTL2_RETRY /* don't increase retry field */
-+/* not tested */
-+ + DESC_CTL2_POWER /* don't increase power mgmt. field */
-+/* no effect */
-+ + DESC_CTL2_WEP /* encrypt this frame */
-+/* not tested */
-+ + DESC_CTL2_DUR /* don't increase duration field */
-+ );
-+ /* fallthrough */
-+#endif
-+ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
-+ clt = NULL;
-+ break;
-+ }
-+
-+ rate_cur = clt ? clt->rate_cur : adev->rate_bcast;
-+ if (unlikely(!rate_cur)) {
-+ printk("acx: driver bug! bad ratemask\n");
-+ goto end;
-+ }
-+
-+ /* used in tx cleanup routine for auto rate and accounting: */
-+ put_txcr(adev, txdesc, clt, rate_cur);
-+
-+ txdesc->total_length = cpu_to_le16(len);
-+ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN);
-+ if (IS_ACX111(adev)) {
-+ /* note that if !txdesc->do_auto, txrate->cur
-+ ** has only one nonzero bit */
-+ txdesc->u.r2.rate111 = cpu_to_le16(
-+ rate_cur
-+ /* WARNING: I was never able to make it work with prism54 AP.
-+ ** It was falling down to 1Mbit where shortpre is not applicable,
-+ ** and not working at all at "5,11 basic rates only" setting.
-+ ** I even didn't see tx packets in radio packet capture.
-+ ** Disabled for now --vda */
-+ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */
-+ );
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ /* should add this to rate111 above as necessary */
-+ | (clt->pbcc511 ? RATE111_PBCC511 : 0)
-+#endif
-+ hostdesc1->length = cpu_to_le16(len);
-+ } else { /* ACX100 */
-+ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100;
-+ txdesc->u.r1.rate = rate_100;
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ if (clt->pbcc511) {
-+ if (n == RATE100_5 || n == RATE100_11)
-+ n |= RATE100_PBCC511;
-+ }
-+
-+ if (clt->shortpre && (clt->cur != RATE111_1))
-+ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */
-+#endif
-+ /* set autodma and reclaim and 1st mpdu */
-+ SET_BIT(Ctl_8, DESC_CTL_AUTODMA | DESC_CTL_RECLAIM | DESC_CTL_FIRSTFRAG);
-+#if ACX_FRAGMENTATION
-+ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */
-+#endif
-+ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN);
-+ }
-+ /* don't need to clean ack/rts statistics here, already
-+ * done on descr cleanup */
-+
-+ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors
-+ * are now owned by the acx100; do this as LAST operation */
-+ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN);
-+ /* flush writes before we release hostdesc to the adapter here */
-+ wmb();
-+ CLEAR_BIT(hostdesc1->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
-+ CLEAR_BIT(hostdesc2->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
-+
-+ /* write back modified flags */
-+ txdesc->Ctl2_8 = Ctl2_8;
-+ txdesc->Ctl_8 = Ctl_8;
-+ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */
-+
-+ /* flush writes before we tell the adapter that it's its turn now */
-+ mmiowb();
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
-+ write_flush(adev);
-+
-+ /* log the packet content AFTER sending it,
-+ * in order to not delay sending any further than absolutely needed
-+ * Do separate logs for acx100/111 to have human-readable rates */
-+ if (unlikely(acx_debug & (L_XFER|L_DATA))) {
-+ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc;
-+ if (IS_ACX111(adev))
-+ printk("tx: pkt (%s): len %d "
-+ "rate %04X%s status %u\n",
-+ acx_get_packet_type_string(le16_to_cpu(fc)), len,
-+ le16_to_cpu(txdesc->u.r2.rate111),
-+ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "",
-+ adev->status);
-+ else
-+ printk("tx: pkt (%s): len %d rate %03u%s status %u\n",
-+ acx_get_packet_type_string(fc), len,
-+ txdesc->u.r1.rate,
-+ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "",
-+ adev->status);
-+
-+ if (acx_debug & L_DATA) {
-+ printk("tx: 802.11 [%d]: ", len);
-+ acx_dump_bytes(hostdesc1->data, len);
-+ }
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_l_clean_txdesc
-+**
-+** This function resets the txdescs' status when the ACX100
-+** signals the TX done IRQ (txdescs have been processed), starting with
-+** the pool index of the descriptor which we would use next,
-+** in order to make sure that we can be as fast as possible
-+** in filling new txdescs.
-+** Everytime we get called we know where the next packet to be cleaned is.
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_txbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_txbuffer(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+
-+ /* no FN_ENTER here, we don't want that */
-+ /* no locks here, since it's entirely non-critical code */
-+ txdesc = adev->txdesc_start;
-+ if (unlikely(!txdesc)) return;
-+ printk("tx: desc->Ctl8's:");
-+ for (i = 0; i < TX_CNT; i++) {
-+ printk(" %02X", txdesc->Ctl_8);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ printk("\n");
-+}
-+#endif
-+
-+
-+static void
-+handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger)
-+{
-+ const char *err = "unknown error";
-+
-+ /* hmm, should we handle this as a mask
-+ * of *several* bits?
-+ * For now I think only caring about
-+ * individual bits is ok... */
-+ switch (error) {
-+ case 0x01:
-+ err = "no Tx due to error in other fragment";
-+ adev->wstats.discard.fragment++;
-+ break;
-+ case 0x02:
-+ err = "Tx aborted";
-+ adev->stats.tx_aborted_errors++;
-+ break;
-+ case 0x04:
-+ err = "Tx desc wrong parameters";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x08:
-+ err = "WEP key not found";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x10:
-+ err = "MSDU lifetime timeout? - try changing "
-+ "'iwconfig retry lifetime XXX'";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x20:
-+ err = "excessive Tx retries due to either distance "
-+ "too high or unable to Tx or Tx frame error - "
-+ "try changing 'iwconfig txpower XXX' or "
-+ "'sens'itivity or 'retry'";
-+ adev->wstats.discard.retries++;
-+ /* Tx error 0x20 also seems to occur on
-+ * overheating, so I'm not sure whether we
-+ * actually want to do aggressive radio recalibration,
-+ * since people maybe won't notice then that their hardware
-+ * is slowly getting cooked...
-+ * Or is it still a safe long distance from utter
-+ * radio non-functionality despite many radio recalibs
-+ * to final destructive overheating of the hardware?
-+ * In this case we really should do recalib here...
-+ * I guess the only way to find out is to do a
-+ * potentially fatal self-experiment :-\
-+ * Or maybe only recalib in case we're using Tx
-+ * rate auto (on errors switching to lower speed
-+ * --> less heat?) or 802.11 power save mode?
-+ *
-+ * ok, just do it. */
-+ if (++adev->retry_errors_msg_ratelimit % 4 == 0) {
-+ if (adev->retry_errors_msg_ratelimit <= 20) {
-+ printk("%s: several excessive Tx "
-+ "retry errors occurred, attempting "
-+ "to recalibrate radio. Radio "
-+ "drift might be caused by increasing "
-+ "card temperature, please check the card "
-+ "before it's too late!\n",
-+ adev->ndev->name);
-+ if (adev->retry_errors_msg_ratelimit == 20)
-+ printk("disabling above message\n");
-+ }
-+
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+ }
-+ break;
-+ case 0x40:
-+ err = "Tx buffer overflow";
-+ adev->stats.tx_fifo_errors++;
-+ break;
-+ case 0x80:
-+ /* possibly ACPI C-state powersaving related!!!
-+ * (DMA timeout due to excessively high wakeup
-+ * latency after C-state activation!?)
-+ * Disable C-State powersaving and try again,
-+ * then PLEASE REPORT, I'm VERY interested in
-+ * whether my theory is correct that this is
-+ * actually the problem here.
-+ * In that case, use new Linux idle wakeup latency
-+ * requirements kernel API to prevent this issue. */
-+ err = "DMA error";
-+ adev->wstats.discard.misc++;
-+ break;
-+ }
-+ adev->stats.tx_errors++;
-+ if (adev->stats.tx_errors <= 20)
-+ printk("%s: tx error 0x%02X, buf %02u! (%s)\n",
-+ adev->ndev->name, error, finger, err);
-+ else
-+ printk("%s: tx error 0x%02X, buf %02u!\n",
-+ adev->ndev->name, error, finger);
-+}
-+
-+
-+unsigned int
-+acxpci_l_clean_txdesc(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ unsigned finger;
-+ int num_cleaned;
-+ u16 r111;
-+ u8 error, ack_failures, rts_failures, rts_ok, r100;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(acx_debug & L_DEBUG))
-+ log_txbuffer(adev);
-+
-+ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail);
-+
-+ /* We know first descr which is not free yet. We advance it as far
-+ ** as we see correct bits set in following descs (if next desc
-+ ** is NOT free, we shouldn't advance at all). We know that in
-+ ** front of tx_tail may be "holes" with isolated free descs.
-+ ** We will catch up when all intermediate descs will be freed also */
-+
-+ finger = adev->tx_tail;
-+ num_cleaned = 0;
-+ while (likely(finger != adev->tx_head)) {
-+ txdesc = get_txdesc(adev, finger);
-+
-+ /* If we allocated txdesc on tx path but then decided
-+ ** to NOT use it, then it will be left as a free "bubble"
-+ ** in the "allocated for tx" part of the ring.
-+ ** We may meet it on the next ring pass here. */
-+
-+ /* stop if not marked as "tx finished" and "host owned" */
-+ if ((txdesc->Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN)
-+ != DESC_CTL_ACXDONE_HOSTOWN) {
-+ if (unlikely(!num_cleaned)) { /* maybe remove completely */
-+ log(L_BUFT, "clean_txdesc: tail isn't free. "
-+ "tail:%d head:%d\n",
-+ adev->tx_tail, adev->tx_head);
-+ }
-+ break;
-+ }
-+
-+ /* remember desc values... */
-+ error = txdesc->error;
-+ ack_failures = txdesc->ack_failures;
-+ rts_failures = txdesc->rts_failures;
-+ rts_ok = txdesc->rts_ok;
-+ r100 = txdesc->u.r1.rate;
-+ r111 = le16_to_cpu(txdesc->u.r2.rate111);
-+
-+ /* need to check for certain error conditions before we
-+ * clean the descriptor: we still need valid descr data here */
-+ if (unlikely(0x30 & error)) {
-+ /* only send IWEVTXDROP in case of retry or lifetime exceeded;
-+ * all other errors mean we screwed up locally */
-+ union iwreq_data wrqu;
-+ wlan_hdr_t *hdr;
-+ txhostdesc_t *hostdesc;
-+
-+ hostdesc = get_txhostdesc(adev, txdesc);
-+ hdr = (wlan_hdr_t *)hostdesc->data;
-+ MAC_COPY(wrqu.addr.sa_data, hdr->a1);
-+ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL);
-+ }
-+
-+ /* ...and free the desc */
-+ txdesc->error = 0;
-+ txdesc->ack_failures = 0;
-+ txdesc->rts_failures = 0;
-+ txdesc->rts_ok = 0;
-+ /* signal host owning it LAST, since ACX already knows that this
-+ ** descriptor is finished since it set Ctl_8 accordingly. */
-+ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
-+
-+ adev->tx_free++;
-+ num_cleaned++;
-+
-+ if ((adev->tx_free >= TX_START_QUEUE)
-+ && (adev->status == ACX_STATUS_4_ASSOCIATED)
-+ && (acx_queue_stopped(adev->ndev))
-+ ) {
-+ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n",
-+ adev->tx_free);
-+ acx_wake_queue(adev->ndev, NULL);
-+ }
-+
-+ /* do error checking, rate handling and logging
-+ * AFTER having done the work, it's faster */
-+
-+ /* do rate handling */
-+ if (adev->rate_auto) {
-+ struct client *clt = get_txc(adev, txdesc);
-+ if (clt) {
-+ u16 cur = get_txr(adev, txdesc);
-+ if (clt->rate_cur == cur) {
-+ acx_l_handle_txrate_auto(adev, clt,
-+ cur, /* intended rate */
-+ r100, r111, /* actually used rate */
-+ (error & 0x30), /* was there an error? */
-+ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free);
-+ }
-+ }
-+ }
-+
-+ if (unlikely(error))
-+ handle_tx_error(adev, error, finger);
-+
-+ if (IS_ACX111(adev))
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n",
-+ finger, ack_failures, rts_failures, rts_ok, r111);
-+ else
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n",
-+ finger, ack_failures, rts_failures, rts_ok, r100);
-+
-+ /* update pointer for descr to be cleaned next */
-+ finger = (finger + 1) % TX_CNT;
-+ }
-+
-+ /* remember last position */
-+ adev->tx_tail = finger;
-+/* end: */
-+ FN_EXIT1(num_cleaned);
-+ return num_cleaned;
-+}
-+
-+/* clean *all* Tx descriptors, and regardless of their previous state.
-+ * Used for brute-force reset handling. */
-+void
-+acxpci_l_clean_txdesc_emergency(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc = get_txdesc(adev, i);
-+
-+ /* free it */
-+ txdesc->ack_failures = 0;
-+ txdesc->rts_failures = 0;
-+ txdesc->rts_ok = 0;
-+ txdesc->error = 0;
-+ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
-+ }
-+
-+ adev->tx_free = TX_CNT;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_create_tx_host_desc_queue
-+*/
-+
-+static void*
-+allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg)
-+{
-+ void *ptr;
-+
-+ ptr = dma_alloc_coherent(adev->pdev ? &adev->pdev->dev : NULL,
-+ size, phy, GFP_KERNEL);
-+
-+ if (ptr) {
-+ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n",
-+ msg, (int)size, ptr, (unsigned long long)*phy);
-+ memset(ptr, 0, size);
-+ return ptr;
-+ }
-+ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n",
-+ msg, (int)size);
-+ return NULL;
-+}
-+
-+
-+static int
-+acxpci_s_create_tx_host_desc_queue(acx_device_t *adev)
-+{
-+ txhostdesc_t *hostdesc;
-+ u8 *txbuf;
-+ dma_addr_t hostdesc_phy;
-+ dma_addr_t txbuf_phy;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate TX buffer */
-+ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS;
-+ adev->txbuf_start = allocate(adev, adev->txbuf_area_size,
-+ &adev->txbuf_startphy, "txbuf_start");
-+ if (!adev->txbuf_start)
-+ goto fail;
-+
-+ /* allocate the TX host descriptor queue pool */
-+ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc);
-+ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size,
-+ &adev->txhostdesc_startphy, "txhostdesc_start");
-+ if (!adev->txhostdesc_start)
-+ goto fail;
-+ /* check for proper alignment of TX host descriptor pool */
-+ if ((long) adev->txhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ hostdesc = adev->txhostdesc_start;
-+ hostdesc_phy = adev->txhostdesc_startphy;
-+ txbuf = adev->txbuf_start;
-+ txbuf_phy = adev->txbuf_startphy;
-+
-+#if 0
-+/* Each tx buffer is accessed by hardware via
-+** txdesc -> txhostdesc(s) -> txbuffer(s).
-+** We use only one txhostdesc per txdesc, but it looks like
-+** acx111 is buggy: it accesses second txhostdesc
-+** (via hostdesc.desc_phy_next field) even if
-+** txdesc->length == hostdesc->length and thus
-+** entire packet was placed into first txhostdesc.
-+** Due to this bug acx111 hangs unless second txhostdesc
-+** has le16_to_cpu(hostdesc.length) = 3 (or larger)
-+** Storing NULL into hostdesc.desc_phy_next
-+** doesn't seem to help.
-+**
-+** Update: although it worked on Xterasys XN-2522g
-+** with len=3 trick, WG311v2 is even more bogus, doesn't work.
-+** Keeping this code (#ifdef'ed out) for documentational purposes.
-+*/
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ hostdesc_phy += sizeof(*hostdesc);
-+ if (!(i & 1)) {
-+ hostdesc->data_phy = cpu2acx(txbuf_phy);
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
-+ /* hostdesc->length = ... */
-+ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
-+ hostdesc->pNext = ptr2acx(NULL);
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ hostdesc->data = txbuf;
-+
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ } else {
-+ /* hostdesc->data_phy = ... */
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ /* hostdesc->Ctl_16 = ... */
-+ hostdesc->length = cpu_to_le16(3); /* bug workaround */
-+ /* hostdesc->desc_phy_next = ... */
-+ /* hostdesc->pNext = ... */
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ /* hostdesc->data = ... */
-+ }
-+ hostdesc++;
-+ }
-+#endif
-+/* We initialize two hostdescs so that they point to adjacent
-+** memory areas. Thus txbuf is really just a contiguous memory area */
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ hostdesc_phy += sizeof(*hostdesc);
-+
-+ hostdesc->data_phy = cpu2acx(txbuf_phy);
-+ /* done by memset(0): hostdesc->data_offset = 0; */
-+ /* hostdesc->reserved = ... */
-+ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
-+ /* hostdesc->length = ... */
-+ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
-+ /* done by memset(0): hostdesc->pNext = ptr2acx(NULL); */
-+ /* hostdesc->Status = ... */
-+ /* ->data is a non-hardware field: */
-+ hostdesc->data = txbuf;
-+
-+ if (!(i & 1)) {
-+ txbuf += WLAN_HDR_A3_LEN;
-+ txbuf_phy += WLAN_HDR_A3_LEN;
-+ } else {
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
-+ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
-+ }
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+ hostdesc->desc_phy_next = cpu2acx(adev->txhostdesc_startphy);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_tx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_s_create_rx_host_desc_queue
-+*/
-+/* the whole size of a data buffer (header plus data body)
-+ * plus 32 bytes safety offset at the end */
-+#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32)
-+
-+static int
-+acxpci_s_create_rx_host_desc_queue(acx_device_t *adev)
-+{
-+ rxhostdesc_t *hostdesc;
-+ rxbuffer_t *rxbuf;
-+ dma_addr_t hostdesc_phy;
-+ dma_addr_t rxbuf_phy;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate the RX host descriptor queue pool */
-+ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc);
-+ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size,
-+ &adev->rxhostdesc_startphy, "rxhostdesc_start");
-+ if (!adev->rxhostdesc_start)
-+ goto fail;
-+ /* check for proper alignment of RX host descriptor pool */
-+ if ((long) adev->rxhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ /* allocate Rx buffer pool which will be used by the acx
-+ * to store the whole content of the received frames in it */
-+ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE;
-+ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size,
-+ &adev->rxbuf_startphy, "rxbuf_start");
-+ if (!adev->rxbuf_start)
-+ goto fail;
-+
-+ rxbuf = adev->rxbuf_start;
-+ rxbuf_phy = adev->rxbuf_startphy;
-+ hostdesc = adev->rxhostdesc_start;
-+ hostdesc_phy = adev->rxhostdesc_startphy;
-+
-+ /* don't make any popular C programming pointer arithmetic mistakes
-+ * here, otherwise I'll kill you...
-+ * (and don't dare asking me why I'm warning you about that...) */
-+ for (i = 0; i < RX_CNT; i++) {
-+ hostdesc->data = rxbuf;
-+ hostdesc->data_phy = cpu2acx(rxbuf_phy);
-+ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE);
-+ CLEAR_BIT(hostdesc->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
-+ rxbuf++;
-+ rxbuf_phy += sizeof(*rxbuf);
-+ hostdesc_phy += sizeof(*hostdesc);
-+ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+ hostdesc->desc_phy_next = cpu2acx(adev->rxhostdesc_startphy);
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_rx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_s_create_hostdesc_queues
-+*/
-+int
-+acxpci_s_create_hostdesc_queues(acx_device_t *adev)
-+{
-+ int result;
-+ result = acxpci_s_create_tx_host_desc_queue(adev);
-+ if (OK != result) return result;
-+ result = acxpci_s_create_rx_host_desc_queue(adev);
-+ return result;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_create_tx_desc_queue
-+*/
-+static void
-+acxpci_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start)
-+{
-+ txdesc_t *txdesc;
-+ txhostdesc_t *hostdesc;
-+ dma_addr_t hostmemptr;
-+ u32 mem_offs;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ if (IS_ACX100(adev))
-+ adev->txdesc_size = sizeof(*txdesc);
-+ else
-+ /* the acx111 txdesc is 4 bytes larger */
-+ adev->txdesc_size = sizeof(*txdesc) + 4;
-+
-+ adev->txdesc_start = (txdesc_t *) (adev->iobase2 + tx_queue_start);
-+
-+ log(L_DEBUG, "adev->iobase2=%p\n"
-+ "tx_queue_start=%08X\n"
-+ "adev->txdesc_start=%p\n",
-+ adev->iobase2,
-+ tx_queue_start,
-+ adev->txdesc_start);
-+
-+ adev->tx_free = TX_CNT;
-+ /* done by memset: adev->tx_head = 0; */
-+ /* done by memset: adev->tx_tail = 0; */
-+ txdesc = adev->txdesc_start;
-+ mem_offs = tx_queue_start;
-+ hostmemptr = adev->txhostdesc_startphy;
-+ hostdesc = adev->txhostdesc_start;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111 has a preinitialized Tx buffer! */
-+ /* loop over whole send pool */
-+ /* FIXME: do we have to do the hostmemptr stuff here?? */
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc->HostMemPtr = ptr2acx(hostmemptr);
-+ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
-+ /* reserve two (hdr desc and payload desc) */
-+ hostdesc += 2;
-+ hostmemptr += 2 * sizeof(*hostdesc);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ } else {
-+ /* ACX100 Tx buffer needs to be initialized by us */
-+ /* clear whole send pool. sizeof is safe here (we are acx100) */
-+ memset(adev->txdesc_start, 0, TX_CNT * sizeof(*txdesc));
-+
-+ /* loop over whole send pool */
-+ for (i = 0; i < TX_CNT; i++) {
-+ log(L_DEBUG, "configure card tx descriptor: 0x%p, "
-+ "size: 0x%X\n", txdesc, adev->txdesc_size);
-+
-+ /* pointer to hostdesc memory */
-+ txdesc->HostMemPtr = ptr2acx(hostmemptr);
-+ /* initialise ctl */
-+ txdesc->Ctl_8 = ( DESC_CTL_HOSTOWN | DESC_CTL_RECLAIM
-+ | DESC_CTL_AUTODMA | DESC_CTL_FIRSTFRAG);
-+ /* done by memset(0): txdesc->Ctl2_8 = 0; */
-+ /* point to next txdesc */
-+ txdesc->pNextDesc = cpu2acx(mem_offs + adev->txdesc_size);
-+ /* reserve two (hdr desc and payload desc) */
-+ hostdesc += 2;
-+ hostmemptr += 2 * sizeof(*hostdesc);
-+ /* go to the next one */
-+ mem_offs += adev->txdesc_size;
-+ /* ++ is safe here (we are acx100) */
-+ txdesc++;
-+ }
-+ /* go back to the last one */
-+ txdesc--;
-+ /* and point to the first making it a ring buffer */
-+ txdesc->pNextDesc = cpu2acx(tx_queue_start);
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_create_rx_desc_queue
-+*/
-+static void
-+acxpci_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start)
-+{
-+ rxdesc_t *rxdesc;
-+ u32 mem_offs;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* done by memset: adev->rx_tail = 0; */
-+
-+ /* ACX111 doesn't need any further config: preconfigures itself.
-+ * Simply print ring buffer for debugging */
-+ if (IS_ACX111(adev)) {
-+ /* rxdesc_start already set here */
-+
-+ adev->rxdesc_start = (rxdesc_t *) ((u8 *)adev->iobase2 + rx_queue_start);
-+
-+ rxdesc = adev->rxdesc_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc);
-+ rxdesc = adev->rxdesc_start = (rxdesc_t *)
-+ (adev->iobase2 + acx2cpu(rxdesc->pNextDesc));
-+ }
-+ } else {
-+ /* we didn't pre-calculate rxdesc_start in case of ACX100 */
-+ /* rxdesc_start should be right AFTER Tx pool */
-+ adev->rxdesc_start = (rxdesc_t *)
-+ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t)));
-+ /* NB: sizeof(txdesc_t) above is valid because we know
-+ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere!
-+ ** acx111's txdesc is larger! */
-+
-+ memset(adev->rxdesc_start, 0, RX_CNT * sizeof(*rxdesc));
-+
-+ /* loop over whole receive pool */
-+ rxdesc = adev->rxdesc_start;
-+ mem_offs = rx_queue_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc);
-+ rxdesc->Ctl_8 = DESC_CTL_RECLAIM | DESC_CTL_AUTODMA;
-+ /* point to next rxdesc */
-+ rxdesc->pNextDesc = cpu2acx(mem_offs + sizeof(*rxdesc));
-+ /* go to the next one */
-+ mem_offs += sizeof(*rxdesc);
-+ rxdesc++;
-+ }
-+ /* go to the last one */
-+ rxdesc--;
-+
-+ /* and point to the first making it a ring buffer */
-+ rxdesc->pNextDesc = cpu2acx(rx_queue_start);
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_create_desc_queues
-+*/
-+void
-+acxpci_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start)
-+{
-+ acxpci_create_tx_desc_queue(adev, tx_queue_start);
-+ acxpci_create_rx_desc_queue(adev, rx_queue_start);
-+}
-+
-+
-+/***************************************************************
-+** acxpci_s_proc_diag_output
-+*/
-+char*
-+acxpci_s_proc_diag_output(char *p, acx_device_t *adev)
-+{
-+ const char *rtl, *thd, *ttl;
-+ rxhostdesc_t *rxhostdesc;
-+ txdesc_t *txdesc;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ p += sprintf(p, "** Rx buf **\n");
-+ rxhostdesc = adev->rxhostdesc_start;
-+ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
-+ rtl = (i == adev->rx_tail) ? " [tail]" : "";
-+ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)) )
-+ p += sprintf(p, "%02u FULL%s\n", i, rtl);
-+ else
-+ p += sprintf(p, "%02u empty%s\n", i, rtl);
-+ rxhostdesc++;
-+ }
-+ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free,
-+ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running");
-+ txdesc = adev->txdesc_start;
-+ if (txdesc) for (i = 0; i < TX_CNT; i++) {
-+ thd = (i == adev->tx_head) ? " [head]" : "";
-+ ttl = (i == adev->tx_tail) ? " [tail]" : "";
-+ if (txdesc->Ctl_8 & DESC_CTL_ACXDONE)
-+ p += sprintf(p, "%02u free (%02X)%s%s\n", i, txdesc->Ctl_8, thd, ttl);
-+ else
-+ p += sprintf(p, "%02u tx (%02X)%s%s\n", i, txdesc->Ctl_8, thd, ttl);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ p += sprintf(p,
-+ "\n"
-+ "** PCI data **\n"
-+ "txbuf_start %p, txbuf_area_size %u, txbuf_startphy %08llx\n"
-+ "txdesc_size %u, txdesc_start %p\n"
-+ "txhostdesc_start %p, txhostdesc_area_size %u, txhostdesc_startphy %08llx\n"
-+ "rxdesc_start %p\n"
-+ "rxhostdesc_start %p, rxhostdesc_area_size %u, rxhostdesc_startphy %08llx\n"
-+ "rxbuf_start %p, rxbuf_area_size %u, rxbuf_startphy %08llx\n",
-+ adev->txbuf_start, adev->txbuf_area_size,
-+ (unsigned long long)adev->txbuf_startphy,
-+ adev->txdesc_size, adev->txdesc_start,
-+ adev->txhostdesc_start, adev->txhostdesc_area_size,
-+ (unsigned long long)adev->txhostdesc_startphy,
-+ adev->rxdesc_start,
-+ adev->rxhostdesc_start, adev->rxhostdesc_area_size,
-+ (unsigned long long)adev->rxhostdesc_startphy,
-+ adev->rxbuf_start, adev->rxbuf_area_size,
-+ (unsigned long long)adev->rxbuf_startphy);
-+
-+ FN_EXIT0;
-+ return p;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxpci_proc_eeprom_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < 0x400; i++) {
-+ acxpci_read_eeprom_byte(adev, i, p++);
-+ }
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void
-+acxpci_set_interrupt_mask(acx_device_t *adev)
-+{
-+ if (IS_ACX111(adev)) {
-+ adev->irq_mask = (u16) ~(0
-+ /* | HOST_INT_RX_DATA */
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ | HOST_INT_RX_COMPLETE
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ | HOST_INT_IV_ICV_FAILURE
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ /* | HOST_INT_OVERFLOW */
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ | HOST_INT_FCS_THRESHOLD
-+ /* | HOST_INT_UNKNOWN */
-+ );
-+ /* Or else acx100 won't signal cmd completion, right? */
-+ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */
-+ } else {
-+ adev->irq_mask = (u16) ~(0
-+ /* | HOST_INT_RX_DATA */
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ | HOST_INT_RX_COMPLETE
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ /* | HOST_INT_IV_ICV_FAILURE */
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ /* | HOST_INT_OVERFLOW */
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ /* | HOST_INT_FCS_THRESHOLD */
-+ /* | HOST_INT_UNKNOWN */
-+ );
-+ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */
-+ }
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100pci_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ /* since it can be assumed that at least the Maxim radio has a
-+ * maximum power output of 20dBm and since it also can be
-+ * assumed that these values drive the DAC responsible for
-+ * setting the linear Tx level, I'd guess that these values
-+ * should be the corresponding linear values for a dBm value,
-+ * in other words: calculate the values from that formula:
-+ * Y [dBm] = 10 * log (X [mW])
-+ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm)
-+ * and you're done...
-+ * Hopefully that's ok, but you never know if we're actually
-+ * right... (especially since Windows XP doesn't seem to show
-+ * actual Tx dBm values :-P) */
-+
-+ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the
-+ * values are EXACTLY mW!!! Not sure about RFMD and others,
-+ * though... */
-+ static const u8 dbm2val_maxim[21] = {
-+ 63, 63, 63, 62,
-+ 61, 61, 60, 60,
-+ 59, 58, 57, 55,
-+ 53, 50, 47, 43,
-+ 38, 31, 23, 13,
-+ 0
-+ };
-+ static const u8 dbm2val_rfmd[21] = {
-+ 0, 0, 0, 1,
-+ 2, 2, 3, 3,
-+ 4, 5, 6, 8,
-+ 10, 13, 16, 20,
-+ 25, 32, 41, 50,
-+ 63
-+ };
-+ const u8 *table;
-+
-+ switch (adev->radio_type) {
-+ case RADIO_MAXIM_0D:
-+ table = &dbm2val_maxim[0];
-+ break;
-+ case RADIO_RFMD_11:
-+ case RADIO_RALINK_15:
-+ table = &dbm2val_rfmd[0];
-+ break;
-+ default:
-+ printk("%s: unknown/unsupported radio type, "
-+ "cannot modify tx power level yet!\n",
-+ adev->ndev->name);
-+ return NOT_OK;
-+ }
-+ printk("%s: changing radio power level to %u dBm (%u)\n",
-+ adev->ndev->name, level_dbm, table[level_dbm]);
-+ acxpci_s_write_phy_reg(adev, 0x11, table[level_dbm]);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** Data for init_module/cleanup_module
-+*/
-+static const struct pci_device_id
-+acxpci_id_tbl[] __devinitdata = {
-+ {
-+ .vendor = PCI_VENDOR_ID_TI,
-+ .device = PCI_DEVICE_ID_TI_TNETW1100A,
-+ .subvendor = PCI_ANY_ID,
-+ .subdevice = PCI_ANY_ID,
-+ .driver_data = CHIPTYPE_ACX100,
-+ },
-+ {
-+ .vendor = PCI_VENDOR_ID_TI,
-+ .device = PCI_DEVICE_ID_TI_TNETW1100B,
-+ .subvendor = PCI_ANY_ID,
-+ .subdevice = PCI_ANY_ID,
-+ .driver_data = CHIPTYPE_ACX100,
-+ },
-+ {
-+ .vendor = PCI_VENDOR_ID_TI,
-+ .device = PCI_DEVICE_ID_TI_TNETW1130,
-+ .subvendor = PCI_ANY_ID,
-+ .subdevice = PCI_ANY_ID,
-+ .driver_data = CHIPTYPE_ACX111,
-+ },
-+ {
-+ .vendor = 0,
-+ .device = 0,
-+ .subvendor = 0,
-+ .subdevice = 0,
-+ .driver_data = 0,
-+ }
-+};
-+
-+MODULE_DEVICE_TABLE(pci, acxpci_id_tbl);
-+
-+/* FIXME: checks should be removed once driver is included in the kernel */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11)
-+/* pci_name() got introduced at start of 2.6.x,
-+ * got mandatory (slot_name member removed) in 2.6.11-bk1 */
-+#define pci_name(x) x->slot_name
-+#endif
-+
-+static struct pci_driver
-+acxpci_drv_id = {
-+ .name = "acx_pci",
-+ .id_table = acxpci_id_tbl,
-+ .probe = acxpci_e_probe,
-+ .remove = __devexit_p(acxpci_e_remove),
-+#ifdef CONFIG_PM
-+ .suspend = acxpci_e_suspend,
-+ .resume = acxpci_e_resume
-+#endif /* CONFIG_PM */
-+};
-+
-+
-+/***********************************************************************
-+** acxpci_e_init_module
-+**
-+** Module initialization routine, called once at module load time
-+*/
-+int __init
-+acxpci_e_init_module(void)
-+{
-+ int res;
-+
-+ FN_ENTER;
-+
-+#if (ACX_IO_WIDTH==32)
-+ printk("acx: compiled to use 32bit I/O access. "
-+ "I/O timing issues might occur, such as "
-+ "non-working firmware upload. Report them\n");
-+#else
-+ printk("acx: compiled to use 16bit I/O access only "
-+ "(compatibility mode)\n");
-+#endif
-+
-+#ifdef __LITTLE_ENDIAN
-+#define ENDIANNESS_STRING "running on a little-endian CPU\n"
-+#else
-+#define ENDIANNESS_STRING "running on a BIG-ENDIAN CPU\n"
-+#endif
-+ log(L_INIT,
-+ ENDIANNESS_STRING
-+ "PCI module " ACX_RELEASE " initialized, "
-+ "waiting for cards to probe...\n"
-+ );
-+
-+ res = pci_register_driver(&acxpci_drv_id);
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_e_cleanup_module
-+**
-+** Called at module unload time. This is our last chance to
-+** clean up after ourselves.
-+*/
-+void __exit
-+acxpci_e_cleanup_module(void)
-+{
-+ FN_ENTER;
-+
-+ pci_unregister_driver(&acxpci_drv_id);
-+
-+ FN_EXIT0;
-+}
-Index: linux-2.6.22/drivers/net/wireless/acx/rx3000_acx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/rx3000_acx.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,110 @@
-+/*
-+ * WLAN (TI TNETW1100B) support in the HP iPAQ RX3000
-+ *
-+ * Copyright (c) 2006 SDG Systems, LLC
-+ * Copyright (c) 2006 Roman Moravcik
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * Based on hx4700_acx.c
-+ */
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+#include <linux/dpm.h>
-+#include <linux/leds.h>
-+
-+#include <asm/hardware.h>
-+
-+#include <asm/arch/regs-gpio.h>
-+#include <linux/mfd/asic3_base.h>
-+#include <asm/arch/rx3000.h>
-+#include <asm/arch/rx3000-asic3.h>
-+#include <asm/io.h>
-+
-+#include "acx_hw.h"
-+
-+extern struct platform_device s3c_device_asic3;
-+
-+static int rx3000_wlan_start(void)
-+{
-+ DPM_DEBUG("rx3000_acx: Turning on\n");
-+ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, ASIC3_GPB3);
-+ mdelay(20);
-+ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC13, ASIC3_GPC13);
-+ mdelay(20);
-+ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC11, ASIC3_GPC11);
-+ mdelay(100);
-+ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, ASIC3_GPB3);
-+ mdelay(20);
-+ s3c2410_gpio_cfgpin(S3C2410_GPA15, S3C2410_GPA15_nGCS4);
-+ mdelay(100);
-+ s3c2410_gpio_setpin(S3C2410_GPA11, 0);
-+ mdelay(50);
-+ s3c2410_gpio_setpin(S3C2410_GPA11, 1);
-+ led_trigger_event_shared(rx3000_radio_trig, LED_FULL);
-+ return 0;
-+}
-+
-+static int rx3000_wlan_stop(void)
-+{
-+ DPM_DEBUG("rx3000_acx: Turning off\n");
-+ s3c2410_gpio_setpin(S3C2410_GPA15, 1);
-+ s3c2410_gpio_cfgpin(S3C2410_GPA15, S3C2410_GPA15_OUT);
-+ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, 0);
-+ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC13, 0);
-+ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC11, 0);
-+ led_trigger_event_shared(rx3000_radio_trig, LED_OFF);
-+ return 0;
-+}
-+
-+static struct resource acx_resources[] = {
-+ [0] = {
-+ .start = RX3000_PA_WLAN,
-+ .end = RX3000_PA_WLAN + 0x20,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+ .start = IRQ_EINT16,
-+ .end = IRQ_EINT16,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+static struct acx_hardware_data acx_data = {
-+ .start_hw = rx3000_wlan_start,
-+ .stop_hw = rx3000_wlan_stop,
-+};
-+
-+static struct platform_device acx_device = {
-+ .name = "acx-mem",
-+ .dev = {
-+ .platform_data = &acx_data,
-+ },
-+ .num_resources = ARRAY_SIZE(acx_resources),
-+ .resource = acx_resources,
-+};
-+
-+static int __init rx3000_wlan_init(void)
-+{
-+ printk("rx3000_wlan_init: acx-mem platform_device_register\n");
-+ return platform_device_register(&acx_device);
-+}
-+
-+
-+static void __exit rx3000_wlan_exit(void)
-+{
-+ platform_device_unregister(&acx_device);
-+}
-+
-+module_init(rx3000_wlan_init);
-+module_exit(rx3000_wlan_exit);
-+
-+MODULE_AUTHOR("Todd Blumer <todd@sdgsystems.com>, Roman Moravcik <roman.moravcik@gmail.com>");
-+MODULE_DESCRIPTION("WLAN driver for HP iPAQ RX3000");
-+MODULE_LICENSE("GPL");
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/setrate.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/setrate.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,213 @@
-+/* TODO: stop #including, move into wireless.c
-+ * until then, keep in sync copies in prism54/ and acx/ dirs
-+ * code+data size: less than 1k */
-+
-+enum {
-+ DOT11_RATE_1,
-+ DOT11_RATE_2,
-+ DOT11_RATE_5,
-+ DOT11_RATE_11,
-+ DOT11_RATE_22,
-+ DOT11_RATE_33,
-+ DOT11_RATE_6,
-+ DOT11_RATE_9,
-+ DOT11_RATE_12,
-+ DOT11_RATE_18,
-+ DOT11_RATE_24,
-+ DOT11_RATE_36,
-+ DOT11_RATE_48,
-+ DOT11_RATE_54
-+};
-+enum {
-+ DOT11_MOD_DBPSK,
-+ DOT11_MOD_DQPSK,
-+ DOT11_MOD_CCK,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_CCKOFDM,
-+ DOT11_MOD_PBCC
-+};
-+static const u8 ratelist[] = { 1,2,5,11,22,33,6,9,12,18,24,36,48,54 };
-+static const u8 dot11ratebyte[] = { 1*2,2*2,11,11*2,22*2,33*2,6*2,9*2,12*2,18*2,24*2,36*2,48*2,54*2 };
-+static const u8 default_modulation[] = {
-+ DOT11_MOD_DBPSK,
-+ DOT11_MOD_DQPSK,
-+ DOT11_MOD_CCK,
-+ DOT11_MOD_CCK,
-+ DOT11_MOD_PBCC,
-+ DOT11_MOD_PBCC,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM
-+};
-+
-+static /* TODO: remove 'static' when moved to wireless.c */
-+int
-+rate_mbit2enum(int n) {
-+ int i=0;
-+ while(i<sizeof(ratelist)) {
-+ if(n==ratelist[i]) return i;
-+ i++;
-+ }
-+ return -EINVAL;
-+}
-+
-+static int
-+get_modulation(int r_enum, char suffix) {
-+ if(suffix==',' || suffix==' ' || suffix=='\0') {
-+ /* could shorten default_mod by 8 bytes:
-+ if(r_enum>=DOT11_RATE_6) return DOT11_MOD_OFDM; */
-+ return default_modulation[r_enum];
-+ }
-+ if(suffix=='c') {
-+ if(r_enum<DOT11_RATE_5 || r_enum>DOT11_RATE_11) return -EINVAL;
-+ return DOT11_MOD_CCK;
-+ }
-+ if(suffix=='p') {
-+ if(r_enum<DOT11_RATE_5 || r_enum>DOT11_RATE_33) return -EINVAL;
-+ return DOT11_MOD_PBCC;
-+ }
-+ if(suffix=='o') {
-+ if(r_enum<DOT11_RATE_6) return -EINVAL;
-+ return DOT11_MOD_OFDM;
-+ }
-+ if(suffix=='d') {
-+ if(r_enum<DOT11_RATE_6) return -EINVAL;
-+ return DOT11_MOD_CCKOFDM;
-+ }
-+ return -EINVAL;
-+}
-+
-+#ifdef UNUSED
-+static int
-+fill_ratevector(const char **pstr, u8 *vector, int size,
-+ int (*supported)(int mbit, int mod, void *opaque), void *opaque, int or_mask)
-+{
-+ unsigned long rate_mbit;
-+ int rate_enum,mod;
-+ const char *str = *pstr;
-+ char c;
-+
-+ do {
-+ rate_mbit = simple_strtoul(str, (char**)&str, 10);
-+ if(rate_mbit>INT_MAX) return -EINVAL;
-+
-+ rate_enum = rate_mbit2enum(rate_mbit);
-+ if(rate_enum<0) return rate_enum;
-+
-+ c = *str;
-+ mod = get_modulation(rate_enum, c);
-+ if(mod<0) return mod;
-+
-+ if(c>='a' && c<='z') c = *++str;
-+ if(c!=',' && c!=' ' && c!='\0') return -EINVAL;
-+
-+ if(supported) {
-+ int r = supported(rate_mbit, mod, opaque);
-+ if(r) return r;
-+ }
-+
-+ *vector++ = dot11ratebyte[rate_enum] | or_mask;
-+
-+ size--;
-+ str++;
-+ } while(size>0 && c==',');
-+
-+ if(size<1) return -E2BIG;
-+ *vector=0; /* TODO: sort, remove dups? */
-+
-+ *pstr = str-1;
-+ return 0;
-+}
-+
-+static /* TODO: remove 'static' when moved to wireless.c */
-+int
-+fill_ratevectors(const char *str, u8 *brate, u8 *orate, int size,
-+ int (*supported)(int mbit, int mod, void *opaque), void *opaque)
-+{
-+ int r;
-+
-+ r = fill_ratevector(&str, brate, size, supported, opaque, 0x80);
-+ if(r) return r;
-+
-+ orate[0] = 0;
-+ if(*str==' ') {
-+ str++;
-+ r = fill_ratevector(&str, orate, size, supported, opaque, 0);
-+ if(r) return r;
-+ /* TODO: sanitize, e.g. remove/error on rates already in basic rate set? */
-+ }
-+ if(*str)
-+ return -EINVAL;
-+
-+ return 0;
-+}
-+#endif
-+
-+/* TODO: use u64 masks? */
-+
-+static int
-+fill_ratemask(const char **pstr, u32* mask,
-+ int (*supported)(int mbit, int mod,void *opaque),
-+ u32 (*gen_mask)(int mbit, int mod,void *opaque),
-+ void *opaque)
-+{
-+ unsigned long rate_mbit;
-+ int rate_enum,mod;
-+ u32 m = 0;
-+ const char *str = *pstr;
-+ char c;
-+
-+ do {
-+ rate_mbit = simple_strtoul(str, (char**)&str, 10);
-+ if(rate_mbit>INT_MAX) return -EINVAL;
-+
-+ rate_enum = rate_mbit2enum(rate_mbit);
-+ if(rate_enum<0) return rate_enum;
-+
-+ c = *str;
-+ mod = get_modulation(rate_enum, c);
-+ if(mod<0) return mod;
-+
-+ if(c>='a' && c<='z') c = *++str;
-+ if(c!=',' && c!=' ' && c!='\0') return -EINVAL;
-+
-+ if(supported) {
-+ int r = supported(rate_mbit, mod, opaque);
-+ if(r) return r;
-+ }
-+
-+ m |= gen_mask(rate_mbit, mod, opaque);
-+ str++;
-+ } while(c==',');
-+
-+ *pstr = str-1;
-+ *mask |= m;
-+ return 0;
-+}
-+
-+static /* TODO: remove 'static' when moved to wireless.c */
-+int
-+fill_ratemasks(const char *str, u32 *bmask, u32 *omask,
-+ int (*supported)(int mbit, int mod,void *opaque),
-+ u32 (*gen_mask)(int mbit, int mod,void *opaque),
-+ void *opaque)
-+{
-+ int r;
-+
-+ r = fill_ratemask(&str, bmask, supported, gen_mask, opaque);
-+ if(r) return r;
-+
-+ if(*str==' ') {
-+ str++;
-+ r = fill_ratemask(&str, omask, supported, gen_mask, opaque);
-+ if(r) return r;
-+ }
-+ if(*str)
-+ return -EINVAL;
-+ return 0;
-+}
-Index: linux-2.6.22/drivers/net/wireless/acx/usb.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/usb.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,1922 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** USB support for TI ACX100 based devices. Many parts are taken from
-+** the PCI driver.
-+**
-+** Authors:
-+** Martin Wawro <martin.wawro AT uni-dortmund.de>
-+** Andreas Mohr <andi AT lisas.de>
-+**
-+** LOCKING
-+** callback functions called by USB core are running in interrupt context
-+** and thus have names with _i_.
-+*/
-+#define ACX_USB 1
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+#include <linux/types.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/kernel.h>
-+#include <linux/usb.h>
-+#include <linux/netdevice.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/etherdevice.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+#include <linux/vmalloc.h>
-+
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+*/
-+/* number of endpoints of an interface */
-+#define NUM_EP(intf) (intf)->altsetting[0].desc.bNumEndpoints
-+#define EP(intf, nr) (intf)->altsetting[0].endpoint[(nr)].desc
-+#define GET_DEV(udev) usb_get_dev((udev))
-+#define PUT_DEV(udev) usb_put_dev((udev))
-+#define SET_NETDEV_OWNER(ndev, owner) /* not needed anymore ??? */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
-+/* removed in 2.6.14. We will use fake value for now */
-+#define URB_ASYNC_UNLINK 0
-+#endif
-+
-+
-+/***********************************************************************
-+*/
-+/* ACX100 (TNETW1100) USB device: D-Link DWL-120+ */
-+#define ACX100_VENDOR_ID 0x2001
-+#define ACX100_PRODUCT_ID_UNBOOTED 0x3B01
-+#define ACX100_PRODUCT_ID_BOOTED 0x3B00
-+
-+/* TNETW1450 USB devices */
-+#define VENDOR_ID_DLINK 0x07b8 /* D-Link Corp. */
-+#define PRODUCT_ID_WUG2400 0xb21a /* AboCom WUG2400 or SafeCom SWLUT-54125 */
-+#define VENDOR_ID_AVM_GMBH 0x057c
-+#define PRODUCT_ID_AVM_WLAN_USB 0x5601
-+#define PRODUCT_ID_AVM_WLAN_USB_si 0x6201 /* "self install" named Version: driver kills kernel on inbound scans from fritz box ??? */
-+#define VENDOR_ID_ZCOM 0x0cde
-+#define PRODUCT_ID_ZCOM_XG750 0x0017 /* not tested yet */
-+#define VENDOR_ID_TI 0x0451
-+#define PRODUCT_ID_TI_UNKNOWN 0x60c5 /* not tested yet */
-+
-+#define ACX_USB_CTRL_TIMEOUT 5500 /* steps in ms */
-+
-+/* Buffer size for fw upload, same for both ACX100 USB and TNETW1450 */
-+#define USB_RWMEM_MAXLEN 2048
-+
-+/* The number of bulk URBs to use */
-+#define ACX_TX_URB_CNT 8
-+#define ACX_RX_URB_CNT 2
-+
-+/* Should be sent to the bulkout endpoint */
-+#define ACX_USB_REQ_UPLOAD_FW 0x10
-+#define ACX_USB_REQ_ACK_CS 0x11
-+#define ACX_USB_REQ_CMD 0x12
-+
-+/***********************************************************************
-+** Prototypes
-+*/
-+static int acxusb_e_probe(struct usb_interface *, const struct usb_device_id *);
-+static void acxusb_e_disconnect(struct usb_interface *);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+static void acxusb_i_complete_tx(struct urb *);
-+static void acxusb_i_complete_rx(struct urb *);
-+#else
-+static void acxusb_i_complete_tx(struct urb *, struct pt_regs *);
-+static void acxusb_i_complete_rx(struct urb *, struct pt_regs *);
-+#endif
-+static int acxusb_e_open(struct net_device *);
-+static int acxusb_e_close(struct net_device *);
-+static void acxusb_i_set_rx_mode(struct net_device *);
-+static int acxusb_boot(struct usb_device *, int is_tnetw1450, int *radio_type);
-+
-+static void acxusb_l_poll_rx(acx_device_t *adev, usb_rx_t* rx);
-+
-+static void acxusb_i_tx_timeout(struct net_device *);
-+
-+/* static void dump_device(struct usb_device *); */
-+/* static void dump_device_descriptor(struct usb_device_descriptor *); */
-+/* static void dump_config_descriptor(struct usb_config_descriptor *); */
-+
-+/***********************************************************************
-+** Module Data
-+*/
-+#define TXBUFSIZE sizeof(usb_txbuffer_t)
-+/*
-+ * Now, this is just plain lying, but the device insists in giving us
-+ * huge packets. We supply extra space after rxbuffer. Need to understand
-+ * it better...
-+ */
-+#define RXBUFSIZE (sizeof(rxbuffer_t) + \
-+ (sizeof(usb_rx_t) - sizeof(struct usb_rx_plain)))
-+
-+static const struct usb_device_id
-+acxusb_ids[] = {
-+ { USB_DEVICE(ACX100_VENDOR_ID, ACX100_PRODUCT_ID_BOOTED) },
-+ { USB_DEVICE(ACX100_VENDOR_ID, ACX100_PRODUCT_ID_UNBOOTED) },
-+ { USB_DEVICE(VENDOR_ID_DLINK, PRODUCT_ID_WUG2400) },
-+ { USB_DEVICE(VENDOR_ID_AVM_GMBH, PRODUCT_ID_AVM_WLAN_USB) },
-+ { USB_DEVICE(VENDOR_ID_AVM_GMBH, PRODUCT_ID_AVM_WLAN_USB_si) },
-+ { USB_DEVICE(VENDOR_ID_ZCOM, PRODUCT_ID_ZCOM_XG750) },
-+ { USB_DEVICE(VENDOR_ID_TI, PRODUCT_ID_TI_UNKNOWN) },
-+ {}
-+};
-+
-+MODULE_DEVICE_TABLE(usb, acxusb_ids);
-+
-+/* USB driver data structure as required by the kernel's USB core */
-+static struct usb_driver
-+acxusb_driver = {
-+ .name = "acx_usb",
-+ .probe = acxusb_e_probe,
-+ .disconnect = acxusb_e_disconnect,
-+ .id_table = acxusb_ids
-+};
-+
-+
-+/***********************************************************************
-+** USB helper
-+**
-+** ldd3 ch13 says:
-+** When the function is usb_kill_urb, the urb lifecycle is stopped. This
-+** function is usually used when the device is disconnected from the system,
-+** in the disconnect callback. For some drivers, the usb_unlink_urb function
-+** should be used to tell the USB core to stop an urb. This function does not
-+** wait for the urb to be fully stopped before returning to the caller.
-+** This is useful for stoppingthe urb while in an interrupt handler or when
-+** a spinlock is held, as waiting for a urb to fully stop requires the ability
-+** for the USB core to put the calling process to sleep. This function requires
-+** that the URB_ASYNC_UNLINK flag value be set in the urb that is being asked
-+** to be stopped in order to work properly.
-+**
-+** (URB_ASYNC_UNLINK is obsolete, usb_unlink_urb will always be
-+** asynchronous while usb_kill_urb is synchronous and should be called
-+** directly (drivers/usb/core/urb.c))
-+**
-+** In light of this, timeout is just for paranoid reasons...
-+*
-+* Actually, it's useful for debugging. If we reach timeout, we're doing
-+* something wrong with the urbs.
-+*/
-+static void
-+acxusb_unlink_urb(struct urb* urb)
-+{
-+ if (!urb)
-+ return;
-+
-+ if (urb->status == -EINPROGRESS) {
-+ int timeout = 10;
-+
-+ usb_unlink_urb(urb);
-+ while (--timeout && urb->status == -EINPROGRESS) {
-+ mdelay(1);
-+ }
-+ if (!timeout) {
-+ printk("acx_usb: urb unlink timeout!\n");
-+ }
-+ }
-+}
-+
-+
-+/***********************************************************************
-+** EEPROM and PHY read/write helpers
-+*/
-+/***********************************************************************
-+** acxusb_s_read_phy_reg
-+*/
-+int
-+acxusb_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
-+{
-+ /* mem_read_write_t mem; */
-+
-+ FN_ENTER;
-+
-+ printk("%s doesn't seem to work yet, disabled.\n", __func__);
-+
-+ /*
-+ mem.addr = cpu_to_le16(reg);
-+ mem.type = cpu_to_le16(0x82);
-+ mem.len = cpu_to_le32(4);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_MEM_READ, &mem, sizeof(mem));
-+ *charbuf = mem.data;
-+ log(L_DEBUG, "read radio PHY[0x%04X]=0x%02X\n", reg, *charbuf);
-+ */
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxusb_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
-+{
-+ mem_read_write_t mem;
-+
-+ FN_ENTER;
-+
-+ mem.addr = cpu_to_le16(reg);
-+ mem.type = cpu_to_le16(0x82);
-+ mem.len = cpu_to_le32(4);
-+ mem.data = value;
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_MEM_WRITE, &mem, sizeof(mem));
-+ log(L_DEBUG, "write radio PHY[0x%04X]=0x%02X\n", reg, value);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_s_issue_cmd_timeo
-+** Excecutes a command in the command mailbox
-+**
-+** buffer = a pointer to the data.
-+** The data must not include 4 byte command header
-+*/
-+
-+/* TODO: ideally we shall always know how much we need
-+** and this shall be 0 */
-+#define BOGUS_SAFETY_PADDING 0x40
-+
-+#undef FUNC
-+#define FUNC "issue_cmd"
-+
-+#if !ACX_DEBUG
-+int
-+acxusb_s_issue_cmd_timeo(
-+ acx_device_t *adev,
-+ unsigned cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned timeout)
-+{
-+#else
-+int
-+acxusb_s_issue_cmd_timeo_debug(
-+ acx_device_t *adev,
-+ unsigned cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned timeout,
-+ const char* cmdstr)
-+{
-+#endif
-+ /* USB ignores timeout param */
-+
-+ struct usb_device *usbdev;
-+ struct {
-+ u16 cmd;
-+ u16 status;
-+ u8 data[1];
-+ } ACX_PACKED *loc;
-+ const char *devname;
-+ int acklen, blocklen, inpipe, outpipe;
-+ int cmd_status;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ devname = adev->ndev->name;
-+ /* no "wlan%%d: ..." please */
-+ if (!devname || !devname[0] || devname[4]=='%')
-+ devname = "acx";
-+
-+ log(L_CTL, FUNC"(cmd:%s,buflen:%u,type:0x%04X)\n",
-+ cmdstr, buflen,
-+ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
-+
-+ loc = kmalloc(buflen + 4 + BOGUS_SAFETY_PADDING, GFP_KERNEL);
-+ if (!loc) {
-+ printk("%s: "FUNC"(): no memory for data buffer\n", devname);
-+ goto bad;
-+ }
-+
-+ /* get context from acx_device */
-+ usbdev = adev->usbdev;
-+
-+ /* check which kind of command was issued */
-+ loc->cmd = cpu_to_le16(cmd);
-+ loc->status = 0;
-+
-+/* NB: buflen == frmlen + 4
-+**
-+** Interrogate: write 8 bytes: (cmd,status,rid,frmlen), then
-+** read (cmd,status,rid,frmlen,data[frmlen]) back
-+**
-+** Configure: write (cmd,status,rid,frmlen,data[frmlen])
-+**
-+** Possibly bogus special handling of ACX1xx_IE_SCAN_STATUS removed
-+*/
-+
-+ /* now write the parameters of the command if needed */
-+ acklen = buflen + 4 + BOGUS_SAFETY_PADDING;
-+ blocklen = buflen;
-+ if (buffer && buflen) {
-+ /* if it's an INTERROGATE command, just pass the length
-+ * of parameters to read, as data */
-+ if (cmd == ACX1xx_CMD_INTERROGATE) {
-+ blocklen = 4;
-+ acklen = buflen + 4;
-+ }
-+ memcpy(loc->data, buffer, blocklen);
-+ }
-+ blocklen += 4; /* account for cmd,status */
-+
-+ /* obtain the I/O pipes */
-+ outpipe = usb_sndctrlpipe(usbdev, 0);
-+ inpipe = usb_rcvctrlpipe(usbdev, 0);
-+ log(L_CTL, "ctrl inpipe=0x%X outpipe=0x%X\n", inpipe, outpipe);
-+ log(L_CTL, "sending USB control msg (out) (blocklen=%d)\n", blocklen);
-+ if (acx_debug & L_DATA)
-+ acx_dump_bytes(loc, blocklen);
-+
-+ result = usb_control_msg(usbdev, outpipe,
-+ ACX_USB_REQ_CMD, /* request */
-+ USB_TYPE_VENDOR|USB_DIR_OUT, /* requesttype */
-+ 0, /* value */
-+ 0, /* index */
-+ loc, /* dataptr */
-+ blocklen, /* size */
-+ ACX_USB_CTRL_TIMEOUT /* timeout in ms */
-+ );
-+
-+ if (result == -ENODEV) {
-+ log(L_CTL, "no device present (unplug?)\n");
-+ goto good;
-+ }
-+
-+ log(L_CTL, "wrote %d bytes\n", result);
-+ if (result < 0) {
-+ goto bad;
-+ }
-+
-+ /* check for device acknowledge */
-+ log(L_CTL, "sending USB control msg (in) (acklen=%d)\n", acklen);
-+ loc->status = 0; /* delete old status flag -> set to IDLE */
-+ /* shall we zero out the rest? */
-+ result = usb_control_msg(usbdev, inpipe,
-+ ACX_USB_REQ_CMD, /* request */
-+ USB_TYPE_VENDOR|USB_DIR_IN, /* requesttype */
-+ 0, /* value */
-+ 0, /* index */
-+ loc, /* dataptr */
-+ acklen, /* size */
-+ ACX_USB_CTRL_TIMEOUT /* timeout in ms */
-+ );
-+ if (result < 0) {
-+ printk("%s: "FUNC"(): USB read error %d\n", devname, result);
-+ goto bad;
-+ }
-+ if (acx_debug & L_CTL) {
-+ printk("read %d bytes: ", result);
-+ acx_dump_bytes(loc, result);
-+ }
-+
-+/*
-+ check for result==buflen+4? Was seen:
-+
-+interrogate(type:ACX100_IE_DOT11_ED_THRESHOLD,len:4)
-+issue_cmd(cmd:ACX1xx_CMD_INTERROGATE,buflen:8,type:4111)
-+ctrl inpipe=0x80000280 outpipe=0x80000200
-+sending USB control msg (out) (blocklen=8)
-+01 00 00 00 0F 10 04 00
-+wrote 8 bytes
-+sending USB control msg (in) (acklen=12) sizeof(loc->data
-+read 4 bytes <==== MUST BE 12!!
-+*/
-+
-+ cmd_status = le16_to_cpu(loc->status);
-+ if (cmd_status != 1) {
-+ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s)\n",
-+ devname, cmd_status, acx_cmd_status_str(cmd_status));
-+ /* TODO: goto bad; ? */
-+ }
-+ if ((cmd == ACX1xx_CMD_INTERROGATE) && buffer && buflen) {
-+ memcpy(buffer, loc->data, buflen);
-+ log(L_CTL, "response frame: cmd=0x%04X status=%d\n",
-+ le16_to_cpu(loc->cmd),
-+ cmd_status);
-+ }
-+good:
-+ kfree(loc);
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ /* Give enough info so that callers can avoid
-+ ** printing their own diagnostic messages */
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
-+#else
-+ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
-+#endif
-+ dump_stack();
-+ kfree(loc);
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_boot()
-+** Inputs:
-+** usbdev -> Pointer to kernel's usb_device structure
-+**
-+** Returns:
-+** (int) Errorcode or 0 on success
-+**
-+** This function triggers the loading of the firmware image from harddisk
-+** and then uploads the firmware to the USB device. After uploading the
-+** firmware and transmitting the checksum, the device resets and appears
-+** as a new device on the USB bus (the device we can finally deal with)
-+*/
-+static inline int
-+acxusb_fw_needs_padding(firmware_image_t *fw_image, unsigned int usb_maxlen)
-+{
-+ unsigned int num_xfers = ((fw_image->size - 1) / usb_maxlen) + 1;
-+
-+ return ((num_xfers % 2) == 0);
-+}
-+
-+static int
-+acxusb_boot(struct usb_device *usbdev, int is_tnetw1450, int *radio_type)
-+{
-+ char filename[sizeof("tiacx1NNusbcRR")];
-+
-+ firmware_image_t *fw_image = NULL;
-+ char *usbbuf;
-+ unsigned int offset;
-+ unsigned int blk_len, inpipe, outpipe;
-+ u32 num_processed;
-+ u32 img_checksum, sum;
-+ u32 file_size;
-+ int result = -EIO;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* dump_device(usbdev); */
-+
-+ usbbuf = kmalloc(USB_RWMEM_MAXLEN, GFP_KERNEL);
-+ if (!usbbuf) {
-+ printk(KERN_ERR "acx: no memory for USB transfer buffer (%d bytes)\n", USB_RWMEM_MAXLEN);
-+ result = -ENOMEM;
-+ goto end;
-+ }
-+ if (is_tnetw1450) {
-+ /* Obtain the I/O pipes */
-+ outpipe = usb_sndbulkpipe(usbdev, 1);
-+ inpipe = usb_rcvbulkpipe(usbdev, 2);
-+
-+ printk(KERN_DEBUG "wait for device ready\n");
-+ for (i = 0; i <= 2; i++) {
-+ result = usb_bulk_msg(usbdev, inpipe,
-+ usbbuf,
-+ USB_RWMEM_MAXLEN,
-+ &num_processed,
-+ 2000
-+ );
-+
-+ if ((*(u32 *)&usbbuf[4] == 0x40000001)
-+ && (*(u16 *)&usbbuf[2] == 0x1)
-+ && ((*(u16 *)usbbuf & 0x3fff) == 0)
-+ && ((*(u16 *)usbbuf & 0xc000) == 0xc000))
-+ break;
-+ msleep(10);
-+ }
-+ if (i == 2)
-+ goto fw_end;
-+
-+ *radio_type = usbbuf[8];
-+ } else {
-+ /* Obtain the I/O pipes */
-+ outpipe = usb_sndctrlpipe(usbdev, 0);
-+ inpipe = usb_rcvctrlpipe(usbdev, 0);
-+
-+ /* FIXME: shouldn't be hardcoded */
-+ *radio_type = RADIO_MAXIM_0D;
-+ }
-+
-+ snprintf(filename, sizeof(filename), "tiacx1%02dusbc%02X",
-+ is_tnetw1450 * 11, *radio_type);
-+
-+ fw_image = acx_s_read_fw(&usbdev->dev, filename, &file_size);
-+ if (!fw_image) {
-+ result = -EIO;
-+ goto end;
-+ }
-+ log(L_INIT, "firmware size: %d bytes\n", file_size);
-+
-+ img_checksum = le32_to_cpu(fw_image->chksum);
-+
-+ if (is_tnetw1450) {
-+ u8 cmdbuf[20];
-+ const u8 *p;
-+ u8 need_padding;
-+ u32 tmplen, val;
-+
-+ memset(cmdbuf, 0, 16);
-+
-+ need_padding = acxusb_fw_needs_padding(fw_image, USB_RWMEM_MAXLEN);
-+ tmplen = need_padding ? file_size-4 : file_size-8;
-+ *(u16 *)&cmdbuf[0] = 0xc000;
-+ *(u16 *)&cmdbuf[2] = 0x000b;
-+ *(u32 *)&cmdbuf[4] = tmplen;
-+ *(u32 *)&cmdbuf[8] = file_size-8;
-+ *(u32 *)&cmdbuf[12] = img_checksum;
-+
-+ result = usb_bulk_msg(usbdev, outpipe, cmdbuf, 16, &num_processed, HZ);
-+ if (result < 0)
-+ goto fw_end;
-+
-+ p = (const u8 *)&fw_image->size;
-+
-+ /* first calculate checksum for image size part */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+ /* now continue checksum for firmware data part */
-+ tmplen = le32_to_cpu(fw_image->size);
-+ for (i = 0; i < tmplen /* image size */; i++) {
-+ sum += *p++;
-+ }
-+
-+ if (sum != le32_to_cpu(fw_image->chksum)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "checksums don't match! "
-+ "(0x%08x vs. 0x%08x)\n",
-+ sum, fw_image->chksum);
-+ goto fw_end;
-+ }
-+
-+ offset = 8;
-+ while (offset < file_size) {
-+ blk_len = file_size - offset;
-+ if (blk_len > USB_RWMEM_MAXLEN) {
-+ blk_len = USB_RWMEM_MAXLEN;
-+ }
-+
-+ log(L_INIT, "uploading firmware (%d bytes, offset=%d)\n",
-+ blk_len, offset);
-+ memcpy(usbbuf, ((u8 *)fw_image) + offset, blk_len);
-+
-+ p = usbbuf;
-+ for (i = 0; i < blk_len; i += 4) {
-+ *(u32 *)p = be32_to_cpu(*(u32 *)p);
-+ p += 4;
-+ }
-+
-+ result = usb_bulk_msg(usbdev, outpipe, usbbuf, blk_len, &num_processed, HZ);
-+ if ((result < 0) || (num_processed != blk_len))
-+ goto fw_end;
-+ offset += blk_len;
-+ }
-+ if (need_padding) {
-+ printk(KERN_DEBUG "send padding\n");
-+ memset(usbbuf, 0, 4);
-+ result = usb_bulk_msg(usbdev, outpipe, usbbuf, 4, &num_processed, HZ);
-+ if ((result < 0) || (num_processed != 4))
-+ goto fw_end;
-+ }
-+ printk(KERN_DEBUG "read firmware upload result\n");
-+ memset(cmdbuf, 0, 20); /* additional memset */
-+ result = usb_bulk_msg(usbdev, inpipe, cmdbuf, 20, &num_processed, 2000);
-+ if (result < 0)
-+ goto fw_end;
-+ if (*(u32 *)&cmdbuf[4] == 0x40000003)
-+ goto fw_end;
-+ if (*(u32 *)&cmdbuf[4])
-+ goto fw_end;
-+ if (*(u16 *)&cmdbuf[16] != 1)
-+ goto fw_end;
-+
-+ val = *(u32 *)&cmdbuf[0];
-+ if ((val & 0x3fff)
-+ || ((val & 0xc000) != 0xc000))
-+ goto fw_end;
-+
-+ val = *(u32 *)&cmdbuf[8];
-+ if (val & 2) {
-+ result = usb_bulk_msg(usbdev, inpipe, cmdbuf, 20, &num_processed, 2000);
-+ if (result < 0)
-+ goto fw_end;
-+ val = *(u32 *)&cmdbuf[8];
-+ }
-+ /* yup, no "else" here! */
-+ if (val & 1) {
-+ memset(usbbuf, 0, 4);
-+ result = usb_bulk_msg(usbdev, outpipe, usbbuf, 4, &num_processed, HZ);
-+ if ((result < 0) || (!num_processed))
-+ goto fw_end;
-+ }
-+
-+ printk("TNETW1450 firmware upload successful!\n");
-+ result = 0;
-+ goto end;
-+fw_end:
-+ result = -EIO;
-+ goto end;
-+ } else {
-+ /* ACX100 USB */
-+
-+ /* now upload the firmware, slice the data into blocks */
-+ offset = 8;
-+ while (offset < file_size) {
-+ blk_len = file_size - offset;
-+ if (blk_len > USB_RWMEM_MAXLEN) {
-+ blk_len = USB_RWMEM_MAXLEN;
-+ }
-+ log(L_INIT, "uploading firmware (%d bytes, offset=%d)\n",
-+ blk_len, offset);
-+ memcpy(usbbuf, ((u8 *)fw_image) + offset, blk_len);
-+ result = usb_control_msg(usbdev, outpipe,
-+ ACX_USB_REQ_UPLOAD_FW,
-+ USB_TYPE_VENDOR|USB_DIR_OUT,
-+ (file_size - 8) & 0xffff, /* value */
-+ (file_size - 8) >> 16, /* index */
-+ usbbuf, /* dataptr */
-+ blk_len, /* size */
-+ 3000 /* timeout in ms */
-+ );
-+ offset += blk_len;
-+ if (result < 0) {
-+ printk(KERN_ERR "acx: error %d during upload "
-+ "of firmware, aborting\n", result);
-+ goto end;
-+ }
-+ }
-+
-+ /* finally, send the checksum and reboot the device */
-+ /* does this trigger the reboot? */
-+ result = usb_control_msg(usbdev, outpipe,
-+ ACX_USB_REQ_UPLOAD_FW,
-+ USB_TYPE_VENDOR|USB_DIR_OUT,
-+ img_checksum & 0xffff, /* value */
-+ img_checksum >> 16, /* index */
-+ NULL, /* dataptr */
-+ 0, /* size */
-+ 3000 /* timeout in ms */
-+ );
-+ if (result < 0) {
-+ printk(KERN_ERR "acx: error %d during tx of checksum, "
-+ "aborting\n", result);
-+ goto end;
-+ }
-+ result = usb_control_msg(usbdev, inpipe,
-+ ACX_USB_REQ_ACK_CS,
-+ USB_TYPE_VENDOR|USB_DIR_IN,
-+ img_checksum & 0xffff, /* value */
-+ img_checksum >> 16, /* index */
-+ usbbuf, /* dataptr */
-+ 8, /* size */
-+ 3000 /* timeout in ms */
-+ );
-+ if (result < 0) {
-+ printk(KERN_ERR "acx: error %d during ACK of checksum, "
-+ "aborting\n", result);
-+ goto end;
-+ }
-+ if (*usbbuf != 0x10) {
-+ printk(KERN_ERR "acx: invalid checksum?\n");
-+ result = -EINVAL;
-+ goto end;
-+ }
-+ result = 0;
-+ }
-+
-+end:
-+ vfree(fw_image);
-+ kfree(usbbuf);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/* FIXME: maybe merge it with usual eeprom reading, into common code? */
-+static void
-+acxusb_s_read_eeprom_version(acx_device_t *adev)
-+{
-+ u8 eeprom_ver[0x8];
-+
-+ memset(eeprom_ver, 0, sizeof(eeprom_ver));
-+ acx_s_interrogate(adev, &eeprom_ver, ACX1FF_IE_EEPROM_VER);
-+
-+ /* FIXME: which one of those values to take? */
-+ adev->eeprom_version = eeprom_ver[5];
-+}
-+
-+
-+/*
-+ * temporary helper function to at least fill important cfgopt members with
-+ * useful replacement values until we figure out how one manages to fetch
-+ * the configoption struct in the USB device case...
-+ */
-+static int
-+acxusb_s_fill_configoption(acx_device_t *adev)
-+{
-+ adev->cfgopt_probe_delay = 200;
-+ adev->cfgopt_dot11CCAModes = 4;
-+ adev->cfgopt_dot11Diversity = 1;
-+ adev->cfgopt_dot11ShortPreambleOption = 1;
-+ adev->cfgopt_dot11PBCCOption = 1;
-+ adev->cfgopt_dot11ChannelAgility = 0;
-+ adev->cfgopt_dot11PhyType = 5;
-+ adev->cfgopt_dot11TempType = 1;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_e_probe()
-+**
-+** This function is invoked by the kernel's USB core whenever a new device is
-+** attached to the system or the module is loaded. It is presented a usb_device
-+** structure from which information regarding the device is obtained and evaluated.
-+** In case this driver is able to handle one of the offered devices, it returns
-+** a non-null pointer to a driver context and thereby claims the device.
-+*/
-+
-+static void
-+dummy_netdev_init(struct net_device *ndev) {}
-+
-+static int
-+acxusb_e_probe(struct usb_interface *intf, const struct usb_device_id *devID)
-+{
-+ struct usb_device *usbdev = interface_to_usbdev(intf);
-+ acx_device_t *adev = NULL;
-+ struct net_device *ndev = NULL;
-+ struct usb_config_descriptor *config;
-+ struct usb_endpoint_descriptor *epdesc;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+ struct usb_host_endpoint *ep;
-+#endif
-+ struct usb_interface_descriptor *ifdesc;
-+ const char* msg;
-+ int numconfigs, numfaces, numep;
-+ int result = OK;
-+ int i;
-+ int radio_type;
-+ /* this one needs to be more precise in case there appears a TNETW1450 from the same vendor */
-+ int is_tnetw1450 = (usbdev->descriptor.idVendor != ACX100_VENDOR_ID);
-+
-+ FN_ENTER;
-+
-+ if (is_tnetw1450) {
-+ /* Boot the device (i.e. upload the firmware) */
-+ acxusb_boot(usbdev, is_tnetw1450, &radio_type);
-+
-+ /* TNETW1450-based cards will continue right away with
-+ * the same USB ID after booting */
-+ } else {
-+ /* First check if this is the "unbooted" hardware */
-+ if (usbdev->descriptor.idProduct == ACX100_PRODUCT_ID_UNBOOTED) {
-+
-+ /* Boot the device (i.e. upload the firmware) */
-+ acxusb_boot(usbdev, is_tnetw1450, &radio_type);
-+
-+ /* DWL-120+ will first boot the firmware,
-+ * then later have a *separate* probe() run
-+ * since its USB ID will have changed after
-+ * firmware boot!
-+ * Since the first probe() run has no
-+ * other purpose than booting the firmware,
-+ * simply return immediately.
-+ */
-+ log(L_INIT, "finished booting, returning from probe()\n");
-+ result = OK; /* success */
-+ goto end;
-+ }
-+ else
-+ /* device not unbooted, but invalid USB ID!? */
-+ if (usbdev->descriptor.idProduct != ACX100_PRODUCT_ID_BOOTED)
-+ goto end_nodev;
-+ }
-+
-+/* Ok, so it's our device and it has already booted */
-+
-+ /* Allocate memory for a network device */
-+
-+ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init);
-+ /* (NB: memsets to 0 entire area) */
-+ if (!ndev) {
-+ msg = "acx: no memory for netdev\n";
-+ goto end_nomem;
-+ }
-+
-+ /* Register the callbacks for the network device functions */
-+
-+ ether_setup(ndev);
-+ ndev->open = &acxusb_e_open;
-+ ndev->stop = &acxusb_e_close;
-+ ndev->hard_start_xmit = (void *)&acx_i_start_xmit;
-+ ndev->get_stats = (void *)&acx_e_get_stats;
-+#if IW_HANDLER_VERSION <= 5
-+ ndev->get_wireless_stats = (void *)&acx_e_get_wireless_stats;
-+#endif
-+ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
-+ ndev->set_multicast_list = (void *)&acxusb_i_set_rx_mode;
-+#ifdef HAVE_TX_TIMEOUT
-+ ndev->tx_timeout = &acxusb_i_tx_timeout;
-+ ndev->watchdog_timeo = 4 * HZ;
-+#endif
-+ ndev->change_mtu = &acx_e_change_mtu;
-+ SET_MODULE_OWNER(ndev);
-+
-+ /* Setup private driver context */
-+
-+ adev = ndev2adev(ndev);
-+ adev->ndev = ndev;
-+
-+ adev->dev_type = DEVTYPE_USB;
-+ adev->radio_type = radio_type;
-+ if (is_tnetw1450) {
-+ /* well, actually it's a TNETW1450, but since it
-+ * seems to be sufficiently similar to TNETW1130,
-+ * I don't want to change large amounts of code now */
-+ adev->chip_type = CHIPTYPE_ACX111;
-+ } else {
-+ adev->chip_type = CHIPTYPE_ACX100;
-+ }
-+
-+ adev->usbdev = usbdev;
-+ spin_lock_init(&adev->lock); /* initial state: unlocked */
-+ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
-+
-+ /* Check that this is really the hardware we know about.
-+ ** If not sure, at least notify the user that he
-+ ** may be in trouble...
-+ */
-+ numconfigs = (int)usbdev->descriptor.bNumConfigurations;
-+ if (numconfigs != 1)
-+ printk("acx: number of configurations is %d, "
-+ "this driver only knows how to handle 1, "
-+ "be prepared for surprises\n", numconfigs);
-+
-+ config = &usbdev->config->desc;
-+ numfaces = config->bNumInterfaces;
-+ if (numfaces != 1)
-+ printk("acx: number of interfaces is %d, "
-+ "this driver only knows how to handle 1, "
-+ "be prepared for surprises\n", numfaces);
-+
-+ ifdesc = &intf->altsetting->desc;
-+ numep = ifdesc->bNumEndpoints;
-+ log(L_DEBUG, "# of endpoints: %d\n", numep);
-+
-+ if (is_tnetw1450) {
-+ adev->bulkoutep = 1;
-+ adev->bulkinep = 2;
-+ } else {
-+ /* obtain information about the endpoint
-+ ** addresses, begin with some default values
-+ */
-+ adev->bulkoutep = 1;
-+ adev->bulkinep = 1;
-+ for (i = 0; i < numep; i++) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+ ep = usbdev->ep_in[i];
-+ if (!ep)
-+ continue;
-+ epdesc = &ep->desc;
-+#else
-+ epdesc = usb_epnum_to_ep_desc(usbdev, i);
-+ if (!epdesc)
-+ continue;
-+#endif
-+ if (epdesc->bmAttributes & USB_ENDPOINT_XFER_BULK) {
-+ if (epdesc->bEndpointAddress & 0x80)
-+ adev->bulkinep = epdesc->bEndpointAddress & 0xF;
-+ else
-+ adev->bulkoutep = epdesc->bEndpointAddress & 0xF;
-+ }
-+ }
-+ }
-+ log(L_DEBUG, "bulkout ep: 0x%X\n", adev->bulkoutep);
-+ log(L_DEBUG, "bulkin ep: 0x%X\n", adev->bulkinep);
-+
-+ /* already done by memset: adev->rxtruncsize = 0; */
-+ log(L_DEBUG, "TXBUFSIZE=%d RXBUFSIZE=%d\n",
-+ (int) TXBUFSIZE, (int) RXBUFSIZE);
-+
-+ /* Allocate the RX/TX containers. */
-+ adev->usb_tx = kmalloc(sizeof(usb_tx_t) * ACX_TX_URB_CNT, GFP_KERNEL);
-+ if (!adev->usb_tx) {
-+ msg = "acx: no memory for tx container";
-+ goto end_nomem;
-+ }
-+ adev->usb_rx = kmalloc(sizeof(usb_rx_t) * ACX_RX_URB_CNT, GFP_KERNEL);
-+ if (!adev->usb_rx) {
-+ msg = "acx: no memory for rx container";
-+ goto end_nomem;
-+ }
-+
-+ /* Setup URBs for bulk-in/out messages */
-+ for (i = 0; i < ACX_RX_URB_CNT; i++) {
-+ adev->usb_rx[i].urb = usb_alloc_urb(0, GFP_KERNEL);
-+ if (!adev->usb_rx[i].urb) {
-+ msg = "acx: no memory for input URB\n";
-+ goto end_nomem;
-+ }
-+ adev->usb_rx[i].urb->status = 0;
-+ adev->usb_rx[i].adev = adev;
-+ adev->usb_rx[i].busy = 0;
-+ }
-+
-+ for (i = 0; i< ACX_TX_URB_CNT; i++) {
-+ adev->usb_tx[i].urb = usb_alloc_urb(0, GFP_KERNEL);
-+ if (!adev->usb_tx[i].urb) {
-+ msg = "acx: no memory for output URB\n";
-+ goto end_nomem;
-+ }
-+ adev->usb_tx[i].urb->status = 0;
-+ adev->usb_tx[i].adev = adev;
-+ adev->usb_tx[i].busy = 0;
-+ }
-+ adev->tx_free = ACX_TX_URB_CNT;
-+
-+ usb_set_intfdata(intf, adev);
-+ SET_NETDEV_DEV(ndev, &intf->dev);
-+
-+ /* TODO: move all of fw cmds to open()? But then we won't know our MAC addr
-+ until ifup (it's available via reading ACX1xx_IE_DOT11_STATION_ID)... */
-+
-+ /* put acx out of sleep mode and initialize it */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
-+
-+ result = acx_s_init_mac(adev);
-+ if (result)
-+ goto end;
-+
-+ /* TODO: see similar code in pci.c */
-+ acxusb_s_read_eeprom_version(adev);
-+ acxusb_s_fill_configoption(adev);
-+ acx_s_set_defaults(adev);
-+ acx_s_get_firmware_version(adev);
-+ acx_display_hardware_details(adev);
-+
-+ /* Register the network device */
-+ log(L_INIT, "registering network device\n");
-+ result = register_netdev(ndev);
-+ if (result) {
-+ msg = "acx: failed to register USB network device "
-+ "(error %d)\n";
-+ goto end_nomem;
-+ }
-+
-+ acx_proc_register_entries(ndev);
-+
-+ acx_stop_queue(ndev, "on probe");
-+ acx_carrier_off(ndev, "on probe");
-+
-+ printk("acx: USB module " ACX_RELEASE " loaded successfully\n");
-+
-+#if CMD_DISCOVERY
-+ great_inquisitor(adev);
-+#endif
-+
-+ /* Everything went OK, we are happy now */
-+ result = OK;
-+ goto end;
-+
-+end_nomem:
-+ printk(msg, result);
-+
-+ if (ndev) {
-+ if (adev->usb_rx) {
-+ for (i = 0; i < ACX_RX_URB_CNT; i++)
-+ usb_free_urb(adev->usb_rx[i].urb);
-+ kfree(adev->usb_rx);
-+ }
-+ if (adev->usb_tx) {
-+ for (i = 0; i < ACX_TX_URB_CNT; i++)
-+ usb_free_urb(adev->usb_tx[i].urb);
-+ kfree(adev->usb_tx);
-+ }
-+ free_netdev(ndev);
-+ }
-+
-+ result = -ENOMEM;
-+ goto end;
-+
-+end_nodev:
-+ /* no device we could handle, return error. */
-+ result = -EIO;
-+
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_e_disconnect()
-+**
-+** This function is invoked whenever the user pulls the plug from the USB
-+** device or the module is removed from the kernel. In these cases, the
-+** network devices have to be taken down and all allocated memory has
-+** to be freed.
-+*/
-+static void
-+acxusb_e_disconnect(struct usb_interface *intf)
-+{
-+ acx_device_t *adev = usb_get_intfdata(intf);
-+ unsigned long flags;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* No WLAN device... no sense */
-+ if (!adev)
-+ goto end;
-+
-+ /* Unregister network device
-+ *
-+ * If the interface is up, unregister_netdev() will take
-+ * care of calling our close() function, which takes
-+ * care of unlinking the urbs, sending the device to
-+ * sleep, etc...
-+ * This can't be called with sem or lock held because
-+ * _close() will try to grab it as well if it's called,
-+ * deadlocking the machine.
-+ */
-+ unregister_netdev(adev->ndev);
-+
-+ acx_sem_lock(adev);
-+ acx_lock(adev, flags);
-+ /* This device exists no more */
-+ usb_set_intfdata(intf, NULL);
-+ acx_proc_unregister_entries(adev->ndev);
-+
-+ /*
-+ * Here we only free them. _close() took care of
-+ * unlinking them.
-+ */
-+ for (i = 0; i < ACX_RX_URB_CNT; ++i) {
-+ usb_free_urb(adev->usb_rx[i].urb);
-+ }
-+ for (i = 0; i< ACX_TX_URB_CNT; ++i) {
-+ usb_free_urb(adev->usb_tx[i].urb);
-+ }
-+
-+ /* Freeing containers */
-+ kfree(adev->usb_rx);
-+ kfree(adev->usb_tx);
-+
-+ acx_unlock(adev, flags);
-+ acx_sem_unlock(adev);
-+
-+ free_netdev(adev->ndev);
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_e_open()
-+** This function is called when the user sets up the network interface.
-+** It initializes a management timer, sets up the USB card and starts
-+** the network tx queue and USB receive.
-+*/
-+static int
-+acxusb_e_open(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* put the ACX100 out of sleep mode */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
-+
-+ acx_init_task_scheduler(adev);
-+
-+ init_timer(&adev->mgmt_timer);
-+ adev->mgmt_timer.function = acx_i_timer;
-+ adev->mgmt_timer.data = (unsigned long)adev;
-+
-+ /* acx_s_start needs it */
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ acx_s_start(adev);
-+
-+ /* don't acx_start_queue() here, we need to associate first */
-+
-+ acx_lock(adev, flags);
-+ for (i = 0; i < ACX_RX_URB_CNT; i++) {
-+ adev->usb_rx[i].urb->status = 0;
-+ }
-+
-+ acxusb_l_poll_rx(adev, &adev->usb_rx[0]);
-+
-+ acx_unlock(adev, flags);
-+
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT0;
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_e_close()
-+**
-+** This function stops the network functionality of the interface (invoked
-+** when the user calls ifconfig <wlan> down). The tx queue is halted and
-+** the device is marked as down. In case there were any pending USB bulk
-+** transfers, these are unlinked (asynchronously). The module in-use count
-+** is also decreased in this function.
-+*/
-+static int
-+acxusb_e_close(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ int i;
-+
-+ FN_ENTER;
-+
-+#ifdef WE_STILL_DONT_CARE_ABOUT_IT
-+ /* Transmit a disassociate frame */
-+ lock
-+ acx_l_transmit_disassoc(adev, &client);
-+ unlock
-+#endif
-+
-+ acx_sem_lock(adev);
-+
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+
-+/* Code below is remarkably similar to acxpci_s_down(). Maybe we can merge them? */
-+
-+ /* Make sure we don't get any more rx requests */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
-+
-+ /*
-+ * We must do FLUSH *without* holding sem to avoid a deadlock.
-+ * See pci.c:acxpci_s_down() for deails.
-+ */
-+ acx_sem_unlock(adev);
-+ FLUSH_SCHEDULED_WORK();
-+ acx_sem_lock(adev);
-+
-+ /* Power down the device */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
-+
-+ /* Stop the transmit queue, mark the device as DOWN */
-+ acx_lock(adev, flags);
-+ acx_stop_queue(ndev, "on ifdown");
-+ acx_set_status(adev, ACX_STATUS_0_STOPPED);
-+ /* stop pending rx/tx urb transfers */
-+ for (i = 0; i < ACX_TX_URB_CNT; i++) {
-+ acxusb_unlink_urb(adev->usb_tx[i].urb);
-+ adev->usb_tx[i].busy = 0;
-+ }
-+ for (i = 0; i < ACX_RX_URB_CNT; i++) {
-+ acxusb_unlink_urb(adev->usb_rx[i].urb);
-+ adev->usb_rx[i].busy = 0;
-+ }
-+ adev->tx_free = ACX_TX_URB_CNT;
-+ acx_unlock(adev, flags);
-+
-+ /* Must do this outside of lock */
-+ del_timer_sync(&adev->mgmt_timer);
-+
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT0;
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_l_poll_rx
-+** This function (re)initiates a bulk-in USB transfer on a given urb
-+*/
-+static void
-+acxusb_l_poll_rx(acx_device_t *adev, usb_rx_t* rx)
-+{
-+ struct usb_device *usbdev;
-+ struct urb *rxurb;
-+ int errcode, rxnum;
-+ unsigned int inpipe;
-+
-+ FN_ENTER;
-+
-+ rxurb = rx->urb;
-+ usbdev = adev->usbdev;
-+
-+ rxnum = rx - adev->usb_rx;
-+
-+ inpipe = usb_rcvbulkpipe(usbdev, adev->bulkinep);
-+ if (unlikely(rxurb->status == -EINPROGRESS)) {
-+ printk(KERN_ERR "acx: error, rx triggered while rx urb in progress\n");
-+ /* FIXME: this is nasty, receive is being cancelled by this code
-+ * on the other hand, this should not happen anyway...
-+ */
-+ usb_unlink_urb(rxurb);
-+ } else
-+ if (unlikely(rxurb->status == -ECONNRESET)) {
-+ log(L_USBRXTX, "acx_usb: _poll_rx: connection reset\n");
-+ goto end;
-+ }
-+ rxurb->actual_length = 0;
-+ usb_fill_bulk_urb(rxurb, usbdev, inpipe,
-+ &rx->bulkin, /* dataptr */
-+ RXBUFSIZE, /* size */
-+ acxusb_i_complete_rx, /* handler */
-+ rx /* handler param */
-+ );
-+ rxurb->transfer_flags = URB_ASYNC_UNLINK;
-+
-+ /* ATOMIC: we may be called from complete_rx() usb callback */
-+ errcode = usb_submit_urb(rxurb, GFP_ATOMIC);
-+ /* FIXME: evaluate the error code! */
-+ log(L_USBRXTX, "SUBMIT RX (%d) inpipe=0x%X size=%d errcode=%d\n",
-+ rxnum, inpipe, (int) RXBUFSIZE, errcode);
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_i_complete_rx()
-+** Inputs:
-+** urb -> pointer to USB request block
-+** regs -> pointer to register-buffer for syscalls (see asm/ptrace.h)
-+**
-+** This function is invoked by USB subsystem whenever a bulk receive
-+** request returns.
-+** The received data is then committed to the network stack and the next
-+** USB receive is triggered.
-+*/
-+static void
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+acxusb_i_complete_rx(struct urb *urb)
-+#else
-+acxusb_i_complete_rx(struct urb *urb, struct pt_regs *regs)
-+#endif
-+{
-+ acx_device_t *adev;
-+ rxbuffer_t *ptr;
-+ rxbuffer_t *inbuf;
-+ usb_rx_t *rx;
-+ unsigned long flags;
-+ int size, remsize, packetsize, rxnum;
-+
-+ FN_ENTER;
-+
-+ BUG_ON(!urb->context);
-+
-+ rx = (usb_rx_t *)urb->context;
-+ adev = rx->adev;
-+
-+ acx_lock(adev, flags);
-+
-+ /*
-+ * Happens on disconnect or close. Don't play with the urb.
-+ * Don't resubmit it. It will get unlinked by close()
-+ */
-+ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) {
-+ log(L_USBRXTX, "rx: device is down, not doing anything\n");
-+ goto end_unlock;
-+ }
-+
-+ inbuf = &rx->bulkin;
-+ size = urb->actual_length;
-+ remsize = size;
-+ rxnum = rx - adev->usb_rx;
-+
-+ log(L_USBRXTX, "RETURN RX (%d) status=%d size=%d\n",
-+ rxnum, urb->status, size);
-+
-+ /* Send the URB that's waiting. */
-+ log(L_USBRXTX, "rxnum=%d, sending=%d\n", rxnum, rxnum^1);
-+ acxusb_l_poll_rx(adev, &adev->usb_rx[rxnum^1]);
-+
-+ if (unlikely(size > sizeof(rxbuffer_t)))
-+ printk("acx_usb: rx too large: %d, please report\n", size);
-+
-+ /* check if the transfer was aborted */
-+ switch (urb->status) {
-+ case 0: /* No error */
-+ break;
-+ case -EOVERFLOW:
-+ printk(KERN_ERR "acx: rx data overrun\n");
-+ adev->rxtruncsize = 0; /* Not valid anymore. */
-+ goto end_unlock;
-+ case -ECONNRESET:
-+ adev->rxtruncsize = 0;
-+ goto end_unlock;
-+ case -ESHUTDOWN: /* rmmod */
-+ adev->rxtruncsize = 0;
-+ goto end_unlock;
-+ default:
-+ adev->rxtruncsize = 0;
-+ adev->stats.rx_errors++;
-+ printk("acx: rx error (urb status=%d)\n", urb->status);
-+ goto end_unlock;
-+ }
-+
-+ if (unlikely(!size))
-+ printk("acx: warning, encountered zerolength rx packet\n");
-+
-+ if (urb->transfer_buffer != inbuf)
-+ goto end_unlock;
-+
-+ /* check if previous frame was truncated
-+ ** FIXME: this code can only handle truncation
-+ ** of consecutive packets!
-+ */
-+ ptr = inbuf;
-+ if (adev->rxtruncsize) {
-+ int tail_size;
-+
-+ ptr = &adev->rxtruncbuf;
-+ packetsize = RXBUF_BYTES_USED(ptr);
-+ if (acx_debug & L_USBRXTX) {
-+ printk("handling truncated frame (truncsize=%d size=%d "
-+ "packetsize(from trunc)=%d)\n",
-+ adev->rxtruncsize, size, packetsize);
-+ acx_dump_bytes(ptr, RXBUF_HDRSIZE);
-+ acx_dump_bytes(inbuf, RXBUF_HDRSIZE);
-+ }
-+
-+ /* bytes needed for rxtruncbuf completion: */
-+ tail_size = packetsize - adev->rxtruncsize;
-+
-+ if (size < tail_size) {
-+ /* there is not enough data to complete this packet,
-+ ** simply append the stuff to the truncation buffer
-+ */
-+ memcpy(((char *)ptr) + adev->rxtruncsize, inbuf, size);
-+ adev->rxtruncsize += size;
-+ remsize = 0;
-+ } else {
-+ /* ok, this data completes the previously
-+ ** truncated packet. copy it into a descriptor
-+ ** and give it to the rest of the stack */
-+
-+ /* append tail to previously truncated part
-+ ** NB: adev->rxtruncbuf (pointed to by ptr) can't
-+ ** overflow because this is already checked before
-+ ** truncation buffer was filled. See below,
-+ ** "if (packetsize > sizeof(rxbuffer_t))..." code */
-+ memcpy(((char *)ptr) + adev->rxtruncsize, inbuf, tail_size);
-+
-+ if (acx_debug & L_USBRXTX) {
-+ printk("full trailing packet + 12 bytes:\n");
-+ acx_dump_bytes(inbuf, tail_size + RXBUF_HDRSIZE);
-+ }
-+ acx_l_process_rxbuf(adev, ptr);
-+ adev->rxtruncsize = 0;
-+ ptr = (rxbuffer_t *) (((char *)inbuf) + tail_size);
-+ remsize -= tail_size;
-+ }
-+ log(L_USBRXTX, "post-merge size=%d remsize=%d\n",
-+ size, remsize);
-+ }
-+
-+ /* size = USB data block size
-+ ** remsize = unprocessed USB bytes left
-+ ** ptr = current pos in USB data block
-+ */
-+ while (remsize) {
-+ if (remsize < RXBUF_HDRSIZE) {
-+ printk("acx: truncated rx header (%d bytes)!\n",
-+ remsize);
-+ if (ACX_DEBUG)
-+ acx_dump_bytes(ptr, remsize);
-+ break;
-+ }
-+
-+ packetsize = RXBUF_BYTES_USED(ptr);
-+ log(L_USBRXTX, "packet with packetsize=%d\n", packetsize);
-+
-+ if (RXBUF_IS_TXSTAT(ptr)) {
-+ /* do rate handling */
-+ usb_txstatus_t *stat = (void*)ptr;
-+ u16 client_no = (u16)stat->hostdata;
-+
-+ log(L_USBRXTX, "tx: stat: mac_cnt_rcvd:%04X "
-+ "queue_index:%02X mac_status:%02X hostdata:%08X "
-+ "rate:%u ack_failures:%02X rts_failures:%02X "
-+ "rts_ok:%02X\n",
-+ stat->mac_cnt_rcvd,
-+ stat->queue_index, stat->mac_status, stat->hostdata,
-+ stat->rate, stat->ack_failures, stat->rts_failures,
-+ stat->rts_ok);
-+
-+ if (adev->rate_auto && client_no < VEC_SIZE(adev->sta_list)) {
-+ client_t *clt = &adev->sta_list[client_no];
-+ u16 cur = stat->hostdata >> 16;
-+
-+ if (clt && clt->rate_cur == cur) {
-+ acx_l_handle_txrate_auto(adev, clt,
-+ cur, /* intended rate */
-+ stat->rate, 0, /* actually used rate */
-+ stat->mac_status, /* error? */
-+ ACX_TX_URB_CNT - adev->tx_free);
-+ }
-+ }
-+ goto next;
-+ }
-+
-+ if (packetsize > sizeof(rxbuffer_t)) {
-+ printk("acx: packet exceeds max wlan "
-+ "frame size (%d > %d). size=%d\n",
-+ packetsize, (int) sizeof(rxbuffer_t), size);
-+ if (ACX_DEBUG)
-+ acx_dump_bytes(ptr, 16);
-+ /* FIXME: put some real error-handling in here! */
-+ break;
-+ }
-+
-+ if (packetsize > remsize) {
-+ /* frame truncation handling */
-+ if (acx_debug & L_USBRXTX) {
-+ printk("need to truncate packet, "
-+ "packetsize=%d remsize=%d "
-+ "size=%d bytes:",
-+ packetsize, remsize, size);
-+ acx_dump_bytes(ptr, RXBUF_HDRSIZE);
-+ }
-+ memcpy(&adev->rxtruncbuf, ptr, remsize);
-+ adev->rxtruncsize = remsize;
-+ break;
-+ }
-+
-+ /* packetsize <= remsize */
-+ /* now handle the received data */
-+ acx_l_process_rxbuf(adev, ptr);
-+next:
-+ ptr = (rxbuffer_t *)(((char *)ptr) + packetsize);
-+ remsize -= packetsize;
-+ if ((acx_debug & L_USBRXTX) && remsize) {
-+ printk("more than one packet in buffer, "
-+ "second packet hdr:");
-+ acx_dump_bytes(ptr, RXBUF_HDRSIZE);
-+ }
-+ }
-+
-+end_unlock:
-+ acx_unlock(adev, flags);
-+/* end: */
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_i_complete_tx()
-+** Inputs:
-+** urb -> pointer to USB request block
-+** regs -> pointer to register-buffer for syscalls (see asm/ptrace.h)
-+**
-+** This function is invoked upon termination of a USB transfer.
-+*/
-+static void
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+acxusb_i_complete_tx(struct urb *urb)
-+#else
-+acxusb_i_complete_tx(struct urb *urb, struct pt_regs *regs)
-+#endif
-+{
-+ acx_device_t *adev;
-+ usb_tx_t *tx;
-+ unsigned long flags;
-+ int txnum;
-+
-+ FN_ENTER;
-+
-+ BUG_ON(!urb->context);
-+
-+ tx = (usb_tx_t *)urb->context;
-+ adev = tx->adev;
-+
-+ txnum = tx - adev->usb_tx;
-+
-+ acx_lock(adev, flags);
-+
-+ /*
-+ * If the iface isn't up, we don't have any right
-+ * to play with them. The urb may get unlinked.
-+ */
-+ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) {
-+ log(L_USBRXTX, "tx: device is down, not doing anything\n");
-+ goto end_unlock;
-+ }
-+
-+ log(L_USBRXTX, "RETURN TX (%d): status=%d size=%d\n",
-+ txnum, urb->status, urb->actual_length);
-+
-+ /* handle USB transfer errors */
-+ switch (urb->status) {
-+ case 0: /* No error */
-+ break;
-+ case -ESHUTDOWN:
-+ goto end_unlock;
-+ break;
-+ case -ECONNRESET:
-+ goto end_unlock;
-+ break;
-+ /* FIXME: real error-handling code here please */
-+ default:
-+ printk(KERN_ERR "acx: tx error, urb status=%d\n", urb->status);
-+ /* FIXME: real error-handling code here please */
-+ }
-+
-+ /* free the URB and check for more data */
-+ tx->busy = 0;
-+ adev->tx_free++;
-+ if ((adev->tx_free >= TX_START_QUEUE)
-+ && (adev->status == ACX_STATUS_4_ASSOCIATED)
-+ && (acx_queue_stopped(adev->ndev))
-+ ) {
-+ log(L_BUF, "tx: wake queue (%u free txbufs)\n",
-+ adev->tx_free);
-+ acx_wake_queue(adev->ndev, NULL);
-+ }
-+
-+end_unlock:
-+ acx_unlock(adev, flags);
-+/* end: */
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxusb_l_alloc_tx
-+** Actually returns a usb_tx_t* ptr
-+*/
-+tx_t*
-+acxusb_l_alloc_tx(acx_device_t *adev)
-+{
-+ usb_tx_t *tx;
-+ unsigned head;
-+
-+ FN_ENTER;
-+
-+ head = adev->tx_head;
-+ do {
-+ head = (head + 1) % ACX_TX_URB_CNT;
-+ if (!adev->usb_tx[head].busy) {
-+ log(L_USBRXTX, "allocated tx %d\n", head);
-+ tx = &adev->usb_tx[head];
-+ tx->busy = 1;
-+ adev->tx_free--;
-+ /* Keep a few free descs between head and tail of tx ring.
-+ ** It is not absolutely needed, just feels safer */
-+ if (adev->tx_free < TX_STOP_QUEUE) {
-+ log(L_BUF, "tx: stop queue "
-+ "(%u free txbufs)\n", adev->tx_free);
-+ acx_stop_queue(adev->ndev, NULL);
-+ }
-+ goto end;
-+ }
-+ } while (likely(head!=adev->tx_head));
-+ tx = NULL;
-+ printk_ratelimited("acx: tx buffers full\n");
-+end:
-+ adev->tx_head = head;
-+ FN_EXIT0;
-+ return (tx_t*)tx;
-+}
-+
-+
-+/***************************************************************
-+** Used if alloc_tx()'ed buffer needs to be cancelled without doing tx
-+*/
-+void
-+acxusb_l_dealloc_tx(tx_t *tx_opaque)
-+{
-+ usb_tx_t* tx = (usb_tx_t*)tx_opaque;
-+ tx->busy = 0;
-+}
-+
-+
-+/***************************************************************
-+*/
-+void*
-+acxusb_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
-+{
-+ usb_tx_t* tx = (usb_tx_t*)tx_opaque;
-+ return &tx->bulkout.data;
-+}
-+
-+
-+/***************************************************************
-+** acxusb_l_tx_data
-+**
-+** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
-+** Can be called from acx_i_start_xmit (data frames from net core).
-+*/
-+void
-+acxusb_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int wlanpkt_len)
-+{
-+ struct usb_device *usbdev;
-+ struct urb* txurb;
-+ usb_tx_t* tx;
-+ usb_txbuffer_t* txbuf;
-+ client_t *clt;
-+ wlan_hdr_t* whdr;
-+ unsigned int outpipe;
-+ int ucode, txnum;
-+
-+ FN_ENTER;
-+
-+ tx = ((usb_tx_t *)tx_opaque);
-+ txurb = tx->urb;
-+ txbuf = &tx->bulkout;
-+ whdr = (wlan_hdr_t *)txbuf->data;
-+ txnum = tx - adev->usb_tx;
-+
-+ log(L_DEBUG, "using buf#%d free=%d len=%d\n",
-+ txnum, adev->tx_free, wlanpkt_len);
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ clt = acx_l_sta_list_get(adev, whdr->a1);
-+ break;
-+ case ACX_MODE_2_STA:
-+ clt = adev->ap_client;
-+ break;
-+ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
-+ clt = NULL;
-+ break;
-+ }
-+
-+ if (unlikely(clt && !clt->rate_cur)) {
-+ printk("acx: driver bug! bad ratemask\n");
-+ goto end;
-+ }
-+
-+ /* fill the USB transfer header */
-+ txbuf->desc = cpu_to_le16(USB_TXBUF_TXDESC);
-+ txbuf->mpdu_len = cpu_to_le16(wlanpkt_len);
-+ txbuf->queue_index = 1;
-+ if (clt) {
-+ txbuf->rate = clt->rate_100;
-+ txbuf->hostdata = (clt - adev->sta_list) | (clt->rate_cur << 16);
-+ } else {
-+ txbuf->rate = adev->rate_bcast100;
-+ txbuf->hostdata = ((u16)-1) | (adev->rate_bcast << 16);
-+ }
-+ txbuf->ctrl1 = DESC_CTL_FIRSTFRAG;
-+ if (1 == adev->preamble_cur)
-+ SET_BIT(txbuf->ctrl1, DESC_CTL_SHORT_PREAMBLE);
-+ txbuf->ctrl2 = 0;
-+ txbuf->data_len = cpu_to_le16(wlanpkt_len);
-+
-+ if (unlikely(acx_debug & L_DATA)) {
-+ printk("dump of bulk out urb:\n");
-+ acx_dump_bytes(txbuf, wlanpkt_len + USB_TXBUF_HDRSIZE);
-+ }
-+
-+ if (unlikely(txurb->status == -EINPROGRESS)) {
-+ printk("acx: trying to submit tx urb while already in progress\n");
-+ }
-+
-+ /* now schedule the USB transfer */
-+ usbdev = adev->usbdev;
-+ outpipe = usb_sndbulkpipe(usbdev, adev->bulkoutep);
-+
-+ usb_fill_bulk_urb(txurb, usbdev, outpipe,
-+ txbuf, /* dataptr */
-+ wlanpkt_len + USB_TXBUF_HDRSIZE, /* size */
-+ acxusb_i_complete_tx, /* handler */
-+ tx /* handler param */
-+ );
-+
-+ txurb->transfer_flags = URB_ASYNC_UNLINK|URB_ZERO_PACKET;
-+ ucode = usb_submit_urb(txurb, GFP_ATOMIC);
-+ log(L_USBRXTX, "SUBMIT TX (%d): outpipe=0x%X buf=%p txsize=%d "
-+ "rate=%u errcode=%d\n", txnum, outpipe, txbuf,
-+ wlanpkt_len + USB_TXBUF_HDRSIZE, txbuf->rate, ucode);
-+
-+ if (unlikely(ucode)) {
-+ printk(KERN_ERR "acx: submit_urb() error=%d txsize=%d\n",
-+ ucode, wlanpkt_len + USB_TXBUF_HDRSIZE);
-+
-+ /* on error, just mark the frame as done and update
-+ ** the statistics
-+ */
-+ adev->stats.tx_errors++;
-+ tx->busy = 0;
-+ adev->tx_free++;
-+ /* needed? if (adev->tx_free > TX_START_QUEUE) acx_wake_queue(...) */
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static void
-+acxusb_i_set_rx_mode(struct net_device *ndev)
-+{
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#ifdef HAVE_TX_TIMEOUT
-+static void
-+acxusb_i_tx_timeout(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+ /* unlink the URBs */
-+ for (i = 0; i < ACX_TX_URB_CNT; i++) {
-+ acxusb_unlink_urb(adev->usb_tx[i].urb);
-+ adev->usb_tx[i].busy = 0;
-+ }
-+ adev->tx_free = ACX_TX_URB_CNT;
-+ /* TODO: stats update */
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** init_module()
-+**
-+** This function is invoked upon loading of the kernel module.
-+** It registers itself at the kernel's USB subsystem.
-+**
-+** Returns: Errorcode on failure, 0 on success
-+*/
-+int __init
-+acxusb_e_init_module(void)
-+{
-+ log(L_INIT, "USB module " ACX_RELEASE " initialized, "
-+ "probing for devices...\n");
-+ return usb_register(&acxusb_driver);
-+}
-+
-+
-+
-+/***********************************************************************
-+** cleanup_module()
-+**
-+** This function is invoked as last step of the module unloading. It simply
-+** deregisters this module at the kernel's USB subsystem.
-+*/
-+void __exit
-+acxusb_e_cleanup_module()
-+{
-+ usb_deregister(&acxusb_driver);
-+}
-+
-+
-+/***********************************************************************
-+** DEBUG STUFF
-+*/
-+#if ACX_DEBUG
-+
-+#ifdef UNUSED
-+static void
-+dump_device(struct usb_device *usbdev)
-+{
-+ int i;
-+ struct usb_config_descriptor *cd;
-+
-+ printk("acx device dump:\n");
-+ printk(" devnum: %d\n", usbdev->devnum);
-+ printk(" speed: %d\n", usbdev->speed);
-+ printk(" tt: 0x%X\n", (unsigned int)(usbdev->tt));
-+ printk(" ttport: %d\n", (unsigned int)(usbdev->ttport));
-+ printk(" toggle[0]: 0x%X toggle[1]: 0x%X\n", (unsigned int)(usbdev->toggle[0]), (unsigned int)(usbdev->toggle[1]));
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+ /* This saw a change after 2.6.10 */
-+ printk(" ep_in wMaxPacketSize: ");
-+ for (i = 0; i < 16; ++i)
-+ if (usbdev->ep_in[i] != NULL)
-+ printk("%d:%d ", i, usbdev->ep_in[i]->desc.wMaxPacketSize);
-+ printk("\n");
-+ printk(" ep_out wMaxPacketSize: ");
-+ for (i = 0; i < VEC_SIZE(usbdev->ep_out); ++i)
-+ if (usbdev->ep_out[i] != NULL)
-+ printk("%d:%d ", i, usbdev->ep_out[i]->desc.wMaxPacketSize);
-+ printk("\n");
-+#else
-+ printk(" epmaxpacketin: ");
-+ for (i = 0; i < 16; i++)
-+ printk("%d ", usbdev->epmaxpacketin[i]);
-+ printk("\n");
-+ printk(" epmaxpacketout: ");
-+ for (i = 0; i < 16; i++)
-+ printk("%d ", usbdev->epmaxpacketout[i]);
-+ printk("\n");
-+#endif
-+ printk(" parent: 0x%X\n", (unsigned int)usbdev->parent);
-+ printk(" bus: 0x%X\n", (unsigned int)usbdev->bus);
-+#ifdef NO_DATATYPE
-+ printk(" configs: ");
-+ for (i = 0; i < usbdev->descriptor.bNumConfigurations; i++)
-+ printk("0x%X ", usbdev->config[i]);
-+ printk("\n");
-+#endif
-+ printk(" actconfig: %p\n", usbdev->actconfig);
-+ dump_device_descriptor(&usbdev->descriptor);
-+
-+ cd = &usbdev->config->desc;
-+ dump_config_descriptor(cd);
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static void
-+dump_config_descriptor(struct usb_config_descriptor *cd)
-+{
-+ printk("Configuration Descriptor:\n");
-+ if (!cd) {
-+ printk("NULL\n");
-+ return;
-+ }
-+ printk(" bLength: %d (0x%X)\n", cd->bLength, cd->bLength);
-+ printk(" bDescriptorType: %d (0x%X)\n", cd->bDescriptorType, cd->bDescriptorType);
-+ printk(" bNumInterfaces: %d (0x%X)\n", cd->bNumInterfaces, cd->bNumInterfaces);
-+ printk(" bConfigurationValue: %d (0x%X)\n", cd->bConfigurationValue, cd->bConfigurationValue);
-+ printk(" iConfiguration: %d (0x%X)\n", cd->iConfiguration, cd->iConfiguration);
-+ printk(" bmAttributes: %d (0x%X)\n", cd->bmAttributes, cd->bmAttributes);
-+ /* printk(" MaxPower: %d (0x%X)\n", cd->bMaxPower, cd->bMaxPower); */
-+}
-+
-+
-+static void
-+dump_device_descriptor(struct usb_device_descriptor *dd)
-+{
-+ printk("Device Descriptor:\n");
-+ if (!dd) {
-+ printk("NULL\n");
-+ return;
-+ }
-+ printk(" bLength: %d (0x%X)\n", dd->bLength, dd->bLength);
-+ printk(" bDescriptortype: %d (0x%X)\n", dd->bDescriptorType, dd->bDescriptorType);
-+ printk(" bcdUSB: %d (0x%X)\n", dd->bcdUSB, dd->bcdUSB);
-+ printk(" bDeviceClass: %d (0x%X)\n", dd->bDeviceClass, dd->bDeviceClass);
-+ printk(" bDeviceSubClass: %d (0x%X)\n", dd->bDeviceSubClass, dd->bDeviceSubClass);
-+ printk(" bDeviceProtocol: %d (0x%X)\n", dd->bDeviceProtocol, dd->bDeviceProtocol);
-+ printk(" bMaxPacketSize0: %d (0x%X)\n", dd->bMaxPacketSize0, dd->bMaxPacketSize0);
-+ printk(" idVendor: %d (0x%X)\n", dd->idVendor, dd->idVendor);
-+ printk(" idProduct: %d (0x%X)\n", dd->idProduct, dd->idProduct);
-+ printk(" bcdDevice: %d (0x%X)\n", dd->bcdDevice, dd->bcdDevice);
-+ printk(" iManufacturer: %d (0x%X)\n", dd->iManufacturer, dd->iManufacturer);
-+ printk(" iProduct: %d (0x%X)\n", dd->iProduct, dd->iProduct);
-+ printk(" iSerialNumber: %d (0x%X)\n", dd->iSerialNumber, dd->iSerialNumber);
-+ printk(" bNumConfigurations: %d (0x%X)\n", dd->bNumConfigurations, dd->bNumConfigurations);
-+}
-+#endif /* UNUSED */
-+
-+#endif /* ACX_DEBUG */
-Index: linux-2.6.22/drivers/net/wireless/acx/wlan.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/wlan.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,424 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** This code is based on elements which are
-+** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
-+** info@linux-wlan.com
-+** http://www.linux-wlan.com
-+*/
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+#include <linux/types.h>
-+#include <linux/if_arp.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+*/
-+#define LOG_BAD_EID(hdr,len,ie_ptr) acx_log_bad_eid(hdr, len, ((wlan_ie_t*)ie_ptr))
-+
-+#define IE_EID(ie_ptr) (((wlan_ie_t*)(ie_ptr))->eid)
-+#define IE_LEN(ie_ptr) (((wlan_ie_t*)(ie_ptr))->len)
-+#define OFFSET(hdr,off) (WLAN_HDR_A3_DATAP(hdr) + (off))
-+
-+
-+/***********************************************************************
-+** wlan_mgmt_decode_XXX
-+**
-+** Given a complete frame in f->hdr, sets the pointers in f to
-+** the areas that correspond to the parts of the frame.
-+**
-+** Assumptions:
-+** 1) f->len and f->hdr are already set
-+** 2) f->len is the length of the MAC header + data, the FCS
-+** is NOT included
-+** 3) all members except len and hdr are zero
-+** Arguments:
-+** f frame structure
-+**
-+** Returns:
-+** nothing
-+**
-+** Side effects:
-+** frame structure members are pointing at their
-+** respective portions of the frame buffer.
-+*/
-+void
-+wlan_mgmt_decode_beacon(wlan_fr_beacon_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+ f->type = WLAN_FSTYPE_BEACON;
-+
-+ /*-- Fixed Fields ----*/
-+ f->ts = (u64 *) OFFSET(f->hdr, WLAN_BEACON_OFF_TS);
-+ f->bcn_int = (u16 *) OFFSET(f->hdr, WLAN_BEACON_OFF_BCN_INT);
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_BEACON_OFF_CAPINFO);
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_BEACON_OFF_SSID);
-+ while (ie_ptr < end) {
-+ switch (IE_EID(ie_ptr)) {
-+ case WLAN_EID_SSID:
-+ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_SUPP_RATES:
-+ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_EXT_RATES:
-+ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_FH_PARMS:
-+ f->fh_parms = (wlan_ie_fh_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_DS_PARMS:
-+ f->ds_parms = (wlan_ie_ds_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_CF_PARMS:
-+ f->cf_parms = (wlan_ie_cf_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_IBSS_PARMS:
-+ f->ibss_parms = (wlan_ie_ibss_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_TIM:
-+ f->tim = (wlan_ie_tim_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_ERP_INFO:
-+ f->erp = (wlan_ie_erp_t *) ie_ptr;
-+ break;
-+
-+ case WLAN_EID_COUNTRY:
-+ /* was seen: 07 06 47 42 20 01 0D 14 */
-+ case WLAN_EID_PWR_CONSTRAINT:
-+ /* was seen by Ashwin Mansinghka <ashwin_man@yahoo.com> from
-+ Atheros-based PCI card in AP mode using madwifi drivers: */
-+ /* 20 01 00 */
-+ case WLAN_EID_NONERP:
-+ /* was seen from WRT54GS with OpenWrt: 2F 01 07 */
-+ case WLAN_EID_UNKNOWN128:
-+ /* was seen by Jacek Jablonski <conexion2000@gmail.com> from Orinoco AP */
-+ /* 80 06 00 60 1D 2C 3B 00 */
-+ case WLAN_EID_UNKNOWN133:
-+ /* was seen by David Bronaugh <dbronaugh@linuxboxen.org> from ???? */
-+ /* 85 1E 00 00 84 12 07 00 FF 00 11 00 61 70 63 31 */
-+ /* 63 73 72 30 34 32 00 00 00 00 00 00 00 00 00 25 */
-+ case WLAN_EID_UNKNOWN223:
-+ /* was seen by Carlos Martin <carlosmn@gmail.com> from ???? */
-+ /* DF 20 01 1E 04 00 00 00 06 63 09 02 FF 0F 30 30 */
-+ /* 30 42 36 42 33 34 30 39 46 31 00 00 00 00 00 00 00 00 */
-+ case WLAN_EID_GENERIC:
-+ /* WPA: hostap code:
-+ if (pos[1] >= 4 &&
-+ pos[2] == 0x00 && pos[3] == 0x50 &&
-+ pos[4] == 0xf2 && pos[5] == 1) {
-+ wpa = pos;
-+ wpa_len = pos[1] + 2;
-+ }
-+ TI x4 mode: seen DD 04 08 00 28 00
-+ (08 00 28 is TI's OUI)
-+ last byte is probably 0/1 - disabled/enabled
-+ */
-+ case WLAN_EID_RSN:
-+ /* hostap does something with it:
-+ rsn = pos;
-+ rsn_len = pos[1] + 2;
-+ */
-+ break;
-+
-+ default:
-+ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
-+ break;
-+ }
-+ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
-+ }
-+}
-+
-+
-+#ifdef UNUSED
-+void wlan_mgmt_decode_ibssatim(wlan_fr_ibssatim_t * f)
-+{
-+ f->type = WLAN_FSTYPE_ATIM;
-+ /*-- Fixed Fields ----*/
-+ /*-- Information elements */
-+}
-+#endif /* UNUSED */
-+
-+void
-+wlan_mgmt_decode_disassoc(wlan_fr_disassoc_t * f)
-+{
-+ f->type = WLAN_FSTYPE_DISASSOC;
-+
-+ /*-- Fixed Fields ----*/
-+ f->reason = (u16 *) OFFSET(f->hdr, WLAN_DISASSOC_OFF_REASON);
-+
-+ /*-- Information elements */
-+}
-+
-+
-+void
-+wlan_mgmt_decode_assocreq(wlan_fr_assocreq_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+
-+ f->type = WLAN_FSTYPE_ASSOCREQ;
-+
-+ /*-- Fixed Fields ----*/
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_CAP_INFO);
-+ f->listen_int = (u16 *) OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_LISTEN_INT);
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_SSID);
-+ while (ie_ptr < end) {
-+ switch (IE_EID(ie_ptr)) {
-+ case WLAN_EID_SSID:
-+ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_SUPP_RATES:
-+ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_EXT_RATES:
-+ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ default:
-+ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
-+ break;
-+ }
-+ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
-+ }
-+}
-+
-+
-+void
-+wlan_mgmt_decode_assocresp(wlan_fr_assocresp_t * f)
-+{
-+ f->type = WLAN_FSTYPE_ASSOCRESP;
-+
-+ /*-- Fixed Fields ----*/
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_CAP_INFO);
-+ f->status = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_STATUS);
-+ f->aid = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_AID);
-+
-+ /*-- Information elements */
-+ f->supp_rates = (wlan_ie_supp_rates_t *)
-+ OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_SUPP_RATES);
-+}
-+
-+
-+#ifdef UNUSED
-+void
-+wlan_mgmt_decode_reassocreq(wlan_fr_reassocreq_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+ f->type = WLAN_FSTYPE_REASSOCREQ;
-+
-+ /*-- Fixed Fields ----*/
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_CAP_INFO);
-+ f->listen_int = (u16 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_LISTEN_INT);
-+ f->curr_ap = (u8 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_CURR_AP);
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_SSID);
-+ while (ie_ptr < end) {
-+ switch (IE_EID(ie_ptr)) {
-+ case WLAN_EID_SSID:
-+ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_SUPP_RATES:
-+ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_EXT_RATES:
-+ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ default:
-+ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
-+ break;
-+ }
-+ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
-+ }
-+}
-+
-+
-+void
-+wlan_mgmt_decode_reassocresp(wlan_fr_reassocresp_t * f)
-+{
-+ f->type = WLAN_FSTYPE_REASSOCRESP;
-+
-+ /*-- Fixed Fields ----*/
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_CAP_INFO);
-+ f->status = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_STATUS);
-+ f->aid = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_AID);
-+
-+ /*-- Information elements */
-+ f->supp_rates = (wlan_ie_supp_rates_t *)
-+ OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_SUPP_RATES);
-+}
-+
-+
-+void
-+wlan_mgmt_decode_probereq(wlan_fr_probereq_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+ f->type = WLAN_FSTYPE_PROBEREQ;
-+
-+ /*-- Fixed Fields ----*/
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_PROBEREQ_OFF_SSID);
-+ while (ie_ptr < end) {
-+ switch (IE_EID(ie_ptr)) {
-+ case WLAN_EID_SSID:
-+ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_SUPP_RATES:
-+ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_EXT_RATES:
-+ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ default:
-+ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
-+ break;
-+ }
-+ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
-+ }
-+}
-+#endif /* UNUSED */
-+
-+
-+/* TODO: decoding of beacon and proberesp can be merged (similar structure) */
-+void
-+wlan_mgmt_decode_proberesp(wlan_fr_proberesp_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+ f->type = WLAN_FSTYPE_PROBERESP;
-+
-+ /*-- Fixed Fields ----*/
-+ f->ts = (u64 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_TS);
-+ f->bcn_int = (u16 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_BCN_INT);
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_CAP_INFO);
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_PROBERESP_OFF_SSID);
-+ while (ie_ptr < end) {
-+ switch (IE_EID(ie_ptr)) {
-+ case WLAN_EID_SSID:
-+ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_SUPP_RATES:
-+ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_EXT_RATES:
-+ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_FH_PARMS:
-+ f->fh_parms = (wlan_ie_fh_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_DS_PARMS:
-+ f->ds_parms = (wlan_ie_ds_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_CF_PARMS:
-+ f->cf_parms = (wlan_ie_cf_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_IBSS_PARMS:
-+ f->ibss_parms = (wlan_ie_ibss_parms_t *) ie_ptr;
-+ break;
-+#ifdef DONT_DO_IT_ADD_REAL_HANDLING_INSTEAD
-+ case WLAN_EID_COUNTRY:
-+ break;
-+ ...
-+#endif
-+#ifdef SENT_HERE_BY_OPENWRT
-+ /* should those be trapped or handled?? */
-+ case WLAN_EID_ERP_INFO:
-+ break;
-+ case WLAN_EID_NONERP:
-+ break;
-+ case WLAN_EID_GENERIC:
-+ break;
-+#endif
-+ default:
-+ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
-+ break;
-+ }
-+
-+ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
-+ }
-+}
-+
-+
-+void
-+wlan_mgmt_decode_authen(wlan_fr_authen_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+ f->type = WLAN_FSTYPE_AUTHEN;
-+
-+ /*-- Fixed Fields ----*/
-+ f->auth_alg = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_AUTH_ALG);
-+ f->auth_seq = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_AUTH_SEQ);
-+ f->status = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_STATUS);
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_AUTHEN_OFF_CHALLENGE);
-+ if ((ie_ptr < end) && (IE_EID(ie_ptr) == WLAN_EID_CHALLENGE)) {
-+ f->challenge = (wlan_ie_challenge_t *) ie_ptr;
-+ }
-+}
-+
-+
-+void
-+wlan_mgmt_decode_deauthen(wlan_fr_deauthen_t * f)
-+{
-+ f->type = WLAN_FSTYPE_DEAUTHEN;
-+
-+ /*-- Fixed Fields ----*/
-+ f->reason = (u16 *) OFFSET(f->hdr, WLAN_DEAUTHEN_OFF_REASON);
-+
-+ /*-- Information elements */
-+}
-Index: linux-2.6.22/drivers/net/wireless/acx/wlan_compat.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/wlan_compat.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,260 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** This code is based on elements which are
-+** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
-+** info@linux-wlan.com
-+** http://www.linux-wlan.com
-+*/
-+
-+/*=============================================================*/
-+/*------ Establish Platform Identity --------------------------*/
-+/*=============================================================*/
-+/* Key macros: */
-+/* WLAN_CPU_FAMILY */
-+#define WLAN_Ix86 1
-+#define WLAN_PPC 2
-+#define WLAN_Ix96 3
-+#define WLAN_ARM 4
-+#define WLAN_ALPHA 5
-+#define WLAN_MIPS 6
-+#define WLAN_HPPA 7
-+#define WLAN_SPARC 8
-+#define WLAN_SH 9
-+#define WLAN_x86_64 10
-+/* WLAN_CPU_CORE */
-+#define WLAN_I386CORE 1
-+#define WLAN_PPCCORE 2
-+#define WLAN_I296 3
-+#define WLAN_ARMCORE 4
-+#define WLAN_ALPHACORE 5
-+#define WLAN_MIPSCORE 6
-+#define WLAN_HPPACORE 7
-+/* WLAN_CPU_PART */
-+#define WLAN_I386PART 1
-+#define WLAN_MPC860 2
-+#define WLAN_MPC823 3
-+#define WLAN_I296SA 4
-+#define WLAN_PPCPART 5
-+#define WLAN_ARMPART 6
-+#define WLAN_ALPHAPART 7
-+#define WLAN_MIPSPART 8
-+#define WLAN_HPPAPART 9
-+/* WLAN_SYSARCH */
-+#define WLAN_PCAT 1
-+#define WLAN_MBX 2
-+#define WLAN_RPX 3
-+#define WLAN_LWARCH 4
-+#define WLAN_PMAC 5
-+#define WLAN_SKIFF 6
-+#define WLAN_BITSY 7
-+#define WLAN_ALPHAARCH 7
-+#define WLAN_MIPSARCH 9
-+#define WLAN_HPPAARCH 10
-+/* WLAN_HOSTIF (generally set on the command line, not detected) */
-+#define WLAN_PCMCIA 1
-+#define WLAN_ISA 2
-+#define WLAN_PCI 3
-+#define WLAN_USB 4
-+#define WLAN_PLX 5
-+
-+/* Note: the PLX HOSTIF above refers to some vendors implementations for */
-+/* PCI. It's a PLX chip that is a PCI to PCMCIA adapter, but it */
-+/* isn't a real PCMCIA host interface adapter providing all the */
-+/* card&socket services. */
-+
-+#ifdef __powerpc__
-+#ifndef __ppc__
-+#define __ppc__
-+#endif
-+#endif
-+
-+#if (defined(CONFIG_PPC) || defined(CONFIG_8xx))
-+#ifndef __ppc__
-+#define __ppc__
-+#endif
-+#endif
-+
-+#if defined(__x86_64__)
-+ #define WLAN_CPU_FAMILY WLAN_x86_64
-+ #define WLAN_SYSARCH WLAN_PCAT
-+#elif defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__)
-+ #define WLAN_CPU_FAMILY WLAN_Ix86
-+ #define WLAN_CPU_CORE WLAN_I386CORE
-+ #define WLAN_CPU_PART WLAN_I386PART
-+ #define WLAN_SYSARCH WLAN_PCAT
-+#elif defined(__ppc__)
-+ #define WLAN_CPU_FAMILY WLAN_PPC
-+ #define WLAN_CPU_CORE WLAN_PPCCORE
-+ #if defined(CONFIG_MBX)
-+ #define WLAN_CPU_PART WLAN_MPC860
-+ #define WLAN_SYSARCH WLAN_MBX
-+ #elif defined(CONFIG_RPXLITE)
-+ #define WLAN_CPU_PART WLAN_MPC823
-+ #define WLAN_SYSARCH WLAN_RPX
-+ #elif defined(CONFIG_RPXCLASSIC)
-+ #define WLAN_CPU_PART WLAN_MPC860
-+ #define WLAN_SYSARCH WLAN_RPX
-+ #else
-+ #define WLAN_CPU_PART WLAN_PPCPART
-+ #define WLAN_SYSARCH WLAN_PMAC
-+ #endif
-+#elif defined(__arm__)
-+ #define WLAN_CPU_FAMILY WLAN_ARM
-+ #define WLAN_CPU_CORE WLAN_ARMCORE
-+ #define WLAN_CPU_PART WLAN_ARM_PART
-+ #define WLAN_SYSARCH WLAN_SKIFF
-+#elif defined(__alpha__)
-+ #define WLAN_CPU_FAMILY WLAN_ALPHA
-+ #define WLAN_CPU_CORE WLAN_ALPHACORE
-+ #define WLAN_CPU_PART WLAN_ALPHAPART
-+ #define WLAN_SYSARCH WLAN_ALPHAARCH
-+#elif defined(__mips__)
-+ #define WLAN_CPU_FAMILY WLAN_MIPS
-+ #define WLAN_CPU_CORE WLAN_MIPSCORE
-+ #define WLAN_CPU_PART WLAN_MIPSPART
-+ #define WLAN_SYSARCH WLAN_MIPSARCH
-+#elif defined(__hppa__)
-+ #define WLAN_CPU_FAMILY WLAN_HPPA
-+ #define WLAN_CPU_CORE WLAN_HPPACORE
-+ #define WLAN_CPU_PART WLAN_HPPAPART
-+ #define WLAN_SYSARCH WLAN_HPPAARCH
-+#elif defined(__sparc__)
-+ #define WLAN_CPU_FAMILY WLAN_SPARC
-+ #define WLAN_SYSARCH WLAN_SPARC
-+#elif defined(__sh__)
-+ #define WLAN_CPU_FAMILY WLAN_SH
-+ #define WLAN_SYSARCH WLAN_SHARCH
-+ #ifndef __LITTLE_ENDIAN__
-+ #define __LITTLE_ENDIAN__
-+ #endif
-+#else
-+ #error "No CPU identified!"
-+#endif
-+
-+/*
-+ Some big endian machines implicitly do all I/O in little endian mode.
-+
-+ In particular:
-+ Linux/PPC on PowerMacs (PCI)
-+ Arm/Intel Xscale (PCI)
-+
-+ This may also affect PLX boards and other BE &| PPC platforms;
-+ as new ones are discovered, add them below.
-+*/
-+
-+#if ((WLAN_SYSARCH == WLAN_SKIFF) || (WLAN_SYSARCH == WLAN_PMAC))
-+#define REVERSE_ENDIAN
-+#endif
-+
-+/*=============================================================*/
-+/*------ Hardware Portability Macros --------------------------*/
-+/*=============================================================*/
-+#if (WLAN_CPU_FAMILY == WLAN_PPC)
-+#define wlan_inw(a) in_be16((unsigned short *)((a)+_IO_BASE))
-+#define wlan_inw_le16_to_cpu(a) inw((a))
-+#define wlan_outw(v,a) out_be16((unsigned short *)((a)+_IO_BASE), (v))
-+#define wlan_outw_cpu_to_le16(v,a) outw((v),(a))
-+#else
-+#define wlan_inw(a) inw((a))
-+#define wlan_inw_le16_to_cpu(a) __cpu_to_le16(inw((a)))
-+#define wlan_outw(v,a) outw((v),(a))
-+#define wlan_outw_cpu_to_le16(v,a) outw(__cpu_to_le16((v)),(a))
-+#endif
-+
-+/*=============================================================*/
-+/*------ Bit settings -----------------------------------------*/
-+/*=============================================================*/
-+#define ieee2host16(n) __le16_to_cpu(n)
-+#define ieee2host32(n) __le32_to_cpu(n)
-+#define host2ieee16(n) __cpu_to_le16(n)
-+#define host2ieee32(n) __cpu_to_le32(n)
-+
-+/* for constants */
-+#ifdef __LITTLE_ENDIAN
-+ #define IEEE16(a,n) a = n, a##i = n,
-+#else
-+ #ifdef __BIG_ENDIAN
-+ /* shifts would produce gcc warnings. Oh well... */
-+ #define IEEE16(a,n) a = n, a##i = ((n&0xff)*256 + ((n&0xff00)/256)),
-+ #else
-+ #error give me endianness or give me death
-+ #endif
-+#endif
-+
-+/*=============================================================*/
-+/*------ Compiler Portability Macros --------------------------*/
-+/*=============================================================*/
-+#define WLAN_PACKED __attribute__ ((packed))
-+
-+/* Interrupt handler backwards compatibility stuff */
-+#ifndef IRQ_NONE
-+#define IRQ_NONE
-+#define IRQ_HANDLED
-+typedef void irqreturn_t;
-+#endif
-+
-+#ifndef ARPHRD_IEEE80211_PRISM
-+#define ARPHRD_IEEE80211_PRISM 802
-+#endif
-+
-+#define ETH_P_80211_RAW (ETH_P_ECONET + 1)
-+
-+/*============================================================================*
-+ * Constants *
-+ *============================================================================*/
-+#define WLAN_IEEE_OUI_LEN 3
-+
-+/*============================================================================*
-+ * Types *
-+ *============================================================================*/
-+
-+/* local ether header type */
-+typedef struct wlan_ethhdr {
-+ u8 daddr[ETH_ALEN];
-+ u8 saddr[ETH_ALEN];
-+ u16 type;
-+} WLAN_PACKED wlan_ethhdr_t;
-+
-+/* local llc header type */
-+typedef struct wlan_llc {
-+ u8 dsap;
-+ u8 ssap;
-+ u8 ctl;
-+} WLAN_PACKED wlan_llc_t;
-+
-+/* local snap header type */
-+typedef struct wlan_snap {
-+ u8 oui[WLAN_IEEE_OUI_LEN];
-+ u16 type;
-+} WLAN_PACKED wlan_snap_t;
-Index: linux-2.6.22/drivers/net/wireless/acx/wlan_hdr.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/wlan_hdr.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,497 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** This code is based on elements which are
-+** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
-+** info@linux-wlan.com
-+** http://www.linux-wlan.com
-+*/
-+
-+/* mini-doc
-+
-+Here are all 11b/11g/11a rates and modulations:
-+
-+ 11b 11g 11a
-+ --- --- ---
-+ 1 |B |B |
-+ 2 |Q |Q |
-+ 5.5|Cp |C p|
-+ 6 | |Od |O
-+ 9 | |od |o
-+11 |Cp |C p|
-+12 | |Od |O
-+18 | |od |o
-+22 | | p|
-+24 | |Od |O
-+33 | | p|
-+36 | |od |o
-+48 | |od |o
-+54 | |od |o
-+
-+Mandatory:
-+ B - DBPSK (Differential Binary Phase Shift Keying)
-+ Q - DQPSK (Differential Quaternary Phase Shift Keying)
-+ C - CCK (Complementary Code Keying, a form of DSSS
-+ (Direct Sequence Spread Spectrum) modulation)
-+ O - OFDM (Orthogonal Frequency Division Multiplexing)
-+Optional:
-+ o - OFDM
-+ d - CCK-OFDM (also known as DSSS-OFDM)
-+ p - PBCC (Packet Binary Convolutional Coding)
-+
-+The term CCK-OFDM may be used interchangeably with DSSS-OFDM
-+(the IEEE 802.11g-2003 standard uses the latter terminology).
-+In the CCK-OFDM, the PLCP header of the frame uses the CCK form of DSSS,
-+while the PLCP payload (the MAC frame) is modulated using OFDM.
-+
-+Basically, you must use CCK-OFDM if you have mixed 11b/11g environment,
-+or else (pure OFDM) 11b equipment may not realize that AP
-+is sending a packet and start sending its own one.
-+Sadly, looks like acx111 does not support CCK-OFDM, only pure OFDM.
-+
-+Re PBCC: avoid using it. It makes sense only if you have
-+TI "11b+" hardware. You _must_ use PBCC in order to reach 22Mbps on it.
-+
-+Preambles:
-+
-+Long preamble (at 1Mbit rate, takes 144 us):
-+ 16 bytes ones
-+ 2 bytes 0xF3A0 (lsb sent first)
-+PLCP header follows (at 1Mbit also):
-+ 1 byte Signal: speed, in 0.1Mbit units, except for:
-+ 33Mbit: 33 (instead of 330 - doesn't fit in octet)
-+ all CCK-OFDM rates: 30
-+ 1 byte Service
-+ 0,1,4: reserved
-+ 2: 1=locked clock
-+ 3: 1=PBCC
-+ 5: Length Extension (PBCC 22,33Mbit (11g only)) <-
-+ 6: Length Extension (PBCC 22,33Mbit (11g only)) <- BLACK MAGIC HERE
-+ 7: Length Extension <-
-+ 2 bytes Length (time needed to tx this frame)
-+ a) 5.5 Mbit/s CCK
-+ Length = octets*8/5.5, rounded up to integer
-+ b) 11 Mbit/s CCK
-+ Length = octets*8/11, rounded up to integer
-+ Service bit 7:
-+ 0 = rounding took less than 8/11
-+ 1 = rounding took more than or equal to 8/11
-+ c) 5.5 Mbit/s PBCC
-+ Length = (octets+1)*8/5.5, rounded up to integer
-+ d) 11 Mbit/s PBCC
-+ Length = (octets+1)*8/11, rounded up to integer
-+ Service bit 7:
-+ 0 = rounding took less than 8/11
-+ 1 = rounding took more than or equal to 8/11
-+ e) 22 Mbit/s PBCC
-+ Length = (octets+1)*8/22, rounded up to integer
-+ Service bits 6,7:
-+ 00 = rounding took less than 8/22ths
-+ 01 = rounding took 8/22...15/22ths
-+ 10 = rounding took 16/22ths or more.
-+ f) 33 Mbit/s PBCC
-+ Length = (octets+1)*8/33, rounded up to integer
-+ Service bits 5,6,7:
-+ 000 rounding took less than 8/33
-+ 001 rounding took 8/33...15/33
-+ 010 rounding took 16/33...23/33
-+ 011 rounding took 24/33...31/33
-+ 100 rounding took 32/33 or more
-+ 2 bytes CRC
-+
-+PSDU follows (up to 2346 bytes at selected rate)
-+
-+While Signal value alone is not enough to determine rate and modulation,
-+Signal+Service is always sufficient.
-+
-+Short preamble (at 1Mbit rate, takes 72 us):
-+ 7 bytes zeroes
-+ 2 bytes 0x05CF (lsb sent first)
-+PLCP header follows *at 2Mbit/s*. Format is the same as in long preamble.
-+PSDU follows (up to 2346 bytes at selected rate)
-+
-+OFDM preamble is completely different, uses OFDM
-+modulation from the start and thus easily identifiable.
-+Not shown here.
-+*/
-+
-+
-+/***********************************************************************
-+** Constants
-+*/
-+
-+#define WLAN_HDR_A3_LEN 24
-+#define WLAN_HDR_A4_LEN 30
-+/* IV structure:
-+** 3 bytes: Initialization Vector (24 bits)
-+** 1 byte: 0..5: padding, must be 0; 6..7: key selector (0-3)
-+*/
-+#define WLAN_WEP_IV_LEN 4
-+/* 802.11 says 2312 but looks like 2312 is a max size of _WEPed data_ */
-+#define WLAN_DATA_MAXLEN 2304
-+#define WLAN_WEP_ICV_LEN 4
-+#define WLAN_FCS_LEN 4
-+#define WLAN_A3FR_MAXLEN (WLAN_HDR_A3_LEN + WLAN_DATA_MAXLEN)
-+#define WLAN_A4FR_MAXLEN (WLAN_HDR_A4_LEN + WLAN_DATA_MAXLEN)
-+#define WLAN_A3FR_MAXLEN_FCS (WLAN_HDR_A3_LEN + WLAN_DATA_MAXLEN + 4)
-+#define WLAN_A4FR_MAXLEN_FCS (WLAN_HDR_A4_LEN + WLAN_DATA_MAXLEN + 4)
-+#define WLAN_A3FR_MAXLEN_WEP (WLAN_A3FR_MAXLEN + 8)
-+#define WLAN_A4FR_MAXLEN_WEP (WLAN_A4FR_MAXLEN + 8)
-+#define WLAN_A3FR_MAXLEN_WEP_FCS (WLAN_A3FR_MAXLEN_FCS + 8)
-+#define WLAN_A4FR_MAXLEN_WEP_FCS (WLAN_A4FR_MAXLEN_FCS + 8)
-+
-+#define WLAN_BSS_TS_LEN 8
-+#define WLAN_SSID_MAXLEN 32
-+#define WLAN_BEACON_FR_MAXLEN (WLAN_HDR_A3_LEN + 334)
-+#define WLAN_ATIM_FR_MAXLEN (WLAN_HDR_A3_LEN + 0)
-+#define WLAN_DISASSOC_FR_MAXLEN (WLAN_HDR_A3_LEN + 2)
-+#define WLAN_ASSOCREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 48)
-+#define WLAN_ASSOCRESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 16)
-+#define WLAN_REASSOCREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 54)
-+#define WLAN_REASSOCRESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 16)
-+#define WLAN_PROBEREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 44)
-+#define WLAN_PROBERESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 78)
-+#define WLAN_AUTHEN_FR_MAXLEN (WLAN_HDR_A3_LEN + 261)
-+#define WLAN_DEAUTHEN_FR_MAXLEN (WLAN_HDR_A3_LEN + 2)
-+#define WLAN_CHALLENGE_IE_LEN 130
-+#define WLAN_CHALLENGE_LEN 128
-+#define WLAN_WEP_MAXKEYLEN 13
-+#define WLAN_WEP_NKEYS 4
-+
-+/*--- Frame Control Field -------------------------------------*/
-+/* Frame Types */
-+#define WLAN_FTYPE_MGMT 0x00
-+#define WLAN_FTYPE_CTL 0x01
-+#define WLAN_FTYPE_DATA 0x02
-+
-+/* Frame subtypes */
-+/* Management */
-+#define WLAN_FSTYPE_ASSOCREQ 0x00
-+#define WLAN_FSTYPE_ASSOCRESP 0x01
-+#define WLAN_FSTYPE_REASSOCREQ 0x02
-+#define WLAN_FSTYPE_REASSOCRESP 0x03
-+#define WLAN_FSTYPE_PROBEREQ 0x04
-+#define WLAN_FSTYPE_PROBERESP 0x05
-+#define WLAN_FSTYPE_BEACON 0x08
-+#define WLAN_FSTYPE_ATIM 0x09
-+#define WLAN_FSTYPE_DISASSOC 0x0a
-+#define WLAN_FSTYPE_AUTHEN 0x0b
-+#define WLAN_FSTYPE_DEAUTHEN 0x0c
-+
-+/* Control */
-+#define WLAN_FSTYPE_PSPOLL 0x0a
-+#define WLAN_FSTYPE_RTS 0x0b
-+#define WLAN_FSTYPE_CTS 0x0c
-+#define WLAN_FSTYPE_ACK 0x0d
-+#define WLAN_FSTYPE_CFEND 0x0e
-+#define WLAN_FSTYPE_CFENDCFACK 0x0f
-+
-+/* Data */
-+#define WLAN_FSTYPE_DATAONLY 0x00
-+#define WLAN_FSTYPE_DATA_CFACK 0x01
-+#define WLAN_FSTYPE_DATA_CFPOLL 0x02
-+#define WLAN_FSTYPE_DATA_CFACK_CFPOLL 0x03
-+#define WLAN_FSTYPE_NULL 0x04
-+#define WLAN_FSTYPE_CFACK 0x05
-+#define WLAN_FSTYPE_CFPOLL 0x06
-+#define WLAN_FSTYPE_CFACK_CFPOLL 0x07
-+
-+/*--- FC Constants v. 2.0 ------------------------------------*/
-+/* Each constant is defined twice: WF_CONST is in host */
-+/* byteorder, WF_CONSTi is in ieee byteorder. */
-+/* Usage: */
-+/* printf("the frame subtype is %X", WF_FC_FTYPEi & rx.fc); */
-+/* tx.fc = WF_FTYPE_CTLi | WF_FSTYPE_RTSi; */
-+/*------------------------------------------------------------*/
-+
-+enum {
-+/*--- Frame Control Field -------------------------------------*/
-+/* Protocol version: always 0 for current 802.11 standards */
-+IEEE16(WF_FC_PVER, 0x0003)
-+IEEE16(WF_FC_FTYPE, 0x000c)
-+IEEE16(WF_FC_FSTYPE, 0x00f0)
-+IEEE16(WF_FC_TODS, 0x0100)
-+IEEE16(WF_FC_FROMDS, 0x0200)
-+IEEE16(WF_FC_FROMTODS, 0x0300)
-+IEEE16(WF_FC_MOREFRAG, 0x0400)
-+IEEE16(WF_FC_RETRY, 0x0800)
-+/* Indicates PS mode in which STA will be after successful completion
-+** of current frame exchange sequence. Always 0 for AP frames */
-+IEEE16(WF_FC_PWRMGT, 0x1000)
-+/* What MoreData=1 means:
-+** From AP to STA in PS mode: don't sleep yet, I have more frames for you
-+** From Contention-Free (CF) Pollable STA in response to a CF-Poll:
-+** STA has buffered frames for transmission in response to next CF-Poll
-+** Bcast/mcast frames transmitted from AP:
-+** when additional bcast/mcast frames remain to be transmitted by AP
-+** during this beacon interval
-+** In all other cases MoreData=0 */
-+IEEE16(WF_FC_MOREDATA, 0x2000)
-+IEEE16(WF_FC_ISWEP, 0x4000)
-+IEEE16(WF_FC_ORDER, 0x8000)
-+
-+/* Frame Types */
-+IEEE16(WF_FTYPE_MGMT, 0x00)
-+IEEE16(WF_FTYPE_CTL, 0x04)
-+IEEE16(WF_FTYPE_DATA, 0x08)
-+
-+/* Frame subtypes */
-+/* Management */
-+IEEE16(WF_FSTYPE_ASSOCREQ, 0x00)
-+IEEE16(WF_FSTYPE_ASSOCRESP, 0x10)
-+IEEE16(WF_FSTYPE_REASSOCREQ, 0x20)
-+IEEE16(WF_FSTYPE_REASSOCRESP, 0x30)
-+IEEE16(WF_FSTYPE_PROBEREQ, 0x40)
-+IEEE16(WF_FSTYPE_PROBERESP, 0x50)
-+IEEE16(WF_FSTYPE_BEACON, 0x80)
-+IEEE16(WF_FSTYPE_ATIM, 0x90)
-+IEEE16(WF_FSTYPE_DISASSOC, 0xa0)
-+IEEE16(WF_FSTYPE_AUTHEN, 0xb0)
-+IEEE16(WF_FSTYPE_DEAUTHEN, 0xc0)
-+
-+/* Control */
-+IEEE16(WF_FSTYPE_PSPOLL, 0xa0)
-+IEEE16(WF_FSTYPE_RTS, 0xb0)
-+IEEE16(WF_FSTYPE_CTS, 0xc0)
-+IEEE16(WF_FSTYPE_ACK, 0xd0)
-+IEEE16(WF_FSTYPE_CFEND, 0xe0)
-+IEEE16(WF_FSTYPE_CFENDCFACK, 0xf0)
-+
-+/* Data */
-+IEEE16(WF_FSTYPE_DATAONLY, 0x00)
-+IEEE16(WF_FSTYPE_DATA_CFACK, 0x10)
-+IEEE16(WF_FSTYPE_DATA_CFPOLL, 0x20)
-+IEEE16(WF_FSTYPE_DATA_CFACK_CFPOLL, 0x30)
-+IEEE16(WF_FSTYPE_NULL, 0x40)
-+IEEE16(WF_FSTYPE_CFACK, 0x50)
-+IEEE16(WF_FSTYPE_CFPOLL, 0x60)
-+IEEE16(WF_FSTYPE_CFACK_CFPOLL, 0x70)
-+};
-+
-+
-+/***********************************************************************
-+** Macros
-+*/
-+
-+/*--- Duration Macros ----------------------------------------*/
-+/* Macros to get/set the bitfields of the Duration Field */
-+/* - the duration value is only valid when bit15 is zero */
-+/* - the firmware handles these values, so I'm not going */
-+/* to use these macros right now. */
-+/*------------------------------------------------------------*/
-+
-+/*--- Sequence Control Macros -------------------------------*/
-+/* Macros to get/set the bitfields of the Sequence Control */
-+/* Field. */
-+/*------------------------------------------------------------*/
-+#define WLAN_GET_SEQ_FRGNUM(n) ((u16)(n) & 0x000f)
-+#define WLAN_GET_SEQ_SEQNUM(n) (((u16)(n) & 0xfff0) >> 4)
-+
-+/*--- Data ptr macro -----------------------------------------*/
-+/* Creates a u8* to the data portion of a frame */
-+/* Assumes you're passing in a ptr to the beginning of the hdr*/
-+/*------------------------------------------------------------*/
-+#define WLAN_HDR_A3_DATAP(p) (((u8*)(p)) + WLAN_HDR_A3_LEN)
-+#define WLAN_HDR_A4_DATAP(p) (((u8*)(p)) + WLAN_HDR_A4_LEN)
-+
-+
-+/***********************************************************************
-+** Types
-+*/
-+
-+/* 802.11 header type
-+**
-+** Note the following:
-+** a1 *always* is receiver's mac or bcast/mcast
-+** a2 *always* is transmitter's mac, if a2 exists
-+** seq: [0:3] frag#, [4:15] seq# - used for dup detection
-+** (dups from retries have same seq#) */
-+typedef struct wlan_hdr {
-+ u16 fc;
-+ u16 dur;
-+ u8 a1[ETH_ALEN];
-+ u8 a2[ETH_ALEN];
-+ u8 a3[ETH_ALEN];
-+ u16 seq;
-+ u8 a4[ETH_ALEN];
-+} WLAN_PACKED wlan_hdr_t;
-+
-+/* Separate structs for use if frame type is known */
-+typedef struct wlan_hdr_a3 {
-+ u16 fc;
-+ u16 dur;
-+ u8 a1[ETH_ALEN];
-+ u8 a2[ETH_ALEN];
-+ u8 a3[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED wlan_hdr_a3_t;
-+
-+typedef struct wlan_hdr_mgmt {
-+ u16 fc;
-+ u16 dur;
-+ u8 da[ETH_ALEN];
-+ u8 sa[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED wlan_hdr_mgmt_t;
-+
-+#ifdef NOT_NEEDED_YET
-+typedef struct { /* ad-hoc peer->peer (to/from DS = 0/0) */
-+ u16 fc;
-+ u16 dur;
-+ u8 da[ETH_ALEN];
-+ u8 sa[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED ibss;
-+typedef struct { /* ap->sta (to/from DS = 0/1) */
-+ u16 fc;
-+ u16 dur;
-+ u8 da[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+ u8 sa[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED fromap;
-+typedef struct { /* sta->ap (to/from DS = 1/0) */
-+ u16 fc;
-+ u16 dur;
-+ u8 bssid[ETH_ALEN];
-+ u8 sa[ETH_ALEN];
-+ u8 da[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED toap;
-+typedef struct { /* wds->wds (to/from DS = 1/1), the only 4addr pkt */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+ u8 ta[ETH_ALEN];
-+ u8 da[ETH_ALEN];
-+ u16 seq;
-+ u8 sa[ETH_ALEN];
-+} WLAN_PACKED wds;
-+typedef struct { /* all management packets */
-+ u16 fc;
-+ u16 dur;
-+ u8 da[ETH_ALEN];
-+ u8 sa[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED mgmt;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+ u8 ta[ETH_ALEN];
-+} WLAN_PACKED rts;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+} WLAN_PACKED cts;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+} WLAN_PACKED ack;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ /* NB: this one holds Assoc ID in dur field: */
-+ u16 aid;
-+ u8 bssid[ETH_ALEN];
-+ u8 ta[ETH_ALEN];
-+} WLAN_PACKED pspoll;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+} WLAN_PACKED cfend;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+} WLAN_PACKED cfendcfack;
-+#endif
-+
-+/* Prism header emulation (monitor mode) */
-+typedef struct wlanitem_u32 {
-+ u32 did;
-+ u16 status;
-+ u16 len;
-+ u32 data;
-+} WLAN_PACKED wlanitem_u32_t;
-+#define WLANITEM_STATUS_data_ok 0
-+#define WLANITEM_STATUS_no_value 1
-+#define WLANITEM_STATUS_invalid_itemname 2
-+#define WLANITEM_STATUS_invalid_itemdata 3
-+#define WLANITEM_STATUS_missing_itemdata 4
-+#define WLANITEM_STATUS_incomplete_itemdata 5
-+#define WLANITEM_STATUS_invalid_msg_did 6
-+#define WLANITEM_STATUS_invalid_mib_did 7
-+#define WLANITEM_STATUS_missing_conv_func 8
-+#define WLANITEM_STATUS_string_too_long 9
-+#define WLANITEM_STATUS_data_out_of_range 10
-+#define WLANITEM_STATUS_string_too_short 11
-+#define WLANITEM_STATUS_missing_valid_func 12
-+#define WLANITEM_STATUS_unknown 13
-+#define WLANITEM_STATUS_invalid_did 14
-+#define WLANITEM_STATUS_missing_print_func 15
-+
-+#define WLAN_DEVNAMELEN_MAX 16
-+typedef struct wlansniffrm {
-+ u32 msgcode;
-+ u32 msglen;
-+ u8 devname[WLAN_DEVNAMELEN_MAX];
-+ wlanitem_u32_t hosttime;
-+ wlanitem_u32_t mactime;
-+ wlanitem_u32_t channel;
-+ wlanitem_u32_t rssi;
-+ wlanitem_u32_t sq;
-+ wlanitem_u32_t signal;
-+ wlanitem_u32_t noise;
-+ wlanitem_u32_t rate;
-+ wlanitem_u32_t istx; /* tx? 0:no 1:yes */
-+ wlanitem_u32_t frmlen;
-+} WLAN_PACKED wlansniffrm_t;
-+#define WLANSNIFFFRM 0x0041
-+#define WLANSNIFFFRM_hosttime 0x1041
-+#define WLANSNIFFFRM_mactime 0x2041
-+#define WLANSNIFFFRM_channel 0x3041
-+#define WLANSNIFFFRM_rssi 0x4041
-+#define WLANSNIFFFRM_sq 0x5041
-+#define WLANSNIFFFRM_signal 0x6041
-+#define WLANSNIFFFRM_noise 0x7041
-+#define WLANSNIFFFRM_rate 0x8041
-+#define WLANSNIFFFRM_istx 0x9041
-+#define WLANSNIFFFRM_frmlen 0xA041
-Index: linux-2.6.22/drivers/net/wireless/acx/wlan_mgmt.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/wlan_mgmt.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,582 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** This code is based on elements which are
-+** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
-+** info@linux-wlan.com
-+** http://www.linux-wlan.com
-+*/
-+
-+/***********************************************************************
-+** Constants
-+*/
-+
-+/*-- Information Element IDs --------------------*/
-+#define WLAN_EID_SSID 0
-+#define WLAN_EID_SUPP_RATES 1
-+#define WLAN_EID_FH_PARMS 2
-+#define WLAN_EID_DS_PARMS 3
-+#define WLAN_EID_CF_PARMS 4
-+#define WLAN_EID_TIM 5
-+#define WLAN_EID_IBSS_PARMS 6
-+#define WLAN_EID_COUNTRY 7 /* 802.11d */
-+#define WLAN_EID_FH_HOP_PARMS 8 /* 802.11d */
-+#define WLAN_EID_FH_TABLE 9 /* 802.11d */
-+#define WLAN_EID_REQUEST 10 /* 802.11d */
-+/*-- values 11-15 reserved --*/
-+#define WLAN_EID_CHALLENGE 16
-+/*-- values 17-31 reserved for challenge text extension --*/
-+#define WLAN_EID_PWR_CONSTRAINT 32 /* 11h PowerConstraint */
-+#define WLAN_EID_ERP_INFO 42 /* was seen from WRT54GS with OpenWrt */
-+#define WLAN_EID_NONERP 47 /* was seen from WRT54GS with OpenWrt */
-+#define WLAN_EID_RSN 48
-+#define WLAN_EID_EXT_RATES 50
-+#define WLAN_EID_UNKNOWN128 128
-+#define WLAN_EID_UNKNOWN133 133
-+#define WLAN_EID_GENERIC 221 /* was seen from WRT54GS with OpenWrt */
-+#define WLAN_EID_UNKNOWN223 223
-+
-+#if 0
-+#define WLAN_EID_PWR_CAP 33 /* 11h PowerCapability */
-+#define WLAN_EID_TPC_REQUEST 34 /* 11h TPC Request */
-+#define WLAN_EID_TPC_REPORT 35 /* 11h TPC Report */
-+#define WLAN_EID_SUPP_CHANNELS 36 /* 11h Supported Channels */
-+#define WLAN_EID_CHANNEL_SWITCH 37 /* 11h ChannelSwitch */
-+#define WLAN_EID_MEASURE_REQUEST 38 /* 11h MeasurementRequest */
-+#define WLAN_EID_MEASURE_REPORT 39 /* 11h MeasurementReport */
-+#define WLAN_EID_QUIET_ID 40 /* 11h Quiet */
-+#define WLAN_EID_IBSS_DFS_ID 41 /* 11h IBSS_DFS */
-+#endif
-+
-+/*-- Reason Codes -------------------------------*/
-+#define WLAN_MGMT_REASON_RSVD 0
-+#define WLAN_MGMT_REASON_UNSPEC 1
-+#define WLAN_MGMT_REASON_PRIOR_AUTH_INVALID 2
-+#define WLAN_MGMT_REASON_DEAUTH_LEAVING 3
-+#define WLAN_MGMT_REASON_DISASSOC_INACTIVE 4
-+#define WLAN_MGMT_REASON_DISASSOC_AP_BUSY 5
-+#define WLAN_MGMT_REASON_CLASS2_NONAUTH 6
-+#define WLAN_MGMT_REASON_CLASS3_NONASSOC 7
-+#define WLAN_MGMT_REASON_DISASSOC_STA_HASLEFT 8
-+#define WLAN_MGMT_REASON_CANT_ASSOC_NONAUTH 9
-+
-+/*-- Status Codes -------------------------------*/
-+#define WLAN_MGMT_STATUS_SUCCESS 0
-+#define WLAN_MGMT_STATUS_UNSPEC_FAILURE 1
-+#define WLAN_MGMT_STATUS_CAPS_UNSUPPORTED 10
-+#define WLAN_MGMT_STATUS_REASSOC_NO_ASSOC 11
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_UNSPEC 12
-+#define WLAN_MGMT_STATUS_UNSUPPORTED_AUTHALG 13
-+#define WLAN_MGMT_STATUS_RX_AUTH_NOSEQ 14
-+#define WLAN_MGMT_STATUS_CHALLENGE_FAIL 15
-+#define WLAN_MGMT_STATUS_AUTH_TIMEOUT 16
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_BUSY 17
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_RATES 18
-+/* p80211b additions */
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOSHORT 19
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOPBCC 20
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOAGILITY 21
-+
-+/*-- Auth Algorithm Field ---------------------------*/
-+#define WLAN_AUTH_ALG_OPENSYSTEM 0
-+#define WLAN_AUTH_ALG_SHAREDKEY 1
-+
-+/*-- Management Frame Field Offsets -------------*/
-+/* Note: Not all fields are listed because of variable lengths */
-+/* Note: These offsets are from the start of the frame data */
-+
-+#define WLAN_BEACON_OFF_TS 0
-+#define WLAN_BEACON_OFF_BCN_INT 8
-+#define WLAN_BEACON_OFF_CAPINFO 10
-+#define WLAN_BEACON_OFF_SSID 12
-+
-+#define WLAN_DISASSOC_OFF_REASON 0
-+
-+#define WLAN_ASSOCREQ_OFF_CAP_INFO 0
-+#define WLAN_ASSOCREQ_OFF_LISTEN_INT 2
-+#define WLAN_ASSOCREQ_OFF_SSID 4
-+
-+#define WLAN_ASSOCRESP_OFF_CAP_INFO 0
-+#define WLAN_ASSOCRESP_OFF_STATUS 2
-+#define WLAN_ASSOCRESP_OFF_AID 4
-+#define WLAN_ASSOCRESP_OFF_SUPP_RATES 6
-+
-+#define WLAN_REASSOCREQ_OFF_CAP_INFO 0
-+#define WLAN_REASSOCREQ_OFF_LISTEN_INT 2
-+#define WLAN_REASSOCREQ_OFF_CURR_AP 4
-+#define WLAN_REASSOCREQ_OFF_SSID 10
-+
-+#define WLAN_REASSOCRESP_OFF_CAP_INFO 0
-+#define WLAN_REASSOCRESP_OFF_STATUS 2
-+#define WLAN_REASSOCRESP_OFF_AID 4
-+#define WLAN_REASSOCRESP_OFF_SUPP_RATES 6
-+
-+#define WLAN_PROBEREQ_OFF_SSID 0
-+
-+#define WLAN_PROBERESP_OFF_TS 0
-+#define WLAN_PROBERESP_OFF_BCN_INT 8
-+#define WLAN_PROBERESP_OFF_CAP_INFO 10
-+#define WLAN_PROBERESP_OFF_SSID 12
-+
-+#define WLAN_AUTHEN_OFF_AUTH_ALG 0
-+#define WLAN_AUTHEN_OFF_AUTH_SEQ 2
-+#define WLAN_AUTHEN_OFF_STATUS 4
-+#define WLAN_AUTHEN_OFF_CHALLENGE 6
-+
-+#define WLAN_DEAUTHEN_OFF_REASON 0
-+
-+enum {
-+IEEE16(WF_MGMT_CAP_ESS, 0x0001)
-+IEEE16(WF_MGMT_CAP_IBSS, 0x0002)
-+/* In (re)assoc request frames by STA:
-+** Pollable=0, PollReq=0: STA is not CF-Pollable
-+** 0 1: STA is CF-Pollable, not requesting to be placed on the CF-Polling list
-+** 1 0: STA is CF-Pollable, requesting to be placed on the CF-Polling list
-+** 1 1: STA is CF-Pollable, requesting never to be polled
-+** In beacon, proberesp, (re)assoc resp frames by AP:
-+** 0 0: No point coordinator at AP
-+** 0 1: Point coordinator at AP for delivery only (no polling)
-+** 1 0: Point coordinator at AP for delivery and polling
-+** 1 1: Reserved */
-+IEEE16(WF_MGMT_CAP_CFPOLLABLE, 0x0004)
-+IEEE16(WF_MGMT_CAP_CFPOLLREQ, 0x0008)
-+/* 1=non-WEP data frames are disallowed */
-+IEEE16(WF_MGMT_CAP_PRIVACY, 0x0010)
-+/* In beacon, proberesp, (re)assocresp by AP/AdHoc:
-+** 1=use of shortpre is allowed ("I can receive shortpre") */
-+IEEE16(WF_MGMT_CAP_SHORT, 0x0020)
-+IEEE16(WF_MGMT_CAP_PBCC, 0x0040)
-+IEEE16(WF_MGMT_CAP_AGILITY, 0x0080)
-+/* In (re)assoc request frames by STA:
-+** 1=short slot time implemented and enabled
-+** NB: AP shall use long slot time beginning at the next Beacon after assoc
-+** of STA with this bit set to 0
-+** In beacon, proberesp, (re)assoc resp frames by AP:
-+** currently used slot time value: 0/1 - long/short */
-+IEEE16(WF_MGMT_CAP_SHORTSLOT, 0x0400)
-+/* In (re)assoc request frames by STA: 1=CCK-OFDM is implemented and enabled
-+** In beacon, proberesp, (re)assoc resp frames by AP/AdHoc:
-+** 1=CCK-OFDM is allowed */
-+IEEE16(WF_MGMT_CAP_CCKOFDM, 0x2000)
-+};
-+
-+
-+/***********************************************************************
-+** Types
-+*/
-+
-+/* Information Element types */
-+
-+/* prototype structure, all IEs start with these members */
-+typedef struct wlan_ie {
-+ u8 eid;
-+ u8 len;
-+} WLAN_PACKED wlan_ie_t;
-+
-+/*-- Service Set Identity (SSID) -----------------*/
-+typedef struct wlan_ie_ssid {
-+ u8 eid;
-+ u8 len;
-+ u8 ssid[1]; /* may be zero */
-+} WLAN_PACKED wlan_ie_ssid_t;
-+
-+/*-- Supported Rates -----------------------------*/
-+typedef struct wlan_ie_supp_rates {
-+ u8 eid;
-+ u8 len;
-+ u8 rates[1]; /* had better be at LEAST one! */
-+} WLAN_PACKED wlan_ie_supp_rates_t;
-+
-+/*-- FH Parameter Set ----------------------------*/
-+typedef struct wlan_ie_fh_parms {
-+ u8 eid;
-+ u8 len;
-+ u16 dwell;
-+ u8 hopset;
-+ u8 hoppattern;
-+ u8 hopindex;
-+} WLAN_PACKED wlan_ie_fh_parms_t;
-+
-+/*-- DS Parameter Set ----------------------------*/
-+typedef struct wlan_ie_ds_parms {
-+ u8 eid;
-+ u8 len;
-+ u8 curr_ch;
-+} WLAN_PACKED wlan_ie_ds_parms_t;
-+
-+/*-- CF Parameter Set ----------------------------*/
-+typedef struct wlan_ie_cf_parms {
-+ u8 eid;
-+ u8 len;
-+ u8 cfp_cnt;
-+ u8 cfp_period;
-+ u16 cfp_maxdur;
-+ u16 cfp_durremaining;
-+} WLAN_PACKED wlan_ie_cf_parms_t;
-+
-+/*-- TIM ------------------------------------------*/
-+typedef struct wlan_ie_tim {
-+ u8 eid;
-+ u8 len;
-+ u8 dtim_cnt;
-+ u8 dtim_period;
-+ u8 bitmap_ctl;
-+ u8 virt_bm[1];
-+} WLAN_PACKED wlan_ie_tim_t;
-+
-+/*-- IBSS Parameter Set ---------------------------*/
-+typedef struct wlan_ie_ibss_parms {
-+ u8 eid;
-+ u8 len;
-+ u16 atim_win;
-+} WLAN_PACKED wlan_ie_ibss_parms_t;
-+
-+/*-- Challenge Text ------------------------------*/
-+typedef struct wlan_ie_challenge {
-+ u8 eid;
-+ u8 len;
-+ u8 challenge[1];
-+} WLAN_PACKED wlan_ie_challenge_t;
-+
-+/*-- ERP (42) -------------------------------------*/
-+typedef struct wlan_ie_erp {
-+ u8 eid;
-+ u8 len;
-+ /* bit 0:Non ERP present
-+ ** 1:Use Protection
-+ ** 2:Barker Preamble mode
-+ ** 3-7:reserved */
-+ u8 erp;
-+} WLAN_PACKED wlan_ie_erp_t;
-+
-+/* Types for parsing mgmt frames */
-+
-+/* prototype structure, all mgmt frame types will start with these members */
-+typedef struct wlan_fr_mgmt {
-+ u16 type;
-+ u16 len; /* DOES NOT include FCS */
-+ wlan_hdr_t *hdr;
-+ /* used for target specific data, skb in Linux */
-+ /*-- fixed fields -----------*/
-+ /*-- info elements ----------*/
-+} WLAN_PACKED wlan_fr_mgmt_t;
-+
-+/*-- Beacon ---------------------------------------*/
-+typedef struct wlan_fr_beacon {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u64 *ts;
-+ u16 *bcn_int;
-+ u16 *cap_info;
-+ /*-- info elements ----------*/
-+ wlan_ie_ssid_t *ssid;
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+ wlan_ie_fh_parms_t *fh_parms;
-+ wlan_ie_ds_parms_t *ds_parms;
-+ wlan_ie_cf_parms_t *cf_parms;
-+ wlan_ie_ibss_parms_t *ibss_parms;
-+ wlan_ie_tim_t *tim; /* in beacon only, not proberesp */
-+ wlan_ie_erp_t *erp; /* in beacon only, not proberesp */
-+} wlan_fr_beacon_t;
-+#define wlan_fr_proberesp wlan_fr_beacon
-+#define wlan_fr_proberesp_t wlan_fr_beacon_t
-+
-+/*-- IBSS ATIM ------------------------------------*/
-+typedef struct wlan_fr_ibssatim {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ /*-- info elements ----------*/
-+ /* this frame type has a null body */
-+} wlan_fr_ibssatim_t;
-+
-+/*-- Disassociation -------------------------------*/
-+typedef struct wlan_fr_disassoc {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *reason;
-+ /*-- info elements ----------*/
-+} wlan_fr_disassoc_t;
-+
-+/*-- Association Request --------------------------*/
-+typedef struct wlan_fr_assocreq {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *cap_info;
-+ u16 *listen_int;
-+ /*-- info elements ----------*/
-+ wlan_ie_ssid_t *ssid;
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+} wlan_fr_assocreq_t;
-+
-+/*-- Association Response -------------------------*/
-+typedef struct wlan_fr_assocresp {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *cap_info;
-+ u16 *status;
-+ u16 *aid;
-+ /*-- info elements ----------*/
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+} wlan_fr_assocresp_t;
-+
-+/*-- Reassociation Request ------------------------*/
-+typedef struct wlan_fr_reassocreq {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *cap_info;
-+ u16 *listen_int;
-+ u8 *curr_ap;
-+ /*-- info elements ----------*/
-+ wlan_ie_ssid_t *ssid;
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+} wlan_fr_reassocreq_t;
-+
-+/*-- Reassociation Response -----------------------*/
-+typedef struct wlan_fr_reassocresp {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *cap_info;
-+ u16 *status;
-+ u16 *aid;
-+ /*-- info elements ----------*/
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+} wlan_fr_reassocresp_t;
-+
-+/*-- Probe Request --------------------------------*/
-+typedef struct wlan_fr_probereq {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ /*-- info elements ----------*/
-+ wlan_ie_ssid_t *ssid;
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+} wlan_fr_probereq_t;
-+
-+/*-- Authentication -------------------------------*/
-+typedef struct wlan_fr_authen {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *auth_alg;
-+ u16 *auth_seq;
-+ u16 *status;
-+ /*-- info elements ----------*/
-+ wlan_ie_challenge_t *challenge;
-+} wlan_fr_authen_t;
-+
-+/*-- Deauthenication -----------------------------*/
-+typedef struct wlan_fr_deauthen {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *reason;
-+ /*-- info elements ----------*/
-+} wlan_fr_deauthen_t;
-+
-+/* Types for building mgmt frames */
-+
-+/* Warning. Several types used in below structs are
-+** in fact variable length. Use structs with such fields with caution */
-+typedef struct auth_frame_body {
-+ u16 auth_alg;
-+ u16 auth_seq;
-+ u16 status;
-+ wlan_ie_challenge_t challenge;
-+} WLAN_PACKED auth_frame_body_t;
-+
-+typedef struct assocresp_frame_body {
-+ u16 cap_info;
-+ u16 status;
-+ u16 aid;
-+ wlan_ie_supp_rates_t rates;
-+} WLAN_PACKED assocresp_frame_body_t;
-+
-+typedef struct reassocreq_frame_body {
-+ u16 cap_info;
-+ u16 listen_int;
-+ u8 current_ap[ETH_ALEN];
-+ wlan_ie_ssid_t ssid;
-+/* access to this one is disabled since ssid_t is variable length: */
-+ /* wlan_ie_supp_rates_t rates; */
-+} WLAN_PACKED reassocreq_frame_body_t;
-+
-+typedef struct reassocresp_frame_body {
-+ u16 cap_info;
-+ u16 status;
-+ u16 aid;
-+ wlan_ie_supp_rates_t rates;
-+} WLAN_PACKED reassocresp_frame_body_t;
-+
-+typedef struct deauthen_frame_body {
-+ u16 reason;
-+} WLAN_PACKED deauthen_frame_body_t;
-+
-+typedef struct disassoc_frame_body {
-+ u16 reason;
-+} WLAN_PACKED disassoc_frame_body_t;
-+
-+typedef struct probereq_frame_body {
-+ wlan_ie_ssid_t ssid;
-+ wlan_ie_supp_rates_t rates;
-+} WLAN_PACKED probereq_frame_body_t;
-+
-+typedef struct proberesp_frame_body {
-+ u8 timestamp[8];
-+ u16 beacon_int;
-+ u16 cap_info;
-+ wlan_ie_ssid_t ssid;
-+/* access to these is disabled since ssid_t is variable length: */
-+ /* wlan_ie_supp_rates_t rates; */
-+ /* fhps_t fhps; */
-+ /* dsps_t dsps; */
-+ /* cfps_t cfps; */
-+} WLAN_PACKED proberesp_frame_body_t;
-+
-+
-+/***********************************************************************
-+** Functions
-+*/
-+
-+/* Helpers for parsing mgmt frames */
-+void wlan_mgmt_decode_ibssatim(wlan_fr_ibssatim_t *f);
-+void wlan_mgmt_decode_assocreq(wlan_fr_assocreq_t *f);
-+void wlan_mgmt_decode_assocresp(wlan_fr_assocresp_t *f);
-+void wlan_mgmt_decode_authen(wlan_fr_authen_t *f);
-+void wlan_mgmt_decode_beacon(wlan_fr_beacon_t *f);
-+void wlan_mgmt_decode_deauthen(wlan_fr_deauthen_t *f);
-+void wlan_mgmt_decode_disassoc(wlan_fr_disassoc_t *f);
-+void wlan_mgmt_decode_probereq(wlan_fr_probereq_t *f);
-+void wlan_mgmt_decode_proberesp(wlan_fr_proberesp_t *f);
-+void wlan_mgmt_decode_reassocreq(wlan_fr_reassocreq_t *f);
-+void wlan_mgmt_decode_reassocresp(wlan_fr_reassocresp_t *f);
-+
-+/* Helpers for building mgmt frames */
-+static inline u8*
-+wlan_fill_ie_ssid(u8 *p, int len, const char *ssid)
-+{
-+ struct wlan_ie_ssid *ie = (void*)p;
-+ ie->eid = WLAN_EID_SSID;
-+ ie->len = len;
-+ memcpy(ie->ssid, ssid, len);
-+ return p + len + 2;
-+}
-+/* This controls whether we create 802.11g 'ext supported rates' IEs
-+** or just create overlong 'supported rates' IEs instead
-+** (non-11g compliant) */
-+#define WE_OBEY_802_11G 1
-+static inline u8*
-+wlan_fill_ie_rates(u8 *p, int len, const u8 *rates)
-+{
-+ struct wlan_ie_supp_rates *ie = (void*)p;
-+#if WE_OBEY_802_11G
-+ if (len > 8 ) len = 8;
-+#endif
-+ /* supported rates (1 to 8 octets) */
-+ ie->eid = WLAN_EID_SUPP_RATES;
-+ ie->len = len;
-+ memcpy(ie->rates, rates, len);
-+ return p + len + 2;
-+}
-+/* This one wouldn't create an IE at all if not needed */
-+static inline u8*
-+wlan_fill_ie_rates_ext(u8 *p, int len, const u8 *rates)
-+{
-+ struct wlan_ie_supp_rates *ie = (void*)p;
-+#if !WE_OBEY_802_11G
-+ return p;
-+#endif
-+ len -= 8;
-+ if (len <= 0) return p;
-+ /* ext supported rates */
-+ ie->eid = WLAN_EID_EXT_RATES;
-+ ie->len = len;
-+ memcpy(ie->rates, rates+8, len);
-+ return p + len + 2;
-+}
-+static inline u8*
-+wlan_fill_ie_ds_parms(u8 *p, int channel)
-+{
-+ struct wlan_ie_ds_parms *ie = (void*)p;
-+ ie->eid = WLAN_EID_DS_PARMS;
-+ ie->len = 1;
-+ ie->curr_ch = channel;
-+ return p + sizeof(*ie);
-+}
-+static inline u8*
-+wlan_fill_ie_ibss_parms(u8 *p, int atim_win)
-+{
-+ struct wlan_ie_ibss_parms *ie = (void*)p;
-+ ie->eid = WLAN_EID_IBSS_PARMS;
-+ ie->len = 2;
-+ ie->atim_win = atim_win;
-+ return p + sizeof(*ie);
-+}
-+static inline u8*
-+wlan_fill_ie_tim(u8 *p, int rem, int period, int bcast,
-+ int ofs, int len, const u8 *vbm)
-+{
-+ struct wlan_ie_tim *ie = (void*)p;
-+ ie->eid = WLAN_EID_TIM;
-+ ie->len = len + 3;
-+ ie->dtim_cnt = rem;
-+ ie->dtim_period = period;
-+ ie->bitmap_ctl = ofs | (bcast!=0);
-+ if (vbm)
-+ memcpy(ie->virt_bm, vbm, len); /* min 1 byte */
-+ else
-+ ie->virt_bm[0] = 0;
-+ return p + len + 3 + 2;
-+}
-Index: linux-2.6.22/drivers/net/wireless/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/net/wireless/Kconfig 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/net/wireless/Kconfig 2007-08-23 18:34:19.000000000 +0200
-@@ -5,6 +5,36 @@
- menu "Wireless LAN"
- depends on !S390
-
-+config NET_RADIO
-+ bool "Wireless LAN drivers (non-hamradio) & Wireless Extensions"
-+ select WIRELESS_EXT
-+ ---help---
-+ Support for wireless LANs and everything having to do with radio,
-+ but not with amateur radio or FM broadcasting.
-+
-+ Saying Y here also enables the Wireless Extensions (creates
-+ /proc/net/wireless and enables iwconfig access). The Wireless
-+ Extension is a generic API allowing a driver to expose to the user
-+ space configuration and statistics specific to common Wireless LANs.
-+ The beauty of it is that a single set of tool can support all the
-+ variations of Wireless LANs, regardless of their type (as long as
-+ the driver supports Wireless Extension). Another advantage is that
-+ these parameters may be changed on the fly without restarting the
-+ driver (or Linux). If you wish to use Wireless Extensions with
-+ wireless PCMCIA (PC-) cards, you need to say Y here; you can fetch
-+ the tools from
-+ <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.
-+
-+config NET_WIRELESS_RTNETLINK
-+ bool "Wireless Extension API over RtNetlink"
-+ depends on NET_RADIO
-+ ---help---
-+ Support the Wireless Extension API over the RtNetlink socket
-+ in addition to the traditional ioctl interface (selected above).
-+
-+ For now, few tools use this facility, but it might grow in the
-+ future. The only downside is that it adds 4.5 kB to your kernel.
-+
- config WLAN_PRE80211
- bool "Wireless LAN (pre-802.11)"
- depends on NETDEVICES
-@@ -549,5 +579,6 @@
- source "drivers/net/wireless/hostap/Kconfig"
- source "drivers/net/wireless/bcm43xx/Kconfig"
- source "drivers/net/wireless/zd1211rw/Kconfig"
-+source "drivers/net/wireless/acx/Kconfig"
-
- endmenu
-Index: linux-2.6.22/drivers/net/wireless/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/net/wireless/Makefile 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/net/wireless/Makefile 2007-08-23 18:34:19.000000000 +0200
-@@ -34,6 +34,8 @@
-
- obj-$(CONFIG_PRISM54) += prism54/
-
-+obj-$(CONFIG_ACX) += acx/
-+
- obj-$(CONFIG_HOSTAP) += hostap/
- obj-$(CONFIG_BCM43XX) += bcm43xx/
- obj-$(CONFIG_ZD1211RW) += zd1211rw/
diff --git a/packages/linux/linux-rp-2.6.22/htcuni.patch b/packages/linux/linux-rp-2.6.22/htcuni.patch
deleted file mode 100644
index a83c7afa34..0000000000
--- a/packages/linux/linux-rp-2.6.22/htcuni.patch
+++ /dev/null
@@ -1,8480 +0,0 @@
----
- arch/arm/mach-pxa/Kconfig | 89 +
- arch/arm/mach-pxa/Makefile | 1
- arch/arm/mach-pxa/corgi.c | 3
- arch/arm/mach-pxa/generic.c | 12
- arch/arm/mach-pxa/htcuniversal/Makefile | 19
- arch/arm/mach-pxa/htcuniversal/htcuniversal.c | 468 +++++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c | 917 +++++++++++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h | 65
- arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c | 143 +
- arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c | 61
- arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c | 135 +
- arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h | 17
- arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c | 87 +
- arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c | 226 ++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c | 212 ++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c | 167 ++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h | 16
- arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c | 69
- arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c | 97 +
- arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c | 490 ++++++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c | 71
- arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h | 20
- arch/arm/mach-pxa/pm.c | 36
- arch/arm/mach-pxa/spitz.c | 2
- drivers/input/keyboard/Makefile | 2
- drivers/input/keyboard/asic3_keys.c | 131 +
- drivers/input/keyboard/pxa27x_keyboard.c | 2
- drivers/leds/Kconfig | 7
- drivers/leds/Makefile | 1
- drivers/leds/leds-asic3.c | 189 ++
- drivers/mfd/Kconfig | 10
- drivers/mfd/Makefile | 2
- drivers/mfd/asic3_base.c | 1208 +++++++++++++++
- drivers/mfd/soc-core.c | 106 +
- drivers/mfd/soc-core.h | 30
- drivers/mmc/host/Kconfig | 6
- drivers/mmc/host/Makefile | 2
- drivers/mmc/host/asic3_mmc.c | 900 +++++++++++
- drivers/mmc/host/asic3_mmc.h | 25
- drivers/serial/pxa.c | 22
- drivers/video/backlight/Kconfig | 2
- drivers/video/backlight/corgi_bl.c | 4
- drivers/w1/slaves/Kconfig | 11
- drivers/w1/slaves/Makefile | 2
- drivers/w1/slaves/w1_ds2760.c | 213 ++
- drivers/w1/slaves/w1_ds2760.h | 50
- drivers/w1/w1_family.h | 1
- include/asm-arm/arch-pxa/clock.h | 27
- include/asm-arm/arch-pxa/htcuniversal-asic.h | 213 ++
- include/asm-arm/arch-pxa/htcuniversal-gpio.h | 220 ++
- include/asm-arm/arch-pxa/htcuniversal-init.h | 14
- include/asm-arm/arch-pxa/htcuniversal.h | 3
- include/asm-arm/arch-pxa/irqs.h | 2
- include/asm-arm/arch-pxa/pxa-pm_ll.h | 6
- include/asm-arm/arch-pxa/pxa-regs.h | 2
- include/asm-arm/arch-pxa/serial.h | 78
- include/asm-arm/arch-pxa/sharpsl.h | 6
- include/asm-arm/hardware/asic3_keys.h | 18
- include/asm-arm/hardware/asic3_leds.h | 34
- include/asm-arm/hardware/ipaq-asic3.h | 602 +++++++
- include/linux/backlight.h | 7
- include/linux/gpiodev.h | 44
- include/linux/input_pda.h | 47
- include/linux/ioport.h | 1
- include/linux/pda_power.h | 31
- include/linux/soc/asic3_base.h | 104 +
- include/linux/soc/tmio_mmc.h | 17
- 67 files changed, 7808 insertions(+), 17 deletions(-)
-
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/Makefile 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,19 @@
-+#
-+# Makefile for HTC Universal
-+#
-+
-+snd-htcuniversal-ak4641-objs := htcuniversal_ak4641.o
-+
-+obj-$(CONFIG_MACH_HTCUNIVERSAL) += htcuniversal.o htcuniversal_pm.o
-+obj-$(CONFIG_HTCUNIVERSAL_CORE) += htcuniversal_core.o
-+obj-$(CONFIG_HTCUNIVERSAL_POWER) += htcuniversal_power2.o
-+obj-$(CONFIG_HTCUNIVERSAL_LCD) += htcuniversal_lcd.o
-+obj-$(CONFIG_HTCUNIVERSAL_BACKLIGHT) += htcuniversal_bl.o
-+obj-$(CONFIG_HTCUNIVERSAL_TS2) += htcuniversal_ts2.o
-+obj-$(CONFIG_HTCUNIVERSAL_BUTTONS) += htcuniversal_buttons.o
-+obj-$(CONFIG_HTCUNIVERSAL_BLUETOOTH) += htcuniversal_bt.o
-+obj-$(CONFIG_HTCUNIVERSAL_PHONE) += htcuniversal_phone.o
-+obj-$(CONFIG_HTCUNIVERSAL_ASIC3_LEDS) += htcuniversal_asic3_leds.o
-+obj-$(CONFIG_HTCUNIVERSAL_UDC) += htcuniversal_udc.o
-+
-+obj-$(CONFIG_HTCUNIVERSAL_AK4641) += htcuniversal_ak4641.o
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,468 @@
-+/*
-+ * Hardware definitions for HTC Universal
-+ *
-+ * Copyright (c) 2006 Oleg Gusev
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/irq.h>
-+#include <linux/input.h>
-+#include <linux/gpio_keys.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/hardware.h>
-+#include <asm/setup.h>
-+
-+#include <asm/mach/irq.h>
-+#include <asm/mach/arch.h>
-+
-+#include <asm/arch/bitfield.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/serial.h>
-+#include <asm/arch/pxa27x_keyboard.h>
-+#include <asm/arch/pxafb.h>
-+#include <asm/arch/irda.h>
-+#include <asm/arch/ohci.h>
-+
-+#include <asm/arch/htcuniversal.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-init.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+
-+#include "../generic.h"
-+
-+#include "htcuniversal_bt.h"
-+#include "htcuniversal_phone.h"
-+#include "tsc2046_ts.h"
-+
-+/*
-+ * IRDA
-+ */
-+
-+static void htcuniversal_irda_transceiver_mode(struct device *dev, int mode)
-+{
-+ /* */
-+}
-+
-+static struct pxaficp_platform_data htcuniversal_ficp_platform_data = {
-+ .transceiver_cap = IR_SIRMODE | IR_FIRMODE,
-+ .transceiver_mode = htcuniversal_irda_transceiver_mode,
-+};
-+
-+/*
-+ * Bluetooth - Relies on other loadable modules, like ASIC3 and Core,
-+ * so make the calls indirectly through pointers. Requires that the
-+ * htcuniversal_bt module be loaded before any attempt to use
-+ * bluetooth (obviously).
-+ */
-+
-+static struct htcuniversal_bt_funcs bt_funcs;
-+
-+static void
-+htcuniversal_bt_configure( int state )
-+{
-+ if (bt_funcs.configure != NULL)
-+ bt_funcs.configure( state );
-+}
-+
-+static struct htcuniversal_phone_funcs phone_funcs;
-+
-+static void
-+htcuniversal_phone_configure( int state )
-+{
-+ if (phone_funcs.configure != NULL)
-+ phone_funcs.configure( state );
-+}
-+
-+//void htcuniversal_ll_pm_init(void);
-+
-+extern struct platform_device htcuniversal_bl;
-+static struct platform_device htcuniversal_lcd = { .name = "htcuniversal_lcd", };
-+//static struct platform_device htcuniversal_kbd = { .name = "htcuniversal_kbd", };
-+static struct platform_device htcuniversal_buttons = { .name = "htcuniversal_buttons", };
-+//static struct platform_device htcuniversal_ts = { .name = "htcuniversal_ts", };
-+//static struct platform_device htcuniversal_bt = { .name = "htcuniversal_bt", };
-+//static struct platform_device htcuniversal_phone = { .name = "htcuniversal_phone", };
-+static struct platform_device htcuniversal_power = { .name = "htcuniversal_power", };
-+static struct platform_device htcuniversal_udc = { .name = "htcuniversal_udc", };
-+
-+static struct tsc2046_mach_info htcuniversal_ts_platform_data = {
-+ .port = 1,
-+ .clock = CKEN_SSP1,
-+ .pwrbit_X = 1,
-+ .pwrbit_Y = 1,
-+ .irq = 0 /* asic3 irq */
-+};
-+
-+static struct platform_device htcuniversal_ts = {
-+ .name = "htcuniversal_ts",
-+ .dev = {
-+ .platform_data = &htcuniversal_ts_platform_data,
-+ },
-+};
-+
-+
-+/* Bluetooth */
-+
-+static struct platform_device htcuniversal_bt = {
-+ .name = "htcuniversal_bt",
-+ .id = -1,
-+ .dev = {
-+ .platform_data = &bt_funcs,
-+ },
-+};
-+
-+static struct platform_device htcuniversal_phone = {
-+ .name = "htcuniversal_phone",
-+ .id = -1,
-+ .dev = {
-+ .platform_data = &phone_funcs,
-+ },
-+};
-+
-+/* PXA2xx Keys */
-+
-+static struct gpio_keys_button htcuniversal_button_table[] = {
-+ { KEY_POWER, GPIO_NR_HTCUNIVERSAL_KEY_ON_N, 1 },
-+};
-+
-+static struct gpio_keys_platform_data htcuniversal_pxa_keys_data = {
-+ .buttons = htcuniversal_button_table,
-+ .nbuttons = ARRAY_SIZE(htcuniversal_button_table),
-+};
-+
-+static struct platform_device htcuniversal_pxa_keys = {
-+ .name = "gpio-keys",
-+ .dev = {
-+ .platform_data = &htcuniversal_pxa_keys_data,
-+ },
-+ .id = -1,
-+};
-+
-+/****************************************************************
-+ * Keyboard
-+ ****************************************************************/
-+
-+static struct pxa27x_keyboard_platform_data htcuniversal_kbd = {
-+ .nr_rows = 8,
-+ .nr_cols = 8,
-+ .keycodes = {
-+ {
-+ /* row 0 */
-+ KEY_ENTER,
-+ KEY_MINUS,
-+ KEY_ESC,
-+ KEY_1,
-+ KEY_TAB,
-+ KEY_CAPSLOCK,
-+ KEY_LEFTSHIFT,
-+ KEY_RIGHTALT, /* Fn */
-+ }, { /* row 1 */
-+ KEY_COMMA,
-+ KEY_EQUAL,
-+ KEY_F1,
-+ KEY_2,
-+ KEY_Q,
-+ KEY_A,
-+ KEY_Z,
-+ KEY_LEFTCTRL,
-+ }, { /* row 2 */
-+ KEY_UP,
-+ KEY_I,
-+ KEY_F2,
-+ KEY_3,
-+ KEY_W,
-+ KEY_S,
-+ KEY_X,
-+ KEY_F6,
-+ }, { /* row 3 */
-+ KEY_DOT,
-+ KEY_O,
-+ KEY_F3,
-+ KEY_4,
-+ KEY_E,
-+ KEY_D,
-+ KEY_C,
-+ KEY_LEFTALT,
-+ }, { /* row 4 */
-+ KEY_F9,
-+ KEY_P,
-+ KEY_F4,
-+ KEY_5,
-+ KEY_R,
-+ KEY_F,
-+ KEY_V,
-+ KEY_SPACE,
-+ }, { /* row 5 */
-+ KEY_RIGHT,
-+ KEY_BACKSPACE,
-+ KEY_F5,
-+ KEY_6,
-+ KEY_T,
-+ KEY_G,
-+ KEY_B,
-+ KEY_F7,
-+ }, { /* row 6 */
-+ KEY_F9,
-+ KEY_K,
-+ KEY_9,
-+ KEY_7,
-+ KEY_Y,
-+ KEY_H,
-+ KEY_N,
-+ KEY_LEFT,
-+ }, { /* row 7 */
-+ KEY_F10,
-+ KEY_L,
-+ KEY_0,
-+ KEY_8,
-+ KEY_U,
-+ KEY_J,
-+ KEY_M,
-+ KEY_DOWN,
-+ },
-+ },
-+ .gpio_modes = {
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN0_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN1_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN2_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN3_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN4_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN5_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN6_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN7_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT0_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT1_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT2_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT3_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT4_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT5_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT6_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT7_MD,
-+ },
-+};
-+
-+static struct platform_device htcuniversal_pxa_keyboard = {
-+ .name = "pxa27x-keyboard",
-+ .id = -1,
-+ .dev = {
-+ .platform_data = &htcuniversal_kbd,
-+ },
-+};
-+/* Core Hardware Functions */
-+
-+struct platform_device htcuniversal_core = {
-+ .name = "htcuniversal_core",
-+ .id = 0,
-+ .dev = {
-+ .platform_data = NULL,
-+ },
-+};
-+
-+static struct platform_device *devices[] __initdata = {
-+ &htcuniversal_core,
-+// &htcuniversal_flash,
-+ &htcuniversal_pxa_keyboard,
-+ &htcuniversal_pxa_keys,
-+};
-+
-+static struct platform_device *htcuniversal_asic3_devices[] __initdata = {
-+ &htcuniversal_lcd,
-+#ifdef CONFIG_HTCUNIVERSAL_BACKLIGHT
-+ &htcuniversal_bl,
-+#endif
-+ &htcuniversal_buttons,
-+ &htcuniversal_ts,
-+ &htcuniversal_bt,
-+ &htcuniversal_phone,
-+ &htcuniversal_power,
-+ &htcuniversal_udc,
-+};
-+
-+static struct asic3_platform_data htcuniversal_asic3_platform_data = {
-+
-+ /* Setting ASIC3 GPIO registers to the below initialization states
-+ * HTC Universal asic3 information:
-+ * http://wiki.xda-developers.com/index.php?pagename=UniversalASIC3
-+ * http://wiki.xda-developers.com/index.php?pagename=ASIC3
-+ *
-+ * dir: Direction of the GPIO pin. 0: input, 1: output.
-+ * If unknown, set as output to avoid power consuming floating input nodes
-+ * init: Initial state of the GPIO bits
-+ *
-+ * These registers are configured as they are on Wince.
-+ */
-+ .gpio_a = {
-+ .dir = (1<<GPIOA_LCD_PWR5_ON) |
-+ (1<<GPIOA_FLASHLIGHT) |
-+ (1<<GPIOA_UNKNOWN9) |
-+ (1<<GPIOA_SPK_PWR2_ON) |
-+ (1<<GPIOA_UNKNOWN4) |
-+ (1<<GPIOA_EARPHONE_PWR_ON)|
-+ (1<<GPIOA_AUDIO_PWR_ON) |
-+ (1<<GPIOA_SPK_PWR1_ON) |
-+ (1<<GPIOA_I2C_EN),
-+ .init = (1<<GPIOA_LCD_PWR5_ON) |
-+ (1<<GPIOA_I2C_EN),
-+ .sleep_out = 0x0000,
-+ .batt_fault_out = 0x0000,
-+ .alt_function = 0x0000,
-+ .sleep_conf = 0x000c,
-+ },
-+ .gpio_b = {
-+ .dir = 0xc142,
-+ .init = 0x8842, // TODO: 0x0900
-+ .sleep_out = 0x0000,
-+ .batt_fault_out = 0x0000,
-+ .alt_function = 0x0000,
-+ .sleep_conf = 0x000c,
-+ },
-+ .gpio_c = {
-+ .dir = 0xc7e7,
-+ .init = 0xc6e0, // TODO: 0x8000
-+ .sleep_out = 0x0000,
-+ .batt_fault_out = 0x0000,
-+ .alt_function = 0x0007, // GPIOC_LED_RED | GPIOC_LED_GREEN | GPIOC_LED_BLUE
-+ .sleep_conf = 0x000c,
-+ },
-+ .gpio_d = {
-+ .dir = 0xffc0,
-+ .init = 0x7840, // TODO: 0x0000
-+ .sleep_out = 0x0000,
-+ .batt_fault_out = 0x0000,
-+ .alt_function = 0x0000,
-+ .sleep_conf = 0x0008,
-+ },
-+ .bus_shift = 1,
-+ .irq_base = HTCUNIVERSAL_ASIC3_IRQ_BASE,
-+
-+ .child_platform_devs = htcuniversal_asic3_devices,
-+ .num_child_platform_devs = ARRAY_SIZE(htcuniversal_asic3_devices),
-+};
-+
-+static struct resource htcuniversal_asic3_resources[] = {
-+ [0] = {
-+ .start = HTCUNIVERSAL_ASIC3_GPIO_PHYS,
-+ .end = HTCUNIVERSAL_ASIC3_GPIO_PHYS + IPAQ_ASIC3_MAP_SIZE,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+ .start = HTCUNIVERSAL_IRQ(ASIC3_EXT_INT),
-+ .end = HTCUNIVERSAL_IRQ(ASIC3_EXT_INT),
-+ .flags = IORESOURCE_IRQ,
-+ },
-+ [2] = {
-+ .start = HTCUNIVERSAL_ASIC3_MMC_PHYS,
-+ .end = HTCUNIVERSAL_ASIC3_MMC_PHYS + IPAQ_ASIC3_MAP_SIZE,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [3] = {
-+ .start = HTCUNIVERSAL_IRQ(ASIC3_SDIO_INT_N),
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device htcuniversal_asic3 = {
-+ .name = "asic3",
-+ .id = 0,
-+ .num_resources = ARRAY_SIZE(htcuniversal_asic3_resources),
-+ .resource = htcuniversal_asic3_resources,
-+ .dev = { .platform_data = &htcuniversal_asic3_platform_data, },
-+};
-+EXPORT_SYMBOL(htcuniversal_asic3);
-+
-+static struct pxafb_mode_info htcuniversal_lcd_modes[] = {
-+{
-+ .pixclock = 96153,
-+ .xres = 480,
-+ .yres = 640,
-+ .bpp = 16,
-+ .hsync_len = 4,
-+ .vsync_len = 1,
-+ .left_margin = 20,
-+ .right_margin = 8,
-+ .upper_margin = 7,
-+ .lower_margin = 8,
-+
-+// .sync = FB_SYNC_HOR_LOW_ACT|FB_SYNC_VERT_LOW_ACT,
-+
-+},
-+};
-+
-+static struct pxafb_mach_info sony_acx526akm = {
-+ .modes = htcuniversal_lcd_modes,
-+ .num_modes = ARRAY_SIZE(htcuniversal_lcd_modes),
-+
-+ /* fixme: use constants defined in pxafb.h */
-+ .lccr0 = 0x00000080,
-+ .lccr3 = 0x00400000,
-+// .lccr4 = 0x80000000,
-+};
-+
-+static void __init htcuniversal_init_irq(void)
-+{
-+ pxa_init_irq();
-+}
-+
-+static struct platform_pxa_serial_funcs htcuniversal_pxa_bt_funcs = {
-+ .configure = htcuniversal_bt_configure,
-+};
-+static struct platform_pxa_serial_funcs htcuniversal_pxa_phone_funcs = {
-+ .configure = htcuniversal_phone_configure,
-+};
-+
-+/* USB OHCI */
-+
-+static int htcuniversal_ohci_init(struct device *dev)
-+{
-+ /* missing GPIO setup here */
-+
-+ /* got the value from wince */
-+ UHCHR=UHCHR_CGR;
-+
-+ return 0;
-+}
-+
-+static struct pxaohci_platform_data htcuniversal_ohci_platform_data = {
-+ .port_mode = PMM_PERPORT_MODE,
-+ .init = htcuniversal_ohci_init,
-+};
-+
-+static void __init htcuniversal_map_io(void)
-+{
-+ pxa_map_io();
-+
-+ pxa_set_btuart_info(&htcuniversal_pxa_bt_funcs);
-+ pxa_set_ffuart_info(&htcuniversal_pxa_phone_funcs);
-+}
-+
-+static void __init htcuniversal_init(void)
-+{
-+ set_pxa_fb_info(&sony_acx526akm);
-+
-+ platform_device_register(&htcuniversal_asic3);
-+ platform_add_devices(devices, ARRAY_SIZE(devices) );
-+ pxa_set_ficp_info(&htcuniversal_ficp_platform_data);
-+ pxa_set_ohci_info(&htcuniversal_ohci_platform_data);
-+}
-+
-+MACHINE_START(HTCUNIVERSAL, "HTC Universal")
-+ /* Maintainer xanadux.org */
-+ .phys_io = 0x40000000,
-+ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
-+ .boot_params = 0xa0000100,
-+ .map_io = htcuniversal_map_io,
-+ .init_irq = htcuniversal_init_irq,
-+ .init_machine = htcuniversal_init,
-+ .timer = &pxa_timer,
-+MACHINE_END
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,917 @@
-+/*
-+ * Audio support for codec Asahi Kasei AK4641
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Copyright (c) 2006 Giorgio Padrin <giorgio@mandarinlogiq.org>
-+ *
-+ * History:
-+ *
-+ * 2006-03 Written -- Giorgio Padrin
-+ * 2006-09 Test and debug on machine (HP hx4700) -- Elshin Roman <roxmail@list.ru>
-+ *
-+ * AK4641 codec device driver
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * Based on code:
-+ * Copyright (c) 2002 Hewlett-Packard Company
-+ * Copyright (c) 2000 Nicolas Pitre <nico@cam.org>
-+ * Copyright (c) 2000 Lernout & Hauspie Speech Products, N.V.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License.
-+ */
-+
-+#include <sound/driver.h>
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/types.h>
-+#include <linux/string.h>
-+#include <linux/slab.h>
-+#include <linux/errno.h>
-+#include <linux/ioctl.h>
-+#include <linux/delay.h>
-+#include <linux/i2c.h>
-+
-+#include <sound/core.h>
-+#include <sound/control.h>
-+#include <sound/initval.h>
-+#include <sound/info.h>
-+
-+#include "htcuniversal_ak4641.h"
-+
-+/* Registers */
-+#define R_PM1 0x00
-+#define R_PM2 0x01
-+#define R_SEL1 0x02
-+#define R_SEL2 0x03
-+#define R_MODE1 0x04
-+#define R_MODE2 0x05
-+#define R_DAC 0x06
-+#define R_MIC 0x07
-+#define REG_TIMER 0x08
-+#define REG_ALC1 0x09
-+#define REG_ALC2 0x0a
-+#define R_PGA 0x0b
-+#define R_ATTL 0x0c
-+#define R_ATTR 0x0d
-+#define REG_VOL 0x0e
-+#define R_STATUS 0x0f
-+#define REG_EQLO 0x10
-+#define REG_EQMID 0x11
-+#define REG_EQHI 0x12
-+#define REG_BTIF 0x13
-+
-+/* Register flags */
-+/* REG_PWR1 */
-+#define R_PM1_PMADC 0x01
-+#define R_PM1_PMMIC 0x02
-+#define REG_PWR1_PMAUX 0x04
-+#define REG_PWR1_PMMO 0x08
-+#define R_PM1_PMLO 0x10
-+/* unused 0x20 */
-+/* unused 0x40 */
-+#define R_PM1_PMVCM 0x80
-+
-+/* REG_PWR2 */
-+#define R_PM2_PMDAC 0x01
-+/* unused 0x02 */
-+/* unused 0x04 */
-+#define R_PM2_PMMO2 0x08
-+#define REG_PWR2_MCKAC 0x10
-+/* unused 0x20 */
-+/* unused 0x40 */
-+#define R_PM2_MCKPD 0x80
-+
-+/* REG_SEL1 */
-+#define R_SEL1_PSMO2 0x01
-+/* unused 0x02 */
-+/* unused 0x04 */
-+/* unused 0x08 */
-+#define REG_SEL1_MICM 0x10
-+#define REG_SEL1_DACM 0x20
-+#define REG_SEL1_PSMO 0x40
-+#define REG_SEL1_MOGN 0x80
-+
-+/* REG_SEL2 */
-+#define R_SEL2_PSLOR 0x01
-+#define R_SEL2_PSLOL 0x02
-+#define REG_SEL2_AUXSI 0x04
-+/* unused 0x08 */
-+#define REG_SEL2_MICL 0x10
-+#define REG_SEL2_AUXL 0x20
-+/* unused 0x40 */
-+#define R_SEL2_DACL 0x80
-+
-+/* REG_MODE1 */
-+#define REG_MODE1_DIF0 0x01
-+#define REG_MODE1_DIF1 0x02
-+/* unused 0x04 */
-+/* unused 0x08 */
-+/* unused 0x10 */
-+/* unused 0x20 */
-+/* unused 0x40 */
-+/* unused 0x80 */
-+
-+/* REG_MODE2 */
-+/* unused 0x01 */
-+#define REG_MODE2_LOOP 0x02
-+#define REG_MODE2_HPM 0x04
-+/* unused 0x08 */
-+/* unused 0x10 */
-+#define REG_MODE2_MCK0 0x20
-+#define REG_MODE2_MCK1 0x40
-+/* unused 0x80 */
-+
-+/* REG_DAC */
-+#define REG_DAC_DEM0 0x01
-+#define REG_DAC_DEM1 0x02
-+#define REG_DAC_EQ 0x04
-+/* unused 0x08 */
-+#define R_DAC_DATTC 0x10
-+#define R_DAC_SMUTE 0x20
-+#define REG_DAC_TM 0x40
-+/* unused 0x80 */
-+
-+/* REG_MIC */
-+#define R_MIC_MGAIN 0x01
-+#define R_MIC_MSEL 0x02
-+#define R_MIC_MICAD 0x04
-+#define R_MIC_MPWRI 0x08
-+#define R_MIC_MPWRE 0x10
-+#define REG_MIC_AUXAD 0x20
-+/* unused 0x40 */
-+/* unused 0x80 */
-+
-+/* REG_TIMER */
-+
-+#define REG_TIMER_LTM0 0x01
-+#define REG_TIMER_LTM1 0x02
-+#define REG_TIMER_WTM0 0x04
-+#define REG_TIMER_WTM1 0x08
-+#define REG_TIMER_ZTM0 0x10
-+#define REG_TIMER_ZTM1 0x20
-+/* unused 0x40 */
-+/* unused 0x80 */
-+
-+#define REG_ALC1_LMTH 0x01
-+#define REG_ALC1_RATT 0x02
-+#define REG_ALC1_LMAT0 0x04
-+#define REG_ALC1_LMAT1 0x08
-+#define REG_ALC1_ZELM 0x10
-+#define REG_ALC1_ALC1 0x20
-+/* unused 0x40 */
-+/* unused 0x80 */
-+
-+/* REG_ALC2 */
-+
-+/* REG_PGA */
-+
-+/* REG_ATTL */
-+
-+/* REG_ATTR */
-+
-+/* REG_VOL */
-+#define REG_VOL_ATTM 0x80
-+
-+/* REG_STATUS */
-+#define R_STATUS_DTMIC 0x01
-+
-+/* REG_EQ controls use 4 bits for each of 5 EQ levels */
-+
-+/* Bluetooth not yet implemented */
-+#define REG_BTIF_PMAD2 0x01
-+#define REG_BTIF_PMDA2 0x02
-+#define REG_BTIF_PMBIF 0x04
-+#define REG_BTIF_ADC2 0x08
-+#define REG_BTIF_DAC2 0x10
-+#define REG_BTIF_BTFMT0 0x20
-+#define REG_BTIF_BTFMT1 0x40
-+/* unused 0x80 */
-+
-+/* begin {{ I2C }} */
-+
-+static struct i2c_driver snd_ak4641_i2c_driver = {
-+ .driver = {
-+ .name = "ak4641-i2c"
-+ },
-+};
-+
-+static int snd_ak4641_i2c_init(void)
-+{
-+ return i2c_add_driver(&snd_ak4641_i2c_driver);
-+}
-+
-+static void snd_ak4641_i2c_free(void)
-+{
-+ i2c_del_driver(&snd_ak4641_i2c_driver);
-+}
-+
-+static inline int snd_ak4641_i2c_probe(struct snd_ak4641 *ak)
-+{
-+ if (ak->i2c_client.adapter == NULL) return -EINVAL;
-+ ak->i2c_client.addr = 0x12;
-+ if (i2c_smbus_xfer(ak->i2c_client.adapter, ak->i2c_client.addr,
-+ 0, 0, 0, I2C_SMBUS_QUICK, NULL) < 0)
-+ return -ENODEV;
-+ else return 0;
-+}
-+
-+static int snd_ak4641_i2c_attach(struct snd_ak4641 *ak)
-+{
-+ int ret = 0;
-+ if ((ret = snd_ak4641_i2c_probe(ak)) < 0) return ret;
-+ snprintf(ak->i2c_client.name, sizeof(ak->i2c_client.name),
-+ "ak4641-i2c at %d-%04x",
-+ i2c_adapter_id(ak->i2c_client.adapter), ak->i2c_client.addr);
-+ return i2c_attach_client(&ak->i2c_client);
-+}
-+
-+static void snd_ak4641_i2c_detach(struct snd_ak4641 *ak)
-+{
-+ i2c_detach_client(&ak->i2c_client);
-+}
-+
-+/* end {{ I2C }} */
-+
-+
-+/* begin {{ Registers & Cache Ops }} */
-+
-+static int snd_ak4641_hwsync(struct snd_ak4641 *ak, int read, u8 reg)
-+{
-+ struct i2c_msg msgs[2];
-+ u8 buf[2];
-+ int ret;
-+
-+ snd_assert(reg < ARRAY_SIZE(ak->regs), return -EINVAL);
-+
-+ /* setup i2c msgs */
-+ msgs[0].addr = ak->i2c_client.addr;
-+ msgs[0].flags = 0;
-+ msgs[0].buf = buf;
-+ if (!read)
-+ msgs[0].len = 2;
-+ else {
-+ msgs[1].flags = I2C_M_RD;
-+ msgs[1].addr = msgs[0].addr;
-+ msgs[1].buf = msgs[0].buf + 1;
-+ msgs[0].len = 1;
-+ msgs[1].len = 1;
-+ }
-+
-+ buf[0] = reg;
-+
-+ /* regs[reg] -> buffer, on write */
-+ if (!read) buf[1] = ak->regs[reg];
-+
-+ /* i2c transfer */
-+ ret = i2c_transfer(ak->i2c_client.adapter, msgs, read ? 2 : 1);
-+ if (ret != (read ? 2 : 1)) return ret; /* transfer error */ //@@ error ret < 0, or not ?
-+
-+ /* regs[reg] <- buffer, on read */
-+ if (read) ak->regs[reg] = buf[1];
-+
-+ return 0;
-+}
-+
-+static inline int snd_ak4641_hwsync_read(struct snd_ak4641 *ak, u8 reg)
-+{
-+ return snd_ak4641_hwsync(ak, 1, reg);
-+}
-+
-+static inline int snd_ak4641_hwsync_write(struct snd_ak4641 *ak, u8 reg)
-+{
-+ return snd_ak4641_hwsync(ak, 0, reg);
-+}
-+
-+static int snd_ak4641_hwsync_read_all(struct snd_ak4641 *ak)
-+{
-+ u8 reg;
-+ for (reg = 0; reg < ARRAY_SIZE(ak->regs); reg++)
-+ if (snd_ak4641_hwsync_read(ak, reg) < 0) return -1;
-+ return 0;
-+}
-+
-+static int snd_ak4641_hwsync_write_all(struct snd_ak4641 *ak)
-+{
-+ u8 reg;
-+ for (reg = 0; reg < ARRAY_SIZE(ak->regs); reg++)
-+ if (snd_ak4641_hwsync_write(ak, reg) < 0) return -1;
-+ return 0;
-+}
-+
-+static int snd_ak4641_reg_changed(struct snd_ak4641 *ak, u8 reg)
-+{
-+ if ((reg != R_PGA && ak->powered_on) ||
-+ (reg == R_PGA && (ak->regs[R_PM1] & R_PM1_PMMIC)))
-+ return snd_ak4641_hwsync_write(ak, reg);
-+ return 0;
-+}
-+
-+/* end {{ Registers & Cache Ops }}*/
-+
-+
-+static inline void snd_ak4641_lock(struct snd_ak4641 *ak)
-+{
-+ down(&ak->sem);
-+}
-+
-+static inline void snd_ak4641_unlock(struct snd_ak4641 *ak)
-+{
-+ up(&ak->sem);
-+}
-+
-+#define WRITE_MASK(i, val, mask) (((i) & ~(mask)) | ((val) & (mask)))
-+
-+
-+/* begin {{ Controls }} */
-+
-+#define INV_RANGE(val, mask) \
-+ (~(val) & (mask))
-+
-+/*-begin----------------------------------------------------------*/
-+static int snd_ak4641_actl_playback_volume_info(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
-+ uinfo->count = 2;
-+ uinfo->value.integer.min = 0;
-+ uinfo->value.integer.max = 0xff;
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_playback_volume_get(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+
-+ snd_ak4641_lock(ak);
-+ ucontrol->value.integer.value[0] = INV_RANGE(ak->regs[R_ATTL], 0xff);
-+ ucontrol->value.integer.value[1] = INV_RANGE(ak->regs[R_ATTR], 0xff);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_playback_volume_put(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+
-+ snd_ak4641_lock(ak);
-+ ak->regs[R_ATTL] = INV_RANGE(ucontrol->value.integer.value[0], 0xff);
-+ ak->regs[R_ATTR] = INV_RANGE(ucontrol->value.integer.value[1], 0xff);
-+ snd_ak4641_reg_changed(ak, R_ATTL);
-+ snd_ak4641_reg_changed(ak, R_ATTR);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+/*-end------------------------------------------------------------*/
-+
-+/*-begin----------------------------------------------------------*/
-+static int snd_ak4641_actl_mic_gain_info(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
-+ uinfo->count = 1;
-+ uinfo->value.integer.min = 0;
-+ uinfo->value.integer.max = 0x7f;
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_mic_gain_get(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+
-+ ucontrol->value.integer.value[0] = ak->regs[R_PGA];
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_mic_gain_put(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+
-+ snd_ak4641_lock(ak);
-+ ak->regs[R_PGA] = ucontrol->value.integer.value[0];
-+ snd_ak4641_reg_changed(ak, R_PGA);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+/*-end------------------------------------------------------------*/
-+
-+#define ACTL(ctl_name, _name) \
-+static struct snd_kcontrol_new snd_ak4641_actl_ ## ctl_name = \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = _name, \
-+ .info = snd_ak4641_actl_ ## ctl_name ## _info, \
-+ .get = snd_ak4641_actl_ ## ctl_name ## _get, .put = snd_ak4641_actl_ ## ctl_name ## _put };
-+
-+ACTL(playback_volume, "Master Playback Volume")
-+ACTL(mic_gain, "Mic Capture Gain")
-+
-+struct snd_ak4641_uctl_bool {
-+ int (*get) (struct snd_ak4641 *uda);
-+ int (*set) (struct snd_ak4641 *uda, int on);
-+};
-+
-+static int snd_ak4641_actl_bool_info(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
-+ uinfo->count = 1;
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_bool_get(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+ struct snd_ak4641_uctl_bool *uctl =
-+ (struct snd_ak4641_uctl_bool *) kcontrol->private_value;
-+
-+ ucontrol->value.integer.value[0] = uctl->get(ak);
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_bool_put(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+ struct snd_ak4641_uctl_bool *uctl =
-+ (struct snd_ak4641_uctl_bool *) kcontrol->private_value;
-+
-+ return uctl->set(ak, ucontrol->value.integer.value[0]);
-+}
-+
-+/*-begin----------------------------------------------------------*/
-+static int snd_ak4641_uctl_playback_switch_get(struct snd_ak4641 *ak)
-+{
-+ return (ak->regs[R_DAC] & R_DAC_SMUTE) == 0x00;
-+}
-+
-+static int snd_ak4641_uctl_playback_switch_set(struct snd_ak4641 *ak, int on)
-+{
-+ snd_ak4641_lock(ak);
-+ ak->regs[R_DAC] = WRITE_MASK(ak->regs[R_DAC],
-+ on ? 0x00 : R_DAC_SMUTE, R_DAC_SMUTE);
-+ snd_ak4641_reg_changed(ak, R_DAC);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+/*-end------------------------------------------------------------*/
-+
-+/*-begin----------------------------------------------------------*/
-+static int snd_ak4641_uctl_mic_boost_get(struct snd_ak4641 *ak)
-+{
-+ return (ak->regs[R_MIC] & R_MIC_MGAIN) == R_MIC_MGAIN;
-+}
-+
-+static int snd_ak4641_uctl_mic_boost_set(struct snd_ak4641 *ak, int on)
-+{
-+ snd_ak4641_lock(ak);
-+ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC],
-+ on ? R_MIC_MGAIN : 0x00, R_MIC_MGAIN);
-+ snd_ak4641_reg_changed(ak, R_MIC);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+/*-end------------------------------------------------------------*/
-+
-+/*-begin----------------------------------------------------------*/
-+static int snd_ak4641_uctl_mono_out_get(struct snd_ak4641 *ak)
-+{
-+ printk("mono_out status 0x%8.8x -> 0x%8.8x\n",ak->regs[R_SEL1], ak->regs[R_SEL1] & REG_SEL1_PSMO);
-+ return (ak->regs[R_SEL1] & REG_SEL1_PSMO) == REG_SEL1_PSMO;
-+}
-+
-+static int snd_ak4641_uctl_mono_out_set(struct snd_ak4641 *ak, int on)
-+{
-+ printk("phone mic enable called. on=%d\n",on);
-+ snd_ak4641_lock(ak);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], on ? R_PM1_PMMIC : 0x00, R_PM1_PMMIC);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], on ? REG_PWR1_PMMO : 0x00, REG_PWR1_PMMO);
-+ snd_ak4641_reg_changed(ak, R_PM1);
-+
-+ snd_ak4641_hwsync_write(ak, R_PGA); /* mic PGA gain is reset when PMMIC = 0 */
-+
-+ /* internal mic */
-+ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], on ? R_MIC_MPWRI : 0x0, R_MIC_MPWRI);
-+ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], 0x0, R_MIC_MSEL);
-+ snd_ak4641_hwsync_write(ak, R_MIC);
-+
-+// ak->regs[REG_BTIF] = WRITE_MASK(ak->regs[REG_BTIF], 0x0, REG_BTIF_DAC2);
-+// snd_ak4641_hwsync_write(ak, REG_BTIF);
-+ /* */
-+// ak->regs[REG_VOL] = WRITE_MASK(ak->regs[REG_VOL], on ? REG_VOL_ATTM : 0x00, REG_VOL_ATTM);
-+// ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_MOGN : 0x00, REG_SEL1_MOGN);
-+ ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_MICM : 0x00, REG_SEL1_MICM);
-+ ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_PSMO : 0x00, REG_SEL1_PSMO);
-+ snd_ak4641_reg_changed(ak, R_SEL1);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+/*-end------------------------------------------------------------*/
-+
-+#define ACTL_BOOL(ctl_name, _name) \
-+static struct snd_ak4641_uctl_bool snd_ak4641_actl_ ## ctl_name ## _pvalue = \
-+{ .get = snd_ak4641_uctl_ ## ctl_name ## _get, \
-+ .set = snd_ak4641_uctl_ ## ctl_name ## _set }; \
-+static struct snd_kcontrol_new snd_ak4641_actl_ ## ctl_name = \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = _name, .info = snd_ak4641_actl_bool_info, \
-+ .get = snd_ak4641_actl_bool_get, .put = snd_ak4641_actl_bool_put, \
-+ .private_value = (unsigned long) &snd_ak4641_actl_ ## ctl_name ## _pvalue };
-+
-+ACTL_BOOL(playback_switch, "Master Playback Switch")
-+ACTL_BOOL(mic_boost, "Mic Boost (+20dB)")
-+ACTL_BOOL(mono_out, "Phone mic enable")
-+
-+static void snd_ak4641_headphone_on(struct snd_ak4641 *ak, int on);
-+static void snd_ak4641_speaker_on(struct snd_ak4641 *ak, int on);
-+static void snd_ak4641_select_mic(struct snd_ak4641 *ak);
-+
-+void snd_ak4641_hp_connected(struct snd_ak4641 *ak, int connected)
-+{
-+ snd_ak4641_lock(ak);
-+ if (connected != ak->hp_connected) {
-+ ak->hp_connected = connected;
-+
-+ /* headphone or speaker, on playback */
-+ if (ak->playback_on) {
-+ if (connected) {
-+ snd_ak4641_headphone_on(ak, 1);
-+ snd_ak4641_speaker_on(ak, 0);
-+ } else {
-+ snd_ak4641_speaker_on(ak, 1);
-+ snd_ak4641_headphone_on(ak, 0);
-+ }
-+ }
-+
-+ /* headset or internal mic, on capture */
-+ if (ak->capture_on)
-+ snd_ak4641_select_mic(ak);
-+ }
-+ snd_ak4641_unlock(ak);
-+}
-+
-+/* end {{ Controls }} */
-+
-+
-+/* begin {{ Headphone Detected Notification }} */
-+
-+static void snd_ak4641_hp_detected_w_fn(void *p)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *)p;
-+
-+ snd_ak4641_hp_connected(ak, ak->hp_detected.detected);
-+}
-+
-+void snd_ak4641_hp_detected(struct snd_ak4641 *ak, int detected)
-+{
-+ if (detected != ak->hp_detected.detected) {
-+ ak->hp_detected.detected = detected;
-+ queue_work(ak->hp_detected.wq, &ak->hp_detected.w);
-+ }
-+}
-+
-+static int snd_ak4641_hp_detected_init(struct snd_ak4641 *ak)
-+{
-+ INIT_WORK(&ak->hp_detected.w, snd_ak4641_hp_detected_w_fn);
-+ ak->hp_detected.detected = ak->hp_connected;
-+ ak->hp_detected.wq = create_singlethread_workqueue("ak4641");
-+ if (ak->hp_detected.wq) return 0;
-+ else return -1;
-+}
-+
-+static void snd_ak4641_hp_detected_free(struct snd_ak4641 *ak)
-+{
-+ destroy_workqueue(ak->hp_detected.wq);
-+}
-+
-+/* end {{ Headphone Detected Notification }} */
-+
-+
-+/* begin {{ Codec Control }} */
-+
-+static void snd_ak4641_headphone_on(struct snd_ak4641 *ak, int on)
-+{
-+ if (on) {
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ ak->headphone_out_on(1);
-+ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
-+ R_SEL2_PSLOL | R_SEL2_PSLOR,
-+ R_SEL2_PSLOL | R_SEL2_PSLOR);
-+ snd_ak4641_hwsync_write(ak, R_SEL2);
-+ } else {
-+ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
-+ 0x00, R_SEL2_PSLOL | R_SEL2_PSLOR);
-+ snd_ak4641_hwsync_write(ak, R_SEL2);
-+ ak->headphone_out_on(0);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ }
-+}
-+
-+static void snd_ak4641_speaker_on(struct snd_ak4641 *ak, int on)
-+{
-+ if (on) {
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ ak->speaker_out_on(1);
-+ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
-+ R_SEL2_PSLOL | R_SEL2_PSLOR,
-+ R_SEL2_PSLOL | R_SEL2_PSLOR);
-+ snd_ak4641_hwsync_write(ak, R_SEL2);
-+ } else {
-+ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
-+ 0x00, R_SEL2_PSLOL | R_SEL2_PSLOR);
-+ snd_ak4641_hwsync_write(ak, R_SEL2);
-+ ak->speaker_out_on(0);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ }
-+}
-+
-+static inline int snd_ak4641_power_on(struct snd_ak4641 *ak)
-+{
-+ ak->reset_pin(1);
-+ ak->power_on_chip(1);
-+ msleep(1);
-+ ak->reset_pin(0);
-+ ak->powered_on = 1;
-+ return 0;
-+}
-+
-+static inline int snd_ak4641_power_off(struct snd_ak4641 *ak)
-+{
-+ ak->powered_on = 0;
-+ ak->power_on_chip(0);
-+ return 0;
-+}
-+
-+static inline void snd_ak4641_headphone_out_on(struct snd_ak4641 *ak, int on)
-+{
-+ if (ak->headphone_out_on) ak->headphone_out_on(on);
-+}
-+
-+static inline void snd_ak4641_speaker_out_on(struct snd_ak4641 *ak, int on)
-+{
-+ if (ak->speaker_out_on) ak->speaker_out_on(on);
-+}
-+
-+static int snd_ak4641_playback_on(struct snd_ak4641 *ak)
-+{
-+ if (ak->playback_on) return 0;
-+
-+ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2],
-+ R_PM2_PMDAC, R_PM2_MCKPD | R_PM2_PMDAC);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO);
-+ snd_ak4641_hwsync_write(ak, R_PM2);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ if (ak->hp_connected) snd_ak4641_headphone_on(ak, 1);
-+ else snd_ak4641_speaker_on(ak, 1);
-+
-+ ak->playback_on = 1;
-+
-+ return 0;
-+}
-+
-+static int snd_ak4641_playback_off(struct snd_ak4641 *ak)
-+{
-+ if (!ak->playback_on) return 0;
-+
-+ ak->playback_on = 0;
-+
-+ if (ak->hp_connected) snd_ak4641_headphone_on(ak, 0);
-+ else snd_ak4641_speaker_on(ak, 0);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO);
-+ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2],
-+ (!ak->capture_on ? R_PM2_MCKPD : 0x00) | R_PM2_PMDAC,
-+ R_PM2_MCKPD | R_PM2_PMDAC);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ snd_ak4641_hwsync_write(ak, R_PM2);
-+
-+ return 0;
-+}
-+
-+static void snd_ak4641_select_mic(struct snd_ak4641 *ak)
-+{
-+ int mic = 0;
-+ u8 r_mic;
-+
-+ if (ak->hp_connected) {
-+ /* check headset mic */
-+ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], R_MIC_MPWRE, R_MIC_MPWRE);
-+ snd_ak4641_hwsync_write(ak, R_MIC);
-+ snd_ak4641_hwsync_read(ak, R_STATUS);
-+ mic = (ak->regs[R_STATUS] & R_STATUS_DTMIC) == R_STATUS_DTMIC;
-+
-+ printk("htcuniversal_ak4641_select_mic: mic=%d\n",mic);
-+
-+ r_mic = WRITE_MASK(ak->regs[R_MIC],
-+ R_MIC_MSEL | (ak->capture_on ? R_MIC_MPWRE : 0x00),
-+ R_MIC_MSEL | R_MIC_MPWRI | R_MIC_MPWRE);
-+ }
-+ else
-+ r_mic = WRITE_MASK(ak->regs[R_MIC],
-+ 0x00 | (ak->capture_on ? R_MIC_MPWRI : 0x00),
-+ R_MIC_MSEL | R_MIC_MPWRI | R_MIC_MPWRE);
-+
-+ if (r_mic != ak->regs[R_MIC]) {
-+ ak->regs[R_MIC] = r_mic;
-+ snd_ak4641_hwsync_write(ak, R_MIC);
-+ }
-+}
-+
-+static int snd_ak4641_capture_on(struct snd_ak4641 *ak)
-+{
-+ if (ak->capture_on) return 0;
-+
-+ if (!ak->playback_on) {
-+ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2], 0x00, R_PM2_MCKPD);
-+ snd_ak4641_hwsync_write(ak, R_PM2);
-+ }
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMMIC | R_PM1_PMADC,
-+ R_PM1_PMMIC | R_PM1_PMADC);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ snd_ak4641_hwsync_write(ak, R_PGA); /* mic PGA gain is reset when PMMIC = 0 */
-+
-+ ak->capture_on = 1;
-+
-+ snd_ak4641_select_mic(ak);
-+
-+ msleep(47); /* accounts for ADC init cycle, time enough for fs >= 44.1 kHz */
-+
-+ return 0;
-+}
-+
-+static int snd_ak4641_capture_off(struct snd_ak4641 *ak)
-+{
-+ if (!ak->capture_on) return 0;
-+
-+ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC],
-+ 0x00, R_MIC_MPWRI | R_MIC_MPWRE | R_MIC_MSEL);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMMIC | R_PM1_PMADC);
-+ snd_ak4641_hwsync_write(ak, R_MIC);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ if (!ak->playback_on) {
-+ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2], R_PM2_MCKPD, R_PM2_MCKPD);
-+ snd_ak4641_hwsync_write(ak, R_PM2);
-+ }
-+
-+ ak->capture_on = 0;
-+
-+ return 0;
-+}
-+
-+int snd_ak4641_open_stream(struct snd_ak4641 *ak, int stream)
-+{
-+ snd_ak4641_lock(ak);
-+ if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ ak->playback_stream_opened = 1;
-+ snd_ak4641_playback_on(ak);
-+ } else {
-+ ak->capture_stream_opened = 1;
-+ snd_ak4641_capture_on(ak);
-+ }
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+int snd_ak4641_close_stream(struct snd_ak4641 *ak, int stream)
-+{
-+ snd_ak4641_lock(ak);
-+ if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ ak->playback_stream_opened = 0;
-+ snd_ak4641_playback_off(ak);
-+ } else {
-+ ak->capture_stream_opened = 0;
-+ snd_ak4641_capture_off(ak);
-+ }
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+static int snd_ak4641_init_regs(struct snd_ak4641 *ak)
-+{
-+ snd_ak4641_hwsync_read_all(ak);
-+
-+ //@@ MEMO: add some configs
-+
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMVCM, R_PM1_PMVCM);
-+ ak->regs[R_DAC] = WRITE_MASK(ak->regs[R_DAC], 0x00, R_DAC_DATTC);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ snd_ak4641_hwsync_write(ak, R_DAC);
-+
-+ return 0;
-+}
-+
-+int snd_ak4641_suspend(struct snd_ak4641 *ak, pm_message_t state)
-+{
-+ snd_ak4641_lock(ak);
-+ if (ak->playback_on) snd_ak4641_playback_off(ak);
-+ if (ak->capture_on) snd_ak4641_capture_off(ak);
-+ snd_ak4641_power_off(ak);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+int snd_ak4641_resume(struct snd_ak4641 *ak)
-+{
-+ snd_ak4641_lock(ak);
-+ snd_ak4641_power_on(ak);
-+ snd_ak4641_hwsync_write_all(ak);
-+ if (ak->playback_stream_opened) snd_ak4641_playback_on(ak);
-+ if (ak->capture_stream_opened) snd_ak4641_capture_on(ak);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+static void snd_ak4641_init_ak(struct snd_ak4641 *ak)
-+{
-+ init_MUTEX(&ak->sem);
-+ ak->i2c_client.driver = &snd_ak4641_i2c_driver;
-+}
-+
-+int snd_ak4641_activate(struct snd_ak4641 *ak)
-+{
-+ int ret = 0;
-+
-+ snd_ak4641_init_ak(ak);
-+ snd_ak4641_lock(ak);
-+ snd_ak4641_power_on(ak);
-+ if ((ret = snd_ak4641_i2c_attach(ak)) < 0)
-+ goto failed_i2c_attach;
-+ snd_ak4641_init_regs(ak);
-+ if ((ret = snd_ak4641_hp_detected_init(ak)) < 0)
-+ goto failed_hp_detected_init;
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+
-+ failed_hp_detected_init:
-+ snd_ak4641_i2c_detach(ak);
-+ failed_i2c_attach:
-+ snd_ak4641_power_off(ak);
-+ snd_ak4641_unlock(ak);
-+ return ret;
-+}
-+
-+void snd_ak4641_deactivate(struct snd_ak4641 *ak)
-+{
-+ snd_ak4641_lock(ak);
-+ snd_ak4641_hp_detected_free(ak);
-+ snd_ak4641_i2c_detach(ak);
-+ snd_ak4641_power_off(ak);
-+ snd_ak4641_unlock(ak);
-+}
-+
-+int snd_ak4641_add_mixer_controls(struct snd_ak4641 *ak, struct snd_card *card)
-+{
-+ snd_ak4641_lock(ak);
-+ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_playback_volume, ak));
-+ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_playback_switch, ak));
-+ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mic_gain, ak));
-+ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mic_boost, ak));
-+ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mono_out, ak));
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+/* end {{ Codec Control }} */
-+
-+
-+/* begin {{ Module }} */
-+
-+static int __init snd_ak4641_module_on_load(void)
-+{
-+ snd_ak4641_i2c_init();
-+ return 0;
-+}
-+
-+static void __exit snd_ak4641_module_on_unload(void)
-+{
-+ snd_ak4641_i2c_free();
-+}
-+
-+module_init(snd_ak4641_module_on_load);
-+module_exit(snd_ak4641_module_on_unload);
-+
-+EXPORT_SYMBOL(snd_ak4641_activate);
-+EXPORT_SYMBOL(snd_ak4641_deactivate);
-+EXPORT_SYMBOL(snd_ak4641_add_mixer_controls);
-+EXPORT_SYMBOL(snd_ak4641_open_stream);
-+EXPORT_SYMBOL(snd_ak4641_close_stream);
-+EXPORT_SYMBOL(snd_ak4641_suspend);
-+EXPORT_SYMBOL(snd_ak4641_resume);
-+EXPORT_SYMBOL(snd_ak4641_hp_connected);
-+EXPORT_SYMBOL(snd_ak4641_hp_detected);
-+
-+MODULE_AUTHOR("Giorgio Padrin");
-+MODULE_DESCRIPTION("Audio support for codec Asahi Kasei AK4641");
-+MODULE_LICENSE("GPL");
-+
-+/* end {{ Module }} */
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,65 @@
-+/*
-+ * Audio support for codec Asahi Kasei AK4641
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Copyright (c) 2006 Giorgio Padrin <giorgio@mandarinlogiq.org>
-+ */
-+
-+#ifndef __SOUND_AK4641_H
-+#define __SOUND_AK4641_H
-+
-+#include <linux/i2c.h>
-+
-+struct snd_ak4641 {
-+ struct semaphore sem;
-+
-+ u8 regs[0x14]; /* registers cache */
-+
-+ unsigned int
-+ powered_on:1,
-+ playback_on:1,
-+ playback_stream_opened:1,
-+ capture_on:1,
-+ capture_stream_opened:1;
-+
-+ unsigned int
-+ hp_connected:1;
-+
-+ /* -- configuration (to fill before activation) -- */
-+ void (*power_on_chip)(int on);
-+ void (*reset_pin)(int on);
-+ void (*headphone_out_on)(int on);
-+ void (*speaker_out_on)(int on);
-+
-+ struct i2c_client i2c_client; /* to fill .adapter */
-+ /* ----------------------------------------------- */
-+
-+ struct {
-+ int detected;
-+ struct workqueue_struct *wq;
-+ struct work_struct w;
-+ } hp_detected;
-+};
-+
-+
-+/* Note: opening, closing, suspending and resuming a stream
-+ * require the clocks (MCLK and I2S ones) running
-+ */
-+
-+/* don't forget to specify I2C adapter in i2c_client field */
-+int snd_ak4641_activate(struct snd_ak4641 *ak);
-+
-+void snd_ak4641_deactivate(struct snd_ak4641 *ak);
-+int snd_ak4641_add_mixer_controls(struct snd_ak4641 *ak, struct snd_card *card);
-+int snd_ak4641_open_stream(struct snd_ak4641 *ak, int stream);
-+int snd_ak4641_close_stream(struct snd_ak4641 *ak, int stream);
-+int snd_ak4641_suspend(struct snd_ak4641 *ak, pm_message_t state);
-+int snd_ak4641_resume(struct snd_ak4641 *ak);
-+
-+void snd_ak4641_hp_connected(struct snd_ak4641 *ak, int connected); /* non atomic context */
-+void snd_ak4641_hp_detected(struct snd_ak4641 *ak, int detected); /* atomic context */
-+
-+#endif /* __SOUND_AK4641_H */
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,143 @@
-+/*
-+ * LEDs support for the HP iPaq hx4700
-+ *
-+ * Copyright (c) 2006 Anton Vorontsov <cbou@mail.ru>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <asm/mach-types.h>
-+#include <asm/hardware/asic3_leds.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+//FIXME
-+//DEFINE_LED_TRIGGER_SHARED_GLOBAL(htcuniversal_radio_trig);
-+//EXPORT_LED_TRIGGER_SHARED(htcuniversal_radio_trig);
-+
-+static struct asic3_led htcuniversal_leds[] = {
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:red",
-+ .default_trigger = "htcuniversal-charging",
-+ },
-+ .hw_num = 2,
-+
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:green",
-+ .default_trigger = "htcuniversal-chargefull",
-+ },
-+ .hw_num = 1,
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:wifi-bt",
-+ .default_trigger = "htcuniversal-radio",
-+ },
-+ .hw_num = 0,
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:phonebuttons",
-+ .default_trigger = "htcuniversal-phonebuttons",
-+ },
-+ .hw_num = -1,
-+ .gpio_num = ('D'-'A')*16+GPIOD_BL_KEYP_PWR_ON,
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:vibra",
-+ .default_trigger = "htcuniversal-vibra",
-+ },
-+ .hw_num = -1,
-+ .gpio_num = ('D'-'A')*16+GPIOD_VIBRA_PWR_ON,
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:flashlight1",
-+ .default_trigger = "htcuniversal-flashlight1",
-+ },
-+ .hw_num = -1,
-+ .gpio_num = ('A'-'A')*16+GPIOA_FLASHLIGHT,
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:kbdbacklight",
-+ .default_trigger = "htcuniversal-kbdbacklight",
-+ },
-+ .hw_num = -1,
-+ .gpio_num = ('D'-'A')*16+GPIOD_BL_KEYB_PWR_ON,
-+ },
-+};
-+
-+void htcuniversal_leds_release(struct device *dev)
-+{
-+ return;
-+}
-+
-+static
-+struct asic3_leds_machinfo htcuniversal_leds_machinfo = {
-+ .num_leds = ARRAY_SIZE(htcuniversal_leds),
-+ .leds = htcuniversal_leds,
-+ .asic3_pdev = &htcuniversal_asic3,
-+};
-+
-+static
-+struct platform_device htcuniversal_leds_pdev = {
-+ .name = "asic3-leds",
-+ .dev = {
-+ .platform_data = &htcuniversal_leds_machinfo,
-+ .release = htcuniversal_leds_release,
-+ },
-+};
-+
-+static
-+int __init htcuniversal_leds_init(void)
-+{
-+ int ret;
-+ printk("htcuniversal LEDs Driver\n");
-+// led_trigger_register_shared("htcuniversal-radio", &htcuniversal_radio_trig);
-+
-+ ret = asic3_leds_register();
-+ if (ret) goto asic3_leds_failed;
-+
-+ ret = platform_device_register(&htcuniversal_leds_pdev);
-+ if (ret) goto platform_device_failed;
-+
-+ goto success;
-+
-+platform_device_failed:
-+ asic3_leds_unregister();
-+asic3_leds_failed:
-+// led_trigger_unregister_shared(htcuniversal_radio_trig);
-+ printk("htcuniversal LEDs Driver failed to init");
-+success:
-+ return ret;
-+}
-+
-+static
-+void __exit htcuniversal_leds_exit(void)
-+{
-+// led_trigger_unregister_shared(htcuniversal_radio_trig);
-+ platform_device_unregister(&htcuniversal_leds_pdev);
-+ asic3_leds_unregister();
-+ return;
-+}
-+
-+module_init(htcuniversal_leds_init);
-+module_exit(htcuniversal_leds_exit);
-+
-+MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>");
-+MODULE_DESCRIPTION("htcuniversal LEDs driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,61 @@
-+/*
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ * Copyright (C) 2006 Paul Sokolosvky
-+ * Based on code from older versions of htcuniversal_lcd.c
-+ *
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/platform_device.h>
-+#include <asm/arch/hardware.h> /* for pxa-regs.h (__REG) */
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/mach-types.h> /* machine_is_htcuniversal */
-+//#include <linux/corgi_bl.h>
-+#include <linux/backlight.h>
-+#include <linux/err.h>
-+
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#define HTCUNIVERSAL_MAX_INTENSITY 0xc7
-+
-+static void htcuniversal_set_bl_intensity(int intensity)
-+{
-+ PWM_CTRL1 = 1; /* pre-scaler */
-+ PWM_PWDUTY1 = intensity; /* duty cycle */
-+ PWM_PERVAL1 = HTCUNIVERSAL_MAX_INTENSITY+1; /* period */
-+
-+ if (intensity > 0) {
-+ pxa_set_cken(CKEN_PWM1, 1);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev,
-+ (1<<GPIOD_FL_PWR_ON), (1<<GPIOD_FL_PWR_ON));
-+ } else {
-+ pxa_set_cken(CKEN_PWM1, 0);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev,
-+ (1<<GPIOD_FL_PWR_ON), 0);
-+ }
-+}
-+
-+
-+static struct generic_bl_info htcuniversal_bl_machinfo = {
-+ .default_intensity = HTCUNIVERSAL_MAX_INTENSITY / 4,
-+ .limit_mask = 0xff,
-+ .max_intensity = HTCUNIVERSAL_MAX_INTENSITY,
-+ .set_bl_intensity = htcuniversal_set_bl_intensity,
-+};
-+
-+struct platform_device htcuniversal_bl = {
-+ .name = "corgi-bl",
-+ .dev = {
-+ .platform_data = &htcuniversal_bl_machinfo,
-+ },
-+};
-+
-+MODULE_AUTHOR("Paul Sokolovsky <pmiscml@gmail.com>");
-+MODULE_DESCRIPTION("Backlight driver for HTC Universal");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,135 @@
-+/* Bluetooth interface driver for TI BRF6150 on HX4700
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * 2005-04-21 Todd Blumer Created.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/serial.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+#include "htcuniversal_bt.h"
-+
-+static uint use_led=1;
-+
-+static void
-+htcuniversal_bt_configure( int state )
-+{
-+ int tries;
-+
-+ printk( KERN_NOTICE "htcuniversal configure bluetooth: %d\n", state );
-+ switch (state) {
-+
-+ case PXA_UART_CFG_PRE_STARTUP:
-+ break;
-+
-+ case PXA_UART_CFG_POST_STARTUP:
-+ /* pre-serial-up hardware configuration */
-+ htcuniversal_egpio_enable(1<<EGPIO5_BT_3V3_ON);
-+ mdelay(50);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_PWR_ON, 1<<GPIOC_BT_PWR_ON);
-+ mdelay(10);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_RESET, 0);
-+ mdelay(10);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_RESET, 1<<GPIOC_BT_RESET);
-+ mdelay(10);
-+
-+ /*
-+ * BRF6150's RTS goes low when firmware is ready
-+ * so check for CTS=1 (nCTS=0 -> CTS=1). Typical 150ms
-+ */
-+ tries = 0;
-+ do {
-+ mdelay(10);
-+ } while ((BTMSR & MSR_CTS) == 0 && tries++ < 50);
-+ if (use_led) {
-+// htcuniversal_set_led(2, 16, 16);
-+ }
-+ break;
-+
-+ case PXA_UART_CFG_PRE_SHUTDOWN:
-+ htcuniversal_egpio_disable(1<<EGPIO5_BT_3V3_ON );
-+ mdelay(50);
-+// htcuniversal_clear_led(2);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_PWR_ON, 0);
-+ break;
-+
-+ default:
-+ break;
-+ }
-+}
-+
-+
-+static int
-+htcuniversal_bt_probe( struct platform_device *dev )
-+{
-+ struct htcuniversal_bt_funcs *funcs = dev->dev.platform_data;
-+
-+ /* configure bluetooth UART */
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_RXD_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_TXD_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_UART_CTS_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_UART_RTS_MD );
-+
-+ funcs->configure = htcuniversal_bt_configure;
-+
-+ /* Make sure the LED is off */
-+// htcuniversal_clear_led(2);
-+
-+ return 0;
-+}
-+
-+static int
-+htcuniversal_bt_remove( struct platform_device *dev )
-+{
-+ struct htcuniversal_bt_funcs *funcs = dev->dev.platform_data;
-+
-+ funcs->configure = NULL;
-+
-+ /* Make sure the LED is off */
-+// htcuniversal_clear_led(2);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver bt_driver = {
-+ .driver = {
-+ .name = "htcuniversal_bt",
-+ },
-+ .probe = htcuniversal_bt_probe,
-+ .remove = htcuniversal_bt_remove,
-+};
-+
-+module_param(use_led, uint, 0);
-+
-+static int __init
-+htcuniversal_bt_init( void )
-+{
-+ printk(KERN_NOTICE "htcuniversal Bluetooth Driver\n");
-+ return platform_driver_register( &bt_driver );
-+}
-+
-+static void __exit
-+htcuniversal_bt_exit( void )
-+{
-+ platform_driver_unregister( &bt_driver );
-+}
-+
-+module_init( htcuniversal_bt_init );
-+module_exit( htcuniversal_bt_exit );
-+
-+MODULE_AUTHOR("Todd Blumer, SDG Systems, LLC");
-+MODULE_DESCRIPTION("HTC Universal Bluetooth Support Driver");
-+MODULE_LICENSE("GPL");
-+
-+/* vim600: set noexpandtab sw=8 ts=8 :*/
-+
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,17 @@
-+/*
-+ * Bluetooth support file for calling bluetooth configuration functions
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * 2005-06 Todd Blumer Initial Revision
-+ */
-+
-+#ifndef _HTCUNIVERSAL_BT_H
-+#define _HTCUNIVERSAL_BT_H
-+
-+struct htcuniversal_bt_funcs {
-+ void (*configure) ( int state );
-+};
-+
-+
-+#endif
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,87 @@
-+/*
-+ * Buttons driver for HTC Universal
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.
-+ *
-+ * Copyright (C) 2005 Pawel Kolodziejski
-+ * Copyright (C) 2003 Joshua Wise
-+ *
-+ */
-+
-+#include <linux/input.h>
-+#include <linux/input_pda.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/interrupt.h>
-+#include <linux/irq.h>
-+#include <linux/platform_device.h>
-+#include <linux/gpio_keys.h>
-+#include <linux/soc/asic3_base.h>
-+#include <asm/mach-types.h>
-+#include <asm/hardware/asic3_keys.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+static struct asic3_keys_button asic3_buttons[] = {
-+//{KEY_SCREEN, ASIC3_GPIOA_IRQ_BASE+GPIOA_COVER_ROTATE_N, 1, "screen_cover", EV_SW},
-+//{KEY_SWITCHVIDEOMODE, ASIC3_GPIOB_IRQ_BASE+GPIOB_CLAMSHELL_N, 1, "clamshell_rotate", EV_SW},
-+//{KEY_KBDILLUMTOGGLE, ASIC3_GPIOB_IRQ_BASE+GPIOB_NIGHT_SENSOR, 1, "night_sensor", EV_SW},
-+{SW_LID, ASIC3_GPIOA_IRQ_BASE+GPIOA_COVER_ROTATE_N, 1, "screen_cover", EV_SW},
-+{SW_TABLET_MODE, ASIC3_GPIOB_IRQ_BASE+GPIOB_CLAMSHELL_N, 1, "clamshell_rotate", EV_SW},
-+//{SW_NIGHT_SENSOR, ASIC3_GPIOB_IRQ_BASE+GPIOB_NIGHT_SENSOR, 1, "night_sensor", EV_SW},
-+{KEY_F10, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_BACKLIGHT_N, 1, "backlight_button"},
-+{KEY_RECORD, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_RECORD_N, 1, "record_button"},
-+{KEY_CAMERA, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_CAMERA_N, 1, "camera_button"},
-+{KEY_VOLUMEDOWN, ASIC3_GPIOA_IRQ_BASE+GPIOA_VOL_UP_N, 1, "volume_slider_down"},
-+{KEY_VOLUMEUP, ASIC3_GPIOA_IRQ_BASE+GPIOA_VOL_DOWN_N, 1, "volume_slider_up"},
-+{KEY_KPENTER, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_OK_N, 1, "select"},
-+{KEY_RIGHT, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_RIGHT_N, 1, "right"},
-+{KEY_LEFT, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_LEFT_N, 1, "left"},
-+{KEY_DOWN, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_DOWN_N, 1, "down"},
-+{KEY_UP, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_UP_N, 1, "up"},
-+};
-+
-+static struct asic3_keys_platform_data asic3_keys_data = {
-+ .buttons = asic3_buttons,
-+ .nbuttons = ARRAY_SIZE(asic3_buttons),
-+ .asic3_dev = &htcuniversal_asic3.dev,
-+};
-+
-+static struct platform_device htcuniversal_keys_asic3 = {
-+ .name = "asic3-keys",
-+ .dev = { .platform_data = &asic3_keys_data, }
-+};
-+
-+static int __init htcuniversal_buttons_probe(struct platform_device *dev)
-+{
-+ platform_device_register(&htcuniversal_keys_asic3);
-+ return 0;
-+}
-+
-+static struct platform_driver htcuniversal_buttons_driver = {
-+ .driver = {
-+ .name = "htcuniversal_buttons",
-+ },
-+ .probe = htcuniversal_buttons_probe,
-+};
-+
-+static int __init htcuniversal_buttons_init(void)
-+{
-+ if (!machine_is_htcuniversal())
-+ return -ENODEV;
-+
-+ return platform_driver_register(&htcuniversal_buttons_driver);
-+}
-+
-+static void __exit htcuniversal_buttons_exit(void)
-+{
-+ platform_driver_unregister(&htcuniversal_buttons_driver);
-+}
-+
-+module_init(htcuniversal_buttons_init);
-+module_exit(htcuniversal_buttons_exit);
-+
-+MODULE_AUTHOR ("Joshua Wise, Pawel Kolodziejski, Paul Sokolosvky");
-+MODULE_DESCRIPTION ("Buttons support for HTC Universal");
-+MODULE_LICENSE ("GPL");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,226 @@
-+/* Core Hardware driver for Hx4700 (Serial, ASIC3, EGPIOs)
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * 2005-03-29 Todd Blumer Converted basic structure to support hx4700
-+ * 2005-04-30 Todd Blumer Add IRDA code from H2200
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/interrupt.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/irq.h>
-+
-+#include <asm/io.h>
-+#include <asm/mach/irq.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/pxa-pm_ll.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+#include <linux/soc/asic3_base.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+
-+volatile u_int16_t *egpios;
-+u_int16_t egpio_reg;
-+
-+static int htc_bootloader = 0; /* Is the stock HTC bootloader installed? */
-+
-+/*
-+ * may make sense to put egpios elsewhere, but they're here now
-+ * since they share some of the same address space with the TI WLAN
-+ *
-+ * EGPIO register is write-only
-+ */
-+
-+void
-+htcuniversal_egpio_enable( u_int16_t bits )
-+{
-+ unsigned long flags;
-+
-+ local_irq_save(flags);
-+
-+ egpio_reg |= bits;
-+ *egpios = egpio_reg;
-+
-+ local_irq_restore(flags);
-+}
-+EXPORT_SYMBOL_GPL(htcuniversal_egpio_enable);
-+
-+void
-+htcuniversal_egpio_disable( u_int16_t bits )
-+{
-+ unsigned long flags;
-+
-+ local_irq_save(flags);
-+
-+ egpio_reg &= ~bits;
-+ *egpios = egpio_reg;
-+
-+ local_irq_restore(flags);
-+}
-+EXPORT_SYMBOL_GPL(htcuniversal_egpio_disable);
-+
-+#ifdef CONFIG_PM
-+
-+void htcuniversal_ll_pm_init(void);
-+
-+static int htcuniversal_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ /* Turn off external clocks here, because htcuniversal_power and asic3_mmc
-+ * scared to do so to not hurt each other. (-5 mA) */
-+
-+
-+ /* 0x20c2 is HTC clock value
-+ * CLOCK_CDEX_SOURCE 2
-+ * CLOCK_CDEX_SPI 0
-+ * CLOCK_CDEX_OWM 0
-+ *
-+ * CLOCK_CDEX_PWM0 0
-+ * CLOCK_CDEX_PWM1 0
-+ * CLOCK_CDEX_LED0 1
-+ * CLOCK_CDEX_LED1 1
-+ *
-+ * CLOCK_CDEX_LED2 0
-+ * CLOCK_CDEX_SD_HOST 0
-+ * CLOCK_CDEX_SD_BUS 0
-+ * CLOCK_CDEX_SMBUS 0
-+ *
-+ * CLOCK_CDEX_CONTROL_CX 0
-+ * CLOCK_CDEX_EX0 1
-+ * CLOCK_CDEX_EX1 0
-+ * */
-+ asic3_set_clock_cdex(&htcuniversal_asic3.dev, 0xffff, CLOCK_CDEX_SOURCE1
-+ |CLOCK_CDEX_LED0
-+ |CLOCK_CDEX_LED1
-+ |CLOCK_CDEX_LED2
-+ |CLOCK_CDEX_EX0
-+ |CLOCK_CDEX_EX1);
-+
-+ *egpios = 0; /* turn off all egpio power */
-+
-+ /* Wake up enable. */
-+ PWER = PWER_GPIO0
-+ | PWER_GPIO1 /* reset */
-+ | PWER_GPIO9 /* USB */
-+ | PWER_GPIO10 /* AC on USB */
-+ | PWER_GPIO14 /* ASIC3 mux */
-+ | PWER_RTC;
-+ /* Wake up on falling edge. */
-+ PFER = PWER_GPIO0
-+ | PWER_GPIO1
-+ | PWER_GPIO9
-+ | PWER_GPIO10
-+ | PWER_GPIO14;
-+
-+ /* Wake up on rising edge. */
-+ PRER = PWER_GPIO0
-+ | PWER_GPIO1
-+ | PWER_GPIO9
-+ | PWER_GPIO10;
-+ /* 3.6864 MHz oscillator power-down enable */
-+ PCFR = PCFR_OPDE | PCFR_PI2CEN | PCFR_GPROD | PCFR_GPR_EN;
-+
-+ PGSR0 = 0x09088004;
-+ PGSR1 = 0x00020002;
-+ PGSR2 = 0x8001c000;
-+ PGSR3 = 0x00106284;
-+
-+ PSLR = 0xcc000000;
-+
-+#if 0
-+ /*
-+ * If we're using bootldr and not the stock HTC bootloader,
-+ * we want to wake up periodically to see if the charge is full while
-+ * it is suspended. We do this with the OS timer 4 in the pxa270.
-+ */
-+ if (!htc_bootloader) {
-+ OMCR4 = 0x4b; /* Periodic, self-resetting, 1-second timer */
-+ OSMR4 = 5; /* Wake up bootldr after x seconds so it can
-+ figure out what to do with the LEDs. */
-+ OIER |= 0x10; /* Enable interrupt source for Timer 4 */
-+ OSCR4 = 0; /* This starts the timer */
-+ }
-+#endif
-+
-+ asic3_set_extcf_select(&htcuniversal_asic3.dev, ASIC3_EXTCF_OWM_EN, 0);
-+
-+ return 0;
-+}
-+
-+static int htcuniversal_resume(struct platform_device *dev)
-+{
-+ htcuniversal_egpio_enable(0);
-+
-+ return 0;
-+}
-+#else
-+# define htcuniversal_suspend NULL
-+# define htcuniversal_resume NULL
-+#endif
-+
-+static int
-+htcuniversal_core_probe( struct platform_device *dev )
-+{
-+
-+ printk( KERN_NOTICE "HTC Universal Core Hardware Driver\n" );
-+
-+ egpios = (volatile u_int16_t *)ioremap_nocache(HTCUNIVERSAL_EGPIO_BASE, sizeof *egpios );
-+ if (!egpios)
-+ return -ENODEV;
-+ else
-+ printk( KERN_NOTICE "HTC Universal Core: egpio at phy=0x%8.8x is at virt=0x%p\n",
-+ HTCUNIVERSAL_EGPIO_BASE, egpios );
-+
-+ printk("Using stock HTC first stage bootloader\n");
-+ htc_bootloader = 1;
-+
-+ htcuniversal_ll_pm_init();
-+
-+ return 0;
-+}
-+
-+static int
-+htcuniversal_core_remove( struct platform_device *dev )
-+{
-+
-+ if (egpios != NULL)
-+ iounmap( (void *)egpios );
-+
-+ return 0;
-+}
-+
-+static struct platform_driver htcuniversal_core_driver = {
-+ .driver = {
-+ .name = "htcuniversal_core",
-+ },
-+ .probe = htcuniversal_core_probe,
-+ .remove = htcuniversal_core_remove,
-+ .suspend = htcuniversal_suspend,
-+ .resume = htcuniversal_resume,
-+};
-+
-+static int __init
-+htcuniversal_core_init( void )
-+{
-+ return platform_driver_register( &htcuniversal_core_driver );
-+}
-+
-+
-+static void __exit
-+htcuniversal_core_exit( void )
-+{
-+ platform_driver_unregister( &htcuniversal_core_driver );
-+}
-+
-+module_init( htcuniversal_core_init );
-+module_exit( htcuniversal_core_exit );
-+
-+MODULE_AUTHOR("Todd Blumer, SDG Systems, LLC");
-+MODULE_DESCRIPTION("HTC Universal Core Hardware Driver");
-+MODULE_LICENSE("GPL");
-+
-+/* vim600: set noexpandtab sw=8 ts=8 :*/
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,212 @@
-+/*
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ * History:
-+ *
-+ * 2004-03-01 Eddi De Pieri Adapted for htcuniversal using h3900_lcd.c
-+ * 2004 Shawn Anderson Lcd hacking on htcuniversal
-+ * see h3900_lcd.c for more history.
-+ *
-+ */
-+
-+#include <linux/types.h>
-+#include <asm/arch/hardware.h> /* for pxa-regs.h (__REG) */
-+#include <linux/platform_device.h>
-+#include <asm/arch/pxa-regs.h> /* LCCR[0,1,2,3]* */
-+#include <asm/arch/bitfield.h> /* for pxa-regs.h (Fld, etc) */
-+#include <asm/arch/pxafb.h> /* pxafb_mach_info, set_pxa_fb_info */
-+#include <asm/mach-types.h> /* machine_is_htcuniversal */
-+#include <linux/lcd.h> /* lcd_device */
-+#include <linux/err.h>
-+#include <linux/delay.h>
-+
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <linux/soc/asic3_base.h>
-+
-+static int saved_lcdpower=-1;
-+
-+static int powerup_lcd(void)
-+{
-+ printk( KERN_INFO "htcuniversal powerup_lcd: called\n");
-+
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 0);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 0);
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 0);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 0);
-+ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 0);
-+#if 1
-+ LCCR4|=LCCR4_PCDDIV;
-+#endif
-+ pxa_set_cken(CKEN_LCD, 0);
-+
-+ mdelay(100);
-+ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 1<<GPIOA_LCD_PWR5_ON);
-+ mdelay(5);
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 1<<GPIOB_LCD_PWR3_ON);
-+ mdelay(2);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 1<<GPIOC_LCD_PWR1_ON);
-+ mdelay(2);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 1<<GPIOC_LCD_PWR2_ON);
-+ mdelay(20);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 1<<GPIOD_LCD_PWR4_ON);
-+ mdelay(1);
-+ pxa_set_cken(CKEN_LCD, 1);
-+
-+ SET_HTCUNIVERSAL_GPIO(LCD1,1);
-+ SET_HTCUNIVERSAL_GPIO(LCD2,1);
-+ return 0;
-+}
-+
-+static int powerdown_lcd(void)
-+{
-+ printk( KERN_INFO "htcuniversal powerdown_lcd: called\n");
-+
-+#if 1
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 0);
-+ mdelay(100);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 0);
-+ mdelay(10);
-+ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 0);
-+ mdelay(1);
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 0);
-+ mdelay(1);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 0);
-+ pxa_set_cken(CKEN_LCD, 0);
-+
-+ SET_HTCUNIVERSAL_GPIO(LCD1,0);
-+ SET_HTCUNIVERSAL_GPIO(LCD2,0);
-+#else
-+ pxa_set_cken(CKEN_LCD, 0);
-+
-+ SET_HTCUNIVERSAL_GPIO(LCD1,0);
-+ SET_HTCUNIVERSAL_GPIO(LCD2,0);
-+
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 0);
-+ mdelay(100);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 0);
-+ mdelay(10);
-+ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 0);
-+ mdelay(1);
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 0);
-+ mdelay(1);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 0);
-+#endif
-+ return 0;
-+}
-+
-+static int htcuniversal_lcd_set_power(struct lcd_device *lm, int power)
-+{
-+ /* Enable or disable power to the LCD (0: on; 4: off) */
-+
-+ if ( power < 1 ) {
-+
-+ powerup_lcd();
-+
-+ } else {
-+
-+ powerdown_lcd();
-+
-+ }
-+
-+ saved_lcdpower=power;
-+
-+ return 0;
-+}
-+
-+static int htcuniversal_lcd_get_power(struct lcd_device *lm)
-+{
-+ /* Get the LCD panel power status (0: full on, 1..3: controller
-+ * power on, flat panel power off, 4: full off) */
-+
-+ if (saved_lcdpower == -1)
-+ {
-+ htcuniversal_lcd_set_power(lm, 4);
-+ saved_lcdpower=4;
-+ }
-+
-+ return saved_lcdpower;
-+}
-+
-+static struct lcd_ops htcuniversal_lcd_properties =
-+{
-+ .get_power = htcuniversal_lcd_get_power,
-+ .set_power = htcuniversal_lcd_set_power,
-+};
-+
-+static struct lcd_device *htcuniversal_lcd_dev;
-+
-+static int htcuniversal_lcd_probe(struct platform_device * dev)
-+{
-+ htcuniversal_lcd_dev = lcd_device_register("pxa2xx-fb", NULL,
-+ &htcuniversal_lcd_properties);
-+ if (IS_ERR(htcuniversal_lcd_dev)) {
-+ printk("htcuniversal_lcd_probe: error registering devices\n");
-+ return -1;
-+ }
-+
-+ return 0;
-+}
-+
-+static int htcuniversal_lcd_remove(struct platform_device * dev)
-+{
-+ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 4);
-+ lcd_device_unregister(htcuniversal_lcd_dev);
-+
-+ return 0;
-+}
-+
-+static int htcuniversal_lcd_suspend(struct platform_device * dev, pm_message_t state)
-+{
-+// printk("htcuniversal_lcd_suspend: called.\n");
-+ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 4);
-+ return 0;
-+}
-+
-+static int htcuniversal_lcd_resume(struct platform_device * dev)
-+{
-+// printk("htcuniversal_lcd_resume: called.\n");
-+
-+ /* */
-+#if 1
-+ LCCR4|=LCCR4_PCDDIV;
-+#endif
-+
-+ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 0);
-+ return 0;
-+}
-+
-+static struct platform_driver htcuniversal_lcd_driver = {
-+ .driver = {
-+ .name = "htcuniversal_lcd",
-+ },
-+ .probe = htcuniversal_lcd_probe,
-+ .remove = htcuniversal_lcd_remove,
-+ .suspend = htcuniversal_lcd_suspend,
-+ .resume = htcuniversal_lcd_resume,
-+};
-+
-+static int htcuniversal_lcd_init(void)
-+{
-+ if (!machine_is_htcuniversal())
-+ return -ENODEV;
-+
-+ return platform_driver_register(&htcuniversal_lcd_driver);
-+}
-+
-+static void htcuniversal_lcd_exit(void)
-+{
-+ lcd_device_unregister(htcuniversal_lcd_dev);
-+ platform_driver_unregister(&htcuniversal_lcd_driver);
-+}
-+
-+module_init(htcuniversal_lcd_init);
-+module_exit(htcuniversal_lcd_exit);
-+
-+MODULE_AUTHOR("xanadux.org");
-+MODULE_DESCRIPTION("Framebuffer driver for HTC Universal");
-+MODULE_LICENSE("GPL");
-+
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,167 @@
-+
-+/* Phone interface driver for Qualcomm MSM6250 on HTC Universal
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * 2005-04-21 Todd Blumer Created.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/serial.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+#include "htcuniversal_phone.h"
-+
-+static void phone_reset(void)
-+{
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_RESET2, 0);
-+
-+ SET_HTCUNIVERSAL_GPIO(PHONE_RESET,0);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 0);
-+ mdelay(1);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 1<<GPIOD_BB_RESET1);
-+ mdelay(20);
-+ SET_HTCUNIVERSAL_GPIO(PHONE_RESET,1);
-+ mdelay(200);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 0);
-+}
-+
-+static void phone_off(void)
-+{
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 1<<GPIOD_BB_RESET1);
-+ mdelay(2000);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 0);
-+
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_RESET2, 1<<GPIOB_BB_RESET2);
-+ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,0);
-+}
-+
-+static void
-+htcuniversal_phone_configure( int state )
-+{
-+ int tries;
-+ unsigned short statusb;
-+
-+ printk( KERN_NOTICE "htcuniversal configure phone: %d\n", state );
-+ switch (state) {
-+
-+ case PXA_UART_CFG_PRE_STARTUP:
-+ break;
-+
-+ case PXA_UART_CFG_POST_STARTUP:
-+ /* pre-serial-up hardware configuration */
-+
-+ SET_HTCUNIVERSAL_GPIO(PHONE_START,0); /* "bootloader" */
-+ SET_HTCUNIVERSAL_GPIO(PHONE_UNKNOWN,0); /* not used */
-+ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,0); /* PHONE_OFF */
-+
-+ phone_reset();
-+
-+ SET_HTCUNIVERSAL_GPIO(PHONE_START,1); /* phone */
-+
-+ phone_reset();
-+
-+ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_READY, 0);
-+ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_UNKNOWN3, 0);
-+
-+ /*
-+ */
-+ tries = 0;
-+ do {
-+ mdelay(10);
-+ statusb = asic3_get_gpio_status_b( &htcuniversal_asic3.dev );
-+ } while ( (statusb & (1<<GPIOB_UMTS_DCD)) == 0 && tries++ < 200);
-+
-+ printk("UMTS_DCD tries=%d of 200\n",tries);
-+
-+ tries = 0;
-+ do {
-+ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,1);
-+ mdelay(10);
-+ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,0);
-+ mdelay(20);
-+ statusb = asic3_get_gpio_status_b( &htcuniversal_asic3.dev );
-+ } while ( (statusb & (1<<GPIOB_BB_READY)) == 0 && tries++ < 200);
-+
-+ printk("BB_READY tries=%d of 200\n",tries);
-+
-+ break;
-+
-+ case PXA_UART_CFG_PRE_SHUTDOWN:
-+
-+ phone_off();
-+
-+ break;
-+
-+ default:
-+ break;
-+ }
-+}
-+
-+
-+static int
-+htcuniversal_phone_probe( struct platform_device *dev )
-+{
-+ struct htcuniversal_phone_funcs *funcs = dev->dev.platform_data;
-+
-+ /* configure phone UART */
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_RXD_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_TXD_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS_MD );
-+
-+ funcs->configure = htcuniversal_phone_configure;
-+
-+ return 0;
-+}
-+
-+static int
-+htcuniversal_phone_remove( struct platform_device *dev )
-+{
-+ struct htcuniversal_phone_funcs *funcs = dev->dev.platform_data;
-+
-+ funcs->configure = NULL;
-+
-+ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_READY, 1<<GPIOB_BB_READY);
-+ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_UNKNOWN3, 1<<GPIOB_BB_UNKNOWN3);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver phone_driver = {
-+ .driver = {
-+ .name = "htcuniversal_phone",
-+ },
-+ .probe = htcuniversal_phone_probe,
-+ .remove = htcuniversal_phone_remove,
-+};
-+
-+static int __init
-+htcuniversal_phone_init( void )
-+{
-+ printk(KERN_NOTICE "htcuniversal Phone Driver\n");
-+ return platform_driver_register( &phone_driver );
-+}
-+
-+static void __exit
-+htcuniversal_phone_exit( void )
-+{
-+ platform_driver_unregister( &phone_driver );
-+}
-+
-+module_init( htcuniversal_phone_init );
-+module_exit( htcuniversal_phone_exit );
-+
-+MODULE_AUTHOR("Todd Blumer, SDG Systems, LLC");
-+MODULE_DESCRIPTION("HTC Universal Phone Support Driver");
-+MODULE_LICENSE("GPL");
-+
-+/* vim600: set noexpandtab sw=8 ts=8 :*/
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,16 @@
-+/*
-+ * Bluetooth support file for calling bluetooth configuration functions
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * 2005-06 Todd Blumer Initial Revision
-+ */
-+
-+#ifndef _HTCUNIVERSAL_PHONE_H
-+#define _HTCUNIVERSAL_PHONE_H
-+
-+struct htcuniversal_phone_funcs {
-+ void (*configure) ( int state );
-+};
-+
-+#endif
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,69 @@
-+/*
-+ * MyPal 716 power management support for the original HTC IPL in DoC G3
-+ *
-+ * Use consistent with the GNU GPL is permitted, provided that this
-+ * copyright notice is preserved in its entirety in all copies and
-+ * derived works.
-+ *
-+ * Copyright (C) 2005 Pawel Kolodziejski
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/device.h>
-+#include <linux/pm.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/pxa-pm_ll.h>
-+
-+#ifdef CONFIG_PM
-+
-+static u32 *addr_a0040000;
-+static u32 *addr_a0040004;
-+static u32 *addr_a0040008;
-+static u32 *addr_a004000c;
-+
-+static u32 save_a0040000;
-+static u32 save_a0040004;
-+static u32 save_a0040008;
-+static u32 save_a004000c;
-+
-+static void htcuniversal_pxa_ll_pm_suspend(unsigned long resume_addr)
-+{
-+ save_a0040000 = *addr_a0040000;
-+ save_a0040004 = *addr_a0040004;
-+ save_a0040008 = *addr_a0040008;
-+ save_a004000c = *addr_a004000c;
-+
-+ /* jump to PSPR */
-+ *addr_a0040000 = 0xe3a00101; // mov r0, #0x40000000
-+ *addr_a0040004 = 0xe380060f; // orr r0, r0, #0x0f000000
-+ *addr_a0040008 = 0xe3800008; // orr r0, r0, #8
-+ *addr_a004000c = 0xe590f000; // ldr pc, [r0]
-+}
-+
-+static void htcuniversal_pxa_ll_pm_resume(void)
-+{
-+ *addr_a0040000 = save_a0040000;
-+ *addr_a0040004 = save_a0040004;
-+ *addr_a0040008 = save_a0040008;
-+ *addr_a004000c = save_a004000c;
-+}
-+
-+static struct pxa_ll_pm_ops htcuniversal_ll_pm_ops = {
-+ .suspend = htcuniversal_pxa_ll_pm_suspend,
-+ .resume = htcuniversal_pxa_ll_pm_resume,
-+};
-+
-+void htcuniversal_ll_pm_init(void) {
-+ addr_a0040000 = phys_to_virt(0xa0040000);
-+ addr_a0040004 = phys_to_virt(0xa0040004);
-+ addr_a0040008 = phys_to_virt(0xa0040008);
-+ addr_a004000c = phys_to_virt(0xa004000c);
-+
-+ pxa_pm_set_ll_ops(&htcuniversal_ll_pm_ops);
-+}
-+#endif /* CONFIG_PM */
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,97 @@
-+/*
-+ * pda_power driver for HTC Universal
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or (at
-+ * your option) any later version.
-+ *
-+ */
-+
-+#include <linux/platform_device.h>
-+#include <linux/module.h>
-+#include <linux/pda_power.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/hardware.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+static void charge_on(int flags)
-+{
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_CHARGE_EN, 0);
-+}
-+
-+static int ac_on(void)
-+{
-+ return (GET_HTCUNIVERSAL_GPIO(POWER_DET) == 0);
-+}
-+
-+static int usb_on(void)
-+{
-+ return (GET_HTCUNIVERSAL_GPIO(USB_DET) == 0);
-+}
-+
-+static char *supplicants[] = {
-+ "ds2760-battery.0", "backup-battery"
-+};
-+
-+static struct pda_power_pdata power_pdata = {
-+ .is_ac_online = ac_on,
-+ .is_usb_online = usb_on,
-+ .set_charge = charge_on,
-+ .supplied_to = supplicants,
-+ .num_supplicants = ARRAY_SIZE(supplicants),
-+};
-+
-+static struct resource power_resources[] = {
-+ [0] = {
-+ .name = "ac",
-+ .start = HTCUNIVERSAL_IRQ(POWER_DET),
-+ .end = HTCUNIVERSAL_IRQ(POWER_DET),
-+ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE,
-+ },
-+ [1] = {
-+ .name = "usb",
-+ .start = HTCUNIVERSAL_IRQ(USB_DET),
-+ .end = HTCUNIVERSAL_IRQ(USB_DET),
-+ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE,
-+ },
-+};
-+
-+static void dev_release(struct device *dev)
-+{
-+ return;
-+}
-+
-+static struct platform_device power_dev =
-+{
-+ .name = "pda-power",
-+ .id = -1,
-+ .resource = power_resources,
-+ .num_resources = ARRAY_SIZE(power_resources),
-+ .dev =
-+ {
-+ .platform_data = &power_pdata,
-+ .release = dev_release,
-+ },
-+};
-+
-+static int htcuniversal_power_init(void)
-+{
-+ return platform_device_register(&power_dev);
-+}
-+
-+static void htcuniversal_power_exit(void)
-+{
-+ platform_device_unregister(&power_dev);
-+
-+ return;
-+}
-+
-+module_init(htcuniversal_power_init);
-+module_exit(htcuniversal_power_exit);
-+
-+MODULE_DESCRIPTION("Power driver for HTC Universal");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,490 @@
-+/* Touch screen driver for the TI something-or-other
-+ *
-+ * Copyright © 2005 SDG Systems, LLC
-+ *
-+ * Based on code that was based on the SAMCOP driver.
-+ * Copyright © 2003, 2004 Compaq Computer Corporation.
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
-+ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
-+ * FITNESS FOR ANY PARTICULAR PURPOSE.
-+ *
-+ * Author: Keith Packard <keith.packard@hp.com>
-+ * May 2003
-+ *
-+ * Updates:
-+ *
-+ * 2004-02-11 Michael Opdenacker Renamed names from samcop to shamcop,
-+ * Goal:support HAMCOP and SAMCOP.
-+ * 2004-02-14 Michael Opdenacker Temporary fix for device id handling
-+ *
-+ * 2005-02-18 Aric Blumer Converted basic structure to support hx4700
-+ *
-+ * 2005-06-07 Aric Blumer Added tssim device handling so we can
-+ * hook in the fbvncserver.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/version.h>
-+
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <linux/cdev.h>
-+#include <linux/interrupt.h>
-+#include <linux/sched.h>
-+#include <linux/pm.h>
-+#include <linux/delay.h>
-+#include <linux/input.h>
-+#include <linux/platform_device.h>
-+#include <linux/irq.h>
-+
-+#include <asm/arch/hardware.h>
-+#include <asm/mach/irq.h>
-+#include <asm/io.h>
-+
-+/* remove me */
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+#include <asm/mach-types.h>
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <linux/soc/asic3_base.h>
-+
-+
-+#include "tsc2046_ts.h"
-+
-+enum touchscreen_state {
-+ STATE_WAIT_FOR_TOUCH, /* Waiting for a PEN interrupt */
-+ STATE_SAMPLING /* Actively sampling ADC */
-+};
-+
-+struct touchscreen_data {
-+ enum touchscreen_state state;
-+ struct timer_list timer;
-+ int irq;
-+ struct input_dev *input;
-+ /* */
-+ int port;
-+ int clock;
-+ int pwrbit_X;
-+ int pwrbit_Y;
-+ int (*pen_down)(void);
-+};
-+
-+static unsigned long poll_sample_time = 10; /* Sample every 10 milliseconds */
-+
-+static struct touchscreen_data *ts_data;
-+
-+static int irqblock;
-+
-+module_param(poll_sample_time, ulong, 0644);
-+MODULE_PARM_DESC(poll_sample_time, "Poll sample time");
-+
-+static inline void
-+report_touchpanel(struct touchscreen_data *ts, int pressure, int x, int y)
-+{
-+ input_report_abs(ts->input, ABS_PRESSURE, pressure);
-+ input_report_abs(ts->input, ABS_X, x);
-+ input_report_abs(ts->input, ABS_Y, y);
-+ input_sync(ts->input);
-+}
-+
-+static void start_read(struct touchscreen_data *touch);
-+
-+static irqreturn_t
-+pen_isr(int irq, void *irq_desc)
-+{
-+ struct touchscreen_data *ts = ts_data;
-+
-+ if(irq == ts->irq /* && !irqblock */) {
-+ irqblock = 1;
-+
-+ /*
-+ * Disable the pen interrupt. It's reenabled when the user lifts the
-+ * pen.
-+ */
-+ disable_irq(ts->irq);
-+
-+ if (ts->state == STATE_WAIT_FOR_TOUCH) {
-+ ts->state = STATE_SAMPLING;
-+ start_read(ts);
-+ } else {
-+ /* Shouldn't happen */
-+ printk(KERN_ERR "Unexpected ts interrupt\n");
-+ }
-+
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+static void
-+ssp_init(int port, int clock)
-+{
-+
-+ pxa_set_cken(clock, 0);
-+
-+ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_CLK_MD);
-+ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_FRM_MD);
-+ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DO_MD);
-+ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DI_MD);
-+
-+ SET_HTCUNIVERSAL_GPIO(SPI_FRM,1);
-+
-+ /* *** Set up the SPI Registers *** */
-+ SSCR0_P(port) =
-+ SSCR0_EDSS /* Extended Data Size Select */
-+ | SSCR0_SerClkDiv(7) /* Serial Clock Rate */
-+ /* Synchronous Serial Enable (Disable for now) */
-+ | SSCR0_Motorola /* Motorola SPI Interface */
-+ | SSCR0_DataSize(8) /* Data Size Select (24-bit) */
-+ ;
-+ SSCR1_P(port) = 0;
-+ SSPSP_P(port) = 0;
-+
-+ /* Clear the Status */
-+ SSSR_P(port) = SSSR_P(port) & 0x00fcfffc;
-+
-+ /* Now enable it */
-+ SSCR0_P(port) =
-+ SSCR0_EDSS /* Extended Data Size Select */
-+ | SSCR0_SerClkDiv(7) /* Serial Clock Rate */
-+ | SSCR0_SSE /* Synchronous Serial Enable */
-+ | SSCR0_Motorola /* Motorola SPI Interface */
-+ | SSCR0_DataSize(8) /* Data Size Select (24-bit) */
-+ ;
-+
-+ pxa_set_cken(clock, 1);
-+}
-+
-+static void
-+start_read(struct touchscreen_data *touch)
-+{
-+ unsigned long inc = (poll_sample_time * HZ) / 1000;
-+ int i;
-+
-+ /* Write here to the serial port. We request X and Y only for now.
-+ * Then we have to wait for poll_sample_time before we read out the serial
-+ * port. Then, when we read it out, we check to see if the pen is still
-+ * down. If so, then we issue another request here.
-+ */
-+#define TS_SAMPLES 7
-+
-+ /*
-+ * We do four samples for each, and throw out the highest and lowest, then
-+ * average the other two.
-+ */
-+
-+ for(i = 0; i < TS_SAMPLES; i++) {
-+ while(!(SSSR_P(touch->port) & SSSR_TNF))
-+ ;
-+ /* It's not full. Write the command for X */
-+ SSDR_P(touch->port) = (TSC2046_SAMPLE_X|(touch->pwrbit_X))<<16;
-+ }
-+
-+ for(i = 0; i < TS_SAMPLES; i++) {
-+ while(!(SSSR_P(touch->port) & SSSR_TNF))
-+ ;
-+ /* It's not full. Write the command for Y */
-+ SSDR_P(touch->port) = (TSC2046_SAMPLE_Y|(touch->pwrbit_Y))<<16;
-+ }
-+
-+ /*
-+ * Enable the timer. We should get an interrupt, but we want keep a timer
-+ * to ensure that we can detect missing data
-+ */
-+ mod_timer(&touch->timer, jiffies + inc);
-+}
-+
-+static void
-+ts_timer_callback(unsigned long data)
-+{
-+ struct touchscreen_data *ts = (struct touchscreen_data *)data;
-+ int x, a[TS_SAMPLES], y;
-+ static int oldx, oldy;
-+ int ssrval;
-+
-+ /*
-+ * Check here to see if there is anything in the SPI FIFO. If so,
-+ * return it if there has been a change. If not, then we have a
-+ * timeout. Generate an erro somehow.
-+ */
-+ ssrval = SSSR_P(ts->port);
-+
-+ if(ssrval & SSSR_RNE) { /* Look at Rx Not Empty bit */
-+ int number_of_entries_in_fifo;
-+
-+ /* The FIFO is not emtpy. Good! Now make sure there are at least two
-+ * entries. (Should be two exactly.) */
-+
-+ number_of_entries_in_fifo = ((ssrval >> 12) & 0xf) + 1;
-+
-+ if(number_of_entries_in_fifo < TS_SAMPLES * 2) {
-+ /* Not ready yet. Come back later. */
-+ unsigned long inc = (poll_sample_time * HZ) / 1000;
-+ mod_timer(&ts->timer, jiffies + inc);
-+ return;
-+ }
-+
-+ if(number_of_entries_in_fifo == TS_SAMPLES * 2) {
-+ int i, j;
-+
-+ for(i = 0; i < TS_SAMPLES; i++) {
-+ a[i] = SSDR_P(ts->port);
-+ }
-+ /* Sort them (bubble) */
-+ for(j = TS_SAMPLES - 1; j > 0; j--) {
-+ for(i = 0; i < j; i++) {
-+ if(a[i] > a[i + 1]) {
-+ int tmp;
-+ tmp = a[i+1];
-+ a[i+1] = a[i];
-+ a[i] = tmp;
-+ }
-+ }
-+ }
-+
-+ /* Take the average of the middle two */
-+ /* x = (a[TS_SAMPLES/2 - 1] + a[TS_SAMPLES/2] + a[TS_SAMPLES/2+1] + a[TS_SAMPLES/2+2]) >> 2; */
-+ x = a[TS_SAMPLES/2];
-+
-+ for(i = 0; i < TS_SAMPLES; i++) {
-+ a[i] = SSDR_P(ts->port);
-+ }
-+ /* Sort them (bubble) */
-+ for(j = TS_SAMPLES - 1; j > 0; j--) {
-+ for(i = 0; i < j; i++) {
-+ if(a[i] > a[i + 1]) {
-+ int tmp;
-+ tmp = a[i+1];
-+ a[i+1] = a[i];
-+ a[i] = tmp;
-+ }
-+ }
-+ }
-+
-+
-+ /* Take the average of the middle two */
-+ /* y = (a[TS_SAMPLES/2 - 1] + a[TS_SAMPLES/2] + a[TS_SAMPLES/2+1] + a[TS_SAMPLES/2+2]) >> 2; */
-+ y = a[TS_SAMPLES/2];
-+ } else {
-+ /* We have an error! Too many entries. */
-+ printk(KERN_ERR "TS: Expected %d entries. Got %d\n", TS_SAMPLES*2, number_of_entries_in_fifo);
-+ /* Try to clear the FIFO */
-+ while(number_of_entries_in_fifo--) {
-+ (void)SSDR_P(ts->port);
-+ }
-+
-+ if (ts->pen_down())
-+ start_read(ts);
-+
-+ return;
-+ }
-+ } else {
-+ /* Not ready yet. Come back later. */
-+ unsigned long inc = (poll_sample_time * HZ) / 1000;
-+ mod_timer(&ts->timer, jiffies + inc);
-+ return;
-+ }
-+
-+ /*
-+ * Now we check to see if the pen is still down. If it is, then call
-+ * start_read().
-+ */
-+ if (ts->pen_down())
-+ {
-+ /* Still down */
-+ if(oldx != x || oldy != y) {
-+ oldx = x;
-+ oldy = y;
-+ report_touchpanel(ts, 1, x, y);
-+ }
-+ start_read(ts);
-+ } else {
-+ /* Up */
-+ report_touchpanel(ts, 0, 0, 0);
-+ irqblock = 0;
-+ ts->state = STATE_WAIT_FOR_TOUCH;
-+ /* Re-enable pen down interrupt */
-+ enable_irq(ts->irq);
-+ }
-+}
-+
-+static int pen_down(void)
-+{
-+ return ( asic3_get_gpio_status_a( &htcuniversal_asic3.dev ) & (1<<GPIOA_TOUCHSCREEN_N)) == 0 ;
-+}
-+
-+static int
-+ts_probe (struct platform_device *dev)
-+{
-+ int retval;
-+ struct touchscreen_data *ts;
-+ struct tsc2046_mach_info *mach = dev->dev.platform_data;
-+
-+ printk("htcuniversal: ts_probe\n");
-+
-+ ts = ts_data = kmalloc (sizeof (*ts), GFP_KERNEL);
-+ if (ts == NULL) {
-+ printk( KERN_NOTICE "htcuniversal_ts: unable to allocate memory\n" );
-+ return -ENOMEM;
-+ }
-+ memset (ts, 0, sizeof (*ts));
-+
-+ ts->input = input_allocate_device();
-+ if (ts->input == NULL) {
-+ printk( KERN_NOTICE "htcuniversal_ts: unable to allocation touchscreen input\n" );
-+ kfree(ts);
-+ return -ENOMEM;
-+ }
-+ ts->input->evbit[0] = BIT(EV_ABS);
-+ ts->input->absbit[0] = BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE);
-+ ts->input->absmin[ABS_X] = 0;
-+ ts->input->absmax[ABS_X] = 32767;
-+ ts->input->absmin[ABS_Y] = 0;
-+ ts->input->absmax[ABS_Y] = 32767;
-+ ts->input->absmin[ABS_PRESSURE] = 0;
-+ ts->input->absmax[ABS_PRESSURE] = 1;
-+
-+ ts->input->name = "htcuniversal_ts";
-+ ts->input->phys = "touchscreen/htcuniversal_ts";
-+ ts->input->private = ts;
-+
-+ input_register_device(ts->input);
-+
-+ ts->timer.function = ts_timer_callback;
-+ ts->timer.data = (unsigned long)ts;
-+ ts->state = STATE_WAIT_FOR_TOUCH;
-+ init_timer (&ts->timer);
-+
-+ platform_set_drvdata(dev, ts);
-+
-+ ts->port=-1;
-+
-+ if (mach) {
-+ ts->port = mach->port;
-+ ts->clock = mach->clock;
-+ ts->pwrbit_X = mach->pwrbit_X;
-+ ts->pwrbit_Y = mach->pwrbit_Y;
-+
-+ /* static irq */
-+ if (mach->irq)
-+ ts->irq = mach->irq;
-+
-+ if (mach->pen_down)
-+ ts->pen_down=mach->pen_down;
-+ }
-+
-+ if (ts->port == -1)
-+ {
-+ printk("tsc2046: your device is not supported by this driver\n");
-+ return -ENODEV;
-+ }
-+
-+ /* *** Initialize the SSP interface *** */
-+ ssp_init(ts->port, ts->clock);
-+
-+ while(!(SSSR_P(ts->port) & SSSR_TNF))
-+ ;
-+ SSDR_P(ts->port) = (TSC2046_SAMPLE_X|(ts->pwrbit_X))<<16;
-+
-+ for(retval = 0; retval < 100; retval++) {
-+ if(SSSR_P(ts->port) & SSSR_RNE) {
-+ while(SSSR_P(ts->port) & SSSR_RNE) {
-+ (void)SSDR_P(ts->port);
-+ }
-+ break;
-+ }
-+ mdelay(1);
-+ }
-+
-+ if (machine_is_htcuniversal() )
-+ {
-+ ts->irq = asic3_irq_base( &htcuniversal_asic3.dev ) + ASIC3_GPIOA_IRQ_BASE + GPIOA_TOUCHSCREEN_N;
-+ ts->pen_down=pen_down;
-+ }
-+
-+ retval = request_irq(ts->irq, pen_isr, SA_INTERRUPT, "tsc2046_ts", ts);
-+ if(retval) {
-+ printk("Unable to get interrupt\n");
-+ input_unregister_device (ts->input);
-+ return -ENODEV;
-+ }
-+ set_irq_type(ts->irq, IRQ_TYPE_EDGE_FALLING);
-+
-+ return 0;
-+}
-+
-+static int
-+ts_remove (struct platform_device *dev)
-+{
-+ struct touchscreen_data *ts = platform_get_drvdata(dev);
-+
-+ input_unregister_device (ts->input);
-+ del_timer_sync (&ts->timer);
-+ free_irq (ts->irq, ts);
-+ pxa_set_cken(ts->clock, 0);
-+
-+ kfree(ts);
-+ return 0;
-+}
-+
-+static int
-+ts_suspend (struct platform_device *dev, pm_message_t state)
-+{
-+ struct touchscreen_data *ts = platform_get_drvdata(dev);
-+
-+ disable_irq(ts->irq);
-+
-+ printk("htcuniversal_ts2_suspend: called.\n");
-+ return 0;
-+}
-+
-+static int
-+ts_resume (struct platform_device *dev)
-+{
-+ struct touchscreen_data *ts = platform_get_drvdata(dev);
-+
-+ ts->state = STATE_WAIT_FOR_TOUCH;
-+ ssp_init(ts->port, ts->clock);
-+ enable_irq(ts->irq);
-+
-+ printk("htcuniversal_ts2_resume: called.\n");
-+ return 0;
-+}
-+
-+static struct platform_driver ts_driver = {
-+ .probe = ts_probe,
-+ .remove = ts_remove,
-+ .suspend = ts_suspend,
-+ .resume = ts_resume,
-+ .driver = {
-+ .name = "htcuniversal_ts",
-+ },
-+};
-+
-+
-+static int
-+ts_module_init (void)
-+{
-+ printk(KERN_NOTICE "HTC Universal Touch Screen Driver\n");
-+
-+ return platform_driver_register(&ts_driver);
-+}
-+
-+static void
-+ts_module_cleanup (void)
-+{
-+ platform_driver_unregister (&ts_driver);
-+}
-+
-+module_init(ts_module_init);
-+module_exit(ts_module_cleanup);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Aric Blumer, SDG Systems, LLC");
-+MODULE_DESCRIPTION("HTC Universal Touch Screen Driver");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,71 @@
-+
-+/*
-+ *
-+ * htcuniversal_udc.c:
-+ * htcuniversal specific code for the pxa27x usb device controller.
-+ *
-+ * Use consistent with the GNU GPL is permitted.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/udc.h>
-+#include <linux/soc/asic3_base.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+static void htcuniversal_udc_command(int cmd)
-+{
-+ switch (cmd) {
-+ case PXA2XX_UDC_CMD_DISCONNECT:
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev,
-+ 1<<GPIOB_USB_PUEN, 0);
-+// SET_HTCUNIVERSAL_GPIO(USB_PUEN,0);
-+ break;
-+ case PXA2XX_UDC_CMD_CONNECT:
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev,
-+ 1<<GPIOB_USB_PUEN, 1<<GPIOB_USB_PUEN);
-+// SET_HTCUNIVERSAL_GPIO(USB_PUEN,1);
-+ break;
-+ default:
-+ printk("_udc_control: unknown command!\n");
-+ break;
-+ }
-+}
-+
-+static int htcuniversal_udc_is_connected(void)
-+{
-+ return (GET_HTCUNIVERSAL_GPIO(USB_DET) != 0);
-+}
-+
-+static struct pxa2xx_udc_mach_info htcuniversal_udc_info __initdata = {
-+ .udc_is_connected = htcuniversal_udc_is_connected,
-+ .udc_command = htcuniversal_udc_command,
-+};
-+
-+static int htcuniversal_udc_probe(struct platform_device * dev)
-+{
-+ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_USB_PUEN, 1<<GPIOB_USB_PUEN);
-+
-+ pxa_set_udc_info(&htcuniversal_udc_info);
-+ return 0;
-+}
-+
-+static struct platform_driver htcuniversal_udc_driver = {
-+ .driver = {
-+ .name = "htcuniversal_udc",
-+ },
-+ .probe = htcuniversal_udc_probe,
-+};
-+
-+static int __init htcuniversal_udc_init(void)
-+{
-+ return platform_driver_register(&htcuniversal_udc_driver);
-+}
-+
-+module_init(htcuniversal_udc_init);
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,20 @@
-+/*
-+ * temporary TSC2046 touchscreen hack
-+ */
-+
-+#ifndef _TSC2046_TS_H
-+#define _TSC2046_TS_H
-+
-+struct tsc2046_mach_info {
-+ int port;
-+ int clock;
-+ int pwrbit_X;
-+ int pwrbit_Y;
-+ int irq;
-+ int (*pen_down)(void);
-+};
-+
-+#define TSC2046_SAMPLE_X 0xd0
-+#define TSC2046_SAMPLE_Y 0x90
-+
-+#endif
-Index: linux-2.6.22/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.22.orig/arch/arm/mach-pxa/Kconfig 2007-08-23 13:09:21.000000000 +0200
-+++ linux-2.6.22/arch/arm/mach-pxa/Kconfig 2007-08-23 13:09:22.000000000 +0200
-@@ -46,6 +46,14 @@
- help
- This enables support for the HP iPAQ HX2750 handheld.
-
-+config MACH_HTCUNIVERSAL
-+ bool "HTC Universal"
-+ select PXA27x
-+ help
-+ Say Y here if you intend to run this kernel on a
-+ HTC Universal. Currently there is only basic support
-+ for this PDA.
-+
- endchoice
-
- if PXA_SHARPSL
-@@ -80,6 +88,86 @@
-
- endif
-
-+if MACH_HTCUNIVERSAL
-+
-+menu "HTC Universal support"
-+
-+config HTCUNIVERSAL_CORE
-+ tristate "HTC Universal core"
-+ depends on MACH_HTCUNIVERSAL
-+ help
-+ This selection enables HTC Universal core support.
-+
-+config HTCUNIVERSAL_UDC
-+ bool "USB Device Controller support"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3 && USB_PXA27X
-+ help
-+ Enables HTC Universal specific USB detection
-+
-+config HTCUNIVERSAL_POWER
-+ tristate "HTC Universal power"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3
-+ help
-+ This selection enables HTC Universal power monitoring
-+ hardware support (through ASIC3).
-+
-+config HTCUNIVERSAL_BACKLIGHT
-+ bool "HTC Universal Backlight"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3 && BACKLIGHT_CLASS_DEVICE
-+ help
-+ This driver provides support for changing power and brightness
-+ on HTC Universal LCD backlight.
-+
-+config HTCUNIVERSAL_LCD
-+ tristate "HTC Universal LCD"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3 && LCD_CLASS_DEVICE
-+ help
-+ This driver provides support for changing power and brightness
-+ on HTC Universal LCD display.
-+
-+config HTCUNIVERSAL_TS2
-+ tristate "HTC Universal Touchscreen (old)"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3
-+ help
-+ Enable support for the HTC Universal Touchscreen Panel.
-+
-+config HTCUNIVERSAL_BUTTONS
-+ tristate "HTC Universal buttons support"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3
-+
-+config HTCUNIVERSAL_BLUETOOTH
-+ tristate "HTC Universal Bluetooth"
-+ depends on MACH_HTCUNIVERSAL && HTCUNIVERSAL_CORE && HTC_ASIC3
-+ help
-+ Enables support for the TI BRF6150 Bluetooth Module
-+ in the HTC Universal.
-+
-+config HTCUNIVERSAL_ASIC3_LEDS
-+ tristate "HTC Universal ASIC3 LED support"
-+ select LEDS_ASIC3
-+ depends on MACH_HTCUNIVERSAL && HTCUNIVERSAL_CORE && HTC_ASIC3
-+ ---help---
-+ Support for right (colors red+green+(amber)) and left (green+blue) led
-+ Off/on hook keys LED backlight
-+ Keyboard backlight
-+ Vibra
-+ Flashlight
-+
-+config HTCUNIVERSAL_PHONE
-+ tristate "HTC Universal Phone"
-+ depends on MACH_HTCUNIVERSAL && HTCUNIVERSAL_CORE && HTC_ASIC3
-+ help
-+ Enables support for the Qualcomm MSM6520 Phone Module
-+ in the HTC Universal.
-+
-+config HTCUNIVERSAL_AK4641
-+ depends on SND && I2C
-+ tristate "AK4641 chipset support"
-+
-+endmenu
-+
-+endif
-+
- endmenu
-
- config MACH_POODLE
-@@ -160,4 +248,3 @@
- depends on (PXA25x || PXA27x) && INPUT
-
- endif
--
-Index: linux-2.6.22/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.22.orig/arch/arm/mach-pxa/Makefile 2007-08-23 13:09:21.000000000 +0200
-+++ linux-2.6.22/arch/arm/mach-pxa/Makefile 2007-08-23 13:09:22.000000000 +0200
-@@ -19,6 +19,7 @@
- obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o sharpsl_pm.o poodle_pm.o
- obj-$(CONFIG_MACH_TOSA) += tosa.o
- obj-$(CONFIG_MACH_HX2750) += hx2750.o hx2750_test.o
-+obj-$(CONFIG_MACH_HTCUNIVERSAL) += htcuniversal/
-
- # Support for blinky lights
- led-y := leds.o
-Index: linux-2.6.22/arch/arm/mach-pxa/pm.c
-===================================================================
---- linux-2.6.22.orig/arch/arm/mach-pxa/pm.c 2007-08-23 13:09:20.000000000 +0200
-+++ linux-2.6.22/arch/arm/mach-pxa/pm.c 2007-08-23 13:09:22.000000000 +0200
-@@ -22,6 +22,7 @@
- #include <asm/system.h>
- #include <asm/arch/pm.h>
- #include <asm/arch/pxa-regs.h>
-+#include <asm/arch/pxa-pm_ll.h>
- #include <asm/arch/lubbock.h>
- #include <asm/mach/time.h>
-
-@@ -75,12 +76,16 @@
- };
-
-
-+static struct pxa_ll_pm_ops *ll_ops;
-+
- int pxa_pm_enter(suspend_state_t state)
- {
- unsigned long sleep_save[SLEEP_SAVE_SIZE];
- unsigned long checksum = 0;
-+ struct timespec delta, rtc;
- int i;
- extern void pxa_cpu_pm_enter(suspend_state_t state);
-+ extern void pxa_cpu_resume(void);
-
- #ifdef CONFIG_IWMMXT
- /* force any iWMMXt context to ram **/
-@@ -88,6 +93,11 @@
- iwmmxt_task_disable(NULL);
- #endif
-
-+ /* preserve current time */
-+ rtc.tv_sec = RCNR;
-+ rtc.tv_nsec = 0;
-+ save_time_delta(&delta, &rtc);
-+
- SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2);
- SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2);
- SAVE(GRER0); SAVE(GRER1); SAVE(GRER2);
-@@ -123,6 +133,15 @@
- /* Clear sleep reset status */
- RCSR = RCSR_SMR;
-
-+ /* Set resume return address */
-+ PSPR = virt_to_phys(pxa_cpu_resume);
-+
-+ /* If we have special sus/res logic, use it */
-+ if(ll_ops && ll_ops->suspend) {
-+ extern void pxa_cpu_resume(void);
-+ ll_ops->suspend(virt_to_phys(pxa_cpu_resume));
-+ }
-+
- /* before sleeping, calculate and save a checksum */
- for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++)
- checksum += sleep_save[i];
-@@ -138,6 +157,9 @@
- for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++)
- checksum += sleep_save[i];
-
-+ if(ll_ops && ll_ops->resume)
-+ ll_ops->resume();
-+
- /* if invalid, display message and wait for a hardware reset */
- if (checksum != sleep_save[SLEEP_SAVE_CKSUM]) {
- #ifdef CONFIG_ARCH_LUBBOCK
-@@ -179,6 +201,10 @@
-
- RESTORE(PSTR);
-
-+ /* restore current time */
-+ rtc.tv_sec = RCNR;
-+ restore_time_delta(&delta, &rtc);
-+
- #ifdef DEBUG
- printk(KERN_DEBUG "*** made it back from resume\n");
- #endif
-@@ -188,6 +214,13 @@
-
- EXPORT_SYMBOL_GPL(pxa_pm_enter);
-
-+struct pxa_ll_pm_ops *pxa_pm_set_ll_ops(struct pxa_ll_pm_ops *new_ops) {
-+ struct pxa_ll_pm_ops *old_ops = ll_ops;
-+ ll_ops = new_ops;
-+ return old_ops;
-+}
-+EXPORT_SYMBOL(pxa_pm_set_ll_ops);
-+
- unsigned long sleep_phys_sp(void *sp)
- {
- return virt_to_phys(sp);
-@@ -219,8 +252,9 @@
- .prepare = pxa_pm_prepare,
- .enter = pxa_pm_enter,
- .finish = pxa_pm_finish,
-- .valid = pm_valid_only_mem,
-+ .valid = pm_valid_only_mem,
- };
-+//EXPORT_SYMBOL(pxa_pm_ops);
-
- extern void pxa_cpu_resume(void);
-
-Index: linux-2.6.22/drivers/input/keyboard/pxa27x_keyboard.c
-===================================================================
---- linux-2.6.22.orig/drivers/input/keyboard/pxa27x_keyboard.c 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/input/keyboard/pxa27x_keyboard.c 2007-08-23 13:09:22.000000000 +0200
-@@ -140,7 +140,7 @@
- KPREC = pdata->reg_kprec;
-
- /* Enable unit clock */
-- pxa_set_cken(CKEN19_KEYPAD, 1);
-+ pxa_set_cken(CKEN_KEYPAD, 1);
- }
-
- mutex_unlock(&input_dev->mutex);
-Index: linux-2.6.22/drivers/leds/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/leds/Kconfig 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/leds/Kconfig 2007-08-23 13:09:22.000000000 +0200
-@@ -95,6 +95,13 @@
- help
- This option enables support for the front LED on Cobalt Server
-
-+config LEDS_ASIC3
-+ tristate "LED Support for the HTC ASIC3 chip"
-+ depends LEDS_CLASS && HTC_ASIC3
-+ help
-+ This option enables support for the LEDs connected to the
-+ HTC ASIC3 chip.
-+
- comment "LED Triggers"
-
- config LEDS_TRIGGERS
-Index: linux-2.6.22/drivers/leds/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/leds/Makefile 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/leds/Makefile 2007-08-23 13:09:22.000000000 +0200
-@@ -16,6 +16,7 @@
- obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o
- obj-$(CONFIG_LEDS_H1940) += leds-h1940.o
- obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o
-+obj-$(CONFIG_LEDS_ASIC3) += leds-asic3.o
-
- # LED Triggers
- obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
-Index: linux-2.6.22/drivers/leds/leds-asic3.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/leds/leds-asic3.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,189 @@
-+/*
-+ * LEDs support for HTC ASIC3 devices.
-+ *
-+ * Copyright (c) 2006 Anton Vorontsov <cbou@mail.ru>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+#include "leds.h"
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <linux/soc/asic3_base.h>
-+#include <asm/mach-types.h>
-+#include <asm/hardware/asic3_leds.h>
-+
-+#ifdef DEBUG
-+#define dbg(msg, ...) printk(msg, __VA_ARGS__)
-+#else
-+#define dbg(msg, ...)
-+#endif
-+
-+static
-+void asic3_leds_set(struct led_classdev *led_cdev, enum led_brightness b)
-+{
-+ struct asic3_led *led = container_of(led_cdev, struct asic3_led,
-+ led_cdev);
-+ struct asic3_leds_machinfo *machinfo = led->machinfo;
-+ struct device *asic3_dev = &machinfo->asic3_pdev->dev;
-+
-+ dbg("%s:%s %d(%d)-%s %d\n", __FILE__, __FUNCTION__, led->hw_num,
-+ led->gpio_num, led->led_cdev.name, b);
-+
-+ if (led->hw_num == -1) {
-+ asic3_gpio_set_value(asic3_dev, led->gpio_num, b);
-+ return;
-+ }
-+
-+ if (b == LED_OFF) {
-+ asic3_set_led(asic3_dev, led->hw_num, 0, 16, 6);
-+ asic3_set_gpio_out_c(asic3_dev, led->hw_num, 0);
-+ }
-+ else {
-+ asic3_set_gpio_out_c(asic3_dev, led->hw_num, led->hw_num);
-+ #ifdef CONFIG_LEDS_TRIGGER_HWTIMER
-+ if (led_cdev->trigger && led_cdev->trigger->is_led_supported &&
-+ (led_cdev->trigger->is_led_supported(led_cdev) &
-+ LED_SUPPORTS_HWTIMER)) {
-+ struct hwtimer_data *td = led_cdev->trigger_data;
-+ if (!td) return;
-+ asic3_set_led(asic3_dev, led->hw_num, td->delay_on/8,
-+ (td->delay_on + td->delay_off)/8, 6);
-+ }
-+ else
-+ #endif
-+ asic3_set_led(asic3_dev, led->hw_num, 16, 16, 6);
-+ }
-+
-+ return;
-+}
-+
-+static
-+int asic3_leds_probe(struct platform_device *pdev)
-+{
-+ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
-+ struct asic3_led *leds = machinfo->leds;
-+ int ret, i = 0;
-+
-+ dbg("%s:%s\n", __FILE__, __FUNCTION__);
-+
-+ // Turn on clocks early, for the case if trigger would enable
-+ // led immediately after led_classdev_register().
-+ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev,
-+ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2,
-+ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2);
-+
-+ for (i = 0; i < machinfo->num_leds; i++) {
-+ leds[i].machinfo = machinfo;
-+ leds[i].led_cdev.brightness_set = asic3_leds_set;
-+ ret = led_classdev_register(&pdev->dev, &leds[i].led_cdev);
-+ if (ret) {
-+ printk(KERN_ERR "Error: can't register %s led\n",
-+ leds[i].led_cdev.name);
-+ goto out_err;
-+ }
-+ }
-+
-+ return 0;
-+
-+out_err:
-+ while (--i >= 0) led_classdev_unregister(&leds[i].led_cdev);
-+
-+ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev,
-+ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2,
-+ 0 | 0 | 0);
-+
-+ return ret;
-+}
-+
-+static
-+int asic3_leds_remove(struct platform_device *pdev)
-+{
-+ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
-+ struct asic3_led *leds = machinfo->leds;
-+ int i = 0;
-+
-+ dbg("%s:%s\n", __FILE__, __FUNCTION__);
-+
-+ for (i = 0; i < machinfo->num_leds; i++)
-+ led_classdev_unregister(&leds[i].led_cdev);
-+
-+ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev,
-+ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2,
-+ 0 | 0 | 0);
-+
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+
-+static
-+int asic3_leds_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
-+ struct asic3_led *leds = machinfo->leds;
-+ int i = 0;
-+
-+ dbg("%s:%s\n", __FILE__, __FUNCTION__);
-+
-+ for (i = 0; i < machinfo->num_leds; i++)
-+ led_classdev_suspend(&leds[i].led_cdev);
-+
-+ return 0;
-+}
-+
-+static
-+int asic3_leds_resume(struct platform_device *pdev)
-+{
-+ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
-+ struct asic3_led *leds = machinfo->leds;
-+ int i = 0;
-+
-+ dbg("%s:%s\n", __FILE__, __FUNCTION__);
-+
-+ for (i = 0; i < machinfo->num_leds; i++)
-+ led_classdev_resume(&leds[i].led_cdev);
-+
-+ return 0;
-+}
-+
-+#endif
-+
-+static
-+struct platform_driver asic3_leds_driver = {
-+ .probe = asic3_leds_probe,
-+ .remove = asic3_leds_remove,
-+#ifdef CONFIG_PM
-+ .suspend = asic3_leds_suspend,
-+ .resume = asic3_leds_resume,
-+#endif
-+ .driver = {
-+ .name = "asic3-leds",
-+ },
-+};
-+
-+int asic3_leds_register(void)
-+{
-+ dbg("%s:%s\n", __FILE__, __FUNCTION__);
-+ return platform_driver_register(&asic3_leds_driver);
-+}
-+
-+void asic3_leds_unregister(void)
-+{
-+ platform_driver_unregister(&asic3_leds_driver);
-+ return;
-+}
-+
-+EXPORT_SYMBOL_GPL(asic3_leds_register);
-+EXPORT_SYMBOL_GPL(asic3_leds_unregister);
-+
-+MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>");
-+MODULE_DESCRIPTION("HTC ASIC3 LEDs driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/drivers/mfd/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/mfd/Kconfig 2007-08-23 13:09:19.000000000 +0200
-+++ linux-2.6.22/drivers/mfd/Kconfig 2007-08-23 13:09:22.000000000 +0200
-@@ -15,6 +15,16 @@
- interface. The device may be connected by PCI or local bus with
- varying functions enabled.
-
-+config HTC_ASIC3
-+ tristate "HTC ASIC3 (iPAQ h1900/h3900/h4000/hx4700/rx3000) support"
-+
-+config HTC_ASIC3_DS1WM
-+ bool "Support HTC ASIC3 builtin DS1WM block"
-+ help
-+ Choose Y here if you want to include support for ASIC3's builtin
-+ W1 controller. Some devices do not use it, and yet other have
-+ separate DS1WM controller. For them, choose N.
-+
- endmenu
-
- menu "Multimedia Capabilities Port drivers"
-Index: linux-2.6.22/drivers/mfd/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/mfd/Makefile 2007-08-23 13:09:19.000000000 +0200
-+++ linux-2.6.22/drivers/mfd/Makefile 2007-08-23 13:09:22.000000000 +0200
-@@ -2,6 +2,8 @@
- # Makefile for multifunction miscellaneous devices
- #
-
-+obj-$(CONFIG_HTC_ASIC3) += asic3_base.o soc-core.o
-+
- obj-$(CONFIG_MFD_SM501) += sm501.o
-
- obj-$(CONFIG_MCP) += mcp-core.o
-Index: linux-2.6.22/drivers/mfd/asic3_base.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/mfd/asic3_base.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,1208 @@
-+/*
-+ * Driver interface to HTC "ASIC3"
-+ *
-+ * Copyright 2001 Compaq Computer Corporation.
-+ * Copyright 2004-2005 Phil Blundell
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
-+ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
-+ * FITNESS FOR ANY PARTICULAR PURPOSE.
-+ *
-+ * Author: Andrew Christian
-+ * <Andrew.Christian@compaq.com>
-+ * October 2001
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+#include <linux/init.h>
-+#include <linux/irq.h>
-+#include <linux/clk.h>
-+#include <linux/ds1wm.h>
-+#include <asm/arch/clock.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/irq.h>
-+#include <asm/io.h>
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <linux/soc/asic3_base.h>
-+#include <linux/soc/tmio_mmc.h>
-+#include "soc-core.h"
-+
-+
-+struct asic3_data {
-+ void *mapping;
-+ unsigned int bus_shift;
-+ int irq_base;
-+ int irq_nr;
-+
-+ u16 irq_bothedge[4];
-+ struct device *dev;
-+
-+ struct platform_device *mmc_dev;
-+};
-+
-+static DEFINE_SPINLOCK(asic3_gpio_lock);
-+
-+static int asic3_remove(struct platform_device *dev);
-+
-+static inline unsigned long asic3_address(struct device *dev,
-+ unsigned int reg)
-+{
-+ struct asic3_data *adata;
-+
-+ adata = (struct asic3_data *)dev->driver_data;
-+
-+ return (unsigned long)adata->mapping + (reg >> (2 - adata->bus_shift));
-+}
-+
-+void asic3_write_register(struct device *dev, unsigned int reg, u32 value)
-+{
-+ __raw_writew(value, asic3_address(dev, reg));
-+}
-+EXPORT_SYMBOL(asic3_write_register);
-+
-+u32 asic3_read_register(struct device *dev, unsigned int reg)
-+{
-+ return __raw_readw(asic3_address(dev, reg));
-+}
-+EXPORT_SYMBOL(asic3_read_register);
-+
-+static inline void __asic3_write_register(struct asic3_data *asic,
-+ unsigned int reg, u32 value)
-+{
-+ __raw_writew(value, (unsigned long)asic->mapping
-+ + (reg >> (2 - asic->bus_shift)));
-+}
-+
-+static inline u32 __asic3_read_register(struct asic3_data *asic,
-+ unsigned int reg)
-+{
-+ return __raw_readw((unsigned long)asic->mapping
-+ + (reg >> (2 - asic->bus_shift)));
-+}
-+
-+#define ASIC3_GPIO_FN(get_fn_name, set_fn_name, REG) \
-+u32 get_fn_name(struct device *dev) \
-+{ \
-+ return asic3_read_register(dev, REG); \
-+} \
-+EXPORT_SYMBOL(get_fn_name); \
-+ \
-+void set_fn_name(struct device *dev, u32 bits, u32 val) \
-+{ \
-+ unsigned long flags; \
-+ \
-+ spin_lock_irqsave(&asic3_gpio_lock, flags); \
-+ val |= (asic3_read_register(dev, REG) & ~bits); \
-+ asic3_write_register(dev, REG, val); \
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags); \
-+} \
-+EXPORT_SYMBOL(set_fn_name);
-+
-+#define ASIC3_GPIO_REGISTER(ACTION, action, fn, FN) \
-+ ASIC3_GPIO_FN(asic3_get_gpio_ ## action ## _ ## fn , \
-+ asic3_set_gpio_ ## action ## _ ## fn , \
-+ _IPAQ_ASIC3_GPIO_ ## FN ## _Base \
-+ + _IPAQ_ASIC3_GPIO_ ## ACTION )
-+
-+#define ASIC3_GPIO_FUNCTIONS(fn, FN) \
-+ ASIC3_GPIO_REGISTER(Direction, dir, fn, FN) \
-+ ASIC3_GPIO_REGISTER(Out, out, fn, FN) \
-+ ASIC3_GPIO_REGISTER(SleepMask, sleepmask, fn, FN) \
-+ ASIC3_GPIO_REGISTER(SleepOut, sleepout, fn, FN) \
-+ ASIC3_GPIO_REGISTER(BattFaultOut, battfaultout, fn, FN) \
-+ ASIC3_GPIO_REGISTER(AltFunction, alt_fn, fn, FN) \
-+ ASIC3_GPIO_REGISTER(SleepConf, sleepconf, fn, FN) \
-+ ASIC3_GPIO_REGISTER(Status, status, fn, FN)
-+
-+#if 0
-+ ASIC3_GPIO_REGISTER(Mask, mask, fn, FN)
-+ ASIC3_GPIO_REGISTER(TriggerType, trigtype, fn, FN)
-+ ASIC3_GPIO_REGISTER(EdgeTrigger, rising, fn, FN)
-+ ASIC3_GPIO_REGISTER(LevelTrigger, triglevel, fn, FN)
-+ ASIC3_GPIO_REGISTER(IntStatus, intstatus, fn, FN)
-+#endif
-+
-+ASIC3_GPIO_FUNCTIONS(a, A)
-+ASIC3_GPIO_FUNCTIONS(b, B)
-+ASIC3_GPIO_FUNCTIONS(c, C)
-+ASIC3_GPIO_FUNCTIONS(d, D)
-+
-+int asic3_gpio_get_value(struct device *dev, unsigned gpio)
-+{
-+ u32 mask = ASIC3_GPIO_bit(gpio);
-+ printk("%s(%d)\n", __FUNCTION__, gpio);
-+ switch (gpio >> 4) {
-+ case _IPAQ_ASIC3_GPIO_BANK_A:
-+ return asic3_get_gpio_status_a(dev) & mask;
-+ case _IPAQ_ASIC3_GPIO_BANK_B:
-+ return asic3_get_gpio_status_b(dev) & mask;
-+ case _IPAQ_ASIC3_GPIO_BANK_C:
-+ return asic3_get_gpio_status_c(dev) & mask;
-+ case _IPAQ_ASIC3_GPIO_BANK_D:
-+ return asic3_get_gpio_status_d(dev) & mask;
-+ }
-+
-+ printk(KERN_ERR "%s: invalid GPIO value 0x%x", __FUNCTION__, gpio);
-+ return 0;
-+}
-+EXPORT_SYMBOL(asic3_gpio_get_value);
-+
-+void asic3_gpio_set_value(struct device *dev, unsigned gpio, int val)
-+{
-+ u32 mask = ASIC3_GPIO_bit(gpio);
-+ u32 bitval = 0;
-+ if (val) bitval = mask;
-+ printk("%s(%d, %d)\n", __FUNCTION__, gpio, val);
-+
-+ switch (gpio >> 4) {
-+ case _IPAQ_ASIC3_GPIO_BANK_A:
-+ asic3_set_gpio_out_a(dev, mask, bitval);
-+ return;
-+ case _IPAQ_ASIC3_GPIO_BANK_B:
-+ asic3_set_gpio_out_b(dev, mask, bitval);
-+ return;
-+ case _IPAQ_ASIC3_GPIO_BANK_C:
-+ asic3_set_gpio_out_c(dev, mask, bitval);
-+ return;
-+ case _IPAQ_ASIC3_GPIO_BANK_D:
-+ asic3_set_gpio_out_d(dev, mask, bitval);
-+ return;
-+ }
-+
-+ printk(KERN_ERR "%s: invalid GPIO value 0x%x", __FUNCTION__, gpio);
-+}
-+EXPORT_SYMBOL(asic3_gpio_set_value);
-+
-+int asic3_irq_base(struct device *dev)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+
-+ return asic->irq_base;
-+}
-+EXPORT_SYMBOL(asic3_irq_base);
-+
-+static int asic3_gpio_to_irq(struct device *dev, unsigned gpio)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ printk("%s(%d)\n", __FUNCTION__, gpio);
-+
-+ return asic->irq_base + gpio;
-+}
-+
-+void asic3_set_led(struct device *dev, int led_num, int duty_time,
-+ int cycle_time, int timebase)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned int led_base;
-+
-+ /* it's a macro thing: see #define _IPAQ_ASIC_LED_0_Base for why you
-+ * can't substitute led_num in the macros below...
-+ */
-+
-+ switch (led_num) {
-+ case 0:
-+ led_base = _IPAQ_ASIC3_LED_0_Base;
-+ break;
-+ case 1:
-+ led_base = _IPAQ_ASIC3_LED_1_Base;
-+ break;
-+ case 2:
-+ led_base = _IPAQ_ASIC3_LED_2_Base;
-+ break;
-+ default:
-+ printk(KERN_ERR "%s: invalid led number %d", __FUNCTION__,
-+ led_num);
-+ return;
-+ }
-+
-+ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_TimeBase,
-+ timebase | LED_EN);
-+ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_PeriodTime,
-+ cycle_time);
-+ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_DutyTime,
-+ 0);
-+ udelay(20); /* asic voodoo - possibly need a whole duty cycle? */
-+ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_DutyTime,
-+ duty_time);
-+}
-+EXPORT_SYMBOL(asic3_set_led);
-+
-+void asic3_set_clock_sel(struct device *dev, u32 bits, u32 val)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned long flags;
-+ u32 v;
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL));
-+ v = (v & ~bits) | val;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), v);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+EXPORT_SYMBOL(asic3_set_clock_sel);
-+
-+void asic3_set_clock_cdex(struct device *dev, u32 bits, u32 val)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned long flags;
-+ u32 v;
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX));
-+ v = (v & ~bits) | val;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), v);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+EXPORT_SYMBOL(asic3_set_clock_cdex);
-+
-+static void asic3_clock_cdex_enable(struct clk *clk)
-+{
-+ struct asic3_data *asic = (struct asic3_data *)clk->parent->ctrlbit;
-+ unsigned long flags, val;
-+
-+ local_irq_save(flags);
-+
-+ val = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX));
-+ val |= clk->ctrlbit;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), val);
-+
-+ local_irq_restore(flags);
-+}
-+
-+static void asic3_clock_cdex_disable(struct clk *clk)
-+{
-+ struct asic3_data *asic = (struct asic3_data *)clk->parent->ctrlbit;
-+ unsigned long flags, val;
-+
-+ local_irq_save(flags);
-+
-+ val = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX));
-+ val &= ~clk->ctrlbit;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), val);
-+
-+ local_irq_restore(flags);
-+}
-+
-+/* base clocks */
-+
-+static struct clk clk_g = {
-+ .name = "gclk",
-+ .rate = 0,
-+ .parent = NULL,
-+};
-+
-+/* clock definitions */
-+
-+static struct clk asic3_clocks[] = {
-+ {
-+ .name = "spi",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_SPI,
-+ },
-+#ifdef CONFIG_HTC_ASIC3_DS1WM
-+ {
-+ .name = "ds1wm",
-+ .id = -1,
-+ .rate = 5000000,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_OWM,
-+ },
-+#endif
-+ {
-+ .name = "pwm0",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_PWM0,
-+ },
-+ {
-+ .name = "pwm1",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_PWM1,
-+ },
-+ {
-+ .name = "led0",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_LED0,
-+ },
-+ {
-+ .name = "led1",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_LED1,
-+ },
-+ {
-+ .name = "led2",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_LED2,
-+ },
-+ {
-+ .name = "smbus",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_SMBUS,
-+ },
-+ {
-+ .name = "ex0",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_EX0,
-+ },
-+ {
-+ .name = "ex1",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_EX1,
-+ },
-+};
-+
-+void asic3_set_extcf_select(struct device *dev, u32 bits, u32 val)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned long flags;
-+ u32 v;
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Select));
-+ v = (v & ~bits) | val;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Select), v);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+EXPORT_SYMBOL(asic3_set_extcf_select);
-+
-+void asic3_set_extcf_reset(struct device *dev, u32 bits, u32 val)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned long flags;
-+ u32 v;
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Reset));
-+ v = (v & ~bits) | val;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Reset), v);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+EXPORT_SYMBOL(asic3_set_extcf_reset);
-+
-+void asic3_set_sdhwctrl(struct device *dev, u32 bits, u32 val)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned long flags;
-+ u32 v;
-+
-+ spin_lock_irqsave (&asic3_gpio_lock, flags);
-+ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(SDHWCTRL, SDConf));
-+ v = (v & ~bits) | val;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(SDHWCTRL, SDConf), v);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+EXPORT_SYMBOL(asic3_set_sdhwctrl);
-+
-+
-+#define MAX_ASIC_ISR_LOOPS 20
-+#define _IPAQ_ASIC3_GPIO_Base_INCR \
-+ (_IPAQ_ASIC3_GPIO_B_Base - _IPAQ_ASIC3_GPIO_A_Base)
-+
-+static inline void asic3_irq_flip_edge(struct asic3_data *asic,
-+ u32 base, int bit)
-+{
-+ u16 edge = __asic3_read_register(asic,
-+ base + _IPAQ_ASIC3_GPIO_EdgeTrigger);
-+ edge ^= bit;
-+ __asic3_write_register(asic,
-+ base + _IPAQ_ASIC3_GPIO_EdgeTrigger, edge);
-+}
-+
-+static void asic3_irq_demux(unsigned int irq, struct irq_desc *desc)
-+{
-+ int iter;
-+ struct asic3_data *asic;
-+
-+ /* Acknowledge the parrent (i.e. CPU's) IRQ */
-+ desc->chip->ack(irq);
-+
-+ asic = desc->handler_data;
-+
-+ /* printk( KERN_NOTICE "asic3_irq_demux: irq=%d\n", irq ); */
-+ for (iter = 0 ; iter < MAX_ASIC_ISR_LOOPS; iter++) {
-+ u32 status;
-+ int bank;
-+
-+ status = __asic3_read_register(asic,
-+ IPAQ_ASIC3_OFFSET(INTR, PIntStat));
-+ /* Check all ten register bits */
-+ if ((status & 0x3ff) == 0)
-+ break;
-+
-+ /* Handle GPIO IRQs */
-+ for (bank = 0; bank < 4; bank++) {
-+ if (status & (1 << bank)) {
-+ unsigned long base, i, istat;
-+
-+ base = _IPAQ_ASIC3_GPIO_A_Base
-+ + bank * _IPAQ_ASIC3_GPIO_Base_INCR;
-+ istat = __asic3_read_register(asic,
-+ base + _IPAQ_ASIC3_GPIO_IntStatus);
-+ /* IntStatus is write 0 to clear */
-+ /* XXX could miss interrupts! */
-+ __asic3_write_register(asic,
-+ base + _IPAQ_ASIC3_GPIO_IntStatus, 0);
-+
-+ for (i = 0; i < 16; i++) {
-+ int bit = (1 << i);
-+ unsigned int irqnr;
-+ if (!(istat & bit))
-+ continue;
-+
-+ irqnr = asic->irq_base
-+ + (16 * bank) + i;
-+ desc = irq_desc + irqnr;
-+ desc->handle_irq(irqnr, desc);
-+ if (asic->irq_bothedge[bank] & bit) {
-+ asic3_irq_flip_edge(asic, base,
-+ bit);
-+ }
-+ }
-+ }
-+ }
-+
-+ /* Handle remaining IRQs in the status register */
-+ {
-+ int i;
-+
-+ for (i = ASIC3_LED0_IRQ; i <= ASIC3_OWM_IRQ; i++) {
-+ /* They start at bit 4 and go up */
-+ if (status & (1 << (i - ASIC3_LED0_IRQ + 4))) {
-+ desc = irq_desc + asic->irq_base + i;
-+ desc->handle_irq(asic->irq_base + i,
-+ desc);
-+ }
-+ }
-+ }
-+
-+ }
-+
-+ if (iter >= MAX_ASIC_ISR_LOOPS)
-+ printk(KERN_ERR "%s: interrupt processing overrun\n",
-+ __FUNCTION__);
-+}
-+
-+static inline int asic3_irq_to_bank(struct asic3_data *asic, int irq)
-+{
-+ int n;
-+
-+ n = (irq - asic->irq_base) >> 4;
-+
-+ return (n * (_IPAQ_ASIC3_GPIO_B_Base - _IPAQ_ASIC3_GPIO_A_Base));
-+}
-+
-+static inline int asic3_irq_to_index(struct asic3_data *asic, int irq)
-+{
-+ return (irq - asic->irq_base) & 15;
-+}
-+
-+static void asic3_mask_gpio_irq(unsigned int irq)
-+{
-+ struct asic3_data *asic = get_irq_chip_data(irq);
-+ u32 val, bank, index;
-+ unsigned long flags;
-+
-+ bank = asic3_irq_to_bank(asic, irq);
-+ index = asic3_irq_to_index(asic, irq);
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ val = __asic3_read_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask);
-+ val |= 1 << index;
-+ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask, val);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+
-+static void asic3_mask_irq(unsigned int irq)
-+{
-+ struct asic3_data *asic = get_irq_chip_data(irq);
-+ int regval;
-+
-+ if (irq < ASIC3_NR_GPIO_IRQS) {
-+ printk(KERN_ERR "asic3_base: gpio mask attempt, irq %d\n",
-+ irq);
-+ return;
-+ }
-+
-+ regval = __asic3_read_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask);
-+
-+ switch (irq - asic->irq_base) {
-+ case ASIC3_LED0_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK0);
-+ break;
-+ case ASIC3_LED1_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK1);
-+ break;
-+ case ASIC3_LED2_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK2);
-+ break;
-+ case ASIC3_SPI_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK3);
-+ break;
-+ case ASIC3_SMBUS_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK4);
-+ break;
-+ case ASIC3_OWM_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK5);
-+ break;
-+ default:
-+ printk(KERN_ERR "asic3_base: bad non-gpio irq %d\n", irq);
-+ break;
-+ }
-+}
-+
-+static void asic3_unmask_gpio_irq(unsigned int irq)
-+{
-+ struct asic3_data *asic = get_irq_chip_data(irq);
-+ u32 val, bank, index;
-+ unsigned long flags;
-+
-+ bank = asic3_irq_to_bank(asic, irq);
-+ index = asic3_irq_to_index(asic, irq);
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ val = __asic3_read_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask);
-+ val &= ~(1 << index);
-+ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask, val);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+
-+static void asic3_unmask_irq(unsigned int irq)
-+{
-+ struct asic3_data *asic = get_irq_chip_data(irq);
-+ int regval;
-+
-+ if (irq < ASIC3_NR_GPIO_IRQS) {
-+ printk(KERN_ERR "asic3_base: gpio unmask attempt, irq %d\n",
-+ irq);
-+ return;
-+ }
-+
-+ regval = __asic3_read_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask);
-+
-+ switch (irq - asic->irq_base) {
-+ case ASIC3_LED0_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK0);
-+ break;
-+ case ASIC3_LED1_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK1);
-+ break;
-+ case ASIC3_LED2_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK2);
-+ break;
-+ case ASIC3_SPI_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK3);
-+ break;
-+ case ASIC3_SMBUS_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK4);
-+ break;
-+ case ASIC3_OWM_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK5);
-+ break;
-+ default:
-+ printk(KERN_ERR "asic3_base: bad non-gpio irq %d\n", irq);
-+ break;
-+ }
-+}
-+
-+static int asic3_gpio_irq_type(unsigned int irq, unsigned int type)
-+{
-+ struct asic3_data *asic = get_irq_chip_data(irq);
-+ u32 bank, index;
-+ unsigned long flags;
-+ u16 trigger, level, edge, bit;
-+
-+ bank = asic3_irq_to_bank(asic, irq);
-+ index = asic3_irq_to_index(asic, irq);
-+ bit = 1<<index;
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ level = __asic3_read_register(asic,
-+ bank + _IPAQ_ASIC3_GPIO_LevelTrigger);
-+ edge = __asic3_read_register(asic,
-+ bank + _IPAQ_ASIC3_GPIO_EdgeTrigger);
-+ trigger = __asic3_read_register(asic,
-+ bank + _IPAQ_ASIC3_GPIO_TriggerType);
-+ asic->irq_bothedge[(irq - asic->irq_base) >> 4] &= ~bit;
-+
-+ if (type == IRQT_RISING) {
-+ trigger |= bit;
-+ edge |= bit;
-+ } else if (type == IRQT_FALLING) {
-+ trigger |= bit;
-+ edge &= ~bit;
-+ } else if (type == IRQT_BOTHEDGE) {
-+ trigger |= bit;
-+ if (asic3_gpio_get_value(asic->dev, irq - asic->irq_base))
-+ edge &= ~bit;
-+ else
-+ edge |= bit;
-+ asic->irq_bothedge[(irq - asic->irq_base) >> 4] |= bit;
-+ } else if (type == IRQT_LOW) {
-+ trigger &= ~bit;
-+ level &= ~bit;
-+ } else if (type == IRQT_HIGH) {
-+ trigger &= ~bit;
-+ level |= bit;
-+ } else {
-+ /*
-+ * if type == IRQT_NOEDGE, we should mask interrupts, but
-+ * be careful to not unmask them if mask was also called.
-+ * Probably need internal state for mask.
-+ */
-+ printk(KERN_NOTICE "asic3: irq type not changed.\n");
-+ }
-+ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_LevelTrigger,
-+ level);
-+ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_EdgeTrigger,
-+ edge);
-+ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_TriggerType,
-+ trigger);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+ return 0;
-+}
-+
-+static struct irq_chip asic3_gpio_irq_chip = {
-+ .name = "ASIC3-GPIO",
-+ .ack = asic3_mask_gpio_irq,
-+ .mask = asic3_mask_gpio_irq,
-+ .unmask = asic3_unmask_gpio_irq,
-+ .set_type = asic3_gpio_irq_type,
-+};
-+
-+static struct irq_chip asic3_irq_chip = {
-+ .name = "ASIC3",
-+ .ack = asic3_mask_irq,
-+ .mask = asic3_mask_irq,
-+ .unmask = asic3_unmask_irq,
-+};
-+
-+static void asic3_release(struct device *dev)
-+{
-+ struct platform_device *sdev = to_platform_device(dev);
-+
-+ kfree(sdev->resource);
-+ kfree(sdev);
-+}
-+
-+int asic3_register_mmc(struct device *dev)
-+{
-+ struct platform_device *sdev = kzalloc(sizeof(*sdev), GFP_KERNEL);
-+ struct tmio_mmc_hwconfig *mmc_config = kmalloc(sizeof(*mmc_config),
-+ GFP_KERNEL);
-+ struct platform_device *pdev = to_platform_device(dev);
-+ struct asic3_data *asic = dev->driver_data;
-+ struct asic3_platform_data *asic3_pdata = dev->platform_data;
-+ struct resource *res;
-+ int rc;
-+
-+ if (sdev == NULL || mmc_config == NULL)
-+ return -ENOMEM;
-+
-+ if (asic3_pdata->tmio_mmc_hwconfig) {
-+ memcpy(mmc_config, asic3_pdata->tmio_mmc_hwconfig,
-+ sizeof(*mmc_config));
-+ } else {
-+ memset(mmc_config, 0, sizeof(*mmc_config));
-+ }
-+ mmc_config->address_shift = asic->bus_shift;
-+
-+ sdev->id = -1;
-+ sdev->name = "asic3_mmc";
-+ sdev->dev.parent = dev;
-+ sdev->num_resources = 2;
-+ sdev->dev.platform_data = mmc_config;
-+ sdev->dev.release = asic3_release;
-+
-+ res = kzalloc(sdev->num_resources * sizeof(struct resource),
-+ GFP_KERNEL);
-+ if (res == NULL) {
-+ kfree(sdev);
-+ kfree(mmc_config);
-+ return -ENOMEM;
-+ }
-+ sdev->resource = res;
-+
-+ res[0].start = pdev->resource[2].start;
-+ res[0].end = pdev->resource[2].end;
-+ res[0].flags = IORESOURCE_MEM;
-+ res[1].start = res[1].end = pdev->resource[3].start;
-+ res[1].flags = IORESOURCE_IRQ;
-+
-+ rc = platform_device_register(sdev);
-+ if (rc) {
-+ printk(KERN_ERR "asic3_base: "
-+ "Could not register asic3_mmc device\n");
-+ kfree(res);
-+ kfree(sdev);
-+ return rc;
-+ }
-+
-+ asic->mmc_dev = sdev;
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(asic3_register_mmc);
-+
-+int asic3_unregister_mmc(struct device *dev)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ platform_device_unregister(asic->mmc_dev);
-+ asic->mmc_dev = 0;
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(asic3_unregister_mmc);
-+
-+#ifdef CONFIG_HTC_ASIC3_DS1WM
-+/*
-+ * DS1WM subdevice
-+ */
-+
-+static void asic3_ds1wm_enable(struct platform_device *ds1wm_dev)
-+{
-+ struct device *dev = ds1wm_dev->dev.parent;
-+
-+ /* Turn on external clocks and the OWM clock */
-+ asic3_set_clock_cdex(dev,
-+ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM,
-+ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM);
-+
-+ mdelay(1);
-+
-+ asic3_set_extcf_reset(dev, ASIC3_EXTCF_OWM_RESET,
-+ ASIC3_EXTCF_OWM_RESET);
-+ mdelay(1);
-+ asic3_set_extcf_reset(dev, ASIC3_EXTCF_OWM_RESET, 0);
-+ mdelay(1);
-+
-+ /* Clear OWM_SMB, set OWM_EN */
-+ asic3_set_extcf_select(dev,
-+ ASIC3_EXTCF_OWM_SMB | ASIC3_EXTCF_OWM_EN,
-+ 0 | ASIC3_EXTCF_OWM_EN);
-+
-+ mdelay(1);
-+}
-+
-+static void asic3_ds1wm_disable(struct platform_device *ds1wm_dev)
-+{
-+ struct device *dev = ds1wm_dev->dev.parent;
-+
-+ asic3_set_extcf_select(dev,
-+ ASIC3_EXTCF_OWM_SMB | ASIC3_EXTCF_OWM_EN,
-+ 0 | 0);
-+
-+ asic3_set_clock_cdex(dev,
-+ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM,
-+ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | 0);
-+}
-+
-+
-+static struct resource asic3_ds1wm_resources[] = {
-+ {
-+ .start = _IPAQ_ASIC3_OWM_Base,
-+ .end = _IPAQ_ASIC3_OWM_Base + 0x14 - 1,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ {
-+ .start = ASIC3_OWM_IRQ,
-+ .end = ASIC3_OWM_IRQ,
-+ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE |
-+ IORESOURCE_IRQ_SOC_SUBDEVICE,
-+ },
-+};
-+
-+static struct ds1wm_platform_data ds1wm_pd = {
-+ .enable = asic3_ds1wm_enable,
-+ .disable = asic3_ds1wm_disable,
-+};
-+#endif
-+
-+static struct soc_device_data asic3_blocks[] = {
-+#ifdef CONFIG_HTC_ASIC3_DS1WM
-+ {
-+ .name = "ds1wm",
-+ .res = asic3_ds1wm_resources,
-+ .num_resources = ARRAY_SIZE(asic3_ds1wm_resources),
-+ .hwconfig = &ds1wm_pd,
-+ },
-+#endif
-+};
-+
-+static int asic3_probe(struct platform_device *pdev)
-+{
-+ struct asic3_platform_data *pdata = pdev->dev.platform_data;
-+ struct asic3_data *asic;
-+ struct device *dev = &pdev->dev;
-+ unsigned long clksel;
-+ int i, rc;
-+
-+ asic = kzalloc(sizeof(struct asic3_data), GFP_KERNEL);
-+ if (!asic)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(pdev, asic);
-+ asic->dev = &pdev->dev;
-+
-+ asic->mapping = ioremap(pdev->resource[0].start, IPAQ_ASIC3_MAP_SIZE);
-+ if (!asic->mapping) {
-+ printk(KERN_ERR "asic3: couldn't ioremap ASIC3\n");
-+ kfree (asic);
-+ return -ENOMEM;
-+ }
-+
-+ if (pdata && pdata->bus_shift)
-+ asic->bus_shift = pdata->bus_shift;
-+ else
-+ asic->bus_shift = 2;
-+
-+ /* XXX: should get correct SD clock values from pdata struct */
-+ clksel = 0;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), clksel);
-+
-+ /* Register ASIC3's clocks. */
-+ clk_g.ctrlbit = (int)asic;
-+
-+ if (clk_register(&clk_g) < 0)
-+ printk(KERN_ERR "asic3: failed to register ASIC3 gclk\n");
-+
-+ for (i = 0; i < ARRAY_SIZE(asic3_clocks); i++) {
-+ rc = clk_register(&asic3_clocks[i]);
-+ if (rc < 0)
-+ printk(KERN_ERR "asic3: "
-+ "failed to register clock %s (%d)\n",
-+ asic3_clocks[i].name, rc);
-+ }
-+
-+ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(A, Mask), 0xffff);
-+ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(B, Mask), 0xffff);
-+ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(C, Mask), 0xffff);
-+ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(D, Mask), 0xffff);
-+
-+ asic3_set_gpio_sleepmask_a(dev, 0xffff, 0xffff);
-+ asic3_set_gpio_sleepmask_b(dev, 0xffff, 0xffff);
-+ asic3_set_gpio_sleepmask_c(dev, 0xffff, 0xffff);
-+ asic3_set_gpio_sleepmask_d(dev, 0xffff, 0xffff);
-+
-+ if (pdata) {
-+ asic3_set_gpio_out_a(dev, 0xffff, pdata->gpio_a.init);
-+ asic3_set_gpio_out_b(dev, 0xffff, pdata->gpio_b.init);
-+ asic3_set_gpio_out_c(dev, 0xffff, pdata->gpio_c.init);
-+ asic3_set_gpio_out_d(dev, 0xffff, pdata->gpio_d.init);
-+
-+ asic3_set_gpio_dir_a(dev, 0xffff, pdata->gpio_a.dir);
-+ asic3_set_gpio_dir_b(dev, 0xffff, pdata->gpio_b.dir);
-+ asic3_set_gpio_dir_c(dev, 0xffff, pdata->gpio_c.dir);
-+ asic3_set_gpio_dir_d(dev, 0xffff, pdata->gpio_d.dir);
-+
-+ asic3_set_gpio_sleepmask_a(dev, 0xffff,
-+ pdata->gpio_a.sleep_mask);
-+ asic3_set_gpio_sleepmask_b(dev, 0xffff,
-+ pdata->gpio_b.sleep_mask);
-+ asic3_set_gpio_sleepmask_c(dev, 0xffff,
-+ pdata->gpio_c.sleep_mask);
-+ asic3_set_gpio_sleepmask_d(dev, 0xffff,
-+ pdata->gpio_d.sleep_mask);
-+
-+ asic3_set_gpio_sleepout_a(dev, 0xffff,
-+ pdata->gpio_a.sleep_out);
-+ asic3_set_gpio_sleepout_b(dev, 0xffff,
-+ pdata->gpio_b.sleep_out);
-+ asic3_set_gpio_sleepout_c(dev, 0xffff,
-+ pdata->gpio_c.sleep_out);
-+ asic3_set_gpio_sleepout_d(dev, 0xffff,
-+ pdata->gpio_d.sleep_out);
-+
-+ asic3_set_gpio_battfaultout_a(dev, 0xffff,
-+ pdata->gpio_a.batt_fault_out);
-+ asic3_set_gpio_battfaultout_b(dev, 0xffff,
-+ pdata->gpio_b.batt_fault_out);
-+ asic3_set_gpio_battfaultout_c(dev, 0xffff,
-+ pdata->gpio_c.batt_fault_out);
-+ asic3_set_gpio_battfaultout_d(dev, 0xffff,
-+ pdata->gpio_d.batt_fault_out);
-+
-+ asic3_set_gpio_sleepconf_a(dev, 0xffff,
-+ pdata->gpio_a.sleep_conf);
-+ asic3_set_gpio_sleepconf_b(dev, 0xffff,
-+ pdata->gpio_b.sleep_conf);
-+ asic3_set_gpio_sleepconf_c(dev, 0xffff,
-+ pdata->gpio_c.sleep_conf);
-+ asic3_set_gpio_sleepconf_d(dev, 0xffff,
-+ pdata->gpio_d.sleep_conf);
-+
-+ asic3_set_gpio_alt_fn_a(dev, 0xffff,
-+ pdata->gpio_a.alt_function);
-+ asic3_set_gpio_alt_fn_b(dev, 0xffff,
-+ pdata->gpio_b.alt_function);
-+ asic3_set_gpio_alt_fn_c(dev, 0xffff,
-+ pdata->gpio_c.alt_function);
-+ asic3_set_gpio_alt_fn_d(dev, 0xffff,
-+ pdata->gpio_d.alt_function);
-+ }
-+
-+ asic->irq_nr = -1;
-+ asic->irq_base = -1;
-+
-+ if (pdev->num_resources > 1)
-+ asic->irq_nr = pdev->resource[1].start;
-+
-+ if (asic->irq_nr != -1) {
-+ unsigned int i;
-+
-+ if (!pdata->irq_base) {
-+ printk(KERN_ERR "asic3: IRQ base not specified\n");
-+ asic3_remove(pdev);
-+ return -EINVAL;
-+ }
-+
-+ asic->irq_base = pdata->irq_base;
-+
-+ /* turn on clock to IRQ controller */
-+ clksel |= CLOCK_SEL_CX;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL),
-+ clksel);
-+
-+ printk(KERN_INFO "asic3: using irq %d-%d on irq %d\n",
-+ asic->irq_base, asic->irq_base + ASIC3_NR_IRQS - 1,
-+ asic->irq_nr);
-+
-+ for (i = 0 ; i < ASIC3_NR_IRQS ; i++) {
-+ int irq = i + asic->irq_base;
-+ if (i < ASIC3_NR_GPIO_IRQS) {
-+ set_irq_chip(irq, &asic3_gpio_irq_chip);
-+ set_irq_chip_data(irq, asic);
-+ set_irq_handler(irq, handle_level_irq);
-+ set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
-+ } else {
-+ /* The remaining IRQs are not GPIO */
-+ set_irq_chip(irq, &asic3_irq_chip);
-+ set_irq_chip_data(irq, asic);
-+ set_irq_handler(irq, handle_level_irq);
-+ set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
-+ }
-+ }
-+
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask),
-+ ASIC3_INTMASK_GINTMASK);
-+
-+ set_irq_chained_handler(asic->irq_nr, asic3_irq_demux);
-+ set_irq_type(asic->irq_nr, IRQT_RISING);
-+ set_irq_data(asic->irq_nr, asic);
-+ }
-+
-+#ifdef CONFIG_HTC_ASIC3_DS1WM
-+ ds1wm_pd.bus_shift = asic->bus_shift;
-+#endif
-+
-+ pdata->gpiodev_ops.get = asic3_gpio_get_value;
-+ pdata->gpiodev_ops.set = asic3_gpio_set_value;
-+ pdata->gpiodev_ops.to_irq = asic3_gpio_to_irq;
-+
-+ soc_add_devices(pdev, asic3_blocks, ARRAY_SIZE(asic3_blocks),
-+ &pdev->resource[0],
-+ asic->bus_shift - ASIC3_DEFAULT_ADDR_SHIFT,
-+ asic->irq_base);
-+
-+ if (pdev->num_resources > 2) {
-+ int rc;
-+ rc = asic3_register_mmc(dev);
-+ if (rc) {
-+ asic3_remove(pdev);
-+ return rc;
-+ }
-+ }
-+
-+ if (pdata && pdata->num_child_platform_devs != 0)
-+ platform_add_devices(pdata->child_platform_devs,
-+ pdata->num_child_platform_devs);
-+
-+ return 0;
-+}
-+
-+static int asic3_remove(struct platform_device *pdev)
-+{
-+ struct asic3_platform_data *pdata = pdev->dev.platform_data;
-+ struct asic3_data *asic = platform_get_drvdata(pdev);
-+ int i;
-+
-+ if (pdata && pdata->num_child_platform_devs != 0) {
-+ for (i = 0; i < pdata->num_child_platform_devs; i++) {
-+ platform_device_unregister(
-+ pdata->child_platform_devs[i]);
-+ }
-+ }
-+
-+ if (asic->irq_nr != -1) {
-+ unsigned int i;
-+
-+ for (i = 0 ; i < ASIC3_NR_IRQS ; i++) {
-+ int irq = i + asic->irq_base;
-+ set_irq_flags(irq, 0);
-+ set_irq_handler (irq, NULL);
-+ set_irq_chip (irq, NULL);
-+ set_irq_chip_data(irq, NULL);
-+ }
-+
-+ set_irq_chained_handler(asic->irq_nr, NULL);
-+ }
-+
-+ if (asic->mmc_dev)
-+ asic3_unregister_mmc(&pdev->dev);
-+
-+ for (i = 0; i < ARRAY_SIZE(asic3_clocks); i++)
-+ clk_unregister(&asic3_clocks[i]);
-+ clk_unregister(&clk_g);
-+
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), 0);
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask), 0);
-+
-+ iounmap(asic->mapping);
-+
-+ kfree(asic);
-+
-+ return 0;
-+}
-+
-+static void asic3_shutdown(struct platform_device *pdev)
-+{
-+}
-+
-+#define ASIC3_SUSPEND_CDEX_MASK \
-+ (CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2)
-+static unsigned short suspend_cdex;
-+
-+static int asic3_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct asic3_data *asic = platform_get_drvdata(pdev);
-+ suspend_cdex = __asic3_read_register(asic,
-+ _IPAQ_ASIC3_CLOCK_Base + _IPAQ_ASIC3_CLOCK_CDEX);
-+ /* The LEDs are still active during suspend */
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_CLOCK_Base + _IPAQ_ASIC3_CLOCK_CDEX,
-+ suspend_cdex & ASIC3_SUSPEND_CDEX_MASK);
-+ return 0;
-+}
-+
-+static int asic3_resume(struct platform_device *pdev)
-+{
-+ struct asic3_data *asic = platform_get_drvdata(pdev);
-+ unsigned short intmask;
-+
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX),
-+ suspend_cdex);
-+
-+ if (asic->irq_nr != -1) {
-+ /* Toggle the interrupt mask to try to get ASIC3 to show
-+ * the CPU an interrupt edge. For more details see the
-+ * kernel-discuss thread around 13 June 2005 with the
-+ * subject "asic3 suspend / resume". */
-+ intmask = __asic3_read_register(asic,
-+ IPAQ_ASIC3_OFFSET(INTR, IntMask));
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask),
-+ intmask & ~ASIC3_INTMASK_GINTMASK);
-+ mdelay(1);
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask),
-+ intmask | ASIC3_INTMASK_GINTMASK);
-+ }
-+
-+ return 0;
-+}
-+
-+static struct platform_driver asic3_device_driver = {
-+ .driver = {
-+ .name = "asic3",
-+ },
-+ .probe = asic3_probe,
-+ .remove = asic3_remove,
-+ .suspend = asic3_suspend,
-+ .resume = asic3_resume,
-+ .shutdown = asic3_shutdown,
-+};
-+
-+static int __init asic3_base_init(void)
-+{
-+ int retval = 0;
-+ retval = platform_driver_register(&asic3_device_driver);
-+ return retval;
-+}
-+
-+static void __exit asic3_base_exit(void)
-+{
-+ platform_driver_unregister(&asic3_device_driver);
-+}
-+
-+#ifdef MODULE
-+module_init(asic3_base_init);
-+#else /* start early for dependencies */
-+subsys_initcall(asic3_base_init);
-+#endif
-+module_exit(asic3_base_exit);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Phil Blundell <pb@handhelds.org>");
-+MODULE_DESCRIPTION("Core driver for HTC ASIC3");
-+MODULE_SUPPORTED_DEVICE("asic3");
-Index: linux-2.6.22/drivers/mfd/soc-core.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/mfd/soc-core.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,106 @@
-+/*
-+ * drivers/soc/soc-core.c
-+ *
-+ * core SoC support
-+ * Copyright (c) 2006 Ian Molton
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This file contains functionality used by many SoC type devices.
-+ *
-+ * Created: 2006-11-28
-+ *
-+ */
-+
-+#include <linux/ioport.h>
-+#include <linux/slab.h>
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include "soc-core.h"
-+
-+void soc_free_devices(struct platform_device *devices, int nr_devs)
-+{
-+ struct platform_device *dev = devices;
-+ int i;
-+
-+ for (i = 0; i < nr_devs; i++) {
-+ struct resource *res = dev->resource;
-+ platform_device_unregister(dev++);
-+ kfree(res);
-+ }
-+ kfree(devices);
-+}
-+EXPORT_SYMBOL_GPL(soc_free_devices);
-+
-+#define SIGNED_SHIFT(val, shift) ((shift) >= 0 ? ((val) << (shift)) : ((val) >> -(shift)))
-+
-+struct platform_device *soc_add_devices(struct platform_device *dev,
-+ struct soc_device_data *soc, int nr_devs,
-+ struct resource *mem,
-+ int relative_addr_shift, int irq_base)
-+{
-+ struct platform_device *devices;
-+ int i, r, base;
-+
-+ devices = kzalloc(nr_devs * sizeof(struct platform_device), GFP_KERNEL);
-+ if (!devices)
-+ return NULL;
-+
-+ for (i = 0; i < nr_devs; i++) {
-+ struct platform_device *sdev = &devices[i];
-+ struct soc_device_data *blk = &soc[i];
-+ struct resource *res;
-+
-+ sdev->id = -1;
-+ sdev->name = blk->name;
-+
-+ sdev->dev.parent = &dev->dev;
-+ sdev->dev.platform_data = (void *)blk->hwconfig;
-+ sdev->num_resources = blk->num_resources;
-+
-+ /* Allocate space for the subdevice resources */
-+ res = kzalloc (blk->num_resources * sizeof (struct resource), GFP_KERNEL);
-+ if (!res)
-+ goto fail;
-+
-+ for (r = 0 ; r < blk->num_resources ; r++) {
-+ res[r].name = blk->res[r].name; // Fixme - should copy
-+
-+ /* Find out base to use */
-+ base = 0;
-+ if (blk->res[r].flags & IORESOURCE_MEM) {
-+ base = mem->start;
-+ } else if ((blk->res[r].flags & IORESOURCE_IRQ) &&
-+ (blk->res[r].flags & IORESOURCE_IRQ_SOC_SUBDEVICE)) {
-+ base = irq_base;
-+ }
-+
-+ /* Adjust resource */
-+ if (blk->res[r].flags & IORESOURCE_MEM) {
-+ res[r].parent = mem;
-+ res[r].start = base + SIGNED_SHIFT(blk->res[r].start, relative_addr_shift);
-+ res[r].end = base + SIGNED_SHIFT(blk->res[r].end, relative_addr_shift);
-+ } else {
-+ res[r].start = base + blk->res[r].start;
-+ res[r].end = base + blk->res[r].end;
-+ }
-+ res[r].flags = blk->res[r].flags;
-+ }
-+
-+ sdev->resource = res;
-+ if (platform_device_register(sdev)) {
-+ kfree(res);
-+ goto fail;
-+ }
-+
-+ printk(KERN_INFO "SoC: registering %s\n", blk->name);
-+ }
-+ return devices;
-+
-+fail:
-+ soc_free_devices(devices, i + 1);
-+ return NULL;
-+}
-+EXPORT_SYMBOL_GPL(soc_add_devices);
-Index: linux-2.6.22/drivers/mfd/soc-core.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/mfd/soc-core.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,30 @@
-+/*
-+ * drivers/soc/soc-core.h
-+ *
-+ * core SoC support
-+ * Copyright (c) 2006 Ian Molton
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This file contains prototypes for the functions in soc-core.c
-+ *
-+ * Created: 2006-11-28
-+ *
-+ */
-+
-+struct soc_device_data {
-+ char *name;
-+ struct resource *res;
-+ int num_resources;
-+ void *hwconfig; /* platform_data to pass to the subdevice */
-+};
-+
-+struct platform_device *soc_add_devices(struct platform_device *dev,
-+ struct soc_device_data *soc, int n_devs,
-+ struct resource *mem,
-+ int relative_addr_shift, int irq_base);
-+
-+void soc_free_devices(struct platform_device *devices, int nr_devs);
-+
-Index: linux-2.6.22/include/asm-arm/arch-pxa/clock.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/clock.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,27 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/clock.h
-+ *
-+ * Copyright (C) 2006 Erik Hovland
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+struct clk {
-+ struct list_head node;
-+ struct module *owner;
-+ struct clk *parent;
-+ const char *name;
-+ int id;
-+ unsigned int enabled;
-+ unsigned long rate;
-+ unsigned long ctrlbit;
-+
-+ void (*enable)(struct clk *);
-+ void (*disable)(struct clk *);
-+};
-+
-+
-+extern int clk_register(struct clk *clk);
-+extern void clk_unregister(struct clk *clk);
-Index: linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-asic.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-asic.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,213 @@
-+/*
-+ * include/asm/arm/arch-pxa/htcuniversal-asic.h
-+ *
-+ * Authors: Giuseppe Zompatori <giuseppe_zompatori@yahoo.it>
-+ *
-+ * based on previews work, see below:
-+ *
-+ * include/asm/arm/arch-pxa/hx4700-asic.h
-+ * Copyright (c) 2004 SDG Systems, LLC
-+ *
-+ */
-+
-+#ifndef _HTCUNIVERSAL_ASIC_H_
-+#define _HTCUNIVERSAL_ASIC_H_
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+
-+/* ASIC3 */
-+
-+#define HTCUNIVERSAL_ASIC3_GPIO_PHYS PXA_CS4_PHYS
-+#define HTCUNIVERSAL_ASIC3_MMC_PHYS PXA_CS3_PHYS
-+
-+/* TODO: some information is missing here */
-+
-+/* ASIC3 GPIO A bank */
-+
-+#define GPIOA_I2C_EN 0 /* Output */
-+#define GPIOA_SPK_PWR1_ON 1 /* Output */
-+#define GPIOA_AUDIO_PWR_ON 2 /* Output */
-+#define GPIOA_EARPHONE_PWR_ON 3 /* Output */
-+
-+#define GPIOA_UNKNOWN4 4 /* Output */
-+#define GPIOA_BUTTON_BACKLIGHT_N 5 /* Input */
-+#define GPIOA_SPK_PWR2_ON 6 /* Output */
-+#define GPIOA_BUTTON_RECORD_N 7 /* Input */
-+
-+#define GPIOA_BUTTON_CAMERA_N 8 /* Input */
-+#define GPIOA_UNKNOWN9 9 /* Output */
-+#define GPIOA_FLASHLIGHT 10 /* Output */
-+#define GPIOA_COVER_ROTATE_N 11 /* Input */
-+
-+#define GPIOA_TOUCHSCREEN_N 12 /* Input */
-+#define GPIOA_VOL_UP_N 13 /* Input */
-+#define GPIOA_VOL_DOWN_N 14 /* Input */
-+#define GPIOA_LCD_PWR5_ON 15 /* Output */
-+
-+/* ASIC3 GPIO B bank */
-+
-+#define GPIOB_BB_READY 0 /* Input */
-+#define GPIOB_CODEC_PDN 1 /* Output */
-+#define GPIOB_UNKNOWN2 2 /* Input */
-+#define GPIOB_BB_UNKNOWN3 3 /* Input */
-+
-+#define GPIOB_BT_IRQ 4 /* Input */
-+#define GPIOB_CLAMSHELL_N 5 /* Input */
-+#define GPIOB_LCD_PWR3_ON 6 /* Output */
-+#define GPIOB_BB_ALERT 7 /* Input */
-+
-+#define GPIOB_BB_RESET2 8 /* Output */
-+#define GPIOB_EARPHONE_N 9 /* Input */
-+#define GPIOB_MICRECORD_N 10 /* Input */
-+#define GPIOB_NIGHT_SENSOR 11 /* Input */
-+
-+#define GPIOB_UMTS_DCD 12 /* Input */
-+#define GPIOB_UNKNOWN13 13 /* Input */
-+#define GPIOB_CHARGE_EN 14 /* Output */
-+#define GPIOB_USB_PUEN 15 /* Output */
-+
-+/* ASIC3 GPIO C bank */
-+
-+#define GPIOC_LED_BTWIFI 0 /* Output */
-+#define GPIOC_LED_RED 1 /* Output */
-+#define GPIOC_LED_GREEN 2 /* Output */
-+#define GPIOC_BOARDID3 3 /* Input */
-+
-+#define GPIOC_WIFI_IRQ_N 4 /* Input */
-+#define GPIOC_WIFI_RESET 5 /* Output */
-+#define GPIOC_WIFI_PWR1_ON 6 /* Output */
-+#define GPIOC_BT_RESET 7 /* Output */
-+
-+#define GPIOC_UNKNOWN8 8 /* Output */
-+#define GPIOC_LCD_PWR1_ON 9 /* Output */
-+#define GPIOC_LCD_PWR2_ON 10 /* Output */
-+#define GPIOC_BOARDID2 11 /* Input */
-+
-+#define GPIOC_BOARDID1 12 /* Input */
-+#define GPIOC_BOARDID0 13 /* Input */
-+#define GPIOC_BT_PWR_ON 14 /* Output */
-+#define GPIOC_CHARGE_ON 15 /* Output */
-+
-+/* ASIC3 GPIO D bank */
-+
-+#define GPIOD_KEY_OK_N 0 /* Input */
-+#define GPIOD_KEY_RIGHT_N 1 /* Input */
-+#define GPIOD_KEY_LEFT_N 2 /* Input */
-+#define GPIOD_KEY_DOWN_N 3 /* Input */
-+
-+#define GPIOD_KEY_UP_N 4 /* Input */
-+#define GPIOD_SDIO_DET 5 /* Input */
-+#define GPIOD_WIFI_PWR2_ON 6 /* Output */
-+#define GPIOD_HW_REBOOT 7 /* Output */
-+
-+#define GPIOD_BB_RESET1 8 /* Output */
-+#define GPIOD_UNKNOWN9 9 /* Output */
-+#define GPIOD_VIBRA_PWR_ON 10 /* Output */
-+#define GPIOD_WIFI_PWR3_ON 11 /* Output */
-+
-+#define GPIOD_FL_PWR_ON 12 /* Output */
-+#define GPIOD_LCD_PWR4_ON 13 /* Output */
-+#define GPIOD_BL_KEYP_PWR_ON 14 /* Output */
-+#define GPIOD_BL_KEYB_PWR_ON 15 /* Output */
-+
-+extern struct platform_device htcuniversal_asic3;
-+
-+/* ASIC3 GPIO A bank */
-+
-+#define GPIO_I2C_EN 0*16+GPIOA_I2C_EN
-+#define GPIO_SPK_PWR1_ON 0*16+GPIOA_SPK_PWR1_ON
-+#define GPIO_AUDIO_PWR_ON 0*16+GPIOA_AUDIO_PWR_ON
-+#define GPIO_EARPHONE_PWR_ON 0*16+GPIOA_EARPHONE_PWR_ON
-+
-+#define GPIO_UNKNOWNA4 0*16+GPIOA_UNKNOWN4
-+#define GPIO_BUTTON_BACKLIGHT_N 0*16+GPIOA_BUTTON_BACKLIGHT_N
-+#define GPIO_SPK_PWR2_ON 0*16+GPIOA_SPK_PWR2_ON
-+#define GPIO_BUTTON_RECORD_N 0*16+GPIOA_BUTTON_RECORD_N
-+
-+#define GPIO_BUTTON_CAMERA_N 0*16+GPIOA_BUTTON_CAMERA_N
-+#define GPIO_UNKNOWNA9 0*16+GPIOA_UNKNOWN9
-+#define GPIO_FLASHLIGHT 0*16+GPIOA_FLASHLIGHT
-+#define GPIO_COVER_ROTATE_N 0*16+GPIOA_COVER_ROTATE_N
-+
-+#define GPIO_TOUCHSCREEN_N 0*16+GPIOA_TOUCHSCREEN_N
-+#define GPIO_VOL_UP_N 0*16+GPIOA_VOL_UP_N
-+#define GPIO_VOL_DOWN_N 0*16+GPIOA_VOL_DOWN_N
-+#define GPIO_LCD_PWR5_ON 0*16+GPIOA_LCD_PWR5_ON
-+
-+/* ASIC3 GPIO B bank */
-+
-+#define GPIO_BB_READY 1*16+GPIOB_BB_READY
-+#define GPIO_CODEC_PDN 1*16+GPIOB_CODEC_PDN
-+#define GPIO_UNKNOWNB2 1*16+GPIOB_UNKNOWN2
-+#define GPIO_BB_UNKNOWN3 1*16+GPIOB_BB_UNKNOWN3
-+
-+#define GPIO_BT_IRQ 1*16+GPIOB_BT_IRQ
-+#define GPIO_CLAMSHELL_N 1*16+GPIOB_CLAMSHELL_N
-+#define GPIO_LCD_PWR3_ON 1*16+GPIOB_LCD_PWR3_ON
-+#define GPIO_BB_ALERT 1*16+GPIOB_BB_ALERT
-+
-+#define GPIO_BB_RESET2 1*16+GPIOB_BB_RESET2
-+#define GPIO_EARPHONE_N 1*16+GPIOB_EARPHONE_N
-+#define GPIO_MICRECORD_N 1*16+GPIOB_MICRECORD_N
-+#define GPIO_NIGHT_SENSOR 1*16+GPIOB_NIGHT_SENSOR
-+
-+#define GPIO_UMTS_DCD 1*16+GPIOB_UMTS_DCD
-+#define GPIO_UNKNOWNB13 1*16+GPIOB_UNKNOWN13
-+#define GPIO_CHARGE_EN 1*16+GPIOB_CHARGE_EN
-+#define GPIO_USB_PUEN 1*16+GPIOB_USB_PUEN
-+
-+/* ASIC3 GPIO C bank */
-+
-+#define GPIO_LED_BTWIFI 2*16+GPIOC_LED_BTWIFI
-+#define GPIO_LED_RED 2*16+GPIOC_LED_RED
-+#define GPIO_LED_GREEN 2*16+GPIOC_LED_GREEN
-+#define GPIO_BOARDID3 2*16+GPIOC_BOARDID3
-+
-+#define GPIO_WIFI_IRQ_N 2*16+GPIOC_WIFI_IRQ_N
-+#define GPIO_WIFI_RESET 2*16+GPIOC_WIFI_RESET
-+#define GPIO_WIFI_PWR1_ON 2*16+GPIOC_WIFI_PWR1_ON
-+#define GPIO_BT_RESET 2*16+GPIOC_BT_RESET
-+
-+#define GPIO_UNKNOWNC8 2*16+GPIOC_UNKNOWN8
-+#define GPIO_LCD_PWR1_ON 2*16+GPIOC_LCD_PWR1_ON
-+#define GPIO_LCD_PWR2_ON 2*16+GPIOC_LCD_PWR2_ON
-+#define GPIO_BOARDID2 2*16+GPIOC_BOARDID2
-+
-+#define GPIO_BOARDID1 2*16+GPIOC_BOARDID1
-+#define GPIO_BOARDID0 2*16+GPIOC_BOARDID0
-+#define GPIO_BT_PWR_ON 2*16+GPIOC_BT_PWR_ON
-+#define GPIO_CHARGE_ON 2*16+GPIOC_CHARGE_ON
-+
-+/* ASIC3 GPIO D bank */
-+
-+#define GPIO_KEY_OK_N 3*16+GPIOD_KEY_OK_N
-+#define GPIO_KEY_RIGHT_N 3*16+GPIOD_KEY_RIGHT_N
-+#define GPIO_KEY_LEFT_N 3*16+GPIOD_KEY_LEFT_N
-+#define GPIO_KEY_DOWN_N 3*16+GPIOD_KEY_DOWN_N
-+
-+#define GPIO_KEY_UP_N 3*16+GPIOD_KEY_UP_N
-+#define GPIO_SDIO_DET 3*16+GPIOD_SDIO_DET
-+#define GPIO_WIFI_PWR2_ON 3*16+GPIOD_WIFI_PWR2_ON
-+#define GPIO_HW_REBOOT 3*16+GPIOD_HW_REBOOT
-+
-+#define GPIO_BB_RESET1 3*16+GPIOD_BB_RESET1
-+#define GPIO_UNKNOWND9 3*16+GPIOD_UNKNOWN9
-+#define GPIO_VIBRA_PWR_ON 3*16+GPIOD_VIBRA_PWR_ON
-+#define GPIO_WIFI_PWR3_ON 3*16+GPIOD_WIFI_PWR3_ON
-+
-+#define GPIO_FL_PWR_ON 3*16+GPIOD_FL_PWR_ON
-+#define GPIO_LCD_PWR4_ON 3*16+GPIOD_LCD_PWR4_ON
-+#define GPIO_BL_KEYP_PWR_ON 3*16+GPIOD_BL_KEYP_PWR_ON
-+#define GPIO_BL_KEYB_PWR_ON 3*16+GPIOD_BL_KEYB_PWR_ON
-+
-+#define HTCUNIVERSAL_EGPIO_BASE PXA_CS2_PHYS+0x02000000
-+
-+#define EGPIO4_ON 4 /* something */
-+#define EGPIO5_BT_3V3_ON 5 /* Bluetooth related */
-+#define EGPIO6_WIFI_ON 6 /* WLAN related*/
-+
-+extern void htcuniversal_egpio_enable( u_int16_t bits );
-+extern void htcuniversal_egpio_disable( u_int16_t bits );
-+
-+#endif /* _HTCUNIVERSAL_ASIC_H_ */
-+
-Index: linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-gpio.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-gpio.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,220 @@
-+/*
-+ * include/asm-arm/arch-pxa/htcuniversal-gpio.h
-+ * History:
-+ *
-+ * 2004-12-10 Michael Opdenacker. Wrote down GPIO settings as identified by Jamey Hicks.
-+ * Reused the h2200-gpio.h file as a template.
-+ */
-+
-+#ifndef _HTCUNIVERSAL_GPIO_H_
-+#define _HTCUNIVERSAL_GPIO_H_
-+
-+#include <asm/arch/pxa-regs.h>
-+
-+#define GET_HTCUNIVERSAL_GPIO(gpio) \
-+ (GPLR(GPIO_NR_HTCUNIVERSAL_ ## gpio) & GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio))
-+
-+#define SET_HTCUNIVERSAL_GPIO(gpio, setp) \
-+do { \
-+if (setp) \
-+ GPSR(GPIO_NR_HTCUNIVERSAL_ ## gpio) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio); \
-+else \
-+ GPCR(GPIO_NR_HTCUNIVERSAL_ ## gpio) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio); \
-+} while (0)
-+
-+#define SET_HTCUNIVERSAL_GPIO_N(gpio, setp) \
-+do { \
-+if (setp) \
-+ GPCR(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N); \
-+else \
-+ GPSR(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N); \
-+} while (0)
-+
-+#define HTCUNIVERSAL_IRQ(gpio) \
-+ IRQ_GPIO(GPIO_NR_HTCUNIVERSAL_ ## gpio)
-+
-+#define GPIO_NR_HTCUNIVERSAL_KEY_ON_N 0
-+#define GPIO_NR_HTCUNIVERSAL_GP_RST_N 1
-+
-+#define GPIO_NR_HTCUNIVERSAL_USB_DET 9
-+#define GPIO_NR_HTCUNIVERSAL_POWER_DET 10
-+
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD7 12
-+#define GPIO_NR_HTCUNIVERSAL_ASIC3_SDIO_INT_N 13
-+#define GPIO_NR_HTCUNIVERSAL_ASIC3_EXT_INT 14
-+#define GPIO_NR_HTCUNIVERSAL_CS1_N 15
-+
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD6 17
-+#define GPIO_NR_HTCUNIVERSAL_RDY 18
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_START 19
-+
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT7 22
-+#define GPIO_NR_HTCUNIVERSAL_SPI_CLK 23
-+#define GPIO_NR_HTCUNIVERSAL_SPI_FRM 24
-+#define GPIO_NR_HTCUNIVERSAL_SPI_DO 25
-+#define GPIO_NR_HTCUNIVERSAL_SPI_DI 26
-+
-+#define GPIO_NR_HTCUNIVERSAL_CODEC_ON 27
-+#define GPIO_NR_HTCUNIVERSAL_I2S_BCK 28
-+#define GPIO_NR_HTCUNIVERSAL_I2S_DIN 29
-+#define GPIO_NR_HTCUNIVERSAL_I2S_DOUT 30
-+#define GPIO_NR_HTCUNIVERSAL_I2S_SYNC 31
-+
-+#define GPIO_NR_HTCUNIVERSAL_RS232_ON 32
-+#define GPIO_NR_HTCUNIVERSAL_CS5_N 33
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_RXD 34
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS 35
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN7 36
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN3 37
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN4 38
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_TXD 39
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT6 40
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS 41
-+#define GPIO_NR_HTCUNIVERSAL_BT_RXD 42
-+#define GPIO_NR_HTCUNIVERSAL_BT_TXD 43
-+#define GPIO_NR_HTCUNIVERSAL_BT_UART_CTS 44
-+#define GPIO_NR_HTCUNIVERSAL_BT_UART_RTS 45
-+
-+#define GPIO_NR_HTCUNIVERSAL_SIR_RXD 42
-+#define GPIO_NR_HTCUNIVERSAL_SIR_TXD 43
-+
-+#define GPIO_NR_HTCUNIVERSAL_POE_N 48
-+#define GPIO_NR_HTCUNIVERSAL_PWE_N 49
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD3 50
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD2 51
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD4 52
-+
-+#define GPIO_NR_HTCUNIVERSAL_CIF_MCLK 53
-+#define GPIO_NR_HTCUNIVERSAL_CIF_PCLK 54
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD1 55
-+
-+#define GPIO_NR_HTCUNIVERSAL_LDD0 58
-+#define GPIO_NR_HTCUNIVERSAL_LDD1 59
-+#define GPIO_NR_HTCUNIVERSAL_LDD2 60
-+#define GPIO_NR_HTCUNIVERSAL_LDD3 61
-+#define GPIO_NR_HTCUNIVERSAL_LDD4 62
-+#define GPIO_NR_HTCUNIVERSAL_LDD5 63
-+#define GPIO_NR_HTCUNIVERSAL_LDD6 64
-+#define GPIO_NR_HTCUNIVERSAL_LDD7 65
-+#define GPIO_NR_HTCUNIVERSAL_LDD8 66
-+#define GPIO_NR_HTCUNIVERSAL_LDD9 67
-+#define GPIO_NR_HTCUNIVERSAL_LDD10 68
-+#define GPIO_NR_HTCUNIVERSAL_LDD11 69
-+#define GPIO_NR_HTCUNIVERSAL_LDD12 70
-+#define GPIO_NR_HTCUNIVERSAL_LDD13 71
-+#define GPIO_NR_HTCUNIVERSAL_LDD14 72
-+#define GPIO_NR_HTCUNIVERSAL_LDD15 73
-+
-+#define GPIO_NR_HTCUNIVERSAL_LFCLK_RD 74
-+#define GPIO_NR_HTCUNIVERSAL_LFCLK_A0 75
-+#define GPIO_NR_HTCUNIVERSAL_LFCLK_WR 76
-+#define GPIO_NR_HTCUNIVERSAL_LBIAS 77
-+
-+#define GPIO_NR_HTCUNIVERSAL_CS2_N 78
-+#define GPIO_NR_HTCUNIVERSAL_CS3_N 79
-+#define GPIO_NR_HTCUNIVERSAL_CS4_N 80
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD0 81
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD5 82
-+
-+#define GPIO_NR_HTCUNIVERSAL_CIF_LV 84
-+#define GPIO_NR_HTCUNIVERSAL_CIF_FV 85
-+
-+#define GPIO_NR_HTCUNIVERSAL_LCD1 86
-+#define GPIO_NR_HTCUNIVERSAL_LCD2 87
-+
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN5 90
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN6 91
-+
-+#define GPIO_NR_HTCUNIVERSAL_DREQ1 97
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_RESET 98
-+
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN0 100
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN1 101
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN2 102
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT0 103
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT1 104
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT2 105
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT3 106
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT4 107
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT5 108
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_UNKNOWN 109
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_OFF 110
-+
-+#define GPIO_NR_HTCUNIVERSAL_USB_PUEN 112
-+#define GPIO_NR_HTCUNIVERSAL_I2S_SYSCLK 113
-+
-+#define GPIO_NR_HTCUNIVERSAL_PWM_OUT1 115
-+
-+#define GPIO_NR_HTCUNIVERSAL_I2C_SCL 117
-+#define GPIO_NR_HTCUNIVERSAL_I2C_SDA 118
-+
-+#if 0
-+#define GPIO_NR_HTCUNIVERSAL_CPU_BATT_FAULT_N
-+#define GPIO_NR_HTCUNIVERSAL_ASIC3_RESET_N
-+#define GPIO_NR_HTCUNIVERSAL_CHARGE_EN_N
-+#define GPIO_NR_HTCUNIVERSAL_FLASH_VPEN
-+#define GPIO_NR_HTCUNIVERSAL_BATT_OFF
-+#define GPIO_NR_HTCUNIVERSAL_USB_CHARGE_RATE
-+#define GPIO_NR_HTCUNIVERSAL_BL_DETECT_N
-+#define GPIO_NR_HTCUNIVERSAL_CPU_HW_RESET_N
-+#endif
-+
-+
-+#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_CLK_MD (23 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_FRM_MD (24 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DO_MD (25 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DI_MD (26 | GPIO_ALT_FN_1_IN)
-+
-+#define GPIO_NR_HTCUNIVERSAL_I2S_BCK_MD (28 | GPIO_ALT_FN_1_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_I2S_DIN_MD (29 | GPIO_ALT_FN_2_IN)
-+#define GPIO_NR_HTCUNIVERSAL_I2S_DOUT_MD (30 | GPIO_ALT_FN_1_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_I2S_SYNC_MD (31 | GPIO_ALT_FN_1_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_RXD_MD (34 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS_MD (35 | GPIO_ALT_FN_1_IN)
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_TXD_MD (39 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS_MD (41 | GPIO_ALT_FN_2_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_BT_RXD_MD (42 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_BT_TXD_MD (43 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_BT_UART_CTS_MD (44 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_BT_UART_RTS_MD (45 | GPIO_ALT_FN_2_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_SIR_RXD_MD (46 | GPIO_ALT_FN_2_IN)
-+#define GPIO_NR_HTCUNIVERSAL_SIR_TXD_MD (47 | GPIO_ALT_FN_1_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_POE_N_MD (48 | GPIO_ALT_FN_2_OUT | GPIO_DFLT_HIGH)
-+#define GPIO_NR_HTCUNIVERSAL_PWE_N_MD (49 | GPIO_ALT_FN_2_OUT | GPIO_DFLT_HIGH)
-+
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN0_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN0 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN1_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN1 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN2_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN2 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN3_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN3 | GPIO_ALT_FN_3_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN4_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN4 | GPIO_ALT_FN_2_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN5_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN5 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN6_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN6 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN7_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN7 | GPIO_ALT_FN_3_IN)
-+
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT0_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT0 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT1_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT1 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT2_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT2 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT3_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT3 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT4_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT4 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT5_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT5 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT6_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT6 | GPIO_ALT_FN_1_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT7_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT7 | GPIO_ALT_FN_1_OUT)
-+
-+
-+#define GPIO_NR_HTCUNIVERSAL_I2S_SYSCLK_MD (113 | GPIO_ALT_FN_1_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_PWM1OUT_MD (115 | GPIO_ALT_FN_3_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_I2C_SCL_MD (117 | GPIO_ALT_FN_1_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_I2C_SDA_MD (118 | GPIO_ALT_FN_1_OUT)
-+
-+#endif /* _HTCUNIVERSAL_GPIO_H */
-Index: linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-init.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-init.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,14 @@
-+/*
-+ * include/asm/arm/arch-pxa/htcuniversal-init.h
-+ * Copyright (c) 2004 SDG Systems, LLC
-+ */
-+
-+#ifndef _HTCUNIVERSAL_INIT_H_
-+#define _HTCUNIVERSAL_INIT_H_
-+
-+/* htcuniversal initialization data should be found here
-+ * See -init.h files from other devices for details
-+ */
-+
-+#endif /* _HTCUNIVERSAL_INIT_H_ */
-+
-Index: linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,3 @@
-+#include <asm/arch/irqs.h>
-+
-+#define HTCUNIVERSAL_ASIC3_IRQ_BASE IRQ_BOARD_START
-Index: linux-2.6.22/include/asm-arm/arch-pxa/pxa-pm_ll.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/pxa-pm_ll.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,6 @@
-+struct pxa_ll_pm_ops {
-+ void (*suspend)(unsigned long);
-+ void (*resume)(void);
-+};
-+
-+extern struct pxa_ll_pm_ops *pxa_pm_set_ll_ops(struct pxa_ll_pm_ops *new_ops);
-Index: linux-2.6.22/include/asm-arm/arch-pxa/sharpsl.h
-===================================================================
---- linux-2.6.22.orig/include/asm-arm/arch-pxa/sharpsl.h 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/include/asm-arm/arch-pxa/sharpsl.h 2007-08-23 13:09:22.000000000 +0200
-@@ -25,12 +25,6 @@
- /*
- * SharpSL Backlight
- */
--struct corgibl_machinfo {
-- int max_intensity;
-- int default_intensity;
-- int limit_mask;
-- void (*set_bl_intensity)(int intensity);
--};
- extern void corgibl_limit_intensity(int limit);
-
-
-Index: linux-2.6.22/include/asm-arm/hardware/asic3_keys.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/hardware/asic3_keys.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,18 @@
-+#include <linux/input.h>
-+
-+struct asic3_keys_button {
-+ /* Configuration parameters */
-+ int keycode;
-+ int gpio;
-+ int active_low;
-+ char *desc;
-+ int type;
-+ /* Internal state vars - add below */
-+};
-+
-+struct asic3_keys_platform_data {
-+ struct asic3_keys_button *buttons;
-+ int nbuttons;
-+ struct input_dev *input;
-+ struct device *asic3_dev;
-+};
-Index: linux-2.6.22/include/asm-arm/hardware/asic3_leds.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/hardware/asic3_leds.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,34 @@
-+/*
-+ * LEDs support for HTC ASIC3 devices.
-+ *
-+ * Copyright (c) 2006 Anton Vorontsov <cbou@mail.ru>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+
-+struct asic3_leds_machinfo;
-+
-+struct asic3_led {
-+ struct led_classdev led_cdev;
-+ int hw_num; /* Number of "hardware-accelerated" led */
-+ int gpio_num; /* Number of GPIO if hw_num == -1 */
-+ struct asic3_leds_machinfo *machinfo;
-+};
-+
-+struct asic3_leds_machinfo {
-+ int num_leds;
-+ struct asic3_led *leds;
-+ struct platform_device *asic3_pdev;
-+};
-+
-+extern int asic3_leds_register(void);
-+extern void asic3_leds_unregister(void);
-+
-Index: linux-2.6.22/include/asm-arm/hardware/ipaq-asic3.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/hardware/ipaq-asic3.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,602 @@
-+/*
-+ *
-+ * Definitions for the HTC ASIC3 chip found in several handheld devices
-+ *
-+ * Copyright 2001 Compaq Computer Corporation.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
-+ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
-+ * FITNESS FOR ANY PARTICULAR PURPOSE.
-+ *
-+ * Author: Andrew Christian
-+ *
-+ */
-+
-+#ifndef IPAQ_ASIC3_H
-+#define IPAQ_ASIC3_H
-+
-+/****************************************************/
-+/* IPAQ, ASIC #3, replaces ASIC #1 */
-+
-+#define IPAQ_ASIC3_OFFSET(x,y) (_IPAQ_ASIC3_ ## x ## _Base + _IPAQ_ASIC3_ ## x ## _ ## y)
-+#define IPAQ_ASIC3_GPIO_OFFSET(x,y) (_IPAQ_ASIC3_GPIO_ ## x ## _Base + _IPAQ_ASIC3_GPIO_ ## y)
-+
-+
-+/* All offsets below are specified with the following address bus shift */
-+#define ASIC3_DEFAULT_ADDR_SHIFT 2
-+
-+#define _IPAQ_ASIC3_GPIO_A_Base 0x0000
-+#define _IPAQ_ASIC3_GPIO_B_Base 0x0100
-+#define _IPAQ_ASIC3_GPIO_C_Base 0x0200
-+#define _IPAQ_ASIC3_GPIO_D_Base 0x0300
-+
-+#define _IPAQ_ASIC3_GPIO_Mask 0x00 /* R/W 0:don't mask, 1:mask interrupt */
-+#define _IPAQ_ASIC3_GPIO_Direction 0x04 /* R/W 0:input, 1:output */
-+#define _IPAQ_ASIC3_GPIO_Out 0x08 /* R/W 0:output low, 1:output high */
-+#define _IPAQ_ASIC3_GPIO_TriggerType 0x0c /* R/W 0:level, 1:edge */
-+#define _IPAQ_ASIC3_GPIO_EdgeTrigger 0x10 /* R/W 0:falling, 1:rising */
-+#define _IPAQ_ASIC3_GPIO_LevelTrigger 0x14 /* R/W 0:low, 1:high level detect */
-+#define _IPAQ_ASIC3_GPIO_SleepMask 0x18 /* R/W 0:don't mask, 1:mask trigger in sleep mode */
-+#define _IPAQ_ASIC3_GPIO_SleepOut 0x1c /* R/W level 0:low, 1:high in sleep mode */
-+#define _IPAQ_ASIC3_GPIO_BattFaultOut 0x20 /* R/W level 0:low, 1:high in batt_fault */
-+#define _IPAQ_ASIC3_GPIO_IntStatus 0x24 /* R/W 0:none, 1:detect */
-+#define _IPAQ_ASIC3_GPIO_AltFunction 0x28 /* R/W 0:normal control 1:LED register control */
-+#define _IPAQ_ASIC3_GPIO_SleepConf 0x2c /* R/W bit 1: autosleep 0: disable gposlpout in normal mode, enable gposlpout in sleep mode */
-+#define _IPAQ_ASIC3_GPIO_Status 0x30 /* R Pin status */
-+
-+#define IPAQ_ASIC3_GPIO_A_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Mask )
-+#define IPAQ_ASIC3_GPIO_A_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Direction )
-+#define IPAQ_ASIC3_GPIO_A_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Out )
-+#define IPAQ_ASIC3_GPIO_A_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, A, TriggerType )
-+#define IPAQ_ASIC3_GPIO_A_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, A, EdgeTrigger )
-+#define IPAQ_ASIC3_GPIO_A_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, A, LevelTrigger )
-+#define IPAQ_ASIC3_GPIO_A_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepMask )
-+#define IPAQ_ASIC3_GPIO_A_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepOut )
-+#define IPAQ_ASIC3_GPIO_A_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, BattFaultOut )
-+#define IPAQ_ASIC3_GPIO_A_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, A, IntStatus )
-+#define IPAQ_ASIC3_GPIO_A_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, A, AltFunction )
-+#define IPAQ_ASIC3_GPIO_A_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepConf )
-+#define IPAQ_ASIC3_GPIO_A_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Status )
-+
-+#define IPAQ_ASIC3_GPIO_B_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Mask )
-+#define IPAQ_ASIC3_GPIO_B_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Direction )
-+#define IPAQ_ASIC3_GPIO_B_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Out )
-+#define IPAQ_ASIC3_GPIO_B_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, B, TriggerType )
-+#define IPAQ_ASIC3_GPIO_B_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, B, EdgeTrigger )
-+#define IPAQ_ASIC3_GPIO_B_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, B, LevelTrigger )
-+#define IPAQ_ASIC3_GPIO_B_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepMask )
-+#define IPAQ_ASIC3_GPIO_B_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepOut )
-+#define IPAQ_ASIC3_GPIO_B_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, BattFaultOut )
-+#define IPAQ_ASIC3_GPIO_B_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, B, IntStatus )
-+#define IPAQ_ASIC3_GPIO_B_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, B, AltFunction )
-+#define IPAQ_ASIC3_GPIO_B_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepConf )
-+#define IPAQ_ASIC3_GPIO_B_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Status )
-+
-+#define IPAQ_ASIC3_GPIO_C_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Mask )
-+#define IPAQ_ASIC3_GPIO_C_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Direction )
-+#define IPAQ_ASIC3_GPIO_C_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Out )
-+#define IPAQ_ASIC3_GPIO_C_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, C, TriggerType )
-+#define IPAQ_ASIC3_GPIO_C_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, C, EdgeTrigger )
-+#define IPAQ_ASIC3_GPIO_C_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, C, LevelTrigger )
-+#define IPAQ_ASIC3_GPIO_C_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepMask )
-+#define IPAQ_ASIC3_GPIO_C_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepOut )
-+#define IPAQ_ASIC3_GPIO_C_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, BattFaultOut )
-+#define IPAQ_ASIC3_GPIO_C_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, C, IntStatus )
-+#define IPAQ_ASIC3_GPIO_C_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, C, AltFunction )
-+#define IPAQ_ASIC3_GPIO_C_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepConf )
-+#define IPAQ_ASIC3_GPIO_C_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Status )
-+
-+#define IPAQ_ASIC3_GPIO_D_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Mask )
-+#define IPAQ_ASIC3_GPIO_D_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Direction )
-+#define IPAQ_ASIC3_GPIO_D_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Out )
-+#define IPAQ_ASIC3_GPIO_D_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, D, TriggerType )
-+#define IPAQ_ASIC3_GPIO_D_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, D, EdgeTrigger )
-+#define IPAQ_ASIC3_GPIO_D_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, D, LevelTrigger )
-+#define IPAQ_ASIC3_GPIO_D_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepMask )
-+#define IPAQ_ASIC3_GPIO_D_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepOut )
-+#define IPAQ_ASIC3_GPIO_D_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, BattFaultOut )
-+#define IPAQ_ASIC3_GPIO_D_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, D, IntStatus )
-+#define IPAQ_ASIC3_GPIO_D_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, D, AltFunction )
-+#define IPAQ_ASIC3_GPIO_D_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepConf )
-+#define IPAQ_ASIC3_GPIO_D_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Status )
-+
-+#define _IPAQ_ASIC3_SPI_Base 0x0400
-+#define _IPAQ_ASIC3_SPI_Control 0x0000
-+#define _IPAQ_ASIC3_SPI_TxData 0x0004
-+#define _IPAQ_ASIC3_SPI_RxData 0x0008
-+#define _IPAQ_ASIC3_SPI_Int 0x000c
-+#define _IPAQ_ASIC3_SPI_Status 0x0010
-+
-+#define IPAQ_ASIC3_SPI_Control(_b) IPAQ_ASIC3( _b, u16, SPI, Control )
-+#define IPAQ_ASIC3_SPI_TxData(_b) IPAQ_ASIC3( _b, u16, SPI, TxData )
-+#define IPAQ_ASIC3_SPI_RxData(_b) IPAQ_ASIC3( _b, u16, SPI, RxData )
-+#define IPAQ_ASIC3_SPI_Int(_b) IPAQ_ASIC3( _b, u16, SPI, Int )
-+#define IPAQ_ASIC3_SPI_Status(_b) IPAQ_ASIC3( _b, u16, SPI, Status )
-+
-+#define SPI_CONTROL_SPR(clk) ((clk) & 0x0f) /* Clock rate */
-+
-+#define _IPAQ_ASIC3_PWM_0_Base 0x0500
-+#define _IPAQ_ASIC3_PWM_1_Base 0x0600
-+#define _IPAQ_ASIC3_PWM_TimeBase 0x0000
-+#define _IPAQ_ASIC3_PWM_PeriodTime 0x0004
-+#define _IPAQ_ASIC3_PWM_DutyTime 0x0008
-+
-+#define IPAQ_ASIC3_PWM_TimeBase(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, TimeBase )
-+#define IPAQ_ASIC3_PWM_PeriodTime(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, PeriodTime )
-+#define IPAQ_ASIC3_PWM_DutyTime(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, DutyTime )
-+
-+#define PWM_TIMEBASE_VALUE(x) ((x)&0xf) /* Low 4 bits sets time base */
-+#define PWM_TIMEBASE_ENABLE (1 << 4) /* Enable clock */
-+
-+#define _IPAQ_ASIC3_LED_0_Base 0x0700
-+#define _IPAQ_ASIC3_LED_1_Base 0x0800
-+#define _IPAQ_ASIC3_LED_2_Base 0x0900
-+#define _IPAQ_ASIC3_LED_TimeBase 0x0000 /* R/W 7 bits */
-+#define _IPAQ_ASIC3_LED_PeriodTime 0x0004 /* R/W 12 bits */
-+#define _IPAQ_ASIC3_LED_DutyTime 0x0008 /* R/W 12 bits */
-+#define _IPAQ_ASIC3_LED_AutoStopCount 0x000c /* R/W 16 bits */
-+
-+#define IPAQ_ASIC3_LED_TimeBase(_b, x) IPAQ_ASIC3_N( _b, u8, LED, x, TimeBase )
-+#define IPAQ_ASIC3_LED_PeriodTime(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, PeriodTime )
-+#define IPAQ_ASIC3_LED_DutyTime(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, DutyTime )
-+#define IPAQ_ASIC3_LED_AutoStopCount(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, AutoStopCount )
-+
-+/* LED TimeBase bits - match ASIC2 */
-+#define LED_TBS 0x0f /* Low 4 bits sets time base, max = 13 */
-+ /* Note: max = 5 on hx4700 */
-+ /* 0: maximum time base */
-+ /* 1: maximum time base / 2 */
-+ /* n: maximum time base / 2^n */
-+
-+#define LED_EN (1 << 4) /* LED ON/OFF 0:off, 1:on */
-+#define LED_AUTOSTOP (1 << 5) /* LED ON/OFF auto stop set 0:disable, 1:enable */
-+#define LED_ALWAYS (1 << 6) /* LED Interrupt Mask 0:No mask, 1:mask */
-+
-+#define _IPAQ_ASIC3_CLOCK_Base 0x0A00
-+#define _IPAQ_ASIC3_CLOCK_CDEX 0x00
-+#define _IPAQ_ASIC3_CLOCK_SEL 0x04
-+
-+#define IPAQ_ASIC3_CLOCK_CDEX(_b) IPAQ_ASIC3( _b, u16, CLOCK, CDEX )
-+#define IPAQ_ASIC3_CLOCK_SEL(_b) IPAQ_ASIC3( _b, u16, CLOCK, SEL )
-+
-+#define CLOCK_CDEX_SOURCE (1 << 0) /* 2 bits */
-+#define CLOCK_CDEX_SOURCE0 (1 << 0)
-+#define CLOCK_CDEX_SOURCE1 (1 << 1)
-+#define CLOCK_CDEX_SPI (1 << 2)
-+#define CLOCK_CDEX_OWM (1 << 3)
-+#define CLOCK_CDEX_PWM0 (1 << 4)
-+#define CLOCK_CDEX_PWM1 (1 << 5)
-+#define CLOCK_CDEX_LED0 (1 << 6)
-+#define CLOCK_CDEX_LED1 (1 << 7)
-+#define CLOCK_CDEX_LED2 (1 << 8)
-+
-+#define CLOCK_CDEX_SD_HOST (1 << 9) /* R/W: SD host clock source 24.576M/12.288M */
-+#define CLOCK_CDEX_SD_BUS (1 << 10) /* R/W: SD bus clock source control 24.576M/12.288M */
-+#define CLOCK_CDEX_SMBUS (1 << 11)
-+#define CLOCK_CDEX_CONTROL_CX (1 << 12)
-+
-+#define CLOCK_CDEX_EX0 (1 << 13) /* R/W: 32.768 kHz crystal */
-+#define CLOCK_CDEX_EX1 (1 << 14) /* R/W: 24.576 MHz crystal */
-+
-+#define CLOCK_SEL_SD_HCLK_SEL (1 << 0) /* R/W: SDIO host clock select - 1: 24.576 Mhz, 0: 12.288 MHz */
-+#define CLOCK_SEL_SD_BCLK_SEL (1 << 1) /* R/W: SDIO bus clock select - 1: 24.576 MHz, 0: 12.288 MHz */
-+#define CLOCK_SEL_CX (1 << 2) /* R/W: INT clock source control (32.768 kHz) */
-+
-+
-+#define _IPAQ_ASIC3_INTR_Base 0x0B00
-+
-+#define _IPAQ_ASIC3_INTR_IntMask 0x00 /* Interrupt mask control */
-+#define _IPAQ_ASIC3_INTR_PIntStat 0x04 /* Peripheral interrupt status */
-+#define _IPAQ_ASIC3_INTR_IntCPS 0x08 /* Interrupt timer clock pre-scale */
-+#define _IPAQ_ASIC3_INTR_IntTBS 0x0c /* Interrupt timer set */
-+
-+#define IPAQ_ASIC3_INTR_IntMask(_b) IPAQ_ASIC3( _b, u8, INTR, IntMask )
-+#define IPAQ_ASIC3_INTR_PIntStat(_b) IPAQ_ASIC3( _b, u8, INTR, PIntStat )
-+#define IPAQ_ASIC3_INTR_IntCPS(_b) IPAQ_ASIC3( _b, u8, INTR, IntCPS )
-+#define IPAQ_ASIC3_INTR_IntTBS(_b) IPAQ_ASIC3( _b, u16, INTR, IntTBS )
-+
-+#define ASIC3_INTMASK_GINTMASK (1 << 0) /* Global interrupt mask 1:enable */
-+#define ASIC3_INTMASK_GINTEL (1 << 1) /* 1: rising edge, 0: hi level */
-+#define ASIC3_INTMASK_MASK0 (1 << 2)
-+#define ASIC3_INTMASK_MASK1 (1 << 3)
-+#define ASIC3_INTMASK_MASK2 (1 << 4)
-+#define ASIC3_INTMASK_MASK3 (1 << 5)
-+#define ASIC3_INTMASK_MASK4 (1 << 6)
-+#define ASIC3_INTMASK_MASK5 (1 << 7)
-+
-+#define ASIC3_INTR_PERIPHERAL_A (1 << 0)
-+#define ASIC3_INTR_PERIPHERAL_B (1 << 1)
-+#define ASIC3_INTR_PERIPHERAL_C (1 << 2)
-+#define ASIC3_INTR_PERIPHERAL_D (1 << 3)
-+#define ASIC3_INTR_LED0 (1 << 4)
-+#define ASIC3_INTR_LED1 (1 << 5)
-+#define ASIC3_INTR_LED2 (1 << 6)
-+#define ASIC3_INTR_SPI (1 << 7)
-+#define ASIC3_INTR_SMBUS (1 << 8)
-+#define ASIC3_INTR_OWM (1 << 9)
-+
-+#define ASIC3_INTR_CPS(x) ((x)&0x0f) /* 4 bits, max 14 */
-+#define ASIC3_INTR_CPS_SET ( 1 << 4 ) /* Time base enable */
-+
-+
-+/* Basic control of the SD ASIC */
-+#define _IPAQ_ASIC3_SDHWCTRL_Base 0x0E00
-+
-+#define _IPAQ_ASIC3_SDHWCTRL_SDConf 0x00
-+#define IPAQ_ASIC3_SDHWCTRL_SDConf(_b) IPAQ_ASIC3( _b, u8, SDHWCTRL, SDConf )
-+
-+#define ASIC3_SDHWCTRL_SUSPEND (1 << 0) /* 1=suspend all SD operations */
-+#define ASIC3_SDHWCTRL_CLKSEL (1 << 1) /* 1=SDICK, 0=HCLK */
-+#define ASIC3_SDHWCTRL_PCLR (1 << 2) /* All registers of SDIO cleared */
-+#define ASIC3_SDHWCTRL_LEVCD (1 << 3) /* Level of SD card detection: 1:high, 0:low */
-+#define ASIC3_SDHWCTRL_LEVWP (1 << 4) /* Level of SD card write protection: 1=low, 0=high */
-+#define ASIC3_SDHWCTRL_SDLED (1 << 5) /* SD card LED signal 1=enable, 0=disable */
-+#define ASIC3_SDHWCTRL_SDPWR (1 << 6) /* SD card power supply control 1=enable */
-+
-+
-+/* This is a pointer to an array of 12 u32 values - but only the lower 2 bytes matter */
-+/* Use it as "IPAQ_ASIC3_HWPROTECT_ARRAY[x]" */
-+
-+#define _IPAQ_ASIC3_HWPROTECT_Base 0x1000
-+#define IPAQ_ASIC3_HWPROTECT_ARRAY ((volatile u32*)(_IPAQ_ASIC3_Base + _IPAQ_ASIC3_HWPROTECT_Base))
-+#define HWPROTECT_ARRAY_LEN 12
-+#define HWPROTECT_ARRAY_VALUES {0x4854,0x432d,0x5344,0x494f,0x2050,0x2f4e,0x3a33,0x3048,0x3830,0x3032,0x382d,0x3030}
-+
-+
-+#define _IPAQ_ASIC3_EXTCF_Base 0x1100
-+
-+#define _IPAQ_ASIC3_EXTCF_Select 0x00
-+#define _IPAQ_ASIC3_EXTCF_Reset 0x04
-+
-+#define IPAQ_ASIC3_EXTCF_Select(_b) IPAQ_ASIC3( _b, u16, EXTCF, Select )
-+#define IPAQ_ASIC3_EXTCF_Reset(_b) IPAQ_ASIC3( _b, u16, EXTCF, Reset )
-+
-+#define ASIC3_EXTCF_SMOD0 (1 << 0) /* slot number of mode 0 */
-+#define ASIC3_EXTCF_SMOD1 (1 << 1) /* slot number of mode 1 */
-+#define ASIC3_EXTCF_SMOD2 (1 << 2) /* slot number of mode 2 */
-+#define ASIC3_EXTCF_OWM_EN (1 << 4) /* enable onewire module */
-+#define ASIC3_EXTCF_OWM_SMB (1 << 5) /* OWM bus selection */
-+#define ASIC3_EXTCF_OWM_RESET (1 << 6) /* undocumented, used by OWM and CF */
-+#define ASIC3_EXTCF_CF0_SLEEP_MODE (1 << 7) /* CF0 sleep state control */
-+#define ASIC3_EXTCF_CF1_SLEEP_MODE (1 << 8) /* CF1 sleep state control */
-+#define ASIC3_EXTCF_CF0_PWAIT_EN (1 << 10) /* CF0 PWAIT_n control */
-+#define ASIC3_EXTCF_CF1_PWAIT_EN (1 << 11) /* CF1 PWAIT_n control */
-+#define ASIC3_EXTCF_CF0_BUF_EN (1 << 12) /* CF0 buffer control */
-+#define ASIC3_EXTCF_CF1_BUF_EN (1 << 13) /* CF1 buffer control */
-+#define ASIC3_EXTCF_SD_MEM_ENABLE (1 << 14)
-+#define ASIC3_EXTCF_CF_SLEEP (1 << 15) /* CF sleep mode control */
-+
-+/*****************************************************************************
-+ * The Onewire interface registers
-+ *
-+ * OWM_CMD
-+ * OWM_DAT
-+ * OWM_INTR
-+ * OWM_INTEN
-+ * OWM_CLKDIV
-+ *
-+ *****************************************************************************/
-+
-+#define _IPAQ_ASIC3_OWM_Base 0xC00
-+
-+#define _IPAQ_ASIC3_OWM_CMD 0x00
-+#define _IPAQ_ASIC3_OWM_DAT 0x04
-+#define _IPAQ_ASIC3_OWM_INTR 0x08
-+#define _IPAQ_ASIC3_OWM_INTEN 0x0C
-+#define _IPAQ_ASIC3_OWM_CLKDIV 0x10
-+
-+#define ASIC3_OWM_CMD_ONEWR (1 << 0)
-+#define ASIC3_OWM_CMD_SRA (1 << 1)
-+#define ASIC3_OWM_CMD_DQO (1 << 2)
-+#define ASIC3_OWM_CMD_DQI (1 << 3)
-+
-+#define ASIC3_OWM_INTR_PD (1 << 0)
-+#define ASIC3_OWM_INTR_PDR (1 << 1)
-+#define ASIC3_OWM_INTR_TBE (1 << 2)
-+#define ASIC3_OWM_INTR_TEMP (1 << 3)
-+#define ASIC3_OWM_INTR_RBF (1 << 4)
-+
-+#define ASIC3_OWM_INTEN_EPD (1 << 0)
-+#define ASIC3_OWM_INTEN_IAS (1 << 1)
-+#define ASIC3_OWM_INTEN_ETBE (1 << 2)
-+#define ASIC3_OWM_INTEN_ETMT (1 << 3)
-+#define ASIC3_OWM_INTEN_ERBF (1 << 4)
-+
-+#define ASIC3_OWM_CLKDIV_PRE (3 << 0) /* two bits wide at bit position 0 */
-+#define ASIC3_OWM_CLKDIV_DIV (7 << 2) /* 3 bits wide at bit position 2 */
-+
-+
-+/*****************************************************************************
-+ * The SD configuration registers are at a completely different location
-+ * in memory. They are divided into three sets of registers:
-+ *
-+ * SD_CONFIG Core configuration register
-+ * SD_CTRL Control registers for SD operations
-+ * SDIO_CTRL Control registers for SDIO operations
-+ *
-+ *****************************************************************************/
-+
-+#define IPAQ_ASIC3_SD_CONFIG(_b, s,x) \
-+ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SD_CONFIG_Base + (_IPAQ_ASIC3_SD_CONFIG_ ## x))))
-+
-+#define _IPAQ_ASIC3_SD_CONFIG_Base 0x0400 // Assumes 32 bit addressing
-+
-+#define _IPAQ_ASIC3_SD_CONFIG_Command 0x08 /* R/W: Command */
-+#define _IPAQ_ASIC3_SD_CONFIG_Addr0 0x20 /* [9:31] SD Control Register Base Address */
-+#define _IPAQ_ASIC3_SD_CONFIG_Addr1 0x24 /* [9:31] SD Control Register Base Address */
-+#define _IPAQ_ASIC3_SD_CONFIG_IntPin 0x78 /* R/O: interrupt assigned to pin */
-+#define _IPAQ_ASIC3_SD_CONFIG_ClkStop 0x80 /* Set to 0x1f to clock SD controller, 0 otherwise. */
-+ /* at 0x82 - Gated Clock Control */
-+#define _IPAQ_ASIC3_SD_CONFIG_ClockMode 0x84 /* Control clock of SD controller */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_PinStatus 0x88 /* R/0: read status of SD pins */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Power1 0x90 /* Power1 - manual power control */
-+ /* Power2 is at 0x92 - auto power up after card inserted */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Power3 0x94 /* auto power down when card removed */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_CardDetect 0x98 /* */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Slot 0xA0 /* R/O: define support slot number */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk1 0x1E0 /* Could be used for gated clock (don't use) */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk2 0x1E2 /* Could be used for gated clock (don't use) */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_GPIO_OutAndEnable 0x1E8 /* GPIO Output Reg. , at 0x1EA - GPIO Output Enable Reg. */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_GPIO_Status 0x1EC /* GPIO Status Reg. */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk3 0x1F0 /* Bit 1: double buffer/single buffer */
-+
-+#define IPAQ_ASIC3_SD_CONFIG_Command(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Command )
-+#define IPAQ_ASIC3_SD_CONFIG_Addr0(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Addr0 )
-+#define IPAQ_ASIC3_SD_CONFIG_Addr1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Addr1 )
-+#define IPAQ_ASIC3_SD_CONFIG_IntPin(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, IntPin )
-+#define IPAQ_ASIC3_SD_CONFIG_ClkStop(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, ClkStop )
-+#define IPAQ_ASIC3_SD_CONFIG_ClockMode(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, ClockMode )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_PinStatus(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_PinStatus )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_Power1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Power1 )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_Power3(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Power3 )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_CardDetect(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_CardDetect )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_Slot(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Slot )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_ExtGateClk1 )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk3(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_ExtGateClk3 )
-+
-+#define SD_CONFIG_
-+
-+#define SD_CONFIG_COMMAND_MAE (1<<1) /* Memory access enable (set to 1 to access SD Controller) */
-+
-+#define SD_CONFIG_CLK_ENABLE_ALL 0x1f
-+
-+#define SD_CONFIG_POWER1_PC_33V 0x0200 /* Set for 3.3 volts */
-+#define SD_CONFIG_POWER1_PC_OFF 0x0000 /* Turn off power */
-+
-+#define SD_CONFIG_CARDDETECTMODE_CLK ((x)&0x3) /* two bits - number of cycles for card detection */
-+
-+
-+#define _IPAQ_ASIC3_SD_CTRL_Base 0x1000
-+
-+#define IPAQ_ASIC3_SD(_b, s,x) \
-+ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SD_CTRL_Base + (_IPAQ_ASIC3_SD_CTRL_ ## x))))
-+
-+#define _IPAQ_ASIC3_SD_CTRL_Cmd 0x00
-+#define _IPAQ_ASIC3_SD_CTRL_Arg0 0x08
-+#define _IPAQ_ASIC3_SD_CTRL_Arg1 0x0C
-+#define _IPAQ_ASIC3_SD_CTRL_StopInternal 0x10
-+#define _IPAQ_ASIC3_SD_CTRL_TransferSectorCount 0x14
-+#define _IPAQ_ASIC3_SD_CTRL_Response0 0x18
-+#define _IPAQ_ASIC3_SD_CTRL_Response1 0x1C
-+#define _IPAQ_ASIC3_SD_CTRL_Response2 0x20
-+#define _IPAQ_ASIC3_SD_CTRL_Response3 0x24
-+#define _IPAQ_ASIC3_SD_CTRL_Response4 0x28
-+#define _IPAQ_ASIC3_SD_CTRL_Response5 0x2C
-+#define _IPAQ_ASIC3_SD_CTRL_Response6 0x30
-+#define _IPAQ_ASIC3_SD_CTRL_Response7 0x34
-+#define _IPAQ_ASIC3_SD_CTRL_CardStatus 0x38
-+#define _IPAQ_ASIC3_SD_CTRL_BufferCtrl 0x3C
-+#define _IPAQ_ASIC3_SD_CTRL_IntMaskCard 0x40
-+#define _IPAQ_ASIC3_SD_CTRL_IntMaskBuffer 0x44
-+#define _IPAQ_ASIC3_SD_CTRL_CardClockCtrl 0x48
-+#define _IPAQ_ASIC3_SD_CTRL_MemCardXferDataLen 0x4C
-+#define _IPAQ_ASIC3_SD_CTRL_MemCardOptionSetup 0x50
-+#define _IPAQ_ASIC3_SD_CTRL_ErrorStatus0 0x58
-+#define _IPAQ_ASIC3_SD_CTRL_ErrorStatus1 0x5C
-+#define _IPAQ_ASIC3_SD_CTRL_DataPort 0x60
-+#define _IPAQ_ASIC3_SD_CTRL_TransactionCtrl 0x68
-+#define _IPAQ_ASIC3_SD_CTRL_SoftwareReset 0x1C0
-+
-+#define IPAQ_ASIC3_SD_CTRL_Cmd(_b) IPAQ_ASIC3_SD( _b, u16, Cmd ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Arg0(_b) IPAQ_ASIC3_SD( _b, u16, Arg0 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Arg1(_b) IPAQ_ASIC3_SD( _b, u16, Arg1 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_StopInternal(_b) IPAQ_ASIC3_SD( _b, u16, StopInternal ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_TransferSectorCount(_b) IPAQ_ASIC3_SD( _b, u16, TransferSectorCount ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response0(_b) IPAQ_ASIC3_SD( _b, u16, Response0 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response1(_b) IPAQ_ASIC3_SD( _b, u16, Response1 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response2(_b) IPAQ_ASIC3_SD( _b, u16, Response2 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response3(_b) IPAQ_ASIC3_SD( _b, u16, Response3 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response4(_b) IPAQ_ASIC3_SD( _b, u16, Response4 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response5(_b) IPAQ_ASIC3_SD( _b, u16, Response5 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response6(_b) IPAQ_ASIC3_SD( _b, u16, Response6 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response7(_b) IPAQ_ASIC3_SD( _b, u16, Response7 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_CardStatus(_b) IPAQ_ASIC3_SD( _b, u16, CardStatus ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_BufferCtrl(_b) IPAQ_ASIC3_SD( _b, u16, BufferCtrl ) /* and error status*/
-+#define IPAQ_ASIC3_SD_CTRL_IntMaskCard(_b) IPAQ_ASIC3_SD( _b, u16, IntMaskCard ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_IntMaskBuffer(_b) IPAQ_ASIC3_SD( _b, u16, IntMaskBuffer ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_CardClockCtrl(_b) IPAQ_ASIC3_SD( _b, u16, CardClockCtrl ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_MemCardXferDataLen(_b) IPAQ_ASIC3_SD( _b, u16, MemCardXferDataLen ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_MemCardOptionSetup(_b) IPAQ_ASIC3_SD( _b, u16, MemCardOptionSetup ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_ErrorStatus0(_b) IPAQ_ASIC3_SD( _b, u16, ErrorStatus0 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_ErrorStatus1(_b) IPAQ_ASIC3_SD( _b, u16, ErrorStatus1 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_DataPort(_b) IPAQ_ASIC3_SD( _b, u16, DataPort ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_TransactionCtrl(_b) IPAQ_ASIC3_SD( _b, u16, TransactionCtrl ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_SoftwareReset(_b) IPAQ_ASIC3_SD( _b, u16, SoftwareReset ) /* */
-+
-+#define SD_CTRL_SOFTWARE_RESET_CLEAR (1<<0)
-+
-+#define SD_CTRL_TRANSACTIONCONTROL_SET (1<<8) // 0x0100
-+
-+#define SD_CTRL_CARDCLOCKCONTROL_FOR_SD_CARD (1<<15)// 0x8000
-+#define SD_CTRL_CARDCLOCKCONTROL_ENABLE_CLOCK (1<<8) // 0x0100
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_512 (1<<7) // 0x0080
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_256 (1<<6) // 0x0040
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_128 (1<<5) // 0x0020
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_64 (1<<4) // 0x0010
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_32 (1<<3) // 0x0008
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_16 (1<<2) // 0x0004
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_8 (1<<1) // 0x0002
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_4 (1<<0) // 0x0001
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_2 (0<<0) // 0x0000
-+
-+#define MEM_CARD_OPTION_REQUIRED 0x000e
-+#define MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(x) (((x)&0x0f)<<4) /* Four bits */
-+#define MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT (1<<14) // 0x4000
-+#define MEM_CARD_OPTION_DATA_XFR_WIDTH_1 (1<<15) // 0x8000
-+#define MEM_CARD_OPTION_DATA_XFR_WIDTH_4 (0<<15) //~0x8000
-+
-+#define SD_CTRL_COMMAND_INDEX(x) ((x)&0x3f) /* 0=CMD0, 1=CMD1, ..., 63=CMD63 */
-+#define SD_CTRL_COMMAND_TYPE_CMD (0 << 6)
-+#define SD_CTRL_COMMAND_TYPE_ACMD (1 << 6)
-+#define SD_CTRL_COMMAND_TYPE_AUTHENTICATION (2 << 6)
-+#define SD_CTRL_COMMAND_RESPONSE_TYPE_NORMAL (0 << 8)
-+#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1 (4 << 8)
-+#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1B (5 << 8)
-+#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R2 (6 << 8)
-+#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R3 (7 << 8)
-+#define SD_CTRL_COMMAND_DATA_PRESENT (1 << 11)
-+#define SD_CTRL_COMMAND_TRANSFER_READ (1 << 12)
-+#define SD_CTRL_COMMAND_TRANSFER_WRITE (0 << 12)
-+#define SD_CTRL_COMMAND_MULTI_BLOCK (1 << 13)
-+#define SD_CTRL_COMMAND_SECURITY_CMD (1 << 14)
-+
-+#define SD_CTRL_STOP_INTERNAL_ISSSUE_CMD12 (1 << 0)
-+#define SD_CTRL_STOP_INTERNAL_AUTO_ISSUE_CMD12 (1 << 8)
-+
-+#define SD_CTRL_CARDSTATUS_RESPONSE_END (1 << 0)
-+#define SD_CTRL_CARDSTATUS_RW_END (1 << 2)
-+#define SD_CTRL_CARDSTATUS_CARD_REMOVED_0 (1 << 3)
-+#define SD_CTRL_CARDSTATUS_CARD_INSERTED_0 (1 << 4)
-+#define SD_CTRL_CARDSTATUS_SIGNAL_STATE_PRESENT_0 (1 << 5)
-+#define SD_CTRL_CARDSTATUS_WRITE_PROTECT (1 << 7)
-+#define SD_CTRL_CARDSTATUS_CARD_REMOVED_3 (1 << 8)
-+#define SD_CTRL_CARDSTATUS_CARD_INSERTED_3 (1 << 9)
-+#define SD_CTRL_CARDSTATUS_SIGNAL_STATE_PRESENT_3 (1 << 10)
-+
-+#define SD_CTRL_BUFFERSTATUS_CMD_INDEX_ERROR (1 << 0) // 0x0001
-+#define SD_CTRL_BUFFERSTATUS_CRC_ERROR (1 << 1) // 0x0002
-+#define SD_CTRL_BUFFERSTATUS_STOP_BIT_END_ERROR (1 << 2) // 0x0004
-+#define SD_CTRL_BUFFERSTATUS_DATA_TIMEOUT (1 << 3) // 0x0008
-+#define SD_CTRL_BUFFERSTATUS_BUFFER_OVERFLOW (1 << 4) // 0x0010
-+#define SD_CTRL_BUFFERSTATUS_BUFFER_UNDERFLOW (1 << 5) // 0x0020
-+#define SD_CTRL_BUFFERSTATUS_CMD_TIMEOUT (1 << 6) // 0x0040
-+#define SD_CTRL_BUFFERSTATUS_UNK7 (1 << 7) // 0x0080
-+#define SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE (1 << 8) // 0x0100
-+#define SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE (1 << 9) // 0x0200
-+#define SD_CTRL_BUFFERSTATUS_ILLEGAL_FUNCTION (1 << 13)// 0x2000
-+#define SD_CTRL_BUFFERSTATUS_CMD_BUSY (1 << 14)// 0x4000
-+#define SD_CTRL_BUFFERSTATUS_ILLEGAL_ACCESS (1 << 15)// 0x8000
-+
-+#define SD_CTRL_INTMASKCARD_RESPONSE_END (1 << 0) // 0x0001
-+#define SD_CTRL_INTMASKCARD_RW_END (1 << 2) // 0x0004
-+#define SD_CTRL_INTMASKCARD_CARD_REMOVED_0 (1 << 3) // 0x0008
-+#define SD_CTRL_INTMASKCARD_CARD_INSERTED_0 (1 << 4) // 0x0010
-+#define SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_0 (1 << 5) // 0x0020
-+#define SD_CTRL_INTMASKCARD_UNK6 (1 << 6) // 0x0040
-+#define SD_CTRL_INTMASKCARD_WRITE_PROTECT (1 << 7) // 0x0080
-+#define SD_CTRL_INTMASKCARD_CARD_REMOVED_3 (1 << 8) // 0x0100
-+#define SD_CTRL_INTMASKCARD_CARD_INSERTED_3 (1 << 9) // 0x0200
-+#define SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_3 (1 << 10)// 0x0400
-+
-+#define SD_CTRL_INTMASKBUFFER_CMD_INDEX_ERROR (1 << 0) // 0x0001
-+#define SD_CTRL_INTMASKBUFFER_CRC_ERROR (1 << 1) // 0x0002
-+#define SD_CTRL_INTMASKBUFFER_STOP_BIT_END_ERROR (1 << 2) // 0x0004
-+#define SD_CTRL_INTMASKBUFFER_DATA_TIMEOUT (1 << 3) // 0x0008
-+#define SD_CTRL_INTMASKBUFFER_BUFFER_OVERFLOW (1 << 4) // 0x0010
-+#define SD_CTRL_INTMASKBUFFER_BUFFER_UNDERFLOW (1 << 5) // 0x0020
-+#define SD_CTRL_INTMASKBUFFER_CMD_TIMEOUT (1 << 6) // 0x0040
-+#define SD_CTRL_INTMASKBUFFER_UNK7 (1 << 7) // 0x0080
-+#define SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE (1 << 8) // 0x0100
-+#define SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE (1 << 9) // 0x0200
-+#define SD_CTRL_INTMASKBUFFER_ILLEGAL_FUNCTION (1 << 13)// 0x2000
-+#define SD_CTRL_INTMASKBUFFER_CMD_BUSY (1 << 14)// 0x4000
-+#define SD_CTRL_INTMASKBUFFER_ILLEGAL_ACCESS (1 << 15)// 0x8000
-+
-+#define SD_CTRL_DETAIL0_RESPONSE_CMD_ERROR (1 << 0) // 0x0001
-+#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_RESPONSE_NON_CMD12 (1 << 2) // 0x0004
-+#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_RESPONSE_CMD12 (1 << 3) // 0x0008
-+#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_READ_DATA (1 << 4) // 0x0010
-+#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_WRITE_CRC_STATUS (1 << 5) // 0x0020
-+#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_RESPONSE_NON_CMD12 (1 << 8) // 0x0100
-+#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_RESPONSE_CMD12 (1 << 9) // 0x0200
-+#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_READ_DATA (1 << 10)// 0x0400
-+#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_WRITE_CMD (1 << 11)// 0x0800
-+
-+#define SD_CTRL_DETAIL1_NO_CMD_RESPONSE (1 << 0) // 0x0001
-+#define SD_CTRL_DETAIL1_TIMEOUT_READ_DATA (1 << 4) // 0x0010
-+#define SD_CTRL_DETAIL1_TIMEOUT_CRS_STATUS (1 << 5) // 0x0020
-+#define SD_CTRL_DETAIL1_TIMEOUT_CRC_BUSY (1 << 6) // 0x0040
-+
-+#define _IPAQ_ASIC3_SDIO_CTRL_Base 0x1200
-+
-+#define IPAQ_ASIC3_SDIO(_b, s,x) \
-+ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SDIO_CTRL_Base + (_IPAQ_ASIC3_SDIO_CTRL_ ## x))))
-+
-+#define _IPAQ_ASIC3_SDIO_CTRL_Cmd 0x00
-+#define _IPAQ_ASIC3_SDIO_CTRL_CardPortSel 0x04
-+#define _IPAQ_ASIC3_SDIO_CTRL_Arg0 0x08
-+#define _IPAQ_ASIC3_SDIO_CTRL_Arg1 0x0C
-+#define _IPAQ_ASIC3_SDIO_CTRL_TransferBlockCount 0x14
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response0 0x18
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response1 0x1C
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response2 0x20
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response3 0x24
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response4 0x28
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response5 0x2C
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response6 0x30
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response7 0x34
-+#define _IPAQ_ASIC3_SDIO_CTRL_CardStatus 0x38
-+#define _IPAQ_ASIC3_SDIO_CTRL_BufferCtrl 0x3C
-+#define _IPAQ_ASIC3_SDIO_CTRL_IntMaskCard 0x40
-+#define _IPAQ_ASIC3_SDIO_CTRL_IntMaskBuffer 0x44
-+#define _IPAQ_ASIC3_SDIO_CTRL_CardXferDataLen 0x4C
-+#define _IPAQ_ASIC3_SDIO_CTRL_CardOptionSetup 0x50
-+#define _IPAQ_ASIC3_SDIO_CTRL_ErrorStatus0 0x54
-+#define _IPAQ_ASIC3_SDIO_CTRL_ErrorStatus1 0x58
-+#define _IPAQ_ASIC3_SDIO_CTRL_DataPort 0x60
-+#define _IPAQ_ASIC3_SDIO_CTRL_TransactionCtrl 0x68
-+#define _IPAQ_ASIC3_SDIO_CTRL_CardIntCtrl 0x6C
-+#define _IPAQ_ASIC3_SDIO_CTRL_ClocknWaitCtrl 0x70
-+#define _IPAQ_ASIC3_SDIO_CTRL_HostInformation 0x74
-+#define _IPAQ_ASIC3_SDIO_CTRL_ErrorCtrl 0x78
-+#define _IPAQ_ASIC3_SDIO_CTRL_LEDCtrl 0x7C
-+#define _IPAQ_ASIC3_SDIO_CTRL_SoftwareReset 0x1C0
-+
-+#define IPAQ_ASIC3_SDIO_CTRL_Cmd(_b) IPAQ_ASIC3_SDIO( _b, u16, Cmd ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_CardPortSel(_b) IPAQ_ASIC3_SDIO( _b, u16, CardPortSel ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Arg0(_b) IPAQ_ASIC3_SDIO( _b, u16, Arg0 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Arg1(_b) IPAQ_ASIC3_SDIO( _b, u16, Arg1 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_TransferBlockCount(_b) IPAQ_ASIC3_SDIO( _b, u16, TransferBlockCount ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response0(_b) IPAQ_ASIC3_SDIO( _b, u16, Response0 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response1(_b) IPAQ_ASIC3_SDIO( _b, u16, Response1 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response2(_b) IPAQ_ASIC3_SDIO( _b, u16, Response2 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response3(_b) IPAQ_ASIC3_SDIO( _b, u16, Response3 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response4(_b) IPAQ_ASIC3_SDIO( _b, u16, Response4 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response5(_b) IPAQ_ASIC3_SDIO( _b, u16, Response5 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response6(_b) IPAQ_ASIC3_SDIO( _b, u16, Response6 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response7(_b) IPAQ_ASIC3_SDIO( _b, u16, Response7 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_CardStatus(_b) IPAQ_ASIC3_SDIO( _b, u16, CardStatus ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_BufferCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, BufferCtrl ) /* and error status*/
-+#define IPAQ_ASIC3_SDIO_CTRL_IntMaskCard(_b) IPAQ_ASIC3_SDIO( _b, u16, IntMaskCard ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_IntMaskBuffer(_b) IPAQ_ASIC3_SDIO( _b, u16, IntMaskBuffer ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_CardXferDataLen(_b) IPAQ_ASIC3_SDIO( _b, u16, CardXferDataLen ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_CardOptionSetup(_b) IPAQ_ASIC3_SDIO( _b, u16, CardOptionSetup ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_ErrorStatus0(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorStatus0 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_ErrorStatus1(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorStatus1 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_DataPort(_b) IPAQ_ASIC3_SDIO( _b, u16, DataPort ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_TransactionCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, TransactionCtrl ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_CardIntCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, CardIntCtrl ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_ClocknWaitCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, ClocknWaitCtrl ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_HostInformation(_b) IPAQ_ASIC3_SDIO( _b, u16, HostInformation ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_ErrorCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorCtrl ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_LEDCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, LEDCtrl ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_SoftwareReset(_b) IPAQ_ASIC3_SDIO( _b, u16, SoftwareReset ) /* */
-+
-+#define IPAQ_ASIC3_MAP_SIZE 0x2000
-+
-+#endif
-Index: linux-2.6.22/include/linux/backlight.h
-===================================================================
---- linux-2.6.22.orig/include/linux/backlight.h 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/include/linux/backlight.h 2007-08-23 13:09:22.000000000 +0200
-@@ -87,4 +87,11 @@
-
- #define to_backlight_device(obj) container_of(obj, struct backlight_device, class_dev)
-
-+struct generic_bl_info {
-+ int max_intensity;
-+ int default_intensity;
-+ int limit_mask;
-+ void (*set_bl_intensity)(int intensity);
-+};
-+
- #endif
-Index: linux-2.6.22/include/linux/gpiodev.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/gpiodev.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,44 @@
-+#ifndef __GPIODEV_H
-+#define __GPIODEV_H
-+
-+#include <linux/device.h>
-+#include <linux/platform_device.h>
-+#include <asm/gpio.h>
-+
-+/* Interface */
-+
-+/* This structure must be first member of device platform_data structure
-+ of a device which provides gpiodev interface. All method pointers
-+ must be non-NULL, so stubs must be used for non-implemented ones. */
-+struct gpiodev_ops {
-+ int (*get)(struct device *this, unsigned gpio_no);
-+ void (*set)(struct device *this, unsigned gpio_no, int val);
-+ int (*to_irq)(struct device *this, unsigned gpio_no);
-+};
-+
-+/* Generalized GPIO structure */
-+
-+struct gpio {
-+ struct device *gpio_dev;
-+ unsigned gpio_no;
-+};
-+
-+/* API functions */
-+
-+static inline int gpiodev_get_value(struct gpio *gpio)
-+{
-+ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data;
-+ return ops->get(gpio->gpio_dev, gpio->gpio_no);
-+}
-+static inline void gpiodev_set_value(struct gpio *gpio, int val)
-+{
-+ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data;
-+ ops->set(gpio->gpio_dev, gpio->gpio_no, val);
-+}
-+static inline int gpiodev_to_irq(struct gpio *gpio)
-+{
-+ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data;
-+ return ops->to_irq(gpio->gpio_dev, gpio->gpio_no);
-+}
-+
-+#endif /* __GPIODEV_H */
-Index: linux-2.6.22/include/linux/input_pda.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/input_pda.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,47 @@
-+#ifndef _INPUT_PDA_H
-+#define _INPUT_PDA_H
-+
-+/*
-+ * This is temporary virtual button key codes map
-+ * for keyboardless handheld computers.
-+ * Its purpose is to provide map common to all devices
-+ * and known to work with current software and its bugs
-+ * and misfeatures. Once issues with the software are
-+ * solved, codes from input.h will be used directly
-+ * (missing key definitions will be added).
-+ */
-+
-+/* Some directly usable keycodes:
-+KEY_POWER - Power/suspend button
-+KEY_ENTER - Enter/Action/Central button on joypad
-+KEY_UP
-+KEY_DOWN
-+KEY_LEFT
-+KEY_RIGHT
-+*/
-+
-+/* XXX Instead of using any values in include/linux/input.h, we have to use
-+ use values < 128 due to some munging that kdrive does to get keystrokes.
-+ When kdrive gets its key events from evdev instead of the console,
-+ we should be able to switch to using input.h values and get rid of
-+ xmodmap. */
-+
-+#define _KEY_APP1 KEY_F9 // xmodmap sees 67 + 8 = 75
-+#define _KEY_APP2 KEY_F10 // xmodmap 76
-+#define _KEY_APP3 KEY_F11 // xmodmap 95
-+#define _KEY_APP4 KEY_F12 // xmodmap 96
-+
-+#define _KEY_RECORD KEY_RO
-+
-+/* It is highly recommended to use exactly 4 codes above for
-+ 4 buttons the device has. This will ensure that console and
-+ framebuffer applications (e.g. games) will work ok on all
-+ devices. If you'd like more distinguishable names, following
-+ convenience defines are provided, suiting many devices. */
-+
-+#define _KEY_CALENDAR _KEY_APP1
-+#define _KEY_CONTACTS _KEY_APP2
-+#define _KEY_MAIL _KEY_APP3
-+#define _KEY_HOMEPAGE _KEY_APP4
-+
-+#endif
-Index: linux-2.6.22/include/linux/pda_power.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/pda_power.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,31 @@
-+/*
-+ * Common power driver for PDAs and phones with one or two external
-+ * power supplies (AC/USB) connected to main and backup batteries,
-+ * and optional builtin charger.
-+ *
-+ * Copyright 2007 Anton Vorontsov <cbou@mail.ru>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __PDA_POWER_H__
-+#define __PDA_POWER_H__
-+
-+#define PDA_POWER_CHARGE_AC (1 << 0)
-+#define PDA_POWER_CHARGE_USB (1 << 1)
-+
-+struct pda_power_pdata {
-+ int (*is_ac_online)(void);
-+ int (*is_usb_online)(void);
-+ void (*set_charge)(int flags);
-+
-+ char **supplied_to;
-+ size_t num_supplicants;
-+
-+ unsigned int wait_for_status; /* msecs, default is 500 */
-+ unsigned int wait_for_charger; /* msecs, default is 500 */
-+};
-+
-+#endif /* __PDA_POWER_H__ */
-Index: linux-2.6.22/include/linux/soc/asic3_base.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/soc/asic3_base.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,104 @@
-+#include <asm/types.h>
-+#include <linux/gpiodev.h>
-+
-+/* Private API - for ASIC3 devices internal use only */
-+#define HDR_IPAQ_ASIC3_ACTION(ACTION,action,fn,FN) \
-+u32 asic3_get_gpio_ ## action ## _ ## fn (struct device *dev); \
-+void asic3_set_gpio_ ## action ## _ ## fn (struct device *dev, u32 bits, u32 val);
-+
-+#define HDR_IPAQ_ASIC3_FN(fn,FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( MASK,mask,fn,FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( DIR, dir, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( OUT, out, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( LEVELTRI, trigtype, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( RISING, rising, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( LEVEL, triglevel, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( SLEEP_MASK, sleepmask, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( SLEEP_OUT, sleepout, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( BATT_FAULT_OUT, battfaultout, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( INT_STATUS, intstatus, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( ALT_FUNCTION, alt_fn, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( SLEEP_CONF, sleepconf, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( STATUS, status, fn, FN)
-+
-+/* Public API */
-+
-+#define ASIC3_GPIOA_IRQ_BASE 0
-+#define ASIC3_GPIOB_IRQ_BASE 16
-+#define ASIC3_GPIOC_IRQ_BASE 32
-+#define ASIC3_GPIOD_IRQ_BASE 48
-+#define ASIC3_LED0_IRQ 64
-+#define ASIC3_LED1_IRQ 65
-+#define ASIC3_LED2_IRQ 66
-+#define ASIC3_SPI_IRQ 67
-+#define ASIC3_SMBUS_IRQ 68
-+#define ASIC3_OWM_IRQ 69
-+
-+#define ASIC3_NR_GPIO_IRQS 64 /* 16 bits each GPIO A...D banks */
-+#define ASIC3_NR_IRQS (ASIC3_OWM_IRQ + 1)
-+
-+extern int asic3_irq_base(struct device *dev);
-+
-+extern void asic3_write_register(struct device *dev, unsigned int reg,
-+ u32 value);
-+extern u32 asic3_read_register(struct device *dev, unsigned int reg);
-+
-+/* old clock api */
-+extern void asic3_set_clock_sel(struct device *dev, u32 bits, u32 val);
-+extern u32 asic3_get_clock_cdex(struct device *dev);
-+extern void asic3_set_clock_cdex(struct device *dev, u32 bits, u32 val);
-+
-+extern void asic3_set_extcf_select(struct device *dev, u32 bits, u32 val);
-+extern void asic3_set_extcf_reset(struct device *dev, u32 bits, u32 val);
-+extern void asic3_set_sdhwctrl(struct device *dev, u32 bits, u32 val);
-+
-+extern void asic3_set_led(struct device *dev, int led_num, int duty_time,
-+ int cycle_time, int timebase);
-+
-+extern int asic3_register_mmc(struct device *dev);
-+extern int asic3_unregister_mmc(struct device *dev);
-+
-+/* Accessors for GPIO banks */
-+HDR_IPAQ_ASIC3_FN(a, A)
-+HDR_IPAQ_ASIC3_FN(b, B)
-+HDR_IPAQ_ASIC3_FN(c, C)
-+HDR_IPAQ_ASIC3_FN(d, D)
-+
-+#define _IPAQ_ASIC3_GPIO_BANK_A 0
-+#define _IPAQ_ASIC3_GPIO_BANK_B 1
-+#define _IPAQ_ASIC3_GPIO_BANK_C 2
-+#define _IPAQ_ASIC3_GPIO_BANK_D 3
-+
-+#define ASIC3_GPIO_bit(gpio) (1 << (gpio & 0xf))
-+
-+extern int asic3_get_gpio_bit(struct device *dev, int gpio);
-+extern void asic3_set_gpio_bit(struct device *dev, int gpio, int val);
-+extern int asic3_gpio_get_value(struct device *dev, unsigned gpio);
-+extern void asic3_gpio_set_value(struct device *dev, unsigned gpio, int val);
-+
-+
-+struct tmio_mmc_hwconfig;
-+
-+struct asic3_platform_data
-+{
-+ // Must be first member
-+ struct gpiodev_ops gpiodev_ops;
-+
-+ struct {
-+ u32 dir;
-+ u32 init;
-+ u32 sleep_mask;
-+ u32 sleep_out;
-+ u32 batt_fault_out;
-+ u32 sleep_conf;
-+ u32 alt_function;
-+ } gpio_a, gpio_b, gpio_c, gpio_d;
-+
-+ int irq_base;
-+ unsigned int bus_shift;
-+
-+ struct platform_device **child_platform_devs;
-+ int num_child_platform_devs;
-+
-+ struct tmio_mmc_hwconfig *tmio_mmc_hwconfig;
-+};
-Index: linux-2.6.22/include/linux/soc/tmio_mmc.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/soc/tmio_mmc.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,17 @@
-+#include <linux/platform_device.h>
-+
-+#define MMC_CLOCK_DISABLED 0
-+#define MMC_CLOCK_ENABLED 1
-+
-+#define TMIO_WP_ALWAYS_RW ((void*)-1)
-+
-+struct tmio_mmc_hwconfig {
-+ void (*hwinit)(struct platform_device *sdev);
-+ void (*set_mmc_clock)(struct platform_device *sdev, int state);
-+
-+ /* NULL - use ASIC3 signal,
-+ TMIO_WP_ALWAYS_RW - assume always R/W (e.g. miniSD)
-+ otherwise - machine-specific handler */
-+ int (*mmc_get_ro)(struct platform_device *pdev);
-+ short address_shift;
-+};
-Index: linux-2.6.22/include/asm-arm/arch-pxa/pxa-regs.h
-===================================================================
---- linux-2.6.22.orig/include/asm-arm/arch-pxa/pxa-regs.h 2007-08-23 13:09:21.000000000 +0200
-+++ linux-2.6.22/include/asm-arm/arch-pxa/pxa-regs.h 2007-08-23 13:09:22.000000000 +0200
-@@ -2063,6 +2063,8 @@
- #define LDCMD_SOFINT (1 << 22)
- #define LDCMD_EOFINT (1 << 21)
-
-+#define LCCR4_13M_PCD_EN (1<<25) /* 13M PCD enable */
-+#define LCCR4_PCDDIV (1<<31) /* PCD selection */
-
- #define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */
- #define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */
-Index: linux-2.6.22/drivers/mmc/host/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/mmc/host/Kconfig 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/mmc/host/Kconfig 2007-08-23 13:09:22.000000000 +0200
-@@ -100,3 +100,9 @@
- To compile this driver as a module, choose M here: the
- module will be called tifm_sd.
-
-+config MMC_ASIC3
-+ tristate "HTC ASIC3 SD/MMC support"
-+ depends on MMC && HTC_ASIC3
-+ help
-+ This provides support for the ASIC3 SD/MMC controller, used
-+ in the iPAQ hx4700 and others.
-Index: linux-2.6.22/drivers/mmc/host/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/mmc/host/Makefile 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/mmc/host/Makefile 2007-08-23 13:09:22.000000000 +0200
-@@ -15,4 +15,4 @@
- obj-$(CONFIG_MMC_OMAP) += omap.o
- obj-$(CONFIG_MMC_AT91) += at91_mci.o
- obj-$(CONFIG_MMC_TIFM_SD) += tifm_sd.o
--
-+obj-$(CONFIG_MMC_ASIC3) += asic3_mmc.o
-Index: linux-2.6.22/drivers/mmc/host/asic3_mmc.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/mmc/host/asic3_mmc.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,900 @@
-+/* Note that this driver can likely be merged into the tmio driver, so
-+ * consider this code temporary. It works, though.
-+ */
-+/*
-+ * linux/drivers/mmc/asic3_mmc.c
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * based on tmio_mmc.c
-+ * Copyright (C) 2004 Ian Molton
-+ *
-+ * Refactored to support all ASIC3 devices, 2006 Paul Sokolovsky
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Driver for the SD / SDIO cell found in:
-+ *
-+ * TC6393XB
-+ *
-+ * This driver draws mainly on scattered spec sheets, Reverse engineering
-+ * of the toshiba e800 SD driver and some parts of the 2.4 ASIC3 driver (4 bit
-+ * support).
-+ *
-+ * Supports MMC 1 bit transfers and SD 1 and 4 bit modes.
-+ *
-+ * TODO:
-+ * Eliminate FIXMEs
-+ * SDIO support
-+ * Power management
-+ * Handle MMC errors (at all)
-+ *
-+ */
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/ioport.h>
-+#include <linux/platform_device.h>
-+#include <linux/interrupt.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/err.h>
-+#include <linux/mmc/mmc.h>
-+#include <linux/mmc/host.h>
-+#include <linux/mmc/card.h>
-+//#include <linux/mmc/protocol.h>
-+#include <linux/mmc/sd.h>
-+#include <linux/scatterlist.h>
-+//#include <linux/soc-old.h>
-+#include <linux/soc/asic3_base.h>
-+#include <linux/soc/tmio_mmc.h>
-+
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#include <asm/mach/irq.h>
-+#include <linux/clk.h>
-+#include <asm/mach-types.h>
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+#include "asic3_mmc.h"
-+
-+struct asic3_mmc_host {
-+ void *ctl_base;
-+ struct device *asic3_dev; /* asic3 device */
-+ struct tmio_mmc_hwconfig *hwconfig; /* HW config data/handlers, guaranteed != NULL */
-+ unsigned long bus_shift;
-+ struct mmc_command *cmd;
-+ struct mmc_request *mrq;
-+ struct mmc_data *data;
-+ struct mmc_host *mmc;
-+ int irq;
-+ unsigned short clock_for_sd;
-+
-+ /* I/O related stuff */
-+ struct scatterlist *sg_ptr;
-+ unsigned int sg_len;
-+ unsigned int sg_off;
-+};
-+
-+static void
-+mmc_finish_request(struct asic3_mmc_host *host)
-+{
-+ struct mmc_request *mrq = host->mrq;
-+
-+ /* Write something to end the command */
-+ host->mrq = NULL;
-+ host->cmd = NULL;
-+ host->data = NULL;
-+
-+ mmc_request_done(host->mmc, mrq);
-+}
-+
-+
-+#define ASIC3_MMC_REG(host, block, reg) (*((volatile u16 *) ((host->ctl_base) + ((_IPAQ_ASIC3_## block ## _Base + _IPAQ_ASIC3_ ## block ## _ ## reg) >> (2 - host->bus_shift))) ))
-+
-+static void
-+mmc_start_command(struct asic3_mmc_host *host, struct mmc_command *cmd)
-+{
-+ struct mmc_data *data = host->data;
-+ int c = cmd->opcode;
-+
-+ DBG("Opcode: %d, base: %p\n", cmd->opcode, host->ctl_base);
-+
-+ if(cmd->opcode == MMC_STOP_TRANSMISSION) {
-+ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = SD_CTRL_STOP_INTERNAL_ISSSUE_CMD12;
-+ cmd->resp[0] = cmd->opcode;
-+ cmd->resp[1] = 0;
-+ cmd->resp[2] = 0;
-+ cmd->resp[3] = 0;
-+ cmd->resp[4] = 0;
-+ return;
-+ }
-+
-+ switch(cmd->flags & 0x1f) {
-+ case MMC_RSP_NONE: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_NORMAL; break;
-+ case MMC_RSP_R1: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1; break;
-+ case MMC_RSP_R1B: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1B; break;
-+ case MMC_RSP_R2: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R2; break;
-+ case MMC_RSP_R3: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R3; break;
-+ default:
-+ DBG("Unknown response type %d\n", cmd->flags & 0x1f);
-+ break;
-+ }
-+
-+ host->cmd = cmd;
-+
-+ if(cmd->opcode == MMC_APP_CMD) {
-+ c |= APP_CMD;
-+ }
-+ if (cmd->opcode == MMC_GO_IDLE_STATE) {
-+ c |= (3 << 8); /* This was removed from ipaq-asic3.h for some reason */
-+ }
-+ if(data) {
-+ c |= SD_CTRL_COMMAND_DATA_PRESENT;
-+ if(data->blocks > 1) {
-+ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = SD_CTRL_STOP_INTERNAL_AUTO_ISSUE_CMD12;
-+ c |= SD_CTRL_COMMAND_MULTI_BLOCK;
-+ }
-+ if(data->flags & MMC_DATA_READ) {
-+ c |= SD_CTRL_COMMAND_TRANSFER_READ;
-+ }
-+ /* MMC_DATA_WRITE does not require a bit to be set */
-+ }
-+
-+ /* Enable the command and data interrupts */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
-+ SD_CTRL_INTMASKCARD_RESPONSE_END
-+ | SD_CTRL_INTMASKCARD_RW_END
-+ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0
-+ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0
-+#if 0
-+ | SD_CTRL_INTMASKCARD_CARD_REMOVED_3
-+ | SD_CTRL_INTMASKCARD_CARD_INSERTED_3
-+#endif
-+ );
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) = ~(
-+ SD_CTRL_INTMASKBUFFER_UNK7
-+ | SD_CTRL_INTMASKBUFFER_CMD_BUSY
-+#if 0
-+ | SD_CTRL_INTMASKBUFFER_CMD_INDEX_ERROR
-+ | SD_CTRL_INTMASKBUFFER_CRC_ERROR
-+ | SD_CTRL_INTMASKBUFFER_STOP_BIT_END_ERROR
-+ | SD_CTRL_INTMASKBUFFER_DATA_TIMEOUT
-+ | SD_CTRL_INTMASKBUFFER_BUFFER_OVERFLOW
-+ | SD_CTRL_INTMASKBUFFER_BUFFER_UNDERFLOW
-+ | SD_CTRL_INTMASKBUFFER_CMD_TIMEOUT
-+ | SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE
-+ | SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE
-+ | SD_CTRL_INTMASKBUFFER_ILLEGAL_ACCESS
-+#endif
-+ );
-+
-+ /* Send the command */
-+ ASIC3_MMC_REG(host, SD_CTRL, Arg1) = cmd->arg >> 16;
-+ ASIC3_MMC_REG(host, SD_CTRL, Arg0) = cmd->arg & 0xffff;
-+ ASIC3_MMC_REG(host, SD_CTRL, Cmd) = c;
-+}
-+
-+/* This chip always returns (at least?) as much data as you ask for. I'm
-+ * unsure what happens if you ask for less than a block. This should be looked
-+ * into to ensure that a funny length read doesnt mess up the controller data
-+ * state machine.
-+ *
-+ * Aric: Statement above may not apply to ASIC3.
-+ *
-+ * FIXME - this chip cannot do 1 and 2 byte data requests in 4 bit mode
-+ *
-+ * Aric: Statement above may not apply to ASIC3.
-+ */
-+
-+static struct tasklet_struct mmc_data_read_tasklet;
-+
-+static void
-+mmc_data_transfer(unsigned long h)
-+{
-+ struct asic3_mmc_host *host = (struct asic3_mmc_host *)h;
-+ struct mmc_data *data = host->data;
-+ unsigned short *buf;
-+ int count;
-+ /* unsigned long flags; */
-+
-+ if(!data){
-+ printk(KERN_WARNING DRIVER_NAME ": Spurious Data IRQ\n");
-+ return;
-+ }
-+
-+ /* local_irq_save(flags); */
-+ /* buf = kmap_atomic(host->sg_ptr->page, KM_BIO_SRC_IRQ); */
-+ buf = kmap(host->sg_ptr->page);
-+ buf += host->sg_ptr->offset/2 + host->sg_off/2;
-+
-+ /*
-+ * Ensure we dont read more than one block. The chip will interrupt us
-+ * When the next block is available.
-+ */
-+ count = host->sg_ptr->length - host->sg_off;
-+ if(count > data->blksz) {
-+ count = data->blksz;
-+ }
-+
-+ DBG("count: %08x, page: %p, offset: %08x flags %08x\n",
-+ count, host->sg_ptr->page, host->sg_off, data->flags);
-+
-+ host->sg_off += count;
-+
-+ /* Transfer the data */
-+ if(data->flags & MMC_DATA_READ) {
-+ while(count > 0) {
-+ /* Read two bytes from SD/MMC controller. */
-+ *buf = ASIC3_MMC_REG(host, SD_CTRL, DataPort);
-+ buf++;
-+ count -= 2;
-+ }
-+ flush_dcache_page(host->sg_ptr->page);
-+ } else {
-+ while(count > 0) {
-+ /* Write two bytes to SD/MMC controller. */
-+ ASIC3_MMC_REG(host, SD_CTRL, DataPort) = *buf;
-+ buf++;
-+ count -= 2;
-+ }
-+ }
-+
-+ /* kunmap_atomic(host->sg_ptr->page, KM_BIO_SRC_IRQ); */
-+ kunmap(host->sg_ptr->page);
-+ /* local_irq_restore(flags); */
-+ if(host->sg_off == host->sg_ptr->length) {
-+ host->sg_ptr++;
-+ host->sg_off = 0;
-+ --host->sg_len;
-+ }
-+
-+ return;
-+}
-+
-+static void
-+mmc_data_end_irq(struct asic3_mmc_host *host)
-+{
-+ struct mmc_data *data = host->data;
-+
-+ host->data = NULL;
-+
-+ if(!data){
-+ printk(KERN_WARNING DRIVER_NAME ": Spurious data end IRQ\n");
-+ return;
-+ }
-+
-+ if (data->error == MMC_ERR_NONE) {
-+ data->bytes_xfered = data->blocks * data->blksz;
-+ } else {
-+ data->bytes_xfered = 0;
-+ }
-+
-+ DBG("Completed data request\n");
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = 0;
-+
-+ /* Make sure read enable interrupt and write enable interrupt are disabled */
-+ if(data->flags & MMC_DATA_READ) {
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) |= SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE;
-+ } else {
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) |= SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE;
-+ }
-+
-+ mmc_finish_request(host);
-+}
-+
-+static void
-+mmc_cmd_irq(struct asic3_mmc_host *host, unsigned int buffer_stat)
-+{
-+ struct mmc_command *cmd = host->cmd;
-+ u8 *buf = (u8 *)cmd->resp;
-+ u16 data;
-+
-+ if(!host->cmd) {
-+ printk(KERN_WARNING DRIVER_NAME ": Spurious CMD irq\n");
-+ return;
-+ }
-+
-+ host->cmd = NULL;
-+ if(cmd->flags & MMC_RSP_PRESENT && cmd->flags & MMC_RSP_136) {
-+ /* R2 */
-+ buf[12] = 0xff;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response0);
-+ buf[13] = data & 0xff;
-+ buf[14] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response1);
-+ buf[15] = data & 0xff;
-+ buf[8] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response2);
-+ buf[9] = data & 0xff;
-+ buf[10] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response3);
-+ buf[11] = data & 0xff;
-+ buf[4] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response4);
-+ buf[5] = data & 0xff;
-+ buf[6] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response5);
-+ buf[7] = data & 0xff;
-+ buf[0] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response6);
-+ buf[1] = data & 0xff;
-+ buf[2] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response7);
-+ buf[3] = data & 0xff;
-+ } else if(cmd->flags & MMC_RSP_PRESENT) {
-+ /* R1, R1B, R3 */
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response0);
-+ buf[0] = data & 0xff;
-+ buf[1] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response1);
-+ buf[2] = data & 0xff;
-+ buf[3] = data >> 8;
-+ }
-+ DBG("Response: %08x %08x %08x %08x\n", cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]);
-+
-+ if(buffer_stat & SD_CTRL_BUFFERSTATUS_CMD_TIMEOUT) {
-+ cmd->error = MMC_ERR_TIMEOUT;
-+ } else if((buffer_stat & SD_CTRL_BUFFERSTATUS_CRC_ERROR) && (cmd->flags & MMC_RSP_CRC)) {
-+ cmd->error = MMC_ERR_BADCRC;
-+ } else if(buffer_stat &
-+ (
-+ SD_CTRL_BUFFERSTATUS_ILLEGAL_ACCESS
-+ | SD_CTRL_BUFFERSTATUS_CMD_INDEX_ERROR
-+ | SD_CTRL_BUFFERSTATUS_STOP_BIT_END_ERROR
-+ | SD_CTRL_BUFFERSTATUS_BUFFER_OVERFLOW
-+ | SD_CTRL_BUFFERSTATUS_BUFFER_UNDERFLOW
-+ | SD_CTRL_BUFFERSTATUS_DATA_TIMEOUT
-+ )
-+ ) {
-+ DBG("Buffer status ERROR 0x%04x - inside check buffer\n", buffer_stat);
-+ DBG("detail0 error status 0x%04x\n", ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus0));
-+ DBG("detail1 error status 0x%04x\n", ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus1));
-+ cmd->error = MMC_ERR_FAILED;
-+ }
-+
-+ if(cmd->error == MMC_ERR_NONE) {
-+ switch (cmd->opcode) {
-+ case SD_APP_SET_BUS_WIDTH:
-+ if(cmd->arg == SD_BUS_WIDTH_4) {
-+ host->clock_for_sd = SD_CTRL_CARDCLOCKCONTROL_FOR_SD_CARD;
-+ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
-+ MEM_CARD_OPTION_REQUIRED
-+ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
-+ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
-+ | MEM_CARD_OPTION_DATA_XFR_WIDTH_4;
-+ } else {
-+ host->clock_for_sd = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
-+ MEM_CARD_OPTION_REQUIRED
-+ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
-+ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
-+ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1;
-+ }
-+ break;
-+ case MMC_SELECT_CARD:
-+ if((cmd->arg >> 16) == 0) {
-+ /* We have been deselected. */
-+ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
-+ MEM_CARD_OPTION_REQUIRED
-+ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
-+ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
-+ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1;
-+ }
-+ }
-+ }
-+
-+ /*
-+ * If there is data to handle we enable data IRQs here, and we will
-+ * ultimatley finish the request in the mmc_data_end_irq handler.
-+ */
-+ if(host->data && (cmd->error == MMC_ERR_NONE)){
-+ if(host->data->flags & MMC_DATA_READ) {
-+ /* Enable the read enable interrupt */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &=
-+ ~SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE;
-+ } else {
-+ /* Enable the write enable interrupt */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &=
-+ ~SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE;
-+ }
-+ } else {
-+ /* There's no data, or we encountered an error, so finish now. */
-+ mmc_finish_request(host);
-+ }
-+
-+ return;
-+}
-+
-+static void hwinit2_irqsafe(struct asic3_mmc_host *host);
-+
-+static irqreturn_t
-+mmc_irq(int irq, void *irq_desc)
-+{
-+ struct asic3_mmc_host *host;
-+ unsigned int breg, bmask, bstatus, creg, cmask, cstatus;
-+
-+ host = irq_desc;
-+
-+ /* asic3 bstatus has errors */
-+ bstatus = ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl);
-+ bmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer);
-+ cstatus = ASIC3_MMC_REG(host, SD_CTRL, CardStatus);
-+ cmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard);
-+ breg = bstatus & ~bmask & ~DONT_CARE_BUFFER_BITS;
-+ creg = cstatus & ~cmask & ~DONT_CARE_CARD_BITS;
-+
-+ if (!breg && !creg) {
-+ /* This occurs sometimes for no known reason. It doesn't hurt
-+ * anything, so I don't print it. */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &= ~breg;
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) &= ~creg;
-+ goto out;
-+ }
-+
-+ while (breg || creg) {
-+
-+ /* XXX TODO: Need to handle errors in breg here. */
-+
-+ /*
-+ * Card insert/remove. The mmc controlling code is stateless. That
-+ * is, it doesn't care if it was an insert or a remove. It treats
-+ * both the same.
-+ */
-+ /* XXX Asic3 has _3 versions of these status bits, too, for a second slot, perhaps? */
-+ if (creg & (SD_CTRL_CARDSTATUS_CARD_INSERTED_0 | SD_CTRL_CARDSTATUS_CARD_REMOVED_0)) {
-+ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &=
-+ ~(SD_CTRL_CARDSTATUS_CARD_REMOVED_0 | SD_CTRL_CARDSTATUS_CARD_INSERTED_0);
-+ if(creg & SD_CTRL_CARDSTATUS_CARD_INSERTED_0) {
-+ hwinit2_irqsafe(host);
-+ }
-+ mmc_detect_change(host->mmc,1);
-+ }
-+
-+ /* Command completion */
-+ if (creg & SD_CTRL_CARDSTATUS_RESPONSE_END) {
-+ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &=
-+ ~(SD_CTRL_CARDSTATUS_RESPONSE_END);
-+ mmc_cmd_irq(host, bstatus);
-+ }
-+
-+ /* Data transfer */
-+ if (breg & (SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE | SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE)) {
-+ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) &=
-+ ~(SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE | SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE);
-+ tasklet_schedule(&mmc_data_read_tasklet);
-+ }
-+
-+ /* Data transfer completion */
-+ if (creg & SD_CTRL_CARDSTATUS_RW_END) {
-+ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &= ~(SD_CTRL_CARDSTATUS_RW_END);
-+ mmc_data_end_irq(host);
-+ }
-+
-+ /* Check status - keep going until we've handled it all */
-+ bstatus = ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl);
-+ bmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer);
-+ cstatus = ASIC3_MMC_REG(host, SD_CTRL, CardStatus);
-+ cmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard);
-+ breg = bstatus & ~bmask & ~DONT_CARE_BUFFER_BITS;
-+ creg = cstatus & ~cmask & ~DONT_CARE_CARD_BITS;
-+ }
-+
-+out:
-+ /* Ensure all interrupt sources are cleared */
-+ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) = 0;
-+ return IRQ_HANDLED;
-+}
-+
-+static void
-+mmc_start_data(struct asic3_mmc_host *host, struct mmc_data *data)
-+{
-+ DBG("setup data transfer: blocksize %08x nr_blocks %d, page: %08x, offset: %08x\n", data->blksz,
-+ data->blocks, (int)data->sg->page, data->sg->offset);
-+
-+ host->sg_len = data->sg_len;
-+ host->sg_ptr = data->sg;
-+ host->sg_off = 0;
-+ host->data = data;
-+
-+ /* Set transfer length and blocksize */
-+ ASIC3_MMC_REG(host, SD_CTRL, TransferSectorCount) = data->blocks;
-+ ASIC3_MMC_REG(host, SD_CTRL, MemCardXferDataLen) = data->blksz;
-+}
-+
-+/* Process requests from the MMC layer */
-+static void
-+mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
-+{
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+
-+ WARN_ON(host->mrq != NULL);
-+
-+ host->mrq = mrq;
-+
-+ /* If we're performing a data request we need to setup some
-+ extra information */
-+ if(mrq->data) {
-+ mmc_start_data(host, mrq->data);
-+ }
-+
-+ mmc_start_command(host, mrq->cmd);
-+}
-+
-+/* Set MMC clock / power.
-+ * Note: This controller uses a simple divider scheme therefore it cannot run
-+ * a MMC card at full speed (20MHz). The max clock is 24MHz on SD, but as MMC
-+ * wont run that fast, it has to be clocked at 12MHz which is the next slowest
-+ * setting. This is likely not an issue because we are doing single 16-bit
-+ * writes for data I/O.
-+ */
-+static void
-+mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
-+{
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+ u32 clk = 0;
-+
-+ DBG("clock %uHz busmode %u powermode %u Vdd %u\n",
-+ ios->clock, ios->bus_mode, ios->power_mode, ios->vdd);
-+
-+ if (ios->clock) {
-+ clk = 0x80; /* slowest by default */
-+ if(ios->clock >= 24000000 / 256) clk >>= 1;
-+ if(ios->clock >= 24000000 / 128) clk >>= 1;
-+ if(ios->clock >= 24000000 / 64) clk >>= 1;
-+ if(ios->clock >= 24000000 / 32) clk >>= 1;
-+ if(ios->clock >= 24000000 / 16) clk >>= 1;
-+ if(ios->clock >= 24000000 / 8) clk >>= 1;
-+ if(ios->clock >= 24000000 / 4) clk >>= 1;
-+ if(ios->clock >= 24000000 / 2) clk >>= 1;
-+ if(ios->clock >= 24000000 / 1) clk >>= 1;
-+ if(clk == 0) { /* For fastest speed we disable the divider. */
-+ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 0;
-+ } else {
-+ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 1;
-+ }
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) =
-+ host->clock_for_sd
-+ | SD_CTRL_CARDCLOCKCONTROL_ENABLE_CLOCK
-+ | clk;
-+ msleep(10);
-+ } else {
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
-+ }
-+
-+ switch (ios->power_mode) {
-+ case MMC_POWER_OFF:
-+ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = 0;
-+ msleep(1);
-+ break;
-+ case MMC_POWER_UP:
-+ break;
-+ case MMC_POWER_ON:
-+ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = SD_CONFIG_POWER1_PC_33V;
-+ msleep(20);
-+ break;
-+ }
-+}
-+
-+static int
-+mmc_get_ro(struct mmc_host *mmc)
-+{
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+
-+ /* Call custom handler for RO status */
-+ if(host->hwconfig->mmc_get_ro) {
-+ /* Special case for cards w/o WP lock (like miniSD) */
-+ if (host->hwconfig->mmc_get_ro == (void*)-1) {
-+ return 0;
-+ } else {
-+ struct platform_device *pdev = to_platform_device(mmc_dev(mmc));
-+ return host->hwconfig->mmc_get_ro(pdev);
-+ }
-+ }
-+
-+ /* WRITE_PROTECT is active low */
-+ return (ASIC3_MMC_REG(host, SD_CTRL, CardStatus) & SD_CTRL_CARDSTATUS_WRITE_PROTECT)?0:1;
-+}
-+
-+static struct mmc_host_ops mmc_ops = {
-+ .request = mmc_request,
-+ .set_ios = mmc_set_ios,
-+ .get_ro = mmc_get_ro,
-+};
-+
-+static void
-+hwinit2_irqsafe(struct asic3_mmc_host *host)
-+{
-+ ASIC3_MMC_REG(host, SD_CONFIG, Addr1) = 0x0000;
-+ ASIC3_MMC_REG(host, SD_CONFIG, Addr0) = 0x0800;
-+
-+ ASIC3_MMC_REG(host, SD_CONFIG, ClkStop) = SD_CONFIG_CLKSTOP_ENABLE_ALL;
-+ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_CardDetect) = 2;
-+ ASIC3_MMC_REG(host, SD_CONFIG, Command) = SD_CONFIG_COMMAND_MAE;
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, SoftwareReset) = 0; /* reset on */
-+ mdelay(2);
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, SoftwareReset) = 1; /* reset off */
-+ mdelay(2);
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
-+ MEM_CARD_OPTION_REQUIRED
-+ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
-+ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
-+ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1
-+ ;
-+ host->clock_for_sd = 0;
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus0) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus1) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = 0;
-+
-+ ASIC3_MMC_REG(host, SDIO_CTRL, ClocknWaitCtrl) = 0x100;
-+ /* *((unsigned short *)(((char *)host->ctl_base) + 0x938)) = 0x100; */
-+
-+ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
-+
-+ mdelay(1);
-+
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
-+ SD_CTRL_INTMASKCARD_RESPONSE_END
-+ | SD_CTRL_INTMASKCARD_RW_END
-+ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0
-+ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0
-+#if 0
-+ | SD_CTRL_INTMASKCARD_CARD_REMOVED_3
-+ | SD_CTRL_INTMASKCARD_CARD_INSERTED_3
-+#endif
-+ )
-+ ; /* check */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) = 0xffff; /* IRQs off */
-+
-+ /*
-+ * ASIC3_MMC_REG(host, SD_CTRL, TransactionCtrl) = SD_CTRL_TRANSACTIONCONTROL_SET;
-+ * Wince has 0x1000
-+ */
-+ /* ASIC3_MMC_REG(host, SD_CTRL, TransactionCtrl) = 0x1000; */
-+
-+
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SDPWR, ASIC3_SDHWCTRL_SDPWR); /* turn on power at controller(?) */
-+
-+}
-+
-+static void
-+hwinit(struct asic3_mmc_host *host, struct platform_device *pdev)
-+{
-+ /* Call custom handler for enabling clock (if needed) */
-+ if(host->hwconfig->set_mmc_clock)
-+ host->hwconfig->set_mmc_clock(pdev, MMC_CLOCK_ENABLED);
-+
-+ /* Not sure if it must be done bit by bit, but leaving as-is */
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_LEVCD, ASIC3_SDHWCTRL_LEVCD);
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_LEVWP, ASIC3_SDHWCTRL_LEVWP);
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, 0);
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_PCLR, 0);
-+
-+ asic3_set_clock_cdex (host->asic3_dev,
-+ CLOCK_CDEX_EX1 | CLOCK_CDEX_EX0, CLOCK_CDEX_EX1 | CLOCK_CDEX_EX0);
-+ msleep(1);
-+
-+ asic3_set_clock_sel (host->asic3_dev,
-+ CLOCK_SEL_SD_HCLK_SEL | CLOCK_SEL_SD_BCLK_SEL,
-+ CLOCK_SEL_SD_HCLK_SEL | 0); /* ? */
-+
-+ asic3_set_clock_cdex (host->asic3_dev,
-+ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS,
-+ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS);
-+ msleep(1);
-+
-+ asic3_set_extcf_select(host->asic3_dev, ASIC3_EXTCF_SD_MEM_ENABLE, ASIC3_EXTCF_SD_MEM_ENABLE);
-+
-+ /* Long Delay */
-+ if( !machine_is_h4700())
-+ msleep(500);
-+
-+ hwinit2_irqsafe(host);
-+}
-+
-+#ifdef CONFIG_PM
-+static int
-+mmc_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct mmc_host *mmc = platform_get_drvdata(pdev);
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+ int ret;
-+
-+ ret = mmc_suspend_host(mmc, state);
-+
-+ if (ret) {
-+ printk(KERN_ERR DRIVER_NAME ": Could not suspend MMC host, hardware not suspended");
-+ return ret;
-+ }
-+
-+ /* disable the card insert / remove interrupt while sleeping */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
-+ SD_CTRL_INTMASKCARD_RESPONSE_END
-+ | SD_CTRL_INTMASKCARD_RW_END);
-+
-+ /* disable clock */
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
-+ ASIC3_MMC_REG(host, SD_CONFIG, ClkStop) = 0;
-+
-+ /* power down */
-+ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = 0;
-+
-+ asic3_set_clock_cdex (host->asic3_dev,
-+ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS, 0);
-+
-+ /* disable core clock */
-+ if(host->hwconfig->set_mmc_clock)
-+ host->hwconfig->set_mmc_clock(pdev, MMC_CLOCK_DISABLED);
-+
-+ /* Put in suspend mode */
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, ASIC3_SDHWCTRL_SUSPEND);
-+ return 0;
-+}
-+
-+static int
-+mmc_resume(struct platform_device *pdev)
-+{
-+ struct mmc_host *mmc = platform_get_drvdata(pdev);
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+
-+ printk(KERN_INFO "%s: starting resume\n", DRIVER_NAME);
-+
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, 0);
-+ hwinit(host, pdev);
-+
-+ /* re-enable card remove / insert interrupt */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
-+ SD_CTRL_INTMASKCARD_RESPONSE_END
-+ | SD_CTRL_INTMASKCARD_RW_END
-+ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0
-+ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0 );
-+
-+ mmc_resume_host(mmc);
-+
-+ printk(KERN_INFO "%s: finished resume\n", DRIVER_NAME);
-+ return 0;
-+}
-+#endif
-+
-+static int
-+mmc_probe(struct platform_device *pdev)
-+{
-+ struct mmc_host *mmc;
-+ struct asic3_mmc_host *host = NULL;
-+ int retval = 0;
-+ struct tmio_mmc_hwconfig *mmc_config = (struct tmio_mmc_hwconfig *)pdev->dev.platform_data;
-+
-+ /* bus_shift is mandatory */
-+ if (!mmc_config) {
-+ printk(KERN_ERR DRIVER_NAME ": Invalid configuration\n");
-+ return -EINVAL;
-+ }
-+
-+ mmc = mmc_alloc_host(sizeof(struct asic3_mmc_host) + 128, &pdev->dev);
-+ if (!mmc) {
-+ retval = -ENOMEM;
-+ goto exceptional_return;
-+ }
-+
-+ host = mmc_priv(mmc);
-+ host->mmc = mmc;
-+ platform_set_drvdata(pdev, mmc);
-+
-+ host->ctl_base = 0;
-+ host->hwconfig = mmc_config;
-+ host->bus_shift = mmc_config->address_shift;
-+ host->asic3_dev = pdev->dev.parent;
-+ host->clock_for_sd = 0;
-+
-+ tasklet_init(&mmc_data_read_tasklet, mmc_data_transfer, (unsigned long)host);
-+
-+ host->ctl_base = ioremap_nocache ((unsigned long)pdev->resource[0].start, pdev->resource[0].end - pdev->resource[0].start);
-+ if(!host->ctl_base){
-+ printk(KERN_ERR DRIVER_NAME ": Could not map ASIC3 SD controller\n");
-+ retval = -ENODEV;
-+ goto exceptional_return;
-+ }
-+
-+ printk(DRIVER_NAME ": ASIC3 MMC/SD Driver, controller at 0x%lx\n", (unsigned long)pdev->resource[0].start);
-+
-+ mmc->ops = &mmc_ops;
-+ mmc->caps = MMC_CAP_4_BIT_DATA;
-+ mmc->f_min = 46875; /* ARIC: not sure what these should be */
-+ mmc->f_max = 24000000; /* ARIC: not sure what these should be */
-+ mmc->ocr_avail = MMC_VDD_32_33;
-+
-+ hwinit(host, pdev);
-+
-+
-+ host->irq = pdev->resource[1].start;
-+
-+ retval = request_irq(host->irq, mmc_irq, 0, DRIVER_NAME, host);
-+ if(retval) {
-+ printk(KERN_ERR DRIVER_NAME ": Unable to get interrupt\n");
-+ retval = -ENODEV;
-+ goto exceptional_return;
-+ }
-+ set_irq_type(host->irq, IRQT_FALLING);
-+
-+ mmc_add_host(mmc);
-+
-+#ifdef CONFIG_PM
-+ // resume_timer.function = resume_timer_callback;
-+ // resume_timer.data = 0;
-+ // init_timer(&resume_timer);
-+#endif
-+
-+ return 0;
-+
-+exceptional_return:
-+ if (mmc) {
-+ mmc_free_host(mmc);
-+ }
-+ if(host && host->ctl_base) iounmap(host->ctl_base);
-+ return retval;
-+}
-+
-+static int
-+mmc_remove(struct platform_device *pdev)
-+{
-+ struct mmc_host *mmc = platform_get_drvdata(pdev);
-+
-+ platform_set_drvdata(pdev, NULL);
-+
-+ if (mmc) {
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+ mmc_remove_host(mmc);
-+ free_irq(host->irq, host);
-+ /* FIXME - we might want to consider stopping the chip here... */
-+ iounmap(host->ctl_base);
-+ mmc_free_host(mmc); /* FIXME - why does this call hang? */
-+ }
-+ return 0;
-+}
-+
-+/* ------------------- device registration ----------------------- */
-+
-+static struct platform_driver mmc_asic3_driver = {
-+ .driver = {
-+ .name = DRIVER_NAME,
-+ },
-+ .probe = mmc_probe,
-+ .remove = mmc_remove,
-+#ifdef CONFIG_PM
-+ .suspend = mmc_suspend,
-+ .resume = mmc_resume,
-+#endif
-+};
-+
-+static int __init mmc_init(void)
-+{
-+ return platform_driver_register(&mmc_asic3_driver);
-+}
-+
-+static void __exit mmc_exit(void)
-+{
-+ platform_driver_unregister(&mmc_asic3_driver);
-+}
-+
-+late_initcall(mmc_init);
-+module_exit(mmc_exit);
-+
-+MODULE_DESCRIPTION("HTC ASIC3 SD/MMC driver");
-+MODULE_AUTHOR("Aric Blumer, SDG Systems, LLC");
-+MODULE_LICENSE("GPL");
-+
-Index: linux-2.6.22/drivers/mmc/host/asic3_mmc.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/mmc/host/asic3_mmc.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,25 @@
-+#ifndef __ASIC3_MMC_H
-+#define __ASIC3_MMC_H
-+
-+#define DRIVER_NAME "asic3_mmc"
-+
-+#ifdef CONFIG_MMC_DEBUG
-+#define DBG(x...) printk(DRIVER_NAME ": " x)
-+#else
-+#define DBG(x...) do { } while (0)
-+#endif
-+
-+/* Response types */
-+#define APP_CMD 0x0040
-+
-+#define SD_CONFIG_CLKSTOP_ENABLE_ALL 0x1f
-+
-+#define DONT_CARE_CARD_BITS ( \
-+ SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_3 \
-+ | SD_CTRL_INTMASKCARD_WRITE_PROTECT \
-+ | SD_CTRL_INTMASKCARD_UNK6 \
-+ | SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_0 \
-+ )
-+#define DONT_CARE_BUFFER_BITS ( SD_CTRL_INTMASKBUFFER_UNK7 | SD_CTRL_INTMASKBUFFER_CMD_BUSY )
-+
-+#endif // __ASIC3_MMC_H
-Index: linux-2.6.22/drivers/input/keyboard/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/input/keyboard/Makefile 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/input/keyboard/Makefile 2007-08-23 13:09:22.000000000 +0200
-@@ -21,4 +21,4 @@
- obj-$(CONFIG_KEYBOARD_PXA27x) += pxa27x_keyboard.o
- obj-$(CONFIG_KEYBOARD_AAED2000) += aaed2000_kbd.o
- obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o
--
-+obj-$(CONFIG_KEYBOARD_ASIC3) += asic3_keys.o
-Index: linux-2.6.22/drivers/input/keyboard/asic3_keys.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/input/keyboard/asic3_keys.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,131 @@
-+/*
-+ * Generic buttons driver for ASIC3 SoC.
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * Copyright (C) 2003 Joshua Wise
-+ * Copyright (C) 2005 Pawel Kolodziejski
-+ * Copyright (C) 2006 Paul Sokolovsky
-+ *
-+ */
-+
-+#include <linux/input.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/interrupt.h>
-+#include <linux/platform_device.h>
-+#include <linux/irq.h>
-+#include <linux/soc/asic3_base.h>
-+#include <asm/mach/arch.h>
-+#include <asm/mach/map.h>
-+#include <asm/arch/irqs.h>
-+#include <asm/hardware.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <asm/hardware/asic3_keys.h>
-+
-+static irqreturn_t asic3_keys_asic_handle(int irq, void *data)
-+{
-+ struct asic3_keys_platform_data *pdata = data;
-+ int i, base_irq;
-+
-+ base_irq = asic3_irq_base(pdata->asic3_dev);
-+ for (i = 0; i < pdata->nbuttons; i++) {
-+ struct asic3_keys_button *b = &pdata->buttons[i];
-+ if ((base_irq + b->gpio) == irq) {
-+ int state = !!asic3_gpio_get_value(pdata->asic3_dev, b->gpio);
-+
-+ if (pdata->buttons[i].type == EV_SW)
-+ input_report_switch(pdata->input, pdata->buttons[i].keycode, state ^ b->active_low);
-+ else
-+ input_report_key(pdata->input, b->keycode, state ^ b->active_low);
-+ input_sync(pdata->input);
-+ }
-+ }
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static int __devinit asic3_keys_probe(struct platform_device *pdev)
-+{
-+ struct asic3_keys_platform_data *pdata = pdev->dev.platform_data;
-+ int i, base_irq;
-+ int j, ret;
-+
-+ pdata->input = input_allocate_device();
-+
-+ base_irq = asic3_irq_base(pdata->asic3_dev);
-+
-+ for (i = 0; i < pdata->nbuttons; i++) {
-+ struct asic3_keys_button *b = &pdata->buttons[i];
-+ set_bit(b->keycode, pdata->input->keybit);
-+ ret=request_irq(base_irq + b->gpio, asic3_keys_asic_handle, SA_SAMPLE_RANDOM, b->desc, pdata);
-+ if (ret)
-+ {
-+ printk(KERN_NOTICE "Failed to allocate asic3_keys irq=%d.\n",b->gpio);
-+
-+ for(j=0; j<i ; j++)
-+ free_irq(base_irq + pdata->buttons[i].gpio, NULL);
-+
-+ input_unregister_device (pdata->input);
-+
-+ return -ENODEV;
-+ }
-+
-+ set_irq_type(base_irq + b->gpio, IRQT_BOTHEDGE);
-+ if (pdata->buttons[i].type == EV_SW) {
-+ pdata->input->evbit[0] |= BIT(EV_SW);
-+ set_bit(b->keycode, pdata->input->swbit);
-+ } else {
-+ pdata->input->evbit[0] |= BIT(EV_KEY);
-+ set_bit(b->keycode, pdata->input->keybit);
-+ }
-+ }
-+
-+ pdata->input->name = pdev->name;
-+ input_register_device(pdata->input);
-+
-+ return 0;
-+}
-+
-+static int __devexit asic3_keys_remove(struct platform_device *pdev)
-+{
-+ struct asic3_keys_platform_data *pdata = pdev->dev.platform_data;
-+ int i, base_irq;
-+
-+ base_irq = asic3_irq_base(pdata->asic3_dev);
-+ for (i = 0; i < pdata->nbuttons; i++) {
-+ free_irq(base_irq + pdata->buttons[i].gpio, NULL);
-+ }
-+
-+ input_unregister_device(pdata->input);
-+
-+ return 0;
-+}
-+
-+
-+static struct platform_driver asic3_keys_driver = {
-+ .probe = asic3_keys_probe,
-+ .remove = __devexit_p(asic3_keys_remove),
-+ .driver = {
-+ .name = "asic3-keys",
-+ },
-+};
-+
-+static int __init asic3_keys_init(void)
-+{
-+ return platform_driver_register(&asic3_keys_driver);
-+}
-+
-+static void __exit asic3_keys_exit(void)
-+{
-+ platform_driver_unregister(&asic3_keys_driver);
-+}
-+
-+module_init(asic3_keys_init);
-+module_exit(asic3_keys_exit);
-+
-+MODULE_AUTHOR("Joshua Wise, Pawel Kolodziejski, Paul Sokolovsky");
-+MODULE_DESCRIPTION("Buttons driver for HTC ASIC3 SoC");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/include/asm-arm/arch-pxa/irqs.h
-===================================================================
---- linux-2.6.22.orig/include/asm-arm/arch-pxa/irqs.h 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/include/asm-arm/arch-pxa/irqs.h 2007-08-23 13:09:22.000000000 +0200
-@@ -178,6 +178,8 @@
- defined(CONFIG_MACH_LOGICPD_PXA270) || \
- defined(CONFIG_MACH_MAINSTONE)
- #define NR_IRQS (IRQ_BOARD_END)
-+#elif defined(CONFIG_MACH_HTCUNIVERSAL)
-+#define NR_IRQS (IRQ_BOARD_START + 96)
- #else
- #define NR_IRQS (IRQ_BOARD_START)
- #endif
-Index: linux-2.6.22/include/linux/ioport.h
-===================================================================
---- linux-2.6.22.orig/include/linux/ioport.h 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/include/linux/ioport.h 2007-08-23 13:09:22.000000000 +0200
-@@ -56,6 +56,7 @@
- #define IORESOURCE_IRQ_HIGHLEVEL (1<<2)
- #define IORESOURCE_IRQ_LOWLEVEL (1<<3)
- #define IORESOURCE_IRQ_SHAREABLE (1<<4)
-+#define IORESOURCE_IRQ_SOC_SUBDEVICE (1<<5)
-
- /* ISA PnP DMA specific bits (IORESOURCE_BITS) */
- #define IORESOURCE_DMA_TYPE_MASK (3<<0)
-Index: linux-2.6.22/drivers/video/backlight/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/video/backlight/Kconfig 2007-08-23 13:09:19.000000000 +0200
-+++ linux-2.6.22/drivers/video/backlight/Kconfig 2007-08-23 13:09:22.000000000 +0200
-@@ -34,7 +34,7 @@
-
- config BACKLIGHT_CORGI
- tristate "Sharp Corgi Backlight Driver (SL Series)"
-- depends on BACKLIGHT_CLASS_DEVICE && PXA_SHARPSL
-+ depends on BACKLIGHT_CLASS_DEVICE
- default y
- help
- If you have a Sharp Zaurus SL-C7xx, SL-Cxx00 or SL-6000x say y to enable the
-Index: linux-2.6.22/drivers/video/backlight/corgi_bl.c
-===================================================================
---- linux-2.6.22.orig/drivers/video/backlight/corgi_bl.c 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/video/backlight/corgi_bl.c 2007-08-23 13:09:22.000000000 +0200
-@@ -24,7 +24,7 @@
- static int corgibl_intensity;
- static struct backlight_properties corgibl_data;
- static struct backlight_device *corgi_backlight_device;
--static struct corgibl_machinfo *bl_machinfo;
-+static struct generic_bl_info *bl_machinfo;
-
- static unsigned long corgibl_flags;
- #define CORGIBL_SUSPENDED 0x01
-@@ -107,7 +107,7 @@
-
- static int corgibl_probe(struct platform_device *pdev)
- {
-- struct corgibl_machinfo *machinfo = pdev->dev.platform_data;
-+ struct generic_bl_info *machinfo = pdev->dev.platform_data;
-
- bl_machinfo = machinfo;
- if (!machinfo->limit_mask)
-Index: linux-2.6.22/arch/arm/mach-pxa/corgi.c
-===================================================================
---- linux-2.6.22.orig/arch/arm/mach-pxa/corgi.c 2007-08-23 13:09:20.000000000 +0200
-+++ linux-2.6.22/arch/arm/mach-pxa/corgi.c 2007-08-23 13:09:22.000000000 +0200
-@@ -20,6 +20,7 @@
- #include <linux/interrupt.h>
- #include <linux/mmc/host.h>
- #include <linux/pm.h>
-+#include <linux/backlight.h>
-
- #include <asm/setup.h>
- #include <asm/memory.h>
-@@ -142,7 +143,7 @@
- /*
- * Corgi Backlight Device
- */
--static struct corgibl_machinfo corgi_bl_machinfo = {
-+static struct generic_bl_info corgi_bl_machinfo = {
- .max_intensity = 0x2f,
- .default_intensity = 0x1f,
- .limit_mask = 0x0b,
-Index: linux-2.6.22/arch/arm/mach-pxa/spitz.c
-===================================================================
---- linux-2.6.22.orig/arch/arm/mach-pxa/spitz.c 2007-08-23 13:09:20.000000000 +0200
-+++ linux-2.6.22/arch/arm/mach-pxa/spitz.c 2007-08-23 13:09:22.000000000 +0200
-@@ -221,7 +221,7 @@
- /*
- * Spitz Backlight Device
- */
--static struct corgibl_machinfo spitz_bl_machinfo = {
-+static struct generic_bl_info spitz_bl_machinfo = {
- .default_intensity = 0x1f,
- .limit_mask = 0x0b,
- .max_intensity = 0x2f,
-Index: linux-2.6.22/arch/arm/mach-pxa/generic.c
-===================================================================
---- linux-2.6.22.orig/arch/arm/mach-pxa/generic.c 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/arch/arm/mach-pxa/generic.c 2007-08-23 13:09:22.000000000 +0200
-@@ -345,6 +345,18 @@
- .id = 3,
- };
-
-+void __init pxa_set_ffuart_info(struct platform_pxa_serial_funcs *info)
-+{
-+ ffuart_device.dev.platform_data = info;
-+}
-+EXPORT_SYMBOL(pxa_set_ffuart_info);
-+
-+void __init pxa_set_btuart_info(struct platform_pxa_serial_funcs *info)
-+{
-+ btuart_device.dev.platform_data = info;
-+}
-+EXPORT_SYMBOL(pxa_set_btuart_info);
-+
- static struct resource i2c_resources[] = {
- {
- .start = 0x40301680,
-Index: linux-2.6.22/drivers/w1/slaves/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/w1/slaves/Kconfig 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/w1/slaves/Kconfig 2007-08-23 13:09:22.000000000 +0200
-@@ -35,4 +35,15 @@
- Each block has 30 bytes of data and a two byte CRC16.
- Full block writes are only allowed if the CRC is valid.
-
-+config W1_SLAVE_DS2760
-+ tristate "Dallas 2760 battery monitor chip (HP iPAQ & others)"
-+ depends on W1
-+ help
-+ If you enable this you will have the DS2760 battery monitor
-+ chip support.
-+ The battery monitor chip is used in many batteries/devices
-+ as the one who is responsible for charging/discharging/monitoring
-+ Li+ batteries.
-+ If you are unsure, say N.
-+
- endmenu
-Index: linux-2.6.22/drivers/w1/slaves/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/w1/slaves/Makefile 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/w1/slaves/Makefile 2007-08-23 13:09:22.000000000 +0200
-@@ -5,4 +5,4 @@
- obj-$(CONFIG_W1_SLAVE_THERM) += w1_therm.o
- obj-$(CONFIG_W1_SLAVE_SMEM) += w1_smem.o
- obj-$(CONFIG_W1_SLAVE_DS2433) += w1_ds2433.o
--
-+obj-$(CONFIG_W1_SLAVE_DS2760) += w1_ds2760.o
-Index: linux-2.6.22/drivers/w1/w1_family.h
-===================================================================
---- linux-2.6.22.orig/drivers/w1/w1_family.h 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/w1/w1_family.h 2007-08-23 13:09:22.000000000 +0200
-@@ -33,6 +33,7 @@
- #define W1_THERM_DS1822 0x22
- #define W1_EEPROM_DS2433 0x23
- #define W1_THERM_DS18B20 0x28
-+#define W1_FAMILY_DS2760 0x30
-
- #define MAXNAMELEN 32
-
-Index: linux-2.6.22/include/asm-arm/arch-pxa/serial.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/serial.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,78 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/serial.h
-+ *
-+ * Author: Nicolas Pitre
-+ * Copyright: (C) 2001 MontaVista Software Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <asm/arch/pxa-regs.h>
-+
-+#define BAUD_BASE 921600
-+
-+/* Standard COM flags */
-+#define STD_COM_FLAGS (ASYNC_SKIP_TEST)
-+
-+#define STD_SERIAL_PORT_DEFNS \
-+ { \
-+ type: PORT_PXA, \
-+ xmit_fifo_size: 64, \
-+ baud_base: BAUD_BASE, \
-+ iomem_base: &FFUART, \
-+ iomem_reg_shift: 2, \
-+ io_type: SERIAL_IO_MEM, \
-+ irq: IRQ_FFUART, \
-+ flags: STD_COM_FLAGS, \
-+ }, { \
-+ type: PORT_PXA, \
-+ xmit_fifo_size: 64, \
-+ baud_base: BAUD_BASE, \
-+ iomem_base: &STUART, \
-+ iomem_reg_shift: 2, \
-+ io_type: SERIAL_IO_MEM, \
-+ irq: IRQ_STUART, \
-+ flags: STD_COM_FLAGS, \
-+ }, { \
-+ type: PORT_PXA, \
-+ xmit_fifo_size: 64, \
-+ baud_base: BAUD_BASE, \
-+ iomem_base: &BTUART, \
-+ iomem_reg_shift: 2, \
-+ io_type: SERIAL_IO_MEM, \
-+ irq: IRQ_BTUART, \
-+ flags: STD_COM_FLAGS, \
-+ }
-+
-+#define EXTRA_SERIAL_PORT_DEFNS
-+
-+struct platform_pxa_serial_funcs {
-+
-+ /* Initialize whatever is connected to this serial port. */
-+ void (*configure)(int state);
-+#define PXA_UART_CFG_PRE_STARTUP 0
-+#define PXA_UART_CFG_POST_STARTUP 1
-+#define PXA_UART_CFG_PRE_SHUTDOWN 2
-+#define PXA_UART_CFG_POST_SHUTDOWN 3
-+
-+ /* Enable or disable the individual transmitter/receiver submodules.
-+ * On transceivers without echo cancellation (e.g. SIR)
-+ * transmitter always has priority; e.g. if both bits are set,
-+ * only the transmitter is enabled. */
-+ void (*set_txrx)(int txrx);
-+#define PXA_SERIAL_TX 1
-+#define PXA_SERIAL_RX 2
-+
-+ /* Get the current state of tx/rx. */
-+ int (*get_txrx)(void);
-+
-+ int (*suspend)(struct platform_device *dev, pm_message_t state);
-+ int (*resume)(struct platform_device *dev);
-+};
-+
-+void pxa_set_ffuart_info(struct platform_pxa_serial_funcs *ffuart_funcs);
-+void pxa_set_btuart_info(struct platform_pxa_serial_funcs *btuart_funcs);
-+void pxa_set_stuart_info(struct platform_pxa_serial_funcs *stuart_funcs);
-+void pxa_set_hwuart_info(struct platform_pxa_serial_funcs *hwuart_funcs);
-Index: linux-2.6.22/drivers/w1/slaves/w1_ds2760.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/w1/slaves/w1_ds2760.c 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,213 @@
-+/*
-+ * 1-Wire implementation for the ds2760 chip
-+ *
-+ * Copyright (c) 2004-2005, Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/device.h>
-+#include <linux/types.h>
-+#include <linux/platform_device.h>
-+#include <linux/mutex.h>
-+#include <linux/idr.h>
-+
-+#include "../w1.h"
-+#include "../w1_int.h"
-+#include "../w1_family.h"
-+#include "w1_ds2760.h"
-+
-+static int w1_ds2760_io(struct device *dev, char *buf, int addr, size_t count,
-+ int io)
-+{
-+ struct w1_slave *sl = container_of(dev, struct w1_slave, dev);
-+
-+ if (!dev)
-+ return 0;
-+
-+ mutex_lock(&sl->master->mutex);
-+
-+ if (addr > DS2760_DATA_SIZE || addr < 0) {
-+ count = 0;
-+ goto out;
-+ }
-+ if (addr + count > DS2760_DATA_SIZE)
-+ count = DS2760_DATA_SIZE - addr;
-+
-+ if (!w1_reset_select_slave(sl)) {
-+ if (!io) {
-+ w1_write_8(sl->master, W1_DS2760_READ_DATA);
-+ w1_write_8(sl->master, addr);
-+ count = w1_read_block(sl->master, buf, count);
-+ } else {
-+ w1_write_8(sl->master, W1_DS2760_WRITE_DATA);
-+ w1_write_8(sl->master, addr);
-+ w1_write_block(sl->master, buf, count);
-+ /* XXX w1_write_block returns void, not n_written */
-+ }
-+ }
-+
-+out:
-+ mutex_unlock(&sl->master->mutex);
-+
-+ return count;
-+}
-+
-+int w1_ds2760_read(struct device *dev, char *buf, int addr, size_t count)
-+{
-+ return w1_ds2760_io(dev, buf, addr, count, 0);
-+}
-+
-+int w1_ds2760_write(struct device *dev, char *buf, int addr, size_t count)
-+{
-+ return w1_ds2760_io(dev, buf, addr, count, 1);
-+}
-+
-+static ssize_t w1_ds2760_read_bin(struct kobject *kobj, char *buf, loff_t off,
-+ size_t count)
-+{
-+ struct device *dev = container_of(kobj, struct device, kobj);
-+ return w1_ds2760_read(dev, buf, off, count);
-+}
-+
-+static struct bin_attribute w1_ds2760_bin_attr = {
-+ .attr = {
-+ .name = "w1_slave",
-+ .mode = S_IRUGO,
-+ .owner = THIS_MODULE,
-+ },
-+ .size = DS2760_DATA_SIZE,
-+ .read = w1_ds2760_read_bin,
-+};
-+
-+static DEFINE_IDR(bat_idr);
-+static DEFINE_MUTEX(bat_idr_lock);
-+
-+static int new_bat_id(void)
-+{
-+ int ret;
-+
-+ while (1) {
-+ int id;
-+
-+ ret = idr_pre_get(&bat_idr, GFP_KERNEL);
-+ if (ret == 0)
-+ return -ENOMEM;
-+
-+ mutex_lock(&bat_idr_lock);
-+ ret = idr_get_new(&bat_idr, NULL, &id);
-+ mutex_unlock(&bat_idr_lock);
-+
-+ if (ret == 0) {
-+ ret = id & MAX_ID_MASK;
-+ break;
-+ }
-+ else if (ret == -EAGAIN)
-+ continue;
-+ else
-+ break;
-+ }
-+
-+ return ret;
-+}
-+
-+static void release_bat_id(int id)
-+{
-+ mutex_lock(&bat_idr_lock);
-+ idr_remove(&bat_idr, id);
-+ mutex_unlock(&bat_idr_lock);
-+
-+ return;
-+}
-+
-+static int w1_ds2760_add_slave(struct w1_slave *sl)
-+{
-+ int ret;
-+ int id;
-+ struct platform_device *pdev;
-+
-+ id = new_bat_id();
-+ if (id < 0) {
-+ ret = id;
-+ goto noid;
-+ }
-+
-+ pdev = platform_device_alloc("ds2760-battery", id);
-+ if (!pdev) {
-+ ret = -ENOMEM;
-+ goto pdev_alloc_failed;
-+ }
-+ pdev->dev.parent = &sl->dev;
-+
-+ ret = platform_device_add(pdev);
-+ if (ret)
-+ goto pdev_add_failed;
-+
-+ ret = sysfs_create_bin_file(&sl->dev.kobj, &w1_ds2760_bin_attr);
-+ if (ret)
-+ goto bin_attr_failed;
-+
-+ dev_set_drvdata(&sl->dev, pdev);
-+
-+ goto success;
-+
-+bin_attr_failed:
-+pdev_add_failed:
-+ platform_device_unregister(pdev);
-+pdev_alloc_failed:
-+ release_bat_id(id);
-+noid:
-+success:
-+ return ret;
-+}
-+
-+static void w1_ds2760_remove_slave(struct w1_slave *sl)
-+{
-+ struct platform_device *pdev = dev_get_drvdata(&sl->dev);
-+ int id = pdev->id;
-+
-+ platform_device_unregister(pdev);
-+ release_bat_id(id);
-+ sysfs_remove_bin_file(&sl->dev.kobj, &w1_ds2760_bin_attr);
-+
-+ return;
-+}
-+
-+static struct w1_family_ops w1_ds2760_fops = {
-+ .add_slave = w1_ds2760_add_slave,
-+ .remove_slave = w1_ds2760_remove_slave,
-+};
-+
-+static struct w1_family w1_ds2760_family = {
-+ .fid = W1_FAMILY_DS2760,
-+ .fops = &w1_ds2760_fops,
-+};
-+
-+static int __init w1_ds2760_init(void)
-+{
-+ printk(KERN_INFO "1-Wire driver for the DS2760 battery monitor "
-+ " chip - (c) 2004-2005, Szabolcs Gyurko\n");
-+ idr_init(&bat_idr);
-+ return w1_register_family(&w1_ds2760_family);
-+}
-+
-+static void __exit w1_ds2760_exit(void)
-+{
-+ w1_unregister_family(&w1_ds2760_family);
-+ idr_destroy(&bat_idr);
-+}
-+
-+EXPORT_SYMBOL(w1_ds2760_read);
-+EXPORT_SYMBOL(w1_ds2760_write);
-+
-+module_init(w1_ds2760_init);
-+module_exit(w1_ds2760_exit);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>");
-+MODULE_DESCRIPTION("1-wire Driver Dallas 2760 battery monitor chip");
-Index: linux-2.6.22/drivers/w1/slaves/w1_ds2760.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/w1/slaves/w1_ds2760.h 2007-08-23 13:09:22.000000000 +0200
-@@ -0,0 +1,50 @@
-+/*
-+ * 1-Wire implementation for the ds2760 chip
-+ *
-+ * Copyright (c) 2004-2005, Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ */
-+
-+#ifndef __w1_ds2760_h__
-+#define __w1_ds2760_h__
-+
-+/* Known commands to the DS2760 chip */
-+#define W1_DS2760_SWAP 0xAA
-+#define W1_DS2760_READ_DATA 0x69
-+#define W1_DS2760_WRITE_DATA 0x6C
-+#define W1_DS2760_COPY_DATA 0x48
-+#define W1_DS2760_RECALL_DATA 0xB8
-+#define W1_DS2760_LOCK 0x6A
-+
-+/* Number of valid register addresses */
-+#define DS2760_DATA_SIZE 0x40
-+
-+#define DS2760_PROTECTION_REG 0x00
-+#define DS2760_STATUS_REG 0x01
-+#define DS2760_EEPROM_REG 0x07
-+#define DS2760_SPECIAL_FEATURE_REG 0x08
-+#define DS2760_VOLTAGE_MSB 0x0c
-+#define DS2760_VOLTAGE_LSB 0x0d
-+#define DS2760_CURRENT_MSB 0x0e
-+#define DS2760_CURRENT_LSB 0x0f
-+#define DS2760_CURRENT_ACCUM_MSB 0x10
-+#define DS2760_CURRENT_ACCUM_LSB 0x11
-+#define DS2760_TEMP_MSB 0x18
-+#define DS2760_TEMP_LSB 0x19
-+#define DS2760_EEPROM_BLOCK0 0x20
-+#define DS2760_ACTIVE_FULL 0x20
-+#define DS2760_EEPROM_BLOCK1 0x30
-+#define DS2760_RATED_CAPACITY 0x32
-+#define DS2760_CURRENT_OFFSET_BIAS 0x33
-+#define DS2760_ACTIVE_EMPTY 0x3b
-+
-+extern int w1_ds2760_read(struct device *dev, char *buf, int addr,
-+ size_t count);
-+extern int w1_ds2760_write(struct device *dev, char *buf, int addr,
-+ size_t count);
-+
-+#endif /* !__w1_ds2760_h__ */
-Index: linux-2.6.22/drivers/serial/pxa.c
-===================================================================
---- linux-2.6.22.orig/drivers/serial/pxa.c 2007-08-23 13:21:54.000000000 +0200
-+++ linux-2.6.22/drivers/serial/pxa.c 2007-08-23 13:22:54.000000000 +0200
-@@ -46,6 +46,7 @@
- #include <asm/io.h>
- #include <asm/hardware.h>
- #include <asm/irq.h>
-+#include <asm/arch/serial.h>
- #include <asm/arch/pxa-regs.h>
-
-
-@@ -59,6 +60,14 @@
- char *name;
- };
-
-+
-+#define IS_METHOD(dev, method) (dev && (dev)->platform_data && ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method)
-+#define METHOD_CALL(dev, method) \
-+ ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method()
-+#define SAFE_METHOD_CALL(dev, method, args...) \
-+ if (IS_METHOD(dev, method)) \
-+ ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method(args)
-+
- static inline unsigned int serial_in(struct uart_pxa_port *up, int offset)
- {
- offset <<= 2;
-@@ -346,6 +355,9 @@
- unsigned long flags;
- int retval;
-
-+ /* Perform platform-specific port initialization, if needed. */
-+ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_PRE_STARTUP);
-+
- if (port->line == 3) /* HWUART */
- up->mcr |= UART_MCR_AFE;
- else
-@@ -401,6 +413,12 @@
- (void) serial_in(up, UART_IIR);
- (void) serial_in(up, UART_MSR);
-
-+ /*
-+ * Perform platform-specific port initialization if needed
-+ */
-+ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_POST_STARTUP);
-+ SAFE_METHOD_CALL(port->dev, set_txrx, PXA_SERIAL_RX);
-+
- return 0;
- }
-
-@@ -409,6 +427,8 @@
- struct uart_pxa_port *up = (struct uart_pxa_port *)port;
- unsigned long flags;
-
-+ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_PRE_SHUTDOWN);
-+
- free_irq(up->port.irq, up);
-
- /*
-@@ -430,6 +450,8 @@
- UART_FCR_CLEAR_RCVR |
- UART_FCR_CLEAR_XMIT);
- serial_out(up, UART_FCR, 0);
-+
-+ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_POST_SHUTDOWN);
- }
-
- static void
diff --git a/packages/linux/linux-rp-2.6.22/pda-power.patch b/packages/linux/linux-rp-2.6.22/pda-power.patch
deleted file mode 100644
index face2f4ef2..0000000000
--- a/packages/linux/linux-rp-2.6.22/pda-power.patch
+++ /dev/null
@@ -1,3373 +0,0 @@
----
- arch/arm/Kconfig | 2
- drivers/Kconfig | 2
- drivers/Makefile | 1
- drivers/power/Kconfig | 70 +++++
- drivers/power/Makefile | 28 ++
- drivers/power/adc_battery.c | 278 +++++++++++++++++++++
- drivers/power/apm_power.c | 247 +++++++++++++++++++
- drivers/power/ds2760_battery.c | 475 +++++++++++++++++++++++++++++++++++++
- drivers/power/micro_battery.c | 257 ++++++++++++++++++++
- drivers/power/olpc_battery.c | 302 +++++++++++++++++++++++
- drivers/power/pda_power.c | 263 ++++++++++++++++++++
- drivers/power/pmu_battery.c | 215 ++++++++++++++++
- drivers/power/power_supply.h | 42 +++
- drivers/power/power_supply_core.c | 168 +++++++++++++
- drivers/power/power_supply_leds.c | 188 ++++++++++++++
- drivers/power/power_supply_sysfs.c | 289 ++++++++++++++++++++++
- drivers/power/simpad-battery.c | 242 ++++++++++++++++++
- include/linux/power_supply.h | 175 +++++++++++++
- 18 files changed, 3244 insertions(+)
-
-Index: linux-2.6.22/drivers/power/adc_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/adc_battery.c 2007-08-23 12:26:28.000000000 +0200
-@@ -0,0 +1,278 @@
-+/*
-+ * Copyright (c) 2007 Paul Sokolovsky
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ */
-+
-+//#define DEBUG
-+
-+#include <linux/module.h>
-+#include <linux/interrupt.h>
-+#include <linux/pm.h>
-+#include <linux/delay.h>
-+#include <linux/workqueue.h>
-+#include <linux/platform_device.h>
-+#include <linux/power_supply.h>
-+#include <linux/adc.h>
-+#include <linux/adc_battery.h>
-+
-+#include <asm/irq.h>
-+
-+#define PIN_NO_VOLT 0
-+#define PIN_NO_CURR 1
-+#define PIN_NO_TEMP 2
-+
-+struct battery_adc_priv {
-+ struct power_supply batt_cdev;
-+
-+ struct battery_adc_platform_data *pdata;
-+
-+ struct adc_request req;
-+ struct adc_sense pins[3];
-+ struct adc_sense last_good_pins[3];
-+
-+ struct workqueue_struct *wq;
-+ struct delayed_work work;
-+};
-+
-+/*
-+ * Battery properties
-+ */
-+
-+static int adc_battery_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ struct battery_adc_priv* drvdata = (struct battery_adc_priv*)psy;
-+ int voltage;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ val->intval = drvdata->pdata->charge_status;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.voltage_max_design;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.voltage_min_design;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.charge_full_design;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.charge_empty_design;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-+ val->intval = drvdata->last_good_pins[PIN_NO_VOLT].value * drvdata->pdata->voltage_mult;
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_NOW:
-+ val->intval = drvdata->last_good_pins[PIN_NO_CURR].value * drvdata->pdata->current_mult;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_NOW:
-+ /* We do calculations in mX, not uX, because todo it in uX we should use "long long"s,
-+ * which is a mess (need to use do_div) when you need divide operation). */
-+ voltage = drvdata->last_good_pins[PIN_NO_VOLT].value * drvdata->pdata->voltage_mult;
-+ val->intval = ((voltage/1000 - drvdata->pdata->battery_info.voltage_min_design/1000) *
-+ (drvdata->pdata->battery_info.charge_full_design/1000 -
-+ drvdata->pdata->battery_info.charge_empty_design/1000)) /
-+ (drvdata->pdata->battery_info.voltage_max_design/1000 -
-+ drvdata->pdata->battery_info.voltage_min_design/1000);
-+ val->intval *= 1000; /* convert final result to uX */
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = drvdata->last_good_pins[PIN_NO_TEMP].value * drvdata->pdata->temperature_mult / 1000;
-+ break;
-+ default:
-+ return -EINVAL;
-+ };
-+ return 0;
-+}
-+
-+/*
-+ * Driver body
-+ */
-+
-+static void adc_battery_query(struct battery_adc_priv *drvdata)
-+{
-+ struct battery_adc_platform_data *pdata = drvdata->pdata;
-+ int powered, charging;
-+
-+ adc_request_sample(&drvdata->req);
-+
-+ powered = power_supply_am_i_supplied(&drvdata->batt_cdev);
-+ charging = pdata->is_charging ? pdata->is_charging() : -1;
-+
-+ if (powered && charging)
-+ pdata->charge_status = POWER_SUPPLY_STATUS_CHARGING;
-+ else if (powered && !charging && charging != -1)
-+ pdata->charge_status = POWER_SUPPLY_STATUS_FULL;
-+ else
-+ pdata->charge_status = POWER_SUPPLY_STATUS_DISCHARGING;
-+
-+ /* Throw away invalid samples, this may happen soon after resume for example. */
-+ if (drvdata->pins[PIN_NO_VOLT].value > 0) {
-+ memcpy(drvdata->last_good_pins, drvdata->pins, sizeof(drvdata->pins));
-+#ifdef DEBUG
-+ printk("%d %d %d\n", drvdata->pins[PIN_NO_VOLT].value,
-+ drvdata->pins[PIN_NO_CURR].value,
-+ drvdata->pins[PIN_NO_TEMP].value);
-+#endif
-+ }
-+}
-+
-+static void adc_battery_charge_power_changed(struct power_supply *bat)
-+{
-+ struct battery_adc_priv *drvdata = (struct battery_adc_priv*)bat;
-+ cancel_delayed_work(&drvdata->work);
-+ queue_delayed_work(drvdata->wq, &drvdata->work, 0);
-+}
-+
-+static void adc_battery_work_func(struct work_struct *work)
-+{
-+ struct delayed_work *delayed_work = container_of(work, struct delayed_work, work);
-+ struct battery_adc_priv *drvdata = container_of(delayed_work, struct battery_adc_priv, work);
-+
-+ adc_battery_query(drvdata);
-+ power_supply_changed(&drvdata->batt_cdev);
-+
-+ queue_delayed_work(drvdata->wq, &drvdata->work, (5000 * HZ) / 1000);
-+}
-+
-+static int adc_battery_probe(struct platform_device *pdev)
-+{
-+ int retval;
-+ struct battery_adc_platform_data *pdata = pdev->dev.platform_data;
-+ struct battery_adc_priv *drvdata;
-+ int i, j;
-+ enum power_supply_property props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+ POWER_SUPPLY_PROP_CURRENT_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN,
-+ POWER_SUPPLY_PROP_TEMP,
-+ };
-+
-+ // Initialize ts data structure.
-+ drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
-+ if (!drvdata)
-+ return -ENOMEM;
-+
-+ drvdata->batt_cdev.name = pdata->battery_info.name;
-+ drvdata->batt_cdev.use_for_apm = pdata->battery_info.use_for_apm;
-+ drvdata->batt_cdev.num_properties = ARRAY_SIZE(props);
-+ drvdata->batt_cdev.get_property = adc_battery_get_property;
-+ drvdata->batt_cdev.external_power_changed =
-+ adc_battery_charge_power_changed;
-+
-+ if (!pdata->voltage_pin) {
-+ drvdata->batt_cdev.num_properties--;
-+ props[3] = -1;
-+ }
-+ if (!pdata->current_pin) {
-+ drvdata->batt_cdev.num_properties--;
-+ props[4] = -1;
-+ }
-+ if (!pdata->temperature_pin) {
-+ drvdata->batt_cdev.num_properties--;
-+ props[8] = -1;
-+ }
-+
-+ drvdata->batt_cdev.properties = kmalloc(
-+ sizeof(*drvdata->batt_cdev.properties) *
-+ drvdata->batt_cdev.num_properties, GFP_KERNEL);
-+ if (!drvdata->batt_cdev.properties)
-+ return -ENOMEM;
-+
-+ j = 0;
-+ for (i = 0; i < ARRAY_SIZE(props); i++) {
-+ if (props[i] == -1)
-+ continue;
-+ drvdata->batt_cdev.properties[j++] = props[i];
-+ }
-+
-+ retval = power_supply_register(&pdev->dev, &drvdata->batt_cdev);
-+ if (retval) {
-+ printk("adc-battery: Error registering battery classdev");
-+ return retval;
-+ }
-+
-+ drvdata->req.senses = drvdata->pins;
-+ drvdata->req.num_senses = ARRAY_SIZE(drvdata->pins);
-+ drvdata->pins[PIN_NO_VOLT].name = pdata->voltage_pin;
-+ drvdata->pins[PIN_NO_CURR].name = pdata->current_pin;
-+ drvdata->pins[PIN_NO_TEMP].name = pdata->temperature_pin;
-+
-+ adc_request_register(&drvdata->req);
-+
-+ /* Here we assume raw values in mV */
-+ if (!pdata->voltage_mult)
-+ pdata->voltage_mult = 1000;
-+ /* Here we assume raw values in mA */
-+ if (!pdata->current_mult)
-+ pdata->current_mult = 1000;
-+ /* Here we assume raw values in 1/10 C */
-+ if (!pdata->temperature_mult)
-+ pdata->temperature_mult = 1000;
-+
-+ drvdata->pdata = pdata;
-+ pdata->drvdata = drvdata; /* Seems ugly, we need better solution */
-+
-+ platform_set_drvdata(pdev, drvdata);
-+
-+ // Load initial values ASAP
-+ adc_battery_query(drvdata);
-+
-+ // Still schedule next sampling soon
-+ INIT_DELAYED_WORK(&drvdata->work, adc_battery_work_func);
-+ drvdata->wq = create_workqueue(pdev->dev.bus_id);
-+ if (!drvdata->wq)
-+ return -ESRCH;
-+
-+ queue_delayed_work(drvdata->wq, &drvdata->work, (5000 * HZ) / 1000);
-+
-+ return retval;
-+}
-+
-+static int adc_battery_remove(struct platform_device *pdev)
-+{
-+ struct battery_adc_priv *drvdata = platform_get_drvdata(pdev);
-+ cancel_delayed_work(&drvdata->work);
-+ destroy_workqueue(drvdata->wq);
-+ power_supply_unregister(&drvdata->batt_cdev);
-+ adc_request_unregister(&drvdata->req);
-+ kfree(drvdata->batt_cdev.properties);
-+ return 0;
-+}
-+
-+static struct platform_driver adc_battery_driver = {
-+ .driver = {
-+ .name = "adc-battery",
-+ },
-+ .probe = adc_battery_probe,
-+ .remove = adc_battery_remove,
-+};
-+
-+static int __init adc_battery_init(void)
-+{
-+ return platform_driver_register(&adc_battery_driver);
-+}
-+
-+static void __exit adc_battery_exit(void)
-+{
-+ platform_driver_unregister(&adc_battery_driver);
-+}
-+
-+module_init(adc_battery_init)
-+module_exit(adc_battery_exit)
-+
-+MODULE_AUTHOR("Paul Sokolovsky");
-+MODULE_DESCRIPTION("Battery driver for ADC device");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/drivers/power/apm_power.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/apm_power.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,247 @@
-+/*
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2007 Eugeny Boger <eugenyboger@dgap.mipt.ru>
-+ *
-+ * Author: Eugeny Boger <eugenyboger@dgap.mipt.ru>
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/power_supply.h>
-+#include <linux/apm-emulation.h>
-+
-+#define PSY_PROP(psy, prop, val) psy->get_property(psy, \
-+ POWER_SUPPLY_PROP_##prop, val)
-+
-+#define _MPSY_PROP(prop, val) main_battery->get_property(main_battery, \
-+ prop, val)
-+
-+#define MPSY_PROP(prop, val) _MPSY_PROP(POWER_SUPPLY_PROP_##prop, val)
-+
-+static struct power_supply *main_battery;
-+
-+static void find_main_battery(void)
-+{
-+ struct device *dev;
-+ struct power_supply *bat, *batm;
-+ union power_supply_propval full;
-+ int max_charge = 0;
-+
-+ main_battery = NULL;
-+ batm = NULL;
-+ list_for_each_entry(dev, &power_supply_class->devices, node) {
-+ bat = dev_get_drvdata(dev);
-+ /* If none of battery devices cantains 'use_for_apm' flag,
-+ choice one with maximum design charge */
-+ if (!PSY_PROP(bat, CHARGE_FULL_DESIGN, &full)) {
-+ if (full.intval > max_charge) {
-+ batm = bat;
-+ max_charge = full.intval;
-+ }
-+ }
-+
-+ if (bat->use_for_apm)
-+ main_battery = bat;
-+ }
-+ if (!main_battery)
-+ main_battery = batm;
-+
-+ return;
-+}
-+
-+static int calculate_time(int status)
-+{
-+ union power_supply_propval charge_full, charge_empty;
-+ union power_supply_propval charge, I;
-+
-+ if (MPSY_PROP(CHARGE_FULL, &charge_full)) {
-+ /* if battery can't report this property, use design value */
-+ if (MPSY_PROP(CHARGE_FULL_DESIGN, &charge_full))
-+ return -1;
-+ }
-+
-+ if (MPSY_PROP(CHARGE_EMPTY, &charge_empty)) {
-+ /* if battery can't report this property, use design value */
-+ if (MPSY_PROP(CHARGE_EMPTY_DESIGN, &charge_empty))
-+ charge_empty.intval = 0;
-+ }
-+
-+ if (MPSY_PROP(CHARGE_AVG, &charge)) {
-+ /* if battery can't report average value, use momentary */
-+ if (MPSY_PROP(CHARGE_NOW, &charge))
-+ return -1;
-+ }
-+
-+ if (MPSY_PROP(CURRENT_AVG, &I)) {
-+ /* if battery can't report average value, use momentary */
-+ if (MPSY_PROP(CURRENT_NOW, &I))
-+ return -1;
-+ }
-+
-+ if (I.intval == 0)
-+ return 0;
-+ else if (status == POWER_SUPPLY_STATUS_CHARGING)
-+ return ((charge.intval - charge_full.intval) * 60L) /
-+ I.intval;
-+ else
-+ return -((charge.intval - charge_empty.intval) * 60L) /
-+ I.intval;
-+}
-+
-+static int calculate_capacity(int using_charge)
-+{
-+ enum power_supply_property full_prop, empty_prop;
-+ enum power_supply_property full_design_prop, empty_design_prop;
-+ enum power_supply_property now_prop, avg_prop;
-+ union power_supply_propval empty, full, cur;
-+ int ret;
-+
-+ if (using_charge) {
-+ full_prop = POWER_SUPPLY_PROP_CHARGE_FULL;
-+ empty_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY;
-+ full_design_prop = POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN;
-+ empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN;
-+ now_prop = POWER_SUPPLY_PROP_CHARGE_NOW;
-+ avg_prop = POWER_SUPPLY_PROP_CHARGE_AVG;
-+ }
-+ else {
-+ full_prop = POWER_SUPPLY_PROP_ENERGY_FULL;
-+ empty_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY;
-+ full_design_prop = POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN;
-+ empty_design_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN;
-+ now_prop = POWER_SUPPLY_PROP_ENERGY_NOW;
-+ avg_prop = POWER_SUPPLY_PROP_ENERGY_AVG;
-+ }
-+
-+ if (_MPSY_PROP(full_prop, &full)) {
-+ /* if battery can't report this property, use design value */
-+ if (_MPSY_PROP(full_design_prop, &full))
-+ return -1;
-+ }
-+
-+ if (_MPSY_PROP(avg_prop, &cur)) {
-+ /* if battery can't report average value, use momentary */
-+ if (_MPSY_PROP(now_prop, &cur))
-+ return -1;
-+ }
-+
-+ if (_MPSY_PROP(empty_prop, &empty)) {
-+ /* if battery can't report this property, use design value */
-+ if (_MPSY_PROP(empty_design_prop, &empty))
-+ empty.intval = 0;
-+ }
-+
-+ if (full.intval - empty.intval)
-+ ret = ((cur.intval - empty.intval) * 100L) /
-+ (full.intval - empty.intval);
-+ else
-+ return -1;
-+
-+ if (ret > 100)
-+ return 100;
-+ else if (ret < 0)
-+ return 0;
-+
-+ return ret;
-+}
-+
-+static void apm_battery_apm_get_power_status(struct apm_power_info *info)
-+{
-+ union power_supply_propval status;
-+ union power_supply_propval capacity, time_to_full, time_to_empty;
-+
-+ down(&power_supply_class->sem);
-+ find_main_battery();
-+ if (!main_battery) {
-+ up(&power_supply_class->sem);
-+ return;
-+ }
-+
-+ /* status */
-+
-+ if (MPSY_PROP(STATUS, &status))
-+ status.intval = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ /* ac line status */
-+
-+ if ((status.intval == POWER_SUPPLY_STATUS_CHARGING) ||
-+ (status.intval == POWER_SUPPLY_STATUS_NOT_CHARGING) ||
-+ (status.intval == POWER_SUPPLY_STATUS_FULL))
-+ info->ac_line_status = APM_AC_ONLINE;
-+ else
-+ info->ac_line_status = APM_AC_OFFLINE;
-+
-+ /* battery life (i.e. capacity, in percents) */
-+
-+ if (MPSY_PROP(CAPACITY, &capacity) == 0)
-+ info->battery_life = capacity.intval;
-+ else {
-+ /* try calculate using energy */
-+ info->battery_life = calculate_capacity(0);
-+ /* if failed try calculate using charge instead */
-+ if (info->battery_life == -1)
-+ info->battery_life = calculate_capacity(1);
-+ }
-+
-+ /* charging status */
-+
-+ if (status.intval == POWER_SUPPLY_STATUS_CHARGING)
-+ info->battery_status = APM_BATTERY_STATUS_CHARGING;
-+ else {
-+ if (info->battery_life > 50)
-+ info->battery_status = APM_BATTERY_STATUS_HIGH;
-+ else if (info->battery_life > 5)
-+ info->battery_status = APM_BATTERY_STATUS_LOW;
-+ else
-+ info->battery_status = APM_BATTERY_STATUS_CRITICAL;
-+ }
-+ info->battery_flag = info->battery_status;
-+
-+ /* time */
-+
-+ info->units = APM_UNITS_MINS;
-+
-+ if (status.intval == POWER_SUPPLY_STATUS_CHARGING) {
-+ if (MPSY_PROP(TIME_TO_FULL_AVG, &time_to_full)) {
-+ if (MPSY_PROP(TIME_TO_FULL_NOW, &time_to_full))
-+ info->time = calculate_time(status.intval);
-+ else
-+ info->time = time_to_full.intval / 60;
-+ }
-+ }
-+ else {
-+ if (MPSY_PROP(TIME_TO_EMPTY_AVG, &time_to_empty)) {
-+ if (MPSY_PROP(TIME_TO_EMPTY_NOW, &time_to_empty))
-+ info->time = calculate_time(status.intval);
-+ else
-+ info->time = time_to_empty.intval / 60;
-+ }
-+ }
-+
-+ up(&power_supply_class->sem);
-+ return;
-+}
-+
-+static int __init apm_battery_init(void)
-+{
-+ printk(KERN_INFO "APM Battery Driver\n");
-+
-+ apm_get_power_status = apm_battery_apm_get_power_status;
-+ return 0;
-+}
-+
-+static void __exit apm_battery_exit(void)
-+{
-+ apm_get_power_status = NULL;
-+ return;
-+}
-+
-+module_init(apm_battery_init);
-+module_exit(apm_battery_exit);
-+
-+MODULE_AUTHOR("Eugeny Boger <eugenyboger@dgap.mipt.ru>");
-+MODULE_DESCRIPTION("APM emulation driver for battery monitoring class");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/drivers/power/ds2760_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/ds2760_battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,475 @@
-+/*
-+ * Driver for batteries with DS2760 chips inside.
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov
-+ * 2004-2007 Matt Reimer
-+ * 2004 Szabolcs Gyurko
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ * Author: Anton Vorontsov <cbou@mail.ru>
-+ * February 2007
-+ *
-+ * Matt Reimer <mreimer@vpop.net>
-+ * April 2004, 2005, 2007
-+ *
-+ * Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>
-+ * September 2004
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/param.h>
-+#include <linux/jiffies.h>
-+#include <linux/workqueue.h>
-+#include <linux/pm.h>
-+#include <linux/platform_device.h>
-+#include <linux/power_supply.h>
-+
-+#include "../w1/w1.h"
-+#include "../w1/slaves/w1_ds2760.h"
-+
-+struct ds2760_device_info {
-+ struct device *dev;
-+
-+ /* DS2760 data, valid after calling ds2760_battery_read_status() */
-+ unsigned long update_time; /* jiffies when data read */
-+ char raw[DS2760_DATA_SIZE]; /* raw DS2760 data */
-+ int voltage_raw; /* units of 4.88 mV */
-+ int voltage_uV; /* units of uV */
-+ int current_raw; /* units of 0.625 mA */
-+ int current_uA; /* units of uA */
-+ int accum_current_raw; /* units of 0.25 mAh */
-+ int accum_current_uAh; /* units of uAh */
-+ int temp_raw; /* units of 0.125 C */
-+ int temp_C; /* units of 0.1 C */
-+ int rated_capacity; /* units of uAh */
-+ int rem_capacity; /* percentage */
-+ int full_active_uAh; /* units of uAh */
-+ int empty_uAh; /* units of uAh */
-+ int life_sec; /* units of seconds */
-+ int charge_status; /* POWER_SUPPLY_STATUS_* */
-+
-+ int full_counter;
-+ struct power_supply bat;
-+ struct device *w1_dev;
-+ struct workqueue_struct *monitor_wqueue;
-+ struct delayed_work monitor_work;
-+};
-+
-+static unsigned int cache_time = 1000;
-+module_param(cache_time, uint, 0644);
-+MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
-+
-+/* Some batteries have their rated capacity stored a N * 10 mAh, while
-+ * others use an index into this table. */
-+static int rated_capacities[] = {
-+ 0,
-+ 920, /* Samsung */
-+ 920, /* BYD */
-+ 920, /* Lishen */
-+ 920, /* NEC */
-+ 1440, /* Samsung */
-+ 1440, /* BYD */
-+ 1440, /* Lishen */
-+ 1440, /* NEC */
-+ 2880, /* Samsung */
-+ 2880, /* BYD */
-+ 2880, /* Lishen */
-+ 2880 /* NEC */
-+};
-+
-+/* array is level at temps 0C, 10C, 20C, 30C, 40C
-+ * temp is in Celsius */
-+static int battery_interpolate(int array[], int temp)
-+{
-+ int index, dt;
-+
-+ if (temp <= 0)
-+ return array[0];
-+ if (temp >= 40)
-+ return array[4];
-+
-+ index = temp / 10;
-+ dt = temp % 10;
-+
-+ return array[index] + (((array[index + 1] - array[index]) * dt) / 10);
-+}
-+
-+static int ds2760_battery_read_status(struct ds2760_device_info *di)
-+{
-+ int ret, i, start, count, scale[5];
-+
-+ if (di->update_time && time_before(jiffies, di->update_time +
-+ msecs_to_jiffies(cache_time)))
-+ return 0;
-+
-+ /* The first time we read the entire contents of SRAM/EEPROM,
-+ * but after that we just read the interesting bits that change. */
-+ if (di->update_time == 0) {
-+ start = 0;
-+ count = DS2760_DATA_SIZE;
-+ }
-+ else {
-+ start = DS2760_VOLTAGE_MSB;
-+ count = DS2760_TEMP_LSB - start + 1;
-+ }
-+
-+ ret = w1_ds2760_read(di->w1_dev, di->raw + start, start, count);
-+ if (ret != count) {
-+ dev_warn(di->dev, "call to w1_ds2760_read failed (0x%p)\n",
-+ di->w1_dev);
-+ return 1;
-+ }
-+
-+ di->update_time = jiffies;
-+
-+ /* DS2760 reports voltage in units of 4.88mV, but the battery class
-+ * reports in units of uV, so convert by multiplying by 4880. */
-+ di->voltage_raw = (di->raw[DS2760_VOLTAGE_MSB] << 3) |
-+ (di->raw[DS2760_VOLTAGE_LSB] >> 5);
-+ di->voltage_uV = di->voltage_raw * 4880;
-+
-+ /* DS2760 reports current in signed units of 0.625mA, but the battery
-+ * class reports in units of uA, so convert by multiplying by 625. */
-+ di->current_raw =
-+ (((signed char)di->raw[DS2760_CURRENT_MSB]) << 5) |
-+ (di->raw[DS2760_CURRENT_LSB] >> 3);
-+ di->current_uA = di->current_raw * 625;
-+
-+ /* DS2760 reports accumulated current in signed units of 0.25mAh. */
-+ di->accum_current_raw =
-+ (((signed char)di->raw[DS2760_CURRENT_ACCUM_MSB]) << 8) |
-+ di->raw[DS2760_CURRENT_ACCUM_LSB];
-+ di->accum_current_uAh = di->accum_current_raw * 250;
-+
-+ /* DS2760 reports temperature in signed units of 0.125C, but the
-+ * battery class reports in units of 1/10 C, so we convert by
-+ * multiplying by .125 * 10 = 1.25. */
-+ di->temp_raw = (((signed char)di->raw[DS2760_TEMP_MSB]) << 3) |
-+ (di->raw[DS2760_TEMP_LSB] >> 5);
-+ di->temp_C = di->temp_raw + (di->temp_raw / 4);
-+
-+ /* At least some battery monitors (e.g. HP iPAQ) store the battery's
-+ * maximum rated capacity. */
-+ if (di->raw[DS2760_RATED_CAPACITY] < ARRAY_SIZE(rated_capacities))
-+ di->rated_capacity = rated_capacities[
-+ (unsigned int)di->raw[DS2760_RATED_CAPACITY]];
-+ else
-+ di->rated_capacity = di->raw[DS2760_RATED_CAPACITY] * 10;
-+
-+ di->rated_capacity *= 1000; /* convert to uAh */
-+
-+ /* Calculate the full level at the present temperature. */
-+ di->full_active_uAh = di->raw[DS2760_ACTIVE_FULL] << 8 |
-+ di->raw[DS2760_ACTIVE_FULL + 1];
-+
-+ scale[0] = di->raw[DS2760_ACTIVE_FULL] << 8 |
-+ di->raw[DS2760_ACTIVE_FULL + 1];
-+ for (i = 1; i < 5; i++)
-+ scale[i] = scale[i - 1] + di->raw[DS2760_ACTIVE_FULL + 2 + i];
-+
-+ di->full_active_uAh = battery_interpolate(scale, di->temp_C / 10);
-+ di->full_active_uAh *= 1000; /* convert to uAh */
-+
-+ /* Calculate the empty level at the present temperature. */
-+ scale[4] = di->raw[DS2760_ACTIVE_EMPTY + 4];
-+ for (i = 3; i >= 0; i--)
-+ scale[i] = scale[i + 1] + di->raw[DS2760_ACTIVE_EMPTY + i];
-+
-+ di->empty_uAh = battery_interpolate(scale, di->temp_C / 10);
-+ di->empty_uAh *= 1000; /* convert to uAh */
-+
-+ /* From Maxim Application Note 131: remaining capacity =
-+ * ((ICA - Empty Value) / (Full Value - Empty Value)) x 100% */
-+ di->rem_capacity = ((di->accum_current_uAh - di->empty_uAh) * 100L) /
-+ (di->full_active_uAh - di->empty_uAh);
-+
-+ if (di->rem_capacity < 0)
-+ di->rem_capacity = 0;
-+ if (di->rem_capacity > 100)
-+ di->rem_capacity = 100;
-+
-+ if (di->current_uA)
-+ di->life_sec = -((di->accum_current_uAh - di->empty_uAh) *
-+ 3600L) / di->current_uA;
-+ else
-+ di->life_sec = 0;
-+
-+ return 0;
-+}
-+
-+static void ds2760_battery_update_status(struct ds2760_device_info *di)
-+{
-+ int old_charge_status = di->charge_status;
-+
-+ ds2760_battery_read_status(di);
-+
-+ if (di->charge_status == POWER_SUPPLY_STATUS_UNKNOWN)
-+ di->full_counter = 0;
-+
-+ if (power_supply_am_i_supplied(&di->bat)) {
-+ if (di->current_uA > 10000) {
-+ di->charge_status = POWER_SUPPLY_STATUS_CHARGING;
-+ di->full_counter = 0;
-+ }
-+ else if (di->current_uA < -5000) {
-+ if (di->charge_status != POWER_SUPPLY_STATUS_NOT_CHARGING)
-+ dev_notice(di->dev, "not enough power to "
-+ "charge\n");
-+ di->charge_status = POWER_SUPPLY_STATUS_NOT_CHARGING;
-+ di->full_counter = 0;
-+ }
-+ else if (di->current_uA < 10000 &&
-+ di->charge_status != POWER_SUPPLY_STATUS_FULL) {
-+
-+ /* Don't consider the battery to be full unless
-+ * we've seen the current < 10 mA at least two
-+ * consecutive times. */
-+
-+ di->full_counter++;
-+
-+ if (di->full_counter < 2)
-+ di->charge_status = POWER_SUPPLY_STATUS_CHARGING;
-+ else {
-+ unsigned char acr[2];
-+ int acr_val;
-+
-+ /* acr is in units of 0.25 mAh */
-+ acr_val = di->full_active_uAh * 4L / 1000;
-+
-+ acr[0] = acr_val >> 8;
-+ acr[1] = acr_val & 0xff;
-+
-+ if (w1_ds2760_write(di->w1_dev, acr,
-+ DS2760_CURRENT_ACCUM_MSB, 2) < 2)
-+ dev_warn(di->dev,
-+ "ACR reset failed\n");
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_FULL;
-+ }
-+ }
-+ }
-+ else {
-+ di->charge_status = POWER_SUPPLY_STATUS_DISCHARGING;
-+ di->full_counter = 0;
-+ }
-+
-+ if (di->charge_status != old_charge_status)
-+ power_supply_changed(&di->bat);
-+
-+ return;
-+}
-+
-+static void ds2760_battery_work(struct work_struct *work)
-+{
-+ struct ds2760_device_info *di = container_of(work,
-+ struct ds2760_device_info, monitor_work.work);
-+ const int interval = HZ * 60;
-+
-+ dev_dbg(di->dev, "%s\n", __FUNCTION__);
-+
-+ ds2760_battery_update_status(di);
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, interval);
-+
-+ return;
-+}
-+
-+#define to_ds2760_device_info(x) container_of((x), struct ds2760_device_info, \
-+ bat);
-+
-+static void ds2760_battery_external_power_changed(struct power_supply *psy)
-+{
-+ struct ds2760_device_info *di = to_ds2760_device_info(psy);
-+
-+ dev_dbg(di->dev, "%s\n", __FUNCTION__);
-+
-+ cancel_delayed_work(&di->monitor_work);
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ/10);
-+
-+ return;
-+}
-+
-+static int ds2760_battery_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ struct ds2760_device_info *di = to_ds2760_device_info(psy);
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ val->intval = di->charge_status;
-+ return 0;
-+ default:
-+ break;
-+ }
-+
-+ ds2760_battery_read_status(di);
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-+ val->intval = di->voltage_uV;
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_NOW:
-+ val->intval = di->current_uA;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
-+ val->intval = di->rated_capacity;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_FULL:
-+ val->intval = di->full_active_uAh;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_EMPTY:
-+ val->intval = di->empty_uAh;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_NOW:
-+ val->intval = di->accum_current_uAh;
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = di->temp_C;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property ds2760_battery_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+ POWER_SUPPLY_PROP_CURRENT_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_FULL,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY,
-+ POWER_SUPPLY_PROP_CHARGE_NOW,
-+ POWER_SUPPLY_PROP_TEMP,
-+};
-+
-+static int ds2760_battery_probe(struct platform_device *pdev)
-+{
-+ int retval = 0;
-+ struct ds2760_device_info *di;
-+ struct ds2760_platform_data *pdata;
-+
-+ di = kzalloc(sizeof(*di), GFP_KERNEL);
-+ if (!di) {
-+ retval = -ENOMEM;
-+ goto di_alloc_failed;
-+ }
-+
-+ platform_set_drvdata(pdev, di);
-+
-+ pdata = pdev->dev.platform_data;
-+ di->dev = &pdev->dev;
-+ di->w1_dev = pdev->dev.parent;
-+ di->bat.name = pdev->dev.bus_id;
-+ di->bat.type = POWER_SUPPLY_TYPE_BATTERY;
-+ di->bat.properties = ds2760_battery_props;
-+ di->bat.num_properties = ARRAY_SIZE(ds2760_battery_props);
-+ di->bat.get_property = ds2760_battery_get_property;
-+ di->bat.external_power_changed =
-+ ds2760_battery_external_power_changed;
-+ di->bat.use_for_apm = 1;
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ retval = power_supply_register(&pdev->dev, &di->bat);
-+ if (retval) {
-+ dev_err(di->dev, "failed to register battery");
-+ goto batt_failed;
-+ }
-+
-+ INIT_DELAYED_WORK(&di->monitor_work, ds2760_battery_work);
-+ di->monitor_wqueue = create_singlethread_workqueue(pdev->dev.bus_id);
-+ if (!di->monitor_wqueue) {
-+ retval = -ESRCH;
-+ goto workqueue_failed;
-+ }
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ * 1);
-+
-+ goto success;
-+
-+workqueue_failed:
-+ power_supply_unregister(&di->bat);
-+batt_failed:
-+ kfree(di);
-+di_alloc_failed:
-+success:
-+ return retval;
-+}
-+
-+static int ds2760_battery_remove(struct platform_device *pdev)
-+{
-+ struct ds2760_device_info *di = platform_get_drvdata(pdev);
-+
-+ cancel_rearming_delayed_workqueue(di->monitor_wqueue,
-+ &di->monitor_work);
-+ destroy_workqueue(di->monitor_wqueue);
-+ power_supply_unregister(&di->bat);
-+
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+
-+static int ds2760_battery_suspend(struct platform_device *pdev,
-+ pm_message_t state)
-+{
-+ struct ds2760_device_info *di = platform_get_drvdata(pdev);
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ return 0;
-+}
-+
-+static int ds2760_battery_resume(struct platform_device *pdev)
-+{
-+ struct ds2760_device_info *di = platform_get_drvdata(pdev);
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN;
-+ power_supply_changed(&di->bat);
-+
-+ cancel_delayed_work(&di->monitor_work);
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ);
-+
-+ return 0;
-+}
-+
-+#else
-+
-+#define ds2760_battery_suspend NULL
-+#define ds2760_battery_resume NULL
-+
-+#endif /* CONFIG_PM */
-+
-+static struct platform_driver ds2760_battery_driver = {
-+ .driver = {
-+ .name = "ds2760-battery",
-+ },
-+ .probe = ds2760_battery_probe,
-+ .remove = ds2760_battery_remove,
-+ .suspend = ds2760_battery_suspend,
-+ .resume = ds2760_battery_resume,
-+};
-+
-+static int __init ds2760_battery_init(void)
-+{
-+ return platform_driver_register(&ds2760_battery_driver);
-+}
-+
-+static void __exit ds2760_battery_exit(void)
-+{
-+ platform_driver_unregister(&ds2760_battery_driver);
-+ return;
-+}
-+
-+module_init(ds2760_battery_init);
-+module_exit(ds2760_battery_exit);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>, "
-+ "Matt Reimer <mreimer@vpop.net>, "
-+ "Anton Vorontsov <cbou@mail.ru>");
-+MODULE_DESCRIPTION("ds2760 battery driver");
-Index: linux-2.6.22/drivers/power/Kconfig
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/Kconfig 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,70 @@
-+menuconfig POWER_SUPPLY
-+ tristate "Power supply class support"
-+ help
-+ Say Y here to enable power supply class support. This allows
-+ power supply (batteries, AC, USB) monitoring by userspace
-+ via sysfs and uevent (if available) and/or APM kernel interface
-+ (if selected below).
-+
-+if POWER_SUPPLY
-+
-+config POWER_SUPPLY_DEBUG
-+ bool "Power supply debug"
-+ help
-+ Say Y here to enable debugging messages for power supply class
-+ and drivers.
-+
-+config PDA_POWER
-+ tristate "Generic PDA/phone power driver"
-+ help
-+ Say Y here to enable generic power driver for PDAs and phones with
-+ one or two external power supplies (AC/USB) connected to main and
-+ backup batteries, and optional builtin charger.
-+
-+config APM_POWER
-+ tristate "APM emulation for class batteries"
-+ depends on APM_EMULATION
-+ help
-+ Say Y here to enable support APM status emulation using
-+ battery class devices.
-+
-+config BATTERY_DS2760
-+ tristate "DS2760 battery driver (HP iPAQ & others)"
-+ select W1
-+ select W1_SLAVE_DS2760
-+ help
-+ Say Y here to enable support for batteries with ds2760 chip.
-+
-+config BATTERY_PMU
-+ tristate "Apple PMU battery"
-+ depends on ADB_PMU
-+ help
-+ Say Y here to expose battery information on Apple machines
-+ through the generic battery class.
-+
-+config BATTERY_OLPC
-+ tristate "One Laptop Per Child battery"
-+ depends on X86_32
-+ help
-+ Say Y to enable support for the battery on the OLPC laptop.
-+
-+# drivers below are not in battery2-2.6 tree
-+
-+config ADC_BATTERY
-+ tristate "Generic ADC battery driver"
-+ depends on ADC && POWER_SUPPLY
-+ help
-+ Say Y here to enable support for battery monitoring using generic ADC device.
-+
-+config IPAQ_MICRO_BATTERY
-+ tristate "HP iPAQ Micro ASIC battery driver"
-+ depends on IPAQ_MICRO && POWER_SUPPLY
-+ help
-+ Choose this option if you want to monitor battery status on
-+ Compaq/HP iPAQ h3100 h3600
-+
-+config MCP_UCB1x00_SIMPAD_BATTERY
-+ tristate "SIMpad Battery Reading Support"
-+ depends on MCP_UCB1x00 && POWER_SUPPLY
-+
-+endif # POWER_SUPPLY
-Index: linux-2.6.22/drivers/power/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/Makefile 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,28 @@
-+power_supply-objs := power_supply_core.o
-+
-+ifeq ($(CONFIG_SYSFS),y)
-+power_supply-objs += power_supply_sysfs.o
-+endif
-+
-+ifeq ($(CONFIG_LEDS_TRIGGERS),y)
-+power_supply-objs += power_supply_leds.o
-+endif
-+
-+ifeq ($(CONFIG_POWER_SUPPLY_DEBUG),y)
-+EXTRA_CFLAGS += -DDEBUG
-+endif
-+
-+obj-$(CONFIG_POWER_SUPPLY) += power_supply.o
-+
-+obj-$(CONFIG_PDA_POWER) += pda_power.o
-+obj-$(CONFIG_APM_POWER) += apm_power.o
-+
-+obj-$(CONFIG_BATTERY_DS2760) += ds2760_battery.o
-+obj-$(CONFIG_BATTERY_PMU) += pmu_battery.o
-+obj-$(CONFIG_BATTERY_OLPC) += olpc_battery.o
-+
-+# drivers below are not in battery2-2.6 tree
-+
-+obj-$(CONFIG_ADC_BATTERY) += adc_battery.o
-+obj-$(CONFIG_IPAQ_MICRO_BATTERY) += micro_battery.o
-+obj-$(CONFIG_MCP_UCB1x00_SIMPAD_BATTERY) += simpad-battery.o
-Index: linux-2.6.22/drivers/power/micro_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/micro_battery.c 2007-08-23 12:25:20.000000000 +0200
-@@ -0,0 +1,257 @@
-+/*
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * h3600 atmel micro companion support, battery subdevice
-+ * based on previous kernel 2.4 version
-+ * Author : Alessandro Gardich <gremlin@gremlin.it>
-+ *
-+ */
-+
-+
-+#include <linux/module.h>
-+#include <linux/version.h>
-+
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <linux/interrupt.h>
-+#include <linux/sched.h>
-+#include <linux/pm.h>
-+#include <linux/sysctl.h>
-+#include <linux/proc_fs.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <linux/power_supply.h>
-+#include <linux/platform_device.h>
-+#include <linux/timer.h>
-+
-+#include <asm/arch/hardware.h>
-+
-+#include <asm/arch/h3600.h>
-+#include <asm/arch/SA-1100.h>
-+
-+#include <asm/hardware/micro.h>
-+
-+#define BATT_PERIOD 10*HZ
-+
-+#define H3600_BATT_STATUS_HIGH 0x01
-+#define H3600_BATT_STATUS_LOW 0x02
-+#define H3600_BATT_STATUS_CRITICAL 0x04
-+#define H3600_BATT_STATUS_CHARGING 0x08
-+#define H3600_BATT_STATUS_CHARGEMAIN 0x10
-+#define H3600_BATT_STATUS_DEAD 0x20 /* Battery will not charge */
-+#define H3600_BATT_STATUS_NOTINSTALLED 0x20 /* For expansion pack batteries */
-+#define H3600_BATT_STATUS_FULL 0x40 /* Battery fully charged (and connected to AC) */
-+#define H3600_BATT_STATUS_NOBATTERY 0x80
-+#define H3600_BATT_STATUS_UNKNOWN 0xff
-+
-+
-+//static struct power_supply_dev *micro_battery;
-+
-+static micro_private_t *p_micro;
-+
-+struct timer_list batt_timer;
-+
-+struct {
-+ int ac;
-+ int update_time;
-+ int chemistry;
-+ int voltage;
-+ int temperature;
-+ int flag;
-+} micro_battery;
-+
-+static void micro_battery_receive (int len, unsigned char *data) {
-+ if (0) {
-+ printk(KERN_ERR "h3600_battery - AC = %02x\n", data[0]);
-+ printk(KERN_ERR "h3600_battery - BAT1 chemistry = %02x\n", data[1]);
-+ printk(KERN_ERR "h3600_battery - BAT1 voltage = %d %02x%02x\n", (data[3]<<8)+data[2], data[2], data[3]);
-+ printk(KERN_ERR "h3600_battery - BAT1 status = %02x\n", data[4]);
-+ }
-+
-+ micro_battery.ac = data[0];
-+ micro_battery.chemistry = data[1];
-+ micro_battery.voltage = ((((unsigned short)data[3]<<8)+data[2]) * 5000L ) * 1000 / 1024;
-+ micro_battery.flag = data[4];
-+
-+ if (len == 9) {
-+ if (0) {
-+ printk(KERN_ERR "h3600_battery - BAT2 chemistry = %02x\n", data[5]);
-+ printk(KERN_ERR "h3600_battery - BAT2 voltage = %d %02x%02x\n", (data[7]<<8)+data[6], data[6], data[7]);
-+ printk(KERN_ERR "h3600_battery - BAT2 status = %02x\n", data[8]);
-+ }
-+ }
-+}
-+
-+static void micro_temperature_receive (int len, unsigned char *data) {
-+ micro_battery.temperature = ((unsigned short)data[1]<<8)+data[0];
-+}
-+
-+void h3600_battery_read_status(unsigned long data) {
-+
-+ if (++data % 2)
-+ h3600_micro_tx_msg(0x09,0,NULL);
-+ else
-+ h3600_micro_tx_msg(0x06,0,NULL);
-+
-+ batt_timer.expires += BATT_PERIOD;
-+ batt_timer.data = data;
-+
-+ add_timer(&batt_timer);
-+}
-+
-+int get_capacity(struct power_supply *b) {
-+ switch (micro_battery.flag) {
-+ case H3600_BATT_STATUS_HIGH : return 100; break;
-+ case H3600_BATT_STATUS_LOW : return 50; break;
-+ case H3600_BATT_STATUS_CRITICAL : return 5; break;
-+ default: break;
-+ }
-+ return 0;
-+}
-+
-+int get_status(struct power_supply *b) {
-+
-+ if (micro_battery.flag == H3600_BATT_STATUS_UNKNOWN)
-+ return POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ if (micro_battery.flag & H3600_BATT_STATUS_FULL)
-+ return POWER_SUPPLY_STATUS_FULL;
-+
-+ if ((micro_battery.flag & H3600_BATT_STATUS_CHARGING) ||
-+ (micro_battery.flag & H3600_BATT_STATUS_CHARGEMAIN))
-+ return POWER_SUPPLY_STATUS_CHARGING;
-+
-+ return POWER_SUPPLY_STATUS_DISCHARGING;
-+}
-+
-+static int micro_batt_get_property(struct power_supply *b,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ val->intval = get_status(b);
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
-+ val->intval = 4700000;
-+ break;
-+ case POWER_SUPPLY_PROP_CAPACITY:
-+ val->intval = get_capacity(b);
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = micro_battery.temperature;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-+ val->intval = micro_battery.voltage;
-+ break;
-+ default:
-+ return -EINVAL;
-+ };
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property micro_batt_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
-+ POWER_SUPPLY_PROP_CAPACITY,
-+ POWER_SUPPLY_PROP_TEMP,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+};
-+
-+static struct power_supply h3600_battery = {
-+ .name = "main-battery",
-+ .properties = micro_batt_props,
-+ .num_properties = ARRAY_SIZE(micro_batt_props),
-+ .get_property = micro_batt_get_property,
-+ .use_for_apm = 1,
-+};
-+
-+static int micro_batt_probe (struct platform_device *pdev)
-+{
-+ if (1) printk(KERN_ERR "micro battery probe : begin\n");
-+
-+ power_supply_register(&pdev->dev, &h3600_battery);
-+
-+ { /*--- callback ---*/
-+ p_micro = platform_get_drvdata(pdev);
-+ spin_lock(p_micro->lock);
-+ p_micro->h_batt = micro_battery_receive;
-+ p_micro->h_temp = micro_temperature_receive;
-+ spin_unlock(p_micro->lock);
-+ }
-+
-+ { /*--- timer ---*/
-+ init_timer(&batt_timer);
-+ batt_timer.expires = jiffies + BATT_PERIOD;
-+ batt_timer.data = 0;
-+ batt_timer.function = h3600_battery_read_status;
-+
-+ add_timer(&batt_timer);
-+ }
-+
-+ if (1) printk(KERN_ERR "micro battery probe : end\n");
-+ return 0;
-+}
-+
-+static int micro_batt_remove (struct platform_device *pdev)
-+{
-+ power_supply_unregister(&h3600_battery);
-+ { /*--- callback ---*/
-+ init_timer(&batt_timer);
-+ p_micro->h_batt = NULL;
-+ p_micro->h_temp = NULL;
-+ spin_unlock(p_micro->lock);
-+ }
-+ { /*--- timer ---*/
-+ del_timer_sync(&batt_timer);
-+ }
-+ return 0;
-+}
-+
-+static int micro_batt_suspend ( struct platform_device *pdev, pm_message_t state)
-+{
-+ { /*--- timer ---*/
-+ del_timer(&batt_timer);
-+ }
-+ return 0;
-+}
-+
-+static int micro_batt_resume ( struct platform_device *pdev)
-+{
-+ { /*--- timer ---*/
-+ add_timer(&batt_timer);
-+ }
-+ return 0;
-+}
-+
-+struct platform_driver micro_batt_device_driver = {
-+ .driver = {
-+ .name = "h3600-micro-battery",
-+ },
-+ .probe = micro_batt_probe,
-+ .remove = micro_batt_remove,
-+ .suspend = micro_batt_suspend,
-+ .resume = micro_batt_resume,
-+};
-+
-+static int micro_batt_init (void)
-+{
-+ return platform_driver_register(&micro_batt_device_driver);
-+}
-+
-+static void micro_batt_cleanup (void)
-+{
-+ platform_driver_unregister (&micro_batt_device_driver);
-+}
-+
-+module_init (micro_batt_init);
-+module_exit (micro_batt_cleanup);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("gremlin.it");
-+MODULE_DESCRIPTION("driver for iPAQ Atmel micro battery");
-+
-+
-Index: linux-2.6.22/drivers/power/olpc_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/olpc_battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,302 @@
-+/*
-+ * Battery driver for One Laptop Per Child board.
-+ *
-+ * Copyright © 2006 David Woodhouse <dwmw2@infradead.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/err.h>
-+#include <linux/platform_device.h>
-+#include <linux/power_supply.h>
-+#include <linux/jiffies.h>
-+#include <linux/sched.h>
-+#include <asm/io.h>
-+
-+#define wBAT_VOLTAGE 0xf900 /* *9.76/32, mV */
-+#define wBAT_CURRENT 0xf902 /* *15.625/120, mA */
-+#define wBAT_TEMP 0xf906 /* *256/1000, °C */
-+#define wAMB_TEMP 0xf908 /* *256/1000, °C */
-+#define SOC 0xf910 /* percentage */
-+#define sMBAT_STATUS 0xfaa4
-+#define sBAT_PRESENT 1
-+#define sBAT_FULL 2
-+#define sBAT_DESTROY 4 /* what is this exactly? */
-+#define sBAT_LOW 32
-+#define sBAT_DISCHG 64
-+#define sMCHARGE_STATUS 0xfaa5
-+#define sBAT_CHARGE 1
-+#define sBAT_OVERTEMP 4
-+#define sBAT_NiMH 8
-+#define sPOWER_FLAG 0xfa40
-+#define ADAPTER_IN 1
-+
-+/*********************************************************************
-+ * EC locking and access
-+ *********************************************************************/
-+
-+static int lock_ec(void)
-+{
-+ unsigned long timeo = jiffies + HZ / 20;
-+
-+ while (1) {
-+ unsigned char lock = inb(0x6c) & 0x80;
-+ if (!lock)
-+ return 0;
-+ if (time_after(jiffies, timeo)) {
-+ printk(KERN_ERR "olpc_battery: failed to lock EC for "
-+ "battery access\n");
-+ return 1;
-+ }
-+ yield();
-+ }
-+}
-+
-+static void unlock_ec(void)
-+{
-+ outb(0xff, 0x6c);
-+ return;
-+}
-+
-+static unsigned char read_ec_byte(unsigned short adr)
-+{
-+ outb(adr >> 8, 0x381);
-+ outb(adr, 0x382);
-+ return inb(0x383);
-+}
-+
-+static unsigned short read_ec_word(unsigned short adr)
-+{
-+ return (read_ec_byte(adr) << 8) | read_ec_byte(adr + 1);
-+}
-+
-+/*********************************************************************
-+ * Power
-+ *********************************************************************/
-+
-+static int olpc_ac_get_prop(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ int ret = 0;
-+
-+ if (lock_ec())
-+ return -EIO;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_ONLINE:
-+ if (!(read_ec_byte(sMBAT_STATUS) & sBAT_PRESENT)) {
-+ ret = -ENODEV;
-+ goto out;
-+ }
-+ val->intval = !!(read_ec_byte(sPOWER_FLAG) & ADAPTER_IN);
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ break;
-+ }
-+out:
-+ unlock_ec();
-+ return ret;
-+}
-+
-+static enum power_supply_property olpc_ac_props[] = {
-+ POWER_SUPPLY_PROP_ONLINE,
-+};
-+
-+static struct power_supply olpc_ac = {
-+ .name = "olpc-ac",
-+ .type = POWER_SUPPLY_TYPE_MAINS,
-+ .properties = olpc_ac_props,
-+ .num_properties = ARRAY_SIZE(olpc_ac_props),
-+ .get_property = olpc_ac_get_prop,
-+};
-+
-+/*********************************************************************
-+ * Battery properties
-+ *********************************************************************/
-+
-+static int olpc_bat_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ int ret = 0;
-+
-+ if (lock_ec())
-+ return -EIO;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ {
-+ int status = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ val->intval = read_ec_byte(sMBAT_STATUS);
-+
-+ if (!(val->intval & sBAT_PRESENT)) {
-+ ret = -ENODEV;
-+ goto out;
-+ }
-+
-+ if (val->intval & sBAT_DISCHG)
-+ status = POWER_SUPPLY_STATUS_DISCHARGING;
-+ else if (val->intval & sBAT_FULL)
-+ status = POWER_SUPPLY_STATUS_FULL;
-+
-+ val->intval = read_ec_byte(sMCHARGE_STATUS);
-+ if (val->intval & sBAT_CHARGE)
-+ status = POWER_SUPPLY_STATUS_CHARGING;
-+
-+ val->intval = status;
-+ break;
-+ }
-+ case POWER_SUPPLY_PROP_PRESENT:
-+ val->intval = !!(read_ec_byte(sMBAT_STATUS) & sBAT_PRESENT);
-+ break;
-+ case POWER_SUPPLY_PROP_HEALTH:
-+ val->intval = read_ec_byte(sMCHARGE_STATUS);
-+ if (val->intval & sBAT_OVERTEMP)
-+ val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
-+ else
-+ val->intval = POWER_SUPPLY_HEALTH_GOOD;
-+ break;
-+ case POWER_SUPPLY_PROP_TECHNOLOGY:
-+ val->intval = read_ec_byte(sMCHARGE_STATUS);
-+ if (val->intval & sBAT_NiMH)
-+ val->intval = POWER_SUPPLY_TECHNOLOGY_NIMH;
-+ else
-+ val->intval = POWER_SUPPLY_TECHNOLOGY_UNKNOWN;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_AVG:
-+ val->intval = read_ec_byte(wBAT_VOLTAGE) * 9760L / 32;
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_AVG:
-+ val->intval = read_ec_byte(wBAT_CURRENT) * 15625L / 120;
-+ break;
-+ case POWER_SUPPLY_PROP_CAPACITY:
-+ val->intval = read_ec_byte(SOC);
-+ break;
-+ case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
-+ val->intval = read_ec_byte(sMBAT_STATUS);
-+ if (val->intval & sBAT_FULL)
-+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
-+ else if (val->intval & sBAT_LOW)
-+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
-+ else
-+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = read_ec_byte(wBAT_TEMP) * 256 / 100;
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP_AMBIENT:
-+ val->intval = read_ec_byte(wAMB_TEMP) * 256 / 100;
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ break;
-+ }
-+
-+out:
-+ unlock_ec();
-+ return ret;
-+}
-+
-+static enum power_supply_property olpc_bat_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_PRESENT,
-+ POWER_SUPPLY_PROP_HEALTH,
-+ POWER_SUPPLY_PROP_TECHNOLOGY,
-+ POWER_SUPPLY_PROP_VOLTAGE_AVG,
-+ POWER_SUPPLY_PROP_CURRENT_AVG,
-+ POWER_SUPPLY_PROP_CAPACITY,
-+ POWER_SUPPLY_PROP_CAPACITY_LEVEL,
-+ POWER_SUPPLY_PROP_TEMP,
-+ POWER_SUPPLY_PROP_TEMP_AMBIENT,
-+};
-+
-+/*********************************************************************
-+ * Initialisation
-+ *********************************************************************/
-+
-+static struct platform_device *bat_pdev;
-+
-+static struct power_supply olpc_bat = {
-+ .properties = olpc_bat_props,
-+ .num_properties = ARRAY_SIZE(olpc_bat_props),
-+ .get_property = olpc_bat_get_property,
-+ .use_for_apm = 1,
-+};
-+
-+static int __init olpc_bat_init(void)
-+{
-+ int ret = 0;
-+ unsigned short tmp;
-+
-+ if (!request_region(0x380, 4, "olpc-battery")) {
-+ ret = -EIO;
-+ goto region_failed;
-+ }
-+
-+ if (lock_ec()) {
-+ ret = -EIO;
-+ goto lock_failed;
-+ }
-+
-+ tmp = read_ec_word(0xfe92);
-+ unlock_ec();
-+
-+ if (tmp != 0x380) {
-+ /* Doesn't look like OLPC EC */
-+ ret = -ENODEV;
-+ goto not_olpc_ec;
-+ }
-+
-+ bat_pdev = platform_device_register_simple("olpc-battery", 0, NULL, 0);
-+ if (IS_ERR(bat_pdev)) {
-+ ret = PTR_ERR(bat_pdev);
-+ goto pdev_failed;
-+ }
-+
-+ ret = power_supply_register(&bat_pdev->dev, &olpc_ac);
-+ if (ret)
-+ goto ac_failed;
-+
-+ olpc_bat.name = bat_pdev->name;
-+
-+ ret = power_supply_register(&bat_pdev->dev, &olpc_bat);
-+ if (ret)
-+ goto battery_failed;
-+
-+ goto success;
-+
-+battery_failed:
-+ power_supply_unregister(&olpc_ac);
-+ac_failed:
-+ platform_device_unregister(bat_pdev);
-+pdev_failed:
-+not_olpc_ec:
-+lock_failed:
-+ release_region(0x380, 4);
-+region_failed:
-+success:
-+ return ret;
-+}
-+
-+static void __exit olpc_bat_exit(void)
-+{
-+ power_supply_unregister(&olpc_bat);
-+ power_supply_unregister(&olpc_ac);
-+ platform_device_unregister(bat_pdev);
-+ release_region(0x380, 4);
-+ return;
-+}
-+
-+module_init(olpc_bat_init);
-+module_exit(olpc_bat_exit);
-+
-+MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("Battery driver for One Laptop Per Child "
-+ "($100 laptop) board.");
-Index: linux-2.6.22/drivers/power/pda_power.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/pda_power.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,263 @@
-+/*
-+ * Common power driver for PDAs and phones with one or two external
-+ * power supplies (AC/USB) connected to main and backup batteries,
-+ * and optional builtin charger.
-+ *
-+ * Copyright 2007 Anton Vorontsov <cbou@mail.ru>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/interrupt.h>
-+#include <linux/power_supply.h>
-+#include <linux/pda_power.h>
-+#include <linux/timer.h>
-+#include <linux/jiffies.h>
-+
-+static inline unsigned int get_irq_flags(struct resource *res)
-+{
-+ unsigned int flags = IRQF_DISABLED | IRQF_SHARED;
-+
-+ flags |= res->flags & IRQF_TRIGGER_MASK;
-+
-+ return flags;
-+}
-+
-+static struct device *dev;
-+static struct pda_power_pdata *pdata;
-+static struct resource *ac_irq, *usb_irq;
-+static struct timer_list charger_timer;
-+static struct timer_list supply_timer;
-+
-+static int pda_power_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_ONLINE:
-+ if (psy->type == POWER_SUPPLY_TYPE_MAINS)
-+ val->intval = pdata->is_ac_online ?
-+ pdata->is_ac_online() : 0;
-+ else
-+ val->intval = pdata->is_usb_online ?
-+ pdata->is_usb_online() : 0;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ return 0;
-+}
-+
-+static enum power_supply_property pda_power_props[] = {
-+ POWER_SUPPLY_PROP_ONLINE,
-+};
-+
-+static char *pda_power_supplied_to[] = {
-+ "main-battery",
-+ "backup-battery",
-+};
-+
-+static struct power_supply pda_power_supplies[] = {
-+ {
-+ .name = "ac",
-+ .type = POWER_SUPPLY_TYPE_MAINS,
-+ .supplied_to = pda_power_supplied_to,
-+ .num_supplicants = ARRAY_SIZE(pda_power_supplied_to),
-+ .properties = pda_power_props,
-+ .num_properties = ARRAY_SIZE(pda_power_props),
-+ .get_property = pda_power_get_property,
-+ },
-+ {
-+ .name = "usb",
-+ .type = POWER_SUPPLY_TYPE_USB,
-+ .supplied_to = pda_power_supplied_to,
-+ .num_supplicants = ARRAY_SIZE(pda_power_supplied_to),
-+ .properties = pda_power_props,
-+ .num_properties = ARRAY_SIZE(pda_power_props),
-+ .get_property = pda_power_get_property,
-+ },
-+};
-+
-+static void update_charger(void)
-+{
-+ if (!pdata->set_charge)
-+ return;
-+
-+ if (pdata->is_ac_online && pdata->is_ac_online()) {
-+ dev_dbg(dev, "charger on (AC)\n");
-+ pdata->set_charge(PDA_POWER_CHARGE_AC);
-+ }
-+ else if (pdata->is_usb_online && pdata->is_usb_online()) {
-+ dev_dbg(dev, "charger on (USB)\n");
-+ pdata->set_charge(PDA_POWER_CHARGE_USB);
-+ }
-+ else {
-+ dev_dbg(dev, "charger off\n");
-+ pdata->set_charge(0);
-+ }
-+
-+ return;
-+}
-+
-+static void supply_timer_func(unsigned long irq)
-+{
-+ if (ac_irq && irq == ac_irq->start)
-+ power_supply_changed(&pda_power_supplies[0]);
-+ else if (usb_irq && irq == usb_irq->start)
-+ power_supply_changed(&pda_power_supplies[1]);
-+ return;
-+}
-+
-+static void charger_timer_func(unsigned long irq)
-+{
-+ update_charger();
-+
-+ /* Okay, charger set. Now wait a bit before notifying supplicants,
-+ * charge power should stabilize. */
-+ supply_timer.data = irq;
-+ mod_timer(&supply_timer,
-+ jiffies + msecs_to_jiffies(pdata->wait_for_charger));
-+ return;
-+}
-+
-+static irqreturn_t power_changed_isr(int irq, void *unused)
-+{
-+ /* Wait a bit before reading ac/usb line status and setting charger,
-+ * because ac/usb status readings may lag from irq. */
-+ charger_timer.data = irq;
-+ mod_timer(&charger_timer,
-+ jiffies + msecs_to_jiffies(pdata->wait_for_status));
-+ return IRQ_HANDLED;
-+}
-+
-+static int pda_power_probe(struct platform_device *pdev)
-+{
-+ int ret = 0;
-+
-+ dev = &pdev->dev;
-+
-+ if (pdev->id != -1) {
-+ dev_err(dev, "it's meaningless to register several "
-+ "pda_powers, use id = -1\n");
-+ ret = -EINVAL;
-+ goto wrongid;
-+ }
-+
-+ pdata = pdev->dev.platform_data;
-+
-+ update_charger();
-+
-+ if (!pdata->wait_for_status)
-+ pdata->wait_for_status = 500;
-+
-+ if (!pdata->wait_for_charger)
-+ pdata->wait_for_charger = 500;
-+
-+ setup_timer(&charger_timer, charger_timer_func, 0);
-+ setup_timer(&supply_timer, supply_timer_func, 0);
-+
-+ ac_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "ac");
-+ usb_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "usb");
-+ if (!ac_irq && !usb_irq) {
-+ dev_err(dev, "no ac/usb irq specified\n");
-+ ret = -ENODEV;
-+ goto noirqs;
-+ }
-+
-+ if (pdata->supplied_to) {
-+ pda_power_supplies[0].supplied_to = pdata->supplied_to;
-+ pda_power_supplies[1].supplied_to = pdata->supplied_to;
-+ pda_power_supplies[0].num_supplicants = pdata->num_supplicants;
-+ pda_power_supplies[1].num_supplicants = pdata->num_supplicants;
-+ }
-+
-+ ret = power_supply_register(&pdev->dev, &pda_power_supplies[0]);
-+ if (ret) {
-+ dev_err(dev, "failed to register %s power supply\n",
-+ pda_power_supplies[0].name);
-+ goto supply0_failed;
-+ }
-+
-+ ret = power_supply_register(&pdev->dev, &pda_power_supplies[1]);
-+ if (ret) {
-+ dev_err(dev, "failed to register %s power supply\n",
-+ pda_power_supplies[1].name);
-+ goto supply1_failed;
-+ }
-+
-+ if (ac_irq) {
-+ ret = request_irq(ac_irq->start, power_changed_isr,
-+ get_irq_flags(ac_irq), ac_irq->name,
-+ &pda_power_supplies[0]);
-+ if (ret) {
-+ dev_err(dev, "request ac irq failed\n");
-+ goto ac_irq_failed;
-+ }
-+ }
-+
-+ if (usb_irq) {
-+ ret = request_irq(usb_irq->start, power_changed_isr,
-+ get_irq_flags(usb_irq), usb_irq->name,
-+ &pda_power_supplies[1]);
-+ if (ret) {
-+ dev_err(dev, "request usb irq failed\n");
-+ goto usb_irq_failed;
-+ }
-+ }
-+
-+ goto success;
-+
-+usb_irq_failed:
-+ if (ac_irq)
-+ free_irq(ac_irq->start, &pda_power_supplies[0]);
-+ac_irq_failed:
-+ power_supply_unregister(&pda_power_supplies[1]);
-+supply1_failed:
-+ power_supply_unregister(&pda_power_supplies[0]);
-+supply0_failed:
-+noirqs:
-+wrongid:
-+success:
-+ return ret;
-+}
-+
-+static int pda_power_remove(struct platform_device *pdev)
-+{
-+ if (usb_irq)
-+ free_irq(usb_irq->start, &pda_power_supplies[1]);
-+ if (ac_irq)
-+ free_irq(ac_irq->start, &pda_power_supplies[0]);
-+ del_timer_sync(&charger_timer);
-+ del_timer_sync(&supply_timer);
-+ power_supply_unregister(&pda_power_supplies[1]);
-+ power_supply_unregister(&pda_power_supplies[0]);
-+ return 0;
-+}
-+
-+static struct platform_driver pda_power_pdrv = {
-+ .driver = {
-+ .name = "pda-power",
-+ },
-+ .probe = pda_power_probe,
-+ .remove = pda_power_remove,
-+};
-+
-+static int __init pda_power_init(void)
-+{
-+ return platform_driver_register(&pda_power_pdrv);
-+}
-+
-+static void __exit pda_power_exit(void)
-+{
-+ platform_driver_unregister(&pda_power_pdrv);
-+ return;
-+}
-+
-+module_init(pda_power_init);
-+module_exit(pda_power_exit);
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>");
-Index: linux-2.6.22/drivers/power/pmu_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/pmu_battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,215 @@
-+/*
-+ * Battery class driver for Apple PMU
-+ *
-+ * Copyright © 2006 David Woodhouse <dwmw2@infradead.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/err.h>
-+#include <linux/power_supply.h>
-+#include <linux/adb.h>
-+#include <linux/pmu.h>
-+
-+static struct pmu_battery_dev {
-+ struct power_supply bat;
-+ struct pmu_battery_info *pbi;
-+ char name[16];
-+ int propval;
-+} *pbats[PMU_MAX_BATTERIES];
-+
-+#define to_pmu_battery_dev(x) container_of(x, struct pmu_battery_dev, bat)
-+
-+/*********************************************************************
-+ * Power
-+ *********************************************************************/
-+
-+static int pmu_get_ac_prop(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_ONLINE:
-+ val->intval = (!!(pmu_power_flags & PMU_PWR_AC_PRESENT)) ||
-+ (pmu_battery_count == 0);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property pmu_ac_props[] = {
-+ POWER_SUPPLY_PROP_ONLINE,
-+};
-+
-+static struct power_supply pmu_ac = {
-+ .name = "pmu-ac",
-+ .type = POWER_SUPPLY_TYPE_MAINS,
-+ .properties = pmu_ac_props,
-+ .num_properties = ARRAY_SIZE(pmu_ac_props),
-+ .get_property = pmu_get_ac_prop,
-+};
-+
-+/*********************************************************************
-+ * Battery properties
-+ *********************************************************************/
-+
-+static char *pmu_batt_types[] = {
-+ "Smart", "Comet", "Hooper", "Unknown"
-+};
-+
-+static char *pmu_bat_get_model_name(struct pmu_battery_info *pbi)
-+{
-+ switch (pbi->flags & PMU_BATT_TYPE_MASK) {
-+ case PMU_BATT_TYPE_SMART:
-+ return pmu_batt_types[0];
-+ case PMU_BATT_TYPE_COMET:
-+ return pmu_batt_types[1];
-+ case PMU_BATT_TYPE_HOOPER:
-+ return pmu_batt_types[2];
-+ default: break;
-+ }
-+ return pmu_batt_types[3];
-+}
-+
-+static int pmu_bat_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ struct pmu_battery_dev *pbat = to_pmu_battery_dev(psy);
-+ struct pmu_battery_info *pbi = pbat->pbi;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ if (pbi->flags & PMU_BATT_CHARGING)
-+ val->intval = POWER_SUPPLY_STATUS_CHARGING;
-+ else
-+ val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
-+ break;
-+ case POWER_SUPPLY_PROP_PRESENT:
-+ val->intval = !!(pbi->flags & PMU_BATT_PRESENT);
-+ break;
-+ case POWER_SUPPLY_PROP_MODEL_NAME:
-+ val->strval = pmu_bat_get_model_name(pbi);
-+ break;
-+ case POWER_SUPPLY_PROP_ENERGY_AVG:
-+ val->intval = pbi->charge * 1000; /* mWh -> µWh */
-+ break;
-+ case POWER_SUPPLY_PROP_ENERGY_FULL:
-+ val->intval = pbi->max_charge * 1000; /* mWh -> µWh */
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_AVG:
-+ val->intval = pbi->amperage * 1000; /* mA -> µA */
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_AVG:
-+ val->intval = pbi->voltage * 1000; /* mV -> µV */
-+ break;
-+ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG:
-+ val->intval = pbi->time_remaining;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property pmu_bat_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_PRESENT,
-+ POWER_SUPPLY_PROP_MODEL_NAME,
-+ POWER_SUPPLY_PROP_ENERGY_AVG,
-+ POWER_SUPPLY_PROP_ENERGY_FULL,
-+ POWER_SUPPLY_PROP_CURRENT_AVG,
-+ POWER_SUPPLY_PROP_VOLTAGE_AVG,
-+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
-+};
-+
-+/*********************************************************************
-+ * Initialisation
-+ *********************************************************************/
-+
-+static struct platform_device *bat_pdev;
-+
-+static int __init pmu_bat_init(void)
-+{
-+ int ret;
-+ int i;
-+
-+ bat_pdev = platform_device_register_simple("pmu-battery",
-+ 0, NULL, 0);
-+ if (IS_ERR(bat_pdev)) {
-+ ret = PTR_ERR(bat_pdev);
-+ goto pdev_register_failed;
-+ }
-+
-+ ret = power_supply_register(&bat_pdev->dev, &pmu_ac);
-+ if (ret)
-+ goto ac_register_failed;
-+
-+ for (i = 0; i < pmu_battery_count; i++) {
-+ struct pmu_battery_dev *pbat = kzalloc(sizeof(*pbat),
-+ GFP_KERNEL);
-+ if (!pbat)
-+ break;
-+
-+ sprintf(pbat->name, "PMU battery %d", i);
-+ pbat->bat.name = pbat->name;
-+ pbat->bat.properties = pmu_bat_props;
-+ pbat->bat.num_properties = ARRAY_SIZE(pmu_bat_props);
-+ pbat->bat.get_property = pmu_bat_get_property;
-+ pbat->pbi = &pmu_batteries[i];
-+
-+ ret = power_supply_register(&bat_pdev->dev, &pbat->bat);
-+ if (ret) {
-+ kfree(pbat);
-+ goto battery_register_failed;
-+ }
-+ pbats[i] = pbat;
-+ }
-+
-+ goto success;
-+
-+battery_register_failed:
-+ while (i--) {
-+ if (!pbats[i])
-+ continue;
-+ power_supply_unregister(&pbats[i]->bat);
-+ kfree(pbats[i]);
-+ }
-+ power_supply_unregister(&pmu_ac);
-+ac_register_failed:
-+ platform_device_unregister(bat_pdev);
-+pdev_register_failed:
-+success:
-+ return ret;
-+}
-+
-+static void __exit pmu_bat_exit(void)
-+{
-+ int i;
-+
-+ for (i = 0; i < PMU_MAX_BATTERIES; i++) {
-+ if (!pbats[i])
-+ continue;
-+ power_supply_unregister(&pbats[i]->bat);
-+ kfree(pbats[i]);
-+ }
-+ power_supply_unregister(&pmu_ac);
-+ platform_device_unregister(bat_pdev);
-+
-+ return;
-+}
-+
-+module_init(pmu_bat_init);
-+module_exit(pmu_bat_exit);
-+
-+MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("PMU battery driver");
-Index: linux-2.6.22/drivers/power/power_supply_core.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply_core.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,168 @@
-+/*
-+ * Universal power supply monitor class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/init.h>
-+#include <linux/device.h>
-+#include <linux/err.h>
-+#include <linux/power_supply.h>
-+#include "power_supply.h"
-+
-+struct class *power_supply_class;
-+
-+static void power_supply_changed_work(struct work_struct *work)
-+{
-+ struct power_supply *psy = container_of(work, struct power_supply,
-+ changed_work);
-+ int i;
-+
-+ dev_dbg(psy->dev, "%s\n", __FUNCTION__);
-+
-+ for (i = 0; i < psy->num_supplicants; i++) {
-+ struct device *dev;
-+
-+ down(&power_supply_class->sem);
-+ list_for_each_entry(dev, &power_supply_class->devices, node) {
-+ struct power_supply *pst = dev_get_drvdata(dev);
-+
-+ if (!strcmp(psy->supplied_to[i], pst->name)) {
-+ if (pst->external_power_changed)
-+ pst->external_power_changed(pst);
-+ }
-+ }
-+ up(&power_supply_class->sem);
-+ }
-+
-+ power_supply_update_leds(psy);
-+
-+ kobject_uevent(&psy->dev->kobj, KOBJ_CHANGE);
-+
-+ return;
-+}
-+
-+void power_supply_changed(struct power_supply *psy)
-+{
-+ dev_dbg(psy->dev, "%s\n", __FUNCTION__);
-+
-+ schedule_work(&psy->changed_work);
-+
-+ return;
-+}
-+
-+int power_supply_am_i_supplied(struct power_supply *psy)
-+{
-+ union power_supply_propval ret = {0,};
-+ struct device *dev;
-+
-+ down(&power_supply_class->sem);
-+ list_for_each_entry(dev, &power_supply_class->devices, node) {
-+ struct power_supply *epsy = dev_get_drvdata(dev);
-+ int i;
-+
-+ for (i = 0; i < epsy->num_supplicants; i++) {
-+ if (!strcmp(epsy->supplied_to[i], psy->name)) {
-+ if (epsy->get_property(epsy,
-+ POWER_SUPPLY_PROP_ONLINE, &ret))
-+ continue;
-+ if (ret.intval)
-+ goto out;
-+ }
-+ }
-+ }
-+out:
-+ up(&power_supply_class->sem);
-+
-+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, ret.intval);
-+
-+ return ret.intval;
-+}
-+
-+int power_supply_register(struct device *parent, struct power_supply *psy)
-+{
-+ int rc = 0;
-+
-+ psy->dev = device_create(power_supply_class, parent, 0,
-+ "%s", psy->name);
-+ if (IS_ERR(psy->dev)) {
-+ rc = PTR_ERR(psy->dev);
-+ goto dev_create_failed;
-+ }
-+
-+ dev_set_drvdata(psy->dev, psy);
-+
-+ INIT_WORK(&psy->changed_work, power_supply_changed_work);
-+
-+ rc = power_supply_create_attrs(psy);
-+ if (rc)
-+ goto create_attrs_failed;
-+
-+ rc = power_supply_create_triggers(psy);
-+ if (rc)
-+ goto create_triggers_failed;
-+
-+ power_supply_changed(psy);
-+
-+ goto success;
-+
-+create_triggers_failed:
-+ power_supply_remove_attrs(psy);
-+create_attrs_failed:
-+ device_unregister(psy->dev);
-+dev_create_failed:
-+success:
-+ return rc;
-+}
-+
-+void power_supply_unregister(struct power_supply *psy)
-+{
-+ flush_scheduled_work();
-+ power_supply_remove_triggers(psy);
-+ power_supply_remove_attrs(psy);
-+ device_unregister(psy->dev);
-+ return;
-+}
-+
-+static int __init power_supply_class_init(void)
-+{
-+ power_supply_class = class_create(THIS_MODULE, "power_supply");
-+
-+ if (IS_ERR(power_supply_class))
-+ return PTR_ERR(power_supply_class);
-+
-+ power_supply_class->dev_uevent = power_supply_uevent;
-+
-+ return 0;
-+}
-+
-+static void __exit power_supply_class_exit(void)
-+{
-+ class_destroy(power_supply_class);
-+ return;
-+}
-+
-+EXPORT_SYMBOL_GPL(power_supply_changed);
-+EXPORT_SYMBOL_GPL(power_supply_am_i_supplied);
-+EXPORT_SYMBOL_GPL(power_supply_register);
-+EXPORT_SYMBOL_GPL(power_supply_unregister);
-+
-+/* exported for the APM Power driver, APM emulation */
-+EXPORT_SYMBOL_GPL(power_supply_class);
-+
-+subsys_initcall(power_supply_class_init);
-+module_exit(power_supply_class_exit);
-+
-+MODULE_DESCRIPTION("Universal power supply monitor class");
-+MODULE_AUTHOR("Ian Molton <spyro@f2s.com>, "
-+ "Szabolcs Gyurko, "
-+ "Anton Vorontsov <cbou@mail.ru>");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/drivers/power/power_supply.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply.h 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,42 @@
-+/*
-+ * Functions private to power supply class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#ifdef CONFIG_SYSFS
-+
-+extern int power_supply_create_attrs(struct power_supply *psy);
-+extern void power_supply_remove_attrs(struct power_supply *psy);
-+extern int power_supply_uevent(struct device *dev, char **envp, int num_envp,
-+ char *buffer, int buffer_size);
-+
-+#else
-+
-+static inline int power_supply_create_attrs(struct power_supply *psy)
-+{ return 0; }
-+static inline void power_supply_remove_attrs(struct power_supply *psy) {}
-+#define power_supply_uevent NULL
-+
-+#endif /* CONFIG_SYSFS */
-+
-+#ifdef CONFIG_LEDS_TRIGGERS
-+
-+extern void power_supply_update_leds(struct power_supply *psy);
-+extern int power_supply_create_triggers(struct power_supply *psy);
-+extern void power_supply_remove_triggers(struct power_supply *psy);
-+
-+#else
-+
-+static inline void power_supply_update_leds(struct power_supply *psy) {}
-+static inline int power_supply_create_triggers(struct power_supply *psy)
-+{ return 0; }
-+static inline void power_supply_remove_triggers(struct power_supply *psy) {}
-+
-+#endif /* CONFIG_LEDS_TRIGGERS */
-Index: linux-2.6.22/drivers/power/power_supply_leds.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply_leds.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,188 @@
-+/*
-+ * LEDs triggers for power supply class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#include <linux/power_supply.h>
-+
-+/* If we have hwtimer trigger, then use it to blink charging LED */
-+
-+#if defined(CONFIG_LEDS_TRIGGER_HWTIMER) || \
-+ (defined(CONFIG_BATTERY_MODULE) && \
-+ defined(CONFIG_LEDS_TRIGGER_HWTIMER_MODULE))
-+ #define led_trigger_register_charging led_trigger_register_hwtimer
-+ #define led_trigger_unregister_charging led_trigger_unregister_hwtimer
-+#else
-+ #define led_trigger_register_charging led_trigger_register_simple
-+ #define led_trigger_unregister_charging led_trigger_unregister_simple
-+#endif
-+
-+/* Battery specific LEDs triggers. */
-+
-+static void power_supply_update_bat_leds(struct power_supply *psy)
-+{
-+ union power_supply_propval status;
-+
-+ if (psy->get_property(psy, POWER_SUPPLY_PROP_STATUS, &status))
-+ return;
-+
-+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, status.intval);
-+
-+ switch(status.intval) {
-+ case POWER_SUPPLY_STATUS_FULL:
-+ led_trigger_event(psy->charging_full_trig, LED_FULL);
-+ led_trigger_event(psy->charging_trig, LED_OFF);
-+ led_trigger_event(psy->full_trig, LED_FULL);
-+ break;
-+ case POWER_SUPPLY_STATUS_CHARGING:
-+ led_trigger_event(psy->charging_full_trig, LED_FULL);
-+ led_trigger_event(psy->charging_trig, LED_FULL);
-+ led_trigger_event(psy->full_trig, LED_OFF);
-+ break;
-+ default:
-+ led_trigger_event(psy->charging_full_trig, LED_OFF);
-+ led_trigger_event(psy->charging_trig, LED_OFF);
-+ led_trigger_event(psy->full_trig, LED_OFF);
-+ break;
-+ }
-+
-+ return;
-+}
-+
-+static int power_supply_create_bat_triggers(struct power_supply *psy)
-+{
-+ int rc = 0;
-+
-+ psy->charging_full_trig_name = kmalloc(strlen(psy->name) +
-+ sizeof("-charging-or-full"), GFP_KERNEL);
-+ if (!psy->charging_full_trig_name)
-+ goto charging_full_failed;
-+
-+ psy->charging_trig_name = kmalloc(strlen(psy->name) +
-+ sizeof("-charging"), GFP_KERNEL);
-+ if (!psy->charging_trig_name)
-+ goto charging_failed;
-+
-+ psy->full_trig_name = kmalloc(strlen(psy->name) +
-+ sizeof("-full"), GFP_KERNEL);
-+ if (!psy->full_trig_name)
-+ goto full_failed;
-+
-+ strcpy(psy->charging_full_trig_name, psy->name);
-+ strcat(psy->charging_full_trig_name, "-charging-or-full");
-+ strcpy(psy->charging_trig_name, psy->name);
-+ strcat(psy->charging_trig_name, "-charging");
-+ strcpy(psy->full_trig_name, psy->name);
-+ strcat(psy->full_trig_name, "-full");
-+
-+ led_trigger_register_simple(psy->charging_full_trig_name,
-+ &psy->charging_full_trig);
-+ led_trigger_register_charging(psy->charging_trig_name,
-+ &psy->charging_trig);
-+ led_trigger_register_simple(psy->full_trig_name,
-+ &psy->full_trig);
-+
-+ goto success;
-+
-+full_failed:
-+ kfree(psy->charging_trig_name);
-+charging_failed:
-+ kfree(psy->charging_full_trig_name);
-+charging_full_failed:
-+ rc = -ENOMEM;
-+success:
-+ return rc;
-+}
-+
-+static void power_supply_remove_bat_triggers(struct power_supply *psy)
-+{
-+ led_trigger_unregister_simple(psy->charging_full_trig);
-+ led_trigger_unregister_charging(psy->charging_trig);
-+ led_trigger_unregister_simple(psy->full_trig);
-+ kfree(psy->full_trig_name);
-+ kfree(psy->charging_trig_name);
-+ kfree(psy->charging_full_trig_name);
-+ return;
-+}
-+
-+/* Generated power specific LEDs triggers. */
-+
-+static void power_supply_update_gen_leds(struct power_supply *psy)
-+{
-+ union power_supply_propval online;
-+
-+ if (psy->get_property(psy, POWER_SUPPLY_PROP_ONLINE, &online))
-+ return;
-+
-+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, online.intval);
-+
-+ if (online.intval)
-+ led_trigger_event(psy->online_trig, LED_FULL);
-+ else
-+ led_trigger_event(psy->online_trig, LED_OFF);
-+
-+ return;
-+}
-+
-+static int power_supply_create_gen_triggers(struct power_supply *psy)
-+{
-+ int rc = 0;
-+
-+ psy->online_trig_name = kmalloc(strlen(psy->name) + sizeof("-online"),
-+ GFP_KERNEL);
-+ if (!psy->online_trig_name)
-+ goto online_failed;
-+
-+ strcpy(psy->online_trig_name, psy->name);
-+ strcat(psy->online_trig_name, "-online");
-+
-+ led_trigger_register_simple(psy->online_trig_name, &psy->online_trig);
-+
-+ goto success;
-+
-+online_failed:
-+ rc = -ENOMEM;
-+success:
-+ return rc;
-+}
-+
-+static void power_supply_remove_gen_triggers(struct power_supply *psy)
-+{
-+ led_trigger_unregister_simple(psy->online_trig);
-+ kfree(psy->online_trig_name);
-+ return;
-+}
-+
-+/* Choice what triggers to create&update. */
-+
-+void power_supply_update_leds(struct power_supply *psy)
-+{
-+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY)
-+ power_supply_update_bat_leds(psy);
-+ else
-+ power_supply_update_gen_leds(psy);
-+ return;
-+}
-+
-+int power_supply_create_triggers(struct power_supply *psy)
-+{
-+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY)
-+ return power_supply_create_bat_triggers(psy);
-+ return power_supply_create_gen_triggers(psy);
-+}
-+
-+void power_supply_remove_triggers(struct power_supply *psy)
-+{
-+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY)
-+ power_supply_remove_bat_triggers(psy);
-+ else
-+ power_supply_remove_gen_triggers(psy);
-+ return;
-+}
-Index: linux-2.6.22/drivers/power/power_supply_sysfs.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply_sysfs.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,289 @@
-+/*
-+ * Sysfs interface for the universal power supply monitor class
-+ *
-+ * Copyright © 2007 David Woodhouse <dwmw2@infradead.org>
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#include <linux/ctype.h>
-+#include <linux/power_supply.h>
-+
-+/*
-+ * This is because the name "current" breaks the device attr macro.
-+ * The "current" word resolvs to "(get_current())" so instead of
-+ * "current" "(get_current())" appears in the sysfs.
-+ *
-+ * The source of this definition is the device.h which calls __ATTR
-+ * macro in sysfs.h which calls the __stringify macro.
-+ *
-+ * Only modification that the name is not tried to be resolved
-+ * (as a macro let's say).
-+ */
-+
-+#define POWER_SUPPLY_ATTR(_name) \
-+{ \
-+ .attr = { .name = #_name, .mode = 0444, .owner = THIS_MODULE }, \
-+ .show = power_supply_show_property, \
-+ .store = NULL, \
-+}
-+
-+static struct device_attribute power_supply_attrs[];
-+
-+static ssize_t power_supply_show_property(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf) {
-+ static char *status_text[] = {
-+ "Unknown", "Charging", "Discharging", "Not charging", "Full"
-+ };
-+ static char *health_text[] = {
-+ "Unknown", "Good", "Overheat", "Dead"
-+ };
-+ static char *technology_text[] = {
-+ "Unknown", "NiMH", "Li-ion", "Li-poly"
-+ };
-+ static char *capacity_level_text[] = {
-+ "Unknown", "Critical", "Low", "Normal", "High", "Full"
-+ };
-+ ssize_t ret;
-+ struct power_supply *psy = dev_get_drvdata(dev);
-+ const ptrdiff_t off = attr - power_supply_attrs;
-+ union power_supply_propval value;
-+
-+ ret = psy->get_property(psy, off, &value);
-+
-+ if (ret < 0) {
-+ dev_err(dev, "driver failed to report `%s' property\n",
-+ attr->attr.name);
-+ return ret;
-+ }
-+
-+ if (off == POWER_SUPPLY_PROP_STATUS)
-+ return sprintf(buf, "%s\n", status_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_HEALTH)
-+ return sprintf(buf, "%s\n", health_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_TECHNOLOGY)
-+ return sprintf(buf, "%s\n", technology_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_CAPACITY_LEVEL)
-+ return sprintf(buf, "%s\n",
-+ capacity_level_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_MODEL_NAME)
-+ return sprintf(buf, "%s\n", value.strval);
-+
-+ return sprintf(buf, "%d\n", value.intval);
-+}
-+
-+/* Must be in the same order as POWER_SUPPLY_PROP_* */
-+static struct device_attribute power_supply_attrs[] = {
-+ /* Properties of type `int' */
-+ POWER_SUPPLY_ATTR(status),
-+ POWER_SUPPLY_ATTR(health),
-+ POWER_SUPPLY_ATTR(present),
-+ POWER_SUPPLY_ATTR(online),
-+ POWER_SUPPLY_ATTR(technology),
-+ POWER_SUPPLY_ATTR(voltage_max_design),
-+ POWER_SUPPLY_ATTR(voltage_min_design),
-+ POWER_SUPPLY_ATTR(voltage_now),
-+ POWER_SUPPLY_ATTR(voltage_avg),
-+ POWER_SUPPLY_ATTR(current_now),
-+ POWER_SUPPLY_ATTR(current_avg),
-+ POWER_SUPPLY_ATTR(charge_full_design),
-+ POWER_SUPPLY_ATTR(charge_empty_design),
-+ POWER_SUPPLY_ATTR(charge_full),
-+ POWER_SUPPLY_ATTR(charge_empty),
-+ POWER_SUPPLY_ATTR(charge_now),
-+ POWER_SUPPLY_ATTR(charge_avg),
-+ POWER_SUPPLY_ATTR(energy_full_design),
-+ POWER_SUPPLY_ATTR(energy_empty_design),
-+ POWER_SUPPLY_ATTR(energy_full),
-+ POWER_SUPPLY_ATTR(energy_empty),
-+ POWER_SUPPLY_ATTR(energy_now),
-+ POWER_SUPPLY_ATTR(energy_avg),
-+ POWER_SUPPLY_ATTR(capacity),
-+ POWER_SUPPLY_ATTR(capacity_level),
-+ POWER_SUPPLY_ATTR(temp),
-+ POWER_SUPPLY_ATTR(temp_ambient),
-+ POWER_SUPPLY_ATTR(time_to_empty_now),
-+ POWER_SUPPLY_ATTR(time_to_empty_avg),
-+ POWER_SUPPLY_ATTR(time_to_full_now),
-+ POWER_SUPPLY_ATTR(time_to_full_avg),
-+ /* Properties of type `const char *' */
-+ POWER_SUPPLY_ATTR(model_name),
-+};
-+
-+static ssize_t power_supply_show_static_attrs(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf) {
-+ static char *type_text[] = { "Battery", "UPS", "Mains", "USB" };
-+ struct power_supply *psy = dev_get_drvdata(dev);
-+
-+ return sprintf(buf, "%s\n", type_text[psy->type]);
-+}
-+
-+static struct device_attribute power_supply_static_attrs[] = {
-+ __ATTR(type, 0444, power_supply_show_static_attrs, NULL),
-+};
-+
-+int power_supply_create_attrs(struct power_supply *psy)
-+{
-+ int rc = 0;
-+ int i, j;
-+
-+ for (i = 0; i < ARRAY_SIZE(power_supply_static_attrs); i++) {
-+ rc = device_create_file(psy->dev,
-+ &power_supply_static_attrs[i]);
-+ if (rc)
-+ goto statics_failed;
-+ }
-+
-+ for (j = 0; j < psy->num_properties; j++) {
-+ rc = device_create_file(psy->dev,
-+ &power_supply_attrs[psy->properties[j]]);
-+ if (rc)
-+ goto dynamics_failed;
-+ }
-+
-+ goto succeed;
-+
-+dynamics_failed:
-+ while (j--)
-+ device_remove_file(psy->dev,
-+ &power_supply_attrs[psy->properties[j]]);
-+statics_failed:
-+ while (i--)
-+ device_remove_file(psy->dev,
-+ &power_supply_static_attrs[psy->properties[i]]);
-+succeed:
-+ return rc;
-+}
-+
-+void power_supply_remove_attrs(struct power_supply *psy)
-+{
-+ int i;
-+
-+ for (i = 0; i < ARRAY_SIZE(power_supply_static_attrs); i++)
-+ device_remove_file(psy->dev,
-+ &power_supply_static_attrs[i]);
-+
-+ for (i = 0; i < psy->num_properties; i++)
-+ device_remove_file(psy->dev,
-+ &power_supply_attrs[psy->properties[i]]);
-+
-+ return;
-+}
-+
-+static char *kstruprdup(const char *str, gfp_t gfp)
-+{
-+ char *ret, *ustr;
-+
-+ ustr = ret = kmalloc(strlen(str) + 1, gfp);
-+
-+ if (!ret)
-+ return NULL;
-+
-+ while (*str)
-+ *ustr++ = toupper(*str++);
-+
-+ *ustr = 0;
-+
-+ return ret;
-+}
-+
-+int power_supply_uevent(struct device *dev, char **envp, int num_envp,
-+ char *buffer, int buffer_size)
-+{
-+ struct power_supply *psy = dev_get_drvdata(dev);
-+ int i = 0, length = 0, ret = 0, j;
-+ char *prop_buf;
-+ char *attrname;
-+
-+ dev_dbg(dev, "uevent\n");
-+
-+ if (!psy) {
-+ dev_dbg(dev, "No power supply yet\n");
-+ return ret;
-+ }
-+
-+ dev_dbg(dev, "POWER_SUPPLY_NAME=%s\n", psy->name);
-+
-+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-+ &length, "POWER_SUPPLY_NAME=%s", psy->name);
-+ if (ret)
-+ return ret;
-+
-+ prop_buf = (char *)get_zeroed_page(GFP_KERNEL);
-+ if (!prop_buf)
-+ return -ENOMEM;
-+
-+ for (j = 0; j < ARRAY_SIZE(power_supply_static_attrs); j++) {
-+ struct device_attribute *attr;
-+ char *line;
-+
-+ attr = &power_supply_static_attrs[j];
-+
-+ ret = power_supply_show_static_attrs(dev, attr, prop_buf);
-+ if (ret < 0)
-+ goto out;
-+
-+ line = strchr(prop_buf, '\n');
-+ if (line)
-+ *line = 0;
-+
-+ attrname = kstruprdup(attr->attr.name, GFP_KERNEL);
-+ if (!attrname) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+
-+ dev_dbg(dev, "Static prop %s=%s\n", attrname, prop_buf);
-+
-+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-+ &length, "POWER_SUPPLY_%s=%s",
-+ attrname, prop_buf);
-+ kfree(attrname);
-+ if (ret)
-+ goto out;
-+ }
-+
-+ dev_dbg(dev, "%zd dynamic props\n", psy->num_properties);
-+
-+ for (j = 0; j < psy->num_properties; j++) {
-+ struct device_attribute *attr;
-+ char *line;
-+
-+ attr = &power_supply_attrs[psy->properties[j]];
-+
-+ ret = power_supply_show_property(dev, attr, prop_buf);
-+ if (ret < 0)
-+ goto out;
-+
-+ line = strchr(prop_buf, '\n');
-+ if (line)
-+ *line = 0;
-+
-+ attrname = kstruprdup(attr->attr.name, GFP_KERNEL);
-+ if (!attrname) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+
-+ dev_dbg(dev, "prop %s=%s\n", attrname, prop_buf);
-+
-+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-+ &length, "POWER_SUPPLY_%s=%s",
-+ attrname, prop_buf);
-+ kfree(attrname);
-+ if (ret)
-+ goto out;
-+ }
-+
-+out:
-+ free_page((unsigned long)prop_buf);
-+
-+ return ret;
-+}
-Index: linux-2.6.22/drivers/power/simpad-battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/simpad-battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,242 @@
-+/*
-+ * linux/drivers/misc/simpad-battery.c
-+ *
-+ * Copyright (C) 2005 Holger Hans Peter Freyther
-+ * Copyright (C) 2001 Juergen Messerer
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License.
-+ *
-+ * Read the Battery Level through the UCB1x00 chip. T-Sinuspad is
-+ * unsupported for now.
-+ *
-+ */
-+
-+#include <linux/battery.h>
-+#include <asm/dma.h>
-+#include "ucb1x00.h"
-+
-+
-+/*
-+ * Conversion from AD -> mV
-+ * 7.5V = 1023 7.3313mV/Digit
-+ *
-+ * 400 Units == 9.7V
-+ * a = ADC value
-+ * 21 = ADC error
-+ * 12600 = Divident to get 2*7.3242
-+ * 860 = Divider to get 2*7.3242
-+ * 170 = Voltagedrop over
-+ */
-+#define CALIBRATE_BATTERY(a) ((((a + 21)*12600)/860) + 170)
-+
-+/*
-+ * We have two types of batteries a small and a large one
-+ * To get the right value we to distinguish between those two
-+ * 450 Units == 15 V
-+ */
-+#define CALIBRATE_SUPPLY(a) (((a) * 1500) / 45)
-+#define MIN_SUPPLY 12000 /* Less then 12V means no powersupply */
-+
-+/*
-+ * Charging Current
-+ * if value is >= 50 then charging is on
-+ */
-+#define CALIBRATE_CHARGING(a) (((a)* 1000)/(152/4)))
-+
-+struct simpad_battery_t {
-+ struct battery battery;
-+ struct ucb1x00* ucb;
-+
-+ /*
-+ * Variables for the values to one time support
-+ * T-Sinuspad as well
-+ */
-+ int min_voltage;
-+ int min_current;
-+ int min_charge;
-+
-+ int max_voltage;
-+ int max_current;
-+ int max_charge;
-+
-+ int min_supply;
-+ int charging_led_label;
-+ int charging_max_label;
-+ int batt_full;
-+ int batt_low;
-+ int batt_critical;
-+ int batt_empty;
-+};
-+
-+static int simpad_get_min_voltage(struct battery* _battery )
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->min_voltage;
-+}
-+
-+static int simpad_get_min_current(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->min_current;
-+}
-+
-+static int simpad_get_min_charge(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->min_charge;
-+}
-+
-+static int simpad_get_max_voltage(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->max_voltage;
-+}
-+
-+static int simpad_get_max_current(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->max_current;
-+}
-+
-+static int simpad_get_max_charge(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->max_charge;
-+}
-+
-+static int simpad_get_temp(struct battery* _battery)
-+{
-+ return 0;
-+}
-+
-+static int simpad_get_voltage(struct battery* _battery)
-+{
-+ int val;
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+
-+
-+ ucb1x00_adc_enable(battery->ucb);
-+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD1, UCB_NOSYNC);
-+ ucb1x00_adc_disable(battery->ucb);
-+
-+ return CALIBRATE_BATTERY(val);
-+}
-+
-+static int simpad_get_current(struct battery* _battery)
-+{
-+ int val;
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+
-+ ucb1x00_adc_enable(battery->ucb);
-+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD3, UCB_NOSYNC);
-+ ucb1x00_adc_disable(battery->ucb);
-+
-+ return val;
-+}
-+
-+static int simpad_get_charge(struct battery* _battery)
-+{
-+ int val;
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+
-+ ucb1x00_adc_enable(battery->ucb);
-+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD2, UCB_NOSYNC);
-+ ucb1x00_adc_disable(battery->ucb);
-+
-+ return CALIBRATE_SUPPLY(val);
-+
-+}
-+
-+static int simpad_get_status(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)(_battery);
-+ int vcharger = simpad_get_voltage(_battery);
-+ int icharger = simpad_get_current(_battery);
-+
-+ int status = BATTERY_STATUS_UNKNOWN;
-+ if(icharger > battery->charging_led_label)
-+ status = BATTERY_STATUS_CHARGING;
-+ else if(vcharger > battery->min_supply)
-+ status = BATTERY_STATUS_NOT_CHARGING;
-+ else
-+ status = BATTERY_STATUS_DISCHARGING;
-+
-+ return status;
-+}
-+
-+static struct simpad_battery_t simpad_battery = {
-+ .battery = {
-+ .get_min_voltage = simpad_get_min_voltage,
-+ .get_min_current = simpad_get_min_current,
-+ .get_min_charge = simpad_get_min_charge,
-+ .get_max_voltage = simpad_get_max_voltage,
-+ .get_max_current = simpad_get_max_current,
-+ .get_max_charge = simpad_get_max_charge,
-+ .get_temp = simpad_get_temp,
-+ .get_voltage = simpad_get_voltage,
-+ .get_current = simpad_get_current,
-+ .get_charge = simpad_get_charge,
-+ .get_status = simpad_get_status,
-+ },
-+ .min_voltage = 0,
-+ .min_current = 0,
-+ .min_charge = 0,
-+ .max_voltage = 0,
-+ .max_current = 0,
-+ .max_charge = 0,
-+
-+ .min_supply = 1200,
-+ .charging_led_label = 18,
-+ .charging_max_label = 265,
-+ .batt_full = 8300,
-+ .batt_low = 7300,
-+ .batt_critical = 6800,
-+ .batt_empty = 6500,
-+};
-+
-+
-+
-+/*
-+ * UCB glue code
-+ */
-+static int ucb1x00_battery_add(struct class_device *dev)
-+{
-+ struct ucb1x00 *ucb = classdev_to_ucb1x00(dev);
-+ simpad_battery.ucb = ucb;
-+
-+ battery_class_register(&simpad_battery.battery);
-+
-+ return 0;
-+}
-+
-+static void ucb1x00_battery_remove(struct class_device *dev)
-+{
-+ return battery_class_unregister(&simpad_battery.battery);
-+}
-+
-+
-+static struct ucb1x00_class_interface ucb1x00_battery_interface = {
-+ .interface = {
-+ .add = ucb1x00_battery_add,
-+ .remove = ucb1x00_battery_remove,
-+ },
-+};
-+
-+
-+static int __init battery_register(void)
-+{
-+ return ucb1x00_register_interface(&ucb1x00_battery_interface);
-+}
-+
-+static void __exit battery_unregister(void)
-+{
-+ ucb1x00_unregister_interface(&ucb1x00_battery_interface);
-+}
-+
-+module_init(battery_register);
-+module_exit(battery_unregister);
-+
-+MODULE_AUTHOR("Holger Hans Peter Freyther");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/arch/arm/Kconfig
-===================================================================
---- linux-2.6.22.orig/arch/arm/Kconfig 2007-08-23 12:17:42.000000000 +0200
-+++ linux-2.6.22/arch/arm/Kconfig 2007-08-23 12:22:28.000000000 +0200
-@@ -1016,6 +1016,8 @@
-
- source "drivers/w1/Kconfig"
-
-+source "drivers/power/Kconfig"
-+
- source "drivers/hwmon/Kconfig"
-
- #source "drivers/l3/Kconfig"
-Index: linux-2.6.22/drivers/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/Kconfig 2007-08-23 12:21:27.000000000 +0200
-+++ linux-2.6.22/drivers/Kconfig 2007-08-23 12:22:03.000000000 +0200
-@@ -54,6 +54,8 @@
-
- source "drivers/w1/Kconfig"
-
-+source "drivers/power/Kconfig"
-+
- source "drivers/hwmon/Kconfig"
-
- source "drivers/mfd/Kconfig"
-Index: linux-2.6.22/drivers/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/Makefile 2007-08-23 12:33:58.000000000 +0200
-+++ linux-2.6.22/drivers/Makefile 2007-08-23 12:34:34.000000000 +0200
-@@ -61,6 +61,7 @@
- obj-$(CONFIG_RTC_LIB) += rtc/
- obj-y += i2c/
- obj-$(CONFIG_W1) += w1/
-+obj-$(CONFIG_POWER_SUPPLY) += power/
- obj-$(CONFIG_HWMON) += hwmon/
- obj-$(CONFIG_PHONE) += telephony/
- obj-$(CONFIG_MD) += md/
-Index: linux-2.6.22/include/linux/power_supply.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/power_supply.h 2007-08-23 12:37:10.000000000 +0200
-@@ -0,0 +1,175 @@
-+/*
-+ * Universal power supply monitor class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#ifndef __LINUX_POWER_SUPPLY_H__
-+#define __LINUX_POWER_SUPPLY_H__
-+
-+#include <linux/device.h>
-+#include <linux/workqueue.h>
-+#include <linux/leds.h>
-+
-+/*
-+ * All voltages, currents, charges, energies, time and temperatures in uV,
-+ * uA, uAh, uWh, seconds and tenths of degree Celsius unless otherwise
-+ * stated. It's driver's job to convert its raw values to units in which
-+ * this class operates.
-+ */
-+
-+/*
-+ * For systems where the charger determines the maximum battery capacity
-+ * the min and max fields should be used to present these values to user
-+ * space. Unused/unknown fields will not appear in sysfs.
-+ */
-+
-+enum {
-+ POWER_SUPPLY_STATUS_UNKNOWN = 0,
-+ POWER_SUPPLY_STATUS_CHARGING,
-+ POWER_SUPPLY_STATUS_DISCHARGING,
-+ POWER_SUPPLY_STATUS_NOT_CHARGING,
-+ POWER_SUPPLY_STATUS_FULL,
-+};
-+
-+enum {
-+ POWER_SUPPLY_HEALTH_UNKNOWN = 0,
-+ POWER_SUPPLY_HEALTH_GOOD,
-+ POWER_SUPPLY_HEALTH_OVERHEAT,
-+ POWER_SUPPLY_HEALTH_DEAD,
-+};
-+
-+enum {
-+ POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
-+ POWER_SUPPLY_TECHNOLOGY_NIMH,
-+ POWER_SUPPLY_TECHNOLOGY_LION,
-+ POWER_SUPPLY_TECHNOLOGY_LIPO,
-+};
-+
-+enum {
-+ POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
-+ POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL,
-+ POWER_SUPPLY_CAPACITY_LEVEL_LOW,
-+ POWER_SUPPLY_CAPACITY_LEVEL_NORMAL,
-+ POWER_SUPPLY_CAPACITY_LEVEL_HIGH,
-+ POWER_SUPPLY_CAPACITY_LEVEL_FULL,
-+};
-+
-+enum power_supply_property {
-+ /* Properties of type `int' */
-+ POWER_SUPPLY_PROP_STATUS = 0,
-+ POWER_SUPPLY_PROP_HEALTH,
-+ POWER_SUPPLY_PROP_PRESENT,
-+ POWER_SUPPLY_PROP_ONLINE,
-+ POWER_SUPPLY_PROP_TECHNOLOGY,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+ POWER_SUPPLY_PROP_VOLTAGE_AVG,
-+ POWER_SUPPLY_PROP_CURRENT_NOW,
-+ POWER_SUPPLY_PROP_CURRENT_AVG,
-+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_FULL,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY,
-+ POWER_SUPPLY_PROP_CHARGE_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_AVG,
-+ POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN,
-+ POWER_SUPPLY_PROP_ENERGY_FULL,
-+ POWER_SUPPLY_PROP_ENERGY_EMPTY,
-+ POWER_SUPPLY_PROP_ENERGY_NOW,
-+ POWER_SUPPLY_PROP_ENERGY_AVG,
-+ POWER_SUPPLY_PROP_CAPACITY, /* in percents! */
-+ POWER_SUPPLY_PROP_CAPACITY_LEVEL,
-+ POWER_SUPPLY_PROP_TEMP,
-+ POWER_SUPPLY_PROP_TEMP_AMBIENT,
-+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,
-+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
-+ POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,
-+ POWER_SUPPLY_PROP_TIME_TO_FULL_AVG,
-+ /* Properties of type `const char *' */
-+ POWER_SUPPLY_PROP_MODEL_NAME,
-+};
-+
-+enum power_supply_type {
-+ POWER_SUPPLY_TYPE_BATTERY = 0,
-+ POWER_SUPPLY_TYPE_UPS,
-+ POWER_SUPPLY_TYPE_MAINS,
-+ POWER_SUPPLY_TYPE_USB,
-+};
-+
-+union power_supply_propval {
-+ int intval;
-+ const char *strval;
-+};
-+
-+struct power_supply {
-+ const char *name;
-+ enum power_supply_type type;
-+ enum power_supply_property *properties;
-+ size_t num_properties;
-+
-+ char **supplied_to;
-+ size_t num_supplicants;
-+
-+ int (*get_property)(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val);
-+ void (*external_power_changed)(struct power_supply *psy);
-+
-+ /* For APM emulation, think legacy userspace. */
-+ int use_for_apm;
-+
-+ /* private */
-+ struct device *dev;
-+ struct work_struct changed_work;
-+
-+#ifdef CONFIG_LEDS_TRIGGERS
-+ struct led_trigger *charging_full_trig;
-+ char *charging_full_trig_name;
-+ struct led_trigger *charging_trig;
-+ char *charging_trig_name;
-+ struct led_trigger *full_trig;
-+ char *full_trig_name;
-+ struct led_trigger *online_trig;
-+ char *online_trig_name;
-+#endif
-+};
-+
-+/*
-+ * This is recommended structure to specify static power supply parameters.
-+ * Generic one, parametrizable for different power supplies. Power supply
-+ * class itself does not use it, but that's what implementing most platform
-+ * drivers, should try reuse for consistency.
-+ */
-+
-+struct power_supply_info {
-+ const char *name;
-+ int technology;
-+ int voltage_max_design;
-+ int voltage_min_design;
-+ int charge_full_design;
-+ int charge_empty_design;
-+ int energy_full_design;
-+ int energy_empty_design;
-+ int use_for_apm;
-+};
-+
-+extern void power_supply_changed(struct power_supply *psy);
-+extern int power_supply_am_i_supplied(struct power_supply *psy);
-+
-+extern int power_supply_register(struct device *parent,
-+ struct power_supply *psy);
-+extern void power_supply_unregister(struct power_supply *psy);
-+
-+/* For APM emulation, think legacy userspace. */
-+extern struct class *power_supply_class;
-+
-+#endif /* __LINUX_POWER_SUPPLY_H__ */
diff --git a/packages/linux/linux-rp-2.6.22/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.22/pxa-serial-hack.patch
deleted file mode 100644
index bf20f46a05..0000000000
--- a/packages/linux/linux-rp-2.6.22/pxa-serial-hack.patch
+++ /dev/null
@@ -1,90 +0,0 @@
----
- drivers/serial/8250.c | 5 +++++
- drivers/serial/serial_core.c | 1 +
- drivers/serial/serial_cs.c | 12 +++++++++---
- include/linux/serial_core.h | 1 +
- 4 files changed, 16 insertions(+), 3 deletions(-)
-
-Index: linux-2.6.20/drivers/serial/8250.c
-===================================================================
---- linux-2.6.20.orig/drivers/serial/8250.c 2007-04-27 13:37:26.000000000 +0100
-+++ linux-2.6.20/drivers/serial/8250.c 2007-04-27 13:38:16.000000000 +0100
-@@ -2429,7 +2429,12 @@
- .driver_name = "serial",
- .dev_name = "ttyS",
- .major = TTY_MAJOR,
-+#ifdef CONFIG_SERIAL_PXA
-+ .minor = 64 + 4,
-+ .name_base = 4,
-+#else
- .minor = 64,
-+#endif
- .nr = UART_NR,
- .cons = SERIAL8250_CONSOLE,
- };
-Index: linux-2.6.20/drivers/serial/serial_core.c
-===================================================================
---- linux-2.6.20.orig/drivers/serial/serial_core.c 2007-02-04 18:44:54.000000000 +0000
-+++ linux-2.6.20/drivers/serial/serial_core.c 2007-04-27 13:39:39.000000000 +0100
-@@ -2068,7 +2068,8 @@
- printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
- port->dev ? port->dev->bus_id : "",
- port->dev ? ": " : "",
-- drv->dev_name, port->line, address, port->irq, uart_type(port));
-+ drv->dev_name, port->line + drv->name_base, address, port->irq,
-+ uart_type(port));
- }
-
- static void
-@@ -2183,6 +2184,7 @@
- normal->owner = drv->owner;
- normal->driver_name = drv->driver_name;
- normal->name = drv->dev_name;
-+ normal->name_base = drv->name_base;
- normal->major = drv->major;
- normal->minor_start = drv->minor;
- normal->type = TTY_DRIVER_TYPE_SERIAL;
-Index: linux-2.6.20/include/linux/serial_core.h
-===================================================================
---- linux-2.6.20.orig/include/linux/serial_core.h 2007-02-04 18:44:54.000000000 +0000
-+++ linux-2.6.20/include/linux/serial_core.h 2007-04-27 13:37:27.000000000 +0100
-@@ -341,6 +341,7 @@
- struct module *owner;
- const char *driver_name;
- const char *dev_name;
-+ int name_base;
- int major;
- int minor;
- int nr;
-Index: linux-2.6.20/drivers/serial/serial_cs.c
-===================================================================
---- linux-2.6.20.orig/drivers/serial/serial_cs.c 2007-02-04 18:44:54.000000000 +0000
-+++ linux-2.6.20/drivers/serial/serial_cs.c 2007-04-27 13:40:34.000000000 +0100
-@@ -390,7 +390,7 @@
- kio_addr_t iobase, int irq)
- {
- struct uart_port port;
-- int line;
-+ int line, linestart;
-
- memset(&port, 0, sizeof (struct uart_port));
- port.iobase = iobase;
-@@ -411,10 +411,16 @@
- return -EINVAL;
- }
-
-+#if CONFIG_SERIAL_PXA
-+ linestart = 4;
-+#else
-+ linestart = 0;
-+#endif
-+
- info->line[info->ndev] = line;
-- sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
-+ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line+linestart);
- info->node[info->ndev].major = TTY_MAJOR;
-- info->node[info->ndev].minor = 0x40 + line;
-+ info->node[info->ndev].minor = 0x40 + line + linestart;
- if (info->ndev > 0)
- info->node[info->ndev - 1].next = &info->node[info->ndev];
- info->ndev++;
diff --git a/packages/linux/linux-rp-2.6.22/sharpsl-pm-postresume-r1.patch b/packages/linux/linux-rp-2.6.22/sharpsl-pm-postresume-r1.patch
deleted file mode 100644
index 409daf03e6..0000000000
--- a/packages/linux/linux-rp-2.6.22/sharpsl-pm-postresume-r1.patch
+++ /dev/null
@@ -1,30 +0,0 @@
- arch/arm/common/sharpsl_pm.c | 3 +++
- include/asm-arm/hardware/sharpsl_pm.h | 1 +
- 2 files changed, 4 insertions(+)
-
-Index: git/include/asm-arm/hardware/sharpsl_pm.h
-===================================================================
---- git.orig/include/asm-arm/hardware/sharpsl_pm.h 2006-10-31 16:09:33.000000000 +0000
-+++ git/include/asm-arm/hardware/sharpsl_pm.h 2006-11-07 22:08:41.000000000 +0000
-@@ -26,6 +26,7 @@ struct sharpsl_charger_machinfo {
- void (*presuspend)(void);
- void (*postsuspend)(void);
- void (*earlyresume)(void);
-+ void (*postresume)(void);
- unsigned long (*read_devdata)(int);
- #define SHARPSL_BATT_VOLT 1
- #define SHARPSL_BATT_TEMP 2
-Index: git/arch/arm/common/sharpsl_pm.c
-===================================================================
---- git.orig/arch/arm/common/sharpsl_pm.c 2006-11-07 22:03:48.000000000 +0000
-+++ git/arch/arm/common/sharpsl_pm.c 2006-11-07 22:04:20.000000000 +0000
-@@ -584,6 +584,9 @@ static int corgi_pxa_pm_enter(suspend_st
- if (sharpsl_pm.machinfo->earlyresume)
- sharpsl_pm.machinfo->earlyresume();
-
-+ if (sharpsl_pm.machinfo->postresume)
-+ sharpsl_pm.machinfo->postresume();
-+
- dev_dbg(sharpsl_pm.dev, "SharpSL resuming...\n");
-
- return 0;
diff --git a/packages/linux/linux-rp-2.6.22/squashfs3.0-2.6.15.patch b/packages/linux/linux-rp-2.6.22/squashfs3.0-2.6.15.patch
deleted file mode 100644
index 6312efe46a..0000000000
--- a/packages/linux/linux-rp-2.6.22/squashfs3.0-2.6.15.patch
+++ /dev/null
@@ -1,4189 +0,0 @@
- fs/Kconfig | 65 +
- fs/Makefile | 1
- fs/squashfs/Makefile | 7
- fs/squashfs/inode.c | 2122 +++++++++++++++++++++++++++++++++++++++++
- fs/squashfs/squashfs.h | 86 +
- fs/squashfs/squashfs2_0.c | 757 ++++++++++++++
- include/linux/squashfs_fs.h | 911 +++++++++++++++++
- include/linux/squashfs_fs_i.h | 45
- include/linux/squashfs_fs_sb.h | 74 +
- init/do_mounts_rd.c | 13
- 10 files changed, 4081 insertions(+)
-
-Index: linux-2.6.21/fs/Kconfig
-===================================================================
---- linux-2.6.21.orig/fs/Kconfig 2007-07-01 17:09:49.000000000 +0100
-+++ linux-2.6.21/fs/Kconfig 2007-07-01 17:09:57.000000000 +0100
-@@ -1393,6 +1393,71 @@ config CRAMFS
-
- If unsure, say N.
-
-+config SQUASHFS
-+ tristate "SquashFS 3.0 - Squashed file system support"
-+ select ZLIB_INFLATE
-+ help
-+ Saying Y here includes support for SquashFS 3.0 (a Compressed Read-Only File
-+ System). Squashfs is a highly compressed read-only filesystem for Linux.
-+ It uses zlib compression to compress both files, inodes and directories.
-+ Inodes in the system are very small and all blocks are packed to minimise
-+ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
-+ SquashFS 3.0 supports 64 bit filesystems and files (larger than 4GB), full
-+ uid/gid information, hard links and timestamps.
-+
-+ Squashfs is intended for general read-only filesystem use, for archival
-+ use (i.e. in cases where a .tar.gz file may be used), and in embedded
-+ systems where low overhead is needed. Further information and filesystem tools
-+ are available from http://squashfs.sourceforge.net.
-+
-+ If you want to compile this as a module ( = code which can be
-+ inserted in and removed from the running kernel whenever you want),
-+ say M here and read <file:Documentation/modules.txt>. The module
-+ will be called squashfs. Note that the root file system (the one
-+ containing the directory /) cannot be compiled as a module.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_EMBEDDED
-+
-+ bool "Additional options for memory-constrained systems"
-+ depends on SQUASHFS
-+ default n
-+ help
-+ Saying Y here allows you to specify cache sizes and how Squashfs
-+ allocates memory. This is only intended for memory constrained
-+ systems.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_FRAGMENT_CACHE_SIZE
-+ int "Number of fragments cached" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default "3"
-+ help
-+ By default SquashFS caches the last 3 fragments read from
-+ the filesystem. Increasing this amount may mean SquashFS
-+ has to re-read fragments less often from disk, at the expense
-+ of extra system memory. Decreasing this amount will mean
-+ SquashFS uses less memory at the expense of extra reads from disk.
-+
-+ Note there must be at least one cached fragment. Anything
-+ much more than three will probably not make much difference.
-+
-+config SQUASHFS_VMALLOC
-+ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default n
-+ help
-+ By default SquashFS uses kmalloc to obtain fragment cache memory.
-+ Kmalloc memory is the standard kernel allocator, but it can fail
-+ on memory constrained systems. Because of the way Vmalloc works,
-+ Vmalloc can succeed when kmalloc fails. Specifying this option
-+ will make SquashFS always use Vmalloc to allocate the
-+ fragment cache memory.
-+
-+ If unsure, say N.
-+
- config VXFS_FS
- tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
- depends on BLOCK
-Index: linux-2.6.21/fs/Makefile
-===================================================================
---- linux-2.6.21.orig/fs/Makefile 2007-07-01 17:09:46.000000000 +0100
-+++ linux-2.6.21/fs/Makefile 2007-07-01 17:09:57.000000000 +0100
-@@ -72,6 +72,7 @@ obj-$(CONFIG_JBD) += jbd/
- obj-$(CONFIG_JBD2) += jbd2/
- obj-$(CONFIG_EXT2_FS) += ext2/
- obj-$(CONFIG_CRAMFS) += cramfs/
-+obj-$(CONFIG_SQUASHFS) += squashfs/
- obj-$(CONFIG_RAMFS) += ramfs/
- obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
- obj-$(CONFIG_CODA_FS) += coda/
-Index: linux-2.6.21/fs/squashfs/inode.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/fs/squashfs/inode.c 2007-07-01 17:54:23.000000000 +0100
-@@ -0,0 +1,2122 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * inode.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+
-+static void squashfs_put_super(struct super_block *);
-+static int squashfs_statfs(struct dentry *, struct kstatfs *);
-+static int squashfs_symlink_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage4K(struct file *file, struct page *page);
-+static int squashfs_readdir(struct file *, void *, filldir_t);
-+static struct inode *squashfs_alloc_inode(struct super_block *sb);
-+static void squashfs_destroy_inode(struct inode *inode);
-+static int init_inodecache(void);
-+static void destroy_inodecache(void);
-+static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
-+ struct nameidata *);
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize);
-+static int squashfs_get_sb(struct file_system_type *, int,
-+ const char *, void *, struct vfsmount *);
-+
-+
-+static z_stream stream;
-+
-+static struct file_system_type squashfs_fs_type = {
-+ .owner = THIS_MODULE,
-+ .name = "squashfs",
-+ .get_sb = squashfs_get_sb,
-+ .kill_sb = kill_block_super,
-+ .fs_flags = FS_REQUIRES_DEV
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static struct super_operations squashfs_ops = {
-+ .alloc_inode = squashfs_alloc_inode,
-+ .destroy_inode = squashfs_destroy_inode,
-+ .statfs = squashfs_statfs,
-+ .put_super = squashfs_put_super,
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
-+ .readpage = squashfs_symlink_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops = {
-+ .readpage = squashfs_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
-+ .readpage = squashfs_readpage4K
-+};
-+
-+static struct file_operations squashfs_dir_ops = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir
-+};
-+
-+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
-+ .lookup = squashfs_lookup
-+};
-+
-+
-+static struct buffer_head *get_block_length(struct super_block *s,
-+ int *cur_index, int *offset, int *c_byte)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned short temp;
-+ struct buffer_head *bh;
-+
-+ if (!(bh = sb_bread(s, *cur_index)))
-+ goto out;
-+
-+ if (msblk->devblksize - *offset == 1) {
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ else
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ bh->b_data);
-+ else
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ bh->b_data);
-+ *c_byte = temp;
-+ *offset = 1;
-+ } else {
-+ if (msblk->swap) {
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ } else {
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ }
-+ *c_byte = temp;
-+ *offset += 2;
-+ }
-+
-+ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
-+ if (*offset == msblk->devblksize) {
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ *offset = 0;
-+ }
-+ if (*((unsigned char *) (bh->b_data + *offset)) !=
-+ SQUASHFS_MARKER_BYTE) {
-+ ERROR("Metadata block marker corrupt @ %x\n",
-+ *cur_index);
-+ brelse(bh);
-+ goto out;
-+ }
-+ (*offset)++;
-+ }
-+ return bh;
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
-+ msblk->devblksize_log2) + 2];
-+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
-+ unsigned int cur_index = index >> msblk->devblksize_log2;
-+ int bytes, avail_bytes, b = 0, k;
-+ char *c_buffer;
-+ unsigned int compressed;
-+ unsigned int c_byte = length;
-+
-+ if (c_byte) {
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ if (!(bh[0] = sb_getblk(s, cur_index)))
-+ goto block_release;
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b, bh);
-+ } else {
-+ if (!(bh[0] = get_block_length(s, &cur_index, &offset,
-+ &c_byte)))
-+ goto read_failure;
-+
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b - 1, bh + 1);
-+ }
-+
-+ if (compressed)
-+ down(&msblk->read_data_mutex);
-+
-+ for (bytes = 0, k = 0; k < b; k++) {
-+ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
-+ msblk->devblksize - offset :
-+ c_byte - bytes;
-+ wait_on_buffer(bh[k]);
-+ if (!buffer_uptodate(bh[k]))
-+ goto block_release;
-+ memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
-+ bytes += avail_bytes;
-+ offset = 0;
-+ brelse(bh[k]);
-+ }
-+
-+ /*
-+ * uncompress block
-+ */
-+ if (compressed) {
-+ int zlib_err;
-+
-+ stream.next_in = c_buffer;
-+ stream.avail_in = c_byte;
-+ stream.next_out = buffer;
-+ stream.avail_out = msblk->read_size;
-+
-+ if (((zlib_err = zlib_inflateInit(&stream)) != Z_OK) ||
-+ ((zlib_err = zlib_inflate(&stream, Z_FINISH))
-+ != Z_STREAM_END) || ((zlib_err =
-+ zlib_inflateEnd(&stream)) != Z_OK)) {
-+ ERROR("zlib_fs returned unexpected result 0x%x\n",
-+ zlib_err);
-+ bytes = 0;
-+ } else
-+ bytes = stream.total_out;
-+
-+ up(&msblk->read_data_mutex);
-+ }
-+
-+ if (next_index)
-+ *next_index = index + c_byte + (length ? 0 :
-+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
-+ ? 3 : 2));
-+ return bytes;
-+
-+block_release:
-+ while (--b >= 0)
-+ brelse(bh[b]);
-+
-+read_failure:
-+ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ int n, i, bytes, return_length = length;
-+ long long next_index;
-+
-+ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
-+
-+ while ( 1 ) {
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (msblk->block_cache[i].block == block)
-+ break;
-+
-+ down(&msblk->block_cache_mutex);
-+
-+ if (i == SQUASHFS_CACHED_BLKS) {
-+ /* read inode header block */
-+ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
-+ n ; n --, i = (i + 1) %
-+ SQUASHFS_CACHED_BLKS)
-+ if (msblk->block_cache[i].block !=
-+ SQUASHFS_USED_BLK)
-+ break;
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->waitq, &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->block_cache_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->waitq, &wait);
-+ continue;
-+ }
-+ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
-+
-+ if (msblk->block_cache[i].block ==
-+ SQUASHFS_INVALID_BLK) {
-+ if (!(msblk->block_cache[i].data =
-+ kmalloc(SQUASHFS_METADATA_SIZE,
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate cache"
-+ "block\n");
-+ up(&msblk->block_cache_mutex);
-+ goto out;
-+ }
-+ }
-+
-+ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
-+ up(&msblk->block_cache_mutex);
-+
-+ if (!(msblk->block_cache[i].length =
-+ squashfs_read_data(s,
-+ msblk->block_cache[i].data,
-+ block, 0, &next_index))) {
-+ ERROR("Unable to read cache block [%llx:%x]\n",
-+ block, offset);
-+ goto out;
-+ }
-+
-+ down(&msblk->block_cache_mutex);
-+ wake_up(&msblk->waitq);
-+ msblk->block_cache[i].block = block;
-+ msblk->block_cache[i].next_index = next_index;
-+ TRACE("Read cache block [%llx:%x]\n", block, offset);
-+ }
-+
-+ if (msblk->block_cache[i].block != block) {
-+ up(&msblk->block_cache_mutex);
-+ continue;
-+ }
-+
-+ if ((bytes = msblk->block_cache[i].length - offset) >= length) {
-+ if (buffer)
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, length);
-+ if (msblk->block_cache[i].length - offset == length) {
-+ *next_block = msblk->block_cache[i].next_index;
-+ *next_offset = 0;
-+ } else {
-+ *next_block = block;
-+ *next_offset = offset + length;
-+ }
-+ up(&msblk->block_cache_mutex);
-+ goto finish;
-+ } else {
-+ if (buffer) {
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, bytes);
-+ buffer += bytes;
-+ }
-+ block = msblk->block_cache[i].next_index;
-+ up(&msblk->block_cache_mutex);
-+ length -= bytes;
-+ offset = 0;
-+ }
-+ }
-+
-+finish:
-+ return return_length;
-+out:
-+ return 0;
-+}
-+
-+
-+static int get_fragment_location(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
-+ struct squashfs_fragment_entry fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment)
-+{
-+ down(&msblk->fragment_mutex);
-+ fragment->locked --;
-+ wake_up(&msblk->fragment_wait_queue);
-+ up(&msblk->fragment_mutex);
-+}
-+
-+
-+SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length)
-+{
-+ int i, n, nf;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+
-+ while ( 1 ) {
-+ down(&msblk->fragment_mutex);
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
-+ msblk->fragment[i].block != start_block; i++);
-+
-+ if (i == SQUASHFS_CACHED_FRAGMENTS) {
-+ nf = (msblk->next_fragment + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS;
-+ for (i = msblk->next_fragment, n =
-+ SQUASHFS_CACHED_FRAGMENTS; n &&
-+ msblk->fragment[i].locked; n--, i = (i + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS);
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->fragment_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ continue;
-+ }
-+ msblk->next_fragment = nf;
-+
-+ if (msblk->fragment[i].data == NULL)
-+ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC
-+ (SQUASHFS_FILE_MAX_SIZE))) {
-+ ERROR("Failed to allocate fragment "
-+ "cache block\n");
-+ up(&msblk->fragment_mutex);
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].locked = 1;
-+ up(&msblk->fragment_mutex);
-+
-+ if (!(msblk->fragment[i].length = squashfs_read_data(s,
-+ msblk->fragment[i].data,
-+ start_block, length, NULL))) {
-+ ERROR("Unable to read fragment cache block "
-+ "[%llx]\n", start_block);
-+ msblk->fragment[i].locked = 0;
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = start_block;
-+ TRACE("New fragment %d, start block %lld, locked %d\n",
-+ i, msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ msblk->fragment[i].locked++;
-+ up(&msblk->fragment_mutex);
-+ TRACE("Got fragment %d, start block %lld, locked %d\n", i,
-+ msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ return &msblk->fragment[i];
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header *inodeb)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = inodeb->inode_number;
-+ i->i_mtime.tv_sec = inodeb->mtime;
-+ i->i_atime.tv_sec = inodeb->mtime;
-+ i->i_ctime.tv_sec = inodeb->mtime;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header id, sid;
-+ struct squashfs_base_inode_header *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_reg_inode_header *inodep = &id.reg;
-+ struct squashfs_reg_inode_header *sinodep = &sid.reg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = 1;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_LREG_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_lreg_inode_header *inodep = &id.lreg;
-+ struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header *inodep = &id.dir;
-+ struct squashfs_dir_inode_header *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header *inodep = &id.dev;
-+ struct squashfs_dev_inode_header *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ struct squashfs_ipc_inode_header *inodep = &id.ipc;
-+ struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int read_fragment_index_table(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ /* Allocate fragment index table */
-+ if (!(msblk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ long long fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
-+ &msblk->fragment_index[i], 1);
-+ msblk->fragment_index[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget;
-+ msblk->read_blocklist = read_blocklist;
-+ msblk->read_fragment_index_table = read_fragment_index_table;
-+
-+ if (sblk->s_major == 1) {
-+ if (!squashfs_1_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 1.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if (sblk->s_major == 2) {
-+ if (!squashfs_2_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 2.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
-+ SQUASHFS_MINOR) {
-+ SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
-+ "filesystem\n", sblk->s_major, sblk->s_minor);
-+ SERROR("Please update your kernel\n");
-+ return 0;
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int squashfs_fill_super(struct super_block *s, void *data, int silent)
-+{
-+ struct squashfs_sb_info *msblk;
-+ struct squashfs_super_block *sblk;
-+ int i;
-+ char b[BDEVNAME_SIZE];
-+ struct inode *root;
-+
-+ TRACE("Entered squashfs_read_superblock\n");
-+
-+ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info),
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate superblock\n");
-+ goto failure;
-+ }
-+ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
-+ msblk = s->s_fs_info;
-+ sblk = &msblk->sblk;
-+
-+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
-+ msblk->devblksize_log2 = ffz(~msblk->devblksize);
-+
-+ init_MUTEX(&msblk->read_data_mutex);
-+ init_MUTEX(&msblk->read_page_mutex);
-+ init_MUTEX(&msblk->block_cache_mutex);
-+ init_MUTEX(&msblk->fragment_mutex);
-+ init_MUTEX(&msblk->meta_index_mutex);
-+
-+ init_waitqueue_head(&msblk->waitq);
-+ init_waitqueue_head(&msblk->fragment_wait_queue);
-+
-+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
-+ sizeof(struct squashfs_super_block) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ SERROR("unable to read superblock\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Check it is a SQUASHFS superblock */
-+ msblk->swap = 0;
-+ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
-+ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
-+ struct squashfs_super_block ssblk;
-+
-+ WARNING("Mounting a different endian SQUASHFS "
-+ "filesystem on %s\n", bdevname(s->s_bdev, b));
-+
-+ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
-+ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
-+ msblk->swap = 1;
-+ } else {
-+ SERROR("Can't find a SQUASHFS superblock on %s\n",
-+ bdevname(s->s_bdev, b));
-+ goto failed_mount;
-+ }
-+ }
-+
-+ /* Check the MAJOR & MINOR versions */
-+ if(!supported_squashfs_filesystem(msblk, silent))
-+ goto failed_mount;
-+
-+ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
-+ TRACE("Inodes are %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_INODES
-+ (sblk->flags) ? "un" : "");
-+ TRACE("Data is %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
-+ ? "un" : "");
-+ TRACE("Check data is %s present in the filesystem\n",
-+ SQUASHFS_CHECK_DATA(sblk->flags) ?
-+ "" : "not");
-+ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
-+ TRACE("Block size %d\n", sblk->block_size);
-+ TRACE("Number of inodes %d\n", sblk->inodes);
-+ if (sblk->s_major > 1)
-+ TRACE("Number of fragments %d\n", sblk->fragments);
-+ TRACE("Number of uids %d\n", sblk->no_uids);
-+ TRACE("Number of gids %d\n", sblk->no_guids);
-+ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
-+ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
-+ if (sblk->s_major > 1)
-+ TRACE("sblk->fragment_table_start %llx\n",
-+ sblk->fragment_table_start);
-+ TRACE("sblk->uid_start %llx\n", sblk->uid_start);
-+
-+ s->s_flags |= MS_RDONLY;
-+ s->s_op = &squashfs_ops;
-+
-+ /* Init inode_table block pointer array */
-+ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
-+ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+
-+ msblk->next_cache = 0;
-+
-+ /* Allocate read_data block */
-+ msblk->read_size = (sblk->block_size < SQUASHFS_METADATA_SIZE) ?
-+ SQUASHFS_METADATA_SIZE :
-+ sblk->block_size;
-+
-+ if (!(msblk->read_data = kmalloc(msblk->read_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_data block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate read_page block */
-+ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_page block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate uid and gid tables */
-+ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ goto failed_mount;
-+ }
-+ msblk->guid = msblk->uid + sblk->no_uids;
-+
-+ if (msblk->swap) {
-+ unsigned int suid[sblk->no_uids + sblk->no_guids];
-+
-+ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
-+ sblk->no_guids), (sizeof(unsigned int) * 8));
-+ } else
-+ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+
-+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
-+ goto allocate_root;
-+
-+ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
-+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate fragment block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
-+ msblk->fragment[i].locked = 0;
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].data = NULL;
-+ }
-+
-+ msblk->next_fragment = 0;
-+
-+ /* Allocate fragment index table */
-+ if (msblk->read_fragment_index_table(s) == 0)
-+ goto failed_mount;
-+
-+allocate_root:
-+ if ((root = (msblk->iget)(s, sblk->root_inode)) == NULL)
-+ goto failed_mount;
-+
-+ if ((s->s_root = d_alloc_root(root)) == NULL) {
-+ ERROR("Root inode create failed\n");
-+ iput(root);
-+ goto failed_mount;
-+ }
-+
-+ TRACE("Leaving squashfs_read_super\n");
-+ return 0;
-+
-+failed_mount:
-+ kfree(msblk->fragment_index);
-+ kfree(msblk->fragment);
-+ kfree(msblk->uid);
-+ kfree(msblk->read_page);
-+ kfree(msblk->read_data);
-+ kfree(msblk->block_cache);
-+ kfree(msblk->fragment_index_2);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ return -EINVAL;
-+
-+failure:
-+ return -ENOMEM;
-+}
-+
-+
-+static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf)
-+{
-+ struct super_block *s = dentry->d_sb;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ TRACE("Entered squashfs_statfs\n");
-+
-+ buf->f_type = SQUASHFS_MAGIC;
-+ buf->f_bsize = sblk->block_size;
-+ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
-+ buf->f_bfree = buf->f_bavail = 0;
-+ buf->f_files = sblk->inodes;
-+ buf->f_ffree = 0;
-+ buf->f_namelen = SQUASHFS_NAME_LEN;
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_symlink_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ int index = page->index << PAGE_CACHE_SHIFT, length, bytes;
-+ long long block = SQUASHFS_I(inode)->start_block;
-+ int offset = SQUASHFS_I(inode)->offset;
-+ void *pageaddr = kmap(page);
-+
-+ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
-+ "%llx, offset %x\n", page->index,
-+ SQUASHFS_I(inode)->start_block,
-+ SQUASHFS_I(inode)->offset);
-+
-+ for (length = 0; length < index; length += bytes) {
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL,
-+ block, offset, PAGE_CACHE_SIZE, &block,
-+ &offset))) {
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block,
-+ offset);
-+ goto skip_read;
-+ }
-+ }
-+
-+ if (length != index) {
-+ ERROR("(squashfs_symlink_readpage) length != index\n");
-+ bytes = 0;
-+ goto skip_read;
-+ }
-+
-+ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE :
-+ i_size_read(inode) - length;
-+
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block,
-+ offset, bytes, &block, &offset)))
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
-+{
-+ struct meta_index *meta = NULL;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
-+
-+ if(msblk->meta_index == NULL)
-+ goto not_allocated;
-+
-+ for (i = 0; i < SQUASHFS_META_NUMBER; i ++)
-+ if (msblk->meta_index[i].inode_number == inode->i_ino &&
-+ msblk->meta_index[i].offset >= offset &&
-+ msblk->meta_index[i].offset <= index &&
-+ msblk->meta_index[i].locked == 0) {
-+ TRACE("locate_meta_index: entry %d, offset %d\n", i,
-+ msblk->meta_index[i].offset);
-+ meta = &msblk->meta_index[i];
-+ offset = meta->offset;
-+ }
-+
-+ if (meta)
-+ meta->locked = 1;
-+
-+not_allocated:
-+ up(&msblk->meta_index_mutex);
-+
-+ return meta;
-+}
-+
-+
-+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct meta_index *meta = NULL;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
-+
-+ if(msblk->meta_index == NULL) {
-+ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) *
-+ SQUASHFS_META_NUMBER, GFP_KERNEL))) {
-+ ERROR("Failed to allocate meta_index\n");
-+ goto failed;
-+ }
-+ for(i = 0; i < SQUASHFS_META_NUMBER; i++) {
-+ msblk->meta_index[i].inode_number = 0;
-+ msblk->meta_index[i].locked = 0;
-+ }
-+ msblk->next_meta_index = 0;
-+ }
-+
-+ for(i = SQUASHFS_META_NUMBER; i &&
-+ msblk->meta_index[msblk->next_meta_index].locked; i --)
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ if(i == 0) {
-+ TRACE("empty_meta_index: failed!\n");
-+ goto failed;
-+ }
-+
-+ TRACE("empty_meta_index: returned meta entry %d, %p\n",
-+ msblk->next_meta_index,
-+ &msblk->meta_index[msblk->next_meta_index]);
-+
-+ meta = &msblk->meta_index[msblk->next_meta_index];
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ meta->inode_number = inode->i_ino;
-+ meta->offset = offset;
-+ meta->skip = skip;
-+ meta->entries = 0;
-+ meta->locked = 1;
-+
-+failed:
-+ up(&msblk->meta_index_mutex);
-+ return meta;
-+}
-+
-+
-+void release_meta_index(struct inode *inode, struct meta_index *meta)
-+{
-+ meta->locked = 0;
-+}
-+
-+
-+static int read_block_index(struct super_block *s, int blocks, char *block_list,
-+ long long *start_block, int *offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned int *block_listp;
-+ int block = 0;
-+
-+ if (msblk->swap) {
-+ char sblock_list[blocks << 2];
-+
-+ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
-+ ((unsigned int *)sblock_list), blocks);
-+ } else
-+ if (!squashfs_get_cached_block(s, block_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+
-+ for (block_listp = (unsigned int *) block_list; blocks;
-+ block_listp++, blocks --)
-+ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
-+
-+ return block;
-+
-+failure:
-+ return -1;
-+}
-+
-+
-+#define SIZE 256
-+
-+static inline int calculate_skip(int blocks) {
-+ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
-+ return skip >= 7 ? 7 : skip + 1;
-+}
-+
-+
-+static int get_meta_index(struct inode *inode, int index,
-+ long long *index_block, int *index_offset,
-+ long long *data_block, char *block_list)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
-+ int offset = 0;
-+ struct meta_index *meta;
-+ struct meta_entry *meta_entry;
-+ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
-+ int cur_offset = SQUASHFS_I(inode)->offset;
-+ long long cur_data_block = SQUASHFS_I(inode)->start_block;
-+ int i;
-+
-+ index /= SQUASHFS_META_INDEXES * skip;
-+
-+ while ( offset < index ) {
-+ meta = locate_meta_index(inode, index, offset + 1);
-+
-+ if (meta == NULL) {
-+ if ((meta = empty_meta_index(inode, offset + 1,
-+ skip)) == NULL)
-+ goto all_done;
-+ } else {
-+ offset = index < meta->offset + meta->entries ? index :
-+ meta->offset + meta->entries - 1;
-+ meta_entry = &meta->meta_entry[offset - meta->offset];
-+ cur_index_block = meta_entry->index_block + sblk->inode_table_start;
-+ cur_offset = meta_entry->offset;
-+ cur_data_block = meta_entry->data_block;
-+ TRACE("get_meta_index: offset %d, meta->offset %d, "
-+ "meta->entries %d\n", offset, meta->offset,
-+ meta->entries);
-+ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
-+ " data_block 0x%llx\n", cur_index_block,
-+ cur_offset, cur_data_block);
-+ }
-+
-+ for (i = meta->offset + meta->entries; i <= index &&
-+ i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
-+ int blocks = skip * SQUASHFS_META_INDEXES;
-+
-+ while (blocks) {
-+ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) :
-+ blocks;
-+ int res = read_block_index(inode->i_sb, block,
-+ block_list, &cur_index_block,
-+ &cur_offset);
-+
-+ if (res == -1)
-+ goto failed;
-+
-+ cur_data_block += res;
-+ blocks -= block;
-+ }
-+
-+ meta_entry = &meta->meta_entry[i - meta->offset];
-+ meta_entry->index_block = cur_index_block - sblk->inode_table_start;
-+ meta_entry->offset = cur_offset;
-+ meta_entry->data_block = cur_data_block;
-+ meta->entries ++;
-+ offset ++;
-+ }
-+
-+ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
-+ meta->offset, meta->entries);
-+
-+ release_meta_index(inode, meta);
-+ }
-+
-+all_done:
-+ *index_block = cur_index_block;
-+ *index_offset = cur_offset;
-+ *data_block = cur_data_block;
-+
-+ return offset * SQUASHFS_META_INDEXES * skip;
-+
-+failed:
-+ release_meta_index(inode, meta);
-+ return -1;
-+}
-+
-+
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize)
-+{
-+ long long block_ptr;
-+ int offset;
-+ long long block;
-+ int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
-+ block_list);
-+
-+ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
-+ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset,
-+ block);
-+
-+ if(res == -1)
-+ goto failure;
-+
-+ index -= res;
-+
-+ while ( index ) {
-+ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
-+ int res = read_block_index(inode->i_sb, blocks, block_list,
-+ &block_ptr, &offset);
-+ if (res == -1)
-+ goto failure;
-+ block += res;
-+ index -= blocks;
-+ }
-+
-+ if (read_block_index(inode->i_sb, 1, block_list,
-+ &block_ptr, &offset) == -1)
-+ goto failure;
-+ *bsize = *((unsigned int *) block_list);
-+
-+ return block;
-+
-+failure:
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0;
-+ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
-+ void *pageaddr;
-+ struct squashfs_fragment_cache *fragment = NULL;
-+ char *data_ptr = msblk->read_page;
-+
-+ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
-+ int start_index = page->index & ~mask;
-+ int end_index = start_index | mask;
-+
-+ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT))
-+ goto skip_read;
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ if ((block = (msblk->read_blocklist)(inode, index, 1,
-+ block_list, NULL, &bsize)) == 0)
-+ goto skip_read;
-+
-+ down(&msblk->read_page_mutex);
-+
-+ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page,
-+ block, bsize, NULL))) {
-+ ERROR("Unable to read page, block %llx, size %x\n", block,
-+ bsize);
-+ up(&msblk->read_page_mutex);
-+ goto skip_read;
-+ }
-+ } else {
-+ if ((fragment = get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)->u.s1.fragment_size))
-+ == NULL) {
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ (int) SQUASHFS_I(inode)->
-+ u.s1.fragment_size);
-+ goto skip_read;
-+ }
-+ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset +
-+ (i_size_read(inode) & (sblk->block_size
-+ - 1));
-+ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset;
-+ data_ptr = fragment->data;
-+ }
-+
-+ for (i = start_index; i <= end_index && byte_offset < bytes;
-+ i++, byte_offset += PAGE_CACHE_SIZE) {
-+ struct page *push_page;
-+ int available_bytes = (bytes - byte_offset) > PAGE_CACHE_SIZE ?
-+ PAGE_CACHE_SIZE : bytes - byte_offset;
-+
-+ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n",
-+ bytes, i, byte_offset, available_bytes);
-+
-+ if (i == page->index) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+ } else if ((push_page =
-+ grab_cache_page_nowait(page->mapping, i))) {
-+ pageaddr = kmap_atomic(push_page, KM_USER0);
-+
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(push_page);
-+ SetPageUptodate(push_page);
-+ unlock_page(push_page);
-+ page_cache_release(push_page);
-+ }
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log))
-+ up(&msblk->read_page_mutex);
-+ else
-+ release_cached_fragment(msblk, fragment);
-+
-+ return 0;
-+
-+skip_read:
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage4K(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, bytes = 0;
-+ void *pageaddr;
-+
-+ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT)) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ goto skip_read;
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || page->index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ block = (msblk->read_blocklist)(inode, page->index, 1,
-+ block_list, NULL, &bsize);
-+
-+ down(&msblk->read_page_mutex);
-+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
-+ bsize, NULL);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (bytes)
-+ memcpy(pageaddr, msblk->read_page, bytes);
-+ else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ block, bsize);
-+ up(&msblk->read_page_mutex);
-+ } else {
-+ struct squashfs_fragment_cache *fragment =
-+ get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (fragment) {
-+ bytes = i_size_read(inode) & (sblk->block_size - 1);
-+ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)->
-+ u.s1.fragment_offset, bytes);
-+ release_cached_fragment(msblk, fragment);
-+ } else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block, (int)
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ }
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ f_pos =- 3;
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length + 3;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index *index = (struct squashfs_dir_index *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length + 3;
-+}
-+
-+
-+static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
-+
-+ while(file->f_pos < 3) {
-+ char *name;
-+ int size, i_ino;
-+
-+ if(file->f_pos == 0) {
-+ name = ".";
-+ size = 1;
-+ i_ino = i->i_ino;
-+ } else {
-+ name = "..";
-+ size = 2;
-+ i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
-+ }
-+ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
-+ (unsigned int) dirent, name, size, (int)
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]);
-+
-+ if (filldir(dirent, name, size,
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]) < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos += size;
-+ dirs_read++;
-+ }
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %d\n", name,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+static void squashfs_put_super(struct super_block *s)
-+{
-+ int i;
-+
-+ if (s->s_fs_info) {
-+ struct squashfs_sb_info *sbi = s->s_fs_info;
-+ if (sbi->block_cache)
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (sbi->block_cache[i].block !=
-+ SQUASHFS_INVALID_BLK)
-+ kfree(sbi->block_cache[i].data);
-+ if (sbi->fragment)
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
-+ SQUASHFS_FREE(sbi->fragment[i].data);
-+ kfree(sbi->fragment);
-+ kfree(sbi->block_cache);
-+ kfree(sbi->read_data);
-+ kfree(sbi->read_page);
-+ kfree(sbi->uid);
-+ kfree(sbi->fragment_index);
-+ kfree(sbi->fragment_index_2);
-+ kfree(sbi->meta_index);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ }
-+}
-+
-+
-+static int squashfs_get_sb(struct file_system_type *fs_type,
-+ int flags, const char *dev_name, void *data, struct vfsmount *mnt)
-+{
-+ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, mnt);
-+}
-+
-+
-+static int __init init_squashfs_fs(void)
-+{
-+ int err = init_inodecache();
-+ if (err)
-+ goto out;
-+
-+ printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
-+ "Phillip Lougher\n");
-+
-+ if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
-+ ERROR("Failed to allocate zlib workspace\n");
-+ destroy_inodecache();
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+
-+ if ((err = register_filesystem(&squashfs_fs_type))) {
-+ vfree(stream.workspace);
-+ destroy_inodecache();
-+ }
-+
-+out:
-+ return err;
-+}
-+
-+
-+static void __exit exit_squashfs_fs(void)
-+{
-+ vfree(stream.workspace);
-+ unregister_filesystem(&squashfs_fs_type);
-+ destroy_inodecache();
-+}
-+
-+
-+static kmem_cache_t * squashfs_inode_cachep;
-+
-+
-+static struct inode *squashfs_alloc_inode(struct super_block *sb)
-+{
-+ struct squashfs_inode_info *ei;
-+ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL);
-+ if (!ei)
-+ return NULL;
-+ return &ei->vfs_inode;
-+}
-+
-+
-+static void squashfs_destroy_inode(struct inode *inode)
-+{
-+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
-+}
-+
-+
-+static void init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
-+{
-+ struct squashfs_inode_info *ei = foo;
-+
-+ inode_init_once(&ei->vfs_inode);
-+}
-+
-+
-+static int __init init_inodecache(void)
-+{
-+ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
-+ sizeof(struct squashfs_inode_info),
-+ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
-+ init_once, NULL);
-+ if (squashfs_inode_cachep == NULL)
-+ return -ENOMEM;
-+ return 0;
-+}
-+
-+
-+static void destroy_inodecache(void)
-+{
-+ kmem_cache_destroy(squashfs_inode_cachep);
-+}
-+
-+
-+module_init(init_squashfs_fs);
-+module_exit(exit_squashfs_fs);
-+MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
-+MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
-Index: linux-2.6.21/fs/squashfs/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/fs/squashfs/Makefile 2007-07-01 17:09:57.000000000 +0100
-@@ -0,0 +1,7 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
-+
-+obj-$(CONFIG_SQUASHFS) += squashfs.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
-Index: linux-2.6.21/fs/squashfs/squashfs2_0.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/fs/squashfs/squashfs2_0.c 2007-07-01 17:09:57.000000000 +0100
-@@ -0,0 +1,757 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs2_0.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
-+static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
-+ struct nameidata *);
-+
-+static struct file_operations squashfs_dir_ops_2 = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir_2
-+};
-+
-+static struct inode_operations squashfs_dir_inode_ops_2 = {
-+ .lookup = squashfs_lookup_2
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static int read_fragment_index_table_2(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index_2,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ unsigned int fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
-+ &msblk->fragment_index_2[i], 1);
-+ msblk->fragment_index_2[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
-+ struct squashfs_fragment_entry_2 fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry_2 sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = ino;
-+ i->i_mtime.tv_sec = sblk->mkfs_time;
-+ i->i_atime.tv_sec = sblk->mkfs_time;
-+ i->i_ctime.tv_sec = sblk->mkfs_time;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_nlink = 1;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget_2(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned int block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ unsigned int ino = SQUASHFS_MK_VFS_INODE(block
-+ - sblk->inode_table_start, offset);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header_2 id, sid;
-+ struct squashfs_base_inode_header_2 *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ struct squashfs_reg_inode_header_2 *inodep = &id.reg;
-+ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
-+ long long frag_blk;
-+ unsigned int frag_size;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location_2(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %x, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header_2 *inodep = &id.dir;
-+ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header_2 *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header_2 *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header_2 *inodep = &id.dev;
-+ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%x:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index_2 index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index_2 *index = (struct squashfs_dir_index_2 *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index_2),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length;
-+}
-+
-+
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+
-+ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos, SQUASHFS_MK_VFS_INODE(
-+ dirh.start_block, dire->offset),
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (sorted && name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %lld\n", name,
-+ dirh.start_block, dire->offset, ino);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget_2;
-+ msblk->read_fragment_index_table = read_fragment_index_table_2;
-+
-+ sblk->bytes_used = sblk->bytes_used_2;
-+ sblk->uid_start = sblk->uid_start_2;
-+ sblk->guid_start = sblk->guid_start_2;
-+ sblk->inode_table_start = sblk->inode_table_start_2;
-+ sblk->directory_table_start = sblk->directory_table_start_2;
-+ sblk->fragment_table_start = sblk->fragment_table_start_2;
-+
-+ return 1;
-+}
-Index: linux-2.6.21/fs/squashfs/squashfs.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/fs/squashfs/squashfs.h 2007-07-01 17:09:57.000000000 +0100
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs.h
-+ */
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#endif
-+
-+#ifdef SQUASHFS_TRACE
-+#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
-+#else
-+#define TRACE(s, args...) {}
-+#endif
-+
-+#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
-+
-+#define SERROR(s, args...) do { \
-+ if (!silent) \
-+ printk(KERN_ERR "SQUASHFS error: "s, ## args);\
-+ } while(0)
-+
-+#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
-+
-+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
-+{
-+ return list_entry(inode, struct squashfs_inode_info, vfs_inode);
-+}
-+
-+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
-+#define SQSH_EXTERN
-+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index);
-+extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset);
-+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment);
-+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length);
-+extern struct address_space_operations squashfs_symlink_aops;
-+extern struct address_space_operations squashfs_aops;
-+extern struct address_space_operations squashfs_aops_4K;
-+extern struct inode_operations squashfs_dir_inode_ops;
-+#else
-+#define SQSH_EXTERN static
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-Index: linux-2.6.21/include/linux/squashfs_fs.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/include/linux/squashfs_fs.h 2007-07-01 17:09:57.000000000 +0100
-@@ -0,0 +1,911 @@
-+#ifndef SQUASHFS_FS
-+#define SQUASHFS_FS
-+
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs.h
-+ */
-+
-+#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_VMALLOC
-+#define SQUASHFS_ALLOC(a) vmalloc(a)
-+#define SQUASHFS_FREE(a) vfree(a)
-+#else
-+#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL)
-+#define SQUASHFS_FREE(a) kfree(a)
-+#endif
-+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
-+#define SQUASHFS_MAJOR 3
-+#define SQUASHFS_MINOR 0
-+#define SQUASHFS_MAGIC 0x73717368
-+#define SQUASHFS_MAGIC_SWAP 0x68737173
-+#define SQUASHFS_START 0
-+
-+/* size of metadata (inode and directory) blocks */
-+#define SQUASHFS_METADATA_SIZE 8192
-+#define SQUASHFS_METADATA_LOG 13
-+
-+/* default size of data blocks */
-+#define SQUASHFS_FILE_SIZE 65536
-+#define SQUASHFS_FILE_LOG 16
-+
-+#define SQUASHFS_FILE_MAX_SIZE 65536
-+
-+/* Max number of uids and gids */
-+#define SQUASHFS_UIDS 256
-+#define SQUASHFS_GUIDS 255
-+
-+/* Max length of filename (not 255) */
-+#define SQUASHFS_NAME_LEN 256
-+
-+#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
-+#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff)
-+#define SQUASHFS_INVALID_BLK ((long long) -1)
-+#define SQUASHFS_USED_BLK ((long long) -2)
-+
-+/* Filesystem flags */
-+#define SQUASHFS_NOI 0
-+#define SQUASHFS_NOD 1
-+#define SQUASHFS_CHECK 2
-+#define SQUASHFS_NOF 3
-+#define SQUASHFS_NO_FRAG 4
-+#define SQUASHFS_ALWAYS_FRAG 5
-+#define SQUASHFS_DUPLICATE 6
-+
-+#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
-+
-+#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOI)
-+
-+#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOD)
-+
-+#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOF)
-+
-+#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NO_FRAG)
-+
-+#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_ALWAYS_FRAG)
-+
-+#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_DUPLICATE)
-+
-+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_CHECK)
-+
-+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
-+ duplicate_checking) (noi | (nod << 1) | (check_data << 2) \
-+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
-+ (duplicate_checking << 6))
-+
-+/* Max number of types and file types */
-+#define SQUASHFS_DIR_TYPE 1
-+#define SQUASHFS_FILE_TYPE 2
-+#define SQUASHFS_SYMLINK_TYPE 3
-+#define SQUASHFS_BLKDEV_TYPE 4
-+#define SQUASHFS_CHRDEV_TYPE 5
-+#define SQUASHFS_FIFO_TYPE 6
-+#define SQUASHFS_SOCKET_TYPE 7
-+#define SQUASHFS_LDIR_TYPE 8
-+#define SQUASHFS_LREG_TYPE 9
-+
-+/* 1.0 filesystem type definitions */
-+#define SQUASHFS_TYPES 5
-+#define SQUASHFS_IPC_TYPE 0
-+
-+/* Flag whether block is compressed or uncompressed, bit is set if block is
-+ * uncompressed */
-+#define SQUASHFS_COMPRESSED_BIT (1 << 15)
-+
-+#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
-+ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
-+
-+#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
-+
-+#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
-+
-+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
-+
-+#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
-+
-+/*
-+ * Inode number ops. Inodes consist of a compressed block number, and an
-+ * uncompressed offset within that block
-+ */
-+#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
-+
-+#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
-+
-+#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\
-+ << 16) + (B)))
-+
-+/* Compute 32 bit VFS inode number from squashfs inode number */
-+#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \
-+ ((b) >> 2) + 1))
-+/* XXX */
-+
-+/* Translate between VFS mode and squashfs mode */
-+#define SQUASHFS_MODE(a) ((a) & 0xfff)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES(A) (A * sizeof(struct squashfs_fragment_entry))
-+
-+#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\
-+ sizeof(long long))
-+
-+/* cached data constants for filesystem */
-+#define SQUASHFS_CACHED_BLKS 8
-+
-+#define SQUASHFS_MAX_FILE_SIZE_LOG 64
-+
-+#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \
-+ (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
-+
-+#define SQUASHFS_MARKER_BYTE 0xff
-+
-+/* meta index cache */
-+#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
-+#define SQUASHFS_META_ENTRIES 31
-+#define SQUASHFS_META_NUMBER 8
-+#define SQUASHFS_SLOTS 4
-+
-+struct meta_entry {
-+ long long data_block;
-+ unsigned int index_block;
-+ unsigned short offset;
-+ unsigned short pad;
-+};
-+
-+struct meta_index {
-+ unsigned int inode_number;
-+ unsigned int offset;
-+ unsigned short entries;
-+ unsigned short skip;
-+ unsigned short locked;
-+ unsigned short pad;
-+ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES];
-+};
-+
-+
-+/*
-+ * definitions for structures on disk
-+ */
-+
-+typedef long long squashfs_block_t;
-+typedef long long squashfs_inode_t;
-+
-+struct squashfs_super_block {
-+ unsigned int s_magic;
-+ unsigned int inodes;
-+ unsigned int bytes_used_2;
-+ unsigned int uid_start_2;
-+ unsigned int guid_start_2;
-+ unsigned int inode_table_start_2;
-+ unsigned int directory_table_start_2;
-+ unsigned int s_major:16;
-+ unsigned int s_minor:16;
-+ unsigned int block_size_1:16;
-+ unsigned int block_log:16;
-+ unsigned int flags:8;
-+ unsigned int no_uids:8;
-+ unsigned int no_guids:8;
-+ unsigned int mkfs_time /* time of filesystem creation */;
-+ squashfs_inode_t root_inode;
-+ unsigned int block_size;
-+ unsigned int fragments;
-+ unsigned int fragment_table_start_2;
-+ long long bytes_used;
-+ long long uid_start;
-+ long long guid_start;
-+ long long inode_table_start;
-+ long long directory_table_start;
-+ long long fragment_table_start;
-+ long long unused;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_index {
-+ unsigned int index;
-+ unsigned int start_block;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_BASE_INODE_HEADER \
-+ unsigned int inode_type:4; \
-+ unsigned int mode:12; \
-+ unsigned int uid:8; \
-+ unsigned int guid:8; \
-+ unsigned int mtime; \
-+ unsigned int inode_number;
-+
-+struct squashfs_base_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_lreg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ long long file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int parent_inode;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int i_count:16;
-+ unsigned int parent_inode;
-+ struct squashfs_dir_index index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header {
-+ struct squashfs_base_inode_header base;
-+ struct squashfs_dev_inode_header dev;
-+ struct squashfs_symlink_inode_header symlink;
-+ struct squashfs_reg_inode_header reg;
-+ struct squashfs_lreg_inode_header lreg;
-+ struct squashfs_dir_inode_header dir;
-+ struct squashfs_ldir_inode_header ldir;
-+ struct squashfs_ipc_inode_header ipc;
-+};
-+
-+struct squashfs_dir_entry {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ int inode_number:16;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_header {
-+ unsigned int count:8;
-+ unsigned int start_block;
-+ unsigned int inode_number;
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry {
-+ long long start_block;
-+ unsigned int size;
-+ unsigned int unused;
-+} __attribute__ ((packed));
-+
-+extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
-+extern int squashfs_uncompress_init(void);
-+extern int squashfs_uncompress_exit(void);
-+
-+/*
-+ * macros to convert each packed bitfield structure from little endian to big
-+ * endian and vice versa. These are needed when creating or using a filesystem
-+ * on a machine with different byte ordering to the target architecture.
-+ *
-+ */
-+
-+#define SQUASHFS_SWAP_START \
-+ int bits;\
-+ int b_pos;\
-+ unsigned long long val;\
-+ unsigned char *s;\
-+ unsigned char *d;
-+
-+#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
-+ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
-+ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
-+ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
-+ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
-+ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
-+ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
-+ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
-+ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
-+ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
-+ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
-+ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
-+ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
-+ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
-+ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
-+ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
-+ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
-+ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
-+ SQUASHFS_SWAP((s)->unused, d, 888, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header))\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dev_inode_header)); \
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_reg_inode_header));\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_lreg_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 224, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 147, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 155, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
-+ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 2);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 16)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_INTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 4);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 32)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 64)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * bits / 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ bits)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+
-+struct squashfs_base_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int type:4;
-+ unsigned int offset:4;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
-+ SQUASHFS_SWAP((s)->guid, d, 20, 4);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header_1));\
-+ SQUASHFS_SWAP((s)->type, d, 24, 4);\
-+ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_1));\
-+ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_1));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_1));\
-+ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_1));\
-+ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
-+}
-+
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+
-+struct squashfs_dir_index_2 {
-+ unsigned int index:27;
-+ unsigned int start_block:29;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_base_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+ unsigned int i_count:16;
-+ struct squashfs_dir_index_2 index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header_2 {
-+ struct squashfs_base_inode_header_2 base;
-+ struct squashfs_dev_inode_header_2 dev;
-+ struct squashfs_symlink_inode_header_2 symlink;
-+ struct squashfs_reg_inode_header_2 reg;
-+ struct squashfs_dir_inode_header_2 dir;
-+ struct squashfs_ldir_inode_header_2 ldir;
-+ struct squashfs_ipc_inode_header_2 ipc;
-+};
-+
-+struct squashfs_dir_header_2 {
-+ unsigned int count:8;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_entry_2 {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry_2 {
-+ unsigned int start_block;
-+ unsigned int size;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_2)); \
-+ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_2));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_2));\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
-+ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 27);\
-+ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
-+ SQUASHFS_SWAP((s)->size, d, 56, 8);\
-+}
-+#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 32, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2))
-+
-+#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
-+ sizeof(int))
-+
-+#endif
-+
-+#ifdef __KERNEL__
-+
-+/*
-+ * macros used to swap each structure entry, taking into account
-+ * bitfields and different bitfield placing conventions on differing
-+ * architectures
-+ */
-+
-+#include <asm/byteorder.h>
-+
-+#ifdef __BIG_ENDIAN
-+ /* convert from little endian to big endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, b_pos)
-+#else
-+ /* convert from big endian to little endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, 64 - tbits - b_pos)
-+#endif
-+
-+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
-+ b_pos = pos % 8;\
-+ val = 0;\
-+ s = (unsigned char *)p + (pos / 8);\
-+ d = ((unsigned char *) &val) + 7;\
-+ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
-+ *d-- = *s++;\
-+ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
-+}
-+
-+#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
-+
-+#endif
-+#endif
-Index: linux-2.6.21/include/linux/squashfs_fs_i.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/include/linux/squashfs_fs_i.h 2007-07-01 17:09:57.000000000 +0100
-@@ -0,0 +1,45 @@
-+#ifndef SQUASHFS_FS_I
-+#define SQUASHFS_FS_I
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_i.h
-+ */
-+
-+struct squashfs_inode_info {
-+ long long start_block;
-+ unsigned int offset;
-+ union {
-+ struct {
-+ long long fragment_start_block;
-+ unsigned int fragment_size;
-+ unsigned int fragment_offset;
-+ long long block_list_start;
-+ } s1;
-+ struct {
-+ long long directory_index_start;
-+ unsigned int directory_index_offset;
-+ unsigned int directory_index_count;
-+ unsigned int parent_inode;
-+ } s2;
-+ } u;
-+ struct inode vfs_inode;
-+};
-+#endif
-Index: linux-2.6.21/include/linux/squashfs_fs_sb.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.21/include/linux/squashfs_fs_sb.h 2007-07-01 17:09:57.000000000 +0100
-@@ -0,0 +1,74 @@
-+#ifndef SQUASHFS_FS_SB
-+#define SQUASHFS_FS_SB
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_sb.h
-+ */
-+
-+#include <linux/squashfs_fs.h>
-+
-+struct squashfs_cache {
-+ long long block;
-+ int length;
-+ long long next_index;
-+ char *data;
-+};
-+
-+struct squashfs_fragment_cache {
-+ long long block;
-+ int length;
-+ unsigned int locked;
-+ char *data;
-+};
-+
-+struct squashfs_sb_info {
-+ struct squashfs_super_block sblk;
-+ int devblksize;
-+ int devblksize_log2;
-+ int swap;
-+ struct squashfs_cache *block_cache;
-+ struct squashfs_fragment_cache *fragment;
-+ int next_cache;
-+ int next_fragment;
-+ int next_meta_index;
-+ unsigned int *uid;
-+ unsigned int *guid;
-+ long long *fragment_index;
-+ unsigned int *fragment_index_2;
-+ unsigned int read_size;
-+ char *read_data;
-+ char *read_page;
-+ struct semaphore read_data_mutex;
-+ struct semaphore read_page_mutex;
-+ struct semaphore block_cache_mutex;
-+ struct semaphore fragment_mutex;
-+ struct semaphore meta_index_mutex;
-+ wait_queue_head_t waitq;
-+ wait_queue_head_t fragment_wait_queue;
-+ struct meta_index *meta_index;
-+ struct inode *(*iget)(struct super_block *s, squashfs_inode_t \
-+ inode);
-+ long long (*read_blocklist)(struct inode *inode, int \
-+ index, int readahead_blks, char *block_list, \
-+ unsigned short **block_p, unsigned int *bsize);
-+ int (*read_fragment_index_table)(struct super_block *s);
-+};
-+#endif
-Index: linux-2.6.21/init/do_mounts_rd.c
-===================================================================
---- linux-2.6.21.orig/init/do_mounts_rd.c 2007-04-26 04:08:32.000000000 +0100
-+++ linux-2.6.21/init/do_mounts_rd.c 2007-07-01 17:09:57.000000000 +0100
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/cramfs_fs.h>
-+#include <linux/squashfs_fs.h>
- #include <linux/initrd.h>
- #include <linux/string.h>
-
-@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
- * numbers could not be found.
- *
- * We currently check for the following magic numbers:
-+ * squashfs
- * minix
- * ext2
- * romfs
-@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
- struct ext2_super_block *ext2sb;
- struct romfs_super_block *romfsb;
- struct cramfs_super *cramfsb;
-+ struct squashfs_super_block *squashfsb;
- int nblocks = -1;
- unsigned char *buf;
-
-@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
- ext2sb = (struct ext2_super_block *) buf;
- romfsb = (struct romfs_super_block *) buf;
- cramfsb = (struct cramfs_super *) buf;
-+ squashfsb = (struct squashfs_super_block *) buf;
- memset(buf, 0xe5, size);
-
- /*
-@@ -101,6 +105,15 @@ identify_ramdisk_image(int fd, int start
- goto done;
- }
-
-+ /* squashfs is at block zero too */
-+ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
-+ printk(KERN_NOTICE
-+ "RAMDISK: squashfs filesystem found at block %d\n",
-+ start_block);
-+ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
-+ goto done;
-+ }
-+
- /*
- * Read block 1 to test for minix and ext2 superblock
- */
diff --git a/packages/linux/linux-rp-2.6.22/tmio-fb-r6-fix-r0.patch b/packages/linux/linux-rp-2.6.22/tmio-fb-r6-fix-r0.patch
deleted file mode 100644
index eab57c50e8..0000000000
--- a/packages/linux/linux-rp-2.6.22/tmio-fb-r6-fix-r0.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 302745ce6f3bab7b1a97de32339405ae3fd8eacb Mon Sep 17 00:00:00 2001
-From: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Date: Fri, 19 Oct 2007 00:05:54 +0400
-Subject: [PATCH] tmio-fb-r6.patch fixes
-
----
- drivers/video/tmiofb.c | 8 ++++----
- 1 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/video/tmiofb.c b/drivers/video/tmiofb.c
-index 10b0105..72eb76c 100644
---- a/drivers/video/tmiofb.c
-+++ b/drivers/video/tmiofb.c
-@@ -463,8 +463,8 @@ static int tmiofb_vblank (struct fb_info *fbi, struct fb_vblank *vblank)
- #define FBIO_TMIO_ACC_WRITE 0x7C639300
- #define FBIO_TMIO_ACC_SYNC 0x7C639301
-
--static int tmiofb_ioctl (struct inode *inode, struct file *file,
-- unsigned int cmd, unsigned long arg, struct fb_info *fbi)
-+static int tmiofb_ioctl (struct fb_info *fbi,
-+ unsigned int cmd, unsigned long arg)
- {
- switch (cmd) {
- case FBIOGET_VBLANK: {
-@@ -677,7 +677,7 @@ static struct fb_ops tmiofb_ops_acc = {
- * 2000 0002 display start
- * 2000 0004 line number match (0x1ff mask???)
- */
--static irqreturn_t tmiofb_irq (int irq, void *__fbi, struct pt_regs *r)
-+static irqreturn_t tmiofb_irq (int irq, void *__fbi)
- {
- struct fb_info* fbi = __fbi;
- struct tmiofb_par* par = fbi->par;
-@@ -762,7 +762,7 @@ static int __init tmiofb_probe (struct device *dev)
- }
- fbi->screen_base = par->sram;
-
-- retval = request_irq (irq->start, &tmiofb_irq, SA_INTERRUPT,
-+ retval = request_irq (irq->start, &tmiofb_irq, IRQF_DISABLED,
- TMIO_NAME_LCD, fbi);
- if (retval)
- goto err_request_irq;
---
-1.4.4.4
-
diff --git a/packages/linux/linux-rp-2.6.22/tmio-nand-r8.patch b/packages/linux/linux-rp-2.6.22/tmio-nand-r8.patch
deleted file mode 100644
index a71fd114a8..0000000000
--- a/packages/linux/linux-rp-2.6.22/tmio-nand-r8.patch
+++ /dev/null
@@ -1,594 +0,0 @@
- drivers/mtd/nand/Kconfig | 7 +
- drivers/mtd/nand/Makefile | 1 +
- drivers/mtd/nand/tmio.c | 554 +++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 562 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
-index f1d60b6..b9c8796 100644
---- a/drivers/mtd/nand/Kconfig
-+++ b/drivers/mtd/nand/Kconfig
-@@ -69,6 +69,13 @@ config MTD_NAND_AMS_DELTA
- help
- Support for NAND flash on Amstrad E3 (Delta).
-
-+config MTD_NAND_TMIO
-+ tristate "NAND Flash device on Toshiba Mobile IO Controller"
-+ depends on MTD_NAND && TOSHIBA_TC6393XB
-+ help
-+ Support for NAND flash connected to a Toshiba Mobile IO
-+ Controller in some PDAs, including the Sharp SL6000x.
-+
- config MTD_NAND_TOTO
- tristate "NAND Flash device on TOTO board"
- depends on ARCH_OMAP && BROKEN
-diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
-index edba1db..64f24e1 100644
---- a/drivers/mtd/nand/Makefile
-+++ b/drivers/mtd/nand/Makefile
-@@ -27,5 +27,6 @@ obj-$(CONFIG_MTD_NAND_AT91) += at91_nand.o
- obj-$(CONFIG_MTD_NAND_CM_X270) += cmx270_nand.o
- obj-$(CONFIG_MTD_NAND_BASLER_EXCITE) += excite_nandflash.o
- obj-$(CONFIG_MTD_NAND_PLATFORM) += plat_nand.o
-+obj-$(CONFIG_MTD_NAND_TMIO) += tmio.o
-
- nand-objs := nand_base.o nand_bbt.o
-diff --git a/drivers/mtd/nand/tmio.c b/drivers/mtd/nand/tmio.c
-new file mode 100644
-index 0000000..d196553
---- /dev/null
-+++ b/drivers/mtd/nand/tmio.c
-@@ -0,0 +1,554 @@
-+/*
-+ * A device driver for NAND flash connected to a Toshiba Mobile IO
-+ * controller. This is known to work with the following variants:
-+ * TC6393XB revision 3
-+ *
-+ * Maintainer: Chris Humbert <mahadri+mtd@drigon.com>
-+ *
-+ * Copyright (C) 2005 Chris Humbert
-+ * Copyright (C) 2005 Dirk Opfer
-+ * Copyright (C) 2004 SHARP
-+ * Copyright (C) 2002 Lineo Japan, Inc.
-+ * Copyright (C) Ian Molton and Sebastian Carlier
-+ *
-+ * Based on Sharp's NAND driver, sharp_sl_tc6393.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/delay.h>
-+#include <linux/wait.h>
-+#include <linux/ioport.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/nand.h>
-+#include <linux/mtd/nand_ecc.h>
-+#include <linux/mtd/partitions.h>
-+#include <asm/io.h>
-+#include <asm/hardware/tmio.h>
-+
-+#include <linux/interrupt.h>
-+
-+#define mtd_printk(level, mtd, format, arg...) \
-+ printk (level "%s: " format, mtd->name, ## arg)
-+#define mtd_warn(mtd, format, arg...) \
-+ mtd_printk (KERN_WARNING, mtd, format, ## arg)
-+
-+/*--------------------------------------------------------------------------*/
-+
-+/* tmio_nfcr.mode Register Command List */
-+#define FCR_MODE_DATA 0x94 // Data Data_Mode
-+#define FCR_MODE_COMMAND 0x95 // Data Command_Mode
-+#define FCR_MODE_ADDRESS 0x96 // Data Address_Mode
-+
-+#define FCR_MODE_HWECC_CALC 0xB4 // HW-ECC Data
-+#define FCR_MODE_HWECC_RESULT 0xD4 // HW-ECC Calculation Result Read_Mode
-+#define FCR_MODE_HWECC_RESET 0xF4 // HW-ECC Reset
-+
-+#define FCR_MODE_POWER_ON 0x0C // Power Supply ON to SSFDC card
-+#define FCR_MODE_POWER_OFF 0x08 // Power Supply OFF to SSFDC card
-+
-+#define FCR_MODE_LED_OFF 0x00 // LED OFF
-+#define FCR_MODE_LED_ON 0x04 // LED ON
-+
-+#define FCR_MODE_EJECT_ON 0x68 // Ejection Demand from Penguin is Advanced
-+#define FCR_MODE_EJECT_OFF 0x08 // Ejection Demand from Penguin is Not Advanced
-+
-+#define FCR_MODE_LOCK 0x6C // Operates By Lock_Mode. Ejection Switch is Invalid
-+#define FCR_MODE_UNLOCK 0x0C // Operates By UnLock_Mode.Ejection Switch is Effective
-+
-+#define FCR_MODE_CONTROLLER_ID 0x40 // Controller ID Read
-+#define FCR_MODE_STANDBY 0x00 // SSFDC card Changes Standby State
-+
-+#define FCR_MODE_WE 0x80
-+#define FCR_MODE_ECC1 0x40
-+#define FCR_MODE_ECC0 0x20
-+#define FCR_MODE_CE 0x10
-+#define FCR_MODE_PCNT1 0x08
-+#define FCR_MODE_PCNT0 0x04
-+#define FCR_MODE_ALE 0x02
-+#define FCR_MODE_CLE 0x01
-+
-+#define FCR_STATUS_BUSY 0x80
-+
-+/*
-+ * NAND Flash Host Controller Configuration Register
-+ */
-+struct tmio_nfhccr {
-+ u8 x00[4];
-+ u16 command; /* 0x04 Command */
-+ u8 x01[0x0a];
-+ u16 base[2]; /* 0x10 NAND Flash Control Reg Base Addr*/
-+ u8 x02[0x29];
-+ u8 intp; /* 0x3d Interrupt Pin */
-+ u8 x03[0x0a];
-+ u8 inte; /* 0x48 Interrupt Enable */
-+ u8 x04;
-+ u8 ec; /* 0x4a Event Control */
-+ u8 x05;
-+ u8 icc; /* 0x4c Internal Clock Control */
-+ u8 x06[0x0e];
-+ u8 eccc; /* 0x5b ECC Control */
-+ u8 x07[4];
-+ u8 nftc; /* 0x60 NAND Flash Transaction Control */
-+ u8 nfm; /* 0x61 NAND Flash Monitor */
-+ u8 nfpsc; /* 0x62 NAND Flash Power Supply Control */
-+ u8 nfdc; /* 0x63 NAND Flash Detect Control */
-+ u8 x08[0x9c];
-+} __attribute__ ((packed));
-+
-+/*
-+ * NAND Flash Control Register
-+ */
-+struct tmio_nfcr {
-+union {
-+ u8 u8; /* 0x00 Data Register */
-+ u16 u16;
-+ u32 u32;
-+} __attribute__ ((packed));
-+ u8 mode; /* 0x04 Mode Register */
-+ u8 status; /* 0x05 Status Register */
-+ u8 isr; /* 0x06 Interrupt Status Register */
-+ u8 imr; /* 0x07 Interrupt Mask Register */
-+} __attribute__ ((packed));
-+
-+struct tmio_nand {
-+ struct mtd_info mtd;
-+ struct nand_chip chip;
-+
-+ struct tmio_nfhccr __iomem * ccr;
-+ struct tmio_nfcr __iomem * fcr;
-+
-+ unsigned int irq;
-+
-+ /* for tmio_nand_read_byte */
-+ u8 read;
-+ unsigned read_good:1;
-+};
-+
-+#define mtd_to_tmio(m) container_of(m, struct tmio_nand, mtd)
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static void tmio_nand_hwcontrol(struct mtd_info *mtd, int cmd,
-+ unsigned int ctrl)
-+{
-+ struct tmio_nand *tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem *fcr = tmio->fcr;
-+ struct nand_chip *chip = mtd->priv;
-+
-+ if (ctrl & NAND_CTRL_CHANGE) {
-+ u8 mode;
-+
-+ if (ctrl & NAND_NCE) {
-+ mode = FCR_MODE_DATA;
-+
-+ if (ctrl & NAND_CLE)
-+ mode |= FCR_MODE_CLE;
-+ else
-+ mode &= ~FCR_MODE_CLE;
-+
-+ if (ctrl & NAND_ALE)
-+ mode |= FCR_MODE_ALE;
-+ else
-+ mode &= ~FCR_MODE_ALE;
-+ } else {
-+ mode = FCR_MODE_STANDBY;
-+ }
-+
-+ iowrite8 (mode, &fcr->mode);
-+ tmio->read_good = 0;
-+ }
-+
-+ if (cmd != NAND_CMD_NONE)
-+ writeb(cmd, chip->IO_ADDR_W);
-+}
-+
-+static int tmio_nand_dev_ready (struct mtd_info* mtd)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ return !(ioread8 (&fcr->status) & FCR_STATUS_BUSY);
-+}
-+
-+static irqreturn_t tmio_irq (int irq, void *__tmio)
-+{
-+ struct tmio_nand* tmio = __tmio;
-+ struct nand_chip* this = &tmio->chip;
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ /* disable RDYREQ interrupt */
-+ iowrite8 (0x00, &fcr->imr);
-+
-+ if (unlikely (!waitqueue_active (&this->controller->wq)))
-+ printk (KERN_WARNING TMIO_NAME_NAND ": spurious interrupt\n");
-+
-+ wake_up (&this->controller->wq);
-+ return IRQ_HANDLED;
-+}
-+
-+/*
-+ * The TMIO core has a RDYREQ interrupt on the posedge of #SMRB.
-+ * This interrupt is normally disabled, but for long operations like
-+ * erase and write, we enable it to wake us up. The irq handler
-+ * disables the interrupt.
-+ */
-+static int
-+tmio_nand_wait (struct mtd_info *mtd, struct nand_chip *this)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+ long timeout;
-+
-+ /* enable RDYREQ interrupt */
-+ iowrite8 (0x0f, &fcr->isr);
-+ iowrite8 (0x81, &fcr->imr);
-+
-+ timeout = wait_event_timeout (this->controller->wq, tmio_nand_dev_ready (mtd),
-+ msecs_to_jiffies (this->state == FL_ERASING ? 400 : 20));
-+
-+ if (unlikely (!tmio_nand_dev_ready (mtd))) {
-+ iowrite8 (0x00, &fcr->imr);
-+ mtd_warn (mtd, "still busy with %s after %d ms\n",
-+ this->state == FL_ERASING ? "erase" : "program",
-+ this->state == FL_ERASING ? 400 : 20);
-+
-+ } else if (unlikely (!timeout)) {
-+ iowrite8 (0x00, &fcr->imr);
-+ mtd_warn (mtd, "timeout waiting for interrupt\n");
-+ }
-+
-+ this->cmdfunc (mtd, NAND_CMD_STATUS, -1, -1);
-+ return this->read_byte (mtd);
-+}
-+
-+/*
-+ * The TMIO controller combines two 8-bit data bytes into one 16-bit
-+ * word. This function separates them so nand_base.c works as expected,
-+ * especially its NAND_CMD_READID routines.
-+ *
-+ * To prevent stale data from being read, tmio_nand_hwcontrol() clears
-+ * tmio->read_good.
-+ */
-+static u_char tmio_nand_read_byte (struct mtd_info *mtd)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+ unsigned int data;
-+
-+ if (tmio->read_good--)
-+ return tmio->read;
-+
-+ data = ioread16 (&fcr->u16);
-+ tmio->read = data >> 8;
-+ return data;
-+}
-+
-+/*
-+ * The TMIO controller converts an 8-bit NAND interface to a 16-bit
-+ * bus interface, so all data reads and writes must be 16-bit wide.
-+ * Thus, we implement 16-bit versions of the read, write, and verify
-+ * buffer functions.
-+ */
-+static void
-+tmio_nand_write_buf (struct mtd_info *mtd, const u_char *buf, int len)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ iowrite16_rep (&fcr->u16, buf, len >> 1);
-+}
-+
-+static void tmio_nand_read_buf (struct mtd_info *mtd, u_char *buf, int len)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ ioread16_rep (&fcr->u16, buf, len >> 1);
-+}
-+
-+static int
-+tmio_nand_verify_buf (struct mtd_info *mtd, const u_char *buf, int len)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+ u16* p = (u16*) buf;
-+
-+ for (len >>= 1; len; len--)
-+ if (*(p++) != ioread16 (&fcr->u16))
-+ return -EFAULT;
-+ return 0;
-+}
-+
-+static void tmio_nand_enable_hwecc (struct mtd_info* mtd, int mode)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ iowrite8 (FCR_MODE_HWECC_RESET, &fcr->mode);
-+ ioread8 (&fcr->u8); /* dummy read */
-+ iowrite8 (FCR_MODE_HWECC_CALC, &fcr->mode);
-+}
-+
-+static int tmio_nand_calculate_ecc (struct mtd_info* mtd, const u_char* dat,
-+ u_char* ecc_code)
-+{
-+ struct tmio_nand* tmio = mtd_to_tmio (mtd);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+ unsigned int ecc;
-+
-+ iowrite8 (FCR_MODE_HWECC_RESULT, &fcr->mode);
-+
-+ ecc = ioread16 (&fcr->u16);
-+ ecc_code[1] = ecc; // 000-255 LP7-0
-+ ecc_code[0] = ecc >> 8; // 000-255 LP15-8
-+ ecc = ioread16 (&fcr->u16);
-+ ecc_code[2] = ecc; // 000-255 CP5-0,11b
-+ ecc_code[4] = ecc >> 8; // 256-511 LP7-0
-+ ecc = ioread16 (&fcr->u16);
-+ ecc_code[3] = ecc; // 256-511 LP15-8
-+ ecc_code[5] = ecc >> 8; // 256-511 CP5-0,11b
-+
-+ iowrite8 (FCR_MODE_DATA, &fcr->mode);
-+ return 0;
-+}
-+
-+static void tmio_hw_init (struct device *dev, struct tmio_nand *tmio)
-+{
-+ struct resource* nfcr = tmio_resource_control (dev);
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct tmio_nfhccr __iomem * ccr = tmio->ccr;
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+ unsigned long base;
-+
-+ /* (89h) SMD Buffer ON By TC6393XB SystemConfig gpibfc1 */
-+ tdev->ops->clock (dev, 1);
-+ tdev->ops->function (dev, 1);
-+
-+ /* (4Ch) CLKRUN Enable 1st spcrunc */
-+ iowrite8 (0x81, &ccr->icc);
-+
-+ /* (10h)BaseAddress 0x1000 spba.spba2 */
-+ base = nfcr->start - tdev->iomem->start;
-+ iowrite16 (base, ccr->base + 0);
-+ iowrite16 (base >> 16, ccr->base + 1);
-+
-+ /* (04h)Command Register I/O spcmd */
-+ iowrite8 (0x02, &ccr->command);
-+
-+ /* (62h) Power Supply Control ssmpwc */
-+ /* HardPowerOFF - SuspendOFF - PowerSupplyWait_4MS */
-+ iowrite8 (0x02, &ccr->nfpsc);
-+
-+ /* (63h) Detect Control ssmdtc */
-+ iowrite8 (0x02, &ccr->nfdc);
-+
-+ /* Interrupt status register clear sintst */
-+ iowrite8 (0x0f, &fcr->isr);
-+
-+ /* After power supply, Media are reset smode */
-+ iowrite8 (FCR_MODE_POWER_ON, &fcr->mode);
-+ iowrite8 (FCR_MODE_COMMAND, &fcr->mode);
-+ iowrite8 (NAND_CMD_RESET, &fcr->u8);
-+
-+ /* Standby Mode smode */
-+ iowrite8 (FCR_MODE_STANDBY, &fcr->mode);
-+
-+ mdelay (5);
-+}
-+
-+static void tmio_hw_stop (struct device *dev, struct tmio_nand *tmio)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct tmio_nfcr __iomem * fcr = tmio->fcr;
-+
-+ iowrite8 (FCR_MODE_POWER_OFF, &fcr->mode);
-+ tdev->ops->function (dev, 0);
-+ tdev->ops->clock (dev, 0);
-+}
-+
-+/*--------------------------------------------------------------------------*/
-+
-+#ifdef CONFIG_MTD_PARTITIONS
-+static const char *part_probes[] = { "cmdlinepart", NULL };
-+#endif
-+
-+static int tmio_probe (struct device *dev)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct tmio_nand_platform_data* tnpd = dev->platform_data;
-+ struct resource* ccr = tmio_resource_config (dev);
-+ struct resource* fcr = tmio_resource_control (dev);
-+ struct resource* irq = tmio_resource_irq (dev);
-+ struct tmio_nand* tmio;
-+ struct mtd_info* mtd;
-+ struct nand_chip* this;
-+ struct mtd_partition* parts;
-+ int nbparts = 0;
-+ int retval;
-+
-+ if (!tnpd)
-+ return -EINVAL;
-+
-+ retval = request_resource (tdev->iomem, ccr);
-+ if (retval)
-+ goto err_request_ccr;
-+
-+ retval = request_resource (tdev->iomem, fcr);
-+ if (retval)
-+ goto err_request_fcr;
-+
-+ tmio = kzalloc (sizeof *tmio, GFP_KERNEL);
-+ if (!tmio) {
-+ retval = -ENOMEM;
-+ goto err_kzalloc;
-+ }
-+
-+ dev_set_drvdata (dev, tmio);
-+ mtd = &tmio->mtd;
-+ this = &tmio->chip;
-+ mtd->priv = this;
-+ mtd->name = TMIO_NAME_NAND;
-+
-+ tmio->ccr = ioremap (ccr->start, ccr->end - ccr->start + 1);
-+ if (!tmio->ccr) {
-+ retval = -EIO;
-+ goto err_iomap_ccr;
-+ }
-+
-+ tmio->fcr = ioremap (fcr->start, fcr->end - fcr->start + 1);
-+ if (!tmio->fcr) {
-+ retval = -EIO;
-+ goto err_iomap_fcr;
-+ }
-+
-+ tmio_hw_init (dev, tmio);
-+
-+ /* Set address of NAND IO lines */
-+ this->IO_ADDR_R = tmio->fcr;
-+ this->IO_ADDR_W = tmio->fcr;
-+
-+ /* Set address of hardware control function */
-+ this->cmd_ctrl = tmio_nand_hwcontrol;
-+ this->dev_ready = tmio_nand_dev_ready;
-+ this->read_byte = tmio_nand_read_byte;
-+ this->write_buf = tmio_nand_write_buf;
-+ this->read_buf = tmio_nand_read_buf;
-+ this->verify_buf = tmio_nand_verify_buf;
-+
-+ /* set eccmode using hardware ECC */
-+ this->ecc.mode = NAND_ECC_HW;
-+ this->ecc.size = 512;
-+ this->ecc.bytes = 6;
-+ this->ecc.hwctl = tmio_nand_enable_hwecc;
-+ this->ecc.calculate = tmio_nand_calculate_ecc;
-+ this->ecc.correct = nand_correct_data;
-+ this->badblock_pattern = tnpd->badblock_pattern;
-+
-+ /* 15 us command delay time */
-+ this->chip_delay = 15;
-+
-+ if (irq->start) {
-+ retval = request_irq (irq->start, &tmio_irq,
-+ IRQF_DISABLED, irq->name, tmio);
-+ if (!retval) {
-+ tmio->irq = irq->start;
-+ this->waitfunc = tmio_nand_wait;
-+ } else
-+ mtd_warn (mtd, "request_irq error %d\n", retval);
-+ }
-+
-+ /* Scan to find existence of the device */
-+ if (nand_scan (mtd, 1)) {
-+ retval = -ENODEV;
-+ goto err_scan;
-+ }
-+
-+ /* Register the partitions */
-+#ifdef CONFIG_MTD_PARTITIONS
-+ nbparts = parse_mtd_partitions (mtd, part_probes, &parts, 0);
-+#endif
-+ if (nbparts <= 0) {
-+ parts = tnpd->partition;
-+ nbparts = tnpd->num_partitions;
-+ }
-+
-+ add_mtd_partitions (mtd, parts, nbparts);
-+ return 0;
-+
-+err_scan:
-+ if (tmio->irq)
-+ free_irq (tmio->irq, tmio);
-+ tmio_hw_stop (dev, tmio);
-+ iounmap (tmio->fcr);
-+err_iomap_fcr:
-+ iounmap (tmio->ccr);
-+err_iomap_ccr:
-+ kfree (tmio);
-+err_kzalloc:
-+ release_resource (fcr);
-+err_request_fcr:
-+ release_resource (ccr);
-+err_request_ccr:
-+ return retval;
-+}
-+
-+static int tmio_remove (struct device *dev)
-+{
-+ struct tmio_nand* tmio = dev_get_drvdata (dev);
-+
-+ nand_release (&tmio->mtd);
-+ if (tmio->irq)
-+ free_irq (tmio->irq, tmio);
-+ tmio_hw_stop (dev, tmio);
-+ iounmap (tmio->fcr);
-+ iounmap (tmio->ccr);
-+ kfree (tmio);
-+ release_resource (tmio_resource_control (dev));
-+ release_resource (tmio_resource_config (dev));
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+static int tmio_suspend (struct device *dev, pm_message_t state)
-+{
-+ tmio_hw_stop (dev, dev_get_drvdata (dev));
-+ return 0;
-+}
-+
-+static int tmio_resume (struct device *dev)
-+{
-+ tmio_hw_init (dev, dev_get_drvdata (dev));
-+ return 0;
-+}
-+#endif
-+
-+static struct device_driver tmio_driver = {
-+ .name = TMIO_NAME_NAND,
-+ .bus = &tmio_bus_type,
-+ .probe = tmio_probe,
-+ .remove = tmio_remove,
-+#ifdef CONFIG_PM
-+ .suspend = tmio_suspend,
-+ .resume = tmio_resume,
-+#endif
-+};
-+
-+static int __init tmio_init (void) {
-+ return driver_register (&tmio_driver);
-+}
-+
-+static void __exit tmio_exit (void) {
-+ driver_unregister (&tmio_driver);
-+}
-+
-+module_init (tmio_init);
-+module_exit (tmio_exit);
-+
-+MODULE_LICENSE ("GPL");
-+MODULE_AUTHOR ("Dirk Opfer, Chris Humbert");
-+MODULE_DESCRIPTION ("NAND flash driver on Toshiba Mobile IO controller");
diff --git a/packages/linux/linux-rp-2.6.22/tmio-ohci-r6.patch b/packages/linux/linux-rp-2.6.22/tmio-ohci-r6.patch
deleted file mode 100644
index 9fdd2962c9..0000000000
--- a/packages/linux/linux-rp-2.6.22/tmio-ohci-r6.patch
+++ /dev/null
@@ -1,929 +0,0 @@
-
- drivers/usb/host/Kconfig | 1
- drivers/usb/host/ohci-hcd.c | 1
- drivers/usb/host/ohci-tmio.c | 894 +++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 896 insertions(+)
-
-Index: git/drivers/usb/host/ohci-tmio.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/drivers/usb/host/ohci-tmio.c 2006-11-07 21:48:33.000000000 +0000
-@@ -0,0 +1,894 @@
-+/*
-+ * OHCI HCD (Host Controller Driver) for USB.
-+ *
-+ * (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
-+ * (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
-+ * (C) Copyright 2002 Hewlett-Packard Company
-+ *
-+ * Bus glue for Toshiba Mobile IO (TMIO) Controller's OHCI core
-+ * (C) Copyright 2005 Chris Humbert <mahadri-usb@drigon.com>
-+ *
-+ * This is known to work with the following variants:
-+ * TC6393XB revision 3 (32kB SRAM)
-+ *
-+ * The TMIO's OHCI core DMAs through a small internal buffer that
-+ * is directly addressable by the CPU. dma_declare_coherent_memory
-+ * and DMA bounce buffers allow the higher-level OHCI host driver to
-+ * work. However, the dma API doesn't handle dma mapping failures
-+ * well (dma_sg_map() is a prime example), so it is unusable.
-+ *
-+ * This HC pretends be a PIO-ish controller and uses the kernel's
-+ * generic allocator for the entire SRAM. Using the USB core's
-+ * usb_operations, we provide hcd_buffer_alloc/free. Using the OHCI's
-+ * ohci_ops, we provide memory management for OHCI's TDs and EDs. We
-+ * internally queue a URB's TDs until enough dma memory is available
-+ * to enqueue them with the HC.
-+ *
-+ * Written from sparse documentation from Toshiba and Sharp's driver
-+ * for the 2.4 kernel,
-+ * usb-ohci-tc6393.c (C) Copyright 2004 Lineo Solutions, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/fs.h>
-+#include <linux/mount.h>
-+#include <linux/pagemap.h>
-+#include <linux/init.h>
-+#include <linux/namei.h>
-+#include <linux/sched.h>
-+
-+#include <linux/genalloc.h>
-+#include <asm/dma-mapping.h> /* for consistent_sync() */
-+#include <asm/hardware/tmio.h>
-+
-+/*-------------------------------------------------------------------------*/
-+
-+/*
-+ * USB Host Controller Configuration Register
-+ */
-+struct tmio_uhccr {
-+ u8 x00[8];
-+ u8 revid; /* 0x08 Revision ID */
-+ u8 x01[7];
-+ u16 basel; /* 0x10 USB Control Register Base Address Low */
-+ u16 baseh; /* 0x12 USB Control Register Base Address High */
-+ u8 x02[0x2c];
-+ u8 ilme; /* 0x40 Internal Local Memory Enable */
-+ u8 x03[0x0b];
-+ u16 pm; /* 0x4c Power Management */
-+ u8 x04[2];
-+ u8 intc; /* 0x50 INT Control */
-+ u8 x05[3];
-+ u16 lmw1l; /* 0x54 Local Memory Window 1 LMADRS Low */
-+ u16 lmw1h; /* 0x56 Local Memory Window 1 LMADRS High */
-+ u16 lmw1bl; /* 0x58 Local Memory Window 1 Base Address Low */
-+ u16 lmw1bh; /* 0x5A Local Memory Window 1 Base Address High */
-+ u16 lmw2l; /* 0x5C Local Memory Window 2 LMADRS Low */
-+ u16 lmw2h; /* 0x5E Local Memory Window 2 LMADRS High */
-+ u16 lmw2bl; /* 0x60 Local Memory Window 2 Base Address Low */
-+ u16 lmw2bh; /* 0x62 Local Memory Window 2 Base Address High */
-+ u8 x06[0x98];
-+ u8 misc; /* 0xFC MISC */
-+ u8 x07[3];
-+} __attribute__ ((packed));
-+
-+union tmio_uhccr_pm {
-+ u16 raw;
-+struct {
-+ unsigned gcken:1; /* D0 */
-+ unsigned ckrnen:1; /* D1 */
-+ unsigned uspw1:1; /* D2 USB Port 1 Power Disable */
-+ unsigned uspw2:1; /* D3 USB Port 2 Power Disable */
-+ unsigned x00:4;
-+ unsigned pmee:1; /* D8 */
-+ unsigned x01:6;
-+ unsigned pmes:1; /* D15 */
-+} __attribute__ ((packed));
-+} __attribute__ ((packed));
-+
-+/*-------------------------------------------------------------------------*/
-+
-+struct tmio_dma_pool {
-+ struct device* dev;
-+ unsigned int size;
-+};
-+
-+struct tmio_hcd {
-+ struct gen_pool* poolp;
-+ struct usb_operations ops;
-+ struct tmio_dma_pool td_pool;
-+ struct tmio_dma_pool ed_pool;
-+
-+ struct tmio_uhccr __iomem *ccr;
-+ void __iomem * sram;
-+ size_t sram_len;
-+};
-+
-+#define hcd_to_tmio(hcd) ((struct tmio_hcd*)(hcd_to_ohci (hcd) + 1))
-+
-+struct tmio_td {
-+ void* data; /* td's data buffer */
-+ void __iomem * bounce; /* dma bounce buffer */
-+ dma_addr_t dma; /* bounce buffer dma address */
-+ size_t len; /* bounce buffer length */
-+ u32 info; /* parameter for td_fill */
-+};
-+
-+struct tmio_urb {
-+ int td_add; /* next index to be added */
-+ int td_queue; /* next index to be HC enqueued */
-+
-+ struct tmio_td td [0]; /* private td data */
-+};
-+
-+static inline struct tmio_urb *urb_to_turb (struct urb *urb)
-+{
-+ urb_priv_t* urb_priv = urb->hcpriv;
-+ return (struct tmio_urb*)(urb_priv->td + urb_priv->length);
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+/* gen_pool_alloc page allocator callback */
-+static unsigned long tmio_pool_callback(struct gen_pool *poolp)
-+{
-+ return 0;
-+}
-+
-+static inline void tmio_pool_destroy(struct tmio_hcd *tmio)
-+{
-+ struct gen_pool *poolp = tmio->poolp;
-+
-+ if (!poolp)
-+ return;
-+ if (poolp->h)
-+ kfree(poolp->h);
-+ kfree(poolp);
-+ tmio->poolp = NULL;
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+#define BOUNDED_XYL(x,y,ylen) (((y) <= (x)) && ((x) < ((y)+(ylen))))
-+#define BOUNDED_XYY(x,y1,y2) (((y1) <= (x)) && ((x) < (y2)))
-+
-+static inline dma_addr_t tmio_virt_to_dma (struct usb_hcd *hcd, void *vaddr)
-+{
-+ struct resource* sram = tmio_resource_mem (hcd->self.controller);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+
-+ return BOUNDED_XYL (vaddr, tmio->sram, tmio->sram_len)
-+ ? sram->start + (vaddr - tmio->sram)
-+ : ~0;
-+}
-+
-+static inline void* tmio_dma_to_virt (struct usb_hcd *hcd, dma_addr_t handle)
-+{
-+ struct resource* sram = tmio_resource_mem (hcd->self.controller);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+
-+ return BOUNDED_XYY (handle, sram->start, sram->end + 1)
-+ ? tmio->sram + handle - sram->start
-+ : NULL;
-+}
-+
-+/*
-+ * allocate dma-able memory in the device's internal sram
-+ *
-+ * The generic pool allocator's minimum chunk size is 32 bytes,
-+ * which is the cache line size on the PXA255, so we don't need
-+ * to do anything special for smaller requests.
-+ */
-+static inline void *tmio_dma_alloc (struct device *dev, size_t size,
-+ dma_addr_t *handle, gfp_t mem_flags)
-+{
-+ struct usb_hcd* hcd = dev_get_drvdata (dev);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+ void* virt = (void*) gen_pool_alloc (tmio->poolp, size);
-+
-+ return (*handle = tmio_virt_to_dma (hcd, virt)) == ~0 ? NULL : virt;
-+}
-+
-+static inline void tmio_dma_free (struct device *dev, size_t size,
-+ void *cpu_addr, dma_addr_t handle)
-+{
-+ struct usb_hcd* hcd = dev_get_drvdata (dev);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+ dma_addr_t dma = tmio_virt_to_dma (hcd, cpu_addr);
-+
-+ if (unlikely (dma == ~0)) {
-+ dev_err (dev, "trying to free bad address 0x%p\n", cpu_addr);
-+ return;
-+ }
-+
-+ if (unlikely (handle != dma))
-+ dev_err (dev, "dma address mismatch for 0x%p: %08x != %08x\n",
-+ cpu_addr, handle, dma);
-+
-+ gen_pool_free (tmio->poolp, (unsigned long) cpu_addr, size);
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static void *tmio_dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
-+ dma_addr_t *handle)
-+{
-+ struct tmio_dma_pool *tdp = (struct tmio_dma_pool*) pool;
-+ return tmio_dma_alloc (tdp->dev, tdp->size, handle, mem_flags);
-+}
-+
-+static void
-+tmio_dma_pool_free (struct dma_pool *pool, void *vaddr, dma_addr_t addr)
-+{
-+ struct tmio_dma_pool *tdp = (struct tmio_dma_pool*) pool;
-+ return tmio_dma_free (tdp->dev, tdp->size, vaddr, addr);
-+}
-+
-+static void *tmio_buffer_alloc (struct usb_bus *bus, size_t size,
-+ gfp_t mem_flags, dma_addr_t *dma)
-+{
-+ return tmio_dma_alloc (bus->controller, size, dma, mem_flags);
-+}
-+
-+static void tmio_buffer_free (struct usb_bus *bus, size_t size,
-+ void *addr, dma_addr_t dma)
-+{
-+ tmio_dma_free (bus->controller, size, addr, dma);
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static void tmio_hc_stop (struct usb_hcd *hcd)
-+{
-+ struct device* dev = hcd->self.controller;
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+ struct tmio_uhccr __iomem* ccr = tmio->ccr;
-+ union tmio_uhccr_pm pm = {0};
-+
-+ pm.gcken = 1;
-+ pm.ckrnen = 1;
-+ pm.uspw1 = 1;
-+ pm.uspw2 = 1;
-+
-+ iowrite8 (0, &ccr->intc);
-+ iowrite8 (0, &ccr->ilme);
-+ iowrite16(0, &ccr->basel);
-+ iowrite16(0, &ccr->baseh);
-+ iowrite16(pm.raw, &ccr->pm);
-+
-+ tdev->ops->function (dev, 0);
-+ tdev->ops->clock (dev, 0);
-+}
-+
-+static void tmio_hc_start (struct usb_hcd *hcd)
-+{
-+ struct device* dev = hcd->self.controller;
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+ struct tmio_uhccr __iomem* ccr = tmio->ccr;
-+ union tmio_uhccr_pm pm = {0};
-+
-+ pm.pmes = 1;
-+ pm.pmee = 1;
-+ pm.ckrnen = 1;
-+ pm.gcken = 1;
-+
-+ tdev->ops->clock (dev, 1);
-+ tdev->ops->function (dev, 1);
-+
-+ iowrite16(pm.raw, &ccr->pm);
-+ iowrite16(hcd->rsrc_start, &ccr->basel);
-+ iowrite16(hcd->rsrc_start >> 16, &ccr->baseh);
-+ iowrite8 (1, &ccr->ilme);
-+ iowrite8 (2, &ccr->intc);
-+
-+ consistent_sync (tmio->sram, tmio->sram_len, DMA_BIDIRECTIONAL);
-+
-+ dev_info (dev, "revision %d @ 0x%08llx, irq %d\n",
-+ ioread8 (&ccr->revid), hcd->rsrc_start, hcd->irq);
-+}
-+
-+static void tmio_stop (struct usb_hcd *hcd)
-+{
-+ struct ohci_hcd* ohci = hcd_to_ohci (hcd);
-+
-+ /* NULL these so ohci_stop() doesn't try to free them */
-+ ohci->hcca = NULL;
-+ ohci->td_cache = NULL;
-+ ohci->ed_cache = NULL;
-+
-+ ohci_stop (hcd);
-+ tmio_hc_stop (hcd);
-+ tmio_pool_destroy (hcd_to_tmio (hcd));
-+
-+ /* We don't free the hcca because tmio_hc_stop() turns off
-+ * the sram and the memory allocation data is destroyed. */
-+}
-+
-+static int tmio_start (struct usb_hcd *hcd)
-+{
-+ struct device* dev = hcd->self.controller;
-+ struct ohci_hcd* ohci = hcd_to_ohci (hcd);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+ int retval;
-+
-+ tmio_hc_start (hcd);
-+
-+ tmio->poolp = gen_pool_create(0, fls(tmio->sram_len) - 1,
-+ tmio_pool_callback, 0);
-+ if (!tmio->poolp) {
-+ retval = -ENOMEM;
-+ goto err_gen_pool_create;
-+ }
-+
-+ gen_pool_free (tmio->poolp, (unsigned long)(tmio->sram),
-+ tmio->sram_len);
-+
-+ ohci->hcca = tmio_dma_alloc (dev, sizeof *ohci->hcca,
-+ &ohci->hcca_dma, GFP_KERNEL);
-+ if (!ohci->hcca) {
-+ retval = -ENOMEM;
-+ goto err_hcca_alloc;
-+ }
-+
-+ /* for our dma_pool_alloc/free hooks */
-+ ohci->td_cache = (struct dma_pool*) &tmio->td_pool;
-+ ohci->ed_cache = (struct dma_pool*) &tmio->ed_pool;
-+
-+ if ((retval = ohci_init (ohci)) < 0)
-+ goto err_ohci_init;
-+
-+ if ((retval = ohci_run (ohci)) < 0)
-+ goto err_ohci_run;
-+
-+ return 0;
-+
-+err_ohci_run:
-+ err ("can't start %s", hcd->self.bus_name);
-+err_ohci_init:
-+err_hcca_alloc:
-+err_gen_pool_create:
-+ tmio_stop (hcd);
-+ return retval;
-+}
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static inline void *tmio_urb_dma_to_virt(struct urb *urb, dma_addr_t dma)
-+{
-+ if (BOUNDED_XYL(dma, urb->transfer_dma, urb->transfer_buffer_length))
-+ return urb->transfer_buffer + dma - urb->transfer_dma;
-+
-+ if (BOUNDED_XYL(dma, urb->setup_dma, sizeof (struct usb_ctrlrequest)))
-+ return urb->setup_packet + dma - urb->setup_dma;
-+
-+ return NULL;
-+}
-+
-+static struct tmio_td* tmio_td_find (struct td *td, int *index)
-+{
-+ struct urb* urb = td->urb;
-+ urb_priv_t* urb_priv = urb->hcpriv;
-+ struct tmio_urb* turb = urb_to_turb (urb);
-+ int i;
-+
-+ for (i=0; i < urb_priv->length; i++)
-+ if (urb_priv->td[i] == td) {
-+ *index = i;
-+ return turb->td + i;
-+ }
-+
-+ return NULL;
-+}
-+
-+/*
-+ * map the td's data to dma-able memory
-+ *
-+ * if this td transfers data,
-+ * sets tmtd->data to the urb's data buffer
-+ * sets tmtd->dma to dma-able memory
-+ * sets tmtd->bounce to non-NULL if a bounce buffer is allocated
-+ * copies the urb's data buffer to the bounce buffer if necessary
-+ */
-+static int tmio_td_dma_map (struct ohci_hcd *ohci, struct urb *urb,
-+ struct tmio_td *tmtd, int idx)
-+{
-+ struct usb_hcd* hcd = ohci_to_hcd (ohci);
-+ struct device* dev = hcd->self.controller;
-+ dma_addr_t dma;
-+
-+ if (!tmtd->len)
-+ return 0;
-+
-+ if (tmio_dma_to_virt (hcd, tmtd->dma))
-+ return 0;
-+
-+ tmtd->data = tmio_urb_dma_to_virt (urb, tmtd->dma);
-+ if (unlikely (!tmtd->data)) {
-+ dev_err (dev, "TD has bad dma address 0x%08x\n", tmtd->dma);
-+ return 0;
-+ }
-+
-+ tmtd->bounce = tmio_dma_alloc (dev, tmtd->len, &dma, GFP_ATOMIC);
-+ if (!tmtd->bounce)
-+ return -ENOMEM;
-+
-+ if ((usb_pipecontrol (urb->pipe) && !idx) || usb_pipeout (urb->pipe)) {
-+ consistent_sync (tmtd->bounce, tmtd->len, DMA_TO_DEVICE);
-+ memcpy (tmtd->bounce, tmtd->data, tmtd->len);
-+ } else
-+ consistent_sync (tmtd->bounce, tmtd->len, DMA_FROM_DEVICE);
-+
-+ tmtd->dma = dma;
-+ return 0;
-+}
-+
-+/*
-+ * unmaps the td's data from dma-able memory
-+ *
-+ * if a bounce buffer has been allocated,
-+ * copy the bounce buffer to the urb's data buffer if necessary
-+ * free the bounce buffer
-+ */
-+static void tmio_td_dma_unmap (struct ohci_hcd *ohci, struct td *td)
-+{
-+ struct device* dev = (ohci_to_hcd (ohci))->self.controller;
-+ struct urb* urb = td->urb;
-+ int idx;
-+ struct tmio_td* tmtd = tmio_td_find (td, &idx);
-+
-+ if (!tmtd->bounce)
-+ return;
-+
-+ if (usb_pipein (urb->pipe) && (usb_pipecontrol (urb->pipe) ? idx : 1)) {
-+ memcpy (tmtd->data, tmtd->bounce, tmtd->len);
-+ consistent_sync (tmtd->data, tmtd->len, DMA_TO_DEVICE);
-+ }
-+
-+ tmio_dma_free (dev, tmtd->len, tmtd->bounce, tmtd->dma);
-+}
-+
-+static int tmio_urb_runqueue (struct ohci_hcd *ohci, struct urb *urb)
-+{
-+ struct tmio_urb* turb = urb_to_turb (urb);
-+ urb_priv_t* urb_priv= urb->hcpriv;
-+ int start = turb->td_queue;
-+ int retval = 0;
-+ int i;
-+
-+ for (i = start; i < turb->td_add; i = ++turb->td_queue) {
-+ struct tmio_td *tmtd = turb->td + i;
-+
-+ if ((retval = tmio_td_dma_map (ohci, urb, tmtd, i)))
-+ break;
-+
-+ td_fill (ohci, tmtd->info, tmtd->dma, tmtd->len, urb, i);
-+ }
-+
-+ if (i <= start)
-+ return retval;
-+
-+ /* kickstart the appropriate list */
-+ wmb ();
-+ switch (urb_priv->ed->type) {
-+ case PIPE_BULK:
-+ ohci_writel (ohci, OHCI_BLF, &ohci->regs->cmdstatus);
-+ break;
-+ case PIPE_CONTROL:
-+ ohci_writel (ohci, OHCI_CLF, &ohci->regs->cmdstatus);
-+ break;
-+ }
-+
-+ return retval;
-+}
-+
-+/*
-+ * This needs to be called with ohci->lock held so the pending urb list
-+ * isn't modified.
-+ */
-+static int tmio_ohci_runqueue (struct ohci_hcd *ohci)
-+{
-+ urb_priv_t* priv;
-+ int retval = 0;
-+
-+ list_for_each_entry_reverse (priv, &ohci->pending, pending)
-+ if ((retval = tmio_urb_runqueue (ohci, priv->td[0]->urb)))
-+ return retval;
-+
-+ return retval;
-+}
-+
-+static void tmio_td_fill (struct ohci_hcd *ohci, u32 info,
-+ dma_addr_t data, int len, struct urb *urb, int index)
-+{
-+ struct tmio_urb* turb = urb_to_turb (urb);
-+ struct tmio_td* tmtd = turb->td + index;
-+
-+ tmtd->data = NULL;
-+ tmtd->bounce = NULL;
-+ tmtd->dma = data;
-+ tmtd->len = len;
-+ tmtd->info = info;
-+ turb->td_add = index + 1;
-+}
-+
-+static void
-+tmio_td_done (struct ohci_hcd *ohci, struct urb *urb, struct td *td)
-+{
-+ tmio_td_dma_unmap (ohci, td);
-+ td_done (ohci, urb, td);
-+}
-+
-+const static struct ohci_ops tmio_ops = {
-+ .dma_pool_alloc = tmio_dma_pool_alloc,
-+ .dma_pool_free = tmio_dma_pool_free,
-+ .td_fill = tmio_td_fill,
-+ .td_done = tmio_td_done,
-+};
-+
-+/*-------------------------------------------------------------------------*/
-+
-+static irqreturn_t tmio_irq (struct usb_hcd *hcd, struct pt_regs *ptregs)
-+{
-+ irqreturn_t retval = ohci_irq (hcd, ptregs);
-+
-+ if (retval == IRQ_HANDLED) {
-+ struct ohci_hcd *ohci = hcd_to_ohci (hcd);
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&ohci->lock, flags);
-+ tmio_ohci_runqueue (ohci);
-+ spin_unlock_irqrestore (&ohci->lock, flags);
-+ }
-+
-+ return retval;
-+}
-+
-+/*
-+ * This is ohci_urb_enqueue with:
-+ * dma address sanitization for tmio_urb_dma_to_virt()
-+ * allocate extra space in urb_priv for our private data
-+ * initialize urb_priv->td[0]->urb for tmio_ohci_runqueue()
-+ * call tmio_ohci_runqueue() after submitting TDs
-+ */
-+static int tmio_urb_enqueue (
-+ struct usb_hcd *hcd,
-+ struct usb_host_endpoint *ep,
-+ struct urb *urb,
-+ gfp_t mem_flags
-+) {
-+ struct ohci_hcd *ohci = hcd_to_ohci (hcd);
-+ struct ed *ed;
-+ urb_priv_t *urb_priv;
-+ unsigned int pipe = urb->pipe;
-+ int i, size = 0;
-+ unsigned long flags;
-+ int retval = 0;
-+
-+#ifdef OHCI_VERBOSE_DEBUG
-+ urb_print (urb, "SUB", usb_pipein (pipe));
-+#endif
-+
-+ /* make sure we can convert dma offsets back to virtual addresses */
-+ if (!tmio_dma_to_virt (hcd, urb->setup_dma))
-+ urb->setup_dma = 0;
-+
-+ if (!tmio_dma_to_virt (hcd, urb->transfer_dma))
-+ urb->transfer_dma = sizeof (struct usb_ctrlrequest);
-+
-+ /* every endpoint has a ed, locate and maybe (re)initialize it */
-+ if (! (ed = ed_get (ohci, ep, urb->dev, pipe, urb->interval)))
-+ return -ENOMEM;
-+
-+ /* for the private part of the URB we need the number of TDs (size) */
-+ switch (ed->type) {
-+ case PIPE_CONTROL:
-+ /* td_submit_urb() doesn't yet handle these */
-+ if (urb->transfer_buffer_length > 4096)
-+ return -EMSGSIZE;
-+
-+ /* 1 TD for setup, 1 for ACK, plus ... */
-+ size = 2;
-+ /* FALLTHROUGH */
-+ // case PIPE_INTERRUPT:
-+ // case PIPE_BULK:
-+ default:
-+ /* one TD for every 4096 Bytes (can be upto 8K) */
-+ size += urb->transfer_buffer_length / 4096;
-+ /* ... and for any remaining bytes ... */
-+ if ((urb->transfer_buffer_length % 4096) != 0)
-+ size++;
-+ /* ... and maybe a zero length packet to wrap it up */
-+ if (size == 0)
-+ size++;
-+ else if ((urb->transfer_flags & URB_ZERO_PACKET) != 0
-+ && (urb->transfer_buffer_length
-+ % usb_maxpacket (urb->dev, pipe,
-+ usb_pipeout (pipe))) == 0)
-+ size++;
-+ break;
-+ case PIPE_ISOCHRONOUS: /* number of packets from URB */
-+ size = urb->number_of_packets;
-+ break;
-+ }
-+
-+ /* allocate the private part of the URB */
-+ urb_priv = kzalloc (sizeof (urb_priv_t)
-+ + size * sizeof (struct td*)
-+ + sizeof (struct tmio_urb)
-+ + size * sizeof (struct tmio_td),
-+ mem_flags);
-+ if (!urb_priv)
-+ return -ENOMEM;
-+ INIT_LIST_HEAD (&urb_priv->pending);
-+ urb_priv->length = size;
-+ urb_priv->ed = ed;
-+
-+ /* allocate the TDs (deferring hash chain updates) */
-+ for (i = 0; i < size; i++) {
-+ urb_priv->td [i] = td_alloc (ohci, mem_flags);
-+ if (!urb_priv->td [i]) {
-+ urb_priv->length = i;
-+ urb_free_priv (ohci, urb_priv);
-+ return -ENOMEM;
-+ }
-+ urb_priv->td [i]->urb = urb;
-+ }
-+
-+ spin_lock_irqsave (&ohci->lock, flags);
-+
-+ /* don't submit to a dead HC */
-+ if (!HC_IS_RUNNING(hcd->state)) {
-+ retval = -ENODEV;
-+ goto fail;
-+ }
-+
-+ /* in case of unlink-during-submit */
-+ spin_lock (&urb->lock);
-+ if (urb->status != -EINPROGRESS) {
-+ spin_unlock (&urb->lock);
-+ urb->hcpriv = urb_priv;
-+ finish_urb (ohci, urb, NULL);
-+ retval = 0;
-+ goto fail;
-+ }
-+
-+ /* schedule the ed if needed */
-+ if (ed->state == ED_IDLE) {
-+ retval = ed_schedule (ohci, ed);
-+ if (retval < 0)
-+ goto fail0;
-+ if (ed->type == PIPE_ISOCHRONOUS) {
-+ u16 frame = ohci_frame_no(ohci);
-+
-+ /* delay a few frames before the first TD */
-+ frame += max_t (u16, 8, ed->interval);
-+ frame &= ~(ed->interval - 1);
-+ frame |= ed->branch;
-+ urb->start_frame = frame;
-+
-+ /* yes, only URB_ISO_ASAP is supported, and
-+ * urb->start_frame is never used as input.
-+ */
-+ }
-+ } else if (ed->type == PIPE_ISOCHRONOUS)
-+ urb->start_frame = ed->last_iso + ed->interval;
-+
-+ /* fill the TDs and link them to the ed; and
-+ * enable that part of the schedule, if needed
-+ * and update count of queued periodic urbs
-+ */
-+ urb->hcpriv = urb_priv;
-+ td_submit_urb (ohci, urb);
-+ tmio_ohci_runqueue (ohci);
-+
-+fail0:
-+ spin_unlock (&urb->lock);
-+fail:
-+ if (retval)
-+ urb_free_priv (ohci, urb_priv);
-+ spin_unlock_irqrestore (&ohci->lock, flags);
-+ return retval;
-+}
-+
-+static const struct hc_driver tmio_hc_driver = {
-+ .description = hcd_name,
-+ .product_desc = "TMIO OHCI USB Host Controller",
-+ .hcd_priv_size = sizeof (struct ohci_hcd)
-+ + sizeof (struct tmio_hcd),
-+
-+ /* generic hardware linkage */
-+ .irq = tmio_irq,
-+ .flags = HCD_USB11 | HCD_MEMORY,
-+
-+ /* basic lifecycle operations */
-+ .start = tmio_start,
-+ .stop = tmio_stop,
-+
-+ /* managing i/o requests and associated device resources */
-+ .urb_enqueue = tmio_urb_enqueue,
-+ .urb_dequeue = ohci_urb_dequeue,
-+ .endpoint_disable = ohci_endpoint_disable,
-+
-+ /* scheduling support */
-+ .get_frame_number = ohci_get_frame,
-+
-+ /* root hub support */
-+ .hub_status_data = ohci_hub_status_data,
-+ .hub_control = ohci_hub_control,
-+#ifdef CONFIG_PM
-+ .bus_suspend = ohci_bus_suspend,
-+ .bus_resume = ohci_bus_resume,
-+#endif
-+ .start_port_reset = ohci_start_port_reset,
-+};
-+
-+/*-------------------------------------------------------------------------*/
-+
-+/* configure so an HC device and id are always provided */
-+/* always called with process context; sleeping is OK */
-+
-+/**
-+ * tmio_probe - initialize TMIO-based HCDs
-+ * Context: !in_interrupt()
-+ *
-+ * Allocates basic resources for this USB host controller, and
-+ * then invokes the start() method for the HCD associated with it
-+ * through the hotplug entry's driver_data.
-+ */
-+static int tmio_probe (struct device *dev)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ struct resource* config = tmio_resource_config (dev);
-+ struct resource* regs = tmio_resource_control (dev);
-+ struct resource* sram = tmio_resource_mem (dev);
-+ struct resource* irq = tmio_resource_irq (dev);
-+ struct usb_operations* ops;
-+ struct tmio_hcd* tmio;
-+ struct ohci_hcd* ohci;
-+ struct usb_hcd* hcd;
-+ int retval;
-+
-+ if (usb_disabled ())
-+ return -ENODEV;
-+
-+ if (dev->dma_mask || dev->coherent_dma_mask) {
-+ dev_err (dev, "DMA not supported\n");
-+ return -ENODEV;
-+ }
-+
-+ hcd = usb_create_hcd (&tmio_hc_driver, dev, dev->bus_id);
-+ if (!hcd) {
-+ retval = -ENOMEM;
-+ goto err_create_hcd;
-+ }
-+
-+ tmio = hcd_to_tmio (hcd);
-+ tmio->td_pool.dev = dev;
-+ tmio->ed_pool.dev = dev;
-+ tmio->td_pool.size = sizeof (struct td);
-+ tmio->ed_pool.size = sizeof (struct ed);
-+ ohci = hcd_to_ohci (hcd);
-+ ohci_hcd_init (ohci);
-+ ohci->ops = &tmio_ops;
-+
-+ retval = request_resource (tdev->iomem, config);
-+ if (retval)
-+ goto err_request_config_resource;
-+
-+ retval = request_resource (tdev->iomem, regs);
-+ if (retval)
-+ goto err_request_regs_resource;
-+
-+ retval = request_resource (tdev->iomem, sram);
-+ if (retval)
-+ goto err_request_sram_resource;
-+
-+ hcd->rsrc_start = regs->start;
-+ hcd->rsrc_len = regs->end - regs->start + 1;
-+ tmio->sram_len = sram->end - sram->start + 1;
-+
-+ tmio->ccr = ioremap (config->start, config->end - config->start + 1);
-+ if (!tmio->ccr) {
-+ retval = -ENOMEM;
-+ goto err_ioremap_ccr;
-+ }
-+
-+ hcd->regs = ioremap (hcd->rsrc_start, hcd->rsrc_len);
-+ if (!hcd->regs) {
-+ retval = -ENOMEM;
-+ goto err_ioremap_regs;
-+ }
-+
-+ tmio->sram = ioremap (sram->start, tmio->sram_len);
-+ if (!tmio->sram) {
-+ retval = -ENOMEM;
-+ goto err_ioremap_sram;
-+ }
-+
-+ /* drivers should use our coherent buffer allocator */
-+ ops = &tmio->ops;
-+ memcpy (ops, hcd->self.op, sizeof *ops);
-+ ops->buffer_alloc = tmio_buffer_alloc;
-+ ops->buffer_free = tmio_buffer_free;
-+ hcd->self.op = ops;
-+
-+ retval = usb_add_hcd (hcd, irq->start, SA_INTERRUPT);
-+ if (retval)
-+ goto err_usb_add_hcd;
-+
-+ return 0;
-+
-+err_usb_add_hcd:
-+ iounmap (tmio->sram);
-+err_ioremap_sram:
-+ iounmap (hcd->regs);
-+err_ioremap_regs:
-+ iounmap (tmio->ccr);
-+err_ioremap_ccr:
-+ release_resource (sram);
-+err_request_sram_resource:
-+ release_resource (regs);
-+err_request_regs_resource:
-+ release_resource (config);
-+err_request_config_resource:
-+ usb_put_hcd (hcd);
-+err_create_hcd:
-+ return retval;
-+}
-+
-+/* may be called without controller electrically present */
-+/* may be called with controller, bus, and devices active */
-+
-+/**
-+ * tmio_remove - shutdown processing for TMIO-based HCDs
-+ * @dev: USB Host Controller being removed
-+ * Context: !in_interrupt()
-+ *
-+ * Reverses the effect of tmio_probe(), first invoking
-+ * the HCD's stop() method. It is always called from a thread
-+ * context, normally "rmmod", "apmd", or something similar.
-+ */
-+static int tmio_remove (struct device *dev)
-+{
-+ struct usb_hcd* hcd = dev_get_drvdata (dev);
-+ struct tmio_hcd* tmio = hcd_to_tmio (hcd);
-+
-+ usb_remove_hcd (hcd);
-+ iounmap (tmio->sram);
-+ iounmap (hcd->regs);
-+ iounmap (tmio->ccr);
-+ release_resource (tmio_resource_mem (dev));
-+ release_resource (tmio_resource_control (dev));
-+ release_resource (tmio_resource_config (dev));
-+ usb_put_hcd (hcd);
-+ return 0;
-+}
-+
-+static struct device_driver tmio_ohci = {
-+ .name = TMIO_NAME_OHCI,
-+ .bus = &tmio_bus_type,
-+ .probe = tmio_probe,
-+ .remove = tmio_remove,
-+};
-+
-+static int __init tmio_init (void)
-+{
-+ dbg (DRIVER_INFO " (%s)", TMIO_SOC_NAME);
-+ dbg ("block sizes: ed %d td %d",
-+ sizeof (struct ed), sizeof (struct td));
-+
-+ return driver_register (&tmio_ohci);
-+}
-+
-+static void __exit tmio_exit (void)
-+{
-+ driver_unregister (&tmio_ohci);
-+}
-+
-+module_init (tmio_init);
-+module_exit (tmio_exit);
-Index: git/drivers/usb/host/Kconfig
-===================================================================
---- git.orig/drivers/usb/host/Kconfig 2006-11-07 21:46:32.000000000 +0000
-+++ git/drivers/usb/host/Kconfig 2006-11-07 21:48:38.000000000 +0000
-@@ -84,6 +84,7 @@ config USB_OHCI_HCD
- depends on USB && USB_ARCH_HAS_OHCI
- select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3
- select I2C if ARCH_PNX4008
-+ select GENERIC_ALLOCATOR if TOSHIBA_TC6393XB
- ---help---
- The Open Host Controller Interface (OHCI) is a standard for accessing
- USB 1.1 host controller hardware. It does more in hardware than Intel's
-Index: git/drivers/usb/host/ohci-hcd.c
-===================================================================
---- git.orig/drivers/usb/host/ohci-hcd.c 2006-11-07 21:46:32.000000000 +0000
-+++ git/drivers/usb/host/ohci-hcd.c 2006-11-07 21:48:33.000000000 +0000
-@@ -944,6 +944,7 @@ MODULE_LICENSE ("GPL");
- || defined(CONFIG_ARCH_OMAP) \
- || defined (CONFIG_ARCH_LH7A404) \
- || defined (CONFIG_PXA27x) \
-+ || defined (CONFIG_TOSHIBA_TC6393XB) \
- || defined (CONFIG_ARCH_EP93XX) \
- || defined (CONFIG_SOC_AU1X00) \
- || defined (CONFIG_USB_OHCI_HCD_PPC_SOC) \
diff --git a/packages/linux/linux-rp-2.6.22/tmio-tc6393-r8.patch b/packages/linux/linux-rp-2.6.22/tmio-tc6393-r8.patch
deleted file mode 100644
index 1bfdc23630..0000000000
--- a/packages/linux/linux-rp-2.6.22/tmio-tc6393-r8.patch
+++ /dev/null
@@ -1,800 +0,0 @@
- arch/arm/common/Kconfig | 3
- arch/arm/common/Makefile | 1
- arch/arm/common/tc6393xb.c | 668 ++++++++++++++++++++++++++++++++++++++++
- arch/arm/mach-pxa/Kconfig | 1
- include/asm-arm/arch-pxa/irqs.h | 10
- include/asm-arm/hardware/tmio.h | 44 ++
- 6 files changed, 727 insertions(+)
-
-Index: git/arch/arm/common/tc6393xb.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/arch/arm/common/tc6393xb.c 2006-11-07 22:14:49.000000000 +0000
-@@ -0,0 +1,668 @@
-+/*
-+ * Toshiba TC6393XB SoC support
-+ *
-+ * Maintainer: Chris Humbert <mahadri-kernel@drigon.com>
-+ *
-+ * Copyright (c) 2005-2006 Chris Humbert
-+ * Copyright (c) 2005 Dirk Opfer
-+ *
-+ * Based on code written by Sharp/Lineo for 2.4 kernels
-+ * Based on locomo.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/delay.h>
-+#include <linux/errno.h>
-+#include <linux/ioport.h>
-+#include <linux/device.h>
-+#include <linux/platform_device.h>
-+#include <linux/slab.h>
-+#include <linux/spinlock.h>
-+#include <linux/fb.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/mach-types.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#include <asm/mach/irq.h>
-+#include <asm/arch/irqs.h>
-+#include <asm/hardware/tmio.h>
-+
-+#ifndef TMIO_SOC_TC6393XB
-+#error "TC6393XB SoC not configured"
-+#endif
-+
-+/*--------------------------------------------------------------------------*/
-+
-+/* cell ids must be 0-based because they are used as array indexes. */
-+#define TC6393_CELL_NAND 0
-+#define TC6393_CELL_SD 1
-+#define TC6393_CELL_OHCI 2
-+#define TC6393_CELL_SERIAL 3
-+#define TC6393_CELL_LCD 4
-+#define TC6393_NUM_CELLS 5
-+
-+#define TC6393_RESOURCE(_name, _start, _end, _flags) \
-+ { \
-+ .name = _name, \
-+ .start = _start, \
-+ .end = _end, \
-+ .flags = _flags, \
-+ }
-+
-+#define TC6393_MEM(name, start, size) \
-+ TC6393_RESOURCE(name, start, (start) + (size) - 1, IORESOURCE_MEM)
-+
-+#define TC6393_IRQ(name, irq) \
-+ TC6393_RESOURCE(name, irq, irq, IORESOURCE_IRQ)
-+
-+const static struct resource tc6393_NAND_resource[] = {
-+ TC6393_MEM (TMIO_NAME_NAND, 0x000100, 0x100),
-+ TC6393_MEM (TMIO_NAME_NAND, 0x001000, 0x008),
-+ TC6393_MEM (TMIO_NAME_NAND, 0, 0),
-+ TC6393_IRQ (TMIO_NAME_NAND, IRQ_TC6393_NAND),
-+};
-+
-+const static struct resource tc6393_SD_resource[] = {
-+ TC6393_MEM (TMIO_NAME_SD, 0x000200, 0x100),
-+ TC6393_MEM (TMIO_NAME_SD, 0x002000, 0x200),
-+ TC6393_MEM (TMIO_NAME_SD, 0, 0),
-+ TC6393_IRQ (TMIO_NAME_SD, IRQ_TC6393_SD),
-+};
-+
-+const static struct resource tc6393_OHCI_resource[] = {
-+ TC6393_MEM (TMIO_NAME_OHCI, 0x000300, 0x100),
-+ TC6393_MEM (TMIO_NAME_OHCI, 0x003000, 0x100),
-+ TC6393_MEM (TMIO_NAME_OHCI, 0x010000, 32 * 1024),
-+ TC6393_IRQ (TMIO_NAME_OHCI, IRQ_TC6393_OHCI),
-+};
-+
-+const static struct resource tc6393_SERIAL_resource[] = {
-+ TC6393_MEM (TMIO_NAME_SERIAL, 0x000400, 0x100),
-+ TC6393_MEM (TMIO_NAME_SERIAL, 0x004000, 0x100),
-+ TC6393_MEM (TMIO_NAME_SERIAL, 0, 0),
-+ TC6393_IRQ (TMIO_NAME_SERIAL, IRQ_TC6393_SERIAL),
-+};
-+
-+const static struct resource tc6393_LCD_resource[] = {
-+ TC6393_MEM (TMIO_NAME_LCD, 0x000500, 0x100),
-+ TC6393_MEM (TMIO_NAME_LCD, 0x005000, 0x200),
-+ TC6393_MEM (TMIO_NAME_LCD, 0x100000, 1024 * 1024),
-+ TC6393_IRQ (TMIO_NAME_LCD, IRQ_TC6393_LCD),
-+};
-+
-+#define TC6393_CELL(_NAME) \
-+ [TC6393_CELL_##_NAME] = { \
-+ .name = TMIO_NAME_##_NAME, \
-+ .id = TC6393_CELL_##_NAME, \
-+ .resource = tc6393_##_NAME##_resource, \
-+ .num_resources = ARRAY_SIZE (tc6393_##_NAME##_resource), \
-+ }
-+
-+struct tc6393_cell {
-+ const char* name;
-+ unsigned int id;
-+ const struct resource* resource;
-+ unsigned int num_resources;
-+};
-+
-+const static struct tc6393_cell tc6393_cell [TC6393_NUM_CELLS] = {
-+ TC6393_CELL (NAND ),
-+ TC6393_CELL (SD ),
-+ TC6393_CELL (OHCI ),
-+ TC6393_CELL (SERIAL ),
-+ TC6393_CELL (LCD ),
-+};
-+
-+/*--------------------------------------------------------------------------*/
-+
-+/*
-+ * TC6393 System Configuration Register
-+ */
-+struct tc6393_scr {
-+ u8 x00[8];
-+ u8 revid; /* 0x08 Revision ID */
-+ u8 x01[0x47];
-+ u8 isr; /* 0x50 Interrupt Status */
-+ u8 x02;
-+ u8 imr; /* 0x52 Interrupt Mask */
-+ u8 x03;
-+ u8 irr; /* 0x54 Interrupt Routing */
-+ u8 x04[0x0b];
-+ u16 gper; /* 0x60 GP Enable */
-+ u8 x05[2];
-+ u16 gpi_sr[2]; /* 0x64 GPI Status */
-+ u16 gpi_imr[2]; /* 0x68 GPI INT Mask */
-+ u16 gpi_eder[2]; /* 0x6c GPI Edge Detect Enable */
-+ u16 gpi_lir[4]; /* 0x70 GPI Level Invert */
-+ u16 gpo_dsr[2]; /* 0x78 GPO Data Set */
-+ u16 gpo_doecr[2]; /* 0x7c GPO Data OE Control */
-+ u16 gp_iarcr[2]; /* 0x80 GP Internal Active Reg Control */
-+ u16 gp_iarlcr[2]; /* 0x84 GP Internal Active Reg Level Con*/
-+ u8 gpi_bcr[4]; /* 0x88 GPI Buffer Control */
-+ u16 gpa_iarcr; /* 0x8c GPa Internal Active Reg Control */
-+ u8 x06[2];
-+ u16 gpa_iarlcr; /* 0x90 GPa Internal Active Reg Level Co*/
-+ u8 x07[2];
-+ u16 gpa_bcr; /* 0x94 GPa Buffer Control */
-+ u8 x08[2];
-+ u16 ccr; /* 0x98 Clock Control */
-+ u16 pll2cr; /* 0x9a PLL2 Control */
-+ u16 pll1cr[2]; /* 0x9c PLL1 Control */
-+ u8 diarcr; /* 0xa0 Device Internal Active Reg Contr*/
-+ u8 dbocr; /* 0xa1 Device Buffer Off Control */
-+ u8 x09[0x3e];
-+ u8 fer; /* 0xe0 Function Enable */
-+ u8 x10[3];
-+ u16 mcr; /* 0xe4 Mode Control */
-+ u8 x11[0x14];
-+ u8 config; /* 0xfc Configuration Control */
-+ u8 x12[2];
-+ u8 debug; /* 0xff Debug */
-+} __attribute__ ((packed));
-+
-+union tc6393_scr_fer {
-+ u8 raw;
-+struct {
-+ unsigned usben:1; /* D0 USB enable */
-+ unsigned lcdcven:1; /* D1 polysylicon TFT enable */
-+ unsigned slcden:1; /* D2 SLCD enable */
-+} __attribute__ ((packed));
-+} __attribute__ ((packed));
-+
-+union tc6393_scr_ccr {
-+ u16 raw;
-+struct {
-+ unsigned ck32ken:1; /* D0 SD host clock enable */
-+ unsigned usbcken:1; /* D1 USB host clock enable */
-+ unsigned x00:2;
-+ unsigned sharp:1; /* D4 ??? set in Sharp's code */
-+ unsigned x01:3;
-+ enum { disable = 0,
-+ m12MHz = 1,
-+ m24MHz = 2,
-+ m48MHz = 3,
-+ } mclksel:3; /* D10-D8 LCD controller clock */
-+ unsigned x02:1;
-+ enum { h24MHz = 0,
-+ h48MHz = 1,
-+ } hclksel:2; /* D13-D12 host bus clock */
-+ unsigned x03:2;
-+} __attribute__ ((packed));
-+} __attribute__ ((packed));
-+
-+/*--------------------------------------------------------------------------*/
-+
-+struct tc6393 {
-+ spinlock_t lock; /* read-modify-write lock */
-+ struct device* dev; /* TC6393 device */
-+ struct tc6393_scr __iomem *scr; /* system configuration reg */
-+
-+ struct resource rscr; /* system config reg resource */
-+ struct resource* iomem; /* entire TC6393 iomem resource */
-+ unsigned int irq; /* hardware cascade irq */
-+
-+ struct tmio_device tdev [TC6393_NUM_CELLS];
-+};
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static u32 tc6393_ioread32 (const void __iomem *addr)
-+{
-+ return ((u32) ioread16 (addr)) | (((u32) ioread16 (addr + 2)) << 16);
-+}
-+
-+static u32 tc6393_iowrite32 (u32 val, const void __iomem *addr)
-+{
-+ iowrite16 (val, addr);
-+ iowrite16 (val >> 16, addr + 2);
-+ return val;
-+}
-+
-+u32 get_tc6393_gpio (struct device *dev)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+
-+ return tc6393_ioread32 (scr->gpo_dsr);
-+}
-+EXPORT_SYMBOL (get_tc6393_gpio);
-+
-+u32 set_tc6393_gpio (struct device *dev, u32 bits)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ unsigned long flags;
-+ u32 dsr;
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ dsr = tc6393_ioread32 (scr->gpo_dsr) | bits;
-+ tc6393_iowrite32 (dsr, scr->gpo_dsr);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+
-+ return dsr;
-+}
-+EXPORT_SYMBOL (set_tc6393_gpio);
-+
-+u32 reset_tc6393_gpio (struct device *dev, u32 bits)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ unsigned long flags;
-+ u32 dsr;
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ dsr = tc6393_ioread32 (scr->gpo_dsr) & ~bits;
-+ tc6393_iowrite32 (dsr, scr->gpo_dsr);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+
-+ return dsr;
-+}
-+EXPORT_SYMBOL (reset_tc6393_gpio);
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static void
-+tc6393_irq (unsigned int irq, struct irq_desc *desc)
-+{
-+ struct tc6393* tc6393 = get_irq_chip_data (irq);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ unsigned int isr;
-+ unsigned int bit;
-+ unsigned int i;
-+
-+ desc->chip->ack (irq);
-+
-+ while ((isr = ioread8(&scr->isr) & ~ioread8(&scr->imr)))
-+ for (bit = 1, i = IRQ_TC6393_START; i <= IRQ_TC6393_LCD;
-+ bit <<= 1, i++)
-+ if (isr & bit)
-+ desc_handle_irq (i, irq_desc + i);
-+}
-+
-+static void tc6393_irq_ack (unsigned int irq)
-+{
-+}
-+
-+static void tc6393_irq_mask (unsigned int irq)
-+{
-+ struct tc6393* tc6393 = get_irq_chip_data (irq);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ iowrite8 (ioread8 (&scr->imr) | (1 << (irq - IRQ_TC6393_START)),
-+ &scr->imr);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+}
-+
-+static void tc6393_irq_unmask (unsigned int irq)
-+{
-+ struct tc6393* tc6393 = get_irq_chip_data (irq);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ iowrite8 (ioread8 (&scr->imr) & ~(1 << (irq - IRQ_TC6393_START)),
-+ &scr->imr);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+}
-+
-+static struct irq_chip tc6393_chip = {
-+ .ack = tc6393_irq_ack,
-+ .mask = tc6393_irq_mask,
-+ .unmask = tc6393_irq_unmask,
-+};
-+
-+static void tc6393_attach_irq (struct tc6393 *tc6393)
-+{
-+ unsigned int irq;
-+
-+ for (irq = IRQ_TC6393_START; irq <= IRQ_TC6393_LCD; irq++) {
-+ set_irq_chip (irq, &tc6393_chip);
-+ set_irq_chip_data(irq, tc6393);
-+ set_irq_handler (irq, handle_edge_irq);
-+ set_irq_flags (irq, IRQF_VALID | IRQF_PROBE);
-+ }
-+
-+ set_irq_type (tc6393->irq, IRQT_FALLING);
-+ set_irq_chip_data (tc6393->irq, tc6393);
-+ set_irq_chained_handler (tc6393->irq, tc6393_irq);
-+}
-+
-+static void tc6393_detach_irq (struct tc6393 *tc6393)
-+{
-+ unsigned int irq;
-+
-+ set_irq_chained_handler (tc6393->irq, NULL);
-+ set_irq_chip_data (tc6393->irq, NULL);
-+
-+ for (irq = IRQ_TC6393_START; irq <= IRQ_TC6393_LCD; irq++) {
-+ set_irq_flags (irq, 0);
-+ set_irq_chip (irq, NULL);
-+ set_irq_chip_data(irq, NULL);
-+ }
-+}
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static int tc6393_bus_match (struct device *dev, struct device_driver *drv)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ const struct tc6393_cell* cell = tdev->soc_data;
-+
-+ return !strcmp (cell->name, drv->name);
-+}
-+
-+static int tc6393_bus_suspend (struct device *dev, pm_message_t state)
-+{
-+ struct device_driver* drv = dev->driver;
-+ return drv && drv->suspend ? drv->suspend (dev, state) : 0;
-+}
-+
-+static int tc6393_bus_resume (struct device *dev)
-+{
-+ struct device_driver* drv = dev->driver;
-+ return drv && drv->resume ? drv->resume (dev) : 0;
-+}
-+
-+struct bus_type tc6393_bus_type = {
-+ .name = TMIO_NAME_BUS,
-+ .match = tc6393_bus_match,
-+ .suspend = tc6393_bus_suspend,
-+ .resume = tc6393_bus_resume,
-+};
-+EXPORT_SYMBOL (tc6393_bus_type);
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static void tc6393_cell_clock (struct device *dev, int enable)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ const struct tc6393_cell* cell = tdev->soc_data;
-+ struct tc6393* tc6393 = dev_get_drvdata (dev->parent);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ union tc6393_scr_ccr ccr;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ ccr.raw = ioread16 (&scr->ccr);
-+
-+ switch (cell->id) {
-+ case TC6393_CELL_SD: ccr.ck32ken = enable; break;
-+ case TC6393_CELL_OHCI: ccr.usbcken = enable; break;
-+ case TC6393_CELL_LCD:
-+ ccr.mclksel = enable ? m48MHz : disable;
-+ break;
-+ }
-+
-+ printk (KERN_DEBUG TMIO_NAME_CORE ": scr->ccr = %04x\n", ccr.raw);
-+
-+ iowrite16(ccr.raw, &scr->ccr);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+}
-+
-+static void tc6393_cell_function (struct device *dev, int enable)
-+{
-+ struct tmio_device* tdev = dev_to_tdev (dev);
-+ const struct tc6393_cell* cell = tdev->soc_data;
-+ struct tc6393* tc6393 = dev_get_drvdata (dev->parent);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ union tc6393_scr_fer fer;
-+ unsigned long flags;
-+
-+ if (cell->id == TC6393_CELL_NAND) {
-+ if (enable) {
-+ /* SMD buffer on */
-+ printk (KERN_DEBUG TMIO_NAME_CORE ": SMD buffer on\n");
-+ iowrite8 (0xff, scr->gpi_bcr + 1);
-+ }
-+ return;
-+ }
-+
-+ spin_lock_irqsave (&tc6393->lock, flags);
-+ fer.raw = ioread16 (&scr->fer);
-+
-+ switch (cell->id) {
-+ case TC6393_CELL_OHCI: fer.usben = enable; break;
-+ case TC6393_CELL_LCD: fer.slcden = enable; break;
-+ }
-+
-+ printk (KERN_DEBUG TMIO_NAME_CORE ": scr->fer = %02x\n", fer.raw);
-+
-+ iowrite8 (fer.raw, &scr->fer);
-+ spin_unlock_irqrestore (&tc6393->lock, flags);
-+}
-+
-+static void
-+tc6393_lcd_mode (struct device *dev, const struct fb_videomode *mode)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev->parent);
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+
-+ iowrite16 (mode->pixclock, scr->pll1cr + 0);
-+ iowrite16 (mode->pixclock >> 16, scr->pll1cr + 1);
-+}
-+
-+static struct tmio_cell_ops tc6393_cell_ops = {
-+ .clock = tc6393_cell_clock,
-+ .function = tc6393_cell_function,
-+ .lcd_mode = tc6393_lcd_mode,
-+};
-+
-+static void tc6393_device_release (struct device *dev)
-+{
-+}
-+
-+static int
-+tc6393_device_register (struct tc6393 *tc6393, struct tmio_cell *tcell)
-+{
-+ const struct tc6393_cell* cell;
-+ struct tmio_device* tdev;
-+ struct device* dev;
-+ int i;
-+
-+ for (i = 0; strcmp (tcell->name, tc6393_cell [i].name); )
-+ if (++i >= ARRAY_SIZE(tc6393_cell))
-+ return -EINVAL;
-+
-+ cell = tc6393_cell + i;
-+ tdev = tc6393->tdev + i;
-+ dev = &tdev->dev;
-+
-+ tdev->ops = &tc6393_cell_ops;
-+ tdev->iomem = tc6393->iomem;
-+ tdev->soc_data = (void*) cell;
-+
-+ dev->parent = tc6393->dev;
-+ strncpy (dev->bus_id, cell->name, sizeof dev->bus_id);
-+ dev->bus = &tc6393_bus_type;
-+ dev->dma_mask = tc6393->dev->dma_mask;
-+ dev->coherent_dma_mask = tc6393->dev->coherent_dma_mask;
-+ dev->release = tc6393_device_release;
-+ dev->platform_data = tcell->platform_data;
-+
-+ for (i=0; i < cell->num_resources; i++) {
-+ const struct resource* cr = cell->resource + i;
-+ struct resource* dr = tdev->resource + i;
-+
-+ dr->name = cr->name;
-+ dr->start = cr->start;
-+ dr->end = cr->end;
-+ dr->flags = cr->flags;
-+
-+ /* convert memory offsets to absolutes */
-+ if (cr->flags & IORESOURCE_MEM) {
-+ dr->start += tc6393->iomem->start;
-+ dr->end += tc6393->iomem->start;
-+ }
-+ }
-+
-+ return device_register (dev);
-+}
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static void tc6393_hw_init (struct tc6393 *tc6393)
-+{
-+ struct tc6393_scr __iomem * scr = tc6393->scr;
-+ struct tc6393_platform_data* tcpd = tc6393->dev->platform_data;
-+
-+ tcpd->enable (tc6393->dev);
-+
-+ iowrite8 (0, &scr->fer);
-+ iowrite16(tcpd->scr_pll2cr, &scr->pll2cr);
-+ iowrite16(tcpd->scr_ccr, &scr->ccr);
-+ iowrite16(tcpd->scr_mcr, &scr->mcr);
-+ iowrite16(tcpd->scr_gper, &scr->gper);
-+ iowrite8 (0, &scr->irr);
-+ iowrite8 (0xbf, &scr->imr);
-+ iowrite16(tcpd->scr_gpo_dsr, scr->gpo_dsr + 0);
-+ iowrite16(tcpd->scr_gpo_dsr >> 16, scr->gpo_dsr + 1);
-+ iowrite16(tcpd->scr_gpo_doecr, scr->gpo_doecr + 0);
-+ iowrite16(tcpd->scr_gpo_doecr >> 16, scr->gpo_doecr + 1);
-+}
-+
-+static int tc6393_probe (struct device *dev)
-+{
-+ struct platform_device* pdev = to_platform_device (dev);
-+ struct tc6393_platform_data* tcpd = dev->platform_data;
-+ struct tc6393* tc6393;
-+ struct resource* iomem;
-+ struct resource* rscr;
-+ int retval;
-+ int i;
-+
-+ iomem = platform_get_resource (pdev, IORESOURCE_MEM, 0);
-+ if (!iomem)
-+ return -EINVAL;
-+
-+ tc6393 = kzalloc (sizeof *tc6393, GFP_KERNEL);
-+ if (!tc6393) {
-+ retval = -ENOMEM;
-+ goto err_kzalloc;
-+ }
-+
-+ dev_set_drvdata (dev, tc6393);
-+ spin_lock_init (&tc6393->lock);
-+ tc6393->dev = dev;
-+ tc6393->iomem = iomem;
-+ tc6393->irq = platform_get_irq (pdev, 0);
-+
-+ rscr = &tc6393->rscr;
-+ rscr->name = TMIO_NAME_CORE;
-+ rscr->start = iomem->start;
-+ rscr->end = iomem->start + 0xff;
-+ rscr->flags = IORESOURCE_MEM;
-+
-+ retval = request_resource (iomem, rscr);
-+ if (retval)
-+ goto err_request_scr;
-+
-+ tc6393->scr = ioremap (rscr->start, rscr->end - rscr->start + 1);
-+ if (!tc6393->scr) {
-+ retval = -ENOMEM;
-+ goto err_ioremap;
-+ }
-+
-+ tc6393_hw_init (tc6393);
-+
-+ printk (KERN_INFO "Toshiba %s revision %d at 0x%08lx, irq %d\n",
-+ TMIO_SOC_NAME, ioread8 (&tc6393->scr->revid),
-+ iomem->start, tc6393->irq);
-+
-+ if (tc6393->irq)
-+ tc6393_attach_irq (tc6393);
-+
-+ for (i = 0; i < tcpd->num_cells; i++)
-+ tc6393_device_register (tc6393, tcpd->cell + i);
-+
-+ return 0;
-+
-+err_ioremap:
-+ release_resource (rscr);
-+err_request_scr:
-+ kfree(tc6393);
-+err_kzalloc:
-+ release_resource (iomem);
-+ return retval;
-+}
-+
-+static int tc6393_dev_remove (struct device *dev, void *data)
-+{
-+ device_unregister (dev);
-+ return 0;
-+}
-+
-+static int tc6393_remove (struct device *dev)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev);
-+
-+ device_for_each_child (dev, tc6393, tc6393_dev_remove);
-+
-+ if (tc6393->irq)
-+ tc6393_detach_irq (tc6393);
-+
-+ iounmap (tc6393->scr);
-+ release_resource (&tc6393->rscr);
-+ release_resource (tc6393->iomem);
-+ kfree (tc6393);
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+static int tc6393_suspend (struct device *dev, pm_message_t state)
-+{
-+ struct tc6393_platform_data* tcpd = dev->platform_data;
-+ tcpd->disable (dev);
-+ return 0;
-+}
-+
-+static int tc6393_resume (struct device *dev)
-+{
-+ struct tc6393* tc6393 = dev_get_drvdata (dev);
-+ tc6393_hw_init (tc6393);
-+ return 0;
-+}
-+#endif
-+
-+static struct device_driver tc6393_device_driver = {
-+ .name = TMIO_SOC_NAME,
-+ .bus = &platform_bus_type,
-+ .probe = tc6393_probe,
-+ .remove = tc6393_remove,
-+#ifdef CONFIG_PM
-+ .suspend = tc6393_suspend,
-+ .resume = tc6393_resume,
-+#endif
-+};
-+
-+/*--------------------------------------------------------------------------*/
-+
-+static int __init tc6393_init (void)
-+{
-+ int retval = bus_register (&tc6393_bus_type);
-+ if (retval)
-+ return retval;
-+
-+ return driver_register (&tc6393_device_driver);
-+}
-+
-+static void __exit tc6393_exit (void)
-+{
-+ driver_unregister (&tc6393_device_driver);
-+ bus_unregister (&tc6393_bus_type);
-+}
-+
-+module_init (tc6393_init);
-+module_exit (tc6393_exit);
-+
-+MODULE_DESCRIPTION ("TC6393 SoC bus driver");
-+MODULE_AUTHOR ("Chris Humbert, Dirk Opfer");
-+MODULE_LICENSE ("GPL");
-Index: git/arch/arm/common/Kconfig
-===================================================================
---- git.orig/arch/arm/common/Kconfig 2006-10-31 16:08:28.000000000 +0000
-+++ git/arch/arm/common/Kconfig 2006-11-07 22:13:09.000000000 +0000
-@@ -31,3 +31,6 @@ config SHARPSL_PM
-
- config SHARP_SCOOP
- bool
-+
-+config TOSHIBA_TC6393XB
-+ bool
-Index: git/arch/arm/mach-pxa/Kconfig
-===================================================================
---- git.orig/arch/arm/mach-pxa/Kconfig 2006-11-07 22:13:06.000000000 +0000
-+++ git/arch/arm/mach-pxa/ 2006-11-07 23:30:34.000000000 +0000
-@@ -128,6 +128,7 @@ config MACH_BORZOI
- config MACH_TOSA
- bool "Enable Sharp SL-6000x (Tosa) Support"
- depends on PXA_SHARPSL_25x
-+ select TOSHIBA_TC6393XB
-
- config PXA25x
- bool
-Index: git/arch/arm/common/Makefile
-===================================================================
---- git.orig/arch/arm/common/Makefile 2006-10-31 16:08:28.000000000 +0000
-+++ git/arch/arm/common/Makefile 2006-11-07 22:13:09.000000000 +0000
-@@ -17,3 +17,4 @@ obj-$(CONFIG_SHARPSL_PM) += sharpsl_pm.o
- obj-$(CONFIG_SHARP_SCOOP) += scoop.o
- obj-$(CONFIG_ARCH_IXP2000) += uengine.o
- obj-$(CONFIG_ARCH_IXP23XX) += uengine.o
-+obj-$(CONFIG_TOSHIBA_TC6393XB) += tc6393xb.o
-Index: git/include/asm-arm/hardware/tmio.h
-===================================================================
---- git.orig/include/asm-arm/hardware/tmio.h 2006-11-07 22:13:09.000000000 +0000
-+++ git/include/asm-arm/hardware/tmio.h 2006-11-07 22:13:09.000000000 +0000
-@@ -91,6 +91,50 @@ struct tmio_device {
-
- /*--------------------------------------------------------------------------*/
-
-+/*
-+ * TC6393XB SoC
-+ */
-+#ifdef CONFIG_TOSHIBA_TC6393XB
-+#define TMIO_SOC_TC6393XB
-+#define TMIO_SOC_NAME "TC6393XB"
-+#define TMIO_NAME_BUS "tc6393-bus"
-+#define TMIO_NAME_CORE "tc6393-core"
-+#define TMIO_NAME_NAND "tc6393-nand"
-+#define TMIO_NAME_SD "tc6393-sd"
-+#define TMIO_NAME_OHCI "tc6393-ohci"
-+#define TMIO_NAME_SERIAL "tc6393-serial"
-+#define TMIO_NAME_LCD "tc6393-lcd"
-+#define tmio_bus_type tc6393_bus_type
-+
-+#define TC6393_GPIO(x) (1 << (x))
-+
-+extern struct bus_type tc6393_bus_type;
-+
-+struct tc6393_platform_data {
-+ u16 scr_pll2cr; /* PLL2 Control */
-+ u16 scr_ccr; /* Clock Control */
-+ u16 scr_mcr; /* Mode Control */
-+ u16 scr_gper; /* GP Enable */
-+ u32 scr_gpo_doecr; /* GPO Data OE Control */
-+ u32 scr_gpo_dsr; /* GPO Data Set */
-+
-+ /* cells to register as devices */
-+ struct tmio_cell* cell;
-+ unsigned int num_cells;
-+
-+ /* callbacks to enable and disable the TC6393XB's power and clock */
-+ void (*enable) (struct device *dev);
-+ void (*disable) (struct device *dev);
-+};
-+
-+u32 get_tc6393_gpio (struct device *dev);
-+u32 set_tc6393_gpio (struct device *dev, u32 bits);
-+u32 reset_tc6393_gpio (struct device *dev, u32 bits);
-+
-+/*--------------------------------------------------------------------------*/
-+
-+#else
- #error "no TMIO SoC configured"
-+#endif
-
- #endif
-Index: git/include/asm-arm/arch-pxa/irqs.h
-===================================================================
---- git.orig/include/asm-arm/arch-pxa/irqs.h 2006-10-31 16:09:33.000000000 +0000
-+++ git/include/asm-arm/arch-pxa/irqs.h 2006-11-07 22:13:09.000000000 +0000
-@@ -163,17 +163,27 @@
- #define IRQ_LOCOMO_SPI_OVRN (IRQ_BOARD_END + 20)
- #define IRQ_LOCOMO_SPI_TEND (IRQ_BOARD_END + 21)
-
-+#define IRQ_TC6393_START (IRQ_BOARD_END)
-+#define IRQ_TC6393_NAND (IRQ_BOARD_END + 0)
-+#define IRQ_TC6393_SD (IRQ_BOARD_END + 1)
-+#define IRQ_TC6393_OHCI (IRQ_BOARD_END + 2)
-+#define IRQ_TC6393_SERIAL (IRQ_BOARD_END + 3)
-+#define IRQ_TC6393_LCD (IRQ_BOARD_END + 4)
-+
- /*
- * Figure out the MAX IRQ number.
- *
- * If we have an SA1111, the max IRQ is S1_BVD1_STSCHG+1.
- * If we have an LoCoMo, the max IRQ is IRQ_LOCOMO_SPI_TEND+1
-+ * If we have an TC6393XB, the max IRQ is IRQ_TC6393_LCD+1
- * Otherwise, we have the standard IRQs only.
- */
- #ifdef CONFIG_SA1111
- #define NR_IRQS (IRQ_S1_BVD1_STSCHG + 1)
- #elif defined(CONFIG_SHARP_LOCOMO)
- #define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1)
-+#elif defined(CONFIG_TOSHIBA_TC6393XB)
-+#define NR_IRQS (IRQ_TC6393_LCD + 1)
- #elif defined(CONFIG_ARCH_LUBBOCK) || \
- defined(CONFIG_MACH_LOGICPD_PXA270) || \
- defined(CONFIG_MACH_MAINSTONE)
diff --git a/packages/linux/linux-rp-2.6.22/tosa-keyboard-r19.patch b/packages/linux/linux-rp-2.6.22/tosa-keyboard-r19.patch
deleted file mode 100644
index 948c27fdce..0000000000
--- a/packages/linux/linux-rp-2.6.22/tosa-keyboard-r19.patch
+++ /dev/null
@@ -1,514 +0,0 @@
- drivers/input/keyboard/Kconfig | 12 -
- drivers/input/keyboard/Makefile | 1
- drivers/input/keyboard/tosakbd.c | 467 +++++++++++++++++++++++++++++++++++++++
- 3 files changed, 479 insertions(+), 1 deletion(-)
-
-Index: git/drivers/input/keyboard/Kconfig
-===================================================================
---- git.orig/drivers/input/keyboard/Kconfig 2006-10-31 16:08:57.000000000 +0000
-+++ git/drivers/input/keyboard/Kconfig 2006-11-07 22:13:10.000000000 +0000
-@@ -148,12 +148,22 @@ config KEYBOARD_SPITZ
- depends on PXA_SHARPSL
- default y
- help
-- Say Y here to enable the keyboard on the Sharp Zaurus SL-C1000,
-+ Say Y here to enable the keyboard on the Sharp Zaurus SL-C1000,
- SL-C3000 and Sl-C3100 series of PDAs.
-
- To compile this driver as a module, choose M here: the
- module will be called spitzkbd.
-
-+config KEYBOARD_TOSA
-+ tristate "Tosa keyboard"
-+ depends on PXA_SHARPSL
-+ default y
-+ help
-+ Say Y here to enable the keyboard on the Sharp Zaurus SL-6000x (Tosa)
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called tosakbd.
-+
- config KEYBOARD_AMIGA
- tristate "Amiga keyboard"
- depends on AMIGA
-Index: git/drivers/input/keyboard/Makefile
-===================================================================
---- git.orig/drivers/input/keyboard/Makefile 2006-10-31 16:08:57.000000000 +0000
-+++ git/drivers/input/keyboard/Makefile 2006-11-07 22:13:10.000000000 +0000
-@@ -17,3 +17,4 @@ obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkb
- obj-$(CONFIG_KEYBOARD_AAED2000) += aaed2000_kbd.o
- obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o
- obj-$(CONFIG_KEYBOARD_ASIC3) += asic3_keys.o
-+obj-$(CONFIG_KEYBOARD_TOSA) += tosakbd.o
-Index: git/drivers/input/keyboard/tosakbd.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/drivers/input/keyboard/tosakbd.c 2006-11-07 23:27:19.000000000 +0000
-@@ -0,0 +1,467 @@
-+/*
-+ * Keyboard driver for Sharp Tosa models (SL-6000x)
-+ *
-+ * Copyright (c) 2005 Dirk Opfer
-+ *
-+ * Based on xtkbd.c/locomkbd.c/corgikbd.c
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/init.h>
-+#include <linux/input.h>
-+#include <linux/interrupt.h>
-+#include <linux/jiffies.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+
-+#include <asm/arch/tosa.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+
-+
-+#define TOSA_KEY_STROBE_NUM (11)
-+#define TOSA_KEY_SENSE_NUM (7)
-+
-+#define KEYMASK_ON (0x1<<0)
-+#define KEYMASK_REC (0x1<<1)
-+#define KEYMASK_SYNC (0x1<<2)
-+
-+#define KB_ROWS 7
-+#define KB_COLS 11
-+#define KB_ROWMASK(r) (1 << (r))
-+#define SCANCODE(r,c) ( ((r)<<4) + (c) + 1 )
-+#define NR_SCANCODES (SCANCODE(KB_ROWS-1,KB_COLS)+1+1)
-+
-+#define SCAN_INTERVAL (HZ/10)
-+#define HP_SCAN_INTERVAL (150) /* ms */
-+#define HP_STABLE_COUNT 2
-+
-+#define TOSA_KEY_CALENDER KEY_F1
-+#define TOSA_KEY_ADDRESS KEY_F2
-+#define TOSA_KEY_FN KEY_F3
-+#define TOSA_KEY_CANCEL KEY_F4
-+#define TOSA_KEY_OFF KEY_SUSPEND
-+#define TOSA_KEY_CENTER KEY_F5
-+#define TOSA_KEY_REC KEY_F6
-+#define TOSA_KEY_LIGHT KEY_F7
-+#define TOSA_KEY_RECORD KEY_F8
-+#define TOSA_KEY_HOME KEY_F9
-+#define TOSA_KEY_MAIL KEY_F10
-+#define TOSA_KEY_OK KEY_F11
-+#define TOSA_KEY_MENU KEY_F12
-+#define TOSA_KEY_SYNC KEY_F13
-+
-+#define GET_ROWS_STATUS(c) ((GPLR2 & TOSA_GPIO_ALL_SENSE_BIT) >> TOSA_GPIO_ALL_SENSE_RSHIFT)
-+#define KB_DISCHARGE_DELAY 10
-+#define KB_ACTIVATE_DELAY 10
-+
-+
-+static unsigned char tosakbd_keycode[NR_SCANCODES] = {
-+ 0, /* 0 */
-+ 0, KEY_W, 0, 0, 0, KEY_K, KEY_BACKSPACE, KEY_P, 0, 0, 0, TOSA_KEY_OFF, 0, 0, 0, 0, /*1 - 16*/
-+ KEY_Q, KEY_E, KEY_T, KEY_Y, 0, KEY_O, KEY_I, KEY_COMMA, 0, 0, 0, TOSA_KEY_RECORD, 0, 0, 0, 0, /*17 - 32*/
-+ KEY_A, KEY_D, KEY_G, KEY_U, 0, KEY_L, KEY_ENTER, KEY_DOT, 0, 0, 0, TOSA_KEY_SYNC, 0, 0, 0, 0, /*33 - 48*/
-+ KEY_Z, KEY_C, KEY_V, KEY_J, TOSA_KEY_ADDRESS, TOSA_KEY_CANCEL, TOSA_KEY_CENTER, TOSA_KEY_OK, KEY_LEFTSHIFT, 0 , 0,0 , 0, 0, 0, 0, /*49 - 64*/
-+ KEY_S, KEY_R, KEY_B, KEY_N, TOSA_KEY_CALENDER, TOSA_KEY_HOME, TOSA_KEY_REC, TOSA_KEY_LIGHT, 0, KEY_RIGHTSHIFT, 0, 0, 0, 0, 0, 0, /*65 - 80*/
-+ KEY_TAB, KEY_SLASH, KEY_H, KEY_M, TOSA_KEY_MENU, 0, KEY_UP, 0, 0, 0, TOSA_KEY_FN, 0, 0, 0, 0, 0, /*81 - 96*/
-+ KEY_X, KEY_F, KEY_SPACE, KEY_APOSTROPHE, TOSA_KEY_MAIL, KEY_LEFT, KEY_DOWN, KEY_RIGHT, 0, 0, 0, 0, 0, /*97 - 109*/
-+};
-+
-+struct tosakbd {
-+ unsigned char keycode[ARRAY_SIZE(tosakbd_keycode)];
-+ struct input_dev *input;
-+
-+ spinlock_t lock;
-+ struct timer_list timer;
-+ struct timer_list hptimer;
-+
-+ int hp_state;
-+ int hp_count;
-+
-+ unsigned int suspended;
-+ unsigned long suspend_jiffies;
-+};
-+
-+/* Helper functions for reading the keyboard matrix
-+ * Note: We should really be using pxa_gpio_mode to alter GPDR but it
-+ * requires a function call per GPIO bit which is excessive
-+ * when we need to access 12 bits at once, multiple times.
-+ * These functions must be called within local_irq_save()/local_irq_restore()
-+ * or similar.
-+ */
-+static inline void tosakbd_discharge_all(void)
-+{
-+ /* STROBE All HiZ */
-+ GPCR1 = TOSA_GPIO_HIGH_STROBE_BIT;
-+ GPDR1 &= ~TOSA_GPIO_HIGH_STROBE_BIT;
-+ GPCR2 = TOSA_GPIO_LOW_STROBE_BIT;
-+ GPDR2 &= ~TOSA_GPIO_LOW_STROBE_BIT;
-+}
-+
-+static inline void tosakbd_activate_all(void)
-+{
-+ /* STROBE ALL -> High */
-+ GPSR1 = TOSA_GPIO_HIGH_STROBE_BIT;
-+ GPDR1 |= TOSA_GPIO_HIGH_STROBE_BIT;
-+ GPSR2 = TOSA_GPIO_LOW_STROBE_BIT;
-+ GPDR2 |= TOSA_GPIO_LOW_STROBE_BIT;
-+
-+ udelay(KB_DISCHARGE_DELAY);
-+
-+ /* STATE CLEAR */
-+ GEDR2 |= TOSA_GPIO_ALL_SENSE_BIT;
-+}
-+
-+static inline void tosakbd_activate_col(int col)
-+{
-+ if (col<=5) {
-+ /* STROBE col -> High, not col -> HiZ */
-+ GPSR1 = TOSA_GPIO_STROBE_BIT(col);
-+ GPDR1 = (GPDR1 & ~TOSA_GPIO_HIGH_STROBE_BIT) | TOSA_GPIO_STROBE_BIT(col);
-+ } else {
-+ /* STROBE col -> High, not col -> HiZ */
-+ GPSR2 = TOSA_GPIO_STROBE_BIT(col);
-+ GPDR2 = (GPDR2 & ~TOSA_GPIO_LOW_STROBE_BIT) | TOSA_GPIO_STROBE_BIT(col);
-+ }
-+}
-+
-+static inline void tosakbd_reset_col(int col)
-+{
-+ if (col<=5) {
-+ /* STROBE col -> Low */
-+ GPCR1 = TOSA_GPIO_STROBE_BIT(col);
-+ /* STROBE col -> out, not col -> HiZ */
-+ GPDR1 = (GPDR1 & ~TOSA_GPIO_HIGH_STROBE_BIT) | TOSA_GPIO_STROBE_BIT(col);
-+ } else {
-+ /* STROBE col -> Low */
-+ GPCR2 = TOSA_GPIO_STROBE_BIT(col);
-+ /* STROBE col -> out, not col -> HiZ */
-+ GPDR2 = (GPDR2 & ~TOSA_GPIO_LOW_STROBE_BIT) | TOSA_GPIO_STROBE_BIT(col);
-+ }
-+}
-+
-+/*
-+ * Read the GPIOs for POWER, RECORD and SYNC
-+ */
-+static int read_port_key_status_raw(void)
-+{
-+ int val=0;
-+
-+ /* Power key */
-+ if ((GPLR0 & GPIO_bit(TOSA_GPIO_ON_KEY))==0)
-+ val |= KEYMASK_ON;
-+ /* Record key */
-+ if ((GPLR0 & GPIO_bit(TOSA_GPIO_RECORD_BTN))==0)
-+ val |= KEYMASK_REC;
-+ /* Sync key */
-+ if ((GPLR0 & GPIO_bit(TOSA_GPIO_SYNC))==0)
-+ val |= KEYMASK_SYNC;
-+ return val;
-+}
-+
-+
-+/*
-+ * The tosa keyboard only generates interrupts when a key is pressed.
-+ * So when a key is pressed, we enable a timer. This timer scans the
-+ * keyboard, and this is how we detect when the key is released.
-+ */
-+
-+/* Scan the hardware keyboard and push any changes up through the input layer */
-+static void tosakbd_scankeyboard(struct tosakbd *tosakbd_data)
-+{
-+ unsigned int row, col, rowd;
-+ unsigned long flags;
-+ unsigned int num_pressed = 0;
-+
-+ if (tosakbd_data->suspended)
-+ return;
-+
-+ spin_lock_irqsave(&tosakbd_data->lock, flags);
-+
-+ for (col = 0; col < KB_COLS; col++) {
-+ /*
-+ * Discharge the output driver capacitatance
-+ * in the keyboard matrix. (Yes it is significant..)
-+ */
-+ tosakbd_discharge_all();
-+ udelay(KB_DISCHARGE_DELAY);
-+
-+ tosakbd_activate_col( col);
-+ udelay(KB_ACTIVATE_DELAY);
-+
-+ rowd = GET_ROWS_STATUS(col);
-+
-+ for (row = 0; row < KB_ROWS; row++) {
-+ unsigned int scancode, pressed;
-+ scancode = SCANCODE(row, col);
-+ pressed = rowd & KB_ROWMASK(row);
-+ input_report_key(tosakbd_data->input, tosakbd_data->keycode[scancode], pressed);
-+ if (pressed)
-+ num_pressed++;
-+ }
-+
-+ tosakbd_reset_col(col);
-+ }
-+
-+ tosakbd_activate_all();
-+
-+ rowd = read_port_key_status_raw();
-+
-+ for (row = 0; row < 3; row++ ) {
-+ unsigned int scancode, pressed;
-+ scancode = SCANCODE(row, KB_COLS);
-+ pressed = rowd & KB_ROWMASK(row);
-+ input_report_key(tosakbd_data->input, tosakbd_data->keycode[scancode], pressed);
-+ if (pressed)
-+ num_pressed++;
-+
-+ if (pressed && (tosakbd_data->keycode[scancode] == TOSA_KEY_OFF)
-+ && time_after(jiffies, tosakbd_data->suspend_jiffies + msecs_to_jiffies(1000))) {
-+ input_event(tosakbd_data->input, EV_PWR, TOSA_KEY_OFF, 1);
-+ tosakbd_data->suspend_jiffies = jiffies;
-+ }
-+ }
-+
-+ input_sync(tosakbd_data->input);
-+
-+ /* if any keys are pressed, enable the timer */
-+ if (num_pressed)
-+ mod_timer(&tosakbd_data->timer, jiffies + SCAN_INTERVAL);
-+
-+ spin_unlock_irqrestore(&tosakbd_data->lock, flags);
-+}
-+
-+/*
-+ * tosa keyboard interrupt handler.
-+ */
-+static irqreturn_t tosakbd_interrupt(int irq, void *dev_id)
-+{
-+ struct tosakbd *tosakbd_data = dev_id;
-+
-+ if (!timer_pending(&tosakbd_data->timer))
-+ {
-+ /** wait chattering delay **/
-+ udelay(20);
-+ tosakbd_scankeyboard(tosakbd_data);
-+ }
-+
-+ return IRQ_HANDLED;
-+}
-+
-+/*
-+ * tosa timer checking for released keys
-+ */
-+static void tosakbd_timer_callback(unsigned long data)
-+{
-+ struct tosakbd *tosakbd_data = (struct tosakbd *) data;
-+ tosakbd_scankeyboard(tosakbd_data);
-+}
-+
-+/*
-+ * The headphone generates an interrupt.
-+ * We debounce the switche and pass them to the input system.
-+ */
-+
-+static irqreturn_t tosakbd_hp_isr(int irq, void *dev_id)
-+{
-+ struct tosakbd *tosakbd_data = dev_id;
-+
-+ if (!timer_pending(&tosakbd_data->hptimer))
-+ mod_timer(&tosakbd_data->hptimer, jiffies + msecs_to_jiffies(HP_SCAN_INTERVAL));
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static void tosakbd_hp_timer(unsigned long data)
-+{
-+ struct tosakbd *tosakbd_data = (struct tosakbd *) data;
-+ unsigned long state;
-+ unsigned long flags;
-+
-+ state = (GPLR(TOSA_GPIO_EAR_IN) & GPIO_bit(TOSA_GPIO_EAR_IN));
-+ if (state != tosakbd_data->hp_state) {
-+ tosakbd_data->hp_count = 0;
-+ tosakbd_data->hp_state = state;
-+ } else if (tosakbd_data->hp_count < HP_STABLE_COUNT) {
-+ tosakbd_data->hp_count++;
-+ }
-+
-+ if (tosakbd_data->hp_count >= HP_STABLE_COUNT) {
-+ spin_lock_irqsave(&tosakbd_data->lock, flags);
-+
-+ input_report_switch(tosakbd_data->input, SW_HEADPHONE_INSERT, ((GPLR(TOSA_GPIO_EAR_IN) & GPIO_bit(TOSA_GPIO_EAR_IN)) == 0));
-+ input_sync(tosakbd_data->input);
-+
-+ spin_unlock_irqrestore(&tosakbd_data->lock, flags);
-+ } else {
-+ mod_timer(&tosakbd_data->hptimer, jiffies + msecs_to_jiffies(HP_SCAN_INTERVAL));
-+ }
-+}
-+
-+#ifdef CONFIG_PM
-+static int tosakbd_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ struct tosakbd *tosakbd = platform_get_drvdata(dev);
-+
-+ tosakbd->suspended = 1;
-+
-+ return 0;
-+}
-+
-+static int tosakbd_resume(struct platform_device *dev)
-+{
-+ struct tosakbd *tosakbd = platform_get_drvdata(dev);
-+
-+ /* Upon resume, ignore the suspend key for a short while */
-+ tosakbd->suspend_jiffies = jiffies;
-+ tosakbd->suspended = 0;
-+
-+ return 0;
-+}
-+#else
-+#define tosakbd_suspend NULL
-+#define tosakbd_resume NULL
-+#endif
-+
-+static int __init tosakbd_probe(struct platform_device *pdev) {
-+
-+ int i;
-+ struct tosakbd *tosakbd;
-+ struct input_dev *input_dev;
-+
-+ tosakbd = kzalloc(sizeof(struct tosakbd), GFP_KERNEL);
-+ if (!tosakbd)
-+ return -ENOMEM;
-+
-+ input_dev = input_allocate_device();
-+ if (!input_dev) {
-+ kfree(tosakbd);
-+ return -ENOMEM;
-+ }
-+
-+ platform_set_drvdata(pdev,tosakbd);
-+
-+ spin_lock_init(&tosakbd->lock);
-+
-+ /* Init Keyboard rescan timer */
-+ init_timer(&tosakbd->timer);
-+ tosakbd->timer.function = tosakbd_timer_callback;
-+ tosakbd->timer.data = (unsigned long) tosakbd;
-+
-+ /* Init Headphone Timer */
-+ init_timer(&tosakbd->hptimer);
-+ tosakbd->hptimer.function = tosakbd_hp_timer;
-+ tosakbd->hptimer.data = (unsigned long) tosakbd;
-+
-+ tosakbd->suspend_jiffies = jiffies;
-+
-+ tosakbd->input = input_dev;
-+
-+ input_dev->private = tosakbd;
-+ input_dev->name = "Tosa Keyboard";
-+ input_dev->phys = "tosakbd/input0";
-+ input_dev->cdev.dev = &pdev->dev;
-+
-+ input_dev->id.bustype = BUS_HOST;
-+ input_dev->id.vendor = 0x0001;
-+ input_dev->id.product = 0x0001;
-+ input_dev->id.version = 0x0100;
-+
-+ input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP) | BIT(EV_PWR) | BIT(EV_SW);
-+ input_dev->keycode = tosakbd->keycode;
-+ input_dev->keycodesize = sizeof(unsigned char);
-+ input_dev->keycodemax = ARRAY_SIZE(tosakbd_keycode);
-+
-+ memcpy(tosakbd->keycode, tosakbd_keycode, sizeof(tosakbd->keycode));
-+ for (i = 0; i < ARRAY_SIZE(tosakbd_keycode); i++)
-+ set_bit(tosakbd->keycode[i], input_dev->keybit);
-+ clear_bit(0, input_dev->keybit);
-+ set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
-+
-+ input_register_device(tosakbd->input);
-+
-+ /* Setup sense interrupts - RisingEdge Detect, sense lines as inputs */
-+ for (i = 0; i < TOSA_KEY_SENSE_NUM; i++) {
-+ pxa_gpio_mode( TOSA_GPIO_KEY_SENSE(i) | GPIO_IN);
-+ if (request_irq(TOSA_IRQ_GPIO_KEY_SENSE(i), tosakbd_interrupt,
-+ IRQF_DISABLED | IRQF_TRIGGER_RISING, "tosakbd", tosakbd)) {
-+ printk("tosakbd: Can't get IRQ: %d !\n", i);
-+ }
-+ }
-+
-+ /* Set Strobe lines as outputs - set high */
-+ for (i = 0; i < TOSA_KEY_STROBE_NUM; i++) {
-+ pxa_gpio_mode( TOSA_GPIO_KEY_STROBE(i) | GPIO_OUT | GPIO_DFLT_HIGH);
-+ }
-+
-+ // Power&Rec Button
-+ pxa_gpio_mode( TOSA_GPIO_ON_KEY | GPIO_IN);
-+ pxa_gpio_mode( TOSA_GPIO_RECORD_BTN | GPIO_IN);
-+ pxa_gpio_mode( TOSA_GPIO_SYNC | GPIO_IN);
-+ pxa_gpio_mode( TOSA_GPIO_EAR_IN | GPIO_IN);
-+
-+ if (request_irq(TOSA_IRQ_GPIO_ON_KEY, tosakbd_interrupt, IRQF_DISABLED | IRQF_TRIGGER_FALLING, "On key", tosakbd) ||
-+ request_irq(TOSA_IRQ_GPIO_RECORD_BTN, tosakbd_interrupt, IRQF_DISABLED | IRQF_TRIGGER_FALLING, "Record key", tosakbd) ||
-+ request_irq(TOSA_IRQ_GPIO_SYNC, tosakbd_interrupt, IRQF_DISABLED | IRQF_TRIGGER_FALLING, "Sync key", tosakbd) ||
-+ request_irq(TOSA_IRQ_GPIO_EAR_IN, tosakbd_hp_isr, IRQF_DISABLED | IRQF_TRIGGER_FALLING, "HP in", tosakbd)) {
-+ printk("Could not allocate KEYBD IRQ!\n");
-+ }
-+
-+ printk(KERN_INFO "input: Tosa Keyboard Registered\n");
-+
-+ return 0;
-+}
-+
-+static int tosakbd_remove(struct platform_device *dev) {
-+
-+ int i;
-+ struct tosakbd *tosakbd = platform_get_drvdata(dev);
-+
-+ for (i = 0; i < TOSA_KEY_SENSE_NUM; i++)
-+ free_irq(TOSA_IRQ_GPIO_KEY_SENSE(i),tosakbd);
-+
-+ free_irq(TOSA_IRQ_GPIO_ON_KEY,tosakbd);
-+ free_irq(TOSA_IRQ_GPIO_RECORD_BTN,tosakbd);
-+ free_irq(TOSA_IRQ_GPIO_SYNC,tosakbd);
-+
-+ del_timer_sync(&tosakbd->timer);
-+
-+ input_unregister_device(tosakbd->input);
-+
-+ kfree(tosakbd);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver tosakbd_driver = {
-+ .probe = tosakbd_probe,
-+ .remove = tosakbd_remove,
-+ .suspend = tosakbd_suspend,
-+ .resume = tosakbd_resume,
-+ .driver = {
-+ .name = "tosa-keyboard",
-+ },
-+};
-+
-+static int __devinit tosakbd_init(void)
-+{
-+ return platform_driver_register(&tosakbd_driver);
-+}
-+
-+static void __exit tosakbd_exit(void)
-+{
-+ platform_driver_unregister(&tosakbd_driver);
-+}
-+
-+module_init(tosakbd_init);
-+module_exit(tosakbd_exit);
-+
-+MODULE_AUTHOR("Dirk Opfer <Dirk@Opfer-Online.de>");
-+MODULE_DESCRIPTION("Tosa Keyboard Driver");
-+MODULE_LICENSE("GPLv2");
diff --git a/packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1-fix-r0.patch b/packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1-fix-r0.patch
deleted file mode 100644
index 93a9c18720..0000000000
--- a/packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1-fix-r0.patch
+++ /dev/null
@@ -1,135 +0,0 @@
-From eada869814636157956641ba1503f0d6cc04e2b7 Mon Sep 17 00:00:00 2001
-From: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Date: Fri, 19 Oct 2007 17:43:51 +0400
-Subject: [PATCH] tosa-lcdnoise-r1.patch fixes
-
----
- arch/arm/mach-pxa/tosa_lcd.c | 34 ++++++++++++++++++++++++++++++++++
- drivers/input/touchscreen/tosa_ts.c | 9 +--------
- include/asm-arm/arch-pxa/tosa.h | 5 +++++
- 3 files changed, 40 insertions(+), 8 deletions(-)
-
-diff --git a/arch/arm/mach-pxa/tosa_lcd.c b/arch/arm/mach-pxa/tosa_lcd.c
-index d52f63f..447ca86 100644
---- a/arch/arm/mach-pxa/tosa_lcd.c
-+++ b/arch/arm/mach-pxa/tosa_lcd.c
-@@ -59,6 +59,8 @@ static int bl_intensity;
- static struct ssp_dev tosa_nssp_dev;
- static struct ssp_state tosa_nssp_state;
- static spinlock_t tosa_nssp_lock;
-+static int blanked;
-+static unsigned long hsync_time;
-
- static unsigned short normal_i2c[] = {
- DAC_BASE,
-@@ -130,6 +132,17 @@ static void tosa_lcd_tg_init(struct device *dev)
- pxa_nssp_output(TG_GPOSR,0x02); /* GPOS0=powercontrol, GPOS1=GPIO, GPOS2=TCTL */
- }
-
-+static unsigned long calc_hsync_time(const struct fb_videomode *mode) {
-+ /* The 25 and 44 'magic numbers' are from Sharp's 2.4 patches */
-+ if (mode->yres == 640) {
-+ return 25;
-+ }
-+ if (mode->yres == 320) {
-+ return 44;
-+ }
-+ return 0;
-+}
-+
- static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode)
- {
- const int value = TG_REG0_COLOR | TG_REG0_UD | TG_REG0_LR;
-@@ -154,6 +167,8 @@ static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode)
- /* set common voltage */
- i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj);
-
-+ blanked = 0;
-+ hsync_time = calc_hsync_time(mode);
- }
-
- static void tosa_lcd_tg_off(struct device *dev)
-@@ -172,6 +187,8 @@ static void tosa_lcd_tg_off(struct device *dev)
-
- /* L3V Off */
- reset_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON);
-+
-+ blanked = 1;
- }
-
- static int tosa_detect_client(struct i2c_adapter* adapter, int address, int kind) {
-@@ -238,6 +255,23 @@ static int tosa_detach_client(struct i2c_client* client) {
- return 0;
- }
-
-+unsigned long tosa_lcd_get_hsync_time(void)
-+{
-+/* This method should eventually contain the correct algorithm for calculating
-+ the hsync_time */
-+ if (blanked)
-+ return 0;
-+ else
-+ return hsync_time;
-+}
-+
-+void tosa_lcd_wait_hsync(void)
-+{
-+ /* Waits for a rising edge on the VGA line */
-+ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) == 0);
-+ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) != 0);
-+}
-+
- static struct i2c_driver tosa_driver={
- .id = TOSA_LCD_I2C_DEVICEID,
- .attach_adapter = tosa_attach_adapter,
-diff --git a/drivers/input/touchscreen/tosa_ts.c b/drivers/input/touchscreen/tosa_ts.c
-index bc733e9..134f8ce 100644
---- a/drivers/input/touchscreen/tosa_ts.c
-+++ b/drivers/input/touchscreen/tosa_ts.c
-@@ -25,13 +25,6 @@
- #define CCNT_ON() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
- #define CCNT_OFF() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-
--static inline void tosa_lcd_wait_hsync(void)
--{
-- /* Waits for a rising edge on the VGA line */
-- while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) == 0);
-- while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) != 0);
--}
--
- /* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
- * before sampling the Y axis of the touchscreen */
- void tosa_lcd_sync_on(int adcsel) {
-@@ -54,7 +47,7 @@ void tosa_lcd_sync_on(int adcsel) {
- }
- }
-
--void tosa_lcd_sync_off(void) {
-+void tosa_lcd_sync_off(int adcsel) {
- CCNT_OFF();
- }
-
-diff --git a/include/asm-arm/arch-pxa/tosa.h b/include/asm-arm/arch-pxa/tosa.h
-index ce7322d..7f446fd 100644
---- a/include/asm-arm/arch-pxa/tosa.h
-+++ b/include/asm-arm/arch-pxa/tosa.h
-@@ -1,6 +1,7 @@
- /*
- * Hardware specific definitions for Sharp SL-C6000x series of PDAs
- *
-+ * Copyright (c) 2006 Wolfson Microelectronics PLC.
- * Copyright (c) 2005 Dirk Opfer
- *
- * Based on Sharp's 2.4 kernel patches
-@@ -187,4 +188,8 @@
- extern struct platform_device tosascoop_jc_device;
- extern struct platform_device tosascoop_device;
- extern struct platform_device tc6393_device;
-+
-+unsigned long tosa_lcd_get_hsync_time(void);
-+void tosa_lcd_wait_hsync(void);
-+
- #endif /* _ASM_ARCH_TOSA_H_ */
---
-1.4.4.4
-
diff --git a/packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1.patch b/packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1.patch
deleted file mode 100644
index 21f3cf66b1..0000000000
--- a/packages/linux/linux-rp-2.6.22/tosa-lcdnoise-r1.patch
+++ /dev/null
@@ -1,158 +0,0 @@
-From 564b757ba44b517ac6d693b94a177708bb5d3887 Mon Sep 17 00:00:00 2001
-From: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Date: Fri, 19 Oct 2007 17:30:30 +0400
-Subject: [PATCH] tosa-lcdnoise-r1.patch
-
----
- drivers/input/touchscreen/Kconfig | 13 +++++
- drivers/input/touchscreen/Makefile | 1 +
- drivers/input/touchscreen/tosa_ts.c | 102 +++++++++++++++++++++++++++++++++++
- 3 files changed, 116 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
-index 3ac01b4..6862e8f 100644
---- a/drivers/input/touchscreen/Kconfig
-+++ b/drivers/input/touchscreen/Kconfig
-@@ -219,6 +219,19 @@ config TOUCHSCREEN_USB_DMC_TSC10
- bool "DMC TSC-10/25 device support" if EMBEDDED
- depends on TOUCHSCREEN_USB_COMPOSITE
-
-+config TOUCHSCREEN_TOSA
-+ tristate "Sharp Tosa touchscreen driver"
-+ depends on TOUCHSCREEN_WM97XX && MACH_TOSA
-+ default n
-+ help
-+ Say Y here to enable the driver for the touchscreen on the
-+ Sharp Tosa PDA.
-+ depends on TOUCHSCREEN_WM97XX && MACH_TOSA
-+ If unsure, say N.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called tosa_ts.
-+
- config TOUCHSCREEN_TSC2101
- tristate "TI TSC2101 touchscreen input driver"
- depends on MACH_HX2750 && INPUT && INPUT_TOUCHSCREEN
-diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
-index f64d1a5..4fc0e17 100644
---- a/drivers/input/touchscreen/Makefile
-+++ b/drivers/input/touchscreen/Makefile
-@@ -22,6 +22,7 @@ obj-$(CONFIG_TOUCHSCREEN_UCB1400) += ucb1400_ts.o
- obj-$(CONFIG_TOUCHSCREEN_TSC2101) += tsc2101_ts.o
- obj-$(CONFIG_TOUCHSCREEN_WM97XX) += wm97xx-ts.o
- obj-$(CONFIG_TOUCHSCREEN_WM97XX_PXA) += pxa-wm97xx.o
-+obj-$(CONFIG_TOUCHSCREEN_TOSA) += tosa_ts.o
-
- ifeq ($(CONFIG_TOUCHSCREEN_WM9713),y)
- wm97xx-ts-objs += wm9713.o
-diff --git a/drivers/input/touchscreen/tosa_ts.c b/drivers/input/touchscreen/tosa_ts.c
-new file mode 100644
-index 0000000..bc733e9
---- /dev/null
-+++ b/drivers/input/touchscreen/tosa_ts.c
-@@ -0,0 +1,102 @@
-+/*
-+ * tosa_ts.c -- Touchscreen driver for Sharp SL-6000 (Tosa).
-+ *
-+ * Copyright 2006 Wolfson Microelectronics PLC.
-+ * Author: Mike Arthur
-+ * linux@wolfsonmicro.com
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 1st Sep 2006 Initial version.
-+ *
-+ */
-+
-+#include <linux/wm97xx.h>
-+#include <asm/arch/tosa.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+
-+/* Taken from the Sharp 2.4 kernel code */
-+#define CCNT(a) asm volatile ("mrc p14, 0, %0, C1, C1, 0" : "=r"(a))
-+#define CCNT_ON() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+#define CCNT_OFF() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+
-+static inline void tosa_lcd_wait_hsync(void)
-+{
-+ /* Waits for a rising edge on the VGA line */
-+ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) == 0);
-+ while((GPLR(TOSA_GPIO_VGA_LINE) & GPIO_bit(TOSA_GPIO_VGA_LINE)) != 0);
-+}
-+
-+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
-+ * before sampling the Y axis of the touchscreen */
-+void tosa_lcd_sync_on(int adcsel) {
-+ unsigned long timer1 = 0, timer2 = 0, wait_time = 0;
-+ if (adcsel == WM97XX_ADCSEL_Y) {
-+ wait_time = tosa_lcd_get_hsync_time();
-+ CCNT_ON();
-+
-+ if (wait_time) {
-+ /* wait for LCD rising edge */
-+ tosa_lcd_wait_hsync();
-+ /* get clock */
-+ CCNT(timer1);
-+ CCNT(timer2);
-+
-+ while ((timer2 - timer1) < wait_time) {
-+ CCNT(timer2);
-+ }
-+ }
-+ }
-+}
-+
-+void tosa_lcd_sync_off(void) {
-+ CCNT_OFF();
-+}
-+
-+static struct wm97xx_mach_ops tosa_mach_ops = {
-+ .pre_sample = tosa_lcd_sync_on,
-+ .post_sample = tosa_lcd_sync_off,
-+};
-+
-+int tosa_ts_probe(struct device *dev) {
-+ struct wm97xx *wm = dev->driver_data;
-+ return wm97xx_register_mach_ops (wm, &tosa_mach_ops);
-+}
-+
-+
-+int tosa_ts_remove(struct device *dev) {
-+ struct wm97xx *wm = dev->driver_data;
-+ wm97xx_unregister_mach_ops (wm);
-+ return 0;
-+}
-+
-+static struct device_driver tosa_ts_driver = {
-+ .name = "wm97xx-touchscreen",
-+ .bus = &wm97xx_bus_type,
-+ .owner = THIS_MODULE,
-+ .probe = tosa_ts_probe,
-+ .remove = tosa_ts_remove,
-+};
-+
-+static int __init tosa_ts_init(void)
-+{
-+ return driver_register(&tosa_ts_driver);
-+}
-+
-+static void __exit tosa_ts_exit(void)
-+{
-+ driver_unregister(&tosa_ts_driver);
-+}
-+
-+module_init(tosa_ts_init);
-+module_exit(tosa_ts_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Mike Arthur, mike@mikearthur.co.uk, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("Sharp SL6000 Tosa Touch Screen Driver");
-+MODULE_LICENSE("GPL");
---
-1.4.4.4
-
diff --git a/packages/linux/linux-rp-2.6.22/tosa-power-r18-fix-r0.patch b/packages/linux/linux-rp-2.6.22/tosa-power-r18-fix-r0.patch
deleted file mode 100644
index 8899ae270b..0000000000
--- a/packages/linux/linux-rp-2.6.22/tosa-power-r18-fix-r0.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 24813da9b0aac0e92635d7307837d89a9f4a1ee7 Mon Sep 17 00:00:00 2001
-From: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Date: Fri, 19 Oct 2007 16:47:15 +0400
-Subject: [PATCH] tosa-power-r18.patch fixes
-
----
- arch/arm/mach-pxa/tosa_pm.c | 9 +++++----
- 1 files changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/arch/arm/mach-pxa/tosa_pm.c b/arch/arm/mach-pxa/tosa_pm.c
-index 1eab1af..2df75f0 100644
---- a/arch/arm/mach-pxa/tosa_pm.c
-+++ b/arch/arm/mach-pxa/tosa_pm.c
-@@ -17,9 +17,9 @@
- #include <linux/interrupt.h>
- #include <linux/platform_device.h>
- #include <linux/pm.h>
-+#include <linux/apm-emulation.h>
- #include <linux/wm97xx.h>
-
--#include <asm/apm.h>
- #include <asm/irq.h>
- #include <asm/mach-types.h>
- #include <asm/hardware.h>
-@@ -144,7 +144,7 @@ static int tosa_ac97_init(void)
- pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD);
- pxa_gpio_mode(GPIO20_DREQ0_MD);
-
-- pxa_set_cken(CKEN2_AC97, 1);
-+ pxa_set_cken(CKEN_AC97, 1);
- /* AC97 power on sequense */
- while ( 1 ) {
- GCR = 0;
-@@ -184,11 +184,12 @@ static int tosa_ac97_init(void)
- pxa_gpio_mode(GPIO32_SDATA_IN1_AC97_MD);
- ad_polling = 1;
- printk("tosa_ac97_init\n");
-+ return 0;
- }
-
- void tosa_ac97_exit(void)
- {
-- if (!(CKEN & CKEN2_AC97))
-+ if (!(CKEN & CKEN_AC97))
- return;
-
- // power down the whole chip
-@@ -197,7 +198,7 @@ void tosa_ac97_exit(void)
- // GCR &= ~(GCR_CDONE_IE | GCR_SDONE_IE | GCR_SECRDY_IEN | GCR_PRIRDY_IEN | GCR_SECRES_IEN | GCR_PRIRES_IEN);
- // GSR = GSR;
- // GCR = GCR_ACLINK_OFF;
-- pxa_set_cken(CKEN2_AC97, 0);
-+ pxa_set_cken(CKEN_AC97, 0);
- /* switch back to irq driver */
- ad_polling = 0;
- printk("tosa_ac97_exit\n");
---
-1.4.4.4
-
diff --git a/packages/linux/linux-rp-2.6.22/tosa-pxaac97-r6-fix-r0.patch b/packages/linux/linux-rp-2.6.22/tosa-pxaac97-r6-fix-r0.patch
deleted file mode 100644
index 9c18aae98d..0000000000
--- a/packages/linux/linux-rp-2.6.22/tosa-pxaac97-r6-fix-r0.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From 005693333f4b3e0495bb80cc3cfd812e3e6f0a30 Mon Sep 17 00:00:00 2001
-From: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Date: Fri, 19 Oct 2007 00:48:42 +0400
-Subject: [PATCH] tosa-pxaac97-r6.patch fixes
-
----
- arch/arm/mach-pxa/tosa.c | 4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c
-index 059fa07..61536d4 100644
---- a/arch/arm/mach-pxa/tosa.c
-+++ b/arch/arm/mach-pxa/tosa.c
-@@ -310,10 +310,10 @@ static void __init tosa_init(void)
- PMCR = 0x01;
-
- // AC97 Disable all IRQ's
-- pxa_set_cken(CKEN2_AC97, 1);
-+ pxa_set_cken(CKEN_AC97, 1);
- GCR &= ~(GCR_CDONE_IE | GCR_SDONE_IE | GCR_SECRDY_IEN | GCR_PRIRDY_IEN | GCR_SECRES_IEN | GCR_PRIRES_IEN);
- GSR = GSR;
-- pxa_set_cken(CKEN2_AC97, 0);
-+ pxa_set_cken(CKEN_AC97, 0);
-
- pxa_set_mci_info(&tosa_mci_platform_data);
- pxa_set_udc_info(&udc_info);
---
-1.4.4.4
-
diff --git a/packages/linux/linux-rp-2.6.22/tosa-tmio-lcd-r10-fix-r0.patch b/packages/linux/linux-rp-2.6.22/tosa-tmio-lcd-r10-fix-r0.patch
deleted file mode 100644
index a2e2bee151..0000000000
--- a/packages/linux/linux-rp-2.6.22/tosa-tmio-lcd-r10-fix-r0.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From bb3ed6577c592d86f0976a92978c9454bbdfbe59 Mon Sep 17 00:00:00 2001
-From: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Date: Fri, 19 Oct 2007 02:01:23 +0400
-Subject: [PATCH] tosa-tmio-lcd-r10.patch fixes
-
----
- arch/arm/mach-pxa/tosa_lcd.c | 5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/arch/arm/mach-pxa/tosa_lcd.c b/arch/arm/mach-pxa/tosa_lcd.c
-index eeeee3e..d52f63f 100644
---- a/arch/arm/mach-pxa/tosa_lcd.c
-+++ b/arch/arm/mach-pxa/tosa_lcd.c
-@@ -66,7 +66,7 @@ static unsigned short normal_i2c[] = {
- };
- I2C_CLIENT_INSMOD;
-
--static struct corgibl_machinfo tosa_bl_machinfo = {
-+static struct generic_bl_info tosa_bl_machinfo = {
- .max_intensity = 255,
- .default_intensity = 68,
- .limit_mask = 0x0b,
-@@ -80,7 +80,8 @@ int tosa_bl_intensity(void)
-
- static void pxa_nssp_output(unsigned char reg, unsigned char data)
- {
-- unsigned long flag, dummy;
-+ unsigned long flag;
-+ u32 dummy;
- u32 dat = ( ((reg << 5) & 0xe0) | (data & 0x1f) );
- spin_lock_irqsave(&tosa_nssp_lock, flag);
-
---
-1.4.4.4
-
diff --git a/packages/linux/linux-rp-2.6.22/tosa-tmio-lcd-r10.patch b/packages/linux/linux-rp-2.6.22/tosa-tmio-lcd-r10.patch
deleted file mode 100644
index aef3a047c1..0000000000
--- a/packages/linux/linux-rp-2.6.22/tosa-tmio-lcd-r10.patch
+++ /dev/null
@@ -1,472 +0,0 @@
- arch/arm/mach-pxa/Kconfig | 5
- arch/arm/mach-pxa/Makefile | 2
- arch/arm/mach-pxa/tosa.c | 49 +++++-
- arch/arm/mach-pxa/tosa_lcd.c | 344 +++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 396 insertions(+), 4 deletions(-)
-
-Index: git/arch/arm/mach-pxa/Makefile
-===================================================================
---- git.orig/arch/arm/mach-pxa/Makefile 2006-11-07 22:13:10.000000000 +0000
-+++ git/arch/arm/mach-pxa/Makefile 2006-11-07 23:29:38.000000000 +0000
-@@ -17,7 +17,7 @@ obj-$(CONFIG_PXA_SHARP_C7xx) += corgi.o
- obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o sharpsl_pm.o spitz_pm.o
- obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o
- obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o sharpsl_pm.o poodle_pm.o
--obj-$(CONFIG_MACH_TOSA) += tosa.o sharpsl_pm.o tosa_pm.o
-+obj-$(CONFIG_MACH_TOSA) += tosa.o sharpsl_pm.o tosa_pm.o tosa_lcd.o
- obj-$(CONFIG_MACH_HX2750) += hx2750.o hx2750_test.o
-
- # Support for blinky lights
-Index: git/arch/arm/mach-pxa/tosa_lcd.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ git/arch/arm/mach-pxa/tosa_lcd.c 2006-11-07 23:29:25.000000000 +0000
-@@ -0,0 +1,344 @@
-+/*
-+ * LCD / Backlight control code for Sharp SL-6000x (tosa)
-+ *
-+ * Copyright (c) 2005 Dirk Opfer
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/slab.h>
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/i2c.h>
-+#include <linux/fb.h>
-+
-+#include <asm/mach/sharpsl_param.h>
-+#include <asm/hardware.h>
-+#include <asm/hardware/scoop.h>
-+#include <asm/hardware/tmio.h>
-+#include <asm/arch/ssp.h>
-+#include <asm/arch/sharpsl.h>
-+#include <asm/arch/tosa.h>
-+#include <asm/arch/pxa-regs.h>
-+
-+#define DAC_BASE 0x4e
-+#define DAC_CH1 0
-+#define DAC_CH2 1
-+
-+#define TG_REG0_VQV 0x0001
-+#define TG_REG0_COLOR 0x0002
-+#define TG_REG0_UD 0x0004
-+#define TG_REG0_LR 0x0008
-+#define COMADJ_DEFAULT 97
-+#define TOSA_LCD_I2C_DEVICEID 0x4711 // Fixme: new value
-+
-+static void tosa_lcd_tg_init(struct device *dev);
-+static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode);
-+static void tosa_lcd_tg_off(struct device *dev);
-+static void tosa_set_backlight(int intensity);
-+
-+const static struct tmio_lcd_ops tosa_tc6393_lcd_ops = {
-+ .init = tosa_lcd_tg_init,
-+ .tg_on = tosa_lcd_tg_on,
-+ .tg_off = tosa_lcd_tg_off,
-+};
-+
-+static struct platform_device *tosabl_device;
-+static struct i2c_driver tosa_driver;
-+static struct i2c_client* tosa_i2c_dac;
-+static int initialised;
-+static int comadj;
-+static int bl_intensity;
-+static struct ssp_dev tosa_nssp_dev;
-+static struct ssp_state tosa_nssp_state;
-+static spinlock_t tosa_nssp_lock;
-+
-+static unsigned short normal_i2c[] = {
-+ DAC_BASE,
-+ I2C_CLIENT_END
-+};
-+I2C_CLIENT_INSMOD;
-+
-+static struct corgibl_machinfo tosa_bl_machinfo = {
-+ .max_intensity = 255,
-+ .default_intensity = 68,
-+ .limit_mask = 0x0b,
-+ .set_bl_intensity = tosa_set_backlight,
-+};
-+
-+int tosa_bl_intensity(void)
-+{
-+ return bl_intensity;
-+}
-+
-+static void pxa_nssp_output(unsigned char reg, unsigned char data)
-+{
-+ unsigned long flag, dummy;
-+ u32 dat = ( ((reg << 5) & 0xe0) | (data & 0x1f) );
-+ spin_lock_irqsave(&tosa_nssp_lock, flag);
-+
-+ ssp_config(&tosa_nssp_dev, (SSCR0_Motorola | (SSCR0_DSS & 0x07 )), 0, 0, SSCR0_SerClkDiv(128));
-+ ssp_enable(&tosa_nssp_dev);
-+
-+ ssp_write_word(&tosa_nssp_dev,dat);
-+
-+ /* Read null data back from device to prevent SSP overflow */
-+ ssp_read_word(&tosa_nssp_dev, &dummy);
-+ ssp_disable(&tosa_nssp_dev);
-+ spin_unlock_irqrestore(&tosa_nssp_lock, flag);
-+
-+}
-+
-+static void tosa_set_backlight(int intensity)
-+{
-+ if (!tosa_i2c_dac)
-+ return;
-+
-+ bl_intensity = intensity;
-+ /* SetBacklightDuty */
-+ i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH2, (unsigned char)intensity);
-+
-+ /* SetBacklightVR */
-+ if (intensity)
-+ set_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_BL_C20MA);
-+ else
-+ reset_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_BL_C20MA);
-+
-+ /* bl_enable GP04=1 otherwise GP04=0*/
-+ pxa_nssp_output(TG_GPODR2, intensity ? 0x01 : 0x00);
-+}
-+
-+static void tosa_lcd_tg_init(struct device *dev)
-+{
-+ /* L3V On */
-+ set_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON);
-+ mdelay(60);
-+
-+ /* TG On */
-+ reset_tc6393_gpio(&tc6393_device.dev,TOSA_TC6393_TG_ON);
-+ mdelay(60);
-+
-+ pxa_nssp_output(TG_TPOSCTL,0x00); /* delayed 0clk TCTL signal for VGA */
-+ pxa_nssp_output(TG_GPOSR,0x02); /* GPOS0=powercontrol, GPOS1=GPIO, GPOS2=TCTL */
-+}
-+
-+static void tosa_lcd_tg_on(struct device *dev, const struct fb_videomode *mode)
-+{
-+ const int value = TG_REG0_COLOR | TG_REG0_UD | TG_REG0_LR;
-+ pxa_nssp_output(TG_PNLCTL, value | (mode->yres == 320 ? 0 : TG_REG0_VQV));
-+
-+ /* TG LCD pannel power up */
-+ pxa_nssp_output(TG_PINICTL,0x4);
-+ mdelay(50);
-+
-+ /* TG LCD GVSS */
-+ pxa_nssp_output(TG_PINICTL,0x0);
-+
-+ if (!initialised)
-+ {
-+ /* after the pannel is powered up the first time, we can access the i2c bus */
-+ /* so probe for the DAC */
-+ i2c_add_driver(&tosa_driver);
-+ initialised = 1;
-+ mdelay(50);
-+ }
-+ if (tosa_i2c_dac)
-+ /* set common voltage */
-+ i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj);
-+
-+}
-+
-+static void tosa_lcd_tg_off(struct device *dev)
-+{
-+ /* TG LCD VHSA off */
-+ pxa_nssp_output(TG_PINICTL,0x4);
-+ mdelay(50);
-+
-+ /* TG LCD signal off */
-+ pxa_nssp_output(TG_PINICTL,0x6);
-+ mdelay(50);
-+
-+ /* TG Off */
-+ set_tc6393_gpio(&tc6393_device.dev, TOSA_TC6393_TG_ON);
-+ mdelay(100);
-+
-+ /* L3V Off */
-+ reset_scoop_gpio( &tosascoop_jc_device.dev,TOSA_SCOOP_JC_TC3693_L3V_ON);
-+}
-+
-+static int tosa_detect_client(struct i2c_adapter* adapter, int address, int kind) {
-+ int err = 0;
-+
-+ printk("Tosa-LCD: DAC detected address:0x%2.2x\n",address);
-+ if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA ))
-+ goto ERROR0;
-+
-+ if (!(tosa_i2c_dac = (struct i2c_client*)kzalloc(sizeof(*tosa_i2c_dac), GFP_KERNEL))) {
-+ err = -ENOMEM;
-+ goto ERROR0;
-+ }
-+
-+ //i2c_set_clientdata(tosa_i2c_dac, data);
-+ tosa_i2c_dac->addr = address;
-+ tosa_i2c_dac->adapter = adapter;
-+ tosa_i2c_dac->driver = &tosa_driver;
-+ tosa_i2c_dac->dev.parent = &tc6393_device.dev;
-+ strcpy(tosa_i2c_dac->name, "tosa lcd");
-+ if ((err = i2c_attach_client(tosa_i2c_dac)))
-+ goto ERROR3;
-+
-+ /* Now i2c is ready, allocate the backlight device*/
-+ tosabl_device = platform_device_alloc("corgi-bl", -1);
-+ if (!tosabl_device) {
-+ err = -ENOMEM;
-+ goto ERROR4;
-+ }
-+
-+ /* set parent device */
-+ tosabl_device->dev.parent = &tosa_i2c_dac->dev;
-+ tosabl_device->dev.platform_data = &tosa_bl_machinfo;
-+
-+ err = platform_device_add(tosabl_device);
-+
-+ if (err)
-+ platform_device_put(tosabl_device);
-+
-+ /* set common voltage */
-+ i2c_smbus_write_byte_data(tosa_i2c_dac, DAC_CH1, comadj);
-+
-+ return 0;
-+ERROR4:
-+ i2c_detach_client(tosa_i2c_dac);
-+ERROR3:
-+ kfree(tosa_i2c_dac);
-+ERROR0:
-+ return err;
-+}
-+
-+static int tosa_attach_adapter(struct i2c_adapter* adapter) {
-+ return i2c_probe(adapter, &addr_data, &tosa_detect_client);
-+}
-+
-+static int tosa_detach_client(struct i2c_client* client) {
-+ int err;
-+
-+ if ((err = i2c_detach_client(client))) {
-+ printk(KERN_ERR "tosa: Cannot deregister client\n");
-+ return err;
-+ }
-+ kfree(client);
-+ return 0;
-+}
-+
-+static struct i2c_driver tosa_driver={
-+ .id = TOSA_LCD_I2C_DEVICEID,
-+ .attach_adapter = tosa_attach_adapter,
-+ .detach_client = tosa_detach_client,
-+};
-+
-+static int __init tosa_lcd_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+ spin_lock_init(&tosa_nssp_lock);
-+
-+ if (!pdev->dev.platform_data)
-+ return -EINVAL;
-+
-+ /* Set Common Voltage */
-+ comadj = sharpsl_param.comadj == -1 ? COMADJ_DEFAULT : sharpsl_param.comadj;
-+
-+ ret=ssp_init(&tosa_nssp_dev,2,0);
-+
-+ /* initialize SSP */
-+ pxa_gpio_mode(GPIO83_NSSP_TX);
-+ pxa_gpio_mode(GPIO81_NSSP_CLK_OUT);
-+ pxa_gpio_mode(GPIO82_NSSP_FRM_OUT);
-+
-+ if (ret)
-+ printk(KERN_ERR "Unable to register NSSP handler!\n");
-+ else {
-+ struct tmio_lcd_ops* *tmio_ops = pdev->dev.platform_data;
-+ ssp_disable(&tosa_nssp_dev);
-+ initialised = 0;
-+
-+ /* Set the lcd functions */
-+ *tmio_ops = (struct tmio_lcd_ops*) &tosa_tc6393_lcd_ops;
-+ }
-+
-+ return ret;
-+}
-+
-+static int tosa_lcd_remove(struct platform_device *pdev)
-+{
-+ /* delete the lcd functions */
-+ struct tmio_lcd_ops* *tmio_ops = pdev->dev.platform_data;
-+ *tmio_ops = NULL;
-+
-+ ssp_exit(&tosa_nssp_dev);
-+
-+ if (tosa_i2c_dac) {
-+ i2c_detach_client(tosa_i2c_dac);
-+ kfree(tosa_i2c_dac);
-+ }
-+
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+
-+static int tosa_lcd_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ ssp_flush(&tosa_nssp_dev);
-+ ssp_save_state(&tosa_nssp_dev,&tosa_nssp_state);
-+ return 0;
-+}
-+
-+static int tosa_lcd_resume(struct platform_device *pdev)
-+{
-+ printk("tosa_lcd_resume\n");
-+ ssp_restore_state(&tosa_nssp_dev,&tosa_nssp_state);
-+ ssp_enable(&tosa_nssp_dev);
-+ printk("tosa_lcd_resume ok\n");
-+ return 0;
-+}
-+#else
-+
-+#define tosa_lcd_suspend NULL
-+#define tosa_lcd_resume NULL
-+
-+#endif
-+
-+
-+static struct platform_driver tosalcd_driver = {
-+ .probe = tosa_lcd_probe,
-+ .remove = tosa_lcd_remove,
-+ .suspend = tosa_lcd_suspend,
-+ .resume = tosa_lcd_resume,
-+ .driver = {
-+ .name = "tosa-lcd",
-+ },
-+};
-+
-+static int __init tosa_lcd_init(void)
-+{
-+ return platform_driver_register(&tosalcd_driver);
-+}
-+
-+static void __exit tosa_lcd_cleanup (void)
-+{
-+ platform_driver_unregister (&tosalcd_driver);
-+}
-+
-+device_initcall(tosa_lcd_init);
-+module_exit (tosa_lcd_cleanup);
-+
-+MODULE_DESCRIPTION ("Tosa LCD device");
-+MODULE_AUTHOR ("Dirk Opfer");
-+MODULE_LICENSE ("GPL v2");
-Index: git/arch/arm/mach-pxa/tosa.c
-===================================================================
---- git.orig/arch/arm/mach-pxa/tosa.c 2006-11-07 22:13:10.000000000 +0000
-+++ git/arch/arm/mach-pxa/tosa.c 2006-11-07 23:29:38.000000000 +0000
-@@ -24,6 +24,7 @@
- #include <linux/mtd/partitions.h>
- #include <linux/pm.h>
- #include <linux/delay.h>
-+#include <linux/fb.h>
-
- #include <asm/setup.h>
- #include <asm/memory.h>
-@@ -48,7 +49,6 @@
-
- #include "generic.h"
-
--
- /*
- * SCOOP Device
- */
-@@ -345,7 +345,38 @@ static struct tmio_nand_platform_data to
- .badblock_pattern = &tosa_tc6393_nand_bbt,
- };
-
--extern struct tmio_lcd_platform_data tosa_tc6393_lcd_platform_data;
-+static struct fb_videomode tosa_tc6393_lcd_mode[] = {
-+ {
-+ .xres = 480,
-+ .yres = 640,
-+ .pixclock = 0x002cdf00,/* PLL divisor */
-+ .left_margin = 0x004c,
-+ .right_margin = 0x005b,
-+ .upper_margin = 0x0001,
-+ .lower_margin = 0x000d,
-+ .hsync_len = 0x0002,
-+ .vsync_len = 0x0001,
-+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+ },{
-+ .xres = 240,
-+ .yres = 320,
-+ .pixclock = 0x00e7f203,/* PLL divisor */
-+ .left_margin = 0x0024,
-+ .right_margin = 0x002f,
-+ .upper_margin = 0x0001,
-+ .lower_margin = 0x000d,
-+ .hsync_len = 0x0002,
-+ .vsync_len = 0x0001,
-+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+}};
-+
-+struct tmio_lcd_platform_data tosa_tc6393_lcd_platform_data = {
-+ .ops = NULL,
-+ .modelist = tosa_tc6393_lcd_mode,
-+ .num_modes = ARRAY_SIZE(tosa_tc6393_lcd_mode),
-+};
-
- static struct tmio_cell tosa_tc6393_cells[] = {
- {
-@@ -384,6 +415,19 @@ struct platform_device tc6393_device = {
- .num_resources = ARRAY_SIZE(tc6393_resources),
- .resource = tc6393_resources,
- };
-+EXPORT_SYMBOL (tc6393_device);
-+
-+/*
-+ * Tosa LCD / Backlight stuff
-+ */
-+static struct platform_device tosalcd_device = {
-+ .name = "tosa-lcd",
-+ .id = -1,
-+ .dev = {
-+ .parent = &tc6393_device.dev,
-+ .platform_data = &tosa_tc6393_lcd_platform_data.ops,
-+ },
-+};
-
- static struct platform_device *devices[] __initdata = {
- &tosascoop_device,
-@@ -391,6 +435,7 @@ static struct platform_device *devices[]
- &tosakbd_device,
- &tosaled_device,
- &tc6393_device,
-+ &tosalcd_device,
- };
-
- static void tosa_poweroff(void)
-Index: git/arch/arm/mach-pxa/Kconfig
-===================================================================
---- git.orig/arch/arm/mach-pxa/Kconfig 2006-11-07 22:13:10.000000000 +0000
-+++ git/arch/arm/mach-pxa/Kconfig 2006-11-07 22:13:10.000000000 +0000
-@@ -129,7 +129,10 @@ config MACH_TOSA
- bool "Enable Sharp SL-6000x (Tosa) Support"
- depends PXA_SHARPSL_25x
- select TOSHIBA_TC6393XB
-- select SHARPSL_PM
-+ select I2C
-+ select I2C_PXA
-+ select SHARPSL_PM
-+ select PXA_SSP
-
- config PXA25x
- bool
diff --git a/packages/linux/linux-rp-2.6.22/usb-ohci-hooks-r2.patch b/packages/linux/linux-rp-2.6.22/usb-ohci-hooks-r2.patch
deleted file mode 100644
index 3656e98f0c..0000000000
--- a/packages/linux/linux-rp-2.6.22/usb-ohci-hooks-r2.patch
+++ /dev/null
@@ -1,180 +0,0 @@
-Index: linux-2.6.15/drivers/usb/host/ohci.h
-===================================================================
---- linux-2.6.15.orig/drivers/usb/host/ohci.h
-+++ linux-2.6.15/drivers/usb/host/ohci.h
-@@ -336,6 +336,23 @@ typedef struct urb_priv {
- // sizeof (struct td) ~= 64 == 2^6 ...
- #define TD_HASH_FUNC(td_dma) ((td_dma ^ (td_dma >> 6)) % TD_HASH_SIZE)
-
-+struct ohci_hcd;
-+
-+/*
-+ * Hooks to support controllers that must resort to a PIO-ish
-+ * implementation because they only dma with on-chip memory.
-+ */
-+struct ohci_ops {
-+ void* (*dma_pool_alloc) (struct dma_pool *pool, gfp_t mem_flags,
-+ dma_addr_t *handle);
-+ void (*dma_pool_free) (struct dma_pool *pool, void *vaddr,
-+ dma_addr_t addr);
-+
-+ void (*td_fill) (struct ohci_hcd *ohci, u32 info, dma_addr_t data,
-+ int len, struct urb *urb, int index);
-+ void (*td_done) (struct ohci_hcd *ohci, struct urb *urb,
-+ struct td *td);
-+};
-
- /*
- * This is the full ohci controller description
-@@ -346,6 +363,7 @@ typedef struct urb_priv {
-
- struct ohci_hcd {
- spinlock_t lock;
-+ const struct ohci_ops *ops;
-
- /*
- * I/O memory used to communicate with the HC (dma-consistent)
-Index: linux-2.6.15/drivers/usb/host/ohci-mem.c
-===================================================================
---- linux-2.6.15.orig/drivers/usb/host/ohci-mem.c
-+++ linux-2.6.15/drivers/usb/host/ohci-mem.c
-@@ -21,10 +21,13 @@
- * No memory seen by this driver is pagable.
- */
-
-+static const struct ohci_ops ohci_ops;
-+
- /*-------------------------------------------------------------------------*/
-
- static void ohci_hcd_init (struct ohci_hcd *ohci)
- {
-+ ohci->ops = &ohci_ops;
- ohci->next_statechange = jiffies;
- spin_lock_init (&ohci->lock);
- INIT_LIST_HEAD (&ohci->pending);
-@@ -88,7 +91,7 @@ td_alloc (struct ohci_hcd *hc, gfp_t mem
- dma_addr_t dma;
- struct td *td;
-
-- td = dma_pool_alloc (hc->td_cache, mem_flags, &dma);
-+ td = hc->ops->dma_pool_alloc (hc->td_cache, mem_flags, &dma);
- if (td) {
- /* in case hc fetches it, make it look dead */
- memset (td, 0, sizeof *td);
-@@ -110,7 +113,7 @@ td_free (struct ohci_hcd *hc, struct td
- *prev = td->td_hash;
- else if ((td->hwINFO & cpu_to_hc32(hc, TD_DONE)) != 0)
- ohci_dbg (hc, "no hash for td %p\n", td);
-- dma_pool_free (hc->td_cache, td, td->td_dma);
-+ hc->ops->dma_pool_free (hc->td_cache, td, td->td_dma);
- }
-
- /*-------------------------------------------------------------------------*/
-@@ -122,7 +125,7 @@ ed_alloc (struct ohci_hcd *hc, gfp_t mem
- dma_addr_t dma;
- struct ed *ed;
-
-- ed = dma_pool_alloc (hc->ed_cache, mem_flags, &dma);
-+ ed = hc->ops->dma_pool_alloc (hc->ed_cache, mem_flags, &dma);
- if (ed) {
- memset (ed, 0, sizeof (*ed));
- INIT_LIST_HEAD (&ed->td_list);
-@@ -134,6 +137,6 @@ ed_alloc (struct ohci_hcd *hc, gfp_t mem
- static void
- ed_free (struct ohci_hcd *hc, struct ed *ed)
- {
-- dma_pool_free (hc->ed_cache, ed, ed->dma);
-+ hc->ops->dma_pool_free (hc->ed_cache, ed, ed->dma);
- }
-
-Index: linux-2.6.15/drivers/usb/host/ohci-q.c
-===================================================================
---- linux-2.6.15.orig/drivers/usb/host/ohci-q.c
-+++ linux-2.6.15/drivers/usb/host/ohci-q.c
-@@ -629,7 +629,7 @@ static void td_submit_urb (
- : TD_T_TOGGLE | TD_CC | TD_DP_IN;
- /* TDs _could_ transfer up to 8K each */
- while (data_len > 4096) {
-- td_fill (ohci, info, data, 4096, urb, cnt);
-+ ohci->ops->td_fill (ohci, info, data, 4096, urb, cnt);
- data += 4096;
- data_len -= 4096;
- cnt++;
-@@ -637,11 +637,11 @@ static void td_submit_urb (
- /* maybe avoid ED halt on final TD short read */
- if (!(urb->transfer_flags & URB_SHORT_NOT_OK))
- info |= TD_R;
-- td_fill (ohci, info, data, data_len, urb, cnt);
-+ ohci->ops->td_fill (ohci, info, data, data_len, urb, cnt);
- cnt++;
- if ((urb->transfer_flags & URB_ZERO_PACKET)
- && cnt < urb_priv->length) {
-- td_fill (ohci, info, 0, 0, urb, cnt);
-+ ohci->ops->td_fill (ohci, info, 0, 0, urb, cnt);
- cnt++;
- }
- /* maybe kickstart bulk list */
-@@ -656,17 +656,18 @@ static void td_submit_urb (
- */
- case PIPE_CONTROL:
- info = TD_CC | TD_DP_SETUP | TD_T_DATA0;
-- td_fill (ohci, info, urb->setup_dma, 8, urb, cnt++);
-+ ohci->ops->td_fill (ohci, info, urb->setup_dma, 8, urb, cnt++);
- if (data_len > 0) {
- info = TD_CC | TD_R | TD_T_DATA1;
- info |= is_out ? TD_DP_OUT : TD_DP_IN;
- /* NOTE: mishandles transfers >8K, some >4K */
-- td_fill (ohci, info, data, data_len, urb, cnt++);
-+ ohci->ops->td_fill (ohci, info, data, data_len,
-+ urb, cnt++);
- }
- info = (is_out || data_len == 0)
- ? TD_CC | TD_DP_IN | TD_T_DATA1
- : TD_CC | TD_DP_OUT | TD_T_DATA1;
-- td_fill (ohci, info, data, 0, urb, cnt++);
-+ ohci->ops->td_fill (ohci, info, data, 0, urb, cnt++);
- /* maybe kickstart control list */
- wmb ();
- ohci_writel (ohci, OHCI_CLF, &ohci->regs->cmdstatus);
-@@ -685,7 +686,7 @@ static void td_submit_urb (
- // a 2^16 iso range, vs other HCs max of 2^10)
- frame += cnt * urb->interval;
- frame &= 0xffff;
-- td_fill (ohci, TD_CC | TD_ISO | frame,
-+ ohci->ops->td_fill (ohci, TD_CC | TD_ISO | frame,
- data + urb->iso_frame_desc [cnt].offset,
- urb->iso_frame_desc [cnt].length, urb, cnt);
- }
-@@ -788,6 +789,14 @@ static void td_done (struct ohci_hcd *oh
- }
- }
-
-+/* default operations for most HCs */
-+static const struct ohci_ops ohci_ops = {
-+ .dma_pool_alloc = dma_pool_alloc,
-+ .dma_pool_free = dma_pool_free,
-+ .td_fill = td_fill,
-+ .td_done = td_done,
-+};
-+
- /*-------------------------------------------------------------------------*/
-
- static inline struct td *
-@@ -984,7 +993,7 @@ rescan_this:
- *prev = td->hwNextTD | savebits;
-
- /* HC may have partly processed this TD */
-- td_done (ohci, urb, td);
-+ ohci->ops->td_done (ohci, urb, td);
- urb_priv->td_cnt++;
-
- /* if URB is done, clean up */
-@@ -1079,7 +1088,7 @@ dl_done_list (struct ohci_hcd *ohci, str
- struct ed *ed = td->ed;
-
- /* update URB's length and status from TD */
-- td_done (ohci, urb, td);
-+ ohci->ops->td_done (ohci, urb, td);
- urb_priv->td_cnt++;
-
- /* If all this urb's TDs are done, call complete() */
diff --git a/packages/linux/linux-rp-2.6.22/vesafb-tng-1.0-rc2-2.6.20-rc2.patch b/packages/linux/linux-rp-2.6.22/vesafb-tng-1.0-rc2-2.6.20-rc2.patch
deleted file mode 100644
index b1b0fc3549..0000000000
--- a/packages/linux/linux-rp-2.6.22/vesafb-tng-1.0-rc2-2.6.20-rc2.patch
+++ /dev/null
@@ -1,3141 +0,0 @@
-diff --git a/Documentation/fb/vesafb.txt b/Documentation/fb/vesafb.txt
-index ee277dd..93d6e6e 100644
---- a/Documentation/fb/vesafb.txt
-+++ b/Documentation/fb/vesafb.txt
-@@ -2,16 +2,18 @@
- What is vesafb?
- ===============
-
--This is a generic driver for a graphic framebuffer on intel boxes.
-+Vesafb is a generic framebuffer driver for x86 and x86_64 boxes.
-
--The idea is simple: Turn on graphics mode at boot time with the help
--of the BIOS, and use this as framebuffer device /dev/fb0, like the m68k
--(and other) ports do.
-+VESA BIOS Extensions Version 2.0 are required, because we need access to
-+a linear frame buffer. VBE 3.0 is required if you want to use modes with a
-+higher (than the standard 60 Hz) refresh rate.
-
--This means we decide at boot time whenever we want to run in text or
--graphics mode. Switching mode later on (in protected mode) is
--impossible; BIOS calls work in real mode only. VESA BIOS Extensions
--Version 2.0 are required, because we need a linear frame buffer.
-+The VESA framebuffer driver comes in two flavors - the standard 'vesafb'
-+and 'vesafb-tng'. Vesafb-tng is available only on 32-bit x86 due to the
-+technology it uses (vm86). Vesafb-tng has more features than vesafb
-+(adjusting the refresh rate on VBE 3.0 compliant boards, switching the
-+video mode without rebooting, selecting a mode by providing its
-+modedb name, and more).
-
- Advantages:
-
-@@ -29,26 +31,35 @@ Disadvantages:
- How to use it?
- ==============
-
--Switching modes is done using the vga=... boot parameter. Read
--Documentation/svga.txt for details.
-+If you are running a 32-bit x86 system and you decide to use vesafb-tng,
-+you can either compile the driver into the kernel or use it as a module.
-+The graphics mode you want to use is in both cases specified using the
-+standard modedb format.
-
--You should compile in both vgacon (for text mode) and vesafb (for
--graphics mode). Which of them takes over the console depends on
--whenever the specified mode is text or graphics.
-+If your system doesn't support vm86 calls, things get a little more tricky.
-+Since on such systems you can't do BIOS calls from protected mode in which
-+kernel runs, you have to decide at boot time whenever you want to run in text
-+or in graphics mode. Switching mode later on is impossible. Switching modes
-+is done using the vga=... boot parameter. Read Documentation/svga.txt for
-+details. Below is a more detailed description of what to do on systems using
-+the standard vesafb driver.
-
--The graphic modes are NOT in the list which you get if you boot with
--vga=ask and hit return. The mode you wish to use is derived from the
--VESA mode number. Here are those VESA mode numbers:
-+You should compile in both vgacon (for text mode) and vesafb (for graphics
-+mode). Which of them takes over the console depends on whenever the
-+specified mode is text or graphics.
-+
-+The graphic modes are NOT in the list which you get if you boot with vga=ask
-+and hit return. The mode you wish to use is derived from the VESA mode number.
-+Here are those VESA mode numbers:
-
- | 640x480 800x600 1024x768 1280x1024
- ----+-------------------------------------
--256 | 0x101 0x103 0x105 0x107
--32k | 0x110 0x113 0x116 0x119
--64k | 0x111 0x114 0x117 0x11A
--16M | 0x112 0x115 0x118 0x11B
-+256 | 0x101 0x103 0x105 0x107
-+32k | 0x110 0x113 0x116 0x119
-+64k | 0x111 0x114 0x117 0x11A
-+16M | 0x112 0x115 0x118 0x11B
-
--The video mode number of the Linux kernel is the VESA mode number plus
--0x200.
-+The video mode number of the Linux kernel is the VESA mode number plus 0x200.
-
- Linux_kernel_mode_number = VESA_mode_number + 0x200
-
-@@ -56,15 +67,15 @@ So the table for the Kernel mode numbers are:
-
- | 640x480 800x600 1024x768 1280x1024
- ----+-------------------------------------
--256 | 0x301 0x303 0x305 0x307
--32k | 0x310 0x313 0x316 0x319
--64k | 0x311 0x314 0x317 0x31A
--16M | 0x312 0x315 0x318 0x31B
-+256 | 0x301 0x303 0x305 0x307
-+32k | 0x310 0x313 0x316 0x319
-+64k | 0x311 0x314 0x317 0x31A
-+16M | 0x312 0x315 0x318 0x31B
-
--To enable one of those modes you have to specify "vga=ask" in the
--lilo.conf file and rerun LILO. Then you can type in the desired
--mode at the "vga=ask" prompt. For example if you like to use
--1024x768x256 colors you have to say "305" at this prompt.
-+To enable one of those modes you have to specify "vga=ask" in the lilo.conf
-+file and rerun LILO. Then you can type in the desired mode at the "vga=ask"
-+prompt. For example if you like to use 1024x768x256 colors you have to say
-+"305" at this prompt.
-
- If this does not work, this might be because your BIOS does not support
- linear framebuffers or because it does not support this mode at all.
-@@ -72,11 +83,12 @@ Even if your board does, it might be the BIOS which does not. VESA BIOS
- Extensions v2.0 are required, 1.2 is NOT sufficient. You will get a
- "bad mode number" message if something goes wrong.
-
--1. Note: LILO cannot handle hex, for booting directly with
-+1. Note: LILO cannot handle hex, for booting directly with
- "vga=mode-number" you have to transform the numbers to decimal.
- 2. Note: Some newer versions of LILO appear to work with those hex values,
- if you set the 0x in front of the numbers.
-
-+
- X11
- ===
-
-@@ -84,98 +96,164 @@ XF68_FBDev should work just fine, but it is non-accelerated. Running
- another (accelerated) X-Server like XF86_SVGA might or might not work.
- It depends on X-Server and graphics board.
-
--The X-Server must restore the video mode correctly, else you end up
-+The X-Server must restore the video mode correctly, or else you end up
- with a broken console (and vesafb cannot do anything about this).
-+With vesafb-tng chances are that the console will be restored properly
-+even if the X server messes up the video mode.
-
-
- Refresh rates
- =============
-
--There is no way to change the vesafb video mode and/or timings after
--booting linux. If you are not happy with the 60 Hz refresh rate, you
--have these options:
-+With VBE 3.0 compatible BIOSes and vesafb-tng it is possible to change
-+the refresh rate either at boot time (by specifying the @<rr> part of
-+the mode name) or later, using the fbset utility.
-+
-+If you want to use the default BIOS refresh rate while switching modes
-+on a running system, set pixclock to 0.
-
-- * configure and load the DOS-Tools for your the graphics board (if
-- available) and boot linux with loadlin.
-- * use a native driver (matroxfb/atyfb) instead if vesafb. If none
-+With VBE 2.0 there is no way to change the mode timings after booting
-+Linux. If you are not happy with the 60 Hz refresh rate, you have
-+the following options:
-+
-+ * Configure and load the DOS tools for your the graphics board (if
-+ available) and boot Linux with loadlin.
-+ * Use a native driver (matroxfb/atyfb) instead of vesafb. If none
- is available, write a new one!
-- * VBE 3.0 might work too. I have neither a gfx board with VBE 3.0
-- support nor the specs, so I have not checked this yet.
-+ * Use a BIOS editor to change the default refresh rate (such an
-+ editor does exist at least for ATI Radeon BIOSes).
-+ * If you're running a non-vm86 and VBE 3.0 compatible system, you can
-+ use a kernel patch (vesafb-rrc) to hard-code some mode timings in
-+ the kernel and use these while setting the video mode at boot time.
-+
-+Note that there are some boards (nVidia 59**, 57** and newer models)
-+claiming that their Video BIOS is VBE 3.0 compliant, while ignoring the
-+CRTC values provided by software such as vesafb-tng. You'll not be able
-+to adjust the refresh rate if you're using one of these boards.
-
-
- Configuration
- =============
-
--The VESA BIOS provides protected mode interface for changing
--some parameters. vesafb can use it for palette changes and
--to pan the display. It is turned off by default because it
--seems not to work with some BIOS versions, but there are options
--to turn it on.
--
--You can pass options to vesafb using "video=vesafb:option" on
--the kernel command line. Multiple options should be separated
--by comma, like this: "video=vesafb:ypan,invers"
--
--Accepted options:
--
--invers no comment...
--
--ypan enable display panning using the VESA protected mode
-- interface. The visible screen is just a window of the
-- video memory, console scrolling is done by changing the
-- start of the window.
-- pro: * scrolling (fullscreen) is fast, because there is
-- no need to copy around data.
-- * You'll get scrollback (the Shift-PgUp thing),
-- the video memory can be used as scrollback buffer
-- kontra: * scrolling only parts of the screen causes some
-- ugly flicker effects (boot logo flickers for
-- example).
--
--ywrap Same as ypan, but assumes your gfx board can wrap-around
-- the video memory (i.e. starts reading from top if it
-- reaches the end of video memory). Faster than ypan.
--
--redraw scroll by redrawing the affected part of the screen, this
-- is the safe (and slow) default.
--
--
--vgapal Use the standard vga registers for palette changes.
-- This is the default.
--pmipal Use the protected mode interface for palette changes.
--
--mtrr:n setup memory type range registers for the vesafb framebuffer
-- where n:
-- 0 - disabled (equivalent to nomtrr) (default)
-- 1 - uncachable
-- 2 - write-back
-- 3 - write-combining
-- 4 - write-through
--
-- If you see the following in dmesg, choose the type that matches the
-- old one. In this example, use "mtrr:2".
-+The VESA BIOS provides protected mode interface for changing some parameters.
-+vesafb can use it for palette changes and to pan the display. It is turned
-+off by default because it seems not to work with some BIOS versions, but
-+there are options to turn it on.
-+
-+You can pass options to vesafb using "video=vesafb:option" on the kernel
-+command line. Multiple options should be separated by a comma, like this:
-+"video=vesafb:ypan,1024x768-32@85"
-+
-+Note that vesafb-tng still uses the "video=vesafb:option" format of the
-+kernel command line video parameter. "video=vesafb-tng:xxx" is incorrect.
-+
-+Accepted options (both vesafb and vesafb-tng):
-+
-+ypan Enable display panning using the VESA protected mode interface
-+ The visible screen is just a window of the video memory,
-+ console scrolling is done by changing the start of the window.
-+ pro: * scrolling (fullscreen) is fast, because there is
-+ no need to copy around data.
-+ * you'll get scrollback (the Shift-PgUp thing),
-+ the video memory can be used as scrollback buffer
-+ con: * scrolling only parts of the screen causes some
-+ ugly flicker effects (boot logo flickers for
-+ example).
-+
-+ywrap Same as ypan, but assumes your gfx board can wrap-around the video
-+ memory (i.e. starts reading from top if it reaches the end of
-+ video memory). Faster than ypan.
-+
-+redraw Scroll by redrawing the affected part of the screen, this is the
-+ safe (and slow) default.
-+
-+vgapal Use the standard VGA registers for palette changes.
-+
-+pmipal Use the protected mode interface for palette changes.
-+ This is the default is the protected mode interface is available.
-+
-+mtrr:n Setup memory type range registers for the vesafb framebuffer
-+ where n:
-+ 0 - disabled (equivalent to nomtrr) (default)
-+ 1 - uncachable
-+ 2 - write-back
-+ 3 - write-combining
-+ 4 - write-through
-+
-+ If you see the following in dmesg, choose the type that matches
-+ the old one. In this example, use "mtrr:2".
- ...
- mtrr: type mismatch for e0000000,8000000 old: write-back new: write-combining
- ...
-
--nomtrr disable mtrr
-+nomtrr Do not use memory type range registers for vesafb.
-
- vremap:n
- remap 'n' MiB of video RAM. If 0 or not specified, remap memory
-- according to video mode. (2.5.66 patch/idea by Antonino Daplas
-- reversed to give override possibility (allocate more fb memory
-- than the kernel would) to 2.4 by tmb@iki.fi)
-+ according to video mode. (2.5.66 patch/idea by Antonino Daplas
-+ reversed to give override possibility (allocate more fb memory
-+ than the kernel would) to 2.4 by tmb@iki.fi)
-
- vtotal:n
- if the video BIOS of your card incorrectly determines the total
- amount of video RAM, use this option to override the BIOS (in MiB).
-
--Have fun!
-+Options accepted only by vesafb-tng:
-+
-+<mode> The mode you want to set, in the standard modedb format. Refer to
-+ modedb.txt for a detailed description. If you specify a mode that is
-+ not supported by your board's BIOS, vesafb-tng will attempt to set a
-+ similar mode. The list of supported modes can be found in
-+ /proc/fbx/modes, where x is the framebuffer number (usually 0).
-+ When vesafb-tng is compiled as a module, the mode string should be
-+ provided as a value of the parameter 'mode'.
-+
-+vbemode:x
-+ Force the use of VBE mode x. The mode will only be set if it's
-+ found in the VBE-provided list of supported modes.
-+ NOTE: The mode number 'x' should be specified in VESA mode number
-+ notation, not the Linux kernel one (eg. 257 instead of 769).
-+ HINT: If you use this option because normal <mode> parameter does
-+ not work for you and you use a X server, you'll probably want to
-+ set the 'nocrtc' option to ensure that the video mode is properly
-+ restored after console <-> X switches.
-+
-+nocrtc Do not use CRTC timings while setting the video mode. This option
-+ makes sence only with VBE 3.0 compliant systems. Use it if you have
-+ problems with modes set in the standard way. Note that using this
-+ option means that any refresh rate adjustments will be ignored
-+ and the refresh rate will stay at your BIOS default (60 Hz).
-+
-+noedid Do not try to fetch and use EDID-provided modes.
-+
-+noblank Disable hardware blanking.
-+
-+gtf Force the use of VESA's GTF (Generalized Timing Formula). Specifying
-+ this will cause vesafb to skip its internal modedb and EDID-modedb
-+ and jump straight to the GTF part of the code (normally used only if
-+ everything else failed). This can be useful if you want to get as
-+ much as possible from your graphics board but your BIOS doesn't
-+ support modes with the refresh rates you require. Note that you may
-+ need to specify the maxhf, maxvf and maxclk parameters if they are not
-+ provided by the EDID block.
-+
-+Additionally, the following parameters may be provided. They all override the
-+EDID-provided values and BIOS defaults. Refer to your monitor's specs to get
-+the correct values for maxhf, maxvf and maxclk for your hardware.
-+
-+maxhf:n Maximum horizontal frequency (in kHz).
-+maxvf:n Maximum vertical frequency (in Hz).
-+maxclk:n Maximum pixel clock (in MHz).
-
-- Gerd
-+Have fun!
-
- --
-+Original document for the vesafb driver by
- Gerd Knorr <kraxel@goldbach.in-berlin.de>
-
--Minor (mostly typo) changes
--by Nico Schmoigl <schmoigl@rumms.uni-mannheim.de>
-+Minor (mostly typo) changes by
-+Nico Schmoigl <schmoigl@rumms.uni-mannheim.de>
-+
-+Extended documentation for vm86, VBE 3.0 and vesafb-tng by
-+Michal Januszewski <spock@gentoo.org>
-+
-diff --git a/arch/i386/boot/video.S b/arch/i386/boot/video.S
-index 2c5b5cc..2c2d4b5 100644
---- a/arch/i386/boot/video.S
-+++ b/arch/i386/boot/video.S
-@@ -163,10 +163,12 @@ basret: ret
- # parameters in the default 80x25 mode -- these are set directly,
- # because some very obscure BIOSes supply insane values.
- mode_params:
-+#ifdef CONFIG_FB_VESA_STD
- #ifdef CONFIG_VIDEO_SELECT
- cmpb $0, graphic_mode
- jnz mopar_gr
- #endif
-+#endif
- movb $0x03, %ah # Read cursor position
- xorb %bh, %bh
- int $0x10
-@@ -199,6 +201,7 @@ mopar2: movb %al, %fs:(PARAM_VIDEO_LINES)
- ret
-
- #ifdef CONFIG_VIDEO_SELECT
-+#ifdef CONFIG_FB_VESA_STD
- # Fetching of VESA frame buffer parameters
- mopar_gr:
- leaw modelist+1024, %di
-@@ -281,6 +284,7 @@ dac_done:
- movw %es, %fs:(PARAM_VESAPM_SEG)
- movw %di, %fs:(PARAM_VESAPM_OFF)
- no_pm: ret
-+#endif
-
- # The video mode menu
- mode_menu:
-@@ -495,10 +499,12 @@ mode_set:
-
- cmpb $VIDEO_FIRST_V7>>8, %ah
- jz setv7
--
-+
-+#ifdef CONFIG_FB_VESA_STD
- cmpb $VIDEO_FIRST_VESA>>8, %ah
- jnc check_vesa
--
-+#endif
-+
- orb %ah, %ah
- jz setmenu
-
-@@ -570,6 +576,7 @@ setr1: lodsw
- movw -4(%si), %ax # Fetch mode ID
- jmp _m_s
-
-+#ifdef CONFIG_FB_VESA_STD
- check_vesa:
- leaw modelist+1024, %di
- subb $VIDEO_FIRST_VESA>>8, %bh
-@@ -603,6 +610,7 @@ check_vesa:
- ret
-
- _setbad: jmp setbad # Ugly...
-+#endif
-
- # Recalculate vertical display end registers -- this fixes various
- # inconsistencies of extended modes on many adapters. Called when
-diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c
-index 1393523..8a05f95 100644
---- a/drivers/char/sysrq.c
-+++ b/drivers/char/sysrq.c
-@@ -240,7 +240,7 @@ static void send_sig_all(int sig)
- struct task_struct *p;
-
- for_each_process(p) {
-- if (p->mm && !is_init(p))
-+ if (p->mm && !is_init(p) && !(p->flags & PF_BORROWED_MM))
- /* Not swapper, init nor kernel thread */
- force_sig(sig, p);
- }
-diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
-index 4e83f01..ae122fd 100644
---- a/drivers/video/Kconfig
-+++ b/drivers/video/Kconfig
-@@ -547,8 +547,22 @@ config FB_TGA
- cards. Say Y if you have one of those.
-
- config FB_VESA
-- bool "VESA VGA graphics support"
-- depends on (FB = y) && X86
-+ tristate "VESA VGA graphics support"
-+ depends on (FB = y) && (X86 || X86_64)
-+ help
-+ This is the frame buffer device driver for generic VESA 2.0
-+ compliant graphic cards. The older VESA 1.2 cards are not supported.
-+ You will get a boot time penguin logo at no additional cost. Please
-+ read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
-+
-+choice
-+ prompt "VESA driver type"
-+ depends on FB_VESA
-+ default FB_VESA_STD if X86_64
-+ default FB_VESA_TNG if X86
-+
-+config FB_VESA_STD
-+ bool "vesafb"
- select FB_CFB_FILLRECT
- select FB_CFB_COPYAREA
- select FB_CFB_IMAGEBLIT
-@@ -557,7 +571,43 @@ config FB_VESA
- This is the frame buffer device driver for generic VESA 2.0
- compliant graphic cards. The older VESA 1.2 cards are not supported.
- You will get a boot time penguin logo at no additional cost. Please
-- read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
-+ read <file:Documentation/fb/vesafb.txt>. Choose this driver if you
-+ are experiencing problems with vesafb-tng or if you own a 64-bit system.
-+
-+ Note that this driver cannot be compiled as a module.
-+
-+config FB_VESA_TNG
-+ bool "vesafb-tng"
-+ depends on !X86_64
-+ select FB_MODE_HELPERS
-+ select FB_CFB_FILLRECT
-+ select FB_CFB_COPYAREA
-+ select FB_CFB_IMAGEBLIT
-+ help
-+ This is an enhanced generic frame buffer device driver for
-+ VBE 2.0 compliant graphic cards. It can take advantage of VBE 3.0
-+ features (refresh rate adjustment) when these are available.
-+ The driver also makes it possible to change the video mode
-+ on the fly and to switch back to text mode when it's unloaded.
-+
-+ If the driver is compiled as a module, the module will be called
-+ vesafb-tng.
-+
-+endchoice
-+
-+config FB_VESA_DEFAULT_MODE
-+ string "VESA default mode"
-+ depends on FB_VESA_TNG
-+ default "640x480@60"
-+ help
-+ This option is used to determine the default mode vesafb is
-+ supposed to switch to in case no mode is provided as a kernel
-+ command line parameter.
-+
-+config VIDEO_SELECT
-+ bool
-+ depends on FB_VESA
-+ default y
-
- config FB_IMAC
- bool "Intel-based Macintosh Framebuffer Support"
-diff --git a/drivers/video/Makefile b/drivers/video/Makefile
-index 309a26d..e57b0e7 100644
---- a/drivers/video/Makefile
-+++ b/drivers/video/Makefile
-@@ -102,7 +102,11 @@ obj-$(CONFIG_FB_PNX4008_DUM_RGB) += pnx4008/
- obj-$(CONFIG_FB_IBM_GXT4500) += gxt4500.o
-
- # Platform or fallback drivers go here
--obj-$(CONFIG_FB_VESA) += vesafb.o
-+ifeq ($(CONFIG_FB_VESA_STD),y)
-+ obj-y += vesafb.o
-+else
-+ obj-$(CONFIG_FB_VESA) += vesafb-thread.o vesafb-tng.o
-+endif
- obj-$(CONFIG_FB_IMAC) += imacfb.o
- obj-$(CONFIG_FB_VGA16) += vga16fb.o vgastate.o
- obj-$(CONFIG_FB_OF) += offb.o
-diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
-index 3cfea31..bfb39cc 100644
---- a/drivers/video/fbmem.c
-+++ b/drivers/video/fbmem.c
-@@ -1408,6 +1408,7 @@ fbmem_init(void)
- printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
- fb_class = NULL;
- }
-+
- return 0;
- }
-
-diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c
-index 5df41f6..f838a53 100644
---- a/drivers/video/modedb.c
-+++ b/drivers/video/modedb.c
-@@ -674,6 +674,7 @@ void fb_var_to_videomode(struct fb_videomode *mode,
- {
- u32 pixclock, hfreq, htotal, vtotal;
-
-+ mode->refresh = 0;
- mode->name = NULL;
- mode->xres = var->xres;
- mode->yres = var->yres;
-@@ -1025,3 +1026,4 @@ EXPORT_SYMBOL(fb_find_best_mode);
- EXPORT_SYMBOL(fb_find_nearest_mode);
- EXPORT_SYMBOL(fb_videomode_to_modelist);
- EXPORT_SYMBOL(fb_find_mode);
-+EXPORT_SYMBOL(fb_destroy_modelist);
-diff --git a/drivers/video/vesafb-thread.c b/drivers/video/vesafb-thread.c
-new file mode 100644
-index 0000000..543e202
---- /dev/null
-+++ b/drivers/video/vesafb-thread.c
-@@ -0,0 +1,751 @@
-+/*
-+ * Framebuffer driver for VBE 2.0+ compliant graphic boards.
-+ * Kernel thread and vm86 routines.
-+ *
-+ * (c) 2004-2006 Michal Januszewski <spock@gentoo.org>
-+ *
-+ */
-+
-+#include <linux/workqueue.h>
-+#include <linux/completion.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/mm.h>
-+#include <linux/delay.h>
-+#include <linux/signal.h>
-+#include <linux/freezer.h>
-+#include <linux/suspend.h>
-+#include <linux/unistd.h>
-+#include <video/vesa.h>
-+#include <video/edid.h>
-+#include <asm/mman.h>
-+#include <asm/page.h>
-+#include <asm/vm86.h>
-+#include <asm/thread_info.h>
-+#include <asm/uaccess.h>
-+#include <asm/mmu_context.h>
-+#include "edid.h"
-+
-+static int errno;
-+
-+static DECLARE_COMPLETION(vesafb_th_completion);
-+static DECLARE_MUTEX(vesafb_task_list_sem);
-+static LIST_HEAD(vesafb_task_list);
-+static DECLARE_WAIT_QUEUE_HEAD(vesafb_wait);
-+
-+static struct vm86_struct vm86;
-+static int vesafb_pid = 0;
-+
-+#define DEFAULT_VM86_FLAGS (IF_MASK | IOPL_MASK)
-+#define VM86_PUSHW(x) \
-+do { \
-+ vm86.regs.esp -= 2; \
-+ *(u16*)(STACK_ADDR + vm86.regs.esp) = x; \
-+} while(0);
-+
-+/* Stack, the return code and buffers will be put into
-+ * one contiguous memory chunk:
-+ *
-+ * [ STACK | RET_CODE | BUFFER ]
-+ *
-+ * Some video BIOSes (sis6326) try to store data somewhere
-+ * in 0x7000-0x7fff, so we zeromap more memory to be safe.
-+ */
-+#define IVTBDA_SIZE PAGE_SIZE
-+#define RET_CODE_SIZE 0x0010
-+#define STACK_SIZE 0x0500
-+#define BUFFER_SIZE 0x10000
-+
-+/* The amount of memory that will be allocated should be a multiple
-+ * of PAGE_SIZE. */
-+#define __MEM_SIZE (RET_CODE_SIZE + STACK_SIZE + BUFFER_SIZE)
-+#define REAL_MEM_SIZE (((__MEM_SIZE / PAGE_SIZE) + 1) * PAGE_SIZE)
-+
-+#define IVTBDA_ADDR 0x00000
-+#define STACK_ADDR (IVTBDA_ADDR + IVTBDA_SIZE)
-+#define RET_CODE_ADDR (STACK_ADDR + STACK_SIZE)
-+#define BUF_ADDR (RET_CODE_ADDR + RET_CODE_SIZE)
-+
-+#define FLAG_D (1 << 10)
-+
-+/* Syscalls used by the vesafb thread */
-+static int vm86old(struct vm86_struct __user* v86)
-+{
-+ long res;
-+ __asm__ volatile ("push %%ebx; movl %2, %%ebx ; int $0x80 ; pop %%ebx"
-+ : "=a" (res)
-+ : "0" (__NR_vm86old), "ri" ((long)(v86)) : "memory");
-+
-+ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) {
-+ errno = -res;
-+ res = -1;
-+ }
-+ return (int)res;
-+}
-+
-+static int ioperm(unsigned long a, unsigned long b, unsigned long c)
-+{
-+ long res;
-+ __asm__ volatile ("push %%ebx; movl %2, %%ebx ; int $0x80 ; pop %%ebx"
-+ : "=a" (res)
-+ : "0" (__NR_ioperm), "ri" ((long)(a)), "c" ((long)(b)),
-+ "d" ((long)(c)) : "memory");
-+
-+ if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) {
-+ errno = -res;
-+ res = -1;
-+ }
-+ return (int)res;
-+}
-+
-+/* Segment prefix opcodes */
-+enum {
-+ P_CS = 0x2e,
-+ P_SS = 0x36,
-+ P_DS = 0x3e,
-+ P_ES = 0x26,
-+ P_FS = 0x64,
-+ P_GS = 0x65
-+};
-+
-+/* Emulated vm86 ins instruction */
-+static void vm86_ins(int size)
-+{
-+ u32 edx, edi;
-+ edx = vm86.regs.edx & 0xffff;
-+ edi = (vm86.regs.edi & 0xffff) + (u32)(vm86.regs.es << 4);
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("std\n");
-+ else
-+ asm volatile ("cld\n");
-+
-+ switch (size) {
-+ case 4:
-+ asm volatile ("insl\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ case 2:
-+ asm volatile ("insw\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ case 1:
-+ asm volatile ("insb\n" : "=D" (edi) : "d" (edx), "0" (edi));
-+ break;
-+ }
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("cld\n");
-+
-+ edi -= (u32)(vm86.regs.es << 4);
-+
-+ vm86.regs.edi &= 0xffff0000;
-+ vm86.regs.edi |= edi & 0xffff;
-+}
-+
-+static void vm86_rep_ins(int size)
-+{
-+ u16 cx = vm86.regs.ecx;
-+ while (cx--)
-+ vm86_ins(size);
-+
-+ vm86.regs.ecx &= 0xffff0000;
-+}
-+
-+/* Emulated vm86 outs instruction */
-+static void vm86_outs(int size, int segment)
-+{
-+ u32 edx, esi, base;
-+
-+ edx = vm86.regs.edx & 0xffff;
-+ esi = vm86.regs.esi & 0xffff;
-+
-+ switch (segment) {
-+ case P_CS: base = vm86.regs.cs; break;
-+ case P_SS: base = vm86.regs.ss; break;
-+ case P_ES: base = vm86.regs.es; break;
-+ case P_FS: base = vm86.regs.fs; break;
-+ case P_GS: base = vm86.regs.gs; break;
-+ default: base = vm86.regs.ds; break;
-+ }
-+
-+ esi += base << 4;
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("std\n");
-+ else
-+ asm volatile ("cld\n");
-+
-+ switch (size) {
-+ case 4:
-+ asm volatile ("outsl\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ case 2:
-+ asm volatile ("outsw\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ case 1:
-+ asm volatile ("outsb\n" : "=S" (esi) : "d" (edx), "0" (esi));
-+ break;
-+ }
-+
-+ if (vm86.regs.eflags & FLAG_D)
-+ asm volatile ("cld");
-+
-+ esi -= base << 4;
-+ vm86.regs.esi &= 0xffff0000;
-+ vm86.regs.esi |= (esi & 0xffff);
-+}
-+
-+static void vm86_rep_outs(int size, int segment)
-+{
-+ u16 cx = vm86.regs.ecx;
-+ while (cx--)
-+ vm86_outs(size, segment);
-+
-+ vm86.regs.ecx &= 0xffff0000;
-+}
-+
-+static int vm86_do_unknown(void)
-+{
-+ u8 data32 = 0, segment = P_DS, rep = 0;
-+ u8 *instr;
-+ int ret = 0, i = 0;
-+
-+ instr = (u8*)((vm86.regs.cs << 4) + vm86.regs.eip);
-+
-+ while (1) {
-+ switch(instr[i]) {
-+ case 0x66: /* operand size prefix */
-+ data32 = 1 - data32;
-+ i++;
-+ break;
-+ case 0xf2: /* repnz */
-+ case 0xf3: /* rep */
-+ rep = 1;
-+ i++;
-+ break;
-+ case P_CS: /* segment prefix */
-+ case P_SS:
-+ case P_DS:
-+ case P_ES:
-+ case P_FS:
-+ case P_GS:
-+ segment = instr[i];
-+ i++;
-+ break;
-+ case 0xf0: /* LOCK - ignored */
-+ case 0x67: /* address size prefix - ignored */
-+ i++;
-+ break;
-+ case 0x6c: /* insb */
-+ if (rep)
-+ vm86_rep_ins(1);
-+ else
-+ vm86_ins(1);
-+ i++;
-+ goto out;
-+ case 0x6d: /* insw / insd */
-+ if (rep) {
-+ if (data32)
-+ vm86_rep_ins(4);
-+ else
-+ vm86_rep_ins(2);
-+ } else {
-+ if (data32)
-+ vm86_ins(4);
-+ else
-+ vm86_ins(2);
-+ }
-+ i++;
-+ goto out;
-+ case 0x6e: /* outsb */
-+ if (rep)
-+ vm86_rep_outs(1, segment);
-+ else
-+ vm86_outs(1, segment);
-+ i++;
-+ goto out;
-+ case 0x6f: /* outsw / outsd */
-+ if (rep) {
-+ if (data32)
-+ vm86_rep_outs(4, segment);
-+ else
-+ vm86_rep_outs(2, segment);
-+ } else {
-+ if (data32)
-+ vm86_outs(4, segment);
-+ else
-+ vm86_outs(2, segment);
-+ }
-+ i++;
-+ goto out;
-+ case 0xe4: /* inb xx */
-+ asm volatile (
-+ "inb %w1, %b0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]), "0" (vm86.regs.eax));
-+ i += 2;
-+ goto out;
-+ case 0xe5: /* inw xx / ind xx */
-+ if (data32) {
-+ asm volatile (
-+ "inl %w1, %0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]),
-+ "0" (vm86.regs.eax));
-+ } else {
-+ asm volatile (
-+ "inw %w1, %w0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (instr[i+1]),
-+ "0" (vm86.regs.eax));
-+ }
-+ i += 2;
-+ goto out;
-+
-+ case 0xec: /* inb dx */
-+ asm volatile (
-+ "inb %w1, %b0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx), "0" (vm86.regs.eax));
-+ i++;
-+ goto out;
-+ case 0xed: /* inw dx / ind dx */
-+ if (data32) {
-+ asm volatile (
-+ "inl %w1, %0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx));
-+ } else {
-+ asm volatile (
-+ "inw %w1, %w0"
-+ : "=a" (vm86.regs.eax)
-+ : "d" (vm86.regs.edx));
-+ }
-+ i++;
-+ goto out;
-+ case 0xe6: /* outb xx */
-+ asm volatile (
-+ "outb %b0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax), "d" (instr[i+1]));
-+ i += 2;
-+ goto out;
-+ case 0xe7: /* outw xx / outd xx */
-+ if (data32) {
-+ asm volatile (
-+ "outl %0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (instr[i+1]));
-+ } else {
-+ asm volatile (
-+ "outw %w0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (instr[i+1]));
-+ }
-+ i += 2;
-+ goto out;
-+ case 0xee: /* outb dx */
-+ asm volatile (
-+ "outb %b0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax), "d" (vm86.regs.edx));
-+ i++;
-+ goto out;
-+ case 0xef: /* outw dx / outd dx */
-+ if (data32) {
-+ asm volatile (
-+ "outl %0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (vm86.regs.edx));
-+ } else {
-+ asm volatile (
-+ "outw %w0, %w1"
-+ : /* no return value */
-+ : "a" (vm86.regs.eax),
-+ "d" (vm86.regs.edx));
-+ }
-+ i++;
-+ goto out;
-+ default:
-+ printk(KERN_ERR "vesafb: BUG, opcode 0x%x emulation "
-+ "not supported (EIP: 0x%lx)\n",
-+ instr[i], (u32)(vm86.regs.cs << 4) +
-+ vm86.regs.eip);
-+ ret = 1;
-+ goto out;
-+ }
-+ }
-+out: vm86.regs.eip += i;
-+ return ret;
-+}
-+
-+void vesafb_do_vm86(struct vm86_regs *regs)
-+{
-+ unsigned int ret;
-+ u8 *retcode = (void*)RET_CODE_ADDR;
-+
-+ memset(&vm86,0,sizeof(vm86));
-+ memcpy(&vm86.regs, regs, sizeof(struct vm86_regs));
-+
-+ /* The return code */
-+ retcode[0] = 0xcd; /* int opcode */
-+ retcode[1] = 0xff; /* int number (255) */
-+
-+ /* We use int 0xff to get back to protected mode */
-+ memset(&vm86.int_revectored, 0, sizeof(vm86.int_revectored));
-+ ((unsigned char *)&vm86.int_revectored)[0xff / 8] |= (1 << (0xff % 8));
-+
-+ /*
-+ * We want to call int 0x10, so we set:
-+ * CS = 0x42 = 0x10 * 4 + 2
-+ * IP = 0x40 = 0x10 * 4
-+ * and SS:ESP. It's up to the caller to set the rest of the registers.
-+ */
-+ vm86.regs.eflags = DEFAULT_VM86_FLAGS;
-+ vm86.regs.cs = *(unsigned short *)0x42;
-+ vm86.regs.eip = *(unsigned short *)0x40;
-+ vm86.regs.ss = (STACK_ADDR >> 4);
-+ vm86.regs.esp = ((STACK_ADDR & 0x0000f) + STACK_SIZE);
-+
-+ /* These will be fetched off the stack when we come to an iret in the
-+ * int's 0x10 code. */
-+ VM86_PUSHW(DEFAULT_VM86_FLAGS);
-+ VM86_PUSHW((RET_CODE_ADDR >> 4)); /* return code segment */
-+ VM86_PUSHW((RET_CODE_ADDR & 0x0000f)); /* return code offset */
-+
-+ while(1) {
-+ ret = vm86old(&vm86);
-+
-+ if (VM86_TYPE(ret) == VM86_INTx) {
-+ int vint = VM86_ARG(ret);
-+
-+ /* If exit from vm86 was caused by int 0xff, then
-+ * we're done.. */
-+ if (vint == 0xff)
-+ goto out;
-+
-+ /* .. otherwise, we have to call the int handler
-+ * manually */
-+ VM86_PUSHW(vm86.regs.eflags);
-+ VM86_PUSHW(vm86.regs.cs);
-+ VM86_PUSHW(vm86.regs.eip);
-+
-+ vm86.regs.cs = *(u16 *)((vint << 2) + 2);
-+ vm86.regs.eip = *(u16 *)(vint << 2);
-+ vm86.regs.eflags &= ~(VIF_MASK | TF_MASK);
-+ } else if (VM86_TYPE(ret) == VM86_UNKNOWN) {
-+ if (vm86_do_unknown())
-+ goto out;
-+ } else {
-+ printk(KERN_ERR "vesafb: BUG, returned from "
-+ "vm86 with %x (EIP: 0x%lx)\n",
-+ ret, (u32)(vm86.regs.cs << 4) +
-+ vm86.regs.eip);
-+ goto out;
-+ }
-+ }
-+
-+out: /* copy the registers' state back to the caller's struct */
-+ memcpy(regs, &vm86.regs, sizeof(struct vm86_regs));
-+}
-+
-+static int vesafb_remap_pfn_range(unsigned long start, unsigned long end,
-+ unsigned long pgoff, unsigned long prot,
-+ int type)
-+{
-+ struct vm_area_struct *vma;
-+ struct mm_struct *mm = current->mm;
-+ int ret = 0;
-+
-+ vma = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
-+ if (!vma)
-+ return -ENOMEM;
-+ memset(vma, 0, sizeof(*vma));
-+ down_write(&mm->mmap_sem);
-+ vma->vm_mm = mm;
-+ vma->vm_start = start;
-+ vma->vm_end = end;
-+ vma->vm_flags = VM_READ | VM_WRITE | VM_EXEC;
-+ vma->vm_flags |= mm->def_flags;
-+ vma->vm_page_prot.pgprot = prot;
-+ vma->vm_pgoff = pgoff;
-+
-+ if ((ret = insert_vm_struct(mm, vma))) {
-+ up_write(&mm->mmap_sem);
-+ kmem_cache_free(vm_area_cachep, vma);
-+ return ret;
-+ }
-+
-+ if (type) {
-+ ret = zeromap_page_range(vma,
-+ vma->vm_start,
-+ vma->vm_end - vma->vm_start,
-+ vma->vm_page_prot);
-+ } else {
-+ vma->vm_flags |= VM_SHARED;
-+ ret = remap_pfn_range(vma,
-+ vma->vm_start,
-+ vma->vm_pgoff,
-+ vma->vm_end - vma->vm_start,
-+ vma->vm_page_prot);
-+ }
-+ up_write(&mm->mmap_sem);
-+ return ret;
-+}
-+
-+static inline int vesafb_init_mem(void)
-+{
-+ int ret = 0;
-+
-+ /* The memory chunks we're remapping here should be multiples
-+ * of PAGE_SIZE. */
-+ ret += vesafb_remap_pfn_range(0x00000, IVTBDA_SIZE, 0,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 0);
-+ ret += vesafb_remap_pfn_range(IVTBDA_SIZE, REAL_MEM_SIZE, 0,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 1);
-+ ret += vesafb_remap_pfn_range(0x9f000, 0x100000,
-+ 0x9f000 >> PAGE_SHIFT,
-+ PROT_READ | PROT_EXEC | PROT_WRITE, 0);
-+ if (ret)
-+ printk(KERN_ERR "vesafb thread: memory remapping failed\n");
-+
-+ return ret;
-+}
-+
-+#define vesafb_get_string(str) \
-+{ \
-+ /* The address is in the form ssssoooo, where oooo = offset, \
-+ * ssss = segment */ \
-+ addr = ((p_vbe(tsk->buf)->str & 0xffff0000) >> 12) + \
-+ (p_vbe(tsk->buf)->str & 0x0000ffff); \
-+ \
-+ /* The data is in ROM which is shared between processes, so we \
-+ * just translate the real mode address into one visible from \
-+ * kernel space */ \
-+ if (addr >= 0xa0000) { \
-+ p_vbe(tsk->buf)->str = (u32) __va(addr); \
-+ \
-+ /* The data is in the buffer, we just have to convert the \
-+ * address so that it points into the buffer user provided. */ \
-+ } else if (addr > BUF_ADDR && addr < BUF_ADDR + \
-+ sizeof(struct vesafb_vbe_ib)) { \
-+ addr -= BUF_ADDR; \
-+ p_vbe(tsk->buf)->str = (u32) (tsk->buf + addr); \
-+ \
-+ /* This should never happen: someone was insane enough to put \
-+ * the data somewhere in RAM.. */ \
-+ } else { \
-+ p_vbe(tsk->buf)->str = (u32) ""; \
-+ } \
-+}
-+
-+void vesafb_handle_getvbeib(struct vesafb_task *tsk)
-+{
-+ int addr, res;
-+
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.edi = (BUF_ADDR & 0x000f);
-+ strncpy(p_vbe(BUF_ADDR)->vbe_signature, "VBE2", 4);
-+
-+ vesafb_do_vm86(&tsk->regs);
-+ memcpy(tsk->buf, (void*)(BUF_ADDR), sizeof(struct vesafb_vbe_ib));
-+
-+ /* The OEM fields were not defined prior to VBE 2.0 */
-+ if (p_vbe(tsk->buf)->vbe_version >= 0x200) {
-+ vesafb_get_string(oem_string_ptr);
-+ vesafb_get_string(oem_vendor_name_ptr);
-+ vesafb_get_string(oem_product_name_ptr);
-+ vesafb_get_string(oem_product_rev_ptr);
-+ }
-+
-+ /* This is basically the same as vesafb_get_string() */
-+ addr = ((p_vbe(tsk->buf)->mode_list_ptr & 0xffff0000) >> 12) +
-+ (p_vbe(tsk->buf)->mode_list_ptr & 0x0000ffff);
-+
-+ if (addr >= 0xa0000) {
-+ p_vbe(tsk->buf)->mode_list_ptr = (u32) __va(addr);
-+ } else if (addr > BUF_ADDR && addr < BUF_ADDR +
-+ sizeof(struct vesafb_vbe_ib)) {
-+ addr -= BUF_ADDR;
-+ p_vbe(tsk->buf)->mode_list_ptr = (u32) (tsk->buf + addr);
-+ } else {
-+ res = 0;
-+ printk(KERN_WARNING "vesafb: warning, copying modelist "
-+ "from somewhere in RAM!\n");
-+ while (*(u16*)(addr+res) != 0xffff &&
-+ res < (sizeof(p_vbe(tsk->buf)->reserved) - 2)) {
-+ *(u16*) ((u32)&(p_vbe(tsk->buf)->reserved) + res) =
-+ *(u16*)(addr+res);
-+ res += 2;
-+ }
-+ *(u16*) ((u32)&(p_vbe(tsk->buf)->reserved) + res) = 0xffff;
-+ }
-+}
-+
-+int vesafb_handle_tasks(void)
-+{
-+ struct vesafb_task *tsk;
-+ struct list_head *curr, *next;
-+ int ret = 0;
-+
-+ down(&vesafb_task_list_sem);
-+ list_for_each_safe(curr, next, &vesafb_task_list) {
-+ tsk = list_entry(curr, struct vesafb_task, node);
-+
-+ if (tsk->flags & TF_EXIT) {
-+ ret = 1;
-+ goto task_done;
-+ }
-+ if (tsk->flags & TF_GETVBEIB) {
-+ vesafb_handle_getvbeib(tsk);
-+ goto task_done;
-+ }
-+ /* Do we need to store a pointer to the buffer in ES:EDI? */
-+ if (tsk->flags & TF_BUF_DI) {
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.edi = (BUF_ADDR & 0x000f);
-+ }
-+ /* Sometimes the pointer has to be in ES:EBX. */
-+ if (tsk->flags & TF_BUF_BX) {
-+ tsk->regs.es = (BUF_ADDR >> 4);
-+ tsk->regs.ebx = (BUF_ADDR & 0x000f);
-+ }
-+ if (tsk->flags & (TF_BUF_DI | TF_BUF_BX))
-+ memcpy((void*)BUF_ADDR, tsk->buf, tsk->buf_len);
-+
-+ vesafb_do_vm86(&tsk->regs);
-+
-+ if (tsk->flags & TF_RETURN_BUF)
-+ memcpy(tsk->buf, (void*)BUF_ADDR, tsk->buf_len);
-+
-+task_done: list_del(curr);
-+ complete(&tsk->done);
-+ }
-+
-+ /* If we're going to kill this thread, don't allow any elements
-+ * to be added to the task list. */
-+ if (!ret)
-+ up(&vesafb_task_list_sem);
-+
-+ return ret;
-+}
-+
-+/*
-+ * This 'hybrid' thread serves as a backend for vesafb-tng, handling all vm86
-+ * calls. It is started as a kernel thread. It then creates its own mm struct,
-+ * thus separating itself from any userspace processes. At this moment, it
-+ * stops being a kernel thread (kernel threads have mm = NULL) and becomes
-+ * a 'hybrid' thread -- one that has full access to kernel space, yet runs
-+ * with its own address space.
-+ *
-+ * This is necessary because in order to make vm86 calls some parts of the
-+ * first 1MB of RAM have to be setup to mimic the real mode. These are:
-+ * - interrupt vector table [0x00000-0x003ff]
-+ * - BIOS data area [0x00400-0x004ff]
-+ * - Extended BIOS data area [0x9fc00-0x9ffff]
-+ * - the video RAM [0xa0000-0xbffff]
-+ * - video BIOS [0xc0000-0xcffff]
-+ * - motherboard BIOS [0xf0000-0xfffff]
-+ */
-+int vesafb_thread(void *unused)
-+{
-+ int err = 0;
-+
-+ set_fs(KERNEL_DS);
-+ daemonize("vesafb");
-+
-+ if (set_new_mm()) {
-+ err = -ENOMEM;
-+ goto thr_end;
-+ }
-+ if (vesafb_init_mem()) {
-+ err = -ENOMEM;
-+ goto thr_end;
-+ }
-+
-+ DPRINTK("started vesafb thread\n");
-+
-+ /* Having an IO bitmap makes things faster as we avoid GPFs
-+ * when running vm86 code. We can live if it fails, though,
-+ * so don't bother checking for errors. */
-+ ioperm(0,1024,1);
-+ set_user_nice(current, -10);
-+
-+ complete(&vesafb_th_completion);
-+
-+ while (1) {
-+ if (vesafb_handle_tasks())
-+ break;
-+ wait_event_interruptible(vesafb_wait,
-+ !list_empty(&vesafb_task_list));
-+ try_to_freeze();
-+ }
-+
-+out: DPRINTK("exiting the vesafb thread\n");
-+ vesafb_pid = -1;
-+
-+ /* Now that all callers know this thread is no longer running
-+ * (pid < 0), allow them to continue. */
-+ up(&vesafb_task_list_sem);
-+ return err;
-+thr_end:
-+ down(&vesafb_task_list_sem);
-+ complete(&vesafb_th_completion);
-+ goto out;
-+}
-+
-+int vesafb_queue_task(struct vesafb_task *tsk)
-+{
-+ down(&vesafb_task_list_sem);
-+ if (vesafb_pid < 0)
-+ return -1;
-+ list_add_tail(&tsk->node, &vesafb_task_list);
-+ up(&vesafb_task_list_sem);
-+ wake_up(&vesafb_wait);
-+ return 0;
-+}
-+
-+int vesafb_wait_for_thread(void)
-+{
-+ /* PID 0 means that the thread is still initializing. */
-+ if (vesafb_pid < 0)
-+ return -1;
-+ wait_for_completion(&vesafb_th_completion);
-+ return 0;
-+}
-+
-+int __init vesafb_init_thread(void)
-+{
-+ vesafb_pid = kernel_thread(vesafb_thread,NULL,0);
-+ return 0;
-+}
-+
-+#ifdef MODULE
-+void __exit vesafb_kill_thread(void)
-+{
-+ struct vesafb_task *tsk;
-+ if (vesafb_pid <= 0)
-+ return;
-+
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ return;
-+ tsk->flags |= TF_EXIT;
-+ vesafb_queue_task(tsk);
-+ vesafb_wait_for_task(tsk);
-+ kfree(tsk);
-+ return;
-+}
-+module_exit(vesafb_kill_thread);
-+#endif
-+module_init(vesafb_init_thread);
-+
-+EXPORT_SYMBOL_GPL(vesafb_queue_task);
-+EXPORT_SYMBOL_GPL(vesafb_wait_for_thread);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Michal Januszewski");
-+
-diff --git a/drivers/video/vesafb-tng.c b/drivers/video/vesafb-tng.c
-new file mode 100644
-index 0000000..b4d4394
---- /dev/null
-+++ b/drivers/video/vesafb-tng.c
-@@ -0,0 +1,1586 @@
-+/*
-+ * Framebuffer driver for VBE 2.0+ compliant graphic boards
-+ *
-+ * (c) 2004-2006 Michal Januszewski <spock@gentoo.org>
-+ * Based upon vesafb code by Gerd Knorr <kraxel@goldbach.in-berlin.de>
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/string.h>
-+#include <linux/mm.h>
-+#include <linux/tty.h>
-+#include <linux/delay.h>
-+#include <linux/fb.h>
-+#include <linux/ioport.h>
-+#include <linux/init.h>
-+#include <linux/proc_fs.h>
-+#include <linux/completion.h>
-+#include <linux/platform_device.h>
-+#include <video/edid.h>
-+#include <video/vesa.h>
-+#include <video/vga.h>
-+#include <asm/io.h>
-+#include <asm/mtrr.h>
-+#include <asm/page.h>
-+#include <asm/pgtable.h>
-+#include "edid.h"
-+
-+#define dac_reg (0x3c8)
-+#define dac_val (0x3c9)
-+
-+#define VESAFB_NEED_EXACT_RES 1
-+#define VESAFB_NEED_EXACT_DEPTH 2
-+
-+/* --------------------------------------------------------------------- */
-+
-+static struct fb_var_screeninfo vesafb_defined __initdata = {
-+ .activate = FB_ACTIVATE_NOW,
-+ .height = 0,
-+ .width = 0,
-+ .right_margin = 32,
-+ .upper_margin = 16,
-+ .lower_margin = 4,
-+ .vsync_len = 4,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+};
-+
-+static struct fb_fix_screeninfo vesafb_fix __initdata = {
-+ .id = "VESA VGA",
-+ .type = FB_TYPE_PACKED_PIXELS,
-+ .accel = FB_ACCEL_NONE,
-+};
-+
-+static int mtrr = 0; /* disable mtrr by default */
-+static int blank = 1; /* enable blanking by default */
-+static int ypan = 0; /* 0 - nothing, 1 - ypan, 2 - ywrap */
-+static int pmi_setpal = 1; /* pmi for palette changes */
-+static u16 *pmi_base = NULL; /* protected mode interface location */
-+static void (*pmi_start)(void) = NULL;
-+static void (*pmi_pal)(void) = NULL;
-+static struct vesafb_vbe_ib vbe_ib;
-+static struct vesafb_mode_ib *vbe_modes;
-+static int vbe_modes_cnt = 0;
-+static struct fb_info *vesafb_info = NULL;
-+static int nocrtc = 0; /* ignore CRTC settings */
-+static int noedid __initdata = 0; /* don't try DDC transfers */
-+static int vram_remap __initdata = 0; /* set amount of memory to be used */
-+static int vram_total __initdata = 0; /* set total amount of memory */
-+static u16 maxclk __initdata = 0; /* maximum pixel clock */
-+static u16 maxvf __initdata = 0; /* maximum vertical frequency */
-+static u16 maxhf __initdata = 0; /* maximum horizontal frequency */
-+static int gtf __initdata = 0; /* forces use of the GTF */
-+static char *mode_option __initdata = NULL;
-+static u16 vbemode __initdata = 0;
-+
-+/* --------------------------------------------------------------------- */
-+
-+static int vesafb_find_vbe_mode(int xres, int yres, int depth,
-+ unsigned char flags)
-+{
-+ int i, match = -1, h = 0, d = 0x7fffffff;
-+
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ h = abs(vbe_modes[i].x_res - xres) +
-+ abs(vbe_modes[i].y_res - yres) +
-+ abs(depth - vbe_modes[i].depth);
-+ if (h == 0)
-+ return i;
-+ if (h < d || (h == d && vbe_modes[i].depth > depth)) {
-+ d = h;
-+ match = i;
-+ }
-+ }
-+ i = 1;
-+
-+ if (flags & VESAFB_NEED_EXACT_DEPTH && vbe_modes[match].depth != depth)
-+ i = 0;
-+ if (flags & VESAFB_NEED_EXACT_RES && d > 24)
-+ i = 0;
-+ if (i != 0)
-+ return match;
-+ else
-+ return -1;
-+}
-+
-+static int vesafb_pan_display(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ int offset;
-+
-+ offset = (var->yoffset * info->fix.line_length + var->xoffset) / 4;
-+
-+ /* It turns out it's not the best idea to do panning via vm86,
-+ * so we only allow it if we have a PMI. */
-+ if (pmi_start) {
-+ __asm__ __volatile__(
-+ "call *(%%edi)"
-+ : /* no return value */
-+ : "a" (0x4f07), /* EAX */
-+ "b" (0), /* EBX */
-+ "c" (offset), /* ECX */
-+ "d" (offset >> 16), /* EDX */
-+ "D" (&pmi_start)); /* EDI */
-+ }
-+ return 0;
-+}
-+
-+static int vesafb_blank(int blank, struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int err = 1;
-+
-+ if (vbe_ib.capabilities & VBE_CAP_VGACOMPAT) {
-+ int loop = 10000;
-+ u8 seq = 0, crtc17 = 0;
-+
-+ if (blank == FB_BLANK_POWERDOWN) {
-+ seq = 0x20;
-+ crtc17 = 0x00;
-+ err = 0;
-+ } else {
-+ seq = 0x00;
-+ crtc17 = 0x80;
-+ err = (blank == FB_BLANK_UNBLANK) ? 0 : -EINVAL;
-+ }
-+
-+ vga_wseq(NULL, 0x00, 0x01);
-+ seq |= vga_rseq(NULL, 0x01) & ~0x20;
-+ vga_wseq(NULL, 0x00, seq);
-+
-+ crtc17 |= vga_rcrt(NULL, 0x17) & ~0x80;
-+ while (loop--);
-+ vga_wcrt(NULL, 0x17, crtc17);
-+ vga_wseq(NULL, 0x00, 0x03);
-+ } else {
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f10;
-+ switch (blank) {
-+ case FB_BLANK_UNBLANK:
-+ tsk->regs.ebx = 0x0001;
-+ break;
-+ case FB_BLANK_NORMAL:
-+ tsk->regs.ebx = 0x0101; /* standby */
-+ break;
-+ case FB_BLANK_POWERDOWN:
-+ tsk->regs.ebx = 0x0401; /* powerdown */
-+ break;
-+ default:
-+ goto out;
-+ }
-+ tsk->flags = TF_CALL;
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) == 0x004f)
-+ err = 0;
-+out: kfree(tsk);
-+ }
-+ return err;
-+}
-+
-+static int vesafb_setpalette(struct vesafb_pal_entry *entries, int count,
-+ int start, struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int i = ((struct vesafb_par*)info->par)->mode_idx;
-+ int ret = 0;
-+
-+ /* We support palette modifications for 8 bpp modes only, so
-+ * there can never be more than 256 entries. */
-+ if (start + count > 256)
-+ return -EINVAL;
-+
-+ /* Use VGA registers if mode is VGA-compatible. */
-+ if (i >= 0 && i < vbe_modes_cnt &&
-+ vbe_modes[i].mode_attr & VBE_MODE_VGACOMPAT) {
-+ for (i = 0; i < count; i++) {
-+ outb_p(start + i, dac_reg);
-+ outb_p(entries[i].red, dac_val);
-+ outb_p(entries[i].green, dac_val);
-+ outb_p(entries[i].blue, dac_val);
-+ }
-+ } else if (pmi_setpal) {
-+ __asm__ __volatile__(
-+ "call *(%%esi)"
-+ : /* no return value */
-+ : "a" (0x4f09), /* EAX */
-+ "b" (0), /* EBX */
-+ "c" (count), /* ECX */
-+ "d" (start), /* EDX */
-+ "D" (entries), /* EDI */
-+ "S" (&pmi_pal)); /* ESI */
-+ } else {
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f09;
-+ tsk->regs.ebx = 0x0;
-+ tsk->regs.ecx = count;
-+ tsk->regs.edx = start;
-+ tsk->buf = entries;
-+ tsk->buf_len = sizeof(struct vesafb_pal_entry) * count;
-+ tsk->flags = TF_CALL | TF_BUF_DI;
-+
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ ret = 1;
-+ kfree(tsk);
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_setcolreg(unsigned regno, unsigned red, unsigned green,
-+ unsigned blue, unsigned transp,
-+ struct fb_info *info)
-+{
-+ struct vesafb_pal_entry entry;
-+ int shift = 16 - info->var.green.length;
-+ int ret = 0;
-+
-+ if (regno >= info->cmap.len)
-+ return -EINVAL;
-+
-+ if (info->var.bits_per_pixel == 8) {
-+ entry.red = red >> shift;
-+ entry.green = green >> shift;
-+ entry.blue = blue >> shift;
-+ entry.pad = 0;
-+
-+ ret = vesafb_setpalette(&entry, 1, regno, info);
-+ } else if (regno < 16) {
-+ switch (info->var.bits_per_pixel) {
-+ case 16:
-+ if (info->var.red.offset == 10) {
-+ /* 1:5:5:5 */
-+ ((u32*) (info->pseudo_palette))[regno] =
-+ ((red & 0xf800) >> 1) |
-+ ((green & 0xf800) >> 6) |
-+ ((blue & 0xf800) >> 11);
-+ } else {
-+ /* 0:5:6:5 */
-+ ((u32*) (info->pseudo_palette))[regno] =
-+ ((red & 0xf800) ) |
-+ ((green & 0xfc00) >> 5) |
-+ ((blue & 0xf800) >> 11);
-+ }
-+ break;
-+
-+ case 24:
-+ case 32:
-+ red >>= 8;
-+ green >>= 8;
-+ blue >>= 8;
-+ ((u32 *)(info->pseudo_palette))[regno] =
-+ (red << info->var.red.offset) |
-+ (green << info->var.green.offset) |
-+ (blue << info->var.blue.offset);
-+ break;
-+ }
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
-+{
-+ struct vesafb_pal_entry *entries;
-+ int shift = 16 - info->var.green.length;
-+ int i, ret = 0;
-+
-+ if (info->var.bits_per_pixel == 8) {
-+ if (cmap->start + cmap->len > info->cmap.start +
-+ info->cmap.len || cmap->start < info->cmap.start)
-+ return -EINVAL;
-+
-+ entries = vmalloc(sizeof(struct vesafb_pal_entry) * cmap->len);
-+ if (!entries)
-+ return -ENOMEM;
-+ for (i = 0; i < cmap->len; i++) {
-+ entries[i].red = cmap->red[i] >> shift;
-+ entries[i].green = cmap->green[i] >> shift;
-+ entries[i].blue = cmap->blue[i] >> shift;
-+ entries[i].pad = 0;
-+ }
-+ ret = vesafb_setpalette(entries, cmap->len, cmap->start, info);
-+ vfree(entries);
-+ } else {
-+ /* For modes with bpp > 8, we only set the pseudo palette in
-+ * the fb_info struct. We rely on vesafb_setcolreg to do all
-+ * sanity checking. */
-+ for (i = 0; i < cmap->len; i++) {
-+ ret += vesafb_setcolreg(cmap->start + i, cmap->red[i],
-+ cmap->green[i], cmap->blue[i],
-+ 0, info);
-+ }
-+ }
-+ return ret;
-+}
-+
-+static int vesafb_set_par(struct fb_info *info)
-+{
-+ struct vesafb_par *par = (struct vesafb_par *) info->par;
-+ struct vesafb_task *tsk;
-+ struct vesafb_crtc_ib *crtc = NULL;
-+ struct vesafb_mode_ib *mode = NULL;
-+ int i, err = 0, depth = info->var.bits_per_pixel;
-+
-+ if (depth > 8 && depth != 32)
-+ depth = info->var.red.length + info->var.green.length +
-+ info->var.blue.length;
-+
-+ i = vesafb_find_vbe_mode(info->var.xres, info->var.yres, depth,
-+ VESAFB_NEED_EXACT_RES |
-+ VESAFB_NEED_EXACT_DEPTH);
-+ if (i >= 0)
-+ mode = &vbe_modes[i];
-+ else
-+ return -EINVAL;
-+
-+ vesafb_create_task (tsk);
-+ if (!tsk)
-+ return -ENOMEM;
-+ tsk->regs.eax = 0x4f02;
-+ tsk->regs.ebx = mode->mode_id | 0x4000; /* use LFB */
-+ tsk->flags = TF_CALL;
-+
-+ if (vbe_ib.vbe_version >= 0x0300 && !nocrtc &&
-+ info->var.pixclock != 0) {
-+ tsk->regs.ebx |= 0x0800; /* use CRTC data */
-+ tsk->flags |= TF_BUF_DI;
-+ crtc = kmalloc(sizeof(struct vesafb_crtc_ib), GFP_KERNEL);
-+ if (!crtc) {
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+ crtc->horiz_start = info->var.xres + info->var.right_margin;
-+ crtc->horiz_end = crtc->horiz_start + info->var.hsync_len;
-+ crtc->horiz_total = crtc->horiz_end + info->var.left_margin;
-+
-+ crtc->vert_start = info->var.yres + info->var.lower_margin;
-+ crtc->vert_end = crtc->vert_start + info->var.vsync_len;
-+ crtc->vert_total = crtc->vert_end + info->var.upper_margin;
-+
-+ crtc->pixel_clock = PICOS2KHZ(info->var.pixclock) * 1000;
-+ crtc->refresh_rate = (u16)(100 * (crtc->pixel_clock /
-+ (crtc->vert_total * crtc->horiz_total)));
-+ crtc->flags = 0;
-+
-+ if (info->var.vmode & FB_VMODE_DOUBLE)
-+ crtc->flags |= 0x1;
-+ if (info->var.vmode & FB_VMODE_INTERLACED)
-+ crtc->flags |= 0x2;
-+ if (!(info->var.sync & FB_SYNC_HOR_HIGH_ACT))
-+ crtc->flags |= 0x4;
-+ if (!(info->var.sync & FB_SYNC_VERT_HIGH_ACT))
-+ crtc->flags |= 0x8;
-+ memcpy(&par->crtc, crtc, sizeof(struct vesafb_crtc_ib));
-+ } else
-+ memset(&par->crtc, 0, sizeof(struct vesafb_crtc_ib));
-+
-+ tsk->buf = (void*)crtc;
-+ tsk->buf_len = sizeof(struct vesafb_crtc_ib);
-+
-+ if (vesafb_queue_task (tsk)) {
-+ err = -EINVAL;
-+ goto out;
-+ }
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_ERR "vesafb: mode switch failed (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ err = -EINVAL;
-+ goto out;
-+ }
-+ par->mode_idx = i;
-+
-+ /* For 8bpp modes, always try to set the DAC to 8 bits. */
-+ if (vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC &&
-+ mode->bits_per_pixel <= 8) {
-+ vesafb_reset_task(tsk);
-+ tsk->flags = TF_CALL;
-+ tsk->regs.eax = 0x4f08;
-+ tsk->regs.ebx = 0x0800;
-+
-+ if (!vesafb_queue_task (tsk))
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f ||
-+ ((tsk->regs.ebx & 0xff00) >> 8) != 8) {
-+ /* We've failed to set the DAC palette format -
-+ * time to correct var. */
-+ info->var.red.length = 6;
-+ info->var.green.length = 6;
-+ info->var.blue.length = 6;
-+ }
-+ }
-+
-+ info->fix.visual = (info->var.bits_per_pixel == 8) ?
-+ FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
-+ info->fix.line_length = mode->bytes_per_scan_line;
-+
-+ DPRINTK("set new mode %dx%d-%d (0x%x)\n",
-+ info->var.xres, info->var.yres, info->var.bits_per_pixel,
-+ mode->mode_id);
-+
-+out: if (crtc != NULL)
-+ kfree(crtc);
-+ kfree(tsk);
-+
-+ return err;
-+}
-+
-+static void vesafb_setup_var(struct fb_var_screeninfo *var, struct fb_info *info,
-+ struct vesafb_mode_ib *mode)
-+{
-+ var->xres = mode->x_res;
-+ var->yres = mode->y_res;
-+ var->xres_virtual = mode->x_res;
-+ var->yres_virtual = (ypan) ?
-+ info->fix.smem_len / mode->bytes_per_scan_line :
-+ mode->y_res;
-+ var->xoffset = 0;
-+ var->yoffset = 0;
-+ var->bits_per_pixel = mode->bits_per_pixel;
-+
-+ if (var->bits_per_pixel == 15)
-+ var->bits_per_pixel = 16;
-+
-+ if (var->bits_per_pixel > 8) {
-+ var->red.offset = mode->red_off;
-+ var->red.length = mode->red_len;
-+ var->green.offset = mode->green_off;
-+ var->green.length = mode->green_len;
-+ var->blue.offset = mode->blue_off;
-+ var->blue.length = mode->blue_len;
-+ var->transp.offset = mode->rsvd_off;
-+ var->transp.length = mode->rsvd_len;
-+
-+ DPRINTK("directcolor: size=%d:%d:%d:%d, shift=%d:%d:%d:%d\n",
-+ mode->rsvd_len,
-+ mode->red_len,
-+ mode->green_len,
-+ mode->blue_len,
-+ mode->rsvd_off,
-+ mode->red_off,
-+ mode->green_off,
-+ mode->blue_off);
-+ } else {
-+ var->red.offset = 0;
-+ var->green.offset = 0;
-+ var->blue.offset = 0;
-+ var->transp.offset = 0;
-+
-+ /* We're assuming that we can switch the DAC to 8 bits. If
-+ * this proves to be incorrect, we'll update the fields
-+ * later in set_par(). */
-+ if (vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC) {
-+ var->red.length = 8;
-+ var->green.length = 8;
-+ var->blue.length = 8;
-+ var->transp.length = 0;
-+ } else {
-+ var->red.length = 6;
-+ var->green.length = 6;
-+ var->blue.length = 6;
-+ var->transp.length = 0;
-+ }
-+ }
-+}
-+
-+static void inline vesafb_check_limits(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ struct fb_videomode *mode;
-+
-+ if (!var->pixclock)
-+ return;
-+ if (vbe_ib.vbe_version < 0x0300) {
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60, var, info);
-+ return;
-+ }
-+ if (!fb_validate_mode(var, info))
-+ return;
-+ mode = fb_find_best_mode(var, &info->modelist);
-+ if (mode) {
-+ DPRINTK("find_best_mode: %d %d @ %d (vmode: %d)\n",
-+ mode->xres, mode->yres, mode->refresh, mode->vmode);
-+ if (mode->xres == var->xres && mode->yres == var->yres &&
-+ !(mode->vmode & (FB_VMODE_INTERLACED | FB_VMODE_DOUBLE))) {
-+ fb_videomode_to_var(var, mode);
-+ return;
-+ }
-+ }
-+ if (info->monspecs.gtf && !fb_get_mode(FB_MAXTIMINGS, 0, var, info))
-+ return;
-+ /* Use default refresh rate */
-+ var->pixclock = 0;
-+}
-+
-+static int vesafb_check_var(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ int match = -1;
-+ int depth = var->red.length + var->green.length + var->blue.length;
-+
-+ /* Various apps will use bits_per_pixel to set the color depth,
-+ * which is theoretically incorrect, but which we'll try to handle
-+ * here. */
-+ if (depth == 0 || abs(depth - var->bits_per_pixel) >= 8)
-+ depth = var->bits_per_pixel;
-+ match = vesafb_find_vbe_mode(var->xres, var->yres, depth,
-+ VESAFB_NEED_EXACT_RES);
-+
-+ if (match == -1) {
-+ DPRINTK("vesafb: mode %dx%d-%d not found\n", var->xres,
-+ var->yres, depth);
-+ return -EINVAL;
-+ }
-+
-+ vesafb_setup_var(var, info, &vbe_modes[match]);
-+ DPRINTK("found mode 0x%x (%dx%d-%dbpp)\n",
-+ vbe_modes[match].mode_id, vbe_modes[match].x_res,
-+ vbe_modes[match].y_res, vbe_modes[match].depth);
-+
-+ /* Check whether we have remapped enough memory for this mode. */
-+ if (var->yres * vbe_modes[match].bytes_per_scan_line >
-+ info->fix.smem_len) {
-+ return -EINVAL;
-+ }
-+
-+ if ((var->vmode & FB_VMODE_DOUBLE) &&
-+ !(vbe_modes[match].mode_attr & 0x100))
-+ var->vmode &= ~FB_VMODE_DOUBLE;
-+ if ((var->vmode & FB_VMODE_INTERLACED) &&
-+ !(vbe_modes[match].mode_attr & 0x200))
-+ var->vmode &= ~FB_VMODE_INTERLACED;
-+ vesafb_check_limits(var, info);
-+ return 0;
-+}
-+
-+static int vesafb_open(struct fb_info *info, int user)
-+{
-+ struct vesafb_task *tsk = NULL;
-+ struct vesafb_par *par = info->par;
-+ int cnt = atomic_read(&par->ref_count);
-+
-+ if (!cnt) {
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ goto out;
-+
-+ /* Get the VBE state buffer size. We want all available
-+ * hardware state data (CL = 0x0f). */
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0000;
-+ tsk->flags = TF_CALL;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_WARNING "vesafb: VBE state buffer size "
-+ "cannot be determined (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ goto out;
-+ }
-+
-+ par->vbe_state_size = 64 * (tsk->regs.ebx & 0xffff);
-+ par->vbe_state = kzalloc(par->vbe_state_size, GFP_KERNEL);
-+ if (!par->vbe_state)
-+ goto out;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0001;
-+ tsk->flags = TF_CALL | TF_BUF_BX | TF_RETURN_BUF;
-+ tsk->buf = (void*)(par->vbe_state);
-+ tsk->buf_len = par->vbe_state_size;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto getstate_failed;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_WARNING "vesafb: VBE get state call "
-+ "failed (eax: 0x%lx)\n", tsk->regs.eax);
-+ goto getstate_failed;
-+ }
-+ }
-+out:
-+ atomic_inc(&par->ref_count);
-+ if (tsk)
-+ kfree(tsk);
-+ return 0;
-+
-+getstate_failed:
-+ kfree(par->vbe_state);
-+ par->vbe_state = NULL;
-+ par->vbe_state_size = 0;
-+ goto out;
-+}
-+
-+static int vesafb_release(struct fb_info *info, int user)
-+{
-+ struct vesafb_task *tsk = NULL;
-+ struct vesafb_par *par = info->par;
-+ int cnt = atomic_read(&par->ref_count);
-+
-+ if (!cnt)
-+ return -EINVAL;
-+
-+ if (cnt == 1 && par->vbe_state && par->vbe_state_size) {
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ goto out;
-+
-+ tsk->regs.eax = 0x0003;
-+ tsk->regs.ebx = 0x0000;
-+ tsk->flags = TF_CALL;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f04;
-+ tsk->regs.ecx = 0x000f;
-+ tsk->regs.edx = 0x0002;
-+ tsk->buf = (void*)(par->vbe_state);
-+ tsk->buf_len = par->vbe_state_size;
-+ tsk->flags = TF_CALL | TF_BUF_BX;
-+
-+ if (vesafb_queue_task(tsk))
-+ goto out;
-+
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ printk(KERN_WARNING "vesafb: VBE state restore call "
-+ "failed (eax: 0x%lx)\n",
-+ tsk->regs.eax);
-+ }
-+out:
-+ atomic_dec(&par->ref_count);
-+ if (tsk)
-+ kfree(tsk);
-+ return 0;
-+}
-+
-+static int __init vesafb_probe(struct platform_device *device);
-+
-+static struct fb_ops vesafb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_open = vesafb_open,
-+ .fb_release = vesafb_release,
-+ .fb_setcolreg = vesafb_setcolreg,
-+ .fb_setcmap = vesafb_setcmap,
-+ .fb_pan_display = vesafb_pan_display,
-+ .fb_blank = vesafb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_check_var = vesafb_check_var,
-+ .fb_set_par = vesafb_set_par
-+};
-+
-+static struct platform_driver vesafb_driver = {
-+ .probe = vesafb_probe,
-+ .driver = {
-+ .name = "vesafb",
-+ },
-+};
-+
-+static struct platform_device *vesafb_device;
-+
-+#ifndef MODULE
-+int __init vesafb_setup(char *options)
-+{
-+ char *this_opt;
-+
-+ if (!options || !*options)
-+ return 0;
-+
-+ DPRINTK("options %s\n",options);
-+
-+ while ((this_opt = strsep(&options, ",")) != NULL) {
-+ if (!*this_opt) continue;
-+
-+ DPRINTK("this_opt: %s\n",this_opt);
-+
-+ if (! strcmp(this_opt, "redraw"))
-+ ypan=0;
-+ else if (! strcmp(this_opt, "ypan"))
-+ ypan=1;
-+ else if (! strcmp(this_opt, "ywrap"))
-+ ypan=2;
-+ else if (! strcmp(this_opt, "vgapal"))
-+ pmi_setpal=0;
-+ else if (! strcmp(this_opt, "pmipal"))
-+ pmi_setpal=1;
-+ else if (! strncmp(this_opt, "mtrr:", 5))
-+ mtrr = simple_strtoul(this_opt+5, NULL, 0);
-+ else if (! strcmp(this_opt, "nomtrr"))
-+ mtrr=0;
-+ else if (! strcmp(this_opt, "nocrtc"))
-+ nocrtc=1;
-+ else if (! strcmp(this_opt, "noedid"))
-+ noedid=1;
-+ else if (! strcmp(this_opt, "noblank"))
-+ blank=0;
-+ else if (! strcmp(this_opt, "gtf"))
-+ gtf=1;
-+ else if (! strncmp(this_opt, "vtotal:", 7))
-+ vram_total = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "vremap:", 7))
-+ vram_remap = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "maxhf:", 6))
-+ maxhf = simple_strtoul(this_opt + 6, NULL, 0);
-+ else if (! strncmp(this_opt, "maxvf:", 6))
-+ maxvf = simple_strtoul(this_opt + 6, NULL, 0);
-+ else if (! strncmp(this_opt, "maxclk:", 7))
-+ maxclk = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (! strncmp(this_opt, "vbemode:", 8))
-+ vbemode = simple_strtoul(this_opt + 8, NULL,0);
-+ else if (this_opt[0] >= '0' && this_opt[0] <= '9') {
-+ DPRINTK("mode_option: %s\n",this_opt);
-+ mode_option = this_opt;
-+ } else {
-+ printk(KERN_WARNING
-+ "vesafb: unrecognized option %s\n", this_opt);
-+ }
-+ }
-+
-+ return 0;
-+}
-+#endif /* !MODULE */
-+
-+static int vesafb_read_proc_modes(char *buf, char **start, off_t offset,
-+ int len, int *eof, void *private)
-+{
-+ int clen = 0, i;
-+
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ clen += min(snprintf(buf + clen, len - clen, "%dx%d-%d\n", vbe_modes[i].x_res,
-+ vbe_modes[i].y_res, vbe_modes[i].depth), len - clen);
-+ }
-+ *eof = 1;
-+ return clen;
-+}
-+
-+static int vesafb_read_proc_vbe_info(char *buf, char **start, off_t offset,
-+ int len, int *eof, void *private)
-+{
-+ int clen = 0;
-+
-+ clen += min(snprintf(buf + clen, len, "Version: %d.%d\n",
-+ ((vbe_ib.vbe_version & 0xff00) >> 8),
-+ vbe_ib.vbe_version & 0xff), len);
-+ clen += min(snprintf(buf + clen, len - clen, "Vendor: %s\n",
-+ (char*)vbe_ib.oem_vendor_name_ptr), len - clen);
-+ clen += min(snprintf(buf + clen, len - clen, "Product: %s\n",
-+ (char*)vbe_ib.oem_product_name_ptr), len - clen);
-+ clen += min(snprintf(buf + clen, len - clen, "OEM rev: %s\n",
-+ (char*)vbe_ib.oem_product_rev_ptr), len - clen);
-+ clen += min(snprintf(buf + clen, len - clen, "OEM string: %s\n",
-+ (char*)vbe_ib.oem_string_ptr), len - clen);
-+
-+ *eof = 1;
-+ return clen;
-+}
-+
-+static int __init inline vesafb_vbe_getinfo(struct vesafb_task *tsk)
-+{
-+ tsk->regs.eax = 0x4f00;
-+ tsk->flags = TF_CALL | TF_GETVBEIB;
-+ tsk->buf = &vbe_ib;
-+ tsk->buf_len = sizeof(vbe_ib);
-+ if (vesafb_queue_task (tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if (vbe_ib.vbe_version < 0x0200) {
-+ printk(KERN_ERR "vesafb: Sorry, pre-VBE 2.0 cards are "
-+ "not supported.\n");
-+ return -EINVAL;
-+ }
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_ERR "vesafb: Getting mode info block failed "
-+ "(eax=0x%x)\n", (u32)tsk->regs.eax);
-+ return -EINVAL;
-+ }
-+
-+ printk(KERN_INFO "vesafb: %s, %s, %s (OEM: %s)\n",
-+ (char*)vbe_ib.oem_vendor_name_ptr,
-+ (char*)vbe_ib.oem_product_name_ptr,
-+ (char*)vbe_ib.oem_product_rev_ptr,
-+ (char*)vbe_ib.oem_string_ptr);
-+
-+ printk(KERN_INFO "vesafb: VBE version: %d.%d\n",
-+ ((vbe_ib.vbe_version & 0xff00) >> 8),
-+ vbe_ib.vbe_version & 0xff);
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getmodes(struct vesafb_task *tsk)
-+{
-+ u16 *mode = 0;
-+ int off = 0;
-+
-+ /* Count available modes. */
-+ mode = (u16*)vbe_ib.mode_list_ptr;
-+ while (*mode != 0xffff) {
-+ vbe_modes_cnt++;
-+ mode++;
-+ }
-+
-+ vbe_modes = kmalloc(sizeof(struct vesafb_mode_ib)*
-+ vbe_modes_cnt, GFP_KERNEL);
-+ if (!vbe_modes)
-+ return -ENOMEM;
-+
-+ /* Get mode info for all available modes. */
-+ mode = (u16*)vbe_ib.mode_list_ptr;
-+
-+ while (*mode != 0xffff) {
-+ struct vesafb_mode_ib *mib;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f01;
-+ tsk->regs.ecx = (u32) *mode;
-+ tsk->flags = TF_CALL | TF_RETURN_BUF | TF_BUF_DI;
-+ tsk->buf = vbe_modes+off;
-+ tsk->buf_len = sizeof(struct vesafb_mode_ib);
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+ mib = p_mode(tsk->buf);
-+ mib->mode_id = *mode;
-+
-+ /* We only want modes that are supported with the currennt
-+ * hardware configuration (D0), color (D3), graphics (D4)
-+ * and that have support for the LFB (D7). */
-+ if ((mib->mode_attr & 0x99) == 0x99 &&
-+ mib->bits_per_pixel >= 8) {
-+ off++;
-+ } else {
-+ vbe_modes_cnt--;
-+ }
-+ mode++;
-+ mib->depth = mib->red_len + mib->green_len + mib->blue_len;
-+ /* Handle 8bpp modes and modes with broken color component
-+ * lengths. */
-+ if (mib->depth == 0 ||
-+ (mib->depth == 24 && mib->bits_per_pixel == 32))
-+ mib->depth = mib->bits_per_pixel;
-+ }
-+
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getpmi(struct vesafb_task *tsk)
-+{
-+ int i;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f0a;
-+ tsk->regs.ebx = 0x0;
-+ tsk->flags = TF_CALL;
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f || tsk->regs.es < 0xc000) {
-+ pmi_setpal = ypan = 0;
-+ } else {
-+ pmi_base = (u16*)phys_to_virt(((u32)tsk->regs.es << 4) +
-+ tsk->regs.edi);
-+ pmi_start = (void*)((char*)pmi_base + pmi_base[1]);
-+ pmi_pal = (void*)((char*)pmi_base + pmi_base[2]);
-+ printk(KERN_INFO "vesafb: protected mode interface info at "
-+ "%04x:%04x\n",
-+ (u16)tsk->regs.es, (u16)tsk->regs.edi);
-+ printk(KERN_INFO "vesafb: pmi: set display start = %p, "
-+ "set palette = %p\n", pmi_start, pmi_pal);
-+
-+ if (pmi_base[3]) {
-+ printk(KERN_INFO "vesafb: pmi: ports = ");
-+ for (i = pmi_base[3]/2; pmi_base[i] != 0xffff; i++)
-+ printk("%x ",pmi_base[i]);
-+ printk("\n");
-+
-+ /*
-+ * memory areas not supported (yet?)
-+ *
-+ * Rules are: we have to set up a descriptor for the
-+ * requested memory area and pass it in the ES register
-+ * to the BIOS function.
-+ */
-+ if (pmi_base[i] != 0xffff) {
-+ printk(KERN_INFO "vesafb: can't handle memory "
-+ "requests, pmi disabled\n");
-+ ypan = pmi_setpal = 0;
-+ }
-+ }
-+ }
-+ return 0;
-+}
-+
-+static int __init inline vesafb_vbe_getedid(struct vesafb_task *tsk,
-+ struct fb_info *info)
-+{
-+ int res = 0;
-+
-+ if (noedid || vbe_ib.vbe_version < 0x0300)
-+ return -EINVAL;
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f15;
-+ tsk->regs.ebx = 0;
-+ tsk->regs.ecx = 0;
-+ if (vesafb_queue_task(tsk))
-+ return -EINVAL;
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) != 0x004f)
-+ return -EINVAL;
-+
-+ if ((tsk->regs.ebx & 0x3) == 3) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports both "
-+ "DDC1 and DDC2 transfers\n");
-+ } else if ((tsk->regs.ebx & 0x3) == 2) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports DDC2 "
-+ "transfers\n");
-+ } else if ((tsk->regs.ebx & 0x3) == 1) {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware supports DDC1 "
-+ "transfers\n");
-+ } else {
-+ printk(KERN_INFO "vesafb: VBIOS/hardware doesn't support "
-+ "DDC transfers\n");
-+ return -EINVAL;
-+ }
-+
-+ vesafb_reset_task(tsk);
-+ tsk->regs.eax = 0x4f15;
-+ tsk->regs.ebx = 1;
-+ tsk->regs.ecx = tsk->regs.edx = 0;
-+ tsk->flags = TF_CALL | TF_RETURN_BUF | TF_BUF_DI;
-+ tsk->buf = kmalloc(EDID_LENGTH, GFP_KERNEL);
-+ tsk->buf_len = EDID_LENGTH;
-+
-+ if (vesafb_queue_task(tsk)) {
-+ res = -EINVAL;
-+ goto out;
-+ }
-+ vesafb_wait_for_task(tsk);
-+
-+ if ((tsk->regs.eax & 0xffff) == 0x004f) {
-+ fb_edid_to_monspecs(tsk->buf, &info->monspecs);
-+ fb_videomode_to_modelist(info->monspecs.modedb,
-+ info->monspecs.modedb_len, &info->modelist);
-+ if (info->monspecs.vfmax && info->monspecs.hfmax) {
-+ /* If the maximum pixel clock wasn't specified in
-+ * the EDID block, set it to 300 MHz. */
-+ if (info->monspecs.dclkmax == 0)
-+ info->monspecs.dclkmax = 300 * 1000000;
-+ info->monspecs.gtf = 1;
-+ } else {
-+ res = -EINVAL;
-+ }
-+ }
-+
-+out: kfree(tsk->buf);
-+ return res;
-+}
-+
-+static void __init inline vesafb_vbe_getmonspecs(struct vesafb_task *tsk,
-+ struct fb_info *info)
-+{
-+ struct fb_var_screeninfo var;
-+ int i;
-+ memset(&info->monspecs, 0, sizeof(struct fb_monspecs));
-+
-+ /* If we didn't get all necessary data from the EDID block,
-+ * mark it as incompatible with the GTF. */
-+ if (vesafb_vbe_getedid(tsk, info))
-+ info->monspecs.gtf = 0;
-+
-+ /* Kernel command line overrides. */
-+ if (maxclk)
-+ info->monspecs.dclkmax = maxclk * 1000000;
-+ if (maxvf)
-+ info->monspecs.vfmax = maxvf;
-+ if (maxhf)
-+ info->monspecs.hfmax = maxhf * 1000;
-+
-+ /* In case DDC transfers are not supported the user can provide
-+ * monitor limits manually. Lower limits are set to "safe" values. */
-+ if (info->monspecs.gtf == 0 && maxclk && maxvf && maxhf) {
-+ info->monspecs.dclkmin = 0;
-+ info->monspecs.vfmin = 60;
-+ info->monspecs.hfmin = 29000;
-+ info->monspecs.gtf = 1;
-+ }
-+
-+ if (info->monspecs.gtf) {
-+ printk(KERN_INFO
-+ "vesafb: monitor limits: vf = %d Hz, hf = %d kHz, "
-+ "clk = %d MHz\n", info->monspecs.vfmax,
-+ (int)(info->monspecs.hfmax / 1000),
-+ (int)(info->monspecs.dclkmax / 1000000));
-+ /* Add valid VESA video modes to our modelist. */
-+ for (i = 0; i < VESA_MODEDB_SIZE; i++) {
-+ fb_videomode_to_var(&var, (struct fb_videomode *)
-+ &vesa_modes[i]);
-+ if (!fb_validate_mode(&var, info))
-+ fb_add_videomode((struct fb_videomode *)
-+ &vesa_modes[i],
-+ &info->modelist);
-+ }
-+ } else {
-+ /* Add all VESA video modes to our modelist. */
-+ fb_videomode_to_modelist((struct fb_videomode *)vesa_modes,
-+ VESA_MODEDB_SIZE, &info->modelist);
-+ printk(KERN_INFO "vesafb: no monitor limits have been set\n");
-+ }
-+ return;
-+}
-+
-+static int __init inline vesafb_vbe_init(struct fb_info *info)
-+{
-+ struct vesafb_task *tsk;
-+ int res = 0;
-+
-+ vesafb_create_task(tsk);
-+ if (!tsk)
-+ return -EINVAL;
-+ if ((res = vesafb_vbe_getinfo(tsk)) != 0)
-+ goto out;
-+ if ((res = vesafb_vbe_getmodes(tsk)) != 0)
-+ goto out;
-+ if (pmi_setpal || ypan)
-+ vesafb_vbe_getpmi(tsk);
-+
-+ INIT_LIST_HEAD(&info->modelist);
-+ vesafb_vbe_getmonspecs(tsk, info);
-+
-+out: kfree(tsk);
-+ return res;
-+}
-+
-+static int __init decode_mode(u32 *xres, u32 *yres, u32 *bpp, u32 *refresh)
-+{
-+ int len = strlen(mode_option), i, err = 0;
-+ u8 res_specified = 0, bpp_specified = 0, refresh_specified = 0,
-+ yres_specified = 0;
-+
-+ for (i = len-1; i >= 0; i--) {
-+ switch (mode_option[i]) {
-+ case '@':
-+ len = i;
-+ if (!refresh_specified && !bpp_specified &&
-+ !yres_specified) {
-+ *refresh = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ refresh_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case '-':
-+ len = i;
-+ if (!bpp_specified && !yres_specified) {
-+ *bpp = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ bpp_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case 'x':
-+ if (!yres_specified) {
-+ *yres = simple_strtoul(&mode_option[i+1],
-+ NULL, 0);
-+ yres_specified = 1;
-+ } else
-+ goto out;
-+ break;
-+ case '0'...'9':
-+ break;
-+ default:
-+ goto out;
-+ }
-+ }
-+
-+ if (i < 0 && yres_specified) {
-+ *xres = simple_strtoul(mode_option, NULL, 0);
-+ res_specified = 1;
-+ }
-+
-+out: if (!res_specified || !yres_specified) {
-+ printk(KERN_ERR "vesafb: invalid resolution, "
-+ "%s not specified\n",
-+ (!res_specified) ? "width" : "height");
-+ err = -EINVAL;
-+ }
-+
-+ return err;
-+}
-+
-+static int __init vesafb_init_set_mode(struct fb_info *info)
-+{
-+ struct fb_videomode *fbmode;
-+ struct fb_videomode mode;
-+ int i, modeid, refresh = 0;
-+ u8 refresh_specified = 0;
-+
-+ if (!mode_option)
-+ mode_option = CONFIG_FB_VESA_DEFAULT_MODE;
-+
-+ if (vbemode > 0) {
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ if (vbe_modes[i].mode_id == vbemode) {
-+ info->var.vmode = FB_VMODE_NONINTERLACED;
-+ info->var.sync = FB_SYNC_VERT_HIGH_ACT;
-+ vesafb_setup_var(&info->var, info,
-+ &vbe_modes[i]);
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON,
-+ 60, &info->var, info);
-+ /* With pixclock set to 0, the default BIOS
-+ * timings will be used in set_par(). */
-+ info->var.pixclock = 0;
-+ modeid = i;
-+ goto out;
-+ }
-+ }
-+ printk(KERN_INFO "specified VBE mode %d not found\n",
-+ vbemode);
-+ vbemode = 0;
-+ }
-+
-+ /* Decode the mode specified on the kernel command line. We save
-+ * the depth into bits_per_pixel, which is wrong, but will work
-+ * anyway. */
-+ if (decode_mode(&info->var.xres, &info->var.yres,
-+ &info->var.bits_per_pixel, &refresh))
-+ return -EINVAL;
-+ if (refresh)
-+ refresh_specified = 1;
-+ else
-+ refresh = 60;
-+
-+ /* Look for a matching VBE mode. We can live if an exact match
-+ * cannot be found. */
-+ modeid = vesafb_find_vbe_mode(info->var.xres, info->var.yres,
-+ info->var.bits_per_pixel, 0);
-+
-+ if (modeid == -1) {
-+ return -EINVAL;
-+ } else {
-+ info->var.vmode = FB_VMODE_NONINTERLACED;
-+ info->var.sync = FB_SYNC_VERT_HIGH_ACT;
-+ vesafb_setup_var(&info->var, info, &vbe_modes[modeid]);
-+ }
-+ if (vbe_ib.vbe_version < 0x0300) {
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60,
-+ &info->var, info);
-+ goto out;
-+ }
-+ if (!gtf) {
-+ struct fb_videomode tmode;
-+
-+ if (refresh_specified) {
-+ fb_var_to_videomode(&tmode, &info->var);
-+ tmode.refresh = refresh;
-+ fbmode = fb_find_nearest_mode(&tmode,
-+ &info->modelist);
-+ } else
-+ fbmode = fb_find_best_mode(&info->var,
-+ &info->modelist);
-+
-+ if (fbmode->xres == info->var.xres &&
-+ fbmode->yres == info->var.yres &&
-+ !(fbmode->vmode & (FB_VMODE_INTERLACED | FB_VMODE_DOUBLE))
-+ && (!refresh_specified ||
-+ abs(refresh - fbmode->refresh) <= 5)) {
-+ fb_videomode_to_var(&info->var, fbmode);
-+ return modeid;
-+ }
-+ }
-+ i = FB_MAXTIMINGS;
-+ if (!info->monspecs.gtf)
-+ i = FB_IGNOREMON | FB_VSYNCTIMINGS;
-+ else if (refresh_specified)
-+ i = FB_VSYNCTIMINGS;
-+ if (!fb_get_mode(i, refresh, &info->var, info))
-+ goto out;
-+ if (info->monspecs.gtf &&
-+ !fb_get_mode(FB_MAXTIMINGS, 0, &info->var, info))
-+ goto out;
-+ /* Use default refresh rate */
-+ printk(KERN_WARNING "vesafb: using default BIOS refresh rate\n");
-+ info->var.pixclock = 0;
-+
-+out:
-+ fb_var_to_videomode(&mode, &info->var);
-+ fb_add_videomode(&mode, &info->modelist);
-+ return modeid;
-+}
-+
-+static int __init vesafb_probe(struct platform_device *dev)
-+{
-+ char entry[16];
-+ struct fb_info *info;
-+ struct vesafb_mode_ib *mode = NULL;
-+ int err = 0, i, h;
-+ unsigned int size_vmode;
-+ unsigned int size_remap;
-+ unsigned int size_total;
-+
-+ vesafb_info = info = framebuffer_alloc(sizeof(struct vesafb_par) +
-+ sizeof(u32) * 256, &dev->dev);
-+ if (!info)
-+ return -ENOMEM;
-+
-+ if (vesafb_wait_for_thread()) {
-+ printk(KERN_ERR "vesafb: vesafb thread not running\n");
-+ framebuffer_release(info);
-+ return -EINVAL;
-+ }
-+
-+ if (vesafb_vbe_init(info)) {
-+ printk(KERN_ERR "vesafb: vbe_init failed\n");
-+ err = -EINVAL;
-+ goto out;
-+ }
-+
-+ vesafb_fix.ypanstep = ypan ? 1 : 0;
-+ vesafb_fix.ywrapstep = (ypan>1) ? 1 : 0;
-+
-+ info->pseudo_palette = ((u8*)info->par + sizeof(struct vesafb_par));
-+ info->fbops = &vesafb_ops;
-+ info->var = vesafb_defined;
-+ info->fix = vesafb_fix;
-+
-+ if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
-+ err = -ENXIO;
-+ goto out;
-+ }
-+
-+ i = vesafb_init_set_mode(info);
-+ if (i < 0) {
-+ err = -EINVAL;
-+ goto out_cmap;
-+ } else
-+ mode = &vbe_modes[i];
-+
-+ /* Disable blanking if the user requested so. */
-+ if (!blank) {
-+ info->fbops->fb_blank = NULL;
-+ }
-+
-+ /* Find out how much IO memory is required for the mode with
-+ * the highest resolution. */
-+ size_remap = 0;
-+ for (i = 0; i < vbe_modes_cnt; i++) {
-+ h = vbe_modes[i].bytes_per_scan_line * vbe_modes[i].y_res;
-+ if (h > size_remap)
-+ size_remap = h;
-+ }
-+ size_remap *= 2;
-+
-+ /* size_vmode -- that is the amount of memory needed for the
-+ * used video mode, i.e. the minimum amount of
-+ * memory we need. */
-+ if (mode != NULL) {
-+ size_vmode = info->var.yres * mode->bytes_per_scan_line;
-+ } else {
-+ size_vmode = info->var.yres * info->var.xres *
-+ ((info->var.bits_per_pixel + 7) >> 3);
-+ }
-+
-+ /* size_total -- all video memory we have. Used for mtrr
-+ * entries, ressource allocation and bounds
-+ * checking. */
-+ size_total = vbe_ib.total_memory * 65536;
-+ if (vram_total)
-+ size_total = vram_total * 1024 * 1024;
-+ if (size_total < size_vmode)
-+ size_total = size_vmode;
-+ ((struct vesafb_par*)(info->par))->mem_total = size_total;
-+
-+ /* size_remap -- the amount of video memory we are going to
-+ * use for vesafb. With modern cards it is no
-+ * option to simply use size_total as th
-+ * wastes plenty of kernel address space. */
-+ if (vram_remap)
-+ size_remap = vram_remap * 1024 * 1024;
-+ if (size_remap < size_vmode)
-+ size_remap = size_vmode;
-+ if (size_remap > size_total)
-+ size_remap = size_total;
-+
-+ info->fix.smem_len = size_remap;
-+ info->fix.smem_start = mode->phys_base_ptr;
-+
-+ /* We have to set it here, because when setup_var() was called,
-+ * smem_len wasn't defined yet. */
-+ info->var.yres_virtual = info->fix.smem_len /
-+ mode->bytes_per_scan_line;
-+
-+ if (ypan && info->var.yres_virtual > info->var.yres) {
-+ printk(KERN_INFO "vesafb: scrolling: %s "
-+ "using protected mode interface, "
-+ "yres_virtual=%d\n",
-+ (ypan > 1) ? "ywrap" : "ypan",info->var.yres_virtual);
-+ } else {
-+ printk(KERN_INFO "vesafb: scrolling: redraw\n");
-+ info->var.yres_virtual = info->var.yres;
-+ ypan = 0;
-+ }
-+
-+ info->flags = FBINFO_FLAG_DEFAULT |
-+ (ypan) ? FBINFO_HWACCEL_YPAN : 0;
-+
-+ if (!ypan)
-+ info->fbops->fb_pan_display = NULL;
-+
-+ if (!request_mem_region(info->fix.smem_start, size_total, "vesafb")) {
-+ printk(KERN_WARNING "vesafb: cannot reserve video memory at "
-+ "0x%lx\n", info->fix.smem_start);
-+ /* We cannot make this fatal. Sometimes this comes from magic
-+ spaces our resource handlers simply don't know about. */
-+ }
-+
-+ info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len);
-+
-+ if (!info->screen_base) {
-+ printk(KERN_ERR
-+ "vesafb: abort, cannot ioremap video memory "
-+ "0x%x @ 0x%lx\n",
-+ info->fix.smem_len, info->fix.smem_start);
-+ err = -EIO;
-+ goto out_mem;
-+ }
-+
-+ /* Request failure does not faze us, as vgacon probably has this
-+ region already (FIXME) */
-+ request_region(0x3c0, 32, "vesafb");
-+
-+#ifdef CONFIG_MTRR
-+ if (mtrr && !(info->fix.smem_start & (PAGE_SIZE - 1))) {
-+ int temp_size = size_total;
-+ unsigned int type = 0;
-+
-+ switch (mtrr) {
-+ case 1:
-+ type = MTRR_TYPE_UNCACHABLE;
-+ break;
-+ case 2:
-+ type = MTRR_TYPE_WRBACK;
-+ break;
-+ case 3:
-+ type = MTRR_TYPE_WRCOMB;
-+ break;
-+ case 4:
-+ type = MTRR_TYPE_WRTHROUGH;
-+ break;
-+ default:
-+ type = 0;
-+ break;
-+ }
-+
-+ if (type) {
-+ int rc;
-+
-+ /* Find the largest power-of-two */
-+ while (temp_size & (temp_size - 1))
-+ temp_size &= (temp_size - 1);
-+
-+ /* Try and find a power of two to add */
-+ do {
-+ rc = mtrr_add(info->fix.smem_start,
-+ temp_size, type, 1);
-+ temp_size >>= 1;
-+ } while (temp_size >= PAGE_SIZE && rc == -EINVAL);
-+ }
-+ }
-+#endif /* CONFIG_MTRR */
-+
-+ if (register_framebuffer(info) < 0) {
-+ printk(KERN_ERR
-+ "vesafb: failed to register framebuffer device\n");
-+ err = -EINVAL;
-+ goto out_mem;
-+ }
-+
-+ printk(KERN_INFO "vesafb: framebuffer at 0x%lx, mapped to 0x%p, "
-+ "using %dk, total %dk\n", info->fix.smem_start,
-+ info->screen_base, size_remap/1024, size_total/1024);
-+ printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node,
-+ info->fix.id);
-+
-+ sprintf(entry, "fb%d", info->node);
-+ proc_mkdir(entry, 0);
-+
-+ sprintf(entry, "fb%d/modes", info->node);
-+ create_proc_read_entry(entry, 0, 0, vesafb_read_proc_modes, NULL);
-+
-+ sprintf(entry, "fb%d/vbe_info", info->node);
-+ create_proc_read_entry(entry, 0, 0, vesafb_read_proc_vbe_info, NULL);
-+ return 0;
-+
-+out_mem:
-+ release_mem_region(info->fix.smem_start, size_total);
-+ if (!list_empty(&info->modelist))
-+ fb_destroy_modelist(&info->modelist);
-+ fb_destroy_modedb(info->monspecs.modedb);
-+out_cmap:
-+ fb_dealloc_cmap(&info->cmap);
-+out:
-+ framebuffer_release(info);
-+ vesafb_info = NULL;
-+ kfree(vbe_modes);
-+ vbe_modes = NULL;
-+ return err;
-+}
-+
-+int __init vesafb_init(void)
-+{
-+ int ret;
-+#ifndef MODULE
-+ char *option = NULL;
-+
-+ if (fb_get_options("vesafb", &option))
-+ return -ENODEV;
-+ vesafb_setup(option);
-+#endif
-+ ret = platform_driver_register(&vesafb_driver);
-+
-+ if (!ret) {
-+ vesafb_device = platform_device_alloc("vesafb", 0);
-+
-+ if (vesafb_device)
-+ ret = platform_device_add(vesafb_device);
-+ else
-+ ret = -ENOMEM;
-+
-+ if (ret) {
-+ platform_device_put(vesafb_device);
-+ platform_driver_unregister(&vesafb_driver);
-+ }
-+ }
-+ return ret;
-+}
-+
-+module_init(vesafb_init);
-+
-+#ifdef MODULE
-+void __exit vesafb_exit(void)
-+{
-+ char entry[16];
-+
-+ if (vesafb_info)
-+ unregister_framebuffer(vesafb_info);
-+
-+ platform_device_unregister(vesafb_device);
-+ platform_driver_unregister(&vesafb_driver);
-+
-+ if (vesafb_info) {
-+ struct vesafb_par *par = (struct vesafb_par*)vesafb_info->par;
-+
-+ sprintf(entry, "fb%d/modes", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ sprintf(entry, "fb%d/vbe_info", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ sprintf(entry, "fb%d", vesafb_info->node);
-+ remove_proc_entry(entry, NULL);
-+
-+ iounmap(vesafb_info->screen_base);
-+ release_mem_region(vesafb_info->fix.smem_start,
-+ par->mem_total);
-+ fb_dealloc_cmap(&vesafb_info->cmap);
-+ if (!list_empty(&vesafb_info->modelist))
-+ fb_destroy_modelist(&vesafb_info->modelist);
-+ fb_destroy_modedb(vesafb_info->monspecs.modedb);
-+ framebuffer_release(vesafb_info);
-+ }
-+
-+ if (vbe_modes != NULL)
-+ kfree(vbe_modes);
-+}
-+
-+module_exit(vesafb_exit);
-+
-+static inline int param_get_scroll(char *buffer, struct kernel_param *kp)
-+{
-+ return 0;
-+}
-+static inline int param_set_scroll(const char *val, struct kernel_param *kp)
-+{
-+ ypan = 0;
-+
-+ if (! strcmp(val, "redraw"))
-+ ypan = 0;
-+ else if (! strcmp(val, "ypan"))
-+ ypan = 1;
-+ else if (! strcmp(val, "ywrap"))
-+ ypan = 2;
-+
-+ return 0;
-+}
-+
-+#define param_check_scroll(name, p) __param_check(name, p, void);
-+
-+module_param_named(scroll, ypan, scroll, 0);
-+MODULE_PARM_DESC(scroll,"Scrolling mode, set to 'redraw', 'ypan' or 'ywrap'");
-+module_param_named(vgapal, pmi_setpal, invbool, 0);
-+MODULE_PARM_DESC(vgapal,"bool: set palette using VGA registers");
-+module_param_named(pmipal, pmi_setpal, bool, 0);
-+MODULE_PARM_DESC(pmipal,"bool: set palette using PMI calls");
-+module_param(mtrr, uint, 0);
-+MODULE_PARM_DESC(mtrr,"Memory Type Range Registers setting. Use 0 to disable.");
-+module_param(blank, bool, 1);
-+MODULE_PARM_DESC(blank,"bool: enable hardware blanking");
-+module_param(nocrtc, bool, 0);
-+MODULE_PARM_DESC(nocrtc,"bool: ignore CRTC timings when setting modes");
-+module_param(noedid, bool, 0);
-+MODULE_PARM_DESC(noedid,"bool: ignore EDID-provided monitor limits "
-+ "when setting modes");
-+module_param(gtf, bool, 0);
-+MODULE_PARM_DESC(gtf,"bool: force use of VESA GTF to calculate mode timings");
-+module_param(vram_remap, uint, 0);
-+MODULE_PARM_DESC(vram_remap,"Set amount of video memory to be used [MiB]");
-+module_param(vram_total, uint, 0);
-+MODULE_PARM_DESC(vram_total,"Set total amount of video memoery [MiB]");
-+module_param(maxclk, ushort, 0);
-+MODULE_PARM_DESC(maxclk,"Maximum pixelclock [MHz], overrides EDID data");
-+module_param(maxhf, ushort, 0);
-+MODULE_PARM_DESC(maxhf,"Maximum horizontal frequency [kHz], "
-+ "overrides EDID data");
-+module_param(maxvf, ushort, 0);
-+MODULE_PARM_DESC(maxvf,"Maximum vertical frequency [Hz], "
-+ "overrides EDID data");
-+module_param_named(mode, mode_option, charp, 0);
-+MODULE_PARM_DESC(mode, "Specify resolution as "
-+ "\"<xres>x<yres>[-<bpp>][@<refresh>]\"");
-+module_param(vbemode, ushort, 0);
-+MODULE_PARM_DESC(vbemode,"VBE mode number to set, overrides 'mode' setting");
-+
-+#endif /* MODULE */
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Michal Januszewski");
-+MODULE_DESCRIPTION("Framebuffer driver for VBE2.0+ compliant graphics boards");
-+
-diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 4463735..7283e48 100644
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -1390,6 +1390,8 @@ extern void mmput(struct mm_struct *);
- extern struct mm_struct *get_task_mm(struct task_struct *task);
- /* Remove the current tasks stale references to the old mm_struct */
- extern void mm_release(struct task_struct *, struct mm_struct *);
-+/* Create a new mm for a kernel thread */
-+extern int set_new_mm(void);
-
- extern int copy_thread(int, unsigned long, unsigned long, unsigned long, struct task_struct *, struct pt_regs *);
- extern void flush_thread(void);
-diff --git a/include/video/vesa.h b/include/video/vesa.h
-new file mode 100644
-index 0000000..bb5abcf
---- /dev/null
-+++ b/include/video/vesa.h
-@@ -0,0 +1,150 @@
-+#if 0
-+#define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , \
-+ ## args)
-+#else
-+#define DPRINTK(fmt, args...)
-+#endif
-+
-+#define p_crtc(arg) ((struct vesafb_crtc_ib*)(arg))
-+#define p_vbe(arg) ((struct vesafb_vbe_ib*)(arg))
-+#define p_mode(arg) ((struct vesafb_mode_ib*)(arg))
-+
-+struct vesafb_task {
-+ u8 flags;
-+ void *buf;
-+ int buf_len;
-+ struct vm86_regs regs;
-+ struct list_head node;
-+ struct completion done;
-+};
-+
-+/* Vesafb task flags and masks */
-+#define TF_CALL 0x00
-+#define TF_EXIT 0x01
-+#define TF_GETVBEIB 0x02
-+#define TF_BUF_DI 0x04
-+#define TF_BUF_BX 0x08
-+#define TF_RETURN_BUF 0x10
-+
-+/* Macros and functions for manipulating vesafb tasks */
-+#define vesafb_create_task(task) \
-+do { \
-+ task = kmalloc(sizeof(struct vesafb_task), GFP_ATOMIC); \
-+ if (task) \
-+ memset(task, 0, sizeof(struct vesafb_task)); \
-+ init_completion(&task->done); \
-+} while (0)
-+
-+#define vesafb_wait_for_task(task) wait_for_completion(&task->done);
-+#define vesafb_reset_task(task) init_completion(&task->done);
-+int vesafb_queue_task(struct vesafb_task *task);
-+
-+/* Functions for controlling the vesafb thread */
-+int vesafb_wait_for_thread(void);
-+
-+#define VBE_CAP_CAN_SWITCH_DAC 0x01
-+#define VBE_CAP_VGACOMPAT 0x02
-+
-+/* This struct is 512 bytes long */
-+struct vesafb_vbe_ib {
-+ char vbe_signature[4];
-+ u16 vbe_version;
-+ u32 oem_string_ptr;
-+ u32 capabilities;
-+ u32 mode_list_ptr;
-+ u16 total_memory;
-+ u16 oem_software_rev;
-+ u32 oem_vendor_name_ptr;
-+ u32 oem_product_name_ptr;
-+ u32 oem_product_rev_ptr;
-+ u8 reserved[222];
-+ char oem_data[256];
-+} __attribute__ ((packed));
-+
-+struct vesafb_crtc_ib {
-+ u16 horiz_total;
-+ u16 horiz_start;
-+ u16 horiz_end;
-+ u16 vert_total;
-+ u16 vert_start;
-+ u16 vert_end;
-+ u8 flags;
-+ u32 pixel_clock;
-+ u16 refresh_rate;
-+ u8 reserved[40];
-+} __attribute__ ((packed));
-+
-+#define VBE_MODE_VGACOMPAT 0x20
-+
-+struct vesafb_mode_ib {
-+ /* for all VBE revisions */
-+ u16 mode_attr;
-+ u8 winA_attr;
-+ u8 winB_attr;
-+ u16 win_granularity;
-+ u16 win_size;
-+ u16 winA_seg;
-+ u16 winB_seg;
-+ u32 win_func_ptr;
-+ u16 bytes_per_scan_line;
-+
-+ /* for VBE 1.2+ */
-+ u16 x_res;
-+ u16 y_res;
-+ u8 x_char_size;
-+ u8 y_char_size;
-+ u8 planes;
-+ u8 bits_per_pixel;
-+ u8 banks;
-+ u8 memory_model;
-+ u8 bank_size;
-+ u8 image_pages;
-+ u8 reserved1;
-+
-+ /* Direct color fields for direct/6 and YUV/7 memory models. */
-+ /* Offsets are bit positions of lsb in the mask. */
-+ u8 red_len;
-+ u8 red_off;
-+ u8 green_len;
-+ u8 green_off;
-+ u8 blue_len;
-+ u8 blue_off;
-+ u8 rsvd_len;
-+ u8 rsvd_off;
-+ u8 direct_color_info; /* direct color mode attributes */
-+
-+ /* for VBE 2.0+ */
-+ u32 phys_base_ptr;
-+ u8 reserved2[6];
-+
-+ /* for VBE 3.0+ */
-+ u16 lin_bytes_per_scan_line;
-+ u8 bnk_image_pages;
-+ u8 lin_image_pages;
-+ u8 lin_red_len;
-+ u8 lin_red_off;
-+ u8 lin_green_len;
-+ u8 lin_green_off;
-+ u8 lin_blue_len;
-+ u8 lin_blue_off;
-+ u8 lin_rsvd_len;
-+ u8 lin_rsvd_off;
-+ u32 max_pixel_clock;
-+ u16 mode_id;
-+ u8 depth;
-+} __attribute__ ((packed));
-+
-+struct vesafb_pal_entry {
-+ u_char blue, green, red, pad;
-+} __attribute__ ((packed));
-+
-+struct vesafb_par {
-+ u8 *vbe_state;
-+ int vbe_state_size;
-+ atomic_t ref_count;
-+
-+ u32 mem_total;
-+ int mode_idx;
-+ struct vesafb_crtc_ib crtc;
-+};
-+
-diff --git a/kernel/fork.c b/kernel/fork.c
-index fc723e5..dc8f93b 100644
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -100,6 +100,7 @@ struct kmem_cache *fs_cachep;
-
- /* SLAB cache for vm_area_struct structures */
- struct kmem_cache *vm_area_cachep;
-+EXPORT_SYMBOL_GPL(vm_area_cachep);
-
- /* SLAB cache for mm_struct structures (tsk->mm) */
- static struct kmem_cache *mm_cachep;
-@@ -399,6 +400,40 @@ void mmput(struct mm_struct *mm)
- EXPORT_SYMBOL_GPL(mmput);
-
- /**
-+ * set_new_mm - allocate, init and activate a new mm for a kernel thread
-+ */
-+int set_new_mm(void)
-+{
-+ struct mm_struct *mm;
-+ struct task_struct *tsk = current;
-+ struct mm_struct *active_mm;
-+
-+ mm = mm_alloc();
-+ if (!mm)
-+ goto fail_nomem;
-+ if (init_new_context(current,mm))
-+ goto fail_nocontext;
-+
-+ task_lock(tsk);
-+ tsk->flags |= PF_BORROWED_MM;
-+ active_mm = tsk->active_mm;
-+ current->mm = mm;
-+ current->active_mm = mm;
-+ activate_mm(active_mm, mm);
-+ task_unlock(current);
-+
-+ /* Drop the previous active_mm */
-+ mmdrop(active_mm);
-+ return 0;
-+
-+fail_nocontext:
-+ mmdrop(mm);
-+fail_nomem:
-+ return -EINVAL;
-+}
-+EXPORT_SYMBOL_GPL(set_new_mm);
-+
-+/**
- * get_task_mm - acquire a reference to the task's mm
- *
- * Returns %NULL if the task has no mm. Checks PF_BORROWED_MM (meaning
-diff --git a/mm/memory.c b/mm/memory.c
-index 563792f..a9519ea 100644
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -1193,6 +1193,7 @@ int zeromap_page_range(struct vm_area_struct *vma,
- } while (pgd++, addr = next, addr != end);
- return err;
- }
-+EXPORT_SYMBOL_GPL(zeromap_page_range);
-
- pte_t * fastcall get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl)
- {
-diff --git a/mm/mmap.c b/mm/mmap.c
-index 9717337..6fa5b1c 100644
---- a/mm/mmap.c
-+++ b/mm/mmap.c
-@@ -2024,6 +2024,7 @@ int insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma)
- vma_link(mm, vma, prev, rb_link, rb_parent);
- return 0;
- }
-+EXPORT_SYMBOL_GPL(insert_vm_struct);
-
- /*
- * Copy the vma structure to a new location in the same mm,
diff --git a/packages/linux/linux-rp-2.6.22/wm9712-reset-loop-r2.patch b/packages/linux/linux-rp-2.6.22/wm9712-reset-loop-r2.patch
deleted file mode 100644
index 78e81ea83a..0000000000
--- a/packages/linux/linux-rp-2.6.22/wm9712-reset-loop-r2.patch
+++ /dev/null
@@ -1,44 +0,0 @@
- sound/soc/codecs/wm9712.c | 28 ++++++++++++++++++----------
- 1 file changed, 18 insertions(+), 10 deletions(-)
-
-Index: git/sound/soc/codecs/wm9712.c
-===================================================================
---- git.orig/sound/soc/codecs/wm9712.c 2006-11-07 22:10:01.000000000 +0000
-+++ git/sound/soc/codecs/wm9712.c 2006-11-07 22:11:50.000000000 +0000
-@@ -618,18 +618,26 @@ static int wm9712_dapm_event(struct snd_
-
- static int wm9712_reset(struct snd_soc_codec *codec, int try_warm)
- {
-- if (try_warm && soc_ac97_ops.warm_reset) {
-- soc_ac97_ops.warm_reset(codec->ac97);
-- if (!(ac97_read(codec, 0) & 0x8000))
-- return 1;
-- }
-+ int retry = 3;
-
-- soc_ac97_ops.reset(codec->ac97);
-- if (ac97_read(codec, 0) & 0x8000)
-- goto err;
-- return 0;
-+ while (retry--)
-+ {
-+ if(try_warm && soc_ac97_ops.warm_reset) {
-+ soc_ac97_ops.warm_reset(codec->ac97);
-+ if(ac97_read(codec, 0) & 0x8000)
-+ continue;
-+ else
-+ return 1;
-+ }
-+
-+ soc_ac97_ops.reset(codec->ac97);
-+ if(ac97_read(codec, 0) & 0x8000)
-+ continue;
-+ else
-+ return 0;
-+
-+ }
-
--err:
- printk(KERN_ERR "WM9712 AC97 reset failed\n");
- return -EIO;
- }
diff --git a/packages/linux/linux-rp-2.6.22/wm9712-suspend-cold-res-r2.patch b/packages/linux/linux-rp-2.6.22/wm9712-suspend-cold-res-r2.patch
deleted file mode 100644
index 5179b47cc4..0000000000
--- a/packages/linux/linux-rp-2.6.22/wm9712-suspend-cold-res-r2.patch
+++ /dev/null
@@ -1,16 +0,0 @@
- sound/soc/codecs/wm9712.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: git/sound/soc/codecs/wm9712.c
-===================================================================
---- git.orig/sound/soc/codecs/wm9712.c 2006-11-07 21:57:34.000000000 +0000
-+++ git/sound/soc/codecs/wm9712.c 2006-11-07 21:59:30.000000000 +0000
-@@ -651,7 +651,7 @@ static int wm9712_soc_resume(struct plat
- int i, ret;
- u16 *cache = codec->reg_cache;
-
-- ret = wm9712_reset(codec, 1);
-+ ret = wm9712_reset(codec, 0);
- if (ret < 0){
- printk(KERN_ERR "could not reset AC97 codec\n");
- return ret;
diff --git a/packages/linux/linux-rp-2.6.22/wm97xx-lg13-r0-fix-r0.patch b/packages/linux/linux-rp-2.6.22/wm97xx-lg13-r0-fix-r0.patch
deleted file mode 100644
index 5ad0d8703d..0000000000
--- a/packages/linux/linux-rp-2.6.22/wm97xx-lg13-r0-fix-r0.patch
+++ /dev/null
@@ -1,128 +0,0 @@
- drivers/input/power.c | 2 +-
- drivers/input/touchscreen/Kconfig | 2 +-
- drivers/input/touchscreen/wm97xx-core.c | 35 ++++++++++++++++---------------
- include/linux/wm97xx.h | 2 +-
- 4 files changed, 21 insertions(+), 20 deletions(-)
-
-diff --git a/drivers/input/power.c b/drivers/input/power.c
-index 4443e34..7aac875 100644
---- a/drivers/input/power.c
-+++ b/drivers/input/power.c
-@@ -156,7 +156,7 @@ static void power_event(struct input_handle *handle, unsigned int type,
- }
- }
-
--static struct input_handle *power_connect(struct input_handler *handler,
-+static int power_connect(struct input_handler *handler,
- struct input_dev *dev,
- const struct input_device_id *id)
- {
-diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
-index 6862e8f..9b532e9 100644
---- a/drivers/input/touchscreen/Kconfig
-+++ b/drivers/input/touchscreen/Kconfig
-@@ -247,7 +247,7 @@ config TOUCHSCREEN_TSC2101
-
- config TOUCHSCREEN_WM97XX
- tristate "Support for WM97xx AC97 touchscreen controllers"
-- depends SND_AC97_BUS
-+ depends AC97_BUS
-
- choice
- prompt "WM97xx codec type"
-diff --git a/drivers/input/touchscreen/wm97xx-core.c b/drivers/input/touchscreen/wm97xx-core.c
-index 9b2710e..d3ce3f3 100644
---- a/drivers/input/touchscreen/wm97xx-core.c
-+++ b/drivers/input/touchscreen/wm97xx-core.c
-@@ -84,6 +84,7 @@
- #include <linux/bitops.h>
- #include <linux/workqueue.h>
- #include <linux/device.h>
-+#include <linux/freezer.h>
- #include <linux/wm97xx.h>
- #include <asm/uaccess.h>
- #include <asm/io.h>
-@@ -241,14 +242,15 @@ WM97XX_STATUS_ATTR(gpio);
-
- static int wm97xx_sys_add(struct device *dev)
- {
-+ int err;
- if (aux_sys) {
-- device_create_file(dev, &dev_attr_aux1);
-- device_create_file(dev, &dev_attr_aux2);
-- device_create_file(dev, &dev_attr_aux3);
-- device_create_file(dev, &dev_attr_aux4);
-+ err = device_create_file(dev, &dev_attr_aux1);
-+ err = device_create_file(dev, &dev_attr_aux2);
-+ err = device_create_file(dev, &dev_attr_aux3);
-+ err = device_create_file(dev, &dev_attr_aux4);
- }
- if (status_sys)
-- device_create_file(dev, &dev_attr_gpio);
-+ err = device_create_file(dev, &dev_attr_gpio);
- return 0;
- }
-
-@@ -366,12 +368,12 @@ void wm97xx_config_gpio(struct wm97xx *wm, u32 gpio, wm97xx_gpio_dir_t dir,
-
- /*
- * Handle a pen down interrupt.
-- */
--static void wm97xx_pen_irq_worker(void *ptr)
--{
-- struct wm97xx *wm = (struct wm97xx *) ptr;
--
-- /* do we need to enable the touch panel reader */
-+ */
-+static void wm97xx_pen_irq_worker(struct work_struct *work)
-+{
-+ struct wm97xx *wm = container_of(work, struct wm97xx, pen_event_work);
-+
-+ /* do we need to enable the touch panel reader */
- if (wm->id == WM9705_ID2) {
- if (wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD) & WM97XX_PEN_DOWN)
- wm->pen_is_down = 1;
-@@ -411,9 +413,8 @@ static void wm97xx_pen_irq_worker(void *ptr)
- * We have to disable the codec interrupt in the handler because it can
- * take upto 1ms to clear the interrupt source. The interrupt is then enabled
- * again in the slow handler when the source has been cleared.
-- */
--static irqreturn_t wm97xx_pen_interrupt(int irq, void *dev_id,
-- struct pt_regs *regs)
-+ */
-+static irqreturn_t wm97xx_pen_interrupt(int irq, void *dev_id)
- {
- struct wm97xx *wm = (struct wm97xx *) dev_id;
- disable_irq(wm->pen_irq);
-@@ -428,15 +429,15 @@ static int wm97xx_init_pen_irq(struct wm97xx *wm)
- {
- u16 reg;
-
-- INIT_WORK(&wm->pen_event_work, wm97xx_pen_irq_worker, wm);
-- if ((wm->pen_irq_workq =
-+ INIT_WORK(&wm->pen_event_work, wm97xx_pen_irq_worker);
-+ if ((wm->pen_irq_workq =
- create_singlethread_workqueue("kwm97pen")) == NULL) {
- err("could not create pen irq work queue");
- wm->pen_irq = 0;
- return -EINVAL;
- }
-
-- if (request_irq (wm->pen_irq, wm97xx_pen_interrupt, SA_SHIRQ, "wm97xx-pen", wm)) {
-+ if (request_irq (wm->pen_irq, wm97xx_pen_interrupt, IRQF_SHARED, "wm97xx-pen", wm)) {
- err("could not register codec pen down interrupt, will poll for pen down");
- destroy_workqueue(wm->pen_irq_workq);
- wm->pen_irq = 0;
-diff --git a/include/linux/wm97xx.h b/include/linux/wm97xx.h
-index b1c1740..a9bd57e 100644
---- a/include/linux/wm97xx.h
-+++ b/include/linux/wm97xx.h
-@@ -243,7 +243,7 @@ struct wm97xx {
- u16 dig_save[3]; /* saved during aux reading */
- struct wm97xx_codec_drv *codec; /* attached codec driver*/
- struct input_dev* input_dev; /* touchscreen input device */
-- ac97_t *ac97; /* ALSA codec access */
-+ struct snd_ac97 *ac97; /* ALSA codec access */
- struct device *dev; /* ALSA device */
- struct device *battery_dev;
- struct device *touch_dev;
diff --git a/packages/linux/linux-rp-2.6.22/wm97xx-lg13-r0.patch b/packages/linux/linux-rp-2.6.22/wm97xx-lg13-r0.patch
deleted file mode 100644
index c918c5daff..0000000000
--- a/packages/linux/linux-rp-2.6.22/wm97xx-lg13-r0.patch
+++ /dev/null
@@ -1,2899 +0,0 @@
-Index: linux-2.6.17/drivers/input/touchscreen/Kconfig
-===================================================================
---- linux-2.6.17.orig/drivers/input/touchscreen/Kconfig 2006-09-19 20:35:35.060495500 +0200
-+++ linux-2.6.17/drivers/input/touchscreen/Kconfig 2006-09-19 20:36:47.965051750 +0200
-@@ -121,4 +121,57 @@ config TOUCHSCREEN_TSC2101
- To compile this driver as a module, choose M here: the
- module will be called ads7846_ts.
-
-+config TOUCHSCREEN_WM97XX
-+ tristate "Support for WM97xx AC97 touchscreen controllers"
-+ depends SND_AC97_BUS
-+
-+choice
-+ prompt "WM97xx codec type"
-+
-+config TOUCHSCREEN_WM9705
-+ bool "WM9705 Touchscreen interface support"
-+ depends on TOUCHSCREEN_WM97XX
-+ help
-+ Say Y here if you have the wm9705 touchscreen.
-+
-+ If unsure, say N.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called wm9705.
-+
-+config TOUCHSCREEN_WM9712
-+ bool "WM9712 Touchscreen interface support"
-+ depends on TOUCHSCREEN_WM97XX
-+ help
-+ Say Y here if you have the wm9712 touchscreen.
-+
-+ If unsure, say N.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called wm9712.
-+
-+config TOUCHSCREEN_WM9713
-+ bool "WM9713 Touchscreen interface support"
-+ depends on TOUCHSCREEN_WM97XX
-+ help
-+ Say Y here if you have the wm9713 touchscreen.
-+
-+ If unsure, say N.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called wm9713.
-+
-+endchoice
-+
-+config TOUCHSCREEN_WM97XX_PXA
-+ tristate "WM97xx PXA accelerated touch"
-+ depends on TOUCHSCREEN_WM97XX && ARCH_PXA
-+ help
-+ Say Y here for continuous mode touch on the PXA
-+
-+ If unsure, say N
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called pxa-wm97xx
-+
- endif
-Index: linux-2.6.17/drivers/input/touchscreen/Makefile
-===================================================================
---- linux-2.6.17.orig/drivers/input/touchscreen/Makefile 2006-09-19 20:35:35.072496250 +0200
-+++ linux-2.6.17/drivers/input/touchscreen/Makefile 2006-09-19 20:37:40.540337500 +0200
-@@ -4,6 +4,8 @@
-
- # Each configuration option enables a list of files.
-
-+wm97xx-ts-objs := wm97xx-core.o
-+
- obj-$(CONFIG_TOUCHSCREEN_ADS7846) += ads7846.o
- obj-$(CONFIG_TOUCHSCREEN_BITSY) += h3600_ts_input.o
- obj-$(CONFIG_TOUCHSCREEN_CORGI) += corgi_ts.o
-@@ -13,3 +15,16 @@ obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtou
- obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o
- obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o
- obj-$(CONFIG_TOUCHSCREEN_TSC2101) += tsc2101_ts.o
-+obj-$(CONFIG_TOUCHSCREEN_WM97XX) += wm97xx-ts.o
-+obj-$(CONFIG_TOUCHSCREEN_WM97XX_PXA) += pxa-wm97xx.o
-+
-+ifeq ($(CONFIG_TOUCHSCREEN_WM9713),y)
-+wm97xx-ts-objs += wm9713.o
-+endif
-+
-+ifeq ($(CONFIG_TOUCHSCREEN_WM9712),y)
-+wm97xx-ts-objs += wm9712.o
-+endif
-+ifeq ($(CONFIG_TOUCHSCREEN_WM9705),y)
-+wm97xx-ts-objs += wm9705.o
-+endif
-Index: linux-2.6.17/drivers/input/touchscreen/pxa-wm97xx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17/drivers/input/touchscreen/pxa-wm97xx.c 2006-09-19 20:36:47.965051750 +0200
-@@ -0,0 +1,289 @@
-+/*
-+ * pxa-wm97xx.c -- pxa-wm97xx Continuous Touch screen driver for
-+ * Wolfson WM97xx AC97 Codecs.
-+ *
-+ * Copyright 2004 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ * Parts Copyright : Ian Molton <spyro@f2s.com>
-+ * Andrew Zabolotny <zap@homelink.ru>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Notes:
-+ * This is a wm97xx extended touch driver to capture touch
-+ * data in a continuous manner on the Intel XScale archictecture
-+ *
-+ * Features:
-+ * - codecs supported:- WM9705, WM9712, WM9713
-+ * - processors supported:- Intel XScale PXA25x, PXA26x, PXA27x
-+ *
-+ * Revision history
-+ * 18th Aug 2004 Initial version.
-+ * 26th Jul 2005 Improved continous read back and added FIFO flushing.
-+ * 06th Sep 2005 Mike Arthur <linux@wolfsonmicro.com>
-+ * Moved to using the wm97xx bus
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/irq.h>
-+#include <linux/wm97xx.h>
-+#include <asm/io.h>
-+#include <asm/arch/pxa-regs.h>
-+
-+#define VERSION "0.13"
-+
-+struct continuous {
-+ u16 id; /* codec id */
-+ u8 code; /* continuous code */
-+ u8 reads; /* number of coord reads per read cycle */
-+ u32 speed; /* number of coords per second */
-+};
-+
-+#define WM_READS(sp) ((sp / HZ) + 1)
-+
-+static const struct continuous cinfo[] = {
-+ {WM9705_ID2, 0, WM_READS(94), 94},
-+ {WM9705_ID2, 1, WM_READS(188), 188},
-+ {WM9705_ID2, 2, WM_READS(375), 375},
-+ {WM9705_ID2, 3, WM_READS(750), 750},
-+ {WM9712_ID2, 0, WM_READS(94), 94},
-+ {WM9712_ID2, 1, WM_READS(188), 188},
-+ {WM9712_ID2, 2, WM_READS(375), 375},
-+ {WM9712_ID2, 3, WM_READS(750), 750},
-+ {WM9713_ID2, 0, WM_READS(94), 94},
-+ {WM9713_ID2, 1, WM_READS(120), 120},
-+ {WM9713_ID2, 2, WM_READS(154), 154},
-+ {WM9713_ID2, 3, WM_READS(188), 188},
-+};
-+
-+/* continuous speed index */
-+static int sp_idx = 0;
-+static u16 last = 0, tries = 0;
-+
-+/*
-+ * Pen sampling frequency (Hz) in continuous mode.
-+ */
-+static int cont_rate = 200;
-+module_param(cont_rate, int, 0);
-+MODULE_PARM_DESC(cont_rate, "Sampling rate in continuous mode (Hz)");
-+
-+/*
-+ * Pen down detection.
-+ *
-+ * This driver can either poll or use an interrupt to indicate a pen down
-+ * event. If the irq request fails then it will fall back to polling mode.
-+ */
-+static int pen_int = 1;
-+module_param(pen_int, int, 0);
-+MODULE_PARM_DESC(pen_int, "Pen down detection (1 = interrupt, 0 = polling)");
-+
-+/*
-+ * Pressure readback.
-+ *
-+ * Set to 1 to read back pen down pressure
-+ */
-+static int pressure = 0;
-+module_param(pressure, int, 0);
-+MODULE_PARM_DESC(pressure, "Pressure readback (1 = pressure, 0 = no pressure)");
-+
-+/*
-+ * AC97 touch data slot.
-+ *
-+ * Touch screen readback data ac97 slot
-+ */
-+static int ac97_touch_slot = 5;
-+module_param(ac97_touch_slot, int, 0);
-+MODULE_PARM_DESC(ac97_touch_slot, "Touch screen data slot AC97 number");
-+
-+
-+/* flush AC97 slot 5 FIFO on pxa machines */
-+#ifdef CONFIG_PXA27x
-+void wm97xx_acc_pen_up (struct wm97xx* wm)
-+{
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ schedule_timeout(1);
-+
-+ while (MISR & (1 << 2))
-+ MODR;
-+}
-+#else
-+void wm97xx_acc_pen_up (struct wm97xx* wm)
-+{
-+ int count = 16;
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ schedule_timeout(1);
-+
-+ while (count < 16) {
-+ MODR;
-+ count--;
-+ }
-+}
-+#endif
-+
-+int wm97xx_acc_pen_down (struct wm97xx* wm)
-+{
-+ u16 x, y, p = 0x100 | WM97XX_ADCSEL_PRES;
-+ int reads = 0;
-+
-+ /* data is never immediately available after pen down irq */
-+ set_current_state(TASK_INTERRUPTIBLE);
-+ schedule_timeout(1);
-+
-+ if (tries > 5){
-+ tries = 0;
-+ return RC_PENUP;
-+ }
-+
-+ x = MODR;
-+ if (x == last) {
-+ tries++;
-+ return RC_AGAIN;
-+ }
-+ last = x;
-+ do {
-+ if (reads)
-+ x= MODR;
-+ y= MODR;
-+ if (pressure)
-+ p = MODR;
-+
-+ /* are samples valid */
-+ if ((x & 0x7000) != WM97XX_ADCSEL_X ||
-+ (y & 0x7000) != WM97XX_ADCSEL_Y ||
-+ (p & 0x7000) != WM97XX_ADCSEL_PRES)
-+ goto up;
-+
-+ /* coordinate is good */
-+ tries = 0;
-+ //printk("x %x y %x p %x\n", x,y,p);
-+ input_report_abs (wm->input_dev, ABS_X, x & 0xfff);
-+ input_report_abs (wm->input_dev, ABS_Y, y & 0xfff);
-+ input_report_abs (wm->input_dev, ABS_PRESSURE, p & 0xfff);
-+ input_sync (wm->input_dev);
-+ reads++;
-+ } while (reads < cinfo[sp_idx].reads);
-+up:
-+ return RC_PENDOWN | RC_AGAIN;
-+}
-+
-+int wm97xx_acc_startup(struct wm97xx* wm)
-+{
-+ int idx = 0;
-+
-+ /* check we have a codec */
-+ if (wm->ac97 == NULL)
-+ return -ENODEV;
-+
-+ /* Go you big red fire engine */
-+ for (idx = 0; idx < ARRAY_SIZE(cinfo); idx++) {
-+ if (wm->id != cinfo[idx].id)
-+ continue;
-+ sp_idx = idx;
-+ if (cont_rate <= cinfo[idx].speed)
-+ break;
-+ }
-+ wm->acc_rate = cinfo[sp_idx].code;
-+ wm->acc_slot = ac97_touch_slot;
-+ printk(KERN_INFO "pxa2xx accelerated touchscreen driver, %d samples (sec)\n",
-+ cinfo[sp_idx].speed);
-+
-+ /* codec specific irq config */
-+ if (pen_int) {
-+ switch (wm->id) {
-+ case WM9705_ID2:
-+ wm->pen_irq = IRQ_GPIO(4);
-+ set_irq_type(IRQ_GPIO(4), IRQT_BOTHEDGE);
-+ break;
-+ case WM9712_ID2:
-+ case WM9713_ID2:
-+ /* enable pen down interrupt */
-+ /* use PEN_DOWN GPIO 13 to assert IRQ on GPIO line 2 */
-+ wm->pen_irq = MAINSTONE_AC97_IRQ;
-+ wm97xx_config_gpio(wm, WM97XX_GPIO_13, WM97XX_GPIO_IN,
-+ WM97XX_GPIO_POL_HIGH, WM97XX_GPIO_STICKY, WM97XX_GPIO_WAKE);
-+ wm97xx_config_gpio(wm, WM97XX_GPIO_2, WM97XX_GPIO_OUT,
-+ WM97XX_GPIO_POL_HIGH, WM97XX_GPIO_NOTSTICKY, WM97XX_GPIO_NOWAKE);
-+ break;
-+ default:
-+ printk(KERN_WARNING "pen down irq not supported on this device\n");
-+ pen_int = 0;
-+ break;
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+void wm97xx_acc_shutdown(struct wm97xx* wm)
-+{
-+ /* codec specific deconfig */
-+ if (pen_int) {
-+ switch (wm->id & 0xffff) {
-+ case WM9705_ID2:
-+ wm->pen_irq = 0;
-+ break;
-+ case WM9712_ID2:
-+ case WM9713_ID2:
-+ /* disable interrupt */
-+ wm->pen_irq = 0;
-+ break;
-+ }
-+ }
-+}
-+
-+static struct wm97xx_mach_ops pxa_mach_ops = {
-+ .acc_enabled = 1,
-+ .acc_pen_up = wm97xx_acc_pen_up,
-+ .acc_pen_down = wm97xx_acc_pen_down,
-+ .acc_startup = wm97xx_acc_startup,
-+ .acc_shutdown = wm97xx_acc_shutdown,
-+};
-+
-+int pxa_wm97xx_probe(struct device *dev)
-+{
-+ struct wm97xx *wm = dev->driver_data;
-+ return wm97xx_register_mach_ops (wm, &pxa_mach_ops);
-+}
-+
-+int pxa_wm97xx_remove(struct device *dev)
-+{
-+ struct wm97xx *wm = dev->driver_data;
-+ wm97xx_unregister_mach_ops (wm);
-+ return 0;
-+}
-+
-+static struct device_driver pxa_wm97xx_driver = {
-+ .name = "wm97xx-touchscreen",
-+ .bus = &wm97xx_bus_type,
-+ .owner = THIS_MODULE,
-+ .probe = pxa_wm97xx_probe,
-+ .remove = pxa_wm97xx_remove
-+};
-+
-+static int __init pxa_wm97xx_init(void)
-+{
-+ return driver_register(&pxa_wm97xx_driver);
-+}
-+
-+static void __exit pxa_wm97xx_exit(void)
-+{
-+ driver_unregister(&pxa_wm97xx_driver);
-+}
-+
-+module_init(pxa_wm97xx_init);
-+module_exit(pxa_wm97xx_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood <liam.girdwood@wolfsonmicro.com>");
-+MODULE_DESCRIPTION("wm97xx continuous touch driver for pxa2xx");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.17/drivers/input/touchscreen/wm9705.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17/drivers/input/touchscreen/wm9705.c 2006-09-19 20:36:47.969052000 +0200
-@@ -0,0 +1,360 @@
-+/*
-+ * wm9705.c -- Codec driver for Wolfson WM9705 AC97 Codec.
-+ *
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ * Parts Copyright : Ian Molton <spyro@f2s.com>
-+ * Andrew Zabolotny <zap@homelink.ru>
-+ * Russell King <rmk@arm.linux.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 6th Sep 2006 Mike Arthur <linux@wolfsonmicro.com>
-+ * Added pre and post sample calls.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/input.h>
-+#include <linux/delay.h>
-+#include <linux/bitops.h>
-+#include <linux/wm97xx.h>
-+
-+#define TS_NAME "wm97xx"
-+#define WM9705_VERSION "0.62"
-+#define DEFAULT_PRESSURE 0xb0c0
-+
-+/*
-+ * Debug
-+ */
-+#if 0
-+#define dbg(format, arg...) printk(KERN_DEBUG TS_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...)
-+#endif
-+#define err(format, arg...) printk(KERN_ERR TS_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) printk(KERN_INFO TS_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) printk(KERN_WARNING TS_NAME ": " format "\n" , ## arg)
-+
-+/*
-+ * Module parameters
-+ */
-+
-+/*
-+ * Set current used for pressure measurement.
-+ *
-+ * Set pil = 2 to use 400uA
-+ * pil = 1 to use 200uA and
-+ * pil = 0 to disable pressure measurement.
-+ *
-+ * This is used to increase the range of values returned by the adc
-+ * when measureing touchpanel pressure.
-+ */
-+static int pil = 0;
-+module_param(pil, int, 0);
-+MODULE_PARM_DESC(pil, "Set current used for pressure measurement.");
-+
-+/*
-+ * Set threshold for pressure measurement.
-+ *
-+ * Pen down pressure below threshold is ignored.
-+ */
-+static int pressure = DEFAULT_PRESSURE & 0xfff;
-+module_param(pressure, int, 0);
-+MODULE_PARM_DESC(pressure, "Set threshold for pressure measurement.");
-+
-+/*
-+ * Set adc sample delay.
-+ *
-+ * For accurate touchpanel measurements, some settling time may be
-+ * required between the switch matrix applying a voltage across the
-+ * touchpanel plate and the ADC sampling the signal.
-+ *
-+ * This delay can be set by setting delay = n, where n is the array
-+ * position of the delay in the array delay_table below.
-+ * Long delays > 1ms are supported for completeness, but are not
-+ * recommended.
-+ */
-+static int delay = 4;
-+module_param(delay, int, 0);
-+MODULE_PARM_DESC(delay, "Set adc sample delay.");
-+
-+/*
-+ * Pen detect comparator threshold.
-+ *
-+ * 0 to Vmid in 15 steps, 0 = use zero power comparator with Vmid threshold
-+ * i.e. 1 = Vmid/15 threshold
-+ * 15 = Vmid/1 threshold
-+ *
-+ * Adjust this value if you are having problems with pen detect not
-+ * detecting any down events.
-+ */
-+static int pdd = 8;
-+module_param(pdd, int, 0);
-+MODULE_PARM_DESC(pdd, "Set pen detect comparator threshold");
-+
-+/*
-+ * Set adc mask function.
-+ *
-+ * Sources of glitch noise, such as signals driving an LCD display, may feed
-+ * through to the touch screen plates and affect measurement accuracy. In
-+ * order to minimise this, a signal may be applied to the MASK pin to delay or
-+ * synchronise the sampling.
-+ *
-+ * 0 = No delay or sync
-+ * 1 = High on pin stops conversions
-+ * 2 = Edge triggered, edge on pin delays conversion by delay param (above)
-+ * 3 = Edge triggered, edge on pin starts conversion after delay param
-+ */
-+static int mask = 0;
-+module_param(mask, int, 0);
-+MODULE_PARM_DESC(mask, "Set adc mask function.");
-+
-+/*
-+ * ADC sample delay times in uS
-+ */
-+static const int delay_table[] = {
-+ 21, // 1 AC97 Link frames
-+ 42, // 2
-+ 84, // 4
-+ 167, // 8
-+ 333, // 16
-+ 667, // 32
-+ 1000, // 48
-+ 1333, // 64
-+ 2000, // 96
-+ 2667, // 128
-+ 3333, // 160
-+ 4000, // 192
-+ 4667, // 224
-+ 5333, // 256
-+ 6000, // 288
-+ 0 // No delay, switch matrix always on
-+};
-+
-+/*
-+ * Delay after issuing a POLL command.
-+ *
-+ * The delay is 3 AC97 link frames + the touchpanel settling delay
-+ */
-+static inline void poll_delay(int d)
-+{
-+ udelay (3 * AC97_LINK_FRAME + delay_table [d]);
-+}
-+
-+/*
-+ * set up the physical settings of the WM9705
-+ */
-+static void init_wm9705_phy(struct wm97xx* wm)
-+{
-+ u16 dig1 = 0, dig2 = WM97XX_RPR;
-+
-+ /*
-+ * mute VIDEO and AUX as they share X and Y touchscreen
-+ * inputs on the WM9705
-+ */
-+ wm97xx_reg_write(wm, AC97_AUX, 0x8000);
-+ wm97xx_reg_write(wm, AC97_VIDEO, 0x8000);
-+
-+ /* touchpanel pressure current*/
-+ if (pil == 2) {
-+ dig2 |= WM9705_PIL;
-+ dbg("setting pressure measurement current to 400uA.");
-+ } else if (pil)
-+ dbg("setting pressure measurement current to 200uA.");
-+ if(!pil)
-+ pressure = 0;
-+
-+ /* polling mode sample settling delay */
-+ if (delay!=4) {
-+ if (delay < 0 || delay > 15) {
-+ dbg("supplied delay out of range.");
-+ delay = 4;
-+ }
-+ }
-+ dig1 &= 0xff0f;
-+ dig1 |= WM97XX_DELAY(delay);
-+ dbg("setting adc sample delay to %d u Secs.", delay_table[delay]);
-+
-+ /* WM9705 pdd */
-+ dig2 |= (pdd & 0x000f);
-+ dbg("setting pdd to Vmid/%d", 1 - (pdd & 0x000f));
-+
-+ /* mask */
-+ dig2 |= ((mask & 0x3) << 4);
-+
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, dig1);
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, dig2);
-+}
-+
-+static int wm9705_digitiser_ioctl(struct wm97xx* wm, int cmd)
-+{
-+ switch(cmd) {
-+ case WM97XX_DIG_START:
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, wm->dig[2] | WM97XX_PRP_DET_DIG);
-+ wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD); /* dummy read */
-+ break;
-+ case WM97XX_DIG_STOP:
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, wm->dig[2] & ~WM97XX_PRP_DET_DIG);
-+ break;
-+ case WM97XX_AUX_PREPARE:
-+ memcpy(wm->dig_save, wm->dig, sizeof(wm->dig));
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, 0);
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, WM97XX_PRP_DET_DIG);
-+ break;
-+ case WM97XX_DIG_RESTORE:
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, wm->dig_save[1]);
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, wm->dig_save[2]);
-+ break;
-+ case WM97XX_PHY_INIT:
-+ init_wm9705_phy(wm);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ return 0;
-+}
-+
-+static inline int is_pden (struct wm97xx* wm)
-+{
-+ return wm->dig[2] & WM9705_PDEN;
-+}
-+
-+/*
-+ * Read a sample from the WM9705 adc in polling mode.
-+ */
-+static int wm9705_poll_sample (struct wm97xx* wm, int adcsel, int *sample)
-+{
-+ int timeout = 5 * delay;
-+
-+ if (!wm->pen_probably_down) {
-+ u16 data = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ if (!(data & WM97XX_PEN_DOWN))
-+ return RC_PENUP;
-+ wm->pen_probably_down = 1;
-+ }
-+
-+ /* set up digitiser */
-+ if (adcsel & 0x8000)
-+ adcsel = ((adcsel & 0x7fff) + 3) << 12;
-+
-+ if (wm->mach_ops && wm->mach_ops->pre_sample)
-+ wm->mach_ops->pre_sample(adcsel);
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, adcsel | WM97XX_POLL | WM97XX_DELAY(delay));
-+
-+ /* wait 3 AC97 time slots + delay for conversion */
-+ poll_delay (delay);
-+
-+ /* wait for POLL to go low */
-+ while ((wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER1) & WM97XX_POLL) && timeout) {
-+ udelay(AC97_LINK_FRAME);
-+ timeout--;
-+ }
-+
-+ if (timeout <= 0) {
-+ /* If PDEN is set, we can get a timeout when pen goes up */
-+ if (is_pden(wm))
-+ wm->pen_probably_down = 0;
-+ else
-+ dbg ("adc sample timeout");
-+ return RC_PENUP;
-+ }
-+
-+ *sample = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ if (wm->mach_ops && wm->mach_ops->post_sample)
-+ wm->mach_ops->post_sample(adcsel);
-+
-+ /* check we have correct sample */
-+ if ((*sample & WM97XX_ADCSEL_MASK) != adcsel) {
-+ dbg ("adc wrong sample, read %x got %x", adcsel,
-+ *sample & WM97XX_ADCSEL_MASK);
-+ return RC_PENUP;
-+ }
-+
-+ if (!(*sample & WM97XX_PEN_DOWN)) {
-+ wm->pen_probably_down = 0;
-+ return RC_PENUP;
-+ }
-+
-+ return RC_VALID;
-+}
-+
-+/*
-+ * Sample the WM9705 touchscreen in polling mode
-+ */
-+static int wm9705_poll_touch(struct wm97xx* wm, struct wm97xx_data *data)
-+{
-+ int rc;
-+
-+ if ((rc = wm9705_poll_sample(wm, WM97XX_ADCSEL_X, &data->x)) != RC_VALID)
-+ return rc;
-+ if ((rc = wm9705_poll_sample(wm, WM97XX_ADCSEL_Y, &data->y)) != RC_VALID)
-+ return rc;
-+ if (pil) {
-+ if ((rc = wm9705_poll_sample(wm, WM97XX_ADCSEL_PRES, &data->p)) != RC_VALID)
-+ return rc;
-+ } else
-+ data->p = DEFAULT_PRESSURE;
-+
-+ return RC_VALID;
-+}
-+
-+/*
-+ * Enable WM9705 continuous mode, i.e. touch data is streamed across an AC97 slot
-+ */
-+static int wm9705_acc_enable (struct wm97xx* wm, int enable)
-+{
-+ u16 dig1, dig2;
-+ int ret = 0;
-+
-+ dig1 = wm->dig[1];
-+ dig2 = wm->dig[2];
-+
-+ if (enable) {
-+ /* continous mode */
-+ if (wm->mach_ops->acc_startup && (ret = wm->mach_ops->acc_startup(wm)) < 0)
-+ return ret;
-+ dig1 &= ~(WM97XX_CM_RATE_MASK | WM97XX_ADCSEL_MASK |
-+ WM97XX_DELAY_MASK | WM97XX_SLT_MASK);
-+ dig1 |= WM97XX_CTC | WM97XX_COO | WM97XX_SLEN |
-+ WM97XX_DELAY (delay) |
-+ WM97XX_SLT (wm->acc_slot) |
-+ WM97XX_RATE (wm->acc_rate);
-+ if (pil)
-+ dig1 |= WM97XX_ADCSEL_PRES;
-+ dig2 |= WM9705_PDEN;
-+ } else {
-+ dig1 &= ~(WM97XX_CTC | WM97XX_COO | WM97XX_SLEN);
-+ dig2 &= ~WM9705_PDEN;
-+ if (wm->mach_ops->acc_shutdown)
-+ wm->mach_ops->acc_shutdown(wm);
-+ }
-+
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, dig1);
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, dig2);
-+ return ret;
-+}
-+
-+struct wm97xx_codec_drv wm97xx_codec = {
-+ .id = WM9705_ID2,
-+ .name = "wm9705",
-+ .poll_sample = wm9705_poll_sample,
-+ .poll_touch = wm9705_poll_touch,
-+ .acc_enable = wm9705_acc_enable,
-+ .digitiser_ioctl = wm9705_digitiser_ioctl,
-+};
-+
-+EXPORT_SYMBOL_GPL(wm97xx_codec);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("WM9705 Touch Screen Driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.17/drivers/input/touchscreen/wm9712.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17/drivers/input/touchscreen/wm9712.c 2006-09-19 20:36:47.969052000 +0200
-@@ -0,0 +1,464 @@
-+/*
-+ * wm9712.c -- Codec driver for Wolfson WM9712 AC97 Codecs.
-+ *
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ * Parts Copyright : Ian Molton <spyro@f2s.com>
-+ * Andrew Zabolotny <zap@homelink.ru>
-+ * Russell King <rmk@arm.linux.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 4th Jul 2005 Initial version.
-+ * 6th Sep 2006 Mike Arthur <linux@wolfsonmicro.com>
-+ * Added pre and post sample calls.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/input.h>
-+#include <linux/delay.h>
-+#include <linux/bitops.h>
-+#include <linux/wm97xx.h>
-+
-+#define TS_NAME "wm97xx"
-+#define WM9712_VERSION "0.61"
-+#define DEFAULT_PRESSURE 0xb0c0
-+
-+/*
-+ * Debug
-+ */
-+#if 0
-+#define dbg(format, arg...) printk(KERN_DEBUG TS_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...)
-+#endif
-+#define err(format, arg...) printk(KERN_ERR TS_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) printk(KERN_INFO TS_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) printk(KERN_WARNING TS_NAME ": " format "\n" , ## arg)
-+
-+/*
-+ * Module parameters
-+ */
-+
-+/*
-+ * Set internal pull up for pen detect.
-+ *
-+ * Pull up is in the range 1.02k (least sensitive) to 64k (most sensitive)
-+ * i.e. pull up resistance = 64k Ohms / rpu.
-+ *
-+ * Adjust this value if you are having problems with pen detect not
-+ * detecting any down event.
-+ */
-+static int rpu = 3;
-+module_param(rpu, int, 0);
-+MODULE_PARM_DESC(rpu, "Set internal pull up resitor for pen detect.");
-+
-+/*
-+ * Set current used for pressure measurement.
-+ *
-+ * Set pil = 2 to use 400uA
-+ * pil = 1 to use 200uA and
-+ * pil = 0 to disable pressure measurement.
-+ *
-+ * This is used to increase the range of values returned by the adc
-+ * when measureing touchpanel pressure.
-+ */
-+static int pil = 0;
-+module_param(pil, int, 0);
-+MODULE_PARM_DESC(pil, "Set current used for pressure measurement.");
-+
-+/*
-+ * Set threshold for pressure measurement.
-+ *
-+ * Pen down pressure below threshold is ignored.
-+ */
-+static int pressure = DEFAULT_PRESSURE & 0xfff;
-+module_param(pressure, int, 0);
-+MODULE_PARM_DESC(pressure, "Set threshold for pressure measurement.");
-+
-+/*
-+ * Set adc sample delay.
-+ *
-+ * For accurate touchpanel measurements, some settling time may be
-+ * required between the switch matrix applying a voltage across the
-+ * touchpanel plate and the ADC sampling the signal.
-+ *
-+ * This delay can be set by setting delay = n, where n is the array
-+ * position of the delay in the array delay_table below.
-+ * Long delays > 1ms are supported for completeness, but are not
-+ * recommended.
-+ */
-+static int delay = 3;
-+module_param(delay, int, 0);
-+MODULE_PARM_DESC(delay, "Set adc sample delay.");
-+
-+/*
-+ * Set five_wire = 1 to use a 5 wire touchscreen.
-+ *
-+ * NOTE: Five wire mode does not allow for readback of pressure.
-+ */
-+static int five_wire;
-+module_param(five_wire, int, 0);
-+MODULE_PARM_DESC(five_wire, "Set to '1' to use 5-wire touchscreen.");
-+
-+/*
-+ * Set adc mask function.
-+ *
-+ * Sources of glitch noise, such as signals driving an LCD display, may feed
-+ * through to the touch screen plates and affect measurement accuracy. In
-+ * order to minimise this, a signal may be applied to the MASK pin to delay or
-+ * synchronise the sampling.
-+ *
-+ * 0 = No delay or sync
-+ * 1 = High on pin stops conversions
-+ * 2 = Edge triggered, edge on pin delays conversion by delay param (above)
-+ * 3 = Edge triggered, edge on pin starts conversion after delay param
-+ */
-+static int mask = 0;
-+module_param(mask, int, 0);
-+MODULE_PARM_DESC(mask, "Set adc mask function.");
-+
-+/*
-+ * Coordinate Polling Enable.
-+ *
-+ * Set to 1 to enable coordinate polling. e.g. x,y[,p] is sampled together
-+ * for every poll.
-+ */
-+static int coord = 0;
-+module_param(coord, int, 0);
-+MODULE_PARM_DESC(coord, "Polling coordinate mode");
-+
-+/*
-+ * ADC sample delay times in uS
-+ */
-+static const int delay_table[] = {
-+ 21, // 1 AC97 Link frames
-+ 42, // 2
-+ 84, // 4
-+ 167, // 8
-+ 333, // 16
-+ 667, // 32
-+ 1000, // 48
-+ 1333, // 64
-+ 2000, // 96
-+ 2667, // 128
-+ 3333, // 160
-+ 4000, // 192
-+ 4667, // 224
-+ 5333, // 256
-+ 6000, // 288
-+ 0 // No delay, switch matrix always on
-+};
-+
-+/*
-+ * Delay after issuing a POLL command.
-+ *
-+ * The delay is 3 AC97 link frames + the touchpanel settling delay
-+ */
-+static inline void poll_delay(int d)
-+{
-+ udelay (3 * AC97_LINK_FRAME + delay_table [d]);
-+}
-+
-+/*
-+ * set up the physical settings of the WM9712
-+ */
-+static void init_wm9712_phy(struct wm97xx* wm)
-+{
-+ u16 dig1 = 0;
-+ u16 dig2 = WM97XX_RPR | WM9712_RPU(1);
-+
-+ /* WM9712 rpu */
-+ if (rpu) {
-+ dig2 &= 0xffc0;
-+ dig2 |= WM9712_RPU(rpu);
-+ dbg("setting pen detect pull-up to %d Ohms",64000 / rpu);
-+ }
-+
-+ /* touchpanel pressure current*/
-+ if (pil == 2) {
-+ dig2 |= WM9712_PIL;
-+ dbg("setting pressure measurement current to 400uA.");
-+ } else if (pil)
-+ dbg("setting pressure measurement current to 200uA.");
-+ if(!pil)
-+ pressure = 0;
-+
-+ /* WM9712 five wire */
-+ if (five_wire) {
-+ dig2 |= WM9712_45W;
-+ dbg("setting 5-wire touchscreen mode.");
-+ }
-+
-+ /* polling mode sample settling delay */
-+ if (delay < 0 || delay > 15) {
-+ dbg("supplied delay out of range.");
-+ delay = 4;
-+ }
-+ dig1 &= 0xff0f;
-+ dig1 |= WM97XX_DELAY(delay);
-+ dbg("setting adc sample delay to %d u Secs.", delay_table[delay]);
-+
-+ /* mask */
-+ dig2 |= ((mask & 0x3) << 6);
-+ if (mask) {
-+ u16 reg;
-+ /* Set GPIO4 as Mask Pin*/
-+ reg = wm97xx_reg_read(wm, AC97_MISC_AFE);
-+ wm97xx_reg_write(wm, AC97_MISC_AFE, reg | WM97XX_GPIO_4);
-+ reg = wm97xx_reg_read(wm, AC97_GPIO_CFG);
-+ wm97xx_reg_write(wm, AC97_GPIO_CFG, reg | WM97XX_GPIO_4);
-+ }
-+
-+ /* wait - coord mode */
-+ if(coord)
-+ dig2 |= WM9712_WAIT;
-+
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, dig1);
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, dig2);
-+}
-+
-+static int wm9712_digitiser_ioctl(struct wm97xx* wm, int cmd)
-+{
-+ u16 dig2 = wm->dig[2];
-+
-+ switch(cmd) {
-+ case WM97XX_DIG_START:
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, dig2 | WM97XX_PRP_DET_DIG);
-+ wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD); /* dummy read */
-+ break;
-+ case WM97XX_DIG_STOP:
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, dig2 & ~WM97XX_PRP_DET_DIG);
-+ break;
-+ case WM97XX_AUX_PREPARE:
-+ memcpy(wm->dig_save, wm->dig, sizeof(wm->dig));
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, 0);
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, WM97XX_PRP_DET_DIG);
-+ break;
-+ case WM97XX_DIG_RESTORE:
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, wm->dig_save[1]);
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, wm->dig_save[2]);
-+ break;
-+ case WM97XX_PHY_INIT:
-+ init_wm9712_phy(wm);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ return 0;
-+}
-+
-+static inline int is_pden (struct wm97xx* wm)
-+{
-+ return wm->dig[2] & WM9712_PDEN;
-+}
-+
-+/*
-+ * Read a sample from the WM9712 adc in polling mode.
-+ */
-+static int wm9712_poll_sample (struct wm97xx* wm, int adcsel, int *sample)
-+{
-+ int timeout = 5 * delay;
-+
-+ if (!wm->pen_probably_down) {
-+ u16 data = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ if (!(data & WM97XX_PEN_DOWN))
-+ return RC_PENUP;
-+ wm->pen_probably_down = 1;
-+ }
-+
-+ /* set up digitiser */
-+ if (adcsel & 0x8000)
-+ adcsel = ((adcsel & 0x7fff) + 3) << 12;
-+
-+ if (wm->mach_ops && wm->mach_ops->pre_sample)
-+ wm->mach_ops->pre_sample(adcsel);
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, adcsel | WM97XX_POLL | WM97XX_DELAY(delay));
-+
-+ /* wait 3 AC97 time slots + delay for conversion */
-+ poll_delay (delay);
-+
-+ /* wait for POLL to go low */
-+ while ((wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER1) & WM97XX_POLL) && timeout) {
-+ udelay(AC97_LINK_FRAME);
-+ timeout--;
-+ }
-+
-+ if (timeout <= 0) {
-+ /* If PDEN is set, we can get a timeout when pen goes up */
-+ if (is_pden(wm))
-+ wm->pen_probably_down = 0;
-+ else
-+ dbg ("adc sample timeout");
-+ return RC_PENUP;
-+ }
-+
-+ *sample = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ if (wm->mach_ops && wm->mach_ops->post_sample)
-+ wm->mach_ops->post_sample(adcsel);
-+
-+ /* check we have correct sample */
-+ if ((*sample & WM97XX_ADCSEL_MASK) != adcsel) {
-+ dbg ("adc wrong sample, read %x got %x", adcsel,
-+ *sample & WM97XX_ADCSEL_MASK);
-+ return RC_PENUP;
-+ }
-+
-+ if (!(*sample & WM97XX_PEN_DOWN)) {
-+ wm->pen_probably_down = 0;
-+ return RC_PENUP;
-+ }
-+
-+ return RC_VALID;
-+}
-+
-+/*
-+ * Read a coord from the WM9712 adc in polling mode.
-+ */
-+static int wm9712_poll_coord (struct wm97xx* wm, struct wm97xx_data *data)
-+{
-+ int timeout = 5 * delay;
-+
-+ if (!wm->pen_probably_down) {
-+ u16 data = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ if (!(data & WM97XX_PEN_DOWN))
-+ return RC_PENUP;
-+ wm->pen_probably_down = 1;
-+ }
-+
-+ /* set up digitiser */
-+ if (wm->mach_ops && wm->mach_ops->pre_sample)
-+ wm->mach_ops->pre_sample(WM97XX_ADCSEL_X | WM97XX_ADCSEL_Y);
-+
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1,
-+ WM97XX_COO | WM97XX_POLL | WM97XX_DELAY(delay));
-+
-+ /* wait 3 AC97 time slots + delay for conversion and read x */
-+ poll_delay(delay);
-+ data->x = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ /* wait for POLL to go low */
-+ while ((wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER1) & WM97XX_POLL) && timeout) {
-+ udelay(AC97_LINK_FRAME);
-+ timeout--;
-+ }
-+
-+ if (timeout <= 0) {
-+ /* If PDEN is set, we can get a timeout when pen goes up */
-+ if (is_pden(wm))
-+ wm->pen_probably_down = 0;
-+ else
-+ dbg ("adc sample timeout");
-+ return RC_PENUP;
-+ }
-+
-+ /* read back y data */
-+ data->y = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ if (pil)
-+ data->p = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ else
-+ data->p = DEFAULT_PRESSURE;
-+
-+ if (wm->mach_ops && wm->mach_ops->post_sample)
-+ wm->mach_ops->post_sample(WM97XX_ADCSEL_X | WM97XX_ADCSEL_Y);
-+
-+ /* check we have correct sample */
-+ if (!(data->x & WM97XX_ADCSEL_X) || !(data->y & WM97XX_ADCSEL_Y))
-+ goto err;
-+ if(pil && !(data->p & WM97XX_ADCSEL_PRES))
-+ goto err;
-+
-+ if (!(data->x & WM97XX_PEN_DOWN)) {
-+ wm->pen_probably_down = 0;
-+ return RC_PENUP;
-+ }
-+ return RC_VALID;
-+err:
-+ return RC_PENUP;
-+}
-+
-+/*
-+ * Sample the WM9712 touchscreen in polling mode
-+ */
-+static int wm9712_poll_touch(struct wm97xx* wm, struct wm97xx_data *data)
-+{
-+ int rc;
-+
-+ if(coord) {
-+ if((rc = wm9712_poll_coord(wm, data)) != RC_VALID)
-+ return rc;
-+ } else {
-+ if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_X, &data->x)) != RC_VALID)
-+ return rc;
-+
-+ if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_Y, &data->y)) != RC_VALID)
-+ return rc;
-+
-+ if (pil && !five_wire) {
-+ if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_PRES, &data->p)) != RC_VALID)
-+ return rc;
-+ } else
-+ data->p = DEFAULT_PRESSURE;
-+ }
-+ return RC_VALID;
-+}
-+
-+/*
-+ * Enable WM9712 continuous mode, i.e. touch data is streamed across an AC97 slot
-+ */
-+static int wm9712_acc_enable (struct wm97xx* wm, int enable)
-+{
-+ u16 dig1, dig2;
-+ int ret = 0;
-+
-+ dig1 = wm->dig[1];
-+ dig2 = wm->dig[2];
-+
-+ if (enable) {
-+ /* continous mode */
-+ if (wm->mach_ops->acc_startup && (ret = wm->mach_ops->acc_startup(wm)) < 0)
-+ return ret;
-+ dig1 &= ~(WM97XX_CM_RATE_MASK | WM97XX_ADCSEL_MASK |
-+ WM97XX_DELAY_MASK | WM97XX_SLT_MASK);
-+ dig1 |= WM97XX_CTC | WM97XX_COO | WM97XX_SLEN |
-+ WM97XX_DELAY (delay) |
-+ WM97XX_SLT (wm->acc_slot) |
-+ WM97XX_RATE (wm->acc_rate);
-+ if (pil)
-+ dig1 |= WM97XX_ADCSEL_PRES;
-+ dig2 |= WM9712_PDEN;
-+ } else {
-+ dig1 &= ~(WM97XX_CTC | WM97XX_COO | WM97XX_SLEN);
-+ dig2 &= ~WM9712_PDEN;
-+ if (wm->mach_ops->acc_shutdown)
-+ wm->mach_ops->acc_shutdown(wm);
-+ }
-+
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, dig1);
-+ wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER2, dig2);
-+ return 0;
-+}
-+
-+struct wm97xx_codec_drv wm97xx_codec = {
-+ .id = WM9712_ID2,
-+ .name = "wm9712",
-+ .poll_sample = wm9712_poll_sample,
-+ .poll_touch = wm9712_poll_touch,
-+ .acc_enable = wm9712_acc_enable,
-+ .digitiser_ioctl = wm9712_digitiser_ioctl,
-+};
-+
-+EXPORT_SYMBOL_GPL(wm97xx_codec);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("WM9712 Touch Screen Driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.17/drivers/input/touchscreen/wm9713.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17/drivers/input/touchscreen/wm9713.c 2006-09-19 20:36:47.969052000 +0200
-@@ -0,0 +1,461 @@
-+/*
-+ * wm9713.c -- Codec touch driver for Wolfson WM9713 AC97 Codec.
-+ *
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ * Parts Copyright : Ian Molton <spyro@f2s.com>
-+ * Andrew Zabolotny <zap@homelink.ru>
-+ * Russell King <rmk@arm.linux.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Revision history
-+ * 6th Sep 2006 Mike Arthur <linux@wolfsonmicro.com>
-+ * Added pre and post sample calls.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/input.h>
-+#include <linux/delay.h>
-+#include <linux/bitops.h>
-+#include <linux/wm97xx.h>
-+
-+#define TS_NAME "wm97xx"
-+#define WM9713_VERSION "0.53"
-+#define DEFAULT_PRESSURE 0xb0c0
-+
-+/*
-+ * Debug
-+ */
-+#if 0
-+#define dbg(format, arg...) printk(KERN_DEBUG TS_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...)
-+#endif
-+#define err(format, arg...) printk(KERN_ERR TS_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) printk(KERN_INFO TS_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) printk(KERN_WARNING TS_NAME ": " format "\n" , ## arg)
-+
-+/*
-+ * Module parameters
-+ */
-+
-+/*
-+ * Set internal pull up for pen detect.
-+ *
-+ * Pull up is in the range 1.02k (least sensitive) to 64k (most sensitive)
-+ * i.e. pull up resistance = 64k Ohms / rpu.
-+ *
-+ * Adjust this value if you are having problems with pen detect not
-+ * detecting any down event.
-+ */
-+static int rpu = 1;
-+module_param(rpu, int, 0);
-+MODULE_PARM_DESC(rpu, "Set internal pull up resitor for pen detect.");
-+
-+/*
-+ * Set current used for pressure measurement.
-+ *
-+ * Set pil = 2 to use 400uA
-+ * pil = 1 to use 200uA and
-+ * pil = 0 to disable pressure measurement.
-+ *
-+ * This is used to increase the range of values returned by the adc
-+ * when measureing touchpanel pressure.
-+ */
-+static int pil = 0;
-+module_param(pil, int, 0);
-+MODULE_PARM_DESC(pil, "Set current used for pressure measurement.");
-+
-+/*
-+ * Set threshold for pressure measurement.
-+ *
-+ * Pen down pressure below threshold is ignored.
-+ */
-+static int pressure = DEFAULT_PRESSURE & 0xfff;
-+module_param(pressure, int, 0);
-+MODULE_PARM_DESC(pressure, "Set threshold for pressure measurement.");
-+
-+/*
-+ * Set adc sample delay.
-+ *
-+ * For accurate touchpanel measurements, some settling time may be
-+ * required between the switch matrix applying a voltage across the
-+ * touchpanel plate and the ADC sampling the signal.
-+ *
-+ * This delay can be set by setting delay = n, where n is the array
-+ * position of the delay in the array delay_table below.
-+ * Long delays > 1ms are supported for completeness, but are not
-+ * recommended.
-+ */
-+static int delay = 4;
-+module_param(delay, int, 0);
-+MODULE_PARM_DESC(delay, "Set adc sample delay.");
-+
-+/*
-+ * Set adc mask function.
-+ *
-+ * Sources of glitch noise, such as signals driving an LCD display, may feed
-+ * through to the touch screen plates and affect measurement accuracy. In
-+ * order to minimise this, a signal may be applied to the MASK pin to delay or
-+ * synchronise the sampling.
-+ *
-+ * 0 = No delay or sync
-+ * 1 = High on pin stops conversions
-+ * 2 = Edge triggered, edge on pin delays conversion by delay param (above)
-+ * 3 = Edge triggered, edge on pin starts conversion after delay param
-+ */
-+static int mask = 0;
-+module_param(mask, int, 0);
-+MODULE_PARM_DESC(mask, "Set adc mask function.");
-+
-+/*
-+ * Coordinate Polling Enable.
-+ *
-+ * Set to 1 to enable coordinate polling. e.g. x,y[,p] is sampled together
-+ * for every poll.
-+ */
-+static int coord = 1;
-+module_param(coord, int, 0);
-+MODULE_PARM_DESC(coord, "Polling coordinate mode");
-+
-+/*
-+ * ADC sample delay times in uS
-+ */
-+static const int delay_table[] = {
-+ 21, // 1 AC97 Link frames
-+ 42, // 2
-+ 84, // 4
-+ 167, // 8
-+ 333, // 16
-+ 667, // 32
-+ 1000, // 48
-+ 1333, // 64
-+ 2000, // 96
-+ 2667, // 128
-+ 3333, // 160
-+ 4000, // 192
-+ 4667, // 224
-+ 5333, // 256
-+ 6000, // 288
-+ 0 // No delay, switch matrix always on
-+};
-+
-+/*
-+ * Delay after issuing a POLL command.
-+ *
-+ * The delay is 3 AC97 link frames + the touchpanel settling delay
-+ */
-+static inline void poll_delay(int d)
-+{
-+ udelay (3 * AC97_LINK_FRAME + delay_table [d]);
-+}
-+
-+/*
-+ * set up the physical settings of the WM9713
-+ */
-+static void init_wm9713_phy(struct wm97xx* wm)
-+{
-+ u16 dig1 = 0, dig2, dig3;
-+
-+ /* default values */
-+ dig2 = WM97XX_DELAY(4) | WM97XX_SLT(5);
-+ dig3= WM9712_RPU(1);
-+
-+ /* rpu */
-+ if (rpu) {
-+ dig3 &= 0xffc0;
-+ dig3 |= WM9712_RPU(rpu);
-+ info("setting pen detect pull-up to %d Ohms",64000 / rpu);
-+ }
-+
-+ /* touchpanel pressure */
-+ if (pil == 2) {
-+ dig3 |= WM9712_PIL;
-+ info("setting pressure measurement current to 400uA.");
-+ } else if (pil)
-+ info ("setting pressure measurement current to 200uA.");
-+ if(!pil)
-+ pressure = 0;
-+
-+ /* sample settling delay */
-+ if (delay < 0 || delay > 15) {
-+ info ("supplied delay out of range.");
-+ delay = 4;
-+ info("setting adc sample delay to %d u Secs.", delay_table[delay]);
-+ }
-+ dig2 &= 0xff0f;
-+ dig2 |= WM97XX_DELAY(delay);
-+
-+ /* mask */
-+ dig3 |= ((mask & 0x3) << 4);
-+ if(coord)
-+ dig3 |= WM9713_WAIT;
-+
-+ wm->misc = wm97xx_reg_read(wm, 0x5a);
-+
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG1, dig1);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG2, dig2);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG3, dig3);
-+ wm97xx_reg_write(wm, AC97_GPIO_STICKY, 0x0);
-+}
-+
-+static int wm9713_digitiser_ioctl(struct wm97xx* wm, int cmd)
-+{
-+ u16 val = 0;
-+
-+ switch(cmd){
-+ case WM97XX_DIG_START:
-+ val = wm97xx_reg_read(wm, AC97_EXTENDED_MID);
-+ wm97xx_reg_write(wm, AC97_EXTENDED_MID, val & 0x7fff);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG3, wm->dig[2] | WM97XX_PRP_DET_DIG);
-+ wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD); /* dummy read */
-+ break;
-+ case WM97XX_DIG_STOP:
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG3, wm->dig[2] & ~WM97XX_PRP_DET_DIG);
-+ val = wm97xx_reg_read(wm, AC97_EXTENDED_MID);
-+ wm97xx_reg_write(wm, AC97_EXTENDED_MID, val | 0x8000);
-+ break;
-+ case WM97XX_AUX_PREPARE:
-+ memcpy(wm->dig_save, wm->dig, sizeof(wm->dig));
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG1, 0);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG2, 0);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG3, WM97XX_PRP_DET_DIG);
-+ break;
-+ case WM97XX_DIG_RESTORE:
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG1, wm->dig_save[0]);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG2, wm->dig_save[1]);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG3, wm->dig_save[2]);
-+ break;
-+ case WM97XX_PHY_INIT:
-+ init_wm9713_phy(wm);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ return 0;
-+}
-+
-+static inline int is_pden (struct wm97xx* wm)
-+{
-+ return wm->dig[2] & WM9713_PDEN;
-+}
-+
-+/*
-+ * Read a sample from the WM9713 adc in polling mode.
-+ */
-+static int wm9713_poll_sample (struct wm97xx* wm, int adcsel, int *sample)
-+{
-+ u16 dig1;
-+ int timeout = 5 * delay;
-+
-+ if (!wm->pen_probably_down) {
-+ u16 data = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ if (!(data & WM97XX_PEN_DOWN))
-+ return RC_PENUP;
-+ wm->pen_probably_down = 1;
-+ }
-+
-+ /* set up digitiser */
-+ if (adcsel & 0x8000)
-+ adcsel = 1 << ((adcsel & 0x7fff) + 3);
-+
-+ dig1 = wm97xx_reg_read(wm, AC97_WM9713_DIG1);
-+ dig1 &= ~WM9713_ADCSEL_MASK;
-+
-+ if (wm->mach_ops && wm->mach_ops->pre_sample)
-+ wm->mach_ops->pre_sample(adcsel);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG1, dig1 | adcsel |WM9713_POLL);
-+
-+ /* wait 3 AC97 time slots + delay for conversion */
-+ poll_delay(delay);
-+
-+ /* wait for POLL to go low */
-+ while ((wm97xx_reg_read(wm, AC97_WM9713_DIG1) & WM9713_POLL) && timeout) {
-+ udelay(AC97_LINK_FRAME);
-+ timeout--;
-+ }
-+
-+ if (timeout <= 0) {
-+ /* If PDEN is set, we can get a timeout when pen goes up */
-+ if (is_pden(wm))
-+ wm->pen_probably_down = 0;
-+ else
-+ dbg ("adc sample timeout");
-+ return RC_PENUP;
-+ }
-+
-+ *sample =wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ if (wm->mach_ops && wm->mach_ops->post_sample)
-+ wm->mach_ops->post_sample(adcsel);
-+
-+ /* check we have correct sample */
-+ if ((*sample & WM97XX_ADCSRC_MASK) != ffs(adcsel >> 1) << 12) {
-+ dbg ("adc wrong sample, read %x got %x", adcsel,
-+ *sample & WM97XX_ADCSRC_MASK);
-+ return RC_PENUP;
-+ }
-+
-+ if (!(*sample & WM97XX_PEN_DOWN)) {
-+ wm->pen_probably_down = 0;
-+ return RC_PENUP;
-+ }
-+
-+ return RC_VALID;
-+}
-+
-+/*
-+ * Read a coordinate from the WM9713 adc in polling mode.
-+ */
-+static int wm9713_poll_coord (struct wm97xx* wm, struct wm97xx_data *data)
-+{
-+ u16 dig1;
-+ int timeout = 5 * delay;
-+
-+ if (!wm->pen_probably_down) {
-+ u16 data = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ if (!(data & WM97XX_PEN_DOWN))
-+ return RC_PENUP;
-+ wm->pen_probably_down = 1;
-+ }
-+
-+ /* set up digitiser */
-+ dig1 = wm97xx_reg_read(wm, AC97_WM9713_DIG1);
-+ dig1 &= ~WM9713_ADCSEL_MASK;
-+ if(pil)
-+ dig1 |= WM97XX_ADCSEL_PRES;
-+
-+ if (wm->mach_ops && wm->mach_ops->pre_sample)
-+ wm->mach_ops->pre_sample(WM97XX_ADCSEL_X | WM97XX_ADCSEL_Y);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG1, dig1 | WM9713_POLL | WM9713_COO);
-+
-+ /* wait 3 AC97 time slots + delay for conversion */
-+ poll_delay(delay);
-+ data->x = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ /* wait for POLL to go low */
-+ while ((wm97xx_reg_read(wm, AC97_WM9713_DIG1) & WM9713_POLL) && timeout) {
-+ udelay(AC97_LINK_FRAME);
-+ timeout--;
-+ }
-+
-+ if (timeout <= 0) {
-+ /* If PDEN is set, we can get a timeout when pen goes up */
-+ if (is_pden(wm))
-+ wm->pen_probably_down = 0;
-+ else
-+ dbg ("adc sample timeout");
-+ return RC_PENUP;
-+ }
-+
-+ /* read back data */
-+ data->y = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ if (pil)
-+ data->p = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-+ else
-+ data->p = DEFAULT_PRESSURE;
-+
-+ if (wm->mach_ops && wm->mach_ops->post_sample)
-+ wm->mach_ops->post_sample(WM97XX_ADCSEL_X | WM97XX_ADCSEL_Y);
-+
-+ /* check we have correct sample */
-+ if (!(data->x & WM97XX_ADCSEL_X) || !(data->y & WM97XX_ADCSEL_Y))
-+ goto err;
-+ if(pil && !(data->p & WM97XX_ADCSEL_PRES))
-+ goto err;
-+
-+ if (!(data->x & WM97XX_PEN_DOWN)) {
-+ wm->pen_probably_down = 0;
-+ return RC_PENUP;
-+ }
-+ return RC_VALID;
-+err:
-+ return RC_PENUP;
-+}
-+
-+/*
-+ * Sample the WM9713 touchscreen in polling mode
-+ */
-+static int wm9713_poll_touch(struct wm97xx* wm, struct wm97xx_data *data)
-+{
-+ int rc;
-+
-+ if(coord) {
-+ if((rc = wm9713_poll_coord(wm, data)) != RC_VALID)
-+ return rc;
-+ } else {
-+ if ((rc = wm9713_poll_sample(wm, WM9713_ADCSEL_X, &data->x)) != RC_VALID)
-+ return rc;
-+ if ((rc = wm9713_poll_sample(wm, WM9713_ADCSEL_Y, &data->y)) != RC_VALID)
-+ return rc;
-+ if (pil) {
-+ if ((rc = wm9713_poll_sample(wm, WM9713_ADCSEL_PRES, &data->p)) != RC_VALID)
-+ return rc;
-+ } else
-+ data->p = DEFAULT_PRESSURE;
-+ }
-+ return RC_VALID;
-+}
-+
-+/*
-+ * Enable WM9713 continuous mode, i.e. touch data is streamed across an AC97 slot
-+ */
-+static int wm9713_acc_enable (struct wm97xx* wm, int enable)
-+{
-+ u16 dig1, dig2, dig3;
-+ int ret = 0;
-+
-+ dig1 = wm->dig[0];
-+ dig2 = wm->dig[1];
-+ dig3 = wm->dig[2];
-+
-+ if (enable) {
-+ /* continous mode */
-+ if (wm->mach_ops->acc_startup &&
-+ (ret = wm->mach_ops->acc_startup(wm)) < 0)
-+ return ret;
-+
-+ dig1 &= ~WM9713_ADCSEL_MASK;
-+ dig1 |= WM9713_CTC | WM9713_COO | WM9713_ADCSEL_X | WM9713_ADCSEL_Y;
-+ if (pil)
-+ dig1 |= WM9713_ADCSEL_PRES;
-+ dig2 &= ~(WM97XX_DELAY_MASK | WM97XX_SLT_MASK | WM97XX_CM_RATE_MASK);
-+ dig2 |= WM97XX_SLEN | WM97XX_DELAY (delay) |
-+ WM97XX_SLT (wm->acc_slot) | WM97XX_RATE (wm->acc_rate);
-+ dig3 |= WM9713_PDEN;
-+ } else {
-+ dig1 &= ~(WM9713_CTC | WM9713_COO);
-+ dig2 &= ~WM97XX_SLEN;
-+ dig3 &= ~WM9713_PDEN;
-+ if (wm->mach_ops->acc_shutdown)
-+ wm->mach_ops->acc_shutdown(wm);
-+ }
-+
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG1, dig1);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG2, dig2);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG3, dig3);
-+ return ret;
-+}
-+
-+struct wm97xx_codec_drv wm97xx_codec = {
-+ .id = WM9713_ID2,
-+ .name = "wm9713",
-+ .poll_sample = wm9713_poll_sample,
-+ .poll_touch = wm9713_poll_touch,
-+ .acc_enable = wm9713_acc_enable,
-+ .digitiser_ioctl = wm9713_digitiser_ioctl,
-+};
-+
-+EXPORT_SYMBOL_GPL(wm97xx_codec);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("WM9713 Touch Screen Driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.17/drivers/input/touchscreen/wm97xx-core.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17/drivers/input/touchscreen/wm97xx-core.c 2006-09-19 20:36:47.969052000 +0200
-@@ -0,0 +1,912 @@
-+/*
-+ * wm97xx-core.c -- Touch screen driver core for Wolfson WM9705, WM9712
-+ * and WM9713 AC97 Codecs.
-+ *
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
-+ * Author: Liam Girdwood
-+ * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
-+ * Parts Copyright : Ian Molton <spyro@f2s.com>
-+ * Andrew Zabolotny <zap@homelink.ru>
-+ * Russell King <rmk@arm.linux.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License as published by the
-+ * Free Software Foundation; either version 2 of the License, or (at your
-+ * option) any later version.
-+ *
-+ * Notes:
-+ *
-+ * Features:
-+ * - supports WM9705, WM9712, WM9713
-+ * - polling mode
-+ * - continuous mode (arch-dependent)
-+ * - adjustable rpu/dpp settings
-+ * - adjustable pressure current
-+ * - adjustable sample settle delay
-+ * - 4 and 5 wire touchscreens (5 wire is WM9712 only)
-+ * - pen down detection
-+ * - battery monitor
-+ * - sample AUX adc's
-+ * - power management
-+ * - codec GPIO
-+ * - codec event notification
-+ * Todo
-+ * - Support for async sampling control for noisy LCD's.
-+ *
-+ * Revision history
-+ * 7th May 2003 Initial version.
-+ * 6th June 2003 Added non module support and AC97 registration.
-+ * 18th June 2003 Added AUX adc sampling.
-+ * 23rd June 2003 Did some minimal reformatting, fixed a couple of
-+ * codec_mutexing bugs and noted a race to fix.
-+ * 24th June 2003 Added power management and fixed race condition.
-+ * 10th July 2003 Changed to a misc device.
-+ * 31st July 2003 Moved TS_EVENT and TS_CAL to wm97xx.h
-+ * 8th Aug 2003 Added option for read() calling wm97xx_sample_touch()
-+ * because some ac97_read/ac_97_write call schedule()
-+ * 7th Nov 2003 Added Input touch event interface, stanley.cai@intel.com
-+ * 13th Nov 2003 Removed h3600 touch interface, added interrupt based
-+ * pen down notification and implemented continous mode
-+ * on XScale arch.
-+ * 16th Nov 2003 Ian Molton <spyro@f2s.com>
-+ * Modified so that it suits the new 2.6 driver model.
-+ * 25th Jan 2004 Andrew Zabolotny <zap@homelink.ru>
-+ * Implemented IRQ-driven pen down detection, implemented
-+ * the private API meant to be exposed to platform-specific
-+ * drivers, reorganized the driver so that it supports
-+ * an arbitrary number of devices.
-+ * 1st Feb 2004 Moved continuous mode handling to a separate
-+ * architecture-dependent file. For now only PXA
-+ * built-in AC97 controller is supported (pxa-ac97-wm97xx.c).
-+ * 11th Feb 2004 Reduced CPU usage by keeping a cached copy of both
-+ * digitizer registers instead of reading them every time.
-+ * A reorganization of the whole code for better
-+ * error handling.
-+ * 17th Apr 2004 Added BMON support.
-+ * 17th Nov 2004 Added codec GPIO, codec event handling (real and virtual
-+ * GPIOs) and 2.6 power management.
-+ * 29th Nov 2004 Added WM9713 support.
-+ * 4th Jul 2005 Moved codec specific code out to seperate files.
-+ * 6th Sep 2006 Mike Arthur <linux@wolfsonmicro.com>
-+ * Added bus interface.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/version.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/string.h>
-+#include <linux/proc_fs.h>
-+#include <linux/pm.h>
-+#include <linux/interrupt.h>
-+#include <linux/bitops.h>
-+#include <linux/workqueue.h>
-+#include <linux/device.h>
-+#include <linux/wm97xx.h>
-+#include <asm/uaccess.h>
-+#include <asm/io.h>
-+
-+#define TS_NAME "wm97xx"
-+#define WM_CORE_VERSION "0.63"
-+#define DEFAULT_PRESSURE 0xb0c0
-+
-+/*
-+ * WM97xx - enable/disable AUX ADC sysfs
-+ */
-+static int aux_sys = 1;
-+module_param(aux_sys, int, 0);
-+MODULE_PARM_DESC(aux_sys, "enable AUX ADC sysfs entries");
-+
-+/*
-+ * WM97xx - enable/disable codec status sysfs
-+ */
-+static int status_sys = 1;
-+module_param(status_sys, int, 0);
-+MODULE_PARM_DESC(status_sys, "enable codec status sysfs entries");
-+
-+/*
-+ * Touchscreen absolute values
-+ *
-+ * These parameters are used to help the input layer discard out of
-+ * range readings and reduce jitter etc.
-+ *
-+ * o min, max:- indicate the min and max values your touch screen returns
-+ * o fuzz:- use a higher number to reduce jitter
-+ *
-+ * The default values correspond to Mainstone II in QVGA mode
-+ *
-+ * Please read
-+ * Documentation/input/input-programming.txt for more details.
-+ */
-+
-+static int abs_x[3] = {350,3900,5};
-+module_param_array(abs_x, int, NULL, 0);
-+MODULE_PARM_DESC(abs_x, "Touchscreen absolute X min, max, fuzz");
-+
-+static int abs_y[3] = {320,3750,40};
-+module_param_array(abs_y, int, NULL, 0);
-+MODULE_PARM_DESC(abs_y, "Touchscreen absolute Y min, max, fuzz");
-+
-+static int abs_p[3] = {0,150,4};
-+module_param_array(abs_p, int, NULL, 0);
-+MODULE_PARM_DESC(abs_p, "Touchscreen absolute Pressure min, max, fuzz");
-+
-+/*
-+ * Debug
-+ */
-+#if 0
-+#define dbg(format, arg...) printk(KERN_DEBUG TS_NAME ": " format "\n" , ## arg)
-+#else
-+#define dbg(format, arg...)
-+#endif
-+#define err(format, arg...) printk(KERN_ERR TS_NAME ": " format "\n" , ## arg)
-+#define info(format, arg...) printk(KERN_INFO TS_NAME ": " format "\n" , ## arg)
-+#define warn(format, arg...) printk(KERN_WARNING TS_NAME ": " format "\n" , ## arg)
-+
-+/* codec AC97 IO access */
-+int wm97xx_reg_read(struct wm97xx *wm, u16 reg)
-+{
-+ if (wm->ac97)
-+ return wm->ac97->bus->ops->read(wm->ac97, reg);
-+ else
-+ return -1;
-+}
-+
-+void wm97xx_reg_write(struct wm97xx *wm, u16 reg, u16 val)
-+{
-+ /* cache digitiser registers */
-+ if(reg >= AC97_WM9713_DIG1 && reg <= AC97_WM9713_DIG3)
-+ wm->dig[(reg - AC97_WM9713_DIG1) >> 1] = val;
-+
-+ /* cache gpio regs */
-+ if(reg >= AC97_GPIO_CFG && reg <= AC97_MISC_AFE)
-+ wm->gpio[(reg - AC97_GPIO_CFG) >> 1] = val;
-+
-+ /* wm9713 irq reg */
-+ if(reg == 0x5a)
-+ wm->misc = val;
-+
-+ if (wm->ac97)
-+ wm->ac97->bus->ops->write(wm->ac97, reg, val);
-+}
-+
-+
-+/**
-+ * wm97xx_read_aux_adc - Read the aux adc.
-+ * @wm: wm97xx device.
-+ * @adcsel: codec ADC to be read
-+ *
-+ * Reads the selected AUX ADC.
-+ */
-+
-+int wm97xx_read_aux_adc(struct wm97xx *wm, u16 adcsel)
-+{
-+ int power_adc = 0, auxval;
-+ u16 power = 0;
-+
-+ /* get codec */
-+ mutex_lock(&wm->codec_mutex);
-+
-+ /* When the touchscreen is not in use, we may have to power up the AUX ADC
-+ * before we can use sample the AUX inputs->
-+ */
-+ if (wm->id == WM9713_ID2 &&
-+ (power = wm97xx_reg_read(wm, AC97_EXTENDED_MID)) & 0x8000) {
-+ power_adc = 1;
-+ wm97xx_reg_write(wm, AC97_EXTENDED_MID, power & 0x7fff);
-+ }
-+
-+ /* Prepare the codec for AUX reading */
-+ wm->codec->digitiser_ioctl(wm, WM97XX_AUX_PREPARE);
-+
-+ /* Turn polling mode on to read AUX ADC */
-+ wm->pen_probably_down = 1;
-+ wm->codec->poll_sample(wm, adcsel, &auxval);
-+
-+ if (power_adc)
-+ wm97xx_reg_write(wm, AC97_EXTENDED_MID, power | 0x8000);
-+
-+ wm->codec->digitiser_ioctl(wm, WM97XX_DIG_RESTORE);
-+
-+ wm->pen_probably_down = 0;
-+
-+ mutex_unlock(&wm->codec_mutex);
-+ return auxval & 0xfff;
-+}
-+
-+#define WM97XX_AUX_ATTR(name,input) \
-+static ssize_t name##_show(struct device *dev, struct device_attribute *attr, char *buf) \
-+{ \
-+ struct wm97xx *wm = (struct wm97xx*)dev->driver_data; \
-+ return sprintf(buf, "%d\n", wm97xx_read_aux_adc(wm, input)); \
-+} \
-+static DEVICE_ATTR(name, 0444, name##_show, NULL)
-+
-+WM97XX_AUX_ATTR(aux1, WM97XX_AUX_ID1);
-+WM97XX_AUX_ATTR(aux2, WM97XX_AUX_ID2);
-+WM97XX_AUX_ATTR(aux3, WM97XX_AUX_ID3);
-+WM97XX_AUX_ATTR(aux4, WM97XX_AUX_ID4);
-+
-+#define WM97XX_STATUS_ATTR(name) \
-+static ssize_t name##_show(struct device *dev, struct device_attribute *attr, char *buf) \
-+{ \
-+ struct wm97xx *wm = (struct wm97xx*)dev->driver_data; \
-+ return sprintf(buf, "%d\n", wm97xx_reg_read(wm, AC97_GPIO_STATUS)); \
-+} \
-+static DEVICE_ATTR(name, 0444, name##_show, NULL)
-+
-+WM97XX_STATUS_ATTR(gpio);
-+
-+static int wm97xx_sys_add(struct device *dev)
-+{
-+ if (aux_sys) {
-+ device_create_file(dev, &dev_attr_aux1);
-+ device_create_file(dev, &dev_attr_aux2);
-+ device_create_file(dev, &dev_attr_aux3);
-+ device_create_file(dev, &dev_attr_aux4);
-+ }
-+ if (status_sys)
-+ device_create_file(dev, &dev_attr_gpio);
-+ return 0;
-+}
-+
-+static void wm97xx_sys_remove(struct device *dev)
-+{
-+ if (status_sys)
-+ device_remove_file(dev, &dev_attr_gpio);
-+ if (aux_sys) {
-+ device_remove_file(dev, &dev_attr_aux1);
-+ device_remove_file(dev, &dev_attr_aux2);
-+ device_remove_file(dev, &dev_attr_aux3);
-+ device_remove_file(dev, &dev_attr_aux4);
-+ }
-+}
-+
-+/**
-+ * wm97xx_get_gpio - Get the status of a codec GPIO.
-+ * @wm: wm97xx device.
-+ * @gpio: gpio
-+ *
-+ * Get the status of a codec GPIO pin
-+ */
-+
-+wm97xx_gpio_status_t wm97xx_get_gpio(struct wm97xx *wm, u32 gpio)
-+{
-+ u16 status;
-+ wm97xx_gpio_status_t ret;
-+
-+ mutex_lock(&wm->codec_mutex);
-+ status = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
-+
-+ if (status & gpio)
-+ ret = WM97XX_GPIO_HIGH;
-+ else
-+ ret = WM97XX_GPIO_LOW;
-+
-+ mutex_unlock(&wm->codec_mutex);
-+ return ret;
-+}
-+
-+/**
-+ * wm97xx_set_gpio - Set the status of a codec GPIO.
-+ * @wm: wm97xx device.
-+ * @gpio: gpio
-+ *
-+ *
-+ * Set the status of a codec GPIO pin
-+ */
-+
-+void wm97xx_set_gpio(struct wm97xx *wm, u32 gpio,
-+ wm97xx_gpio_status_t status)
-+{
-+ u16 reg;
-+
-+ mutex_lock(&wm->codec_mutex);
-+ reg = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
-+
-+ if (status & WM97XX_GPIO_HIGH)
-+ reg |= gpio;
-+ else
-+ reg &= ~gpio;
-+
-+ if (wm->id == WM9712_ID2)
-+ wm97xx_reg_write(wm, AC97_GPIO_STATUS, reg << 1);
-+ else
-+ wm97xx_reg_write(wm, AC97_GPIO_STATUS, reg);
-+ mutex_unlock(&wm->codec_mutex);
-+}
-+
-+/*
-+ * Codec GPIO pin configuration, this set's pin direction, polarity,
-+ * stickyness and wake up.
-+ */
-+void wm97xx_config_gpio(struct wm97xx *wm, u32 gpio, wm97xx_gpio_dir_t dir,
-+ wm97xx_gpio_pol_t pol, wm97xx_gpio_sticky_t sticky,
-+ wm97xx_gpio_wake_t wake)
-+{
-+ u16 reg;
-+
-+ mutex_lock(&wm->codec_mutex);
-+ reg = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
-+
-+ if (pol == WM97XX_GPIO_POL_HIGH)
-+ reg |= gpio;
-+ else
-+ reg &= ~gpio;
-+
-+ wm97xx_reg_write(wm, AC97_GPIO_POLARITY, reg);
-+ reg = wm97xx_reg_read(wm, AC97_GPIO_STICKY);
-+
-+ if (sticky == WM97XX_GPIO_STICKY)
-+ reg |= gpio;
-+ else
-+ reg &= ~gpio;
-+
-+ wm97xx_reg_write(wm, AC97_GPIO_STICKY, reg);
-+ reg = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP);
-+
-+ if (wake == WM97XX_GPIO_WAKE)
-+ reg |= gpio;
-+ else
-+ reg &= ~gpio;
-+
-+ wm97xx_reg_write(wm, AC97_GPIO_WAKEUP, reg);
-+ reg = wm97xx_reg_read(wm, AC97_GPIO_CFG);
-+
-+ if (dir == WM97XX_GPIO_IN)
-+ reg |= gpio;
-+ else
-+ reg &= ~gpio;
-+
-+ wm97xx_reg_write(wm, AC97_GPIO_CFG, reg);
-+ mutex_unlock(&wm->codec_mutex);
-+}
-+
-+/*
-+ * Handle a pen down interrupt.
-+ */
-+static void wm97xx_pen_irq_worker(void *ptr)
-+{
-+ struct wm97xx *wm = (struct wm97xx *) ptr;
-+
-+ /* do we need to enable the touch panel reader */
-+ if (wm->id == WM9705_ID2) {
-+ if (wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD) & WM97XX_PEN_DOWN)
-+ wm->pen_is_down = 1;
-+ else
-+ wm->pen_is_down = 0;
-+ wake_up_interruptible(&wm->pen_irq_wait);
-+ } else {
-+ u16 status, pol;
-+ mutex_lock(&wm->codec_mutex);
-+ status = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
-+ pol = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
-+
-+ if (WM97XX_GPIO_13 & pol & status) {
-+ wm->pen_is_down = 1;
-+ wm97xx_reg_write(wm, AC97_GPIO_POLARITY, pol & ~WM97XX_GPIO_13);
-+ } else {
-+ wm->pen_is_down = 0;
-+ wm97xx_reg_write(wm, AC97_GPIO_POLARITY, pol | WM97XX_GPIO_13);
-+ }
-+
-+ if (wm->id == WM9712_ID2)
-+ wm97xx_reg_write(wm, AC97_GPIO_STATUS, (status & ~WM97XX_GPIO_13) << 1);
-+ else
-+ wm97xx_reg_write(wm, AC97_GPIO_STATUS, status & ~WM97XX_GPIO_13);
-+ mutex_unlock(&wm->codec_mutex);
-+ wake_up_interruptible(&wm->pen_irq_wait);
-+ }
-+
-+ if (!wm->pen_is_down && wm->mach_ops && wm->mach_ops->acc_enabled)
-+ wm->mach_ops->acc_pen_up(wm);
-+ enable_irq(wm->pen_irq);
-+}
-+
-+/*
-+ * Codec PENDOWN irq handler
-+ *
-+ * We have to disable the codec interrupt in the handler because it can
-+ * take upto 1ms to clear the interrupt source. The interrupt is then enabled
-+ * again in the slow handler when the source has been cleared.
-+ */
-+static irqreturn_t wm97xx_pen_interrupt(int irq, void *dev_id,
-+ struct pt_regs *regs)
-+{
-+ struct wm97xx *wm = (struct wm97xx *) dev_id;
-+ disable_irq(wm->pen_irq);
-+ queue_work(wm->pen_irq_workq, &wm->pen_event_work);
-+ return IRQ_HANDLED;
-+}
-+
-+/*
-+ * initialise pen IRQ handler and workqueue
-+ */
-+static int wm97xx_init_pen_irq(struct wm97xx *wm)
-+{
-+ u16 reg;
-+
-+ INIT_WORK(&wm->pen_event_work, wm97xx_pen_irq_worker, wm);
-+ if ((wm->pen_irq_workq =
-+ create_singlethread_workqueue("kwm97pen")) == NULL) {
-+ err("could not create pen irq work queue");
-+ wm->pen_irq = 0;
-+ return -EINVAL;
-+ }
-+
-+ if (request_irq (wm->pen_irq, wm97xx_pen_interrupt, SA_SHIRQ, "wm97xx-pen", wm)) {
-+ err("could not register codec pen down interrupt, will poll for pen down");
-+ destroy_workqueue(wm->pen_irq_workq);
-+ wm->pen_irq = 0;
-+ return -EINVAL;
-+ }
-+
-+ /* enable PEN down on wm9712/13 */
-+ if (wm->id != WM9705_ID2) {
-+ reg = wm97xx_reg_read(wm, AC97_MISC_AFE);
-+ wm97xx_reg_write(wm, AC97_MISC_AFE, reg & 0xfffb);
-+ reg = wm97xx_reg_read(wm, 0x5a);
-+ wm97xx_reg_write(wm, 0x5a, reg & ~0x0001);
-+ }
-+
-+ return 0;
-+}
-+
-+/* Private struct for communication between struct wm97xx_tshread
-+ * and wm97xx_read_samples */
-+struct ts_state {
-+ int sleep_time;
-+ int min_sleep_time;
-+};
-+
-+static int wm97xx_read_samples(struct wm97xx *wm, struct ts_state *state)
-+{
-+ struct wm97xx_data data;
-+ int rc;
-+
-+ mutex_lock(&wm->codec_mutex);
-+
-+ if (wm->mach_ops && wm->mach_ops->acc_enabled)
-+ rc = wm->mach_ops->acc_pen_down(wm);
-+ else
-+ rc = wm->codec->poll_touch(wm, &data);
-+
-+ if (rc & RC_PENUP) {
-+ if (wm->pen_is_down) {
-+ wm->pen_is_down = 0;
-+ dbg("pen up");
-+ input_report_abs(wm->input_dev, ABS_PRESSURE, 0);
-+ input_sync(wm->input_dev);
-+ } else if (!(rc & RC_AGAIN)) {
-+ /* We need high frequency updates only while pen is down,
-+ * the user never will be able to touch screen faster than
-+ * a few times per second... On the other hand, when the
-+ * user is actively working with the touchscreen we don't
-+ * want to lose the quick response. So we will slowly
-+ * increase sleep time after the pen is up and quicky
-+ * restore it to ~one task switch when pen is down again.
-+ */
-+ if (state->sleep_time < HZ / 10)
-+ state->sleep_time++;
-+ }
-+
-+ } else if (rc & RC_VALID) {
-+ dbg("pen down: x=%x:%d, y=%x:%d, pressure=%x:%d\n",
-+ data.x >> 12, data.x & 0xfff, data.y >> 12,
-+ data.y & 0xfff, data.p >> 12, data.p & 0xfff);
-+ input_report_abs(wm->input_dev, ABS_X, data.x & 0xfff);
-+ input_report_abs(wm->input_dev, ABS_Y, data.y & 0xfff);
-+ input_report_abs(wm->input_dev, ABS_PRESSURE, data.p & 0xfff);
-+ input_sync(wm->input_dev);
-+ wm->pen_is_down = 1;
-+ state->sleep_time = state->min_sleep_time;
-+ } else if (rc & RC_PENDOWN) {
-+ dbg("pen down");
-+ wm->pen_is_down = 1;
-+ state->sleep_time = state->min_sleep_time;
-+ }
-+
-+ mutex_unlock(&wm->codec_mutex);
-+ return rc;
-+}
-+
-+/*
-+* The touchscreen sample reader thread.
-+*/
-+static int wm97xx_ts_read(void *data)
-+{
-+ int rc;
-+ struct ts_state state;
-+ struct wm97xx *wm = (struct wm97xx *) data;
-+
-+ /* set up thread context */
-+ wm->ts_task = current;
-+ daemonize("kwm97xxts");
-+
-+ if (wm->codec == NULL) {
-+ wm->ts_task = NULL;
-+ printk(KERN_ERR "codec is NULL, bailing\n");
-+ }
-+
-+ complete(&wm->ts_init);
-+ wm->pen_is_down = 0;
-+ state.min_sleep_time = HZ >= 100 ? HZ / 100 : 1;
-+ if (state.min_sleep_time < 1)
-+ state.min_sleep_time = 1;
-+ state.sleep_time = state.min_sleep_time;
-+
-+ /* touch reader loop */
-+ while (wm->ts_task) {
-+ do {
-+ try_to_freeze();
-+ rc = wm97xx_read_samples(wm, &state);
-+ } while (rc & RC_AGAIN);
-+ if (!wm->pen_is_down && wm->pen_irq) {
-+ /* Nice, we don't have to poll for pen down event */
-+ wait_event_interruptible(wm->pen_irq_wait, wm->pen_is_down);
-+ } else {
-+ set_task_state(current, TASK_INTERRUPTIBLE);
-+ schedule_timeout(state.sleep_time);
-+ }
-+ }
-+ complete_and_exit(&wm->ts_exit, 0);
-+}
-+
-+/**
-+ * wm97xx_ts_input_open - Open the touch screen input device.
-+ * @idev: Input device to be opened.
-+ *
-+ * Called by the input sub system to open a wm97xx touchscreen device.
-+ * Starts the touchscreen thread and touch digitiser.
-+ */
-+static int wm97xx_ts_input_open(struct input_dev *idev)
-+{
-+ int ret = 0;
-+ struct wm97xx *wm = (struct wm97xx *) idev->private;
-+
-+ mutex_lock(&wm->codec_mutex);
-+ /* first time opened ? */
-+ if (wm->ts_use_count++ == 0) {
-+ /* start touchscreen thread */
-+ init_completion(&wm->ts_init);
-+ init_completion(&wm->ts_exit);
-+ ret = kernel_thread(wm97xx_ts_read, wm, CLONE_KERNEL);
-+
-+ if (ret >= 0) {
-+ wait_for_completion(&wm->ts_init);
-+ if (wm->ts_task == NULL)
-+ ret = -EINVAL;
-+ } else {
-+ mutex_unlock(&wm->codec_mutex);
-+ return ret;
-+ }
-+
-+ /* start digitiser */
-+ if (wm->mach_ops && wm->mach_ops->acc_enabled)
-+ wm->codec->acc_enable(wm, 1);
-+ wm->codec->digitiser_ioctl(wm, WM97XX_DIG_START);
-+
-+ /* init pen down/up irq handling */
-+ if (wm->pen_irq) {
-+ wm97xx_init_pen_irq(wm);
-+
-+ if (wm->pen_irq == 0) {
-+ /* we failed to get an irq for pen down events,
-+ * so we resort to polling. kickstart the reader */
-+ wm->pen_is_down = 1;
-+ wake_up_interruptible(&wm->pen_irq_wait);
-+ }
-+ }
-+ }
-+
-+ mutex_unlock(&wm->codec_mutex);
-+ return 0;
-+}
-+
-+/**
-+ * wm97xx_ts_input_close - Close the touch screen input device.
-+ * @idev: Input device to be closed.
-+ *
-+ * Called by the input sub system to close a wm97xx touchscreen device.
-+ * Kills the touchscreen thread and stops the touch digitiser.
-+ */
-+
-+static void wm97xx_ts_input_close(struct input_dev *idev)
-+{
-+ struct wm97xx *wm = (struct wm97xx *) idev->private;
-+
-+ mutex_lock(&wm->codec_mutex);
-+ if (--wm->ts_use_count == 0) {
-+ /* destroy workqueues and free irqs */
-+ if (wm->pen_irq) {
-+ free_irq(wm->pen_irq, wm);
-+ destroy_workqueue(wm->pen_irq_workq);
-+ }
-+
-+ /* kill thread */
-+ if (wm->ts_task) {
-+ wm->ts_task = NULL;
-+ wm->pen_is_down = 1;
-+ wake_up_interruptible(&wm->pen_irq_wait);
-+ wait_for_completion(&wm->ts_exit);
-+ wm->pen_is_down = 0;
-+ }
-+
-+ /* stop digitiser */
-+ wm->codec->digitiser_ioctl(wm, WM97XX_DIG_STOP);
-+ if (wm->mach_ops && wm->mach_ops->acc_enabled)
-+ wm->codec->acc_enable(wm, 0);
-+ }
-+ mutex_unlock(&wm->codec_mutex);
-+}
-+
-+static int wm97xx_bus_match(struct device *dev, struct device_driver *drv)
-+{
-+ return !(strcmp(dev->bus_id,drv->name));
-+}
-+
-+/*
-+ * The AC97 audio driver will do all the Codec suspend and resume
-+ * tasks. This is just for anything machine specific or extra.
-+ */
-+static int wm97xx_bus_suspend(struct device *dev, pm_message_t state)
-+{
-+ int ret = 0;
-+
-+ if (dev->driver && dev->driver->suspend)
-+ ret = dev->driver->suspend(dev, state);
-+
-+ return ret;
-+}
-+
-+static int wm97xx_bus_resume(struct device *dev)
-+{
-+ int ret = 0;
-+
-+ if (dev->driver && dev->driver->resume)
-+ ret = dev->driver->resume(dev);
-+
-+ return ret;
-+}
-+
-+struct bus_type wm97xx_bus_type = {
-+ .name = "wm97xx",
-+ .match = wm97xx_bus_match,
-+ .suspend = wm97xx_bus_suspend,
-+ .resume = wm97xx_bus_resume,
-+};
-+
-+static void wm97xx_release(struct device *dev)
-+{
-+ kfree(dev);
-+}
-+
-+static int wm97xx_probe(struct device *dev)
-+{
-+ struct wm97xx* wm;
-+ int ret = 0, id = 0;
-+
-+ if (!(wm = kzalloc(sizeof(struct wm97xx), GFP_KERNEL)))
-+ return -ENOMEM;
-+ mutex_init(&wm->codec_mutex);
-+
-+ init_waitqueue_head(&wm->pen_irq_wait);
-+ wm->dev = dev;
-+ dev->driver_data = wm;
-+ wm->ac97 = to_ac97_t(dev);
-+
-+ /* check that we have a supported codec */
-+ if ((id = wm97xx_reg_read(wm, AC97_VENDOR_ID1)) != WM97XX_ID1) {
-+ err("could not find a wm97xx, found a %x instead\n", id);
-+ kfree(wm);
-+ return -ENODEV;
-+ }
-+
-+ wm->id = wm97xx_reg_read(wm, AC97_VENDOR_ID2);
-+ if(wm->id != wm97xx_codec.id) {
-+ err("could not find a the selected codec, please build for wm97%2x", wm->id & 0xff);
-+ kfree(wm);
-+ return -ENODEV;
-+ }
-+
-+ if((wm->input_dev = input_allocate_device()) == NULL) {
-+ kfree(wm);
-+ return -ENOMEM;
-+ }
-+
-+ /* set up touch configuration */
-+ info("detected a wm97%2x codec", wm->id & 0xff);
-+ wm->input_dev->name = "wm97xx touchscreen";
-+ wm->input_dev->open = wm97xx_ts_input_open;
-+ wm->input_dev->close = wm97xx_ts_input_close;
-+ set_bit(EV_ABS, wm->input_dev->evbit);
-+ set_bit(ABS_X, wm->input_dev->absbit);
-+ set_bit(ABS_Y, wm->input_dev->absbit);
-+ set_bit(ABS_PRESSURE, wm->input_dev->absbit);
-+ wm->input_dev->absmax[ABS_X] = abs_x[1];
-+ wm->input_dev->absmax[ABS_Y] = abs_y[1];
-+ wm->input_dev->absmax[ABS_PRESSURE] = abs_p[1];
-+ wm->input_dev->absmin[ABS_X] = abs_x[0];
-+ wm->input_dev->absmin[ABS_Y] = abs_y[0];
-+ wm->input_dev->absmin[ABS_PRESSURE] = abs_p[0];
-+ wm->input_dev->absfuzz[ABS_X] = abs_x[2];
-+ wm->input_dev->absfuzz[ABS_Y] = abs_y[2];
-+ wm->input_dev->absfuzz[ABS_PRESSURE] = abs_p[2];
-+ wm->input_dev->private = wm;
-+ wm->codec = &wm97xx_codec;
-+ if((ret = input_register_device(wm->input_dev)) < 0) {
-+ kfree(wm);
-+ return -ENOMEM;
-+ }
-+
-+ if(aux_sys)
-+ wm97xx_sys_add(dev);
-+
-+ /* set up physical characteristics */
-+ wm->codec->digitiser_ioctl(wm, WM97XX_PHY_INIT);
-+
-+ /* load gpio cache */
-+ wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG);
-+ wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
-+ wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY);
-+ wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP);
-+ wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
-+ wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE);
-+
-+ /* register our battery device */
-+ if (!(wm->battery_dev = kzalloc(sizeof(struct device), GFP_KERNEL))) {
-+ ret = -ENOMEM;
-+ goto batt_err;
-+ }
-+ wm->battery_dev->bus = &wm97xx_bus_type;
-+ strcpy(wm->battery_dev->bus_id,"wm97xx-battery");
-+ wm->battery_dev->driver_data = wm;
-+ wm->battery_dev->parent = dev;
-+ wm->battery_dev->release = wm97xx_release;
-+ if((ret = device_register(wm->battery_dev)) < 0)
-+ goto batt_reg_err;
-+
-+ /* register our extended touch device (for machine specific extensions) */
-+ if (!(wm->touch_dev = kzalloc(sizeof(struct device), GFP_KERNEL))) {
-+ ret = -ENOMEM;
-+ goto touch_err;
-+ }
-+ wm->touch_dev->bus = &wm97xx_bus_type;
-+ strcpy(wm->touch_dev->bus_id,"wm97xx-touchscreen");
-+ wm->touch_dev->driver_data = wm;
-+ wm->touch_dev->parent = dev;
-+ wm->touch_dev->release = wm97xx_release;
-+ if((ret = device_register(wm->touch_dev)) < 0)
-+ goto touch_reg_err;
-+
-+ return ret;
-+
-+touch_reg_err:
-+ kfree(wm->touch_dev);
-+touch_err:
-+ device_unregister(wm->battery_dev);
-+batt_reg_err:
-+ kfree(wm->battery_dev);
-+batt_err:
-+ input_unregister_device(wm->input_dev);
-+ kfree(wm);
-+ return ret;
-+}
-+
-+static int wm97xx_remove(struct device *dev)
-+{
-+ struct wm97xx *wm = dev_get_drvdata(dev);
-+
-+ /* Stop touch reader thread */
-+ if (wm->ts_task) {
-+ wm->ts_task = NULL;
-+ wm->pen_is_down = 1;
-+ wake_up_interruptible(&wm->pen_irq_wait);
-+ wait_for_completion(&wm->ts_exit);
-+ }
-+ device_unregister(wm->battery_dev);
-+ device_unregister(wm->touch_dev);
-+ input_unregister_device(wm->input_dev);
-+
-+ if(aux_sys)
-+ wm97xx_sys_remove(dev);
-+
-+ kfree(wm);
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+int wm97xx_resume(struct device* dev)
-+{
-+ struct wm97xx *wm = dev_get_drvdata(dev);
-+
-+ /* restore digitiser and gpio's */
-+ if(wm->id == WM9713_ID2) {
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG1, wm->dig[0]);
-+ wm97xx_reg_write(wm, 0x5a, wm->misc);
-+ if(wm->ts_use_count) {
-+ u16 reg = wm97xx_reg_read(wm, AC97_EXTENDED_MID) & 0x7fff;
-+ wm97xx_reg_write(wm, AC97_EXTENDED_MID, reg);
-+ }
-+ }
-+
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG2, wm->dig[1]);
-+ wm97xx_reg_write(wm, AC97_WM9713_DIG3, wm->dig[2]);
-+
-+ wm97xx_reg_write(wm, AC97_GPIO_CFG, wm->gpio[0]);
-+ wm97xx_reg_write(wm, AC97_GPIO_POLARITY, wm->gpio[1]);
-+ wm97xx_reg_write(wm, AC97_GPIO_STICKY, wm->gpio[2]);
-+ wm97xx_reg_write(wm, AC97_GPIO_WAKEUP, wm->gpio[3]);
-+ wm97xx_reg_write(wm, AC97_GPIO_STATUS, wm->gpio[4]);
-+ wm97xx_reg_write(wm, AC97_MISC_AFE, wm->gpio[5]);
-+
-+ return 0;
-+}
-+
-+#else
-+#define wm97xx_resume NULL
-+#endif
-+
-+int wm97xx_register_mach_ops(struct wm97xx *wm, struct wm97xx_mach_ops *mach_ops)
-+{
-+ mutex_lock(&wm->codec_mutex);
-+ if(wm->mach_ops) {
-+ mutex_unlock(&wm->codec_mutex);
-+ return -EINVAL;
-+ }
-+ wm->mach_ops = mach_ops;
-+ mutex_unlock(&wm->codec_mutex);
-+ return 0;
-+}
-+
-+void wm97xx_unregister_mach_ops(struct wm97xx *wm)
-+{
-+ mutex_lock(&wm->codec_mutex);
-+ wm->mach_ops = NULL;
-+ mutex_unlock(&wm->codec_mutex);
-+}
-+
-+static struct device_driver wm97xx_driver = {
-+ .name = "ac97",
-+ .bus = &ac97_bus_type,
-+ .owner = THIS_MODULE,
-+ .probe = wm97xx_probe,
-+ .remove = wm97xx_remove,
-+ .resume = wm97xx_resume,
-+};
-+
-+static int __init wm97xx_init(void)
-+{
-+ int ret;
-+
-+ info("version %s liam.girdwood@wolfsonmicro.com", WM_CORE_VERSION);
-+ if((ret = bus_register(&wm97xx_bus_type)) < 0)
-+ return ret;
-+ return driver_register(&wm97xx_driver);
-+}
-+
-+static void __exit wm97xx_exit(void)
-+{
-+ driver_unregister(&wm97xx_driver);
-+ bus_unregister(&wm97xx_bus_type);
-+}
-+
-+EXPORT_SYMBOL_GPL(wm97xx_get_gpio);
-+EXPORT_SYMBOL_GPL(wm97xx_set_gpio);
-+EXPORT_SYMBOL_GPL(wm97xx_config_gpio);
-+EXPORT_SYMBOL_GPL(wm97xx_read_aux_adc);
-+EXPORT_SYMBOL_GPL(wm97xx_reg_read);
-+EXPORT_SYMBOL_GPL(wm97xx_reg_write);
-+EXPORT_SYMBOL_GPL(wm97xx_bus_type);
-+EXPORT_SYMBOL_GPL(wm97xx_register_mach_ops);
-+EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops);
-+
-+module_init(wm97xx_init);
-+module_exit(wm97xx_exit);
-+
-+/* Module information */
-+MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
-+MODULE_DESCRIPTION("WM97xx Core - Touch Screen / AUX ADC / GPIO Driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.17/include/linux/wm97xx.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.17/include/linux/wm97xx.h 2006-09-19 20:36:47.973052250 +0200
-@@ -0,0 +1,291 @@
-+
-+/*
-+ * Register bits and API for Wolfson WM97xx series of codecs
-+ */
-+
-+#ifndef _LINUX_WM97XX_H
-+#define _LINUX_WM97XX_H
-+
-+#include <sound/driver.h>
-+#include <sound/core.h>
-+#include <sound/pcm.h>
-+#include <sound/ac97_codec.h>
-+#include <sound/initval.h>
-+#include <linux/types.h>
-+#include <linux/list.h>
-+#include <linux/input.h> /* Input device layer */
-+
-+/*
-+ * WM97xx AC97 Touchscreen registers
-+ */
-+#define AC97_WM97XX_DIGITISER1 0x76
-+#define AC97_WM97XX_DIGITISER2 0x78
-+#define AC97_WM97XX_DIGITISER_RD 0x7a
-+#define AC97_WM9713_DIG1 0x74
-+#define AC97_WM9713_DIG2 AC97_WM97XX_DIGITISER1
-+#define AC97_WM9713_DIG3 AC97_WM97XX_DIGITISER2
-+
-+/*
-+ * WM97xx register bits
-+ */
-+#define WM97XX_POLL 0x8000 /* initiate a polling measurement */
-+#define WM97XX_ADCSEL_X 0x1000 /* x coord measurement */
-+#define WM97XX_ADCSEL_Y 0x2000 /* y coord measurement */
-+#define WM97XX_ADCSEL_PRES 0x3000 /* pressure measurement */
-+#define WM97XX_ADCSEL_MASK 0x7000
-+#define WM97XX_COO 0x0800 /* enable coordinate mode */
-+#define WM97XX_CTC 0x0400 /* enable continuous mode */
-+#define WM97XX_CM_RATE_93 0x0000 /* 93.75Hz continuous rate */
-+#define WM97XX_CM_RATE_187 0x0100 /* 187.5Hz continuous rate */
-+#define WM97XX_CM_RATE_375 0x0200 /* 375Hz continuous rate */
-+#define WM97XX_CM_RATE_750 0x0300 /* 750Hz continuous rate */
-+#define WM97XX_CM_RATE_8K 0x00f0 /* 8kHz continuous rate */
-+#define WM97XX_CM_RATE_12K 0x01f0 /* 12kHz continuous rate */
-+#define WM97XX_CM_RATE_24K 0x02f0 /* 24kHz continuous rate */
-+#define WM97XX_CM_RATE_48K 0x03f0 /* 48kHz continuous rate */
-+#define WM97XX_CM_RATE_MASK 0x03f0
-+#define WM97XX_RATE(i) (((i & 3) << 8) | ((i & 4) ? 0xf0 : 0))
-+#define WM97XX_DELAY(i) ((i << 4) & 0x00f0) /* sample delay times */
-+#define WM97XX_DELAY_MASK 0x00f0
-+#define WM97XX_SLEN 0x0008 /* slot read back enable */
-+#define WM97XX_SLT(i) ((i - 5) & 0x7) /* touchpanel slot selection (5-11) */
-+#define WM97XX_SLT_MASK 0x0007
-+#define WM97XX_PRP_DETW 0x4000 /* pen detect on, digitiser off, wake up */
-+#define WM97XX_PRP_DET 0x8000 /* pen detect on, digitiser off, no wake up */
-+#define WM97XX_PRP_DET_DIG 0xc000 /* pen detect on, digitiser on */
-+#define WM97XX_RPR 0x2000 /* wake up on pen down */
-+#define WM97XX_PEN_DOWN 0x8000 /* pen is down */
-+#define WM97XX_ADCSRC_MASK 0x7000 /* ADC source mask */
-+
-+#define WM97XX_AUX_ID1 0x8001
-+#define WM97XX_AUX_ID2 0x8002
-+#define WM97XX_AUX_ID3 0x8003
-+#define WM97XX_AUX_ID4 0x8004
-+
-+
-+/* WM9712 Bits */
-+#define WM9712_45W 0x1000 /* set for 5-wire touchscreen */
-+#define WM9712_PDEN 0x0800 /* measure only when pen down */
-+#define WM9712_WAIT 0x0200 /* wait until adc is read before next sample */
-+#define WM9712_PIL 0x0100 /* current used for pressure measurement. set 400uA else 200uA */
-+#define WM9712_MASK_HI 0x0040 /* hi on mask pin (47) stops conversions */
-+#define WM9712_MASK_EDGE 0x0080 /* rising/falling edge on pin delays sample */
-+#define WM9712_MASK_SYNC 0x00c0 /* rising/falling edge on mask initiates sample */
-+#define WM9712_RPU(i) (i&0x3f) /* internal pull up on pen detect (64k / rpu) */
-+#define WM9712_PD(i) (0x1 << i) /* power management */
-+
-+/* WM9712 Registers */
-+#define AC97_WM9712_POWER 0x24
-+#define AC97_WM9712_REV 0x58
-+
-+/* WM9705 Bits */
-+#define WM9705_PDEN 0x1000 /* measure only when pen is down */
-+#define WM9705_PINV 0x0800 /* inverts sense of pen down output */
-+#define WM9705_BSEN 0x0400 /* BUSY flag enable, pin47 is 1 when busy */
-+#define WM9705_BINV 0x0200 /* invert BUSY (pin47) output */
-+#define WM9705_WAIT 0x0100 /* wait until adc is read before next sample */
-+#define WM9705_PIL 0x0080 /* current used for pressure measurement. set 400uA else 200uA */
-+#define WM9705_PHIZ 0x0040 /* set PHONE and PCBEEP inputs to high impedance */
-+#define WM9705_MASK_HI 0x0010 /* hi on mask stops conversions */
-+#define WM9705_MASK_EDGE 0x0020 /* rising/falling edge on pin delays sample */
-+#define WM9705_MASK_SYNC 0x0030 /* rising/falling edge on mask initiates sample */
-+#define WM9705_PDD(i) (i & 0x000f) /* pen detect comparator threshold */
-+
-+
-+/* WM9713 Bits */
-+#define WM9713_PDPOL 0x0400 /* Pen down polarity */
-+#define WM9713_POLL 0x0200 /* initiate a polling measurement */
-+#define WM9713_CTC 0x0100 /* enable continuous mode */
-+#define WM9713_ADCSEL_X 0x0002 /* X measurement */
-+#define WM9713_ADCSEL_Y 0x0004 /* Y measurement */
-+#define WM9713_ADCSEL_PRES 0x0008 /* Pressure measurement */
-+#define WM9713_COO 0x0001 /* enable coordinate mode */
-+#define WM9713_PDEN 0x0800 /* measure only when pen down */
-+#define WM9713_ADCSEL_MASK 0x00fe /* ADC selection mask */
-+#define WM9713_WAIT 0x0200 /* coordinate wait */
-+
-+/* AUX ADC ID's */
-+#define TS_COMP1 0x0
-+#define TS_COMP2 0x1
-+#define TS_BMON 0x2
-+#define TS_WIPER 0x3
-+
-+/* ID numbers */
-+#define WM97XX_ID1 0x574d
-+#define WM9712_ID2 0x4c12
-+#define WM9705_ID2 0x4c05
-+#define WM9713_ID2 0x4c13
-+
-+/* Codec GPIO's */
-+#define WM97XX_MAX_GPIO 16
-+#define WM97XX_GPIO_1 (1 << 1)
-+#define WM97XX_GPIO_2 (1 << 2)
-+#define WM97XX_GPIO_3 (1 << 3)
-+#define WM97XX_GPIO_4 (1 << 4)
-+#define WM97XX_GPIO_5 (1 << 5)
-+#define WM97XX_GPIO_6 (1 << 6)
-+#define WM97XX_GPIO_7 (1 << 7)
-+#define WM97XX_GPIO_8 (1 << 8)
-+#define WM97XX_GPIO_9 (1 << 9)
-+#define WM97XX_GPIO_10 (1 << 10)
-+#define WM97XX_GPIO_11 (1 << 11)
-+#define WM97XX_GPIO_12 (1 << 12)
-+#define WM97XX_GPIO_13 (1 << 13)
-+#define WM97XX_GPIO_14 (1 << 14)
-+#define WM97XX_GPIO_15 (1 << 15)
-+
-+
-+#define AC97_LINK_FRAME 21 /* time in uS for AC97 link frame */
-+
-+
-+/*---------------- Return codes from sample reading functions ---------------*/
-+
-+/* More data is available; call the sample gathering function again */
-+#define RC_AGAIN 0x00000001
-+/* The returned sample is valid */
-+#define RC_VALID 0x00000002
-+/* The pen is up (the first RC_VALID without RC_PENUP means pen is down) */
-+#define RC_PENUP 0x00000004
-+/* The pen is down (RC_VALID implies RC_PENDOWN, but sometimes it is helpful
-+ to tell the handler that the pen is down but we don't know yet his coords,
-+ so the handler should not sleep or wait for pendown irq) */
-+#define RC_PENDOWN 0x00000008
-+
-+/* The wm97xx driver provides a private API for writing platform-specific
-+ * drivers.
-+ */
-+
-+/* The structure used to return arch specific sampled data into */
-+struct wm97xx_data {
-+ int x;
-+ int y;
-+ int p;
-+};
-+
-+/* Codec GPIO status
-+ */
-+typedef enum {
-+ WM97XX_GPIO_HIGH,
-+ WM97XX_GPIO_LOW
-+} wm97xx_gpio_status_t;
-+
-+/* Codec GPIO direction
-+ */
-+typedef enum {
-+ WM97XX_GPIO_IN,
-+ WM97XX_GPIO_OUT
-+} wm97xx_gpio_dir_t;
-+
-+/* Codec GPIO polarity
-+ */
-+typedef enum {
-+ WM97XX_GPIO_POL_HIGH,
-+ WM97XX_GPIO_POL_LOW
-+} wm97xx_gpio_pol_t;
-+
-+/* Codec GPIO sticky
-+ */
-+typedef enum {
-+ WM97XX_GPIO_STICKY,
-+ WM97XX_GPIO_NOTSTICKY
-+} wm97xx_gpio_sticky_t;
-+
-+/* Codec GPIO wake
-+ */
-+typedef enum {
-+ WM97XX_GPIO_WAKE,
-+ WM97XX_GPIO_NOWAKE
-+} wm97xx_gpio_wake_t;
-+
-+
-+/*
-+ * Digitiser ioctl commands
-+ */
-+#define WM97XX_DIG_START 0x1
-+#define WM97XX_DIG_STOP 0x2
-+#define WM97XX_PHY_INIT 0x3
-+#define WM97XX_AUX_PREPARE 0x4
-+#define WM97XX_DIG_RESTORE 0x5
-+
-+struct wm97xx;
-+extern struct wm97xx_codec_drv wm97xx_codec;
-+
-+/*
-+ * Codec driver interface - allows mapping to WM9705/12/13 and newer codecs
-+ */
-+struct wm97xx_codec_drv {
-+ u16 id;
-+ char *name;
-+ int (*poll_sample) (struct wm97xx *, int adcsel, int *sample); /* read 1 sample */
-+ int (*poll_touch) (struct wm97xx *, struct wm97xx_data *); /* read X,Y,[P] in poll */
-+ int (*digitiser_ioctl) (struct wm97xx *, int cmd);
-+ int (*acc_enable) (struct wm97xx *, int enable);
-+};
-+
-+
-+/* Machine specific and accelerated touch operations */
-+struct wm97xx_mach_ops {
-+
-+ /* accelerated touch readback - coords are transmited on AC97 link */
-+ int acc_enabled;
-+ void (*acc_pen_up) (struct wm97xx *);
-+ int (*acc_pen_down) (struct wm97xx *);
-+ int (*acc_startup) (struct wm97xx *);
-+ void (*acc_shutdown) (struct wm97xx *);
-+
-+ /* pre and post sample - can be used to minimise any analog noise */
-+ void (*pre_sample) (int); /* function to run before sampling */
-+ void (*post_sample) (int); /* function to run after sampling */
-+};
-+
-+struct wm97xx {
-+ u16 dig[3], id, gpio[6], misc; /* Cached codec registers */
-+ u16 dig_save[3]; /* saved during aux reading */
-+ struct wm97xx_codec_drv *codec; /* attached codec driver*/
-+ struct input_dev* input_dev; /* touchscreen input device */
-+ ac97_t *ac97; /* ALSA codec access */
-+ struct device *dev; /* ALSA device */
-+ struct device *battery_dev;
-+ struct device *touch_dev;
-+ struct wm97xx_mach_ops *mach_ops;
-+ struct mutex codec_mutex;
-+ struct completion ts_init;
-+ struct completion ts_exit;
-+ struct task_struct *ts_task;
-+ unsigned int pen_irq; /* Pen IRQ number in use */
-+ wait_queue_head_t pen_irq_wait; /* Pen IRQ wait queue */
-+ struct workqueue_struct *pen_irq_workq;
-+ struct work_struct pen_event_work;
-+ u16 acc_slot; /* AC97 slot used for acc touch data */
-+ u16 acc_rate; /* acc touch data rate */
-+ unsigned int ts_use_count;
-+ unsigned pen_is_down:1; /* Pen is down */
-+ unsigned aux_waiting:1; /* aux measurement waiting */
-+ unsigned pen_probably_down:1; /* used in polling mode */
-+};
-+
-+/* Codec GPIO access (not supported on WM9705)
-+ * This can be used to set/get codec GPIO and Virtual GPIO status.
-+ */
-+wm97xx_gpio_status_t wm97xx_get_gpio(struct wm97xx *wm, u32 gpio);
-+void wm97xx_set_gpio(struct wm97xx *wm, u32 gpio,
-+ wm97xx_gpio_status_t status);
-+void wm97xx_config_gpio(struct wm97xx *wm, u32 gpio,
-+ wm97xx_gpio_dir_t dir,
-+ wm97xx_gpio_pol_t pol,
-+ wm97xx_gpio_sticky_t sticky,
-+ wm97xx_gpio_wake_t wake);
-+
-+/* codec AC97 IO access */
-+int wm97xx_reg_read(struct wm97xx *wm, u16 reg);
-+void wm97xx_reg_write(struct wm97xx *wm, u16 reg, u16 val);
-+
-+/* aux adc readback */
-+int wm97xx_read_aux_adc(struct wm97xx *wm, u16 adcsel);
-+
-+/* machine ops */
-+int wm97xx_register_mach_ops(struct wm97xx *, struct wm97xx_mach_ops *);
-+void wm97xx_unregister_mach_ops(struct wm97xx *);
-+
-+extern struct bus_type wm97xx_bus_type;
-+#endif
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/arm_pxa_20070923.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/arm_pxa_20070923.patch
deleted file mode 100644
index ad4ce996df..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/arm_pxa_20070923.patch
+++ /dev/null
@@ -1,5877 +0,0 @@
-# Base git commit: da8f153e51290e7438ba7da66234a864e5d3e1c1
-# (Revert "x86_64: Quicklist support for x86_64")
-#
-# Author: eric miao (Wed Sep 12 03:13:17 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:19 BST 2007)
-#
-# [ARM] pxa: PXA3xx base support
-#
-# Signed-off-by: eric miao
-# Signed-off-by: Russell King
-#
-# arch/arm/Kconfig | 6
-# arch/arm/boot/compressed/head-xscale.S | 4
-# arch/arm/mach-pxa/Kconfig | 30 +
-# arch/arm/mach-pxa/Makefile | 9
-# arch/arm/mach-pxa/clock.c | 79 ++--
-# arch/arm/mach-pxa/clock.h | 43 ++
-# arch/arm/mach-pxa/devices.h | 3
-# arch/arm/mach-pxa/generic.c | 146 ++++---
-# arch/arm/mach-pxa/generic.h | 26 +
-# arch/arm/mach-pxa/irq.c | 80 ----
-# arch/arm/mach-pxa/mfp.c | 235 ++++++++++++
-# arch/arm/mach-pxa/pxa25x.c | 90 ++++
-# arch/arm/mach-pxa/pxa27x.c | 127 ++++++
-# arch/arm/mach-pxa/pxa300.c | 93 +++++
-# arch/arm/mach-pxa/pxa320.c | 88 ++++
-# arch/arm/mach-pxa/pxa3xx.c | 216 +++++++++++
-# arch/arm/mach-pxa/time.c | 53 ++
-# arch/arm/mach-pxa/zylonite.c | 184 +++++++++
-# arch/arm/mach-pxa/zylonite_pxa300.c | 188 ++++++++++
-# arch/arm/mach-pxa/zylonite_pxa320.c | 173 +++++++++
-# arch/arm/mm/Kconfig | 4
-# drivers/i2c/busses/i2c-pxa.c | 45 +-
-# drivers/input/keyboard/pxa27x_keyboard.c | 25 +
-# drivers/mmc/host/pxamci.c | 43 +-
-# drivers/mmc/host/pxamci.h | 14
-# drivers/mtd/maps/lubbock-flash.c | 9
-# drivers/mtd/maps/mainstone-flash.c | 5
-# drivers/net/irda/pxaficp_ir.c | 51 ++
-# drivers/net/smc91x.c | 62 ---
-# drivers/net/smc91x.h | 71 +++
-# drivers/serial/pxa.c | 163 ++++----
-# drivers/serial/serial_core.c | 18
-# drivers/usb/gadget/pxa2xx_udc.c | 68 ++-
-# drivers/usb/gadget/pxa2xx_udc.h | 1
-# drivers/video/pxafb.c | 36 +
-# drivers/video/pxafb.h | 1
-# include/asm-arm/arch-pxa/hardware.h | 72 +++
-# include/asm-arm/arch-pxa/irqs.h | 6
-# include/asm-arm/arch-pxa/mfp-pxa300.h | 574 ++++++++++++++++++++++++++++++
-# include/asm-arm/arch-pxa/mfp-pxa320.h | 446 ++++++++++++++++++++++++
-# include/asm-arm/arch-pxa/mfp.h | 576 +++++++++++++++++++++++++++++++
-# include/asm-arm/arch-pxa/pxa-regs.h | 2
-# include/asm-arm/arch-pxa/pxa3xx-regs.h | 75 ++++
-# include/asm-arm/arch-pxa/timex.h | 2
-# include/asm-arm/arch-pxa/zylonite.h | 35 +
-# 45 files changed, 3825 insertions(+), 452 deletions(-)
-# create mode 100644 arch/arm/mach-pxa/mfp.c
-# create mode 100644 arch/arm/mach-pxa/pxa300.c
-# create mode 100644 arch/arm/mach-pxa/pxa320.c
-# create mode 100644 arch/arm/mach-pxa/pxa3xx.c
-# create mode 100644 arch/arm/mach-pxa/zylonite.c
-# create mode 100644 arch/arm/mach-pxa/zylonite_pxa300.c
-# create mode 100644 arch/arm/mach-pxa/zylonite_pxa320.c
-# create mode 100644 include/asm-arm/arch-pxa/mfp-pxa300.h
-# create mode 100644 include/asm-arm/arch-pxa/mfp-pxa320.h
-# create mode 100644 include/asm-arm/arch-pxa/mfp.h
-# create mode 100644 include/asm-arm/arch-pxa/pxa3xx-regs.h
-# create mode 100644 include/asm-arm/arch-pxa/zylonite.h
-#
-# Author: Russell King (Sat Sep 1 21:27:18 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:17 BST 2007)
-#
-# [NET] smc91x: fix PXA DMA support code
-#
-# The PXA DMA support code for smc91x doesn't pass a struct device to
-# the dma_*map_single() functions, which leads to an oops in the dma
-# bounce code. We have a struct device which was used to probe the
-# SMC chip. Use it.
-#
-# (This patch is slightly larger because it requires struct smc_local
-# to move into the header file.)
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Sat Sep 1 21:25:09 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:12 BST 2007)
-#
-# [SERIAL] Fix console initialisation ordering
-#
-# Ensure pm callback is called upon initialisation to place port in
-# correct power saving state. Ensure console is initialised prior
-# to deciding whether to power down the port.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Wed Sep 19 09:21:51 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:07 BST 2007)
-#
-# [ARM] pxa: tidy up arch/arm/mach-pxa/Makefile
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Sat Sep 1 21:28:55 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:03 BST 2007)
-#
-# [ARM] lubbock, mainstone: only initialise if running on that platform
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: eric miao (Wed Aug 29 10:22:17 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:01 BST 2007)
-#
-# [ARM] 4560/1: pxa: move processor specific set_wake logic out of irq.c
-#
-# a function pxa_init_irq_set_wake() was introduced, so that
-# processor specific code could install their own version
-#
-# code setting PFER and PRER registers within pxa_gpio_irq_type
-# are removed, and the edge configuration is postponed to the
-# (*set_wake) and copies the GRER and GFER register, which will
-# always be set up correctly by pxa_gpio_irq_type()
-#
-# Signed-off-by: eric miao
-# Signed-off-by: Russell King
-#
-#
-# Author: eric miao (Wed Aug 29 10:18:47 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:59 BST 2007)
-#
-# [ARM] 4559/1: pxa: make PXA_LAST_GPIO a run-time variable
-#
-# This definition produces processor specific code in generic function
-# pxa_gpio_mode(), thus creating inconsistencies for support of pxa25x
-# and pxa27x in a single zImage.
-#
-# As David Brownell suggests, make it a run-time variable and initialize
-# at run-time according to the number of GPIOs on the processor. For now
-# the initialization happens in pxa_init_irq_gpio(), since there is
-# already a parameter for that, besides, this is and MUST be earlier
-# than any subsequent calls to pxa_gpio_mode().
-#
-# Signed-off-by: eric miao
-# Signed-off-by: Russell King
-#
-#
-# Author: eric miao (Wed Aug 29 10:15:41 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:57 BST 2007)
-#
-# [ARM] 4558/1: pxa: remove MACH_TYPE_LUBBOCK assignment and leave it to boot loader
-#
-# since both u-boot and blob support passing MACH_TYPE_LUBBOCK to the
-# kernel, it should be quite safe to remove this
-#
-# Signed-off-by: eric miao
-# Acked-by: Nicolas Pitre
-# Signed-off-by: Russell King
-#
-#
-# Author: eric miao (Wed Sep 12 03:13:17 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:55 BST 2007)
-#
-# [ARM] pxa: add PXA3 cpu_is_xxx() macros
-#
-# Extracted from patch by Eric Miao, this adds the cpu_is_xxx() macros
-# for identifying PXA3 SoCs.
-#
-# Signed-off-by: eric miao
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Wed Sep 19 09:38:32 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:51 BST 2007)
-#
-# [ARM] pxa: Make CPU_XSCALE depend on PXA25x or PXA27x
-#
-# PXA3 SoCs are supported by the Xscale3 CPU code rather than the
-# Xscale CPU code.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Wed Sep 19 09:33:55 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:48 BST 2007)
-#
-# [ARM] pxa: mark pxa_set_cken deprecated
-#
-# Allow the generic clock support code to fiddle with the CKEN register
-# and mark pxa_set_cken() deprecated.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:34:37 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:43 BST 2007)
-#
-# [ARM] pxa: remove get_lcdclk_frequency_10khz()
-#
-# get_lcdclk_frequency_10khz() is now redundant, remove it. Hide
-# pxa27x_get_lcdclk_frequency_10khz() from public view.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Sun Sep 2 17:09:23 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:39 BST 2007)
-#
-# [ARM] pxa: update pxa irda driver to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Sun Sep 2 17:08:42 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:36 BST 2007)
-#
-# [ARM] pxa: Make STUART and FICP clocks available
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:33:35 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:34 BST 2007)
-#
-# [ARM] pxa: update PXA UDC driver to use clk support
-#
-# Note: this produces a WARN() dump.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:28:15 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:31 BST 2007)
-#
-# [ARM] pxa: update pxa serial driver to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:20:03 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:27 BST 2007)
-#
-# [ARM] pxa: update PXA MMC interface driver to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:19:39 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:23 BST 2007)
-#
-# [ARM] pxa: update pxa27x keypad driver to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:19:10 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:19 BST 2007)
-#
-# [ARM] pxa: update pxa i2c driver to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:18:42 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:16:50 BST 2007)
-#
-# [ARM] pxa: update pxafb to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:18:02 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:09 BST 2007)
-#
-# [ARM] pxa: introduce clk support for PXA SoC clocks
-#
-# Signed-off-by: Russell King
-#
-# create mode 100644 arch/arm/mach-pxa/clock.h
-#
-# Author: Russell King (Mon Aug 20 10:09:18 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:09 BST 2007)
-#
-# [ARM] pxa: make pxa27x devices globally visible
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:07:44 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:08 BST 2007)
-#
-# [ARM] pxa: fix naming of memory/lcd/core clock functions
-#
-# Rename pxa25x and pxa27x memory/lcd/core clock functions, and
-# select the correct version at run time.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 09:47:41 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:08 BST 2007)
-#
-# [ARM] pxa: convert PXA serial drivers to use platform resources
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Sat Sep 1 21:12:50 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:07 BST 2007)
-#
-# [ARM] pxa: make pxa timer initialisation select clock rate at runtime
-#
-# Rather than using the compile-time constant CLOCK_TICK_RATE, select
-# the clock tick rate at run time. We organise the selection so that
-# PXA3 automatically falls out with the right tick rate.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Nicolas Pitre (Fri Aug 17 16:55:22 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:05 BST 2007)
-#
-# [ARM] 4550/1: sched_clock on PXA should cope with run time clock rate selection
-#
-# The previous implementation was relying on compile time optimizations
-# based on a constant clock rate. However, support for different PXA
-# flavors in the same kernel binary requires that the clock be selected at
-# run time, so here it is.
-#
-# Let's move this code to a more appropriate location while at it.
-#
-# Signed-off-by: Nicolas Pitre
-# Signed-off-by: Russell King
-#
-#
---- linux-2.6.23.orig/arch/arm/Kconfig
-+++ linux-2.6.23/arch/arm/Kconfig
-@@ -336,14 +336,14 @@
- This enables support for Philips PNX4008 mobile platform.
-
- config ARCH_PXA
-- bool "PXA2xx-based"
-+ bool "PXA2xx/PXA3xx-based"
- depends on MMU
- select ARCH_MTD_XIP
- select GENERIC_GPIO
- select GENERIC_TIME
- select GENERIC_CLOCKEVENTS
- help
-- Support for Intel's PXA2XX processor line.
-+ Support for Intel/Marvell's PXA2xx/PXA3xx processor line.
-
- config ARCH_RPC
- bool "RiscPC"
-@@ -486,7 +486,7 @@
- config IWMMXT
- bool "Enable iWMMXt support"
- depends on CPU_XSCALE || CPU_XSC3
-- default y if PXA27x
-+ default y if PXA27x || PXA3xx
- help
- Enable support for iWMMXt context switching at run time if
- running on a CPU that supports it.
---- linux-2.6.23.orig/arch/arm/boot/compressed/head-xscale.S
-+++ linux-2.6.23/arch/arm/boot/compressed/head-xscale.S
-@@ -33,10 +33,6 @@
- bic r0, r0, #0x1000 @ clear Icache
- mcr p15, 0, r0, c1, c0, 0
-
--#ifdef CONFIG_ARCH_LUBBOCK
-- mov r7, #MACH_TYPE_LUBBOCK
--#endif
--
- #ifdef CONFIG_ARCH_COTULLA_IDP
- mov r7, #MACH_TYPE_COTULLA_IDP
- #endif
---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig
-+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig
-@@ -1,6 +1,24 @@
- if ARCH_PXA
-
--menu "Intel PXA2xx Implementations"
-+menu "Intel PXA2xx/PXA3xx Implementations"
-+
-+if PXA3xx
-+
-+menu "Supported PXA3xx Processor Variants"
-+
-+config CPU_PXA300
-+ bool "PXA300 (codename Monahans-L)"
-+
-+config CPU_PXA310
-+ bool "PXA310 (codename Monahans-LV)"
-+ select CPU_PXA300
-+
-+config CPU_PXA320
-+ bool "PXA320 (codename Monahans-P)"
-+
-+endmenu
-+
-+endif
-
- choice
- prompt "Select target board"
-@@ -41,6 +59,11 @@
- bool "CompuLab EM-x270 platform"
- select PXA27x
-
-+
-+config MACH_ZYLONITE
-+ bool "PXA3xx Development Platform"
-+ select PXA3xx
-+
- config MACH_HX2750
- bool "HP iPAQ hx2750"
- select PXA27x
-@@ -228,6 +251,11 @@
- help
- Select code specific to PXA27x variants
-
-+config PXA3xx
-+ bool
-+ help
-+ Select code specific to PXA3xx variants
-+
- config PXA_SHARP_C7xx
- bool
- select PXA_SSP
---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile
-+++ linux-2.6.23/arch/arm/mach-pxa/Makefile
-@@ -6,6 +6,9 @@
- obj-y += clock.o generic.o irq.o dma.o time.o
- obj-$(CONFIG_PXA25x) += pxa25x.o
- obj-$(CONFIG_PXA27x) += pxa27x.o
-+obj-$(CONFIG_PXA3xx) += pxa3xx.o mfp.o
-+obj-$(CONFIG_CPU_PXA300) += pxa300.o
-+obj-$(CONFIG_CPU_PXA320) += pxa320.o
-
- # Specific board support
- obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o
-@@ -19,6 +22,12 @@
- obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o sharpsl_pm.o poodle_pm.o
- obj-$(CONFIG_MACH_TOSA) += tosa.o
- obj-$(CONFIG_MACH_EM_X270) += em-x270.o
-+ifeq ($(CONFIG_MACH_ZYLONITE),y)
-+ obj-y += zylonite.o
-+ obj-$(CONFIG_CPU_PXA300) += zylonite_pxa300.o
-+ obj-$(CONFIG_CPU_PXA320) += zylonite_pxa320.o
-+endif
-+
- obj-$(CONFIG_MACH_HX2750) += hx2750.o hx2750_test.o
- obj-$(CONFIG_MACH_HTCUNIVERSAL) += htcuniversal/
-
---- linux-2.6.23.orig/arch/arm/mach-pxa/clock.c
-+++ linux-2.6.23/arch/arm/mach-pxa/clock.c
-@@ -9,19 +9,15 @@
- #include <linux/string.h>
- #include <linux/clk.h>
- #include <linux/spinlock.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-
- #include <asm/arch/pxa-regs.h>
- #include <asm/hardware.h>
-
--struct clk {
-- struct list_head node;
-- unsigned long rate;
-- struct module *owner;
-- const char *name;
-- unsigned int enabled;
-- void (*enable)(void);
-- void (*disable)(void);
--};
-+#include "devices.h"
-+#include "generic.h"
-+#include "clock.h"
-
- static LIST_HEAD(clocks);
- static DEFINE_MUTEX(clocks_mutex);
-@@ -33,7 +29,8 @@
-
- mutex_lock(&clocks_mutex);
- list_for_each_entry(p, &clocks, node) {
-- if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
-+ if (strcmp(id, p->name) == 0 &&
-+ (p->dev == NULL || p->dev == dev)) {
- clk = p;
- break;
- }
-@@ -46,7 +43,6 @@
-
- void clk_put(struct clk *clk)
- {
-- module_put(clk->owner);
- }
- EXPORT_SYMBOL(clk_put);
-
-@@ -56,8 +52,12 @@
-
- spin_lock_irqsave(&clocks_lock, flags);
- if (clk->enabled++ == 0)
-- clk->enable();
-+ clk->ops->enable(clk);
- spin_unlock_irqrestore(&clocks_lock, flags);
-+
-+ if (clk->delay)
-+ udelay(clk->delay);
-+
- return 0;
- }
- EXPORT_SYMBOL(clk_enable);
-@@ -70,54 +70,75 @@
-
- spin_lock_irqsave(&clocks_lock, flags);
- if (--clk->enabled == 0)
-- clk->disable();
-+ clk->ops->disable(clk);
- spin_unlock_irqrestore(&clocks_lock, flags);
- }
- EXPORT_SYMBOL(clk_disable);
-
- unsigned long clk_get_rate(struct clk *clk)
- {
-- return clk->rate;
-+ unsigned long rate;
-+
-+ rate = clk->rate;
-+ if (clk->ops->getrate)
-+ rate = clk->ops->getrate(clk);
-+
-+ return rate;
- }
- EXPORT_SYMBOL(clk_get_rate);
-
-
--static void clk_gpio27_enable(void)
-+static void clk_gpio27_enable(struct clk *clk)
- {
- pxa_gpio_mode(GPIO11_3_6MHz_MD);
- }
-
--static void clk_gpio27_disable(void)
-+static void clk_gpio27_disable(struct clk *clk)
- {
- }
-
--static struct clk clk_gpio27 = {
-- .name = "GPIO27_CLK",
-- .rate = 3686400,
-+static const struct clkops clk_gpio27_ops = {
- .enable = clk_gpio27_enable,
- .disable = clk_gpio27_disable,
- };
-
--int clk_register(struct clk *clk)
-+
-+void clk_cken_enable(struct clk *clk)
- {
-- mutex_lock(&clocks_mutex);
-- list_add(&clk->node, &clocks);
-- mutex_unlock(&clocks_mutex);
-- return 0;
-+ CKEN |= 1 << clk->cken;
- }
--EXPORT_SYMBOL(clk_register);
-
--void clk_unregister(struct clk *clk)
-+void clk_cken_disable(struct clk *clk)
- {
-+ CKEN &= ~(1 << clk->cken);
-+}
-+
-+const struct clkops clk_cken_ops = {
-+ .enable = clk_cken_enable,
-+ .disable = clk_cken_disable,
-+};
-+
-+static struct clk common_clks[] = {
-+ {
-+ .name = "GPIO27_CLK",
-+ .ops = &clk_gpio27_ops,
-+ .rate = 3686400,
-+ },
-+};
-+
-+void clks_register(struct clk *clks, size_t num)
-+{
-+ int i;
-+
- mutex_lock(&clocks_mutex);
-- list_del(&clk->node);
-+ for (i = 0; i < num; i++)
-+ list_add(&clks[i].node, &clocks);
- mutex_unlock(&clocks_mutex);
- }
--EXPORT_SYMBOL(clk_unregister);
-
- static int __init clk_init(void)
- {
-- clk_register(&clk_gpio27);
-+ clks_register(common_clks, ARRAY_SIZE(common_clks));
- return 0;
- }
- arch_initcall(clk_init);
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/clock.h
-@@ -0,0 +1,43 @@
-+struct clk;
-+
-+struct clkops {
-+ void (*enable)(struct clk *);
-+ void (*disable)(struct clk *);
-+ unsigned long (*getrate)(struct clk *);
-+};
-+
-+struct clk {
-+ struct list_head node;
-+ const char *name;
-+ struct device *dev;
-+ const struct clkops *ops;
-+ unsigned long rate;
-+ unsigned int cken;
-+ unsigned int delay;
-+ unsigned int enabled;
-+};
-+
-+#define INIT_CKEN(_name, _cken, _rate, _delay, _dev) \
-+ { \
-+ .name = _name, \
-+ .dev = _dev, \
-+ .ops = &clk_cken_ops, \
-+ .rate = _rate, \
-+ .cken = CKEN_##_cken, \
-+ .delay = _delay, \
-+ }
-+
-+#define INIT_CK(_name, _cken, _ops, _dev) \
-+ { \
-+ .name = _name, \
-+ .dev = _dev, \
-+ .ops = _ops, \
-+ .cken = CKEN_##_cken, \
-+ }
-+
-+extern const struct clkops clk_cken_ops;
-+
-+void clk_cken_enable(struct clk *clk);
-+void clk_cken_disable(struct clk *clk);
-+
-+void clks_register(struct clk *clks, size_t num);
---- linux-2.6.23.orig/arch/arm/mach-pxa/devices.h
-+++ linux-2.6.23/arch/arm/mach-pxa/devices.h
-@@ -9,3 +9,6 @@
- extern struct platform_device pxa_device_i2s;
- extern struct platform_device pxa_device_ficp;
- extern struct platform_device pxa_device_rtc;
-+
-+extern struct platform_device pxa27x_device_i2c_power;
-+extern struct platform_device pxa27x_device_ohci;
---- linux-2.6.23.orig/arch/arm/mach-pxa/generic.c
-+++ linux-2.6.23/arch/arm/mach-pxa/generic.c
-@@ -25,10 +25,6 @@
- #include <linux/pm.h>
- #include <linux/string.h>
-
--#include <linux/sched.h>
--#include <asm/cnt32_to_63.h>
--#include <asm/div64.h>
--
- #include <asm/hardware.h>
- #include <asm/irq.h>
- #include <asm/system.h>
-@@ -48,66 +44,39 @@
- #include "generic.h"
-
- /*
-- * This is the PXA2xx sched_clock implementation. This has a resolution
-- * of at least 308ns and a maximum value that depends on the value of
-- * CLOCK_TICK_RATE.
-- *
-- * The return value is guaranteed to be monotonic in that range as
-- * long as there is always less than 582 seconds between successive
-- * calls to this function.
-+ * Get the clock frequency as reflected by CCCR and the turbo flag.
-+ * We assume these values have been applied via a fcs.
-+ * If info is not 0 we also display the current settings.
- */
--unsigned long long sched_clock(void)
-+unsigned int get_clk_frequency_khz(int info)
- {
-- unsigned long long v = cnt32_to_63(OSCR);
-- /* Note: top bit ov v needs cleared unless multiplier is even. */
--
--#if CLOCK_TICK_RATE == 3686400
-- /* 1E9 / 3686400 => 78125 / 288, max value = 32025597s (370 days). */
-- /* The <<1 is used to get rid of tick.hi top bit */
-- v *= 78125<<1;
-- do_div(v, 288<<1);
--#elif CLOCK_TICK_RATE == 3250000
-- /* 1E9 / 3250000 => 4000 / 13, max value = 709490156s (8211 days) */
-- v *= 4000;
-- do_div(v, 13);
--#elif CLOCK_TICK_RATE == 3249600
-- /* 1E9 / 3249600 => 625000 / 2031, max value = 4541295s (52 days) */
-- v *= 625000;
-- do_div(v, 2031);
--#else
--#warning "consider fixing sched_clock for your value of CLOCK_TICK_RATE"
-- /*
-- * 96-bit math to perform tick * NSEC_PER_SEC / CLOCK_TICK_RATE for
-- * any value of CLOCK_TICK_RATE. Max value is in the 80 thousand
-- * years range and truncation to unsigned long long limits it to
-- * sched_clock's max range of ~584 years. This is nice but with
-- * higher computation cost.
-- */
-- {
-- union {
-- unsigned long long val;
-- struct { unsigned long lo, hi; };
-- } x;
-- unsigned long long y;
--
-- x.val = v;
-- x.hi &= 0x7fffffff;
-- y = (unsigned long long)x.lo * NSEC_PER_SEC;
-- x.lo = y;
-- y = (y >> 32) + (unsigned long long)x.hi * NSEC_PER_SEC;
-- x.hi = do_div(y, CLOCK_TICK_RATE);
-- do_div(x.val, CLOCK_TICK_RATE);
-- x.hi += y;
-- v = x.val;
-- }
--#endif
-+ if (cpu_is_pxa21x() || cpu_is_pxa25x())
-+ return pxa25x_get_clk_frequency_khz(info);
-+ else if (cpu_is_pxa27x())
-+ return pxa27x_get_clk_frequency_khz(info);
-+ else
-+ return pxa3xx_get_clk_frequency_khz(info);
-+}
-+EXPORT_SYMBOL(get_clk_frequency_khz);
-
-- return v;
-+/*
-+ * Return the current memory clock frequency in units of 10kHz
-+ */
-+unsigned int get_memclk_frequency_10khz(void)
-+{
-+ if (cpu_is_pxa21x() || cpu_is_pxa25x())
-+ return pxa25x_get_memclk_frequency_10khz();
-+ else if (cpu_is_pxa27x())
-+ return pxa27x_get_memclk_frequency_10khz();
-+ else
-+ return pxa3xx_get_memclk_frequency_10khz();
- }
-+EXPORT_SYMBOL(get_memclk_frequency_10khz);
-
- /*
- * Handy function to set GPIO alternate functions
- */
-+int pxa_last_gpio;
-
- int pxa_gpio_mode(int gpio_mode)
- {
-@@ -116,7 +85,7 @@
- int fn = (gpio_mode & GPIO_MD_MASK_FN) >> 8;
- int gafr;
-
-- if (gpio > PXA_LAST_GPIO)
-+ if (gpio > pxa_last_gpio)
- return -EINVAL;
-
- local_irq_save(flags);
-@@ -160,7 +129,7 @@
- /*
- * Routine to safely enable or disable a clock in the CKEN
- */
--void pxa_set_cken(int clock, int enable)
-+void __pxa_set_cken(int clock, int enable)
- {
- unsigned long flags;
- local_irq_save(flags);
-@@ -173,7 +142,7 @@
- local_irq_restore(flags);
- }
-
--EXPORT_SYMBOL(pxa_set_cken);
-+EXPORT_SYMBOL(__pxa_set_cken);
-
- /*
- * Intel PXA2xx internal register mapping.
-@@ -330,21 +299,80 @@
- pxa_device_fb.dev.parent = parent_dev;
- }
-
-+static struct resource pxa_resource_ffuart[] = {
-+ {
-+ .start = __PREG(FFUART),
-+ .end = __PREG(FFUART) + 35,
-+ .flags = IORESOURCE_MEM,
-+ }, {
-+ .start = IRQ_FFUART,
-+ .end = IRQ_FFUART,
-+ .flags = IORESOURCE_IRQ,
-+ }
-+};
-+
- struct platform_device pxa_device_ffuart= {
- .name = "pxa2xx-uart",
- .id = 0,
-+ .resource = pxa_resource_ffuart,
-+ .num_resources = ARRAY_SIZE(pxa_resource_ffuart),
-+};
-+
-+static struct resource pxa_resource_btuart[] = {
-+ {
-+ .start = __PREG(BTUART),
-+ .end = __PREG(BTUART) + 35,
-+ .flags = IORESOURCE_MEM,
-+ }, {
-+ .start = IRQ_BTUART,
-+ .end = IRQ_BTUART,
-+ .flags = IORESOURCE_IRQ,
-+ }
- };
-+
- struct platform_device pxa_device_btuart = {
- .name = "pxa2xx-uart",
- .id = 1,
-+ .resource = pxa_resource_btuart,
-+ .num_resources = ARRAY_SIZE(pxa_resource_btuart),
- };
-+
-+static struct resource pxa_resource_stuart[] = {
-+ {
-+ .start = __PREG(STUART),
-+ .end = __PREG(STUART) + 35,
-+ .flags = IORESOURCE_MEM,
-+ }, {
-+ .start = IRQ_STUART,
-+ .end = IRQ_STUART,
-+ .flags = IORESOURCE_IRQ,
-+ }
-+};
-+
- struct platform_device pxa_device_stuart = {
- .name = "pxa2xx-uart",
- .id = 2,
-+ .resource = pxa_resource_stuart,
-+ .num_resources = ARRAY_SIZE(pxa_resource_stuart),
-+};
-+
-+static struct resource pxa_resource_hwuart[] = {
-+ {
-+ .start = __PREG(HWUART),
-+ .end = __PREG(HWUART) + 47,
-+ .flags = IORESOURCE_MEM,
-+ }, {
-+ .start = IRQ_HWUART,
-+ .end = IRQ_HWUART,
-+ .flags = IORESOURCE_IRQ,
-+ }
- };
-+
- struct platform_device pxa_device_hwuart = {
- .name = "pxa2xx-uart",
- .id = 3,
-+ .resource = pxa_resource_hwuart,
-+ .num_resources = ARRAY_SIZE(pxa_resource_hwuart),
- };
-
- void __init pxa_set_ffuart_info(struct platform_pxa_serial_funcs *info)
---- linux-2.6.23.orig/arch/arm/mach-pxa/generic.h
-+++ linux-2.6.23/arch/arm/mach-pxa/generic.h
-@@ -15,14 +15,40 @@
- extern void __init pxa_init_irq_low(void);
- extern void __init pxa_init_irq_high(void);
- extern void __init pxa_init_irq_gpio(int gpio_nr);
-+extern void __init pxa_init_irq_set_wake(int (*set_wake)(unsigned int, unsigned int));
- extern void __init pxa25x_init_irq(void);
- extern void __init pxa27x_init_irq(void);
-+extern void __init pxa3xx_init_irq(void);
- extern void __init pxa_map_io(void);
-
- extern unsigned int get_clk_frequency_khz(int info);
-+extern int pxa_last_gpio;
-
- #define SET_BANK(__nr,__start,__size) \
- mi->bank[__nr].start = (__start), \
- mi->bank[__nr].size = (__size), \
- mi->bank[__nr].node = (((unsigned)(__start) - PHYS_OFFSET) >> 27)
-
-+#ifdef CONFIG_PXA25x
-+extern unsigned pxa25x_get_clk_frequency_khz(int);
-+extern unsigned pxa25x_get_memclk_frequency_10khz(void);
-+#else
-+#define pxa25x_get_clk_frequency_khz(x) (0)
-+#define pxa25x_get_memclk_frequency_10khz() (0)
-+#endif
-+
-+#ifdef CONFIG_PXA27x
-+extern unsigned pxa27x_get_clk_frequency_khz(int);
-+extern unsigned pxa27x_get_memclk_frequency_10khz(void);
-+#else
-+#define pxa27x_get_clk_frequency_khz(x) (0)
-+#define pxa27x_get_memclk_frequency_10khz() (0)
-+#endif
-+
-+#ifdef CONFIG_PXA3xx
-+extern unsigned pxa3xx_get_clk_frequency_khz(int);
-+extern unsigned pxa3xx_get_memclk_frequency_10khz(void);
-+#else
-+#define pxa3xx_get_clk_frequency_khz(x) (0)
-+#define pxa3xx_get_memclk_frequency_10khz() (0)
-+#endif
---- linux-2.6.23.orig/arch/arm/mach-pxa/irq.c
-+++ linux-2.6.23/arch/arm/mach-pxa/irq.c
-@@ -38,33 +38,11 @@
- ICMR |= (1 << irq);
- }
-
--static int pxa_set_wake(unsigned int irq, unsigned int on)
--{
-- u32 mask;
--
-- switch (irq) {
-- case IRQ_RTCAlrm:
-- mask = PWER_RTC;
-- break;
--#ifdef CONFIG_PXA27x
-- /* REVISIT can handle USBH1, USBH2, USB, MSL, USIM, ... */
--#endif
-- default:
-- return -EINVAL;
-- }
-- if (on)
-- PWER |= mask;
-- else
-- PWER &= ~mask;
-- return 0;
--}
--
- static struct irq_chip pxa_internal_chip_low = {
- .name = "SC",
- .ack = pxa_mask_low_irq,
- .mask = pxa_mask_low_irq,
- .unmask = pxa_unmask_low_irq,
-- .set_wake = pxa_set_wake,
- };
-
- void __init pxa_init_irq_low(void)
-@@ -87,7 +65,7 @@
- }
- }
-
--#ifdef CONFIG_PXA27x
-+#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
-
- /*
- * This is for the second set of internal IRQs as found on the PXA27x.
-@@ -125,26 +103,6 @@
- }
- #endif
-
--/* Note that if an input/irq line ever gets changed to an output during
-- * suspend, the relevant PWER, PRER, and PFER bits should be cleared.
-- */
--#ifdef CONFIG_PXA27x
--
--/* PXA27x: Various gpios can issue wakeup events. This logic only
-- * handles the simple cases, not the WEMUX2 and WEMUX3 options
-- */
--#define PXA27x_GPIO_NOWAKE_MASK \
-- ((1 << 8) | (1 << 7) | (1 << 6) | (1 << 5) | (1 << 2))
--#define WAKEMASK(gpio) \
-- (((gpio) <= 15) \
-- ? ((1 << (gpio)) & ~PXA27x_GPIO_NOWAKE_MASK) \
-- : ((gpio == 35) ? (1 << 24) : 0))
--#else
--
--/* pxa 210, 250, 255, 26x: gpios 0..15 can issue wakeups */
--#define WAKEMASK(gpio) (((gpio) <= 15) ? (1 << (gpio)) : 0)
--#endif
--
- /*
- * PXA GPIO edge detection for IRQs:
- * IRQs are generated on Falling-Edge, Rising-Edge, or both.
-@@ -158,11 +116,9 @@
- static int pxa_gpio_irq_type(unsigned int irq, unsigned int type)
- {
- int gpio, idx;
-- u32 mask;
-
- gpio = IRQ_TO_GPIO(irq);
- idx = gpio >> 5;
-- mask = WAKEMASK(gpio);
-
- if (type == IRQT_PROBE) {
- /* Don't mess with enabled GPIOs using preconfigured edges or
-@@ -182,19 +138,15 @@
- if (type & __IRQT_RISEDGE) {
- /* printk("rising "); */
- __set_bit (gpio, GPIO_IRQ_rising_edge);
-- PRER |= mask;
- } else {
- __clear_bit (gpio, GPIO_IRQ_rising_edge);
-- PRER &= ~mask;
- }
-
- if (type & __IRQT_FALEDGE) {
- /* printk("falling "); */
- __set_bit (gpio, GPIO_IRQ_falling_edge);
-- PFER |= mask;
- } else {
- __clear_bit (gpio, GPIO_IRQ_falling_edge);
-- PFER &= ~mask;
- }
-
- /* printk("edges\n"); */
-@@ -213,29 +165,12 @@
- GEDR0 = (1 << (irq - IRQ_GPIO0));
- }
-
--static int pxa_set_gpio_wake(unsigned int irq, unsigned int on)
--{
-- int gpio = IRQ_TO_GPIO(irq);
-- u32 mask = WAKEMASK(gpio);
--
-- if (!mask)
-- return -EINVAL;
--
-- if (on)
-- PWER |= mask;
-- else
-- PWER &= ~mask;
-- return 0;
--}
--
--
- static struct irq_chip pxa_low_gpio_chip = {
- .name = "GPIO-l",
- .ack = pxa_ack_low_gpio,
- .mask = pxa_mask_low_irq,
- .unmask = pxa_unmask_low_irq,
- .set_type = pxa_gpio_irq_type,
-- .set_wake = pxa_set_gpio_wake,
- };
-
- /*
-@@ -342,13 +277,14 @@
- .mask = pxa_mask_muxed_gpio,
- .unmask = pxa_unmask_muxed_gpio,
- .set_type = pxa_gpio_irq_type,
-- .set_wake = pxa_set_gpio_wake,
- };
-
- void __init pxa_init_irq_gpio(int gpio_nr)
- {
- int irq, i;
-
-+ pxa_last_gpio = gpio_nr - 1;
-+
- /* clear all GPIO edge detects */
- for (i = 0; i < gpio_nr; i += 32) {
- GFER(i) = 0;
-@@ -375,3 +311,13 @@
- set_irq_chip(IRQ_GPIO_2_x, &pxa_internal_chip_low);
- set_irq_chained_handler(IRQ_GPIO_2_x, pxa_gpio_demux_handler);
- }
-+
-+void __init pxa_init_irq_set_wake(int (*set_wake)(unsigned int, unsigned int))
-+{
-+ pxa_internal_chip_low.set_wake = set_wake;
-+#ifdef CONFIG_PXA27x
-+ pxa_internal_chip_high.set_wake = set_wake;
-+#endif
-+ pxa_low_gpio_chip.set_wake = set_wake;
-+ pxa_muxed_gpio_chip.set_wake = set_wake;
-+}
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/mfp.c
-@@ -0,0 +1,235 @@
-+/*
-+ * linux/arch/arm/mach-pxa/mfp.c
-+ *
-+ * PXA3xx Multi-Function Pin Support
-+ *
-+ * Copyright (C) 2007 Marvell Internation Ltd.
-+ *
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/io.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/mfp.h>
-+
-+/* mfp_spin_lock is used to ensure that MFP register configuration
-+ * (most likely a read-modify-write operation) is atomic, and that
-+ * mfp_table[] is consistent
-+ */
-+static DEFINE_SPINLOCK(mfp_spin_lock);
-+
-+static void __iomem *mfpr_mmio_base = (void __iomem *)&__REG(MFPR_BASE);
-+static struct pxa3xx_mfp_pin mfp_table[MFP_PIN_MAX];
-+
-+#define mfpr_readl(off) \
-+ __raw_readl(mfpr_mmio_base + (off))
-+
-+#define mfpr_writel(off, val) \
-+ __raw_writel(val, mfpr_mmio_base + (off))
-+
-+/*
-+ * perform a read-back of any MFPR register to make sure the
-+ * previous writings are finished
-+ */
-+#define mfpr_sync() (void)__raw_readl(mfpr_mmio_base + 0)
-+
-+static inline void __mfp_config(int pin, unsigned long val)
-+{
-+ unsigned long off = mfp_table[pin].mfpr_off;
-+
-+ mfp_table[pin].mfpr_val = val;
-+ mfpr_writel(off, val);
-+}
-+
-+void pxa3xx_mfp_config(mfp_cfg_t *mfp_cfgs, int num)
-+{
-+ int i, pin;
-+ unsigned long val, flags;
-+ mfp_cfg_t *mfp_cfg = mfp_cfgs;
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ for (i = 0; i < num; i++, mfp_cfg++) {
-+ pin = MFP_CFG_PIN(*mfp_cfg);
-+ val = MFP_CFG_VAL(*mfp_cfg);
-+
-+ BUG_ON(pin >= MFP_PIN_MAX);
-+
-+ __mfp_config(pin, val);
-+ }
-+
-+ mfpr_sync();
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+unsigned long pxa3xx_mfp_read(int mfp)
-+{
-+ unsigned long val, flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+ val = mfpr_readl(mfp_table[mfp].mfpr_off);
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+
-+ return val;
-+}
-+
-+void pxa3xx_mfp_write(int mfp, unsigned long val)
-+{
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+ mfpr_writel(mfp_table[mfp].mfpr_off, val);
-+ mfpr_sync();
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void pxa3xx_mfp_set_afds(int mfp, int af, int ds)
-+{
-+ uint32_t mfpr_off, mfpr_val;
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+ mfpr_off = mfp_table[mfp].mfpr_off;
-+
-+ mfpr_val = mfpr_readl(mfpr_off);
-+ mfpr_val &= ~(MFPR_AF_MASK | MFPR_DRV_MASK);
-+ mfpr_val |= (((af & 0x7) << MFPR_ALT_OFFSET) |
-+ ((ds & 0x7) << MFPR_DRV_OFFSET));
-+
-+ mfpr_writel(mfpr_off, mfpr_val);
-+ mfpr_sync();
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void pxa3xx_mfp_set_rdh(int mfp, int rdh)
-+{
-+ uint32_t mfpr_off, mfpr_val;
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ mfpr_off = mfp_table[mfp].mfpr_off;
-+
-+ mfpr_val = mfpr_readl(mfpr_off);
-+ mfpr_val &= ~MFPR_RDH_MASK;
-+
-+ if (likely(rdh))
-+ mfpr_val |= (1u << MFPR_SS_OFFSET);
-+
-+ mfpr_writel(mfpr_off, mfpr_val);
-+ mfpr_sync();
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void pxa3xx_mfp_set_lpm(int mfp, int lpm)
-+{
-+ uint32_t mfpr_off, mfpr_val;
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ mfpr_off = mfp_table[mfp].mfpr_off;
-+ mfpr_val = mfpr_readl(mfpr_off);
-+ mfpr_val &= ~MFPR_LPM_MASK;
-+
-+ if (lpm & 0x1) mfpr_val |= 1u << MFPR_SON_OFFSET;
-+ if (lpm & 0x2) mfpr_val |= 1u << MFPR_SD_OFFSET;
-+ if (lpm & 0x4) mfpr_val |= 1u << MFPR_PU_OFFSET;
-+ if (lpm & 0x8) mfpr_val |= 1u << MFPR_PD_OFFSET;
-+ if (lpm &0x10) mfpr_val |= 1u << MFPR_PS_OFFSET;
-+
-+ mfpr_writel(mfpr_off, mfpr_val);
-+ mfpr_sync();
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void pxa3xx_mfp_set_pull(int mfp, int pull)
-+{
-+ uint32_t mfpr_off, mfpr_val;
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ mfpr_off = mfp_table[mfp].mfpr_off;
-+ mfpr_val = mfpr_readl(mfpr_off);
-+ mfpr_val &= ~MFPR_PULL_MASK;
-+ mfpr_val |= ((pull & 0x7u) << MFPR_PD_OFFSET);
-+
-+ mfpr_writel(mfpr_off, mfpr_val);
-+ mfpr_sync();
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void pxa3xx_mfp_set_edge(int mfp, int edge)
-+{
-+ uint32_t mfpr_off, mfpr_val;
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ mfpr_off = mfp_table[mfp].mfpr_off;
-+ mfpr_val = mfpr_readl(mfpr_off);
-+
-+ mfpr_val &= ~MFPR_EDGE_MASK;
-+ mfpr_val |= (edge & 0x3u) << MFPR_ERE_OFFSET;
-+ mfpr_val |= (!edge & 0x1) << MFPR_EC_OFFSET;
-+
-+ mfpr_writel(mfpr_off, mfpr_val);
-+ mfpr_sync();
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void __init pxa3xx_mfp_init_addr(struct pxa3xx_mfp_addr_map *map)
-+{
-+ struct pxa3xx_mfp_addr_map *p;
-+ unsigned long offset, flags;
-+ int i;
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ for (p = map; p->start != MFP_PIN_INVALID; p++) {
-+ offset = p->offset;
-+ i = p->start;
-+
-+ do {
-+ mfp_table[i].mfpr_off = offset;
-+ mfp_table[i].mfpr_val = 0;
-+ offset += 4; i++;
-+ } while ((i <= p->end) && (p->end != -1));
-+ }
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void __init pxa3xx_init_mfp(void)
-+{
-+ memset(mfp_table, 0, sizeof(mfp_table));
-+}
---- linux-2.6.23.orig/arch/arm/mach-pxa/pxa25x.c
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa25x.c
-@@ -30,6 +30,7 @@
-
- #include "generic.h"
- #include "devices.h"
-+#include "clock.h"
-
- /*
- * Various clock factors driven by the CCCR register.
-@@ -53,7 +54,7 @@
- * We assume these values have been applied via a fcs.
- * If info is not 0 we also display the current settings.
- */
--unsigned int get_clk_frequency_khz(int info)
-+unsigned int pxa25x_get_clk_frequency_khz(int info)
- {
- unsigned long cccr, turbo;
- unsigned int l, L, m, M, n2, N;
-@@ -86,27 +87,48 @@
- return (turbo & 1) ? (N/1000) : (M/1000);
- }
-
--EXPORT_SYMBOL(get_clk_frequency_khz);
--
- /*
- * Return the current memory clock frequency in units of 10kHz
- */
--unsigned int get_memclk_frequency_10khz(void)
-+unsigned int pxa25x_get_memclk_frequency_10khz(void)
- {
- return L_clk_mult[(CCCR >> 0) & 0x1f] * BASE_CLK / 10000;
- }
-
--EXPORT_SYMBOL(get_memclk_frequency_10khz);
--
--/*
-- * Return the current LCD clock frequency in units of 10kHz
-- */
--unsigned int get_lcdclk_frequency_10khz(void)
-+static unsigned long clk_pxa25x_lcd_getrate(struct clk *clk)
- {
-- return get_memclk_frequency_10khz();
-+ return pxa25x_get_memclk_frequency_10khz() * 10000;
- }
-
--EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
-+static const struct clkops clk_pxa25x_lcd_ops = {
-+ .enable = clk_cken_enable,
-+ .disable = clk_cken_disable,
-+ .getrate = clk_pxa25x_lcd_getrate,
-+};
-+
-+/*
-+ * 3.6864MHz -> OST, GPIO, SSP, PWM, PLLs (95.842MHz, 147.456MHz)
-+ * 95.842MHz -> MMC 19.169MHz, I2C 31.949MHz, FICP 47.923MHz, USB 47.923MHz
-+ * 147.456MHz -> UART 14.7456MHz, AC97 12.288MHz, I2S 5.672MHz (allegedly)
-+ */
-+static struct clk pxa25x_clks[] = {
-+ INIT_CK("LCDCLK", LCD, &clk_pxa25x_lcd_ops, &pxa_device_fb.dev),
-+ INIT_CKEN("UARTCLK", FFUART, 14745600, 1, &pxa_device_ffuart.dev),
-+ INIT_CKEN("UARTCLK", BTUART, 14745600, 1, &pxa_device_btuart.dev),
-+ INIT_CKEN("UARTCLK", BTUART, 14745600, 1, &pxa_device_btuart.dev),
-+ INIT_CKEN("UARTCLK", STUART, 14745600, 1, NULL),
-+ INIT_CKEN("UDCCLK", USB, 47923000, 5, &pxa_device_udc.dev),
-+ INIT_CKEN("MMCCLK", MMC, 19169000, 0, &pxa_device_mci.dev),
-+ INIT_CKEN("I2CCLK", I2C, 31949000, 0, &pxa_device_i2c.dev),
-+ /*
-+ INIT_CKEN("PWMCLK", PWM0, 3686400, 0, NULL),
-+ INIT_CKEN("PWMCLK", PWM0, 3686400, 0, NULL),
-+ INIT_CKEN("SSPCLK", SSP, 3686400, 0, NULL),
-+ INIT_CKEN("I2SCLK", I2S, 14745600, 0, NULL),
-+ INIT_CKEN("NSSPCLK", NSSP, 3686400, 0, NULL),
-+ */
-+ INIT_CKEN("FICPCLK", FICP, 47923000, 0, NULL),
-+};
-
- #ifdef CONFIG_PM
-
-@@ -207,10 +229,52 @@
- }
- #endif
-
-+/* PXA25x: supports wakeup from GPIO0..GPIO15 and RTC alarm
-+ */
-+
-+static int pxa25x_set_wake(unsigned int irq, unsigned int on)
-+{
-+ int gpio = IRQ_TO_GPIO(irq);
-+ uint32_t gpio_bit, mask = 0;
-+
-+ if (gpio >= 0 && gpio <= 15) {
-+ gpio_bit = GPIO_bit(gpio);
-+ mask = gpio_bit;
-+ if (on) {
-+ if (GRER(gpio) | gpio_bit)
-+ PRER |= gpio_bit;
-+ else
-+ PRER &= ~gpio_bit;
-+
-+ if (GFER(gpio) | gpio_bit)
-+ PFER |= gpio_bit;
-+ else
-+ PFER &= ~gpio_bit;
-+ }
-+ goto set_pwer;
-+ }
-+
-+ if (irq == IRQ_RTCAlrm) {
-+ mask = PWER_RTC;
-+ goto set_pwer;
-+ }
-+
-+ return -EINVAL;
-+
-+set_pwer:
-+ if (on)
-+ PWER |= mask;
-+ else
-+ PWER &=~mask;
-+
-+ return 0;
-+}
-+
- void __init pxa25x_init_irq(void)
- {
- pxa_init_irq_low();
- pxa_init_irq_gpio(85);
-+ pxa_init_irq_set_wake(pxa25x_set_wake);
- }
-
- static struct platform_device *pxa25x_devices[] __initdata = {
-@@ -231,6 +295,8 @@
- int ret = 0;
-
- if (cpu_is_pxa21x() || cpu_is_pxa25x()) {
-+ clks_register(pxa25x_clks, ARRAY_SIZE(pxa25x_clks));
-+
- if ((ret = pxa_init_dma(16)))
- return ret;
- #ifdef CONFIG_PM
---- linux-2.6.23.orig/arch/arm/mach-pxa/pxa27x.c
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa27x.c
-@@ -27,6 +27,7 @@
-
- #include "generic.h"
- #include "devices.h"
-+#include "clock.h"
-
- /* Crystal clock: 13MHz */
- #define BASE_CLK 13000000
-@@ -36,7 +37,7 @@
- * We assume these values have been applied via a fcs.
- * If info is not 0 we also display the current settings.
- */
--unsigned int get_clk_frequency_khz( int info)
-+unsigned int pxa27x_get_clk_frequency_khz(int info)
- {
- unsigned long ccsr, clkcfg;
- unsigned int l, L, m, M, n2, N, S;
-@@ -79,7 +80,7 @@
- * Return the current mem clock frequency in units of 10kHz as
- * reflected by CCCR[A], B, and L
- */
--unsigned int get_memclk_frequency_10khz(void)
-+unsigned int pxa27x_get_memclk_frequency_10khz(void)
- {
- unsigned long ccsr, clkcfg;
- unsigned int l, L, m, M;
-@@ -104,7 +105,7 @@
- /*
- * Return the current LCD clock frequency in units of 10kHz as
- */
--unsigned int get_lcdclk_frequency_10khz(void)
-+static unsigned int pxa27x_get_lcdclk_frequency_10khz(void)
- {
- unsigned long ccsr;
- unsigned int l, L, k, K;
-@@ -120,9 +121,47 @@
- return (K / 10000);
- }
-
--EXPORT_SYMBOL(get_clk_frequency_khz);
--EXPORT_SYMBOL(get_memclk_frequency_10khz);
--EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
-+static unsigned long clk_pxa27x_lcd_getrate(struct clk *clk)
-+{
-+ return pxa27x_get_lcdclk_frequency_10khz() * 10000;
-+}
-+
-+static const struct clkops clk_pxa27x_lcd_ops = {
-+ .enable = clk_cken_enable,
-+ .disable = clk_cken_disable,
-+ .getrate = clk_pxa27x_lcd_getrate,
-+};
-+
-+static struct clk pxa27x_clks[] = {
-+ INIT_CK("LCDCLK", LCD, &clk_pxa27x_lcd_ops, &pxa_device_fb.dev),
-+ INIT_CK("CAMCLK", CAMERA, &clk_pxa27x_lcd_ops, NULL),
-+
-+ INIT_CKEN("UARTCLK", FFUART, 14857000, 1, &pxa_device_ffuart.dev),
-+ INIT_CKEN("UARTCLK", BTUART, 14857000, 1, &pxa_device_btuart.dev),
-+ INIT_CKEN("UARTCLK", STUART, 14857000, 1, NULL),
-+
-+ INIT_CKEN("I2SCLK", I2S, 14682000, 0, &pxa_device_i2s.dev),
-+ INIT_CKEN("I2CCLK", I2C, 32842000, 0, &pxa_device_i2c.dev),
-+ INIT_CKEN("UDCCLK", USB, 48000000, 5, &pxa_device_udc.dev),
-+ INIT_CKEN("MMCCLK", MMC, 19500000, 0, &pxa_device_mci.dev),
-+ INIT_CKEN("FICPCLK", FICP, 48000000, 0, &pxa_device_ficp.dev),
-+
-+ INIT_CKEN("USBCLK", USB, 48000000, 0, &pxa27x_device_ohci.dev),
-+ INIT_CKEN("I2CCLK", PWRI2C, 13000000, 0, &pxa27x_device_i2c_power.dev),
-+ INIT_CKEN("KBDCLK", KEYPAD, 32768, 0, NULL),
-+
-+ /*
-+ INIT_CKEN("PWMCLK", PWM0, 13000000, 0, NULL),
-+ INIT_CKEN("SSPCLK", SSP1, 13000000, 0, NULL),
-+ INIT_CKEN("SSPCLK", SSP2, 13000000, 0, NULL),
-+ INIT_CKEN("SSPCLK", SSP3, 13000000, 0, NULL),
-+ INIT_CKEN("MSLCLK", MSL, 48000000, 0, NULL),
-+ INIT_CKEN("USIMCLK", USIM, 48000000, 0, NULL),
-+ INIT_CKEN("MSTKCLK", MEMSTK, 19500000, 0, NULL),
-+ INIT_CKEN("IMCLK", IM, 0, 0, NULL),
-+ INIT_CKEN("MEMCLK", MEMC, 0, 0, NULL),
-+ */
-+};
-
- #ifdef CONFIG_PM
-
-@@ -269,6 +308,69 @@
- }
- #endif
-
-+/* PXA27x: Various gpios can issue wakeup events. This logic only
-+ * handles the simple cases, not the WEMUX2 and WEMUX3 options
-+ */
-+#define PXA27x_GPIO_NOWAKE_MASK \
-+ ((1 << 8) | (1 << 7) | (1 << 6) | (1 << 5) | (1 << 2))
-+#define WAKEMASK(gpio) \
-+ (((gpio) <= 15) \
-+ ? ((1 << (gpio)) & ~PXA27x_GPIO_NOWAKE_MASK) \
-+ : ((gpio == 35) ? (1 << 24) : 0))
-+
-+static int pxa27x_set_wake(unsigned int irq, unsigned int on)
-+{
-+ int gpio = IRQ_TO_GPIO(irq);
-+ uint32_t mask;
-+
-+ if ((gpio >= 0 && gpio <= 15) || (gpio == 35)) {
-+ if (WAKEMASK(gpio) == 0)
-+ return -EINVAL;
-+
-+ mask = WAKEMASK(gpio);
-+
-+ if (on) {
-+ if (GRER(gpio) | GPIO_bit(gpio))
-+ PRER |= mask;
-+ else
-+ PRER &= ~mask;
-+
-+ if (GFER(gpio) | GPIO_bit(gpio))
-+ PFER |= mask;
-+ else
-+ PFER &= ~mask;
-+ }
-+ goto set_pwer;
-+ }
-+
-+ switch (irq) {
-+ case IRQ_RTCAlrm:
-+ mask = PWER_RTC;
-+ break;
-+ case IRQ_USB:
-+ mask = 1u << 26;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+set_pwer:
-+ if (on)
-+ PWER |= mask;
-+ else
-+ PWER &=~mask;
-+
-+ return 0;
-+}
-+
-+void __init pxa27x_init_irq(void)
-+{
-+ pxa_init_irq_low();
-+ pxa_init_irq_high();
-+ pxa_init_irq_gpio(128);
-+ pxa_init_irq_set_wake(pxa27x_set_wake);
-+}
-+
- /*
- * device registration specific to PXA27x.
- */
-@@ -288,7 +390,7 @@
- },
- };
-
--static struct platform_device pxa27x_device_ohci = {
-+struct platform_device pxa27x_device_ohci = {
- .name = "pxa27x-ohci",
- .id = -1,
- .dev = {
-@@ -316,7 +418,7 @@
- },
- };
-
--static struct platform_device pxa27x_device_i2c_power = {
-+struct platform_device pxa27x_device_i2c_power = {
- .name = "pxa2xx-i2c",
- .id = 1,
- .resource = i2c_power_resources,
-@@ -338,17 +440,12 @@
- &pxa27x_device_ohci,
- };
-
--void __init pxa27x_init_irq(void)
--{
-- pxa_init_irq_low();
-- pxa_init_irq_high();
-- pxa_init_irq_gpio(128);
--}
--
- static int __init pxa27x_init(void)
- {
- int ret = 0;
- if (cpu_is_pxa27x()) {
-+ clks_register(pxa27x_clks, ARRAY_SIZE(pxa27x_clks));
-+
- if ((ret = pxa_init_dma(32)))
- return ret;
- #ifdef CONFIG_PM
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa300.c
-@@ -0,0 +1,93 @@
-+/*
-+ * linux/arch/arm/mach-pxa/pxa300.c
-+ *
-+ * Code specific to PXA300/PXA310
-+ *
-+ * Copyright (C) 2007 Marvell Internation Ltd.
-+ *
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/mfp-pxa300.h>
-+
-+static struct pxa3xx_mfp_addr_map pxa300_mfp_addr_map[] __initdata = {
-+
-+ MFP_ADDR_X(GPIO0, GPIO2, 0x00b4),
-+ MFP_ADDR_X(GPIO3, GPIO26, 0x027c),
-+ MFP_ADDR_X(GPIO27, GPIO127, 0x0400),
-+ MFP_ADDR_X(GPIO0_2, GPIO6_2, 0x02ec),
-+
-+ MFP_ADDR(nBE0, 0x0204),
-+ MFP_ADDR(nBE1, 0x0208),
-+
-+ MFP_ADDR(nLUA, 0x0244),
-+ MFP_ADDR(nLLA, 0x0254),
-+
-+ MFP_ADDR(DF_CLE_nOE, 0x0240),
-+ MFP_ADDR(DF_nRE_nOE, 0x0200),
-+ MFP_ADDR(DF_ALE_nWE, 0x020C),
-+ MFP_ADDR(DF_INT_RnB, 0x00C8),
-+ MFP_ADDR(DF_nCS0, 0x0248),
-+ MFP_ADDR(DF_nCS1, 0x0278),
-+ MFP_ADDR(DF_nWE, 0x00CC),
-+
-+ MFP_ADDR(DF_ADDR0, 0x0210),
-+ MFP_ADDR(DF_ADDR1, 0x0214),
-+ MFP_ADDR(DF_ADDR2, 0x0218),
-+ MFP_ADDR(DF_ADDR3, 0x021C),
-+
-+ MFP_ADDR(DF_IO0, 0x0220),
-+ MFP_ADDR(DF_IO1, 0x0228),
-+ MFP_ADDR(DF_IO2, 0x0230),
-+ MFP_ADDR(DF_IO3, 0x0238),
-+ MFP_ADDR(DF_IO4, 0x0258),
-+ MFP_ADDR(DF_IO5, 0x0260),
-+ MFP_ADDR(DF_IO6, 0x0268),
-+ MFP_ADDR(DF_IO7, 0x0270),
-+ MFP_ADDR(DF_IO8, 0x0224),
-+ MFP_ADDR(DF_IO9, 0x022C),
-+ MFP_ADDR(DF_IO10, 0x0234),
-+ MFP_ADDR(DF_IO11, 0x023C),
-+ MFP_ADDR(DF_IO12, 0x025C),
-+ MFP_ADDR(DF_IO13, 0x0264),
-+ MFP_ADDR(DF_IO14, 0x026C),
-+ MFP_ADDR(DF_IO15, 0x0274),
-+
-+ MFP_ADDR_END,
-+};
-+
-+/* override pxa300 MFP register addresses */
-+static struct pxa3xx_mfp_addr_map pxa310_mfp_addr_map[] __initdata = {
-+ MFP_ADDR_X(GPIO30, GPIO98, 0x0418),
-+ MFP_ADDR_X(GPIO7_2, GPIO12_2, 0x052C),
-+
-+ MFP_ADDR(ULPI_STP, 0x040C),
-+ MFP_ADDR(ULPI_NXT, 0x0410),
-+ MFP_ADDR(ULPI_DIR, 0x0414),
-+
-+ MFP_ADDR_END,
-+};
-+
-+static int __init pxa300_init(void)
-+{
-+ if (cpu_is_pxa300() || cpu_is_pxa310()) {
-+ pxa3xx_init_mfp();
-+ pxa3xx_mfp_init_addr(pxa300_mfp_addr_map);
-+ }
-+
-+ if (cpu_is_pxa310())
-+ pxa3xx_mfp_init_addr(pxa310_mfp_addr_map);
-+
-+ return 0;
-+}
-+
-+core_initcall(pxa300_init);
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa320.c
-@@ -0,0 +1,88 @@
-+/*
-+ * linux/arch/arm/mach-pxa/pxa320.c
-+ *
-+ * Code specific to PXA320
-+ *
-+ * Copyright (C) 2007 Marvell Internation Ltd.
-+ *
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/mfp.h>
-+#include <asm/arch/mfp-pxa320.h>
-+
-+static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = {
-+
-+ MFP_ADDR_X(GPIO0, GPIO4, 0x0124),
-+ MFP_ADDR_X(GPIO5, GPIO26, 0x028C),
-+ MFP_ADDR_X(GPIO27, GPIO62, 0x0400),
-+ MFP_ADDR_X(GPIO63, GPIO73, 0x04B4),
-+ MFP_ADDR_X(GPIO74, GPIO98, 0x04F0),
-+ MFP_ADDR_X(GPIO99, GPIO127, 0x0600),
-+ MFP_ADDR_X(GPIO0_2, GPIO5_2, 0x0674),
-+ MFP_ADDR_X(GPIO6_2, GPIO13_2, 0x0494),
-+ MFP_ADDR_X(GPIO14_2, GPIO17_2, 0x04E0),
-+
-+ MFP_ADDR(nXCVREN, 0x0138),
-+ MFP_ADDR(DF_CLE_nOE, 0x0204),
-+ MFP_ADDR(DF_nADV1_ALE, 0x0208),
-+ MFP_ADDR(DF_SCLK_S, 0x020C),
-+ MFP_ADDR(DF_SCLK_E, 0x0210),
-+ MFP_ADDR(nBE0, 0x0214),
-+ MFP_ADDR(nBE1, 0x0218),
-+ MFP_ADDR(DF_nADV2_ALE, 0x021C),
-+ MFP_ADDR(DF_INT_RnB, 0x0220),
-+ MFP_ADDR(DF_nCS0, 0x0224),
-+ MFP_ADDR(DF_nCS1, 0x0228),
-+ MFP_ADDR(DF_nWE, 0x022C),
-+ MFP_ADDR(DF_nRE_nOE, 0x0230),
-+ MFP_ADDR(nLUA, 0x0234),
-+ MFP_ADDR(nLLA, 0x0238),
-+ MFP_ADDR(DF_ADDR0, 0x023C),
-+ MFP_ADDR(DF_ADDR1, 0x0240),
-+ MFP_ADDR(DF_ADDR2, 0x0244),
-+ MFP_ADDR(DF_ADDR3, 0x0248),
-+ MFP_ADDR(DF_IO0, 0x024C),
-+ MFP_ADDR(DF_IO8, 0x0250),
-+ MFP_ADDR(DF_IO1, 0x0254),
-+ MFP_ADDR(DF_IO9, 0x0258),
-+ MFP_ADDR(DF_IO2, 0x025C),
-+ MFP_ADDR(DF_IO10, 0x0260),
-+ MFP_ADDR(DF_IO3, 0x0264),
-+ MFP_ADDR(DF_IO11, 0x0268),
-+ MFP_ADDR(DF_IO4, 0x026C),
-+ MFP_ADDR(DF_IO12, 0x0270),
-+ MFP_ADDR(DF_IO5, 0x0274),
-+ MFP_ADDR(DF_IO13, 0x0278),
-+ MFP_ADDR(DF_IO6, 0x027C),
-+ MFP_ADDR(DF_IO14, 0x0280),
-+ MFP_ADDR(DF_IO7, 0x0284),
-+ MFP_ADDR(DF_IO15, 0x0288),
-+
-+ MFP_ADDR_END,
-+};
-+
-+static void __init pxa320_init_mfp(void)
-+{
-+ pxa3xx_init_mfp();
-+ pxa3xx_mfp_init_addr(pxa320_mfp_addr_map);
-+}
-+
-+static int __init pxa320_init(void)
-+{
-+ if (cpu_is_pxa320())
-+ pxa320_init_mfp();
-+
-+ return 0;
-+}
-+
-+core_initcall(pxa320_init);
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa3xx.c
-@@ -0,0 +1,216 @@
-+/*
-+ * linux/arch/arm/mach-pxa/pxa3xx.c
-+ *
-+ * code specific to pxa3xx aka Monahans
-+ *
-+ * Copyright (C) 2006 Marvell International Ltd.
-+ *
-+ * 2007-09-02: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/pm.h>
-+#include <linux/platform_device.h>
-+#include <linux/irq.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/pxa3xx-regs.h>
-+#include <asm/arch/ohci.h>
-+#include <asm/arch/pm.h>
-+#include <asm/arch/dma.h>
-+#include <asm/arch/ssp.h>
-+
-+#include "generic.h"
-+#include "devices.h"
-+#include "clock.h"
-+
-+/* Crystal clock: 13MHz */
-+#define BASE_CLK 13000000
-+
-+/* Ring Oscillator Clock: 60MHz */
-+#define RO_CLK 60000000
-+
-+#define ACCR_D0CS (1 << 26)
-+
-+/* crystal frequency to static memory controller multiplier (SMCFS) */
-+static unsigned char smcfs_mult[8] = { 6, 0, 8, 0, 0, 16, };
-+
-+/* crystal frequency to HSIO bus frequency multiplier (HSS) */
-+static unsigned char hss_mult[4] = { 8, 12, 16, 0 };
-+
-+/*
-+ * Get the clock frequency as reflected by CCSR and the turbo flag.
-+ * We assume these values have been applied via a fcs.
-+ * If info is not 0 we also display the current settings.
-+ */
-+unsigned int pxa3xx_get_clk_frequency_khz(int info)
-+{
-+ unsigned long acsr, xclkcfg;
-+ unsigned int t, xl, xn, hss, ro, XL, XN, CLK, HSS;
-+
-+ /* Read XCLKCFG register turbo bit */
-+ __asm__ __volatile__("mrc\tp14, 0, %0, c6, c0, 0" : "=r"(xclkcfg));
-+ t = xclkcfg & 0x1;
-+
-+ acsr = ACSR;
-+
-+ xl = acsr & 0x1f;
-+ xn = (acsr >> 8) & 0x7;
-+ hss = (acsr >> 14) & 0x3;
-+
-+ XL = xl * BASE_CLK;
-+ XN = xn * XL;
-+
-+ ro = acsr & ACCR_D0CS;
-+
-+ CLK = (ro) ? RO_CLK : ((t) ? XN : XL);
-+ HSS = (ro) ? RO_CLK : hss_mult[hss] * BASE_CLK;
-+
-+ if (info) {
-+ pr_info("RO Mode clock: %d.%02dMHz (%sactive)\n",
-+ RO_CLK / 1000000, (RO_CLK % 1000000) / 10000,
-+ (ro) ? "" : "in");
-+ pr_info("Run Mode clock: %d.%02dMHz (*%d)\n",
-+ XL / 1000000, (XL % 1000000) / 10000, xl);
-+ pr_info("Turbo Mode clock: %d.%02dMHz (*%d, %sactive)\n",
-+ XN / 1000000, (XN % 1000000) / 10000, xn,
-+ (t) ? "" : "in");
-+ pr_info("HSIO bus clock: %d.%02dMHz\n",
-+ HSS / 1000000, (HSS % 1000000) / 10000);
-+ }
-+
-+ return CLK;
-+}
-+
-+/*
-+ * Return the current static memory controller clock frequency
-+ * in units of 10kHz
-+ */
-+unsigned int pxa3xx_get_memclk_frequency_10khz(void)
-+{
-+ unsigned long acsr;
-+ unsigned int smcfs, clk = 0;
-+
-+ acsr = ACSR;
-+
-+ smcfs = (acsr >> 23) & 0x7;
-+ clk = (acsr & ACCR_D0CS) ? RO_CLK : smcfs_mult[smcfs] * BASE_CLK;
-+
-+ return (clk / 10000);
-+}
-+
-+/*
-+ * Return the current HSIO bus clock frequency
-+ */
-+static unsigned long clk_pxa3xx_hsio_getrate(struct clk *clk)
-+{
-+ unsigned long acsr;
-+ unsigned int hss, hsio_clk;
-+
-+ acsr = ACSR;
-+
-+ hss = (acsr >> 14) & 0x3;
-+ hsio_clk = (acsr & ACCR_D0CS) ? RO_CLK : hss_mult[hss] * BASE_CLK;
-+
-+ return hsio_clk;
-+}
-+
-+static void clk_pxa3xx_cken_enable(struct clk *clk)
-+{
-+ unsigned long mask = 1ul << (clk->cken & 0x1f);
-+
-+ local_irq_disable();
-+
-+ if (clk->cken < 32)
-+ CKENA |= mask;
-+ else
-+ CKENB |= mask;
-+
-+ local_irq_enable();
-+}
-+
-+static void clk_pxa3xx_cken_disable(struct clk *clk)
-+{
-+ unsigned long mask = 1ul << (clk->cken & 0x1f);
-+
-+ local_irq_disable();
-+
-+ if (clk->cken < 32)
-+ CKENA &= ~mask;
-+ else
-+ CKENB &= ~mask;
-+
-+ local_irq_enable();
-+}
-+
-+static const struct clkops clk_pxa3xx_hsio_ops = {
-+ .enable = clk_pxa3xx_cken_enable,
-+ .disable = clk_pxa3xx_cken_disable,
-+ .getrate = clk_pxa3xx_hsio_getrate,
-+};
-+
-+static struct clk pxa3xx_clks[] = {
-+ INIT_CK("LCDCLK", LCD, &clk_pxa3xx_hsio_ops, &pxa_device_fb.dev),
-+ INIT_CK("CAMCLK", CAMERA, &clk_pxa3xx_hsio_ops, NULL),
-+
-+ INIT_CKEN("UARTCLK", FFUART, 14857000, 1, &pxa_device_ffuart.dev),
-+ INIT_CKEN("UARTCLK", BTUART, 14857000, 1, &pxa_device_btuart.dev),
-+ INIT_CKEN("UARTCLK", STUART, 14857000, 1, NULL),
-+
-+ INIT_CKEN("I2CCLK", I2C, 32842000, 0, &pxa_device_i2c.dev),
-+ INIT_CKEN("UDCCLK", UDC, 48000000, 5, &pxa_device_udc.dev),
-+};
-+
-+void __init pxa3xx_init_irq(void)
-+{
-+ /* enable CP6 access */
-+ u32 value;
-+ __asm__ __volatile__("mrc p15, 0, %0, c15, c1, 0\n": "=r"(value));
-+ value |= (1 << 6);
-+ __asm__ __volatile__("mcr p15, 0, %0, c15, c1, 0\n": :"r"(value));
-+
-+ pxa_init_irq_low();
-+ pxa_init_irq_high();
-+ pxa_init_irq_gpio(128);
-+}
-+
-+/*
-+ * device registration specific to PXA3xx.
-+ */
-+
-+static struct platform_device *devices[] __initdata = {
-+ &pxa_device_mci,
-+ &pxa_device_udc,
-+ &pxa_device_fb,
-+ &pxa_device_ffuart,
-+ &pxa_device_btuart,
-+ &pxa_device_stuart,
-+ &pxa_device_i2c,
-+ &pxa_device_i2s,
-+ &pxa_device_ficp,
-+ &pxa_device_rtc,
-+};
-+
-+static int __init pxa3xx_init(void)
-+{
-+ int ret = 0;
-+
-+ if (cpu_is_pxa3xx()) {
-+ clks_register(pxa3xx_clks, ARRAY_SIZE(pxa3xx_clks));
-+
-+ if ((ret = pxa_init_dma(32)))
-+ return ret;
-+
-+ return platform_add_devices(devices, ARRAY_SIZE(devices));
-+ }
-+ return 0;
-+}
-+
-+subsys_initcall(pxa3xx_init);
---- linux-2.6.23.orig/arch/arm/mach-pxa/time.c
-+++ linux-2.6.23/arch/arm/mach-pxa/time.c
-@@ -16,10 +16,48 @@
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/clockchips.h>
-+#include <linux/sched.h>
-
-+#include <asm/div64.h>
-+#include <asm/cnt32_to_63.h>
- #include <asm/mach/irq.h>
- #include <asm/mach/time.h>
- #include <asm/arch/pxa-regs.h>
-+#include <asm/mach-types.h>
-+
-+/*
-+ * This is PXA's sched_clock implementation. This has a resolution
-+ * of at least 308 ns and a maximum value of 208 days.
-+ *
-+ * The return value is guaranteed to be monotonic in that range as
-+ * long as there is always less than 582 seconds between successive
-+ * calls to sched_clock() which should always be the case in practice.
-+ */
-+
-+#define OSCR2NS_SCALE_FACTOR 10
-+
-+static unsigned long oscr2ns_scale;
-+
-+static void __init set_oscr2ns_scale(unsigned long oscr_rate)
-+{
-+ unsigned long long v = 1000000000ULL << OSCR2NS_SCALE_FACTOR;
-+ do_div(v, oscr_rate);
-+ oscr2ns_scale = v;
-+ /*
-+ * We want an even value to automatically clear the top bit
-+ * returned by cnt32_to_63() without an additional run time
-+ * instruction. So if the LSB is 1 then round it up.
-+ */
-+ if (oscr2ns_scale & 1)
-+ oscr2ns_scale++;
-+}
-+
-+unsigned long long sched_clock(void)
-+{
-+ unsigned long long v = cnt32_to_63(OSCR);
-+ return (v * oscr2ns_scale) >> OSCR2NS_SCALE_FACTOR;
-+}
-+
-
- static irqreturn_t
- pxa_ost0_interrupt(int irq, void *dev_id)
-@@ -149,18 +187,29 @@
-
- static void __init pxa_timer_init(void)
- {
-+ unsigned long clock_tick_rate;
-+
- OIER = 0;
- OSSR = OSSR_M0 | OSSR_M1 | OSSR_M2 | OSSR_M3;
-
-+ if (cpu_is_pxa21x() || cpu_is_pxa25x())
-+ clock_tick_rate = 3686400;
-+ else if (machine_is_mainstone())
-+ clock_tick_rate = 3249600;
-+ else
-+ clock_tick_rate = 3250000;
-+
-+ set_oscr2ns_scale(clock_tick_rate);
-+
- ckevt_pxa_osmr0.mult =
-- div_sc(CLOCK_TICK_RATE, NSEC_PER_SEC, ckevt_pxa_osmr0.shift);
-+ div_sc(clock_tick_rate, NSEC_PER_SEC, ckevt_pxa_osmr0.shift);
- ckevt_pxa_osmr0.max_delta_ns =
- clockevent_delta2ns(0x7fffffff, &ckevt_pxa_osmr0);
- ckevt_pxa_osmr0.min_delta_ns =
- clockevent_delta2ns(MIN_OSCR_DELTA, &ckevt_pxa_osmr0) + 1;
-
- cksrc_pxa_oscr0.mult =
-- clocksource_hz2mult(CLOCK_TICK_RATE, cksrc_pxa_oscr0.shift);
-+ clocksource_hz2mult(clock_tick_rate, cksrc_pxa_oscr0.shift);
-
- setup_irq(IRQ_OST0, &pxa_ost0_irq);
-
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/zylonite.c
-@@ -0,0 +1,184 @@
-+/*
-+ * linux/arch/arm/mach-pxa/zylonite.c
-+ *
-+ * Support for the PXA3xx Development Platform (aka Zylonite)
-+ *
-+ * Copyright (C) 2006 Marvell International Ltd.
-+ *
-+ * 2007-09-04: eric miao <eric.y.miao@gmail.com>
-+ * rewrite to align with latest kernel
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/interrupt.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <asm/hardware.h>
-+#include <asm/arch/gpio.h>
-+#include <asm/arch/pxafb.h>
-+#include <asm/arch/zylonite.h>
-+
-+#include "generic.h"
-+
-+int gpio_backlight;
-+int gpio_eth_irq;
-+
-+int lcd_id;
-+int lcd_orientation;
-+
-+static struct resource smc91x_resources[] = {
-+ [0] = {
-+ .start = ZYLONITE_ETH_PHYS + 0x300,
-+ .end = ZYLONITE_ETH_PHYS + 0xfffff,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+ .start = -1, /* for run-time assignment */
-+ .end = -1,
-+ .flags = IORESOURCE_IRQ,
-+ }
-+};
-+
-+static struct platform_device smc91x_device = {
-+ .name = "smc91x",
-+ .id = 0,
-+ .num_resources = ARRAY_SIZE(smc91x_resources),
-+ .resource = smc91x_resources,
-+};
-+
-+#if defined(CONFIG_FB_PXA) || (CONFIG_FB_PXA_MODULES)
-+static void zylonite_backlight_power(int on)
-+{
-+ gpio_set_value(gpio_backlight, on);
-+}
-+
-+static struct pxafb_mode_info toshiba_ltm035a776c_mode = {
-+ .pixclock = 110000,
-+ .xres = 240,
-+ .yres = 320,
-+ .bpp = 16,
-+ .hsync_len = 4,
-+ .left_margin = 6,
-+ .right_margin = 4,
-+ .vsync_len = 2,
-+ .upper_margin = 2,
-+ .lower_margin = 3,
-+ .sync = FB_SYNC_VERT_HIGH_ACT,
-+};
-+
-+static struct pxafb_mode_info toshiba_ltm04c380k_mode = {
-+ .pixclock = 50000,
-+ .xres = 640,
-+ .yres = 480,
-+ .bpp = 16,
-+ .hsync_len = 1,
-+ .left_margin = 0x9f,
-+ .right_margin = 1,
-+ .vsync_len = 44,
-+ .upper_margin = 0,
-+ .lower_margin = 0,
-+ .sync = FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT,
-+};
-+
-+static struct pxafb_mach_info zylonite_toshiba_lcd_info = {
-+ .num_modes = 1,
-+ .lccr0 = LCCR0_Act,
-+ .lccr3 = LCCR3_PCP,
-+ .pxafb_backlight_power = zylonite_backlight_power,
-+};
-+
-+static struct pxafb_mode_info sharp_ls037_modes[] = {
-+ [0] = {
-+ .pixclock = 158000,
-+ .xres = 240,
-+ .yres = 320,
-+ .bpp = 16,
-+ .hsync_len = 4,
-+ .left_margin = 39,
-+ .right_margin = 39,
-+ .vsync_len = 1,
-+ .upper_margin = 2,
-+ .lower_margin = 3,
-+ .sync = 0,
-+ },
-+ [1] = {
-+ .pixclock = 39700,
-+ .xres = 480,
-+ .yres = 640,
-+ .bpp = 16,
-+ .hsync_len = 8,
-+ .left_margin = 81,
-+ .right_margin = 81,
-+ .vsync_len = 1,
-+ .upper_margin = 2,
-+ .lower_margin = 7,
-+ .sync = 0,
-+ },
-+};
-+
-+static struct pxafb_mach_info zylonite_sharp_lcd_info = {
-+ .modes = sharp_ls037_modes,
-+ .num_modes = 2,
-+ .lccr0 = LCCR0_Act,
-+ .lccr3 = LCCR3_PCP | LCCR3_HSP | LCCR3_VSP,
-+ .pxafb_backlight_power = zylonite_backlight_power,
-+};
-+
-+static void __init zylonite_init_lcd(void)
-+{
-+ /* backlight GPIO: output, default on */
-+ gpio_direction_output(gpio_backlight, 1);
-+
-+ if (lcd_id & 0x20) {
-+ set_pxa_fb_info(&zylonite_sharp_lcd_info);
-+ return;
-+ }
-+
-+ /* legacy LCD panels, it would be handy here if LCD panel type can
-+ * be decided at run-time
-+ */
-+ if (1)
-+ zylonite_toshiba_lcd_info.modes = &toshiba_ltm035a776c_mode;
-+ else
-+ zylonite_toshiba_lcd_info.modes = &toshiba_ltm04c380k_mode;
-+
-+ set_pxa_fb_info(&zylonite_toshiba_lcd_info);
-+}
-+#else
-+static inline void zylonite_init_lcd(void) {}
-+#endif
-+
-+static void __init zylonite_init(void)
-+{
-+ /* board-processor specific initialization */
-+ zylonite_pxa300_init();
-+ zylonite_pxa320_init();
-+
-+ /*
-+ * Note: We depend that the bootloader set
-+ * the correct value to MSC register for SMC91x.
-+ */
-+ smc91x_resources[1].start = gpio_to_irq(gpio_eth_irq);
-+ smc91x_resources[1].end = gpio_to_irq(gpio_eth_irq);
-+ platform_device_register(&smc91x_device);
-+
-+ zylonite_init_lcd();
-+}
-+
-+MACHINE_START(ZYLONITE, "PXA3xx Platform Development Kit (aka Zylonite)")
-+ .phys_io = 0x40000000,
-+ .boot_params = 0xa0000100,
-+ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
-+ .map_io = pxa_map_io,
-+ .init_irq = pxa3xx_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = zylonite_init,
-+MACHINE_END
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/zylonite_pxa300.c
-@@ -0,0 +1,188 @@
-+/*
-+ * linux/arch/arm/mach-pxa/zylonite_pxa300.c
-+ *
-+ * PXA300/PXA310 specific support code for the
-+ * PXA3xx Development Platform (aka Zylonite)
-+ *
-+ * Copyright (C) 2007 Marvell Internation Ltd.
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+
-+#include <asm/gpio.h>
-+#include <asm/arch/mfp-pxa300.h>
-+#include <asm/arch/zylonite.h>
-+
-+#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
-+
-+/* PXA300/PXA310 common configurations */
-+static mfp_cfg_t common_mfp_cfg[] __initdata = {
-+ /* LCD */
-+ GPIO54_LCD_LDD_0,
-+ GPIO55_LCD_LDD_1,
-+ GPIO56_LCD_LDD_2,
-+ GPIO57_LCD_LDD_3,
-+ GPIO58_LCD_LDD_4,
-+ GPIO59_LCD_LDD_5,
-+ GPIO60_LCD_LDD_6,
-+ GPIO61_LCD_LDD_7,
-+ GPIO62_LCD_LDD_8,
-+ GPIO63_LCD_LDD_9,
-+ GPIO64_LCD_LDD_10,
-+ GPIO65_LCD_LDD_11,
-+ GPIO66_LCD_LDD_12,
-+ GPIO67_LCD_LDD_13,
-+ GPIO68_LCD_LDD_14,
-+ GPIO69_LCD_LDD_15,
-+ GPIO70_LCD_LDD_16,
-+ GPIO71_LCD_LDD_17,
-+ GPIO72_LCD_FCLK,
-+ GPIO73_LCD_LCLK,
-+ GPIO74_LCD_PCLK,
-+ GPIO75_LCD_BIAS,
-+ GPIO76_LCD_VSYNC,
-+ GPIO127_LCD_CS_N,
-+
-+ /* BTUART */
-+ GPIO111_UART2_RTS,
-+ GPIO112_UART2_RXD,
-+ GPIO113_UART2_TXD,
-+ GPIO114_UART2_CTS,
-+
-+ /* STUART */
-+ GPIO109_UART3_TXD,
-+ GPIO110_UART3_RXD,
-+
-+ /* AC97 */
-+ GPIO23_AC97_nACRESET,
-+ GPIO24_AC97_SYSCLK,
-+ GPIO29_AC97_BITCLK,
-+ GPIO25_AC97_SDATA_IN_0,
-+ GPIO27_AC97_SDATA_OUT,
-+ GPIO28_AC97_SYNC,
-+
-+ /* Keypad */
-+ GPIO107_KP_DKIN_0,
-+ GPIO108_KP_DKIN_1,
-+ GPIO115_KP_MKIN_0,
-+ GPIO116_KP_MKIN_1,
-+ GPIO117_KP_MKIN_2,
-+ GPIO118_KP_MKIN_3,
-+ GPIO119_KP_MKIN_4,
-+ GPIO120_KP_MKIN_5,
-+ GPIO2_2_KP_MKIN_6,
-+ GPIO3_2_KP_MKIN_7,
-+ GPIO121_KP_MKOUT_0,
-+ GPIO122_KP_MKOUT_1,
-+ GPIO123_KP_MKOUT_2,
-+ GPIO124_KP_MKOUT_3,
-+ GPIO125_KP_MKOUT_4,
-+ GPIO4_2_KP_MKOUT_5,
-+ GPIO5_2_KP_MKOUT_6,
-+ GPIO6_2_KP_MKOUT_7,
-+};
-+
-+static mfp_cfg_t pxa300_mfp_cfg[] __initdata = {
-+ /* FFUART */
-+ GPIO30_UART1_RXD,
-+ GPIO31_UART1_TXD,
-+ GPIO32_UART1_CTS,
-+ GPIO37_UART1_RTS,
-+ GPIO33_UART1_DCD,
-+ GPIO34_UART1_DSR,
-+ GPIO35_UART1_RI,
-+ GPIO36_UART1_DTR,
-+
-+ /* Ethernet */
-+ GPIO2_nCS3,
-+ GPIO99_GPIO,
-+};
-+
-+static mfp_cfg_t pxa310_mfp_cfg[] __initdata = {
-+ /* FFUART */
-+ GPIO99_UART1_RXD,
-+ GPIO100_UART1_TXD,
-+ GPIO101_UART1_CTS,
-+ GPIO106_UART1_RTS,
-+
-+ /* Ethernet */
-+ GPIO2_nCS3,
-+ GPIO102_GPIO,
-+};
-+
-+#define NUM_LCD_DETECT_PINS 7
-+
-+static int lcd_detect_pins[] __initdata = {
-+ MFP_PIN_GPIO71, /* LCD_LDD_17 - ORIENT */
-+ MFP_PIN_GPIO70, /* LCD_LDD_16 - LCDID[5] */
-+ MFP_PIN_GPIO75, /* LCD_BIAS - LCDID[4] */
-+ MFP_PIN_GPIO73, /* LCD_LCLK - LCDID[3] */
-+ MFP_PIN_GPIO72, /* LCD_FCLK - LCDID[2] */
-+ MFP_PIN_GPIO127,/* LCD_CS_N - LCDID[1] */
-+ MFP_PIN_GPIO76, /* LCD_VSYNC - LCDID[0] */
-+};
-+
-+static void __init zylonite_detect_lcd_panel(void)
-+{
-+ unsigned long mfpr_save[NUM_LCD_DETECT_PINS];
-+ int i, gpio, id = 0;
-+
-+ /* save the original MFP settings of these pins and configure
-+ * them as GPIO Input, DS01X, Pull Neither, Edge Clear
-+ */
-+ for (i = 0; i < NUM_LCD_DETECT_PINS; i++) {
-+ mfpr_save[i] = pxa3xx_mfp_read(lcd_detect_pins[i]);
-+ pxa3xx_mfp_write(lcd_detect_pins[i], 0x8440);
-+ }
-+
-+ for (i = 0; i < NUM_LCD_DETECT_PINS; i++) {
-+ id = id << 1;
-+ gpio = mfp_to_gpio(lcd_detect_pins[i]);
-+ gpio_direction_input(gpio);
-+
-+ if (gpio_get_value(gpio))
-+ id = id | 0x1;
-+ }
-+
-+ /* lcd id, flush out bit 1 */
-+ lcd_id = id & 0x3d;
-+
-+ /* lcd orientation, portrait or landscape */
-+ lcd_orientation = (id >> 6) & 0x1;
-+
-+ /* restore the original MFP settings */
-+ for (i = 0; i < NUM_LCD_DETECT_PINS; i++)
-+ pxa3xx_mfp_write(lcd_detect_pins[i], mfpr_save[i]);
-+}
-+
-+void __init zylonite_pxa300_init(void)
-+{
-+ if (cpu_is_pxa300() || cpu_is_pxa310()) {
-+ /* initialize MFP */
-+ pxa3xx_mfp_config(ARRAY_AND_SIZE(common_mfp_cfg));
-+
-+ /* detect LCD panel */
-+ zylonite_detect_lcd_panel();
-+
-+ /* GPIO pin assignment */
-+ gpio_backlight = mfp_to_gpio(MFP_PIN_GPIO20);
-+ }
-+
-+ if (cpu_is_pxa300()) {
-+ pxa3xx_mfp_config(ARRAY_AND_SIZE(pxa300_mfp_cfg));
-+ gpio_eth_irq = mfp_to_gpio(MFP_PIN_GPIO99);
-+ }
-+
-+ if (cpu_is_pxa310()) {
-+ pxa3xx_mfp_config(ARRAY_AND_SIZE(pxa310_mfp_cfg));
-+ gpio_eth_irq = mfp_to_gpio(MFP_PIN_GPIO102);
-+ }
-+}
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/zylonite_pxa320.c
-@@ -0,0 +1,173 @@
-+/*
-+ * linux/arch/arm/mach-pxa/zylonite_pxa320.c
-+ *
-+ * PXA320 specific support code for the
-+ * PXA3xx Development Platform (aka Zylonite)
-+ *
-+ * Copyright (C) 2007 Marvell Internation Ltd.
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+
-+#include <asm/arch/gpio.h>
-+#include <asm/arch/mfp-pxa320.h>
-+#include <asm/arch/zylonite.h>
-+
-+#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
-+
-+static mfp_cfg_t mfp_cfg[] __initdata = {
-+ /* LCD */
-+ GPIO6_2_LCD_LDD_0,
-+ GPIO7_2_LCD_LDD_1,
-+ GPIO8_2_LCD_LDD_2,
-+ GPIO9_2_LCD_LDD_3,
-+ GPIO10_2_LCD_LDD_4,
-+ GPIO11_2_LCD_LDD_5,
-+ GPIO12_2_LCD_LDD_6,
-+ GPIO13_2_LCD_LDD_7,
-+ GPIO63_LCD_LDD_8,
-+ GPIO64_LCD_LDD_9,
-+ GPIO65_LCD_LDD_10,
-+ GPIO66_LCD_LDD_11,
-+ GPIO67_LCD_LDD_12,
-+ GPIO68_LCD_LDD_13,
-+ GPIO69_LCD_LDD_14,
-+ GPIO70_LCD_LDD_15,
-+ GPIO71_LCD_LDD_16,
-+ GPIO72_LCD_LDD_17,
-+ GPIO73_LCD_CS_N,
-+ GPIO74_LCD_VSYNC,
-+ GPIO14_2_LCD_FCLK,
-+ GPIO15_2_LCD_LCLK,
-+ GPIO16_2_LCD_PCLK,
-+ GPIO17_2_LCD_BIAS,
-+
-+ /* FFUART */
-+ GPIO41_UART1_RXD,
-+ GPIO42_UART1_TXD,
-+ GPIO43_UART1_CTS,
-+ GPIO44_UART1_DCD,
-+ GPIO45_UART1_DSR,
-+ GPIO46_UART1_RI,
-+ GPIO47_UART1_DTR,
-+ GPIO48_UART1_RTS,
-+
-+ /* AC97 */
-+ GPIO34_AC97_SYSCLK,
-+ GPIO35_AC97_SDATA_IN_0,
-+ GPIO37_AC97_SDATA_OUT,
-+ GPIO38_AC97_SYNC,
-+ GPIO39_AC97_BITCLK,
-+ GPIO40_AC97_nACRESET,
-+
-+ /* I2C */
-+ GPIO32_I2C_SCL,
-+ GPIO33_I2C_SDA,
-+
-+ /* Keypad */
-+ GPIO105_KP_DKIN_0,
-+ GPIO106_KP_DKIN_1,
-+ GPIO113_KP_MKIN_0,
-+ GPIO114_KP_MKIN_1,
-+ GPIO115_KP_MKIN_2,
-+ GPIO116_KP_MKIN_3,
-+ GPIO117_KP_MKIN_4,
-+ GPIO118_KP_MKIN_5,
-+ GPIO119_KP_MKIN_6,
-+ GPIO120_KP_MKIN_7,
-+ GPIO121_KP_MKOUT_0,
-+ GPIO122_KP_MKOUT_1,
-+ GPIO123_KP_MKOUT_2,
-+ GPIO124_KP_MKOUT_3,
-+ GPIO125_KP_MKOUT_4,
-+ GPIO126_KP_MKOUT_5,
-+ GPIO127_KP_MKOUT_6,
-+ GPIO5_2_KP_MKOUT_7,
-+
-+ /* Ethernet */
-+ GPIO4_nCS3,
-+ GPIO90_GPIO,
-+};
-+
-+#define NUM_LCD_DETECT_PINS 7
-+
-+static int lcd_detect_pins[] __initdata = {
-+ MFP_PIN_GPIO72, /* LCD_LDD_17 - ORIENT */
-+ MFP_PIN_GPIO71, /* LCD_LDD_16 - LCDID[5] */
-+ MFP_PIN_GPIO17_2, /* LCD_BIAS - LCDID[4] */
-+ MFP_PIN_GPIO15_2, /* LCD_LCLK - LCDID[3] */
-+ MFP_PIN_GPIO14_2, /* LCD_FCLK - LCDID[2] */
-+ MFP_PIN_GPIO73, /* LCD_CS_N - LCDID[1] */
-+ MFP_PIN_GPIO74, /* LCD_VSYNC - LCDID[0] */
-+ /*
-+ * set the MFP_PIN_GPIO 14/15/17 to alternate function other than
-+ * GPIO to avoid input level confliction with 14_2, 15_2, 17_2
-+ */
-+ MFP_PIN_GPIO14,
-+ MFP_PIN_GPIO15,
-+ MFP_PIN_GPIO17,
-+};
-+
-+static int lcd_detect_mfpr[] __initdata = {
-+ /* AF0, DS 1X, Pull Neither, Edge Clear */
-+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
-+ 0xc442, /* Backlight, Pull-Up, AF2 */
-+ 0x8445, /* AF5 */
-+ 0x8445, /* AF5 */
-+};
-+
-+static void __init zylonite_detect_lcd_panel(void)
-+{
-+ unsigned long mfpr_save[ARRAY_SIZE(lcd_detect_pins)];
-+ int i, gpio, id = 0;
-+
-+ /* save the original MFP settings of these pins and configure them
-+ * as GPIO Input, DS01X, Pull Neither, Edge Clear
-+ */
-+ for (i = 0; i < ARRAY_SIZE(lcd_detect_pins); i++) {
-+ mfpr_save[i] = pxa3xx_mfp_read(lcd_detect_pins[i]);
-+ pxa3xx_mfp_write(lcd_detect_pins[i], lcd_detect_mfpr[i]);
-+ }
-+
-+ for (i = 0; i < NUM_LCD_DETECT_PINS; i++) {
-+ id = id << 1;
-+ gpio = mfp_to_gpio(lcd_detect_pins[i]);
-+ gpio_direction_input(gpio);
-+
-+ if (gpio_get_value(gpio))
-+ id = id | 0x1;
-+ }
-+
-+ /* lcd id, flush out bit 1 */
-+ lcd_id = id & 0x3d;
-+
-+ /* lcd orientation, portrait or landscape */
-+ lcd_orientation = (id >> 6) & 0x1;
-+
-+ /* restore the original MFP settings */
-+ for (i = 0; i < ARRAY_SIZE(lcd_detect_pins); i++)
-+ pxa3xx_mfp_write(lcd_detect_pins[i], mfpr_save[i]);
-+}
-+
-+void __init zylonite_pxa320_init(void)
-+{
-+ if (cpu_is_pxa320()) {
-+ /* initialize MFP */
-+ pxa3xx_mfp_config(ARRAY_AND_SIZE(mfp_cfg));
-+
-+ /* detect LCD panel */
-+ zylonite_detect_lcd_panel();
-+
-+ /* GPIO pin assignment */
-+ gpio_backlight = mfp_to_gpio(MFP_PIN_GPIO14);
-+ gpio_eth_irq = mfp_to_gpio(MFP_PIN_GPIO9);
-+ }
-+}
---- linux-2.6.23.orig/arch/arm/mm/Kconfig
-+++ linux-2.6.23/arch/arm/mm/Kconfig
-@@ -322,7 +322,7 @@
- # XScale
- config CPU_XSCALE
- bool
-- depends on ARCH_IOP32X || ARCH_IOP33X || ARCH_PXA || ARCH_IXP4XX || ARCH_IXP2000
-+ depends on ARCH_IOP32X || ARCH_IOP33X || PXA25x || PXA27x || ARCH_IXP4XX || ARCH_IXP2000
- default y
- select CPU_32v5
- select CPU_ABRT_EV5T
-@@ -333,7 +333,7 @@
- # XScale Core Version 3
- config CPU_XSC3
- bool
-- depends on ARCH_IXP23XX || ARCH_IOP13XX
-+ depends on ARCH_IXP23XX || ARCH_IOP13XX || PXA3xx
- default y
- select CPU_32v5
- select CPU_ABRT_EV5T
---- linux-2.6.23.orig/drivers/i2c/busses/i2c-pxa.c
-+++ linux-2.6.23/drivers/i2c/busses/i2c-pxa.c
-@@ -31,6 +31,8 @@
- #include <linux/interrupt.h>
- #include <linux/i2c-pxa.h>
- #include <linux/platform_device.h>
-+#include <linux/err.h>
-+#include <linux/clk.h>
-
- #include <asm/hardware.h>
- #include <asm/irq.h>
-@@ -48,6 +50,7 @@
- unsigned int slave_addr;
-
- struct i2c_adapter adap;
-+ struct clk *clk;
- #ifdef CONFIG_I2C_PXA_SLAVE
- struct i2c_slave_client *slave;
- #endif
-@@ -869,6 +872,12 @@
-
- sprintf(i2c->adap.name, "pxa_i2c-i2c.%u", dev->id);
-
-+ i2c->clk = clk_get(&dev->dev, "I2CCLK");
-+ if (IS_ERR(i2c->clk)) {
-+ ret = PTR_ERR(i2c->clk);
-+ goto eclk;
-+ }
-+
- i2c->reg_base = ioremap(res->start, res_len(res));
- if (!i2c->reg_base) {
- ret = -EIO;
-@@ -889,22 +898,19 @@
- }
- #endif
-
-+ clk_enable(i2c->clk);
-+#ifdef CONFIG_PXA27x
- switch (dev->id) {
- case 0:
--#ifdef CONFIG_PXA27x
- pxa_gpio_mode(GPIO117_I2CSCL_MD);
- pxa_gpio_mode(GPIO118_I2CSDA_MD);
--#endif
-- pxa_set_cken(CKEN_I2C, 1);
- break;
--#ifdef CONFIG_PXA27x
- case 1:
- local_irq_disable();
- PCFR |= PCFR_PI2CEN;
- local_irq_enable();
-- pxa_set_cken(CKEN_PWRI2C, 1);
--#endif
- }
-+#endif
-
- ret = request_irq(irq, i2c_pxa_handler, IRQF_DISABLED,
- i2c->adap.name, i2c);
-@@ -948,19 +954,18 @@
- eadapt:
- free_irq(irq, i2c);
- ereqirq:
-- switch (dev->id) {
-- case 0:
-- pxa_set_cken(CKEN_I2C, 0);
-- break;
-+ clk_disable(i2c->clk);
-+
- #ifdef CONFIG_PXA27x
-- case 1:
-- pxa_set_cken(CKEN_PWRI2C, 0);
-+ if (dev->id == 1) {
- local_irq_disable();
- PCFR &= ~PCFR_PI2CEN;
- local_irq_enable();
--#endif
- }
-+#endif
- eremap:
-+ clk_put(i2c->clk);
-+eclk:
- kfree(i2c);
- emalloc:
- release_mem_region(res->start, res_len(res));
-@@ -975,18 +980,18 @@
-
- i2c_del_adapter(&i2c->adap);
- free_irq(i2c->irq, i2c);
-- switch (dev->id) {
-- case 0:
-- pxa_set_cken(CKEN_I2C, 0);
-- break;
-+
-+ clk_disable(i2c->clk);
-+ clk_put(i2c->clk);
-+
- #ifdef CONFIG_PXA27x
-- case 1:
-- pxa_set_cken(CKEN_PWRI2C, 0);
-+ if (dev->id == 1) {
- local_irq_disable();
- PCFR &= ~PCFR_PI2CEN;
- local_irq_enable();
--#endif
- }
-+#endif
-+
- release_mem_region(i2c->iobase, i2c->iosize);
- kfree(i2c);
-
---- linux-2.6.23.orig/drivers/input/keyboard/pxa27x_keyboard.c
-+++ linux-2.6.23/drivers/input/keyboard/pxa27x_keyboard.c
-@@ -23,6 +23,8 @@
- #include <linux/input.h>
- #include <linux/device.h>
- #include <linux/platform_device.h>
-+#include <linux/clk.h>
-+#include <linux/err.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -40,6 +42,8 @@
- col/2 == 2 ? KPASMKP2 : KPASMKP3)
- #define KPASMKPx_MKC(row, col) (1 << (row + 16 * (col % 2)))
-
-+static struct clk *pxakbd_clk;
-+
- static irqreturn_t pxakbd_irq_handler(int irq, void *dev_id)
- {
- struct platform_device *pdev = dev_id;
-@@ -104,7 +108,7 @@
- KPREC = 0x7F;
-
- /* Enable unit clock */
-- pxa_set_cken(CKEN_KEYPAD, 1);
-+ clk_enable(pxakbd_clk);
-
- return 0;
- }
-@@ -112,7 +116,7 @@
- static void pxakbd_close(struct input_dev *dev)
- {
- /* Disable clock unit */
-- pxa_set_cken(CKEN_KEYPAD, 0);
-+ clk_disable(pxakbd_clk);
- }
-
- #ifdef CONFIG_PM
-@@ -140,7 +144,8 @@
- KPREC = pdata->reg_kprec;
-
- /* Enable unit clock */
-- pxa_set_cken(CKEN_KEYPAD, 1);
-+ clk_disable(pxakbd_clk);
-+ clk_enable(pxakbd_clk);
- }
-
- mutex_unlock(&input_dev->mutex);
-@@ -158,11 +163,18 @@
- struct input_dev *input_dev;
- int i, row, col, error;
-
-+ pxakbd_clk = clk_get(&pdev->dev, "KBDCLK");
-+ if (IS_ERR(pxakbd_clk)) {
-+ error = PTR_ERR(pxakbd_clk);
-+ goto err_clk;
-+ }
-+
- /* Create and register the input driver. */
- input_dev = input_allocate_device();
- if (!input_dev) {
- printk(KERN_ERR "Cannot request keypad device\n");
-- return -ENOMEM;
-+ error = -ENOMEM;
-+ goto err_alloc;
- }
-
- input_dev->name = DRIVER_NAME;
-@@ -185,7 +197,6 @@
- DRIVER_NAME, pdev);
- if (error) {
- printk(KERN_ERR "Cannot request keypad IRQ\n");
-- pxa_set_cken(CKEN_KEYPAD, 0);
- goto err_free_dev;
- }
-
-@@ -217,6 +228,9 @@
- free_irq(IRQ_KEYPAD, pdev);
- err_free_dev:
- input_free_device(input_dev);
-+ err_alloc:
-+ clk_put(pxakbd_clk);
-+ err_clk:
- return error;
- }
-
-@@ -226,6 +240,7 @@
-
- input_unregister_device(input_dev);
- free_irq(IRQ_KEYPAD, pdev);
-+ clk_put(pxakbd_clk);
- platform_set_drvdata(pdev, NULL);
-
- return 0;
---- linux-2.6.23.orig/drivers/mmc/host/pxamci.c
-+++ linux-2.6.23/drivers/mmc/host/pxamci.c
-@@ -23,6 +23,8 @@
- #include <linux/delay.h>
- #include <linux/interrupt.h>
- #include <linux/dma-mapping.h>
-+#include <linux/clk.h>
-+#include <linux/err.h>
- #include <linux/mmc/host.h>
-
- #include <asm/dma.h>
-@@ -44,6 +46,8 @@
- spinlock_t lock;
- struct resource *res;
- void __iomem *base;
-+ struct clk *clk;
-+ unsigned long clkrate;
- int irq;
- int dma;
- unsigned int clkrt;
-@@ -119,7 +123,7 @@
- writel(nob, host->base + MMC_NOB);
- writel(data->blksz, host->base + MMC_BLKLEN);
-
-- clks = (unsigned long long)data->timeout_ns * CLOCKRATE;
-+ clks = (unsigned long long)data->timeout_ns * host->clkrate;
- do_div(clks, 1000000000UL);
- timeout = (unsigned int)clks + (data->timeout_clks << host->clkrt);
- writel((timeout + 255) / 256, host->base + MMC_RDTO);
-@@ -358,18 +362,25 @@
- struct pxamci_host *host = mmc_priv(mmc);
-
- if (ios->clock) {
-- unsigned int clk = CLOCKRATE / ios->clock;
-- if (CLOCKRATE / clk > ios->clock)
-+ unsigned long rate = host->clkrate;
-+ unsigned int clk = rate / ios->clock;
-+
-+ /*
-+ * clk might result in a lower divisor than we
-+ * desire. check for that condition and adjust
-+ * as appropriate.
-+ */
-+ if (rate / clk > ios->clock)
- clk <<= 1;
- host->clkrt = fls(clk) - 1;
-- pxa_set_cken(CKEN_MMC, 1);
-+ clk_enable(host->clk);
-
- /*
- * we write clkrt on the next command
- */
- } else {
- pxamci_stop_clock(host);
-- pxa_set_cken(CKEN_MMC, 0);
-+ clk_disable(host->clk);
- }
-
- if (host->power_mode != ios->power_mode) {
-@@ -429,8 +440,6 @@
- }
-
- mmc->ops = &pxamci_ops;
-- mmc->f_min = CLOCKRATE_MIN;
-- mmc->f_max = CLOCKRATE_MAX;
-
- /*
- * We can do SG-DMA, but we don't because we never know how much
-@@ -457,6 +466,22 @@
- host->mmc = mmc;
- host->dma = -1;
- host->pdata = pdev->dev.platform_data;
-+
-+ host->clk = clk_get(&pdev->dev, "MMCCLK");
-+ if (IS_ERR(host->clk)) {
-+ ret = PTR_ERR(host->clk);
-+ host->clk = NULL;
-+ goto out;
-+ }
-+
-+ host->clkrate = clk_get_rate(host->clk);
-+
-+ /*
-+ * Calculate minimum clock rate, rounding up.
-+ */
-+ mmc->f_min = (host->clkrate + 63) / 64;
-+ mmc->f_max = host->clkrate;
-+
- mmc->ocr_avail = host->pdata ?
- host->pdata->ocr_mask :
- MMC_VDD_32_33|MMC_VDD_33_34;
-@@ -515,6 +540,8 @@
- iounmap(host->base);
- if (host->sg_cpu)
- dma_free_coherent(&pdev->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
-+ if (host->clk)
-+ clk_put(host->clk);
- }
- if (mmc)
- mmc_free_host(mmc);
-@@ -549,6 +576,8 @@
- iounmap(host->base);
- dma_free_coherent(&pdev->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
-
-+ clk_put(host->clk);
-+
- release_resource(host->res);
-
- mmc_free_host(mmc);
---- linux-2.6.23.orig/drivers/mmc/host/pxamci.h
-+++ linux-2.6.23/drivers/mmc/host/pxamci.h
-@@ -86,17 +86,3 @@
- #define MMC_RXFIFO 0x0040 /* 8 bit */
-
- #define MMC_TXFIFO 0x0044 /* 8 bit */
--
--/*
-- * The base MMC clock rate
-- */
--#ifdef CONFIG_PXA27x
--#define CLOCKRATE_MIN 304688
--#define CLOCKRATE_MAX 19500000
--#else
--#define CLOCKRATE_MIN 312500
--#define CLOCKRATE_MAX 20000000
--#endif
--
--#define CLOCKRATE CLOCKRATE_MAX
--
---- linux-2.6.23.orig/drivers/mtd/maps/lubbock-flash.c
-+++ linux-2.6.23/drivers/mtd/maps/lubbock-flash.c
-@@ -22,6 +22,7 @@
-
- #include <asm/io.h>
- #include <asm/hardware.h>
-+#include <asm/mach-types.h>
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/lubbock.h>
- #include <asm/cacheflush.h>
-@@ -71,9 +72,14 @@
-
- static int __init init_lubbock(void)
- {
-- int flashboot = (LUB_CONF_SWITCHES & 1);
-+ int flashboot;
- int ret = 0, i;
-
-+ if (!machine_is_lubbock())
-+ return -ENODEV;
-+
-+ flashboot = (LUB_CONF_SWITCHES & 1);
-+
- lubbock_maps[0].bankwidth = lubbock_maps[1].bankwidth =
- (BOOT_DEF & 1) ? 2 : 4;
-
---- linux-2.6.23.orig/drivers/mtd/maps/mainstone-flash.c
-+++ linux-2.6.23/drivers/mtd/maps/mainstone-flash.c
-@@ -22,6 +22,7 @@
-
- #include <asm/io.h>
- #include <asm/hardware.h>
-+#include <asm/mach-types.h>
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/mainstone.h>
- #include <asm/cacheflush.h>
-@@ -76,6 +77,9 @@
- int SW7 = 0; /* FIXME: get from SCR (Mst doc section 3.2.1.1) */
- int ret = 0, i;
-
-+ if (!machine_is_mainstone())
-+ return -ENODEV;
-+
- mainstone_maps[0].bankwidth = (BOOT_DEF & 1) ? 2 : 4;
- mainstone_maps[1].bankwidth = 4;
-
---- linux-2.6.23.orig/drivers/net/irda/pxaficp_ir.c
-+++ linux-2.6.23/drivers/net/irda/pxaficp_ir.c
-@@ -23,6 +23,7 @@
- #include <linux/dma-mapping.h>
- #include <linux/platform_device.h>
- #include <linux/pm.h>
-+#include <linux/clk.h>
-
- #include <net/irda/irda.h>
- #include <net/irda/irmod.h>
-@@ -87,8 +88,30 @@
-
- struct device *dev;
- struct pxaficp_platform_data *pdata;
-+ struct clk *fir_clk;
-+ struct clk *sir_clk;
-+ struct clk *cur_clk;
- };
-
-+static inline void pxa_irda_disable_clk(struct pxa_irda *si)
-+{
-+ if (si->cur_clk)
-+ clk_disable(si->cur_clk);
-+ si->cur_clk = NULL;
-+}
-+
-+static inline void pxa_irda_enable_firclk(struct pxa_irda *si)
-+{
-+ si->cur_clk = si->fir_clk;
-+ clk_enable(si->fir_clk);
-+}
-+
-+static inline void pxa_irda_enable_sirclk(struct pxa_irda *si)
-+{
-+ si->cur_clk = si->sir_clk;
-+ clk_enable(si->sir_clk);
-+}
-+
-
- #define IS_FIR(si) ((si)->speed >= 4000000)
- #define IRDA_FRAME_SIZE_LIMIT 2047
-@@ -134,7 +157,7 @@
- DCSR(si->rxdma) &= ~DCSR_RUN;
- /* disable FICP */
- ICCR0 = 0;
-- pxa_set_cken(CKEN_FICP, 0);
-+ pxa_irda_disable_clk(si);
-
- /* set board transceiver to SIR mode */
- si->pdata->transceiver_mode(si->dev, IR_SIRMODE);
-@@ -144,7 +167,7 @@
- pxa_gpio_mode(GPIO47_STTXD_MD);
-
- /* enable the STUART clock */
-- pxa_set_cken(CKEN_STUART, 1);
-+ pxa_irda_enable_sirclk(si);
- }
-
- /* disable STUART first */
-@@ -169,7 +192,7 @@
- /* disable STUART */
- STIER = 0;
- STISR = 0;
-- pxa_set_cken(CKEN_STUART, 0);
-+ pxa_irda_disable_clk(si);
-
- /* disable FICP first */
- ICCR0 = 0;
-@@ -182,7 +205,7 @@
- pxa_gpio_mode(GPIO47_ICPTXD_MD);
-
- /* enable the FICP clock */
-- pxa_set_cken(CKEN_FICP, 1);
-+ pxa_irda_enable_firclk(si);
-
- si->speed = speed;
- pxa_irda_fir_dma_rx_start(si);
-@@ -592,16 +615,15 @@
- STIER = 0;
- /* disable STUART SIR mode */
- STISR = 0;
-- /* disable the STUART clock */
-- pxa_set_cken(CKEN_STUART, 0);
-
- /* disable DMA */
- DCSR(si->txdma) &= ~DCSR_RUN;
- DCSR(si->rxdma) &= ~DCSR_RUN;
- /* disable FICP */
- ICCR0 = 0;
-- /* disable the FICP clock */
-- pxa_set_cken(CKEN_FICP, 0);
-+
-+ /* disable the STUART or FICP clocks */
-+ pxa_irda_disable_clk(si);
-
- DRCMR17 = 0;
- DRCMR18 = 0;
-@@ -792,6 +814,13 @@
- si->dev = &pdev->dev;
- si->pdata = pdev->dev.platform_data;
-
-+ si->sir_clk = clk_get(&pdev->dev, "UARTCLK");
-+ si->fir_clk = clk_get(&pdev->dev, "FICPCLK");
-+ if (IS_ERR(si->sir_clk) || IS_ERR(si->fir_clk)) {
-+ err = PTR_ERR(IS_ERR(si->sir_clk) ? si->sir_clk : si->fir_clk);
-+ goto err_mem_4;
-+ }
-+
- /*
- * Initialise the SIR buffers
- */
-@@ -831,6 +860,10 @@
- err_mem_5:
- kfree(si->rx_buff.head);
- err_mem_4:
-+ if (si->sir_clk && !IS_ERR(si->sir_clk))
-+ clk_put(si->sir_clk);
-+ if (si->fir_clk && !IS_ERR(si->fir_clk))
-+ clk_put(si->fir_clk);
- free_netdev(dev);
- err_mem_3:
- release_mem_region(__PREG(FICP), 0x1c);
-@@ -850,6 +883,8 @@
- unregister_netdev(dev);
- kfree(si->tx_buff.head);
- kfree(si->rx_buff.head);
-+ clk_put(si->fir_clk);
-+ clk_put(si->sir_clk);
- free_netdev(dev);
- }
-
---- linux-2.6.23.orig/drivers/net/smc91x.c
-+++ linux-2.6.23/drivers/net/smc91x.c
-@@ -173,56 +173,6 @@
- */
- #define MII_DELAY 1
-
--/* store this information for the driver.. */
--struct smc_local {
-- /*
-- * If I have to wait until memory is available to send a
-- * packet, I will store the skbuff here, until I get the
-- * desired memory. Then, I'll send it out and free it.
-- */
-- struct sk_buff *pending_tx_skb;
-- struct tasklet_struct tx_task;
--
-- /*
-- * these are things that the kernel wants me to keep, so users
-- * can find out semi-useless statistics of how well the card is
-- * performing
-- */
-- struct net_device_stats stats;
--
-- /* version/revision of the SMC91x chip */
-- int version;
--
-- /* Contains the current active transmission mode */
-- int tcr_cur_mode;
--
-- /* Contains the current active receive mode */
-- int rcr_cur_mode;
--
-- /* Contains the current active receive/phy mode */
-- int rpc_cur_mode;
-- int ctl_rfduplx;
-- int ctl_rspeed;
--
-- u32 msg_enable;
-- u32 phy_type;
-- struct mii_if_info mii;
--
-- /* work queue */
-- struct work_struct phy_configure;
-- struct net_device *dev;
-- int work_pending;
--
-- spinlock_t lock;
--
--#ifdef SMC_USE_PXA_DMA
-- /* DMA needs the physical address of the chip */
-- u_long physaddr;
--#endif
-- void __iomem *base;
-- void __iomem *datacs;
--};
--
- #if SMC_DEBUG > 0
- #define DBG(n, args...) \
- do { \
-@@ -2238,17 +2188,19 @@
- goto out_release_attrib;
- }
-
-- platform_set_drvdata(pdev, ndev);
-- ret = smc_probe(ndev, addr);
-- if (ret != 0)
-- goto out_iounmap;
- #ifdef SMC_USE_PXA_DMA
-- else {
-+ {
- struct smc_local *lp = netdev_priv(ndev);
-+ lp->device = &pdev->dev;
- lp->physaddr = res->start;
- }
- #endif
-
-+ platform_set_drvdata(pdev, ndev);
-+ ret = smc_probe(ndev, addr);
-+ if (ret != 0)
-+ goto out_iounmap;
-+
- smc_request_datacs(pdev, ndev);
-
- return 0;
---- linux-2.6.23.orig/drivers/net/smc91x.h
-+++ linux-2.6.23/drivers/net/smc91x.h
-@@ -461,6 +461,59 @@
-
- #endif
-
-+
-+/* store this information for the driver.. */
-+struct smc_local {
-+ /*
-+ * If I have to wait until memory is available to send a
-+ * packet, I will store the skbuff here, until I get the
-+ * desired memory. Then, I'll send it out and free it.
-+ */
-+ struct sk_buff *pending_tx_skb;
-+ struct tasklet_struct tx_task;
-+
-+ /*
-+ * these are things that the kernel wants me to keep, so users
-+ * can find out semi-useless statistics of how well the card is
-+ * performing
-+ */
-+ struct net_device_stats stats;
-+
-+ /* version/revision of the SMC91x chip */
-+ int version;
-+
-+ /* Contains the current active transmission mode */
-+ int tcr_cur_mode;
-+
-+ /* Contains the current active receive mode */
-+ int rcr_cur_mode;
-+
-+ /* Contains the current active receive/phy mode */
-+ int rpc_cur_mode;
-+ int ctl_rfduplx;
-+ int ctl_rspeed;
-+
-+ u32 msg_enable;
-+ u32 phy_type;
-+ struct mii_if_info mii;
-+
-+ /* work queue */
-+ struct work_struct phy_configure;
-+ struct net_device *dev;
-+ int work_pending;
-+
-+ spinlock_t lock;
-+
-+#ifdef SMC_USE_PXA_DMA
-+ /* DMA needs the physical address of the chip */
-+ u_long physaddr;
-+ struct device *device;
-+#endif
-+ void __iomem *base;
-+ void __iomem *datacs;
-+};
-+
-+
- #ifdef SMC_USE_PXA_DMA
- /*
- * Let's use the DMA engine on the XScale PXA2xx for RX packets. This is
-@@ -475,11 +528,12 @@
- #ifdef SMC_insl
- #undef SMC_insl
- #define SMC_insl(a, r, p, l) \
-- smc_pxa_dma_insl(a, lp->physaddr, r, dev->dma, p, l)
-+ smc_pxa_dma_insl(a, lp, r, dev->dma, p, l)
- static inline void
--smc_pxa_dma_insl(void __iomem *ioaddr, u_long physaddr, int reg, int dma,
-+smc_pxa_dma_insl(void __iomem *ioaddr, struct smc_local *lp, int reg, int dma,
- u_char *buf, int len)
- {
-+ u_long physaddr = lp->physaddr;
- dma_addr_t dmabuf;
-
- /* fallback if no DMA available */
-@@ -496,7 +550,7 @@
- }
-
- len *= 4;
-- dmabuf = dma_map_single(NULL, buf, len, DMA_FROM_DEVICE);
-+ dmabuf = dma_map_single(lp->device, buf, len, DMA_FROM_DEVICE);
- DCSR(dma) = DCSR_NODESC;
- DTADR(dma) = dmabuf;
- DSADR(dma) = physaddr + reg;
-@@ -506,18 +560,19 @@
- while (!(DCSR(dma) & DCSR_STOPSTATE))
- cpu_relax();
- DCSR(dma) = 0;
-- dma_unmap_single(NULL, dmabuf, len, DMA_FROM_DEVICE);
-+ dma_unmap_single(lp->device, dmabuf, len, DMA_FROM_DEVICE);
- }
- #endif
-
- #ifdef SMC_insw
- #undef SMC_insw
- #define SMC_insw(a, r, p, l) \
-- smc_pxa_dma_insw(a, lp->physaddr, r, dev->dma, p, l)
-+ smc_pxa_dma_insw(a, lp, r, dev->dma, p, l)
- static inline void
--smc_pxa_dma_insw(void __iomem *ioaddr, u_long physaddr, int reg, int dma,
-+smc_pxa_dma_insw(void __iomem *ioaddr, struct smc_local *lp, int reg, int dma,
- u_char *buf, int len)
- {
-+ u_long physaddr = lp->physaddr;
- dma_addr_t dmabuf;
-
- /* fallback if no DMA available */
-@@ -534,7 +589,7 @@
- }
-
- len *= 2;
-- dmabuf = dma_map_single(NULL, buf, len, DMA_FROM_DEVICE);
-+ dmabuf = dma_map_single(lp->device, buf, len, DMA_FROM_DEVICE);
- DCSR(dma) = DCSR_NODESC;
- DTADR(dma) = dmabuf;
- DSADR(dma) = physaddr + reg;
-@@ -544,7 +599,7 @@
- while (!(DCSR(dma) & DCSR_STOPSTATE))
- cpu_relax();
- DCSR(dma) = 0;
-- dma_unmap_single(NULL, dmabuf, len, DMA_FROM_DEVICE);
-+ dma_unmap_single(lp->device, dmabuf, len, DMA_FROM_DEVICE);
- }
- #endif
-
---- linux-2.6.23.orig/drivers/serial/pxa.c
-+++ linux-2.6.23/drivers/serial/pxa.c
-@@ -42,6 +42,7 @@
- #include <linux/tty.h>
- #include <linux/tty_flip.h>
- #include <linux/serial_core.h>
-+#include <linux/clk.h>
-
- #include <asm/io.h>
- #include <asm/hardware.h>
-@@ -56,7 +57,7 @@
- unsigned char lcr;
- unsigned char mcr;
- unsigned int lsr_break_flag;
-- unsigned int cken;
-+ struct clk *clk;
- char *name;
- };
-
-@@ -363,6 +364,8 @@
- else
- up->mcr = 0;
-
-+ up->port.uartclk = clk_get_rate(up->clk);
-+
- /*
- * Allocate the IRQ
- */
-@@ -568,9 +571,11 @@
- unsigned int oldstate)
- {
- struct uart_pxa_port *up = (struct uart_pxa_port *)port;
-- pxa_set_cken(up->cken, !state);
-+
- if (!state)
-- udelay(1);
-+ clk_enable(up->clk);
-+ else
-+ clk_disable(up->clk);
- }
-
- static void serial_pxa_release_port(struct uart_port *port)
-@@ -604,7 +609,7 @@
-
- #ifdef CONFIG_SERIAL_PXA_CONSOLE
-
--static struct uart_pxa_port serial_pxa_ports[];
-+static struct uart_pxa_port *serial_pxa_ports[4];
- static struct uart_driver serial_pxa_reg;
-
- #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
-@@ -654,9 +659,11 @@
- static void
- serial_pxa_console_write(struct console *co, const char *s, unsigned int count)
- {
-- struct uart_pxa_port *up = &serial_pxa_ports[co->index];
-+ struct uart_pxa_port *up = serial_pxa_ports[co->index];
- unsigned int ier;
-
-+ clk_enable(up->clk);
-+
- /*
- * First save the IER then disable the interrupts
- */
-@@ -671,6 +678,8 @@
- */
- wait_for_xmitr(up);
- serial_out(up, UART_IER, ier);
-+
-+ clk_disable(up->clk);
- }
-
- static int __init
-@@ -684,7 +693,9 @@
-
- if (co->index == -1 || co->index >= serial_pxa_reg.nr)
- co->index = 0;
-- up = &serial_pxa_ports[co->index];
-+ up = serial_pxa_ports[co->index];
-+ if (!up)
-+ return -ENODEV;
-
- if (options)
- uart_parse_options(options, &baud, &parity, &bits, &flow);
-@@ -702,15 +713,6 @@
- .data = &serial_pxa_reg,
- };
-
--static int __init
--serial_pxa_console_init(void)
--{
-- register_console(&serial_pxa_console);
-- return 0;
--}
--
--console_initcall(serial_pxa_console_init);
--
- #define PXA_CONSOLE &serial_pxa_console
- #else
- #define PXA_CONSOLE NULL
-@@ -736,73 +738,13 @@
- .verify_port = serial_pxa_verify_port,
- };
-
--static struct uart_pxa_port serial_pxa_ports[] = {
-- { /* FFUART */
-- .name = "FFUART",
-- .cken = CKEN_FFUART,
-- .port = {
-- .type = PORT_PXA,
-- .iotype = UPIO_MEM,
-- .membase = (void *)&FFUART,
-- .mapbase = __PREG(FFUART),
-- .irq = IRQ_FFUART,
-- .uartclk = 921600 * 16,
-- .fifosize = 64,
-- .ops = &serial_pxa_pops,
-- .line = 0,
-- },
-- }, { /* BTUART */
-- .name = "BTUART",
-- .cken = CKEN_BTUART,
-- .port = {
-- .type = PORT_PXA,
-- .iotype = UPIO_MEM,
-- .membase = (void *)&BTUART,
-- .mapbase = __PREG(BTUART),
-- .irq = IRQ_BTUART,
-- .uartclk = 921600 * 16,
-- .fifosize = 64,
-- .ops = &serial_pxa_pops,
-- .line = 1,
-- },
-- }, { /* STUART */
-- .name = "STUART",
-- .cken = CKEN_STUART,
-- .port = {
-- .type = PORT_PXA,
-- .iotype = UPIO_MEM,
-- .membase = (void *)&STUART,
-- .mapbase = __PREG(STUART),
-- .irq = IRQ_STUART,
-- .uartclk = 921600 * 16,
-- .fifosize = 64,
-- .ops = &serial_pxa_pops,
-- .line = 2,
-- },
-- }, { /* HWUART */
-- .name = "HWUART",
-- .cken = CKEN_HWUART,
-- .port = {
-- .type = PORT_PXA,
-- .iotype = UPIO_MEM,
-- .membase = (void *)&HWUART,
-- .mapbase = __PREG(HWUART),
-- .irq = IRQ_HWUART,
-- .uartclk = 921600 * 16,
-- .fifosize = 64,
-- .ops = &serial_pxa_pops,
-- .line = 3,
-- },
-- }
--};
--
- static struct uart_driver serial_pxa_reg = {
- .owner = THIS_MODULE,
- .driver_name = "PXA serial",
- .dev_name = "ttyS",
- .major = TTY_MAJOR,
- .minor = 64,
-- .nr = ARRAY_SIZE(serial_pxa_ports),
-+ .nr = 4,
- .cons = PXA_CONSOLE,
- };
-
-@@ -828,10 +770,68 @@
-
- static int serial_pxa_probe(struct platform_device *dev)
- {
-- serial_pxa_ports[dev->id].port.dev = &dev->dev;
-- uart_add_one_port(&serial_pxa_reg, &serial_pxa_ports[dev->id].port);
-- platform_set_drvdata(dev, &serial_pxa_ports[dev->id]);
-+ struct uart_pxa_port *sport;
-+ struct resource *mmres, *irqres;
-+ int ret;
-+
-+ mmres = platform_get_resource(dev, IORESOURCE_MEM, 0);
-+ irqres = platform_get_resource(dev, IORESOURCE_IRQ, 0);
-+ if (!mmres || !irqres)
-+ return -ENODEV;
-+
-+ sport = kzalloc(sizeof(struct uart_pxa_port), GFP_KERNEL);
-+ if (!sport)
-+ return -ENOMEM;
-+
-+ sport->clk = clk_get(&dev->dev, "UARTCLK");
-+ if (IS_ERR(sport->clk)) {
-+ ret = PTR_ERR(sport->clk);
-+ goto err_free;
-+ }
-+
-+ sport->port.type = PORT_PXA;
-+ sport->port.iotype = UPIO_MEM;
-+ sport->port.mapbase = mmres->start;
-+ sport->port.irq = irqres->start;
-+ sport->port.fifosize = 64;
-+ sport->port.ops = &serial_pxa_pops;
-+ sport->port.line = dev->id;
-+ sport->port.dev = &dev->dev;
-+ sport->port.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF;
-+ sport->port.uartclk = clk_get_rate(sport->clk);
-+
-+ /*
-+ * Is it worth keeping this?
-+ */
-+ if (mmres->start == __PREG(FFUART))
-+ sport->name = "FFUART";
-+ else if (mmres->start == __PREG(BTUART))
-+ sport->name = "BTUART";
-+ else if (mmres->start == __PREG(STUART))
-+ sport->name = "STUART";
-+ else if (mmres->start == __PREG(HWUART))
-+ sport->name = "HWUART";
-+ else
-+ sport->name = "???";
-+
-+ sport->port.membase = ioremap(mmres->start, mmres->end - mmres->start + 1);
-+ if (!sport->port.membase) {
-+ ret = -ENOMEM;
-+ goto err_clk;
-+ }
-+
-+ serial_pxa_ports[dev->id] = sport;
-+
-+ uart_add_one_port(&serial_pxa_reg, &sport->port);
-+ platform_set_drvdata(dev, sport);
-+
- return 0;
-+
-+ err_clk:
-+ clk_put(sport->clk);
-+ err_free:
-+ kfree(sport);
-+ return ret;
- }
-
- static int serial_pxa_remove(struct platform_device *dev)
-@@ -840,8 +840,9 @@
-
- platform_set_drvdata(dev, NULL);
-
-- if (sport)
-- uart_remove_one_port(&serial_pxa_reg, &sport->port);
-+ uart_remove_one_port(&serial_pxa_reg, &sport->port);
-+ clk_put(sport->clk);
-+ kfree(sport);
-
- return 0;
- }
---- linux-2.6.23.orig/drivers/serial/serial_core.c
-+++ linux-2.6.23/drivers/serial/serial_core.c
-@@ -2128,6 +2128,14 @@
- spin_unlock_irqrestore(&port->lock, flags);
-
- /*
-+ * If this driver supports console, and it hasn't been
-+ * successfully registered yet, try to re-register it.
-+ * It may be that the port was not available.
-+ */
-+ if (port->cons && !(port->cons->flags & CON_ENABLED))
-+ register_console(port->cons);
-+
-+ /*
- * Power down all ports by default, except the
- * console if we have one.
- */
-@@ -2288,6 +2296,7 @@
- }
-
- state->port = port;
-+ state->pm_state = -1;
-
- port->cons = drv->cons;
- port->info = state->info;
-@@ -2310,15 +2319,6 @@
- tty_register_device(drv->tty_driver, port->line, port->dev);
-
- /*
-- * If this driver supports console, and it hasn't been
-- * successfully registered yet, try to re-register it.
-- * It may be that the port was not available.
-- */
-- if (port->type != PORT_UNKNOWN &&
-- port->cons && !(port->cons->flags & CON_ENABLED))
-- register_console(port->cons);
--
-- /*
- * Ensure UPF_DEAD is not set.
- */
- port->flags &= ~UPF_DEAD;
---- linux-2.6.23.orig/drivers/usb/gadget/pxa2xx_udc.c
-+++ linux-2.6.23/drivers/usb/gadget/pxa2xx_udc.c
-@@ -43,6 +43,8 @@
- #include <linux/platform_device.h>
- #include <linux/dma-mapping.h>
- #include <linux/irq.h>
-+#include <linux/clk.h>
-+#include <linux/err.h>
-
- #include <asm/byteorder.h>
- #include <asm/dma.h>
-@@ -1157,7 +1159,7 @@
-
- #ifdef CONFIG_ARCH_PXA
- /* Disable clock for USB device */
-- pxa_set_cken(CKEN_USB, 0);
-+ clk_disable(dev->clk);
- #endif
-
- ep0_idle (dev);
-@@ -1202,8 +1204,7 @@
-
- #ifdef CONFIG_ARCH_PXA
- /* Enable clock for USB device */
-- pxa_set_cken(CKEN_USB, 1);
-- udelay(5);
-+ clk_enable(dev->clk);
- #endif
-
- /* try to clear these bits before we enable the udc */
-@@ -2137,6 +2138,14 @@
- if (irq < 0)
- return -ENODEV;
-
-+#ifdef CONFIG_ARCH_PXA
-+ dev->clk = clk_get(&pdev->dev, "UDCCLK");
-+ if (IS_ERR(dev->clk)) {
-+ retval = PTR_ERR(dev->clk);
-+ goto err_clk;
-+ }
-+#endif
-+
- pr_debug("%s: IRQ %d%s%s\n", driver_name, irq,
- dev->has_cfr ? "" : " (!cfr)",
- SIZE_STR "(pio)"
-@@ -2152,11 +2161,10 @@
- dev_dbg(&pdev->dev,
- "can't get vbus gpio %d, err: %d\n",
- dev->mach->gpio_vbus, retval);
-- return -EBUSY;
-+ goto err_gpio_vbus;
- }
- gpio_direction_input(dev->mach->gpio_vbus);
- vbus_irq = gpio_to_irq(dev->mach->gpio_vbus);
-- set_irq_type(vbus_irq, IRQT_BOTHEDGE);
- } else
- vbus_irq = 0;
-
-@@ -2166,9 +2174,7 @@
- dev_dbg(&pdev->dev,
- "can't get pullup gpio %d, err: %d\n",
- dev->mach->gpio_pullup, retval);
-- if (dev->mach->gpio_vbus)
-- gpio_free(dev->mach->gpio_vbus);
-- return -EBUSY;
-+ goto err_gpio_pullup;
- }
- gpio_direction_output(dev->mach->gpio_pullup, 0);
- }
-@@ -2195,11 +2201,7 @@
- if (retval != 0) {
- printk(KERN_ERR "%s: can't get irq %d, err %d\n",
- driver_name, irq, retval);
-- if (dev->mach->gpio_pullup)
-- gpio_free(dev->mach->gpio_pullup);
-- if (dev->mach->gpio_vbus)
-- gpio_free(dev->mach->gpio_vbus);
-- return -EBUSY;
-+ goto err_irq1;
- }
- dev->got_irq = 1;
-
-@@ -2213,12 +2215,7 @@
- printk(KERN_ERR "%s: can't get irq %i, err %d\n",
- driver_name, LUBBOCK_USB_DISC_IRQ, retval);
- lubbock_fail0:
-- free_irq(irq, dev);
-- if (dev->mach->gpio_pullup)
-- gpio_free(dev->mach->gpio_pullup);
-- if (dev->mach->gpio_vbus)
-- gpio_free(dev->mach->gpio_vbus);
-- return -EBUSY;
-+ goto err_irq_lub;
- }
- retval = request_irq(LUBBOCK_USB_IRQ,
- lubbock_vbus_irq,
-@@ -2234,22 +2231,37 @@
- #endif
- if (vbus_irq) {
- retval = request_irq(vbus_irq, udc_vbus_irq,
-- IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
-+ IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
-+ IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
- driver_name, dev);
- if (retval != 0) {
- printk(KERN_ERR "%s: can't get irq %i, err %d\n",
- driver_name, vbus_irq, retval);
-- free_irq(irq, dev);
-- if (dev->mach->gpio_pullup)
-- gpio_free(dev->mach->gpio_pullup);
-- if (dev->mach->gpio_vbus)
-- gpio_free(dev->mach->gpio_vbus);
-- return -EBUSY;
-+ goto err_vbus_irq;
- }
- }
- create_proc_files();
-
- return 0;
-+
-+ err_vbus_irq:
-+#ifdef CONFIG_ARCH_LUBBOCK
-+ free_irq(LUBBOCK_USB_DISC_IRQ, dev);
-+ err_irq_lub:
-+#endif
-+ free_irq(irq, dev);
-+ err_irq1:
-+ if (dev->mach->gpio_pullup)
-+ gpio_free(dev->mach->gpio_pullup);
-+ err_gpio_pullup:
-+ if (dev->mach->gpio_vbus)
-+ gpio_free(dev->mach->gpio_vbus);
-+ err_gpio_vbus:
-+#ifdef CONFIG_ARCH_PXA
-+ clk_put(dev->clk);
-+ err_clk:
-+#endif
-+ return retval;
- }
-
- static void pxa2xx_udc_shutdown(struct platform_device *_dev)
-@@ -2284,6 +2296,10 @@
- if (dev->mach->gpio_pullup)
- gpio_free(dev->mach->gpio_pullup);
-
-+#ifdef CONFIG_ARCH_PXA
-+ clk_put(dev->clk);
-+#endif
-+
- platform_set_drvdata(pdev, NULL);
- the_controller = NULL;
- return 0;
---- linux-2.6.23.orig/drivers/usb/gadget/pxa2xx_udc.h
-+++ linux-2.6.23/drivers/usb/gadget/pxa2xx_udc.h
-@@ -125,6 +125,7 @@
- struct timer_list timer;
-
- struct device *dev;
-+ struct clk *clk;
- struct pxa2xx_udc_mach_info *mach;
- u64 dma_mask;
- struct pxa2xx_ep ep [PXA_UDC_NUM_ENDPOINTS];
---- linux-2.6.23.orig/drivers/video/pxafb.c
-+++ linux-2.6.23/drivers/video/pxafb.c
-@@ -37,6 +37,8 @@
- #include <linux/cpufreq.h>
- #include <linux/platform_device.h>
- #include <linux/dma-mapping.h>
-+#include <linux/clk.h>
-+#include <linux/err.h>
-
- #include <asm/hardware.h>
- #include <asm/io.h>
-@@ -574,15 +576,15 @@
- *
- * Factoring the 10^4 and 10^-12 out gives 10^-8 == 1 / 100000000 as used below.
- */
--static inline unsigned int get_pcd(unsigned int pixclock)
-+static inline unsigned int get_pcd(struct pxafb_info *fbi, unsigned int pixclock)
- {
- unsigned long long pcd;
-
- /* FIXME: Need to take into account Double Pixel Clock mode
-- * (DPC) bit? or perhaps set it based on the various clock
-- * speeds */
--
-- pcd = (unsigned long long)get_lcdclk_frequency_10khz() * pixclock;
-+ * (DPC) bit? or perhaps set it based on the various clock
-+ * speeds */
-+ pcd = (unsigned long long)(clk_get_rate(fbi->clk) / 10000);
-+ pcd *= pixclock;
- do_div(pcd, 100000000 * 2);
- /* no need for this, since we should subtract 1 anyway. they cancel */
- /* pcd += 1; */ /* make up for integer math truncations */
-@@ -591,19 +593,21 @@
-
- /*
- * Some touchscreens need hsync information from the video driver to
-- * function correctly. We export it here.
-+ * function correctly. We export it here. Note that 'hsync_time' and
-+ * the value returned from pxafb_get_hsync_time() is the *reciprocal*
-+ * of the hsync period in seconds.
- */
- static inline void set_hsync_time(struct pxafb_info *fbi, unsigned int pcd)
- {
-- unsigned long long htime;
-+ unsigned long htime;
-
- if ((pcd == 0) || (fbi->fb.var.hsync_len == 0)) {
- fbi->hsync_time=0;
- return;
- }
-
-- htime = (unsigned long long)get_lcdclk_frequency_10khz() * 10000;
-- do_div(htime, pcd * fbi->fb.var.hsync_len);
-+ htime = clk_get_rate(fbi->clk) / (pcd * fbi->fb.var.hsync_len);
-+
- fbi->hsync_time = htime;
- }
-
-@@ -628,7 +632,7 @@
- {
- struct pxafb_lcd_reg new_regs;
- u_long flags;
-- u_int lines_per_panel, pcd = get_pcd(var->pixclock);
-+ u_int lines_per_panel, pcd = get_pcd(fbi, var->pixclock);
-
- pr_debug("pxafb: Configuring PXA LCD\n");
-
-@@ -908,7 +912,7 @@
- pr_debug("reg_lccr3 0x%08x\n", (unsigned int) fbi->reg_lccr3);
-
- /* enable LCD controller clock */
-- pxa_set_cken(CKEN_LCD, 1);
-+ clk_enable(fbi->clk);
-
- down(&fcs_lcd_sem);
- /* Sequence from 11.7.10 */
-@@ -950,7 +954,7 @@
- up(&fcs_lcd_sem);
-
- /* disable LCD controller clock */
-- pxa_set_cken(CKEN_LCD, 0);
-+ clk_disable(fbi->clk);
- }
-
- /*
-@@ -1161,7 +1165,7 @@
- if ((clkinfo->old == 13000))
- break;
-
-- pcd = get_pcd(fbi->fb.var.pixclock);
-+ pcd = get_pcd(fbi, fbi->fb.var.pixclock);
- lccr3 = fbi->reg_lccr3;
- set_hsync_time(fbi, pcd);
- fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd);
-@@ -1293,6 +1297,12 @@
- memset(fbi, 0, sizeof(struct pxafb_info));
- fbi->dev = dev;
-
-+ fbi->clk = clk_get(dev, "LCDCLK");
-+ if (IS_ERR(fbi->clk)) {
-+ kfree(fbi);
-+ return NULL;
-+ }
-+
- strcpy(fbi->fb.fix.id, PXA_NAME);
-
- fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
---- linux-2.6.23.orig/drivers/video/pxafb.h
-+++ linux-2.6.23/drivers/video/pxafb.h
-@@ -94,6 +94,7 @@
- struct pxafb_info {
- struct fb_info fb;
- struct device *dev;
-+ struct clk *clk;
-
- /*
- * These are the addresses we mapped
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/hardware.h
-+++ linux-2.6.23/include/asm-arm/arch-pxa/hardware.h
-@@ -80,6 +80,24 @@
- _id == 0x411; \
- })
-
-+#define __cpu_is_pxa300(id) \
-+ ({ \
-+ unsigned int _id = (id) >> 4 & 0xfff; \
-+ _id == 0x688; \
-+ })
-+
-+#define __cpu_is_pxa310(id) \
-+ ({ \
-+ unsigned int _id = (id) >> 4 & 0xfff; \
-+ _id == 0x689; \
-+ })
-+
-+#define __cpu_is_pxa320(id) \
-+ ({ \
-+ unsigned int _id = (id) >> 4 & 0xfff; \
-+ _id == 0x603 || _id == 0x682; \
-+ })
-+
- #define cpu_is_pxa21x() \
- ({ \
- unsigned int id = read_cpuid(CPUID_ID); \
-@@ -98,6 +116,53 @@
- __cpu_is_pxa27x(id); \
- })
-
-+#define cpu_is_pxa300() \
-+ ({ \
-+ unsigned int id = read_cpuid(CPUID_ID); \
-+ __cpu_is_pxa300(id); \
-+ })
-+
-+#define cpu_is_pxa310() \
-+ ({ \
-+ unsigned int id = read_cpuid(CPUID_ID); \
-+ __cpu_is_pxa310(id); \
-+ })
-+
-+#define cpu_is_pxa320() \
-+ ({ \
-+ unsigned int id = read_cpuid(CPUID_ID); \
-+ __cpu_is_pxa320(id); \
-+ })
-+
-+/*
-+ * CPUID Core Generation Bit
-+ * <= 0x2 for pxa21x/pxa25x/pxa26x/pxa27x
-+ * == 0x3 for pxa300/pxa310/pxa320
-+ */
-+#define __cpu_is_pxa2xx(id) \
-+ ({ \
-+ unsigned int _id = (id) >> 13 & 0x7; \
-+ _id <= 0x2; \
-+ })
-+
-+#define __cpu_is_pxa3xx(id) \
-+ ({ \
-+ unsigned int _id = (id) >> 13 & 0x7; \
-+ _id == 0x3; \
-+ })
-+
-+#define cpu_is_pxa2xx() \
-+ ({ \
-+ unsigned int id = read_cpuid(CPUID_ID); \
-+ __cpu_is_pxa2xx(id); \
-+ })
-+
-+#define cpu_is_pxa3xx() \
-+ ({ \
-+ unsigned int id = read_cpuid(CPUID_ID); \
-+ __cpu_is_pxa3xx(id); \
-+ })
-+
- /*
- * Handy routine to set GPIO alternate functions
- */
-@@ -116,13 +181,16 @@
- /*
- * Routine to enable or disable CKEN
- */
--extern void pxa_set_cken(int clock, int enable);
-+static inline void __deprecated pxa_set_cken(int clock, int enable)
-+{
-+ extern void __pxa_set_cken(int clock, int enable);
-+ __pxa_set_cken(clock, enable);
-+}
-
- /*
- * return current memory and LCD clock frequency in units of 10kHz
- */
- extern unsigned int get_memclk_frequency_10khz(void);
--extern unsigned int get_lcdclk_frequency_10khz(void);
-
- #endif
-
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/irqs.h
-+++ linux-2.6.23/include/asm-arm/arch-pxa/irqs.h
-@@ -66,12 +66,6 @@
- #define IRQ_TO_GPIO_2_x(i) ((i) - PXA_GPIO_IRQ_BASE)
- #define IRQ_TO_GPIO(i) (((i) < IRQ_GPIO(2)) ? ((i) - IRQ_GPIO0) : IRQ_TO_GPIO_2_x(i))
-
--#if defined(CONFIG_PXA25x)
--#define PXA_LAST_GPIO 84
--#elif defined(CONFIG_PXA27x)
--#define PXA_LAST_GPIO 127
--#endif
--
- /*
- * The next 16 interrupts are for board specific purposes. Since
- * the kernel can only run on one machine at a time, we can re-use
---- /dev/null
-+++ linux-2.6.23/include/asm-arm/arch-pxa/mfp-pxa300.h
-@@ -0,0 +1,574 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/mfp-pxa300.h
-+ *
-+ * PXA300/PXA310 specific MFP configuration definitions
-+ *
-+ * Copyright (C) 2007 Marvell International Ltd.
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __ASM_ARCH_MFP_PXA300_H
-+#define __ASM_ARCH_MFP_PXA300_H
-+
-+#include <asm/arch/mfp.h>
-+
-+/* GPIO */
-+#define GPIO46_GPIO MFP_CFG(GPIO46, AF1)
-+#define GPIO49_GPIO MFP_CFG(GPIO49, AF3)
-+#define GPIO50_GPIO MFP_CFG(GPIO50, AF2)
-+#define GPIO51_GPIO MFP_CFG(GPIO51, AF3)
-+#define GPIO52_GPIO MFP_CFG(GPIO52, AF3)
-+#define GPIO56_GPIO MFP_CFG(GPIO56, AF0)
-+#define GPIO58_GPIO MFP_CFG(GPIO58, AF0)
-+#define GPIO59_GPIO MFP_CFG(GPIO59, AF0)
-+#define GPIO60_GPIO MFP_CFG(GPIO60, AF0)
-+#define GPIO61_GPIO MFP_CFG(GPIO61, AF0)
-+#define GPIO62_GPIO MFP_CFG(GPIO62, AF0)
-+
-+#ifdef CONFIG_CPU_PXA310
-+#define GPIO7_2_GPIO MFP_CFG(GPIO7_2, AF0)
-+#define GPIO8_2_GPIO MFP_CFG(GPIO8_2, AF0)
-+#define GPIO9_2_GPIO MFP_CFG(GPIO9_2, AF0)
-+#define GPIO10_2_GPIO MFP_CFG(GPIO10_2, AF0)
-+#define GPIO11_2_GPIO MFP_CFG(GPIO11_2, AF0)
-+#define GPIO12_2_GPIO MFP_CFG(GPIO12_2, AF0)
-+#endif
-+
-+/* Chip Select */
-+#define GPIO2_nCS3 MFP_CFG(GPIO2, AF1)
-+
-+/* AC97 */
-+#define GPIO23_AC97_nACRESET MFP_CFG(GPIO23, AF1)
-+#define GPIO24_AC97_SYSCLK MFP_CFG(GPIO24, AF1)
-+#define GPIO29_AC97_BITCLK MFP_CFG(GPIO29, AF1)
-+#define GPIO25_AC97_SDATA_IN_0 MFP_CFG(GPIO25, AF1)
-+#define GPIO26_AC97_SDATA_IN_1 MFP_CFG(GPIO26, AF1)
-+#define GPIO17_AC97_SDATA_IN_2 MFP_CFG(GPIO17, AF3)
-+#define GPIO21_AC97_SDATA_IN_2 MFP_CFG(GPIO21, AF2)
-+#define GPIO18_AC97_SDATA_IN_3 MFP_CFG(GPIO18, AF3)
-+#define GPIO22_AC97_SDATA_IN_3 MFP_CFG(GPIO22, AF2)
-+#define GPIO27_AC97_SDATA_OUT MFP_CFG(GPIO27, AF1)
-+#define GPIO28_AC97_SYNC MFP_CFG(GPIO28, AF1)
-+
-+/* I2C */
-+#define GPIO21_I2C_SCL MFP_CFG_LPM(GPIO21, AF1, PULL_HIGH)
-+#define GPIO22_I2C_SDA MFP_CFG_LPM(GPIO22, AF1, PULL_HIGH)
-+
-+/* QCI */
-+#define GPIO39_CI_DD_0 MFP_CFG_DRV(GPIO39, AF1, DS04X)
-+#define GPIO40_CI_DD_1 MFP_CFG_DRV(GPIO40, AF1, DS04X)
-+#define GPIO41_CI_DD_2 MFP_CFG_DRV(GPIO41, AF1, DS04X)
-+#define GPIO42_CI_DD_3 MFP_CFG_DRV(GPIO42, AF1, DS04X)
-+#define GPIO43_CI_DD_4 MFP_CFG_DRV(GPIO43, AF1, DS04X)
-+#define GPIO44_CI_DD_5 MFP_CFG_DRV(GPIO44, AF1, DS04X)
-+#define GPIO45_CI_DD_6 MFP_CFG_DRV(GPIO45, AF1, DS04X)
-+#define GPIO46_CI_DD_7 MFP_CFG_DRV(GPIO46, AF0, DS04X)
-+#define GPIO47_CI_DD_8 MFP_CFG_DRV(GPIO47, AF1, DS04X)
-+#define GPIO48_CI_DD_9 MFP_CFG_DRV(GPIO48, AF1, DS04X)
-+#define GPIO52_CI_HSYNC MFP_CFG_DRV(GPIO52, AF0, DS04X)
-+#define GPIO51_CI_VSYNC MFP_CFG_DRV(GPIO51, AF0, DS04X)
-+#define GPIO49_CI_MCLK MFP_CFG_DRV(GPIO49, AF0, DS04X)
-+#define GPIO50_CI_PCLK MFP_CFG_DRV(GPIO50, AF0, DS04X)
-+
-+/* KEYPAD */
-+#define GPIO3_KP_DKIN_6 MFP_CFG_LPM(GPIO3, AF2, FLOAT)
-+#define GPIO4_KP_DKIN_7 MFP_CFG_LPM(GPIO4, AF2, FLOAT)
-+#define GPIO16_KP_DKIN_6 MFP_CFG_LPM(GPIO16, AF6, FLOAT)
-+#define GPIO83_KP_DKIN_2 MFP_CFG_LPM(GPIO83, AF5, FLOAT)
-+#define GPIO84_KP_DKIN_1 MFP_CFG_LPM(GPIO84, AF5, FLOAT)
-+#define GPIO85_KP_DKIN_0 MFP_CFG_LPM(GPIO85, AF3, FLOAT)
-+#define GPIO86_KP_DKIN_1 MFP_CFG_LPM(GPIO86, AF3, FLOAT)
-+#define GPIO87_KP_DKIN_2 MFP_CFG_LPM(GPIO87, AF3, FLOAT)
-+#define GPIO88_KP_DKIN_3 MFP_CFG_LPM(GPIO88, AF3, FLOAT)
-+#define GPIO89_KP_DKIN_3 MFP_CFG_LPM(GPIO89, AF3, FLOAT)
-+#define GPIO107_KP_DKIN_0 MFP_CFG_LPM(GPIO107, AF2, FLOAT)
-+#define GPIO108_KP_DKIN_1 MFP_CFG_LPM(GPIO108, AF2, FLOAT)
-+#define GPIO109_KP_DKIN_2 MFP_CFG_LPM(GPIO109, AF2, FLOAT)
-+#define GPIO110_KP_DKIN_3 MFP_CFG_LPM(GPIO110, AF2, FLOAT)
-+#define GPIO111_KP_DKIN_4 MFP_CFG_LPM(GPIO111, AF2, FLOAT)
-+#define GPIO112_KP_DKIN_5 MFP_CFG_LPM(GPIO112, AF2, FLOAT)
-+#define GPIO113_KP_DKIN_6 MFP_CFG_LPM(GPIO113, AF2, FLOAT)
-+#define GPIO114_KP_DKIN_7 MFP_CFG_LPM(GPIO114, AF2, FLOAT)
-+#define GPIO115_KP_DKIN_0 MFP_CFG_LPM(GPIO115, AF2, FLOAT)
-+#define GPIO116_KP_DKIN_1 MFP_CFG_LPM(GPIO116, AF2, FLOAT)
-+#define GPIO117_KP_DKIN_2 MFP_CFG_LPM(GPIO117, AF2, FLOAT)
-+#define GPIO118_KP_DKIN_3 MFP_CFG_LPM(GPIO118, AF2, FLOAT)
-+#define GPIO119_KP_DKIN_4 MFP_CFG_LPM(GPIO119, AF2, FLOAT)
-+#define GPIO120_KP_DKIN_5 MFP_CFG_LPM(GPIO120, AF2, FLOAT)
-+#define GPIO121_KP_DKIN_6 MFP_CFG_LPM(GPIO121, AF2, FLOAT)
-+#define GPIO122_KP_DKIN_5 MFP_CFG_LPM(GPIO122, AF2, FLOAT)
-+#define GPIO123_KP_DKIN_4 MFP_CFG_LPM(GPIO123, AF2, FLOAT)
-+#define GPIO124_KP_DKIN_3 MFP_CFG_LPM(GPIO124, AF2, FLOAT)
-+#define GPIO127_KP_DKIN_0 MFP_CFG_LPM(GPIO127, AF5, FLOAT)
-+#define GPIO0_2_KP_DKIN_0 MFP_CFG_LPM(GPIO0_2, AF2, FLOAT)
-+#define GPIO1_2_KP_DKIN_1 MFP_CFG_LPM(GPIO1_2, AF2, FLOAT)
-+#define GPIO2_2_KP_DKIN_6 MFP_CFG_LPM(GPIO2_2, AF2, FLOAT)
-+#define GPIO3_2_KP_DKIN_7 MFP_CFG_LPM(GPIO3_2, AF2, FLOAT)
-+#define GPIO4_2_KP_DKIN_1 MFP_CFG_LPM(GPIO4_2, AF2, FLOAT)
-+#define GPIO5_2_KP_DKIN_0 MFP_CFG_LPM(GPIO5_2, AF2, FLOAT)
-+
-+#define GPIO5_KP_MKIN_0 MFP_CFG_LPM(GPIO5, AF2, FLOAT)
-+#define GPIO6_KP_MKIN_1 MFP_CFG_LPM(GPIO6, AF2, FLOAT)
-+#define GPIO9_KP_MKIN_6 MFP_CFG_LPM(GPIO9, AF3, FLOAT)
-+#define GPIO10_KP_MKIN_7 MFP_CFG_LPM(GPIO10, AF3, FLOAT)
-+#define GPIO70_KP_MKIN_6 MFP_CFG_LPM(GPIO70, AF3, FLOAT)
-+#define GPIO71_KP_MKIN_7 MFP_CFG_LPM(GPIO71, AF3, FLOAT)
-+#define GPIO100_KP_MKIN_6 MFP_CFG_LPM(GPIO100, AF7, FLOAT)
-+#define GPIO101_KP_MKIN_7 MFP_CFG_LPM(GPIO101, AF7, FLOAT)
-+#define GPIO112_KP_MKIN_6 MFP_CFG_LPM(GPIO112, AF4, FLOAT)
-+#define GPIO113_KP_MKIN_7 MFP_CFG_LPM(GPIO113, AF4, FLOAT)
-+#define GPIO115_KP_MKIN_0 MFP_CFG_LPM(GPIO115, AF1, FLOAT)
-+#define GPIO116_KP_MKIN_1 MFP_CFG_LPM(GPIO116, AF1, FLOAT)
-+#define GPIO117_KP_MKIN_2 MFP_CFG_LPM(GPIO117, AF1, FLOAT)
-+#define GPIO118_KP_MKIN_3 MFP_CFG_LPM(GPIO118, AF1, FLOAT)
-+#define GPIO119_KP_MKIN_4 MFP_CFG_LPM(GPIO119, AF1, FLOAT)
-+#define GPIO120_KP_MKIN_5 MFP_CFG_LPM(GPIO120, AF1, FLOAT)
-+#define GPIO125_KP_MKIN_2 MFP_CFG_LPM(GPIO125, AF2, FLOAT)
-+#define GPIO2_2_KP_MKIN_6 MFP_CFG_LPM(GPIO2_2, AF1, FLOAT)
-+#define GPIO3_2_KP_MKIN_7 MFP_CFG_LPM(GPIO3_2, AF1, FLOAT)
-+
-+#define GPIO7_KP_MKOUT_5 MFP_CFG_LPM(GPIO7, AF1, DRIVE_HIGH)
-+#define GPIO11_KP_MKOUT_5 MFP_CFG_LPM(GPIO11, AF3, DRIVE_HIGH)
-+#define GPIO12_KP_MKOUT_6 MFP_CFG_LPM(GPIO12, AF3, DRIVE_HIGH)
-+#define GPIO13_KP_MKOUT_7 MFP_CFG_LPM(GPIO13, AF3, DRIVE_HIGH)
-+#define GPIO19_KP_MKOUT_4 MFP_CFG_LPM(GPIO19, AF3, DRIVE_HIGH)
-+#define GPIO20_KP_MKOUT_5 MFP_CFG_LPM(GPIO20, AF3, DRIVE_HIGH)
-+#define GPIO38_KP_MKOUT_5 MFP_CFG_LPM(GPIO38, AF5, DRIVE_HIGH)
-+#define GPIO53_KP_MKOUT_6 MFP_CFG_LPM(GPIO53, AF5, DRIVE_HIGH)
-+#define GPIO78_KP_MKOUT_7 MFP_CFG_LPM(GPIO78, AF5, DRIVE_HIGH)
-+#define GPIO85_KP_MKOUT_0 MFP_CFG_LPM(GPIO85, AF2, DRIVE_HIGH)
-+#define GPIO86_KP_MKOUT_1 MFP_CFG_LPM(GPIO86, AF2, DRIVE_HIGH)
-+#define GPIO87_KP_MKOUT_2 MFP_CFG_LPM(GPIO87, AF2, DRIVE_HIGH)
-+#define GPIO88_KP_MKOUT_3 MFP_CFG_LPM(GPIO88, AF2, DRIVE_HIGH)
-+#define GPIO104_KP_MKOUT_6 MFP_CFG_LPM(GPIO104, AF5, DRIVE_HIGH)
-+#define GPIO105_KP_MKOUT_7 MFP_CFG_LPM(GPIO105, AF5, DRIVE_HIGH)
-+#define GPIO121_KP_MKOUT_0 MFP_CFG_LPM(GPIO121, AF1, DRIVE_HIGH)
-+#define GPIO122_KP_MKOUT_1 MFP_CFG_LPM(GPIO122, AF1, DRIVE_HIGH)
-+#define GPIO123_KP_MKOUT_2 MFP_CFG_LPM(GPIO123, AF1, DRIVE_HIGH)
-+#define GPIO124_KP_MKOUT_3 MFP_CFG_LPM(GPIO124, AF1, DRIVE_HIGH)
-+#define GPIO125_KP_MKOUT_4 MFP_CFG_LPM(GPIO125, AF1, DRIVE_HIGH)
-+#define GPIO126_KP_MKOUT_7 MFP_CFG_LPM(GPIO126, AF4, DRIVE_HIGH)
-+#define GPIO5_2_KP_MKOUT_6 MFP_CFG_LPM(GPIO5_2, AF1, DRIVE_HIGH)
-+#define GPIO4_2_KP_MKOUT_5 MFP_CFG_LPM(GPIO4_2, AF1, DRIVE_HIGH)
-+#define GPIO6_2_KP_MKOUT_7 MFP_CFG_LPM(GPIO6_2, AF1, DRIVE_HIGH)
-+
-+/* LCD */
-+#define GPIO54_LCD_LDD_0 MFP_CFG_DRV(GPIO54, AF1, DS01X)
-+#define GPIO55_LCD_LDD_1 MFP_CFG_DRV(GPIO55, AF1, DS01X)
-+#define GPIO56_LCD_LDD_2 MFP_CFG_DRV(GPIO56, AF1, DS01X)
-+#define GPIO57_LCD_LDD_3 MFP_CFG_DRV(GPIO57, AF1, DS01X)
-+#define GPIO58_LCD_LDD_4 MFP_CFG_DRV(GPIO58, AF1, DS01X)
-+#define GPIO59_LCD_LDD_5 MFP_CFG_DRV(GPIO59, AF1, DS01X)
-+#define GPIO60_LCD_LDD_6 MFP_CFG_DRV(GPIO60, AF1, DS01X)
-+#define GPIO61_LCD_LDD_7 MFP_CFG_DRV(GPIO61, AF1, DS01X)
-+#define GPIO62_LCD_LDD_8 MFP_CFG_DRV(GPIO62, AF1, DS01X)
-+#define GPIO63_LCD_LDD_9 MFP_CFG_DRV(GPIO63, AF1, DS01X)
-+#define GPIO64_LCD_LDD_10 MFP_CFG_DRV(GPIO64, AF1, DS01X)
-+#define GPIO65_LCD_LDD_11 MFP_CFG_DRV(GPIO65, AF1, DS01X)
-+#define GPIO66_LCD_LDD_12 MFP_CFG_DRV(GPIO66, AF1, DS01X)
-+#define GPIO67_LCD_LDD_13 MFP_CFG_DRV(GPIO67, AF1, DS01X)
-+#define GPIO68_LCD_LDD_14 MFP_CFG_DRV(GPIO68, AF1, DS01X)
-+#define GPIO69_LCD_LDD_15 MFP_CFG_DRV(GPIO69, AF1, DS01X)
-+#define GPIO70_LCD_LDD_16 MFP_CFG_DRV(GPIO70, AF1, DS01X)
-+#define GPIO71_LCD_LDD_17 MFP_CFG_DRV(GPIO71, AF1, DS01X)
-+#define GPIO62_LCD_CS_N MFP_CFG_DRV(GPIO62, AF2, DS01X)
-+#define GPIO72_LCD_FCLK MFP_CFG_DRV(GPIO72, AF1, DS01X)
-+#define GPIO73_LCD_LCLK MFP_CFG_DRV(GPIO73, AF1, DS01X)
-+#define GPIO74_LCD_PCLK MFP_CFG_DRV(GPIO74, AF1, DS01X)
-+#define GPIO75_LCD_BIAS MFP_CFG_DRV(GPIO75, AF1, DS01X)
-+#define GPIO76_LCD_VSYNC MFP_CFG_DRV(GPIO76, AF2, DS01X)
-+
-+#define GPIO15_LCD_CS_N MFP_CFG_DRV(GPIO15, AF2, DS01X)
-+#define GPIO127_LCD_CS_N MFP_CFG_DRV(GPIO127, AF1, DS01X)
-+#define GPIO63_LCD_VSYNC MFP_CFG_DRV(GPIO63, AF2, DS01X)
-+
-+/* Mini-LCD */
-+#define GPIO72_MLCD_FCLK MFP_CFG_DRV(GPIO72, AF7, DS08X)
-+#define GPIO73_MLCD_LCLK MFP_CFG_DRV(GPIO73, AF7, DS08X)
-+#define GPIO54_MLCD_LDD_0 MFP_CFG_DRV(GPIO54, AF7, DS08X)
-+#define GPIO55_MLCD_LDD_1 MFP_CFG_DRV(GPIO55, AF7, DS08X)
-+#define GPIO56_MLCD_LDD_2 MFP_CFG_DRV(GPIO56, AF7, DS08X)
-+#define GPIO57_MLCD_LDD_3 MFP_CFG_DRV(GPIO57, AF7, DS08X)
-+#define GPIO58_MLCD_LDD_4 MFP_CFG_DRV(GPIO58, AF7, DS08X)
-+#define GPIO59_MLCD_LDD_5 MFP_CFG_DRV(GPIO59, AF7, DS08X)
-+#define GPIO60_MLCD_LDD_6 MFP_CFG_DRV(GPIO60, AF7, DS08X)
-+#define GPIO61_MLCD_LDD_7 MFP_CFG_DRV(GPIO61, AF7, DS08X)
-+#define GPIO62_MLCD_LDD_8 MFP_CFG_DRV(GPIO62, AF7, DS08X)
-+#define GPIO63_MLCD_LDD_9 MFP_CFG_DRV(GPIO63, AF7, DS08X)
-+#define GPIO64_MLCD_LDD_10 MFP_CFG_DRV(GPIO64, AF7, DS08X)
-+#define GPIO65_MLCD_LDD_11 MFP_CFG_DRV(GPIO65, AF7, DS08X)
-+#define GPIO66_MLCD_LDD_12 MFP_CFG_DRV(GPIO66, AF7, DS08X)
-+#define GPIO67_MLCD_LDD_13 MFP_CFG_DRV(GPIO67, AF7, DS08X)
-+#define GPIO68_MLCD_LDD_14 MFP_CFG_DRV(GPIO68, AF7, DS08X)
-+#define GPIO69_MLCD_LDD_15 MFP_CFG_DRV(GPIO69, AF7, DS08X)
-+#define GPIO74_MLCD_PCLK MFP_CFG_DRV(GPIO74, AF7, DS08X)
-+#define GPIO75_MLCD_BIAS MFP_CFG_DRV(GPIO75, AF2, DS08X)
-+
-+/* MMC1 */
-+#define GPIO7_MMC1_CLK MFP_CFG_LPM(GPIO7, AF4, DRIVE_HIGH)
-+#define GPIO8_MMC1_CMD MFP_CFG_LPM(GPIO8, AF4, DRIVE_HIGH)
-+#define GPIO14_MMC1_CMD MFP_CFG_LPM(GPIO14, AF5, DRIVE_HIGH)
-+#define GPIO15_MMC1_CMD MFP_CFG_LPM(GPIO15, AF5, DRIVE_HIGH)
-+#define GPIO3_MMC1_DAT0 MFP_CFG_LPM(GPIO3, AF4, DRIVE_HIGH)
-+#define GPIO4_MMC1_DAT1 MFP_CFG_LPM(GPIO4, AF4, DRIVE_HIGH)
-+#define GPIO5_MMC1_DAT2 MFP_CFG_LPM(GPIO5, AF4, DRIVE_HIGH)
-+#define GPIO6_MMC1_DAT3 MFP_CFG_LPM(GPIO6, AF4, DRIVE_HIGH)
-+
-+/* MMC2 */
-+#define GPIO9_MMC2_DAT0 MFP_CFG_LPM(GPIO9, AF4, PULL_HIGH)
-+#define GPIO10_MMC2_DAT1 MFP_CFG_LPM(GPIO10, AF4, PULL_HIGH)
-+#define GPIO11_MMC2_DAT2 MFP_CFG_LPM(GPIO11, AF4, PULL_HIGH)
-+#define GPIO12_MMC2_DAT3 MFP_CFG_LPM(GPIO12, AF4, PULL_HIGH)
-+#define GPIO13_MMC2_CLK MFP_CFG_LPM(GPIO13, AF4, PULL_HIGH)
-+#define GPIO14_MMC2_CMD MFP_CFG_LPM(GPIO14, AF4, PULL_HIGH)
-+#define GPIO77_MMC2_DAT0 MFP_CFG_LPM(GPIO77, AF4, PULL_HIGH)
-+#define GPIO78_MMC2_DAT1 MFP_CFG_LPM(GPIO78, AF4, PULL_HIGH)
-+#define GPIO79_MMC2_DAT2 MFP_CFG_LPM(GPIO79, AF4, PULL_HIGH)
-+#define GPIO80_MMC2_DAT3 MFP_CFG_LPM(GPIO80, AF4, PULL_HIGH)
-+#define GPIO81_MMC2_CLK MFP_CFG_LPM(GPIO81, AF4, PULL_HIGH)
-+#define GPIO82_MMC2_CMD MFP_CFG_LPM(GPIO82, AF4, PULL_HIGH)
-+
-+/* SSP1 */
-+#define GPIO89_SSP1_EXTCLK MFP_CFG(GPIO89, AF1)
-+#define GPIO90_SSP1_SYSCLK MFP_CFG(GPIO90, AF1)
-+#define GPIO15_SSP1_SCLK MFP_CFG(GPIO15, AF6)
-+#define GPIO16_SSP1_FRM MFP_CFG(GPIO16, AF2)
-+#define GPIO33_SSP1_SCLK MFP_CFG(GPIO33, AF5)
-+#define GPIO34_SSP1_FRM MFP_CFG(GPIO34, AF5)
-+#define GPIO85_SSP1_SCLK MFP_CFG(GPIO85, AF1)
-+#define GPIO86_SSP1_FRM MFP_CFG(GPIO86, AF1)
-+#define GPIO18_SSP1_TXD MFP_CFG(GPIO18, AF7)
-+#define GPIO18_SSP1_RXD MFP_CFG(GPIO18, AF2)
-+#define GPIO20_SSP1_TXD MFP_CFG(GPIO20, AF2)
-+#define GPIO20_SSP1_RXD MFP_CFG(GPIO20, AF7)
-+#define GPIO35_SSP1_TXD MFP_CFG(GPIO35, AF5)
-+#define GPIO35_SSP1_RXD MFP_CFG(GPIO35, AF4)
-+#define GPIO36_SSP1_TXD MFP_CFG(GPIO36, AF5)
-+#define GPIO36_SSP1_RXD MFP_CFG(GPIO36, AF6)
-+#define GPIO87_SSP1_TXD MFP_CFG(GPIO87, AF1)
-+#define GPIO87_SSP1_RXD MFP_CFG(GPIO87, AF6)
-+#define GPIO88_SSP1_TXD MFP_CFG(GPIO88, AF6)
-+#define GPIO88_SSP1_RXD MFP_CFG(GPIO88, AF1)
-+
-+/* SSP2 */
-+#define GPIO29_SSP2_EXTCLK MFP_CFG(GPIO29, AF2)
-+#define GPIO23_SSP2_SCLK MFP_CFG(GPIO23, AF2)
-+#define GPIO17_SSP2_FRM MFP_CFG(GPIO17, AF2)
-+#define GPIO25_SSP2_SCLK MFP_CFG(GPIO25, AF2)
-+#define GPIO26_SSP2_FRM MFP_CFG(GPIO26, AF2)
-+#define GPIO33_SSP2_SCLK MFP_CFG(GPIO33, AF6)
-+#define GPIO34_SSP2_FRM MFP_CFG(GPIO34, AF6)
-+#define GPIO64_SSP2_SCLK MFP_CFG(GPIO64, AF2)
-+#define GPIO65_SSP2_FRM MFP_CFG(GPIO65, AF2)
-+#define GPIO19_SSP2_TXD MFP_CFG(GPIO19, AF2)
-+#define GPIO19_SSP2_RXD MFP_CFG(GPIO19, AF7)
-+#define GPIO24_SSP2_TXD MFP_CFG(GPIO24, AF5)
-+#define GPIO24_SSP2_RXD MFP_CFG(GPIO24, AF4)
-+#define GPIO27_SSP2_TXD MFP_CFG(GPIO27, AF2)
-+#define GPIO27_SSP2_RXD MFP_CFG(GPIO27, AF5)
-+#define GPIO28_SSP2_TXD MFP_CFG(GPIO28, AF5)
-+#define GPIO28_SSP2_RXD MFP_CFG(GPIO28, AF2)
-+#define GPIO35_SSP2_TXD MFP_CFG(GPIO35, AF7)
-+#define GPIO35_SSP2_RXD MFP_CFG(GPIO35, AF6)
-+#define GPIO66_SSP2_TXD MFP_CFG(GPIO66, AF4)
-+#define GPIO66_SSP2_RXD MFP_CFG(GPIO66, AF2)
-+#define GPIO67_SSP2_TXD MFP_CFG(GPIO67, AF2)
-+#define GPIO67_SSP2_RXD MFP_CFG(GPIO67, AF4)
-+#define GPIO36_SSP2_TXD MFP_CFG(GPIO36, AF7)
-+
-+/* SSP3 */
-+#define GPIO69_SSP3_FRM MFP_CFG_X(GPIO69, AF2, DS08X, DRIVE_LOW)
-+#define GPIO68_SSP3_SCLK MFP_CFG_X(GPIO68, AF2, DS08X, FLOAT)
-+#define GPIO92_SSP3_FRM MFP_CFG_X(GPIO92, AF1, DS08X, DRIVE_LOW)
-+#define GPIO91_SSP3_SCLK MFP_CFG_X(GPIO91, AF1, DS08X, FLOAT)
-+#define GPIO70_SSP3_TXD MFP_CFG_X(GPIO70, AF2, DS08X, DRIVE_LOW)
-+#define GPIO70_SSP3_RXD MFP_CFG_X(GPIO70, AF5, DS08X, FLOAT)
-+#define GPIO71_SSP3_TXD MFP_CFG_X(GPIO71, AF5, DS08X, DRIVE_LOW)
-+#define GPIO71_SSP3_RXD MFP_CFG_X(GPIO71, AF2, DS08X, FLOAT)
-+#define GPIO93_SSP3_TXD MFP_CFG_X(GPIO93, AF1, DS08X, DRIVE_LOW)
-+#define GPIO93_SSP3_RXD MFP_CFG_X(GPIO93, AF5, DS08X, FLOAT)
-+#define GPIO94_SSP3_TXD MFP_CFG_X(GPIO94, AF5, DS08X, DRIVE_LOW)
-+#define GPIO94_SSP3_RXD MFP_CFG_X(GPIO94, AF1, DS08X, FLOAT)
-+
-+/* SSP4 */
-+#define GPIO95_SSP4_SCLK MFP_CFG_LPM(GPIO95, AF1, PULL_HIGH)
-+#define GPIO96_SSP4_FRM MFP_CFG_LPM(GPIO96, AF1, PULL_HIGH)
-+#define GPIO97_SSP4_TXD MFP_CFG_LPM(GPIO97, AF1, PULL_HIGH)
-+#define GPIO97_SSP4_RXD MFP_CFG_LPM(GPIO97, AF5, PULL_HIGH)
-+#define GPIO98_SSP4_TXD MFP_CFG_LPM(GPIO98, AF5, PULL_HIGH)
-+#define GPIO98_SSP4_RXD MFP_CFG_LPM(GPIO98, AF1, PULL_HIGH)
-+
-+/* UART1 */
-+#define GPIO32_UART1_CTS MFP_CFG_LPM(GPIO32, AF2, FLOAT)
-+#define GPIO37_UART1_CTS MFP_CFG_LPM(GPIO37, AF4, FLOAT)
-+#define GPIO79_UART1_CTS MFP_CFG_LPM(GPIO79, AF1, FLOAT)
-+#define GPIO84_UART1_CTS MFP_CFG_LPM(GPIO84, AF3, FLOAT)
-+#define GPIO101_UART1_CTS MFP_CFG_LPM(GPIO101, AF1, FLOAT)
-+#define GPIO106_UART1_CTS MFP_CFG_LPM(GPIO106, AF6, FLOAT)
-+
-+#define GPIO32_UART1_RTS MFP_CFG_LPM(GPIO32, AF4, FLOAT)
-+#define GPIO37_UART1_RTS MFP_CFG_LPM(GPIO37, AF2, FLOAT)
-+#define GPIO79_UART1_RTS MFP_CFG_LPM(GPIO79, AF3, FLOAT)
-+#define GPIO84_UART1_RTS MFP_CFG_LPM(GPIO84, AF1, FLOAT)
-+#define GPIO101_UART1_RTS MFP_CFG_LPM(GPIO101, AF6, FLOAT)
-+#define GPIO106_UART1_RTS MFP_CFG_LPM(GPIO106, AF1, FLOAT)
-+
-+#define GPIO34_UART1_DSR MFP_CFG_LPM(GPIO34, AF2, FLOAT)
-+#define GPIO36_UART1_DSR MFP_CFG_LPM(GPIO36, AF4, FLOAT)
-+#define GPIO81_UART1_DSR MFP_CFG_LPM(GPIO81, AF1, FLOAT)
-+#define GPIO83_UART1_DSR MFP_CFG_LPM(GPIO83, AF3, FLOAT)
-+#define GPIO103_UART1_DSR MFP_CFG_LPM(GPIO103, AF1, FLOAT)
-+#define GPIO105_UART1_DSR MFP_CFG_LPM(GPIO105, AF6, FLOAT)
-+
-+#define GPIO34_UART1_DTR MFP_CFG_LPM(GPIO34, AF4, FLOAT)
-+#define GPIO36_UART1_DTR MFP_CFG_LPM(GPIO36, AF2, FLOAT)
-+#define GPIO81_UART1_DTR MFP_CFG_LPM(GPIO81, AF3, FLOAT)
-+#define GPIO83_UART1_DTR MFP_CFG_LPM(GPIO83, AF1, FLOAT)
-+#define GPIO103_UART1_DTR MFP_CFG_LPM(GPIO103, AF6, FLOAT)
-+#define GPIO105_UART1_DTR MFP_CFG_LPM(GPIO105, AF1, FLOAT)
-+
-+#define GPIO35_UART1_RI MFP_CFG_LPM(GPIO35, AF2, FLOAT)
-+#define GPIO82_UART1_RI MFP_CFG_LPM(GPIO82, AF1, FLOAT)
-+#define GPIO104_UART1_RI MFP_CFG_LPM(GPIO104, AF1, FLOAT)
-+
-+#define GPIO33_UART1_DCD MFP_CFG_LPM(GPIO33, AF2, FLOAT)
-+#define GPIO80_UART1_DCD MFP_CFG_LPM(GPIO80, AF1, FLOAT)
-+#define GPIO102_UART1_DCD MFP_CFG_LPM(GPIO102, AF1, FLOAT)
-+
-+#define GPIO30_UART1_RXD MFP_CFG_LPM(GPIO30, AF2, FLOAT)
-+#define GPIO31_UART1_RXD MFP_CFG_LPM(GPIO31, AF4, FLOAT)
-+#define GPIO77_UART1_RXD MFP_CFG_LPM(GPIO77, AF1, FLOAT)
-+#define GPIO78_UART1_RXD MFP_CFG_LPM(GPIO78, AF3, FLOAT)
-+#define GPIO99_UART1_RXD MFP_CFG_LPM(GPIO99, AF1, FLOAT)
-+#define GPIO100_UART1_RXD MFP_CFG_LPM(GPIO100, AF6, FLOAT)
-+#define GPIO102_UART1_RXD MFP_CFG_LPM(GPIO102, AF6, FLOAT)
-+#define GPIO104_UART1_RXD MFP_CFG_LPM(GPIO104, AF4, FLOAT)
-+
-+#define GPIO30_UART1_TXD MFP_CFG_LPM(GPIO30, AF4, FLOAT)
-+#define GPIO31_UART1_TXD MFP_CFG_LPM(GPIO31, AF2, FLOAT)
-+#define GPIO77_UART1_TXD MFP_CFG_LPM(GPIO77, AF3, FLOAT)
-+#define GPIO78_UART1_TXD MFP_CFG_LPM(GPIO78, AF1, FLOAT)
-+#define GPIO99_UART1_TXD MFP_CFG_LPM(GPIO99, AF6, FLOAT)
-+#define GPIO100_UART1_TXD MFP_CFG_LPM(GPIO100, AF1, FLOAT)
-+#define GPIO102_UART1_TXD MFP_CFG_LPM(GPIO102, AF4, FLOAT)
-+
-+/* UART2 */
-+#define GPIO15_UART2_CTS MFP_CFG_LPM(GPIO15, AF3, FLOAT)
-+#define GPIO16_UART2_CTS MFP_CFG_LPM(GPIO16, AF5, FLOAT)
-+#define GPIO111_UART2_CTS MFP_CFG_LPM(GPIO111, AF3, FLOAT)
-+#define GPIO114_UART2_CTS MFP_CFG_LPM(GPIO114, AF1, FLOAT)
-+
-+#define GPIO15_UART2_RTS MFP_CFG_LPM(GPIO15, AF4, FLOAT)
-+#define GPIO16_UART2_RTS MFP_CFG_LPM(GPIO16, AF4, FLOAT)
-+#define GPIO114_UART2_RTS MFP_CFG_LPM(GPIO114, AF3, FLOAT)
-+#define GPIO111_UART2_RTS MFP_CFG_LPM(GPIO111, AF1, FLOAT)
-+
-+#define GPIO18_UART2_RXD MFP_CFG_LPM(GPIO18, AF5, FLOAT)
-+#define GPIO19_UART2_RXD MFP_CFG_LPM(GPIO19, AF4, FLOAT)
-+#define GPIO112_UART2_RXD MFP_CFG_LPM(GPIO112, AF1, FLOAT)
-+#define GPIO113_UART2_RXD MFP_CFG_LPM(GPIO113, AF3, FLOAT)
-+
-+#define GPIO18_UART2_TXD MFP_CFG_LPM(GPIO18, AF4, FLOAT)
-+#define GPIO19_UART2_TXD MFP_CFG_LPM(GPIO19, AF5, FLOAT)
-+#define GPIO112_UART2_TXD MFP_CFG_LPM(GPIO112, AF3, FLOAT)
-+#define GPIO113_UART2_TXD MFP_CFG_LPM(GPIO113, AF1, FLOAT)
-+
-+/* UART3 */
-+#define GPIO91_UART3_CTS MFP_CFG_LPM(GPIO91, AF2, FLOAT)
-+#define GPIO92_UART3_CTS MFP_CFG_LPM(GPIO92, AF4, FLOAT)
-+#define GPIO107_UART3_CTS MFP_CFG_LPM(GPIO107, AF1, FLOAT)
-+#define GPIO108_UART3_CTS MFP_CFG_LPM(GPIO108, AF3, FLOAT)
-+
-+#define GPIO91_UART3_RTS MFP_CFG_LPM(GPIO91, AF4, FLOAT)
-+#define GPIO92_UART3_RTS MFP_CFG_LPM(GPIO92, AF2, FLOAT)
-+#define GPIO107_UART3_RTS MFP_CFG_LPM(GPIO107, AF3, FLOAT)
-+#define GPIO108_UART3_RTS MFP_CFG_LPM(GPIO108, AF1, FLOAT)
-+
-+#define GPIO7_UART3_RXD MFP_CFG_LPM(GPIO7, AF2, FLOAT)
-+#define GPIO8_UART3_RXD MFP_CFG_LPM(GPIO8, AF6, FLOAT)
-+#define GPIO93_UART3_RXD MFP_CFG_LPM(GPIO93, AF4, FLOAT)
-+#define GPIO94_UART3_RXD MFP_CFG_LPM(GPIO94, AF2, FLOAT)
-+#define GPIO109_UART3_RXD MFP_CFG_LPM(GPIO109, AF3, FLOAT)
-+#define GPIO110_UART3_RXD MFP_CFG_LPM(GPIO110, AF1, FLOAT)
-+
-+#define GPIO7_UART3_TXD MFP_CFG_LPM(GPIO7, AF6, FLOAT)
-+#define GPIO8_UART3_TXD MFP_CFG_LPM(GPIO8, AF2, FLOAT)
-+#define GPIO93_UART3_TXD MFP_CFG_LPM(GPIO93, AF2, FLOAT)
-+#define GPIO94_UART3_TXD MFP_CFG_LPM(GPIO94, AF4, FLOAT)
-+#define GPIO109_UART3_TXD MFP_CFG_LPM(GPIO109, AF1, FLOAT)
-+#define GPIO110_UART3_TXD MFP_CFG_LPM(GPIO110, AF3, FLOAT)
-+
-+/* USB Host */
-+#define GPIO0_2_USBH_PEN MFP_CFG(GPIO0_2, AF1)
-+#define GPIO1_2_USBH_PWR MFP_CFG(GPIO1_2, AF1)
-+
-+/* USB P3 */
-+#define GPIO77_USB_P3_1 MFP_CFG(GPIO77, AF2)
-+#define GPIO78_USB_P3_2 MFP_CFG(GPIO78, AF2)
-+#define GPIO79_USB_P3_3 MFP_CFG(GPIO79, AF2)
-+#define GPIO80_USB_P3_4 MFP_CFG(GPIO80, AF2)
-+#define GPIO81_USB_P3_5 MFP_CFG(GPIO81, AF2)
-+#define GPIO82_USB_P3_6 MFP_CFG(GPIO82, AF2)
-+
-+/* PWM */
-+#define GPIO17_PWM0_OUT MFP_CFG(GPIO17, AF1)
-+#define GPIO18_PWM1_OUT MFP_CFG(GPIO18, AF1)
-+#define GPIO19_PWM2_OUT MFP_CFG(GPIO19, AF1)
-+#define GPIO20_PWM3_OUT MFP_CFG(GPIO20, AF1)
-+
-+/* CIR */
-+#define GPIO8_CIR_OUT MFP_CFG(GPIO8, AF5)
-+#define GPIO16_CIR_OUT MFP_CFG(GPIO16, AF3)
-+
-+#define GPIO20_OW_DQ_IN MFP_CFG(GPIO20, AF5)
-+#define GPIO126_OW_DQ MFP_CFG(GPIO126, AF2)
-+
-+#define GPIO0_DF_RDY MFP_CFG(GPIO0, AF1)
-+#define GPIO7_CLK_BYPASS_XSC MFP_CFG(GPIO7, AF7)
-+#define GPIO17_EXT_SYNC_MVT_0 MFP_CFG(GPIO17, AF6)
-+#define GPIO18_EXT_SYNC_MVT_1 MFP_CFG(GPIO18, AF6)
-+#define GPIO19_OST_CHOUT_MVT_0 MFP_CFG(GPIO19, AF6)
-+#define GPIO20_OST_CHOUT_MVT_1 MFP_CFG(GPIO20, AF6)
-+#define GPIO49_48M_CLK MFP_CFG(GPIO49, AF2)
-+#define GPIO126_EXT_CLK MFP_CFG(GPIO126, AF3)
-+#define GPIO127_CLK_BYPASS_GB MFP_CFG(GPIO127, AF7)
-+#define GPIO71_EXT_MATCH_MVT MFP_CFG(GPIO71, AF6)
-+
-+#define GPIO3_uIO_IN MFP_CFG(GPIO3, AF1)
-+
-+#define GPIO4_uSIM_CARD_STATE MFP_CFG(GPIO4, AF1)
-+#define GPIO5_uSIM_uCLK MFP_CFG(GPIO5, AF1)
-+#define GPIO6_uSIM_uRST MFP_CFG(GPIO6, AF1)
-+#define GPIO16_uSIM_UVS_0 MFP_CFG(GPIO16, AF1)
-+
-+#define GPIO9_SCIO MFP_CFG(GPIO9, AF1)
-+#define GPIO20_RTC_MVT MFP_CFG(GPIO20, AF4)
-+#define GPIO126_RTC_MVT MFP_CFG(GPIO126, AF1)
-+
-+/*
-+ * PXA300 specific MFP configurations
-+ */
-+#ifdef CONFIG_CPU_PXA300
-+#define GPIO99_USB_P2_2 MFP_CFG(GPIO99, AF2)
-+#define GPIO99_USB_P2_5 MFP_CFG(GPIO99, AF3)
-+#define GPIO99_USB_P2_6 MFP_CFG(GPIO99, AF4)
-+#define GPIO100_USB_P2_2 MFP_CFG(GPIO100, AF4)
-+#define GPIO100_USB_P2_5 MFP_CFG(GPIO100, AF5)
-+#define GPIO101_USB_P2_1 MFP_CFG(GPIO101, AF2)
-+#define GPIO102_USB_P2_4 MFP_CFG(GPIO102, AF2)
-+#define GPIO104_USB_P2_3 MFP_CFG(GPIO104, AF2)
-+#define GPIO105_USB_P2_5 MFP_CFG(GPIO105, AF2)
-+#define GPIO100_USB_P2_6 MFP_CFG(GPIO100, AF2)
-+#define GPIO106_USB_P2_7 MFP_CFG(GPIO106, AF2)
-+#define GPIO103_USB_P2_8 MFP_CFG(GPIO103, AF2)
-+
-+/* U2D UTMI */
-+#define GPIO38_UTM_CLK MFP_CFG(GPIO38, AF1)
-+#define GPIO26_U2D_RXERROR MFP_CFG(GPIO26, AF3)
-+#define GPIO50_U2D_RXERROR MFP_CFG(GPIO50, AF1)
-+#define GPIO89_U2D_RXERROR MFP_CFG(GPIO89, AF5)
-+#define GPIO24_UTM_RXVALID MFP_CFG(GPIO24, AF3)
-+#define GPIO48_UTM_RXVALID MFP_CFG(GPIO48, AF2)
-+#define GPIO87_UTM_RXVALID MFP_CFG(GPIO87, AF5)
-+#define GPIO25_UTM_RXACTIVE MFP_CFG(GPIO25, AF3)
-+#define GPIO47_UTM_RXACTIVE MFP_CFG(GPIO47, AF2)
-+#define GPIO49_UTM_RXACTIVE MFP_CFG(GPIO49, AF1)
-+#define GPIO88_UTM_RXACTIVE MFP_CFG(GPIO88, AF5)
-+#define GPIO53_UTM_TXREADY MFP_CFG(GPIO53, AF1)
-+#define GPIO67_UTM_LINESTATE_0 MFP_CFG(GPIO67, AF3)
-+#define GPIO92_UTM_LINESTATE_0 MFP_CFG(GPIO92, AF3)
-+#define GPIO104_UTM_LINESTATE_0 MFP_CFG(GPIO104, AF3)
-+#define GPIO109_UTM_LINESTATE_0 MFP_CFG(GPIO109, AF4)
-+#define GPIO68_UTM_LINESTATE_1 MFP_CFG(GPIO68, AF3)
-+#define GPIO93_UTM_LINESTATE_1 MFP_CFG(GPIO93, AF3)
-+#define GPIO105_UTM_LINESTATE_1 MFP_CFG(GPIO105, AF3)
-+#define GPIO27_U2D_OPMODE_0 MFP_CFG(GPIO27, AF4)
-+#define GPIO51_U2D_OPMODE_0 MFP_CFG(GPIO51, AF2)
-+#define GPIO90_U2D_OPMODE_0 MFP_CFG(GPIO90, AF7)
-+#define GPIO28_U2D_OPMODE_1 MFP_CFG(GPIO28, AF4)
-+#define GPIO52_U2D_OPMODE_1 MFP_CFG(GPIO52, AF2)
-+#define GPIO106_U2D_OPMODE_1 MFP_CFG(GPIO106, AF3)
-+#define GPIO110_U2D_OPMODE_1 MFP_CFG(GPIO110, AF5)
-+#define GPIO76_U2D_RESET MFP_CFG(GPIO76, AF1)
-+#define GPIO95_U2D_RESET MFP_CFG(GPIO95, AF2)
-+#define GPIO100_U2D_RESET MFP_CFG(GPIO100, AF3)
-+#define GPIO66_U2D_SUSPEND MFP_CFG(GPIO66, AF3)
-+#define GPIO98_U2D_SUSPEND MFP_CFG(GPIO98, AF2)
-+#define GPIO103_U2D_SUSPEND MFP_CFG(GPIO103, AF3)
-+#define GPIO65_U2D_TERM_SEL MFP_CFG(GPIO65, AF5)
-+#define GPIO97_U2D_TERM_SEL MFP_CFG(GPIO97, AF3)
-+#define GPIO102_U2D_TERM_SEL MFP_CFG(GPIO102, AF5)
-+#define GPIO29_U2D_TXVALID MFP_CFG(GPIO29, AF3)
-+#define GPIO52_U2D_TXVALID MFP_CFG(GPIO52, AF4)
-+#define GPIO69_U2D_TXVALID MFP_CFG(GPIO69, AF3)
-+#define GPIO85_U2D_TXVALID MFP_CFG(GPIO85, AF7)
-+#define GPIO64_U2D_XCVR_SEL MFP_CFG(GPIO64, AF5)
-+#define GPIO96_U2D_XCVR_SEL MFP_CFG(GPIO96, AF3)
-+#define GPIO101_U2D_XCVR_SEL MFP_CFG(GPIO101, AF5)
-+#define GPIO30_UTM_PHYDATA_0 MFP_CFG(GPIO30, AF3)
-+#define GPIO31_UTM_PHYDATA_1 MFP_CFG(GPIO31, AF3)
-+#define GPIO32_UTM_PHYDATA_2 MFP_CFG(GPIO32, AF3)
-+#define GPIO33_UTM_PHYDATA_3 MFP_CFG(GPIO33, AF3)
-+#define GPIO34_UTM_PHYDATA_4 MFP_CFG(GPIO34, AF3)
-+#define GPIO35_UTM_PHYDATA_5 MFP_CFG(GPIO35, AF3)
-+#define GPIO36_UTM_PHYDATA_6 MFP_CFG(GPIO36, AF3)
-+#define GPIO37_UTM_PHYDATA_7 MFP_CFG(GPIO37, AF3)
-+#define GPIO39_UTM_PHYDATA_0 MFP_CFG(GPIO39, AF3)
-+#define GPIO40_UTM_PHYDATA_1 MFP_CFG(GPIO40, AF3)
-+#define GPIO41_UTM_PHYDATA_2 MFP_CFG(GPIO41, AF3)
-+#define GPIO42_UTM_PHYDATA_3 MFP_CFG(GPIO42, AF3)
-+#define GPIO43_UTM_PHYDATA_4 MFP_CFG(GPIO43, AF3)
-+#define GPIO44_UTM_PHYDATA_5 MFP_CFG(GPIO44, AF3)
-+#define GPIO45_UTM_PHYDATA_6 MFP_CFG(GPIO45, AF3)
-+#define GPIO46_UTM_PHYDATA_7 MFP_CFG(GPIO46, AF3)
-+#endif /* CONFIG_CPU_PXA300 */
-+
-+/*
-+ * PXA310 specific MFP configurations
-+ */
-+#ifdef CONFIG_CPU_PXA310
-+/* USB P2 */
-+#define GPIO36_USB_P2_1 MFP_CFG(GPIO36, AF1)
-+#define GPIO30_USB_P2_2 MFP_CFG(GPIO30, AF1)
-+#define GPIO35_USB_P2_3 MFP_CFG(GPIO35, AF1)
-+#define GPIO32_USB_P2_4 MFP_CFG(GPIO32, AF1)
-+#define GPIO34_USB_P2_5 MFP_CFG(GPIO34, AF1)
-+#define GPIO31_USB_P2_6 MFP_CFG(GPIO31, AF1)
-+
-+/* MMC1 */
-+#define GPIO24_MMC1_CMD MFP_CFG(GPIO24, AF3)
-+#define GPIO29_MMC1_DAT0 MFP_CFG(GPIO29, AF3)
-+
-+/* MMC3 */
-+#define GPIO103_MMC3_CLK MFP_CFG(GPIO103, AF2)
-+#define GPIO105_MMC3_CMD MFP_CFG(GPIO105, AF2)
-+#define GPIO11_2_MMC3_CLK MFP_CFG(GPIO11_2, AF1)
-+#define GPIO12_2_MMC3_CMD MFP_CFG(GPIO12_2, AF1)
-+#define GPIO7_2_MMC3_DAT0 MFP_CFG(GPIO7_2, AF1)
-+#define GPIO8_2_MMC3_DAT1 MFP_CFG(GPIO8_2, AF1)
-+#define GPIO9_2_MMC3_DAT2 MFP_CFG(GPIO9_2, AF1)
-+#define GPIO10_2_MMC3_DAT3 MFP_CFG(GPIO10_2, AF1)
-+
-+/* ULPI */
-+#define GPIO38_ULPI_CLK MFP_CFG(GPIO38, AF1)
-+#define GPIO30_ULPI_DATA_OUT_0 MFP_CFG(GPIO30, AF3)
-+#define GPIO31_ULPI_DATA_OUT_1 MFP_CFG(GPIO31, AF3)
-+#define GPIO32_ULPI_DATA_OUT_2 MFP_CFG(GPIO32, AF3)
-+#define GPIO33_ULPI_DATA_OUT_3 MFP_CFG(GPIO33, AF3)
-+#define GPIO34_ULPI_DATA_OUT_4 MFP_CFG(GPIO34, AF3)
-+#define GPIO35_ULPI_DATA_OUT_5 MFP_CFG(GPIO35, AF3)
-+#define GPIO36_ULPI_DATA_OUT_6 MFP_CFG(GPIO36, AF3)
-+#define GPIO37_ULPI_DATA_OUT_7 MFP_CFG(GPIO37, AF3)
-+#define GPIO33_ULPI_OTG_INTR MFP_CFG(GPIO33, AF1)
-+
-+#define ULPI_DIR MFP_CFG_DRV(ULPI_DIR, MFP_AF0, MFP_DS01X)
-+#define ULPI_NXT MFP_CFG_DRV(ULPI_NXT, MFP_AF0, MFP_DS01X)
-+#define ULPI_STP MFP_CFG_DRV(ULPI_STP, MFP_AF0, MFP_DS01X)
-+#endif /* CONFIG_CPU_PXA310 */
-+
-+#endif /* __ASM_ARCH_MFP_PXA300_H */
---- /dev/null
-+++ linux-2.6.23/include/asm-arm/arch-pxa/mfp-pxa320.h
-@@ -0,0 +1,446 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/mfp-pxa320.h
-+ *
-+ * PXA320 specific MFP configuration definitions
-+ *
-+ * Copyright (C) 2007 Marvell International Ltd.
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __ASM_ARCH_MFP_PXA320_H
-+#define __ASM_ARCH_MFP_PXA320_H
-+
-+#include <asm/arch/mfp.h>
-+
-+/* GPIO */
-+#define GPIO46_GPIO MFP_CFG(GPIO6, AF0)
-+#define GPIO49_GPIO MFP_CFG(GPIO49, AF0)
-+#define GPIO50_GPIO MFP_CFG(GPIO50, AF0)
-+#define GPIO51_GPIO MFP_CFG(GPIO51, AF0)
-+#define GPIO52_GPIO MFP_CFG(GPIO52, AF0)
-+
-+#define GPIO7_2_GPIO MFP_CFG(GPIO7_2, AF0)
-+#define GPIO8_2_GPIO MFP_CFG(GPIO8_2, AF0)
-+#define GPIO9_2_GPIO MFP_CFG(GPIO9_2, AF0)
-+#define GPIO10_2_GPIO MFP_CFG(GPIO10_2, AF0)
-+#define GPIO11_2_GPIO MFP_CFG(GPIO11_2, AF0)
-+#define GPIO12_2_GPIO MFP_CFG(GPIO12_2, AF0)
-+#define GPIO13_2_GPIO MFP_CFG(GPIO13_2, AF0)
-+#define GPIO14_2_GPIO MFP_CFG(GPIO14_2, AF0)
-+#define GPIO15_2_GPIO MFP_CFG(GPIO15_2, AF0)
-+#define GPIO16_2_GPIO MFP_CFG(GPIO16_2, AF0)
-+#define GPIO17_2_GPIO MFP_CFG(GPIO17_2, AF0)
-+
-+/* Chip Select */
-+#define GPIO4_nCS3 MFP_CFG(GPIO4, AF1)
-+
-+/* AC97 */
-+#define GPIO34_AC97_SYSCLK MFP_CFG(GPIO34, AF1)
-+#define GPIO39_AC97_BITCLK MFP_CFG(GPIO39, AF1)
-+#define GPIO40_AC97_nACRESET MFP_CFG(GPIO40, AF1)
-+#define GPIO35_AC97_SDATA_IN_0 MFP_CFG(GPIO35, AF1)
-+#define GPIO36_AC97_SDATA_IN_1 MFP_CFG(GPIO36, AF1)
-+#define GPIO32_AC97_SDATA_IN_2 MFP_CFG(GPIO32, AF2)
-+#define GPIO33_AC97_SDATA_IN_3 MFP_CFG(GPIO33, AF2)
-+#define GPIO11_AC97_SDATA_IN_2 MFP_CFG(GPIO11, AF3)
-+#define GPIO12_AC97_SDATA_IN_3 MFP_CFG(GPIO12, AF3)
-+#define GPIO37_AC97_SDATA_OUT MFP_CFG(GPIO37, AF1)
-+#define GPIO38_AC97_SYNC MFP_CFG(GPIO38, AF1)
-+
-+/* I2C */
-+#define GPIO32_I2C_SCL MFP_CFG_LPM(GPIO32, AF1, PULL_HIGH)
-+#define GPIO33_I2C_SDA MFP_CFG_LPM(GPIO33, AF1, PULL_HIGH)
-+
-+/* QCI */
-+#define GPIO49_CI_DD_0 MFP_CFG_DRV(GPIO49, AF1, DS04X)
-+#define GPIO50_CI_DD_1 MFP_CFG_DRV(GPIO50, AF1, DS04X)
-+#define GPIO51_CI_DD_2 MFP_CFG_DRV(GPIO51, AF1, DS04X)
-+#define GPIO52_CI_DD_3 MFP_CFG_DRV(GPIO52, AF1, DS04X)
-+#define GPIO53_CI_DD_4 MFP_CFG_DRV(GPIO53, AF1, DS04X)
-+#define GPIO54_CI_DD_5 MFP_CFG_DRV(GPIO54, AF1, DS04X)
-+#define GPIO55_CI_DD_6 MFP_CFG_DRV(GPIO55, AF1, DS04X)
-+#define GPIO56_CI_DD_7 MFP_CFG_DRV(GPIO56, AF0, DS04X)
-+#define GPIO57_CI_DD_8 MFP_CFG_DRV(GPIO57, AF1, DS04X)
-+#define GPIO58_CI_DD_9 MFP_CFG_DRV(GPIO58, AF1, DS04X)
-+#define GPIO59_CI_MCLK MFP_CFG_DRV(GPIO59, AF0, DS04X)
-+#define GPIO60_CI_PCLK MFP_CFG_DRV(GPIO60, AF0, DS04X)
-+#define GPIO61_CI_HSYNC MFP_CFG_DRV(GPIO61, AF0, DS04X)
-+#define GPIO62_CI_VSYNC MFP_CFG_DRV(GPIO62, AF0, DS04X)
-+
-+#define GPIO31_CIR_OUT MFP_CFG(GPIO31, AF5)
-+
-+#define GPIO0_2_CLK_EXT MFP_CFG(GPIO0_2, AF3)
-+#define GPIO0_DRQ MFP_CFG(GPIO0, AF2)
-+#define GPIO11_EXT_SYNC0 MFP_CFG(GPIO11, AF5)
-+#define GPIO12_EXT_SYNC1 MFP_CFG(GPIO12, AF6)
-+#define GPIO0_2_HZ_CLK MFP_CFG(GPIO0_2, AF1)
-+#define GPIO14_HZ_CLK MFP_CFG(GPIO14, AF4)
-+#define GPIO30_ICP_RXD MFP_CFG(GPIO30, AF1)
-+#define GPIO31_ICP_TXD MFP_CFG(GPIO31, AF1)
-+
-+#define GPIO83_KP_DKIN_0 MFP_CFG_LPM(GPIO83, AF3, FLOAT)
-+#define GPIO84_KP_DKIN_1 MFP_CFG_LPM(GPIO84, AF3, FLOAT)
-+#define GPIO85_KP_DKIN_2 MFP_CFG_LPM(GPIO85, AF3, FLOAT)
-+#define GPIO86_KP_DKIN_3 MFP_CFG_LPM(GPIO86, AF3, FLOAT)
-+
-+#define GPIO105_KP_DKIN_0 MFP_CFG_LPM(GPIO105, AF2, FLOAT)
-+#define GPIO106_KP_DKIN_1 MFP_CFG_LPM(GPIO106, AF2, FLOAT)
-+#define GPIO107_KP_DKIN_2 MFP_CFG_LPM(GPIO107, AF2, FLOAT)
-+#define GPIO108_KP_DKIN_3 MFP_CFG_LPM(GPIO108, AF2, FLOAT)
-+#define GPIO109_KP_DKIN_4 MFP_CFG_LPM(GPIO109, AF2, FLOAT)
-+#define GPIO110_KP_DKIN_5 MFP_CFG_LPM(GPIO110, AF2, FLOAT)
-+#define GPIO111_KP_DKIN_6 MFP_CFG_LPM(GPIO111, AF2, FLOAT)
-+#define GPIO112_KP_DKIN_7 MFP_CFG_LPM(GPIO112, AF2, FLOAT)
-+
-+#define GPIO113_KP_DKIN_0 MFP_CFG_LPM(GPIO113, AF2, FLOAT)
-+#define GPIO114_KP_DKIN_1 MFP_CFG_LPM(GPIO114, AF2, FLOAT)
-+#define GPIO115_KP_DKIN_2 MFP_CFG_LPM(GPIO115, AF2, FLOAT)
-+#define GPIO116_KP_DKIN_3 MFP_CFG_LPM(GPIO116, AF2, FLOAT)
-+#define GPIO117_KP_DKIN_4 MFP_CFG_LPM(GPIO117, AF2, FLOAT)
-+#define GPIO118_KP_DKIN_5 MFP_CFG_LPM(GPIO118, AF2, FLOAT)
-+#define GPIO119_KP_DKIN_6 MFP_CFG_LPM(GPIO119, AF2, FLOAT)
-+#define GPIO120_KP_DKIN_7 MFP_CFG_LPM(GPIO120, AF2, FLOAT)
-+
-+#define GPIO127_KP_DKIN_0 MFP_CFG_LPM(GPIO127, AF2, FLOAT)
-+#define GPIO126_KP_DKIN_1 MFP_CFG_LPM(GPIO126, AF2, FLOAT)
-+
-+#define GPIO2_2_KP_DKIN_0 MFP_CFG_LPM(GPIO2_2, AF2, FLOAT)
-+#define GPIO3_2_KP_DKIN_1 MFP_CFG_LPM(GPIO3_2, AF2, FLOAT)
-+#define GPIO125_KP_DKIN_2 MFP_CFG_LPM(GPIO125, AF2, FLOAT)
-+#define GPIO124_KP_DKIN_3 MFP_CFG_LPM(GPIO124, AF2, FLOAT)
-+#define GPIO123_KP_DKIN_4 MFP_CFG_LPM(GPIO123, AF2, FLOAT)
-+#define GPIO122_KP_DKIN_5 MFP_CFG_LPM(GPIO122, AF2, FLOAT)
-+#define GPIO121_KP_DKIN_6 MFP_CFG_LPM(GPIO121, AF2, FLOAT)
-+#define GPIO4_2_KP_DKIN_7 MFP_CFG_LPM(GPIO4_2, AF2, FLOAT)
-+
-+#define GPIO113_KP_MKIN_0 MFP_CFG_LPM(GPIO113, AF1, FLOAT)
-+#define GPIO114_KP_MKIN_1 MFP_CFG_LPM(GPIO114, AF1, FLOAT)
-+#define GPIO115_KP_MKIN_2 MFP_CFG_LPM(GPIO115, AF1, FLOAT)
-+#define GPIO116_KP_MKIN_3 MFP_CFG_LPM(GPIO116, AF1, FLOAT)
-+#define GPIO117_KP_MKIN_4 MFP_CFG_LPM(GPIO117, AF1, FLOAT)
-+#define GPIO118_KP_MKIN_5 MFP_CFG_LPM(GPIO118, AF1, FLOAT)
-+#define GPIO119_KP_MKIN_6 MFP_CFG_LPM(GPIO119, AF1, FLOAT)
-+#define GPIO120_KP_MKIN_7 MFP_CFG_LPM(GPIO120, AF1, FLOAT)
-+
-+#define GPIO83_KP_MKOUT_0 MFP_CFG_LPM(GPIO83, AF2, DRIVE_HIGH)
-+#define GPIO84_KP_MKOUT_1 MFP_CFG_LPM(GPIO84, AF2, DRIVE_HIGH)
-+#define GPIO85_KP_MKOUT_2 MFP_CFG_LPM(GPIO85, AF2, DRIVE_HIGH)
-+#define GPIO86_KP_MKOUT_3 MFP_CFG_LPM(GPIO86, AF2, DRIVE_HIGH)
-+#define GPIO13_KP_MKOUT_4 MFP_CFG_LPM(GPIO13, AF3, DRIVE_HIGH)
-+#define GPIO14_KP_MKOUT_5 MFP_CFG_LPM(GPIO14, AF3, DRIVE_HIGH)
-+
-+#define GPIO121_KP_MKOUT_0 MFP_CFG_LPM(GPIO121, AF1, DRIVE_HIGH)
-+#define GPIO122_KP_MKOUT_1 MFP_CFG_LPM(GPIO122, AF1, DRIVE_HIGH)
-+#define GPIO123_KP_MKOUT_2 MFP_CFG_LPM(GPIO123, AF1, DRIVE_HIGH)
-+#define GPIO124_KP_MKOUT_3 MFP_CFG_LPM(GPIO124, AF1, DRIVE_HIGH)
-+#define GPIO125_KP_MKOUT_4 MFP_CFG_LPM(GPIO125, AF1, DRIVE_HIGH)
-+#define GPIO126_KP_MKOUT_5 MFP_CFG_LPM(GPIO126, AF1, DRIVE_HIGH)
-+#define GPIO127_KP_MKOUT_6 MFP_CFG_LPM(GPIO127, AF1, DRIVE_HIGH)
-+#define GPIO5_2_KP_MKOUT_7 MFP_CFG_LPM(GPIO5_2, AF1, DRIVE_HIGH)
-+
-+/* LCD */
-+#define GPIO6_2_LCD_LDD_0 MFP_CFG_DRV(GPIO6_2, AF1, DS01X)
-+#define GPIO7_2_LCD_LDD_1 MFP_CFG_DRV(GPIO7_2, AF1, DS01X)
-+#define GPIO8_2_LCD_LDD_2 MFP_CFG_DRV(GPIO8_2, AF1, DS01X)
-+#define GPIO9_2_LCD_LDD_3 MFP_CFG_DRV(GPIO9_2, AF1, DS01X)
-+#define GPIO10_2_LCD_LDD_4 MFP_CFG_DRV(GPIO10_2, AF1, DS01X)
-+#define GPIO11_2_LCD_LDD_5 MFP_CFG_DRV(GPIO11_2, AF1, DS01X)
-+#define GPIO12_2_LCD_LDD_6 MFP_CFG_DRV(GPIO12_2, AF1, DS01X)
-+#define GPIO13_2_LCD_LDD_7 MFP_CFG_DRV(GPIO13_2, AF1, DS01X)
-+#define GPIO63_LCD_LDD_8 MFP_CFG_DRV(GPIO63, AF1, DS01X)
-+#define GPIO64_LCD_LDD_9 MFP_CFG_DRV(GPIO64, AF1, DS01X)
-+#define GPIO65_LCD_LDD_10 MFP_CFG_DRV(GPIO65, AF1, DS01X)
-+#define GPIO66_LCD_LDD_11 MFP_CFG_DRV(GPIO66, AF1, DS01X)
-+#define GPIO67_LCD_LDD_12 MFP_CFG_DRV(GPIO67, AF1, DS01X)
-+#define GPIO68_LCD_LDD_13 MFP_CFG_DRV(GPIO68, AF1, DS01X)
-+#define GPIO69_LCD_LDD_14 MFP_CFG_DRV(GPIO69, AF1, DS01X)
-+#define GPIO70_LCD_LDD_15 MFP_CFG_DRV(GPIO70, AF1, DS01X)
-+#define GPIO71_LCD_LDD_16 MFP_CFG_DRV(GPIO71, AF1, DS01X)
-+#define GPIO72_LCD_LDD_17 MFP_CFG_DRV(GPIO72, AF1, DS01X)
-+#define GPIO73_LCD_CS_N MFP_CFG_DRV(GPIO73, AF2, DS01X)
-+#define GPIO74_LCD_VSYNC MFP_CFG_DRV(GPIO74, AF2, DS01X)
-+#define GPIO14_2_LCD_FCLK MFP_CFG_DRV(GPIO14_2, AF1, DS01X)
-+#define GPIO15_2_LCD_LCLK MFP_CFG_DRV(GPIO15_2, AF1, DS01X)
-+#define GPIO16_2_LCD_PCLK MFP_CFG_DRV(GPIO16_2, AF1, DS01X)
-+#define GPIO17_2_LCD_BIAS MFP_CFG_DRV(GPIO17_2, AF1, DS01X)
-+#define GPIO64_LCD_VSYNC MFP_CFG_DRV(GPIO64, AF2, DS01X)
-+#define GPIO63_LCD_CS_N MFP_CFG_DRV(GPIO63, AF2, DS01X)
-+
-+#define GPIO6_2_MLCD_DD_0 MFP_CFG_DRV(GPIO6_2, AF7, DS08X)
-+#define GPIO7_2_MLCD_DD_1 MFP_CFG_DRV(GPIO7_2, AF7, DS08X)
-+#define GPIO8_2_MLCD_DD_2 MFP_CFG_DRV(GPIO8_2, AF7, DS08X)
-+#define GPIO9_2_MLCD_DD_3 MFP_CFG_DRV(GPIO9_2, AF7, DS08X)
-+#define GPIO10_2_MLCD_DD_4 MFP_CFG_DRV(GPIO10_2, AF7, DS08X)
-+#define GPIO11_2_MLCD_DD_5 MFP_CFG_DRV(GPIO11_2, AF7, DS08X)
-+#define GPIO12_2_MLCD_DD_6 MFP_CFG_DRV(GPIO12_2, AF7, DS08X)
-+#define GPIO13_2_MLCD_DD_7 MFP_CFG_DRV(GPIO13_2, AF7, DS08X)
-+#define GPIO63_MLCD_DD_8 MFP_CFG_DRV(GPIO63, AF7, DS08X)
-+#define GPIO64_MLCD_DD_9 MFP_CFG_DRV(GPIO64, AF7, DS08X)
-+#define GPIO65_MLCD_DD_10 MFP_CFG_DRV(GPIO65, AF7, DS08X)
-+#define GPIO66_MLCD_DD_11 MFP_CFG_DRV(GPIO66, AF7, DS08X)
-+#define GPIO67_MLCD_DD_12 MFP_CFG_DRV(GPIO67, AF7, DS08X)
-+#define GPIO68_MLCD_DD_13 MFP_CFG_DRV(GPIO68, AF7, DS08X)
-+#define GPIO69_MLCD_DD_14 MFP_CFG_DRV(GPIO69, AF7, DS08X)
-+#define GPIO70_MLCD_DD_15 MFP_CFG_DRV(GPIO70, AF7, DS08X)
-+#define GPIO71_MLCD_DD_16 MFP_CFG_DRV(GPIO71, AF7, DS08X)
-+#define GPIO72_MLCD_DD_17 MFP_CFG_DRV(GPIO72, AF7, DS08X)
-+#define GPIO73_MLCD_CS MFP_CFG_DRV(GPIO73, AF7, DS08X)
-+#define GPIO74_MLCD_VSYNC MFP_CFG_DRV(GPIO74, AF7, DS08X)
-+#define GPIO14_2_MLCD_FCLK MFP_CFG_DRV(GPIO14_2, AF7, DS08X)
-+#define GPIO15_2_MLCD_LCLK MFP_CFG_DRV(GPIO15_2, AF7, DS08X)
-+#define GPIO16_2_MLCD_PCLK MFP_CFG_DRV(GPIO16_2, AF7, DS08X)
-+#define GPIO17_2_MLCD_BIAS MFP_CFG_DRV(GPIO17_2, AF7, DS08X)
-+
-+/* MMC1 */
-+#define GPIO9_MMC1_CMD MFP_CFG_LPM(GPIO9, AF4, DRIVE_HIGH)
-+#define GPIO22_MMC1_CLK MFP_CFG_LPM(GPIO22, AF4, DRIVE_HIGH)
-+#define GPIO23_MMC1_CMD MFP_CFG_LPM(GPIO23, AF4, DRIVE_HIGH)
-+#define GPIO30_MMC1_CLK MFP_CFG_LPM(GPIO30, AF4, DRIVE_HIGH)
-+#define GPIO31_MMC1_CMD MFP_CFG_LPM(GPIO31, AF4, DRIVE_HIGH)
-+#define GPIO5_MMC1_DAT0 MFP_CFG_LPM(GPIO5, AF4, DRIVE_HIGH)
-+#define GPIO6_MMC1_DAT1 MFP_CFG_LPM(GPIO6, AF4, DRIVE_HIGH)
-+#define GPIO7_MMC1_DAT2 MFP_CFG_LPM(GPIO7, AF4, DRIVE_HIGH)
-+#define GPIO8_MMC1_DAT3 MFP_CFG_LPM(GPIO8, AF4, DRIVE_HIGH)
-+#define GPIO18_MMC1_DAT0 MFP_CFG_LPM(GPIO18, AF4, DRIVE_HIGH)
-+#define GPIO19_MMC1_DAT1 MFP_CFG_LPM(GPIO19, AF4, DRIVE_HIGH)
-+#define GPIO20_MMC1_DAT2 MFP_CFG_LPM(GPIO20, AF4, DRIVE_HIGH)
-+#define GPIO21_MMC1_DAT3 MFP_CFG_LPM(GPIO21, AF4, DRIVE_HIGH)
-+
-+#define GPIO28_MMC2_CLK MFP_CFG_LPM(GPIO28, AF4, PULL_HIGH)
-+#define GPIO29_MMC2_CMD MFP_CFG_LPM(GPIO29, AF4, PULL_HIGH)
-+#define GPIO30_MMC2_CLK MFP_CFG_LPM(GPIO30, AF3, PULL_HIGH)
-+#define GPIO31_MMC2_CMD MFP_CFG_LPM(GPIO31, AF3, PULL_HIGH)
-+#define GPIO79_MMC2_CLK MFP_CFG_LPM(GPIO79, AF4, PULL_HIGH)
-+#define GPIO80_MMC2_CMD MFP_CFG_LPM(GPIO80, AF4, PULL_HIGH)
-+
-+#define GPIO5_MMC2_DAT0 MFP_CFG_LPM(GPIO5, AF2, PULL_HIGH)
-+#define GPIO6_MMC2_DAT1 MFP_CFG_LPM(GPIO6, AF2, PULL_HIGH)
-+#define GPIO7_MMC2_DAT2 MFP_CFG_LPM(GPIO7, AF2, PULL_HIGH)
-+#define GPIO8_MMC2_DAT3 MFP_CFG_LPM(GPIO8, AF2, PULL_HIGH)
-+#define GPIO24_MMC2_DAT0 MFP_CFG_LPM(GPIO24, AF4, PULL_HIGH)
-+#define GPIO75_MMC2_DAT0 MFP_CFG_LPM(GPIO75, AF4, PULL_HIGH)
-+#define GPIO25_MMC2_DAT1 MFP_CFG_LPM(GPIO25, AF4, PULL_HIGH)
-+#define GPIO76_MMC2_DAT1 MFP_CFG_LPM(GPIO76, AF4, PULL_HIGH)
-+#define GPIO26_MMC2_DAT2 MFP_CFG_LPM(GPIO26, AF4, PULL_HIGH)
-+#define GPIO77_MMC2_DAT2 MFP_CFG_LPM(GPIO77, AF4, PULL_HIGH)
-+#define GPIO27_MMC2_DAT3 MFP_CFG_LPM(GPIO27, AF4, PULL_HIGH)
-+#define GPIO78_MMC2_DAT3 MFP_CFG_LPM(GPIO78, AF4, PULL_HIGH)
-+
-+/* 1-Wire */
-+#define GPIO14_ONE_WIRE MFP_CFG_LPM(GPIO14, AF5, FLOAT)
-+#define GPIO0_2_ONE_WIRE MFP_CFG_LPM(GPIO0_2, AF2, FLOAT)
-+
-+/* SSP1 */
-+#define GPIO87_SSP1_EXTCLK MFP_CFG(GPIO87, AF1)
-+#define GPIO88_SSP1_SYSCLK MFP_CFG(GPIO88, AF1)
-+#define GPIO83_SSP1_SCLK MFP_CFG(GPIO83, AF1)
-+#define GPIO84_SSP1_SFRM MFP_CFG(GPIO84, AF1)
-+#define GPIO85_SSP1_RXD MFP_CFG(GPIO85, AF6)
-+#define GPIO85_SSP1_TXD MFP_CFG(GPIO85, AF1)
-+#define GPIO86_SSP1_RXD MFP_CFG(GPIO86, AF1)
-+#define GPIO86_SSP1_TXD MFP_CFG(GPIO86, AF6)
-+
-+/* SSP2 */
-+#define GPIO39_SSP2_EXTCLK MFP_CFG(GPIO39, AF2)
-+#define GPIO40_SSP2_SYSCLK MFP_CFG(GPIO40, AF2)
-+#define GPIO12_SSP2_SCLK MFP_CFG(GPIO12, AF2)
-+#define GPIO35_SSP2_SCLK MFP_CFG(GPIO35, AF2)
-+#define GPIO36_SSP2_SFRM MFP_CFG(GPIO36, AF2)
-+#define GPIO37_SSP2_RXD MFP_CFG(GPIO37, AF5)
-+#define GPIO37_SSP2_TXD MFP_CFG(GPIO37, AF2)
-+#define GPIO38_SSP2_RXD MFP_CFG(GPIO38, AF2)
-+#define GPIO38_SSP2_TXD MFP_CFG(GPIO38, AF5)
-+
-+#define GPIO69_SSP3_SCLK MFP_CFG(GPIO69, AF2, DS08X, FLOAT)
-+#define GPIO70_SSP3_FRM MFP_CFG(GPIO70, AF2, DS08X, DRIVE_LOW)
-+#define GPIO89_SSP3_SCLK MFP_CFG(GPIO89, AF1, DS08X, FLOAT)
-+#define GPIO90_SSP3_FRM MFP_CFG(GPIO90, AF1, DS08X, DRIVE_LOW)
-+#define GPIO71_SSP3_RXD MFP_CFG_X(GPIO71, AF5, DS08X, FLOAT)
-+#define GPIO71_SSP3_TXD MFP_CFG_X(GPIO71, AF2, DS08X, DRIVE_LOW)
-+#define GPIO72_SSP3_RXD MFP_CFG_X(GPIO72, AF2, DS08X, FLOAT)
-+#define GPIO72_SSP3_TXD MFP_CFG_X(GPIO72, AF5, DS08X, DRIVE_LOW)
-+#define GPIO91_SSP3_RXD MFP_CFG_X(GPIO91, AF5, DS08X, FLOAT)
-+#define GPIO91_SSP3_TXD MFP_CFG_X(GPIO91, AF1, DS08X, DRIVE_LOW)
-+#define GPIO92_SSP3_RXD MFP_CFG_X(GPIO92, AF1, DS08X, FLOAT)
-+#define GPIO92_SSP3_TXD MFP_CFG_X(GPIO92, AF5, DS08X, DRIVE_LOW)
-+
-+#define GPIO93_SSP4_SCLK MFP_CFG_LPM(GPIO93, AF1, PULL_HIGH)
-+#define GPIO94_SSP4_FRM MFP_CFG_LPM(GPIO94, AF1, PULL_HIGH)
-+#define GPIO94_SSP4_RXD MFP_CFG_LPM(GPIO94, AF5, PULL_HIGH)
-+#define GPIO95_SSP4_RXD MFP_CFG_LPM(GPIO95, AF5, PULL_HIGH)
-+#define GPIO95_SSP4_TXD MFP_CFG_LPM(GPIO95, AF1, PULL_HIGH)
-+#define GPIO96_SSP4_RXD MFP_CFG_LPM(GPIO96, AF1, PULL_HIGH)
-+#define GPIO96_SSP4_TXD MFP_CFG_LPM(GPIO96, AF5, PULL_HIGH)
-+
-+/* UART1 */
-+#define GPIO41_UART1_RXD MFP_CFG_LPM(GPIO41, AF2, FLOAT)
-+#define GPIO41_UART1_TXD MFP_CFG_LPM(GPIO41, AF4, FLOAT)
-+#define GPIO42_UART1_RXD MFP_CFG_LPM(GPIO42, AF4, FLOAT)
-+#define GPIO42_UART1_TXD MFP_CFG_LPM(GPIO42, AF2, FLOAT)
-+#define GPIO97_UART1_RXD MFP_CFG_LPM(GPIO97, AF1, FLOAT)
-+#define GPIO97_UART1_TXD MFP_CFG_LPM(GPIO97, AF6, FLOAT)
-+#define GPIO98_UART1_RXD MFP_CFG_LPM(GPIO98, AF6, FLOAT)
-+#define GPIO98_UART1_TXD MFP_CFG_LPM(GPIO98, AF1, FLOAT)
-+#define GPIO43_UART1_CTS MFP_CFG_LPM(GPIO43, AF2, FLOAT)
-+#define GPIO43_UART1_RTS MFP_CFG_LPM(GPIO43, AF4, FLOAT)
-+#define GPIO48_UART1_CTS MFP_CFG_LPM(GPIO48, AF4, FLOAT)
-+#define GPIO48_UART1_RTS MFP_CFG_LPM(GPIO48, AF2, FLOAT)
-+#define GPIO99_UART1_CTS MFP_CFG_LPM(GPIO99, AF1, FLOAT)
-+#define GPIO99_UART1_RTS MFP_CFG_LPM(GPIO99, AF6, FLOAT)
-+#define GPIO104_UART1_CTS MFP_CFG_LPM(GPIO104, AF6, FLOAT)
-+#define GPIO104_UART1_RTS MFP_CFG_LPM(GPIO104, AF1, FLOAT)
-+#define GPIO45_UART1_DTR MFP_CFG_LPM(GPIO45, AF4, FLOAT)
-+#define GPIO45_UART1_DSR MFP_CFG_LPM(GPIO45, AF2, FLOAT)
-+#define GPIO47_UART1_DTR MFP_CFG_LPM(GPIO47, AF2, FLOAT)
-+#define GPIO47_UART1_DSR MFP_CFG_LPM(GPIO47, AF4, FLOAT)
-+#define GPIO101_UART1_DTR MFP_CFG_LPM(GPIO101, AF6, FLOAT)
-+#define GPIO101_UART1_DSR MFP_CFG_LPM(GPIO101, AF1, FLOAT)
-+#define GPIO103_UART1_DTR MFP_CFG_LPM(GPIO103, AF1, FLOAT)
-+#define GPIO103_UART1_DSR MFP_CFG_LPM(GPIO103, AF6, FLOAT)
-+#define GPIO44_UART1_DCD MFP_CFG_LPM(GPIO44, AF2, FLOAT)
-+#define GPIO100_UART1_DCD MFP_CFG_LPM(GPIO100, AF1, FLOAT)
-+#define GPIO46_UART1_RI MFP_CFG_LPM(GPIO46, AF2, FLOAT)
-+#define GPIO102_UART1_RI MFP_CFG_LPM(GPIO102, AF1, FLOAT)
-+
-+/* UART2 */
-+#define GPIO109_UART2_CTS MFP_CFG_LPM(GPIO109, AF3, FLOAT)
-+#define GPIO109_UART2_RTS MFP_CFG_LPM(GPIO109, AF1, FLOAT)
-+#define GPIO112_UART2_CTS MFP_CFG_LPM(GPIO112, AF1, FLOAT)
-+#define GPIO112_UART2_RTS MFP_CFG_LPM(GPIO112, AF3, FLOAT)
-+#define GPIO110_UART2_RXD MFP_CFG_LPM(GPIO110, AF1, FLOAT)
-+#define GPIO110_UART2_TXD MFP_CFG_LPM(GPIO110, AF3, FLOAT)
-+#define GPIO111_UART2_RXD MFP_CFG_LPM(GPIO111, AF3, FLOAT)
-+#define GPIO111_UART2_TXD MFP_CFG_LPM(GPIO111, AF1, FLOAT)
-+
-+/* UART3 */
-+#define GPIO89_UART3_CTS MFP_CFG_LPM(GPIO89, AF2, FLOAT)
-+#define GPIO89_UART3_RTS MFP_CFG_LPM(GPIO89, AF4, FLOAT)
-+#define GPIO90_UART3_CTS MFP_CFG_LPM(GPIO90, AF4, FLOAT)
-+#define GPIO90_UART3_RTS MFP_CFG_LPM(GPIO90, AF2, FLOAT)
-+#define GPIO105_UART3_CTS MFP_CFG_LPM(GPIO105, AF1, FLOAT)
-+#define GPIO105_UART3_RTS MFP_CFG_LPM(GPIO105, AF3, FLOAT)
-+#define GPIO106_UART3_CTS MFP_CFG_LPM(GPIO106, AF3, FLOAT)
-+#define GPIO106_UART3_RTS MFP_CFG_LPM(GPIO106, AF1, FLOAT)
-+#define GPIO30_UART3_RXD MFP_CFG_LPM(GPIO30, AF2, FLOAT)
-+#define GPIO30_UART3_TXD MFP_CFG_LPM(GPIO30, AF6, FLOAT)
-+#define GPIO31_UART3_RXD MFP_CFG_LPM(GPIO31, AF6, FLOAT)
-+#define GPIO31_UART3_TXD MFP_CFG_LPM(GPIO31, AF2, FLOAT)
-+#define GPIO91_UART3_RXD MFP_CFG_LPM(GPIO91, AF4, FLOAT)
-+#define GPIO91_UART3_TXD MFP_CFG_LPM(GPIO91, AF2, FLOAT)
-+#define GPIO92_UART3_RXD MFP_CFG_LPM(GPIO92, AF2, FLOAT)
-+#define GPIO92_UART3_TXD MFP_CFG_LPM(GPIO92, AF4, FLOAT)
-+#define GPIO107_UART3_RXD MFP_CFG_LPM(GPIO107, AF3, FLOAT)
-+#define GPIO107_UART3_TXD MFP_CFG_LPM(GPIO107, AF1, FLOAT)
-+#define GPIO108_UART3_RXD MFP_CFG_LPM(GPIO108, AF1, FLOAT)
-+#define GPIO108_UART3_TXD MFP_CFG_LPM(GPIO108, AF3, FLOAT)
-+
-+
-+/* USB 2.0 UTMI */
-+#define GPIO10_UTM_CLK MFP_CFG(GPIO10, AF1)
-+#define GPIO36_U2D_RXERROR MFP_CFG(GPIO36, AF3)
-+#define GPIO60_U2D_RXERROR MFP_CFG(GPIO60, AF1)
-+#define GPIO87_U2D_RXERROR MFP_CFG(GPIO87, AF5)
-+#define GPIO34_UTM_RXVALID MFP_CFG(GPIO34, AF3)
-+#define GPIO58_UTM_RXVALID MFP_CFG(GPIO58, AF2)
-+#define GPIO85_UTM_RXVALID MFP_CFG(GPIO85, AF5)
-+#define GPIO35_UTM_RXACTIVE MFP_CFG(GPIO35, AF3)
-+#define GPIO59_UTM_RXACTIVE MFP_CFG(GPIO59, AF1)
-+#define GPIO86_UTM_RXACTIVE MFP_CFG(GPIO86, AF5)
-+#define GPIO73_UTM_TXREADY MFP_CFG(GPIO73, AF1)
-+#define GPIO68_UTM_LINESTATE_0 MFP_CFG(GPIO68, AF3)
-+#define GPIO90_UTM_LINESTATE_0 MFP_CFG(GPIO90, AF3)
-+#define GPIO102_UTM_LINESTATE_0 MFP_CFG(GPIO102, AF3)
-+#define GPIO107_UTM_LINESTATE_0 MFP_CFG(GPIO107, AF4)
-+#define GPIO69_UTM_LINESTATE_1 MFP_CFG(GPIO69, AF3)
-+#define GPIO91_UTM_LINESTATE_1 MFP_CFG(GPIO91, AF3)
-+#define GPIO103_UTM_LINESTATE_1 MFP_CFG(GPIO103, AF3)
-+
-+#define GPIO41_U2D_PHYDATA_0 MFP_CFG(GPIO41, AF3)
-+#define GPIO42_U2D_PHYDATA_1 MFP_CFG(GPIO42, AF3)
-+#define GPIO43_U2D_PHYDATA_2 MFP_CFG(GPIO43, AF3)
-+#define GPIO44_U2D_PHYDATA_3 MFP_CFG(GPIO44, AF3)
-+#define GPIO45_U2D_PHYDATA_4 MFP_CFG(GPIO45, AF3)
-+#define GPIO46_U2D_PHYDATA_5 MFP_CFG(GPIO46, AF3)
-+#define GPIO47_U2D_PHYDATA_6 MFP_CFG(GPIO47, AF3)
-+#define GPIO48_U2D_PHYDATA_7 MFP_CFG(GPIO48, AF3)
-+
-+#define GPIO49_U2D_PHYDATA_0 MFP_CFG(GPIO49, AF3)
-+#define GPIO50_U2D_PHYDATA_1 MFP_CFG(GPIO50, AF3)
-+#define GPIO51_U2D_PHYDATA_2 MFP_CFG(GPIO51, AF3)
-+#define GPIO52_U2D_PHYDATA_3 MFP_CFG(GPIO52, AF3)
-+#define GPIO53_U2D_PHYDATA_4 MFP_CFG(GPIO53, AF3)
-+#define GPIO54_U2D_PHYDATA_5 MFP_CFG(GPIO54, AF3)
-+#define GPIO55_U2D_PHYDATA_6 MFP_CFG(GPIO55, AF3)
-+#define GPIO56_U2D_PHYDATA_7 MFP_CFG(GPIO56, AF3)
-+
-+#define GPIO37_U2D_OPMODE0 MFP_CFG(GPIO37, AF4)
-+#define GPIO61_U2D_OPMODE0 MFP_CFG(GPIO61, AF2)
-+#define GPIO88_U2D_OPMODE0 MFP_CFG(GPIO88, AF7)
-+
-+#define GPIO38_U2D_OPMODE1 MFP_CFG(GPIO38, AF4)
-+#define GPIO62_U2D_OPMODE1 MFP_CFG(GPIO62, AF2)
-+#define GPIO104_U2D_OPMODE1 MFP_CFG(GPIO104, AF4)
-+#define GPIO108_U2D_OPMODE1 MFP_CFG(GPIO108, AF5)
-+
-+#define GPIO74_U2D_RESET MFP_CFG(GPIO74, AF1)
-+#define GPIO93_U2D_RESET MFP_CFG(GPIO93, AF2)
-+#define GPIO98_U2D_RESET MFP_CFG(GPIO98, AF3)
-+
-+#define GPIO67_U2D_SUSPEND MFP_CFG(GPIO67, AF3)
-+#define GPIO96_U2D_SUSPEND MFP_CFG(GPIO96, AF2)
-+#define GPIO101_U2D_SUSPEND MFP_CFG(GPIO101, AF3)
-+
-+#define GPIO66_U2D_TERM_SEL MFP_CFG(GPIO66, AF5)
-+#define GPIO95_U2D_TERM_SEL MFP_CFG(GPIO95, AF3)
-+#define GPIO97_U2D_TERM_SEL MFP_CFG(GPIO97, AF7)
-+#define GPIO100_U2D_TERM_SEL MFP_CFG(GPIO100, AF5)
-+
-+#define GPIO39_U2D_TXVALID MFP_CFG(GPIO39, AF4)
-+#define GPIO70_U2D_TXVALID MFP_CFG(GPIO70, AF5)
-+#define GPIO83_U2D_TXVALID MFP_CFG(GPIO83, AF7)
-+
-+#define GPIO65_U2D_XCVR_SEL MFP_CFG(GPIO65, AF5)
-+#define GPIO94_U2D_XCVR_SEL MFP_CFG(GPIO94, AF3)
-+#define GPIO99_U2D_XCVR_SEL MFP_CFG(GPIO99, AF5)
-+
-+/* USB Host 1.1 */
-+#define GPIO2_2_USBH_PEN MFP_CFG(GPIO2_2, AF1)
-+#define GPIO3_2_USBH_PWR MFP_CFG(GPIO3_2, AF1)
-+
-+/* USB P2 */
-+#define GPIO97_USB_P2_2 MFP_CFG(GPIO97, AF2)
-+#define GPIO97_USB_P2_6 MFP_CFG(GPIO97, AF4)
-+#define GPIO98_USB_P2_2 MFP_CFG(GPIO98, AF4)
-+#define GPIO98_USB_P2_6 MFP_CFG(GPIO98, AF2)
-+#define GPIO99_USB_P2_1 MFP_CFG(GPIO99, AF2)
-+#define GPIO100_USB_P2_4 MFP_CFG(GPIO100, AF2)
-+#define GPIO101_USB_P2_8 MFP_CFG(GPIO101, AF2)
-+#define GPIO102_USB_P2_3 MFP_CFG(GPIO102, AF2)
-+#define GPIO103_USB_P2_5 MFP_CFG(GPIO103, AF2)
-+#define GPIO104_USB_P2_7 MFP_CFG(GPIO104, AF2)
-+
-+/* USB P3 */
-+#define GPIO75_USB_P3_1 MFP_CFG(GPIO75, AF2)
-+#define GPIO76_USB_P3_2 MFP_CFG(GPIO76, AF2)
-+#define GPIO77_USB_P3_3 MFP_CFG(GPIO77, AF2)
-+#define GPIO78_USB_P3_4 MFP_CFG(GPIO78, AF2)
-+#define GPIO79_USB_P3_5 MFP_CFG(GPIO79, AF2)
-+#define GPIO80_USB_P3_6 MFP_CFG(GPIO80, AF2)
-+
-+#define GPIO13_CHOUT0 MFP_CFG(GPIO13, AF6)
-+#define GPIO14_CHOUT1 MFP_CFG(GPIO14, AF6)
-+
-+#define GPIO2_RDY MFP_CFG(GPIO2, AF1)
-+#define GPIO5_NPIOR MFP_CFG(GPIO5, AF3)
-+
-+#define GPIO11_PWM0_OUT MFP_CFG(GPIO11, AF1)
-+#define GPIO12_PWM1_OUT MFP_CFG(GPIO12, AF1)
-+#define GPIO13_PWM2_OUT MFP_CFG(GPIO13, AF1)
-+#define GPIO14_PWM3_OUT MFP_CFG(GPIO14, AF1)
-+
-+#endif /* __ASM_ARCH_MFP_PXA320_H */
---- /dev/null
-+++ linux-2.6.23/include/asm-arm/arch-pxa/mfp.h
-@@ -0,0 +1,576 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/mfp.h
-+ *
-+ * Multi-Function Pin Definitions
-+ *
-+ * Copyright (C) 2007 Marvell International Ltd.
-+ *
-+ * 2007-8-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __ASM_ARCH_MFP_H
-+#define __ASM_ARCH_MFP_H
-+
-+#define MFPR_BASE (0x40e10000)
-+#define MFPR_SIZE (PAGE_SIZE)
-+
-+#define mfp_to_gpio(m) ((m) % 128)
-+
-+/* list of all the configurable MFP pins */
-+enum {
-+ MFP_PIN_INVALID = -1,
-+
-+ MFP_PIN_GPIO0 = 0,
-+ MFP_PIN_GPIO1,
-+ MFP_PIN_GPIO2,
-+ MFP_PIN_GPIO3,
-+ MFP_PIN_GPIO4,
-+ MFP_PIN_GPIO5,
-+ MFP_PIN_GPIO6,
-+ MFP_PIN_GPIO7,
-+ MFP_PIN_GPIO8,
-+ MFP_PIN_GPIO9,
-+ MFP_PIN_GPIO10,
-+ MFP_PIN_GPIO11,
-+ MFP_PIN_GPIO12,
-+ MFP_PIN_GPIO13,
-+ MFP_PIN_GPIO14,
-+ MFP_PIN_GPIO15,
-+ MFP_PIN_GPIO16,
-+ MFP_PIN_GPIO17,
-+ MFP_PIN_GPIO18,
-+ MFP_PIN_GPIO19,
-+ MFP_PIN_GPIO20,
-+ MFP_PIN_GPIO21,
-+ MFP_PIN_GPIO22,
-+ MFP_PIN_GPIO23,
-+ MFP_PIN_GPIO24,
-+ MFP_PIN_GPIO25,
-+ MFP_PIN_GPIO26,
-+ MFP_PIN_GPIO27,
-+ MFP_PIN_GPIO28,
-+ MFP_PIN_GPIO29,
-+ MFP_PIN_GPIO30,
-+ MFP_PIN_GPIO31,
-+ MFP_PIN_GPIO32,
-+ MFP_PIN_GPIO33,
-+ MFP_PIN_GPIO34,
-+ MFP_PIN_GPIO35,
-+ MFP_PIN_GPIO36,
-+ MFP_PIN_GPIO37,
-+ MFP_PIN_GPIO38,
-+ MFP_PIN_GPIO39,
-+ MFP_PIN_GPIO40,
-+ MFP_PIN_GPIO41,
-+ MFP_PIN_GPIO42,
-+ MFP_PIN_GPIO43,
-+ MFP_PIN_GPIO44,
-+ MFP_PIN_GPIO45,
-+ MFP_PIN_GPIO46,
-+ MFP_PIN_GPIO47,
-+ MFP_PIN_GPIO48,
-+ MFP_PIN_GPIO49,
-+ MFP_PIN_GPIO50,
-+ MFP_PIN_GPIO51,
-+ MFP_PIN_GPIO52,
-+ MFP_PIN_GPIO53,
-+ MFP_PIN_GPIO54,
-+ MFP_PIN_GPIO55,
-+ MFP_PIN_GPIO56,
-+ MFP_PIN_GPIO57,
-+ MFP_PIN_GPIO58,
-+ MFP_PIN_GPIO59,
-+ MFP_PIN_GPIO60,
-+ MFP_PIN_GPIO61,
-+ MFP_PIN_GPIO62,
-+ MFP_PIN_GPIO63,
-+ MFP_PIN_GPIO64,
-+ MFP_PIN_GPIO65,
-+ MFP_PIN_GPIO66,
-+ MFP_PIN_GPIO67,
-+ MFP_PIN_GPIO68,
-+ MFP_PIN_GPIO69,
-+ MFP_PIN_GPIO70,
-+ MFP_PIN_GPIO71,
-+ MFP_PIN_GPIO72,
-+ MFP_PIN_GPIO73,
-+ MFP_PIN_GPIO74,
-+ MFP_PIN_GPIO75,
-+ MFP_PIN_GPIO76,
-+ MFP_PIN_GPIO77,
-+ MFP_PIN_GPIO78,
-+ MFP_PIN_GPIO79,
-+ MFP_PIN_GPIO80,
-+ MFP_PIN_GPIO81,
-+ MFP_PIN_GPIO82,
-+ MFP_PIN_GPIO83,
-+ MFP_PIN_GPIO84,
-+ MFP_PIN_GPIO85,
-+ MFP_PIN_GPIO86,
-+ MFP_PIN_GPIO87,
-+ MFP_PIN_GPIO88,
-+ MFP_PIN_GPIO89,
-+ MFP_PIN_GPIO90,
-+ MFP_PIN_GPIO91,
-+ MFP_PIN_GPIO92,
-+ MFP_PIN_GPIO93,
-+ MFP_PIN_GPIO94,
-+ MFP_PIN_GPIO95,
-+ MFP_PIN_GPIO96,
-+ MFP_PIN_GPIO97,
-+ MFP_PIN_GPIO98,
-+ MFP_PIN_GPIO99,
-+ MFP_PIN_GPIO100,
-+ MFP_PIN_GPIO101,
-+ MFP_PIN_GPIO102,
-+ MFP_PIN_GPIO103,
-+ MFP_PIN_GPIO104,
-+ MFP_PIN_GPIO105,
-+ MFP_PIN_GPIO106,
-+ MFP_PIN_GPIO107,
-+ MFP_PIN_GPIO108,
-+ MFP_PIN_GPIO109,
-+ MFP_PIN_GPIO110,
-+ MFP_PIN_GPIO111,
-+ MFP_PIN_GPIO112,
-+ MFP_PIN_GPIO113,
-+ MFP_PIN_GPIO114,
-+ MFP_PIN_GPIO115,
-+ MFP_PIN_GPIO116,
-+ MFP_PIN_GPIO117,
-+ MFP_PIN_GPIO118,
-+ MFP_PIN_GPIO119,
-+ MFP_PIN_GPIO120,
-+ MFP_PIN_GPIO121,
-+ MFP_PIN_GPIO122,
-+ MFP_PIN_GPIO123,
-+ MFP_PIN_GPIO124,
-+ MFP_PIN_GPIO125,
-+ MFP_PIN_GPIO126,
-+ MFP_PIN_GPIO127,
-+ MFP_PIN_GPIO0_2,
-+ MFP_PIN_GPIO1_2,
-+ MFP_PIN_GPIO2_2,
-+ MFP_PIN_GPIO3_2,
-+ MFP_PIN_GPIO4_2,
-+ MFP_PIN_GPIO5_2,
-+ MFP_PIN_GPIO6_2,
-+ MFP_PIN_GPIO7_2,
-+ MFP_PIN_GPIO8_2,
-+ MFP_PIN_GPIO9_2,
-+ MFP_PIN_GPIO10_2,
-+ MFP_PIN_GPIO11_2,
-+ MFP_PIN_GPIO12_2,
-+ MFP_PIN_GPIO13_2,
-+ MFP_PIN_GPIO14_2,
-+ MFP_PIN_GPIO15_2,
-+ MFP_PIN_GPIO16_2,
-+ MFP_PIN_GPIO17_2,
-+
-+ MFP_PIN_ULPI_STP,
-+ MFP_PIN_ULPI_NXT,
-+ MFP_PIN_ULPI_DIR,
-+
-+ MFP_PIN_nXCVREN,
-+ MFP_PIN_DF_CLE_nOE,
-+ MFP_PIN_DF_nADV1_ALE,
-+ MFP_PIN_DF_SCLK_E,
-+ MFP_PIN_DF_SCLK_S,
-+ MFP_PIN_nBE0,
-+ MFP_PIN_nBE1,
-+ MFP_PIN_DF_nADV2_ALE,
-+ MFP_PIN_DF_INT_RnB,
-+ MFP_PIN_DF_nCS0,
-+ MFP_PIN_DF_nCS1,
-+ MFP_PIN_nLUA,
-+ MFP_PIN_nLLA,
-+ MFP_PIN_DF_nWE,
-+ MFP_PIN_DF_ALE_nWE,
-+ MFP_PIN_DF_nRE_nOE,
-+ MFP_PIN_DF_ADDR0,
-+ MFP_PIN_DF_ADDR1,
-+ MFP_PIN_DF_ADDR2,
-+ MFP_PIN_DF_ADDR3,
-+ MFP_PIN_DF_IO0,
-+ MFP_PIN_DF_IO1,
-+ MFP_PIN_DF_IO2,
-+ MFP_PIN_DF_IO3,
-+ MFP_PIN_DF_IO4,
-+ MFP_PIN_DF_IO5,
-+ MFP_PIN_DF_IO6,
-+ MFP_PIN_DF_IO7,
-+ MFP_PIN_DF_IO8,
-+ MFP_PIN_DF_IO9,
-+ MFP_PIN_DF_IO10,
-+ MFP_PIN_DF_IO11,
-+ MFP_PIN_DF_IO12,
-+ MFP_PIN_DF_IO13,
-+ MFP_PIN_DF_IO14,
-+ MFP_PIN_DF_IO15,
-+
-+ MFP_PIN_MAX,
-+};
-+
-+/*
-+ * Table that determines the low power modes outputs, with actual settings
-+ * used in parentheses for don't-care values. Except for the float output,
-+ * the configured driven and pulled levels match, so if there is a need for
-+ * non-LPM pulled output, the same configuration could probably be used.
-+ *
-+ * Output value sleep_oe_n sleep_data pullup_en pulldown_en pull_sel
-+ * (bit 7) (bit 8) (bit 14d) (bit 13d)
-+ *
-+ * Drive 0 0 0 0 X (1) 0
-+ * Drive 1 0 1 X (1) 0 0
-+ * Pull hi (1) 1 X(1) 1 0 0
-+ * Pull lo (0) 1 X(0) 0 1 0
-+ * Z (float) 1 X(0) 0 0 0
-+ */
-+#define MFP_LPM_DRIVE_LOW 0x8
-+#define MFP_LPM_DRIVE_HIGH 0x6
-+#define MFP_LPM_PULL_HIGH 0x7
-+#define MFP_LPM_PULL_LOW 0x9
-+#define MFP_LPM_FLOAT 0x1
-+#define MFP_LPM_PULL_NEITHER 0x0
-+
-+/*
-+ * The pullup and pulldown state of the MFP pin is by default determined by
-+ * selected alternate function. In case some buggy devices need to override
-+ * this default behavior, pxa3xx_mfp_set_pull() can be invoked with one of
-+ * the following definition as the parameter.
-+ *
-+ * Definition pull_sel pullup_en pulldown_en
-+ * MFP_PULL_HIGH 1 1 0
-+ * MFP_PULL_LOW 1 0 1
-+ * MFP_PULL_BOTH 1 1 1
-+ * MFP_PULL_NONE 1 0 0
-+ * MFP_PULL_DEFAULT 0 X X
-+ *
-+ * NOTE: pxa3xx_mfp_set_pull() will modify the PULLUP_EN and PULLDOWN_EN
-+ * bits, which will cause potential conflicts with the low power mode
-+ * setting, device drivers should take care of this
-+ */
-+#define MFP_PULL_BOTH (0x7u)
-+#define MFP_PULL_HIGH (0x6u)
-+#define MFP_PULL_LOW (0x5u)
-+#define MFP_PULL_NONE (0x4u)
-+#define MFP_PULL_DEFAULT (0x0u)
-+
-+#define MFP_AF0 (0)
-+#define MFP_AF1 (1)
-+#define MFP_AF2 (2)
-+#define MFP_AF3 (3)
-+#define MFP_AF4 (4)
-+#define MFP_AF5 (5)
-+#define MFP_AF6 (6)
-+#define MFP_AF7 (7)
-+
-+#define MFP_DS01X (0)
-+#define MFP_DS02X (1)
-+#define MFP_DS03X (2)
-+#define MFP_DS04X (3)
-+#define MFP_DS06X (4)
-+#define MFP_DS08X (5)
-+#define MFP_DS10X (6)
-+#define MFP_DS12X (7)
-+
-+#define MFP_EDGE_BOTH 0x3
-+#define MFP_EDGE_RISE 0x2
-+#define MFP_EDGE_FALL 0x1
-+#define MFP_EDGE_NONE 0x0
-+
-+#define MFPR_AF_MASK 0x0007
-+#define MFPR_DRV_MASK 0x1c00
-+#define MFPR_RDH_MASK 0x0200
-+#define MFPR_LPM_MASK 0xe180
-+#define MFPR_PULL_MASK 0xe000
-+#define MFPR_EDGE_MASK 0x0070
-+
-+#define MFPR_ALT_OFFSET 0
-+#define MFPR_ERE_OFFSET 4
-+#define MFPR_EFE_OFFSET 5
-+#define MFPR_EC_OFFSET 6
-+#define MFPR_SON_OFFSET 7
-+#define MFPR_SD_OFFSET 8
-+#define MFPR_SS_OFFSET 9
-+#define MFPR_DRV_OFFSET 10
-+#define MFPR_PD_OFFSET 13
-+#define MFPR_PU_OFFSET 14
-+#define MFPR_PS_OFFSET 15
-+
-+#define MFPR(af, drv, rdh, lpm, edge) \
-+ (((af) & 0x7) | (((drv) & 0x7) << 10) |\
-+ (((rdh) & 0x1) << 9) |\
-+ (((lpm) & 0x3) << 7) |\
-+ (((lpm) & 0x4) << 12)|\
-+ (((lpm) & 0x8) << 10)|\
-+ ((!(edge)) << 6) |\
-+ (((edge) & 0x1) << 5) |\
-+ (((edge) & 0x2) << 3))
-+
-+/*
-+ * a possible MFP configuration is represented by a 32-bit integer
-+ * bit 0..15 - MFPR value (16-bit)
-+ * bit 16..31 - mfp pin index (used to obtain the MFPR offset)
-+ *
-+ * to facilitate the definition, the following macros are provided
-+ *
-+ * MFPR_DEFAULT - default MFPR value, with
-+ * alternate function = 0,
-+ * drive strength = fast 1mA (MFP_DS01X)
-+ * low power mode = default
-+ * release dalay hold = false (RDH bit)
-+ * edge detection = none
-+ *
-+ * MFP_CFG - default MFPR value with alternate function
-+ * MFP_CFG_DRV - default MFPR value with alternate function and
-+ * pin drive strength
-+ * MFP_CFG_LPM - default MFPR value with alternate function and
-+ * low power mode
-+ * MFP_CFG_X - default MFPR value with alternate function,
-+ * pin drive strength and low power mode
-+ *
-+ * use
-+ *
-+ * MFP_CFG_PIN - to get the MFP pin index
-+ * MFP_CFG_VAL - to get the corresponding MFPR value
-+ */
-+
-+typedef uint32_t mfp_cfg_t;
-+
-+#define MFP_CFG_PIN(mfp_cfg) (((mfp_cfg) >> 16) & 0xffff)
-+#define MFP_CFG_VAL(mfp_cfg) ((mfp_cfg) & 0xffff)
-+
-+#define MFPR_DEFAULT (0x0000)
-+
-+#define MFP_CFG(pin, af) \
-+ ((MFP_PIN_##pin << 16) | MFPR_DEFAULT | (MFP_##af))
-+
-+#define MFP_CFG_DRV(pin, af, drv) \
-+ ((MFP_PIN_##pin << 16) | MFPR_DEFAULT |\
-+ ((MFP_##drv) << 10) | (MFP_##af))
-+
-+#define MFP_CFG_LPM(pin, af, lpm) \
-+ ((MFP_PIN_##pin << 16) | MFPR_DEFAULT | (MFP_##af) |\
-+ (((MFP_LPM_##lpm) & 0x3) << 7) |\
-+ (((MFP_LPM_##lpm) & 0x4) << 12) |\
-+ (((MFP_LPM_##lpm) & 0x8) << 10))
-+
-+#define MFP_CFG_X(pin, af, drv, lpm) \
-+ ((MFP_PIN_##pin << 16) | MFPR_DEFAULT |\
-+ ((MFP_##drv) << 10) | (MFP_##af) |\
-+ (((MFP_LPM_##lpm) & 0x3) << 7) |\
-+ (((MFP_LPM_##lpm) & 0x4) << 12) |\
-+ (((MFP_LPM_##lpm) & 0x8) << 10))
-+
-+/* common MFP configurations - processor specific ones defined
-+ * in mfp-pxa3xx.h
-+ */
-+#define GPIO0_GPIO MFP_CFG(GPIO0, AF0)
-+#define GPIO1_GPIO MFP_CFG(GPIO1, AF0)
-+#define GPIO2_GPIO MFP_CFG(GPIO2, AF0)
-+#define GPIO3_GPIO MFP_CFG(GPIO3, AF0)
-+#define GPIO4_GPIO MFP_CFG(GPIO4, AF0)
-+#define GPIO5_GPIO MFP_CFG(GPIO5, AF0)
-+#define GPIO6_GPIO MFP_CFG(GPIO6, AF0)
-+#define GPIO7_GPIO MFP_CFG(GPIO7, AF0)
-+#define GPIO8_GPIO MFP_CFG(GPIO8, AF0)
-+#define GPIO9_GPIO MFP_CFG(GPIO9, AF0)
-+#define GPIO10_GPIO MFP_CFG(GPIO10, AF0)
-+#define GPIO11_GPIO MFP_CFG(GPIO11, AF0)
-+#define GPIO12_GPIO MFP_CFG(GPIO12, AF0)
-+#define GPIO13_GPIO MFP_CFG(GPIO13, AF0)
-+#define GPIO14_GPIO MFP_CFG(GPIO14, AF0)
-+#define GPIO15_GPIO MFP_CFG(GPIO15, AF0)
-+#define GPIO16_GPIO MFP_CFG(GPIO16, AF0)
-+#define GPIO17_GPIO MFP_CFG(GPIO17, AF0)
-+#define GPIO18_GPIO MFP_CFG(GPIO18, AF0)
-+#define GPIO19_GPIO MFP_CFG(GPIO19, AF0)
-+#define GPIO20_GPIO MFP_CFG(GPIO20, AF0)
-+#define GPIO21_GPIO MFP_CFG(GPIO21, AF0)
-+#define GPIO22_GPIO MFP_CFG(GPIO22, AF0)
-+#define GPIO23_GPIO MFP_CFG(GPIO23, AF0)
-+#define GPIO24_GPIO MFP_CFG(GPIO24, AF0)
-+#define GPIO25_GPIO MFP_CFG(GPIO25, AF0)
-+#define GPIO26_GPIO MFP_CFG(GPIO26, AF0)
-+#define GPIO27_GPIO MFP_CFG(GPIO27, AF0)
-+#define GPIO28_GPIO MFP_CFG(GPIO28, AF0)
-+#define GPIO29_GPIO MFP_CFG(GPIO29, AF0)
-+#define GPIO30_GPIO MFP_CFG(GPIO30, AF0)
-+#define GPIO31_GPIO MFP_CFG(GPIO31, AF0)
-+#define GPIO32_GPIO MFP_CFG(GPIO32, AF0)
-+#define GPIO33_GPIO MFP_CFG(GPIO33, AF0)
-+#define GPIO34_GPIO MFP_CFG(GPIO34, AF0)
-+#define GPIO35_GPIO MFP_CFG(GPIO35, AF0)
-+#define GPIO36_GPIO MFP_CFG(GPIO36, AF0)
-+#define GPIO37_GPIO MFP_CFG(GPIO37, AF0)
-+#define GPIO38_GPIO MFP_CFG(GPIO38, AF0)
-+#define GPIO39_GPIO MFP_CFG(GPIO39, AF0)
-+#define GPIO40_GPIO MFP_CFG(GPIO40, AF0)
-+#define GPIO41_GPIO MFP_CFG(GPIO41, AF0)
-+#define GPIO42_GPIO MFP_CFG(GPIO42, AF0)
-+#define GPIO43_GPIO MFP_CFG(GPIO43, AF0)
-+#define GPIO44_GPIO MFP_CFG(GPIO44, AF0)
-+#define GPIO45_GPIO MFP_CFG(GPIO45, AF0)
-+
-+#define GPIO47_GPIO MFP_CFG(GPIO47, AF0)
-+#define GPIO48_GPIO MFP_CFG(GPIO48, AF0)
-+
-+#define GPIO53_GPIO MFP_CFG(GPIO53, AF0)
-+#define GPIO54_GPIO MFP_CFG(GPIO54, AF0)
-+#define GPIO55_GPIO MFP_CFG(GPIO55, AF0)
-+
-+#define GPIO57_GPIO MFP_CFG(GPIO57, AF0)
-+
-+#define GPIO63_GPIO MFP_CFG(GPIO63, AF0)
-+#define GPIO64_GPIO MFP_CFG(GPIO64, AF0)
-+#define GPIO65_GPIO MFP_CFG(GPIO65, AF0)
-+#define GPIO66_GPIO MFP_CFG(GPIO66, AF0)
-+#define GPIO67_GPIO MFP_CFG(GPIO67, AF0)
-+#define GPIO68_GPIO MFP_CFG(GPIO68, AF0)
-+#define GPIO69_GPIO MFP_CFG(GPIO69, AF0)
-+#define GPIO70_GPIO MFP_CFG(GPIO70, AF0)
-+#define GPIO71_GPIO MFP_CFG(GPIO71, AF0)
-+#define GPIO72_GPIO MFP_CFG(GPIO72, AF0)
-+#define GPIO73_GPIO MFP_CFG(GPIO73, AF0)
-+#define GPIO74_GPIO MFP_CFG(GPIO74, AF0)
-+#define GPIO75_GPIO MFP_CFG(GPIO75, AF0)
-+#define GPIO76_GPIO MFP_CFG(GPIO76, AF0)
-+#define GPIO77_GPIO MFP_CFG(GPIO77, AF0)
-+#define GPIO78_GPIO MFP_CFG(GPIO78, AF0)
-+#define GPIO79_GPIO MFP_CFG(GPIO79, AF0)
-+#define GPIO80_GPIO MFP_CFG(GPIO80, AF0)
-+#define GPIO81_GPIO MFP_CFG(GPIO81, AF0)
-+#define GPIO82_GPIO MFP_CFG(GPIO82, AF0)
-+#define GPIO83_GPIO MFP_CFG(GPIO83, AF0)
-+#define GPIO84_GPIO MFP_CFG(GPIO84, AF0)
-+#define GPIO85_GPIO MFP_CFG(GPIO85, AF0)
-+#define GPIO86_GPIO MFP_CFG(GPIO86, AF0)
-+#define GPIO87_GPIO MFP_CFG(GPIO87, AF0)
-+#define GPIO88_GPIO MFP_CFG(GPIO88, AF0)
-+#define GPIO89_GPIO MFP_CFG(GPIO89, AF0)
-+#define GPIO90_GPIO MFP_CFG(GPIO90, AF0)
-+#define GPIO91_GPIO MFP_CFG(GPIO91, AF0)
-+#define GPIO92_GPIO MFP_CFG(GPIO92, AF0)
-+#define GPIO93_GPIO MFP_CFG(GPIO93, AF0)
-+#define GPIO94_GPIO MFP_CFG(GPIO94, AF0)
-+#define GPIO95_GPIO MFP_CFG(GPIO95, AF0)
-+#define GPIO96_GPIO MFP_CFG(GPIO96, AF0)
-+#define GPIO97_GPIO MFP_CFG(GPIO97, AF0)
-+#define GPIO98_GPIO MFP_CFG(GPIO98, AF0)
-+#define GPIO99_GPIO MFP_CFG(GPIO99, AF0)
-+#define GPIO100_GPIO MFP_CFG(GPIO100, AF0)
-+#define GPIO101_GPIO MFP_CFG(GPIO101, AF0)
-+#define GPIO102_GPIO MFP_CFG(GPIO102, AF0)
-+#define GPIO103_GPIO MFP_CFG(GPIO103, AF0)
-+#define GPIO104_GPIO MFP_CFG(GPIO104, AF0)
-+#define GPIO105_GPIO MFP_CFG(GPIO105, AF0)
-+#define GPIO106_GPIO MFP_CFG(GPIO106, AF0)
-+#define GPIO107_GPIO MFP_CFG(GPIO107, AF0)
-+#define GPIO108_GPIO MFP_CFG(GPIO108, AF0)
-+#define GPIO109_GPIO MFP_CFG(GPIO109, AF0)
-+#define GPIO110_GPIO MFP_CFG(GPIO110, AF0)
-+#define GPIO111_GPIO MFP_CFG(GPIO111, AF0)
-+#define GPIO112_GPIO MFP_CFG(GPIO112, AF0)
-+#define GPIO113_GPIO MFP_CFG(GPIO113, AF0)
-+#define GPIO114_GPIO MFP_CFG(GPIO114, AF0)
-+#define GPIO115_GPIO MFP_CFG(GPIO115, AF0)
-+#define GPIO116_GPIO MFP_CFG(GPIO116, AF0)
-+#define GPIO117_GPIO MFP_CFG(GPIO117, AF0)
-+#define GPIO118_GPIO MFP_CFG(GPIO118, AF0)
-+#define GPIO119_GPIO MFP_CFG(GPIO119, AF0)
-+#define GPIO120_GPIO MFP_CFG(GPIO120, AF0)
-+#define GPIO121_GPIO MFP_CFG(GPIO121, AF0)
-+#define GPIO122_GPIO MFP_CFG(GPIO122, AF0)
-+#define GPIO123_GPIO MFP_CFG(GPIO123, AF0)
-+#define GPIO124_GPIO MFP_CFG(GPIO124, AF0)
-+#define GPIO125_GPIO MFP_CFG(GPIO125, AF0)
-+#define GPIO126_GPIO MFP_CFG(GPIO126, AF0)
-+#define GPIO127_GPIO MFP_CFG(GPIO127, AF0)
-+
-+#define GPIO0_2_GPIO MFP_CFG(GPIO0_2, AF0)
-+#define GPIO1_2_GPIO MFP_CFG(GPIO1_2, AF0)
-+#define GPIO2_2_GPIO MFP_CFG(GPIO2_2, AF0)
-+#define GPIO3_2_GPIO MFP_CFG(GPIO3_2, AF0)
-+#define GPIO4_2_GPIO MFP_CFG(GPIO4_2, AF0)
-+#define GPIO5_2_GPIO MFP_CFG(GPIO5_2, AF0)
-+#define GPIO6_2_GPIO MFP_CFG(GPIO6_2, AF0)
-+
-+/*
-+ * each MFP pin will have a MFPR register, since the offset of the
-+ * register varies between processors, the processor specific code
-+ * should initialize the pin offsets by pxa3xx_mfp_init_addr()
-+ *
-+ * pxa3xx_mfp_init_addr - accepts a table of "pxa3xx_mfp_addr_map"
-+ * structure, which represents a range of MFP pins from "start" to
-+ * "end", with the offset begining at "offset", to define a single
-+ * pin, let "end" = -1
-+ *
-+ * use
-+ *
-+ * MFP_ADDR_X() to define a range of pins
-+ * MFP_ADDR() to define a single pin
-+ * MFP_ADDR_END to signal the end of pin offset definitions
-+ */
-+struct pxa3xx_mfp_addr_map {
-+ unsigned int start;
-+ unsigned int end;
-+ unsigned long offset;
-+};
-+
-+#define MFP_ADDR_X(start, end, offset) \
-+ { MFP_PIN_##start, MFP_PIN_##end, offset }
-+
-+#define MFP_ADDR(pin, offset) \
-+ { MFP_PIN_##pin, -1, offset }
-+
-+#define MFP_ADDR_END { MFP_PIN_INVALID, 0 }
-+
-+struct pxa3xx_mfp_pin {
-+ unsigned long mfpr_off; /* MFPRxx register offset */
-+ unsigned long mfpr_val; /* MFPRxx register value */
-+};
-+
-+/*
-+ * pxa3xx_mfp_read()/pxa3xx_mfp_write() - for direct read/write access
-+ * to the MFPR register
-+ */
-+unsigned long pxa3xx_mfp_read(int mfp);
-+void pxa3xx_mfp_write(int mfp, unsigned long mfpr_val);
-+
-+/*
-+ * pxa3xx_mfp_set_afds - set MFP alternate function and drive strength
-+ * pxa3xx_mfp_set_rdh - set MFP release delay hold on/off
-+ * pxa3xx_mfp_set_lpm - set MFP low power mode state
-+ * pxa3xx_mfp_set_edge - set MFP edge detection in low power mode
-+ *
-+ * use these functions to override/change the default configuration
-+ * done by pxa3xx_mfp_set_config(s)
-+ */
-+void pxa3xx_mfp_set_afds(int mfp, int af, int ds);
-+void pxa3xx_mfp_set_rdh(int mfp, int rdh);
-+void pxa3xx_mfp_set_lpm(int mfp, int lpm);
-+void pxa3xx_mfp_set_edge(int mfp, int edge);
-+
-+/*
-+ * pxa3xx_mfp_config - configure the MFPR registers
-+ *
-+ * used by board specific initialization code
-+ */
-+void pxa3xx_mfp_config(mfp_cfg_t *mfp_cfgs, int num);
-+
-+/*
-+ * pxa3xx_mfp_init_addr() - initialize the mapping between mfp pin
-+ * index and MFPR register offset
-+ *
-+ * used by processor specific code
-+ */
-+void __init pxa3xx_mfp_init_addr(struct pxa3xx_mfp_addr_map *);
-+void __init pxa3xx_init_mfp(void);
-+
-+#endif /* __ASM_ARCH_MFP_H */
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h
-+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h
-@@ -1184,7 +1184,7 @@
-
- #define GPIO_bit(x) (1 << ((x) & 0x1f))
-
--#ifdef CONFIG_PXA27x
-+#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
-
- /* Interrupt Controller */
-
---- /dev/null
-+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa3xx-regs.h
-@@ -0,0 +1,75 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/pxa3xx-regs.h
-+ *
-+ * PXA3xx specific register definitions
-+ *
-+ * Copyright (C) 2007 Marvell International Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __ASM_ARCH_PXA3XX_REGS_H
-+#define __ASM_ARCH_PXA3XX_REGS_H
-+
-+/*
-+ * Application Subsystem Clock
-+ */
-+#define ACCR __REG(0x41340000) /* Application Subsystem Clock Configuration Register */
-+#define ACSR __REG(0x41340004) /* Application Subsystem Clock Status Register */
-+#define AICSR __REG(0x41340008) /* Application Subsystem Interrupt Control/Status Register */
-+#define CKENA __REG(0x4134000C) /* A Clock Enable Register */
-+#define CKENB __REG(0x41340010) /* B Clock Enable Register */
-+#define AC97_DIV __REG(0x41340014) /* AC97 clock divisor value register */
-+
-+/*
-+ * Clock Enable Bit
-+ */
-+#define CKEN_LCD 1 /* < LCD Clock Enable */
-+#define CKEN_USBH 2 /* < USB host clock enable */
-+#define CKEN_CAMERA 3 /* < Camera interface clock enable */
-+#define CKEN_NAND 4 /* < NAND Flash Controller Clock Enable */
-+#define CKEN_USB2 6 /* < USB 2.0 client clock enable. */
-+#define CKEN_DMC 8 /* < Dynamic Memory Controller clock enable */
-+#define CKEN_SMC 9 /* < Static Memory Controller clock enable */
-+#define CKEN_ISC 10 /* < Internal SRAM Controller clock enable */
-+#define CKEN_BOOT 11 /* < Boot rom clock enable */
-+#define CKEN_MMC1 12 /* < MMC1 Clock enable */
-+#define CKEN_MMC2 13 /* < MMC2 clock enable */
-+#define CKEN_KEYPAD 14 /* < Keypand Controller Clock Enable */
-+#define CKEN_CIR 15 /* < Consumer IR Clock Enable */
-+#define CKEN_USIM0 17 /* < USIM[0] Clock Enable */
-+#define CKEN_USIM1 18 /* < USIM[1] Clock Enable */
-+#define CKEN_TPM 19 /* < TPM clock enable */
-+#define CKEN_UDC 20 /* < UDC clock enable */
-+#define CKEN_BTUART 21 /* < BTUART clock enable */
-+#define CKEN_FFUART 22 /* < FFUART clock enable */
-+#define CKEN_STUART 23 /* < STUART clock enable */
-+#define CKEN_AC97 24 /* < AC97 clock enable */
-+#define CKEN_TOUCH 25 /* < Touch screen Interface Clock Enable */
-+#define CKEN_SSP1 26 /* < SSP1 clock enable */
-+#define CKEN_SSP2 27 /* < SSP2 clock enable */
-+#define CKEN_SSP3 28 /* < SSP3 clock enable */
-+#define CKEN_SSP4 29 /* < SSP4 clock enable */
-+#define CKEN_MSL0 30 /* < MSL0 clock enable */
-+#define CKEN_PWM0 32 /* < PWM[0] clock enable */
-+#define CKEN_PWM1 33 /* < PWM[1] clock enable */
-+#define CKEN_I2C 36 /* < I2C clock enable */
-+#define CKEN_INTC 38 /* < Interrupt controller clock enable */
-+#define CKEN_GPIO 39 /* < GPIO clock enable */
-+#define CKEN_1WIRE 40 /* < 1-wire clock enable */
-+#define CKEN_HSIO2 41 /* < HSIO2 clock enable */
-+#define CKEN_MINI_IM 48 /* < Mini-IM */
-+#define CKEN_MINI_LCD 49 /* < Mini LCD */
-+
-+#if defined(CONFIG_CPU_PXA310)
-+#define CKEN_MMC3 5 /* < MMC3 Clock Enable */
-+#define CKEN_MVED 43 /* < MVED clock enable */
-+#endif
-+
-+/* Note: GCU clock enable bit differs on PXA300/PXA310 and PXA320 */
-+#define PXA300_CKEN_GRAPHICS 42 /* Graphics controller clock enable */
-+#define PXA320_CKEN_GRAPHICS 7 /* Graphics controller clock enable */
-+
-+#endif /* __ASM_ARCH_PXA3XX_REGS_H */
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/timex.h
-+++ linux-2.6.23/include/asm-arm/arch-pxa/timex.h
-@@ -21,4 +21,6 @@
- #else
- #define CLOCK_TICK_RATE 3250000
- #endif
-+#else
-+#define CLOCK_TICK_RATE 3250000
- #endif
---- /dev/null
-+++ linux-2.6.23/include/asm-arm/arch-pxa/zylonite.h
-@@ -0,0 +1,35 @@
-+#ifndef __ASM_ARCH_ZYLONITE_H
-+#define __ASM_ARCH_ZYLONITE_H
-+
-+#define ZYLONITE_ETH_PHYS 0x14000000
-+
-+/* the following variables are processor specific and initialized
-+ * by the corresponding zylonite_pxa3xx_init()
-+ */
-+extern int gpio_backlight;
-+extern int gpio_eth_irq;
-+
-+extern int lcd_id;
-+extern int lcd_orientation;
-+
-+#ifdef CONFIG_CPU_PXA300
-+extern void zylonite_pxa300_init(void);
-+#else
-+static inline void zylonite_pxa300_init(void)
-+{
-+ if (cpu_is_pxa300() || cpu_is_pxa310())
-+ panic("%s: PXA300/PXA310 not supported\n", __FUNCTION__);
-+}
-+#endif
-+
-+#ifdef CONFIG_CPU_PXA320
-+extern void zylonite_pxa320_init(void);
-+#else
-+static inline void zylonite_pxa320_init(void)
-+{
-+ if (cpu_is_pxa320())
-+ panic("%s: PXA320 not supported\n", __FUNCTION__);
-+}
-+#endif
-+
-+#endif /* __ASM_ARCH_ZYLONITE_H */
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/connectplus-remove-ide-HACK.patch
deleted file mode 100644
index 4414b21191..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/connectplus-remove-ide-HACK.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: linux-2.6.13/drivers/ide/legacy/ide-cs.c
-===================================================================
---- linux-2.6.13.orig/drivers/ide/legacy/ide-cs.c 2005-09-01 22:43:46.000000000 +0100
-+++ linux-2.6.13/drivers/ide/legacy/ide-cs.c 2005-09-01 22:45:46.000000000 +0100
-@@ -488,7 +488,6 @@
- PCMCIA_DEVICE_PROD_ID123("KODAK Picture Card ", "KODAK ", "V100K", 0x94a0d8f3, 0xe4fc3ea0, 0xe5e7eed4),
- PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
- PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
-- PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
- PCMCIA_DEVICE_NULL,
- };
- MODULE_DEVICE_TABLE(pcmcia, ide_ids);
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-akita b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-akita
deleted file mode 100644
index 59ec5c95b7..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-akita
+++ /dev/null
@@ -1,1678 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Tue Oct 16 13:20:27 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_EM_X270 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=m
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=m
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=m
-
-#
-# Kernel Features
-#
-# CONFIG_TICK_ONESHOT is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND_UP_POSSIBLE=y
-CONFIG_SUSPEND=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-# CONFIG_KINGSUN_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_EXT=y
-# CONFIG_MAC80211 is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDEPCI_PCIBUS_ORDER is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-# CONFIG_ATA is not set
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-# CONFIG_DM_MULTIPATH_RDAC is not set
-# CONFIG_DM_DELAY is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_PHYLIB is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-
-#
-# Wireless LAN
-#
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_KEYBOARD_PXA27x is not set
-# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_GPIO is not set
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TINY_USB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-
-#
-# Multi-Function Devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_TUNER_TEA5761 is not set
-CONFIG_V4L_USB_DRIVERS=y
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-# CONFIG_USB_ZR364XX is not set
-CONFIG_RADIO_ADAPTERS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=m
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_SPITZ=m
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_WM8750=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-# CONFIG_USB_R8A66597_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-# CONFIG_USB_BERRY_CHARGE is not set
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_M66592 is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=y
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_SYSFS is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-# CONFIG_SUNRPC_BIND34 is not set
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_DETECT_SOFTLOCKUP is not set
-CONFIG_SCHED_DEBUG=y
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_HW=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-bootcdx86 b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-bootcdx86
deleted file mode 100644
index 833f72ac9e..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-bootcdx86
+++ /dev/null
@@ -1,1607 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.21
-# Mon Jun 11 12:01:43 2007
-#
-CONFIG_X86_32=y
-CONFIG_GENERIC_TIME=y
-CONFIG_CLOCKSOURCE_WATCHDOG=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_SEMAPHORE_SLEEPERS=y
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_ZONE_DMA=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_DMI=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_CPUSETS is not set
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-CONFIG_IOSCHED_CFQ=y
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_CFQ=y
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
-
-#
-# Processor type and features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_SMP=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_ES7000 is not set
-# CONFIG_PARAVIRT is not set
-# CONFIG_M386 is not set
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-CONFIG_MPENTIUMII=y
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MCORE2 is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-CONFIG_X86_CMPXCHG64=y
-CONFIG_X86_GOOD_APIC=y
-CONFIG_X86_INTEL_USERCOPY=y
-CONFIG_X86_USE_PPRO_CHECKSUM=y
-CONFIG_X86_TSC=y
-CONFIG_HPET_TIMER=y
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_NONFATAL=y
-CONFIG_X86_MCE_P4THERMAL=y
-CONFIG_VM86=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_3G_OPT is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_1G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-CONFIG_IRQBALANCE=y
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_HZ_300 is not set
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=250
-# CONFIG_KEXEC is not set
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_RELOCATABLE is not set
-CONFIG_PHYSICAL_ALIGN=0x100000
-# CONFIG_HOTPLUG_CPU is not set
-# CONFIG_COMPAT_VDSO is not set
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_PROCFS=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_FAN=y
-# CONFIG_ACPI_DOCK is not set
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_ASUS is not set
-# CONFIG_ACPI_IBM is not set
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-CONFIG_PCIEPORTBUS=y
-CONFIG_PCIEAER=y
-CONFIG_PCI_MSI=y
-CONFIG_HT_IRQ=y
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-CONFIG_K8_NB=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=65536
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# Misc devices
-#
-# CONFIG_IBM_ASM is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_TIFM_CORE is not set
-# CONFIG_SONY_LAPTOP is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA 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_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_SEAGATE is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_SRP is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Macintosh device drivers
-#
-# CONFIG_MAC_EMUMOUSEBTN is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-CONFIG_NET_VENDOR_3COM=y
-# CONFIG_EL1 is not set
-# CONFIG_EL2 is not set
-# CONFIG_ELPLUS is not set
-# CONFIG_EL16 is not set
-# CONFIG_EL3 is not set
-# CONFIG_3C515 is not set
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-CONFIG_LANCE=m
-CONFIG_NET_VENDOR_SMC=y
-CONFIG_WD80x3=m
-CONFIG_ULTRA=m
-CONFIG_SMC9194=m
-# CONFIG_NET_VENDOR_RACAL is not set
-
-#
-# Tulip family network device support
-#
-CONFIG_NET_TULIP=y
-# CONFIG_DE2104X is not set
-CONFIG_TULIP=m
-CONFIG_TULIP_MWI=y
-CONFIG_TULIP_MMIO=y
-CONFIG_TULIP_NAPI=y
-CONFIG_TULIP_NAPI_HW_MITIGATION=y
-CONFIG_DE4X5=m
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_ULI526X=m
-CONFIG_AT1700=m
-CONFIG_DEPCA=m
-CONFIG_HP100=m
-CONFIG_NET_ISA=y
-# CONFIG_E2100 is not set
-# CONFIG_EWRK3 is not set
-# CONFIG_EEXPRESS is not set
-# CONFIG_EEXPRESS_PRO is not set
-# CONFIG_HPLAN_PLUS is not set
-# CONFIG_HPLAN is not set
-# CONFIG_LP486E is not set
-# CONFIG_ETH16I is not set
-CONFIG_NE2000=y
-# CONFIG_ZNET is not set
-# CONFIG_SEEQ8005 is not set
-CONFIG_NET_PCI=y
-CONFIG_PCNET32=m
-CONFIG_PCNET32_NAPI=y
-CONFIG_AMD8111_ETH=m
-CONFIG_AMD8111E_NAPI=y
-CONFIG_ADAPTEC_STARFIRE=m
-CONFIG_ADAPTEC_STARFIRE_NAPI=y
-CONFIG_AC3200=m
-CONFIG_APRICOT=m
-CONFIG_B44=m
-CONFIG_FORCEDETH=m
-CONFIG_FORCEDETH_NAPI=y
-CONFIG_CS89x0=m
-CONFIG_DGRS=m
-CONFIG_EEPRO100=m
-CONFIG_E100=m
-CONFIG_FEALNX=m
-CONFIG_NATSEMI=m
-CONFIG_NE2K_PCI=y
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-CONFIG_8139TOO_PIO=y
-CONFIG_8139TOO_TUNE_TWISTER=y
-CONFIG_8139TOO_8129=y
-# CONFIG_8139_OLD_RX_RESET is not set
-CONFIG_SIS900=m
-CONFIG_EPIC100=m
-CONFIG_SUNDANCE=m
-CONFIG_SUNDANCE_MMIO=y
-CONFIG_TLAN=m
-CONFIG_VIA_RHINE=m
-CONFIG_VIA_RHINE_MMIO=y
-CONFIG_VIA_RHINE_NAPI=y
-CONFIG_SC92031=m
-
-#
-# Ethernet (1000 Mbit)
-#
-CONFIG_ACENIC=m
-CONFIG_ACENIC_OMIT_TIGON_I=y
-CONFIG_DL2K=m
-CONFIG_E1000=m
-CONFIG_E1000_NAPI=y
-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
-CONFIG_NS83820=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_R8169=m
-CONFIG_R8169_NAPI=y
-CONFIG_SIS190=m
-CONFIG_SKGE=m
-CONFIG_SKY2=m
-CONFIG_SK98LIN=m
-CONFIG_VIA_VELOCITY=m
-CONFIG_TIGON3=m
-CONFIG_BNX2=m
-CONFIG_QLA3XXX=m
-CONFIG_ATL1=m
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_CHELSIO_T3 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NETXEN_NIC is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-CONFIG_AGP=m
-CONFIG_AGP_ALI=m
-CONFIG_AGP_ATI=m
-CONFIG_AGP_AMD=m
-CONFIG_AGP_AMD64=m
-CONFIG_AGP_INTEL=m
-CONFIG_AGP_NVIDIA=m
-CONFIG_AGP_SIS=m
-CONFIG_AGP_SWORKS=m
-CONFIG_AGP_VIA=m
-CONFIG_AGP_EFFICEON=m
-# CONFIG_DRM is not set
-# CONFIG_DRM_I830 is not set
-# CONFIG_DRM_I915 is not set
-# CONFIG_MWAVE is not set
-# CONFIG_PC8736x_GPIO is not set
-# CONFIG_NSC_GPIO is not set
-# CONFIG_CS5535_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
-# CONFIG_FB_VESA_STD is not set
-CONFIG_FB_VESA_TNG=y
-CONFIG_FB_VESA_DEFAULT_MODE="640x480-16@60"
-CONFIG_VIDEO_SELECT=y
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_I810 is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_S3 is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_CYBLA is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ISA devices
-#
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB 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_MIRO is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_WAVEFRONT is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5535AUDIO is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGODJ 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_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR 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_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-CONFIG_SND_AC97_POWER_SAVE=y
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_USX2Y is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=y
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-CONFIG_USB_SUSPEND=y
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_SPLIT_ISO=y
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-# CONFIG_USB_EHCI_BIG_ENDIAN_MMIO is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-# CONFIG_USB_GTCO is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_MON is not set
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-# CONFIG_EDAC is not set
-
-#
-# Real Time Clock
-#
-# CONFIG_RTC_CLASS is not set
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# Auxiliary Display support
-#
-
-#
-# Virtualization
-#
-# CONFIG_KVM is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf-8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
-# CONFIG_KPROBES is not set
-
-#
-# Kernel hacking
-#
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=15
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_EARLY_PRINTK=y
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-CONFIG_DOUBLEFAULT=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_TWOFISH_586 is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_AES_586 is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-CONFIG_CRYPTO_DEV_PADLOCK=m
-CONFIG_CRYPTO_DEV_PADLOCK_AES=m
-CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
-CONFIG_CRYPTO_DEV_GEODE=m
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_AUDIT_GENERIC=y
-# CONFIG_LZO is not set
-CONFIG_ZLIB_INFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_KTIME_SCALAR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-c7x0 b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-c7x0
deleted file mode 100644
index bd11500398..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-c7x0
+++ /dev/null
@@ -1,1695 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Tue Oct 16 12:02:32 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_EM_X270 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-CONFIG_MACH_CORGI=y
-CONFIG_MACH_SHEPHERD=y
-CONFIG_MACH_HUSKY=y
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-CONFIG_PXA_SHARP_C7xx=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=m
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=m
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=m
-
-#
-# Kernel Features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_PREEMPT=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable quiet"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND_UP_POSSIBLE=y
-CONFIG_SUSPEND=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-# CONFIG_KINGSUN_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_EXT=y
-# CONFIG_MAC80211 is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDEPCI_PCIBUS_ORDER is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-# CONFIG_ATA is not set
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-# CONFIG_DM_MULTIPATH_RDAC is not set
-# CONFIG_DM_DELAY is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_PHYLIB is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-
-#
-# Wireless LAN
-#
-# CONFIG_WLAN_PRE80211 is not set
-CONFIG_WLAN_80211=y
-# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_LIBERTAS is not set
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_KEYBOARD_CORGI=y
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_GPIO is not set
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TINY_USB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-
-#
-# Multi-Function Devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_CORGI=y
-# CONFIG_LEDS_TOSA is not set
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_TUNER_TEA5761 is not set
-CONFIG_V4L_USB_DRIVERS=y
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-CONFIG_VIDEO_USBVIDEO=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-# CONFIG_USB_ZR364XX is not set
-CONFIG_RADIO_ADAPTERS=y
-CONFIG_USB_DSBR=m
-# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MBX is not set
-CONFIG_FB_W100=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=m
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_CORGI=m
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_WM8731=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-# CONFIG_USB_R8A66597_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-# CONFIG_USB_BERRY_CHARGE is not set
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_M66592 is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=y
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_SYSFS is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-# CONFIG_SUNRPC_BIND34 is not set
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_SCHED_DEBUG=y
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_HW=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-collie b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-collie
deleted file mode 100644
index 49d9596b92..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-collie
+++ /dev/null
@@ -1,1741 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20.4
-# Fri Apr 6 23:20:59 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-# CONFIG_ELF_CORE is not set
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_COLLIE=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-CONFIG_PCMCIA_SA1100=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-CONFIG_NODES_SHIFT=2
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_USB_IRDA=m
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_SA1100_FIR=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-CONFIG_MTD_OBSOLETE_CHIPS=y
-CONFIG_MTD_SHARP=y
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SA1100=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_ARLAN is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-# CONFIG_SPI_BITBANG is not set
-CONFIG_SPI_LOCOMO=m
-
-#
-# SPI Protocol Masters
-#
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_MCP=y
-CONFIG_MCP_SA11X0=y
-CONFIG_MCP_UCB1200=y
-CONFIG_MCP_UCB1200_TS=m
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=m
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK 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_USB_DSBR is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-CONFIG_FB_SA1100=y
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-CONFIG_USB_NET_CDC_SUBSET=m
-# CONFIG_USB_ALI_M5632 is not set
-# CONFIG_USB_AN2720 is not set
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_EPSON2888 is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-CONFIG_MMC_DEBUG=y
-CONFIG_MMC_BLOCK=m
-# CONFIG_MMC_TIFM_SD is not set
-CONFIG_MMC_SPI=m
-CONFIG_MMC_UNSAFE_RESUME=y
-
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=m
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=m
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=m
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-htcuniversal b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-htcuniversal
deleted file mode 100644
index 2b02621499..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-htcuniversal
+++ /dev/null
@@ -1,1281 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Wed Sep 26 17:55:32 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=16
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-# CONFIG_UID16 is not set
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_EM_X270 is not set
-# CONFIG_MACH_HX2750 is not set
-CONFIG_MACH_HTCUNIVERSAL=y
-
-#
-# HTC Universal support
-#
-CONFIG_HTCUNIVERSAL_CORE=y
-CONFIG_HTCUNIVERSAL_UDC=y
-CONFIG_HTCUNIVERSAL_POWER=y
-CONFIG_HTCUNIVERSAL_BACKLIGHT=y
-CONFIG_HTCUNIVERSAL_LCD=y
-CONFIG_HTCUNIVERSAL_TS2=y
-CONFIG_HTCUNIVERSAL_BUTTONS=y
-CONFIG_HTCUNIVERSAL_BLUETOOTH=m
-CONFIG_HTCUNIVERSAL_ASIC3_LEDS=y
-CONFIG_HTCUNIVERSAL_PHONE=m
-# CONFIG_HTCUNIVERSAL_AK4641 is not set
-CONFIG_PXA27x=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_TICK_ONESHOT is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_SUSPEND is not set
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=y
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=y
-# CONFIG_IRNET is not set
-CONFIG_IRCOMM=y
-CONFIG_IRDA_ULTRA=y
-
-#
-# IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA_DEBUG=y
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=y
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_PXA_FICP=y
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_EXT=y
-# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-CONFIG_MTD_DEBUG=y
-CONFIG_MTD_DEBUG_VERBOSE=0
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-# CONFIG_MTD_CHAR is not set
-# CONFIG_MTD_BLKDEVS is not set
-# CONFIG_MTD_BLOCK is not set
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTDRAM_TOTAL_SIZE=4096
-CONFIG_MTDRAM_ERASE_SIZE=128
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-
-#
-# Wireless LAN
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
-CONFIG_ACX=m
-CONFIG_ACX_MEM=y
-# CONFIG_ACX_CS is not set
-CONFIG_ACX_HTCUNIVERSAL=m
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_KEYBOARD_PXA27x=y
-CONFIG_KEYBOARD_GPIO=y
-CONFIG_KEYBOARD_ASIC3=y
-CONFIG_INPUT_MOUSE=y
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_APPLETOUCH is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_MOUSE_GPIO is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=32
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=m
-CONFIG_I2C_BOARDINFO=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_GPIO is not set
-CONFIG_I2C_PXA=m
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-CONFIG_W1=y
-
-#
-# 1-wire Bus Masters
-#
-# CONFIG_W1_MASTER_DS2482 is not set
-CONFIG_W1_MASTER_DS1WM=y
-
-#
-# 1-wire Slaves
-#
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-CONFIG_W1_SLAVE_DS2760=y
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-CONFIG_PDA_POWER=y
-CONFIG_APM_POWER=y
-CONFIG_BATTERY_DS2760=y
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-CONFIG_HTC_ASIC3=y
-CONFIG_HTC_ASIC3_DS1WM=y
-
-#
-# Multi-Function Devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_GPIO is not set
-CONFIG_LEDS_ASIC3=y
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# System on Chip audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# SoC Audio support for SuperH
-#
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_M66592 is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=y
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_ETH=y
-CONFIG_USB_ETH_RNDIS=y
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-# CONFIG_MMC_PXA is not set
-CONFIG_MMC_ASIC3=y
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_DEBUG=y
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=y
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_BIND34 is not set
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-CONFIG_NLS_CODEPAGE_1250=y
-CONFIG_NLS_CODEPAGE_1251=y
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-CONFIG_PRINTK_TIME=y
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_SCHED_DEBUG=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-CONFIG_DEBUG_MUTEXES=y
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-CONFIG_DEBUG_VM=y
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_SHA1=y
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-# CONFIG_CRYPTO_CBC is not set
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=y
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-CONFIG_CRYPTO_HW=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-hx2000 b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-hx2000
deleted file mode 100644
index ee05db4e5a..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-hx2000
+++ /dev/null
@@ -1,1168 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20-rc2
-# Mon Jan 1 01:49:04 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-CONFIG_MACH_HX2750=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SSP=y
-CONFIG_PXA_KEYS=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-CONFIG_PM_DEBUG=y
-# CONFIG_DISABLE_CONSOLE_SUSPEND is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=8192
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-CONFIG_TOUCHSCREEN_TSC2101=y
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multi-Function Devices
-#
-CONFIG_MFD_TSC2101=y
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-# CONFIG_FB_PXA_OVERLAY is not set
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_HX2750=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-# CONFIG_MMC_TIFM_SD is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-# CONFIG_NFS_FS is not set
-# CONFIG_NFSD is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_TIMER_STATS=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_ARC4=m
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_DEFLATE=y
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-CONFIG_CRYPTO_CRC32C=y
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-poodle b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-poodle
deleted file mode 100644
index 387b5e9bff..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-poodle
+++ /dev/null
@@ -1,1659 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Jul 10 23:38:56 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-CONFIG_MACH_POODLE=y
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-CONFIG_PXA_SSP=y
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=y
-# CONFIG_LEDS_TOSA is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_EM28XX is not set
-CONFIG_USB_DSBR=m
-CONFIG_VIDEO_USBVIDEO=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-CONFIG_FONT_MINI_4x6=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-CONFIG_LOGO_OZ240_CLUT224=y
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=m
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8731 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8974 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_MAINSTONE_BASEBAND is not set
-# CONFIG_SND_MAINSTONE_BLUETOOTH is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_POODLE=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-CONFIG_MMC_UNSAFE_RESUME=y
-
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemuarm b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemuarm
deleted file mode 100644
index 35cf3f5b17..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemuarm
+++ /dev/null
@@ -1,1194 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Sat Aug 26 22:45:02 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_VECTORS_BASE=0xffff0000
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-# CONFIG_EMBEDDED is not set
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-# CONFIG_BLK_DEV_IO_TRACE is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-CONFIG_ARCH_VERSATILE=y
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Versatile platform type
-#
-CONFIG_ARCH_VERSATILE_PB=y
-# CONFIG_MACH_VERSATILE_AB is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_ARM926T=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5TJ=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_COPY_V4WB=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
-# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-# CONFIG_KEXEC is not set
-CONFIG_ARM_VIC=y
-CONFIG_ICST307=y
-
-#
-# Bus support
-#
-CONFIG_ARM_AMBA=y
-CONFIG_PCI=y
-# CONFIG_PCI_DEBUG is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_LEDS=y
-CONFIG_LEDS_TIMER=y
-CONFIG_LEDS_CPU=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-CONFIG_VFP=y
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_APM is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_AFS_PARTS=y
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_GEOMETRY is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-# CONFIG_MTD_ROM is not set
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=51200
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-CONFIG_SCSI_SPI_ATTRS=y
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-CONFIG_SCSI_SYM53C8XX_2=y
-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
-CONFIG_SCSI_SYM53C8XX_MMIO=y
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_SMC91X=y
-# CONFIG_DM9000 is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-CONFIG_SERIO_AMBAKMI=y
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_AMBA_PL011=y
-CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_DRM is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-# CONFIG_LEDS_CLASS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-# CONFIG_LEDS_TRIGGERS is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-CONFIG_FB_ARMCLCD=y
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_EHCI_HCD is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_UHCI_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_LD is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=y
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFSD_TCP is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=y
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-# 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_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_ISO8859_1 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_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemux86 b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemux86
deleted file mode 100644
index e9eb83e2dd..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-qemux86
+++ /dev/null
@@ -1,1568 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Oct 16 19:42:42 2006
-#
-CONFIG_X86_32=y
-CONFIG_SEMAPHORE_SLEEPERS=y
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_DMI=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-# CONFIG_IKCONFIG is not set
-# CONFIG_CPUSETS is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_VM86=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_LBD=y
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# Processor type and features
-#
-CONFIG_SMP=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_ES7000 is not set
-CONFIG_M386=y
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_X86_PPRO_FENCE=y
-CONFIG_X86_F00F_BUG=y
-CONFIG_X86_INTEL_USERCOPY=y
-# CONFIG_HPET_TIMER is not set
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_NONFATAL=y
-CONFIG_X86_MCE_P4THERMAL=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-CONFIG_IRQBALANCE=y
-# CONFIG_REGPARM is not set
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=250
-# CONFIG_KEXEC is not set
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_HOTPLUG_CPU is not set
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
-CONFIG_ACPI=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_VIDEO=m
-# CONFIG_ACPI_HOTKEY is not set
-CONFIG_ACPI_FAN=y
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_ASUS is not set
-CONFIG_ACPI_IBM=m
-# CONFIG_ACPI_IBM_DOCK is not set
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-# CONFIG_PCIEPORTBUS is not set
-# CONFIG_PCI_MSI is not set
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=y
-CONFIG_BINFMT_MISC=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=y
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=y
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-CONFIG_PARPORT=y
-CONFIG_PARPORT_PC=y
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_1284 is not set
-
-#
-# Plug and Play support
-#
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-
-#
-# Block devices
-#
-CONFIG_BLK_DEV_FD=y
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=51200
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-CONFIG_BLK_DEV_IDECD=y
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-CONFIG_BLK_DEV_CMD640=y
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
-CONFIG_BLK_DEV_GENERIC=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_RZ1000=y
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-# CONFIG_BLK_DEV_AEC62XX 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_CMD64X is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_CY82C693 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_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-CONFIG_BLK_DEV_PIIX=y
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
-CONFIG_IDEDMA_AUTO=y
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-CONFIG_SCSI_DPT_I2O=m
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-CONFIG_SCSI_SATA=y
-# CONFIG_SCSI_SATA_AHCI is not set
-# CONFIG_SCSI_SATA_SVW is not set
-CONFIG_SCSI_ATA_PIIX=y
-# CONFIG_SCSI_SATA_MV is not set
-# CONFIG_SCSI_SATA_NV is not set
-# CONFIG_SCSI_PDC_ADMA is not set
-# CONFIG_SCSI_SATA_QSTOR is not set
-# CONFIG_SCSI_SATA_PROMISE is not set
-CONFIG_SCSI_SATA_SX4=m
-# CONFIG_SCSI_SATA_SIL is not set
-# CONFIG_SCSI_SATA_SIL24 is not set
-CONFIG_SCSI_SATA_SIS=m
-# CONFIG_SCSI_SATA_ULI is not set
-# CONFIG_SCSI_SATA_VIA is not set
-# CONFIG_SCSI_SATA_VITESSE is not set
-CONFIG_SCSI_SATA_INTEL_COMBINED=y
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA 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_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-CONFIG_SCSI_IPR=m
-# CONFIG_SCSI_IPR_TRACE is not set
-# CONFIG_SCSI_IPR_DUMP is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-CONFIG_IEEE1394=y
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_OUI_DB is not set
-# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
-# CONFIG_IEEE1394_EXPORT_FULL_API is not set
-
-#
-# Device Drivers
-#
-
-#
-# Texas Instruments PCILynx requires I2C
-#
-CONFIG_IEEE1394_OHCI1394=y
-
-#
-# Protocol Drivers
-#
-# CONFIG_IEEE1394_VIDEO1394 is not set
-# CONFIG_IEEE1394_SBP2 is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-# CONFIG_IEEE1394_DV1394 is not set
-CONFIG_IEEE1394_RAWIO=y
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_LANCE is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-CONFIG_NET_ISA=y
-# CONFIG_E2100 is not set
-# CONFIG_EWRK3 is not set
-# CONFIG_EEXPRESS is not set
-# CONFIG_EEXPRESS_PRO is not set
-# CONFIG_HPLAN_PLUS is not set
-# CONFIG_HPLAN is not set
-# CONFIG_LP486E is not set
-# CONFIG_ETH16I is not set
-CONFIG_NE2000=y
-# CONFIG_ZNET is not set
-# CONFIG_SEEQ8005 is not set
-CONFIG_NET_PCI=y
-# CONFIG_PCNET32 is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_AC3200 is not set
-# CONFIG_APRICOT is not set
-# CONFIG_B44 is not set
-# CONFIG_FORCEDETH is not set
-# CONFIG_CS89x0 is not set
-# CONFIG_DGRS is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_E100 is not set
-# CONFIG_FEALNX is not set
-# CONFIG_NATSEMI is not set
-CONFIG_NE2K_PCI=y
-# CONFIG_8139CP is not set
-CONFIG_8139TOO=y
-CONFIG_8139TOO_PIO=y
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_SIS900 is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_TLAN is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_NET_POCKET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_IXGB is not set
-CONFIG_S2IO=m
-# CONFIG_S2IO_NAPI is not set
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-CONFIG_PRINTER=y
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
-# CONFIG_TIPAR is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-CONFIG_AGP=y
-# CONFIG_AGP_ALI is not set
-# CONFIG_AGP_ATI is not set
-# CONFIG_AGP_AMD is not set
-# CONFIG_AGP_AMD64 is not set
-CONFIG_AGP_INTEL=y
-# CONFIG_AGP_NVIDIA is not set
-# CONFIG_AGP_SIS is not set
-# CONFIG_AGP_SWORKS is not set
-# CONFIG_AGP_VIA is not set
-# CONFIG_AGP_EFFICEON is not set
-CONFIG_DRM=y
-# CONFIG_DRM_TDFX is not set
-# CONFIG_DRM_R128 is not set
-# CONFIG_DRM_RADEON is not set
-# CONFIG_DRM_I810 is not set
-# CONFIG_DRM_I830 is not set
-# CONFIG_DRM_I915 is not set
-# CONFIG_DRM_MGA is not set
-# CONFIG_DRM_SIS is not set
-# CONFIG_DRM_VIA is not set
-# CONFIG_DRM_SAVAGE is not set
-# CONFIG_MWAVE is not set
-# CONFIG_CS5535_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-
-#
-# Misc devices
-#
-# CONFIG_IBM_ASM is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
-# CONFIG_FB_VESA_STD is not set
-CONFIG_FB_VESA_TNG=y
-CONFIG_FB_VESA_DEFAULT_MODE="640x480-32@60"
-CONFIG_VIDEO_SELECT=y
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_I810 is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_CYBLA is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=y
-CONFIG_SND_AC97_BUS=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ISA devices
-#
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB 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_MIRO is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_WAVEFRONT is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5535AUDIO 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_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR 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_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_USX2Y is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGETKIT is not set
-CONFIG_USB_PHIDGETSERVO=m
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-# CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-# CONFIG_EDAC is not set
-
-#
-# Real Time Clock
-#
-# CONFIG_RTC_CLASS is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=y
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-CONFIG_UDF_FS=y
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-# CONFIG_NFS_V3 is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=y
-# CONFIG_NFSD_V3 is not set
-CONFIG_NFSD_TCP=y
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
-# CONFIG_KPROBES is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=15
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_UNWIND_INFO is not set
-CONFIG_EARLY_PRINTK=y
-CONFIG_STACK_BACKTRACE_COLS=2
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-CONFIG_DOUBLEFAULT=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_KTIME_SCALAR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-spitz b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-spitz
deleted file mode 100644
index 8e044e6a14..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-spitz
+++ /dev/null
@@ -1,1690 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 22:32:38 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_EM_X270 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-# CONFIG_TICK_ONESHOT is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-# CONFIG_KINGSUN_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_EXT=y
-# CONFIG_MAC80211 is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=m
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=m
-CONFIG_MTD_BLOCK=m
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDEPCI_PCIBUS_ORDER is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-# CONFIG_ATA is not set
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-# CONFIG_DM_MULTIPATH_RDAC is not set
-# CONFIG_DM_DELAY is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_PHYLIB is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NETDEV_10000=y
-
-#
-# Wireless LAN
-#
-CONFIG_WLAN_PRE80211=y
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-CONFIG_WLAN_80211=y
-# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_LIBERTAS is not set
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-CONFIG_AIRO_CS=m
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_KEYBOARD_PXA27x is not set
-# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_GPIO is not set
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TINY_USB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_W1 is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-
-#
-# Multi-Function Devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_TUNER_TEA5761 is not set
-CONFIG_V4L_USB_DRIVERS=y
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-# CONFIG_USB_ZR364XX is not set
-CONFIG_RADIO_ADAPTERS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=m
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_SPITZ=m
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_WM8750=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-# CONFIG_USB_R8A66597_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-# CONFIG_USB_BERRY_CHARGE is not set
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_M66592 is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=y
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=y
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=y
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_SYSFS is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-# CONFIG_SUNRPC_BIND34 is not set
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-# CONFIG_CRYPTO_HW is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_LZO_COMPRESS=m
-CONFIG_LZO_DECOMPRESS=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-tosa b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-tosa
deleted file mode 100644
index 74fc076608..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-tosa
+++ /dev/null
@@ -1,1614 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-rc5-git5
-# Tue Mar 14 09:05:26 2006
-#
-CONFIG_ARM=y
-CONFIG_MMU=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_L7200 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_HX2750 is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-# CONFIG_MACH_CORGI is not set
-# CONFIG_MACH_SHEPHERD is not set
-# CONFIG_MACH_HUSKY is not set
-CONFIG_MACH_TOSA=y
-CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-CONFIG_TOSHIBA_TC6393XB=y
-
-#
-# Bus support
-#
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-# CONFIG_AEABI is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
-CONFIG_CPU_FREQ_GOV_USERSPACE=m
-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_IPV6_TUNNEL=m
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-CONFIG_IP_NF_QUEUE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_TMIO=y
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=y
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-
-#
-# SCSI Transport Attributes
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_CORGI is not set
-# CONFIG_KEYBOARD_SPITZ is not set
-CONFIG_KEYBOARD_TOSA=y
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_CORGI is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-CONFIG_TOUCHSCREEN_WM97XX=y
-# CONFIG_TOUCHSCREEN_WM9705 is not set
-CONFIG_TOUCHSCREEN_WM9712=y
-# CONFIG_TOUCHSCREEN_WM9713 is not set
-# CONFIG_TOUCHSCREEN_WM97XX_PXA is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-
-#
-# Multimedia Capabilities Port drivers
-#
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TOSA=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video For Linux
-#
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_W100 is not set
-CONFIG_FB_TMIO=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CORGI=y
-# CONFIG_BACKLIGHT_HP680 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_BUS=y
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-
-#
-# PCMCIA devices
-#
-
-#
-# SoC audio support
-#
-CONFIG_SND_SOC=y
-
-#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=y
-CONFIG_SND_PXA2xx_SOC_AC97=y
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_TOSA=y
-
-#
-# Soc Codecs
-#
-# CONFIG_SND_SOC_AC97_CODEC is not set
-# CONFIG_SND_SOC_WM8731 is not set
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-CONFIG_SND_SOC_WM9712=y
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-CONFIG_USB_MTOUCH=m
-# CONFIG_USB_ITMTOUCH is not set
-CONFIG_USB_EGALAX=m
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-
-#
-# USB Multimedia devices
-#
-CONFIG_USB_DABUSB=m
-CONFIG_USB_VICAM=m
-CONFIG_USB_DSBR=m
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_IBMCAM=m
-CONFIG_USB_KONICAWC=m
-CONFIG_USB_OV511=m
-CONFIG_USB_SE401=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_STV680=m
-# CONFIG_USB_PWC is not set
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_NET1080=m
-CONFIG_USB_NET_PLUSB=m
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_LED=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_PXA2XX_SMALL is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_VM is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_GENERIC_ALLOCATOR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-zylonite b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-zylonite
deleted file mode 100644
index 0321704a1f..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/defconfig-zylonite
+++ /dev/null
@@ -1,1457 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Sep 25 15:57:10 2007
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-# CONFIG_EMBEDDED is not set
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_CFQ=y
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx/PXA3xx Implementations
-#
-
-#
-# Supported PXA3xx Processor Variants
-#
-CONFIG_CPU_PXA300=y
-CONFIG_CPU_PXA310=y
-CONFIG_CPU_PXA320=y
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-# CONFIG_PXA_SHARPSL is not set
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_EM_X270 is not set
-CONFIG_MACH_ZYLONITE=y
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-CONFIG_PXA3xx=y
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSC3=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-CONFIG_IO_36=y
-
-#
-# Processor Features
-#
-# CONFIG_ARM_THUMB is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_BPREDICT_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-# CONFIG_TICK_ONESHOT is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-# CONFIG_PREEMPT is not set
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-CONFIG_RESOURCES_64BIT=y
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,38400 root=/dev/mtdblock2 rootfstype=jffs2 mem=64M dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-# CONFIG_PM is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_PACKET is not set
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=y
-
-#
-# IrDA protocols
-#
-# CONFIG_IRLAN is not set
-# CONFIG_IRCOMM is not set
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-# CONFIG_KINGSUN_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-# CONFIG_PXA_FICP is not set
-# CONFIG_MCS_FIR is not set
-# CONFIG_BT is not set
-# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
-# CONFIG_CFG80211 is not set
-# CONFIG_WIRELESS_EXT is not set
-# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-# CONFIG_STANDALONE is not set
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-CONFIG_MTD_CFI=y
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_GEN_PROBE=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_XIP is not set
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_SHARP_SL is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_SHARPSL is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=4096
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDEPCI_PCIBUS_ORDER is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_PHYLIB is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_AX88796 is not set
-CONFIG_SMC91X=y
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NETDEV_10000=y
-
-#
-# Wireless LAN
-#
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
-CONFIG_USB_USBNET=y
-# CONFIG_USB_NET_AX8817X is not set
-CONFIG_USB_NET_CDCETHER=y
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-# CONFIG_USB_NET_NET1080 is not set
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-CONFIG_USB_NET_CDC_SUBSET=y
-# CONFIG_USB_ALI_M5632 is not set
-# CONFIG_USB_AN2720 is not set
-# CONFIG_USB_BELKIN is not set
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_EPSON2888 is not set
-# CONFIG_USB_KC2190 is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_WAN is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_TSDEV=y
-CONFIG_INPUT_TSDEV_SCREEN_X=240
-CONFIG_INPUT_TSDEV_SCREEN_Y=320
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_CHARDEV=y
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_GPIO is not set
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TINY_USB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-CONFIG_W1=y
-
-#
-# 1-wire Bus Masters
-#
-# CONFIG_W1_MASTER_DS2490 is not set
-# CONFIG_W1_MASTER_DS2482 is not set
-# CONFIG_W1_MASTER_DS1WM is not set
-
-#
-# 1-wire Slaves
-#
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-# CONFIG_W1_SLAVE_DS2760 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-
-#
-# Multi-Function Devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=y
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_TUNER_TEA5761 is not set
-CONFIG_V4L_USB_DRIVERS=y
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-# CONFIG_USB_ZR364XX is not set
-CONFIG_RADIO_ADAPTERS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-CONFIG_FB=y
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_LCD_QVGA is not set
-CONFIG_FB_PXA_LCD_VGA=y
-CONFIG_FB_PXA_OVERLAY=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-# CONFIG_LOGO_OZ240_CLUT224 is not set
-# CONFIG_LOGO_OZ480_CLUT224 is not set
-# CONFIG_LOGO_OZ640_CLUT224 is not set
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-# CONFIG_SND_PXA2XX_AC97 is not set
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# SoC Audio support for SuperH
-#
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-# CONFIG_USB_DEVICEFS is not set
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_R8A66597_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=y
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_ONETOUCH is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-CONFIG_USB_GADGET_M66592=y
-CONFIG_USB_M66592=y
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-CONFIG_USB_GADGET_DUALSPEED=y
-# CONFIG_USB_ZERO is not set
-# CONFIG_USB_ETH is not set
-# CONFIG_USB_GADGETFS is not set
-CONFIG_USB_FILE_STORAGE=y
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=y
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_SYSFS is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-# CONFIG_ROOT_NFS is not set
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-# CONFIG_SUNRPC_BIND34 is not set
-CONFIG_RPCSEC_GSS_KRB5=y
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-# CONFIG_OPROFILE is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-CONFIG_DEBUG_FS=y
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_SCHED_DEBUG=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-CONFIG_FORCED_INLINING=y
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_ERRORS=y
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_ICEDCC is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_MANAGER=y
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-CONFIG_CRYPTO_MD5=y
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=y
-CONFIG_CRYPTO_CBC=y
-CONFIG_CRYPTO_PCBC=y
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=y
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-CONFIG_CRYPTO_HW=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/hostap-monitor-mode.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/hostap-monitor-mode.patch
deleted file mode 100644
index 641fd19e50..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/hostap-monitor-mode.patch
+++ /dev/null
@@ -1,209 +0,0 @@
-This is a patch that I've been maintaining for a few years, and I'd
-really like to see it added to the mainstream zaurus kernel so I can
-finally stop distributing my own.
-
-This patch only effects the card while in monitor mode, and does not
-cause any known stability issues.
-
-http://patches.aircrack-ng.org/hostap-kernel-2.6.18.patch
-
-Rick Farina (Zero_Chaos)
-
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:30:18.000000000 -0400
-@@ -69,6 +69,9 @@
- iface = netdev_priv(dev);
- local = iface->local;
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ goto xmit;
-+
- if (skb->len < ETH_HLEN) {
- printk(KERN_DEBUG "%s: hostap_data_start_xmit: short skb "
- "(len=%d)\n", dev->name, skb->len);
-@@ -234,6 +237,7 @@
- memcpy(skb_put(skb, ETH_ALEN), &hdr.addr4, ETH_ALEN);
- }
-
-+xmit:
- iface->stats.tx_packets++;
- iface->stats.tx_bytes += skb->len;
-
-@@ -404,8 +408,6 @@
- }
-
- if (skb->len < 24) {
-- printk(KERN_DEBUG "%s: hostap_master_start_xmit: short skb "
-- "(len=%d)\n", dev->name, skb->len);
- ret = 0;
- iface->stats.tx_dropped++;
- goto fail;
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.orig
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.rej
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:30:18.000000000 -0400
-@@ -1005,6 +1005,35 @@
- return fid;
- }
-
-+static int prism2_monitor_enable(struct net_device *dev)
-+{
-+ if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE, 5)) {
-+ printk(KERN_DEBUG "Port type setting for monitor mode "
-+ "failed\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hfa384x_cmd(dev, HFA384X_CMDCODE_TEST | (0x0a << 8),
-+ 0, NULL, NULL)) {
-+ printk(KERN_DEBUG "Could not enter testmode 0x0a\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
-+ HFA384X_WEPFLAGS_PRIVACYINVOKED |
-+ HFA384X_WEPFLAGS_HOSTENCRYPT |
-+ HFA384X_WEPFLAGS_HOSTDECRYPT)) {
-+ printk(KERN_DEBUG "WEP flags setting failed\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hostap_set_word(dev, HFA384X_RID_PROMISCUOUSMODE, 1)) {
-+ printk(KERN_DEBUG "Could not set promiscuous mode\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ return 0;
-+}
-
- static int prism2_reset_port(struct net_device *dev)
- {
-@@ -1031,6 +1060,10 @@
- "port\n", dev->name);
- }
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ /* force mode 0x0a after port 0 reset */
-+ return prism2_monitor_enable(dev);
-+
- /* It looks like at least some STA firmware versions reset
- * fragmentation threshold back to 2346 after enable command. Restore
- * the configured value, if it differs from this default. */
-@@ -1466,6 +1499,10 @@
- return 1;
- }
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ /* force mode 0x0a after port 0 reset */
-+ prism2_monitor_enable(dev);
-+
- local->hw_ready = 1;
- local->hw_reset_tries = 0;
- local->hw_resetting = 0;
-@@ -3156,6 +3193,7 @@
- local->func->hw_config = prism2_hw_config;
- local->func->hw_reset = prism2_hw_reset;
- local->func->hw_shutdown = prism2_hw_shutdown;
-+ local->func->monitor_enable = prism2_monitor_enable;
- local->func->reset_port = prism2_reset_port;
- local->func->schedule_reset = prism2_schedule_reset;
- #ifdef PRISM2_DOWNLOAD_SUPPORT
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_hw.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:30:18.000000000 -0400
-@@ -1104,33 +1104,7 @@
-
- printk(KERN_DEBUG "Enabling monitor mode\n");
- hostap_monitor_set_type(local);
--
-- if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE,
-- HFA384X_PORTTYPE_PSEUDO_IBSS)) {
-- printk(KERN_DEBUG "Port type setting for monitor mode "
-- "failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- /* Host decrypt is needed to get the IV and ICV fields;
-- * however, monitor mode seems to remove WEP flag from frame
-- * control field */
-- if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
-- HFA384X_WEPFLAGS_HOSTENCRYPT |
-- HFA384X_WEPFLAGS_HOSTDECRYPT)) {
-- printk(KERN_DEBUG "WEP flags setting failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- if (local->func->reset_port(dev) ||
-- local->func->cmd(dev, HFA384X_CMDCODE_TEST |
-- (HFA384X_TEST_MONITOR << 8),
-- 0, NULL, NULL)) {
-- printk(KERN_DEBUG "Setting monitor mode failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- return 0;
-+ return local->func->reset_port(dev);
- }
-
-
-@@ -1199,7 +1173,7 @@
- local->iw_mode = *mode;
-
- if (local->iw_mode == IW_MODE_MONITOR)
-- hostap_monitor_mode_enable(local);
-+ return hostap_monitor_mode_enable(local);
- else if (local->iw_mode == IW_MODE_MASTER && !local->host_encrypt &&
- !local->fw_encrypt_ok) {
- printk(KERN_DEBUG "%s: defaulting to host-based encryption as "
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:30:18.000000000 -0400
-@@ -331,7 +331,7 @@
- if (local->iw_mode == IW_MODE_REPEAT)
- return HFA384X_PORTTYPE_WDS;
- if (local->iw_mode == IW_MODE_MONITOR)
-- return HFA384X_PORTTYPE_PSEUDO_IBSS;
-+ return 5; /*HFA384X_PORTTYPE_PSEUDO_IBSS;*/
- return HFA384X_PORTTYPE_HOSTAP;
- }
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_main.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:30:18.000000000 -0400
-@@ -48,6 +48,8 @@
- { 0x1260, 0x3873, PCI_ANY_ID, PCI_ANY_ID },
- /* Samsung MagicLAN SWL-2210P */
- { 0x167d, 0xa000, PCI_ANY_ID, PCI_ANY_ID },
-+ /* NETGEAR MA311 */
-+ { 0x1385, 0x3872, PCI_ANY_ID, PCI_ANY_ID },
- { 0 }
- };
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_pci.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:30:18.000000000 -0400
-@@ -101,6 +101,7 @@
- { 0xc250, 0x0002 } /* EMTAC A2424i */,
- { 0xd601, 0x0002 } /* Z-Com XI300 */,
- { 0xd601, 0x0005 } /* Zcomax XI-325H 200mW */,
-+ { 0xd601, 0x0010 } /* Zcomax XI-325H 100mW */,
- { 0, 0}
- };
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_plx.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:30:18.000000000 -0400
-@@ -575,6 +575,7 @@
- int (*hw_config)(struct net_device *dev, int initial);
- void (*hw_reset)(struct net_device *dev);
- void (*hw_shutdown)(struct net_device *dev, int no_disable);
-+ int (*monitor_enable)(struct net_device *dev);
- int (*reset_port)(struct net_device *dev);
- void (*schedule_reset)(local_info_t *local);
- int (*download)(local_info_t *local,
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni-acx.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni-acx.patch
deleted file mode 100644
index 769674c935..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni-acx.patch
+++ /dev/null
@@ -1,33526 +0,0 @@
----
- drivers/net/wireless/Kconfig | 31
- drivers/net/wireless/Makefile | 2
- drivers/net/wireless/acx/Kconfig | 113
- drivers/net/wireless/acx/Makefile | 21
- drivers/net/wireless/acx/acx.h | 14
- drivers/net/wireless/acx/acx_config.h | 50
- drivers/net/wireless/acx/acx_func.h | 710 ++
- drivers/net/wireless/acx/acx_hw.h | 18
- drivers/net/wireless/acx/acx_struct.h | 2114 ++++++++
- drivers/net/wireless/acx/common.c | 7388 ++++++++++++++++++++++++++++
- drivers/net/wireless/acx/conv.c | 504 +
- drivers/net/wireless/acx/cs.c | 5703 +++++++++++++++++++++
- drivers/net/wireless/acx/htcsable_acx.c | 118
- drivers/net/wireless/acx/htcuniversal_acx.c | 108
- drivers/net/wireless/acx/hx4700_acx.c | 108
- drivers/net/wireless/acx/ioctl.c | 2748 ++++++++++
- drivers/net/wireless/acx/mem.c | 5363 ++++++++++++++++++++
- drivers/net/wireless/acx/pci.c | 4234 ++++++++++++++++
- drivers/net/wireless/acx/rx3000_acx.c | 110
- drivers/net/wireless/acx/setrate.c | 213
- drivers/net/wireless/acx/usb.c | 1922 +++++++
- drivers/net/wireless/acx/wlan.c | 424 +
- drivers/net/wireless/acx/wlan_compat.h | 260
- drivers/net/wireless/acx/wlan_hdr.h | 497 +
- drivers/net/wireless/acx/wlan_mgmt.h | 582 ++
- 25 files changed, 33355 insertions(+)
-
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_config.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_config.h 2007-08-23 18:46:40.000000000 +0200
-@@ -0,0 +1,50 @@
-+#define ACX_RELEASE "v0.3.36"
-+
-+/*
-+ * Test out all the channels in reg domain 0x10
-+ */
-+#define ACX_ALLOW_ALLCHANNELS
-+
-+/* set to 0 if you don't want any debugging code to be compiled in */
-+/* set to 1 if you want some debugging */
-+/* set to 2 if you want extensive debug log */
-+#define ACX_DEBUG 0
-+
-+/*
-+ * Since we'll be changing channels a lot
-+#define ACX_DEFAULT_MSG (L_ASSOC|L_INIT)
-+*/
-+#define ACX_DEFAULT_MSG (L_ASSOC|L_INIT)
-+
-+/* assume 32bit I/O width
-+ * (16bit is also compatible with Compact Flash) */
-+#define ACX_IO_WIDTH 32
-+
-+/* Set this to 1 if you want monitor mode to use
-+ * phy header. Currently it is not useful anyway since we
-+ * don't know what useful info (if any) is in phy header.
-+ * If you want faster/smaller code, say 0 here */
-+#define WANT_PHY_HDR 0
-+
-+/* whether to do Tx descriptor cleanup in softirq (i.e. not in IRQ
-+ * handler) or not. Note that doing it later does slightly increase
-+ * system load, so still do that stuff in the IRQ handler for now,
-+ * even if that probably means worse latency */
-+#define TX_CLEANUP_IN_SOFTIRQ 0
-+
-+/* if you want very experimental 802.11 power save mode features */
-+#define POWER_SAVE_80211 0
-+
-+/* if you want very early packet fragmentation bits and pieces */
-+#define ACX_FRAGMENTATION 0
-+
-+/* Locking: */
-+/* very talkative */
-+/* #define PARANOID_LOCKING 1 */
-+/* normal (use when bug-free) */
-+#define DO_LOCKING 1
-+/* else locking is disabled! */
-+
-+/* 0 - normal mode */
-+/* 1 - development/debug: probe for IEs on modprobe */
-+#define CMD_DISCOVERY 0
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_func.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_func.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,710 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+
-+/***********************************************************************
-+** LOGGING
-+**
-+** - Avoid SHOUTING needlessly. Avoid excessive verbosity.
-+** Gradually remove messages which are old debugging aids.
-+**
-+** - Use printk() for messages which are to be always logged.
-+** Supply either 'acx:' or '<devname>:' prefix so that user
-+** can figure out who's speaking among other kernel chatter.
-+** acx: is for general issues (e.g. "acx: no firmware image!")
-+** while <devname>: is related to a particular device
-+** (think about multi-card setup). Double check that message
-+** is not confusing to the average user.
-+**
-+** - use printk KERN_xxx level only if message is not a WARNING
-+** but is INFO, ERR etc.
-+**
-+** - Use printk_ratelimited() for messages which may flood
-+** (e.g. "rx DUP pkt!").
-+**
-+** - Use log() for messages which may be omitted (and they
-+** _will_ be omitted in non-debug builds). Note that
-+** message levels may be disabled at compile-time selectively,
-+** thus select them wisely. Example: L_DEBUG is the lowest
-+** (most likely to be compiled out) -> use for less important stuff.
-+**
-+** - Do not print important stuff with log(), or else people
-+** will never build non-debug driver.
-+**
-+** Style:
-+** hex: capital letters, zero filled (e.g. 0x02AC)
-+** str: dont start from capitals, no trailing periods ("tx: queue is stopped")
-+*/
-+#if ACX_DEBUG > 1
-+
-+void log_fn_enter(const char *funcname);
-+void log_fn_exit(const char *funcname);
-+void log_fn_exit_v(const char *funcname, int v);
-+
-+#define FN_ENTER \
-+ do { \
-+ if (unlikely(acx_debug & L_FUNC)) { \
-+ log_fn_enter(__func__); \
-+ } \
-+ } while (0)
-+
-+#define FN_EXIT1(v) \
-+ do { \
-+ if (unlikely(acx_debug & L_FUNC)) { \
-+ log_fn_exit_v(__func__, v); \
-+ } \
-+ } while (0)
-+#define FN_EXIT0 \
-+ do { \
-+ if (unlikely(acx_debug & L_FUNC)) { \
-+ log_fn_exit(__func__); \
-+ } \
-+ } while (0)
-+
-+#else
-+
-+#define FN_ENTER
-+#define FN_EXIT1(v)
-+#define FN_EXIT0
-+
-+#endif /* ACX_DEBUG > 1 */
-+
-+
-+#if ACX_DEBUG
-+
-+#define log(chan, args...) \
-+ do { \
-+ if (acx_debug & (chan)) \
-+ printk(KERN_DEBUG args); \
-+ } while (0)
-+#define printk_ratelimited(args...) printk(args)
-+
-+#else /* Non-debug build: */
-+
-+#define log(chan, args...)
-+/* Standard way of log flood prevention */
-+#define printk_ratelimited(args...) \
-+do { \
-+ if (printk_ratelimit()) \
-+ printk(args); \
-+} while (0)
-+
-+#endif /* ACX_DEBUG */
-+
-+void acx_print_mac(const char *head, const u8 *mac, const char *tail);
-+
-+/* Optimized out to nothing in non-debug build */
-+static inline void
-+acxlog_mac(int level, const char *head, const u8 *mac, const char *tail)
-+{
-+ if (acx_debug & level) {
-+ acx_print_mac(head, mac, tail);
-+ }
-+}
-+
-+
-+/***********************************************************************
-+** MAC address helpers
-+*/
-+static inline void
-+MAC_COPY(u8 *mac, const u8 *src)
-+{
-+ *(u32*)mac = *(u32*)src;
-+ ((u16*)mac)[2] = ((u16*)src)[2];
-+ /* kernel's memcpy will do the same: memcpy(dst, src, ETH_ALEN); */
-+}
-+
-+static inline void
-+MAC_FILL(u8 *mac, u8 val)
-+{
-+ memset(mac, val, ETH_ALEN);
-+}
-+
-+static inline void
-+MAC_BCAST(u8 *mac)
-+{
-+ ((u16*)mac)[2] = *(u32*)mac = -1;
-+}
-+
-+static inline void
-+MAC_ZERO(u8 *mac)
-+{
-+ ((u16*)mac)[2] = *(u32*)mac = 0;
-+}
-+
-+static inline int
-+mac_is_equal(const u8 *a, const u8 *b)
-+{
-+ /* can't beat this */
-+ return memcmp(a, b, ETH_ALEN) == 0;
-+}
-+
-+static inline int
-+mac_is_bcast(const u8 *mac)
-+{
-+ /* AND together 4 first bytes with sign-extended 2 last bytes
-+ ** Only bcast address gives 0xffffffff. +1 gives 0 */
-+ return ( *(s32*)mac & ((s16*)mac)[2] ) + 1 == 0;
-+}
-+
-+static inline int
-+mac_is_zero(const u8 *mac)
-+{
-+ return ( *(u32*)mac | ((u16*)mac)[2] ) == 0;
-+}
-+
-+static inline int
-+mac_is_directed(const u8 *mac)
-+{
-+ return (mac[0] & 1)==0;
-+}
-+
-+static inline int
-+mac_is_mcast(const u8 *mac)
-+{
-+ return (mac[0] & 1) && !mac_is_bcast(mac);
-+}
-+
-+#define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X"
-+#define MAC(bytevector) \
-+ ((unsigned char *)bytevector)[0], \
-+ ((unsigned char *)bytevector)[1], \
-+ ((unsigned char *)bytevector)[2], \
-+ ((unsigned char *)bytevector)[3], \
-+ ((unsigned char *)bytevector)[4], \
-+ ((unsigned char *)bytevector)[5]
-+
-+
-+/***********************************************************************
-+** Random helpers
-+*/
-+#define TO_STRING(x) #x
-+#define STRING(x) TO_STRING(x)
-+
-+#define CLEAR_BIT(val, mask) ((val) &= ~(mask))
-+#define SET_BIT(val, mask) ((val) |= (mask))
-+
-+/* undefined if v==0 */
-+static inline unsigned int
-+lowest_bit(u16 v)
-+{
-+ unsigned int n = 0;
-+ while (!(v & 0xf)) { v>>=4; n+=4; }
-+ while (!(v & 1)) { v>>=1; n++; }
-+ return n;
-+}
-+
-+/* undefined if v==0 */
-+static inline unsigned int
-+highest_bit(u16 v)
-+{
-+ unsigned int n = 0;
-+ while (v>0xf) { v>>=4; n+=4; }
-+ while (v>1) { v>>=1; n++; }
-+ return n;
-+}
-+
-+/* undefined if v==0 */
-+static inline int
-+has_only_one_bit(u16 v)
-+{
-+ return ((v-1) ^ v) >= v;
-+}
-+
-+
-+static inline int
-+is_hidden_essid(char *essid)
-+{
-+ return (('\0' == essid[0]) ||
-+ ((' ' == essid[0]) && ('\0' == essid[1])));
-+}
-+
-+/***********************************************************************
-+** LOCKING
-+** We have adev->sem and adev->lock.
-+**
-+** We employ following naming convention in order to get locking right:
-+**
-+** acx_e_xxxx - external entry points called from process context.
-+** It is okay to sleep. adev->sem is to be taken on entry.
-+** acx_i_xxxx - external entry points possibly called from atomic context.
-+** Sleeping is not allowed (and thus down(sem) is not legal!)
-+** acx_s_xxxx - potentially sleeping functions. Do not ever call under lock!
-+** acx_l_xxxx - functions which expect lock to be already taken.
-+** rest - non-sleeping functions which do not require locking
-+** but may be run under lock
-+**
-+** A small number of local helpers do not have acx_[eisl]_ prefix.
-+** They are always close to caller and are to be reviewed locally.
-+**
-+** Theory of operation:
-+**
-+** All process-context entry points (_e_ functions) take sem
-+** immediately. IRQ handler and other 'atomic-context' entry points
-+** (_i_ functions) take lock immediately on entry, but dont take sem
-+** because that might sleep.
-+**
-+** Thus *all* code is either protected by sem or lock, or both.
-+**
-+** Code which must not run concurrently with IRQ takes lock.
-+** Such code is marked with _l_.
-+**
-+** This results in the following rules of thumb useful in code review:
-+**
-+** + If a function calls _s_ fn, it must be an _s_ itself.
-+** + You can call _l_ fn only (a) from another _l_ fn
-+** or (b) from _s_, _e_ or _i_ fn by taking lock, calling _l_,
-+** and dropping lock.
-+** + All IRQ code runs under lock.
-+** + Any _s_ fn is running under sem.
-+** + Code under sem can race only with IRQ code.
-+** + Code under sem+lock cannot race with anything.
-+*/
-+
-+/* These functions *must* be inline or they will break horribly on SPARC, due
-+ * to its weird semantics for save/restore flags */
-+
-+#if defined(PARANOID_LOCKING) /* Lock debugging */
-+
-+void acx_lock_debug(acx_device_t *adev, const char* where);
-+void acx_unlock_debug(acx_device_t *adev, const char* where);
-+void acx_down_debug(acx_device_t *adev, const char* where);
-+void acx_up_debug(acx_device_t *adev, const char* where);
-+void acx_lock_unhold(void);
-+void acx_sem_unhold(void);
-+
-+static inline void
-+acx_lock_helper(acx_device_t *adev, unsigned long *fp, const char* where)
-+{
-+ acx_lock_debug(adev, where);
-+ spin_lock_irqsave(&adev->lock, *fp);
-+}
-+static inline void
-+acx_unlock_helper(acx_device_t *adev, unsigned long *fp, const char* where)
-+{
-+ acx_unlock_debug(adev, where);
-+ spin_unlock_irqrestore(&adev->lock, *fp);
-+}
-+static inline void
-+acx_down_helper(acx_device_t *adev, const char* where)
-+{
-+ acx_down_debug(adev, where);
-+}
-+static inline void
-+acx_up_helper(acx_device_t *adev, const char* where)
-+{
-+ acx_up_debug(adev, where);
-+}
-+#define acx_lock(adev, flags) acx_lock_helper(adev, &(flags), __FILE__ ":" STRING(__LINE__))
-+#define acx_unlock(adev, flags) acx_unlock_helper(adev, &(flags), __FILE__ ":" STRING(__LINE__))
-+#define acx_sem_lock(adev) acx_down_helper(adev, __FILE__ ":" STRING(__LINE__))
-+#define acx_sem_unlock(adev) acx_up_helper(adev, __FILE__ ":" STRING(__LINE__))
-+
-+#elif defined(DO_LOCKING)
-+
-+#define acx_lock(adev, flags) spin_lock_irqsave(&adev->lock, flags)
-+#define acx_unlock(adev, flags) spin_unlock_irqrestore(&adev->lock, flags)
-+#define acx_sem_lock(adev) down(&adev->sem)
-+#define acx_sem_unlock(adev) up(&adev->sem)
-+#define acx_lock_unhold() ((void)0)
-+#define acx_sem_unhold() ((void)0)
-+
-+#else /* no locking! :( */
-+
-+#define acx_lock(adev, flags) ((void)0)
-+#define acx_unlock(adev, flags) ((void)0)
-+#define acx_sem_lock(adev) ((void)0)
-+#define acx_sem_unlock(adev) ((void)0)
-+#define acx_lock_unhold() ((void)0)
-+#define acx_sem_unhold() ((void)0)
-+
-+#endif
-+
-+
-+/***********************************************************************
-+*/
-+
-+/* Can race with rx path (which is not protected by sem):
-+** rx -> process_[re]assocresp() -> set_status(ASSOCIATED) -> wake_queue()
-+** Can race with tx_complete IRQ:
-+** IRQ -> acxpci_l_clean_txdesc -> acx_wake_queue
-+** Review carefully all callsites */
-+static inline void
-+acx_stop_queue(struct net_device *ndev, const char *msg)
-+{
-+ if (netif_queue_stopped(ndev))
-+ return;
-+
-+ netif_stop_queue(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: stop queue %s\n", msg);
-+}
-+
-+static inline int
-+acx_queue_stopped(struct net_device *ndev)
-+{
-+ return netif_queue_stopped(ndev);
-+}
-+
-+/*
-+static inline void
-+acx_start_queue(struct net_device *ndev, const char *msg)
-+{
-+ netif_start_queue(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: start queue %s\n", msg);
-+}
-+*/
-+
-+static inline void
-+acx_wake_queue(struct net_device *ndev, const char *msg)
-+{
-+ netif_wake_queue(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: wake queue %s\n", msg);
-+}
-+
-+static inline void
-+acx_carrier_off(struct net_device *ndev, const char *msg)
-+{
-+ netif_carrier_off(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: carrier off %s\n", msg);
-+}
-+
-+static inline void
-+acx_carrier_on(struct net_device *ndev, const char *msg)
-+{
-+ netif_carrier_on(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: carrier on %s\n", msg);
-+}
-+
-+/* This function does not need locking UNLESS you call it
-+** as acx_set_status(ACX_STATUS_4_ASSOCIATED), bacause this can
-+** wake queue. This can race with stop_queue elsewhere. */
-+void acx_set_status(acx_device_t *adev, u16 status);
-+
-+
-+/***********************************************************************
-+** Communication with firmware
-+*/
-+#define CMD_TIMEOUT_MS(n) (n)
-+#define ACX_CMD_TIMEOUT_DEFAULT CMD_TIMEOUT_MS(50)
-+
-+#if ACX_DEBUG
-+
-+/* We want to log cmd names */
-+int acxpci_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
-+int acxmem_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
-+int acxusb_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
-+static inline int
-+acx_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
-+ if (IS_PCI(adev))
-+ return acxpci_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
-+ return acxusb_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
-+}
-+#define acx_s_issue_cmd(adev,cmd,param,len) \
-+ acx_s_issue_cmd_timeo_debug(adev,cmd,param,len,ACX_CMD_TIMEOUT_DEFAULT,#cmd)
-+#define acx_s_issue_cmd_timeo(adev,cmd,param,len,timeo) \
-+ acx_s_issue_cmd_timeo_debug(adev,cmd,param,len,timeo,#cmd)
-+int acx_s_configure_debug(acx_device_t *adev, void *pdr, int type, const char* str);
-+#define acx_s_configure(adev,pdr,type) \
-+ acx_s_configure_debug(adev,pdr,type,#type)
-+int acx_s_interrogate_debug(acx_device_t *adev, void *pdr, int type, const char* str);
-+#define acx_s_interrogate(adev,pdr,type) \
-+ acx_s_interrogate_debug(adev,pdr,type,#type)
-+
-+#else
-+
-+int acxpci_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
-+int acxmem_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
-+int acxusb_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
-+static inline int
-+acx_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
-+ if (IS_PCI(adev))
-+ return acxpci_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
-+ return acxusb_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
-+}
-+static inline int
-+acx_s_issue_cmd(acx_device_t *adev, unsigned cmd, void *param, unsigned len)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
-+ if (IS_PCI(adev))
-+ return acxpci_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
-+ return acxusb_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
-+}
-+int acx_s_configure(acx_device_t *adev, void *pdr, int type);
-+int acx_s_interrogate(acx_device_t *adev, void *pdr, int type);
-+
-+#endif
-+
-+void acx_s_cmd_start_scan(acx_device_t *adev);
-+
-+
-+/***********************************************************************
-+** Ioctls
-+*/
-+int
-+acx111pci_ioctl_info(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra);
-+int
-+acx100pci_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra);
-+int
-+acx100mem_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra);
-+
-+
-+/***********************************************************************
-+** /proc
-+*/
-+#ifdef CONFIG_PROC_FS
-+int acx_proc_register_entries(const struct net_device *ndev);
-+int acx_proc_unregister_entries(const struct net_device *ndev);
-+#else
-+static inline int
-+acx_proc_register_entries(const struct net_device *ndev) { return OK; }
-+static inline int
-+acx_proc_unregister_entries(const struct net_device *ndev) { return OK; }
-+#endif
-+
-+
-+/***********************************************************************
-+*/
-+firmware_image_t *acx_s_read_fw(struct device *dev, const char *file, u32 *size);
-+int acxpci_s_upload_radio(acx_device_t *adev);
-+int acxmem_s_upload_radio(acx_device_t *adev);
-+
-+
-+/***********************************************************************
-+** Unsorted yet :)
-+*/
-+int acxpci_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
-+int acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
-+int acxusb_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
-+static inline int
-+acx_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_read_phy_reg(adev, reg, charbuf);
-+ if (IS_PCI(adev))
-+ return acxpci_s_read_phy_reg(adev, reg, charbuf);
-+ return acxusb_s_read_phy_reg(adev, reg, charbuf);
-+}
-+
-+int acxpci_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
-+int acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
-+int acxusb_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
-+static inline int
-+acx_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_write_phy_reg(adev, reg, value);
-+ if (IS_PCI(adev))
-+ return acxpci_s_write_phy_reg(adev, reg, value);
-+ return acxusb_s_write_phy_reg(adev, reg, value);
-+}
-+
-+tx_t* acxpci_l_alloc_tx(acx_device_t *adev);
-+tx_t* acxmem_l_alloc_tx(acx_device_t *adev);
-+tx_t* acxusb_l_alloc_tx(acx_device_t *adev);
-+static inline tx_t*
-+acx_l_alloc_tx(acx_device_t *adev)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_l_alloc_tx(adev);
-+ if (IS_PCI(adev))
-+ return acxpci_l_alloc_tx(adev);
-+ return acxusb_l_alloc_tx(adev);
-+}
-+
-+void acxusb_l_dealloc_tx(tx_t *tx_opaque);
-+void acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque);
-+static inline void
-+acx_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque)
-+{
-+#ifdef ACX_MEM
-+ acxmem_l_dealloc_tx (adev, tx_opaque);
-+#else
-+ if (IS_USB(adev))
-+ acxusb_l_dealloc_tx(tx_opaque);
-+#endif
-+}
-+
-+void* acxpci_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
-+void* acxmem_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
-+void* acxusb_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
-+static inline void*
-+acx_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque)
-+{
-+#if defined (ACX_MEM)
-+ return acxmem_l_get_txbuf(adev, tx_opaque);
-+#else
-+ if (IS_PCI(adev))
-+ return acxpci_l_get_txbuf(adev, tx_opaque);
-+ return acxusb_l_get_txbuf(adev, tx_opaque);
-+#endif
-+}
-+
-+void acxpci_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
-+void acxmem_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
-+void acxusb_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
-+static inline void
-+acx_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len)
-+{
-+#if defined (ACX_MEM)
-+ acxmem_l_tx_data(adev, tx_opaque, len);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_l_tx_data(adev, tx_opaque, len);
-+ else
-+ acxusb_l_tx_data(adev, tx_opaque, len);
-+#endif
-+}
-+
-+static inline wlan_hdr_t*
-+acx_get_wlan_hdr(acx_device_t *adev, const rxbuffer_t *rxbuf)
-+{
-+ return (wlan_hdr_t*)((u8*)&rxbuf->hdr_a3 + adev->phy_header_len);
-+}
-+
-+void acxpci_l_power_led(acx_device_t *adev, int enable);
-+int acxpci_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf);
-+unsigned int acxpci_l_clean_txdesc(acx_device_t *adev);
-+void acxpci_l_clean_txdesc_emergency(acx_device_t *adev);
-+int acxpci_s_create_hostdesc_queues(acx_device_t *adev);
-+void acxpci_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start);
-+void acxpci_free_desc_queues(acx_device_t *adev);
-+char* acxpci_s_proc_diag_output(char *p, acx_device_t *adev);
-+int acxpci_proc_eeprom_output(char *p, acx_device_t *adev);
-+void acxpci_set_interrupt_mask(acx_device_t *adev);
-+int acx100pci_s_set_tx_level(acx_device_t *adev, u8 level_dbm);
-+
-+void acxmem_l_power_led(acx_device_t *adev, int enable);
-+int acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf);
-+unsigned int acxmem_l_clean_txdesc(acx_device_t *adev);
-+void acxmem_l_clean_txdesc_emergency(acx_device_t *adev);
-+int acxmem_s_create_hostdesc_queues(acx_device_t *adev);
-+void acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start);
-+void acxmem_free_desc_queues(acx_device_t *adev);
-+char* acxmem_s_proc_diag_output(char *p, acx_device_t *adev);
-+int acxmem_proc_eeprom_output(char *p, acx_device_t *adev);
-+void acxmem_set_interrupt_mask(acx_device_t *adev);
-+int acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm);
-+
-+void acx_s_msleep(int ms);
-+int acx_s_init_mac(acx_device_t *adev);
-+void acx_set_reg_domain(acx_device_t *adev, unsigned char reg_dom_id);
-+void acx_set_timer(acx_device_t *adev, int timeout_us);
-+void acx_update_capabilities(acx_device_t *adev);
-+void acx_s_start(acx_device_t *adev);
-+
-+void acx_s_update_card_settings(acx_device_t *adev);
-+void acx_s_parse_configoption(acx_device_t *adev, const acx111_ie_configoption_t *pcfg);
-+void acx_l_update_ratevector(acx_device_t *adev);
-+
-+void acx_init_task_scheduler(acx_device_t *adev);
-+void acx_schedule_task(acx_device_t *adev, unsigned int set_flag);
-+
-+int acx_e_ioctl_old(struct net_device *ndev, struct ifreq *ifr, int cmd);
-+
-+client_t *acx_l_sta_list_get(acx_device_t *adev, const u8 *address);
-+void acx_l_sta_list_del(acx_device_t *adev, client_t *clt);
-+
-+int acx_l_transmit_disassoc(acx_device_t *adev, client_t *clt);
-+void acx_i_timer(unsigned long a);
-+int acx_s_complete_scan(acx_device_t *adev);
-+
-+struct sk_buff *acx_rxbuf_to_ether(acx_device_t *adev, rxbuffer_t *rxbuf);
-+int acx_ether_to_txbuf(acx_device_t *adev, void *txbuf, const struct sk_buff *skb);
-+
-+u8 acx_signal_determine_quality(u8 signal, u8 noise);
-+
-+void acx_l_process_rxbuf(acx_device_t *adev, rxbuffer_t *rxbuf);
-+void acx_l_handle_txrate_auto(acx_device_t *adev, struct client *txc,
-+ u16 intended_rate, u8 rate100, u16 rate111, u8 error,
-+ int pkts_to_ignore);
-+
-+void acx_dump_bytes(const void *, int);
-+void acx_log_bad_eid(wlan_hdr_t* hdr, int len, wlan_ie_t* ie_ptr);
-+
-+u8 acx_rate111to100(u16);
-+
-+void acx_s_set_defaults(acx_device_t *adev);
-+
-+#if !ACX_DEBUG
-+static inline const char* acx_get_packet_type_string(u16 fc) { return ""; }
-+#else
-+const char* acx_get_packet_type_string(u16 fc);
-+#endif
-+const char* acx_cmd_status_str(unsigned int state);
-+
-+int acx_i_start_xmit(struct sk_buff *skb, struct net_device *ndev);
-+
-+void great_inquisitor(acx_device_t *adev);
-+
-+void acx_s_get_firmware_version(acx_device_t *adev);
-+void acx_display_hardware_details(acx_device_t *adev);
-+
-+int acx_e_change_mtu(struct net_device *ndev, int mtu);
-+struct net_device_stats* acx_e_get_stats(struct net_device *ndev);
-+struct iw_statistics* acx_e_get_wireless_stats(struct net_device *ndev);
-+
-+#ifdef ACX_MEM
-+int __init acxmem_e_init_module(void);
-+void __exit acxmem_e_cleanup_module(void);
-+void acxmem_e_release(struct device *dev);
-+#else
-+int __init acxpci_e_init_module(void);
-+int __init acxusb_e_init_module(void);
-+void __exit acxpci_e_cleanup_module(void);
-+void __exit acxusb_e_cleanup_module(void);
-+#endif
-+int __init acx_cs_init(void);
-+void __exit acx_cs_cleanup(void);
-Index: linux-2.6.22/drivers/net/wireless/acx/acx.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,14 @@
-+#if defined(CONFIG_ACX_MEM) && !defined(ACX_MEM)
-+#define ACX_MEM
-+#endif
-+
-+#if defined(CONFIG_ACX_CS) && !defined(ACX_MEM)
-+#define ACX_MEM
-+#endif
-+
-+#include "acx_config.h"
-+#include "wlan_compat.h"
-+#include "wlan_hdr.h"
-+#include "wlan_mgmt.h"
-+#include "acx_struct.h"
-+#include "acx_func.h"
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_hw.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_hw.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,18 @@
-+/*
-+ * Interface for ACX slave memory driver
-+ *
-+ * Copyright (c) 2006 SDG Systems, LLC
-+ *
-+ * GPL
-+ *
-+ */
-+
-+#ifndef _ACX_HW_H
-+#define _ACX_HW_H
-+
-+struct acx_hardware_data {
-+ int (*start_hw)( void );
-+ int (*stop_hw)( void );
-+};
-+
-+#endif /* _ACX_HW_H */
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_struct.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_struct.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,2114 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** Forward declarations of types
-+*/
-+typedef struct tx tx_t;
-+typedef struct acx_device acx_device_t;
-+typedef struct client client_t;
-+typedef struct rxdesc rxdesc_t;
-+typedef struct txdesc txdesc_t;
-+typedef struct rxhostdesc rxhostdesc_t;
-+typedef struct txhostdesc txhostdesc_t;
-+
-+
-+/***********************************************************************
-+** Debug / log functionality
-+*/
-+enum {
-+ L_LOCK = (ACX_DEBUG>1)*0x0001, /* locking debug log */
-+ L_INIT = (ACX_DEBUG>0)*0x0002, /* special card initialization logging */
-+ L_IRQ = (ACX_DEBUG>0)*0x0004, /* interrupt stuff */
-+ L_ASSOC = (ACX_DEBUG>0)*0x0008, /* assocation (network join) and station log */
-+ L_FUNC = (ACX_DEBUG>1)*0x0020, /* logging of function enter / leave */
-+ L_XFER = (ACX_DEBUG>1)*0x0080, /* logging of transfers and mgmt */
-+ L_DATA = (ACX_DEBUG>1)*0x0100, /* logging of transfer data */
-+ L_DEBUG = (ACX_DEBUG>1)*0x0200, /* log of debug info */
-+ L_IOCTL = (ACX_DEBUG>0)*0x0400, /* log ioctl calls */
-+ L_CTL = (ACX_DEBUG>1)*0x0800, /* log of low-level ctl commands */
-+ L_BUFR = (ACX_DEBUG>1)*0x1000, /* debug rx buffer mgmt (ring buffer etc.) */
-+ L_XFER_BEACON = (ACX_DEBUG>1)*0x2000, /* also log beacon packets */
-+ L_BUFT = (ACX_DEBUG>1)*0x4000, /* debug tx buffer mgmt (ring buffer etc.) */
-+ L_USBRXTX = (ACX_DEBUG>0)*0x8000, /* debug USB rx/tx operations */
-+ L_BUF = L_BUFR + L_BUFT,
-+ L_ANY = 0xffff
-+};
-+
-+#if ACX_DEBUG
-+extern unsigned int acx_debug;
-+#else
-+enum { acx_debug = 0 };
-+#endif
-+
-+
-+/***********************************************************************
-+** Random helpers
-+*/
-+#define ACX_PACKED __attribute__ ((packed))
-+
-+#define VEC_SIZE(a) (sizeof(a)/sizeof(a[0]))
-+
-+/* Use worker_queues for 2.5/2.6 kernels and queue tasks for 2.4 kernels
-+ (used for the 'bottom half' of the interrupt routine) */
-+
-+#include <linux/workqueue.h>
-+#define USE_WORKER_TASKS
-+#define WORK_STRUCT struct work_struct
-+#define SCHEDULE_WORK schedule_work
-+#define FLUSH_SCHEDULED_WORK flush_scheduled_work
-+
-+
-+/***********************************************************************
-+** Constants
-+*/
-+#define OK 0
-+#define NOT_OK 1
-+
-+/* The supported chip models */
-+#define CHIPTYPE_ACX100 1
-+#define CHIPTYPE_ACX111 2
-+
-+#define IS_ACX100(adev) ((adev)->chip_type == CHIPTYPE_ACX100)
-+#define IS_ACX111(adev) ((adev)->chip_type == CHIPTYPE_ACX111)
-+
-+/* Supported interfaces */
-+#define DEVTYPE_PCI 0
-+#define DEVTYPE_USB 1
-+#define DEVTYPE_MEM 2
-+
-+#if !defined(CONFIG_ACX_PCI) && !defined(CONFIG_ACX_USB) && !defined(CONFIG_ACX_MEM) && !defined(CONFIG_ACX_CS)
-+#error Driver must include PCI, USB, PCMCIA or memory mapped interface support. You selected none of them.
-+#endif
-+
-+#if defined(CONFIG_ACX_PCI)
-+ #if !defined(CONFIG_ACX_USB)
-+ #define IS_PCI(adev) 1
-+ #else
-+ #define IS_PCI(adev) ((adev)->dev_type == DEVTYPE_PCI)
-+ #endif
-+#else
-+ #define IS_PCI(adev) 0
-+#endif
-+
-+#if defined(CONFIG_ACX_USB)
-+ #if !defined(CONFIG_ACX_PCI)
-+ #define IS_USB(adev) 1
-+ #else
-+ #define IS_USB(adev) ((adev)->dev_type == DEVTYPE_USB)
-+ #endif
-+#else
-+ #define IS_USB(adev) 0
-+#endif
-+
-+#if defined(CONFIG_ACX_MEM) || defined(CONFIG_ACX_CS)
-+ #define IS_MEM(adev) 1
-+#else
-+ #define IS_MEM(adev) 0
-+#endif
-+
-+/* Driver defaults */
-+#define DEFAULT_DTIM_INTERVAL 10
-+/* used to be 2048, but FreeBSD driver changed it to 4096 to work properly
-+** in noisy wlans */
-+#define DEFAULT_MSDU_LIFETIME 4096
-+#define DEFAULT_RTS_THRESHOLD 2312 /* max. size: disable RTS mechanism */
-+#define DEFAULT_BEACON_INTERVAL 100
-+
-+#define ACX100_BAP_DATALEN_MAX 4096
-+#define ACX100_RID_GUESSING_MAXLEN 2048 /* I'm not really sure */
-+#define ACX100_RIDDATA_MAXLEN ACX100_RID_GUESSING_MAXLEN
-+
-+/* Support Constants */
-+/* Radio type names, found in Win98 driver's TIACXLN.INF */
-+#define RADIO_MAXIM_0D 0x0d
-+#define RADIO_RFMD_11 0x11
-+#define RADIO_RALINK_15 0x15
-+/* used in ACX111 cards (WG311v2, WL-121, ...): */
-+#define RADIO_RADIA_16 0x16
-+/* most likely *sometimes* used in ACX111 cards: */
-+#define RADIO_UNKNOWN_17 0x17
-+/* FwRad19.bin was found in a Safecom driver; must be an ACX111 radio: */
-+#define RADIO_UNKNOWN_19 0x19
-+#define RADIO_UNKNOWN_1B 0x1b /* radio in SafeCom SWLUT-54125 USB adapter; entirely unknown!! */
-+
-+/* Controller Commands */
-+/* can be found in table cmdTable in firmware "Rev. 1.5.0" (FW150) */
-+#define ACX1xx_CMD_RESET 0x00
-+#define ACX1xx_CMD_INTERROGATE 0x01
-+#define ACX1xx_CMD_CONFIGURE 0x02
-+#define ACX1xx_CMD_ENABLE_RX 0x03
-+#define ACX1xx_CMD_ENABLE_TX 0x04
-+#define ACX1xx_CMD_DISABLE_RX 0x05
-+#define ACX1xx_CMD_DISABLE_TX 0x06
-+#define ACX1xx_CMD_FLUSH_QUEUE 0x07
-+#define ACX1xx_CMD_SCAN 0x08
-+#define ACX1xx_CMD_STOP_SCAN 0x09
-+#define ACX1xx_CMD_CONFIG_TIM 0x0a
-+#define ACX1xx_CMD_JOIN 0x0b
-+#define ACX1xx_CMD_WEP_MGMT 0x0c
-+#ifdef OLD_FIRMWARE_VERSIONS
-+#define ACX100_CMD_HALT 0x0e /* mapped to unknownCMD in FW150 */
-+#else
-+#define ACX1xx_CMD_MEM_READ 0x0d
-+#define ACX1xx_CMD_MEM_WRITE 0x0e
-+#endif
-+#define ACX1xx_CMD_SLEEP 0x0f
-+#define ACX1xx_CMD_WAKE 0x10
-+#define ACX1xx_CMD_UNKNOWN_11 0x11 /* mapped to unknownCMD in FW150 */
-+#define ACX100_CMD_INIT_MEMORY 0x12
-+#define ACX1FF_CMD_DISABLE_RADIO 0x12 /* new firmware? TNETW1450? */
-+#define ACX1xx_CMD_CONFIG_BEACON 0x13
-+#define ACX1xx_CMD_CONFIG_PROBE_RESPONSE 0x14
-+#define ACX1xx_CMD_CONFIG_NULL_DATA 0x15
-+#define ACX1xx_CMD_CONFIG_PROBE_REQUEST 0x16
-+#define ACX1xx_CMD_FCC_TEST 0x17
-+#define ACX1xx_CMD_RADIOINIT 0x18
-+#define ACX111_CMD_RADIOCALIB 0x19
-+#define ACX1FF_CMD_NOISE_HISTOGRAM 0x1c /* new firmware? TNETW1450? */
-+#define ACX1FF_CMD_RX_RESET 0x1d /* new firmware? TNETW1450? */
-+#define ACX1FF_CMD_LNA_CONTROL 0x20 /* new firmware? TNETW1450? */
-+#define ACX1FF_CMD_CONTROL_DBG_TRACE 0x21 /* new firmware? TNETW1450? */
-+
-+/* 'After Interrupt' Commands */
-+#define ACX_AFTER_IRQ_CMD_STOP_SCAN 0x01
-+#define ACX_AFTER_IRQ_CMD_ASSOCIATE 0x02
-+#define ACX_AFTER_IRQ_CMD_RADIO_RECALIB 0x04
-+#define ACX_AFTER_IRQ_UPDATE_CARD_CFG 0x08
-+#define ACX_AFTER_IRQ_TX_CLEANUP 0x10
-+#define ACX_AFTER_IRQ_COMPLETE_SCAN 0x20
-+#define ACX_AFTER_IRQ_RESTART_SCAN 0x40
-+
-+/***********************************************************************
-+** Tx/Rx buffer sizes and watermarks
-+**
-+** This will alloc and use DMAable buffers of
-+** WLAN_A4FR_MAXLEN_WEP_FCS * (RX_CNT + TX_CNT) bytes
-+** RX/TX_CNT=32 -> ~150k DMA buffers
-+** RX/TX_CNT=16 -> ~75k DMA buffers
-+**
-+** 2005-10-10: reduced memory usage by lowering both to 16
-+*/
-+#define RX_CNT 16
-+#define TX_CNT 16
-+
-+/* we clean up txdescs when we have N free txdesc: */
-+#define TX_CLEAN_BACKLOG (TX_CNT/4)
-+#define TX_START_CLEAN (TX_CNT - TX_CLEAN_BACKLOG)
-+#define TX_EMERG_CLEAN 2
-+/* we stop queue if we have < N free txbufs: */
-+#define TX_STOP_QUEUE 3
-+/* we start queue if we have >= N free txbufs: */
-+#define TX_START_QUEUE 5
-+
-+/***********************************************************************
-+** Interrogate/Configure cmd constants
-+**
-+** NB: length includes JUST the data part of the IE
-+** (does not include size of the (type,len) pair)
-+**
-+** TODO: seems that acx100, acx100usb, acx111 have some differences,
-+** fix code with regard to this!
-+*/
-+
-+#define DEF_IE(name, val, len) enum { ACX##name=val, ACX##name##_LEN=len }
-+
-+/* Information Elements: Network Parameters, Static Configuration Entities */
-+/* these are handled by real_cfgtable in firmware "Rev 1.5.0" (FW150) */
-+DEF_IE(1xx_IE_UNKNOWN_00 ,0x0000, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(100_IE_ACX_TIMER ,0x0001, 0x10);
-+DEF_IE(1xx_IE_POWER_MGMT ,0x0002, 0x06); /* TNETW1450: length 0x18!! */
-+DEF_IE(1xx_IE_QUEUE_CONFIG ,0x0003, 0x1c);
-+DEF_IE(100_IE_BLOCK_SIZE ,0x0004, 0x02);
-+DEF_IE(1FF_IE_SLOT_TIME ,0x0004, 0x08); /* later firmware versions only? */
-+DEF_IE(1xx_IE_MEMORY_CONFIG_OPTIONS ,0x0005, 0x14);
-+DEF_IE(1FF_IE_QUEUE_HEAD ,0x0005, 0x14 /* FIXME: length? */);
-+DEF_IE(1xx_IE_RATE_FALLBACK ,0x0006, 0x01); /* TNETW1450: length 2 */
-+DEF_IE(100_IE_WEP_OPTIONS ,0x0007, 0x03);
-+DEF_IE(111_IE_RADIO_BAND ,0x0007, -1);
-+DEF_IE(1FF_IE_TIMING_CFG ,0x0007, -1); /* later firmware versions; TNETW1450 only? */
-+DEF_IE(100_IE_SSID ,0x0008, 0x20); /* huh? */
-+DEF_IE(1xx_IE_MEMORY_MAP ,0x0008, 0x28); /* huh? TNETW1450 has length 0x40!! */
-+DEF_IE(1xx_IE_SCAN_STATUS ,0x0009, 0x04); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1xx_IE_ASSOC_ID ,0x000a, 0x02);
-+DEF_IE(1xx_IE_UNKNOWN_0B ,0x000b, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1FF_IE_TX_POWER_LEVEL_TABLE ,0x000b, 0x18); /* later firmware versions; TNETW1450 only? */
-+DEF_IE(100_IE_UNKNOWN_0C ,0x000c, -1); /* very small implementation in FW150! */
-+/* ACX100 has an equivalent struct in the cmd mailbox directly after reset.
-+ * 0x14c seems extremely large, will trash stack on failure (memset!)
-+ * in case of small input struct --> OOPS! */
-+DEF_IE(111_IE_CONFIG_OPTIONS ,0x000c, 0x14c);
-+DEF_IE(1xx_IE_FWREV ,0x000d, 0x18);
-+DEF_IE(1xx_IE_FCS_ERROR_COUNT ,0x000e, 0x04);
-+DEF_IE(1xx_IE_MEDIUM_USAGE ,0x000f, 0x08);
-+DEF_IE(1xx_IE_RXCONFIG ,0x0010, 0x04);
-+DEF_IE(100_IE_UNKNOWN_11 ,0x0011, -1); /* NONBINARY: large implementation in FW150! link quality readings or so? */
-+DEF_IE(111_IE_QUEUE_THRESH ,0x0011, -1);
-+DEF_IE(100_IE_UNKNOWN_12 ,0x0012, -1); /* NONBINARY: VERY large implementation in FW150!! */
-+DEF_IE(111_IE_BSS_POWER_SAVE ,0x0012, /* -1 */ 2);
-+DEF_IE(1xx_IE_FIRMWARE_STATISTICS ,0x0013, 0x9c); /* TNETW1450: length 0x134!! */
-+DEF_IE(1FF_IE_RX_INTR_CONFIG ,0x0014, 0x14); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1xx_IE_FEATURE_CONFIG ,0x0015, 0x08);
-+DEF_IE(111_IE_KEY_CHOOSE ,0x0016, 0x04); /* for rekeying. really len=4?? */
-+DEF_IE(1FF_IE_MISC_CONFIG_TABLE ,0x0017, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_WONE_CONFIG ,0x0018, -1); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_TID_CONFIG ,0x001a, 0x2c); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_CALIB_ASSESSMENT ,0x001e, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_BEACON_FILTER_OPTIONS ,0x001f, 0x02); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_LOW_RSSI_THRESH_OPT ,0x0020, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_NOISE_HISTOGRAM_RESULTS ,0x0021, 0x30); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_PACKET_DETECT_THRESH ,0x0023, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_TX_CONFIG_OPTIONS ,0x0024, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_CCA_THRESHOLD ,0x0025, 0x02); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_EVENT_MASK ,0x0026, 0x08); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_DTIM_PERIOD ,0x0027, 0x02); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_ACI_CONFIG_SET ,0x0029, 0x06); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(1FF_IE_EEPROM_VER ,0x0030, 0x04); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(1xx_IE_DOT11_STATION_ID ,0x1001, 0x06);
-+DEF_IE(100_IE_DOT11_UNKNOWN_1002 ,0x1002, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(111_IE_DOT11_FRAG_THRESH ,0x1002, -1); /* mapped to cfgInvalid in FW150; TNETW1450 has length 2!! */
-+DEF_IE(100_IE_DOT11_BEACON_PERIOD ,0x1003, 0x02); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1xx_IE_DOT11_DTIM_PERIOD ,0x1004, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1FF_IE_DOT11_MAX_RX_LIFETIME ,0x1004, -1); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(1xx_IE_DOT11_SHORT_RETRY_LIMIT ,0x1005, 0x01); /* TNETW1450: length 2 */
-+DEF_IE(1xx_IE_DOT11_LONG_RETRY_LIMIT ,0x1006, 0x01); /* TNETW1450: length 2 */
-+DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_WRITE ,0x1007, 0x20); /* configure default keys; TNETW1450 has length 0x24!! */
-+DEF_IE(1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME ,0x1008, 0x04);
-+DEF_IE(1xx_IE_DOT11_GROUP_ADDR ,0x1009, -1);
-+DEF_IE(1xx_IE_DOT11_CURRENT_REG_DOMAIN ,0x100a, 0x02);
-+/* It's harmless to have larger struct. Use USB case always. */
-+DEF_IE(1xx_IE_DOT11_CURRENT_ANTENNA ,0x100b, 0x02); /* in fact len=1 for PCI */
-+DEF_IE(1xx_IE_DOT11_UNKNOWN_100C ,0x100c, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1xx_IE_DOT11_TX_POWER_LEVEL ,0x100d, 0x01); /* TNETW1450 has length 2!! */
-+DEF_IE(1xx_IE_DOT11_CURRENT_CCA_MODE ,0x100e, 0x02); /* in fact len=1 for PCI */
-+/* USB doesn't return anything - len==0?! */
-+DEF_IE(100_IE_DOT11_ED_THRESHOLD ,0x100f, 0x04);
-+DEF_IE(1xx_IE_DOT11_WEP_DEFAULT_KEY_SET ,0x1010, 0x01); /* set default key ID; TNETW1450: length 2 */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1011 ,0x1011, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1FF_IE_DOT11_CURR_5GHZ_REGDOM ,0x1011, -1); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1012 ,0x1012, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1013 ,0x1013, -1); /* mapped to cfgInvalid in FW150 */
-+
-+#if 0
-+/* Experimentally obtained on acx100, fw 1.9.8.b
-+** -1 means that fw returned 'invalid IE'
-+** 0200 FC00 nnnn... are test read contents: u16 type, u16 len, data
-+** (AA are poison bytes marking bytes not written by fw)
-+**
-+** Looks like acx100 fw does not update len field (thus len=256-4=FC here)
-+** A number of IEs seem to trash type,len fields
-+** IEs marked 'huge' return gobs of data (no poison bytes remain)
-+*/
-+DEF_IE(100_IE_INVAL_00, 0x0000, -1);
-+DEF_IE(100_IE_INVAL_01, 0x0001, -1); /* IE_ACX_TIMER, len=16 on older fw */
-+DEF_IE(100_IE_POWER_MGMT, 0x0002, 4); /* 0200FC00 00040000 AAAAAAAA */
-+DEF_IE(100_IE_QUEUE_CONFIG, 0x0003, 28); /* 0300FC00 48060000 9CAD0000 0101AAAA DCB00000 E4B00000 9CAA0000 00AAAAAA */
-+DEF_IE(100_IE_BLOCK_SIZE, 0x0004, 2); /* 0400FC00 0001AAAA AAAAAAAA AAAAAAAA */
-+/* write only: */
-+DEF_IE(100_IE_MEMORY_CONFIG_OPTIONS, 0x0005, 20);
-+DEF_IE(100_IE_RATE_FALLBACK, 0x0006, 1); /* 0600FC00 00AAAAAA AAAAAAAA AAAAAAAA */
-+/* write only: */
-+DEF_IE(100_IE_WEP_OPTIONS, 0x0007, 3);
-+DEF_IE(100_IE_MEMORY_MAP, 0x0008, 40); /* huge: 0800FC00 30000000 6CA20000 70A20000... */
-+/* gives INVAL on read: */
-+DEF_IE(100_IE_SCAN_STATUS, 0x0009, -1);
-+DEF_IE(100_IE_ASSOC_ID, 0x000a, 2); /* huge: 0A00FC00 00000000 01040800 00000000... */
-+DEF_IE(100_IE_INVAL_0B, 0x000b, -1);
-+/* 'command rejected': */
-+DEF_IE(100_IE_CONFIG_OPTIONS, 0x000c, -3);
-+DEF_IE(100_IE_FWREV, 0x000d, 24); /* 0D00FC00 52657620 312E392E 382E6200 AAAAAAAA AAAAAAAA 05050201 AAAAAAAA */
-+DEF_IE(100_IE_FCS_ERROR_COUNT, 0x000e, 4);
-+DEF_IE(100_IE_MEDIUM_USAGE, 0x000f, 8); /* E41F0000 2D780300 FCC91300 AAAAAAAA */
-+DEF_IE(100_IE_RXCONFIG, 0x0010, 4); /* 1000FC00 00280000 AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_QUEUE_THRESH, 0x0011, 12); /* 1100FC00 AAAAAAAA 00000000 00000000 */
-+DEF_IE(100_IE_BSS_POWER_SAVE, 0x0012, 1); /* 1200FC00 00AAAAAA AAAAAAAA AAAAAAAA */
-+/* read only, variable len */
-+DEF_IE(100_IE_FIRMWARE_STATISTICS, 0x0013, 256); /* 0000AC00 00000000 ... */
-+DEF_IE(100_IE_INT_CONFIG, 0x0014, 20); /* 00000000 00000000 00000000 00000000 5D74D105 00000000 AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_FEATURE_CONFIG, 0x0015, 8); /* 1500FC00 16000000 AAAAAAAA AAAAAAAA */
-+/* returns 'invalid MAC': */
-+DEF_IE(100_IE_KEY_CHOOSE, 0x0016, -4);
-+DEF_IE(100_IE_INVAL_17, 0x0017, -1);
-+DEF_IE(100_IE_UNKNOWN_18, 0x0018, 0); /* null len?! 1800FC00 AAAAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_UNKNOWN_19, 0x0019, 256); /* huge: 1900FC00 9C1F00EA FEFFFFEA FEFFFFEA... */
-+DEF_IE(100_IE_INVAL_1A, 0x001A, -1);
-+
-+DEF_IE(100_IE_DOT11_INVAL_1000, 0x1000, -1);
-+DEF_IE(100_IE_DOT11_STATION_ID, 0x1001, 6); /* huge: 0110FC00 58B10E2F 03000000 00000000... */
-+DEF_IE(100_IE_DOT11_INVAL_1002, 0x1002, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1003, 0x1003, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1004, 0x1004, -1);
-+DEF_IE(100_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1);
-+DEF_IE(100_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1);
-+/* write only: */
-+DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, 32);
-+DEF_IE(100_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4); /* huge: 0810FC00 00020000 F4010000 00000000... */
-+/* undoc but returns something */
-+DEF_IE(100_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* huge: 0910FC00 00000000 00000000 00000000... */
-+DEF_IE(100_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1); /* 0A10FC00 30AAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_CURRENT_ANTENNA, 0x100b, 1); /* 0B10FC00 8FAAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_INVAL_100C, 0x100c, -1);
-+DEF_IE(100_IE_DOT11_TX_POWER_LEVEL, 0x100d, 2); /* 00000000 0100AAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_CURRENT_CCA_MODE, 0x100e, 1); /* 0E10FC00 0DAAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_ED_THRESHOLD, 0x100f, 4); /* 0F10FC00 70000000 AAAAAAAA AAAAAAAA */
-+/* set default key ID */
-+DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1); /* 1010FC00 00AAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_INVAL_1011, 0x1011, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1012, 0x1012, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1013, 0x1013, -1);
-+DEF_IE(100_IE_DOT11_UNKNOWN_1014, 0x1014, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1015, 0x1015, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1016, 0x1016, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1017, 0x1017, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1018, 0x1018, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1019, 0x1019, 256); /* huge */
-+#endif
-+
-+#if 0
-+/* Experimentally obtained on PCI acx111 Xterasys XN-2522g, fw 1.2.1.34
-+** -1 means that fw returned 'invalid IE'
-+** 0400 0800 nnnn... are test read contents: u16 type, u16 len, data
-+** (AA are poison bytes marking bytes not written by fw)
-+**
-+** Looks like acx111 fw reports real len!
-+*/
-+DEF_IE(111_IE_INVAL_00, 0x0000, -1);
-+DEF_IE(111_IE_INVAL_01, 0x0001, -1);
-+DEF_IE(111_IE_POWER_MGMT, 0x0002, 12);
-+/* write only, variable len: 12 + rxqueue_cnt*8 + txqueue_cnt*4: */
-+DEF_IE(111_IE_MEMORY_CONFIG, 0x0003, 24);
-+DEF_IE(111_IE_BLOCK_SIZE, 0x0004, 8); /* 04000800 AA00AAAA AAAAAAAA */
-+/* variable len: 8 + rxqueue_cnt*8 + txqueue_cnt*8: */
-+DEF_IE(111_IE_QUEUE_HEAD, 0x0005, 24);
-+DEF_IE(111_IE_RATE_FALLBACK, 0x0006, 1);
-+/* acx100 name:WEP_OPTIONS */
-+/* said to have len:1 (not true, actually returns 12 bytes): */
-+DEF_IE(111_IE_RADIO_BAND, 0x0007, 12); /* 07000C00 AAAA1F00 FF03AAAA AAAAAAAA */
-+DEF_IE(111_IE_MEMORY_MAP, 0x0008, 48);
-+/* said to have len:4, but gives INVAL on read: */
-+DEF_IE(111_IE_SCAN_STATUS, 0x0009, -1);
-+DEF_IE(111_IE_ASSOC_ID, 0x000a, 2);
-+/* write only, len is not known: */
-+DEF_IE(111_IE_UNKNOWN_0B, 0x000b, 0);
-+/* read only, variable len. I see 67 byte reads: */
-+DEF_IE(111_IE_CONFIG_OPTIONS, 0x000c, 67); /* 0C004300 01160500 ... */
-+DEF_IE(111_IE_FWREV, 0x000d, 24);
-+DEF_IE(111_IE_FCS_ERROR_COUNT, 0x000e, 4);
-+DEF_IE(111_IE_MEDIUM_USAGE, 0x000f, 8);
-+DEF_IE(111_IE_RXCONFIG, 0x0010, 4);
-+DEF_IE(111_IE_QUEUE_THRESH, 0x0011, 12);
-+DEF_IE(111_IE_BSS_POWER_SAVE, 0x0012, 1);
-+/* read only, variable len. I see 240 byte reads: */
-+DEF_IE(111_IE_FIRMWARE_STATISTICS, 0x0013, 240); /* 1300F000 00000000 ... */
-+/* said to have len=17. looks like fw pads it to 20: */
-+DEF_IE(111_IE_INT_CONFIG, 0x0014, 20); /* 14001400 00000000 00000000 00000000 00000000 00000000 */
-+DEF_IE(111_IE_FEATURE_CONFIG, 0x0015, 8);
-+/* said to be name:KEY_INDICATOR, len:4, but gives INVAL on read: */
-+DEF_IE(111_IE_KEY_CHOOSE, 0x0016, -1);
-+/* said to have len:4, but in fact returns 8: */
-+DEF_IE(111_IE_MAX_USB_XFR, 0x0017, 8); /* 17000800 00014000 00000000 */
-+DEF_IE(111_IE_INVAL_18, 0x0018, -1);
-+DEF_IE(111_IE_INVAL_19, 0x0019, -1);
-+/* undoc but returns something: */
-+/* huh, fw indicates len=20 but uses 4 more bytes in buffer??? */
-+DEF_IE(111_IE_UNKNOWN_1A, 0x001A, 20); /* 1A001400 AA00AAAA 0000020F FF030000 00020000 00000007 04000000 */
-+
-+DEF_IE(111_IE_DOT11_INVAL_1000, 0x1000, -1);
-+DEF_IE(111_IE_DOT11_STATION_ID, 0x1001, 6);
-+DEF_IE(111_IE_DOT11_FRAG_THRESH, 0x1002, 2);
-+/* acx100 only? gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_BEACON_PERIOD, 0x1003, -1);
-+/* said to be MAX_RECV_MSDU_LIFETIME: */
-+DEF_IE(111_IE_DOT11_DTIM_PERIOD, 0x1004, 4);
-+DEF_IE(111_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1);
-+DEF_IE(111_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1);
-+/* acx100 only? gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, -1);
-+DEF_IE(111_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4);
-+/* undoc but returns something. maybe it's 2 multicast MACs to listen to? */
-+DEF_IE(111_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* 09100C00 00000000 00000000 00000000 */
-+DEF_IE(111_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1);
-+DEF_IE(111_IE_DOT11_CURRENT_ANTENNA, 0x100b, 2);
-+DEF_IE(111_IE_DOT11_INVAL_100C, 0x100c, -1);
-+DEF_IE(111_IE_DOT11_TX_POWER_LEVEL, 0x100d, 1);
-+/* said to have len=1 but gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_CURRENT_CCA_MODE, 0x100e, -1);
-+/* said to have len=4 but gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_ED_THRESHOLD, 0x100f, -1);
-+/* set default key ID. write only: */
-+DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1);
-+/* undoc but returns something: */
-+DEF_IE(111_IE_DOT11_UNKNOWN_1011, 0x1011, 1); /* 11100100 20 */
-+DEF_IE(111_IE_DOT11_INVAL_1012, 0x1012, -1);
-+DEF_IE(111_IE_DOT11_INVAL_1013, 0x1013, -1);
-+#endif
-+
-+
-+/***********************************************************************
-+**Information Frames Structures
-+*/
-+
-+/* Used in beacon frames and the like */
-+#define DOT11RATEBYTE_1 (1*2)
-+#define DOT11RATEBYTE_2 (2*2)
-+#define DOT11RATEBYTE_5_5 (5*2+1)
-+#define DOT11RATEBYTE_11 (11*2)
-+#define DOT11RATEBYTE_22 (22*2)
-+#define DOT11RATEBYTE_6_G (6*2)
-+#define DOT11RATEBYTE_9_G (9*2)
-+#define DOT11RATEBYTE_12_G (12*2)
-+#define DOT11RATEBYTE_18_G (18*2)
-+#define DOT11RATEBYTE_24_G (24*2)
-+#define DOT11RATEBYTE_36_G (36*2)
-+#define DOT11RATEBYTE_48_G (48*2)
-+#define DOT11RATEBYTE_54_G (54*2)
-+#define DOT11RATEBYTE_BASIC 0x80 /* flags rates included in basic rate set */
-+
-+
-+/***********************************************************************
-+** rxbuffer_t
-+**
-+** This is the format of rx data returned by acx
-+*/
-+
-+/* I've hoped it's a 802.11 PHY header, but no...
-+ * so far, I've seen on acx111:
-+ * 0000 3a00 0000 0000 IBSS Beacons
-+ * 0000 3c00 0000 0000 ESS Beacons
-+ * 0000 2700 0000 0000 Probe requests
-+ * --vda
-+ */
-+typedef struct phy_hdr {
-+ u8 unknown[4];
-+ u8 acx111_unknown[4];
-+} ACX_PACKED phy_hdr_t;
-+
-+/* seems to be a bit similar to hfa384x_rx_frame.
-+ * These fields are still not quite obvious, though.
-+ * Some seem to have different meanings... */
-+
-+#define RXBUF_HDRSIZE 12
-+#define RXBUF_BYTES_RCVD(adev, rxbuf) \
-+ ((le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0xfff) - (adev)->phy_header_len)
-+#define RXBUF_BYTES_USED(rxbuf) \
-+ ((le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0xfff) + RXBUF_HDRSIZE)
-+/* USBism */
-+#define RXBUF_IS_TXSTAT(rxbuf) (le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0x8000)
-+/*
-+mac_cnt_rcvd:
-+ 12 bits: length of frame from control field to first byte of FCS
-+ 3 bits: reserved
-+ 1 bit: 1 = it's a tx status info, not a rx packet (USB only)
-+
-+mac_cnt_mblks:
-+ 6 bits: number of memory block used to store frame in adapter memory
-+ 1 bit: Traffic Indicator bit in TIM of received Beacon was set
-+
-+mac_status: 1 byte (bitmap):
-+ 7 Matching BSSID
-+ 6 Matching SSID
-+ 5 BDCST Address 1 field is a broadcast
-+ 4 VBM received beacon frame has more than one set bit (?!)
-+ 3 TIM Set bit representing this station is set in TIM of received beacon
-+ 2 GROUP Address 1 is a multicast
-+ 1 ADDR1 Address 1 matches our MAC
-+ 0 FCSGD FSC is good
-+
-+phy_stat_baseband: 1 byte (bitmap):
-+ 7 Preamble frame had a long preamble
-+ 6 PLCP Error CRC16 error in PLCP header
-+ 5 Unsup_Mod unsupported modulation
-+ 4 Selected Antenna antenna 1 was used to receive this frame
-+ 3 PBCC/CCK frame used: 1=PBCC, 0=CCK modulation
-+ 2 OFDM frame used OFDM modulation
-+ 1 TI Protection protection frame was detected
-+ 0 Reserved
-+
-+phy_plcp_signal: 1 byte:
-+ Receive PLCP Signal field from the Baseband Processor
-+
-+phy_level: 1 byte:
-+ receive AGC gain level (can be used to measure receive signal strength)
-+
-+phy_snr: 1 byte:
-+ estimated noise power of equalized receive signal
-+ at input of FEC decoder (can be used to measure receive signal quality)
-+
-+time: 4 bytes:
-+ timestamp sampled from either the Access Manager TSF counter
-+ or free-running microsecond counter when the MAC receives
-+ first byte of PLCP header.
-+*/
-+
-+typedef struct rxbuffer {
-+ u16 mac_cnt_rcvd; /* only 12 bits are len! (0xfff) */
-+ u8 mac_cnt_mblks;
-+ u8 mac_status;
-+ u8 phy_stat_baseband; /* bit 0x80: used LNA (Low-Noise Amplifier) */
-+ u8 phy_plcp_signal;
-+ u8 phy_level; /* PHY stat */
-+ u8 phy_snr; /* PHY stat */
-+ u32 time; /* timestamp upon MAC rcv first byte */
-+/* 4-byte (acx100) or 8-byte (acx111) phy header will be here
-+** if RX_CFG1_INCLUDE_PHY_HDR is in effect:
-+** phy_hdr_t phy */
-+ wlan_hdr_a3_t hdr_a3;
-+ /* maximally sized data part of wlan packet */
-+ u8 data_a3[WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN];
-+ /* can add hdr/data_a4 if needed */
-+} ACX_PACKED rxbuffer_t;
-+
-+
-+/*--- Firmware statistics ----------------------------------------------------*/
-+
-+/* define a random 100 bytes more to catch firmware versions which
-+ * provide a bigger struct */
-+#define FW_STATS_FUTURE_EXTENSION 100
-+
-+typedef struct fw_stats_tx {
-+ u32 tx_desc_of;
-+} ACX_PACKED fw_stats_tx_t;
-+
-+typedef struct fw_stats_rx {
-+ u32 rx_oom;
-+ u32 rx_hdr_of;
-+ u32 rx_hw_stuck; /* old: u32 rx_hdr_use_next */
-+ u32 rx_dropped_frame;
-+ u32 rx_frame_ptr_err;
-+ u32 rx_xfr_hint_trig;
-+ u32 rx_aci_events; /* later versions only */
-+ u32 rx_aci_resets; /* later versions only */
-+} ACX_PACKED fw_stats_rx_t;
-+
-+typedef struct fw_stats_dma {
-+ u32 rx_dma_req;
-+ u32 rx_dma_err;
-+ u32 tx_dma_req;
-+ u32 tx_dma_err;
-+} ACX_PACKED fw_stats_dma_t;
-+
-+typedef struct fw_stats_irq {
-+ u32 cmd_cplt;
-+ u32 fiq;
-+ u32 rx_hdrs;
-+ u32 rx_cmplt;
-+ u32 rx_mem_of;
-+ u32 rx_rdys;
-+ u32 irqs;
-+ u32 tx_procs;
-+ u32 decrypt_done;
-+ u32 dma_0_done;
-+ u32 dma_1_done;
-+ u32 tx_exch_complet;
-+ u32 commands;
-+ u32 rx_procs;
-+ u32 hw_pm_mode_changes;
-+ u32 host_acks;
-+ u32 pci_pm;
-+ u32 acm_wakeups;
-+} ACX_PACKED fw_stats_irq_t;
-+
-+typedef struct fw_stats_wep {
-+ u32 wep_key_count;
-+ u32 wep_default_key_count;
-+ u32 dot11_def_key_mib;
-+ u32 wep_key_not_found;
-+ u32 wep_decrypt_fail;
-+ u32 wep_pkt_decrypt;
-+ u32 wep_decrypt_irqs;
-+} ACX_PACKED fw_stats_wep_t;
-+
-+typedef struct fw_stats_pwr {
-+ u32 tx_start_ctr;
-+ u32 no_ps_tx_too_short;
-+ u32 rx_start_ctr;
-+ u32 no_ps_rx_too_short;
-+ u32 lppd_started;
-+ u32 no_lppd_too_noisy;
-+ u32 no_lppd_too_short;
-+ u32 no_lppd_matching_frame;
-+} ACX_PACKED fw_stats_pwr_t;
-+
-+typedef struct fw_stats_mic {
-+ u32 mic_rx_pkts;
-+ u32 mic_calc_fail;
-+} ACX_PACKED fw_stats_mic_t;
-+
-+typedef struct fw_stats_aes {
-+ u32 aes_enc_fail;
-+ u32 aes_dec_fail;
-+ u32 aes_enc_pkts;
-+ u32 aes_dec_pkts;
-+ u32 aes_enc_irq;
-+ u32 aes_dec_irq;
-+} ACX_PACKED fw_stats_aes_t;
-+
-+typedef struct fw_stats_event {
-+ u32 heartbeat;
-+ u32 calibration;
-+ u32 rx_mismatch;
-+ u32 rx_mem_empty;
-+ u32 rx_pool;
-+ u32 oom_late;
-+ u32 phy_tx_err;
-+ u32 tx_stuck;
-+} ACX_PACKED fw_stats_event_t;
-+
-+/* mainly for size calculation only */
-+typedef struct fw_stats {
-+ u16 type;
-+ u16 len;
-+ fw_stats_tx_t tx;
-+ fw_stats_rx_t rx;
-+ fw_stats_dma_t dma;
-+ fw_stats_irq_t irq;
-+ fw_stats_wep_t wep;
-+ fw_stats_pwr_t pwr;
-+ fw_stats_mic_t mic;
-+ fw_stats_aes_t aes;
-+ fw_stats_event_t evt;
-+ u8 _padding[FW_STATS_FUTURE_EXTENSION];
-+} fw_stats_t;
-+
-+/* Firmware version struct */
-+
-+typedef struct fw_ver {
-+ u16 cmd;
-+ u16 size;
-+ char fw_id[20];
-+ u32 hw_id;
-+} ACX_PACKED fw_ver_t;
-+
-+#define FW_ID_SIZE 20
-+
-+typedef struct shared_queueindicator {
-+ u32 indicator;
-+ u16 host_lock;
-+ u16 fw_lock;
-+} ACX_PACKED queueindicator_t;
-+
-+/*--- WEP stuff --------------------------------------------------------------*/
-+#define DOT11_MAX_DEFAULT_WEP_KEYS 4
-+
-+/* non-firmware struct, no packing necessary */
-+typedef struct wep_key {
-+ size_t size; /* most often used member first */
-+ u8 index;
-+ u8 key[29];
-+ u16 strange_filler;
-+} wep_key_t; /* size = 264 bytes (33*8) */
-+/* FIXME: We don't have size 264! Or is there 2 bytes beyond the key
-+ * (strange_filler)? */
-+
-+/* non-firmware struct, no packing necessary */
-+typedef struct key_struct {
-+ u8 addr[ETH_ALEN]; /* 0x00 */
-+ u16 filler1; /* 0x06 */
-+ u32 filler2; /* 0x08 */
-+ u32 index; /* 0x0c */
-+ u16 len; /* 0x10 */
-+ u8 key[29]; /* 0x12; is this long enough??? */
-+} key_struct_t; /* size = 276. FIXME: where is the remaining space?? */
-+
-+
-+/*--- Client (peer) info -----------------------------------------------------*/
-+/* adev->sta_list[] is used for:
-+** accumulating and processing of scan results
-+** keeping client info in AP mode
-+** keeping AP info in STA mode (AP is the only one 'client')
-+** keeping peer info in ad-hoc mode
-+** non-firmware struct --> no packing necessary */
-+enum {
-+ CLIENT_EMPTY_SLOT_0 = 0,
-+ CLIENT_EXIST_1 = 1,
-+ CLIENT_AUTHENTICATED_2 = 2,
-+ CLIENT_ASSOCIATED_3 = 3,
-+ CLIENT_JOIN_CANDIDATE = 4
-+};
-+struct client {
-+ /* most frequent access first */
-+ u8 used; /* misnamed, more like 'status' */
-+ struct client* next;
-+ unsigned long mtime; /* last time we heard it, in jiffies */
-+ size_t essid_len; /* length of ESSID (without '\0') */
-+ u32 sir; /* Standard IR */
-+ u32 snr; /* Signal to Noise Ratio */
-+ u16 aid; /* association ID */
-+ u16 seq; /* from client's auth req */
-+ u16 auth_alg; /* from client's auth req */
-+ u16 cap_info; /* from client's assoc req */
-+ u16 rate_cap; /* what client supports (all rates) */
-+ u16 rate_bas; /* what client supports (basic rates) */
-+ u16 rate_cfg; /* what is allowed (by iwconfig etc) */
-+ u16 rate_cur; /* currently used rate mask */
-+ u8 rate_100; /* currently used rate byte (acx100 only) */
-+ u8 address[ETH_ALEN];
-+ u8 bssid[ETH_ALEN]; /* ad-hoc hosts can have bssid != mac */
-+ u8 channel;
-+ u8 auth_step;
-+ u8 ignore_count;
-+ u8 fallback_count;
-+ u8 stepup_count;
-+ char essid[IW_ESSID_MAX_SIZE + 1]; /* ESSID and trailing '\0' */
-+/* FIXME: this one is too damn big */
-+ char challenge_text[WLAN_CHALLENGE_LEN];
-+};
-+
-+
-+/***********************************************************************
-+** Hardware structures
-+*/
-+
-+/* An opaque typesafe helper type
-+ *
-+ * Some hardware fields are actually pointers,
-+ * but they have to remain u32, since using ptr instead
-+ * (8 bytes on 64bit systems!) would disrupt the fixed descriptor
-+ * format the acx firmware expects in the non-user area.
-+ * Since we cannot cram an 8 byte ptr into 4 bytes, we need to
-+ * enforce that pointed to data remains in low memory
-+ * (address value needs to fit in 4 bytes) on 64bit systems.
-+ *
-+ * This is easy to get wrong, thus we are using a small struct
-+ * and special macros to access it. Macros will check for
-+ * attempts to overflow an acx_ptr with value > 0xffffffff.
-+ *
-+ * Attempts to use acx_ptr without macros result in compile-time errors */
-+
-+typedef struct {
-+ u32 v;
-+} ACX_PACKED acx_ptr;
-+
-+#if ACX_DEBUG
-+#define CHECK32(n) BUG_ON(sizeof(n)>4 && (long)(n)>0xffffff00)
-+#else
-+#define CHECK32(n) ((void)0)
-+#endif
-+
-+/* acx_ptr <-> integer conversion */
-+#define cpu2acx(n) ({ CHECK32(n); ((acx_ptr){ .v = cpu_to_le32(n) }); })
-+#define acx2cpu(a) (le32_to_cpu(a.v))
-+
-+/* acx_ptr <-> pointer conversion */
-+#define ptr2acx(p) ({ CHECK32(p); ((acx_ptr){ .v = cpu_to_le32((u32)(long)(p)) }); })
-+#define acx2ptr(a) ((void*)le32_to_cpu(a.v))
-+
-+/* Values for rate field (acx100 only) */
-+#define RATE100_1 10
-+#define RATE100_2 20
-+#define RATE100_5 55
-+#define RATE100_11 110
-+#define RATE100_22 220
-+/* This bit denotes use of PBCC:
-+** (PBCC encoding is usable with 11 and 22 Mbps speeds only) */
-+#define RATE100_PBCC511 0x80
-+
-+/* Bit values for rate111 field */
-+#define RATE111_1 0x0001 /* DBPSK */
-+#define RATE111_2 0x0002 /* DQPSK */
-+#define RATE111_5 0x0004 /* CCK or PBCC */
-+#define RATE111_6 0x0008 /* CCK-OFDM or OFDM */
-+#define RATE111_9 0x0010 /* CCK-OFDM or OFDM */
-+#define RATE111_11 0x0020 /* CCK or PBCC */
-+#define RATE111_12 0x0040 /* CCK-OFDM or OFDM */
-+#define RATE111_18 0x0080 /* CCK-OFDM or OFDM */
-+#define RATE111_22 0x0100 /* PBCC */
-+#define RATE111_24 0x0200 /* CCK-OFDM or OFDM */
-+#define RATE111_36 0x0400 /* CCK-OFDM or OFDM */
-+#define RATE111_48 0x0800 /* CCK-OFDM or OFDM */
-+#define RATE111_54 0x1000 /* CCK-OFDM or OFDM */
-+#define RATE111_RESERVED 0x2000
-+#define RATE111_PBCC511 0x4000 /* PBCC mod at 5.5 or 11Mbit (else CCK) */
-+#define RATE111_SHORTPRE 0x8000 /* short preamble */
-+/* Special 'try everything' value */
-+#define RATE111_ALL 0x1fff
-+/* These bits denote acx100 compatible settings */
-+#define RATE111_ACX100_COMPAT 0x0127
-+/* These bits denote 802.11b compatible settings */
-+#define RATE111_80211B_COMPAT 0x0027
-+
-+/* Descriptor Ctl field bits
-+ * init value is 0x8e, "idle" value is 0x82 (in idle tx descs)
-+ */
-+#define DESC_CTL_SHORT_PREAMBLE 0x01 /* preamble type: 0 = long; 1 = short */
-+#define DESC_CTL_FIRSTFRAG 0x02 /* this is the 1st frag of the frame */
-+#define DESC_CTL_AUTODMA 0x04
-+#define DESC_CTL_RECLAIM 0x08 /* ready to reuse */
-+#define DESC_CTL_HOSTDONE 0x20 /* host has finished processing */
-+#define DESC_CTL_ACXDONE 0x40 /* acx has finished processing */
-+/* host owns the desc [has to be released last, AFTER modifying all other desc fields!] */
-+#define DESC_CTL_HOSTOWN 0x80
-+#define DESC_CTL_ACXDONE_HOSTOWN (DESC_CTL_ACXDONE | DESC_CTL_HOSTOWN)
-+
-+/* Descriptor Status field
-+ */
-+#define DESC_STATUS_FULL (1 << 31)
-+
-+/* NB: some bits may be interesting for Monitor mode tx (aka Raw tx): */
-+#define DESC_CTL2_SEQ 0x01 /* don't increase sequence field */
-+#define DESC_CTL2_FCS 0x02 /* don't add the FCS */
-+#define DESC_CTL2_MORE_FRAG 0x04
-+#define DESC_CTL2_RETRY 0x08 /* don't increase retry field */
-+#define DESC_CTL2_POWER 0x10 /* don't increase power mgmt. field */
-+#define DESC_CTL2_RTS 0x20 /* do RTS/CTS magic before sending */
-+#define DESC_CTL2_WEP 0x40 /* encrypt this frame */
-+#define DESC_CTL2_DUR 0x80 /* don't increase duration field */
-+
-+/***********************************************************************
-+** PCI structures
-+*/
-+/* IRQ Constants
-+** (outside of "#ifdef PCI" because USB (mis)uses HOST_INT_SCAN_COMPLETE) */
-+#define HOST_INT_RX_DATA 0x0001
-+#define HOST_INT_TX_COMPLETE 0x0002
-+#define HOST_INT_TX_XFER 0x0004
-+#define HOST_INT_RX_COMPLETE 0x0008
-+#define HOST_INT_DTIM 0x0010
-+#define HOST_INT_BEACON 0x0020
-+#define HOST_INT_TIMER 0x0040
-+#define HOST_INT_KEY_NOT_FOUND 0x0080
-+#define HOST_INT_IV_ICV_FAILURE 0x0100
-+#define HOST_INT_CMD_COMPLETE 0x0200
-+#define HOST_INT_INFO 0x0400
-+#define HOST_INT_OVERFLOW 0x0800
-+#define HOST_INT_PROCESS_ERROR 0x1000
-+#define HOST_INT_SCAN_COMPLETE 0x2000
-+#define HOST_INT_FCS_THRESHOLD 0x4000
-+#define HOST_INT_UNKNOWN 0x8000
-+
-+/* Outside of "#ifdef PCI" because USB needs to know sizeof()
-+** of txdesc and rxdesc: */
-+struct txdesc {
-+ acx_ptr pNextDesc; /* pointer to next txdesc */
-+ acx_ptr HostMemPtr; /* 0x04 */
-+ acx_ptr AcxMemPtr; /* 0x08 */
-+ u32 tx_time; /* 0x0c */
-+ u16 total_length; /* 0x10 */
-+ u16 Reserved; /* 0x12 */
-+
-+/* The following 16 bytes do not change when acx100 owns the descriptor */
-+/* BUG: fw clears last byte of this area which is supposedly reserved
-+** for driver use. amd64 blew up. We dare not use it now */
-+ u32 dummy[4];
-+
-+ u8 Ctl_8; /* 0x24, 8bit value */
-+ u8 Ctl2_8; /* 0x25, 8bit value */
-+ u8 error; /* 0x26 */
-+ u8 ack_failures; /* 0x27 */
-+
-+ union {
-+ /*
-+ * Packing doesn't work correctly on ARM unless unions are on
-+ * 4 byte boundaries.
-+ */
-+ struct {
-+ u8 rts_failures; /* 0x28 */
-+ u8 rts_ok; /* 0x29 */
-+ u16 d1;
-+ } ACX_PACKED rts;
-+ struct {
-+ u16 d1;
-+ u8 rate; /* 0x2a */
-+ u8 queue_ctrl; /* 0x2b */
-+ } ACX_PACKED r1;
-+ struct {
-+ u16 d1;
-+ u16 rate111; /* 0x2a */
-+ } ACX_PACKED r2;
-+ } ACX_PACKED u;
-+ u32 queue_info; /* 0x2c (acx100, reserved on acx111) */
-+} ACX_PACKED; /* size : 48 = 0x30 */
-+/* NB: acx111 txdesc structure is 4 byte larger */
-+/* All these 4 extra bytes are reserved. tx alloc code takes them into account */
-+
-+struct rxdesc {
-+ acx_ptr pNextDesc; /* 0x00 */
-+ acx_ptr HostMemPtr; /* 0x04 */
-+ acx_ptr ACXMemPtr; /* 0x08 */
-+ u32 rx_time; /* 0x0c */
-+ u16 total_length; /* 0x10 */
-+ u16 WEP_length; /* 0x12 */
-+ u32 WEP_ofs; /* 0x14 */
-+
-+/* the following 16 bytes do not change when acx100 owns the descriptor */
-+ u8 driverWorkspace[16]; /* 0x18 */
-+
-+ u8 Ctl_8;
-+ u8 rate;
-+ u8 error;
-+ u8 SNR; /* Signal-to-Noise Ratio */
-+ u8 RxLevel;
-+ u8 queue_ctrl;
-+ u16 unknown;
-+ u32 unknown2;
-+} ACX_PACKED; /* size 52 = 0x34 */
-+
-+#if defined(ACX_PCI) || defined(ACX_MEM)
-+
-+/* Register I/O offsets */
-+#define ACX100_EEPROM_ID_OFFSET 0x380
-+
-+/* please add further ACX hardware register definitions only when
-+ it turns out you need them in the driver, and please try to use
-+ firmware functionality instead, since using direct I/O access instead
-+ of letting the firmware do it might confuse the firmware's state
-+ machine */
-+
-+/* ***** ABSOLUTELY ALWAYS KEEP OFFSETS IN SYNC WITH THE INITIALIZATION
-+** OF THE I/O ARRAYS!!!! (grep for '^IO_ACX') ***** */
-+enum {
-+ IO_ACX_SOFT_RESET = 0,
-+
-+ IO_ACX_SLV_MEM_ADDR,
-+ IO_ACX_SLV_MEM_DATA,
-+ IO_ACX_SLV_MEM_CTL,
-+ IO_ACX_SLV_END_CTL,
-+
-+ IO_ACX_FEMR, /* Function Event Mask */
-+
-+ IO_ACX_INT_TRIG,
-+ IO_ACX_IRQ_MASK,
-+ IO_ACX_IRQ_STATUS_NON_DES,
-+ IO_ACX_IRQ_STATUS_CLEAR, /* CLEAR = clear on read */
-+ IO_ACX_IRQ_ACK,
-+ IO_ACX_HINT_TRIG,
-+
-+ IO_ACX_ENABLE,
-+
-+ IO_ACX_EEPROM_CTL,
-+ IO_ACX_EEPROM_ADDR,
-+ IO_ACX_EEPROM_DATA,
-+ IO_ACX_EEPROM_CFG,
-+
-+ IO_ACX_PHY_ADDR,
-+ IO_ACX_PHY_DATA,
-+ IO_ACX_PHY_CTL,
-+
-+ IO_ACX_GPIO_OE,
-+
-+ IO_ACX_GPIO_OUT,
-+
-+ IO_ACX_CMD_MAILBOX_OFFS,
-+ IO_ACX_INFO_MAILBOX_OFFS,
-+ IO_ACX_EEPROM_INFORMATION,
-+
-+ IO_ACX_EE_START,
-+ IO_ACX_SOR_CFG,
-+ IO_ACX_ECPU_CTRL
-+};
-+/* ***** ABSOLUTELY ALWAYS KEEP OFFSETS IN SYNC WITH THE INITIALIZATION
-+** OF THE I/O ARRAYS!!!! (grep for '^IO_ACX') ***** */
-+
-+/* Values for IO_ACX_INT_TRIG register: */
-+/* inform hw that rxdesc in queue needs processing */
-+#define INT_TRIG_RXPRC 0x08
-+/* inform hw that txdesc in queue needs processing */
-+#define INT_TRIG_TXPRC 0x04
-+/* ack that we received info from info mailbox */
-+#define INT_TRIG_INFOACK 0x02
-+/* inform hw that we have filled command mailbox */
-+#define INT_TRIG_CMD 0x01
-+
-+struct txhostdesc {
-+ acx_ptr data_phy; /* 0x00 [u8 *] */
-+ u16 data_offset; /* 0x04 */
-+ u16 reserved; /* 0x06 */
-+ u16 Ctl_16; /* 16bit value, endianness!! */
-+ u16 length; /* 0x0a */
-+ acx_ptr desc_phy_next; /* 0x0c [txhostdesc *] */
-+ acx_ptr pNext; /* 0x10 [txhostdesc *] */
-+ u32 Status; /* 0x14, unused on Tx */
-+/* From here on you can use this area as you want (variable length, too!) */
-+ u8 *data;
-+} ACX_PACKED;
-+
-+struct rxhostdesc {
-+ acx_ptr data_phy; /* 0x00 [rxbuffer_t *] */
-+ u16 data_offset; /* 0x04 */
-+ u16 reserved; /* 0x06 */
-+ u16 Ctl_16; /* 0x08; 16bit value, endianness!! */
-+ u16 length; /* 0x0a */
-+ acx_ptr desc_phy_next; /* 0x0c [rxhostdesc_t *] */
-+ acx_ptr pNext; /* 0x10 [rxhostdesc_t *] */
-+ u32 Status; /* 0x14 */
-+/* From here on you can use this area as you want (variable length, too!) */
-+ rxbuffer_t *data;
-+} ACX_PACKED;
-+
-+#endif /* ACX_PCI */
-+
-+/***********************************************************************
-+** USB structures and constants
-+*/
-+#ifdef ACX_USB
-+
-+/* Used for usb_txbuffer.desc field */
-+#define USB_TXBUF_TXDESC 0xA
-+/* Size of header (everything up to data[]) */
-+#define USB_TXBUF_HDRSIZE 14
-+typedef struct usb_txbuffer {
-+ u16 desc;
-+ u16 mpdu_len;
-+ u8 queue_index;
-+ u8 rate;
-+ u32 hostdata;
-+ u8 ctrl1;
-+ u8 ctrl2;
-+ u16 data_len;
-+ /* wlan packet content is placed here: */
-+ u8 data[WLAN_A4FR_MAXLEN_WEP_FCS];
-+} ACX_PACKED usb_txbuffer_t;
-+
-+/* USB returns either rx packets (see rxbuffer) or
-+** these "tx status" structs: */
-+typedef struct usb_txstatus {
-+ u16 mac_cnt_rcvd; /* only 12 bits are len! (0xfff) */
-+ u8 queue_index;
-+ u8 mac_status; /* seen 0x20 on tx failure */
-+ u32 hostdata;
-+ u8 rate;
-+ u8 ack_failures;
-+ u8 rts_failures;
-+ u8 rts_ok;
-+} ACX_PACKED usb_txstatus_t;
-+
-+typedef struct usb_tx {
-+ unsigned busy:1;
-+ struct urb *urb;
-+ acx_device_t *adev;
-+ /* actual USB bulk output data block is here: */
-+ usb_txbuffer_t bulkout;
-+} usb_tx_t;
-+
-+struct usb_rx_plain {
-+ unsigned busy:1;
-+ struct urb *urb;
-+ acx_device_t *adev;
-+ rxbuffer_t bulkin;
-+};
-+
-+typedef struct usb_rx {
-+ unsigned busy:1;
-+ struct urb *urb;
-+ acx_device_t *adev;
-+ rxbuffer_t bulkin;
-+ /* Make entire structure 4k. Report if it breaks something. */
-+ u8 padding[4*1024 - sizeof(struct usb_rx_plain)];
-+} usb_rx_t;
-+#endif /* ACX_USB */
-+
-+
-+/* Config Option structs */
-+
-+typedef struct co_antennas {
-+ u8 type;
-+ u8 len;
-+ u8 list[2];
-+} ACX_PACKED co_antennas_t;
-+
-+typedef struct co_powerlevels {
-+ u8 type;
-+ u8 len;
-+ u16 list[8];
-+} ACX_PACKED co_powerlevels_t;
-+
-+typedef struct co_datarates {
-+ u8 type;
-+ u8 len;
-+ u8 list[8];
-+} ACX_PACKED co_datarates_t;
-+
-+typedef struct co_domains {
-+ u8 type;
-+ u8 len;
-+ u8 list[6];
-+} ACX_PACKED co_domains_t;
-+
-+typedef struct co_product_id {
-+ u8 type;
-+ u8 len;
-+ u8 list[128];
-+} ACX_PACKED co_product_id_t;
-+
-+typedef struct co_manuf_id {
-+ u8 type;
-+ u8 len;
-+ u8 list[128];
-+} ACX_PACKED co_manuf_t;
-+
-+typedef struct co_fixed {
-+ char NVSv[8];
-+/* u16 NVS_vendor_offs; ACX111-only */
-+/* u16 unknown; ACX111-only */
-+ u8 MAC[6]; /* ACX100-only */
-+ u16 probe_delay; /* ACX100-only */
-+ u32 eof_memory;
-+ u8 dot11CCAModes;
-+ u8 dot11Diversity;
-+ u8 dot11ShortPreambleOption;
-+ u8 dot11PBCCOption;
-+ u8 dot11ChannelAgility;
-+ u8 dot11PhyType; /* FIXME: does 802.11 call it "dot11PHYType"? */
-+ u8 dot11TempType;
-+ u8 table_count;
-+} ACX_PACKED co_fixed_t;
-+
-+typedef struct acx111_ie_configoption {
-+ u16 type;
-+ u16 len;
-+/* Do not access below members directly, they are in fact variable length */
-+ co_fixed_t fixed;
-+ co_antennas_t antennas;
-+ co_powerlevels_t power_levels;
-+ co_datarates_t data_rates;
-+ co_domains_t domains;
-+ co_product_id_t product_id;
-+ co_manuf_t manufacturer;
-+ u8 _padding[4];
-+} ACX_PACKED acx111_ie_configoption_t;
-+
-+
-+/***********************************************************************
-+** Main acx per-device data structure
-+*/
-+#define ACX_STATE_FW_LOADED 0x01
-+#define ACX_STATE_IFACE_UP 0x02
-+
-+/* MAC mode (BSS type) defines
-+ * Note that they shouldn't be redefined, since they are also used
-+ * during communication with firmware */
-+#define ACX_MODE_0_ADHOC 0
-+#define ACX_MODE_1_UNUSED 1
-+#define ACX_MODE_2_STA 2
-+#define ACX_MODE_3_AP 3
-+/* These are our own inventions. Sending these to firmware
-+** makes it stop emitting beacons, which is exactly what we want
-+** for these modes */
-+#define ACX_MODE_MONITOR 0xfe
-+#define ACX_MODE_OFF 0xff
-+/* 'Submode': identifies exact status of ADHOC/STA host */
-+#define ACX_STATUS_0_STOPPED 0
-+#define ACX_STATUS_1_SCANNING 1
-+#define ACX_STATUS_2_WAIT_AUTH 2
-+#define ACX_STATUS_3_AUTHENTICATED 3
-+#define ACX_STATUS_4_ASSOCIATED 4
-+
-+/* FIXME: this should be named something like struct acx_priv (typedef'd to
-+ * acx_priv_t) */
-+
-+/* non-firmware struct, no packing necessary */
-+struct acx_device {
-+ /* most frequent accesses first (dereferencing and cache line!) */
-+
-+ /*** Locking ***/
-+ /* FIXME: try to convert semaphore to more efficient mutex according
-+ to Ingo Molnar's docs (but not before driver is in mainline or
-+ pre-mutex Linux 2.6.10 is very outdated). */
-+ struct semaphore sem;
-+ spinlock_t lock;
-+#if defined(PARANOID_LOCKING) /* Lock debugging */
-+ const char *last_sem;
-+ const char *last_lock;
-+ unsigned long sem_time;
-+ unsigned long lock_time;
-+#endif
-+#ifdef ACX_MEM
-+ spinlock_t txbuf_lock;
-+#endif
-+
-+ /*** Linux network device ***/
-+ struct net_device *ndev; /* pointer to linux netdevice */
-+
-+ /*** Device statistics ***/
-+ struct net_device_stats stats; /* net device statistics */
-+#ifdef WIRELESS_EXT
-+ struct iw_statistics wstats; /* wireless statistics */
-+#endif
-+ /*** Power managment ***/
-+ struct pm_dev *pm; /* PM crap */
-+
-+ /*** Management timer ***/
-+ struct timer_list mgmt_timer;
-+
-+ /*** Hardware identification ***/
-+ const char *chip_name;
-+ u8 dev_type;
-+ u8 chip_type;
-+ u8 form_factor;
-+ u8 radio_type;
-+ u8 eeprom_version;
-+
-+ /*** Config retrieved from EEPROM ***/
-+ char cfgopt_NVSv[8];
-+ u16 cfgopt_NVS_vendor_offs;
-+ u8 cfgopt_MAC[6];
-+ u16 cfgopt_probe_delay;
-+ u32 cfgopt_eof_memory;
-+ u8 cfgopt_dot11CCAModes;
-+ u8 cfgopt_dot11Diversity;
-+ u8 cfgopt_dot11ShortPreambleOption;
-+ u8 cfgopt_dot11PBCCOption;
-+ u8 cfgopt_dot11ChannelAgility;
-+ u8 cfgopt_dot11PhyType;
-+ u8 cfgopt_dot11TempType;
-+ co_antennas_t cfgopt_antennas;
-+ co_powerlevels_t cfgopt_power_levels;
-+ co_datarates_t cfgopt_data_rates;
-+ co_domains_t cfgopt_domains;
-+ co_product_id_t cfgopt_product_id;
-+ co_manuf_t cfgopt_manufacturer;
-+
-+ /*** Firmware identification ***/
-+ char firmware_version[FW_ID_SIZE+1];
-+ u32 firmware_numver;
-+ u32 firmware_id;
-+ const u16 *ie_len;
-+ const u16 *ie_len_dot11;
-+
-+ /*** Device state ***/
-+ u16 dev_state_mask;
-+ u8 led_power; /* power LED status */
-+ u32 get_mask; /* mask of settings to fetch from the card */
-+ u32 set_mask; /* mask of settings to write to the card */
-+
-+ /* Barely used in USB case */
-+ u16 irq_status;
-+
-+ u8 after_interrupt_jobs; /* mini job list for doing actions after an interrupt occurred */
-+ WORK_STRUCT after_interrupt_task; /* our task for after interrupt actions */
-+
-+ /*** scanning ***/
-+ u16 scan_count; /* number of times to do channel scan */
-+ u8 scan_mode; /* 0 == active, 1 == passive, 2 == background */
-+ u8 scan_rate;
-+ u16 scan_duration;
-+ u16 scan_probe_delay;
-+#if WIRELESS_EXT > 15
-+ struct iw_spy_data spy_data; /* FIXME: needs to be implemented! */
-+#endif
-+
-+ /*** Wireless network settings ***/
-+ /* copy of the device address (ifconfig hw ether) that we actually use
-+ ** for 802.11; copied over from the network device's MAC address
-+ ** (ifconfig) when it makes sense only */
-+ u8 dev_addr[MAX_ADDR_LEN];
-+ u8 bssid[ETH_ALEN]; /* the BSSID after having joined */
-+ u8 ap[ETH_ALEN]; /* The AP we want, FF:FF:FF:FF:FF:FF is any */
-+ u16 aid; /* The Association ID sent from the AP / last used AID if we're an AP */
-+ u16 mode; /* mode from iwconfig */
-+ int monitor_type; /* ARPHRD_IEEE80211 or ARPHRD_IEEE80211_PRISM */
-+ u16 status; /* 802.11 association status */
-+ u8 essid_active; /* specific ESSID active, or select any? */
-+ u8 essid_len; /* to avoid dozens of strlen() */
-+ /* INCLUDES \0 termination for easy printf - but many places
-+ ** simply want the string data memcpy'd plus a length indicator!
-+ ** Keep that in mind... */
-+ char essid[IW_ESSID_MAX_SIZE+1];
-+ /* essid we are going to use for association, in case of "essid 'any'"
-+ ** and in case of hidden ESSID (use configured ESSID then) */
-+ char essid_for_assoc[IW_ESSID_MAX_SIZE+1];
-+ char nick[IW_ESSID_MAX_SIZE+1]; /* see essid! */
-+ u8 channel;
-+ u8 reg_dom_id; /* reg domain setting */
-+ u16 reg_dom_chanmask;
-+ u16 auth_or_assoc_retries;
-+ u16 scan_retries;
-+ unsigned long scan_start; /* YES, jiffies is defined as "unsigned long" */
-+
-+ /* stations known to us (if we're an ap) */
-+ client_t sta_list[32]; /* tab is larger than list, so that */
-+ client_t *sta_hash_tab[64]; /* hash collisions are not likely */
-+ client_t *ap_client; /* this one is our AP (STA mode only) */
-+
-+ int dup_count;
-+ int nondup_count;
-+ unsigned long dup_msg_expiry;
-+ u16 last_seq_ctrl; /* duplicate packet detection */
-+
-+ /* 802.11 power save mode */
-+ u8 ps_wakeup_cfg;
-+ u8 ps_listen_interval;
-+ u8 ps_options;
-+ u8 ps_hangover_period;
-+ u32 ps_enhanced_transition_time;
-+ u32 ps_beacon_rx_time;
-+
-+ /*** PHY settings ***/
-+ u8 fallback_threshold;
-+ u8 stepup_threshold;
-+ u16 rate_basic;
-+ u16 rate_oper;
-+ u16 rate_bcast;
-+ u16 rate_bcast100;
-+ u8 rate_auto; /* false if "iwconfig rate N" (WITHOUT 'auto'!) */
-+ u8 preamble_mode; /* 0 == Long Preamble, 1 == Short, 2 == Auto */
-+ u8 preamble_cur;
-+
-+ u8 tx_disabled;
-+ u8 tx_level_dbm;
-+ /* u8 tx_level_val; */
-+ /* u8 tx_level_auto; whether to do automatic power adjustment */
-+
-+ unsigned long recalib_time_last_success;
-+ unsigned long recalib_time_last_attempt;
-+ int recalib_failure_count;
-+ int recalib_msg_ratelimit;
-+ int retry_errors_msg_ratelimit;
-+
-+ unsigned long brange_time_last_state_change; /* time the power LED was last changed */
-+ u8 brange_last_state; /* last state of the LED */
-+ u8 brange_max_quality; /* maximum quality that equates to full speed */
-+
-+ u8 sensitivity;
-+ u8 antenna; /* antenna settings */
-+ u8 ed_threshold; /* energy detect threshold */
-+ u8 cca; /* clear channel assessment */
-+
-+ u16 rts_threshold;
-+ u16 frag_threshold;
-+ u32 short_retry;
-+ u32 long_retry;
-+ u16 msdu_lifetime;
-+ u16 listen_interval; /* given in units of beacon interval */
-+ u32 beacon_interval;
-+
-+ u16 capabilities;
-+ u8 rate_supported_len;
-+ u8 rate_supported[13];
-+
-+ /*** Encryption settings (WEP) ***/
-+ u32 auth_alg; /* used in transmit_authen1 */
-+ u8 wep_enabled;
-+ u8 wep_restricted;
-+ u8 wep_current_index;
-+ wep_key_t wep_keys[DOT11_MAX_DEFAULT_WEP_KEYS]; /* the default WEP keys */
-+ key_struct_t wep_key_struct[10];
-+
-+ /*** Unknown ***/
-+ u8 dtim_interval;
-+
-+#ifdef ACX_MEM
-+ u32 acx_txbuf_start;
-+ int acx_txbuf_numblocks;
-+ u32 acx_txbuf_free; /* addr of head of free list */
-+ int acx_txbuf_blocks_free; /* how many are still open */
-+ queueindicator_t *acx_queue_indicator;
-+#endif
-+
-+ /*** Card Rx/Tx management ***/
-+ u16 rx_config_1;
-+ u16 rx_config_2;
-+ u16 memblocksize;
-+ unsigned int tx_free;
-+ unsigned int tx_head; /* keep as close as possible to Tx stuff below (cache line) */
-+ u16 phy_header_len;
-+
-+/*************************************************************************
-+ *** PCI/USB/... must be last or else hw agnostic code breaks horribly ***
-+ *************************************************************************/
-+
-+ /* hack to let common code compile. FIXME */
-+ dma_addr_t rxhostdesc_startphy;
-+
-+ /*** PCI stuff ***/
-+#if defined(ACX_PCI) || defined(ACX_MEM)
-+ /* pointers to tx buffers, tx host descriptors (in host memory)
-+ ** and tx descs in device memory */
-+ unsigned int tx_tail;
-+ u8 *txbuf_start;
-+ txhostdesc_t *txhostdesc_start;
-+ txdesc_t *txdesc_start; /* points to PCI-mapped memory */
-+ dma_addr_t txbuf_startphy;
-+ dma_addr_t txhostdesc_startphy;
-+ /* sizes of above host memory areas */
-+ unsigned int txbuf_area_size;
-+ unsigned int txhostdesc_area_size;
-+
-+ unsigned int txdesc_size; /* size of txdesc; ACX111 = ACX100 + 4 */
-+ client_t *txc[TX_CNT];
-+ u16 txr[TX_CNT];
-+
-+ /* same for rx */
-+ unsigned int rx_tail;
-+ rxbuffer_t *rxbuf_start;
-+ rxhostdesc_t *rxhostdesc_start;
-+ rxdesc_t *rxdesc_start;
-+ /* physical addresses of above host memory areas */
-+ dma_addr_t rxbuf_startphy;
-+ /* dma_addr_t rxhostdesc_startphy; */
-+ unsigned int rxbuf_area_size;
-+ unsigned int rxhostdesc_area_size;
-+
-+ u8 need_radio_fw;
-+ u8 irqs_active; /* whether irq sending is activated */
-+
-+ const u16 *io; /* points to ACX100 or ACX111 PCI I/O register address set */
-+
-+#ifdef ACX_PCI
-+ struct pci_dev *pdev;
-+#endif
-+#ifdef ACX_MEM
-+ struct device *dev;
-+#endif
-+
-+#ifdef ACX_PCI
-+ unsigned long membase;
-+#endif
-+#ifdef ACX_MEM
-+ volatile u32 *membase;
-+#endif
-+ unsigned long membase2;
-+#ifdef ACX_PCI
-+ void __iomem *iobase;
-+#endif
-+#ifdef ACX_MEM
-+ volatile u32 *iobase;
-+#endif
-+ void __iomem *iobase2;
-+ /* command interface */
-+ u8 __iomem *cmd_area;
-+ u8 __iomem *info_area;
-+
-+ u16 irq_mask; /* interrupt types to mask out (not wanted) with many IRQs activated */
-+ u16 irq_mask_off; /* interrupt types to mask out (not wanted) with IRQs off */
-+ unsigned int irq_loops_this_jiffy;
-+ unsigned long irq_last_jiffies;
-+#endif
-+
-+ /*** USB stuff ***/
-+#ifdef ACX_USB
-+ struct usb_device *usbdev;
-+
-+ rxbuffer_t rxtruncbuf;
-+
-+ usb_tx_t *usb_tx;
-+ usb_rx_t *usb_rx;
-+
-+ int bulkinep; /* bulk-in endpoint */
-+ int bulkoutep; /* bulk-out endpoint */
-+ int rxtruncsize;
-+#endif
-+
-+};
-+
-+static inline acx_device_t*
-+ndev2adev(struct net_device *ndev)
-+{
-+ return netdev_priv(ndev);
-+}
-+
-+
-+/* For use with ACX1xx_IE_RXCONFIG */
-+/* bit description
-+ * 13 include additional header (length etc.) *required*
-+ * struct is defined in 'struct rxbuffer'
-+ * is this bit acx100 only? does acx111 always put the header,
-+ * and bit setting is irrelevant? --vda
-+ * 10 receive frames only with SSID used in last join cmd
-+ * 9 discard broadcast
-+ * 8 receive packets for multicast address 1
-+ * 7 receive packets for multicast address 0
-+ * 6 discard all multicast packets
-+ * 5 discard frames from foreign BSSID
-+ * 4 discard frames with foreign destination MAC address
-+ * 3 promiscuous mode (receive ALL frames, disable filter)
-+ * 2 include FCS
-+ * 1 include phy header
-+ * 0 ???
-+ */
-+#define RX_CFG1_INCLUDE_RXBUF_HDR 0x2000 /* ACX100 only */
-+#define RX_CFG1_FILTER_SSID 0x0400
-+#define RX_CFG1_FILTER_BCAST 0x0200
-+#define RX_CFG1_RCV_MC_ADDR1 0x0100
-+#define RX_CFG1_RCV_MC_ADDR0 0x0080
-+#define RX_CFG1_FILTER_ALL_MULTI 0x0040
-+#define RX_CFG1_FILTER_BSSID 0x0020
-+#define RX_CFG1_FILTER_MAC 0x0010
-+#define RX_CFG1_RCV_PROMISCUOUS 0x0008
-+#define RX_CFG1_INCLUDE_FCS 0x0004
-+#define RX_CFG1_INCLUDE_PHY_HDR (WANT_PHY_HDR ? 0x0002 : 0)
-+/* bit description
-+ * 11 receive association requests etc.
-+ * 10 receive authentication frames
-+ * 9 receive beacon frames
-+ * 8 receive contention free packets
-+ * 7 receive control frames
-+ * 6 receive data frames
-+ * 5 receive broken frames
-+ * 4 receive management frames
-+ * 3 receive probe requests
-+ * 2 receive probe responses
-+ * 1 receive RTS/CTS/ACK frames
-+ * 0 receive other
-+ */
-+#define RX_CFG2_RCV_ASSOC_REQ 0x0800
-+#define RX_CFG2_RCV_AUTH_FRAMES 0x0400
-+#define RX_CFG2_RCV_BEACON_FRAMES 0x0200
-+#define RX_CFG2_RCV_CONTENTION_FREE 0x0100
-+#define RX_CFG2_RCV_CTRL_FRAMES 0x0080
-+#define RX_CFG2_RCV_DATA_FRAMES 0x0040
-+#define RX_CFG2_RCV_BROKEN_FRAMES 0x0020
-+#define RX_CFG2_RCV_MGMT_FRAMES 0x0010
-+#define RX_CFG2_RCV_PROBE_REQ 0x0008
-+#define RX_CFG2_RCV_PROBE_RESP 0x0004
-+#define RX_CFG2_RCV_ACK_FRAMES 0x0002
-+#define RX_CFG2_RCV_OTHER 0x0001
-+
-+/* For use with ACX1xx_IE_FEATURE_CONFIG */
-+#define FEATURE1_80MHZ_CLOCK 0x00000040L
-+#define FEATURE1_4X 0x00000020L
-+#define FEATURE1_LOW_RX 0x00000008L
-+#define FEATURE1_EXTRA_LOW_RX 0x00000001L
-+
-+#define FEATURE2_SNIFFER 0x00000080L
-+#define FEATURE2_NO_TXCRYPT 0x00000001L
-+
-+/*-- get and set mask values --*/
-+#define GETSET_LED_POWER 0x00000001L
-+#define GETSET_STATION_ID 0x00000002L
-+#define SET_TEMPLATES 0x00000004L
-+#define SET_STA_LIST 0x00000008L
-+#define GETSET_TX 0x00000010L
-+#define GETSET_RX 0x00000020L
-+#define SET_RXCONFIG 0x00000040L
-+#define GETSET_ANTENNA 0x00000080L
-+#define GETSET_SENSITIVITY 0x00000100L
-+#define GETSET_TXPOWER 0x00000200L
-+#define GETSET_ED_THRESH 0x00000400L
-+#define GETSET_CCA 0x00000800L
-+#define GETSET_POWER_80211 0x00001000L
-+#define GETSET_RETRY 0x00002000L
-+#define GETSET_REG_DOMAIN 0x00004000L
-+#define GETSET_CHANNEL 0x00008000L
-+/* Used when ESSID changes etc and we need to scan for AP anew */
-+#define GETSET_RESCAN 0x00010000L
-+#define GETSET_MODE 0x00020000L
-+#define GETSET_WEP 0x00040000L
-+#define SET_WEP_OPTIONS 0x00080000L
-+#define SET_MSDU_LIFETIME 0x00100000L
-+#define SET_RATE_FALLBACK 0x00200000L
-+
-+/* keep in sync with the above */
-+#define GETSET_ALL (0 \
-+/* GETSET_LED_POWER */ | 0x00000001L \
-+/* GETSET_STATION_ID */ | 0x00000002L \
-+/* SET_TEMPLATES */ | 0x00000004L \
-+/* SET_STA_LIST */ | 0x00000008L \
-+/* GETSET_TX */ | 0x00000010L \
-+/* GETSET_RX */ | 0x00000020L \
-+/* SET_RXCONFIG */ | 0x00000040L \
-+/* GETSET_ANTENNA */ | 0x00000080L \
-+/* GETSET_SENSITIVITY */| 0x00000100L \
-+/* GETSET_TXPOWER */ | 0x00000200L \
-+/* GETSET_ED_THRESH */ | 0x00000400L \
-+/* GETSET_CCA */ | 0x00000800L \
-+/* GETSET_POWER_80211 */| 0x00001000L \
-+/* GETSET_RETRY */ | 0x00002000L \
-+/* GETSET_REG_DOMAIN */ | 0x00004000L \
-+/* GETSET_CHANNEL */ | 0x00008000L \
-+/* GETSET_RESCAN */ | 0x00010000L \
-+/* GETSET_MODE */ | 0x00020000L \
-+/* GETSET_WEP */ | 0x00040000L \
-+/* SET_WEP_OPTIONS */ | 0x00080000L \
-+/* SET_MSDU_LIFETIME */ | 0x00100000L \
-+/* SET_RATE_FALLBACK */ | 0x00200000L \
-+ )
-+
-+
-+/***********************************************************************
-+** Firmware loading
-+*/
-+#include <linux/firmware.h> /* request_firmware() */
-+#include <linux/pci.h> /* struct pci_device */
-+
-+
-+/***********************************************************************
-+*/
-+typedef struct acx100_ie_memblocksize {
-+ u16 type;
-+ u16 len;
-+ u16 size;
-+} ACX_PACKED acx100_ie_memblocksize_t;
-+
-+typedef struct acx100_ie_queueconfig {
-+ u16 type;
-+ u16 len;
-+ u32 AreaSize;
-+ u32 RxQueueStart;
-+ u8 QueueOptions;
-+ u8 NumTxQueues;
-+ u8 NumRxDesc; /* for USB only */
-+ u8 pad1;
-+ u32 QueueEnd;
-+ u32 HostQueueEnd; /* QueueEnd2 */
-+ u32 TxQueueStart;
-+ u8 TxQueuePri;
-+ u8 NumTxDesc;
-+ u16 pad2;
-+} ACX_PACKED acx100_ie_queueconfig_t;
-+
-+typedef struct acx111_ie_queueconfig {
-+ u16 type;
-+ u16 len;
-+ u32 tx_memory_block_address;
-+ u32 rx_memory_block_address;
-+ u32 rx1_queue_address;
-+ u32 reserved1;
-+ u32 tx1_queue_address;
-+ u8 tx1_attributes;
-+ u16 reserved2;
-+ u8 reserved3;
-+} ACX_PACKED acx111_ie_queueconfig_t;
-+
-+typedef struct acx100_ie_memconfigoption {
-+ u16 type;
-+ u16 len;
-+ u32 DMA_config;
-+ acx_ptr pRxHostDesc;
-+ u32 rx_mem;
-+ u32 tx_mem;
-+ u16 RxBlockNum;
-+ u16 TxBlockNum;
-+} ACX_PACKED acx100_ie_memconfigoption_t;
-+
-+typedef struct acx111_ie_memoryconfig {
-+ u16 type;
-+ u16 len;
-+ u16 no_of_stations;
-+ u16 memory_block_size;
-+ u8 tx_rx_memory_block_allocation;
-+ u8 count_rx_queues;
-+ u8 count_tx_queues;
-+ u8 options;
-+ u8 fragmentation;
-+ u16 reserved1;
-+ u8 reserved2;
-+
-+ /* start of rx1 block */
-+ u8 rx_queue1_count_descs;
-+ u8 rx_queue1_reserved1;
-+ u8 rx_queue1_type; /* must be set to 7 */
-+ u8 rx_queue1_prio; /* must be set to 0 */
-+ acx_ptr rx_queue1_host_rx_start;
-+ /* end of rx1 block */
-+
-+ /* start of tx1 block */
-+ u8 tx_queue1_count_descs;
-+ u8 tx_queue1_reserved1;
-+ u8 tx_queue1_reserved2;
-+ u8 tx_queue1_attributes;
-+ /* end of tx1 block */
-+} ACX_PACKED acx111_ie_memoryconfig_t;
-+
-+typedef struct acx_ie_memmap {
-+ u16 type;
-+ u16 len;
-+ u32 CodeStart;
-+ u32 CodeEnd;
-+ u32 WEPCacheStart;
-+ u32 WEPCacheEnd;
-+ u32 PacketTemplateStart;
-+ u32 PacketTemplateEnd;
-+ u32 QueueStart;
-+ u32 QueueEnd;
-+ u32 PoolStart;
-+ u32 PoolEnd;
-+} ACX_PACKED acx_ie_memmap_t;
-+
-+typedef struct acx111_ie_feature_config {
-+ u16 type;
-+ u16 len;
-+ u32 feature_options;
-+ u32 data_flow_options;
-+} ACX_PACKED acx111_ie_feature_config_t;
-+
-+typedef struct acx111_ie_tx_level {
-+ u16 type;
-+ u16 len;
-+ u8 level;
-+} ACX_PACKED acx111_ie_tx_level_t;
-+
-+#define PS_CFG_ENABLE 0x80
-+#define PS_CFG_PENDING 0x40 /* status flag when entering PS */
-+#define PS_CFG_WAKEUP_MODE_MASK 0x07
-+#define PS_CFG_WAKEUP_BY_HOST 0x03
-+#define PS_CFG_WAKEUP_EACH_ITVL 0x02
-+#define PS_CFG_WAKEUP_ON_DTIM 0x01
-+#define PS_CFG_WAKEUP_ALL_BEAC 0x00
-+
-+/* Enhanced PS mode: sleep until Rx Beacon w/ the STA's AID bit set
-+** in the TIM; newer firmwares only(?) */
-+#define PS_OPT_ENA_ENHANCED_PS 0x04
-+#define PS_OPT_TX_PSPOLL 0x02 /* send PSPoll frame to fetch waiting frames from AP (on frame with matching AID) */
-+#define PS_OPT_STILL_RCV_BCASTS 0x01
-+
-+typedef struct acx100_ie_powersave {
-+ u16 type;
-+ u16 len;
-+ u8 wakeup_cfg;
-+ u8 listen_interval; /* for EACH_ITVL: wake up every "beacon units" interval */
-+ u8 options;
-+ u8 hangover_period; /* remaining wake time after Tx MPDU w/ PS bit, in values of 1/1024 seconds */
-+ u16 enhanced_ps_transition_time; /* rem. wake time for Enh. PS */
-+} ACX_PACKED acx100_ie_powersave_t;
-+
-+typedef struct acx111_ie_powersave {
-+ u16 type;
-+ u16 len;
-+ u8 wakeup_cfg;
-+ u8 listen_interval; /* for EACH_ITVL: wake up every "beacon units" interval */
-+ u8 options;
-+ u8 hangover_period; /* remaining wake time after Tx MPDU w/ PS bit, in values of 1/1024 seconds */
-+ u32 beacon_rx_time;
-+ u32 enhanced_ps_transition_time; /* rem. wake time for Enh. PS */
-+} ACX_PACKED acx111_ie_powersave_t;
-+
-+
-+/***********************************************************************
-+** Commands and template structures
-+*/
-+
-+/*
-+** SCAN command structure
-+**
-+** even though acx100 scan rates match RATE100 constants,
-+** acx111 ones do not match! Therefore we do not use RATE100 #defines */
-+#define ACX_SCAN_RATE_1 10
-+#define ACX_SCAN_RATE_2 20
-+#define ACX_SCAN_RATE_5 55
-+#define ACX_SCAN_RATE_11 110
-+#define ACX_SCAN_RATE_22 220
-+#define ACX_SCAN_RATE_PBCC 0x80 /* OR with this if needed */
-+#define ACX_SCAN_OPT_ACTIVE 0x00 /* a bit mask */
-+#define ACX_SCAN_OPT_PASSIVE 0x01
-+/* Background scan: we go into Power Save mode (by transmitting
-+** NULL data frame to AP with the power mgmt bit set), do the scan,
-+** and then exit Power Save mode. A plus is that AP buffers frames
-+** for us while we do background scan. Thus we avoid frame losses.
-+** Background scan can be active or passive, just like normal one */
-+#define ACX_SCAN_OPT_BACKGROUND 0x02
-+typedef struct acx100_scan {
-+ u16 count; /* number of scans to do, 0xffff == continuous */
-+ u16 start_chan;
-+ u16 flags; /* channel list mask; 0x8000 == all channels? */
-+ u8 max_rate; /* max. probe rate */
-+ u8 options; /* bit mask, see defines above */
-+ u16 chan_duration;
-+ u16 max_probe_delay;
-+} ACX_PACKED acx100_scan_t; /* length 0xc */
-+
-+#define ACX111_SCAN_RATE_6 0x0B
-+#define ACX111_SCAN_RATE_9 0x0F
-+#define ACX111_SCAN_RATE_12 0x0A
-+#define ACX111_SCAN_RATE_18 0x0E
-+#define ACX111_SCAN_RATE_24 0x09
-+#define ACX111_SCAN_RATE_36 0x0D
-+#define ACX111_SCAN_RATE_48 0x08
-+#define ACX111_SCAN_RATE_54 0x0C
-+#define ACX111_SCAN_OPT_5GHZ 0x04 /* else 2.4GHZ */
-+#define ACX111_SCAN_MOD_SHORTPRE 0x01 /* you can combine SHORTPRE and PBCC */
-+#define ACX111_SCAN_MOD_PBCC 0x80
-+#define ACX111_SCAN_MOD_OFDM 0x40
-+typedef struct acx111_scan {
-+ u16 count; /* number of scans to do */
-+ u8 channel_list_select; /* 0: scan all channels, 1: from chan_list only */
-+ u16 reserved1;
-+ u8 reserved2;
-+ u8 rate; /* rate for probe requests (if active scan) */
-+ u8 options; /* bit mask, see defines above */
-+ u16 chan_duration; /* min time to wait for reply on one channel (in TU) */
-+ /* (active scan only) (802.11 section 11.1.3.2.2) */
-+ u16 max_probe_delay; /* max time to wait for reply on one channel (active scan) */
-+ /* time to listen on a channel (passive scan) */
-+ u8 modulation;
-+ u8 channel_list[26]; /* bits 7:0 first byte: channels 8:1 */
-+ /* bits 7:0 second byte: channels 16:9 */
-+ /* 26 bytes is enough to cover 802.11a */
-+} ACX_PACKED acx111_scan_t;
-+
-+
-+/*
-+** Radio calibration command structure
-+*/
-+typedef struct acx111_cmd_radiocalib {
-+/* 0x80000000 == automatic calibration by firmware, according to interval;
-+ * bits 0..3: select calibration methods to go through:
-+ * calib based on DC, AfeDC, Tx mismatch, Tx equilization */
-+ u32 methods;
-+ u32 interval;
-+} ACX_PACKED acx111_cmd_radiocalib_t;
-+
-+
-+/*
-+** Packet template structures
-+**
-+** Packet templates store contents of Beacon, Probe response, Probe request,
-+** Null data frame, and TIM data frame. Firmware automatically transmits
-+** contents of template at appropriate time:
-+** - Beacon: when configured as AP or Ad-hoc
-+** - Probe response: when configured as AP or Ad-hoc, whenever
-+** a Probe request frame is received
-+** - Probe request: when host issues SCAN command (active)
-+** - Null data frame: when entering 802.11 power save mode
-+** - TIM data: at the end of Beacon frames (if no TIM template
-+** is configured, then transmits default TIM)
-+** NB:
-+** - size field must be set to size of actual template
-+** (NOT sizeof(struct) - templates are variable in length),
-+** size field is not itself counted.
-+** - members flagged with an asterisk must be initialized with host,
-+** rest must be zero filled.
-+** - variable length fields shown only in comments */
-+typedef struct acx_template_tim {
-+ u16 size;
-+ u8 tim_eid; /* 00 1 TIM IE ID * */
-+ u8 len; /* 01 1 Length * */
-+ u8 dtim_cnt; /* 02 1 DTIM Count */
-+ u8 dtim_period; /* 03 1 DTIM Period */
-+ u8 bitmap_ctrl; /* 04 1 Bitmap Control * (except bit0) */
-+ /* 05 n Partial Virtual Bitmap * */
-+ u8 variable[0x100 - 1-1-1-1-1];
-+} ACX_PACKED acx_template_tim_t;
-+
-+typedef struct acx_template_probereq {
-+ u16 size;
-+ u16 fc; /* 00 2 fc * */
-+ u16 dur; /* 02 2 Duration */
-+ u8 da[6]; /* 04 6 Destination Address * */
-+ u8 sa[6]; /* 0A 6 Source Address * */
-+ u8 bssid[6]; /* 10 6 BSSID * */
-+ u16 seq; /* 16 2 Sequence Control */
-+ /* 18 n SSID * */
-+ /* nn n Supported Rates * */
-+ u8 variable[0x44 - 2-2-6-6-6-2];
-+} ACX_PACKED acx_template_probereq_t;
-+
-+typedef struct acx_template_proberesp {
-+ u16 size;
-+ u16 fc; /* 00 2 fc * (bits [15:12] and [10:8] per 802.11 section 7.1.3.1) */
-+ u16 dur; /* 02 2 Duration */
-+ u8 da[6]; /* 04 6 Destination Address */
-+ u8 sa[6]; /* 0A 6 Source Address */
-+ u8 bssid[6]; /* 10 6 BSSID */
-+ u16 seq; /* 16 2 Sequence Control */
-+ u8 timestamp[8];/* 18 8 Timestamp */
-+ u16 beacon_interval; /* 20 2 Beacon Interval * */
-+ u16 cap; /* 22 2 Capability Information * */
-+ /* 24 n SSID * */
-+ /* nn n Supported Rates * */
-+ /* nn 1 DS Parameter Set * */
-+ u8 variable[0x54 - 2-2-6-6-6-2-8-2-2];
-+} ACX_PACKED acx_template_proberesp_t;
-+#define acx_template_beacon_t acx_template_proberesp_t
-+#define acx_template_beacon acx_template_proberesp
-+
-+typedef struct acx_template_nullframe {
-+ u16 size;
-+ struct wlan_hdr_a3 hdr;
-+} ACX_PACKED acx_template_nullframe_t;
-+
-+
-+/*
-+** JOIN command structure
-+**
-+** as opposed to acx100, acx111 dtim interval is AFTER rates_basic111.
-+** NOTE: took me about an hour to get !@#$%^& packing right --> struct packing is eeeeevil... */
-+typedef struct acx_joinbss {
-+ u8 bssid[ETH_ALEN];
-+ u16 beacon_interval;
-+ union {
-+ struct {
-+ u8 dtim_interval;
-+ u8 rates_basic;
-+ u8 rates_supported;
-+ /*
-+ * ARM compiler doesn't pack correctly unless unions
-+ * inside structures are multiples of 4 bytes. Ugh.
-+ */
-+ u8 genfrm_txrate; /* generated frame (bcn, proberesp, RTS, PSpoll) tx rate */
-+ } ACX_PACKED acx100;
-+ struct {
-+ u16 rates_basic;
-+ u8 dtim_interval;
-+ u8 genfrm_txrate; /* generated frame (bcn, proberesp, RTS, PSpoll) tx rate */
-+ } ACX_PACKED acx111;
-+ /*
-+ * ARM compiler doesn't pack correctly unles unions are aligned on
-+ * 4 byte boundaries and are multiples of 4 bytes.
-+ */
-+ struct {
-+ u8 d1;
-+ u8 d2;
-+ u8 d3;
-+ u8 genfrm_txrate;
-+ } ACX_PACKED txrate;
-+ } ACX_PACKED u;
-+ u8 genfrm_mod_pre; /* generated frame modulation/preamble:
-+ ** bit7: PBCC, bit6: OFDM (else CCK/DQPSK/DBPSK)
-+ ** bit5: short pre */
-+ u8 macmode; /* BSS Type, must be one of ACX_MODE_xxx */
-+ u8 channel;
-+ u8 essid_len;
-+ char essid[IW_ESSID_MAX_SIZE];
-+} ACX_PACKED acx_joinbss_t;
-+
-+#define JOINBSS_RATES_1 0x01
-+#define JOINBSS_RATES_2 0x02
-+#define JOINBSS_RATES_5 0x04
-+#define JOINBSS_RATES_11 0x08
-+#define JOINBSS_RATES_22 0x10
-+
-+/* Looks like missing bits are used to indicate 11g rates!
-+** (it follows from the fact that constants below match 1:1 to RATE111_nn)
-+** This was actually seen! Look at that Assoc Request sent by acx111,
-+** it _does_ contain 11g rates in basic set:
-+01:30:20.070772 Beacon (xxx) [1.0* 2.0* 5.5* 11.0* 6.0* 9.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit] ESS CH: 1
-+01:30:20.074425 Authentication (Open System)-1: Succesful
-+01:30:20.076539 Authentication (Open System)-2:
-+01:30:20.076620 Acknowledgment
-+01:30:20.088546 Assoc Request (xxx) [1.0* 2.0* 5.5* 6.0* 9.0* 11.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit]
-+01:30:20.122413 Assoc Response AID(1) :: Succesful
-+01:30:20.122679 Acknowledgment
-+01:30:20.173204 Beacon (xxx) [1.0* 2.0* 5.5* 11.0* 6.0* 9.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit] ESS CH: 1
-+*/
-+#define JOINBSS_RATES_BASIC111_1 0x0001
-+#define JOINBSS_RATES_BASIC111_2 0x0002
-+#define JOINBSS_RATES_BASIC111_5 0x0004
-+#define JOINBSS_RATES_BASIC111_11 0x0020
-+#define JOINBSS_RATES_BASIC111_22 0x0100
-+
-+
-+/***********************************************************************
-+*/
-+typedef struct mem_read_write {
-+ u16 addr;
-+ u16 type; /* 0x0 int. RAM / 0xffff MAC reg. / 0x81 PHY RAM / 0x82 PHY reg.; or maybe it's actually 0x30 for MAC? Better verify it by writing and reading back and checking whether the value holds! */
-+ u32 len;
-+ u32 data;
-+} ACX_PACKED mem_read_write_t;
-+
-+typedef struct firmware_image {
-+ u32 chksum;
-+ u32 size;
-+ u8 data[1]; /* the byte array of the actual firmware... */
-+} ACX_PACKED firmware_image_t;
-+
-+typedef struct acx_cmd_radioinit {
-+ u32 offset;
-+ u32 len;
-+} ACX_PACKED acx_cmd_radioinit_t;
-+
-+typedef struct acx100_ie_wep_options {
-+ u16 type;
-+ u16 len;
-+ u16 NumKeys; /* max # of keys */
-+ u8 WEPOption; /* 0 == decrypt default key only, 1 == override decrypt */
-+ u8 Pad; /* used only for acx111 */
-+} ACX_PACKED acx100_ie_wep_options_t;
-+
-+typedef struct ie_dot11WEPDefaultKey {
-+ u16 type;
-+ u16 len;
-+ u8 action;
-+ u8 keySize;
-+ u8 defaultKeyNum;
-+ u8 key[29]; /* check this! was Key[19] */
-+} ACX_PACKED ie_dot11WEPDefaultKey_t;
-+
-+typedef struct acx111WEPDefaultKey {
-+ u8 MacAddr[ETH_ALEN];
-+ u16 action; /* NOTE: this is a u16, NOT a u8!! */
-+ u16 reserved;
-+ u8 keySize;
-+ u8 type;
-+ u8 index;
-+ u8 defaultKeyNum;
-+ u8 counter[6];
-+ u8 key[32]; /* up to 32 bytes (for TKIP!) */
-+} ACX_PACKED acx111WEPDefaultKey_t;
-+
-+typedef struct ie_dot11WEPDefaultKeyID {
-+ u16 type;
-+ u16 len;
-+ u8 KeyID;
-+} ACX_PACKED ie_dot11WEPDefaultKeyID_t;
-+
-+typedef struct acx100_cmd_wep_mgmt {
-+ u8 MacAddr[ETH_ALEN];
-+ u16 Action;
-+ u16 KeySize;
-+ u8 Key[29]; /* 29*8 == 232bits == WEP256 */
-+} ACX_PACKED acx100_cmd_wep_mgmt_t;
-+
-+typedef struct acx_ie_generic {
-+ u16 type;
-+ u16 len;
-+ union {
-+ /* Association ID IE: just a 16bit value: */
-+ u16 aid;
-+ /* generic member for quick implementation of commands */
-+ u8 bytes[32];
-+ } ACX_PACKED m;
-+} ACX_PACKED acx_ie_generic_t;
-+
-+/***********************************************************************
-+*/
-+#define CHECK_SIZEOF(type,size) { \
-+ extern void BUG_bad_size_for_##type(void); \
-+ if (sizeof(type)!=(size)) BUG_bad_size_for_##type(); \
-+}
-+
-+static inline void
-+acx_struct_size_check(void)
-+{
-+ CHECK_SIZEOF(txdesc_t, 0x30);
-+ CHECK_SIZEOF(acx100_ie_memconfigoption_t, 24);
-+ CHECK_SIZEOF(acx100_ie_queueconfig_t, 0x20);
-+ CHECK_SIZEOF(acx_joinbss_t, 0x30);
-+ /* IEs need 4 bytes for (type,len) tuple */
-+ CHECK_SIZEOF(acx111_ie_configoption_t, ACX111_IE_CONFIG_OPTIONS_LEN + 4);
-+}
-+
-+
-+/***********************************************************************
-+** Global data
-+*/
-+extern const u8 acx_bitpos2ratebyte[];
-+extern const u8 acx_bitpos2rate100[];
-+
-+extern const u8 acx_reg_domain_ids[];
-+extern const char * const acx_reg_domain_strings[];
-+enum {
-+ acx_reg_domain_ids_len = 8
-+};
-+
-+extern const struct iw_handler_def acx_ioctl_handler_def;
-Index: linux-2.6.22/drivers/net/wireless/acx/common.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/common.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,7388 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/types.h>
-+#include <linux/slab.h>
-+#include <linux/delay.h>
-+#include <linux/proc_fs.h>
-+#include <linux/if_arp.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/wireless.h>
-+#include <linux/pm.h>
-+#include <linux/vmalloc.h>
-+#include <net/iw_handler.h>
-+
-+#include "acx_hw.h"
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+*/
-+static client_t *acx_l_sta_list_alloc(acx_device_t *adev);
-+static client_t *acx_l_sta_list_get_from_hash(acx_device_t *adev, const u8 *address);
-+
-+static int acx_l_process_data_frame_master(acx_device_t *adev, rxbuffer_t *rxbuf);
-+static int acx_l_process_data_frame_client(acx_device_t *adev, rxbuffer_t *rxbuf);
-+/* static int acx_l_process_NULL_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala); */
-+static int acx_l_process_mgmt_frame(acx_device_t *adev, rxbuffer_t *rxbuf);
-+static void acx_l_process_disassoc_from_sta(acx_device_t *adev, const wlan_fr_disassoc_t *req);
-+static void acx_l_process_disassoc_from_ap(acx_device_t *adev, const wlan_fr_disassoc_t *req);
-+static void acx_l_process_deauth_from_sta(acx_device_t *adev, const wlan_fr_deauthen_t *req);
-+static void acx_l_process_deauth_from_ap(acx_device_t *adev, const wlan_fr_deauthen_t *req);
-+static int acx_l_process_probe_response(acx_device_t *adev, wlan_fr_proberesp_t *req, const rxbuffer_t *rxbuf);
-+static int acx_l_process_assocresp(acx_device_t *adev, const wlan_fr_assocresp_t *req);
-+static int acx_l_process_reassocresp(acx_device_t *adev, const wlan_fr_reassocresp_t *req);
-+static int acx_l_process_authen(acx_device_t *adev, const wlan_fr_authen_t *req);
-+static int acx_l_transmit_assocresp(acx_device_t *adev, const wlan_fr_assocreq_t *req);
-+static int acx_l_transmit_reassocresp(acx_device_t *adev, const wlan_fr_reassocreq_t *req);
-+static int acx_l_transmit_deauthen(acx_device_t *adev, const u8 *addr, u16 reason);
-+static int acx_l_transmit_authen1(acx_device_t *adev);
-+static int acx_l_transmit_authen2(acx_device_t *adev, const wlan_fr_authen_t *req, client_t *clt);
-+static int acx_l_transmit_authen3(acx_device_t *adev, const wlan_fr_authen_t *req);
-+static int acx_l_transmit_authen4(acx_device_t *adev, const wlan_fr_authen_t *req);
-+static int acx_l_transmit_assoc_req(acx_device_t *adev);
-+
-+
-+/***********************************************************************
-+*/
-+#if ACX_DEBUG
-+unsigned int acx_debug /* will add __read_mostly later */ = ACX_DEFAULT_MSG;
-+/* parameter is 'debug', corresponding var is acx_debug */
-+module_param_named(debug, acx_debug, uint, 0);
-+MODULE_PARM_DESC(debug, "Debug level mask (see L_xxx constants)");
-+#endif
-+
-+#ifdef MODULE_LICENSE
-+MODULE_LICENSE("Dual MPL/GPL");
-+#endif
-+/* USB had this: MODULE_AUTHOR("Martin Wawro <martin.wawro AT uni-dortmund.de>"); */
-+MODULE_AUTHOR("ACX100 Open Source Driver development team");
-+MODULE_DESCRIPTION("Driver for TI ACX1xx based wireless cards (CardBus/PCI/USB)");
-+
-+
-+/***********************************************************************
-+*/
-+/* Probably a number of acx's intermediate buffers for USB transfers,
-+** not to be confused with number of descriptors in tx/rx rings
-+** (which are not directly accessible to host in USB devices) */
-+#define USB_RX_CNT 10
-+#define USB_TX_CNT 10
-+
-+
-+/***********************************************************************
-+*/
-+
-+/* minutes to wait until next radio recalibration: */
-+#define RECALIB_PAUSE 5
-+
-+/* Please keep acx_reg_domain_ids_len in sync... */
-+const u8 acx_reg_domain_ids[acx_reg_domain_ids_len] =
-+ { 0x10, 0x20, 0x30, 0x31, 0x32, 0x40, 0x41, 0x51 };
-+static const u16 reg_domain_channel_masks[acx_reg_domain_ids_len] =
-+#ifdef ACX_ALLOW_ALLCHANNELS
-+ { 0x3fff, 0x07ff, 0x1fff, 0x0600, 0x1e00, 0x2000, 0x3fff, 0x01fc };
-+#else
-+ { 0x07ff, 0x07ff, 0x1fff, 0x0600, 0x1e00, 0x2000, 0x3fff, 0x01fc };
-+#endif
-+const char * const
-+acx_reg_domain_strings[] = {
-+ /* 0 */ " 1-11 FCC (USA)",
-+ /* 1 */ " 1-11 DOC/IC (Canada)",
-+/* BTW: WLAN use in ETSI is regulated by ETSI standard EN 300 328-2 V1.1.2 */
-+ /* 2 */ " 1-13 ETSI (Europe)",
-+ /* 3 */ "10-11 Spain",
-+ /* 4 */ "10-13 France",
-+ /* 5 */ " 14 MKK (Japan)",
-+ /* 6 */ " 1-14 MKK1",
-+ /* 7 */ " 3-9 Israel (not all firmware versions)",
-+ NULL /* needs to remain as last entry */
-+};
-+
-+
-+
-+/***********************************************************************
-+** Debugging support
-+*/
-+#ifdef PARANOID_LOCKING
-+static unsigned max_lock_time;
-+static unsigned max_sem_time;
-+
-+void
-+acx_lock_unhold() { max_lock_time = 0; }
-+void
-+acx_sem_unhold() { max_sem_time = 0; }
-+
-+static inline const char*
-+sanitize_str(const char *s)
-+{
-+ const char* t = strrchr(s, '/');
-+ if (t) return t + 1;
-+ return s;
-+}
-+
-+void
-+acx_lock_debug(acx_device_t *adev, const char* where)
-+{
-+ unsigned int count = 100*1000*1000;
-+ where = sanitize_str(where);
-+ while (--count) {
-+ if (!spin_is_locked(&adev->lock)) break;
-+ cpu_relax();
-+ }
-+ if (!count) {
-+ printk(KERN_EMERG "LOCKUP: already taken at %s!\n", adev->last_lock);
-+ BUG();
-+ }
-+ adev->last_lock = where;
-+ rdtscl(adev->lock_time);
-+}
-+void
-+acx_unlock_debug(acx_device_t *adev, const char* where)
-+{
-+#ifdef SMP
-+ if (!spin_is_locked(&adev->lock)) {
-+ where = sanitize_str(where);
-+ printk(KERN_EMERG "STRAY UNLOCK at %s!\n", where);
-+ BUG();
-+ }
-+#endif
-+ if (acx_debug & L_LOCK) {
-+ unsigned long diff;
-+ rdtscl(diff);
-+ diff -= adev->lock_time;
-+ if (diff > max_lock_time) {
-+ where = sanitize_str(where);
-+ printk("max lock hold time %ld CPU ticks from %s "
-+ "to %s\n", diff, adev->last_lock, where);
-+ max_lock_time = diff;
-+ }
-+ }
-+}
-+void
-+acx_down_debug(acx_device_t *adev, const char* where)
-+{
-+ int sem_count;
-+ unsigned long timeout = jiffies + 5*HZ;
-+
-+ where = sanitize_str(where);
-+
-+ for (;;) {
-+ sem_count = atomic_read(&adev->sem.count);
-+ if (sem_count) break;
-+ if (time_after(jiffies, timeout))
-+ break;
-+ msleep(5);
-+ }
-+ if (!sem_count) {
-+ printk(KERN_EMERG "D STATE at %s! last sem at %s\n",
-+ where, adev->last_sem);
-+ dump_stack();
-+ }
-+ adev->last_sem = where;
-+ adev->sem_time = jiffies;
-+ down(&adev->sem);
-+ if (acx_debug & L_LOCK) {
-+ printk("%s: sem_down %d -> %d\n",
-+ where, sem_count, atomic_read(&adev->sem.count));
-+ }
-+}
-+void
-+acx_up_debug(acx_device_t *adev, const char* where)
-+{
-+ int sem_count = atomic_read(&adev->sem.count);
-+ if (sem_count) {
-+ where = sanitize_str(where);
-+ printk(KERN_EMERG "STRAY UP at %s! sem.count=%d\n", where, sem_count);
-+ dump_stack();
-+ }
-+ if (acx_debug & L_LOCK) {
-+ unsigned long diff = jiffies - adev->sem_time;
-+ if (diff > max_sem_time) {
-+ where = sanitize_str(where);
-+ printk("max sem hold time %ld jiffies from %s "
-+ "to %s\n", diff, adev->last_sem, where);
-+ max_sem_time = diff;
-+ }
-+ }
-+ up(&adev->sem);
-+ if (acx_debug & L_LOCK) {
-+ where = sanitize_str(where);
-+ printk("%s: sem_up %d -> %d\n",
-+ where, sem_count, atomic_read(&adev->sem.count));
-+ }
-+}
-+#endif /* PARANOID_LOCKING */
-+
-+
-+/***********************************************************************
-+*/
-+#if ACX_DEBUG > 1
-+
-+static int acx_debug_func_indent;
-+#define DEBUG_TSC 0
-+#define FUNC_INDENT_INCREMENT 2
-+
-+#if DEBUG_TSC
-+#define TIMESTAMP(d) unsigned long d; rdtscl(d)
-+#else
-+#define TIMESTAMP(d) unsigned long d = jiffies
-+#endif
-+
-+static const char
-+spaces[] = " " " "; /* Nx10 spaces */
-+
-+void
-+log_fn_enter(const char *funcname)
-+{
-+ int indent;
-+ TIMESTAMP(d);
-+
-+ indent = acx_debug_func_indent;
-+ if (indent >= sizeof(spaces))
-+ indent = sizeof(spaces)-1;
-+
-+ printk("%08ld %s==> %s\n",
-+ d % 100000000,
-+ spaces + (sizeof(spaces)-1) - indent,
-+ funcname
-+ );
-+
-+ acx_debug_func_indent += FUNC_INDENT_INCREMENT;
-+}
-+void
-+log_fn_exit(const char *funcname)
-+{
-+ int indent;
-+ TIMESTAMP(d);
-+
-+ acx_debug_func_indent -= FUNC_INDENT_INCREMENT;
-+
-+ indent = acx_debug_func_indent;
-+ if (indent >= sizeof(spaces))
-+ indent = sizeof(spaces)-1;
-+
-+ printk("%08ld %s<== %s\n",
-+ d % 100000000,
-+ spaces + (sizeof(spaces)-1) - indent,
-+ funcname
-+ );
-+}
-+void
-+log_fn_exit_v(const char *funcname, int v)
-+{
-+ int indent;
-+ TIMESTAMP(d);
-+
-+ acx_debug_func_indent -= FUNC_INDENT_INCREMENT;
-+
-+ indent = acx_debug_func_indent;
-+ if (indent >= sizeof(spaces))
-+ indent = sizeof(spaces)-1;
-+
-+ printk("%08ld %s<== %s: %08X\n",
-+ d % 100000000,
-+ spaces + (sizeof(spaces)-1) - indent,
-+ funcname,
-+ v
-+ );
-+}
-+#endif /* ACX_DEBUG > 1 */
-+
-+
-+/***********************************************************************
-+** Basically a msleep with logging
-+*/
-+void
-+acx_s_msleep(int ms)
-+{
-+ FN_ENTER;
-+ msleep(ms);
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** Not inlined: it's larger than it seems
-+*/
-+void
-+acx_print_mac(const char *head, const u8 *mac, const char *tail)
-+{
-+ printk("%s"MACSTR"%s", head, MAC(mac), tail);
-+}
-+
-+
-+/***********************************************************************
-+** acx_get_status_name
-+*/
-+static const char*
-+acx_get_status_name(u16 status)
-+{
-+ static const char * const str[] = {
-+ "STOPPED", "SCANNING", "WAIT_AUTH",
-+ "AUTHENTICATED", "ASSOCIATED", "INVALID??"
-+ };
-+ if (status > VEC_SIZE(str)-1)
-+ status = VEC_SIZE(str)-1;
-+
-+ return str[status];
-+}
-+
-+
-+/***********************************************************************
-+** acx_get_packet_type_string
-+*/
-+#if ACX_DEBUG
-+const char*
-+acx_get_packet_type_string(u16 fc)
-+{
-+ static const char * const mgmt_arr[] = {
-+ "MGMT/AssocReq", "MGMT/AssocResp", "MGMT/ReassocReq",
-+ "MGMT/ReassocResp", "MGMT/ProbeReq", "MGMT/ProbeResp",
-+ "MGMT/UNKNOWN", "MGMT/UNKNOWN", "MGMT/Beacon", "MGMT/ATIM",
-+ "MGMT/Disassoc", "MGMT/Authen", "MGMT/Deauthen"
-+ };
-+ static const char * const ctl_arr[] = {
-+ "CTL/PSPoll", "CTL/RTS", "CTL/CTS", "CTL/Ack", "CTL/CFEnd",
-+ "CTL/CFEndCFAck"
-+ };
-+ static const char * const data_arr[] = {
-+ "DATA/DataOnly", "DATA/Data CFAck", "DATA/Data CFPoll",
-+ "DATA/Data CFAck/CFPoll", "DATA/Null", "DATA/CFAck",
-+ "DATA/CFPoll", "DATA/CFAck/CFPoll"
-+ };
-+ const char *str;
-+ u8 fstype = (WF_FC_FSTYPE & fc) >> 4;
-+ u8 ctl;
-+
-+ switch (WF_FC_FTYPE & fc) {
-+ case WF_FTYPE_MGMT:
-+ if (fstype < VEC_SIZE(mgmt_arr))
-+ str = mgmt_arr[fstype];
-+ else
-+ str = "MGMT/UNKNOWN";
-+ break;
-+ case WF_FTYPE_CTL:
-+ ctl = fstype - 0x0a;
-+ if (ctl < VEC_SIZE(ctl_arr))
-+ str = ctl_arr[ctl];
-+ else
-+ str = "CTL/UNKNOWN";
-+ break;
-+ case WF_FTYPE_DATA:
-+ if (fstype < VEC_SIZE(data_arr))
-+ str = data_arr[fstype];
-+ else
-+ str = "DATA/UNKNOWN";
-+ break;
-+ default:
-+ str = "UNKNOWN";
-+ break;
-+ }
-+ return str;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_wlan_reason_str
-+*/
-+static inline const char*
-+acx_wlan_reason_str(u16 reason)
-+{
-+ static const char* const reason_str[] = {
-+ /* 0 */ "?",
-+ /* 1 */ "unspecified",
-+ /* 2 */ "prev auth is not valid",
-+ /* 3 */ "leaving BBS",
-+ /* 4 */ "due to inactivity",
-+ /* 5 */ "AP is busy",
-+ /* 6 */ "got class 2 frame from non-auth'ed STA",
-+ /* 7 */ "got class 3 frame from non-assoc'ed STA",
-+ /* 8 */ "STA has left BSS",
-+ /* 9 */ "assoc without auth is not allowed",
-+ /* 10 */ "bad power setting (802.11h)",
-+ /* 11 */ "bad channel (802.11i)",
-+ /* 12 */ "?",
-+ /* 13 */ "invalid IE",
-+ /* 14 */ "MIC failure",
-+ /* 15 */ "four-way handshake timeout",
-+ /* 16 */ "group key handshake timeout",
-+ /* 17 */ "IE is different",
-+ /* 18 */ "invalid group cipher",
-+ /* 19 */ "invalid pairwise cipher",
-+ /* 20 */ "invalid AKMP",
-+ /* 21 */ "unsupported RSN version",
-+ /* 22 */ "invalid RSN IE cap",
-+ /* 23 */ "802.1x failed",
-+ /* 24 */ "cipher suite rejected"
-+ };
-+ return reason < VEC_SIZE(reason_str) ? reason_str[reason] : "?";
-+}
-+
-+
-+/***********************************************************************
-+** acx_cmd_status_str
-+*/
-+const char*
-+acx_cmd_status_str(unsigned int state)
-+{
-+ static const char * const cmd_error_strings[] = {
-+ "Idle",
-+ "Success",
-+ "Unknown Command",
-+ "Invalid Information Element",
-+ "Channel rejected",
-+ "Channel invalid in current regulatory domain",
-+ "MAC invalid",
-+ "Command rejected (read-only information element)",
-+ "Command rejected",
-+ "Already asleep",
-+ "TX in progress",
-+ "Already awake",
-+ "Write only",
-+ "RX in progress",
-+ "Invalid parameter",
-+ "Scan in progress",
-+ "Failed"
-+ };
-+ return state < VEC_SIZE(cmd_error_strings) ?
-+ cmd_error_strings[state] : "?";
-+}
-+
-+
-+/***********************************************************************
-+** get_status_string
-+*/
-+static inline const char*
-+get_status_string(unsigned int status)
-+{
-+ /* A bit shortened, but hopefully still understandable */
-+ static const char * const status_str[] = {
-+ /* 0 */ "Successful",
-+ /* 1 */ "Unspecified failure",
-+ /* 2 */ "reserved",
-+ /* 3 */ "reserved",
-+ /* 4 */ "reserved",
-+ /* 5 */ "reserved",
-+ /* 6 */ "reserved",
-+ /* 7 */ "reserved",
-+ /* 8 */ "reserved",
-+ /* 9 */ "reserved",
-+ /*10 */ "Cannot support all requested capabilities in Capability Information field",
-+ /*11 */ "Reassoc denied (reason outside of 802.11b scope)",
-+ /*12 */ "Assoc denied (reason outside of 802.11b scope) -- maybe MAC filtering by peer?",
-+ /*13 */ "Responding station doesnt support specified auth algorithm -- maybe WEP auth Open vs. Restricted?",
-+ /*14 */ "Auth rejected: wrong transaction sequence number",
-+ /*15 */ "Auth rejected: challenge failure",
-+ /*16 */ "Auth rejected: timeout for next frame in sequence",
-+ /*17 */ "Assoc denied: too many STAs on this AP",
-+ /*18 */ "Assoc denied: requesting STA doesnt support all data rates in basic set",
-+ /*19 */ "Assoc denied: requesting STA doesnt support Short Preamble",
-+ /*20 */ "Assoc denied: requesting STA doesnt support PBCC Modulation",
-+ /*21 */ "Assoc denied: requesting STA doesnt support Channel Agility"
-+ /*22 */ "reserved",
-+ /*23 */ "reserved",
-+ /*24 */ "reserved",
-+ /*25 */ "Assoc denied: requesting STA doesnt support Short Slot Time",
-+ /*26 */ "Assoc denied: requesting STA doesnt support DSSS-OFDM"
-+ };
-+
-+ return status_str[status < VEC_SIZE(status_str) ? status : 2];
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void
-+acx_log_bad_eid(wlan_hdr_t* hdr, int len, wlan_ie_t* ie_ptr)
-+{
-+ if (acx_debug & L_ASSOC) {
-+ int offset = (u8*)ie_ptr - (u8*)hdr;
-+ printk("acx: unknown EID %d in mgmt frame at offset %d. IE: ",
-+ ie_ptr->eid, offset);
-+ /* IE len can be bogus, IE can extend past packet end. Oh well... */
-+ acx_dump_bytes(ie_ptr, ie_ptr->len + 2);
-+ if (acx_debug & L_DATA) {
-+ printk("frame (%s): ",
-+ acx_get_packet_type_string(le16_to_cpu(hdr->fc)));
-+ acx_dump_bytes(hdr, len);
-+ }
-+ }
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#if ACX_DEBUG
-+void
-+acx_dump_bytes(const void *data, int num)
-+{
-+ const u8* ptr = (const u8*)data;
-+
-+ if (num <= 0) {
-+ printk("\n");
-+ return;
-+ }
-+
-+ while (num >= 16) {
-+ printk( "%02X %02X %02X %02X %02X %02X %02X %02X "
-+ "%02X %02X %02X %02X %02X %02X %02X %02X\n",
-+ ptr[0], ptr[1], ptr[2], ptr[3],
-+ ptr[4], ptr[5], ptr[6], ptr[7],
-+ ptr[8], ptr[9], ptr[10], ptr[11],
-+ ptr[12], ptr[13], ptr[14], ptr[15]);
-+ num -= 16;
-+ ptr += 16;
-+ }
-+ if (num > 0) {
-+ while (--num > 0)
-+ printk("%02X ", *ptr++);
-+ printk("%02X\n", *ptr);
-+ }
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_s_get_firmware_version
-+*/
-+void
-+acx_s_get_firmware_version(acx_device_t *adev)
-+{
-+ fw_ver_t fw;
-+ u8 hexarr[4] = { 0, 0, 0, 0 };
-+ int hexidx = 0, val = 0;
-+ const char *num;
-+ char c;
-+
-+ FN_ENTER;
-+
-+ memset(fw.fw_id, 'E', FW_ID_SIZE);
-+ acx_s_interrogate(adev, &fw, ACX1xx_IE_FWREV);
-+ memcpy(adev->firmware_version, fw.fw_id, FW_ID_SIZE);
-+ adev->firmware_version[FW_ID_SIZE] = '\0';
-+
-+ log(L_DEBUG, "fw_ver: fw_id='%s' hw_id=%08X\n",
-+ adev->firmware_version, fw.hw_id);
-+
-+ if (strncmp(fw.fw_id, "Rev ", 4) != 0) {
-+ printk("acx: strange firmware version string "
-+ "'%s', please report\n", adev->firmware_version);
-+ adev->firmware_numver = 0x01090407; /* assume 1.9.4.7 */
-+ } else {
-+ num = &fw.fw_id[4];
-+ while (1) {
-+ c = *num++;
-+ if ((c == '.') || (c == '\0')) {
-+ hexarr[hexidx++] = val;
-+ if ((hexidx > 3) || (c == '\0')) /* end? */
-+ break;
-+ val = 0;
-+ continue;
-+ }
-+ if ((c >= '0') && (c <= '9'))
-+ c -= '0';
-+ else
-+ c = c - 'a' + (char)10;
-+ val = val*16 + c;
-+ }
-+
-+ adev->firmware_numver = (u32)(
-+ (hexarr[0] << 24) | (hexarr[1] << 16)
-+ | (hexarr[2] << 8) | hexarr[3]);
-+ log(L_DEBUG, "firmware_numver 0x%08X\n", adev->firmware_numver);
-+ }
-+ if (IS_ACX111(adev)) {
-+ if (adev->firmware_numver == 0x00010011) {
-+ /* This one does not survive floodpinging */
-+ printk("acx: firmware '%s' is known to be buggy, "
-+ "please upgrade\n", adev->firmware_version);
-+ }
-+ }
-+
-+ adev->firmware_id = le32_to_cpu(fw.hw_id);
-+
-+ /* we're able to find out more detailed chip names now */
-+ switch (adev->firmware_id & 0xffff0000) {
-+ case 0x01010000:
-+ case 0x01020000:
-+ adev->chip_name = "TNETW1100A";
-+ break;
-+ case 0x01030000:
-+ adev->chip_name = "TNETW1100B";
-+ break;
-+ case 0x03000000:
-+ case 0x03010000:
-+ adev->chip_name = "TNETW1130";
-+ break;
-+ case 0x04030000: /* 0x04030101 is TNETW1450 */
-+ adev->chip_name = "TNETW1450";
-+ break;
-+ default:
-+ printk("acx: unknown chip ID 0x%08X, "
-+ "please report\n", adev->firmware_id);
-+ break;
-+ }
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_display_hardware_details
-+**
-+** Displays hw/fw version, radio type etc...
-+*/
-+void
-+acx_display_hardware_details(acx_device_t *adev)
-+{
-+ const char *radio_str, *form_str;
-+
-+ FN_ENTER;
-+
-+ switch (adev->radio_type) {
-+ case RADIO_MAXIM_0D:
-+ radio_str = "Maxim";
-+ break;
-+ case RADIO_RFMD_11:
-+ radio_str = "RFMD";
-+ break;
-+ case RADIO_RALINK_15:
-+ radio_str = "Ralink";
-+ break;
-+ case RADIO_RADIA_16:
-+ radio_str = "Radia";
-+ break;
-+ case RADIO_UNKNOWN_17:
-+ /* TI seems to have a radio which is
-+ * additionally 802.11a capable, too */
-+ radio_str = "802.11a/b/g radio?! Please report";
-+ break;
-+ case RADIO_UNKNOWN_19:
-+ radio_str = "A radio used by Safecom cards?! Please report";
-+ break;
-+ case RADIO_UNKNOWN_1B:
-+ radio_str = "An unknown radio used by TNETW1450 USB adapters";
-+ break;
-+ default:
-+ radio_str = "UNKNOWN, please report radio type name!";
-+ break;
-+ }
-+
-+ switch (adev->form_factor) {
-+ case 0x00:
-+ form_str = "unspecified";
-+ break;
-+ case 0x01:
-+ form_str = "(mini-)PCI / CardBus";
-+ break;
-+ case 0x02:
-+ form_str = "USB";
-+ break;
-+ case 0x03:
-+ form_str = "Compact Flash";
-+ break;
-+ default:
-+ form_str = "UNKNOWN, please report";
-+ break;
-+ }
-+
-+ printk("acx: === chipset %s, radio type 0x%02X (%s), "
-+ "form factor 0x%02X (%s), EEPROM version 0x%02X: "
-+ "uploaded firmware '%s' ===\n",
-+ adev->chip_name, adev->radio_type, radio_str,
-+ adev->form_factor, form_str, adev->eeprom_version,
-+ adev->firmware_version);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx_e_change_mtu(struct net_device *ndev, int mtu)
-+{
-+ enum {
-+ MIN_MTU = 256,
-+ MAX_MTU = WLAN_DATA_MAXLEN - (ETH_HLEN)
-+ };
-+
-+ if (mtu < MIN_MTU || mtu > MAX_MTU)
-+ return -EINVAL;
-+
-+ ndev->mtu = mtu;
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_e_get_stats, acx_e_get_wireless_stats
-+*/
-+struct net_device_stats*
-+acx_e_get_stats(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ return &adev->stats;
-+}
-+
-+struct iw_statistics*
-+acx_e_get_wireless_stats(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ return &adev->wstats;
-+}
-+
-+
-+/***********************************************************************
-+** maps acx111 tx descr rate field to acx100 one
-+*/
-+const u8
-+acx_bitpos2rate100[] = {
-+ RATE100_1 ,/* 0 */
-+ RATE100_2 ,/* 1 */
-+ RATE100_5 ,/* 2 */
-+ RATE100_2 ,/* 3, should not happen */
-+ RATE100_2 ,/* 4, should not happen */
-+ RATE100_11 ,/* 5 */
-+ RATE100_2 ,/* 6, should not happen */
-+ RATE100_2 ,/* 7, should not happen */
-+ RATE100_22 ,/* 8 */
-+ RATE100_2 ,/* 9, should not happen */
-+ RATE100_2 ,/* 10, should not happen */
-+ RATE100_2 ,/* 11, should not happen */
-+ RATE100_2 ,/* 12, should not happen */
-+ RATE100_2 ,/* 13, should not happen */
-+ RATE100_2 ,/* 14, should not happen */
-+ RATE100_2 ,/* 15, should not happen */
-+};
-+
-+u8
-+acx_rate111to100(u16 r) {
-+ return acx_bitpos2rate100[highest_bit(r)];
-+}
-+
-+
-+/***********************************************************************
-+** Calculate level like the feb 2003 windows driver seems to do
-+*/
-+static u8
-+acx_signal_to_winlevel(u8 rawlevel)
-+{
-+ /* u8 winlevel = (u8) (0.5 + 0.625 * rawlevel); */
-+ u8 winlevel = ((4 + (rawlevel * 5)) / 8);
-+
-+ if (winlevel > 100)
-+ winlevel = 100;
-+ return winlevel;
-+}
-+
-+u8
-+acx_signal_determine_quality(u8 signal, u8 noise)
-+{
-+ int qual;
-+
-+ qual = (((signal - 30) * 100 / 70) + (100 - noise * 4)) / 2;
-+
-+ if (qual > 100)
-+ return 100;
-+ if (qual < 0)
-+ return 0;
-+ return qual;
-+}
-+
-+
-+/***********************************************************************
-+** Interrogate/configure commands
-+*/
-+
-+/* FIXME: the lengths given here probably aren't always correct.
-+ * They should be gradually replaced by proper "sizeof(acx1XX_ie_XXXX)-4",
-+ * unless the firmware actually expects a different length than the struct length */
-+static const u16
-+acx100_ie_len[] = {
-+ 0,
-+ ACX100_IE_ACX_TIMER_LEN,
-+ sizeof(acx100_ie_powersave_t)-4, /* is that 6 or 8??? */
-+ ACX1xx_IE_QUEUE_CONFIG_LEN,
-+ ACX100_IE_BLOCK_SIZE_LEN,
-+ ACX1xx_IE_MEMORY_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_RATE_FALLBACK_LEN,
-+ ACX100_IE_WEP_OPTIONS_LEN,
-+ ACX1xx_IE_MEMORY_MAP_LEN, /* ACX1xx_IE_SSID_LEN, */
-+ 0,
-+ ACX1xx_IE_ASSOC_ID_LEN,
-+ 0,
-+ ACX111_IE_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_FWREV_LEN,
-+ ACX1xx_IE_FCS_ERROR_COUNT_LEN,
-+ ACX1xx_IE_MEDIUM_USAGE_LEN,
-+ ACX1xx_IE_RXCONFIG_LEN,
-+ 0,
-+ 0,
-+ sizeof(fw_stats_t)-4,
-+ 0,
-+ ACX1xx_IE_FEATURE_CONFIG_LEN,
-+ ACX111_IE_KEY_CHOOSE_LEN,
-+ ACX1FF_IE_MISC_CONFIG_TABLE_LEN,
-+ ACX1FF_IE_WONE_CONFIG_LEN,
-+ 0,
-+ ACX1FF_IE_TID_CONFIG_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_CALIB_ASSESSMENT_LEN,
-+ ACX1FF_IE_BEACON_FILTER_OPTIONS_LEN,
-+ ACX1FF_IE_LOW_RSSI_THRESH_OPT_LEN,
-+ ACX1FF_IE_NOISE_HISTOGRAM_RESULTS_LEN,
-+ 0,
-+ ACX1FF_IE_PACKET_DETECT_THRESH_LEN,
-+ ACX1FF_IE_TX_CONFIG_OPTIONS_LEN,
-+ ACX1FF_IE_CCA_THRESHOLD_LEN,
-+ ACX1FF_IE_EVENT_MASK_LEN,
-+ ACX1FF_IE_DTIM_PERIOD_LEN,
-+ 0,
-+ ACX1FF_IE_ACI_CONFIG_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_EEPROM_VER_LEN,
-+};
-+
-+static const u16
-+acx100_ie_len_dot11[] = {
-+ 0,
-+ ACX1xx_IE_DOT11_STATION_ID_LEN,
-+ 0,
-+ ACX100_IE_DOT11_BEACON_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_DTIM_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN,
-+ ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN,
-+ ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE_LEN,
-+ ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_TX_POWER_LEVEL_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN,
-+ ACX100_IE_DOT11_ED_THRESHOLD_LEN,
-+ ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+};
-+
-+static const u16
-+acx111_ie_len[] = {
-+ 0,
-+ ACX100_IE_ACX_TIMER_LEN,
-+ sizeof(acx111_ie_powersave_t)-4,
-+ ACX1xx_IE_QUEUE_CONFIG_LEN,
-+ ACX100_IE_BLOCK_SIZE_LEN,
-+ ACX1xx_IE_MEMORY_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_RATE_FALLBACK_LEN,
-+ ACX100_IE_WEP_OPTIONS_LEN,
-+ ACX1xx_IE_MEMORY_MAP_LEN, /* ACX1xx_IE_SSID_LEN, */
-+ 0,
-+ ACX1xx_IE_ASSOC_ID_LEN,
-+ 0,
-+ ACX111_IE_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_FWREV_LEN,
-+ ACX1xx_IE_FCS_ERROR_COUNT_LEN,
-+ ACX1xx_IE_MEDIUM_USAGE_LEN,
-+ ACX1xx_IE_RXCONFIG_LEN,
-+ 0,
-+ 0,
-+ sizeof(fw_stats_t)-4,
-+ 0,
-+ ACX1xx_IE_FEATURE_CONFIG_LEN,
-+ ACX111_IE_KEY_CHOOSE_LEN,
-+ ACX1FF_IE_MISC_CONFIG_TABLE_LEN,
-+ ACX1FF_IE_WONE_CONFIG_LEN,
-+ 0,
-+ ACX1FF_IE_TID_CONFIG_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_CALIB_ASSESSMENT_LEN,
-+ ACX1FF_IE_BEACON_FILTER_OPTIONS_LEN,
-+ ACX1FF_IE_LOW_RSSI_THRESH_OPT_LEN,
-+ ACX1FF_IE_NOISE_HISTOGRAM_RESULTS_LEN,
-+ 0,
-+ ACX1FF_IE_PACKET_DETECT_THRESH_LEN,
-+ ACX1FF_IE_TX_CONFIG_OPTIONS_LEN,
-+ ACX1FF_IE_CCA_THRESHOLD_LEN,
-+ ACX1FF_IE_EVENT_MASK_LEN,
-+ ACX1FF_IE_DTIM_PERIOD_LEN,
-+ 0,
-+ ACX1FF_IE_ACI_CONFIG_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_EEPROM_VER_LEN,
-+};
-+
-+static const u16
-+acx111_ie_len_dot11[] = {
-+ 0,
-+ ACX1xx_IE_DOT11_STATION_ID_LEN,
-+ 0,
-+ ACX100_IE_DOT11_BEACON_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_DTIM_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN,
-+ ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN,
-+ ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE_LEN,
-+ ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_TX_POWER_LEVEL_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN,
-+ ACX100_IE_DOT11_ED_THRESHOLD_LEN,
-+ ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+};
-+
-+
-+#undef FUNC
-+#define FUNC "configure"
-+#if !ACX_DEBUG
-+int
-+acx_s_configure(acx_device_t *adev, void *pdr, int type)
-+{
-+#else
-+int
-+acx_s_configure_debug(acx_device_t *adev, void *pdr, int type, const char* typestr)
-+{
-+#endif
-+ u16 len;
-+ int res;
-+
-+ if (type < 0x1000)
-+ len = adev->ie_len[type];
-+ else
-+ len = adev->ie_len_dot11[type - 0x1000];
-+
-+ log(L_CTL, FUNC"(type:%s,len:%u)\n", typestr, len);
-+ if (unlikely(!len)) {
-+ log(L_DEBUG, "zero-length type %s?!\n", typestr);
-+ }
-+
-+ ((acx_ie_generic_t *)pdr)->type = cpu_to_le16(type);
-+ ((acx_ie_generic_t *)pdr)->len = cpu_to_le16(len);
-+ res = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIGURE, pdr, len + 4);
-+ if (unlikely(OK != res)) {
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(type:%s) FAILED\n", adev->ndev->name, typestr);
-+#else
-+ printk("%s: "FUNC"(type:0x%X) FAILED\n", adev->ndev->name, type);
-+#endif
-+ /* dump_stack() is already done in issue_cmd() */
-+ }
-+ return res;
-+}
-+
-+#undef FUNC
-+#define FUNC "interrogate"
-+#if !ACX_DEBUG
-+int
-+acx_s_interrogate(acx_device_t *adev, void *pdr, int type)
-+{
-+#else
-+int
-+acx_s_interrogate_debug(acx_device_t *adev, void *pdr, int type,
-+ const char* typestr)
-+{
-+#endif
-+ u16 len;
-+ int res;
-+
-+ /* FIXME: no check whether this exceeds the array yet.
-+ * We should probably remember the number of entries... */
-+ if (type < 0x1000)
-+ len = adev->ie_len[type];
-+ else
-+ len = adev->ie_len_dot11[type-0x1000];
-+
-+ log(L_CTL, FUNC"(type:%s,len:%u)\n", typestr, len);
-+
-+ ((acx_ie_generic_t *)pdr)->type = cpu_to_le16(type);
-+ ((acx_ie_generic_t *)pdr)->len = cpu_to_le16(len);
-+ res = acx_s_issue_cmd(adev, ACX1xx_CMD_INTERROGATE, pdr, len + 4);
-+ if (unlikely(OK != res)) {
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(type:%s) FAILED\n", adev->ndev->name, typestr);
-+#else
-+ printk("%s: "FUNC"(type:0x%X) FAILED\n", adev->ndev->name, type);
-+#endif
-+ /* dump_stack() is already done in issue_cmd() */
-+ }
-+ return res;
-+}
-+
-+#if CMD_DISCOVERY
-+void
-+great_inquisitor(acx_device_t *adev)
-+{
-+ static struct {
-+ u16 type;
-+ u16 len;
-+ /* 0x200 was too large here: */
-+ u8 data[0x100 - 4];
-+ } ACX_PACKED ie;
-+ u16 type;
-+
-+ FN_ENTER;
-+
-+ /* 0..0x20, 0x1000..0x1020 */
-+ for (type = 0; type <= 0x1020; type++) {
-+ if (type == 0x21)
-+ type = 0x1000;
-+ ie.type = cpu_to_le16(type);
-+ ie.len = cpu_to_le16(sizeof(ie) - 4);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_INTERROGATE, &ie, sizeof(ie));
-+ }
-+ FN_EXIT0;
-+}
-+#endif
-+
-+
-+#ifdef CONFIG_PROC_FS
-+/***********************************************************************
-+** /proc files
-+*/
-+/***********************************************************************
-+** acx_l_proc_output
-+** Generate content for our /proc entry
-+**
-+** Arguments:
-+** buf is a pointer to write output to
-+** adev is the usual pointer to our private struct acx_device
-+** Returns:
-+** number of bytes actually written to buf
-+** Side effects:
-+** none
-+*/
-+static int
-+acx_l_proc_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ p += sprintf(p,
-+ "acx driver version:\t\t" ACX_RELEASE "\n"
-+ "Wireless extension version:\t" STRING(WIRELESS_EXT) "\n"
-+ "chip name:\t\t\t%s (0x%08X)\n"
-+ "radio type:\t\t\t0x%02X\n"
-+ "form factor:\t\t\t0x%02X\n"
-+ "EEPROM version:\t\t\t0x%02X\n"
-+ "firmware version:\t\t%s (0x%08X)\n",
-+ adev->chip_name, adev->firmware_id,
-+ adev->radio_type,
-+ adev->form_factor,
-+ adev->eeprom_version,
-+ adev->firmware_version, adev->firmware_numver);
-+
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ struct client *bss = &adev->sta_list[i];
-+ if (!bss->used) continue;
-+ p += sprintf(p, "BSS %u BSSID "MACSTR" ESSID %s channel %u "
-+ "Cap 0x%X SIR %u SNR %u\n",
-+ i, MAC(bss->bssid), (char*)bss->essid, bss->channel,
-+ bss->cap_info, bss->sir, bss->snr);
-+ }
-+ p += sprintf(p, "status:\t\t\t%u (%s)\n",
-+ adev->status, acx_get_status_name(adev->status));
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_s_proc_diag_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ unsigned long flags;
-+ unsigned int len = 0, partlen;
-+ u32 temp1, temp2;
-+ u8 *st, *st_end;
-+#ifdef __BIG_ENDIAN
-+ u8 *st2;
-+#endif
-+ fw_stats_t *fw_stats;
-+ char *part_str = NULL;
-+ fw_stats_tx_t *tx = NULL;
-+ fw_stats_rx_t *rx = NULL;
-+ fw_stats_dma_t *dma = NULL;
-+ fw_stats_irq_t *irq = NULL;
-+ fw_stats_wep_t *wep = NULL;
-+ fw_stats_pwr_t *pwr = NULL;
-+ fw_stats_mic_t *mic = NULL;
-+ fw_stats_aes_t *aes = NULL;
-+ fw_stats_event_t *evt = NULL;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+#if defined (ACX_MEM)
-+ p = acxmem_s_proc_diag_output(p, adev);
-+#else
-+ if (IS_PCI(adev))
-+ p = acxpci_s_proc_diag_output(p, adev);
-+#endif
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** network status **\n"
-+ "dev_state_mask 0x%04X\n"
-+ "status %u (%s), "
-+ "mode %u, channel %u, "
-+ "reg_dom_id 0x%02X, reg_dom_chanmask 0x%04X, ",
-+ adev->dev_state_mask,
-+ adev->status, acx_get_status_name(adev->status),
-+ adev->mode, adev->channel,
-+ adev->reg_dom_id, adev->reg_dom_chanmask
-+ );
-+ p += sprintf(p,
-+ "ESSID \"%s\", essid_active %d, essid_len %d, "
-+ "essid_for_assoc \"%s\", nick \"%s\"\n"
-+ "WEP ena %d, restricted %d, idx %d\n",
-+ adev->essid, adev->essid_active, (int)adev->essid_len,
-+ adev->essid_for_assoc, adev->nick,
-+ adev->wep_enabled, adev->wep_restricted,
-+ adev->wep_current_index);
-+ p += sprintf(p, "dev_addr "MACSTR"\n", MAC(adev->dev_addr));
-+ p += sprintf(p, "bssid "MACSTR"\n", MAC(adev->bssid));
-+ p += sprintf(p, "ap_filter "MACSTR"\n", MAC(adev->ap));
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** PHY status **\n"
-+ "tx_disabled %d, tx_level_dbm %d\n" /* "tx_level_val %d, tx_level_auto %d\n" */
-+ "sensitivity %d, antenna 0x%02X, ed_threshold %d, cca %d, preamble_mode %d\n"
-+ "rate_basic 0x%04X, rate_oper 0x%04X\n"
-+ "rts_threshold %d, frag_threshold %d, short_retry %d, long_retry %d\n"
-+ "msdu_lifetime %d, listen_interval %d, beacon_interval %d\n",
-+ adev->tx_disabled, adev->tx_level_dbm, /* adev->tx_level_val, adev->tx_level_auto, */
-+ adev->sensitivity, adev->antenna, adev->ed_threshold, adev->cca, adev->preamble_mode,
-+ adev->rate_basic, adev->rate_oper,
-+ adev->rts_threshold, adev->frag_threshold, adev->short_retry, adev->long_retry,
-+ adev->msdu_lifetime, adev->listen_interval, adev->beacon_interval);
-+
-+ acx_unlock(adev, flags);
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** Firmware **\n"
-+ "NOTE: version dependent statistics layout, "
-+ "please report if you suspect wrong parsing!\n"
-+ "\n"
-+ "version \"%s\"\n", adev->firmware_version);
-+
-+ /* TODO: may replace kmalloc/memset with kzalloc once
-+ * Linux 2.6.14 is widespread */
-+ fw_stats = kmalloc(sizeof(*fw_stats), GFP_KERNEL);
-+ if (!fw_stats) {
-+ FN_EXIT1(0);
-+ return 0;
-+ }
-+ memset(fw_stats, 0, sizeof(*fw_stats));
-+
-+ st = (u8 *)fw_stats;
-+
-+ part_str = "statistics query command";
-+
-+ if (OK != acx_s_interrogate(adev, st, ACX1xx_IE_FIRMWARE_STATISTICS))
-+ goto fw_stats_end;
-+
-+ st += sizeof(u16);
-+ len = *(u16 *)st;
-+
-+ if (len > sizeof(*fw_stats)) {
-+ p += sprintf(p,
-+ "firmware version with bigger fw_stats struct detected\n"
-+ "(%u vs. %u), please report\n", len, sizeof(fw_stats_t));
-+ if (len > sizeof(*fw_stats)) {
-+ p += sprintf(p, "struct size exceeded allocation!\n");
-+ len = sizeof(*fw_stats);
-+ }
-+ }
-+ st += sizeof(u16);
-+ st_end = st - 2*sizeof(u16) + len;
-+
-+#ifdef __BIG_ENDIAN
-+ /* let's make one bold assumption here:
-+ * (hopefully!) *all* statistics fields are u32 only,
-+ * thus if we need to make endianness corrections
-+ * we can simply do them in one go, in advance */
-+ st2 = (u8 *)fw_stats;
-+ for (temp1 = 0; temp1 < len; temp1 += 4, st2 += 4)
-+ *(u32 *)st2 = le32_to_cpu(*(u32 *)st2);
-+#endif
-+
-+ part_str = "Rx/Tx";
-+
-+ /* directly at end of a struct part? --> no error! */
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ tx = (fw_stats_tx_t *)st;
-+ st += sizeof(fw_stats_tx_t);
-+ rx = (fw_stats_rx_t *)st;
-+ st += sizeof(fw_stats_rx_t);
-+ partlen = sizeof(fw_stats_tx_t) + sizeof(fw_stats_rx_t);
-+
-+ if (IS_ACX100(adev)) {
-+ /* at least ACX100 PCI F/W 1.9.8.b
-+ * and ACX100 USB F/W 1.0.7-USB
-+ * don't have those two fields... */
-+ st -= 2*sizeof(u32);
-+
-+ /* our parsing doesn't quite match this firmware yet,
-+ * log failure */
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = temp2 = 999999999;
-+ } else {
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = rx->rx_aci_events;
-+ temp2 = rx->rx_aci_resets;
-+ }
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " tx_desc_overfl %u\n"
-+ " rx_OutOfMem %u, rx_hdr_overfl %u, rx_hw_stuck %u\n"
-+ " rx_dropped_frame %u, rx_frame_ptr_err %u, rx_xfr_hint_trig %u\n"
-+ " rx_aci_events %u, rx_aci_resets %u\n",
-+ part_str,
-+ tx->tx_desc_of,
-+ rx->rx_oom,
-+ rx->rx_hdr_of,
-+ rx->rx_hw_stuck,
-+ rx->rx_dropped_frame,
-+ rx->rx_frame_ptr_err,
-+ rx->rx_xfr_hint_trig,
-+ temp1,
-+ temp2);
-+
-+ part_str = "DMA";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ dma = (fw_stats_dma_t *)st;
-+ partlen = sizeof(fw_stats_dma_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " rx_dma_req %u, rx_dma_err %u, tx_dma_req %u, tx_dma_err %u\n",
-+ part_str,
-+ dma->rx_dma_req,
-+ dma->rx_dma_err,
-+ dma->tx_dma_req,
-+ dma->tx_dma_err);
-+
-+ part_str = "IRQ";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ irq = (fw_stats_irq_t *)st;
-+ partlen = sizeof(fw_stats_irq_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " cmd_cplt %u, fiq %u\n"
-+ " rx_hdrs %u, rx_cmplt %u, rx_mem_overfl %u, rx_rdys %u\n"
-+ " irqs %u, tx_procs %u, decrypt_done %u\n"
-+ " dma_0_done %u, dma_1_done %u, tx_exch_complet %u\n"
-+ " commands %u, rx_procs %u, hw_pm_mode_changes %u\n"
-+ " host_acks %u, pci_pm %u, acm_wakeups %u\n",
-+ part_str,
-+ irq->cmd_cplt,
-+ irq->fiq,
-+ irq->rx_hdrs,
-+ irq->rx_cmplt,
-+ irq->rx_mem_of,
-+ irq->rx_rdys,
-+ irq->irqs,
-+ irq->tx_procs,
-+ irq->decrypt_done,
-+ irq->dma_0_done,
-+ irq->dma_1_done,
-+ irq->tx_exch_complet,
-+ irq->commands,
-+ irq->rx_procs,
-+ irq->hw_pm_mode_changes,
-+ irq->host_acks,
-+ irq->pci_pm,
-+ irq->acm_wakeups);
-+
-+ part_str = "WEP";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ wep = (fw_stats_wep_t *)st;
-+ partlen = sizeof(fw_stats_wep_t);
-+ st += partlen;
-+
-+ if (
-+ (IS_PCI(adev) && IS_ACX100(adev))
-+ || (IS_USB(adev) && IS_ACX100(adev))
-+ || (IS_MEM(adev) && IS_ACX100(adev))
-+ ) {
-+ /* at least ACX100 PCI F/W 1.9.8.b,
-+ * ACX100 USB F/W 1.0.7-USB
-+ * and ACX100 Generic Slave F/W 1.10.7.K
-+ * don't have those two fields...
-+ */
-+ st -= 2*sizeof(u32);
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = temp2 = 999999999;
-+ } else {
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = wep->wep_pkt_decrypt;
-+ temp2 = wep->wep_decrypt_irqs;
-+ }
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " wep_key_count %u, wep_default_key_count %u, dot11_def_key_mib %u\n"
-+ " wep_key_not_found %u, wep_decrypt_fail %u\n"
-+ " wep_pkt_decrypt %u, wep_decrypt_irqs %u\n",
-+ part_str,
-+ wep->wep_key_count,
-+ wep->wep_default_key_count,
-+ wep->dot11_def_key_mib,
-+ wep->wep_key_not_found,
-+ wep->wep_decrypt_fail,
-+ temp1,
-+ temp2);
-+
-+ part_str = "power";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ pwr = (fw_stats_pwr_t *)st;
-+ partlen = sizeof(fw_stats_pwr_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " tx_start_ctr %u, no_ps_tx_too_short %u\n"
-+ " rx_start_ctr %u, no_ps_rx_too_short %u\n"
-+ " lppd_started %u\n"
-+ " no_lppd_too_noisy %u, no_lppd_too_short %u, no_lppd_matching_frame %u\n",
-+ part_str,
-+ pwr->tx_start_ctr,
-+ pwr->no_ps_tx_too_short,
-+ pwr->rx_start_ctr,
-+ pwr->no_ps_rx_too_short,
-+ pwr->lppd_started,
-+ pwr->no_lppd_too_noisy,
-+ pwr->no_lppd_too_short,
-+ pwr->no_lppd_matching_frame);
-+
-+ part_str = "MIC";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ mic = (fw_stats_mic_t *)st;
-+ partlen = sizeof(fw_stats_mic_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " mic_rx_pkts %u, mic_calc_fail %u\n",
-+ part_str,
-+ mic->mic_rx_pkts,
-+ mic->mic_calc_fail);
-+
-+ part_str = "AES";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ aes = (fw_stats_aes_t *)st;
-+ partlen = sizeof(fw_stats_aes_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " aes_enc_fail %u, aes_dec_fail %u\n"
-+ " aes_enc_pkts %u, aes_dec_pkts %u\n"
-+ " aes_enc_irq %u, aes_dec_irq %u\n",
-+ part_str,
-+ aes->aes_enc_fail,
-+ aes->aes_dec_fail,
-+ aes->aes_enc_pkts,
-+ aes->aes_dec_pkts,
-+ aes->aes_enc_irq,
-+ aes->aes_dec_irq);
-+
-+ part_str = "event";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ evt = (fw_stats_event_t *)st;
-+ partlen = sizeof(fw_stats_event_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " heartbeat %u, calibration %u\n"
-+ " rx_mismatch %u, rx_mem_empty %u, rx_pool %u\n"
-+ " oom_late %u\n"
-+ " phy_tx_err %u, tx_stuck %u\n",
-+ part_str,
-+ evt->heartbeat,
-+ evt->calibration,
-+ evt->rx_mismatch,
-+ evt->rx_mem_empty,
-+ evt->rx_pool,
-+ evt->oom_late,
-+ evt->phy_tx_err,
-+ evt->tx_stuck);
-+
-+ if (st < st_end)
-+ goto fw_stats_bigger;
-+
-+ goto fw_stats_end;
-+
-+fw_stats_fail:
-+ st -= partlen;
-+ p += sprintf(p,
-+ "failed at %s part (size %u), offset %u (struct size %u), "
-+ "please report\n", part_str, partlen,
-+ (int)st - (int)fw_stats, len);
-+
-+fw_stats_bigger:
-+ for (; st < st_end; st += 4)
-+ p += sprintf(p,
-+ "UNKN%3d: %u\n", (int)st - (int)fw_stats, *(u32 *)st);
-+
-+fw_stats_end:
-+ kfree(fw_stats);
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_s_proc_phy_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /*
-+ if (RADIO_RFMD_11 != adev->radio_type) {
-+ printk("sorry, not yet adapted for radio types "
-+ "other than RFMD, please verify "
-+ "PHY size etc. first!\n");
-+ goto end;
-+ }
-+ */
-+
-+ /* The PHY area is only 0x80 bytes long; further pages after that
-+ * only have some page number registers with altered value,
-+ * all other registers remain the same. */
-+ for (i = 0; i < 0x80; i++) {
-+ acx_s_read_phy_reg(adev, i, p++);
-+ }
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+** acx_e_read_proc_XXXX
-+** Handle our /proc entry
-+**
-+** Arguments:
-+** standard kernel read_proc interface
-+** Returns:
-+** number of bytes written to buf
-+** Side effects:
-+** none
-+*/
-+static int
-+acx_e_read_proc(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ unsigned long flags;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+ acx_lock(adev, flags);
-+ /* fill buf */
-+ length = acx_l_proc_output(buf, adev);
-+ acx_unlock(adev, flags);
-+ acx_sem_unlock(adev);
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = buf + offset;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+static char _buf[32768];
-+static int
-+acx_e_read_proc_diag(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+ /* fill buf */
-+ length = acx_s_proc_diag_output(_buf, adev);
-+ acx_sem_unlock(adev);
-+
-+ memcpy(buf, _buf + offset, count);
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = count;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+static int
-+acx_e_read_proc_eeprom(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ /* fill buf */
-+ length = 0;
-+#if defined (ACX_MEM)
-+ acx_sem_lock(adev);
-+ length = acxmem_proc_eeprom_output(buf, adev);
-+ acx_sem_unlock(adev);
-+#else
-+ if (IS_PCI(adev)) {
-+ acx_sem_lock(adev);
-+ length = acxpci_proc_eeprom_output(buf, adev);
-+ acx_sem_unlock(adev);
-+ }
-+#endif
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = buf + offset;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+static int
-+acx_e_read_proc_phy(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+ /* fill buf */
-+ length = acx_s_proc_phy_output(buf, adev);
-+ acx_sem_unlock(adev);
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = buf + offset;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+
-+/***********************************************************************
-+** /proc files registration
-+*/
-+static const char * const
-+proc_files[] = { "", "_diag", "_eeprom", "_phy" };
-+
-+static read_proc_t * const
-+proc_funcs[] = {
-+ acx_e_read_proc,
-+ acx_e_read_proc_diag,
-+ acx_e_read_proc_eeprom,
-+ acx_e_read_proc_phy
-+};
-+
-+static int
-+manage_proc_entries(const struct net_device *ndev, int remove)
-+{
-+ acx_device_t *adev = ndev2adev((struct net_device *)ndev);
-+ char procbuf[80];
-+ int i;
-+
-+ for (i = 0; i < VEC_SIZE(proc_files); i++) {
-+ snprintf(procbuf, sizeof(procbuf),
-+ "driver/acx_%s%s", ndev->name, proc_files[i]);
-+ log(L_INIT, "%sing /proc entry %s\n",
-+ remove ? "remov" : "creat", procbuf);
-+ if (!remove) {
-+ if (!create_proc_read_entry(procbuf, 0, 0, proc_funcs[i], adev)) {
-+ printk("acx: cannot register /proc entry %s\n", procbuf);
-+ return NOT_OK;
-+ }
-+ } else {
-+ remove_proc_entry(procbuf, NULL);
-+ }
-+ }
-+ return OK;
-+}
-+
-+int
-+acx_proc_register_entries(const struct net_device *ndev)
-+{
-+ return manage_proc_entries(ndev, 0);
-+}
-+
-+int
-+acx_proc_unregister_entries(const struct net_device *ndev)
-+{
-+ return manage_proc_entries(ndev, 1);
-+}
-+#endif /* CONFIG_PROC_FS */
-+
-+
-+/***********************************************************************
-+** acx_cmd_join_bssid
-+**
-+** Common code for both acx100 and acx111.
-+*/
-+/* NB: does NOT match RATE100_nn but matches ACX[111]_SCAN_RATE_n */
-+static const u8
-+bitpos2genframe_txrate[] = {
-+ 10, /* 0. 1 Mbit/s */
-+ 20, /* 1. 2 Mbit/s */
-+ 55, /* 2. 5.5 Mbit/s */
-+ 0x0B, /* 3. 6 Mbit/s */
-+ 0x0F, /* 4. 9 Mbit/s */
-+ 110, /* 5. 11 Mbit/s */
-+ 0x0A, /* 6. 12 Mbit/s */
-+ 0x0E, /* 7. 18 Mbit/s */
-+ 220, /* 8. 22 Mbit/s */
-+ 0x09, /* 9. 24 Mbit/s */
-+ 0x0D, /* 10. 36 Mbit/s */
-+ 0x08, /* 11. 48 Mbit/s */
-+ 0x0C, /* 12. 54 Mbit/s */
-+ 10, /* 13. 1 Mbit/s, should never happen */
-+ 10, /* 14. 1 Mbit/s, should never happen */
-+ 10, /* 15. 1 Mbit/s, should never happen */
-+};
-+
-+/* Looks scary, eh?
-+** Actually, each one compiled into one AND and one SHIFT,
-+** 31 bytes in x86 asm (more if uints are replaced by u16/u8) */
-+static inline unsigned int
-+rate111to5bits(unsigned int rate)
-+{
-+ return (rate & 0x7)
-+ | ( (rate & RATE111_11) / (RATE111_11/JOINBSS_RATES_11) )
-+ | ( (rate & RATE111_22) / (RATE111_22/JOINBSS_RATES_22) )
-+ ;
-+}
-+
-+static void
-+acx_s_cmd_join_bssid(acx_device_t *adev, const u8 *bssid)
-+{
-+ acx_joinbss_t tmp;
-+ int dtim_interval;
-+ int i;
-+
-+ if (mac_is_zero(bssid))
-+ return;
-+
-+ FN_ENTER;
-+
-+ dtim_interval = (ACX_MODE_0_ADHOC == adev->mode) ?
-+ 1 : adev->dtim_interval;
-+
-+ memset(&tmp, 0, sizeof(tmp));
-+
-+ for (i = 0; i < ETH_ALEN; i++) {
-+ tmp.bssid[i] = bssid[ETH_ALEN-1 - i];
-+ }
-+
-+ tmp.beacon_interval = cpu_to_le16(adev->beacon_interval);
-+
-+ /* Basic rate set. Control frame responses (such as ACK or CTS frames)
-+ ** are sent with one of these rates */
-+ if (IS_ACX111(adev)) {
-+ /* It was experimentally determined that rates_basic
-+ ** can take 11g rates as well, not only rates
-+ ** defined with JOINBSS_RATES_BASIC111_nnn.
-+ ** Just use RATE111_nnn constants... */
-+ tmp.u.acx111.dtim_interval = dtim_interval;
-+ tmp.u.acx111.rates_basic = cpu_to_le16(adev->rate_basic);
-+ log(L_ASSOC, "rates_basic:%04X, rates_supported:%04X\n",
-+ adev->rate_basic, adev->rate_oper);
-+ } else {
-+ tmp.u.acx100.dtim_interval = dtim_interval;
-+ tmp.u.acx100.rates_basic = rate111to5bits(adev->rate_basic);
-+ tmp.u.acx100.rates_supported = rate111to5bits(adev->rate_oper);
-+ log(L_ASSOC, "rates_basic:%04X->%02X, "
-+ "rates_supported:%04X->%02X\n",
-+ adev->rate_basic, tmp.u.acx100.rates_basic,
-+ adev->rate_oper, tmp.u.acx100.rates_supported);
-+ }
-+
-+ /* Setting up how Beacon, Probe Response, RTS, and PS-Poll frames
-+ ** will be sent (rate/modulation/preamble) */
-+ tmp.u.txrate.genfrm_txrate = bitpos2genframe_txrate[lowest_bit(adev->rate_basic)];
-+ tmp.genfrm_mod_pre = 0; /* FIXME: was = adev->capab_short (which was always 0); */
-+ /* we can use short pre *if* all peers can understand it */
-+ /* FIXME #2: we need to correctly set PBCC/OFDM bits here too */
-+
-+ /* we switch fw to STA mode in MONITOR mode, it seems to be
-+ ** the only mode where fw does not emit beacons by itself
-+ ** but allows us to send anything (we really want to retain
-+ ** ability to tx arbitrary frames in MONITOR mode)
-+ */
-+ tmp.macmode = (adev->mode != ACX_MODE_MONITOR ? adev->mode : ACX_MODE_2_STA);
-+ tmp.channel = adev->channel;
-+ tmp.essid_len = adev->essid_len;
-+ /* NOTE: the code memcpy'd essid_len + 1 before, which is WRONG! */
-+ memcpy(tmp.essid, adev->essid, tmp.essid_len);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_JOIN, &tmp, tmp.essid_len + 0x11);
-+
-+ log(L_ASSOC|L_DEBUG, "BSS_Type = %u\n", tmp.macmode);
-+ acxlog_mac(L_ASSOC|L_DEBUG, "JoinBSSID MAC:", adev->bssid, "\n");
-+
-+ acx_update_capabilities(adev);
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_cmd_start_scan
-+**
-+** Issue scan command to the hardware
-+**
-+** unified function for both ACX111 and ACX100
-+*/
-+static void
-+acx_s_scan_chan(acx_device_t *adev)
-+{
-+ union {
-+ acx111_scan_t acx111;
-+ acx100_scan_t acx100;
-+ } s;
-+
-+ FN_ENTER;
-+
-+ memset(&s, 0, sizeof(s));
-+
-+ /* first common positions... */
-+
-+ s.acx111.count = cpu_to_le16(adev->scan_count);
-+ s.acx111.rate = adev->scan_rate;
-+ s.acx111.options = adev->scan_mode;
-+ s.acx111.chan_duration = cpu_to_le16(adev->scan_duration);
-+ s.acx111.max_probe_delay = cpu_to_le16(adev->scan_probe_delay);
-+
-+ /* ...then differences */
-+
-+ if (IS_ACX111(adev)) {
-+ s.acx111.channel_list_select = 0; /* scan every allowed channel */
-+ /*s.acx111.channel_list_select = 1;*/ /* scan given channels */
-+ /*s.acx111.modulation = 0x40;*/ /* long preamble? OFDM? -> only for active scan */
-+ s.acx111.modulation = 0;
-+ /*s.acx111.channel_list[0] = 6;
-+ s.acx111.channel_list[1] = 4;*/
-+ } else {
-+ s.acx100.start_chan = cpu_to_le16(1);
-+ s.acx100.flags = cpu_to_le16(0x8000);
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_SCAN, &s, sizeof(s));
-+ FN_EXIT0;
-+}
-+
-+
-+void
-+acx_s_cmd_start_scan(acx_device_t *adev)
-+{
-+ /* time_before check is 'just in case' thing */
-+ if (!(adev->irq_status & HOST_INT_SCAN_COMPLETE)
-+ && time_before(jiffies, adev->scan_start + 10*HZ)
-+ ) {
-+ log(L_INIT, "start_scan: seems like previous scan "
-+ "is still running. Not starting anew. Please report\n");
-+ return;
-+ }
-+
-+ log(L_INIT, "starting radio scan\n");
-+ /* remember that fw is commanded to do scan */
-+ adev->scan_start = jiffies;
-+ CLEAR_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
-+ /* issue it */
-+ acx_s_scan_chan(adev);
-+}
-+
-+
-+/***********************************************************************
-+** acx111 feature config
-+*/
-+static int
-+acx111_s_get_feature_config(acx_device_t *adev,
-+ u32 *feature_options, u32 *data_flow_options)
-+{
-+ struct acx111_ie_feature_config feat;
-+
-+ if (!IS_ACX111(adev)) {
-+ return NOT_OK;
-+ }
-+
-+ memset(&feat, 0, sizeof(feat));
-+
-+ if (OK != acx_s_interrogate(adev, &feat, ACX1xx_IE_FEATURE_CONFIG)) {
-+ return NOT_OK;
-+ }
-+ log(L_DEBUG,
-+ "got Feature option:0x%X, DataFlow option: 0x%X\n",
-+ feat.feature_options,
-+ feat.data_flow_options);
-+
-+ if (feature_options)
-+ *feature_options = le32_to_cpu(feat.feature_options);
-+ if (data_flow_options)
-+ *data_flow_options = le32_to_cpu(feat.data_flow_options);
-+
-+ return OK;
-+}
-+
-+static int
-+acx111_s_set_feature_config(acx_device_t *adev,
-+ u32 feature_options, u32 data_flow_options,
-+ unsigned int mode /* 0 == remove, 1 == add, 2 == set */)
-+{
-+ struct acx111_ie_feature_config feat;
-+
-+ if (!IS_ACX111(adev)) {
-+ return NOT_OK;
-+ }
-+
-+ if ((mode < 0) || (mode > 2))
-+ return NOT_OK;
-+
-+ if (mode != 2)
-+ /* need to modify old data */
-+ acx111_s_get_feature_config(adev, &feat.feature_options, &feat.data_flow_options);
-+ else {
-+ /* need to set a completely new value */
-+ feat.feature_options = 0;
-+ feat.data_flow_options = 0;
-+ }
-+
-+ if (mode == 0) { /* remove */
-+ CLEAR_BIT(feat.feature_options, cpu_to_le32(feature_options));
-+ CLEAR_BIT(feat.data_flow_options, cpu_to_le32(data_flow_options));
-+ } else { /* add or set */
-+ SET_BIT(feat.feature_options, cpu_to_le32(feature_options));
-+ SET_BIT(feat.data_flow_options, cpu_to_le32(data_flow_options));
-+ }
-+
-+ log(L_DEBUG,
-+ "old: feature 0x%08X dataflow 0x%08X. mode: %u\n"
-+ "new: feature 0x%08X dataflow 0x%08X\n",
-+ feature_options, data_flow_options, mode,
-+ le32_to_cpu(feat.feature_options),
-+ le32_to_cpu(feat.data_flow_options));
-+
-+ if (OK != acx_s_configure(adev, &feat, ACX1xx_IE_FEATURE_CONFIG)) {
-+ return NOT_OK;
-+ }
-+
-+ return OK;
-+}
-+
-+static inline int
-+acx111_s_feature_off(acx_device_t *adev, u32 f, u32 d)
-+{
-+ return acx111_s_set_feature_config(adev, f, d, 0);
-+}
-+static inline int
-+acx111_s_feature_on(acx_device_t *adev, u32 f, u32 d)
-+{
-+ return acx111_s_set_feature_config(adev, f, d, 1);
-+}
-+static inline int
-+acx111_s_feature_set(acx_device_t *adev, u32 f, u32 d)
-+{
-+ return acx111_s_set_feature_config(adev, f, d, 2);
-+}
-+
-+
-+/***********************************************************************
-+** acx100_s_init_memory_pools
-+*/
-+static int
-+acx100_s_init_memory_pools(acx_device_t *adev, const acx_ie_memmap_t *mmt)
-+{
-+ acx100_ie_memblocksize_t MemoryBlockSize;
-+ acx100_ie_memconfigoption_t MemoryConfigOption;
-+ int TotalMemoryBlocks;
-+ int RxBlockNum;
-+ int TotalRxBlockSize;
-+ int TxBlockNum;
-+ int TotalTxBlockSize;
-+
-+ FN_ENTER;
-+
-+ /* Let's see if we can follow this:
-+ first we select our memory block size (which I think is
-+ completely arbitrary) */
-+ MemoryBlockSize.size = cpu_to_le16(adev->memblocksize);
-+
-+ /* Then we alert the card to our decision of block size */
-+ if (OK != acx_s_configure(adev, &MemoryBlockSize, ACX100_IE_BLOCK_SIZE)) {
-+ goto bad;
-+ }
-+
-+ /* We figure out how many total blocks we can create, using
-+ the block size we chose, and the beginning and ending
-+ memory pointers, i.e.: end-start/size */
-+ TotalMemoryBlocks = (le32_to_cpu(mmt->PoolEnd) - le32_to_cpu(mmt->PoolStart)) / adev->memblocksize;
-+
-+ log(L_DEBUG, "TotalMemoryBlocks=%u (%u bytes)\n",
-+ TotalMemoryBlocks, TotalMemoryBlocks*adev->memblocksize);
-+
-+ /* MemoryConfigOption.DMA_config bitmask:
-+ access to ACX memory is to be done:
-+ 0x00080000 using PCI conf space?!
-+ 0x00040000 using IO instructions?
-+ 0x00000000 using memory access instructions
-+ 0x00020000 using local memory block linked list (else what?)
-+ 0x00010000 using host indirect descriptors (else host must access ACX memory?)
-+ */
-+#if defined (ACX_MEM)
-+ /*
-+ * ACX ignores DMA_config for generic slave mode.
-+ */
-+ MemoryConfigOption.DMA_config = 0;
-+ /* Declare start of the Rx host pool */
-+ MemoryConfigOption.pRxHostDesc = cpu2acx(0);
-+ log(L_DEBUG, "pRxHostDesc 0x%08X, rxhostdesc_startphy 0x%lX\n",
-+ acx2cpu(MemoryConfigOption.pRxHostDesc),
-+ (long)adev->rxhostdesc_startphy);
-+#else
-+ if (IS_PCI(adev)) {
-+ MemoryConfigOption.DMA_config = cpu_to_le32(0x30000);
-+ /* Declare start of the Rx host pool */
-+ MemoryConfigOption.pRxHostDesc = cpu2acx(adev->rxhostdesc_startphy);
-+ log(L_DEBUG, "pRxHostDesc 0x%08X, rxhostdesc_startphy 0x%lX\n",
-+ acx2cpu(MemoryConfigOption.pRxHostDesc),
-+ (long)adev->rxhostdesc_startphy);
-+ } else {
-+ MemoryConfigOption.DMA_config = cpu_to_le32(0x20000);
-+ }
-+#endif
-+
-+ /* 50% of the allotment of memory blocks go to tx descriptors */
-+ TxBlockNum = TotalMemoryBlocks / 2;
-+ MemoryConfigOption.TxBlockNum = cpu_to_le16(TxBlockNum);
-+
-+ /* and 50% go to the rx descriptors */
-+ RxBlockNum = TotalMemoryBlocks - TxBlockNum;
-+ MemoryConfigOption.RxBlockNum = cpu_to_le16(RxBlockNum);
-+
-+ /* size of the tx and rx descriptor queues */
-+ TotalTxBlockSize = TxBlockNum * adev->memblocksize;
-+ TotalRxBlockSize = RxBlockNum * adev->memblocksize;
-+ log(L_DEBUG, "TxBlockNum %u RxBlockNum %u TotalTxBlockSize %u "
-+ "TotalTxBlockSize %u\n", TxBlockNum, RxBlockNum,
-+ TotalTxBlockSize, TotalRxBlockSize);
-+
-+
-+ /* align the tx descriptor queue to an alignment of 0x20 (32 bytes) */
-+ MemoryConfigOption.rx_mem =
-+ cpu_to_le32((le32_to_cpu(mmt->PoolStart) + 0x1f) & ~0x1f);
-+
-+ /* align the rx descriptor queue to units of 0x20
-+ * and offset it by the tx descriptor queue */
-+ MemoryConfigOption.tx_mem =
-+ cpu_to_le32((le32_to_cpu(mmt->PoolStart) + TotalRxBlockSize + 0x1f) & ~0x1f);
-+ log(L_DEBUG, "rx_mem %08X rx_mem %08X\n",
-+ MemoryConfigOption.tx_mem, MemoryConfigOption.rx_mem);
-+
-+ /* alert the device to our decision */
-+ if (OK != acx_s_configure(adev, &MemoryConfigOption, ACX1xx_IE_MEMORY_CONFIG_OPTIONS)) {
-+ goto bad;
-+ }
-+
-+ /* and tell the device to kick it into gear */
-+ if (OK != acx_s_issue_cmd(adev, ACX100_CMD_INIT_MEMORY, NULL, 0)) {
-+ goto bad;
-+ }
-+#ifdef ACX_MEM
-+ /*
-+ * slave memory interface has to manage the transmit pools for the ACX,
-+ * so it needs to know what we chose here.
-+ */
-+ adev->acx_txbuf_start = MemoryConfigOption.tx_mem;
-+ adev->acx_txbuf_numblocks = MemoryConfigOption.TxBlockNum;
-+#endif
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx100_s_create_dma_regions
-+**
-+** Note that this fn messes up heavily with hardware, but we cannot
-+** lock it (we need to sleep). Not a problem since IRQs can't happen
-+*/
-+static int
-+acx100_s_create_dma_regions(acx_device_t *adev)
-+{
-+ acx100_ie_queueconfig_t queueconf;
-+ acx_ie_memmap_t memmap;
-+ int res = NOT_OK;
-+ u32 tx_queue_start, rx_queue_start;
-+
-+ FN_ENTER;
-+
-+ /* read out the acx100 physical start address for the queues */
-+ if (OK != acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ tx_queue_start = le32_to_cpu(memmap.QueueStart);
-+ rx_queue_start = tx_queue_start + TX_CNT * sizeof(txdesc_t);
-+
-+ log(L_DEBUG, "initializing Queue Indicator\n");
-+
-+ memset(&queueconf, 0, sizeof(queueconf));
-+
-+ /* Not needed for PCI or slave memory, so we can avoid setting them altogether */
-+ if (IS_USB(adev)) {
-+ queueconf.NumTxDesc = USB_TX_CNT;
-+ queueconf.NumRxDesc = USB_RX_CNT;
-+ }
-+
-+ /* calculate size of queues */
-+ queueconf.AreaSize = cpu_to_le32(
-+ TX_CNT * sizeof(txdesc_t) +
-+ RX_CNT * sizeof(rxdesc_t) + 8
-+ );
-+ queueconf.NumTxQueues = 1; /* number of tx queues */
-+ /* sets the beginning of the tx descriptor queue */
-+ queueconf.TxQueueStart = memmap.QueueStart;
-+ /* done by memset: queueconf.TxQueuePri = 0; */
-+ queueconf.RxQueueStart = cpu_to_le32(rx_queue_start);
-+ queueconf.QueueOptions = 1; /* auto reset descriptor */
-+ /* sets the end of the rx descriptor queue */
-+ queueconf.QueueEnd = cpu_to_le32(
-+ rx_queue_start + RX_CNT * sizeof(rxdesc_t)
-+ );
-+ /* sets the beginning of the next queue */
-+ queueconf.HostQueueEnd = cpu_to_le32(le32_to_cpu(queueconf.QueueEnd) + 8);
-+ if (OK != acx_s_configure(adev, &queueconf, ACX1xx_IE_QUEUE_CONFIG)) {
-+ goto fail;
-+ }
-+
-+#if defined (ACX_MEM)
-+ /* sets the beginning of the rx descriptor queue, after the tx descrs */
-+ adev->acx_queue_indicator =
-+ (queueindicator_t *) le32_to_cpu (queueconf.QueueEnd);
-+ if (OK != acxmem_s_create_hostdesc_queues(adev))
-+ goto fail;
-+
-+ acxmem_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+#else
-+ if (IS_PCI(adev)) {
-+ /* sets the beginning of the rx descriptor queue, after the tx descrs */
-+ if (OK != acxpci_s_create_hostdesc_queues(adev))
-+ goto fail;
-+ acxpci_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+ }
-+#endif
-+
-+ if (OK != acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ /*
-+ * Have to make sure we skip past the Queue Indicator (QueueEnd) and Host Queue Indicator
-+ * maps, each of which are 8 bytes and follow immediately after the transmit and
-+ * receive queues.
-+ */
-+ memmap.PoolStart = cpu_to_le32(
-+ (le32_to_cpu(memmap.QueueEnd) + 4 + 0x1f) & ~0x1f
-+ );
-+
-+ if (OK != acx_s_configure(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ if (OK != acx100_s_init_memory_pools(adev, &memmap)) {
-+ goto fail;
-+ }
-+
-+ res = OK;
-+ goto end;
-+
-+fail:
-+ acx_s_msleep(1000); /* ? */
-+#if defined (ACX_MEM)
-+ acxmem_free_desc_queues(adev);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_free_desc_queues(adev);
-+#endif
-+end:
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acx111_s_create_dma_regions
-+**
-+** Note that this fn messes heavily with hardware, but we cannot
-+** lock it (we need to sleep). Not a problem since IRQs can't happen
-+*/
-+#define ACX111_PERCENT(percent) ((percent)/5)
-+
-+static int
-+acx111_s_create_dma_regions(acx_device_t *adev)
-+{
-+ struct acx111_ie_memoryconfig memconf;
-+ struct acx111_ie_queueconfig queueconf;
-+ u32 tx_queue_start, rx_queue_start;
-+
-+ FN_ENTER;
-+
-+ /* Calculate memory positions and queue sizes */
-+
-+ /* Set up our host descriptor pool + data pool */
-+#if defined (ACX_MEM)
-+ if (OK != acxmem_s_create_hostdesc_queues(adev))
-+ goto fail;
-+#else
-+ if (IS_PCI(adev)) {
-+ if (OK != acxpci_s_create_hostdesc_queues(adev))
-+ goto fail;
-+ }
-+#endif
-+
-+ memset(&memconf, 0, sizeof(memconf));
-+ /* the number of STAs (STA contexts) to support
-+ ** NB: was set to 1 and everything seemed to work nevertheless... */
-+ memconf.no_of_stations = cpu_to_le16(VEC_SIZE(adev->sta_list));
-+ /* specify the memory block size. Default is 256 */
-+ memconf.memory_block_size = cpu_to_le16(adev->memblocksize);
-+ /* let's use 50%/50% for tx/rx (specify percentage, units of 5%) */
-+ memconf.tx_rx_memory_block_allocation = ACX111_PERCENT(50);
-+ /* set the count of our queues
-+ ** NB: struct acx111_ie_memoryconfig shall be modified
-+ ** if we ever will switch to more than one rx and/or tx queue */
-+ memconf.count_rx_queues = 1;
-+ memconf.count_tx_queues = 1;
-+ /* 0 == Busmaster Indirect Memory Organization, which is what we want
-+ * (using linked host descs with their allocated mem).
-+ * 2 == Generic Bus Slave */
-+ /* done by memset: memconf.options = 0; */
-+ /* let's use 25% for fragmentations and 75% for frame transfers
-+ * (specified in units of 5%) */
-+ memconf.fragmentation = ACX111_PERCENT(75);
-+ /* Rx descriptor queue config */
-+ memconf.rx_queue1_count_descs = RX_CNT;
-+ memconf.rx_queue1_type = 7; /* must be set to 7 */
-+ /* done by memset: memconf.rx_queue1_prio = 0; low prio */
-+#if defined (ACX_MEM)
-+ memconf.rx_queue1_host_rx_start = cpu2acx(adev->rxhostdesc_startphy);
-+#else
-+ if (IS_PCI(adev)) {
-+ memconf.rx_queue1_host_rx_start = cpu2acx(adev->rxhostdesc_startphy);
-+ }
-+#endif
-+ /* Tx descriptor queue config */
-+ memconf.tx_queue1_count_descs = TX_CNT;
-+ /* done by memset: memconf.tx_queue1_attributes = 0; lowest priority */
-+
-+ /* NB1: this looks wrong: (memconf,ACX1xx_IE_QUEUE_CONFIG),
-+ ** (queueconf,ACX1xx_IE_MEMORY_CONFIG_OPTIONS) look swapped, eh?
-+ ** But it is actually correct wrt IE numbers.
-+ ** NB2: sizeof(memconf) == 28 == 0x1c but configure(ACX1xx_IE_QUEUE_CONFIG)
-+ ** writes 0x20 bytes (because same IE for acx100 uses struct acx100_ie_queueconfig
-+ ** which is 4 bytes larger. what a mess. TODO: clean it up) */
-+ if (OK != acx_s_configure(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG)) {
-+ goto fail;
-+ }
-+
-+ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
-+
-+ tx_queue_start = le32_to_cpu(queueconf.tx1_queue_address);
-+ rx_queue_start = le32_to_cpu(queueconf.rx1_queue_address);
-+
-+ log(L_INIT, "dump queue head (from card):\n"
-+ "len: %u\n"
-+ "tx_memory_block_address: %X\n"
-+ "rx_memory_block_address: %X\n"
-+ "tx1_queue address: %X\n"
-+ "rx1_queue address: %X\n",
-+ le16_to_cpu(queueconf.len),
-+ le32_to_cpu(queueconf.tx_memory_block_address),
-+ le32_to_cpu(queueconf.rx_memory_block_address),
-+ tx_queue_start,
-+ rx_queue_start);
-+
-+#if defined (ACX_MEM)
-+ acxmem_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+#endif
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+#if defined (ACX_MEM)
-+ acxmem_free_desc_queues(adev);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_free_desc_queues(adev);
-+#endif
-+
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static void
-+acx_s_initialize_rx_config(acx_device_t *adev)
-+{
-+ struct {
-+ u16 id;
-+ u16 len;
-+ u16 rx_cfg1;
-+ u16 rx_cfg2;
-+ } ACX_PACKED cfg;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_OFF:
-+ adev->rx_config_1 = (u16) (0
-+ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
-+ /* | RX_CFG1_FILTER_SSID */
-+ /* | RX_CFG1_FILTER_BCAST */
-+ /* | RX_CFG1_RCV_MC_ADDR1 */
-+ /* | RX_CFG1_RCV_MC_ADDR0 */
-+ /* | RX_CFG1_FILTER_ALL_MULTI */
-+ /* | RX_CFG1_FILTER_BSSID */
-+ /* | RX_CFG1_FILTER_MAC */
-+ /* | RX_CFG1_RCV_PROMISCUOUS */
-+ /* | RX_CFG1_INCLUDE_FCS */
-+ /* | RX_CFG1_INCLUDE_PHY_HDR */
-+ );
-+ adev->rx_config_2 = (u16) (0
-+ /*| RX_CFG2_RCV_ASSOC_REQ */
-+ /*| RX_CFG2_RCV_AUTH_FRAMES */
-+ /*| RX_CFG2_RCV_BEACON_FRAMES */
-+ /*| RX_CFG2_RCV_CONTENTION_FREE */
-+ /*| RX_CFG2_RCV_CTRL_FRAMES */
-+ /*| RX_CFG2_RCV_DATA_FRAMES */
-+ /*| RX_CFG2_RCV_BROKEN_FRAMES */
-+ /*| RX_CFG2_RCV_MGMT_FRAMES */
-+ /*| RX_CFG2_RCV_PROBE_REQ */
-+ /*| RX_CFG2_RCV_PROBE_RESP */
-+ /*| RX_CFG2_RCV_ACK_FRAMES */
-+ /*| RX_CFG2_RCV_OTHER */
-+ );
-+ break;
-+ case ACX_MODE_MONITOR:
-+ adev->rx_config_1 = (u16) (0
-+ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
-+ /* | RX_CFG1_FILTER_SSID */
-+ /* | RX_CFG1_FILTER_BCAST */
-+ /* | RX_CFG1_RCV_MC_ADDR1 */
-+ /* | RX_CFG1_RCV_MC_ADDR0 */
-+ /* | RX_CFG1_FILTER_ALL_MULTI */
-+ /* | RX_CFG1_FILTER_BSSID */
-+ /* | RX_CFG1_FILTER_MAC */
-+ | RX_CFG1_RCV_PROMISCUOUS
-+ /* | RX_CFG1_INCLUDE_FCS */
-+ /* | RX_CFG1_INCLUDE_PHY_HDR */
-+ );
-+ adev->rx_config_2 = (u16) (0
-+ | RX_CFG2_RCV_ASSOC_REQ
-+ | RX_CFG2_RCV_AUTH_FRAMES
-+ | RX_CFG2_RCV_BEACON_FRAMES
-+ | RX_CFG2_RCV_CONTENTION_FREE
-+ | RX_CFG2_RCV_CTRL_FRAMES
-+ | RX_CFG2_RCV_DATA_FRAMES
-+ | RX_CFG2_RCV_BROKEN_FRAMES
-+ | RX_CFG2_RCV_MGMT_FRAMES
-+ | RX_CFG2_RCV_PROBE_REQ
-+ | RX_CFG2_RCV_PROBE_RESP
-+ | RX_CFG2_RCV_ACK_FRAMES
-+ | RX_CFG2_RCV_OTHER
-+ );
-+ break;
-+ default:
-+ adev->rx_config_1 = (u16) (0
-+ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
-+ /* | RX_CFG1_FILTER_SSID */
-+ /* | RX_CFG1_FILTER_BCAST */
-+ /* | RX_CFG1_RCV_MC_ADDR1 */
-+ /* | RX_CFG1_RCV_MC_ADDR0 */
-+ /* | RX_CFG1_FILTER_ALL_MULTI */
-+ /* | RX_CFG1_FILTER_BSSID */
-+ | RX_CFG1_FILTER_MAC
-+ /* | RX_CFG1_RCV_PROMISCUOUS */
-+ /* | RX_CFG1_INCLUDE_FCS */
-+ /* | RX_CFG1_INCLUDE_PHY_HDR */
-+ );
-+ adev->rx_config_2 = (u16) (0
-+ | RX_CFG2_RCV_ASSOC_REQ
-+ | RX_CFG2_RCV_AUTH_FRAMES
-+ | RX_CFG2_RCV_BEACON_FRAMES
-+ | RX_CFG2_RCV_CONTENTION_FREE
-+ | RX_CFG2_RCV_CTRL_FRAMES
-+ | RX_CFG2_RCV_DATA_FRAMES
-+ /*| RX_CFG2_RCV_BROKEN_FRAMES */
-+ | RX_CFG2_RCV_MGMT_FRAMES
-+ | RX_CFG2_RCV_PROBE_REQ
-+ | RX_CFG2_RCV_PROBE_RESP
-+ /*| RX_CFG2_RCV_ACK_FRAMES */
-+ | RX_CFG2_RCV_OTHER
-+ );
-+ break;
-+ }
-+ adev->rx_config_1 |= RX_CFG1_INCLUDE_RXBUF_HDR;
-+
-+ if ((adev->rx_config_1 & RX_CFG1_INCLUDE_PHY_HDR)
-+ || (adev->firmware_numver >= 0x02000000))
-+ adev->phy_header_len = IS_ACX111(adev) ? 8 : 4;
-+ else
-+ adev->phy_header_len = 0;
-+
-+ log(L_INIT, "setting RXconfig to %04X:%04X\n",
-+ adev->rx_config_1, adev->rx_config_2);
-+ cfg.rx_cfg1 = cpu_to_le16(adev->rx_config_1);
-+ cfg.rx_cfg2 = cpu_to_le16(adev->rx_config_2);
-+ acx_s_configure(adev, &cfg, ACX1xx_IE_RXCONFIG);
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_set_defaults
-+*/
-+void
-+acx_s_set_defaults(acx_device_t *adev)
-+{
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ /* do it before getting settings, prevent bogus channel 0 warning */
-+ adev->channel = 1;
-+
-+ /* query some settings from the card.
-+ * NOTE: for some settings, e.g. CCA and ED (ACX100!), an initial
-+ * query is REQUIRED, otherwise the card won't work correctly! */
-+ adev->get_mask = GETSET_ANTENNA|GETSET_SENSITIVITY|GETSET_STATION_ID|GETSET_REG_DOMAIN;
-+ /* Only ACX100 supports ED and CCA */
-+ if (IS_ACX100(adev))
-+ adev->get_mask |= GETSET_CCA|GETSET_ED_THRESH;
-+
-+ acx_s_update_card_settings(adev);
-+
-+ acx_lock(adev, flags);
-+
-+ /* set our global interrupt mask */
-+#if defined (ACX_MEM)
-+ acxmem_set_interrupt_mask(adev);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_set_interrupt_mask(adev);
-+#endif
-+
-+ adev->led_power = 1; /* LED is active on startup */
-+ adev->brange_max_quality = 60; /* LED blink max quality is 60 */
-+ adev->brange_time_last_state_change = jiffies;
-+
-+ /* copy the MAC address we just got from the card
-+ * into our MAC address used during current 802.11 session */
-+ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr);
-+ MAC_BCAST(adev->ap);
-+
-+ adev->essid_len =
-+ snprintf(adev->essid, sizeof(adev->essid), "STA%02X%02X%02X",
-+ adev->dev_addr[3], adev->dev_addr[4], adev->dev_addr[5]);
-+ adev->essid_active = 1;
-+
-+ /* we have a nick field to waste, so why not abuse it
-+ * to announce the driver version? ;-) */
-+ strncpy(adev->nick, "acx " ACX_RELEASE, IW_ESSID_MAX_SIZE);
-+
-+#if defined (ACX_MEM)
-+ adev->reg_dom_id = adev->cfgopt_domains.list[0];
-+#else
-+ if (IS_PCI(adev)) { /* FIXME: this should be made to apply to USB, too! */
-+ /* first regulatory domain entry in EEPROM == default reg. domain */
-+ adev->reg_dom_id = adev->cfgopt_domains.list[0];
-+ }
-+#endif
-+
-+ /* 0xffff would be better, but then we won't get a "scan complete"
-+ * interrupt, so our current infrastructure will fail: */
-+ adev->scan_count = 1;
-+ adev->scan_mode = ACX_SCAN_OPT_ACTIVE;
-+ adev->scan_duration = 100;
-+ adev->scan_probe_delay = 200;
-+ /* reported to break scanning: adev->scan_probe_delay = adev->cfgopt_probe_delay; */
-+ adev->scan_rate = ACX_SCAN_RATE_1;
-+
-+ adev->mode = ACX_MODE_2_STA;
-+ adev->auth_alg = WLAN_AUTH_ALG_OPENSYSTEM;
-+ adev->listen_interval = 100;
-+ adev->beacon_interval = DEFAULT_BEACON_INTERVAL;
-+ adev->dtim_interval = DEFAULT_DTIM_INTERVAL;
-+
-+ adev->msdu_lifetime = DEFAULT_MSDU_LIFETIME;
-+
-+ adev->rts_threshold = DEFAULT_RTS_THRESHOLD;
-+ adev->frag_threshold = 2346;
-+
-+ /* use standard default values for retry limits */
-+ adev->short_retry = 7; /* max. retries for (short) non-RTS packets */
-+ adev->long_retry = 4; /* max. retries for long (RTS) packets */
-+
-+ adev->preamble_mode = 2; /* auto */
-+ adev->fallback_threshold = 3;
-+ adev->stepup_threshold = 10;
-+ adev->rate_bcast = RATE111_1;
-+ adev->rate_bcast100 = RATE100_1;
-+ adev->rate_basic = RATE111_1 | RATE111_2;
-+ adev->rate_auto = 1;
-+ if (IS_ACX111(adev)) {
-+ adev->rate_oper = RATE111_ALL;
-+ } else {
-+ adev->rate_oper = RATE111_ACX100_COMPAT;
-+ }
-+
-+ /* Supported Rates element - the rates here are given in units of
-+ * 500 kbit/s, plus 0x80 added. See 802.11-1999.pdf item 7.3.2.2 */
-+ acx_l_update_ratevector(adev);
-+
-+ /* set some more defaults */
-+ if (IS_ACX111(adev)) {
-+ /* 30mW (15dBm) is default, at least in my acx111 card: */
-+ adev->tx_level_dbm = 15;
-+ } else {
-+ /* don't use max. level, since it might be dangerous
-+ * (e.g. WRT54G people experience
-+ * excessive Tx power damage!) */
-+ adev->tx_level_dbm = 18;
-+ /*
-+ * Lower power for the iPaq hx4700
-+ */
-+ if (IS_MEM(adev)) {
-+ adev->tx_level_dbm = 14;
-+ }
-+ }
-+ /* adev->tx_level_auto = 1; */
-+ if (IS_ACX111(adev)) {
-+ /* start with sensitivity level 1 out of 3: */
-+ adev->sensitivity = 1;
-+ }
-+
-+/* #define ENABLE_POWER_SAVE */
-+#ifdef ENABLE_POWER_SAVE
-+ adev->ps_wakeup_cfg = PS_CFG_ENABLE | PS_CFG_WAKEUP_ALL_BEAC;
-+ adev->ps_listen_interval = 1;
-+ adev->ps_options = PS_OPT_ENA_ENHANCED_PS | PS_OPT_TX_PSPOLL | PS_OPT_STILL_RCV_BCASTS;
-+ adev->ps_hangover_period = 30;
-+ adev->ps_enhanced_transition_time = 0;
-+#else
-+ adev->ps_wakeup_cfg = 0;
-+ adev->ps_listen_interval = 0;
-+ adev->ps_options = 0;
-+ adev->ps_hangover_period = 0;
-+ adev->ps_enhanced_transition_time = 0;
-+#endif
-+
-+ /* These settings will be set in fw on ifup */
-+ adev->set_mask = 0
-+ | GETSET_RETRY
-+ | SET_MSDU_LIFETIME
-+ /* configure card to do rate fallback when in auto rate mode */
-+ | SET_RATE_FALLBACK
-+ | SET_RXCONFIG
-+ | GETSET_TXPOWER
-+ /* better re-init the antenna value we got above */
-+ | GETSET_ANTENNA
-+#if POWER_SAVE_80211
-+ | GETSET_POWER_80211
-+#endif
-+ ;
-+
-+ acx_unlock(adev, flags);
-+ acx_lock_unhold(); /* hold time 844814 CPU ticks @2GHz */
-+
-+ acx_s_initialize_rx_config(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** FIXME: this should be solved in a general way for all radio types
-+** by decoding the radio firmware module,
-+** since it probably has some standard structure describing how to
-+** set the power level of the radio module which it controls.
-+** Or maybe not, since the radio module probably has a function interface
-+** instead which then manages Tx level programming :-\
-+*/
-+static int
-+acx111_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ struct acx111_ie_tx_level tx_level;
-+
-+ /* my acx111 card has two power levels in its configoptions (== EEPROM):
-+ * 1 (30mW) [15dBm]
-+ * 2 (10mW) [10dBm]
-+ * For now, just assume all other acx111 cards have the same.
-+ * FIXME: Ideally we would query it here, but we first need a
-+ * standard way to query individual configoptions easily.
-+ * Well, now we have proper cfgopt txpower variables, but this still
-+ * hasn't been done yet, since it also requires dBm <-> mW conversion here... */
-+ if (level_dbm <= 12) {
-+ tx_level.level = 2; /* 10 dBm */
-+ adev->tx_level_dbm = 10;
-+ } else {
-+ tx_level.level = 1; /* 15 dBm */
-+ adev->tx_level_dbm = 15;
-+ }
-+ if (level_dbm != adev->tx_level_dbm)
-+ log(L_INIT, "acx111 firmware has specific "
-+ "power levels only: adjusted %d dBm to %d dBm!\n",
-+ level_dbm, adev->tx_level_dbm);
-+
-+ return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
-+}
-+
-+static int
-+acx_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ if (IS_ACX111(adev)) {
-+ return acx111_s_set_tx_level(adev, level_dbm);
-+ }
-+#if defined (ACX_MEM)
-+ return acx100mem_s_set_tx_level(adev, level_dbm);
-+#else
-+ if (IS_PCI(adev)) {
-+ return acx100pci_s_set_tx_level(adev, level_dbm);
-+ }
-+#endif
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#ifdef UNUSED
-+/* Returns the current tx level (ACX111) */
-+static u8
-+acx111_s_get_tx_level(acx_device_t *adev)
-+{
-+ struct acx111_ie_tx_level tx_level;
-+
-+ tx_level.level = 0;
-+ acx_s_interrogate(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
-+ return tx_level.level;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_l_rxmonitor
-+** Called from IRQ context only
-+*/
-+static void
-+acx_l_rxmonitor(acx_device_t *adev, const rxbuffer_t *rxbuf)
-+{
-+ wlansniffrm_t *msg;
-+ struct sk_buff *skb;
-+ void *datap;
-+ unsigned int skb_len;
-+ int payload_offset;
-+
-+ FN_ENTER;
-+
-+ /* we are in big luck: the acx100 doesn't modify any of the fields */
-+ /* in the 802.11 frame. just pass this packet into the PF_PACKET */
-+ /* subsystem. yeah. */
-+ payload_offset = ((u8*)acx_get_wlan_hdr(adev, rxbuf) - (u8*)rxbuf);
-+ skb_len = RXBUF_BYTES_USED(rxbuf) - payload_offset;
-+
-+ /* sanity check */
-+ if (unlikely(skb_len > WLAN_A4FR_MAXLEN_WEP)) {
-+ printk("%s: monitor mode panic: oversized frame!\n",
-+ adev->ndev->name);
-+ goto end;
-+ }
-+
-+ if (adev->ndev->type == ARPHRD_IEEE80211_PRISM)
-+ skb_len += sizeof(*msg);
-+
-+ /* allocate skb */
-+ skb = dev_alloc_skb(skb_len);
-+ if (unlikely(!skb)) {
-+ printk("%s: no memory for skb (%u bytes)\n",
-+ adev->ndev->name, skb_len);
-+ goto end;
-+ }
-+
-+ skb_put(skb, skb_len);
-+
-+ if (adev->ndev->type == ARPHRD_IEEE80211) {
-+ /* when in raw 802.11 mode, just copy frame as-is */
-+ datap = skb->data;
-+ } else if (adev->ndev->type == ARPHRD_IEEE80211_PRISM) {
-+ /* emulate prism header */
-+ msg = (wlansniffrm_t*)skb->data;
-+ datap = msg + 1;
-+
-+ msg->msgcode = WLANSNIFFFRM;
-+ msg->msglen = sizeof(*msg);
-+ strncpy(msg->devname, adev->ndev->name, sizeof(msg->devname)-1);
-+ msg->devname[sizeof(msg->devname)-1] = '\0';
-+
-+ msg->hosttime.did = WLANSNIFFFRM_hosttime;
-+ msg->hosttime.status = WLANITEM_STATUS_data_ok;
-+ msg->hosttime.len = 4;
-+ msg->hosttime.data = jiffies;
-+
-+ msg->mactime.did = WLANSNIFFFRM_mactime;
-+ msg->mactime.status = WLANITEM_STATUS_data_ok;
-+ msg->mactime.len = 4;
-+ msg->mactime.data = rxbuf->time;
-+
-+ msg->channel.did = WLANSNIFFFRM_channel;
-+ msg->channel.status = WLANITEM_STATUS_data_ok;
-+ msg->channel.len = 4;
-+ msg->channel.data = adev->channel;
-+
-+ msg->rssi.did = WLANSNIFFFRM_rssi;
-+ msg->rssi.status = WLANITEM_STATUS_no_value;
-+ msg->rssi.len = 4;
-+ msg->rssi.data = 0;
-+
-+ msg->sq.did = WLANSNIFFFRM_sq;
-+ msg->sq.status = WLANITEM_STATUS_no_value;
-+ msg->sq.len = 4;
-+ msg->sq.data = 0;
-+
-+ msg->signal.did = WLANSNIFFFRM_signal;
-+ msg->signal.status = WLANITEM_STATUS_data_ok;
-+ msg->signal.len = 4;
-+ msg->signal.data = rxbuf->phy_snr;
-+
-+ msg->noise.did = WLANSNIFFFRM_noise;
-+ msg->noise.status = WLANITEM_STATUS_data_ok;
-+ msg->noise.len = 4;
-+ msg->noise.data = rxbuf->phy_level;
-+
-+ msg->rate.did = WLANSNIFFFRM_rate;
-+ msg->rate.status = WLANITEM_STATUS_data_ok;
-+ msg->rate.len = 4;
-+ msg->rate.data = rxbuf->phy_plcp_signal / 5;
-+
-+ msg->istx.did = WLANSNIFFFRM_istx;
-+ msg->istx.status = WLANITEM_STATUS_data_ok;
-+ msg->istx.len = 4;
-+ msg->istx.data = 0; /* tx=0: it's not a tx packet */
-+
-+ skb_len -= sizeof(*msg);
-+
-+ msg->frmlen.did = WLANSNIFFFRM_signal;
-+ msg->frmlen.status = WLANITEM_STATUS_data_ok;
-+ msg->frmlen.len = 4;
-+ msg->frmlen.data = skb_len;
-+ } else {
-+ printk("acx: unsupported netdev type %d!\n", adev->ndev->type);
-+ dev_kfree_skb(skb);
-+ return;
-+ }
-+
-+ /* sanity check (keep it here) */
-+ if (unlikely((int)skb_len < 0)) {
-+ printk("acx: skb_len=%d. Driver bug, please report\n", (int)skb_len);
-+ dev_kfree_skb(skb);
-+ return;
-+ }
-+ memcpy(datap, ((unsigned char*)rxbuf)+payload_offset, skb_len);
-+
-+ skb->dev = adev->ndev;
-+ skb->dev->last_rx = jiffies;
-+
-+ skb_reset_mac_header(skb);
-+ skb->ip_summed = CHECKSUM_NONE;
-+ skb->pkt_type = PACKET_OTHERHOST;
-+ skb->protocol = htons(ETH_P_80211_RAW);
-+ netif_rx(skb);
-+
-+ adev->stats.rx_packets++;
-+ adev->stats.rx_bytes += skb->len;
-+
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_rx_ieee802_11_frame
-+**
-+** Called from IRQ context only
-+*/
-+
-+/* All these contortions are for saner dup logging
-+**
-+** We want: (a) to know about excessive dups
-+** (b) to not spam kernel log about occasional dups
-+**
-+** 1/64 threshold was chosen by running "ping -A"
-+** It gave "rx: 59 DUPs in 2878 packets" only with 4 parallel
-+** "ping -A" streams running. */
-+/* 2005-10-11: bumped up to 1/8
-+** subtract a $smallint from dup_count in order to
-+** avoid "2 DUPs in 19 packets" messages */
-+static inline int
-+acx_l_handle_dup(acx_device_t *adev, u16 seq)
-+{
-+ if (adev->dup_count) {
-+ adev->nondup_count++;
-+ if (time_after(jiffies, adev->dup_msg_expiry)) {
-+ /* Log only if more than 1 dup in 64 packets */
-+ if (adev->nondup_count/8 < adev->dup_count-5) {
-+ printk(KERN_INFO "%s: rx: %d DUPs in "
-+ "%d packets received in 10 secs\n",
-+ adev->ndev->name,
-+ adev->dup_count,
-+ adev->nondup_count);
-+ }
-+ adev->dup_count = 0;
-+ adev->nondup_count = 0;
-+ }
-+ }
-+ if (unlikely(seq == adev->last_seq_ctrl)) {
-+ if (!adev->dup_count++)
-+ adev->dup_msg_expiry = jiffies + 10*HZ;
-+ adev->stats.rx_errors++;
-+ return 1; /* a dup */
-+ }
-+ adev->last_seq_ctrl = seq;
-+ return 0;
-+}
-+
-+static int
-+acx_l_rx_ieee802_11_frame(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ unsigned int ftype, fstype;
-+ const wlan_hdr_t *hdr;
-+ int result = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+
-+ /* see IEEE 802.11-1999.pdf chapter 7 "MAC frame formats" */
-+ if (unlikely((hdr->fc & WF_FC_PVERi) != 0)) {
-+ printk_ratelimited(KERN_INFO "rx: unsupported 802.11 protocol\n");
-+ goto end;
-+ }
-+
-+ ftype = hdr->fc & WF_FC_FTYPEi;
-+ fstype = hdr->fc & WF_FC_FSTYPEi;
-+
-+ switch (ftype) {
-+ /* check data frames first, for speed */
-+ case WF_FTYPE_DATAi:
-+ switch (fstype) {
-+ case WF_FSTYPE_DATAONLYi:
-+ if (acx_l_handle_dup(adev, hdr->seq))
-+ break; /* a dup, simply discard it */
-+
-+ /* TODO:
-+ if (WF_FC_FROMTODSi == (hdr->fc & WF_FC_FROMTODSi)) {
-+ result = acx_l_process_data_frame_wds(adev, rxbuf);
-+ break;
-+ }
-+ */
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_3_AP:
-+ result = acx_l_process_data_frame_master(adev, rxbuf);
-+ break;
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ result = acx_l_process_data_frame_client(adev, rxbuf);
-+ break;
-+ }
-+ case WF_FSTYPE_DATA_CFACKi:
-+ case WF_FSTYPE_DATA_CFPOLLi:
-+ case WF_FSTYPE_DATA_CFACK_CFPOLLi:
-+ case WF_FSTYPE_CFPOLLi:
-+ case WF_FSTYPE_CFACK_CFPOLLi:
-+ /* see above.
-+ acx_process_class_frame(adev, rxbuf, 3); */
-+ break;
-+ case WF_FSTYPE_NULLi:
-+ /* acx_l_process_NULL_frame(adev, rxbuf, 3); */
-+ break;
-+ /* FIXME: same here, see above */
-+ case WF_FSTYPE_CFACKi:
-+ default:
-+ break;
-+ }
-+ break;
-+ case WF_FTYPE_MGMTi:
-+ result = acx_l_process_mgmt_frame(adev, rxbuf);
-+ break;
-+ case WF_FTYPE_CTLi:
-+ if (fstype == WF_FSTYPE_PSPOLLi)
-+ result = OK;
-+ /* this call is irrelevant, since
-+ * acx_process_class_frame is a stub, so return
-+ * immediately instead.
-+ * return acx_process_class_frame(adev, rxbuf, 3); */
-+ break;
-+ default:
-+ break;
-+ }
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_rxbuf
-+**
-+** NB: used by USB code also
-+*/
-+void
-+acx_l_process_rxbuf(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ struct wlan_hdr *hdr;
-+ unsigned int qual;
-+ int buf_len;
-+ u16 fc;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+ fc = le16_to_cpu(hdr->fc);
-+ /* length of frame from control field to first byte of FCS */
-+ buf_len = RXBUF_BYTES_RCVD(adev, rxbuf);
-+
-+ if ( ((WF_FC_FSTYPE & fc) != WF_FSTYPE_BEACON)
-+ || (acx_debug & L_XFER_BEACON)
-+ ) {
-+ log(L_XFER|L_DATA, "rx: %s "
-+ "time:%u len:%u signal:%u SNR:%u macstat:%02X "
-+ "phystat:%02X phyrate:%u status:%u\n",
-+ acx_get_packet_type_string(fc),
-+ le32_to_cpu(rxbuf->time),
-+ buf_len,
-+ acx_signal_to_winlevel(rxbuf->phy_level),
-+ acx_signal_to_winlevel(rxbuf->phy_snr),
-+ rxbuf->mac_status,
-+ rxbuf->phy_stat_baseband,
-+ rxbuf->phy_plcp_signal,
-+ adev->status);
-+ }
-+
-+ if (unlikely(acx_debug & L_DATA)) {
-+ printk("rx: 802.11 buf[%u]: ", buf_len);
-+ acx_dump_bytes(hdr, buf_len);
-+ }
-+
-+ /* FIXME: should check for Rx errors (rxbuf->mac_status?
-+ * discard broken packets - but NOT for monitor!)
-+ * and update Rx packet statistics here */
-+
-+ if (unlikely(adev->mode == ACX_MODE_MONITOR)) {
-+ acx_l_rxmonitor(adev, rxbuf);
-+ } else if (likely(buf_len >= WLAN_HDR_A3_LEN)) {
-+ acx_l_rx_ieee802_11_frame(adev, rxbuf);
-+ } else {
-+ log(L_DEBUG|L_XFER|L_DATA,
-+ "rx: NOT receiving packet (%s): "
-+ "size too small (%u)\n",
-+ acx_get_packet_type_string(fc),
-+ buf_len);
-+ }
-+
-+ /* Now check Rx quality level, AFTER processing packet.
-+ * I tried to figure out how to map these levels to dBm
-+ * values, but for the life of me I really didn't
-+ * manage to get it. Either these values are not meant to
-+ * be expressed in dBm, or it's some pretty complicated
-+ * calculation. */
-+
-+#ifdef FROM_SCAN_SOURCE_ONLY
-+ /* only consider packets originating from the MAC
-+ * address of the device that's managing our BSSID.
-+ * Disable it for now, since it removes information (levels
-+ * from different peers) and slows the Rx path. */
-+ if (adev->ap_client
-+ && mac_is_equal(hdr->a2, adev->ap_client->address)) {
-+#endif
-+ adev->wstats.qual.level = acx_signal_to_winlevel(rxbuf->phy_level);
-+ adev->wstats.qual.noise = acx_signal_to_winlevel(rxbuf->phy_snr);
-+#ifndef OLD_QUALITY
-+ qual = acx_signal_determine_quality(adev->wstats.qual.level,
-+ adev->wstats.qual.noise);
-+#else
-+ qual = (adev->wstats.qual.noise <= 100) ?
-+ 100 - adev->wstats.qual.noise : 0;
-+#endif
-+ adev->wstats.qual.qual = qual;
-+ adev->wstats.qual.updated = 7; /* all 3 indicators updated */
-+#ifdef FROM_SCAN_SOURCE_ONLY
-+ }
-+#endif
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_handle_txrate_auto
-+**
-+** Theory of operation:
-+** client->rate_cap is a bitmask of rates client is capable of.
-+** client->rate_cfg is a bitmask of allowed (configured) rates.
-+** It is set as a result of iwconfig rate N [auto]
-+** or iwpriv set_rates "N,N,N N,N,N" commands.
-+** It can be fixed (e.g. 0x0080 == 18Mbit only),
-+** auto (0x00ff == 18Mbit or any lower value),
-+** and code handles any bitmask (0x1081 == try 54Mbit,18Mbit,1Mbit _only_).
-+**
-+** client->rate_cur is a value for rate111 field in tx descriptor.
-+** It is always set to txrate_cfg sans zero or more most significant
-+** bits. This routine handles selection of new rate_cur value depending on
-+** outcome of last tx event.
-+**
-+** client->rate_100 is a precalculated rate value for acx100
-+** (we can do without it, but will need to calculate it on each tx).
-+**
-+** You cannot configure mixed usage of 5.5 and/or 11Mbit rate
-+** with PBCC and CCK modulation. Either both at CCK or both at PBCC.
-+** In theory you can implement it, but so far it is considered not worth doing.
-+**
-+** 22Mbit, of course, is PBCC always. */
-+
-+/* maps acx100 tx descr rate field to acx111 one */
-+static u16
-+rate100to111(u8 r)
-+{
-+ switch (r) {
-+ case RATE100_1: return RATE111_1;
-+ case RATE100_2: return RATE111_2;
-+ case RATE100_5:
-+ case (RATE100_5 | RATE100_PBCC511): return RATE111_5;
-+ case RATE100_11:
-+ case (RATE100_11 | RATE100_PBCC511): return RATE111_11;
-+ case RATE100_22: return RATE111_22;
-+ default:
-+ printk("acx: unexpected acx100 txrate: %u! "
-+ "Please report\n", r);
-+ return RATE111_1;
-+ }
-+}
-+
-+
-+void
-+acx_l_handle_txrate_auto(acx_device_t *adev, struct client *txc,
-+ u16 cur, u8 rate100, u16 rate111,
-+ u8 error, int pkts_to_ignore)
-+{
-+ u16 sent_rate;
-+ int slower_rate_was_used;
-+
-+ /* vda: hmm. current code will do this:
-+ ** 1. send packets at 11 Mbit, stepup++
-+ ** 2. will try to send at 22Mbit. hardware will see no ACK,
-+ ** retries at 11Mbit, success. code notes that used rate
-+ ** is lower. stepup = 0, fallback++
-+ ** 3. repeat step 2 fallback_count times. Fall back to
-+ ** 11Mbit. go to step 1.
-+ ** If stepup_count is large (say, 16) and fallback_count
-+ ** is small (3), this wouldn't be too bad wrt throughput */
-+
-+ if (unlikely(!cur)) {
-+ printk("acx: BUG! ratemask is empty\n");
-+ return; /* or else we may lock up the box */
-+ }
-+
-+ /* do some preparations, i.e. calculate the one rate that was
-+ * used to send this packet */
-+ if (IS_ACX111(adev)) {
-+ sent_rate = 1 << highest_bit(rate111 & RATE111_ALL);
-+ } else {
-+ sent_rate = rate100to111(rate100);
-+ }
-+ /* sent_rate has only one bit set now, corresponding to tx rate
-+ * which was used by hardware to tx this particular packet */
-+
-+ /* now do the actual auto rate management */
-+ log(L_XFER, "tx: %sclient=%p/"MACSTR" used=%04X cur=%04X cfg=%04X "
-+ "__=%u/%u ^^=%u/%u\n",
-+ (txc->ignore_count > 0) ? "[IGN] " : "",
-+ txc, MAC(txc->address), sent_rate, cur, txc->rate_cfg,
-+ txc->fallback_count, adev->fallback_threshold,
-+ txc->stepup_count, adev->stepup_threshold
-+ );
-+
-+ /* we need to ignore old packets already in the tx queue since
-+ * they use older rate bytes configured before our last rate change,
-+ * otherwise our mechanism will get confused by interpreting old data.
-+ * Do it after logging above */
-+ if (txc->ignore_count) {
-+ txc->ignore_count--;
-+ return;
-+ }
-+
-+ /* true only if the only nonzero bit in sent_rate is
-+ ** less significant than highest nonzero bit in cur */
-+ slower_rate_was_used = ( cur > ((sent_rate<<1)-1) );
-+
-+ if (slower_rate_was_used || error) {
-+ txc->stepup_count = 0;
-+ if (++txc->fallback_count <= adev->fallback_threshold)
-+ return;
-+ txc->fallback_count = 0;
-+
-+ /* clear highest 1 bit in cur */
-+ sent_rate = RATE111_54;
-+ while (!(cur & sent_rate)) sent_rate >>= 1;
-+ CLEAR_BIT(cur, sent_rate);
-+ if (!cur) /* we can't disable all rates! */
-+ cur = sent_rate;
-+ log(L_XFER, "tx: falling back to ratemask %04X\n", cur);
-+
-+ } else { /* there was neither lower rate nor error */
-+ txc->fallback_count = 0;
-+ if (++txc->stepup_count <= adev->stepup_threshold)
-+ return;
-+ txc->stepup_count = 0;
-+
-+ /* Sanitize. Sort of not needed, but I dont trust hw that much...
-+ ** what if it can report bogus tx rates sometimes? */
-+ while (!(cur & sent_rate)) sent_rate >>= 1;
-+
-+ /* try to find a higher sent_rate that isn't yet in our
-+ * current set, but is an allowed cfg */
-+ while (1) {
-+ sent_rate <<= 1;
-+ if (sent_rate > txc->rate_cfg)
-+ /* no higher rates allowed by config */
-+ return;
-+ if (!(cur & sent_rate) && (txc->rate_cfg & sent_rate))
-+ /* found */
-+ break;
-+ /* not found, try higher one */
-+ }
-+ SET_BIT(cur, sent_rate);
-+ log(L_XFER, "tx: stepping up to ratemask %04X\n", cur);
-+ }
-+
-+ txc->rate_cur = cur;
-+ txc->ignore_count = pkts_to_ignore;
-+ /* calculate acx100 style rate byte if needed */
-+ if (IS_ACX100(adev)) {
-+ txc->rate_100 = acx_bitpos2rate100[highest_bit(cur)];
-+ }
-+}
-+
-+
-+/***********************************************************************
-+** acx_i_start_xmit
-+**
-+** Called by network core. Can be called outside of process context.
-+*/
-+int
-+acx_i_start_xmit(struct sk_buff *skb, struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ tx_t *tx;
-+ void *txbuf;
-+ unsigned long flags;
-+ int txresult = NOT_OK;
-+ int len;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(!skb)) {
-+ /* indicate success */
-+ txresult = OK;
-+ goto end_no_unlock;
-+ }
-+ if (unlikely(!adev)) {
-+ goto end_no_unlock;
-+ }
-+
-+ acx_lock(adev, flags);
-+
-+ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) {
-+ goto end;
-+ }
-+ if (unlikely(adev->mode == ACX_MODE_OFF)) {
-+ goto end;
-+ }
-+ if (unlikely(acx_queue_stopped(ndev))) {
-+ log(L_DEBUG, "%s: called when queue stopped\n", __func__);
-+ goto end;
-+ }
-+ if (unlikely(ACX_STATUS_4_ASSOCIATED != adev->status)) {
-+ log(L_XFER, "trying to xmit, but not associated yet: "
-+ "aborting...\n");
-+ /* silently drop the packet, since we're not connected yet */
-+ txresult = OK;
-+ /* ...but indicate an error nevertheless */
-+ adev->stats.tx_errors++;
-+ goto end;
-+ }
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (unlikely(!tx)) {
-+#ifndef ACX_MEM
-+ /*
-+ * generic slave interface has to make do with the tiny amount, around
-+ * 7k, of transmit buffer space on the ACX itself. It is likely this will
-+ * frequently be full.
-+ */
-+ printk_ratelimited("%s: start_xmit: txdesc ring is full, "
-+ "dropping tx\n", ndev->name);
-+#endif
-+ txresult = NOT_OK;
-+ goto end;
-+ }
-+
-+ txbuf = acx_l_get_txbuf(adev, tx);
-+ if (unlikely(!txbuf)) {
-+ /* Card was removed */
-+ txresult = NOT_OK;
-+ acx_l_dealloc_tx(adev, tx);
-+ goto end;
-+ }
-+ len = acx_ether_to_txbuf(adev, txbuf, skb);
-+ if (unlikely(len < 0)) {
-+ /* Error in packet conversion */
-+ txresult = NOT_OK;
-+ acx_l_dealloc_tx(adev, tx);
-+ goto end;
-+ }
-+ acx_l_tx_data(adev, tx, len);
-+ ndev->trans_start = jiffies;
-+
-+ txresult = OK;
-+ adev->stats.tx_packets++;
-+ adev->stats.tx_bytes += skb->len;
-+
-+end:
-+ acx_unlock(adev, flags);
-+
-+end_no_unlock:
-+ if ((txresult == OK) && skb)
-+ dev_kfree_skb_any(skb);
-+
-+ FN_EXIT1(txresult);
-+ return txresult;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_update_ratevector
-+**
-+** Updates adev->rate_supported[_len] according to rate_{basic,oper}
-+*/
-+const u8
-+acx_bitpos2ratebyte[] = {
-+ DOT11RATEBYTE_1,
-+ DOT11RATEBYTE_2,
-+ DOT11RATEBYTE_5_5,
-+ DOT11RATEBYTE_6_G,
-+ DOT11RATEBYTE_9_G,
-+ DOT11RATEBYTE_11,
-+ DOT11RATEBYTE_12_G,
-+ DOT11RATEBYTE_18_G,
-+ DOT11RATEBYTE_22,
-+ DOT11RATEBYTE_24_G,
-+ DOT11RATEBYTE_36_G,
-+ DOT11RATEBYTE_48_G,
-+ DOT11RATEBYTE_54_G,
-+};
-+
-+void
-+acx_l_update_ratevector(acx_device_t *adev)
-+{
-+ u16 bcfg = adev->rate_basic;
-+ u16 ocfg = adev->rate_oper;
-+ u8 *supp = adev->rate_supported;
-+ const u8 *dot11 = acx_bitpos2ratebyte;
-+
-+ FN_ENTER;
-+
-+ while (ocfg) {
-+ if (ocfg & 1) {
-+ *supp = *dot11;
-+ if (bcfg & 1) {
-+ *supp |= 0x80;
-+ }
-+ supp++;
-+ }
-+ dot11++;
-+ ocfg >>= 1;
-+ bcfg >>= 1;
-+ }
-+ adev->rate_supported_len = supp - adev->rate_supported;
-+ if (acx_debug & L_ASSOC) {
-+ printk("new ratevector: ");
-+ acx_dump_bytes(adev->rate_supported, adev->rate_supported_len);
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_init
-+*/
-+static void
-+acx_l_sta_list_init(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+ memset(adev->sta_hash_tab, 0, sizeof(adev->sta_hash_tab));
-+ memset(adev->sta_list, 0, sizeof(adev->sta_list));
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_get_from_hash
-+*/
-+static inline client_t*
-+acx_l_sta_list_get_from_hash(acx_device_t *adev, const u8 *address)
-+{
-+ return adev->sta_hash_tab[address[5] % VEC_SIZE(adev->sta_hash_tab)];
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_get
-+*/
-+client_t*
-+acx_l_sta_list_get(acx_device_t *adev, const u8 *address)
-+{
-+ client_t *client;
-+ FN_ENTER;
-+ client = acx_l_sta_list_get_from_hash(adev, address);
-+ while (client) {
-+ if (mac_is_equal(address, client->address)) {
-+ client->mtime = jiffies;
-+ break;
-+ }
-+ client = client->next;
-+ }
-+ FN_EXIT0;
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_del
-+*/
-+void
-+acx_l_sta_list_del(acx_device_t *adev, client_t *victim)
-+{
-+ client_t *client, *next;
-+
-+ client = acx_l_sta_list_get_from_hash(adev, victim->address);
-+ next = client;
-+ /* tricky. next = client on first iteration only,
-+ ** on all other iters next = client->next */
-+ while (next) {
-+ if (next == victim) {
-+ client->next = victim->next;
-+ /* Overkill */
-+ memset(victim, 0, sizeof(*victim));
-+ break;
-+ }
-+ client = next;
-+ next = client->next;
-+ }
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_alloc
-+**
-+** Never fails - will evict oldest client if needed
-+*/
-+static client_t*
-+acx_l_sta_list_alloc(acx_device_t *adev)
-+{
-+ int i;
-+ unsigned long age, oldest_age;
-+ client_t *client, *oldest;
-+
-+ FN_ENTER;
-+
-+ oldest = &adev->sta_list[0];
-+ oldest_age = 0;
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ client = &adev->sta_list[i];
-+
-+ if (!client->used) {
-+ goto found;
-+ } else {
-+ age = jiffies - client->mtime;
-+ if (oldest_age < age) {
-+ oldest_age = age;
-+ oldest = client;
-+ }
-+ }
-+ }
-+ acx_l_sta_list_del(adev, oldest);
-+ client = oldest;
-+found:
-+ memset(client, 0, sizeof(*client));
-+ FN_EXIT0;
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_add
-+**
-+** Never fails - will evict oldest client if needed
-+*/
-+/* In case we will reimplement it differently... */
-+#define STA_LIST_ADD_CAN_FAIL 0
-+
-+static client_t*
-+acx_l_sta_list_add(acx_device_t *adev, const u8 *address)
-+{
-+ client_t *client;
-+ int index;
-+
-+ FN_ENTER;
-+
-+ client = acx_l_sta_list_alloc(adev);
-+
-+ client->mtime = jiffies;
-+ MAC_COPY(client->address, address);
-+ client->used = CLIENT_EXIST_1;
-+ client->auth_alg = WLAN_AUTH_ALG_SHAREDKEY;
-+ client->auth_step = 1;
-+ /* give some tentative peer rate values
-+ ** (needed because peer may do auth without probing us first,
-+ ** thus we'll have no idea of peer's ratevector yet).
-+ ** Will be overwritten by scanning or assoc code */
-+ client->rate_cap = adev->rate_basic;
-+ client->rate_cfg = adev->rate_basic;
-+ client->rate_cur = 1 << lowest_bit(adev->rate_basic);
-+
-+ index = address[5] % VEC_SIZE(adev->sta_hash_tab);
-+ client->next = adev->sta_hash_tab[index];
-+ adev->sta_hash_tab[index] = client;
-+
-+ acxlog_mac(L_ASSOC, "sta_list_add: sta=", address, "\n");
-+
-+ FN_EXIT0;
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_get_or_add
-+**
-+** Never fails - will evict oldest client if needed
-+*/
-+static client_t*
-+acx_l_sta_list_get_or_add(acx_device_t *adev, const u8 *address)
-+{
-+ client_t *client = acx_l_sta_list_get(adev, address);
-+ if (!client)
-+ client = acx_l_sta_list_add(adev, address);
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_set_status
-+**
-+** This function is called in many atomic regions, must not sleep
-+**
-+** This function does not need locking UNLESS you call it
-+** as acx_set_status(ACX_STATUS_4_ASSOCIATED), bacause this can
-+** wake queue. This can race with stop_queue elsewhere.
-+** See acx_stop_queue comment. */
-+void
-+acx_set_status(acx_device_t *adev, u16 new_status)
-+{
-+#define QUEUE_OPEN_AFTER_ASSOC 1 /* this really seems to be needed now */
-+ u16 old_status = adev->status;
-+
-+ FN_ENTER;
-+
-+ log(L_ASSOC, "%s(%d):%s\n",
-+ __func__, new_status, acx_get_status_name(new_status));
-+
-+ /* wireless_send_event never sleeps */
-+ if (ACX_STATUS_4_ASSOCIATED == new_status) {
-+ union iwreq_data wrqu;
-+
-+ wrqu.data.length = 0;
-+ wrqu.data.flags = 0;
-+ wireless_send_event(adev->ndev, SIOCGIWSCAN, &wrqu, NULL);
-+
-+ wrqu.data.length = 0;
-+ wrqu.data.flags = 0;
-+ MAC_COPY(wrqu.ap_addr.sa_data, adev->bssid);
-+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-+ wireless_send_event(adev->ndev, SIOCGIWAP, &wrqu, NULL);
-+ } else {
-+ union iwreq_data wrqu;
-+
-+ /* send event with empty BSSID to indicate we're not associated */
-+ MAC_ZERO(wrqu.ap_addr.sa_data);
-+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-+ wireless_send_event(adev->ndev, SIOCGIWAP, &wrqu, NULL);
-+ }
-+
-+ adev->status = new_status;
-+
-+ switch (new_status) {
-+ case ACX_STATUS_1_SCANNING:
-+ adev->scan_retries = 0;
-+ /* 1.0 s initial scan time */
-+ acx_set_timer(adev, 1000000);
-+ break;
-+ case ACX_STATUS_2_WAIT_AUTH:
-+ case ACX_STATUS_3_AUTHENTICATED:
-+ adev->auth_or_assoc_retries = 0;
-+ acx_set_timer(adev, 1500000); /* 1.5 s */
-+ break;
-+ }
-+
-+#if QUEUE_OPEN_AFTER_ASSOC
-+ if (new_status == ACX_STATUS_4_ASSOCIATED) {
-+ if (old_status < ACX_STATUS_4_ASSOCIATED) {
-+ /* ah, we're newly associated now,
-+ * so let's indicate carrier */
-+ acx_carrier_on(adev->ndev, "after association");
-+ acx_wake_queue(adev->ndev, "after association");
-+ }
-+ } else {
-+ /* not associated any more, so let's kill carrier */
-+ if (old_status >= ACX_STATUS_4_ASSOCIATED) {
-+ acx_carrier_off(adev->ndev, "after losing association");
-+ acx_stop_queue(adev->ndev, "after losing association");
-+ }
-+ }
-+#endif
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_i_timer
-+**
-+** Fires up periodically. Used to kick scan/auth/assoc if something goes wrong
-+*/
-+void
-+acx_i_timer(unsigned long address)
-+{
-+ unsigned long flags;
-+ acx_device_t *adev = (acx_device_t*)address;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ log(L_DEBUG|L_ASSOC, "%s: adev->status=%d (%s)\n",
-+ __func__, adev->status, acx_get_status_name(adev->status));
-+
-+ switch (adev->status) {
-+ case ACX_STATUS_1_SCANNING:
-+ /* was set to 0 by set_status() */
-+ if (++adev->scan_retries < 7) {
-+ acx_set_timer(adev, 1000000);
-+ /* used to interrogate for scan status.
-+ ** We rely on SCAN_COMPLETE IRQ instead */
-+ log(L_ASSOC, "continuing scan (%d sec)\n",
-+ adev->scan_retries);
-+ } else {
-+ log(L_ASSOC, "stopping scan\n");
-+ /* send stop_scan cmd when we leave the interrupt context,
-+ * and make a decision what to do next (COMPLETE_SCAN) */
-+ acx_schedule_task(adev,
-+ ACX_AFTER_IRQ_CMD_STOP_SCAN + ACX_AFTER_IRQ_COMPLETE_SCAN);
-+ }
-+ break;
-+ case ACX_STATUS_2_WAIT_AUTH:
-+ /* was set to 0 by set_status() */
-+ if (++adev->auth_or_assoc_retries < 10) {
-+ log(L_ASSOC, "resend authen1 request (attempt %d)\n",
-+ adev->auth_or_assoc_retries + 1);
-+ acx_l_transmit_authen1(adev);
-+ } else {
-+ /* time exceeded: fall back to scanning mode */
-+ log(L_ASSOC,
-+ "authen1 request reply timeout, giving up\n");
-+ /* we are a STA, need to find AP anyhow */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING);
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_RESTART_SCAN);
-+ }
-+ /* used to be 1500000, but some other driver uses 2.5s */
-+ acx_set_timer(adev, 2500000);
-+ break;
-+ case ACX_STATUS_3_AUTHENTICATED:
-+ /* was set to 0 by set_status() */
-+ if (++adev->auth_or_assoc_retries < 10) {
-+ log(L_ASSOC, "resend assoc request (attempt %d)\n",
-+ adev->auth_or_assoc_retries + 1);
-+ acx_l_transmit_assoc_req(adev);
-+ } else {
-+ /* time exceeded: give up */
-+ log(L_ASSOC,
-+ "association request reply timeout, giving up\n");
-+ /* we are a STA, need to find AP anyhow */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING);
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_RESTART_SCAN);
-+ }
-+ acx_set_timer(adev, 2500000); /* see above */
-+ break;
-+ case ACX_STATUS_4_ASSOCIATED:
-+ default:
-+ break;
-+ }
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_set_timer
-+**
-+** Sets the 802.11 state management timer's timeout.
-+*/
-+void
-+acx_set_timer(acx_device_t *adev, int timeout_us)
-+{
-+ FN_ENTER;
-+
-+ log(L_DEBUG|L_IRQ, "%s(%u ms)\n", __func__, timeout_us/1000);
-+ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
-+ printk("attempt to set the timer "
-+ "when the card interface is not up!\n");
-+ goto end;
-+ }
-+
-+ /* first check if the timer was already initialized, THEN modify it */
-+ if (adev->mgmt_timer.function) {
-+ mod_timer(&adev->mgmt_timer,
-+ jiffies + (timeout_us * HZ / 1000000));
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_assocresp
-+**
-+** We are an AP here
-+*/
-+static const u8
-+dot11ratebyte[] = {
-+ DOT11RATEBYTE_1,
-+ DOT11RATEBYTE_2,
-+ DOT11RATEBYTE_5_5,
-+ DOT11RATEBYTE_6_G,
-+ DOT11RATEBYTE_9_G,
-+ DOT11RATEBYTE_11,
-+ DOT11RATEBYTE_12_G,
-+ DOT11RATEBYTE_18_G,
-+ DOT11RATEBYTE_22,
-+ DOT11RATEBYTE_24_G,
-+ DOT11RATEBYTE_36_G,
-+ DOT11RATEBYTE_48_G,
-+ DOT11RATEBYTE_54_G,
-+};
-+
-+static inline int
-+find_pos(const u8 *p, int size, u8 v)
-+{
-+ int i;
-+ for (i = 0; i < size; i++)
-+ if (p[i] == v)
-+ return i;
-+ /* printk a message about strange byte? */
-+ return 0;
-+}
-+
-+static void
-+add_bits_to_ratemasks(u8* ratevec, int len, u16* brate, u16* orate)
-+{
-+ while (len--) {
-+ int n = 1 << find_pos(dot11ratebyte,
-+ sizeof(dot11ratebyte), *ratevec & 0x7f);
-+ if (*ratevec & 0x80)
-+ *brate |= n;
-+ *orate |= n;
-+ ratevec++;
-+ }
-+}
-+
-+static int
-+acx_l_transmit_assocresp(acx_device_t *adev, const wlan_fr_assocreq_t *req)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct assocresp_frame_body *body;
-+ u8 *p;
-+ const u8 *da;
-+ /* const u8 *sa; */
-+ const u8 *bssid;
-+ client_t *clt;
-+
-+ FN_ENTER;
-+
-+ /* sa = req->hdr->a1; */
-+ da = req->hdr->a2;
-+ bssid = req->hdr->a3;
-+
-+ clt = acx_l_sta_list_get(adev, da);
-+ if (!clt)
-+ goto ok;
-+
-+ /* Assoc without auth is a big no-no */
-+ /* Let's be liberal: if already assoc'ed STA sends assoc req again,
-+ ** we won't be rude */
-+ if (clt->used != CLIENT_AUTHENTICATED_2
-+ && clt->used != CLIENT_ASSOCIATED_3) {
-+ acx_l_transmit_deauthen(adev, da, WLAN_MGMT_REASON_CLASS2_NONAUTH);
-+ goto bad;
-+ }
-+
-+ clt->used = CLIENT_ASSOCIATED_3;
-+
-+ if (clt->aid == 0)
-+ clt->aid = ++adev->aid;
-+ clt->cap_info = ieee2host16(*(req->cap_info));
-+
-+ /* We cheat here a bit. We don't really care which rates are flagged
-+ ** as basic by the client, so we stuff them in single ratemask */
-+ clt->rate_cap = 0;
-+ if (req->supp_rates)
-+ add_bits_to_ratemasks(req->supp_rates->rates,
-+ req->supp_rates->len, &clt->rate_cap, &clt->rate_cap);
-+ if (req->ext_rates)
-+ add_bits_to_ratemasks(req->ext_rates->rates,
-+ req->ext_rates->len, &clt->rate_cap, &clt->rate_cap);
-+ /* We can check that client supports all basic rates,
-+ ** and deny assoc if not. But let's be liberal, right? ;) */
-+ clt->rate_cfg = clt->rate_cap & adev->rate_oper;
-+ if (!clt->rate_cfg) clt->rate_cfg = 1 << lowest_bit(adev->rate_oper);
-+ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg);
-+ if (IS_ACX100(adev))
-+ clt->rate_100 = acx_bitpos2rate100[lowest_bit(clt->rate_cfg)];
-+ clt->fallback_count = clt->stepup_count = 0;
-+ clt->ignore_count = 16;
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_ASSOCRESPi;
-+ head->dur = req->hdr->dur;
-+ MAC_COPY(head->da, da);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, bssid);
-+ head->seq = req->hdr->seq;
-+
-+ body->cap_info = host2ieee16(adev->capabilities);
-+ body->status = host2ieee16(0);
-+ body->aid = host2ieee16(clt->aid);
-+ p = wlan_fill_ie_rates((u8*)&body->rates, adev->rate_supported_len,
-+ adev->rate_supported);
-+ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len,
-+ adev->rate_supported);
-+
-+ acx_l_tx_data(adev, tx, p - (u8*)head);
-+ok:
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+* acx_l_transmit_reassocresp
-+
-+You may be wondering, just like me, what the hell ReAuth is.
-+In practice it was seen sent by STA when STA feels like losing connection.
-+
-+[802.11]
-+
-+5.4.2.3 Reassociation
-+
-+Association is sufficient for no-transition message delivery between
-+IEEE 802.11 stations. Additional functionality is needed to support
-+BSS-transition mobility. The additional required functionality
-+is provided by the reassociation service. Reassociation is a DSS.
-+The reassociation service is invoked to 'move' a current association
-+from one AP to another. This keeps the DS informed of the current
-+mapping between AP and STA as the station moves from BSS to BSS within
-+an ESS. Reassociation also enables changing association attributes
-+of an established association while the STA remains associated with
-+the same AP. Reassociation is always initiated by the mobile STA.
-+
-+5.4.3.1 Authentication
-+...
-+A STA may be authenticated with many other STAs at any given instant.
-+
-+5.4.3.1.1 Preauthentication
-+
-+Because the authentication process could be time-consuming (depending
-+on the authentication protocol in use), the authentication service can
-+be invoked independently of the association service. Preauthentication
-+is typically done by a STA while it is already associated with an AP
-+(with which it previously authenticated). IEEE 802.11 does not require
-+that STAs preauthenticate with APs. However, authentication is required
-+before an association can be established. If the authentication is left
-+until reassociation time, this may impact the speed with which a STA can
-+reassociate between APs, limiting BSS-transition mobility performance.
-+The use of preauthentication takes the authentication service overhead
-+out of the time-critical reassociation process.
-+
-+5.7.3 Reassociation
-+
-+For a STA to reassociate, the reassociation service causes the following
-+message to occur:
-+
-+ Reassociation request
-+
-+* Message type: Management
-+* Message subtype: Reassociation request
-+* Information items:
-+ - IEEE address of the STA
-+ - IEEE address of the AP with which the STA will reassociate
-+ - IEEE address of the AP with which the STA is currently associated
-+ - ESSID
-+* Direction of message: From STA to 'new' AP
-+
-+The address of the current AP is included for efficiency. The inclusion
-+of the current AP address facilitates MAC reassociation to be independent
-+of the DS implementation.
-+
-+ Reassociation response
-+* Message type: Management
-+* Message subtype: Reassociation response
-+* Information items:
-+ - Result of the requested reassociation. (success/failure)
-+ - If the reassociation is successful, the response shall include the AID.
-+* Direction of message: From AP to STA
-+
-+7.2.3.6 Reassociation Request frame format
-+
-+The frame body of a management frame of subtype Reassociation Request
-+contains the information shown in Table 9.
-+
-+Table 9 Reassociation Request frame body
-+Order Information
-+1 Capability information
-+2 Listen interval
-+3 Current AP address
-+4 SSID
-+5 Supported rates
-+
-+7.2.3.7 Reassociation Response frame format
-+
-+The frame body of a management frame of subtype Reassociation Response
-+contains the information shown in Table 10.
-+
-+Table 10 Reassociation Response frame body
-+Order Information
-+1 Capability information
-+2 Status code
-+3 Association ID (AID)
-+4 Supported rates
-+
-+*/
-+static int
-+acx_l_transmit_reassocresp(acx_device_t *adev, const wlan_fr_reassocreq_t *req)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct reassocresp_frame_body *body;
-+ u8 *p;
-+ const u8 *da;
-+ /* const u8 *sa; */
-+ const u8 *bssid;
-+ client_t *clt;
-+
-+ FN_ENTER;
-+
-+ /* sa = req->hdr->a1; */
-+ da = req->hdr->a2;
-+ bssid = req->hdr->a3;
-+
-+ /* Must be already authenticated, so it must be in the list */
-+ clt = acx_l_sta_list_get(adev, da);
-+ if (!clt)
-+ goto ok;
-+
-+ /* Assoc without auth is a big no-no */
-+ /* Already assoc'ed STAs sending ReAssoc req are ok per 802.11 */
-+ if (clt->used != CLIENT_AUTHENTICATED_2
-+ && clt->used != CLIENT_ASSOCIATED_3) {
-+ acx_l_transmit_deauthen(adev, da, WLAN_MGMT_REASON_CLASS2_NONAUTH);
-+ goto bad;
-+ }
-+
-+ clt->used = CLIENT_ASSOCIATED_3;
-+ if (clt->aid == 0) {
-+ clt->aid = ++adev->aid;
-+ }
-+ if (req->cap_info)
-+ clt->cap_info = ieee2host16(*(req->cap_info));
-+
-+ /* We cheat here a bit. We don't really care which rates are flagged
-+ ** as basic by the client, so we stuff them in single ratemask */
-+ clt->rate_cap = 0;
-+ if (req->supp_rates)
-+ add_bits_to_ratemasks(req->supp_rates->rates,
-+ req->supp_rates->len, &clt->rate_cap, &clt->rate_cap);
-+ if (req->ext_rates)
-+ add_bits_to_ratemasks(req->ext_rates->rates,
-+ req->ext_rates->len, &clt->rate_cap, &clt->rate_cap);
-+ /* We can check that client supports all basic rates,
-+ ** and deny assoc if not. But let's be liberal, right? ;) */
-+ clt->rate_cfg = clt->rate_cap & adev->rate_oper;
-+ if (!clt->rate_cfg) clt->rate_cfg = 1 << lowest_bit(adev->rate_oper);
-+ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg);
-+ if (IS_ACX100(adev))
-+ clt->rate_100 = acx_bitpos2rate100[lowest_bit(clt->rate_cfg)];
-+
-+ clt->fallback_count = clt->stepup_count = 0;
-+ clt->ignore_count = 16;
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto ok;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto ok;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_REASSOCRESPi;
-+ head->dur = req->hdr->dur;
-+ MAC_COPY(head->da, da);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, bssid);
-+ head->seq = req->hdr->seq;
-+
-+ /* IEs: 1. caps */
-+ body->cap_info = host2ieee16(adev->capabilities);
-+ /* 2. status code */
-+ body->status = host2ieee16(0);
-+ /* 3. AID */
-+ body->aid = host2ieee16(clt->aid);
-+ /* 4. supp rates */
-+ p = wlan_fill_ie_rates((u8*)&body->rates, adev->rate_supported_len,
-+ adev->rate_supported);
-+ /* 5. ext supp rates */
-+ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len,
-+ adev->rate_supported);
-+
-+ acx_l_tx_data(adev, tx, p - (u8*)head);
-+ok:
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_disassoc_from_sta
-+*/
-+static void
-+acx_l_process_disassoc_from_sta(acx_device_t *adev, const wlan_fr_disassoc_t *req)
-+{
-+ const u8 *ta;
-+ client_t *clt;
-+
-+ FN_ENTER;
-+
-+ ta = req->hdr->a2;
-+ clt = acx_l_sta_list_get(adev, ta);
-+ if (!clt)
-+ goto end;
-+
-+ if (clt->used != CLIENT_ASSOCIATED_3
-+ && clt->used != CLIENT_AUTHENTICATED_2) {
-+ /* it's disassociating, but it's
-+ ** not even authenticated! Let it know that */
-+ acxlog_mac(L_ASSOC|L_XFER, "peer ", ta, "has sent disassoc "
-+ "req but it is not even auth'ed! sending deauth\n");
-+ acx_l_transmit_deauthen(adev, ta,
-+ WLAN_MGMT_REASON_CLASS2_NONAUTH);
-+ clt->used = CLIENT_EXIST_1;
-+ } else {
-+ /* mark it as auth'ed only */
-+ clt->used = CLIENT_AUTHENTICATED_2;
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_deauthen_from_sta
-+*/
-+static void
-+acx_l_process_deauth_from_sta(acx_device_t *adev, const wlan_fr_deauthen_t *req)
-+{
-+ const wlan_hdr_t *hdr;
-+ client_t *client;
-+
-+ FN_ENTER;
-+
-+ hdr = req->hdr;
-+
-+ if (acx_debug & L_ASSOC) {
-+ acx_print_mac("got deauth from sta:", hdr->a2, " ");
-+ acx_print_mac("a1:", hdr->a1, " ");
-+ acx_print_mac("a3:", hdr->a3, " ");
-+ acx_print_mac("adev->addr:", adev->dev_addr, " ");
-+ acx_print_mac("adev->bssid:", adev->bssid, "\n");
-+ }
-+
-+ if (!mac_is_equal(adev->dev_addr, hdr->a1)) {
-+ goto end;
-+ }
-+
-+ client = acx_l_sta_list_get(adev, hdr->a2);
-+ if (!client) {
-+ goto end;
-+ }
-+ client->used = CLIENT_EXIST_1;
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_disassoc_from_ap
-+*/
-+static void
-+acx_l_process_disassoc_from_ap(acx_device_t *adev, const wlan_fr_disassoc_t *req)
-+{
-+ FN_ENTER;
-+
-+ if (!adev->ap_client) {
-+ /* Hrm, we aren't assoc'ed yet anyhow... */
-+ goto end;
-+ }
-+
-+ printk("%s: got disassoc frame with reason %d (%s)\n",
-+ adev->ndev->name, *req->reason,
-+ acx_wlan_reason_str(*req->reason));
-+
-+ if (mac_is_equal(adev->dev_addr, req->hdr->a1)) {
-+ acx_l_transmit_deauthen(adev, adev->bssid,
-+ WLAN_MGMT_REASON_DEAUTH_LEAVING);
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_deauth_from_ap
-+*/
-+static void
-+acx_l_process_deauth_from_ap(acx_device_t *adev, const wlan_fr_deauthen_t *req)
-+{
-+ FN_ENTER;
-+
-+ if (!adev->ap_client) {
-+ /* Hrm, we aren't assoc'ed yet anyhow... */
-+ goto end;
-+ }
-+
-+ printk("%s: got deauth frame with reason %d (%s)\n",
-+ adev->ndev->name, *req->reason,
-+ acx_wlan_reason_str(*req->reason));
-+
-+ /* Chk: is ta verified to be from our AP? */
-+ if (mac_is_equal(adev->dev_addr, req->hdr->a1)) {
-+ log(L_DEBUG, "AP sent us deauth packet\n");
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_rx
-+**
-+** The end of the Rx path. Pulls data from a rxhostdesc into a socket
-+** buffer and feeds it to the network stack via netif_rx().
-+*/
-+static void
-+acx_l_rx(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ FN_ENTER;
-+ if (likely(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
-+ struct sk_buff *skb;
-+ skb = acx_rxbuf_to_ether(adev, rxbuf);
-+ if (likely(skb)) {
-+ netif_rx(skb);
-+ adev->ndev->last_rx = jiffies;
-+ adev->stats.rx_packets++;
-+ adev->stats.rx_bytes += skb->len;
-+ }
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_data_frame_master
-+*/
-+static int
-+acx_l_process_data_frame_master(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ struct wlan_hdr *hdr;
-+ struct tx *tx;
-+ void *txbuf;
-+ int len;
-+ int result = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+
-+ switch (WF_FC_FROMTODSi & hdr->fc) {
-+ case 0:
-+ case WF_FC_FROMDSi:
-+ log(L_DEBUG, "ap->sta or adhoc->adhoc data frame ignored\n");
-+ goto done;
-+ case WF_FC_TODSi:
-+ break;
-+ default: /* WF_FC_FROMTODSi */
-+ log(L_DEBUG, "wds data frame ignored (TODO)\n");
-+ goto done;
-+ }
-+
-+ /* check if it is our BSSID, if not, leave */
-+ if (!mac_is_equal(adev->bssid, hdr->a1)) {
-+ goto done;
-+ }
-+
-+ if (mac_is_equal(adev->dev_addr, hdr->a3)) {
-+ /* this one is for us */
-+ acx_l_rx(adev, rxbuf);
-+ } else {
-+ if (mac_is_bcast(hdr->a3)) {
-+ /* this one is bcast, rx it too */
-+ acx_l_rx(adev, rxbuf);
-+ }
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx) {
-+ goto fail;
-+ }
-+ /* repackage, tx, and hope it someday reaches its destination */
-+ /* order is important, we do it in-place */
-+ MAC_COPY(hdr->a1, hdr->a3);
-+ MAC_COPY(hdr->a3, hdr->a2);
-+ MAC_COPY(hdr->a2, adev->bssid);
-+ /* To_DS = 0, From_DS = 1 */
-+ hdr->fc = WF_FC_FROMDSi + WF_FTYPE_DATAi;
-+
-+ txbuf = acx_l_get_txbuf(adev, tx);
-+ if (txbuf) {
-+ len = RXBUF_BYTES_RCVD(adev, rxbuf);
-+ memcpy(txbuf, hdr, len);
-+ acx_l_tx_data(adev, tx, len);
-+ } else {
-+ acx_l_dealloc_tx(adev, tx);
-+ }
-+ }
-+done:
-+ result = OK;
-+fail:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_data_frame_client
-+*/
-+static int
-+acx_l_process_data_frame_client(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ const u8 *da, *bssid;
-+ const wlan_hdr_t *hdr;
-+ struct net_device *ndev = adev->ndev;
-+ int result = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ if (ACX_STATUS_4_ASSOCIATED != adev->status)
-+ goto drop;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+
-+ switch (WF_FC_FROMTODSi & hdr->fc) {
-+ case 0:
-+ if (adev->mode != ACX_MODE_0_ADHOC) {
-+ log(L_DEBUG, "adhoc->adhoc data frame ignored\n");
-+ goto drop;
-+ }
-+ bssid = hdr->a3;
-+ break;
-+ case WF_FC_FROMDSi:
-+ if (adev->mode != ACX_MODE_2_STA) {
-+ log(L_DEBUG, "ap->sta data frame ignored\n");
-+ goto drop;
-+ }
-+ bssid = hdr->a2;
-+ break;
-+ case WF_FC_TODSi:
-+ log(L_DEBUG, "sta->ap data frame ignored\n");
-+ goto drop;
-+ default: /* WF_FC_FROMTODSi: wds->wds */
-+ log(L_DEBUG, "wds data frame ignored (todo)\n");
-+ goto drop;
-+ }
-+
-+ da = hdr->a1;
-+
-+ if (unlikely(acx_debug & L_DEBUG)) {
-+ acx_print_mac("rx: da=", da, "");
-+ acx_print_mac(" bssid=", bssid, "");
-+ acx_print_mac(" adev->bssid=", adev->bssid, "");
-+ acx_print_mac(" adev->addr=", adev->dev_addr, "\n");
-+ }
-+
-+ /* promiscuous mode --> receive all packets */
-+ if (unlikely(ndev->flags & IFF_PROMISC))
-+ goto process;
-+
-+ /* FIRST, check if it is our BSSID */
-+ if (!mac_is_equal(adev->bssid, bssid)) {
-+ /* is not our BSSID, so bail out */
-+ goto drop;
-+ }
-+
-+ /* then, check if it is our address */
-+ if (mac_is_equal(adev->dev_addr, da)) {
-+ goto process;
-+ }
-+
-+ /* then, check if it is broadcast */
-+ if (mac_is_bcast(da)) {
-+ goto process;
-+ }
-+
-+ if (mac_is_mcast(da)) {
-+ /* unconditionally receive all multicasts */
-+ if (ndev->flags & IFF_ALLMULTI)
-+ goto process;
-+
-+ /* FIXME: need to check against the list of
-+ * multicast addresses that are configured
-+ * for the interface (ifconfig) */
-+ log(L_XFER, "FIXME: multicast packet, need to check "
-+ "against a list of multicast addresses "
-+ "(to be created!); accepting packet for now\n");
-+ /* for now, just accept it here */
-+ goto process;
-+ }
-+
-+ log(L_DEBUG, "rx: foreign packet, dropping\n");
-+ goto drop;
-+process:
-+ /* receive packet */
-+ acx_l_rx(adev, rxbuf);
-+
-+ result = OK;
-+drop:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_mgmt_frame
-+**
-+** Theory of operation: mgmt packet gets parsed (to make it easy
-+** to access variable-sized IEs), results stored in 'parsed'.
-+** Then we react to the packet.
-+*/
-+typedef union parsed_mgmt_req {
-+ wlan_fr_mgmt_t mgmt;
-+ wlan_fr_assocreq_t assocreq;
-+ wlan_fr_reassocreq_t reassocreq;
-+ wlan_fr_assocresp_t assocresp;
-+ wlan_fr_reassocresp_t reassocresp;
-+ wlan_fr_beacon_t beacon;
-+ wlan_fr_disassoc_t disassoc;
-+ wlan_fr_authen_t authen;
-+ wlan_fr_deauthen_t deauthen;
-+ wlan_fr_proberesp_t proberesp;
-+} parsed_mgmt_req_t;
-+
-+void BUG_excessive_stack_usage(void);
-+
-+static int
-+acx_l_process_mgmt_frame(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ parsed_mgmt_req_t parsed; /* takes ~100 bytes of stack */
-+ wlan_hdr_t *hdr;
-+ int adhoc, sta_scan, sta, ap;
-+ int len;
-+
-+ if (sizeof(parsed) > 256)
-+ BUG_excessive_stack_usage();
-+
-+ FN_ENTER;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+
-+ /* Management frames never have these set */
-+ if (WF_FC_FROMTODSi & hdr->fc) {
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+ }
-+
-+ len = RXBUF_BYTES_RCVD(adev, rxbuf);
-+ if (WF_FC_ISWEPi & hdr->fc)
-+ len -= 0x10;
-+
-+ adhoc = (adev->mode == ACX_MODE_0_ADHOC);
-+ sta_scan = ((adev->mode == ACX_MODE_2_STA)
-+ && (adev->status != ACX_STATUS_4_ASSOCIATED));
-+ sta = ((adev->mode == ACX_MODE_2_STA)
-+ && (adev->status == ACX_STATUS_4_ASSOCIATED));
-+ ap = (adev->mode == ACX_MODE_3_AP);
-+
-+ switch (WF_FC_FSTYPEi & hdr->fc) {
-+ /* beacons first, for speed */
-+ case WF_FSTYPE_BEACONi:
-+ memset(&parsed.beacon, 0, sizeof(parsed.beacon));
-+ parsed.beacon.hdr = hdr;
-+ parsed.beacon.len = len;
-+ if (acx_debug & L_DATA) {
-+ printk("beacon len:%d fc:%04X dur:%04X seq:%04X",
-+ len, hdr->fc, hdr->dur, hdr->seq);
-+ acx_print_mac(" a1:", hdr->a1, "");
-+ acx_print_mac(" a2:", hdr->a2, "");
-+ acx_print_mac(" a3:", hdr->a3, "\n");
-+ }
-+ wlan_mgmt_decode_beacon(&parsed.beacon);
-+ /* beacon and probe response are very similar, so... */
-+ acx_l_process_probe_response(adev, &parsed.beacon, rxbuf);
-+ break;
-+ case WF_FSTYPE_ASSOCREQi:
-+ if (!ap)
-+ break;
-+ memset(&parsed.assocreq, 0, sizeof(parsed.assocreq));
-+ parsed.assocreq.hdr = hdr;
-+ parsed.assocreq.len = len;
-+ wlan_mgmt_decode_assocreq(&parsed.assocreq);
-+ if (mac_is_equal(hdr->a1, adev->bssid)
-+ && mac_is_equal(hdr->a3, adev->bssid)) {
-+ acx_l_transmit_assocresp(adev, &parsed.assocreq);
-+ }
-+ break;
-+ case WF_FSTYPE_REASSOCREQi:
-+ if (!ap)
-+ break;
-+ memset(&parsed.assocreq, 0, sizeof(parsed.assocreq));
-+ parsed.assocreq.hdr = hdr;
-+ parsed.assocreq.len = len;
-+ wlan_mgmt_decode_assocreq(&parsed.assocreq);
-+ /* reassocreq and assocreq are equivalent */
-+ acx_l_transmit_reassocresp(adev, &parsed.reassocreq);
-+ break;
-+ case WF_FSTYPE_ASSOCRESPi:
-+ if (!sta_scan)
-+ break;
-+ memset(&parsed.assocresp, 0, sizeof(parsed.assocresp));
-+ parsed.assocresp.hdr = hdr;
-+ parsed.assocresp.len = len;
-+ wlan_mgmt_decode_assocresp(&parsed.assocresp);
-+ acx_l_process_assocresp(adev, &parsed.assocresp);
-+ break;
-+ case WF_FSTYPE_REASSOCRESPi:
-+ if (!sta_scan)
-+ break;
-+ memset(&parsed.assocresp, 0, sizeof(parsed.assocresp));
-+ parsed.assocresp.hdr = hdr;
-+ parsed.assocresp.len = len;
-+ wlan_mgmt_decode_assocresp(&parsed.assocresp);
-+ acx_l_process_reassocresp(adev, &parsed.reassocresp);
-+ break;
-+ case WF_FSTYPE_PROBEREQi:
-+ if (ap || adhoc) {
-+ /* FIXME: since we're supposed to be an AP,
-+ ** we need to return a Probe Response packet.
-+ ** Currently firmware is doing it for us,
-+ ** but firmware is buggy! See comment elsewhere --vda */
-+ }
-+ break;
-+ case WF_FSTYPE_PROBERESPi:
-+ memset(&parsed.proberesp, 0, sizeof(parsed.proberesp));
-+ parsed.proberesp.hdr = hdr;
-+ parsed.proberesp.len = len;
-+ wlan_mgmt_decode_proberesp(&parsed.proberesp);
-+ acx_l_process_probe_response(adev, &parsed.proberesp, rxbuf);
-+ break;
-+ case 6:
-+ case 7:
-+ /* exit */
-+ break;
-+ case WF_FSTYPE_ATIMi:
-+ /* exit */
-+ break;
-+ case WF_FSTYPE_DISASSOCi:
-+ if (!sta && !ap)
-+ break;
-+ memset(&parsed.disassoc, 0, sizeof(parsed.disassoc));
-+ parsed.disassoc.hdr = hdr;
-+ parsed.disassoc.len = len;
-+ wlan_mgmt_decode_disassoc(&parsed.disassoc);
-+ if (sta)
-+ acx_l_process_disassoc_from_ap(adev, &parsed.disassoc);
-+ else
-+ acx_l_process_disassoc_from_sta(adev, &parsed.disassoc);
-+ break;
-+ case WF_FSTYPE_AUTHENi:
-+ if (!sta_scan && !ap)
-+ break;
-+ memset(&parsed.authen, 0, sizeof(parsed.authen));
-+ parsed.authen.hdr = hdr;
-+ parsed.authen.len = len;
-+ wlan_mgmt_decode_authen(&parsed.authen);
-+ acx_l_process_authen(adev, &parsed.authen);
-+ break;
-+ case WF_FSTYPE_DEAUTHENi:
-+ if (!sta && !ap)
-+ break;
-+ memset(&parsed.deauthen, 0, sizeof(parsed.deauthen));
-+ parsed.deauthen.hdr = hdr;
-+ parsed.deauthen.len = len;
-+ wlan_mgmt_decode_deauthen(&parsed.deauthen);
-+ if (sta)
-+ acx_l_process_deauth_from_ap(adev, &parsed.deauthen);
-+ else
-+ acx_l_process_deauth_from_sta(adev, &parsed.deauthen);
-+ break;
-+ }
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+#ifdef UNUSED
-+/***********************************************************************
-+** acx_process_class_frame
-+**
-+** Called from IRQ context only
-+*/
-+static int
-+acx_process_class_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala)
-+{
-+ return OK;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_l_process_NULL_frame
-+*/
-+#ifdef BOGUS_ITS_NOT_A_NULL_FRAME_HANDLER_AT_ALL
-+static int
-+acx_l_process_NULL_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala)
-+{
-+ const signed char *esi;
-+ const u8 *ebx;
-+ const wlan_hdr_t *hdr;
-+ const client_t *client;
-+ int result = NOT_OK;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+
-+ switch (WF_FC_FROMTODSi & hdr->fc) {
-+ case 0:
-+ esi = hdr->a1;
-+ ebx = hdr->a2;
-+ break;
-+ case WF_FC_FROMDSi:
-+ esi = hdr->a1;
-+ ebx = hdr->a3;
-+ break;
-+ case WF_FC_TODSi:
-+ esi = hdr->a1;
-+ ebx = hdr->a2;
-+ break;
-+ default: /* WF_FC_FROMTODSi */
-+ esi = hdr->a1; /* added by me! --vda */
-+ ebx = hdr->a2;
-+ }
-+
-+ if (esi[0x0] < 0) {
-+ result = OK;
-+ goto done;
-+ }
-+
-+ client = acx_l_sta_list_get(adev, ebx);
-+ if (client)
-+ result = NOT_OK;
-+ else {
-+#ifdef IS_IT_BROKEN
-+ log(L_DEBUG|L_XFER, "<transmit_deauth 7>\n");
-+ acx_l_transmit_deauthen(adev, ebx,
-+ WLAN_MGMT_REASON_CLASS2_NONAUTH);
-+#else
-+ log(L_DEBUG, "received NULL frame from unknown client! "
-+ "We really shouldn't send deauthen here, right?\n");
-+#endif
-+ result = OK;
-+ }
-+done:
-+ return result;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_l_process_probe_response
-+*/
-+static int
-+acx_l_process_probe_response(acx_device_t *adev, wlan_fr_proberesp_t *req,
-+ const rxbuffer_t *rxbuf)
-+{
-+ struct client *bss;
-+ wlan_hdr_t *hdr;
-+
-+ FN_ENTER;
-+
-+ hdr = req->hdr;
-+
-+ if (mac_is_equal(hdr->a3, adev->dev_addr)) {
-+ log(L_ASSOC, "huh, scan found our own MAC!?\n");
-+ goto ok; /* just skip this one silently */
-+ }
-+
-+ bss = acx_l_sta_list_get_or_add(adev, hdr->a2);
-+
-+ /* NB: be careful modifying bss data! It may be one
-+ ** of the already known clients (like our AP if we are a STA)
-+ ** Thus do not blindly modify e.g. current ratemask! */
-+
-+ if (STA_LIST_ADD_CAN_FAIL && !bss) {
-+ /* uh oh, we found more sites/stations than we can handle with
-+ * our current setup: pull the emergency brake and stop scanning! */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_STOP_SCAN);
-+ /* TODO: a nice comment what below call achieves --vda */
-+ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH);
-+ goto ok;
-+ }
-+ /* NB: get_or_add already filled bss->address = hdr->a2 */
-+ MAC_COPY(bss->bssid, hdr->a3);
-+
-+ /* copy the ESSID element */
-+ if (req->ssid && req->ssid->len <= IW_ESSID_MAX_SIZE) {
-+ bss->essid_len = req->ssid->len;
-+ memcpy(bss->essid, req->ssid->ssid, req->ssid->len);
-+ bss->essid[req->ssid->len] = '\0';
-+ } else {
-+ /* Either no ESSID IE or oversized one */
-+ printk("%s: received packet has bogus ESSID\n",
-+ adev->ndev->name);
-+ }
-+
-+ if (req->ds_parms)
-+ bss->channel = req->ds_parms->curr_ch;
-+ if (req->cap_info)
-+ bss->cap_info = ieee2host16(*req->cap_info);
-+
-+ bss->sir = acx_signal_to_winlevel(rxbuf->phy_level);
-+ bss->snr = acx_signal_to_winlevel(rxbuf->phy_snr);
-+
-+ bss->rate_cap = 0; /* operational mask */
-+ bss->rate_bas = 0; /* basic mask */
-+ if (req->supp_rates)
-+ add_bits_to_ratemasks(req->supp_rates->rates,
-+ req->supp_rates->len, &bss->rate_bas, &bss->rate_cap);
-+ if (req->ext_rates)
-+ add_bits_to_ratemasks(req->ext_rates->rates,
-+ req->ext_rates->len, &bss->rate_bas, &bss->rate_cap);
-+ /* Fix up any possible bogosity - code elsewhere
-+ * is not expecting empty masks */
-+ if (!bss->rate_cap)
-+ bss->rate_cap = adev->rate_basic;
-+ if (!bss->rate_bas)
-+ bss->rate_bas = 1 << lowest_bit(bss->rate_cap);
-+ if (!bss->rate_cur)
-+ bss->rate_cur = 1 << lowest_bit(bss->rate_bas);
-+
-+ /* People moan about this being too noisy at L_ASSOC */
-+ log(L_DEBUG,
-+ "found %s: ESSID=\"%s\" ch=%d "
-+ "BSSID="MACSTR" caps=0x%04X SIR=%d SNR=%d\n",
-+ (bss->cap_info & WF_MGMT_CAP_IBSS) ? "Ad-Hoc peer" : "AP",
-+ bss->essid, bss->channel, MAC(bss->bssid), bss->cap_info,
-+ bss->sir, bss->snr);
-+ok:
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_assocresp
-+*/
-+static int
-+acx_l_process_assocresp(acx_device_t *adev, const wlan_fr_assocresp_t *req)
-+{
-+ const wlan_hdr_t *hdr;
-+ int res = OK;
-+
-+ FN_ENTER;
-+
-+ hdr = req->hdr;
-+
-+ if ((ACX_MODE_2_STA == adev->mode)
-+ && mac_is_equal(adev->dev_addr, hdr->a1)) {
-+ u16 st = ieee2host16(*(req->status));
-+ if (WLAN_MGMT_STATUS_SUCCESS == st) {
-+ adev->aid = ieee2host16(*(req->aid));
-+ /* tell the card we are associated when
-+ ** we are out of interrupt context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_ASSOCIATE);
-+ } else {
-+
-+ /* TODO: we shall delete peer from sta_list, and try
-+ ** other candidates... */
-+
-+ printk("%s: association FAILED: peer sent "
-+ "Status Code %d (%s)\n",
-+ adev->ndev->name, st, get_status_string(st));
-+ res = NOT_OK;
-+ }
-+ }
-+
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_reassocresp
-+*/
-+static int
-+acx_l_process_reassocresp(acx_device_t *adev, const wlan_fr_reassocresp_t *req)
-+{
-+ const wlan_hdr_t *hdr;
-+ int result = NOT_OK;
-+ u16 st;
-+
-+ FN_ENTER;
-+
-+ hdr = req->hdr;
-+
-+ if (!mac_is_equal(adev->dev_addr, hdr->a1)) {
-+ goto end;
-+ }
-+ st = ieee2host16(*(req->status));
-+ if (st == WLAN_MGMT_STATUS_SUCCESS) {
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ result = OK;
-+ } else {
-+ printk("%s: reassociation FAILED: peer sent "
-+ "response code %d (%s)\n",
-+ adev->ndev->name, st, get_status_string(st));
-+ }
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_authen
-+**
-+** Called only in STA_SCAN or AP mode
-+*/
-+static int
-+acx_l_process_authen(acx_device_t *adev, const wlan_fr_authen_t *req)
-+{
-+ const wlan_hdr_t *hdr;
-+ client_t *clt;
-+ wlan_ie_challenge_t *chal;
-+ u16 alg, seq, status;
-+ int ap, result;
-+
-+ FN_ENTER;
-+
-+ hdr = req->hdr;
-+
-+ if (acx_debug & L_ASSOC) {
-+ acx_print_mac("AUTHEN adev->addr=", adev->dev_addr, " ");
-+ acx_print_mac("a1=", hdr->a1, " ");
-+ acx_print_mac("a2=", hdr->a2, " ");
-+ acx_print_mac("a3=", hdr->a3, " ");
-+ acx_print_mac("adev->bssid=", adev->bssid, "\n");
-+ }
-+
-+ if (!mac_is_equal(adev->dev_addr, hdr->a1)
-+ || !mac_is_equal(adev->bssid, hdr->a3)) {
-+ result = OK;
-+ goto end;
-+ }
-+
-+ alg = ieee2host16(*(req->auth_alg));
-+ seq = ieee2host16(*(req->auth_seq));
-+ status = ieee2host16(*(req->status));
-+
-+ log(L_ASSOC, "auth algorithm %d, auth sequence %d, status %d\n", alg, seq, status);
-+
-+ ap = (adev->mode == ACX_MODE_3_AP);
-+
-+ if (adev->auth_alg <= 1) {
-+ if (adev->auth_alg != alg) {
-+ log(L_ASSOC, "auth algorithm mismatch: "
-+ "our:%d peer:%d\n", adev->auth_alg, alg);
-+ result = NOT_OK;
-+ goto end;
-+ }
-+ }
-+ if (ap) {
-+ clt = acx_l_sta_list_get_or_add(adev, hdr->a2);
-+ if (STA_LIST_ADD_CAN_FAIL && !clt) {
-+ log(L_ASSOC, "could not allocate room for client\n");
-+ result = NOT_OK;
-+ goto end;
-+ }
-+ } else {
-+ clt = adev->ap_client;
-+ if (!mac_is_equal(clt->address, hdr->a2)) {
-+ printk("%s: malformed auth frame from AP?!\n",
-+ adev->ndev->name);
-+ result = NOT_OK;
-+ goto end;
-+ }
-+ }
-+
-+ /* now check which step in the authentication sequence we are
-+ * currently in, and act accordingly */
-+ switch (seq) {
-+ case 1:
-+ if (!ap)
-+ break;
-+ acx_l_transmit_authen2(adev, req, clt);
-+ break;
-+ case 2:
-+ if (ap)
-+ break;
-+ if (status == WLAN_MGMT_STATUS_SUCCESS) {
-+ if (alg == WLAN_AUTH_ALG_OPENSYSTEM) {
-+ acx_set_status(adev, ACX_STATUS_3_AUTHENTICATED);
-+ acx_l_transmit_assoc_req(adev);
-+ } else
-+ if (alg == WLAN_AUTH_ALG_SHAREDKEY) {
-+ acx_l_transmit_authen3(adev, req);
-+ }
-+ } else {
-+ printk("%s: auth FAILED: peer sent "
-+ "response code %d (%s), "
-+ "still waiting for authentication\n",
-+ adev->ndev->name,
-+ status, get_status_string(status));
-+ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH);
-+ }
-+ break;
-+ case 3:
-+ if (!ap)
-+ break;
-+ if ((clt->auth_alg != WLAN_AUTH_ALG_SHAREDKEY)
-+ || (alg != WLAN_AUTH_ALG_SHAREDKEY)
-+ || (clt->auth_step != 2))
-+ break;
-+ chal = req->challenge;
-+ if (!chal
-+ || memcmp(chal->challenge, clt->challenge_text, WLAN_CHALLENGE_LEN)
-+ || (chal->eid != WLAN_EID_CHALLENGE)
-+ || (chal->len != WLAN_CHALLENGE_LEN)
-+ )
-+ break;
-+ acx_l_transmit_authen4(adev, req);
-+ MAC_COPY(clt->address, hdr->a2);
-+ clt->used = CLIENT_AUTHENTICATED_2;
-+ clt->auth_step = 4;
-+ clt->seq = ieee2host16(hdr->seq);
-+ break;
-+ case 4:
-+ if (ap)
-+ break;
-+ /* ok, we're through: we're authenticated. Woohoo!! */
-+ acx_set_status(adev, ACX_STATUS_3_AUTHENTICATED);
-+ log(L_ASSOC, "Authenticated!\n");
-+ /* now that we're authenticated, request association */
-+ acx_l_transmit_assoc_req(adev);
-+ break;
-+ }
-+ result = OK;
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_gen_challenge
-+*/
-+static inline void
-+acx_gen_challenge(wlan_ie_challenge_t* d)
-+{
-+ FN_ENTER;
-+ d->eid = WLAN_EID_CHALLENGE;
-+ d->len = WLAN_CHALLENGE_LEN;
-+ get_random_bytes(d->challenge, WLAN_CHALLENGE_LEN);
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_deauthen
-+*/
-+static int
-+acx_l_transmit_deauthen(acx_device_t *adev, const u8 *addr, u16 reason)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct deauthen_frame_body *body;
-+
-+ FN_ENTER;
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = (WF_FTYPE_MGMTi | WF_FSTYPE_DEAUTHENi);
-+ head->dur = 0;
-+ MAC_COPY(head->da, addr);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, adev->bssid);
-+ head->seq = 0;
-+
-+ log(L_DEBUG|L_ASSOC|L_XFER,
-+ "sending deauthen to "MACSTR" for %d\n",
-+ MAC(addr), reason);
-+
-+ body->reason = host2ieee16(reason);
-+
-+ /* body is fixed size here, but beware of cutting-and-pasting this -
-+ ** do not use sizeof(*body) for variable sized mgmt packets! */
-+ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + sizeof(*body));
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_authen1
-+*/
-+static int
-+acx_l_transmit_authen1(acx_device_t *adev)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct auth_frame_body *body;
-+
-+ FN_ENTER;
-+
-+ log(L_ASSOC, "sending authentication1 request (auth algo %d), "
-+ "awaiting response\n", adev->auth_alg);
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_AUTHENi;
-+ /* duration should be 0 instead of 0x8000 to have
-+ * the firmware calculate the value, right? */
-+ head->dur = 0;
-+ MAC_COPY(head->da, adev->bssid);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, adev->bssid);
-+ head->seq = 0;
-+
-+ body->auth_alg = host2ieee16(adev->auth_alg);
-+ body->auth_seq = host2ieee16(1);
-+ body->status = host2ieee16(0);
-+
-+ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + 2 + 2 + 2);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_authen2
-+*/
-+static int
-+acx_l_transmit_authen2(acx_device_t *adev, const wlan_fr_authen_t *req,
-+ client_t *clt)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct auth_frame_body *body;
-+ unsigned int packet_len;
-+
-+ FN_ENTER;
-+
-+ if (!clt)
-+ goto ok;
-+
-+ MAC_COPY(clt->address, req->hdr->a2);
-+#ifdef UNUSED
-+ clt->ps = ((WF_FC_PWRMGTi & req->hdr->fc) != 0);
-+#endif
-+ clt->auth_alg = ieee2host16(*(req->auth_alg));
-+ clt->auth_step = 2;
-+ clt->seq = ieee2host16(req->hdr->seq);
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_AUTHENi;
-+ head->dur = 0 /* req->hdr->dur */;
-+ MAC_COPY(head->da, req->hdr->a2);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, req->hdr->a3);
-+ head->seq = 0 /* req->hdr->seq */;
-+
-+ /* already in IEEE format, no endianness conversion */
-+ body->auth_alg = *(req->auth_alg);
-+ body->auth_seq = host2ieee16(2);
-+ body->status = host2ieee16(0);
-+
-+ packet_len = WLAN_HDR_A3_LEN + 2 + 2 + 2;
-+ if (ieee2host16(*(req->auth_alg)) == WLAN_AUTH_ALG_OPENSYSTEM) {
-+ clt->used = CLIENT_AUTHENTICATED_2;
-+ } else { /* shared key */
-+ acx_gen_challenge(&body->challenge);
-+ memcpy(&clt->challenge_text, body->challenge.challenge, WLAN_CHALLENGE_LEN);
-+ packet_len += 2 + 2 + 2 + 1+1+WLAN_CHALLENGE_LEN;
-+ }
-+
-+ acxlog_mac(L_ASSOC|L_XFER,
-+ "transmit_auth2: BSSID=", head->bssid, "\n");
-+
-+ acx_l_tx_data(adev, tx, packet_len);
-+ok:
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_authen3
-+*/
-+static int
-+acx_l_transmit_authen3(acx_device_t *adev, const wlan_fr_authen_t *req)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct auth_frame_body *body;
-+ unsigned int packet_len;
-+
-+ FN_ENTER;
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto ok;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto ok;
-+ }
-+ body = (void*)(head + 1);
-+
-+ /* add WF_FC_ISWEPi: auth step 3 needs to be encrypted */
-+ head->fc = WF_FC_ISWEPi + WF_FSTYPE_AUTHENi;
-+ /* FIXME: is this needed?? authen4 does it...
-+ * I think it's even wrong since we shouldn't re-use old
-+ * values but instead let the firmware calculate proper ones
-+ head->dur = req->hdr->dur;
-+ head->seq = req->hdr->seq;
-+ */
-+ MAC_COPY(head->da, adev->bssid);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, adev->bssid);
-+
-+ /* already in IEEE format, no endianness conversion */
-+ body->auth_alg = *(req->auth_alg);
-+ body->auth_seq = host2ieee16(3);
-+ body->status = host2ieee16(0);
-+ memcpy(&body->challenge, req->challenge, req->challenge->len + 2);
-+ packet_len = WLAN_HDR_A3_LEN + 8 + req->challenge->len;
-+
-+ log(L_ASSOC|L_XFER, "transmit_authen3!\n");
-+
-+ acx_l_tx_data(adev, tx, packet_len);
-+ok:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_authen4
-+*/
-+static int
-+acx_l_transmit_authen4(acx_device_t *adev, const wlan_fr_authen_t *req)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct auth_frame_body *body;
-+
-+ FN_ENTER;
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto ok;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto ok;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_AUTHENi; /* 0xb0 */
-+ head->dur = 0 /* req->hdr->dur */;
-+ MAC_COPY(head->da, req->hdr->a2);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, req->hdr->a3);
-+ head->seq = 0 /* req->hdr->seq */;
-+
-+ /* already in IEEE format, no endianness conversion */
-+ body->auth_alg = *(req->auth_alg);
-+ body->auth_seq = host2ieee16(4);
-+ body->status = host2ieee16(0);
-+
-+ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + 2 + 2 + 2);
-+ok:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_assoc_req
-+**
-+** adev->ap_client is a current candidate AP here
-+*/
-+static int
-+acx_l_transmit_assoc_req(acx_device_t *adev)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ u8 *body, *p, *prate;
-+ unsigned int packet_len;
-+ u16 cap;
-+
-+ FN_ENTER;
-+
-+ log(L_ASSOC, "sending association request, "
-+ "awaiting response. NOT ASSOCIATED YET\n");
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_ASSOCREQi;
-+ head->dur = host2ieee16(0x8000);
-+ MAC_COPY(head->da, adev->bssid);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, adev->bssid);
-+ head->seq = 0;
-+
-+ p = body;
-+ /* now start filling the AssocReq frame body */
-+
-+ /* since this assoc request will most likely only get
-+ * sent in the STA to AP case (and not when Ad-Hoc IBSS),
-+ * the cap combination indicated here will thus be
-+ * WF_MGMT_CAP_ESSi *always* (no IBSS ever)
-+ * The specs are more than non-obvious on all that:
-+ *
-+ * 802.11 7.3.1.4 Capability Information field
-+ ** APs set the ESS subfield to 1 and the IBSS subfield to 0 within
-+ ** Beacon or Probe Response management frames. STAs within an IBSS
-+ ** set the ESS subfield to 0 and the IBSS subfield to 1 in transmitted
-+ ** Beacon or Probe Response management frames
-+ **
-+ ** APs set the Privacy subfield to 1 within transmitted Beacon,
-+ ** Probe Response, Association Response, and Reassociation Response
-+ ** if WEP is required for all data type frames within the BSS.
-+ ** STAs within an IBSS set the Privacy subfield to 1 in Beacon
-+ ** or Probe Response management frames if WEP is required
-+ ** for all data type frames within the IBSS */
-+
-+ /* note that returning 0 will be refused by several APs...
-+ * (so this indicates that you're probably supposed to
-+ * "confirm" the ESS mode) */
-+ cap = WF_MGMT_CAP_ESSi;
-+
-+ /* this one used to be a check on wep_restricted,
-+ * but more likely it's wep_enabled instead */
-+ if (adev->wep_enabled)
-+ SET_BIT(cap, WF_MGMT_CAP_PRIVACYi);
-+
-+ /* Probably we can just set these always, because our hw is
-+ ** capable of shortpre and PBCC --vda */
-+ /* only ask for short preamble if the peer station supports it */
-+ if (adev->ap_client->cap_info & WF_MGMT_CAP_SHORT)
-+ SET_BIT(cap, WF_MGMT_CAP_SHORTi);
-+ /* only ask for PBCC support if the peer station supports it */
-+ if (adev->ap_client->cap_info & WF_MGMT_CAP_PBCC)
-+ SET_BIT(cap, WF_MGMT_CAP_PBCCi);
-+
-+ /* IEs: 1. caps */
-+ *(u16*)p = cap; p += 2;
-+ /* 2. listen interval */
-+ *(u16*)p = host2ieee16(adev->listen_interval); p += 2;
-+ /* 3. ESSID */
-+ p = wlan_fill_ie_ssid(p,
-+ strlen(adev->essid_for_assoc), adev->essid_for_assoc);
-+ /* 4. supp rates */
-+ prate = p;
-+ p = wlan_fill_ie_rates(p,
-+ adev->rate_supported_len, adev->rate_supported);
-+ /* 5. ext supp rates */
-+ p = wlan_fill_ie_rates_ext(p,
-+ adev->rate_supported_len, adev->rate_supported);
-+
-+ if (acx_debug & L_DEBUG) {
-+ printk("association: rates element\n");
-+ acx_dump_bytes(prate, p - prate);
-+ }
-+
-+ /* calculate lengths */
-+ packet_len = WLAN_HDR_A3_LEN + (p - body);
-+
-+ log(L_ASSOC, "association: requesting caps 0x%04X, ESSID \"%s\"\n",
-+ cap, adev->essid_for_assoc);
-+
-+ acx_l_tx_data(adev, tx, packet_len);
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_disassoc
-+**
-+** FIXME: looks like incomplete implementation of a helper:
-+** acx_l_transmit_disassoc(adev, clt) - kick this client (we're an AP)
-+** acx_l_transmit_disassoc(adev, NULL) - leave BSSID (we're a STA)
-+*/
-+#ifdef BROKEN
-+int
-+acx_l_transmit_disassoc(acx_device_t *adev, client_t *clt)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct disassoc_frame_body *body;
-+
-+ FN_ENTER;
-+/* if (clt != NULL) { */
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+/* clt->used = CLIENT_AUTHENTICATED_2; - not (yet?) associated */
-+
-+ head->fc = WF_FSTYPE_DISASSOCi;
-+ head->dur = 0;
-+ /* huh? It muchly depends on whether we're STA or AP...
-+ ** sta->ap: da=bssid, sa=own, bssid=bssid
-+ ** ap->sta: da=sta, sa=bssid, bssid=bssid. FIXME! */
-+ MAC_COPY(head->da, adev->bssid);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, adev->dev_addr);
-+ head->seq = 0;
-+
-+ /* "Class 3 frame received from nonassociated station." */
-+ body->reason = host2ieee16(7);
-+
-+ /* fixed size struct, ok to sizeof */
-+ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + sizeof(*body));
-+/* } */
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_s_complete_scan
-+**
-+** Called either from after_interrupt_task() if:
-+** 1) there was Scan_Complete IRQ, or
-+** 2) scanning expired in timer()
-+** We need to decide which ESS or IBSS to join.
-+** Iterates thru adev->sta_list:
-+** if adev->ap is not bcast, will join only specified
-+** ESS or IBSS with this bssid
-+** checks peers' caps for ESS/IBSS bit
-+** checks peers' SSID, allows exact match or hidden SSID
-+** If station to join is chosen:
-+** points adev->ap_client to the chosen struct client
-+** sets adev->essid_for_assoc for future assoc attempt
-+** Auth/assoc is not yet performed
-+** Returns OK if there is no need to restart scan
-+*/
-+int
-+acx_s_complete_scan(acx_device_t *adev)
-+{
-+ struct client *bss;
-+ unsigned long flags;
-+ u16 needed_cap;
-+ int i;
-+ int idx_found = -1;
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ needed_cap = WF_MGMT_CAP_IBSS; /* 2, we require Ad-Hoc */
-+ break;
-+ case ACX_MODE_2_STA:
-+ needed_cap = WF_MGMT_CAP_ESS; /* 1, we require Managed */
-+ break;
-+ default:
-+ printk("acx: driver bug: mode=%d in complete_scan()\n", adev->mode);
-+ dump_stack();
-+ goto end;
-+ }
-+
-+ acx_lock(adev, flags);
-+
-+ /* TODO: sta_iterator hiding implementation would be nice here... */
-+
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ bss = &adev->sta_list[i];
-+ if (!bss->used) continue;
-+
-+
-+ log(L_ASSOC, "scan table: SSID=\"%s\" CH=%d SIR=%d SNR=%d\n",
-+ bss->essid, bss->channel, bss->sir, bss->snr);
-+
-+ if (!mac_is_bcast(adev->ap))
-+ if (!mac_is_equal(bss->bssid, adev->ap))
-+ continue; /* keep looking */
-+
-+ /* broken peer with no mode flags set? */
-+ if (unlikely(!(bss->cap_info & (WF_MGMT_CAP_ESS | WF_MGMT_CAP_IBSS)))) {
-+ printk("%s: strange peer "MACSTR" found with "
-+ "neither ESS (AP) nor IBSS (Ad-Hoc) "
-+ "capability - skipped\n",
-+ adev->ndev->name, MAC(bss->address));
-+ continue;
-+ }
-+ log(L_ASSOC, "peer_cap 0x%04X, needed_cap 0x%04X\n",
-+ bss->cap_info, needed_cap);
-+
-+ /* does peer station support what we need? */
-+ if ((bss->cap_info & needed_cap) != needed_cap)
-+ continue; /* keep looking */
-+
-+ /* strange peer with NO basic rates?! */
-+ if (unlikely(!bss->rate_bas)) {
-+ printk("%s: strange peer "MACSTR" with empty rate set "
-+ "- skipped\n",
-+ adev->ndev->name, MAC(bss->address));
-+ continue;
-+ }
-+
-+ /* do we support all basic rates of this peer? */
-+ if ((bss->rate_bas & adev->rate_oper) != bss->rate_bas) {
-+/* we probably need to have all rates as operational rates,
-+ even in case of an 11M-only configuration */
-+#ifdef THIS_IS_TROUBLESOME
-+ printk("%s: peer "MACSTR": incompatible basic rates "
-+ "(AP requests 0x%04X, we have 0x%04X) "
-+ "- skipped\n",
-+ adev->ndev->name, MAC(bss->address),
-+ bss->rate_bas, adev->rate_oper);
-+ continue;
-+#else
-+ printk("%s: peer "MACSTR": incompatible basic rates "
-+ "(AP requests 0x%04X, we have 0x%04X). "
-+ "Considering anyway...\n",
-+ adev->ndev->name, MAC(bss->address),
-+ bss->rate_bas, adev->rate_oper);
-+#endif
-+ }
-+
-+ if ( !(adev->reg_dom_chanmask & (1<<(bss->channel-1))) ) {
-+ printk("%s: warning: peer "MACSTR" is on channel %d "
-+ "outside of channel range of current "
-+ "regulatory domain - couldn't join "
-+ "even if other settings match. "
-+ "You might want to adapt your config\n",
-+ adev->ndev->name, MAC(bss->address),
-+ bss->channel);
-+ continue; /* keep looking */
-+ }
-+
-+ if (!adev->essid_active || !strcmp(bss->essid, adev->essid)) {
-+ log(L_ASSOC,
-+ "found station with matching ESSID! ('%s' "
-+ "station, '%s' config)\n",
-+ bss->essid,
-+ (adev->essid_active) ? adev->essid : "[any]");
-+ /* TODO: continue looking for peer with better SNR */
-+ bss->used = CLIENT_JOIN_CANDIDATE;
-+ idx_found = i;
-+
-+ /* stop searching if this station is
-+ * on the current channel, otherwise
-+ * keep looking for an even better match */
-+ if (bss->channel == adev->channel)
-+ break;
-+ } else
-+ if (is_hidden_essid(bss->essid)) {
-+ /* hmm, station with empty or single-space SSID:
-+ * using hidden SSID broadcast?
-+ */
-+ /* This behaviour is broken: which AP from zillion
-+ ** of APs with hidden SSID you'd try?
-+ ** We should use Probe requests to get Probe responses
-+ ** and check for real SSID (are those never hidden?) */
-+ bss->used = CLIENT_JOIN_CANDIDATE;
-+ if (idx_found == -1)
-+ idx_found = i;
-+ log(L_ASSOC, "found station with empty or "
-+ "single-space (hidden) SSID, considering "
-+ "for assoc attempt\n");
-+ /* ...and keep looking for better matches */
-+ } else {
-+ log(L_ASSOC, "ESSID doesn't match! ('%s' "
-+ "station, '%s' config)\n",
-+ bss->essid,
-+ (adev->essid_active) ? adev->essid : "[any]");
-+ }
-+ }
-+
-+ /* TODO: iterate thru join candidates instead */
-+ /* TODO: rescan if not associated within some timeout */
-+ if (idx_found != -1) {
-+ char *essid_src;
-+ size_t essid_len;
-+
-+ bss = &adev->sta_list[idx_found];
-+ adev->ap_client = bss;
-+
-+ if (is_hidden_essid(bss->essid)) {
-+ /* if the ESSID of the station we found is empty
-+ * (no broadcast), then use user-configured ESSID
-+ * instead */
-+ essid_src = adev->essid;
-+ essid_len = adev->essid_len;
-+ } else {
-+ essid_src = bss->essid;
-+ essid_len = strlen(bss->essid);
-+ }
-+
-+ acx_update_capabilities(adev);
-+
-+ memcpy(adev->essid_for_assoc, essid_src, essid_len);
-+ adev->essid_for_assoc[essid_len] = '\0';
-+ adev->channel = bss->channel;
-+ MAC_COPY(adev->bssid, bss->bssid);
-+
-+ bss->rate_cfg = (bss->rate_cap & adev->rate_oper);
-+ bss->rate_cur = 1 << lowest_bit(bss->rate_cfg);
-+ bss->rate_100 = acx_rate111to100(bss->rate_cur);
-+
-+ acxlog_mac(L_ASSOC,
-+ "matching station found: ", adev->bssid, ", joining\n");
-+
-+ /* TODO: do we need to switch to the peer's channel first? */
-+
-+ if (ACX_MODE_0_ADHOC == adev->mode) {
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ } else {
-+ acx_l_transmit_authen1(adev);
-+ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH);
-+ }
-+ } else { /* idx_found == -1 */
-+ /* uh oh, no station found in range */
-+ if (ACX_MODE_0_ADHOC == adev->mode) {
-+ printk("%s: no matching station found in range, "
-+ "generating our own IBSS instead\n",
-+ adev->ndev->name);
-+ /* we do it the HostAP way: */
-+ MAC_COPY(adev->bssid, adev->dev_addr);
-+ adev->bssid[0] |= 0x02; /* 'local assigned addr' bit */
-+ /* add IBSS bit to our caps... */
-+ acx_update_capabilities(adev);
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ /* In order to cmd_join be called below */
-+ idx_found = 0;
-+ } else {
-+ /* we shall scan again, AP can be
-+ ** just temporarily powered off */
-+ log(L_ASSOC,
-+ "no matching station found in range yet\n");
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING);
-+ result = NOT_OK;
-+ }
-+ }
-+
-+ acx_unlock(adev, flags);
-+
-+ if (idx_found != -1) {
-+ if (ACX_MODE_0_ADHOC == adev->mode) {
-+ /* need to update channel in beacon template */
-+ SET_BIT(adev->set_mask, SET_TEMPLATES);
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask)
-+ acx_s_update_card_settings(adev);
-+ }
-+ /* Inform firmware on our decision to start or join BSS */
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ }
-+
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_read_fw
-+**
-+** Loads a firmware image
-+**
-+** Returns:
-+** 0 unable to load file
-+** pointer to firmware success
-+*/
-+firmware_image_t*
-+acx_s_read_fw(struct device *dev, const char *file, u32 *size)
-+{
-+ firmware_image_t *res;
-+ const struct firmware *fw_entry;
-+
-+ res = NULL;
-+ log(L_INIT, "requesting firmware image '%s'\n", file);
-+ if (!request_firmware(&fw_entry, file, dev)) {
-+ *size = 8;
-+ if (fw_entry->size >= 8)
-+ *size = 8 + le32_to_cpu(*(u32 *)(fw_entry->data + 4));
-+ if (fw_entry->size != *size) {
-+ printk("acx: firmware size does not match "
-+ "firmware header: %d != %d, "
-+ "aborting fw upload\n",
-+ (int) fw_entry->size, (int) *size);
-+ goto release_ret;
-+ }
-+ res = vmalloc(*size);
-+ if (!res) {
-+ printk("acx: no memory for firmware "
-+ "(%u bytes)\n", *size);
-+ goto release_ret;
-+ }
-+ memcpy(res, fw_entry->data, fw_entry->size);
-+release_ret:
-+ release_firmware(fw_entry);
-+ return res;
-+ }
-+ printk("acx: firmware image '%s' was not provided. "
-+ "Check your hotplug scripts\n", file);
-+
-+ /* checksum will be verified in write_fw, so don't bother here */
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_set_wepkey
-+*/
-+static void
-+acx100_s_set_wepkey(acx_device_t *adev)
-+{
-+ ie_dot11WEPDefaultKey_t dk;
-+ int i;
-+
-+ for (i = 0; i < DOT11_MAX_DEFAULT_WEP_KEYS; i++) {
-+ if (adev->wep_keys[i].size != 0) {
-+ log(L_INIT, "setting WEP key: %d with "
-+ "total size: %d\n", i, (int) adev->wep_keys[i].size);
-+ dk.action = 1;
-+ dk.keySize = adev->wep_keys[i].size;
-+ dk.defaultKeyNum = i;
-+ memcpy(dk.key, adev->wep_keys[i].key, dk.keySize);
-+ acx_s_configure(adev, &dk, ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE);
-+ }
-+ }
-+}
-+
-+static void
-+acx111_s_set_wepkey(acx_device_t *adev)
-+{
-+ acx111WEPDefaultKey_t dk;
-+ int i;
-+
-+ for (i = 0; i < DOT11_MAX_DEFAULT_WEP_KEYS; i++) {
-+ if (adev->wep_keys[i].size != 0) {
-+ log(L_INIT, "setting WEP key: %d with "
-+ "total size: %d\n", i, (int) adev->wep_keys[i].size);
-+ memset(&dk, 0, sizeof(dk));
-+ dk.action = cpu_to_le16(1); /* "add key"; yes, that's a 16bit value */
-+ dk.keySize = adev->wep_keys[i].size;
-+
-+ /* are these two lines necessary? */
-+ dk.type = 0; /* default WEP key */
-+ dk.index = 0; /* ignored when setting default key */
-+
-+ dk.defaultKeyNum = i;
-+ memcpy(dk.key, adev->wep_keys[i].key, dk.keySize);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WEP_MGMT, &dk, sizeof(dk));
-+ }
-+ }
-+}
-+
-+static void
-+acx_s_set_wepkey(acx_device_t *adev)
-+{
-+ if (IS_ACX111(adev))
-+ acx111_s_set_wepkey(adev);
-+ else
-+ acx100_s_set_wepkey(adev);
-+}
-+
-+
-+/***********************************************************************
-+** acx100_s_init_wep
-+**
-+** FIXME: this should probably be moved into the new card settings
-+** management, but since we're also modifying the memory map layout here
-+** due to the WEP key space we want, we should take care...
-+*/
-+static int
-+acx100_s_init_wep(acx_device_t *adev)
-+{
-+ acx100_ie_wep_options_t options;
-+ ie_dot11WEPDefaultKeyID_t dk;
-+ acx_ie_memmap_t pt;
-+ int res = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ if (OK != acx_s_interrogate(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ log(L_DEBUG, "CodeEnd:%X\n", pt.CodeEnd);
-+
-+ pt.WEPCacheStart = cpu_to_le32(le32_to_cpu(pt.CodeEnd) + 0x4);
-+ pt.WEPCacheEnd = cpu_to_le32(le32_to_cpu(pt.CodeEnd) + 0x4);
-+
-+ if (OK != acx_s_configure(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ /* let's choose maximum setting: 4 default keys, plus 10 other keys: */
-+ options.NumKeys = cpu_to_le16(DOT11_MAX_DEFAULT_WEP_KEYS + 10);
-+ options.WEPOption = 0x00;
-+
-+ log(L_ASSOC, "%s: writing WEP options\n", __func__);
-+ acx_s_configure(adev, &options, ACX100_IE_WEP_OPTIONS);
-+
-+ acx100_s_set_wepkey(adev);
-+
-+ if (adev->wep_keys[adev->wep_current_index].size != 0) {
-+ log(L_ASSOC, "setting active default WEP key number: %d\n",
-+ adev->wep_current_index);
-+ dk.KeyID = adev->wep_current_index;
-+ acx_s_configure(adev, &dk, ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET); /* 0x1010 */
-+ }
-+ /* FIXME!!! wep_key_struct is filled nowhere! But adev
-+ * is initialized to 0, and we don't REALLY need those keys either */
-+/* for (i = 0; i < 10; i++) {
-+ if (adev->wep_key_struct[i].len != 0) {
-+ MAC_COPY(wep_mgmt.MacAddr, adev->wep_key_struct[i].addr);
-+ wep_mgmt.KeySize = cpu_to_le16(adev->wep_key_struct[i].len);
-+ memcpy(&wep_mgmt.Key, adev->wep_key_struct[i].key, le16_to_cpu(wep_mgmt.KeySize));
-+ wep_mgmt.Action = cpu_to_le16(1);
-+ log(L_ASSOC, "writing WEP key %d (len %d)\n", i, le16_to_cpu(wep_mgmt.KeySize));
-+ if (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_WEP_MGMT, &wep_mgmt, sizeof(wep_mgmt))) {
-+ adev->wep_key_struct[i].index = i;
-+ }
-+ }
-+ }
-+*/
-+
-+ /* now retrieve the updated WEPCacheEnd pointer... */
-+ if (OK != acx_s_interrogate(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
-+ printk("%s: ACX1xx_IE_MEMORY_MAP read #2 FAILED\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ /* ...and tell it to start allocating templates at that location */
-+ /* (no endianness conversion needed) */
-+ pt.PacketTemplateStart = pt.WEPCacheEnd;
-+
-+ if (OK != acx_s_configure(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
-+ printk("%s: ACX1xx_IE_MEMORY_MAP write #2 FAILED\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ res = OK;
-+
-+fail:
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+static int
-+acx_s_init_max_template_generic(acx_device_t *adev, unsigned int len, unsigned int cmd)
-+{
-+ int res;
-+ union {
-+ acx_template_nullframe_t null;
-+ acx_template_beacon_t b;
-+ acx_template_tim_t tim;
-+ acx_template_probereq_t preq;
-+ acx_template_proberesp_t presp;
-+ } templ;
-+
-+ memset(&templ, 0, len);
-+ templ.null.size = cpu_to_le16(len - 2);
-+ res = acx_s_issue_cmd(adev, cmd, &templ, len);
-+ return res;
-+}
-+
-+static inline int
-+acx_s_init_max_null_data_template(acx_device_t *adev)
-+{
-+ return acx_s_init_max_template_generic(
-+ adev, sizeof(acx_template_nullframe_t), ACX1xx_CMD_CONFIG_NULL_DATA
-+ );
-+}
-+
-+static inline int
-+acx_s_init_max_beacon_template(acx_device_t *adev)
-+{
-+ return acx_s_init_max_template_generic(
-+ adev, sizeof(acx_template_beacon_t), ACX1xx_CMD_CONFIG_BEACON
-+ );
-+}
-+
-+static inline int
-+acx_s_init_max_tim_template(acx_device_t *adev)
-+{
-+ return acx_s_init_max_template_generic(
-+ adev, sizeof(acx_template_tim_t), ACX1xx_CMD_CONFIG_TIM
-+ );
-+}
-+
-+static inline int
-+acx_s_init_max_probe_response_template(acx_device_t *adev)
-+{
-+ return acx_s_init_max_template_generic(
-+ adev, sizeof(acx_template_proberesp_t), ACX1xx_CMD_CONFIG_PROBE_RESPONSE
-+ );
-+}
-+
-+static inline int
-+acx_s_init_max_probe_request_template(acx_device_t *adev)
-+{
-+ return acx_s_init_max_template_generic(
-+ adev, sizeof(acx_template_probereq_t), ACX1xx_CMD_CONFIG_PROBE_REQUEST
-+ );
-+}
-+
-+/***********************************************************************
-+** acx_s_set_tim_template
-+**
-+** FIXME: In full blown driver we will regularly update partial virtual bitmap
-+** by calling this function
-+** (it can be done by irq handler on each DTIM irq or by timer...)
-+
-+[802.11 7.3.2.6] TIM information element:
-+- 1 EID
-+- 1 Length
-+1 1 DTIM Count
-+ indicates how many beacons (including this) appear before next DTIM
-+ (0=this one is a DTIM)
-+2 1 DTIM Period
-+ number of beacons between successive DTIMs
-+ (0=reserved, 1=all TIMs are DTIMs, 2=every other, etc)
-+3 1 Bitmap Control
-+ bit0: Traffic Indicator bit associated with Assoc ID 0 (Bcast AID?)
-+ set to 1 in TIM elements with a value of 0 in the DTIM Count field
-+ when one or more broadcast or multicast frames are buffered at the AP.
-+ bit1-7: Bitmap Offset (logically Bitmap_Offset = Bitmap_Control & 0xFE).
-+4 n Partial Virtual Bitmap
-+ Visible part of traffic-indication bitmap.
-+ Full bitmap consists of 2008 bits (251 octets) such that bit number N
-+ (0<=N<=2007) in the bitmap corresponds to bit number (N mod 8)
-+ in octet number N/8 where the low-order bit of each octet is bit0,
-+ and the high order bit is bit7.
-+ Each set bit in virtual bitmap corresponds to traffic buffered by AP
-+ for a specific station (with corresponding AID?).
-+ Partial Virtual Bitmap shows a part of bitmap which has non-zero.
-+ Bitmap Offset is a number of skipped zero octets (see above).
-+ 'Missing' octets at the tail are also assumed to be zero.
-+ Example: Length=6, Bitmap_Offset=2, Partial_Virtual_Bitmap=55 55 55
-+ This means that traffic-indication bitmap is:
-+ 00000000 00000000 01010101 01010101 01010101 00000000 00000000...
-+ (is bit0 in the map is always 0 and real value is in Bitmap Control bit0?)
-+*/
-+static int
-+acx_s_set_tim_template(acx_device_t *adev)
-+{
-+/* For now, configure smallish test bitmap, all zero ("no pending data") */
-+ enum { bitmap_size = 5 };
-+
-+ acx_template_tim_t t;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ memset(&t, 0, sizeof(t));
-+ t.size = 5 + bitmap_size; /* eid+len+count+period+bmap_ctrl + bmap */
-+ t.tim_eid = WLAN_EID_TIM;
-+ t.len = 3 + bitmap_size; /* count+period+bmap_ctrl + bmap */
-+ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_TIM, &t, sizeof(t));
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_fill_beacon_or_proberesp_template
-+**
-+** For frame format info, please see 802.11-1999.pdf item 7.2.3.9 and below!!
-+**
-+** NB: we use the fact that
-+** struct acx_template_proberesp and struct acx_template_beacon are the same
-+** (well, almost...)
-+**
-+** [802.11] Beacon's body consist of these IEs:
-+** 1 Timestamp
-+** 2 Beacon interval
-+** 3 Capability information
-+** 4 SSID
-+** 5 Supported rates (up to 8 rates)
-+** 6 FH Parameter Set (frequency-hopping PHYs only)
-+** 7 DS Parameter Set (direct sequence PHYs only)
-+** 8 CF Parameter Set (only if PCF is supported)
-+** 9 IBSS Parameter Set (ad-hoc only)
-+**
-+** Beacon only:
-+** 10 TIM (AP only) (see 802.11 7.3.2.6)
-+** 11 Country Information (802.11d)
-+** 12 FH Parameters (802.11d)
-+** 13 FH Pattern Table (802.11d)
-+** ... (?!! did not yet find relevant PDF file... --vda)
-+** 19 ERP Information (extended rate PHYs)
-+** 20 Extended Supported Rates (if more than 8 rates)
-+**
-+** Proberesp only:
-+** 10 Country information (802.11d)
-+** 11 FH Parameters (802.11d)
-+** 12 FH Pattern Table (802.11d)
-+** 13-n Requested information elements (802.11d)
-+** ????
-+** 18 ERP Information (extended rate PHYs)
-+** 19 Extended Supported Rates (if more than 8 rates)
-+*/
-+static int
-+acx_fill_beacon_or_proberesp_template(acx_device_t *adev,
-+ struct acx_template_beacon *templ,
-+ u16 fc /* in host order! */)
-+{
-+ int len;
-+ u8 *p;
-+
-+ FN_ENTER;
-+
-+ memset(templ, 0, sizeof(*templ));
-+ MAC_BCAST(templ->da);
-+ MAC_COPY(templ->sa, adev->dev_addr);
-+ MAC_COPY(templ->bssid, adev->bssid);
-+
-+ templ->beacon_interval = cpu_to_le16(adev->beacon_interval);
-+ acx_update_capabilities(adev);
-+ templ->cap = cpu_to_le16(adev->capabilities);
-+
-+ p = templ->variable;
-+ p = wlan_fill_ie_ssid(p, adev->essid_len, adev->essid);
-+ p = wlan_fill_ie_rates(p, adev->rate_supported_len, adev->rate_supported);
-+ p = wlan_fill_ie_ds_parms(p, adev->channel);
-+ /* NB: should go AFTER tim, but acx seem to keep tim last always */
-+ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len, adev->rate_supported);
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ /* ATIM window */
-+ p = wlan_fill_ie_ibss_parms(p, 0); break;
-+ case ACX_MODE_3_AP:
-+ /* TIM IE is set up as separate template */
-+ break;
-+ }
-+
-+ len = p - (u8*)templ;
-+ templ->fc = cpu_to_le16(WF_FTYPE_MGMT | fc);
-+ /* - 2: do not count 'u16 size' field */
-+ templ->size = cpu_to_le16(len - 2);
-+
-+ FN_EXIT1(len);
-+ return len;
-+}
-+
-+
-+#if POWER_SAVE_80211
-+/***********************************************************************
-+** acx_s_set_null_data_template
-+*/
-+static int
-+acx_s_set_null_data_template(acx_device_t *adev)
-+{
-+ struct acx_template_nullframe b;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ /* memset(&b, 0, sizeof(b)); not needed, setting all members */
-+
-+ b.size = cpu_to_le16(sizeof(b) - 2);
-+ b.hdr.fc = WF_FTYPE_MGMTi | WF_FSTYPE_NULLi;
-+ b.hdr.dur = 0;
-+ MAC_BCAST(b.hdr.a1);
-+ MAC_COPY(b.hdr.a2, adev->dev_addr);
-+ MAC_COPY(b.hdr.a3, adev->bssid);
-+ b.hdr.seq = 0;
-+
-+ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_NULL_DATA, &b, sizeof(b));
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_s_set_beacon_template
-+*/
-+static int
-+acx_s_set_beacon_template(acx_device_t *adev)
-+{
-+ struct acx_template_beacon bcn;
-+ int len, result;
-+
-+ FN_ENTER;
-+
-+ len = acx_fill_beacon_or_proberesp_template(adev, &bcn, WF_FSTYPE_BEACON);
-+ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_BEACON, &bcn, len);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_set_probe_response_template
-+*/
-+static int
-+acx_s_set_probe_response_template(acx_device_t *adev)
-+{
-+ struct acx_template_proberesp pr;
-+ int len, result;
-+
-+ FN_ENTER;
-+
-+ len = acx_fill_beacon_or_proberesp_template(adev, &pr, WF_FSTYPE_PROBERESP);
-+ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_PROBE_RESPONSE, &pr, len);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_init_packet_templates()
-+**
-+** NOTE: order is very important here, to have a correct memory layout!
-+** init templates: max Probe Request (station mode), max NULL data,
-+** max Beacon, max TIM, max Probe Response.
-+*/
-+static int
-+acx_s_init_packet_templates(acx_device_t *adev)
-+{
-+ acx_ie_memmap_t mm; /* ACX100 only */
-+ int result = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ log(L_DEBUG|L_INIT, "initializing max packet templates\n");
-+
-+ if (OK != acx_s_init_max_probe_request_template(adev))
-+ goto failed;
-+
-+ if (OK != acx_s_init_max_null_data_template(adev))
-+ goto failed;
-+
-+ if (OK != acx_s_init_max_beacon_template(adev))
-+ goto failed;
-+
-+ if (OK != acx_s_init_max_tim_template(adev))
-+ goto failed;
-+
-+ if (OK != acx_s_init_max_probe_response_template(adev))
-+ goto failed;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111 doesn't need the memory map magic below,
-+ * and the other templates will be set later (acx_start) */
-+ result = OK;
-+ goto success;
-+ }
-+
-+ /* ACX100 will have its TIM template set,
-+ * and we also need to update the memory map */
-+
-+ if (OK != acx_s_set_tim_template(adev))
-+ goto failed_acx100;
-+
-+ log(L_DEBUG, "sizeof(memmap)=%d bytes\n", (int)sizeof(mm));
-+
-+ if (OK != acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP))
-+ goto failed_acx100;
-+
-+ mm.QueueStart = cpu_to_le32(le32_to_cpu(mm.PacketTemplateEnd) + 4);
-+ if (OK != acx_s_configure(adev, &mm, ACX1xx_IE_MEMORY_MAP))
-+ goto failed_acx100;
-+
-+ result = OK;
-+ goto success;
-+
-+failed_acx100:
-+ log(L_DEBUG|L_INIT,
-+ /* "cb=0x%X\n" */
-+ "ACXMemoryMap:\n"
-+ ".CodeStart=0x%X\n"
-+ ".CodeEnd=0x%X\n"
-+ ".WEPCacheStart=0x%X\n"
-+ ".WEPCacheEnd=0x%X\n"
-+ ".PacketTemplateStart=0x%X\n"
-+ ".PacketTemplateEnd=0x%X\n",
-+ /* len, */
-+ le32_to_cpu(mm.CodeStart),
-+ le32_to_cpu(mm.CodeEnd),
-+ le32_to_cpu(mm.WEPCacheStart),
-+ le32_to_cpu(mm.WEPCacheEnd),
-+ le32_to_cpu(mm.PacketTemplateStart),
-+ le32_to_cpu(mm.PacketTemplateEnd));
-+
-+failed:
-+ printk("%s: %s() FAILED\n", adev->ndev->name, __func__);
-+
-+success:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_s_set_probe_request_template(acx_device_t *adev)
-+{
-+ struct acx_template_probereq probereq;
-+ char *p;
-+ int res;
-+ int frame_len;
-+
-+ FN_ENTER;
-+
-+ memset(&probereq, 0, sizeof(probereq));
-+
-+ probereq.fc = WF_FTYPE_MGMTi | WF_FSTYPE_PROBEREQi;
-+ MAC_BCAST(probereq.da);
-+ MAC_COPY(probereq.sa, adev->dev_addr);
-+ MAC_BCAST(probereq.bssid);
-+
-+ p = probereq.variable;
-+ p = wlan_fill_ie_ssid(p, adev->essid_len, adev->essid);
-+ p = wlan_fill_ie_rates(p, adev->rate_supported_len, adev->rate_supported);
-+ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len, adev->rate_supported);
-+ frame_len = p - (char*)&probereq;
-+ probereq.size = cpu_to_le16(frame_len - 2);
-+
-+ res = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_PROBE_REQUEST, &probereq, frame_len);
-+ FN_EXIT0;
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_init_mac
-+*/
-+int
-+acx_s_init_mac(acx_device_t *adev)
-+{
-+ int result = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ if (IS_ACX111(adev)) {
-+ adev->ie_len = acx111_ie_len;
-+ adev->ie_len_dot11 = acx111_ie_len_dot11;
-+ } else {
-+ adev->ie_len = acx100_ie_len;
-+ adev->ie_len_dot11 = acx100_ie_len_dot11;
-+ }
-+
-+#if defined (ACX_MEM)
-+ adev->memblocksize = 256; /* 256 is default */
-+ /* try to load radio for both ACX100 and ACX111, since both
-+ * chips have at least some firmware versions making use of an
-+ * external radio module */
-+ acxmem_s_upload_radio(adev);
-+#else
-+ if (IS_PCI(adev)) {
-+ adev->memblocksize = 256; /* 256 is default */
-+ /* try to load radio for both ACX100 and ACX111, since both
-+ * chips have at least some firmware versions making use of an
-+ * external radio module */
-+ acxpci_s_upload_radio(adev);
-+ } else {
-+ adev->memblocksize = 128;
-+ }
-+#endif
-+
-+ if (IS_ACX111(adev)) {
-+ /* for ACX111, the order is different from ACX100
-+ 1. init packet templates
-+ 2. create station context and create dma regions
-+ 3. init wep default keys
-+ */
-+ if (OK != acx_s_init_packet_templates(adev))
-+ goto fail;
-+ if (OK != acx111_s_create_dma_regions(adev)) {
-+ printk("%s: acx111_create_dma_regions FAILED\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ } else {
-+ if (OK != acx100_s_init_wep(adev))
-+ goto fail;
-+ if (OK != acx_s_init_packet_templates(adev))
-+ goto fail;
-+ if (OK != acx100_s_create_dma_regions(adev)) {
-+ printk("%s: acx100_create_dma_regions FAILED\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ }
-+
-+ MAC_COPY(adev->ndev->dev_addr, adev->dev_addr);
-+ result = OK;
-+
-+fail:
-+ if (result)
-+ printk("acx: init_mac() FAILED\n");
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+void
-+acx_s_set_sane_reg_domain(acx_device_t *adev, int do_set)
-+{
-+ unsigned mask;
-+
-+ unsigned int i;
-+
-+ for (i = 0; i < sizeof(acx_reg_domain_ids); i++)
-+ if (acx_reg_domain_ids[i] == adev->reg_dom_id)
-+ break;
-+
-+ if (sizeof(acx_reg_domain_ids) == i) {
-+ log(L_INIT, "Invalid or unsupported regulatory domain"
-+ " 0x%02X specified, falling back to FCC (USA)!"
-+ " Please report if this sounds fishy!\n",
-+ adev->reg_dom_id);
-+ i = 0;
-+ adev->reg_dom_id = acx_reg_domain_ids[i];
-+
-+ /* since there was a mismatch, we need to force updating */
-+ do_set = 1;
-+ }
-+
-+ if (do_set) {
-+ acx_ie_generic_t dom;
-+ dom.m.bytes[0] = adev->reg_dom_id;
-+ acx_s_configure(adev, &dom, ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN);
-+ }
-+
-+ adev->reg_dom_chanmask = reg_domain_channel_masks[i];
-+
-+ mask = (1 << (adev->channel - 1));
-+ if (!(adev->reg_dom_chanmask & mask)) {
-+ /* hmm, need to adjust our channel to reside within domain */
-+ mask = 1;
-+ for (i = 1; i <= 14; i++) {
-+ if (adev->reg_dom_chanmask & mask) {
-+ printk("%s: adjusting selected channel from %d "
-+ "to %d due to new regulatory domain\n",
-+ adev->ndev->name, adev->channel, i);
-+ adev->channel = i;
-+ break;
-+ }
-+ mask <<= 1;
-+ }
-+ }
-+}
-+
-+
-+#if POWER_SAVE_80211
-+static void
-+acx_s_update_80211_powersave_mode(acx_device_t *adev)
-+{
-+ /* merge both structs in a union to be able to have common code */
-+ union {
-+ acx111_ie_powersave_t acx111;
-+ acx100_ie_powersave_t acx100;
-+ } pm;
-+
-+ /* change 802.11 power save mode settings */
-+ log(L_INIT, "updating 802.11 power save mode settings: "
-+ "wakeup_cfg 0x%02X, listen interval %u, "
-+ "options 0x%02X, hangover period %u, "
-+ "enhanced_ps_transition_time %u\n",
-+ adev->ps_wakeup_cfg, adev->ps_listen_interval,
-+ adev->ps_options, adev->ps_hangover_period,
-+ adev->ps_enhanced_transition_time);
-+ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT);
-+ log(L_INIT, "Previous PS mode settings: wakeup_cfg 0x%02X, "
-+ "listen interval %u, options 0x%02X, "
-+ "hangover period %u, "
-+ "enhanced_ps_transition_time %u, beacon_rx_time %u\n",
-+ pm.acx111.wakeup_cfg,
-+ pm.acx111.listen_interval,
-+ pm.acx111.options,
-+ pm.acx111.hangover_period,
-+ IS_ACX111(adev) ?
-+ pm.acx111.enhanced_ps_transition_time
-+ : pm.acx100.enhanced_ps_transition_time,
-+ IS_ACX111(adev) ?
-+ pm.acx111.beacon_rx_time
-+ : (u32)-1
-+ );
-+ pm.acx111.wakeup_cfg = adev->ps_wakeup_cfg;
-+ pm.acx111.listen_interval = adev->ps_listen_interval;
-+ pm.acx111.options = adev->ps_options;
-+ pm.acx111.hangover_period = adev->ps_hangover_period;
-+ if (IS_ACX111(adev)) {
-+ pm.acx111.beacon_rx_time = cpu_to_le32(adev->ps_beacon_rx_time);
-+ pm.acx111.enhanced_ps_transition_time = cpu_to_le32(adev->ps_enhanced_transition_time);
-+ } else {
-+ pm.acx100.enhanced_ps_transition_time = cpu_to_le16(adev->ps_enhanced_transition_time);
-+ }
-+ acx_s_configure(adev, &pm, ACX1xx_IE_POWER_MGMT);
-+ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT);
-+ log(L_INIT, "wakeup_cfg: 0x%02X\n", pm.acx111.wakeup_cfg);
-+ acx_s_msleep(40);
-+ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT);
-+ log(L_INIT, "wakeup_cfg: 0x%02X\n", pm.acx111.wakeup_cfg);
-+ log(L_INIT, "power save mode change %s\n",
-+ (pm.acx111.wakeup_cfg & PS_CFG_PENDING) ? "FAILED" : "was successful");
-+ /* FIXME: maybe verify via PS_CFG_PENDING bit here
-+ * that power save mode change was successful. */
-+ /* FIXME: we shouldn't trigger a scan immediately after
-+ * fiddling with power save mode (since the firmware is sending
-+ * a NULL frame then). */
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_s_update_card_settings
-+**
-+** Applies accumulated changes in various adev->xxxx members
-+** Called by ioctl commit handler, acx_start, acx_set_defaults,
-+** acx_s_after_interrupt_task (if IRQ_CMD_UPDATE_CARD_CFG),
-+*/
-+static void
-+acx111_s_sens_radio_16_17(acx_device_t *adev)
-+{
-+ u32 feature1, feature2;
-+
-+ if ((adev->sensitivity < 1) || (adev->sensitivity > 3)) {
-+ printk("%s: invalid sensitivity setting (1..3), "
-+ "setting to 1\n", adev->ndev->name);
-+ adev->sensitivity = 1;
-+ }
-+ acx111_s_get_feature_config(adev, &feature1, &feature2);
-+ CLEAR_BIT(feature1, FEATURE1_LOW_RX|FEATURE1_EXTRA_LOW_RX);
-+ if (adev->sensitivity > 1)
-+ SET_BIT(feature1, FEATURE1_LOW_RX);
-+ if (adev->sensitivity > 2)
-+ SET_BIT(feature1, FEATURE1_EXTRA_LOW_RX);
-+ acx111_s_feature_set(adev, feature1, feature2);
-+}
-+
-+
-+void
-+acx_s_update_card_settings(acx_device_t *adev)
-+{
-+ unsigned long flags;
-+ unsigned int start_scan = 0;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ log(L_INIT, "get_mask 0x%08X, set_mask 0x%08X\n",
-+ adev->get_mask, adev->set_mask);
-+
-+ /* Track dependencies betweed various settings */
-+
-+ if (adev->set_mask & (GETSET_MODE|GETSET_RESCAN|GETSET_WEP)) {
-+ log(L_INIT, "important setting has been changed. "
-+ "Need to update packet templates, too\n");
-+ SET_BIT(adev->set_mask, SET_TEMPLATES);
-+ }
-+ if (adev->set_mask & GETSET_CHANNEL) {
-+ /* This will actually tune RX/TX to the channel */
-+ SET_BIT(adev->set_mask, GETSET_RX|GETSET_TX);
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ /* Beacons contain channel# - update them */
-+ SET_BIT(adev->set_mask, SET_TEMPLATES);
-+ }
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ start_scan = 1;
-+ }
-+ }
-+
-+ /* Apply settings */
-+
-+#ifdef WHY_SHOULD_WE_BOTHER /* imagine we were just powered off */
-+ /* send a disassoc request in case it's required */
-+ if (adev->set_mask & (GETSET_MODE|GETSET_RESCAN|GETSET_CHANNEL|GETSET_WEP)) {
-+ if (ACX_MODE_2_STA == adev->mode) {
-+ if (ACX_STATUS_4_ASSOCIATED == adev->status) {
-+ log(L_ASSOC, "we were ASSOCIATED - "
-+ "sending disassoc request\n");
-+ acx_lock(adev, flags);
-+ acx_l_transmit_disassoc(adev, NULL);
-+ /* FIXME: deauth? */
-+ acx_unlock(adev, flags);
-+ }
-+ /* need to reset some other stuff as well */
-+ log(L_DEBUG, "resetting bssid\n");
-+ MAC_ZERO(adev->bssid);
-+ SET_BIT(adev->set_mask, SET_TEMPLATES|SET_STA_LIST);
-+ start_scan = 1;
-+ }
-+ }
-+#endif
-+
-+ if (adev->get_mask & GETSET_STATION_ID) {
-+ u8 stationID[4 + ACX1xx_IE_DOT11_STATION_ID_LEN];
-+ const u8 *paddr;
-+
-+ acx_s_interrogate(adev, &stationID, ACX1xx_IE_DOT11_STATION_ID);
-+ paddr = &stationID[4];
-+ for (i = 0; i < ETH_ALEN; i++) {
-+ /* we copy the MAC address (reversed in
-+ * the card) to the netdevice's MAC
-+ * address, and on ifup it will be
-+ * copied into iwadev->dev_addr */
-+ adev->ndev->dev_addr[ETH_ALEN - 1 - i] = paddr[i];
-+ }
-+ CLEAR_BIT(adev->get_mask, GETSET_STATION_ID);
-+ }
-+
-+ if (adev->get_mask & GETSET_SENSITIVITY) {
-+ if ((RADIO_RFMD_11 == adev->radio_type)
-+ || (RADIO_MAXIM_0D == adev->radio_type)
-+ || (RADIO_RALINK_15 == adev->radio_type)) {
-+ acx_s_read_phy_reg(adev, 0x30, &adev->sensitivity);
-+ } else {
-+ log(L_INIT, "don't know how to get sensitivity "
-+ "for radio type 0x%02X\n", adev->radio_type);
-+ adev->sensitivity = 0;
-+ }
-+ log(L_INIT, "got sensitivity value %u\n", adev->sensitivity);
-+
-+ CLEAR_BIT(adev->get_mask, GETSET_SENSITIVITY);
-+ }
-+
-+ if (adev->get_mask & GETSET_ANTENNA) {
-+ u8 antenna[4 + ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN];
-+
-+ memset(antenna, 0, sizeof(antenna));
-+ acx_s_interrogate(adev, antenna, ACX1xx_IE_DOT11_CURRENT_ANTENNA);
-+ adev->antenna = antenna[4];
-+ log(L_INIT, "got antenna value 0x%02X\n", adev->antenna);
-+ CLEAR_BIT(adev->get_mask, GETSET_ANTENNA);
-+ }
-+
-+ if (adev->get_mask & GETSET_ED_THRESH) {
-+ if (IS_ACX100(adev)) {
-+ u8 ed_threshold[4 + ACX100_IE_DOT11_ED_THRESHOLD_LEN];
-+
-+ memset(ed_threshold, 0, sizeof(ed_threshold));
-+ acx_s_interrogate(adev, ed_threshold, ACX100_IE_DOT11_ED_THRESHOLD);
-+ adev->ed_threshold = ed_threshold[4];
-+ } else {
-+ log(L_INIT, "acx111 doesn't support ED\n");
-+ adev->ed_threshold = 0;
-+ }
-+ log(L_INIT, "got Energy Detect (ED) threshold %u\n", adev->ed_threshold);
-+ CLEAR_BIT(adev->get_mask, GETSET_ED_THRESH);
-+ }
-+
-+ if (adev->get_mask & GETSET_CCA) {
-+ if (IS_ACX100(adev)) {
-+ u8 cca[4 + ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN];
-+
-+ memset(cca, 0, sizeof(adev->cca));
-+ acx_s_interrogate(adev, cca, ACX1xx_IE_DOT11_CURRENT_CCA_MODE);
-+ adev->cca = cca[4];
-+ } else {
-+ log(L_INIT, "acx111 doesn't support CCA\n");
-+ adev->cca = 0;
-+ }
-+ log(L_INIT, "got Channel Clear Assessment (CCA) value %u\n", adev->cca);
-+ CLEAR_BIT(adev->get_mask, GETSET_CCA);
-+ }
-+
-+ if (adev->get_mask & GETSET_REG_DOMAIN) {
-+ acx_ie_generic_t dom;
-+
-+ acx_s_interrogate(adev, &dom, ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN);
-+ adev->reg_dom_id = dom.m.bytes[0];
-+ acx_s_set_sane_reg_domain(adev, 0);
-+ log(L_INIT, "got regulatory domain 0x%02X\n", adev->reg_dom_id);
-+ CLEAR_BIT(adev->get_mask, GETSET_REG_DOMAIN);
-+ }
-+
-+ if (adev->set_mask & GETSET_STATION_ID) {
-+ u8 stationID[4 + ACX1xx_IE_DOT11_STATION_ID_LEN];
-+ u8 *paddr;
-+
-+ paddr = &stationID[4];
-+ memcpy(adev->dev_addr, adev->ndev->dev_addr, ETH_ALEN);
-+ for (i = 0; i < ETH_ALEN; i++) {
-+ /* copy the MAC address we obtained when we noticed
-+ * that the ethernet iface's MAC changed
-+ * to the card (reversed in
-+ * the card!) */
-+ paddr[i] = adev->dev_addr[ETH_ALEN - 1 - i];
-+ }
-+ acx_s_configure(adev, &stationID, ACX1xx_IE_DOT11_STATION_ID);
-+ CLEAR_BIT(adev->set_mask, GETSET_STATION_ID);
-+ }
-+
-+ if (adev->set_mask & SET_TEMPLATES) {
-+ log(L_INIT, "updating packet templates\n");
-+ switch (adev->mode) {
-+ case ACX_MODE_2_STA:
-+ acx_s_set_probe_request_template(adev);
-+#if POWER_SAVE_80211
-+ acx_s_set_null_data_template(adev);
-+#endif
-+ break;
-+ case ACX_MODE_0_ADHOC:
-+ acx_s_set_probe_request_template(adev);
-+#if POWER_SAVE_80211
-+ /* maybe power save functionality is somehow possible
-+ * for Ad-Hoc mode, too... FIXME: verify it somehow? firmware debug fields? */
-+ acx_s_set_null_data_template(adev);
-+#endif
-+ /* fall through */
-+ case ACX_MODE_3_AP:
-+ acx_s_set_beacon_template(adev);
-+ acx_s_set_tim_template(adev);
-+ /* BTW acx111 firmware would not send probe responses
-+ ** if probe request does not have all basic rates flagged
-+ ** by 0x80! Thus firmware does not conform to 802.11,
-+ ** it should ignore 0x80 bit in ratevector from STA.
-+ ** We can 'fix' it by not using this template and
-+ ** sending probe responses by hand. TODO --vda */
-+ acx_s_set_probe_response_template(adev);
-+ }
-+ /* Needed if generated frames are to be emitted at different tx rate now */
-+ log(L_IRQ, "redoing cmd_join_bssid() after template cfg\n");
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ CLEAR_BIT(adev->set_mask, SET_TEMPLATES);
-+ }
-+ if (adev->set_mask & SET_STA_LIST) {
-+ acx_lock(adev, flags);
-+ acx_l_sta_list_init(adev);
-+ CLEAR_BIT(adev->set_mask, SET_STA_LIST);
-+ acx_unlock(adev, flags);
-+ }
-+ if (adev->set_mask & SET_RATE_FALLBACK) {
-+ u8 rate[4 + ACX1xx_IE_RATE_FALLBACK_LEN];
-+
-+ /* configure to not do fallbacks when not in auto rate mode */
-+ rate[4] = (adev->rate_auto) ? /* adev->txrate_fallback_retries */ 1 : 0;
-+ log(L_INIT, "updating Tx fallback to %u retries\n", rate[4]);
-+ acx_s_configure(adev, &rate, ACX1xx_IE_RATE_FALLBACK);
-+ CLEAR_BIT(adev->set_mask, SET_RATE_FALLBACK);
-+ }
-+ if (adev->set_mask & GETSET_TXPOWER) {
-+ log(L_INIT, "updating transmit power: %u dBm\n",
-+ adev->tx_level_dbm);
-+ acx_s_set_tx_level(adev, adev->tx_level_dbm);
-+ CLEAR_BIT(adev->set_mask, GETSET_TXPOWER);
-+ }
-+
-+ if (adev->set_mask & GETSET_SENSITIVITY) {
-+ log(L_INIT, "updating sensitivity value: %u\n",
-+ adev->sensitivity);
-+ switch (adev->radio_type) {
-+ case RADIO_RFMD_11:
-+ case RADIO_MAXIM_0D:
-+ case RADIO_RALINK_15:
-+ acx_s_write_phy_reg(adev, 0x30, adev->sensitivity);
-+ break;
-+ case RADIO_RADIA_16:
-+ case RADIO_UNKNOWN_17:
-+ acx111_s_sens_radio_16_17(adev);
-+ break;
-+ default:
-+ log(L_INIT, "don't know how to modify sensitivity "
-+ "for radio type 0x%02X\n", adev->radio_type);
-+ }
-+ CLEAR_BIT(adev->set_mask, GETSET_SENSITIVITY);
-+ }
-+
-+ if (adev->set_mask & GETSET_ANTENNA) {
-+ /* antenna */
-+ u8 antenna[4 + ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN];
-+
-+ memset(antenna, 0, sizeof(antenna));
-+ antenna[4] = adev->antenna;
-+ log(L_INIT, "updating antenna value: 0x%02X\n",
-+ adev->antenna);
-+ acx_s_configure(adev, &antenna, ACX1xx_IE_DOT11_CURRENT_ANTENNA);
-+ CLEAR_BIT(adev->set_mask, GETSET_ANTENNA);
-+ }
-+
-+ if (adev->set_mask & GETSET_ED_THRESH) {
-+ /* ed_threshold */
-+ log(L_INIT, "updating Energy Detect (ED) threshold: %u\n",
-+ adev->ed_threshold);
-+ if (IS_ACX100(adev)) {
-+ u8 ed_threshold[4 + ACX100_IE_DOT11_ED_THRESHOLD_LEN];
-+
-+ memset(ed_threshold, 0, sizeof(ed_threshold));
-+ ed_threshold[4] = adev->ed_threshold;
-+ acx_s_configure(adev, &ed_threshold, ACX100_IE_DOT11_ED_THRESHOLD);
-+ }
-+ else
-+ log(L_INIT, "acx111 doesn't support ED!\n");
-+ CLEAR_BIT(adev->set_mask, GETSET_ED_THRESH);
-+ }
-+
-+ if (adev->set_mask & GETSET_CCA) {
-+ /* CCA value */
-+ log(L_INIT, "updating Channel Clear Assessment "
-+ "(CCA) value: 0x%02X\n", adev->cca);
-+ if (IS_ACX100(adev)) {
-+ u8 cca[4 + ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN];
-+
-+ memset(cca, 0, sizeof(cca));
-+ cca[4] = adev->cca;
-+ acx_s_configure(adev, &cca, ACX1xx_IE_DOT11_CURRENT_CCA_MODE);
-+ }
-+ else
-+ log(L_INIT, "acx111 doesn't support CCA!\n");
-+ CLEAR_BIT(adev->set_mask, GETSET_CCA);
-+ }
-+
-+ if (adev->set_mask & GETSET_LED_POWER) {
-+ /* Enable Tx */
-+ log(L_INIT, "updating power LED status: %u\n", adev->led_power);
-+
-+ acx_lock(adev, flags);
-+#if defined (ACX_MEM)
-+ acxmem_l_power_led(adev, adev->led_power);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_l_power_led(adev, adev->led_power);
-+#endif
-+ CLEAR_BIT(adev->set_mask, GETSET_LED_POWER);
-+ acx_unlock(adev, flags);
-+ }
-+
-+ if (adev->set_mask & GETSET_POWER_80211) {
-+#if POWER_SAVE_80211
-+ acx_s_update_80211_powersave_mode(adev);
-+#endif
-+ CLEAR_BIT(adev->set_mask, GETSET_POWER_80211);
-+ }
-+
-+ if (adev->set_mask & GETSET_CHANNEL) {
-+ /* channel */
-+ log(L_INIT, "updating channel to: %u\n", adev->channel);
-+ CLEAR_BIT(adev->set_mask, GETSET_CHANNEL);
-+ }
-+
-+ if (adev->set_mask & GETSET_TX) {
-+ /* set Tx */
-+ log(L_INIT, "updating: %s Tx\n",
-+ adev->tx_disabled ? "disable" : "enable");
-+ if (adev->tx_disabled)
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
-+ else
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_TX, &adev->channel, 1);
-+ CLEAR_BIT(adev->set_mask, GETSET_TX);
-+ }
-+
-+ if (adev->set_mask & GETSET_RX) {
-+ /* Enable Rx */
-+ log(L_INIT, "updating: enable Rx on channel: %u\n",
-+ adev->channel);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_RX, &adev->channel, 1);
-+ CLEAR_BIT(adev->set_mask, GETSET_RX);
-+ }
-+
-+ if (adev->set_mask & GETSET_RETRY) {
-+ u8 short_retry[4 + ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN];
-+ u8 long_retry[4 + ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN];
-+
-+ log(L_INIT, "updating short retry limit: %u, long retry limit: %u\n",
-+ adev->short_retry, adev->long_retry);
-+ short_retry[0x4] = adev->short_retry;
-+ long_retry[0x4] = adev->long_retry;
-+ acx_s_configure(adev, &short_retry, ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT);
-+ acx_s_configure(adev, &long_retry, ACX1xx_IE_DOT11_LONG_RETRY_LIMIT);
-+ CLEAR_BIT(adev->set_mask, GETSET_RETRY);
-+ }
-+
-+ if (adev->set_mask & SET_MSDU_LIFETIME) {
-+ u8 xmt_msdu_lifetime[4 + ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN];
-+
-+ log(L_INIT, "updating tx MSDU lifetime: %u\n",
-+ adev->msdu_lifetime);
-+ *(u32 *)&xmt_msdu_lifetime[4] = cpu_to_le32((u32)adev->msdu_lifetime);
-+ acx_s_configure(adev, &xmt_msdu_lifetime, ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME);
-+ CLEAR_BIT(adev->set_mask, SET_MSDU_LIFETIME);
-+ }
-+
-+ if (adev->set_mask & GETSET_REG_DOMAIN) {
-+ log(L_INIT, "updating regulatory domain: 0x%02X\n",
-+ adev->reg_dom_id);
-+ acx_s_set_sane_reg_domain(adev, 1);
-+ CLEAR_BIT(adev->set_mask, GETSET_REG_DOMAIN);
-+ }
-+
-+ if (adev->set_mask & GETSET_MODE) {
-+ adev->ndev->type = (adev->mode == ACX_MODE_MONITOR) ?
-+ adev->monitor_type : ARPHRD_ETHER;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_3_AP:
-+
-+ acx_lock(adev, flags);
-+ acx_l_sta_list_init(adev);
-+ adev->aid = 0;
-+ adev->ap_client = NULL;
-+ MAC_COPY(adev->bssid, adev->dev_addr);
-+ /* this basically says "we're connected" */
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ acx_unlock(adev, flags);
-+
-+ acx111_s_feature_off(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER);
-+ /* start sending beacons */
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ break;
-+ case ACX_MODE_MONITOR:
-+ acx111_s_feature_on(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER);
-+ /* this stops beacons */
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ /* this basically says "we're connected" */
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG|SET_WEP_OPTIONS);
-+ break;
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ acx111_s_feature_off(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER);
-+
-+ acx_lock(adev, flags);
-+ adev->aid = 0;
-+ adev->ap_client = NULL;
-+ acx_unlock(adev, flags);
-+
-+ /* we want to start looking for peer or AP */
-+ start_scan = 1;
-+ break;
-+ case ACX_MODE_OFF:
-+ /* TODO: disable RX/TX, stop any scanning activity etc: */
-+ /* adev->tx_disabled = 1; */
-+ /* SET_BIT(adev->set_mask, GETSET_RX|GETSET_TX); */
-+
-+ /* This stops beacons (invalid macmode...) */
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ acx_set_status(adev, ACX_STATUS_0_STOPPED);
-+ break;
-+ }
-+ CLEAR_BIT(adev->set_mask, GETSET_MODE);
-+ }
-+
-+ if (adev->set_mask & SET_RXCONFIG) {
-+ acx_s_initialize_rx_config(adev);
-+ CLEAR_BIT(adev->set_mask, SET_RXCONFIG);
-+ }
-+
-+ if (adev->set_mask & GETSET_RESCAN) {
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ start_scan = 1;
-+ break;
-+ }
-+ CLEAR_BIT(adev->set_mask, GETSET_RESCAN);
-+ }
-+
-+ if (adev->set_mask & GETSET_WEP) {
-+ /* encode */
-+
-+ ie_dot11WEPDefaultKeyID_t dkey;
-+#ifdef DEBUG_WEP
-+ struct {
-+ u16 type;
-+ u16 len;
-+ u8 val;
-+ } ACX_PACKED keyindic;
-+#endif
-+ log(L_INIT, "updating WEP key settings\n");
-+
-+ acx_s_set_wepkey(adev);
-+
-+ dkey.KeyID = adev->wep_current_index;
-+ log(L_INIT, "setting WEP key %u as default\n", dkey.KeyID);
-+ acx_s_configure(adev, &dkey, ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET);
-+#ifdef DEBUG_WEP
-+ keyindic.val = 3;
-+ acx_s_configure(adev, &keyindic, ACX111_IE_KEY_CHOOSE);
-+#endif
-+ start_scan = 1;
-+ CLEAR_BIT(adev->set_mask, GETSET_WEP);
-+ }
-+
-+ if (adev->set_mask & SET_WEP_OPTIONS) {
-+ acx100_ie_wep_options_t options;
-+ if (IS_ACX111(adev)) {
-+ log(L_DEBUG, "setting WEP Options for acx111 is not supported\n");
-+ } else {
-+ log(L_INIT, "setting WEP Options\n");
-+ acx100_s_init_wep(adev);
-+#if 0
-+ /* let's choose maximum setting: 4 default keys,
-+ * plus 10 other keys: */
-+ options.NumKeys = cpu_to_le16(DOT11_MAX_DEFAULT_WEP_KEYS + 10);
-+ /* don't decrypt default key only,
-+ * don't override decryption: */
-+ options.WEPOption = 0;
-+ if (adev->mode == ACX_MODE_MONITOR) {
-+ /* don't decrypt default key only,
-+ * override decryption mechanism: */
-+ options.WEPOption = 2;
-+ }
-+
-+ acx_s_configure(adev, &options, ACX100_IE_WEP_OPTIONS);
-+#endif
-+ }
-+ CLEAR_BIT(adev->set_mask, SET_WEP_OPTIONS);
-+ }
-+
-+ /* Rescan was requested */
-+ if (start_scan) {
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ /* We can avoid clearing list if join code
-+ ** will be a bit more clever about not picking
-+ ** 'bad' AP over and over again */
-+ acx_lock(adev, flags);
-+ adev->ap_client = NULL;
-+ acx_l_sta_list_init(adev);
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING);
-+ acx_unlock(adev, flags);
-+
-+ acx_s_cmd_start_scan(adev);
-+ }
-+ }
-+
-+ /* debug, rate, and nick don't need any handling */
-+ /* what about sniffing mode?? */
-+
-+ log(L_INIT, "get_mask 0x%08X, set_mask 0x%08X - after update\n",
-+ adev->get_mask, adev->set_mask);
-+
-+/* end: */
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_e_after_interrupt_task
-+*/
-+static int
-+acx_s_recalib_radio(acx_device_t *adev)
-+{
-+ if (IS_ACX111(adev)) {
-+ acx111_cmd_radiocalib_t cal;
-+
-+ printk("%s: recalibrating radio\n", adev->ndev->name);
-+ /* automatic recalibration, choose all methods: */
-+ cal.methods = cpu_to_le32(0x8000000f);
-+ /* automatic recalibration every 60 seconds (value in TUs)
-+ * I wonder what the firmware default here is? */
-+ cal.interval = cpu_to_le32(58594);
-+ return acx_s_issue_cmd_timeo(adev, ACX111_CMD_RADIOCALIB,
-+ &cal, sizeof(cal), CMD_TIMEOUT_MS(100));
-+ } else {
-+ /* On ACX100, we need to recalibrate the radio
-+ * by issuing a GETSET_TX|GETSET_RX */
-+ if (/* (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0)) &&
-+ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0)) && */
-+ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_TX, &adev->channel, 1)) &&
-+ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_RX, &adev->channel, 1)) )
-+ return OK;
-+ return NOT_OK;
-+ }
-+}
-+
-+static void
-+acx_s_after_interrupt_recalib(acx_device_t *adev)
-+{
-+ int res;
-+
-+ /* this helps with ACX100 at least;
-+ * hopefully ACX111 also does a
-+ * recalibration here */
-+
-+ /* clear flag beforehand, since we want to make sure
-+ * it's cleared; then only set it again on specific circumstances */
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+
-+ /* better wait a bit between recalibrations to
-+ * prevent overheating due to torturing the card
-+ * into working too long despite high temperature
-+ * (just a safety measure) */
-+ if (adev->recalib_time_last_success
-+ && time_before(jiffies, adev->recalib_time_last_success
-+ + RECALIB_PAUSE * 60 * HZ)) {
-+ if (adev->recalib_msg_ratelimit <= 4) {
-+ printk("%s: less than " STRING(RECALIB_PAUSE)
-+ " minutes since last radio recalibration, "
-+ "not recalibrating (maybe card is too hot?)\n",
-+ adev->ndev->name);
-+ adev->recalib_msg_ratelimit++;
-+ if (adev->recalib_msg_ratelimit == 5)
-+ printk("disabling above message until next recalib\n");
-+ }
-+ return;
-+ }
-+
-+ adev->recalib_msg_ratelimit = 0;
-+
-+ /* note that commands sometimes fail (card busy),
-+ * so only clear flag if we were fully successful */
-+ res = acx_s_recalib_radio(adev);
-+ if (res == OK) {
-+ printk("%s: successfully recalibrated radio\n",
-+ adev->ndev->name);
-+ adev->recalib_time_last_success = jiffies;
-+ adev->recalib_failure_count = 0;
-+ } else {
-+ /* failed: resubmit, but only limited
-+ * amount of times within some time range
-+ * to prevent endless loop */
-+
-+ adev->recalib_time_last_success = 0; /* we failed */
-+
-+ /* if some time passed between last
-+ * attempts, then reset failure retry counter
-+ * to be able to do next recalib attempt */
-+ if (time_after(jiffies, adev->recalib_time_last_attempt + 5*HZ))
-+ adev->recalib_failure_count = 0;
-+
-+ if (adev->recalib_failure_count < 5) {
-+ /* increment inside only, for speedup of outside path */
-+ adev->recalib_failure_count++;
-+ adev->recalib_time_last_attempt = jiffies;
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+ }
-+ }
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
-+static void
-+acx_e_after_interrupt_task(struct work_struct *work)
-+{
-+ acx_device_t *adev = container_of(work, acx_device_t, after_interrupt_task);
-+#else
-+ static void
-+ acx_e_after_interrupt_task(void *data)
-+ {
-+ struct net_device *ndev = (struct net_device*)data;
-+ acx_device_t *adev = ndev2adev(ndev);
-+#endif
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ if (!adev->after_interrupt_jobs)
-+ goto end; /* no jobs to do */
-+
-+#if TX_CLEANUP_IN_SOFTIRQ
-+ /* can happen only on PCI */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_TX_CLEANUP) {
-+ acx_lock(adev, flags);
-+ acxpci_l_clean_txdesc(adev);
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_TX_CLEANUP);
-+ acx_unlock(adev, flags);
-+ }
-+#endif
-+ /* we see lotsa tx errors */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_RADIO_RECALIB) {
-+ acx_s_after_interrupt_recalib(adev);
-+ }
-+
-+ /* a poor interrupt code wanted to do update_card_settings() */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_UPDATE_CARD_CFG) {
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask)
-+ acx_s_update_card_settings(adev);
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+ }
-+
-+ /* 1) we detected that no Scan_Complete IRQ came from fw, or
-+ ** 2) we found too many STAs */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_STOP_SCAN) {
-+ log(L_IRQ, "sending a stop scan cmd...\n");
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_STOP_SCAN, NULL, 0);
-+ /* HACK: set the IRQ bit, since we won't get a
-+ * scan complete IRQ any more on ACX111 (works on ACX100!),
-+ * since _we_, not a fw, have stopped the scan */
-+ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_STOP_SCAN);
-+ }
-+
-+ /* either fw sent Scan_Complete or we detected that
-+ ** no Scan_Complete IRQ came from fw. Finish scanning,
-+ ** pick join partner if any */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_COMPLETE_SCAN) {
-+ if (adev->status == ACX_STATUS_1_SCANNING) {
-+ if (OK != acx_s_complete_scan(adev)) {
-+ SET_BIT(adev->after_interrupt_jobs,
-+ ACX_AFTER_IRQ_RESTART_SCAN);
-+ }
-+ } else {
-+ /* + scan kills current join status - restore it
-+ ** (do we need it for STA?) */
-+ /* + does it happen only with active scans?
-+ ** active and passive scans? ALL scans including
-+ ** background one? */
-+ /* + was not verified that everything is restored
-+ ** (but at least we start to emit beacons again) */
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ log(L_IRQ, "redoing cmd_join_bssid() after scan\n");
-+ acx_s_cmd_join_bssid(adev, adev->bssid);
-+ }
-+ }
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_COMPLETE_SCAN);
-+ }
-+
-+ /* STA auth or assoc timed out, start over again */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_RESTART_SCAN) {
-+ log(L_IRQ, "sending a start_scan cmd...\n");
-+ acx_s_cmd_start_scan(adev);
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_RESTART_SCAN);
-+ }
-+
-+ /* whee, we got positive assoc response! 8) */
-+ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_ASSOCIATE) {
-+ acx_ie_generic_t pdr;
-+ /* tiny race window exists, checking that we still a STA */
-+ switch (adev->mode) {
-+ case ACX_MODE_2_STA:
-+ pdr.m.aid = cpu_to_le16(adev->aid);
-+ acx_s_configure(adev, &pdr, ACX1xx_IE_ASSOC_ID);
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
-+ log(L_ASSOC|L_DEBUG, "ASSOCIATED!\n");
-+ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_ASSOCIATE);
-+ }
-+ }
-+end:
-+ acx_sem_unlock(adev);
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_schedule_task
-+**
-+** Schedule the call of the after_interrupt method after leaving
-+** the interrupt context.
-+*/
-+void
-+acx_schedule_task(acx_device_t *adev, unsigned int set_flag)
-+{
-+ SET_BIT(adev->after_interrupt_jobs, set_flag);
-+ SCHEDULE_WORK(&adev->after_interrupt_task);
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void
-+acx_init_task_scheduler(acx_device_t *adev)
-+{
-+ /* configure task scheduler */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
-+ INIT_WORK(&adev->after_interrupt_task, acx_e_after_interrupt_task);
-+#else
-+ INIT_WORK(&adev->after_interrupt_task, acx_e_after_interrupt_task,
-+ adev->ndev);
-+#endif
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_start
-+*/
-+void
-+acx_s_start(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+
-+ /*
-+ * Ok, now we do everything that can possibly be done with ioctl
-+ * calls to make sure that when it was called before the card
-+ * was up we get the changes asked for
-+ */
-+
-+ SET_BIT(adev->set_mask, SET_TEMPLATES|SET_STA_LIST|GETSET_WEP
-+ |GETSET_TXPOWER|GETSET_ANTENNA|GETSET_ED_THRESH|GETSET_CCA
-+ |GETSET_REG_DOMAIN|GETSET_MODE|GETSET_CHANNEL
-+ |GETSET_TX|GETSET_RX|GETSET_STATION_ID);
-+
-+ log(L_INIT, "updating initial settings on iface activation\n");
-+ acx_s_update_card_settings(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_update_capabilities
-+*/
-+void
-+acx_update_capabilities(acx_device_t *adev)
-+{
-+ u16 cap = 0;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_3_AP:
-+ SET_BIT(cap, WF_MGMT_CAP_ESS); break;
-+ case ACX_MODE_0_ADHOC:
-+ SET_BIT(cap, WF_MGMT_CAP_IBSS); break;
-+ /* other types of stations do not emit beacons */
-+ }
-+
-+ if (adev->wep_restricted) {
-+ SET_BIT(cap, WF_MGMT_CAP_PRIVACY);
-+ }
-+ if (adev->cfgopt_dot11ShortPreambleOption) {
-+ SET_BIT(cap, WF_MGMT_CAP_SHORT);
-+ }
-+ if (adev->cfgopt_dot11PBCCOption) {
-+ SET_BIT(cap, WF_MGMT_CAP_PBCC);
-+ }
-+ if (adev->cfgopt_dot11ChannelAgility) {
-+ SET_BIT(cap, WF_MGMT_CAP_AGILITY);
-+ }
-+ log(L_DEBUG, "caps updated from 0x%04X to 0x%04X\n",
-+ adev->capabilities, cap);
-+ adev->capabilities = cap;
-+}
-+
-+/***********************************************************************
-+** Common function to parse ALL configoption struct formats
-+** (ACX100 and ACX111; FIXME: how to make it work with ACX100 USB!?!?).
-+** FIXME: logging should be removed here and added to a /proc file instead
-+*/
-+void
-+acx_s_parse_configoption(acx_device_t *adev, const acx111_ie_configoption_t *pcfg)
-+{
-+ const u8 *pEle;
-+ int i;
-+ int is_acx111 = IS_ACX111(adev);
-+
-+ if (acx_debug & L_DEBUG) {
-+ printk("configoption struct content:\n");
-+ acx_dump_bytes(pcfg, sizeof(*pcfg));
-+ }
-+
-+ if (( is_acx111 && (adev->eeprom_version == 5))
-+ || (!is_acx111 && (adev->eeprom_version == 4))
-+ || (!is_acx111 && (adev->eeprom_version == 5))) {
-+ /* these versions are known to be supported */
-+ } else {
-+ printk("unknown chip and EEPROM version combination (%s, v%d), "
-+ "don't know how to parse config options yet. "
-+ "Please report\n", is_acx111 ? "ACX111" : "ACX100",
-+ adev->eeprom_version);
-+ return;
-+ }
-+
-+ /* first custom-parse the first part which has chip-specific layout */
-+
-+ pEle = (const u8 *) pcfg;
-+
-+ pEle += 4; /* skip (type,len) header */
-+
-+ memcpy(adev->cfgopt_NVSv, pEle, sizeof(adev->cfgopt_NVSv));
-+ pEle += sizeof(adev->cfgopt_NVSv);
-+
-+ if (is_acx111) {
-+ adev->cfgopt_NVS_vendor_offs = le16_to_cpu(*(u16 *)pEle);
-+ pEle += sizeof(adev->cfgopt_NVS_vendor_offs);
-+
-+ adev->cfgopt_probe_delay = 200; /* good default value? */
-+ pEle += 2; /* FIXME: unknown, value 0x0001 */
-+ } else {
-+ memcpy(adev->cfgopt_MAC, pEle, sizeof(adev->cfgopt_MAC));
-+ pEle += sizeof(adev->cfgopt_MAC);
-+
-+ adev->cfgopt_probe_delay = le16_to_cpu(*(u16 *)pEle);
-+ pEle += sizeof(adev->cfgopt_probe_delay);
-+ if ((adev->cfgopt_probe_delay < 100) || (adev->cfgopt_probe_delay > 500)) {
-+ printk("strange probe_delay value %d, "
-+ "tweaking to 200\n", adev->cfgopt_probe_delay);
-+ adev->cfgopt_probe_delay = 200;
-+ }
-+ }
-+
-+ adev->cfgopt_eof_memory = le32_to_cpu(*(u32 *)pEle);
-+ pEle += sizeof(adev->cfgopt_eof_memory);
-+
-+ printk("NVS_vendor_offs:%04X probe_delay:%d eof_memory:%d\n",
-+ adev->cfgopt_NVS_vendor_offs,
-+ adev->cfgopt_probe_delay,
-+ adev->cfgopt_eof_memory);
-+
-+ adev->cfgopt_dot11CCAModes = *pEle++;
-+ adev->cfgopt_dot11Diversity = *pEle++;
-+ adev->cfgopt_dot11ShortPreambleOption = *pEle++;
-+ adev->cfgopt_dot11PBCCOption = *pEle++;
-+ adev->cfgopt_dot11ChannelAgility = *pEle++;
-+ adev->cfgopt_dot11PhyType = *pEle++;
-+ adev->cfgopt_dot11TempType = *pEle++;
-+ printk("CCAModes:%02X Diversity:%02X ShortPreOpt:%02X "
-+ "PBCC:%02X ChanAgil:%02X PHY:%02X Temp:%02X\n",
-+ adev->cfgopt_dot11CCAModes,
-+ adev->cfgopt_dot11Diversity,
-+ adev->cfgopt_dot11ShortPreambleOption,
-+ adev->cfgopt_dot11PBCCOption,
-+ adev->cfgopt_dot11ChannelAgility,
-+ adev->cfgopt_dot11PhyType,
-+ adev->cfgopt_dot11TempType);
-+
-+ /* then use common parsing for next part which has common layout */
-+
-+ pEle++; /* skip table_count (6) */
-+
-+ if (IS_MEM(adev) && IS_ACX100(adev))
-+ {
-+ /*
-+ * For iPaq hx4700 Generic Slave F/W 1.10.7.K. I'm not sure if these
-+ * 4 extra bytes are before the dot11 things above or after, so I'm just
-+ * going to guess after. If someone sees these aren't reasonable numbers,
-+ * please fix this.
-+ * The area from which the dot11 values above are read contains:
-+ * 04 01 01 01 00 05 01 06 00 02 01 02
-+ * the 8 dot11 reads above take care of 8 of them, but which 8...
-+ */
-+ pEle += 4;
-+ }
-+
-+ adev->cfgopt_antennas.type = pEle[0];
-+ adev->cfgopt_antennas.len = pEle[1];
-+ printk("AntennaID:%02X Len:%02X Data:",
-+ adev->cfgopt_antennas.type, adev->cfgopt_antennas.len);
-+ for (i = 0; i < pEle[1]; i++) {
-+ adev->cfgopt_antennas.list[i] = pEle[i+2];
-+ printk("%02X ", pEle[i+2]);
-+ }
-+ printk("\n");
-+
-+ pEle += pEle[1] + 2;
-+ adev->cfgopt_power_levels.type = pEle[0];
-+ adev->cfgopt_power_levels.len = pEle[1];
-+ printk("PowerLevelID:%02X Len:%02X Data:",
-+ adev->cfgopt_power_levels.type, adev->cfgopt_power_levels.len);
-+ for (i = 0; i < pEle[1]; i++) {
-+ adev->cfgopt_power_levels.list[i] = le16_to_cpu(*(u16 *)&pEle[i*2+2]);
-+ printk("%04X ", adev->cfgopt_power_levels.list[i]);
-+ }
-+ printk("\n");
-+
-+ pEle += pEle[1]*2 + 2;
-+ adev->cfgopt_data_rates.type = pEle[0];
-+ adev->cfgopt_data_rates.len = pEle[1];
-+ printk("DataRatesID:%02X Len:%02X Data:",
-+ adev->cfgopt_data_rates.type, adev->cfgopt_data_rates.len);
-+ for (i = 0; i < pEle[1]; i++) {
-+ adev->cfgopt_data_rates.list[i] = pEle[i+2];
-+ printk("%02X ", pEle[i+2]);
-+ }
-+ printk("\n");
-+
-+ pEle += pEle[1] + 2;
-+ adev->cfgopt_domains.type = pEle[0];
-+ adev->cfgopt_domains.len = pEle[1];
-+ if (IS_MEM(adev) && IS_ACX100(adev))
-+ {
-+ /*
-+ * For iPaq hx4700 Generic Slave F/W 1.10.7.K.
-+ * There's an extra byte between this structure and the next
-+ * that is not accounted for with this structure's length. It's
-+ * most likely a bug in the firmware, but we can fix it here
-+ * by bumping the length of this field by 1.
-+ */
-+ adev->cfgopt_domains.len++;
-+ }
-+ printk("DomainID:%02X Len:%02X Data:",
-+ adev->cfgopt_domains.type, adev->cfgopt_domains.len);
-+ for (i = 0; i < adev->cfgopt_domains.len; i++) {
-+ adev->cfgopt_domains.list[i] = pEle[i+2];
-+ printk("%02X ", pEle[i+2]);
-+ }
-+ printk("\n");
-+
-+ pEle += adev->cfgopt_domains.len + 2;
-+
-+ adev->cfgopt_product_id.type = pEle[0];
-+ adev->cfgopt_product_id.len = pEle[1];
-+ for (i = 0; i < pEle[1]; i++) {
-+ adev->cfgopt_product_id.list[i] = pEle[i+2];
-+ }
-+ printk("ProductID:%02X Len:%02X Data:%.*s\n",
-+ adev->cfgopt_product_id.type, adev->cfgopt_product_id.len,
-+ adev->cfgopt_product_id.len, (char *)adev->cfgopt_product_id.list);
-+
-+ pEle += pEle[1] + 2;
-+ adev->cfgopt_manufacturer.type = pEle[0];
-+ adev->cfgopt_manufacturer.len = pEle[1];
-+ for (i = 0; i < pEle[1]; i++) {
-+ adev->cfgopt_manufacturer.list[i] = pEle[i+2];
-+ }
-+ printk("ManufacturerID:%02X Len:%02X Data:%.*s\n",
-+ adev->cfgopt_manufacturer.type, adev->cfgopt_manufacturer.len,
-+ adev->cfgopt_manufacturer.len, (char *)adev->cfgopt_manufacturer.list);
-+/*
-+ printk("EEPROM part:\n");
-+ for (i=0; i<58; i++) {
-+ printk("%02X =======> 0x%02X\n",
-+ i, (u8 *)adev->cfgopt_NVSv[i-2]);
-+ }
-+*/
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int __init
-+acx_e_init_module(void)
-+{
-+ int r1,r2,r3,r4;
-+
-+ acx_struct_size_check();
-+
-+ printk("acx: this driver is still EXPERIMENTAL\n"
-+ "acx: reading README file and/or Craig's HOWTO is "
-+ "recommended, visit http://acx100.sf.net in case "
-+ "of further questions/discussion\n");
-+
-+#if defined(CONFIG_ACX_PCI)
-+ r1 = acxpci_e_init_module();
-+#else
-+ r1 = -EINVAL;
-+#endif
-+#if defined(CONFIG_ACX_MEM)
-+ r2 = acxmem_e_init_module();
-+#else
-+ r2 = -EINVAL;
-+#endif
-+#if defined(CONFIG_ACX_USB)
-+ r3 = acxusb_e_init_module();
-+#else
-+ r3 = -EINVAL;
-+#endif
-+#if defined(CONFIG_ACX_CS)
-+ r4 = acx_cs_init();
-+#else
-+ r4 = -EINVAL;
-+#endif
-+ if (r2 && r1 && r3 && r4) { /* all failed! */
-+ if (r3 || r1)
-+ return r3 ? r3 : r1;
-+ else
-+ return r2;
-+ }
-+ /* return success if at least one succeeded */
-+ return 0;
-+
-+}
-+
-+static void __exit
-+acx_e_cleanup_module(void)
-+{
-+#if defined(CONFIG_ACX_PCI)
-+ acxpci_e_cleanup_module();
-+#endif
-+#if defined(CONFIG_ACX_MEM)
-+ acxmem_e_cleanup_module();
-+#endif
-+#if defined(CONFIG_ACX_USB)
-+ acxusb_e_cleanup_module();
-+#endif
-+#if defined(CONFIG_ACX_CS)
-+ acx_cs_cleanup();
-+#endif
-+}
-+
-+module_init(acx_e_init_module)
-+module_exit(acx_e_cleanup_module)
-Index: linux-2.6.22/drivers/net/wireless/acx/conv.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/conv.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,504 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+#include <linux/skbuff.h>
-+#include <linux/if_arp.h>
-+#include <linux/etherdevice.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+** proto_is_stt
-+**
-+** Searches the 802.1h Selective Translation Table for a given
-+** protocol.
-+**
-+** prottype - protocol number (in host order) to search for.
-+**
-+** Returns:
-+** 1 - if the table is empty or a match is found.
-+** 0 - if the table is non-empty and a match is not found.
-+**
-+** Based largely on p80211conv.c of the linux-wlan-ng project
-+*/
-+static inline int
-+proto_is_stt(unsigned int proto)
-+{
-+ /* Always return found for now. This is the behavior used by the */
-+ /* Zoom Win95 driver when 802.1h mode is selected */
-+ /* TODO: If necessary, add an actual search we'll probably
-+ need this to match the CMAC's way of doing things.
-+ Need to do some testing to confirm.
-+ */
-+
-+ if (proto == 0x80f3) /* APPLETALK */
-+ return 1;
-+
-+ return 0;
-+/* return ((prottype == ETH_P_AARP) || (prottype == ETH_P_IPX)); */
-+}
-+
-+/* Helpers */
-+
-+static inline void
-+store_llc_snap(struct wlan_llc *llc)
-+{
-+ llc->dsap = 0xaa; /* SNAP, see IEEE 802 */
-+ llc->ssap = 0xaa;
-+ llc->ctl = 0x03;
-+}
-+static inline int
-+llc_is_snap(const struct wlan_llc *llc)
-+{
-+ return (llc->dsap == 0xaa)
-+ && (llc->ssap == 0xaa)
-+ && (llc->ctl == 0x03);
-+}
-+static inline void
-+store_oui_rfc1042(struct wlan_snap *snap)
-+{
-+ snap->oui[0] = 0;
-+ snap->oui[1] = 0;
-+ snap->oui[2] = 0;
-+}
-+static inline int
-+oui_is_rfc1042(const struct wlan_snap *snap)
-+{
-+ return (snap->oui[0] == 0)
-+ && (snap->oui[1] == 0)
-+ && (snap->oui[2] == 0);
-+}
-+static inline void
-+store_oui_8021h(struct wlan_snap *snap)
-+{
-+ snap->oui[0] = 0;
-+ snap->oui[1] = 0;
-+ snap->oui[2] = 0xf8;
-+}
-+static inline int
-+oui_is_8021h(const struct wlan_snap *snap)
-+{
-+ return (snap->oui[0] == 0)
-+ && (snap->oui[1] == 0)
-+ && (snap->oui[2] == 0xf8);
-+}
-+
-+
-+/***********************************************************************
-+** acx_ether_to_txbuf
-+**
-+** Uses the contents of the ether frame to build the elements of
-+** the 802.11 frame.
-+**
-+** We don't actually set up the frame header here. That's the
-+** MAC's job. We're only handling conversion of DIXII or 802.3+LLC
-+** frames to something that works with 802.11.
-+**
-+** Based largely on p80211conv.c of the linux-wlan-ng project
-+*/
-+int
-+acx_ether_to_txbuf(acx_device_t *adev, void *txbuf, const struct sk_buff *skb)
-+{
-+ struct wlan_hdr_a3 *w_hdr;
-+ struct wlan_ethhdr *e_hdr;
-+ struct wlan_llc *e_llc;
-+ struct wlan_snap *e_snap;
-+ const u8 *a1, *a3;
-+ int header_len, payload_len = -1;
-+ /* protocol type or data length, depending on whether
-+ * DIX or 802.3 ethernet format */
-+ u16 proto;
-+ u16 fc;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(!skb->len)) {
-+ log(L_DEBUG, "zero-length skb!\n");
-+ goto end;
-+ }
-+
-+ w_hdr = (struct wlan_hdr_a3*)txbuf;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_MONITOR:
-+ /* NB: one day we might want to play with DESC_CTL2_FCS
-+ ** Will need to stop doing "- WLAN_FCS_LEN" here then */
-+ if (unlikely(skb->len >= WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_FCS_LEN)) {
-+ printk("%s: can't tx oversized frame (%d bytes)\n",
-+ adev->ndev->name, skb->len);
-+ goto end;
-+ }
-+ memcpy(w_hdr, skb->data, skb->len);
-+ payload_len = skb->len;
-+ goto end;
-+ }
-+
-+ /* step 1: classify ether frame, DIX or 802.3? */
-+ e_hdr = (wlan_ethhdr_t *)skb->data;
-+ proto = ntohs(e_hdr->type);
-+ if (proto <= 1500) {
-+ log(L_DEBUG, "tx: 802.3 len: %d\n", skb->len);
-+ /* codes <= 1500 reserved for 802.3 lengths */
-+ /* it's 802.3, pass ether payload unchanged, */
-+ /* trim off ethernet header and copy payload to txdesc */
-+ header_len = WLAN_HDR_A3_LEN;
-+ } else {
-+ /* it's DIXII, time for some conversion */
-+ /* Create 802.11 packet. Header also contains llc and snap. */
-+
-+ log(L_DEBUG, "tx: DIXII len: %d\n", skb->len);
-+
-+ /* size of header is 802.11 header + llc + snap */
-+ header_len = WLAN_HDR_A3_LEN + sizeof(wlan_llc_t) + sizeof(wlan_snap_t);
-+ /* llc is located behind the 802.11 header */
-+ e_llc = (wlan_llc_t*)(w_hdr + 1);
-+ /* snap is located behind the llc */
-+ e_snap = (wlan_snap_t*)(e_llc + 1);
-+
-+ /* setup the LLC header */
-+ store_llc_snap(e_llc);
-+
-+ /* setup the SNAP header */
-+ e_snap->type = htons(proto);
-+ if (proto_is_stt(proto)) {
-+ store_oui_8021h(e_snap);
-+ } else {
-+ store_oui_rfc1042(e_snap);
-+ }
-+ }
-+ /* trim off ethernet header and copy payload to txbuf */
-+ payload_len = skb->len - sizeof(wlan_ethhdr_t);
-+ /* TODO: can we just let acx DMA payload from skb instead? */
-+ memcpy((u8*)txbuf + header_len, skb->data + sizeof(wlan_ethhdr_t), payload_len);
-+ payload_len += header_len;
-+
-+ /* Set up the 802.11 header */
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi);
-+ a1 = e_hdr->daddr;
-+ a3 = adev->bssid;
-+ break;
-+ case ACX_MODE_2_STA:
-+ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi | WF_FC_TODSi);
-+ a1 = adev->bssid;
-+ a3 = e_hdr->daddr;
-+ break;
-+ case ACX_MODE_3_AP:
-+ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi | WF_FC_FROMDSi);
-+ a1 = e_hdr->daddr;
-+ a3 = e_hdr->saddr;
-+ break;
-+ default:
-+ printk("%s: error - converting eth to wlan in unknown mode\n",
-+ adev->ndev->name);
-+ payload_len = -1;
-+ goto end;
-+ }
-+ if (adev->wep_enabled)
-+ SET_BIT(fc, WF_FC_ISWEPi);
-+
-+ w_hdr->fc = fc;
-+ w_hdr->dur = 0;
-+ MAC_COPY(w_hdr->a1, a1);
-+ MAC_COPY(w_hdr->a2, adev->dev_addr);
-+ MAC_COPY(w_hdr->a3, a3);
-+ w_hdr->seq = 0;
-+
-+#ifdef DEBUG_CONVERT
-+ if (acx_debug & L_DATA) {
-+ printk("original eth frame [%d]: ", skb->len);
-+ acx_dump_bytes(skb->data, skb->len);
-+ printk("802.11 frame [%d]: ", payload_len);
-+ acx_dump_bytes(w_hdr, payload_len);
-+ }
-+#endif
-+
-+end:
-+ FN_EXIT1(payload_len);
-+ return payload_len;
-+}
-+
-+
-+/***********************************************************************
-+** acx_rxbuf_to_ether
-+**
-+** Uses the contents of a received 802.11 frame to build an ether
-+** frame.
-+**
-+** This function extracts the src and dest address from the 802.11
-+** frame to use in the construction of the eth frame.
-+**
-+** Based largely on p80211conv.c of the linux-wlan-ng project
-+*/
-+struct sk_buff*
-+acx_rxbuf_to_ether(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ struct wlan_hdr *w_hdr;
-+ struct wlan_ethhdr *e_hdr;
-+ struct wlan_llc *e_llc;
-+ struct wlan_snap *e_snap;
-+ struct sk_buff *skb;
-+ const u8 *daddr;
-+ const u8 *saddr;
-+ const u8 *e_payload;
-+ int buflen, payload_length;
-+ unsigned int payload_offset, mtu;
-+ u16 fc;
-+
-+ FN_ENTER;
-+
-+ /* This looks complex because it must handle possible
-+ ** phy header in rxbuff */
-+ w_hdr = acx_get_wlan_hdr(adev, rxbuf);
-+ payload_offset = WLAN_HDR_A3_LEN; /* it is relative to w_hdr */
-+ payload_length = RXBUF_BYTES_USED(rxbuf) /* entire rxbuff... */
-+ - ((u8*)w_hdr - (u8*)rxbuf) /* minus space before 802.11 frame */
-+ - WLAN_HDR_A3_LEN; /* minus 802.11 header */
-+
-+ /* setup some vars for convenience */
-+ fc = w_hdr->fc;
-+ switch (WF_FC_FROMTODSi & fc) {
-+ case 0:
-+ daddr = w_hdr->a1;
-+ saddr = w_hdr->a2;
-+ break;
-+ case WF_FC_FROMDSi:
-+ daddr = w_hdr->a1;
-+ saddr = w_hdr->a3;
-+ break;
-+ case WF_FC_TODSi:
-+ daddr = w_hdr->a3;
-+ saddr = w_hdr->a2;
-+ break;
-+ default: /* WF_FC_FROMTODSi */
-+ payload_offset += (WLAN_HDR_A4_LEN - WLAN_HDR_A3_LEN);
-+ payload_length -= (WLAN_HDR_A4_LEN - WLAN_HDR_A3_LEN);
-+ daddr = w_hdr->a3;
-+ saddr = w_hdr->a4;
-+ }
-+
-+ if ((WF_FC_ISWEPi & fc) && IS_ACX100(adev)) {
-+ /* chop off the IV+ICV WEP header and footer */
-+ log(L_DATA|L_DEBUG, "rx: WEP packet, "
-+ "chopping off IV and ICV\n");
-+ payload_offset += WLAN_WEP_IV_LEN;
-+ payload_length -= WLAN_WEP_IV_LEN + WLAN_WEP_ICV_LEN;
-+ }
-+
-+ if (unlikely(payload_length < 0)) {
-+ printk("%s: rx frame too short, ignored\n", adev->ndev->name);
-+ goto ret_null;
-+ }
-+
-+ e_hdr = (wlan_ethhdr_t*) ((u8*) w_hdr + payload_offset);
-+ e_llc = (wlan_llc_t*) e_hdr;
-+ e_snap = (wlan_snap_t*) (e_llc + 1);
-+ mtu = adev->ndev->mtu;
-+ e_payload = (u8*) (e_snap + 1);
-+
-+ log(L_DATA, "rx: payload_offset %d, payload_length %d\n",
-+ payload_offset, payload_length);
-+ log(L_XFER|L_DATA,
-+ "rx: frame info: llc=%02X%02X%02X "
-+ "snap.oui=%02X%02X%02X snap.type=%04X\n",
-+ e_llc->dsap, e_llc->ssap, e_llc->ctl,
-+ e_snap->oui[0], e_snap->oui[1], e_snap->oui[2],
-+ ntohs(e_snap->type));
-+
-+ /* Test for the various encodings */
-+ if ((payload_length >= sizeof(wlan_ethhdr_t))
-+ && ((e_llc->dsap != 0xaa) || (e_llc->ssap != 0xaa))
-+ && ( (mac_is_equal(daddr, e_hdr->daddr))
-+ || (mac_is_equal(saddr, e_hdr->saddr))
-+ )
-+ ) {
-+ /* 802.3 Encapsulated: */
-+ /* wlan frame body contains complete eth frame (header+body) */
-+ log(L_DEBUG|L_DATA, "rx: 802.3 ENCAP len=%d\n", payload_length);
-+
-+ if (unlikely(payload_length > (mtu + ETH_HLEN))) {
-+ printk("%s: rx: ENCAP frame too large (%d > %d)\n",
-+ adev->ndev->name,
-+ payload_length, mtu + ETH_HLEN);
-+ goto ret_null;
-+ }
-+
-+ /* allocate space and setup host buffer */
-+ buflen = payload_length;
-+ /* Attempt to align IP header (14 bytes eth header + 2 = 16) */
-+ skb = dev_alloc_skb(buflen + 2);
-+ if (unlikely(!skb))
-+ goto no_skb;
-+ skb_reserve(skb, 2);
-+ skb_put(skb, buflen); /* make room */
-+
-+ /* now copy the data from the 80211 frame */
-+ memcpy(skb->data, e_hdr, payload_length);
-+
-+ } else if ( (payload_length >= sizeof(wlan_llc_t)+sizeof(wlan_snap_t))
-+ && llc_is_snap(e_llc) ) {
-+ /* wlan frame body contains: AA AA 03 ... (it's a SNAP) */
-+
-+ if ( !oui_is_rfc1042(e_snap)
-+ || (proto_is_stt(ieee2host16(e_snap->type)) /* && (ethconv == WLAN_ETHCONV_8021h) */)) {
-+ log(L_DEBUG|L_DATA, "rx: SNAP+RFC1042 len=%d\n", payload_length);
-+ /* wlan frame body contains: AA AA 03 !(00 00 00) ... -or- */
-+ /* wlan frame body contains: AA AA 03 00 00 00 0x80f3 ... */
-+ /* build eth hdr, type = len, copy AA AA 03... as eth body */
-+ /* it's a SNAP + RFC1042 frame && protocol is in STT */
-+
-+ if (unlikely(payload_length > mtu)) {
-+ printk("%s: rx: SNAP frame too large (%d > %d)\n",
-+ adev->ndev->name,
-+ payload_length, mtu);
-+ goto ret_null;
-+ }
-+
-+ /* allocate space and setup host buffer */
-+ buflen = payload_length + ETH_HLEN;
-+ skb = dev_alloc_skb(buflen + 2);
-+ if (unlikely(!skb))
-+ goto no_skb;
-+ skb_reserve(skb, 2);
-+ skb_put(skb, buflen); /* make room */
-+
-+ /* create 802.3 header */
-+ e_hdr = (wlan_ethhdr_t*) skb->data;
-+ MAC_COPY(e_hdr->daddr, daddr);
-+ MAC_COPY(e_hdr->saddr, saddr);
-+ e_hdr->type = htons(payload_length);
-+
-+ /* Now copy the data from the 80211 frame.
-+ Make room in front for the eth header, and keep the
-+ llc and snap from the 802.11 payload */
-+ memcpy(skb->data + ETH_HLEN,
-+ e_llc, payload_length);
-+
-+ } else {
-+ /* wlan frame body contains: AA AA 03 00 00 00 [type] [tail] */
-+ /* build eth hdr, type=[type], copy [tail] as eth body */
-+ log(L_DEBUG|L_DATA, "rx: 802.1h/RFC1042 len=%d\n",
-+ payload_length);
-+ /* it's an 802.1h frame (an RFC1042 && protocol is not in STT) */
-+ /* build a DIXII + RFC894 */
-+
-+ payload_length -= sizeof(wlan_llc_t) + sizeof(wlan_snap_t);
-+ if (unlikely(payload_length > mtu)) {
-+ printk("%s: rx: DIXII frame too large (%d > %d)\n",
-+ adev->ndev->name,
-+ payload_length, mtu);
-+ goto ret_null;
-+ }
-+
-+ /* allocate space and setup host buffer */
-+ buflen = payload_length + ETH_HLEN;
-+ skb = dev_alloc_skb(buflen + 2);
-+ if (unlikely(!skb))
-+ goto no_skb;
-+ skb_reserve(skb, 2);
-+ skb_put(skb, buflen); /* make room */
-+
-+ /* create 802.3 header */
-+ e_hdr = (wlan_ethhdr_t *) skb->data;
-+ MAC_COPY(e_hdr->daddr, daddr);
-+ MAC_COPY(e_hdr->saddr, saddr);
-+ e_hdr->type = e_snap->type;
-+
-+ /* Now copy the data from the 80211 frame.
-+ Make room in front for the eth header, and cut off the
-+ llc and snap from the 802.11 payload */
-+ memcpy(skb->data + ETH_HLEN,
-+ e_payload, payload_length);
-+ }
-+
-+ } else {
-+ log(L_DEBUG|L_DATA, "rx: NON-ENCAP len=%d\n", payload_length);
-+ /* build eth hdr, type=len, copy wlan body as eth body */
-+ /* any NON-ENCAP */
-+ /* it's a generic 80211+LLC or IPX 'Raw 802.3' */
-+ /* build an 802.3 frame */
-+
-+ if (unlikely(payload_length > mtu)) {
-+ printk("%s: rx: OTHER frame too large (%d > %d)\n",
-+ adev->ndev->name, payload_length, mtu);
-+ goto ret_null;
-+ }
-+
-+ /* allocate space and setup host buffer */
-+ buflen = payload_length + ETH_HLEN;
-+ skb = dev_alloc_skb(buflen + 2);
-+ if (unlikely(!skb))
-+ goto no_skb;
-+ skb_reserve(skb, 2);
-+ skb_put(skb, buflen); /* make room */
-+
-+ /* set up the 802.3 header */
-+ e_hdr = (wlan_ethhdr_t *) skb->data;
-+ MAC_COPY(e_hdr->daddr, daddr);
-+ MAC_COPY(e_hdr->saddr, saddr);
-+ e_hdr->type = htons(payload_length);
-+
-+ /* now copy the data from the 80211 frame */
-+ memcpy(skb->data + ETH_HLEN, e_llc, payload_length);
-+ }
-+
-+ skb->dev = adev->ndev;
-+ skb->protocol = eth_type_trans(skb, adev->ndev);
-+
-+#ifdef DEBUG_CONVERT
-+ if (acx_debug & L_DATA) {
-+ int len = RXBUF_BYTES_RCVD(adev, rxbuf);
-+ printk("p802.11 frame [%d]: ", len);
-+ acx_dump_bytes(w_hdr, len);
-+ printk("eth frame [%d]: ", skb->len);
-+ acx_dump_bytes(skb->data, skb->len);
-+ }
-+#endif
-+
-+ FN_EXIT0;
-+ return skb;
-+
-+no_skb:
-+ printk("%s: rx: no memory for skb (%d bytes)\n",
-+ adev->ndev->name, buflen + 2);
-+ret_null:
-+ FN_EXIT1((int)NULL);
-+ return NULL;
-+}
-Index: linux-2.6.22/drivers/net/wireless/acx/cs.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/cs.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,5703 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+**
-+** Slave memory interface support:
-+**
-+** Todd Blumer - SDG Systems
-+** Bill Reese - HP
-+** Eric McCorkle - Shadowsun
-+**
-+** CF support, (c) Fabrice Crohas, Paul Sokolovsky
-+*/
-+#define ACX_MEM 1
-+
-+/*
-+ * non-zero makes it dump the ACX memory to the console then
-+ * panic when you cat /proc/driver/acx_wlan0_diag
-+ */
-+#define DUMP_MEM_DEFINED 1
-+
-+#define DUMP_MEM_DURING_DIAG 0
-+#define DUMP_IF_SLOW 0
-+
-+#define PATCH_AROUND_BAD_SPOTS 1
-+#define HX4700_FIRMWARE_CHECKSUM 0x0036862e
-+#define HX4700_ALTERNATE_FIRMWARE_CHECKSUM 0x00368a75
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+
-+/* Linux 2.6.18+ uses <linux/utsrelease.h> */
-+#ifndef UTS_RELEASE
-+#include <linux/utsrelease.h>
-+#endif
-+
-+#include <linux/compiler.h> /* required for Lx 2.6.8 ?? */
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/sched.h>
-+#include <linux/types.h>
-+#include <linux/skbuff.h>
-+#include <linux/slab.h>
-+#include <linux/if_arp.h>
-+#include <linux/irq.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+#include <linux/netdevice.h>
-+#include <linux/ioport.h>
-+#include <linux/pci.h>
-+#include <linux/platform_device.h>
-+#include <linux/pm.h>
-+#include <linux/vmalloc.h>
-+#include <linux/delay.h>
-+#include <linux/workqueue.h>
-+#include <linux/inetdevice.h>
-+
-+#define PCMCIA_DEBUG 1
-+
-+/*
-+ All the PCMCIA modules use PCMCIA_DEBUG to control debugging. If
-+ you do not define PCMCIA_DEBUG at all, all the debug code will be
-+ left out. If you compile with PCMCIA_DEBUG=0, the debug code will
-+ be present but disabled -- but it can then be enabled for specific
-+ modules at load time with a 'pc_debug=#' option to insmod.
-+
-+*/
-+#include <pcmcia/cs_types.h>
-+#include <pcmcia/cs.h>
-+#include <pcmcia/cistpl.h>
-+#include <pcmcia/cisreg.h>
-+#include <pcmcia/ds.h>
-+#include "acx.h"
-+#include "acx_hw.h"
-+
-+#ifdef PCMCIA_DEBUG
-+static int pc_debug = PCMCIA_DEBUG;
-+module_param(pc_debug, int, 0);
-+static char *version = "$Revision: 1.10 $";
-+#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args);
-+#else
-+#define DEBUG(n, args...)
-+#endif
-+
-+
-+static win_req_t memwin;
-+
-+typedef struct local_info_t {
-+ dev_node_t node;
-+ struct net_device *ndev;
-+} local_info_t;
-+
-+static struct net_device *resume_ndev;
-+
-+
-+/***********************************************************************
-+*/
-+
-+#define CARD_EEPROM_ID_SIZE 6
-+
-+#include <asm/io.h>
-+
-+#define REG_ACX_VENDOR_ID 0x900
-+/*
-+ * This is the vendor id on the HX4700, anyway
-+ */
-+#define ACX_VENDOR_ID 0x8400104c
-+
-+typedef enum {
-+ ACX_SOFT_RESET = 0,
-+
-+ ACX_SLV_REG_ADDR,
-+ ACX_SLV_REG_DATA,
-+ ACX_SLV_REG_ADATA,
-+
-+ ACX_SLV_MEM_CP,
-+ ACX_SLV_MEM_ADDR,
-+ ACX_SLV_MEM_DATA,
-+ ACX_SLV_MEM_CTL,
-+} acxreg_t;
-+
-+/***********************************************************************
-+*/
-+static void acxmem_i_tx_timeout(struct net_device *ndev);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id);
-+#else
-+static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-+#endif
-+static void acxmem_i_set_multicast_list(struct net_device *ndev);
-+
-+static int acxmem_e_open(struct net_device *ndev);
-+static int acxmem_e_close(struct net_device *ndev);
-+static void acxmem_s_up(struct net_device *ndev);
-+static void acxmem_s_down(struct net_device *ndev);
-+
-+static void dump_acxmem (acx_device_t *adev, u32 start, int length);
-+static int acxmem_complete_hw_reset (acx_device_t *adev);
-+static void acxmem_s_delete_dma_regions(acx_device_t *adev);
-+
-+static int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+acxmem_e_suspend( struct net_device *ndev, pm_message_t state);
-+#else
-+acxmem_e_suspend( struct net_device *ndev, u32 state);
-+#endif
-+static void
-+fw_resumer(struct work_struct *notused);
-+//fw_resumer( void *data );
-+
-+static int acx_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)
-+{
-+ struct net_device *ndev = ptr;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ /*
-+ * Upper level ioctl() handlers send a NETDEV_CHANGEADDR if the MAC address changes.
-+ */
-+
-+ if (NETDEV_CHANGEADDR == event) {
-+ /*
-+ * the upper layers put the new MAC address in ndev->dev_addr; we just copy
-+ * it over and update the ACX with it.
-+ */
-+ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr);
-+ adev->set_mask |= GETSET_STATION_ID;
-+ acx_s_update_card_settings (adev);
-+ }
-+
-+ return 0;
-+}
-+
-+static struct notifier_block acx_netdev_notifier = {
-+ .notifier_call = acx_netdev_event,
-+};
-+
-+/***********************************************************************
-+** Register access
-+*/
-+
-+/* Pick one */
-+/* #define INLINE_IO static */
-+#define INLINE_IO static inline
-+
-+INLINE_IO u32
-+read_id_register (acx_device_t *adev)
-+{
-+ writel (0x24, &adev->iobase[ACX_SLV_REG_ADDR]);
-+ return readl (&adev->iobase[ACX_SLV_REG_DATA]);
-+}
-+
-+INLINE_IO u32
-+read_reg32(acx_device_t *adev, unsigned int offset)
-+{
-+ u32 val;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ return readl(((u8*)adev->iobase) + addr);
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ val = readl( &adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return val;
-+}
-+
-+INLINE_IO u16
-+read_reg16(acx_device_t *adev, unsigned int offset)
-+{
-+ u16 lo;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ return readw(((u8 *) adev->iobase) + addr);
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ lo = readw( (u16 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return lo;
-+}
-+
-+INLINE_IO u8
-+read_reg8(acx_device_t *adev, unsigned int offset)
-+{
-+ u8 lo;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20)
-+ return readb(((u8 *)adev->iobase) + addr);
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ lo = readw( (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return (u8)lo;
-+}
-+
-+INLINE_IO void
-+write_reg32(acx_device_t *adev, unsigned int offset, u32 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writel(val, ((u8*)adev->iobase) + addr);
-+ return;
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writel( val, &adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+INLINE_IO void
-+write_reg16(acx_device_t *adev, unsigned int offset, u16 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writew(val, ((u8 *)adev->iobase) + addr);
-+ return;
-+ }
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writew( val, (u16 *) &adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+INLINE_IO void
-+write_reg8(acx_device_t *adev, unsigned int offset, u8 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writeb(val, ((u8 *) adev->iobase) + addr);
-+ return;
-+ }
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writeb( val, (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+/* Handle PCI posting properly:
-+ * Make sure that writes reach the adapter in case they require to be executed
-+ * *before* the next write, by reading a random (and safely accessible) register.
-+ * This call has to be made if there is no read following (which would flush the data
-+ * to the adapter), yet the written data has to reach the adapter immediately. */
-+INLINE_IO void
-+write_flush(acx_device_t *adev)
-+{
-+ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */
-+ /* faster version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should also be safe): */
-+ (void) readl(adev->iobase);
-+}
-+
-+INLINE_IO void
-+set_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
-+ u32 tmp;
-+
-+ tmp = read_reg32 (adev, offset);
-+ tmp = tmp | bits;
-+ write_reg32 (adev, offset, tmp);
-+ write_flush (adev);
-+}
-+
-+INLINE_IO void
-+clear_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
-+ u32 tmp;
-+
-+ tmp = read_reg32 (adev, offset);
-+ tmp = tmp & ~bits;
-+ write_reg32 (adev, offset, tmp);
-+ write_flush (adev);
-+}
-+
-+/*
-+ * Copy from PXA memory to the ACX memory. This assumes both the PXA and ACX
-+ * addresses are 32 bit aligned. Count is in bytes.
-+ */
-+INLINE_IO void
-+write_slavemem32 (acx_device_t *adev, u32 slave_address, u32 val)
-+{
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, val);
-+}
-+
-+INLINE_IO u32
-+read_slavemem32 (acx_device_t *adev, u32 slave_address)
-+{
-+ u32 val;
-+
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
-+ udelay (10);
-+ val = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+
-+ return val;
-+}
-+
-+INLINE_IO void
-+write_slavemem8 (acx_device_t *adev, u32 slave_address, u8 val)
-+{
-+ u32 data;
-+ u32 base;
-+ int offset;
-+
-+ /*
-+ * Get the word containing the target address and the byte offset in that word.
-+ */
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+ data &= ~(0xff << offset);
-+ data |= val << offset;
-+ write_slavemem32 (adev, base, data);
-+}
-+
-+INLINE_IO u8
-+read_slavemem8 (acx_device_t *adev, u32 slave_address)
-+{
-+ u8 val;
-+ u32 base;
-+ u32 data;
-+ int offset;
-+
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+
-+ val = (data >> offset) & 0xff;
-+
-+ return val;
-+}
-+
-+/*
-+ * doesn't split across word boundaries
-+ */
-+INLINE_IO void
-+write_slavemem16 (acx_device_t *adev, u32 slave_address, u16 val)
-+{
-+ u32 data;
-+ u32 base;
-+ int offset;
-+
-+ /*
-+ * Get the word containing the target address and the byte offset in that word.
-+ */
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+ data &= ~(0xffff << offset);
-+ data |= val << offset;
-+ write_slavemem32 (adev, base, data);
-+}
-+
-+/*
-+ * doesn't split across word boundaries
-+ */
-+INLINE_IO u16
-+read_slavemem16 (acx_device_t *adev, u32 slave_address)
-+{
-+ u16 val;
-+ u32 base;
-+ u32 data;
-+ int offset;
-+
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+
-+ val = (data >> offset) & 0xffff;
-+
-+ return val;
-+}
-+
-+/*
-+ * Copy from slave memory
-+ *
-+ * TODO - rewrite using address autoincrement, handle partial words
-+ */
-+void
-+copy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count) {
-+ u32 tmp = 0;
-+ u8 *ptmp = (u8 *) &tmp;
-+
-+ /*
-+ * Right now I'm making the assumption that the destination is aligned, but
-+ * I'd better check.
-+ */
-+ if ((u32) destination & 3) {
-+ printk ("acx copy_from_slavemem: warning! destination not word-aligned!\n");
-+ }
-+
-+ while (count >= 4) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
-+ udelay (10);
-+ *((u32 *) destination) = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ count -= 4;
-+ source += 4;
-+ destination += 4;
-+ }
-+
-+ /*
-+ * If the word reads above didn't satisfy the count, read one more word
-+ * and transfer a byte at a time until the request is satisfied.
-+ */
-+ if (count) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
-+ udelay (10);
-+ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ while (count--) {
-+ *destination++ = *ptmp++;
-+ }
-+ }
-+}
-+
-+/*
-+ * Copy to slave memory
-+ *
-+ * TODO - rewrite using autoincrement, handle partial words
-+ */
-+void
-+copy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
-+{
-+ u32 tmp = 0;
-+ u8* ptmp = (u8 *) &tmp;
-+ static u8 src[512]; /* make static to avoid huge stack objects */
-+
-+ /*
-+ * For now, make sure the source is word-aligned by copying it to a word-aligned
-+ * buffer. Someday rewrite to avoid the extra copy.
-+ */
-+ if (count > sizeof (src)) {
-+ printk ("acx copy_to_slavemem: Warning! buffer overflow!\n");
-+ count = sizeof (src);
-+ }
-+ memcpy (src, source, count);
-+ source = src;
-+
-+ while (count >= 4) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, *((u32 *) source));
-+ count -= 4;
-+ source += 4;
-+ destination += 4;
-+ }
-+
-+ /*
-+ * If there are leftovers read the next word from the acx and merge in
-+ * what they want to write.
-+ */
-+ if (count) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ while (count--) {
-+ *ptmp++ = *source++;
-+ }
-+ /*
-+ * reset address in case we're currently in auto-increment mode
-+ */
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, tmp);
-+ udelay (10);
-+ }
-+
-+}
-+
-+/*
-+ * Block copy to slave buffers using memory block chain mode. Copies to the ACX
-+ * transmit buffer structure with minimal intervention on our part.
-+ * Interrupts should be disabled when calling this.
-+ */
-+void
-+chaincopy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
-+{
-+ u32 val;
-+ u32 *data = (u32 *) source;
-+ static u8 aligned_source[WLAN_A4FR_MAXLEN_WEP_FCS];
-+
-+ /*
-+ * Warn if the pointers don't look right. Destination must fit in [23:5] with
-+ * zero elsewhere and source should be 32 bit aligned.
-+ * This should never happen since we're in control of both, but I want to know about
-+ * it if it does.
-+ */
-+ if ((destination & 0x00ffffe0) != destination) {
-+ printk ("acx chaincopy: destination block 0x%04x not aligned!\n", destination);
-+ }
-+ if (count > sizeof aligned_source) {
-+ printk( KERN_ERR "chaincopy_to_slavemem overflow!\n" );
-+ count = sizeof aligned_source;
-+ }
-+ if ((u32) source & 3) {
-+ memcpy (aligned_source, source, count);
-+ data = (u32 *) aligned_source;
-+ }
-+
-+ /*
-+ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
-+ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
-+ */
-+ val = 2 << 16 | 1 << 2;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
-+
-+ /*
-+ * SLV_MEM_CP[23:5] = start of 1st block
-+ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
-+ */
-+ val = destination & 0x00ffffe0;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
-+
-+ /*
-+ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
-+ */
-+ val = (destination & 0x00ffffe0) + (1<<2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
-+
-+ /*
-+ * Write the data to the slave data register, rounding up to the end
-+ * of the word containing the last byte (hence the > 0)
-+ */
-+ while (count > 0) {
-+ writel (*data++, &adev->iobase[ACX_SLV_MEM_DATA]);
-+ count -= 4;
-+ }
-+}
-+
-+
-+/*
-+ * Block copy from slave buffers using memory block chain mode. Copies from the ACX
-+ * receive buffer structures with minimal intervention on our part.
-+ * Interrupts should be disabled when calling this.
-+ */
-+void
-+chaincopy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count)
-+{
-+ u32 val;
-+ u32 *data = (u32 *) destination;
-+ static u8 aligned_destination[WLAN_A4FR_MAXLEN_WEP_FCS];
-+ int saved_count = count;
-+
-+ /*
-+ * Warn if the pointers don't look right. Destination must fit in [23:5] with
-+ * zero elsewhere and source should be 32 bit aligned.
-+ * Turns out the network stack sends unaligned things, so fix them before
-+ * copying to the ACX.
-+ */
-+ if ((source & 0x00ffffe0) != source) {
-+ printk ("acx chaincopy: source block 0x%04x not aligned!\n", source);
-+ dump_acxmem (adev, 0, 0x10000);
-+ }
-+ if ((u32) destination & 3) {
-+ //printk ("acx chaincopy: data destination not word aligned!\n");
-+ data = (u32 *) aligned_destination;
-+ if (count > sizeof aligned_destination) {
-+ printk( KERN_ERR "chaincopy_from_slavemem overflow!\n" );
-+ count = sizeof aligned_destination;
-+ }
-+ }
-+
-+ /*
-+ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
-+ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
-+ */
-+ val = (2 << 16) | (1 << 2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
-+
-+ /*
-+ * SLV_MEM_CP[23:5] = start of 1st block
-+ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
-+ */
-+ val = source & 0x00ffffe0;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
-+
-+ /*
-+ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
-+ */
-+ val = (source & 0x00ffffe0) + (1<<2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
-+
-+ /*
-+ * Read the data from the slave data register, rounding up to the end
-+ * of the word containing the last byte (hence the > 0)
-+ */
-+ while (count > 0) {
-+ *data++ = readl (&adev->iobase[ACX_SLV_MEM_DATA]);
-+ count -= 4;
-+ }
-+
-+ /*
-+ * If the destination wasn't aligned, we would have saved it in
-+ * the aligned buffer, so copy it where it should go.
-+ */
-+ if ((u32) destination & 3) {
-+ memcpy (destination, aligned_destination, saved_count);
-+ }
-+}
-+
-+char
-+printable (char c)
-+{
-+ return ((c >= 20) && (c < 127)) ? c : '.';
-+}
-+
-+#if DUMP_MEM_DEFINED > 0
-+static void
-+dump_acxmem (acx_device_t *adev, u32 start, int length)
-+{
-+ int i;
-+ u8 buf[16];
-+
-+ while (length > 0) {
-+ printk ("%04x ", start);
-+ copy_from_slavemem (adev, buf, start, 16);
-+ for (i = 0; (i < 16) && (i < length); i++) {
-+ printk ("%02x ", buf[i]);
-+ }
-+ for (i = 0; (i < 16) && (i < length); i++) {
-+ printk ("%c", printable (buf[i]));
-+ }
-+ printk ("\n");
-+ start += 16;
-+ length -= 16;
-+ }
-+}
-+#endif
-+
-+static void
-+enable_acx_irq(acx_device_t *adev);
-+static void
-+disable_acx_irq(acx_device_t *adev);
-+
-+/*
-+ * Return an acx pointer to the next transmit data block.
-+ */
-+u32
-+allocate_acx_txbuf_space (acx_device_t *adev, int count) {
-+ u32 block, next, last_block;
-+ int blocks_needed;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&adev->txbuf_lock, flags);
-+ /*
-+ * Take 4 off the memory block size to account for the reserved word at the start of
-+ * the block.
-+ */
-+ blocks_needed = count / (adev->memblocksize - 4);
-+ if (count % (adev->memblocksize - 4))
-+ blocks_needed++;
-+
-+ if (blocks_needed <= adev->acx_txbuf_blocks_free) {
-+ /*
-+ * Take blocks at the head of the free list.
-+ */
-+ last_block = block = adev->acx_txbuf_free;
-+
-+ /*
-+ * Follow block pointers through the requested number of blocks both to
-+ * find the new head of the free list and to set the flags for the blocks
-+ * appropriately.
-+ */
-+ while (blocks_needed--) {
-+ /*
-+ * Keep track of the last block of the allocation
-+ */
-+ last_block = adev->acx_txbuf_free;
-+
-+ /*
-+ * Make sure the end control flag is not set.
-+ */
-+ next = read_slavemem32 (adev, adev->acx_txbuf_free) & 0x7ffff;
-+ write_slavemem32 (adev, adev->acx_txbuf_free, next);
-+
-+ /*
-+ * Update the new head of the free list
-+ */
-+ adev->acx_txbuf_free = next << 5;
-+ adev->acx_txbuf_blocks_free--;
-+
-+ }
-+
-+ /*
-+ * Flag the last block both by clearing out the next pointer
-+ * and marking the control field.
-+ */
-+ write_slavemem32 (adev, last_block, 0x02000000);
-+
-+ /*
-+ * If we're out of buffers make sure the free list pointer is NULL
-+ */
-+ if (!adev->acx_txbuf_blocks_free) {
-+ adev->acx_txbuf_free = 0;
-+ }
-+ }
-+ else {
-+ block = 0;
-+ }
-+ spin_unlock_irqrestore (&adev->txbuf_lock, flags);
-+ return block;
-+}
-+
-+/*
-+ * Return buffer space back to the pool by following the next pointers until we find
-+ * the block marked as the end. Point the last block to the head of the free list,
-+ * then update the head of the free list to point to the newly freed memory.
-+ * This routine gets called in interrupt context, so it shouldn't block to protect
-+ * the integrity of the linked list. The ISR already holds the lock.
-+ */
-+void
-+reclaim_acx_txbuf_space (acx_device_t *adev, u32 blockptr) {
-+ u32 cur, last, next;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave (&adev->txbuf_lock, flags);
-+ if ((blockptr >= adev->acx_txbuf_start) &&
-+ (blockptr <= adev->acx_txbuf_start +
-+ (adev->acx_txbuf_numblocks - 1) * adev->memblocksize)) {
-+ cur = blockptr;
-+ do {
-+ last = cur;
-+ next = read_slavemem32 (adev, cur);
-+
-+ /*
-+ * Advance to the next block in this allocation
-+ */
-+ cur = (next & 0x7ffff) << 5;
-+
-+ /*
-+ * This block now counts as free.
-+ */
-+ adev->acx_txbuf_blocks_free++;
-+ } while (!(next & 0x02000000));
-+
-+ /*
-+ * last now points to the last block of that allocation. Update the pointer
-+ * in that block to point to the free list and reset the free list to the
-+ * first block of the free call. If there were no free blocks, make sure
-+ * the new end of the list marks itself as truly the end.
-+ */
-+ if (adev->acx_txbuf_free) {
-+ write_slavemem32 (adev, last, adev->acx_txbuf_free >> 5);
-+ }
-+ else {
-+ write_slavemem32 (adev, last, 0x02000000);
-+ }
-+ adev->acx_txbuf_free = blockptr;
-+ }
-+ spin_unlock_irqrestore(&adev->txbuf_lock, flags);
-+}
-+
-+/*
-+ * Initialize the pieces managing the transmit buffer pool on the ACX. The transmit
-+ * buffer is a circular queue with one 32 bit word reserved at the beginning of each
-+ * block. The upper 13 bits are a control field, of which only 0x02000000 has any
-+ * meaning. The lower 19 bits are the address of the next block divided by 32.
-+ */
-+void
-+init_acx_txbuf (acx_device_t *adev) {
-+
-+ /*
-+ * acx100_s_init_memory_pools set up txbuf_start and txbuf_numblocks for us.
-+ * All we need to do is reset the rest of the bookeeping.
-+ */
-+
-+ adev->acx_txbuf_free = adev->acx_txbuf_start;
-+ adev->acx_txbuf_blocks_free = adev->acx_txbuf_numblocks;
-+
-+ /*
-+ * Initialization leaves the last transmit pool block without a pointer back to
-+ * the head of the list, but marked as the end of the list. That's how we want
-+ * to see it, too, so leave it alone. This is only ever called after a firmware
-+ * reset, so the ACX memory is in the state we want.
-+ */
-+
-+}
-+
-+INLINE_IO int
-+adev_present(acx_device_t *adev)
-+{
-+ /* fast version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should be safe): */
-+ return readl(adev->iobase) != 0xffffffff;
-+}
-+
-+/***********************************************************************
-+*/
-+static inline txdesc_t*
-+get_txdesc(acx_device_t *adev, int index)
-+{
-+ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size);
-+}
-+
-+static inline txdesc_t*
-+advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc)
-+{
-+ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size);
-+}
-+
-+static txhostdesc_t*
-+get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return &adev->txhostdesc_start[index*2];
-+}
-+
-+static inline client_t*
-+get_txc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return adev->txc[index];
-+}
-+
-+static inline u16
-+get_txr(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ index /= adev->txdesc_size;
-+ return adev->txr[index];
-+}
-+
-+static inline void
-+put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ adev->txc[index] = c;
-+ adev->txr[index] = r111;
-+}
-+
-+
-+/***********************************************************************
-+** EEPROM and PHY read/write helpers
-+*/
-+/***********************************************************************
-+** acxmem_read_eeprom_byte
-+**
-+** Function called to read an octet in the EEPROM.
-+**
-+** This function is used by acxmem_e_probe to check if the
-+** connected card is a legal one or not.
-+**
-+** Arguments:
-+** adev ptr to acx_device structure
-+** addr address to read in the EEPROM
-+** charbuf ptr to a char. This is where the read octet
-+** will be stored
-+*/
-+int
-+acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf)
-+{
-+ int result;
-+ int count;
-+
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for EEPROM read\n",
-+ adev->ndev->name);
-+ result = NOT_OK;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA);
-+ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf);
-+ result = OK;
-+
-+fail:
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** We don't lock hw accesses here since we never r/w eeprom in IRQ
-+** Note: this function sleeps only because of GFP_KERNEL alloc
-+*/
-+#ifdef UNUSED
-+int
-+acxmem_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf)
-+{
-+ u8 *data_verify = NULL;
-+ unsigned long flags;
-+ int count, i;
-+ int result = NOT_OK;
-+ u16 gpio_orig;
-+
-+ printk("acx: WARNING! I would write to EEPROM now. "
-+ "Since I really DON'T want to unless you know "
-+ "what you're doing (THIS CODE WILL PROBABLY "
-+ "NOT WORK YET!), I will abort that now. And "
-+ "definitely make sure to make a "
-+ "/proc/driver/acx_wlan0_eeprom backup copy first!!! "
-+ "(the EEPROM content includes the PCI config header!! "
-+ "If you kill important stuff, then you WILL "
-+ "get in trouble and people DID get in trouble already)\n");
-+ return OK;
-+
-+ FN_ENTER;
-+
-+ data_verify = kmalloc(len, GFP_KERNEL);
-+ if (!data_verify) {
-+ goto end;
-+ }
-+
-+ /* first we need to enable the OE (EEPROM Output Enable) GPIO line
-+ * to be able to write to the EEPROM.
-+ * NOTE: an EEPROM writing success has been reported,
-+ * but you probably have to modify GPIO_OUT, too,
-+ * and you probably need to activate a different GPIO
-+ * line instead! */
-+ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE);
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1);
-+ write_flush(adev);
-+
-+ /* ok, now start writing the data out */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i));
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 1);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("WARNING, DANGER!!! "
-+ "Timeout waiting for EEPROM write\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+ }
-+
-+ /* disable EEPROM writing */
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig);
-+ write_flush(adev);
-+
-+ /* now start a verification run */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("timeout waiting for EEPROM read\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+
-+ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA);
-+ }
-+
-+ if (0 == memcmp(charbuf, data_verify, len))
-+ result = OK; /* read data matches, success */
-+
-+end:
-+ kfree(data_verify);
-+ FN_EXIT1(result);
-+ return result;
-+}
-+#endif /* UNUSED */
-+
-+
-+/***********************************************************************
-+** acxmem_s_read_phy_reg
-+**
-+** Messing with rx/tx disabling and enabling here
-+** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic
-+*/
-+int
-+acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
-+{
-+ int result = NOT_OK;
-+ int count;
-+
-+ FN_ENTER;
-+
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for phy read\n",
-+ adev->ndev->name);
-+ *charbuf = 0;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ log(L_DEBUG, "count was %u\n", count);
-+ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA);
-+
-+ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg);
-+ result = OK;
-+ goto fail; /* silence compiler warning */
-+fail:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
-+{
-+ int count;
-+ FN_ENTER;
-+
-+ /* mprusko said that 32bit accesses result in distorted sensitivity
-+ * on his card. Unconfirmed, looks like it's not true (most likely since we
-+ * now properly flush writes). */
-+ write_reg32(adev, IO_ACX_PHY_DATA, value);
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 1);
-+ write_flush(adev);
-+
-+ count = 0xffff;
-+ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for phy read\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg);
-+ fail:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+#define NO_AUTO_INCREMENT 1
-+
-+/***********************************************************************
-+** acxmem_s_write_fw
-+**
-+** Write the firmware image into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** 1 firmware image corrupted
-+** 0 success
-+*/
-+static int
-+acxmem_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset)
-+{
-+ int len, size, checkMismatch = -1;
-+ u32 sum, v32, tmp, id;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+ write_flush(adev);
-+#endif
-+#endif
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ sum += p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+ len += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+ write_flush(adev);
-+#endif
-+ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32);
-+ write_flush(adev);
-+#endif
-+ write_slavemem32 (adev, offset + len - 4, v32);
-+
-+ id = read_id_register (adev);
-+
-+ /*
-+ * check the data written
-+ */
-+ tmp = read_slavemem32 (adev, offset + len - 4);
-+ if (checkMismatch && (tmp != v32)) {
-+ printk ("first data mismatch at 0x%08x good 0x%08x bad 0x%08x id 0x%08x\n",
-+ offset + len - 4, v32, tmp, id);
-+ checkMismatch = 0;
-+ }
-+ }
-+ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n",
-+ size, sum, le32_to_cpu(fw_image->chksum));
-+
-+ /* compare our checksum with the stored image checksum */
-+ return (sum != le32_to_cpu(fw_image->chksum));
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_validate_fw
-+**
-+** Compare the firmware image given with
-+** the firmware image written into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** NOT_OK firmware image corrupted or not correctly written
-+** OK success
-+*/
-+static int
-+acxmem_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image,
-+ u32 offset)
-+{
-+ u32 sum, v32, w32;
-+ int len, size;
-+ int result = OK;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+#endif
-+
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ p += 4;
-+ len += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+#endif
-+ udelay(10);
-+ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA);
-+#endif
-+ w32 = read_slavemem32 (adev, offset + len - 4);
-+
-+ if (unlikely(w32 != v32)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "data parts at offset %d don't match\n(0x%08X vs. 0x%08X)!\n"
-+ "I/O timing issues or defective memory, with DWL-xx0+? "
-+ "ACX_IO_WIDTH=16 may help. Please report\n",
-+ len, v32, w32);
-+ result = NOT_OK;
-+ break;
-+ }
-+
-+ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24);
-+ }
-+
-+ /* sum control verification */
-+ if (result != NOT_OK) {
-+ if (sum != le32_to_cpu(fw_image->chksum)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "checksums don't match!\n");
-+ result = NOT_OK;
-+ }
-+ }
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_upload_fw
-+**
-+** Called from acx_reset_dev
-+*/
-+static int
-+acxmem_s_upload_fw(acx_device_t *adev)
-+{
-+ firmware_image_t *fw_image = NULL;
-+ int res = NOT_OK;
-+ int try;
-+ u32 file_size;
-+ char *filename = "WLANGEN.BIN";
-+#ifdef PATCH_AROUND_BAD_SPOTS
-+ u32 offset;
-+ int i;
-+ /*
-+ * arm-linux-objdump -d patch.bin, or
-+ * od -Ax -t x4 patch.bin after finding the bounds
-+ * of the .text section with arm-linux-objdump -s patch.bin
-+ */
-+ u32 patch[] = {
-+ 0xe584c030, 0xe59fc008,
-+ 0xe92d1000, 0xe59fc004, 0xe8bd8000, 0x0000080c,
-+ 0x0000aa68, 0x605a2200, 0x2c0a689c, 0x2414d80a,
-+ 0x2f00689f, 0x1c27d007, 0x06241e7c, 0x2f000e24,
-+ 0xe000d1f6, 0x602e6018, 0x23036468, 0x480203db,
-+ 0x60ca6003, 0xbdf0750a, 0xffff0808
-+ };
-+#endif
-+
-+ FN_ENTER;
-+ /* No combined image; tell common we need the radio firmware, too */
-+ adev->need_radio_fw = 1;
-+
-+ fw_image = acx_s_read_fw(adev->dev, filename, &file_size);
-+ if (!fw_image) {
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+ }
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxmem_s_write_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (main): %d\n", res);
-+ if (OK == res) {
-+ res = acxmem_s_validate_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw "
-+ "(main): %d\n", res);
-+ }
-+
-+ if (OK == res) {
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED);
-+ break;
-+ }
-+ printk("acx: firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+#ifdef PATCH_AROUND_BAD_SPOTS
-+ /*
-+ * Only want to do this if the firmware is exactly what we expect for an
-+ * iPaq 4700; otherwise, bad things would ensue.
-+ */
-+ if ((HX4700_FIRMWARE_CHECKSUM == fw_image->chksum) ||
-+ (HX4700_ALTERNATE_FIRMWARE_CHECKSUM == fw_image->chksum)) {
-+ /*
-+ * Put the patch after the main firmware image. 0x950c contains
-+ * the ACX's idea of the end of the firmware. Use that location to
-+ * load ours (which depends on that location being 0xab58) then
-+ * update that location to point to after ours.
-+ */
-+
-+ offset = read_slavemem32 (adev, 0x950c);
-+
-+ log (L_DEBUG, "acx: patching in at 0x%04x\n", offset);
-+
-+ for (i = 0; i < sizeof(patch) / sizeof(patch[0]); i++) {
-+ write_slavemem32 (adev, offset, patch[i]);
-+ offset += sizeof(u32);
-+ }
-+
-+ /*
-+ * Patch the instruction at 0x0804 to branch to our ARM patch at 0xab58
-+ */
-+ write_slavemem32 (adev, 0x0804, 0xea000000 + (0xab58-0x0804-8)/4);
-+
-+ /*
-+ * Patch the instructions at 0x1f40 to branch to our Thumb patch at 0xab74
-+ *
-+ * 4a00 ldr r2, [pc, #0]
-+ * 4710 bx r2
-+ * .data 0xab74+1
-+ */
-+ write_slavemem32 (adev, 0x1f40, 0x47104a00);
-+ write_slavemem32 (adev, 0x1f44, 0x0000ab74+1);
-+
-+ /*
-+ * Bump the end of the firmware up to beyond our patch.
-+ */
-+ write_slavemem32 (adev, 0x950c, offset);
-+
-+ }
-+#endif
-+
-+ vfree(fw_image);
-+
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_upload_radio
-+**
-+** Uploads the appropriate radio module firmware into the card.
-+*/
-+int
-+acxmem_s_upload_radio(acx_device_t *adev)
-+{
-+ acx_ie_memmap_t mm;
-+ firmware_image_t *radio_image;
-+ acx_cmd_radioinit_t radioinit;
-+ int res = NOT_OK;
-+ int try;
-+ u32 offset;
-+ u32 size;
-+ char filename[sizeof("RADIONN.BIN")];
-+
-+ if (!adev->need_radio_fw) return OK;
-+
-+ FN_ENTER;
-+
-+ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+ offset = le32_to_cpu(mm.CodeEnd);
-+
-+ snprintf(filename, sizeof(filename), "RADIO%02x.BIN",
-+ adev->radio_type);
-+ radio_image = acx_s_read_fw(adev->dev, filename, &size);
-+ if (!radio_image) {
-+ printk("acx: can't load radio module '%s'\n", filename);
-+ goto fail;
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxmem_s_write_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res);
-+ if (OK == res) {
-+ res = acxmem_s_validate_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res);
-+ }
-+
-+ if (OK == res)
-+ break;
-+ printk("acx: radio firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
-+ radioinit.offset = cpu_to_le32(offset);
-+
-+ /* no endian conversion needed, remains in card CPU area: */
-+ radioinit.len = radio_image->size;
-+
-+ vfree(radio_image);
-+
-+ if (OK != res)
-+ goto fail;
-+
-+ /* will take a moment so let's have a big timeout */
-+ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT,
-+ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000));
-+
-+ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+
-+fail:
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+/***********************************************************************
-+** acxmem_l_reset_mac
-+**
-+** MAC will be reset
-+** Call context: reset_dev
-+*/
-+static void
-+acxmem_l_reset_mac(acx_device_t *adev)
-+{
-+ int count;
-+ FN_ENTER;
-+
-+ /* halt eCPU */
-+ set_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
-+
-+ /* now do soft reset of eCPU, set bit */
-+ set_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
-+ log(L_DEBUG, "%s: enable soft reset...\n", __func__);
-+
-+ /* Windows driver sleeps here for a while with this sequence */
-+ for (count = 0; count < 200; count++) {
-+ udelay (50);
-+ }
-+
-+ /* now clear bit again: deassert eCPU reset */
-+ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__);
-+ clear_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
-+
-+ /* now start a burst read from initial EEPROM */
-+ set_regbits (adev, IO_ACX_EE_START, 0x1);
-+
-+ /*
-+ * Windows driver sleeps here for a while with this sequence
-+ */
-+ for (count = 0; count < 200; count++) {
-+ udelay (50);
-+ }
-+
-+ /* Windows driver writes 0x10000 to register 0x808 here */
-+
-+ write_reg32 (adev, 0x808, 0x10000);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_verify_init
-+*/
-+static int
-+acxmem_s_verify_init(acx_device_t *adev)
-+{
-+ int result = NOT_OK;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ timeout = jiffies + 2*HZ;
-+ for (;;) {
-+ u32 irqstat = read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if ((irqstat != 0xFFFFFFFF) && (irqstat & HOST_INT_FCS_THRESHOLD)) {
-+ result = OK;
-+ write_reg32(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD);
-+ break;
-+ }
-+ if (time_after(jiffies, timeout))
-+ break;
-+ /* Init may take up to ~0.5 sec total */
-+ acx_s_msleep(50);
-+ }
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** A few low-level helpers
-+**
-+** Note: these functions are not protected by lock
-+** and thus are never allowed to be called from IRQ.
-+** Also they must not race with fw upload which uses same hw regs
-+*/
-+
-+/***********************************************************************
-+** acxmem_write_cmd_type_status
-+*/
-+
-+static inline void
-+acxmem_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status)
-+{
-+ write_slavemem32 (adev, (u32) adev->cmd_area, type | (status << 16));
-+ write_flush(adev);
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_read_cmd_type_status
-+*/
-+static u32
-+acxmem_read_cmd_type_status(acx_device_t *adev)
-+{
-+ u32 cmd_type, cmd_status;
-+
-+ cmd_type = read_slavemem32 (adev, (u32) adev->cmd_area);
-+
-+ cmd_status = (cmd_type >> 16);
-+ cmd_type = (u16)cmd_type;
-+
-+ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n",
-+ cmd_type, cmd_status,
-+ acx_cmd_status_str(cmd_status));
-+
-+ return cmd_status;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_reset_dev
-+**
-+** Arguments:
-+** netdevice that contains the adev variable
-+** Returns:
-+** NOT_OK on fail
-+** OK on success
-+** Side effects:
-+** device is hard reset
-+** Call context:
-+** acxmem_e_probe
-+** Comment:
-+** This resets the device using low level hardware calls
-+** as well as uploads and verifies the firmware to the card
-+*/
-+
-+static inline void
-+init_mboxes(acx_device_t *adev)
-+{
-+ u32 cmd_offs, info_offs;
-+
-+ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS);
-+ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS);
-+ adev->cmd_area = (u8*) cmd_offs;
-+ adev->info_area = (u8*) info_offs;
-+ /*
-+ log(L_DEBUG, "iobase2=%p\n"
-+ */
-+ log( L_DEBUG, "cmd_mbox_offset=%X cmd_area=%p\n"
-+ "info_mbox_offset=%X info_area=%p\n",
-+ cmd_offs, adev->cmd_area,
-+ info_offs, adev->info_area);
-+}
-+
-+
-+static inline void
-+read_eeprom_area(acx_device_t *adev)
-+{
-+#if ACX_DEBUG > 1
-+ int offs;
-+ u8 tmp;
-+
-+ for (offs = 0x8c; offs < 0xb9; offs++)
-+ acxmem_read_eeprom_byte(adev, offs, &tmp);
-+#endif
-+}
-+
-+static int
-+acxmem_s_reset_dev(acx_device_t *adev)
-+{
-+ const char* msg = "";
-+ unsigned long flags;
-+ int result = NOT_OK;
-+ u16 hardware_info;
-+ u16 ecpu_ctrl;
-+ int count;
-+ u32 tmp;
-+
-+ FN_ENTER;
-+ /*
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CP, 0);
-+ */
-+ /* reset the device to make sure the eCPU is stopped
-+ * to upload the firmware correctly */
-+
-+ acx_lock(adev, flags);
-+
-+ /* Windows driver does some funny things here */
-+ /*
-+ * clear bit 0x200 in register 0x2A0
-+ */
-+ clear_regbits (adev, 0x2A0, 0x200);
-+
-+ /*
-+ * Set bit 0x200 in ACX_GPIO_OUT
-+ */
-+ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
-+
-+ /*
-+ * read register 0x900 until its value is 0x8400104C, sleeping
-+ * in between reads if it's not immediate
-+ */
-+ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
-+ count = 500;
-+ while (count-- && (tmp != ACX_VENDOR_ID)) {
-+ mdelay (10);
-+ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
-+ }
-+
-+ /* end what Windows driver does */
-+
-+ acxmem_l_reset_mac(adev);
-+
-+ ecpu_ctrl = read_reg32(adev, IO_ACX_ECPU_CTRL) & 1;
-+ if (!ecpu_ctrl) {
-+ msg = "eCPU is already running. ";
-+ goto end_unlock;
-+ }
-+
-+#ifdef WE_DONT_NEED_THAT_DO_WE
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) {
-+ /* eCPU most likely means "embedded CPU" */
-+ msg = "eCPU did not start after boot from flash. ";
-+ goto end_unlock;
-+ }
-+
-+ /* check sense on reset flags */
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) {
-+ printk("%s: eCPU did not start after boot (SOR), "
-+ "is this fatal?\n", adev->ndev->name);
-+ }
-+#endif
-+ /* scan, if any, is stopped now, setting corresponding IRQ bit */
-+ adev->irq_status |= HOST_INT_SCAN_COMPLETE;
-+
-+ acx_unlock(adev, flags);
-+
-+ /* need to know radio type before fw load */
-+ /* Need to wait for arrival of this information in a loop,
-+ * most probably since eCPU runs some init code from EEPROM
-+ * (started burst read in reset_mac()) which also
-+ * sets the radio type ID */
-+
-+ count = 0xffff;
-+ do {
-+ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION);
-+ if (!--count) {
-+ msg = "eCPU didn't indicate radio type";
-+ goto end_fail;
-+ }
-+ cpu_relax();
-+ } while (!(hardware_info & 0xff00)); /* radio type still zero? */
-+ printk("ACX radio type 0x%02x\n", (hardware_info >> 8) & 0xff);
-+ /* printk("DEBUG: count %d\n", count); */
-+ adev->form_factor = hardware_info & 0xff;
-+ adev->radio_type = hardware_info >> 8;
-+
-+ /* load the firmware */
-+ if (OK != acxmem_s_upload_fw(adev))
-+ goto end_fail;
-+
-+ /* acx_s_msleep(10); this one really shouldn't be required */
-+
-+ /* now start eCPU by clearing bit */
-+ clear_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
-+ log(L_DEBUG, "booted eCPU up and waiting for completion...\n");
-+
-+ /* Windows driver clears bit 0x200 in register 0x2A0 here */
-+ clear_regbits (adev, 0x2A0, 0x200);
-+
-+ /* Windows driver sets bit 0x200 in ACX_GPIO_OUT here */
-+ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
-+ /* wait for eCPU bootup */
-+ if (OK != acxmem_s_verify_init(adev)) {
-+ msg = "timeout waiting for eCPU. ";
-+ goto end_fail;
-+ }
-+ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n");
-+ init_mboxes(adev);
-+ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
-+
-+ /* test that EEPROM is readable */
-+ read_eeprom_area(adev);
-+
-+ result = OK;
-+ goto end;
-+
-+/* Finish error message. Indicate which function failed */
-+end_unlock:
-+ acx_unlock(adev, flags);
-+end_fail:
-+ printk("acx: %sreset_dev() FAILED\n", msg);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_issue_cmd_timeo
-+**
-+** Sends command to fw, extract result
-+**
-+** NB: we do _not_ take lock inside, so be sure to not touch anything
-+** which may interfere with IRQ handler operation
-+**
-+** TODO: busy wait is a bit silly, so:
-+** 1) stop doing many iters - go to sleep after first
-+** 2) go to waitqueue based approach: wait, not poll!
-+*/
-+#undef FUNC
-+#define FUNC "issue_cmd"
-+
-+#if !ACX_DEBUG
-+int
-+acxmem_s_issue_cmd_timeo(
-+ acx_device_t *adev,
-+ unsigned int cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout)
-+{
-+#else
-+int
-+acxmem_s_issue_cmd_timeo_debug(
-+ acx_device_t *adev,
-+ unsigned cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout,
-+ const char* cmdstr)
-+{
-+ unsigned long start = jiffies;
-+#endif
-+ const char *devname;
-+ unsigned counter;
-+ u16 irqtype;
-+ int i, j;
-+ u8 *p;
-+ u16 cmd_status;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ devname = adev->ndev->name;
-+ if (!devname || !devname[0] || devname[4]=='%')
-+ devname = "acx";
-+
-+ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n",
-+ cmdstr, buflen, cmd_timeout,
-+ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
-+
-+ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) {
-+ printk("%s: "FUNC"(): firmware is not loaded yet, "
-+ "cannot execute commands!\n", devname);
-+ goto bad;
-+ }
-+
-+ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) {
-+ printk("input buffer (len=%u):\n", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+
-+ /* wait for firmware to become idle for our command submission */
-+ timeout = HZ/5;
-+ counter = (timeout * 1000 / HZ) - 1; /* in ms */
-+ timeout += jiffies;
-+ do {
-+ cmd_status = acxmem_read_cmd_type_status(adev);
-+ /* Test for IDLE state */
-+ if (!cmd_status)
-+ break;
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ if (!counter) {
-+ /* the card doesn't get idle, we're in trouble */
-+ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n",
-+ devname, cmd_status);
-+#if DUMP_IF_SLOW > 0
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("not idle");
-+#endif
-+ goto bad;
-+ } else if (counter < 190) { /* if waited >10ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. "
-+ "Please report\n", 199 - counter);
-+ }
-+
-+ /* now write the parameters of the command if needed */
-+ if (buffer && buflen) {
-+ /* if it's an INTERROGATE command, just pass the length
-+ * of parameters to read, as data */
-+#if CMD_DISCOVERY
-+ if (cmd == ACX1xx_CMD_INTERROGATE)
-+ memset_io(adev->cmd_area + 4, 0xAA, buflen);
-+#endif
-+ /*
-+ * slave memory version
-+ */
-+ copy_to_slavemem (adev, (u32) (adev->cmd_area + 4), buffer,
-+ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen);
-+ }
-+ /* now write the actual command type */
-+ acxmem_write_cmd_type_status(adev, cmd, 0);
-+
-+ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */
-+ adev->irq_status &= ~HOST_INT_CMD_COMPLETE;
-+
-+ /* execute command */
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD);
-+ write_flush(adev);
-+
-+ /* wait for firmware to process command */
-+
-+ /* Ensure nonzero and not too large timeout.
-+ ** Also converts e.g. 100->99, 200->199
-+ ** which is nice but not essential */
-+ cmd_timeout = (cmd_timeout-1) | 1;
-+ if (unlikely(cmd_timeout > 1199))
-+ cmd_timeout = 1199;
-+
-+ /* we schedule away sometimes (timeout can be large) */
-+ counter = cmd_timeout;
-+ timeout = jiffies + cmd_timeout * HZ / 1000;
-+ do {
-+ if (!adev->irqs_active) { /* IRQ disabled: poll */
-+ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ write_reg16(adev, IO_ACX_IRQ_ACK,
-+ HOST_INT_CMD_COMPLETE);
-+ break;
-+ }
-+ } else { /* Wait when IRQ will set the bit */
-+ irqtype = adev->irq_status;
-+ if (irqtype & HOST_INT_CMD_COMPLETE)
-+ break;
-+ }
-+
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ /* save state for debugging */
-+ cmd_status = acxmem_read_cmd_type_status(adev);
-+
-+ /* put the card in IDLE state */
-+ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
-+
-+ if (!counter) { /* timed out! */
-+ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. "
-+ "irq bits:0x%04X irq_status:0x%04X timeout:%dms "
-+ "cmd_status:%d (%s)\n",
-+ devname, (adev->irqs_active) ? "waiting" : "polling",
-+ irqtype, adev->irq_status, cmd_timeout,
-+ cmd_status, acx_cmd_status_str(cmd_status));
-+ printk("%s: "FUNC"(): device irq status 0x%04x\n",
-+ devname, read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES));
-+ printk("%s: "FUNC"(): IO_ACX_IRQ_MASK 0x%04x IO_ACX_FEMR 0x%04x\n",
-+ devname,
-+ read_reg16 (adev, IO_ACX_IRQ_MASK),
-+ read_reg16 (adev, IO_ACX_FEMR));
-+ if (read_reg16 (adev, IO_ACX_IRQ_MASK) == 0xffff) {
-+ printk ("acxmem: firmware probably hosed - reloading\n");
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+ {
-+ pm_message_t state;
-+ /* acxmem_e_suspend (resume_pdev, state); */
-+ acxmem_e_suspend (adev->ndev , state);
-+ }
-+#else
-+ acxmem_e_suspend (adev, 0);
-+#endif
-+ {
-+ resume_ndev = adev->ndev;
-+ fw_resumer (NULL);
-+ }
-+ }
-+
-+ goto bad;
-+ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. "
-+ "count:%d. Please report\n",
-+ (adev->irqs_active) ? "waited" : "polled",
-+ cmd_timeout - counter, counter);
-+ }
-+
-+ if (1 != cmd_status) { /* it is not a 'Success' */
-+ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). "
-+ "Took %dms of %d\n",
-+ devname, cmd_status, acx_cmd_status_str(cmd_status),
-+ cmd_timeout - counter, cmd_timeout);
-+ /* zero out result buffer
-+ * WARNING: this will trash stack in case of illegally large input
-+ * length! */
-+ if (buflen > 388) {
-+ /*
-+ * 388 is maximum command length
-+ */
-+ printk ("invalid length 0x%08x\n", buflen);
-+ buflen = 388;
-+ }
-+ p = (u8 *) buffer;
-+ for (i = 0; i < buflen; i+= 16) {
-+ printk ("%04x:", i);
-+ for (j = 0; (j < 16) && (i+j < buflen); j++) {
-+ printk (" %02x", *p++);
-+ }
-+ printk ("\n");
-+ }
-+ if (buffer && buflen)
-+ memset(buffer, 0, buflen);
-+ goto bad;
-+ }
-+
-+ /* read in result parameters if needed */
-+ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) {
-+ copy_from_slavemem (adev, buffer, (u32) (adev->cmd_area + 4), buflen);
-+ if (acx_debug & L_DEBUG) {
-+ printk("output buffer (len=%u): ", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+ }
-+
-+/* ok: */
-+ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n",
-+ cmdstr, jiffies - start);
-+ FN_EXIT1(OK);
-+ return OK;
-+
-+bad:
-+ /* Give enough info so that callers can avoid
-+ ** printing their own diagnostic messages */
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
-+#else
-+ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
-+#endif
-+ dump_stack();
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#if defined(NONESSENTIAL_FEATURES)
-+typedef struct device_id {
-+ unsigned char id[6];
-+ char *descr;
-+ char *type;
-+} device_id_t;
-+
-+static const device_id_t
-+device_ids[] =
-+{
-+ {
-+ {'G', 'l', 'o', 'b', 'a', 'l'},
-+ NULL,
-+ NULL,
-+ },
-+ {
-+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-+ "uninitialized",
-+ "SpeedStream SS1021 or Gigafast WF721-AEX"
-+ },
-+ {
-+ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85},
-+ "non-standard",
-+ "DrayTek Vigor 520"
-+ },
-+ {
-+ {'?', '?', '?', '?', '?', '?'},
-+ "non-standard",
-+ "Level One WPC-0200"
-+ },
-+ {
-+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-+ "empty",
-+ "DWL-650+ variant"
-+ }
-+};
-+
-+static void
-+acx_show_card_eeprom_id(acx_device_t *adev)
-+{
-+ unsigned char buffer[CARD_EEPROM_ID_SIZE];
-+ int i;
-+
-+ memset(&buffer, 0, CARD_EEPROM_ID_SIZE);
-+ /* use direct EEPROM access */
-+ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) {
-+ if (OK != acxmem_read_eeprom_byte(adev,
-+ ACX100_EEPROM_ID_OFFSET + i,
-+ &buffer[i])) {
-+ printk("acx: reading EEPROM FAILED\n");
-+ break;
-+ }
-+ }
-+
-+ for (i = 0; i < VEC_SIZE(device_ids); i++) {
-+ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) {
-+ if (device_ids[i].descr) {
-+ printk("acx: EEPROM card ID string check "
-+ "found %s card ID: is this %s?\n",
-+ device_ids[i].descr, device_ids[i].type);
-+ }
-+ break;
-+ }
-+ }
-+ if (i == VEC_SIZE(device_ids)) {
-+ printk("acx: EEPROM card ID string check found "
-+ "unknown card: expected 'Global', got '%.*s\'. "
-+ "Please report\n", CARD_EEPROM_ID_SIZE, buffer);
-+ }
-+}
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+/***********************************************************************
-+** acxmem_free_desc_queues
-+**
-+** Releases the queues that have been allocated, the
-+** others have been initialised to NULL so this
-+** function can be used if only part of the queues were allocated.
-+*/
-+
-+void
-+acxmem_free_desc_queues(acx_device_t *adev)
-+{
-+#define ACX_FREE_QUEUE(size, ptr, phyaddr) \
-+ if (ptr) { \
-+ kfree(ptr); \
-+ ptr = NULL; \
-+ size = 0; \
-+ }
-+
-+ FN_ENTER;
-+
-+ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy);
-+
-+ adev->txdesc_start = NULL;
-+
-+ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy);
-+
-+ adev->rxdesc_start = NULL;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_delete_dma_regions
-+*/
-+static void
-+acxmem_s_delete_dma_regions(acx_device_t *adev)
-+{
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+ /* disable radio Tx/Rx. Shouldn't we use the firmware commands
-+ * here instead? Or are we that much down the road that it's no
-+ * longer possible here? */
-+ /*
-+ * slave memory interface really doesn't like this.
-+ */
-+ /*
-+ write_reg16(adev, IO_ACX_ENABLE, 0);
-+ */
-+
-+ acx_s_msleep(100);
-+
-+ acx_lock(adev, flags);
-+ acxmem_free_desc_queues(adev);
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_probe
-+**
-+** Probe routine called when a PCI device w/ matching ID is found.
-+** Here's the sequence:
-+** - Allocate the PCI resources.
-+** - Read the PCMCIA attribute memory to make sure we have a WLAN card
-+** - Reset the MAC
-+** - Initialize the dev and wlan data
-+** - Initialize the MAC
-+**
-+** pdev - ptr to pci device structure containing info about pci configuration
-+** id - ptr to the device id entry that matched this device
-+*/
-+static const u16
-+IO_ACX100[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_END_CTL */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x007c, /* IO_ACX_INT_TRIG */
-+ 0x0098, /* IO_ACX_IRQ_MASK */
-+ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00ac, /* IO_ACX_IRQ_ACK */
-+ 0x00b0, /* IO_ACX_HINT_TRIG */
-+
-+ 0x0104, /* IO_ACX_ENABLE */
-+
-+ 0x0250, /* IO_ACX_EEPROM_CTL */
-+ 0x0254, /* IO_ACX_EEPROM_ADDR */
-+ 0x0258, /* IO_ACX_EEPROM_DATA */
-+ 0x025c, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0268, /* IO_ACX_PHY_ADDR */
-+ 0x026c, /* IO_ACX_PHY_DATA */
-+ 0x0270, /* IO_ACX_PHY_CTL */
-+
-+ 0x0290, /* IO_ACX_GPIO_OE */
-+
-+ 0x0298, /* IO_ACX_GPIO_OUT */
-+
-+ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x02d0, /* IO_ACX_EE_START */
-+ 0x02d4, /* IO_ACX_SOR_CFG */
-+ 0x02d8 /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static const u16
-+IO_ACX111[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_MEM_CP */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x00b4, /* IO_ACX_INT_TRIG */
-+ 0x00d4, /* IO_ACX_IRQ_MASK */
-+ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */
-+ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00e8, /* IO_ACX_IRQ_ACK */
-+ 0x00ec, /* IO_ACX_HINT_TRIG */
-+
-+ 0x01d0, /* IO_ACX_ENABLE */
-+
-+ 0x0338, /* IO_ACX_EEPROM_CTL */
-+ 0x033c, /* IO_ACX_EEPROM_ADDR */
-+ 0x0340, /* IO_ACX_EEPROM_DATA */
-+ 0x0344, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0350, /* IO_ACX_PHY_ADDR */
-+ 0x0354, /* IO_ACX_PHY_DATA */
-+ 0x0358, /* IO_ACX_PHY_CTL */
-+
-+ 0x0374, /* IO_ACX_GPIO_OE */
-+
-+ 0x037c, /* IO_ACX_GPIO_OUT */
-+
-+ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x0390, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x0100, /* IO_ACX_EE_START */
-+ 0x0104, /* IO_ACX_SOR_CFG */
-+ 0x0108, /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static void
-+dummy_netdev_init(struct net_device *ndev) {}
-+
-+/*
-+ * Most of the acx specific pieces of hardware reset.
-+ */
-+static int
-+acxmem_complete_hw_reset (acx_device_t *adev)
-+{
-+ acx111_ie_configoption_t co;
-+
-+ /* NB: read_reg() reads may return bogus data before reset_dev(),
-+ * since the firmware which directly controls large parts of the I/O
-+ * registers isn't initialized yet.
-+ * acx100 seems to be more affected than acx111 */
-+ if (OK != acxmem_s_reset_dev (adev))
-+ return -1;
-+
-+ if (IS_ACX100(adev)) {
-+ /* ACX100: configopt struct in cmd mailbox - directly after reset */
-+ copy_from_slavemem (adev, (u8*) &co, (u32) adev->cmd_area, sizeof (co));
-+ }
-+
-+ if (OK != acx_s_init_mac(adev))
-+ return -3;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111: configopt struct needs to be queried after full init */
-+ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS);
-+ }
-+
-+ /*
-+ * Set up transmit buffer administration
-+ */
-+ init_acx_txbuf (adev);
-+
-+ /*
-+ * Windows driver writes 0x01000000 to register 0x288, RADIO_CTL, if the form factor
-+ * is 3. It also write protects the EEPROM by writing 1<<9 to GPIO_OUT
-+ */
-+ if (adev->form_factor == 3) {
-+ set_regbits (adev, 0x288, 0x01000000);
-+ set_regbits (adev, 0x298, 1<<9);
-+ }
-+
-+/* TODO: merge them into one function, they are called just once and are the same for pci & usb */
-+ if (OK != acxmem_read_eeprom_byte(adev, 0x05, &adev->eeprom_version))
-+ return -2;
-+
-+ acx_s_parse_configoption(adev, &co);
-+ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */
-+ acx_display_hardware_details(adev);
-+
-+ return 0;
-+}
-+
-+static int acx_init_netdev(struct net_device *ndev, struct device *dev, int base_addr, int addr_size, int irq)
-+{
-+ const char *chip_name;
-+ int result = -EIO;
-+ int err;
-+ u8 chip_type;
-+ acx_device_t *adev = NULL;
-+
-+ FN_ENTER;
-+
-+ /* FIXME: prism54 calls pci_set_mwi() here,
-+ * should we do/support the same? */
-+
-+ /* chiptype is u8 but id->driver_data is ulong
-+ ** Works for now (possible values are 1 and 2) */
-+ chip_type = CHIPTYPE_ACX100;
-+ /* acx100 and acx111 have different PCI memory regions */
-+ if (chip_type == CHIPTYPE_ACX100) {
-+ chip_name = "ACX100";
-+ } else if (chip_type == CHIPTYPE_ACX111) {
-+ chip_name = "ACX111";
-+ } else {
-+ printk("acx: unknown chip type 0x%04X\n", chip_type);
-+ goto fail_unknown_chiptype;
-+ }
-+
-+ printk("acx: found %s-based wireless network card\n", chip_name);
-+ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug);
-+
-+
-+ dev_set_drvdata(dev, ndev);
-+
-+ ether_setup(ndev);
-+
-+ ndev->irq = irq;
-+
-+ ndev->base_addr = base_addr;
-+printk (KERN_INFO "memwinbase=%lx memwinsize=%u\n",memwin.Base,memwin.Size);
-+ if (addr_size == 0 || ndev->irq == 0)
-+ goto fail_hw_params;
-+ ndev->open = &acxmem_e_open;
-+ ndev->stop = &acxmem_e_close;
-+ //pdev->dev.release = &acxmem_e_release;
-+ ndev->hard_start_xmit = &acx_i_start_xmit;
-+ ndev->get_stats = &acx_e_get_stats;
-+#if IW_HANDLER_VERSION <= 5
-+ ndev->get_wireless_stats = &acx_e_get_wireless_stats;
-+#endif
-+ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
-+ ndev->set_multicast_list = &acxmem_i_set_multicast_list;
-+ ndev->tx_timeout = &acxmem_i_tx_timeout;
-+ ndev->change_mtu = &acx_e_change_mtu;
-+ ndev->watchdog_timeo = 4 * HZ;
-+
-+ adev = ndev2adev(ndev);
-+ spin_lock_init(&adev->lock); /* initial state: unlocked */
-+ spin_lock_init(&adev->txbuf_lock);
-+ /* We do not start with downed sem: we want PARANOID_LOCKING to work */
-+ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
-+ /* since nobody can see new netdev yet, we can as well
-+ ** just _presume_ that we're under sem (instead of actually taking it): */
-+ /* acx_sem_lock(adev); */
-+ adev->dev = dev;
-+ adev->ndev = ndev;
-+ adev->dev_type = DEVTYPE_MEM;
-+ adev->chip_type = chip_type;
-+ adev->chip_name = chip_name;
-+ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111;
-+ adev->membase = (volatile u32 *) ndev->base_addr;
-+ adev->iobase = (volatile u32 *) ioremap_nocache (ndev->base_addr, addr_size);
-+ /* to find crashes due to weird driver access
-+ * to unconfigured interface (ifup) */
-+ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead;
-+
-+#if defined(NONESSENTIAL_FEATURES)
-+ acx_show_card_eeprom_id(adev);
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+#ifdef SET_MODULE_OWNER
-+ SET_MODULE_OWNER(ndev);
-+#endif
-+ // need to fix that @@
-+ SET_NETDEV_DEV(ndev, dev);
-+
-+ log(L_IRQ|L_INIT, "using IRQ %d\n", ndev->irq);
-+
-+ /* ok, pci setup is finished, now start initializing the card */
-+
-+ if (OK != acxmem_complete_hw_reset (adev))
-+ goto fail_reset;
-+
-+ /*
-+ * Set up default things for most of the card settings.
-+ */
-+ acx_s_set_defaults(adev);
-+
-+ /* Register the card, AFTER everything else has been set up,
-+ * since otherwise an ioctl could step on our feet due to
-+ * firmware operations happening in parallel or uninitialized data */
-+ err = register_netdev(ndev);
-+ if (OK != err) {
-+ printk("acx: register_netdev() FAILED: %d\n", err);
-+ goto fail_register_netdev;
-+ }
-+
-+ acx_proc_register_entries(ndev);
-+
-+ /* Now we have our device, so make sure the kernel doesn't try
-+ * to send packets even though we're not associated to a network yet */
-+ acx_stop_queue(ndev, "on probe");
-+ acx_carrier_off(ndev, "on probe");
-+
-+ /*
-+ * Set up a default monitor type so that poor combinations of initialization
-+ * sequences in monitor mode don't end up destroying the hardware type.
-+ */
-+ adev->monitor_type = ARPHRD_ETHER;
-+
-+ /*
-+ * Register to receive inetaddr notifier changes. This will allow us to
-+ * catch if the user changes the MAC address of the interface.
-+ */
-+ register_netdevice_notifier(&acx_netdev_notifier);
-+
-+ /* after register_netdev() userspace may start working with dev
-+ * (in particular, on other CPUs), we only need to up the sem */
-+ /* acx_sem_unlock(adev); */
-+
-+ printk("acx "ACX_RELEASE": net device %s, driver compiled "
-+ "against wireless extensions %d and Linux %s\n",
-+ ndev->name, WIRELESS_EXT, UTS_RELEASE);
-+
-+#if CMD_DISCOVERY
-+ great_inquisitor(adev);
-+#endif
-+
-+ result = OK;
-+ goto done;
-+
-+ /* error paths: undo everything in reverse order... */
-+
-+fail_register_netdev:
-+
-+ acxmem_s_delete_dma_regions(adev);
-+
-+fail_reset:
-+fail_hw_params:
-+ free_netdev(ndev);
-+fail_unknown_chiptype:
-+
-+
-+done:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_remove
-+**
-+** Shut device down (if not hot unplugged)
-+** and deallocate PCI resources for the acx chip.
-+**
-+** pdev - ptr to PCI device structure containing info about pci configuration
-+*/
-+static int __devexit
-+acxmem_e_remove(struct pcmcia_device *link)
-+{
-+ struct net_device *ndev;
-+ acx_device_t *adev;
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ ndev = ((local_info_t*)link->priv)->ndev;
-+ if (!ndev) {
-+ log(L_DEBUG, "%s: card is unused. Skipping any release code\n",
-+ __func__);
-+ goto end;
-+ }
-+
-+ adev = ndev2adev(ndev);
-+
-+ /* If device wasn't hot unplugged... */
-+ if (adev_present(adev)) {
-+
-+ acx_sem_lock(adev);
-+
-+ /* disable both Tx and Rx to shut radio down properly */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
-+
-+#ifdef REDUNDANT
-+ /* put the eCPU to sleep to save power
-+ * Halting is not possible currently,
-+ * since not supported by all firmware versions */
-+ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0);
-+#endif
-+ acx_lock(adev, flags);
-+
-+ /* disable power LED to save power :-) */
-+ log(L_INIT, "switching off power LED to save power\n");
-+ acxmem_l_power_led(adev, 0);
-+
-+ /* stop our eCPU */
-+ if (IS_ACX111(adev)) {
-+ /* FIXME: does this actually keep halting the eCPU?
-+ * I don't think so...
-+ */
-+ acxmem_l_reset_mac(adev);
-+ } else {
-+ u16 temp;
-+
-+ /* halt eCPU */
-+ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
-+ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
-+ write_flush(adev);
-+ }
-+
-+ acx_unlock(adev, flags);
-+
-+ acx_sem_unlock(adev);
-+ }
-+
-+
-+ /*
-+ * Unregister the notifier chain
-+ */
-+ unregister_netdevice_notifier(&acx_netdev_notifier);
-+
-+ /* unregister the device to not let the kernel
-+ * (e.g. ioctls) access a half-deconfigured device
-+ * NB: this will cause acxmem_e_close() to be called,
-+ * thus we shouldn't call it under sem! */
-+ log(L_INIT, "removing device %s\n", ndev->name);
-+ unregister_netdev(ndev);
-+
-+ /* unregister_netdev ensures that no references to us left.
-+ * For paranoid reasons we continue to follow the rules */
-+ acx_sem_lock(adev);
-+
-+ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) {
-+ acxmem_s_down(ndev);
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ }
-+
-+ acx_proc_unregister_entries(ndev);
-+
-+ acxmem_s_delete_dma_regions(adev);
-+
-+ /* finally, clean up PCI bus state */
-+ if (adev->iobase) iounmap((void *)adev->iobase);
-+
-+ acx_sem_unlock(adev);
-+
-+ /* Free netdev (quite late,
-+ * since otherwise we might get caught off-guard
-+ * by a netdev timeout handler execution
-+ * expecting to see a working dev...) */
-+ free_netdev(ndev);
-+
-+ printk ("e_remove done\n");
-+end:
-+ FN_EXIT0;
-+
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** TODO: PM code needs to be fixed / debugged / tested.
-+*/
-+#ifdef CONFIG_PM
-+static int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+acxmem_e_suspend( struct net_device *ndev, pm_message_t state)
-+#else
-+acxmem_e_suspend( struct net_device *ndev, u32 state)
-+#endif
-+{
-+ FN_ENTER;
-+ acx_device_t *adev;
-+ printk("acx: suspend handler is experimental!\n");
-+ printk("sus: dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ goto end;
-+ // @@ need to get it from link or something like that
-+ adev = ndev2adev(ndev);
-+ printk("sus: adev %p\n", adev);
-+
-+ acx_sem_lock(adev);
-+
-+ netif_device_detach(adev->ndev); /* this one cannot sleep */
-+ acxmem_s_down(adev->ndev);
-+ /* down() does not set it to 0xffff, but here we really want that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ acxmem_s_delete_dma_regions(adev);
-+
-+ /*
-+ * Turn the ACX chip off.
-+ */
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+static void
-+fw_resumer(struct work_struct *notused)
-+{
-+ acx_device_t *adev;
-+ struct net_device *ndev = resume_ndev;
-+
-+ printk("acx: resume handler is experimental!\n");
-+ printk("rsm: got dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ return;
-+
-+ adev = ndev2adev(ndev);
-+ printk("rsm: got adev %p\n", adev);
-+
-+ acx_sem_lock(adev);
-+
-+ /*
-+ * Turn on the ACX.
-+ */
-+
-+ acxmem_complete_hw_reset (adev);
-+
-+ /*
-+ * done by acx_s_set_defaults for initial startup
-+ */
-+ acxmem_set_interrupt_mask(adev);
-+
-+ printk ("rsm: bringing up interface\n");
-+ SET_BIT (adev->set_mask, GETSET_ALL);
-+ acxmem_s_up(ndev);
-+ printk("rsm: acx up done\n");
-+
-+ /* now even reload all card parameters as they were before suspend,
-+ * and possibly be back in the network again already :-)
-+ */
-+ /* - most settings updated in acxmem_s_up()
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) {
-+ adev->set_mask = GETSET_ALL;
-+ acx_s_update_card_settings(adev);
-+ printk("rsm: settings updated\n");
-+ }
-+ */
-+ netif_device_attach(ndev);
-+ printk("rsm: device attached\n");
-+
-+ acx_sem_unlock(adev);
-+}
-+
-+DECLARE_WORK( fw_resume_work, fw_resumer );
-+
-+static int
-+acxmem_e_resume(struct pcmcia_device *link)
-+{
-+ FN_ENTER;
-+
-+ //resume_pdev = pdev;
-+ schedule_work( &fw_resume_work );
-+
-+ FN_EXIT0;
-+ return OK;
-+}
-+#endif /* CONFIG_PM */
-+
-+
-+/***********************************************************************
-+** acxmem_s_up
-+**
-+** This function is called by acxmem_e_open (when ifconfig sets the device as up)
-+**
-+** Side effects:
-+** - Enables on-card interrupt requests
-+** - calls acx_s_start
-+*/
-+
-+static void
-+enable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask);
-+ write_reg16(adev, IO_ACX_FEMR, 0x8000);
-+ adev->irqs_active = 1;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxmem_s_up(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+ enable_acx_irq(adev);
-+ acx_unlock(adev, flags);
-+
-+ /* acx fw < 1.9.3.e has a hardware timer, and older drivers
-+ ** used to use it. But we don't do that anymore, our OS
-+ ** has reliable software timers */
-+ init_timer(&adev->mgmt_timer);
-+ adev->mgmt_timer.function = acx_i_timer;
-+ adev->mgmt_timer.data = (unsigned long)adev;
-+
-+ /* Need to set ACX_STATE_IFACE_UP first, or else
-+ ** timer won't be started by acx_set_status() */
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ /* actual scan cmd will happen in start() */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING); break;
-+ case ACX_MODE_3_AP:
-+ case ACX_MODE_MONITOR:
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break;
-+ }
-+
-+ acx_s_start(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_down
-+**
-+** This disables the netdevice
-+**
-+** Side effects:
-+** - disables on-card interrupt request
-+*/
-+
-+static void
-+disable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+
-+ /* I guess mask is not 0xffff because acx100 won't signal
-+ ** cmd completion then (needed for ifup).
-+ ** Someone with acx100 please confirm */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ adev->irqs_active = 0;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxmem_s_down(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ /* Disable IRQs first, so that IRQs cannot race with us */
-+ /* then wait until interrupts have finished executing on other CPUs */
-+ acx_lock(adev, flags);
-+ disable_acx_irq(adev);
-+ synchronize_irq(adev->pdev->irq);
-+ acx_unlock(adev, flags);
-+
-+ /* we really don't want to have an asynchronous tasklet disturb us
-+ ** after something vital for its job has been shut down, so
-+ ** end all remaining work now.
-+ **
-+ ** NB: carrier_off (done by set_status below) would lead to
-+ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK().
-+ ** That's why we do FLUSH first.
-+ **
-+ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK()
-+ ** waits for acx_e_after_interrupt_task to complete if it is running
-+ ** on another CPU, but acx_e_after_interrupt_task
-+ ** will sleep on sem forever, because it is taken by us!
-+ ** Work around that by temporary sem unlock.
-+ ** This will fail miserably if we'll be hit by concurrent
-+ ** iwconfig or something in between. TODO! */
-+ acx_sem_unlock(adev);
-+ FLUSH_SCHEDULED_WORK();
-+ acx_sem_lock(adev);
-+
-+ /* This is possible:
-+ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task ->
-+ ** -> set_status(ASSOCIATED) -> wake_queue()
-+ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK
-+ ** lock/unlock is just paranoia, maybe not needed */
-+ acx_lock(adev, flags);
-+ acx_stop_queue(ndev, "on ifdown");
-+ acx_set_status(adev, ACX_STATUS_0_STOPPED);
-+ acx_unlock(adev, flags);
-+
-+ /* kernel/timer.c says it's illegal to del_timer_sync()
-+ ** a timer which restarts itself. We guarantee this cannot
-+ ** ever happen because acx_i_timer() never does this if
-+ ** status is ACX_STATUS_0_STOPPED */
-+ del_timer_sync(&adev->mgmt_timer);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_open
-+**
-+** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP
-+** from clear to set. In other words: ifconfig up.
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxmem_e_open(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ acx_init_task_scheduler(adev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D0); ? */
-+
-+#if 0
-+ /* request shared IRQ handler */
-+ if (request_irq(ndev->irq, acxmem_i_interrupt, SA_INTERRUPT, ndev->name, ndev)) {
-+ printk("%s: request_irq FAILED\n", ndev->name);
-+ result = -EAGAIN;
-+ goto done;
-+ }
-+ set_irq_type (ndev->irq, IRQT_FALLING);
-+ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq);
-+#endif
-+
-+ /* ifup device */
-+ acxmem_s_up(ndev);
-+
-+ /* We don't currently have to do anything else.
-+ * The setup of the MAC should be subsequently completed via
-+ * the mlme commands.
-+ * Higher layers know we're ready from dev->start==1 and
-+ * dev->tbusy==0. Our rx path knows to pass up received/
-+ * frames because of dev->flags&IFF_UP is true.
-+ */
-+done:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_close
-+**
-+** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP
-+** from set to clear. I.e. called by "ifconfig DEV down"
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxmem_e_close(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* ifdown device */
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ if (netif_device_present(ndev)) {
-+ acxmem_s_down(ndev);
-+ }
-+
-+ /* disable all IRQs, release shared IRQ handler */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ free_irq(ndev->irq, ndev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */
-+
-+ /* We currently don't have to do anything else.
-+ * Higher layers know we're not ready from dev->start==0 and
-+ * dev->tbusy==1. Our rx path knows to not pass up received
-+ * frames because of dev->flags&IFF_UP is false.
-+ */
-+ acx_sem_unlock(adev);
-+
-+ log(L_INIT, "closed device\n");
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_tx_timeout
-+**
-+** Called from network core. Must not sleep!
-+*/
-+static void
-+acxmem_i_tx_timeout(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ unsigned int tx_num_cleaned;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* clean processed tx descs, they may have been completely full */
-+ tx_num_cleaned = acxmem_l_clean_txdesc(adev);
-+
-+ /* nothing cleaned, yet (almost) no free buffers available?
-+ * --> clean all tx descs, no matter which status!!
-+ * Note that I strongly suspect that doing emergency cleaning
-+ * may confuse the firmware. This is a last ditch effort to get
-+ * ANYTHING to work again...
-+ *
-+ * TODO: it's best to simply reset & reinit hw from scratch...
-+ */
-+ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) {
-+ printk("%s: FAILED to free any of the many full tx buffers. "
-+ "Switching to emergency freeing. "
-+ "Please report!\n", ndev->name);
-+ acxmem_l_clean_txdesc_emergency(adev);
-+ }
-+
-+ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status))
-+ acx_wake_queue(ndev, "after tx timeout");
-+
-+ /* stall may have happened due to radio drift, so recalib radio */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+
-+ /* do unimportant work last */
-+ printk("%s: tx timeout!\n", ndev->name);
-+ adev->stats.tx_errors++;
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_set_multicast_list
-+** FIXME: most likely needs refinement
-+*/
-+static void
-+acxmem_i_set_multicast_list(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* firmwares don't have allmulti capability,
-+ * so just use promiscuous mode instead in this case. */
-+ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
-+ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ /* let kernel know in case *we* needed to set promiscuous */
-+ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI);
-+ } else {
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI);
-+ }
-+
-+ /* cannot update card settings directly here, atomic context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_l_process_rxdesc
-+**
-+** Called directly and only from the IRQ handler
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_rxbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_rxbuffer(const acx_device_t *adev)
-+{
-+ register const struct rxhostdesc *rxhostdesc;
-+ int i;
-+ /* no FN_ENTER here, we don't want that */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+ if (unlikely(!rxhostdesc)) return;
-+ for (i = 0; i < RX_CNT; i++) {
-+ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
-+ printk("rx: buf %d full\n", i);
-+ rxhostdesc++;
-+ }
-+}
-+#endif
-+
-+static void
-+acxmem_l_process_rxdesc(acx_device_t *adev)
-+{
-+ register rxhostdesc_t *hostdesc;
-+ register rxdesc_t *rxdesc;
-+ unsigned count, tail;
-+ u32 addr;
-+ u8 Ctl_8;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(acx_debug & L_BUFR))
-+ log_rxbuffer(adev);
-+
-+ /* First, have a loop to determine the first descriptor that's
-+ * full, just in case there's a mismatch between our current
-+ * rx_tail and the full descriptor we're supposed to handle. */
-+ tail = adev->rx_tail;
-+ count = RX_CNT;
-+ while (1) {
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+ rxdesc = &adev->rxdesc_start[tail];
-+ /* advance tail regardless of outcome of the below test */
-+ tail = (tail + 1) % RX_CNT;
-+
-+ /*
-+ * Unlike the PCI interface, where the ACX can write directly to
-+ * the host descriptors, on the slave memory interface we have to
-+ * pull these. All we really need to do is check the Ctl_8 field
-+ * in the rx descriptor on the ACX, which should be 0x11000000 if
-+ * we should process it.
-+ */
-+ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+ if ((Ctl_8 & DESC_CTL_HOSTOWN) &&
-+ (Ctl_8 & DESC_CTL_ACXDONE))
-+ break; /* found it! */
-+
-+ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */
-+ goto end;
-+ }
-+
-+ /* now process descriptors, starting with the first we figured out */
-+ while (1) {
-+ log(L_BUFR, "rx: tail=%u Ctl_8=%02X\n", tail, Ctl_8);
-+ /*
-+ * If the ACX has CTL_RECLAIM set on this descriptor there
-+ * is no buffer associated; it just wants us to tell it to
-+ * reclaim the memory.
-+ */
-+ if (!(Ctl_8 & DESC_CTL_RECLAIM)) {
-+
-+ /*
-+ * slave interface - pull data now
-+ */
-+ hostdesc->length = read_slavemem16 (adev, (u32) &(rxdesc->total_length));
-+
-+ /*
-+ * hostdesc->data is an rxbuffer_t, which includes header information,
-+ * but the length in the data packet doesn't. The header information
-+ * takes up an additional 12 bytes, so add that to the length we copy.
-+ */
-+ addr = read_slavemem32 (adev, (u32) &(rxdesc->ACXMemPtr));
-+ if (addr) {
-+ /*
-+ * How can &(rxdesc->ACXMemPtr) above ever be zero? Looks like we
-+ * get that now and then - try to trap it for debug.
-+ */
-+ if (addr & 0xffff0000) {
-+ printk("rxdesc 0x%08x\n", (u32) rxdesc);
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("Bad access!");
-+ }
-+ chaincopy_from_slavemem (adev, (u8 *) hostdesc->data, addr,
-+ hostdesc->length +
-+ (u32) &((rxbuffer_t *)0)->hdr_a3);
-+ acx_l_process_rxbuf(adev, hostdesc->data);
-+ }
-+ }
-+ else {
-+ printk ("rx reclaim only!\n");
-+ }
-+
-+ hostdesc->Status = 0;
-+
-+ /*
-+ * Let the ACX know we're done.
-+ */
-+ CLEAR_BIT (Ctl_8, DESC_CTL_HOSTOWN);
-+ SET_BIT (Ctl_8, DESC_CTL_HOSTDONE);
-+ SET_BIT (Ctl_8, DESC_CTL_RECLAIM);
-+ write_slavemem8 (adev, (u32) &rxdesc->Ctl_8, Ctl_8);
-+
-+ /*
-+ * Now tell the ACX we've finished with the receive buffer so
-+ * it can finish the reclaim.
-+ */
-+ write_reg16 (adev, IO_ACX_INT_TRIG, INT_TRIG_RXPRC);
-+
-+ /* ok, descriptor is handled, now check the next descriptor */
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+ rxdesc = &adev->rxdesc_start[tail];
-+
-+ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+
-+ /* if next descriptor is empty, then bail out */
-+ if (!(Ctl_8 & DESC_CTL_HOSTOWN) || !(Ctl_8 & DESC_CTL_ACXDONE))
-+ break;
-+
-+ tail = (tail + 1) % RX_CNT;
-+ }
-+end:
-+ adev->rx_tail = tail;
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_interrupt
-+**
-+** IRQ handler (atomic context, must not sleep, blah, blah)
-+*/
-+
-+/* scan is complete. all frames now on the receive queue are valid */
-+#define INFO_SCAN_COMPLETE 0x0001
-+#define INFO_WEP_KEY_NOT_FOUND 0x0002
-+/* hw has been reset as the result of a watchdog timer timeout */
-+#define INFO_WATCH_DOG_RESET 0x0003
-+/* failed to send out NULL frame from PS mode notification to AP */
-+/* recommended action: try entering 802.11 PS mode again */
-+#define INFO_PS_FAIL 0x0004
-+/* encryption/decryption process on a packet failed */
-+#define INFO_IV_ICV_FAILURE 0x0005
-+
-+/* Info mailbox format:
-+2 bytes: type
-+2 bytes: status
-+more bytes may follow
-+ rumors say about status:
-+ 0x0000 info available (set by hw)
-+ 0x0001 information received (must be set by host)
-+ 0x1000 info available, mailbox overflowed (messages lost) (set by hw)
-+ but in practice we've seen:
-+ 0x9000 when we did not set status to 0x0001 on prev message
-+ 0x1001 when we did set it
-+ 0x0000 was never seen
-+ conclusion: this is really a bitfield:
-+ 0x1000 is 'info available' bit
-+ 'mailbox overflowed' bit is 0x8000, not 0x1000
-+ value of 0x0000 probably means that there are no messages at all
-+ P.S. I dunno how in hell hw is supposed to notice that messages are lost -
-+ it does NOT clear bit 0x0001, and this bit will probably stay forever set
-+ after we set it once. Let's hope this will be fixed in firmware someday
-+*/
-+
-+static void
-+handle_info_irq(acx_device_t *adev)
-+{
-+#if ACX_DEBUG
-+ static const char * const info_type_msg[] = {
-+ "(unknown)",
-+ "scan complete",
-+ "WEP key not found",
-+ "internal watchdog reset was done",
-+ "failed to send powersave (NULL frame) notification to AP",
-+ "encrypt/decrypt on a packet has failed",
-+ "TKIP tx keys disabled",
-+ "TKIP rx keys disabled",
-+ "TKIP rx: key ID not found",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "TKIP IV value exceeds thresh"
-+ };
-+#endif
-+ u32 info_type, info_status;
-+
-+ info_type = read_slavemem32 (adev, (u32) adev->info_area);
-+
-+ info_status = (info_type >> 16);
-+ info_type = (u16)info_type;
-+
-+ /* inform fw that we have read this info message */
-+ write_slavemem32(adev, (u32) adev->info_area, info_type | 0x00010000);
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK);
-+ write_flush(adev);
-+
-+ log(L_CTL, "info_type:%04X info_status:%04X\n",
-+ info_type, info_status);
-+
-+ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n",
-+ info_status, info_type,
-+ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ?
-+ 0 : info_type]
-+ );
-+}
-+
-+
-+static void
-+log_unusual_irq(u16 irqtype) {
-+ /*
-+ if (!printk_ratelimit())
-+ return;
-+ */
-+
-+ printk("acx: got");
-+ if (irqtype & HOST_INT_TX_XFER) {
-+ printk(" Tx_Xfer");
-+ }
-+ if (irqtype & HOST_INT_RX_COMPLETE) {
-+ printk(" Rx_Complete");
-+ }
-+ if (irqtype & HOST_INT_DTIM) {
-+ printk(" DTIM");
-+ }
-+ if (irqtype & HOST_INT_BEACON) {
-+ printk(" Beacon");
-+ }
-+ if (irqtype & HOST_INT_TIMER) {
-+ log(L_IRQ, " Timer");
-+ }
-+ if (irqtype & HOST_INT_KEY_NOT_FOUND) {
-+ printk(" Key_Not_Found");
-+ }
-+ if (irqtype & HOST_INT_IV_ICV_FAILURE) {
-+ printk(" IV_ICV_Failure (crypto)");
-+ }
-+ /* HOST_INT_CMD_COMPLETE */
-+ /* HOST_INT_INFO */
-+ if (irqtype & HOST_INT_OVERFLOW) {
-+ printk(" Overflow");
-+ }
-+ if (irqtype & HOST_INT_PROCESS_ERROR) {
-+ printk(" Process_Error");
-+ }
-+ /* HOST_INT_SCAN_COMPLETE */
-+ if (irqtype & HOST_INT_FCS_THRESHOLD) {
-+ printk(" FCS_Threshold");
-+ }
-+ if (irqtype & HOST_INT_UNKNOWN) {
-+ printk(" Unknown");
-+ }
-+ printk(" IRQ(s)\n");
-+}
-+
-+
-+static void
-+update_link_quality_led(acx_device_t *adev)
-+{
-+ int qual;
-+
-+ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise);
-+ if (qual > adev->brange_max_quality)
-+ qual = adev->brange_max_quality;
-+
-+ if (time_after(jiffies, adev->brange_time_last_state_change +
-+ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) {
-+ acxmem_l_power_led(adev, (adev->brange_last_state == 0));
-+ adev->brange_last_state ^= 1; /* toggle */
-+ adev->brange_time_last_state_change = jiffies;
-+ }
-+}
-+
-+
-+#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */
-+
-+static irqreturn_t
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+acxmem_i_interrupt(int irq, void *dev_id)
-+#else
-+acxmwm_i_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+#endif
-+{
-+ acx_device_t *adev;
-+ unsigned long flags;
-+ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY;
-+ register u16 irqtype;
-+ u16 unmasked;
-+
-+ adev = ndev2adev((struct net_device*)dev_id);
-+
-+ /* LOCKING: can just spin_lock() since IRQs are disabled anyway.
-+ * I am paranoid */
-+ acx_lock(adev, flags);
-+
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ if (unlikely(0xffff == unmasked)) {
-+ /* 0xffff value hints at missing hardware,
-+ * so don't do anything.
-+ * Not very clean, but other drivers do the same... */
-+ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n");
-+ goto none;
-+ }
-+
-+ /* We will check only "interesting" IRQ types */
-+ irqtype = unmasked & ~adev->irq_mask;
-+ if (!irqtype) {
-+ /* We are on a shared IRQ line and it wasn't our IRQ */
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n",
-+ unmasked, adev->irq_mask);
-+ goto none;
-+ }
-+
-+ /* Done here because IRQ_NONEs taking three lines of log
-+ ** drive me crazy */
-+ FN_ENTER;
-+
-+#define IRQ_ITERATE 1
-+#if IRQ_ITERATE
-+if (jiffies != adev->irq_last_jiffies) {
-+ adev->irq_loops_this_jiffy = 0;
-+ adev->irq_last_jiffies = jiffies;
-+}
-+
-+/* safety condition; we'll normally abort loop below
-+ * in case no IRQ type occurred */
-+while (likely(--irqcount)) {
-+#endif
-+ /* ACK all IRQs ASAP */
-+ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff);
-+
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n",
-+ unmasked, adev->irq_mask, irqtype);
-+
-+ /* Handle most important IRQ types first */
-+ if (irqtype & HOST_INT_RX_DATA) {
-+ log(L_IRQ, "got Rx_Data IRQ\n");
-+ acxmem_l_process_rxdesc(adev);
-+ }
-+ if (irqtype & HOST_INT_TX_COMPLETE) {
-+ log(L_IRQ, "got Tx_Complete IRQ\n");
-+ /* don't clean up on each Tx complete, wait a bit
-+ * unless we're going towards full, in which case
-+ * we do it immediately, too (otherwise we might lockup
-+ * with a full Tx buffer if we go into
-+ * acxmem_l_clean_txdesc() at a time when we won't wakeup
-+ * the net queue in there for some reason...) */
-+ if (adev->tx_free <= TX_START_CLEAN) {
-+#if TX_CLEANUP_IN_SOFTIRQ
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP);
-+#else
-+ acxmem_l_clean_txdesc(adev);
-+#endif
-+ }
-+ }
-+
-+ /* Less frequent ones */
-+ if (irqtype & (0
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ | HOST_INT_SCAN_COMPLETE
-+ )) {
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ log(L_IRQ, "got Command_Complete IRQ\n");
-+ /* save the state for the running issue_cmd() */
-+ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE);
-+ }
-+ if (irqtype & HOST_INT_INFO) {
-+ handle_info_irq(adev);
-+ }
-+ if (irqtype & HOST_INT_SCAN_COMPLETE) {
-+ log(L_IRQ, "got Scan_Complete IRQ\n");
-+ /* need to do that in process context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN);
-+ /* remember that fw is not scanning anymore */
-+ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
-+ }
-+ }
-+
-+ /* These we just log, but either they happen rarely
-+ * or we keep them masked out */
-+ if (irqtype & (0
-+ /* | HOST_INT_RX_DATA */
-+ /* | HOST_INT_TX_COMPLETE */
-+ | HOST_INT_TX_XFER
-+ | HOST_INT_RX_COMPLETE
-+ | HOST_INT_DTIM
-+ | HOST_INT_BEACON
-+ | HOST_INT_TIMER
-+ | HOST_INT_KEY_NOT_FOUND
-+ | HOST_INT_IV_ICV_FAILURE
-+ /* | HOST_INT_CMD_COMPLETE */
-+ /* | HOST_INT_INFO */
-+ | HOST_INT_OVERFLOW
-+ | HOST_INT_PROCESS_ERROR
-+ /* | HOST_INT_SCAN_COMPLETE */
-+ | HOST_INT_FCS_THRESHOLD
-+ | HOST_INT_UNKNOWN
-+ )) {
-+ log_unusual_irq(irqtype);
-+ }
-+
-+#if IRQ_ITERATE
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ irqtype = unmasked & ~adev->irq_mask;
-+ /* Bail out if no new IRQ bits or if all are masked out */
-+ if (!irqtype)
-+ break;
-+
-+ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) {
-+ printk(KERN_ERR "acx: too many interrupts per jiffy!\n");
-+ /* Looks like card floods us with IRQs! Try to stop that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ /* This will short-circuit all future attempts to handle IRQ.
-+ * We cant do much more... */
-+ adev->irq_mask = 0;
-+ break;
-+ }
-+}
-+#endif
-+ /* Routine to perform blink with range */
-+ if (unlikely(adev->led_power == 2))
-+ update_link_quality_led(adev);
-+
-+/* handled: */
-+ /* write_flush(adev); - not needed, last op was read anyway */
-+ acx_unlock(adev, flags);
-+ FN_EXIT0;
-+ return IRQ_HANDLED;
-+
-+none:
-+ acx_unlock(adev, flags);
-+ return IRQ_NONE;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_power_led
-+*/
-+void
-+acxmem_l_power_led(acx_device_t *adev, int enable)
-+{
-+ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800;
-+
-+ /* A hack. Not moving message rate limiting to adev->xxx
-+ * (it's only a debug message after all) */
-+ static int rate_limit = 0;
-+
-+ if (rate_limit++ < 3)
-+ log(L_IOCTL, "Please report in case toggling the power "
-+ "LED doesn't work for your card!\n");
-+ if (enable)
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled);
-+ else
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled);
-+}
-+
-+
-+/***********************************************************************
-+** Ioctls
-+*/
-+
-+/***********************************************************************
-+*/
-+int
-+acx111pci_ioctl_info(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+#if ACX_DEBUG > 1
-+ acx_device_t *adev = ndev2adev(ndev);
-+ rxdesc_t *rxdesc;
-+ txdesc_t *txdesc;
-+ rxhostdesc_t *rxhostdesc;
-+ txhostdesc_t *txhostdesc;
-+ struct acx111_ie_memoryconfig memconf;
-+ struct acx111_ie_queueconfig queueconf;
-+ unsigned long flags;
-+ int i;
-+ char memmap[0x34];
-+ char rxconfig[0x8];
-+ char fcserror[0x8];
-+ char ratefallback[0x5];
-+
-+ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) )
-+ return OK;
-+ /* using printk() since we checked debug flag already */
-+
-+ acx_sem_lock(adev);
-+
-+ if (!IS_ACX111(adev)) {
-+ printk("acx111-specific function called "
-+ "with non-acx111 chip, aborting\n");
-+ goto end_ok;
-+ }
-+
-+ /* get Acx111 Memory Configuration */
-+ memset(&memconf, 0, sizeof(memconf));
-+ /* BTW, fails with 12 (Write only) error code.
-+ ** Retained for easy testing of issue_cmd error handling :) */
-+ printk ("Interrogating queue config\n");
-+ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG);
-+ printk ("done with queue config\n");
-+
-+ /* get Acx111 Queue Configuration */
-+ memset(&queueconf, 0, sizeof(queueconf));
-+ printk ("Interrogating mem config options\n");
-+ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
-+ printk ("done with mem config options\n");
-+
-+ /* get Acx111 Memory Map */
-+ memset(memmap, 0, sizeof(memmap));
-+ printk ("Interrogating mem map\n");
-+ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP);
-+ printk ("done with mem map\n");
-+
-+ /* get Acx111 Rx Config */
-+ memset(rxconfig, 0, sizeof(rxconfig));
-+ printk ("Interrogating rxconfig\n");
-+ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG);
-+ printk ("done with queue rxconfig\n");
-+
-+ /* get Acx111 fcs error count */
-+ memset(fcserror, 0, sizeof(fcserror));
-+ printk ("Interrogating fcs err count\n");
-+ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT);
-+ printk ("done with err count\n");
-+
-+ /* get Acx111 rate fallback */
-+ memset(ratefallback, 0, sizeof(ratefallback));
-+ printk ("Interrogating rate fallback\n");
-+ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK);
-+ printk ("done with rate fallback\n");
-+
-+ /* force occurrence of a beacon interrupt */
-+ /* TODO: comment why is this necessary */
-+ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON);
-+
-+ /* dump Acx111 Mem Configuration */
-+ printk("dump mem config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Number of stations: %1X\n"
-+ "Memory block size: %1X\n"
-+ "tx/rx memory block allocation: %1X\n"
-+ "count rx: %X / tx: %X queues\n"
-+ "options %1X\n"
-+ "fragmentation %1X\n"
-+ "Rx Queue 1 Count Descriptors: %X\n"
-+ "Rx Queue 1 Host Memory Start: %X\n"
-+ "Tx Queue 1 Count Descriptors: %X\n"
-+ "Tx Queue 1 Attributes: %X\n",
-+ memconf.len, (int) sizeof(memconf),
-+ memconf.no_of_stations,
-+ memconf.memory_block_size,
-+ memconf.tx_rx_memory_block_allocation,
-+ memconf.count_rx_queues, memconf.count_tx_queues,
-+ memconf.options,
-+ memconf.fragmentation,
-+ memconf.rx_queue1_count_descs,
-+ acx2cpu(memconf.rx_queue1_host_rx_start),
-+ memconf.tx_queue1_count_descs,
-+ memconf.tx_queue1_attributes);
-+
-+ /* dump Acx111 Queue Configuration */
-+ printk("dump queue head:\n"
-+ "data read: %d, struct size: %d\n"
-+ "tx_memory_block_address (from card): %X\n"
-+ "rx_memory_block_address (from card): %X\n"
-+ "rx1_queue address (from card): %X\n"
-+ "tx1_queue address (from card): %X\n"
-+ "tx1_queue attributes (from card): %X\n",
-+ queueconf.len, (int) sizeof(queueconf),
-+ queueconf.tx_memory_block_address,
-+ queueconf.rx_memory_block_address,
-+ queueconf.rx1_queue_address,
-+ queueconf.tx1_queue_address,
-+ queueconf.tx1_attributes);
-+
-+ /* dump Acx111 Mem Map */
-+ printk("dump mem map:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Code start: %X\n"
-+ "Code end: %X\n"
-+ "WEP default key start: %X\n"
-+ "WEP default key end: %X\n"
-+ "STA table start: %X\n"
-+ "STA table end: %X\n"
-+ "Packet template start: %X\n"
-+ "Packet template end: %X\n"
-+ "Queue memory start: %X\n"
-+ "Queue memory end: %X\n"
-+ "Packet memory pool start: %X\n"
-+ "Packet memory pool end: %X\n"
-+ "iobase: %p\n"
-+ "iobase2: %p\n",
-+ *((u16 *)&memmap[0x02]), (int) sizeof(memmap),
-+ *((u32 *)&memmap[0x04]),
-+ *((u32 *)&memmap[0x08]),
-+ *((u32 *)&memmap[0x0C]),
-+ *((u32 *)&memmap[0x10]),
-+ *((u32 *)&memmap[0x14]),
-+ *((u32 *)&memmap[0x18]),
-+ *((u32 *)&memmap[0x1C]),
-+ *((u32 *)&memmap[0x20]),
-+ *((u32 *)&memmap[0x24]),
-+ *((u32 *)&memmap[0x28]),
-+ *((u32 *)&memmap[0x2C]),
-+ *((u32 *)&memmap[0x30]),
-+ adev->iobase,
-+ adev->iobase2);
-+
-+ /* dump Acx111 Rx Config */
-+ printk("dump rx config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "rx config: %X\n"
-+ "rx filter config: %X\n",
-+ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig),
-+ *((u16 *)&rxconfig[0x04]),
-+ *((u16 *)&rxconfig[0x06]));
-+
-+ /* dump Acx111 fcs error */
-+ printk("dump fcserror:\n"
-+ "data read: %d, struct size: %d\n"
-+ "fcserrors: %X\n",
-+ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror),
-+ *((u32 *)&fcserror[0x04]));
-+
-+ /* dump Acx111 rate fallback */
-+ printk("dump rate fallback:\n"
-+ "data read: %d, struct size: %d\n"
-+ "ratefallback: %X\n",
-+ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback),
-+ *((u8 *)&ratefallback[0x04]));
-+
-+ /* protect against IRQ */
-+ acx_lock(adev, flags);
-+
-+ /* dump acx111 internal rx descriptor ring buffer */
-+ rxdesc = adev->rxdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump internal rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n"
-+ "RxStatus (dynamic) 0x%X\n"
-+ "Mod/Pre (dynamic) 0x%X\n",
-+ i,
-+ rxdesc,
-+ acx2cpu(rxdesc->pNextDesc),
-+ acx2cpu(rxdesc->ACXMemPtr),
-+ rxdesc->Ctl_8,
-+ rxdesc->rate,
-+ rxdesc->error,
-+ rxdesc->SNR);
-+ rxdesc++;
-+ }
-+
-+ /* dump host rx descriptor ring buffer */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump host rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ rxhostdesc,
-+ acx2cpu(rxhostdesc->data_phy),
-+ rxhostdesc->data_offset,
-+ le16_to_cpu(rxhostdesc->Ctl_16),
-+ le16_to_cpu(rxhostdesc->length),
-+ acx2cpu(rxhostdesc->desc_phy_next),
-+ rxhostdesc->Status);
-+ rxhostdesc++;
-+ }
-+
-+ /* dump acx111 internal tx descriptor ring buffer */
-+ txdesc = adev->txdesc_start;
-+
-+ /* loop over complete transmit pool */
-+ if (txdesc) for (i = 0; i < TX_CNT; i++) {
-+ printk("\ndump internal txdesc %d:\n"
-+ "size 0x%X\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "host mem pointer (dynamic) 0x%X\n"
-+ "length (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "CTL2 (dynamic) 0x%X\n"
-+ "Status (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n",
-+ i,
-+ (int) sizeof(struct txdesc),
-+ txdesc,
-+ acx2cpu(txdesc->pNextDesc),
-+ acx2cpu(txdesc->AcxMemPtr),
-+ acx2cpu(txdesc->HostMemPtr),
-+ le16_to_cpu(txdesc->total_length),
-+ txdesc->Ctl_8,
-+ txdesc->Ctl2_8, txdesc->error,
-+ txdesc->u.r1.rate);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+
-+ /* dump host tx descriptor ring buffer */
-+
-+ txhostdesc = adev->txhostdesc_start;
-+
-+ /* loop over complete host send pool */
-+ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) {
-+ printk("\ndump host txdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ txhostdesc,
-+ acx2cpu(txhostdesc->data_phy),
-+ txhostdesc->data_offset,
-+ le16_to_cpu(txhostdesc->Ctl_16),
-+ le16_to_cpu(txhostdesc->length),
-+ acx2cpu(txhostdesc->desc_phy_next),
-+ le32_to_cpu(txhostdesc->Status));
-+ txhostdesc++;
-+ }
-+
-+ /* write_reg16(adev, 0xb4, 0x4); */
-+
-+ acx_unlock(adev, flags);
-+end_ok:
-+
-+ acx_sem_unlock(adev);
-+#endif /* ACX_DEBUG */
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100mem_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ u16 gpio_old;
-+
-+ if (!IS_ACX100(adev)) {
-+ /* WARNING!!!
-+ * Removing this check *might* damage
-+ * hardware, since we're tweaking GPIOs here after all!!!
-+ * You've been warned...
-+ * WARNING!!! */
-+ printk("acx: sorry, setting bias level for non-acx100 "
-+ "is not supported yet\n");
-+ return OK;
-+ }
-+
-+ if (*extra > 7) {
-+ printk("acx: invalid bias parameter, range is 0-7\n");
-+ return -EINVAL;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ /* Need to lock accesses to [IO_ACX_GPIO_OUT]:
-+ * IRQ handler uses it to update LED */
-+ acx_lock(adev, flags);
-+ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT);
-+ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8));
-+ acx_unlock(adev, flags);
-+
-+ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old);
-+ printk("%s: PHY power amplifier bias: old:%d, new:%d\n",
-+ ndev->name,
-+ (gpio_old & 0x0700) >> 8, (unsigned char)*extra);
-+
-+ acx_sem_unlock(adev);
-+
-+ return OK;
-+}
-+
-+/***************************************************************
-+** acxmem_l_alloc_tx
-+** Actually returns a txdesc_t* ptr
-+**
-+** FIXME: in case of fragments, should allocate multiple descrs
-+** after figuring out how many we need and whether we still have
-+** sufficiently many.
-+*/
-+tx_t*
-+acxmem_l_alloc_tx(acx_device_t *adev)
-+{
-+ struct txdesc *txdesc;
-+ unsigned head;
-+ u8 ctl8;
-+ static int txattempts = 0;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(!adev->tx_free)) {
-+ printk("acx: BUG: no free txdesc left\n");
-+ /*
-+ * Probably the ACX ignored a transmit attempt and now there's a packet
-+ * sitting in the queue we think should be transmitting but the ACX doesn't
-+ * know about.
-+ * On the first pass, send the ACX a TxProc interrupt to try moving
-+ * things along, and if that doesn't work (ie, we get called again) completely
-+ * flush the transmit queue.
-+ */
-+ if (txattempts < 10) {
-+ txattempts++;
-+ printk ("acx: trying to wake up ACX\n");
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
-+ write_flush(adev); }
-+ else {
-+ txattempts = 0;
-+ printk ("acx: flushing transmit queue.\n");
-+ acxmem_l_clean_txdesc_emergency (adev);
-+ }
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ /*
-+ * Make a quick check to see if there is transmit buffer space on
-+ * the ACX. This can't guarantee there is enough space for the packet
-+ * since we don't yet know how big it is, but it will prevent at least some
-+ * annoyances.
-+ */
-+ if (!adev->acx_txbuf_blocks_free) {
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ head = adev->tx_head;
-+ /*
-+ * txdesc points to ACX memory
-+ */
-+ txdesc = get_txdesc(adev, head);
-+ ctl8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+
-+ /*
-+ * If we don't own the buffer (HOSTOWN) it is certainly not free; however,
-+ * we may have previously thought we had enough memory to send
-+ * a packet, allocated the buffer then gave up when we found not enough
-+ * transmit buffer space on the ACX. In that case, HOSTOWN and
-+ * ACXDONE will both be set.
-+ */
-+ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_HOSTOWN))) {
-+ /* whoops, descr at current index is not free, so probably
-+ * ring buffer already full */
-+ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find "
-+ "free txdesc\n", head, ctl8);
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ /* Needed in case txdesc won't be eventually submitted for tx */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_ACXDONE_HOSTOWN);
-+
-+ adev->tx_free--;
-+ log(L_BUFT, "tx: got desc %u, %u remain\n",
-+ head, adev->tx_free);
-+ /* Keep a few free descs between head and tail of tx ring.
-+ ** It is not absolutely needed, just feels safer */
-+ if (adev->tx_free < TX_STOP_QUEUE) {
-+ log(L_BUF, "stop queue (%u tx desc left)\n",
-+ adev->tx_free);
-+ acx_stop_queue(adev->ndev, NULL);
-+ }
-+
-+ /* returning current descriptor, so advance to next free one */
-+ adev->tx_head = (head + 1) % TX_CNT;
-+end:
-+ FN_EXIT0;
-+
-+ return (tx_t*)txdesc;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_l_dealloc_tx
-+** Clears out a previously allocatedvoid acxmem_l_dealloc_tx(tx_t *tx_opaque);
-+ transmit descriptor. The ACX
-+** can get confused if we skip transmit descriptors in the queue,
-+** so when we don't need a descriptor return it to its original
-+** state and move the queue head pointer back.
-+**
-+*/
-+void
-+acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque)
-+{
-+ /*
-+ * txdesc is the address of the descriptor on the ACX.
-+ */
-+ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
-+ txdesc_t tmptxdesc;
-+ int index;
-+
-+ memset (&tmptxdesc, 0, sizeof(tmptxdesc));
-+ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
-+ tmptxdesc.u.r1.rate = 0x0a;
-+
-+ /*
-+ * Clear out all of the transmit descriptor except for the next pointer
-+ */
-+ copy_to_slavemem (adev, (u32) &(txdesc->HostMemPtr),
-+ (u8 *) &(tmptxdesc.HostMemPtr),
-+ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc));
-+
-+ /*
-+ * This is only called immediately after we've allocated, so we should
-+ * be able to set the head back to this descriptor.
-+ */
-+ index = ((u8*) txdesc - (u8*)adev->txdesc_start) / adev->txdesc_size;
-+ printk ("acx_dealloc: moving head from %d to %d\n", adev->tx_head, index);
-+ adev->tx_head = index;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void*
-+acxmem_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
-+{
-+ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_tx_data
-+**
-+** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
-+** Can be called from acx_i_start_xmit (data frames from net core).
-+**
-+** FIXME: in case of fragments, should loop over the number of
-+** pre-allocated tx descrs, properly setting up transfer data and
-+** CTL_xxx flags according to fragment number.
-+*/
-+void
-+acxmem_update_queue_indicator (acx_device_t *adev, int txqueue)
-+{
-+#ifdef USING_MORE_THAN_ONE_TRANSMIT_QUEUE
-+ u32 indicator;
-+ unsigned long flags;
-+ int count;
-+
-+ /*
-+ * Can't handle an interrupt while we're fiddling with the ACX's lock,
-+ * according to TI. The ACX is supposed to hold fw_lock for at most
-+ * 500ns.
-+ */
-+ local_irq_save (flags);
-+
-+ /*
-+ * Wait for ACX to release the lock (at most 500ns).
-+ */
-+ count = 0;
-+ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
-+ && (count++ < 50)) {
-+ ndelay (10);
-+ }
-+ if (count < 50) {
-+
-+ /*
-+ * Take out the host lock - anything non-zero will work, so don't worry about
-+ * be/le
-+ */
-+ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 1);
-+
-+ /*
-+ * Avoid a race condition
-+ */
-+ count = 0;
-+ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
-+ && (count++ < 50)) {
-+ ndelay (10);
-+ }
-+
-+ if (count < 50) {
-+ /*
-+ * Mark the queue active
-+ */
-+ indicator = read_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator));
-+ indicator |= cpu_to_le32 (1 << txqueue);
-+ write_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator), indicator);
-+ }
-+
-+ /*
-+ * Release the host lock
-+ */
-+ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 0);
-+
-+ }
-+
-+ /*
-+ * Restore interrupts
-+ */
-+ local_irq_restore (flags);
-+#endif
-+}
-+
-+void
-+acxmem_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len)
-+{
-+ /*
-+ * txdesc is the address on the ACX
-+ */
-+ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
-+ txhostdesc_t *hostdesc1, *hostdesc2;
-+ client_t *clt;
-+ u16 rate_cur;
-+ u8 Ctl_8, Ctl2_8;
-+ u32 addr;
-+
-+ FN_ENTER;
-+ /* fw doesn't tx such packets anyhow */
-+ if (unlikely(len < WLAN_HDR_A3_LEN))
-+ goto end;
-+
-+ hostdesc1 = get_txhostdesc(adev, txdesc);
-+ /* modify flag status in separate variable to be able to write it back
-+ * in one big swoop later (also in order to have less device memory
-+ * accesses) */
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */
-+
-+ hostdesc2 = hostdesc1 + 1;
-+
-+ /* DON'T simply set Ctl field to 0 here globally,
-+ * it needs to maintain a consistent flag status (those are state flags!!),
-+ * otherwise it may lead to severe disruption. Only set or reset particular
-+ * flags at the exact moment this is needed... */
-+
-+ /* let chip do RTS/CTS handshaking before sending
-+ * in case packet size exceeds threshold */
-+ if (len > adev->rts_threshold)
-+ SET_BIT(Ctl2_8, DESC_CTL2_RTS);
-+ else
-+ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS);
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1);
-+ break;
-+ case ACX_MODE_2_STA:
-+ clt = adev->ap_client;
-+ break;
-+#if 0
-+/* testing was done on acx111: */
-+ case ACX_MODE_MONITOR:
-+ SET_BIT(Ctl2_8, 0
-+/* sends CTS to self before packet */
-+ + DESC_CTL2_SEQ /* don't increase sequence field */
-+/* not working (looks like good fcs is still added) */
-+ + DESC_CTL2_FCS /* don't add the FCS */
-+/* not tested */
-+ + DESC_CTL2_MORE_FRAG
-+/* not tested */
-+ + DESC_CTL2_RETRY /* don't increase retry field */
-+/* not tested */
-+ + DESC_CTL2_POWER /* don't increase power mgmt. field */
-+/* no effect */
-+ + DESC_CTL2_WEP /* encrypt this frame */
-+/* not tested */
-+ + DESC_CTL2_DUR /* don't increase duration field */
-+ );
-+ /* fallthrough */
-+#endif
-+ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
-+ clt = NULL;
-+ break;
-+ }
-+
-+ rate_cur = clt ? clt->rate_cur : adev->rate_bcast;
-+ if (unlikely(!rate_cur)) {
-+ printk("acx: driver bug! bad ratemask\n");
-+ goto end;
-+ }
-+
-+ /* used in tx cleanup routine for auto rate and accounting: */
-+ put_txcr(adev, txdesc, clt, rate_cur);
-+
-+ write_slavemem16 (adev, (u32) &(txdesc->total_length), cpu_to_le16(len));
-+ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN);
-+ if (IS_ACX111(adev)) {
-+ /* note that if !txdesc->do_auto, txrate->cur
-+ ** has only one nonzero bit */
-+ txdesc->u.r2.rate111 = cpu_to_le16(
-+ rate_cur
-+ /* WARNING: I was never able to make it work with prism54 AP.
-+ ** It was falling down to 1Mbit where shortpre is not applicable,
-+ ** and not working at all at "5,11 basic rates only" setting.
-+ ** I even didn't see tx packets in radio packet capture.
-+ ** Disabled for now --vda */
-+ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */
-+ );
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ /* should add this to rate111 above as necessary */
-+ | (clt->pbcc511 ? RATE111_PBCC511 : 0)
-+#endif
-+ hostdesc1->length = cpu_to_le16(len);
-+ } else { /* ACX100 */
-+ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100;
-+ write_slavemem8 (adev, (u32) &(txdesc->u.r1.rate), rate_100);
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ if (clt->pbcc511) {
-+ if (n == RATE100_5 || n == RATE100_11)
-+ n |= RATE100_PBCC511;
-+ }
-+
-+ if (clt->shortpre && (clt->cur != RATE111_1))
-+ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */
-+#endif
-+ /* set autodma and reclaim and 1st mpdu */
-+ SET_BIT(Ctl_8, DESC_CTL_FIRSTFRAG);
-+
-+#if ACX_FRAGMENTATION
-+ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */
-+#endif
-+ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN);
-+
-+ /*
-+ * Since we're not using autodma copy the packet data to the acx now.
-+ * Even host descriptors point to the packet header, and the odd indexed
-+ * descriptor following points to the packet data.
-+ *
-+ * The first step is to find free memory in the ACX transmit buffers.
-+ * They don't necessarily map one to one with the transmit queue entries,
-+ * so search through them starting just after the last one used.
-+ */
-+ addr = allocate_acx_txbuf_space (adev, len);
-+ if (addr) {
-+ chaincopy_to_slavemem (adev, addr, hostdesc1->data, len);
-+ }
-+ else {
-+ /*
-+ * Bummer. We thought we might have enough room in the transmit
-+ * buffers to send this packet, but it turns out we don't. alloc_tx
-+ * has already marked this transmit descriptor as HOSTOWN and ACXDONE,
-+ * which means the ACX will hang when it gets to this descriptor unless
-+ * we do something about it. Having a bubble in the transmit queue just
-+ * doesn't seem to work, so we have to reset this transmit queue entry's
-+ * state to its original value and back up our head pointer to point
-+ * back to this entry.
-+ */
-+ hostdesc1->length = 0;
-+ hostdesc2->length = 0;
-+ write_slavemem16 (adev, (u32) &(txdesc->total_length), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG);
-+ adev->tx_head = ((u8*) txdesc - (u8*) adev->txdesc_start) / adev->txdesc_size;
-+ goto end;
-+ }
-+ /*
-+ * Tell the ACX where the packet is.
-+ */
-+ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), addr);
-+
-+ }
-+ /* don't need to clean ack/rts statistics here, already
-+ * done on descr cleanup */
-+
-+ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors
-+ * are now owned by the acx100; do this as LAST operation */
-+ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN);
-+ /* flush writes before we release hostdesc to the adapter here */
-+ //wmb();
-+
-+ /* write back modified flags */
-+ /*
-+ * At this point Ctl_8 should just be FIRSTFRAG
-+ */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl2_8),Ctl2_8);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), Ctl_8);
-+ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */
-+
-+ /*
-+ * Update the queue indicator to say there's data on the first queue.
-+ */
-+ acxmem_update_queue_indicator (adev, 0);
-+
-+ /* flush writes before we tell the adapter that it's its turn now */
-+ mmiowb();
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
-+ write_flush(adev);
-+
-+ /* log the packet content AFTER sending it,
-+ * in order to not delay sending any further than absolutely needed
-+ * Do separate logs for acx100/111 to have human-readable rates */
-+ if (unlikely(acx_debug & (L_XFER|L_DATA))) {
-+ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc;
-+ if (IS_ACX111(adev))
-+ printk("tx: pkt (%s): len %d "
-+ "rate %04X%s status %u\n",
-+ acx_get_packet_type_string(le16_to_cpu(fc)), len,
-+ le16_to_cpu(txdesc->u.r2.rate111),
-+ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "",
-+ adev->status);
-+ else
-+ printk("tx: pkt (%s): len %d rate %03u%s status %u\n",
-+ acx_get_packet_type_string(fc), len,
-+ read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate)),
-+ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "",
-+ adev->status);
-+
-+ if (acx_debug & L_DATA) {
-+ printk("tx: 802.11 [%d]: ", len);
-+ acx_dump_bytes(hostdesc1->data, len);
-+ }
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_clean_txdesc
-+**
-+** This function resets the txdescs' status when the ACX100
-+** signals the TX done IRQ (txdescs have been processed), starting with
-+** the pool index of the descriptor which we would use next,
-+** in order to make sure that we can be as fast as possible
-+** in filling new txdescs.
-+** Everytime we get called we know where the next packet to be cleaned is.
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_txbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_txbuffer(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+ u8 Ctl_8;
-+
-+ /* no FN_ENTER here, we don't want that */
-+ /* no locks here, since it's entirely non-critical code */
-+ txdesc = adev->txdesc_start;
-+ if (unlikely(!txdesc)) return;
-+ printk("tx: desc->Ctl8's:");
-+ for (i = 0; i < TX_CNT; i++) {
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ printk(" %02X", Ctl_8);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ printk("\n");
-+}
-+#endif
-+
-+
-+static void
-+handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger)
-+{
-+ const char *err = "unknown error";
-+
-+ /* hmm, should we handle this as a mask
-+ * of *several* bits?
-+ * For now I think only caring about
-+ * individual bits is ok... */
-+ switch (error) {
-+ case 0x01:
-+ err = "no Tx due to error in other fragment";
-+ adev->wstats.discard.fragment++;
-+ break;
-+ case 0x02:
-+ err = "Tx aborted";
-+ adev->stats.tx_aborted_errors++;
-+ break;
-+ case 0x04:
-+ err = "Tx desc wrong parameters";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x08:
-+ err = "WEP key not found";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x10:
-+ err = "MSDU lifetime timeout? - try changing "
-+ "'iwconfig retry lifetime XXX'";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x20:
-+ err = "excessive Tx retries due to either distance "
-+ "too high or unable to Tx or Tx frame error - "
-+ "try changing 'iwconfig txpower XXX' or "
-+ "'sens'itivity or 'retry'";
-+ adev->wstats.discard.retries++;
-+ /* Tx error 0x20 also seems to occur on
-+ * overheating, so I'm not sure whether we
-+ * actually want to do aggressive radio recalibration,
-+ * since people maybe won't notice then that their hardware
-+ * is slowly getting cooked...
-+ * Or is it still a safe long distance from utter
-+ * radio non-functionality despite many radio recalibs
-+ * to final destructive overheating of the hardware?
-+ * In this case we really should do recalib here...
-+ * I guess the only way to find out is to do a
-+ * potentially fatal self-experiment :-\
-+ * Or maybe only recalib in case we're using Tx
-+ * rate auto (on errors switching to lower speed
-+ * --> less heat?) or 802.11 power save mode?
-+ *
-+ * ok, just do it. */
-+ if (++adev->retry_errors_msg_ratelimit % 4 == 0) {
-+ if (adev->retry_errors_msg_ratelimit <= 20) {
-+ printk("%s: several excessive Tx "
-+ "retry errors occurred, attempting "
-+ "to recalibrate radio. Radio "
-+ "drift might be caused by increasing "
-+ "card temperature, please check the card "
-+ "before it's too late!\n",
-+ adev->ndev->name);
-+ if (adev->retry_errors_msg_ratelimit == 20)
-+ printk("disabling above message\n");
-+ }
-+
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+ }
-+ break;
-+ case 0x40:
-+ err = "Tx buffer overflow";
-+ adev->stats.tx_fifo_errors++;
-+ break;
-+ case 0x80:
-+ err = "DMA error";
-+ adev->wstats.discard.misc++;
-+ break;
-+ }
-+ adev->stats.tx_errors++;
-+ if (adev->stats.tx_errors <= 20)
-+ printk("%s: tx error 0x%02X, buf %02u! (%s)\n",
-+ adev->ndev->name, error, finger, err);
-+ else
-+ printk("%s: tx error 0x%02X, buf %02u!\n",
-+ adev->ndev->name, error, finger);
-+}
-+
-+
-+unsigned int
-+acxmem_l_clean_txdesc(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ unsigned finger;
-+ int num_cleaned;
-+ u16 r111;
-+ u8 error, ack_failures, rts_failures, rts_ok, r100, Ctl_8;
-+ u32 acxmem;
-+ txdesc_t tmptxdesc;
-+
-+ FN_ENTER;
-+
-+ /*
-+ * Set up a template descriptor for re-initialization. The only
-+ * things that get set are Ctl_8 and the rate, and the rate defaults
-+ * to 1Mbps.
-+ */
-+ memset (&tmptxdesc, 0, sizeof (tmptxdesc));
-+ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
-+ tmptxdesc.u.r1.rate = 0x0a;
-+
-+ if (unlikely(acx_debug & L_DEBUG))
-+ log_txbuffer(adev);
-+
-+ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail);
-+
-+ /* We know first descr which is not free yet. We advance it as far
-+ ** as we see correct bits set in following descs (if next desc
-+ ** is NOT free, we shouldn't advance at all). We know that in
-+ ** front of tx_tail may be "holes" with isolated free descs.
-+ ** We will catch up when all intermediate descs will be freed also */
-+
-+ finger = adev->tx_tail;
-+ num_cleaned = 0;
-+ while (likely(finger != adev->tx_head)) {
-+ txdesc = get_txdesc(adev, finger);
-+
-+ /* If we allocated txdesc on tx path but then decided
-+ ** to NOT use it, then it will be left as a free "bubble"
-+ ** in the "allocated for tx" part of the ring.
-+ ** We may meet it on the next ring pass here. */
-+
-+ /* stop if not marked as "tx finished" and "host owned" */
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ if ((Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN)
-+ != DESC_CTL_ACXDONE_HOSTOWN) {
-+ if (unlikely(!num_cleaned)) { /* maybe remove completely */
-+ log(L_BUFT, "clean_txdesc: tail isn't free. "
-+ "tail:%d head:%d\n",
-+ adev->tx_tail, adev->tx_head);
-+ }
-+ break;
-+ }
-+
-+ /* remember desc values... */
-+ error = read_slavemem8 (adev, (u32) &(txdesc->error));
-+ ack_failures = read_slavemem8 (adev, (u32) &(txdesc->ack_failures));
-+ rts_failures = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures));
-+ rts_ok = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok));
-+ r100 = read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate));
-+ r111 = le16_to_cpu(read_slavemem16 (adev, (u32) &(txdesc->u.r2.rate111)));
-+
-+ /* need to check for certain error conditions before we
-+ * clean the descriptor: we still need valid descr data here */
-+ if (unlikely(0x30 & error)) {
-+ /* only send IWEVTXDROP in case of retry or lifetime exceeded;
-+ * all other errors mean we screwed up locally */
-+ union iwreq_data wrqu;
-+ wlan_hdr_t *hdr;
-+ txhostdesc_t *hostdesc;
-+
-+ hostdesc = get_txhostdesc(adev, txdesc);
-+ hdr = (wlan_hdr_t *)hostdesc->data;
-+ MAC_COPY(wrqu.addr.sa_data, hdr->a1);
-+ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL);
-+ }
-+
-+ /*
-+ * Free up the transmit data buffers
-+ */
-+ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (acxmem) {
-+ reclaim_acx_txbuf_space (adev, acxmem);
-+ }
-+
-+ /* ...and free the desc by clearing all the fields
-+ except the next pointer */
-+ copy_to_slavemem (adev,
-+ (u32) &(txdesc->HostMemPtr),
-+ (u8 *) &(tmptxdesc.HostMemPtr),
-+ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc)
-+ );
-+
-+ adev->tx_free++;
-+ num_cleaned++;
-+
-+ if ((adev->tx_free >= TX_START_QUEUE)
-+ && (adev->status == ACX_STATUS_4_ASSOCIATED)
-+ && (acx_queue_stopped(adev->ndev))
-+ ) {
-+ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n",
-+ adev->tx_free);
-+ acx_wake_queue(adev->ndev, NULL);
-+ }
-+
-+ /* do error checking, rate handling and logging
-+ * AFTER having done the work, it's faster */
-+
-+ /* do rate handling */
-+ if (adev->rate_auto) {
-+ struct client *clt = get_txc(adev, txdesc);
-+ if (clt) {
-+ u16 cur = get_txr(adev, txdesc);
-+ if (clt->rate_cur == cur) {
-+ acx_l_handle_txrate_auto(adev, clt,
-+ cur, /* intended rate */
-+ r100, r111, /* actually used rate */
-+ (error & 0x30), /* was there an error? */
-+ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free);
-+ }
-+ }
-+ }
-+
-+ if (unlikely(error))
-+ handle_tx_error(adev, error, finger);
-+
-+ if (IS_ACX111(adev))
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n",
-+ finger, ack_failures, rts_failures, rts_ok, r111);
-+ else
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n",
-+ finger, ack_failures, rts_failures, rts_ok, r100);
-+
-+ /* update pointer for descr to be cleaned next */
-+ finger = (finger + 1) % TX_CNT;
-+ }
-+
-+ /* remember last position */
-+ adev->tx_tail = finger;
-+/* end: */
-+ FN_EXIT1(num_cleaned);
-+ return num_cleaned;
-+}
-+
-+/* clean *all* Tx descriptors, and regardless of their previous state.
-+ * Used for brute-force reset handling. */
-+void
-+acxmem_l_clean_txdesc_emergency(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+ u32 acxmem;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc = get_txdesc(adev, i);
-+
-+ /* free it */
-+ write_slavemem8 (adev, (u32) &(txdesc->ack_failures), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->error), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN);
-+
-+ /*
-+ * Clean up the memory allocated on the ACX for this transmit descriptor.
-+ */
-+ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (acxmem) {
-+ reclaim_acx_txbuf_space (adev, acxmem);
-+ }
-+
-+ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), 0);
-+ }
-+
-+ adev->tx_free = TX_CNT;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_create_tx_host_desc_queue
-+*/
-+
-+static void*
-+allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg)
-+{
-+ void *ptr;
-+ ptr = kmalloc (size, GFP_KERNEL);
-+ /*
-+ * The ACX can't use the physical address, so we'll have to fake it
-+ * later and it might be handy to have the virtual address.
-+ */
-+ *phy = (dma_addr_t) NULL;
-+
-+ if (ptr) {
-+ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n",
-+ msg, (int)size, ptr, (unsigned long long)*phy);
-+ memset(ptr, 0, size);
-+ return ptr;
-+ }
-+ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n",
-+ msg, (int)size);
-+ return NULL;
-+}
-+
-+
-+/*
-+ * In the generic slave memory access mode, most of the stuff in
-+ * the txhostdesc_t is unused. It's only here because the rest of
-+ * the ACX driver expects it to be since the PCI version uses indirect
-+ * host memory organization with DMA. Since we're not using DMA the
-+ * only use we have for the host descriptors is to store the packets
-+ * on the way out.
-+ */
-+static int
-+acxmem_s_create_tx_host_desc_queue(acx_device_t *adev)
-+{
-+ txhostdesc_t *hostdesc;
-+ u8 *txbuf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate TX buffer */
-+ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS;
-+
-+ adev->txbuf_start = allocate(adev, adev->txbuf_area_size,
-+ &adev->txbuf_startphy, "txbuf_start");
-+ if (!adev->txbuf_start)
-+ goto fail;
-+
-+ /* allocate the TX host descriptor queue pool */
-+ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc);
-+
-+ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size,
-+ &adev->txhostdesc_startphy, "txhostdesc_start");
-+ if (!adev->txhostdesc_start)
-+ goto fail;
-+
-+ /* check for proper alignment of TX host descriptor pool */
-+ if ((long) adev->txhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ hostdesc = adev->txhostdesc_start;
-+ txbuf = adev->txbuf_start;
-+
-+#if 0
-+/* Each tx buffer is accessed by hardware via
-+** txdesc -> txhostdesc(s) -> txbuffer(s).
-+** We use only one txhostdesc per txdesc, but it looks like
-+** acx111 is buggy: it accesses second txhostdesc
-+** (via hostdesc.desc_phy_next field) even if
-+** txdesc->length == hostdesc->length and thus
-+** entire packet was placed into first txhostdesc.
-+** Due to this bug acx111 hangs unless second txhostdesc
-+** has le16_to_cpu(hostdesc.length) = 3 (or larger)
-+** Storing NULL into hostdesc.desc_phy_next
-+** doesn't seem to help.
-+**
-+** Update: although it worked on Xterasys XN-2522g
-+** with len=3 trick, WG311v2 is even more bogus, doesn't work.
-+** Keeping this code (#ifdef'ed out) for documentational purposes.
-+*/
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ hostdesc_phy += sizeof(*hostdesc);
-+ if (!(i & 1)) {
-+ hostdesc->data_phy = cpu2acx(txbuf_phy);
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
-+ /* hostdesc->length = ... */
-+ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
-+ hostdesc->pNext = ptr2acx(NULL);
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ hostdesc->data = txbuf;
-+
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ } else {
-+ /* hostdesc->data_phy = ... */
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ /* hostdesc->Ctl_16 = ... */
-+ hostdesc->length = cpu_to_le16(3); /* bug workaround */
-+ /* hostdesc->desc_phy_next = ... */
-+ /* hostdesc->pNext = ... */
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ /* hostdesc->data = ... */
-+ }
-+ hostdesc++;
-+ }
-+#endif
-+/* We initialize two hostdescs so that they point to adjacent
-+** memory areas. Thus txbuf is really just a contiguous memory area */
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ /* ->data is a non-hardware field: */
-+ hostdesc->data = txbuf;
-+
-+ if (!(i & 1)) {
-+ txbuf += WLAN_HDR_A3_LEN;
-+ } else {
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
-+ }
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_tx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_create_rx_host_desc_queue
-+*/
-+/* the whole size of a data buffer (header plus data body)
-+ * plus 32 bytes safety offset at the end */
-+#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32)
-+
-+static int
-+acxmem_s_create_rx_host_desc_queue(acx_device_t *adev)
-+{
-+ rxhostdesc_t *hostdesc;
-+ rxbuffer_t *rxbuf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate the RX host descriptor queue pool */
-+ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc);
-+
-+ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size,
-+ &adev->rxhostdesc_startphy, "rxhostdesc_start");
-+ if (!adev->rxhostdesc_start)
-+ goto fail;
-+
-+ /* check for proper alignment of RX host descriptor pool */
-+ if ((long) adev->rxhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ /* allocate Rx buffer pool which will be used by the acx
-+ * to store the whole content of the received frames in it */
-+ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE;
-+
-+ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size,
-+ &adev->rxbuf_startphy, "rxbuf_start");
-+ if (!adev->rxbuf_start)
-+ goto fail;
-+
-+ rxbuf = adev->rxbuf_start;
-+ hostdesc = adev->rxhostdesc_start;
-+
-+ /* don't make any popular C programming pointer arithmetic mistakes
-+ * here, otherwise I'll kill you...
-+ * (and don't dare asking me why I'm warning you about that...) */
-+ for (i = 0; i < RX_CNT; i++) {
-+ hostdesc->data = rxbuf;
-+ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE);
-+ rxbuf++;
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_rx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_create_hostdesc_queues
-+*/
-+int
-+acxmem_s_create_hostdesc_queues(acx_device_t *adev)
-+{
-+ int result;
-+ result = acxmem_s_create_tx_host_desc_queue(adev);
-+ if (OK != result) return result;
-+ result = acxmem_s_create_rx_host_desc_queue(adev);
-+ return result;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_tx_desc_queue
-+*/
-+static void
-+acxmem_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start)
-+{
-+ txdesc_t *txdesc;
-+ u32 clr;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ if (IS_ACX100(adev))
-+ adev->txdesc_size = sizeof(*txdesc);
-+ else
-+ /* the acx111 txdesc is 4 bytes larger */
-+ adev->txdesc_size = sizeof(*txdesc) + 4;
-+
-+ /*
-+ * This refers to an ACX address, not one of ours
-+ */
-+ adev->txdesc_start = (txdesc_t *) tx_queue_start;
-+
-+ log(L_DEBUG, "adev->txdesc_start=%p\n",
-+ adev->txdesc_start);
-+
-+ adev->tx_free = TX_CNT;
-+ /* done by memset: adev->tx_head = 0; */
-+ /* done by memset: adev->tx_tail = 0; */
-+ txdesc = adev->txdesc_start;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111 has a preinitialized Tx buffer! */
-+ /* loop over whole send pool */
-+ /* FIXME: do we have to do the hostmemptr stuff here?? */
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
-+ /* reserve two (hdr desc and payload desc) */
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ } else {
-+ /* ACX100 Tx buffer needs to be initialized by us */
-+ /* clear whole send pool. sizeof is safe here (we are acx100) */
-+
-+ /*
-+ * adev->txdesc_start refers to device memory, so we can't write
-+ * directly to it.
-+ */
-+ clr = (u32) adev->txdesc_start;
-+ while (clr < (u32) adev->txdesc_start + (TX_CNT * sizeof(*txdesc))) {
-+ write_slavemem32 (adev, clr, 0);
-+ clr += 4;
-+ }
-+
-+ /* loop over whole send pool */
-+ for (i = 0; i < TX_CNT; i++) {
-+ log(L_DEBUG, "configure card tx descriptor: 0x%p, "
-+ "size: 0x%X\n", txdesc, adev->txdesc_size);
-+
-+ /* initialise ctl */
-+ /*
-+ * No auto DMA here
-+ */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8),
-+ (u8) (DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG));
-+ /* done by memset(0): txdesc->Ctl2_8 = 0; */
-+
-+ /* point to next txdesc */
-+ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
-+ (u32) cpu_to_le32 ((u8 *) txdesc + adev->txdesc_size));
-+
-+ /* go to the next one */
-+ /* ++ is safe here (we are acx100) */
-+ txdesc++;
-+ }
-+ /* go back to the last one */
-+ txdesc--;
-+ /* and point to the first making it a ring buffer */
-+ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
-+ (u32) cpu_to_le32 (tx_queue_start));
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_rx_desc_queue
-+*/
-+static void
-+acxmem_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start)
-+{
-+ rxdesc_t *rxdesc;
-+ u32 mem_offs;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* done by memset: adev->rx_tail = 0; */
-+
-+ /* ACX111 doesn't need any further config: preconfigures itself.
-+ * Simply print ring buffer for debugging */
-+ if (IS_ACX111(adev)) {
-+ /* rxdesc_start already set here */
-+
-+ adev->rxdesc_start = (rxdesc_t *) rx_queue_start;
-+
-+ rxdesc = adev->rxdesc_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc);
-+ rxdesc = adev->rxdesc_start = (rxdesc_t *)
-+ acx2cpu(rxdesc->pNextDesc);
-+ }
-+ } else {
-+ /* we didn't pre-calculate rxdesc_start in case of ACX100 */
-+ /* rxdesc_start should be right AFTER Tx pool */
-+ adev->rxdesc_start = (rxdesc_t *)
-+ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t)));
-+ /* NB: sizeof(txdesc_t) above is valid because we know
-+ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere!
-+ ** acx111's txdesc is larger! */
-+
-+ mem_offs = (u32) adev->rxdesc_start;
-+ while (mem_offs < (u32) adev->rxdesc_start + (RX_CNT * sizeof (*rxdesc))) {
-+ write_slavemem32 (adev, mem_offs, 0);
-+ mem_offs += 4;
-+ }
-+
-+ /* loop over whole receive pool */
-+ rxdesc = adev->rxdesc_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc);
-+ /* point to next rxdesc */
-+ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
-+ (u32) cpu_to_le32 ((u8 *) rxdesc + sizeof(*rxdesc)));
-+ /* go to the next one */
-+ rxdesc++;
-+ }
-+ /* go to the last one */
-+ rxdesc--;
-+
-+ /* and point to the first making it a ring buffer */
-+ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
-+ (u32) cpu_to_le32 (rx_queue_start));
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_desc_queues
-+*/
-+void
-+acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start)
-+{
-+ u32 *p;
-+ int i;
-+
-+ acxmem_create_tx_desc_queue(adev, tx_queue_start);
-+ acxmem_create_rx_desc_queue(adev, rx_queue_start);
-+ p = (u32 *) adev->acx_queue_indicator;
-+ for (i = 0; i < 4; i++) {
-+ write_slavemem32 (adev, (u32) p, 0);
-+ p++;
-+ }
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_proc_diag_output
-+*/
-+char*
-+acxmem_s_proc_diag_output(char *p, acx_device_t *adev)
-+{
-+ const char *rtl, *thd, *ttl;
-+ txdesc_t *txdesc;
-+ u8 Ctl_8;
-+ rxdesc_t *rxdesc;
-+ int i;
-+ u32 tmp;
-+ txdesc_t txd;
-+ u8 buf[0x200];
-+ int j, k;
-+
-+ FN_ENTER;
-+
-+#if DUMP_MEM_DURING_DIAG > 0
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("dump finished");
-+#endif
-+
-+ p += sprintf(p, "** Rx buf **\n");
-+ rxdesc = adev->rxdesc_start;
-+ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
-+ rtl = (i == adev->rx_tail) ? " [tail]" : "";
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+ if (Ctl_8 & DESC_CTL_HOSTOWN)
-+ p += sprintf(p, "%02u (%02x) FULL%s\n", i, Ctl_8, rtl);
-+ else
-+ p += sprintf(p, "%02u (%02x) empty%s\n", i, Ctl_8, rtl);
-+ rxdesc++;
-+ }
-+ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free,
-+ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running");
-+
-+ p += sprintf(p, "** Tx buf %d blocks total, %d available, free list head %04x\n",
-+ adev->acx_txbuf_numblocks, adev->acx_txbuf_blocks_free, adev->acx_txbuf_free);
-+ txdesc = adev->txdesc_start;
-+ if (txdesc) {
-+ for (i = 0; i < TX_CNT; i++) {
-+ thd = (i == adev->tx_head) ? " [head]" : "";
-+ ttl = (i == adev->tx_tail) ? " [tail]" : "";
-+ copy_from_slavemem (adev, (u8 *) &txd, (u32) txdesc, sizeof (txd));
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ if (Ctl_8 & DESC_CTL_ACXDONE)
-+ p += sprintf(p, "%02u ready to free (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ else if (Ctl_8 & DESC_CTL_HOSTOWN)
-+ p += sprintf(p, "%02u available (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ else
-+ p += sprintf(p, "%02u busy (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ tmp = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (tmp) {
-+ p += sprintf (p, " %04x", tmp);
-+ while ((tmp = read_slavemem32 (adev, (u32) tmp)) != 0x02000000) {
-+ tmp <<= 5;
-+ p += sprintf (p, " %04x", tmp);
-+ }
-+ }
-+ p += sprintf (p, "\n");
-+ p += sprintf (p, " %04x: %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %02x %02x %02x %02x\n"
-+ "%02x %02x %02x %02x %04x\n",
-+ (u32) txdesc,
-+ txd.pNextDesc.v, txd.HostMemPtr.v, txd.AcxMemPtr.v, txd.tx_time,
-+ txd.total_length, txd.Reserved,
-+ txd.dummy[0], txd.dummy[1], txd.dummy[2], txd.dummy[3],
-+ txd.Ctl_8, txd.Ctl2_8, txd.error, txd.ack_failures,
-+ txd.u.rts.rts_failures, txd.u.rts.rts_ok, txd.u.r1.rate, txd.u.r1.queue_ctrl,
-+ txd.queue_info
-+ );
-+ if (txd.AcxMemPtr.v) {
-+ copy_from_slavemem (adev, buf, txd.AcxMemPtr.v, sizeof (buf));
-+ for (j = 0; (j < txd.total_length) && (j<(sizeof(buf)-4)); j+=16) {
-+ p += sprintf (p, " ");
-+ for (k = 0; (k < 16) && (j+k < txd.total_length); k++) {
-+ p += sprintf (p, " %02x", buf[j+k+4]);
-+ }
-+ p += sprintf (p, "\n");
-+ }
-+ }
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ }
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** Generic slave data **\n"
-+ "irq_mask 0x%04x irq_status 0x%04x irq on acx 0x%04x\n"
-+ "txbuf_start 0x%p, txbuf_area_size %u\n"
-+ "txdesc_size %u, txdesc_start 0x%p\n"
-+ "txhostdesc_start 0x%p, txhostdesc_area_size %u\n"
-+ "txbuf start 0x%04x, txbuf size %d\n"
-+ "rxdesc_start 0x%p\n"
-+ "rxhostdesc_start 0x%p, rxhostdesc_area_size %u\n"
-+ "rxbuf_start 0x%p, rxbuf_area_size %u\n",
-+ adev->irq_mask, adev->irq_status, read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES),
-+ adev->txbuf_start, adev->txbuf_area_size,
-+ adev->txdesc_size, adev->txdesc_start,
-+ adev->txhostdesc_start, adev->txhostdesc_area_size,
-+ adev->acx_txbuf_start, adev->acx_txbuf_numblocks * adev->memblocksize,
-+ adev->rxdesc_start,
-+ adev->rxhostdesc_start, adev->rxhostdesc_area_size,
-+ adev->rxbuf_start, adev->rxbuf_area_size);
-+ FN_EXIT0;
-+ return p;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxmem_proc_eeprom_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < 0x400; i++) {
-+ acxmem_read_eeprom_byte(adev, i, p++);
-+ }
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void
-+acxmem_set_interrupt_mask(acx_device_t *adev)
-+{
-+ if (IS_ACX111(adev)) {
-+ adev->irq_mask = (u16) ~(0
-+ | HOST_INT_RX_DATA
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ /* | HOST_INT_RX_COMPLETE */
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ | HOST_INT_IV_ICV_FAILURE
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ | HOST_INT_OVERFLOW
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ | HOST_INT_FCS_THRESHOLD
-+ | HOST_INT_UNKNOWN
-+ );
-+ /* Or else acx100 won't signal cmd completion, right? */
-+ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */
-+ } else {
-+ adev->irq_mask = (u16) ~(0
-+ | HOST_INT_RX_DATA
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ /* | HOST_INT_RX_COMPLETE */
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ /* | HOST_INT_IV_ICV_FAILURE */
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ /* | HOST_INT_OVERFLOW */
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ /* | HOST_INT_FCS_THRESHOLD */
-+ /* | HOST_INT_BEACON_MISSED */
-+ );
-+ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */
-+ }
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ struct acx111_ie_tx_level tx_level;
-+
-+ /* since it can be assumed that at least the Maxim radio has a
-+ * maximum power output of 20dBm and since it also can be
-+ * assumed that these values drive the DAC responsible for
-+ * setting the linear Tx level, I'd guess that these values
-+ * should be the corresponding linear values for a dBm value,
-+ * in other words: calculate the values from that formula:
-+ * Y [dBm] = 10 * log (X [mW])
-+ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm)
-+ * and you're done...
-+ * Hopefully that's ok, but you never know if we're actually
-+ * right... (especially since Windows XP doesn't seem to show
-+ * actual Tx dBm values :-P) */
-+
-+ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the
-+ * values are EXACTLY mW!!! Not sure about RFMD and others,
-+ * though... */
-+ static const u8 dbm2val_maxim[21] = {
-+ 63, 63, 63, 62,
-+ 61, 61, 60, 60,
-+ 59, 58, 57, 55,
-+ 53, 50, 47, 43,
-+ 38, 31, 23, 13,
-+ 0
-+ };
-+ static const u8 dbm2val_rfmd[21] = {
-+ 0, 0, 0, 1,
-+ 2, 2, 3, 3,
-+ 4, 5, 6, 8,
-+ 10, 13, 16, 20,
-+ 25, 32, 41, 50,
-+ 63
-+ };
-+ const u8 *table;
-+
-+ switch (adev->radio_type) {
-+ case RADIO_MAXIM_0D:
-+ table = &dbm2val_maxim[0];
-+ break;
-+ case RADIO_RFMD_11:
-+ case RADIO_RALINK_15:
-+ table = &dbm2val_rfmd[0];
-+ break;
-+ default:
-+ printk("%s: unknown/unsupported radio type, "
-+ "cannot modify tx power level yet!\n",
-+ adev->ndev->name);
-+ return NOT_OK;
-+ }
-+ /*
-+ * The hx4700 EEPROM, at least, only supports 1 power setting. The configure
-+ * routine matches the PA bias with the gain, so just use its default value.
-+ * The values are: 0x2b for the gain and 0x03 for the PA bias. The firmware
-+ * writes the gain level to the Tx gain control DAC and the PA bias to the Maxim
-+ * radio's PA bias register. The firmware limits itself to 0 - 64 when writing to the
-+ * gain control DAC.
-+ *
-+ * Physically between the ACX and the radio, higher Tx gain control DAC values result
-+ * in less power output; 0 volts to the Maxim radio results in the highest output power
-+ * level, which I'm assuming matches up with 0 in the Tx Gain DAC register.
-+ *
-+ * Although there is only the 1 power setting, one of the radio firmware functions adjusts
-+ * the transmit power level up and down. That function is called by the ACX FIQ handler
-+ * under certain conditions.
-+ */
-+ tx_level.level = 1;
-+ //return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
-+
-+ printk("%s: changing radio power level to %u dBm (%u)\n",
-+ adev->ndev->name, level_dbm, table[level_dbm]);
-+ acxmem_s_write_phy_reg(adev, 0x11, table[level_dbm]);
-+
-+ return 0;
-+}
-+
-+void acxmem_e_release(struct device *dev) {
-+}
-+
-+/***********************************************************************
-+** acx_cs part
-+**
-+** called by pcmcia card service
-+*/
-+
-+/*
-+ The event() function is this driver's Card Services event handler.
-+ It will be called by Card Services when an appropriate card status
-+ event is received. The config() and release() entry points are
-+ used to configure or release a socket, in response to card
-+ insertion and ejection events. They are invoked from the acx_cs
-+ event handler.
-+*/
-+
-+static int acx_cs_config(struct pcmcia_device *link);
-+static void acx_cs_release(struct pcmcia_device *link);
-+
-+/*
-+ The attach() and detach() entry points are used to create and destroy
-+ "instances" of the driver, where each instance represents everything
-+ needed to manage one actual PCMCIA card.
-+*/
-+
-+static void acx_cs_detach(struct pcmcia_device *p_dev);
-+
-+/*
-+ You'll also need to prototype all the functions that will actually
-+ be used to talk to your device. See 'pcmem_cs' for a good example
-+ of a fully self-sufficient driver; the other drivers rely more or
-+ less on other parts of the kernel.
-+*/
-+
-+/*
-+ A linked list of "instances" of the acxnet device. Each actual
-+ PCMCIA card corresponds to one device instance, and is described
-+ by one struct pcmcia_device structure (defined in ds.h).
-+
-+ You may not want to use a linked list for this -- for example, the
-+ memory card driver uses an array of struct pcmcia_device pointers, where minor
-+ device numbers are used to derive the corresponding array index.
-+*/
-+
-+/*
-+ A driver needs to provide a dev_node_t structure for each device
-+ on a card. In some cases, there is only one device per card (for
-+ example, ethernet cards, modems). In other cases, there may be
-+ many actual or logical devices (SCSI adapters, memory cards with
-+ multiple partitions). The dev_node_t structures need to be kept
-+ in a linked list starting at the 'dev' field of a struct pcmcia_device
-+ structure. We allocate them in the card's private data structure,
-+ because they generally shouldn't be allocated dynamically.
-+
-+ In this case, we also provide a flag to indicate if a device is
-+ "stopped" due to a power management event, or card ejection. The
-+ device IO routines can use a flag like this to throttle IO to a
-+ card that is not ready to accept it.
-+*/
-+
-+
-+/*======================================================================
-+
-+ acx_attach() creates an "instance" of the driver, allocating
-+ local data structures for one device. The device is registered
-+ with Card Services.
-+
-+ The dev_link structure is initialized, but we don't actually
-+ configure the card at this point -- we wait until we receive a
-+ card insertion event.
-+
-+ ======================================================================*/
-+
-+static int acx_cs_probe(struct pcmcia_device *link)
-+{
-+ local_info_t *local;
-+ struct net_device *ndev;
-+
-+ DEBUG(0, "acx_attach()\n");
-+
-+ ndev = alloc_netdev(sizeof(acx_device_t), "wlan%d", dummy_netdev_init);
-+ if (!ndev) {
-+ printk("acx: no memory for netdevice struct\n");
-+ return -ENOMEM;
-+ }
-+
-+ /* Interrupt setup */
-+ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
-+ link->irq.IRQInfo1 = IRQ_LEVEL_ID;
-+ link->irq.Handler = acxmem_i_interrupt;
-+ link->irq.Instance = ndev;
-+
-+ /*
-+ General socket configuration defaults can go here. In this
-+ client, we assume very little, and rely on the CIS for almost
-+ everything. In most clients, many details (i.e., number, sizes,
-+ and attributes of IO windows) are fixed by the nature of the
-+ device, and can be hard-wired here.
-+ */
-+ link->conf.Attributes = CONF_ENABLE_IRQ;
-+ link->conf.IntType = INT_MEMORY_AND_IO;
-+ link->conf.Present = PRESENT_OPTION | PRESENT_COPY;
-+
-+ /* Allocate space for private device-specific data */
-+ local = kzalloc(sizeof(local_info_t), GFP_KERNEL);
-+ if (!local) {
-+ printk(KERN_ERR "acx_cs: no memory for new device\n");
-+ return -ENOMEM;
-+ }
-+ local->ndev = ndev;
-+
-+ link->priv = local;
-+
-+ return acx_cs_config(link);
-+} /* acx_attach */
-+
-+/*======================================================================
-+
-+ This deletes a driver "instance". The device is de-registered
-+ with Card Services. If it has been released, all local data
-+ structures are freed. Otherwise, the structures will be freed
-+ when the device is released.
-+
-+ ======================================================================*/
-+
-+static void acx_cs_detach(struct pcmcia_device *link)
-+{
-+ DEBUG(0, "acx_detach(0x%p)\n", link);
-+
-+
-+ if ( ((local_info_t*)link->priv)->ndev ) {
-+ acxmem_e_close( ((local_info_t*)link->priv)->ndev );
-+ }
-+
-+ acx_cs_release(link);
-+
-+ ((local_info_t*)link->priv)->ndev = NULL;
-+
-+ kfree(link->priv);
-+} /* acx_detach */
-+
-+/*======================================================================
-+
-+ acx_config() is scheduled to run after a CARD_INSERTION event
-+ is received, to configure the PCMCIA socket, and to make the
-+ device available to the system.
-+
-+ ======================================================================*/
-+
-+#define CS_CHECK(fn, ret) \
-+do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
-+
-+static int acx_cs_config(struct pcmcia_device *link)
-+{
-+ tuple_t tuple;
-+ cisparse_t parse;
-+ local_info_t *local = link->priv;
-+ int last_fn, last_ret;
-+ u_char buf[64];
-+ win_req_t req;
-+ memreq_t map;
-+// int i;
-+// acx_device_t *adev;
-+
-+// adev = (acx_device_t *)link->priv;
-+
-+ DEBUG(0, "acx_cs_config(0x%p)\n", link);
-+
-+ /*
-+ In this loop, we scan the CIS for configuration table entries,
-+ each of which describes a valid card configuration, including
-+ voltage, IO window, memory window, and interrupt settings.
-+
-+ We make no assumptions about the card to be configured: we use
-+ just the information available in the CIS. In an ideal world,
-+ this would work for any PCMCIA card, but it requires a complete
-+ and accurate CIS. In practice, a driver usually "knows" most of
-+ these things without consulting the CIS, and most client drivers
-+ will only use the CIS to fill in implementation-defined details.
-+ */
-+ tuple.Attributes = 0;
-+ tuple.TupleData = (cisdata_t *)buf;
-+ tuple.TupleDataMax = sizeof(buf);
-+ tuple.TupleOffset = 0;
-+ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
-+
-+ /* don't trust the CIS on this; Linksys got it wrong */
-+ //link->conf.Present = 0x63;
-+
-+ CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
-+ while (1) {
-+ cistpl_cftable_entry_t dflt = { 0 };
-+ cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
-+ if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
-+ pcmcia_parse_tuple(link, &tuple, &parse) != 0)
-+ goto next_entry;
-+
-+ if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;
-+ if (cfg->index == 0) goto next_entry;
-+ link->conf.ConfigIndex = cfg->index;
-+
-+ /* Does this card need audio output? */
-+ if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
-+ link->conf.Attributes |= CONF_ENABLE_SPKR;
-+ link->conf.Status = CCSR_AUDIO_ENA;
-+ }
-+
-+ /* Use power settings for Vcc and Vpp if present */
-+ /* Note that the CIS values need to be rescaled */
-+ if (cfg->vpp1.present & (1<<CISTPL_POWER_VNOM))
-+ link->conf.Vpp =
-+ cfg->vpp1.param[CISTPL_POWER_VNOM]/10000;
-+ else if (dflt.vpp1.present & (1<<CISTPL_POWER_VNOM))
-+ link->conf.Vpp =
-+ dflt.vpp1.param[CISTPL_POWER_VNOM]/10000;
-+
-+ /* Do we need to allocate an interrupt? */
-+ if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
-+ link->conf.Attributes |= CONF_ENABLE_IRQ;
-+ if ((cfg->mem.nwin > 0) || (dflt.mem.nwin > 0)) {
-+ cistpl_mem_t *mem =
-+ (cfg->mem.nwin) ? &cfg->mem : &dflt.mem;
-+// req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_AM|WIN_ENABLE|WIN_USE_WAIT;
-+ req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE|WIN_USE_WAIT;
-+ req.Base = mem->win[0].host_addr;
-+ req.Size = mem->win[0].len;
-+ req.Size=0x1000;
-+ req.AccessSpeed = 0;
-+ if (pcmcia_request_window(&link, &req, &link->win) != 0)
-+ goto next_entry;
-+ map.Page = 0; map.CardOffset = mem->win[0].card_addr;
-+ if (pcmcia_map_mem_page(link->win, &map) != 0)
-+ goto next_entry;
-+ else
-+ printk(KERN_INFO "MEMORY WINDOW FOUND!!!\n");
-+ }
-+ /* If we got this far, we're cool! */
-+ break;
-+
-+ next_entry:
-+ CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
-+ }
-+
-+ if (link->conf.Attributes & CONF_ENABLE_IRQ) {
-+ printk(KERN_INFO "requesting Irq...\n");
-+ CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
-+ }
-+
-+ /*
-+ This actually configures the PCMCIA socket -- setting up
-+ the I/O windows and the interrupt mapping, and putting the
-+ card and host interface into "Memory and IO" mode.
-+ */
-+ CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
-+ DEBUG(0,"RequestConfiguration OK\n");
-+
-+
-+ memwin.Base=req.Base;
-+ memwin.Size=req.Size;
-+
-+ acx_init_netdev(local->ndev, &link->dev, memwin.Base, memwin.Size, link->irq.AssignedIRQ);
-+
-+#if 1
-+ /*
-+ At this point, the dev_node_t structure(s) need to be
-+ initialized and arranged in a linked list at link->dev_node.
-+ */
-+ strcpy(local->node.dev_name, local->ndev->name );
-+ local->node.major = local->node.minor = 0;
-+ link->dev_node = &local->node;
-+
-+ /* Finally, report what we've done */
-+ printk(KERN_INFO "%s: index 0x%02x: ",
-+ local->ndev->name, link->conf.ConfigIndex);
-+#endif
-+ if (link->conf.Attributes & CONF_ENABLE_IRQ)
-+ printk("irq %d", link->irq.AssignedIRQ);
-+ if (link->io.NumPorts1)
-+ printk(", io 0x%04x-0x%04x", link->io.BasePort1,
-+ link->io.BasePort1+link->io.NumPorts1-1);
-+ if (link->io.NumPorts2)
-+ printk(" & 0x%04x-0x%04x", link->io.BasePort2,
-+ link->io.BasePort2+link->io.NumPorts2-1);
-+ if (link->win)
-+ printk(", mem 0x%06lx-0x%06lx\n", req.Base,
-+ req.Base+req.Size-1);
-+ return 0;
-+
-+ cs_failed:
-+ cs_error(link, last_fn, last_ret);
-+ acx_cs_release(link);
-+ return -ENODEV;
-+} /* acx_config */
-+
-+/*======================================================================
-+
-+ After a card is removed, acx_release() will unregister the
-+ device, and release the PCMCIA configuration. If the device is
-+ still open, this will be postponed until it is closed.
-+
-+ ======================================================================*/
-+
-+static void acx_cs_release(struct pcmcia_device *link)
-+{
-+ DEBUG(0, "acx_release(0x%p)\n", link);
-+ acxmem_e_remove(link);
-+ pcmcia_disable_device(link);
-+}
-+
-+static int acx_cs_suspend(struct pcmcia_device *link)
-+{
-+ local_info_t *local = link->priv;
-+
-+ pm_message_t state;
-+ acxmem_e_suspend ( local->ndev, state);
-+ /* Already done in suspend
-+ * netif_device_detach(local->ndev); */
-+
-+ return 0;
-+}
-+
-+static int acx_cs_resume(struct pcmcia_device *link)
-+{
-+ local_info_t *local = link->priv;
-+
-+ FN_ENTER;
-+ resume_ndev = local->ndev;
-+
-+ schedule_work( &fw_resume_work );
-+
-+ /* Already done in suspend
-+ if (link->open) {
-+ // do we need reset for ACX, if so what function nane is ?
-+ //reset_acx_card(local->eth_dev);
-+ netif_device_attach(local->ndev);
-+ } */
-+
-+ FN_EXIT0;
-+ return 0;
-+}
-+
-+static struct pcmcia_device_id acx_ids[] = {
-+ PCMCIA_DEVICE_MANF_CARD(0x0097, 0x8402),
-+ PCMCIA_DEVICE_MANF_CARD(0x0250, 0xb001),
-+ PCMCIA_DEVICE_NULL,
-+};
-+MODULE_DEVICE_TABLE(pcmcia, acx_ids);
-+
-+static struct pcmcia_driver acx_driver = {
-+ .owner = THIS_MODULE,
-+ .drv = {
-+ .name = "acx_cs",
-+ },
-+ .probe = acx_cs_probe,
-+ .remove = acx_cs_detach,
-+ .id_table = acx_ids,
-+ .suspend = acx_cs_suspend,
-+ .resume = acx_cs_resume,
-+};
-+
-+int acx_cs_init(void)
-+{
-+ /* return success if at least one succeeded */
-+ DEBUG(0, "acxcs_init()\n");
-+ return pcmcia_register_driver(&acx_driver);
-+}
-+
-+void acx_cs_cleanup(void)
-+{
-+ pcmcia_unregister_driver(&acx_driver);
-+}
-+
-+/*
-+ This program is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU General Public License
-+ as published by the Free Software Foundation; either version 2
-+ of the License, or (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ In addition:
-+
-+ Redistribution and use in source and binary forms, with or without
-+ modification, are permitted provided that the following conditions
-+ are met:
-+
-+ 1. Redistributions of source code must retain the above copyright
-+ notice, this list of conditions and the following disclaimer.
-+ 2. Redistributions in binary form must reproduce the above copyright
-+ notice, this list of conditions and the following disclaimer in the
-+ documentation and/or other materials provided with the distribution.
-+ 3. The name of the author may not be used to endorse or promote
-+ products derived from this software without specific prior written
-+ permission.
-+
-+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ POSSIBILITY OF SUCH DAMAGE.
-+*/
-+
-+MODULE_DESCRIPTION( "ACX Cardbus Driver" );
-+MODULE_LICENSE( "GPL" );
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/htcsable_acx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/htcsable_acx.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,118 @@
-+/*
-+ * WLAN (TI TNETW1100B) support in the HTC Sable
-+ *
-+ * Copyright (c) 2006 SDG Systems, LLC
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * 28-March-2006 Todd Blumer <todd@sdgsystems.com>
-+ */
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+
-+#include <asm/hardware.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <linux/mfd/asic3_base.h>
-+#include <asm/arch/htcsable-gpio.h>
-+#include <asm/arch/htcsable-asic.h>
-+#include <asm/io.h>
-+
-+#include "acx_hw.h"
-+
-+#define WLAN_BASE PXA_CS2_PHYS
-+
-+/*
-+off: b15 c8 d3
-+on: d3 c8 b5 b5-
-+*/
-+
-+#define GPIO_NR_HTCSABLE_ACX111 111
-+
-+static int
-+htcsable_wlan_stop( void );
-+
-+static int
-+htcsable_wlan_start( void )
-+{
-+ printk( "htcsable_wlan_start\n" );
-+
-+ /*asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_RESET, 0);*/
-+ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_PWR_3, 1<<GPIOC_ACX_PWR_3); /* related to acx */
-+ SET_HTCSABLE_GPIO(ACX111, 1);
-+ asic3_set_gpio_out_b(&htcsable_asic3.dev, 1<<GPIOB_ACX_PWR_1, 1<<GPIOB_ACX_PWR_1);
-+ asic3_set_gpio_out_d(&htcsable_asic3.dev, 1<<GPIOD_ACX_PWR_2, 1<<GPIOD_ACX_PWR_2);
-+ mdelay(260);
-+ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_RESET, 1<<GPIOC_ACX_RESET);
-+
-+ return 0;
-+}
-+
-+static int
-+htcsable_wlan_stop( void )
-+{
-+ printk( "htcsable_wlan_stop\n" );
-+ asic3_set_gpio_out_b(&htcsable_asic3.dev, 1<<GPIOB_ACX_PWR_1, 0);
-+ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_RESET, 0);
-+ asic3_set_gpio_out_d(&htcsable_asic3.dev, 1<<GPIOD_ACX_PWR_2, 0);
-+ SET_HTCSABLE_GPIO(ACX111, 0); /* not necessary to power down this one? */
-+ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_PWR_3, 0); /* not necessary to power down this one? */
-+
-+ return 0;
-+}
-+
-+static struct resource acx_resources[] = {
-+ [0] = {
-+ .start = WLAN_BASE,
-+ .end = WLAN_BASE + 0x20,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+// .start = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
-+// .end = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+static struct acx_hardware_data acx_data = {
-+ .start_hw = htcsable_wlan_start,
-+ .stop_hw = htcsable_wlan_stop,
-+};
-+
-+static struct platform_device acx_device = {
-+ .name = "acx-mem",
-+ .dev = {
-+ .platform_data = &acx_data,
-+ },
-+ .num_resources = ARRAY_SIZE( acx_resources ),
-+ .resource = acx_resources,
-+};
-+
-+static int __init
-+htcsable_wlan_init( void )
-+{
-+ printk( "htcsable_wlan_init: acx-mem platform_device_register\n" );
-+ acx_device.resource[1].start = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOB_IRQ_BASE+GPIOB_ACX_IRQ_N;
-+ acx_device.resource[1].end = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOB_IRQ_BASE+GPIOB_ACX_IRQ_N;
-+ return platform_device_register( &acx_device );
-+}
-+
-+
-+static void __exit
-+htcsable_wlan_exit( void )
-+{
-+ platform_device_unregister( &acx_device );
-+}
-+
-+module_init( htcsable_wlan_init );
-+module_exit( htcsable_wlan_exit );
-+
-+MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
-+MODULE_DESCRIPTION( "WLAN driver for HTC Sable" );
-+MODULE_LICENSE( "GPL" );
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/htcuniversal_acx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/htcuniversal_acx.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,108 @@
-+/*
-+ * WLAN (TI TNETW1100B) support in the HTC Universal
-+ *
-+ * Copyright (c) 2006 SDG Systems, LLC
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * 28-March-2006 Todd Blumer <todd@sdgsystems.com>
-+ */
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+
-+#include <asm/hardware.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <linux/soc/asic3_base.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+#include <asm/io.h>
-+
-+#include "acx_hw.h"
-+
-+#define WLAN_BASE PXA_CS2_PHYS
-+
-+
-+static int
-+htcuniversal_wlan_start( void )
-+{
-+ htcuniversal_egpio_enable(1<<EGPIO6_WIFI_ON);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_PWR1_ON, 1<<GPIOC_WIFI_PWR1_ON);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR3_ON, 1<<GPIOD_WIFI_PWR3_ON);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR2_ON, 1<<GPIOD_WIFI_PWR2_ON);
-+ mdelay(100);
-+
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_RESET, 0);
-+ mdelay(100);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_RESET, 1<<GPIOC_WIFI_RESET);
-+ mdelay(100);
-+ return 0;
-+}
-+
-+static int
-+htcuniversal_wlan_stop( void )
-+{
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_RESET, 0);
-+
-+ htcuniversal_egpio_disable(1<<EGPIO6_WIFI_ON);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_PWR1_ON, 0);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR2_ON, 0);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR3_ON, 0);
-+ return 0;
-+}
-+
-+static struct resource acx_resources[] = {
-+ [0] = {
-+ .start = WLAN_BASE,
-+ .end = WLAN_BASE + 0x20,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+// .start = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
-+// .end = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+static struct acx_hardware_data acx_data = {
-+ .start_hw = htcuniversal_wlan_start,
-+ .stop_hw = htcuniversal_wlan_stop,
-+};
-+
-+static struct platform_device acx_device = {
-+ .name = "acx-mem",
-+ .dev = {
-+ .platform_data = &acx_data,
-+ },
-+ .num_resources = ARRAY_SIZE( acx_resources ),
-+ .resource = acx_resources,
-+};
-+
-+static int __init
-+htcuniversal_wlan_init( void )
-+{
-+ printk( "htcuniversal_wlan_init: acx-mem platform_device_register\n" );
-+ acx_device.resource[1].start = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N;
-+ acx_device.resource[1].end = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N;
-+ return platform_device_register( &acx_device );
-+}
-+
-+
-+static void __exit
-+htcuniversal_wlan_exit( void )
-+{
-+ platform_device_unregister( &acx_device );
-+}
-+
-+module_init( htcuniversal_wlan_init );
-+module_exit( htcuniversal_wlan_exit );
-+
-+MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
-+MODULE_DESCRIPTION( "WLAN driver for HTC Universal" );
-+MODULE_LICENSE( "GPL" );
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/hx4700_acx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/hx4700_acx.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,108 @@
-+/*
-+ * WLAN (TI TNETW1100B) support in the hx470x.
-+ *
-+ * Copyright (c) 2006 SDG Systems, LLC
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * 28-March-2006 Todd Blumer <todd@sdgsystems.com>
-+ */
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+#include <linux/leds.h>
-+
-+#include <asm/hardware.h>
-+
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/hx4700-gpio.h>
-+#include <asm/arch/hx4700-core.h>
-+#include <asm/io.h>
-+
-+#include "acx_hw.h"
-+
-+#define WLAN_OFFSET 0x1000000
-+#define WLAN_BASE (PXA_CS5_PHYS+WLAN_OFFSET)
-+
-+
-+static int
-+hx4700_wlan_start( void )
-+{
-+ SET_HX4700_GPIO( WLAN_RESET_N, 0 );
-+ mdelay(5);
-+ hx4700_egpio_enable( EGPIO0_VCC_3V3_EN );
-+ mdelay(100);
-+ hx4700_egpio_enable( EGPIO7_VCC_3V3_WL_EN );
-+ mdelay(150);
-+ hx4700_egpio_enable( EGPIO1_WL_VREG_EN | EGPIO2_VCC_2V1_WL_EN |
-+ EGPIO6_WL1V8_EN );
-+ mdelay(10);
-+ SET_HX4700_GPIO( WLAN_RESET_N, 1 );
-+ mdelay(50);
-+ led_trigger_event_shared(hx4700_radio_trig, LED_FULL);
-+ return 0;
-+}
-+
-+static int
-+hx4700_wlan_stop( void )
-+{
-+ hx4700_egpio_disable( EGPIO0_VCC_3V3_EN | EGPIO1_WL_VREG_EN |
-+ EGPIO7_VCC_3V3_WL_EN | EGPIO2_VCC_2V1_WL_EN |
-+ EGPIO6_WL1V8_EN );
-+ SET_HX4700_GPIO( WLAN_RESET_N, 0 );
-+ led_trigger_event_shared(hx4700_radio_trig, LED_OFF);
-+ return 0;
-+}
-+
-+static struct resource acx_resources[] = {
-+ [0] = {
-+ .start = WLAN_BASE,
-+ .end = WLAN_BASE + 0x20,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+ .start = HX4700_IRQ(WLAN_IRQ_N),
-+ .end = HX4700_IRQ(WLAN_IRQ_N),
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+static struct acx_hardware_data acx_data = {
-+ .start_hw = hx4700_wlan_start,
-+ .stop_hw = hx4700_wlan_stop,
-+};
-+
-+static struct platform_device acx_device = {
-+ .name = "acx-mem",
-+ .dev = {
-+ .platform_data = &acx_data,
-+ },
-+ .num_resources = ARRAY_SIZE( acx_resources ),
-+ .resource = acx_resources,
-+};
-+
-+static int __init
-+hx4700_wlan_init( void )
-+{
-+ printk( "hx4700_wlan_init: acx-mem platform_device_register\n" );
-+ return platform_device_register( &acx_device );
-+}
-+
-+
-+static void __exit
-+hx4700_wlan_exit( void )
-+{
-+ platform_device_unregister( &acx_device );
-+}
-+
-+module_init( hx4700_wlan_init );
-+module_exit( hx4700_wlan_exit );
-+
-+MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
-+MODULE_DESCRIPTION( "WLAN driver for iPAQ hx4700" );
-+MODULE_LICENSE( "GPL" );
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/ioctl.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/ioctl.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,2748 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+#include <linux/kernel.h>
-+#include <linux/types.h>
-+#include <asm/io.h>
-+/* #include <asm/uaccess.h> */ /* required for 2.4.x kernels; verify_write() */
-+#include <linux/if_arp.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+*/
-+
-+/* channel frequencies
-+ * TODO: Currently, every other 802.11 driver keeps its own copy of this. In
-+ * the long run this should be integrated into ieee802_11.h or wireless.h or
-+ * whatever IEEE802.11x framework evolves */
-+static const u16 acx_channel_freq[] = {
-+ 2412, 2417, 2422, 2427, 2432, 2437, 2442,
-+ 2447, 2452, 2457, 2462, 2467, 2472, 2484,
-+};
-+
-+
-+/***********************************************************************
-+** acx_ioctl_commit
-+*/
-+static int
-+acx_ioctl_commit(struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask)
-+ acx_s_update_card_settings(adev);
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_name(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ static const char * const names[] = { "IEEE 802.11b+/g+", "IEEE 802.11b+" };
-+
-+ strcpy(wrqu->name, names[IS_ACX111(adev) ? 0 : 1]);
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_freq
-+*/
-+static int
-+acx_ioctl_set_freq(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int channel = -1;
-+ unsigned int mult = 1;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if (wrqu->freq.e == 0 && wrqu->freq.m <= 1000) {
-+ /* Setting by channel number */
-+ channel = wrqu->freq.m;
-+ } else {
-+ /* If setting by frequency, convert to a channel */
-+ int i;
-+
-+ for (i = 0; i < (6 - wrqu->freq.e); i++)
-+ mult *= 10;
-+
-+ for (i = 1; i <= 14; i++)
-+ if (wrqu->freq.m == acx_channel_freq[i - 1] * mult)
-+ channel = i;
-+ }
-+
-+ if (channel > 14) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ adev->channel = channel;
-+ /* hmm, the following code part is strange, but this is how
-+ * it was being done before... */
-+ log(L_IOCTL, "Changing to channel %d\n", channel);
-+ SET_BIT(adev->set_mask, GETSET_CHANNEL);
-+
-+ result = -EINPROGRESS; /* need to call commit handler */
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static inline int
-+acx_ioctl_get_freq(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ wrqu->freq.e = 0;
-+ wrqu->freq.m = adev->channel;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_mode
-+*/
-+static int
-+acx_ioctl_set_mode(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ switch (wrqu->mode) {
-+ case IW_MODE_AUTO:
-+ adev->mode = ACX_MODE_OFF;
-+ break;
-+ case IW_MODE_MONITOR:
-+ adev->mode = ACX_MODE_MONITOR;
-+ break;
-+ case IW_MODE_ADHOC:
-+ adev->mode = ACX_MODE_0_ADHOC;
-+ break;
-+ case IW_MODE_INFRA:
-+ adev->mode = ACX_MODE_2_STA;
-+ break;
-+ case IW_MODE_MASTER:
-+ printk("acx: master mode (HostAP) is very, very "
-+ "experimental! It might work partially, but "
-+ "better get prepared for nasty surprises "
-+ "at any time\n");
-+ adev->mode = ACX_MODE_3_AP;
-+ break;
-+ case IW_MODE_REPEAT:
-+ case IW_MODE_SECOND:
-+ default:
-+ result = -EOPNOTSUPP;
-+ goto end_unlock;
-+ }
-+
-+ log(L_ASSOC, "new adev->mode=%d\n", adev->mode);
-+ SET_BIT(adev->set_mask, GETSET_MODE);
-+ result = -EINPROGRESS;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_mode(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = 0;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_OFF:
-+ wrqu->mode = IW_MODE_AUTO; break;
-+ case ACX_MODE_MONITOR:
-+ wrqu->mode = IW_MODE_MONITOR; break;
-+ case ACX_MODE_0_ADHOC:
-+ wrqu->mode = IW_MODE_ADHOC; break;
-+ case ACX_MODE_2_STA:
-+ wrqu->mode = IW_MODE_INFRA; break;
-+ case ACX_MODE_3_AP:
-+ wrqu->mode = IW_MODE_MASTER; break;
-+ default:
-+ result = -EOPNOTSUPP;
-+ }
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_set_sens(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->sens;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ acx_sem_lock(adev);
-+
-+ adev->sensitivity = (1 == vwrq->disabled) ? 0 : vwrq->value;
-+ SET_BIT(adev->set_mask, GETSET_SENSITIVITY);
-+
-+ acx_sem_unlock(adev);
-+
-+ return -EINPROGRESS;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_sens(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->sens;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ if (IS_USB(adev))
-+ /* setting the PHY reg via fw cmd doesn't work yet */
-+ return -EOPNOTSUPP;
-+
-+ /* acx_sem_lock(adev); */
-+
-+ vwrq->value = adev->sensitivity;
-+ vwrq->disabled = (vwrq->value == 0);
-+ vwrq->fixed = 1;
-+
-+ /* acx_sem_unlock(adev); */
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_ap
-+**
-+** Sets the MAC address of the AP to associate with
-+*/
-+static int
-+acx_ioctl_set_ap(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct sockaddr *awrq = &wrqu->ap_addr;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = 0;
-+ const u8 *ap;
-+
-+ FN_ENTER;
-+ if (NULL == awrq) {
-+ result = -EFAULT;
-+ goto end;
-+ }
-+ if (ARPHRD_ETHER != awrq->sa_family) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ ap = awrq->sa_data;
-+ acxlog_mac(L_IOCTL, "set AP=", ap, "\n");
-+
-+ MAC_COPY(adev->ap, ap);
-+
-+ /* We want to start rescan in managed or ad-hoc mode,
-+ ** otherwise just set adev->ap.
-+ ** "iwconfig <if> ap <mac> mode managed": we must be able
-+ ** to set ap _first_ and _then_ set mode */
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ /* FIXME: if there is a convention on what zero AP means,
-+ ** please add a comment about that. I don't know of any --vda */
-+ if (mac_is_zero(ap)) {
-+ /* "off" == 00:00:00:00:00:00 */
-+ MAC_BCAST(adev->ap);
-+ log(L_IOCTL, "Not reassociating\n");
-+ } else {
-+ log(L_IOCTL, "Forcing reassociation\n");
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ }
-+ break;
-+ }
-+ result = -EINPROGRESS;
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_ap(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct sockaddr *awrq = &wrqu->ap_addr;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ if (ACX_STATUS_4_ASSOCIATED == adev->status) {
-+ /* as seen in Aironet driver, airo.c */
-+ MAC_COPY(awrq->sa_data, adev->bssid);
-+ } else {
-+ MAC_ZERO(awrq->sa_data);
-+ }
-+ awrq->sa_family = ARPHRD_ETHER;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_aplist
-+**
-+** Deprecated in favor of iwscan.
-+** We simply return the list of currently available stations in range,
-+** don't do a new scan.
-+*/
-+static int
-+acx_ioctl_get_aplist(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->data;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ struct sockaddr *address = (struct sockaddr *) extra;
-+ struct iw_quality qual[IW_MAX_AP];
-+ int i, cur;
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ /* we have AP list only in STA mode */
-+ if (ACX_MODE_2_STA != adev->mode) {
-+ result = -EOPNOTSUPP;
-+ goto end;
-+ }
-+
-+ cur = 0;
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ struct client *bss = &adev->sta_list[i];
-+ if (!bss->used) continue;
-+ MAC_COPY(address[cur].sa_data, bss->bssid);
-+ address[cur].sa_family = ARPHRD_ETHER;
-+ qual[cur].level = bss->sir;
-+ qual[cur].noise = bss->snr;
-+#ifndef OLD_QUALITY
-+ qual[cur].qual = acx_signal_determine_quality(qual[cur].level,
-+ qual[cur].noise);
-+#else
-+ qual[cur].qual = (qual[cur].noise <= 100) ?
-+ 100 - qual[cur].noise : 0;
-+#endif
-+ /* no scan: level/noise/qual not updated: */
-+ qual[cur].updated = 0;
-+ cur++;
-+ }
-+ if (cur) {
-+ dwrq->flags = 1;
-+ memcpy(extra + sizeof(struct sockaddr)*cur, &qual,
-+ sizeof(struct iw_quality)*cur);
-+ }
-+ dwrq->length = cur;
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_set_scan(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* don't start scan if device is not up yet */
-+ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
-+ result = -EAGAIN;
-+ goto end_unlock;
-+ }
-+
-+ /* This is NOT a rescan for new AP!
-+ ** Do not use SET_BIT(GETSET_RESCAN); */
-+ acx_s_cmd_start_scan(adev);
-+ result = OK;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+/* end: */
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_scan_add_station
-+*/
-+/* helper. not sure whether it's really a _s_leeping fn */
-+static char*
-+acx_s_scan_add_station(
-+ acx_device_t *adev,
-+ char *ptr,
-+ char *end_buf,
-+ struct client *bss)
-+{
-+ struct iw_event iwe;
-+ char *ptr_rate;
-+
-+ FN_ENTER;
-+
-+ /* MAC address has to be added first */
-+ iwe.cmd = SIOCGIWAP;
-+ iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
-+ MAC_COPY(iwe.u.ap_addr.sa_data, bss->bssid);
-+ acxlog_mac(L_IOCTL, "scan, station address: ", bss->bssid, "\n");
-+ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_ADDR_LEN);
-+
-+ /* Add ESSID */
-+ iwe.cmd = SIOCGIWESSID;
-+ iwe.u.data.length = bss->essid_len;
-+ iwe.u.data.flags = 1;
-+ log(L_IOCTL, "scan, essid: %s\n", bss->essid);
-+ ptr = iwe_stream_add_point(ptr, end_buf, &iwe, bss->essid);
-+
-+ /* Add mode */
-+ iwe.cmd = SIOCGIWMODE;
-+ if (bss->cap_info & (WF_MGMT_CAP_ESS | WF_MGMT_CAP_IBSS)) {
-+ if (bss->cap_info & WF_MGMT_CAP_ESS)
-+ iwe.u.mode = IW_MODE_MASTER;
-+ else
-+ iwe.u.mode = IW_MODE_ADHOC;
-+ log(L_IOCTL, "scan, mode: %d\n", iwe.u.mode);
-+ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_UINT_LEN);
-+ }
-+
-+ /* Add frequency */
-+ iwe.cmd = SIOCGIWFREQ;
-+ iwe.u.freq.m = acx_channel_freq[bss->channel - 1] * 100000;
-+ iwe.u.freq.e = 1;
-+ log(L_IOCTL, "scan, frequency: %d\n", iwe.u.freq.m);
-+ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_FREQ_LEN);
-+
-+ /* Add link quality */
-+ iwe.cmd = IWEVQUAL;
-+ /* FIXME: these values should be expressed in dBm, but we don't know
-+ * how to calibrate it yet */
-+ iwe.u.qual.level = bss->sir;
-+ iwe.u.qual.noise = bss->snr;
-+#ifndef OLD_QUALITY
-+ iwe.u.qual.qual = acx_signal_determine_quality(iwe.u.qual.level,
-+ iwe.u.qual.noise);
-+#else
-+ iwe.u.qual.qual = (iwe.u.qual.noise <= 100) ?
-+ 100 - iwe.u.qual.noise : 0;
-+#endif
-+ iwe.u.qual.updated = 7;
-+ log(L_IOCTL, "scan, link quality: %d/%d/%d\n",
-+ iwe.u.qual.level, iwe.u.qual.noise, iwe.u.qual.qual);
-+ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_QUAL_LEN);
-+
-+ /* Add encryption */
-+ iwe.cmd = SIOCGIWENCODE;
-+ if (bss->cap_info & WF_MGMT_CAP_PRIVACY)
-+ iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;
-+ else
-+ iwe.u.data.flags = IW_ENCODE_DISABLED;
-+ iwe.u.data.length = 0;
-+ log(L_IOCTL, "scan, encryption flags: %X\n", iwe.u.data.flags);
-+ ptr = iwe_stream_add_point(ptr, end_buf, &iwe, bss->essid);
-+
-+ /* add rates */
-+ iwe.cmd = SIOCGIWRATE;
-+ iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0;
-+ ptr_rate = ptr + IW_EV_LCP_LEN;
-+
-+ {
-+ u16 rate = bss->rate_cap;
-+ const u8* p = acx_bitpos2ratebyte;
-+ while (rate) {
-+ if (rate & 1) {
-+ iwe.u.bitrate.value = *p * 500000; /* units of 500kb/s */
-+ log(L_IOCTL, "scan, rate: %d\n", iwe.u.bitrate.value);
-+ ptr_rate = iwe_stream_add_value(ptr, ptr_rate, end_buf,
-+ &iwe, IW_EV_PARAM_LEN);
-+ }
-+ rate >>= 1;
-+ p++;
-+ }}
-+
-+ if ((ptr_rate - ptr) > (ptrdiff_t)IW_EV_LCP_LEN)
-+ ptr = ptr_rate;
-+
-+ /* drop remaining station data items for now */
-+
-+ FN_EXIT0;
-+ return ptr;
-+}
-+
-+
-+/***********************************************************************
-+ * acx_ioctl_get_scan
-+ */
-+static int
-+acx_ioctl_get_scan(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->data;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ char *ptr = extra;
-+ int i;
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* no scan available if device is not up yet */
-+ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
-+ log(L_IOCTL, "iface not up yet\n");
-+ result = -EAGAIN;
-+ goto end_unlock;
-+ }
-+
-+#ifdef ENODATA_TO_BE_USED_AFTER_SCAN_ERROR_ONLY
-+ if (adev->bss_table_count == 0) {
-+ /* no stations found */
-+ result = -ENODATA;
-+ goto end_unlock;
-+ }
-+#endif
-+
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ struct client *bss = &adev->sta_list[i];
-+ if (!bss->used) continue;
-+ ptr = acx_s_scan_add_station(adev, ptr,
-+ extra + IW_SCAN_MAX_DATA, bss);
-+ }
-+ dwrq->length = ptr - extra;
-+ dwrq->flags = 0;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+/* end: */
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_essid
-+*/
-+static int
-+acx_ioctl_set_essid(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->essid;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int len = dwrq->length;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if (len < 0) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ log(L_IOCTL, "set ESSID '%*s', length %d, flags 0x%04X\n",
-+ len, extra, len, dwrq->flags);
-+
-+#if WIRELESS_EXT >= 21
-+ /* WE 21 gives real ESSID strlen, not +1 (trailing zero):
-+ * see LKML "[patch] drivers/net/wireless: correct reported ssid lengths" */
-+ len += 1;
-+#endif
-+
-+ acx_sem_lock(adev);
-+
-+ /* ESSID disabled? */
-+ if (0 == dwrq->flags) {
-+ adev->essid_active = 0;
-+
-+ } else {
-+ if (len > IW_ESSID_MAX_SIZE) {
-+ result = -E2BIG;
-+ goto end_unlock;
-+ }
-+
-+ if (len >= sizeof(adev->essid))
-+ len = sizeof(adev->essid) - 1;
-+ memcpy(adev->essid, extra, len);
-+ adev->essid[len] = '\0';
-+ /* Paranoia: just in case there is a '\0'... */
-+ adev->essid_len = strlen(adev->essid);
-+ adev->essid_active = 1;
-+ }
-+
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+
-+ result = -EINPROGRESS;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_essid(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->essid;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ dwrq->flags = adev->essid_active;
-+ if (adev->essid_active) {
-+ memcpy(extra, adev->essid, adev->essid_len);
-+ extra[adev->essid_len] = '\0';
-+ dwrq->length = adev->essid_len + 1;
-+ dwrq->flags = 1;
-+ }
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_update_client_rates
-+*/
-+static void
-+acx_l_update_client_rates(acx_device_t *adev, u16 rate)
-+{
-+ int i;
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ client_t *clt = &adev->sta_list[i];
-+ if (!clt->used) continue;
-+ clt->rate_cfg = (clt->rate_cap & rate);
-+ if (!clt->rate_cfg) {
-+ /* no compatible rates left: kick client */
-+ acxlog_mac(L_ASSOC, "client ",clt->address," kicked: "
-+ "rates are not compatible anymore\n");
-+ acx_l_sta_list_del(adev, clt);
-+ continue;
-+ }
-+ clt->rate_cur &= clt->rate_cfg;
-+ if (!clt->rate_cur) {
-+ /* current rate become invalid, choose a valid one */
-+ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg);
-+ }
-+ if (IS_ACX100(adev))
-+ clt->rate_100 = acx_bitpos2rate100[highest_bit(clt->rate_cur)];
-+ clt->fallback_count = clt->stepup_count = 0;
-+ clt->ignore_count = 16;
-+ }
-+ switch (adev->mode) {
-+ case ACX_MODE_2_STA:
-+ if (adev->ap_client && !adev->ap_client->used) {
-+ /* Owwww... we kicked our AP!! :) */
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ }
-+ }
-+}
-+
-+
-+/***********************************************************************
-+*/
-+/* maps bits from acx111 rate to rate in Mbits */
-+static const unsigned int
-+acx111_rate_tbl[] = {
-+ 1000000, /* 0 */
-+ 2000000, /* 1 */
-+ 5500000, /* 2 */
-+ 6000000, /* 3 */
-+ 9000000, /* 4 */
-+ 11000000, /* 5 */
-+ 12000000, /* 6 */
-+ 18000000, /* 7 */
-+ 22000000, /* 8 */
-+ 24000000, /* 9 */
-+ 36000000, /* 10 */
-+ 48000000, /* 11 */
-+ 54000000, /* 12 */
-+ 500000, /* 13, should not happen */
-+ 500000, /* 14, should not happen */
-+ 500000, /* 15, should not happen */
-+};
-+
-+/***********************************************************************
-+ * acx_ioctl_set_rate
-+ */
-+static int
-+acx_ioctl_set_rate(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->param;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ u16 txrate_cfg = 1;
-+ unsigned long flags;
-+ int autorate;
-+ int result = -EINVAL;
-+
-+ FN_ENTER;
-+ log(L_IOCTL, "rate %d fixed 0x%X disabled 0x%X flags 0x%X\n",
-+ vwrq->value, vwrq->fixed, vwrq->disabled, vwrq->flags);
-+
-+ if ((0 == vwrq->fixed) || (1 == vwrq->fixed)) {
-+ int i = VEC_SIZE(acx111_rate_tbl)-1;
-+ if (vwrq->value == -1)
-+ /* "iwconfig rate auto" --> choose highest */
-+ vwrq->value = IS_ACX100(adev) ? 22000000 : 54000000;
-+ while (i >= 0) {
-+ if (vwrq->value == acx111_rate_tbl[i]) {
-+ txrate_cfg <<= i;
-+ i = 0;
-+ break;
-+ }
-+ i--;
-+ }
-+ if (i == -1) { /* no matching rate */
-+ result = -EINVAL;
-+ goto end;
-+ }
-+ } else { /* rate N, N<1000 (driver specific): we don't use this */
-+ result = -EOPNOTSUPP;
-+ goto end;
-+ }
-+ /* now: only one bit is set in txrate_cfg, corresponding to
-+ ** indicated rate */
-+
-+ autorate = (vwrq->fixed == 0) && (RATE111_1 != txrate_cfg);
-+ if (autorate) {
-+ /* convert 00100000 -> 00111111 */
-+ txrate_cfg = (txrate_cfg<<1)-1;
-+ }
-+
-+ if (IS_ACX100(adev)) {
-+ txrate_cfg &= RATE111_ACX100_COMPAT;
-+ if (!txrate_cfg) {
-+ result = -ENOTSUPP; /* rate is not supported by acx100 */
-+ goto end;
-+ }
-+ }
-+
-+ acx_sem_lock(adev);
-+ acx_lock(adev, flags);
-+
-+ adev->rate_auto = autorate;
-+ adev->rate_oper = txrate_cfg;
-+ adev->rate_basic = txrate_cfg;
-+ /* only do that in auto mode, non-auto will be able to use
-+ * one specific Tx rate only anyway */
-+ if (autorate) {
-+ /* only use 802.11b base rates, for standard 802.11b H/W
-+ * compatibility */
-+ adev->rate_basic &= RATE111_80211B_COMPAT;
-+ }
-+ adev->rate_bcast = 1 << lowest_bit(txrate_cfg);
-+ if (IS_ACX100(adev))
-+ adev->rate_bcast100 = acx_rate111to100(adev->rate_bcast);
-+ acx_l_update_ratevector(adev);
-+ acx_l_update_client_rates(adev, txrate_cfg);
-+
-+ /* Do/don't do tx rate fallback; beacon contents and rate */
-+ SET_BIT(adev->set_mask, SET_RATE_FALLBACK|SET_TEMPLATES);
-+ result = -EINPROGRESS;
-+
-+ acx_unlock(adev, flags);
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_rate
-+*/
-+static int
-+acx_ioctl_get_rate(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->param;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ u16 rate;
-+
-+ acx_lock(adev, flags);
-+ rate = adev->rate_oper;
-+ if (adev->ap_client)
-+ rate = adev->ap_client->rate_cur;
-+ vwrq->value = acx111_rate_tbl[highest_bit(rate)];
-+ vwrq->fixed = !adev->rate_auto;
-+ vwrq->disabled = 0;
-+ acx_unlock(adev, flags);
-+
-+ return OK;
-+}
-+
-+static int
-+acx_ioctl_set_rts(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->rts;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int val = vwrq->value;
-+
-+ if (vwrq->disabled)
-+ val = 2312;
-+ if ((val < 0) || (val > 2312))
-+ return -EINVAL;
-+
-+ adev->rts_threshold = val;
-+ return OK;
-+}
-+
-+static inline int
-+acx_ioctl_get_rts(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->rts;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ vwrq->value = adev->rts_threshold;
-+ vwrq->disabled = (vwrq->value >= 2312);
-+ vwrq->fixed = 1;
-+ return OK;
-+}
-+
-+
-+#if ACX_FRAGMENTATION
-+static int
-+acx_ioctl_set_frag(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int val = vwrq->value;
-+
-+ if (vwrq->disabled)
-+ val = 32767;
-+ else
-+ if ((val < 256) || (val > 2347))
-+ return -EINVAL;
-+
-+ adev->frag_threshold = val;
-+ return OK;
-+}
-+
-+static inline int
-+acx_ioctl_get_frag(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->frag;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ vwrq->value = adev->frag_threshold;
-+ vwrq->disabled = (vwrq->value >= 2347);
-+ vwrq->fixed = 1;
-+ return OK;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_encode
-+*/
-+static int
-+acx_ioctl_set_encode(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->encoding;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int index;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ log(L_IOCTL, "set encoding flags=0x%04X, size=%d, key: %s\n",
-+ dwrq->flags, dwrq->length, extra ? "set" : "No key");
-+
-+ acx_sem_lock(adev);
-+
-+ index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
-+
-+ if (dwrq->length > 0) {
-+ /* if index is 0 or invalid, use default key */
-+ if ((index < 0) || (index > 3))
-+ index = (int)adev->wep_current_index;
-+
-+ if (0 == (dwrq->flags & IW_ENCODE_NOKEY)) {
-+ if (dwrq->length > 29)
-+ dwrq->length = 29; /* restrict it */
-+
-+ if (dwrq->length > 13) {
-+ /* 29*8 == 232, WEP256 */
-+ adev->wep_keys[index].size = 29;
-+ } else if (dwrq->length > 5) {
-+ /* 13*8 == 104bit, WEP128 */
-+ adev->wep_keys[index].size = 13;
-+ } else if (dwrq->length > 0) {
-+ /* 5*8 == 40bit, WEP64 */
-+ adev->wep_keys[index].size = 5;
-+ } else {
-+ /* disable key */
-+ adev->wep_keys[index].size = 0;
-+ }
-+
-+ memset(adev->wep_keys[index].key, 0,
-+ sizeof(adev->wep_keys[index].key));
-+ memcpy(adev->wep_keys[index].key, extra, dwrq->length);
-+ }
-+ } else {
-+ /* set transmit key */
-+ if ((index >= 0) && (index <= 3))
-+ adev->wep_current_index = index;
-+ else if (0 == (dwrq->flags & IW_ENCODE_MODE)) {
-+ /* complain if we were not just setting
-+ * the key mode */
-+ result = -EINVAL;
-+ goto end_unlock;
-+ }
-+ }
-+
-+ adev->wep_enabled = !(dwrq->flags & IW_ENCODE_DISABLED);
-+
-+ if (dwrq->flags & IW_ENCODE_OPEN) {
-+ adev->auth_alg = WLAN_AUTH_ALG_OPENSYSTEM;
-+ adev->wep_restricted = 0;
-+
-+ } else if (dwrq->flags & IW_ENCODE_RESTRICTED) {
-+ adev->auth_alg = WLAN_AUTH_ALG_SHAREDKEY;
-+ adev->wep_restricted = 1;
-+ }
-+
-+ /* set flag to make sure the card WEP settings get updated */
-+ SET_BIT(adev->set_mask, GETSET_WEP);
-+
-+ log(L_IOCTL, "len=%d, key at 0x%p, flags=0x%X\n",
-+ dwrq->length, extra, dwrq->flags);
-+
-+ for (index = 0; index <= 3; index++) {
-+ if (adev->wep_keys[index].size) {
-+ log(L_IOCTL, "index=%d, size=%d, key at 0x%p\n",
-+ adev->wep_keys[index].index,
-+ (int) adev->wep_keys[index].size,
-+ adev->wep_keys[index].key);
-+ }
-+ }
-+ result = -EINPROGRESS;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_encode
-+*/
-+static int
-+acx_ioctl_get_encode(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->encoding;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
-+
-+ FN_ENTER;
-+
-+ if (adev->wep_enabled == 0) {
-+ dwrq->flags = IW_ENCODE_DISABLED;
-+ } else {
-+ if ((index < 0) || (index > 3))
-+ index = (int)adev->wep_current_index;
-+
-+ dwrq->flags = (adev->wep_restricted == 1) ?
-+ IW_ENCODE_RESTRICTED : IW_ENCODE_OPEN;
-+ dwrq->length = adev->wep_keys[index].size;
-+
-+ memcpy(extra, adev->wep_keys[index].key,
-+ adev->wep_keys[index].size);
-+ }
-+
-+ /* set the current index */
-+ SET_BIT(dwrq->flags, index + 1);
-+
-+ log(L_IOCTL, "len=%d, key=%p, flags=0x%X\n",
-+ dwrq->length, dwrq->pointer,
-+ dwrq->flags);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_set_power(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->power;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = -EINPROGRESS;
-+
-+ FN_ENTER;
-+
-+ log(L_IOCTL, "set 802.11 powersave flags=0x%04X\n", vwrq->flags);
-+
-+ acx_sem_lock(adev);
-+
-+ if (vwrq->disabled) {
-+ CLEAR_BIT(adev->ps_wakeup_cfg, PS_CFG_ENABLE);
-+ SET_BIT(adev->set_mask, GETSET_POWER_80211);
-+ goto end;
-+ }
-+ if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) {
-+ u16 ps_timeout = (vwrq->value * 1024) / 1000;
-+
-+ if (ps_timeout > 255)
-+ ps_timeout = 255;
-+ log(L_IOCTL, "setting PS timeout value to %d time units "
-+ "due to %dus\n", ps_timeout, vwrq->value);
-+ adev->ps_hangover_period = ps_timeout;
-+ } else if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_PERIOD) {
-+ u16 ps_periods = vwrq->value / 1000000;
-+
-+ if (ps_periods > 255)
-+ ps_periods = 255;
-+ log(L_IOCTL, "setting PS period value to %d periods "
-+ "due to %dus\n", ps_periods, vwrq->value);
-+ adev->ps_listen_interval = ps_periods;
-+ CLEAR_BIT(adev->ps_wakeup_cfg, PS_CFG_WAKEUP_MODE_MASK);
-+ SET_BIT(adev->ps_wakeup_cfg, PS_CFG_WAKEUP_EACH_ITVL);
-+ }
-+
-+ switch (vwrq->flags & IW_POWER_MODE) {
-+ /* FIXME: are we doing the right thing here? */
-+ case IW_POWER_UNICAST_R:
-+ CLEAR_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS);
-+ break;
-+ case IW_POWER_MULTICAST_R:
-+ SET_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS);
-+ break;
-+ case IW_POWER_ALL_R:
-+ SET_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS);
-+ break;
-+ case IW_POWER_ON:
-+ break;
-+ default:
-+ log(L_IOCTL, "unknown PS mode\n");
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ SET_BIT(adev->ps_wakeup_cfg, PS_CFG_ENABLE);
-+ SET_BIT(adev->set_mask, GETSET_POWER_80211);
-+end:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_ioctl_get_power(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->power;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ log(L_IOCTL, "Get 802.11 Power Save flags = 0x%04X\n", vwrq->flags);
-+ vwrq->disabled = ((adev->ps_wakeup_cfg & PS_CFG_ENABLE) == 0);
-+ if (vwrq->disabled)
-+ goto end;
-+
-+ if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) {
-+ vwrq->value = adev->ps_hangover_period * 1000 / 1024;
-+ vwrq->flags = IW_POWER_TIMEOUT;
-+ } else {
-+ vwrq->value = adev->ps_listen_interval * 1000000;
-+ vwrq->flags = IW_POWER_PERIOD|IW_POWER_RELATIVE;
-+ }
-+ if (adev->ps_options & PS_OPT_STILL_RCV_BCASTS)
-+ SET_BIT(vwrq->flags, IW_POWER_ALL_R);
-+ else
-+ SET_BIT(vwrq->flags, IW_POWER_UNICAST_R);
-+end:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_txpow
-+*/
-+static inline int
-+acx_ioctl_get_txpow(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->power;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ vwrq->flags = IW_TXPOW_DBM;
-+ vwrq->disabled = 0;
-+ vwrq->fixed = 1;
-+ vwrq->value = adev->tx_level_dbm;
-+
-+ log(L_IOCTL, "get txpower:%d dBm\n", adev->tx_level_dbm);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_txpow
-+*/
-+static int
-+acx_ioctl_set_txpow(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->power;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ log(L_IOCTL, "set txpower:%d, disabled:%d, flags:0x%04X\n",
-+ vwrq->value, vwrq->disabled, vwrq->flags);
-+
-+ acx_sem_lock(adev);
-+
-+ if (vwrq->disabled != adev->tx_disabled) {
-+ SET_BIT(adev->set_mask, GETSET_TX);
-+ }
-+
-+ adev->tx_disabled = vwrq->disabled;
-+ if (vwrq->value == -1) {
-+ if (vwrq->disabled) {
-+ adev->tx_level_dbm = 0;
-+ log(L_IOCTL, "disable radio tx\n");
-+ } else {
-+ /* adev->tx_level_auto = 1; */
-+ log(L_IOCTL, "set tx power auto (NIY)\n");
-+ }
-+ } else {
-+ adev->tx_level_dbm = vwrq->value <= 20 ? vwrq->value : 20;
-+ /* adev->tx_level_auto = 0; */
-+ log(L_IOCTL, "set txpower=%d dBm\n", adev->tx_level_dbm);
-+ }
-+ SET_BIT(adev->set_mask, GETSET_TXPOWER);
-+
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_range
-+*/
-+static int
-+acx_ioctl_get_range(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->data;
-+ struct iw_range *range = (struct iw_range *)extra;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int i,n;
-+
-+ FN_ENTER;
-+
-+ if (!dwrq->pointer)
-+ goto end;
-+
-+ dwrq->length = sizeof(struct iw_range);
-+ memset(range, 0, sizeof(struct iw_range));
-+ n = 0;
-+ for (i = 1; i <= 14; i++) {
-+ if (adev->reg_dom_chanmask & (1 << (i - 1))) {
-+ range->freq[n].i = i;
-+ range->freq[n].m = acx_channel_freq[i - 1] * 100000;
-+ range->freq[n].e = 1; /* units are MHz */
-+ n++;
-+ }
-+ }
-+ range->num_channels = n;
-+ range->num_frequency = n;
-+
-+ range->min_rts = 0;
-+ range->max_rts = 2312;
-+
-+#if ACX_FRAGMENTATION
-+ range->min_frag = 256;
-+ range->max_frag = 2312;
-+#endif
-+
-+ range->encoding_size[0] = 5;
-+ range->encoding_size[1] = 13;
-+ range->encoding_size[2] = 29;
-+ range->num_encoding_sizes = 3;
-+ range->max_encoding_tokens = 4;
-+
-+ range->min_pmp = 0;
-+ range->max_pmp = 5000000;
-+ range->min_pmt = 0;
-+ range->max_pmt = 65535 * 1000;
-+ range->pmp_flags = IW_POWER_PERIOD;
-+ range->pmt_flags = IW_POWER_TIMEOUT;
-+ range->pm_capa = IW_POWER_PERIOD | IW_POWER_TIMEOUT | IW_POWER_ALL_R;
-+
-+ if (IS_ACX100(adev)) { /* ACX100 has direct radio programming - arbitrary levels, so offer a lot */
-+ for (i = 0; i <= IW_MAX_TXPOWER - 1; i++)
-+ range->txpower[i] = 20 * i / (IW_MAX_TXPOWER - 1);
-+ range->num_txpower = IW_MAX_TXPOWER;
-+ range->txpower_capa = IW_TXPOW_DBM;
-+ }
-+ else {
-+ int count = min(IW_MAX_TXPOWER, (int)adev->cfgopt_power_levels.len);
-+ for (i = 0; i <= count; i++)
-+ range->txpower[i] = adev->cfgopt_power_levels.list[i];
-+ range->num_txpower = count;
-+ /* this list is given in mW */
-+ range->txpower_capa = IW_TXPOW_MWATT;
-+ }
-+
-+ range->we_version_compiled = WIRELESS_EXT;
-+ range->we_version_source = 0x9;
-+
-+ range->retry_capa = IW_RETRY_LIMIT;
-+ range->retry_flags = IW_RETRY_LIMIT;
-+ range->min_retry = 1;
-+ range->max_retry = 255;
-+
-+ range->r_time_flags = IW_RETRY_LIFETIME;
-+ range->min_r_time = 0;
-+ /* FIXME: lifetime ranges and orders of magnitude are strange?? */
-+ range->max_r_time = 65535;
-+
-+ if (IS_USB(adev))
-+ range->sensitivity = 0;
-+ else if (IS_ACX111(adev))
-+ range->sensitivity = 3;
-+ else
-+ range->sensitivity = 255;
-+
-+ for (i=0; i < adev->rate_supported_len; i++) {
-+ range->bitrate[i] = (adev->rate_supported[i] & ~0x80) * 500000;
-+ /* never happens, but keep it, to be safe: */
-+ if (range->bitrate[i] == 0)
-+ break;
-+ }
-+ range->num_bitrates = i;
-+
-+ range->max_qual.qual = 100;
-+ range->max_qual.level = 100;
-+ range->max_qual.noise = 100;
-+ /* TODO: better values */
-+ range->avg_qual.qual = 90;
-+ range->avg_qual.level = 80;
-+ range->avg_qual.noise = 2;
-+
-+end:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** Private functions
-+*/
-+
-+/***********************************************************************
-+** acx_ioctl_get_nick
-+*/
-+static inline int
-+acx_ioctl_get_nick(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->data;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ strcpy(extra, adev->nick);
-+ dwrq->length = strlen(extra) + 1;
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_nick
-+*/
-+static int
-+acx_ioctl_set_nick(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_point *dwrq = &wrqu->data;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ if (dwrq->length > IW_ESSID_MAX_SIZE + 1) {
-+ result = -E2BIG;
-+ goto end_unlock;
-+ }
-+
-+ /* extra includes trailing \0, so it's ok */
-+ strcpy(adev->nick, extra);
-+ result = OK;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_retry
-+*/
-+static int
-+acx_ioctl_get_retry(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->retry;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned int type = vwrq->flags & IW_RETRY_TYPE;
-+ unsigned int modifier = vwrq->flags & IW_RETRY_MODIFIER;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* return the short retry number by default */
-+ if (type == IW_RETRY_LIFETIME) {
-+ vwrq->flags = IW_RETRY_LIFETIME;
-+ vwrq->value = adev->msdu_lifetime;
-+ } else if (modifier == IW_RETRY_MAX) {
-+ vwrq->flags = IW_RETRY_LIMIT | IW_RETRY_MAX;
-+ vwrq->value = adev->long_retry;
-+ } else {
-+ vwrq->flags = IW_RETRY_LIMIT;
-+ if (adev->long_retry != adev->short_retry)
-+ SET_BIT(vwrq->flags, IW_RETRY_MIN);
-+ vwrq->value = adev->short_retry;
-+ }
-+
-+ /* can't be disabled */
-+ vwrq->disabled = (u8)0;
-+ result = OK;
-+
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_retry
-+*/
-+static int
-+acx_ioctl_set_retry(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->retry;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if (!vwrq) {
-+ result = -EFAULT;
-+ goto end;
-+ }
-+ if (vwrq->disabled) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ result = -EINVAL;
-+ if (IW_RETRY_LIMIT == (vwrq->flags & IW_RETRY_TYPE)) {
-+ printk("old retry limits: short %d long %d\n",
-+ adev->short_retry, adev->long_retry);
-+ if (vwrq->flags & IW_RETRY_MAX) {
-+ adev->long_retry = vwrq->value;
-+ } else if (vwrq->flags & IW_RETRY_MIN) {
-+ adev->short_retry = vwrq->value;
-+ } else {
-+ /* no modifier: set both */
-+ adev->long_retry = vwrq->value;
-+ adev->short_retry = vwrq->value;
-+ }
-+ printk("new retry limits: short %d long %d\n",
-+ adev->short_retry, adev->long_retry);
-+ SET_BIT(adev->set_mask, GETSET_RETRY);
-+ result = -EINPROGRESS;
-+ }
-+ else if (vwrq->flags & IW_RETRY_LIFETIME) {
-+ adev->msdu_lifetime = vwrq->value;
-+ printk("new MSDU lifetime: %d\n", adev->msdu_lifetime);
-+ SET_BIT(adev->set_mask, SET_MSDU_LIFETIME);
-+ result = -EINPROGRESS;
-+ }
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/************************ private ioctls ******************************/
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_debug
-+*/
-+#if ACX_DEBUG
-+static int
-+acx_ioctl_set_debug(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ unsigned int debug_new = *((unsigned int *)extra);
-+ int result = -EINVAL;
-+
-+ log(L_ANY, "setting debug from %04X to %04X\n", acx_debug, debug_new);
-+ acx_debug = debug_new;
-+
-+ result = OK;
-+ return result;
-+
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_ioctl_list_reg_domain
-+*/
-+static int
-+acx_ioctl_list_reg_domain(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ int i = 1;
-+ const char * const *entry = acx_reg_domain_strings;
-+
-+ printk("dom# chan# domain/country\n");
-+ while (*entry)
-+ printk("%4d %s\n", i++, *entry++);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_reg_domain
-+*/
-+static int
-+acx_ioctl_set_reg_domain(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if ((*extra < 1) || ((size_t)*extra > acx_reg_domain_ids_len)) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ adev->reg_dom_id = acx_reg_domain_ids[*extra - 1];
-+ SET_BIT(adev->set_mask, GETSET_REG_DOMAIN);
-+
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_reg_domain
-+*/
-+static int
-+acx_ioctl_get_reg_domain(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int dom,i;
-+
-+ /* no locking */
-+ dom = adev->reg_dom_id;
-+
-+ for (i = 1; i <= acx_reg_domain_ids_len; i++) {
-+ if (acx_reg_domain_ids[i-1] == dom) {
-+ log(L_IOCTL, "regulatory domain is currently set "
-+ "to %d (0x%X): %s\n", i, dom,
-+ acx_reg_domain_strings[i-1]);
-+ *extra = i;
-+ break;
-+ }
-+ }
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_short_preamble
-+*/
-+static const char * const
-+preamble_modes[] = {
-+ "off",
-+ "on",
-+ "auto (peer capability dependent)",
-+ "unknown mode, error"
-+};
-+
-+static int
-+acx_ioctl_set_short_preamble(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int i;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if ((unsigned char)*extra > 2) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ adev->preamble_mode = (u8)*extra;
-+ switch (adev->preamble_mode) {
-+ case 0: /* long */
-+ adev->preamble_cur = 0;
-+ break;
-+ case 1:
-+ /* short, kick incapable peers */
-+ adev->preamble_cur = 1;
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ client_t *clt = &adev->sta_list[i];
-+ if (!clt->used) continue;
-+ if (!(clt->cap_info & WF_MGMT_CAP_SHORT)) {
-+ clt->used = CLIENT_EMPTY_SLOT_0;
-+ }
-+ }
-+ switch (adev->mode) {
-+ case ACX_MODE_2_STA:
-+ if (adev->ap_client && !adev->ap_client->used) {
-+ /* We kicked our AP :) */
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ }
-+ }
-+ break;
-+ case 2: /* auto. short only if all peers are short-capable */
-+ adev->preamble_cur = 1;
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ client_t *clt = &adev->sta_list[i];
-+ if (!clt->used) continue;
-+ if (!(clt->cap_info & WF_MGMT_CAP_SHORT)) {
-+ adev->preamble_cur = 0;
-+ break;
-+ }
-+ }
-+ break;
-+ }
-+ printk("new short preamble setting: configured %s, active %s\n",
-+ preamble_modes[adev->preamble_mode],
-+ preamble_modes[adev->preamble_cur]);
-+ result = OK;
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_short_preamble
-+*/
-+static int
-+acx_ioctl_get_short_preamble(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ acx_sem_lock(adev);
-+
-+ printk("current short preamble setting: configured %s, active %s\n",
-+ preamble_modes[adev->preamble_mode],
-+ preamble_modes[adev->preamble_cur]);
-+
-+ *extra = (char)adev->preamble_mode;
-+
-+ acx_sem_unlock(adev);
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_antenna
-+**
-+** TX and RX antenna can be set separately but this function good
-+** for testing 0-4 bits
-+*/
-+static int
-+acx_ioctl_set_antenna(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ acx_sem_lock(adev);
-+
-+ printk("old antenna value: 0x%02X (COMBINED bit mask)\n"
-+ "Rx antenna selection:\n"
-+ "0x00 ant. 1\n"
-+ "0x40 ant. 2\n"
-+ "0x80 full diversity\n"
-+ "0xc0 partial diversity\n"
-+ "0x0f dwell time mask (in units of us)\n"
-+ "Tx antenna selection:\n"
-+ "0x00 ant. 2\n" /* yep, those ARE reversed! */
-+ "0x20 ant. 1\n"
-+ "new antenna value: 0x%02X\n",
-+ adev->antenna, (u8)*extra);
-+
-+ adev->antenna = (u8)*extra;
-+ SET_BIT(adev->set_mask, GETSET_ANTENNA);
-+
-+ acx_sem_unlock(adev);
-+
-+ return -EINPROGRESS;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_antenna
-+*/
-+static int
-+acx_ioctl_get_antenna(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ /* no locking. it's pointless to lock a single load */
-+ printk("current antenna value: 0x%02X (COMBINED bit mask)\n"
-+ "Rx antenna selection:\n"
-+ "0x00 ant. 1\n"
-+ "0x40 ant. 2\n"
-+ "0x80 full diversity\n"
-+ "0xc0 partial diversity\n"
-+ "Tx antenna selection:\n"
-+ "0x00 ant. 2\n" /* yep, those ARE reversed! */
-+ "0x20 ant. 1\n", adev->antenna);
-+
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_rx_antenna
-+**
-+** 0 = antenna1; 1 = antenna2; 2 = full diversity; 3 = partial diversity
-+** Could anybody test which antenna is the external one?
-+*/
-+static int
-+acx_ioctl_set_rx_antenna(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if (*extra > 3) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ printk("old antenna value: 0x%02X\n", adev->antenna);
-+
-+ acx_sem_lock(adev);
-+
-+ adev->antenna &= 0x3f;
-+ SET_BIT(adev->antenna, (*extra << 6));
-+ SET_BIT(adev->set_mask, GETSET_ANTENNA);
-+ printk("new antenna value: 0x%02X\n", adev->antenna);
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_tx_antenna
-+**
-+** Arguments: 0 == antenna2; 1 == antenna1;
-+** Could anybody test which antenna is the external one?
-+*/
-+static int
-+acx_ioctl_set_tx_antenna(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ if (*extra > 1) {
-+ result = -EINVAL;
-+ goto end;
-+ }
-+
-+ printk("old antenna value: 0x%02X\n", adev->antenna);
-+
-+ acx_sem_lock(adev);
-+
-+ adev->antenna &= ~0x30;
-+ SET_BIT(adev->antenna, ((*extra & 0x01) << 5));
-+ SET_BIT(adev->set_mask, GETSET_ANTENNA);
-+ printk("new antenna value: 0x%02X\n", adev->antenna);
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_wlansniff
-+**
-+** can we just remove this in favor of monitor mode? --vda
-+*/
-+static int
-+acx_ioctl_wlansniff(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned int *params = (unsigned int*)extra;
-+ unsigned int enable = (unsigned int)(params[0] > 0);
-+ int result;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* not using printk() here, since it distorts kismet display
-+ * when printk messages activated */
-+ log(L_IOCTL, "setting monitor to: 0x%02X\n", params[0]);
-+
-+ switch (params[0]) {
-+ case 0:
-+ /* no monitor mode. hmm, should we simply ignore it
-+ * or go back to enabling adev->netdev->type ARPHRD_ETHER? */
-+ break;
-+ case 1:
-+ adev->monitor_type = ARPHRD_IEEE80211_PRISM;
-+ break;
-+ case 2:
-+ adev->monitor_type = ARPHRD_IEEE80211;
-+ break;
-+ }
-+
-+ if (params[0]) {
-+ adev->mode = ACX_MODE_MONITOR;
-+ SET_BIT(adev->set_mask, GETSET_MODE);
-+ }
-+
-+ if (enable) {
-+ adev->channel = params[1];
-+ SET_BIT(adev->set_mask, GETSET_RX);
-+ }
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_unknown11
-+** FIXME: looks like some sort of "iwpriv kick_sta MAC" but it's broken
-+*/
-+static int
-+acx_ioctl_unknown11(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+#ifdef BROKEN
-+ struct iw_param *vwrq = &wrqu->param;
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ client_t client;
-+ int result;
-+
-+ acx_sem_lock(adev);
-+ acx_lock(adev, flags);
-+
-+ acx_l_transmit_disassoc(adev, &client);
-+ result = OK;
-+
-+ acx_unlock(adev, flags);
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+#endif
-+ return -EINVAL;
-+}
-+
-+
-+/***********************************************************************
-+** debug helper function to be able to debug various issues relatively easily
-+*/
-+static int
-+acx_ioctl_dbg_set_masks(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ const unsigned int *params = (unsigned int*)extra;
-+ int result;
-+
-+ acx_sem_lock(adev);
-+
-+ log(L_IOCTL, "setting flags in settings mask: "
-+ "get_mask %08X set_mask %08X\n"
-+ "before: get_mask %08X set_mask %08X\n",
-+ params[0], params[1],
-+ adev->get_mask, adev->set_mask);
-+ SET_BIT(adev->get_mask, params[0]);
-+ SET_BIT(adev->set_mask, params[1]);
-+ log(L_IOCTL, "after: get_mask %08X set_mask %08X\n",
-+ adev->get_mask, adev->set_mask);
-+ result = -EINPROGRESS; /* immediately call commit handler */
-+
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+* acx_ioctl_set_rates
-+*
-+* This ioctl takes string parameter. Examples:
-+* iwpriv wlan0 SetRates "1,2"
-+* use 1 and 2 Mbit rates, both are in basic rate set
-+* iwpriv wlan0 SetRates "1,2 5,11"
-+* use 1,2,5.5,11 Mbit rates. 1 and 2 are basic
-+* iwpriv wlan0 SetRates "1,2 5c,11c"
-+* same ('c' means 'CCK modulation' and it is a default for 5 and 11)
-+* iwpriv wlan0 SetRates "1,2 5p,11p"
-+* use 1,2,5.5,11 Mbit, 1,2 are basic. 5 and 11 are using PBCC
-+* iwpriv wlan0 SetRates "1,2,5,11 22p"
-+* use 1,2,5.5,11,22 Mbit. 1,2,5.5 and 11 are basic. 22 is using PBCC
-+* (this is the maximum acx100 can do (modulo x4 mode))
-+* iwpriv wlan0 SetRates "1,2,5,11 22"
-+* same. 802.11 defines only PBCC modulation
-+* for 22 and 33 Mbit rates, so there is no ambiguity
-+* iwpriv wlan0 SetRates "1,2,5,11 6o,9o,12o,18o,24o,36o,48o,54o"
-+* 1,2,5.5 and 11 are basic. 11g OFDM rates are enabled but
-+* they are not in basic rate set. 22 Mbit is disabled.
-+* iwpriv wlan0 SetRates "1,2,5,11 6,9,12,18,24,36,48,54"
-+* same. OFDM is default for 11g rates except 22 and 33 Mbit,
-+* thus 'o' is optional
-+* iwpriv wlan0 SetRates "1,2,5,11 6d,9d,12d,18d,24d,36d,48d,54d"
-+* 1,2,5.5 and 11 are basic. 11g CCK-OFDM rates are enabled
-+* (acx111 does not support CCK-OFDM, driver will reject this cmd)
-+* iwpriv wlan0 SetRates "6,9,12 18,24,36,48,54"
-+* 6,9,12 are basic, rest of 11g rates is enabled. Using OFDM
-+*/
-+#include "setrate.c"
-+
-+/* disallow: 33Mbit (unsupported by hw) */
-+/* disallow: CCKOFDM (unsupported by hw) */
-+static int
-+acx111_supported(int mbit, int modulation, void *opaque)
-+{
-+ if (mbit==33) return -ENOTSUPP;
-+ if (modulation==DOT11_MOD_CCKOFDM) return -ENOTSUPP;
-+ return OK;
-+}
-+
-+static const u16
-+acx111mask[] = {
-+ [DOT11_RATE_1 ] = RATE111_1 ,
-+ [DOT11_RATE_2 ] = RATE111_2 ,
-+ [DOT11_RATE_5 ] = RATE111_5 ,
-+ [DOT11_RATE_11] = RATE111_11,
-+ [DOT11_RATE_22] = RATE111_22,
-+ /* [DOT11_RATE_33] = */
-+ [DOT11_RATE_6 ] = RATE111_6 ,
-+ [DOT11_RATE_9 ] = RATE111_9 ,
-+ [DOT11_RATE_12] = RATE111_12,
-+ [DOT11_RATE_18] = RATE111_18,
-+ [DOT11_RATE_24] = RATE111_24,
-+ [DOT11_RATE_36] = RATE111_36,
-+ [DOT11_RATE_48] = RATE111_48,
-+ [DOT11_RATE_54] = RATE111_54,
-+};
-+
-+static u32
-+acx111_gen_mask(int mbit, int modulation, void *opaque)
-+{
-+ /* lower 16 bits show selected 1, 2, CCK and OFDM rates */
-+ /* upper 16 bits show selected PBCC rates */
-+ u32 m = acx111mask[rate_mbit2enum(mbit)];
-+ if (modulation==DOT11_MOD_PBCC)
-+ return m<<16;
-+ return m;
-+}
-+
-+static int
-+verify_rate(u32 rate, int chip_type)
-+{
-+ /* never happens. be paranoid */
-+ if (!rate) return -EINVAL;
-+
-+ /* disallow: mixing PBCC and CCK at 5 and 11Mbit
-+ ** (can be supported, but needs complicated handling in tx code) */
-+ if (( rate & ((RATE111_11+RATE111_5)<<16) )
-+ && ( rate & (RATE111_11+RATE111_5) )
-+ ) {
-+ return -ENOTSUPP;
-+ }
-+ if (CHIPTYPE_ACX100 == chip_type) {
-+ if ( rate & ~(RATE111_ACX100_COMPAT+(RATE111_ACX100_COMPAT<<16)) )
-+ return -ENOTSUPP;
-+ }
-+ return 0;
-+}
-+
-+static int
-+acx_ioctl_set_rates(struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ int result;
-+ u32 brate = 0, orate = 0; /* basic, operational rate set */
-+
-+ FN_ENTER;
-+
-+ log(L_IOCTL, "set_rates %s\n", extra);
-+ result = fill_ratemasks(extra, &brate, &orate,
-+ acx111_supported, acx111_gen_mask, 0);
-+ if (result) goto end;
-+ SET_BIT(orate, brate);
-+ log(L_IOCTL, "brate %08X orate %08X\n", brate, orate);
-+
-+ result = verify_rate(brate, adev->chip_type);
-+ if (result) goto end;
-+ result = verify_rate(orate, adev->chip_type);
-+ if (result) goto end;
-+
-+ acx_sem_lock(adev);
-+ acx_lock(adev, flags);
-+
-+ adev->rate_basic = brate;
-+ adev->rate_oper = orate;
-+ /* TODO: ideally, we shall monitor highest basic rate
-+ ** which was successfully sent to every peer
-+ ** (say, last we checked, everybody could hear 5.5 Mbits)
-+ ** and use that for bcasts when we want to reach all peers.
-+ ** For beacons, we probably shall use lowest basic rate
-+ ** because we want to reach all *potential* new peers too */
-+ adev->rate_bcast = 1 << lowest_bit(brate);
-+ if (IS_ACX100(adev))
-+ adev->rate_bcast100 = acx_rate111to100(adev->rate_bcast);
-+ adev->rate_auto = !has_only_one_bit(orate);
-+ acx_l_update_client_rates(adev, orate);
-+ /* TODO: get rid of ratevector, build it only when needed */
-+ acx_l_update_ratevector(adev);
-+
-+ /* Do/don't do tx rate fallback; beacon contents and rate */
-+ SET_BIT(adev->set_mask, SET_RATE_FALLBACK|SET_TEMPLATES);
-+ result = -EINPROGRESS;
-+
-+ acx_unlock(adev, flags);
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_get_phy_chan_busy_percentage
-+*/
-+static int
-+acx_ioctl_get_phy_chan_busy_percentage(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ struct {
-+ u16 type;
-+ u16 len;
-+ u32 busytime;
-+ u32 totaltime;
-+ } ACX_PACKED usage;
-+ int result;
-+
-+ acx_sem_lock(adev);
-+
-+ if (OK != acx_s_interrogate(adev, &usage, ACX1xx_IE_MEDIUM_USAGE)) {
-+ result = NOT_OK;
-+ goto end_unlock;
-+ }
-+
-+ usage.busytime = le32_to_cpu(usage.busytime);
-+ usage.totaltime = le32_to_cpu(usage.totaltime);
-+
-+ /* yes, this is supposed to be "Medium" (singular of media),
-+ not "average"! OK, reword the message to make it obvious... */
-+ printk("%s: busy percentage of medium (since last invocation): %d%% "
-+ "(%u of %u microseconds)\n",
-+ ndev->name,
-+ usage.busytime / ((usage.totaltime / 100) + 1),
-+ usage.busytime, usage.totaltime);
-+
-+ result = OK;
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_ed_threshold
-+*/
-+static inline int
-+acx_ioctl_set_ed_threshold(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ acx_sem_lock(adev);
-+
-+ printk("old ED threshold value: %d\n", adev->ed_threshold);
-+ adev->ed_threshold = (unsigned char)*extra;
-+ printk("new ED threshold value: %d\n", (unsigned char)*extra);
-+ SET_BIT(adev->set_mask, GETSET_ED_THRESH);
-+
-+ acx_sem_unlock(adev);
-+
-+ return -EINPROGRESS;
-+}
-+
-+
-+/***********************************************************************
-+** acx_ioctl_set_cca
-+*/
-+static inline int
-+acx_ioctl_set_cca(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ acx_sem_lock(adev);
-+
-+ printk("old CCA value: 0x%02X\n", adev->cca);
-+ adev->cca = (unsigned char)*extra;
-+ printk("new CCA value: 0x%02X\n", (unsigned char)*extra);
-+ SET_BIT(adev->set_mask, GETSET_CCA);
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static const char * const
-+scan_modes[] = { "active", "passive", "background" };
-+
-+static void
-+acx_print_scan_params(acx_device_t *adev, const char* head)
-+{
-+ printk("%s: %smode %d (%s), min chan time %dTU, "
-+ "max chan time %dTU, max scan rate byte: %d\n",
-+ adev->ndev->name, head,
-+ adev->scan_mode, scan_modes[adev->scan_mode],
-+ adev->scan_probe_delay, adev->scan_duration, adev->scan_rate);
-+}
-+
-+static int
-+acx_ioctl_set_scan_params(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+ const int *params = (int *)extra;
-+
-+ acx_sem_lock(adev);
-+
-+ acx_print_scan_params(adev, "old scan parameters: ");
-+ if ((params[0] != -1) && (params[0] >= 0) && (params[0] <= 2))
-+ adev->scan_mode = params[0];
-+ if (params[1] != -1)
-+ adev->scan_probe_delay = params[1];
-+ if (params[2] != -1)
-+ adev->scan_duration = params[2];
-+ if ((params[3] != -1) && (params[3] <= 255))
-+ adev->scan_rate = params[3];
-+ acx_print_scan_params(adev, "new scan parameters: ");
-+ SET_BIT(adev->set_mask, GETSET_RESCAN);
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+static int
-+acx_ioctl_get_scan_params(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+ int *params = (int *)extra;
-+
-+ acx_sem_lock(adev);
-+
-+ acx_print_scan_params(adev, "current scan parameters: ");
-+ params[0] = adev->scan_mode;
-+ params[1] = adev->scan_probe_delay;
-+ params[2] = adev->scan_duration;
-+ params[3] = adev->scan_rate;
-+ result = OK;
-+
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx100_ioctl_set_led_power(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ static const char * const led_modes[] = { "off", "on", "LinkQuality" };
-+
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result;
-+
-+ acx_sem_lock(adev);
-+
-+ printk("%s: power LED status: old %d (%s), ",
-+ ndev->name,
-+ adev->led_power,
-+ led_modes[adev->led_power]);
-+ adev->led_power = extra[0];
-+ if (adev->led_power > 2) adev->led_power = 2;
-+ printk("new %d (%s)\n",
-+ adev->led_power,
-+ led_modes[adev->led_power]);
-+
-+ if (adev->led_power == 2) {
-+ printk("%s: max link quality setting: old %d, ",
-+ ndev->name, adev->brange_max_quality);
-+ if (extra[1])
-+ adev->brange_max_quality = extra[1];
-+ printk("new %d\n", adev->brange_max_quality);
-+ }
-+
-+ SET_BIT(adev->set_mask, GETSET_LED_POWER);
-+
-+ result = -EINPROGRESS;
-+
-+ acx_sem_unlock(adev);
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static inline int
-+acx100_ioctl_get_led_power(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ acx_sem_lock(adev);
-+
-+ extra[0] = adev->led_power;
-+ if (adev->led_power == 2)
-+ extra[1] = adev->brange_max_quality;
-+ else
-+ extra[1] = -1;
-+
-+ acx_sem_unlock(adev);
-+
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx111_ioctl_info(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->param;
-+ if (!IS_PCI(ndev2adev(ndev)))
-+ return OK;
-+ return acx111pci_ioctl_info(ndev, info, vwrq, extra);
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx100_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ union iwreq_data *wrqu,
-+ char *extra)
-+{
-+ struct iw_param *vwrq = &wrqu->param;
-+ if (IS_USB(ndev2adev(ndev))) {
-+ printk("acx: set_phy_amp_bias() is not supported on USB\n");
-+ return OK;
-+ }
-+#ifdef ACX_MEM
-+ return acx100mem_ioctl_set_phy_amp_bias(ndev, info, vwrq, extra);
-+#else
-+ return acx100pci_ioctl_set_phy_amp_bias(ndev, info, vwrq, extra);
-+#endif
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static const iw_handler acx_ioctl_handler[] =
-+{
-+ acx_ioctl_commit, /* SIOCSIWCOMMIT */
-+ acx_ioctl_get_name, /* SIOCGIWNAME */
-+ NULL, /* SIOCSIWNWID */
-+ NULL, /* SIOCGIWNWID */
-+ acx_ioctl_set_freq, /* SIOCSIWFREQ */
-+ acx_ioctl_get_freq, /* SIOCGIWFREQ */
-+ acx_ioctl_set_mode, /* SIOCSIWMODE */
-+ acx_ioctl_get_mode, /* SIOCGIWMODE */
-+ acx_ioctl_set_sens, /* SIOCSIWSENS */
-+ acx_ioctl_get_sens, /* SIOCGIWSENS */
-+ NULL, /* SIOCSIWRANGE */
-+ acx_ioctl_get_range, /* SIOCGIWRANGE */
-+ NULL, /* SIOCSIWPRIV */
-+ NULL, /* SIOCGIWPRIV */
-+ NULL, /* SIOCSIWSTATS */
-+ NULL, /* SIOCGIWSTATS */
-+#if IW_HANDLER_VERSION > 4
-+ iw_handler_set_spy, /* SIOCSIWSPY */
-+ iw_handler_get_spy, /* SIOCGIWSPY */
-+ iw_handler_set_thrspy, /* SIOCSIWTHRSPY */
-+ iw_handler_get_thrspy, /* SIOCGIWTHRSPY */
-+#else /* IW_HANDLER_VERSION > 4 */
-+#ifdef WIRELESS_SPY
-+ NULL /* acx_ioctl_set_spy FIXME */, /* SIOCSIWSPY */
-+ NULL /* acx_ioctl_get_spy */, /* SIOCGIWSPY */
-+#else /* WSPY */
-+ NULL, /* SIOCSIWSPY */
-+ NULL, /* SIOCGIWSPY */
-+#endif /* WSPY */
-+ NULL, /* [nothing] */
-+ NULL, /* [nothing] */
-+#endif /* IW_HANDLER_VERSION > 4 */
-+ acx_ioctl_set_ap, /* SIOCSIWAP */
-+ acx_ioctl_get_ap, /* SIOCGIWAP */
-+ NULL, /* [nothing] */
-+ acx_ioctl_get_aplist, /* SIOCGIWAPLIST */
-+ acx_ioctl_set_scan, /* SIOCSIWSCAN */
-+ acx_ioctl_get_scan, /* SIOCGIWSCAN */
-+ acx_ioctl_set_essid, /* SIOCSIWESSID */
-+ acx_ioctl_get_essid, /* SIOCGIWESSID */
-+ acx_ioctl_set_nick, /* SIOCSIWNICKN */
-+ acx_ioctl_get_nick, /* SIOCGIWNICKN */
-+ NULL, /* [nothing] */
-+ NULL, /* [nothing] */
-+ acx_ioctl_set_rate, /* SIOCSIWRATE */
-+ acx_ioctl_get_rate, /* SIOCGIWRATE */
-+ acx_ioctl_set_rts, /* SIOCSIWRTS */
-+ acx_ioctl_get_rts, /* SIOCGIWRTS */
-+#if ACX_FRAGMENTATION
-+ acx_ioctl_set_frag, /* SIOCSIWFRAG */
-+ acx_ioctl_get_frag, /* SIOCGIWFRAG */
-+#else
-+ NULL, /* SIOCSIWFRAG */
-+ NULL, /* SIOCGIWFRAG */
-+#endif
-+ acx_ioctl_set_txpow, /* SIOCSIWTXPOW */
-+ acx_ioctl_get_txpow, /* SIOCGIWTXPOW */
-+ acx_ioctl_set_retry, /* SIOCSIWRETRY */
-+ acx_ioctl_get_retry, /* SIOCGIWRETRY */
-+ acx_ioctl_set_encode, /* SIOCSIWENCODE */
-+ acx_ioctl_get_encode, /* SIOCGIWENCODE */
-+ acx_ioctl_set_power, /* SIOCSIWPOWER */
-+ acx_ioctl_get_power, /* SIOCGIWPOWER */
-+};
-+
-+
-+/***********************************************************************
-+*/
-+
-+/* if you plan to reorder something, make sure to reorder all other places
-+ * accordingly! */
-+/* SET/GET convention: SETs must have even position, GETs odd */
-+#define ACX100_IOCTL SIOCIWFIRSTPRIV
-+enum {
-+ ACX100_IOCTL_DEBUG = ACX100_IOCTL,
-+ ACX100_IOCTL_GET__________UNUSED1,
-+ ACX100_IOCTL_SET_PLED,
-+ ACX100_IOCTL_GET_PLED,
-+ ACX100_IOCTL_SET_RATES,
-+ ACX100_IOCTL_LIST_DOM,
-+ ACX100_IOCTL_SET_DOM,
-+ ACX100_IOCTL_GET_DOM,
-+ ACX100_IOCTL_SET_SCAN_PARAMS,
-+ ACX100_IOCTL_GET_SCAN_PARAMS,
-+ ACX100_IOCTL_SET_PREAMB,
-+ ACX100_IOCTL_GET_PREAMB,
-+ ACX100_IOCTL_SET_ANT,
-+ ACX100_IOCTL_GET_ANT,
-+ ACX100_IOCTL_RX_ANT,
-+ ACX100_IOCTL_TX_ANT,
-+ ACX100_IOCTL_SET_PHY_AMP_BIAS,
-+ ACX100_IOCTL_GET_PHY_CHAN_BUSY,
-+ ACX100_IOCTL_SET_ED,
-+ ACX100_IOCTL_GET__________UNUSED3,
-+ ACX100_IOCTL_SET_CCA,
-+ ACX100_IOCTL_GET__________UNUSED4,
-+ ACX100_IOCTL_MONITOR,
-+ ACX100_IOCTL_TEST,
-+ ACX100_IOCTL_DBG_SET_MASKS,
-+ ACX111_IOCTL_INFO,
-+ ACX100_IOCTL_DBG_SET_IO,
-+ ACX100_IOCTL_DBG_GET_IO
-+};
-+
-+
-+static const iw_handler acx_ioctl_private_handler[] =
-+{
-+#if ACX_DEBUG
-+[ACX100_IOCTL_DEBUG - ACX100_IOCTL] = acx_ioctl_set_debug,
-+#endif
-+[ACX100_IOCTL_SET_PLED - ACX100_IOCTL] = acx100_ioctl_set_led_power,
-+[ACX100_IOCTL_GET_PLED - ACX100_IOCTL] = acx100_ioctl_get_led_power,
-+[ACX100_IOCTL_SET_RATES - ACX100_IOCTL] = acx_ioctl_set_rates,
-+[ACX100_IOCTL_LIST_DOM - ACX100_IOCTL] = acx_ioctl_list_reg_domain,
-+[ACX100_IOCTL_SET_DOM - ACX100_IOCTL] = acx_ioctl_set_reg_domain,
-+[ACX100_IOCTL_GET_DOM - ACX100_IOCTL] = acx_ioctl_get_reg_domain,
-+[ACX100_IOCTL_SET_SCAN_PARAMS - ACX100_IOCTL] = acx_ioctl_set_scan_params,
-+[ACX100_IOCTL_GET_SCAN_PARAMS - ACX100_IOCTL] = acx_ioctl_get_scan_params,
-+[ACX100_IOCTL_SET_PREAMB - ACX100_IOCTL] = acx_ioctl_set_short_preamble,
-+[ACX100_IOCTL_GET_PREAMB - ACX100_IOCTL] = acx_ioctl_get_short_preamble,
-+[ACX100_IOCTL_SET_ANT - ACX100_IOCTL] = acx_ioctl_set_antenna,
-+[ACX100_IOCTL_GET_ANT - ACX100_IOCTL] = acx_ioctl_get_antenna,
-+[ACX100_IOCTL_RX_ANT - ACX100_IOCTL] = acx_ioctl_set_rx_antenna,
-+[ACX100_IOCTL_TX_ANT - ACX100_IOCTL] = acx_ioctl_set_tx_antenna,
-+[ACX100_IOCTL_SET_PHY_AMP_BIAS - ACX100_IOCTL] = acx100_ioctl_set_phy_amp_bias,
-+[ACX100_IOCTL_GET_PHY_CHAN_BUSY - ACX100_IOCTL] = acx_ioctl_get_phy_chan_busy_percentage,
-+[ACX100_IOCTL_SET_ED - ACX100_IOCTL] = acx_ioctl_set_ed_threshold,
-+[ACX100_IOCTL_SET_CCA - ACX100_IOCTL] = acx_ioctl_set_cca,
-+[ACX100_IOCTL_MONITOR - ACX100_IOCTL] = acx_ioctl_wlansniff,
-+[ACX100_IOCTL_TEST - ACX100_IOCTL] = acx_ioctl_unknown11,
-+[ACX100_IOCTL_DBG_SET_MASKS - ACX100_IOCTL] = acx_ioctl_dbg_set_masks,
-+[ACX111_IOCTL_INFO - ACX100_IOCTL] = acx111_ioctl_info,
-+};
-+
-+
-+static const struct iw_priv_args acx_ioctl_private_args[] = {
-+#if ACX_DEBUG
-+{ cmd : ACX100_IOCTL_DEBUG,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetDebug" },
-+#endif
-+{ cmd : ACX100_IOCTL_SET_PLED,
-+ set_args : IW_PRIV_TYPE_BYTE | 2,
-+ get_args : 0,
-+ name : "SetLEDPower" },
-+{ cmd : ACX100_IOCTL_GET_PLED,
-+ set_args : 0,
-+ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 2,
-+ name : "GetLEDPower" },
-+{ cmd : ACX100_IOCTL_SET_RATES,
-+ set_args : IW_PRIV_TYPE_CHAR | 256,
-+ get_args : 0,
-+ name : "SetRates" },
-+{ cmd : ACX100_IOCTL_LIST_DOM,
-+ set_args : 0,
-+ get_args : 0,
-+ name : "ListRegDomain" },
-+{ cmd : ACX100_IOCTL_SET_DOM,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetRegDomain" },
-+{ cmd : ACX100_IOCTL_GET_DOM,
-+ set_args : 0,
-+ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ name : "GetRegDomain" },
-+{ cmd : ACX100_IOCTL_SET_SCAN_PARAMS,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4,
-+ get_args : 0,
-+ name : "SetScanParams" },
-+{ cmd : ACX100_IOCTL_GET_SCAN_PARAMS,
-+ set_args : 0,
-+ get_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4,
-+ name : "GetScanParams" },
-+{ cmd : ACX100_IOCTL_SET_PREAMB,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetSPreamble" },
-+{ cmd : ACX100_IOCTL_GET_PREAMB,
-+ set_args : 0,
-+ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ name : "GetSPreamble" },
-+{ cmd : ACX100_IOCTL_SET_ANT,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetAntenna" },
-+{ cmd : ACX100_IOCTL_GET_ANT,
-+ set_args : 0,
-+ get_args : 0,
-+ name : "GetAntenna" },
-+{ cmd : ACX100_IOCTL_RX_ANT,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetRxAnt" },
-+{ cmd : ACX100_IOCTL_TX_ANT,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetTxAnt" },
-+{ cmd : ACX100_IOCTL_SET_PHY_AMP_BIAS,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetPhyAmpBias"},
-+{ cmd : ACX100_IOCTL_GET_PHY_CHAN_BUSY,
-+ set_args : 0,
-+ get_args : 0,
-+ name : "GetPhyChanBusy" },
-+{ cmd : ACX100_IOCTL_SET_ED,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetED" },
-+{ cmd : ACX100_IOCTL_SET_CCA,
-+ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
-+ get_args : 0,
-+ name : "SetCCA" },
-+{ cmd : ACX100_IOCTL_MONITOR,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2,
-+ get_args : 0,
-+ name : "monitor" },
-+{ cmd : ACX100_IOCTL_TEST,
-+ set_args : 0,
-+ get_args : 0,
-+ name : "Test" },
-+{ cmd : ACX100_IOCTL_DBG_SET_MASKS,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2,
-+ get_args : 0,
-+ name : "DbgSetMasks" },
-+{ cmd : ACX111_IOCTL_INFO,
-+ set_args : 0,
-+ get_args : 0,
-+ name : "GetAcx111Info" },
-+{ cmd : ACX100_IOCTL_DBG_SET_IO,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4,
-+ get_args : 0,
-+ name : "DbgSetIO" },
-+{ cmd : ACX100_IOCTL_DBG_GET_IO,
-+ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3,
-+ get_args : 0,
-+ name : "DbgGetIO" },
-+};
-+
-+
-+const struct iw_handler_def acx_ioctl_handler_def =
-+{
-+ .num_standard = VEC_SIZE(acx_ioctl_handler),
-+ .num_private = VEC_SIZE(acx_ioctl_private_handler),
-+ .num_private_args = VEC_SIZE(acx_ioctl_private_args),
-+ .standard = (iw_handler *) acx_ioctl_handler,
-+ .private = (iw_handler *) acx_ioctl_private_handler,
-+ .private_args = (struct iw_priv_args *) acx_ioctl_private_args,
-+#if IW_HANDLER_VERSION > 5
-+ .get_wireless_stats = acx_e_get_wireless_stats
-+#endif /* IW > 5 */
-+};
-Index: linux-2.6.22/drivers/net/wireless/acx/Kconfig
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/Kconfig 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,113 @@
-+config ACX
-+ tristate "TI acx100/acx111 802.11b/g wireless chipsets"
-+ depends on NET_RADIO && EXPERIMENTAL
-+ select FW_LOADER
-+ ---help---
-+ A driver for 802.11b/g wireless cards based on
-+ Texas Instruments acx100 and acx111 chipsets.
-+
-+ This driver supports Host AP mode that allows
-+ your computer to act as an IEEE 802.11 access point.
-+ This driver is new and experimental.
-+
-+ Texas Instruments did not take part in development of this driver
-+ in any way, shape or form.
-+
-+ The driver can be compiled as a module and will be named "acx".
-+
-+config ACX_PCI
-+ bool "TI acx100/acx111 802.11b/g PCI"
-+ depends on ACX && PCI
-+ ---help---
-+ Include PCI and CardBus support in acx.
-+
-+ acx chipsets need their firmware loaded at startup.
-+ You will need to provide a firmware image via hotplug.
-+
-+ Firmware may be in a form of single image 40-100kb in size
-+ (a 'combined' firmware) or two images - main image
-+ (again 40-100kb) and radio image (~10kb or less).
-+
-+ Firmware images are requested from hotplug using following names:
-+
-+ tiacx100 - main firmware image for acx100 chipset
-+ tiacx100rNN - radio acx100 firmware for radio type NN
-+ tiacx100cNN - combined acx100 firmware for radio type NN
-+ tiacx111 - main acx111 firmware
-+ tiacx111rNN - radio acx111 firmware for radio type NN
-+ tiacx111cNN - combined acx111 firmware for radio type NN
-+
-+ Driver will attempt to load combined image first.
-+ If no such image is found, it will try to load main image
-+ and radio image instead.
-+
-+ Firmware files are not covered by GPL and are not distributed
-+ with this driver for legal reasons.
-+
-+config ACX_USB
-+ bool "TI acx100/acx111 802.11b/g USB"
-+ depends on ACX && (USB=y || USB=ACX)
-+ ---help---
-+ Include USB support in acx.
-+
-+ There is only one currently known device in this category,
-+ D-Link DWL-120+, but newer devices seem to be on the horizon.
-+
-+ acx chipsets need their firmware loaded at startup.
-+ You will need to provide a firmware image via hotplug.
-+
-+ Firmware for USB device is requested from hotplug
-+ by the 'tiacx100usb' name.
-+
-+ Firmware files are not covered by GPL and are not distributed
-+ with this driver for legal reasons.
-+
-+config ACX_MEM
-+ bool "TI acx100/acx111 802.11b/g memory mapped slave 16 interface"
-+ depends on ACX
-+ ---help---
-+ acx chipsets need their firmware loaded at startup.
-+ You will need to provide a firmware image via hotplug.
-+
-+ Firmware for USB device is requested from hotplug
-+ by the 'tiacx100usb' name.
-+
-+ Firmware files are not covered by GPL and are not distributed
-+ with this driver for legal reasons.
-+
-+config ACX_CS
-+ bool "TI acx100/acx111 802.11b/g cardbus interface"
-+ depends on ACX
-+ ---help---
-+ acx chipsets need their firmware loaded at startup.
-+ You will need to provide a firmware image via hotplug.
-+
-+ This driver is based on memory mapped driver.
-+
-+ Firmware files are not covered by GPL and are not distributed
-+ with this driver for legal reasons.
-+
-+config ACX_HX4700
-+ tristate "ACX support for the iPAQ hx4700 using ACX_MEM"
-+ depends on HX4700_CORE && ACX_MEM
-+ ---help---
-+ Include memory interface support in acx for the iPAQ hx4700.
-+
-+config ACX_HTCUNIVERSAL
-+ tristate "ACX support for the HTC Universal using ACX_MEM"
-+ depends on HTCUNIVERSAL_CORE && HTC_ASIC3 && ACX_MEM
-+ ---help---
-+ Include memory interface support in acx for the HTC Universal.
-+
-+config ACX_HTCSABLE
-+ tristate "ACX support for the HTC Sable (IPAQ hw6915) using ACX_MEM"
-+ depends on MACH_HW6900 && HTC_ASIC3 && ACX_MEM
-+ ---help---
-+ Include memory interface support in acx for the HTC Sable (IPAQ hw6915).
-+
-+config ACX_RX3000
-+ tristate "ACX support for the iPAQ RX3000 using ACX_MEM"
-+ depends on MACH_RX3715 && ACX_MEM && LEDS_ASIC3
-+ ---help---
-+ Include memory interface support in acx for the IPAQ RX3000.
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/Makefile 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,21 @@
-+#obj-m += acx.o
-+
-+#acx-obj-y += pci.o
-+#acx-obj-y += usb.o
-+
-+#acx-objs := wlan.o conv.o ioctl.o common.o $(acx-obj-y)
-+
-+# Use this if you have proper Kconfig integration:
-+
-+obj-$(CONFIG_ACX) += acx.o
-+obj-$(CONFIG_ACX_HX4700) += hx4700_acx.o
-+obj-$(CONFIG_ACX_HTCUNIVERSAL) += htcuniversal_acx.o
-+obj-$(CONFIG_ACX_HTCSABLE) += htcsable_acx.o
-+obj-$(CONFIG_ACX_RX3000) += rx3000_acx.o
-+#
-+acx-obj-$(CONFIG_ACX_PCI) += pci.o
-+acx-obj-$(CONFIG_ACX_USB) += usb.o
-+acx-obj-$(CONFIG_ACX_MEM) += mem.o
-+acx-obj-$(CONFIG_ACX_CS) += cs.o
-+#
-+acx-objs := wlan.o conv.o ioctl.o common.o $(acx-obj-y)
-Index: linux-2.6.22/drivers/net/wireless/acx/mem.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/mem.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,5363 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+**
-+** Slave memory interface support:
-+**
-+** Todd Blumer - SDG Systems
-+** Bill Reese - HP
-+** Eric McCorkle - Shadowsun
-+*/
-+#define ACX_MEM 1
-+
-+/*
-+ * non-zero makes it dump the ACX memory to the console then
-+ * panic when you cat /proc/driver/acx_wlan0_diag
-+ */
-+#define DUMP_MEM_DEFINED 1
-+
-+#define DUMP_MEM_DURING_DIAG 0
-+#define DUMP_IF_SLOW 0
-+
-+#define PATCH_AROUND_BAD_SPOTS 1
-+#define HX4700_FIRMWARE_CHECKSUM 0x0036862e
-+#define HX4700_ALTERNATE_FIRMWARE_CHECKSUM 0x00368a75
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+
-+/* Linux 2.6.18+ uses <linux/utsrelease.h> */
-+#ifndef UTS_RELEASE
-+#include <linux/utsrelease.h>
-+#endif
-+
-+#include <linux/compiler.h> /* required for Lx 2.6.8 ?? */
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/sched.h>
-+#include <linux/types.h>
-+#include <linux/skbuff.h>
-+#include <linux/slab.h>
-+#include <linux/if_arp.h>
-+#include <linux/irq.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+#include <linux/netdevice.h>
-+#include <linux/ioport.h>
-+#include <linux/pci.h>
-+#include <linux/platform_device.h>
-+#include <linux/pm.h>
-+#include <linux/vmalloc.h>
-+#include <linux/delay.h>
-+#include <linux/workqueue.h>
-+#include <linux/inetdevice.h>
-+
-+#include "acx.h"
-+#include "acx_hw.h"
-+
-+/***********************************************************************
-+*/
-+
-+#define CARD_EEPROM_ID_SIZE 6
-+
-+#include <asm/io.h>
-+
-+#define REG_ACX_VENDOR_ID 0x900
-+/*
-+ * This is the vendor id on the HX4700, anyway
-+ */
-+#define ACX_VENDOR_ID 0x8400104c
-+
-+typedef enum {
-+ ACX_SOFT_RESET = 0,
-+
-+ ACX_SLV_REG_ADDR,
-+ ACX_SLV_REG_DATA,
-+ ACX_SLV_REG_ADATA,
-+
-+ ACX_SLV_MEM_CP,
-+ ACX_SLV_MEM_ADDR,
-+ ACX_SLV_MEM_DATA,
-+ ACX_SLV_MEM_CTL,
-+} acxreg_t;
-+
-+/***********************************************************************
-+*/
-+static void acxmem_i_tx_timeout(struct net_device *ndev);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id);
-+#else
-+static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-+#endif
-+static void acxmem_i_set_multicast_list(struct net_device *ndev);
-+
-+static int acxmem_e_open(struct net_device *ndev);
-+static int acxmem_e_close(struct net_device *ndev);
-+static void acxmem_s_up(struct net_device *ndev);
-+static void acxmem_s_down(struct net_device *ndev);
-+
-+static void dump_acxmem (acx_device_t *adev, u32 start, int length);
-+static int acxmem_complete_hw_reset (acx_device_t *adev);
-+static void acxmem_s_delete_dma_regions(acx_device_t *adev);
-+
-+static struct platform_device *resume_pdev;
-+
-+static int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+acxmem_e_suspend(struct platform_device *pdev, pm_message_t state);
-+#else
-+acxmem_e_suspend(struct device *pdev, u32 state);
-+#endif
-+static void
-+fw_resumer(struct work_struct *notused);
-+//fw_resumer( void *data );
-+
-+static int acx_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)
-+{
-+ struct net_device *ndev = ptr;
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ /*
-+ * Upper level ioctl() handlers send a NETDEV_CHANGEADDR if the MAC address changes.
-+ */
-+
-+ if (NETDEV_CHANGEADDR == event) {
-+ /*
-+ * the upper layers put the new MAC address in ndev->dev_addr; we just copy
-+ * it over and update the ACX with it.
-+ */
-+ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr);
-+ adev->set_mask |= GETSET_STATION_ID;
-+ acx_s_update_card_settings (adev);
-+ }
-+
-+ return 0;
-+}
-+
-+static struct notifier_block acx_netdev_notifier = {
-+ .notifier_call = acx_netdev_event,
-+};
-+
-+/***********************************************************************
-+** Register access
-+*/
-+
-+/* Pick one */
-+/* #define INLINE_IO static */
-+#define INLINE_IO static inline
-+
-+INLINE_IO u32
-+read_id_register (acx_device_t *adev)
-+{
-+ writel (0x24, &adev->iobase[ACX_SLV_REG_ADDR]);
-+ return readl (&adev->iobase[ACX_SLV_REG_DATA]);
-+}
-+
-+INLINE_IO u32
-+read_reg32(acx_device_t *adev, unsigned int offset)
-+{
-+ u32 val;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ return readl(((u8*)adev->iobase) + addr);
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ val = readl( &adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return val;
-+}
-+
-+INLINE_IO u16
-+read_reg16(acx_device_t *adev, unsigned int offset)
-+{
-+ u16 lo;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ return readw(((u8 *) adev->iobase) + addr);
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ lo = readw( (u16 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return lo;
-+}
-+
-+INLINE_IO u8
-+read_reg8(acx_device_t *adev, unsigned int offset)
-+{
-+ u8 lo;
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20)
-+ return readb(((u8 *)adev->iobase) + addr);
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ lo = readw( (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+
-+ return (u8)lo;
-+}
-+
-+INLINE_IO void
-+write_reg32(acx_device_t *adev, unsigned int offset, u32 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writel(val, ((u8*)adev->iobase) + addr);
-+ return;
-+ }
-+
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writel( val, &adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+INLINE_IO void
-+write_reg16(acx_device_t *adev, unsigned int offset, u16 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writew(val, ((u8 *)adev->iobase) + addr);
-+ return;
-+ }
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writew( val, (u16 *) &adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+INLINE_IO void
-+write_reg8(acx_device_t *adev, unsigned int offset, u8 val)
-+{
-+ u32 addr;
-+
-+ if (offset > IO_ACX_ECPU_CTRL)
-+ addr = offset;
-+ else
-+ addr = adev->io[offset];
-+
-+ if (addr < 0x20) {
-+ writeb(val, ((u8 *) adev->iobase) + addr);
-+ return;
-+ }
-+ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
-+ writeb( val, (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
-+}
-+
-+/* Handle PCI posting properly:
-+ * Make sure that writes reach the adapter in case they require to be executed
-+ * *before* the next write, by reading a random (and safely accessible) register.
-+ * This call has to be made if there is no read following (which would flush the data
-+ * to the adapter), yet the written data has to reach the adapter immediately. */
-+INLINE_IO void
-+write_flush(acx_device_t *adev)
-+{
-+ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */
-+ /* faster version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should also be safe): */
-+ (void) readl(adev->iobase);
-+}
-+
-+INLINE_IO void
-+set_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
-+ u32 tmp;
-+
-+ tmp = read_reg32 (adev, offset);
-+ tmp = tmp | bits;
-+ write_reg32 (adev, offset, tmp);
-+ write_flush (adev);
-+}
-+
-+INLINE_IO void
-+clear_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
-+ u32 tmp;
-+
-+ tmp = read_reg32 (adev, offset);
-+ tmp = tmp & ~bits;
-+ write_reg32 (adev, offset, tmp);
-+ write_flush (adev);
-+}
-+
-+/*
-+ * Copy from PXA memory to the ACX memory. This assumes both the PXA and ACX
-+ * addresses are 32 bit aligned. Count is in bytes.
-+ */
-+INLINE_IO void
-+write_slavemem32 (acx_device_t *adev, u32 slave_address, u32 val)
-+{
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, val);
-+}
-+
-+INLINE_IO u32
-+read_slavemem32 (acx_device_t *adev, u32 slave_address)
-+{
-+ u32 val;
-+
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
-+ udelay (10);
-+ val = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+
-+ return val;
-+}
-+
-+INLINE_IO void
-+write_slavemem8 (acx_device_t *adev, u32 slave_address, u8 val)
-+{
-+ u32 data;
-+ u32 base;
-+ int offset;
-+
-+ /*
-+ * Get the word containing the target address and the byte offset in that word.
-+ */
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+ data &= ~(0xff << offset);
-+ data |= val << offset;
-+ write_slavemem32 (adev, base, data);
-+}
-+
-+INLINE_IO u8
-+read_slavemem8 (acx_device_t *adev, u32 slave_address)
-+{
-+ u8 val;
-+ u32 base;
-+ u32 data;
-+ int offset;
-+
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+
-+ val = (data >> offset) & 0xff;
-+
-+ return val;
-+}
-+
-+/*
-+ * doesn't split across word boundaries
-+ */
-+INLINE_IO void
-+write_slavemem16 (acx_device_t *adev, u32 slave_address, u16 val)
-+{
-+ u32 data;
-+ u32 base;
-+ int offset;
-+
-+ /*
-+ * Get the word containing the target address and the byte offset in that word.
-+ */
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+ data &= ~(0xffff << offset);
-+ data |= val << offset;
-+ write_slavemem32 (adev, base, data);
-+}
-+
-+/*
-+ * doesn't split across word boundaries
-+ */
-+INLINE_IO u16
-+read_slavemem16 (acx_device_t *adev, u32 slave_address)
-+{
-+ u16 val;
-+ u32 base;
-+ u32 data;
-+ int offset;
-+
-+ base = slave_address & ~3;
-+ offset = (slave_address & 3) * 8;
-+
-+ data = read_slavemem32 (adev, base);
-+
-+ val = (data >> offset) & 0xffff;
-+
-+ return val;
-+}
-+
-+/*
-+ * Copy from slave memory
-+ *
-+ * TODO - rewrite using address autoincrement, handle partial words
-+ */
-+void
-+copy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count) {
-+ u32 tmp = 0;
-+ u8 *ptmp = (u8 *) &tmp;
-+
-+ /*
-+ * Right now I'm making the assumption that the destination is aligned, but
-+ * I'd better check.
-+ */
-+ if ((u32) destination & 3) {
-+ printk ("acx copy_from_slavemem: warning! destination not word-aligned!\n");
-+ }
-+
-+ while (count >= 4) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
-+ udelay (10);
-+ *((u32 *) destination) = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ count -= 4;
-+ source += 4;
-+ destination += 4;
-+ }
-+
-+ /*
-+ * If the word reads above didn't satisfy the count, read one more word
-+ * and transfer a byte at a time until the request is satisfied.
-+ */
-+ if (count) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
-+ udelay (10);
-+ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ while (count--) {
-+ *destination++ = *ptmp++;
-+ }
-+ }
-+}
-+
-+/*
-+ * Copy to slave memory
-+ *
-+ * TODO - rewrite using autoincrement, handle partial words
-+ */
-+void
-+copy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
-+{
-+ u32 tmp = 0;
-+ u8* ptmp = (u8 *) &tmp;
-+ static u8 src[512]; /* make static to avoid huge stack objects */
-+
-+ /*
-+ * For now, make sure the source is word-aligned by copying it to a word-aligned
-+ * buffer. Someday rewrite to avoid the extra copy.
-+ */
-+ if (count > sizeof (src)) {
-+ printk ("acx copy_to_slavemem: Warning! buffer overflow!\n");
-+ count = sizeof (src);
-+ }
-+ memcpy (src, source, count);
-+ source = src;
-+
-+ while (count >= 4) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, *((u32 *) source));
-+ count -= 4;
-+ source += 4;
-+ destination += 4;
-+ }
-+
-+ /*
-+ * If there are leftovers read the next word from the acx and merge in
-+ * what they want to write.
-+ */
-+ if (count) {
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
-+ while (count--) {
-+ *ptmp++ = *source++;
-+ }
-+ /*
-+ * reset address in case we're currently in auto-increment mode
-+ */
-+ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
-+ udelay (10);
-+ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, tmp);
-+ udelay (10);
-+ }
-+
-+}
-+
-+/*
-+ * Block copy to slave buffers using memory block chain mode. Copies to the ACX
-+ * transmit buffer structure with minimal intervention on our part.
-+ * Interrupts should be disabled when calling this.
-+ */
-+void
-+chaincopy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
-+{
-+ u32 val;
-+ u32 *data = (u32 *) source;
-+ static u8 aligned_source[WLAN_A4FR_MAXLEN_WEP_FCS];
-+
-+ /*
-+ * Warn if the pointers don't look right. Destination must fit in [23:5] with
-+ * zero elsewhere and source should be 32 bit aligned.
-+ * This should never happen since we're in control of both, but I want to know about
-+ * it if it does.
-+ */
-+ if ((destination & 0x00ffffe0) != destination) {
-+ printk ("acx chaincopy: destination block 0x%04x not aligned!\n", destination);
-+ }
-+ if (count > sizeof aligned_source) {
-+ printk( KERN_ERR "chaincopy_to_slavemem overflow!\n" );
-+ count = sizeof aligned_source;
-+ }
-+ if ((u32) source & 3) {
-+ memcpy (aligned_source, source, count);
-+ data = (u32 *) aligned_source;
-+ }
-+
-+ /*
-+ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
-+ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
-+ */
-+ val = 2 << 16 | 1 << 2;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
-+
-+ /*
-+ * SLV_MEM_CP[23:5] = start of 1st block
-+ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
-+ */
-+ val = destination & 0x00ffffe0;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
-+
-+ /*
-+ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
-+ */
-+ val = (destination & 0x00ffffe0) + (1<<2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
-+
-+ /*
-+ * Write the data to the slave data register, rounding up to the end
-+ * of the word containing the last byte (hence the > 0)
-+ */
-+ while (count > 0) {
-+ writel (*data++, &adev->iobase[ACX_SLV_MEM_DATA]);
-+ count -= 4;
-+ }
-+}
-+
-+
-+/*
-+ * Block copy from slave buffers using memory block chain mode. Copies from the ACX
-+ * receive buffer structures with minimal intervention on our part.
-+ * Interrupts should be disabled when calling this.
-+ */
-+void
-+chaincopy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count)
-+{
-+ u32 val;
-+ u32 *data = (u32 *) destination;
-+ static u8 aligned_destination[WLAN_A4FR_MAXLEN_WEP_FCS];
-+ int saved_count = count;
-+
-+ /*
-+ * Warn if the pointers don't look right. Destination must fit in [23:5] with
-+ * zero elsewhere and source should be 32 bit aligned.
-+ * Turns out the network stack sends unaligned things, so fix them before
-+ * copying to the ACX.
-+ */
-+ if ((source & 0x00ffffe0) != source) {
-+ printk ("acx chaincopy: source block 0x%04x not aligned!\n", source);
-+ dump_acxmem (adev, 0, 0x10000);
-+ }
-+ if ((u32) destination & 3) {
-+ //printk ("acx chaincopy: data destination not word aligned!\n");
-+ data = (u32 *) aligned_destination;
-+ if (count > sizeof aligned_destination) {
-+ printk( KERN_ERR "chaincopy_from_slavemem overflow!\n" );
-+ count = sizeof aligned_destination;
-+ }
-+ }
-+
-+ /*
-+ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
-+ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
-+ */
-+ val = (2 << 16) | (1 << 2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
-+
-+ /*
-+ * SLV_MEM_CP[23:5] = start of 1st block
-+ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
-+ */
-+ val = source & 0x00ffffe0;
-+ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
-+
-+ /*
-+ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
-+ */
-+ val = (source & 0x00ffffe0) + (1<<2);
-+ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
-+
-+ /*
-+ * Read the data from the slave data register, rounding up to the end
-+ * of the word containing the last byte (hence the > 0)
-+ */
-+ while (count > 0) {
-+ *data++ = readl (&adev->iobase[ACX_SLV_MEM_DATA]);
-+ count -= 4;
-+ }
-+
-+ /*
-+ * If the destination wasn't aligned, we would have saved it in
-+ * the aligned buffer, so copy it where it should go.
-+ */
-+ if ((u32) destination & 3) {
-+ memcpy (destination, aligned_destination, saved_count);
-+ }
-+}
-+
-+char
-+printable (char c)
-+{
-+ return ((c >= 20) && (c < 127)) ? c : '.';
-+}
-+
-+#if DUMP_MEM_DEFINED > 0
-+static void
-+dump_acxmem (acx_device_t *adev, u32 start, int length)
-+{
-+ int i;
-+ u8 buf[16];
-+
-+ while (length > 0) {
-+ printk ("%04x ", start);
-+ copy_from_slavemem (adev, buf, start, 16);
-+ for (i = 0; (i < 16) && (i < length); i++) {
-+ printk ("%02x ", buf[i]);
-+ }
-+ for (i = 0; (i < 16) && (i < length); i++) {
-+ printk ("%c", printable (buf[i]));
-+ }
-+ printk ("\n");
-+ start += 16;
-+ length -= 16;
-+ }
-+}
-+#endif
-+
-+static void
-+enable_acx_irq(acx_device_t *adev);
-+static void
-+disable_acx_irq(acx_device_t *adev);
-+
-+/*
-+ * Return an acx pointer to the next transmit data block.
-+ */
-+u32
-+allocate_acx_txbuf_space (acx_device_t *adev, int count) {
-+ u32 block, next, last_block;
-+ int blocks_needed;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&adev->txbuf_lock, flags);
-+ /*
-+ * Take 4 off the memory block size to account for the reserved word at the start of
-+ * the block.
-+ */
-+ blocks_needed = count / (adev->memblocksize - 4);
-+ if (count % (adev->memblocksize - 4))
-+ blocks_needed++;
-+
-+ if (blocks_needed <= adev->acx_txbuf_blocks_free) {
-+ /*
-+ * Take blocks at the head of the free list.
-+ */
-+ last_block = block = adev->acx_txbuf_free;
-+
-+ /*
-+ * Follow block pointers through the requested number of blocks both to
-+ * find the new head of the free list and to set the flags for the blocks
-+ * appropriately.
-+ */
-+ while (blocks_needed--) {
-+ /*
-+ * Keep track of the last block of the allocation
-+ */
-+ last_block = adev->acx_txbuf_free;
-+
-+ /*
-+ * Make sure the end control flag is not set.
-+ */
-+ next = read_slavemem32 (adev, adev->acx_txbuf_free) & 0x7ffff;
-+ write_slavemem32 (adev, adev->acx_txbuf_free, next);
-+
-+ /*
-+ * Update the new head of the free list
-+ */
-+ adev->acx_txbuf_free = next << 5;
-+ adev->acx_txbuf_blocks_free--;
-+
-+ }
-+
-+ /*
-+ * Flag the last block both by clearing out the next pointer
-+ * and marking the control field.
-+ */
-+ write_slavemem32 (adev, last_block, 0x02000000);
-+
-+ /*
-+ * If we're out of buffers make sure the free list pointer is NULL
-+ */
-+ if (!adev->acx_txbuf_blocks_free) {
-+ adev->acx_txbuf_free = 0;
-+ }
-+ }
-+ else {
-+ block = 0;
-+ }
-+ spin_unlock_irqrestore (&adev->txbuf_lock, flags);
-+ return block;
-+}
-+
-+/*
-+ * Return buffer space back to the pool by following the next pointers until we find
-+ * the block marked as the end. Point the last block to the head of the free list,
-+ * then update the head of the free list to point to the newly freed memory.
-+ * This routine gets called in interrupt context, so it shouldn't block to protect
-+ * the integrity of the linked list. The ISR already holds the lock.
-+ */
-+void
-+reclaim_acx_txbuf_space (acx_device_t *adev, u32 blockptr) {
-+ u32 cur, last, next;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave (&adev->txbuf_lock, flags);
-+ if ((blockptr >= adev->acx_txbuf_start) &&
-+ (blockptr <= adev->acx_txbuf_start +
-+ (adev->acx_txbuf_numblocks - 1) * adev->memblocksize)) {
-+ cur = blockptr;
-+ do {
-+ last = cur;
-+ next = read_slavemem32 (adev, cur);
-+
-+ /*
-+ * Advance to the next block in this allocation
-+ */
-+ cur = (next & 0x7ffff) << 5;
-+
-+ /*
-+ * This block now counts as free.
-+ */
-+ adev->acx_txbuf_blocks_free++;
-+ } while (!(next & 0x02000000));
-+
-+ /*
-+ * last now points to the last block of that allocation. Update the pointer
-+ * in that block to point to the free list and reset the free list to the
-+ * first block of the free call. If there were no free blocks, make sure
-+ * the new end of the list marks itself as truly the end.
-+ */
-+ if (adev->acx_txbuf_free) {
-+ write_slavemem32 (adev, last, adev->acx_txbuf_free >> 5);
-+ }
-+ else {
-+ write_slavemem32 (adev, last, 0x02000000);
-+ }
-+ adev->acx_txbuf_free = blockptr;
-+ }
-+ spin_unlock_irqrestore(&adev->txbuf_lock, flags);
-+}
-+
-+/*
-+ * Initialize the pieces managing the transmit buffer pool on the ACX. The transmit
-+ * buffer is a circular queue with one 32 bit word reserved at the beginning of each
-+ * block. The upper 13 bits are a control field, of which only 0x02000000 has any
-+ * meaning. The lower 19 bits are the address of the next block divided by 32.
-+ */
-+void
-+init_acx_txbuf (acx_device_t *adev) {
-+
-+ /*
-+ * acx100_s_init_memory_pools set up txbuf_start and txbuf_numblocks for us.
-+ * All we need to do is reset the rest of the bookeeping.
-+ */
-+
-+ adev->acx_txbuf_free = adev->acx_txbuf_start;
-+ adev->acx_txbuf_blocks_free = adev->acx_txbuf_numblocks;
-+
-+ /*
-+ * Initialization leaves the last transmit pool block without a pointer back to
-+ * the head of the list, but marked as the end of the list. That's how we want
-+ * to see it, too, so leave it alone. This is only ever called after a firmware
-+ * reset, so the ACX memory is in the state we want.
-+ */
-+
-+}
-+
-+INLINE_IO int
-+adev_present(acx_device_t *adev)
-+{
-+ /* fast version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should be safe): */
-+ return readl(adev->iobase) != 0xffffffff;
-+}
-+
-+/***********************************************************************
-+*/
-+static inline txdesc_t*
-+get_txdesc(acx_device_t *adev, int index)
-+{
-+ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size);
-+}
-+
-+static inline txdesc_t*
-+advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc)
-+{
-+ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size);
-+}
-+
-+static txhostdesc_t*
-+get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return &adev->txhostdesc_start[index*2];
-+}
-+
-+static inline client_t*
-+get_txc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return adev->txc[index];
-+}
-+
-+static inline u16
-+get_txr(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ index /= adev->txdesc_size;
-+ return adev->txr[index];
-+}
-+
-+static inline void
-+put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ adev->txc[index] = c;
-+ adev->txr[index] = r111;
-+}
-+
-+
-+/***********************************************************************
-+** EEPROM and PHY read/write helpers
-+*/
-+/***********************************************************************
-+** acxmem_read_eeprom_byte
-+**
-+** Function called to read an octet in the EEPROM.
-+**
-+** This function is used by acxmem_e_probe to check if the
-+** connected card is a legal one or not.
-+**
-+** Arguments:
-+** adev ptr to acx_device structure
-+** addr address to read in the EEPROM
-+** charbuf ptr to a char. This is where the read octet
-+** will be stored
-+*/
-+int
-+acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf)
-+{
-+ int result;
-+ int count;
-+
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for EEPROM read\n",
-+ adev->ndev->name);
-+ result = NOT_OK;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA);
-+ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf);
-+ result = OK;
-+
-+fail:
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** We don't lock hw accesses here since we never r/w eeprom in IRQ
-+** Note: this function sleeps only because of GFP_KERNEL alloc
-+*/
-+#ifdef UNUSED
-+int
-+acxmem_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf)
-+{
-+ u8 *data_verify = NULL;
-+ unsigned long flags;
-+ int count, i;
-+ int result = NOT_OK;
-+ u16 gpio_orig;
-+
-+ printk("acx: WARNING! I would write to EEPROM now. "
-+ "Since I really DON'T want to unless you know "
-+ "what you're doing (THIS CODE WILL PROBABLY "
-+ "NOT WORK YET!), I will abort that now. And "
-+ "definitely make sure to make a "
-+ "/proc/driver/acx_wlan0_eeprom backup copy first!!! "
-+ "(the EEPROM content includes the PCI config header!! "
-+ "If you kill important stuff, then you WILL "
-+ "get in trouble and people DID get in trouble already)\n");
-+ return OK;
-+
-+ FN_ENTER;
-+
-+ data_verify = kmalloc(len, GFP_KERNEL);
-+ if (!data_verify) {
-+ goto end;
-+ }
-+
-+ /* first we need to enable the OE (EEPROM Output Enable) GPIO line
-+ * to be able to write to the EEPROM.
-+ * NOTE: an EEPROM writing success has been reported,
-+ * but you probably have to modify GPIO_OUT, too,
-+ * and you probably need to activate a different GPIO
-+ * line instead! */
-+ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE);
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1);
-+ write_flush(adev);
-+
-+ /* ok, now start writing the data out */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i));
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 1);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("WARNING, DANGER!!! "
-+ "Timeout waiting for EEPROM write\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+ }
-+
-+ /* disable EEPROM writing */
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig);
-+ write_flush(adev);
-+
-+ /* now start a verification run */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("timeout waiting for EEPROM read\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+
-+ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA);
-+ }
-+
-+ if (0 == memcmp(charbuf, data_verify, len))
-+ result = OK; /* read data matches, success */
-+
-+end:
-+ kfree(data_verify);
-+ FN_EXIT1(result);
-+ return result;
-+}
-+#endif /* UNUSED */
-+
-+
-+/***********************************************************************
-+** acxmem_s_read_phy_reg
-+**
-+** Messing with rx/tx disabling and enabling here
-+** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic
-+*/
-+int
-+acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
-+{
-+ int result = NOT_OK;
-+ int count;
-+
-+ FN_ENTER;
-+
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for phy read\n",
-+ adev->ndev->name);
-+ *charbuf = 0;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ log(L_DEBUG, "count was %u\n", count);
-+ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA);
-+
-+ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg);
-+ result = OK;
-+ goto fail; /* silence compiler warning */
-+fail:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
-+{
-+ int count;
-+ FN_ENTER;
-+
-+ /* mprusko said that 32bit accesses result in distorted sensitivity
-+ * on his card. Unconfirmed, looks like it's not true (most likely since we
-+ * now properly flush writes). */
-+ write_reg32(adev, IO_ACX_PHY_DATA, value);
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 1);
-+ write_flush(adev);
-+
-+ count = 0xffff;
-+ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for phy read\n",
-+ adev->ndev->name);
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg);
-+ fail:
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+#define NO_AUTO_INCREMENT 1
-+
-+/***********************************************************************
-+** acxmem_s_write_fw
-+**
-+** Write the firmware image into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** 1 firmware image corrupted
-+** 0 success
-+*/
-+static int
-+acxmem_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset)
-+{
-+ int len, size, checkMismatch = -1;
-+ u32 sum, v32, tmp, id;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+ write_flush(adev);
-+#endif
-+#endif
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ sum += p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+ len += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+ write_flush(adev);
-+#endif
-+ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32);
-+ write_flush(adev);
-+#endif
-+ write_slavemem32 (adev, offset + len - 4, v32);
-+
-+ id = read_id_register (adev);
-+
-+ /*
-+ * check the data written
-+ */
-+ tmp = read_slavemem32 (adev, offset + len - 4);
-+ if (checkMismatch && (tmp != v32)) {
-+ printk ("first data mismatch at 0x%08x good 0x%08x bad 0x%08x id 0x%08x\n",
-+ offset + len - 4, v32, tmp, id);
-+ checkMismatch = 0;
-+ }
-+ }
-+ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n",
-+ size, sum, le32_to_cpu(fw_image->chksum));
-+
-+ /* compare our checksum with the stored image checksum */
-+ return (sum != le32_to_cpu(fw_image->chksum));
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_validate_fw
-+**
-+** Compare the firmware image given with
-+** the firmware image written into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** NOT_OK firmware image corrupted or not correctly written
-+** OK success
-+*/
-+static int
-+acxmem_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image,
-+ u32 offset)
-+{
-+ u32 sum, v32, w32;
-+ int len, size;
-+ int result = OK;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+#endif
-+
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ p += 4;
-+ len += 4;
-+
-+#ifdef NOPE
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+#endif
-+ udelay(10);
-+ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA);
-+#endif
-+ w32 = read_slavemem32 (adev, offset + len - 4);
-+
-+ if (unlikely(w32 != v32)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "data parts at offset %d don't match\n(0x%08X vs. 0x%08X)!\n"
-+ "I/O timing issues or defective memory, with DWL-xx0+? "
-+ "ACX_IO_WIDTH=16 may help. Please report\n",
-+ len, v32, w32);
-+ result = NOT_OK;
-+ break;
-+ }
-+
-+ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24);
-+ }
-+
-+ /* sum control verification */
-+ if (result != NOT_OK) {
-+ if (sum != le32_to_cpu(fw_image->chksum)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "checksums don't match!\n");
-+ result = NOT_OK;
-+ }
-+ }
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_upload_fw
-+**
-+** Called from acx_reset_dev
-+*/
-+static int
-+acxmem_s_upload_fw(acx_device_t *adev)
-+{
-+ firmware_image_t *fw_image = NULL;
-+ int res = NOT_OK;
-+ int try;
-+ u32 file_size;
-+ char *filename = "WLANGEN.BIN";
-+#ifdef PATCH_AROUND_BAD_SPOTS
-+ u32 offset;
-+ int i;
-+ /*
-+ * arm-linux-objdump -d patch.bin, or
-+ * od -Ax -t x4 patch.bin after finding the bounds
-+ * of the .text section with arm-linux-objdump -s patch.bin
-+ */
-+ u32 patch[] = {
-+ 0xe584c030, 0xe59fc008,
-+ 0xe92d1000, 0xe59fc004, 0xe8bd8000, 0x0000080c,
-+ 0x0000aa68, 0x605a2200, 0x2c0a689c, 0x2414d80a,
-+ 0x2f00689f, 0x1c27d007, 0x06241e7c, 0x2f000e24,
-+ 0xe000d1f6, 0x602e6018, 0x23036468, 0x480203db,
-+ 0x60ca6003, 0xbdf0750a, 0xffff0808
-+ };
-+#endif
-+
-+ FN_ENTER;
-+ /* No combined image; tell common we need the radio firmware, too */
-+ adev->need_radio_fw = 1;
-+
-+ fw_image = acx_s_read_fw(adev->dev, filename, &file_size);
-+ if (!fw_image) {
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+ }
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxmem_s_write_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (main): %d\n", res);
-+ if (OK == res) {
-+ res = acxmem_s_validate_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw "
-+ "(main): %d\n", res);
-+ }
-+
-+ if (OK == res) {
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED);
-+ break;
-+ }
-+ printk("acx: firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+#ifdef PATCH_AROUND_BAD_SPOTS
-+ /*
-+ * Only want to do this if the firmware is exactly what we expect for an
-+ * iPaq 4700; otherwise, bad things would ensue.
-+ */
-+ if ((HX4700_FIRMWARE_CHECKSUM == fw_image->chksum) ||
-+ (HX4700_ALTERNATE_FIRMWARE_CHECKSUM == fw_image->chksum)) {
-+ /*
-+ * Put the patch after the main firmware image. 0x950c contains
-+ * the ACX's idea of the end of the firmware. Use that location to
-+ * load ours (which depends on that location being 0xab58) then
-+ * update that location to point to after ours.
-+ */
-+
-+ offset = read_slavemem32 (adev, 0x950c);
-+
-+ log (L_DEBUG, "acx: patching in at 0x%04x\n", offset);
-+
-+ for (i = 0; i < sizeof(patch) / sizeof(patch[0]); i++) {
-+ write_slavemem32 (adev, offset, patch[i]);
-+ offset += sizeof(u32);
-+ }
-+
-+ /*
-+ * Patch the instruction at 0x0804 to branch to our ARM patch at 0xab58
-+ */
-+ write_slavemem32 (adev, 0x0804, 0xea000000 + (0xab58-0x0804-8)/4);
-+
-+ /*
-+ * Patch the instructions at 0x1f40 to branch to our Thumb patch at 0xab74
-+ *
-+ * 4a00 ldr r2, [pc, #0]
-+ * 4710 bx r2
-+ * .data 0xab74+1
-+ */
-+ write_slavemem32 (adev, 0x1f40, 0x47104a00);
-+ write_slavemem32 (adev, 0x1f44, 0x0000ab74+1);
-+
-+ /*
-+ * Bump the end of the firmware up to beyond our patch.
-+ */
-+ write_slavemem32 (adev, 0x950c, offset);
-+
-+ }
-+#endif
-+
-+ vfree(fw_image);
-+
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_upload_radio
-+**
-+** Uploads the appropriate radio module firmware into the card.
-+*/
-+int
-+acxmem_s_upload_radio(acx_device_t *adev)
-+{
-+ acx_ie_memmap_t mm;
-+ firmware_image_t *radio_image;
-+ acx_cmd_radioinit_t radioinit;
-+ int res = NOT_OK;
-+ int try;
-+ u32 offset;
-+ u32 size;
-+ char filename[sizeof("RADIONN.BIN")];
-+
-+ if (!adev->need_radio_fw) return OK;
-+
-+ FN_ENTER;
-+
-+ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+ offset = le32_to_cpu(mm.CodeEnd);
-+
-+ snprintf(filename, sizeof(filename), "RADIO%02x.BIN",
-+ adev->radio_type);
-+ radio_image = acx_s_read_fw(adev->dev, filename, &size);
-+ if (!radio_image) {
-+ printk("acx: can't load radio module '%s'\n", filename);
-+ goto fail;
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxmem_s_write_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res);
-+ if (OK == res) {
-+ res = acxmem_s_validate_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res);
-+ }
-+
-+ if (OK == res)
-+ break;
-+ printk("acx: radio firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
-+ radioinit.offset = cpu_to_le32(offset);
-+
-+ /* no endian conversion needed, remains in card CPU area: */
-+ radioinit.len = radio_image->size;
-+
-+ vfree(radio_image);
-+
-+ if (OK != res)
-+ goto fail;
-+
-+ /* will take a moment so let's have a big timeout */
-+ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT,
-+ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000));
-+
-+ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+
-+fail:
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+/***********************************************************************
-+** acxmem_l_reset_mac
-+**
-+** MAC will be reset
-+** Call context: reset_dev
-+*/
-+static void
-+acxmem_l_reset_mac(acx_device_t *adev)
-+{
-+ int count;
-+ FN_ENTER;
-+
-+ /* halt eCPU */
-+ set_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
-+
-+ /* now do soft reset of eCPU, set bit */
-+ set_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
-+ log(L_DEBUG, "%s: enable soft reset...\n", __func__);
-+
-+ /* Windows driver sleeps here for a while with this sequence */
-+ for (count = 0; count < 200; count++) {
-+ udelay (50);
-+ }
-+
-+ /* now clear bit again: deassert eCPU reset */
-+ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__);
-+ clear_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
-+
-+ /* now start a burst read from initial EEPROM */
-+ set_regbits (adev, IO_ACX_EE_START, 0x1);
-+
-+ /*
-+ * Windows driver sleeps here for a while with this sequence
-+ */
-+ for (count = 0; count < 200; count++) {
-+ udelay (50);
-+ }
-+
-+ /* Windows driver writes 0x10000 to register 0x808 here */
-+
-+ write_reg32 (adev, 0x808, 0x10000);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_verify_init
-+*/
-+static int
-+acxmem_s_verify_init(acx_device_t *adev)
-+{
-+ int result = NOT_OK;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ timeout = jiffies + 2*HZ;
-+ for (;;) {
-+ u32 irqstat = read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if ((irqstat != 0xFFFFFFFF) && (irqstat & HOST_INT_FCS_THRESHOLD)) {
-+ result = OK;
-+ write_reg32(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD);
-+ break;
-+ }
-+ if (time_after(jiffies, timeout))
-+ break;
-+ /* Init may take up to ~0.5 sec total */
-+ acx_s_msleep(50);
-+ }
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** A few low-level helpers
-+**
-+** Note: these functions are not protected by lock
-+** and thus are never allowed to be called from IRQ.
-+** Also they must not race with fw upload which uses same hw regs
-+*/
-+
-+/***********************************************************************
-+** acxmem_write_cmd_type_status
-+*/
-+
-+static inline void
-+acxmem_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status)
-+{
-+ write_slavemem32 (adev, (u32) adev->cmd_area, type | (status << 16));
-+ write_flush(adev);
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_read_cmd_type_status
-+*/
-+static u32
-+acxmem_read_cmd_type_status(acx_device_t *adev)
-+{
-+ u32 cmd_type, cmd_status;
-+
-+ cmd_type = read_slavemem32 (adev, (u32) adev->cmd_area);
-+
-+ cmd_status = (cmd_type >> 16);
-+ cmd_type = (u16)cmd_type;
-+
-+ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n",
-+ cmd_type, cmd_status,
-+ acx_cmd_status_str(cmd_status));
-+
-+ return cmd_status;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_reset_dev
-+**
-+** Arguments:
-+** netdevice that contains the adev variable
-+** Returns:
-+** NOT_OK on fail
-+** OK on success
-+** Side effects:
-+** device is hard reset
-+** Call context:
-+** acxmem_e_probe
-+** Comment:
-+** This resets the device using low level hardware calls
-+** as well as uploads and verifies the firmware to the card
-+*/
-+
-+static inline void
-+init_mboxes(acx_device_t *adev)
-+{
-+ u32 cmd_offs, info_offs;
-+
-+ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS);
-+ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS);
-+ adev->cmd_area = (u8*) cmd_offs;
-+ adev->info_area = (u8*) info_offs;
-+ /*
-+ log(L_DEBUG, "iobase2=%p\n"
-+ */
-+ log( L_DEBUG, "cmd_mbox_offset=%X cmd_area=%p\n"
-+ "info_mbox_offset=%X info_area=%p\n",
-+ cmd_offs, adev->cmd_area,
-+ info_offs, adev->info_area);
-+}
-+
-+
-+static inline void
-+read_eeprom_area(acx_device_t *adev)
-+{
-+#if ACX_DEBUG > 1
-+ int offs;
-+ u8 tmp;
-+
-+ for (offs = 0x8c; offs < 0xb9; offs++)
-+ acxmem_read_eeprom_byte(adev, offs, &tmp);
-+#endif
-+}
-+
-+static int
-+acxmem_s_reset_dev(acx_device_t *adev)
-+{
-+ const char* msg = "";
-+ unsigned long flags;
-+ int result = NOT_OK;
-+ u16 hardware_info;
-+ u16 ecpu_ctrl;
-+ int count;
-+ u32 tmp;
-+
-+ FN_ENTER;
-+ /*
-+ write_reg32 (adev, IO_ACX_SLV_MEM_CP, 0);
-+ */
-+ /* reset the device to make sure the eCPU is stopped
-+ * to upload the firmware correctly */
-+
-+ acx_lock(adev, flags);
-+
-+ /* Windows driver does some funny things here */
-+ /*
-+ * clear bit 0x200 in register 0x2A0
-+ */
-+ clear_regbits (adev, 0x2A0, 0x200);
-+
-+ /*
-+ * Set bit 0x200 in ACX_GPIO_OUT
-+ */
-+ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
-+
-+ /*
-+ * read register 0x900 until its value is 0x8400104C, sleeping
-+ * in between reads if it's not immediate
-+ */
-+ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
-+ count = 500;
-+ while (count-- && (tmp != ACX_VENDOR_ID)) {
-+ mdelay (10);
-+ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
-+ }
-+
-+ /* end what Windows driver does */
-+
-+ acxmem_l_reset_mac(adev);
-+
-+ ecpu_ctrl = read_reg32(adev, IO_ACX_ECPU_CTRL) & 1;
-+ if (!ecpu_ctrl) {
-+ msg = "eCPU is already running. ";
-+ goto end_unlock;
-+ }
-+
-+#ifdef WE_DONT_NEED_THAT_DO_WE
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) {
-+ /* eCPU most likely means "embedded CPU" */
-+ msg = "eCPU did not start after boot from flash. ";
-+ goto end_unlock;
-+ }
-+
-+ /* check sense on reset flags */
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) {
-+ printk("%s: eCPU did not start after boot (SOR), "
-+ "is this fatal?\n", adev->ndev->name);
-+ }
-+#endif
-+ /* scan, if any, is stopped now, setting corresponding IRQ bit */
-+ adev->irq_status |= HOST_INT_SCAN_COMPLETE;
-+
-+ acx_unlock(adev, flags);
-+
-+ /* need to know radio type before fw load */
-+ /* Need to wait for arrival of this information in a loop,
-+ * most probably since eCPU runs some init code from EEPROM
-+ * (started burst read in reset_mac()) which also
-+ * sets the radio type ID */
-+
-+ count = 0xffff;
-+ do {
-+ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION);
-+ if (!--count) {
-+ msg = "eCPU didn't indicate radio type";
-+ goto end_fail;
-+ }
-+ cpu_relax();
-+ } while (!(hardware_info & 0xff00)); /* radio type still zero? */
-+ printk("ACX radio type 0x%02x\n", (hardware_info >> 8) & 0xff);
-+ /* printk("DEBUG: count %d\n", count); */
-+ adev->form_factor = hardware_info & 0xff;
-+ adev->radio_type = hardware_info >> 8;
-+
-+ /* load the firmware */
-+ if (OK != acxmem_s_upload_fw(adev))
-+ goto end_fail;
-+
-+ /* acx_s_msleep(10); this one really shouldn't be required */
-+
-+ /* now start eCPU by clearing bit */
-+ clear_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
-+ log(L_DEBUG, "booted eCPU up and waiting for completion...\n");
-+
-+ /* Windows driver clears bit 0x200 in register 0x2A0 here */
-+ clear_regbits (adev, 0x2A0, 0x200);
-+
-+ /* Windows driver sets bit 0x200 in ACX_GPIO_OUT here */
-+ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
-+ /* wait for eCPU bootup */
-+ if (OK != acxmem_s_verify_init(adev)) {
-+ msg = "timeout waiting for eCPU. ";
-+ goto end_fail;
-+ }
-+ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n");
-+ init_mboxes(adev);
-+ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
-+
-+ /* test that EEPROM is readable */
-+ read_eeprom_area(adev);
-+
-+ result = OK;
-+ goto end;
-+
-+/* Finish error message. Indicate which function failed */
-+end_unlock:
-+ acx_unlock(adev, flags);
-+end_fail:
-+ printk("acx: %sreset_dev() FAILED\n", msg);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_issue_cmd_timeo
-+**
-+** Sends command to fw, extract result
-+**
-+** NB: we do _not_ take lock inside, so be sure to not touch anything
-+** which may interfere with IRQ handler operation
-+**
-+** TODO: busy wait is a bit silly, so:
-+** 1) stop doing many iters - go to sleep after first
-+** 2) go to waitqueue based approach: wait, not poll!
-+*/
-+#undef FUNC
-+#define FUNC "issue_cmd"
-+
-+#if !ACX_DEBUG
-+int
-+acxmem_s_issue_cmd_timeo(
-+ acx_device_t *adev,
-+ unsigned int cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout)
-+{
-+#else
-+int
-+acxmem_s_issue_cmd_timeo_debug(
-+ acx_device_t *adev,
-+ unsigned cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout,
-+ const char* cmdstr)
-+{
-+ unsigned long start = jiffies;
-+#endif
-+ const char *devname;
-+ unsigned counter;
-+ u16 irqtype;
-+ int i, j;
-+ u8 *p;
-+ u16 cmd_status;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ devname = adev->ndev->name;
-+ if (!devname || !devname[0] || devname[4]=='%')
-+ devname = "acx";
-+
-+ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n",
-+ cmdstr, buflen, cmd_timeout,
-+ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
-+
-+ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) {
-+ printk("%s: "FUNC"(): firmware is not loaded yet, "
-+ "cannot execute commands!\n", devname);
-+ goto bad;
-+ }
-+
-+ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) {
-+ printk("input buffer (len=%u):\n", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+
-+ /* wait for firmware to become idle for our command submission */
-+ timeout = HZ/5;
-+ counter = (timeout * 1000 / HZ) - 1; /* in ms */
-+ timeout += jiffies;
-+ do {
-+ cmd_status = acxmem_read_cmd_type_status(adev);
-+ /* Test for IDLE state */
-+ if (!cmd_status)
-+ break;
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ if (!counter) {
-+ /* the card doesn't get idle, we're in trouble */
-+ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n",
-+ devname, cmd_status);
-+#if DUMP_IF_SLOW > 0
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("not idle");
-+#endif
-+ goto bad;
-+ } else if (counter < 190) { /* if waited >10ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. "
-+ "Please report\n", 199 - counter);
-+ }
-+
-+ /* now write the parameters of the command if needed */
-+ if (buffer && buflen) {
-+ /* if it's an INTERROGATE command, just pass the length
-+ * of parameters to read, as data */
-+#if CMD_DISCOVERY
-+ if (cmd == ACX1xx_CMD_INTERROGATE)
-+ memset_io(adev->cmd_area + 4, 0xAA, buflen);
-+#endif
-+ /*
-+ * slave memory version
-+ */
-+ copy_to_slavemem (adev, (u32) (adev->cmd_area + 4), buffer,
-+ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen);
-+ }
-+ /* now write the actual command type */
-+ acxmem_write_cmd_type_status(adev, cmd, 0);
-+
-+ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */
-+ adev->irq_status &= ~HOST_INT_CMD_COMPLETE;
-+
-+ /* execute command */
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD);
-+ write_flush(adev);
-+
-+ /* wait for firmware to process command */
-+
-+ /* Ensure nonzero and not too large timeout.
-+ ** Also converts e.g. 100->99, 200->199
-+ ** which is nice but not essential */
-+ cmd_timeout = (cmd_timeout-1) | 1;
-+ if (unlikely(cmd_timeout > 1199))
-+ cmd_timeout = 1199;
-+
-+ /* we schedule away sometimes (timeout can be large) */
-+ counter = cmd_timeout;
-+ timeout = jiffies + cmd_timeout * HZ / 1000;
-+ do {
-+ if (!adev->irqs_active) { /* IRQ disabled: poll */
-+ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ write_reg16(adev, IO_ACX_IRQ_ACK,
-+ HOST_INT_CMD_COMPLETE);
-+ break;
-+ }
-+ } else { /* Wait when IRQ will set the bit */
-+ irqtype = adev->irq_status;
-+ if (irqtype & HOST_INT_CMD_COMPLETE)
-+ break;
-+ }
-+
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ /* save state for debugging */
-+ cmd_status = acxmem_read_cmd_type_status(adev);
-+
-+ /* put the card in IDLE state */
-+ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
-+
-+ if (!counter) { /* timed out! */
-+ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. "
-+ "irq bits:0x%04X irq_status:0x%04X timeout:%dms "
-+ "cmd_status:%d (%s)\n",
-+ devname, (adev->irqs_active) ? "waiting" : "polling",
-+ irqtype, adev->irq_status, cmd_timeout,
-+ cmd_status, acx_cmd_status_str(cmd_status));
-+ printk("%s: "FUNC"(): device irq status 0x%04x\n",
-+ devname, read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES));
-+ printk("%s: "FUNC"(): IO_ACX_IRQ_MASK 0x%04x IO_ACX_FEMR 0x%04x\n",
-+ devname,
-+ read_reg16 (adev, IO_ACX_IRQ_MASK),
-+ read_reg16 (adev, IO_ACX_FEMR));
-+ if (read_reg16 (adev, IO_ACX_IRQ_MASK) == 0xffff) {
-+ printk ("acxmem: firmware probably hosed - reloading\n");
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+ {
-+ pm_message_t state;
-+ acxmem_e_suspend (resume_pdev, state);
-+ }
-+#else
-+ acxmem_e_suspend (adev->dev, 0);
-+#endif
-+ {
-+ struct work_struct *notused;
-+ fw_resumer (notused);
-+ }
-+ }
-+
-+ goto bad;
-+ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. "
-+ "count:%d. Please report\n",
-+ (adev->irqs_active) ? "waited" : "polled",
-+ cmd_timeout - counter, counter);
-+ }
-+
-+ if (1 != cmd_status) { /* it is not a 'Success' */
-+ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). "
-+ "Took %dms of %d\n",
-+ devname, cmd_status, acx_cmd_status_str(cmd_status),
-+ cmd_timeout - counter, cmd_timeout);
-+ /* zero out result buffer
-+ * WARNING: this will trash stack in case of illegally large input
-+ * length! */
-+ if (buflen > 388) {
-+ /*
-+ * 388 is maximum command length
-+ */
-+ printk ("invalid length 0x%08x\n", buflen);
-+ buflen = 388;
-+ }
-+ p = (u8 *) buffer;
-+ for (i = 0; i < buflen; i+= 16) {
-+ printk ("%04x:", i);
-+ for (j = 0; (j < 16) && (i+j < buflen); j++) {
-+ printk (" %02x", *p++);
-+ }
-+ printk ("\n");
-+ }
-+
-+ if (buffer && buflen)
-+ memset(buffer, 0, buflen);
-+ goto bad;
-+ }
-+
-+ /* read in result parameters if needed */
-+ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) {
-+ copy_from_slavemem (adev, buffer, (u32) (adev->cmd_area + 4), buflen);
-+ if (acx_debug & L_DEBUG) {
-+ printk("output buffer (len=%u): ", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+ }
-+
-+/* ok: */
-+ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n",
-+ cmdstr, jiffies - start);
-+ FN_EXIT1(OK);
-+ return OK;
-+
-+bad:
-+ /* Give enough info so that callers can avoid
-+ ** printing their own diagnostic messages */
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
-+#else
-+ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
-+#endif
-+ dump_stack();
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#if defined(NONESSENTIAL_FEATURES)
-+typedef struct device_id {
-+ unsigned char id[6];
-+ char *descr;
-+ char *type;
-+} device_id_t;
-+
-+static const device_id_t
-+device_ids[] =
-+{
-+ {
-+ {'G', 'l', 'o', 'b', 'a', 'l'},
-+ NULL,
-+ NULL,
-+ },
-+ {
-+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-+ "uninitialized",
-+ "SpeedStream SS1021 or Gigafast WF721-AEX"
-+ },
-+ {
-+ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85},
-+ "non-standard",
-+ "DrayTek Vigor 520"
-+ },
-+ {
-+ {'?', '?', '?', '?', '?', '?'},
-+ "non-standard",
-+ "Level One WPC-0200"
-+ },
-+ {
-+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-+ "empty",
-+ "DWL-650+ variant"
-+ }
-+};
-+
-+static void
-+acx_show_card_eeprom_id(acx_device_t *adev)
-+{
-+ unsigned char buffer[CARD_EEPROM_ID_SIZE];
-+ int i;
-+
-+ memset(&buffer, 0, CARD_EEPROM_ID_SIZE);
-+ /* use direct EEPROM access */
-+ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) {
-+ if (OK != acxmem_read_eeprom_byte(adev,
-+ ACX100_EEPROM_ID_OFFSET + i,
-+ &buffer[i])) {
-+ printk("acx: reading EEPROM FAILED\n");
-+ break;
-+ }
-+ }
-+
-+ for (i = 0; i < VEC_SIZE(device_ids); i++) {
-+ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) {
-+ if (device_ids[i].descr) {
-+ printk("acx: EEPROM card ID string check "
-+ "found %s card ID: is this %s?\n",
-+ device_ids[i].descr, device_ids[i].type);
-+ }
-+ break;
-+ }
-+ }
-+ if (i == VEC_SIZE(device_ids)) {
-+ printk("acx: EEPROM card ID string check found "
-+ "unknown card: expected 'Global', got '%.*s\'. "
-+ "Please report\n", CARD_EEPROM_ID_SIZE, buffer);
-+ }
-+}
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+/***********************************************************************
-+** acxmem_free_desc_queues
-+**
-+** Releases the queues that have been allocated, the
-+** others have been initialised to NULL so this
-+** function can be used if only part of the queues were allocated.
-+*/
-+
-+void
-+acxmem_free_desc_queues(acx_device_t *adev)
-+{
-+#define ACX_FREE_QUEUE(size, ptr, phyaddr) \
-+ if (ptr) { \
-+ kfree(ptr); \
-+ ptr = NULL; \
-+ size = 0; \
-+ }
-+
-+ FN_ENTER;
-+
-+ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy);
-+
-+ adev->txdesc_start = NULL;
-+
-+ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy);
-+
-+ adev->rxdesc_start = NULL;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_delete_dma_regions
-+*/
-+static void
-+acxmem_s_delete_dma_regions(acx_device_t *adev)
-+{
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+ /* disable radio Tx/Rx. Shouldn't we use the firmware commands
-+ * here instead? Or are we that much down the road that it's no
-+ * longer possible here? */
-+ /*
-+ * slave memory interface really doesn't like this.
-+ */
-+ /*
-+ write_reg16(adev, IO_ACX_ENABLE, 0);
-+ */
-+
-+ acx_s_msleep(100);
-+
-+ acx_lock(adev, flags);
-+ acxmem_free_desc_queues(adev);
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_probe
-+**
-+** Probe routine called when a PCI device w/ matching ID is found.
-+** Here's the sequence:
-+** - Allocate the PCI resources.
-+** - Read the PCMCIA attribute memory to make sure we have a WLAN card
-+** - Reset the MAC
-+** - Initialize the dev and wlan data
-+** - Initialize the MAC
-+**
-+** pdev - ptr to pci device structure containing info about pci configuration
-+** id - ptr to the device id entry that matched this device
-+*/
-+static const u16
-+IO_ACX100[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_END_CTL */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x007c, /* IO_ACX_INT_TRIG */
-+ 0x0098, /* IO_ACX_IRQ_MASK */
-+ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00ac, /* IO_ACX_IRQ_ACK */
-+ 0x00b0, /* IO_ACX_HINT_TRIG */
-+
-+ 0x0104, /* IO_ACX_ENABLE */
-+
-+ 0x0250, /* IO_ACX_EEPROM_CTL */
-+ 0x0254, /* IO_ACX_EEPROM_ADDR */
-+ 0x0258, /* IO_ACX_EEPROM_DATA */
-+ 0x025c, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0268, /* IO_ACX_PHY_ADDR */
-+ 0x026c, /* IO_ACX_PHY_DATA */
-+ 0x0270, /* IO_ACX_PHY_CTL */
-+
-+ 0x0290, /* IO_ACX_GPIO_OE */
-+
-+ 0x0298, /* IO_ACX_GPIO_OUT */
-+
-+ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x02d0, /* IO_ACX_EE_START */
-+ 0x02d4, /* IO_ACX_SOR_CFG */
-+ 0x02d8 /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static const u16
-+IO_ACX111[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_MEM_CP */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x00b4, /* IO_ACX_INT_TRIG */
-+ 0x00d4, /* IO_ACX_IRQ_MASK */
-+ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */
-+ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00e8, /* IO_ACX_IRQ_ACK */
-+ 0x00ec, /* IO_ACX_HINT_TRIG */
-+
-+ 0x01d0, /* IO_ACX_ENABLE */
-+
-+ 0x0338, /* IO_ACX_EEPROM_CTL */
-+ 0x033c, /* IO_ACX_EEPROM_ADDR */
-+ 0x0340, /* IO_ACX_EEPROM_DATA */
-+ 0x0344, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0350, /* IO_ACX_PHY_ADDR */
-+ 0x0354, /* IO_ACX_PHY_DATA */
-+ 0x0358, /* IO_ACX_PHY_CTL */
-+
-+ 0x0374, /* IO_ACX_GPIO_OE */
-+
-+ 0x037c, /* IO_ACX_GPIO_OUT */
-+
-+ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x0390, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x0100, /* IO_ACX_EE_START */
-+ 0x0104, /* IO_ACX_SOR_CFG */
-+ 0x0108, /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static void
-+dummy_netdev_init(struct net_device *ndev) {}
-+
-+/*
-+ * Most of the acx specific pieces of hardware reset.
-+ */
-+static int
-+acxmem_complete_hw_reset (acx_device_t *adev)
-+{
-+ acx111_ie_configoption_t co;
-+
-+ /* NB: read_reg() reads may return bogus data before reset_dev(),
-+ * since the firmware which directly controls large parts of the I/O
-+ * registers isn't initialized yet.
-+ * acx100 seems to be more affected than acx111 */
-+ if (OK != acxmem_s_reset_dev (adev))
-+ return -1;
-+
-+ if (IS_ACX100(adev)) {
-+ /* ACX100: configopt struct in cmd mailbox - directly after reset */
-+ copy_from_slavemem (adev, (u8*) &co, (u32) adev->cmd_area, sizeof (co));
-+ }
-+
-+ if (OK != acx_s_init_mac(adev))
-+ return -3;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111: configopt struct needs to be queried after full init */
-+ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS);
-+ }
-+
-+ /*
-+ * Set up transmit buffer administration
-+ */
-+ init_acx_txbuf (adev);
-+
-+ /*
-+ * Windows driver writes 0x01000000 to register 0x288, RADIO_CTL, if the form factor
-+ * is 3. It also write protects the EEPROM by writing 1<<9 to GPIO_OUT
-+ */
-+ if (adev->form_factor == 3) {
-+ set_regbits (adev, 0x288, 0x01000000);
-+ set_regbits (adev, 0x298, 1<<9);
-+ }
-+
-+/* TODO: merge them into one function, they are called just once and are the same for pci & usb */
-+ if (OK != acxmem_read_eeprom_byte(adev, 0x05, &adev->eeprom_version))
-+ return -2;
-+
-+ acx_s_parse_configoption(adev, &co);
-+ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */
-+ acx_display_hardware_details(adev);
-+
-+ return 0;
-+}
-+
-+static int __devinit
-+acxmem_e_probe(struct platform_device *pdev)
-+{
-+ struct acx_hardware_data *hwdata = pdev->dev.platform_data;
-+ acx_device_t *adev = NULL;
-+ struct net_device *ndev = NULL;
-+ const char *chip_name;
-+ int result = -EIO;
-+ int err;
-+ int i;
-+ unsigned long addr_size=0;
-+ u8 chip_type;
-+
-+ FN_ENTER;
-+ (void) hwdata->start_hw();
-+
-+ /* FIXME: prism54 calls pci_set_mwi() here,
-+ * should we do/support the same? */
-+
-+ /* chiptype is u8 but id->driver_data is ulong
-+ ** Works for now (possible values are 1 and 2) */
-+ chip_type = CHIPTYPE_ACX100;
-+ /* acx100 and acx111 have different PCI memory regions */
-+ if (chip_type == CHIPTYPE_ACX100) {
-+ chip_name = "ACX100";
-+ } else if (chip_type == CHIPTYPE_ACX111) {
-+ chip_name = "ACX111";
-+ } else {
-+ printk("acx: unknown chip type 0x%04X\n", chip_type);
-+ goto fail_unknown_chiptype;
-+ }
-+
-+ printk("acx: found %s-based wireless network card\n", chip_name);
-+ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug);
-+
-+ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init);
-+ /* (NB: memsets to 0 entire area) */
-+ if (!ndev) {
-+ printk("acx: no memory for netdevice struct\n");
-+ goto fail_alloc_netdev;
-+ }
-+
-+ platform_set_drvdata (pdev, ndev);
-+
-+ ether_setup(ndev);
-+
-+ /*
-+ * use platform_data resources that were provided
-+ */
-+ ndev->irq = 0;
-+ for (i=0; i<pdev->num_resources; i++) {
-+ if (pdev->resource[i].flags == IORESOURCE_IRQ) {
-+ ndev->irq = pdev->resource[i].start;
-+ }
-+ else if (pdev->resource[i].flags == IORESOURCE_MEM) {
-+ ndev->base_addr = pdev->resource[i].start;
-+ addr_size = pdev->resource[i].end - pdev->resource[i].start;
-+ }
-+ }
-+ if (addr_size == 0 || ndev->irq == 0)
-+ goto fail_hw_params;
-+ ndev->open = &acxmem_e_open;
-+ ndev->stop = &acxmem_e_close;
-+ pdev->dev.release = &acxmem_e_release;
-+ ndev->hard_start_xmit = &acx_i_start_xmit;
-+ ndev->get_stats = &acx_e_get_stats;
-+#if IW_HANDLER_VERSION <= 5
-+ ndev->get_wireless_stats = &acx_e_get_wireless_stats;
-+#endif
-+ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
-+ ndev->set_multicast_list = &acxmem_i_set_multicast_list;
-+ ndev->tx_timeout = &acxmem_i_tx_timeout;
-+ ndev->change_mtu = &acx_e_change_mtu;
-+ ndev->watchdog_timeo = 4 * HZ;
-+
-+ adev = ndev2adev(ndev);
-+ spin_lock_init(&adev->lock); /* initial state: unlocked */
-+ spin_lock_init(&adev->txbuf_lock);
-+ /* We do not start with downed sem: we want PARANOID_LOCKING to work */
-+ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
-+ /* since nobody can see new netdev yet, we can as well
-+ ** just _presume_ that we're under sem (instead of actually taking it): */
-+ /* acx_sem_lock(adev); */
-+ adev->dev = &pdev->dev;
-+ adev->ndev = ndev;
-+ adev->dev_type = DEVTYPE_MEM;
-+ adev->chip_type = chip_type;
-+ adev->chip_name = chip_name;
-+ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111;
-+ adev->membase = (volatile u32 *) ndev->base_addr;
-+ adev->iobase = (volatile u32 *) ioremap_nocache (ndev->base_addr, addr_size);
-+ /* to find crashes due to weird driver access
-+ * to unconfigured interface (ifup) */
-+ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead;
-+
-+#if defined(NONESSENTIAL_FEATURES)
-+ acx_show_card_eeprom_id(adev);
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+#ifdef SET_MODULE_OWNER
-+ SET_MODULE_OWNER(ndev);
-+#endif
-+ SET_NETDEV_DEV(ndev, &pdev->dev);
-+
-+ log(L_IRQ|L_INIT, "using IRQ %d\n", ndev->irq);
-+
-+ /* ok, pci setup is finished, now start initializing the card */
-+
-+ if (OK != acxmem_complete_hw_reset (adev))
-+ goto fail_reset;
-+
-+ /*
-+ * Set up default things for most of the card settings.
-+ */
-+ acx_s_set_defaults(adev);
-+
-+ /* Register the card, AFTER everything else has been set up,
-+ * since otherwise an ioctl could step on our feet due to
-+ * firmware operations happening in parallel or uninitialized data */
-+ err = register_netdev(ndev);
-+ if (OK != err) {
-+ printk("acx: register_netdev() FAILED: %d\n", err);
-+ goto fail_register_netdev;
-+ }
-+
-+ acx_proc_register_entries(ndev);
-+
-+ /* Now we have our device, so make sure the kernel doesn't try
-+ * to send packets even though we're not associated to a network yet */
-+ acx_stop_queue(ndev, "on probe");
-+ acx_carrier_off(ndev, "on probe");
-+
-+ /*
-+ * Set up a default monitor type so that poor combinations of initialization
-+ * sequences in monitor mode don't end up destroying the hardware type.
-+ */
-+ adev->monitor_type = ARPHRD_ETHER;
-+
-+ /*
-+ * Register to receive inetaddr notifier changes. This will allow us to
-+ * catch if the user changes the MAC address of the interface.
-+ */
-+ register_netdevice_notifier(&acx_netdev_notifier);
-+
-+ /* after register_netdev() userspace may start working with dev
-+ * (in particular, on other CPUs), we only need to up the sem */
-+ /* acx_sem_unlock(adev); */
-+
-+ printk("acx "ACX_RELEASE": net device %s, driver compiled "
-+ "against wireless extensions %d and Linux %s\n",
-+ ndev->name, WIRELESS_EXT, UTS_RELEASE);
-+
-+#if CMD_DISCOVERY
-+ great_inquisitor(adev);
-+#endif
-+
-+ result = OK;
-+ goto done;
-+
-+ /* error paths: undo everything in reverse order... */
-+
-+fail_register_netdev:
-+
-+ acxmem_s_delete_dma_regions(adev);
-+
-+fail_reset:
-+fail_hw_params:
-+ free_netdev(ndev);
-+fail_alloc_netdev:
-+fail_unknown_chiptype:
-+
-+
-+done:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_remove
-+**
-+** Shut device down (if not hot unplugged)
-+** and deallocate PCI resources for the acx chip.
-+**
-+** pdev - ptr to PCI device structure containing info about pci configuration
-+*/
-+static int __devexit
-+acxmem_e_remove(struct platform_device *pdev)
-+{
-+ struct acx_hardware_data *hwdata = pdev->dev.platform_data;
-+ struct net_device *ndev;
-+ acx_device_t *adev;
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ ndev = (struct net_device*) platform_get_drvdata(pdev);
-+ if (!ndev) {
-+ log(L_DEBUG, "%s: card is unused. Skipping any release code\n",
-+ __func__);
-+ goto end;
-+ }
-+
-+ adev = ndev2adev(ndev);
-+
-+ /* If device wasn't hot unplugged... */
-+ if (adev_present(adev)) {
-+
-+ acx_sem_lock(adev);
-+
-+ /* disable both Tx and Rx to shut radio down properly */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
-+
-+#ifdef REDUNDANT
-+ /* put the eCPU to sleep to save power
-+ * Halting is not possible currently,
-+ * since not supported by all firmware versions */
-+ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0);
-+#endif
-+ acx_lock(adev, flags);
-+
-+ /* disable power LED to save power :-) */
-+ log(L_INIT, "switching off power LED to save power\n");
-+ acxmem_l_power_led(adev, 0);
-+
-+ /* stop our eCPU */
-+ if (IS_ACX111(adev)) {
-+ /* FIXME: does this actually keep halting the eCPU?
-+ * I don't think so...
-+ */
-+ acxmem_l_reset_mac(adev);
-+ } else {
-+ u16 temp;
-+
-+ /* halt eCPU */
-+ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
-+ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
-+ write_flush(adev);
-+ }
-+
-+ acx_unlock(adev, flags);
-+
-+ acx_sem_unlock(adev);
-+ }
-+
-+
-+ /*
-+ * Unregister the notifier chain
-+ */
-+ unregister_netdevice_notifier(&acx_netdev_notifier);
-+
-+ /* unregister the device to not let the kernel
-+ * (e.g. ioctls) access a half-deconfigured device
-+ * NB: this will cause acxmem_e_close() to be called,
-+ * thus we shouldn't call it under sem! */
-+ log(L_INIT, "removing device %s\n", ndev->name);
-+ unregister_netdev(ndev);
-+
-+ /* unregister_netdev ensures that no references to us left.
-+ * For paranoid reasons we continue to follow the rules */
-+ acx_sem_lock(adev);
-+
-+ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) {
-+ acxmem_s_down(ndev);
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ }
-+
-+ acx_proc_unregister_entries(ndev);
-+
-+ acxmem_s_delete_dma_regions(adev);
-+
-+ /* finally, clean up PCI bus state */
-+ if (adev->iobase) iounmap((void *)adev->iobase);
-+
-+ acx_sem_unlock(adev);
-+
-+ /* Free netdev (quite late,
-+ * since otherwise we might get caught off-guard
-+ * by a netdev timeout handler execution
-+ * expecting to see a working dev...) */
-+ free_netdev(ndev);
-+
-+ (void) hwdata->stop_hw();
-+
-+ printk ("e_remove done\n");
-+end:
-+ FN_EXIT0;
-+
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** TODO: PM code needs to be fixed / debugged / tested.
-+*/
-+#ifdef CONFIG_PM
-+static int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+acxmem_e_suspend(struct platform_device *pdev, pm_message_t state)
-+#else
-+acxmem_e_suspend(struct device *pdev, u32 state)
-+#endif
-+{
-+ struct net_device *ndev = platform_get_drvdata(pdev);
-+ acx_device_t *adev;
-+ struct acx_hardware_data *hwdata;
-+
-+ FN_ENTER;
-+ printk("acx: suspend handler is experimental!\n");
-+ printk("sus: dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ goto end;
-+
-+ adev = ndev2adev(ndev);
-+ printk("sus: adev %p\n", adev);
-+
-+ hwdata = adev->dev->platform_data;
-+
-+ acx_sem_lock(adev);
-+
-+ netif_device_detach(ndev); /* this one cannot sleep */
-+ acxmem_s_down(ndev);
-+ /* down() does not set it to 0xffff, but here we really want that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ acxmem_s_delete_dma_regions(adev);
-+
-+ /*
-+ * Turn the ACX chip off.
-+ */
-+ hwdata->stop_hw();
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+
-+static void
-+fw_resumer(struct work_struct *notused)
-+{
-+ struct platform_device *pdev = resume_pdev;
-+ struct net_device *ndev = platform_get_drvdata(pdev);
-+ acx_device_t *adev;
-+ struct acx_hardware_data *hwdata;
-+
-+ printk("acx: resume handler is experimental!\n");
-+ printk("rsm: got dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ return;
-+
-+ adev = ndev2adev(ndev);
-+ printk("rsm: got adev %p\n", adev);
-+
-+ acx_sem_lock(adev);
-+
-+ hwdata = adev->dev->platform_data;
-+
-+ /*
-+ * Turn on the ACX.
-+ */
-+ hwdata->start_hw();
-+
-+ acxmem_complete_hw_reset (adev);
-+
-+ /*
-+ * done by acx_s_set_defaults for initial startup
-+ */
-+ acxmem_set_interrupt_mask(adev);
-+
-+ printk ("rsm: bringing up interface\n");
-+ SET_BIT (adev->set_mask, GETSET_ALL);
-+ acxmem_s_up(ndev);
-+ printk("rsm: acx up done\n");
-+
-+ /* now even reload all card parameters as they were before suspend,
-+ * and possibly be back in the network again already :-)
-+ */
-+ /* - most settings updated in acxmem_s_up()
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) {
-+ adev->set_mask = GETSET_ALL;
-+ acx_s_update_card_settings(adev);
-+ printk("rsm: settings updated\n");
-+ }
-+ */
-+ netif_device_attach(ndev);
-+ printk("rsm: device attached\n");
-+
-+ acx_sem_unlock(adev);
-+}
-+
-+DECLARE_WORK( fw_resume_work, fw_resumer );
-+
-+static int
-+acxmem_e_resume(struct platform_device *pdev)
-+{
-+ FN_ENTER;
-+
-+ resume_pdev = pdev;
-+ schedule_work( &fw_resume_work );
-+
-+ FN_EXIT0;
-+ return OK;
-+}
-+#endif /* CONFIG_PM */
-+
-+
-+/***********************************************************************
-+** acxmem_s_up
-+**
-+** This function is called by acxmem_e_open (when ifconfig sets the device as up)
-+**
-+** Side effects:
-+** - Enables on-card interrupt requests
-+** - calls acx_s_start
-+*/
-+
-+static void
-+enable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask);
-+ write_reg16(adev, IO_ACX_FEMR, 0x8000);
-+ adev->irqs_active = 1;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxmem_s_up(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+ enable_acx_irq(adev);
-+ acx_unlock(adev, flags);
-+
-+ /* acx fw < 1.9.3.e has a hardware timer, and older drivers
-+ ** used to use it. But we don't do that anymore, our OS
-+ ** has reliable software timers */
-+ init_timer(&adev->mgmt_timer);
-+ adev->mgmt_timer.function = acx_i_timer;
-+ adev->mgmt_timer.data = (unsigned long)adev;
-+
-+ /* Need to set ACX_STATE_IFACE_UP first, or else
-+ ** timer won't be started by acx_set_status() */
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ /* actual scan cmd will happen in start() */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING); break;
-+ case ACX_MODE_3_AP:
-+ case ACX_MODE_MONITOR:
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break;
-+ }
-+
-+ acx_s_start(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_down
-+**
-+** This disables the netdevice
-+**
-+** Side effects:
-+** - disables on-card interrupt request
-+*/
-+
-+static void
-+disable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+
-+ /* I guess mask is not 0xffff because acx100 won't signal
-+ ** cmd completion then (needed for ifup).
-+ ** Someone with acx100 please confirm */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ adev->irqs_active = 0;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxmem_s_down(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ /* Disable IRQs first, so that IRQs cannot race with us */
-+ /* then wait until interrupts have finished executing on other CPUs */
-+ acx_lock(adev, flags);
-+ disable_acx_irq(adev);
-+ synchronize_irq(adev->pdev->irq);
-+ acx_unlock(adev, flags);
-+
-+ /* we really don't want to have an asynchronous tasklet disturb us
-+ ** after something vital for its job has been shut down, so
-+ ** end all remaining work now.
-+ **
-+ ** NB: carrier_off (done by set_status below) would lead to
-+ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK().
-+ ** That's why we do FLUSH first.
-+ **
-+ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK()
-+ ** waits for acx_e_after_interrupt_task to complete if it is running
-+ ** on another CPU, but acx_e_after_interrupt_task
-+ ** will sleep on sem forever, because it is taken by us!
-+ ** Work around that by temporary sem unlock.
-+ ** This will fail miserably if we'll be hit by concurrent
-+ ** iwconfig or something in between. TODO! */
-+ acx_sem_unlock(adev);
-+ FLUSH_SCHEDULED_WORK();
-+ acx_sem_lock(adev);
-+
-+ /* This is possible:
-+ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task ->
-+ ** -> set_status(ASSOCIATED) -> wake_queue()
-+ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK
-+ ** lock/unlock is just paranoia, maybe not needed */
-+ acx_lock(adev, flags);
-+ acx_stop_queue(ndev, "on ifdown");
-+ acx_set_status(adev, ACX_STATUS_0_STOPPED);
-+ acx_unlock(adev, flags);
-+
-+ /* kernel/timer.c says it's illegal to del_timer_sync()
-+ ** a timer which restarts itself. We guarantee this cannot
-+ ** ever happen because acx_i_timer() never does this if
-+ ** status is ACX_STATUS_0_STOPPED */
-+ del_timer_sync(&adev->mgmt_timer);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_open
-+**
-+** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP
-+** from clear to set. In other words: ifconfig up.
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxmem_e_open(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ acx_init_task_scheduler(adev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D0); ? */
-+
-+ /* request shared IRQ handler */
-+ if (request_irq(ndev->irq, acxmem_i_interrupt, SA_INTERRUPT, ndev->name, ndev)) {
-+ printk("%s: request_irq FAILED\n", ndev->name);
-+ result = -EAGAIN;
-+ goto done;
-+ }
-+ set_irq_type (ndev->irq, IRQT_FALLING);
-+ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq);
-+
-+ /* ifup device */
-+ acxmem_s_up(ndev);
-+
-+ /* We don't currently have to do anything else.
-+ * The setup of the MAC should be subsequently completed via
-+ * the mlme commands.
-+ * Higher layers know we're ready from dev->start==1 and
-+ * dev->tbusy==0. Our rx path knows to pass up received/
-+ * frames because of dev->flags&IFF_UP is true.
-+ */
-+done:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_close
-+**
-+** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP
-+** from set to clear. I.e. called by "ifconfig DEV down"
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxmem_e_close(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* ifdown device */
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ if (netif_device_present(ndev)) {
-+ acxmem_s_down(ndev);
-+ }
-+
-+ /* disable all IRQs, release shared IRQ handler */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ free_irq(ndev->irq, ndev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */
-+
-+ /* We currently don't have to do anything else.
-+ * Higher layers know we're not ready from dev->start==0 and
-+ * dev->tbusy==1. Our rx path knows to not pass up received
-+ * frames because of dev->flags&IFF_UP is false.
-+ */
-+ acx_sem_unlock(adev);
-+
-+ log(L_INIT, "closed device\n");
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_tx_timeout
-+**
-+** Called from network core. Must not sleep!
-+*/
-+static void
-+acxmem_i_tx_timeout(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ unsigned int tx_num_cleaned;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* clean processed tx descs, they may have been completely full */
-+ tx_num_cleaned = acxmem_l_clean_txdesc(adev);
-+
-+ /* nothing cleaned, yet (almost) no free buffers available?
-+ * --> clean all tx descs, no matter which status!!
-+ * Note that I strongly suspect that doing emergency cleaning
-+ * may confuse the firmware. This is a last ditch effort to get
-+ * ANYTHING to work again...
-+ *
-+ * TODO: it's best to simply reset & reinit hw from scratch...
-+ */
-+ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) {
-+ printk("%s: FAILED to free any of the many full tx buffers. "
-+ "Switching to emergency freeing. "
-+ "Please report!\n", ndev->name);
-+ acxmem_l_clean_txdesc_emergency(adev);
-+ }
-+
-+ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status))
-+ acx_wake_queue(ndev, "after tx timeout");
-+
-+ /* stall may have happened due to radio drift, so recalib radio */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+
-+ /* do unimportant work last */
-+ printk("%s: tx timeout!\n", ndev->name);
-+ adev->stats.tx_errors++;
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_set_multicast_list
-+** FIXME: most likely needs refinement
-+*/
-+static void
-+acxmem_i_set_multicast_list(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* firmwares don't have allmulti capability,
-+ * so just use promiscuous mode instead in this case. */
-+ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
-+ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ /* let kernel know in case *we* needed to set promiscuous */
-+ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI);
-+ } else {
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI);
-+ }
-+
-+ /* cannot update card settings directly here, atomic context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_l_process_rxdesc
-+**
-+** Called directly and only from the IRQ handler
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_rxbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_rxbuffer(const acx_device_t *adev)
-+{
-+ register const struct rxhostdesc *rxhostdesc;
-+ int i;
-+ /* no FN_ENTER here, we don't want that */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+ if (unlikely(!rxhostdesc)) return;
-+ for (i = 0; i < RX_CNT; i++) {
-+ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
-+ printk("rx: buf %d full\n", i);
-+ rxhostdesc++;
-+ }
-+}
-+#endif
-+
-+static void
-+acxmem_l_process_rxdesc(acx_device_t *adev)
-+{
-+ register rxhostdesc_t *hostdesc;
-+ register rxdesc_t *rxdesc;
-+ unsigned count, tail;
-+ u32 addr;
-+ u8 Ctl_8;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(acx_debug & L_BUFR))
-+ log_rxbuffer(adev);
-+
-+ /* First, have a loop to determine the first descriptor that's
-+ * full, just in case there's a mismatch between our current
-+ * rx_tail and the full descriptor we're supposed to handle. */
-+ tail = adev->rx_tail;
-+ count = RX_CNT;
-+ while (1) {
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+ rxdesc = &adev->rxdesc_start[tail];
-+ /* advance tail regardless of outcome of the below test */
-+ tail = (tail + 1) % RX_CNT;
-+
-+ /*
-+ * Unlike the PCI interface, where the ACX can write directly to
-+ * the host descriptors, on the slave memory interface we have to
-+ * pull these. All we really need to do is check the Ctl_8 field
-+ * in the rx descriptor on the ACX, which should be 0x11000000 if
-+ * we should process it.
-+ */
-+ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+ if ((Ctl_8 & DESC_CTL_HOSTOWN) &&
-+ (Ctl_8 & DESC_CTL_ACXDONE))
-+ break; /* found it! */
-+
-+ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */
-+ goto end;
-+ }
-+
-+ /* now process descriptors, starting with the first we figured out */
-+ while (1) {
-+ log(L_BUFR, "rx: tail=%u Ctl_8=%02X\n", tail, Ctl_8);
-+ /*
-+ * If the ACX has CTL_RECLAIM set on this descriptor there
-+ * is no buffer associated; it just wants us to tell it to
-+ * reclaim the memory.
-+ */
-+ if (!(Ctl_8 & DESC_CTL_RECLAIM)) {
-+
-+ /*
-+ * slave interface - pull data now
-+ */
-+ hostdesc->length = read_slavemem16 (adev, (u32) &(rxdesc->total_length));
-+
-+ /*
-+ * hostdesc->data is an rxbuffer_t, which includes header information,
-+ * but the length in the data packet doesn't. The header information
-+ * takes up an additional 12 bytes, so add that to the length we copy.
-+ */
-+ addr = read_slavemem32 (adev, (u32) &(rxdesc->ACXMemPtr));
-+ if (addr) {
-+ /*
-+ * How can &(rxdesc->ACXMemPtr) above ever be zero? Looks like we
-+ * get that now and then - try to trap it for debug.
-+ */
-+ if (addr & 0xffff0000) {
-+ printk("rxdesc 0x%08x\n", (u32) rxdesc);
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("Bad access!");
-+ }
-+ chaincopy_from_slavemem (adev, (u8 *) hostdesc->data, addr,
-+ hostdesc->length +
-+ (u32) &((rxbuffer_t *)0)->hdr_a3);
-+ acx_l_process_rxbuf(adev, hostdesc->data);
-+ }
-+ }
-+ else {
-+ printk ("rx reclaim only!\n");
-+ }
-+
-+ hostdesc->Status = 0;
-+
-+ /*
-+ * Let the ACX know we're done.
-+ */
-+ CLEAR_BIT (Ctl_8, DESC_CTL_HOSTOWN);
-+ SET_BIT (Ctl_8, DESC_CTL_HOSTDONE);
-+ SET_BIT (Ctl_8, DESC_CTL_RECLAIM);
-+ write_slavemem8 (adev, (u32) &rxdesc->Ctl_8, Ctl_8);
-+
-+ /*
-+ * Now tell the ACX we've finished with the receive buffer so
-+ * it can finish the reclaim.
-+ */
-+ write_reg16 (adev, IO_ACX_INT_TRIG, INT_TRIG_RXPRC);
-+
-+ /* ok, descriptor is handled, now check the next descriptor */
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+ rxdesc = &adev->rxdesc_start[tail];
-+
-+ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+
-+ /* if next descriptor is empty, then bail out */
-+ if (!(Ctl_8 & DESC_CTL_HOSTOWN) || !(Ctl_8 & DESC_CTL_ACXDONE))
-+ break;
-+
-+ tail = (tail + 1) % RX_CNT;
-+ }
-+end:
-+ adev->rx_tail = tail;
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_i_interrupt
-+**
-+** IRQ handler (atomic context, must not sleep, blah, blah)
-+*/
-+
-+/* scan is complete. all frames now on the receive queue are valid */
-+#define INFO_SCAN_COMPLETE 0x0001
-+#define INFO_WEP_KEY_NOT_FOUND 0x0002
-+/* hw has been reset as the result of a watchdog timer timeout */
-+#define INFO_WATCH_DOG_RESET 0x0003
-+/* failed to send out NULL frame from PS mode notification to AP */
-+/* recommended action: try entering 802.11 PS mode again */
-+#define INFO_PS_FAIL 0x0004
-+/* encryption/decryption process on a packet failed */
-+#define INFO_IV_ICV_FAILURE 0x0005
-+
-+/* Info mailbox format:
-+2 bytes: type
-+2 bytes: status
-+more bytes may follow
-+ rumors say about status:
-+ 0x0000 info available (set by hw)
-+ 0x0001 information received (must be set by host)
-+ 0x1000 info available, mailbox overflowed (messages lost) (set by hw)
-+ but in practice we've seen:
-+ 0x9000 when we did not set status to 0x0001 on prev message
-+ 0x1001 when we did set it
-+ 0x0000 was never seen
-+ conclusion: this is really a bitfield:
-+ 0x1000 is 'info available' bit
-+ 'mailbox overflowed' bit is 0x8000, not 0x1000
-+ value of 0x0000 probably means that there are no messages at all
-+ P.S. I dunno how in hell hw is supposed to notice that messages are lost -
-+ it does NOT clear bit 0x0001, and this bit will probably stay forever set
-+ after we set it once. Let's hope this will be fixed in firmware someday
-+*/
-+
-+static void
-+handle_info_irq(acx_device_t *adev)
-+{
-+#if ACX_DEBUG
-+ static const char * const info_type_msg[] = {
-+ "(unknown)",
-+ "scan complete",
-+ "WEP key not found",
-+ "internal watchdog reset was done",
-+ "failed to send powersave (NULL frame) notification to AP",
-+ "encrypt/decrypt on a packet has failed",
-+ "TKIP tx keys disabled",
-+ "TKIP rx keys disabled",
-+ "TKIP rx: key ID not found",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "TKIP IV value exceeds thresh"
-+ };
-+#endif
-+ u32 info_type, info_status;
-+
-+ info_type = read_slavemem32 (adev, (u32) adev->info_area);
-+
-+ info_status = (info_type >> 16);
-+ info_type = (u16)info_type;
-+
-+ /* inform fw that we have read this info message */
-+ write_slavemem32(adev, (u32) adev->info_area, info_type | 0x00010000);
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK);
-+ write_flush(adev);
-+
-+ log(L_CTL, "info_type:%04X info_status:%04X\n",
-+ info_type, info_status);
-+
-+ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n",
-+ info_status, info_type,
-+ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ?
-+ 0 : info_type]
-+ );
-+}
-+
-+
-+static void
-+log_unusual_irq(u16 irqtype) {
-+ /*
-+ if (!printk_ratelimit())
-+ return;
-+ */
-+
-+ printk("acx: got");
-+ if (irqtype & HOST_INT_TX_XFER) {
-+ printk(" Tx_Xfer");
-+ }
-+ if (irqtype & HOST_INT_RX_COMPLETE) {
-+ printk(" Rx_Complete");
-+ }
-+ if (irqtype & HOST_INT_DTIM) {
-+ printk(" DTIM");
-+ }
-+ if (irqtype & HOST_INT_BEACON) {
-+ printk(" Beacon");
-+ }
-+ if (irqtype & HOST_INT_TIMER) {
-+ log(L_IRQ, " Timer");
-+ }
-+ if (irqtype & HOST_INT_KEY_NOT_FOUND) {
-+ printk(" Key_Not_Found");
-+ }
-+ if (irqtype & HOST_INT_IV_ICV_FAILURE) {
-+ printk(" IV_ICV_Failure (crypto)");
-+ }
-+ /* HOST_INT_CMD_COMPLETE */
-+ /* HOST_INT_INFO */
-+ if (irqtype & HOST_INT_OVERFLOW) {
-+ printk(" Overflow");
-+ }
-+ if (irqtype & HOST_INT_PROCESS_ERROR) {
-+ printk(" Process_Error");
-+ }
-+ /* HOST_INT_SCAN_COMPLETE */
-+ if (irqtype & HOST_INT_FCS_THRESHOLD) {
-+ printk(" FCS_Threshold");
-+ }
-+ if (irqtype & HOST_INT_UNKNOWN) {
-+ printk(" Unknown");
-+ }
-+ printk(" IRQ(s)\n");
-+}
-+
-+
-+static void
-+update_link_quality_led(acx_device_t *adev)
-+{
-+ int qual;
-+
-+ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise);
-+ if (qual > adev->brange_max_quality)
-+ qual = adev->brange_max_quality;
-+
-+ if (time_after(jiffies, adev->brange_time_last_state_change +
-+ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) {
-+ acxmem_l_power_led(adev, (adev->brange_last_state == 0));
-+ adev->brange_last_state ^= 1; /* toggle */
-+ adev->brange_time_last_state_change = jiffies;
-+ }
-+}
-+
-+
-+#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */
-+
-+static irqreturn_t
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+acxmem_i_interrupt(int irq, void *dev_id)
-+#else
-+acxmwm_i_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+#endif
-+{
-+ acx_device_t *adev;
-+ unsigned long flags;
-+ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY;
-+ register u16 irqtype;
-+ u16 unmasked;
-+
-+ adev = ndev2adev((struct net_device*)dev_id);
-+
-+ /* LOCKING: can just spin_lock() since IRQs are disabled anyway.
-+ * I am paranoid */
-+ acx_lock(adev, flags);
-+
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ if (unlikely(0xffff == unmasked)) {
-+ /* 0xffff value hints at missing hardware,
-+ * so don't do anything.
-+ * Not very clean, but other drivers do the same... */
-+ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n");
-+ goto none;
-+ }
-+
-+ /* We will check only "interesting" IRQ types */
-+ irqtype = unmasked & ~adev->irq_mask;
-+ if (!irqtype) {
-+ /* We are on a shared IRQ line and it wasn't our IRQ */
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n",
-+ unmasked, adev->irq_mask);
-+ goto none;
-+ }
-+
-+ /* Done here because IRQ_NONEs taking three lines of log
-+ ** drive me crazy */
-+ FN_ENTER;
-+
-+#define IRQ_ITERATE 1
-+#if IRQ_ITERATE
-+if (jiffies != adev->irq_last_jiffies) {
-+ adev->irq_loops_this_jiffy = 0;
-+ adev->irq_last_jiffies = jiffies;
-+}
-+
-+/* safety condition; we'll normally abort loop below
-+ * in case no IRQ type occurred */
-+while (likely(--irqcount)) {
-+#endif
-+ /* ACK all IRQs ASAP */
-+ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff);
-+
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n",
-+ unmasked, adev->irq_mask, irqtype);
-+
-+ /* Handle most important IRQ types first */
-+ if (irqtype & HOST_INT_RX_DATA) {
-+ log(L_IRQ, "got Rx_Data IRQ\n");
-+ acxmem_l_process_rxdesc(adev);
-+ }
-+ if (irqtype & HOST_INT_TX_COMPLETE) {
-+ log(L_IRQ, "got Tx_Complete IRQ\n");
-+ /* don't clean up on each Tx complete, wait a bit
-+ * unless we're going towards full, in which case
-+ * we do it immediately, too (otherwise we might lockup
-+ * with a full Tx buffer if we go into
-+ * acxmem_l_clean_txdesc() at a time when we won't wakeup
-+ * the net queue in there for some reason...) */
-+ if (adev->tx_free <= TX_START_CLEAN) {
-+#if TX_CLEANUP_IN_SOFTIRQ
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP);
-+#else
-+ acxmem_l_clean_txdesc(adev);
-+#endif
-+ }
-+ }
-+
-+ /* Less frequent ones */
-+ if (irqtype & (0
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ | HOST_INT_SCAN_COMPLETE
-+ )) {
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ log(L_IRQ, "got Command_Complete IRQ\n");
-+ /* save the state for the running issue_cmd() */
-+ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE);
-+ }
-+ if (irqtype & HOST_INT_INFO) {
-+ handle_info_irq(adev);
-+ }
-+ if (irqtype & HOST_INT_SCAN_COMPLETE) {
-+ log(L_IRQ, "got Scan_Complete IRQ\n");
-+ /* need to do that in process context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN);
-+ /* remember that fw is not scanning anymore */
-+ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
-+ }
-+ }
-+
-+ /* These we just log, but either they happen rarely
-+ * or we keep them masked out */
-+ if (irqtype & (0
-+ /* | HOST_INT_RX_DATA */
-+ /* | HOST_INT_TX_COMPLETE */
-+ | HOST_INT_TX_XFER
-+ | HOST_INT_RX_COMPLETE
-+ | HOST_INT_DTIM
-+ | HOST_INT_BEACON
-+ | HOST_INT_TIMER
-+ | HOST_INT_KEY_NOT_FOUND
-+ | HOST_INT_IV_ICV_FAILURE
-+ /* | HOST_INT_CMD_COMPLETE */
-+ /* | HOST_INT_INFO */
-+ | HOST_INT_OVERFLOW
-+ | HOST_INT_PROCESS_ERROR
-+ /* | HOST_INT_SCAN_COMPLETE */
-+ | HOST_INT_FCS_THRESHOLD
-+ | HOST_INT_UNKNOWN
-+ )) {
-+ log_unusual_irq(irqtype);
-+ }
-+
-+#if IRQ_ITERATE
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ irqtype = unmasked & ~adev->irq_mask;
-+ /* Bail out if no new IRQ bits or if all are masked out */
-+ if (!irqtype)
-+ break;
-+
-+ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) {
-+ printk(KERN_ERR "acx: too many interrupts per jiffy!\n");
-+ /* Looks like card floods us with IRQs! Try to stop that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ /* This will short-circuit all future attempts to handle IRQ.
-+ * We cant do much more... */
-+ adev->irq_mask = 0;
-+ break;
-+ }
-+}
-+#endif
-+ /* Routine to perform blink with range */
-+ if (unlikely(adev->led_power == 2))
-+ update_link_quality_led(adev);
-+
-+/* handled: */
-+ /* write_flush(adev); - not needed, last op was read anyway */
-+ acx_unlock(adev, flags);
-+ FN_EXIT0;
-+ return IRQ_HANDLED;
-+
-+none:
-+ acx_unlock(adev, flags);
-+ return IRQ_NONE;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_power_led
-+*/
-+void
-+acxmem_l_power_led(acx_device_t *adev, int enable)
-+{
-+ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800;
-+
-+ /* A hack. Not moving message rate limiting to adev->xxx
-+ * (it's only a debug message after all) */
-+ static int rate_limit = 0;
-+
-+ if (rate_limit++ < 3)
-+ log(L_IOCTL, "Please report in case toggling the power "
-+ "LED doesn't work for your card!\n");
-+ if (enable)
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled);
-+ else
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled);
-+}
-+
-+
-+/***********************************************************************
-+** Ioctls
-+*/
-+
-+/***********************************************************************
-+*/
-+int
-+acx111pci_ioctl_info(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+#if ACX_DEBUG > 1
-+ acx_device_t *adev = ndev2adev(ndev);
-+ rxdesc_t *rxdesc;
-+ txdesc_t *txdesc;
-+ rxhostdesc_t *rxhostdesc;
-+ txhostdesc_t *txhostdesc;
-+ struct acx111_ie_memoryconfig memconf;
-+ struct acx111_ie_queueconfig queueconf;
-+ unsigned long flags;
-+ int i;
-+ char memmap[0x34];
-+ char rxconfig[0x8];
-+ char fcserror[0x8];
-+ char ratefallback[0x5];
-+
-+ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) )
-+ return OK;
-+ /* using printk() since we checked debug flag already */
-+
-+ acx_sem_lock(adev);
-+
-+ if (!IS_ACX111(adev)) {
-+ printk("acx111-specific function called "
-+ "with non-acx111 chip, aborting\n");
-+ goto end_ok;
-+ }
-+
-+ /* get Acx111 Memory Configuration */
-+ memset(&memconf, 0, sizeof(memconf));
-+ /* BTW, fails with 12 (Write only) error code.
-+ ** Retained for easy testing of issue_cmd error handling :) */
-+ printk ("Interrogating queue config\n");
-+ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG);
-+ printk ("done with queue config\n");
-+
-+ /* get Acx111 Queue Configuration */
-+ memset(&queueconf, 0, sizeof(queueconf));
-+ printk ("Interrogating mem config options\n");
-+ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
-+ printk ("done with mem config options\n");
-+
-+ /* get Acx111 Memory Map */
-+ memset(memmap, 0, sizeof(memmap));
-+ printk ("Interrogating mem map\n");
-+ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP);
-+ printk ("done with mem map\n");
-+
-+ /* get Acx111 Rx Config */
-+ memset(rxconfig, 0, sizeof(rxconfig));
-+ printk ("Interrogating rxconfig\n");
-+ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG);
-+ printk ("done with queue rxconfig\n");
-+
-+ /* get Acx111 fcs error count */
-+ memset(fcserror, 0, sizeof(fcserror));
-+ printk ("Interrogating fcs err count\n");
-+ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT);
-+ printk ("done with err count\n");
-+
-+ /* get Acx111 rate fallback */
-+ memset(ratefallback, 0, sizeof(ratefallback));
-+ printk ("Interrogating rate fallback\n");
-+ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK);
-+ printk ("done with rate fallback\n");
-+
-+ /* force occurrence of a beacon interrupt */
-+ /* TODO: comment why is this necessary */
-+ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON);
-+
-+ /* dump Acx111 Mem Configuration */
-+ printk("dump mem config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Number of stations: %1X\n"
-+ "Memory block size: %1X\n"
-+ "tx/rx memory block allocation: %1X\n"
-+ "count rx: %X / tx: %X queues\n"
-+ "options %1X\n"
-+ "fragmentation %1X\n"
-+ "Rx Queue 1 Count Descriptors: %X\n"
-+ "Rx Queue 1 Host Memory Start: %X\n"
-+ "Tx Queue 1 Count Descriptors: %X\n"
-+ "Tx Queue 1 Attributes: %X\n",
-+ memconf.len, (int) sizeof(memconf),
-+ memconf.no_of_stations,
-+ memconf.memory_block_size,
-+ memconf.tx_rx_memory_block_allocation,
-+ memconf.count_rx_queues, memconf.count_tx_queues,
-+ memconf.options,
-+ memconf.fragmentation,
-+ memconf.rx_queue1_count_descs,
-+ acx2cpu(memconf.rx_queue1_host_rx_start),
-+ memconf.tx_queue1_count_descs,
-+ memconf.tx_queue1_attributes);
-+
-+ /* dump Acx111 Queue Configuration */
-+ printk("dump queue head:\n"
-+ "data read: %d, struct size: %d\n"
-+ "tx_memory_block_address (from card): %X\n"
-+ "rx_memory_block_address (from card): %X\n"
-+ "rx1_queue address (from card): %X\n"
-+ "tx1_queue address (from card): %X\n"
-+ "tx1_queue attributes (from card): %X\n",
-+ queueconf.len, (int) sizeof(queueconf),
-+ queueconf.tx_memory_block_address,
-+ queueconf.rx_memory_block_address,
-+ queueconf.rx1_queue_address,
-+ queueconf.tx1_queue_address,
-+ queueconf.tx1_attributes);
-+
-+ /* dump Acx111 Mem Map */
-+ printk("dump mem map:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Code start: %X\n"
-+ "Code end: %X\n"
-+ "WEP default key start: %X\n"
-+ "WEP default key end: %X\n"
-+ "STA table start: %X\n"
-+ "STA table end: %X\n"
-+ "Packet template start: %X\n"
-+ "Packet template end: %X\n"
-+ "Queue memory start: %X\n"
-+ "Queue memory end: %X\n"
-+ "Packet memory pool start: %X\n"
-+ "Packet memory pool end: %X\n"
-+ "iobase: %p\n"
-+ "iobase2: %p\n",
-+ *((u16 *)&memmap[0x02]), (int) sizeof(memmap),
-+ *((u32 *)&memmap[0x04]),
-+ *((u32 *)&memmap[0x08]),
-+ *((u32 *)&memmap[0x0C]),
-+ *((u32 *)&memmap[0x10]),
-+ *((u32 *)&memmap[0x14]),
-+ *((u32 *)&memmap[0x18]),
-+ *((u32 *)&memmap[0x1C]),
-+ *((u32 *)&memmap[0x20]),
-+ *((u32 *)&memmap[0x24]),
-+ *((u32 *)&memmap[0x28]),
-+ *((u32 *)&memmap[0x2C]),
-+ *((u32 *)&memmap[0x30]),
-+ adev->iobase,
-+ adev->iobase2);
-+
-+ /* dump Acx111 Rx Config */
-+ printk("dump rx config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "rx config: %X\n"
-+ "rx filter config: %X\n",
-+ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig),
-+ *((u16 *)&rxconfig[0x04]),
-+ *((u16 *)&rxconfig[0x06]));
-+
-+ /* dump Acx111 fcs error */
-+ printk("dump fcserror:\n"
-+ "data read: %d, struct size: %d\n"
-+ "fcserrors: %X\n",
-+ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror),
-+ *((u32 *)&fcserror[0x04]));
-+
-+ /* dump Acx111 rate fallback */
-+ printk("dump rate fallback:\n"
-+ "data read: %d, struct size: %d\n"
-+ "ratefallback: %X\n",
-+ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback),
-+ *((u8 *)&ratefallback[0x04]));
-+
-+ /* protect against IRQ */
-+ acx_lock(adev, flags);
-+
-+ /* dump acx111 internal rx descriptor ring buffer */
-+ rxdesc = adev->rxdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump internal rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n"
-+ "RxStatus (dynamic) 0x%X\n"
-+ "Mod/Pre (dynamic) 0x%X\n",
-+ i,
-+ rxdesc,
-+ acx2cpu(rxdesc->pNextDesc),
-+ acx2cpu(rxdesc->ACXMemPtr),
-+ rxdesc->Ctl_8,
-+ rxdesc->rate,
-+ rxdesc->error,
-+ rxdesc->SNR);
-+ rxdesc++;
-+ }
-+
-+ /* dump host rx descriptor ring buffer */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump host rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ rxhostdesc,
-+ acx2cpu(rxhostdesc->data_phy),
-+ rxhostdesc->data_offset,
-+ le16_to_cpu(rxhostdesc->Ctl_16),
-+ le16_to_cpu(rxhostdesc->length),
-+ acx2cpu(rxhostdesc->desc_phy_next),
-+ rxhostdesc->Status);
-+ rxhostdesc++;
-+ }
-+
-+ /* dump acx111 internal tx descriptor ring buffer */
-+ txdesc = adev->txdesc_start;
-+
-+ /* loop over complete transmit pool */
-+ if (txdesc) for (i = 0; i < TX_CNT; i++) {
-+ printk("\ndump internal txdesc %d:\n"
-+ "size 0x%X\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "host mem pointer (dynamic) 0x%X\n"
-+ "length (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "CTL2 (dynamic) 0x%X\n"
-+ "Status (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n",
-+ i,
-+ (int) sizeof(struct txdesc),
-+ txdesc,
-+ acx2cpu(txdesc->pNextDesc),
-+ acx2cpu(txdesc->AcxMemPtr),
-+ acx2cpu(txdesc->HostMemPtr),
-+ le16_to_cpu(txdesc->total_length),
-+ txdesc->Ctl_8,
-+ txdesc->Ctl2_8, txdesc->error,
-+ txdesc->u.r1.rate);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+
-+ /* dump host tx descriptor ring buffer */
-+
-+ txhostdesc = adev->txhostdesc_start;
-+
-+ /* loop over complete host send pool */
-+ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) {
-+ printk("\ndump host txdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ txhostdesc,
-+ acx2cpu(txhostdesc->data_phy),
-+ txhostdesc->data_offset,
-+ le16_to_cpu(txhostdesc->Ctl_16),
-+ le16_to_cpu(txhostdesc->length),
-+ acx2cpu(txhostdesc->desc_phy_next),
-+ le32_to_cpu(txhostdesc->Status));
-+ txhostdesc++;
-+ }
-+
-+ /* write_reg16(adev, 0xb4, 0x4); */
-+
-+ acx_unlock(adev, flags);
-+end_ok:
-+
-+ acx_sem_unlock(adev);
-+#endif /* ACX_DEBUG */
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100mem_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ u16 gpio_old;
-+
-+ if (!IS_ACX100(adev)) {
-+ /* WARNING!!!
-+ * Removing this check *might* damage
-+ * hardware, since we're tweaking GPIOs here after all!!!
-+ * You've been warned...
-+ * WARNING!!! */
-+ printk("acx: sorry, setting bias level for non-acx100 "
-+ "is not supported yet\n");
-+ return OK;
-+ }
-+
-+ if (*extra > 7) {
-+ printk("acx: invalid bias parameter, range is 0-7\n");
-+ return -EINVAL;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ /* Need to lock accesses to [IO_ACX_GPIO_OUT]:
-+ * IRQ handler uses it to update LED */
-+ acx_lock(adev, flags);
-+ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT);
-+ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8));
-+ acx_unlock(adev, flags);
-+
-+ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old);
-+ printk("%s: PHY power amplifier bias: old:%d, new:%d\n",
-+ ndev->name,
-+ (gpio_old & 0x0700) >> 8, (unsigned char)*extra);
-+
-+ acx_sem_unlock(adev);
-+
-+ return OK;
-+}
-+
-+/***************************************************************
-+** acxmem_l_alloc_tx
-+** Actually returns a txdesc_t* ptr
-+**
-+** FIXME: in case of fragments, should allocate multiple descrs
-+** after figuring out how many we need and whether we still have
-+** sufficiently many.
-+*/
-+tx_t*
-+acxmem_l_alloc_tx(acx_device_t *adev)
-+{
-+ struct txdesc *txdesc;
-+ unsigned head;
-+ u8 ctl8;
-+ static int txattempts = 0;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(!adev->tx_free)) {
-+ printk("acx: BUG: no free txdesc left\n");
-+ /*
-+ * Probably the ACX ignored a transmit attempt and now there's a packet
-+ * sitting in the queue we think should be transmitting but the ACX doesn't
-+ * know about.
-+ * On the first pass, send the ACX a TxProc interrupt to try moving
-+ * things along, and if that doesn't work (ie, we get called again) completely
-+ * flush the transmit queue.
-+ */
-+ if (txattempts < 10) {
-+ txattempts++;
-+ printk ("acx: trying to wake up ACX\n");
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
-+ write_flush(adev); }
-+ else {
-+ txattempts = 0;
-+ printk ("acx: flushing transmit queue.\n");
-+ acxmem_l_clean_txdesc_emergency (adev);
-+ }
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ /*
-+ * Make a quick check to see if there is transmit buffer space on
-+ * the ACX. This can't guarantee there is enough space for the packet
-+ * since we don't yet know how big it is, but it will prevent at least some
-+ * annoyances.
-+ */
-+ if (!adev->acx_txbuf_blocks_free) {
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ head = adev->tx_head;
-+ /*
-+ * txdesc points to ACX memory
-+ */
-+ txdesc = get_txdesc(adev, head);
-+ ctl8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+
-+ /*
-+ * If we don't own the buffer (HOSTOWN) it is certainly not free; however,
-+ * we may have previously thought we had enough memory to send
-+ * a packet, allocated the buffer then gave up when we found not enough
-+ * transmit buffer space on the ACX. In that case, HOSTOWN and
-+ * ACXDONE will both be set.
-+ */
-+ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_HOSTOWN))) {
-+ /* whoops, descr at current index is not free, so probably
-+ * ring buffer already full */
-+ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find "
-+ "free txdesc\n", head, ctl8);
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ /* Needed in case txdesc won't be eventually submitted for tx */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_ACXDONE_HOSTOWN);
-+
-+ adev->tx_free--;
-+ log(L_BUFT, "tx: got desc %u, %u remain\n",
-+ head, adev->tx_free);
-+ /* Keep a few free descs between head and tail of tx ring.
-+ ** It is not absolutely needed, just feels safer */
-+ if (adev->tx_free < TX_STOP_QUEUE) {
-+ log(L_BUF, "stop queue (%u tx desc left)\n",
-+ adev->tx_free);
-+ acx_stop_queue(adev->ndev, NULL);
-+ }
-+
-+ /* returning current descriptor, so advance to next free one */
-+ adev->tx_head = (head + 1) % TX_CNT;
-+end:
-+ FN_EXIT0;
-+
-+ return (tx_t*)txdesc;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_l_dealloc_tx
-+** Clears out a previously allocatedvoid acxmem_l_dealloc_tx(tx_t *tx_opaque);
-+ transmit descriptor. The ACX
-+** can get confused if we skip transmit descriptors in the queue,
-+** so when we don't need a descriptor return it to its original
-+** state and move the queue head pointer back.
-+**
-+*/
-+void
-+acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque)
-+{
-+ /*
-+ * txdesc is the address of the descriptor on the ACX.
-+ */
-+ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
-+ txdesc_t tmptxdesc;
-+ int index;
-+
-+ memset (&tmptxdesc, 0, sizeof(tmptxdesc));
-+ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
-+ tmptxdesc.u.r1.rate = 0x0a;
-+
-+ /*
-+ * Clear out all of the transmit descriptor except for the next pointer
-+ */
-+ copy_to_slavemem (adev, (u32) &(txdesc->HostMemPtr),
-+ (u8 *) &(tmptxdesc.HostMemPtr),
-+ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc));
-+
-+ /*
-+ * This is only called immediately after we've allocated, so we should
-+ * be able to set the head back to this descriptor.
-+ */
-+ index = ((u8*) txdesc - (u8*)adev->txdesc_start) / adev->txdesc_size;
-+ printk ("acx_dealloc: moving head from %d to %d\n", adev->tx_head, index);
-+ adev->tx_head = index;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void*
-+acxmem_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
-+{
-+ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_tx_data
-+**
-+** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
-+** Can be called from acx_i_start_xmit (data frames from net core).
-+**
-+** FIXME: in case of fragments, should loop over the number of
-+** pre-allocated tx descrs, properly setting up transfer data and
-+** CTL_xxx flags according to fragment number.
-+*/
-+void
-+acxmem_update_queue_indicator (acx_device_t *adev, int txqueue)
-+{
-+#ifdef USING_MORE_THAN_ONE_TRANSMIT_QUEUE
-+ u32 indicator;
-+ unsigned long flags;
-+ int count;
-+
-+ /*
-+ * Can't handle an interrupt while we're fiddling with the ACX's lock,
-+ * according to TI. The ACX is supposed to hold fw_lock for at most
-+ * 500ns.
-+ */
-+ local_irq_save (flags);
-+
-+ /*
-+ * Wait for ACX to release the lock (at most 500ns).
-+ */
-+ count = 0;
-+ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
-+ && (count++ < 50)) {
-+ ndelay (10);
-+ }
-+ if (count < 50) {
-+
-+ /*
-+ * Take out the host lock - anything non-zero will work, so don't worry about
-+ * be/le
-+ */
-+ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 1);
-+
-+ /*
-+ * Avoid a race condition
-+ */
-+ count = 0;
-+ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
-+ && (count++ < 50)) {
-+ ndelay (10);
-+ }
-+
-+ if (count < 50) {
-+ /*
-+ * Mark the queue active
-+ */
-+ indicator = read_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator));
-+ indicator |= cpu_to_le32 (1 << txqueue);
-+ write_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator), indicator);
-+ }
-+
-+ /*
-+ * Release the host lock
-+ */
-+ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 0);
-+
-+ }
-+
-+ /*
-+ * Restore interrupts
-+ */
-+ local_irq_restore (flags);
-+#endif
-+}
-+
-+void
-+acxmem_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len)
-+{
-+ /*
-+ * txdesc is the address on the ACX
-+ */
-+ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
-+ txhostdesc_t *hostdesc1, *hostdesc2;
-+ client_t *clt;
-+ u16 rate_cur;
-+ u8 Ctl_8, Ctl2_8;
-+ u32 addr;
-+
-+ FN_ENTER;
-+ /* fw doesn't tx such packets anyhow */
-+ if (unlikely(len < WLAN_HDR_A3_LEN))
-+ goto end;
-+
-+ hostdesc1 = get_txhostdesc(adev, txdesc);
-+ /* modify flag status in separate variable to be able to write it back
-+ * in one big swoop later (also in order to have less device memory
-+ * accesses) */
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */
-+
-+ hostdesc2 = hostdesc1 + 1;
-+
-+ /* DON'T simply set Ctl field to 0 here globally,
-+ * it needs to maintain a consistent flag status (those are state flags!!),
-+ * otherwise it may lead to severe disruption. Only set or reset particular
-+ * flags at the exact moment this is needed... */
-+
-+ /* let chip do RTS/CTS handshaking before sending
-+ * in case packet size exceeds threshold */
-+ if (len > adev->rts_threshold)
-+ SET_BIT(Ctl2_8, DESC_CTL2_RTS);
-+ else
-+ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS);
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1);
-+ break;
-+ case ACX_MODE_2_STA:
-+ clt = adev->ap_client;
-+ break;
-+#if 0
-+/* testing was done on acx111: */
-+ case ACX_MODE_MONITOR:
-+ SET_BIT(Ctl2_8, 0
-+/* sends CTS to self before packet */
-+ + DESC_CTL2_SEQ /* don't increase sequence field */
-+/* not working (looks like good fcs is still added) */
-+ + DESC_CTL2_FCS /* don't add the FCS */
-+/* not tested */
-+ + DESC_CTL2_MORE_FRAG
-+/* not tested */
-+ + DESC_CTL2_RETRY /* don't increase retry field */
-+/* not tested */
-+ + DESC_CTL2_POWER /* don't increase power mgmt. field */
-+/* no effect */
-+ + DESC_CTL2_WEP /* encrypt this frame */
-+/* not tested */
-+ + DESC_CTL2_DUR /* don't increase duration field */
-+ );
-+ /* fallthrough */
-+#endif
-+ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
-+ clt = NULL;
-+ break;
-+ }
-+
-+ rate_cur = clt ? clt->rate_cur : adev->rate_bcast;
-+ if (unlikely(!rate_cur)) {
-+ printk("acx: driver bug! bad ratemask\n");
-+ goto end;
-+ }
-+
-+ /* used in tx cleanup routine for auto rate and accounting: */
-+ put_txcr(adev, txdesc, clt, rate_cur);
-+
-+ write_slavemem16 (adev, (u32) &(txdesc->total_length), cpu_to_le16(len));
-+ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN);
-+ if (IS_ACX111(adev)) {
-+ /* note that if !txdesc->do_auto, txrate->cur
-+ ** has only one nonzero bit */
-+ txdesc->u.r2.rate111 = cpu_to_le16(
-+ rate_cur
-+ /* WARNING: I was never able to make it work with prism54 AP.
-+ ** It was falling down to 1Mbit where shortpre is not applicable,
-+ ** and not working at all at "5,11 basic rates only" setting.
-+ ** I even didn't see tx packets in radio packet capture.
-+ ** Disabled for now --vda */
-+ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */
-+ );
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ /* should add this to rate111 above as necessary */
-+ | (clt->pbcc511 ? RATE111_PBCC511 : 0)
-+#endif
-+ hostdesc1->length = cpu_to_le16(len);
-+ } else { /* ACX100 */
-+ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100;
-+ write_slavemem8 (adev, (u32) &(txdesc->u.r1.rate), rate_100);
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ if (clt->pbcc511) {
-+ if (n == RATE100_5 || n == RATE100_11)
-+ n |= RATE100_PBCC511;
-+ }
-+
-+ if (clt->shortpre && (clt->cur != RATE111_1))
-+ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */
-+#endif
-+ /* set autodma and reclaim and 1st mpdu */
-+ SET_BIT(Ctl_8, DESC_CTL_FIRSTFRAG);
-+
-+#if ACX_FRAGMENTATION
-+ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */
-+#endif
-+ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN);
-+
-+ /*
-+ * Since we're not using autodma copy the packet data to the acx now.
-+ * Even host descriptors point to the packet header, and the odd indexed
-+ * descriptor following points to the packet data.
-+ *
-+ * The first step is to find free memory in the ACX transmit buffers.
-+ * They don't necessarily map one to one with the transmit queue entries,
-+ * so search through them starting just after the last one used.
-+ */
-+ addr = allocate_acx_txbuf_space (adev, len);
-+ if (addr) {
-+ chaincopy_to_slavemem (adev, addr, hostdesc1->data, len);
-+ }
-+ else {
-+ /*
-+ * Bummer. We thought we might have enough room in the transmit
-+ * buffers to send this packet, but it turns out we don't. alloc_tx
-+ * has already marked this transmit descriptor as HOSTOWN and ACXDONE,
-+ * which means the ACX will hang when it gets to this descriptor unless
-+ * we do something about it. Having a bubble in the transmit queue just
-+ * doesn't seem to work, so we have to reset this transmit queue entry's
-+ * state to its original value and back up our head pointer to point
-+ * back to this entry.
-+ */
-+ hostdesc1->length = 0;
-+ hostdesc2->length = 0;
-+ write_slavemem16 (adev, (u32) &(txdesc->total_length), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG);
-+ adev->tx_head = ((u8*) txdesc - (u8*) adev->txdesc_start) / adev->txdesc_size;
-+ goto end;
-+ }
-+ /*
-+ * Tell the ACX where the packet is.
-+ */
-+ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), addr);
-+
-+ }
-+ /* don't need to clean ack/rts statistics here, already
-+ * done on descr cleanup */
-+
-+ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors
-+ * are now owned by the acx100; do this as LAST operation */
-+ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN);
-+ /* flush writes before we release hostdesc to the adapter here */
-+ //wmb();
-+
-+ /* write back modified flags */
-+ /*
-+ * At this point Ctl_8 should just be FIRSTFRAG
-+ */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl2_8),Ctl2_8);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), Ctl_8);
-+ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */
-+
-+ /*
-+ * Update the queue indicator to say there's data on the first queue.
-+ */
-+ acxmem_update_queue_indicator (adev, 0);
-+
-+ /* flush writes before we tell the adapter that it's its turn now */
-+ mmiowb();
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
-+ write_flush(adev);
-+
-+ /* log the packet content AFTER sending it,
-+ * in order to not delay sending any further than absolutely needed
-+ * Do separate logs for acx100/111 to have human-readable rates */
-+ if (unlikely(acx_debug & (L_XFER|L_DATA))) {
-+ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc;
-+ if (IS_ACX111(adev))
-+ printk("tx: pkt (%s): len %d "
-+ "rate %04X%s status %u\n",
-+ acx_get_packet_type_string(le16_to_cpu(fc)), len,
-+ le16_to_cpu(txdesc->u.r2.rate111),
-+ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "",
-+ adev->status);
-+ else
-+ printk("tx: pkt (%s): len %d rate %03u%s status %u\n",
-+ acx_get_packet_type_string(fc), len,
-+ read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate)),
-+ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "",
-+ adev->status);
-+
-+ if (acx_debug & L_DATA) {
-+ printk("tx: 802.11 [%d]: ", len);
-+ acx_dump_bytes(hostdesc1->data, len);
-+ }
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_l_clean_txdesc
-+**
-+** This function resets the txdescs' status when the ACX100
-+** signals the TX done IRQ (txdescs have been processed), starting with
-+** the pool index of the descriptor which we would use next,
-+** in order to make sure that we can be as fast as possible
-+** in filling new txdescs.
-+** Everytime we get called we know where the next packet to be cleaned is.
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_txbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_txbuffer(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+ u8 Ctl_8;
-+
-+ /* no FN_ENTER here, we don't want that */
-+ /* no locks here, since it's entirely non-critical code */
-+ txdesc = adev->txdesc_start;
-+ if (unlikely(!txdesc)) return;
-+ printk("tx: desc->Ctl8's:");
-+ for (i = 0; i < TX_CNT; i++) {
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ printk(" %02X", Ctl_8);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ printk("\n");
-+}
-+#endif
-+
-+
-+static void
-+handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger)
-+{
-+ const char *err = "unknown error";
-+
-+ /* hmm, should we handle this as a mask
-+ * of *several* bits?
-+ * For now I think only caring about
-+ * individual bits is ok... */
-+ switch (error) {
-+ case 0x01:
-+ err = "no Tx due to error in other fragment";
-+ adev->wstats.discard.fragment++;
-+ break;
-+ case 0x02:
-+ err = "Tx aborted";
-+ adev->stats.tx_aborted_errors++;
-+ break;
-+ case 0x04:
-+ err = "Tx desc wrong parameters";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x08:
-+ err = "WEP key not found";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x10:
-+ err = "MSDU lifetime timeout? - try changing "
-+ "'iwconfig retry lifetime XXX'";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x20:
-+ err = "excessive Tx retries due to either distance "
-+ "too high or unable to Tx or Tx frame error - "
-+ "try changing 'iwconfig txpower XXX' or "
-+ "'sens'itivity or 'retry'";
-+ adev->wstats.discard.retries++;
-+ /* Tx error 0x20 also seems to occur on
-+ * overheating, so I'm not sure whether we
-+ * actually want to do aggressive radio recalibration,
-+ * since people maybe won't notice then that their hardware
-+ * is slowly getting cooked...
-+ * Or is it still a safe long distance from utter
-+ * radio non-functionality despite many radio recalibs
-+ * to final destructive overheating of the hardware?
-+ * In this case we really should do recalib here...
-+ * I guess the only way to find out is to do a
-+ * potentially fatal self-experiment :-\
-+ * Or maybe only recalib in case we're using Tx
-+ * rate auto (on errors switching to lower speed
-+ * --> less heat?) or 802.11 power save mode?
-+ *
-+ * ok, just do it. */
-+ if (++adev->retry_errors_msg_ratelimit % 4 == 0) {
-+ if (adev->retry_errors_msg_ratelimit <= 20) {
-+ printk("%s: several excessive Tx "
-+ "retry errors occurred, attempting "
-+ "to recalibrate radio. Radio "
-+ "drift might be caused by increasing "
-+ "card temperature, please check the card "
-+ "before it's too late!\n",
-+ adev->ndev->name);
-+ if (adev->retry_errors_msg_ratelimit == 20)
-+ printk("disabling above message\n");
-+ }
-+
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+ }
-+ break;
-+ case 0x40:
-+ err = "Tx buffer overflow";
-+ adev->stats.tx_fifo_errors++;
-+ break;
-+ case 0x80:
-+ err = "DMA error";
-+ adev->wstats.discard.misc++;
-+ break;
-+ }
-+ adev->stats.tx_errors++;
-+ if (adev->stats.tx_errors <= 20)
-+ printk("%s: tx error 0x%02X, buf %02u! (%s)\n",
-+ adev->ndev->name, error, finger, err);
-+ else
-+ printk("%s: tx error 0x%02X, buf %02u!\n",
-+ adev->ndev->name, error, finger);
-+}
-+
-+
-+unsigned int
-+acxmem_l_clean_txdesc(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ unsigned finger;
-+ int num_cleaned;
-+ u16 r111;
-+ u8 error, ack_failures, rts_failures, rts_ok, r100, Ctl_8;
-+ u32 acxmem;
-+ txdesc_t tmptxdesc;
-+
-+ FN_ENTER;
-+
-+ /*
-+ * Set up a template descriptor for re-initialization. The only
-+ * things that get set are Ctl_8 and the rate, and the rate defaults
-+ * to 1Mbps.
-+ */
-+ memset (&tmptxdesc, 0, sizeof (tmptxdesc));
-+ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
-+ tmptxdesc.u.r1.rate = 0x0a;
-+
-+ if (unlikely(acx_debug & L_DEBUG))
-+ log_txbuffer(adev);
-+
-+ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail);
-+
-+ /* We know first descr which is not free yet. We advance it as far
-+ ** as we see correct bits set in following descs (if next desc
-+ ** is NOT free, we shouldn't advance at all). We know that in
-+ ** front of tx_tail may be "holes" with isolated free descs.
-+ ** We will catch up when all intermediate descs will be freed also */
-+
-+ finger = adev->tx_tail;
-+ num_cleaned = 0;
-+ while (likely(finger != adev->tx_head)) {
-+ txdesc = get_txdesc(adev, finger);
-+
-+ /* If we allocated txdesc on tx path but then decided
-+ ** to NOT use it, then it will be left as a free "bubble"
-+ ** in the "allocated for tx" part of the ring.
-+ ** We may meet it on the next ring pass here. */
-+
-+ /* stop if not marked as "tx finished" and "host owned" */
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ if ((Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN)
-+ != DESC_CTL_ACXDONE_HOSTOWN) {
-+ if (unlikely(!num_cleaned)) { /* maybe remove completely */
-+ log(L_BUFT, "clean_txdesc: tail isn't free. "
-+ "tail:%d head:%d\n",
-+ adev->tx_tail, adev->tx_head);
-+ }
-+ break;
-+ }
-+
-+ /* remember desc values... */
-+ error = read_slavemem8 (adev, (u32) &(txdesc->error));
-+ ack_failures = read_slavemem8 (adev, (u32) &(txdesc->ack_failures));
-+ rts_failures = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures));
-+ rts_ok = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok));
-+ r100 = read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate));
-+ r111 = le16_to_cpu(read_slavemem16 (adev, (u32) &(txdesc->u.r2.rate111)));
-+
-+ /* need to check for certain error conditions before we
-+ * clean the descriptor: we still need valid descr data here */
-+ if (unlikely(0x30 & error)) {
-+ /* only send IWEVTXDROP in case of retry or lifetime exceeded;
-+ * all other errors mean we screwed up locally */
-+ union iwreq_data wrqu;
-+ wlan_hdr_t *hdr;
-+ txhostdesc_t *hostdesc;
-+
-+ hostdesc = get_txhostdesc(adev, txdesc);
-+ hdr = (wlan_hdr_t *)hostdesc->data;
-+ MAC_COPY(wrqu.addr.sa_data, hdr->a1);
-+ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL);
-+ }
-+
-+ /*
-+ * Free up the transmit data buffers
-+ */
-+ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (acxmem) {
-+ reclaim_acx_txbuf_space (adev, acxmem);
-+ }
-+
-+ /* ...and free the desc by clearing all the fields
-+ except the next pointer */
-+ copy_to_slavemem (adev,
-+ (u32) &(txdesc->HostMemPtr),
-+ (u8 *) &(tmptxdesc.HostMemPtr),
-+ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc)
-+ );
-+
-+ adev->tx_free++;
-+ num_cleaned++;
-+
-+ if ((adev->tx_free >= TX_START_QUEUE)
-+ && (adev->status == ACX_STATUS_4_ASSOCIATED)
-+ && (acx_queue_stopped(adev->ndev))
-+ ) {
-+ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n",
-+ adev->tx_free);
-+ acx_wake_queue(adev->ndev, NULL);
-+ }
-+
-+ /* do error checking, rate handling and logging
-+ * AFTER having done the work, it's faster */
-+
-+ /* do rate handling */
-+ if (adev->rate_auto) {
-+ struct client *clt = get_txc(adev, txdesc);
-+ if (clt) {
-+ u16 cur = get_txr(adev, txdesc);
-+ if (clt->rate_cur == cur) {
-+ acx_l_handle_txrate_auto(adev, clt,
-+ cur, /* intended rate */
-+ r100, r111, /* actually used rate */
-+ (error & 0x30), /* was there an error? */
-+ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free);
-+ }
-+ }
-+ }
-+
-+ if (unlikely(error))
-+ handle_tx_error(adev, error, finger);
-+
-+ if (IS_ACX111(adev))
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n",
-+ finger, ack_failures, rts_failures, rts_ok, r111);
-+ else
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n",
-+ finger, ack_failures, rts_failures, rts_ok, r100);
-+
-+ /* update pointer for descr to be cleaned next */
-+ finger = (finger + 1) % TX_CNT;
-+ }
-+
-+ /* remember last position */
-+ adev->tx_tail = finger;
-+/* end: */
-+ FN_EXIT1(num_cleaned);
-+ return num_cleaned;
-+}
-+
-+/* clean *all* Tx descriptors, and regardless of their previous state.
-+ * Used for brute-force reset handling. */
-+void
-+acxmem_l_clean_txdesc_emergency(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+ u32 acxmem;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc = get_txdesc(adev, i);
-+
-+ /* free it */
-+ write_slavemem8 (adev, (u32) &(txdesc->ack_failures), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->error), 0);
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN);
-+
-+ /*
-+ * Clean up the memory allocated on the ACX for this transmit descriptor.
-+ */
-+ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (acxmem) {
-+ reclaim_acx_txbuf_space (adev, acxmem);
-+ }
-+
-+ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), 0);
-+ }
-+
-+ adev->tx_free = TX_CNT;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_s_create_tx_host_desc_queue
-+*/
-+
-+static void*
-+allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg)
-+{
-+ void *ptr;
-+ ptr = kmalloc (size, GFP_KERNEL);
-+ /*
-+ * The ACX can't use the physical address, so we'll have to fake it
-+ * later and it might be handy to have the virtual address.
-+ */
-+ *phy = (dma_addr_t) NULL;
-+
-+ if (ptr) {
-+ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n",
-+ msg, (int)size, ptr, (unsigned long long)*phy);
-+ memset(ptr, 0, size);
-+ return ptr;
-+ }
-+ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n",
-+ msg, (int)size);
-+ return NULL;
-+}
-+
-+
-+/*
-+ * In the generic slave memory access mode, most of the stuff in
-+ * the txhostdesc_t is unused. It's only here because the rest of
-+ * the ACX driver expects it to be since the PCI version uses indirect
-+ * host memory organization with DMA. Since we're not using DMA the
-+ * only use we have for the host descriptors is to store the packets
-+ * on the way out.
-+ */
-+static int
-+acxmem_s_create_tx_host_desc_queue(acx_device_t *adev)
-+{
-+ txhostdesc_t *hostdesc;
-+ u8 *txbuf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate TX buffer */
-+ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS;
-+
-+ adev->txbuf_start = allocate(adev, adev->txbuf_area_size,
-+ &adev->txbuf_startphy, "txbuf_start");
-+ if (!adev->txbuf_start)
-+ goto fail;
-+
-+ /* allocate the TX host descriptor queue pool */
-+ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc);
-+
-+ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size,
-+ &adev->txhostdesc_startphy, "txhostdesc_start");
-+ if (!adev->txhostdesc_start)
-+ goto fail;
-+
-+ /* check for proper alignment of TX host descriptor pool */
-+ if ((long) adev->txhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ hostdesc = adev->txhostdesc_start;
-+ txbuf = adev->txbuf_start;
-+
-+#if 0
-+/* Each tx buffer is accessed by hardware via
-+** txdesc -> txhostdesc(s) -> txbuffer(s).
-+** We use only one txhostdesc per txdesc, but it looks like
-+** acx111 is buggy: it accesses second txhostdesc
-+** (via hostdesc.desc_phy_next field) even if
-+** txdesc->length == hostdesc->length and thus
-+** entire packet was placed into first txhostdesc.
-+** Due to this bug acx111 hangs unless second txhostdesc
-+** has le16_to_cpu(hostdesc.length) = 3 (or larger)
-+** Storing NULL into hostdesc.desc_phy_next
-+** doesn't seem to help.
-+**
-+** Update: although it worked on Xterasys XN-2522g
-+** with len=3 trick, WG311v2 is even more bogus, doesn't work.
-+** Keeping this code (#ifdef'ed out) for documentational purposes.
-+*/
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ hostdesc_phy += sizeof(*hostdesc);
-+ if (!(i & 1)) {
-+ hostdesc->data_phy = cpu2acx(txbuf_phy);
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
-+ /* hostdesc->length = ... */
-+ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
-+ hostdesc->pNext = ptr2acx(NULL);
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ hostdesc->data = txbuf;
-+
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ } else {
-+ /* hostdesc->data_phy = ... */
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ /* hostdesc->Ctl_16 = ... */
-+ hostdesc->length = cpu_to_le16(3); /* bug workaround */
-+ /* hostdesc->desc_phy_next = ... */
-+ /* hostdesc->pNext = ... */
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ /* hostdesc->data = ... */
-+ }
-+ hostdesc++;
-+ }
-+#endif
-+/* We initialize two hostdescs so that they point to adjacent
-+** memory areas. Thus txbuf is really just a contiguous memory area */
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ /* ->data is a non-hardware field: */
-+ hostdesc->data = txbuf;
-+
-+ if (!(i & 1)) {
-+ txbuf += WLAN_HDR_A3_LEN;
-+ } else {
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
-+ }
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_tx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_create_rx_host_desc_queue
-+*/
-+/* the whole size of a data buffer (header plus data body)
-+ * plus 32 bytes safety offset at the end */
-+#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32)
-+
-+static int
-+acxmem_s_create_rx_host_desc_queue(acx_device_t *adev)
-+{
-+ rxhostdesc_t *hostdesc;
-+ rxbuffer_t *rxbuf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate the RX host descriptor queue pool */
-+ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc);
-+
-+ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size,
-+ &adev->rxhostdesc_startphy, "rxhostdesc_start");
-+ if (!adev->rxhostdesc_start)
-+ goto fail;
-+
-+ /* check for proper alignment of RX host descriptor pool */
-+ if ((long) adev->rxhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ /* allocate Rx buffer pool which will be used by the acx
-+ * to store the whole content of the received frames in it */
-+ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE;
-+
-+ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size,
-+ &adev->rxbuf_startphy, "rxbuf_start");
-+ if (!adev->rxbuf_start)
-+ goto fail;
-+
-+ rxbuf = adev->rxbuf_start;
-+ hostdesc = adev->rxhostdesc_start;
-+
-+ /* don't make any popular C programming pointer arithmetic mistakes
-+ * here, otherwise I'll kill you...
-+ * (and don't dare asking me why I'm warning you about that...) */
-+ for (i = 0; i < RX_CNT; i++) {
-+ hostdesc->data = rxbuf;
-+ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE);
-+ rxbuf++;
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_rx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_create_hostdesc_queues
-+*/
-+int
-+acxmem_s_create_hostdesc_queues(acx_device_t *adev)
-+{
-+ int result;
-+ result = acxmem_s_create_tx_host_desc_queue(adev);
-+ if (OK != result) return result;
-+ result = acxmem_s_create_rx_host_desc_queue(adev);
-+ return result;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_tx_desc_queue
-+*/
-+static void
-+acxmem_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start)
-+{
-+ txdesc_t *txdesc;
-+ u32 clr;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ if (IS_ACX100(adev))
-+ adev->txdesc_size = sizeof(*txdesc);
-+ else
-+ /* the acx111 txdesc is 4 bytes larger */
-+ adev->txdesc_size = sizeof(*txdesc) + 4;
-+
-+ /*
-+ * This refers to an ACX address, not one of ours
-+ */
-+ adev->txdesc_start = (txdesc_t *) tx_queue_start;
-+
-+ log(L_DEBUG, "adev->txdesc_start=%p\n",
-+ adev->txdesc_start);
-+
-+ adev->tx_free = TX_CNT;
-+ /* done by memset: adev->tx_head = 0; */
-+ /* done by memset: adev->tx_tail = 0; */
-+ txdesc = adev->txdesc_start;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111 has a preinitialized Tx buffer! */
-+ /* loop over whole send pool */
-+ /* FIXME: do we have to do the hostmemptr stuff here?? */
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
-+ /* reserve two (hdr desc and payload desc) */
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ } else {
-+ /* ACX100 Tx buffer needs to be initialized by us */
-+ /* clear whole send pool. sizeof is safe here (we are acx100) */
-+
-+ /*
-+ * adev->txdesc_start refers to device memory, so we can't write
-+ * directly to it.
-+ */
-+ clr = (u32) adev->txdesc_start;
-+ while (clr < (u32) adev->txdesc_start + (TX_CNT * sizeof(*txdesc))) {
-+ write_slavemem32 (adev, clr, 0);
-+ clr += 4;
-+ }
-+
-+ /* loop over whole send pool */
-+ for (i = 0; i < TX_CNT; i++) {
-+ log(L_DEBUG, "configure card tx descriptor: 0x%p, "
-+ "size: 0x%X\n", txdesc, adev->txdesc_size);
-+
-+ /* initialise ctl */
-+ /*
-+ * No auto DMA here
-+ */
-+ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8),
-+ (u8) (DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG));
-+ /* done by memset(0): txdesc->Ctl2_8 = 0; */
-+
-+ /* point to next txdesc */
-+ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
-+ (u32) cpu_to_le32 ((u8 *) txdesc + adev->txdesc_size));
-+
-+ /* go to the next one */
-+ /* ++ is safe here (we are acx100) */
-+ txdesc++;
-+ }
-+ /* go back to the last one */
-+ txdesc--;
-+ /* and point to the first making it a ring buffer */
-+ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
-+ (u32) cpu_to_le32 (tx_queue_start));
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_rx_desc_queue
-+*/
-+static void
-+acxmem_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start)
-+{
-+ rxdesc_t *rxdesc;
-+ u32 mem_offs;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* done by memset: adev->rx_tail = 0; */
-+
-+ /* ACX111 doesn't need any further config: preconfigures itself.
-+ * Simply print ring buffer for debugging */
-+ if (IS_ACX111(adev)) {
-+ /* rxdesc_start already set here */
-+
-+ adev->rxdesc_start = (rxdesc_t *) rx_queue_start;
-+
-+ rxdesc = adev->rxdesc_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc);
-+ rxdesc = adev->rxdesc_start = (rxdesc_t *)
-+ acx2cpu(rxdesc->pNextDesc);
-+ }
-+ } else {
-+ /* we didn't pre-calculate rxdesc_start in case of ACX100 */
-+ /* rxdesc_start should be right AFTER Tx pool */
-+ adev->rxdesc_start = (rxdesc_t *)
-+ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t)));
-+ /* NB: sizeof(txdesc_t) above is valid because we know
-+ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere!
-+ ** acx111's txdesc is larger! */
-+
-+ mem_offs = (u32) adev->rxdesc_start;
-+ while (mem_offs < (u32) adev->rxdesc_start + (RX_CNT * sizeof (*rxdesc))) {
-+ write_slavemem32 (adev, mem_offs, 0);
-+ mem_offs += 4;
-+ }
-+
-+ /* loop over whole receive pool */
-+ rxdesc = adev->rxdesc_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc);
-+ /* point to next rxdesc */
-+ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
-+ (u32) cpu_to_le32 ((u8 *) rxdesc + sizeof(*rxdesc)));
-+ /* go to the next one */
-+ rxdesc++;
-+ }
-+ /* go to the last one */
-+ rxdesc--;
-+
-+ /* and point to the first making it a ring buffer */
-+ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
-+ (u32) cpu_to_le32 (rx_queue_start));
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxmem_create_desc_queues
-+*/
-+void
-+acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start)
-+{
-+ u32 *p;
-+ int i;
-+
-+ acxmem_create_tx_desc_queue(adev, tx_queue_start);
-+ acxmem_create_rx_desc_queue(adev, rx_queue_start);
-+ p = (u32 *) adev->acx_queue_indicator;
-+ for (i = 0; i < 4; i++) {
-+ write_slavemem32 (adev, (u32) p, 0);
-+ p++;
-+ }
-+}
-+
-+
-+/***************************************************************
-+** acxmem_s_proc_diag_output
-+*/
-+char*
-+acxmem_s_proc_diag_output(char *p, acx_device_t *adev)
-+{
-+ const char *rtl, *thd, *ttl;
-+ txdesc_t *txdesc;
-+ u8 Ctl_8;
-+ rxdesc_t *rxdesc;
-+ int i;
-+ u32 tmp;
-+ txdesc_t txd;
-+ u8 buf[0x200];
-+ int j, k;
-+
-+ FN_ENTER;
-+
-+#if DUMP_MEM_DURING_DIAG > 0
-+ dump_acxmem (adev, 0, 0x10000);
-+ panic ("dump finished");
-+#endif
-+
-+ p += sprintf(p, "** Rx buf **\n");
-+ rxdesc = adev->rxdesc_start;
-+ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
-+ rtl = (i == adev->rx_tail) ? " [tail]" : "";
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
-+ if (Ctl_8 & DESC_CTL_HOSTOWN)
-+ p += sprintf(p, "%02u (%02x) FULL%s\n", i, Ctl_8, rtl);
-+ else
-+ p += sprintf(p, "%02u (%02x) empty%s\n", i, Ctl_8, rtl);
-+ rxdesc++;
-+ }
-+ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free,
-+ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running");
-+
-+ p += sprintf(p, "** Tx buf %d blocks total, %d available, free list head %04x\n",
-+ adev->acx_txbuf_numblocks, adev->acx_txbuf_blocks_free, adev->acx_txbuf_free);
-+ txdesc = adev->txdesc_start;
-+ if (txdesc) {
-+ for (i = 0; i < TX_CNT; i++) {
-+ thd = (i == adev->tx_head) ? " [head]" : "";
-+ ttl = (i == adev->tx_tail) ? " [tail]" : "";
-+ copy_from_slavemem (adev, (u8 *) &txd, (u32) txdesc, sizeof (txd));
-+ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
-+ if (Ctl_8 & DESC_CTL_ACXDONE)
-+ p += sprintf(p, "%02u ready to free (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ else if (Ctl_8 & DESC_CTL_HOSTOWN)
-+ p += sprintf(p, "%02u available (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ else
-+ p += sprintf(p, "%02u busy (%02X)%s%s", i, Ctl_8, thd, ttl);
-+ tmp = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
-+ if (tmp) {
-+ p += sprintf (p, " %04x", tmp);
-+ while ((tmp = read_slavemem32 (adev, (u32) tmp)) != 0x02000000) {
-+ tmp <<= 5;
-+ p += sprintf (p, " %04x", tmp);
-+ }
-+ }
-+ p += sprintf (p, "\n");
-+ p += sprintf (p, " %04x: %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %02x %02x %02x %02x\n"
-+ "%02x %02x %02x %02x %04x\n",
-+ (u32) txdesc,
-+ txd.pNextDesc.v, txd.HostMemPtr.v, txd.AcxMemPtr.v, txd.tx_time,
-+ txd.total_length, txd.Reserved,
-+ txd.dummy[0], txd.dummy[1], txd.dummy[2], txd.dummy[3],
-+ txd.Ctl_8, txd.Ctl2_8, txd.error, txd.ack_failures,
-+ txd.u.rts.rts_failures, txd.u.rts.rts_ok, txd.u.r1.rate, txd.u.r1.queue_ctrl,
-+ txd.queue_info
-+ );
-+ if (txd.AcxMemPtr.v) {
-+ copy_from_slavemem (adev, buf, txd.AcxMemPtr.v, sizeof (buf));
-+ for (j = 0; (j < txd.total_length) && (j<(sizeof(buf)-4)); j+=16) {
-+ p += sprintf (p, " ");
-+ for (k = 0; (k < 16) && (j+k < txd.total_length); k++) {
-+ p += sprintf (p, " %02x", buf[j+k+4]);
-+ }
-+ p += sprintf (p, "\n");
-+ }
-+ }
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ }
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** Generic slave data **\n"
-+ "irq_mask 0x%04x irq_status 0x%04x irq on acx 0x%04x\n"
-+ "txbuf_start 0x%p, txbuf_area_size %u\n"
-+ "txdesc_size %u, txdesc_start 0x%p\n"
-+ "txhostdesc_start 0x%p, txhostdesc_area_size %u\n"
-+ "txbuf start 0x%04x, txbuf size %d\n"
-+ "rxdesc_start 0x%p\n"
-+ "rxhostdesc_start 0x%p, rxhostdesc_area_size %u\n"
-+ "rxbuf_start 0x%p, rxbuf_area_size %u\n",
-+ adev->irq_mask, adev->irq_status, read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES),
-+ adev->txbuf_start, adev->txbuf_area_size,
-+ adev->txdesc_size, adev->txdesc_start,
-+ adev->txhostdesc_start, adev->txhostdesc_area_size,
-+ adev->acx_txbuf_start, adev->acx_txbuf_numblocks * adev->memblocksize,
-+ adev->rxdesc_start,
-+ adev->rxhostdesc_start, adev->rxhostdesc_area_size,
-+ adev->rxbuf_start, adev->rxbuf_area_size);
-+ FN_EXIT0;
-+ return p;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxmem_proc_eeprom_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < 0x400; i++) {
-+ acxmem_read_eeprom_byte(adev, i, p++);
-+ }
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void
-+acxmem_set_interrupt_mask(acx_device_t *adev)
-+{
-+ if (IS_ACX111(adev)) {
-+ adev->irq_mask = (u16) ~(0
-+ | HOST_INT_RX_DATA
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ /* | HOST_INT_RX_COMPLETE */
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ | HOST_INT_IV_ICV_FAILURE
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ | HOST_INT_OVERFLOW
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ | HOST_INT_FCS_THRESHOLD
-+ | HOST_INT_UNKNOWN
-+ );
-+ /* Or else acx100 won't signal cmd completion, right? */
-+ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */
-+ } else {
-+ adev->irq_mask = (u16) ~(0
-+ | HOST_INT_RX_DATA
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ /* | HOST_INT_RX_COMPLETE */
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ /* | HOST_INT_IV_ICV_FAILURE */
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ /* | HOST_INT_OVERFLOW */
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ /* | HOST_INT_FCS_THRESHOLD */
-+ /* | HOST_INT_BEACON_MISSED */
-+ );
-+ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */
-+ }
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ struct acx111_ie_tx_level tx_level;
-+
-+ /* since it can be assumed that at least the Maxim radio has a
-+ * maximum power output of 20dBm and since it also can be
-+ * assumed that these values drive the DAC responsible for
-+ * setting the linear Tx level, I'd guess that these values
-+ * should be the corresponding linear values for a dBm value,
-+ * in other words: calculate the values from that formula:
-+ * Y [dBm] = 10 * log (X [mW])
-+ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm)
-+ * and you're done...
-+ * Hopefully that's ok, but you never know if we're actually
-+ * right... (especially since Windows XP doesn't seem to show
-+ * actual Tx dBm values :-P) */
-+
-+ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the
-+ * values are EXACTLY mW!!! Not sure about RFMD and others,
-+ * though... */
-+ static const u8 dbm2val_maxim[21] = {
-+ 63, 63, 63, 62,
-+ 61, 61, 60, 60,
-+ 59, 58, 57, 55,
-+ 53, 50, 47, 43,
-+ 38, 31, 23, 13,
-+ 0
-+ };
-+ static const u8 dbm2val_rfmd[21] = {
-+ 0, 0, 0, 1,
-+ 2, 2, 3, 3,
-+ 4, 5, 6, 8,
-+ 10, 13, 16, 20,
-+ 25, 32, 41, 50,
-+ 63
-+ };
-+ const u8 *table;
-+
-+ switch (adev->radio_type) {
-+ case RADIO_MAXIM_0D:
-+ table = &dbm2val_maxim[0];
-+ break;
-+ case RADIO_RFMD_11:
-+ case RADIO_RALINK_15:
-+ table = &dbm2val_rfmd[0];
-+ break;
-+ default:
-+ printk("%s: unknown/unsupported radio type, "
-+ "cannot modify tx power level yet!\n",
-+ adev->ndev->name);
-+ return NOT_OK;
-+ }
-+ /*
-+ * The hx4700 EEPROM, at least, only supports 1 power setting. The configure
-+ * routine matches the PA bias with the gain, so just use its default value.
-+ * The values are: 0x2b for the gain and 0x03 for the PA bias. The firmware
-+ * writes the gain level to the Tx gain control DAC and the PA bias to the Maxim
-+ * radio's PA bias register. The firmware limits itself to 0 - 64 when writing to the
-+ * gain control DAC.
-+ *
-+ * Physically between the ACX and the radio, higher Tx gain control DAC values result
-+ * in less power output; 0 volts to the Maxim radio results in the highest output power
-+ * level, which I'm assuming matches up with 0 in the Tx Gain DAC register.
-+ *
-+ * Although there is only the 1 power setting, one of the radio firmware functions adjusts
-+ * the transmit power level up and down. That function is called by the ACX FIQ handler
-+ * under certain conditions.
-+ */
-+ tx_level.level = 1;
-+ //return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
-+
-+ printk("%s: changing radio power level to %u dBm (%u)\n",
-+ adev->ndev->name, level_dbm, table[level_dbm]);
-+ acxmem_s_write_phy_reg(adev, 0x11, table[level_dbm]);
-+
-+ return 0;
-+}
-+
-+
-+static struct platform_driver
-+acxmem_drv_id = {
-+ .driver = {
-+ .name = "acx-mem",
-+ },
-+ .probe = acxmem_e_probe,
-+ .remove = __devexit_p(acxmem_e_remove),
-+#ifdef CONFIG_PM
-+ .suspend = acxmem_e_suspend,
-+ .resume = acxmem_e_resume
-+#endif /* CONFIG_PM */
-+};
-+
-+
-+/***********************************************************************
-+** acxmem_e_init_module
-+**
-+** Module initialization routine, called once at module load time
-+*/
-+int __init
-+acxmem_e_init_module(void)
-+{
-+ int res;
-+
-+ FN_ENTER;
-+
-+#if (ACX_IO_WIDTH==32)
-+ printk("acx: compiled to use 32bit I/O access. "
-+ "I/O timing issues might occur, such as "
-+ "non-working firmware upload. Report them\n");
-+#else
-+ printk("acx: compiled to use 16bit I/O access only "
-+ "(compatibility mode)\n");
-+#endif
-+
-+#ifdef __LITTLE_ENDIAN
-+#define ENDIANNESS_STRING "running on a little-endian CPU\n"
-+#else
-+#define ENDIANNESS_STRING "running on a BIG-ENDIAN CPU\n"
-+#endif
-+ log(L_INIT,
-+ ENDIANNESS_STRING
-+ "PCI module " ACX_RELEASE " initialized, "
-+ "waiting for cards to probe...\n"
-+ );
-+
-+ res = platform_driver_register (&acxmem_drv_id);
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxmem_e_cleanup_module
-+**
-+** Called at module unload time. This is our last chance to
-+** clean up after ourselves.
-+*/
-+void __exit
-+acxmem_e_cleanup_module(void)
-+{
-+ FN_ENTER;
-+
-+ printk ("cleanup_module\n");
-+ platform_driver_unregister( &acxmem_drv_id );
-+
-+ FN_EXIT0;
-+}
-+
-+void acxmem_e_release(struct device *dev) {
-+}
-+
-+MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
-+MODULE_DESCRIPTION( "ACX Slave Memory Driver" );
-+MODULE_LICENSE( "GPL" );
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/pci.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/pci.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,4234 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+#define ACX_PCI 1
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+
-+/* Linux 2.6.18+ uses <linux/utsrelease.h> */
-+#ifndef UTS_RELEASE
-+#include <linux/utsrelease.h>
-+#endif
-+
-+#include <linux/compiler.h> /* required for Lx 2.6.8 ?? */
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/sched.h>
-+#include <linux/types.h>
-+#include <linux/skbuff.h>
-+#include <linux/slab.h>
-+#include <linux/if_arp.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+#include <linux/netdevice.h>
-+#include <linux/ioport.h>
-+#include <linux/pci.h>
-+#include <linux/pm.h>
-+#include <linux/vmalloc.h>
-+#include <linux/dma-mapping.h>
-+
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+*/
-+#define PCI_TYPE (PCI_USES_MEM | PCI_ADDR0 | PCI_NO_ACPI_WAKE)
-+#define PCI_ACX100_REGION1 0x01
-+#define PCI_ACX100_REGION1_SIZE 0x1000 /* Memory size - 4K bytes */
-+#define PCI_ACX100_REGION2 0x02
-+#define PCI_ACX100_REGION2_SIZE 0x10000 /* Memory size - 64K bytes */
-+
-+#define PCI_ACX111_REGION1 0x00
-+#define PCI_ACX111_REGION1_SIZE 0x2000 /* Memory size - 8K bytes */
-+#define PCI_ACX111_REGION2 0x01
-+#define PCI_ACX111_REGION2_SIZE 0x20000 /* Memory size - 128K bytes */
-+
-+/* Texas Instruments Vendor ID */
-+#define PCI_VENDOR_ID_TI 0x104c
-+
-+/* ACX100 22Mb/s WLAN controller */
-+#define PCI_DEVICE_ID_TI_TNETW1100A 0x8400
-+#define PCI_DEVICE_ID_TI_TNETW1100B 0x8401
-+
-+/* ACX111 54Mb/s WLAN controller */
-+#define PCI_DEVICE_ID_TI_TNETW1130 0x9066
-+
-+/* PCI Class & Sub-Class code, Network-'Other controller' */
-+#define PCI_CLASS_NETWORK_OTHERS 0x0280
-+
-+#define CARD_EEPROM_ID_SIZE 6
-+
-+#ifndef PCI_D0
-+/* From include/linux/pci.h */
-+#define PCI_D0 0
-+#define PCI_D1 1
-+#define PCI_D2 2
-+#define PCI_D3hot 3
-+#define PCI_D3cold 4
-+#define PCI_UNKNOWN 5
-+#define PCI_POWER_ERROR -1
-+#endif
-+
-+
-+/***********************************************************************
-+*/
-+static void acxpci_i_tx_timeout(struct net_device *ndev);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+static irqreturn_t acxpci_i_interrupt(int irq, void *dev_id);
-+#else
-+static irqreturn_t acxpci_i_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-+#endif
-+static void acxpci_i_set_multicast_list(struct net_device *ndev);
-+
-+static int acxpci_e_open(struct net_device *ndev);
-+static int acxpci_e_close(struct net_device *ndev);
-+static void acxpci_s_up(struct net_device *ndev);
-+static void acxpci_s_down(struct net_device *ndev);
-+
-+
-+/***********************************************************************
-+** Register access
-+*/
-+
-+/* Pick one */
-+/* #define INLINE_IO static */
-+#define INLINE_IO static inline
-+
-+INLINE_IO u32
-+read_reg32(acx_device_t *adev, unsigned int offset)
-+{
-+#if ACX_IO_WIDTH == 32
-+ return readl((u8 *)adev->iobase + adev->io[offset]);
-+#else
-+ return readw((u8 *)adev->iobase + adev->io[offset])
-+ + (readw((u8 *)adev->iobase + adev->io[offset] + 2) << 16);
-+#endif
-+}
-+
-+INLINE_IO u16
-+read_reg16(acx_device_t *adev, unsigned int offset)
-+{
-+ return readw((u8 *)adev->iobase + adev->io[offset]);
-+}
-+
-+INLINE_IO u8
-+read_reg8(acx_device_t *adev, unsigned int offset)
-+{
-+ return readb((u8 *)adev->iobase + adev->io[offset]);
-+}
-+
-+INLINE_IO void
-+write_reg32(acx_device_t *adev, unsigned int offset, u32 val)
-+{
-+#if ACX_IO_WIDTH == 32
-+ writel(val, (u8 *)adev->iobase + adev->io[offset]);
-+#else
-+ writew(val & 0xffff, (u8 *)adev->iobase + adev->io[offset]);
-+ writew(val >> 16, (u8 *)adev->iobase + adev->io[offset] + 2);
-+#endif
-+}
-+
-+INLINE_IO void
-+write_reg16(acx_device_t *adev, unsigned int offset, u16 val)
-+{
-+ writew(val, (u8 *)adev->iobase + adev->io[offset]);
-+}
-+
-+INLINE_IO void
-+write_reg8(acx_device_t *adev, unsigned int offset, u8 val)
-+{
-+ writeb(val, (u8 *)adev->iobase + adev->io[offset]);
-+}
-+
-+/* Handle PCI posting properly:
-+ * Make sure that writes reach the adapter in case they require to be executed
-+ * *before* the next write, by reading a random (and safely accessible) register.
-+ * This call has to be made if there is no read following (which would flush the data
-+ * to the adapter), yet the written data has to reach the adapter immediately. */
-+INLINE_IO void
-+write_flush(acx_device_t *adev)
-+{
-+ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */
-+ /* faster version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should also be safe): */
-+ readb(adev->iobase);
-+}
-+
-+INLINE_IO int
-+adev_present(acx_device_t *adev)
-+{
-+ /* fast version (accesses the first register, IO_ACX_SOFT_RESET,
-+ * which should be safe): */
-+ return readl(adev->iobase) != 0xffffffff;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static inline txdesc_t*
-+get_txdesc(acx_device_t *adev, int index)
-+{
-+ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size);
-+}
-+
-+static inline txdesc_t*
-+advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc)
-+{
-+ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size);
-+}
-+
-+static txhostdesc_t*
-+get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return &adev->txhostdesc_start[index*2];
-+}
-+
-+static inline client_t*
-+get_txc(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return NULL;
-+ }
-+ return adev->txc[index];
-+}
-+
-+static inline u16
-+get_txr(acx_device_t *adev, txdesc_t* txdesc)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ index /= adev->txdesc_size;
-+ return adev->txr[index];
-+}
-+
-+static inline void
-+put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111)
-+{
-+ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
-+ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ index /= adev->txdesc_size;
-+ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
-+ printk("bad txdesc ptr %p\n", txdesc);
-+ return;
-+ }
-+ adev->txc[index] = c;
-+ adev->txr[index] = r111;
-+}
-+
-+
-+/***********************************************************************
-+** EEPROM and PHY read/write helpers
-+*/
-+/***********************************************************************
-+** acxpci_read_eeprom_byte
-+**
-+** Function called to read an octet in the EEPROM.
-+**
-+** This function is used by acxpci_e_probe to check if the
-+** connected card is a legal one or not.
-+**
-+** Arguments:
-+** adev ptr to acx_device structure
-+** addr address to read in the EEPROM
-+** charbuf ptr to a char. This is where the read octet
-+** will be stored
-+*/
-+int
-+acxpci_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf)
-+{
-+ int result;
-+ int count;
-+
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for EEPROM read\n",
-+ adev->ndev->name);
-+ result = NOT_OK;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA);
-+ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf);
-+ result = OK;
-+
-+fail:
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** We don't lock hw accesses here since we never r/w eeprom in IRQ
-+** Note: this function sleeps only because of GFP_KERNEL alloc
-+*/
-+#ifdef UNUSED
-+int
-+acxpci_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf)
-+{
-+ u8 *data_verify = NULL;
-+ unsigned long flags;
-+ int count, i;
-+ int result = NOT_OK;
-+ u16 gpio_orig;
-+
-+ printk("acx: WARNING! I would write to EEPROM now. "
-+ "Since I really DON'T want to unless you know "
-+ "what you're doing (THIS CODE WILL PROBABLY "
-+ "NOT WORK YET!), I will abort that now. And "
-+ "definitely make sure to make a "
-+ "/proc/driver/acx_wlan0_eeprom backup copy first!!! "
-+ "(the EEPROM content includes the PCI config header!! "
-+ "If you kill important stuff, then you WILL "
-+ "get in trouble and people DID get in trouble already)\n");
-+ return OK;
-+
-+ FN_ENTER;
-+
-+ data_verify = kmalloc(len, GFP_KERNEL);
-+ if (!data_verify) {
-+ goto end;
-+ }
-+
-+ /* first we need to enable the OE (EEPROM Output Enable) GPIO line
-+ * to be able to write to the EEPROM.
-+ * NOTE: an EEPROM writing success has been reported,
-+ * but you probably have to modify GPIO_OUT, too,
-+ * and you probably need to activate a different GPIO
-+ * line instead! */
-+ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE);
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1);
-+ write_flush(adev);
-+
-+ /* ok, now start writing the data out */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i));
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 1);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("WARNING, DANGER!!! "
-+ "Timeout waiting for EEPROM write\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+ }
-+
-+ /* disable EEPROM writing */
-+ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig);
-+ write_flush(adev);
-+
-+ /* now start a verification run */
-+ for (i = 0; i < len; i++) {
-+ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
-+ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
-+ if (unlikely(!--count)) {
-+ printk("timeout waiting for EEPROM read\n");
-+ goto end;
-+ }
-+ cpu_relax();
-+ }
-+
-+ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA);
-+ }
-+
-+ if (0 == memcmp(charbuf, data_verify, len))
-+ result = OK; /* read data matches, success */
-+
-+end:
-+ kfree(data_verify);
-+ FN_EXIT1(result);
-+ return result;
-+}
-+#endif /* UNUSED */
-+
-+
-+/***********************************************************************
-+** acxpci_s_read_phy_reg
-+**
-+** Messing with rx/tx disabling and enabling here
-+** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic
-+*/
-+int
-+acxpci_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
-+{
-+ int result = NOT_OK;
-+ int count;
-+
-+ FN_ENTER;
-+
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 2);
-+
-+ count = 0xffff;
-+ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
-+ /* scheduling away instead of CPU burning loop
-+ * doesn't seem to work here at all:
-+ * awful delay, sometimes also failure.
-+ * Doesn't matter anyway (only small delay). */
-+ if (unlikely(!--count)) {
-+ printk("%s: timeout waiting for phy read\n",
-+ adev->ndev->name);
-+ *charbuf = 0;
-+ goto fail;
-+ }
-+ cpu_relax();
-+ }
-+
-+ log(L_DEBUG, "count was %u\n", count);
-+ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA);
-+
-+ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg);
-+ result = OK;
-+ goto fail; /* silence compiler warning */
-+fail:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxpci_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
-+{
-+ FN_ENTER;
-+
-+ /* mprusko said that 32bit accesses result in distorted sensitivity
-+ * on his card. Unconfirmed, looks like it's not true (most likely since we
-+ * now properly flush writes). */
-+ write_reg32(adev, IO_ACX_PHY_DATA, value);
-+ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
-+ write_flush(adev);
-+ write_reg32(adev, IO_ACX_PHY_CTL, 1);
-+ write_flush(adev);
-+ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+#define NO_AUTO_INCREMENT 1
-+
-+/***********************************************************************
-+** acxpci_s_write_fw
-+**
-+** Write the firmware image into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** 1 firmware image corrupted
-+** 0 success
-+*/
-+static int
-+acxpci_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset)
-+{
-+ int len, size;
-+ u32 sum, v32;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+ write_flush(adev);
-+#endif
-+
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ sum += p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+ len += 4;
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+ write_flush(adev);
-+#endif
-+ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32);
-+ }
-+
-+ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n",
-+ size, sum, le32_to_cpu(fw_image->chksum));
-+
-+ /* compare our checksum with the stored image checksum */
-+ return (sum != le32_to_cpu(fw_image->chksum));
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_validate_fw
-+**
-+** Compare the firmware image given with
-+** the firmware image written into the card.
-+**
-+** Arguments:
-+** adev wlan device structure
-+** fw_image firmware image.
-+**
-+** Returns:
-+** NOT_OK firmware image corrupted or not correctly written
-+** OK success
-+*/
-+static int
-+acxpci_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image,
-+ u32 offset)
-+{
-+ u32 sum, v32, w32;
-+ int len, size;
-+ int result = OK;
-+ /* we skip the first four bytes which contain the control sum */
-+ const u8 *p = (u8*)fw_image + 4;
-+
-+ /* start the image checksum by adding the image size value */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
-+#else
-+ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
-+#endif
-+
-+ len = 0;
-+ size = le32_to_cpu(fw_image->size) & (~3);
-+
-+ while (likely(len < size)) {
-+ v32 = be32_to_cpu(*(u32*)p);
-+ p += 4;
-+ len += 4;
-+
-+#if NO_AUTO_INCREMENT
-+ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
-+#endif
-+ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA);
-+
-+ if (unlikely(w32 != v32)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "data parts at offset %d don't match (0x%08X vs. 0x%08X)! "
-+ "I/O timing issues or defective memory, with DWL-xx0+? "
-+ "ACX_IO_WIDTH=16 may help. Please report\n",
-+ len, v32, w32);
-+ result = NOT_OK;
-+ break;
-+ }
-+
-+ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24);
-+ }
-+
-+ /* sum control verification */
-+ if (result != NOT_OK) {
-+ if (sum != le32_to_cpu(fw_image->chksum)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "checksums don't match!\n");
-+ result = NOT_OK;
-+ }
-+ }
-+
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_upload_fw
-+**
-+** Called from acx_reset_dev
-+*/
-+static int
-+acxpci_s_upload_fw(acx_device_t *adev)
-+{
-+ firmware_image_t *fw_image = NULL;
-+ int res = NOT_OK;
-+ int try;
-+ u32 file_size;
-+ char filename[sizeof("tiacx1NNcNN")];
-+
-+ FN_ENTER;
-+
-+ /* print exact chipset and radio ID to make sure people really get a clue on which files exactly they are supposed to provide,
-+ * since firmware loading is the biggest enduser PITA with these chipsets.
-+ * Not printing radio ID in 0xHEX in order to not confuse them into wrong file naming */
-+ printk( "acx: need to load firmware for acx1%02d chipset with radio ID %02x, please provide via firmware hotplug:\n"
-+ "acx: either one file only (<c>ombined firmware image file, radio-specific) or two files (radio-less base image file *plus* separate <r>adio-specific extension file)\n",
-+ IS_ACX111(adev)*11, adev->radio_type);
-+
-+ /* Try combined, then main image */
-+ adev->need_radio_fw = 0;
-+ snprintf(filename, sizeof(filename), "tiacx1%02dc%02X",
-+ IS_ACX111(adev)*11, adev->radio_type);
-+
-+ fw_image = acx_s_read_fw(&adev->pdev->dev, filename, &file_size);
-+ if (!fw_image) {
-+ adev->need_radio_fw = 1;
-+ filename[sizeof("tiacx1NN")-1] = '\0';
-+ fw_image = acx_s_read_fw(&adev->pdev->dev, filename, &file_size);
-+ if (!fw_image) {
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+ }
-+ }
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxpci_s_write_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (main/combined): %d\n", res);
-+ if (OK == res) {
-+ res = acxpci_s_validate_fw(adev, fw_image, 0);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw "
-+ "(main/combined): %d\n", res);
-+ }
-+
-+ if (OK == res) {
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED);
-+ break;
-+ }
-+ printk("acx: firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+ vfree(fw_image);
-+
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_upload_radio
-+**
-+** Uploads the appropriate radio module firmware into the card.
-+*/
-+int
-+acxpci_s_upload_radio(acx_device_t *adev)
-+{
-+ acx_ie_memmap_t mm;
-+ firmware_image_t *radio_image;
-+ acx_cmd_radioinit_t radioinit;
-+ int res = NOT_OK;
-+ int try;
-+ u32 offset;
-+ u32 size;
-+ char filename[sizeof("tiacx1NNrNN")];
-+
-+ if (!adev->need_radio_fw) return OK;
-+
-+ FN_ENTER;
-+
-+ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+ offset = le32_to_cpu(mm.CodeEnd);
-+
-+ snprintf(filename, sizeof(filename), "tiacx1%02dr%02X",
-+ IS_ACX111(adev)*11,
-+ adev->radio_type);
-+ radio_image = acx_s_read_fw(&adev->pdev->dev, filename, &size);
-+ if (!radio_image) {
-+ printk("acx: can't load radio module '%s'\n", filename);
-+ goto fail;
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
-+
-+ for (try = 1; try <= 5; try++) {
-+ res = acxpci_s_write_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res);
-+ if (OK == res) {
-+ res = acxpci_s_validate_fw(adev, radio_image, offset);
-+ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res);
-+ }
-+
-+ if (OK == res)
-+ break;
-+ printk("acx: radio firmware upload attempt #%d FAILED, "
-+ "retrying...\n", try);
-+ acx_s_msleep(1000); /* better wait for a while... */
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
-+ radioinit.offset = cpu_to_le32(offset);
-+ /* no endian conversion needed, remains in card CPU area: */
-+ radioinit.len = radio_image->size;
-+
-+ vfree(radio_image);
-+
-+ if (OK != res)
-+ goto fail;
-+
-+ /* will take a moment so let's have a big timeout */
-+ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT,
-+ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000));
-+
-+ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
-+fail:
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_l_reset_mac
-+**
-+** MAC will be reset
-+** Call context: reset_dev
-+*/
-+static void
-+acxpci_l_reset_mac(acx_device_t *adev)
-+{
-+ u16 temp;
-+
-+ FN_ENTER;
-+
-+ /* halt eCPU */
-+ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
-+ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
-+
-+ /* now do soft reset of eCPU, set bit */
-+ temp = read_reg16(adev, IO_ACX_SOFT_RESET) | 0x1;
-+ log(L_DEBUG, "%s: enable soft reset...\n", __func__);
-+ write_reg16(adev, IO_ACX_SOFT_RESET, temp);
-+ write_flush(adev);
-+
-+ /* now clear bit again: deassert eCPU reset */
-+ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__);
-+ write_reg16(adev, IO_ACX_SOFT_RESET, temp & ~0x1);
-+
-+ /* now start a burst read from initial EEPROM */
-+ temp = read_reg16(adev, IO_ACX_EE_START) | 0x1;
-+ write_reg16(adev, IO_ACX_EE_START, temp);
-+ write_flush(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_verify_init
-+*/
-+static int
-+acxpci_s_verify_init(acx_device_t *adev)
-+{
-+ int result = NOT_OK;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ timeout = jiffies + 2*HZ;
-+ for (;;) {
-+ u16 irqstat = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if (irqstat & HOST_INT_FCS_THRESHOLD) {
-+ result = OK;
-+ write_reg16(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD);
-+ break;
-+ }
-+ if (time_after(jiffies, timeout))
-+ break;
-+ /* Init may take up to ~0.5 sec total */
-+ acx_s_msleep(50);
-+ }
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** A few low-level helpers
-+**
-+** Note: these functions are not protected by lock
-+** and thus are never allowed to be called from IRQ.
-+** Also they must not race with fw upload which uses same hw regs
-+*/
-+
-+/***********************************************************************
-+** acxpci_write_cmd_type_status
-+*/
-+
-+static inline void
-+acxpci_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status)
-+{
-+ writel(type | (status << 16), adev->cmd_area);
-+ write_flush(adev);
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_read_cmd_type_status
-+*/
-+static u32
-+acxpci_read_cmd_type_status(acx_device_t *adev)
-+{
-+ u32 cmd_type, cmd_status;
-+
-+ cmd_type = readl(adev->cmd_area);
-+ cmd_status = (cmd_type >> 16);
-+ cmd_type = (u16)cmd_type;
-+
-+ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n",
-+ cmd_type, cmd_status,
-+ acx_cmd_status_str(cmd_status));
-+
-+ return cmd_status;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_reset_dev
-+**
-+** Arguments:
-+** netdevice that contains the adev variable
-+** Returns:
-+** NOT_OK on fail
-+** OK on success
-+** Side effects:
-+** device is hard reset
-+** Call context:
-+** acxpci_e_probe
-+** Comment:
-+** This resets the device using low level hardware calls
-+** as well as uploads and verifies the firmware to the card
-+*/
-+
-+static inline void
-+init_mboxes(acx_device_t *adev)
-+{
-+ u32 cmd_offs, info_offs;
-+
-+ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS);
-+ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS);
-+ adev->cmd_area = (u8 *)adev->iobase2 + cmd_offs;
-+ adev->info_area = (u8 *)adev->iobase2 + info_offs;
-+ log(L_DEBUG, "iobase2=%p\n"
-+ "cmd_mbox_offset=%X cmd_area=%p\n"
-+ "info_mbox_offset=%X info_area=%p\n",
-+ adev->iobase2,
-+ cmd_offs, adev->cmd_area,
-+ info_offs, adev->info_area);
-+}
-+
-+
-+static inline void
-+read_eeprom_area(acx_device_t *adev)
-+{
-+#if ACX_DEBUG > 1
-+ int offs;
-+ u8 tmp;
-+
-+ for (offs = 0x8c; offs < 0xb9; offs++)
-+ acxpci_read_eeprom_byte(adev, offs, &tmp);
-+#endif
-+}
-+
-+
-+static int
-+acxpci_s_reset_dev(acx_device_t *adev)
-+{
-+ const char* msg = "";
-+ unsigned long flags;
-+ int result = NOT_OK;
-+ u16 hardware_info;
-+ u16 ecpu_ctrl;
-+ int count;
-+
-+ FN_ENTER;
-+
-+ /* reset the device to make sure the eCPU is stopped
-+ * to upload the firmware correctly */
-+
-+ acx_lock(adev, flags);
-+
-+ acxpci_l_reset_mac(adev);
-+
-+ ecpu_ctrl = read_reg16(adev, IO_ACX_ECPU_CTRL) & 1;
-+ if (!ecpu_ctrl) {
-+ msg = "eCPU is already running. ";
-+ goto end_unlock;
-+ }
-+
-+#ifdef WE_DONT_NEED_THAT_DO_WE
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) {
-+ /* eCPU most likely means "embedded CPU" */
-+ msg = "eCPU did not start after boot from flash. ";
-+ goto end_unlock;
-+ }
-+
-+ /* check sense on reset flags */
-+ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) {
-+ printk("%s: eCPU did not start after boot (SOR), "
-+ "is this fatal?\n", adev->ndev->name);
-+ }
-+#endif
-+ /* scan, if any, is stopped now, setting corresponding IRQ bit */
-+ adev->irq_status |= HOST_INT_SCAN_COMPLETE;
-+
-+ acx_unlock(adev, flags);
-+
-+ /* need to know radio type before fw load */
-+ /* Need to wait for arrival of this information in a loop,
-+ * most probably since eCPU runs some init code from EEPROM
-+ * (started burst read in reset_mac()) which also
-+ * sets the radio type ID */
-+
-+ count = 0xffff;
-+ do {
-+ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION);
-+ if (!--count) {
-+ msg = "eCPU didn't indicate radio type";
-+ goto end_fail;
-+ }
-+ cpu_relax();
-+ } while (!(hardware_info & 0xff00)); /* radio type still zero? */
-+
-+ /* printk("DEBUG: count %d\n", count); */
-+ adev->form_factor = hardware_info & 0xff;
-+ adev->radio_type = hardware_info >> 8;
-+
-+ /* load the firmware */
-+ if (OK != acxpci_s_upload_fw(adev))
-+ goto end_fail;
-+
-+ /* acx_s_msleep(10); this one really shouldn't be required */
-+
-+ /* now start eCPU by clearing bit */
-+ write_reg16(adev, IO_ACX_ECPU_CTRL, ecpu_ctrl & ~0x1);
-+ log(L_DEBUG, "booted eCPU up and waiting for completion...\n");
-+
-+ /* wait for eCPU bootup */
-+ if (OK != acxpci_s_verify_init(adev)) {
-+ msg = "timeout waiting for eCPU. ";
-+ goto end_fail;
-+ }
-+ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n");
-+
-+ init_mboxes(adev);
-+ acxpci_write_cmd_type_status(adev, 0, 0);
-+
-+ /* test that EEPROM is readable */
-+ read_eeprom_area(adev);
-+
-+ result = OK;
-+ goto end;
-+
-+/* Finish error message. Indicate which function failed */
-+end_unlock:
-+ acx_unlock(adev, flags);
-+end_fail:
-+ printk("acx: %sreset_dev() FAILED\n", msg);
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_issue_cmd_timeo
-+**
-+** Sends command to fw, extract result
-+**
-+** NB: we do _not_ take lock inside, so be sure to not touch anything
-+** which may interfere with IRQ handler operation
-+**
-+** TODO: busy wait is a bit silly, so:
-+** 1) stop doing many iters - go to sleep after first
-+** 2) go to waitqueue based approach: wait, not poll!
-+*/
-+#undef FUNC
-+#define FUNC "issue_cmd"
-+
-+#if !ACX_DEBUG
-+int
-+acxpci_s_issue_cmd_timeo(
-+ acx_device_t *adev,
-+ unsigned int cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout)
-+{
-+#else
-+int
-+acxpci_s_issue_cmd_timeo_debug(
-+ acx_device_t *adev,
-+ unsigned cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned cmd_timeout,
-+ const char* cmdstr)
-+{
-+ unsigned long start = jiffies;
-+#endif
-+ const char *devname;
-+ unsigned counter;
-+ u16 irqtype;
-+ u16 cmd_status;
-+ unsigned long timeout;
-+
-+ FN_ENTER;
-+
-+ devname = adev->ndev->name;
-+ if (!devname || !devname[0] || devname[4]=='%')
-+ devname = "acx";
-+
-+ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n",
-+ cmdstr, buflen, cmd_timeout,
-+ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
-+
-+ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) {
-+ printk("%s: "FUNC"(): firmware is not loaded yet, "
-+ "cannot execute commands!\n", devname);
-+ goto bad;
-+ }
-+
-+ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) {
-+ printk("input buffer (len=%u):\n", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+
-+ /* wait for firmware to become idle for our command submission */
-+ timeout = HZ/5;
-+ counter = (timeout * 1000 / HZ) - 1; /* in ms */
-+ timeout += jiffies;
-+ do {
-+ cmd_status = acxpci_read_cmd_type_status(adev);
-+ /* Test for IDLE state */
-+ if (!cmd_status)
-+ break;
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ if (!counter) {
-+ /* the card doesn't get idle, we're in trouble */
-+ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n",
-+ devname, cmd_status);
-+ goto bad;
-+ } else if (counter < 190) { /* if waited >10ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. "
-+ "Please report\n", 199 - counter);
-+ }
-+
-+ /* now write the parameters of the command if needed */
-+ if (buffer && buflen) {
-+ /* if it's an INTERROGATE command, just pass the length
-+ * of parameters to read, as data */
-+#if CMD_DISCOVERY
-+ if (cmd == ACX1xx_CMD_INTERROGATE)
-+ memset_io(adev->cmd_area + 4, 0xAA, buflen);
-+#endif
-+ /* adev->cmd_area points to PCI device's memory, not to RAM! */
-+ memcpy_toio(adev->cmd_area + 4, buffer,
-+ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen);
-+ }
-+ /* now write the actual command type */
-+ acxpci_write_cmd_type_status(adev, cmd, 0);
-+ /* execute command */
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD);
-+ write_flush(adev);
-+
-+ /* wait for firmware to process command */
-+
-+ /* Ensure nonzero and not too large timeout.
-+ ** Also converts e.g. 100->99, 200->199
-+ ** which is nice but not essential */
-+ cmd_timeout = (cmd_timeout-1) | 1;
-+ if (unlikely(cmd_timeout > 1199))
-+ cmd_timeout = 1199;
-+ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */
-+ adev->irq_status &= ~HOST_INT_CMD_COMPLETE;
-+
-+ /* we schedule away sometimes (timeout can be large) */
-+ counter = cmd_timeout;
-+ timeout = jiffies + cmd_timeout * HZ / 1000;
-+ do {
-+ if (!adev->irqs_active) { /* IRQ disabled: poll */
-+ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ write_reg16(adev, IO_ACX_IRQ_ACK,
-+ HOST_INT_CMD_COMPLETE);
-+ break;
-+ }
-+ } else { /* Wait when IRQ will set the bit */
-+ irqtype = adev->irq_status;
-+ if (irqtype & HOST_INT_CMD_COMPLETE)
-+ break;
-+ }
-+
-+ if (counter % 8 == 0) {
-+ if (time_after(jiffies, timeout)) {
-+ counter = 0;
-+ break;
-+ }
-+ /* we waited 8 iterations, no luck. Sleep 8 ms */
-+ acx_s_msleep(8);
-+ }
-+ } while (likely(--counter));
-+
-+ /* save state for debugging */
-+ cmd_status = acxpci_read_cmd_type_status(adev);
-+
-+ /* put the card in IDLE state */
-+ acxpci_write_cmd_type_status(adev, 0, 0);
-+
-+ if (!counter) { /* timed out! */
-+ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. "
-+ "irq bits:0x%04X irq_status:0x%04X timeout:%dms "
-+ "cmd_status:%d (%s)\n",
-+ devname, (adev->irqs_active) ? "waiting" : "polling",
-+ irqtype, adev->irq_status, cmd_timeout,
-+ cmd_status, acx_cmd_status_str(cmd_status));
-+ goto bad;
-+ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */
-+ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. "
-+ "count:%d. Please report\n",
-+ (adev->irqs_active) ? "waited" : "polled",
-+ cmd_timeout - counter, counter);
-+ }
-+
-+ if (1 != cmd_status) { /* it is not a 'Success' */
-+ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). "
-+ "Took %dms of %d\n",
-+ devname, cmd_status, acx_cmd_status_str(cmd_status),
-+ cmd_timeout - counter, cmd_timeout);
-+ /* zero out result buffer
-+ * WARNING: this will trash stack in case of illegally large input
-+ * length! */
-+ if (buffer && buflen)
-+ memset(buffer, 0, buflen);
-+ goto bad;
-+ }
-+
-+ /* read in result parameters if needed */
-+ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) {
-+ /* adev->cmd_area points to PCI device's memory, not to RAM! */
-+ memcpy_fromio(buffer, adev->cmd_area + 4, buflen);
-+ if (acx_debug & L_DEBUG) {
-+ printk("output buffer (len=%u): ", buflen);
-+ acx_dump_bytes(buffer, buflen);
-+ }
-+ }
-+/* ok: */
-+ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n",
-+ cmdstr, jiffies - start);
-+ FN_EXIT1(OK);
-+ return OK;
-+
-+bad:
-+ /* Give enough info so that callers can avoid
-+ ** printing their own diagnostic messages */
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
-+#else
-+ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
-+#endif
-+ dump_stack();
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#ifdef NONESSENTIAL_FEATURES
-+typedef struct device_id {
-+ unsigned char id[6];
-+ char *descr;
-+ char *type;
-+} device_id_t;
-+
-+static const device_id_t
-+device_ids[] =
-+{
-+ {
-+ {'G', 'l', 'o', 'b', 'a', 'l'},
-+ NULL,
-+ NULL,
-+ },
-+ {
-+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-+ "uninitialized",
-+ "SpeedStream SS1021 or Gigafast WF721-AEX"
-+ },
-+ {
-+ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85},
-+ "non-standard",
-+ "DrayTek Vigor 520"
-+ },
-+ {
-+ {'?', '?', '?', '?', '?', '?'},
-+ "non-standard",
-+ "Level One WPC-0200"
-+ },
-+ {
-+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-+ "empty",
-+ "DWL-650+ variant"
-+ }
-+};
-+
-+static void
-+acx_show_card_eeprom_id(acx_device_t *adev)
-+{
-+ unsigned char buffer[CARD_EEPROM_ID_SIZE];
-+ int i;
-+
-+ memset(&buffer, 0, CARD_EEPROM_ID_SIZE);
-+ /* use direct EEPROM access */
-+ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) {
-+ if (OK != acxpci_read_eeprom_byte(adev,
-+ ACX100_EEPROM_ID_OFFSET + i,
-+ &buffer[i])) {
-+ printk("acx: reading EEPROM FAILED\n");
-+ break;
-+ }
-+ }
-+
-+ for (i = 0; i < VEC_SIZE(device_ids); i++) {
-+ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) {
-+ if (device_ids[i].descr) {
-+ printk("acx: EEPROM card ID string check "
-+ "found %s card ID: is this %s?\n",
-+ device_ids[i].descr, device_ids[i].type);
-+ }
-+ break;
-+ }
-+ }
-+ if (i == VEC_SIZE(device_ids)) {
-+ printk("acx: EEPROM card ID string check found "
-+ "unknown card: expected 'Global', got '%.*s\'. "
-+ "Please report\n", CARD_EEPROM_ID_SIZE, buffer);
-+ }
-+}
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+
-+/***********************************************************************
-+** acxpci_free_desc_queues
-+**
-+** Releases the queues that have been allocated, the
-+** others have been initialised to NULL so this
-+** function can be used if only part of the queues were allocated.
-+*/
-+
-+static inline void
-+free_coherent(struct pci_dev *hwdev, size_t size,
-+ void *vaddr, dma_addr_t dma_handle)
-+{
-+ dma_free_coherent(hwdev == NULL ? NULL : &hwdev->dev,
-+ size, vaddr, dma_handle);
-+}
-+
-+void
-+acxpci_free_desc_queues(acx_device_t *adev)
-+{
-+#define ACX_FREE_QUEUE(size, ptr, phyaddr) \
-+ if (ptr) { \
-+ free_coherent(0, size, ptr, phyaddr); \
-+ ptr = NULL; \
-+ size = 0; \
-+ }
-+
-+ FN_ENTER;
-+
-+ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy);
-+
-+ adev->txdesc_start = NULL;
-+
-+ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy);
-+ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy);
-+
-+ adev->rxdesc_start = NULL;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_delete_dma_regions
-+*/
-+static void
-+acxpci_s_delete_dma_regions(acx_device_t *adev)
-+{
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+ /* disable radio Tx/Rx. Shouldn't we use the firmware commands
-+ * here instead? Or are we that much down the road that it's no
-+ * longer possible here? */
-+ write_reg16(adev, IO_ACX_ENABLE, 0);
-+
-+ acx_s_msleep(100);
-+
-+ acx_lock(adev, flags);
-+ acxpci_free_desc_queues(adev);
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_e_probe
-+**
-+** Probe routine called when a PCI device w/ matching ID is found.
-+** Here's the sequence:
-+** - Allocate the PCI resources.
-+** - Read the PCMCIA attribute memory to make sure we have a WLAN card
-+** - Reset the MAC
-+** - Initialize the dev and wlan data
-+** - Initialize the MAC
-+**
-+** pdev - ptr to pci device structure containing info about pci configuration
-+** id - ptr to the device id entry that matched this device
-+*/
-+static const u16
-+IO_ACX100[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_END_CTL */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x007c, /* IO_ACX_INT_TRIG */
-+ 0x0098, /* IO_ACX_IRQ_MASK */
-+ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00ac, /* IO_ACX_IRQ_ACK */
-+ 0x00b0, /* IO_ACX_HINT_TRIG */
-+
-+ 0x0104, /* IO_ACX_ENABLE */
-+
-+ 0x0250, /* IO_ACX_EEPROM_CTL */
-+ 0x0254, /* IO_ACX_EEPROM_ADDR */
-+ 0x0258, /* IO_ACX_EEPROM_DATA */
-+ 0x025c, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0268, /* IO_ACX_PHY_ADDR */
-+ 0x026c, /* IO_ACX_PHY_DATA */
-+ 0x0270, /* IO_ACX_PHY_CTL */
-+
-+ 0x0290, /* IO_ACX_GPIO_OE */
-+
-+ 0x0298, /* IO_ACX_GPIO_OUT */
-+
-+ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x02d0, /* IO_ACX_EE_START */
-+ 0x02d4, /* IO_ACX_SOR_CFG */
-+ 0x02d8 /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static const u16
-+IO_ACX111[] =
-+{
-+ 0x0000, /* IO_ACX_SOFT_RESET */
-+
-+ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
-+ 0x0018, /* IO_ACX_SLV_MEM_DATA */
-+ 0x001c, /* IO_ACX_SLV_MEM_CTL */
-+ 0x0020, /* IO_ACX_SLV_END_CTL */
-+
-+ 0x0034, /* IO_ACX_FEMR */
-+
-+ 0x00b4, /* IO_ACX_INT_TRIG */
-+ 0x00d4, /* IO_ACX_IRQ_MASK */
-+ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */
-+ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */
-+ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */
-+ 0x00e8, /* IO_ACX_IRQ_ACK */
-+ 0x00ec, /* IO_ACX_HINT_TRIG */
-+
-+ 0x01d0, /* IO_ACX_ENABLE */
-+
-+ 0x0338, /* IO_ACX_EEPROM_CTL */
-+ 0x033c, /* IO_ACX_EEPROM_ADDR */
-+ 0x0340, /* IO_ACX_EEPROM_DATA */
-+ 0x0344, /* IO_ACX_EEPROM_CFG */
-+
-+ 0x0350, /* IO_ACX_PHY_ADDR */
-+ 0x0354, /* IO_ACX_PHY_DATA */
-+ 0x0358, /* IO_ACX_PHY_CTL */
-+
-+ 0x0374, /* IO_ACX_GPIO_OE */
-+
-+ 0x037c, /* IO_ACX_GPIO_OUT */
-+
-+ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */
-+ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */
-+ 0x0390, /* IO_ACX_EEPROM_INFORMATION */
-+
-+ 0x0100, /* IO_ACX_EE_START */
-+ 0x0104, /* IO_ACX_SOR_CFG */
-+ 0x0108, /* IO_ACX_ECPU_CTRL */
-+};
-+
-+static void
-+dummy_netdev_init(struct net_device *ndev) {}
-+
-+static int __devinit
-+acxpci_e_probe(struct pci_dev *pdev, const struct pci_device_id *id)
-+{
-+ acx111_ie_configoption_t co;
-+ unsigned long mem_region1 = 0;
-+ unsigned long mem_region2 = 0;
-+ unsigned long mem_region1_size;
-+ unsigned long mem_region2_size;
-+ unsigned long phymem1;
-+ unsigned long phymem2;
-+ void *mem1 = NULL;
-+ void *mem2 = NULL;
-+ acx_device_t *adev = NULL;
-+ struct net_device *ndev = NULL;
-+ const char *chip_name;
-+ int result = -EIO;
-+ int err;
-+ u8 chip_type;
-+
-+ FN_ENTER;
-+
-+ /* Enable the PCI device */
-+ if (pci_enable_device(pdev)) {
-+ printk("acx: pci_enable_device() FAILED\n");
-+ result = -ENODEV;
-+ goto fail_pci_enable_device;
-+ }
-+
-+ /* enable busmastering (required for CardBus) */
-+ pci_set_master(pdev);
-+
-+ /* FIXME: prism54 calls pci_set_mwi() here,
-+ * should we do/support the same? */
-+
-+ /* chiptype is u8 but id->driver_data is ulong
-+ ** Works for now (possible values are 1 and 2) */
-+ chip_type = (u8)id->driver_data;
-+ /* acx100 and acx111 have different PCI memory regions */
-+ if (chip_type == CHIPTYPE_ACX100) {
-+ chip_name = "ACX100";
-+ mem_region1 = PCI_ACX100_REGION1;
-+ mem_region1_size = PCI_ACX100_REGION1_SIZE;
-+
-+ mem_region2 = PCI_ACX100_REGION2;
-+ mem_region2_size = PCI_ACX100_REGION2_SIZE;
-+ } else if (chip_type == CHIPTYPE_ACX111) {
-+ chip_name = "ACX111";
-+ mem_region1 = PCI_ACX111_REGION1;
-+ mem_region1_size = PCI_ACX111_REGION1_SIZE;
-+
-+ mem_region2 = PCI_ACX111_REGION2;
-+ mem_region2_size = PCI_ACX111_REGION2_SIZE;
-+ } else {
-+ printk("acx: unknown chip type 0x%04X\n", chip_type);
-+ goto fail_unknown_chiptype;
-+ }
-+
-+ /* Figure out our resources */
-+ phymem1 = pci_resource_start(pdev, mem_region1);
-+ phymem2 = pci_resource_start(pdev, mem_region2);
-+ if (!request_mem_region(phymem1, pci_resource_len(pdev, mem_region1), "acx_1")) {
-+ printk("acx: cannot reserve PCI memory region 1 (are you sure "
-+ "you have CardBus support in kernel?)\n");
-+ goto fail_request_mem_region1;
-+ }
-+ if (!request_mem_region(phymem2, pci_resource_len(pdev, mem_region2), "acx_2")) {
-+ printk("acx: cannot reserve PCI memory region 2\n");
-+ goto fail_request_mem_region2;
-+ }
-+
-+ /* this used to be ioremap(), but ioremap_nocache()
-+ * is much less risky, right? (and slower?)
-+ * FIXME: we may want to go back to cached variant if it's
-+ * certain that our code really properly handles
-+ * cached operation (memory barriers, volatile?, ...)
-+ * (but always keep this comment here regardless!)
-+ * Possibly make this a driver config setting? */
-+
-+ mem1 = ioremap_nocache(phymem1, mem_region1_size);
-+ if (!mem1) {
-+ printk("acx: ioremap() FAILED\n");
-+ goto fail_ioremap1;
-+ }
-+ mem2 = ioremap_nocache(phymem2, mem_region2_size);
-+ if (!mem2) {
-+ printk("acx: ioremap() #2 FAILED\n");
-+ goto fail_ioremap2;
-+ }
-+
-+ printk("acx: found %s-based wireless network card at %s, irq:%d, "
-+ "phymem1:0x%lX, phymem2:0x%lX, mem1:0x%p, mem1_size:%ld, "
-+ "mem2:0x%p, mem2_size:%ld\n",
-+ chip_name, pci_name(pdev), pdev->irq, phymem1, phymem2,
-+ mem1, mem_region1_size,
-+ mem2, mem_region2_size);
-+ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug);
-+
-+ if (0 == pdev->irq) {
-+ printk("acx: can't use IRQ 0\n");
-+ goto fail_irq;
-+ }
-+
-+ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init);
-+ /* (NB: memsets to 0 entire area) */
-+ if (!ndev) {
-+ printk("acx: no memory for netdevice struct\n");
-+ goto fail_alloc_netdev;
-+ }
-+
-+ ether_setup(ndev);
-+ ndev->open = &acxpci_e_open;
-+ ndev->stop = &acxpci_e_close;
-+ ndev->hard_start_xmit = &acx_i_start_xmit;
-+ ndev->get_stats = &acx_e_get_stats;
-+#if IW_HANDLER_VERSION <= 5
-+ ndev->get_wireless_stats = &acx_e_get_wireless_stats;
-+#endif
-+ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
-+ ndev->set_multicast_list = &acxpci_i_set_multicast_list;
-+ ndev->tx_timeout = &acxpci_i_tx_timeout;
-+ ndev->change_mtu = &acx_e_change_mtu;
-+ ndev->watchdog_timeo = 4 * HZ;
-+ ndev->irq = pdev->irq;
-+ ndev->base_addr = pci_resource_start(pdev, 0);
-+
-+ adev = ndev2adev(ndev);
-+ spin_lock_init(&adev->lock); /* initial state: unlocked */
-+ /* We do not start with downed sem: we want PARANOID_LOCKING to work */
-+ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
-+ /* since nobody can see new netdev yet, we can as well
-+ ** just _presume_ that we're under sem (instead of actually taking it): */
-+ /* acx_sem_lock(adev); */
-+ adev->pdev = pdev;
-+ adev->ndev = ndev;
-+ adev->dev_type = DEVTYPE_PCI;
-+ adev->chip_type = chip_type;
-+ adev->chip_name = chip_name;
-+ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111;
-+ adev->membase = phymem1;
-+ adev->iobase = mem1;
-+ adev->membase2 = phymem2;
-+ adev->iobase2 = mem2;
-+ /* to find crashes due to weird driver access
-+ * to unconfigured interface (ifup) */
-+ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead;
-+
-+#ifdef NONESSENTIAL_FEATURES
-+ acx_show_card_eeprom_id(adev);
-+#endif /* NONESSENTIAL_FEATURES */
-+
-+#ifdef SET_MODULE_OWNER
-+ SET_MODULE_OWNER(ndev);
-+#endif
-+ SET_NETDEV_DEV(ndev, &pdev->dev);
-+
-+ log(L_IRQ|L_INIT, "using IRQ %d\n", pdev->irq);
-+
-+ /* need to be able to restore PCI state after a suspend */
-+ pci_save_state(pdev);
-+ pci_set_drvdata(pdev, ndev);
-+
-+ /* ok, pci setup is finished, now start initializing the card */
-+
-+ /* NB: read_reg() reads may return bogus data before reset_dev(),
-+ * since the firmware which directly controls large parts of the I/O
-+ * registers isn't initialized yet.
-+ * acx100 seems to be more affected than acx111 */
-+ if (OK != acxpci_s_reset_dev(adev))
-+ goto fail_reset;
-+
-+ if (IS_ACX100(adev)) {
-+ /* ACX100: configopt struct in cmd mailbox - directly after reset */
-+ memcpy_fromio(&co, adev->cmd_area, sizeof(co));
-+ }
-+
-+ if (OK != acx_s_init_mac(adev))
-+ goto fail_init_mac;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111: configopt struct needs to be queried after full init */
-+ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS);
-+ }
-+
-+/* TODO: merge them into one function, they are called just once and are the same for pci & usb */
-+ if (OK != acxpci_read_eeprom_byte(adev, 0x05, &adev->eeprom_version))
-+ goto fail_read_eeprom_version;
-+
-+ acx_s_parse_configoption(adev, &co);
-+ acx_s_set_defaults(adev);
-+ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */
-+ acx_display_hardware_details(adev);
-+
-+ /* Register the card, AFTER everything else has been set up,
-+ * since otherwise an ioctl could step on our feet due to
-+ * firmware operations happening in parallel or uninitialized data */
-+ err = register_netdev(ndev);
-+ if (OK != err) {
-+ printk("acx: register_netdev() FAILED: %d\n", err);
-+ goto fail_register_netdev;
-+ }
-+
-+ acx_proc_register_entries(ndev);
-+
-+ /* Now we have our device, so make sure the kernel doesn't try
-+ * to send packets even though we're not associated to a network yet */
-+ acx_stop_queue(ndev, "on probe");
-+ acx_carrier_off(ndev, "on probe");
-+
-+ /* after register_netdev() userspace may start working with dev
-+ * (in particular, on other CPUs), we only need to up the sem */
-+ /* acx_sem_unlock(adev); */
-+
-+ printk("acx "ACX_RELEASE": net device %s, driver compiled "
-+ "against wireless extensions %d and Linux %s\n",
-+ ndev->name, WIRELESS_EXT, UTS_RELEASE);
-+
-+#if CMD_DISCOVERY
-+ great_inquisitor(adev);
-+#endif
-+
-+ result = OK;
-+ goto done;
-+
-+ /* error paths: undo everything in reverse order... */
-+
-+fail_register_netdev:
-+
-+ acxpci_s_delete_dma_regions(adev);
-+ pci_set_drvdata(pdev, NULL);
-+
-+fail_init_mac:
-+fail_read_eeprom_version:
-+fail_reset:
-+
-+ free_netdev(ndev);
-+fail_alloc_netdev:
-+fail_irq:
-+
-+ iounmap(mem2);
-+fail_ioremap2:
-+
-+ iounmap(mem1);
-+fail_ioremap1:
-+
-+ release_mem_region(pci_resource_start(pdev, mem_region2),
-+ pci_resource_len(pdev, mem_region2));
-+fail_request_mem_region2:
-+
-+ release_mem_region(pci_resource_start(pdev, mem_region1),
-+ pci_resource_len(pdev, mem_region1));
-+fail_request_mem_region1:
-+fail_unknown_chiptype:
-+
-+ pci_disable_device(pdev);
-+fail_pci_enable_device:
-+
-+ pci_set_power_state(pdev, PCI_D3hot);
-+
-+done:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_e_remove
-+**
-+** Shut device down (if not hot unplugged)
-+** and deallocate PCI resources for the acx chip.
-+**
-+** pdev - ptr to PCI device structure containing info about pci configuration
-+*/
-+static void __devexit
-+acxpci_e_remove(struct pci_dev *pdev)
-+{
-+ struct net_device *ndev;
-+ acx_device_t *adev;
-+ unsigned long mem_region1, mem_region2;
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ ndev = (struct net_device*) pci_get_drvdata(pdev);
-+ if (!ndev) {
-+ log(L_DEBUG, "%s: card is unused. Skipping any release code\n",
-+ __func__);
-+ goto end;
-+ }
-+
-+ adev = ndev2adev(ndev);
-+
-+ /* If device wasn't hot unplugged... */
-+ if (adev_present(adev)) {
-+
-+ acx_sem_lock(adev);
-+
-+ /* disable both Tx and Rx to shut radio down properly */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
-+
-+#ifdef REDUNDANT
-+ /* put the eCPU to sleep to save power
-+ * Halting is not possible currently,
-+ * since not supported by all firmware versions */
-+ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0);
-+#endif
-+ acx_lock(adev, flags);
-+ /* disable power LED to save power :-) */
-+ log(L_INIT, "switching off power LED to save power\n");
-+ acxpci_l_power_led(adev, 0);
-+ /* stop our eCPU */
-+ if (IS_ACX111(adev)) {
-+ /* FIXME: does this actually keep halting the eCPU?
-+ * I don't think so...
-+ */
-+ acxpci_l_reset_mac(adev);
-+ } else {
-+ u16 temp;
-+ /* halt eCPU */
-+ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
-+ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
-+ write_flush(adev);
-+ }
-+ acx_unlock(adev, flags);
-+
-+ acx_sem_unlock(adev);
-+ }
-+
-+ /* unregister the device to not let the kernel
-+ * (e.g. ioctls) access a half-deconfigured device
-+ * NB: this will cause acxpci_e_close() to be called,
-+ * thus we shouldn't call it under sem! */
-+ log(L_INIT, "removing device %s\n", ndev->name);
-+ unregister_netdev(ndev);
-+
-+ /* unregister_netdev ensures that no references to us left.
-+ * For paranoid reasons we continue to follow the rules */
-+ acx_sem_lock(adev);
-+
-+ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) {
-+ acxpci_s_down(ndev);
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ }
-+
-+ acx_proc_unregister_entries(ndev);
-+
-+ if (IS_ACX100(adev)) {
-+ mem_region1 = PCI_ACX100_REGION1;
-+ mem_region2 = PCI_ACX100_REGION2;
-+ } else {
-+ mem_region1 = PCI_ACX111_REGION1;
-+ mem_region2 = PCI_ACX111_REGION2;
-+ }
-+
-+ /* finally, clean up PCI bus state */
-+ acxpci_s_delete_dma_regions(adev);
-+ if (adev->iobase) iounmap(adev->iobase);
-+ if (adev->iobase2) iounmap(adev->iobase2);
-+ release_mem_region(pci_resource_start(pdev, mem_region1),
-+ pci_resource_len(pdev, mem_region1));
-+ release_mem_region(pci_resource_start(pdev, mem_region2),
-+ pci_resource_len(pdev, mem_region2));
-+ pci_disable_device(pdev);
-+
-+ /* remove dev registration */
-+ pci_set_drvdata(pdev, NULL);
-+
-+ acx_sem_unlock(adev);
-+
-+ /* Free netdev (quite late,
-+ * since otherwise we might get caught off-guard
-+ * by a netdev timeout handler execution
-+ * expecting to see a working dev...) */
-+ free_netdev(ndev);
-+
-+ /* put device into ACPI D3 mode (shutdown) */
-+ pci_set_power_state(pdev, PCI_D3hot);
-+
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** TODO: PM code needs to be fixed / debugged / tested.
-+*/
-+#ifdef CONFIG_PM
-+static int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+acxpci_e_suspend(struct pci_dev *pdev, pm_message_t state)
-+#else
-+acxpci_e_suspend(struct pci_dev *pdev, u32 state)
-+#endif
-+{
-+ struct net_device *ndev = pci_get_drvdata(pdev);
-+ acx_device_t *adev;
-+
-+ FN_ENTER;
-+ printk("acx: suspend handler is experimental!\n");
-+ printk("sus: dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ goto end;
-+
-+ adev = ndev2adev(ndev);
-+ printk("sus: adev %p\n", adev);
-+
-+ acx_sem_lock(adev);
-+
-+ netif_device_detach(ndev); /* this one cannot sleep */
-+ acxpci_s_down(ndev);
-+ /* down() does not set it to 0xffff, but here we really want that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ acxpci_s_delete_dma_regions(adev);
-+ pci_save_state(pdev);
-+ pci_set_power_state(pdev, PCI_D3hot);
-+
-+ acx_sem_unlock(adev);
-+end:
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+static int
-+acxpci_e_resume(struct pci_dev *pdev)
-+{
-+ struct net_device *ndev = pci_get_drvdata(pdev);
-+ acx_device_t *adev;
-+
-+ FN_ENTER;
-+
-+ printk("acx: resume handler is experimental!\n");
-+ printk("rsm: got dev %p\n", ndev);
-+
-+ if (!netif_running(ndev))
-+ goto end;
-+
-+ adev = ndev2adev(ndev);
-+ printk("rsm: got adev %p\n", adev);
-+
-+ acx_sem_lock(adev);
-+
-+ pci_set_power_state(pdev, PCI_D0);
-+ printk("rsm: power state PCI_D0 set\n");
-+ pci_restore_state(pdev);
-+ printk("rsm: PCI state restored\n");
-+
-+ if (OK != acxpci_s_reset_dev(adev))
-+ goto end_unlock;
-+ printk("rsm: device reset done\n");
-+ if (OK != acx_s_init_mac(adev))
-+ goto end_unlock;
-+ printk("rsm: init MAC done\n");
-+
-+ acxpci_s_up(ndev);
-+ printk("rsm: acx up done\n");
-+
-+ /* now even reload all card parameters as they were before suspend,
-+ * and possibly be back in the network again already :-) */
-+ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) {
-+ adev->set_mask = GETSET_ALL;
-+ acx_s_update_card_settings(adev);
-+ printk("rsm: settings updated\n");
-+ }
-+ netif_device_attach(ndev);
-+ printk("rsm: device attached\n");
-+
-+end_unlock:
-+ acx_sem_unlock(adev);
-+end:
-+ /* we need to return OK here anyway, right? */
-+ FN_EXIT0;
-+ return OK;
-+}
-+#endif /* CONFIG_PM */
-+
-+
-+/***********************************************************************
-+** acxpci_s_up
-+**
-+** This function is called by acxpci_e_open (when ifconfig sets the device as up)
-+**
-+** Side effects:
-+** - Enables on-card interrupt requests
-+** - calls acx_s_start
-+*/
-+
-+static void
-+enable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask);
-+ write_reg16(adev, IO_ACX_FEMR, 0x8000);
-+ adev->irqs_active = 1;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxpci_s_up(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+ enable_acx_irq(adev);
-+ acx_unlock(adev, flags);
-+
-+ /* acx fw < 1.9.3.e has a hardware timer, and older drivers
-+ ** used to use it. But we don't do that anymore, our OS
-+ ** has reliable software timers */
-+ init_timer(&adev->mgmt_timer);
-+ adev->mgmt_timer.function = acx_i_timer;
-+ adev->mgmt_timer.data = (unsigned long)adev;
-+
-+ /* Need to set ACX_STATE_IFACE_UP first, or else
-+ ** timer won't be started by acx_set_status() */
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ /* actual scan cmd will happen in start() */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING); break;
-+ case ACX_MODE_3_AP:
-+ case ACX_MODE_MONITOR:
-+ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break;
-+ }
-+
-+ acx_s_start(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_down
-+**
-+** NB: device may be already hot unplugged if called from acxpci_e_remove()
-+**
-+** Disables on-card interrupt request, stops softirq and timer, stops queue,
-+** sets status == STOPPED
-+*/
-+
-+static void
-+disable_acx_irq(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+
-+ /* I guess mask is not 0xffff because acx100 won't signal
-+ ** cmd completion then (needed for ifup).
-+ ** Someone with acx100 please confirm */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ adev->irqs_active = 0;
-+ FN_EXIT0;
-+}
-+
-+static void
-+acxpci_s_down(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ /* Disable IRQs first, so that IRQs cannot race with us */
-+ /* then wait until interrupts have finished executing on other CPUs */
-+ acx_lock(adev, flags);
-+ disable_acx_irq(adev);
-+ synchronize_irq(adev->pdev->irq);
-+ acx_unlock(adev, flags);
-+
-+ /* we really don't want to have an asynchronous tasklet disturb us
-+ ** after something vital for its job has been shut down, so
-+ ** end all remaining work now.
-+ **
-+ ** NB: carrier_off (done by set_status below) would lead to
-+ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK().
-+ ** That's why we do FLUSH first.
-+ **
-+ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK()
-+ ** waits for acx_e_after_interrupt_task to complete if it is running
-+ ** on another CPU, but acx_e_after_interrupt_task
-+ ** will sleep on sem forever, because it is taken by us!
-+ ** Work around that by temporary sem unlock.
-+ ** This will fail miserably if we'll be hit by concurrent
-+ ** iwconfig or something in between. TODO! */
-+ acx_sem_unlock(adev);
-+ FLUSH_SCHEDULED_WORK();
-+ acx_sem_lock(adev);
-+
-+ /* This is possible:
-+ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task ->
-+ ** -> set_status(ASSOCIATED) -> wake_queue()
-+ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK
-+ ** lock/unlock is just paranoia, maybe not needed */
-+ acx_lock(adev, flags);
-+ acx_stop_queue(ndev, "on ifdown");
-+ acx_set_status(adev, ACX_STATUS_0_STOPPED);
-+ acx_unlock(adev, flags);
-+
-+ /* kernel/timer.c says it's illegal to del_timer_sync()
-+ ** a timer which restarts itself. We guarantee this cannot
-+ ** ever happen because acx_i_timer() never does this if
-+ ** status is ACX_STATUS_0_STOPPED */
-+ del_timer_sync(&adev->mgmt_timer);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_e_open
-+**
-+** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP
-+** from clear to set. In other words: ifconfig up.
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxpci_e_open(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ int result = OK;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ acx_init_task_scheduler(adev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D0); ? */
-+
-+ /* request shared IRQ handler */
-+ if (request_irq(ndev->irq, acxpci_i_interrupt, SA_SHIRQ, ndev->name, ndev)) {
-+ printk("%s: request_irq FAILED\n", ndev->name);
-+ result = -EAGAIN;
-+ goto done;
-+ }
-+ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq);
-+
-+ /* ifup device */
-+ acxpci_s_up(ndev);
-+
-+ /* We don't currently have to do anything else.
-+ * The setup of the MAC should be subsequently completed via
-+ * the mlme commands.
-+ * Higher layers know we're ready from dev->start==1 and
-+ * dev->tbusy==0. Our rx path knows to pass up received/
-+ * frames because of dev->flags&IFF_UP is true.
-+ */
-+done:
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_e_close
-+**
-+** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP
-+** from set to clear. I.e. called by "ifconfig DEV down"
-+**
-+** Returns:
-+** 0 success
-+** >0 f/w reported error
-+** <0 driver reported error
-+*/
-+static int
-+acxpci_e_close(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* ifdown device */
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ if (netif_device_present(ndev)) {
-+ acxpci_s_down(ndev);
-+ }
-+
-+ /* disable all IRQs, release shared IRQ handler */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ write_reg16(adev, IO_ACX_FEMR, 0x0);
-+ free_irq(ndev->irq, ndev);
-+
-+/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */
-+
-+ /* We currently don't have to do anything else.
-+ * Higher layers know we're not ready from dev->start==0 and
-+ * dev->tbusy==1. Our rx path knows to not pass up received
-+ * frames because of dev->flags&IFF_UP is false.
-+ */
-+ acx_sem_unlock(adev);
-+
-+ log(L_INIT, "closed device\n");
-+ FN_EXIT0;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_i_tx_timeout
-+**
-+** Called from network core. Must not sleep!
-+*/
-+static void
-+acxpci_i_tx_timeout(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ unsigned int tx_num_cleaned;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* clean processed tx descs, they may have been completely full */
-+ tx_num_cleaned = acxpci_l_clean_txdesc(adev);
-+
-+ /* nothing cleaned, yet (almost) no free buffers available?
-+ * --> clean all tx descs, no matter which status!!
-+ * Note that I strongly suspect that doing emergency cleaning
-+ * may confuse the firmware. This is a last ditch effort to get
-+ * ANYTHING to work again...
-+ *
-+ * TODO: it's best to simply reset & reinit hw from scratch...
-+ */
-+ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) {
-+ printk("%s: FAILED to free any of the many full tx buffers. "
-+ "Switching to emergency freeing. "
-+ "Please report!\n", ndev->name);
-+ acxpci_l_clean_txdesc_emergency(adev);
-+ }
-+
-+ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status))
-+ acx_wake_queue(ndev, "after tx timeout");
-+
-+ /* stall may have happened due to radio drift, so recalib radio */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+
-+ /* do unimportant work last */
-+ printk("%s: tx timeout!\n", ndev->name);
-+ adev->stats.tx_errors++;
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_i_set_multicast_list
-+** FIXME: most likely needs refinement
-+*/
-+static void
-+acxpci_i_set_multicast_list(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ /* firmwares don't have allmulti capability,
-+ * so just use promiscuous mode instead in this case. */
-+ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
-+ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ /* let kernel know in case *we* needed to set promiscuous */
-+ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI);
-+ } else {
-+ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
-+ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
-+ SET_BIT(adev->set_mask, SET_RXCONFIG);
-+ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI);
-+ }
-+
-+ /* cannot update card settings directly here, atomic context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_l_process_rxdesc
-+**
-+** Called directly and only from the IRQ handler
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_rxbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_rxbuffer(const acx_device_t *adev)
-+{
-+ register const struct rxhostdesc *rxhostdesc;
-+ int i;
-+ /* no FN_ENTER here, we don't want that */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+ if (unlikely(!rxhostdesc)) return;
-+ for (i = 0; i < RX_CNT; i++) {
-+ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
-+ printk("rx: buf %d full\n", i);
-+ rxhostdesc++;
-+ }
-+}
-+#endif
-+
-+static void
-+acxpci_l_process_rxdesc(acx_device_t *adev)
-+{
-+ register rxhostdesc_t *hostdesc;
-+ unsigned count, tail;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(acx_debug & L_BUFR))
-+ log_rxbuffer(adev);
-+
-+ /* First, have a loop to determine the first descriptor that's
-+ * full, just in case there's a mismatch between our current
-+ * rx_tail and the full descriptor we're supposed to handle. */
-+ tail = adev->rx_tail;
-+ count = RX_CNT;
-+ while (1) {
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+ /* advance tail regardless of outcome of the below test */
-+ tail = (tail + 1) % RX_CNT;
-+
-+ if ((hostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ && (hostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
-+ break; /* found it! */
-+
-+ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */
-+ goto end;
-+ }
-+
-+ /* now process descriptors, starting with the first we figured out */
-+ while (1) {
-+ log(L_BUFR, "rx: tail=%u Ctl_16=%04X Status=%08X\n",
-+ tail, hostdesc->Ctl_16, hostdesc->Status);
-+
-+ acx_l_process_rxbuf(adev, hostdesc->data);
-+
-+ hostdesc->Status = 0;
-+ /* flush all writes before adapter sees CTL_HOSTOWN change */
-+ wmb();
-+ /* Host no longer owns this, needs to be LAST */
-+ CLEAR_BIT(hostdesc->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
-+
-+ /* ok, descriptor is handled, now check the next descriptor */
-+ hostdesc = &adev->rxhostdesc_start[tail];
-+
-+ /* if next descriptor is empty, then bail out */
-+ if (!(hostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ || !(hostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
-+ break;
-+
-+ tail = (tail + 1) % RX_CNT;
-+ }
-+end:
-+ adev->rx_tail = tail;
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_i_interrupt
-+**
-+** IRQ handler (atomic context, must not sleep, blah, blah)
-+*/
-+
-+/* scan is complete. all frames now on the receive queue are valid */
-+#define INFO_SCAN_COMPLETE 0x0001
-+#define INFO_WEP_KEY_NOT_FOUND 0x0002
-+/* hw has been reset as the result of a watchdog timer timeout */
-+#define INFO_WATCH_DOG_RESET 0x0003
-+/* failed to send out NULL frame from PS mode notification to AP */
-+/* recommended action: try entering 802.11 PS mode again */
-+#define INFO_PS_FAIL 0x0004
-+/* encryption/decryption process on a packet failed */
-+#define INFO_IV_ICV_FAILURE 0x0005
-+
-+/* Info mailbox format:
-+2 bytes: type
-+2 bytes: status
-+more bytes may follow
-+ rumors say about status:
-+ 0x0000 info available (set by hw)
-+ 0x0001 information received (must be set by host)
-+ 0x1000 info available, mailbox overflowed (messages lost) (set by hw)
-+ but in practice we've seen:
-+ 0x9000 when we did not set status to 0x0001 on prev message
-+ 0x1001 when we did set it
-+ 0x0000 was never seen
-+ conclusion: this is really a bitfield:
-+ 0x1000 is 'info available' bit
-+ 'mailbox overflowed' bit is 0x8000, not 0x1000
-+ value of 0x0000 probably means that there are no messages at all
-+ P.S. I dunno how in hell hw is supposed to notice that messages are lost -
-+ it does NOT clear bit 0x0001, and this bit will probably stay forever set
-+ after we set it once. Let's hope this will be fixed in firmware someday
-+*/
-+
-+static void
-+handle_info_irq(acx_device_t *adev)
-+{
-+#if ACX_DEBUG
-+ static const char * const info_type_msg[] = {
-+ "(unknown)",
-+ "scan complete",
-+ "WEP key not found",
-+ "internal watchdog reset was done",
-+ "failed to send powersave (NULL frame) notification to AP",
-+ "encrypt/decrypt on a packet has failed",
-+ "TKIP tx keys disabled",
-+ "TKIP rx keys disabled",
-+ "TKIP rx: key ID not found",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "???",
-+ "TKIP IV value exceeds thresh"
-+ };
-+#endif
-+ u32 info_type, info_status;
-+
-+ info_type = readl(adev->info_area);
-+ info_status = (info_type >> 16);
-+ info_type = (u16)info_type;
-+
-+ /* inform fw that we have read this info message */
-+ writel(info_type | 0x00010000, adev->info_area);
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK);
-+ write_flush(adev);
-+
-+ log(L_CTL, "info_type:%04X info_status:%04X\n",
-+ info_type, info_status);
-+
-+ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n",
-+ info_status, info_type,
-+ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ?
-+ 0 : info_type]
-+ );
-+}
-+
-+
-+static void
-+log_unusual_irq(u16 irqtype) {
-+ /*
-+ if (!printk_ratelimit())
-+ return;
-+ */
-+
-+ printk("acx: got");
-+ if (irqtype & HOST_INT_RX_DATA) {
-+ printk(" Rx_Data");
-+ }
-+ /* HOST_INT_TX_COMPLETE */
-+ if (irqtype & HOST_INT_TX_XFER) {
-+ printk(" Tx_Xfer");
-+ }
-+ /* HOST_INT_RX_COMPLETE */
-+ if (irqtype & HOST_INT_DTIM) {
-+ printk(" DTIM");
-+ }
-+ if (irqtype & HOST_INT_BEACON) {
-+ printk(" Beacon");
-+ }
-+ if (irqtype & HOST_INT_TIMER) {
-+ log(L_IRQ, " Timer");
-+ }
-+ if (irqtype & HOST_INT_KEY_NOT_FOUND) {
-+ printk(" Key_Not_Found");
-+ }
-+ if (irqtype & HOST_INT_IV_ICV_FAILURE) {
-+ printk(" IV_ICV_Failure (crypto)");
-+ }
-+ /* HOST_INT_CMD_COMPLETE */
-+ /* HOST_INT_INFO */
-+ if (irqtype & HOST_INT_OVERFLOW) {
-+ printk(" Overflow");
-+ }
-+ if (irqtype & HOST_INT_PROCESS_ERROR) {
-+ printk(" Process_Error");
-+ }
-+ /* HOST_INT_SCAN_COMPLETE */
-+ if (irqtype & HOST_INT_FCS_THRESHOLD) {
-+ printk(" FCS_Threshold");
-+ }
-+ if (irqtype & HOST_INT_UNKNOWN) {
-+ printk(" Unknown");
-+ }
-+ printk(" IRQ(s)\n");
-+}
-+
-+
-+static void
-+update_link_quality_led(acx_device_t *adev)
-+{
-+ int qual;
-+
-+ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise);
-+ if (qual > adev->brange_max_quality)
-+ qual = adev->brange_max_quality;
-+
-+ if (time_after(jiffies, adev->brange_time_last_state_change +
-+ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) {
-+ acxpci_l_power_led(adev, (adev->brange_last_state == 0));
-+ adev->brange_last_state ^= 1; /* toggle */
-+ adev->brange_time_last_state_change = jiffies;
-+ }
-+}
-+
-+
-+#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */
-+
-+static irqreturn_t
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+acxpci_i_interrupt(int irq, void *dev_id)
-+#else
-+acxpci_i_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+#endif
-+{
-+ acx_device_t *adev;
-+ unsigned long flags;
-+ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY;
-+ register u16 irqtype;
-+ u16 unmasked;
-+
-+ adev = ndev2adev((struct net_device*)dev_id);
-+
-+ /* LOCKING: can just spin_lock() since IRQs are disabled anyway.
-+ * I am paranoid */
-+ acx_lock(adev, flags);
-+
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ if (unlikely(0xffff == unmasked)) {
-+ /* 0xffff value hints at missing hardware,
-+ * so don't do anything.
-+ * Not very clean, but other drivers do the same... */
-+ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n");
-+ goto none;
-+ }
-+
-+ /* We will check only "interesting" IRQ types */
-+ irqtype = unmasked & ~adev->irq_mask;
-+ if (!irqtype) {
-+ /* We are on a shared IRQ line and it wasn't our IRQ */
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n",
-+ unmasked, adev->irq_mask);
-+ goto none;
-+ }
-+
-+ /* Done here because IRQ_NONEs taking three lines of log
-+ ** drive me crazy */
-+ FN_ENTER;
-+
-+#define IRQ_ITERATE 1
-+#if IRQ_ITERATE
-+if (jiffies != adev->irq_last_jiffies) {
-+ adev->irq_loops_this_jiffy = 0;
-+ adev->irq_last_jiffies = jiffies;
-+}
-+
-+/* safety condition; we'll normally abort loop below
-+ * in case no IRQ type occurred */
-+while (likely(--irqcount)) {
-+#endif
-+ /* ACK all IRQs ASAP */
-+ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff);
-+
-+ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n",
-+ unmasked, adev->irq_mask, irqtype);
-+
-+ /* Handle most important IRQ types first */
-+ if (irqtype & HOST_INT_RX_COMPLETE) {
-+ log(L_IRQ, "got Rx_Complete IRQ\n");
-+ acxpci_l_process_rxdesc(adev);
-+ }
-+ if (irqtype & HOST_INT_TX_COMPLETE) {
-+ log(L_IRQ, "got Tx_Complete IRQ\n");
-+ /* don't clean up on each Tx complete, wait a bit
-+ * unless we're going towards full, in which case
-+ * we do it immediately, too (otherwise we might lockup
-+ * with a full Tx buffer if we go into
-+ * acxpci_l_clean_txdesc() at a time when we won't wakeup
-+ * the net queue in there for some reason...) */
-+ if (adev->tx_free <= TX_START_CLEAN) {
-+#if TX_CLEANUP_IN_SOFTIRQ
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP);
-+#else
-+ acxpci_l_clean_txdesc(adev);
-+#endif
-+ }
-+ }
-+
-+ /* Less frequent ones */
-+ if (irqtype & (0
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ | HOST_INT_SCAN_COMPLETE
-+ )) {
-+ if (irqtype & HOST_INT_CMD_COMPLETE) {
-+ log(L_IRQ, "got Command_Complete IRQ\n");
-+ /* save the state for the running issue_cmd() */
-+ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE);
-+ }
-+ if (irqtype & HOST_INT_INFO) {
-+ handle_info_irq(adev);
-+ }
-+ if (irqtype & HOST_INT_SCAN_COMPLETE) {
-+ log(L_IRQ, "got Scan_Complete IRQ\n");
-+ /* need to do that in process context */
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN);
-+ /* remember that fw is not scanning anymore */
-+ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
-+ }
-+ }
-+
-+ /* These we just log, but either they happen rarely
-+ * or we keep them masked out */
-+ if (irqtype & (0
-+ | HOST_INT_RX_DATA
-+ /* | HOST_INT_TX_COMPLETE */
-+ | HOST_INT_TX_XFER
-+ /* | HOST_INT_RX_COMPLETE */
-+ | HOST_INT_DTIM
-+ | HOST_INT_BEACON
-+ | HOST_INT_TIMER
-+ | HOST_INT_KEY_NOT_FOUND
-+ | HOST_INT_IV_ICV_FAILURE
-+ /* | HOST_INT_CMD_COMPLETE */
-+ /* | HOST_INT_INFO */
-+ | HOST_INT_OVERFLOW
-+ | HOST_INT_PROCESS_ERROR
-+ /* | HOST_INT_SCAN_COMPLETE */
-+ | HOST_INT_FCS_THRESHOLD
-+ | HOST_INT_UNKNOWN
-+ )) {
-+ log_unusual_irq(irqtype);
-+ }
-+
-+#if IRQ_ITERATE
-+ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
-+ irqtype = unmasked & ~adev->irq_mask;
-+ /* Bail out if no new IRQ bits or if all are masked out */
-+ if (!irqtype)
-+ break;
-+
-+ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) {
-+ printk(KERN_ERR "acx: too many interrupts per jiffy!\n");
-+ /* Looks like card floods us with IRQs! Try to stop that */
-+ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
-+ /* This will short-circuit all future attempts to handle IRQ.
-+ * We cant do much more... */
-+ adev->irq_mask = 0;
-+ break;
-+ }
-+}
-+#endif
-+ /* Routine to perform blink with range */
-+ if (unlikely(adev->led_power == 2))
-+ update_link_quality_led(adev);
-+
-+/* handled: */
-+ /* write_flush(adev); - not needed, last op was read anyway */
-+ acx_unlock(adev, flags);
-+ FN_EXIT0;
-+ return IRQ_HANDLED;
-+
-+none:
-+ acx_unlock(adev, flags);
-+ return IRQ_NONE;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_l_power_led
-+*/
-+void
-+acxpci_l_power_led(acx_device_t *adev, int enable)
-+{
-+ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800;
-+
-+ /* A hack. Not moving message rate limiting to adev->xxx
-+ * (it's only a debug message after all) */
-+ static int rate_limit = 0;
-+
-+ if (rate_limit++ < 3)
-+ log(L_IOCTL, "Please report in case toggling the power "
-+ "LED doesn't work for your card!\n");
-+ if (enable)
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled);
-+ else
-+ write_reg16(adev, IO_ACX_GPIO_OUT,
-+ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled);
-+}
-+
-+
-+/***********************************************************************
-+** Ioctls
-+*/
-+
-+/***********************************************************************
-+*/
-+int
-+acx111pci_ioctl_info(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+#if ACX_DEBUG > 1
-+ acx_device_t *adev = ndev2adev(ndev);
-+ rxdesc_t *rxdesc;
-+ txdesc_t *txdesc;
-+ rxhostdesc_t *rxhostdesc;
-+ txhostdesc_t *txhostdesc;
-+ struct acx111_ie_memoryconfig memconf;
-+ struct acx111_ie_queueconfig queueconf;
-+ unsigned long flags;
-+ int i;
-+ char memmap[0x34];
-+ char rxconfig[0x8];
-+ char fcserror[0x8];
-+ char ratefallback[0x5];
-+
-+ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) )
-+ return OK;
-+ /* using printk() since we checked debug flag already */
-+
-+ acx_sem_lock(adev);
-+
-+ if (!IS_ACX111(adev)) {
-+ printk("acx111-specific function called "
-+ "with non-acx111 chip, aborting\n");
-+ goto end_ok;
-+ }
-+
-+ /* get Acx111 Memory Configuration */
-+ memset(&memconf, 0, sizeof(memconf));
-+ /* BTW, fails with 12 (Write only) error code.
-+ ** Retained for easy testing of issue_cmd error handling :) */
-+ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG);
-+
-+ /* get Acx111 Queue Configuration */
-+ memset(&queueconf, 0, sizeof(queueconf));
-+ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
-+
-+ /* get Acx111 Memory Map */
-+ memset(memmap, 0, sizeof(memmap));
-+ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP);
-+
-+ /* get Acx111 Rx Config */
-+ memset(rxconfig, 0, sizeof(rxconfig));
-+ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG);
-+
-+ /* get Acx111 fcs error count */
-+ memset(fcserror, 0, sizeof(fcserror));
-+ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT);
-+
-+ /* get Acx111 rate fallback */
-+ memset(ratefallback, 0, sizeof(ratefallback));
-+ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK);
-+
-+ /* force occurrence of a beacon interrupt */
-+ /* TODO: comment why is this necessary */
-+ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON);
-+
-+ /* dump Acx111 Mem Configuration */
-+ printk("dump mem config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Number of stations: %1X\n"
-+ "Memory block size: %1X\n"
-+ "tx/rx memory block allocation: %1X\n"
-+ "count rx: %X / tx: %X queues\n"
-+ "options %1X\n"
-+ "fragmentation %1X\n"
-+ "Rx Queue 1 Count Descriptors: %X\n"
-+ "Rx Queue 1 Host Memory Start: %X\n"
-+ "Tx Queue 1 Count Descriptors: %X\n"
-+ "Tx Queue 1 Attributes: %X\n",
-+ memconf.len, (int) sizeof(memconf),
-+ memconf.no_of_stations,
-+ memconf.memory_block_size,
-+ memconf.tx_rx_memory_block_allocation,
-+ memconf.count_rx_queues, memconf.count_tx_queues,
-+ memconf.options,
-+ memconf.fragmentation,
-+ memconf.rx_queue1_count_descs,
-+ acx2cpu(memconf.rx_queue1_host_rx_start),
-+ memconf.tx_queue1_count_descs,
-+ memconf.tx_queue1_attributes);
-+
-+ /* dump Acx111 Queue Configuration */
-+ printk("dump queue head:\n"
-+ "data read: %d, struct size: %d\n"
-+ "tx_memory_block_address (from card): %X\n"
-+ "rx_memory_block_address (from card): %X\n"
-+ "rx1_queue address (from card): %X\n"
-+ "tx1_queue address (from card): %X\n"
-+ "tx1_queue attributes (from card): %X\n",
-+ queueconf.len, (int) sizeof(queueconf),
-+ queueconf.tx_memory_block_address,
-+ queueconf.rx_memory_block_address,
-+ queueconf.rx1_queue_address,
-+ queueconf.tx1_queue_address,
-+ queueconf.tx1_attributes);
-+
-+ /* dump Acx111 Mem Map */
-+ printk("dump mem map:\n"
-+ "data read: %d, struct size: %d\n"
-+ "Code start: %X\n"
-+ "Code end: %X\n"
-+ "WEP default key start: %X\n"
-+ "WEP default key end: %X\n"
-+ "STA table start: %X\n"
-+ "STA table end: %X\n"
-+ "Packet template start: %X\n"
-+ "Packet template end: %X\n"
-+ "Queue memory start: %X\n"
-+ "Queue memory end: %X\n"
-+ "Packet memory pool start: %X\n"
-+ "Packet memory pool end: %X\n"
-+ "iobase: %p\n"
-+ "iobase2: %p\n",
-+ *((u16 *)&memmap[0x02]), (int) sizeof(memmap),
-+ *((u32 *)&memmap[0x04]),
-+ *((u32 *)&memmap[0x08]),
-+ *((u32 *)&memmap[0x0C]),
-+ *((u32 *)&memmap[0x10]),
-+ *((u32 *)&memmap[0x14]),
-+ *((u32 *)&memmap[0x18]),
-+ *((u32 *)&memmap[0x1C]),
-+ *((u32 *)&memmap[0x20]),
-+ *((u32 *)&memmap[0x24]),
-+ *((u32 *)&memmap[0x28]),
-+ *((u32 *)&memmap[0x2C]),
-+ *((u32 *)&memmap[0x30]),
-+ adev->iobase,
-+ adev->iobase2);
-+
-+ /* dump Acx111 Rx Config */
-+ printk("dump rx config:\n"
-+ "data read: %d, struct size: %d\n"
-+ "rx config: %X\n"
-+ "rx filter config: %X\n",
-+ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig),
-+ *((u16 *)&rxconfig[0x04]),
-+ *((u16 *)&rxconfig[0x06]));
-+
-+ /* dump Acx111 fcs error */
-+ printk("dump fcserror:\n"
-+ "data read: %d, struct size: %d\n"
-+ "fcserrors: %X\n",
-+ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror),
-+ *((u32 *)&fcserror[0x04]));
-+
-+ /* dump Acx111 rate fallback */
-+ printk("dump rate fallback:\n"
-+ "data read: %d, struct size: %d\n"
-+ "ratefallback: %X\n",
-+ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback),
-+ *((u8 *)&ratefallback[0x04]));
-+
-+ /* protect against IRQ */
-+ acx_lock(adev, flags);
-+
-+ /* dump acx111 internal rx descriptor ring buffer */
-+ rxdesc = adev->rxdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump internal rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n"
-+ "RxStatus (dynamic) 0x%X\n"
-+ "Mod/Pre (dynamic) 0x%X\n",
-+ i,
-+ rxdesc,
-+ acx2cpu(rxdesc->pNextDesc),
-+ acx2cpu(rxdesc->ACXMemPtr),
-+ rxdesc->Ctl_8,
-+ rxdesc->rate,
-+ rxdesc->error,
-+ rxdesc->SNR);
-+ rxdesc++;
-+ }
-+
-+ /* dump host rx descriptor ring buffer */
-+
-+ rxhostdesc = adev->rxhostdesc_start;
-+
-+ /* loop over complete receive pool */
-+ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
-+ printk("\ndump host rxdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ rxhostdesc,
-+ acx2cpu(rxhostdesc->data_phy),
-+ rxhostdesc->data_offset,
-+ le16_to_cpu(rxhostdesc->Ctl_16),
-+ le16_to_cpu(rxhostdesc->length),
-+ acx2cpu(rxhostdesc->desc_phy_next),
-+ rxhostdesc->Status);
-+ rxhostdesc++;
-+ }
-+
-+ /* dump acx111 internal tx descriptor ring buffer */
-+ txdesc = adev->txdesc_start;
-+
-+ /* loop over complete transmit pool */
-+ if (txdesc) for (i = 0; i < TX_CNT; i++) {
-+ printk("\ndump internal txdesc %d:\n"
-+ "size 0x%X\n"
-+ "mem pos %p\n"
-+ "next 0x%X\n"
-+ "acx mem pointer (dynamic) 0x%X\n"
-+ "host mem pointer (dynamic) 0x%X\n"
-+ "length (dynamic) 0x%X\n"
-+ "CTL (dynamic) 0x%X\n"
-+ "CTL2 (dynamic) 0x%X\n"
-+ "Status (dynamic) 0x%X\n"
-+ "Rate (dynamic) 0x%X\n",
-+ i,
-+ (int) sizeof(struct txdesc),
-+ txdesc,
-+ acx2cpu(txdesc->pNextDesc),
-+ acx2cpu(txdesc->AcxMemPtr),
-+ acx2cpu(txdesc->HostMemPtr),
-+ le16_to_cpu(txdesc->total_length),
-+ txdesc->Ctl_8,
-+ txdesc->Ctl2_8, txdesc->error,
-+ txdesc->u.r1.rate);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+
-+ /* dump host tx descriptor ring buffer */
-+
-+ txhostdesc = adev->txhostdesc_start;
-+
-+ /* loop over complete host send pool */
-+ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) {
-+ printk("\ndump host txdesc %d:\n"
-+ "mem pos %p\n"
-+ "buffer mem pos 0x%X\n"
-+ "buffer mem offset 0x%X\n"
-+ "CTL 0x%X\n"
-+ "Length 0x%X\n"
-+ "next 0x%X\n"
-+ "Status 0x%X\n",
-+ i,
-+ txhostdesc,
-+ acx2cpu(txhostdesc->data_phy),
-+ txhostdesc->data_offset,
-+ le16_to_cpu(txhostdesc->Ctl_16),
-+ le16_to_cpu(txhostdesc->length),
-+ acx2cpu(txhostdesc->desc_phy_next),
-+ le32_to_cpu(txhostdesc->Status));
-+ txhostdesc++;
-+ }
-+
-+ /* write_reg16(adev, 0xb4, 0x4); */
-+
-+ acx_unlock(adev, flags);
-+end_ok:
-+
-+ acx_sem_unlock(adev);
-+#endif /* ACX_DEBUG */
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100pci_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ u16 gpio_old;
-+
-+ if (!IS_ACX100(adev)) {
-+ /* WARNING!!!
-+ * Removing this check *might* damage
-+ * hardware, since we're tweaking GPIOs here after all!!!
-+ * You've been warned...
-+ * WARNING!!! */
-+ printk("acx: sorry, setting bias level for non-acx100 "
-+ "is not supported yet\n");
-+ return OK;
-+ }
-+
-+ if (*extra > 7) {
-+ printk("acx: invalid bias parameter, range is 0-7\n");
-+ return -EINVAL;
-+ }
-+
-+ acx_sem_lock(adev);
-+
-+ /* Need to lock accesses to [IO_ACX_GPIO_OUT]:
-+ * IRQ handler uses it to update LED */
-+ acx_lock(adev, flags);
-+ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT);
-+ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8));
-+ acx_unlock(adev, flags);
-+
-+ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old);
-+ printk("%s: PHY power amplifier bias: old:%d, new:%d\n",
-+ ndev->name,
-+ (gpio_old & 0x0700) >> 8, (unsigned char)*extra);
-+
-+ acx_sem_unlock(adev);
-+
-+ return OK;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_l_alloc_tx
-+** Actually returns a txdesc_t* ptr
-+**
-+** FIXME: in case of fragments, should allocate multiple descrs
-+** after figuring out how many we need and whether we still have
-+** sufficiently many.
-+*/
-+tx_t*
-+acxpci_l_alloc_tx(acx_device_t *adev)
-+{
-+ struct txdesc *txdesc;
-+ unsigned head;
-+ u8 ctl8;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(!adev->tx_free)) {
-+ printk("acx: BUG: no free txdesc left\n");
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ head = adev->tx_head;
-+ txdesc = get_txdesc(adev, head);
-+ ctl8 = txdesc->Ctl_8;
-+
-+ /* 2005-10-11: there were several bug reports on this happening
-+ ** but now cause seems to be understood & fixed */
-+ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_ACXDONE_HOSTOWN))) {
-+ /* whoops, descr at current index is not free, so probably
-+ * ring buffer already full */
-+ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find "
-+ "free txdesc\n", head, ctl8);
-+ txdesc = NULL;
-+ goto end;
-+ }
-+
-+ /* Needed in case txdesc won't be eventually submitted for tx */
-+ txdesc->Ctl_8 = DESC_CTL_ACXDONE_HOSTOWN;
-+
-+ adev->tx_free--;
-+ log(L_BUFT, "tx: got desc %u, %u remain\n",
-+ head, adev->tx_free);
-+ /* Keep a few free descs between head and tail of tx ring.
-+ ** It is not absolutely needed, just feels safer */
-+ if (adev->tx_free < TX_STOP_QUEUE) {
-+ log(L_BUF, "stop queue (%u tx desc left)\n",
-+ adev->tx_free);
-+ acx_stop_queue(adev->ndev, NULL);
-+ }
-+
-+ /* returning current descriptor, so advance to next free one */
-+ adev->tx_head = (head + 1) % TX_CNT;
-+end:
-+ FN_EXIT0;
-+
-+ return (tx_t*)txdesc;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void*
-+acxpci_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
-+{
-+ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_l_tx_data
-+**
-+** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
-+** Can be called from acx_i_start_xmit (data frames from net core).
-+**
-+** FIXME: in case of fragments, should loop over the number of
-+** pre-allocated tx descrs, properly setting up transfer data and
-+** CTL_xxx flags according to fragment number.
-+*/
-+void
-+acxpci_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len)
-+{
-+ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
-+ txhostdesc_t *hostdesc1, *hostdesc2;
-+ client_t *clt;
-+ u16 rate_cur;
-+ u8 Ctl_8, Ctl2_8;
-+
-+ FN_ENTER;
-+
-+ /* fw doesn't tx such packets anyhow */
-+ if (unlikely(len < WLAN_HDR_A3_LEN))
-+ goto end;
-+
-+ hostdesc1 = get_txhostdesc(adev, txdesc);
-+ /* modify flag status in separate variable to be able to write it back
-+ * in one big swoop later (also in order to have less device memory
-+ * accesses) */
-+ Ctl_8 = txdesc->Ctl_8;
-+ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */
-+
-+ hostdesc2 = hostdesc1 + 1;
-+
-+ /* DON'T simply set Ctl field to 0 here globally,
-+ * it needs to maintain a consistent flag status (those are state flags!!),
-+ * otherwise it may lead to severe disruption. Only set or reset particular
-+ * flags at the exact moment this is needed... */
-+
-+ /* let chip do RTS/CTS handshaking before sending
-+ * in case packet size exceeds threshold */
-+ if (len > adev->rts_threshold)
-+ SET_BIT(Ctl2_8, DESC_CTL2_RTS);
-+ else
-+ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS);
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1);
-+ break;
-+ case ACX_MODE_2_STA:
-+ clt = adev->ap_client;
-+ break;
-+#if 0
-+/* testing was done on acx111: */
-+ case ACX_MODE_MONITOR:
-+ SET_BIT(Ctl2_8, 0
-+/* sends CTS to self before packet */
-+ + DESC_CTL2_SEQ /* don't increase sequence field */
-+/* not working (looks like good fcs is still added) */
-+ + DESC_CTL2_FCS /* don't add the FCS */
-+/* not tested */
-+ + DESC_CTL2_MORE_FRAG
-+/* not tested */
-+ + DESC_CTL2_RETRY /* don't increase retry field */
-+/* not tested */
-+ + DESC_CTL2_POWER /* don't increase power mgmt. field */
-+/* no effect */
-+ + DESC_CTL2_WEP /* encrypt this frame */
-+/* not tested */
-+ + DESC_CTL2_DUR /* don't increase duration field */
-+ );
-+ /* fallthrough */
-+#endif
-+ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
-+ clt = NULL;
-+ break;
-+ }
-+
-+ rate_cur = clt ? clt->rate_cur : adev->rate_bcast;
-+ if (unlikely(!rate_cur)) {
-+ printk("acx: driver bug! bad ratemask\n");
-+ goto end;
-+ }
-+
-+ /* used in tx cleanup routine for auto rate and accounting: */
-+ put_txcr(adev, txdesc, clt, rate_cur);
-+
-+ txdesc->total_length = cpu_to_le16(len);
-+ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN);
-+ if (IS_ACX111(adev)) {
-+ /* note that if !txdesc->do_auto, txrate->cur
-+ ** has only one nonzero bit */
-+ txdesc->u.r2.rate111 = cpu_to_le16(
-+ rate_cur
-+ /* WARNING: I was never able to make it work with prism54 AP.
-+ ** It was falling down to 1Mbit where shortpre is not applicable,
-+ ** and not working at all at "5,11 basic rates only" setting.
-+ ** I even didn't see tx packets in radio packet capture.
-+ ** Disabled for now --vda */
-+ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */
-+ );
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ /* should add this to rate111 above as necessary */
-+ | (clt->pbcc511 ? RATE111_PBCC511 : 0)
-+#endif
-+ hostdesc1->length = cpu_to_le16(len);
-+ } else { /* ACX100 */
-+ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100;
-+ txdesc->u.r1.rate = rate_100;
-+#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
-+ if (clt->pbcc511) {
-+ if (n == RATE100_5 || n == RATE100_11)
-+ n |= RATE100_PBCC511;
-+ }
-+
-+ if (clt->shortpre && (clt->cur != RATE111_1))
-+ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */
-+#endif
-+ /* set autodma and reclaim and 1st mpdu */
-+ SET_BIT(Ctl_8, DESC_CTL_AUTODMA | DESC_CTL_RECLAIM | DESC_CTL_FIRSTFRAG);
-+#if ACX_FRAGMENTATION
-+ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */
-+#endif
-+ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN);
-+ }
-+ /* don't need to clean ack/rts statistics here, already
-+ * done on descr cleanup */
-+
-+ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors
-+ * are now owned by the acx100; do this as LAST operation */
-+ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN);
-+ /* flush writes before we release hostdesc to the adapter here */
-+ wmb();
-+ CLEAR_BIT(hostdesc1->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
-+ CLEAR_BIT(hostdesc2->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
-+
-+ /* write back modified flags */
-+ txdesc->Ctl2_8 = Ctl2_8;
-+ txdesc->Ctl_8 = Ctl_8;
-+ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */
-+
-+ /* flush writes before we tell the adapter that it's its turn now */
-+ mmiowb();
-+ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
-+ write_flush(adev);
-+
-+ /* log the packet content AFTER sending it,
-+ * in order to not delay sending any further than absolutely needed
-+ * Do separate logs for acx100/111 to have human-readable rates */
-+ if (unlikely(acx_debug & (L_XFER|L_DATA))) {
-+ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc;
-+ if (IS_ACX111(adev))
-+ printk("tx: pkt (%s): len %d "
-+ "rate %04X%s status %u\n",
-+ acx_get_packet_type_string(le16_to_cpu(fc)), len,
-+ le16_to_cpu(txdesc->u.r2.rate111),
-+ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "",
-+ adev->status);
-+ else
-+ printk("tx: pkt (%s): len %d rate %03u%s status %u\n",
-+ acx_get_packet_type_string(fc), len,
-+ txdesc->u.r1.rate,
-+ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "",
-+ adev->status);
-+
-+ if (acx_debug & L_DATA) {
-+ printk("tx: 802.11 [%d]: ", len);
-+ acx_dump_bytes(hostdesc1->data, len);
-+ }
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_l_clean_txdesc
-+**
-+** This function resets the txdescs' status when the ACX100
-+** signals the TX done IRQ (txdescs have been processed), starting with
-+** the pool index of the descriptor which we would use next,
-+** in order to make sure that we can be as fast as possible
-+** in filling new txdescs.
-+** Everytime we get called we know where the next packet to be cleaned is.
-+*/
-+
-+#if !ACX_DEBUG
-+static inline void log_txbuffer(const acx_device_t *adev) {}
-+#else
-+static void
-+log_txbuffer(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+
-+ /* no FN_ENTER here, we don't want that */
-+ /* no locks here, since it's entirely non-critical code */
-+ txdesc = adev->txdesc_start;
-+ if (unlikely(!txdesc)) return;
-+ printk("tx: desc->Ctl8's:");
-+ for (i = 0; i < TX_CNT; i++) {
-+ printk(" %02X", txdesc->Ctl_8);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ printk("\n");
-+}
-+#endif
-+
-+
-+static void
-+handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger)
-+{
-+ const char *err = "unknown error";
-+
-+ /* hmm, should we handle this as a mask
-+ * of *several* bits?
-+ * For now I think only caring about
-+ * individual bits is ok... */
-+ switch (error) {
-+ case 0x01:
-+ err = "no Tx due to error in other fragment";
-+ adev->wstats.discard.fragment++;
-+ break;
-+ case 0x02:
-+ err = "Tx aborted";
-+ adev->stats.tx_aborted_errors++;
-+ break;
-+ case 0x04:
-+ err = "Tx desc wrong parameters";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x08:
-+ err = "WEP key not found";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x10:
-+ err = "MSDU lifetime timeout? - try changing "
-+ "'iwconfig retry lifetime XXX'";
-+ adev->wstats.discard.misc++;
-+ break;
-+ case 0x20:
-+ err = "excessive Tx retries due to either distance "
-+ "too high or unable to Tx or Tx frame error - "
-+ "try changing 'iwconfig txpower XXX' or "
-+ "'sens'itivity or 'retry'";
-+ adev->wstats.discard.retries++;
-+ /* Tx error 0x20 also seems to occur on
-+ * overheating, so I'm not sure whether we
-+ * actually want to do aggressive radio recalibration,
-+ * since people maybe won't notice then that their hardware
-+ * is slowly getting cooked...
-+ * Or is it still a safe long distance from utter
-+ * radio non-functionality despite many radio recalibs
-+ * to final destructive overheating of the hardware?
-+ * In this case we really should do recalib here...
-+ * I guess the only way to find out is to do a
-+ * potentially fatal self-experiment :-\
-+ * Or maybe only recalib in case we're using Tx
-+ * rate auto (on errors switching to lower speed
-+ * --> less heat?) or 802.11 power save mode?
-+ *
-+ * ok, just do it. */
-+ if (++adev->retry_errors_msg_ratelimit % 4 == 0) {
-+ if (adev->retry_errors_msg_ratelimit <= 20) {
-+ printk("%s: several excessive Tx "
-+ "retry errors occurred, attempting "
-+ "to recalibrate radio. Radio "
-+ "drift might be caused by increasing "
-+ "card temperature, please check the card "
-+ "before it's too late!\n",
-+ adev->ndev->name);
-+ if (adev->retry_errors_msg_ratelimit == 20)
-+ printk("disabling above message\n");
-+ }
-+
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
-+ }
-+ break;
-+ case 0x40:
-+ err = "Tx buffer overflow";
-+ adev->stats.tx_fifo_errors++;
-+ break;
-+ case 0x80:
-+ /* possibly ACPI C-state powersaving related!!!
-+ * (DMA timeout due to excessively high wakeup
-+ * latency after C-state activation!?)
-+ * Disable C-State powersaving and try again,
-+ * then PLEASE REPORT, I'm VERY interested in
-+ * whether my theory is correct that this is
-+ * actually the problem here.
-+ * In that case, use new Linux idle wakeup latency
-+ * requirements kernel API to prevent this issue. */
-+ err = "DMA error";
-+ adev->wstats.discard.misc++;
-+ break;
-+ }
-+ adev->stats.tx_errors++;
-+ if (adev->stats.tx_errors <= 20)
-+ printk("%s: tx error 0x%02X, buf %02u! (%s)\n",
-+ adev->ndev->name, error, finger, err);
-+ else
-+ printk("%s: tx error 0x%02X, buf %02u!\n",
-+ adev->ndev->name, error, finger);
-+}
-+
-+
-+unsigned int
-+acxpci_l_clean_txdesc(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ unsigned finger;
-+ int num_cleaned;
-+ u16 r111;
-+ u8 error, ack_failures, rts_failures, rts_ok, r100;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(acx_debug & L_DEBUG))
-+ log_txbuffer(adev);
-+
-+ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail);
-+
-+ /* We know first descr which is not free yet. We advance it as far
-+ ** as we see correct bits set in following descs (if next desc
-+ ** is NOT free, we shouldn't advance at all). We know that in
-+ ** front of tx_tail may be "holes" with isolated free descs.
-+ ** We will catch up when all intermediate descs will be freed also */
-+
-+ finger = adev->tx_tail;
-+ num_cleaned = 0;
-+ while (likely(finger != adev->tx_head)) {
-+ txdesc = get_txdesc(adev, finger);
-+
-+ /* If we allocated txdesc on tx path but then decided
-+ ** to NOT use it, then it will be left as a free "bubble"
-+ ** in the "allocated for tx" part of the ring.
-+ ** We may meet it on the next ring pass here. */
-+
-+ /* stop if not marked as "tx finished" and "host owned" */
-+ if ((txdesc->Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN)
-+ != DESC_CTL_ACXDONE_HOSTOWN) {
-+ if (unlikely(!num_cleaned)) { /* maybe remove completely */
-+ log(L_BUFT, "clean_txdesc: tail isn't free. "
-+ "tail:%d head:%d\n",
-+ adev->tx_tail, adev->tx_head);
-+ }
-+ break;
-+ }
-+
-+ /* remember desc values... */
-+ error = txdesc->error;
-+ ack_failures = txdesc->ack_failures;
-+ rts_failures = txdesc->rts_failures;
-+ rts_ok = txdesc->rts_ok;
-+ r100 = txdesc->u.r1.rate;
-+ r111 = le16_to_cpu(txdesc->u.r2.rate111);
-+
-+ /* need to check for certain error conditions before we
-+ * clean the descriptor: we still need valid descr data here */
-+ if (unlikely(0x30 & error)) {
-+ /* only send IWEVTXDROP in case of retry or lifetime exceeded;
-+ * all other errors mean we screwed up locally */
-+ union iwreq_data wrqu;
-+ wlan_hdr_t *hdr;
-+ txhostdesc_t *hostdesc;
-+
-+ hostdesc = get_txhostdesc(adev, txdesc);
-+ hdr = (wlan_hdr_t *)hostdesc->data;
-+ MAC_COPY(wrqu.addr.sa_data, hdr->a1);
-+ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL);
-+ }
-+
-+ /* ...and free the desc */
-+ txdesc->error = 0;
-+ txdesc->ack_failures = 0;
-+ txdesc->rts_failures = 0;
-+ txdesc->rts_ok = 0;
-+ /* signal host owning it LAST, since ACX already knows that this
-+ ** descriptor is finished since it set Ctl_8 accordingly. */
-+ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
-+
-+ adev->tx_free++;
-+ num_cleaned++;
-+
-+ if ((adev->tx_free >= TX_START_QUEUE)
-+ && (adev->status == ACX_STATUS_4_ASSOCIATED)
-+ && (acx_queue_stopped(adev->ndev))
-+ ) {
-+ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n",
-+ adev->tx_free);
-+ acx_wake_queue(adev->ndev, NULL);
-+ }
-+
-+ /* do error checking, rate handling and logging
-+ * AFTER having done the work, it's faster */
-+
-+ /* do rate handling */
-+ if (adev->rate_auto) {
-+ struct client *clt = get_txc(adev, txdesc);
-+ if (clt) {
-+ u16 cur = get_txr(adev, txdesc);
-+ if (clt->rate_cur == cur) {
-+ acx_l_handle_txrate_auto(adev, clt,
-+ cur, /* intended rate */
-+ r100, r111, /* actually used rate */
-+ (error & 0x30), /* was there an error? */
-+ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free);
-+ }
-+ }
-+ }
-+
-+ if (unlikely(error))
-+ handle_tx_error(adev, error, finger);
-+
-+ if (IS_ACX111(adev))
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n",
-+ finger, ack_failures, rts_failures, rts_ok, r111);
-+ else
-+ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n",
-+ finger, ack_failures, rts_failures, rts_ok, r100);
-+
-+ /* update pointer for descr to be cleaned next */
-+ finger = (finger + 1) % TX_CNT;
-+ }
-+
-+ /* remember last position */
-+ adev->tx_tail = finger;
-+/* end: */
-+ FN_EXIT1(num_cleaned);
-+ return num_cleaned;
-+}
-+
-+/* clean *all* Tx descriptors, and regardless of their previous state.
-+ * Used for brute-force reset handling. */
-+void
-+acxpci_l_clean_txdesc_emergency(acx_device_t *adev)
-+{
-+ txdesc_t *txdesc;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc = get_txdesc(adev, i);
-+
-+ /* free it */
-+ txdesc->ack_failures = 0;
-+ txdesc->rts_failures = 0;
-+ txdesc->rts_ok = 0;
-+ txdesc->error = 0;
-+ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
-+ }
-+
-+ adev->tx_free = TX_CNT;
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_s_create_tx_host_desc_queue
-+*/
-+
-+static void*
-+allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg)
-+{
-+ void *ptr;
-+
-+ ptr = dma_alloc_coherent(adev->pdev ? &adev->pdev->dev : NULL,
-+ size, phy, GFP_KERNEL);
-+
-+ if (ptr) {
-+ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n",
-+ msg, (int)size, ptr, (unsigned long long)*phy);
-+ memset(ptr, 0, size);
-+ return ptr;
-+ }
-+ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n",
-+ msg, (int)size);
-+ return NULL;
-+}
-+
-+
-+static int
-+acxpci_s_create_tx_host_desc_queue(acx_device_t *adev)
-+{
-+ txhostdesc_t *hostdesc;
-+ u8 *txbuf;
-+ dma_addr_t hostdesc_phy;
-+ dma_addr_t txbuf_phy;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate TX buffer */
-+ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS;
-+ adev->txbuf_start = allocate(adev, adev->txbuf_area_size,
-+ &adev->txbuf_startphy, "txbuf_start");
-+ if (!adev->txbuf_start)
-+ goto fail;
-+
-+ /* allocate the TX host descriptor queue pool */
-+ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc);
-+ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size,
-+ &adev->txhostdesc_startphy, "txhostdesc_start");
-+ if (!adev->txhostdesc_start)
-+ goto fail;
-+ /* check for proper alignment of TX host descriptor pool */
-+ if ((long) adev->txhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ hostdesc = adev->txhostdesc_start;
-+ hostdesc_phy = adev->txhostdesc_startphy;
-+ txbuf = adev->txbuf_start;
-+ txbuf_phy = adev->txbuf_startphy;
-+
-+#if 0
-+/* Each tx buffer is accessed by hardware via
-+** txdesc -> txhostdesc(s) -> txbuffer(s).
-+** We use only one txhostdesc per txdesc, but it looks like
-+** acx111 is buggy: it accesses second txhostdesc
-+** (via hostdesc.desc_phy_next field) even if
-+** txdesc->length == hostdesc->length and thus
-+** entire packet was placed into first txhostdesc.
-+** Due to this bug acx111 hangs unless second txhostdesc
-+** has le16_to_cpu(hostdesc.length) = 3 (or larger)
-+** Storing NULL into hostdesc.desc_phy_next
-+** doesn't seem to help.
-+**
-+** Update: although it worked on Xterasys XN-2522g
-+** with len=3 trick, WG311v2 is even more bogus, doesn't work.
-+** Keeping this code (#ifdef'ed out) for documentational purposes.
-+*/
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ hostdesc_phy += sizeof(*hostdesc);
-+ if (!(i & 1)) {
-+ hostdesc->data_phy = cpu2acx(txbuf_phy);
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
-+ /* hostdesc->length = ... */
-+ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
-+ hostdesc->pNext = ptr2acx(NULL);
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ hostdesc->data = txbuf;
-+
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS;
-+ } else {
-+ /* hostdesc->data_phy = ... */
-+ /* hostdesc->data_offset = ... */
-+ /* hostdesc->reserved = ... */
-+ /* hostdesc->Ctl_16 = ... */
-+ hostdesc->length = cpu_to_le16(3); /* bug workaround */
-+ /* hostdesc->desc_phy_next = ... */
-+ /* hostdesc->pNext = ... */
-+ /* hostdesc->Status = ... */
-+ /* below: non-hardware fields */
-+ /* hostdesc->data = ... */
-+ }
-+ hostdesc++;
-+ }
-+#endif
-+/* We initialize two hostdescs so that they point to adjacent
-+** memory areas. Thus txbuf is really just a contiguous memory area */
-+ for (i = 0; i < TX_CNT*2; i++) {
-+ hostdesc_phy += sizeof(*hostdesc);
-+
-+ hostdesc->data_phy = cpu2acx(txbuf_phy);
-+ /* done by memset(0): hostdesc->data_offset = 0; */
-+ /* hostdesc->reserved = ... */
-+ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
-+ /* hostdesc->length = ... */
-+ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
-+ /* done by memset(0): hostdesc->pNext = ptr2acx(NULL); */
-+ /* hostdesc->Status = ... */
-+ /* ->data is a non-hardware field: */
-+ hostdesc->data = txbuf;
-+
-+ if (!(i & 1)) {
-+ txbuf += WLAN_HDR_A3_LEN;
-+ txbuf_phy += WLAN_HDR_A3_LEN;
-+ } else {
-+ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
-+ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
-+ }
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+ hostdesc->desc_phy_next = cpu2acx(adev->txhostdesc_startphy);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_tx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_s_create_rx_host_desc_queue
-+*/
-+/* the whole size of a data buffer (header plus data body)
-+ * plus 32 bytes safety offset at the end */
-+#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32)
-+
-+static int
-+acxpci_s_create_rx_host_desc_queue(acx_device_t *adev)
-+{
-+ rxhostdesc_t *hostdesc;
-+ rxbuffer_t *rxbuf;
-+ dma_addr_t hostdesc_phy;
-+ dma_addr_t rxbuf_phy;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* allocate the RX host descriptor queue pool */
-+ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc);
-+ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size,
-+ &adev->rxhostdesc_startphy, "rxhostdesc_start");
-+ if (!adev->rxhostdesc_start)
-+ goto fail;
-+ /* check for proper alignment of RX host descriptor pool */
-+ if ((long) adev->rxhostdesc_start & 3) {
-+ printk("acx: driver bug: dma alloc returns unaligned address\n");
-+ goto fail;
-+ }
-+
-+ /* allocate Rx buffer pool which will be used by the acx
-+ * to store the whole content of the received frames in it */
-+ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE;
-+ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size,
-+ &adev->rxbuf_startphy, "rxbuf_start");
-+ if (!adev->rxbuf_start)
-+ goto fail;
-+
-+ rxbuf = adev->rxbuf_start;
-+ rxbuf_phy = adev->rxbuf_startphy;
-+ hostdesc = adev->rxhostdesc_start;
-+ hostdesc_phy = adev->rxhostdesc_startphy;
-+
-+ /* don't make any popular C programming pointer arithmetic mistakes
-+ * here, otherwise I'll kill you...
-+ * (and don't dare asking me why I'm warning you about that...) */
-+ for (i = 0; i < RX_CNT; i++) {
-+ hostdesc->data = rxbuf;
-+ hostdesc->data_phy = cpu2acx(rxbuf_phy);
-+ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE);
-+ CLEAR_BIT(hostdesc->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
-+ rxbuf++;
-+ rxbuf_phy += sizeof(*rxbuf);
-+ hostdesc_phy += sizeof(*hostdesc);
-+ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
-+ hostdesc++;
-+ }
-+ hostdesc--;
-+ hostdesc->desc_phy_next = cpu2acx(adev->rxhostdesc_startphy);
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+ printk("acx: create_rx_host_desc_queue FAILED\n");
-+ /* dealloc will be done by free function on error case */
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_s_create_hostdesc_queues
-+*/
-+int
-+acxpci_s_create_hostdesc_queues(acx_device_t *adev)
-+{
-+ int result;
-+ result = acxpci_s_create_tx_host_desc_queue(adev);
-+ if (OK != result) return result;
-+ result = acxpci_s_create_rx_host_desc_queue(adev);
-+ return result;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_create_tx_desc_queue
-+*/
-+static void
-+acxpci_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start)
-+{
-+ txdesc_t *txdesc;
-+ txhostdesc_t *hostdesc;
-+ dma_addr_t hostmemptr;
-+ u32 mem_offs;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ if (IS_ACX100(adev))
-+ adev->txdesc_size = sizeof(*txdesc);
-+ else
-+ /* the acx111 txdesc is 4 bytes larger */
-+ adev->txdesc_size = sizeof(*txdesc) + 4;
-+
-+ adev->txdesc_start = (txdesc_t *) (adev->iobase2 + tx_queue_start);
-+
-+ log(L_DEBUG, "adev->iobase2=%p\n"
-+ "tx_queue_start=%08X\n"
-+ "adev->txdesc_start=%p\n",
-+ adev->iobase2,
-+ tx_queue_start,
-+ adev->txdesc_start);
-+
-+ adev->tx_free = TX_CNT;
-+ /* done by memset: adev->tx_head = 0; */
-+ /* done by memset: adev->tx_tail = 0; */
-+ txdesc = adev->txdesc_start;
-+ mem_offs = tx_queue_start;
-+ hostmemptr = adev->txhostdesc_startphy;
-+ hostdesc = adev->txhostdesc_start;
-+
-+ if (IS_ACX111(adev)) {
-+ /* ACX111 has a preinitialized Tx buffer! */
-+ /* loop over whole send pool */
-+ /* FIXME: do we have to do the hostmemptr stuff here?? */
-+ for (i = 0; i < TX_CNT; i++) {
-+ txdesc->HostMemPtr = ptr2acx(hostmemptr);
-+ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
-+ /* reserve two (hdr desc and payload desc) */
-+ hostdesc += 2;
-+ hostmemptr += 2 * sizeof(*hostdesc);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ } else {
-+ /* ACX100 Tx buffer needs to be initialized by us */
-+ /* clear whole send pool. sizeof is safe here (we are acx100) */
-+ memset(adev->txdesc_start, 0, TX_CNT * sizeof(*txdesc));
-+
-+ /* loop over whole send pool */
-+ for (i = 0; i < TX_CNT; i++) {
-+ log(L_DEBUG, "configure card tx descriptor: 0x%p, "
-+ "size: 0x%X\n", txdesc, adev->txdesc_size);
-+
-+ /* pointer to hostdesc memory */
-+ txdesc->HostMemPtr = ptr2acx(hostmemptr);
-+ /* initialise ctl */
-+ txdesc->Ctl_8 = ( DESC_CTL_HOSTOWN | DESC_CTL_RECLAIM
-+ | DESC_CTL_AUTODMA | DESC_CTL_FIRSTFRAG);
-+ /* done by memset(0): txdesc->Ctl2_8 = 0; */
-+ /* point to next txdesc */
-+ txdesc->pNextDesc = cpu2acx(mem_offs + adev->txdesc_size);
-+ /* reserve two (hdr desc and payload desc) */
-+ hostdesc += 2;
-+ hostmemptr += 2 * sizeof(*hostdesc);
-+ /* go to the next one */
-+ mem_offs += adev->txdesc_size;
-+ /* ++ is safe here (we are acx100) */
-+ txdesc++;
-+ }
-+ /* go back to the last one */
-+ txdesc--;
-+ /* and point to the first making it a ring buffer */
-+ txdesc->pNextDesc = cpu2acx(tx_queue_start);
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_create_rx_desc_queue
-+*/
-+static void
-+acxpci_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start)
-+{
-+ rxdesc_t *rxdesc;
-+ u32 mem_offs;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* done by memset: adev->rx_tail = 0; */
-+
-+ /* ACX111 doesn't need any further config: preconfigures itself.
-+ * Simply print ring buffer for debugging */
-+ if (IS_ACX111(adev)) {
-+ /* rxdesc_start already set here */
-+
-+ adev->rxdesc_start = (rxdesc_t *) ((u8 *)adev->iobase2 + rx_queue_start);
-+
-+ rxdesc = adev->rxdesc_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc);
-+ rxdesc = adev->rxdesc_start = (rxdesc_t *)
-+ (adev->iobase2 + acx2cpu(rxdesc->pNextDesc));
-+ }
-+ } else {
-+ /* we didn't pre-calculate rxdesc_start in case of ACX100 */
-+ /* rxdesc_start should be right AFTER Tx pool */
-+ adev->rxdesc_start = (rxdesc_t *)
-+ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t)));
-+ /* NB: sizeof(txdesc_t) above is valid because we know
-+ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere!
-+ ** acx111's txdesc is larger! */
-+
-+ memset(adev->rxdesc_start, 0, RX_CNT * sizeof(*rxdesc));
-+
-+ /* loop over whole receive pool */
-+ rxdesc = adev->rxdesc_start;
-+ mem_offs = rx_queue_start;
-+ for (i = 0; i < RX_CNT; i++) {
-+ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc);
-+ rxdesc->Ctl_8 = DESC_CTL_RECLAIM | DESC_CTL_AUTODMA;
-+ /* point to next rxdesc */
-+ rxdesc->pNextDesc = cpu2acx(mem_offs + sizeof(*rxdesc));
-+ /* go to the next one */
-+ mem_offs += sizeof(*rxdesc);
-+ rxdesc++;
-+ }
-+ /* go to the last one */
-+ rxdesc--;
-+
-+ /* and point to the first making it a ring buffer */
-+ rxdesc->pNextDesc = cpu2acx(rx_queue_start);
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxpci_create_desc_queues
-+*/
-+void
-+acxpci_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start)
-+{
-+ acxpci_create_tx_desc_queue(adev, tx_queue_start);
-+ acxpci_create_rx_desc_queue(adev, rx_queue_start);
-+}
-+
-+
-+/***************************************************************
-+** acxpci_s_proc_diag_output
-+*/
-+char*
-+acxpci_s_proc_diag_output(char *p, acx_device_t *adev)
-+{
-+ const char *rtl, *thd, *ttl;
-+ rxhostdesc_t *rxhostdesc;
-+ txdesc_t *txdesc;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ p += sprintf(p, "** Rx buf **\n");
-+ rxhostdesc = adev->rxhostdesc_start;
-+ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
-+ rtl = (i == adev->rx_tail) ? " [tail]" : "";
-+ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
-+ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)) )
-+ p += sprintf(p, "%02u FULL%s\n", i, rtl);
-+ else
-+ p += sprintf(p, "%02u empty%s\n", i, rtl);
-+ rxhostdesc++;
-+ }
-+ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free,
-+ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running");
-+ txdesc = adev->txdesc_start;
-+ if (txdesc) for (i = 0; i < TX_CNT; i++) {
-+ thd = (i == adev->tx_head) ? " [head]" : "";
-+ ttl = (i == adev->tx_tail) ? " [tail]" : "";
-+ if (txdesc->Ctl_8 & DESC_CTL_ACXDONE)
-+ p += sprintf(p, "%02u free (%02X)%s%s\n", i, txdesc->Ctl_8, thd, ttl);
-+ else
-+ p += sprintf(p, "%02u tx (%02X)%s%s\n", i, txdesc->Ctl_8, thd, ttl);
-+ txdesc = advance_txdesc(adev, txdesc, 1);
-+ }
-+ p += sprintf(p,
-+ "\n"
-+ "** PCI data **\n"
-+ "txbuf_start %p, txbuf_area_size %u, txbuf_startphy %08llx\n"
-+ "txdesc_size %u, txdesc_start %p\n"
-+ "txhostdesc_start %p, txhostdesc_area_size %u, txhostdesc_startphy %08llx\n"
-+ "rxdesc_start %p\n"
-+ "rxhostdesc_start %p, rxhostdesc_area_size %u, rxhostdesc_startphy %08llx\n"
-+ "rxbuf_start %p, rxbuf_area_size %u, rxbuf_startphy %08llx\n",
-+ adev->txbuf_start, adev->txbuf_area_size,
-+ (unsigned long long)adev->txbuf_startphy,
-+ adev->txdesc_size, adev->txdesc_start,
-+ adev->txhostdesc_start, adev->txhostdesc_area_size,
-+ (unsigned long long)adev->txhostdesc_startphy,
-+ adev->rxdesc_start,
-+ adev->rxhostdesc_start, adev->rxhostdesc_area_size,
-+ (unsigned long long)adev->rxhostdesc_startphy,
-+ adev->rxbuf_start, adev->rxbuf_area_size,
-+ (unsigned long long)adev->rxbuf_startphy);
-+
-+ FN_EXIT0;
-+ return p;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxpci_proc_eeprom_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ for (i = 0; i < 0x400; i++) {
-+ acxpci_read_eeprom_byte(adev, i, p++);
-+ }
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void
-+acxpci_set_interrupt_mask(acx_device_t *adev)
-+{
-+ if (IS_ACX111(adev)) {
-+ adev->irq_mask = (u16) ~(0
-+ /* | HOST_INT_RX_DATA */
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ | HOST_INT_RX_COMPLETE
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ | HOST_INT_IV_ICV_FAILURE
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ /* | HOST_INT_OVERFLOW */
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ | HOST_INT_FCS_THRESHOLD
-+ /* | HOST_INT_UNKNOWN */
-+ );
-+ /* Or else acx100 won't signal cmd completion, right? */
-+ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */
-+ } else {
-+ adev->irq_mask = (u16) ~(0
-+ /* | HOST_INT_RX_DATA */
-+ | HOST_INT_TX_COMPLETE
-+ /* | HOST_INT_TX_XFER */
-+ | HOST_INT_RX_COMPLETE
-+ /* | HOST_INT_DTIM */
-+ /* | HOST_INT_BEACON */
-+ /* | HOST_INT_TIMER */
-+ /* | HOST_INT_KEY_NOT_FOUND */
-+ /* | HOST_INT_IV_ICV_FAILURE */
-+ | HOST_INT_CMD_COMPLETE
-+ | HOST_INT_INFO
-+ /* | HOST_INT_OVERFLOW */
-+ /* | HOST_INT_PROCESS_ERROR */
-+ | HOST_INT_SCAN_COMPLETE
-+ /* | HOST_INT_FCS_THRESHOLD */
-+ /* | HOST_INT_UNKNOWN */
-+ );
-+ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */
-+ }
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx100pci_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ /* since it can be assumed that at least the Maxim radio has a
-+ * maximum power output of 20dBm and since it also can be
-+ * assumed that these values drive the DAC responsible for
-+ * setting the linear Tx level, I'd guess that these values
-+ * should be the corresponding linear values for a dBm value,
-+ * in other words: calculate the values from that formula:
-+ * Y [dBm] = 10 * log (X [mW])
-+ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm)
-+ * and you're done...
-+ * Hopefully that's ok, but you never know if we're actually
-+ * right... (especially since Windows XP doesn't seem to show
-+ * actual Tx dBm values :-P) */
-+
-+ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the
-+ * values are EXACTLY mW!!! Not sure about RFMD and others,
-+ * though... */
-+ static const u8 dbm2val_maxim[21] = {
-+ 63, 63, 63, 62,
-+ 61, 61, 60, 60,
-+ 59, 58, 57, 55,
-+ 53, 50, 47, 43,
-+ 38, 31, 23, 13,
-+ 0
-+ };
-+ static const u8 dbm2val_rfmd[21] = {
-+ 0, 0, 0, 1,
-+ 2, 2, 3, 3,
-+ 4, 5, 6, 8,
-+ 10, 13, 16, 20,
-+ 25, 32, 41, 50,
-+ 63
-+ };
-+ const u8 *table;
-+
-+ switch (adev->radio_type) {
-+ case RADIO_MAXIM_0D:
-+ table = &dbm2val_maxim[0];
-+ break;
-+ case RADIO_RFMD_11:
-+ case RADIO_RALINK_15:
-+ table = &dbm2val_rfmd[0];
-+ break;
-+ default:
-+ printk("%s: unknown/unsupported radio type, "
-+ "cannot modify tx power level yet!\n",
-+ adev->ndev->name);
-+ return NOT_OK;
-+ }
-+ printk("%s: changing radio power level to %u dBm (%u)\n",
-+ adev->ndev->name, level_dbm, table[level_dbm]);
-+ acxpci_s_write_phy_reg(adev, 0x11, table[level_dbm]);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** Data for init_module/cleanup_module
-+*/
-+static const struct pci_device_id
-+acxpci_id_tbl[] __devinitdata = {
-+ {
-+ .vendor = PCI_VENDOR_ID_TI,
-+ .device = PCI_DEVICE_ID_TI_TNETW1100A,
-+ .subvendor = PCI_ANY_ID,
-+ .subdevice = PCI_ANY_ID,
-+ .driver_data = CHIPTYPE_ACX100,
-+ },
-+ {
-+ .vendor = PCI_VENDOR_ID_TI,
-+ .device = PCI_DEVICE_ID_TI_TNETW1100B,
-+ .subvendor = PCI_ANY_ID,
-+ .subdevice = PCI_ANY_ID,
-+ .driver_data = CHIPTYPE_ACX100,
-+ },
-+ {
-+ .vendor = PCI_VENDOR_ID_TI,
-+ .device = PCI_DEVICE_ID_TI_TNETW1130,
-+ .subvendor = PCI_ANY_ID,
-+ .subdevice = PCI_ANY_ID,
-+ .driver_data = CHIPTYPE_ACX111,
-+ },
-+ {
-+ .vendor = 0,
-+ .device = 0,
-+ .subvendor = 0,
-+ .subdevice = 0,
-+ .driver_data = 0,
-+ }
-+};
-+
-+MODULE_DEVICE_TABLE(pci, acxpci_id_tbl);
-+
-+/* FIXME: checks should be removed once driver is included in the kernel */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11)
-+/* pci_name() got introduced at start of 2.6.x,
-+ * got mandatory (slot_name member removed) in 2.6.11-bk1 */
-+#define pci_name(x) x->slot_name
-+#endif
-+
-+static struct pci_driver
-+acxpci_drv_id = {
-+ .name = "acx_pci",
-+ .id_table = acxpci_id_tbl,
-+ .probe = acxpci_e_probe,
-+ .remove = __devexit_p(acxpci_e_remove),
-+#ifdef CONFIG_PM
-+ .suspend = acxpci_e_suspend,
-+ .resume = acxpci_e_resume
-+#endif /* CONFIG_PM */
-+};
-+
-+
-+/***********************************************************************
-+** acxpci_e_init_module
-+**
-+** Module initialization routine, called once at module load time
-+*/
-+int __init
-+acxpci_e_init_module(void)
-+{
-+ int res;
-+
-+ FN_ENTER;
-+
-+#if (ACX_IO_WIDTH==32)
-+ printk("acx: compiled to use 32bit I/O access. "
-+ "I/O timing issues might occur, such as "
-+ "non-working firmware upload. Report them\n");
-+#else
-+ printk("acx: compiled to use 16bit I/O access only "
-+ "(compatibility mode)\n");
-+#endif
-+
-+#ifdef __LITTLE_ENDIAN
-+#define ENDIANNESS_STRING "running on a little-endian CPU\n"
-+#else
-+#define ENDIANNESS_STRING "running on a BIG-ENDIAN CPU\n"
-+#endif
-+ log(L_INIT,
-+ ENDIANNESS_STRING
-+ "PCI module " ACX_RELEASE " initialized, "
-+ "waiting for cards to probe...\n"
-+ );
-+
-+ res = pci_register_driver(&acxpci_drv_id);
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acxpci_e_cleanup_module
-+**
-+** Called at module unload time. This is our last chance to
-+** clean up after ourselves.
-+*/
-+void __exit
-+acxpci_e_cleanup_module(void)
-+{
-+ FN_ENTER;
-+
-+ pci_unregister_driver(&acxpci_drv_id);
-+
-+ FN_EXIT0;
-+}
-Index: linux-2.6.22/drivers/net/wireless/acx/rx3000_acx.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/rx3000_acx.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,110 @@
-+/*
-+ * WLAN (TI TNETW1100B) support in the HP iPAQ RX3000
-+ *
-+ * Copyright (c) 2006 SDG Systems, LLC
-+ * Copyright (c) 2006 Roman Moravcik
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * Based on hx4700_acx.c
-+ */
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+#include <linux/dpm.h>
-+#include <linux/leds.h>
-+
-+#include <asm/hardware.h>
-+
-+#include <asm/arch/regs-gpio.h>
-+#include <linux/mfd/asic3_base.h>
-+#include <asm/arch/rx3000.h>
-+#include <asm/arch/rx3000-asic3.h>
-+#include <asm/io.h>
-+
-+#include "acx_hw.h"
-+
-+extern struct platform_device s3c_device_asic3;
-+
-+static int rx3000_wlan_start(void)
-+{
-+ DPM_DEBUG("rx3000_acx: Turning on\n");
-+ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, ASIC3_GPB3);
-+ mdelay(20);
-+ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC13, ASIC3_GPC13);
-+ mdelay(20);
-+ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC11, ASIC3_GPC11);
-+ mdelay(100);
-+ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, ASIC3_GPB3);
-+ mdelay(20);
-+ s3c2410_gpio_cfgpin(S3C2410_GPA15, S3C2410_GPA15_nGCS4);
-+ mdelay(100);
-+ s3c2410_gpio_setpin(S3C2410_GPA11, 0);
-+ mdelay(50);
-+ s3c2410_gpio_setpin(S3C2410_GPA11, 1);
-+ led_trigger_event_shared(rx3000_radio_trig, LED_FULL);
-+ return 0;
-+}
-+
-+static int rx3000_wlan_stop(void)
-+{
-+ DPM_DEBUG("rx3000_acx: Turning off\n");
-+ s3c2410_gpio_setpin(S3C2410_GPA15, 1);
-+ s3c2410_gpio_cfgpin(S3C2410_GPA15, S3C2410_GPA15_OUT);
-+ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, 0);
-+ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC13, 0);
-+ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC11, 0);
-+ led_trigger_event_shared(rx3000_radio_trig, LED_OFF);
-+ return 0;
-+}
-+
-+static struct resource acx_resources[] = {
-+ [0] = {
-+ .start = RX3000_PA_WLAN,
-+ .end = RX3000_PA_WLAN + 0x20,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+ .start = IRQ_EINT16,
-+ .end = IRQ_EINT16,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+static struct acx_hardware_data acx_data = {
-+ .start_hw = rx3000_wlan_start,
-+ .stop_hw = rx3000_wlan_stop,
-+};
-+
-+static struct platform_device acx_device = {
-+ .name = "acx-mem",
-+ .dev = {
-+ .platform_data = &acx_data,
-+ },
-+ .num_resources = ARRAY_SIZE(acx_resources),
-+ .resource = acx_resources,
-+};
-+
-+static int __init rx3000_wlan_init(void)
-+{
-+ printk("rx3000_wlan_init: acx-mem platform_device_register\n");
-+ return platform_device_register(&acx_device);
-+}
-+
-+
-+static void __exit rx3000_wlan_exit(void)
-+{
-+ platform_device_unregister(&acx_device);
-+}
-+
-+module_init(rx3000_wlan_init);
-+module_exit(rx3000_wlan_exit);
-+
-+MODULE_AUTHOR("Todd Blumer <todd@sdgsystems.com>, Roman Moravcik <roman.moravcik@gmail.com>");
-+MODULE_DESCRIPTION("WLAN driver for HP iPAQ RX3000");
-+MODULE_LICENSE("GPL");
-+
-Index: linux-2.6.22/drivers/net/wireless/acx/setrate.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/setrate.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,213 @@
-+/* TODO: stop #including, move into wireless.c
-+ * until then, keep in sync copies in prism54/ and acx/ dirs
-+ * code+data size: less than 1k */
-+
-+enum {
-+ DOT11_RATE_1,
-+ DOT11_RATE_2,
-+ DOT11_RATE_5,
-+ DOT11_RATE_11,
-+ DOT11_RATE_22,
-+ DOT11_RATE_33,
-+ DOT11_RATE_6,
-+ DOT11_RATE_9,
-+ DOT11_RATE_12,
-+ DOT11_RATE_18,
-+ DOT11_RATE_24,
-+ DOT11_RATE_36,
-+ DOT11_RATE_48,
-+ DOT11_RATE_54
-+};
-+enum {
-+ DOT11_MOD_DBPSK,
-+ DOT11_MOD_DQPSK,
-+ DOT11_MOD_CCK,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_CCKOFDM,
-+ DOT11_MOD_PBCC
-+};
-+static const u8 ratelist[] = { 1,2,5,11,22,33,6,9,12,18,24,36,48,54 };
-+static const u8 dot11ratebyte[] = { 1*2,2*2,11,11*2,22*2,33*2,6*2,9*2,12*2,18*2,24*2,36*2,48*2,54*2 };
-+static const u8 default_modulation[] = {
-+ DOT11_MOD_DBPSK,
-+ DOT11_MOD_DQPSK,
-+ DOT11_MOD_CCK,
-+ DOT11_MOD_CCK,
-+ DOT11_MOD_PBCC,
-+ DOT11_MOD_PBCC,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM,
-+ DOT11_MOD_OFDM
-+};
-+
-+static /* TODO: remove 'static' when moved to wireless.c */
-+int
-+rate_mbit2enum(int n) {
-+ int i=0;
-+ while(i<sizeof(ratelist)) {
-+ if(n==ratelist[i]) return i;
-+ i++;
-+ }
-+ return -EINVAL;
-+}
-+
-+static int
-+get_modulation(int r_enum, char suffix) {
-+ if(suffix==',' || suffix==' ' || suffix=='\0') {
-+ /* could shorten default_mod by 8 bytes:
-+ if(r_enum>=DOT11_RATE_6) return DOT11_MOD_OFDM; */
-+ return default_modulation[r_enum];
-+ }
-+ if(suffix=='c') {
-+ if(r_enum<DOT11_RATE_5 || r_enum>DOT11_RATE_11) return -EINVAL;
-+ return DOT11_MOD_CCK;
-+ }
-+ if(suffix=='p') {
-+ if(r_enum<DOT11_RATE_5 || r_enum>DOT11_RATE_33) return -EINVAL;
-+ return DOT11_MOD_PBCC;
-+ }
-+ if(suffix=='o') {
-+ if(r_enum<DOT11_RATE_6) return -EINVAL;
-+ return DOT11_MOD_OFDM;
-+ }
-+ if(suffix=='d') {
-+ if(r_enum<DOT11_RATE_6) return -EINVAL;
-+ return DOT11_MOD_CCKOFDM;
-+ }
-+ return -EINVAL;
-+}
-+
-+#ifdef UNUSED
-+static int
-+fill_ratevector(const char **pstr, u8 *vector, int size,
-+ int (*supported)(int mbit, int mod, void *opaque), void *opaque, int or_mask)
-+{
-+ unsigned long rate_mbit;
-+ int rate_enum,mod;
-+ const char *str = *pstr;
-+ char c;
-+
-+ do {
-+ rate_mbit = simple_strtoul(str, (char**)&str, 10);
-+ if(rate_mbit>INT_MAX) return -EINVAL;
-+
-+ rate_enum = rate_mbit2enum(rate_mbit);
-+ if(rate_enum<0) return rate_enum;
-+
-+ c = *str;
-+ mod = get_modulation(rate_enum, c);
-+ if(mod<0) return mod;
-+
-+ if(c>='a' && c<='z') c = *++str;
-+ if(c!=',' && c!=' ' && c!='\0') return -EINVAL;
-+
-+ if(supported) {
-+ int r = supported(rate_mbit, mod, opaque);
-+ if(r) return r;
-+ }
-+
-+ *vector++ = dot11ratebyte[rate_enum] | or_mask;
-+
-+ size--;
-+ str++;
-+ } while(size>0 && c==',');
-+
-+ if(size<1) return -E2BIG;
-+ *vector=0; /* TODO: sort, remove dups? */
-+
-+ *pstr = str-1;
-+ return 0;
-+}
-+
-+static /* TODO: remove 'static' when moved to wireless.c */
-+int
-+fill_ratevectors(const char *str, u8 *brate, u8 *orate, int size,
-+ int (*supported)(int mbit, int mod, void *opaque), void *opaque)
-+{
-+ int r;
-+
-+ r = fill_ratevector(&str, brate, size, supported, opaque, 0x80);
-+ if(r) return r;
-+
-+ orate[0] = 0;
-+ if(*str==' ') {
-+ str++;
-+ r = fill_ratevector(&str, orate, size, supported, opaque, 0);
-+ if(r) return r;
-+ /* TODO: sanitize, e.g. remove/error on rates already in basic rate set? */
-+ }
-+ if(*str)
-+ return -EINVAL;
-+
-+ return 0;
-+}
-+#endif
-+
-+/* TODO: use u64 masks? */
-+
-+static int
-+fill_ratemask(const char **pstr, u32* mask,
-+ int (*supported)(int mbit, int mod,void *opaque),
-+ u32 (*gen_mask)(int mbit, int mod,void *opaque),
-+ void *opaque)
-+{
-+ unsigned long rate_mbit;
-+ int rate_enum,mod;
-+ u32 m = 0;
-+ const char *str = *pstr;
-+ char c;
-+
-+ do {
-+ rate_mbit = simple_strtoul(str, (char**)&str, 10);
-+ if(rate_mbit>INT_MAX) return -EINVAL;
-+
-+ rate_enum = rate_mbit2enum(rate_mbit);
-+ if(rate_enum<0) return rate_enum;
-+
-+ c = *str;
-+ mod = get_modulation(rate_enum, c);
-+ if(mod<0) return mod;
-+
-+ if(c>='a' && c<='z') c = *++str;
-+ if(c!=',' && c!=' ' && c!='\0') return -EINVAL;
-+
-+ if(supported) {
-+ int r = supported(rate_mbit, mod, opaque);
-+ if(r) return r;
-+ }
-+
-+ m |= gen_mask(rate_mbit, mod, opaque);
-+ str++;
-+ } while(c==',');
-+
-+ *pstr = str-1;
-+ *mask |= m;
-+ return 0;
-+}
-+
-+static /* TODO: remove 'static' when moved to wireless.c */
-+int
-+fill_ratemasks(const char *str, u32 *bmask, u32 *omask,
-+ int (*supported)(int mbit, int mod,void *opaque),
-+ u32 (*gen_mask)(int mbit, int mod,void *opaque),
-+ void *opaque)
-+{
-+ int r;
-+
-+ r = fill_ratemask(&str, bmask, supported, gen_mask, opaque);
-+ if(r) return r;
-+
-+ if(*str==' ') {
-+ str++;
-+ r = fill_ratemask(&str, omask, supported, gen_mask, opaque);
-+ if(r) return r;
-+ }
-+ if(*str)
-+ return -EINVAL;
-+ return 0;
-+}
-Index: linux-2.6.22/drivers/net/wireless/acx/usb.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/usb.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,1922 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** USB support for TI ACX100 based devices. Many parts are taken from
-+** the PCI driver.
-+**
-+** Authors:
-+** Martin Wawro <martin.wawro AT uni-dortmund.de>
-+** Andreas Mohr <andi AT lisas.de>
-+**
-+** LOCKING
-+** callback functions called by USB core are running in interrupt context
-+** and thus have names with _i_.
-+*/
-+#define ACX_USB 1
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+#include <linux/types.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/kernel.h>
-+#include <linux/usb.h>
-+#include <linux/netdevice.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/etherdevice.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+#include <linux/vmalloc.h>
-+
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+*/
-+/* number of endpoints of an interface */
-+#define NUM_EP(intf) (intf)->altsetting[0].desc.bNumEndpoints
-+#define EP(intf, nr) (intf)->altsetting[0].endpoint[(nr)].desc
-+#define GET_DEV(udev) usb_get_dev((udev))
-+#define PUT_DEV(udev) usb_put_dev((udev))
-+#define SET_NETDEV_OWNER(ndev, owner) /* not needed anymore ??? */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
-+/* removed in 2.6.14. We will use fake value for now */
-+#define URB_ASYNC_UNLINK 0
-+#endif
-+
-+
-+/***********************************************************************
-+*/
-+/* ACX100 (TNETW1100) USB device: D-Link DWL-120+ */
-+#define ACX100_VENDOR_ID 0x2001
-+#define ACX100_PRODUCT_ID_UNBOOTED 0x3B01
-+#define ACX100_PRODUCT_ID_BOOTED 0x3B00
-+
-+/* TNETW1450 USB devices */
-+#define VENDOR_ID_DLINK 0x07b8 /* D-Link Corp. */
-+#define PRODUCT_ID_WUG2400 0xb21a /* AboCom WUG2400 or SafeCom SWLUT-54125 */
-+#define VENDOR_ID_AVM_GMBH 0x057c
-+#define PRODUCT_ID_AVM_WLAN_USB 0x5601
-+#define PRODUCT_ID_AVM_WLAN_USB_si 0x6201 /* "self install" named Version: driver kills kernel on inbound scans from fritz box ??? */
-+#define VENDOR_ID_ZCOM 0x0cde
-+#define PRODUCT_ID_ZCOM_XG750 0x0017 /* not tested yet */
-+#define VENDOR_ID_TI 0x0451
-+#define PRODUCT_ID_TI_UNKNOWN 0x60c5 /* not tested yet */
-+
-+#define ACX_USB_CTRL_TIMEOUT 5500 /* steps in ms */
-+
-+/* Buffer size for fw upload, same for both ACX100 USB and TNETW1450 */
-+#define USB_RWMEM_MAXLEN 2048
-+
-+/* The number of bulk URBs to use */
-+#define ACX_TX_URB_CNT 8
-+#define ACX_RX_URB_CNT 2
-+
-+/* Should be sent to the bulkout endpoint */
-+#define ACX_USB_REQ_UPLOAD_FW 0x10
-+#define ACX_USB_REQ_ACK_CS 0x11
-+#define ACX_USB_REQ_CMD 0x12
-+
-+/***********************************************************************
-+** Prototypes
-+*/
-+static int acxusb_e_probe(struct usb_interface *, const struct usb_device_id *);
-+static void acxusb_e_disconnect(struct usb_interface *);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+static void acxusb_i_complete_tx(struct urb *);
-+static void acxusb_i_complete_rx(struct urb *);
-+#else
-+static void acxusb_i_complete_tx(struct urb *, struct pt_regs *);
-+static void acxusb_i_complete_rx(struct urb *, struct pt_regs *);
-+#endif
-+static int acxusb_e_open(struct net_device *);
-+static int acxusb_e_close(struct net_device *);
-+static void acxusb_i_set_rx_mode(struct net_device *);
-+static int acxusb_boot(struct usb_device *, int is_tnetw1450, int *radio_type);
-+
-+static void acxusb_l_poll_rx(acx_device_t *adev, usb_rx_t* rx);
-+
-+static void acxusb_i_tx_timeout(struct net_device *);
-+
-+/* static void dump_device(struct usb_device *); */
-+/* static void dump_device_descriptor(struct usb_device_descriptor *); */
-+/* static void dump_config_descriptor(struct usb_config_descriptor *); */
-+
-+/***********************************************************************
-+** Module Data
-+*/
-+#define TXBUFSIZE sizeof(usb_txbuffer_t)
-+/*
-+ * Now, this is just plain lying, but the device insists in giving us
-+ * huge packets. We supply extra space after rxbuffer. Need to understand
-+ * it better...
-+ */
-+#define RXBUFSIZE (sizeof(rxbuffer_t) + \
-+ (sizeof(usb_rx_t) - sizeof(struct usb_rx_plain)))
-+
-+static const struct usb_device_id
-+acxusb_ids[] = {
-+ { USB_DEVICE(ACX100_VENDOR_ID, ACX100_PRODUCT_ID_BOOTED) },
-+ { USB_DEVICE(ACX100_VENDOR_ID, ACX100_PRODUCT_ID_UNBOOTED) },
-+ { USB_DEVICE(VENDOR_ID_DLINK, PRODUCT_ID_WUG2400) },
-+ { USB_DEVICE(VENDOR_ID_AVM_GMBH, PRODUCT_ID_AVM_WLAN_USB) },
-+ { USB_DEVICE(VENDOR_ID_AVM_GMBH, PRODUCT_ID_AVM_WLAN_USB_si) },
-+ { USB_DEVICE(VENDOR_ID_ZCOM, PRODUCT_ID_ZCOM_XG750) },
-+ { USB_DEVICE(VENDOR_ID_TI, PRODUCT_ID_TI_UNKNOWN) },
-+ {}
-+};
-+
-+MODULE_DEVICE_TABLE(usb, acxusb_ids);
-+
-+/* USB driver data structure as required by the kernel's USB core */
-+static struct usb_driver
-+acxusb_driver = {
-+ .name = "acx_usb",
-+ .probe = acxusb_e_probe,
-+ .disconnect = acxusb_e_disconnect,
-+ .id_table = acxusb_ids
-+};
-+
-+
-+/***********************************************************************
-+** USB helper
-+**
-+** ldd3 ch13 says:
-+** When the function is usb_kill_urb, the urb lifecycle is stopped. This
-+** function is usually used when the device is disconnected from the system,
-+** in the disconnect callback. For some drivers, the usb_unlink_urb function
-+** should be used to tell the USB core to stop an urb. This function does not
-+** wait for the urb to be fully stopped before returning to the caller.
-+** This is useful for stoppingthe urb while in an interrupt handler or when
-+** a spinlock is held, as waiting for a urb to fully stop requires the ability
-+** for the USB core to put the calling process to sleep. This function requires
-+** that the URB_ASYNC_UNLINK flag value be set in the urb that is being asked
-+** to be stopped in order to work properly.
-+**
-+** (URB_ASYNC_UNLINK is obsolete, usb_unlink_urb will always be
-+** asynchronous while usb_kill_urb is synchronous and should be called
-+** directly (drivers/usb/core/urb.c))
-+**
-+** In light of this, timeout is just for paranoid reasons...
-+*
-+* Actually, it's useful for debugging. If we reach timeout, we're doing
-+* something wrong with the urbs.
-+*/
-+static void
-+acxusb_unlink_urb(struct urb* urb)
-+{
-+ if (!urb)
-+ return;
-+
-+ if (urb->status == -EINPROGRESS) {
-+ int timeout = 10;
-+
-+ usb_unlink_urb(urb);
-+ while (--timeout && urb->status == -EINPROGRESS) {
-+ mdelay(1);
-+ }
-+ if (!timeout) {
-+ printk("acx_usb: urb unlink timeout!\n");
-+ }
-+ }
-+}
-+
-+
-+/***********************************************************************
-+** EEPROM and PHY read/write helpers
-+*/
-+/***********************************************************************
-+** acxusb_s_read_phy_reg
-+*/
-+int
-+acxusb_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
-+{
-+ /* mem_read_write_t mem; */
-+
-+ FN_ENTER;
-+
-+ printk("%s doesn't seem to work yet, disabled.\n", __func__);
-+
-+ /*
-+ mem.addr = cpu_to_le16(reg);
-+ mem.type = cpu_to_le16(0x82);
-+ mem.len = cpu_to_le32(4);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_MEM_READ, &mem, sizeof(mem));
-+ *charbuf = mem.data;
-+ log(L_DEBUG, "read radio PHY[0x%04X]=0x%02X\n", reg, *charbuf);
-+ */
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acxusb_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
-+{
-+ mem_read_write_t mem;
-+
-+ FN_ENTER;
-+
-+ mem.addr = cpu_to_le16(reg);
-+ mem.type = cpu_to_le16(0x82);
-+ mem.len = cpu_to_le32(4);
-+ mem.data = value;
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_MEM_WRITE, &mem, sizeof(mem));
-+ log(L_DEBUG, "write radio PHY[0x%04X]=0x%02X\n", reg, value);
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_s_issue_cmd_timeo
-+** Excecutes a command in the command mailbox
-+**
-+** buffer = a pointer to the data.
-+** The data must not include 4 byte command header
-+*/
-+
-+/* TODO: ideally we shall always know how much we need
-+** and this shall be 0 */
-+#define BOGUS_SAFETY_PADDING 0x40
-+
-+#undef FUNC
-+#define FUNC "issue_cmd"
-+
-+#if !ACX_DEBUG
-+int
-+acxusb_s_issue_cmd_timeo(
-+ acx_device_t *adev,
-+ unsigned cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned timeout)
-+{
-+#else
-+int
-+acxusb_s_issue_cmd_timeo_debug(
-+ acx_device_t *adev,
-+ unsigned cmd,
-+ void *buffer,
-+ unsigned buflen,
-+ unsigned timeout,
-+ const char* cmdstr)
-+{
-+#endif
-+ /* USB ignores timeout param */
-+
-+ struct usb_device *usbdev;
-+ struct {
-+ u16 cmd;
-+ u16 status;
-+ u8 data[1];
-+ } ACX_PACKED *loc;
-+ const char *devname;
-+ int acklen, blocklen, inpipe, outpipe;
-+ int cmd_status;
-+ int result;
-+
-+ FN_ENTER;
-+
-+ devname = adev->ndev->name;
-+ /* no "wlan%%d: ..." please */
-+ if (!devname || !devname[0] || devname[4]=='%')
-+ devname = "acx";
-+
-+ log(L_CTL, FUNC"(cmd:%s,buflen:%u,type:0x%04X)\n",
-+ cmdstr, buflen,
-+ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
-+
-+ loc = kmalloc(buflen + 4 + BOGUS_SAFETY_PADDING, GFP_KERNEL);
-+ if (!loc) {
-+ printk("%s: "FUNC"(): no memory for data buffer\n", devname);
-+ goto bad;
-+ }
-+
-+ /* get context from acx_device */
-+ usbdev = adev->usbdev;
-+
-+ /* check which kind of command was issued */
-+ loc->cmd = cpu_to_le16(cmd);
-+ loc->status = 0;
-+
-+/* NB: buflen == frmlen + 4
-+**
-+** Interrogate: write 8 bytes: (cmd,status,rid,frmlen), then
-+** read (cmd,status,rid,frmlen,data[frmlen]) back
-+**
-+** Configure: write (cmd,status,rid,frmlen,data[frmlen])
-+**
-+** Possibly bogus special handling of ACX1xx_IE_SCAN_STATUS removed
-+*/
-+
-+ /* now write the parameters of the command if needed */
-+ acklen = buflen + 4 + BOGUS_SAFETY_PADDING;
-+ blocklen = buflen;
-+ if (buffer && buflen) {
-+ /* if it's an INTERROGATE command, just pass the length
-+ * of parameters to read, as data */
-+ if (cmd == ACX1xx_CMD_INTERROGATE) {
-+ blocklen = 4;
-+ acklen = buflen + 4;
-+ }
-+ memcpy(loc->data, buffer, blocklen);
-+ }
-+ blocklen += 4; /* account for cmd,status */
-+
-+ /* obtain the I/O pipes */
-+ outpipe = usb_sndctrlpipe(usbdev, 0);
-+ inpipe = usb_rcvctrlpipe(usbdev, 0);
-+ log(L_CTL, "ctrl inpipe=0x%X outpipe=0x%X\n", inpipe, outpipe);
-+ log(L_CTL, "sending USB control msg (out) (blocklen=%d)\n", blocklen);
-+ if (acx_debug & L_DATA)
-+ acx_dump_bytes(loc, blocklen);
-+
-+ result = usb_control_msg(usbdev, outpipe,
-+ ACX_USB_REQ_CMD, /* request */
-+ USB_TYPE_VENDOR|USB_DIR_OUT, /* requesttype */
-+ 0, /* value */
-+ 0, /* index */
-+ loc, /* dataptr */
-+ blocklen, /* size */
-+ ACX_USB_CTRL_TIMEOUT /* timeout in ms */
-+ );
-+
-+ if (result == -ENODEV) {
-+ log(L_CTL, "no device present (unplug?)\n");
-+ goto good;
-+ }
-+
-+ log(L_CTL, "wrote %d bytes\n", result);
-+ if (result < 0) {
-+ goto bad;
-+ }
-+
-+ /* check for device acknowledge */
-+ log(L_CTL, "sending USB control msg (in) (acklen=%d)\n", acklen);
-+ loc->status = 0; /* delete old status flag -> set to IDLE */
-+ /* shall we zero out the rest? */
-+ result = usb_control_msg(usbdev, inpipe,
-+ ACX_USB_REQ_CMD, /* request */
-+ USB_TYPE_VENDOR|USB_DIR_IN, /* requesttype */
-+ 0, /* value */
-+ 0, /* index */
-+ loc, /* dataptr */
-+ acklen, /* size */
-+ ACX_USB_CTRL_TIMEOUT /* timeout in ms */
-+ );
-+ if (result < 0) {
-+ printk("%s: "FUNC"(): USB read error %d\n", devname, result);
-+ goto bad;
-+ }
-+ if (acx_debug & L_CTL) {
-+ printk("read %d bytes: ", result);
-+ acx_dump_bytes(loc, result);
-+ }
-+
-+/*
-+ check for result==buflen+4? Was seen:
-+
-+interrogate(type:ACX100_IE_DOT11_ED_THRESHOLD,len:4)
-+issue_cmd(cmd:ACX1xx_CMD_INTERROGATE,buflen:8,type:4111)
-+ctrl inpipe=0x80000280 outpipe=0x80000200
-+sending USB control msg (out) (blocklen=8)
-+01 00 00 00 0F 10 04 00
-+wrote 8 bytes
-+sending USB control msg (in) (acklen=12) sizeof(loc->data
-+read 4 bytes <==== MUST BE 12!!
-+*/
-+
-+ cmd_status = le16_to_cpu(loc->status);
-+ if (cmd_status != 1) {
-+ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s)\n",
-+ devname, cmd_status, acx_cmd_status_str(cmd_status));
-+ /* TODO: goto bad; ? */
-+ }
-+ if ((cmd == ACX1xx_CMD_INTERROGATE) && buffer && buflen) {
-+ memcpy(buffer, loc->data, buflen);
-+ log(L_CTL, "response frame: cmd=0x%04X status=%d\n",
-+ le16_to_cpu(loc->cmd),
-+ cmd_status);
-+ }
-+good:
-+ kfree(loc);
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ /* Give enough info so that callers can avoid
-+ ** printing their own diagnostic messages */
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
-+#else
-+ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
-+#endif
-+ dump_stack();
-+ kfree(loc);
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_boot()
-+** Inputs:
-+** usbdev -> Pointer to kernel's usb_device structure
-+**
-+** Returns:
-+** (int) Errorcode or 0 on success
-+**
-+** This function triggers the loading of the firmware image from harddisk
-+** and then uploads the firmware to the USB device. After uploading the
-+** firmware and transmitting the checksum, the device resets and appears
-+** as a new device on the USB bus (the device we can finally deal with)
-+*/
-+static inline int
-+acxusb_fw_needs_padding(firmware_image_t *fw_image, unsigned int usb_maxlen)
-+{
-+ unsigned int num_xfers = ((fw_image->size - 1) / usb_maxlen) + 1;
-+
-+ return ((num_xfers % 2) == 0);
-+}
-+
-+static int
-+acxusb_boot(struct usb_device *usbdev, int is_tnetw1450, int *radio_type)
-+{
-+ char filename[sizeof("tiacx1NNusbcRR")];
-+
-+ firmware_image_t *fw_image = NULL;
-+ char *usbbuf;
-+ unsigned int offset;
-+ unsigned int blk_len, inpipe, outpipe;
-+ u32 num_processed;
-+ u32 img_checksum, sum;
-+ u32 file_size;
-+ int result = -EIO;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* dump_device(usbdev); */
-+
-+ usbbuf = kmalloc(USB_RWMEM_MAXLEN, GFP_KERNEL);
-+ if (!usbbuf) {
-+ printk(KERN_ERR "acx: no memory for USB transfer buffer (%d bytes)\n", USB_RWMEM_MAXLEN);
-+ result = -ENOMEM;
-+ goto end;
-+ }
-+ if (is_tnetw1450) {
-+ /* Obtain the I/O pipes */
-+ outpipe = usb_sndbulkpipe(usbdev, 1);
-+ inpipe = usb_rcvbulkpipe(usbdev, 2);
-+
-+ printk(KERN_DEBUG "wait for device ready\n");
-+ for (i = 0; i <= 2; i++) {
-+ result = usb_bulk_msg(usbdev, inpipe,
-+ usbbuf,
-+ USB_RWMEM_MAXLEN,
-+ &num_processed,
-+ 2000
-+ );
-+
-+ if ((*(u32 *)&usbbuf[4] == 0x40000001)
-+ && (*(u16 *)&usbbuf[2] == 0x1)
-+ && ((*(u16 *)usbbuf & 0x3fff) == 0)
-+ && ((*(u16 *)usbbuf & 0xc000) == 0xc000))
-+ break;
-+ msleep(10);
-+ }
-+ if (i == 2)
-+ goto fw_end;
-+
-+ *radio_type = usbbuf[8];
-+ } else {
-+ /* Obtain the I/O pipes */
-+ outpipe = usb_sndctrlpipe(usbdev, 0);
-+ inpipe = usb_rcvctrlpipe(usbdev, 0);
-+
-+ /* FIXME: shouldn't be hardcoded */
-+ *radio_type = RADIO_MAXIM_0D;
-+ }
-+
-+ snprintf(filename, sizeof(filename), "tiacx1%02dusbc%02X",
-+ is_tnetw1450 * 11, *radio_type);
-+
-+ fw_image = acx_s_read_fw(&usbdev->dev, filename, &file_size);
-+ if (!fw_image) {
-+ result = -EIO;
-+ goto end;
-+ }
-+ log(L_INIT, "firmware size: %d bytes\n", file_size);
-+
-+ img_checksum = le32_to_cpu(fw_image->chksum);
-+
-+ if (is_tnetw1450) {
-+ u8 cmdbuf[20];
-+ const u8 *p;
-+ u8 need_padding;
-+ u32 tmplen, val;
-+
-+ memset(cmdbuf, 0, 16);
-+
-+ need_padding = acxusb_fw_needs_padding(fw_image, USB_RWMEM_MAXLEN);
-+ tmplen = need_padding ? file_size-4 : file_size-8;
-+ *(u16 *)&cmdbuf[0] = 0xc000;
-+ *(u16 *)&cmdbuf[2] = 0x000b;
-+ *(u32 *)&cmdbuf[4] = tmplen;
-+ *(u32 *)&cmdbuf[8] = file_size-8;
-+ *(u32 *)&cmdbuf[12] = img_checksum;
-+
-+ result = usb_bulk_msg(usbdev, outpipe, cmdbuf, 16, &num_processed, HZ);
-+ if (result < 0)
-+ goto fw_end;
-+
-+ p = (const u8 *)&fw_image->size;
-+
-+ /* first calculate checksum for image size part */
-+ sum = p[0]+p[1]+p[2]+p[3];
-+ p += 4;
-+
-+ /* now continue checksum for firmware data part */
-+ tmplen = le32_to_cpu(fw_image->size);
-+ for (i = 0; i < tmplen /* image size */; i++) {
-+ sum += *p++;
-+ }
-+
-+ if (sum != le32_to_cpu(fw_image->chksum)) {
-+ printk("acx: FATAL: firmware upload: "
-+ "checksums don't match! "
-+ "(0x%08x vs. 0x%08x)\n",
-+ sum, fw_image->chksum);
-+ goto fw_end;
-+ }
-+
-+ offset = 8;
-+ while (offset < file_size) {
-+ blk_len = file_size - offset;
-+ if (blk_len > USB_RWMEM_MAXLEN) {
-+ blk_len = USB_RWMEM_MAXLEN;
-+ }
-+
-+ log(L_INIT, "uploading firmware (%d bytes, offset=%d)\n",
-+ blk_len, offset);
-+ memcpy(usbbuf, ((u8 *)fw_image) + offset, blk_len);
-+
-+ p = usbbuf;
-+ for (i = 0; i < blk_len; i += 4) {
-+ *(u32 *)p = be32_to_cpu(*(u32 *)p);
-+ p += 4;
-+ }
-+
-+ result = usb_bulk_msg(usbdev, outpipe, usbbuf, blk_len, &num_processed, HZ);
-+ if ((result < 0) || (num_processed != blk_len))
-+ goto fw_end;
-+ offset += blk_len;
-+ }
-+ if (need_padding) {
-+ printk(KERN_DEBUG "send padding\n");
-+ memset(usbbuf, 0, 4);
-+ result = usb_bulk_msg(usbdev, outpipe, usbbuf, 4, &num_processed, HZ);
-+ if ((result < 0) || (num_processed != 4))
-+ goto fw_end;
-+ }
-+ printk(KERN_DEBUG "read firmware upload result\n");
-+ memset(cmdbuf, 0, 20); /* additional memset */
-+ result = usb_bulk_msg(usbdev, inpipe, cmdbuf, 20, &num_processed, 2000);
-+ if (result < 0)
-+ goto fw_end;
-+ if (*(u32 *)&cmdbuf[4] == 0x40000003)
-+ goto fw_end;
-+ if (*(u32 *)&cmdbuf[4])
-+ goto fw_end;
-+ if (*(u16 *)&cmdbuf[16] != 1)
-+ goto fw_end;
-+
-+ val = *(u32 *)&cmdbuf[0];
-+ if ((val & 0x3fff)
-+ || ((val & 0xc000) != 0xc000))
-+ goto fw_end;
-+
-+ val = *(u32 *)&cmdbuf[8];
-+ if (val & 2) {
-+ result = usb_bulk_msg(usbdev, inpipe, cmdbuf, 20, &num_processed, 2000);
-+ if (result < 0)
-+ goto fw_end;
-+ val = *(u32 *)&cmdbuf[8];
-+ }
-+ /* yup, no "else" here! */
-+ if (val & 1) {
-+ memset(usbbuf, 0, 4);
-+ result = usb_bulk_msg(usbdev, outpipe, usbbuf, 4, &num_processed, HZ);
-+ if ((result < 0) || (!num_processed))
-+ goto fw_end;
-+ }
-+
-+ printk("TNETW1450 firmware upload successful!\n");
-+ result = 0;
-+ goto end;
-+fw_end:
-+ result = -EIO;
-+ goto end;
-+ } else {
-+ /* ACX100 USB */
-+
-+ /* now upload the firmware, slice the data into blocks */
-+ offset = 8;
-+ while (offset < file_size) {
-+ blk_len = file_size - offset;
-+ if (blk_len > USB_RWMEM_MAXLEN) {
-+ blk_len = USB_RWMEM_MAXLEN;
-+ }
-+ log(L_INIT, "uploading firmware (%d bytes, offset=%d)\n",
-+ blk_len, offset);
-+ memcpy(usbbuf, ((u8 *)fw_image) + offset, blk_len);
-+ result = usb_control_msg(usbdev, outpipe,
-+ ACX_USB_REQ_UPLOAD_FW,
-+ USB_TYPE_VENDOR|USB_DIR_OUT,
-+ (file_size - 8) & 0xffff, /* value */
-+ (file_size - 8) >> 16, /* index */
-+ usbbuf, /* dataptr */
-+ blk_len, /* size */
-+ 3000 /* timeout in ms */
-+ );
-+ offset += blk_len;
-+ if (result < 0) {
-+ printk(KERN_ERR "acx: error %d during upload "
-+ "of firmware, aborting\n", result);
-+ goto end;
-+ }
-+ }
-+
-+ /* finally, send the checksum and reboot the device */
-+ /* does this trigger the reboot? */
-+ result = usb_control_msg(usbdev, outpipe,
-+ ACX_USB_REQ_UPLOAD_FW,
-+ USB_TYPE_VENDOR|USB_DIR_OUT,
-+ img_checksum & 0xffff, /* value */
-+ img_checksum >> 16, /* index */
-+ NULL, /* dataptr */
-+ 0, /* size */
-+ 3000 /* timeout in ms */
-+ );
-+ if (result < 0) {
-+ printk(KERN_ERR "acx: error %d during tx of checksum, "
-+ "aborting\n", result);
-+ goto end;
-+ }
-+ result = usb_control_msg(usbdev, inpipe,
-+ ACX_USB_REQ_ACK_CS,
-+ USB_TYPE_VENDOR|USB_DIR_IN,
-+ img_checksum & 0xffff, /* value */
-+ img_checksum >> 16, /* index */
-+ usbbuf, /* dataptr */
-+ 8, /* size */
-+ 3000 /* timeout in ms */
-+ );
-+ if (result < 0) {
-+ printk(KERN_ERR "acx: error %d during ACK of checksum, "
-+ "aborting\n", result);
-+ goto end;
-+ }
-+ if (*usbbuf != 0x10) {
-+ printk(KERN_ERR "acx: invalid checksum?\n");
-+ result = -EINVAL;
-+ goto end;
-+ }
-+ result = 0;
-+ }
-+
-+end:
-+ vfree(fw_image);
-+ kfree(usbbuf);
-+
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/* FIXME: maybe merge it with usual eeprom reading, into common code? */
-+static void
-+acxusb_s_read_eeprom_version(acx_device_t *adev)
-+{
-+ u8 eeprom_ver[0x8];
-+
-+ memset(eeprom_ver, 0, sizeof(eeprom_ver));
-+ acx_s_interrogate(adev, &eeprom_ver, ACX1FF_IE_EEPROM_VER);
-+
-+ /* FIXME: which one of those values to take? */
-+ adev->eeprom_version = eeprom_ver[5];
-+}
-+
-+
-+/*
-+ * temporary helper function to at least fill important cfgopt members with
-+ * useful replacement values until we figure out how one manages to fetch
-+ * the configoption struct in the USB device case...
-+ */
-+static int
-+acxusb_s_fill_configoption(acx_device_t *adev)
-+{
-+ adev->cfgopt_probe_delay = 200;
-+ adev->cfgopt_dot11CCAModes = 4;
-+ adev->cfgopt_dot11Diversity = 1;
-+ adev->cfgopt_dot11ShortPreambleOption = 1;
-+ adev->cfgopt_dot11PBCCOption = 1;
-+ adev->cfgopt_dot11ChannelAgility = 0;
-+ adev->cfgopt_dot11PhyType = 5;
-+ adev->cfgopt_dot11TempType = 1;
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_e_probe()
-+**
-+** This function is invoked by the kernel's USB core whenever a new device is
-+** attached to the system or the module is loaded. It is presented a usb_device
-+** structure from which information regarding the device is obtained and evaluated.
-+** In case this driver is able to handle one of the offered devices, it returns
-+** a non-null pointer to a driver context and thereby claims the device.
-+*/
-+
-+static void
-+dummy_netdev_init(struct net_device *ndev) {}
-+
-+static int
-+acxusb_e_probe(struct usb_interface *intf, const struct usb_device_id *devID)
-+{
-+ struct usb_device *usbdev = interface_to_usbdev(intf);
-+ acx_device_t *adev = NULL;
-+ struct net_device *ndev = NULL;
-+ struct usb_config_descriptor *config;
-+ struct usb_endpoint_descriptor *epdesc;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+ struct usb_host_endpoint *ep;
-+#endif
-+ struct usb_interface_descriptor *ifdesc;
-+ const char* msg;
-+ int numconfigs, numfaces, numep;
-+ int result = OK;
-+ int i;
-+ int radio_type;
-+ /* this one needs to be more precise in case there appears a TNETW1450 from the same vendor */
-+ int is_tnetw1450 = (usbdev->descriptor.idVendor != ACX100_VENDOR_ID);
-+
-+ FN_ENTER;
-+
-+ if (is_tnetw1450) {
-+ /* Boot the device (i.e. upload the firmware) */
-+ acxusb_boot(usbdev, is_tnetw1450, &radio_type);
-+
-+ /* TNETW1450-based cards will continue right away with
-+ * the same USB ID after booting */
-+ } else {
-+ /* First check if this is the "unbooted" hardware */
-+ if (usbdev->descriptor.idProduct == ACX100_PRODUCT_ID_UNBOOTED) {
-+
-+ /* Boot the device (i.e. upload the firmware) */
-+ acxusb_boot(usbdev, is_tnetw1450, &radio_type);
-+
-+ /* DWL-120+ will first boot the firmware,
-+ * then later have a *separate* probe() run
-+ * since its USB ID will have changed after
-+ * firmware boot!
-+ * Since the first probe() run has no
-+ * other purpose than booting the firmware,
-+ * simply return immediately.
-+ */
-+ log(L_INIT, "finished booting, returning from probe()\n");
-+ result = OK; /* success */
-+ goto end;
-+ }
-+ else
-+ /* device not unbooted, but invalid USB ID!? */
-+ if (usbdev->descriptor.idProduct != ACX100_PRODUCT_ID_BOOTED)
-+ goto end_nodev;
-+ }
-+
-+/* Ok, so it's our device and it has already booted */
-+
-+ /* Allocate memory for a network device */
-+
-+ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init);
-+ /* (NB: memsets to 0 entire area) */
-+ if (!ndev) {
-+ msg = "acx: no memory for netdev\n";
-+ goto end_nomem;
-+ }
-+
-+ /* Register the callbacks for the network device functions */
-+
-+ ether_setup(ndev);
-+ ndev->open = &acxusb_e_open;
-+ ndev->stop = &acxusb_e_close;
-+ ndev->hard_start_xmit = (void *)&acx_i_start_xmit;
-+ ndev->get_stats = (void *)&acx_e_get_stats;
-+#if IW_HANDLER_VERSION <= 5
-+ ndev->get_wireless_stats = (void *)&acx_e_get_wireless_stats;
-+#endif
-+ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
-+ ndev->set_multicast_list = (void *)&acxusb_i_set_rx_mode;
-+#ifdef HAVE_TX_TIMEOUT
-+ ndev->tx_timeout = &acxusb_i_tx_timeout;
-+ ndev->watchdog_timeo = 4 * HZ;
-+#endif
-+ ndev->change_mtu = &acx_e_change_mtu;
-+ SET_MODULE_OWNER(ndev);
-+
-+ /* Setup private driver context */
-+
-+ adev = ndev2adev(ndev);
-+ adev->ndev = ndev;
-+
-+ adev->dev_type = DEVTYPE_USB;
-+ adev->radio_type = radio_type;
-+ if (is_tnetw1450) {
-+ /* well, actually it's a TNETW1450, but since it
-+ * seems to be sufficiently similar to TNETW1130,
-+ * I don't want to change large amounts of code now */
-+ adev->chip_type = CHIPTYPE_ACX111;
-+ } else {
-+ adev->chip_type = CHIPTYPE_ACX100;
-+ }
-+
-+ adev->usbdev = usbdev;
-+ spin_lock_init(&adev->lock); /* initial state: unlocked */
-+ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
-+
-+ /* Check that this is really the hardware we know about.
-+ ** If not sure, at least notify the user that he
-+ ** may be in trouble...
-+ */
-+ numconfigs = (int)usbdev->descriptor.bNumConfigurations;
-+ if (numconfigs != 1)
-+ printk("acx: number of configurations is %d, "
-+ "this driver only knows how to handle 1, "
-+ "be prepared for surprises\n", numconfigs);
-+
-+ config = &usbdev->config->desc;
-+ numfaces = config->bNumInterfaces;
-+ if (numfaces != 1)
-+ printk("acx: number of interfaces is %d, "
-+ "this driver only knows how to handle 1, "
-+ "be prepared for surprises\n", numfaces);
-+
-+ ifdesc = &intf->altsetting->desc;
-+ numep = ifdesc->bNumEndpoints;
-+ log(L_DEBUG, "# of endpoints: %d\n", numep);
-+
-+ if (is_tnetw1450) {
-+ adev->bulkoutep = 1;
-+ adev->bulkinep = 2;
-+ } else {
-+ /* obtain information about the endpoint
-+ ** addresses, begin with some default values
-+ */
-+ adev->bulkoutep = 1;
-+ adev->bulkinep = 1;
-+ for (i = 0; i < numep; i++) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+ ep = usbdev->ep_in[i];
-+ if (!ep)
-+ continue;
-+ epdesc = &ep->desc;
-+#else
-+ epdesc = usb_epnum_to_ep_desc(usbdev, i);
-+ if (!epdesc)
-+ continue;
-+#endif
-+ if (epdesc->bmAttributes & USB_ENDPOINT_XFER_BULK) {
-+ if (epdesc->bEndpointAddress & 0x80)
-+ adev->bulkinep = epdesc->bEndpointAddress & 0xF;
-+ else
-+ adev->bulkoutep = epdesc->bEndpointAddress & 0xF;
-+ }
-+ }
-+ }
-+ log(L_DEBUG, "bulkout ep: 0x%X\n", adev->bulkoutep);
-+ log(L_DEBUG, "bulkin ep: 0x%X\n", adev->bulkinep);
-+
-+ /* already done by memset: adev->rxtruncsize = 0; */
-+ log(L_DEBUG, "TXBUFSIZE=%d RXBUFSIZE=%d\n",
-+ (int) TXBUFSIZE, (int) RXBUFSIZE);
-+
-+ /* Allocate the RX/TX containers. */
-+ adev->usb_tx = kmalloc(sizeof(usb_tx_t) * ACX_TX_URB_CNT, GFP_KERNEL);
-+ if (!adev->usb_tx) {
-+ msg = "acx: no memory for tx container";
-+ goto end_nomem;
-+ }
-+ adev->usb_rx = kmalloc(sizeof(usb_rx_t) * ACX_RX_URB_CNT, GFP_KERNEL);
-+ if (!adev->usb_rx) {
-+ msg = "acx: no memory for rx container";
-+ goto end_nomem;
-+ }
-+
-+ /* Setup URBs for bulk-in/out messages */
-+ for (i = 0; i < ACX_RX_URB_CNT; i++) {
-+ adev->usb_rx[i].urb = usb_alloc_urb(0, GFP_KERNEL);
-+ if (!adev->usb_rx[i].urb) {
-+ msg = "acx: no memory for input URB\n";
-+ goto end_nomem;
-+ }
-+ adev->usb_rx[i].urb->status = 0;
-+ adev->usb_rx[i].adev = adev;
-+ adev->usb_rx[i].busy = 0;
-+ }
-+
-+ for (i = 0; i< ACX_TX_URB_CNT; i++) {
-+ adev->usb_tx[i].urb = usb_alloc_urb(0, GFP_KERNEL);
-+ if (!adev->usb_tx[i].urb) {
-+ msg = "acx: no memory for output URB\n";
-+ goto end_nomem;
-+ }
-+ adev->usb_tx[i].urb->status = 0;
-+ adev->usb_tx[i].adev = adev;
-+ adev->usb_tx[i].busy = 0;
-+ }
-+ adev->tx_free = ACX_TX_URB_CNT;
-+
-+ usb_set_intfdata(intf, adev);
-+ SET_NETDEV_DEV(ndev, &intf->dev);
-+
-+ /* TODO: move all of fw cmds to open()? But then we won't know our MAC addr
-+ until ifup (it's available via reading ACX1xx_IE_DOT11_STATION_ID)... */
-+
-+ /* put acx out of sleep mode and initialize it */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
-+
-+ result = acx_s_init_mac(adev);
-+ if (result)
-+ goto end;
-+
-+ /* TODO: see similar code in pci.c */
-+ acxusb_s_read_eeprom_version(adev);
-+ acxusb_s_fill_configoption(adev);
-+ acx_s_set_defaults(adev);
-+ acx_s_get_firmware_version(adev);
-+ acx_display_hardware_details(adev);
-+
-+ /* Register the network device */
-+ log(L_INIT, "registering network device\n");
-+ result = register_netdev(ndev);
-+ if (result) {
-+ msg = "acx: failed to register USB network device "
-+ "(error %d)\n";
-+ goto end_nomem;
-+ }
-+
-+ acx_proc_register_entries(ndev);
-+
-+ acx_stop_queue(ndev, "on probe");
-+ acx_carrier_off(ndev, "on probe");
-+
-+ printk("acx: USB module " ACX_RELEASE " loaded successfully\n");
-+
-+#if CMD_DISCOVERY
-+ great_inquisitor(adev);
-+#endif
-+
-+ /* Everything went OK, we are happy now */
-+ result = OK;
-+ goto end;
-+
-+end_nomem:
-+ printk(msg, result);
-+
-+ if (ndev) {
-+ if (adev->usb_rx) {
-+ for (i = 0; i < ACX_RX_URB_CNT; i++)
-+ usb_free_urb(adev->usb_rx[i].urb);
-+ kfree(adev->usb_rx);
-+ }
-+ if (adev->usb_tx) {
-+ for (i = 0; i < ACX_TX_URB_CNT; i++)
-+ usb_free_urb(adev->usb_tx[i].urb);
-+ kfree(adev->usb_tx);
-+ }
-+ free_netdev(ndev);
-+ }
-+
-+ result = -ENOMEM;
-+ goto end;
-+
-+end_nodev:
-+ /* no device we could handle, return error. */
-+ result = -EIO;
-+
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_e_disconnect()
-+**
-+** This function is invoked whenever the user pulls the plug from the USB
-+** device or the module is removed from the kernel. In these cases, the
-+** network devices have to be taken down and all allocated memory has
-+** to be freed.
-+*/
-+static void
-+acxusb_e_disconnect(struct usb_interface *intf)
-+{
-+ acx_device_t *adev = usb_get_intfdata(intf);
-+ unsigned long flags;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /* No WLAN device... no sense */
-+ if (!adev)
-+ goto end;
-+
-+ /* Unregister network device
-+ *
-+ * If the interface is up, unregister_netdev() will take
-+ * care of calling our close() function, which takes
-+ * care of unlinking the urbs, sending the device to
-+ * sleep, etc...
-+ * This can't be called with sem or lock held because
-+ * _close() will try to grab it as well if it's called,
-+ * deadlocking the machine.
-+ */
-+ unregister_netdev(adev->ndev);
-+
-+ acx_sem_lock(adev);
-+ acx_lock(adev, flags);
-+ /* This device exists no more */
-+ usb_set_intfdata(intf, NULL);
-+ acx_proc_unregister_entries(adev->ndev);
-+
-+ /*
-+ * Here we only free them. _close() took care of
-+ * unlinking them.
-+ */
-+ for (i = 0; i < ACX_RX_URB_CNT; ++i) {
-+ usb_free_urb(adev->usb_rx[i].urb);
-+ }
-+ for (i = 0; i< ACX_TX_URB_CNT; ++i) {
-+ usb_free_urb(adev->usb_tx[i].urb);
-+ }
-+
-+ /* Freeing containers */
-+ kfree(adev->usb_rx);
-+ kfree(adev->usb_tx);
-+
-+ acx_unlock(adev, flags);
-+ acx_sem_unlock(adev);
-+
-+ free_netdev(adev->ndev);
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_e_open()
-+** This function is called when the user sets up the network interface.
-+** It initializes a management timer, sets up the USB card and starts
-+** the network tx queue and USB receive.
-+*/
-+static int
-+acxusb_e_open(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+
-+ /* put the ACX100 out of sleep mode */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
-+
-+ acx_init_task_scheduler(adev);
-+
-+ init_timer(&adev->mgmt_timer);
-+ adev->mgmt_timer.function = acx_i_timer;
-+ adev->mgmt_timer.data = (unsigned long)adev;
-+
-+ /* acx_s_start needs it */
-+ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+ acx_s_start(adev);
-+
-+ /* don't acx_start_queue() here, we need to associate first */
-+
-+ acx_lock(adev, flags);
-+ for (i = 0; i < ACX_RX_URB_CNT; i++) {
-+ adev->usb_rx[i].urb->status = 0;
-+ }
-+
-+ acxusb_l_poll_rx(adev, &adev->usb_rx[0]);
-+
-+ acx_unlock(adev, flags);
-+
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT0;
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_e_close()
-+**
-+** This function stops the network functionality of the interface (invoked
-+** when the user calls ifconfig <wlan> down). The tx queue is halted and
-+** the device is marked as down. In case there were any pending USB bulk
-+** transfers, these are unlinked (asynchronously). The module in-use count
-+** is also decreased in this function.
-+*/
-+static int
-+acxusb_e_close(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ int i;
-+
-+ FN_ENTER;
-+
-+#ifdef WE_STILL_DONT_CARE_ABOUT_IT
-+ /* Transmit a disassociate frame */
-+ lock
-+ acx_l_transmit_disassoc(adev, &client);
-+ unlock
-+#endif
-+
-+ acx_sem_lock(adev);
-+
-+ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
-+
-+/* Code below is remarkably similar to acxpci_s_down(). Maybe we can merge them? */
-+
-+ /* Make sure we don't get any more rx requests */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
-+
-+ /*
-+ * We must do FLUSH *without* holding sem to avoid a deadlock.
-+ * See pci.c:acxpci_s_down() for deails.
-+ */
-+ acx_sem_unlock(adev);
-+ FLUSH_SCHEDULED_WORK();
-+ acx_sem_lock(adev);
-+
-+ /* Power down the device */
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
-+
-+ /* Stop the transmit queue, mark the device as DOWN */
-+ acx_lock(adev, flags);
-+ acx_stop_queue(ndev, "on ifdown");
-+ acx_set_status(adev, ACX_STATUS_0_STOPPED);
-+ /* stop pending rx/tx urb transfers */
-+ for (i = 0; i < ACX_TX_URB_CNT; i++) {
-+ acxusb_unlink_urb(adev->usb_tx[i].urb);
-+ adev->usb_tx[i].busy = 0;
-+ }
-+ for (i = 0; i < ACX_RX_URB_CNT; i++) {
-+ acxusb_unlink_urb(adev->usb_rx[i].urb);
-+ adev->usb_rx[i].busy = 0;
-+ }
-+ adev->tx_free = ACX_TX_URB_CNT;
-+ acx_unlock(adev, flags);
-+
-+ /* Must do this outside of lock */
-+ del_timer_sync(&adev->mgmt_timer);
-+
-+ acx_sem_unlock(adev);
-+
-+ FN_EXIT0;
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_l_poll_rx
-+** This function (re)initiates a bulk-in USB transfer on a given urb
-+*/
-+static void
-+acxusb_l_poll_rx(acx_device_t *adev, usb_rx_t* rx)
-+{
-+ struct usb_device *usbdev;
-+ struct urb *rxurb;
-+ int errcode, rxnum;
-+ unsigned int inpipe;
-+
-+ FN_ENTER;
-+
-+ rxurb = rx->urb;
-+ usbdev = adev->usbdev;
-+
-+ rxnum = rx - adev->usb_rx;
-+
-+ inpipe = usb_rcvbulkpipe(usbdev, adev->bulkinep);
-+ if (unlikely(rxurb->status == -EINPROGRESS)) {
-+ printk(KERN_ERR "acx: error, rx triggered while rx urb in progress\n");
-+ /* FIXME: this is nasty, receive is being cancelled by this code
-+ * on the other hand, this should not happen anyway...
-+ */
-+ usb_unlink_urb(rxurb);
-+ } else
-+ if (unlikely(rxurb->status == -ECONNRESET)) {
-+ log(L_USBRXTX, "acx_usb: _poll_rx: connection reset\n");
-+ goto end;
-+ }
-+ rxurb->actual_length = 0;
-+ usb_fill_bulk_urb(rxurb, usbdev, inpipe,
-+ &rx->bulkin, /* dataptr */
-+ RXBUFSIZE, /* size */
-+ acxusb_i_complete_rx, /* handler */
-+ rx /* handler param */
-+ );
-+ rxurb->transfer_flags = URB_ASYNC_UNLINK;
-+
-+ /* ATOMIC: we may be called from complete_rx() usb callback */
-+ errcode = usb_submit_urb(rxurb, GFP_ATOMIC);
-+ /* FIXME: evaluate the error code! */
-+ log(L_USBRXTX, "SUBMIT RX (%d) inpipe=0x%X size=%d errcode=%d\n",
-+ rxnum, inpipe, (int) RXBUFSIZE, errcode);
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_i_complete_rx()
-+** Inputs:
-+** urb -> pointer to USB request block
-+** regs -> pointer to register-buffer for syscalls (see asm/ptrace.h)
-+**
-+** This function is invoked by USB subsystem whenever a bulk receive
-+** request returns.
-+** The received data is then committed to the network stack and the next
-+** USB receive is triggered.
-+*/
-+static void
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+acxusb_i_complete_rx(struct urb *urb)
-+#else
-+acxusb_i_complete_rx(struct urb *urb, struct pt_regs *regs)
-+#endif
-+{
-+ acx_device_t *adev;
-+ rxbuffer_t *ptr;
-+ rxbuffer_t *inbuf;
-+ usb_rx_t *rx;
-+ unsigned long flags;
-+ int size, remsize, packetsize, rxnum;
-+
-+ FN_ENTER;
-+
-+ BUG_ON(!urb->context);
-+
-+ rx = (usb_rx_t *)urb->context;
-+ adev = rx->adev;
-+
-+ acx_lock(adev, flags);
-+
-+ /*
-+ * Happens on disconnect or close. Don't play with the urb.
-+ * Don't resubmit it. It will get unlinked by close()
-+ */
-+ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) {
-+ log(L_USBRXTX, "rx: device is down, not doing anything\n");
-+ goto end_unlock;
-+ }
-+
-+ inbuf = &rx->bulkin;
-+ size = urb->actual_length;
-+ remsize = size;
-+ rxnum = rx - adev->usb_rx;
-+
-+ log(L_USBRXTX, "RETURN RX (%d) status=%d size=%d\n",
-+ rxnum, urb->status, size);
-+
-+ /* Send the URB that's waiting. */
-+ log(L_USBRXTX, "rxnum=%d, sending=%d\n", rxnum, rxnum^1);
-+ acxusb_l_poll_rx(adev, &adev->usb_rx[rxnum^1]);
-+
-+ if (unlikely(size > sizeof(rxbuffer_t)))
-+ printk("acx_usb: rx too large: %d, please report\n", size);
-+
-+ /* check if the transfer was aborted */
-+ switch (urb->status) {
-+ case 0: /* No error */
-+ break;
-+ case -EOVERFLOW:
-+ printk(KERN_ERR "acx: rx data overrun\n");
-+ adev->rxtruncsize = 0; /* Not valid anymore. */
-+ goto end_unlock;
-+ case -ECONNRESET:
-+ adev->rxtruncsize = 0;
-+ goto end_unlock;
-+ case -ESHUTDOWN: /* rmmod */
-+ adev->rxtruncsize = 0;
-+ goto end_unlock;
-+ default:
-+ adev->rxtruncsize = 0;
-+ adev->stats.rx_errors++;
-+ printk("acx: rx error (urb status=%d)\n", urb->status);
-+ goto end_unlock;
-+ }
-+
-+ if (unlikely(!size))
-+ printk("acx: warning, encountered zerolength rx packet\n");
-+
-+ if (urb->transfer_buffer != inbuf)
-+ goto end_unlock;
-+
-+ /* check if previous frame was truncated
-+ ** FIXME: this code can only handle truncation
-+ ** of consecutive packets!
-+ */
-+ ptr = inbuf;
-+ if (adev->rxtruncsize) {
-+ int tail_size;
-+
-+ ptr = &adev->rxtruncbuf;
-+ packetsize = RXBUF_BYTES_USED(ptr);
-+ if (acx_debug & L_USBRXTX) {
-+ printk("handling truncated frame (truncsize=%d size=%d "
-+ "packetsize(from trunc)=%d)\n",
-+ adev->rxtruncsize, size, packetsize);
-+ acx_dump_bytes(ptr, RXBUF_HDRSIZE);
-+ acx_dump_bytes(inbuf, RXBUF_HDRSIZE);
-+ }
-+
-+ /* bytes needed for rxtruncbuf completion: */
-+ tail_size = packetsize - adev->rxtruncsize;
-+
-+ if (size < tail_size) {
-+ /* there is not enough data to complete this packet,
-+ ** simply append the stuff to the truncation buffer
-+ */
-+ memcpy(((char *)ptr) + adev->rxtruncsize, inbuf, size);
-+ adev->rxtruncsize += size;
-+ remsize = 0;
-+ } else {
-+ /* ok, this data completes the previously
-+ ** truncated packet. copy it into a descriptor
-+ ** and give it to the rest of the stack */
-+
-+ /* append tail to previously truncated part
-+ ** NB: adev->rxtruncbuf (pointed to by ptr) can't
-+ ** overflow because this is already checked before
-+ ** truncation buffer was filled. See below,
-+ ** "if (packetsize > sizeof(rxbuffer_t))..." code */
-+ memcpy(((char *)ptr) + adev->rxtruncsize, inbuf, tail_size);
-+
-+ if (acx_debug & L_USBRXTX) {
-+ printk("full trailing packet + 12 bytes:\n");
-+ acx_dump_bytes(inbuf, tail_size + RXBUF_HDRSIZE);
-+ }
-+ acx_l_process_rxbuf(adev, ptr);
-+ adev->rxtruncsize = 0;
-+ ptr = (rxbuffer_t *) (((char *)inbuf) + tail_size);
-+ remsize -= tail_size;
-+ }
-+ log(L_USBRXTX, "post-merge size=%d remsize=%d\n",
-+ size, remsize);
-+ }
-+
-+ /* size = USB data block size
-+ ** remsize = unprocessed USB bytes left
-+ ** ptr = current pos in USB data block
-+ */
-+ while (remsize) {
-+ if (remsize < RXBUF_HDRSIZE) {
-+ printk("acx: truncated rx header (%d bytes)!\n",
-+ remsize);
-+ if (ACX_DEBUG)
-+ acx_dump_bytes(ptr, remsize);
-+ break;
-+ }
-+
-+ packetsize = RXBUF_BYTES_USED(ptr);
-+ log(L_USBRXTX, "packet with packetsize=%d\n", packetsize);
-+
-+ if (RXBUF_IS_TXSTAT(ptr)) {
-+ /* do rate handling */
-+ usb_txstatus_t *stat = (void*)ptr;
-+ u16 client_no = (u16)stat->hostdata;
-+
-+ log(L_USBRXTX, "tx: stat: mac_cnt_rcvd:%04X "
-+ "queue_index:%02X mac_status:%02X hostdata:%08X "
-+ "rate:%u ack_failures:%02X rts_failures:%02X "
-+ "rts_ok:%02X\n",
-+ stat->mac_cnt_rcvd,
-+ stat->queue_index, stat->mac_status, stat->hostdata,
-+ stat->rate, stat->ack_failures, stat->rts_failures,
-+ stat->rts_ok);
-+
-+ if (adev->rate_auto && client_no < VEC_SIZE(adev->sta_list)) {
-+ client_t *clt = &adev->sta_list[client_no];
-+ u16 cur = stat->hostdata >> 16;
-+
-+ if (clt && clt->rate_cur == cur) {
-+ acx_l_handle_txrate_auto(adev, clt,
-+ cur, /* intended rate */
-+ stat->rate, 0, /* actually used rate */
-+ stat->mac_status, /* error? */
-+ ACX_TX_URB_CNT - adev->tx_free);
-+ }
-+ }
-+ goto next;
-+ }
-+
-+ if (packetsize > sizeof(rxbuffer_t)) {
-+ printk("acx: packet exceeds max wlan "
-+ "frame size (%d > %d). size=%d\n",
-+ packetsize, (int) sizeof(rxbuffer_t), size);
-+ if (ACX_DEBUG)
-+ acx_dump_bytes(ptr, 16);
-+ /* FIXME: put some real error-handling in here! */
-+ break;
-+ }
-+
-+ if (packetsize > remsize) {
-+ /* frame truncation handling */
-+ if (acx_debug & L_USBRXTX) {
-+ printk("need to truncate packet, "
-+ "packetsize=%d remsize=%d "
-+ "size=%d bytes:",
-+ packetsize, remsize, size);
-+ acx_dump_bytes(ptr, RXBUF_HDRSIZE);
-+ }
-+ memcpy(&adev->rxtruncbuf, ptr, remsize);
-+ adev->rxtruncsize = remsize;
-+ break;
-+ }
-+
-+ /* packetsize <= remsize */
-+ /* now handle the received data */
-+ acx_l_process_rxbuf(adev, ptr);
-+next:
-+ ptr = (rxbuffer_t *)(((char *)ptr) + packetsize);
-+ remsize -= packetsize;
-+ if ((acx_debug & L_USBRXTX) && remsize) {
-+ printk("more than one packet in buffer, "
-+ "second packet hdr:");
-+ acx_dump_bytes(ptr, RXBUF_HDRSIZE);
-+ }
-+ }
-+
-+end_unlock:
-+ acx_unlock(adev, flags);
-+/* end: */
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acxusb_i_complete_tx()
-+** Inputs:
-+** urb -> pointer to USB request block
-+** regs -> pointer to register-buffer for syscalls (see asm/ptrace.h)
-+**
-+** This function is invoked upon termination of a USB transfer.
-+*/
-+static void
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-+acxusb_i_complete_tx(struct urb *urb)
-+#else
-+acxusb_i_complete_tx(struct urb *urb, struct pt_regs *regs)
-+#endif
-+{
-+ acx_device_t *adev;
-+ usb_tx_t *tx;
-+ unsigned long flags;
-+ int txnum;
-+
-+ FN_ENTER;
-+
-+ BUG_ON(!urb->context);
-+
-+ tx = (usb_tx_t *)urb->context;
-+ adev = tx->adev;
-+
-+ txnum = tx - adev->usb_tx;
-+
-+ acx_lock(adev, flags);
-+
-+ /*
-+ * If the iface isn't up, we don't have any right
-+ * to play with them. The urb may get unlinked.
-+ */
-+ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) {
-+ log(L_USBRXTX, "tx: device is down, not doing anything\n");
-+ goto end_unlock;
-+ }
-+
-+ log(L_USBRXTX, "RETURN TX (%d): status=%d size=%d\n",
-+ txnum, urb->status, urb->actual_length);
-+
-+ /* handle USB transfer errors */
-+ switch (urb->status) {
-+ case 0: /* No error */
-+ break;
-+ case -ESHUTDOWN:
-+ goto end_unlock;
-+ break;
-+ case -ECONNRESET:
-+ goto end_unlock;
-+ break;
-+ /* FIXME: real error-handling code here please */
-+ default:
-+ printk(KERN_ERR "acx: tx error, urb status=%d\n", urb->status);
-+ /* FIXME: real error-handling code here please */
-+ }
-+
-+ /* free the URB and check for more data */
-+ tx->busy = 0;
-+ adev->tx_free++;
-+ if ((adev->tx_free >= TX_START_QUEUE)
-+ && (adev->status == ACX_STATUS_4_ASSOCIATED)
-+ && (acx_queue_stopped(adev->ndev))
-+ ) {
-+ log(L_BUF, "tx: wake queue (%u free txbufs)\n",
-+ adev->tx_free);
-+ acx_wake_queue(adev->ndev, NULL);
-+ }
-+
-+end_unlock:
-+ acx_unlock(adev, flags);
-+/* end: */
-+ FN_EXIT0;
-+}
-+
-+
-+/***************************************************************
-+** acxusb_l_alloc_tx
-+** Actually returns a usb_tx_t* ptr
-+*/
-+tx_t*
-+acxusb_l_alloc_tx(acx_device_t *adev)
-+{
-+ usb_tx_t *tx;
-+ unsigned head;
-+
-+ FN_ENTER;
-+
-+ head = adev->tx_head;
-+ do {
-+ head = (head + 1) % ACX_TX_URB_CNT;
-+ if (!adev->usb_tx[head].busy) {
-+ log(L_USBRXTX, "allocated tx %d\n", head);
-+ tx = &adev->usb_tx[head];
-+ tx->busy = 1;
-+ adev->tx_free--;
-+ /* Keep a few free descs between head and tail of tx ring.
-+ ** It is not absolutely needed, just feels safer */
-+ if (adev->tx_free < TX_STOP_QUEUE) {
-+ log(L_BUF, "tx: stop queue "
-+ "(%u free txbufs)\n", adev->tx_free);
-+ acx_stop_queue(adev->ndev, NULL);
-+ }
-+ goto end;
-+ }
-+ } while (likely(head!=adev->tx_head));
-+ tx = NULL;
-+ printk_ratelimited("acx: tx buffers full\n");
-+end:
-+ adev->tx_head = head;
-+ FN_EXIT0;
-+ return (tx_t*)tx;
-+}
-+
-+
-+/***************************************************************
-+** Used if alloc_tx()'ed buffer needs to be cancelled without doing tx
-+*/
-+void
-+acxusb_l_dealloc_tx(tx_t *tx_opaque)
-+{
-+ usb_tx_t* tx = (usb_tx_t*)tx_opaque;
-+ tx->busy = 0;
-+}
-+
-+
-+/***************************************************************
-+*/
-+void*
-+acxusb_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
-+{
-+ usb_tx_t* tx = (usb_tx_t*)tx_opaque;
-+ return &tx->bulkout.data;
-+}
-+
-+
-+/***************************************************************
-+** acxusb_l_tx_data
-+**
-+** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
-+** Can be called from acx_i_start_xmit (data frames from net core).
-+*/
-+void
-+acxusb_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int wlanpkt_len)
-+{
-+ struct usb_device *usbdev;
-+ struct urb* txurb;
-+ usb_tx_t* tx;
-+ usb_txbuffer_t* txbuf;
-+ client_t *clt;
-+ wlan_hdr_t* whdr;
-+ unsigned int outpipe;
-+ int ucode, txnum;
-+
-+ FN_ENTER;
-+
-+ tx = ((usb_tx_t *)tx_opaque);
-+ txurb = tx->urb;
-+ txbuf = &tx->bulkout;
-+ whdr = (wlan_hdr_t *)txbuf->data;
-+ txnum = tx - adev->usb_tx;
-+
-+ log(L_DEBUG, "using buf#%d free=%d len=%d\n",
-+ txnum, adev->tx_free, wlanpkt_len);
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_3_AP:
-+ clt = acx_l_sta_list_get(adev, whdr->a1);
-+ break;
-+ case ACX_MODE_2_STA:
-+ clt = adev->ap_client;
-+ break;
-+ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
-+ clt = NULL;
-+ break;
-+ }
-+
-+ if (unlikely(clt && !clt->rate_cur)) {
-+ printk("acx: driver bug! bad ratemask\n");
-+ goto end;
-+ }
-+
-+ /* fill the USB transfer header */
-+ txbuf->desc = cpu_to_le16(USB_TXBUF_TXDESC);
-+ txbuf->mpdu_len = cpu_to_le16(wlanpkt_len);
-+ txbuf->queue_index = 1;
-+ if (clt) {
-+ txbuf->rate = clt->rate_100;
-+ txbuf->hostdata = (clt - adev->sta_list) | (clt->rate_cur << 16);
-+ } else {
-+ txbuf->rate = adev->rate_bcast100;
-+ txbuf->hostdata = ((u16)-1) | (adev->rate_bcast << 16);
-+ }
-+ txbuf->ctrl1 = DESC_CTL_FIRSTFRAG;
-+ if (1 == adev->preamble_cur)
-+ SET_BIT(txbuf->ctrl1, DESC_CTL_SHORT_PREAMBLE);
-+ txbuf->ctrl2 = 0;
-+ txbuf->data_len = cpu_to_le16(wlanpkt_len);
-+
-+ if (unlikely(acx_debug & L_DATA)) {
-+ printk("dump of bulk out urb:\n");
-+ acx_dump_bytes(txbuf, wlanpkt_len + USB_TXBUF_HDRSIZE);
-+ }
-+
-+ if (unlikely(txurb->status == -EINPROGRESS)) {
-+ printk("acx: trying to submit tx urb while already in progress\n");
-+ }
-+
-+ /* now schedule the USB transfer */
-+ usbdev = adev->usbdev;
-+ outpipe = usb_sndbulkpipe(usbdev, adev->bulkoutep);
-+
-+ usb_fill_bulk_urb(txurb, usbdev, outpipe,
-+ txbuf, /* dataptr */
-+ wlanpkt_len + USB_TXBUF_HDRSIZE, /* size */
-+ acxusb_i_complete_tx, /* handler */
-+ tx /* handler param */
-+ );
-+
-+ txurb->transfer_flags = URB_ASYNC_UNLINK|URB_ZERO_PACKET;
-+ ucode = usb_submit_urb(txurb, GFP_ATOMIC);
-+ log(L_USBRXTX, "SUBMIT TX (%d): outpipe=0x%X buf=%p txsize=%d "
-+ "rate=%u errcode=%d\n", txnum, outpipe, txbuf,
-+ wlanpkt_len + USB_TXBUF_HDRSIZE, txbuf->rate, ucode);
-+
-+ if (unlikely(ucode)) {
-+ printk(KERN_ERR "acx: submit_urb() error=%d txsize=%d\n",
-+ ucode, wlanpkt_len + USB_TXBUF_HDRSIZE);
-+
-+ /* on error, just mark the frame as done and update
-+ ** the statistics
-+ */
-+ adev->stats.tx_errors++;
-+ tx->busy = 0;
-+ adev->tx_free++;
-+ /* needed? if (adev->tx_free > TX_START_QUEUE) acx_wake_queue(...) */
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static void
-+acxusb_i_set_rx_mode(struct net_device *ndev)
-+{
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#ifdef HAVE_TX_TIMEOUT
-+static void
-+acxusb_i_tx_timeout(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ unsigned long flags;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+ /* unlink the URBs */
-+ for (i = 0; i < ACX_TX_URB_CNT; i++) {
-+ acxusb_unlink_urb(adev->usb_tx[i].urb);
-+ adev->usb_tx[i].busy = 0;
-+ }
-+ adev->tx_free = ACX_TX_URB_CNT;
-+ /* TODO: stats update */
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** init_module()
-+**
-+** This function is invoked upon loading of the kernel module.
-+** It registers itself at the kernel's USB subsystem.
-+**
-+** Returns: Errorcode on failure, 0 on success
-+*/
-+int __init
-+acxusb_e_init_module(void)
-+{
-+ log(L_INIT, "USB module " ACX_RELEASE " initialized, "
-+ "probing for devices...\n");
-+ return usb_register(&acxusb_driver);
-+}
-+
-+
-+
-+/***********************************************************************
-+** cleanup_module()
-+**
-+** This function is invoked as last step of the module unloading. It simply
-+** deregisters this module at the kernel's USB subsystem.
-+*/
-+void __exit
-+acxusb_e_cleanup_module()
-+{
-+ usb_deregister(&acxusb_driver);
-+}
-+
-+
-+/***********************************************************************
-+** DEBUG STUFF
-+*/
-+#if ACX_DEBUG
-+
-+#ifdef UNUSED
-+static void
-+dump_device(struct usb_device *usbdev)
-+{
-+ int i;
-+ struct usb_config_descriptor *cd;
-+
-+ printk("acx device dump:\n");
-+ printk(" devnum: %d\n", usbdev->devnum);
-+ printk(" speed: %d\n", usbdev->speed);
-+ printk(" tt: 0x%X\n", (unsigned int)(usbdev->tt));
-+ printk(" ttport: %d\n", (unsigned int)(usbdev->ttport));
-+ printk(" toggle[0]: 0x%X toggle[1]: 0x%X\n", (unsigned int)(usbdev->toggle[0]), (unsigned int)(usbdev->toggle[1]));
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-+ /* This saw a change after 2.6.10 */
-+ printk(" ep_in wMaxPacketSize: ");
-+ for (i = 0; i < 16; ++i)
-+ if (usbdev->ep_in[i] != NULL)
-+ printk("%d:%d ", i, usbdev->ep_in[i]->desc.wMaxPacketSize);
-+ printk("\n");
-+ printk(" ep_out wMaxPacketSize: ");
-+ for (i = 0; i < VEC_SIZE(usbdev->ep_out); ++i)
-+ if (usbdev->ep_out[i] != NULL)
-+ printk("%d:%d ", i, usbdev->ep_out[i]->desc.wMaxPacketSize);
-+ printk("\n");
-+#else
-+ printk(" epmaxpacketin: ");
-+ for (i = 0; i < 16; i++)
-+ printk("%d ", usbdev->epmaxpacketin[i]);
-+ printk("\n");
-+ printk(" epmaxpacketout: ");
-+ for (i = 0; i < 16; i++)
-+ printk("%d ", usbdev->epmaxpacketout[i]);
-+ printk("\n");
-+#endif
-+ printk(" parent: 0x%X\n", (unsigned int)usbdev->parent);
-+ printk(" bus: 0x%X\n", (unsigned int)usbdev->bus);
-+#ifdef NO_DATATYPE
-+ printk(" configs: ");
-+ for (i = 0; i < usbdev->descriptor.bNumConfigurations; i++)
-+ printk("0x%X ", usbdev->config[i]);
-+ printk("\n");
-+#endif
-+ printk(" actconfig: %p\n", usbdev->actconfig);
-+ dump_device_descriptor(&usbdev->descriptor);
-+
-+ cd = &usbdev->config->desc;
-+ dump_config_descriptor(cd);
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static void
-+dump_config_descriptor(struct usb_config_descriptor *cd)
-+{
-+ printk("Configuration Descriptor:\n");
-+ if (!cd) {
-+ printk("NULL\n");
-+ return;
-+ }
-+ printk(" bLength: %d (0x%X)\n", cd->bLength, cd->bLength);
-+ printk(" bDescriptorType: %d (0x%X)\n", cd->bDescriptorType, cd->bDescriptorType);
-+ printk(" bNumInterfaces: %d (0x%X)\n", cd->bNumInterfaces, cd->bNumInterfaces);
-+ printk(" bConfigurationValue: %d (0x%X)\n", cd->bConfigurationValue, cd->bConfigurationValue);
-+ printk(" iConfiguration: %d (0x%X)\n", cd->iConfiguration, cd->iConfiguration);
-+ printk(" bmAttributes: %d (0x%X)\n", cd->bmAttributes, cd->bmAttributes);
-+ /* printk(" MaxPower: %d (0x%X)\n", cd->bMaxPower, cd->bMaxPower); */
-+}
-+
-+
-+static void
-+dump_device_descriptor(struct usb_device_descriptor *dd)
-+{
-+ printk("Device Descriptor:\n");
-+ if (!dd) {
-+ printk("NULL\n");
-+ return;
-+ }
-+ printk(" bLength: %d (0x%X)\n", dd->bLength, dd->bLength);
-+ printk(" bDescriptortype: %d (0x%X)\n", dd->bDescriptorType, dd->bDescriptorType);
-+ printk(" bcdUSB: %d (0x%X)\n", dd->bcdUSB, dd->bcdUSB);
-+ printk(" bDeviceClass: %d (0x%X)\n", dd->bDeviceClass, dd->bDeviceClass);
-+ printk(" bDeviceSubClass: %d (0x%X)\n", dd->bDeviceSubClass, dd->bDeviceSubClass);
-+ printk(" bDeviceProtocol: %d (0x%X)\n", dd->bDeviceProtocol, dd->bDeviceProtocol);
-+ printk(" bMaxPacketSize0: %d (0x%X)\n", dd->bMaxPacketSize0, dd->bMaxPacketSize0);
-+ printk(" idVendor: %d (0x%X)\n", dd->idVendor, dd->idVendor);
-+ printk(" idProduct: %d (0x%X)\n", dd->idProduct, dd->idProduct);
-+ printk(" bcdDevice: %d (0x%X)\n", dd->bcdDevice, dd->bcdDevice);
-+ printk(" iManufacturer: %d (0x%X)\n", dd->iManufacturer, dd->iManufacturer);
-+ printk(" iProduct: %d (0x%X)\n", dd->iProduct, dd->iProduct);
-+ printk(" iSerialNumber: %d (0x%X)\n", dd->iSerialNumber, dd->iSerialNumber);
-+ printk(" bNumConfigurations: %d (0x%X)\n", dd->bNumConfigurations, dd->bNumConfigurations);
-+}
-+#endif /* UNUSED */
-+
-+#endif /* ACX_DEBUG */
-Index: linux-2.6.22/drivers/net/wireless/acx/wlan.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/wlan.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,424 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** This code is based on elements which are
-+** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
-+** info@linux-wlan.com
-+** http://www.linux-wlan.com
-+*/
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+#include <linux/types.h>
-+#include <linux/if_arp.h>
-+#include <linux/wireless.h>
-+#include <net/iw_handler.h>
-+
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+*/
-+#define LOG_BAD_EID(hdr,len,ie_ptr) acx_log_bad_eid(hdr, len, ((wlan_ie_t*)ie_ptr))
-+
-+#define IE_EID(ie_ptr) (((wlan_ie_t*)(ie_ptr))->eid)
-+#define IE_LEN(ie_ptr) (((wlan_ie_t*)(ie_ptr))->len)
-+#define OFFSET(hdr,off) (WLAN_HDR_A3_DATAP(hdr) + (off))
-+
-+
-+/***********************************************************************
-+** wlan_mgmt_decode_XXX
-+**
-+** Given a complete frame in f->hdr, sets the pointers in f to
-+** the areas that correspond to the parts of the frame.
-+**
-+** Assumptions:
-+** 1) f->len and f->hdr are already set
-+** 2) f->len is the length of the MAC header + data, the FCS
-+** is NOT included
-+** 3) all members except len and hdr are zero
-+** Arguments:
-+** f frame structure
-+**
-+** Returns:
-+** nothing
-+**
-+** Side effects:
-+** frame structure members are pointing at their
-+** respective portions of the frame buffer.
-+*/
-+void
-+wlan_mgmt_decode_beacon(wlan_fr_beacon_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+ f->type = WLAN_FSTYPE_BEACON;
-+
-+ /*-- Fixed Fields ----*/
-+ f->ts = (u64 *) OFFSET(f->hdr, WLAN_BEACON_OFF_TS);
-+ f->bcn_int = (u16 *) OFFSET(f->hdr, WLAN_BEACON_OFF_BCN_INT);
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_BEACON_OFF_CAPINFO);
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_BEACON_OFF_SSID);
-+ while (ie_ptr < end) {
-+ switch (IE_EID(ie_ptr)) {
-+ case WLAN_EID_SSID:
-+ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_SUPP_RATES:
-+ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_EXT_RATES:
-+ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_FH_PARMS:
-+ f->fh_parms = (wlan_ie_fh_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_DS_PARMS:
-+ f->ds_parms = (wlan_ie_ds_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_CF_PARMS:
-+ f->cf_parms = (wlan_ie_cf_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_IBSS_PARMS:
-+ f->ibss_parms = (wlan_ie_ibss_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_TIM:
-+ f->tim = (wlan_ie_tim_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_ERP_INFO:
-+ f->erp = (wlan_ie_erp_t *) ie_ptr;
-+ break;
-+
-+ case WLAN_EID_COUNTRY:
-+ /* was seen: 07 06 47 42 20 01 0D 14 */
-+ case WLAN_EID_PWR_CONSTRAINT:
-+ /* was seen by Ashwin Mansinghka <ashwin_man@yahoo.com> from
-+ Atheros-based PCI card in AP mode using madwifi drivers: */
-+ /* 20 01 00 */
-+ case WLAN_EID_NONERP:
-+ /* was seen from WRT54GS with OpenWrt: 2F 01 07 */
-+ case WLAN_EID_UNKNOWN128:
-+ /* was seen by Jacek Jablonski <conexion2000@gmail.com> from Orinoco AP */
-+ /* 80 06 00 60 1D 2C 3B 00 */
-+ case WLAN_EID_UNKNOWN133:
-+ /* was seen by David Bronaugh <dbronaugh@linuxboxen.org> from ???? */
-+ /* 85 1E 00 00 84 12 07 00 FF 00 11 00 61 70 63 31 */
-+ /* 63 73 72 30 34 32 00 00 00 00 00 00 00 00 00 25 */
-+ case WLAN_EID_UNKNOWN223:
-+ /* was seen by Carlos Martin <carlosmn@gmail.com> from ???? */
-+ /* DF 20 01 1E 04 00 00 00 06 63 09 02 FF 0F 30 30 */
-+ /* 30 42 36 42 33 34 30 39 46 31 00 00 00 00 00 00 00 00 */
-+ case WLAN_EID_GENERIC:
-+ /* WPA: hostap code:
-+ if (pos[1] >= 4 &&
-+ pos[2] == 0x00 && pos[3] == 0x50 &&
-+ pos[4] == 0xf2 && pos[5] == 1) {
-+ wpa = pos;
-+ wpa_len = pos[1] + 2;
-+ }
-+ TI x4 mode: seen DD 04 08 00 28 00
-+ (08 00 28 is TI's OUI)
-+ last byte is probably 0/1 - disabled/enabled
-+ */
-+ case WLAN_EID_RSN:
-+ /* hostap does something with it:
-+ rsn = pos;
-+ rsn_len = pos[1] + 2;
-+ */
-+ break;
-+
-+ default:
-+ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
-+ break;
-+ }
-+ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
-+ }
-+}
-+
-+
-+#ifdef UNUSED
-+void wlan_mgmt_decode_ibssatim(wlan_fr_ibssatim_t * f)
-+{
-+ f->type = WLAN_FSTYPE_ATIM;
-+ /*-- Fixed Fields ----*/
-+ /*-- Information elements */
-+}
-+#endif /* UNUSED */
-+
-+void
-+wlan_mgmt_decode_disassoc(wlan_fr_disassoc_t * f)
-+{
-+ f->type = WLAN_FSTYPE_DISASSOC;
-+
-+ /*-- Fixed Fields ----*/
-+ f->reason = (u16 *) OFFSET(f->hdr, WLAN_DISASSOC_OFF_REASON);
-+
-+ /*-- Information elements */
-+}
-+
-+
-+void
-+wlan_mgmt_decode_assocreq(wlan_fr_assocreq_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+
-+ f->type = WLAN_FSTYPE_ASSOCREQ;
-+
-+ /*-- Fixed Fields ----*/
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_CAP_INFO);
-+ f->listen_int = (u16 *) OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_LISTEN_INT);
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_SSID);
-+ while (ie_ptr < end) {
-+ switch (IE_EID(ie_ptr)) {
-+ case WLAN_EID_SSID:
-+ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_SUPP_RATES:
-+ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_EXT_RATES:
-+ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ default:
-+ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
-+ break;
-+ }
-+ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
-+ }
-+}
-+
-+
-+void
-+wlan_mgmt_decode_assocresp(wlan_fr_assocresp_t * f)
-+{
-+ f->type = WLAN_FSTYPE_ASSOCRESP;
-+
-+ /*-- Fixed Fields ----*/
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_CAP_INFO);
-+ f->status = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_STATUS);
-+ f->aid = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_AID);
-+
-+ /*-- Information elements */
-+ f->supp_rates = (wlan_ie_supp_rates_t *)
-+ OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_SUPP_RATES);
-+}
-+
-+
-+#ifdef UNUSED
-+void
-+wlan_mgmt_decode_reassocreq(wlan_fr_reassocreq_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+ f->type = WLAN_FSTYPE_REASSOCREQ;
-+
-+ /*-- Fixed Fields ----*/
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_CAP_INFO);
-+ f->listen_int = (u16 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_LISTEN_INT);
-+ f->curr_ap = (u8 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_CURR_AP);
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_SSID);
-+ while (ie_ptr < end) {
-+ switch (IE_EID(ie_ptr)) {
-+ case WLAN_EID_SSID:
-+ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_SUPP_RATES:
-+ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_EXT_RATES:
-+ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ default:
-+ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
-+ break;
-+ }
-+ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
-+ }
-+}
-+
-+
-+void
-+wlan_mgmt_decode_reassocresp(wlan_fr_reassocresp_t * f)
-+{
-+ f->type = WLAN_FSTYPE_REASSOCRESP;
-+
-+ /*-- Fixed Fields ----*/
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_CAP_INFO);
-+ f->status = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_STATUS);
-+ f->aid = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_AID);
-+
-+ /*-- Information elements */
-+ f->supp_rates = (wlan_ie_supp_rates_t *)
-+ OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_SUPP_RATES);
-+}
-+
-+
-+void
-+wlan_mgmt_decode_probereq(wlan_fr_probereq_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+ f->type = WLAN_FSTYPE_PROBEREQ;
-+
-+ /*-- Fixed Fields ----*/
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_PROBEREQ_OFF_SSID);
-+ while (ie_ptr < end) {
-+ switch (IE_EID(ie_ptr)) {
-+ case WLAN_EID_SSID:
-+ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_SUPP_RATES:
-+ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_EXT_RATES:
-+ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ default:
-+ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
-+ break;
-+ }
-+ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
-+ }
-+}
-+#endif /* UNUSED */
-+
-+
-+/* TODO: decoding of beacon and proberesp can be merged (similar structure) */
-+void
-+wlan_mgmt_decode_proberesp(wlan_fr_proberesp_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+ f->type = WLAN_FSTYPE_PROBERESP;
-+
-+ /*-- Fixed Fields ----*/
-+ f->ts = (u64 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_TS);
-+ f->bcn_int = (u16 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_BCN_INT);
-+ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_CAP_INFO);
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_PROBERESP_OFF_SSID);
-+ while (ie_ptr < end) {
-+ switch (IE_EID(ie_ptr)) {
-+ case WLAN_EID_SSID:
-+ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_SUPP_RATES:
-+ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_EXT_RATES:
-+ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_FH_PARMS:
-+ f->fh_parms = (wlan_ie_fh_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_DS_PARMS:
-+ f->ds_parms = (wlan_ie_ds_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_CF_PARMS:
-+ f->cf_parms = (wlan_ie_cf_parms_t *) ie_ptr;
-+ break;
-+ case WLAN_EID_IBSS_PARMS:
-+ f->ibss_parms = (wlan_ie_ibss_parms_t *) ie_ptr;
-+ break;
-+#ifdef DONT_DO_IT_ADD_REAL_HANDLING_INSTEAD
-+ case WLAN_EID_COUNTRY:
-+ break;
-+ ...
-+#endif
-+#ifdef SENT_HERE_BY_OPENWRT
-+ /* should those be trapped or handled?? */
-+ case WLAN_EID_ERP_INFO:
-+ break;
-+ case WLAN_EID_NONERP:
-+ break;
-+ case WLAN_EID_GENERIC:
-+ break;
-+#endif
-+ default:
-+ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
-+ break;
-+ }
-+
-+ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
-+ }
-+}
-+
-+
-+void
-+wlan_mgmt_decode_authen(wlan_fr_authen_t * f)
-+{
-+ u8 *ie_ptr;
-+ u8 *end = (u8*)f->hdr + f->len;
-+
-+ f->type = WLAN_FSTYPE_AUTHEN;
-+
-+ /*-- Fixed Fields ----*/
-+ f->auth_alg = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_AUTH_ALG);
-+ f->auth_seq = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_AUTH_SEQ);
-+ f->status = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_STATUS);
-+
-+ /*-- Information elements */
-+ ie_ptr = OFFSET(f->hdr, WLAN_AUTHEN_OFF_CHALLENGE);
-+ if ((ie_ptr < end) && (IE_EID(ie_ptr) == WLAN_EID_CHALLENGE)) {
-+ f->challenge = (wlan_ie_challenge_t *) ie_ptr;
-+ }
-+}
-+
-+
-+void
-+wlan_mgmt_decode_deauthen(wlan_fr_deauthen_t * f)
-+{
-+ f->type = WLAN_FSTYPE_DEAUTHEN;
-+
-+ /*-- Fixed Fields ----*/
-+ f->reason = (u16 *) OFFSET(f->hdr, WLAN_DEAUTHEN_OFF_REASON);
-+
-+ /*-- Information elements */
-+}
-Index: linux-2.6.22/drivers/net/wireless/acx/wlan_compat.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/wlan_compat.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,260 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** This code is based on elements which are
-+** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
-+** info@linux-wlan.com
-+** http://www.linux-wlan.com
-+*/
-+
-+/*=============================================================*/
-+/*------ Establish Platform Identity --------------------------*/
-+/*=============================================================*/
-+/* Key macros: */
-+/* WLAN_CPU_FAMILY */
-+#define WLAN_Ix86 1
-+#define WLAN_PPC 2
-+#define WLAN_Ix96 3
-+#define WLAN_ARM 4
-+#define WLAN_ALPHA 5
-+#define WLAN_MIPS 6
-+#define WLAN_HPPA 7
-+#define WLAN_SPARC 8
-+#define WLAN_SH 9
-+#define WLAN_x86_64 10
-+/* WLAN_CPU_CORE */
-+#define WLAN_I386CORE 1
-+#define WLAN_PPCCORE 2
-+#define WLAN_I296 3
-+#define WLAN_ARMCORE 4
-+#define WLAN_ALPHACORE 5
-+#define WLAN_MIPSCORE 6
-+#define WLAN_HPPACORE 7
-+/* WLAN_CPU_PART */
-+#define WLAN_I386PART 1
-+#define WLAN_MPC860 2
-+#define WLAN_MPC823 3
-+#define WLAN_I296SA 4
-+#define WLAN_PPCPART 5
-+#define WLAN_ARMPART 6
-+#define WLAN_ALPHAPART 7
-+#define WLAN_MIPSPART 8
-+#define WLAN_HPPAPART 9
-+/* WLAN_SYSARCH */
-+#define WLAN_PCAT 1
-+#define WLAN_MBX 2
-+#define WLAN_RPX 3
-+#define WLAN_LWARCH 4
-+#define WLAN_PMAC 5
-+#define WLAN_SKIFF 6
-+#define WLAN_BITSY 7
-+#define WLAN_ALPHAARCH 7
-+#define WLAN_MIPSARCH 9
-+#define WLAN_HPPAARCH 10
-+/* WLAN_HOSTIF (generally set on the command line, not detected) */
-+#define WLAN_PCMCIA 1
-+#define WLAN_ISA 2
-+#define WLAN_PCI 3
-+#define WLAN_USB 4
-+#define WLAN_PLX 5
-+
-+/* Note: the PLX HOSTIF above refers to some vendors implementations for */
-+/* PCI. It's a PLX chip that is a PCI to PCMCIA adapter, but it */
-+/* isn't a real PCMCIA host interface adapter providing all the */
-+/* card&socket services. */
-+
-+#ifdef __powerpc__
-+#ifndef __ppc__
-+#define __ppc__
-+#endif
-+#endif
-+
-+#if (defined(CONFIG_PPC) || defined(CONFIG_8xx))
-+#ifndef __ppc__
-+#define __ppc__
-+#endif
-+#endif
-+
-+#if defined(__x86_64__)
-+ #define WLAN_CPU_FAMILY WLAN_x86_64
-+ #define WLAN_SYSARCH WLAN_PCAT
-+#elif defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__)
-+ #define WLAN_CPU_FAMILY WLAN_Ix86
-+ #define WLAN_CPU_CORE WLAN_I386CORE
-+ #define WLAN_CPU_PART WLAN_I386PART
-+ #define WLAN_SYSARCH WLAN_PCAT
-+#elif defined(__ppc__)
-+ #define WLAN_CPU_FAMILY WLAN_PPC
-+ #define WLAN_CPU_CORE WLAN_PPCCORE
-+ #if defined(CONFIG_MBX)
-+ #define WLAN_CPU_PART WLAN_MPC860
-+ #define WLAN_SYSARCH WLAN_MBX
-+ #elif defined(CONFIG_RPXLITE)
-+ #define WLAN_CPU_PART WLAN_MPC823
-+ #define WLAN_SYSARCH WLAN_RPX
-+ #elif defined(CONFIG_RPXCLASSIC)
-+ #define WLAN_CPU_PART WLAN_MPC860
-+ #define WLAN_SYSARCH WLAN_RPX
-+ #else
-+ #define WLAN_CPU_PART WLAN_PPCPART
-+ #define WLAN_SYSARCH WLAN_PMAC
-+ #endif
-+#elif defined(__arm__)
-+ #define WLAN_CPU_FAMILY WLAN_ARM
-+ #define WLAN_CPU_CORE WLAN_ARMCORE
-+ #define WLAN_CPU_PART WLAN_ARM_PART
-+ #define WLAN_SYSARCH WLAN_SKIFF
-+#elif defined(__alpha__)
-+ #define WLAN_CPU_FAMILY WLAN_ALPHA
-+ #define WLAN_CPU_CORE WLAN_ALPHACORE
-+ #define WLAN_CPU_PART WLAN_ALPHAPART
-+ #define WLAN_SYSARCH WLAN_ALPHAARCH
-+#elif defined(__mips__)
-+ #define WLAN_CPU_FAMILY WLAN_MIPS
-+ #define WLAN_CPU_CORE WLAN_MIPSCORE
-+ #define WLAN_CPU_PART WLAN_MIPSPART
-+ #define WLAN_SYSARCH WLAN_MIPSARCH
-+#elif defined(__hppa__)
-+ #define WLAN_CPU_FAMILY WLAN_HPPA
-+ #define WLAN_CPU_CORE WLAN_HPPACORE
-+ #define WLAN_CPU_PART WLAN_HPPAPART
-+ #define WLAN_SYSARCH WLAN_HPPAARCH
-+#elif defined(__sparc__)
-+ #define WLAN_CPU_FAMILY WLAN_SPARC
-+ #define WLAN_SYSARCH WLAN_SPARC
-+#elif defined(__sh__)
-+ #define WLAN_CPU_FAMILY WLAN_SH
-+ #define WLAN_SYSARCH WLAN_SHARCH
-+ #ifndef __LITTLE_ENDIAN__
-+ #define __LITTLE_ENDIAN__
-+ #endif
-+#else
-+ #error "No CPU identified!"
-+#endif
-+
-+/*
-+ Some big endian machines implicitly do all I/O in little endian mode.
-+
-+ In particular:
-+ Linux/PPC on PowerMacs (PCI)
-+ Arm/Intel Xscale (PCI)
-+
-+ This may also affect PLX boards and other BE &| PPC platforms;
-+ as new ones are discovered, add them below.
-+*/
-+
-+#if ((WLAN_SYSARCH == WLAN_SKIFF) || (WLAN_SYSARCH == WLAN_PMAC))
-+#define REVERSE_ENDIAN
-+#endif
-+
-+/*=============================================================*/
-+/*------ Hardware Portability Macros --------------------------*/
-+/*=============================================================*/
-+#if (WLAN_CPU_FAMILY == WLAN_PPC)
-+#define wlan_inw(a) in_be16((unsigned short *)((a)+_IO_BASE))
-+#define wlan_inw_le16_to_cpu(a) inw((a))
-+#define wlan_outw(v,a) out_be16((unsigned short *)((a)+_IO_BASE), (v))
-+#define wlan_outw_cpu_to_le16(v,a) outw((v),(a))
-+#else
-+#define wlan_inw(a) inw((a))
-+#define wlan_inw_le16_to_cpu(a) __cpu_to_le16(inw((a)))
-+#define wlan_outw(v,a) outw((v),(a))
-+#define wlan_outw_cpu_to_le16(v,a) outw(__cpu_to_le16((v)),(a))
-+#endif
-+
-+/*=============================================================*/
-+/*------ Bit settings -----------------------------------------*/
-+/*=============================================================*/
-+#define ieee2host16(n) __le16_to_cpu(n)
-+#define ieee2host32(n) __le32_to_cpu(n)
-+#define host2ieee16(n) __cpu_to_le16(n)
-+#define host2ieee32(n) __cpu_to_le32(n)
-+
-+/* for constants */
-+#ifdef __LITTLE_ENDIAN
-+ #define IEEE16(a,n) a = n, a##i = n,
-+#else
-+ #ifdef __BIG_ENDIAN
-+ /* shifts would produce gcc warnings. Oh well... */
-+ #define IEEE16(a,n) a = n, a##i = ((n&0xff)*256 + ((n&0xff00)/256)),
-+ #else
-+ #error give me endianness or give me death
-+ #endif
-+#endif
-+
-+/*=============================================================*/
-+/*------ Compiler Portability Macros --------------------------*/
-+/*=============================================================*/
-+#define WLAN_PACKED __attribute__ ((packed))
-+
-+/* Interrupt handler backwards compatibility stuff */
-+#ifndef IRQ_NONE
-+#define IRQ_NONE
-+#define IRQ_HANDLED
-+typedef void irqreturn_t;
-+#endif
-+
-+#ifndef ARPHRD_IEEE80211_PRISM
-+#define ARPHRD_IEEE80211_PRISM 802
-+#endif
-+
-+#define ETH_P_80211_RAW (ETH_P_ECONET + 1)
-+
-+/*============================================================================*
-+ * Constants *
-+ *============================================================================*/
-+#define WLAN_IEEE_OUI_LEN 3
-+
-+/*============================================================================*
-+ * Types *
-+ *============================================================================*/
-+
-+/* local ether header type */
-+typedef struct wlan_ethhdr {
-+ u8 daddr[ETH_ALEN];
-+ u8 saddr[ETH_ALEN];
-+ u16 type;
-+} WLAN_PACKED wlan_ethhdr_t;
-+
-+/* local llc header type */
-+typedef struct wlan_llc {
-+ u8 dsap;
-+ u8 ssap;
-+ u8 ctl;
-+} WLAN_PACKED wlan_llc_t;
-+
-+/* local snap header type */
-+typedef struct wlan_snap {
-+ u8 oui[WLAN_IEEE_OUI_LEN];
-+ u16 type;
-+} WLAN_PACKED wlan_snap_t;
-Index: linux-2.6.22/drivers/net/wireless/acx/wlan_hdr.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/wlan_hdr.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,497 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** This code is based on elements which are
-+** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
-+** info@linux-wlan.com
-+** http://www.linux-wlan.com
-+*/
-+
-+/* mini-doc
-+
-+Here are all 11b/11g/11a rates and modulations:
-+
-+ 11b 11g 11a
-+ --- --- ---
-+ 1 |B |B |
-+ 2 |Q |Q |
-+ 5.5|Cp |C p|
-+ 6 | |Od |O
-+ 9 | |od |o
-+11 |Cp |C p|
-+12 | |Od |O
-+18 | |od |o
-+22 | | p|
-+24 | |Od |O
-+33 | | p|
-+36 | |od |o
-+48 | |od |o
-+54 | |od |o
-+
-+Mandatory:
-+ B - DBPSK (Differential Binary Phase Shift Keying)
-+ Q - DQPSK (Differential Quaternary Phase Shift Keying)
-+ C - CCK (Complementary Code Keying, a form of DSSS
-+ (Direct Sequence Spread Spectrum) modulation)
-+ O - OFDM (Orthogonal Frequency Division Multiplexing)
-+Optional:
-+ o - OFDM
-+ d - CCK-OFDM (also known as DSSS-OFDM)
-+ p - PBCC (Packet Binary Convolutional Coding)
-+
-+The term CCK-OFDM may be used interchangeably with DSSS-OFDM
-+(the IEEE 802.11g-2003 standard uses the latter terminology).
-+In the CCK-OFDM, the PLCP header of the frame uses the CCK form of DSSS,
-+while the PLCP payload (the MAC frame) is modulated using OFDM.
-+
-+Basically, you must use CCK-OFDM if you have mixed 11b/11g environment,
-+or else (pure OFDM) 11b equipment may not realize that AP
-+is sending a packet and start sending its own one.
-+Sadly, looks like acx111 does not support CCK-OFDM, only pure OFDM.
-+
-+Re PBCC: avoid using it. It makes sense only if you have
-+TI "11b+" hardware. You _must_ use PBCC in order to reach 22Mbps on it.
-+
-+Preambles:
-+
-+Long preamble (at 1Mbit rate, takes 144 us):
-+ 16 bytes ones
-+ 2 bytes 0xF3A0 (lsb sent first)
-+PLCP header follows (at 1Mbit also):
-+ 1 byte Signal: speed, in 0.1Mbit units, except for:
-+ 33Mbit: 33 (instead of 330 - doesn't fit in octet)
-+ all CCK-OFDM rates: 30
-+ 1 byte Service
-+ 0,1,4: reserved
-+ 2: 1=locked clock
-+ 3: 1=PBCC
-+ 5: Length Extension (PBCC 22,33Mbit (11g only)) <-
-+ 6: Length Extension (PBCC 22,33Mbit (11g only)) <- BLACK MAGIC HERE
-+ 7: Length Extension <-
-+ 2 bytes Length (time needed to tx this frame)
-+ a) 5.5 Mbit/s CCK
-+ Length = octets*8/5.5, rounded up to integer
-+ b) 11 Mbit/s CCK
-+ Length = octets*8/11, rounded up to integer
-+ Service bit 7:
-+ 0 = rounding took less than 8/11
-+ 1 = rounding took more than or equal to 8/11
-+ c) 5.5 Mbit/s PBCC
-+ Length = (octets+1)*8/5.5, rounded up to integer
-+ d) 11 Mbit/s PBCC
-+ Length = (octets+1)*8/11, rounded up to integer
-+ Service bit 7:
-+ 0 = rounding took less than 8/11
-+ 1 = rounding took more than or equal to 8/11
-+ e) 22 Mbit/s PBCC
-+ Length = (octets+1)*8/22, rounded up to integer
-+ Service bits 6,7:
-+ 00 = rounding took less than 8/22ths
-+ 01 = rounding took 8/22...15/22ths
-+ 10 = rounding took 16/22ths or more.
-+ f) 33 Mbit/s PBCC
-+ Length = (octets+1)*8/33, rounded up to integer
-+ Service bits 5,6,7:
-+ 000 rounding took less than 8/33
-+ 001 rounding took 8/33...15/33
-+ 010 rounding took 16/33...23/33
-+ 011 rounding took 24/33...31/33
-+ 100 rounding took 32/33 or more
-+ 2 bytes CRC
-+
-+PSDU follows (up to 2346 bytes at selected rate)
-+
-+While Signal value alone is not enough to determine rate and modulation,
-+Signal+Service is always sufficient.
-+
-+Short preamble (at 1Mbit rate, takes 72 us):
-+ 7 bytes zeroes
-+ 2 bytes 0x05CF (lsb sent first)
-+PLCP header follows *at 2Mbit/s*. Format is the same as in long preamble.
-+PSDU follows (up to 2346 bytes at selected rate)
-+
-+OFDM preamble is completely different, uses OFDM
-+modulation from the start and thus easily identifiable.
-+Not shown here.
-+*/
-+
-+
-+/***********************************************************************
-+** Constants
-+*/
-+
-+#define WLAN_HDR_A3_LEN 24
-+#define WLAN_HDR_A4_LEN 30
-+/* IV structure:
-+** 3 bytes: Initialization Vector (24 bits)
-+** 1 byte: 0..5: padding, must be 0; 6..7: key selector (0-3)
-+*/
-+#define WLAN_WEP_IV_LEN 4
-+/* 802.11 says 2312 but looks like 2312 is a max size of _WEPed data_ */
-+#define WLAN_DATA_MAXLEN 2304
-+#define WLAN_WEP_ICV_LEN 4
-+#define WLAN_FCS_LEN 4
-+#define WLAN_A3FR_MAXLEN (WLAN_HDR_A3_LEN + WLAN_DATA_MAXLEN)
-+#define WLAN_A4FR_MAXLEN (WLAN_HDR_A4_LEN + WLAN_DATA_MAXLEN)
-+#define WLAN_A3FR_MAXLEN_FCS (WLAN_HDR_A3_LEN + WLAN_DATA_MAXLEN + 4)
-+#define WLAN_A4FR_MAXLEN_FCS (WLAN_HDR_A4_LEN + WLAN_DATA_MAXLEN + 4)
-+#define WLAN_A3FR_MAXLEN_WEP (WLAN_A3FR_MAXLEN + 8)
-+#define WLAN_A4FR_MAXLEN_WEP (WLAN_A4FR_MAXLEN + 8)
-+#define WLAN_A3FR_MAXLEN_WEP_FCS (WLAN_A3FR_MAXLEN_FCS + 8)
-+#define WLAN_A4FR_MAXLEN_WEP_FCS (WLAN_A4FR_MAXLEN_FCS + 8)
-+
-+#define WLAN_BSS_TS_LEN 8
-+#define WLAN_SSID_MAXLEN 32
-+#define WLAN_BEACON_FR_MAXLEN (WLAN_HDR_A3_LEN + 334)
-+#define WLAN_ATIM_FR_MAXLEN (WLAN_HDR_A3_LEN + 0)
-+#define WLAN_DISASSOC_FR_MAXLEN (WLAN_HDR_A3_LEN + 2)
-+#define WLAN_ASSOCREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 48)
-+#define WLAN_ASSOCRESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 16)
-+#define WLAN_REASSOCREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 54)
-+#define WLAN_REASSOCRESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 16)
-+#define WLAN_PROBEREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 44)
-+#define WLAN_PROBERESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 78)
-+#define WLAN_AUTHEN_FR_MAXLEN (WLAN_HDR_A3_LEN + 261)
-+#define WLAN_DEAUTHEN_FR_MAXLEN (WLAN_HDR_A3_LEN + 2)
-+#define WLAN_CHALLENGE_IE_LEN 130
-+#define WLAN_CHALLENGE_LEN 128
-+#define WLAN_WEP_MAXKEYLEN 13
-+#define WLAN_WEP_NKEYS 4
-+
-+/*--- Frame Control Field -------------------------------------*/
-+/* Frame Types */
-+#define WLAN_FTYPE_MGMT 0x00
-+#define WLAN_FTYPE_CTL 0x01
-+#define WLAN_FTYPE_DATA 0x02
-+
-+/* Frame subtypes */
-+/* Management */
-+#define WLAN_FSTYPE_ASSOCREQ 0x00
-+#define WLAN_FSTYPE_ASSOCRESP 0x01
-+#define WLAN_FSTYPE_REASSOCREQ 0x02
-+#define WLAN_FSTYPE_REASSOCRESP 0x03
-+#define WLAN_FSTYPE_PROBEREQ 0x04
-+#define WLAN_FSTYPE_PROBERESP 0x05
-+#define WLAN_FSTYPE_BEACON 0x08
-+#define WLAN_FSTYPE_ATIM 0x09
-+#define WLAN_FSTYPE_DISASSOC 0x0a
-+#define WLAN_FSTYPE_AUTHEN 0x0b
-+#define WLAN_FSTYPE_DEAUTHEN 0x0c
-+
-+/* Control */
-+#define WLAN_FSTYPE_PSPOLL 0x0a
-+#define WLAN_FSTYPE_RTS 0x0b
-+#define WLAN_FSTYPE_CTS 0x0c
-+#define WLAN_FSTYPE_ACK 0x0d
-+#define WLAN_FSTYPE_CFEND 0x0e
-+#define WLAN_FSTYPE_CFENDCFACK 0x0f
-+
-+/* Data */
-+#define WLAN_FSTYPE_DATAONLY 0x00
-+#define WLAN_FSTYPE_DATA_CFACK 0x01
-+#define WLAN_FSTYPE_DATA_CFPOLL 0x02
-+#define WLAN_FSTYPE_DATA_CFACK_CFPOLL 0x03
-+#define WLAN_FSTYPE_NULL 0x04
-+#define WLAN_FSTYPE_CFACK 0x05
-+#define WLAN_FSTYPE_CFPOLL 0x06
-+#define WLAN_FSTYPE_CFACK_CFPOLL 0x07
-+
-+/*--- FC Constants v. 2.0 ------------------------------------*/
-+/* Each constant is defined twice: WF_CONST is in host */
-+/* byteorder, WF_CONSTi is in ieee byteorder. */
-+/* Usage: */
-+/* printf("the frame subtype is %X", WF_FC_FTYPEi & rx.fc); */
-+/* tx.fc = WF_FTYPE_CTLi | WF_FSTYPE_RTSi; */
-+/*------------------------------------------------------------*/
-+
-+enum {
-+/*--- Frame Control Field -------------------------------------*/
-+/* Protocol version: always 0 for current 802.11 standards */
-+IEEE16(WF_FC_PVER, 0x0003)
-+IEEE16(WF_FC_FTYPE, 0x000c)
-+IEEE16(WF_FC_FSTYPE, 0x00f0)
-+IEEE16(WF_FC_TODS, 0x0100)
-+IEEE16(WF_FC_FROMDS, 0x0200)
-+IEEE16(WF_FC_FROMTODS, 0x0300)
-+IEEE16(WF_FC_MOREFRAG, 0x0400)
-+IEEE16(WF_FC_RETRY, 0x0800)
-+/* Indicates PS mode in which STA will be after successful completion
-+** of current frame exchange sequence. Always 0 for AP frames */
-+IEEE16(WF_FC_PWRMGT, 0x1000)
-+/* What MoreData=1 means:
-+** From AP to STA in PS mode: don't sleep yet, I have more frames for you
-+** From Contention-Free (CF) Pollable STA in response to a CF-Poll:
-+** STA has buffered frames for transmission in response to next CF-Poll
-+** Bcast/mcast frames transmitted from AP:
-+** when additional bcast/mcast frames remain to be transmitted by AP
-+** during this beacon interval
-+** In all other cases MoreData=0 */
-+IEEE16(WF_FC_MOREDATA, 0x2000)
-+IEEE16(WF_FC_ISWEP, 0x4000)
-+IEEE16(WF_FC_ORDER, 0x8000)
-+
-+/* Frame Types */
-+IEEE16(WF_FTYPE_MGMT, 0x00)
-+IEEE16(WF_FTYPE_CTL, 0x04)
-+IEEE16(WF_FTYPE_DATA, 0x08)
-+
-+/* Frame subtypes */
-+/* Management */
-+IEEE16(WF_FSTYPE_ASSOCREQ, 0x00)
-+IEEE16(WF_FSTYPE_ASSOCRESP, 0x10)
-+IEEE16(WF_FSTYPE_REASSOCREQ, 0x20)
-+IEEE16(WF_FSTYPE_REASSOCRESP, 0x30)
-+IEEE16(WF_FSTYPE_PROBEREQ, 0x40)
-+IEEE16(WF_FSTYPE_PROBERESP, 0x50)
-+IEEE16(WF_FSTYPE_BEACON, 0x80)
-+IEEE16(WF_FSTYPE_ATIM, 0x90)
-+IEEE16(WF_FSTYPE_DISASSOC, 0xa0)
-+IEEE16(WF_FSTYPE_AUTHEN, 0xb0)
-+IEEE16(WF_FSTYPE_DEAUTHEN, 0xc0)
-+
-+/* Control */
-+IEEE16(WF_FSTYPE_PSPOLL, 0xa0)
-+IEEE16(WF_FSTYPE_RTS, 0xb0)
-+IEEE16(WF_FSTYPE_CTS, 0xc0)
-+IEEE16(WF_FSTYPE_ACK, 0xd0)
-+IEEE16(WF_FSTYPE_CFEND, 0xe0)
-+IEEE16(WF_FSTYPE_CFENDCFACK, 0xf0)
-+
-+/* Data */
-+IEEE16(WF_FSTYPE_DATAONLY, 0x00)
-+IEEE16(WF_FSTYPE_DATA_CFACK, 0x10)
-+IEEE16(WF_FSTYPE_DATA_CFPOLL, 0x20)
-+IEEE16(WF_FSTYPE_DATA_CFACK_CFPOLL, 0x30)
-+IEEE16(WF_FSTYPE_NULL, 0x40)
-+IEEE16(WF_FSTYPE_CFACK, 0x50)
-+IEEE16(WF_FSTYPE_CFPOLL, 0x60)
-+IEEE16(WF_FSTYPE_CFACK_CFPOLL, 0x70)
-+};
-+
-+
-+/***********************************************************************
-+** Macros
-+*/
-+
-+/*--- Duration Macros ----------------------------------------*/
-+/* Macros to get/set the bitfields of the Duration Field */
-+/* - the duration value is only valid when bit15 is zero */
-+/* - the firmware handles these values, so I'm not going */
-+/* to use these macros right now. */
-+/*------------------------------------------------------------*/
-+
-+/*--- Sequence Control Macros -------------------------------*/
-+/* Macros to get/set the bitfields of the Sequence Control */
-+/* Field. */
-+/*------------------------------------------------------------*/
-+#define WLAN_GET_SEQ_FRGNUM(n) ((u16)(n) & 0x000f)
-+#define WLAN_GET_SEQ_SEQNUM(n) (((u16)(n) & 0xfff0) >> 4)
-+
-+/*--- Data ptr macro -----------------------------------------*/
-+/* Creates a u8* to the data portion of a frame */
-+/* Assumes you're passing in a ptr to the beginning of the hdr*/
-+/*------------------------------------------------------------*/
-+#define WLAN_HDR_A3_DATAP(p) (((u8*)(p)) + WLAN_HDR_A3_LEN)
-+#define WLAN_HDR_A4_DATAP(p) (((u8*)(p)) + WLAN_HDR_A4_LEN)
-+
-+
-+/***********************************************************************
-+** Types
-+*/
-+
-+/* 802.11 header type
-+**
-+** Note the following:
-+** a1 *always* is receiver's mac or bcast/mcast
-+** a2 *always* is transmitter's mac, if a2 exists
-+** seq: [0:3] frag#, [4:15] seq# - used for dup detection
-+** (dups from retries have same seq#) */
-+typedef struct wlan_hdr {
-+ u16 fc;
-+ u16 dur;
-+ u8 a1[ETH_ALEN];
-+ u8 a2[ETH_ALEN];
-+ u8 a3[ETH_ALEN];
-+ u16 seq;
-+ u8 a4[ETH_ALEN];
-+} WLAN_PACKED wlan_hdr_t;
-+
-+/* Separate structs for use if frame type is known */
-+typedef struct wlan_hdr_a3 {
-+ u16 fc;
-+ u16 dur;
-+ u8 a1[ETH_ALEN];
-+ u8 a2[ETH_ALEN];
-+ u8 a3[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED wlan_hdr_a3_t;
-+
-+typedef struct wlan_hdr_mgmt {
-+ u16 fc;
-+ u16 dur;
-+ u8 da[ETH_ALEN];
-+ u8 sa[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED wlan_hdr_mgmt_t;
-+
-+#ifdef NOT_NEEDED_YET
-+typedef struct { /* ad-hoc peer->peer (to/from DS = 0/0) */
-+ u16 fc;
-+ u16 dur;
-+ u8 da[ETH_ALEN];
-+ u8 sa[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED ibss;
-+typedef struct { /* ap->sta (to/from DS = 0/1) */
-+ u16 fc;
-+ u16 dur;
-+ u8 da[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+ u8 sa[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED fromap;
-+typedef struct { /* sta->ap (to/from DS = 1/0) */
-+ u16 fc;
-+ u16 dur;
-+ u8 bssid[ETH_ALEN];
-+ u8 sa[ETH_ALEN];
-+ u8 da[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED toap;
-+typedef struct { /* wds->wds (to/from DS = 1/1), the only 4addr pkt */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+ u8 ta[ETH_ALEN];
-+ u8 da[ETH_ALEN];
-+ u16 seq;
-+ u8 sa[ETH_ALEN];
-+} WLAN_PACKED wds;
-+typedef struct { /* all management packets */
-+ u16 fc;
-+ u16 dur;
-+ u8 da[ETH_ALEN];
-+ u8 sa[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+ u16 seq;
-+} WLAN_PACKED mgmt;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+ u8 ta[ETH_ALEN];
-+} WLAN_PACKED rts;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+} WLAN_PACKED cts;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+} WLAN_PACKED ack;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ /* NB: this one holds Assoc ID in dur field: */
-+ u16 aid;
-+ u8 bssid[ETH_ALEN];
-+ u8 ta[ETH_ALEN];
-+} WLAN_PACKED pspoll;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+} WLAN_PACKED cfend;
-+typedef struct { /* has no body, just a FCS */
-+ u16 fc;
-+ u16 dur;
-+ u8 ra[ETH_ALEN];
-+ u8 bssid[ETH_ALEN];
-+} WLAN_PACKED cfendcfack;
-+#endif
-+
-+/* Prism header emulation (monitor mode) */
-+typedef struct wlanitem_u32 {
-+ u32 did;
-+ u16 status;
-+ u16 len;
-+ u32 data;
-+} WLAN_PACKED wlanitem_u32_t;
-+#define WLANITEM_STATUS_data_ok 0
-+#define WLANITEM_STATUS_no_value 1
-+#define WLANITEM_STATUS_invalid_itemname 2
-+#define WLANITEM_STATUS_invalid_itemdata 3
-+#define WLANITEM_STATUS_missing_itemdata 4
-+#define WLANITEM_STATUS_incomplete_itemdata 5
-+#define WLANITEM_STATUS_invalid_msg_did 6
-+#define WLANITEM_STATUS_invalid_mib_did 7
-+#define WLANITEM_STATUS_missing_conv_func 8
-+#define WLANITEM_STATUS_string_too_long 9
-+#define WLANITEM_STATUS_data_out_of_range 10
-+#define WLANITEM_STATUS_string_too_short 11
-+#define WLANITEM_STATUS_missing_valid_func 12
-+#define WLANITEM_STATUS_unknown 13
-+#define WLANITEM_STATUS_invalid_did 14
-+#define WLANITEM_STATUS_missing_print_func 15
-+
-+#define WLAN_DEVNAMELEN_MAX 16
-+typedef struct wlansniffrm {
-+ u32 msgcode;
-+ u32 msglen;
-+ u8 devname[WLAN_DEVNAMELEN_MAX];
-+ wlanitem_u32_t hosttime;
-+ wlanitem_u32_t mactime;
-+ wlanitem_u32_t channel;
-+ wlanitem_u32_t rssi;
-+ wlanitem_u32_t sq;
-+ wlanitem_u32_t signal;
-+ wlanitem_u32_t noise;
-+ wlanitem_u32_t rate;
-+ wlanitem_u32_t istx; /* tx? 0:no 1:yes */
-+ wlanitem_u32_t frmlen;
-+} WLAN_PACKED wlansniffrm_t;
-+#define WLANSNIFFFRM 0x0041
-+#define WLANSNIFFFRM_hosttime 0x1041
-+#define WLANSNIFFFRM_mactime 0x2041
-+#define WLANSNIFFFRM_channel 0x3041
-+#define WLANSNIFFFRM_rssi 0x4041
-+#define WLANSNIFFFRM_sq 0x5041
-+#define WLANSNIFFFRM_signal 0x6041
-+#define WLANSNIFFFRM_noise 0x7041
-+#define WLANSNIFFFRM_rate 0x8041
-+#define WLANSNIFFFRM_istx 0x9041
-+#define WLANSNIFFFRM_frmlen 0xA041
-Index: linux-2.6.22/drivers/net/wireless/acx/wlan_mgmt.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/wlan_mgmt.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,582 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** This code is based on elements which are
-+** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
-+** info@linux-wlan.com
-+** http://www.linux-wlan.com
-+*/
-+
-+/***********************************************************************
-+** Constants
-+*/
-+
-+/*-- Information Element IDs --------------------*/
-+#define WLAN_EID_SSID 0
-+#define WLAN_EID_SUPP_RATES 1
-+#define WLAN_EID_FH_PARMS 2
-+#define WLAN_EID_DS_PARMS 3
-+#define WLAN_EID_CF_PARMS 4
-+#define WLAN_EID_TIM 5
-+#define WLAN_EID_IBSS_PARMS 6
-+#define WLAN_EID_COUNTRY 7 /* 802.11d */
-+#define WLAN_EID_FH_HOP_PARMS 8 /* 802.11d */
-+#define WLAN_EID_FH_TABLE 9 /* 802.11d */
-+#define WLAN_EID_REQUEST 10 /* 802.11d */
-+/*-- values 11-15 reserved --*/
-+#define WLAN_EID_CHALLENGE 16
-+/*-- values 17-31 reserved for challenge text extension --*/
-+#define WLAN_EID_PWR_CONSTRAINT 32 /* 11h PowerConstraint */
-+#define WLAN_EID_ERP_INFO 42 /* was seen from WRT54GS with OpenWrt */
-+#define WLAN_EID_NONERP 47 /* was seen from WRT54GS with OpenWrt */
-+#define WLAN_EID_RSN 48
-+#define WLAN_EID_EXT_RATES 50
-+#define WLAN_EID_UNKNOWN128 128
-+#define WLAN_EID_UNKNOWN133 133
-+#define WLAN_EID_GENERIC 221 /* was seen from WRT54GS with OpenWrt */
-+#define WLAN_EID_UNKNOWN223 223
-+
-+#if 0
-+#define WLAN_EID_PWR_CAP 33 /* 11h PowerCapability */
-+#define WLAN_EID_TPC_REQUEST 34 /* 11h TPC Request */
-+#define WLAN_EID_TPC_REPORT 35 /* 11h TPC Report */
-+#define WLAN_EID_SUPP_CHANNELS 36 /* 11h Supported Channels */
-+#define WLAN_EID_CHANNEL_SWITCH 37 /* 11h ChannelSwitch */
-+#define WLAN_EID_MEASURE_REQUEST 38 /* 11h MeasurementRequest */
-+#define WLAN_EID_MEASURE_REPORT 39 /* 11h MeasurementReport */
-+#define WLAN_EID_QUIET_ID 40 /* 11h Quiet */
-+#define WLAN_EID_IBSS_DFS_ID 41 /* 11h IBSS_DFS */
-+#endif
-+
-+/*-- Reason Codes -------------------------------*/
-+#define WLAN_MGMT_REASON_RSVD 0
-+#define WLAN_MGMT_REASON_UNSPEC 1
-+#define WLAN_MGMT_REASON_PRIOR_AUTH_INVALID 2
-+#define WLAN_MGMT_REASON_DEAUTH_LEAVING 3
-+#define WLAN_MGMT_REASON_DISASSOC_INACTIVE 4
-+#define WLAN_MGMT_REASON_DISASSOC_AP_BUSY 5
-+#define WLAN_MGMT_REASON_CLASS2_NONAUTH 6
-+#define WLAN_MGMT_REASON_CLASS3_NONASSOC 7
-+#define WLAN_MGMT_REASON_DISASSOC_STA_HASLEFT 8
-+#define WLAN_MGMT_REASON_CANT_ASSOC_NONAUTH 9
-+
-+/*-- Status Codes -------------------------------*/
-+#define WLAN_MGMT_STATUS_SUCCESS 0
-+#define WLAN_MGMT_STATUS_UNSPEC_FAILURE 1
-+#define WLAN_MGMT_STATUS_CAPS_UNSUPPORTED 10
-+#define WLAN_MGMT_STATUS_REASSOC_NO_ASSOC 11
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_UNSPEC 12
-+#define WLAN_MGMT_STATUS_UNSUPPORTED_AUTHALG 13
-+#define WLAN_MGMT_STATUS_RX_AUTH_NOSEQ 14
-+#define WLAN_MGMT_STATUS_CHALLENGE_FAIL 15
-+#define WLAN_MGMT_STATUS_AUTH_TIMEOUT 16
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_BUSY 17
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_RATES 18
-+/* p80211b additions */
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOSHORT 19
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOPBCC 20
-+#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOAGILITY 21
-+
-+/*-- Auth Algorithm Field ---------------------------*/
-+#define WLAN_AUTH_ALG_OPENSYSTEM 0
-+#define WLAN_AUTH_ALG_SHAREDKEY 1
-+
-+/*-- Management Frame Field Offsets -------------*/
-+/* Note: Not all fields are listed because of variable lengths */
-+/* Note: These offsets are from the start of the frame data */
-+
-+#define WLAN_BEACON_OFF_TS 0
-+#define WLAN_BEACON_OFF_BCN_INT 8
-+#define WLAN_BEACON_OFF_CAPINFO 10
-+#define WLAN_BEACON_OFF_SSID 12
-+
-+#define WLAN_DISASSOC_OFF_REASON 0
-+
-+#define WLAN_ASSOCREQ_OFF_CAP_INFO 0
-+#define WLAN_ASSOCREQ_OFF_LISTEN_INT 2
-+#define WLAN_ASSOCREQ_OFF_SSID 4
-+
-+#define WLAN_ASSOCRESP_OFF_CAP_INFO 0
-+#define WLAN_ASSOCRESP_OFF_STATUS 2
-+#define WLAN_ASSOCRESP_OFF_AID 4
-+#define WLAN_ASSOCRESP_OFF_SUPP_RATES 6
-+
-+#define WLAN_REASSOCREQ_OFF_CAP_INFO 0
-+#define WLAN_REASSOCREQ_OFF_LISTEN_INT 2
-+#define WLAN_REASSOCREQ_OFF_CURR_AP 4
-+#define WLAN_REASSOCREQ_OFF_SSID 10
-+
-+#define WLAN_REASSOCRESP_OFF_CAP_INFO 0
-+#define WLAN_REASSOCRESP_OFF_STATUS 2
-+#define WLAN_REASSOCRESP_OFF_AID 4
-+#define WLAN_REASSOCRESP_OFF_SUPP_RATES 6
-+
-+#define WLAN_PROBEREQ_OFF_SSID 0
-+
-+#define WLAN_PROBERESP_OFF_TS 0
-+#define WLAN_PROBERESP_OFF_BCN_INT 8
-+#define WLAN_PROBERESP_OFF_CAP_INFO 10
-+#define WLAN_PROBERESP_OFF_SSID 12
-+
-+#define WLAN_AUTHEN_OFF_AUTH_ALG 0
-+#define WLAN_AUTHEN_OFF_AUTH_SEQ 2
-+#define WLAN_AUTHEN_OFF_STATUS 4
-+#define WLAN_AUTHEN_OFF_CHALLENGE 6
-+
-+#define WLAN_DEAUTHEN_OFF_REASON 0
-+
-+enum {
-+IEEE16(WF_MGMT_CAP_ESS, 0x0001)
-+IEEE16(WF_MGMT_CAP_IBSS, 0x0002)
-+/* In (re)assoc request frames by STA:
-+** Pollable=0, PollReq=0: STA is not CF-Pollable
-+** 0 1: STA is CF-Pollable, not requesting to be placed on the CF-Polling list
-+** 1 0: STA is CF-Pollable, requesting to be placed on the CF-Polling list
-+** 1 1: STA is CF-Pollable, requesting never to be polled
-+** In beacon, proberesp, (re)assoc resp frames by AP:
-+** 0 0: No point coordinator at AP
-+** 0 1: Point coordinator at AP for delivery only (no polling)
-+** 1 0: Point coordinator at AP for delivery and polling
-+** 1 1: Reserved */
-+IEEE16(WF_MGMT_CAP_CFPOLLABLE, 0x0004)
-+IEEE16(WF_MGMT_CAP_CFPOLLREQ, 0x0008)
-+/* 1=non-WEP data frames are disallowed */
-+IEEE16(WF_MGMT_CAP_PRIVACY, 0x0010)
-+/* In beacon, proberesp, (re)assocresp by AP/AdHoc:
-+** 1=use of shortpre is allowed ("I can receive shortpre") */
-+IEEE16(WF_MGMT_CAP_SHORT, 0x0020)
-+IEEE16(WF_MGMT_CAP_PBCC, 0x0040)
-+IEEE16(WF_MGMT_CAP_AGILITY, 0x0080)
-+/* In (re)assoc request frames by STA:
-+** 1=short slot time implemented and enabled
-+** NB: AP shall use long slot time beginning at the next Beacon after assoc
-+** of STA with this bit set to 0
-+** In beacon, proberesp, (re)assoc resp frames by AP:
-+** currently used slot time value: 0/1 - long/short */
-+IEEE16(WF_MGMT_CAP_SHORTSLOT, 0x0400)
-+/* In (re)assoc request frames by STA: 1=CCK-OFDM is implemented and enabled
-+** In beacon, proberesp, (re)assoc resp frames by AP/AdHoc:
-+** 1=CCK-OFDM is allowed */
-+IEEE16(WF_MGMT_CAP_CCKOFDM, 0x2000)
-+};
-+
-+
-+/***********************************************************************
-+** Types
-+*/
-+
-+/* Information Element types */
-+
-+/* prototype structure, all IEs start with these members */
-+typedef struct wlan_ie {
-+ u8 eid;
-+ u8 len;
-+} WLAN_PACKED wlan_ie_t;
-+
-+/*-- Service Set Identity (SSID) -----------------*/
-+typedef struct wlan_ie_ssid {
-+ u8 eid;
-+ u8 len;
-+ u8 ssid[1]; /* may be zero */
-+} WLAN_PACKED wlan_ie_ssid_t;
-+
-+/*-- Supported Rates -----------------------------*/
-+typedef struct wlan_ie_supp_rates {
-+ u8 eid;
-+ u8 len;
-+ u8 rates[1]; /* had better be at LEAST one! */
-+} WLAN_PACKED wlan_ie_supp_rates_t;
-+
-+/*-- FH Parameter Set ----------------------------*/
-+typedef struct wlan_ie_fh_parms {
-+ u8 eid;
-+ u8 len;
-+ u16 dwell;
-+ u8 hopset;
-+ u8 hoppattern;
-+ u8 hopindex;
-+} WLAN_PACKED wlan_ie_fh_parms_t;
-+
-+/*-- DS Parameter Set ----------------------------*/
-+typedef struct wlan_ie_ds_parms {
-+ u8 eid;
-+ u8 len;
-+ u8 curr_ch;
-+} WLAN_PACKED wlan_ie_ds_parms_t;
-+
-+/*-- CF Parameter Set ----------------------------*/
-+typedef struct wlan_ie_cf_parms {
-+ u8 eid;
-+ u8 len;
-+ u8 cfp_cnt;
-+ u8 cfp_period;
-+ u16 cfp_maxdur;
-+ u16 cfp_durremaining;
-+} WLAN_PACKED wlan_ie_cf_parms_t;
-+
-+/*-- TIM ------------------------------------------*/
-+typedef struct wlan_ie_tim {
-+ u8 eid;
-+ u8 len;
-+ u8 dtim_cnt;
-+ u8 dtim_period;
-+ u8 bitmap_ctl;
-+ u8 virt_bm[1];
-+} WLAN_PACKED wlan_ie_tim_t;
-+
-+/*-- IBSS Parameter Set ---------------------------*/
-+typedef struct wlan_ie_ibss_parms {
-+ u8 eid;
-+ u8 len;
-+ u16 atim_win;
-+} WLAN_PACKED wlan_ie_ibss_parms_t;
-+
-+/*-- Challenge Text ------------------------------*/
-+typedef struct wlan_ie_challenge {
-+ u8 eid;
-+ u8 len;
-+ u8 challenge[1];
-+} WLAN_PACKED wlan_ie_challenge_t;
-+
-+/*-- ERP (42) -------------------------------------*/
-+typedef struct wlan_ie_erp {
-+ u8 eid;
-+ u8 len;
-+ /* bit 0:Non ERP present
-+ ** 1:Use Protection
-+ ** 2:Barker Preamble mode
-+ ** 3-7:reserved */
-+ u8 erp;
-+} WLAN_PACKED wlan_ie_erp_t;
-+
-+/* Types for parsing mgmt frames */
-+
-+/* prototype structure, all mgmt frame types will start with these members */
-+typedef struct wlan_fr_mgmt {
-+ u16 type;
-+ u16 len; /* DOES NOT include FCS */
-+ wlan_hdr_t *hdr;
-+ /* used for target specific data, skb in Linux */
-+ /*-- fixed fields -----------*/
-+ /*-- info elements ----------*/
-+} WLAN_PACKED wlan_fr_mgmt_t;
-+
-+/*-- Beacon ---------------------------------------*/
-+typedef struct wlan_fr_beacon {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u64 *ts;
-+ u16 *bcn_int;
-+ u16 *cap_info;
-+ /*-- info elements ----------*/
-+ wlan_ie_ssid_t *ssid;
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+ wlan_ie_fh_parms_t *fh_parms;
-+ wlan_ie_ds_parms_t *ds_parms;
-+ wlan_ie_cf_parms_t *cf_parms;
-+ wlan_ie_ibss_parms_t *ibss_parms;
-+ wlan_ie_tim_t *tim; /* in beacon only, not proberesp */
-+ wlan_ie_erp_t *erp; /* in beacon only, not proberesp */
-+} wlan_fr_beacon_t;
-+#define wlan_fr_proberesp wlan_fr_beacon
-+#define wlan_fr_proberesp_t wlan_fr_beacon_t
-+
-+/*-- IBSS ATIM ------------------------------------*/
-+typedef struct wlan_fr_ibssatim {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ /*-- info elements ----------*/
-+ /* this frame type has a null body */
-+} wlan_fr_ibssatim_t;
-+
-+/*-- Disassociation -------------------------------*/
-+typedef struct wlan_fr_disassoc {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *reason;
-+ /*-- info elements ----------*/
-+} wlan_fr_disassoc_t;
-+
-+/*-- Association Request --------------------------*/
-+typedef struct wlan_fr_assocreq {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *cap_info;
-+ u16 *listen_int;
-+ /*-- info elements ----------*/
-+ wlan_ie_ssid_t *ssid;
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+} wlan_fr_assocreq_t;
-+
-+/*-- Association Response -------------------------*/
-+typedef struct wlan_fr_assocresp {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *cap_info;
-+ u16 *status;
-+ u16 *aid;
-+ /*-- info elements ----------*/
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+} wlan_fr_assocresp_t;
-+
-+/*-- Reassociation Request ------------------------*/
-+typedef struct wlan_fr_reassocreq {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *cap_info;
-+ u16 *listen_int;
-+ u8 *curr_ap;
-+ /*-- info elements ----------*/
-+ wlan_ie_ssid_t *ssid;
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+} wlan_fr_reassocreq_t;
-+
-+/*-- Reassociation Response -----------------------*/
-+typedef struct wlan_fr_reassocresp {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *cap_info;
-+ u16 *status;
-+ u16 *aid;
-+ /*-- info elements ----------*/
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+} wlan_fr_reassocresp_t;
-+
-+/*-- Probe Request --------------------------------*/
-+typedef struct wlan_fr_probereq {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ /*-- info elements ----------*/
-+ wlan_ie_ssid_t *ssid;
-+ wlan_ie_supp_rates_t *supp_rates;
-+ wlan_ie_supp_rates_t *ext_rates;
-+} wlan_fr_probereq_t;
-+
-+/*-- Authentication -------------------------------*/
-+typedef struct wlan_fr_authen {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *auth_alg;
-+ u16 *auth_seq;
-+ u16 *status;
-+ /*-- info elements ----------*/
-+ wlan_ie_challenge_t *challenge;
-+} wlan_fr_authen_t;
-+
-+/*-- Deauthenication -----------------------------*/
-+typedef struct wlan_fr_deauthen {
-+ u16 type;
-+ u16 len;
-+ wlan_hdr_t *hdr;
-+ /*-- fixed fields -----------*/
-+ u16 *reason;
-+ /*-- info elements ----------*/
-+} wlan_fr_deauthen_t;
-+
-+/* Types for building mgmt frames */
-+
-+/* Warning. Several types used in below structs are
-+** in fact variable length. Use structs with such fields with caution */
-+typedef struct auth_frame_body {
-+ u16 auth_alg;
-+ u16 auth_seq;
-+ u16 status;
-+ wlan_ie_challenge_t challenge;
-+} WLAN_PACKED auth_frame_body_t;
-+
-+typedef struct assocresp_frame_body {
-+ u16 cap_info;
-+ u16 status;
-+ u16 aid;
-+ wlan_ie_supp_rates_t rates;
-+} WLAN_PACKED assocresp_frame_body_t;
-+
-+typedef struct reassocreq_frame_body {
-+ u16 cap_info;
-+ u16 listen_int;
-+ u8 current_ap[ETH_ALEN];
-+ wlan_ie_ssid_t ssid;
-+/* access to this one is disabled since ssid_t is variable length: */
-+ /* wlan_ie_supp_rates_t rates; */
-+} WLAN_PACKED reassocreq_frame_body_t;
-+
-+typedef struct reassocresp_frame_body {
-+ u16 cap_info;
-+ u16 status;
-+ u16 aid;
-+ wlan_ie_supp_rates_t rates;
-+} WLAN_PACKED reassocresp_frame_body_t;
-+
-+typedef struct deauthen_frame_body {
-+ u16 reason;
-+} WLAN_PACKED deauthen_frame_body_t;
-+
-+typedef struct disassoc_frame_body {
-+ u16 reason;
-+} WLAN_PACKED disassoc_frame_body_t;
-+
-+typedef struct probereq_frame_body {
-+ wlan_ie_ssid_t ssid;
-+ wlan_ie_supp_rates_t rates;
-+} WLAN_PACKED probereq_frame_body_t;
-+
-+typedef struct proberesp_frame_body {
-+ u8 timestamp[8];
-+ u16 beacon_int;
-+ u16 cap_info;
-+ wlan_ie_ssid_t ssid;
-+/* access to these is disabled since ssid_t is variable length: */
-+ /* wlan_ie_supp_rates_t rates; */
-+ /* fhps_t fhps; */
-+ /* dsps_t dsps; */
-+ /* cfps_t cfps; */
-+} WLAN_PACKED proberesp_frame_body_t;
-+
-+
-+/***********************************************************************
-+** Functions
-+*/
-+
-+/* Helpers for parsing mgmt frames */
-+void wlan_mgmt_decode_ibssatim(wlan_fr_ibssatim_t *f);
-+void wlan_mgmt_decode_assocreq(wlan_fr_assocreq_t *f);
-+void wlan_mgmt_decode_assocresp(wlan_fr_assocresp_t *f);
-+void wlan_mgmt_decode_authen(wlan_fr_authen_t *f);
-+void wlan_mgmt_decode_beacon(wlan_fr_beacon_t *f);
-+void wlan_mgmt_decode_deauthen(wlan_fr_deauthen_t *f);
-+void wlan_mgmt_decode_disassoc(wlan_fr_disassoc_t *f);
-+void wlan_mgmt_decode_probereq(wlan_fr_probereq_t *f);
-+void wlan_mgmt_decode_proberesp(wlan_fr_proberesp_t *f);
-+void wlan_mgmt_decode_reassocreq(wlan_fr_reassocreq_t *f);
-+void wlan_mgmt_decode_reassocresp(wlan_fr_reassocresp_t *f);
-+
-+/* Helpers for building mgmt frames */
-+static inline u8*
-+wlan_fill_ie_ssid(u8 *p, int len, const char *ssid)
-+{
-+ struct wlan_ie_ssid *ie = (void*)p;
-+ ie->eid = WLAN_EID_SSID;
-+ ie->len = len;
-+ memcpy(ie->ssid, ssid, len);
-+ return p + len + 2;
-+}
-+/* This controls whether we create 802.11g 'ext supported rates' IEs
-+** or just create overlong 'supported rates' IEs instead
-+** (non-11g compliant) */
-+#define WE_OBEY_802_11G 1
-+static inline u8*
-+wlan_fill_ie_rates(u8 *p, int len, const u8 *rates)
-+{
-+ struct wlan_ie_supp_rates *ie = (void*)p;
-+#if WE_OBEY_802_11G
-+ if (len > 8 ) len = 8;
-+#endif
-+ /* supported rates (1 to 8 octets) */
-+ ie->eid = WLAN_EID_SUPP_RATES;
-+ ie->len = len;
-+ memcpy(ie->rates, rates, len);
-+ return p + len + 2;
-+}
-+/* This one wouldn't create an IE at all if not needed */
-+static inline u8*
-+wlan_fill_ie_rates_ext(u8 *p, int len, const u8 *rates)
-+{
-+ struct wlan_ie_supp_rates *ie = (void*)p;
-+#if !WE_OBEY_802_11G
-+ return p;
-+#endif
-+ len -= 8;
-+ if (len <= 0) return p;
-+ /* ext supported rates */
-+ ie->eid = WLAN_EID_EXT_RATES;
-+ ie->len = len;
-+ memcpy(ie->rates, rates+8, len);
-+ return p + len + 2;
-+}
-+static inline u8*
-+wlan_fill_ie_ds_parms(u8 *p, int channel)
-+{
-+ struct wlan_ie_ds_parms *ie = (void*)p;
-+ ie->eid = WLAN_EID_DS_PARMS;
-+ ie->len = 1;
-+ ie->curr_ch = channel;
-+ return p + sizeof(*ie);
-+}
-+static inline u8*
-+wlan_fill_ie_ibss_parms(u8 *p, int atim_win)
-+{
-+ struct wlan_ie_ibss_parms *ie = (void*)p;
-+ ie->eid = WLAN_EID_IBSS_PARMS;
-+ ie->len = 2;
-+ ie->atim_win = atim_win;
-+ return p + sizeof(*ie);
-+}
-+static inline u8*
-+wlan_fill_ie_tim(u8 *p, int rem, int period, int bcast,
-+ int ofs, int len, const u8 *vbm)
-+{
-+ struct wlan_ie_tim *ie = (void*)p;
-+ ie->eid = WLAN_EID_TIM;
-+ ie->len = len + 3;
-+ ie->dtim_cnt = rem;
-+ ie->dtim_period = period;
-+ ie->bitmap_ctl = ofs | (bcast!=0);
-+ if (vbm)
-+ memcpy(ie->virt_bm, vbm, len); /* min 1 byte */
-+ else
-+ ie->virt_bm[0] = 0;
-+ return p + len + 3 + 2;
-+}
-Index: linux-2.6.22/drivers/net/wireless/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/net/wireless/Kconfig 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/net/wireless/Kconfig 2007-08-23 18:34:19.000000000 +0200
-@@ -5,6 +5,36 @@
- menu "Wireless LAN"
- depends on !S390
-
-+config NET_RADIO
-+ bool "Wireless LAN drivers (non-hamradio) & Wireless Extensions"
-+ select WIRELESS_EXT
-+ ---help---
-+ Support for wireless LANs and everything having to do with radio,
-+ but not with amateur radio or FM broadcasting.
-+
-+ Saying Y here also enables the Wireless Extensions (creates
-+ /proc/net/wireless and enables iwconfig access). The Wireless
-+ Extension is a generic API allowing a driver to expose to the user
-+ space configuration and statistics specific to common Wireless LANs.
-+ The beauty of it is that a single set of tool can support all the
-+ variations of Wireless LANs, regardless of their type (as long as
-+ the driver supports Wireless Extension). Another advantage is that
-+ these parameters may be changed on the fly without restarting the
-+ driver (or Linux). If you wish to use Wireless Extensions with
-+ wireless PCMCIA (PC-) cards, you need to say Y here; you can fetch
-+ the tools from
-+ <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.
-+
-+config NET_WIRELESS_RTNETLINK
-+ bool "Wireless Extension API over RtNetlink"
-+ depends on NET_RADIO
-+ ---help---
-+ Support the Wireless Extension API over the RtNetlink socket
-+ in addition to the traditional ioctl interface (selected above).
-+
-+ For now, few tools use this facility, but it might grow in the
-+ future. The only downside is that it adds 4.5 kB to your kernel.
-+
- config WLAN_PRE80211
- bool "Wireless LAN (pre-802.11)"
- depends on NETDEVICES
-@@ -549,5 +579,6 @@
- source "drivers/net/wireless/hostap/Kconfig"
- source "drivers/net/wireless/bcm43xx/Kconfig"
- source "drivers/net/wireless/zd1211rw/Kconfig"
-+source "drivers/net/wireless/acx/Kconfig"
-
- endmenu
-Index: linux-2.6.22/drivers/net/wireless/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/net/wireless/Makefile 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/net/wireless/Makefile 2007-08-23 18:34:19.000000000 +0200
-@@ -34,6 +34,8 @@
-
- obj-$(CONFIG_PRISM54) += prism54/
-
-+obj-$(CONFIG_ACX) += acx/
-+
- obj-$(CONFIG_HOSTAP) += hostap/
- obj-$(CONFIG_BCM43XX) += bcm43xx/
- obj-$(CONFIG_ZD1211RW) += zd1211rw/
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni.patch
deleted file mode 100644
index 4d746749c5..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/htcuni.patch
+++ /dev/null
@@ -1,8044 +0,0 @@
----
- arch/arm/Kconfig | 2
- arch/arm/mach-pxa/Kconfig | 89 +
- arch/arm/mach-pxa/Makefile | 1
- arch/arm/mach-pxa/corgi.c | 3
- arch/arm/mach-pxa/generic.c | 13
- arch/arm/mach-pxa/htcuniversal/Makefile | 19
- arch/arm/mach-pxa/htcuniversal/htcuniversal.c | 468 +++++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c | 917 +++++++++++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h | 65
- arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c | 143 +
- arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c | 61
- arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c | 135 +
- arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h | 17
- arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c | 87 +
- arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c | 226 ++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c | 212 ++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c | 167 ++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h | 16
- arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c | 69
- arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c | 97 +
- arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c | 490 ++++++
- arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c | 71
- arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h | 20
- arch/arm/mach-pxa/spitz.c | 2
- drivers/input/keyboard/Kconfig | 7
- drivers/input/keyboard/Makefile | 2
- drivers/input/keyboard/asic3_keys.c | 131 +
- drivers/leds/Kconfig | 7
- drivers/leds/Makefile | 1
- drivers/leds/leds-asic3.c | 189 ++
- drivers/mfd/Kconfig | 10
- drivers/mfd/Makefile | 2
- drivers/mfd/asic3_base.c | 1208 +++++++++++++++
- drivers/mfd/soc-core.c | 106 +
- drivers/mfd/soc-core.h | 30
- drivers/mmc/host/Kconfig | 6
- drivers/mmc/host/Makefile | 2
- drivers/mmc/host/asic3_mmc.c | 900 +++++++++++
- drivers/mmc/host/asic3_mmc.h | 25
- drivers/serial/pxa.c | 22
- drivers/video/backlight/Kconfig | 2
- drivers/video/backlight/corgi_bl.c | 4
- include/asm-arm/arch-pxa/clock.h | 27
- include/asm-arm/arch-pxa/htcuniversal-asic.h | 213 ++
- include/asm-arm/arch-pxa/htcuniversal-gpio.h | 220 ++
- include/asm-arm/arch-pxa/htcuniversal-init.h | 14
- include/asm-arm/arch-pxa/htcuniversal.h | 3
- include/asm-arm/arch-pxa/irqs.h | 2
- include/asm-arm/arch-pxa/pxa-pm_ll.h | 6
- include/asm-arm/arch-pxa/pxa-regs.h | 2
- include/asm-arm/arch-pxa/serial.h | 78
- include/asm-arm/arch-pxa/sharpsl.h | 6
- include/asm-arm/hardware/asic3_keys.h | 18
- include/asm-arm/hardware/asic3_leds.h | 34
- include/asm-arm/hardware/ipaq-asic3.h | 602 +++++++
- include/linux/backlight.h | 7
- include/linux/gpiodev.h | 44
- include/linux/input_pda.h | 47
- include/linux/ioport.h | 1
- include/linux/soc/asic3_base.h | 104 +
- include/linux/soc/tmio_mmc.h | 17
- 61 files changed, 7475 insertions(+), 14 deletions(-)
-
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/Makefile 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,19 @@
-+#
-+# Makefile for HTC Universal
-+#
-+
-+snd-htcuniversal-ak4641-objs := htcuniversal_ak4641.o
-+
-+obj-$(CONFIG_MACH_HTCUNIVERSAL) += htcuniversal.o
-+obj-$(CONFIG_HTCUNIVERSAL_CORE) += htcuniversal_core.o
-+obj-$(CONFIG_HTCUNIVERSAL_POWER) += htcuniversal_power2.o
-+obj-$(CONFIG_HTCUNIVERSAL_LCD) += htcuniversal_lcd.o
-+obj-$(CONFIG_HTCUNIVERSAL_BACKLIGHT) += htcuniversal_bl.o
-+obj-$(CONFIG_HTCUNIVERSAL_TS2) += htcuniversal_ts2.o
-+obj-$(CONFIG_HTCUNIVERSAL_BUTTONS) += htcuniversal_buttons.o
-+obj-$(CONFIG_HTCUNIVERSAL_BLUETOOTH) += htcuniversal_bt.o
-+obj-$(CONFIG_HTCUNIVERSAL_PHONE) += htcuniversal_phone.o
-+obj-$(CONFIG_HTCUNIVERSAL_ASIC3_LEDS) += htcuniversal_asic3_leds.o
-+obj-$(CONFIG_HTCUNIVERSAL_UDC) += htcuniversal_udc.o
-+
-+obj-$(CONFIG_HTCUNIVERSAL_AK4641) += htcuniversal_ak4641.o
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,468 @@
-+/*
-+ * Hardware definitions for HTC Universal
-+ *
-+ * Copyright (c) 2006 Oleg Gusev
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/irq.h>
-+#include <linux/input.h>
-+#include <linux/gpio_keys.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/hardware.h>
-+#include <asm/setup.h>
-+
-+#include <asm/mach/irq.h>
-+#include <asm/mach/arch.h>
-+
-+#include <asm/arch/bitfield.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/serial.h>
-+#include <asm/arch/pxa27x_keyboard.h>
-+#include <asm/arch/pxafb.h>
-+#include <asm/arch/irda.h>
-+#include <asm/arch/ohci.h>
-+
-+#include <asm/arch/htcuniversal.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-init.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+
-+#include "../generic.h"
-+
-+#include "htcuniversal_bt.h"
-+#include "htcuniversal_phone.h"
-+#include "tsc2046_ts.h"
-+
-+/*
-+ * IRDA
-+ */
-+
-+static void htcuniversal_irda_transceiver_mode(struct device *dev, int mode)
-+{
-+ /* */
-+}
-+
-+static struct pxaficp_platform_data htcuniversal_ficp_platform_data = {
-+ .transceiver_cap = IR_SIRMODE | IR_FIRMODE,
-+ .transceiver_mode = htcuniversal_irda_transceiver_mode,
-+};
-+
-+/*
-+ * Bluetooth - Relies on other loadable modules, like ASIC3 and Core,
-+ * so make the calls indirectly through pointers. Requires that the
-+ * htcuniversal_bt module be loaded before any attempt to use
-+ * bluetooth (obviously).
-+ */
-+
-+static struct htcuniversal_bt_funcs bt_funcs;
-+
-+static void
-+htcuniversal_bt_configure( int state )
-+{
-+ if (bt_funcs.configure != NULL)
-+ bt_funcs.configure( state );
-+}
-+
-+static struct htcuniversal_phone_funcs phone_funcs;
-+
-+static void
-+htcuniversal_phone_configure( int state )
-+{
-+ if (phone_funcs.configure != NULL)
-+ phone_funcs.configure( state );
-+}
-+
-+//void htcuniversal_ll_pm_init(void);
-+
-+extern struct platform_device htcuniversal_bl;
-+static struct platform_device htcuniversal_lcd = { .name = "htcuniversal_lcd", };
-+//static struct platform_device htcuniversal_kbd = { .name = "htcuniversal_kbd", };
-+static struct platform_device htcuniversal_buttons = { .name = "htcuniversal_buttons", };
-+//static struct platform_device htcuniversal_ts = { .name = "htcuniversal_ts", };
-+//static struct platform_device htcuniversal_bt = { .name = "htcuniversal_bt", };
-+//static struct platform_device htcuniversal_phone = { .name = "htcuniversal_phone", };
-+static struct platform_device htcuniversal_power = { .name = "htcuniversal_power", };
-+static struct platform_device htcuniversal_udc = { .name = "htcuniversal_udc", };
-+
-+static struct tsc2046_mach_info htcuniversal_ts_platform_data = {
-+ .port = 1,
-+ .clock = CKEN_SSP1,
-+ .pwrbit_X = 1,
-+ .pwrbit_Y = 1,
-+ .irq = 0 /* asic3 irq */
-+};
-+
-+static struct platform_device htcuniversal_ts = {
-+ .name = "htcuniversal_ts",
-+ .dev = {
-+ .platform_data = &htcuniversal_ts_platform_data,
-+ },
-+};
-+
-+
-+/* Bluetooth */
-+
-+static struct platform_device htcuniversal_bt = {
-+ .name = "htcuniversal_bt",
-+ .id = -1,
-+ .dev = {
-+ .platform_data = &bt_funcs,
-+ },
-+};
-+
-+static struct platform_device htcuniversal_phone = {
-+ .name = "htcuniversal_phone",
-+ .id = -1,
-+ .dev = {
-+ .platform_data = &phone_funcs,
-+ },
-+};
-+
-+/* PXA2xx Keys */
-+
-+static struct gpio_keys_button htcuniversal_button_table[] = {
-+ { KEY_POWER, GPIO_NR_HTCUNIVERSAL_KEY_ON_N, 1 },
-+};
-+
-+static struct gpio_keys_platform_data htcuniversal_pxa_keys_data = {
-+ .buttons = htcuniversal_button_table,
-+ .nbuttons = ARRAY_SIZE(htcuniversal_button_table),
-+};
-+
-+static struct platform_device htcuniversal_pxa_keys = {
-+ .name = "gpio-keys",
-+ .dev = {
-+ .platform_data = &htcuniversal_pxa_keys_data,
-+ },
-+ .id = -1,
-+};
-+
-+/****************************************************************
-+ * Keyboard
-+ ****************************************************************/
-+
-+static struct pxa27x_keyboard_platform_data htcuniversal_kbd = {
-+ .nr_rows = 8,
-+ .nr_cols = 8,
-+ .keycodes = {
-+ {
-+ /* row 0 */
-+ KEY_ENTER,
-+ KEY_MINUS,
-+ KEY_ESC,
-+ KEY_1,
-+ KEY_TAB,
-+ KEY_CAPSLOCK,
-+ KEY_LEFTSHIFT,
-+ KEY_RIGHTALT, /* Fn */
-+ }, { /* row 1 */
-+ KEY_COMMA,
-+ KEY_EQUAL,
-+ KEY_F1,
-+ KEY_2,
-+ KEY_Q,
-+ KEY_A,
-+ KEY_Z,
-+ KEY_LEFTCTRL,
-+ }, { /* row 2 */
-+ KEY_UP,
-+ KEY_I,
-+ KEY_F2,
-+ KEY_3,
-+ KEY_W,
-+ KEY_S,
-+ KEY_X,
-+ KEY_F6,
-+ }, { /* row 3 */
-+ KEY_DOT,
-+ KEY_O,
-+ KEY_F3,
-+ KEY_4,
-+ KEY_E,
-+ KEY_D,
-+ KEY_C,
-+ KEY_LEFTALT,
-+ }, { /* row 4 */
-+ KEY_F9,
-+ KEY_P,
-+ KEY_F4,
-+ KEY_5,
-+ KEY_R,
-+ KEY_F,
-+ KEY_V,
-+ KEY_SPACE,
-+ }, { /* row 5 */
-+ KEY_RIGHT,
-+ KEY_BACKSPACE,
-+ KEY_F5,
-+ KEY_6,
-+ KEY_T,
-+ KEY_G,
-+ KEY_B,
-+ KEY_F7,
-+ }, { /* row 6 */
-+ KEY_F9,
-+ KEY_K,
-+ KEY_9,
-+ KEY_7,
-+ KEY_Y,
-+ KEY_H,
-+ KEY_N,
-+ KEY_LEFT,
-+ }, { /* row 7 */
-+ KEY_F10,
-+ KEY_L,
-+ KEY_0,
-+ KEY_8,
-+ KEY_U,
-+ KEY_J,
-+ KEY_M,
-+ KEY_DOWN,
-+ },
-+ },
-+ .gpio_modes = {
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN0_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN1_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN2_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN3_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN4_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN5_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN6_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKIN7_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT0_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT1_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT2_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT3_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT4_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT5_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT6_MD,
-+ GPIO_NR_HTCUNIVERSAL_KP_MKOUT7_MD,
-+ },
-+};
-+
-+static struct platform_device htcuniversal_pxa_keyboard = {
-+ .name = "pxa27x-keyboard",
-+ .id = -1,
-+ .dev = {
-+ .platform_data = &htcuniversal_kbd,
-+ },
-+};
-+/* Core Hardware Functions */
-+
-+struct platform_device htcuniversal_core = {
-+ .name = "htcuniversal_core",
-+ .id = 0,
-+ .dev = {
-+ .platform_data = NULL,
-+ },
-+};
-+
-+static struct platform_device *devices[] __initdata = {
-+ &htcuniversal_core,
-+// &htcuniversal_flash,
-+ &htcuniversal_pxa_keyboard,
-+ &htcuniversal_pxa_keys,
-+};
-+
-+static struct platform_device *htcuniversal_asic3_devices[] __initdata = {
-+ &htcuniversal_lcd,
-+#ifdef CONFIG_HTCUNIVERSAL_BACKLIGHT
-+ &htcuniversal_bl,
-+#endif
-+ &htcuniversal_buttons,
-+ &htcuniversal_ts,
-+ &htcuniversal_bt,
-+ &htcuniversal_phone,
-+ &htcuniversal_power,
-+ &htcuniversal_udc,
-+};
-+
-+static struct asic3_platform_data htcuniversal_asic3_platform_data = {
-+
-+ /* Setting ASIC3 GPIO registers to the below initialization states
-+ * HTC Universal asic3 information:
-+ * http://wiki.xda-developers.com/index.php?pagename=UniversalASIC3
-+ * http://wiki.xda-developers.com/index.php?pagename=ASIC3
-+ *
-+ * dir: Direction of the GPIO pin. 0: input, 1: output.
-+ * If unknown, set as output to avoid power consuming floating input nodes
-+ * init: Initial state of the GPIO bits
-+ *
-+ * These registers are configured as they are on Wince.
-+ */
-+ .gpio_a = {
-+ .dir = (1<<GPIOA_LCD_PWR5_ON) |
-+ (1<<GPIOA_FLASHLIGHT) |
-+ (1<<GPIOA_UNKNOWN9) |
-+ (1<<GPIOA_SPK_PWR2_ON) |
-+ (1<<GPIOA_UNKNOWN4) |
-+ (1<<GPIOA_EARPHONE_PWR_ON)|
-+ (1<<GPIOA_AUDIO_PWR_ON) |
-+ (1<<GPIOA_SPK_PWR1_ON) |
-+ (1<<GPIOA_I2C_EN),
-+ .init = (1<<GPIOA_LCD_PWR5_ON) |
-+ (1<<GPIOA_I2C_EN),
-+ .sleep_out = 0x0000,
-+ .batt_fault_out = 0x0000,
-+ .alt_function = 0x0000,
-+ .sleep_conf = 0x000c,
-+ },
-+ .gpio_b = {
-+ .dir = 0xc142,
-+ .init = 0x8842, // TODO: 0x0900
-+ .sleep_out = 0x0000,
-+ .batt_fault_out = 0x0000,
-+ .alt_function = 0x0000,
-+ .sleep_conf = 0x000c,
-+ },
-+ .gpio_c = {
-+ .dir = 0xc7e7,
-+ .init = 0xc6e0, // TODO: 0x8000
-+ .sleep_out = 0x0000,
-+ .batt_fault_out = 0x0000,
-+ .alt_function = 0x0007, // GPIOC_LED_RED | GPIOC_LED_GREEN | GPIOC_LED_BLUE
-+ .sleep_conf = 0x000c,
-+ },
-+ .gpio_d = {
-+ .dir = 0xffc0,
-+ .init = 0x7840, // TODO: 0x0000
-+ .sleep_out = 0x0000,
-+ .batt_fault_out = 0x0000,
-+ .alt_function = 0x0000,
-+ .sleep_conf = 0x0008,
-+ },
-+ .bus_shift = 1,
-+ .irq_base = HTCUNIVERSAL_ASIC3_IRQ_BASE,
-+
-+ .child_platform_devs = htcuniversal_asic3_devices,
-+ .num_child_platform_devs = ARRAY_SIZE(htcuniversal_asic3_devices),
-+};
-+
-+static struct resource htcuniversal_asic3_resources[] = {
-+ [0] = {
-+ .start = HTCUNIVERSAL_ASIC3_GPIO_PHYS,
-+ .end = HTCUNIVERSAL_ASIC3_GPIO_PHYS + IPAQ_ASIC3_MAP_SIZE,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+ .start = HTCUNIVERSAL_IRQ(ASIC3_EXT_INT),
-+ .end = HTCUNIVERSAL_IRQ(ASIC3_EXT_INT),
-+ .flags = IORESOURCE_IRQ,
-+ },
-+ [2] = {
-+ .start = HTCUNIVERSAL_ASIC3_MMC_PHYS,
-+ .end = HTCUNIVERSAL_ASIC3_MMC_PHYS + IPAQ_ASIC3_MAP_SIZE,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [3] = {
-+ .start = HTCUNIVERSAL_IRQ(ASIC3_SDIO_INT_N),
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+struct platform_device htcuniversal_asic3 = {
-+ .name = "asic3",
-+ .id = 0,
-+ .num_resources = ARRAY_SIZE(htcuniversal_asic3_resources),
-+ .resource = htcuniversal_asic3_resources,
-+ .dev = { .platform_data = &htcuniversal_asic3_platform_data, },
-+};
-+EXPORT_SYMBOL(htcuniversal_asic3);
-+
-+static struct pxafb_mode_info htcuniversal_lcd_modes[] = {
-+{
-+ .pixclock = 96153,
-+ .xres = 480,
-+ .yres = 640,
-+ .bpp = 16,
-+ .hsync_len = 4,
-+ .vsync_len = 1,
-+ .left_margin = 20,
-+ .right_margin = 8,
-+ .upper_margin = 7,
-+ .lower_margin = 8,
-+
-+// .sync = FB_SYNC_HOR_LOW_ACT|FB_SYNC_VERT_LOW_ACT,
-+
-+},
-+};
-+
-+static struct pxafb_mach_info sony_acx526akm = {
-+ .modes = htcuniversal_lcd_modes,
-+ .num_modes = ARRAY_SIZE(htcuniversal_lcd_modes),
-+
-+ /* fixme: use constants defined in pxafb.h */
-+ .lccr0 = 0x00000080,
-+ .lccr3 = 0x00400000,
-+// .lccr4 = 0x80000000,
-+};
-+
-+static void __init htcuniversal_init_irq(void)
-+{
-+ pxa27x_init_irq();
-+}
-+
-+static struct platform_pxa_serial_funcs htcuniversal_pxa_bt_funcs = {
-+ .configure = htcuniversal_bt_configure,
-+};
-+static struct platform_pxa_serial_funcs htcuniversal_pxa_phone_funcs = {
-+ .configure = htcuniversal_phone_configure,
-+};
-+
-+/* USB OHCI */
-+
-+static int htcuniversal_ohci_init(struct device *dev)
-+{
-+ /* missing GPIO setup here */
-+
-+ /* got the value from wince */
-+ UHCHR=UHCHR_CGR;
-+
-+ return 0;
-+}
-+
-+static struct pxaohci_platform_data htcuniversal_ohci_platform_data = {
-+ .port_mode = PMM_PERPORT_MODE,
-+ .init = htcuniversal_ohci_init,
-+};
-+
-+static void __init htcuniversal_map_io(void)
-+{
-+ pxa_map_io();
-+
-+ pxa_set_btuart_info(&htcuniversal_pxa_bt_funcs);
-+ pxa_set_ffuart_info(&htcuniversal_pxa_phone_funcs);
-+}
-+
-+static void __init htcuniversal_init(void)
-+{
-+ set_pxa_fb_info(&sony_acx526akm);
-+
-+ platform_device_register(&htcuniversal_asic3);
-+ platform_add_devices(devices, ARRAY_SIZE(devices) );
-+ pxa_set_ficp_info(&htcuniversal_ficp_platform_data);
-+ pxa_set_ohci_info(&htcuniversal_ohci_platform_data);
-+}
-+
-+MACHINE_START(HTCUNIVERSAL, "HTC Universal")
-+ /* Maintainer xanadux.org */
-+ .phys_io = 0x40000000,
-+ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
-+ .boot_params = 0xa0000100,
-+ .map_io = htcuniversal_map_io,
-+ .init_irq = htcuniversal_init_irq,
-+ .init_machine = htcuniversal_init,
-+ .timer = &pxa_timer,
-+MACHINE_END
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,917 @@
-+/*
-+ * Audio support for codec Asahi Kasei AK4641
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Copyright (c) 2006 Giorgio Padrin <giorgio@mandarinlogiq.org>
-+ *
-+ * History:
-+ *
-+ * 2006-03 Written -- Giorgio Padrin
-+ * 2006-09 Test and debug on machine (HP hx4700) -- Elshin Roman <roxmail@list.ru>
-+ *
-+ * AK4641 codec device driver
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * Based on code:
-+ * Copyright (c) 2002 Hewlett-Packard Company
-+ * Copyright (c) 2000 Nicolas Pitre <nico@cam.org>
-+ * Copyright (c) 2000 Lernout & Hauspie Speech Products, N.V.
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License.
-+ */
-+
-+#include <sound/driver.h>
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/types.h>
-+#include <linux/string.h>
-+#include <linux/slab.h>
-+#include <linux/errno.h>
-+#include <linux/ioctl.h>
-+#include <linux/delay.h>
-+#include <linux/i2c.h>
-+
-+#include <sound/core.h>
-+#include <sound/control.h>
-+#include <sound/initval.h>
-+#include <sound/info.h>
-+
-+#include "htcuniversal_ak4641.h"
-+
-+/* Registers */
-+#define R_PM1 0x00
-+#define R_PM2 0x01
-+#define R_SEL1 0x02
-+#define R_SEL2 0x03
-+#define R_MODE1 0x04
-+#define R_MODE2 0x05
-+#define R_DAC 0x06
-+#define R_MIC 0x07
-+#define REG_TIMER 0x08
-+#define REG_ALC1 0x09
-+#define REG_ALC2 0x0a
-+#define R_PGA 0x0b
-+#define R_ATTL 0x0c
-+#define R_ATTR 0x0d
-+#define REG_VOL 0x0e
-+#define R_STATUS 0x0f
-+#define REG_EQLO 0x10
-+#define REG_EQMID 0x11
-+#define REG_EQHI 0x12
-+#define REG_BTIF 0x13
-+
-+/* Register flags */
-+/* REG_PWR1 */
-+#define R_PM1_PMADC 0x01
-+#define R_PM1_PMMIC 0x02
-+#define REG_PWR1_PMAUX 0x04
-+#define REG_PWR1_PMMO 0x08
-+#define R_PM1_PMLO 0x10
-+/* unused 0x20 */
-+/* unused 0x40 */
-+#define R_PM1_PMVCM 0x80
-+
-+/* REG_PWR2 */
-+#define R_PM2_PMDAC 0x01
-+/* unused 0x02 */
-+/* unused 0x04 */
-+#define R_PM2_PMMO2 0x08
-+#define REG_PWR2_MCKAC 0x10
-+/* unused 0x20 */
-+/* unused 0x40 */
-+#define R_PM2_MCKPD 0x80
-+
-+/* REG_SEL1 */
-+#define R_SEL1_PSMO2 0x01
-+/* unused 0x02 */
-+/* unused 0x04 */
-+/* unused 0x08 */
-+#define REG_SEL1_MICM 0x10
-+#define REG_SEL1_DACM 0x20
-+#define REG_SEL1_PSMO 0x40
-+#define REG_SEL1_MOGN 0x80
-+
-+/* REG_SEL2 */
-+#define R_SEL2_PSLOR 0x01
-+#define R_SEL2_PSLOL 0x02
-+#define REG_SEL2_AUXSI 0x04
-+/* unused 0x08 */
-+#define REG_SEL2_MICL 0x10
-+#define REG_SEL2_AUXL 0x20
-+/* unused 0x40 */
-+#define R_SEL2_DACL 0x80
-+
-+/* REG_MODE1 */
-+#define REG_MODE1_DIF0 0x01
-+#define REG_MODE1_DIF1 0x02
-+/* unused 0x04 */
-+/* unused 0x08 */
-+/* unused 0x10 */
-+/* unused 0x20 */
-+/* unused 0x40 */
-+/* unused 0x80 */
-+
-+/* REG_MODE2 */
-+/* unused 0x01 */
-+#define REG_MODE2_LOOP 0x02
-+#define REG_MODE2_HPM 0x04
-+/* unused 0x08 */
-+/* unused 0x10 */
-+#define REG_MODE2_MCK0 0x20
-+#define REG_MODE2_MCK1 0x40
-+/* unused 0x80 */
-+
-+/* REG_DAC */
-+#define REG_DAC_DEM0 0x01
-+#define REG_DAC_DEM1 0x02
-+#define REG_DAC_EQ 0x04
-+/* unused 0x08 */
-+#define R_DAC_DATTC 0x10
-+#define R_DAC_SMUTE 0x20
-+#define REG_DAC_TM 0x40
-+/* unused 0x80 */
-+
-+/* REG_MIC */
-+#define R_MIC_MGAIN 0x01
-+#define R_MIC_MSEL 0x02
-+#define R_MIC_MICAD 0x04
-+#define R_MIC_MPWRI 0x08
-+#define R_MIC_MPWRE 0x10
-+#define REG_MIC_AUXAD 0x20
-+/* unused 0x40 */
-+/* unused 0x80 */
-+
-+/* REG_TIMER */
-+
-+#define REG_TIMER_LTM0 0x01
-+#define REG_TIMER_LTM1 0x02
-+#define REG_TIMER_WTM0 0x04
-+#define REG_TIMER_WTM1 0x08
-+#define REG_TIMER_ZTM0 0x10
-+#define REG_TIMER_ZTM1 0x20
-+/* unused 0x40 */
-+/* unused 0x80 */
-+
-+#define REG_ALC1_LMTH 0x01
-+#define REG_ALC1_RATT 0x02
-+#define REG_ALC1_LMAT0 0x04
-+#define REG_ALC1_LMAT1 0x08
-+#define REG_ALC1_ZELM 0x10
-+#define REG_ALC1_ALC1 0x20
-+/* unused 0x40 */
-+/* unused 0x80 */
-+
-+/* REG_ALC2 */
-+
-+/* REG_PGA */
-+
-+/* REG_ATTL */
-+
-+/* REG_ATTR */
-+
-+/* REG_VOL */
-+#define REG_VOL_ATTM 0x80
-+
-+/* REG_STATUS */
-+#define R_STATUS_DTMIC 0x01
-+
-+/* REG_EQ controls use 4 bits for each of 5 EQ levels */
-+
-+/* Bluetooth not yet implemented */
-+#define REG_BTIF_PMAD2 0x01
-+#define REG_BTIF_PMDA2 0x02
-+#define REG_BTIF_PMBIF 0x04
-+#define REG_BTIF_ADC2 0x08
-+#define REG_BTIF_DAC2 0x10
-+#define REG_BTIF_BTFMT0 0x20
-+#define REG_BTIF_BTFMT1 0x40
-+/* unused 0x80 */
-+
-+/* begin {{ I2C }} */
-+
-+static struct i2c_driver snd_ak4641_i2c_driver = {
-+ .driver = {
-+ .name = "ak4641-i2c"
-+ },
-+};
-+
-+static int snd_ak4641_i2c_init(void)
-+{
-+ return i2c_add_driver(&snd_ak4641_i2c_driver);
-+}
-+
-+static void snd_ak4641_i2c_free(void)
-+{
-+ i2c_del_driver(&snd_ak4641_i2c_driver);
-+}
-+
-+static inline int snd_ak4641_i2c_probe(struct snd_ak4641 *ak)
-+{
-+ if (ak->i2c_client.adapter == NULL) return -EINVAL;
-+ ak->i2c_client.addr = 0x12;
-+ if (i2c_smbus_xfer(ak->i2c_client.adapter, ak->i2c_client.addr,
-+ 0, 0, 0, I2C_SMBUS_QUICK, NULL) < 0)
-+ return -ENODEV;
-+ else return 0;
-+}
-+
-+static int snd_ak4641_i2c_attach(struct snd_ak4641 *ak)
-+{
-+ int ret = 0;
-+ if ((ret = snd_ak4641_i2c_probe(ak)) < 0) return ret;
-+ snprintf(ak->i2c_client.name, sizeof(ak->i2c_client.name),
-+ "ak4641-i2c at %d-%04x",
-+ i2c_adapter_id(ak->i2c_client.adapter), ak->i2c_client.addr);
-+ return i2c_attach_client(&ak->i2c_client);
-+}
-+
-+static void snd_ak4641_i2c_detach(struct snd_ak4641 *ak)
-+{
-+ i2c_detach_client(&ak->i2c_client);
-+}
-+
-+/* end {{ I2C }} */
-+
-+
-+/* begin {{ Registers & Cache Ops }} */
-+
-+static int snd_ak4641_hwsync(struct snd_ak4641 *ak, int read, u8 reg)
-+{
-+ struct i2c_msg msgs[2];
-+ u8 buf[2];
-+ int ret;
-+
-+ snd_assert(reg < ARRAY_SIZE(ak->regs), return -EINVAL);
-+
-+ /* setup i2c msgs */
-+ msgs[0].addr = ak->i2c_client.addr;
-+ msgs[0].flags = 0;
-+ msgs[0].buf = buf;
-+ if (!read)
-+ msgs[0].len = 2;
-+ else {
-+ msgs[1].flags = I2C_M_RD;
-+ msgs[1].addr = msgs[0].addr;
-+ msgs[1].buf = msgs[0].buf + 1;
-+ msgs[0].len = 1;
-+ msgs[1].len = 1;
-+ }
-+
-+ buf[0] = reg;
-+
-+ /* regs[reg] -> buffer, on write */
-+ if (!read) buf[1] = ak->regs[reg];
-+
-+ /* i2c transfer */
-+ ret = i2c_transfer(ak->i2c_client.adapter, msgs, read ? 2 : 1);
-+ if (ret != (read ? 2 : 1)) return ret; /* transfer error */ //@@ error ret < 0, or not ?
-+
-+ /* regs[reg] <- buffer, on read */
-+ if (read) ak->regs[reg] = buf[1];
-+
-+ return 0;
-+}
-+
-+static inline int snd_ak4641_hwsync_read(struct snd_ak4641 *ak, u8 reg)
-+{
-+ return snd_ak4641_hwsync(ak, 1, reg);
-+}
-+
-+static inline int snd_ak4641_hwsync_write(struct snd_ak4641 *ak, u8 reg)
-+{
-+ return snd_ak4641_hwsync(ak, 0, reg);
-+}
-+
-+static int snd_ak4641_hwsync_read_all(struct snd_ak4641 *ak)
-+{
-+ u8 reg;
-+ for (reg = 0; reg < ARRAY_SIZE(ak->regs); reg++)
-+ if (snd_ak4641_hwsync_read(ak, reg) < 0) return -1;
-+ return 0;
-+}
-+
-+static int snd_ak4641_hwsync_write_all(struct snd_ak4641 *ak)
-+{
-+ u8 reg;
-+ for (reg = 0; reg < ARRAY_SIZE(ak->regs); reg++)
-+ if (snd_ak4641_hwsync_write(ak, reg) < 0) return -1;
-+ return 0;
-+}
-+
-+static int snd_ak4641_reg_changed(struct snd_ak4641 *ak, u8 reg)
-+{
-+ if ((reg != R_PGA && ak->powered_on) ||
-+ (reg == R_PGA && (ak->regs[R_PM1] & R_PM1_PMMIC)))
-+ return snd_ak4641_hwsync_write(ak, reg);
-+ return 0;
-+}
-+
-+/* end {{ Registers & Cache Ops }}*/
-+
-+
-+static inline void snd_ak4641_lock(struct snd_ak4641 *ak)
-+{
-+ down(&ak->sem);
-+}
-+
-+static inline void snd_ak4641_unlock(struct snd_ak4641 *ak)
-+{
-+ up(&ak->sem);
-+}
-+
-+#define WRITE_MASK(i, val, mask) (((i) & ~(mask)) | ((val) & (mask)))
-+
-+
-+/* begin {{ Controls }} */
-+
-+#define INV_RANGE(val, mask) \
-+ (~(val) & (mask))
-+
-+/*-begin----------------------------------------------------------*/
-+static int snd_ak4641_actl_playback_volume_info(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
-+ uinfo->count = 2;
-+ uinfo->value.integer.min = 0;
-+ uinfo->value.integer.max = 0xff;
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_playback_volume_get(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+
-+ snd_ak4641_lock(ak);
-+ ucontrol->value.integer.value[0] = INV_RANGE(ak->regs[R_ATTL], 0xff);
-+ ucontrol->value.integer.value[1] = INV_RANGE(ak->regs[R_ATTR], 0xff);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_playback_volume_put(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+
-+ snd_ak4641_lock(ak);
-+ ak->regs[R_ATTL] = INV_RANGE(ucontrol->value.integer.value[0], 0xff);
-+ ak->regs[R_ATTR] = INV_RANGE(ucontrol->value.integer.value[1], 0xff);
-+ snd_ak4641_reg_changed(ak, R_ATTL);
-+ snd_ak4641_reg_changed(ak, R_ATTR);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+/*-end------------------------------------------------------------*/
-+
-+/*-begin----------------------------------------------------------*/
-+static int snd_ak4641_actl_mic_gain_info(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
-+ uinfo->count = 1;
-+ uinfo->value.integer.min = 0;
-+ uinfo->value.integer.max = 0x7f;
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_mic_gain_get(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+
-+ ucontrol->value.integer.value[0] = ak->regs[R_PGA];
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_mic_gain_put(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+
-+ snd_ak4641_lock(ak);
-+ ak->regs[R_PGA] = ucontrol->value.integer.value[0];
-+ snd_ak4641_reg_changed(ak, R_PGA);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+/*-end------------------------------------------------------------*/
-+
-+#define ACTL(ctl_name, _name) \
-+static struct snd_kcontrol_new snd_ak4641_actl_ ## ctl_name = \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = _name, \
-+ .info = snd_ak4641_actl_ ## ctl_name ## _info, \
-+ .get = snd_ak4641_actl_ ## ctl_name ## _get, .put = snd_ak4641_actl_ ## ctl_name ## _put };
-+
-+ACTL(playback_volume, "Master Playback Volume")
-+ACTL(mic_gain, "Mic Capture Gain")
-+
-+struct snd_ak4641_uctl_bool {
-+ int (*get) (struct snd_ak4641 *uda);
-+ int (*set) (struct snd_ak4641 *uda, int on);
-+};
-+
-+static int snd_ak4641_actl_bool_info(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_info *uinfo)
-+{
-+ uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
-+ uinfo->count = 1;
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_bool_get(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+ struct snd_ak4641_uctl_bool *uctl =
-+ (struct snd_ak4641_uctl_bool *) kcontrol->private_value;
-+
-+ ucontrol->value.integer.value[0] = uctl->get(ak);
-+ return 0;
-+}
-+
-+static int snd_ak4641_actl_bool_put(struct snd_kcontrol *kcontrol,
-+ struct snd_ctl_elem_value *ucontrol)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
-+ struct snd_ak4641_uctl_bool *uctl =
-+ (struct snd_ak4641_uctl_bool *) kcontrol->private_value;
-+
-+ return uctl->set(ak, ucontrol->value.integer.value[0]);
-+}
-+
-+/*-begin----------------------------------------------------------*/
-+static int snd_ak4641_uctl_playback_switch_get(struct snd_ak4641 *ak)
-+{
-+ return (ak->regs[R_DAC] & R_DAC_SMUTE) == 0x00;
-+}
-+
-+static int snd_ak4641_uctl_playback_switch_set(struct snd_ak4641 *ak, int on)
-+{
-+ snd_ak4641_lock(ak);
-+ ak->regs[R_DAC] = WRITE_MASK(ak->regs[R_DAC],
-+ on ? 0x00 : R_DAC_SMUTE, R_DAC_SMUTE);
-+ snd_ak4641_reg_changed(ak, R_DAC);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+/*-end------------------------------------------------------------*/
-+
-+/*-begin----------------------------------------------------------*/
-+static int snd_ak4641_uctl_mic_boost_get(struct snd_ak4641 *ak)
-+{
-+ return (ak->regs[R_MIC] & R_MIC_MGAIN) == R_MIC_MGAIN;
-+}
-+
-+static int snd_ak4641_uctl_mic_boost_set(struct snd_ak4641 *ak, int on)
-+{
-+ snd_ak4641_lock(ak);
-+ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC],
-+ on ? R_MIC_MGAIN : 0x00, R_MIC_MGAIN);
-+ snd_ak4641_reg_changed(ak, R_MIC);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+/*-end------------------------------------------------------------*/
-+
-+/*-begin----------------------------------------------------------*/
-+static int snd_ak4641_uctl_mono_out_get(struct snd_ak4641 *ak)
-+{
-+ printk("mono_out status 0x%8.8x -> 0x%8.8x\n",ak->regs[R_SEL1], ak->regs[R_SEL1] & REG_SEL1_PSMO);
-+ return (ak->regs[R_SEL1] & REG_SEL1_PSMO) == REG_SEL1_PSMO;
-+}
-+
-+static int snd_ak4641_uctl_mono_out_set(struct snd_ak4641 *ak, int on)
-+{
-+ printk("phone mic enable called. on=%d\n",on);
-+ snd_ak4641_lock(ak);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], on ? R_PM1_PMMIC : 0x00, R_PM1_PMMIC);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], on ? REG_PWR1_PMMO : 0x00, REG_PWR1_PMMO);
-+ snd_ak4641_reg_changed(ak, R_PM1);
-+
-+ snd_ak4641_hwsync_write(ak, R_PGA); /* mic PGA gain is reset when PMMIC = 0 */
-+
-+ /* internal mic */
-+ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], on ? R_MIC_MPWRI : 0x0, R_MIC_MPWRI);
-+ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], 0x0, R_MIC_MSEL);
-+ snd_ak4641_hwsync_write(ak, R_MIC);
-+
-+// ak->regs[REG_BTIF] = WRITE_MASK(ak->regs[REG_BTIF], 0x0, REG_BTIF_DAC2);
-+// snd_ak4641_hwsync_write(ak, REG_BTIF);
-+ /* */
-+// ak->regs[REG_VOL] = WRITE_MASK(ak->regs[REG_VOL], on ? REG_VOL_ATTM : 0x00, REG_VOL_ATTM);
-+// ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_MOGN : 0x00, REG_SEL1_MOGN);
-+ ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_MICM : 0x00, REG_SEL1_MICM);
-+ ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_PSMO : 0x00, REG_SEL1_PSMO);
-+ snd_ak4641_reg_changed(ak, R_SEL1);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+/*-end------------------------------------------------------------*/
-+
-+#define ACTL_BOOL(ctl_name, _name) \
-+static struct snd_ak4641_uctl_bool snd_ak4641_actl_ ## ctl_name ## _pvalue = \
-+{ .get = snd_ak4641_uctl_ ## ctl_name ## _get, \
-+ .set = snd_ak4641_uctl_ ## ctl_name ## _set }; \
-+static struct snd_kcontrol_new snd_ak4641_actl_ ## ctl_name = \
-+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = _name, .info = snd_ak4641_actl_bool_info, \
-+ .get = snd_ak4641_actl_bool_get, .put = snd_ak4641_actl_bool_put, \
-+ .private_value = (unsigned long) &snd_ak4641_actl_ ## ctl_name ## _pvalue };
-+
-+ACTL_BOOL(playback_switch, "Master Playback Switch")
-+ACTL_BOOL(mic_boost, "Mic Boost (+20dB)")
-+ACTL_BOOL(mono_out, "Phone mic enable")
-+
-+static void snd_ak4641_headphone_on(struct snd_ak4641 *ak, int on);
-+static void snd_ak4641_speaker_on(struct snd_ak4641 *ak, int on);
-+static void snd_ak4641_select_mic(struct snd_ak4641 *ak);
-+
-+void snd_ak4641_hp_connected(struct snd_ak4641 *ak, int connected)
-+{
-+ snd_ak4641_lock(ak);
-+ if (connected != ak->hp_connected) {
-+ ak->hp_connected = connected;
-+
-+ /* headphone or speaker, on playback */
-+ if (ak->playback_on) {
-+ if (connected) {
-+ snd_ak4641_headphone_on(ak, 1);
-+ snd_ak4641_speaker_on(ak, 0);
-+ } else {
-+ snd_ak4641_speaker_on(ak, 1);
-+ snd_ak4641_headphone_on(ak, 0);
-+ }
-+ }
-+
-+ /* headset or internal mic, on capture */
-+ if (ak->capture_on)
-+ snd_ak4641_select_mic(ak);
-+ }
-+ snd_ak4641_unlock(ak);
-+}
-+
-+/* end {{ Controls }} */
-+
-+
-+/* begin {{ Headphone Detected Notification }} */
-+
-+static void snd_ak4641_hp_detected_w_fn(void *p)
-+{
-+ struct snd_ak4641 *ak = (struct snd_ak4641 *)p;
-+
-+ snd_ak4641_hp_connected(ak, ak->hp_detected.detected);
-+}
-+
-+void snd_ak4641_hp_detected(struct snd_ak4641 *ak, int detected)
-+{
-+ if (detected != ak->hp_detected.detected) {
-+ ak->hp_detected.detected = detected;
-+ queue_work(ak->hp_detected.wq, &ak->hp_detected.w);
-+ }
-+}
-+
-+static int snd_ak4641_hp_detected_init(struct snd_ak4641 *ak)
-+{
-+ INIT_WORK(&ak->hp_detected.w, snd_ak4641_hp_detected_w_fn);
-+ ak->hp_detected.detected = ak->hp_connected;
-+ ak->hp_detected.wq = create_singlethread_workqueue("ak4641");
-+ if (ak->hp_detected.wq) return 0;
-+ else return -1;
-+}
-+
-+static void snd_ak4641_hp_detected_free(struct snd_ak4641 *ak)
-+{
-+ destroy_workqueue(ak->hp_detected.wq);
-+}
-+
-+/* end {{ Headphone Detected Notification }} */
-+
-+
-+/* begin {{ Codec Control }} */
-+
-+static void snd_ak4641_headphone_on(struct snd_ak4641 *ak, int on)
-+{
-+ if (on) {
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ ak->headphone_out_on(1);
-+ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
-+ R_SEL2_PSLOL | R_SEL2_PSLOR,
-+ R_SEL2_PSLOL | R_SEL2_PSLOR);
-+ snd_ak4641_hwsync_write(ak, R_SEL2);
-+ } else {
-+ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
-+ 0x00, R_SEL2_PSLOL | R_SEL2_PSLOR);
-+ snd_ak4641_hwsync_write(ak, R_SEL2);
-+ ak->headphone_out_on(0);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ }
-+}
-+
-+static void snd_ak4641_speaker_on(struct snd_ak4641 *ak, int on)
-+{
-+ if (on) {
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ ak->speaker_out_on(1);
-+ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
-+ R_SEL2_PSLOL | R_SEL2_PSLOR,
-+ R_SEL2_PSLOL | R_SEL2_PSLOR);
-+ snd_ak4641_hwsync_write(ak, R_SEL2);
-+ } else {
-+ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
-+ 0x00, R_SEL2_PSLOL | R_SEL2_PSLOR);
-+ snd_ak4641_hwsync_write(ak, R_SEL2);
-+ ak->speaker_out_on(0);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ }
-+}
-+
-+static inline int snd_ak4641_power_on(struct snd_ak4641 *ak)
-+{
-+ ak->reset_pin(1);
-+ ak->power_on_chip(1);
-+ msleep(1);
-+ ak->reset_pin(0);
-+ ak->powered_on = 1;
-+ return 0;
-+}
-+
-+static inline int snd_ak4641_power_off(struct snd_ak4641 *ak)
-+{
-+ ak->powered_on = 0;
-+ ak->power_on_chip(0);
-+ return 0;
-+}
-+
-+static inline void snd_ak4641_headphone_out_on(struct snd_ak4641 *ak, int on)
-+{
-+ if (ak->headphone_out_on) ak->headphone_out_on(on);
-+}
-+
-+static inline void snd_ak4641_speaker_out_on(struct snd_ak4641 *ak, int on)
-+{
-+ if (ak->speaker_out_on) ak->speaker_out_on(on);
-+}
-+
-+static int snd_ak4641_playback_on(struct snd_ak4641 *ak)
-+{
-+ if (ak->playback_on) return 0;
-+
-+ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2],
-+ R_PM2_PMDAC, R_PM2_MCKPD | R_PM2_PMDAC);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO);
-+ snd_ak4641_hwsync_write(ak, R_PM2);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ if (ak->hp_connected) snd_ak4641_headphone_on(ak, 1);
-+ else snd_ak4641_speaker_on(ak, 1);
-+
-+ ak->playback_on = 1;
-+
-+ return 0;
-+}
-+
-+static int snd_ak4641_playback_off(struct snd_ak4641 *ak)
-+{
-+ if (!ak->playback_on) return 0;
-+
-+ ak->playback_on = 0;
-+
-+ if (ak->hp_connected) snd_ak4641_headphone_on(ak, 0);
-+ else snd_ak4641_speaker_on(ak, 0);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO);
-+ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2],
-+ (!ak->capture_on ? R_PM2_MCKPD : 0x00) | R_PM2_PMDAC,
-+ R_PM2_MCKPD | R_PM2_PMDAC);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ snd_ak4641_hwsync_write(ak, R_PM2);
-+
-+ return 0;
-+}
-+
-+static void snd_ak4641_select_mic(struct snd_ak4641 *ak)
-+{
-+ int mic = 0;
-+ u8 r_mic;
-+
-+ if (ak->hp_connected) {
-+ /* check headset mic */
-+ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], R_MIC_MPWRE, R_MIC_MPWRE);
-+ snd_ak4641_hwsync_write(ak, R_MIC);
-+ snd_ak4641_hwsync_read(ak, R_STATUS);
-+ mic = (ak->regs[R_STATUS] & R_STATUS_DTMIC) == R_STATUS_DTMIC;
-+
-+ printk("htcuniversal_ak4641_select_mic: mic=%d\n",mic);
-+
-+ r_mic = WRITE_MASK(ak->regs[R_MIC],
-+ R_MIC_MSEL | (ak->capture_on ? R_MIC_MPWRE : 0x00),
-+ R_MIC_MSEL | R_MIC_MPWRI | R_MIC_MPWRE);
-+ }
-+ else
-+ r_mic = WRITE_MASK(ak->regs[R_MIC],
-+ 0x00 | (ak->capture_on ? R_MIC_MPWRI : 0x00),
-+ R_MIC_MSEL | R_MIC_MPWRI | R_MIC_MPWRE);
-+
-+ if (r_mic != ak->regs[R_MIC]) {
-+ ak->regs[R_MIC] = r_mic;
-+ snd_ak4641_hwsync_write(ak, R_MIC);
-+ }
-+}
-+
-+static int snd_ak4641_capture_on(struct snd_ak4641 *ak)
-+{
-+ if (ak->capture_on) return 0;
-+
-+ if (!ak->playback_on) {
-+ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2], 0x00, R_PM2_MCKPD);
-+ snd_ak4641_hwsync_write(ak, R_PM2);
-+ }
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMMIC | R_PM1_PMADC,
-+ R_PM1_PMMIC | R_PM1_PMADC);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ snd_ak4641_hwsync_write(ak, R_PGA); /* mic PGA gain is reset when PMMIC = 0 */
-+
-+ ak->capture_on = 1;
-+
-+ snd_ak4641_select_mic(ak);
-+
-+ msleep(47); /* accounts for ADC init cycle, time enough for fs >= 44.1 kHz */
-+
-+ return 0;
-+}
-+
-+static int snd_ak4641_capture_off(struct snd_ak4641 *ak)
-+{
-+ if (!ak->capture_on) return 0;
-+
-+ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC],
-+ 0x00, R_MIC_MPWRI | R_MIC_MPWRE | R_MIC_MSEL);
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMMIC | R_PM1_PMADC);
-+ snd_ak4641_hwsync_write(ak, R_MIC);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ if (!ak->playback_on) {
-+ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2], R_PM2_MCKPD, R_PM2_MCKPD);
-+ snd_ak4641_hwsync_write(ak, R_PM2);
-+ }
-+
-+ ak->capture_on = 0;
-+
-+ return 0;
-+}
-+
-+int snd_ak4641_open_stream(struct snd_ak4641 *ak, int stream)
-+{
-+ snd_ak4641_lock(ak);
-+ if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ ak->playback_stream_opened = 1;
-+ snd_ak4641_playback_on(ak);
-+ } else {
-+ ak->capture_stream_opened = 1;
-+ snd_ak4641_capture_on(ak);
-+ }
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+int snd_ak4641_close_stream(struct snd_ak4641 *ak, int stream)
-+{
-+ snd_ak4641_lock(ak);
-+ if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
-+ ak->playback_stream_opened = 0;
-+ snd_ak4641_playback_off(ak);
-+ } else {
-+ ak->capture_stream_opened = 0;
-+ snd_ak4641_capture_off(ak);
-+ }
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+static int snd_ak4641_init_regs(struct snd_ak4641 *ak)
-+{
-+ snd_ak4641_hwsync_read_all(ak);
-+
-+ //@@ MEMO: add some configs
-+
-+ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMVCM, R_PM1_PMVCM);
-+ ak->regs[R_DAC] = WRITE_MASK(ak->regs[R_DAC], 0x00, R_DAC_DATTC);
-+ snd_ak4641_hwsync_write(ak, R_PM1);
-+ snd_ak4641_hwsync_write(ak, R_DAC);
-+
-+ return 0;
-+}
-+
-+int snd_ak4641_suspend(struct snd_ak4641 *ak, pm_message_t state)
-+{
-+ snd_ak4641_lock(ak);
-+ if (ak->playback_on) snd_ak4641_playback_off(ak);
-+ if (ak->capture_on) snd_ak4641_capture_off(ak);
-+ snd_ak4641_power_off(ak);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+int snd_ak4641_resume(struct snd_ak4641 *ak)
-+{
-+ snd_ak4641_lock(ak);
-+ snd_ak4641_power_on(ak);
-+ snd_ak4641_hwsync_write_all(ak);
-+ if (ak->playback_stream_opened) snd_ak4641_playback_on(ak);
-+ if (ak->capture_stream_opened) snd_ak4641_capture_on(ak);
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+static void snd_ak4641_init_ak(struct snd_ak4641 *ak)
-+{
-+ init_MUTEX(&ak->sem);
-+ ak->i2c_client.driver = &snd_ak4641_i2c_driver;
-+}
-+
-+int snd_ak4641_activate(struct snd_ak4641 *ak)
-+{
-+ int ret = 0;
-+
-+ snd_ak4641_init_ak(ak);
-+ snd_ak4641_lock(ak);
-+ snd_ak4641_power_on(ak);
-+ if ((ret = snd_ak4641_i2c_attach(ak)) < 0)
-+ goto failed_i2c_attach;
-+ snd_ak4641_init_regs(ak);
-+ if ((ret = snd_ak4641_hp_detected_init(ak)) < 0)
-+ goto failed_hp_detected_init;
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+
-+ failed_hp_detected_init:
-+ snd_ak4641_i2c_detach(ak);
-+ failed_i2c_attach:
-+ snd_ak4641_power_off(ak);
-+ snd_ak4641_unlock(ak);
-+ return ret;
-+}
-+
-+void snd_ak4641_deactivate(struct snd_ak4641 *ak)
-+{
-+ snd_ak4641_lock(ak);
-+ snd_ak4641_hp_detected_free(ak);
-+ snd_ak4641_i2c_detach(ak);
-+ snd_ak4641_power_off(ak);
-+ snd_ak4641_unlock(ak);
-+}
-+
-+int snd_ak4641_add_mixer_controls(struct snd_ak4641 *ak, struct snd_card *card)
-+{
-+ snd_ak4641_lock(ak);
-+ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_playback_volume, ak));
-+ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_playback_switch, ak));
-+ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mic_gain, ak));
-+ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mic_boost, ak));
-+ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mono_out, ak));
-+ snd_ak4641_unlock(ak);
-+ return 0;
-+}
-+
-+/* end {{ Codec Control }} */
-+
-+
-+/* begin {{ Module }} */
-+
-+static int __init snd_ak4641_module_on_load(void)
-+{
-+ snd_ak4641_i2c_init();
-+ return 0;
-+}
-+
-+static void __exit snd_ak4641_module_on_unload(void)
-+{
-+ snd_ak4641_i2c_free();
-+}
-+
-+module_init(snd_ak4641_module_on_load);
-+module_exit(snd_ak4641_module_on_unload);
-+
-+EXPORT_SYMBOL(snd_ak4641_activate);
-+EXPORT_SYMBOL(snd_ak4641_deactivate);
-+EXPORT_SYMBOL(snd_ak4641_add_mixer_controls);
-+EXPORT_SYMBOL(snd_ak4641_open_stream);
-+EXPORT_SYMBOL(snd_ak4641_close_stream);
-+EXPORT_SYMBOL(snd_ak4641_suspend);
-+EXPORT_SYMBOL(snd_ak4641_resume);
-+EXPORT_SYMBOL(snd_ak4641_hp_connected);
-+EXPORT_SYMBOL(snd_ak4641_hp_detected);
-+
-+MODULE_AUTHOR("Giorgio Padrin");
-+MODULE_DESCRIPTION("Audio support for codec Asahi Kasei AK4641");
-+MODULE_LICENSE("GPL");
-+
-+/* end {{ Module }} */
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,65 @@
-+/*
-+ * Audio support for codec Asahi Kasei AK4641
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Copyright (c) 2006 Giorgio Padrin <giorgio@mandarinlogiq.org>
-+ */
-+
-+#ifndef __SOUND_AK4641_H
-+#define __SOUND_AK4641_H
-+
-+#include <linux/i2c.h>
-+
-+struct snd_ak4641 {
-+ struct semaphore sem;
-+
-+ u8 regs[0x14]; /* registers cache */
-+
-+ unsigned int
-+ powered_on:1,
-+ playback_on:1,
-+ playback_stream_opened:1,
-+ capture_on:1,
-+ capture_stream_opened:1;
-+
-+ unsigned int
-+ hp_connected:1;
-+
-+ /* -- configuration (to fill before activation) -- */
-+ void (*power_on_chip)(int on);
-+ void (*reset_pin)(int on);
-+ void (*headphone_out_on)(int on);
-+ void (*speaker_out_on)(int on);
-+
-+ struct i2c_client i2c_client; /* to fill .adapter */
-+ /* ----------------------------------------------- */
-+
-+ struct {
-+ int detected;
-+ struct workqueue_struct *wq;
-+ struct work_struct w;
-+ } hp_detected;
-+};
-+
-+
-+/* Note: opening, closing, suspending and resuming a stream
-+ * require the clocks (MCLK and I2S ones) running
-+ */
-+
-+/* don't forget to specify I2C adapter in i2c_client field */
-+int snd_ak4641_activate(struct snd_ak4641 *ak);
-+
-+void snd_ak4641_deactivate(struct snd_ak4641 *ak);
-+int snd_ak4641_add_mixer_controls(struct snd_ak4641 *ak, struct snd_card *card);
-+int snd_ak4641_open_stream(struct snd_ak4641 *ak, int stream);
-+int snd_ak4641_close_stream(struct snd_ak4641 *ak, int stream);
-+int snd_ak4641_suspend(struct snd_ak4641 *ak, pm_message_t state);
-+int snd_ak4641_resume(struct snd_ak4641 *ak);
-+
-+void snd_ak4641_hp_connected(struct snd_ak4641 *ak, int connected); /* non atomic context */
-+void snd_ak4641_hp_detected(struct snd_ak4641 *ak, int detected); /* atomic context */
-+
-+#endif /* __SOUND_AK4641_H */
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,143 @@
-+/*
-+ * LEDs support for the HP iPaq hx4700
-+ *
-+ * Copyright (c) 2006 Anton Vorontsov <cbou@mail.ru>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <asm/mach-types.h>
-+#include <asm/hardware/asic3_leds.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+//FIXME
-+//DEFINE_LED_TRIGGER_SHARED_GLOBAL(htcuniversal_radio_trig);
-+//EXPORT_LED_TRIGGER_SHARED(htcuniversal_radio_trig);
-+
-+static struct asic3_led htcuniversal_leds[] = {
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:red",
-+ .default_trigger = "htcuniversal-charging",
-+ },
-+ .hw_num = 2,
-+
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:green",
-+ .default_trigger = "htcuniversal-chargefull",
-+ },
-+ .hw_num = 1,
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:wifi-bt",
-+ .default_trigger = "htcuniversal-radio",
-+ },
-+ .hw_num = 0,
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:phonebuttons",
-+ .default_trigger = "htcuniversal-phonebuttons",
-+ },
-+ .hw_num = -1,
-+ .gpio_num = ('D'-'A')*16+GPIOD_BL_KEYP_PWR_ON,
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:vibra",
-+ .default_trigger = "htcuniversal-vibra",
-+ },
-+ .hw_num = -1,
-+ .gpio_num = ('D'-'A')*16+GPIOD_VIBRA_PWR_ON,
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:flashlight1",
-+ .default_trigger = "htcuniversal-flashlight1",
-+ },
-+ .hw_num = -1,
-+ .gpio_num = ('A'-'A')*16+GPIOA_FLASHLIGHT,
-+ },
-+ {
-+ .led_cdev = {
-+ .name = "htcuniversal:kbdbacklight",
-+ .default_trigger = "htcuniversal-kbdbacklight",
-+ },
-+ .hw_num = -1,
-+ .gpio_num = ('D'-'A')*16+GPIOD_BL_KEYB_PWR_ON,
-+ },
-+};
-+
-+void htcuniversal_leds_release(struct device *dev)
-+{
-+ return;
-+}
-+
-+static
-+struct asic3_leds_machinfo htcuniversal_leds_machinfo = {
-+ .num_leds = ARRAY_SIZE(htcuniversal_leds),
-+ .leds = htcuniversal_leds,
-+ .asic3_pdev = &htcuniversal_asic3,
-+};
-+
-+static
-+struct platform_device htcuniversal_leds_pdev = {
-+ .name = "asic3-leds",
-+ .dev = {
-+ .platform_data = &htcuniversal_leds_machinfo,
-+ .release = htcuniversal_leds_release,
-+ },
-+};
-+
-+static
-+int __init htcuniversal_leds_init(void)
-+{
-+ int ret;
-+ printk("htcuniversal LEDs Driver\n");
-+// led_trigger_register_shared("htcuniversal-radio", &htcuniversal_radio_trig);
-+
-+ ret = asic3_leds_register();
-+ if (ret) goto asic3_leds_failed;
-+
-+ ret = platform_device_register(&htcuniversal_leds_pdev);
-+ if (ret) goto platform_device_failed;
-+
-+ goto success;
-+
-+platform_device_failed:
-+ asic3_leds_unregister();
-+asic3_leds_failed:
-+// led_trigger_unregister_shared(htcuniversal_radio_trig);
-+ printk("htcuniversal LEDs Driver failed to init");
-+success:
-+ return ret;
-+}
-+
-+static
-+void __exit htcuniversal_leds_exit(void)
-+{
-+// led_trigger_unregister_shared(htcuniversal_radio_trig);
-+ platform_device_unregister(&htcuniversal_leds_pdev);
-+ asic3_leds_unregister();
-+ return;
-+}
-+
-+module_init(htcuniversal_leds_init);
-+module_exit(htcuniversal_leds_exit);
-+
-+MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>");
-+MODULE_DESCRIPTION("htcuniversal LEDs driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,61 @@
-+/*
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ * Copyright (C) 2006 Paul Sokolosvky
-+ * Based on code from older versions of htcuniversal_lcd.c
-+ *
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/platform_device.h>
-+#include <asm/arch/hardware.h> /* for pxa-regs.h (__REG) */
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/mach-types.h> /* machine_is_htcuniversal */
-+//#include <linux/corgi_bl.h>
-+#include <linux/backlight.h>
-+#include <linux/err.h>
-+
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#define HTCUNIVERSAL_MAX_INTENSITY 0xc7
-+
-+static void htcuniversal_set_bl_intensity(int intensity)
-+{
-+ PWM_CTRL1 = 1; /* pre-scaler */
-+ PWM_PWDUTY1 = intensity; /* duty cycle */
-+ PWM_PERVAL1 = HTCUNIVERSAL_MAX_INTENSITY+1; /* period */
-+
-+ if (intensity > 0) {
-+ pxa_set_cken(CKEN_PWM1, 1);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev,
-+ (1<<GPIOD_FL_PWR_ON), (1<<GPIOD_FL_PWR_ON));
-+ } else {
-+ pxa_set_cken(CKEN_PWM1, 0);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev,
-+ (1<<GPIOD_FL_PWR_ON), 0);
-+ }
-+}
-+
-+
-+static struct generic_bl_info htcuniversal_bl_machinfo = {
-+ .default_intensity = HTCUNIVERSAL_MAX_INTENSITY / 4,
-+ .limit_mask = 0xff,
-+ .max_intensity = HTCUNIVERSAL_MAX_INTENSITY,
-+ .set_bl_intensity = htcuniversal_set_bl_intensity,
-+};
-+
-+struct platform_device htcuniversal_bl = {
-+ .name = "corgi-bl",
-+ .dev = {
-+ .platform_data = &htcuniversal_bl_machinfo,
-+ },
-+};
-+
-+MODULE_AUTHOR("Paul Sokolovsky <pmiscml@gmail.com>");
-+MODULE_DESCRIPTION("Backlight driver for HTC Universal");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,135 @@
-+/* Bluetooth interface driver for TI BRF6150 on HX4700
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * 2005-04-21 Todd Blumer Created.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/serial.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+#include "htcuniversal_bt.h"
-+
-+static uint use_led=1;
-+
-+static void
-+htcuniversal_bt_configure( int state )
-+{
-+ int tries;
-+
-+ printk( KERN_NOTICE "htcuniversal configure bluetooth: %d\n", state );
-+ switch (state) {
-+
-+ case PXA_UART_CFG_PRE_STARTUP:
-+ break;
-+
-+ case PXA_UART_CFG_POST_STARTUP:
-+ /* pre-serial-up hardware configuration */
-+ htcuniversal_egpio_enable(1<<EGPIO5_BT_3V3_ON);
-+ mdelay(50);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_PWR_ON, 1<<GPIOC_BT_PWR_ON);
-+ mdelay(10);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_RESET, 0);
-+ mdelay(10);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_RESET, 1<<GPIOC_BT_RESET);
-+ mdelay(10);
-+
-+ /*
-+ * BRF6150's RTS goes low when firmware is ready
-+ * so check for CTS=1 (nCTS=0 -> CTS=1). Typical 150ms
-+ */
-+ tries = 0;
-+ do {
-+ mdelay(10);
-+ } while ((BTMSR & MSR_CTS) == 0 && tries++ < 50);
-+ if (use_led) {
-+// htcuniversal_set_led(2, 16, 16);
-+ }
-+ break;
-+
-+ case PXA_UART_CFG_PRE_SHUTDOWN:
-+ htcuniversal_egpio_disable(1<<EGPIO5_BT_3V3_ON );
-+ mdelay(50);
-+// htcuniversal_clear_led(2);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_PWR_ON, 0);
-+ break;
-+
-+ default:
-+ break;
-+ }
-+}
-+
-+
-+static int
-+htcuniversal_bt_probe( struct platform_device *dev )
-+{
-+ struct htcuniversal_bt_funcs *funcs = dev->dev.platform_data;
-+
-+ /* configure bluetooth UART */
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_RXD_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_TXD_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_UART_CTS_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_UART_RTS_MD );
-+
-+ funcs->configure = htcuniversal_bt_configure;
-+
-+ /* Make sure the LED is off */
-+// htcuniversal_clear_led(2);
-+
-+ return 0;
-+}
-+
-+static int
-+htcuniversal_bt_remove( struct platform_device *dev )
-+{
-+ struct htcuniversal_bt_funcs *funcs = dev->dev.platform_data;
-+
-+ funcs->configure = NULL;
-+
-+ /* Make sure the LED is off */
-+// htcuniversal_clear_led(2);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver bt_driver = {
-+ .driver = {
-+ .name = "htcuniversal_bt",
-+ },
-+ .probe = htcuniversal_bt_probe,
-+ .remove = htcuniversal_bt_remove,
-+};
-+
-+module_param(use_led, uint, 0);
-+
-+static int __init
-+htcuniversal_bt_init( void )
-+{
-+ printk(KERN_NOTICE "htcuniversal Bluetooth Driver\n");
-+ return platform_driver_register( &bt_driver );
-+}
-+
-+static void __exit
-+htcuniversal_bt_exit( void )
-+{
-+ platform_driver_unregister( &bt_driver );
-+}
-+
-+module_init( htcuniversal_bt_init );
-+module_exit( htcuniversal_bt_exit );
-+
-+MODULE_AUTHOR("Todd Blumer, SDG Systems, LLC");
-+MODULE_DESCRIPTION("HTC Universal Bluetooth Support Driver");
-+MODULE_LICENSE("GPL");
-+
-+/* vim600: set noexpandtab sw=8 ts=8 :*/
-+
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,17 @@
-+/*
-+ * Bluetooth support file for calling bluetooth configuration functions
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * 2005-06 Todd Blumer Initial Revision
-+ */
-+
-+#ifndef _HTCUNIVERSAL_BT_H
-+#define _HTCUNIVERSAL_BT_H
-+
-+struct htcuniversal_bt_funcs {
-+ void (*configure) ( int state );
-+};
-+
-+
-+#endif
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,87 @@
-+/*
-+ * Buttons driver for HTC Universal
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.
-+ *
-+ * Copyright (C) 2005 Pawel Kolodziejski
-+ * Copyright (C) 2003 Joshua Wise
-+ *
-+ */
-+
-+#include <linux/input.h>
-+#include <linux/input_pda.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/interrupt.h>
-+#include <linux/irq.h>
-+#include <linux/platform_device.h>
-+#include <linux/gpio_keys.h>
-+#include <linux/soc/asic3_base.h>
-+#include <asm/mach-types.h>
-+#include <asm/hardware/asic3_keys.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+static struct asic3_keys_button asic3_buttons[] = {
-+//{KEY_SCREEN, ASIC3_GPIOA_IRQ_BASE+GPIOA_COVER_ROTATE_N, 1, "screen_cover", EV_SW},
-+//{KEY_SWITCHVIDEOMODE, ASIC3_GPIOB_IRQ_BASE+GPIOB_CLAMSHELL_N, 1, "clamshell_rotate", EV_SW},
-+//{KEY_KBDILLUMTOGGLE, ASIC3_GPIOB_IRQ_BASE+GPIOB_NIGHT_SENSOR, 1, "night_sensor", EV_SW},
-+{SW_LID, ASIC3_GPIOA_IRQ_BASE+GPIOA_COVER_ROTATE_N, 1, "screen_cover", EV_SW},
-+{SW_TABLET_MODE, ASIC3_GPIOB_IRQ_BASE+GPIOB_CLAMSHELL_N, 1, "clamshell_rotate", EV_SW},
-+//{SW_NIGHT_SENSOR, ASIC3_GPIOB_IRQ_BASE+GPIOB_NIGHT_SENSOR, 1, "night_sensor", EV_SW},
-+{KEY_F10, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_BACKLIGHT_N, 1, "backlight_button"},
-+{KEY_RECORD, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_RECORD_N, 1, "record_button"},
-+{KEY_CAMERA, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_CAMERA_N, 1, "camera_button"},
-+{KEY_VOLUMEDOWN, ASIC3_GPIOA_IRQ_BASE+GPIOA_VOL_UP_N, 1, "volume_slider_down"},
-+{KEY_VOLUMEUP, ASIC3_GPIOA_IRQ_BASE+GPIOA_VOL_DOWN_N, 1, "volume_slider_up"},
-+{KEY_KPENTER, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_OK_N, 1, "select"},
-+{KEY_RIGHT, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_RIGHT_N, 1, "right"},
-+{KEY_LEFT, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_LEFT_N, 1, "left"},
-+{KEY_DOWN, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_DOWN_N, 1, "down"},
-+{KEY_UP, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_UP_N, 1, "up"},
-+};
-+
-+static struct asic3_keys_platform_data asic3_keys_data = {
-+ .buttons = asic3_buttons,
-+ .nbuttons = ARRAY_SIZE(asic3_buttons),
-+ .asic3_dev = &htcuniversal_asic3.dev,
-+};
-+
-+static struct platform_device htcuniversal_keys_asic3 = {
-+ .name = "asic3-keys",
-+ .dev = { .platform_data = &asic3_keys_data, }
-+};
-+
-+static int __init htcuniversal_buttons_probe(struct platform_device *dev)
-+{
-+ platform_device_register(&htcuniversal_keys_asic3);
-+ return 0;
-+}
-+
-+static struct platform_driver htcuniversal_buttons_driver = {
-+ .driver = {
-+ .name = "htcuniversal_buttons",
-+ },
-+ .probe = htcuniversal_buttons_probe,
-+};
-+
-+static int __init htcuniversal_buttons_init(void)
-+{
-+ if (!machine_is_htcuniversal())
-+ return -ENODEV;
-+
-+ return platform_driver_register(&htcuniversal_buttons_driver);
-+}
-+
-+static void __exit htcuniversal_buttons_exit(void)
-+{
-+ platform_driver_unregister(&htcuniversal_buttons_driver);
-+}
-+
-+module_init(htcuniversal_buttons_init);
-+module_exit(htcuniversal_buttons_exit);
-+
-+MODULE_AUTHOR ("Joshua Wise, Pawel Kolodziejski, Paul Sokolosvky");
-+MODULE_DESCRIPTION ("Buttons support for HTC Universal");
-+MODULE_LICENSE ("GPL");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,226 @@
-+/* Core Hardware driver for Hx4700 (Serial, ASIC3, EGPIOs)
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * 2005-03-29 Todd Blumer Converted basic structure to support hx4700
-+ * 2005-04-30 Todd Blumer Add IRDA code from H2200
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/interrupt.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+#include <linux/pm.h>
-+#include <linux/irq.h>
-+
-+#include <asm/io.h>
-+#include <asm/mach/irq.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/pxa-pm_ll.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+#include <linux/soc/asic3_base.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+
-+volatile u_int16_t *egpios;
-+u_int16_t egpio_reg;
-+
-+static int htc_bootloader = 0; /* Is the stock HTC bootloader installed? */
-+
-+/*
-+ * may make sense to put egpios elsewhere, but they're here now
-+ * since they share some of the same address space with the TI WLAN
-+ *
-+ * EGPIO register is write-only
-+ */
-+
-+void
-+htcuniversal_egpio_enable( u_int16_t bits )
-+{
-+ unsigned long flags;
-+
-+ local_irq_save(flags);
-+
-+ egpio_reg |= bits;
-+ *egpios = egpio_reg;
-+
-+ local_irq_restore(flags);
-+}
-+EXPORT_SYMBOL_GPL(htcuniversal_egpio_enable);
-+
-+void
-+htcuniversal_egpio_disable( u_int16_t bits )
-+{
-+ unsigned long flags;
-+
-+ local_irq_save(flags);
-+
-+ egpio_reg &= ~bits;
-+ *egpios = egpio_reg;
-+
-+ local_irq_restore(flags);
-+}
-+EXPORT_SYMBOL_GPL(htcuniversal_egpio_disable);
-+
-+#ifdef CONFIG_PM
-+
-+//void htcuniversal_ll_pm_init(void);
-+
-+static int htcuniversal_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ /* Turn off external clocks here, because htcuniversal_power and asic3_mmc
-+ * scared to do so to not hurt each other. (-5 mA) */
-+
-+
-+ /* 0x20c2 is HTC clock value
-+ * CLOCK_CDEX_SOURCE 2
-+ * CLOCK_CDEX_SPI 0
-+ * CLOCK_CDEX_OWM 0
-+ *
-+ * CLOCK_CDEX_PWM0 0
-+ * CLOCK_CDEX_PWM1 0
-+ * CLOCK_CDEX_LED0 1
-+ * CLOCK_CDEX_LED1 1
-+ *
-+ * CLOCK_CDEX_LED2 0
-+ * CLOCK_CDEX_SD_HOST 0
-+ * CLOCK_CDEX_SD_BUS 0
-+ * CLOCK_CDEX_SMBUS 0
-+ *
-+ * CLOCK_CDEX_CONTROL_CX 0
-+ * CLOCK_CDEX_EX0 1
-+ * CLOCK_CDEX_EX1 0
-+ * */
-+ asic3_set_clock_cdex(&htcuniversal_asic3.dev, 0xffff, CLOCK_CDEX_SOURCE1
-+ |CLOCK_CDEX_LED0
-+ |CLOCK_CDEX_LED1
-+ |CLOCK_CDEX_LED2
-+ |CLOCK_CDEX_EX0
-+ |CLOCK_CDEX_EX1);
-+
-+ *egpios = 0; /* turn off all egpio power */
-+
-+ /* Wake up enable. */
-+ PWER = PWER_GPIO0
-+ | PWER_GPIO1 /* reset */
-+ | PWER_GPIO9 /* USB */
-+ | PWER_GPIO10 /* AC on USB */
-+ | PWER_GPIO14 /* ASIC3 mux */
-+ | PWER_RTC;
-+ /* Wake up on falling edge. */
-+ PFER = PWER_GPIO0
-+ | PWER_GPIO1
-+ | PWER_GPIO9
-+ | PWER_GPIO10
-+ | PWER_GPIO14;
-+
-+ /* Wake up on rising edge. */
-+ PRER = PWER_GPIO0
-+ | PWER_GPIO1
-+ | PWER_GPIO9
-+ | PWER_GPIO10;
-+ /* 3.6864 MHz oscillator power-down enable */
-+ PCFR = PCFR_OPDE | PCFR_PI2CEN | PCFR_GPROD | PCFR_GPR_EN;
-+
-+ PGSR0 = 0x09088004;
-+ PGSR1 = 0x00020002;
-+ PGSR2 = 0x8001c000;
-+ PGSR3 = 0x00106284;
-+
-+ PSLR = 0xcc000000;
-+
-+#if 0
-+ /*
-+ * If we're using bootldr and not the stock HTC bootloader,
-+ * we want to wake up periodically to see if the charge is full while
-+ * it is suspended. We do this with the OS timer 4 in the pxa270.
-+ */
-+ if (!htc_bootloader) {
-+ OMCR4 = 0x4b; /* Periodic, self-resetting, 1-second timer */
-+ OSMR4 = 5; /* Wake up bootldr after x seconds so it can
-+ figure out what to do with the LEDs. */
-+ OIER |= 0x10; /* Enable interrupt source for Timer 4 */
-+ OSCR4 = 0; /* This starts the timer */
-+ }
-+#endif
-+
-+ asic3_set_extcf_select(&htcuniversal_asic3.dev, ASIC3_EXTCF_OWM_EN, 0);
-+
-+ return 0;
-+}
-+
-+static int htcuniversal_resume(struct platform_device *dev)
-+{
-+ htcuniversal_egpio_enable(0);
-+
-+ return 0;
-+}
-+#else
-+# define htcuniversal_suspend NULL
-+# define htcuniversal_resume NULL
-+#endif
-+
-+static int
-+htcuniversal_core_probe( struct platform_device *dev )
-+{
-+
-+ printk( KERN_NOTICE "HTC Universal Core Hardware Driver\n" );
-+
-+ egpios = (volatile u_int16_t *)ioremap_nocache(HTCUNIVERSAL_EGPIO_BASE, sizeof *egpios );
-+ if (!egpios)
-+ return -ENODEV;
-+ else
-+ printk( KERN_NOTICE "HTC Universal Core: egpio at phy=0x%8.8x is at virt=0x%p\n",
-+ HTCUNIVERSAL_EGPIO_BASE, egpios );
-+
-+ printk("Using stock HTC first stage bootloader\n");
-+ htc_bootloader = 1;
-+
-+// htcuniversal_ll_pm_init();
-+
-+ return 0;
-+}
-+
-+static int
-+htcuniversal_core_remove( struct platform_device *dev )
-+{
-+
-+ if (egpios != NULL)
-+ iounmap( (void *)egpios );
-+
-+ return 0;
-+}
-+
-+static struct platform_driver htcuniversal_core_driver = {
-+ .driver = {
-+ .name = "htcuniversal_core",
-+ },
-+ .probe = htcuniversal_core_probe,
-+ .remove = htcuniversal_core_remove,
-+ .suspend = htcuniversal_suspend,
-+ .resume = htcuniversal_resume,
-+};
-+
-+static int __init
-+htcuniversal_core_init( void )
-+{
-+ return platform_driver_register( &htcuniversal_core_driver );
-+}
-+
-+
-+static void __exit
-+htcuniversal_core_exit( void )
-+{
-+ platform_driver_unregister( &htcuniversal_core_driver );
-+}
-+
-+module_init( htcuniversal_core_init );
-+module_exit( htcuniversal_core_exit );
-+
-+MODULE_AUTHOR("Todd Blumer, SDG Systems, LLC");
-+MODULE_DESCRIPTION("HTC Universal Core Hardware Driver");
-+MODULE_LICENSE("GPL");
-+
-+/* vim600: set noexpandtab sw=8 ts=8 :*/
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,212 @@
-+/*
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ * History:
-+ *
-+ * 2004-03-01 Eddi De Pieri Adapted for htcuniversal using h3900_lcd.c
-+ * 2004 Shawn Anderson Lcd hacking on htcuniversal
-+ * see h3900_lcd.c for more history.
-+ *
-+ */
-+
-+#include <linux/types.h>
-+#include <asm/arch/hardware.h> /* for pxa-regs.h (__REG) */
-+#include <linux/platform_device.h>
-+#include <asm/arch/pxa-regs.h> /* LCCR[0,1,2,3]* */
-+#include <asm/arch/bitfield.h> /* for pxa-regs.h (Fld, etc) */
-+#include <asm/arch/pxafb.h> /* pxafb_mach_info, set_pxa_fb_info */
-+#include <asm/mach-types.h> /* machine_is_htcuniversal */
-+#include <linux/lcd.h> /* lcd_device */
-+#include <linux/err.h>
-+#include <linux/delay.h>
-+
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <linux/soc/asic3_base.h>
-+
-+static int saved_lcdpower=-1;
-+
-+static int powerup_lcd(void)
-+{
-+ printk( KERN_INFO "htcuniversal powerup_lcd: called\n");
-+
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 0);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 0);
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 0);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 0);
-+ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 0);
-+#if 1
-+ LCCR4|=LCCR4_PCDDIV;
-+#endif
-+ pxa_set_cken(CKEN_LCD, 0);
-+
-+ mdelay(100);
-+ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 1<<GPIOA_LCD_PWR5_ON);
-+ mdelay(5);
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 1<<GPIOB_LCD_PWR3_ON);
-+ mdelay(2);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 1<<GPIOC_LCD_PWR1_ON);
-+ mdelay(2);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 1<<GPIOC_LCD_PWR2_ON);
-+ mdelay(20);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 1<<GPIOD_LCD_PWR4_ON);
-+ mdelay(1);
-+ pxa_set_cken(CKEN_LCD, 1);
-+
-+ SET_HTCUNIVERSAL_GPIO(LCD1,1);
-+ SET_HTCUNIVERSAL_GPIO(LCD2,1);
-+ return 0;
-+}
-+
-+static int powerdown_lcd(void)
-+{
-+ printk( KERN_INFO "htcuniversal powerdown_lcd: called\n");
-+
-+#if 1
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 0);
-+ mdelay(100);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 0);
-+ mdelay(10);
-+ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 0);
-+ mdelay(1);
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 0);
-+ mdelay(1);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 0);
-+ pxa_set_cken(CKEN_LCD, 0);
-+
-+ SET_HTCUNIVERSAL_GPIO(LCD1,0);
-+ SET_HTCUNIVERSAL_GPIO(LCD2,0);
-+#else
-+ pxa_set_cken(CKEN_LCD, 0);
-+
-+ SET_HTCUNIVERSAL_GPIO(LCD1,0);
-+ SET_HTCUNIVERSAL_GPIO(LCD2,0);
-+
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 0);
-+ mdelay(100);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 0);
-+ mdelay(10);
-+ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 0);
-+ mdelay(1);
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 0);
-+ mdelay(1);
-+ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 0);
-+#endif
-+ return 0;
-+}
-+
-+static int htcuniversal_lcd_set_power(struct lcd_device *lm, int power)
-+{
-+ /* Enable or disable power to the LCD (0: on; 4: off) */
-+
-+ if ( power < 1 ) {
-+
-+ powerup_lcd();
-+
-+ } else {
-+
-+ powerdown_lcd();
-+
-+ }
-+
-+ saved_lcdpower=power;
-+
-+ return 0;
-+}
-+
-+static int htcuniversal_lcd_get_power(struct lcd_device *lm)
-+{
-+ /* Get the LCD panel power status (0: full on, 1..3: controller
-+ * power on, flat panel power off, 4: full off) */
-+
-+ if (saved_lcdpower == -1)
-+ {
-+ htcuniversal_lcd_set_power(lm, 4);
-+ saved_lcdpower=4;
-+ }
-+
-+ return saved_lcdpower;
-+}
-+
-+static struct lcd_ops htcuniversal_lcd_properties =
-+{
-+ .get_power = htcuniversal_lcd_get_power,
-+ .set_power = htcuniversal_lcd_set_power,
-+};
-+
-+static struct lcd_device *htcuniversal_lcd_dev;
-+
-+static int htcuniversal_lcd_probe(struct platform_device * dev)
-+{
-+ htcuniversal_lcd_dev = lcd_device_register("pxa2xx-fb", &dev->dev, NULL,
-+ &htcuniversal_lcd_properties);
-+ if (IS_ERR(htcuniversal_lcd_dev)) {
-+ printk("htcuniversal_lcd_probe: error registering devices\n");
-+ return -1;
-+ }
-+
-+ return 0;
-+}
-+
-+static int htcuniversal_lcd_remove(struct platform_device * dev)
-+{
-+ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 4);
-+ lcd_device_unregister(htcuniversal_lcd_dev);
-+
-+ return 0;
-+}
-+
-+static int htcuniversal_lcd_suspend(struct platform_device * dev, pm_message_t state)
-+{
-+// printk("htcuniversal_lcd_suspend: called.\n");
-+ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 4);
-+ return 0;
-+}
-+
-+static int htcuniversal_lcd_resume(struct platform_device * dev)
-+{
-+// printk("htcuniversal_lcd_resume: called.\n");
-+
-+ /* */
-+#if 1
-+ LCCR4|=LCCR4_PCDDIV;
-+#endif
-+
-+ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 0);
-+ return 0;
-+}
-+
-+static struct platform_driver htcuniversal_lcd_driver = {
-+ .driver = {
-+ .name = "htcuniversal_lcd",
-+ },
-+ .probe = htcuniversal_lcd_probe,
-+ .remove = htcuniversal_lcd_remove,
-+ .suspend = htcuniversal_lcd_suspend,
-+ .resume = htcuniversal_lcd_resume,
-+};
-+
-+static int htcuniversal_lcd_init(void)
-+{
-+ if (!machine_is_htcuniversal())
-+ return -ENODEV;
-+
-+ return platform_driver_register(&htcuniversal_lcd_driver);
-+}
-+
-+static void htcuniversal_lcd_exit(void)
-+{
-+ lcd_device_unregister(htcuniversal_lcd_dev);
-+ platform_driver_unregister(&htcuniversal_lcd_driver);
-+}
-+
-+module_init(htcuniversal_lcd_init);
-+module_exit(htcuniversal_lcd_exit);
-+
-+MODULE_AUTHOR("xanadux.org");
-+MODULE_DESCRIPTION("Framebuffer driver for HTC Universal");
-+MODULE_LICENSE("GPL");
-+
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,167 @@
-+
-+/* Phone interface driver for Qualcomm MSM6250 on HTC Universal
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * 2005-04-21 Todd Blumer Created.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/delay.h>
-+#include <linux/platform_device.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/serial.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+#include "htcuniversal_phone.h"
-+
-+static void phone_reset(void)
-+{
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_RESET2, 0);
-+
-+ SET_HTCUNIVERSAL_GPIO(PHONE_RESET,0);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 0);
-+ mdelay(1);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 1<<GPIOD_BB_RESET1);
-+ mdelay(20);
-+ SET_HTCUNIVERSAL_GPIO(PHONE_RESET,1);
-+ mdelay(200);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 0);
-+}
-+
-+static void phone_off(void)
-+{
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 1<<GPIOD_BB_RESET1);
-+ mdelay(2000);
-+ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 0);
-+
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_RESET2, 1<<GPIOB_BB_RESET2);
-+ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,0);
-+}
-+
-+static void
-+htcuniversal_phone_configure( int state )
-+{
-+ int tries;
-+ unsigned short statusb;
-+
-+ printk( KERN_NOTICE "htcuniversal configure phone: %d\n", state );
-+ switch (state) {
-+
-+ case PXA_UART_CFG_PRE_STARTUP:
-+ break;
-+
-+ case PXA_UART_CFG_POST_STARTUP:
-+ /* pre-serial-up hardware configuration */
-+
-+ SET_HTCUNIVERSAL_GPIO(PHONE_START,0); /* "bootloader" */
-+ SET_HTCUNIVERSAL_GPIO(PHONE_UNKNOWN,0); /* not used */
-+ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,0); /* PHONE_OFF */
-+
-+ phone_reset();
-+
-+ SET_HTCUNIVERSAL_GPIO(PHONE_START,1); /* phone */
-+
-+ phone_reset();
-+
-+ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_READY, 0);
-+ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_UNKNOWN3, 0);
-+
-+ /*
-+ */
-+ tries = 0;
-+ do {
-+ mdelay(10);
-+ statusb = asic3_get_gpio_status_b( &htcuniversal_asic3.dev );
-+ } while ( (statusb & (1<<GPIOB_UMTS_DCD)) == 0 && tries++ < 200);
-+
-+ printk("UMTS_DCD tries=%d of 200\n",tries);
-+
-+ tries = 0;
-+ do {
-+ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,1);
-+ mdelay(10);
-+ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,0);
-+ mdelay(20);
-+ statusb = asic3_get_gpio_status_b( &htcuniversal_asic3.dev );
-+ } while ( (statusb & (1<<GPIOB_BB_READY)) == 0 && tries++ < 200);
-+
-+ printk("BB_READY tries=%d of 200\n",tries);
-+
-+ break;
-+
-+ case PXA_UART_CFG_PRE_SHUTDOWN:
-+
-+ phone_off();
-+
-+ break;
-+
-+ default:
-+ break;
-+ }
-+}
-+
-+
-+static int
-+htcuniversal_phone_probe( struct platform_device *dev )
-+{
-+ struct htcuniversal_phone_funcs *funcs = dev->dev.platform_data;
-+
-+ /* configure phone UART */
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_RXD_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_TXD_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS_MD );
-+ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS_MD );
-+
-+ funcs->configure = htcuniversal_phone_configure;
-+
-+ return 0;
-+}
-+
-+static int
-+htcuniversal_phone_remove( struct platform_device *dev )
-+{
-+ struct htcuniversal_phone_funcs *funcs = dev->dev.platform_data;
-+
-+ funcs->configure = NULL;
-+
-+ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_READY, 1<<GPIOB_BB_READY);
-+ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_UNKNOWN3, 1<<GPIOB_BB_UNKNOWN3);
-+
-+ return 0;
-+}
-+
-+static struct platform_driver phone_driver = {
-+ .driver = {
-+ .name = "htcuniversal_phone",
-+ },
-+ .probe = htcuniversal_phone_probe,
-+ .remove = htcuniversal_phone_remove,
-+};
-+
-+static int __init
-+htcuniversal_phone_init( void )
-+{
-+ printk(KERN_NOTICE "htcuniversal Phone Driver\n");
-+ return platform_driver_register( &phone_driver );
-+}
-+
-+static void __exit
-+htcuniversal_phone_exit( void )
-+{
-+ platform_driver_unregister( &phone_driver );
-+}
-+
-+module_init( htcuniversal_phone_init );
-+module_exit( htcuniversal_phone_exit );
-+
-+MODULE_AUTHOR("Todd Blumer, SDG Systems, LLC");
-+MODULE_DESCRIPTION("HTC Universal Phone Support Driver");
-+MODULE_LICENSE("GPL");
-+
-+/* vim600: set noexpandtab sw=8 ts=8 :*/
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,16 @@
-+/*
-+ * Bluetooth support file for calling bluetooth configuration functions
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * 2005-06 Todd Blumer Initial Revision
-+ */
-+
-+#ifndef _HTCUNIVERSAL_PHONE_H
-+#define _HTCUNIVERSAL_PHONE_H
-+
-+struct htcuniversal_phone_funcs {
-+ void (*configure) ( int state );
-+};
-+
-+#endif
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,69 @@
-+/*
-+ * MyPal 716 power management support for the original HTC IPL in DoC G3
-+ *
-+ * Use consistent with the GNU GPL is permitted, provided that this
-+ * copyright notice is preserved in its entirety in all copies and
-+ * derived works.
-+ *
-+ * Copyright (C) 2005 Pawel Kolodziejski
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/device.h>
-+#include <linux/pm.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/pxa-pm_ll.h>
-+
-+#ifdef CONFIG_PM
-+
-+static u32 *addr_a0040000;
-+static u32 *addr_a0040004;
-+static u32 *addr_a0040008;
-+static u32 *addr_a004000c;
-+
-+static u32 save_a0040000;
-+static u32 save_a0040004;
-+static u32 save_a0040008;
-+static u32 save_a004000c;
-+
-+static void htcuniversal_pxa_ll_pm_suspend(unsigned long resume_addr)
-+{
-+ save_a0040000 = *addr_a0040000;
-+ save_a0040004 = *addr_a0040004;
-+ save_a0040008 = *addr_a0040008;
-+ save_a004000c = *addr_a004000c;
-+
-+ /* jump to PSPR */
-+ *addr_a0040000 = 0xe3a00101; // mov r0, #0x40000000
-+ *addr_a0040004 = 0xe380060f; // orr r0, r0, #0x0f000000
-+ *addr_a0040008 = 0xe3800008; // orr r0, r0, #8
-+ *addr_a004000c = 0xe590f000; // ldr pc, [r0]
-+}
-+
-+static void htcuniversal_pxa_ll_pm_resume(void)
-+{
-+ *addr_a0040000 = save_a0040000;
-+ *addr_a0040004 = save_a0040004;
-+ *addr_a0040008 = save_a0040008;
-+ *addr_a004000c = save_a004000c;
-+}
-+
-+static struct pxa_ll_pm_ops htcuniversal_ll_pm_ops = {
-+ .suspend = htcuniversal_pxa_ll_pm_suspend,
-+ .resume = htcuniversal_pxa_ll_pm_resume,
-+};
-+
-+void htcuniversal_ll_pm_init(void) {
-+ addr_a0040000 = phys_to_virt(0xa0040000);
-+ addr_a0040004 = phys_to_virt(0xa0040004);
-+ addr_a0040008 = phys_to_virt(0xa0040008);
-+ addr_a004000c = phys_to_virt(0xa004000c);
-+
-+ pxa_pm_set_ll_ops(&htcuniversal_ll_pm_ops);
-+}
-+#endif /* CONFIG_PM */
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,97 @@
-+/*
-+ * pda_power driver for HTC Universal
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or (at
-+ * your option) any later version.
-+ *
-+ */
-+
-+#include <linux/platform_device.h>
-+#include <linux/module.h>
-+#include <linux/pda_power.h>
-+#include <linux/soc/asic3_base.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/hardware.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+static void charge_on(int flags)
-+{
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_CHARGE_EN, 0);
-+}
-+
-+static int ac_on(void)
-+{
-+ return (GET_HTCUNIVERSAL_GPIO(POWER_DET) == 0);
-+}
-+
-+static int usb_on(void)
-+{
-+ return (GET_HTCUNIVERSAL_GPIO(USB_DET) == 0);
-+}
-+
-+static char *supplicants[] = {
-+ "ds2760-battery.0", "backup-battery"
-+};
-+
-+static struct pda_power_pdata power_pdata = {
-+ .is_ac_online = ac_on,
-+ .is_usb_online = usb_on,
-+ .set_charge = charge_on,
-+ .supplied_to = supplicants,
-+ .num_supplicants = ARRAY_SIZE(supplicants),
-+};
-+
-+static struct resource power_resources[] = {
-+ [0] = {
-+ .name = "ac",
-+ .start = HTCUNIVERSAL_IRQ(POWER_DET),
-+ .end = HTCUNIVERSAL_IRQ(POWER_DET),
-+ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE,
-+ },
-+ [1] = {
-+ .name = "usb",
-+ .start = HTCUNIVERSAL_IRQ(USB_DET),
-+ .end = HTCUNIVERSAL_IRQ(USB_DET),
-+ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE,
-+ },
-+};
-+
-+static void dev_release(struct device *dev)
-+{
-+ return;
-+}
-+
-+static struct platform_device power_dev =
-+{
-+ .name = "pda-power",
-+ .id = -1,
-+ .resource = power_resources,
-+ .num_resources = ARRAY_SIZE(power_resources),
-+ .dev =
-+ {
-+ .platform_data = &power_pdata,
-+ .release = dev_release,
-+ },
-+};
-+
-+static int htcuniversal_power_init(void)
-+{
-+ return platform_device_register(&power_dev);
-+}
-+
-+static void htcuniversal_power_exit(void)
-+{
-+ platform_device_unregister(&power_dev);
-+
-+ return;
-+}
-+
-+module_init(htcuniversal_power_init);
-+module_exit(htcuniversal_power_exit);
-+
-+MODULE_DESCRIPTION("Power driver for HTC Universal");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,490 @@
-+/* Touch screen driver for the TI something-or-other
-+ *
-+ * Copyright © 2005 SDG Systems, LLC
-+ *
-+ * Based on code that was based on the SAMCOP driver.
-+ * Copyright © 2003, 2004 Compaq Computer Corporation.
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
-+ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
-+ * FITNESS FOR ANY PARTICULAR PURPOSE.
-+ *
-+ * Author: Keith Packard <keith.packard@hp.com>
-+ * May 2003
-+ *
-+ * Updates:
-+ *
-+ * 2004-02-11 Michael Opdenacker Renamed names from samcop to shamcop,
-+ * Goal:support HAMCOP and SAMCOP.
-+ * 2004-02-14 Michael Opdenacker Temporary fix for device id handling
-+ *
-+ * 2005-02-18 Aric Blumer Converted basic structure to support hx4700
-+ *
-+ * 2005-06-07 Aric Blumer Added tssim device handling so we can
-+ * hook in the fbvncserver.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/version.h>
-+
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <linux/cdev.h>
-+#include <linux/interrupt.h>
-+#include <linux/sched.h>
-+#include <linux/pm.h>
-+#include <linux/delay.h>
-+#include <linux/input.h>
-+#include <linux/platform_device.h>
-+#include <linux/irq.h>
-+
-+#include <asm/arch/hardware.h>
-+#include <asm/mach/irq.h>
-+#include <asm/io.h>
-+
-+/* remove me */
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+#include <asm/mach-types.h>
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <linux/soc/asic3_base.h>
-+
-+
-+#include "tsc2046_ts.h"
-+
-+enum touchscreen_state {
-+ STATE_WAIT_FOR_TOUCH, /* Waiting for a PEN interrupt */
-+ STATE_SAMPLING /* Actively sampling ADC */
-+};
-+
-+struct touchscreen_data {
-+ enum touchscreen_state state;
-+ struct timer_list timer;
-+ int irq;
-+ struct input_dev *input;
-+ /* */
-+ int port;
-+ int clock;
-+ int pwrbit_X;
-+ int pwrbit_Y;
-+ int (*pen_down)(void);
-+};
-+
-+static unsigned long poll_sample_time = 10; /* Sample every 10 milliseconds */
-+
-+static struct touchscreen_data *ts_data;
-+
-+static int irqblock;
-+
-+module_param(poll_sample_time, ulong, 0644);
-+MODULE_PARM_DESC(poll_sample_time, "Poll sample time");
-+
-+static inline void
-+report_touchpanel(struct touchscreen_data *ts, int pressure, int x, int y)
-+{
-+ input_report_abs(ts->input, ABS_PRESSURE, pressure);
-+ input_report_abs(ts->input, ABS_X, x);
-+ input_report_abs(ts->input, ABS_Y, y);
-+ input_sync(ts->input);
-+}
-+
-+static void start_read(struct touchscreen_data *touch);
-+
-+static irqreturn_t
-+pen_isr(int irq, void *irq_desc)
-+{
-+ struct touchscreen_data *ts = ts_data;
-+
-+ if(irq == ts->irq /* && !irqblock */) {
-+ irqblock = 1;
-+
-+ /*
-+ * Disable the pen interrupt. It's reenabled when the user lifts the
-+ * pen.
-+ */
-+ disable_irq(ts->irq);
-+
-+ if (ts->state == STATE_WAIT_FOR_TOUCH) {
-+ ts->state = STATE_SAMPLING;
-+ start_read(ts);
-+ } else {
-+ /* Shouldn't happen */
-+ printk(KERN_ERR "Unexpected ts interrupt\n");
-+ }
-+
-+ }
-+ return IRQ_HANDLED;
-+}
-+
-+static void
-+ssp_init(int port, int clock)
-+{
-+
-+ pxa_set_cken(clock, 0);
-+
-+ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_CLK_MD);
-+ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_FRM_MD);
-+ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DO_MD);
-+ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DI_MD);
-+
-+ SET_HTCUNIVERSAL_GPIO(SPI_FRM,1);
-+
-+ /* *** Set up the SPI Registers *** */
-+ SSCR0_P(port) =
-+ SSCR0_EDSS /* Extended Data Size Select */
-+ | SSCR0_SerClkDiv(7) /* Serial Clock Rate */
-+ /* Synchronous Serial Enable (Disable for now) */
-+ | SSCR0_Motorola /* Motorola SPI Interface */
-+ | SSCR0_DataSize(8) /* Data Size Select (24-bit) */
-+ ;
-+ SSCR1_P(port) = 0;
-+ SSPSP_P(port) = 0;
-+
-+ /* Clear the Status */
-+ SSSR_P(port) = SSSR_P(port) & 0x00fcfffc;
-+
-+ /* Now enable it */
-+ SSCR0_P(port) =
-+ SSCR0_EDSS /* Extended Data Size Select */
-+ | SSCR0_SerClkDiv(7) /* Serial Clock Rate */
-+ | SSCR0_SSE /* Synchronous Serial Enable */
-+ | SSCR0_Motorola /* Motorola SPI Interface */
-+ | SSCR0_DataSize(8) /* Data Size Select (24-bit) */
-+ ;
-+
-+ pxa_set_cken(clock, 1);
-+}
-+
-+static void
-+start_read(struct touchscreen_data *touch)
-+{
-+ unsigned long inc = (poll_sample_time * HZ) / 1000;
-+ int i;
-+
-+ /* Write here to the serial port. We request X and Y only for now.
-+ * Then we have to wait for poll_sample_time before we read out the serial
-+ * port. Then, when we read it out, we check to see if the pen is still
-+ * down. If so, then we issue another request here.
-+ */
-+#define TS_SAMPLES 7
-+
-+ /*
-+ * We do four samples for each, and throw out the highest and lowest, then
-+ * average the other two.
-+ */
-+
-+ for(i = 0; i < TS_SAMPLES; i++) {
-+ while(!(SSSR_P(touch->port) & SSSR_TNF))
-+ ;
-+ /* It's not full. Write the command for X */
-+ SSDR_P(touch->port) = (TSC2046_SAMPLE_X|(touch->pwrbit_X))<<16;
-+ }
-+
-+ for(i = 0; i < TS_SAMPLES; i++) {
-+ while(!(SSSR_P(touch->port) & SSSR_TNF))
-+ ;
-+ /* It's not full. Write the command for Y */
-+ SSDR_P(touch->port) = (TSC2046_SAMPLE_Y|(touch->pwrbit_Y))<<16;
-+ }
-+
-+ /*
-+ * Enable the timer. We should get an interrupt, but we want keep a timer
-+ * to ensure that we can detect missing data
-+ */
-+ mod_timer(&touch->timer, jiffies + inc);
-+}
-+
-+static void
-+ts_timer_callback(unsigned long data)
-+{
-+ struct touchscreen_data *ts = (struct touchscreen_data *)data;
-+ int x, a[TS_SAMPLES], y;
-+ static int oldx, oldy;
-+ int ssrval;
-+
-+ /*
-+ * Check here to see if there is anything in the SPI FIFO. If so,
-+ * return it if there has been a change. If not, then we have a
-+ * timeout. Generate an erro somehow.
-+ */
-+ ssrval = SSSR_P(ts->port);
-+
-+ if(ssrval & SSSR_RNE) { /* Look at Rx Not Empty bit */
-+ int number_of_entries_in_fifo;
-+
-+ /* The FIFO is not emtpy. Good! Now make sure there are at least two
-+ * entries. (Should be two exactly.) */
-+
-+ number_of_entries_in_fifo = ((ssrval >> 12) & 0xf) + 1;
-+
-+ if(number_of_entries_in_fifo < TS_SAMPLES * 2) {
-+ /* Not ready yet. Come back later. */
-+ unsigned long inc = (poll_sample_time * HZ) / 1000;
-+ mod_timer(&ts->timer, jiffies + inc);
-+ return;
-+ }
-+
-+ if(number_of_entries_in_fifo == TS_SAMPLES * 2) {
-+ int i, j;
-+
-+ for(i = 0; i < TS_SAMPLES; i++) {
-+ a[i] = SSDR_P(ts->port);
-+ }
-+ /* Sort them (bubble) */
-+ for(j = TS_SAMPLES - 1; j > 0; j--) {
-+ for(i = 0; i < j; i++) {
-+ if(a[i] > a[i + 1]) {
-+ int tmp;
-+ tmp = a[i+1];
-+ a[i+1] = a[i];
-+ a[i] = tmp;
-+ }
-+ }
-+ }
-+
-+ /* Take the average of the middle two */
-+ /* x = (a[TS_SAMPLES/2 - 1] + a[TS_SAMPLES/2] + a[TS_SAMPLES/2+1] + a[TS_SAMPLES/2+2]) >> 2; */
-+ x = a[TS_SAMPLES/2];
-+
-+ for(i = 0; i < TS_SAMPLES; i++) {
-+ a[i] = SSDR_P(ts->port);
-+ }
-+ /* Sort them (bubble) */
-+ for(j = TS_SAMPLES - 1; j > 0; j--) {
-+ for(i = 0; i < j; i++) {
-+ if(a[i] > a[i + 1]) {
-+ int tmp;
-+ tmp = a[i+1];
-+ a[i+1] = a[i];
-+ a[i] = tmp;
-+ }
-+ }
-+ }
-+
-+
-+ /* Take the average of the middle two */
-+ /* y = (a[TS_SAMPLES/2 - 1] + a[TS_SAMPLES/2] + a[TS_SAMPLES/2+1] + a[TS_SAMPLES/2+2]) >> 2; */
-+ y = a[TS_SAMPLES/2];
-+ } else {
-+ /* We have an error! Too many entries. */
-+ printk(KERN_ERR "TS: Expected %d entries. Got %d\n", TS_SAMPLES*2, number_of_entries_in_fifo);
-+ /* Try to clear the FIFO */
-+ while(number_of_entries_in_fifo--) {
-+ (void)SSDR_P(ts->port);
-+ }
-+
-+ if (ts->pen_down())
-+ start_read(ts);
-+
-+ return;
-+ }
-+ } else {
-+ /* Not ready yet. Come back later. */
-+ unsigned long inc = (poll_sample_time * HZ) / 1000;
-+ mod_timer(&ts->timer, jiffies + inc);
-+ return;
-+ }
-+
-+ /*
-+ * Now we check to see if the pen is still down. If it is, then call
-+ * start_read().
-+ */
-+ if (ts->pen_down())
-+ {
-+ /* Still down */
-+ if(oldx != x || oldy != y) {
-+ oldx = x;
-+ oldy = y;
-+ report_touchpanel(ts, 1, x, y);
-+ }
-+ start_read(ts);
-+ } else {
-+ /* Up */
-+ report_touchpanel(ts, 0, 0, 0);
-+ irqblock = 0;
-+ ts->state = STATE_WAIT_FOR_TOUCH;
-+ /* Re-enable pen down interrupt */
-+ enable_irq(ts->irq);
-+ }
-+}
-+
-+static int pen_down(void)
-+{
-+ return ( asic3_get_gpio_status_a( &htcuniversal_asic3.dev ) & (1<<GPIOA_TOUCHSCREEN_N)) == 0 ;
-+}
-+
-+static int
-+ts_probe (struct platform_device *dev)
-+{
-+ int retval;
-+ struct touchscreen_data *ts;
-+ struct tsc2046_mach_info *mach = dev->dev.platform_data;
-+
-+ printk("htcuniversal: ts_probe\n");
-+
-+ ts = ts_data = kmalloc (sizeof (*ts), GFP_KERNEL);
-+ if (ts == NULL) {
-+ printk( KERN_NOTICE "htcuniversal_ts: unable to allocate memory\n" );
-+ return -ENOMEM;
-+ }
-+ memset (ts, 0, sizeof (*ts));
-+
-+ ts->input = input_allocate_device();
-+ if (ts->input == NULL) {
-+ printk( KERN_NOTICE "htcuniversal_ts: unable to allocation touchscreen input\n" );
-+ kfree(ts);
-+ return -ENOMEM;
-+ }
-+ ts->input->evbit[0] = BIT(EV_ABS);
-+ ts->input->absbit[0] = BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE);
-+ ts->input->absmin[ABS_X] = 0;
-+ ts->input->absmax[ABS_X] = 32767;
-+ ts->input->absmin[ABS_Y] = 0;
-+ ts->input->absmax[ABS_Y] = 32767;
-+ ts->input->absmin[ABS_PRESSURE] = 0;
-+ ts->input->absmax[ABS_PRESSURE] = 1;
-+
-+ ts->input->name = "htcuniversal_ts";
-+ ts->input->phys = "touchscreen/htcuniversal_ts";
-+ ts->input->private = ts;
-+
-+ input_register_device(ts->input);
-+
-+ ts->timer.function = ts_timer_callback;
-+ ts->timer.data = (unsigned long)ts;
-+ ts->state = STATE_WAIT_FOR_TOUCH;
-+ init_timer (&ts->timer);
-+
-+ platform_set_drvdata(dev, ts);
-+
-+ ts->port=-1;
-+
-+ if (mach) {
-+ ts->port = mach->port;
-+ ts->clock = mach->clock;
-+ ts->pwrbit_X = mach->pwrbit_X;
-+ ts->pwrbit_Y = mach->pwrbit_Y;
-+
-+ /* static irq */
-+ if (mach->irq)
-+ ts->irq = mach->irq;
-+
-+ if (mach->pen_down)
-+ ts->pen_down=mach->pen_down;
-+ }
-+
-+ if (ts->port == -1)
-+ {
-+ printk("tsc2046: your device is not supported by this driver\n");
-+ return -ENODEV;
-+ }
-+
-+ /* *** Initialize the SSP interface *** */
-+ ssp_init(ts->port, ts->clock);
-+
-+ while(!(SSSR_P(ts->port) & SSSR_TNF))
-+ ;
-+ SSDR_P(ts->port) = (TSC2046_SAMPLE_X|(ts->pwrbit_X))<<16;
-+
-+ for(retval = 0; retval < 100; retval++) {
-+ if(SSSR_P(ts->port) & SSSR_RNE) {
-+ while(SSSR_P(ts->port) & SSSR_RNE) {
-+ (void)SSDR_P(ts->port);
-+ }
-+ break;
-+ }
-+ mdelay(1);
-+ }
-+
-+ if (machine_is_htcuniversal() )
-+ {
-+ ts->irq = asic3_irq_base( &htcuniversal_asic3.dev ) + ASIC3_GPIOA_IRQ_BASE + GPIOA_TOUCHSCREEN_N;
-+ ts->pen_down=pen_down;
-+ }
-+
-+ retval = request_irq(ts->irq, pen_isr, IRQF_DISABLED, "tsc2046_ts", ts);
-+ if(retval) {
-+ printk("Unable to get interrupt\n");
-+ input_unregister_device (ts->input);
-+ return -ENODEV;
-+ }
-+ set_irq_type(ts->irq, IRQ_TYPE_EDGE_FALLING);
-+
-+ return 0;
-+}
-+
-+static int
-+ts_remove (struct platform_device *dev)
-+{
-+ struct touchscreen_data *ts = platform_get_drvdata(dev);
-+
-+ input_unregister_device (ts->input);
-+ del_timer_sync (&ts->timer);
-+ free_irq (ts->irq, ts);
-+ pxa_set_cken(ts->clock, 0);
-+
-+ kfree(ts);
-+ return 0;
-+}
-+
-+static int
-+ts_suspend (struct platform_device *dev, pm_message_t state)
-+{
-+ struct touchscreen_data *ts = platform_get_drvdata(dev);
-+
-+ disable_irq(ts->irq);
-+
-+ printk("htcuniversal_ts2_suspend: called.\n");
-+ return 0;
-+}
-+
-+static int
-+ts_resume (struct platform_device *dev)
-+{
-+ struct touchscreen_data *ts = platform_get_drvdata(dev);
-+
-+ ts->state = STATE_WAIT_FOR_TOUCH;
-+ ssp_init(ts->port, ts->clock);
-+ enable_irq(ts->irq);
-+
-+ printk("htcuniversal_ts2_resume: called.\n");
-+ return 0;
-+}
-+
-+static struct platform_driver ts_driver = {
-+ .probe = ts_probe,
-+ .remove = ts_remove,
-+ .suspend = ts_suspend,
-+ .resume = ts_resume,
-+ .driver = {
-+ .name = "htcuniversal_ts",
-+ },
-+};
-+
-+
-+static int
-+ts_module_init (void)
-+{
-+ printk(KERN_NOTICE "HTC Universal Touch Screen Driver\n");
-+
-+ return platform_driver_register(&ts_driver);
-+}
-+
-+static void
-+ts_module_cleanup (void)
-+{
-+ platform_driver_unregister (&ts_driver);
-+}
-+
-+module_init(ts_module_init);
-+module_exit(ts_module_cleanup);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Aric Blumer, SDG Systems, LLC");
-+MODULE_DESCRIPTION("HTC Universal Touch Screen Driver");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,71 @@
-+
-+/*
-+ *
-+ * htcuniversal_udc.c:
-+ * htcuniversal specific code for the pxa27x usb device controller.
-+ *
-+ * Use consistent with the GNU GPL is permitted.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/udc.h>
-+#include <linux/soc/asic3_base.h>
-+#include <asm/arch/htcuniversal-gpio.h>
-+#include <asm/arch/htcuniversal-asic.h>
-+
-+static void htcuniversal_udc_command(int cmd)
-+{
-+ switch (cmd) {
-+ case PXA2XX_UDC_CMD_DISCONNECT:
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev,
-+ 1<<GPIOB_USB_PUEN, 0);
-+// SET_HTCUNIVERSAL_GPIO(USB_PUEN,0);
-+ break;
-+ case PXA2XX_UDC_CMD_CONNECT:
-+ asic3_set_gpio_out_b(&htcuniversal_asic3.dev,
-+ 1<<GPIOB_USB_PUEN, 1<<GPIOB_USB_PUEN);
-+// SET_HTCUNIVERSAL_GPIO(USB_PUEN,1);
-+ break;
-+ default:
-+ printk("_udc_control: unknown command!\n");
-+ break;
-+ }
-+}
-+
-+static int htcuniversal_udc_is_connected(void)
-+{
-+ return (GET_HTCUNIVERSAL_GPIO(USB_DET) != 0);
-+}
-+
-+static struct pxa2xx_udc_mach_info htcuniversal_udc_info __initdata = {
-+ .udc_is_connected = htcuniversal_udc_is_connected,
-+ .udc_command = htcuniversal_udc_command,
-+};
-+
-+static int htcuniversal_udc_probe(struct platform_device * dev)
-+{
-+ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_USB_PUEN, 1<<GPIOB_USB_PUEN);
-+
-+ pxa_set_udc_info(&htcuniversal_udc_info);
-+ return 0;
-+}
-+
-+static struct platform_driver htcuniversal_udc_driver = {
-+ .driver = {
-+ .name = "htcuniversal_udc",
-+ },
-+ .probe = htcuniversal_udc_probe,
-+};
-+
-+static int __init htcuniversal_udc_init(void)
-+{
-+ return platform_driver_register(&htcuniversal_udc_driver);
-+}
-+
-+module_init(htcuniversal_udc_init);
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,20 @@
-+/*
-+ * temporary TSC2046 touchscreen hack
-+ */
-+
-+#ifndef _TSC2046_TS_H
-+#define _TSC2046_TS_H
-+
-+struct tsc2046_mach_info {
-+ int port;
-+ int clock;
-+ int pwrbit_X;
-+ int pwrbit_Y;
-+ int irq;
-+ int (*pen_down)(void);
-+};
-+
-+#define TSC2046_SAMPLE_X 0xd0
-+#define TSC2046_SAMPLE_Y 0x90
-+
-+#endif
-Index: linux-2.6.22/arch/arm/mach-pxa/Kconfig
-===================================================================
---- linux-2.6.22.orig/arch/arm/mach-pxa/Kconfig 2007-09-11 12:53:33.000000000 +0200
-+++ linux-2.6.22/arch/arm/mach-pxa/Kconfig 2007-09-11 12:53:37.000000000 +0200
-@@ -50,6 +50,14 @@
- help
- This enables support for the HP iPAQ HX2750 handheld.
-
-+config MACH_HTCUNIVERSAL
-+ bool "HTC Universal"
-+ select PXA27x
-+ help
-+ Say Y here if you intend to run this kernel on a
-+ HTC Universal. Currently there is only basic support
-+ for this PDA.
-+
- endchoice
-
- if PXA_SHARPSL
-@@ -84,6 +92,86 @@
-
- endif
-
-+if MACH_HTCUNIVERSAL
-+
-+menu "HTC Universal support"
-+
-+config HTCUNIVERSAL_CORE
-+ tristate "HTC Universal core"
-+ depends on MACH_HTCUNIVERSAL
-+ help
-+ This selection enables HTC Universal core support.
-+
-+config HTCUNIVERSAL_UDC
-+ bool "USB Device Controller support"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3 && USB_PXA27X
-+ help
-+ Enables HTC Universal specific USB detection
-+
-+config HTCUNIVERSAL_POWER
-+ tristate "HTC Universal power"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3
-+ help
-+ This selection enables HTC Universal power monitoring
-+ hardware support (through ASIC3).
-+
-+config HTCUNIVERSAL_BACKLIGHT
-+ bool "HTC Universal Backlight"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3 && BACKLIGHT_CLASS_DEVICE
-+ help
-+ This driver provides support for changing power and brightness
-+ on HTC Universal LCD backlight.
-+
-+config HTCUNIVERSAL_LCD
-+ tristate "HTC Universal LCD"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3 && LCD_CLASS_DEVICE
-+ help
-+ This driver provides support for changing power and brightness
-+ on HTC Universal LCD display.
-+
-+config HTCUNIVERSAL_TS2
-+ tristate "HTC Universal Touchscreen (old)"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3
-+ help
-+ Enable support for the HTC Universal Touchscreen Panel.
-+
-+config HTCUNIVERSAL_BUTTONS
-+ tristate "HTC Universal buttons support"
-+ depends on MACH_HTCUNIVERSAL && HTC_ASIC3
-+
-+config HTCUNIVERSAL_BLUETOOTH
-+ tristate "HTC Universal Bluetooth"
-+ depends on MACH_HTCUNIVERSAL && HTCUNIVERSAL_CORE && HTC_ASIC3
-+ help
-+ Enables support for the TI BRF6150 Bluetooth Module
-+ in the HTC Universal.
-+
-+config HTCUNIVERSAL_ASIC3_LEDS
-+ tristate "HTC Universal ASIC3 LED support"
-+ select LEDS_ASIC3
-+ depends on MACH_HTCUNIVERSAL && HTCUNIVERSAL_CORE && HTC_ASIC3
-+ ---help---
-+ Support for right (colors red+green+(amber)) and left (green+blue) led
-+ Off/on hook keys LED backlight
-+ Keyboard backlight
-+ Vibra
-+ Flashlight
-+
-+config HTCUNIVERSAL_PHONE
-+ tristate "HTC Universal Phone"
-+ depends on MACH_HTCUNIVERSAL && HTCUNIVERSAL_CORE && HTC_ASIC3
-+ help
-+ Enables support for the Qualcomm MSM6520 Phone Module
-+ in the HTC Universal.
-+
-+config HTCUNIVERSAL_AK4641
-+ depends on SND && I2C
-+ tristate "AK4641 chipset support"
-+
-+endmenu
-+
-+endif
-+
- endmenu
-
- config MACH_POODLE
-@@ -164,4 +252,3 @@
- depends on (PXA25x || PXA27x) && INPUT
-
- endif
--
-Index: linux-2.6.22/arch/arm/mach-pxa/Makefile
-===================================================================
---- linux-2.6.22.orig/arch/arm/mach-pxa/Makefile 2007-09-11 12:53:33.000000000 +0200
-+++ linux-2.6.22/arch/arm/mach-pxa/Makefile 2007-09-11 12:53:37.000000000 +0200
-@@ -20,6 +20,7 @@
- obj-$(CONFIG_MACH_TOSA) += tosa.o
- obj-$(CONFIG_MACH_EM_X270) += em-x270.o
- obj-$(CONFIG_MACH_HX2750) += hx2750.o hx2750_test.o
-+obj-$(CONFIG_MACH_HTCUNIVERSAL) += htcuniversal/
-
- # Support for blinky lights
- led-y := leds.o
-Index: linux-2.6.22/drivers/leds/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/leds/Kconfig 2007-09-11 12:53:14.000000000 +0200
-+++ linux-2.6.22/drivers/leds/Kconfig 2007-09-11 12:53:37.000000000 +0200
-@@ -101,6 +101,13 @@
- outputs. To be useful the particular board must have LEDs
- and they must be connected to the GPIO lines.
-
-+config LEDS_ASIC3
-+ tristate "LED Support for the HTC ASIC3 chip"
-+ depends LEDS_CLASS && HTC_ASIC3
-+ help
-+ This option enables support for the LEDs connected to the
-+ HTC ASIC3 chip.
-+
- comment "LED Triggers"
-
- config LEDS_TRIGGERS
-Index: linux-2.6.22/drivers/leds/leds-asic3.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/leds/leds-asic3.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,189 @@
-+/*
-+ * LEDs support for HTC ASIC3 devices.
-+ *
-+ * Copyright (c) 2006 Anton Vorontsov <cbou@mail.ru>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+#include "leds.h"
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <linux/soc/asic3_base.h>
-+#include <asm/mach-types.h>
-+#include <asm/hardware/asic3_leds.h>
-+
-+#ifdef DEBUG
-+#define dbg(msg, ...) printk(msg, __VA_ARGS__)
-+#else
-+#define dbg(msg, ...)
-+#endif
-+
-+static
-+void asic3_leds_set(struct led_classdev *led_cdev, enum led_brightness b)
-+{
-+ struct asic3_led *led = container_of(led_cdev, struct asic3_led,
-+ led_cdev);
-+ struct asic3_leds_machinfo *machinfo = led->machinfo;
-+ struct device *asic3_dev = &machinfo->asic3_pdev->dev;
-+
-+ dbg("%s:%s %d(%d)-%s %d\n", __FILE__, __FUNCTION__, led->hw_num,
-+ led->gpio_num, led->led_cdev.name, b);
-+
-+ if (led->hw_num == -1) {
-+ asic3_gpio_set_value(asic3_dev, led->gpio_num, b);
-+ return;
-+ }
-+
-+ if (b == LED_OFF) {
-+ asic3_set_led(asic3_dev, led->hw_num, 0, 16, 6);
-+ asic3_set_gpio_out_c(asic3_dev, led->hw_num, 0);
-+ }
-+ else {
-+ asic3_set_gpio_out_c(asic3_dev, led->hw_num, led->hw_num);
-+ #ifdef CONFIG_LEDS_TRIGGER_HWTIMER
-+ if (led_cdev->trigger && led_cdev->trigger->is_led_supported &&
-+ (led_cdev->trigger->is_led_supported(led_cdev) &
-+ LED_SUPPORTS_HWTIMER)) {
-+ struct hwtimer_data *td = led_cdev->trigger_data;
-+ if (!td) return;
-+ asic3_set_led(asic3_dev, led->hw_num, td->delay_on/8,
-+ (td->delay_on + td->delay_off)/8, 6);
-+ }
-+ else
-+ #endif
-+ asic3_set_led(asic3_dev, led->hw_num, 16, 16, 6);
-+ }
-+
-+ return;
-+}
-+
-+static
-+int asic3_leds_probe(struct platform_device *pdev)
-+{
-+ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
-+ struct asic3_led *leds = machinfo->leds;
-+ int ret, i = 0;
-+
-+ dbg("%s:%s\n", __FILE__, __FUNCTION__);
-+
-+ // Turn on clocks early, for the case if trigger would enable
-+ // led immediately after led_classdev_register().
-+ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev,
-+ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2,
-+ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2);
-+
-+ for (i = 0; i < machinfo->num_leds; i++) {
-+ leds[i].machinfo = machinfo;
-+ leds[i].led_cdev.brightness_set = asic3_leds_set;
-+ ret = led_classdev_register(&pdev->dev, &leds[i].led_cdev);
-+ if (ret) {
-+ printk(KERN_ERR "Error: can't register %s led\n",
-+ leds[i].led_cdev.name);
-+ goto out_err;
-+ }
-+ }
-+
-+ return 0;
-+
-+out_err:
-+ while (--i >= 0) led_classdev_unregister(&leds[i].led_cdev);
-+
-+ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev,
-+ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2,
-+ 0 | 0 | 0);
-+
-+ return ret;
-+}
-+
-+static
-+int asic3_leds_remove(struct platform_device *pdev)
-+{
-+ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
-+ struct asic3_led *leds = machinfo->leds;
-+ int i = 0;
-+
-+ dbg("%s:%s\n", __FILE__, __FUNCTION__);
-+
-+ for (i = 0; i < machinfo->num_leds; i++)
-+ led_classdev_unregister(&leds[i].led_cdev);
-+
-+ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev,
-+ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2,
-+ 0 | 0 | 0);
-+
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+
-+static
-+int asic3_leds_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
-+ struct asic3_led *leds = machinfo->leds;
-+ int i = 0;
-+
-+ dbg("%s:%s\n", __FILE__, __FUNCTION__);
-+
-+ for (i = 0; i < machinfo->num_leds; i++)
-+ led_classdev_suspend(&leds[i].led_cdev);
-+
-+ return 0;
-+}
-+
-+static
-+int asic3_leds_resume(struct platform_device *pdev)
-+{
-+ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
-+ struct asic3_led *leds = machinfo->leds;
-+ int i = 0;
-+
-+ dbg("%s:%s\n", __FILE__, __FUNCTION__);
-+
-+ for (i = 0; i < machinfo->num_leds; i++)
-+ led_classdev_resume(&leds[i].led_cdev);
-+
-+ return 0;
-+}
-+
-+#endif
-+
-+static
-+struct platform_driver asic3_leds_driver = {
-+ .probe = asic3_leds_probe,
-+ .remove = asic3_leds_remove,
-+#ifdef CONFIG_PM
-+ .suspend = asic3_leds_suspend,
-+ .resume = asic3_leds_resume,
-+#endif
-+ .driver = {
-+ .name = "asic3-leds",
-+ },
-+};
-+
-+int asic3_leds_register(void)
-+{
-+ dbg("%s:%s\n", __FILE__, __FUNCTION__);
-+ return platform_driver_register(&asic3_leds_driver);
-+}
-+
-+void asic3_leds_unregister(void)
-+{
-+ platform_driver_unregister(&asic3_leds_driver);
-+ return;
-+}
-+
-+EXPORT_SYMBOL_GPL(asic3_leds_register);
-+EXPORT_SYMBOL_GPL(asic3_leds_unregister);
-+
-+MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>");
-+MODULE_DESCRIPTION("HTC ASIC3 LEDs driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/drivers/mfd/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/mfd/Kconfig 2007-09-11 12:53:30.000000000 +0200
-+++ linux-2.6.22/drivers/mfd/Kconfig 2007-09-11 12:53:37.000000000 +0200
-@@ -15,6 +15,16 @@
- interface. The device may be connected by PCI or local bus with
- varying functions enabled.
-
-+config HTC_ASIC3
-+ tristate "HTC ASIC3 (iPAQ h1900/h3900/h4000/hx4700/rx3000) support"
-+
-+config HTC_ASIC3_DS1WM
-+ bool "Support HTC ASIC3 builtin DS1WM block"
-+ help
-+ Choose Y here if you want to include support for ASIC3's builtin
-+ W1 controller. Some devices do not use it, and yet other have
-+ separate DS1WM controller. For them, choose N.
-+
- endmenu
-
- menu "Multimedia Capabilities Port drivers"
-Index: linux-2.6.22/drivers/mfd/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/mfd/Makefile 2007-09-11 12:53:30.000000000 +0200
-+++ linux-2.6.22/drivers/mfd/Makefile 2007-09-11 12:53:37.000000000 +0200
-@@ -2,6 +2,8 @@
- # Makefile for multifunction miscellaneous devices
- #
-
-+obj-$(CONFIG_HTC_ASIC3) += asic3_base.o soc-core.o
-+
- obj-$(CONFIG_MFD_SM501) += sm501.o
-
- obj-$(CONFIG_MCP) += mcp-core.o
-Index: linux-2.6.22/drivers/mfd/asic3_base.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/mfd/asic3_base.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,1208 @@
-+/*
-+ * Driver interface to HTC "ASIC3"
-+ *
-+ * Copyright 2001 Compaq Computer Corporation.
-+ * Copyright 2004-2005 Phil Blundell
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
-+ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
-+ * FITNESS FOR ANY PARTICULAR PURPOSE.
-+ *
-+ * Author: Andrew Christian
-+ * <Andrew.Christian@compaq.com>
-+ * October 2001
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-+#include <linux/init.h>
-+#include <linux/irq.h>
-+#include <linux/clk.h>
-+#include <linux/ds1wm.h>
-+#include <asm/arch/clock.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/irq.h>
-+#include <asm/io.h>
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <linux/soc/asic3_base.h>
-+#include <linux/soc/tmio_mmc.h>
-+#include "soc-core.h"
-+
-+
-+struct asic3_data {
-+ void *mapping;
-+ unsigned int bus_shift;
-+ int irq_base;
-+ int irq_nr;
-+
-+ u16 irq_bothedge[4];
-+ struct device *dev;
-+
-+ struct platform_device *mmc_dev;
-+};
-+
-+static DEFINE_SPINLOCK(asic3_gpio_lock);
-+
-+static int asic3_remove(struct platform_device *dev);
-+
-+static inline unsigned long asic3_address(struct device *dev,
-+ unsigned int reg)
-+{
-+ struct asic3_data *adata;
-+
-+ adata = (struct asic3_data *)dev->driver_data;
-+
-+ return (unsigned long)adata->mapping + (reg >> (2 - adata->bus_shift));
-+}
-+
-+void asic3_write_register(struct device *dev, unsigned int reg, u32 value)
-+{
-+ __raw_writew(value, asic3_address(dev, reg));
-+}
-+EXPORT_SYMBOL(asic3_write_register);
-+
-+u32 asic3_read_register(struct device *dev, unsigned int reg)
-+{
-+ return __raw_readw(asic3_address(dev, reg));
-+}
-+EXPORT_SYMBOL(asic3_read_register);
-+
-+static inline void __asic3_write_register(struct asic3_data *asic,
-+ unsigned int reg, u32 value)
-+{
-+ __raw_writew(value, (unsigned long)asic->mapping
-+ + (reg >> (2 - asic->bus_shift)));
-+}
-+
-+static inline u32 __asic3_read_register(struct asic3_data *asic,
-+ unsigned int reg)
-+{
-+ return __raw_readw((unsigned long)asic->mapping
-+ + (reg >> (2 - asic->bus_shift)));
-+}
-+
-+#define ASIC3_GPIO_FN(get_fn_name, set_fn_name, REG) \
-+u32 get_fn_name(struct device *dev) \
-+{ \
-+ return asic3_read_register(dev, REG); \
-+} \
-+EXPORT_SYMBOL(get_fn_name); \
-+ \
-+void set_fn_name(struct device *dev, u32 bits, u32 val) \
-+{ \
-+ unsigned long flags; \
-+ \
-+ spin_lock_irqsave(&asic3_gpio_lock, flags); \
-+ val |= (asic3_read_register(dev, REG) & ~bits); \
-+ asic3_write_register(dev, REG, val); \
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags); \
-+} \
-+EXPORT_SYMBOL(set_fn_name);
-+
-+#define ASIC3_GPIO_REGISTER(ACTION, action, fn, FN) \
-+ ASIC3_GPIO_FN(asic3_get_gpio_ ## action ## _ ## fn , \
-+ asic3_set_gpio_ ## action ## _ ## fn , \
-+ _IPAQ_ASIC3_GPIO_ ## FN ## _Base \
-+ + _IPAQ_ASIC3_GPIO_ ## ACTION )
-+
-+#define ASIC3_GPIO_FUNCTIONS(fn, FN) \
-+ ASIC3_GPIO_REGISTER(Direction, dir, fn, FN) \
-+ ASIC3_GPIO_REGISTER(Out, out, fn, FN) \
-+ ASIC3_GPIO_REGISTER(SleepMask, sleepmask, fn, FN) \
-+ ASIC3_GPIO_REGISTER(SleepOut, sleepout, fn, FN) \
-+ ASIC3_GPIO_REGISTER(BattFaultOut, battfaultout, fn, FN) \
-+ ASIC3_GPIO_REGISTER(AltFunction, alt_fn, fn, FN) \
-+ ASIC3_GPIO_REGISTER(SleepConf, sleepconf, fn, FN) \
-+ ASIC3_GPIO_REGISTER(Status, status, fn, FN)
-+
-+#if 0
-+ ASIC3_GPIO_REGISTER(Mask, mask, fn, FN)
-+ ASIC3_GPIO_REGISTER(TriggerType, trigtype, fn, FN)
-+ ASIC3_GPIO_REGISTER(EdgeTrigger, rising, fn, FN)
-+ ASIC3_GPIO_REGISTER(LevelTrigger, triglevel, fn, FN)
-+ ASIC3_GPIO_REGISTER(IntStatus, intstatus, fn, FN)
-+#endif
-+
-+ASIC3_GPIO_FUNCTIONS(a, A)
-+ASIC3_GPIO_FUNCTIONS(b, B)
-+ASIC3_GPIO_FUNCTIONS(c, C)
-+ASIC3_GPIO_FUNCTIONS(d, D)
-+
-+int asic3_gpio_get_value(struct device *dev, unsigned gpio)
-+{
-+ u32 mask = ASIC3_GPIO_bit(gpio);
-+ printk("%s(%d)\n", __FUNCTION__, gpio);
-+ switch (gpio >> 4) {
-+ case _IPAQ_ASIC3_GPIO_BANK_A:
-+ return asic3_get_gpio_status_a(dev) & mask;
-+ case _IPAQ_ASIC3_GPIO_BANK_B:
-+ return asic3_get_gpio_status_b(dev) & mask;
-+ case _IPAQ_ASIC3_GPIO_BANK_C:
-+ return asic3_get_gpio_status_c(dev) & mask;
-+ case _IPAQ_ASIC3_GPIO_BANK_D:
-+ return asic3_get_gpio_status_d(dev) & mask;
-+ }
-+
-+ printk(KERN_ERR "%s: invalid GPIO value 0x%x", __FUNCTION__, gpio);
-+ return 0;
-+}
-+EXPORT_SYMBOL(asic3_gpio_get_value);
-+
-+void asic3_gpio_set_value(struct device *dev, unsigned gpio, int val)
-+{
-+ u32 mask = ASIC3_GPIO_bit(gpio);
-+ u32 bitval = 0;
-+ if (val) bitval = mask;
-+ printk("%s(%d, %d)\n", __FUNCTION__, gpio, val);
-+
-+ switch (gpio >> 4) {
-+ case _IPAQ_ASIC3_GPIO_BANK_A:
-+ asic3_set_gpio_out_a(dev, mask, bitval);
-+ return;
-+ case _IPAQ_ASIC3_GPIO_BANK_B:
-+ asic3_set_gpio_out_b(dev, mask, bitval);
-+ return;
-+ case _IPAQ_ASIC3_GPIO_BANK_C:
-+ asic3_set_gpio_out_c(dev, mask, bitval);
-+ return;
-+ case _IPAQ_ASIC3_GPIO_BANK_D:
-+ asic3_set_gpio_out_d(dev, mask, bitval);
-+ return;
-+ }
-+
-+ printk(KERN_ERR "%s: invalid GPIO value 0x%x", __FUNCTION__, gpio);
-+}
-+EXPORT_SYMBOL(asic3_gpio_set_value);
-+
-+int asic3_irq_base(struct device *dev)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+
-+ return asic->irq_base;
-+}
-+EXPORT_SYMBOL(asic3_irq_base);
-+
-+static int asic3_gpio_to_irq(struct device *dev, unsigned gpio)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ printk("%s(%d)\n", __FUNCTION__, gpio);
-+
-+ return asic->irq_base + gpio;
-+}
-+
-+void asic3_set_led(struct device *dev, int led_num, int duty_time,
-+ int cycle_time, int timebase)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned int led_base;
-+
-+ /* it's a macro thing: see #define _IPAQ_ASIC_LED_0_Base for why you
-+ * can't substitute led_num in the macros below...
-+ */
-+
-+ switch (led_num) {
-+ case 0:
-+ led_base = _IPAQ_ASIC3_LED_0_Base;
-+ break;
-+ case 1:
-+ led_base = _IPAQ_ASIC3_LED_1_Base;
-+ break;
-+ case 2:
-+ led_base = _IPAQ_ASIC3_LED_2_Base;
-+ break;
-+ default:
-+ printk(KERN_ERR "%s: invalid led number %d", __FUNCTION__,
-+ led_num);
-+ return;
-+ }
-+
-+ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_TimeBase,
-+ timebase | LED_EN);
-+ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_PeriodTime,
-+ cycle_time);
-+ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_DutyTime,
-+ 0);
-+ udelay(20); /* asic voodoo - possibly need a whole duty cycle? */
-+ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_DutyTime,
-+ duty_time);
-+}
-+EXPORT_SYMBOL(asic3_set_led);
-+
-+void asic3_set_clock_sel(struct device *dev, u32 bits, u32 val)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned long flags;
-+ u32 v;
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL));
-+ v = (v & ~bits) | val;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), v);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+EXPORT_SYMBOL(asic3_set_clock_sel);
-+
-+void asic3_set_clock_cdex(struct device *dev, u32 bits, u32 val)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned long flags;
-+ u32 v;
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX));
-+ v = (v & ~bits) | val;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), v);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+EXPORT_SYMBOL(asic3_set_clock_cdex);
-+
-+static void asic3_clock_cdex_enable(struct clk *clk)
-+{
-+ struct asic3_data *asic = (struct asic3_data *)clk->parent->ctrlbit;
-+ unsigned long flags, val;
-+
-+ local_irq_save(flags);
-+
-+ val = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX));
-+ val |= clk->ctrlbit;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), val);
-+
-+ local_irq_restore(flags);
-+}
-+
-+static void asic3_clock_cdex_disable(struct clk *clk)
-+{
-+ struct asic3_data *asic = (struct asic3_data *)clk->parent->ctrlbit;
-+ unsigned long flags, val;
-+
-+ local_irq_save(flags);
-+
-+ val = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX));
-+ val &= ~clk->ctrlbit;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), val);
-+
-+ local_irq_restore(flags);
-+}
-+
-+/* base clocks */
-+
-+static struct clk clk_g = {
-+ .name = "gclk",
-+ .rate = 0,
-+ .parent = NULL,
-+};
-+
-+/* clock definitions */
-+
-+static struct clk asic3_clocks[] = {
-+ {
-+ .name = "spi",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_SPI,
-+ },
-+#ifdef CONFIG_HTC_ASIC3_DS1WM
-+ {
-+ .name = "ds1wm",
-+ .id = -1,
-+ .rate = 5000000,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_OWM,
-+ },
-+#endif
-+ {
-+ .name = "pwm0",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_PWM0,
-+ },
-+ {
-+ .name = "pwm1",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_PWM1,
-+ },
-+ {
-+ .name = "led0",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_LED0,
-+ },
-+ {
-+ .name = "led1",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_LED1,
-+ },
-+ {
-+ .name = "led2",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_LED2,
-+ },
-+ {
-+ .name = "smbus",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_SMBUS,
-+ },
-+ {
-+ .name = "ex0",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_EX0,
-+ },
-+ {
-+ .name = "ex1",
-+ .id = -1,
-+ .parent = &clk_g,
-+ .enable = asic3_clock_cdex_enable,
-+ .disable = asic3_clock_cdex_disable,
-+ .ctrlbit = CLOCK_CDEX_EX1,
-+ },
-+};
-+
-+void asic3_set_extcf_select(struct device *dev, u32 bits, u32 val)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned long flags;
-+ u32 v;
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Select));
-+ v = (v & ~bits) | val;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Select), v);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+EXPORT_SYMBOL(asic3_set_extcf_select);
-+
-+void asic3_set_extcf_reset(struct device *dev, u32 bits, u32 val)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned long flags;
-+ u32 v;
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Reset));
-+ v = (v & ~bits) | val;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Reset), v);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+EXPORT_SYMBOL(asic3_set_extcf_reset);
-+
-+void asic3_set_sdhwctrl(struct device *dev, u32 bits, u32 val)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ unsigned long flags;
-+ u32 v;
-+
-+ spin_lock_irqsave (&asic3_gpio_lock, flags);
-+ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(SDHWCTRL, SDConf));
-+ v = (v & ~bits) | val;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(SDHWCTRL, SDConf), v);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+EXPORT_SYMBOL(asic3_set_sdhwctrl);
-+
-+
-+#define MAX_ASIC_ISR_LOOPS 20
-+#define _IPAQ_ASIC3_GPIO_Base_INCR \
-+ (_IPAQ_ASIC3_GPIO_B_Base - _IPAQ_ASIC3_GPIO_A_Base)
-+
-+static inline void asic3_irq_flip_edge(struct asic3_data *asic,
-+ u32 base, int bit)
-+{
-+ u16 edge = __asic3_read_register(asic,
-+ base + _IPAQ_ASIC3_GPIO_EdgeTrigger);
-+ edge ^= bit;
-+ __asic3_write_register(asic,
-+ base + _IPAQ_ASIC3_GPIO_EdgeTrigger, edge);
-+}
-+
-+static void asic3_irq_demux(unsigned int irq, struct irq_desc *desc)
-+{
-+ int iter;
-+ struct asic3_data *asic;
-+
-+ /* Acknowledge the parrent (i.e. CPU's) IRQ */
-+ desc->chip->ack(irq);
-+
-+ asic = desc->handler_data;
-+
-+ /* printk( KERN_NOTICE "asic3_irq_demux: irq=%d\n", irq ); */
-+ for (iter = 0 ; iter < MAX_ASIC_ISR_LOOPS; iter++) {
-+ u32 status;
-+ int bank;
-+
-+ status = __asic3_read_register(asic,
-+ IPAQ_ASIC3_OFFSET(INTR, PIntStat));
-+ /* Check all ten register bits */
-+ if ((status & 0x3ff) == 0)
-+ break;
-+
-+ /* Handle GPIO IRQs */
-+ for (bank = 0; bank < 4; bank++) {
-+ if (status & (1 << bank)) {
-+ unsigned long base, i, istat;
-+
-+ base = _IPAQ_ASIC3_GPIO_A_Base
-+ + bank * _IPAQ_ASIC3_GPIO_Base_INCR;
-+ istat = __asic3_read_register(asic,
-+ base + _IPAQ_ASIC3_GPIO_IntStatus);
-+ /* IntStatus is write 0 to clear */
-+ /* XXX could miss interrupts! */
-+ __asic3_write_register(asic,
-+ base + _IPAQ_ASIC3_GPIO_IntStatus, 0);
-+
-+ for (i = 0; i < 16; i++) {
-+ int bit = (1 << i);
-+ unsigned int irqnr;
-+ if (!(istat & bit))
-+ continue;
-+
-+ irqnr = asic->irq_base
-+ + (16 * bank) + i;
-+ desc = irq_desc + irqnr;
-+ desc->handle_irq(irqnr, desc);
-+ if (asic->irq_bothedge[bank] & bit) {
-+ asic3_irq_flip_edge(asic, base,
-+ bit);
-+ }
-+ }
-+ }
-+ }
-+
-+ /* Handle remaining IRQs in the status register */
-+ {
-+ int i;
-+
-+ for (i = ASIC3_LED0_IRQ; i <= ASIC3_OWM_IRQ; i++) {
-+ /* They start at bit 4 and go up */
-+ if (status & (1 << (i - ASIC3_LED0_IRQ + 4))) {
-+ desc = irq_desc + asic->irq_base + i;
-+ desc->handle_irq(asic->irq_base + i,
-+ desc);
-+ }
-+ }
-+ }
-+
-+ }
-+
-+ if (iter >= MAX_ASIC_ISR_LOOPS)
-+ printk(KERN_ERR "%s: interrupt processing overrun\n",
-+ __FUNCTION__);
-+}
-+
-+static inline int asic3_irq_to_bank(struct asic3_data *asic, int irq)
-+{
-+ int n;
-+
-+ n = (irq - asic->irq_base) >> 4;
-+
-+ return (n * (_IPAQ_ASIC3_GPIO_B_Base - _IPAQ_ASIC3_GPIO_A_Base));
-+}
-+
-+static inline int asic3_irq_to_index(struct asic3_data *asic, int irq)
-+{
-+ return (irq - asic->irq_base) & 15;
-+}
-+
-+static void asic3_mask_gpio_irq(unsigned int irq)
-+{
-+ struct asic3_data *asic = get_irq_chip_data(irq);
-+ u32 val, bank, index;
-+ unsigned long flags;
-+
-+ bank = asic3_irq_to_bank(asic, irq);
-+ index = asic3_irq_to_index(asic, irq);
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ val = __asic3_read_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask);
-+ val |= 1 << index;
-+ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask, val);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+
-+static void asic3_mask_irq(unsigned int irq)
-+{
-+ struct asic3_data *asic = get_irq_chip_data(irq);
-+ int regval;
-+
-+ if (irq < ASIC3_NR_GPIO_IRQS) {
-+ printk(KERN_ERR "asic3_base: gpio mask attempt, irq %d\n",
-+ irq);
-+ return;
-+ }
-+
-+ regval = __asic3_read_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask);
-+
-+ switch (irq - asic->irq_base) {
-+ case ASIC3_LED0_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK0);
-+ break;
-+ case ASIC3_LED1_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK1);
-+ break;
-+ case ASIC3_LED2_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK2);
-+ break;
-+ case ASIC3_SPI_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK3);
-+ break;
-+ case ASIC3_SMBUS_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK4);
-+ break;
-+ case ASIC3_OWM_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval & ~ASIC3_INTMASK_MASK5);
-+ break;
-+ default:
-+ printk(KERN_ERR "asic3_base: bad non-gpio irq %d\n", irq);
-+ break;
-+ }
-+}
-+
-+static void asic3_unmask_gpio_irq(unsigned int irq)
-+{
-+ struct asic3_data *asic = get_irq_chip_data(irq);
-+ u32 val, bank, index;
-+ unsigned long flags;
-+
-+ bank = asic3_irq_to_bank(asic, irq);
-+ index = asic3_irq_to_index(asic, irq);
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ val = __asic3_read_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask);
-+ val &= ~(1 << index);
-+ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask, val);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+}
-+
-+static void asic3_unmask_irq(unsigned int irq)
-+{
-+ struct asic3_data *asic = get_irq_chip_data(irq);
-+ int regval;
-+
-+ if (irq < ASIC3_NR_GPIO_IRQS) {
-+ printk(KERN_ERR "asic3_base: gpio unmask attempt, irq %d\n",
-+ irq);
-+ return;
-+ }
-+
-+ regval = __asic3_read_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask);
-+
-+ switch (irq - asic->irq_base) {
-+ case ASIC3_LED0_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK0);
-+ break;
-+ case ASIC3_LED1_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK1);
-+ break;
-+ case ASIC3_LED2_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK2);
-+ break;
-+ case ASIC3_SPI_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK3);
-+ break;
-+ case ASIC3_SMBUS_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK4);
-+ break;
-+ case ASIC3_OWM_IRQ:
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
-+ regval | ASIC3_INTMASK_MASK5);
-+ break;
-+ default:
-+ printk(KERN_ERR "asic3_base: bad non-gpio irq %d\n", irq);
-+ break;
-+ }
-+}
-+
-+static int asic3_gpio_irq_type(unsigned int irq, unsigned int type)
-+{
-+ struct asic3_data *asic = get_irq_chip_data(irq);
-+ u32 bank, index;
-+ unsigned long flags;
-+ u16 trigger, level, edge, bit;
-+
-+ bank = asic3_irq_to_bank(asic, irq);
-+ index = asic3_irq_to_index(asic, irq);
-+ bit = 1<<index;
-+
-+ spin_lock_irqsave(&asic3_gpio_lock, flags);
-+ level = __asic3_read_register(asic,
-+ bank + _IPAQ_ASIC3_GPIO_LevelTrigger);
-+ edge = __asic3_read_register(asic,
-+ bank + _IPAQ_ASIC3_GPIO_EdgeTrigger);
-+ trigger = __asic3_read_register(asic,
-+ bank + _IPAQ_ASIC3_GPIO_TriggerType);
-+ asic->irq_bothedge[(irq - asic->irq_base) >> 4] &= ~bit;
-+
-+ if (type == IRQT_RISING) {
-+ trigger |= bit;
-+ edge |= bit;
-+ } else if (type == IRQT_FALLING) {
-+ trigger |= bit;
-+ edge &= ~bit;
-+ } else if (type == IRQT_BOTHEDGE) {
-+ trigger |= bit;
-+ if (asic3_gpio_get_value(asic->dev, irq - asic->irq_base))
-+ edge &= ~bit;
-+ else
-+ edge |= bit;
-+ asic->irq_bothedge[(irq - asic->irq_base) >> 4] |= bit;
-+ } else if (type == IRQT_LOW) {
-+ trigger &= ~bit;
-+ level &= ~bit;
-+ } else if (type == IRQT_HIGH) {
-+ trigger &= ~bit;
-+ level |= bit;
-+ } else {
-+ /*
-+ * if type == IRQT_NOEDGE, we should mask interrupts, but
-+ * be careful to not unmask them if mask was also called.
-+ * Probably need internal state for mask.
-+ */
-+ printk(KERN_NOTICE "asic3: irq type not changed.\n");
-+ }
-+ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_LevelTrigger,
-+ level);
-+ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_EdgeTrigger,
-+ edge);
-+ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_TriggerType,
-+ trigger);
-+ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
-+ return 0;
-+}
-+
-+static struct irq_chip asic3_gpio_irq_chip = {
-+ .name = "ASIC3-GPIO",
-+ .ack = asic3_mask_gpio_irq,
-+ .mask = asic3_mask_gpio_irq,
-+ .unmask = asic3_unmask_gpio_irq,
-+ .set_type = asic3_gpio_irq_type,
-+};
-+
-+static struct irq_chip asic3_irq_chip = {
-+ .name = "ASIC3",
-+ .ack = asic3_mask_irq,
-+ .mask = asic3_mask_irq,
-+ .unmask = asic3_unmask_irq,
-+};
-+
-+static void asic3_release(struct device *dev)
-+{
-+ struct platform_device *sdev = to_platform_device(dev);
-+
-+ kfree(sdev->resource);
-+ kfree(sdev);
-+}
-+
-+int asic3_register_mmc(struct device *dev)
-+{
-+ struct platform_device *sdev = kzalloc(sizeof(*sdev), GFP_KERNEL);
-+ struct tmio_mmc_hwconfig *mmc_config = kmalloc(sizeof(*mmc_config),
-+ GFP_KERNEL);
-+ struct platform_device *pdev = to_platform_device(dev);
-+ struct asic3_data *asic = dev->driver_data;
-+ struct asic3_platform_data *asic3_pdata = dev->platform_data;
-+ struct resource *res;
-+ int rc;
-+
-+ if (sdev == NULL || mmc_config == NULL)
-+ return -ENOMEM;
-+
-+ if (asic3_pdata->tmio_mmc_hwconfig) {
-+ memcpy(mmc_config, asic3_pdata->tmio_mmc_hwconfig,
-+ sizeof(*mmc_config));
-+ } else {
-+ memset(mmc_config, 0, sizeof(*mmc_config));
-+ }
-+ mmc_config->address_shift = asic->bus_shift;
-+
-+ sdev->id = -1;
-+ sdev->name = "asic3_mmc";
-+ sdev->dev.parent = dev;
-+ sdev->num_resources = 2;
-+ sdev->dev.platform_data = mmc_config;
-+ sdev->dev.release = asic3_release;
-+
-+ res = kzalloc(sdev->num_resources * sizeof(struct resource),
-+ GFP_KERNEL);
-+ if (res == NULL) {
-+ kfree(sdev);
-+ kfree(mmc_config);
-+ return -ENOMEM;
-+ }
-+ sdev->resource = res;
-+
-+ res[0].start = pdev->resource[2].start;
-+ res[0].end = pdev->resource[2].end;
-+ res[0].flags = IORESOURCE_MEM;
-+ res[1].start = res[1].end = pdev->resource[3].start;
-+ res[1].flags = IORESOURCE_IRQ;
-+
-+ rc = platform_device_register(sdev);
-+ if (rc) {
-+ printk(KERN_ERR "asic3_base: "
-+ "Could not register asic3_mmc device\n");
-+ kfree(res);
-+ kfree(sdev);
-+ return rc;
-+ }
-+
-+ asic->mmc_dev = sdev;
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(asic3_register_mmc);
-+
-+int asic3_unregister_mmc(struct device *dev)
-+{
-+ struct asic3_data *asic = dev->driver_data;
-+ platform_device_unregister(asic->mmc_dev);
-+ asic->mmc_dev = 0;
-+
-+ return 0;
-+}
-+EXPORT_SYMBOL(asic3_unregister_mmc);
-+
-+#ifdef CONFIG_HTC_ASIC3_DS1WM
-+/*
-+ * DS1WM subdevice
-+ */
-+
-+static void asic3_ds1wm_enable(struct platform_device *ds1wm_dev)
-+{
-+ struct device *dev = ds1wm_dev->dev.parent;
-+
-+ /* Turn on external clocks and the OWM clock */
-+ asic3_set_clock_cdex(dev,
-+ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM,
-+ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM);
-+
-+ mdelay(1);
-+
-+ asic3_set_extcf_reset(dev, ASIC3_EXTCF_OWM_RESET,
-+ ASIC3_EXTCF_OWM_RESET);
-+ mdelay(1);
-+ asic3_set_extcf_reset(dev, ASIC3_EXTCF_OWM_RESET, 0);
-+ mdelay(1);
-+
-+ /* Clear OWM_SMB, set OWM_EN */
-+ asic3_set_extcf_select(dev,
-+ ASIC3_EXTCF_OWM_SMB | ASIC3_EXTCF_OWM_EN,
-+ 0 | ASIC3_EXTCF_OWM_EN);
-+
-+ mdelay(1);
-+}
-+
-+static void asic3_ds1wm_disable(struct platform_device *ds1wm_dev)
-+{
-+ struct device *dev = ds1wm_dev->dev.parent;
-+
-+ asic3_set_extcf_select(dev,
-+ ASIC3_EXTCF_OWM_SMB | ASIC3_EXTCF_OWM_EN,
-+ 0 | 0);
-+
-+ asic3_set_clock_cdex(dev,
-+ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM,
-+ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | 0);
-+}
-+
-+
-+static struct resource asic3_ds1wm_resources[] = {
-+ {
-+ .start = _IPAQ_ASIC3_OWM_Base,
-+ .end = _IPAQ_ASIC3_OWM_Base + 0x14 - 1,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ {
-+ .start = ASIC3_OWM_IRQ,
-+ .end = ASIC3_OWM_IRQ,
-+ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE |
-+ IORESOURCE_IRQ_SOC_SUBDEVICE,
-+ },
-+};
-+
-+static struct ds1wm_platform_data ds1wm_pd = {
-+ .enable = asic3_ds1wm_enable,
-+ .disable = asic3_ds1wm_disable,
-+};
-+#endif
-+
-+static struct soc_device_data asic3_blocks[] = {
-+#ifdef CONFIG_HTC_ASIC3_DS1WM
-+ {
-+ .name = "ds1wm",
-+ .res = asic3_ds1wm_resources,
-+ .num_resources = ARRAY_SIZE(asic3_ds1wm_resources),
-+ .hwconfig = &ds1wm_pd,
-+ },
-+#endif
-+};
-+
-+static int asic3_probe(struct platform_device *pdev)
-+{
-+ struct asic3_platform_data *pdata = pdev->dev.platform_data;
-+ struct asic3_data *asic;
-+ struct device *dev = &pdev->dev;
-+ unsigned long clksel;
-+ int i, rc;
-+
-+ asic = kzalloc(sizeof(struct asic3_data), GFP_KERNEL);
-+ if (!asic)
-+ return -ENOMEM;
-+
-+ platform_set_drvdata(pdev, asic);
-+ asic->dev = &pdev->dev;
-+
-+ asic->mapping = ioremap(pdev->resource[0].start, IPAQ_ASIC3_MAP_SIZE);
-+ if (!asic->mapping) {
-+ printk(KERN_ERR "asic3: couldn't ioremap ASIC3\n");
-+ kfree (asic);
-+ return -ENOMEM;
-+ }
-+
-+ if (pdata && pdata->bus_shift)
-+ asic->bus_shift = pdata->bus_shift;
-+ else
-+ asic->bus_shift = 2;
-+
-+ /* XXX: should get correct SD clock values from pdata struct */
-+ clksel = 0;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), clksel);
-+
-+ /* Register ASIC3's clocks. */
-+ clk_g.ctrlbit = (int)asic;
-+
-+ if (clk_register(&clk_g) < 0)
-+ printk(KERN_ERR "asic3: failed to register ASIC3 gclk\n");
-+
-+ for (i = 0; i < ARRAY_SIZE(asic3_clocks); i++) {
-+ rc = clk_register(&asic3_clocks[i]);
-+ if (rc < 0)
-+ printk(KERN_ERR "asic3: "
-+ "failed to register clock %s (%d)\n",
-+ asic3_clocks[i].name, rc);
-+ }
-+
-+ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(A, Mask), 0xffff);
-+ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(B, Mask), 0xffff);
-+ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(C, Mask), 0xffff);
-+ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(D, Mask), 0xffff);
-+
-+ asic3_set_gpio_sleepmask_a(dev, 0xffff, 0xffff);
-+ asic3_set_gpio_sleepmask_b(dev, 0xffff, 0xffff);
-+ asic3_set_gpio_sleepmask_c(dev, 0xffff, 0xffff);
-+ asic3_set_gpio_sleepmask_d(dev, 0xffff, 0xffff);
-+
-+ if (pdata) {
-+ asic3_set_gpio_out_a(dev, 0xffff, pdata->gpio_a.init);
-+ asic3_set_gpio_out_b(dev, 0xffff, pdata->gpio_b.init);
-+ asic3_set_gpio_out_c(dev, 0xffff, pdata->gpio_c.init);
-+ asic3_set_gpio_out_d(dev, 0xffff, pdata->gpio_d.init);
-+
-+ asic3_set_gpio_dir_a(dev, 0xffff, pdata->gpio_a.dir);
-+ asic3_set_gpio_dir_b(dev, 0xffff, pdata->gpio_b.dir);
-+ asic3_set_gpio_dir_c(dev, 0xffff, pdata->gpio_c.dir);
-+ asic3_set_gpio_dir_d(dev, 0xffff, pdata->gpio_d.dir);
-+
-+ asic3_set_gpio_sleepmask_a(dev, 0xffff,
-+ pdata->gpio_a.sleep_mask);
-+ asic3_set_gpio_sleepmask_b(dev, 0xffff,
-+ pdata->gpio_b.sleep_mask);
-+ asic3_set_gpio_sleepmask_c(dev, 0xffff,
-+ pdata->gpio_c.sleep_mask);
-+ asic3_set_gpio_sleepmask_d(dev, 0xffff,
-+ pdata->gpio_d.sleep_mask);
-+
-+ asic3_set_gpio_sleepout_a(dev, 0xffff,
-+ pdata->gpio_a.sleep_out);
-+ asic3_set_gpio_sleepout_b(dev, 0xffff,
-+ pdata->gpio_b.sleep_out);
-+ asic3_set_gpio_sleepout_c(dev, 0xffff,
-+ pdata->gpio_c.sleep_out);
-+ asic3_set_gpio_sleepout_d(dev, 0xffff,
-+ pdata->gpio_d.sleep_out);
-+
-+ asic3_set_gpio_battfaultout_a(dev, 0xffff,
-+ pdata->gpio_a.batt_fault_out);
-+ asic3_set_gpio_battfaultout_b(dev, 0xffff,
-+ pdata->gpio_b.batt_fault_out);
-+ asic3_set_gpio_battfaultout_c(dev, 0xffff,
-+ pdata->gpio_c.batt_fault_out);
-+ asic3_set_gpio_battfaultout_d(dev, 0xffff,
-+ pdata->gpio_d.batt_fault_out);
-+
-+ asic3_set_gpio_sleepconf_a(dev, 0xffff,
-+ pdata->gpio_a.sleep_conf);
-+ asic3_set_gpio_sleepconf_b(dev, 0xffff,
-+ pdata->gpio_b.sleep_conf);
-+ asic3_set_gpio_sleepconf_c(dev, 0xffff,
-+ pdata->gpio_c.sleep_conf);
-+ asic3_set_gpio_sleepconf_d(dev, 0xffff,
-+ pdata->gpio_d.sleep_conf);
-+
-+ asic3_set_gpio_alt_fn_a(dev, 0xffff,
-+ pdata->gpio_a.alt_function);
-+ asic3_set_gpio_alt_fn_b(dev, 0xffff,
-+ pdata->gpio_b.alt_function);
-+ asic3_set_gpio_alt_fn_c(dev, 0xffff,
-+ pdata->gpio_c.alt_function);
-+ asic3_set_gpio_alt_fn_d(dev, 0xffff,
-+ pdata->gpio_d.alt_function);
-+ }
-+
-+ asic->irq_nr = -1;
-+ asic->irq_base = -1;
-+
-+ if (pdev->num_resources > 1)
-+ asic->irq_nr = pdev->resource[1].start;
-+
-+ if (asic->irq_nr != -1) {
-+ unsigned int i;
-+
-+ if (!pdata->irq_base) {
-+ printk(KERN_ERR "asic3: IRQ base not specified\n");
-+ asic3_remove(pdev);
-+ return -EINVAL;
-+ }
-+
-+ asic->irq_base = pdata->irq_base;
-+
-+ /* turn on clock to IRQ controller */
-+ clksel |= CLOCK_SEL_CX;
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL),
-+ clksel);
-+
-+ printk(KERN_INFO "asic3: using irq %d-%d on irq %d\n",
-+ asic->irq_base, asic->irq_base + ASIC3_NR_IRQS - 1,
-+ asic->irq_nr);
-+
-+ for (i = 0 ; i < ASIC3_NR_IRQS ; i++) {
-+ int irq = i + asic->irq_base;
-+ if (i < ASIC3_NR_GPIO_IRQS) {
-+ set_irq_chip(irq, &asic3_gpio_irq_chip);
-+ set_irq_chip_data(irq, asic);
-+ set_irq_handler(irq, handle_level_irq);
-+ set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
-+ } else {
-+ /* The remaining IRQs are not GPIO */
-+ set_irq_chip(irq, &asic3_irq_chip);
-+ set_irq_chip_data(irq, asic);
-+ set_irq_handler(irq, handle_level_irq);
-+ set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
-+ }
-+ }
-+
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask),
-+ ASIC3_INTMASK_GINTMASK);
-+
-+ set_irq_chained_handler(asic->irq_nr, asic3_irq_demux);
-+ set_irq_type(asic->irq_nr, IRQT_RISING);
-+ set_irq_data(asic->irq_nr, asic);
-+ }
-+
-+#ifdef CONFIG_HTC_ASIC3_DS1WM
-+ ds1wm_pd.bus_shift = asic->bus_shift;
-+#endif
-+
-+ pdata->gpiodev_ops.get = asic3_gpio_get_value;
-+ pdata->gpiodev_ops.set = asic3_gpio_set_value;
-+ pdata->gpiodev_ops.to_irq = asic3_gpio_to_irq;
-+
-+ soc_add_devices(pdev, asic3_blocks, ARRAY_SIZE(asic3_blocks),
-+ &pdev->resource[0],
-+ asic->bus_shift - ASIC3_DEFAULT_ADDR_SHIFT,
-+ asic->irq_base);
-+
-+ if (pdev->num_resources > 2) {
-+ int rc;
-+ rc = asic3_register_mmc(dev);
-+ if (rc) {
-+ asic3_remove(pdev);
-+ return rc;
-+ }
-+ }
-+
-+ if (pdata && pdata->num_child_platform_devs != 0)
-+ platform_add_devices(pdata->child_platform_devs,
-+ pdata->num_child_platform_devs);
-+
-+ return 0;
-+}
-+
-+static int asic3_remove(struct platform_device *pdev)
-+{
-+ struct asic3_platform_data *pdata = pdev->dev.platform_data;
-+ struct asic3_data *asic = platform_get_drvdata(pdev);
-+ int i;
-+
-+ if (pdata && pdata->num_child_platform_devs != 0) {
-+ for (i = 0; i < pdata->num_child_platform_devs; i++) {
-+ platform_device_unregister(
-+ pdata->child_platform_devs[i]);
-+ }
-+ }
-+
-+ if (asic->irq_nr != -1) {
-+ unsigned int i;
-+
-+ for (i = 0 ; i < ASIC3_NR_IRQS ; i++) {
-+ int irq = i + asic->irq_base;
-+ set_irq_flags(irq, 0);
-+ set_irq_handler (irq, NULL);
-+ set_irq_chip (irq, NULL);
-+ set_irq_chip_data(irq, NULL);
-+ }
-+
-+ set_irq_chained_handler(asic->irq_nr, NULL);
-+ }
-+
-+ if (asic->mmc_dev)
-+ asic3_unregister_mmc(&pdev->dev);
-+
-+ for (i = 0; i < ARRAY_SIZE(asic3_clocks); i++)
-+ clk_unregister(&asic3_clocks[i]);
-+ clk_unregister(&clk_g);
-+
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), 0);
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask), 0);
-+
-+ iounmap(asic->mapping);
-+
-+ kfree(asic);
-+
-+ return 0;
-+}
-+
-+static void asic3_shutdown(struct platform_device *pdev)
-+{
-+}
-+
-+#define ASIC3_SUSPEND_CDEX_MASK \
-+ (CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2)
-+static unsigned short suspend_cdex;
-+
-+static int asic3_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct asic3_data *asic = platform_get_drvdata(pdev);
-+ suspend_cdex = __asic3_read_register(asic,
-+ _IPAQ_ASIC3_CLOCK_Base + _IPAQ_ASIC3_CLOCK_CDEX);
-+ /* The LEDs are still active during suspend */
-+ __asic3_write_register(asic,
-+ _IPAQ_ASIC3_CLOCK_Base + _IPAQ_ASIC3_CLOCK_CDEX,
-+ suspend_cdex & ASIC3_SUSPEND_CDEX_MASK);
-+ return 0;
-+}
-+
-+static int asic3_resume(struct platform_device *pdev)
-+{
-+ struct asic3_data *asic = platform_get_drvdata(pdev);
-+ unsigned short intmask;
-+
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX),
-+ suspend_cdex);
-+
-+ if (asic->irq_nr != -1) {
-+ /* Toggle the interrupt mask to try to get ASIC3 to show
-+ * the CPU an interrupt edge. For more details see the
-+ * kernel-discuss thread around 13 June 2005 with the
-+ * subject "asic3 suspend / resume". */
-+ intmask = __asic3_read_register(asic,
-+ IPAQ_ASIC3_OFFSET(INTR, IntMask));
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask),
-+ intmask & ~ASIC3_INTMASK_GINTMASK);
-+ mdelay(1);
-+ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask),
-+ intmask | ASIC3_INTMASK_GINTMASK);
-+ }
-+
-+ return 0;
-+}
-+
-+static struct platform_driver asic3_device_driver = {
-+ .driver = {
-+ .name = "asic3",
-+ },
-+ .probe = asic3_probe,
-+ .remove = asic3_remove,
-+ .suspend = asic3_suspend,
-+ .resume = asic3_resume,
-+ .shutdown = asic3_shutdown,
-+};
-+
-+static int __init asic3_base_init(void)
-+{
-+ int retval = 0;
-+ retval = platform_driver_register(&asic3_device_driver);
-+ return retval;
-+}
-+
-+static void __exit asic3_base_exit(void)
-+{
-+ platform_driver_unregister(&asic3_device_driver);
-+}
-+
-+#ifdef MODULE
-+module_init(asic3_base_init);
-+#else /* start early for dependencies */
-+subsys_initcall(asic3_base_init);
-+#endif
-+module_exit(asic3_base_exit);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Phil Blundell <pb@handhelds.org>");
-+MODULE_DESCRIPTION("Core driver for HTC ASIC3");
-+MODULE_SUPPORTED_DEVICE("asic3");
-Index: linux-2.6.22/drivers/mfd/soc-core.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/mfd/soc-core.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,106 @@
-+/*
-+ * drivers/soc/soc-core.c
-+ *
-+ * core SoC support
-+ * Copyright (c) 2006 Ian Molton
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This file contains functionality used by many SoC type devices.
-+ *
-+ * Created: 2006-11-28
-+ *
-+ */
-+
-+#include <linux/ioport.h>
-+#include <linux/slab.h>
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include "soc-core.h"
-+
-+void soc_free_devices(struct platform_device *devices, int nr_devs)
-+{
-+ struct platform_device *dev = devices;
-+ int i;
-+
-+ for (i = 0; i < nr_devs; i++) {
-+ struct resource *res = dev->resource;
-+ platform_device_unregister(dev++);
-+ kfree(res);
-+ }
-+ kfree(devices);
-+}
-+EXPORT_SYMBOL_GPL(soc_free_devices);
-+
-+#define SIGNED_SHIFT(val, shift) ((shift) >= 0 ? ((val) << (shift)) : ((val) >> -(shift)))
-+
-+struct platform_device *soc_add_devices(struct platform_device *dev,
-+ struct soc_device_data *soc, int nr_devs,
-+ struct resource *mem,
-+ int relative_addr_shift, int irq_base)
-+{
-+ struct platform_device *devices;
-+ int i, r, base;
-+
-+ devices = kzalloc(nr_devs * sizeof(struct platform_device), GFP_KERNEL);
-+ if (!devices)
-+ return NULL;
-+
-+ for (i = 0; i < nr_devs; i++) {
-+ struct platform_device *sdev = &devices[i];
-+ struct soc_device_data *blk = &soc[i];
-+ struct resource *res;
-+
-+ sdev->id = -1;
-+ sdev->name = blk->name;
-+
-+ sdev->dev.parent = &dev->dev;
-+ sdev->dev.platform_data = (void *)blk->hwconfig;
-+ sdev->num_resources = blk->num_resources;
-+
-+ /* Allocate space for the subdevice resources */
-+ res = kzalloc (blk->num_resources * sizeof (struct resource), GFP_KERNEL);
-+ if (!res)
-+ goto fail;
-+
-+ for (r = 0 ; r < blk->num_resources ; r++) {
-+ res[r].name = blk->res[r].name; // Fixme - should copy
-+
-+ /* Find out base to use */
-+ base = 0;
-+ if (blk->res[r].flags & IORESOURCE_MEM) {
-+ base = mem->start;
-+ } else if ((blk->res[r].flags & IORESOURCE_IRQ) &&
-+ (blk->res[r].flags & IORESOURCE_IRQ_SOC_SUBDEVICE)) {
-+ base = irq_base;
-+ }
-+
-+ /* Adjust resource */
-+ if (blk->res[r].flags & IORESOURCE_MEM) {
-+ res[r].parent = mem;
-+ res[r].start = base + SIGNED_SHIFT(blk->res[r].start, relative_addr_shift);
-+ res[r].end = base + SIGNED_SHIFT(blk->res[r].end, relative_addr_shift);
-+ } else {
-+ res[r].start = base + blk->res[r].start;
-+ res[r].end = base + blk->res[r].end;
-+ }
-+ res[r].flags = blk->res[r].flags;
-+ }
-+
-+ sdev->resource = res;
-+ if (platform_device_register(sdev)) {
-+ kfree(res);
-+ goto fail;
-+ }
-+
-+ printk(KERN_INFO "SoC: registering %s\n", blk->name);
-+ }
-+ return devices;
-+
-+fail:
-+ soc_free_devices(devices, i + 1);
-+ return NULL;
-+}
-+EXPORT_SYMBOL_GPL(soc_add_devices);
-Index: linux-2.6.22/drivers/mfd/soc-core.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/mfd/soc-core.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,30 @@
-+/*
-+ * drivers/soc/soc-core.h
-+ *
-+ * core SoC support
-+ * Copyright (c) 2006 Ian Molton
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * This file contains prototypes for the functions in soc-core.c
-+ *
-+ * Created: 2006-11-28
-+ *
-+ */
-+
-+struct soc_device_data {
-+ char *name;
-+ struct resource *res;
-+ int num_resources;
-+ void *hwconfig; /* platform_data to pass to the subdevice */
-+};
-+
-+struct platform_device *soc_add_devices(struct platform_device *dev,
-+ struct soc_device_data *soc, int n_devs,
-+ struct resource *mem,
-+ int relative_addr_shift, int irq_base);
-+
-+void soc_free_devices(struct platform_device *devices, int nr_devs);
-+
-Index: linux-2.6.22/include/asm-arm/arch-pxa/clock.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/clock.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,27 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/clock.h
-+ *
-+ * Copyright (C) 2006 Erik Hovland
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+struct clk {
-+ struct list_head node;
-+ struct module *owner;
-+ struct clk *parent;
-+ const char *name;
-+ int id;
-+ unsigned int enabled;
-+ unsigned long rate;
-+ unsigned long ctrlbit;
-+
-+ void (*enable)(struct clk *);
-+ void (*disable)(struct clk *);
-+};
-+
-+
-+extern int clk_register(struct clk *clk);
-+extern void clk_unregister(struct clk *clk);
-Index: linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-asic.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-asic.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,213 @@
-+/*
-+ * include/asm/arm/arch-pxa/htcuniversal-asic.h
-+ *
-+ * Authors: Giuseppe Zompatori <giuseppe_zompatori@yahoo.it>
-+ *
-+ * based on previews work, see below:
-+ *
-+ * include/asm/arm/arch-pxa/hx4700-asic.h
-+ * Copyright (c) 2004 SDG Systems, LLC
-+ *
-+ */
-+
-+#ifndef _HTCUNIVERSAL_ASIC_H_
-+#define _HTCUNIVERSAL_ASIC_H_
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+
-+/* ASIC3 */
-+
-+#define HTCUNIVERSAL_ASIC3_GPIO_PHYS PXA_CS4_PHYS
-+#define HTCUNIVERSAL_ASIC3_MMC_PHYS PXA_CS3_PHYS
-+
-+/* TODO: some information is missing here */
-+
-+/* ASIC3 GPIO A bank */
-+
-+#define GPIOA_I2C_EN 0 /* Output */
-+#define GPIOA_SPK_PWR1_ON 1 /* Output */
-+#define GPIOA_AUDIO_PWR_ON 2 /* Output */
-+#define GPIOA_EARPHONE_PWR_ON 3 /* Output */
-+
-+#define GPIOA_UNKNOWN4 4 /* Output */
-+#define GPIOA_BUTTON_BACKLIGHT_N 5 /* Input */
-+#define GPIOA_SPK_PWR2_ON 6 /* Output */
-+#define GPIOA_BUTTON_RECORD_N 7 /* Input */
-+
-+#define GPIOA_BUTTON_CAMERA_N 8 /* Input */
-+#define GPIOA_UNKNOWN9 9 /* Output */
-+#define GPIOA_FLASHLIGHT 10 /* Output */
-+#define GPIOA_COVER_ROTATE_N 11 /* Input */
-+
-+#define GPIOA_TOUCHSCREEN_N 12 /* Input */
-+#define GPIOA_VOL_UP_N 13 /* Input */
-+#define GPIOA_VOL_DOWN_N 14 /* Input */
-+#define GPIOA_LCD_PWR5_ON 15 /* Output */
-+
-+/* ASIC3 GPIO B bank */
-+
-+#define GPIOB_BB_READY 0 /* Input */
-+#define GPIOB_CODEC_PDN 1 /* Output */
-+#define GPIOB_UNKNOWN2 2 /* Input */
-+#define GPIOB_BB_UNKNOWN3 3 /* Input */
-+
-+#define GPIOB_BT_IRQ 4 /* Input */
-+#define GPIOB_CLAMSHELL_N 5 /* Input */
-+#define GPIOB_LCD_PWR3_ON 6 /* Output */
-+#define GPIOB_BB_ALERT 7 /* Input */
-+
-+#define GPIOB_BB_RESET2 8 /* Output */
-+#define GPIOB_EARPHONE_N 9 /* Input */
-+#define GPIOB_MICRECORD_N 10 /* Input */
-+#define GPIOB_NIGHT_SENSOR 11 /* Input */
-+
-+#define GPIOB_UMTS_DCD 12 /* Input */
-+#define GPIOB_UNKNOWN13 13 /* Input */
-+#define GPIOB_CHARGE_EN 14 /* Output */
-+#define GPIOB_USB_PUEN 15 /* Output */
-+
-+/* ASIC3 GPIO C bank */
-+
-+#define GPIOC_LED_BTWIFI 0 /* Output */
-+#define GPIOC_LED_RED 1 /* Output */
-+#define GPIOC_LED_GREEN 2 /* Output */
-+#define GPIOC_BOARDID3 3 /* Input */
-+
-+#define GPIOC_WIFI_IRQ_N 4 /* Input */
-+#define GPIOC_WIFI_RESET 5 /* Output */
-+#define GPIOC_WIFI_PWR1_ON 6 /* Output */
-+#define GPIOC_BT_RESET 7 /* Output */
-+
-+#define GPIOC_UNKNOWN8 8 /* Output */
-+#define GPIOC_LCD_PWR1_ON 9 /* Output */
-+#define GPIOC_LCD_PWR2_ON 10 /* Output */
-+#define GPIOC_BOARDID2 11 /* Input */
-+
-+#define GPIOC_BOARDID1 12 /* Input */
-+#define GPIOC_BOARDID0 13 /* Input */
-+#define GPIOC_BT_PWR_ON 14 /* Output */
-+#define GPIOC_CHARGE_ON 15 /* Output */
-+
-+/* ASIC3 GPIO D bank */
-+
-+#define GPIOD_KEY_OK_N 0 /* Input */
-+#define GPIOD_KEY_RIGHT_N 1 /* Input */
-+#define GPIOD_KEY_LEFT_N 2 /* Input */
-+#define GPIOD_KEY_DOWN_N 3 /* Input */
-+
-+#define GPIOD_KEY_UP_N 4 /* Input */
-+#define GPIOD_SDIO_DET 5 /* Input */
-+#define GPIOD_WIFI_PWR2_ON 6 /* Output */
-+#define GPIOD_HW_REBOOT 7 /* Output */
-+
-+#define GPIOD_BB_RESET1 8 /* Output */
-+#define GPIOD_UNKNOWN9 9 /* Output */
-+#define GPIOD_VIBRA_PWR_ON 10 /* Output */
-+#define GPIOD_WIFI_PWR3_ON 11 /* Output */
-+
-+#define GPIOD_FL_PWR_ON 12 /* Output */
-+#define GPIOD_LCD_PWR4_ON 13 /* Output */
-+#define GPIOD_BL_KEYP_PWR_ON 14 /* Output */
-+#define GPIOD_BL_KEYB_PWR_ON 15 /* Output */
-+
-+extern struct platform_device htcuniversal_asic3;
-+
-+/* ASIC3 GPIO A bank */
-+
-+#define GPIO_I2C_EN 0*16+GPIOA_I2C_EN
-+#define GPIO_SPK_PWR1_ON 0*16+GPIOA_SPK_PWR1_ON
-+#define GPIO_AUDIO_PWR_ON 0*16+GPIOA_AUDIO_PWR_ON
-+#define GPIO_EARPHONE_PWR_ON 0*16+GPIOA_EARPHONE_PWR_ON
-+
-+#define GPIO_UNKNOWNA4 0*16+GPIOA_UNKNOWN4
-+#define GPIO_BUTTON_BACKLIGHT_N 0*16+GPIOA_BUTTON_BACKLIGHT_N
-+#define GPIO_SPK_PWR2_ON 0*16+GPIOA_SPK_PWR2_ON
-+#define GPIO_BUTTON_RECORD_N 0*16+GPIOA_BUTTON_RECORD_N
-+
-+#define GPIO_BUTTON_CAMERA_N 0*16+GPIOA_BUTTON_CAMERA_N
-+#define GPIO_UNKNOWNA9 0*16+GPIOA_UNKNOWN9
-+#define GPIO_FLASHLIGHT 0*16+GPIOA_FLASHLIGHT
-+#define GPIO_COVER_ROTATE_N 0*16+GPIOA_COVER_ROTATE_N
-+
-+#define GPIO_TOUCHSCREEN_N 0*16+GPIOA_TOUCHSCREEN_N
-+#define GPIO_VOL_UP_N 0*16+GPIOA_VOL_UP_N
-+#define GPIO_VOL_DOWN_N 0*16+GPIOA_VOL_DOWN_N
-+#define GPIO_LCD_PWR5_ON 0*16+GPIOA_LCD_PWR5_ON
-+
-+/* ASIC3 GPIO B bank */
-+
-+#define GPIO_BB_READY 1*16+GPIOB_BB_READY
-+#define GPIO_CODEC_PDN 1*16+GPIOB_CODEC_PDN
-+#define GPIO_UNKNOWNB2 1*16+GPIOB_UNKNOWN2
-+#define GPIO_BB_UNKNOWN3 1*16+GPIOB_BB_UNKNOWN3
-+
-+#define GPIO_BT_IRQ 1*16+GPIOB_BT_IRQ
-+#define GPIO_CLAMSHELL_N 1*16+GPIOB_CLAMSHELL_N
-+#define GPIO_LCD_PWR3_ON 1*16+GPIOB_LCD_PWR3_ON
-+#define GPIO_BB_ALERT 1*16+GPIOB_BB_ALERT
-+
-+#define GPIO_BB_RESET2 1*16+GPIOB_BB_RESET2
-+#define GPIO_EARPHONE_N 1*16+GPIOB_EARPHONE_N
-+#define GPIO_MICRECORD_N 1*16+GPIOB_MICRECORD_N
-+#define GPIO_NIGHT_SENSOR 1*16+GPIOB_NIGHT_SENSOR
-+
-+#define GPIO_UMTS_DCD 1*16+GPIOB_UMTS_DCD
-+#define GPIO_UNKNOWNB13 1*16+GPIOB_UNKNOWN13
-+#define GPIO_CHARGE_EN 1*16+GPIOB_CHARGE_EN
-+#define GPIO_USB_PUEN 1*16+GPIOB_USB_PUEN
-+
-+/* ASIC3 GPIO C bank */
-+
-+#define GPIO_LED_BTWIFI 2*16+GPIOC_LED_BTWIFI
-+#define GPIO_LED_RED 2*16+GPIOC_LED_RED
-+#define GPIO_LED_GREEN 2*16+GPIOC_LED_GREEN
-+#define GPIO_BOARDID3 2*16+GPIOC_BOARDID3
-+
-+#define GPIO_WIFI_IRQ_N 2*16+GPIOC_WIFI_IRQ_N
-+#define GPIO_WIFI_RESET 2*16+GPIOC_WIFI_RESET
-+#define GPIO_WIFI_PWR1_ON 2*16+GPIOC_WIFI_PWR1_ON
-+#define GPIO_BT_RESET 2*16+GPIOC_BT_RESET
-+
-+#define GPIO_UNKNOWNC8 2*16+GPIOC_UNKNOWN8
-+#define GPIO_LCD_PWR1_ON 2*16+GPIOC_LCD_PWR1_ON
-+#define GPIO_LCD_PWR2_ON 2*16+GPIOC_LCD_PWR2_ON
-+#define GPIO_BOARDID2 2*16+GPIOC_BOARDID2
-+
-+#define GPIO_BOARDID1 2*16+GPIOC_BOARDID1
-+#define GPIO_BOARDID0 2*16+GPIOC_BOARDID0
-+#define GPIO_BT_PWR_ON 2*16+GPIOC_BT_PWR_ON
-+#define GPIO_CHARGE_ON 2*16+GPIOC_CHARGE_ON
-+
-+/* ASIC3 GPIO D bank */
-+
-+#define GPIO_KEY_OK_N 3*16+GPIOD_KEY_OK_N
-+#define GPIO_KEY_RIGHT_N 3*16+GPIOD_KEY_RIGHT_N
-+#define GPIO_KEY_LEFT_N 3*16+GPIOD_KEY_LEFT_N
-+#define GPIO_KEY_DOWN_N 3*16+GPIOD_KEY_DOWN_N
-+
-+#define GPIO_KEY_UP_N 3*16+GPIOD_KEY_UP_N
-+#define GPIO_SDIO_DET 3*16+GPIOD_SDIO_DET
-+#define GPIO_WIFI_PWR2_ON 3*16+GPIOD_WIFI_PWR2_ON
-+#define GPIO_HW_REBOOT 3*16+GPIOD_HW_REBOOT
-+
-+#define GPIO_BB_RESET1 3*16+GPIOD_BB_RESET1
-+#define GPIO_UNKNOWND9 3*16+GPIOD_UNKNOWN9
-+#define GPIO_VIBRA_PWR_ON 3*16+GPIOD_VIBRA_PWR_ON
-+#define GPIO_WIFI_PWR3_ON 3*16+GPIOD_WIFI_PWR3_ON
-+
-+#define GPIO_FL_PWR_ON 3*16+GPIOD_FL_PWR_ON
-+#define GPIO_LCD_PWR4_ON 3*16+GPIOD_LCD_PWR4_ON
-+#define GPIO_BL_KEYP_PWR_ON 3*16+GPIOD_BL_KEYP_PWR_ON
-+#define GPIO_BL_KEYB_PWR_ON 3*16+GPIOD_BL_KEYB_PWR_ON
-+
-+#define HTCUNIVERSAL_EGPIO_BASE PXA_CS2_PHYS+0x02000000
-+
-+#define EGPIO4_ON 4 /* something */
-+#define EGPIO5_BT_3V3_ON 5 /* Bluetooth related */
-+#define EGPIO6_WIFI_ON 6 /* WLAN related*/
-+
-+extern void htcuniversal_egpio_enable( u_int16_t bits );
-+extern void htcuniversal_egpio_disable( u_int16_t bits );
-+
-+#endif /* _HTCUNIVERSAL_ASIC_H_ */
-+
-Index: linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-gpio.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-gpio.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,220 @@
-+/*
-+ * include/asm-arm/arch-pxa/htcuniversal-gpio.h
-+ * History:
-+ *
-+ * 2004-12-10 Michael Opdenacker. Wrote down GPIO settings as identified by Jamey Hicks.
-+ * Reused the h2200-gpio.h file as a template.
-+ */
-+
-+#ifndef _HTCUNIVERSAL_GPIO_H_
-+#define _HTCUNIVERSAL_GPIO_H_
-+
-+#include <asm/arch/pxa-regs.h>
-+
-+#define GET_HTCUNIVERSAL_GPIO(gpio) \
-+ (GPLR(GPIO_NR_HTCUNIVERSAL_ ## gpio) & GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio))
-+
-+#define SET_HTCUNIVERSAL_GPIO(gpio, setp) \
-+do { \
-+if (setp) \
-+ GPSR(GPIO_NR_HTCUNIVERSAL_ ## gpio) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio); \
-+else \
-+ GPCR(GPIO_NR_HTCUNIVERSAL_ ## gpio) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio); \
-+} while (0)
-+
-+#define SET_HTCUNIVERSAL_GPIO_N(gpio, setp) \
-+do { \
-+if (setp) \
-+ GPCR(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N); \
-+else \
-+ GPSR(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N); \
-+} while (0)
-+
-+#define HTCUNIVERSAL_IRQ(gpio) \
-+ IRQ_GPIO(GPIO_NR_HTCUNIVERSAL_ ## gpio)
-+
-+#define GPIO_NR_HTCUNIVERSAL_KEY_ON_N 0
-+#define GPIO_NR_HTCUNIVERSAL_GP_RST_N 1
-+
-+#define GPIO_NR_HTCUNIVERSAL_USB_DET 9
-+#define GPIO_NR_HTCUNIVERSAL_POWER_DET 10
-+
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD7 12
-+#define GPIO_NR_HTCUNIVERSAL_ASIC3_SDIO_INT_N 13
-+#define GPIO_NR_HTCUNIVERSAL_ASIC3_EXT_INT 14
-+#define GPIO_NR_HTCUNIVERSAL_CS1_N 15
-+
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD6 17
-+#define GPIO_NR_HTCUNIVERSAL_RDY 18
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_START 19
-+
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT7 22
-+#define GPIO_NR_HTCUNIVERSAL_SPI_CLK 23
-+#define GPIO_NR_HTCUNIVERSAL_SPI_FRM 24
-+#define GPIO_NR_HTCUNIVERSAL_SPI_DO 25
-+#define GPIO_NR_HTCUNIVERSAL_SPI_DI 26
-+
-+#define GPIO_NR_HTCUNIVERSAL_CODEC_ON 27
-+#define GPIO_NR_HTCUNIVERSAL_I2S_BCK 28
-+#define GPIO_NR_HTCUNIVERSAL_I2S_DIN 29
-+#define GPIO_NR_HTCUNIVERSAL_I2S_DOUT 30
-+#define GPIO_NR_HTCUNIVERSAL_I2S_SYNC 31
-+
-+#define GPIO_NR_HTCUNIVERSAL_RS232_ON 32
-+#define GPIO_NR_HTCUNIVERSAL_CS5_N 33
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_RXD 34
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS 35
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN7 36
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN3 37
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN4 38
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_TXD 39
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT6 40
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS 41
-+#define GPIO_NR_HTCUNIVERSAL_BT_RXD 42
-+#define GPIO_NR_HTCUNIVERSAL_BT_TXD 43
-+#define GPIO_NR_HTCUNIVERSAL_BT_UART_CTS 44
-+#define GPIO_NR_HTCUNIVERSAL_BT_UART_RTS 45
-+
-+#define GPIO_NR_HTCUNIVERSAL_SIR_RXD 42
-+#define GPIO_NR_HTCUNIVERSAL_SIR_TXD 43
-+
-+#define GPIO_NR_HTCUNIVERSAL_POE_N 48
-+#define GPIO_NR_HTCUNIVERSAL_PWE_N 49
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD3 50
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD2 51
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD4 52
-+
-+#define GPIO_NR_HTCUNIVERSAL_CIF_MCLK 53
-+#define GPIO_NR_HTCUNIVERSAL_CIF_PCLK 54
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD1 55
-+
-+#define GPIO_NR_HTCUNIVERSAL_LDD0 58
-+#define GPIO_NR_HTCUNIVERSAL_LDD1 59
-+#define GPIO_NR_HTCUNIVERSAL_LDD2 60
-+#define GPIO_NR_HTCUNIVERSAL_LDD3 61
-+#define GPIO_NR_HTCUNIVERSAL_LDD4 62
-+#define GPIO_NR_HTCUNIVERSAL_LDD5 63
-+#define GPIO_NR_HTCUNIVERSAL_LDD6 64
-+#define GPIO_NR_HTCUNIVERSAL_LDD7 65
-+#define GPIO_NR_HTCUNIVERSAL_LDD8 66
-+#define GPIO_NR_HTCUNIVERSAL_LDD9 67
-+#define GPIO_NR_HTCUNIVERSAL_LDD10 68
-+#define GPIO_NR_HTCUNIVERSAL_LDD11 69
-+#define GPIO_NR_HTCUNIVERSAL_LDD12 70
-+#define GPIO_NR_HTCUNIVERSAL_LDD13 71
-+#define GPIO_NR_HTCUNIVERSAL_LDD14 72
-+#define GPIO_NR_HTCUNIVERSAL_LDD15 73
-+
-+#define GPIO_NR_HTCUNIVERSAL_LFCLK_RD 74
-+#define GPIO_NR_HTCUNIVERSAL_LFCLK_A0 75
-+#define GPIO_NR_HTCUNIVERSAL_LFCLK_WR 76
-+#define GPIO_NR_HTCUNIVERSAL_LBIAS 77
-+
-+#define GPIO_NR_HTCUNIVERSAL_CS2_N 78
-+#define GPIO_NR_HTCUNIVERSAL_CS3_N 79
-+#define GPIO_NR_HTCUNIVERSAL_CS4_N 80
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD0 81
-+#define GPIO_NR_HTCUNIVERSAL_CIF_DD5 82
-+
-+#define GPIO_NR_HTCUNIVERSAL_CIF_LV 84
-+#define GPIO_NR_HTCUNIVERSAL_CIF_FV 85
-+
-+#define GPIO_NR_HTCUNIVERSAL_LCD1 86
-+#define GPIO_NR_HTCUNIVERSAL_LCD2 87
-+
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN5 90
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN6 91
-+
-+#define GPIO_NR_HTCUNIVERSAL_DREQ1 97
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_RESET 98
-+
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN0 100
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN1 101
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN2 102
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT0 103
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT1 104
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT2 105
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT3 106
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT4 107
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT5 108
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_UNKNOWN 109
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_OFF 110
-+
-+#define GPIO_NR_HTCUNIVERSAL_USB_PUEN 112
-+#define GPIO_NR_HTCUNIVERSAL_I2S_SYSCLK 113
-+
-+#define GPIO_NR_HTCUNIVERSAL_PWM_OUT1 115
-+
-+#define GPIO_NR_HTCUNIVERSAL_I2C_SCL 117
-+#define GPIO_NR_HTCUNIVERSAL_I2C_SDA 118
-+
-+#if 0
-+#define GPIO_NR_HTCUNIVERSAL_CPU_BATT_FAULT_N
-+#define GPIO_NR_HTCUNIVERSAL_ASIC3_RESET_N
-+#define GPIO_NR_HTCUNIVERSAL_CHARGE_EN_N
-+#define GPIO_NR_HTCUNIVERSAL_FLASH_VPEN
-+#define GPIO_NR_HTCUNIVERSAL_BATT_OFF
-+#define GPIO_NR_HTCUNIVERSAL_USB_CHARGE_RATE
-+#define GPIO_NR_HTCUNIVERSAL_BL_DETECT_N
-+#define GPIO_NR_HTCUNIVERSAL_CPU_HW_RESET_N
-+#endif
-+
-+
-+#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_CLK_MD (23 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_FRM_MD (24 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DO_MD (25 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DI_MD (26 | GPIO_ALT_FN_1_IN)
-+
-+#define GPIO_NR_HTCUNIVERSAL_I2S_BCK_MD (28 | GPIO_ALT_FN_1_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_I2S_DIN_MD (29 | GPIO_ALT_FN_2_IN)
-+#define GPIO_NR_HTCUNIVERSAL_I2S_DOUT_MD (30 | GPIO_ALT_FN_1_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_I2S_SYNC_MD (31 | GPIO_ALT_FN_1_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_RXD_MD (34 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS_MD (35 | GPIO_ALT_FN_1_IN)
-+
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_TXD_MD (39 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS_MD (41 | GPIO_ALT_FN_2_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_BT_RXD_MD (42 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_BT_TXD_MD (43 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_BT_UART_CTS_MD (44 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_BT_UART_RTS_MD (45 | GPIO_ALT_FN_2_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_SIR_RXD_MD (46 | GPIO_ALT_FN_2_IN)
-+#define GPIO_NR_HTCUNIVERSAL_SIR_TXD_MD (47 | GPIO_ALT_FN_1_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_POE_N_MD (48 | GPIO_ALT_FN_2_OUT | GPIO_DFLT_HIGH)
-+#define GPIO_NR_HTCUNIVERSAL_PWE_N_MD (49 | GPIO_ALT_FN_2_OUT | GPIO_DFLT_HIGH)
-+
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN0_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN0 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN1_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN1 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN2_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN2 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN3_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN3 | GPIO_ALT_FN_3_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN4_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN4 | GPIO_ALT_FN_2_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN5_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN5 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN6_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN6 | GPIO_ALT_FN_1_IN)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKIN7_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN7 | GPIO_ALT_FN_3_IN)
-+
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT0_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT0 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT1_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT1 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT2_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT2 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT3_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT3 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT4_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT4 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT5_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT5 | GPIO_ALT_FN_2_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT6_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT6 | GPIO_ALT_FN_1_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT7_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT7 | GPIO_ALT_FN_1_OUT)
-+
-+
-+#define GPIO_NR_HTCUNIVERSAL_I2S_SYSCLK_MD (113 | GPIO_ALT_FN_1_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_PWM1OUT_MD (115 | GPIO_ALT_FN_3_OUT)
-+
-+#define GPIO_NR_HTCUNIVERSAL_I2C_SCL_MD (117 | GPIO_ALT_FN_1_OUT)
-+#define GPIO_NR_HTCUNIVERSAL_I2C_SDA_MD (118 | GPIO_ALT_FN_1_OUT)
-+
-+#endif /* _HTCUNIVERSAL_GPIO_H */
-Index: linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-init.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal-init.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,14 @@
-+/*
-+ * include/asm/arm/arch-pxa/htcuniversal-init.h
-+ * Copyright (c) 2004 SDG Systems, LLC
-+ */
-+
-+#ifndef _HTCUNIVERSAL_INIT_H_
-+#define _HTCUNIVERSAL_INIT_H_
-+
-+/* htcuniversal initialization data should be found here
-+ * See -init.h files from other devices for details
-+ */
-+
-+#endif /* _HTCUNIVERSAL_INIT_H_ */
-+
-Index: linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/htcuniversal.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,3 @@
-+#include <asm/arch/irqs.h>
-+
-+#define HTCUNIVERSAL_ASIC3_IRQ_BASE IRQ_BOARD_START
-Index: linux-2.6.22/include/asm-arm/arch-pxa/pxa-pm_ll.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/pxa-pm_ll.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,6 @@
-+struct pxa_ll_pm_ops {
-+ void (*suspend)(unsigned long);
-+ void (*resume)(void);
-+};
-+
-+extern struct pxa_ll_pm_ops *pxa_pm_set_ll_ops(struct pxa_ll_pm_ops *new_ops);
-Index: linux-2.6.22/include/asm-arm/arch-pxa/sharpsl.h
-===================================================================
---- linux-2.6.22.orig/include/asm-arm/arch-pxa/sharpsl.h 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/include/asm-arm/arch-pxa/sharpsl.h 2007-09-11 12:53:37.000000000 +0200
-@@ -25,12 +25,6 @@
- /*
- * SharpSL Backlight
- */
--struct corgibl_machinfo {
-- int max_intensity;
-- int default_intensity;
-- int limit_mask;
-- void (*set_bl_intensity)(int intensity);
--};
- extern void corgibl_limit_intensity(int limit);
-
-
-Index: linux-2.6.22/include/asm-arm/hardware/asic3_keys.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/hardware/asic3_keys.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,18 @@
-+#include <linux/input.h>
-+
-+struct asic3_keys_button {
-+ /* Configuration parameters */
-+ int keycode;
-+ int gpio;
-+ int active_low;
-+ char *desc;
-+ int type;
-+ /* Internal state vars - add below */
-+};
-+
-+struct asic3_keys_platform_data {
-+ struct asic3_keys_button *buttons;
-+ int nbuttons;
-+ struct input_dev *input;
-+ struct device *asic3_dev;
-+};
-Index: linux-2.6.22/include/asm-arm/hardware/asic3_leds.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/hardware/asic3_leds.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,34 @@
-+/*
-+ * LEDs support for HTC ASIC3 devices.
-+ *
-+ * Copyright (c) 2006 Anton Vorontsov <cbou@mail.ru>
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+
-+struct asic3_leds_machinfo;
-+
-+struct asic3_led {
-+ struct led_classdev led_cdev;
-+ int hw_num; /* Number of "hardware-accelerated" led */
-+ int gpio_num; /* Number of GPIO if hw_num == -1 */
-+ struct asic3_leds_machinfo *machinfo;
-+};
-+
-+struct asic3_leds_machinfo {
-+ int num_leds;
-+ struct asic3_led *leds;
-+ struct platform_device *asic3_pdev;
-+};
-+
-+extern int asic3_leds_register(void);
-+extern void asic3_leds_unregister(void);
-+
-Index: linux-2.6.22/include/asm-arm/hardware/ipaq-asic3.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/hardware/ipaq-asic3.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,602 @@
-+/*
-+ *
-+ * Definitions for the HTC ASIC3 chip found in several handheld devices
-+ *
-+ * Copyright 2001 Compaq Computer Corporation.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
-+ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
-+ * FITNESS FOR ANY PARTICULAR PURPOSE.
-+ *
-+ * Author: Andrew Christian
-+ *
-+ */
-+
-+#ifndef IPAQ_ASIC3_H
-+#define IPAQ_ASIC3_H
-+
-+/****************************************************/
-+/* IPAQ, ASIC #3, replaces ASIC #1 */
-+
-+#define IPAQ_ASIC3_OFFSET(x,y) (_IPAQ_ASIC3_ ## x ## _Base + _IPAQ_ASIC3_ ## x ## _ ## y)
-+#define IPAQ_ASIC3_GPIO_OFFSET(x,y) (_IPAQ_ASIC3_GPIO_ ## x ## _Base + _IPAQ_ASIC3_GPIO_ ## y)
-+
-+
-+/* All offsets below are specified with the following address bus shift */
-+#define ASIC3_DEFAULT_ADDR_SHIFT 2
-+
-+#define _IPAQ_ASIC3_GPIO_A_Base 0x0000
-+#define _IPAQ_ASIC3_GPIO_B_Base 0x0100
-+#define _IPAQ_ASIC3_GPIO_C_Base 0x0200
-+#define _IPAQ_ASIC3_GPIO_D_Base 0x0300
-+
-+#define _IPAQ_ASIC3_GPIO_Mask 0x00 /* R/W 0:don't mask, 1:mask interrupt */
-+#define _IPAQ_ASIC3_GPIO_Direction 0x04 /* R/W 0:input, 1:output */
-+#define _IPAQ_ASIC3_GPIO_Out 0x08 /* R/W 0:output low, 1:output high */
-+#define _IPAQ_ASIC3_GPIO_TriggerType 0x0c /* R/W 0:level, 1:edge */
-+#define _IPAQ_ASIC3_GPIO_EdgeTrigger 0x10 /* R/W 0:falling, 1:rising */
-+#define _IPAQ_ASIC3_GPIO_LevelTrigger 0x14 /* R/W 0:low, 1:high level detect */
-+#define _IPAQ_ASIC3_GPIO_SleepMask 0x18 /* R/W 0:don't mask, 1:mask trigger in sleep mode */
-+#define _IPAQ_ASIC3_GPIO_SleepOut 0x1c /* R/W level 0:low, 1:high in sleep mode */
-+#define _IPAQ_ASIC3_GPIO_BattFaultOut 0x20 /* R/W level 0:low, 1:high in batt_fault */
-+#define _IPAQ_ASIC3_GPIO_IntStatus 0x24 /* R/W 0:none, 1:detect */
-+#define _IPAQ_ASIC3_GPIO_AltFunction 0x28 /* R/W 0:normal control 1:LED register control */
-+#define _IPAQ_ASIC3_GPIO_SleepConf 0x2c /* R/W bit 1: autosleep 0: disable gposlpout in normal mode, enable gposlpout in sleep mode */
-+#define _IPAQ_ASIC3_GPIO_Status 0x30 /* R Pin status */
-+
-+#define IPAQ_ASIC3_GPIO_A_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Mask )
-+#define IPAQ_ASIC3_GPIO_A_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Direction )
-+#define IPAQ_ASIC3_GPIO_A_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Out )
-+#define IPAQ_ASIC3_GPIO_A_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, A, TriggerType )
-+#define IPAQ_ASIC3_GPIO_A_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, A, EdgeTrigger )
-+#define IPAQ_ASIC3_GPIO_A_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, A, LevelTrigger )
-+#define IPAQ_ASIC3_GPIO_A_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepMask )
-+#define IPAQ_ASIC3_GPIO_A_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepOut )
-+#define IPAQ_ASIC3_GPIO_A_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, BattFaultOut )
-+#define IPAQ_ASIC3_GPIO_A_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, A, IntStatus )
-+#define IPAQ_ASIC3_GPIO_A_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, A, AltFunction )
-+#define IPAQ_ASIC3_GPIO_A_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepConf )
-+#define IPAQ_ASIC3_GPIO_A_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Status )
-+
-+#define IPAQ_ASIC3_GPIO_B_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Mask )
-+#define IPAQ_ASIC3_GPIO_B_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Direction )
-+#define IPAQ_ASIC3_GPIO_B_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Out )
-+#define IPAQ_ASIC3_GPIO_B_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, B, TriggerType )
-+#define IPAQ_ASIC3_GPIO_B_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, B, EdgeTrigger )
-+#define IPAQ_ASIC3_GPIO_B_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, B, LevelTrigger )
-+#define IPAQ_ASIC3_GPIO_B_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepMask )
-+#define IPAQ_ASIC3_GPIO_B_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepOut )
-+#define IPAQ_ASIC3_GPIO_B_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, BattFaultOut )
-+#define IPAQ_ASIC3_GPIO_B_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, B, IntStatus )
-+#define IPAQ_ASIC3_GPIO_B_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, B, AltFunction )
-+#define IPAQ_ASIC3_GPIO_B_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepConf )
-+#define IPAQ_ASIC3_GPIO_B_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Status )
-+
-+#define IPAQ_ASIC3_GPIO_C_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Mask )
-+#define IPAQ_ASIC3_GPIO_C_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Direction )
-+#define IPAQ_ASIC3_GPIO_C_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Out )
-+#define IPAQ_ASIC3_GPIO_C_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, C, TriggerType )
-+#define IPAQ_ASIC3_GPIO_C_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, C, EdgeTrigger )
-+#define IPAQ_ASIC3_GPIO_C_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, C, LevelTrigger )
-+#define IPAQ_ASIC3_GPIO_C_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepMask )
-+#define IPAQ_ASIC3_GPIO_C_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepOut )
-+#define IPAQ_ASIC3_GPIO_C_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, BattFaultOut )
-+#define IPAQ_ASIC3_GPIO_C_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, C, IntStatus )
-+#define IPAQ_ASIC3_GPIO_C_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, C, AltFunction )
-+#define IPAQ_ASIC3_GPIO_C_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepConf )
-+#define IPAQ_ASIC3_GPIO_C_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Status )
-+
-+#define IPAQ_ASIC3_GPIO_D_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Mask )
-+#define IPAQ_ASIC3_GPIO_D_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Direction )
-+#define IPAQ_ASIC3_GPIO_D_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Out )
-+#define IPAQ_ASIC3_GPIO_D_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, D, TriggerType )
-+#define IPAQ_ASIC3_GPIO_D_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, D, EdgeTrigger )
-+#define IPAQ_ASIC3_GPIO_D_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, D, LevelTrigger )
-+#define IPAQ_ASIC3_GPIO_D_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepMask )
-+#define IPAQ_ASIC3_GPIO_D_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepOut )
-+#define IPAQ_ASIC3_GPIO_D_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, BattFaultOut )
-+#define IPAQ_ASIC3_GPIO_D_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, D, IntStatus )
-+#define IPAQ_ASIC3_GPIO_D_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, D, AltFunction )
-+#define IPAQ_ASIC3_GPIO_D_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepConf )
-+#define IPAQ_ASIC3_GPIO_D_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Status )
-+
-+#define _IPAQ_ASIC3_SPI_Base 0x0400
-+#define _IPAQ_ASIC3_SPI_Control 0x0000
-+#define _IPAQ_ASIC3_SPI_TxData 0x0004
-+#define _IPAQ_ASIC3_SPI_RxData 0x0008
-+#define _IPAQ_ASIC3_SPI_Int 0x000c
-+#define _IPAQ_ASIC3_SPI_Status 0x0010
-+
-+#define IPAQ_ASIC3_SPI_Control(_b) IPAQ_ASIC3( _b, u16, SPI, Control )
-+#define IPAQ_ASIC3_SPI_TxData(_b) IPAQ_ASIC3( _b, u16, SPI, TxData )
-+#define IPAQ_ASIC3_SPI_RxData(_b) IPAQ_ASIC3( _b, u16, SPI, RxData )
-+#define IPAQ_ASIC3_SPI_Int(_b) IPAQ_ASIC3( _b, u16, SPI, Int )
-+#define IPAQ_ASIC3_SPI_Status(_b) IPAQ_ASIC3( _b, u16, SPI, Status )
-+
-+#define SPI_CONTROL_SPR(clk) ((clk) & 0x0f) /* Clock rate */
-+
-+#define _IPAQ_ASIC3_PWM_0_Base 0x0500
-+#define _IPAQ_ASIC3_PWM_1_Base 0x0600
-+#define _IPAQ_ASIC3_PWM_TimeBase 0x0000
-+#define _IPAQ_ASIC3_PWM_PeriodTime 0x0004
-+#define _IPAQ_ASIC3_PWM_DutyTime 0x0008
-+
-+#define IPAQ_ASIC3_PWM_TimeBase(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, TimeBase )
-+#define IPAQ_ASIC3_PWM_PeriodTime(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, PeriodTime )
-+#define IPAQ_ASIC3_PWM_DutyTime(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, DutyTime )
-+
-+#define PWM_TIMEBASE_VALUE(x) ((x)&0xf) /* Low 4 bits sets time base */
-+#define PWM_TIMEBASE_ENABLE (1 << 4) /* Enable clock */
-+
-+#define _IPAQ_ASIC3_LED_0_Base 0x0700
-+#define _IPAQ_ASIC3_LED_1_Base 0x0800
-+#define _IPAQ_ASIC3_LED_2_Base 0x0900
-+#define _IPAQ_ASIC3_LED_TimeBase 0x0000 /* R/W 7 bits */
-+#define _IPAQ_ASIC3_LED_PeriodTime 0x0004 /* R/W 12 bits */
-+#define _IPAQ_ASIC3_LED_DutyTime 0x0008 /* R/W 12 bits */
-+#define _IPAQ_ASIC3_LED_AutoStopCount 0x000c /* R/W 16 bits */
-+
-+#define IPAQ_ASIC3_LED_TimeBase(_b, x) IPAQ_ASIC3_N( _b, u8, LED, x, TimeBase )
-+#define IPAQ_ASIC3_LED_PeriodTime(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, PeriodTime )
-+#define IPAQ_ASIC3_LED_DutyTime(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, DutyTime )
-+#define IPAQ_ASIC3_LED_AutoStopCount(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, AutoStopCount )
-+
-+/* LED TimeBase bits - match ASIC2 */
-+#define LED_TBS 0x0f /* Low 4 bits sets time base, max = 13 */
-+ /* Note: max = 5 on hx4700 */
-+ /* 0: maximum time base */
-+ /* 1: maximum time base / 2 */
-+ /* n: maximum time base / 2^n */
-+
-+#define LED_EN (1 << 4) /* LED ON/OFF 0:off, 1:on */
-+#define LED_AUTOSTOP (1 << 5) /* LED ON/OFF auto stop set 0:disable, 1:enable */
-+#define LED_ALWAYS (1 << 6) /* LED Interrupt Mask 0:No mask, 1:mask */
-+
-+#define _IPAQ_ASIC3_CLOCK_Base 0x0A00
-+#define _IPAQ_ASIC3_CLOCK_CDEX 0x00
-+#define _IPAQ_ASIC3_CLOCK_SEL 0x04
-+
-+#define IPAQ_ASIC3_CLOCK_CDEX(_b) IPAQ_ASIC3( _b, u16, CLOCK, CDEX )
-+#define IPAQ_ASIC3_CLOCK_SEL(_b) IPAQ_ASIC3( _b, u16, CLOCK, SEL )
-+
-+#define CLOCK_CDEX_SOURCE (1 << 0) /* 2 bits */
-+#define CLOCK_CDEX_SOURCE0 (1 << 0)
-+#define CLOCK_CDEX_SOURCE1 (1 << 1)
-+#define CLOCK_CDEX_SPI (1 << 2)
-+#define CLOCK_CDEX_OWM (1 << 3)
-+#define CLOCK_CDEX_PWM0 (1 << 4)
-+#define CLOCK_CDEX_PWM1 (1 << 5)
-+#define CLOCK_CDEX_LED0 (1 << 6)
-+#define CLOCK_CDEX_LED1 (1 << 7)
-+#define CLOCK_CDEX_LED2 (1 << 8)
-+
-+#define CLOCK_CDEX_SD_HOST (1 << 9) /* R/W: SD host clock source 24.576M/12.288M */
-+#define CLOCK_CDEX_SD_BUS (1 << 10) /* R/W: SD bus clock source control 24.576M/12.288M */
-+#define CLOCK_CDEX_SMBUS (1 << 11)
-+#define CLOCK_CDEX_CONTROL_CX (1 << 12)
-+
-+#define CLOCK_CDEX_EX0 (1 << 13) /* R/W: 32.768 kHz crystal */
-+#define CLOCK_CDEX_EX1 (1 << 14) /* R/W: 24.576 MHz crystal */
-+
-+#define CLOCK_SEL_SD_HCLK_SEL (1 << 0) /* R/W: SDIO host clock select - 1: 24.576 Mhz, 0: 12.288 MHz */
-+#define CLOCK_SEL_SD_BCLK_SEL (1 << 1) /* R/W: SDIO bus clock select - 1: 24.576 MHz, 0: 12.288 MHz */
-+#define CLOCK_SEL_CX (1 << 2) /* R/W: INT clock source control (32.768 kHz) */
-+
-+
-+#define _IPAQ_ASIC3_INTR_Base 0x0B00
-+
-+#define _IPAQ_ASIC3_INTR_IntMask 0x00 /* Interrupt mask control */
-+#define _IPAQ_ASIC3_INTR_PIntStat 0x04 /* Peripheral interrupt status */
-+#define _IPAQ_ASIC3_INTR_IntCPS 0x08 /* Interrupt timer clock pre-scale */
-+#define _IPAQ_ASIC3_INTR_IntTBS 0x0c /* Interrupt timer set */
-+
-+#define IPAQ_ASIC3_INTR_IntMask(_b) IPAQ_ASIC3( _b, u8, INTR, IntMask )
-+#define IPAQ_ASIC3_INTR_PIntStat(_b) IPAQ_ASIC3( _b, u8, INTR, PIntStat )
-+#define IPAQ_ASIC3_INTR_IntCPS(_b) IPAQ_ASIC3( _b, u8, INTR, IntCPS )
-+#define IPAQ_ASIC3_INTR_IntTBS(_b) IPAQ_ASIC3( _b, u16, INTR, IntTBS )
-+
-+#define ASIC3_INTMASK_GINTMASK (1 << 0) /* Global interrupt mask 1:enable */
-+#define ASIC3_INTMASK_GINTEL (1 << 1) /* 1: rising edge, 0: hi level */
-+#define ASIC3_INTMASK_MASK0 (1 << 2)
-+#define ASIC3_INTMASK_MASK1 (1 << 3)
-+#define ASIC3_INTMASK_MASK2 (1 << 4)
-+#define ASIC3_INTMASK_MASK3 (1 << 5)
-+#define ASIC3_INTMASK_MASK4 (1 << 6)
-+#define ASIC3_INTMASK_MASK5 (1 << 7)
-+
-+#define ASIC3_INTR_PERIPHERAL_A (1 << 0)
-+#define ASIC3_INTR_PERIPHERAL_B (1 << 1)
-+#define ASIC3_INTR_PERIPHERAL_C (1 << 2)
-+#define ASIC3_INTR_PERIPHERAL_D (1 << 3)
-+#define ASIC3_INTR_LED0 (1 << 4)
-+#define ASIC3_INTR_LED1 (1 << 5)
-+#define ASIC3_INTR_LED2 (1 << 6)
-+#define ASIC3_INTR_SPI (1 << 7)
-+#define ASIC3_INTR_SMBUS (1 << 8)
-+#define ASIC3_INTR_OWM (1 << 9)
-+
-+#define ASIC3_INTR_CPS(x) ((x)&0x0f) /* 4 bits, max 14 */
-+#define ASIC3_INTR_CPS_SET ( 1 << 4 ) /* Time base enable */
-+
-+
-+/* Basic control of the SD ASIC */
-+#define _IPAQ_ASIC3_SDHWCTRL_Base 0x0E00
-+
-+#define _IPAQ_ASIC3_SDHWCTRL_SDConf 0x00
-+#define IPAQ_ASIC3_SDHWCTRL_SDConf(_b) IPAQ_ASIC3( _b, u8, SDHWCTRL, SDConf )
-+
-+#define ASIC3_SDHWCTRL_SUSPEND (1 << 0) /* 1=suspend all SD operations */
-+#define ASIC3_SDHWCTRL_CLKSEL (1 << 1) /* 1=SDICK, 0=HCLK */
-+#define ASIC3_SDHWCTRL_PCLR (1 << 2) /* All registers of SDIO cleared */
-+#define ASIC3_SDHWCTRL_LEVCD (1 << 3) /* Level of SD card detection: 1:high, 0:low */
-+#define ASIC3_SDHWCTRL_LEVWP (1 << 4) /* Level of SD card write protection: 1=low, 0=high */
-+#define ASIC3_SDHWCTRL_SDLED (1 << 5) /* SD card LED signal 1=enable, 0=disable */
-+#define ASIC3_SDHWCTRL_SDPWR (1 << 6) /* SD card power supply control 1=enable */
-+
-+
-+/* This is a pointer to an array of 12 u32 values - but only the lower 2 bytes matter */
-+/* Use it as "IPAQ_ASIC3_HWPROTECT_ARRAY[x]" */
-+
-+#define _IPAQ_ASIC3_HWPROTECT_Base 0x1000
-+#define IPAQ_ASIC3_HWPROTECT_ARRAY ((volatile u32*)(_IPAQ_ASIC3_Base + _IPAQ_ASIC3_HWPROTECT_Base))
-+#define HWPROTECT_ARRAY_LEN 12
-+#define HWPROTECT_ARRAY_VALUES {0x4854,0x432d,0x5344,0x494f,0x2050,0x2f4e,0x3a33,0x3048,0x3830,0x3032,0x382d,0x3030}
-+
-+
-+#define _IPAQ_ASIC3_EXTCF_Base 0x1100
-+
-+#define _IPAQ_ASIC3_EXTCF_Select 0x00
-+#define _IPAQ_ASIC3_EXTCF_Reset 0x04
-+
-+#define IPAQ_ASIC3_EXTCF_Select(_b) IPAQ_ASIC3( _b, u16, EXTCF, Select )
-+#define IPAQ_ASIC3_EXTCF_Reset(_b) IPAQ_ASIC3( _b, u16, EXTCF, Reset )
-+
-+#define ASIC3_EXTCF_SMOD0 (1 << 0) /* slot number of mode 0 */
-+#define ASIC3_EXTCF_SMOD1 (1 << 1) /* slot number of mode 1 */
-+#define ASIC3_EXTCF_SMOD2 (1 << 2) /* slot number of mode 2 */
-+#define ASIC3_EXTCF_OWM_EN (1 << 4) /* enable onewire module */
-+#define ASIC3_EXTCF_OWM_SMB (1 << 5) /* OWM bus selection */
-+#define ASIC3_EXTCF_OWM_RESET (1 << 6) /* undocumented, used by OWM and CF */
-+#define ASIC3_EXTCF_CF0_SLEEP_MODE (1 << 7) /* CF0 sleep state control */
-+#define ASIC3_EXTCF_CF1_SLEEP_MODE (1 << 8) /* CF1 sleep state control */
-+#define ASIC3_EXTCF_CF0_PWAIT_EN (1 << 10) /* CF0 PWAIT_n control */
-+#define ASIC3_EXTCF_CF1_PWAIT_EN (1 << 11) /* CF1 PWAIT_n control */
-+#define ASIC3_EXTCF_CF0_BUF_EN (1 << 12) /* CF0 buffer control */
-+#define ASIC3_EXTCF_CF1_BUF_EN (1 << 13) /* CF1 buffer control */
-+#define ASIC3_EXTCF_SD_MEM_ENABLE (1 << 14)
-+#define ASIC3_EXTCF_CF_SLEEP (1 << 15) /* CF sleep mode control */
-+
-+/*****************************************************************************
-+ * The Onewire interface registers
-+ *
-+ * OWM_CMD
-+ * OWM_DAT
-+ * OWM_INTR
-+ * OWM_INTEN
-+ * OWM_CLKDIV
-+ *
-+ *****************************************************************************/
-+
-+#define _IPAQ_ASIC3_OWM_Base 0xC00
-+
-+#define _IPAQ_ASIC3_OWM_CMD 0x00
-+#define _IPAQ_ASIC3_OWM_DAT 0x04
-+#define _IPAQ_ASIC3_OWM_INTR 0x08
-+#define _IPAQ_ASIC3_OWM_INTEN 0x0C
-+#define _IPAQ_ASIC3_OWM_CLKDIV 0x10
-+
-+#define ASIC3_OWM_CMD_ONEWR (1 << 0)
-+#define ASIC3_OWM_CMD_SRA (1 << 1)
-+#define ASIC3_OWM_CMD_DQO (1 << 2)
-+#define ASIC3_OWM_CMD_DQI (1 << 3)
-+
-+#define ASIC3_OWM_INTR_PD (1 << 0)
-+#define ASIC3_OWM_INTR_PDR (1 << 1)
-+#define ASIC3_OWM_INTR_TBE (1 << 2)
-+#define ASIC3_OWM_INTR_TEMP (1 << 3)
-+#define ASIC3_OWM_INTR_RBF (1 << 4)
-+
-+#define ASIC3_OWM_INTEN_EPD (1 << 0)
-+#define ASIC3_OWM_INTEN_IAS (1 << 1)
-+#define ASIC3_OWM_INTEN_ETBE (1 << 2)
-+#define ASIC3_OWM_INTEN_ETMT (1 << 3)
-+#define ASIC3_OWM_INTEN_ERBF (1 << 4)
-+
-+#define ASIC3_OWM_CLKDIV_PRE (3 << 0) /* two bits wide at bit position 0 */
-+#define ASIC3_OWM_CLKDIV_DIV (7 << 2) /* 3 bits wide at bit position 2 */
-+
-+
-+/*****************************************************************************
-+ * The SD configuration registers are at a completely different location
-+ * in memory. They are divided into three sets of registers:
-+ *
-+ * SD_CONFIG Core configuration register
-+ * SD_CTRL Control registers for SD operations
-+ * SDIO_CTRL Control registers for SDIO operations
-+ *
-+ *****************************************************************************/
-+
-+#define IPAQ_ASIC3_SD_CONFIG(_b, s,x) \
-+ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SD_CONFIG_Base + (_IPAQ_ASIC3_SD_CONFIG_ ## x))))
-+
-+#define _IPAQ_ASIC3_SD_CONFIG_Base 0x0400 // Assumes 32 bit addressing
-+
-+#define _IPAQ_ASIC3_SD_CONFIG_Command 0x08 /* R/W: Command */
-+#define _IPAQ_ASIC3_SD_CONFIG_Addr0 0x20 /* [9:31] SD Control Register Base Address */
-+#define _IPAQ_ASIC3_SD_CONFIG_Addr1 0x24 /* [9:31] SD Control Register Base Address */
-+#define _IPAQ_ASIC3_SD_CONFIG_IntPin 0x78 /* R/O: interrupt assigned to pin */
-+#define _IPAQ_ASIC3_SD_CONFIG_ClkStop 0x80 /* Set to 0x1f to clock SD controller, 0 otherwise. */
-+ /* at 0x82 - Gated Clock Control */
-+#define _IPAQ_ASIC3_SD_CONFIG_ClockMode 0x84 /* Control clock of SD controller */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_PinStatus 0x88 /* R/0: read status of SD pins */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Power1 0x90 /* Power1 - manual power control */
-+ /* Power2 is at 0x92 - auto power up after card inserted */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Power3 0x94 /* auto power down when card removed */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_CardDetect 0x98 /* */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Slot 0xA0 /* R/O: define support slot number */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk1 0x1E0 /* Could be used for gated clock (don't use) */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk2 0x1E2 /* Could be used for gated clock (don't use) */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_GPIO_OutAndEnable 0x1E8 /* GPIO Output Reg. , at 0x1EA - GPIO Output Enable Reg. */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_GPIO_Status 0x1EC /* GPIO Status Reg. */
-+#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk3 0x1F0 /* Bit 1: double buffer/single buffer */
-+
-+#define IPAQ_ASIC3_SD_CONFIG_Command(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Command )
-+#define IPAQ_ASIC3_SD_CONFIG_Addr0(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Addr0 )
-+#define IPAQ_ASIC3_SD_CONFIG_Addr1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Addr1 )
-+#define IPAQ_ASIC3_SD_CONFIG_IntPin(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, IntPin )
-+#define IPAQ_ASIC3_SD_CONFIG_ClkStop(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, ClkStop )
-+#define IPAQ_ASIC3_SD_CONFIG_ClockMode(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, ClockMode )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_PinStatus(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_PinStatus )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_Power1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Power1 )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_Power3(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Power3 )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_CardDetect(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_CardDetect )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_Slot(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Slot )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_ExtGateClk1 )
-+#define IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk3(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_ExtGateClk3 )
-+
-+#define SD_CONFIG_
-+
-+#define SD_CONFIG_COMMAND_MAE (1<<1) /* Memory access enable (set to 1 to access SD Controller) */
-+
-+#define SD_CONFIG_CLK_ENABLE_ALL 0x1f
-+
-+#define SD_CONFIG_POWER1_PC_33V 0x0200 /* Set for 3.3 volts */
-+#define SD_CONFIG_POWER1_PC_OFF 0x0000 /* Turn off power */
-+
-+#define SD_CONFIG_CARDDETECTMODE_CLK ((x)&0x3) /* two bits - number of cycles for card detection */
-+
-+
-+#define _IPAQ_ASIC3_SD_CTRL_Base 0x1000
-+
-+#define IPAQ_ASIC3_SD(_b, s,x) \
-+ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SD_CTRL_Base + (_IPAQ_ASIC3_SD_CTRL_ ## x))))
-+
-+#define _IPAQ_ASIC3_SD_CTRL_Cmd 0x00
-+#define _IPAQ_ASIC3_SD_CTRL_Arg0 0x08
-+#define _IPAQ_ASIC3_SD_CTRL_Arg1 0x0C
-+#define _IPAQ_ASIC3_SD_CTRL_StopInternal 0x10
-+#define _IPAQ_ASIC3_SD_CTRL_TransferSectorCount 0x14
-+#define _IPAQ_ASIC3_SD_CTRL_Response0 0x18
-+#define _IPAQ_ASIC3_SD_CTRL_Response1 0x1C
-+#define _IPAQ_ASIC3_SD_CTRL_Response2 0x20
-+#define _IPAQ_ASIC3_SD_CTRL_Response3 0x24
-+#define _IPAQ_ASIC3_SD_CTRL_Response4 0x28
-+#define _IPAQ_ASIC3_SD_CTRL_Response5 0x2C
-+#define _IPAQ_ASIC3_SD_CTRL_Response6 0x30
-+#define _IPAQ_ASIC3_SD_CTRL_Response7 0x34
-+#define _IPAQ_ASIC3_SD_CTRL_CardStatus 0x38
-+#define _IPAQ_ASIC3_SD_CTRL_BufferCtrl 0x3C
-+#define _IPAQ_ASIC3_SD_CTRL_IntMaskCard 0x40
-+#define _IPAQ_ASIC3_SD_CTRL_IntMaskBuffer 0x44
-+#define _IPAQ_ASIC3_SD_CTRL_CardClockCtrl 0x48
-+#define _IPAQ_ASIC3_SD_CTRL_MemCardXferDataLen 0x4C
-+#define _IPAQ_ASIC3_SD_CTRL_MemCardOptionSetup 0x50
-+#define _IPAQ_ASIC3_SD_CTRL_ErrorStatus0 0x58
-+#define _IPAQ_ASIC3_SD_CTRL_ErrorStatus1 0x5C
-+#define _IPAQ_ASIC3_SD_CTRL_DataPort 0x60
-+#define _IPAQ_ASIC3_SD_CTRL_TransactionCtrl 0x68
-+#define _IPAQ_ASIC3_SD_CTRL_SoftwareReset 0x1C0
-+
-+#define IPAQ_ASIC3_SD_CTRL_Cmd(_b) IPAQ_ASIC3_SD( _b, u16, Cmd ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Arg0(_b) IPAQ_ASIC3_SD( _b, u16, Arg0 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Arg1(_b) IPAQ_ASIC3_SD( _b, u16, Arg1 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_StopInternal(_b) IPAQ_ASIC3_SD( _b, u16, StopInternal ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_TransferSectorCount(_b) IPAQ_ASIC3_SD( _b, u16, TransferSectorCount ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response0(_b) IPAQ_ASIC3_SD( _b, u16, Response0 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response1(_b) IPAQ_ASIC3_SD( _b, u16, Response1 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response2(_b) IPAQ_ASIC3_SD( _b, u16, Response2 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response3(_b) IPAQ_ASIC3_SD( _b, u16, Response3 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response4(_b) IPAQ_ASIC3_SD( _b, u16, Response4 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response5(_b) IPAQ_ASIC3_SD( _b, u16, Response5 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response6(_b) IPAQ_ASIC3_SD( _b, u16, Response6 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_Response7(_b) IPAQ_ASIC3_SD( _b, u16, Response7 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_CardStatus(_b) IPAQ_ASIC3_SD( _b, u16, CardStatus ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_BufferCtrl(_b) IPAQ_ASIC3_SD( _b, u16, BufferCtrl ) /* and error status*/
-+#define IPAQ_ASIC3_SD_CTRL_IntMaskCard(_b) IPAQ_ASIC3_SD( _b, u16, IntMaskCard ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_IntMaskBuffer(_b) IPAQ_ASIC3_SD( _b, u16, IntMaskBuffer ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_CardClockCtrl(_b) IPAQ_ASIC3_SD( _b, u16, CardClockCtrl ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_MemCardXferDataLen(_b) IPAQ_ASIC3_SD( _b, u16, MemCardXferDataLen ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_MemCardOptionSetup(_b) IPAQ_ASIC3_SD( _b, u16, MemCardOptionSetup ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_ErrorStatus0(_b) IPAQ_ASIC3_SD( _b, u16, ErrorStatus0 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_ErrorStatus1(_b) IPAQ_ASIC3_SD( _b, u16, ErrorStatus1 ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_DataPort(_b) IPAQ_ASIC3_SD( _b, u16, DataPort ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_TransactionCtrl(_b) IPAQ_ASIC3_SD( _b, u16, TransactionCtrl ) /* */
-+#define IPAQ_ASIC3_SD_CTRL_SoftwareReset(_b) IPAQ_ASIC3_SD( _b, u16, SoftwareReset ) /* */
-+
-+#define SD_CTRL_SOFTWARE_RESET_CLEAR (1<<0)
-+
-+#define SD_CTRL_TRANSACTIONCONTROL_SET (1<<8) // 0x0100
-+
-+#define SD_CTRL_CARDCLOCKCONTROL_FOR_SD_CARD (1<<15)// 0x8000
-+#define SD_CTRL_CARDCLOCKCONTROL_ENABLE_CLOCK (1<<8) // 0x0100
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_512 (1<<7) // 0x0080
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_256 (1<<6) // 0x0040
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_128 (1<<5) // 0x0020
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_64 (1<<4) // 0x0010
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_32 (1<<3) // 0x0008
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_16 (1<<2) // 0x0004
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_8 (1<<1) // 0x0002
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_4 (1<<0) // 0x0001
-+#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_2 (0<<0) // 0x0000
-+
-+#define MEM_CARD_OPTION_REQUIRED 0x000e
-+#define MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(x) (((x)&0x0f)<<4) /* Four bits */
-+#define MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT (1<<14) // 0x4000
-+#define MEM_CARD_OPTION_DATA_XFR_WIDTH_1 (1<<15) // 0x8000
-+#define MEM_CARD_OPTION_DATA_XFR_WIDTH_4 (0<<15) //~0x8000
-+
-+#define SD_CTRL_COMMAND_INDEX(x) ((x)&0x3f) /* 0=CMD0, 1=CMD1, ..., 63=CMD63 */
-+#define SD_CTRL_COMMAND_TYPE_CMD (0 << 6)
-+#define SD_CTRL_COMMAND_TYPE_ACMD (1 << 6)
-+#define SD_CTRL_COMMAND_TYPE_AUTHENTICATION (2 << 6)
-+#define SD_CTRL_COMMAND_RESPONSE_TYPE_NORMAL (0 << 8)
-+#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1 (4 << 8)
-+#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1B (5 << 8)
-+#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R2 (6 << 8)
-+#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R3 (7 << 8)
-+#define SD_CTRL_COMMAND_DATA_PRESENT (1 << 11)
-+#define SD_CTRL_COMMAND_TRANSFER_READ (1 << 12)
-+#define SD_CTRL_COMMAND_TRANSFER_WRITE (0 << 12)
-+#define SD_CTRL_COMMAND_MULTI_BLOCK (1 << 13)
-+#define SD_CTRL_COMMAND_SECURITY_CMD (1 << 14)
-+
-+#define SD_CTRL_STOP_INTERNAL_ISSSUE_CMD12 (1 << 0)
-+#define SD_CTRL_STOP_INTERNAL_AUTO_ISSUE_CMD12 (1 << 8)
-+
-+#define SD_CTRL_CARDSTATUS_RESPONSE_END (1 << 0)
-+#define SD_CTRL_CARDSTATUS_RW_END (1 << 2)
-+#define SD_CTRL_CARDSTATUS_CARD_REMOVED_0 (1 << 3)
-+#define SD_CTRL_CARDSTATUS_CARD_INSERTED_0 (1 << 4)
-+#define SD_CTRL_CARDSTATUS_SIGNAL_STATE_PRESENT_0 (1 << 5)
-+#define SD_CTRL_CARDSTATUS_WRITE_PROTECT (1 << 7)
-+#define SD_CTRL_CARDSTATUS_CARD_REMOVED_3 (1 << 8)
-+#define SD_CTRL_CARDSTATUS_CARD_INSERTED_3 (1 << 9)
-+#define SD_CTRL_CARDSTATUS_SIGNAL_STATE_PRESENT_3 (1 << 10)
-+
-+#define SD_CTRL_BUFFERSTATUS_CMD_INDEX_ERROR (1 << 0) // 0x0001
-+#define SD_CTRL_BUFFERSTATUS_CRC_ERROR (1 << 1) // 0x0002
-+#define SD_CTRL_BUFFERSTATUS_STOP_BIT_END_ERROR (1 << 2) // 0x0004
-+#define SD_CTRL_BUFFERSTATUS_DATA_TIMEOUT (1 << 3) // 0x0008
-+#define SD_CTRL_BUFFERSTATUS_BUFFER_OVERFLOW (1 << 4) // 0x0010
-+#define SD_CTRL_BUFFERSTATUS_BUFFER_UNDERFLOW (1 << 5) // 0x0020
-+#define SD_CTRL_BUFFERSTATUS_CMD_TIMEOUT (1 << 6) // 0x0040
-+#define SD_CTRL_BUFFERSTATUS_UNK7 (1 << 7) // 0x0080
-+#define SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE (1 << 8) // 0x0100
-+#define SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE (1 << 9) // 0x0200
-+#define SD_CTRL_BUFFERSTATUS_ILLEGAL_FUNCTION (1 << 13)// 0x2000
-+#define SD_CTRL_BUFFERSTATUS_CMD_BUSY (1 << 14)// 0x4000
-+#define SD_CTRL_BUFFERSTATUS_ILLEGAL_ACCESS (1 << 15)// 0x8000
-+
-+#define SD_CTRL_INTMASKCARD_RESPONSE_END (1 << 0) // 0x0001
-+#define SD_CTRL_INTMASKCARD_RW_END (1 << 2) // 0x0004
-+#define SD_CTRL_INTMASKCARD_CARD_REMOVED_0 (1 << 3) // 0x0008
-+#define SD_CTRL_INTMASKCARD_CARD_INSERTED_0 (1 << 4) // 0x0010
-+#define SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_0 (1 << 5) // 0x0020
-+#define SD_CTRL_INTMASKCARD_UNK6 (1 << 6) // 0x0040
-+#define SD_CTRL_INTMASKCARD_WRITE_PROTECT (1 << 7) // 0x0080
-+#define SD_CTRL_INTMASKCARD_CARD_REMOVED_3 (1 << 8) // 0x0100
-+#define SD_CTRL_INTMASKCARD_CARD_INSERTED_3 (1 << 9) // 0x0200
-+#define SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_3 (1 << 10)// 0x0400
-+
-+#define SD_CTRL_INTMASKBUFFER_CMD_INDEX_ERROR (1 << 0) // 0x0001
-+#define SD_CTRL_INTMASKBUFFER_CRC_ERROR (1 << 1) // 0x0002
-+#define SD_CTRL_INTMASKBUFFER_STOP_BIT_END_ERROR (1 << 2) // 0x0004
-+#define SD_CTRL_INTMASKBUFFER_DATA_TIMEOUT (1 << 3) // 0x0008
-+#define SD_CTRL_INTMASKBUFFER_BUFFER_OVERFLOW (1 << 4) // 0x0010
-+#define SD_CTRL_INTMASKBUFFER_BUFFER_UNDERFLOW (1 << 5) // 0x0020
-+#define SD_CTRL_INTMASKBUFFER_CMD_TIMEOUT (1 << 6) // 0x0040
-+#define SD_CTRL_INTMASKBUFFER_UNK7 (1 << 7) // 0x0080
-+#define SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE (1 << 8) // 0x0100
-+#define SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE (1 << 9) // 0x0200
-+#define SD_CTRL_INTMASKBUFFER_ILLEGAL_FUNCTION (1 << 13)// 0x2000
-+#define SD_CTRL_INTMASKBUFFER_CMD_BUSY (1 << 14)// 0x4000
-+#define SD_CTRL_INTMASKBUFFER_ILLEGAL_ACCESS (1 << 15)// 0x8000
-+
-+#define SD_CTRL_DETAIL0_RESPONSE_CMD_ERROR (1 << 0) // 0x0001
-+#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_RESPONSE_NON_CMD12 (1 << 2) // 0x0004
-+#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_RESPONSE_CMD12 (1 << 3) // 0x0008
-+#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_READ_DATA (1 << 4) // 0x0010
-+#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_WRITE_CRC_STATUS (1 << 5) // 0x0020
-+#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_RESPONSE_NON_CMD12 (1 << 8) // 0x0100
-+#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_RESPONSE_CMD12 (1 << 9) // 0x0200
-+#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_READ_DATA (1 << 10)// 0x0400
-+#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_WRITE_CMD (1 << 11)// 0x0800
-+
-+#define SD_CTRL_DETAIL1_NO_CMD_RESPONSE (1 << 0) // 0x0001
-+#define SD_CTRL_DETAIL1_TIMEOUT_READ_DATA (1 << 4) // 0x0010
-+#define SD_CTRL_DETAIL1_TIMEOUT_CRS_STATUS (1 << 5) // 0x0020
-+#define SD_CTRL_DETAIL1_TIMEOUT_CRC_BUSY (1 << 6) // 0x0040
-+
-+#define _IPAQ_ASIC3_SDIO_CTRL_Base 0x1200
-+
-+#define IPAQ_ASIC3_SDIO(_b, s,x) \
-+ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SDIO_CTRL_Base + (_IPAQ_ASIC3_SDIO_CTRL_ ## x))))
-+
-+#define _IPAQ_ASIC3_SDIO_CTRL_Cmd 0x00
-+#define _IPAQ_ASIC3_SDIO_CTRL_CardPortSel 0x04
-+#define _IPAQ_ASIC3_SDIO_CTRL_Arg0 0x08
-+#define _IPAQ_ASIC3_SDIO_CTRL_Arg1 0x0C
-+#define _IPAQ_ASIC3_SDIO_CTRL_TransferBlockCount 0x14
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response0 0x18
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response1 0x1C
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response2 0x20
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response3 0x24
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response4 0x28
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response5 0x2C
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response6 0x30
-+#define _IPAQ_ASIC3_SDIO_CTRL_Response7 0x34
-+#define _IPAQ_ASIC3_SDIO_CTRL_CardStatus 0x38
-+#define _IPAQ_ASIC3_SDIO_CTRL_BufferCtrl 0x3C
-+#define _IPAQ_ASIC3_SDIO_CTRL_IntMaskCard 0x40
-+#define _IPAQ_ASIC3_SDIO_CTRL_IntMaskBuffer 0x44
-+#define _IPAQ_ASIC3_SDIO_CTRL_CardXferDataLen 0x4C
-+#define _IPAQ_ASIC3_SDIO_CTRL_CardOptionSetup 0x50
-+#define _IPAQ_ASIC3_SDIO_CTRL_ErrorStatus0 0x54
-+#define _IPAQ_ASIC3_SDIO_CTRL_ErrorStatus1 0x58
-+#define _IPAQ_ASIC3_SDIO_CTRL_DataPort 0x60
-+#define _IPAQ_ASIC3_SDIO_CTRL_TransactionCtrl 0x68
-+#define _IPAQ_ASIC3_SDIO_CTRL_CardIntCtrl 0x6C
-+#define _IPAQ_ASIC3_SDIO_CTRL_ClocknWaitCtrl 0x70
-+#define _IPAQ_ASIC3_SDIO_CTRL_HostInformation 0x74
-+#define _IPAQ_ASIC3_SDIO_CTRL_ErrorCtrl 0x78
-+#define _IPAQ_ASIC3_SDIO_CTRL_LEDCtrl 0x7C
-+#define _IPAQ_ASIC3_SDIO_CTRL_SoftwareReset 0x1C0
-+
-+#define IPAQ_ASIC3_SDIO_CTRL_Cmd(_b) IPAQ_ASIC3_SDIO( _b, u16, Cmd ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_CardPortSel(_b) IPAQ_ASIC3_SDIO( _b, u16, CardPortSel ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Arg0(_b) IPAQ_ASIC3_SDIO( _b, u16, Arg0 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Arg1(_b) IPAQ_ASIC3_SDIO( _b, u16, Arg1 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_TransferBlockCount(_b) IPAQ_ASIC3_SDIO( _b, u16, TransferBlockCount ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response0(_b) IPAQ_ASIC3_SDIO( _b, u16, Response0 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response1(_b) IPAQ_ASIC3_SDIO( _b, u16, Response1 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response2(_b) IPAQ_ASIC3_SDIO( _b, u16, Response2 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response3(_b) IPAQ_ASIC3_SDIO( _b, u16, Response3 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response4(_b) IPAQ_ASIC3_SDIO( _b, u16, Response4 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response5(_b) IPAQ_ASIC3_SDIO( _b, u16, Response5 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response6(_b) IPAQ_ASIC3_SDIO( _b, u16, Response6 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_Response7(_b) IPAQ_ASIC3_SDIO( _b, u16, Response7 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_CardStatus(_b) IPAQ_ASIC3_SDIO( _b, u16, CardStatus ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_BufferCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, BufferCtrl ) /* and error status*/
-+#define IPAQ_ASIC3_SDIO_CTRL_IntMaskCard(_b) IPAQ_ASIC3_SDIO( _b, u16, IntMaskCard ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_IntMaskBuffer(_b) IPAQ_ASIC3_SDIO( _b, u16, IntMaskBuffer ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_CardXferDataLen(_b) IPAQ_ASIC3_SDIO( _b, u16, CardXferDataLen ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_CardOptionSetup(_b) IPAQ_ASIC3_SDIO( _b, u16, CardOptionSetup ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_ErrorStatus0(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorStatus0 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_ErrorStatus1(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorStatus1 ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_DataPort(_b) IPAQ_ASIC3_SDIO( _b, u16, DataPort ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_TransactionCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, TransactionCtrl ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_CardIntCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, CardIntCtrl ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_ClocknWaitCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, ClocknWaitCtrl ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_HostInformation(_b) IPAQ_ASIC3_SDIO( _b, u16, HostInformation ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_ErrorCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorCtrl ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_LEDCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, LEDCtrl ) /* */
-+#define IPAQ_ASIC3_SDIO_CTRL_SoftwareReset(_b) IPAQ_ASIC3_SDIO( _b, u16, SoftwareReset ) /* */
-+
-+#define IPAQ_ASIC3_MAP_SIZE 0x2000
-+
-+#endif
-Index: linux-2.6.22/include/linux/backlight.h
-===================================================================
---- linux-2.6.22.orig/include/linux/backlight.h 2007-09-11 12:53:26.000000000 +0200
-+++ linux-2.6.22/include/linux/backlight.h 2007-09-11 12:53:37.000000000 +0200
-@@ -92,4 +92,11 @@
- return dev_get_drvdata(&bl_dev->dev);
- }
-
-+struct generic_bl_info {
-+ int max_intensity;
-+ int default_intensity;
-+ int limit_mask;
-+ void (*set_bl_intensity)(int intensity);
-+};
-+
- #endif
-Index: linux-2.6.22/include/linux/gpiodev.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/gpiodev.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,44 @@
-+#ifndef __GPIODEV_H
-+#define __GPIODEV_H
-+
-+#include <linux/device.h>
-+#include <linux/platform_device.h>
-+#include <asm/gpio.h>
-+
-+/* Interface */
-+
-+/* This structure must be first member of device platform_data structure
-+ of a device which provides gpiodev interface. All method pointers
-+ must be non-NULL, so stubs must be used for non-implemented ones. */
-+struct gpiodev_ops {
-+ int (*get)(struct device *this, unsigned gpio_no);
-+ void (*set)(struct device *this, unsigned gpio_no, int val);
-+ int (*to_irq)(struct device *this, unsigned gpio_no);
-+};
-+
-+/* Generalized GPIO structure */
-+
-+struct gpio {
-+ struct device *gpio_dev;
-+ unsigned gpio_no;
-+};
-+
-+/* API functions */
-+
-+static inline int gpiodev_get_value(struct gpio *gpio)
-+{
-+ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data;
-+ return ops->get(gpio->gpio_dev, gpio->gpio_no);
-+}
-+static inline void gpiodev_set_value(struct gpio *gpio, int val)
-+{
-+ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data;
-+ ops->set(gpio->gpio_dev, gpio->gpio_no, val);
-+}
-+static inline int gpiodev_to_irq(struct gpio *gpio)
-+{
-+ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data;
-+ return ops->to_irq(gpio->gpio_dev, gpio->gpio_no);
-+}
-+
-+#endif /* __GPIODEV_H */
-Index: linux-2.6.22/include/linux/input_pda.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/input_pda.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,47 @@
-+#ifndef _INPUT_PDA_H
-+#define _INPUT_PDA_H
-+
-+/*
-+ * This is temporary virtual button key codes map
-+ * for keyboardless handheld computers.
-+ * Its purpose is to provide map common to all devices
-+ * and known to work with current software and its bugs
-+ * and misfeatures. Once issues with the software are
-+ * solved, codes from input.h will be used directly
-+ * (missing key definitions will be added).
-+ */
-+
-+/* Some directly usable keycodes:
-+KEY_POWER - Power/suspend button
-+KEY_ENTER - Enter/Action/Central button on joypad
-+KEY_UP
-+KEY_DOWN
-+KEY_LEFT
-+KEY_RIGHT
-+*/
-+
-+/* XXX Instead of using any values in include/linux/input.h, we have to use
-+ use values < 128 due to some munging that kdrive does to get keystrokes.
-+ When kdrive gets its key events from evdev instead of the console,
-+ we should be able to switch to using input.h values and get rid of
-+ xmodmap. */
-+
-+#define _KEY_APP1 KEY_F9 // xmodmap sees 67 + 8 = 75
-+#define _KEY_APP2 KEY_F10 // xmodmap 76
-+#define _KEY_APP3 KEY_F11 // xmodmap 95
-+#define _KEY_APP4 KEY_F12 // xmodmap 96
-+
-+#define _KEY_RECORD KEY_RO
-+
-+/* It is highly recommended to use exactly 4 codes above for
-+ 4 buttons the device has. This will ensure that console and
-+ framebuffer applications (e.g. games) will work ok on all
-+ devices. If you'd like more distinguishable names, following
-+ convenience defines are provided, suiting many devices. */
-+
-+#define _KEY_CALENDAR _KEY_APP1
-+#define _KEY_CONTACTS _KEY_APP2
-+#define _KEY_MAIL _KEY_APP3
-+#define _KEY_HOMEPAGE _KEY_APP4
-+
-+#endif
-Index: linux-2.6.22/include/linux/soc/asic3_base.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/soc/asic3_base.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,104 @@
-+#include <asm/types.h>
-+#include <linux/gpiodev.h>
-+
-+/* Private API - for ASIC3 devices internal use only */
-+#define HDR_IPAQ_ASIC3_ACTION(ACTION,action,fn,FN) \
-+u32 asic3_get_gpio_ ## action ## _ ## fn (struct device *dev); \
-+void asic3_set_gpio_ ## action ## _ ## fn (struct device *dev, u32 bits, u32 val);
-+
-+#define HDR_IPAQ_ASIC3_FN(fn,FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( MASK,mask,fn,FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( DIR, dir, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( OUT, out, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( LEVELTRI, trigtype, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( RISING, rising, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( LEVEL, triglevel, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( SLEEP_MASK, sleepmask, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( SLEEP_OUT, sleepout, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( BATT_FAULT_OUT, battfaultout, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( INT_STATUS, intstatus, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( ALT_FUNCTION, alt_fn, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( SLEEP_CONF, sleepconf, fn, FN) \
-+ HDR_IPAQ_ASIC3_ACTION ( STATUS, status, fn, FN)
-+
-+/* Public API */
-+
-+#define ASIC3_GPIOA_IRQ_BASE 0
-+#define ASIC3_GPIOB_IRQ_BASE 16
-+#define ASIC3_GPIOC_IRQ_BASE 32
-+#define ASIC3_GPIOD_IRQ_BASE 48
-+#define ASIC3_LED0_IRQ 64
-+#define ASIC3_LED1_IRQ 65
-+#define ASIC3_LED2_IRQ 66
-+#define ASIC3_SPI_IRQ 67
-+#define ASIC3_SMBUS_IRQ 68
-+#define ASIC3_OWM_IRQ 69
-+
-+#define ASIC3_NR_GPIO_IRQS 64 /* 16 bits each GPIO A...D banks */
-+#define ASIC3_NR_IRQS (ASIC3_OWM_IRQ + 1)
-+
-+extern int asic3_irq_base(struct device *dev);
-+
-+extern void asic3_write_register(struct device *dev, unsigned int reg,
-+ u32 value);
-+extern u32 asic3_read_register(struct device *dev, unsigned int reg);
-+
-+/* old clock api */
-+extern void asic3_set_clock_sel(struct device *dev, u32 bits, u32 val);
-+extern u32 asic3_get_clock_cdex(struct device *dev);
-+extern void asic3_set_clock_cdex(struct device *dev, u32 bits, u32 val);
-+
-+extern void asic3_set_extcf_select(struct device *dev, u32 bits, u32 val);
-+extern void asic3_set_extcf_reset(struct device *dev, u32 bits, u32 val);
-+extern void asic3_set_sdhwctrl(struct device *dev, u32 bits, u32 val);
-+
-+extern void asic3_set_led(struct device *dev, int led_num, int duty_time,
-+ int cycle_time, int timebase);
-+
-+extern int asic3_register_mmc(struct device *dev);
-+extern int asic3_unregister_mmc(struct device *dev);
-+
-+/* Accessors for GPIO banks */
-+HDR_IPAQ_ASIC3_FN(a, A)
-+HDR_IPAQ_ASIC3_FN(b, B)
-+HDR_IPAQ_ASIC3_FN(c, C)
-+HDR_IPAQ_ASIC3_FN(d, D)
-+
-+#define _IPAQ_ASIC3_GPIO_BANK_A 0
-+#define _IPAQ_ASIC3_GPIO_BANK_B 1
-+#define _IPAQ_ASIC3_GPIO_BANK_C 2
-+#define _IPAQ_ASIC3_GPIO_BANK_D 3
-+
-+#define ASIC3_GPIO_bit(gpio) (1 << (gpio & 0xf))
-+
-+extern int asic3_get_gpio_bit(struct device *dev, int gpio);
-+extern void asic3_set_gpio_bit(struct device *dev, int gpio, int val);
-+extern int asic3_gpio_get_value(struct device *dev, unsigned gpio);
-+extern void asic3_gpio_set_value(struct device *dev, unsigned gpio, int val);
-+
-+
-+struct tmio_mmc_hwconfig;
-+
-+struct asic3_platform_data
-+{
-+ // Must be first member
-+ struct gpiodev_ops gpiodev_ops;
-+
-+ struct {
-+ u32 dir;
-+ u32 init;
-+ u32 sleep_mask;
-+ u32 sleep_out;
-+ u32 batt_fault_out;
-+ u32 sleep_conf;
-+ u32 alt_function;
-+ } gpio_a, gpio_b, gpio_c, gpio_d;
-+
-+ int irq_base;
-+ unsigned int bus_shift;
-+
-+ struct platform_device **child_platform_devs;
-+ int num_child_platform_devs;
-+
-+ struct tmio_mmc_hwconfig *tmio_mmc_hwconfig;
-+};
-Index: linux-2.6.22/include/linux/soc/tmio_mmc.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/soc/tmio_mmc.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,17 @@
-+#include <linux/platform_device.h>
-+
-+#define MMC_CLOCK_DISABLED 0
-+#define MMC_CLOCK_ENABLED 1
-+
-+#define TMIO_WP_ALWAYS_RW ((void*)-1)
-+
-+struct tmio_mmc_hwconfig {
-+ void (*hwinit)(struct platform_device *sdev);
-+ void (*set_mmc_clock)(struct platform_device *sdev, int state);
-+
-+ /* NULL - use ASIC3 signal,
-+ TMIO_WP_ALWAYS_RW - assume always R/W (e.g. miniSD)
-+ otherwise - machine-specific handler */
-+ int (*mmc_get_ro)(struct platform_device *pdev);
-+ short address_shift;
-+};
-Index: linux-2.6.22/include/asm-arm/arch-pxa/pxa-regs.h
-===================================================================
---- linux-2.6.22.orig/include/asm-arm/arch-pxa/pxa-regs.h 2007-09-11 12:53:34.000000000 +0200
-+++ linux-2.6.22/include/asm-arm/arch-pxa/pxa-regs.h 2007-09-11 12:53:37.000000000 +0200
-@@ -2043,6 +2043,8 @@
- #define LDCMD_SOFINT (1 << 22)
- #define LDCMD_EOFINT (1 << 21)
-
-+#define LCCR4_13M_PCD_EN (1<<25) /* 13M PCD enable */
-+#define LCCR4_PCDDIV (1<<31) /* PCD selection */
-
- #define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */
- #define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */
-Index: linux-2.6.22/drivers/mmc/host/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/mmc/host/Kconfig 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/mmc/host/Kconfig 2007-09-11 12:53:37.000000000 +0200
-@@ -100,3 +100,9 @@
- To compile this driver as a module, choose M here: the
- module will be called tifm_sd.
-
-+config MMC_ASIC3
-+ tristate "HTC ASIC3 SD/MMC support"
-+ depends on MMC && HTC_ASIC3
-+ help
-+ This provides support for the ASIC3 SD/MMC controller, used
-+ in the iPAQ hx4700 and others.
-Index: linux-2.6.22/drivers/mmc/host/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/mmc/host/Makefile 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/mmc/host/Makefile 2007-09-11 12:53:37.000000000 +0200
-@@ -15,4 +15,4 @@
- obj-$(CONFIG_MMC_OMAP) += omap.o
- obj-$(CONFIG_MMC_AT91) += at91_mci.o
- obj-$(CONFIG_MMC_TIFM_SD) += tifm_sd.o
--
-+obj-$(CONFIG_MMC_ASIC3) += asic3_mmc.o
-Index: linux-2.6.22/drivers/mmc/host/asic3_mmc.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/mmc/host/asic3_mmc.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,900 @@
-+/* Note that this driver can likely be merged into the tmio driver, so
-+ * consider this code temporary. It works, though.
-+ */
-+/*
-+ * linux/drivers/mmc/asic3_mmc.c
-+ *
-+ * Copyright (c) 2005 SDG Systems, LLC
-+ *
-+ * based on tmio_mmc.c
-+ * Copyright (C) 2004 Ian Molton
-+ *
-+ * Refactored to support all ASIC3 devices, 2006 Paul Sokolovsky
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Driver for the SD / SDIO cell found in:
-+ *
-+ * TC6393XB
-+ *
-+ * This driver draws mainly on scattered spec sheets, Reverse engineering
-+ * of the toshiba e800 SD driver and some parts of the 2.4 ASIC3 driver (4 bit
-+ * support).
-+ *
-+ * Supports MMC 1 bit transfers and SD 1 and 4 bit modes.
-+ *
-+ * TODO:
-+ * Eliminate FIXMEs
-+ * SDIO support
-+ * Power management
-+ * Handle MMC errors (at all)
-+ *
-+ */
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/ioport.h>
-+#include <linux/platform_device.h>
-+#include <linux/interrupt.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/err.h>
-+#include <linux/mmc/mmc.h>
-+#include <linux/mmc/host.h>
-+#include <linux/mmc/card.h>
-+//#include <linux/mmc/protocol.h>
-+#include <linux/mmc/sd.h>
-+#include <linux/scatterlist.h>
-+//#include <linux/soc-old.h>
-+#include <linux/soc/asic3_base.h>
-+#include <linux/soc/tmio_mmc.h>
-+
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#include <asm/mach/irq.h>
-+#include <linux/clk.h>
-+#include <asm/mach-types.h>
-+
-+#include <asm/hardware/ipaq-asic3.h>
-+#include "asic3_mmc.h"
-+
-+struct asic3_mmc_host {
-+ void *ctl_base;
-+ struct device *asic3_dev; /* asic3 device */
-+ struct tmio_mmc_hwconfig *hwconfig; /* HW config data/handlers, guaranteed != NULL */
-+ unsigned long bus_shift;
-+ struct mmc_command *cmd;
-+ struct mmc_request *mrq;
-+ struct mmc_data *data;
-+ struct mmc_host *mmc;
-+ int irq;
-+ unsigned short clock_for_sd;
-+
-+ /* I/O related stuff */
-+ struct scatterlist *sg_ptr;
-+ unsigned int sg_len;
-+ unsigned int sg_off;
-+};
-+
-+static void
-+mmc_finish_request(struct asic3_mmc_host *host)
-+{
-+ struct mmc_request *mrq = host->mrq;
-+
-+ /* Write something to end the command */
-+ host->mrq = NULL;
-+ host->cmd = NULL;
-+ host->data = NULL;
-+
-+ mmc_request_done(host->mmc, mrq);
-+}
-+
-+
-+#define ASIC3_MMC_REG(host, block, reg) (*((volatile u16 *) ((host->ctl_base) + ((_IPAQ_ASIC3_## block ## _Base + _IPAQ_ASIC3_ ## block ## _ ## reg) >> (2 - host->bus_shift))) ))
-+
-+static void
-+mmc_start_command(struct asic3_mmc_host *host, struct mmc_command *cmd)
-+{
-+ struct mmc_data *data = host->data;
-+ int c = cmd->opcode;
-+
-+ DBG("Opcode: %d, base: %p\n", cmd->opcode, host->ctl_base);
-+
-+ if(cmd->opcode == MMC_STOP_TRANSMISSION) {
-+ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = SD_CTRL_STOP_INTERNAL_ISSSUE_CMD12;
-+ cmd->resp[0] = cmd->opcode;
-+ cmd->resp[1] = 0;
-+ cmd->resp[2] = 0;
-+ cmd->resp[3] = 0;
-+ cmd->resp[4] = 0;
-+ return;
-+ }
-+
-+ switch(cmd->flags & 0x1f) {
-+ case MMC_RSP_NONE: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_NORMAL; break;
-+ case MMC_RSP_R1: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1; break;
-+ case MMC_RSP_R1B: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1B; break;
-+ case MMC_RSP_R2: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R2; break;
-+ case MMC_RSP_R3: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R3; break;
-+ default:
-+ DBG("Unknown response type %d\n", cmd->flags & 0x1f);
-+ break;
-+ }
-+
-+ host->cmd = cmd;
-+
-+ if(cmd->opcode == MMC_APP_CMD) {
-+ c |= APP_CMD;
-+ }
-+ if (cmd->opcode == MMC_GO_IDLE_STATE) {
-+ c |= (3 << 8); /* This was removed from ipaq-asic3.h for some reason */
-+ }
-+ if(data) {
-+ c |= SD_CTRL_COMMAND_DATA_PRESENT;
-+ if(data->blocks > 1) {
-+ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = SD_CTRL_STOP_INTERNAL_AUTO_ISSUE_CMD12;
-+ c |= SD_CTRL_COMMAND_MULTI_BLOCK;
-+ }
-+ if(data->flags & MMC_DATA_READ) {
-+ c |= SD_CTRL_COMMAND_TRANSFER_READ;
-+ }
-+ /* MMC_DATA_WRITE does not require a bit to be set */
-+ }
-+
-+ /* Enable the command and data interrupts */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
-+ SD_CTRL_INTMASKCARD_RESPONSE_END
-+ | SD_CTRL_INTMASKCARD_RW_END
-+ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0
-+ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0
-+#if 0
-+ | SD_CTRL_INTMASKCARD_CARD_REMOVED_3
-+ | SD_CTRL_INTMASKCARD_CARD_INSERTED_3
-+#endif
-+ );
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) = ~(
-+ SD_CTRL_INTMASKBUFFER_UNK7
-+ | SD_CTRL_INTMASKBUFFER_CMD_BUSY
-+#if 0
-+ | SD_CTRL_INTMASKBUFFER_CMD_INDEX_ERROR
-+ | SD_CTRL_INTMASKBUFFER_CRC_ERROR
-+ | SD_CTRL_INTMASKBUFFER_STOP_BIT_END_ERROR
-+ | SD_CTRL_INTMASKBUFFER_DATA_TIMEOUT
-+ | SD_CTRL_INTMASKBUFFER_BUFFER_OVERFLOW
-+ | SD_CTRL_INTMASKBUFFER_BUFFER_UNDERFLOW
-+ | SD_CTRL_INTMASKBUFFER_CMD_TIMEOUT
-+ | SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE
-+ | SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE
-+ | SD_CTRL_INTMASKBUFFER_ILLEGAL_ACCESS
-+#endif
-+ );
-+
-+ /* Send the command */
-+ ASIC3_MMC_REG(host, SD_CTRL, Arg1) = cmd->arg >> 16;
-+ ASIC3_MMC_REG(host, SD_CTRL, Arg0) = cmd->arg & 0xffff;
-+ ASIC3_MMC_REG(host, SD_CTRL, Cmd) = c;
-+}
-+
-+/* This chip always returns (at least?) as much data as you ask for. I'm
-+ * unsure what happens if you ask for less than a block. This should be looked
-+ * into to ensure that a funny length read doesnt mess up the controller data
-+ * state machine.
-+ *
-+ * Aric: Statement above may not apply to ASIC3.
-+ *
-+ * FIXME - this chip cannot do 1 and 2 byte data requests in 4 bit mode
-+ *
-+ * Aric: Statement above may not apply to ASIC3.
-+ */
-+
-+static struct tasklet_struct mmc_data_read_tasklet;
-+
-+static void
-+mmc_data_transfer(unsigned long h)
-+{
-+ struct asic3_mmc_host *host = (struct asic3_mmc_host *)h;
-+ struct mmc_data *data = host->data;
-+ unsigned short *buf;
-+ int count;
-+ /* unsigned long flags; */
-+
-+ if(!data){
-+ printk(KERN_WARNING DRIVER_NAME ": Spurious Data IRQ\n");
-+ return;
-+ }
-+
-+ /* local_irq_save(flags); */
-+ /* buf = kmap_atomic(host->sg_ptr->page, KM_BIO_SRC_IRQ); */
-+ buf = kmap(host->sg_ptr->page);
-+ buf += host->sg_ptr->offset/2 + host->sg_off/2;
-+
-+ /*
-+ * Ensure we dont read more than one block. The chip will interrupt us
-+ * When the next block is available.
-+ */
-+ count = host->sg_ptr->length - host->sg_off;
-+ if(count > data->blksz) {
-+ count = data->blksz;
-+ }
-+
-+ DBG("count: %08x, page: %p, offset: %08x flags %08x\n",
-+ count, host->sg_ptr->page, host->sg_off, data->flags);
-+
-+ host->sg_off += count;
-+
-+ /* Transfer the data */
-+ if(data->flags & MMC_DATA_READ) {
-+ while(count > 0) {
-+ /* Read two bytes from SD/MMC controller. */
-+ *buf = ASIC3_MMC_REG(host, SD_CTRL, DataPort);
-+ buf++;
-+ count -= 2;
-+ }
-+ //flush_dcache_page(host->sg_ptr->page);
-+ } else {
-+ while(count > 0) {
-+ /* Write two bytes to SD/MMC controller. */
-+ ASIC3_MMC_REG(host, SD_CTRL, DataPort) = *buf;
-+ buf++;
-+ count -= 2;
-+ }
-+ }
-+
-+ /* kunmap_atomic(host->sg_ptr->page, KM_BIO_SRC_IRQ); */
-+ kunmap(host->sg_ptr->page);
-+ /* local_irq_restore(flags); */
-+ if(host->sg_off == host->sg_ptr->length) {
-+ host->sg_ptr++;
-+ host->sg_off = 0;
-+ --host->sg_len;
-+ }
-+
-+ return;
-+}
-+
-+static void
-+mmc_data_end_irq(struct asic3_mmc_host *host)
-+{
-+ struct mmc_data *data = host->data;
-+
-+ host->data = NULL;
-+
-+ if(!data){
-+ printk(KERN_WARNING DRIVER_NAME ": Spurious data end IRQ\n");
-+ return;
-+ }
-+
-+ if (data->error == MMC_ERR_NONE) {
-+ data->bytes_xfered = data->blocks * data->blksz;
-+ } else {
-+ data->bytes_xfered = 0;
-+ }
-+
-+ DBG("Completed data request\n");
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = 0;
-+
-+ /* Make sure read enable interrupt and write enable interrupt are disabled */
-+ if(data->flags & MMC_DATA_READ) {
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) |= SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE;
-+ } else {
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) |= SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE;
-+ }
-+
-+ mmc_finish_request(host);
-+}
-+
-+static void
-+mmc_cmd_irq(struct asic3_mmc_host *host, unsigned int buffer_stat)
-+{
-+ struct mmc_command *cmd = host->cmd;
-+ u8 *buf = (u8 *)cmd->resp;
-+ u16 data;
-+
-+ if(!host->cmd) {
-+ printk(KERN_WARNING DRIVER_NAME ": Spurious CMD irq\n");
-+ return;
-+ }
-+
-+ host->cmd = NULL;
-+ if(cmd->flags & MMC_RSP_PRESENT && cmd->flags & MMC_RSP_136) {
-+ /* R2 */
-+ buf[12] = 0xff;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response0);
-+ buf[13] = data & 0xff;
-+ buf[14] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response1);
-+ buf[15] = data & 0xff;
-+ buf[8] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response2);
-+ buf[9] = data & 0xff;
-+ buf[10] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response3);
-+ buf[11] = data & 0xff;
-+ buf[4] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response4);
-+ buf[5] = data & 0xff;
-+ buf[6] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response5);
-+ buf[7] = data & 0xff;
-+ buf[0] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response6);
-+ buf[1] = data & 0xff;
-+ buf[2] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response7);
-+ buf[3] = data & 0xff;
-+ } else if(cmd->flags & MMC_RSP_PRESENT) {
-+ /* R1, R1B, R3 */
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response0);
-+ buf[0] = data & 0xff;
-+ buf[1] = data >> 8;
-+ data = ASIC3_MMC_REG(host, SD_CTRL, Response1);
-+ buf[2] = data & 0xff;
-+ buf[3] = data >> 8;
-+ }
-+ DBG("Response: %08x %08x %08x %08x\n", cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]);
-+
-+ if(buffer_stat & SD_CTRL_BUFFERSTATUS_CMD_TIMEOUT) {
-+ cmd->error = MMC_ERR_TIMEOUT;
-+ } else if((buffer_stat & SD_CTRL_BUFFERSTATUS_CRC_ERROR) && (cmd->flags & MMC_RSP_CRC)) {
-+ cmd->error = MMC_ERR_BADCRC;
-+ } else if(buffer_stat &
-+ (
-+ SD_CTRL_BUFFERSTATUS_ILLEGAL_ACCESS
-+ | SD_CTRL_BUFFERSTATUS_CMD_INDEX_ERROR
-+ | SD_CTRL_BUFFERSTATUS_STOP_BIT_END_ERROR
-+ | SD_CTRL_BUFFERSTATUS_BUFFER_OVERFLOW
-+ | SD_CTRL_BUFFERSTATUS_BUFFER_UNDERFLOW
-+ | SD_CTRL_BUFFERSTATUS_DATA_TIMEOUT
-+ )
-+ ) {
-+ DBG("Buffer status ERROR 0x%04x - inside check buffer\n", buffer_stat);
-+ DBG("detail0 error status 0x%04x\n", ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus0));
-+ DBG("detail1 error status 0x%04x\n", ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus1));
-+ cmd->error = MMC_ERR_FAILED;
-+ }
-+
-+ if(cmd->error == MMC_ERR_NONE) {
-+ switch (cmd->opcode) {
-+ case SD_APP_SET_BUS_WIDTH:
-+ if(cmd->arg == SD_BUS_WIDTH_4) {
-+ host->clock_for_sd = SD_CTRL_CARDCLOCKCONTROL_FOR_SD_CARD;
-+ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
-+ MEM_CARD_OPTION_REQUIRED
-+ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
-+ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
-+ | MEM_CARD_OPTION_DATA_XFR_WIDTH_4;
-+ } else {
-+ host->clock_for_sd = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
-+ MEM_CARD_OPTION_REQUIRED
-+ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
-+ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
-+ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1;
-+ }
-+ break;
-+ case MMC_SELECT_CARD:
-+ if((cmd->arg >> 16) == 0) {
-+ /* We have been deselected. */
-+ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
-+ MEM_CARD_OPTION_REQUIRED
-+ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
-+ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
-+ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1;
-+ }
-+ }
-+ }
-+
-+ /*
-+ * If there is data to handle we enable data IRQs here, and we will
-+ * ultimatley finish the request in the mmc_data_end_irq handler.
-+ */
-+ if(host->data && (cmd->error == MMC_ERR_NONE)){
-+ if(host->data->flags & MMC_DATA_READ) {
-+ /* Enable the read enable interrupt */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &=
-+ ~SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE;
-+ } else {
-+ /* Enable the write enable interrupt */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &=
-+ ~SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE;
-+ }
-+ } else {
-+ /* There's no data, or we encountered an error, so finish now. */
-+ mmc_finish_request(host);
-+ }
-+
-+ return;
-+}
-+
-+static void hwinit2_irqsafe(struct asic3_mmc_host *host);
-+
-+static irqreturn_t
-+mmc_irq(int irq, void *irq_desc)
-+{
-+ struct asic3_mmc_host *host;
-+ unsigned int breg, bmask, bstatus, creg, cmask, cstatus;
-+
-+ host = irq_desc;
-+
-+ /* asic3 bstatus has errors */
-+ bstatus = ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl);
-+ bmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer);
-+ cstatus = ASIC3_MMC_REG(host, SD_CTRL, CardStatus);
-+ cmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard);
-+ breg = bstatus & ~bmask & ~DONT_CARE_BUFFER_BITS;
-+ creg = cstatus & ~cmask & ~DONT_CARE_CARD_BITS;
-+
-+ if (!breg && !creg) {
-+ /* This occurs sometimes for no known reason. It doesn't hurt
-+ * anything, so I don't print it. */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &= ~breg;
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) &= ~creg;
-+ goto out;
-+ }
-+
-+ while (breg || creg) {
-+
-+ /* XXX TODO: Need to handle errors in breg here. */
-+
-+ /*
-+ * Card insert/remove. The mmc controlling code is stateless. That
-+ * is, it doesn't care if it was an insert or a remove. It treats
-+ * both the same.
-+ */
-+ /* XXX Asic3 has _3 versions of these status bits, too, for a second slot, perhaps? */
-+ if (creg & (SD_CTRL_CARDSTATUS_CARD_INSERTED_0 | SD_CTRL_CARDSTATUS_CARD_REMOVED_0)) {
-+ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &=
-+ ~(SD_CTRL_CARDSTATUS_CARD_REMOVED_0 | SD_CTRL_CARDSTATUS_CARD_INSERTED_0);
-+ if(creg & SD_CTRL_CARDSTATUS_CARD_INSERTED_0) {
-+ hwinit2_irqsafe(host);
-+ }
-+ mmc_detect_change(host->mmc,1);
-+ }
-+
-+ /* Command completion */
-+ if (creg & SD_CTRL_CARDSTATUS_RESPONSE_END) {
-+ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &=
-+ ~(SD_CTRL_CARDSTATUS_RESPONSE_END);
-+ mmc_cmd_irq(host, bstatus);
-+ }
-+
-+ /* Data transfer */
-+ if (breg & (SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE | SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE)) {
-+ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) &=
-+ ~(SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE | SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE);
-+ tasklet_schedule(&mmc_data_read_tasklet);
-+ }
-+
-+ /* Data transfer completion */
-+ if (creg & SD_CTRL_CARDSTATUS_RW_END) {
-+ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &= ~(SD_CTRL_CARDSTATUS_RW_END);
-+ mmc_data_end_irq(host);
-+ }
-+
-+ /* Check status - keep going until we've handled it all */
-+ bstatus = ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl);
-+ bmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer);
-+ cstatus = ASIC3_MMC_REG(host, SD_CTRL, CardStatus);
-+ cmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard);
-+ breg = bstatus & ~bmask & ~DONT_CARE_BUFFER_BITS;
-+ creg = cstatus & ~cmask & ~DONT_CARE_CARD_BITS;
-+ }
-+
-+out:
-+ /* Ensure all interrupt sources are cleared */
-+ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) = 0;
-+ return IRQ_HANDLED;
-+}
-+
-+static void
-+mmc_start_data(struct asic3_mmc_host *host, struct mmc_data *data)
-+{
-+ DBG("setup data transfer: blocksize %08x nr_blocks %d, page: %08x, offset: %08x\n", data->blksz,
-+ data->blocks, (int)data->sg->page, data->sg->offset);
-+
-+ host->sg_len = data->sg_len;
-+ host->sg_ptr = data->sg;
-+ host->sg_off = 0;
-+ host->data = data;
-+
-+ /* Set transfer length and blocksize */
-+ ASIC3_MMC_REG(host, SD_CTRL, TransferSectorCount) = data->blocks;
-+ ASIC3_MMC_REG(host, SD_CTRL, MemCardXferDataLen) = data->blksz;
-+}
-+
-+/* Process requests from the MMC layer */
-+static void
-+mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
-+{
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+
-+ WARN_ON(host->mrq != NULL);
-+
-+ host->mrq = mrq;
-+
-+ /* If we're performing a data request we need to setup some
-+ extra information */
-+ if(mrq->data) {
-+ mmc_start_data(host, mrq->data);
-+ }
-+
-+ mmc_start_command(host, mrq->cmd);
-+}
-+
-+/* Set MMC clock / power.
-+ * Note: This controller uses a simple divider scheme therefore it cannot run
-+ * a MMC card at full speed (20MHz). The max clock is 24MHz on SD, but as MMC
-+ * wont run that fast, it has to be clocked at 12MHz which is the next slowest
-+ * setting. This is likely not an issue because we are doing single 16-bit
-+ * writes for data I/O.
-+ */
-+static void
-+mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
-+{
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+ u32 clk = 0;
-+
-+ DBG("clock %uHz busmode %u powermode %u Vdd %u\n",
-+ ios->clock, ios->bus_mode, ios->power_mode, ios->vdd);
-+
-+ if (ios->clock) {
-+ clk = 0x80; /* slowest by default */
-+ if(ios->clock >= 24000000 / 256) clk >>= 1;
-+ if(ios->clock >= 24000000 / 128) clk >>= 1;
-+ if(ios->clock >= 24000000 / 64) clk >>= 1;
-+ if(ios->clock >= 24000000 / 32) clk >>= 1;
-+ if(ios->clock >= 24000000 / 16) clk >>= 1;
-+ if(ios->clock >= 24000000 / 8) clk >>= 1;
-+ if(ios->clock >= 24000000 / 4) clk >>= 1;
-+ if(ios->clock >= 24000000 / 2) clk >>= 1;
-+ if(ios->clock >= 24000000 / 1) clk >>= 1;
-+ if(clk == 0) { /* For fastest speed we disable the divider. */
-+ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 0;
-+ } else {
-+ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 1;
-+ }
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) =
-+ host->clock_for_sd
-+ | SD_CTRL_CARDCLOCKCONTROL_ENABLE_CLOCK
-+ | clk;
-+ msleep(10);
-+ } else {
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
-+ }
-+
-+ switch (ios->power_mode) {
-+ case MMC_POWER_OFF:
-+ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = 0;
-+ msleep(1);
-+ break;
-+ case MMC_POWER_UP:
-+ break;
-+ case MMC_POWER_ON:
-+ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = SD_CONFIG_POWER1_PC_33V;
-+ msleep(20);
-+ break;
-+ }
-+}
-+
-+static int
-+mmc_get_ro(struct mmc_host *mmc)
-+{
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+
-+ /* Call custom handler for RO status */
-+ if(host->hwconfig->mmc_get_ro) {
-+ /* Special case for cards w/o WP lock (like miniSD) */
-+ if (host->hwconfig->mmc_get_ro == (void*)-1) {
-+ return 0;
-+ } else {
-+ struct platform_device *pdev = to_platform_device(mmc_dev(mmc));
-+ return host->hwconfig->mmc_get_ro(pdev);
-+ }
-+ }
-+
-+ /* WRITE_PROTECT is active low */
-+ return (ASIC3_MMC_REG(host, SD_CTRL, CardStatus) & SD_CTRL_CARDSTATUS_WRITE_PROTECT)?0:1;
-+}
-+
-+static struct mmc_host_ops mmc_ops = {
-+ .request = mmc_request,
-+ .set_ios = mmc_set_ios,
-+ .get_ro = mmc_get_ro,
-+};
-+
-+static void
-+hwinit2_irqsafe(struct asic3_mmc_host *host)
-+{
-+ ASIC3_MMC_REG(host, SD_CONFIG, Addr1) = 0x0000;
-+ ASIC3_MMC_REG(host, SD_CONFIG, Addr0) = 0x0800;
-+
-+ ASIC3_MMC_REG(host, SD_CONFIG, ClkStop) = SD_CONFIG_CLKSTOP_ENABLE_ALL;
-+ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_CardDetect) = 2;
-+ ASIC3_MMC_REG(host, SD_CONFIG, Command) = SD_CONFIG_COMMAND_MAE;
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, SoftwareReset) = 0; /* reset on */
-+ mdelay(2);
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, SoftwareReset) = 1; /* reset off */
-+ mdelay(2);
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
-+ MEM_CARD_OPTION_REQUIRED
-+ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
-+ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
-+ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1
-+ ;
-+ host->clock_for_sd = 0;
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus0) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus1) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = 0;
-+
-+ ASIC3_MMC_REG(host, SDIO_CTRL, ClocknWaitCtrl) = 0x100;
-+ /* *((unsigned short *)(((char *)host->ctl_base) + 0x938)) = 0x100; */
-+
-+ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 0;
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
-+
-+ mdelay(1);
-+
-+
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
-+ SD_CTRL_INTMASKCARD_RESPONSE_END
-+ | SD_CTRL_INTMASKCARD_RW_END
-+ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0
-+ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0
-+#if 0
-+ | SD_CTRL_INTMASKCARD_CARD_REMOVED_3
-+ | SD_CTRL_INTMASKCARD_CARD_INSERTED_3
-+#endif
-+ )
-+ ; /* check */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) = 0xffff; /* IRQs off */
-+
-+ /*
-+ * ASIC3_MMC_REG(host, SD_CTRL, TransactionCtrl) = SD_CTRL_TRANSACTIONCONTROL_SET;
-+ * Wince has 0x1000
-+ */
-+ /* ASIC3_MMC_REG(host, SD_CTRL, TransactionCtrl) = 0x1000; */
-+
-+
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SDPWR, ASIC3_SDHWCTRL_SDPWR); /* turn on power at controller(?) */
-+
-+}
-+
-+static void
-+hwinit(struct asic3_mmc_host *host, struct platform_device *pdev)
-+{
-+ /* Call custom handler for enabling clock (if needed) */
-+ if(host->hwconfig->set_mmc_clock)
-+ host->hwconfig->set_mmc_clock(pdev, MMC_CLOCK_ENABLED);
-+
-+ /* Not sure if it must be done bit by bit, but leaving as-is */
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_LEVCD, ASIC3_SDHWCTRL_LEVCD);
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_LEVWP, ASIC3_SDHWCTRL_LEVWP);
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, 0);
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_PCLR, 0);
-+
-+ asic3_set_clock_cdex (host->asic3_dev,
-+ CLOCK_CDEX_EX1 | CLOCK_CDEX_EX0, CLOCK_CDEX_EX1 | CLOCK_CDEX_EX0);
-+ msleep(1);
-+
-+ asic3_set_clock_sel (host->asic3_dev,
-+ CLOCK_SEL_SD_HCLK_SEL | CLOCK_SEL_SD_BCLK_SEL,
-+ CLOCK_SEL_SD_HCLK_SEL | 0); /* ? */
-+
-+ asic3_set_clock_cdex (host->asic3_dev,
-+ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS,
-+ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS);
-+ msleep(1);
-+
-+ asic3_set_extcf_select(host->asic3_dev, ASIC3_EXTCF_SD_MEM_ENABLE, ASIC3_EXTCF_SD_MEM_ENABLE);
-+
-+ /* Long Delay */
-+ if( !machine_is_h4700())
-+ msleep(500);
-+
-+ hwinit2_irqsafe(host);
-+}
-+
-+#ifdef CONFIG_PM
-+static int
-+mmc_suspend(struct platform_device *pdev, pm_message_t state)
-+{
-+ struct mmc_host *mmc = platform_get_drvdata(pdev);
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+ int ret;
-+
-+ ret = mmc_suspend_host(mmc, state);
-+
-+ if (ret) {
-+ printk(KERN_ERR DRIVER_NAME ": Could not suspend MMC host, hardware not suspended");
-+ return ret;
-+ }
-+
-+ /* disable the card insert / remove interrupt while sleeping */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
-+ SD_CTRL_INTMASKCARD_RESPONSE_END
-+ | SD_CTRL_INTMASKCARD_RW_END);
-+
-+ /* disable clock */
-+ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
-+ ASIC3_MMC_REG(host, SD_CONFIG, ClkStop) = 0;
-+
-+ /* power down */
-+ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = 0;
-+
-+ asic3_set_clock_cdex (host->asic3_dev,
-+ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS, 0);
-+
-+ /* disable core clock */
-+ if(host->hwconfig->set_mmc_clock)
-+ host->hwconfig->set_mmc_clock(pdev, MMC_CLOCK_DISABLED);
-+
-+ /* Put in suspend mode */
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, ASIC3_SDHWCTRL_SUSPEND);
-+ return 0;
-+}
-+
-+static int
-+mmc_resume(struct platform_device *pdev)
-+{
-+ struct mmc_host *mmc = platform_get_drvdata(pdev);
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+
-+ printk(KERN_INFO "%s: starting resume\n", DRIVER_NAME);
-+
-+ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, 0);
-+ hwinit(host, pdev);
-+
-+ /* re-enable card remove / insert interrupt */
-+ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
-+ SD_CTRL_INTMASKCARD_RESPONSE_END
-+ | SD_CTRL_INTMASKCARD_RW_END
-+ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0
-+ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0 );
-+
-+ mmc_resume_host(mmc);
-+
-+ printk(KERN_INFO "%s: finished resume\n", DRIVER_NAME);
-+ return 0;
-+}
-+#endif
-+
-+static int
-+mmc_probe(struct platform_device *pdev)
-+{
-+ struct mmc_host *mmc;
-+ struct asic3_mmc_host *host = NULL;
-+ int retval = 0;
-+ struct tmio_mmc_hwconfig *mmc_config = (struct tmio_mmc_hwconfig *)pdev->dev.platform_data;
-+
-+ /* bus_shift is mandatory */
-+ if (!mmc_config) {
-+ printk(KERN_ERR DRIVER_NAME ": Invalid configuration\n");
-+ return -EINVAL;
-+ }
-+
-+ mmc = mmc_alloc_host(sizeof(struct asic3_mmc_host) + 128, &pdev->dev);
-+ if (!mmc) {
-+ retval = -ENOMEM;
-+ goto exceptional_return;
-+ }
-+
-+ host = mmc_priv(mmc);
-+ host->mmc = mmc;
-+ platform_set_drvdata(pdev, mmc);
-+
-+ host->ctl_base = 0;
-+ host->hwconfig = mmc_config;
-+ host->bus_shift = mmc_config->address_shift;
-+ host->asic3_dev = pdev->dev.parent;
-+ host->clock_for_sd = 0;
-+
-+ tasklet_init(&mmc_data_read_tasklet, mmc_data_transfer, (unsigned long)host);
-+
-+ host->ctl_base = ioremap_nocache ((unsigned long)pdev->resource[0].start, pdev->resource[0].end - pdev->resource[0].start);
-+ if(!host->ctl_base){
-+ printk(KERN_ERR DRIVER_NAME ": Could not map ASIC3 SD controller\n");
-+ retval = -ENODEV;
-+ goto exceptional_return;
-+ }
-+
-+ printk(DRIVER_NAME ": ASIC3 MMC/SD Driver, controller at 0x%lx\n", (unsigned long)pdev->resource[0].start);
-+
-+ mmc->ops = &mmc_ops;
-+ mmc->caps = MMC_CAP_4_BIT_DATA;
-+ mmc->f_min = 46875; /* ARIC: not sure what these should be */
-+ mmc->f_max = 24000000; /* ARIC: not sure what these should be */
-+ mmc->ocr_avail = MMC_VDD_32_33;
-+
-+ hwinit(host, pdev);
-+
-+
-+ host->irq = pdev->resource[1].start;
-+
-+ retval = request_irq(host->irq, mmc_irq, 0, DRIVER_NAME, host);
-+ if(retval) {
-+ printk(KERN_ERR DRIVER_NAME ": Unable to get interrupt\n");
-+ retval = -ENODEV;
-+ goto exceptional_return;
-+ }
-+ set_irq_type(host->irq, IRQT_FALLING);
-+
-+ mmc_add_host(mmc);
-+
-+#ifdef CONFIG_PM
-+ // resume_timer.function = resume_timer_callback;
-+ // resume_timer.data = 0;
-+ // init_timer(&resume_timer);
-+#endif
-+
-+ return 0;
-+
-+exceptional_return:
-+ if (mmc) {
-+ mmc_free_host(mmc);
-+ }
-+ if(host && host->ctl_base) iounmap(host->ctl_base);
-+ return retval;
-+}
-+
-+static int
-+mmc_remove(struct platform_device *pdev)
-+{
-+ struct mmc_host *mmc = platform_get_drvdata(pdev);
-+
-+ platform_set_drvdata(pdev, NULL);
-+
-+ if (mmc) {
-+ struct asic3_mmc_host *host = mmc_priv(mmc);
-+ mmc_remove_host(mmc);
-+ free_irq(host->irq, host);
-+ /* FIXME - we might want to consider stopping the chip here... */
-+ iounmap(host->ctl_base);
-+ mmc_free_host(mmc); /* FIXME - why does this call hang? */
-+ }
-+ return 0;
-+}
-+
-+/* ------------------- device registration ----------------------- */
-+
-+static struct platform_driver mmc_asic3_driver = {
-+ .driver = {
-+ .name = DRIVER_NAME,
-+ },
-+ .probe = mmc_probe,
-+ .remove = mmc_remove,
-+#ifdef CONFIG_PM
-+ .suspend = mmc_suspend,
-+ .resume = mmc_resume,
-+#endif
-+};
-+
-+static int __init mmc_init(void)
-+{
-+ return platform_driver_register(&mmc_asic3_driver);
-+}
-+
-+static void __exit mmc_exit(void)
-+{
-+ platform_driver_unregister(&mmc_asic3_driver);
-+}
-+
-+late_initcall(mmc_init);
-+module_exit(mmc_exit);
-+
-+MODULE_DESCRIPTION("HTC ASIC3 SD/MMC driver");
-+MODULE_AUTHOR("Aric Blumer, SDG Systems, LLC");
-+MODULE_LICENSE("GPL");
-+
-Index: linux-2.6.22/drivers/mmc/host/asic3_mmc.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/mmc/host/asic3_mmc.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,25 @@
-+#ifndef __ASIC3_MMC_H
-+#define __ASIC3_MMC_H
-+
-+#define DRIVER_NAME "asic3_mmc"
-+
-+#ifdef CONFIG_MMC_DEBUG
-+#define DBG(x...) printk(DRIVER_NAME ": " x)
-+#else
-+#define DBG(x...) do { } while (0)
-+#endif
-+
-+/* Response types */
-+#define APP_CMD 0x0040
-+
-+#define SD_CONFIG_CLKSTOP_ENABLE_ALL 0x1f
-+
-+#define DONT_CARE_CARD_BITS ( \
-+ SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_3 \
-+ | SD_CTRL_INTMASKCARD_WRITE_PROTECT \
-+ | SD_CTRL_INTMASKCARD_UNK6 \
-+ | SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_0 \
-+ )
-+#define DONT_CARE_BUFFER_BITS ( SD_CTRL_INTMASKBUFFER_UNK7 | SD_CTRL_INTMASKBUFFER_CMD_BUSY )
-+
-+#endif // __ASIC3_MMC_H
-Index: linux-2.6.22/drivers/input/keyboard/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/input/keyboard/Makefile 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/input/keyboard/Makefile 2007-09-11 12:53:37.000000000 +0200
-@@ -21,4 +21,4 @@
- obj-$(CONFIG_KEYBOARD_PXA27x) += pxa27x_keyboard.o
- obj-$(CONFIG_KEYBOARD_AAED2000) += aaed2000_kbd.o
- obj-$(CONFIG_KEYBOARD_GPIO) += gpio_keys.o
--
-+obj-$(CONFIG_KEYBOARD_ASIC3) += asic3_keys.o
-Index: linux-2.6.22/drivers/input/keyboard/asic3_keys.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/input/keyboard/asic3_keys.c 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,131 @@
-+/*
-+ * Generic buttons driver for ASIC3 SoC.
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License. See the file COPYING in the main directory of this archive for
-+ * more details.
-+ *
-+ * Copyright (C) 2003 Joshua Wise
-+ * Copyright (C) 2005 Pawel Kolodziejski
-+ * Copyright (C) 2006 Paul Sokolovsky
-+ *
-+ */
-+
-+#include <linux/input.h>
-+#include <linux/module.h>
-+#include <linux/init.h>
-+#include <linux/interrupt.h>
-+#include <linux/platform_device.h>
-+#include <linux/irq.h>
-+#include <linux/soc/asic3_base.h>
-+#include <asm/mach/arch.h>
-+#include <asm/mach/map.h>
-+#include <asm/arch/irqs.h>
-+#include <asm/hardware.h>
-+#include <asm/hardware/ipaq-asic3.h>
-+#include <asm/hardware/asic3_keys.h>
-+
-+static irqreturn_t asic3_keys_asic_handle(int irq, void *data)
-+{
-+ struct asic3_keys_platform_data *pdata = data;
-+ int i, base_irq;
-+
-+ base_irq = asic3_irq_base(pdata->asic3_dev);
-+ for (i = 0; i < pdata->nbuttons; i++) {
-+ struct asic3_keys_button *b = &pdata->buttons[i];
-+ if ((base_irq + b->gpio) == irq) {
-+ int state = !!asic3_gpio_get_value(pdata->asic3_dev, b->gpio);
-+
-+ if (pdata->buttons[i].type == EV_SW)
-+ input_report_switch(pdata->input, pdata->buttons[i].keycode, state ^ b->active_low);
-+ else
-+ input_report_key(pdata->input, b->keycode, state ^ b->active_low);
-+ input_sync(pdata->input);
-+ }
-+ }
-+
-+ return IRQ_HANDLED;
-+}
-+
-+static int __devinit asic3_keys_probe(struct platform_device *pdev)
-+{
-+ struct asic3_keys_platform_data *pdata = pdev->dev.platform_data;
-+ int i, base_irq;
-+ int j, ret;
-+
-+ pdata->input = input_allocate_device();
-+
-+ base_irq = asic3_irq_base(pdata->asic3_dev);
-+
-+ for (i = 0; i < pdata->nbuttons; i++) {
-+ struct asic3_keys_button *b = &pdata->buttons[i];
-+ set_bit(b->keycode, pdata->input->keybit);
-+ ret=request_irq(base_irq + b->gpio, asic3_keys_asic_handle, SA_SAMPLE_RANDOM, b->desc, pdata);
-+ if (ret)
-+ {
-+ printk(KERN_NOTICE "Failed to allocate asic3_keys irq=%d.\n",b->gpio);
-+
-+ for(j=0; j<i ; j++)
-+ free_irq(base_irq + pdata->buttons[i].gpio, NULL);
-+
-+ input_unregister_device (pdata->input);
-+
-+ return -ENODEV;
-+ }
-+
-+ set_irq_type(base_irq + b->gpio, IRQT_BOTHEDGE);
-+ if (pdata->buttons[i].type == EV_SW) {
-+ pdata->input->evbit[0] |= BIT(EV_SW);
-+ set_bit(b->keycode, pdata->input->swbit);
-+ } else {
-+ pdata->input->evbit[0] |= BIT(EV_KEY);
-+ set_bit(b->keycode, pdata->input->keybit);
-+ }
-+ }
-+
-+ pdata->input->name = pdev->name;
-+ input_register_device(pdata->input);
-+
-+ return 0;
-+}
-+
-+static int __devexit asic3_keys_remove(struct platform_device *pdev)
-+{
-+ struct asic3_keys_platform_data *pdata = pdev->dev.platform_data;
-+ int i, base_irq;
-+
-+ base_irq = asic3_irq_base(pdata->asic3_dev);
-+ for (i = 0; i < pdata->nbuttons; i++) {
-+ free_irq(base_irq + pdata->buttons[i].gpio, NULL);
-+ }
-+
-+ input_unregister_device(pdata->input);
-+
-+ return 0;
-+}
-+
-+
-+static struct platform_driver asic3_keys_driver = {
-+ .probe = asic3_keys_probe,
-+ .remove = __devexit_p(asic3_keys_remove),
-+ .driver = {
-+ .name = "asic3-keys",
-+ },
-+};
-+
-+static int __init asic3_keys_init(void)
-+{
-+ return platform_driver_register(&asic3_keys_driver);
-+}
-+
-+static void __exit asic3_keys_exit(void)
-+{
-+ platform_driver_unregister(&asic3_keys_driver);
-+}
-+
-+module_init(asic3_keys_init);
-+module_exit(asic3_keys_exit);
-+
-+MODULE_AUTHOR("Joshua Wise, Pawel Kolodziejski, Paul Sokolovsky");
-+MODULE_DESCRIPTION("Buttons driver for HTC ASIC3 SoC");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/include/asm-arm/arch-pxa/irqs.h
-===================================================================
---- linux-2.6.22.orig/include/asm-arm/arch-pxa/irqs.h 2007-09-11 12:53:24.000000000 +0200
-+++ linux-2.6.22/include/asm-arm/arch-pxa/irqs.h 2007-09-11 12:53:37.000000000 +0200
-@@ -172,6 +172,8 @@
- defined(CONFIG_MACH_LOGICPD_PXA270) || \
- defined(CONFIG_MACH_MAINSTONE)
- #define NR_IRQS (IRQ_BOARD_END)
-+#elif defined(CONFIG_MACH_HTCUNIVERSAL)
-+#define NR_IRQS (IRQ_BOARD_START + 96)
- #else
- #define NR_IRQS (IRQ_BOARD_START)
- #endif
-Index: linux-2.6.22/include/linux/ioport.h
-===================================================================
---- linux-2.6.22.orig/include/linux/ioport.h 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/include/linux/ioport.h 2007-09-11 12:53:37.000000000 +0200
-@@ -56,6 +56,7 @@
- #define IORESOURCE_IRQ_HIGHLEVEL (1<<2)
- #define IORESOURCE_IRQ_LOWLEVEL (1<<3)
- #define IORESOURCE_IRQ_SHAREABLE (1<<4)
-+#define IORESOURCE_IRQ_SOC_SUBDEVICE (1<<5)
-
- /* ISA PnP DMA specific bits (IORESOURCE_BITS) */
- #define IORESOURCE_DMA_TYPE_MASK (3<<0)
-Index: linux-2.6.22/drivers/video/backlight/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/video/backlight/Kconfig 2007-09-11 12:53:30.000000000 +0200
-+++ linux-2.6.22/drivers/video/backlight/Kconfig 2007-09-11 12:53:37.000000000 +0200
-@@ -40,7 +40,7 @@
-
- config BACKLIGHT_CORGI
- tristate "Sharp Corgi Backlight Driver (SL Series)"
-- depends on BACKLIGHT_CLASS_DEVICE && PXA_SHARPSL
-+ depends on BACKLIGHT_CLASS_DEVICE
- default y
- help
- If you have a Sharp Zaurus SL-C7xx, SL-Cxx00 or SL-6000x say y to enable the
-Index: linux-2.6.22/drivers/video/backlight/corgi_bl.c
-===================================================================
---- linux-2.6.22.orig/drivers/video/backlight/corgi_bl.c 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/video/backlight/corgi_bl.c 2007-09-11 12:53:37.000000000 +0200
-@@ -24,7 +24,7 @@
- static int corgibl_intensity;
- static struct backlight_properties corgibl_data;
- static struct backlight_device *corgi_backlight_device;
--static struct corgibl_machinfo *bl_machinfo;
-+static struct generic_bl_info *bl_machinfo;
-
- static unsigned long corgibl_flags;
- #define CORGIBL_SUSPENDED 0x01
-@@ -107,7 +107,7 @@
-
- static int corgibl_probe(struct platform_device *pdev)
- {
-- struct corgibl_machinfo *machinfo = pdev->dev.platform_data;
-+ struct generic_bl_info *machinfo = pdev->dev.platform_data;
-
- bl_machinfo = machinfo;
- if (!machinfo->limit_mask)
-Index: linux-2.6.22/arch/arm/mach-pxa/corgi.c
-===================================================================
---- linux-2.6.22.orig/arch/arm/mach-pxa/corgi.c 2007-09-11 12:53:32.000000000 +0200
-+++ linux-2.6.22/arch/arm/mach-pxa/corgi.c 2007-09-11 12:53:37.000000000 +0200
-@@ -20,6 +20,7 @@
- #include <linux/interrupt.h>
- #include <linux/mmc/host.h>
- #include <linux/pm.h>
-+#include <linux/backlight.h>
-
- #include <asm/setup.h>
- #include <asm/memory.h>
-@@ -143,7 +144,7 @@
- /*
- * Corgi Backlight Device
- */
--static struct corgibl_machinfo corgi_bl_machinfo = {
-+static struct generic_bl_info corgi_bl_machinfo = {
- .max_intensity = 0x2f,
- .default_intensity = 0x1f,
- .limit_mask = 0x0b,
-Index: linux-2.6.22/arch/arm/mach-pxa/spitz.c
-===================================================================
---- linux-2.6.22.orig/arch/arm/mach-pxa/spitz.c 2007-09-11 12:53:33.000000000 +0200
-+++ linux-2.6.22/arch/arm/mach-pxa/spitz.c 2007-09-11 12:53:37.000000000 +0200
-@@ -222,7 +222,7 @@
- /*
- * Spitz Backlight Device
- */
--static struct corgibl_machinfo spitz_bl_machinfo = {
-+static struct generic_bl_info spitz_bl_machinfo = {
- .default_intensity = 0x1f,
- .limit_mask = 0x0b,
- .max_intensity = 0x2f,
-Index: linux-2.6.22/include/asm-arm/arch-pxa/serial.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/asm-arm/arch-pxa/serial.h 2007-09-11 12:53:37.000000000 +0200
-@@ -0,0 +1,78 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/serial.h
-+ *
-+ * Author: Nicolas Pitre
-+ * Copyright: (C) 2001 MontaVista Software Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <asm/arch/pxa-regs.h>
-+
-+#define BAUD_BASE 921600
-+
-+/* Standard COM flags */
-+#define STD_COM_FLAGS (ASYNC_SKIP_TEST)
-+
-+#define STD_SERIAL_PORT_DEFNS \
-+ { \
-+ type: PORT_PXA, \
-+ xmit_fifo_size: 64, \
-+ baud_base: BAUD_BASE, \
-+ iomem_base: &FFUART, \
-+ iomem_reg_shift: 2, \
-+ io_type: SERIAL_IO_MEM, \
-+ irq: IRQ_FFUART, \
-+ flags: STD_COM_FLAGS, \
-+ }, { \
-+ type: PORT_PXA, \
-+ xmit_fifo_size: 64, \
-+ baud_base: BAUD_BASE, \
-+ iomem_base: &STUART, \
-+ iomem_reg_shift: 2, \
-+ io_type: SERIAL_IO_MEM, \
-+ irq: IRQ_STUART, \
-+ flags: STD_COM_FLAGS, \
-+ }, { \
-+ type: PORT_PXA, \
-+ xmit_fifo_size: 64, \
-+ baud_base: BAUD_BASE, \
-+ iomem_base: &BTUART, \
-+ iomem_reg_shift: 2, \
-+ io_type: SERIAL_IO_MEM, \
-+ irq: IRQ_BTUART, \
-+ flags: STD_COM_FLAGS, \
-+ }
-+
-+#define EXTRA_SERIAL_PORT_DEFNS
-+
-+struct platform_pxa_serial_funcs {
-+
-+ /* Initialize whatever is connected to this serial port. */
-+ void (*configure)(int state);
-+#define PXA_UART_CFG_PRE_STARTUP 0
-+#define PXA_UART_CFG_POST_STARTUP 1
-+#define PXA_UART_CFG_PRE_SHUTDOWN 2
-+#define PXA_UART_CFG_POST_SHUTDOWN 3
-+
-+ /* Enable or disable the individual transmitter/receiver submodules.
-+ * On transceivers without echo cancellation (e.g. SIR)
-+ * transmitter always has priority; e.g. if both bits are set,
-+ * only the transmitter is enabled. */
-+ void (*set_txrx)(int txrx);
-+#define PXA_SERIAL_TX 1
-+#define PXA_SERIAL_RX 2
-+
-+ /* Get the current state of tx/rx. */
-+ int (*get_txrx)(void);
-+
-+ int (*suspend)(struct platform_device *dev, pm_message_t state);
-+ int (*resume)(struct platform_device *dev);
-+};
-+
-+void pxa_set_ffuart_info(struct platform_pxa_serial_funcs *ffuart_funcs);
-+void pxa_set_btuart_info(struct platform_pxa_serial_funcs *btuart_funcs);
-+void pxa_set_stuart_info(struct platform_pxa_serial_funcs *stuart_funcs);
-+void pxa_set_hwuart_info(struct platform_pxa_serial_funcs *hwuart_funcs);
-Index: linux-2.6.22/drivers/serial/pxa.c
-===================================================================
---- linux-2.6.22.orig/drivers/serial/pxa.c 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/serial/pxa.c 2007-09-11 12:53:37.000000000 +0200
-@@ -46,6 +46,7 @@
- #include <asm/io.h>
- #include <asm/hardware.h>
- #include <asm/irq.h>
-+#include <asm/arch/serial.h>
- #include <asm/arch/pxa-regs.h>
-
-
-@@ -59,6 +60,14 @@
- char *name;
- };
-
-+
-+#define IS_METHOD(dev, method) (dev && (dev)->platform_data && ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method)
-+#define METHOD_CALL(dev, method) \
-+ ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method()
-+#define SAFE_METHOD_CALL(dev, method, args...) \
-+ if (IS_METHOD(dev, method)) \
-+ ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method(args)
-+
- static inline unsigned int serial_in(struct uart_pxa_port *up, int offset)
- {
- offset <<= 2;
-@@ -346,6 +355,9 @@
- unsigned long flags;
- int retval;
-
-+ /* Perform platform-specific port initialization, if needed. */
-+ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_PRE_STARTUP);
-+
- if (port->line == 3) /* HWUART */
- up->mcr |= UART_MCR_AFE;
- else
-@@ -401,6 +413,12 @@
- (void) serial_in(up, UART_IIR);
- (void) serial_in(up, UART_MSR);
-
-+ /*
-+ * Perform platform-specific port initialization if needed
-+ */
-+ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_POST_STARTUP);
-+ SAFE_METHOD_CALL(port->dev, set_txrx, PXA_SERIAL_RX);
-+
- return 0;
- }
-
-@@ -409,6 +427,8 @@
- struct uart_pxa_port *up = (struct uart_pxa_port *)port;
- unsigned long flags;
-
-+ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_PRE_SHUTDOWN);
-+
- free_irq(up->port.irq, up);
-
- /*
-@@ -430,6 +450,8 @@
- UART_FCR_CLEAR_RCVR |
- UART_FCR_CLEAR_XMIT);
- serial_out(up, UART_FCR, 0);
-+
-+ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_POST_SHUTDOWN);
- }
-
- static void
-Index: linux-2.6.22/arch/arm/mach-pxa/generic.c
-===================================================================
---- linux-2.6.22.orig/arch/arm/mach-pxa/generic.c 2007-09-11 12:53:11.000000000 +0200
-+++ linux-2.6.22/arch/arm/mach-pxa/generic.c 2007-09-11 12:53:37.000000000 +0200
-@@ -42,6 +42,7 @@
- #include <asm/arch/mmc.h>
- #include <asm/arch/irda.h>
- #include <asm/arch/i2c.h>
-+#include <asm/arch/serial.h>
-
- #include "devices.h"
- #include "generic.h"
-@@ -346,6 +347,18 @@
- .id = 3,
- };
-
-+void __init pxa_set_ffuart_info(struct platform_pxa_serial_funcs *info)
-+{
-+ pxa_device_ffuart.dev.platform_data = info;
-+}
-+EXPORT_SYMBOL(pxa_set_ffuart_info);
-+
-+void __init pxa_set_btuart_info(struct platform_pxa_serial_funcs *info)
-+{
-+ pxa_device_btuart.dev.platform_data = info;
-+}
-+EXPORT_SYMBOL(pxa_set_btuart_info);
-+
- static struct resource pxai2c_resources[] = {
- {
- .start = 0x40301680,
-Index: linux-2.6.22/drivers/leds/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/leds/Makefile 2007-09-11 12:53:14.000000000 +0200
-+++ linux-2.6.22/drivers/leds/Makefile 2007-09-11 12:53:37.000000000 +0200
-@@ -16,6 +16,7 @@
- obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o
- obj-$(CONFIG_LEDS_H1940) += leds-h1940.o
- obj-$(CONFIG_LEDS_COBALT) += leds-cobalt.o
-+obj-$(CONFIG_LEDS_ASIC3) += leds-asic3.o
- obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o
-
- # LED Triggers
-Index: linux-2.6.22/arch/arm/Kconfig
-===================================================================
---- linux-2.6.22.orig/arch/arm/Kconfig 2007-09-11 12:53:32.000000000 +0200
-+++ linux-2.6.22/arch/arm/Kconfig 2007-09-11 12:53:37.000000000 +0200
-@@ -1032,6 +1032,8 @@
-
- source "drivers/w1/Kconfig"
-
-+source "drivers/power/Kconfig"
-+
- source "drivers/hwmon/Kconfig"
-
- #source "drivers/l3/Kconfig"
-Index: linux-2.6.22/drivers/input/keyboard/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/input/keyboard/Kconfig 2007-09-11 14:28:45.000000000 +0200
-+++ linux-2.6.22/drivers/input/keyboard/Kconfig 2007-09-11 14:29:05.000000000 +0200
-@@ -253,4 +253,11 @@
- To compile this driver as a module, choose M here: the
- module will be called gpio-keys.
-
-+config KEYBOARD_ASIC3
-+ tristate "Buttons on ASIC3 SoC GPIOs (iPaqs, etc.)"
-+ depends on HTC_ASIC3
-+ help
-+ This enables support for the buttons attached to GPIOs of
-+ HTC ASIC3 peripheral controller.
-+
- endif
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/mmcsd_no_scr_check-r2.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/mmcsd_no_scr_check-r2.patch
deleted file mode 100644
index ac2245f088..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/mmcsd_no_scr_check-r2.patch
+++ /dev/null
@@ -1,29 +0,0 @@
----
- drivers/mmc/core/sd.c | 11 ++++++-----
- 1 file changed, 6 insertions(+), 5 deletions(-)
-
-Index: linux-2.6.23/drivers/mmc/core/sd.c
-===================================================================
---- linux-2.6.23.orig/drivers/mmc/core/sd.c 2007-10-17 11:33:26.000000000 +0200
-+++ linux-2.6.23/drivers/mmc/core/sd.c 2007-10-17 11:33:49.000000000 +0200
-@@ -173,14 +173,15 @@
-
- scr_struct = UNSTUFF_BITS(resp, 60, 4);
- if (scr_struct != 0) {
-- printk(KERN_ERR "%s: unrecognised SCR structure version %d\n",
-+ printk(KERN_WARNING "%s: unrecognised SCR structure version %d\n",
- mmc_hostname(card->host), scr_struct);
-- return -EINVAL;
-+ scr->sda_vsn = 0;
-+ scr->bus_widths = 0;
-+ } else {
-+ scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
-+ scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
- }
-
-- scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
-- scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
--
- return 0;
- }
-
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pda-power.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pda-power.patch
deleted file mode 100644
index face2f4ef2..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pda-power.patch
+++ /dev/null
@@ -1,3373 +0,0 @@
----
- arch/arm/Kconfig | 2
- drivers/Kconfig | 2
- drivers/Makefile | 1
- drivers/power/Kconfig | 70 +++++
- drivers/power/Makefile | 28 ++
- drivers/power/adc_battery.c | 278 +++++++++++++++++++++
- drivers/power/apm_power.c | 247 +++++++++++++++++++
- drivers/power/ds2760_battery.c | 475 +++++++++++++++++++++++++++++++++++++
- drivers/power/micro_battery.c | 257 ++++++++++++++++++++
- drivers/power/olpc_battery.c | 302 +++++++++++++++++++++++
- drivers/power/pda_power.c | 263 ++++++++++++++++++++
- drivers/power/pmu_battery.c | 215 ++++++++++++++++
- drivers/power/power_supply.h | 42 +++
- drivers/power/power_supply_core.c | 168 +++++++++++++
- drivers/power/power_supply_leds.c | 188 ++++++++++++++
- drivers/power/power_supply_sysfs.c | 289 ++++++++++++++++++++++
- drivers/power/simpad-battery.c | 242 ++++++++++++++++++
- include/linux/power_supply.h | 175 +++++++++++++
- 18 files changed, 3244 insertions(+)
-
-Index: linux-2.6.22/drivers/power/adc_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/adc_battery.c 2007-08-23 12:26:28.000000000 +0200
-@@ -0,0 +1,278 @@
-+/*
-+ * Copyright (c) 2007 Paul Sokolovsky
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ */
-+
-+//#define DEBUG
-+
-+#include <linux/module.h>
-+#include <linux/interrupt.h>
-+#include <linux/pm.h>
-+#include <linux/delay.h>
-+#include <linux/workqueue.h>
-+#include <linux/platform_device.h>
-+#include <linux/power_supply.h>
-+#include <linux/adc.h>
-+#include <linux/adc_battery.h>
-+
-+#include <asm/irq.h>
-+
-+#define PIN_NO_VOLT 0
-+#define PIN_NO_CURR 1
-+#define PIN_NO_TEMP 2
-+
-+struct battery_adc_priv {
-+ struct power_supply batt_cdev;
-+
-+ struct battery_adc_platform_data *pdata;
-+
-+ struct adc_request req;
-+ struct adc_sense pins[3];
-+ struct adc_sense last_good_pins[3];
-+
-+ struct workqueue_struct *wq;
-+ struct delayed_work work;
-+};
-+
-+/*
-+ * Battery properties
-+ */
-+
-+static int adc_battery_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ struct battery_adc_priv* drvdata = (struct battery_adc_priv*)psy;
-+ int voltage;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ val->intval = drvdata->pdata->charge_status;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.voltage_max_design;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.voltage_min_design;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.charge_full_design;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.charge_empty_design;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-+ val->intval = drvdata->last_good_pins[PIN_NO_VOLT].value * drvdata->pdata->voltage_mult;
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_NOW:
-+ val->intval = drvdata->last_good_pins[PIN_NO_CURR].value * drvdata->pdata->current_mult;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_NOW:
-+ /* We do calculations in mX, not uX, because todo it in uX we should use "long long"s,
-+ * which is a mess (need to use do_div) when you need divide operation). */
-+ voltage = drvdata->last_good_pins[PIN_NO_VOLT].value * drvdata->pdata->voltage_mult;
-+ val->intval = ((voltage/1000 - drvdata->pdata->battery_info.voltage_min_design/1000) *
-+ (drvdata->pdata->battery_info.charge_full_design/1000 -
-+ drvdata->pdata->battery_info.charge_empty_design/1000)) /
-+ (drvdata->pdata->battery_info.voltage_max_design/1000 -
-+ drvdata->pdata->battery_info.voltage_min_design/1000);
-+ val->intval *= 1000; /* convert final result to uX */
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = drvdata->last_good_pins[PIN_NO_TEMP].value * drvdata->pdata->temperature_mult / 1000;
-+ break;
-+ default:
-+ return -EINVAL;
-+ };
-+ return 0;
-+}
-+
-+/*
-+ * Driver body
-+ */
-+
-+static void adc_battery_query(struct battery_adc_priv *drvdata)
-+{
-+ struct battery_adc_platform_data *pdata = drvdata->pdata;
-+ int powered, charging;
-+
-+ adc_request_sample(&drvdata->req);
-+
-+ powered = power_supply_am_i_supplied(&drvdata->batt_cdev);
-+ charging = pdata->is_charging ? pdata->is_charging() : -1;
-+
-+ if (powered && charging)
-+ pdata->charge_status = POWER_SUPPLY_STATUS_CHARGING;
-+ else if (powered && !charging && charging != -1)
-+ pdata->charge_status = POWER_SUPPLY_STATUS_FULL;
-+ else
-+ pdata->charge_status = POWER_SUPPLY_STATUS_DISCHARGING;
-+
-+ /* Throw away invalid samples, this may happen soon after resume for example. */
-+ if (drvdata->pins[PIN_NO_VOLT].value > 0) {
-+ memcpy(drvdata->last_good_pins, drvdata->pins, sizeof(drvdata->pins));
-+#ifdef DEBUG
-+ printk("%d %d %d\n", drvdata->pins[PIN_NO_VOLT].value,
-+ drvdata->pins[PIN_NO_CURR].value,
-+ drvdata->pins[PIN_NO_TEMP].value);
-+#endif
-+ }
-+}
-+
-+static void adc_battery_charge_power_changed(struct power_supply *bat)
-+{
-+ struct battery_adc_priv *drvdata = (struct battery_adc_priv*)bat;
-+ cancel_delayed_work(&drvdata->work);
-+ queue_delayed_work(drvdata->wq, &drvdata->work, 0);
-+}
-+
-+static void adc_battery_work_func(struct work_struct *work)
-+{
-+ struct delayed_work *delayed_work = container_of(work, struct delayed_work, work);
-+ struct battery_adc_priv *drvdata = container_of(delayed_work, struct battery_adc_priv, work);
-+
-+ adc_battery_query(drvdata);
-+ power_supply_changed(&drvdata->batt_cdev);
-+
-+ queue_delayed_work(drvdata->wq, &drvdata->work, (5000 * HZ) / 1000);
-+}
-+
-+static int adc_battery_probe(struct platform_device *pdev)
-+{
-+ int retval;
-+ struct battery_adc_platform_data *pdata = pdev->dev.platform_data;
-+ struct battery_adc_priv *drvdata;
-+ int i, j;
-+ enum power_supply_property props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+ POWER_SUPPLY_PROP_CURRENT_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN,
-+ POWER_SUPPLY_PROP_TEMP,
-+ };
-+
-+ // Initialize ts data structure.
-+ drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
-+ if (!drvdata)
-+ return -ENOMEM;
-+
-+ drvdata->batt_cdev.name = pdata->battery_info.name;
-+ drvdata->batt_cdev.use_for_apm = pdata->battery_info.use_for_apm;
-+ drvdata->batt_cdev.num_properties = ARRAY_SIZE(props);
-+ drvdata->batt_cdev.get_property = adc_battery_get_property;
-+ drvdata->batt_cdev.external_power_changed =
-+ adc_battery_charge_power_changed;
-+
-+ if (!pdata->voltage_pin) {
-+ drvdata->batt_cdev.num_properties--;
-+ props[3] = -1;
-+ }
-+ if (!pdata->current_pin) {
-+ drvdata->batt_cdev.num_properties--;
-+ props[4] = -1;
-+ }
-+ if (!pdata->temperature_pin) {
-+ drvdata->batt_cdev.num_properties--;
-+ props[8] = -1;
-+ }
-+
-+ drvdata->batt_cdev.properties = kmalloc(
-+ sizeof(*drvdata->batt_cdev.properties) *
-+ drvdata->batt_cdev.num_properties, GFP_KERNEL);
-+ if (!drvdata->batt_cdev.properties)
-+ return -ENOMEM;
-+
-+ j = 0;
-+ for (i = 0; i < ARRAY_SIZE(props); i++) {
-+ if (props[i] == -1)
-+ continue;
-+ drvdata->batt_cdev.properties[j++] = props[i];
-+ }
-+
-+ retval = power_supply_register(&pdev->dev, &drvdata->batt_cdev);
-+ if (retval) {
-+ printk("adc-battery: Error registering battery classdev");
-+ return retval;
-+ }
-+
-+ drvdata->req.senses = drvdata->pins;
-+ drvdata->req.num_senses = ARRAY_SIZE(drvdata->pins);
-+ drvdata->pins[PIN_NO_VOLT].name = pdata->voltage_pin;
-+ drvdata->pins[PIN_NO_CURR].name = pdata->current_pin;
-+ drvdata->pins[PIN_NO_TEMP].name = pdata->temperature_pin;
-+
-+ adc_request_register(&drvdata->req);
-+
-+ /* Here we assume raw values in mV */
-+ if (!pdata->voltage_mult)
-+ pdata->voltage_mult = 1000;
-+ /* Here we assume raw values in mA */
-+ if (!pdata->current_mult)
-+ pdata->current_mult = 1000;
-+ /* Here we assume raw values in 1/10 C */
-+ if (!pdata->temperature_mult)
-+ pdata->temperature_mult = 1000;
-+
-+ drvdata->pdata = pdata;
-+ pdata->drvdata = drvdata; /* Seems ugly, we need better solution */
-+
-+ platform_set_drvdata(pdev, drvdata);
-+
-+ // Load initial values ASAP
-+ adc_battery_query(drvdata);
-+
-+ // Still schedule next sampling soon
-+ INIT_DELAYED_WORK(&drvdata->work, adc_battery_work_func);
-+ drvdata->wq = create_workqueue(pdev->dev.bus_id);
-+ if (!drvdata->wq)
-+ return -ESRCH;
-+
-+ queue_delayed_work(drvdata->wq, &drvdata->work, (5000 * HZ) / 1000);
-+
-+ return retval;
-+}
-+
-+static int adc_battery_remove(struct platform_device *pdev)
-+{
-+ struct battery_adc_priv *drvdata = platform_get_drvdata(pdev);
-+ cancel_delayed_work(&drvdata->work);
-+ destroy_workqueue(drvdata->wq);
-+ power_supply_unregister(&drvdata->batt_cdev);
-+ adc_request_unregister(&drvdata->req);
-+ kfree(drvdata->batt_cdev.properties);
-+ return 0;
-+}
-+
-+static struct platform_driver adc_battery_driver = {
-+ .driver = {
-+ .name = "adc-battery",
-+ },
-+ .probe = adc_battery_probe,
-+ .remove = adc_battery_remove,
-+};
-+
-+static int __init adc_battery_init(void)
-+{
-+ return platform_driver_register(&adc_battery_driver);
-+}
-+
-+static void __exit adc_battery_exit(void)
-+{
-+ platform_driver_unregister(&adc_battery_driver);
-+}
-+
-+module_init(adc_battery_init)
-+module_exit(adc_battery_exit)
-+
-+MODULE_AUTHOR("Paul Sokolovsky");
-+MODULE_DESCRIPTION("Battery driver for ADC device");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/drivers/power/apm_power.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/apm_power.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,247 @@
-+/*
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2007 Eugeny Boger <eugenyboger@dgap.mipt.ru>
-+ *
-+ * Author: Eugeny Boger <eugenyboger@dgap.mipt.ru>
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/power_supply.h>
-+#include <linux/apm-emulation.h>
-+
-+#define PSY_PROP(psy, prop, val) psy->get_property(psy, \
-+ POWER_SUPPLY_PROP_##prop, val)
-+
-+#define _MPSY_PROP(prop, val) main_battery->get_property(main_battery, \
-+ prop, val)
-+
-+#define MPSY_PROP(prop, val) _MPSY_PROP(POWER_SUPPLY_PROP_##prop, val)
-+
-+static struct power_supply *main_battery;
-+
-+static void find_main_battery(void)
-+{
-+ struct device *dev;
-+ struct power_supply *bat, *batm;
-+ union power_supply_propval full;
-+ int max_charge = 0;
-+
-+ main_battery = NULL;
-+ batm = NULL;
-+ list_for_each_entry(dev, &power_supply_class->devices, node) {
-+ bat = dev_get_drvdata(dev);
-+ /* If none of battery devices cantains 'use_for_apm' flag,
-+ choice one with maximum design charge */
-+ if (!PSY_PROP(bat, CHARGE_FULL_DESIGN, &full)) {
-+ if (full.intval > max_charge) {
-+ batm = bat;
-+ max_charge = full.intval;
-+ }
-+ }
-+
-+ if (bat->use_for_apm)
-+ main_battery = bat;
-+ }
-+ if (!main_battery)
-+ main_battery = batm;
-+
-+ return;
-+}
-+
-+static int calculate_time(int status)
-+{
-+ union power_supply_propval charge_full, charge_empty;
-+ union power_supply_propval charge, I;
-+
-+ if (MPSY_PROP(CHARGE_FULL, &charge_full)) {
-+ /* if battery can't report this property, use design value */
-+ if (MPSY_PROP(CHARGE_FULL_DESIGN, &charge_full))
-+ return -1;
-+ }
-+
-+ if (MPSY_PROP(CHARGE_EMPTY, &charge_empty)) {
-+ /* if battery can't report this property, use design value */
-+ if (MPSY_PROP(CHARGE_EMPTY_DESIGN, &charge_empty))
-+ charge_empty.intval = 0;
-+ }
-+
-+ if (MPSY_PROP(CHARGE_AVG, &charge)) {
-+ /* if battery can't report average value, use momentary */
-+ if (MPSY_PROP(CHARGE_NOW, &charge))
-+ return -1;
-+ }
-+
-+ if (MPSY_PROP(CURRENT_AVG, &I)) {
-+ /* if battery can't report average value, use momentary */
-+ if (MPSY_PROP(CURRENT_NOW, &I))
-+ return -1;
-+ }
-+
-+ if (I.intval == 0)
-+ return 0;
-+ else if (status == POWER_SUPPLY_STATUS_CHARGING)
-+ return ((charge.intval - charge_full.intval) * 60L) /
-+ I.intval;
-+ else
-+ return -((charge.intval - charge_empty.intval) * 60L) /
-+ I.intval;
-+}
-+
-+static int calculate_capacity(int using_charge)
-+{
-+ enum power_supply_property full_prop, empty_prop;
-+ enum power_supply_property full_design_prop, empty_design_prop;
-+ enum power_supply_property now_prop, avg_prop;
-+ union power_supply_propval empty, full, cur;
-+ int ret;
-+
-+ if (using_charge) {
-+ full_prop = POWER_SUPPLY_PROP_CHARGE_FULL;
-+ empty_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY;
-+ full_design_prop = POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN;
-+ empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN;
-+ now_prop = POWER_SUPPLY_PROP_CHARGE_NOW;
-+ avg_prop = POWER_SUPPLY_PROP_CHARGE_AVG;
-+ }
-+ else {
-+ full_prop = POWER_SUPPLY_PROP_ENERGY_FULL;
-+ empty_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY;
-+ full_design_prop = POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN;
-+ empty_design_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN;
-+ now_prop = POWER_SUPPLY_PROP_ENERGY_NOW;
-+ avg_prop = POWER_SUPPLY_PROP_ENERGY_AVG;
-+ }
-+
-+ if (_MPSY_PROP(full_prop, &full)) {
-+ /* if battery can't report this property, use design value */
-+ if (_MPSY_PROP(full_design_prop, &full))
-+ return -1;
-+ }
-+
-+ if (_MPSY_PROP(avg_prop, &cur)) {
-+ /* if battery can't report average value, use momentary */
-+ if (_MPSY_PROP(now_prop, &cur))
-+ return -1;
-+ }
-+
-+ if (_MPSY_PROP(empty_prop, &empty)) {
-+ /* if battery can't report this property, use design value */
-+ if (_MPSY_PROP(empty_design_prop, &empty))
-+ empty.intval = 0;
-+ }
-+
-+ if (full.intval - empty.intval)
-+ ret = ((cur.intval - empty.intval) * 100L) /
-+ (full.intval - empty.intval);
-+ else
-+ return -1;
-+
-+ if (ret > 100)
-+ return 100;
-+ else if (ret < 0)
-+ return 0;
-+
-+ return ret;
-+}
-+
-+static void apm_battery_apm_get_power_status(struct apm_power_info *info)
-+{
-+ union power_supply_propval status;
-+ union power_supply_propval capacity, time_to_full, time_to_empty;
-+
-+ down(&power_supply_class->sem);
-+ find_main_battery();
-+ if (!main_battery) {
-+ up(&power_supply_class->sem);
-+ return;
-+ }
-+
-+ /* status */
-+
-+ if (MPSY_PROP(STATUS, &status))
-+ status.intval = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ /* ac line status */
-+
-+ if ((status.intval == POWER_SUPPLY_STATUS_CHARGING) ||
-+ (status.intval == POWER_SUPPLY_STATUS_NOT_CHARGING) ||
-+ (status.intval == POWER_SUPPLY_STATUS_FULL))
-+ info->ac_line_status = APM_AC_ONLINE;
-+ else
-+ info->ac_line_status = APM_AC_OFFLINE;
-+
-+ /* battery life (i.e. capacity, in percents) */
-+
-+ if (MPSY_PROP(CAPACITY, &capacity) == 0)
-+ info->battery_life = capacity.intval;
-+ else {
-+ /* try calculate using energy */
-+ info->battery_life = calculate_capacity(0);
-+ /* if failed try calculate using charge instead */
-+ if (info->battery_life == -1)
-+ info->battery_life = calculate_capacity(1);
-+ }
-+
-+ /* charging status */
-+
-+ if (status.intval == POWER_SUPPLY_STATUS_CHARGING)
-+ info->battery_status = APM_BATTERY_STATUS_CHARGING;
-+ else {
-+ if (info->battery_life > 50)
-+ info->battery_status = APM_BATTERY_STATUS_HIGH;
-+ else if (info->battery_life > 5)
-+ info->battery_status = APM_BATTERY_STATUS_LOW;
-+ else
-+ info->battery_status = APM_BATTERY_STATUS_CRITICAL;
-+ }
-+ info->battery_flag = info->battery_status;
-+
-+ /* time */
-+
-+ info->units = APM_UNITS_MINS;
-+
-+ if (status.intval == POWER_SUPPLY_STATUS_CHARGING) {
-+ if (MPSY_PROP(TIME_TO_FULL_AVG, &time_to_full)) {
-+ if (MPSY_PROP(TIME_TO_FULL_NOW, &time_to_full))
-+ info->time = calculate_time(status.intval);
-+ else
-+ info->time = time_to_full.intval / 60;
-+ }
-+ }
-+ else {
-+ if (MPSY_PROP(TIME_TO_EMPTY_AVG, &time_to_empty)) {
-+ if (MPSY_PROP(TIME_TO_EMPTY_NOW, &time_to_empty))
-+ info->time = calculate_time(status.intval);
-+ else
-+ info->time = time_to_empty.intval / 60;
-+ }
-+ }
-+
-+ up(&power_supply_class->sem);
-+ return;
-+}
-+
-+static int __init apm_battery_init(void)
-+{
-+ printk(KERN_INFO "APM Battery Driver\n");
-+
-+ apm_get_power_status = apm_battery_apm_get_power_status;
-+ return 0;
-+}
-+
-+static void __exit apm_battery_exit(void)
-+{
-+ apm_get_power_status = NULL;
-+ return;
-+}
-+
-+module_init(apm_battery_init);
-+module_exit(apm_battery_exit);
-+
-+MODULE_AUTHOR("Eugeny Boger <eugenyboger@dgap.mipt.ru>");
-+MODULE_DESCRIPTION("APM emulation driver for battery monitoring class");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/drivers/power/ds2760_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/ds2760_battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,475 @@
-+/*
-+ * Driver for batteries with DS2760 chips inside.
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov
-+ * 2004-2007 Matt Reimer
-+ * 2004 Szabolcs Gyurko
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ * Author: Anton Vorontsov <cbou@mail.ru>
-+ * February 2007
-+ *
-+ * Matt Reimer <mreimer@vpop.net>
-+ * April 2004, 2005, 2007
-+ *
-+ * Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>
-+ * September 2004
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/param.h>
-+#include <linux/jiffies.h>
-+#include <linux/workqueue.h>
-+#include <linux/pm.h>
-+#include <linux/platform_device.h>
-+#include <linux/power_supply.h>
-+
-+#include "../w1/w1.h"
-+#include "../w1/slaves/w1_ds2760.h"
-+
-+struct ds2760_device_info {
-+ struct device *dev;
-+
-+ /* DS2760 data, valid after calling ds2760_battery_read_status() */
-+ unsigned long update_time; /* jiffies when data read */
-+ char raw[DS2760_DATA_SIZE]; /* raw DS2760 data */
-+ int voltage_raw; /* units of 4.88 mV */
-+ int voltage_uV; /* units of uV */
-+ int current_raw; /* units of 0.625 mA */
-+ int current_uA; /* units of uA */
-+ int accum_current_raw; /* units of 0.25 mAh */
-+ int accum_current_uAh; /* units of uAh */
-+ int temp_raw; /* units of 0.125 C */
-+ int temp_C; /* units of 0.1 C */
-+ int rated_capacity; /* units of uAh */
-+ int rem_capacity; /* percentage */
-+ int full_active_uAh; /* units of uAh */
-+ int empty_uAh; /* units of uAh */
-+ int life_sec; /* units of seconds */
-+ int charge_status; /* POWER_SUPPLY_STATUS_* */
-+
-+ int full_counter;
-+ struct power_supply bat;
-+ struct device *w1_dev;
-+ struct workqueue_struct *monitor_wqueue;
-+ struct delayed_work monitor_work;
-+};
-+
-+static unsigned int cache_time = 1000;
-+module_param(cache_time, uint, 0644);
-+MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
-+
-+/* Some batteries have their rated capacity stored a N * 10 mAh, while
-+ * others use an index into this table. */
-+static int rated_capacities[] = {
-+ 0,
-+ 920, /* Samsung */
-+ 920, /* BYD */
-+ 920, /* Lishen */
-+ 920, /* NEC */
-+ 1440, /* Samsung */
-+ 1440, /* BYD */
-+ 1440, /* Lishen */
-+ 1440, /* NEC */
-+ 2880, /* Samsung */
-+ 2880, /* BYD */
-+ 2880, /* Lishen */
-+ 2880 /* NEC */
-+};
-+
-+/* array is level at temps 0C, 10C, 20C, 30C, 40C
-+ * temp is in Celsius */
-+static int battery_interpolate(int array[], int temp)
-+{
-+ int index, dt;
-+
-+ if (temp <= 0)
-+ return array[0];
-+ if (temp >= 40)
-+ return array[4];
-+
-+ index = temp / 10;
-+ dt = temp % 10;
-+
-+ return array[index] + (((array[index + 1] - array[index]) * dt) / 10);
-+}
-+
-+static int ds2760_battery_read_status(struct ds2760_device_info *di)
-+{
-+ int ret, i, start, count, scale[5];
-+
-+ if (di->update_time && time_before(jiffies, di->update_time +
-+ msecs_to_jiffies(cache_time)))
-+ return 0;
-+
-+ /* The first time we read the entire contents of SRAM/EEPROM,
-+ * but after that we just read the interesting bits that change. */
-+ if (di->update_time == 0) {
-+ start = 0;
-+ count = DS2760_DATA_SIZE;
-+ }
-+ else {
-+ start = DS2760_VOLTAGE_MSB;
-+ count = DS2760_TEMP_LSB - start + 1;
-+ }
-+
-+ ret = w1_ds2760_read(di->w1_dev, di->raw + start, start, count);
-+ if (ret != count) {
-+ dev_warn(di->dev, "call to w1_ds2760_read failed (0x%p)\n",
-+ di->w1_dev);
-+ return 1;
-+ }
-+
-+ di->update_time = jiffies;
-+
-+ /* DS2760 reports voltage in units of 4.88mV, but the battery class
-+ * reports in units of uV, so convert by multiplying by 4880. */
-+ di->voltage_raw = (di->raw[DS2760_VOLTAGE_MSB] << 3) |
-+ (di->raw[DS2760_VOLTAGE_LSB] >> 5);
-+ di->voltage_uV = di->voltage_raw * 4880;
-+
-+ /* DS2760 reports current in signed units of 0.625mA, but the battery
-+ * class reports in units of uA, so convert by multiplying by 625. */
-+ di->current_raw =
-+ (((signed char)di->raw[DS2760_CURRENT_MSB]) << 5) |
-+ (di->raw[DS2760_CURRENT_LSB] >> 3);
-+ di->current_uA = di->current_raw * 625;
-+
-+ /* DS2760 reports accumulated current in signed units of 0.25mAh. */
-+ di->accum_current_raw =
-+ (((signed char)di->raw[DS2760_CURRENT_ACCUM_MSB]) << 8) |
-+ di->raw[DS2760_CURRENT_ACCUM_LSB];
-+ di->accum_current_uAh = di->accum_current_raw * 250;
-+
-+ /* DS2760 reports temperature in signed units of 0.125C, but the
-+ * battery class reports in units of 1/10 C, so we convert by
-+ * multiplying by .125 * 10 = 1.25. */
-+ di->temp_raw = (((signed char)di->raw[DS2760_TEMP_MSB]) << 3) |
-+ (di->raw[DS2760_TEMP_LSB] >> 5);
-+ di->temp_C = di->temp_raw + (di->temp_raw / 4);
-+
-+ /* At least some battery monitors (e.g. HP iPAQ) store the battery's
-+ * maximum rated capacity. */
-+ if (di->raw[DS2760_RATED_CAPACITY] < ARRAY_SIZE(rated_capacities))
-+ di->rated_capacity = rated_capacities[
-+ (unsigned int)di->raw[DS2760_RATED_CAPACITY]];
-+ else
-+ di->rated_capacity = di->raw[DS2760_RATED_CAPACITY] * 10;
-+
-+ di->rated_capacity *= 1000; /* convert to uAh */
-+
-+ /* Calculate the full level at the present temperature. */
-+ di->full_active_uAh = di->raw[DS2760_ACTIVE_FULL] << 8 |
-+ di->raw[DS2760_ACTIVE_FULL + 1];
-+
-+ scale[0] = di->raw[DS2760_ACTIVE_FULL] << 8 |
-+ di->raw[DS2760_ACTIVE_FULL + 1];
-+ for (i = 1; i < 5; i++)
-+ scale[i] = scale[i - 1] + di->raw[DS2760_ACTIVE_FULL + 2 + i];
-+
-+ di->full_active_uAh = battery_interpolate(scale, di->temp_C / 10);
-+ di->full_active_uAh *= 1000; /* convert to uAh */
-+
-+ /* Calculate the empty level at the present temperature. */
-+ scale[4] = di->raw[DS2760_ACTIVE_EMPTY + 4];
-+ for (i = 3; i >= 0; i--)
-+ scale[i] = scale[i + 1] + di->raw[DS2760_ACTIVE_EMPTY + i];
-+
-+ di->empty_uAh = battery_interpolate(scale, di->temp_C / 10);
-+ di->empty_uAh *= 1000; /* convert to uAh */
-+
-+ /* From Maxim Application Note 131: remaining capacity =
-+ * ((ICA - Empty Value) / (Full Value - Empty Value)) x 100% */
-+ di->rem_capacity = ((di->accum_current_uAh - di->empty_uAh) * 100L) /
-+ (di->full_active_uAh - di->empty_uAh);
-+
-+ if (di->rem_capacity < 0)
-+ di->rem_capacity = 0;
-+ if (di->rem_capacity > 100)
-+ di->rem_capacity = 100;
-+
-+ if (di->current_uA)
-+ di->life_sec = -((di->accum_current_uAh - di->empty_uAh) *
-+ 3600L) / di->current_uA;
-+ else
-+ di->life_sec = 0;
-+
-+ return 0;
-+}
-+
-+static void ds2760_battery_update_status(struct ds2760_device_info *di)
-+{
-+ int old_charge_status = di->charge_status;
-+
-+ ds2760_battery_read_status(di);
-+
-+ if (di->charge_status == POWER_SUPPLY_STATUS_UNKNOWN)
-+ di->full_counter = 0;
-+
-+ if (power_supply_am_i_supplied(&di->bat)) {
-+ if (di->current_uA > 10000) {
-+ di->charge_status = POWER_SUPPLY_STATUS_CHARGING;
-+ di->full_counter = 0;
-+ }
-+ else if (di->current_uA < -5000) {
-+ if (di->charge_status != POWER_SUPPLY_STATUS_NOT_CHARGING)
-+ dev_notice(di->dev, "not enough power to "
-+ "charge\n");
-+ di->charge_status = POWER_SUPPLY_STATUS_NOT_CHARGING;
-+ di->full_counter = 0;
-+ }
-+ else if (di->current_uA < 10000 &&
-+ di->charge_status != POWER_SUPPLY_STATUS_FULL) {
-+
-+ /* Don't consider the battery to be full unless
-+ * we've seen the current < 10 mA at least two
-+ * consecutive times. */
-+
-+ di->full_counter++;
-+
-+ if (di->full_counter < 2)
-+ di->charge_status = POWER_SUPPLY_STATUS_CHARGING;
-+ else {
-+ unsigned char acr[2];
-+ int acr_val;
-+
-+ /* acr is in units of 0.25 mAh */
-+ acr_val = di->full_active_uAh * 4L / 1000;
-+
-+ acr[0] = acr_val >> 8;
-+ acr[1] = acr_val & 0xff;
-+
-+ if (w1_ds2760_write(di->w1_dev, acr,
-+ DS2760_CURRENT_ACCUM_MSB, 2) < 2)
-+ dev_warn(di->dev,
-+ "ACR reset failed\n");
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_FULL;
-+ }
-+ }
-+ }
-+ else {
-+ di->charge_status = POWER_SUPPLY_STATUS_DISCHARGING;
-+ di->full_counter = 0;
-+ }
-+
-+ if (di->charge_status != old_charge_status)
-+ power_supply_changed(&di->bat);
-+
-+ return;
-+}
-+
-+static void ds2760_battery_work(struct work_struct *work)
-+{
-+ struct ds2760_device_info *di = container_of(work,
-+ struct ds2760_device_info, monitor_work.work);
-+ const int interval = HZ * 60;
-+
-+ dev_dbg(di->dev, "%s\n", __FUNCTION__);
-+
-+ ds2760_battery_update_status(di);
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, interval);
-+
-+ return;
-+}
-+
-+#define to_ds2760_device_info(x) container_of((x), struct ds2760_device_info, \
-+ bat);
-+
-+static void ds2760_battery_external_power_changed(struct power_supply *psy)
-+{
-+ struct ds2760_device_info *di = to_ds2760_device_info(psy);
-+
-+ dev_dbg(di->dev, "%s\n", __FUNCTION__);
-+
-+ cancel_delayed_work(&di->monitor_work);
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ/10);
-+
-+ return;
-+}
-+
-+static int ds2760_battery_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ struct ds2760_device_info *di = to_ds2760_device_info(psy);
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ val->intval = di->charge_status;
-+ return 0;
-+ default:
-+ break;
-+ }
-+
-+ ds2760_battery_read_status(di);
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-+ val->intval = di->voltage_uV;
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_NOW:
-+ val->intval = di->current_uA;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
-+ val->intval = di->rated_capacity;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_FULL:
-+ val->intval = di->full_active_uAh;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_EMPTY:
-+ val->intval = di->empty_uAh;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_NOW:
-+ val->intval = di->accum_current_uAh;
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = di->temp_C;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property ds2760_battery_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+ POWER_SUPPLY_PROP_CURRENT_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_FULL,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY,
-+ POWER_SUPPLY_PROP_CHARGE_NOW,
-+ POWER_SUPPLY_PROP_TEMP,
-+};
-+
-+static int ds2760_battery_probe(struct platform_device *pdev)
-+{
-+ int retval = 0;
-+ struct ds2760_device_info *di;
-+ struct ds2760_platform_data *pdata;
-+
-+ di = kzalloc(sizeof(*di), GFP_KERNEL);
-+ if (!di) {
-+ retval = -ENOMEM;
-+ goto di_alloc_failed;
-+ }
-+
-+ platform_set_drvdata(pdev, di);
-+
-+ pdata = pdev->dev.platform_data;
-+ di->dev = &pdev->dev;
-+ di->w1_dev = pdev->dev.parent;
-+ di->bat.name = pdev->dev.bus_id;
-+ di->bat.type = POWER_SUPPLY_TYPE_BATTERY;
-+ di->bat.properties = ds2760_battery_props;
-+ di->bat.num_properties = ARRAY_SIZE(ds2760_battery_props);
-+ di->bat.get_property = ds2760_battery_get_property;
-+ di->bat.external_power_changed =
-+ ds2760_battery_external_power_changed;
-+ di->bat.use_for_apm = 1;
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ retval = power_supply_register(&pdev->dev, &di->bat);
-+ if (retval) {
-+ dev_err(di->dev, "failed to register battery");
-+ goto batt_failed;
-+ }
-+
-+ INIT_DELAYED_WORK(&di->monitor_work, ds2760_battery_work);
-+ di->monitor_wqueue = create_singlethread_workqueue(pdev->dev.bus_id);
-+ if (!di->monitor_wqueue) {
-+ retval = -ESRCH;
-+ goto workqueue_failed;
-+ }
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ * 1);
-+
-+ goto success;
-+
-+workqueue_failed:
-+ power_supply_unregister(&di->bat);
-+batt_failed:
-+ kfree(di);
-+di_alloc_failed:
-+success:
-+ return retval;
-+}
-+
-+static int ds2760_battery_remove(struct platform_device *pdev)
-+{
-+ struct ds2760_device_info *di = platform_get_drvdata(pdev);
-+
-+ cancel_rearming_delayed_workqueue(di->monitor_wqueue,
-+ &di->monitor_work);
-+ destroy_workqueue(di->monitor_wqueue);
-+ power_supply_unregister(&di->bat);
-+
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+
-+static int ds2760_battery_suspend(struct platform_device *pdev,
-+ pm_message_t state)
-+{
-+ struct ds2760_device_info *di = platform_get_drvdata(pdev);
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ return 0;
-+}
-+
-+static int ds2760_battery_resume(struct platform_device *pdev)
-+{
-+ struct ds2760_device_info *di = platform_get_drvdata(pdev);
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN;
-+ power_supply_changed(&di->bat);
-+
-+ cancel_delayed_work(&di->monitor_work);
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ);
-+
-+ return 0;
-+}
-+
-+#else
-+
-+#define ds2760_battery_suspend NULL
-+#define ds2760_battery_resume NULL
-+
-+#endif /* CONFIG_PM */
-+
-+static struct platform_driver ds2760_battery_driver = {
-+ .driver = {
-+ .name = "ds2760-battery",
-+ },
-+ .probe = ds2760_battery_probe,
-+ .remove = ds2760_battery_remove,
-+ .suspend = ds2760_battery_suspend,
-+ .resume = ds2760_battery_resume,
-+};
-+
-+static int __init ds2760_battery_init(void)
-+{
-+ return platform_driver_register(&ds2760_battery_driver);
-+}
-+
-+static void __exit ds2760_battery_exit(void)
-+{
-+ platform_driver_unregister(&ds2760_battery_driver);
-+ return;
-+}
-+
-+module_init(ds2760_battery_init);
-+module_exit(ds2760_battery_exit);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>, "
-+ "Matt Reimer <mreimer@vpop.net>, "
-+ "Anton Vorontsov <cbou@mail.ru>");
-+MODULE_DESCRIPTION("ds2760 battery driver");
-Index: linux-2.6.22/drivers/power/Kconfig
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/Kconfig 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,70 @@
-+menuconfig POWER_SUPPLY
-+ tristate "Power supply class support"
-+ help
-+ Say Y here to enable power supply class support. This allows
-+ power supply (batteries, AC, USB) monitoring by userspace
-+ via sysfs and uevent (if available) and/or APM kernel interface
-+ (if selected below).
-+
-+if POWER_SUPPLY
-+
-+config POWER_SUPPLY_DEBUG
-+ bool "Power supply debug"
-+ help
-+ Say Y here to enable debugging messages for power supply class
-+ and drivers.
-+
-+config PDA_POWER
-+ tristate "Generic PDA/phone power driver"
-+ help
-+ Say Y here to enable generic power driver for PDAs and phones with
-+ one or two external power supplies (AC/USB) connected to main and
-+ backup batteries, and optional builtin charger.
-+
-+config APM_POWER
-+ tristate "APM emulation for class batteries"
-+ depends on APM_EMULATION
-+ help
-+ Say Y here to enable support APM status emulation using
-+ battery class devices.
-+
-+config BATTERY_DS2760
-+ tristate "DS2760 battery driver (HP iPAQ & others)"
-+ select W1
-+ select W1_SLAVE_DS2760
-+ help
-+ Say Y here to enable support for batteries with ds2760 chip.
-+
-+config BATTERY_PMU
-+ tristate "Apple PMU battery"
-+ depends on ADB_PMU
-+ help
-+ Say Y here to expose battery information on Apple machines
-+ through the generic battery class.
-+
-+config BATTERY_OLPC
-+ tristate "One Laptop Per Child battery"
-+ depends on X86_32
-+ help
-+ Say Y to enable support for the battery on the OLPC laptop.
-+
-+# drivers below are not in battery2-2.6 tree
-+
-+config ADC_BATTERY
-+ tristate "Generic ADC battery driver"
-+ depends on ADC && POWER_SUPPLY
-+ help
-+ Say Y here to enable support for battery monitoring using generic ADC device.
-+
-+config IPAQ_MICRO_BATTERY
-+ tristate "HP iPAQ Micro ASIC battery driver"
-+ depends on IPAQ_MICRO && POWER_SUPPLY
-+ help
-+ Choose this option if you want to monitor battery status on
-+ Compaq/HP iPAQ h3100 h3600
-+
-+config MCP_UCB1x00_SIMPAD_BATTERY
-+ tristate "SIMpad Battery Reading Support"
-+ depends on MCP_UCB1x00 && POWER_SUPPLY
-+
-+endif # POWER_SUPPLY
-Index: linux-2.6.22/drivers/power/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/Makefile 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,28 @@
-+power_supply-objs := power_supply_core.o
-+
-+ifeq ($(CONFIG_SYSFS),y)
-+power_supply-objs += power_supply_sysfs.o
-+endif
-+
-+ifeq ($(CONFIG_LEDS_TRIGGERS),y)
-+power_supply-objs += power_supply_leds.o
-+endif
-+
-+ifeq ($(CONFIG_POWER_SUPPLY_DEBUG),y)
-+EXTRA_CFLAGS += -DDEBUG
-+endif
-+
-+obj-$(CONFIG_POWER_SUPPLY) += power_supply.o
-+
-+obj-$(CONFIG_PDA_POWER) += pda_power.o
-+obj-$(CONFIG_APM_POWER) += apm_power.o
-+
-+obj-$(CONFIG_BATTERY_DS2760) += ds2760_battery.o
-+obj-$(CONFIG_BATTERY_PMU) += pmu_battery.o
-+obj-$(CONFIG_BATTERY_OLPC) += olpc_battery.o
-+
-+# drivers below are not in battery2-2.6 tree
-+
-+obj-$(CONFIG_ADC_BATTERY) += adc_battery.o
-+obj-$(CONFIG_IPAQ_MICRO_BATTERY) += micro_battery.o
-+obj-$(CONFIG_MCP_UCB1x00_SIMPAD_BATTERY) += simpad-battery.o
-Index: linux-2.6.22/drivers/power/micro_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/micro_battery.c 2007-08-23 12:25:20.000000000 +0200
-@@ -0,0 +1,257 @@
-+/*
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * h3600 atmel micro companion support, battery subdevice
-+ * based on previous kernel 2.4 version
-+ * Author : Alessandro Gardich <gremlin@gremlin.it>
-+ *
-+ */
-+
-+
-+#include <linux/module.h>
-+#include <linux/version.h>
-+
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <linux/interrupt.h>
-+#include <linux/sched.h>
-+#include <linux/pm.h>
-+#include <linux/sysctl.h>
-+#include <linux/proc_fs.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <linux/power_supply.h>
-+#include <linux/platform_device.h>
-+#include <linux/timer.h>
-+
-+#include <asm/arch/hardware.h>
-+
-+#include <asm/arch/h3600.h>
-+#include <asm/arch/SA-1100.h>
-+
-+#include <asm/hardware/micro.h>
-+
-+#define BATT_PERIOD 10*HZ
-+
-+#define H3600_BATT_STATUS_HIGH 0x01
-+#define H3600_BATT_STATUS_LOW 0x02
-+#define H3600_BATT_STATUS_CRITICAL 0x04
-+#define H3600_BATT_STATUS_CHARGING 0x08
-+#define H3600_BATT_STATUS_CHARGEMAIN 0x10
-+#define H3600_BATT_STATUS_DEAD 0x20 /* Battery will not charge */
-+#define H3600_BATT_STATUS_NOTINSTALLED 0x20 /* For expansion pack batteries */
-+#define H3600_BATT_STATUS_FULL 0x40 /* Battery fully charged (and connected to AC) */
-+#define H3600_BATT_STATUS_NOBATTERY 0x80
-+#define H3600_BATT_STATUS_UNKNOWN 0xff
-+
-+
-+//static struct power_supply_dev *micro_battery;
-+
-+static micro_private_t *p_micro;
-+
-+struct timer_list batt_timer;
-+
-+struct {
-+ int ac;
-+ int update_time;
-+ int chemistry;
-+ int voltage;
-+ int temperature;
-+ int flag;
-+} micro_battery;
-+
-+static void micro_battery_receive (int len, unsigned char *data) {
-+ if (0) {
-+ printk(KERN_ERR "h3600_battery - AC = %02x\n", data[0]);
-+ printk(KERN_ERR "h3600_battery - BAT1 chemistry = %02x\n", data[1]);
-+ printk(KERN_ERR "h3600_battery - BAT1 voltage = %d %02x%02x\n", (data[3]<<8)+data[2], data[2], data[3]);
-+ printk(KERN_ERR "h3600_battery - BAT1 status = %02x\n", data[4]);
-+ }
-+
-+ micro_battery.ac = data[0];
-+ micro_battery.chemistry = data[1];
-+ micro_battery.voltage = ((((unsigned short)data[3]<<8)+data[2]) * 5000L ) * 1000 / 1024;
-+ micro_battery.flag = data[4];
-+
-+ if (len == 9) {
-+ if (0) {
-+ printk(KERN_ERR "h3600_battery - BAT2 chemistry = %02x\n", data[5]);
-+ printk(KERN_ERR "h3600_battery - BAT2 voltage = %d %02x%02x\n", (data[7]<<8)+data[6], data[6], data[7]);
-+ printk(KERN_ERR "h3600_battery - BAT2 status = %02x\n", data[8]);
-+ }
-+ }
-+}
-+
-+static void micro_temperature_receive (int len, unsigned char *data) {
-+ micro_battery.temperature = ((unsigned short)data[1]<<8)+data[0];
-+}
-+
-+void h3600_battery_read_status(unsigned long data) {
-+
-+ if (++data % 2)
-+ h3600_micro_tx_msg(0x09,0,NULL);
-+ else
-+ h3600_micro_tx_msg(0x06,0,NULL);
-+
-+ batt_timer.expires += BATT_PERIOD;
-+ batt_timer.data = data;
-+
-+ add_timer(&batt_timer);
-+}
-+
-+int get_capacity(struct power_supply *b) {
-+ switch (micro_battery.flag) {
-+ case H3600_BATT_STATUS_HIGH : return 100; break;
-+ case H3600_BATT_STATUS_LOW : return 50; break;
-+ case H3600_BATT_STATUS_CRITICAL : return 5; break;
-+ default: break;
-+ }
-+ return 0;
-+}
-+
-+int get_status(struct power_supply *b) {
-+
-+ if (micro_battery.flag == H3600_BATT_STATUS_UNKNOWN)
-+ return POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ if (micro_battery.flag & H3600_BATT_STATUS_FULL)
-+ return POWER_SUPPLY_STATUS_FULL;
-+
-+ if ((micro_battery.flag & H3600_BATT_STATUS_CHARGING) ||
-+ (micro_battery.flag & H3600_BATT_STATUS_CHARGEMAIN))
-+ return POWER_SUPPLY_STATUS_CHARGING;
-+
-+ return POWER_SUPPLY_STATUS_DISCHARGING;
-+}
-+
-+static int micro_batt_get_property(struct power_supply *b,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ val->intval = get_status(b);
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
-+ val->intval = 4700000;
-+ break;
-+ case POWER_SUPPLY_PROP_CAPACITY:
-+ val->intval = get_capacity(b);
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = micro_battery.temperature;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-+ val->intval = micro_battery.voltage;
-+ break;
-+ default:
-+ return -EINVAL;
-+ };
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property micro_batt_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
-+ POWER_SUPPLY_PROP_CAPACITY,
-+ POWER_SUPPLY_PROP_TEMP,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+};
-+
-+static struct power_supply h3600_battery = {
-+ .name = "main-battery",
-+ .properties = micro_batt_props,
-+ .num_properties = ARRAY_SIZE(micro_batt_props),
-+ .get_property = micro_batt_get_property,
-+ .use_for_apm = 1,
-+};
-+
-+static int micro_batt_probe (struct platform_device *pdev)
-+{
-+ if (1) printk(KERN_ERR "micro battery probe : begin\n");
-+
-+ power_supply_register(&pdev->dev, &h3600_battery);
-+
-+ { /*--- callback ---*/
-+ p_micro = platform_get_drvdata(pdev);
-+ spin_lock(p_micro->lock);
-+ p_micro->h_batt = micro_battery_receive;
-+ p_micro->h_temp = micro_temperature_receive;
-+ spin_unlock(p_micro->lock);
-+ }
-+
-+ { /*--- timer ---*/
-+ init_timer(&batt_timer);
-+ batt_timer.expires = jiffies + BATT_PERIOD;
-+ batt_timer.data = 0;
-+ batt_timer.function = h3600_battery_read_status;
-+
-+ add_timer(&batt_timer);
-+ }
-+
-+ if (1) printk(KERN_ERR "micro battery probe : end\n");
-+ return 0;
-+}
-+
-+static int micro_batt_remove (struct platform_device *pdev)
-+{
-+ power_supply_unregister(&h3600_battery);
-+ { /*--- callback ---*/
-+ init_timer(&batt_timer);
-+ p_micro->h_batt = NULL;
-+ p_micro->h_temp = NULL;
-+ spin_unlock(p_micro->lock);
-+ }
-+ { /*--- timer ---*/
-+ del_timer_sync(&batt_timer);
-+ }
-+ return 0;
-+}
-+
-+static int micro_batt_suspend ( struct platform_device *pdev, pm_message_t state)
-+{
-+ { /*--- timer ---*/
-+ del_timer(&batt_timer);
-+ }
-+ return 0;
-+}
-+
-+static int micro_batt_resume ( struct platform_device *pdev)
-+{
-+ { /*--- timer ---*/
-+ add_timer(&batt_timer);
-+ }
-+ return 0;
-+}
-+
-+struct platform_driver micro_batt_device_driver = {
-+ .driver = {
-+ .name = "h3600-micro-battery",
-+ },
-+ .probe = micro_batt_probe,
-+ .remove = micro_batt_remove,
-+ .suspend = micro_batt_suspend,
-+ .resume = micro_batt_resume,
-+};
-+
-+static int micro_batt_init (void)
-+{
-+ return platform_driver_register(&micro_batt_device_driver);
-+}
-+
-+static void micro_batt_cleanup (void)
-+{
-+ platform_driver_unregister (&micro_batt_device_driver);
-+}
-+
-+module_init (micro_batt_init);
-+module_exit (micro_batt_cleanup);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("gremlin.it");
-+MODULE_DESCRIPTION("driver for iPAQ Atmel micro battery");
-+
-+
-Index: linux-2.6.22/drivers/power/olpc_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/olpc_battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,302 @@
-+/*
-+ * Battery driver for One Laptop Per Child board.
-+ *
-+ * Copyright © 2006 David Woodhouse <dwmw2@infradead.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/err.h>
-+#include <linux/platform_device.h>
-+#include <linux/power_supply.h>
-+#include <linux/jiffies.h>
-+#include <linux/sched.h>
-+#include <asm/io.h>
-+
-+#define wBAT_VOLTAGE 0xf900 /* *9.76/32, mV */
-+#define wBAT_CURRENT 0xf902 /* *15.625/120, mA */
-+#define wBAT_TEMP 0xf906 /* *256/1000, °C */
-+#define wAMB_TEMP 0xf908 /* *256/1000, °C */
-+#define SOC 0xf910 /* percentage */
-+#define sMBAT_STATUS 0xfaa4
-+#define sBAT_PRESENT 1
-+#define sBAT_FULL 2
-+#define sBAT_DESTROY 4 /* what is this exactly? */
-+#define sBAT_LOW 32
-+#define sBAT_DISCHG 64
-+#define sMCHARGE_STATUS 0xfaa5
-+#define sBAT_CHARGE 1
-+#define sBAT_OVERTEMP 4
-+#define sBAT_NiMH 8
-+#define sPOWER_FLAG 0xfa40
-+#define ADAPTER_IN 1
-+
-+/*********************************************************************
-+ * EC locking and access
-+ *********************************************************************/
-+
-+static int lock_ec(void)
-+{
-+ unsigned long timeo = jiffies + HZ / 20;
-+
-+ while (1) {
-+ unsigned char lock = inb(0x6c) & 0x80;
-+ if (!lock)
-+ return 0;
-+ if (time_after(jiffies, timeo)) {
-+ printk(KERN_ERR "olpc_battery: failed to lock EC for "
-+ "battery access\n");
-+ return 1;
-+ }
-+ yield();
-+ }
-+}
-+
-+static void unlock_ec(void)
-+{
-+ outb(0xff, 0x6c);
-+ return;
-+}
-+
-+static unsigned char read_ec_byte(unsigned short adr)
-+{
-+ outb(adr >> 8, 0x381);
-+ outb(adr, 0x382);
-+ return inb(0x383);
-+}
-+
-+static unsigned short read_ec_word(unsigned short adr)
-+{
-+ return (read_ec_byte(adr) << 8) | read_ec_byte(adr + 1);
-+}
-+
-+/*********************************************************************
-+ * Power
-+ *********************************************************************/
-+
-+static int olpc_ac_get_prop(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ int ret = 0;
-+
-+ if (lock_ec())
-+ return -EIO;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_ONLINE:
-+ if (!(read_ec_byte(sMBAT_STATUS) & sBAT_PRESENT)) {
-+ ret = -ENODEV;
-+ goto out;
-+ }
-+ val->intval = !!(read_ec_byte(sPOWER_FLAG) & ADAPTER_IN);
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ break;
-+ }
-+out:
-+ unlock_ec();
-+ return ret;
-+}
-+
-+static enum power_supply_property olpc_ac_props[] = {
-+ POWER_SUPPLY_PROP_ONLINE,
-+};
-+
-+static struct power_supply olpc_ac = {
-+ .name = "olpc-ac",
-+ .type = POWER_SUPPLY_TYPE_MAINS,
-+ .properties = olpc_ac_props,
-+ .num_properties = ARRAY_SIZE(olpc_ac_props),
-+ .get_property = olpc_ac_get_prop,
-+};
-+
-+/*********************************************************************
-+ * Battery properties
-+ *********************************************************************/
-+
-+static int olpc_bat_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ int ret = 0;
-+
-+ if (lock_ec())
-+ return -EIO;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ {
-+ int status = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ val->intval = read_ec_byte(sMBAT_STATUS);
-+
-+ if (!(val->intval & sBAT_PRESENT)) {
-+ ret = -ENODEV;
-+ goto out;
-+ }
-+
-+ if (val->intval & sBAT_DISCHG)
-+ status = POWER_SUPPLY_STATUS_DISCHARGING;
-+ else if (val->intval & sBAT_FULL)
-+ status = POWER_SUPPLY_STATUS_FULL;
-+
-+ val->intval = read_ec_byte(sMCHARGE_STATUS);
-+ if (val->intval & sBAT_CHARGE)
-+ status = POWER_SUPPLY_STATUS_CHARGING;
-+
-+ val->intval = status;
-+ break;
-+ }
-+ case POWER_SUPPLY_PROP_PRESENT:
-+ val->intval = !!(read_ec_byte(sMBAT_STATUS) & sBAT_PRESENT);
-+ break;
-+ case POWER_SUPPLY_PROP_HEALTH:
-+ val->intval = read_ec_byte(sMCHARGE_STATUS);
-+ if (val->intval & sBAT_OVERTEMP)
-+ val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
-+ else
-+ val->intval = POWER_SUPPLY_HEALTH_GOOD;
-+ break;
-+ case POWER_SUPPLY_PROP_TECHNOLOGY:
-+ val->intval = read_ec_byte(sMCHARGE_STATUS);
-+ if (val->intval & sBAT_NiMH)
-+ val->intval = POWER_SUPPLY_TECHNOLOGY_NIMH;
-+ else
-+ val->intval = POWER_SUPPLY_TECHNOLOGY_UNKNOWN;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_AVG:
-+ val->intval = read_ec_byte(wBAT_VOLTAGE) * 9760L / 32;
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_AVG:
-+ val->intval = read_ec_byte(wBAT_CURRENT) * 15625L / 120;
-+ break;
-+ case POWER_SUPPLY_PROP_CAPACITY:
-+ val->intval = read_ec_byte(SOC);
-+ break;
-+ case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
-+ val->intval = read_ec_byte(sMBAT_STATUS);
-+ if (val->intval & sBAT_FULL)
-+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
-+ else if (val->intval & sBAT_LOW)
-+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
-+ else
-+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = read_ec_byte(wBAT_TEMP) * 256 / 100;
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP_AMBIENT:
-+ val->intval = read_ec_byte(wAMB_TEMP) * 256 / 100;
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ break;
-+ }
-+
-+out:
-+ unlock_ec();
-+ return ret;
-+}
-+
-+static enum power_supply_property olpc_bat_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_PRESENT,
-+ POWER_SUPPLY_PROP_HEALTH,
-+ POWER_SUPPLY_PROP_TECHNOLOGY,
-+ POWER_SUPPLY_PROP_VOLTAGE_AVG,
-+ POWER_SUPPLY_PROP_CURRENT_AVG,
-+ POWER_SUPPLY_PROP_CAPACITY,
-+ POWER_SUPPLY_PROP_CAPACITY_LEVEL,
-+ POWER_SUPPLY_PROP_TEMP,
-+ POWER_SUPPLY_PROP_TEMP_AMBIENT,
-+};
-+
-+/*********************************************************************
-+ * Initialisation
-+ *********************************************************************/
-+
-+static struct platform_device *bat_pdev;
-+
-+static struct power_supply olpc_bat = {
-+ .properties = olpc_bat_props,
-+ .num_properties = ARRAY_SIZE(olpc_bat_props),
-+ .get_property = olpc_bat_get_property,
-+ .use_for_apm = 1,
-+};
-+
-+static int __init olpc_bat_init(void)
-+{
-+ int ret = 0;
-+ unsigned short tmp;
-+
-+ if (!request_region(0x380, 4, "olpc-battery")) {
-+ ret = -EIO;
-+ goto region_failed;
-+ }
-+
-+ if (lock_ec()) {
-+ ret = -EIO;
-+ goto lock_failed;
-+ }
-+
-+ tmp = read_ec_word(0xfe92);
-+ unlock_ec();
-+
-+ if (tmp != 0x380) {
-+ /* Doesn't look like OLPC EC */
-+ ret = -ENODEV;
-+ goto not_olpc_ec;
-+ }
-+
-+ bat_pdev = platform_device_register_simple("olpc-battery", 0, NULL, 0);
-+ if (IS_ERR(bat_pdev)) {
-+ ret = PTR_ERR(bat_pdev);
-+ goto pdev_failed;
-+ }
-+
-+ ret = power_supply_register(&bat_pdev->dev, &olpc_ac);
-+ if (ret)
-+ goto ac_failed;
-+
-+ olpc_bat.name = bat_pdev->name;
-+
-+ ret = power_supply_register(&bat_pdev->dev, &olpc_bat);
-+ if (ret)
-+ goto battery_failed;
-+
-+ goto success;
-+
-+battery_failed:
-+ power_supply_unregister(&olpc_ac);
-+ac_failed:
-+ platform_device_unregister(bat_pdev);
-+pdev_failed:
-+not_olpc_ec:
-+lock_failed:
-+ release_region(0x380, 4);
-+region_failed:
-+success:
-+ return ret;
-+}
-+
-+static void __exit olpc_bat_exit(void)
-+{
-+ power_supply_unregister(&olpc_bat);
-+ power_supply_unregister(&olpc_ac);
-+ platform_device_unregister(bat_pdev);
-+ release_region(0x380, 4);
-+ return;
-+}
-+
-+module_init(olpc_bat_init);
-+module_exit(olpc_bat_exit);
-+
-+MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("Battery driver for One Laptop Per Child "
-+ "($100 laptop) board.");
-Index: linux-2.6.22/drivers/power/pda_power.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/pda_power.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,263 @@
-+/*
-+ * Common power driver for PDAs and phones with one or two external
-+ * power supplies (AC/USB) connected to main and backup batteries,
-+ * and optional builtin charger.
-+ *
-+ * Copyright 2007 Anton Vorontsov <cbou@mail.ru>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/interrupt.h>
-+#include <linux/power_supply.h>
-+#include <linux/pda_power.h>
-+#include <linux/timer.h>
-+#include <linux/jiffies.h>
-+
-+static inline unsigned int get_irq_flags(struct resource *res)
-+{
-+ unsigned int flags = IRQF_DISABLED | IRQF_SHARED;
-+
-+ flags |= res->flags & IRQF_TRIGGER_MASK;
-+
-+ return flags;
-+}
-+
-+static struct device *dev;
-+static struct pda_power_pdata *pdata;
-+static struct resource *ac_irq, *usb_irq;
-+static struct timer_list charger_timer;
-+static struct timer_list supply_timer;
-+
-+static int pda_power_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_ONLINE:
-+ if (psy->type == POWER_SUPPLY_TYPE_MAINS)
-+ val->intval = pdata->is_ac_online ?
-+ pdata->is_ac_online() : 0;
-+ else
-+ val->intval = pdata->is_usb_online ?
-+ pdata->is_usb_online() : 0;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ return 0;
-+}
-+
-+static enum power_supply_property pda_power_props[] = {
-+ POWER_SUPPLY_PROP_ONLINE,
-+};
-+
-+static char *pda_power_supplied_to[] = {
-+ "main-battery",
-+ "backup-battery",
-+};
-+
-+static struct power_supply pda_power_supplies[] = {
-+ {
-+ .name = "ac",
-+ .type = POWER_SUPPLY_TYPE_MAINS,
-+ .supplied_to = pda_power_supplied_to,
-+ .num_supplicants = ARRAY_SIZE(pda_power_supplied_to),
-+ .properties = pda_power_props,
-+ .num_properties = ARRAY_SIZE(pda_power_props),
-+ .get_property = pda_power_get_property,
-+ },
-+ {
-+ .name = "usb",
-+ .type = POWER_SUPPLY_TYPE_USB,
-+ .supplied_to = pda_power_supplied_to,
-+ .num_supplicants = ARRAY_SIZE(pda_power_supplied_to),
-+ .properties = pda_power_props,
-+ .num_properties = ARRAY_SIZE(pda_power_props),
-+ .get_property = pda_power_get_property,
-+ },
-+};
-+
-+static void update_charger(void)
-+{
-+ if (!pdata->set_charge)
-+ return;
-+
-+ if (pdata->is_ac_online && pdata->is_ac_online()) {
-+ dev_dbg(dev, "charger on (AC)\n");
-+ pdata->set_charge(PDA_POWER_CHARGE_AC);
-+ }
-+ else if (pdata->is_usb_online && pdata->is_usb_online()) {
-+ dev_dbg(dev, "charger on (USB)\n");
-+ pdata->set_charge(PDA_POWER_CHARGE_USB);
-+ }
-+ else {
-+ dev_dbg(dev, "charger off\n");
-+ pdata->set_charge(0);
-+ }
-+
-+ return;
-+}
-+
-+static void supply_timer_func(unsigned long irq)
-+{
-+ if (ac_irq && irq == ac_irq->start)
-+ power_supply_changed(&pda_power_supplies[0]);
-+ else if (usb_irq && irq == usb_irq->start)
-+ power_supply_changed(&pda_power_supplies[1]);
-+ return;
-+}
-+
-+static void charger_timer_func(unsigned long irq)
-+{
-+ update_charger();
-+
-+ /* Okay, charger set. Now wait a bit before notifying supplicants,
-+ * charge power should stabilize. */
-+ supply_timer.data = irq;
-+ mod_timer(&supply_timer,
-+ jiffies + msecs_to_jiffies(pdata->wait_for_charger));
-+ return;
-+}
-+
-+static irqreturn_t power_changed_isr(int irq, void *unused)
-+{
-+ /* Wait a bit before reading ac/usb line status and setting charger,
-+ * because ac/usb status readings may lag from irq. */
-+ charger_timer.data = irq;
-+ mod_timer(&charger_timer,
-+ jiffies + msecs_to_jiffies(pdata->wait_for_status));
-+ return IRQ_HANDLED;
-+}
-+
-+static int pda_power_probe(struct platform_device *pdev)
-+{
-+ int ret = 0;
-+
-+ dev = &pdev->dev;
-+
-+ if (pdev->id != -1) {
-+ dev_err(dev, "it's meaningless to register several "
-+ "pda_powers, use id = -1\n");
-+ ret = -EINVAL;
-+ goto wrongid;
-+ }
-+
-+ pdata = pdev->dev.platform_data;
-+
-+ update_charger();
-+
-+ if (!pdata->wait_for_status)
-+ pdata->wait_for_status = 500;
-+
-+ if (!pdata->wait_for_charger)
-+ pdata->wait_for_charger = 500;
-+
-+ setup_timer(&charger_timer, charger_timer_func, 0);
-+ setup_timer(&supply_timer, supply_timer_func, 0);
-+
-+ ac_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "ac");
-+ usb_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "usb");
-+ if (!ac_irq && !usb_irq) {
-+ dev_err(dev, "no ac/usb irq specified\n");
-+ ret = -ENODEV;
-+ goto noirqs;
-+ }
-+
-+ if (pdata->supplied_to) {
-+ pda_power_supplies[0].supplied_to = pdata->supplied_to;
-+ pda_power_supplies[1].supplied_to = pdata->supplied_to;
-+ pda_power_supplies[0].num_supplicants = pdata->num_supplicants;
-+ pda_power_supplies[1].num_supplicants = pdata->num_supplicants;
-+ }
-+
-+ ret = power_supply_register(&pdev->dev, &pda_power_supplies[0]);
-+ if (ret) {
-+ dev_err(dev, "failed to register %s power supply\n",
-+ pda_power_supplies[0].name);
-+ goto supply0_failed;
-+ }
-+
-+ ret = power_supply_register(&pdev->dev, &pda_power_supplies[1]);
-+ if (ret) {
-+ dev_err(dev, "failed to register %s power supply\n",
-+ pda_power_supplies[1].name);
-+ goto supply1_failed;
-+ }
-+
-+ if (ac_irq) {
-+ ret = request_irq(ac_irq->start, power_changed_isr,
-+ get_irq_flags(ac_irq), ac_irq->name,
-+ &pda_power_supplies[0]);
-+ if (ret) {
-+ dev_err(dev, "request ac irq failed\n");
-+ goto ac_irq_failed;
-+ }
-+ }
-+
-+ if (usb_irq) {
-+ ret = request_irq(usb_irq->start, power_changed_isr,
-+ get_irq_flags(usb_irq), usb_irq->name,
-+ &pda_power_supplies[1]);
-+ if (ret) {
-+ dev_err(dev, "request usb irq failed\n");
-+ goto usb_irq_failed;
-+ }
-+ }
-+
-+ goto success;
-+
-+usb_irq_failed:
-+ if (ac_irq)
-+ free_irq(ac_irq->start, &pda_power_supplies[0]);
-+ac_irq_failed:
-+ power_supply_unregister(&pda_power_supplies[1]);
-+supply1_failed:
-+ power_supply_unregister(&pda_power_supplies[0]);
-+supply0_failed:
-+noirqs:
-+wrongid:
-+success:
-+ return ret;
-+}
-+
-+static int pda_power_remove(struct platform_device *pdev)
-+{
-+ if (usb_irq)
-+ free_irq(usb_irq->start, &pda_power_supplies[1]);
-+ if (ac_irq)
-+ free_irq(ac_irq->start, &pda_power_supplies[0]);
-+ del_timer_sync(&charger_timer);
-+ del_timer_sync(&supply_timer);
-+ power_supply_unregister(&pda_power_supplies[1]);
-+ power_supply_unregister(&pda_power_supplies[0]);
-+ return 0;
-+}
-+
-+static struct platform_driver pda_power_pdrv = {
-+ .driver = {
-+ .name = "pda-power",
-+ },
-+ .probe = pda_power_probe,
-+ .remove = pda_power_remove,
-+};
-+
-+static int __init pda_power_init(void)
-+{
-+ return platform_driver_register(&pda_power_pdrv);
-+}
-+
-+static void __exit pda_power_exit(void)
-+{
-+ platform_driver_unregister(&pda_power_pdrv);
-+ return;
-+}
-+
-+module_init(pda_power_init);
-+module_exit(pda_power_exit);
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>");
-Index: linux-2.6.22/drivers/power/pmu_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/pmu_battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,215 @@
-+/*
-+ * Battery class driver for Apple PMU
-+ *
-+ * Copyright © 2006 David Woodhouse <dwmw2@infradead.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/err.h>
-+#include <linux/power_supply.h>
-+#include <linux/adb.h>
-+#include <linux/pmu.h>
-+
-+static struct pmu_battery_dev {
-+ struct power_supply bat;
-+ struct pmu_battery_info *pbi;
-+ char name[16];
-+ int propval;
-+} *pbats[PMU_MAX_BATTERIES];
-+
-+#define to_pmu_battery_dev(x) container_of(x, struct pmu_battery_dev, bat)
-+
-+/*********************************************************************
-+ * Power
-+ *********************************************************************/
-+
-+static int pmu_get_ac_prop(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_ONLINE:
-+ val->intval = (!!(pmu_power_flags & PMU_PWR_AC_PRESENT)) ||
-+ (pmu_battery_count == 0);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property pmu_ac_props[] = {
-+ POWER_SUPPLY_PROP_ONLINE,
-+};
-+
-+static struct power_supply pmu_ac = {
-+ .name = "pmu-ac",
-+ .type = POWER_SUPPLY_TYPE_MAINS,
-+ .properties = pmu_ac_props,
-+ .num_properties = ARRAY_SIZE(pmu_ac_props),
-+ .get_property = pmu_get_ac_prop,
-+};
-+
-+/*********************************************************************
-+ * Battery properties
-+ *********************************************************************/
-+
-+static char *pmu_batt_types[] = {
-+ "Smart", "Comet", "Hooper", "Unknown"
-+};
-+
-+static char *pmu_bat_get_model_name(struct pmu_battery_info *pbi)
-+{
-+ switch (pbi->flags & PMU_BATT_TYPE_MASK) {
-+ case PMU_BATT_TYPE_SMART:
-+ return pmu_batt_types[0];
-+ case PMU_BATT_TYPE_COMET:
-+ return pmu_batt_types[1];
-+ case PMU_BATT_TYPE_HOOPER:
-+ return pmu_batt_types[2];
-+ default: break;
-+ }
-+ return pmu_batt_types[3];
-+}
-+
-+static int pmu_bat_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ struct pmu_battery_dev *pbat = to_pmu_battery_dev(psy);
-+ struct pmu_battery_info *pbi = pbat->pbi;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ if (pbi->flags & PMU_BATT_CHARGING)
-+ val->intval = POWER_SUPPLY_STATUS_CHARGING;
-+ else
-+ val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
-+ break;
-+ case POWER_SUPPLY_PROP_PRESENT:
-+ val->intval = !!(pbi->flags & PMU_BATT_PRESENT);
-+ break;
-+ case POWER_SUPPLY_PROP_MODEL_NAME:
-+ val->strval = pmu_bat_get_model_name(pbi);
-+ break;
-+ case POWER_SUPPLY_PROP_ENERGY_AVG:
-+ val->intval = pbi->charge * 1000; /* mWh -> µWh */
-+ break;
-+ case POWER_SUPPLY_PROP_ENERGY_FULL:
-+ val->intval = pbi->max_charge * 1000; /* mWh -> µWh */
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_AVG:
-+ val->intval = pbi->amperage * 1000; /* mA -> µA */
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_AVG:
-+ val->intval = pbi->voltage * 1000; /* mV -> µV */
-+ break;
-+ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG:
-+ val->intval = pbi->time_remaining;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property pmu_bat_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_PRESENT,
-+ POWER_SUPPLY_PROP_MODEL_NAME,
-+ POWER_SUPPLY_PROP_ENERGY_AVG,
-+ POWER_SUPPLY_PROP_ENERGY_FULL,
-+ POWER_SUPPLY_PROP_CURRENT_AVG,
-+ POWER_SUPPLY_PROP_VOLTAGE_AVG,
-+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
-+};
-+
-+/*********************************************************************
-+ * Initialisation
-+ *********************************************************************/
-+
-+static struct platform_device *bat_pdev;
-+
-+static int __init pmu_bat_init(void)
-+{
-+ int ret;
-+ int i;
-+
-+ bat_pdev = platform_device_register_simple("pmu-battery",
-+ 0, NULL, 0);
-+ if (IS_ERR(bat_pdev)) {
-+ ret = PTR_ERR(bat_pdev);
-+ goto pdev_register_failed;
-+ }
-+
-+ ret = power_supply_register(&bat_pdev->dev, &pmu_ac);
-+ if (ret)
-+ goto ac_register_failed;
-+
-+ for (i = 0; i < pmu_battery_count; i++) {
-+ struct pmu_battery_dev *pbat = kzalloc(sizeof(*pbat),
-+ GFP_KERNEL);
-+ if (!pbat)
-+ break;
-+
-+ sprintf(pbat->name, "PMU battery %d", i);
-+ pbat->bat.name = pbat->name;
-+ pbat->bat.properties = pmu_bat_props;
-+ pbat->bat.num_properties = ARRAY_SIZE(pmu_bat_props);
-+ pbat->bat.get_property = pmu_bat_get_property;
-+ pbat->pbi = &pmu_batteries[i];
-+
-+ ret = power_supply_register(&bat_pdev->dev, &pbat->bat);
-+ if (ret) {
-+ kfree(pbat);
-+ goto battery_register_failed;
-+ }
-+ pbats[i] = pbat;
-+ }
-+
-+ goto success;
-+
-+battery_register_failed:
-+ while (i--) {
-+ if (!pbats[i])
-+ continue;
-+ power_supply_unregister(&pbats[i]->bat);
-+ kfree(pbats[i]);
-+ }
-+ power_supply_unregister(&pmu_ac);
-+ac_register_failed:
-+ platform_device_unregister(bat_pdev);
-+pdev_register_failed:
-+success:
-+ return ret;
-+}
-+
-+static void __exit pmu_bat_exit(void)
-+{
-+ int i;
-+
-+ for (i = 0; i < PMU_MAX_BATTERIES; i++) {
-+ if (!pbats[i])
-+ continue;
-+ power_supply_unregister(&pbats[i]->bat);
-+ kfree(pbats[i]);
-+ }
-+ power_supply_unregister(&pmu_ac);
-+ platform_device_unregister(bat_pdev);
-+
-+ return;
-+}
-+
-+module_init(pmu_bat_init);
-+module_exit(pmu_bat_exit);
-+
-+MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("PMU battery driver");
-Index: linux-2.6.22/drivers/power/power_supply_core.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply_core.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,168 @@
-+/*
-+ * Universal power supply monitor class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/init.h>
-+#include <linux/device.h>
-+#include <linux/err.h>
-+#include <linux/power_supply.h>
-+#include "power_supply.h"
-+
-+struct class *power_supply_class;
-+
-+static void power_supply_changed_work(struct work_struct *work)
-+{
-+ struct power_supply *psy = container_of(work, struct power_supply,
-+ changed_work);
-+ int i;
-+
-+ dev_dbg(psy->dev, "%s\n", __FUNCTION__);
-+
-+ for (i = 0; i < psy->num_supplicants; i++) {
-+ struct device *dev;
-+
-+ down(&power_supply_class->sem);
-+ list_for_each_entry(dev, &power_supply_class->devices, node) {
-+ struct power_supply *pst = dev_get_drvdata(dev);
-+
-+ if (!strcmp(psy->supplied_to[i], pst->name)) {
-+ if (pst->external_power_changed)
-+ pst->external_power_changed(pst);
-+ }
-+ }
-+ up(&power_supply_class->sem);
-+ }
-+
-+ power_supply_update_leds(psy);
-+
-+ kobject_uevent(&psy->dev->kobj, KOBJ_CHANGE);
-+
-+ return;
-+}
-+
-+void power_supply_changed(struct power_supply *psy)
-+{
-+ dev_dbg(psy->dev, "%s\n", __FUNCTION__);
-+
-+ schedule_work(&psy->changed_work);
-+
-+ return;
-+}
-+
-+int power_supply_am_i_supplied(struct power_supply *psy)
-+{
-+ union power_supply_propval ret = {0,};
-+ struct device *dev;
-+
-+ down(&power_supply_class->sem);
-+ list_for_each_entry(dev, &power_supply_class->devices, node) {
-+ struct power_supply *epsy = dev_get_drvdata(dev);
-+ int i;
-+
-+ for (i = 0; i < epsy->num_supplicants; i++) {
-+ if (!strcmp(epsy->supplied_to[i], psy->name)) {
-+ if (epsy->get_property(epsy,
-+ POWER_SUPPLY_PROP_ONLINE, &ret))
-+ continue;
-+ if (ret.intval)
-+ goto out;
-+ }
-+ }
-+ }
-+out:
-+ up(&power_supply_class->sem);
-+
-+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, ret.intval);
-+
-+ return ret.intval;
-+}
-+
-+int power_supply_register(struct device *parent, struct power_supply *psy)
-+{
-+ int rc = 0;
-+
-+ psy->dev = device_create(power_supply_class, parent, 0,
-+ "%s", psy->name);
-+ if (IS_ERR(psy->dev)) {
-+ rc = PTR_ERR(psy->dev);
-+ goto dev_create_failed;
-+ }
-+
-+ dev_set_drvdata(psy->dev, psy);
-+
-+ INIT_WORK(&psy->changed_work, power_supply_changed_work);
-+
-+ rc = power_supply_create_attrs(psy);
-+ if (rc)
-+ goto create_attrs_failed;
-+
-+ rc = power_supply_create_triggers(psy);
-+ if (rc)
-+ goto create_triggers_failed;
-+
-+ power_supply_changed(psy);
-+
-+ goto success;
-+
-+create_triggers_failed:
-+ power_supply_remove_attrs(psy);
-+create_attrs_failed:
-+ device_unregister(psy->dev);
-+dev_create_failed:
-+success:
-+ return rc;
-+}
-+
-+void power_supply_unregister(struct power_supply *psy)
-+{
-+ flush_scheduled_work();
-+ power_supply_remove_triggers(psy);
-+ power_supply_remove_attrs(psy);
-+ device_unregister(psy->dev);
-+ return;
-+}
-+
-+static int __init power_supply_class_init(void)
-+{
-+ power_supply_class = class_create(THIS_MODULE, "power_supply");
-+
-+ if (IS_ERR(power_supply_class))
-+ return PTR_ERR(power_supply_class);
-+
-+ power_supply_class->dev_uevent = power_supply_uevent;
-+
-+ return 0;
-+}
-+
-+static void __exit power_supply_class_exit(void)
-+{
-+ class_destroy(power_supply_class);
-+ return;
-+}
-+
-+EXPORT_SYMBOL_GPL(power_supply_changed);
-+EXPORT_SYMBOL_GPL(power_supply_am_i_supplied);
-+EXPORT_SYMBOL_GPL(power_supply_register);
-+EXPORT_SYMBOL_GPL(power_supply_unregister);
-+
-+/* exported for the APM Power driver, APM emulation */
-+EXPORT_SYMBOL_GPL(power_supply_class);
-+
-+subsys_initcall(power_supply_class_init);
-+module_exit(power_supply_class_exit);
-+
-+MODULE_DESCRIPTION("Universal power supply monitor class");
-+MODULE_AUTHOR("Ian Molton <spyro@f2s.com>, "
-+ "Szabolcs Gyurko, "
-+ "Anton Vorontsov <cbou@mail.ru>");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/drivers/power/power_supply.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply.h 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,42 @@
-+/*
-+ * Functions private to power supply class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#ifdef CONFIG_SYSFS
-+
-+extern int power_supply_create_attrs(struct power_supply *psy);
-+extern void power_supply_remove_attrs(struct power_supply *psy);
-+extern int power_supply_uevent(struct device *dev, char **envp, int num_envp,
-+ char *buffer, int buffer_size);
-+
-+#else
-+
-+static inline int power_supply_create_attrs(struct power_supply *psy)
-+{ return 0; }
-+static inline void power_supply_remove_attrs(struct power_supply *psy) {}
-+#define power_supply_uevent NULL
-+
-+#endif /* CONFIG_SYSFS */
-+
-+#ifdef CONFIG_LEDS_TRIGGERS
-+
-+extern void power_supply_update_leds(struct power_supply *psy);
-+extern int power_supply_create_triggers(struct power_supply *psy);
-+extern void power_supply_remove_triggers(struct power_supply *psy);
-+
-+#else
-+
-+static inline void power_supply_update_leds(struct power_supply *psy) {}
-+static inline int power_supply_create_triggers(struct power_supply *psy)
-+{ return 0; }
-+static inline void power_supply_remove_triggers(struct power_supply *psy) {}
-+
-+#endif /* CONFIG_LEDS_TRIGGERS */
-Index: linux-2.6.22/drivers/power/power_supply_leds.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply_leds.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,188 @@
-+/*
-+ * LEDs triggers for power supply class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#include <linux/power_supply.h>
-+
-+/* If we have hwtimer trigger, then use it to blink charging LED */
-+
-+#if defined(CONFIG_LEDS_TRIGGER_HWTIMER) || \
-+ (defined(CONFIG_BATTERY_MODULE) && \
-+ defined(CONFIG_LEDS_TRIGGER_HWTIMER_MODULE))
-+ #define led_trigger_register_charging led_trigger_register_hwtimer
-+ #define led_trigger_unregister_charging led_trigger_unregister_hwtimer
-+#else
-+ #define led_trigger_register_charging led_trigger_register_simple
-+ #define led_trigger_unregister_charging led_trigger_unregister_simple
-+#endif
-+
-+/* Battery specific LEDs triggers. */
-+
-+static void power_supply_update_bat_leds(struct power_supply *psy)
-+{
-+ union power_supply_propval status;
-+
-+ if (psy->get_property(psy, POWER_SUPPLY_PROP_STATUS, &status))
-+ return;
-+
-+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, status.intval);
-+
-+ switch(status.intval) {
-+ case POWER_SUPPLY_STATUS_FULL:
-+ led_trigger_event(psy->charging_full_trig, LED_FULL);
-+ led_trigger_event(psy->charging_trig, LED_OFF);
-+ led_trigger_event(psy->full_trig, LED_FULL);
-+ break;
-+ case POWER_SUPPLY_STATUS_CHARGING:
-+ led_trigger_event(psy->charging_full_trig, LED_FULL);
-+ led_trigger_event(psy->charging_trig, LED_FULL);
-+ led_trigger_event(psy->full_trig, LED_OFF);
-+ break;
-+ default:
-+ led_trigger_event(psy->charging_full_trig, LED_OFF);
-+ led_trigger_event(psy->charging_trig, LED_OFF);
-+ led_trigger_event(psy->full_trig, LED_OFF);
-+ break;
-+ }
-+
-+ return;
-+}
-+
-+static int power_supply_create_bat_triggers(struct power_supply *psy)
-+{
-+ int rc = 0;
-+
-+ psy->charging_full_trig_name = kmalloc(strlen(psy->name) +
-+ sizeof("-charging-or-full"), GFP_KERNEL);
-+ if (!psy->charging_full_trig_name)
-+ goto charging_full_failed;
-+
-+ psy->charging_trig_name = kmalloc(strlen(psy->name) +
-+ sizeof("-charging"), GFP_KERNEL);
-+ if (!psy->charging_trig_name)
-+ goto charging_failed;
-+
-+ psy->full_trig_name = kmalloc(strlen(psy->name) +
-+ sizeof("-full"), GFP_KERNEL);
-+ if (!psy->full_trig_name)
-+ goto full_failed;
-+
-+ strcpy(psy->charging_full_trig_name, psy->name);
-+ strcat(psy->charging_full_trig_name, "-charging-or-full");
-+ strcpy(psy->charging_trig_name, psy->name);
-+ strcat(psy->charging_trig_name, "-charging");
-+ strcpy(psy->full_trig_name, psy->name);
-+ strcat(psy->full_trig_name, "-full");
-+
-+ led_trigger_register_simple(psy->charging_full_trig_name,
-+ &psy->charging_full_trig);
-+ led_trigger_register_charging(psy->charging_trig_name,
-+ &psy->charging_trig);
-+ led_trigger_register_simple(psy->full_trig_name,
-+ &psy->full_trig);
-+
-+ goto success;
-+
-+full_failed:
-+ kfree(psy->charging_trig_name);
-+charging_failed:
-+ kfree(psy->charging_full_trig_name);
-+charging_full_failed:
-+ rc = -ENOMEM;
-+success:
-+ return rc;
-+}
-+
-+static void power_supply_remove_bat_triggers(struct power_supply *psy)
-+{
-+ led_trigger_unregister_simple(psy->charging_full_trig);
-+ led_trigger_unregister_charging(psy->charging_trig);
-+ led_trigger_unregister_simple(psy->full_trig);
-+ kfree(psy->full_trig_name);
-+ kfree(psy->charging_trig_name);
-+ kfree(psy->charging_full_trig_name);
-+ return;
-+}
-+
-+/* Generated power specific LEDs triggers. */
-+
-+static void power_supply_update_gen_leds(struct power_supply *psy)
-+{
-+ union power_supply_propval online;
-+
-+ if (psy->get_property(psy, POWER_SUPPLY_PROP_ONLINE, &online))
-+ return;
-+
-+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, online.intval);
-+
-+ if (online.intval)
-+ led_trigger_event(psy->online_trig, LED_FULL);
-+ else
-+ led_trigger_event(psy->online_trig, LED_OFF);
-+
-+ return;
-+}
-+
-+static int power_supply_create_gen_triggers(struct power_supply *psy)
-+{
-+ int rc = 0;
-+
-+ psy->online_trig_name = kmalloc(strlen(psy->name) + sizeof("-online"),
-+ GFP_KERNEL);
-+ if (!psy->online_trig_name)
-+ goto online_failed;
-+
-+ strcpy(psy->online_trig_name, psy->name);
-+ strcat(psy->online_trig_name, "-online");
-+
-+ led_trigger_register_simple(psy->online_trig_name, &psy->online_trig);
-+
-+ goto success;
-+
-+online_failed:
-+ rc = -ENOMEM;
-+success:
-+ return rc;
-+}
-+
-+static void power_supply_remove_gen_triggers(struct power_supply *psy)
-+{
-+ led_trigger_unregister_simple(psy->online_trig);
-+ kfree(psy->online_trig_name);
-+ return;
-+}
-+
-+/* Choice what triggers to create&update. */
-+
-+void power_supply_update_leds(struct power_supply *psy)
-+{
-+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY)
-+ power_supply_update_bat_leds(psy);
-+ else
-+ power_supply_update_gen_leds(psy);
-+ return;
-+}
-+
-+int power_supply_create_triggers(struct power_supply *psy)
-+{
-+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY)
-+ return power_supply_create_bat_triggers(psy);
-+ return power_supply_create_gen_triggers(psy);
-+}
-+
-+void power_supply_remove_triggers(struct power_supply *psy)
-+{
-+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY)
-+ power_supply_remove_bat_triggers(psy);
-+ else
-+ power_supply_remove_gen_triggers(psy);
-+ return;
-+}
-Index: linux-2.6.22/drivers/power/power_supply_sysfs.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply_sysfs.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,289 @@
-+/*
-+ * Sysfs interface for the universal power supply monitor class
-+ *
-+ * Copyright © 2007 David Woodhouse <dwmw2@infradead.org>
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#include <linux/ctype.h>
-+#include <linux/power_supply.h>
-+
-+/*
-+ * This is because the name "current" breaks the device attr macro.
-+ * The "current" word resolvs to "(get_current())" so instead of
-+ * "current" "(get_current())" appears in the sysfs.
-+ *
-+ * The source of this definition is the device.h which calls __ATTR
-+ * macro in sysfs.h which calls the __stringify macro.
-+ *
-+ * Only modification that the name is not tried to be resolved
-+ * (as a macro let's say).
-+ */
-+
-+#define POWER_SUPPLY_ATTR(_name) \
-+{ \
-+ .attr = { .name = #_name, .mode = 0444, .owner = THIS_MODULE }, \
-+ .show = power_supply_show_property, \
-+ .store = NULL, \
-+}
-+
-+static struct device_attribute power_supply_attrs[];
-+
-+static ssize_t power_supply_show_property(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf) {
-+ static char *status_text[] = {
-+ "Unknown", "Charging", "Discharging", "Not charging", "Full"
-+ };
-+ static char *health_text[] = {
-+ "Unknown", "Good", "Overheat", "Dead"
-+ };
-+ static char *technology_text[] = {
-+ "Unknown", "NiMH", "Li-ion", "Li-poly"
-+ };
-+ static char *capacity_level_text[] = {
-+ "Unknown", "Critical", "Low", "Normal", "High", "Full"
-+ };
-+ ssize_t ret;
-+ struct power_supply *psy = dev_get_drvdata(dev);
-+ const ptrdiff_t off = attr - power_supply_attrs;
-+ union power_supply_propval value;
-+
-+ ret = psy->get_property(psy, off, &value);
-+
-+ if (ret < 0) {
-+ dev_err(dev, "driver failed to report `%s' property\n",
-+ attr->attr.name);
-+ return ret;
-+ }
-+
-+ if (off == POWER_SUPPLY_PROP_STATUS)
-+ return sprintf(buf, "%s\n", status_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_HEALTH)
-+ return sprintf(buf, "%s\n", health_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_TECHNOLOGY)
-+ return sprintf(buf, "%s\n", technology_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_CAPACITY_LEVEL)
-+ return sprintf(buf, "%s\n",
-+ capacity_level_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_MODEL_NAME)
-+ return sprintf(buf, "%s\n", value.strval);
-+
-+ return sprintf(buf, "%d\n", value.intval);
-+}
-+
-+/* Must be in the same order as POWER_SUPPLY_PROP_* */
-+static struct device_attribute power_supply_attrs[] = {
-+ /* Properties of type `int' */
-+ POWER_SUPPLY_ATTR(status),
-+ POWER_SUPPLY_ATTR(health),
-+ POWER_SUPPLY_ATTR(present),
-+ POWER_SUPPLY_ATTR(online),
-+ POWER_SUPPLY_ATTR(technology),
-+ POWER_SUPPLY_ATTR(voltage_max_design),
-+ POWER_SUPPLY_ATTR(voltage_min_design),
-+ POWER_SUPPLY_ATTR(voltage_now),
-+ POWER_SUPPLY_ATTR(voltage_avg),
-+ POWER_SUPPLY_ATTR(current_now),
-+ POWER_SUPPLY_ATTR(current_avg),
-+ POWER_SUPPLY_ATTR(charge_full_design),
-+ POWER_SUPPLY_ATTR(charge_empty_design),
-+ POWER_SUPPLY_ATTR(charge_full),
-+ POWER_SUPPLY_ATTR(charge_empty),
-+ POWER_SUPPLY_ATTR(charge_now),
-+ POWER_SUPPLY_ATTR(charge_avg),
-+ POWER_SUPPLY_ATTR(energy_full_design),
-+ POWER_SUPPLY_ATTR(energy_empty_design),
-+ POWER_SUPPLY_ATTR(energy_full),
-+ POWER_SUPPLY_ATTR(energy_empty),
-+ POWER_SUPPLY_ATTR(energy_now),
-+ POWER_SUPPLY_ATTR(energy_avg),
-+ POWER_SUPPLY_ATTR(capacity),
-+ POWER_SUPPLY_ATTR(capacity_level),
-+ POWER_SUPPLY_ATTR(temp),
-+ POWER_SUPPLY_ATTR(temp_ambient),
-+ POWER_SUPPLY_ATTR(time_to_empty_now),
-+ POWER_SUPPLY_ATTR(time_to_empty_avg),
-+ POWER_SUPPLY_ATTR(time_to_full_now),
-+ POWER_SUPPLY_ATTR(time_to_full_avg),
-+ /* Properties of type `const char *' */
-+ POWER_SUPPLY_ATTR(model_name),
-+};
-+
-+static ssize_t power_supply_show_static_attrs(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf) {
-+ static char *type_text[] = { "Battery", "UPS", "Mains", "USB" };
-+ struct power_supply *psy = dev_get_drvdata(dev);
-+
-+ return sprintf(buf, "%s\n", type_text[psy->type]);
-+}
-+
-+static struct device_attribute power_supply_static_attrs[] = {
-+ __ATTR(type, 0444, power_supply_show_static_attrs, NULL),
-+};
-+
-+int power_supply_create_attrs(struct power_supply *psy)
-+{
-+ int rc = 0;
-+ int i, j;
-+
-+ for (i = 0; i < ARRAY_SIZE(power_supply_static_attrs); i++) {
-+ rc = device_create_file(psy->dev,
-+ &power_supply_static_attrs[i]);
-+ if (rc)
-+ goto statics_failed;
-+ }
-+
-+ for (j = 0; j < psy->num_properties; j++) {
-+ rc = device_create_file(psy->dev,
-+ &power_supply_attrs[psy->properties[j]]);
-+ if (rc)
-+ goto dynamics_failed;
-+ }
-+
-+ goto succeed;
-+
-+dynamics_failed:
-+ while (j--)
-+ device_remove_file(psy->dev,
-+ &power_supply_attrs[psy->properties[j]]);
-+statics_failed:
-+ while (i--)
-+ device_remove_file(psy->dev,
-+ &power_supply_static_attrs[psy->properties[i]]);
-+succeed:
-+ return rc;
-+}
-+
-+void power_supply_remove_attrs(struct power_supply *psy)
-+{
-+ int i;
-+
-+ for (i = 0; i < ARRAY_SIZE(power_supply_static_attrs); i++)
-+ device_remove_file(psy->dev,
-+ &power_supply_static_attrs[i]);
-+
-+ for (i = 0; i < psy->num_properties; i++)
-+ device_remove_file(psy->dev,
-+ &power_supply_attrs[psy->properties[i]]);
-+
-+ return;
-+}
-+
-+static char *kstruprdup(const char *str, gfp_t gfp)
-+{
-+ char *ret, *ustr;
-+
-+ ustr = ret = kmalloc(strlen(str) + 1, gfp);
-+
-+ if (!ret)
-+ return NULL;
-+
-+ while (*str)
-+ *ustr++ = toupper(*str++);
-+
-+ *ustr = 0;
-+
-+ return ret;
-+}
-+
-+int power_supply_uevent(struct device *dev, char **envp, int num_envp,
-+ char *buffer, int buffer_size)
-+{
-+ struct power_supply *psy = dev_get_drvdata(dev);
-+ int i = 0, length = 0, ret = 0, j;
-+ char *prop_buf;
-+ char *attrname;
-+
-+ dev_dbg(dev, "uevent\n");
-+
-+ if (!psy) {
-+ dev_dbg(dev, "No power supply yet\n");
-+ return ret;
-+ }
-+
-+ dev_dbg(dev, "POWER_SUPPLY_NAME=%s\n", psy->name);
-+
-+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-+ &length, "POWER_SUPPLY_NAME=%s", psy->name);
-+ if (ret)
-+ return ret;
-+
-+ prop_buf = (char *)get_zeroed_page(GFP_KERNEL);
-+ if (!prop_buf)
-+ return -ENOMEM;
-+
-+ for (j = 0; j < ARRAY_SIZE(power_supply_static_attrs); j++) {
-+ struct device_attribute *attr;
-+ char *line;
-+
-+ attr = &power_supply_static_attrs[j];
-+
-+ ret = power_supply_show_static_attrs(dev, attr, prop_buf);
-+ if (ret < 0)
-+ goto out;
-+
-+ line = strchr(prop_buf, '\n');
-+ if (line)
-+ *line = 0;
-+
-+ attrname = kstruprdup(attr->attr.name, GFP_KERNEL);
-+ if (!attrname) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+
-+ dev_dbg(dev, "Static prop %s=%s\n", attrname, prop_buf);
-+
-+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-+ &length, "POWER_SUPPLY_%s=%s",
-+ attrname, prop_buf);
-+ kfree(attrname);
-+ if (ret)
-+ goto out;
-+ }
-+
-+ dev_dbg(dev, "%zd dynamic props\n", psy->num_properties);
-+
-+ for (j = 0; j < psy->num_properties; j++) {
-+ struct device_attribute *attr;
-+ char *line;
-+
-+ attr = &power_supply_attrs[psy->properties[j]];
-+
-+ ret = power_supply_show_property(dev, attr, prop_buf);
-+ if (ret < 0)
-+ goto out;
-+
-+ line = strchr(prop_buf, '\n');
-+ if (line)
-+ *line = 0;
-+
-+ attrname = kstruprdup(attr->attr.name, GFP_KERNEL);
-+ if (!attrname) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+
-+ dev_dbg(dev, "prop %s=%s\n", attrname, prop_buf);
-+
-+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-+ &length, "POWER_SUPPLY_%s=%s",
-+ attrname, prop_buf);
-+ kfree(attrname);
-+ if (ret)
-+ goto out;
-+ }
-+
-+out:
-+ free_page((unsigned long)prop_buf);
-+
-+ return ret;
-+}
-Index: linux-2.6.22/drivers/power/simpad-battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/simpad-battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,242 @@
-+/*
-+ * linux/drivers/misc/simpad-battery.c
-+ *
-+ * Copyright (C) 2005 Holger Hans Peter Freyther
-+ * Copyright (C) 2001 Juergen Messerer
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License.
-+ *
-+ * Read the Battery Level through the UCB1x00 chip. T-Sinuspad is
-+ * unsupported for now.
-+ *
-+ */
-+
-+#include <linux/battery.h>
-+#include <asm/dma.h>
-+#include "ucb1x00.h"
-+
-+
-+/*
-+ * Conversion from AD -> mV
-+ * 7.5V = 1023 7.3313mV/Digit
-+ *
-+ * 400 Units == 9.7V
-+ * a = ADC value
-+ * 21 = ADC error
-+ * 12600 = Divident to get 2*7.3242
-+ * 860 = Divider to get 2*7.3242
-+ * 170 = Voltagedrop over
-+ */
-+#define CALIBRATE_BATTERY(a) ((((a + 21)*12600)/860) + 170)
-+
-+/*
-+ * We have two types of batteries a small and a large one
-+ * To get the right value we to distinguish between those two
-+ * 450 Units == 15 V
-+ */
-+#define CALIBRATE_SUPPLY(a) (((a) * 1500) / 45)
-+#define MIN_SUPPLY 12000 /* Less then 12V means no powersupply */
-+
-+/*
-+ * Charging Current
-+ * if value is >= 50 then charging is on
-+ */
-+#define CALIBRATE_CHARGING(a) (((a)* 1000)/(152/4)))
-+
-+struct simpad_battery_t {
-+ struct battery battery;
-+ struct ucb1x00* ucb;
-+
-+ /*
-+ * Variables for the values to one time support
-+ * T-Sinuspad as well
-+ */
-+ int min_voltage;
-+ int min_current;
-+ int min_charge;
-+
-+ int max_voltage;
-+ int max_current;
-+ int max_charge;
-+
-+ int min_supply;
-+ int charging_led_label;
-+ int charging_max_label;
-+ int batt_full;
-+ int batt_low;
-+ int batt_critical;
-+ int batt_empty;
-+};
-+
-+static int simpad_get_min_voltage(struct battery* _battery )
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->min_voltage;
-+}
-+
-+static int simpad_get_min_current(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->min_current;
-+}
-+
-+static int simpad_get_min_charge(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->min_charge;
-+}
-+
-+static int simpad_get_max_voltage(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->max_voltage;
-+}
-+
-+static int simpad_get_max_current(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->max_current;
-+}
-+
-+static int simpad_get_max_charge(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->max_charge;
-+}
-+
-+static int simpad_get_temp(struct battery* _battery)
-+{
-+ return 0;
-+}
-+
-+static int simpad_get_voltage(struct battery* _battery)
-+{
-+ int val;
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+
-+
-+ ucb1x00_adc_enable(battery->ucb);
-+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD1, UCB_NOSYNC);
-+ ucb1x00_adc_disable(battery->ucb);
-+
-+ return CALIBRATE_BATTERY(val);
-+}
-+
-+static int simpad_get_current(struct battery* _battery)
-+{
-+ int val;
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+
-+ ucb1x00_adc_enable(battery->ucb);
-+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD3, UCB_NOSYNC);
-+ ucb1x00_adc_disable(battery->ucb);
-+
-+ return val;
-+}
-+
-+static int simpad_get_charge(struct battery* _battery)
-+{
-+ int val;
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+
-+ ucb1x00_adc_enable(battery->ucb);
-+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD2, UCB_NOSYNC);
-+ ucb1x00_adc_disable(battery->ucb);
-+
-+ return CALIBRATE_SUPPLY(val);
-+
-+}
-+
-+static int simpad_get_status(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)(_battery);
-+ int vcharger = simpad_get_voltage(_battery);
-+ int icharger = simpad_get_current(_battery);
-+
-+ int status = BATTERY_STATUS_UNKNOWN;
-+ if(icharger > battery->charging_led_label)
-+ status = BATTERY_STATUS_CHARGING;
-+ else if(vcharger > battery->min_supply)
-+ status = BATTERY_STATUS_NOT_CHARGING;
-+ else
-+ status = BATTERY_STATUS_DISCHARGING;
-+
-+ return status;
-+}
-+
-+static struct simpad_battery_t simpad_battery = {
-+ .battery = {
-+ .get_min_voltage = simpad_get_min_voltage,
-+ .get_min_current = simpad_get_min_current,
-+ .get_min_charge = simpad_get_min_charge,
-+ .get_max_voltage = simpad_get_max_voltage,
-+ .get_max_current = simpad_get_max_current,
-+ .get_max_charge = simpad_get_max_charge,
-+ .get_temp = simpad_get_temp,
-+ .get_voltage = simpad_get_voltage,
-+ .get_current = simpad_get_current,
-+ .get_charge = simpad_get_charge,
-+ .get_status = simpad_get_status,
-+ },
-+ .min_voltage = 0,
-+ .min_current = 0,
-+ .min_charge = 0,
-+ .max_voltage = 0,
-+ .max_current = 0,
-+ .max_charge = 0,
-+
-+ .min_supply = 1200,
-+ .charging_led_label = 18,
-+ .charging_max_label = 265,
-+ .batt_full = 8300,
-+ .batt_low = 7300,
-+ .batt_critical = 6800,
-+ .batt_empty = 6500,
-+};
-+
-+
-+
-+/*
-+ * UCB glue code
-+ */
-+static int ucb1x00_battery_add(struct class_device *dev)
-+{
-+ struct ucb1x00 *ucb = classdev_to_ucb1x00(dev);
-+ simpad_battery.ucb = ucb;
-+
-+ battery_class_register(&simpad_battery.battery);
-+
-+ return 0;
-+}
-+
-+static void ucb1x00_battery_remove(struct class_device *dev)
-+{
-+ return battery_class_unregister(&simpad_battery.battery);
-+}
-+
-+
-+static struct ucb1x00_class_interface ucb1x00_battery_interface = {
-+ .interface = {
-+ .add = ucb1x00_battery_add,
-+ .remove = ucb1x00_battery_remove,
-+ },
-+};
-+
-+
-+static int __init battery_register(void)
-+{
-+ return ucb1x00_register_interface(&ucb1x00_battery_interface);
-+}
-+
-+static void __exit battery_unregister(void)
-+{
-+ ucb1x00_unregister_interface(&ucb1x00_battery_interface);
-+}
-+
-+module_init(battery_register);
-+module_exit(battery_unregister);
-+
-+MODULE_AUTHOR("Holger Hans Peter Freyther");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/arch/arm/Kconfig
-===================================================================
---- linux-2.6.22.orig/arch/arm/Kconfig 2007-08-23 12:17:42.000000000 +0200
-+++ linux-2.6.22/arch/arm/Kconfig 2007-08-23 12:22:28.000000000 +0200
-@@ -1016,6 +1016,8 @@
-
- source "drivers/w1/Kconfig"
-
-+source "drivers/power/Kconfig"
-+
- source "drivers/hwmon/Kconfig"
-
- #source "drivers/l3/Kconfig"
-Index: linux-2.6.22/drivers/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/Kconfig 2007-08-23 12:21:27.000000000 +0200
-+++ linux-2.6.22/drivers/Kconfig 2007-08-23 12:22:03.000000000 +0200
-@@ -54,6 +54,8 @@
-
- source "drivers/w1/Kconfig"
-
-+source "drivers/power/Kconfig"
-+
- source "drivers/hwmon/Kconfig"
-
- source "drivers/mfd/Kconfig"
-Index: linux-2.6.22/drivers/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/Makefile 2007-08-23 12:33:58.000000000 +0200
-+++ linux-2.6.22/drivers/Makefile 2007-08-23 12:34:34.000000000 +0200
-@@ -61,6 +61,7 @@
- obj-$(CONFIG_RTC_LIB) += rtc/
- obj-y += i2c/
- obj-$(CONFIG_W1) += w1/
-+obj-$(CONFIG_POWER_SUPPLY) += power/
- obj-$(CONFIG_HWMON) += hwmon/
- obj-$(CONFIG_PHONE) += telephony/
- obj-$(CONFIG_MD) += md/
-Index: linux-2.6.22/include/linux/power_supply.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/power_supply.h 2007-08-23 12:37:10.000000000 +0200
-@@ -0,0 +1,175 @@
-+/*
-+ * Universal power supply monitor class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#ifndef __LINUX_POWER_SUPPLY_H__
-+#define __LINUX_POWER_SUPPLY_H__
-+
-+#include <linux/device.h>
-+#include <linux/workqueue.h>
-+#include <linux/leds.h>
-+
-+/*
-+ * All voltages, currents, charges, energies, time and temperatures in uV,
-+ * uA, uAh, uWh, seconds and tenths of degree Celsius unless otherwise
-+ * stated. It's driver's job to convert its raw values to units in which
-+ * this class operates.
-+ */
-+
-+/*
-+ * For systems where the charger determines the maximum battery capacity
-+ * the min and max fields should be used to present these values to user
-+ * space. Unused/unknown fields will not appear in sysfs.
-+ */
-+
-+enum {
-+ POWER_SUPPLY_STATUS_UNKNOWN = 0,
-+ POWER_SUPPLY_STATUS_CHARGING,
-+ POWER_SUPPLY_STATUS_DISCHARGING,
-+ POWER_SUPPLY_STATUS_NOT_CHARGING,
-+ POWER_SUPPLY_STATUS_FULL,
-+};
-+
-+enum {
-+ POWER_SUPPLY_HEALTH_UNKNOWN = 0,
-+ POWER_SUPPLY_HEALTH_GOOD,
-+ POWER_SUPPLY_HEALTH_OVERHEAT,
-+ POWER_SUPPLY_HEALTH_DEAD,
-+};
-+
-+enum {
-+ POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
-+ POWER_SUPPLY_TECHNOLOGY_NIMH,
-+ POWER_SUPPLY_TECHNOLOGY_LION,
-+ POWER_SUPPLY_TECHNOLOGY_LIPO,
-+};
-+
-+enum {
-+ POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
-+ POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL,
-+ POWER_SUPPLY_CAPACITY_LEVEL_LOW,
-+ POWER_SUPPLY_CAPACITY_LEVEL_NORMAL,
-+ POWER_SUPPLY_CAPACITY_LEVEL_HIGH,
-+ POWER_SUPPLY_CAPACITY_LEVEL_FULL,
-+};
-+
-+enum power_supply_property {
-+ /* Properties of type `int' */
-+ POWER_SUPPLY_PROP_STATUS = 0,
-+ POWER_SUPPLY_PROP_HEALTH,
-+ POWER_SUPPLY_PROP_PRESENT,
-+ POWER_SUPPLY_PROP_ONLINE,
-+ POWER_SUPPLY_PROP_TECHNOLOGY,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+ POWER_SUPPLY_PROP_VOLTAGE_AVG,
-+ POWER_SUPPLY_PROP_CURRENT_NOW,
-+ POWER_SUPPLY_PROP_CURRENT_AVG,
-+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_FULL,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY,
-+ POWER_SUPPLY_PROP_CHARGE_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_AVG,
-+ POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN,
-+ POWER_SUPPLY_PROP_ENERGY_FULL,
-+ POWER_SUPPLY_PROP_ENERGY_EMPTY,
-+ POWER_SUPPLY_PROP_ENERGY_NOW,
-+ POWER_SUPPLY_PROP_ENERGY_AVG,
-+ POWER_SUPPLY_PROP_CAPACITY, /* in percents! */
-+ POWER_SUPPLY_PROP_CAPACITY_LEVEL,
-+ POWER_SUPPLY_PROP_TEMP,
-+ POWER_SUPPLY_PROP_TEMP_AMBIENT,
-+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,
-+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
-+ POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,
-+ POWER_SUPPLY_PROP_TIME_TO_FULL_AVG,
-+ /* Properties of type `const char *' */
-+ POWER_SUPPLY_PROP_MODEL_NAME,
-+};
-+
-+enum power_supply_type {
-+ POWER_SUPPLY_TYPE_BATTERY = 0,
-+ POWER_SUPPLY_TYPE_UPS,
-+ POWER_SUPPLY_TYPE_MAINS,
-+ POWER_SUPPLY_TYPE_USB,
-+};
-+
-+union power_supply_propval {
-+ int intval;
-+ const char *strval;
-+};
-+
-+struct power_supply {
-+ const char *name;
-+ enum power_supply_type type;
-+ enum power_supply_property *properties;
-+ size_t num_properties;
-+
-+ char **supplied_to;
-+ size_t num_supplicants;
-+
-+ int (*get_property)(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val);
-+ void (*external_power_changed)(struct power_supply *psy);
-+
-+ /* For APM emulation, think legacy userspace. */
-+ int use_for_apm;
-+
-+ /* private */
-+ struct device *dev;
-+ struct work_struct changed_work;
-+
-+#ifdef CONFIG_LEDS_TRIGGERS
-+ struct led_trigger *charging_full_trig;
-+ char *charging_full_trig_name;
-+ struct led_trigger *charging_trig;
-+ char *charging_trig_name;
-+ struct led_trigger *full_trig;
-+ char *full_trig_name;
-+ struct led_trigger *online_trig;
-+ char *online_trig_name;
-+#endif
-+};
-+
-+/*
-+ * This is recommended structure to specify static power supply parameters.
-+ * Generic one, parametrizable for different power supplies. Power supply
-+ * class itself does not use it, but that's what implementing most platform
-+ * drivers, should try reuse for consistency.
-+ */
-+
-+struct power_supply_info {
-+ const char *name;
-+ int technology;
-+ int voltage_max_design;
-+ int voltage_min_design;
-+ int charge_full_design;
-+ int charge_empty_design;
-+ int energy_full_design;
-+ int energy_empty_design;
-+ int use_for_apm;
-+};
-+
-+extern void power_supply_changed(struct power_supply *psy);
-+extern int power_supply_am_i_supplied(struct power_supply *psy);
-+
-+extern int power_supply_register(struct device *parent,
-+ struct power_supply *psy);
-+extern void power_supply_unregister(struct power_supply *psy);
-+
-+/* For APM emulation, think legacy userspace. */
-+extern struct class *power_supply_class;
-+
-+#endif /* __LINUX_POWER_SUPPLY_H__ */
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pxa-serial-hack.patch
deleted file mode 100644
index bf20f46a05..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pxa-serial-hack.patch
+++ /dev/null
@@ -1,90 +0,0 @@
----
- drivers/serial/8250.c | 5 +++++
- drivers/serial/serial_core.c | 1 +
- drivers/serial/serial_cs.c | 12 +++++++++---
- include/linux/serial_core.h | 1 +
- 4 files changed, 16 insertions(+), 3 deletions(-)
-
-Index: linux-2.6.20/drivers/serial/8250.c
-===================================================================
---- linux-2.6.20.orig/drivers/serial/8250.c 2007-04-27 13:37:26.000000000 +0100
-+++ linux-2.6.20/drivers/serial/8250.c 2007-04-27 13:38:16.000000000 +0100
-@@ -2429,7 +2429,12 @@
- .driver_name = "serial",
- .dev_name = "ttyS",
- .major = TTY_MAJOR,
-+#ifdef CONFIG_SERIAL_PXA
-+ .minor = 64 + 4,
-+ .name_base = 4,
-+#else
- .minor = 64,
-+#endif
- .nr = UART_NR,
- .cons = SERIAL8250_CONSOLE,
- };
-Index: linux-2.6.20/drivers/serial/serial_core.c
-===================================================================
---- linux-2.6.20.orig/drivers/serial/serial_core.c 2007-02-04 18:44:54.000000000 +0000
-+++ linux-2.6.20/drivers/serial/serial_core.c 2007-04-27 13:39:39.000000000 +0100
-@@ -2068,7 +2068,8 @@
- printk(KERN_INFO "%s%s%s%d at %s (irq = %d) is a %s\n",
- port->dev ? port->dev->bus_id : "",
- port->dev ? ": " : "",
-- drv->dev_name, port->line, address, port->irq, uart_type(port));
-+ drv->dev_name, port->line + drv->name_base, address, port->irq,
-+ uart_type(port));
- }
-
- static void
-@@ -2183,6 +2184,7 @@
- normal->owner = drv->owner;
- normal->driver_name = drv->driver_name;
- normal->name = drv->dev_name;
-+ normal->name_base = drv->name_base;
- normal->major = drv->major;
- normal->minor_start = drv->minor;
- normal->type = TTY_DRIVER_TYPE_SERIAL;
-Index: linux-2.6.20/include/linux/serial_core.h
-===================================================================
---- linux-2.6.20.orig/include/linux/serial_core.h 2007-02-04 18:44:54.000000000 +0000
-+++ linux-2.6.20/include/linux/serial_core.h 2007-04-27 13:37:27.000000000 +0100
-@@ -341,6 +341,7 @@
- struct module *owner;
- const char *driver_name;
- const char *dev_name;
-+ int name_base;
- int major;
- int minor;
- int nr;
-Index: linux-2.6.20/drivers/serial/serial_cs.c
-===================================================================
---- linux-2.6.20.orig/drivers/serial/serial_cs.c 2007-02-04 18:44:54.000000000 +0000
-+++ linux-2.6.20/drivers/serial/serial_cs.c 2007-04-27 13:40:34.000000000 +0100
-@@ -390,7 +390,7 @@
- kio_addr_t iobase, int irq)
- {
- struct uart_port port;
-- int line;
-+ int line, linestart;
-
- memset(&port, 0, sizeof (struct uart_port));
- port.iobase = iobase;
-@@ -411,10 +411,16 @@
- return -EINVAL;
- }
-
-+#if CONFIG_SERIAL_PXA
-+ linestart = 4;
-+#else
-+ linestart = 0;
-+#endif
-+
- info->line[info->ndev] = line;
-- sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
-+ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line+linestart);
- info->node[info->ndev].major = TTY_MAJOR;
-- info->node[info->ndev].minor = 0x40 + line;
-+ info->node[info->ndev].minor = 0x40 + line + linestart;
- if (info->ndev > 0)
- info->node[info->ndev - 1].next = &info->node[info->ndev];
- info->ndev++;
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
deleted file mode 100644
index b513ba1466..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-
-From: Petr Vandrovec <vandrove@vc.cvut.cz>
-
-Patch below adds support for using different prescaler than 16 for 16c950
-chips. This is needed for using Fujitsu-Siemens Connect2Air compact-flash
-card, which comes (apparently) with 806kHz clocks, and so you have to
-program prescaler for division by 7, and DLAB to 1, to get 115200Bd.
-
-To get card properly running you also have to add lines below to
-/etc/pcmcia/serial.opts so kernel knows that base speed is not 115200 but
-50400 (50400 * 16 = 806400; 806400 / 7 = 115200). As I've found no code
-specifying baud_rate in serial_cs, I assume that specifying it in
-serial.opts is right way to do this type of things.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER maximum possible
-baud rate passed to uart code was uartclk / 16 while correct value for
-these devices (and for 16c950) is uartclk / 4.
-
-Patch also fixes problem that for UPF_MAGIC_MULTIPLIER devices with
-baud_rate 19200 or 9600 spd_cust did not work correctly. Not that such
-devices exist, but we should not ignore spd_cust, user probably knows why
-he asked for spd_cust.
-
-serial.opts:
-
-case "$MANFID-$FUNCID-$PRODID_1-$PRODID_2-$PRODID_3-$PRODID_4" in
-'0279,950b-2-GPRS Modem---')
- SERIAL_OPTS="baud_base 50400"
- ;;
-esac
-
-Cc: David Woodhouse <dwmw2@infradead.org>
-Signed-off-by: Andrew Morton <akpm@osdl.org>
----
-
- drivers/serial/8250.c | 82 +++++++++++++++++++++++++++++++++++++++-----------
- 1 file changed, 64 insertions(+), 18 deletions(-)
-
-Index: linux-2.6.21/drivers/serial/8250.c
-===================================================================
---- linux-2.6.21.orig/drivers/serial/8250.c 2007-07-01 16:59:52.000000000 +0100
-+++ linux-2.6.21/drivers/serial/8250.c 2007-07-01 17:01:21.000000000 +0100
-@@ -1964,24 +1964,58 @@ static void serial8250_shutdown(struct u
- serial_unlink_irq_chain(up);
- }
-
--static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud)
-+static unsigned int serial8250_get_divisor(struct uart_port *port, unsigned int baud,
-+ unsigned int *prescaler)
- {
-- unsigned int quot;
--
-- /*
-- * Handle magic divisors for baud rates above baud_base on
-- * SMSC SuperIO chips.
-+ /*
-+ * Use special handling only if user did not supply its own divider.
-+ * spd_cust is defined in terms of baud_base, so always use default
-+ * prescaler when spd_cust is requested.
- */
-- if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/4))
-- quot = 0x8001;
-- else if ((port->flags & UPF_MAGIC_MULTIPLIER) &&
-- baud == (port->uartclk/8))
-- quot = 0x8002;
-- else
-- quot = uart_get_divisor(port, baud);
-
-- return quot;
-+ *prescaler = 16;
-+ if (baud != 38400 || (port->flags & UPF_SPD_MASK) != UPF_SPD_CUST) {
-+ unsigned int quot = port->uartclk / baud;
-+
-+ /*
-+ * Handle magic divisors for baud rates above baud_base on
-+ * SMSC SuperIO chips.
-+ */
-+ if (port->flags & UPF_MAGIC_MULTIPLIER) {
-+ if (quot == 4) {
-+ return 0x8001;
-+ } else if (quot == 8) {
-+ return 0x8002;
-+ }
-+ }
-+ if (port->type == PORT_16C950) {
-+ /*
-+ * This computes TCR value (4 to 16), not CPR value (which can
-+ * be between 1.000 and 31.875) - chip I have uses XTAL of
-+ * 806400Hz, and so a division by 7 is required to get 115200Bd.
-+ * I'm leaving CPR disabled for now, until someone will
-+ * hit even more exotic XTAL (it is needed to get 500kbps
-+ * or 1000kbps from 18.432MHz XTAL, but I have no device
-+ * which would benefit from doing that).
-+ *
-+ * If we can use divide by 16, use it. Otherwise look for
-+ * better prescaler, from 15 to 4. If quotient cannot
-+ * be divided by any integer value between 4 and 15, use 4.
-+ */
-+ if (quot & 0x0F) {
-+ unsigned int div;
-+
-+ for (div = 15; div > 4; div--) {
-+ if (quot % div == 0) {
-+ break;
-+ }
-+ }
-+ *prescaler = div;
-+ return quot / div;
-+ }
-+ }
-+ }
-+ return uart_get_divisor(port, baud);
- }
-
- static void
-@@ -1991,7 +2025,7 @@ serial8250_set_termios(struct uart_port
- struct uart_8250_port *up = (struct uart_8250_port *)port;
- unsigned char cval, fcr = 0;
- unsigned long flags;
-- unsigned int baud, quot;
-+ unsigned int baud, quot, prescaler;
-
- switch (termios->c_cflag & CSIZE) {
- case CS5:
-@@ -2023,8 +2057,13 @@ serial8250_set_termios(struct uart_port
- /*
- * Ask the core to calculate the divisor for us.
- */
-- baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-- quot = serial8250_get_divisor(port, baud);
-+ if (port->type == PORT_16C950 || (port->flags & UPF_MAGIC_MULTIPLIER)) {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/4);
-+ } else {
-+ baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
-+ }
-+ quot = serial8250_get_divisor(port, baud, &prescaler);
-+
-
- /*
- * Oxford Semi 952 rev B workaround
-@@ -2139,6 +2178,13 @@ serial8250_set_termios(struct uart_port
- serial_dl_write(up, quot);
-
- /*
-+ * Program prescaler for 16C950 chips.
-+ */
-+ if (up->port.type == PORT_16C950) {
-+ serial_icr_write(up, UART_TCR, prescaler == 16 ? 0 : prescaler);
-+ }
-+
-+ /*
- * LCR DLAB must be set to enable 64-byte FIFO mode. If the FCR
- * is written without DLAB set, this mode will be disabled.
- */
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/squashfs3.0-2.6.15.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/squashfs3.0-2.6.15.patch
deleted file mode 100644
index a210afcaf8..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/squashfs3.0-2.6.15.patch
+++ /dev/null
@@ -1,4189 +0,0 @@
- fs/Kconfig | 65 +
- fs/Makefile | 1
- fs/squashfs/Makefile | 7
- fs/squashfs/inode.c | 2122 +++++++++++++++++++++++++++++++++++++++++
- fs/squashfs/squashfs.h | 86 +
- fs/squashfs/squashfs2_0.c | 757 ++++++++++++++
- include/linux/squashfs_fs.h | 911 +++++++++++++++++
- include/linux/squashfs_fs_i.h | 45
- include/linux/squashfs_fs_sb.h | 74 +
- init/do_mounts_rd.c | 13
- 10 files changed, 4081 insertions(+)
-
-Index: linux-2.6.22/fs/Kconfig
-===================================================================
---- linux-2.6.22.orig/fs/Kconfig 2007-08-28 21:56:32.000000000 +0100
-+++ linux-2.6.22/fs/Kconfig 2007-08-28 21:56:34.000000000 +0100
-@@ -1394,6 +1394,71 @@ config CRAMFS
-
- If unsure, say N.
-
-+config SQUASHFS
-+ tristate "SquashFS 3.0 - Squashed file system support"
-+ select ZLIB_INFLATE
-+ help
-+ Saying Y here includes support for SquashFS 3.0 (a Compressed Read-Only File
-+ System). Squashfs is a highly compressed read-only filesystem for Linux.
-+ It uses zlib compression to compress both files, inodes and directories.
-+ Inodes in the system are very small and all blocks are packed to minimise
-+ data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
-+ SquashFS 3.0 supports 64 bit filesystems and files (larger than 4GB), full
-+ uid/gid information, hard links and timestamps.
-+
-+ Squashfs is intended for general read-only filesystem use, for archival
-+ use (i.e. in cases where a .tar.gz file may be used), and in embedded
-+ systems where low overhead is needed. Further information and filesystem tools
-+ are available from http://squashfs.sourceforge.net.
-+
-+ If you want to compile this as a module ( = code which can be
-+ inserted in and removed from the running kernel whenever you want),
-+ say M here and read <file:Documentation/modules.txt>. The module
-+ will be called squashfs. Note that the root file system (the one
-+ containing the directory /) cannot be compiled as a module.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_EMBEDDED
-+
-+ bool "Additional options for memory-constrained systems"
-+ depends on SQUASHFS
-+ default n
-+ help
-+ Saying Y here allows you to specify cache sizes and how Squashfs
-+ allocates memory. This is only intended for memory constrained
-+ systems.
-+
-+ If unsure, say N.
-+
-+config SQUASHFS_FRAGMENT_CACHE_SIZE
-+ int "Number of fragments cached" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default "3"
-+ help
-+ By default SquashFS caches the last 3 fragments read from
-+ the filesystem. Increasing this amount may mean SquashFS
-+ has to re-read fragments less often from disk, at the expense
-+ of extra system memory. Decreasing this amount will mean
-+ SquashFS uses less memory at the expense of extra reads from disk.
-+
-+ Note there must be at least one cached fragment. Anything
-+ much more than three will probably not make much difference.
-+
-+config SQUASHFS_VMALLOC
-+ bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
-+ depends on SQUASHFS
-+ default n
-+ help
-+ By default SquashFS uses kmalloc to obtain fragment cache memory.
-+ Kmalloc memory is the standard kernel allocator, but it can fail
-+ on memory constrained systems. Because of the way Vmalloc works,
-+ Vmalloc can succeed when kmalloc fails. Specifying this option
-+ will make SquashFS always use Vmalloc to allocate the
-+ fragment cache memory.
-+
-+ If unsure, say N.
-+
- config VXFS_FS
- tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
- depends on BLOCK
-Index: linux-2.6.22/fs/Makefile
-===================================================================
---- linux-2.6.22.orig/fs/Makefile 2007-08-28 21:54:14.000000000 +0100
-+++ linux-2.6.22/fs/Makefile 2007-08-28 21:56:34.000000000 +0100
-@@ -72,6 +72,7 @@ obj-$(CONFIG_JBD) += jbd/
- obj-$(CONFIG_JBD2) += jbd2/
- obj-$(CONFIG_EXT2_FS) += ext2/
- obj-$(CONFIG_CRAMFS) += cramfs/
-+obj-$(CONFIG_SQUASHFS) += squashfs/
- obj-$(CONFIG_RAMFS) += ramfs/
- obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
- obj-$(CONFIG_CODA_FS) += coda/
-Index: linux-2.6.22/fs/squashfs/inode.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/fs/squashfs/inode.c 2007-08-28 22:12:03.000000000 +0100
-@@ -0,0 +1,2122 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * inode.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+
-+static void squashfs_put_super(struct super_block *);
-+static int squashfs_statfs(struct dentry *, struct kstatfs *);
-+static int squashfs_symlink_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage4K(struct file *file, struct page *page);
-+static int squashfs_readdir(struct file *, void *, filldir_t);
-+static struct inode *squashfs_alloc_inode(struct super_block *sb);
-+static void squashfs_destroy_inode(struct inode *inode);
-+static int init_inodecache(void);
-+static void destroy_inodecache(void);
-+static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
-+ struct nameidata *);
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize);
-+static int squashfs_get_sb(struct file_system_type *, int,
-+ const char *, void *, struct vfsmount *);
-+
-+
-+static z_stream stream;
-+
-+static struct file_system_type squashfs_fs_type = {
-+ .owner = THIS_MODULE,
-+ .name = "squashfs",
-+ .get_sb = squashfs_get_sb,
-+ .kill_sb = kill_block_super,
-+ .fs_flags = FS_REQUIRES_DEV
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static struct super_operations squashfs_ops = {
-+ .alloc_inode = squashfs_alloc_inode,
-+ .destroy_inode = squashfs_destroy_inode,
-+ .statfs = squashfs_statfs,
-+ .put_super = squashfs_put_super,
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
-+ .readpage = squashfs_symlink_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops = {
-+ .readpage = squashfs_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
-+ .readpage = squashfs_readpage4K
-+};
-+
-+static struct file_operations squashfs_dir_ops = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir
-+};
-+
-+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
-+ .lookup = squashfs_lookup
-+};
-+
-+
-+static struct buffer_head *get_block_length(struct super_block *s,
-+ int *cur_index, int *offset, int *c_byte)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned short temp;
-+ struct buffer_head *bh;
-+
-+ if (!(bh = sb_bread(s, *cur_index)))
-+ goto out;
-+
-+ if (msblk->devblksize - *offset == 1) {
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ else
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ if (msblk->swap)
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ bh->b_data);
-+ else
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ bh->b_data);
-+ *c_byte = temp;
-+ *offset = 1;
-+ } else {
-+ if (msblk->swap) {
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ } else {
-+ ((unsigned char *) &temp)[0] = *((unsigned char *)
-+ (bh->b_data + *offset));
-+ ((unsigned char *) &temp)[1] = *((unsigned char *)
-+ (bh->b_data + *offset + 1));
-+ }
-+ *c_byte = temp;
-+ *offset += 2;
-+ }
-+
-+ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
-+ if (*offset == msblk->devblksize) {
-+ brelse(bh);
-+ if (!(bh = sb_bread(s, ++(*cur_index))))
-+ goto out;
-+ *offset = 0;
-+ }
-+ if (*((unsigned char *) (bh->b_data + *offset)) !=
-+ SQUASHFS_MARKER_BYTE) {
-+ ERROR("Metadata block marker corrupt @ %x\n",
-+ *cur_index);
-+ brelse(bh);
-+ goto out;
-+ }
-+ (*offset)++;
-+ }
-+ return bh;
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
-+ msblk->devblksize_log2) + 2];
-+ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
-+ unsigned int cur_index = index >> msblk->devblksize_log2;
-+ int bytes, avail_bytes, b = 0, k;
-+ char *c_buffer;
-+ unsigned int compressed;
-+ unsigned int c_byte = length;
-+
-+ if (c_byte) {
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ if (!(bh[0] = sb_getblk(s, cur_index)))
-+ goto block_release;
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b, bh);
-+ } else {
-+ if (!(bh[0] = get_block_length(s, &cur_index, &offset,
-+ &c_byte)))
-+ goto read_failure;
-+
-+ bytes = msblk->devblksize - offset;
-+ compressed = SQUASHFS_COMPRESSED(c_byte);
-+ c_buffer = compressed ? msblk->read_data : buffer;
-+ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
-+
-+ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+ ? "" : "un", (unsigned int) c_byte);
-+
-+ for (b = 1; bytes < c_byte; b++) {
-+ if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+ goto block_release;
-+ bytes += msblk->devblksize;
-+ }
-+ ll_rw_block(READ, b - 1, bh + 1);
-+ }
-+
-+ if (compressed)
-+ down(&msblk->read_data_mutex);
-+
-+ for (bytes = 0, k = 0; k < b; k++) {
-+ avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
-+ msblk->devblksize - offset :
-+ c_byte - bytes;
-+ wait_on_buffer(bh[k]);
-+ if (!buffer_uptodate(bh[k]))
-+ goto block_release;
-+ memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
-+ bytes += avail_bytes;
-+ offset = 0;
-+ brelse(bh[k]);
-+ }
-+
-+ /*
-+ * uncompress block
-+ */
-+ if (compressed) {
-+ int zlib_err;
-+
-+ stream.next_in = c_buffer;
-+ stream.avail_in = c_byte;
-+ stream.next_out = buffer;
-+ stream.avail_out = msblk->read_size;
-+
-+ if (((zlib_err = zlib_inflateInit(&stream)) != Z_OK) ||
-+ ((zlib_err = zlib_inflate(&stream, Z_FINISH))
-+ != Z_STREAM_END) || ((zlib_err =
-+ zlib_inflateEnd(&stream)) != Z_OK)) {
-+ ERROR("zlib_fs returned unexpected result 0x%x\n",
-+ zlib_err);
-+ bytes = 0;
-+ } else
-+ bytes = stream.total_out;
-+
-+ up(&msblk->read_data_mutex);
-+ }
-+
-+ if (next_index)
-+ *next_index = index + c_byte + (length ? 0 :
-+ (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
-+ ? 3 : 2));
-+ return bytes;
-+
-+block_release:
-+ while (--b >= 0)
-+ brelse(bh[b]);
-+
-+read_failure:
-+ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ int n, i, bytes, return_length = length;
-+ long long next_index;
-+
-+ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
-+
-+ while ( 1 ) {
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (msblk->block_cache[i].block == block)
-+ break;
-+
-+ down(&msblk->block_cache_mutex);
-+
-+ if (i == SQUASHFS_CACHED_BLKS) {
-+ /* read inode header block */
-+ for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
-+ n ; n --, i = (i + 1) %
-+ SQUASHFS_CACHED_BLKS)
-+ if (msblk->block_cache[i].block !=
-+ SQUASHFS_USED_BLK)
-+ break;
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->waitq, &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->block_cache_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->waitq, &wait);
-+ continue;
-+ }
-+ msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
-+
-+ if (msblk->block_cache[i].block ==
-+ SQUASHFS_INVALID_BLK) {
-+ if (!(msblk->block_cache[i].data =
-+ kmalloc(SQUASHFS_METADATA_SIZE,
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate cache"
-+ "block\n");
-+ up(&msblk->block_cache_mutex);
-+ goto out;
-+ }
-+ }
-+
-+ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
-+ up(&msblk->block_cache_mutex);
-+
-+ if (!(msblk->block_cache[i].length =
-+ squashfs_read_data(s,
-+ msblk->block_cache[i].data,
-+ block, 0, &next_index))) {
-+ ERROR("Unable to read cache block [%llx:%x]\n",
-+ block, offset);
-+ goto out;
-+ }
-+
-+ down(&msblk->block_cache_mutex);
-+ wake_up(&msblk->waitq);
-+ msblk->block_cache[i].block = block;
-+ msblk->block_cache[i].next_index = next_index;
-+ TRACE("Read cache block [%llx:%x]\n", block, offset);
-+ }
-+
-+ if (msblk->block_cache[i].block != block) {
-+ up(&msblk->block_cache_mutex);
-+ continue;
-+ }
-+
-+ if ((bytes = msblk->block_cache[i].length - offset) >= length) {
-+ if (buffer)
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, length);
-+ if (msblk->block_cache[i].length - offset == length) {
-+ *next_block = msblk->block_cache[i].next_index;
-+ *next_offset = 0;
-+ } else {
-+ *next_block = block;
-+ *next_offset = offset + length;
-+ }
-+ up(&msblk->block_cache_mutex);
-+ goto finish;
-+ } else {
-+ if (buffer) {
-+ memcpy(buffer, msblk->block_cache[i].data +
-+ offset, bytes);
-+ buffer += bytes;
-+ }
-+ block = msblk->block_cache[i].next_index;
-+ up(&msblk->block_cache_mutex);
-+ length -= bytes;
-+ offset = 0;
-+ }
-+ }
-+
-+finish:
-+ return return_length;
-+out:
-+ return 0;
-+}
-+
-+
-+static int get_fragment_location(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
-+ struct squashfs_fragment_entry fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment)
-+{
-+ down(&msblk->fragment_mutex);
-+ fragment->locked --;
-+ wake_up(&msblk->fragment_wait_queue);
-+ up(&msblk->fragment_mutex);
-+}
-+
-+
-+SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length)
-+{
-+ int i, n, nf;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+
-+ while ( 1 ) {
-+ down(&msblk->fragment_mutex);
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
-+ msblk->fragment[i].block != start_block; i++);
-+
-+ if (i == SQUASHFS_CACHED_FRAGMENTS) {
-+ nf = (msblk->next_fragment + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS;
-+ for (i = msblk->next_fragment, n =
-+ SQUASHFS_CACHED_FRAGMENTS; n &&
-+ msblk->fragment[i].locked; n--, i = (i + 1) %
-+ SQUASHFS_CACHED_FRAGMENTS);
-+
-+ if (n == 0) {
-+ wait_queue_t wait;
-+
-+ init_waitqueue_entry(&wait, current);
-+ add_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ set_current_state(TASK_UNINTERRUPTIBLE);
-+ up(&msblk->fragment_mutex);
-+ schedule();
-+ set_current_state(TASK_RUNNING);
-+ remove_wait_queue(&msblk->fragment_wait_queue,
-+ &wait);
-+ continue;
-+ }
-+ msblk->next_fragment = nf;
-+
-+ if (msblk->fragment[i].data == NULL)
-+ if (!(msblk->fragment[i].data = SQUASHFS_ALLOC
-+ (SQUASHFS_FILE_MAX_SIZE))) {
-+ ERROR("Failed to allocate fragment "
-+ "cache block\n");
-+ up(&msblk->fragment_mutex);
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].locked = 1;
-+ up(&msblk->fragment_mutex);
-+
-+ if (!(msblk->fragment[i].length = squashfs_read_data(s,
-+ msblk->fragment[i].data,
-+ start_block, length, NULL))) {
-+ ERROR("Unable to read fragment cache block "
-+ "[%llx]\n", start_block);
-+ msblk->fragment[i].locked = 0;
-+ goto out;
-+ }
-+
-+ msblk->fragment[i].block = start_block;
-+ TRACE("New fragment %d, start block %lld, locked %d\n",
-+ i, msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ msblk->fragment[i].locked++;
-+ up(&msblk->fragment_mutex);
-+ TRACE("Got fragment %d, start block %lld, locked %d\n", i,
-+ msblk->fragment[i].block,
-+ msblk->fragment[i].locked);
-+ break;
-+ }
-+
-+ return &msblk->fragment[i];
-+
-+out:
-+ return NULL;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header *inodeb)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = inodeb->inode_number;
-+ i->i_mtime.tv_sec = inodeb->mtime;
-+ i->i_atime.tv_sec = inodeb->mtime;
-+ i->i_ctime.tv_sec = inodeb->mtime;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header id, sid;
-+ struct squashfs_base_inode_header *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_reg_inode_header *inodep = &id.reg;
-+ struct squashfs_reg_inode_header *sinodep = &sid.reg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = 1;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_LREG_TYPE: {
-+ unsigned int frag_size;
-+ long long frag_blk;
-+ struct squashfs_lreg_inode_header *inodep = &id.lreg;
-+ struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %llx, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header *inodep = &id.dir;
-+ struct squashfs_dir_inode_header *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops;
-+ i->i_fop = &squashfs_dir_ops;
-+ i->i_mode |= S_IFDIR;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header *inodep = &id.dev;
-+ struct squashfs_dev_inode_header *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ struct squashfs_ipc_inode_header *inodep = &id.ipc;
-+ struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_nlink = inodep->nlink;
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int read_fragment_index_table(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ /* Allocate fragment index table */
-+ if (!(msblk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ long long fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
-+ &msblk->fragment_index[i], 1);
-+ msblk->fragment_index[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget;
-+ msblk->read_blocklist = read_blocklist;
-+ msblk->read_fragment_index_table = read_fragment_index_table;
-+
-+ if (sblk->s_major == 1) {
-+ if (!squashfs_1_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 1.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if (sblk->s_major == 2) {
-+ if (!squashfs_2_0_supported(msblk)) {
-+ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
-+ "are unsupported\n");
-+ SERROR("Please recompile with "
-+ "Squashfs 2.0 support enabled\n");
-+ return 0;
-+ }
-+ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
-+ SQUASHFS_MINOR) {
-+ SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
-+ "filesystem\n", sblk->s_major, sblk->s_minor);
-+ SERROR("Please update your kernel\n");
-+ return 0;
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int squashfs_fill_super(struct super_block *s, void *data, int silent)
-+{
-+ struct squashfs_sb_info *msblk;
-+ struct squashfs_super_block *sblk;
-+ int i;
-+ char b[BDEVNAME_SIZE];
-+ struct inode *root;
-+
-+ TRACE("Entered squashfs_read_superblock\n");
-+
-+ if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info),
-+ GFP_KERNEL))) {
-+ ERROR("Failed to allocate superblock\n");
-+ goto failure;
-+ }
-+ memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
-+ msblk = s->s_fs_info;
-+ sblk = &msblk->sblk;
-+
-+ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
-+ msblk->devblksize_log2 = ffz(~msblk->devblksize);
-+
-+ init_MUTEX(&msblk->read_data_mutex);
-+ init_MUTEX(&msblk->read_page_mutex);
-+ init_MUTEX(&msblk->block_cache_mutex);
-+ init_MUTEX(&msblk->fragment_mutex);
-+ init_MUTEX(&msblk->meta_index_mutex);
-+
-+ init_waitqueue_head(&msblk->waitq);
-+ init_waitqueue_head(&msblk->fragment_wait_queue);
-+
-+ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
-+ sizeof(struct squashfs_super_block) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ SERROR("unable to read superblock\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Check it is a SQUASHFS superblock */
-+ msblk->swap = 0;
-+ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
-+ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
-+ struct squashfs_super_block ssblk;
-+
-+ WARNING("Mounting a different endian SQUASHFS "
-+ "filesystem on %s\n", bdevname(s->s_bdev, b));
-+
-+ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
-+ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
-+ msblk->swap = 1;
-+ } else {
-+ SERROR("Can't find a SQUASHFS superblock on %s\n",
-+ bdevname(s->s_bdev, b));
-+ goto failed_mount;
-+ }
-+ }
-+
-+ /* Check the MAJOR & MINOR versions */
-+ if(!supported_squashfs_filesystem(msblk, silent))
-+ goto failed_mount;
-+
-+ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
-+ TRACE("Inodes are %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_INODES
-+ (sblk->flags) ? "un" : "");
-+ TRACE("Data is %scompressed\n",
-+ SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
-+ ? "un" : "");
-+ TRACE("Check data is %s present in the filesystem\n",
-+ SQUASHFS_CHECK_DATA(sblk->flags) ?
-+ "" : "not");
-+ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
-+ TRACE("Block size %d\n", sblk->block_size);
-+ TRACE("Number of inodes %d\n", sblk->inodes);
-+ if (sblk->s_major > 1)
-+ TRACE("Number of fragments %d\n", sblk->fragments);
-+ TRACE("Number of uids %d\n", sblk->no_uids);
-+ TRACE("Number of gids %d\n", sblk->no_guids);
-+ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
-+ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
-+ if (sblk->s_major > 1)
-+ TRACE("sblk->fragment_table_start %llx\n",
-+ sblk->fragment_table_start);
-+ TRACE("sblk->uid_start %llx\n", sblk->uid_start);
-+
-+ s->s_flags |= MS_RDONLY;
-+ s->s_op = &squashfs_ops;
-+
-+ /* Init inode_table block pointer array */
-+ if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
-+ SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+
-+ msblk->next_cache = 0;
-+
-+ /* Allocate read_data block */
-+ msblk->read_size = (sblk->block_size < SQUASHFS_METADATA_SIZE) ?
-+ SQUASHFS_METADATA_SIZE :
-+ sblk->block_size;
-+
-+ if (!(msblk->read_data = kmalloc(msblk->read_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_data block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate read_page block */
-+ if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) {
-+ ERROR("Failed to allocate read_page block\n");
-+ goto failed_mount;
-+ }
-+
-+ /* Allocate uid and gid tables */
-+ if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ goto failed_mount;
-+ }
-+ msblk->guid = msblk->uid + sblk->no_uids;
-+
-+ if (msblk->swap) {
-+ unsigned int suid[sblk->no_uids + sblk->no_guids];
-+
-+ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
-+ sblk->no_guids), (sizeof(unsigned int) * 8));
-+ } else
-+ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
-+ ((sblk->no_uids + sblk->no_guids) *
-+ sizeof(unsigned int)) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read uid/gid table\n");
-+ goto failed_mount;
-+ }
-+
-+
-+ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
-+ goto allocate_root;
-+
-+ if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
-+ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) {
-+ ERROR("Failed to allocate fragment block cache\n");
-+ goto failed_mount;
-+ }
-+
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
-+ msblk->fragment[i].locked = 0;
-+ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+ msblk->fragment[i].data = NULL;
-+ }
-+
-+ msblk->next_fragment = 0;
-+
-+ /* Allocate fragment index table */
-+ if (msblk->read_fragment_index_table(s) == 0)
-+ goto failed_mount;
-+
-+allocate_root:
-+ if ((root = (msblk->iget)(s, sblk->root_inode)) == NULL)
-+ goto failed_mount;
-+
-+ if ((s->s_root = d_alloc_root(root)) == NULL) {
-+ ERROR("Root inode create failed\n");
-+ iput(root);
-+ goto failed_mount;
-+ }
-+
-+ TRACE("Leaving squashfs_read_super\n");
-+ return 0;
-+
-+failed_mount:
-+ kfree(msblk->fragment_index);
-+ kfree(msblk->fragment);
-+ kfree(msblk->uid);
-+ kfree(msblk->read_page);
-+ kfree(msblk->read_data);
-+ kfree(msblk->block_cache);
-+ kfree(msblk->fragment_index_2);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ return -EINVAL;
-+
-+failure:
-+ return -ENOMEM;
-+}
-+
-+
-+static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf)
-+{
-+ struct super_block *s = dentry->d_sb;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ TRACE("Entered squashfs_statfs\n");
-+
-+ buf->f_type = SQUASHFS_MAGIC;
-+ buf->f_bsize = sblk->block_size;
-+ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
-+ buf->f_bfree = buf->f_bavail = 0;
-+ buf->f_files = sblk->inodes;
-+ buf->f_ffree = 0;
-+ buf->f_namelen = SQUASHFS_NAME_LEN;
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_symlink_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ int index = page->index << PAGE_CACHE_SHIFT, length, bytes;
-+ long long block = SQUASHFS_I(inode)->start_block;
-+ int offset = SQUASHFS_I(inode)->offset;
-+ void *pageaddr = kmap(page);
-+
-+ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
-+ "%llx, offset %x\n", page->index,
-+ SQUASHFS_I(inode)->start_block,
-+ SQUASHFS_I(inode)->offset);
-+
-+ for (length = 0; length < index; length += bytes) {
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL,
-+ block, offset, PAGE_CACHE_SIZE, &block,
-+ &offset))) {
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block,
-+ offset);
-+ goto skip_read;
-+ }
-+ }
-+
-+ if (length != index) {
-+ ERROR("(squashfs_symlink_readpage) length != index\n");
-+ bytes = 0;
-+ goto skip_read;
-+ }
-+
-+ bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE :
-+ i_size_read(inode) - length;
-+
-+ if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block,
-+ offset, bytes, &block, &offset)))
-+ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
-+{
-+ struct meta_index *meta = NULL;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
-+
-+ if(msblk->meta_index == NULL)
-+ goto not_allocated;
-+
-+ for (i = 0; i < SQUASHFS_META_NUMBER; i ++)
-+ if (msblk->meta_index[i].inode_number == inode->i_ino &&
-+ msblk->meta_index[i].offset >= offset &&
-+ msblk->meta_index[i].offset <= index &&
-+ msblk->meta_index[i].locked == 0) {
-+ TRACE("locate_meta_index: entry %d, offset %d\n", i,
-+ msblk->meta_index[i].offset);
-+ meta = &msblk->meta_index[i];
-+ offset = meta->offset;
-+ }
-+
-+ if (meta)
-+ meta->locked = 1;
-+
-+not_allocated:
-+ up(&msblk->meta_index_mutex);
-+
-+ return meta;
-+}
-+
-+
-+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct meta_index *meta = NULL;
-+ int i;
-+
-+ down(&msblk->meta_index_mutex);
-+
-+ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
-+
-+ if(msblk->meta_index == NULL) {
-+ if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) *
-+ SQUASHFS_META_NUMBER, GFP_KERNEL))) {
-+ ERROR("Failed to allocate meta_index\n");
-+ goto failed;
-+ }
-+ for(i = 0; i < SQUASHFS_META_NUMBER; i++) {
-+ msblk->meta_index[i].inode_number = 0;
-+ msblk->meta_index[i].locked = 0;
-+ }
-+ msblk->next_meta_index = 0;
-+ }
-+
-+ for(i = SQUASHFS_META_NUMBER; i &&
-+ msblk->meta_index[msblk->next_meta_index].locked; i --)
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ if(i == 0) {
-+ TRACE("empty_meta_index: failed!\n");
-+ goto failed;
-+ }
-+
-+ TRACE("empty_meta_index: returned meta entry %d, %p\n",
-+ msblk->next_meta_index,
-+ &msblk->meta_index[msblk->next_meta_index]);
-+
-+ meta = &msblk->meta_index[msblk->next_meta_index];
-+ msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+ SQUASHFS_META_NUMBER;
-+
-+ meta->inode_number = inode->i_ino;
-+ meta->offset = offset;
-+ meta->skip = skip;
-+ meta->entries = 0;
-+ meta->locked = 1;
-+
-+failed:
-+ up(&msblk->meta_index_mutex);
-+ return meta;
-+}
-+
-+
-+void release_meta_index(struct inode *inode, struct meta_index *meta)
-+{
-+ meta->locked = 0;
-+}
-+
-+
-+static int read_block_index(struct super_block *s, int blocks, char *block_list,
-+ long long *start_block, int *offset)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ unsigned int *block_listp;
-+ int block = 0;
-+
-+ if (msblk->swap) {
-+ char sblock_list[blocks << 2];
-+
-+ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
-+ ((unsigned int *)sblock_list), blocks);
-+ } else
-+ if (!squashfs_get_cached_block(s, block_list, *start_block,
-+ *offset, blocks << 2, start_block, offset)) {
-+ ERROR("Unable to read block list [%llx:%x]\n",
-+ *start_block, *offset);
-+ goto failure;
-+ }
-+
-+ for (block_listp = (unsigned int *) block_list; blocks;
-+ block_listp++, blocks --)
-+ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
-+
-+ return block;
-+
-+failure:
-+ return -1;
-+}
-+
-+
-+#define SIZE 256
-+
-+static inline int calculate_skip(int blocks) {
-+ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
-+ return skip >= 7 ? 7 : skip + 1;
-+}
-+
-+
-+static int get_meta_index(struct inode *inode, int index,
-+ long long *index_block, int *index_offset,
-+ long long *data_block, char *block_list)
-+{
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
-+ int offset = 0;
-+ struct meta_index *meta;
-+ struct meta_entry *meta_entry;
-+ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
-+ int cur_offset = SQUASHFS_I(inode)->offset;
-+ long long cur_data_block = SQUASHFS_I(inode)->start_block;
-+ int i;
-+
-+ index /= SQUASHFS_META_INDEXES * skip;
-+
-+ while ( offset < index ) {
-+ meta = locate_meta_index(inode, index, offset + 1);
-+
-+ if (meta == NULL) {
-+ if ((meta = empty_meta_index(inode, offset + 1,
-+ skip)) == NULL)
-+ goto all_done;
-+ } else {
-+ offset = index < meta->offset + meta->entries ? index :
-+ meta->offset + meta->entries - 1;
-+ meta_entry = &meta->meta_entry[offset - meta->offset];
-+ cur_index_block = meta_entry->index_block + sblk->inode_table_start;
-+ cur_offset = meta_entry->offset;
-+ cur_data_block = meta_entry->data_block;
-+ TRACE("get_meta_index: offset %d, meta->offset %d, "
-+ "meta->entries %d\n", offset, meta->offset,
-+ meta->entries);
-+ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
-+ " data_block 0x%llx\n", cur_index_block,
-+ cur_offset, cur_data_block);
-+ }
-+
-+ for (i = meta->offset + meta->entries; i <= index &&
-+ i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
-+ int blocks = skip * SQUASHFS_META_INDEXES;
-+
-+ while (blocks) {
-+ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) :
-+ blocks;
-+ int res = read_block_index(inode->i_sb, block,
-+ block_list, &cur_index_block,
-+ &cur_offset);
-+
-+ if (res == -1)
-+ goto failed;
-+
-+ cur_data_block += res;
-+ blocks -= block;
-+ }
-+
-+ meta_entry = &meta->meta_entry[i - meta->offset];
-+ meta_entry->index_block = cur_index_block - sblk->inode_table_start;
-+ meta_entry->offset = cur_offset;
-+ meta_entry->data_block = cur_data_block;
-+ meta->entries ++;
-+ offset ++;
-+ }
-+
-+ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
-+ meta->offset, meta->entries);
-+
-+ release_meta_index(inode, meta);
-+ }
-+
-+all_done:
-+ *index_block = cur_index_block;
-+ *index_offset = cur_offset;
-+ *data_block = cur_data_block;
-+
-+ return offset * SQUASHFS_META_INDEXES * skip;
-+
-+failed:
-+ release_meta_index(inode, meta);
-+ return -1;
-+}
-+
-+
-+static long long read_blocklist(struct inode *inode, int index,
-+ int readahead_blks, char *block_list,
-+ unsigned short **block_p, unsigned int *bsize)
-+{
-+ long long block_ptr;
-+ int offset;
-+ long long block;
-+ int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
-+ block_list);
-+
-+ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
-+ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset,
-+ block);
-+
-+ if(res == -1)
-+ goto failure;
-+
-+ index -= res;
-+
-+ while ( index ) {
-+ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
-+ int res = read_block_index(inode->i_sb, blocks, block_list,
-+ &block_ptr, &offset);
-+ if (res == -1)
-+ goto failure;
-+ block += res;
-+ index -= blocks;
-+ }
-+
-+ if (read_block_index(inode->i_sb, 1, block_list,
-+ &block_ptr, &offset) == -1)
-+ goto failure;
-+ *bsize = *((unsigned int *) block_list);
-+
-+ return block;
-+
-+failure:
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, i = 0, bytes = 0, byte_offset = 0;
-+ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
-+ void *pageaddr;
-+ struct squashfs_fragment_cache *fragment = NULL;
-+ char *data_ptr = msblk->read_page;
-+
-+ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
-+ int start_index = page->index & ~mask;
-+ int end_index = start_index | mask;
-+
-+ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT))
-+ goto skip_read;
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ if ((block = (msblk->read_blocklist)(inode, index, 1,
-+ block_list, NULL, &bsize)) == 0)
-+ goto skip_read;
-+
-+ down(&msblk->read_page_mutex);
-+
-+ if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page,
-+ block, bsize, NULL))) {
-+ ERROR("Unable to read page, block %llx, size %x\n", block,
-+ bsize);
-+ up(&msblk->read_page_mutex);
-+ goto skip_read;
-+ }
-+ } else {
-+ if ((fragment = get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)->u.s1.fragment_size))
-+ == NULL) {
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ (int) SQUASHFS_I(inode)->
-+ u.s1.fragment_size);
-+ goto skip_read;
-+ }
-+ bytes = SQUASHFS_I(inode)->u.s1.fragment_offset +
-+ (i_size_read(inode) & (sblk->block_size
-+ - 1));
-+ byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset;
-+ data_ptr = fragment->data;
-+ }
-+
-+ for (i = start_index; i <= end_index && byte_offset < bytes;
-+ i++, byte_offset += PAGE_CACHE_SIZE) {
-+ struct page *push_page;
-+ int available_bytes = (bytes - byte_offset) > PAGE_CACHE_SIZE ?
-+ PAGE_CACHE_SIZE : bytes - byte_offset;
-+
-+ TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n",
-+ bytes, i, byte_offset, available_bytes);
-+
-+ if (i == page->index) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+ } else if ((push_page =
-+ grab_cache_page_nowait(page->mapping, i))) {
-+ pageaddr = kmap_atomic(push_page, KM_USER0);
-+
-+ memcpy(pageaddr, data_ptr + byte_offset,
-+ available_bytes);
-+ memset(pageaddr + available_bytes, 0,
-+ PAGE_CACHE_SIZE - available_bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(push_page);
-+ SetPageUptodate(push_page);
-+ unlock_page(push_page);
-+ page_cache_release(push_page);
-+ }
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || index < (i_size_read(inode) >>
-+ sblk->block_log))
-+ up(&msblk->read_page_mutex);
-+ else
-+ release_cached_fragment(msblk, fragment);
-+
-+ return 0;
-+
-+skip_read:
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int squashfs_readpage4K(struct file *file, struct page *page)
-+{
-+ struct inode *inode = page->mapping->host;
-+ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned char block_list[SIZE];
-+ long long block;
-+ unsigned int bsize, bytes = 0;
-+ void *pageaddr;
-+
-+ TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n",
-+ page->index,
-+ SQUASHFS_I(inode)->start_block);
-+
-+ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+ PAGE_CACHE_SHIFT)) {
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ goto skip_read;
-+ }
-+
-+ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+ || page->index < (i_size_read(inode) >>
-+ sblk->block_log)) {
-+ block = (msblk->read_blocklist)(inode, page->index, 1,
-+ block_list, NULL, &bsize);
-+
-+ down(&msblk->read_page_mutex);
-+ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
-+ bsize, NULL);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (bytes)
-+ memcpy(pageaddr, msblk->read_page, bytes);
-+ else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ block, bsize);
-+ up(&msblk->read_page_mutex);
-+ } else {
-+ struct squashfs_fragment_cache *fragment =
-+ get_cached_fragment(inode->i_sb,
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block,
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ pageaddr = kmap_atomic(page, KM_USER0);
-+ if (fragment) {
-+ bytes = i_size_read(inode) & (sblk->block_size - 1);
-+ memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)->
-+ u.s1.fragment_offset, bytes);
-+ release_cached_fragment(msblk, fragment);
-+ } else
-+ ERROR("Unable to read page, block %llx, size %x\n",
-+ SQUASHFS_I(inode)->
-+ u.s1.fragment_start_block, (int)
-+ SQUASHFS_I(inode)-> u.s1.fragment_size);
-+ }
-+
-+skip_read:
-+ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+ kunmap_atomic(pageaddr, KM_USER0);
-+ flush_dcache_page(page);
-+ SetPageUptodate(page);
-+ unlock_page(page);
-+
-+ return 0;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ f_pos =- 3;
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length + 3;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index *index = (struct squashfs_dir_index *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length + 3;
-+}
-+
-+
-+static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
-+
-+ while(file->f_pos < 3) {
-+ char *name;
-+ int size, i_ino;
-+
-+ if(file->f_pos == 0) {
-+ name = ".";
-+ size = 1;
-+ i_ino = i->i_ino;
-+ } else {
-+ name = "..";
-+ size = 2;
-+ i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
-+ }
-+ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
-+ (unsigned int) dirent, name, size, (int)
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]);
-+
-+ if (filldir(dirent, name, size,
-+ file->f_pos, i_ino,
-+ squashfs_filetype_table[1]) < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos += size;
-+ dirs_read++;
-+ }
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos,
-+ dirh.inode_number + dire->inode_number,
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %d\n", name,
-+ dirh.start_block, dire->offset,
-+ dirh.inode_number + dire->inode_number);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+static void squashfs_put_super(struct super_block *s)
-+{
-+ int i;
-+
-+ if (s->s_fs_info) {
-+ struct squashfs_sb_info *sbi = s->s_fs_info;
-+ if (sbi->block_cache)
-+ for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+ if (sbi->block_cache[i].block !=
-+ SQUASHFS_INVALID_BLK)
-+ kfree(sbi->block_cache[i].data);
-+ if (sbi->fragment)
-+ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
-+ SQUASHFS_FREE(sbi->fragment[i].data);
-+ kfree(sbi->fragment);
-+ kfree(sbi->block_cache);
-+ kfree(sbi->read_data);
-+ kfree(sbi->read_page);
-+ kfree(sbi->uid);
-+ kfree(sbi->fragment_index);
-+ kfree(sbi->fragment_index_2);
-+ kfree(sbi->meta_index);
-+ kfree(s->s_fs_info);
-+ s->s_fs_info = NULL;
-+ }
-+}
-+
-+
-+static int squashfs_get_sb(struct file_system_type *fs_type,
-+ int flags, const char *dev_name, void *data, struct vfsmount *mnt)
-+{
-+ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, mnt);
-+}
-+
-+
-+static int __init init_squashfs_fs(void)
-+{
-+ int err = init_inodecache();
-+ if (err)
-+ goto out;
-+
-+ printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
-+ "Phillip Lougher\n");
-+
-+ if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
-+ ERROR("Failed to allocate zlib workspace\n");
-+ destroy_inodecache();
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+
-+ if ((err = register_filesystem(&squashfs_fs_type))) {
-+ vfree(stream.workspace);
-+ destroy_inodecache();
-+ }
-+
-+out:
-+ return err;
-+}
-+
-+
-+static void __exit exit_squashfs_fs(void)
-+{
-+ vfree(stream.workspace);
-+ unregister_filesystem(&squashfs_fs_type);
-+ destroy_inodecache();
-+}
-+
-+
-+static struct kmem_cache* squashfs_inode_cachep;
-+
-+
-+static struct inode *squashfs_alloc_inode(struct super_block *sb)
-+{
-+ struct squashfs_inode_info *ei;
-+ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL);
-+ if (!ei)
-+ return NULL;
-+ return &ei->vfs_inode;
-+}
-+
-+
-+static void squashfs_destroy_inode(struct inode *inode)
-+{
-+ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
-+}
-+
-+
-+static void init_once(void * foo, struct kmem_cache *cachep, unsigned long flags)
-+{
-+ struct squashfs_inode_info *ei = foo;
-+
-+ inode_init_once(&ei->vfs_inode);
-+}
-+
-+
-+static int __init init_inodecache(void)
-+{
-+ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
-+ sizeof(struct squashfs_inode_info),
-+ 0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
-+ init_once);
-+ if (squashfs_inode_cachep == NULL)
-+ return -ENOMEM;
-+ return 0;
-+}
-+
-+
-+static void destroy_inodecache(void)
-+{
-+ kmem_cache_destroy(squashfs_inode_cachep);
-+}
-+
-+
-+module_init(init_squashfs_fs);
-+module_exit(exit_squashfs_fs);
-+MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
-+MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
-Index: linux-2.6.22/fs/squashfs/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/fs/squashfs/Makefile 2007-08-28 21:56:34.000000000 +0100
-@@ -0,0 +1,7 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
-+
-+obj-$(CONFIG_SQUASHFS) += squashfs.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
-Index: linux-2.6.22/fs/squashfs/squashfs2_0.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/fs/squashfs/squashfs2_0.c 2007-08-28 21:56:34.000000000 +0100
-@@ -0,0 +1,757 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs2_0.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
-+static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
-+ struct nameidata *);
-+
-+static struct file_operations squashfs_dir_ops_2 = {
-+ .read = generic_read_dir,
-+ .readdir = squashfs_readdir_2
-+};
-+
-+static struct inode_operations squashfs_dir_inode_ops_2 = {
-+ .lookup = squashfs_lookup_2
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static int read_fragment_index_table_2(struct super_block *s)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments), GFP_KERNEL))) {
-+ ERROR("Failed to allocate uid/gid table\n");
-+ return 0;
-+ }
-+
-+ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
-+ !squashfs_read_data(s, (char *)
-+ msblk->fragment_index_2,
-+ sblk->fragment_table_start,
-+ SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+ (sblk->fragments) |
-+ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+ ERROR("unable to read fragment index table\n");
-+ return 0;
-+ }
-+
-+ if (msblk->swap) {
-+ int i;
-+ unsigned int fragment;
-+
-+ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
-+ i++) {
-+ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
-+ &msblk->fragment_index_2[i], 1);
-+ msblk->fragment_index_2[i] = fragment;
-+ }
-+ }
-+
-+ return 1;
-+}
-+
-+
-+static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
-+ long long *fragment_start_block,
-+ unsigned int *fragment_size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ long long start_block =
-+ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
-+ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
-+ struct squashfs_fragment_entry_2 fragment_entry;
-+
-+ if (msblk->swap) {
-+ struct squashfs_fragment_entry_2 sfragment_entry;
-+
-+ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+ start_block, offset,
-+ sizeof(sfragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+ start_block, offset,
-+ sizeof(fragment_entry), &start_block,
-+ &offset))
-+ goto out;
-+
-+ *fragment_start_block = fragment_entry.start_block;
-+ *fragment_size = fragment_entry.size;
-+
-+ return 1;
-+
-+out:
-+ return 0;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ struct inode *i = new_inode(s);
-+
-+ if (i) {
-+ i->i_ino = ino;
-+ i->i_mtime.tv_sec = sblk->mkfs_time;
-+ i->i_atime.tv_sec = sblk->mkfs_time;
-+ i->i_ctime.tv_sec = sblk->mkfs_time;
-+ i->i_uid = msblk->uid[inodeb->uid];
-+ i->i_mode = inodeb->mode;
-+ i->i_nlink = 1;
-+ i->i_size = 0;
-+ if (inodeb->guid == SQUASHFS_GUIDS)
-+ i->i_gid = i->i_uid;
-+ else
-+ i->i_gid = msblk->guid[inodeb->guid];
-+ }
-+
-+ return i;
-+}
-+
-+
-+static struct inode *squashfs_iget_2(struct super_block *s, squashfs_inode_t inode)
-+{
-+ struct inode *i;
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ unsigned int block = SQUASHFS_INODE_BLK(inode) +
-+ sblk->inode_table_start;
-+ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+ unsigned int ino = SQUASHFS_MK_VFS_INODE(block
-+ - sblk->inode_table_start, offset);
-+ long long next_block;
-+ unsigned int next_offset;
-+ union squashfs_inode_header_2 id, sid;
-+ struct squashfs_base_inode_header_2 *inodeb = &id.base,
-+ *sinodeb = &sid.base;
-+
-+ TRACE("Entered squashfs_iget\n");
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+ offset, sizeof(*sinodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
-+ sizeof(*sinodeb));
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+ offset, sizeof(*inodeb), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ switch(inodeb->inode_type) {
-+ case SQUASHFS_FILE_TYPE: {
-+ struct squashfs_reg_inode_header_2 *inodep = &id.reg;
-+ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
-+ long long frag_blk;
-+ unsigned int frag_size;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ frag_blk = SQUASHFS_INVALID_BLK;
-+ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+ !get_fragment_location_2(s,
-+ inodep->fragment, &frag_blk, &frag_size))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_fop = &generic_ro_fops;
-+ i->i_mode |= S_IFREG;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+ if (sblk->block_size > 4096)
-+ i->i_data.a_ops = &squashfs_aops;
-+ else
-+ i->i_data.a_ops = &squashfs_aops_4K;
-+
-+ TRACE("File inode %x:%x, start_block %x, "
-+ "block_list_start %llx, offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, next_block,
-+ next_offset);
-+ break;
-+ }
-+ case SQUASHFS_DIR_TYPE: {
-+ struct squashfs_dir_inode_header_2 *inodep = &id.dir;
-+ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Directory inode %x:%x, start_block %x, offset "
-+ "%x\n", SQUASHFS_INODE_BLK(inode),
-+ offset, inodep->start_block,
-+ inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_LDIR_TYPE: {
-+ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
-+ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->file_size;
-+ i->i_op = &squashfs_dir_inode_ops_2;
-+ i->i_fop = &squashfs_dir_ops_2;
-+ i->i_mode |= S_IFDIR;
-+ i->i_mtime.tv_sec = inodep->mtime;
-+ i->i_atime.tv_sec = inodep->mtime;
-+ i->i_ctime.tv_sec = inodep->mtime;
-+ SQUASHFS_I(i)->start_block = inodep->start_block;
-+ SQUASHFS_I(i)->offset = inodep->offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+ SQUASHFS_I(i)->u.s2.directory_index_offset =
-+ next_offset;
-+ SQUASHFS_I(i)->u.s2.directory_index_count =
-+ inodep->i_count;
-+ SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+ TRACE("Long directory inode %x:%x, start_block %x, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->start_block, inodep->offset);
-+ break;
-+ }
-+ case SQUASHFS_SYMLINK_TYPE: {
-+ struct squashfs_symlink_inode_header_2 *inodep =
-+ &id.symlink;
-+ struct squashfs_symlink_inode_header_2 *sinodep =
-+ &sid.symlink;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
-+ sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_size = inodep->symlink_size;
-+ i->i_op = &page_symlink_inode_operations;
-+ i->i_data.a_ops = &squashfs_symlink_aops;
-+ i->i_mode |= S_IFLNK;
-+ SQUASHFS_I(i)->start_block = next_block;
-+ SQUASHFS_I(i)->offset = next_offset;
-+
-+ TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+ "offset %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ next_block, next_offset);
-+ break;
-+ }
-+ case SQUASHFS_BLKDEV_TYPE:
-+ case SQUASHFS_CHRDEV_TYPE: {
-+ struct squashfs_dev_inode_header_2 *inodep = &id.dev;
-+ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
-+
-+ if (msblk->swap) {
-+ if (!squashfs_get_cached_block(s, (char *)
-+ sinodep, block, offset,
-+ sizeof(*sinodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
-+ } else
-+ if (!squashfs_get_cached_block(s, (char *)
-+ inodep, block, offset,
-+ sizeof(*inodep), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type ==
-+ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
-+ S_IFBLK;
-+ init_special_inode(i, i->i_mode,
-+ old_decode_dev(inodep->rdev));
-+
-+ TRACE("Device inode %x:%x, rdev %x\n",
-+ SQUASHFS_INODE_BLK(inode), offset,
-+ inodep->rdev);
-+ break;
-+ }
-+ case SQUASHFS_FIFO_TYPE:
-+ case SQUASHFS_SOCKET_TYPE: {
-+ if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+ goto failed_read1;
-+
-+ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+ ? S_IFIFO : S_IFSOCK;
-+ init_special_inode(i, i->i_mode, 0);
-+ break;
-+ }
-+ default:
-+ ERROR("Unknown inode type %d in squashfs_iget!\n",
-+ inodeb->inode_type);
-+ goto failed_read1;
-+ }
-+
-+ insert_inode_hash(i);
-+ return i;
-+
-+failed_read:
-+ ERROR("Unable to read inode [%x:%x]\n", block, offset);
-+
-+failed_read1:
-+ return NULL;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ long long f_pos)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ struct squashfs_dir_index_2 index;
-+
-+ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+ i_count, (unsigned int) f_pos);
-+
-+ if (f_pos == 0)
-+ goto finish;
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) &index,
-+ index_start, index_offset,
-+ sizeof(index), &index_start,
-+ &index_offset);
-+
-+ if (index.index > f_pos)
-+ break;
-+
-+ squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+ index.size + 1, &index_start,
-+ &index_offset);
-+
-+ length = index.index;
-+ *next_block = index.start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+ return length;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+ *next_block, unsigned int *next_offset,
-+ long long index_start,
-+ unsigned int index_offset, int i_count,
-+ const char *name, int size)
-+{
-+ struct squashfs_sb_info *msblk = s->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ int i, length = 0;
-+ char buffer[sizeof(struct squashfs_dir_index_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_index_2 *index = (struct squashfs_dir_index_2 *) buffer;
-+ char str[SQUASHFS_NAME_LEN + 1];
-+
-+ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+ strncpy(str, name, size);
-+ str[size] = '\0';
-+
-+ for (i = 0; i < i_count; i++) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_index_2 sindex;
-+ squashfs_get_cached_block(s, (char *) &sindex,
-+ index_start, index_offset,
-+ sizeof(sindex), &index_start,
-+ &index_offset);
-+ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
-+ } else
-+ squashfs_get_cached_block(s, (char *) index,
-+ index_start, index_offset,
-+ sizeof(struct squashfs_dir_index_2),
-+ &index_start, &index_offset);
-+
-+ squashfs_get_cached_block(s, index->name, index_start,
-+ index_offset, index->size + 1,
-+ &index_start, &index_offset);
-+
-+ index->name[index->size + 1] = '\0';
-+
-+ if (strcmp(index->name, str) > 0)
-+ break;
-+
-+ length = index->index;
-+ *next_block = index->start_block + sblk->directory_table_start;
-+ }
-+
-+ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+ return length;
-+}
-+
-+
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
-+{
-+ struct inode *i = file->f_dentry->d_inode;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN + 1];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+
-+ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
-+
-+ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count,
-+ file->f_pos);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block, next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block, next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset,
-+ dire->size + 1, &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (file->f_pos >= length)
-+ continue;
-+
-+ dire->name[dire->size + 1] = '\0';
-+
-+ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
-+ (unsigned int) dirent, dire->name,
-+ dire->size + 1, (int) file->f_pos,
-+ dirh.start_block, dire->offset,
-+ squashfs_filetype_table[dire->type]);
-+
-+ if (filldir(dirent, dire->name, dire->size + 1,
-+ file->f_pos, SQUASHFS_MK_VFS_INODE(
-+ dirh.start_block, dire->offset),
-+ squashfs_filetype_table[dire->type])
-+ < 0) {
-+ TRACE("Filldir returned less than 0\n");
-+ goto finish;
-+ }
-+ file->f_pos = length;
-+ dirs_read++;
-+ }
-+ }
-+
-+finish:
-+ return dirs_read;
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
-+ struct nameidata *nd)
-+{
-+ const unsigned char *name = dentry->d_name.name;
-+ int len = dentry->d_name.len;
-+ struct inode *inode = NULL;
-+ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+ long long next_block = SQUASHFS_I(i)->start_block +
-+ sblk->directory_table_start;
-+ int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+ dir_count;
-+ struct squashfs_dir_header_2 dirh;
-+ char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN];
-+ struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
-+
-+ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+ if (len > SQUASHFS_NAME_LEN)
-+ goto exit_loop;
-+
-+ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_start,
-+ SQUASHFS_I(i)->u.s2.directory_index_offset,
-+ SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+ len);
-+
-+ while (length < i_size_read(i)) {
-+ /* read directory header */
-+ if (msblk->swap) {
-+ struct squashfs_dir_header_2 sdirh;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+ next_block, next_offset, sizeof(sdirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdirh);
-+ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+ next_block, next_offset, sizeof(dirh),
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(dirh);
-+ }
-+
-+ dir_count = dirh.count + 1;
-+ while (dir_count--) {
-+ if (msblk->swap) {
-+ struct squashfs_dir_entry_2 sdire;
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ &sdire, next_block,next_offset,
-+ sizeof(sdire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(sdire);
-+ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+ } else {
-+ if (!squashfs_get_cached_block(i->i_sb, (char *)
-+ dire, next_block,next_offset,
-+ sizeof(*dire), &next_block,
-+ &next_offset))
-+ goto failed_read;
-+
-+ length += sizeof(*dire);
-+ }
-+
-+ if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+ next_block, next_offset, dire->size + 1,
-+ &next_block, &next_offset))
-+ goto failed_read;
-+
-+ length += dire->size + 1;
-+
-+ if (sorted && name[0] < dire->name[0])
-+ goto exit_loop;
-+
-+ if ((len == dire->size + 1) && !strncmp(name,
-+ dire->name, len)) {
-+ squashfs_inode_t ino =
-+ SQUASHFS_MKINODE(dirh.start_block,
-+ dire->offset);
-+
-+ TRACE("calling squashfs_iget for directory "
-+ "entry %s, inode %x:%x, %lld\n", name,
-+ dirh.start_block, dire->offset, ino);
-+
-+ inode = (msblk->iget)(i->i_sb, ino);
-+
-+ goto exit_loop;
-+ }
-+ }
-+ }
-+
-+exit_loop:
-+ d_add(dentry, inode);
-+ return ERR_PTR(0);
-+
-+failed_read:
-+ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+ next_offset);
-+ goto exit_loop;
-+}
-+
-+
-+int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+ msblk->iget = squashfs_iget_2;
-+ msblk->read_fragment_index_table = read_fragment_index_table_2;
-+
-+ sblk->bytes_used = sblk->bytes_used_2;
-+ sblk->uid_start = sblk->uid_start_2;
-+ sblk->guid_start = sblk->guid_start_2;
-+ sblk->inode_table_start = sblk->inode_table_start_2;
-+ sblk->directory_table_start = sblk->directory_table_start_2;
-+ sblk->fragment_table_start = sblk->fragment_table_start_2;
-+
-+ return 1;
-+}
-Index: linux-2.6.22/fs/squashfs/squashfs.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/fs/squashfs/squashfs.h 2007-08-28 21:56:34.000000000 +0100
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs.h
-+ */
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#endif
-+
-+#ifdef SQUASHFS_TRACE
-+#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
-+#else
-+#define TRACE(s, args...) {}
-+#endif
-+
-+#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
-+
-+#define SERROR(s, args...) do { \
-+ if (!silent) \
-+ printk(KERN_ERR "SQUASHFS error: "s, ## args);\
-+ } while(0)
-+
-+#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
-+
-+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
-+{
-+ return list_entry(inode, struct squashfs_inode_info, vfs_inode);
-+}
-+
-+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
-+#define SQSH_EXTERN
-+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+ long long index, unsigned int length,
-+ long long *next_index);
-+extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+ long long block, unsigned int offset,
-+ int length, long long *next_block,
-+ unsigned int *next_offset);
-+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+ squashfs_fragment_cache *fragment);
-+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+ *s, long long start_block,
-+ int length);
-+extern struct address_space_operations squashfs_symlink_aops;
-+extern struct address_space_operations squashfs_aops;
-+extern struct address_space_operations squashfs_aops_4K;
-+extern struct inode_operations squashfs_dir_inode_ops;
-+#else
-+#define SQSH_EXTERN static
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+ return 0;
-+}
-+#endif
-Index: linux-2.6.22/include/linux/squashfs_fs.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/squashfs_fs.h 2007-08-28 21:56:34.000000000 +0100
-@@ -0,0 +1,911 @@
-+#ifndef SQUASHFS_FS
-+#define SQUASHFS_FS
-+
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs.h
-+ */
-+
-+#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_VMALLOC
-+#define SQUASHFS_ALLOC(a) vmalloc(a)
-+#define SQUASHFS_FREE(a) vfree(a)
-+#else
-+#define SQUASHFS_ALLOC(a) kmalloc(a, GFP_KERNEL)
-+#define SQUASHFS_FREE(a) kfree(a)
-+#endif
-+#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
-+#define SQUASHFS_MAJOR 3
-+#define SQUASHFS_MINOR 0
-+#define SQUASHFS_MAGIC 0x73717368
-+#define SQUASHFS_MAGIC_SWAP 0x68737173
-+#define SQUASHFS_START 0
-+
-+/* size of metadata (inode and directory) blocks */
-+#define SQUASHFS_METADATA_SIZE 8192
-+#define SQUASHFS_METADATA_LOG 13
-+
-+/* default size of data blocks */
-+#define SQUASHFS_FILE_SIZE 65536
-+#define SQUASHFS_FILE_LOG 16
-+
-+#define SQUASHFS_FILE_MAX_SIZE 65536
-+
-+/* Max number of uids and gids */
-+#define SQUASHFS_UIDS 256
-+#define SQUASHFS_GUIDS 255
-+
-+/* Max length of filename (not 255) */
-+#define SQUASHFS_NAME_LEN 256
-+
-+#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
-+#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff)
-+#define SQUASHFS_INVALID_BLK ((long long) -1)
-+#define SQUASHFS_USED_BLK ((long long) -2)
-+
-+/* Filesystem flags */
-+#define SQUASHFS_NOI 0
-+#define SQUASHFS_NOD 1
-+#define SQUASHFS_CHECK 2
-+#define SQUASHFS_NOF 3
-+#define SQUASHFS_NO_FRAG 4
-+#define SQUASHFS_ALWAYS_FRAG 5
-+#define SQUASHFS_DUPLICATE 6
-+
-+#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
-+
-+#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOI)
-+
-+#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOD)
-+
-+#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NOF)
-+
-+#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_NO_FRAG)
-+
-+#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_ALWAYS_FRAG)
-+
-+#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_DUPLICATE)
-+
-+#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
-+ SQUASHFS_CHECK)
-+
-+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
-+ duplicate_checking) (noi | (nod << 1) | (check_data << 2) \
-+ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
-+ (duplicate_checking << 6))
-+
-+/* Max number of types and file types */
-+#define SQUASHFS_DIR_TYPE 1
-+#define SQUASHFS_FILE_TYPE 2
-+#define SQUASHFS_SYMLINK_TYPE 3
-+#define SQUASHFS_BLKDEV_TYPE 4
-+#define SQUASHFS_CHRDEV_TYPE 5
-+#define SQUASHFS_FIFO_TYPE 6
-+#define SQUASHFS_SOCKET_TYPE 7
-+#define SQUASHFS_LDIR_TYPE 8
-+#define SQUASHFS_LREG_TYPE 9
-+
-+/* 1.0 filesystem type definitions */
-+#define SQUASHFS_TYPES 5
-+#define SQUASHFS_IPC_TYPE 0
-+
-+/* Flag whether block is compressed or uncompressed, bit is set if block is
-+ * uncompressed */
-+#define SQUASHFS_COMPRESSED_BIT (1 << 15)
-+
-+#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
-+ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
-+
-+#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
-+
-+#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
-+
-+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) (((B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
-+ ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
-+
-+#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
-+
-+/*
-+ * Inode number ops. Inodes consist of a compressed block number, and an
-+ * uncompressed offset within that block
-+ */
-+#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
-+
-+#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
-+
-+#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\
-+ << 16) + (B)))
-+
-+/* Compute 32 bit VFS inode number from squashfs inode number */
-+#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \
-+ ((b) >> 2) + 1))
-+/* XXX */
-+
-+/* Translate between VFS mode and squashfs mode */
-+#define SQUASHFS_MODE(a) ((a) & 0xfff)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES(A) (A * sizeof(struct squashfs_fragment_entry))
-+
-+#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\
-+ sizeof(long long))
-+
-+/* cached data constants for filesystem */
-+#define SQUASHFS_CACHED_BLKS 8
-+
-+#define SQUASHFS_MAX_FILE_SIZE_LOG 64
-+
-+#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \
-+ (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
-+
-+#define SQUASHFS_MARKER_BYTE 0xff
-+
-+/* meta index cache */
-+#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
-+#define SQUASHFS_META_ENTRIES 31
-+#define SQUASHFS_META_NUMBER 8
-+#define SQUASHFS_SLOTS 4
-+
-+struct meta_entry {
-+ long long data_block;
-+ unsigned int index_block;
-+ unsigned short offset;
-+ unsigned short pad;
-+};
-+
-+struct meta_index {
-+ unsigned int inode_number;
-+ unsigned int offset;
-+ unsigned short entries;
-+ unsigned short skip;
-+ unsigned short locked;
-+ unsigned short pad;
-+ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES];
-+};
-+
-+
-+/*
-+ * definitions for structures on disk
-+ */
-+
-+typedef long long squashfs_block_t;
-+typedef long long squashfs_inode_t;
-+
-+struct squashfs_super_block {
-+ unsigned int s_magic;
-+ unsigned int inodes;
-+ unsigned int bytes_used_2;
-+ unsigned int uid_start_2;
-+ unsigned int guid_start_2;
-+ unsigned int inode_table_start_2;
-+ unsigned int directory_table_start_2;
-+ unsigned int s_major:16;
-+ unsigned int s_minor:16;
-+ unsigned int block_size_1:16;
-+ unsigned int block_log:16;
-+ unsigned int flags:8;
-+ unsigned int no_uids:8;
-+ unsigned int no_guids:8;
-+ unsigned int mkfs_time /* time of filesystem creation */;
-+ squashfs_inode_t root_inode;
-+ unsigned int block_size;
-+ unsigned int fragments;
-+ unsigned int fragment_table_start_2;
-+ long long bytes_used;
-+ long long uid_start;
-+ long long guid_start;
-+ long long inode_table_start;
-+ long long directory_table_start;
-+ long long fragment_table_start;
-+ long long unused;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_index {
-+ unsigned int index;
-+ unsigned int start_block;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_BASE_INODE_HEADER \
-+ unsigned int inode_type:4; \
-+ unsigned int mode:12; \
-+ unsigned int uid:8; \
-+ unsigned int guid:8; \
-+ unsigned int mtime; \
-+ unsigned int inode_number;
-+
-+struct squashfs_base_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_lreg_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ squashfs_block_t start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ long long file_size;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int parent_inode;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header {
-+ SQUASHFS_BASE_INODE_HEADER;
-+ unsigned int nlink;
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int start_block;
-+ unsigned int i_count:16;
-+ unsigned int parent_inode;
-+ struct squashfs_dir_index index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header {
-+ struct squashfs_base_inode_header base;
-+ struct squashfs_dev_inode_header dev;
-+ struct squashfs_symlink_inode_header symlink;
-+ struct squashfs_reg_inode_header reg;
-+ struct squashfs_lreg_inode_header lreg;
-+ struct squashfs_dir_inode_header dir;
-+ struct squashfs_ldir_inode_header ldir;
-+ struct squashfs_ipc_inode_header ipc;
-+};
-+
-+struct squashfs_dir_entry {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ int inode_number:16;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_header {
-+ unsigned int count:8;
-+ unsigned int start_block;
-+ unsigned int inode_number;
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry {
-+ long long start_block;
-+ unsigned int size;
-+ unsigned int unused;
-+} __attribute__ ((packed));
-+
-+extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
-+extern int squashfs_uncompress_init(void);
-+extern int squashfs_uncompress_exit(void);
-+
-+/*
-+ * macros to convert each packed bitfield structure from little endian to big
-+ * endian and vice versa. These are needed when creating or using a filesystem
-+ * on a machine with different byte ordering to the target architecture.
-+ *
-+ */
-+
-+#define SQUASHFS_SWAP_START \
-+ int bits;\
-+ int b_pos;\
-+ unsigned long long val;\
-+ unsigned char *s;\
-+ unsigned char *d;
-+
-+#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
-+ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
-+ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
-+ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
-+ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
-+ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
-+ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
-+ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
-+ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
-+ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
-+ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
-+ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
-+ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
-+ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
-+ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
-+ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
-+ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
-+ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
-+ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
-+ SQUASHFS_SWAP((s)->unused, d, 888, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header))\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dev_inode_header)); \
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_reg_inode_header));\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_lreg_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
-+ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 224, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_dir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 147, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header));\
-+ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 155, 13);\
-+ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
-+ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
-+ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
-+ SQUASHFS_SWAP((s)->size, d, 64, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 2);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 16)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_INTS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 4);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 32)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ 64)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
-+ int entry;\
-+ int bit_position;\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, n * bits / 8);\
-+ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+ bits)\
-+ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+
-+struct squashfs_base_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int type:4;
-+ unsigned int offset:4;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_1 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:4; /* index into uid table */
-+ unsigned int guid:4; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
-+ SQUASHFS_SWAP((s)->guid, d, 20, 4);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_ipc_inode_header_1));\
-+ SQUASHFS_SWAP((s)->type, d, 24, 4);\
-+ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_1));\
-+ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_1));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_1));\
-+ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_1));\
-+ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
-+}
-+
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+
-+struct squashfs_dir_index_2 {
-+ unsigned int index:27;
-+ unsigned int start_block:29;
-+ unsigned char size;
-+ unsigned char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_base_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned short symlink_size;
-+ char symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int mtime;
-+ unsigned int start_block;
-+ unsigned int fragment;
-+ unsigned int offset;
-+ unsigned int file_size:32;
-+ unsigned short block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:19;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ldir_inode_header_2 {
-+ unsigned int inode_type:4;
-+ unsigned int mode:12; /* protection */
-+ unsigned int uid:8; /* index into uid table */
-+ unsigned int guid:8; /* index into guid table */
-+ unsigned int file_size:27;
-+ unsigned int offset:13;
-+ unsigned int mtime;
-+ unsigned int start_block:24;
-+ unsigned int i_count:16;
-+ struct squashfs_dir_index_2 index[0];
-+} __attribute__ ((packed));
-+
-+union squashfs_inode_header_2 {
-+ struct squashfs_base_inode_header_2 base;
-+ struct squashfs_dev_inode_header_2 dev;
-+ struct squashfs_symlink_inode_header_2 symlink;
-+ struct squashfs_reg_inode_header_2 reg;
-+ struct squashfs_dir_inode_header_2 dir;
-+ struct squashfs_ldir_inode_header_2 ldir;
-+ struct squashfs_ipc_inode_header_2 ipc;
-+};
-+
-+struct squashfs_dir_header_2 {
-+ unsigned int count:8;
-+ unsigned int start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_entry_2 {
-+ unsigned int offset:13;
-+ unsigned int type:3;
-+ unsigned int size:8;
-+ char name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry_2 {
-+ unsigned int start_block;
-+ unsigned int size;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+ SQUASHFS_MEMSET(s, d, n);\
-+ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
-+ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dev_inode_header_2)); \
-+ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_symlink_inode_header_2));\
-+ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_reg_inode_header_2));\
-+ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
-+ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
-+ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_dir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
-+ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+ sizeof(struct squashfs_ldir_inode_header_2));\
-+ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
-+ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
-+ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
-+ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
-+ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
-+ SQUASHFS_SWAP((s)->index, d, 0, 27);\
-+ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
-+ SQUASHFS_SWAP((s)->size, d, 56, 8);\
-+}
-+#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
-+ SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
-+ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+ SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+ SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
-+ SQUASHFS_SWAP_START\
-+ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
-+ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
-+ SQUASHFS_SWAP((s)->size, d, 32, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2))
-+
-+#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
-+ SQUASHFS_METADATA_SIZE - 1) / \
-+ SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
-+ sizeof(int))
-+
-+#endif
-+
-+#ifdef __KERNEL__
-+
-+/*
-+ * macros used to swap each structure entry, taking into account
-+ * bitfields and different bitfield placing conventions on differing
-+ * architectures
-+ */
-+
-+#include <asm/byteorder.h>
-+
-+#ifdef __BIG_ENDIAN
-+ /* convert from little endian to big endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, b_pos)
-+#else
-+ /* convert from big endian to little endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+ tbits, 64 - tbits - b_pos)
-+#endif
-+
-+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
-+ b_pos = pos % 8;\
-+ val = 0;\
-+ s = (unsigned char *)p + (pos / 8);\
-+ d = ((unsigned char *) &val) + 7;\
-+ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
-+ *d-- = *s++;\
-+ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
-+}
-+
-+#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
-+
-+#endif
-+#endif
-Index: linux-2.6.22/include/linux/squashfs_fs_i.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/squashfs_fs_i.h 2007-08-28 21:56:34.000000000 +0100
-@@ -0,0 +1,45 @@
-+#ifndef SQUASHFS_FS_I
-+#define SQUASHFS_FS_I
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_i.h
-+ */
-+
-+struct squashfs_inode_info {
-+ long long start_block;
-+ unsigned int offset;
-+ union {
-+ struct {
-+ long long fragment_start_block;
-+ unsigned int fragment_size;
-+ unsigned int fragment_offset;
-+ long long block_list_start;
-+ } s1;
-+ struct {
-+ long long directory_index_start;
-+ unsigned int directory_index_offset;
-+ unsigned int directory_index_count;
-+ unsigned int parent_inode;
-+ } s2;
-+ } u;
-+ struct inode vfs_inode;
-+};
-+#endif
-Index: linux-2.6.22/include/linux/squashfs_fs_sb.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/squashfs_fs_sb.h 2007-08-28 21:56:34.000000000 +0100
-@@ -0,0 +1,74 @@
-+#ifndef SQUASHFS_FS_SB
-+#define SQUASHFS_FS_SB
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_sb.h
-+ */
-+
-+#include <linux/squashfs_fs.h>
-+
-+struct squashfs_cache {
-+ long long block;
-+ int length;
-+ long long next_index;
-+ char *data;
-+};
-+
-+struct squashfs_fragment_cache {
-+ long long block;
-+ int length;
-+ unsigned int locked;
-+ char *data;
-+};
-+
-+struct squashfs_sb_info {
-+ struct squashfs_super_block sblk;
-+ int devblksize;
-+ int devblksize_log2;
-+ int swap;
-+ struct squashfs_cache *block_cache;
-+ struct squashfs_fragment_cache *fragment;
-+ int next_cache;
-+ int next_fragment;
-+ int next_meta_index;
-+ unsigned int *uid;
-+ unsigned int *guid;
-+ long long *fragment_index;
-+ unsigned int *fragment_index_2;
-+ unsigned int read_size;
-+ char *read_data;
-+ char *read_page;
-+ struct semaphore read_data_mutex;
-+ struct semaphore read_page_mutex;
-+ struct semaphore block_cache_mutex;
-+ struct semaphore fragment_mutex;
-+ struct semaphore meta_index_mutex;
-+ wait_queue_head_t waitq;
-+ wait_queue_head_t fragment_wait_queue;
-+ struct meta_index *meta_index;
-+ struct inode *(*iget)(struct super_block *s, squashfs_inode_t \
-+ inode);
-+ long long (*read_blocklist)(struct inode *inode, int \
-+ index, int readahead_blks, char *block_list, \
-+ unsigned short **block_p, unsigned int *bsize);
-+ int (*read_fragment_index_table)(struct super_block *s);
-+};
-+#endif
-Index: linux-2.6.22/init/do_mounts_rd.c
-===================================================================
---- linux-2.6.22.orig/init/do_mounts_rd.c 2007-08-28 21:54:14.000000000 +0100
-+++ linux-2.6.22/init/do_mounts_rd.c 2007-08-28 21:56:34.000000000 +0100
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/cramfs_fs.h>
-+#include <linux/squashfs_fs.h>
- #include <linux/initrd.h>
- #include <linux/string.h>
-
-@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
- * numbers could not be found.
- *
- * We currently check for the following magic numbers:
-+ * squashfs
- * minix
- * ext2
- * romfs
-@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
- struct ext2_super_block *ext2sb;
- struct romfs_super_block *romfsb;
- struct cramfs_super *cramfsb;
-+ struct squashfs_super_block *squashfsb;
- int nblocks = -1;
- unsigned char *buf;
-
-@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
- ext2sb = (struct ext2_super_block *) buf;
- romfsb = (struct romfs_super_block *) buf;
- cramfsb = (struct cramfs_super *) buf;
-+ squashfsb = (struct squashfs_super_block *) buf;
- memset(buf, 0xe5, size);
-
- /*
-@@ -101,6 +105,15 @@ identify_ramdisk_image(int fd, int start
- goto done;
- }
-
-+ /* squashfs is at block zero too */
-+ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
-+ printk(KERN_NOTICE
-+ "RAMDISK: squashfs filesystem found at block %d\n",
-+ start_block);
-+ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
-+ goto done;
-+ }
-+
- /*
- * Read block 1 to test for minix and ext2 superblock
- */
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/uvesafb-0.1-rc3-2.6.22.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/uvesafb-0.1-rc3-2.6.22.patch
deleted file mode 100644
index 711375114f..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/uvesafb-0.1-rc3-2.6.22.patch
+++ /dev/null
@@ -1,2590 +0,0 @@
----
- Documentation/fb/uvesafb.txt | 188 +++
- drivers/video/Kconfig | 18
- drivers/video/Makefile | 1
- drivers/video/modedb.c | 28
- drivers/video/uvesafb.c | 2058 +++++++++++++++++++++++++++++++++++++++++++
- include/linux/connector.h | 7
- include/video/Kbuild | 2
- include/video/uvesafb.h | 193 ++++
- 8 files changed, 2479 insertions(+), 16 deletions(-)
-
-Index: linux-2.6.22/Documentation/fb/uvesafb.txt
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/Documentation/fb/uvesafb.txt 2007-08-28 21:56:34.000000000 +0100
-@@ -0,0 +1,188 @@
-+
-+uvesafb - A Generic Driver for VBE2+ compliant video cards
-+==========================================================
-+
-+1. Requirements
-+---------------
-+
-+uvesafb should work with any video card that has a Video BIOS compliant
-+with the VBE 2.0 standard.
-+
-+Unlike other drivers, uvesafb makes use of a userspace helper called
-+v86d. v86d is used to run the x86 Video BIOS code in a simulated and
-+controlled environment. This allows uvesafb to function on arches other
-+than x86. Check the v86d documentation for a list of currently supported
-+arches.
-+
-+v86d source code can be downloaded from the following website:
-+ http://dev.gentoo.org/~spock/projects/uvesafb
-+
-+Please refer to the v86d documentation for detailed configuration and
-+installation instructions.
-+
-+Note that the v86d userspace helper has to be available at all times in
-+order for uvesafb to work properly. If you want to use uvesafb during
-+early boot, you will have to include v86d into an initramfs image, and
-+either compile it into the kernel or use it as an initrd.
-+
-+2. Caveats and limitations
-+--------------------------
-+
-+uvesafb is a _generic_ driver which supports a wide variety of video
-+cards, but which is ultimately limited by the Video BIOS interface.
-+The most important limitations are:
-+
-+- Lack of any type of acceleration.
-+- A strict and limited set of supported video modes. Often the native
-+ or most optimal resolution/refresh rate for your setup will not work
-+ with uvesafb, simply because the Video BIOS doesn't support the
-+ video mode you want to use. This can be especially painful with
-+ widescreen panels, where native video modes don't have the 4:3 aspect
-+ ratio, which is what most BIOS-es are limited to.
-+- Adjusting the refresh rate is only possible with a VBE 3.0 compliant
-+ Video BIOS. Note that many nVidia Video BIOS-es claim to be VBE 3.0
-+ compliant, while they simply ignore any refresh rate settings.
-+
-+3. Configuration
-+----------------
-+
-+uvesafb can be compiled either as a module, or directly into the kernel.
-+In both cases it supports the same set of configuration options, which
-+are either given on the kernel command line or as module parameters, e.g.:
-+
-+ video=uvesafb:1024x768-32,mtrr:3,ywrap (compiled into the kernel)
-+
-+ # modprobe uvesafb mode=1024x768-32 mtrr=3 scroll=ywrap (module)
-+
-+Accepted options:
-+
-+ypan Enable display panning using the VESA protected mode
-+ interface. The visible screen is just a window of the
-+ video memory, console scrolling is done by changing the
-+ start of the window. Available on x86 only.
-+
-+ywrap Same as ypan, but assumes your gfx board can wrap-around
-+ the video memory (i.e. starts reading from top if it
-+ reaches the end of video memory). Faster than ypan.
-+ Available on x86 only.
-+
-+redraw Scroll by redrawing the affected part of the screen, this
-+ is the safe (and slow) default.
-+
-+(If you're using uvesafb as a module, the above three options are
-+ used a parameter of the scroll option, e.g. scroll=ypan.)
-+
-+vgapal Use the standard VGA registers for palette changes.
-+
-+pmipal Use the protected mode interface for palette changes.
-+ This is the default if the protected mode interface is
-+ available. Available on x86 only.
-+
-+mtrr:n Setup memory type range registers for the framebuffer
-+ where n:
-+ 0 - disabled (equivalent to nomtrr) (default)
-+ 1 - uncachable
-+ 2 - write-back
-+ 3 - write-combining
-+ 4 - write-through
-+
-+ If you see the following in dmesg, choose the type that matches
-+ the old one. In this example, use "mtrr:2".
-+...
-+mtrr: type mismatch for e0000000,8000000 old: write-back new: write-combining
-+...
-+
-+nomtrr Do not use memory type range registers.
-+
-+vremap:n
-+ Remap 'n' MiB of video RAM. If 0 or not specified, remap memory
-+ according to video mode.
-+
-+vtotal:n
-+ If the video BIOS of your card incorrectly determines the total
-+ amount of video RAM, use this option to override the BIOS (in MiB).
-+
-+<mode> The mode you want to set, in the standard modedb format. Refer to
-+ modedb.txt for a detailed description. When uvesafb is compiled as
-+ a module, the mode string should be provided as a value of the
-+ 'mode' option.
-+
-+vbemode:x
-+ Force the use of VBE mode x. The mode will only be set if it's
-+ found in the VBE-provided list of supported modes.
-+ NOTE: The mode number 'x' should be specified in VESA mode number
-+ notation, not the Linux kernel one (eg. 257 instead of 769).
-+ HINT: If you use this option because normal <mode> parameter does
-+ not work for you and you use a X server, you'll probably want to
-+ set the 'nocrtc' option to ensure that the video mode is properly
-+ restored after console <-> X switches.
-+
-+nocrtc Do not use CRTC timings while setting the video mode. This option
-+ has any effect only if the Video BIOS is VBE 3.0 compliant. Use it
-+ if you have problems with modes set the standard way. Note that
-+ using this option implies that any refresh rate adjustments will
-+ be ignored and the refresh rate will stay at your BIOS default (60 Hz).
-+
-+noedid Do not try to fetch and use EDID-provided modes.
-+
-+noblank Disable hardware blanking.
-+
-+v86d:path
-+ Set path to the v86d executable. This option is only available as
-+ a module parameter, and not as a part of the video= string. If you
-+ need to use it and have uvesafb built into the kernel, use
-+ uvesafb.v86d="path".
-+
-+Additionally, the following parameters may be provided. They all override the
-+EDID-provided values and BIOS defaults. Refer to your monitor's specs to get
-+the correct values for maxhf, maxvf and maxclk for your hardware.
-+
-+maxhf:n Maximum horizontal frequency (in kHz).
-+maxvf:n Maximum vertical frequency (in Hz).
-+maxclk:n Maximum pixel clock (in MHz).
-+
-+4. The sysfs interface
-+----------------------
-+
-+uvesafb provides several sysfs nodes for configurable parameters and
-+additional information.
-+
-+Driver attributes:
-+
-+/sys/bus/platform/drivers/uvesafb
-+ - v86d (default: /sbin/v86d)
-+ Path to the v86d executable. v86d is started by uvesafb
-+ if an instance of the daemon isn't already running.
-+
-+Device attributes:
-+
-+/sys/bus/platform/drivers/uvesafb/uvesafb.0
-+ - nocrtc
-+ Use the default refresh rate (60 Hz) if set to 1.
-+
-+ - oem_product_name
-+ - oem_product_rev
-+ - oem_string
-+ - oem_vendor
-+ Information about the card and its maker.
-+
-+ - vbe_modes
-+ A list of video modes supported by the Video BIOS along with their
-+ VBE mode numbers in hex.
-+
-+ - vbe_version
-+ A BCD value indicating the implemented VBE standard.
-+
-+5. Miscellaneous
-+----------------
-+
-+Uvesafb will set a video mode with the default refresh rate and timings
-+from the Video BIOS if you set pixclock to 0 in fb_var_screeninfo.
-+
-+
-+--
-+ Michal Januszewski <spock@gentoo.org>
-+ Last updated: 2007-06-16
-+
-+ Documentation of the uvesafb options is loosely based on vesafb.txt.
-+
-Index: linux-2.6.22/drivers/video/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/video/Kconfig 2007-08-28 21:56:33.000000000 +0100
-+++ linux-2.6.22/drivers/video/Kconfig 2007-08-28 21:56:34.000000000 +0100
-@@ -592,6 +592,24 @@ config FB_TGA
-
- Say Y if you have one of those.
-
-+config FB_UVESA
-+ tristate "Userspace VESA VGA graphics support"
-+ depends on FB && CONNECTOR
-+ select FB_CFB_FILLRECT
-+ select FB_CFB_COPYAREA
-+ select FB_CFB_IMAGEBLIT
-+ select FB_MODE_HELPERS
-+ help
-+ This is the frame buffer driver for generic VBE 2.0 compliant
-+ graphic cards. It can also take advantage of VBE 3.0 features,
-+ such as refresh rate adjustment.
-+
-+ This driver generally provides more features than vesafb but
-+ requires a userspace helper application called 'v86d'. See
-+ <file:Documentation/fb/uvesafb.txt> for more information.
-+
-+ If unsure, say N.
-+
- config FB_VESA
- bool "VESA VGA graphics support"
- depends on (FB = y) && X86
-Index: linux-2.6.22/drivers/video/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/video/Makefile 2007-08-28 21:56:33.000000000 +0100
-+++ linux-2.6.22/drivers/video/Makefile 2007-08-28 21:56:34.000000000 +0100
-@@ -116,6 +116,7 @@ obj-$(CONFIG_FB_XILINX) += xil
- obj-$(CONFIG_FB_OMAP) += omap/
-
- # Platform or fallback drivers go here
-+obj-$(CONFIG_FB_UVESA) += uvesafb.o
- obj-$(CONFIG_FB_VESA) += vesafb.o
- obj-$(CONFIG_FB_IMAC) += imacfb.o
- obj-$(CONFIG_FB_VGA16) += vga16fb.o
-Index: linux-2.6.22/drivers/video/modedb.c
-===================================================================
---- linux-2.6.22.orig/drivers/video/modedb.c 2007-08-28 21:54:13.000000000 +0100
-+++ linux-2.6.22/drivers/video/modedb.c 2007-08-28 21:56:34.000000000 +0100
-@@ -606,26 +606,29 @@ done:
- DPRINTK("Trying specified video mode%s %ix%i\n",
- refresh_specified ? "" : " (ignoring refresh rate)", xres, yres);
-
-- diff = refresh;
-+ if (!refresh_specified)
-+ diff = 0;
-+ else
-+ diff = refresh;
-+
- best = -1;
- for (i = 0; i < dbsize; i++) {
-- if (name_matches(db[i], name, namelen) ||
-- (res_specified && res_matches(db[i], xres, yres))) {
-- if(!fb_try_mode(var, info, &db[i], bpp)) {
-- if(!refresh_specified || db[i].refresh == refresh)
-- return 1;
-- else {
-- if(diff > abs(db[i].refresh - refresh)) {
-- diff = abs(db[i].refresh - refresh);
-- best = i;
-- }
-+ if ((name_matches(db[i], name, namelen) ||
-+ (res_specified && res_matches(db[i], xres, yres))) &&
-+ !fb_try_mode(var, info, &db[i], bpp)) {
-+ if (refresh_specified && db[i].refresh == refresh) {
-+ return 1;
-+ } else {
-+ if (diff < db[i].refresh) {
-+ diff = db[i].refresh;
-+ best = i;
- }
- }
- }
- }
- if (best != -1) {
- fb_try_mode(var, info, &db[best], bpp);
-- return 2;
-+ return (refresh_specified) ? 2 : 1;
- }
-
- diff = xres + yres;
-@@ -938,6 +941,7 @@ void fb_destroy_modelist(struct list_hea
- kfree(pos);
- }
- }
-+EXPORT_SYMBOL_GPL(fb_destroy_modelist);
-
- /**
- * fb_videomode_to_modelist: convert mode array to mode list
-Index: linux-2.6.22/drivers/video/uvesafb.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/video/uvesafb.c 2007-08-28 21:56:34.000000000 +0100
-@@ -0,0 +1,2058 @@
-+/*
-+ * A framebuffer driver for VBE 2.0+ compliant video cards
-+ *
-+ * (c) 2007 Michal Januszewski <spock@gentoo.org>
-+ * Loosely based upon the vesafb driver.
-+ *
-+ */
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/skbuff.h>
-+#include <linux/timer.h>
-+#include <linux/completion.h>
-+#include <linux/connector.h>
-+#include <linux/random.h>
-+#include <linux/platform_device.h>
-+#include <linux/limits.h>
-+#include <linux/fb.h>
-+#include <linux/io.h>
-+#include <linux/mutex.h>
-+#include <video/edid.h>
-+#include <video/vga.h>
-+#include <video/uvesafb.h>
-+#ifdef CONFIG_MTRR
-+#include <asm/mtrr.h>
-+#endif
-+#include "edid.h"
-+
-+static struct cb_id uvesafb_cn_id = {
-+ .idx = CN_IDX_V86D,
-+ .val = CN_VAL_V86D_UVESAFB
-+};
-+static char v86d_path[PATH_MAX] = "/sbin/v86d";
-+static char v86d_started; /* has v86d been started by uvesafb? */
-+
-+static struct fb_fix_screeninfo uvesafb_fix __devinitdata = {
-+ .id = "VESA VGA",
-+ .type = FB_TYPE_PACKED_PIXELS,
-+ .accel = FB_ACCEL_NONE,
-+ .visual = FB_VISUAL_TRUECOLOR,
-+};
-+
-+static int mtrr __devinitdata = 3; /* enable mtrr by default */
-+static int blank __devinitdata = 1; /* enable blanking by default */
-+static int ypan __devinitdata = 1; /* 0: scroll, 1: ypan, 2: ywrap */
-+static int pmi_setpal __devinitdata = 1; /* use PMI for palette changes */
-+static int nocrtc __devinitdata; /* ignore CRTC settings */
-+static int noedid __devinitdata; /* don't try DDC transfers */
-+static int vram_remap __devinitdata; /* set amt. of memory to be used */
-+static int vram_total __devinitdata; /* set total amount of memory */
-+static u16 maxclk __devinitdata; /* maximum pixel clock */
-+static u16 maxvf __devinitdata; /* maximum vertical frequency */
-+static u16 maxhf __devinitdata; /* maximum horizontal frequency */
-+static u16 vbemode __devinitdata; /* force use of a specific VBE mode */
-+static char *mode_option __devinitdata;
-+
-+static struct uvesafb_ktask *uvfb_tasks[UVESAFB_TASKS_MAX];
-+static DEFINE_MUTEX(uvfb_lock);
-+
-+/*
-+ * A handler for replies from userspace.
-+ *
-+ * Make sure each message passes consistency checks and if it does,
-+ * find the kernel part of the task struct, copy the registers and
-+ * the buffer contents and then complete the task.
-+ */
-+static void uvesafb_cn_callback(void *data)
-+{
-+ struct cn_msg *msg = data;
-+ struct uvesafb_task *utask;
-+ struct uvesafb_ktask *task;
-+
-+ if (msg->seq >= UVESAFB_TASKS_MAX)
-+ return;
-+
-+ mutex_lock(&uvfb_lock);
-+ task = uvfb_tasks[msg->seq];
-+
-+ if (!task || msg->ack != task->ack) {
-+ mutex_unlock(&uvfb_lock);
-+ return;
-+ }
-+
-+ utask = (struct uvesafb_task *)msg->data;
-+
-+ /* Sanity checks for the buffer length. */
-+ if (task->t.buf_len < utask->buf_len ||
-+ utask->buf_len > msg->len - sizeof(*utask)) {
-+ mutex_unlock(&uvfb_lock);
-+ return;
-+ }
-+
-+ uvfb_tasks[msg->seq] = NULL;
-+ mutex_unlock(&uvfb_lock);
-+
-+ memcpy(&task->t, utask, sizeof(*utask));
-+
-+ if (task->t.buf_len && task->buf)
-+ memcpy(task->buf, utask + 1, task->t.buf_len);
-+
-+ complete(task->done);
-+ return;
-+}
-+
-+static int uvesafb_helper_start(void)
-+{
-+ char *envp[] = {
-+ "HOME=/",
-+ "PATH=/sbin:/bin",
-+ NULL,
-+ };
-+
-+ char *argv[] = {
-+ v86d_path,
-+ NULL,
-+ };
-+
-+ return call_usermodehelper(v86d_path, argv, envp, 1);
-+}
-+
-+/*
-+ * Execute a uvesafb task.
-+ *
-+ * Returns 0 if the task is executed successfully.
-+ *
-+ * A message sent to the userspace consists of the uvesafb_task
-+ * struct and (optionally) a buffer. The uvesafb_task struct is
-+ * a simplified version of uvesafb_ktask (its kernel counterpart)
-+ * containing only the register values, flags and the length of
-+ * the buffer.
-+ *
-+ * Each message is assigned a sequence number (increased linearly)
-+ * and a random ack number. The sequence number is used as a key
-+ * for the uvfb_tasks array which holds pointers to uvesafb_ktask
-+ * structs for all requests.
-+ */
-+static int uvesafb_exec(struct uvesafb_ktask *task)
-+{
-+ static int seq;
-+ struct cn_msg *m;
-+ int err;
-+ int len = sizeof(task->t) + task->t.buf_len;
-+
-+ /*
-+ * Check whether the message isn't longer than the maximum
-+ * allowed by connector.
-+ */
-+ if (sizeof(*m) + len > CONNECTOR_MAX_MSG_SIZE) {
-+ printk(KERN_WARNING "uvesafb: message too long (%d), "
-+ "can't execute task\n", (int)(sizeof(*m) + len));
-+ return -E2BIG;
-+ }
-+
-+ m = kzalloc(sizeof(*m) + len, GFP_KERNEL);
-+ if (!m)
-+ return -ENOMEM;
-+
-+ init_completion(task->done);
-+
-+ memcpy(&m->id, &uvesafb_cn_id, sizeof(m->id));
-+ m->seq = seq;
-+ m->len = len;
-+ m->ack = random32();
-+
-+ /* uvesafb_task structure */
-+ memcpy(m + 1, &task->t, sizeof(task->t));
-+
-+ /* Buffer */
-+ memcpy((u8 *)(m + 1) + sizeof(task->t), task->buf, task->t.buf_len);
-+
-+ /*
-+ * Save the message ack number so that we can find the kernel
-+ * part of this task when a reply is received from userspace.
-+ */
-+ task->ack = m->ack;
-+
-+ mutex_lock(&uvfb_lock);
-+
-+ /* If all slots are taken -- bail out. */
-+ if (uvfb_tasks[seq]) {
-+ mutex_unlock(&uvfb_lock);
-+ return -EBUSY;
-+ }
-+
-+ /* Save a pointer to the kernel part of the task struct. */
-+ uvfb_tasks[seq] = task;
-+ mutex_unlock(&uvfb_lock);
-+
-+ err = cn_netlink_send(m, 0, gfp_any());
-+ if (err == -ESRCH) {
-+ /*
-+ * Try to start the userspace helper if sending
-+ * the request failed the first time.
-+ */
-+ err = uvesafb_helper_start();
-+ if (err) {
-+ printk(KERN_ERR "uvesafb: failed to execute %s\n",
-+ v86d_path);
-+ printk(KERN_ERR "uvesafb: make sure that the v86d "
-+ "helper is installed and executable\n");
-+ } else {
-+ v86d_started = 1;
-+ err = cn_netlink_send(m, 0, gfp_any());
-+ }
-+ }
-+ kfree(m);
-+
-+ if (!err && !(task->t.flags & TF_EXIT))
-+ err = !wait_for_completion_timeout(task->done,
-+ msecs_to_jiffies(UVESAFB_TIMEOUT));
-+
-+ mutex_lock(&uvfb_lock);
-+ uvfb_tasks[seq] = NULL;
-+ mutex_unlock(&uvfb_lock);
-+
-+ seq++;
-+ if (seq >= UVESAFB_TASKS_MAX)
-+ seq = 0;
-+
-+ return err;
-+}
-+
-+/*
-+ * Free a uvesafb_ktask struct.
-+ */
-+static void uvesafb_free(struct uvesafb_ktask *task)
-+{
-+ if (task) {
-+ if (task->done)
-+ kfree(task->done);
-+ kfree(task);
-+ }
-+}
-+
-+/*
-+ * Prepare a uvesafb_ktask struct to be used again.
-+ */
-+static void uvesafb_reset(struct uvesafb_ktask *task)
-+{
-+ struct completion *cpl = task->done;
-+
-+ memset(task, 0, sizeof(*task));
-+ task->done = cpl;
-+}
-+
-+/*
-+ * Allocate and prepare a uvesafb_ktask struct.
-+ */
-+static struct uvesafb_ktask *uvesafb_prep(void)
-+{
-+ struct uvesafb_ktask *task;
-+
-+ task = kzalloc(sizeof(*task), GFP_KERNEL);
-+ if (task) {
-+ task->done = kzalloc(sizeof(*task->done), GFP_KERNEL);
-+ if (!task->done) {
-+ kfree(task);
-+ task = NULL;
-+ }
-+ }
-+ return task;
-+}
-+
-+static void uvesafb_setup_var(struct fb_var_screeninfo *var,
-+ struct fb_info *info, struct vbe_mode_ib *mode)
-+{
-+ struct uvesafb_par *par = info->par;
-+
-+ var->vmode = FB_VMODE_NONINTERLACED;
-+ var->sync = FB_SYNC_VERT_HIGH_ACT;
-+
-+ var->xres = mode->x_res;
-+ var->yres = mode->y_res;
-+ var->xres_virtual = mode->x_res;
-+ var->yres_virtual = (par->ypan) ?
-+ info->fix.smem_len / mode->bytes_per_scan_line :
-+ mode->y_res;
-+ var->xoffset = 0;
-+ var->yoffset = 0;
-+ var->bits_per_pixel = mode->bits_per_pixel;
-+
-+ if (var->bits_per_pixel == 15)
-+ var->bits_per_pixel = 16;
-+
-+ if (var->bits_per_pixel > 8) {
-+ var->red.offset = mode->red_off;
-+ var->red.length = mode->red_len;
-+ var->green.offset = mode->green_off;
-+ var->green.length = mode->green_len;
-+ var->blue.offset = mode->blue_off;
-+ var->blue.length = mode->blue_len;
-+ var->transp.offset = mode->rsvd_off;
-+ var->transp.length = mode->rsvd_len;
-+ } else {
-+ var->red.offset = 0;
-+ var->green.offset = 0;
-+ var->blue.offset = 0;
-+ var->transp.offset = 0;
-+
-+ /*
-+ * We're assuming that we can switch the DAC to 8 bits. If
-+ * this proves to be incorrect, we'll update the fields
-+ * later in set_par().
-+ */
-+ if (par->vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC) {
-+ var->red.length = 8;
-+ var->green.length = 8;
-+ var->blue.length = 8;
-+ var->transp.length = 0;
-+ } else {
-+ var->red.length = 6;
-+ var->green.length = 6;
-+ var->blue.length = 6;
-+ var->transp.length = 0;
-+ }
-+ }
-+}
-+
-+static int uvesafb_vbe_find_mode(struct uvesafb_par *par,
-+ int xres, int yres, int depth, unsigned char flags)
-+{
-+ int i, match = -1, h = 0, d = 0x7fffffff;
-+
-+ for (i = 0; i < par->vbe_modes_cnt; i++) {
-+ h = abs(par->vbe_modes[i].x_res - xres) +
-+ abs(par->vbe_modes[i].y_res - yres) +
-+ abs(depth - par->vbe_modes[i].depth);
-+
-+ /*
-+ * We have an exact match in terms of resolution
-+ * and depth.
-+ */
-+ if (h == 0)
-+ return i;
-+
-+ if (h < d || (h == d && par->vbe_modes[i].depth > depth)) {
-+ d = h;
-+ match = i;
-+ }
-+ }
-+ i = 1;
-+
-+ if (flags & UVESAFB_EXACT_DEPTH &&
-+ par->vbe_modes[match].depth != depth)
-+ i = 0;
-+
-+ if (flags & UVESAFB_EXACT_RES && d > 24)
-+ i = 0;
-+
-+ if (i != 0)
-+ return match;
-+ else
-+ return -1;
-+}
-+
-+static u8 *uvesafb_vbe_state_save(struct uvesafb_par *par)
-+{
-+ struct uvesafb_ktask *task;
-+ u8 *state;
-+ int err;
-+
-+ if (!par->vbe_state_size)
-+ return NULL;
-+
-+ state = kmalloc(par->vbe_state_size, GFP_KERNEL);
-+ if (!state)
-+ return NULL;
-+
-+ task = uvesafb_prep();
-+ if (!task) {
-+ kfree(state);
-+ return NULL;
-+ }
-+
-+ task->t.regs.eax = 0x4f04;
-+ task->t.regs.ecx = 0x000f;
-+ task->t.regs.edx = 0x0001;
-+ task->t.flags = TF_BUF_RET | TF_BUF_ESBX;
-+ task->t.buf_len = par->vbe_state_size;
-+ task->buf = state;
-+ err = uvesafb_exec(task);
-+
-+ if (err || (task->t.regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_WARNING "uvesafb: VBE get state call "
-+ "failed (eax=0x%x, err=%d)\n",
-+ task->t.regs.eax, err);
-+ kfree(state);
-+ state = NULL;
-+ }
-+
-+ uvesafb_free(task);
-+ return state;
-+}
-+
-+static void uvesafb_vbe_state_restore(struct uvesafb_par *par, u8 *state_buf)
-+{
-+ struct uvesafb_ktask *task;
-+ int err;
-+
-+ if (!state_buf)
-+ return;
-+
-+ task = uvesafb_prep();
-+ if (!task)
-+ return;
-+
-+ task->t.regs.eax = 0x4f04;
-+ task->t.regs.ecx = 0x000f;
-+ task->t.regs.edx = 0x0002;
-+ task->t.buf_len = par->vbe_state_size;
-+ task->t.flags = TF_BUF_ESBX;
-+ task->buf = state_buf;
-+
-+ err = uvesafb_exec(task);
-+ if (err || (task->t.regs.eax & 0xffff) != 0x004f)
-+ printk(KERN_WARNING "uvesafb: VBE state restore call "
-+ "failed (eax=0x%x, err=%d)\n",
-+ task->t.regs.eax, err);
-+
-+ uvesafb_free(task);
-+}
-+
-+static int __devinit uvesafb_vbe_getinfo(struct uvesafb_ktask *task,
-+ struct uvesafb_par *par)
-+{
-+ int err;
-+
-+ task->t.regs.eax = 0x4f00;
-+ task->t.flags = TF_VBEIB;
-+ task->t.buf_len = sizeof(struct vbe_ib);
-+ task->buf = &par->vbe_ib;
-+ strncpy(par->vbe_ib.vbe_signature, "VBE2", 4);
-+
-+ err = uvesafb_exec(task);
-+ if (err || (task->t.regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_ERR "uvesafb: Getting VBE info block failed "
-+ "(eax=0x%x, err=%d)\n", (u32)task->t.regs.eax,
-+ err);
-+ return -EINVAL;
-+ }
-+
-+ if (par->vbe_ib.vbe_version < 0x0200) {
-+ printk(KERN_ERR "uvesafb: Sorry, pre-VBE 2.0 cards are "
-+ "not supported.\n");
-+ return -EINVAL;
-+ }
-+
-+ if (!par->vbe_ib.mode_list_ptr) {
-+ printk(KERN_ERR "uvesafb: Missing mode list!\n");
-+ return -EINVAL;
-+ }
-+
-+ printk(KERN_INFO "uvesafb: ");
-+
-+ /*
-+ * Convert string pointers and the mode list pointer into
-+ * usable addresses. Print informational messages about the
-+ * video adapter and its vendor.
-+ */
-+ if (par->vbe_ib.oem_vendor_name_ptr)
-+ printk("%s, ",
-+ ((char *)task->buf) + par->vbe_ib.oem_vendor_name_ptr);
-+
-+ if (par->vbe_ib.oem_product_name_ptr)
-+ printk("%s, ",
-+ ((char *)task->buf) + par->vbe_ib.oem_product_name_ptr);
-+
-+ if (par->vbe_ib.oem_product_rev_ptr)
-+ printk("%s, ",
-+ ((char *)task->buf) + par->vbe_ib.oem_product_rev_ptr);
-+
-+ if (par->vbe_ib.oem_string_ptr)
-+ printk("OEM: %s, ",
-+ ((char *)task->buf) + par->vbe_ib.oem_string_ptr);
-+
-+ printk("VBE v%d.%d\n", ((par->vbe_ib.vbe_version & 0xff00) >> 8),
-+ par->vbe_ib.vbe_version & 0xff);
-+
-+ return 0;
-+}
-+
-+static int __devinit uvesafb_vbe_getmodes(struct uvesafb_ktask *task,
-+ struct uvesafb_par *par)
-+{
-+ int off = 0, err;
-+ u16 *mode;
-+
-+ par->vbe_modes_cnt = 0;
-+
-+ /* Count available modes. */
-+ mode = (u16 *) (((u8 *)&par->vbe_ib) + par->vbe_ib.mode_list_ptr);
-+ while (*mode != 0xffff) {
-+ par->vbe_modes_cnt++;
-+ mode++;
-+ }
-+
-+ par->vbe_modes = kzalloc(sizeof(struct vbe_mode_ib) *
-+ par->vbe_modes_cnt, GFP_KERNEL);
-+ if (!par->vbe_modes)
-+ return -ENOMEM;
-+
-+ /* Get info about all available modes. */
-+ mode = (u16 *) (((u8 *)&par->vbe_ib) + par->vbe_ib.mode_list_ptr);
-+ while (*mode != 0xffff) {
-+ struct vbe_mode_ib *mib;
-+
-+ uvesafb_reset(task);
-+ task->t.regs.eax = 0x4f01;
-+ task->t.regs.ecx = (u32) *mode;
-+ task->t.flags = TF_BUF_RET | TF_BUF_ESDI;
-+ task->t.buf_len = sizeof(struct vbe_mode_ib);
-+ task->buf = par->vbe_modes + off;
-+
-+ err = uvesafb_exec(task);
-+ if (err || (task->t.regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_ERR "uvesafb: Getting mode info block "
-+ "for mode 0x%x failed (eax=0x%x, err=%d)\n",
-+ *mode, (u32)task->t.regs.eax, err);
-+ return -EINVAL;
-+ }
-+
-+ mib = task->buf;
-+ mib->mode_id = *mode;
-+
-+ /*
-+ * We only want modes that are supported with the current
-+ * hardware configuration, color, graphics and that have
-+ * support for the LFB.
-+ */
-+ if ((mib->mode_attr & VBE_MODE_MASK) == VBE_MODE_MASK &&
-+ mib->bits_per_pixel >= 8)
-+ off++;
-+ else
-+ par->vbe_modes_cnt--;
-+
-+ mode++;
-+ mib->depth = mib->red_len + mib->green_len + mib->blue_len;
-+
-+ /*
-+ * Handle 8bpp modes and modes with broken color component
-+ * lengths.
-+ */
-+ if (mib->depth == 0 || (mib->depth == 24 &&
-+ mib->bits_per_pixel == 32))
-+ mib->depth = mib->bits_per_pixel;
-+ }
-+
-+ return 0;
-+}
-+
-+/*
-+ * The Protected Mode Interface is 32-bit x86 code, so we only run it on
-+ * x86 and not x86_64.
-+ */
-+#ifdef CONFIG_X86_32
-+static int __devinit uvesafb_vbe_getpmi(struct uvesafb_ktask *task,
-+ struct uvesafb_par *par)
-+{
-+ int i, err;
-+
-+ uvesafb_reset(task);
-+ task->t.regs.eax = 0x4f0a;
-+ task->t.regs.ebx = 0x0;
-+ err = uvesafb_exec(task);
-+
-+ if ((task->t.regs.eax & 0xffff) != 0x4f || task->t.regs.es < 0xc000) {
-+ par->pmi_setpal = par->ypan = 0;
-+ } else {
-+ par->pmi_base = (u16 *)phys_to_virt(((u32)task->t.regs.es << 4)
-+ + task->t.regs.edi);
-+ par->pmi_start = (u8 *)par->pmi_base + par->pmi_base[1];
-+ par->pmi_pal = (u8 *)par->pmi_base + par->pmi_base[2];
-+ printk(KERN_INFO "uvesafb: protected mode interface info at "
-+ "%04x:%04x\n",
-+ (u16)task->t.regs.es, (u16)task->t.regs.edi);
-+ printk(KERN_INFO "uvesafb: pmi: set display start = %p, "
-+ "set palette = %p\n", par->pmi_start,
-+ par->pmi_pal);
-+
-+ if (par->pmi_base[3]) {
-+ printk(KERN_INFO "uvesafb: pmi: ports = ");
-+ for (i = par->pmi_base[3]/2;
-+ par->pmi_base[i] != 0xffff; i++)
-+ printk("%x ", par->pmi_base[i]);
-+ printk("\n");
-+
-+ if (par->pmi_base[i] != 0xffff) {
-+ printk(KERN_INFO "uvesafb: can't handle memory"
-+ " requests, pmi disabled\n");
-+ par->ypan = par->pmi_setpal = 0;
-+ }
-+ }
-+ }
-+ return 0;
-+}
-+#endif /* CONFIG_X86_32 */
-+
-+/*
-+ * Check whether a video mode is supported by the Video BIOS and is
-+ * compatible with the monitor limits.
-+ */
-+static int __devinit uvesafb_is_valid_mode(struct fb_videomode *mode,
-+ struct fb_info *info)
-+{
-+ if (info->monspecs.gtf) {
-+ fb_videomode_to_var(&info->var, mode);
-+ if (fb_validate_mode(&info->var, info))
-+ return 0;
-+ }
-+
-+ if (uvesafb_vbe_find_mode(info->par, mode->xres, mode->yres, 8,
-+ UVESAFB_EXACT_RES) == -1)
-+ return 0;
-+
-+ return 1;
-+}
-+
-+static int __devinit uvesafb_vbe_getedid(struct uvesafb_ktask *task,
-+ struct fb_info *info)
-+{
-+ struct uvesafb_par *par = info->par;
-+ int err = 0;
-+
-+ if (noedid || par->vbe_ib.vbe_version < 0x0300)
-+ return -EINVAL;
-+
-+ task->t.regs.eax = 0x4f15;
-+ task->t.regs.ebx = 0;
-+ task->t.regs.ecx = 0;
-+ task->t.buf_len = 0;
-+ task->t.flags = 0;
-+
-+ err = uvesafb_exec(task);
-+
-+ if ((task->t.regs.eax & 0xffff) != 0x004f || err)
-+ return -EINVAL;
-+
-+ if ((task->t.regs.ebx & 0x3) == 3) {
-+ printk(KERN_INFO "uvesafb: VBIOS/hardware supports both "
-+ "DDC1 and DDC2 transfers\n");
-+ } else if ((task->t.regs.ebx & 0x3) == 2) {
-+ printk(KERN_INFO "uvesafb: VBIOS/hardware supports DDC2 "
-+ "transfers\n");
-+ } else if ((task->t.regs.ebx & 0x3) == 1) {
-+ printk(KERN_INFO "uvesafb: VBIOS/hardware supports DDC1 "
-+ "transfers\n");
-+ } else {
-+ printk(KERN_INFO "uvesafb: VBIOS/hardware doesn't support "
-+ "DDC transfers\n");
-+ return -EINVAL;
-+ }
-+
-+ task->t.regs.eax = 0x4f15;
-+ task->t.regs.ebx = 1;
-+ task->t.regs.ecx = task->t.regs.edx = 0;
-+ task->t.flags = TF_BUF_RET | TF_BUF_ESDI;
-+ task->t.buf_len = EDID_LENGTH;
-+ task->buf = kzalloc(EDID_LENGTH, GFP_KERNEL);
-+
-+ err = uvesafb_exec(task);
-+
-+ if ((task->t.regs.eax & 0xffff) == 0x004f && !err) {
-+ fb_edid_to_monspecs(task->buf, &info->monspecs);
-+
-+ if (info->monspecs.vfmax && info->monspecs.hfmax) {
-+ /*
-+ * If the maximum pixel clock wasn't specified in
-+ * the EDID block, set it to 300 MHz.
-+ */
-+ if (info->monspecs.dclkmax == 0)
-+ info->monspecs.dclkmax = 300 * 1000000;
-+ info->monspecs.gtf = 1;
-+ }
-+ } else {
-+ err = -EINVAL;
-+ }
-+
-+ kfree(task->buf);
-+ return err;
-+}
-+
-+static void __devinit uvesafb_vbe_getmonspecs(struct uvesafb_ktask *task,
-+ struct fb_info *info)
-+{
-+ struct uvesafb_par *par = info->par;
-+ int i;
-+
-+ memset(&info->monspecs, 0, sizeof(info->monspecs));
-+
-+ /*
-+ * If we don't get all necessary data from the EDID block,
-+ * mark it as incompatible with the GTF and set nocrtc so
-+ * that we always use the default BIOS refresh rate.
-+ */
-+ if (uvesafb_vbe_getedid(task, info)) {
-+ info->monspecs.gtf = 0;
-+ par->nocrtc = 1;
-+ }
-+
-+ /* Kernel command line overrides. */
-+ if (maxclk)
-+ info->monspecs.dclkmax = maxclk * 1000000;
-+ if (maxvf)
-+ info->monspecs.vfmax = maxvf;
-+ if (maxhf)
-+ info->monspecs.hfmax = maxhf * 1000;
-+
-+ /*
-+ * In case DDC transfers are not supported, the user can provide
-+ * monitor limits manually. Lower limits are set to "safe" values.
-+ */
-+ if (info->monspecs.gtf == 0 && maxclk && maxvf && maxhf) {
-+ info->monspecs.dclkmin = 0;
-+ info->monspecs.vfmin = 60;
-+ info->monspecs.hfmin = 29000;
-+ info->monspecs.gtf = 1;
-+ par->nocrtc = 0;
-+ }
-+
-+ if (info->monspecs.gtf)
-+ printk(KERN_INFO
-+ "uvesafb: monitor limits: vf = %d Hz, hf = %d kHz, "
-+ "clk = %d MHz\n", info->monspecs.vfmax,
-+ (int)(info->monspecs.hfmax / 1000),
-+ (int)(info->monspecs.dclkmax / 1000000));
-+ else
-+ printk(KERN_INFO "uvesafb: no monitor limits have been set, "
-+ "default refresh rate will be used\n");
-+
-+ /* Add VBE modes to the modelist. */
-+ for (i = 0; i < par->vbe_modes_cnt; i++) {
-+ struct fb_var_screeninfo var;
-+ struct vbe_mode_ib *mode;
-+ struct fb_videomode vmode;
-+
-+ mode = &par->vbe_modes[i];
-+ memset(&var, 0, sizeof(var));
-+
-+ var.xres = mode->x_res;
-+ var.yres = mode->y_res;
-+
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60, &var, info);
-+ fb_var_to_videomode(&vmode, &var);
-+ fb_add_videomode(&vmode, &info->modelist);
-+ }
-+
-+ /* Add valid VESA modes to our modelist. */
-+ for (i = 0; i < VESA_MODEDB_SIZE; i++) {
-+ if (uvesafb_is_valid_mode((struct fb_videomode *)
-+ &vesa_modes[i], info))
-+ fb_add_videomode(&vesa_modes[i], &info->modelist);
-+ }
-+
-+ for (i = 0; i < info->monspecs.modedb_len; i++) {
-+ if (uvesafb_is_valid_mode(&info->monspecs.modedb[i], info))
-+ fb_add_videomode(&info->monspecs.modedb[i],
-+ &info->modelist);
-+ }
-+
-+ return;
-+}
-+
-+static void __devinit uvesafb_vbe_getstatesize(struct uvesafb_ktask *task,
-+ struct uvesafb_par *par)
-+{
-+ int err;
-+
-+ uvesafb_reset(task);
-+
-+ /*
-+ * Get the VBE state buffer size. We want all available
-+ * hardware state data (CL = 0x0f).
-+ */
-+ task->t.regs.eax = 0x4f04;
-+ task->t.regs.ecx = 0x000f;
-+ task->t.regs.edx = 0x0000;
-+ task->t.flags = 0;
-+
-+ err = uvesafb_exec(task);
-+
-+ if (err || (task->t.regs.eax & 0xffff) != 0x004f) {
-+ printk(KERN_WARNING "uvesafb: VBE state buffer size "
-+ "cannot be determined (eax=0x%x, err=%d)\n",
-+ task->t.regs.eax, err);
-+ par->vbe_state_size = 0;
-+ return;
-+ }
-+
-+ par->vbe_state_size = 64 * (task->t.regs.ebx & 0xffff);
-+}
-+
-+static int __devinit uvesafb_vbe_init(struct fb_info *info)
-+{
-+ struct uvesafb_ktask *task = NULL;
-+ struct uvesafb_par *par = info->par;
-+ int err;
-+
-+ task = uvesafb_prep();
-+ if (!task)
-+ return -ENOMEM;
-+
-+ err = uvesafb_vbe_getinfo(task, par);
-+ if (err)
-+ goto out;
-+
-+ err = uvesafb_vbe_getmodes(task, par);
-+ if (err)
-+ goto out;
-+
-+ par->nocrtc = nocrtc;
-+#ifdef CONFIG_X86_32
-+ par->pmi_setpal = pmi_setpal;
-+ par->ypan = ypan;
-+
-+ if (par->pmi_setpal || par->ypan)
-+ uvesafb_vbe_getpmi(task, par);
-+#else
-+ /* The protected mode interface is not available on non-x86. */
-+ par->pmi_setpal = par->ypan = 0;
-+#endif
-+
-+ INIT_LIST_HEAD(&info->modelist);
-+ uvesafb_vbe_getmonspecs(task, info);
-+ uvesafb_vbe_getstatesize(task, par);
-+
-+out: uvesafb_free(task);
-+ return err;
-+}
-+
-+static int __devinit uvesafb_vbe_init_mode(struct fb_info *info)
-+{
-+ struct list_head *pos;
-+ struct fb_modelist *modelist;
-+ struct fb_videomode *mode;
-+ struct uvesafb_par *par = info->par;
-+ int i, modeid;
-+
-+ /* Has the user requested a specific VESA mode? */
-+ if (vbemode) {
-+ for (i = 0; i < par->vbe_modes_cnt; i++) {
-+ if (par->vbe_modes[i].mode_id == vbemode) {
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60,
-+ &info->var, info);
-+ /*
-+ * With pixclock set to 0, the default BIOS
-+ * timings will be used in set_par().
-+ */
-+ info->var.pixclock = 0;
-+ modeid = i;
-+ goto gotmode;
-+ }
-+ }
-+ printk(KERN_INFO "uvesafb: requested VBE mode 0x%x is "
-+ "unavailable\n", vbemode);
-+ vbemode = 0;
-+ }
-+
-+ /* Count the modes in the modelist */
-+ i = 0;
-+ list_for_each(pos, &info->modelist)
-+ i++;
-+
-+ /*
-+ * Convert the modelist into a modedb so that we can use it with
-+ * fb_find_mode().
-+ */
-+ mode = kzalloc(i * sizeof(*mode), GFP_KERNEL);
-+ if (mode) {
-+ i = 0;
-+ list_for_each(pos, &info->modelist) {
-+ modelist = list_entry(pos, struct fb_modelist, list);
-+ mode[i] = modelist->mode;
-+ i++;
-+ }
-+
-+ if (!mode_option)
-+ mode_option = UVESAFB_DEFAULT_MODE;
-+
-+ i = fb_find_mode(&info->var, info, mode_option, mode, i,
-+ NULL, 8);
-+
-+ kfree(mode);
-+ }
-+
-+ /* fb_find_mode() failed */
-+ if (i == 0 || i >= 3) {
-+ info->var.xres = 640;
-+ info->var.yres = 480;
-+ mode = (struct fb_videomode *)
-+ fb_find_best_mode(&info->var, &info->modelist);
-+
-+ if (mode) {
-+ fb_videomode_to_var(&info->var, mode);
-+ } else {
-+ modeid = par->vbe_modes[0].mode_id;
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60,
-+ &info->var, info);
-+ goto gotmode;
-+ }
-+ }
-+
-+ /* Look for a matching VBE mode. */
-+ modeid = uvesafb_vbe_find_mode(par, info->var.xres, info->var.yres,
-+ info->var.bits_per_pixel, UVESAFB_EXACT_RES);
-+
-+ if (modeid == -1)
-+ return -EINVAL;
-+
-+gotmode:
-+ uvesafb_setup_var(&info->var, info, &par->vbe_modes[modeid]);
-+
-+ /*
-+ * If we are not VBE3.0+ compliant, we're done -- the BIOS will
-+ * ignore our timings anyway.
-+ */
-+ if (par->vbe_ib.vbe_version < 0x0300 || par->nocrtc)
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60,
-+ &info->var, info);
-+
-+ return modeid;
-+}
-+
-+static int uvesafb_setpalette(struct uvesafb_pal_entry *entries, int count,
-+ int start, struct fb_info *info)
-+{
-+ struct uvesafb_ktask *task;
-+ struct uvesafb_par *par = info->par;
-+ int i = par->mode_idx;
-+ int err = 0;
-+
-+ /*
-+ * We support palette modifications for 8 bpp modes only, so
-+ * there can never be more than 256 entries.
-+ */
-+ if (start + count > 256)
-+ return -EINVAL;
-+
-+ /* Use VGA registers if mode is VGA-compatible. */
-+ if (i >= 0 && i < par->vbe_modes_cnt &&
-+ par->vbe_modes[i].mode_attr & VBE_MODE_VGACOMPAT) {
-+ for (i = 0; i < count; i++) {
-+ outb_p(start + i, dac_reg);
-+ outb_p(entries[i].red, dac_val);
-+ outb_p(entries[i].green, dac_val);
-+ outb_p(entries[i].blue, dac_val);
-+ }
-+ }
-+#ifdef CONFIG_X86_32
-+ else if (par->pmi_setpal) {
-+ __asm__ __volatile__(
-+ "call *(%%esi)"
-+ : /* no return value */
-+ : "a" (0x4f09), /* EAX */
-+ "b" (0), /* EBX */
-+ "c" (count), /* ECX */
-+ "d" (start), /* EDX */
-+ "D" (entries), /* EDI */
-+ "S" (&par->pmi_pal)); /* ESI */
-+ }
-+#endif
-+ else {
-+ task = uvesafb_prep();
-+ if (!task)
-+ return -ENOMEM;
-+
-+ task->t.regs.eax = 0x4f09;
-+ task->t.regs.ebx = 0x0;
-+ task->t.regs.ecx = count;
-+ task->t.regs.edx = start;
-+ task->t.flags = TF_BUF_ESDI;
-+ task->t.buf_len = sizeof(struct uvesafb_pal_entry) * count;
-+ task->buf = entries;
-+
-+ err = uvesafb_exec(task);
-+ if ((task->t.regs.eax & 0xffff) != 0x004f)
-+ err = 1;
-+
-+ uvesafb_free(task);
-+ }
-+ return err;
-+}
-+
-+static int uvesafb_setcolreg(unsigned regno, unsigned red, unsigned green,
-+ unsigned blue, unsigned transp,
-+ struct fb_info *info)
-+{
-+ struct uvesafb_pal_entry entry;
-+ int shift = 16 - info->var.green.length;
-+ int err = 0;
-+
-+ if (regno >= info->cmap.len)
-+ return -EINVAL;
-+
-+ if (info->var.bits_per_pixel == 8) {
-+ entry.red = red >> shift;
-+ entry.green = green >> shift;
-+ entry.blue = blue >> shift;
-+ entry.pad = 0;
-+
-+ err = uvesafb_setpalette(&entry, 1, regno, info);
-+ } else if (regno < 16) {
-+ switch (info->var.bits_per_pixel) {
-+ case 16:
-+ if (info->var.red.offset == 10) {
-+ /* 1:5:5:5 */
-+ ((u32 *) (info->pseudo_palette))[regno] =
-+ ((red & 0xf800) >> 1) |
-+ ((green & 0xf800) >> 6) |
-+ ((blue & 0xf800) >> 11);
-+ } else {
-+ /* 0:5:6:5 */
-+ ((u32 *) (info->pseudo_palette))[regno] =
-+ ((red & 0xf800) ) |
-+ ((green & 0xfc00) >> 5) |
-+ ((blue & 0xf800) >> 11);
-+ }
-+ break;
-+
-+ case 24:
-+ case 32:
-+ red >>= 8;
-+ green >>= 8;
-+ blue >>= 8;
-+ ((u32 *)(info->pseudo_palette))[regno] =
-+ (red << info->var.red.offset) |
-+ (green << info->var.green.offset) |
-+ (blue << info->var.blue.offset);
-+ break;
-+ }
-+ }
-+ return err;
-+}
-+
-+static int uvesafb_setcmap(struct fb_cmap *cmap, struct fb_info *info)
-+{
-+ struct uvesafb_pal_entry *entries;
-+ int shift = 16 - info->var.green.length;
-+ int i, err = 0;
-+
-+ if (info->var.bits_per_pixel == 8) {
-+ if (cmap->start + cmap->len > info->cmap.start +
-+ info->cmap.len || cmap->start < info->cmap.start)
-+ return -EINVAL;
-+
-+ entries = kmalloc(sizeof(*entries) * cmap->len, GFP_KERNEL);
-+ if (!entries)
-+ return -ENOMEM;
-+
-+ for (i = 0; i < cmap->len; i++) {
-+ entries[i].red = cmap->red[i] >> shift;
-+ entries[i].green = cmap->green[i] >> shift;
-+ entries[i].blue = cmap->blue[i] >> shift;
-+ entries[i].pad = 0;
-+ }
-+ err = uvesafb_setpalette(entries, cmap->len, cmap->start, info);
-+ kfree(entries);
-+ } else {
-+ /*
-+ * For modes with bpp > 8, we only set the pseudo palette in
-+ * the fb_info struct. We rely on uvesafb_setcolreg to do all
-+ * sanity checking.
-+ */
-+ for (i = 0; i < cmap->len; i++) {
-+ err |= uvesafb_setcolreg(cmap->start + i, cmap->red[i],
-+ cmap->green[i], cmap->blue[i],
-+ 0, info);
-+ }
-+ }
-+ return err;
-+}
-+
-+static int uvesafb_pan_display(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+#ifdef CONFIG_X86_32
-+ int offset;
-+ struct uvesafb_par *par = info->par;
-+
-+ offset = (var->yoffset * info->fix.line_length + var->xoffset) / 4;
-+
-+ /*
-+ * It turns out it's not the best idea to do panning via vm86,
-+ * so we only allow it if we have a PMI.
-+ */
-+ if (par->pmi_start) {
-+ __asm__ __volatile__(
-+ "call *(%%edi)"
-+ : /* no return value */
-+ : "a" (0x4f07), /* EAX */
-+ "b" (0), /* EBX */
-+ "c" (offset), /* ECX */
-+ "d" (offset >> 16), /* EDX */
-+ "D" (&par->pmi_start)); /* EDI */
-+ }
-+#endif
-+ return 0;
-+}
-+
-+static int uvesafb_blank(int blank, struct fb_info *info)
-+{
-+ struct uvesafb_par *par = info->par;
-+ struct uvesafb_ktask *task;
-+ int err = 1;
-+
-+ if (par->vbe_ib.capabilities & VBE_CAP_VGACOMPAT) {
-+ int loop = 10000;
-+ u8 seq = 0, crtc17 = 0;
-+
-+ if (blank == FB_BLANK_POWERDOWN) {
-+ seq = 0x20;
-+ crtc17 = 0x00;
-+ err = 0;
-+ } else {
-+ seq = 0x00;
-+ crtc17 = 0x80;
-+ err = (blank == FB_BLANK_UNBLANK) ? 0 : -EINVAL;
-+ }
-+
-+ vga_wseq(NULL, 0x00, 0x01);
-+ seq |= vga_rseq(NULL, 0x01) & ~0x20;
-+ vga_wseq(NULL, 0x00, seq);
-+
-+ crtc17 |= vga_rcrt(NULL, 0x17) & ~0x80;
-+ while (loop--);
-+ vga_wcrt(NULL, 0x17, crtc17);
-+ vga_wseq(NULL, 0x00, 0x03);
-+ } else {
-+ task = uvesafb_prep();
-+ if (!task)
-+ return -ENOMEM;
-+
-+ task->t.regs.eax = 0x4f10;
-+ switch (blank) {
-+ case FB_BLANK_UNBLANK:
-+ task->t.regs.ebx = 0x0001;
-+ break;
-+ case FB_BLANK_NORMAL:
-+ task->t.regs.ebx = 0x0101; /* standby */
-+ break;
-+ case FB_BLANK_POWERDOWN:
-+ task->t.regs.ebx = 0x0401; /* powerdown */
-+ break;
-+ default:
-+ goto out;
-+ }
-+
-+ err = uvesafb_exec(task);
-+ if (err || (task->t.regs.eax & 0xffff) != 0x004f)
-+ err = 1;
-+out: uvesafb_free(task);
-+ }
-+ return err;
-+}
-+
-+static int uvesafb_open(struct fb_info *info, int user)
-+{
-+ struct uvesafb_par *par = info->par;
-+ int cnt = atomic_read(&par->ref_count);
-+
-+ if (!cnt && par->vbe_state_size)
-+ par->vbe_state_orig = uvesafb_vbe_state_save(par);
-+
-+ atomic_inc(&par->ref_count);
-+ return 0;
-+}
-+
-+static int uvesafb_release(struct fb_info *info, int user)
-+{
-+ struct uvesafb_ktask *task = NULL;
-+ struct uvesafb_par *par = info->par;
-+ int cnt = atomic_read(&par->ref_count);
-+
-+ if (!cnt)
-+ return -EINVAL;
-+
-+ if (cnt != 1)
-+ goto out;
-+
-+ task = uvesafb_prep();
-+ if (!task)
-+ goto out;
-+
-+ /* First, try to set the standard 80x25 text mode. */
-+ task->t.regs.eax = 0x0003;
-+ uvesafb_exec(task);
-+
-+ /*
-+ * Now try to restore whatever hardware state we might have
-+ * saved when the fb device was first opened.
-+ */
-+ uvesafb_vbe_state_restore(par, par->vbe_state_orig);
-+out:
-+ atomic_dec(&par->ref_count);
-+ if (task)
-+ uvesafb_free(task);
-+ return 0;
-+}
-+
-+static int uvesafb_set_par(struct fb_info *info)
-+{
-+ struct uvesafb_par *par = info->par;
-+ struct uvesafb_ktask *task = NULL;
-+ struct vbe_crtc_ib *crtc = NULL;
-+ struct vbe_mode_ib *mode = NULL;
-+ int i, err = 0, depth = info->var.bits_per_pixel;
-+
-+ if (depth > 8 && depth != 32)
-+ depth = info->var.red.length + info->var.green.length +
-+ info->var.blue.length;
-+
-+ i = uvesafb_vbe_find_mode(par, info->var.xres, info->var.yres, depth,
-+ UVESAFB_EXACT_RES | UVESAFB_EXACT_DEPTH);
-+ if (i >= 0)
-+ mode = &par->vbe_modes[i];
-+ else
-+ return -EINVAL;
-+
-+ task = uvesafb_prep();
-+ if (!task)
-+ return -ENOMEM;
-+setmode:
-+ task->t.regs.eax = 0x4f02;
-+ task->t.regs.ebx = mode->mode_id | 0x4000; /* use LFB */
-+
-+ if (par->vbe_ib.vbe_version >= 0x0300 && !par->nocrtc &&
-+ info->var.pixclock != 0) {
-+ task->t.regs.ebx |= 0x0800; /* use CRTC data */
-+ task->t.flags = TF_BUF_ESDI;
-+ crtc = kzalloc(sizeof(struct vbe_crtc_ib), GFP_KERNEL);
-+ if (!crtc) {
-+ err = -ENOMEM;
-+ goto out;
-+ }
-+ crtc->horiz_start = info->var.xres + info->var.right_margin;
-+ crtc->horiz_end = crtc->horiz_start + info->var.hsync_len;
-+ crtc->horiz_total = crtc->horiz_end + info->var.left_margin;
-+
-+ crtc->vert_start = info->var.yres + info->var.lower_margin;
-+ crtc->vert_end = crtc->vert_start + info->var.vsync_len;
-+ crtc->vert_total = crtc->vert_end + info->var.upper_margin;
-+
-+ crtc->pixel_clock = PICOS2KHZ(info->var.pixclock) * 1000;
-+ crtc->refresh_rate = (u16)(100 * (crtc->pixel_clock /
-+ (crtc->vert_total * crtc->horiz_total)));
-+
-+ if (info->var.vmode & FB_VMODE_DOUBLE)
-+ crtc->flags |= 0x1;
-+ if (info->var.vmode & FB_VMODE_INTERLACED)
-+ crtc->flags |= 0x2;
-+ if (!(info->var.sync & FB_SYNC_HOR_HIGH_ACT))
-+ crtc->flags |= 0x4;
-+ if (!(info->var.sync & FB_SYNC_VERT_HIGH_ACT))
-+ crtc->flags |= 0x8;
-+ memcpy(&par->crtc, crtc, sizeof(*crtc));
-+ } else {
-+ memset(&par->crtc, 0, sizeof(*crtc));
-+ }
-+
-+ task->t.buf_len = sizeof(struct vbe_crtc_ib);
-+ task->buf = &par->crtc;
-+
-+ err = uvesafb_exec(task);
-+ if (err || (task->t.regs.eax & 0xffff) != 0x004f) {
-+ /*
-+ * The mode switch might have failed because we tried to
-+ * use our own timings. Try again with the default timings.
-+ */
-+ if (crtc != NULL) {
-+ printk(KERN_WARNING "uvesafb: mode switch failed "
-+ "(eax=0x%x, err=%d). Trying again with "
-+ "default timings.\n", task->t.regs.eax, err);
-+ uvesafb_reset(task);
-+ kfree(crtc);
-+ crtc = NULL;
-+ info->var.pixclock = 0;
-+ goto setmode;
-+ } else {
-+ printk(KERN_ERR "uvesafb: mode switch failed (eax="
-+ "0x%x, err=%d)\n", task->t.regs.eax, err);
-+ err = -EINVAL;
-+ goto out;
-+ }
-+ }
-+ par->mode_idx = i;
-+
-+ /* For 8bpp modes, always try to set the DAC to 8 bits. */
-+ if (par->vbe_ib.capabilities & VBE_CAP_CAN_SWITCH_DAC &&
-+ mode->bits_per_pixel <= 8) {
-+ uvesafb_reset(task);
-+ task->t.regs.eax = 0x4f08;
-+ task->t.regs.ebx = 0x0800;
-+
-+ err = uvesafb_exec(task);
-+ if (err || (task->t.regs.eax & 0xffff) != 0x004f ||
-+ ((task->t.regs.ebx & 0xff00) >> 8) != 8) {
-+ /*
-+ * We've failed to set the DAC palette format -
-+ * time to correct var.
-+ */
-+ info->var.red.length = 6;
-+ info->var.green.length = 6;
-+ info->var.blue.length = 6;
-+ }
-+ }
-+
-+ info->fix.visual = (info->var.bits_per_pixel == 8) ?
-+ FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
-+ info->fix.line_length = mode->bytes_per_scan_line;
-+
-+out: if (crtc != NULL)
-+ kfree(crtc);
-+ uvesafb_free(task);
-+
-+ return err;
-+}
-+
-+static void uvesafb_check_limits(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ const struct fb_videomode *mode;
-+ struct uvesafb_par *par = info->par;
-+
-+ /*
-+ * If pixclock is set to 0, then we're using default BIOS timings
-+ * and thus don't have to perform any checks here.
-+ */
-+ if (!var->pixclock)
-+ return;
-+
-+ if (par->vbe_ib.vbe_version < 0x0300) {
-+ fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON, 60, var, info);
-+ return;
-+ }
-+
-+ if (!fb_validate_mode(var, info))
-+ return;
-+
-+ mode = fb_find_best_mode(var, &info->modelist);
-+ if (mode) {
-+ if (mode->xres == var->xres && mode->yres == var->yres &&
-+ !(mode->vmode & (FB_VMODE_INTERLACED | FB_VMODE_DOUBLE))) {
-+ fb_videomode_to_var(var, mode);
-+ return;
-+ }
-+ }
-+
-+ if (info->monspecs.gtf && !fb_get_mode(FB_MAXTIMINGS, 0, var, info))
-+ return;
-+ /* Use default refresh rate */
-+ var->pixclock = 0;
-+}
-+
-+static int uvesafb_check_var(struct fb_var_screeninfo *var,
-+ struct fb_info *info)
-+{
-+ struct uvesafb_par *par = info->par;
-+ struct vbe_mode_ib *mode = NULL;
-+ int match = -1;
-+ int depth = var->red.length + var->green.length + var->blue.length;
-+
-+ /*
-+ * Various apps will use bits_per_pixel to set the color depth,
-+ * which is theoretically incorrect, but which we'll try to handle
-+ * here.
-+ */
-+ if (depth == 0 || abs(depth - var->bits_per_pixel) >= 8)
-+ depth = var->bits_per_pixel;
-+
-+ match = uvesafb_vbe_find_mode(par, var->xres, var->yres, depth,
-+ UVESAFB_EXACT_RES);
-+ if (match == -1)
-+ return -EINVAL;
-+
-+ mode = &par->vbe_modes[match];
-+ uvesafb_setup_var(var, info, mode);
-+
-+ /*
-+ * Check whether we have remapped enough memory for this mode.
-+ * We might be called at an early stage, when we haven't remapped
-+ * any memory yet, in which case we simply skip the check.
-+ */
-+ if (var->yres * mode->bytes_per_scan_line > info->fix.smem_len
-+ && info->fix.smem_len)
-+ return -EINVAL;
-+
-+ if ((var->vmode & FB_VMODE_DOUBLE) &&
-+ !(par->vbe_modes[match].mode_attr & 0x100))
-+ var->vmode &= ~FB_VMODE_DOUBLE;
-+
-+ if ((var->vmode & FB_VMODE_INTERLACED) &&
-+ !(par->vbe_modes[match].mode_attr & 0x200))
-+ var->vmode &= ~FB_VMODE_INTERLACED;
-+
-+ uvesafb_check_limits(var, info);
-+
-+ var->xres_virtual = var->xres;
-+ var->yres_virtual = (par->ypan) ?
-+ info->fix.smem_len / mode->bytes_per_scan_line :
-+ var->yres;
-+ return 0;
-+}
-+
-+static void uvesafb_save_state(struct fb_info *info)
-+{
-+ struct uvesafb_par *par = info->par;
-+
-+ if (par->vbe_state_saved)
-+ kfree(par->vbe_state_saved);
-+
-+ par->vbe_state_saved = uvesafb_vbe_state_save(par);
-+}
-+
-+static void uvesafb_restore_state(struct fb_info *info)
-+{
-+ struct uvesafb_par *par = info->par;
-+
-+ uvesafb_vbe_state_restore(par, par->vbe_state_saved);
-+}
-+
-+static struct fb_ops uvesafb_ops = {
-+ .owner = THIS_MODULE,
-+ .fb_open = uvesafb_open,
-+ .fb_release = uvesafb_release,
-+ .fb_setcolreg = uvesafb_setcolreg,
-+ .fb_setcmap = uvesafb_setcmap,
-+ .fb_pan_display = uvesafb_pan_display,
-+ .fb_blank = uvesafb_blank,
-+ .fb_fillrect = cfb_fillrect,
-+ .fb_copyarea = cfb_copyarea,
-+ .fb_imageblit = cfb_imageblit,
-+ .fb_check_var = uvesafb_check_var,
-+ .fb_set_par = uvesafb_set_par,
-+ .fb_save_state = uvesafb_save_state,
-+ .fb_restore_state = uvesafb_restore_state,
-+};
-+
-+static void __devinit uvesafb_init_info(struct fb_info *info,
-+ struct vbe_mode_ib *mode)
-+{
-+ unsigned int size_vmode;
-+ unsigned int size_remap;
-+ unsigned int size_total;
-+ struct uvesafb_par *par = info->par;
-+ int i, h;
-+
-+ info->pseudo_palette = ((u8 *)info->par + sizeof(struct uvesafb_par));
-+ info->fix = uvesafb_fix;
-+ info->fix.ypanstep = par->ypan ? 1 : 0;
-+ info->fix.ywrapstep = (par->ypan > 1) ? 1 : 0;
-+
-+ /*
-+ * If we were unable to get the state buffer size, disable
-+ * functions for saving and restoring the hardware state.
-+ */
-+ if (par->vbe_state_size == 0) {
-+ info->fbops->fb_save_state = NULL;
-+ info->fbops->fb_restore_state = NULL;
-+ }
-+
-+ /* Disable blanking if the user requested so. */
-+ if (!blank)
-+ info->fbops->fb_blank = NULL;
-+
-+ /*
-+ * Find out how much IO memory is required for the mode with
-+ * the highest resolution.
-+ */
-+ size_remap = 0;
-+ for (i = 0; i < par->vbe_modes_cnt; i++) {
-+ h = par->vbe_modes[i].bytes_per_scan_line *
-+ par->vbe_modes[i].y_res;
-+ if (h > size_remap)
-+ size_remap = h;
-+ }
-+ size_remap *= 2;
-+
-+ /*
-+ * size_vmode -- that is the amount of memory needed for the
-+ * used video mode, i.e. the minimum amount of
-+ * memory we need.
-+ */
-+ if (mode != NULL) {
-+ size_vmode = info->var.yres * mode->bytes_per_scan_line;
-+ } else {
-+ size_vmode = info->var.yres * info->var.xres *
-+ ((info->var.bits_per_pixel + 7) >> 3);
-+ }
-+
-+ /*
-+ * size_total -- all video memory we have. Used for mtrr
-+ * entries, resource allocation and bounds
-+ * checking.
-+ */
-+ size_total = par->vbe_ib.total_memory * 65536;
-+ if (vram_total)
-+ size_total = vram_total * 1024 * 1024;
-+ if (size_total < size_vmode)
-+ size_total = size_vmode;
-+
-+ /*
-+ * size_remap -- the amount of video memory we are going to
-+ * use for vesafb. With modern cards it is no
-+ * option to simply use size_total as th
-+ * wastes plenty of kernel address space.
-+ */
-+ if (vram_remap)
-+ size_remap = vram_remap * 1024 * 1024;
-+ if (size_remap < size_vmode)
-+ size_remap = size_vmode;
-+ if (size_remap > size_total)
-+ size_remap = size_total;
-+
-+ info->fix.smem_len = size_remap;
-+ info->fix.smem_start = mode->phys_base_ptr;
-+
-+ /*
-+ * We have to set yres_virtual here because when setup_var() was
-+ * called, smem_len wasn't defined yet.
-+ */
-+ info->var.yres_virtual = info->fix.smem_len /
-+ mode->bytes_per_scan_line;
-+
-+ if (par->ypan && info->var.yres_virtual > info->var.yres) {
-+ printk(KERN_INFO "uvesafb: scrolling: %s "
-+ "using protected mode interface, "
-+ "yres_virtual=%d\n",
-+ (par->ypan > 1) ? "ywrap" : "ypan",
-+ info->var.yres_virtual);
-+ } else {
-+ printk(KERN_INFO "uvesafb: scrolling: redraw\n");
-+ info->var.yres_virtual = info->var.yres;
-+ par->ypan = 0;
-+ }
-+
-+ info->flags = FBINFO_FLAG_DEFAULT |
-+ (par->ypan) ? FBINFO_HWACCEL_YPAN : 0;
-+
-+ if (!par->ypan)
-+ info->fbops->fb_pan_display = NULL;
-+}
-+
-+static void uvesafb_init_mtrr(struct fb_info *info)
-+{
-+#ifdef CONFIG_MTRR
-+ if (mtrr && !(info->fix.smem_start & (PAGE_SIZE - 1))) {
-+ int temp_size = info->fix.smem_len;
-+ unsigned int type = 0;
-+
-+ switch (mtrr) {
-+ case 1:
-+ type = MTRR_TYPE_UNCACHABLE;
-+ break;
-+ case 2:
-+ type = MTRR_TYPE_WRBACK;
-+ break;
-+ case 3:
-+ type = MTRR_TYPE_WRCOMB;
-+ break;
-+ case 4:
-+ type = MTRR_TYPE_WRTHROUGH;
-+ break;
-+ default:
-+ type = 0;
-+ break;
-+ }
-+
-+ if (type) {
-+ int rc;
-+
-+ /* Find the largest power-of-two */
-+ while (temp_size & (temp_size - 1))
-+ temp_size &= (temp_size - 1);
-+
-+ /* Try and find a power of two to add */
-+ do {
-+ rc = mtrr_add(info->fix.smem_start,
-+ temp_size, type, 1);
-+ temp_size >>= 1;
-+ } while (temp_size >= PAGE_SIZE && rc == -EINVAL);
-+ }
-+ }
-+#endif /* CONFIG_MTRR */
-+}
-+
-+
-+static ssize_t uvesafb_show_vbe_ver(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct fb_info *info = platform_get_drvdata(to_platform_device(dev));
-+ struct uvesafb_par *par = info->par;
-+
-+ return snprintf(buf, PAGE_SIZE, "%.4x\n", par->vbe_ib.vbe_version);
-+}
-+
-+static DEVICE_ATTR(vbe_version, S_IRUGO, uvesafb_show_vbe_ver, NULL);
-+
-+static ssize_t uvesafb_show_vbe_modes(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct fb_info *info = platform_get_drvdata(to_platform_device(dev));
-+ struct uvesafb_par *par = info->par;
-+ int ret = 0, i;
-+
-+ for (i = 0; i < par->vbe_modes_cnt && ret < PAGE_SIZE; i++) {
-+ ret += snprintf(buf + ret, PAGE_SIZE - ret,
-+ "%dx%d-%d, 0x%.4x\n",
-+ par->vbe_modes[i].x_res, par->vbe_modes[i].y_res,
-+ par->vbe_modes[i].depth, par->vbe_modes[i].mode_id);
-+ }
-+
-+ return ret;
-+}
-+
-+static DEVICE_ATTR(vbe_modes, S_IRUGO, uvesafb_show_vbe_modes, NULL);
-+
-+static ssize_t uvesafb_show_vendor(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct fb_info *info = platform_get_drvdata(to_platform_device(dev));
-+ struct uvesafb_par *par = info->par;
-+
-+ if (par->vbe_ib.oem_vendor_name_ptr)
-+ return snprintf(buf, PAGE_SIZE, "%s\n", (char *)
-+ (&par->vbe_ib) + par->vbe_ib.oem_vendor_name_ptr);
-+ else
-+ return 0;
-+}
-+
-+static DEVICE_ATTR(oem_vendor, S_IRUGO, uvesafb_show_vendor, NULL);
-+
-+static ssize_t uvesafb_show_product_name(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct fb_info *info = platform_get_drvdata(to_platform_device(dev));
-+ struct uvesafb_par *par = info->par;
-+
-+ if (par->vbe_ib.oem_product_name_ptr)
-+ return snprintf(buf, PAGE_SIZE, "%s\n", (char *)
-+ (&par->vbe_ib) + par->vbe_ib.oem_product_name_ptr);
-+ else
-+ return 0;
-+}
-+
-+static DEVICE_ATTR(oem_product_name, S_IRUGO, uvesafb_show_product_name, NULL);
-+
-+static ssize_t uvesafb_show_product_rev(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct fb_info *info = platform_get_drvdata(to_platform_device(dev));
-+ struct uvesafb_par *par = info->par;
-+
-+ if (par->vbe_ib.oem_product_rev_ptr)
-+ return snprintf(buf, PAGE_SIZE, "%s\n", (char *)
-+ (&par->vbe_ib) + par->vbe_ib.oem_product_rev_ptr);
-+ else
-+ return 0;
-+}
-+
-+static DEVICE_ATTR(oem_product_rev, S_IRUGO, uvesafb_show_product_rev, NULL);
-+
-+static ssize_t uvesafb_show_oem_string(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct fb_info *info = platform_get_drvdata(to_platform_device(dev));
-+ struct uvesafb_par *par = info->par;
-+
-+ if (par->vbe_ib.oem_string_ptr)
-+ return snprintf(buf, PAGE_SIZE, "%s\n",
-+ (char *)(&par->vbe_ib) + par->vbe_ib.oem_string_ptr);
-+ else
-+ return 0;
-+}
-+
-+static DEVICE_ATTR(oem_string, S_IRUGO, uvesafb_show_oem_string, NULL);
-+
-+static ssize_t uvesafb_show_nocrtc(struct device *dev,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct fb_info *info = platform_get_drvdata(to_platform_device(dev));
-+ struct uvesafb_par *par = info->par;
-+
-+ return snprintf(buf, PAGE_SIZE, "%d\n", par->nocrtc);
-+}
-+
-+static ssize_t uvesafb_store_nocrtc(struct device *dev,
-+ struct device_attribute *attr, const char *buf, size_t count)
-+{
-+ struct fb_info *info = platform_get_drvdata(to_platform_device(dev));
-+ struct uvesafb_par *par = info->par;
-+
-+ if (count > 0) {
-+ if (buf[0] == '0')
-+ par->nocrtc = 0;
-+ else
-+ par->nocrtc = 1;
-+ }
-+ return count;
-+}
-+
-+static DEVICE_ATTR(nocrtc, S_IRUGO | S_IWUSR, uvesafb_show_nocrtc,
-+ uvesafb_store_nocrtc);
-+
-+static struct attribute *uvesafb_dev_attrs[] = {
-+ &dev_attr_vbe_version.attr,
-+ &dev_attr_vbe_modes.attr,
-+ &dev_attr_oem_vendor.attr,
-+ &dev_attr_oem_product_name.attr,
-+ &dev_attr_oem_product_rev.attr,
-+ &dev_attr_oem_string.attr,
-+ &dev_attr_nocrtc.attr,
-+ NULL,
-+};
-+
-+static struct attribute_group uvesafb_dev_attgrp = {
-+ .name = NULL,
-+ .attrs = uvesafb_dev_attrs,
-+};
-+
-+static int __devinit uvesafb_probe(struct platform_device *dev)
-+{
-+ struct fb_info *info;
-+ struct vbe_mode_ib *mode = NULL;
-+ struct uvesafb_par *par;
-+ int err = 0, i;
-+
-+ info = framebuffer_alloc(sizeof(*par) + sizeof(u32) * 256, &dev->dev);
-+ if (!info)
-+ return -ENOMEM;
-+
-+ par = info->par;
-+
-+ err = uvesafb_vbe_init(info);
-+ if (err) {
-+ printk(KERN_ERR "uvesafb: vbe_init() failed with %d\n", err);
-+ goto out;
-+ }
-+
-+ info->fbops = &uvesafb_ops;
-+
-+ i = uvesafb_vbe_init_mode(info);
-+ if (i < 0) {
-+ err = -EINVAL;
-+ goto out;
-+ } else {
-+ mode = &par->vbe_modes[i];
-+ }
-+
-+ if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
-+ err = -ENXIO;
-+ goto out;
-+ }
-+
-+ uvesafb_init_info(info, mode);
-+
-+ if (!request_mem_region(info->fix.smem_start, info->fix.smem_len,
-+ "uvesafb")) {
-+ printk(KERN_ERR "uvesafb: cannot reserve video memory at "
-+ "0x%lx\n", info->fix.smem_start);
-+ err = -EIO;
-+ goto out_mode;
-+ }
-+
-+ info->screen_base = ioremap(info->fix.smem_start, info->fix.smem_len);
-+
-+ if (!info->screen_base) {
-+ printk(KERN_ERR
-+ "uvesafb: abort, cannot ioremap 0x%x bytes of video "
-+ "memory at 0x%lx\n",
-+ info->fix.smem_len, info->fix.smem_start);
-+ err = -EIO;
-+ goto out_mem;
-+ }
-+
-+ if (!request_region(0x3c0, 32, "uvesafb")) {
-+ printk(KERN_ERR "uvesafb: request region 0x3c0-0x3e0 failed\n");
-+ err = -EIO;
-+ goto out_unmap;
-+ }
-+
-+ uvesafb_init_mtrr(info);
-+ platform_set_drvdata(dev, info);
-+
-+ if (register_framebuffer(info) < 0) {
-+ printk(KERN_ERR
-+ "uvesafb: failed to register framebuffer device\n");
-+ err = -EINVAL;
-+ goto out_reg;
-+ }
-+
-+ printk(KERN_INFO "uvesafb: framebuffer at 0x%lx, mapped to 0x%p, "
-+ "using %dk, total %dk\n", info->fix.smem_start,
-+ info->screen_base, info->fix.smem_len/1024,
-+ par->vbe_ib.total_memory * 64);
-+ printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node,
-+ info->fix.id);
-+
-+ err = sysfs_create_group(&dev->dev.kobj, &uvesafb_dev_attgrp);
-+ if (err != 0)
-+ printk(KERN_WARNING "fb%d: failed to register attributes\n",
-+ info->node);
-+
-+ return 0;
-+
-+out_reg:
-+ release_region(0x3c0, 32);
-+out_unmap:
-+ iounmap(info->screen_base);
-+out_mem:
-+ release_mem_region(info->fix.smem_start, info->fix.smem_len);
-+out_mode:
-+ if (!list_empty(&info->modelist))
-+ fb_destroy_modelist(&info->modelist);
-+ fb_destroy_modedb(info->monspecs.modedb);
-+ fb_dealloc_cmap(&info->cmap);
-+out:
-+ if (par->vbe_modes)
-+ kfree(par->vbe_modes);
-+
-+ framebuffer_release(info);
-+ return err;
-+}
-+
-+static int uvesafb_remove(struct platform_device *dev)
-+{
-+ struct fb_info *info = platform_get_drvdata(dev);
-+
-+ if (info) {
-+ struct uvesafb_par *par = info->par;
-+
-+ sysfs_remove_group(&dev->dev.kobj, &uvesafb_dev_attgrp);
-+ unregister_framebuffer(info);
-+ release_region(0x3c0, 32);
-+ iounmap(info->screen_base);
-+ release_mem_region(info->fix.smem_start, info->fix.smem_len);
-+ fb_destroy_modedb(info->monspecs.modedb);
-+ fb_dealloc_cmap(&info->cmap);
-+
-+ if (par) {
-+ if (par->vbe_modes)
-+ kfree(par->vbe_modes);
-+ if (par->vbe_state_orig)
-+ kfree(par->vbe_state_orig);
-+ if (par->vbe_state_saved)
-+ kfree(par->vbe_state_saved);
-+ }
-+
-+ framebuffer_release(info);
-+ }
-+ return 0;
-+}
-+
-+static struct platform_driver uvesafb_driver = {
-+ .probe = uvesafb_probe,
-+ .remove = uvesafb_remove,
-+ .driver = {
-+ .name = "uvesafb",
-+ },
-+};
-+
-+static struct platform_device *uvesafb_device;
-+
-+#ifndef MODULE
-+static int __devinit uvesafb_setup(char *options)
-+{
-+ char *this_opt;
-+
-+ if (!options || !*options)
-+ return 0;
-+
-+ while ((this_opt = strsep(&options, ",")) != NULL) {
-+ if (!*this_opt) continue;
-+
-+ if (!strcmp(this_opt, "redraw"))
-+ ypan = 0;
-+ else if (!strcmp(this_opt, "ypan"))
-+ ypan = 1;
-+ else if (!strcmp(this_opt, "ywrap"))
-+ ypan = 2;
-+ else if (!strcmp(this_opt, "vgapal"))
-+ pmi_setpal = 0;
-+ else if (!strcmp(this_opt, "pmipal"))
-+ pmi_setpal = 1;
-+ else if (!strncmp(this_opt, "mtrr:", 5))
-+ mtrr = simple_strtoul(this_opt+5, NULL, 0);
-+ else if (!strcmp(this_opt, "nomtrr"))
-+ mtrr = 0;
-+ else if (!strcmp(this_opt, "nocrtc"))
-+ nocrtc = 1;
-+ else if (!strcmp(this_opt, "noedid"))
-+ noedid = 1;
-+ else if (!strcmp(this_opt, "noblank"))
-+ blank = 0;
-+ else if (!strncmp(this_opt, "vtotal:", 7))
-+ vram_total = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (!strncmp(this_opt, "vremap:", 7))
-+ vram_remap = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (!strncmp(this_opt, "maxhf:", 6))
-+ maxhf = simple_strtoul(this_opt + 6, NULL, 0);
-+ else if (!strncmp(this_opt, "maxvf:", 6))
-+ maxvf = simple_strtoul(this_opt + 6, NULL, 0);
-+ else if (!strncmp(this_opt, "maxclk:", 7))
-+ maxclk = simple_strtoul(this_opt + 7, NULL, 0);
-+ else if (!strncmp(this_opt, "vbemode:", 8))
-+ vbemode = simple_strtoul(this_opt + 8, NULL, 0);
-+ else if (this_opt[0] >= '0' && this_opt[0] <= '9') {
-+ mode_option = this_opt;
-+ } else {
-+ printk(KERN_WARNING
-+ "uvesafb: unrecognized option %s\n", this_opt);
-+ }
-+ }
-+
-+ return 0;
-+}
-+#endif /* !MODULE */
-+
-+static ssize_t show_v86d(struct device_driver *dev, char *buf)
-+{
-+ return snprintf(buf, PAGE_SIZE, "%s\n", v86d_path);
-+}
-+
-+static ssize_t store_v86d(struct device_driver *dev, const char *buf,
-+ size_t count)
-+{
-+ strncpy(v86d_path, buf, PATH_MAX);
-+ return count;
-+}
-+
-+static DRIVER_ATTR(v86d, S_IRUGO | S_IWUSR, show_v86d, store_v86d);
-+
-+static int __devinit uvesafb_init(void)
-+{
-+ int err;
-+
-+#ifndef MODULE
-+ char *option = NULL;
-+
-+ if (fb_get_options("uvesafb", &option))
-+ return -ENODEV;
-+ uvesafb_setup(option);
-+#endif
-+ err = cn_add_callback(&uvesafb_cn_id, "uvesafb", uvesafb_cn_callback);
-+ if (err)
-+ return err;
-+
-+ err = platform_driver_register(&uvesafb_driver);
-+
-+ if (!err) {
-+ uvesafb_device = platform_device_alloc("uvesafb", 0);
-+ if (uvesafb_device)
-+ err = platform_device_add(uvesafb_device);
-+ else
-+ err = -ENOMEM;
-+
-+ if (err) {
-+ platform_device_put(uvesafb_device);
-+ platform_driver_unregister(&uvesafb_driver);
-+ cn_del_callback(&uvesafb_cn_id);
-+ return err;
-+ }
-+
-+ err = driver_create_file(&uvesafb_driver.driver,
-+ &driver_attr_v86d);
-+ if (err) {
-+ printk(KERN_WARNING "uvesafb: failed to register "
-+ "attributes\n");
-+ err = 0;
-+ }
-+ }
-+ return err;
-+}
-+
-+module_init(uvesafb_init);
-+
-+static void __devexit uvesafb_exit(void)
-+{
-+ struct uvesafb_ktask *task;
-+
-+ if (v86d_started) {
-+ task = uvesafb_prep();
-+ if (task) {
-+ task->t.flags = TF_EXIT;
-+ uvesafb_exec(task);
-+ uvesafb_free(task);
-+ }
-+ }
-+
-+ cn_del_callback(&uvesafb_cn_id);
-+ driver_remove_file(&uvesafb_driver.driver, &driver_attr_v86d);
-+ platform_device_unregister(uvesafb_device);
-+ platform_driver_unregister(&uvesafb_driver);
-+}
-+
-+module_exit(uvesafb_exit);
-+
-+static inline int param_get_scroll(char *buffer, struct kernel_param *kp)
-+{
-+ return 0;
-+}
-+
-+static inline int param_set_scroll(const char *val, struct kernel_param *kp)
-+{
-+ ypan = 0;
-+
-+ if (!strcmp(val, "redraw"))
-+ ypan = 0;
-+ else if (!strcmp(val, "ypan"))
-+ ypan = 1;
-+ else if (!strcmp(val, "ywrap"))
-+ ypan = 2;
-+
-+ return 0;
-+}
-+
-+#define param_check_scroll(name, p) __param_check(name, p, void);
-+
-+module_param_named(scroll, ypan, scroll, 0);
-+MODULE_PARM_DESC(scroll,
-+ "Scrolling mode, set to 'redraw', ''ypan' or 'ywrap'");
-+module_param_named(vgapal, pmi_setpal, invbool, 0);
-+MODULE_PARM_DESC(vgapal, "Set palette using VGA registers");
-+module_param_named(pmipal, pmi_setpal, bool, 0);
-+MODULE_PARM_DESC(pmipal, "Set palette using PMI calls");
-+module_param(mtrr, uint, 0);
-+MODULE_PARM_DESC(mtrr,
-+ "Memory Type Range Registers setting. Use 0 to disable.");
-+module_param(blank, bool, 0);
-+MODULE_PARM_DESC(blank, "Enable hardware blanking");
-+module_param(nocrtc, bool, 0);
-+MODULE_PARM_DESC(nocrtc, "Ignore CRTC timings when setting modes");
-+module_param(noedid, bool, 0);
-+MODULE_PARM_DESC(noedid,
-+ "Ignore EDID-provided monitor limits when setting modes");
-+module_param(vram_remap, uint, 0);
-+MODULE_PARM_DESC(vram_remap, "Set amount of video memory to be used [MiB]");
-+module_param(vram_total, uint, 0);
-+MODULE_PARM_DESC(vram_total, "Set total amount of video memoery [MiB]");
-+module_param(maxclk, ushort, 0);
-+MODULE_PARM_DESC(maxclk, "Maximum pixelclock [MHz], overrides EDID data");
-+module_param(maxhf, ushort, 0);
-+MODULE_PARM_DESC(maxhf,
-+ "Maximum horizontal frequency [kHz], overrides EDID data");
-+module_param(maxvf, ushort, 0);
-+MODULE_PARM_DESC(maxvf,
-+ "Maximum vertical frequency [Hz], overrides EDID data");
-+module_param_named(mode, mode_option, charp, 0);
-+MODULE_PARM_DESC(mode,
-+ "Specify initial video mode as \"<xres>x<yres>[-<bpp>][@<refresh>]\"");
-+module_param(vbemode, ushort, 0);
-+MODULE_PARM_DESC(vbemode,
-+ "VBE mode number to set, overrides the 'mode' option");
-+module_param_string(v86d, v86d_path, PATH_MAX, 0660);
-+MODULE_PARM_DESC(v86d, "Path to the v86d userspace helper.");
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Michal Januszewski <spock@gentoo.org>");
-+MODULE_DESCRIPTION("Framebuffer driver for VBE2.0+ compliant graphics boards");
-+
-Index: linux-2.6.22/include/linux/connector.h
-===================================================================
---- linux-2.6.22.orig/include/linux/connector.h 2007-08-28 21:54:13.000000000 +0100
-+++ linux-2.6.22/include/linux/connector.h 2007-08-28 21:56:34.000000000 +0100
-@@ -36,14 +36,15 @@
- #define CN_VAL_CIFS 0x1
- #define CN_W1_IDX 0x3 /* w1 communication */
- #define CN_W1_VAL 0x1
-+#define CN_IDX_V86D 0x4
-+#define CN_VAL_V86D_UVESAFB 0x1
-
--
--#define CN_NETLINK_USERS 4
-+#define CN_NETLINK_USERS 5
-
- /*
- * Maximum connector's message size.
- */
--#define CONNECTOR_MAX_MSG_SIZE 1024
-+#define CONNECTOR_MAX_MSG_SIZE 16384
-
- /*
- * idx and val are unique identifiers which
-Index: linux-2.6.22/include/video/Kbuild
-===================================================================
---- linux-2.6.22.orig/include/video/Kbuild 2007-08-28 21:54:13.000000000 +0100
-+++ linux-2.6.22/include/video/Kbuild 2007-08-28 21:56:34.000000000 +0100
-@@ -1 +1 @@
--unifdef-y += sisfb.h
-+unifdef-y += sisfb.h uvesafb.h
-Index: linux-2.6.22/include/video/uvesafb.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/video/uvesafb.h 2007-08-28 21:56:34.000000000 +0100
-@@ -0,0 +1,193 @@
-+#ifndef _UVESAFB_H
-+#define _UVESAFB_H
-+
-+struct v86_regs {
-+ __u32 ebx;
-+ __u32 ecx;
-+ __u32 edx;
-+ __u32 esi;
-+ __u32 edi;
-+ __u32 ebp;
-+ __u32 eax;
-+ __u32 eip;
-+ __u32 eflags;
-+ __u32 esp;
-+ __u16 cs;
-+ __u16 ss;
-+ __u16 es;
-+ __u16 ds;
-+ __u16 fs;
-+ __u16 gs;
-+};
-+
-+/* Task flags */
-+#define TF_VBEIB 0x01
-+#define TF_BUF_ESDI 0x02
-+#define TF_BUF_ESBX 0x04
-+#define TF_BUF_RET 0x08
-+#define TF_EXIT 0x10
-+
-+struct uvesafb_task {
-+ __u8 flags;
-+ int buf_len;
-+ struct v86_regs regs;
-+};
-+
-+/* Constants for the capabilities field
-+ * in vbe_ib */
-+#define VBE_CAP_CAN_SWITCH_DAC 0x01
-+#define VBE_CAP_VGACOMPAT 0x02
-+
-+/* The VBE Info Block */
-+struct vbe_ib {
-+ char vbe_signature[4];
-+ __u16 vbe_version;
-+ __u32 oem_string_ptr;
-+ __u32 capabilities;
-+ __u32 mode_list_ptr;
-+ __u16 total_memory;
-+ __u16 oem_software_rev;
-+ __u32 oem_vendor_name_ptr;
-+ __u32 oem_product_name_ptr;
-+ __u32 oem_product_rev_ptr;
-+ __u8 reserved[222];
-+ char oem_data[256];
-+ char misc_data[512];
-+} __attribute__ ((packed));
-+
-+#ifdef __KERNEL__
-+
-+/* VBE CRTC Info Block */
-+struct vbe_crtc_ib {
-+ u16 horiz_total;
-+ u16 horiz_start;
-+ u16 horiz_end;
-+ u16 vert_total;
-+ u16 vert_start;
-+ u16 vert_end;
-+ u8 flags;
-+ u32 pixel_clock;
-+ u16 refresh_rate;
-+ u8 reserved[40];
-+} __attribute__ ((packed));
-+
-+#define VBE_MODE_VGACOMPAT 0x20
-+#define VBE_MODE_COLOR 0x08
-+#define VBE_MODE_SUPPORTEDHW 0x01
-+#define VBE_MODE_GRAPHICS 0x10
-+#define VBE_MODE_LFB 0x80
-+
-+#define VBE_MODE_MASK (VBE_MODE_COLOR | VBE_MODE_SUPPORTEDHW | \
-+ VBE_MODE_GRAPHICS | VBE_MODE_LFB)
-+
-+/* VBE Mode Info Block */
-+struct vbe_mode_ib {
-+ /* for all VBE revisions */
-+ u16 mode_attr;
-+ u8 winA_attr;
-+ u8 winB_attr;
-+ u16 win_granularity;
-+ u16 win_size;
-+ u16 winA_seg;
-+ u16 winB_seg;
-+ u32 win_func_ptr;
-+ u16 bytes_per_scan_line;
-+
-+ /* for VBE 1.2+ */
-+ u16 x_res;
-+ u16 y_res;
-+ u8 x_char_size;
-+ u8 y_char_size;
-+ u8 planes;
-+ u8 bits_per_pixel;
-+ u8 banks;
-+ u8 memory_model;
-+ u8 bank_size;
-+ u8 image_pages;
-+ u8 reserved1;
-+
-+ /* Direct color fields for direct/6 and YUV/7 memory models. */
-+ /* Offsets are bit positions of lsb in the mask. */
-+ u8 red_len;
-+ u8 red_off;
-+ u8 green_len;
-+ u8 green_off;
-+ u8 blue_len;
-+ u8 blue_off;
-+ u8 rsvd_len;
-+ u8 rsvd_off;
-+ u8 direct_color_info; /* direct color mode attributes */
-+
-+ /* for VBE 2.0+ */
-+ u32 phys_base_ptr;
-+ u8 reserved2[6];
-+
-+ /* for VBE 3.0+ */
-+ u16 lin_bytes_per_scan_line;
-+ u8 bnk_image_pages;
-+ u8 lin_image_pages;
-+ u8 lin_red_len;
-+ u8 lin_red_off;
-+ u8 lin_green_len;
-+ u8 lin_green_off;
-+ u8 lin_blue_len;
-+ u8 lin_blue_off;
-+ u8 lin_rsvd_len;
-+ u8 lin_rsvd_off;
-+ u32 max_pixel_clock;
-+ u16 mode_id;
-+ u8 depth;
-+} __attribute__ ((packed));
-+
-+#define UVESAFB_DEFAULT_MODE "640x480-16"
-+
-+/* How long to wait for a reply from userspace [ms] */
-+#define UVESAFB_TIMEOUT 5000
-+
-+/* Max number of concurrent tasks */
-+#define UVESAFB_TASKS_MAX 16
-+
-+#define dac_reg (0x3c8)
-+#define dac_val (0x3c9)
-+
-+struct uvesafb_pal_entry {
-+ u_char blue, green, red, pad;
-+} __attribute__ ((packed));
-+
-+struct uvesafb_ktask {
-+ struct uvesafb_task t;
-+ void *buf;
-+ struct completion *done;
-+ u32 ack;
-+};
-+
-+static int uvesafb_exec(struct uvesafb_ktask *tsk);
-+
-+#define UVESAFB_EXACT_RES 1
-+#define UVESAFB_EXACT_DEPTH 2
-+
-+struct uvesafb_par {
-+ struct vbe_ib vbe_ib; /* VBE Info Block */
-+ struct vbe_mode_ib *vbe_modes; /* list of supported VBE modes */
-+ int vbe_modes_cnt;
-+
-+ u8 nocrtc;
-+ u8 ypan; /* 0 - nothing, 1 - ypan, 2 - ywrap */
-+ u8 pmi_setpal; /* PMI for palette changes */
-+ u16 *pmi_base; /* protected mode interface location */
-+ void *pmi_start;
-+ void *pmi_pal;
-+ u8 *vbe_state_orig; /*
-+ * original hardware state, before the
-+ * driver was loaded
-+ */
-+ u8 *vbe_state_saved; /* state saved by fb_save_state */
-+ int vbe_state_size;
-+ atomic_t ref_count;
-+
-+ int mode_idx;
-+ struct vbe_crtc_ib crtc;
-+};
-+
-+#endif /* __KERNEL__ */
-+#endif /* _UVESAFB_H */
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/vt_ioctl_race.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/vt_ioctl_race.patch
deleted file mode 100644
index 5a51d1c3f5..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/vt_ioctl_race.patch
+++ /dev/null
@@ -1,46 +0,0 @@
----
- drivers/char/vt_ioctl.c | 8 +++++---
- 1 file changed, 5 insertions(+), 3 deletions(-)
-
-Index: linux-2.6.22/drivers/char/vt_ioctl.c
-===================================================================
---- linux-2.6.22.orig/drivers/char/vt_ioctl.c 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/char/vt_ioctl.c 2007-09-27 11:58:42.000000000 +0200
-@@ -770,6 +770,7 @@
- /*
- * Switching-from response
- */
-+ acquire_console_sem();
- if (vc->vt_newvt >= 0) {
- if (arg == 0)
- /*
-@@ -784,7 +785,6 @@
- * complete the switch.
- */
- int newvt;
-- acquire_console_sem();
- newvt = vc->vt_newvt;
- vc->vt_newvt = -1;
- i = vc_allocate(newvt);
-@@ -798,7 +798,6 @@
- * other console switches..
- */
- complete_change_console(vc_cons[newvt].d);
-- release_console_sem();
- }
- }
-
-@@ -810,9 +809,12 @@
- /*
- * If it's just an ACK, ignore it
- */
-- if (arg != VT_ACKACQ)
-+ if (arg != VT_ACKACQ) {
-+ release_console_sem();
- return -EINVAL;
-+ }
- }
-+ release_console_sem();
-
- return 0;
-
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/w100fb-unused-var.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/w100fb-unused-var.patch
deleted file mode 100644
index 8cbbb6bd01..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/w100fb-unused-var.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-From: Marcin Juszkiewicz <openembedded@haerwu.biz>
-
-drivers/video/w100fb.c: In function ‘w100fb_imageblit’:
-drivers/video/w100fb.c:507: warning: unused variable ‘par’
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@haerwu.biz>
-
---- linux-2.6.23/drivers/video/w100fb.c 2007-10-11 16:52:30.000000000 +0200
-+++ linux-2.6.23/drivers/video/w100fb.c 2007-10-15 12:56:01.000000000 +0200
-@@ -504,7 +504,6 @@ static void w100_hostdata(u32 width, u32
- static void w100fb_imageblit(struct fb_info *info,
- const struct fb_image *image)
- {
-- struct w100fb_par *par = info->par;
- union dp_gui_master_cntl_u gmc;
- u32 fgcolor, bgcolor;
-
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/wm97xx-lcdnoise-r0.patch b/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/wm97xx-lcdnoise-r0.patch
deleted file mode 100644
index 191de3af22..0000000000
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/wm97xx-lcdnoise-r0.patch
+++ /dev/null
@@ -1,208 +0,0 @@
-Index: linux-tosa/drivers/input/touchscreen/wm9712.c
-===================================================================
---- linux-tosa.orig/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/drivers/input/touchscreen/wm9712.c 2006-08-29 16:52:50.923275896 +0100
-@@ -1,7 +1,7 @@
- /*
- * wm9712.c -- Codec driver for Wolfson WM9712 AC97 Codecs.
- *
-- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
- * Author: Liam Girdwood
- * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
- * Parts Copyright : Ian Molton <spyro@f2s.com>
-@@ -13,6 +13,12 @@
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
-+ * Revision history
-+ * 4th Jul 2005 Initial version.
-+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
-+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
-+ * touchscreen interference.
-+ *
- */
-
- #include <linux/module.h>
-@@ -28,6 +34,10 @@
- #define WM9705_VERSION "0.60"
- #define DEFAULT_PRESSURE 0xb0c0
-
-+#define CCNT(a) asm volatile ("mrc p14, 0, %0, C1, C1, 0" : "=r"(a))
-+#define CCNT_ON() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+#define CCNT_OFF() asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(1))
-+
- /*
- * Debug
- */
-@@ -243,6 +253,36 @@
- return wm->dig[2] & WM9712_PDEN;
- }
-
-+
-+#ifdef CONFIG_MACH_TOSA
-+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
-+ * before sampling the Y axis of the touchscreen */
-+static inline void wm9712_lcd_sync_on(struct wm97xx* wm, int adcsel) {
-+ unsigned long timer1 = 0, timer2 = 0, wait_time = 0;
-+ if (adcsel == WM97XX_ADCSEL_Y) {
-+ wait_time = wm97xx_calc_lcd_waittime(wm);
-+
-+ CCNT_ON();
-+
-+ if (wait_time) {
-+ /* wait for LCD rising edge */
-+ wm_machinfo->wait_hsync();
-+ /* get clock */
-+ CCNT(timer1);
-+ CCNT(timer2);
-+
-+ while ((timer2 - timer1) < wait_time) {
-+ CCNT(timer2);
-+ }
-+ }
-+ }
-+}
-+
-+static inline void wm9712_lcd_sync_off(void) {
-+ CCNT_OFF();
-+}
-+#endif
-+
- /*
- * Read a sample from the WM9712 adc in polling mode.
- */
-@@ -260,6 +300,9 @@
- /* set up digitiser */
- if (adcsel & 0x8000)
- adcsel = ((adcsel & 0x7fff) + 3) << 12;
-+ #ifdef CONFIG_MACH_TOSA
-+ wm9712_lcd_sync_on(wm, adcsel);
-+ #endif
- wm97xx_reg_write(wm, AC97_WM97XX_DIGITISER1, adcsel | WM97XX_POLL | WM97XX_DELAY(delay));
-
- /* wait 3 AC97 time slots + delay for conversion */
-@@ -282,6 +325,10 @@
-
- *sample = wm97xx_reg_read(wm, AC97_WM97XX_DIGITISER_RD);
-
-+ #ifdef CONFIG_MACH_TOSA
-+ wm9712_lcd_sync_off();
-+ #endif
-+
- /* check we have correct sample */
- if ((*sample & WM97XX_ADCSEL_MASK) != adcsel) {
- dbg ("adc wrong sample, read %x got %x", adcsel,
-@@ -303,11 +350,12 @@
- static int wm9712_poll_touch(struct wm97xx* wm, struct wm97xx_data *data)
- {
- int rc;
--
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_X, &data->x)) != RC_VALID)
- return rc;
-+
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_Y, &data->y)) != RC_VALID)
- return rc;
-+
- if (pil && !five_wire) {
- if ((rc = wm9712_poll_sample(wm, WM97XX_ADCSEL_PRES, &data->p)) != RC_VALID)
- return rc;
-Index: linux-tosa/drivers/input/touchscreen/wm97xx-core.c
-===================================================================
---- linux-tosa.orig/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/drivers/input/touchscreen/wm97xx-core.c 2006-08-29 16:52:50.924275744 +0100
-@@ -2,7 +2,7 @@
- * wm97xx-core.c -- Touch screen driver core for Wolfson WM9705, WM9712
- * and WM9713 AC97 Codecs.
- *
-- * Copyright 2003, 2004, 2005 Wolfson Microelectronics PLC.
-+ * Copyright 2003, 2004, 2005, 2006 Wolfson Microelectronics PLC.
- * Author: Liam Girdwood
- * liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
- * Parts Copyright : Ian Molton <spyro@f2s.com>
-@@ -67,6 +67,9 @@
- * GPIOs) and 2.6 power management.
- * 29th Nov 2004 Added WM9713 support.
- * 4th Jul 2005 Moved codec specific code out to seperate files.
-+ * 29th Aug 2006 Mike Arthur <mike@mikearthur.co.uk>
-+ * Added fixes for Sharp SL-6000 (Tosa) LCD noise causing
-+ * touchscreen interference.
- */
-
- #include <linux/module.h>
-@@ -94,6 +97,7 @@
- static DECLARE_MUTEX(gpio_sem);
- static LIST_HEAD(wm97xx_misc_list);
- static struct wm97xx* wm_codec = NULL;
-+struct wm97xx_machinfo *wm_machinfo;
-
- /*
- * WM97xx - enable/disable AUX ADC sysfs
-@@ -832,6 +836,23 @@
- mdev->remove(wm_codec);
- }
-
-+#ifdef CONFIG_MACH_TOSA
-+/* On the Sharp SL-6000 (Tosa), due to a noisy LCD, we need to perform a wait
-+ * before sampling the Y axis of the touchscreen */
-+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm) {
-+ unsigned long hsync_time = wm_machinfo->get_hsync_time();
-+ return hsync_time;
-+}
-+
-+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo) {
-+ wm_machinfo = machinfo;
-+}
-+
-+void wm97xx_unset_machinfo() {
-+ wm_machinfo = NULL;
-+}
-+#endif
-+
- static struct device_driver wm97xx_driver = {
- .name = "ac97",
- .bus = &ac97_bus_type,
-@@ -861,6 +882,9 @@
- EXPORT_SYMBOL_GPL(wm97xx_reg_write);
- EXPORT_SYMBOL_GPL(wm97xx_register_misc_dev);
- EXPORT_SYMBOL_GPL(wm97xx_unregister_misc_dev);
-+EXPORT_SYMBOL_GPL(wm97xx_calc_lcd_waittime);
-+EXPORT_SYMBOL_GPL(wm97xx_set_machinfo);
-+EXPORT_SYMBOL_GPL(wm97xx_unset_machinfo);
-
- module_init(wm97xx_init);
- module_exit(wm97xx_exit);
-Index: linux-tosa/include/linux/wm97xx.h
-===================================================================
---- linux-tosa.orig/include/linux/wm97xx.h 2006-08-29 16:52:36.008543280 +0100
-+++ linux-tosa/include/linux/wm97xx.h 2006-08-29 16:52:50.924275744 +0100
-@@ -207,6 +207,7 @@
-
- struct wm97xx;
- extern struct wm97xx_codec_drv wm97xx_codec;
-+extern struct wm97xx_machinfo *wm_machinfo;
-
- /*
- * Codec driver interface - allows mapping to WM9705/12/13 and newer codecs
-@@ -253,6 +254,11 @@
- struct list_head list;
- };
-
-+struct wm97xx_machinfo {
-+ unsigned long (*get_hsync_time)(void);
-+ void (*wait_hsync)(void);
-+};
-+
- int wm97xx_register_misc_dev(struct wm97xx_misc_dev* mdev);
- void wm97xx_unregister_misc_dev(struct wm97xx_misc_dev* mdev);
-
-@@ -281,4 +287,9 @@
- int wm97xx_acc_startup(struct wm97xx* wm);
- void wm97xx_acc_shutdown(struct wm97xx* wm);
-
-+
-+unsigned long wm97xx_calc_lcd_waittime(struct wm97xx *wm);
-+void wm97xx_set_machinfo(struct wm97xx_machinfo *machinfo);
-+void wm97xx_unset_machinfo(void);
-+
- #endif
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-akita b/packages/linux/linux-rp-2.6.23/defconfig-akita
index 7d9adaf0e3..9587fb2a23 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-akita
+++ b/packages/linux/linux-rp-2.6.23/defconfig-akita
@@ -40,7 +40,7 @@ CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
# CONFIG_USER_NS is not set
# CONFIG_AUDIT is not set
@@ -244,6 +244,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable quiet"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
#
# CPU Frequency scaling
@@ -287,7 +288,7 @@ CONFIG_NET=y
#
# Networking options
#
-CONFIG_PACKET=y
+CONFIG_PACKET=m
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
@@ -346,14 +347,59 @@ CONFIG_NETFILTER=y
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_U32 is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
#
# IP: Netfilter Configuration
#
CONFIG_IP_NF_QUEUE=m
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
#
# IPv6: Netfilter Configuration (EXPERIMENTAL)
@@ -1114,7 +1160,7 @@ CONFIG_SND_SOC_WM8750=m
# CONFIG_SOUND_PRIME is not set
CONFIG_AC97_BUS=m
CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
+CONFIG_HID=m
# CONFIG_HID_DEBUG is not set
#
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-bootcdx86 b/packages/linux/linux-rp-2.6.23/defconfig-bootcdx86
index 833f72ac9e..e8852205e5 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-bootcdx86
+++ b/packages/linux/linux-rp-2.6.23/defconfig-bootcdx86
@@ -217,7 +217,8 @@ CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
CONFIG_PHYSICAL_START=0x100000
# CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x100000
@@ -313,7 +314,7 @@ CONFIG_NET=y
# Networking options
#
# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
+CONFIG_PACKET=m
# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
@@ -348,7 +349,69 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_U32 is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
#
# DCCP Configuration (EXPERIMENTAL)
@@ -1367,7 +1430,7 @@ CONFIG_USB_WACOM=y
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
+CONFIG_EXT3_FS=m
# CONFIG_EXT4DEV_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
@@ -1435,7 +1498,7 @@ CONFIG_RAMFS=y
#
# Network File Systems
#
-# CONFIG_NFS_FS is not set
+CONFIG_NFS_FS=y
# CONFIG_NFSD is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-c7x0 b/packages/linux/linux-rp-2.6.23/defconfig-c7x0
index bd11500398..4f6b8d202d 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-c7x0
+++ b/packages/linux/linux-rp-2.6.23/defconfig-c7x0
@@ -40,7 +40,7 @@ CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
# CONFIG_USER_NS is not set
# CONFIG_AUDIT is not set
@@ -246,6 +246,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable quiet"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
CONFIG_CPU_FREQ_PXA25x=y
#
@@ -301,7 +302,7 @@ CONFIG_NET=y
#
# Networking options
#
-CONFIG_PACKET=y
+CONFIG_PACKET=m
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
@@ -360,14 +361,59 @@ CONFIG_NETFILTER=y
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_U32 is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
#
# IP: Netfilter Configuration
#
CONFIG_IP_NF_QUEUE=m
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
#
# IPv6: Netfilter Configuration (EXPERIMENTAL)
@@ -1121,7 +1167,7 @@ CONFIG_SND_SOC_WM8731=m
# CONFIG_SOUND_PRIME is not set
CONFIG_AC97_BUS=m
CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
+CONFIG_HID=m
# CONFIG_HID_DEBUG is not set
#
@@ -1395,7 +1441,7 @@ CONFIG_RTC_DRV_SA1100=y
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
+CONFIG_EXT3_FS=m
# CONFIG_EXT4DEV_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-collie b/packages/linux/linux-rp-2.6.23/defconfig-collie
index 49d9596b92..fd10d3df85 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-collie
+++ b/packages/linux/linux-rp-2.6.23/defconfig-collie
@@ -37,7 +37,7 @@ CONFIG_SYSVIPC=y
# CONFIG_IPC_NS is not set
# CONFIG_POSIX_MQUEUE is not set
CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
# CONFIG_UTS_NS is not set
# CONFIG_AUDIT is not set
@@ -222,6 +222,7 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
#
# CPU Frequency scaling
@@ -325,12 +326,60 @@ CONFIG_NETFILTER=y
#
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NETFILTER_XTABLES is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_U32 is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
#
# IP: Netfilter Configuration
#
CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
#
# IPv6: Netfilter Configuration (EXPERIMENTAL)
@@ -1459,7 +1508,7 @@ CONFIG_RTC_DRV_SA1100=y
CONFIG_EXT2_FS=m
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
+CONFIG_EXT3_FS=m
# CONFIG_EXT4DEV_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-htcuniversal b/packages/linux/linux-rp-2.6.23/defconfig-htcuniversal
index 2b02621499..ead49c2c8a 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-htcuniversal
+++ b/packages/linux/linux-rp-2.6.23/defconfig-htcuniversal
@@ -241,6 +241,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
#
# CPU Frequency scaling
@@ -293,7 +294,7 @@ CONFIG_NET=y
#
# Networking options
#
-CONFIG_PACKET=y
+CONFIG_PACKET=m
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
@@ -337,28 +338,59 @@ CONFIG_NETFILTER=y
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_U32 is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
#
# IP: Netfilter Configuration
#
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
#
# QoS and/or fair queueing
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-hx2000 b/packages/linux/linux-rp-2.6.23/defconfig-hx2000
index ee05db4e5a..09ce9e5740 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-hx2000
+++ b/packages/linux/linux-rp-2.6.23/defconfig-hx2000
@@ -210,7 +210,8 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
#
# CPU Frequency scaling
@@ -254,7 +255,7 @@ CONFIG_NET=y
# Networking options
#
# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
+CONFIG_PACKET=m
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
@@ -288,7 +289,69 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_U32 is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
#
# DCCP Configuration (EXPERIMENTAL)
@@ -844,7 +907,7 @@ CONFIG_BACKLIGHT_HX2750=y
#
# HID Devices
#
-CONFIG_HID=y
+CONFIG_HID=m
#
# USB support
@@ -907,7 +970,7 @@ CONFIG_RTC_DRV_SA1100=y
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
+CONFIG_EXT3_FS=m
# CONFIG_EXT4DEV_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
@@ -986,7 +1049,7 @@ CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
#
# Network File Systems
#
-# CONFIG_NFS_FS is not set
+CONFIG_NFS_FS=m
# CONFIG_NFSD is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-poodle b/packages/linux/linux-rp-2.6.23/defconfig-poodle
index 387b5e9bff..210997df4a 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-poodle
+++ b/packages/linux/linux-rp-2.6.23/defconfig-poodle
@@ -1,42 +1,59 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Jul 10 23:38:56 2006
+# Linux kernel version: 2.6.23
+# Fri Dec 28 17:28:59 2007
#
CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
-# Code maturity level options
+# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
+# CONFIG_BLK_DEV_INITRD is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
@@ -46,27 +63,29 @@ CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
-
-#
-# Block layer
-#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
#
# IO Schedulers
@@ -84,31 +103,39 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
# CONFIG_ARCH_S3C2410 is not set
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
#
# Intel PXA2xx Implementations
@@ -118,7 +145,10 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_ARCH_PXA_IDP is not set
CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
# CONFIG_MACH_HX2750 is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
CONFIG_PXA_SHARPSL_25x=y
# CONFIG_PXA_SHARPSL_27x is not set
CONFIG_MACH_POODLE=y
@@ -127,8 +157,16 @@ CONFIG_MACH_POODLE=y
# CONFIG_MACH_HUSKY is not set
# CONFIG_MACH_TOSA is not set
CONFIG_PXA25x=y
-# CONFIG_PXA_KEYS is not set
CONFIG_PXA_SSP=y
+# CONFIG_PXA_KEYS is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
#
# Processor Type
@@ -139,13 +177,17 @@ CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
#
# Processor Features
#
CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
CONFIG_XSCALE_PMU=y
-CONFIG_KEXEC=y
CONFIG_SHARP_LOCOMO=y
CONFIG_SHARP_PARAM=y
CONFIG_SHARPSL_PM=y
@@ -154,6 +196,8 @@ CONFIG_SHARP_SCOOP=y
#
# Bus support
#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
#
# PCCARD (PCMCIA/CardBus) support
@@ -172,10 +216,13 @@ CONFIG_PCMCIA_PXA2XX=y
#
# Kernel Features
#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
CONFIG_HZ=100
-# CONFIG_AEABI is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -185,6 +232,10 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
CONFIG_ALIGNMENT_TRAP=y
#
@@ -194,6 +245,9 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+CONFIG_CPU_FREQ_PXA25x=y
#
# CPU Frequency scaling
@@ -210,7 +264,6 @@ CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA25x=y
#
# Floating point emulation
@@ -229,7 +282,6 @@ CONFIG_FPE_NWFPE=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_AOUT=m
CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
#
# Power management options
@@ -237,7 +289,10 @@ CONFIG_BINFMT_MISC=m
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
-CONFIG_APM=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_APM_EMULATION=y
#
# Networking
@@ -247,12 +302,13 @@ CONFIG_NET=y
#
# Networking options
#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
+CONFIG_PACKET=m
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
@@ -267,25 +323,35 @@ CONFIG_SYN_COOKIES=y
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
CONFIG_INET_DIAG=m
CONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
# CONFIG_IP_VS is not set
CONFIG_IPV6=m
# CONFIG_IPV6_PRIVACY is not set
# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
CONFIG_INET6_AH=m
CONFIG_INET6_ESP=m
CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
CONFIG_INET6_XFRM_TUNNEL=m
CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
@@ -293,43 +359,69 @@ CONFIG_NETFILTER=y
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_U32 is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
#
# IPv6: Netfilter Configuration (EXPERIMENTAL)
#
# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
+# CONFIG_IP6_NF_IPTABLES is not set
# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
@@ -340,7 +432,6 @@ CONFIG_IP_NF_QUEUE=m
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -383,6 +474,7 @@ CONFIG_IRCOMM=m
#
# Dongle support
#
+# CONFIG_KINGSUN_DONGLE is not set
#
# Old SIR device drivers
@@ -399,6 +491,7 @@ CONFIG_IRCOMM=m
# CONFIG_USB_IRDA is not set
# CONFIG_SIGMATEL_FIR is not set
CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
CONFIG_BT=m
CONFIG_BT_L2CAP=m
CONFIG_BT_SCO=m
@@ -425,13 +518,23 @@ CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBLUECARD=m
CONFIG_BT_HCIBTUART=m
CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
CONFIG_IEEE80211=m
# CONFIG_IEEE80211_DEBUG is not set
CONFIG_IEEE80211_CRYPT_WEP=m
CONFIG_IEEE80211_CRYPT_CCMP=m
CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
#
# Device Drivers
@@ -444,15 +547,9 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
# CONFIG_MTD_CONCAT is not set
@@ -465,11 +562,13 @@ CONFIG_MTD_CMDLINE_PARTS=y
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
#
# RAM/ROM/Flash chip drivers
@@ -489,12 +588,12 @@ CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_RAM is not set
CONFIG_MTD_ROM=y
# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
#
# Mapping drivers for chip access
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
CONFIG_MTD_SHARP_SL=y
# CONFIG_MTD_PLATRAM is not set
@@ -512,49 +611,34 @@ CONFIG_MTD_SHARP_SL=y
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
# CONFIG_MTD_NAND_H1900 is not set
CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
CONFIG_MTD_NAND_SHARPSL=y
# CONFIG_MTD_NAND_NANDSIM is not set
-
-#
-# OneNAND Flash Device Drivers
-#
+# CONFIG_MTD_NAND_PLATFORM is not set
# CONFIG_MTD_ONENAND is not set
#
-# Parallel port support
+# UBI - Unsorted block images
#
+# CONFIG_MTD_UBI is not set
# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
+CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=y
#
@@ -569,14 +653,15 @@ CONFIG_BLK_DEV_IDECS=y
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
#
# IDE chipset support/bugfixes
#
CONFIG_IDE_GENERIC=y
+# CONFIG_IDEPCI_PCIBUS_ORDER is not set
# CONFIG_IDE_ARM is not set
# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
# CONFIG_BLK_DEV_HD is not set
#
@@ -584,6 +669,9 @@ CONFIG_IDE_GENERIC=y
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y
#
@@ -603,130 +691,90 @@ CONFIG_CHR_DEV_SG=m
CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
#
-# SCSI Transport Attributes
+# SCSI Transports
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
+# CONFIG_SCSI_SAS_LIBSAS is not set
+CONFIG_SCSI_LOWLEVEL=y
# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_SATA is not set
# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_ATA is not set
CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
CONFIG_DM_ZERO=m
CONFIG_DM_MULTIPATH=m
CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_DELAY is not set
CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
# CONFIG_EQUALIZER is not set
CONFIG_TUN=m
-
-#
-# PHY device support
-#
# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
CONFIG_NET_ETHERNET=y
CONFIG_MII=m
+# CONFIG_AX88796 is not set
# CONFIG_SMC91X is not set
# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+CONFIG_NETDEV_1000=y
+CONFIG_NETDEV_10000=y
#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
+# Wireless LAN
#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
+# CONFIG_LIBERTAS is not set
CONFIG_HERMES=m
# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
CONFIG_PCMCIA_HERMES=m
CONFIG_PCMCIA_SPECTRUM=m
# CONFIG_AIRO_CS is not set
# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_RTL8187 is not set
CONFIG_HOSTAP=m
CONFIG_HOSTAP_FIRMWARE=y
# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
+# CONFIG_ZD1211RW is not set
#
-# PCMCIA network device support
+# USB Network Adapters
#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET_MII=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
CONFIG_NET_PCMCIA=y
# CONFIG_PCMCIA_3C589 is not set
# CONFIG_PCMCIA_3C574 is not set
@@ -736,10 +784,6 @@ CONFIG_PCMCIA_PCNET=m
# CONFIG_PCMCIA_SMC91C92 is not set
# CONFIG_PCMCIA_XIRC2PS is not set
# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
# CONFIG_WAN is not set
CONFIG_PPP=m
# CONFIG_PPP_MULTILINK is not set
@@ -750,21 +794,21 @@ CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
# CONFIG_PPP_MPPE is not set
# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
# CONFIG_SLIP is not set
+CONFIG_SLHC=m
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
# CONFIG_ISDN is not set
#
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
#
# Userland interfaces
@@ -789,17 +833,31 @@ CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_LOCOMO=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_CORGI is not set
# CONFIG_KEYBOARD_SPITZ is not set
+# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_CORGI=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
CONFIG_INPUT_UINPUT=m
#
@@ -814,6 +872,7 @@ CONFIG_INPUT_UINPUT=m
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -834,42 +893,22 @@ CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
#
-# Ftape, the floppy tape device driver
-#
-
-#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not set
# CONFIG_CARDMAN_4000 is not set
# CONFIG_CARDMAN_4040 is not set
# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_CHARDEV is not set
#
@@ -882,22 +921,28 @@ CONFIG_I2C_ALGOBIT=y
#
# I2C Hardware Bus support
#
+# CONFIG_I2C_GPIO is not set
CONFIG_I2C_PXA=y
# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
+# CONFIG_I2C_TINY_USB is not set
#
# Miscellaneous I2C Chip support
#
# CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
@@ -908,29 +953,22 @@ CONFIG_I2C_PXA=y
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
+# CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
#
-# Misc devices
+# Multifunction device drivers
#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
#
# Multi-Function Devices
#
-
-#
-# LED devices
-#
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
@@ -939,6 +977,7 @@ CONFIG_LEDS_CLASS=y
#
CONFIG_LEDS_LOCOMO=y
# CONFIG_LEDS_TOSA is not set
+# CONFIG_LEDS_GPIO is not set
#
# LED Triggers
@@ -946,6 +985,7 @@ CONFIG_LEDS_LOCOMO=y
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
#
# Multimedia devices
@@ -954,79 +994,82 @@ CONFIG_VIDEO_DEV=m
CONFIG_VIDEO_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_VIVI is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
# CONFIG_VIDEO_CPIA is not set
# CONFIG_VIDEO_CPIA2 is not set
# CONFIG_VIDEO_SAA5246A is not set
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-
-#
-# Encoders and Decoders
-#
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-
-#
-# V4L USB devices
-#
+# CONFIG_TUNER_TEA5761 is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
# CONFIG_VIDEO_EM28XX is not set
-CONFIG_USB_DSBR=m
+# CONFIG_VIDEO_USBVISION is not set
CONFIG_VIDEO_USBVIDEO=m
CONFIG_USB_VICAM=m
CONFIG_USB_IBMCAM=m
CONFIG_USB_KONICAWC=m
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
CONFIG_USB_OV511=m
CONFIG_USB_SE401=m
CONFIG_USB_SN9C102=m
CONFIG_USB_STV680=m
-# CONFIG_USB_W9968CF is not set
# CONFIG_USB_ZC0301 is not set
# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_USB_DSBR=m
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
#
-# Radio Adapters
-#
-# CONFIG_RADIO_MAESTRO is not set
-
-#
-# Digital Video Broadcasting Devices
+# Graphics support
#
-# CONFIG_DVB is not set
-CONFIG_USB_DABUSB=m
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_LOCOMO=y
#
-# Graphics support
+# Display device support
#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_BACKLIGHT is not set
CONFIG_FB_MODE_HELPERS=y
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_S1D13XXX is not set
CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+# CONFIG_FB_PXA_OVERLAY is not set
# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
# CONFIG_FB_W100 is not set
# CONFIG_FB_VIRTUAL is not set
@@ -1036,6 +1079,7 @@ CONFIG_FB_PXA=y
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_FONTS=y
# CONFIG_FONT_8x8 is not set
@@ -1048,25 +1092,14 @@ CONFIG_FONT_MINI_4x6=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
# CONFIG_LOGO_LINUX_CLUT224 is not set
-# CONFIG_LOGO_OHAND_CLUT224 is not set
-CONFIG_LOGO_OZ240_CLUT224=y
+CONFIG_LOGO_OHAND_CLUT224=y
+# CONFIG_LOGO_OZ240_CLUT224 is not set
# CONFIG_LOGO_OZ480_CLUT224 is not set
# CONFIG_LOGO_OZ640_CLUT224 is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-CONFIG_BACKLIGHT_LOCOMO=y
#
# Sound
@@ -1107,6 +1140,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
# USB devices
#
# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
#
# PCMCIA devices
@@ -1115,54 +1149,40 @@ CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_PDAUDIOCF is not set
#
-# SoC audio support
+# System on Chip audio support
#
CONFIG_SND_SOC=m
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_POODLE=m
#
-# Soc Platforms
-#
-
-#
-# SoC Audio for the Intel PXA2xx
-#
-CONFIG_SND_PXA2xx_SOC=m
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8731 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8753 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM8974 is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9713 is not set
-# CONFIG_SND_MAINSTONE_BASEBAND is not set
-# CONFIG_SND_MAINSTONE_BLUETOOTH is not set
-# CONFIG_SND_PXA2xx_SOC_MAINSTONE_WM9712 is not set
-# CONFIG_SND_PXA2xx_SOC_CORGI is not set
-# CONFIG_SND_PXA2xx_SOC_SPITZ is not set
-CONFIG_SND_PXA2xx_SOC_POODLE=m
-# CONFIG_SND_PXA2xx_SOC_TOSA is not set
-
-#
-# Soc Codecs
+# SoC Audio support for SuperH
#
-# CONFIG_SND_SOC_AC97_CODEC is not set
CONFIG_SND_SOC_WM8731=m
-# CONFIG_SND_SOC_WM8750 is not set
-# CONFIG_SND_SOC_WM8753 is not set
-# CONFIG_SND_SOC_WM8772 is not set
-# CONFIG_SND_SOC_WM8971 is not set
-# CONFIG_SND_SOC_WM8974 is not set
-# CONFIG_SND_SOC_WM9713 is not set
-# CONFIG_SND_SOC_WM9712 is not set
-# CONFIG_SND_SOC_UDA1380 is not set
-# CONFIG_SND_SOC_AK4535 is not set
#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
#
-# USB support
+# USB HID Boot Protocol drivers
#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB_ARCH_HAS_OHCI is not set
# CONFIG_USB_ARCH_HAS_EHCI is not set
@@ -1173,9 +1193,10 @@ CONFIG_USB=m
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
+CONFIG_USB_DEVICE_CLASS=y
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
# CONFIG_USB_OTG is not set
#
@@ -1184,6 +1205,7 @@ CONFIG_USB_DEVICEFS=y
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_SL811_HCD=m
CONFIG_USB_SL811_CS=m
+# CONFIG_USB_R8A66597_HCD is not set
#
# USB Device Class drivers
@@ -1209,58 +1231,14 @@ CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_LIBUSUAL is not set
#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_AIPTEK=m
-CONFIG_USB_WACOM=m
-# CONFIG_USB_ACECAD is not set
-CONFIG_USB_KBTAB=m
-CONFIG_USB_POWERMATE=m
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-CONFIG_USB_XPAD=m
-CONFIG_USB_ATI_REMOTE=m
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
# USB Imaging devices
#
CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-# CONFIG_USB_ZD1201 is not set
CONFIG_USB_MON=y
#
@@ -1272,8 +1250,8 @@ CONFIG_USB_MON=y
#
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ANYDATA is not set
# CONFIG_USB_SERIAL_ARK3116 is not set
CONFIG_USB_SERIAL_BELKIN=m
# CONFIG_USB_SERIAL_WHITEHEAT is not set
@@ -1307,15 +1285,21 @@ CONFIG_USB_SERIAL_KEYSPAN=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
# CONFIG_USB_SERIAL_NAVMAN is not set
CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
# CONFIG_USB_SERIAL_HP4X is not set
CONFIG_USB_SERIAL_SAFE=m
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
CONFIG_USB_EZUSB=y
#
@@ -1323,16 +1307,22 @@ CONFIG_USB_EZUSB=y
#
CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
CONFIG_USB_AUERSWALD=m
CONFIG_USB_RIO500=m
CONFIG_USB_LEGOTOWER=m
CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
CONFIG_USB_CYTHERM=m
-CONFIG_USB_PHIDGETKIT=m
-CONFIG_USB_PHIDGETSERVO=m
+# CONFIG_USB_PHIDGET is not set
CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
#
@@ -1343,16 +1333,21 @@ CONFIG_USB_IDMOUSE=m
# USB Gadget Support
#
CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set
CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
# CONFIG_USB_GADGET_NET2280 is not set
CONFIG_USB_GADGET_PXA2XX=y
CONFIG_USB_PXA2XX=y
# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
# CONFIG_USB_GADGET_PXA27X is not set
# CONFIG_USB_GADGET_GOKU is not set
# CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
# CONFIG_USB_GADGET_AT91 is not set
# CONFIG_USB_GADGET_DUMMY_HCD is not set
# CONFIG_USB_GADGET_DUALSPEED is not set
@@ -1363,24 +1358,26 @@ CONFIG_USB_GADGETFS=m
CONFIG_USB_FILE_STORAGE=m
# CONFIG_USB_FILE_STORAGE_TEST is not set
CONFIG_USB_G_SERIAL=m
-
-#
-# MMC/SD Card support
-#
+# CONFIG_USB_MIDI_GADGET is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_PXA=y
CONFIG_MMC_UNSAFE_RESUME=y
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
#
-# Real Time Clock
+# MMC/SD Host Controller Drivers
#
+CONFIG_MMC_PXA=y
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
#
# RTC interfaces
@@ -1388,17 +1385,54 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
#
-# RTC drivers
+# I2C RTC drivers
#
-# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=m
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
#
# File systems
@@ -1406,15 +1440,24 @@ CONFIG_RTC_DRV_SA1100=y
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
@@ -1441,8 +1484,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# Pseudo filesystems
#
CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set
@@ -1457,18 +1502,21 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_SYSFS is not set
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
CONFIG_JFFS2_RUBIN=y
# CONFIG_JFFS2_CMODE_NONE is not set
CONFIG_JFFS2_CMODE_PRIORITY=y
# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
CONFIG_CRAMFS=m
CONFIG_SQUASHFS=m
# CONFIG_SQUASHFS_EMBEDDED is not set
@@ -1494,6 +1542,7 @@ CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_BIND34 is not set
CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPCSEC_GSS_SPKM3 is not set
CONFIG_SMB_FS=m
@@ -1501,12 +1550,13 @@ CONFIG_SMB_NLS_DEFAULT=y
CONFIG_SMB_NLS_REMOTE="cp437"
CONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
#
# Partition Types
@@ -1528,6 +1578,7 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
#
# Native Language Support
@@ -1574,6 +1625,11 @@ CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=y
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
CONFIG_PROFILING=y
@@ -1583,28 +1639,38 @@ CONFIG_OPROFILE=m
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
# CONFIG_FORCED_INLINING is not set
# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
CONFIG_DEBUG_ERRORS=y
# CONFIG_DEBUG_LL is not set
@@ -1613,12 +1679,13 @@ CONFIG_DEBUG_ERRORS=y
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
CONFIG_CRYPTO=y
-CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=m
@@ -1627,9 +1694,17 @@ CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_WP512=m
# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_CRYPTD is not set
CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_CAST5=m
@@ -1639,21 +1714,28 @@ CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
+CONFIG_CRYPTO_HW=y
#
# Library routines
#
+CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=y
# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
CONFIG_LIBCRC32C=m
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
-# CONFIG_SHARPSL_RC is not set
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-qemuarm b/packages/linux/linux-rp-2.6.23/defconfig-qemuarm
index 35cf3f5b17..c369657596 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-qemuarm
+++ b/packages/linux/linux-rp-2.6.23/defconfig-qemuarm
@@ -1,40 +1,58 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Sat Aug 26 22:45:02 2006
+# Linux kernel version: 2.6.23
+# Fri Jan 11 00:23:17 2008
#
CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+# CONFIG_GENERIC_GPIO is not set
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
-# Code maturity level options
+# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-# CONFIG_EMBEDDED is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
@@ -44,28 +62,29 @@ CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=y
-
-#
-# Loadable module support
-#
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
-
-#
-# Block layer
-#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
#
# IO Schedulers
@@ -83,31 +102,47 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+CONFIG_ARCH_VERSATILE=y
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP3XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
# CONFIG_ARCH_S3C2410 is not set
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set
-CONFIG_ARCH_VERSATILE=y
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
#
# Versatile platform type
@@ -125,6 +160,8 @@ CONFIG_CPU_ABRT_EV5TJ=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_COPY_V4WB=y
CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
#
# Processor Features
@@ -134,7 +171,7 @@ CONFIG_ARM_THUMB=y
# CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
-# CONFIG_KEXEC is not set
+# CONFIG_OUTER_CACHE is not set
CONFIG_ARM_VIC=y
CONFIG_ICST307=y
@@ -143,6 +180,8 @@ CONFIG_ICST307=y
#
CONFIG_ARM_AMBA=y
CONFIG_PCI=y
+CONFIG_PCI_SYSCALL=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
# CONFIG_PCI_DEBUG is not set
#
@@ -153,10 +192,13 @@ CONFIG_PCI=y
#
# Kernel Features
#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
# CONFIG_PREEMPT is not set
-# CONFIG_NO_IDLE_HZ is not set
CONFIG_HZ=100
-# CONFIG_AEABI is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
@@ -166,8 +208,11 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
CONFIG_LEDS=y
-CONFIG_LEDS_TIMER=y
CONFIG_LEDS_CPU=y
CONFIG_ALIGNMENT_TRAP=y
@@ -176,8 +221,10 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
+CONFIG_CMDLINE="console=ttyAMA0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
#
# Floating point emulation
@@ -197,7 +244,6 @@ CONFIG_VFP=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
-# CONFIG_ARTHUR is not set
#
# Power management options
@@ -205,7 +251,10 @@ CONFIG_BINFMT_ELF=y
CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
-# CONFIG_APM is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+# CONFIG_APM_EMULATION is not set
#
# Networking
@@ -215,10 +264,13 @@ CONFIG_NET=y
#
# Networking options
#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
+CONFIG_PACKET=m
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
@@ -238,28 +290,84 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETFILTER is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_U32 is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
@@ -270,7 +378,6 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -286,7 +393,17 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
#
# Device Drivers
@@ -299,15 +416,9 @@ CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
# CONFIG_DEBUG_DRIVER is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
# CONFIG_MTD_CONCAT is not set
@@ -320,11 +431,13 @@ CONFIG_MTD_AFS_PARTS=y
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
#
# RAM/ROM/Flash chip drivers
@@ -355,7 +468,6 @@ CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_OBSOLETE_CHIPS is not set
#
# Mapping drivers for chip access
@@ -380,29 +492,15 @@ CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
# CONFIG_MTD_ONENAND is not set
#
-# Parallel port support
+# UBI - Unsorted block images
#
+# CONFIG_MTD_UBI is not set
# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-
-#
-# Block devices
-#
+CONFIG_BLK_DEV=y
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
@@ -416,7 +514,7 @@ CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=51200
-CONFIG_BLK_DEV_INITRD=y
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
@@ -425,6 +523,9 @@ CONFIG_BLK_DEV_INITRD=y
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y
#
@@ -443,18 +544,17 @@ CONFIG_BLK_DEV_SD=y
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
#
-# SCSI Transport Attributes
+# SCSI Transports
#
CONFIG_SCSI_SPI_ATTRS=y
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
+# CONFIG_SCSI_SAS_LIBSAS is not set
+CONFIG_SCSI_LOWLEVEL=y
# CONFIG_ISCSI_TCP is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set
@@ -463,41 +563,46 @@ CONFIG_SCSI_SPI_ATTRS=y
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ARCMSR is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_HPTIOP is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
CONFIG_SCSI_SYM53C8XX_2=y
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
CONFIG_SCSI_SYM53C8XX_MMIO=y
-# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
+# CONFIG_SCSI_SRP is not set
+# CONFIG_ATA is not set
CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
CONFIG_DM_ZERO=m
CONFIG_DM_MULTIPATH=m
CONFIG_DM_MULTIPATH_EMC=m
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_DELAY is not set
#
# Fusion MPT device support
@@ -510,54 +615,31 @@ CONFIG_DM_MULTIPATH_EMC=m
#
# IEEE 1394 (FireWire) support
#
+# CONFIG_FIREWIRE is not set
# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
# CONFIG_I2O is not set
-
-#
-# Network device support
-#
CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
# CONFIG_EQUALIZER is not set
CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
+# CONFIG_AX88796 is not set
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
# CONFIG_NET_VENDOR_3COM is not set
CONFIG_SMC91X=y
# CONFIG_DM9000 is not set
-
-#
-# Tulip family network device support
-#
# CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set
# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
+CONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_E1000 is not set
@@ -569,29 +651,36 @@ CONFIG_SMC91X=y
# CONFIG_SKGE is not set
# CONFIG_SKY2 is not set
# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
# CONFIG_TIGON3 is not set
# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+CONFIG_NETDEV_10000=y
# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set
-
-#
-# Token Ring devices
-#
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+# CONFIG_MLX4_CORE is not set
# CONFIG_TR is not set
#
-# Wireless LAN (non-hamradio)
+# Wireless LAN
#
-# CONFIG_NET_RADIO is not set
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
#
-# Wan interfaces
+# USB Network Adapters
#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
@@ -602,16 +691,14 @@ CONFIG_SMC91X=y
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
# CONFIG_ISDN is not set
#
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
#
# Userland interfaces
@@ -632,13 +719,22 @@ CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TABLET=y
+# CONFIG_TABLET_USB_ACECAD is not set
+# CONFIG_TABLET_USB_AIPTEK is not set
+# CONFIG_TABLET_USB_GTCO is not set
+# CONFIG_TABLET_USB_KBTAB is not set
+CONFIG_TABLET_USB_WACOM=y
# CONFIG_INPUT_TOUCHSCREEN is not set
CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
# CONFIG_INPUT_UINPUT is not set
#
@@ -658,6 +754,7 @@ CONFIG_SERIO_LIBPS2=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -675,36 +772,16 @@ CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=m
# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
+CONFIG_DEVPORT=y
# CONFIG_I2C is not set
#
@@ -712,31 +789,41 @@ CONFIG_UNIX98_PTYS=y
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
+# CONFIG_POWER_SUPPLY is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ABITUGURU3 is not set
# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
#
-# Misc devices
+# Multifunction device drivers
#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
#
# Multi-Function Devices
#
-
-#
-# LED devices
-#
CONFIG_NEW_LEDS=y
# CONFIG_LEDS_CLASS is not set
@@ -756,24 +843,66 @@ CONFIG_VIDEO_DEV=m
CONFIG_VIDEO_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_STRADIS is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO is not set
+# CONFIG_USB_DSBR is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+# CONFIG_USB_DABUSB is not set
#
-# Digital Video Broadcasting Devices
+# Graphics support
#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
-# Graphics support
+# Display device support
#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_BACKLIGHT is not set
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_CIRRUS is not set
# CONFIG_FB_PM2 is not set
CONFIG_FB_ARMCLCD=y
@@ -787,13 +916,17 @@ CONFIG_FB_ARMCLCD=y
# CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not set
# CONFIG_FB_SIS is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_VT8623 is not set
# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
# CONFIG_FB_VIRTUAL is not set
#
@@ -801,14 +934,11 @@ CONFIG_FB_ARMCLCD=y
#
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
CONFIG_LOGO=y
CONFIG_LOGO_LINUX_MONO=y
CONFIG_LOGO_LINUX_VGA16=y
@@ -817,16 +947,23 @@ CONFIG_LOGO_OHAND_CLUT224=y
# CONFIG_LOGO_OZ240_CLUT224 is not set
# CONFIG_LOGO_OZ480_CLUT224 is not set
# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Sound
#
# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
#
-# USB support
+# USB Input Devices
#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
@@ -837,9 +974,10 @@ CONFIG_USB=y
# Miscellaneous USB options
#
# CONFIG_USB_DEVICEFS is not set
-# CONFIG_USB_BANDWIDTH is not set
+CONFIG_USB_DEVICE_CLASS=y
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
# CONFIG_USB_OTG is not set
#
@@ -848,10 +986,12 @@ CONFIG_USB=y
# CONFIG_USB_EHCI_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_UHCI_HCD is not set
# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
#
# USB Device Class drivers
@@ -870,42 +1010,10 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_LIBUSUAL is not set
#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
CONFIG_USB_MON=y
#
@@ -922,16 +1030,22 @@ CONFIG_USB_MON=y
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGETKIT is not set
-# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_PHIDGET is not set
# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
#
# USB DSL modem support
@@ -941,19 +1055,12 @@ CONFIG_USB_MON=y
# USB Gadget Support
#
# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
# CONFIG_MMC is not set
-
-#
-# Real Time Clock
-#
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
#
# RTC interfaces
@@ -961,12 +1068,41 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
#
-# RTC drivers
+# SPI RTC drivers
#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_PL031 is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
#
# File systems
@@ -974,15 +1110,24 @@ CONFIG_RTC_INTF_DEV=y
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
@@ -1006,8 +1151,10 @@ CONFIG_DNOTIFY=y
# Pseudo filesystems
#
CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
# CONFIG_CONFIGFS_FS is not set
@@ -1022,13 +1169,15 @@ CONFIG_RAMFS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_SYSFS is not set
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
CONFIG_CRAMFS=y
@@ -1058,6 +1207,7 @@ CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
CONFIG_SMB_FS=y
@@ -1066,7 +1216,6 @@ CONFIG_SMB_FS=y
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
#
# Partition Types
@@ -1088,6 +1237,7 @@ CONFIG_MSDOS_PARTITION=y
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
#
# Native Language Support
@@ -1134,6 +1284,11 @@ CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_UTF8 is not set
#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
# Profiling support
#
CONFIG_PROFILING=y
@@ -1143,27 +1298,37 @@ CONFIG_OPROFILE=m
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DEBUG_SHIRQ is not set
CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_TIMER_STATS=y
+CONFIG_SCHED_DEBUG=y
# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
-# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
CONFIG_FRAME_POINTER=y
-# CONFIG_UNWIND_INFO is not set
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
# CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_WAITQ is not set
CONFIG_DEBUG_ERRORS=y
# CONFIG_DEBUG_LL is not set
@@ -1172,23 +1337,61 @@ CONFIG_DEBUG_ERRORS=y
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_LZO is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+CONFIG_CRYPTO_HW=y
#
# Library routines
#
+CONFIG_BITREVERSE=y
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
-# CONFIG_SHARPSL_RC is not set
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-qemux86 b/packages/linux/linux-rp-2.6.23/defconfig-qemux86
index e9eb83e2dd..c5e91d989f 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-qemux86
+++ b/packages/linux/linux-rp-2.6.23/defconfig-qemux86
@@ -1,45 +1,58 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Mon Oct 16 19:42:42 2006
+# Linux kernel version: 2.6.23
+# Thu Jan 10 23:22:30 2008
#
CONFIG_X86_32=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
CONFIG_SEMAPHORE_SLEEPERS=y
CONFIG_X86=y
CONFIG_MMU=y
+CONFIG_ZONE_DMA=y
+CONFIG_QUICKLIST=y
CONFIG_GENERIC_ISA_DMA=y
CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
CONFIG_DMI=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
-# Code maturity level options
+# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=15
# CONFIG_CPUSETS is not set
+CONFIG_SYSFS_DEPRECATED=y
# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
-CONFIG_VM86=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
@@ -48,28 +61,29 @@ CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
CONFIG_MODULES=y
# CONFIG_MODULE_UNLOAD is not set
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
-
-#
-# Block layer
-#
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
CONFIG_LBD=y
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
#
# IO Schedulers
@@ -87,6 +101,9 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# Processor type and features
#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
CONFIG_SMP=y
CONFIG_X86_PC=y
# CONFIG_X86_ELAN is not set
@@ -97,6 +114,7 @@ CONFIG_X86_PC=y
# CONFIG_X86_VISWS is not set
# CONFIG_X86_GENERICARCH is not set
# CONFIG_X86_ES7000 is not set
+# CONFIG_PARAVIRT is not set
CONFIG_M386=y
# CONFIG_M486 is not set
# CONFIG_M586 is not set
@@ -106,6 +124,7 @@ CONFIG_M386=y
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not set
# CONFIG_MPENTIUMM is not set
+# CONFIG_MCORE2 is not set
# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
@@ -119,13 +138,17 @@ CONFIG_M386=y
# CONFIG_MGEODE_LX is not set
# CONFIG_MCYRIXIII is not set
# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
CONFIG_X86_GENERIC=y
CONFIG_X86_L1_CACHE_SHIFT=7
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_X86_PPRO_FENCE=y
CONFIG_X86_F00F_BUG=y
CONFIG_X86_INTEL_USERCOPY=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=3
# CONFIG_HPET_TIMER is not set
CONFIG_NR_CPUS=8
CONFIG_SCHED_SMT=y
@@ -139,6 +162,7 @@ CONFIG_X86_IO_APIC=y
CONFIG_X86_MCE=y
CONFIG_X86_MCE_NONFATAL=y
CONFIG_X86_MCE_P4THERMAL=y
+CONFIG_VM86=y
# CONFIG_TOSHIBA is not set
# CONFIG_I8K is not set
# CONFIG_X86_REBOOTFIXUPS is not set
@@ -152,13 +176,21 @@ CONFIG_X86_MCE_P4THERMAL=y
# CONFIG_EDD is not set
# CONFIG_DELL_RBU is not set
# CONFIG_DCDBAS is not set
+CONFIG_DMIID=y
CONFIG_NOHIGHMEM=y
# CONFIG_HIGHMEM4G is not set
# CONFIG_HIGHMEM64G is not set
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_3G_OPT is not set
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_2G_OPT is not set
+# CONFIG_VMSPLIT_1G is not set
CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_X86_PAE is not set
CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
@@ -167,19 +199,27 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_SPARSEMEM_STATIC=y
CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_NR_QUICK=1
+CONFIG_VIRT_TO_BUS=y
# CONFIG_MATH_EMULATION is not set
CONFIG_MTRR=y
# CONFIG_EFI is not set
CONFIG_IRQBALANCE=y
-# CONFIG_REGPARM is not set
CONFIG_SECCOMP=y
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
CONFIG_PHYSICAL_START=0x100000
-# CONFIG_HOTPLUG_CPU is not set
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+CONFIG_HOTPLUG_CPU=y
+CONFIG_COMPAT_VDSO=y
#
# Power management options (ACPI, APM)
@@ -187,22 +227,25 @@ CONFIG_PHYSICAL_START=0x100000
CONFIG_PM=y
CONFIG_PM_LEGACY=y
# CONFIG_PM_DEBUG is not set
-
-#
-# ACPI (Advanced Configuration and Power Interface) Support
-#
+CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_SMP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_HIBERNATION_SMP_POSSIBLE=y
+# CONFIG_HIBERNATION is not set
CONFIG_ACPI=y
+CONFIG_ACPI_SLEEP=y
+# CONFIG_ACPI_PROCFS is not set
+CONFIG_ACPI_PROC_EVENT=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_VIDEO=m
-# CONFIG_ACPI_HOTKEY is not set
CONFIG_ACPI_FAN=y
+# CONFIG_ACPI_DOCK is not set
CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_ASUS is not set
-CONFIG_ACPI_IBM=m
-# CONFIG_ACPI_IBM_DOCK is not set
# CONFIG_ACPI_TOSHIBA is not set
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
@@ -210,11 +253,8 @@ CONFIG_ACPI_EC=y
CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y
CONFIG_X86_PM_TIMER=y
-# CONFIG_ACPI_CONTAINER is not set
-
-#
-# APM (Advanced Power Management) BIOS Support
-#
+CONFIG_ACPI_CONTAINER=y
+# CONFIG_ACPI_SBS is not set
# CONFIG_APM is not set
#
@@ -234,7 +274,9 @@ CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
# CONFIG_PCIEPORTBUS is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
# CONFIG_PCI_MSI is not set
+CONFIG_HT_IRQ=y
CONFIG_ISA_DMA_API=y
CONFIG_ISA=y
# CONFIG_EISA is not set
@@ -245,10 +287,6 @@ CONFIG_ISA=y
# PCCARD (PCMCIA/CardBus) support
#
# CONFIG_PCCARD is not set
-
-#
-# PCI Hotplug Support
-#
# CONFIG_HOTPLUG_PCI is not set
#
@@ -266,10 +304,13 @@ CONFIG_NET=y
#
# Networking options
#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
+CONFIG_PACKET=m
# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
@@ -289,57 +330,128 @@ CONFIG_IP_PNP_BOOTP=y
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_BIC=y
-
-#
-# IP: Virtual Server Configuration
-#
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
# CONFIG_IP_VS is not set
# CONFIG_IPV6 is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
#
# Core Netfilter Configuration
#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK_ENABLED=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+# CONFIG_NF_CONNTRACK_EVENTS is not set
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=y
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_H323 is not set
-CONFIG_IP_NF_QUEUE=y
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
@@ -350,7 +462,6 @@ CONFIG_IP_NF_QUEUE=y
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
@@ -358,6 +469,7 @@ CONFIG_IP_NF_QUEUE=y
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
#
# Network testing
@@ -366,7 +478,17 @@ CONFIG_IP_NF_QUEUE=y
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
#
# Device Drivers
@@ -378,31 +500,18 @@ CONFIG_IP_NF_QUEUE=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=m
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y
# CONFIG_PARPORT_SERIAL is not set
# CONFIG_PARPORT_PC_FIFO is not set
# CONFIG_PARPORT_PC_SUPERIO is not set
# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
# CONFIG_PARPORT_1284 is not set
-
-#
-# Plug and Play support
-#
CONFIG_PNP=y
# CONFIG_PNP_DEBUG is not set
@@ -412,10 +521,7 @@ CONFIG_PNP=y
# CONFIG_ISAPNP is not set
# CONFIG_PNPBIOS is not set
CONFIG_PNPACPI=y
-
-#
-# Block devices
-#
+CONFIG_BLK_DEV=y
CONFIG_BLK_DEV_FD=y
# CONFIG_BLK_DEV_XD is not set
# CONFIG_PARIDE is not set
@@ -431,14 +537,19 @@ CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=51200
-CONFIG_BLK_DEV_INITRD=y
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
+CONFIG_MISC_DEVICES=y
+# CONFIG_IBM_ASM is not set
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_SONY_LAPTOP is not set
+# CONFIG_THINKPAD_ACPI is not set
CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
CONFIG_BLK_DEV_IDE=y
#
@@ -452,7 +563,9 @@ CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_IDEACPI is not set
# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
#
# IDE chipset support/bugfixes
@@ -463,13 +576,13 @@ CONFIG_BLK_DEV_CMD640=y
# CONFIG_BLK_DEV_IDEPNP is not set
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_IDEPCI_SHARE_IRQ=y
+CONFIG_IDEPCI_PCIBUS_ORDER=y
# CONFIG_BLK_DEV_OFFBOARD is not set
CONFIG_BLK_DEV_GENERIC=y
# CONFIG_BLK_DEV_OPTI621 is not set
CONFIG_BLK_DEV_RZ1000=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_IDEDMA_PCI_AUTO=y
# CONFIG_IDEDMA_ONLYDISK is not set
# CONFIG_BLK_DEV_AEC62XX is not set
# CONFIG_BLK_DEV_ALI15X3 is not set
@@ -483,8 +596,10 @@ CONFIG_IDEDMA_PCI_AUTO=y
# CONFIG_BLK_DEV_CS5535 is not set
# CONFIG_BLK_DEV_HPT34X is not set
# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_JMICRON is not set
# CONFIG_BLK_DEV_SC1200 is not set
CONFIG_BLK_DEV_PIIX=y
+# CONFIG_BLK_DEV_IT8213 is not set
# CONFIG_BLK_DEV_IT821X is not set
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
@@ -495,11 +610,11 @@ CONFIG_BLK_DEV_PIIX=y
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_BLK_DEV_TC86C001 is not set
# CONFIG_IDE_ARM is not set
# CONFIG_IDE_CHIPSETS is not set
CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDEDMA_IVB is not set
-CONFIG_IDEDMA_AUTO=y
# CONFIG_BLK_DEV_HD is not set
#
@@ -507,6 +622,9 @@ CONFIG_IDEDMA_AUTO=y
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y
#
@@ -525,18 +643,17 @@ CONFIG_CHR_DEV_SG=y
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
#
-# SCSI Transport Attributes
+# SCSI Transports
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-
-#
-# SCSI low-level drivers
-#
+# CONFIG_SCSI_SAS_LIBSAS is not set
+CONFIG_SCSI_LOWLEVEL=y
# CONFIG_ISCSI_TCP is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set
@@ -548,29 +665,15 @@ CONFIG_CHR_DEV_SG=y
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
CONFIG_SCSI_DPT_I2O=m
# CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_ARCMSR is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_SAS is not set
-CONFIG_SCSI_SATA=y
-# CONFIG_SCSI_SATA_AHCI is not set
-# CONFIG_SCSI_SATA_SVW is not set
-CONFIG_SCSI_ATA_PIIX=y
-# CONFIG_SCSI_SATA_MV is not set
-# CONFIG_SCSI_SATA_NV is not set
-# CONFIG_SCSI_PDC_ADMA is not set
-# CONFIG_SCSI_SATA_QSTOR is not set
-# CONFIG_SCSI_SATA_PROMISE is not set
-CONFIG_SCSI_SATA_SX4=m
-# CONFIG_SCSI_SATA_SIL is not set
-# CONFIG_SCSI_SATA_SIL24 is not set
-CONFIG_SCSI_SATA_SIS=m
-# CONFIG_SCSI_SATA_ULI is not set
-# CONFIG_SCSI_SATA_VIA is not set
-# CONFIG_SCSI_SATA_VITESSE is not set
-CONFIG_SCSI_SATA_INTEL_COMBINED=y
+# CONFIG_SCSI_HPTIOP is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 is not set
@@ -585,16 +688,16 @@ CONFIG_SCSI_SATA_INTEL_COMBINED=y
# CONFIG_SCSI_PPA is not set
# CONFIG_SCSI_IMM is not set
# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_STEX is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
-CONFIG_SCSI_IPR=m
-# CONFIG_SCSI_IPR_TRACE is not set
-# CONFIG_SCSI_IPR_DUMP is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_SEAGATE is not set
# CONFIG_SCSI_SYM53C416 is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
@@ -603,23 +706,20 @@ CONFIG_SCSI_IPR=m
# CONFIG_SCSI_ULTRASTOR is not set
# CONFIG_SCSI_NSP32 is not set
# CONFIG_SCSI_DEBUG is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
+# CONFIG_SCSI_SRP is not set
+# CONFIG_ATA is not set
CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
CONFIG_DM_ZERO=m
CONFIG_DM_MULTIPATH=m
CONFIG_DM_MULTIPATH_EMC=m
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_DELAY is not set
#
# Fusion MPT device support
@@ -632,18 +732,16 @@ CONFIG_DM_MULTIPATH_EMC=m
#
# IEEE 1394 (FireWire) support
#
+# CONFIG_FIREWIRE is not set
CONFIG_IEEE1394=y
#
# Subsystem Options
#
# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_OUI_DB is not set
-# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
-# CONFIG_IEEE1394_EXPORT_FULL_API is not set
#
-# Device Drivers
+# Controllers
#
#
@@ -652,42 +750,26 @@ CONFIG_IEEE1394=y
CONFIG_IEEE1394_OHCI1394=y
#
-# Protocol Drivers
+# Protocols
#
# CONFIG_IEEE1394_VIDEO1394 is not set
# CONFIG_IEEE1394_SBP2 is not set
+# CONFIG_IEEE1394_ETH1394_ROM_ENTRY is not set
# CONFIG_IEEE1394_ETH1394 is not set
# CONFIG_IEEE1394_DV1394 is not set
CONFIG_IEEE1394_RAWIO=y
-
-#
-# I2O device support
-#
# CONFIG_I2O is not set
-
-#
-# Network device support
-#
+# CONFIG_MACINTOSH_DRIVERS is not set
CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
CONFIG_DUMMY=m
# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_NET_SB1000 is not set
-
-#
-# ARCnet devices
-#
# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
CONFIG_NET_ETHERNET=y
CONFIG_MII=y
# CONFIG_HAPPYMEAL is not set
@@ -697,10 +779,6 @@ CONFIG_MII=y
# CONFIG_LANCE is not set
# CONFIG_NET_VENDOR_SMC is not set
# CONFIG_NET_VENDOR_RACAL is not set
-
-#
-# Tulip family network device support
-#
# CONFIG_NET_TULIP is not set
# CONFIG_AT1700 is not set
# CONFIG_DEPCA is not set
@@ -743,11 +821,9 @@ CONFIG_8139TOO_PIO=y
# CONFIG_SUNDANCE is not set
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
+# CONFIG_SC92031 is not set
# CONFIG_NET_POCKET is not set
-
-#
-# Ethernet (1000 Mbit)
-#
+CONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_E1000 is not set
@@ -762,28 +838,34 @@ CONFIG_8139TOO_PIO=y
# CONFIG_VIA_VELOCITY is not set
# CONFIG_TIGON3 is not set
# CONFIG_BNX2 is not set
-
-#
-# Ethernet (10000 Mbit)
-#
+# CONFIG_QLA3XXX is not set
+# CONFIG_ATL1 is not set
+CONFIG_NETDEV_10000=y
# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
# CONFIG_IXGB is not set
CONFIG_S2IO=m
# CONFIG_S2IO_NAPI is not set
-
-#
-# Token Ring devices
-#
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+# CONFIG_MLX4_CORE is not set
# CONFIG_TR is not set
#
-# Wireless LAN (non-hamradio)
+# Wireless LAN
#
-# CONFIG_NET_RADIO is not set
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
#
-# Wan interfaces
+# USB Network Adapters
#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET_MII is not set
+# CONFIG_USB_USBNET is not set
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
@@ -795,21 +877,15 @@ CONFIG_S2IO=m
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
# CONFIG_PHONE is not set
#
# Input device support
#
CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
#
# Userland interfaces
@@ -830,14 +906,15 @@ CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_INPUT_MOUSE is not set
-# CONFIG_MOUSE_PS2 is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TABLET=y
+# CONFIG_TABLET_USB_ACECAD is not set
+# CONFIG_TABLET_USB_AIPTEK is not set
+# CONFIG_TABLET_USB_GTCO is not set
+# CONFIG_TABLET_USB_KBTAB is not set
+CONFIG_TABLET_USB_WACOM=y
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
@@ -860,6 +937,7 @@ CONFIG_SERIO_LIBPS2=y
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -867,6 +945,7 @@ CONFIG_HW_CONSOLE=y
#
CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_CONSOLE is not set
+CONFIG_FIX_EARLYCON_MEM=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_PNP=y
CONFIG_SERIAL_8250_NR_UARTS=4
@@ -884,15 +963,7 @@ CONFIG_PRINTER=y
# CONFIG_LP_CONSOLE is not set
# CONFIG_PPDEV is not set
# CONFIG_TIPAR is not set
-
-#
-# IPMI
-#
# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
# CONFIG_WATCHDOG is not set
# CONFIG_HW_RANDOM is not set
# CONFIG_NVRAM is not set
@@ -902,10 +973,6 @@ CONFIG_PRINTER=y
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
# CONFIG_SONYPI is not set
-
-#
-# Ftape, the floppy tape device driver
-#
CONFIG_AGP=y
# CONFIG_AGP_ALI is not set
# CONFIG_AGP_ATI is not set
@@ -929,20 +996,15 @@ CONFIG_DRM=y
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_MWAVE is not set
+# CONFIG_PC8736x_GPIO is not set
+# CONFIG_NSC_GPIO is not set
# CONFIG_CS5535_GPIO is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_HPET is not set
# CONFIG_HANGCHECK_TIMER is not set
-
-#
-# TPM devices
-#
# CONFIG_TCG_TPM is not set
# CONFIG_TELCLOCK is not set
-
-#
-# I2C support
-#
+CONFIG_DEVPORT=y
# CONFIG_I2C is not set
#
@@ -950,25 +1012,36 @@ CONFIG_DRM=y
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
+# CONFIG_POWER_SUPPLY is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_ABITUGURU3 is not set
+# CONFIG_SENSORS_K8TEMP is not set
# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_CORETEMP is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_VT8231 is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_SENSORS_HDAPS is not set
+# CONFIG_SENSORS_APPLESMC is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
-# Misc devices
+# Multifunction device drivers
#
-# CONFIG_IBM_ASM is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
#
# Multi-Function Devices
@@ -981,54 +1054,113 @@ CONFIG_VIDEO_DEV=m
CONFIG_VIDEO_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_PMS is not set
+# CONFIG_VIDEO_BWQCAM is not set
+# CONFIG_VIDEO_CQCAM is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_STRADIS is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+# CONFIG_USB_SN9C102 is not set
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_CADET is not set
+# CONFIG_RADIO_RTRACK is not set
+# CONFIG_RADIO_RTRACK2 is not set
+# CONFIG_RADIO_AZTECH is not set
+# CONFIG_RADIO_GEMTEK is not set
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO 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_USB_DSBR is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+# CONFIG_USB_DABUSB is not set
#
-# Digital Video Broadcasting Devices
+# Graphics support
#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
-# Graphics support
+# Display device support
#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=m
+CONFIG_FB_CFB_COPYAREA=m
+CONFIG_FB_CFB_IMAGEBLIT=m
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
-CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_BACKLIGHT is not set
CONFIG_FB_MODE_HELPERS=y
# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
# CONFIG_FB_CIRRUS is not set
# CONFIG_FB_PM2 is not set
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
-CONFIG_FB_VGA16=y
-CONFIG_FB_VESA=y
-# CONFIG_FB_VESA_STD is not set
-CONFIG_FB_VESA_TNG=y
-CONFIG_FB_VESA_DEFAULT_MODE="640x480-32@60"
-CONFIG_VIDEO_SELECT=y
+# CONFIG_FB_VGA16 is not set
+CONFIG_FB_UVESA=m
+# CONFIG_FB_VESA is not set
+# CONFIG_FB_HECUBA is not set
# CONFIG_FB_HGA is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not set
# CONFIG_FB_I810 is not set
+# CONFIG_FB_LE80578 is not set
# CONFIG_FB_INTEL is not set
# CONFIG_FB_MATROX is not set
# CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not set
# CONFIG_FB_SIS is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_VT8623 is not set
# CONFIG_FB_CYBLA is not set
# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
# CONFIG_FB_GEODE is not set
# CONFIG_FB_VIRTUAL is not set
@@ -1037,9 +1169,11 @@ CONFIG_VIDEO_SELECT=y
#
CONFIG_VGA_CONSOLE=y
# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
# CONFIG_MDA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
@@ -1052,10 +1186,6 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
@@ -1064,7 +1194,6 @@ CONFIG_LOGO_OHAND_CLUT224=y
# CONFIG_LOGO_OZ240_CLUT224 is not set
# CONFIG_LOGO_OZ480_CLUT224 is not set
# CONFIG_LOGO_OZ640_CLUT224 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Sound
@@ -1094,12 +1223,13 @@ CONFIG_SND_VERBOSE_PROCFS=y
# Generic devices
#
CONFIG_SND_AC97_CODEC=y
-CONFIG_SND_AC97_BUS=y
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_MTS64 is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_PORTMAN2X4 is not set
#
# ISA devices
@@ -1152,7 +1282,20 @@ CONFIG_SND_AC97_BUS=y
# CONFIG_SND_CMIPCI 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_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_ENS1370 is not set
@@ -1182,26 +1325,41 @@ CONFIG_SND_INTEL8X0=y
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_AC97_POWER_SAVE is not set
#
# USB devices
#
# CONFIG_SND_USB_AUDIO is not set
# CONFIG_SND_USB_USX2Y is not set
+# CONFIG_SND_USB_CAIAQ is not set
#
-# SoC audio support
+# System on Chip audio support
#
# CONFIG_SND_SOC is not set
#
+# SoC Audio support for SuperH
+#
+
+#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
#
-# USB support
+# USB Input Devices
#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
@@ -1212,9 +1370,10 @@ CONFIG_USB=y
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
+CONFIG_USB_DEVICE_CLASS=y
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
# CONFIG_USB_OTG is not set
#
@@ -1223,10 +1382,15 @@ CONFIG_USB_DEVICEFS=y
CONFIG_USB_EHCI_HCD=y
# CONFIG_USB_EHCI_SPLIT_ISO is not set
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_UHCI_HCD=y
# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
#
# USB Device Class drivers
@@ -1252,43 +1416,14 @@ CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
# CONFIG_USB_LIBUSUAL is not set
#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_WACOM=y
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
CONFIG_USB_MON=y
#
@@ -1306,17 +1441,23 @@ CONFIG_USB_MON=y
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGETKIT is not set
-CONFIG_USB_PHIDGETSERVO=m
+# CONFIG_USB_PHIDGET is not set
# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
# CONFIG_USB_SISUSBVGA is not set
# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
#
@@ -1327,39 +1468,32 @@ CONFIG_USB_PHIDGETSERVO=m
# USB Gadget Support
#
# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
# CONFIG_MMC is not set
-
-#
-# LED devices
-#
# CONFIG_NEW_LEDS is not set
+# CONFIG_INFINIBAND is not set
+# CONFIG_EDAC is not set
+# CONFIG_RTC_CLASS is not set
#
-# LED drivers
+# DMA Engine support
#
+# CONFIG_DMA_ENGINE is not set
#
-# LED Triggers
+# DMA Clients
#
#
-# InfiniBand support
+# DMA Devices
#
-# CONFIG_INFINIBAND is not set
+# CONFIG_AUXDISPLAY is not set
+CONFIG_VIRTUALIZATION=y
+# CONFIG_KVM is not set
#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+# Userspace I/O
#
-# CONFIG_EDAC is not set
-
-#
-# Real Time Clock
-#
-# CONFIG_RTC_CLASS is not set
+# CONFIG_UIO is not set
#
# File systems
@@ -1371,6 +1505,7 @@ CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y
@@ -1378,10 +1513,12 @@ CONFIG_FS_MBCACHE=y
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
@@ -1412,8 +1549,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLBFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
@@ -1452,6 +1591,7 @@ CONFIG_LOCKD=y
CONFIG_EXPORTFS=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
@@ -1459,7 +1599,6 @@ CONFIG_SUNRPC=y
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
#
# Partition Types
@@ -1512,8 +1651,10 @@ CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_UTF8 is not set
#
-# Instrumentation Support
+# Distributed Lock Manager
#
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
CONFIG_PROFILING=y
CONFIG_OPROFILE=y
# CONFIG_KPROBES is not set
@@ -1521,16 +1662,16 @@ CONFIG_OPROFILE=y
#
# Kernel hacking
#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=15
-CONFIG_DEBUG_BUGVERBOSE=y
-CONFIG_TIMER_STATS=y
+CONFIG_UNUSED_SYMBOLS=y
# CONFIG_DEBUG_FS is not set
-# CONFIG_UNWIND_INFO is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_EARLY_PRINTK=y
-CONFIG_STACK_BACKTRACE_COLS=2
CONFIG_X86_FIND_SMP_CONFIG=y
CONFIG_X86_MPPARSE=y
CONFIG_DOUBLEFAULT=y
@@ -1540,23 +1681,71 @@ CONFIG_DOUBLEFAULT=y
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Hardware crypto devices
-#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_MANAGER=m
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_TWOFISH_586 is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_AES_586 is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_LZO is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_DEV_PADLOCK=m
+CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_GEODE=m
#
# Library routines
#
+CONFIG_BITREVERSE=y
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
CONFIG_LIBCRC32C=m
+CONFIG_AUDIT_GENERIC=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y
@@ -1565,4 +1754,3 @@ CONFIG_X86_HT=y
CONFIG_X86_BIOS_REBOOT=y
CONFIG_X86_TRAMPOLINE=y
CONFIG_KTIME_SCALAR=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-spitz b/packages/linux/linux-rp-2.6.23/defconfig-spitz
index 8e044e6a14..a18218f2d1 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-spitz
+++ b/packages/linux/linux-rp-2.6.23/defconfig-spitz
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 22:32:38 2007
+# Linux kernel version: 2.6.23
+# Thu Dec 27 17:03:44 2007
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -40,7 +40,7 @@ CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
# CONFIG_USER_NS is not set
# CONFIG_AUDIT is not set
@@ -66,7 +66,6 @@ CONFIG_FUTEX=y
CONFIG_ANON_INODES=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_VM_EVENT_COUNTERS=y
@@ -149,6 +148,7 @@ CONFIG_PXA_SHARPSL=y
# CONFIG_MACH_TRIZEPS4 is not set
# CONFIG_MACH_EM_X270 is not set
# CONFIG_MACH_HX2750 is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
# CONFIG_PXA_SHARPSL_25x is not set
CONFIG_PXA_SHARPSL_27x=y
CONFIG_MACH_AKITA=y
@@ -244,6 +244,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw fbcon=rotate:1 dyntick=enable debug"
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
#
# CPU Frequency scaling
@@ -275,6 +276,7 @@ CONFIG_PM=y
# CONFIG_PM_LEGACY is not set
# CONFIG_PM_DEBUG is not set
CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
CONFIG_SUSPEND=y
CONFIG_APM_EMULATION=y
@@ -286,7 +288,7 @@ CONFIG_NET=y
#
# Networking options
#
-CONFIG_PACKET=y
+CONFIG_PACKET=m
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
@@ -345,14 +347,59 @@ CONFIG_NETFILTER=y
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_NF_CONNTRACK_ENABLED is not set
# CONFIG_NF_CONNTRACK is not set
-# CONFIG_NETFILTER_XTABLES is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_U32 is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
#
# IP: Netfilter Configuration
#
CONFIG_IP_NF_QUEUE=m
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
#
# IPv6: Netfilter Configuration (EXPERIMENTAL)
@@ -493,7 +540,6 @@ CONFIG_MTD=m
# CONFIG_MTD_CONCAT is not set
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_AFS_PARTS is not set
#
@@ -502,6 +548,7 @@ CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_CHAR=m
CONFIG_MTD_BLKDEVS=m
CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
@@ -524,7 +571,7 @@ CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
+CONFIG_MTD_ROM=m
# CONFIG_MTD_ABSENT is not set
#
@@ -549,14 +596,14 @@ CONFIG_MTD_SHARP_SL=y
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND=m
CONFIG_MTD_NAND_VERIFY_WRITE=y
# CONFIG_MTD_NAND_ECC_SMC is not set
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_IDS=m
# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
+CONFIG_MTD_NAND_SHARPSL=m
# CONFIG_MTD_NAND_NANDSIM is not set
# CONFIG_MTD_NAND_PLATFORM is not set
# CONFIG_MTD_ONENAND is not set
@@ -893,6 +940,7 @@ CONFIG_I2C_PXA=y
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
# CONFIG_HWMON is not set
CONFIG_MISC_DEVICES=y
# CONFIG_EEPROM_93CX6 is not set
@@ -901,6 +949,8 @@ CONFIG_MISC_DEVICES=y
# Multifunction device drivers
#
# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
#
# Multi-Function Devices
@@ -1110,7 +1160,7 @@ CONFIG_SND_SOC_WM8750=m
# CONFIG_SOUND_PRIME is not set
CONFIG_AC97_BUS=m
CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
+CONFIG_HID=m
# CONFIG_HID_DEBUG is not set
#
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-tosa b/packages/linux/linux-rp-2.6.23/defconfig-tosa
index d3dc74bcc0..5173e242a8 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-tosa
+++ b/packages/linux/linux-rp-2.6.23/defconfig-tosa
@@ -26,7 +26,7 @@ CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_POSIX_MQUEUE is not set
CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_BSD_PROCESS_ACCT_V3=y
CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set
@@ -143,6 +143,7 @@ CONFIG_CPU_TLB_V4WBI=y
CONFIG_ARM_THUMB=y
CONFIG_XSCALE_PMU=y
CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
CONFIG_SHARP_PARAM=y
CONFIG_SHARPSL_PM=y
CONFIG_SHARP_SCOOP=y
@@ -243,7 +244,7 @@ CONFIG_NET=y
# Networking options
#
# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
+CONFIG_PACKET=m
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
@@ -288,23 +289,64 @@ CONFIG_NETFILTER=y
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_XTABLES is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_U32 is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
#
# IP: Netfilter Configuration
#
-CONFIG_IP_NF_CONNTRACK=m
-# CONFIG_IP_NF_CT_ACCT is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CT_PROTO_SCTP=m
-CONFIG_IP_NF_FTP=m
-CONFIG_IP_NF_IRC=m
-# CONFIG_IP_NF_NETBIOS_NS is not set
-CONFIG_IP_NF_TFTP=m
-CONFIG_IP_NF_AMANDA=m
-# CONFIG_IP_NF_PPTP is not set
CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
#
# IPv6: Netfilter Configuration (EXPERIMENTAL)
@@ -1105,8 +1147,10 @@ CONFIG_SND_SOC_WM9712=y
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
CONFIG_HID=m
+
#
# USB support
#
@@ -1366,7 +1410,7 @@ CONFIG_RTC_DRV_SA1100=y
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
+CONFIG_EXT3_FS=m
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
diff --git a/packages/linux/linux-rp-2.6.23/defconfig-zylonite b/packages/linux/linux-rp-2.6.23/defconfig-zylonite
index 0321704a1f..8be4a3bd47 100644
--- a/packages/linux/linux-rp-2.6.23/defconfig-zylonite
+++ b/packages/linux/linux-rp-2.6.23/defconfig-zylonite
@@ -232,7 +232,8 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="console=ttyS0,38400 root=/dev/mtdblock2 rootfstype=jffs2 mem=64M dyntick=enable debug"
# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
#
# CPU Frequency scaling
@@ -270,7 +271,7 @@ CONFIG_NET=y
#
# Networking options
#
-# CONFIG_PACKET is not set
+CONFIG_PACKET=m
CONFIG_UNIX=y
CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
@@ -307,7 +308,69 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETFILTER is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_U32 is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_TIPC is not set
@@ -962,7 +1025,7 @@ CONFIG_SND_VERBOSE_PROCFS=y
#
# CONFIG_SOUND_PRIME is not set
CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
+CONFIG_HID=m
# CONFIG_HID_DEBUG is not set
#
@@ -1173,7 +1236,7 @@ CONFIG_RTC_DRV_SA1100=y
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
+CONFIG_EXT3_FS=m
# CONFIG_EXT4DEV_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
diff --git a/packages/linux/linux-rp-2.6.23/hrw-add-wcf11-to-hostap.patch b/packages/linux/linux-rp-2.6.23/hrw-add-wcf11-to-hostap.patch
new file mode 100644
index 0000000000..5ee8b2042c
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.23/hrw-add-wcf11-to-hostap.patch
@@ -0,0 +1,31 @@
+From: Marcin Juszkiewicz <openembedded@haerwu.biz>
+
+Linksys WCF11 submitted by Ångström user.
+
+"The Linksys Group, Inc.", "Wireless Network CF Card", "ISL37300P", "RevA",
+0xa5f472c2, 0x9c05598d, 0xc9049a39, 0x57a66194
+manfid: 0x0274, 0x3301
+
+Signed-off-by: Marcin Juszkiewicz <openembedded@haerwu.biz>
+Acked-by: Pavel Roskin <proski@gnu.org>
+
+---
+ drivers/net/wireless/hostap/hostap_cs.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- linux-2.6.23.orig/drivers/net/wireless/hostap/hostap_cs.c
++++ linux-2.6.23/drivers/net/wireless/hostap/hostap_cs.c
+@@ -887,10 +887,13 @@ static struct pcmcia_device_id hostap_cs
+ "Ver. 1.00",
+ 0x5cd01705, 0x4271660f, 0x9d08ee12),
+ PCMCIA_DEVICE_PROD_ID123(
+ "corega", "WL PCCL-11", "ISL37300P",
+ 0xa21501a, 0x59868926, 0xc9049a39),
++ PCMCIA_DEVICE_PROD_ID123(
++ "The Linksys Group, Inc.", "Wireless Network CF Card", "ISL37300P",
++ 0xa5f472c2, 0x9c05598d, 0xc9049a39),
+ PCMCIA_DEVICE_NULL
+ };
+ MODULE_DEVICE_TABLE(pcmcia, hostap_cs_ids);
+
+
diff --git a/packages/linux/linux-rp-2.6.23/mmcsd_no_scr_check-r2.patch b/packages/linux/linux-rp-2.6.23/mmcsd_no_scr_check-r2.patch
deleted file mode 100644
index ac2245f088..0000000000
--- a/packages/linux/linux-rp-2.6.23/mmcsd_no_scr_check-r2.patch
+++ /dev/null
@@ -1,29 +0,0 @@
----
- drivers/mmc/core/sd.c | 11 ++++++-----
- 1 file changed, 6 insertions(+), 5 deletions(-)
-
-Index: linux-2.6.23/drivers/mmc/core/sd.c
-===================================================================
---- linux-2.6.23.orig/drivers/mmc/core/sd.c 2007-10-17 11:33:26.000000000 +0200
-+++ linux-2.6.23/drivers/mmc/core/sd.c 2007-10-17 11:33:49.000000000 +0200
-@@ -173,14 +173,15 @@
-
- scr_struct = UNSTUFF_BITS(resp, 60, 4);
- if (scr_struct != 0) {
-- printk(KERN_ERR "%s: unrecognised SCR structure version %d\n",
-+ printk(KERN_WARNING "%s: unrecognised SCR structure version %d\n",
- mmc_hostname(card->host), scr_struct);
-- return -EINVAL;
-+ scr->sda_vsn = 0;
-+ scr->bus_widths = 0;
-+ } else {
-+ scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
-+ scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
- }
-
-- scr->sda_vsn = UNSTUFF_BITS(resp, 56, 4);
-- scr->bus_widths = UNSTUFF_BITS(resp, 48, 4);
--
- return 0;
- }
-
diff --git a/packages/linux/linux-rp-2.6.23/pda-power.patch b/packages/linux/linux-rp-2.6.23/pda-power.patch
deleted file mode 100644
index face2f4ef2..0000000000
--- a/packages/linux/linux-rp-2.6.23/pda-power.patch
+++ /dev/null
@@ -1,3373 +0,0 @@
----
- arch/arm/Kconfig | 2
- drivers/Kconfig | 2
- drivers/Makefile | 1
- drivers/power/Kconfig | 70 +++++
- drivers/power/Makefile | 28 ++
- drivers/power/adc_battery.c | 278 +++++++++++++++++++++
- drivers/power/apm_power.c | 247 +++++++++++++++++++
- drivers/power/ds2760_battery.c | 475 +++++++++++++++++++++++++++++++++++++
- drivers/power/micro_battery.c | 257 ++++++++++++++++++++
- drivers/power/olpc_battery.c | 302 +++++++++++++++++++++++
- drivers/power/pda_power.c | 263 ++++++++++++++++++++
- drivers/power/pmu_battery.c | 215 ++++++++++++++++
- drivers/power/power_supply.h | 42 +++
- drivers/power/power_supply_core.c | 168 +++++++++++++
- drivers/power/power_supply_leds.c | 188 ++++++++++++++
- drivers/power/power_supply_sysfs.c | 289 ++++++++++++++++++++++
- drivers/power/simpad-battery.c | 242 ++++++++++++++++++
- include/linux/power_supply.h | 175 +++++++++++++
- 18 files changed, 3244 insertions(+)
-
-Index: linux-2.6.22/drivers/power/adc_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/adc_battery.c 2007-08-23 12:26:28.000000000 +0200
-@@ -0,0 +1,278 @@
-+/*
-+ * Copyright (c) 2007 Paul Sokolovsky
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ */
-+
-+//#define DEBUG
-+
-+#include <linux/module.h>
-+#include <linux/interrupt.h>
-+#include <linux/pm.h>
-+#include <linux/delay.h>
-+#include <linux/workqueue.h>
-+#include <linux/platform_device.h>
-+#include <linux/power_supply.h>
-+#include <linux/adc.h>
-+#include <linux/adc_battery.h>
-+
-+#include <asm/irq.h>
-+
-+#define PIN_NO_VOLT 0
-+#define PIN_NO_CURR 1
-+#define PIN_NO_TEMP 2
-+
-+struct battery_adc_priv {
-+ struct power_supply batt_cdev;
-+
-+ struct battery_adc_platform_data *pdata;
-+
-+ struct adc_request req;
-+ struct adc_sense pins[3];
-+ struct adc_sense last_good_pins[3];
-+
-+ struct workqueue_struct *wq;
-+ struct delayed_work work;
-+};
-+
-+/*
-+ * Battery properties
-+ */
-+
-+static int adc_battery_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ struct battery_adc_priv* drvdata = (struct battery_adc_priv*)psy;
-+ int voltage;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ val->intval = drvdata->pdata->charge_status;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.voltage_max_design;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.voltage_min_design;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.charge_full_design;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN:
-+ val->intval = drvdata->pdata->battery_info.charge_empty_design;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-+ val->intval = drvdata->last_good_pins[PIN_NO_VOLT].value * drvdata->pdata->voltage_mult;
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_NOW:
-+ val->intval = drvdata->last_good_pins[PIN_NO_CURR].value * drvdata->pdata->current_mult;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_NOW:
-+ /* We do calculations in mX, not uX, because todo it in uX we should use "long long"s,
-+ * which is a mess (need to use do_div) when you need divide operation). */
-+ voltage = drvdata->last_good_pins[PIN_NO_VOLT].value * drvdata->pdata->voltage_mult;
-+ val->intval = ((voltage/1000 - drvdata->pdata->battery_info.voltage_min_design/1000) *
-+ (drvdata->pdata->battery_info.charge_full_design/1000 -
-+ drvdata->pdata->battery_info.charge_empty_design/1000)) /
-+ (drvdata->pdata->battery_info.voltage_max_design/1000 -
-+ drvdata->pdata->battery_info.voltage_min_design/1000);
-+ val->intval *= 1000; /* convert final result to uX */
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = drvdata->last_good_pins[PIN_NO_TEMP].value * drvdata->pdata->temperature_mult / 1000;
-+ break;
-+ default:
-+ return -EINVAL;
-+ };
-+ return 0;
-+}
-+
-+/*
-+ * Driver body
-+ */
-+
-+static void adc_battery_query(struct battery_adc_priv *drvdata)
-+{
-+ struct battery_adc_platform_data *pdata = drvdata->pdata;
-+ int powered, charging;
-+
-+ adc_request_sample(&drvdata->req);
-+
-+ powered = power_supply_am_i_supplied(&drvdata->batt_cdev);
-+ charging = pdata->is_charging ? pdata->is_charging() : -1;
-+
-+ if (powered && charging)
-+ pdata->charge_status = POWER_SUPPLY_STATUS_CHARGING;
-+ else if (powered && !charging && charging != -1)
-+ pdata->charge_status = POWER_SUPPLY_STATUS_FULL;
-+ else
-+ pdata->charge_status = POWER_SUPPLY_STATUS_DISCHARGING;
-+
-+ /* Throw away invalid samples, this may happen soon after resume for example. */
-+ if (drvdata->pins[PIN_NO_VOLT].value > 0) {
-+ memcpy(drvdata->last_good_pins, drvdata->pins, sizeof(drvdata->pins));
-+#ifdef DEBUG
-+ printk("%d %d %d\n", drvdata->pins[PIN_NO_VOLT].value,
-+ drvdata->pins[PIN_NO_CURR].value,
-+ drvdata->pins[PIN_NO_TEMP].value);
-+#endif
-+ }
-+}
-+
-+static void adc_battery_charge_power_changed(struct power_supply *bat)
-+{
-+ struct battery_adc_priv *drvdata = (struct battery_adc_priv*)bat;
-+ cancel_delayed_work(&drvdata->work);
-+ queue_delayed_work(drvdata->wq, &drvdata->work, 0);
-+}
-+
-+static void adc_battery_work_func(struct work_struct *work)
-+{
-+ struct delayed_work *delayed_work = container_of(work, struct delayed_work, work);
-+ struct battery_adc_priv *drvdata = container_of(delayed_work, struct battery_adc_priv, work);
-+
-+ adc_battery_query(drvdata);
-+ power_supply_changed(&drvdata->batt_cdev);
-+
-+ queue_delayed_work(drvdata->wq, &drvdata->work, (5000 * HZ) / 1000);
-+}
-+
-+static int adc_battery_probe(struct platform_device *pdev)
-+{
-+ int retval;
-+ struct battery_adc_platform_data *pdata = pdev->dev.platform_data;
-+ struct battery_adc_priv *drvdata;
-+ int i, j;
-+ enum power_supply_property props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+ POWER_SUPPLY_PROP_CURRENT_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN,
-+ POWER_SUPPLY_PROP_TEMP,
-+ };
-+
-+ // Initialize ts data structure.
-+ drvdata = kzalloc(sizeof(*drvdata), GFP_KERNEL);
-+ if (!drvdata)
-+ return -ENOMEM;
-+
-+ drvdata->batt_cdev.name = pdata->battery_info.name;
-+ drvdata->batt_cdev.use_for_apm = pdata->battery_info.use_for_apm;
-+ drvdata->batt_cdev.num_properties = ARRAY_SIZE(props);
-+ drvdata->batt_cdev.get_property = adc_battery_get_property;
-+ drvdata->batt_cdev.external_power_changed =
-+ adc_battery_charge_power_changed;
-+
-+ if (!pdata->voltage_pin) {
-+ drvdata->batt_cdev.num_properties--;
-+ props[3] = -1;
-+ }
-+ if (!pdata->current_pin) {
-+ drvdata->batt_cdev.num_properties--;
-+ props[4] = -1;
-+ }
-+ if (!pdata->temperature_pin) {
-+ drvdata->batt_cdev.num_properties--;
-+ props[8] = -1;
-+ }
-+
-+ drvdata->batt_cdev.properties = kmalloc(
-+ sizeof(*drvdata->batt_cdev.properties) *
-+ drvdata->batt_cdev.num_properties, GFP_KERNEL);
-+ if (!drvdata->batt_cdev.properties)
-+ return -ENOMEM;
-+
-+ j = 0;
-+ for (i = 0; i < ARRAY_SIZE(props); i++) {
-+ if (props[i] == -1)
-+ continue;
-+ drvdata->batt_cdev.properties[j++] = props[i];
-+ }
-+
-+ retval = power_supply_register(&pdev->dev, &drvdata->batt_cdev);
-+ if (retval) {
-+ printk("adc-battery: Error registering battery classdev");
-+ return retval;
-+ }
-+
-+ drvdata->req.senses = drvdata->pins;
-+ drvdata->req.num_senses = ARRAY_SIZE(drvdata->pins);
-+ drvdata->pins[PIN_NO_VOLT].name = pdata->voltage_pin;
-+ drvdata->pins[PIN_NO_CURR].name = pdata->current_pin;
-+ drvdata->pins[PIN_NO_TEMP].name = pdata->temperature_pin;
-+
-+ adc_request_register(&drvdata->req);
-+
-+ /* Here we assume raw values in mV */
-+ if (!pdata->voltage_mult)
-+ pdata->voltage_mult = 1000;
-+ /* Here we assume raw values in mA */
-+ if (!pdata->current_mult)
-+ pdata->current_mult = 1000;
-+ /* Here we assume raw values in 1/10 C */
-+ if (!pdata->temperature_mult)
-+ pdata->temperature_mult = 1000;
-+
-+ drvdata->pdata = pdata;
-+ pdata->drvdata = drvdata; /* Seems ugly, we need better solution */
-+
-+ platform_set_drvdata(pdev, drvdata);
-+
-+ // Load initial values ASAP
-+ adc_battery_query(drvdata);
-+
-+ // Still schedule next sampling soon
-+ INIT_DELAYED_WORK(&drvdata->work, adc_battery_work_func);
-+ drvdata->wq = create_workqueue(pdev->dev.bus_id);
-+ if (!drvdata->wq)
-+ return -ESRCH;
-+
-+ queue_delayed_work(drvdata->wq, &drvdata->work, (5000 * HZ) / 1000);
-+
-+ return retval;
-+}
-+
-+static int adc_battery_remove(struct platform_device *pdev)
-+{
-+ struct battery_adc_priv *drvdata = platform_get_drvdata(pdev);
-+ cancel_delayed_work(&drvdata->work);
-+ destroy_workqueue(drvdata->wq);
-+ power_supply_unregister(&drvdata->batt_cdev);
-+ adc_request_unregister(&drvdata->req);
-+ kfree(drvdata->batt_cdev.properties);
-+ return 0;
-+}
-+
-+static struct platform_driver adc_battery_driver = {
-+ .driver = {
-+ .name = "adc-battery",
-+ },
-+ .probe = adc_battery_probe,
-+ .remove = adc_battery_remove,
-+};
-+
-+static int __init adc_battery_init(void)
-+{
-+ return platform_driver_register(&adc_battery_driver);
-+}
-+
-+static void __exit adc_battery_exit(void)
-+{
-+ platform_driver_unregister(&adc_battery_driver);
-+}
-+
-+module_init(adc_battery_init)
-+module_exit(adc_battery_exit)
-+
-+MODULE_AUTHOR("Paul Sokolovsky");
-+MODULE_DESCRIPTION("Battery driver for ADC device");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/drivers/power/apm_power.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/apm_power.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,247 @@
-+/*
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2007 Eugeny Boger <eugenyboger@dgap.mipt.ru>
-+ *
-+ * Author: Eugeny Boger <eugenyboger@dgap.mipt.ru>
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/power_supply.h>
-+#include <linux/apm-emulation.h>
-+
-+#define PSY_PROP(psy, prop, val) psy->get_property(psy, \
-+ POWER_SUPPLY_PROP_##prop, val)
-+
-+#define _MPSY_PROP(prop, val) main_battery->get_property(main_battery, \
-+ prop, val)
-+
-+#define MPSY_PROP(prop, val) _MPSY_PROP(POWER_SUPPLY_PROP_##prop, val)
-+
-+static struct power_supply *main_battery;
-+
-+static void find_main_battery(void)
-+{
-+ struct device *dev;
-+ struct power_supply *bat, *batm;
-+ union power_supply_propval full;
-+ int max_charge = 0;
-+
-+ main_battery = NULL;
-+ batm = NULL;
-+ list_for_each_entry(dev, &power_supply_class->devices, node) {
-+ bat = dev_get_drvdata(dev);
-+ /* If none of battery devices cantains 'use_for_apm' flag,
-+ choice one with maximum design charge */
-+ if (!PSY_PROP(bat, CHARGE_FULL_DESIGN, &full)) {
-+ if (full.intval > max_charge) {
-+ batm = bat;
-+ max_charge = full.intval;
-+ }
-+ }
-+
-+ if (bat->use_for_apm)
-+ main_battery = bat;
-+ }
-+ if (!main_battery)
-+ main_battery = batm;
-+
-+ return;
-+}
-+
-+static int calculate_time(int status)
-+{
-+ union power_supply_propval charge_full, charge_empty;
-+ union power_supply_propval charge, I;
-+
-+ if (MPSY_PROP(CHARGE_FULL, &charge_full)) {
-+ /* if battery can't report this property, use design value */
-+ if (MPSY_PROP(CHARGE_FULL_DESIGN, &charge_full))
-+ return -1;
-+ }
-+
-+ if (MPSY_PROP(CHARGE_EMPTY, &charge_empty)) {
-+ /* if battery can't report this property, use design value */
-+ if (MPSY_PROP(CHARGE_EMPTY_DESIGN, &charge_empty))
-+ charge_empty.intval = 0;
-+ }
-+
-+ if (MPSY_PROP(CHARGE_AVG, &charge)) {
-+ /* if battery can't report average value, use momentary */
-+ if (MPSY_PROP(CHARGE_NOW, &charge))
-+ return -1;
-+ }
-+
-+ if (MPSY_PROP(CURRENT_AVG, &I)) {
-+ /* if battery can't report average value, use momentary */
-+ if (MPSY_PROP(CURRENT_NOW, &I))
-+ return -1;
-+ }
-+
-+ if (I.intval == 0)
-+ return 0;
-+ else if (status == POWER_SUPPLY_STATUS_CHARGING)
-+ return ((charge.intval - charge_full.intval) * 60L) /
-+ I.intval;
-+ else
-+ return -((charge.intval - charge_empty.intval) * 60L) /
-+ I.intval;
-+}
-+
-+static int calculate_capacity(int using_charge)
-+{
-+ enum power_supply_property full_prop, empty_prop;
-+ enum power_supply_property full_design_prop, empty_design_prop;
-+ enum power_supply_property now_prop, avg_prop;
-+ union power_supply_propval empty, full, cur;
-+ int ret;
-+
-+ if (using_charge) {
-+ full_prop = POWER_SUPPLY_PROP_CHARGE_FULL;
-+ empty_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY;
-+ full_design_prop = POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN;
-+ empty_design_prop = POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN;
-+ now_prop = POWER_SUPPLY_PROP_CHARGE_NOW;
-+ avg_prop = POWER_SUPPLY_PROP_CHARGE_AVG;
-+ }
-+ else {
-+ full_prop = POWER_SUPPLY_PROP_ENERGY_FULL;
-+ empty_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY;
-+ full_design_prop = POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN;
-+ empty_design_prop = POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN;
-+ now_prop = POWER_SUPPLY_PROP_ENERGY_NOW;
-+ avg_prop = POWER_SUPPLY_PROP_ENERGY_AVG;
-+ }
-+
-+ if (_MPSY_PROP(full_prop, &full)) {
-+ /* if battery can't report this property, use design value */
-+ if (_MPSY_PROP(full_design_prop, &full))
-+ return -1;
-+ }
-+
-+ if (_MPSY_PROP(avg_prop, &cur)) {
-+ /* if battery can't report average value, use momentary */
-+ if (_MPSY_PROP(now_prop, &cur))
-+ return -1;
-+ }
-+
-+ if (_MPSY_PROP(empty_prop, &empty)) {
-+ /* if battery can't report this property, use design value */
-+ if (_MPSY_PROP(empty_design_prop, &empty))
-+ empty.intval = 0;
-+ }
-+
-+ if (full.intval - empty.intval)
-+ ret = ((cur.intval - empty.intval) * 100L) /
-+ (full.intval - empty.intval);
-+ else
-+ return -1;
-+
-+ if (ret > 100)
-+ return 100;
-+ else if (ret < 0)
-+ return 0;
-+
-+ return ret;
-+}
-+
-+static void apm_battery_apm_get_power_status(struct apm_power_info *info)
-+{
-+ union power_supply_propval status;
-+ union power_supply_propval capacity, time_to_full, time_to_empty;
-+
-+ down(&power_supply_class->sem);
-+ find_main_battery();
-+ if (!main_battery) {
-+ up(&power_supply_class->sem);
-+ return;
-+ }
-+
-+ /* status */
-+
-+ if (MPSY_PROP(STATUS, &status))
-+ status.intval = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ /* ac line status */
-+
-+ if ((status.intval == POWER_SUPPLY_STATUS_CHARGING) ||
-+ (status.intval == POWER_SUPPLY_STATUS_NOT_CHARGING) ||
-+ (status.intval == POWER_SUPPLY_STATUS_FULL))
-+ info->ac_line_status = APM_AC_ONLINE;
-+ else
-+ info->ac_line_status = APM_AC_OFFLINE;
-+
-+ /* battery life (i.e. capacity, in percents) */
-+
-+ if (MPSY_PROP(CAPACITY, &capacity) == 0)
-+ info->battery_life = capacity.intval;
-+ else {
-+ /* try calculate using energy */
-+ info->battery_life = calculate_capacity(0);
-+ /* if failed try calculate using charge instead */
-+ if (info->battery_life == -1)
-+ info->battery_life = calculate_capacity(1);
-+ }
-+
-+ /* charging status */
-+
-+ if (status.intval == POWER_SUPPLY_STATUS_CHARGING)
-+ info->battery_status = APM_BATTERY_STATUS_CHARGING;
-+ else {
-+ if (info->battery_life > 50)
-+ info->battery_status = APM_BATTERY_STATUS_HIGH;
-+ else if (info->battery_life > 5)
-+ info->battery_status = APM_BATTERY_STATUS_LOW;
-+ else
-+ info->battery_status = APM_BATTERY_STATUS_CRITICAL;
-+ }
-+ info->battery_flag = info->battery_status;
-+
-+ /* time */
-+
-+ info->units = APM_UNITS_MINS;
-+
-+ if (status.intval == POWER_SUPPLY_STATUS_CHARGING) {
-+ if (MPSY_PROP(TIME_TO_FULL_AVG, &time_to_full)) {
-+ if (MPSY_PROP(TIME_TO_FULL_NOW, &time_to_full))
-+ info->time = calculate_time(status.intval);
-+ else
-+ info->time = time_to_full.intval / 60;
-+ }
-+ }
-+ else {
-+ if (MPSY_PROP(TIME_TO_EMPTY_AVG, &time_to_empty)) {
-+ if (MPSY_PROP(TIME_TO_EMPTY_NOW, &time_to_empty))
-+ info->time = calculate_time(status.intval);
-+ else
-+ info->time = time_to_empty.intval / 60;
-+ }
-+ }
-+
-+ up(&power_supply_class->sem);
-+ return;
-+}
-+
-+static int __init apm_battery_init(void)
-+{
-+ printk(KERN_INFO "APM Battery Driver\n");
-+
-+ apm_get_power_status = apm_battery_apm_get_power_status;
-+ return 0;
-+}
-+
-+static void __exit apm_battery_exit(void)
-+{
-+ apm_get_power_status = NULL;
-+ return;
-+}
-+
-+module_init(apm_battery_init);
-+module_exit(apm_battery_exit);
-+
-+MODULE_AUTHOR("Eugeny Boger <eugenyboger@dgap.mipt.ru>");
-+MODULE_DESCRIPTION("APM emulation driver for battery monitoring class");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/drivers/power/ds2760_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/ds2760_battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,475 @@
-+/*
-+ * Driver for batteries with DS2760 chips inside.
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov
-+ * 2004-2007 Matt Reimer
-+ * 2004 Szabolcs Gyurko
-+ *
-+ * Use consistent with the GNU GPL is permitted,
-+ * provided that this copyright notice is
-+ * preserved in its entirety in all copies and derived works.
-+ *
-+ * Author: Anton Vorontsov <cbou@mail.ru>
-+ * February 2007
-+ *
-+ * Matt Reimer <mreimer@vpop.net>
-+ * April 2004, 2005, 2007
-+ *
-+ * Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>
-+ * September 2004
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/param.h>
-+#include <linux/jiffies.h>
-+#include <linux/workqueue.h>
-+#include <linux/pm.h>
-+#include <linux/platform_device.h>
-+#include <linux/power_supply.h>
-+
-+#include "../w1/w1.h"
-+#include "../w1/slaves/w1_ds2760.h"
-+
-+struct ds2760_device_info {
-+ struct device *dev;
-+
-+ /* DS2760 data, valid after calling ds2760_battery_read_status() */
-+ unsigned long update_time; /* jiffies when data read */
-+ char raw[DS2760_DATA_SIZE]; /* raw DS2760 data */
-+ int voltage_raw; /* units of 4.88 mV */
-+ int voltage_uV; /* units of uV */
-+ int current_raw; /* units of 0.625 mA */
-+ int current_uA; /* units of uA */
-+ int accum_current_raw; /* units of 0.25 mAh */
-+ int accum_current_uAh; /* units of uAh */
-+ int temp_raw; /* units of 0.125 C */
-+ int temp_C; /* units of 0.1 C */
-+ int rated_capacity; /* units of uAh */
-+ int rem_capacity; /* percentage */
-+ int full_active_uAh; /* units of uAh */
-+ int empty_uAh; /* units of uAh */
-+ int life_sec; /* units of seconds */
-+ int charge_status; /* POWER_SUPPLY_STATUS_* */
-+
-+ int full_counter;
-+ struct power_supply bat;
-+ struct device *w1_dev;
-+ struct workqueue_struct *monitor_wqueue;
-+ struct delayed_work monitor_work;
-+};
-+
-+static unsigned int cache_time = 1000;
-+module_param(cache_time, uint, 0644);
-+MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
-+
-+/* Some batteries have their rated capacity stored a N * 10 mAh, while
-+ * others use an index into this table. */
-+static int rated_capacities[] = {
-+ 0,
-+ 920, /* Samsung */
-+ 920, /* BYD */
-+ 920, /* Lishen */
-+ 920, /* NEC */
-+ 1440, /* Samsung */
-+ 1440, /* BYD */
-+ 1440, /* Lishen */
-+ 1440, /* NEC */
-+ 2880, /* Samsung */
-+ 2880, /* BYD */
-+ 2880, /* Lishen */
-+ 2880 /* NEC */
-+};
-+
-+/* array is level at temps 0C, 10C, 20C, 30C, 40C
-+ * temp is in Celsius */
-+static int battery_interpolate(int array[], int temp)
-+{
-+ int index, dt;
-+
-+ if (temp <= 0)
-+ return array[0];
-+ if (temp >= 40)
-+ return array[4];
-+
-+ index = temp / 10;
-+ dt = temp % 10;
-+
-+ return array[index] + (((array[index + 1] - array[index]) * dt) / 10);
-+}
-+
-+static int ds2760_battery_read_status(struct ds2760_device_info *di)
-+{
-+ int ret, i, start, count, scale[5];
-+
-+ if (di->update_time && time_before(jiffies, di->update_time +
-+ msecs_to_jiffies(cache_time)))
-+ return 0;
-+
-+ /* The first time we read the entire contents of SRAM/EEPROM,
-+ * but after that we just read the interesting bits that change. */
-+ if (di->update_time == 0) {
-+ start = 0;
-+ count = DS2760_DATA_SIZE;
-+ }
-+ else {
-+ start = DS2760_VOLTAGE_MSB;
-+ count = DS2760_TEMP_LSB - start + 1;
-+ }
-+
-+ ret = w1_ds2760_read(di->w1_dev, di->raw + start, start, count);
-+ if (ret != count) {
-+ dev_warn(di->dev, "call to w1_ds2760_read failed (0x%p)\n",
-+ di->w1_dev);
-+ return 1;
-+ }
-+
-+ di->update_time = jiffies;
-+
-+ /* DS2760 reports voltage in units of 4.88mV, but the battery class
-+ * reports in units of uV, so convert by multiplying by 4880. */
-+ di->voltage_raw = (di->raw[DS2760_VOLTAGE_MSB] << 3) |
-+ (di->raw[DS2760_VOLTAGE_LSB] >> 5);
-+ di->voltage_uV = di->voltage_raw * 4880;
-+
-+ /* DS2760 reports current in signed units of 0.625mA, but the battery
-+ * class reports in units of uA, so convert by multiplying by 625. */
-+ di->current_raw =
-+ (((signed char)di->raw[DS2760_CURRENT_MSB]) << 5) |
-+ (di->raw[DS2760_CURRENT_LSB] >> 3);
-+ di->current_uA = di->current_raw * 625;
-+
-+ /* DS2760 reports accumulated current in signed units of 0.25mAh. */
-+ di->accum_current_raw =
-+ (((signed char)di->raw[DS2760_CURRENT_ACCUM_MSB]) << 8) |
-+ di->raw[DS2760_CURRENT_ACCUM_LSB];
-+ di->accum_current_uAh = di->accum_current_raw * 250;
-+
-+ /* DS2760 reports temperature in signed units of 0.125C, but the
-+ * battery class reports in units of 1/10 C, so we convert by
-+ * multiplying by .125 * 10 = 1.25. */
-+ di->temp_raw = (((signed char)di->raw[DS2760_TEMP_MSB]) << 3) |
-+ (di->raw[DS2760_TEMP_LSB] >> 5);
-+ di->temp_C = di->temp_raw + (di->temp_raw / 4);
-+
-+ /* At least some battery monitors (e.g. HP iPAQ) store the battery's
-+ * maximum rated capacity. */
-+ if (di->raw[DS2760_RATED_CAPACITY] < ARRAY_SIZE(rated_capacities))
-+ di->rated_capacity = rated_capacities[
-+ (unsigned int)di->raw[DS2760_RATED_CAPACITY]];
-+ else
-+ di->rated_capacity = di->raw[DS2760_RATED_CAPACITY] * 10;
-+
-+ di->rated_capacity *= 1000; /* convert to uAh */
-+
-+ /* Calculate the full level at the present temperature. */
-+ di->full_active_uAh = di->raw[DS2760_ACTIVE_FULL] << 8 |
-+ di->raw[DS2760_ACTIVE_FULL + 1];
-+
-+ scale[0] = di->raw[DS2760_ACTIVE_FULL] << 8 |
-+ di->raw[DS2760_ACTIVE_FULL + 1];
-+ for (i = 1; i < 5; i++)
-+ scale[i] = scale[i - 1] + di->raw[DS2760_ACTIVE_FULL + 2 + i];
-+
-+ di->full_active_uAh = battery_interpolate(scale, di->temp_C / 10);
-+ di->full_active_uAh *= 1000; /* convert to uAh */
-+
-+ /* Calculate the empty level at the present temperature. */
-+ scale[4] = di->raw[DS2760_ACTIVE_EMPTY + 4];
-+ for (i = 3; i >= 0; i--)
-+ scale[i] = scale[i + 1] + di->raw[DS2760_ACTIVE_EMPTY + i];
-+
-+ di->empty_uAh = battery_interpolate(scale, di->temp_C / 10);
-+ di->empty_uAh *= 1000; /* convert to uAh */
-+
-+ /* From Maxim Application Note 131: remaining capacity =
-+ * ((ICA - Empty Value) / (Full Value - Empty Value)) x 100% */
-+ di->rem_capacity = ((di->accum_current_uAh - di->empty_uAh) * 100L) /
-+ (di->full_active_uAh - di->empty_uAh);
-+
-+ if (di->rem_capacity < 0)
-+ di->rem_capacity = 0;
-+ if (di->rem_capacity > 100)
-+ di->rem_capacity = 100;
-+
-+ if (di->current_uA)
-+ di->life_sec = -((di->accum_current_uAh - di->empty_uAh) *
-+ 3600L) / di->current_uA;
-+ else
-+ di->life_sec = 0;
-+
-+ return 0;
-+}
-+
-+static void ds2760_battery_update_status(struct ds2760_device_info *di)
-+{
-+ int old_charge_status = di->charge_status;
-+
-+ ds2760_battery_read_status(di);
-+
-+ if (di->charge_status == POWER_SUPPLY_STATUS_UNKNOWN)
-+ di->full_counter = 0;
-+
-+ if (power_supply_am_i_supplied(&di->bat)) {
-+ if (di->current_uA > 10000) {
-+ di->charge_status = POWER_SUPPLY_STATUS_CHARGING;
-+ di->full_counter = 0;
-+ }
-+ else if (di->current_uA < -5000) {
-+ if (di->charge_status != POWER_SUPPLY_STATUS_NOT_CHARGING)
-+ dev_notice(di->dev, "not enough power to "
-+ "charge\n");
-+ di->charge_status = POWER_SUPPLY_STATUS_NOT_CHARGING;
-+ di->full_counter = 0;
-+ }
-+ else if (di->current_uA < 10000 &&
-+ di->charge_status != POWER_SUPPLY_STATUS_FULL) {
-+
-+ /* Don't consider the battery to be full unless
-+ * we've seen the current < 10 mA at least two
-+ * consecutive times. */
-+
-+ di->full_counter++;
-+
-+ if (di->full_counter < 2)
-+ di->charge_status = POWER_SUPPLY_STATUS_CHARGING;
-+ else {
-+ unsigned char acr[2];
-+ int acr_val;
-+
-+ /* acr is in units of 0.25 mAh */
-+ acr_val = di->full_active_uAh * 4L / 1000;
-+
-+ acr[0] = acr_val >> 8;
-+ acr[1] = acr_val & 0xff;
-+
-+ if (w1_ds2760_write(di->w1_dev, acr,
-+ DS2760_CURRENT_ACCUM_MSB, 2) < 2)
-+ dev_warn(di->dev,
-+ "ACR reset failed\n");
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_FULL;
-+ }
-+ }
-+ }
-+ else {
-+ di->charge_status = POWER_SUPPLY_STATUS_DISCHARGING;
-+ di->full_counter = 0;
-+ }
-+
-+ if (di->charge_status != old_charge_status)
-+ power_supply_changed(&di->bat);
-+
-+ return;
-+}
-+
-+static void ds2760_battery_work(struct work_struct *work)
-+{
-+ struct ds2760_device_info *di = container_of(work,
-+ struct ds2760_device_info, monitor_work.work);
-+ const int interval = HZ * 60;
-+
-+ dev_dbg(di->dev, "%s\n", __FUNCTION__);
-+
-+ ds2760_battery_update_status(di);
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, interval);
-+
-+ return;
-+}
-+
-+#define to_ds2760_device_info(x) container_of((x), struct ds2760_device_info, \
-+ bat);
-+
-+static void ds2760_battery_external_power_changed(struct power_supply *psy)
-+{
-+ struct ds2760_device_info *di = to_ds2760_device_info(psy);
-+
-+ dev_dbg(di->dev, "%s\n", __FUNCTION__);
-+
-+ cancel_delayed_work(&di->monitor_work);
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ/10);
-+
-+ return;
-+}
-+
-+static int ds2760_battery_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ struct ds2760_device_info *di = to_ds2760_device_info(psy);
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ val->intval = di->charge_status;
-+ return 0;
-+ default:
-+ break;
-+ }
-+
-+ ds2760_battery_read_status(di);
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-+ val->intval = di->voltage_uV;
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_NOW:
-+ val->intval = di->current_uA;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
-+ val->intval = di->rated_capacity;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_FULL:
-+ val->intval = di->full_active_uAh;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_EMPTY:
-+ val->intval = di->empty_uAh;
-+ break;
-+ case POWER_SUPPLY_PROP_CHARGE_NOW:
-+ val->intval = di->accum_current_uAh;
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = di->temp_C;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property ds2760_battery_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+ POWER_SUPPLY_PROP_CURRENT_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_FULL,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY,
-+ POWER_SUPPLY_PROP_CHARGE_NOW,
-+ POWER_SUPPLY_PROP_TEMP,
-+};
-+
-+static int ds2760_battery_probe(struct platform_device *pdev)
-+{
-+ int retval = 0;
-+ struct ds2760_device_info *di;
-+ struct ds2760_platform_data *pdata;
-+
-+ di = kzalloc(sizeof(*di), GFP_KERNEL);
-+ if (!di) {
-+ retval = -ENOMEM;
-+ goto di_alloc_failed;
-+ }
-+
-+ platform_set_drvdata(pdev, di);
-+
-+ pdata = pdev->dev.platform_data;
-+ di->dev = &pdev->dev;
-+ di->w1_dev = pdev->dev.parent;
-+ di->bat.name = pdev->dev.bus_id;
-+ di->bat.type = POWER_SUPPLY_TYPE_BATTERY;
-+ di->bat.properties = ds2760_battery_props;
-+ di->bat.num_properties = ARRAY_SIZE(ds2760_battery_props);
-+ di->bat.get_property = ds2760_battery_get_property;
-+ di->bat.external_power_changed =
-+ ds2760_battery_external_power_changed;
-+ di->bat.use_for_apm = 1;
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ retval = power_supply_register(&pdev->dev, &di->bat);
-+ if (retval) {
-+ dev_err(di->dev, "failed to register battery");
-+ goto batt_failed;
-+ }
-+
-+ INIT_DELAYED_WORK(&di->monitor_work, ds2760_battery_work);
-+ di->monitor_wqueue = create_singlethread_workqueue(pdev->dev.bus_id);
-+ if (!di->monitor_wqueue) {
-+ retval = -ESRCH;
-+ goto workqueue_failed;
-+ }
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ * 1);
-+
-+ goto success;
-+
-+workqueue_failed:
-+ power_supply_unregister(&di->bat);
-+batt_failed:
-+ kfree(di);
-+di_alloc_failed:
-+success:
-+ return retval;
-+}
-+
-+static int ds2760_battery_remove(struct platform_device *pdev)
-+{
-+ struct ds2760_device_info *di = platform_get_drvdata(pdev);
-+
-+ cancel_rearming_delayed_workqueue(di->monitor_wqueue,
-+ &di->monitor_work);
-+ destroy_workqueue(di->monitor_wqueue);
-+ power_supply_unregister(&di->bat);
-+
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+
-+static int ds2760_battery_suspend(struct platform_device *pdev,
-+ pm_message_t state)
-+{
-+ struct ds2760_device_info *di = platform_get_drvdata(pdev);
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ return 0;
-+}
-+
-+static int ds2760_battery_resume(struct platform_device *pdev)
-+{
-+ struct ds2760_device_info *di = platform_get_drvdata(pdev);
-+
-+ di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN;
-+ power_supply_changed(&di->bat);
-+
-+ cancel_delayed_work(&di->monitor_work);
-+ queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ);
-+
-+ return 0;
-+}
-+
-+#else
-+
-+#define ds2760_battery_suspend NULL
-+#define ds2760_battery_resume NULL
-+
-+#endif /* CONFIG_PM */
-+
-+static struct platform_driver ds2760_battery_driver = {
-+ .driver = {
-+ .name = "ds2760-battery",
-+ },
-+ .probe = ds2760_battery_probe,
-+ .remove = ds2760_battery_remove,
-+ .suspend = ds2760_battery_suspend,
-+ .resume = ds2760_battery_resume,
-+};
-+
-+static int __init ds2760_battery_init(void)
-+{
-+ return platform_driver_register(&ds2760_battery_driver);
-+}
-+
-+static void __exit ds2760_battery_exit(void)
-+{
-+ platform_driver_unregister(&ds2760_battery_driver);
-+ return;
-+}
-+
-+module_init(ds2760_battery_init);
-+module_exit(ds2760_battery_exit);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>, "
-+ "Matt Reimer <mreimer@vpop.net>, "
-+ "Anton Vorontsov <cbou@mail.ru>");
-+MODULE_DESCRIPTION("ds2760 battery driver");
-Index: linux-2.6.22/drivers/power/Kconfig
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/Kconfig 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,70 @@
-+menuconfig POWER_SUPPLY
-+ tristate "Power supply class support"
-+ help
-+ Say Y here to enable power supply class support. This allows
-+ power supply (batteries, AC, USB) monitoring by userspace
-+ via sysfs and uevent (if available) and/or APM kernel interface
-+ (if selected below).
-+
-+if POWER_SUPPLY
-+
-+config POWER_SUPPLY_DEBUG
-+ bool "Power supply debug"
-+ help
-+ Say Y here to enable debugging messages for power supply class
-+ and drivers.
-+
-+config PDA_POWER
-+ tristate "Generic PDA/phone power driver"
-+ help
-+ Say Y here to enable generic power driver for PDAs and phones with
-+ one or two external power supplies (AC/USB) connected to main and
-+ backup batteries, and optional builtin charger.
-+
-+config APM_POWER
-+ tristate "APM emulation for class batteries"
-+ depends on APM_EMULATION
-+ help
-+ Say Y here to enable support APM status emulation using
-+ battery class devices.
-+
-+config BATTERY_DS2760
-+ tristate "DS2760 battery driver (HP iPAQ & others)"
-+ select W1
-+ select W1_SLAVE_DS2760
-+ help
-+ Say Y here to enable support for batteries with ds2760 chip.
-+
-+config BATTERY_PMU
-+ tristate "Apple PMU battery"
-+ depends on ADB_PMU
-+ help
-+ Say Y here to expose battery information on Apple machines
-+ through the generic battery class.
-+
-+config BATTERY_OLPC
-+ tristate "One Laptop Per Child battery"
-+ depends on X86_32
-+ help
-+ Say Y to enable support for the battery on the OLPC laptop.
-+
-+# drivers below are not in battery2-2.6 tree
-+
-+config ADC_BATTERY
-+ tristate "Generic ADC battery driver"
-+ depends on ADC && POWER_SUPPLY
-+ help
-+ Say Y here to enable support for battery monitoring using generic ADC device.
-+
-+config IPAQ_MICRO_BATTERY
-+ tristate "HP iPAQ Micro ASIC battery driver"
-+ depends on IPAQ_MICRO && POWER_SUPPLY
-+ help
-+ Choose this option if you want to monitor battery status on
-+ Compaq/HP iPAQ h3100 h3600
-+
-+config MCP_UCB1x00_SIMPAD_BATTERY
-+ tristate "SIMpad Battery Reading Support"
-+ depends on MCP_UCB1x00 && POWER_SUPPLY
-+
-+endif # POWER_SUPPLY
-Index: linux-2.6.22/drivers/power/Makefile
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/Makefile 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,28 @@
-+power_supply-objs := power_supply_core.o
-+
-+ifeq ($(CONFIG_SYSFS),y)
-+power_supply-objs += power_supply_sysfs.o
-+endif
-+
-+ifeq ($(CONFIG_LEDS_TRIGGERS),y)
-+power_supply-objs += power_supply_leds.o
-+endif
-+
-+ifeq ($(CONFIG_POWER_SUPPLY_DEBUG),y)
-+EXTRA_CFLAGS += -DDEBUG
-+endif
-+
-+obj-$(CONFIG_POWER_SUPPLY) += power_supply.o
-+
-+obj-$(CONFIG_PDA_POWER) += pda_power.o
-+obj-$(CONFIG_APM_POWER) += apm_power.o
-+
-+obj-$(CONFIG_BATTERY_DS2760) += ds2760_battery.o
-+obj-$(CONFIG_BATTERY_PMU) += pmu_battery.o
-+obj-$(CONFIG_BATTERY_OLPC) += olpc_battery.o
-+
-+# drivers below are not in battery2-2.6 tree
-+
-+obj-$(CONFIG_ADC_BATTERY) += adc_battery.o
-+obj-$(CONFIG_IPAQ_MICRO_BATTERY) += micro_battery.o
-+obj-$(CONFIG_MCP_UCB1x00_SIMPAD_BATTERY) += simpad-battery.o
-Index: linux-2.6.22/drivers/power/micro_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/micro_battery.c 2007-08-23 12:25:20.000000000 +0200
-@@ -0,0 +1,257 @@
-+/*
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * h3600 atmel micro companion support, battery subdevice
-+ * based on previous kernel 2.4 version
-+ * Author : Alessandro Gardich <gremlin@gremlin.it>
-+ *
-+ */
-+
-+
-+#include <linux/module.h>
-+#include <linux/version.h>
-+
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <linux/interrupt.h>
-+#include <linux/sched.h>
-+#include <linux/pm.h>
-+#include <linux/sysctl.h>
-+#include <linux/proc_fs.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <linux/power_supply.h>
-+#include <linux/platform_device.h>
-+#include <linux/timer.h>
-+
-+#include <asm/arch/hardware.h>
-+
-+#include <asm/arch/h3600.h>
-+#include <asm/arch/SA-1100.h>
-+
-+#include <asm/hardware/micro.h>
-+
-+#define BATT_PERIOD 10*HZ
-+
-+#define H3600_BATT_STATUS_HIGH 0x01
-+#define H3600_BATT_STATUS_LOW 0x02
-+#define H3600_BATT_STATUS_CRITICAL 0x04
-+#define H3600_BATT_STATUS_CHARGING 0x08
-+#define H3600_BATT_STATUS_CHARGEMAIN 0x10
-+#define H3600_BATT_STATUS_DEAD 0x20 /* Battery will not charge */
-+#define H3600_BATT_STATUS_NOTINSTALLED 0x20 /* For expansion pack batteries */
-+#define H3600_BATT_STATUS_FULL 0x40 /* Battery fully charged (and connected to AC) */
-+#define H3600_BATT_STATUS_NOBATTERY 0x80
-+#define H3600_BATT_STATUS_UNKNOWN 0xff
-+
-+
-+//static struct power_supply_dev *micro_battery;
-+
-+static micro_private_t *p_micro;
-+
-+struct timer_list batt_timer;
-+
-+struct {
-+ int ac;
-+ int update_time;
-+ int chemistry;
-+ int voltage;
-+ int temperature;
-+ int flag;
-+} micro_battery;
-+
-+static void micro_battery_receive (int len, unsigned char *data) {
-+ if (0) {
-+ printk(KERN_ERR "h3600_battery - AC = %02x\n", data[0]);
-+ printk(KERN_ERR "h3600_battery - BAT1 chemistry = %02x\n", data[1]);
-+ printk(KERN_ERR "h3600_battery - BAT1 voltage = %d %02x%02x\n", (data[3]<<8)+data[2], data[2], data[3]);
-+ printk(KERN_ERR "h3600_battery - BAT1 status = %02x\n", data[4]);
-+ }
-+
-+ micro_battery.ac = data[0];
-+ micro_battery.chemistry = data[1];
-+ micro_battery.voltage = ((((unsigned short)data[3]<<8)+data[2]) * 5000L ) * 1000 / 1024;
-+ micro_battery.flag = data[4];
-+
-+ if (len == 9) {
-+ if (0) {
-+ printk(KERN_ERR "h3600_battery - BAT2 chemistry = %02x\n", data[5]);
-+ printk(KERN_ERR "h3600_battery - BAT2 voltage = %d %02x%02x\n", (data[7]<<8)+data[6], data[6], data[7]);
-+ printk(KERN_ERR "h3600_battery - BAT2 status = %02x\n", data[8]);
-+ }
-+ }
-+}
-+
-+static void micro_temperature_receive (int len, unsigned char *data) {
-+ micro_battery.temperature = ((unsigned short)data[1]<<8)+data[0];
-+}
-+
-+void h3600_battery_read_status(unsigned long data) {
-+
-+ if (++data % 2)
-+ h3600_micro_tx_msg(0x09,0,NULL);
-+ else
-+ h3600_micro_tx_msg(0x06,0,NULL);
-+
-+ batt_timer.expires += BATT_PERIOD;
-+ batt_timer.data = data;
-+
-+ add_timer(&batt_timer);
-+}
-+
-+int get_capacity(struct power_supply *b) {
-+ switch (micro_battery.flag) {
-+ case H3600_BATT_STATUS_HIGH : return 100; break;
-+ case H3600_BATT_STATUS_LOW : return 50; break;
-+ case H3600_BATT_STATUS_CRITICAL : return 5; break;
-+ default: break;
-+ }
-+ return 0;
-+}
-+
-+int get_status(struct power_supply *b) {
-+
-+ if (micro_battery.flag == H3600_BATT_STATUS_UNKNOWN)
-+ return POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ if (micro_battery.flag & H3600_BATT_STATUS_FULL)
-+ return POWER_SUPPLY_STATUS_FULL;
-+
-+ if ((micro_battery.flag & H3600_BATT_STATUS_CHARGING) ||
-+ (micro_battery.flag & H3600_BATT_STATUS_CHARGEMAIN))
-+ return POWER_SUPPLY_STATUS_CHARGING;
-+
-+ return POWER_SUPPLY_STATUS_DISCHARGING;
-+}
-+
-+static int micro_batt_get_property(struct power_supply *b,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ val->intval = get_status(b);
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
-+ val->intval = 4700000;
-+ break;
-+ case POWER_SUPPLY_PROP_CAPACITY:
-+ val->intval = get_capacity(b);
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = micro_battery.temperature;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
-+ val->intval = micro_battery.voltage;
-+ break;
-+ default:
-+ return -EINVAL;
-+ };
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property micro_batt_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
-+ POWER_SUPPLY_PROP_CAPACITY,
-+ POWER_SUPPLY_PROP_TEMP,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+};
-+
-+static struct power_supply h3600_battery = {
-+ .name = "main-battery",
-+ .properties = micro_batt_props,
-+ .num_properties = ARRAY_SIZE(micro_batt_props),
-+ .get_property = micro_batt_get_property,
-+ .use_for_apm = 1,
-+};
-+
-+static int micro_batt_probe (struct platform_device *pdev)
-+{
-+ if (1) printk(KERN_ERR "micro battery probe : begin\n");
-+
-+ power_supply_register(&pdev->dev, &h3600_battery);
-+
-+ { /*--- callback ---*/
-+ p_micro = platform_get_drvdata(pdev);
-+ spin_lock(p_micro->lock);
-+ p_micro->h_batt = micro_battery_receive;
-+ p_micro->h_temp = micro_temperature_receive;
-+ spin_unlock(p_micro->lock);
-+ }
-+
-+ { /*--- timer ---*/
-+ init_timer(&batt_timer);
-+ batt_timer.expires = jiffies + BATT_PERIOD;
-+ batt_timer.data = 0;
-+ batt_timer.function = h3600_battery_read_status;
-+
-+ add_timer(&batt_timer);
-+ }
-+
-+ if (1) printk(KERN_ERR "micro battery probe : end\n");
-+ return 0;
-+}
-+
-+static int micro_batt_remove (struct platform_device *pdev)
-+{
-+ power_supply_unregister(&h3600_battery);
-+ { /*--- callback ---*/
-+ init_timer(&batt_timer);
-+ p_micro->h_batt = NULL;
-+ p_micro->h_temp = NULL;
-+ spin_unlock(p_micro->lock);
-+ }
-+ { /*--- timer ---*/
-+ del_timer_sync(&batt_timer);
-+ }
-+ return 0;
-+}
-+
-+static int micro_batt_suspend ( struct platform_device *pdev, pm_message_t state)
-+{
-+ { /*--- timer ---*/
-+ del_timer(&batt_timer);
-+ }
-+ return 0;
-+}
-+
-+static int micro_batt_resume ( struct platform_device *pdev)
-+{
-+ { /*--- timer ---*/
-+ add_timer(&batt_timer);
-+ }
-+ return 0;
-+}
-+
-+struct platform_driver micro_batt_device_driver = {
-+ .driver = {
-+ .name = "h3600-micro-battery",
-+ },
-+ .probe = micro_batt_probe,
-+ .remove = micro_batt_remove,
-+ .suspend = micro_batt_suspend,
-+ .resume = micro_batt_resume,
-+};
-+
-+static int micro_batt_init (void)
-+{
-+ return platform_driver_register(&micro_batt_device_driver);
-+}
-+
-+static void micro_batt_cleanup (void)
-+{
-+ platform_driver_unregister (&micro_batt_device_driver);
-+}
-+
-+module_init (micro_batt_init);
-+module_exit (micro_batt_cleanup);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("gremlin.it");
-+MODULE_DESCRIPTION("driver for iPAQ Atmel micro battery");
-+
-+
-Index: linux-2.6.22/drivers/power/olpc_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/olpc_battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,302 @@
-+/*
-+ * Battery driver for One Laptop Per Child board.
-+ *
-+ * Copyright © 2006 David Woodhouse <dwmw2@infradead.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/err.h>
-+#include <linux/platform_device.h>
-+#include <linux/power_supply.h>
-+#include <linux/jiffies.h>
-+#include <linux/sched.h>
-+#include <asm/io.h>
-+
-+#define wBAT_VOLTAGE 0xf900 /* *9.76/32, mV */
-+#define wBAT_CURRENT 0xf902 /* *15.625/120, mA */
-+#define wBAT_TEMP 0xf906 /* *256/1000, °C */
-+#define wAMB_TEMP 0xf908 /* *256/1000, °C */
-+#define SOC 0xf910 /* percentage */
-+#define sMBAT_STATUS 0xfaa4
-+#define sBAT_PRESENT 1
-+#define sBAT_FULL 2
-+#define sBAT_DESTROY 4 /* what is this exactly? */
-+#define sBAT_LOW 32
-+#define sBAT_DISCHG 64
-+#define sMCHARGE_STATUS 0xfaa5
-+#define sBAT_CHARGE 1
-+#define sBAT_OVERTEMP 4
-+#define sBAT_NiMH 8
-+#define sPOWER_FLAG 0xfa40
-+#define ADAPTER_IN 1
-+
-+/*********************************************************************
-+ * EC locking and access
-+ *********************************************************************/
-+
-+static int lock_ec(void)
-+{
-+ unsigned long timeo = jiffies + HZ / 20;
-+
-+ while (1) {
-+ unsigned char lock = inb(0x6c) & 0x80;
-+ if (!lock)
-+ return 0;
-+ if (time_after(jiffies, timeo)) {
-+ printk(KERN_ERR "olpc_battery: failed to lock EC for "
-+ "battery access\n");
-+ return 1;
-+ }
-+ yield();
-+ }
-+}
-+
-+static void unlock_ec(void)
-+{
-+ outb(0xff, 0x6c);
-+ return;
-+}
-+
-+static unsigned char read_ec_byte(unsigned short adr)
-+{
-+ outb(adr >> 8, 0x381);
-+ outb(adr, 0x382);
-+ return inb(0x383);
-+}
-+
-+static unsigned short read_ec_word(unsigned short adr)
-+{
-+ return (read_ec_byte(adr) << 8) | read_ec_byte(adr + 1);
-+}
-+
-+/*********************************************************************
-+ * Power
-+ *********************************************************************/
-+
-+static int olpc_ac_get_prop(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ int ret = 0;
-+
-+ if (lock_ec())
-+ return -EIO;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_ONLINE:
-+ if (!(read_ec_byte(sMBAT_STATUS) & sBAT_PRESENT)) {
-+ ret = -ENODEV;
-+ goto out;
-+ }
-+ val->intval = !!(read_ec_byte(sPOWER_FLAG) & ADAPTER_IN);
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ break;
-+ }
-+out:
-+ unlock_ec();
-+ return ret;
-+}
-+
-+static enum power_supply_property olpc_ac_props[] = {
-+ POWER_SUPPLY_PROP_ONLINE,
-+};
-+
-+static struct power_supply olpc_ac = {
-+ .name = "olpc-ac",
-+ .type = POWER_SUPPLY_TYPE_MAINS,
-+ .properties = olpc_ac_props,
-+ .num_properties = ARRAY_SIZE(olpc_ac_props),
-+ .get_property = olpc_ac_get_prop,
-+};
-+
-+/*********************************************************************
-+ * Battery properties
-+ *********************************************************************/
-+
-+static int olpc_bat_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ int ret = 0;
-+
-+ if (lock_ec())
-+ return -EIO;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ {
-+ int status = POWER_SUPPLY_STATUS_UNKNOWN;
-+
-+ val->intval = read_ec_byte(sMBAT_STATUS);
-+
-+ if (!(val->intval & sBAT_PRESENT)) {
-+ ret = -ENODEV;
-+ goto out;
-+ }
-+
-+ if (val->intval & sBAT_DISCHG)
-+ status = POWER_SUPPLY_STATUS_DISCHARGING;
-+ else if (val->intval & sBAT_FULL)
-+ status = POWER_SUPPLY_STATUS_FULL;
-+
-+ val->intval = read_ec_byte(sMCHARGE_STATUS);
-+ if (val->intval & sBAT_CHARGE)
-+ status = POWER_SUPPLY_STATUS_CHARGING;
-+
-+ val->intval = status;
-+ break;
-+ }
-+ case POWER_SUPPLY_PROP_PRESENT:
-+ val->intval = !!(read_ec_byte(sMBAT_STATUS) & sBAT_PRESENT);
-+ break;
-+ case POWER_SUPPLY_PROP_HEALTH:
-+ val->intval = read_ec_byte(sMCHARGE_STATUS);
-+ if (val->intval & sBAT_OVERTEMP)
-+ val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
-+ else
-+ val->intval = POWER_SUPPLY_HEALTH_GOOD;
-+ break;
-+ case POWER_SUPPLY_PROP_TECHNOLOGY:
-+ val->intval = read_ec_byte(sMCHARGE_STATUS);
-+ if (val->intval & sBAT_NiMH)
-+ val->intval = POWER_SUPPLY_TECHNOLOGY_NIMH;
-+ else
-+ val->intval = POWER_SUPPLY_TECHNOLOGY_UNKNOWN;
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_AVG:
-+ val->intval = read_ec_byte(wBAT_VOLTAGE) * 9760L / 32;
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_AVG:
-+ val->intval = read_ec_byte(wBAT_CURRENT) * 15625L / 120;
-+ break;
-+ case POWER_SUPPLY_PROP_CAPACITY:
-+ val->intval = read_ec_byte(SOC);
-+ break;
-+ case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
-+ val->intval = read_ec_byte(sMBAT_STATUS);
-+ if (val->intval & sBAT_FULL)
-+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
-+ else if (val->intval & sBAT_LOW)
-+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
-+ else
-+ val->intval = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP:
-+ val->intval = read_ec_byte(wBAT_TEMP) * 256 / 100;
-+ break;
-+ case POWER_SUPPLY_PROP_TEMP_AMBIENT:
-+ val->intval = read_ec_byte(wAMB_TEMP) * 256 / 100;
-+ break;
-+ default:
-+ ret = -EINVAL;
-+ break;
-+ }
-+
-+out:
-+ unlock_ec();
-+ return ret;
-+}
-+
-+static enum power_supply_property olpc_bat_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_PRESENT,
-+ POWER_SUPPLY_PROP_HEALTH,
-+ POWER_SUPPLY_PROP_TECHNOLOGY,
-+ POWER_SUPPLY_PROP_VOLTAGE_AVG,
-+ POWER_SUPPLY_PROP_CURRENT_AVG,
-+ POWER_SUPPLY_PROP_CAPACITY,
-+ POWER_SUPPLY_PROP_CAPACITY_LEVEL,
-+ POWER_SUPPLY_PROP_TEMP,
-+ POWER_SUPPLY_PROP_TEMP_AMBIENT,
-+};
-+
-+/*********************************************************************
-+ * Initialisation
-+ *********************************************************************/
-+
-+static struct platform_device *bat_pdev;
-+
-+static struct power_supply olpc_bat = {
-+ .properties = olpc_bat_props,
-+ .num_properties = ARRAY_SIZE(olpc_bat_props),
-+ .get_property = olpc_bat_get_property,
-+ .use_for_apm = 1,
-+};
-+
-+static int __init olpc_bat_init(void)
-+{
-+ int ret = 0;
-+ unsigned short tmp;
-+
-+ if (!request_region(0x380, 4, "olpc-battery")) {
-+ ret = -EIO;
-+ goto region_failed;
-+ }
-+
-+ if (lock_ec()) {
-+ ret = -EIO;
-+ goto lock_failed;
-+ }
-+
-+ tmp = read_ec_word(0xfe92);
-+ unlock_ec();
-+
-+ if (tmp != 0x380) {
-+ /* Doesn't look like OLPC EC */
-+ ret = -ENODEV;
-+ goto not_olpc_ec;
-+ }
-+
-+ bat_pdev = platform_device_register_simple("olpc-battery", 0, NULL, 0);
-+ if (IS_ERR(bat_pdev)) {
-+ ret = PTR_ERR(bat_pdev);
-+ goto pdev_failed;
-+ }
-+
-+ ret = power_supply_register(&bat_pdev->dev, &olpc_ac);
-+ if (ret)
-+ goto ac_failed;
-+
-+ olpc_bat.name = bat_pdev->name;
-+
-+ ret = power_supply_register(&bat_pdev->dev, &olpc_bat);
-+ if (ret)
-+ goto battery_failed;
-+
-+ goto success;
-+
-+battery_failed:
-+ power_supply_unregister(&olpc_ac);
-+ac_failed:
-+ platform_device_unregister(bat_pdev);
-+pdev_failed:
-+not_olpc_ec:
-+lock_failed:
-+ release_region(0x380, 4);
-+region_failed:
-+success:
-+ return ret;
-+}
-+
-+static void __exit olpc_bat_exit(void)
-+{
-+ power_supply_unregister(&olpc_bat);
-+ power_supply_unregister(&olpc_ac);
-+ platform_device_unregister(bat_pdev);
-+ release_region(0x380, 4);
-+ return;
-+}
-+
-+module_init(olpc_bat_init);
-+module_exit(olpc_bat_exit);
-+
-+MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("Battery driver for One Laptop Per Child "
-+ "($100 laptop) board.");
-Index: linux-2.6.22/drivers/power/pda_power.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/pda_power.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,263 @@
-+/*
-+ * Common power driver for PDAs and phones with one or two external
-+ * power supplies (AC/USB) connected to main and backup batteries,
-+ * and optional builtin charger.
-+ *
-+ * Copyright 2007 Anton Vorontsov <cbou@mail.ru>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/interrupt.h>
-+#include <linux/power_supply.h>
-+#include <linux/pda_power.h>
-+#include <linux/timer.h>
-+#include <linux/jiffies.h>
-+
-+static inline unsigned int get_irq_flags(struct resource *res)
-+{
-+ unsigned int flags = IRQF_DISABLED | IRQF_SHARED;
-+
-+ flags |= res->flags & IRQF_TRIGGER_MASK;
-+
-+ return flags;
-+}
-+
-+static struct device *dev;
-+static struct pda_power_pdata *pdata;
-+static struct resource *ac_irq, *usb_irq;
-+static struct timer_list charger_timer;
-+static struct timer_list supply_timer;
-+
-+static int pda_power_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_ONLINE:
-+ if (psy->type == POWER_SUPPLY_TYPE_MAINS)
-+ val->intval = pdata->is_ac_online ?
-+ pdata->is_ac_online() : 0;
-+ else
-+ val->intval = pdata->is_usb_online ?
-+ pdata->is_usb_online() : 0;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+ return 0;
-+}
-+
-+static enum power_supply_property pda_power_props[] = {
-+ POWER_SUPPLY_PROP_ONLINE,
-+};
-+
-+static char *pda_power_supplied_to[] = {
-+ "main-battery",
-+ "backup-battery",
-+};
-+
-+static struct power_supply pda_power_supplies[] = {
-+ {
-+ .name = "ac",
-+ .type = POWER_SUPPLY_TYPE_MAINS,
-+ .supplied_to = pda_power_supplied_to,
-+ .num_supplicants = ARRAY_SIZE(pda_power_supplied_to),
-+ .properties = pda_power_props,
-+ .num_properties = ARRAY_SIZE(pda_power_props),
-+ .get_property = pda_power_get_property,
-+ },
-+ {
-+ .name = "usb",
-+ .type = POWER_SUPPLY_TYPE_USB,
-+ .supplied_to = pda_power_supplied_to,
-+ .num_supplicants = ARRAY_SIZE(pda_power_supplied_to),
-+ .properties = pda_power_props,
-+ .num_properties = ARRAY_SIZE(pda_power_props),
-+ .get_property = pda_power_get_property,
-+ },
-+};
-+
-+static void update_charger(void)
-+{
-+ if (!pdata->set_charge)
-+ return;
-+
-+ if (pdata->is_ac_online && pdata->is_ac_online()) {
-+ dev_dbg(dev, "charger on (AC)\n");
-+ pdata->set_charge(PDA_POWER_CHARGE_AC);
-+ }
-+ else if (pdata->is_usb_online && pdata->is_usb_online()) {
-+ dev_dbg(dev, "charger on (USB)\n");
-+ pdata->set_charge(PDA_POWER_CHARGE_USB);
-+ }
-+ else {
-+ dev_dbg(dev, "charger off\n");
-+ pdata->set_charge(0);
-+ }
-+
-+ return;
-+}
-+
-+static void supply_timer_func(unsigned long irq)
-+{
-+ if (ac_irq && irq == ac_irq->start)
-+ power_supply_changed(&pda_power_supplies[0]);
-+ else if (usb_irq && irq == usb_irq->start)
-+ power_supply_changed(&pda_power_supplies[1]);
-+ return;
-+}
-+
-+static void charger_timer_func(unsigned long irq)
-+{
-+ update_charger();
-+
-+ /* Okay, charger set. Now wait a bit before notifying supplicants,
-+ * charge power should stabilize. */
-+ supply_timer.data = irq;
-+ mod_timer(&supply_timer,
-+ jiffies + msecs_to_jiffies(pdata->wait_for_charger));
-+ return;
-+}
-+
-+static irqreturn_t power_changed_isr(int irq, void *unused)
-+{
-+ /* Wait a bit before reading ac/usb line status and setting charger,
-+ * because ac/usb status readings may lag from irq. */
-+ charger_timer.data = irq;
-+ mod_timer(&charger_timer,
-+ jiffies + msecs_to_jiffies(pdata->wait_for_status));
-+ return IRQ_HANDLED;
-+}
-+
-+static int pda_power_probe(struct platform_device *pdev)
-+{
-+ int ret = 0;
-+
-+ dev = &pdev->dev;
-+
-+ if (pdev->id != -1) {
-+ dev_err(dev, "it's meaningless to register several "
-+ "pda_powers, use id = -1\n");
-+ ret = -EINVAL;
-+ goto wrongid;
-+ }
-+
-+ pdata = pdev->dev.platform_data;
-+
-+ update_charger();
-+
-+ if (!pdata->wait_for_status)
-+ pdata->wait_for_status = 500;
-+
-+ if (!pdata->wait_for_charger)
-+ pdata->wait_for_charger = 500;
-+
-+ setup_timer(&charger_timer, charger_timer_func, 0);
-+ setup_timer(&supply_timer, supply_timer_func, 0);
-+
-+ ac_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "ac");
-+ usb_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "usb");
-+ if (!ac_irq && !usb_irq) {
-+ dev_err(dev, "no ac/usb irq specified\n");
-+ ret = -ENODEV;
-+ goto noirqs;
-+ }
-+
-+ if (pdata->supplied_to) {
-+ pda_power_supplies[0].supplied_to = pdata->supplied_to;
-+ pda_power_supplies[1].supplied_to = pdata->supplied_to;
-+ pda_power_supplies[0].num_supplicants = pdata->num_supplicants;
-+ pda_power_supplies[1].num_supplicants = pdata->num_supplicants;
-+ }
-+
-+ ret = power_supply_register(&pdev->dev, &pda_power_supplies[0]);
-+ if (ret) {
-+ dev_err(dev, "failed to register %s power supply\n",
-+ pda_power_supplies[0].name);
-+ goto supply0_failed;
-+ }
-+
-+ ret = power_supply_register(&pdev->dev, &pda_power_supplies[1]);
-+ if (ret) {
-+ dev_err(dev, "failed to register %s power supply\n",
-+ pda_power_supplies[1].name);
-+ goto supply1_failed;
-+ }
-+
-+ if (ac_irq) {
-+ ret = request_irq(ac_irq->start, power_changed_isr,
-+ get_irq_flags(ac_irq), ac_irq->name,
-+ &pda_power_supplies[0]);
-+ if (ret) {
-+ dev_err(dev, "request ac irq failed\n");
-+ goto ac_irq_failed;
-+ }
-+ }
-+
-+ if (usb_irq) {
-+ ret = request_irq(usb_irq->start, power_changed_isr,
-+ get_irq_flags(usb_irq), usb_irq->name,
-+ &pda_power_supplies[1]);
-+ if (ret) {
-+ dev_err(dev, "request usb irq failed\n");
-+ goto usb_irq_failed;
-+ }
-+ }
-+
-+ goto success;
-+
-+usb_irq_failed:
-+ if (ac_irq)
-+ free_irq(ac_irq->start, &pda_power_supplies[0]);
-+ac_irq_failed:
-+ power_supply_unregister(&pda_power_supplies[1]);
-+supply1_failed:
-+ power_supply_unregister(&pda_power_supplies[0]);
-+supply0_failed:
-+noirqs:
-+wrongid:
-+success:
-+ return ret;
-+}
-+
-+static int pda_power_remove(struct platform_device *pdev)
-+{
-+ if (usb_irq)
-+ free_irq(usb_irq->start, &pda_power_supplies[1]);
-+ if (ac_irq)
-+ free_irq(ac_irq->start, &pda_power_supplies[0]);
-+ del_timer_sync(&charger_timer);
-+ del_timer_sync(&supply_timer);
-+ power_supply_unregister(&pda_power_supplies[1]);
-+ power_supply_unregister(&pda_power_supplies[0]);
-+ return 0;
-+}
-+
-+static struct platform_driver pda_power_pdrv = {
-+ .driver = {
-+ .name = "pda-power",
-+ },
-+ .probe = pda_power_probe,
-+ .remove = pda_power_remove,
-+};
-+
-+static int __init pda_power_init(void)
-+{
-+ return platform_driver_register(&pda_power_pdrv);
-+}
-+
-+static void __exit pda_power_exit(void)
-+{
-+ platform_driver_unregister(&pda_power_pdrv);
-+ return;
-+}
-+
-+module_init(pda_power_init);
-+module_exit(pda_power_exit);
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>");
-Index: linux-2.6.22/drivers/power/pmu_battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/pmu_battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,215 @@
-+/*
-+ * Battery class driver for Apple PMU
-+ *
-+ * Copyright © 2006 David Woodhouse <dwmw2@infradead.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/err.h>
-+#include <linux/power_supply.h>
-+#include <linux/adb.h>
-+#include <linux/pmu.h>
-+
-+static struct pmu_battery_dev {
-+ struct power_supply bat;
-+ struct pmu_battery_info *pbi;
-+ char name[16];
-+ int propval;
-+} *pbats[PMU_MAX_BATTERIES];
-+
-+#define to_pmu_battery_dev(x) container_of(x, struct pmu_battery_dev, bat)
-+
-+/*********************************************************************
-+ * Power
-+ *********************************************************************/
-+
-+static int pmu_get_ac_prop(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_ONLINE:
-+ val->intval = (!!(pmu_power_flags & PMU_PWR_AC_PRESENT)) ||
-+ (pmu_battery_count == 0);
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property pmu_ac_props[] = {
-+ POWER_SUPPLY_PROP_ONLINE,
-+};
-+
-+static struct power_supply pmu_ac = {
-+ .name = "pmu-ac",
-+ .type = POWER_SUPPLY_TYPE_MAINS,
-+ .properties = pmu_ac_props,
-+ .num_properties = ARRAY_SIZE(pmu_ac_props),
-+ .get_property = pmu_get_ac_prop,
-+};
-+
-+/*********************************************************************
-+ * Battery properties
-+ *********************************************************************/
-+
-+static char *pmu_batt_types[] = {
-+ "Smart", "Comet", "Hooper", "Unknown"
-+};
-+
-+static char *pmu_bat_get_model_name(struct pmu_battery_info *pbi)
-+{
-+ switch (pbi->flags & PMU_BATT_TYPE_MASK) {
-+ case PMU_BATT_TYPE_SMART:
-+ return pmu_batt_types[0];
-+ case PMU_BATT_TYPE_COMET:
-+ return pmu_batt_types[1];
-+ case PMU_BATT_TYPE_HOOPER:
-+ return pmu_batt_types[2];
-+ default: break;
-+ }
-+ return pmu_batt_types[3];
-+}
-+
-+static int pmu_bat_get_property(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val)
-+{
-+ struct pmu_battery_dev *pbat = to_pmu_battery_dev(psy);
-+ struct pmu_battery_info *pbi = pbat->pbi;
-+
-+ switch (psp) {
-+ case POWER_SUPPLY_PROP_STATUS:
-+ if (pbi->flags & PMU_BATT_CHARGING)
-+ val->intval = POWER_SUPPLY_STATUS_CHARGING;
-+ else
-+ val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
-+ break;
-+ case POWER_SUPPLY_PROP_PRESENT:
-+ val->intval = !!(pbi->flags & PMU_BATT_PRESENT);
-+ break;
-+ case POWER_SUPPLY_PROP_MODEL_NAME:
-+ val->strval = pmu_bat_get_model_name(pbi);
-+ break;
-+ case POWER_SUPPLY_PROP_ENERGY_AVG:
-+ val->intval = pbi->charge * 1000; /* mWh -> µWh */
-+ break;
-+ case POWER_SUPPLY_PROP_ENERGY_FULL:
-+ val->intval = pbi->max_charge * 1000; /* mWh -> µWh */
-+ break;
-+ case POWER_SUPPLY_PROP_CURRENT_AVG:
-+ val->intval = pbi->amperage * 1000; /* mA -> µA */
-+ break;
-+ case POWER_SUPPLY_PROP_VOLTAGE_AVG:
-+ val->intval = pbi->voltage * 1000; /* mV -> µV */
-+ break;
-+ case POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG:
-+ val->intval = pbi->time_remaining;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+ return 0;
-+}
-+
-+static enum power_supply_property pmu_bat_props[] = {
-+ POWER_SUPPLY_PROP_STATUS,
-+ POWER_SUPPLY_PROP_PRESENT,
-+ POWER_SUPPLY_PROP_MODEL_NAME,
-+ POWER_SUPPLY_PROP_ENERGY_AVG,
-+ POWER_SUPPLY_PROP_ENERGY_FULL,
-+ POWER_SUPPLY_PROP_CURRENT_AVG,
-+ POWER_SUPPLY_PROP_VOLTAGE_AVG,
-+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
-+};
-+
-+/*********************************************************************
-+ * Initialisation
-+ *********************************************************************/
-+
-+static struct platform_device *bat_pdev;
-+
-+static int __init pmu_bat_init(void)
-+{
-+ int ret;
-+ int i;
-+
-+ bat_pdev = platform_device_register_simple("pmu-battery",
-+ 0, NULL, 0);
-+ if (IS_ERR(bat_pdev)) {
-+ ret = PTR_ERR(bat_pdev);
-+ goto pdev_register_failed;
-+ }
-+
-+ ret = power_supply_register(&bat_pdev->dev, &pmu_ac);
-+ if (ret)
-+ goto ac_register_failed;
-+
-+ for (i = 0; i < pmu_battery_count; i++) {
-+ struct pmu_battery_dev *pbat = kzalloc(sizeof(*pbat),
-+ GFP_KERNEL);
-+ if (!pbat)
-+ break;
-+
-+ sprintf(pbat->name, "PMU battery %d", i);
-+ pbat->bat.name = pbat->name;
-+ pbat->bat.properties = pmu_bat_props;
-+ pbat->bat.num_properties = ARRAY_SIZE(pmu_bat_props);
-+ pbat->bat.get_property = pmu_bat_get_property;
-+ pbat->pbi = &pmu_batteries[i];
-+
-+ ret = power_supply_register(&bat_pdev->dev, &pbat->bat);
-+ if (ret) {
-+ kfree(pbat);
-+ goto battery_register_failed;
-+ }
-+ pbats[i] = pbat;
-+ }
-+
-+ goto success;
-+
-+battery_register_failed:
-+ while (i--) {
-+ if (!pbats[i])
-+ continue;
-+ power_supply_unregister(&pbats[i]->bat);
-+ kfree(pbats[i]);
-+ }
-+ power_supply_unregister(&pmu_ac);
-+ac_register_failed:
-+ platform_device_unregister(bat_pdev);
-+pdev_register_failed:
-+success:
-+ return ret;
-+}
-+
-+static void __exit pmu_bat_exit(void)
-+{
-+ int i;
-+
-+ for (i = 0; i < PMU_MAX_BATTERIES; i++) {
-+ if (!pbats[i])
-+ continue;
-+ power_supply_unregister(&pbats[i]->bat);
-+ kfree(pbats[i]);
-+ }
-+ power_supply_unregister(&pmu_ac);
-+ platform_device_unregister(bat_pdev);
-+
-+ return;
-+}
-+
-+module_init(pmu_bat_init);
-+module_exit(pmu_bat_exit);
-+
-+MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("PMU battery driver");
-Index: linux-2.6.22/drivers/power/power_supply_core.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply_core.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,168 @@
-+/*
-+ * Universal power supply monitor class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/init.h>
-+#include <linux/device.h>
-+#include <linux/err.h>
-+#include <linux/power_supply.h>
-+#include "power_supply.h"
-+
-+struct class *power_supply_class;
-+
-+static void power_supply_changed_work(struct work_struct *work)
-+{
-+ struct power_supply *psy = container_of(work, struct power_supply,
-+ changed_work);
-+ int i;
-+
-+ dev_dbg(psy->dev, "%s\n", __FUNCTION__);
-+
-+ for (i = 0; i < psy->num_supplicants; i++) {
-+ struct device *dev;
-+
-+ down(&power_supply_class->sem);
-+ list_for_each_entry(dev, &power_supply_class->devices, node) {
-+ struct power_supply *pst = dev_get_drvdata(dev);
-+
-+ if (!strcmp(psy->supplied_to[i], pst->name)) {
-+ if (pst->external_power_changed)
-+ pst->external_power_changed(pst);
-+ }
-+ }
-+ up(&power_supply_class->sem);
-+ }
-+
-+ power_supply_update_leds(psy);
-+
-+ kobject_uevent(&psy->dev->kobj, KOBJ_CHANGE);
-+
-+ return;
-+}
-+
-+void power_supply_changed(struct power_supply *psy)
-+{
-+ dev_dbg(psy->dev, "%s\n", __FUNCTION__);
-+
-+ schedule_work(&psy->changed_work);
-+
-+ return;
-+}
-+
-+int power_supply_am_i_supplied(struct power_supply *psy)
-+{
-+ union power_supply_propval ret = {0,};
-+ struct device *dev;
-+
-+ down(&power_supply_class->sem);
-+ list_for_each_entry(dev, &power_supply_class->devices, node) {
-+ struct power_supply *epsy = dev_get_drvdata(dev);
-+ int i;
-+
-+ for (i = 0; i < epsy->num_supplicants; i++) {
-+ if (!strcmp(epsy->supplied_to[i], psy->name)) {
-+ if (epsy->get_property(epsy,
-+ POWER_SUPPLY_PROP_ONLINE, &ret))
-+ continue;
-+ if (ret.intval)
-+ goto out;
-+ }
-+ }
-+ }
-+out:
-+ up(&power_supply_class->sem);
-+
-+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, ret.intval);
-+
-+ return ret.intval;
-+}
-+
-+int power_supply_register(struct device *parent, struct power_supply *psy)
-+{
-+ int rc = 0;
-+
-+ psy->dev = device_create(power_supply_class, parent, 0,
-+ "%s", psy->name);
-+ if (IS_ERR(psy->dev)) {
-+ rc = PTR_ERR(psy->dev);
-+ goto dev_create_failed;
-+ }
-+
-+ dev_set_drvdata(psy->dev, psy);
-+
-+ INIT_WORK(&psy->changed_work, power_supply_changed_work);
-+
-+ rc = power_supply_create_attrs(psy);
-+ if (rc)
-+ goto create_attrs_failed;
-+
-+ rc = power_supply_create_triggers(psy);
-+ if (rc)
-+ goto create_triggers_failed;
-+
-+ power_supply_changed(psy);
-+
-+ goto success;
-+
-+create_triggers_failed:
-+ power_supply_remove_attrs(psy);
-+create_attrs_failed:
-+ device_unregister(psy->dev);
-+dev_create_failed:
-+success:
-+ return rc;
-+}
-+
-+void power_supply_unregister(struct power_supply *psy)
-+{
-+ flush_scheduled_work();
-+ power_supply_remove_triggers(psy);
-+ power_supply_remove_attrs(psy);
-+ device_unregister(psy->dev);
-+ return;
-+}
-+
-+static int __init power_supply_class_init(void)
-+{
-+ power_supply_class = class_create(THIS_MODULE, "power_supply");
-+
-+ if (IS_ERR(power_supply_class))
-+ return PTR_ERR(power_supply_class);
-+
-+ power_supply_class->dev_uevent = power_supply_uevent;
-+
-+ return 0;
-+}
-+
-+static void __exit power_supply_class_exit(void)
-+{
-+ class_destroy(power_supply_class);
-+ return;
-+}
-+
-+EXPORT_SYMBOL_GPL(power_supply_changed);
-+EXPORT_SYMBOL_GPL(power_supply_am_i_supplied);
-+EXPORT_SYMBOL_GPL(power_supply_register);
-+EXPORT_SYMBOL_GPL(power_supply_unregister);
-+
-+/* exported for the APM Power driver, APM emulation */
-+EXPORT_SYMBOL_GPL(power_supply_class);
-+
-+subsys_initcall(power_supply_class_init);
-+module_exit(power_supply_class_exit);
-+
-+MODULE_DESCRIPTION("Universal power supply monitor class");
-+MODULE_AUTHOR("Ian Molton <spyro@f2s.com>, "
-+ "Szabolcs Gyurko, "
-+ "Anton Vorontsov <cbou@mail.ru>");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/drivers/power/power_supply.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply.h 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,42 @@
-+/*
-+ * Functions private to power supply class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#ifdef CONFIG_SYSFS
-+
-+extern int power_supply_create_attrs(struct power_supply *psy);
-+extern void power_supply_remove_attrs(struct power_supply *psy);
-+extern int power_supply_uevent(struct device *dev, char **envp, int num_envp,
-+ char *buffer, int buffer_size);
-+
-+#else
-+
-+static inline int power_supply_create_attrs(struct power_supply *psy)
-+{ return 0; }
-+static inline void power_supply_remove_attrs(struct power_supply *psy) {}
-+#define power_supply_uevent NULL
-+
-+#endif /* CONFIG_SYSFS */
-+
-+#ifdef CONFIG_LEDS_TRIGGERS
-+
-+extern void power_supply_update_leds(struct power_supply *psy);
-+extern int power_supply_create_triggers(struct power_supply *psy);
-+extern void power_supply_remove_triggers(struct power_supply *psy);
-+
-+#else
-+
-+static inline void power_supply_update_leds(struct power_supply *psy) {}
-+static inline int power_supply_create_triggers(struct power_supply *psy)
-+{ return 0; }
-+static inline void power_supply_remove_triggers(struct power_supply *psy) {}
-+
-+#endif /* CONFIG_LEDS_TRIGGERS */
-Index: linux-2.6.22/drivers/power/power_supply_leds.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply_leds.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,188 @@
-+/*
-+ * LEDs triggers for power supply class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#include <linux/power_supply.h>
-+
-+/* If we have hwtimer trigger, then use it to blink charging LED */
-+
-+#if defined(CONFIG_LEDS_TRIGGER_HWTIMER) || \
-+ (defined(CONFIG_BATTERY_MODULE) && \
-+ defined(CONFIG_LEDS_TRIGGER_HWTIMER_MODULE))
-+ #define led_trigger_register_charging led_trigger_register_hwtimer
-+ #define led_trigger_unregister_charging led_trigger_unregister_hwtimer
-+#else
-+ #define led_trigger_register_charging led_trigger_register_simple
-+ #define led_trigger_unregister_charging led_trigger_unregister_simple
-+#endif
-+
-+/* Battery specific LEDs triggers. */
-+
-+static void power_supply_update_bat_leds(struct power_supply *psy)
-+{
-+ union power_supply_propval status;
-+
-+ if (psy->get_property(psy, POWER_SUPPLY_PROP_STATUS, &status))
-+ return;
-+
-+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, status.intval);
-+
-+ switch(status.intval) {
-+ case POWER_SUPPLY_STATUS_FULL:
-+ led_trigger_event(psy->charging_full_trig, LED_FULL);
-+ led_trigger_event(psy->charging_trig, LED_OFF);
-+ led_trigger_event(psy->full_trig, LED_FULL);
-+ break;
-+ case POWER_SUPPLY_STATUS_CHARGING:
-+ led_trigger_event(psy->charging_full_trig, LED_FULL);
-+ led_trigger_event(psy->charging_trig, LED_FULL);
-+ led_trigger_event(psy->full_trig, LED_OFF);
-+ break;
-+ default:
-+ led_trigger_event(psy->charging_full_trig, LED_OFF);
-+ led_trigger_event(psy->charging_trig, LED_OFF);
-+ led_trigger_event(psy->full_trig, LED_OFF);
-+ break;
-+ }
-+
-+ return;
-+}
-+
-+static int power_supply_create_bat_triggers(struct power_supply *psy)
-+{
-+ int rc = 0;
-+
-+ psy->charging_full_trig_name = kmalloc(strlen(psy->name) +
-+ sizeof("-charging-or-full"), GFP_KERNEL);
-+ if (!psy->charging_full_trig_name)
-+ goto charging_full_failed;
-+
-+ psy->charging_trig_name = kmalloc(strlen(psy->name) +
-+ sizeof("-charging"), GFP_KERNEL);
-+ if (!psy->charging_trig_name)
-+ goto charging_failed;
-+
-+ psy->full_trig_name = kmalloc(strlen(psy->name) +
-+ sizeof("-full"), GFP_KERNEL);
-+ if (!psy->full_trig_name)
-+ goto full_failed;
-+
-+ strcpy(psy->charging_full_trig_name, psy->name);
-+ strcat(psy->charging_full_trig_name, "-charging-or-full");
-+ strcpy(psy->charging_trig_name, psy->name);
-+ strcat(psy->charging_trig_name, "-charging");
-+ strcpy(psy->full_trig_name, psy->name);
-+ strcat(psy->full_trig_name, "-full");
-+
-+ led_trigger_register_simple(psy->charging_full_trig_name,
-+ &psy->charging_full_trig);
-+ led_trigger_register_charging(psy->charging_trig_name,
-+ &psy->charging_trig);
-+ led_trigger_register_simple(psy->full_trig_name,
-+ &psy->full_trig);
-+
-+ goto success;
-+
-+full_failed:
-+ kfree(psy->charging_trig_name);
-+charging_failed:
-+ kfree(psy->charging_full_trig_name);
-+charging_full_failed:
-+ rc = -ENOMEM;
-+success:
-+ return rc;
-+}
-+
-+static void power_supply_remove_bat_triggers(struct power_supply *psy)
-+{
-+ led_trigger_unregister_simple(psy->charging_full_trig);
-+ led_trigger_unregister_charging(psy->charging_trig);
-+ led_trigger_unregister_simple(psy->full_trig);
-+ kfree(psy->full_trig_name);
-+ kfree(psy->charging_trig_name);
-+ kfree(psy->charging_full_trig_name);
-+ return;
-+}
-+
-+/* Generated power specific LEDs triggers. */
-+
-+static void power_supply_update_gen_leds(struct power_supply *psy)
-+{
-+ union power_supply_propval online;
-+
-+ if (psy->get_property(psy, POWER_SUPPLY_PROP_ONLINE, &online))
-+ return;
-+
-+ dev_dbg(psy->dev, "%s %d\n", __FUNCTION__, online.intval);
-+
-+ if (online.intval)
-+ led_trigger_event(psy->online_trig, LED_FULL);
-+ else
-+ led_trigger_event(psy->online_trig, LED_OFF);
-+
-+ return;
-+}
-+
-+static int power_supply_create_gen_triggers(struct power_supply *psy)
-+{
-+ int rc = 0;
-+
-+ psy->online_trig_name = kmalloc(strlen(psy->name) + sizeof("-online"),
-+ GFP_KERNEL);
-+ if (!psy->online_trig_name)
-+ goto online_failed;
-+
-+ strcpy(psy->online_trig_name, psy->name);
-+ strcat(psy->online_trig_name, "-online");
-+
-+ led_trigger_register_simple(psy->online_trig_name, &psy->online_trig);
-+
-+ goto success;
-+
-+online_failed:
-+ rc = -ENOMEM;
-+success:
-+ return rc;
-+}
-+
-+static void power_supply_remove_gen_triggers(struct power_supply *psy)
-+{
-+ led_trigger_unregister_simple(psy->online_trig);
-+ kfree(psy->online_trig_name);
-+ return;
-+}
-+
-+/* Choice what triggers to create&update. */
-+
-+void power_supply_update_leds(struct power_supply *psy)
-+{
-+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY)
-+ power_supply_update_bat_leds(psy);
-+ else
-+ power_supply_update_gen_leds(psy);
-+ return;
-+}
-+
-+int power_supply_create_triggers(struct power_supply *psy)
-+{
-+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY)
-+ return power_supply_create_bat_triggers(psy);
-+ return power_supply_create_gen_triggers(psy);
-+}
-+
-+void power_supply_remove_triggers(struct power_supply *psy)
-+{
-+ if (psy->type == POWER_SUPPLY_TYPE_BATTERY)
-+ power_supply_remove_bat_triggers(psy);
-+ else
-+ power_supply_remove_gen_triggers(psy);
-+ return;
-+}
-Index: linux-2.6.22/drivers/power/power_supply_sysfs.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/power_supply_sysfs.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,289 @@
-+/*
-+ * Sysfs interface for the universal power supply monitor class
-+ *
-+ * Copyright © 2007 David Woodhouse <dwmw2@infradead.org>
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#include <linux/ctype.h>
-+#include <linux/power_supply.h>
-+
-+/*
-+ * This is because the name "current" breaks the device attr macro.
-+ * The "current" word resolvs to "(get_current())" so instead of
-+ * "current" "(get_current())" appears in the sysfs.
-+ *
-+ * The source of this definition is the device.h which calls __ATTR
-+ * macro in sysfs.h which calls the __stringify macro.
-+ *
-+ * Only modification that the name is not tried to be resolved
-+ * (as a macro let's say).
-+ */
-+
-+#define POWER_SUPPLY_ATTR(_name) \
-+{ \
-+ .attr = { .name = #_name, .mode = 0444, .owner = THIS_MODULE }, \
-+ .show = power_supply_show_property, \
-+ .store = NULL, \
-+}
-+
-+static struct device_attribute power_supply_attrs[];
-+
-+static ssize_t power_supply_show_property(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf) {
-+ static char *status_text[] = {
-+ "Unknown", "Charging", "Discharging", "Not charging", "Full"
-+ };
-+ static char *health_text[] = {
-+ "Unknown", "Good", "Overheat", "Dead"
-+ };
-+ static char *technology_text[] = {
-+ "Unknown", "NiMH", "Li-ion", "Li-poly"
-+ };
-+ static char *capacity_level_text[] = {
-+ "Unknown", "Critical", "Low", "Normal", "High", "Full"
-+ };
-+ ssize_t ret;
-+ struct power_supply *psy = dev_get_drvdata(dev);
-+ const ptrdiff_t off = attr - power_supply_attrs;
-+ union power_supply_propval value;
-+
-+ ret = psy->get_property(psy, off, &value);
-+
-+ if (ret < 0) {
-+ dev_err(dev, "driver failed to report `%s' property\n",
-+ attr->attr.name);
-+ return ret;
-+ }
-+
-+ if (off == POWER_SUPPLY_PROP_STATUS)
-+ return sprintf(buf, "%s\n", status_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_HEALTH)
-+ return sprintf(buf, "%s\n", health_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_TECHNOLOGY)
-+ return sprintf(buf, "%s\n", technology_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_CAPACITY_LEVEL)
-+ return sprintf(buf, "%s\n",
-+ capacity_level_text[value.intval]);
-+ else if (off == POWER_SUPPLY_PROP_MODEL_NAME)
-+ return sprintf(buf, "%s\n", value.strval);
-+
-+ return sprintf(buf, "%d\n", value.intval);
-+}
-+
-+/* Must be in the same order as POWER_SUPPLY_PROP_* */
-+static struct device_attribute power_supply_attrs[] = {
-+ /* Properties of type `int' */
-+ POWER_SUPPLY_ATTR(status),
-+ POWER_SUPPLY_ATTR(health),
-+ POWER_SUPPLY_ATTR(present),
-+ POWER_SUPPLY_ATTR(online),
-+ POWER_SUPPLY_ATTR(technology),
-+ POWER_SUPPLY_ATTR(voltage_max_design),
-+ POWER_SUPPLY_ATTR(voltage_min_design),
-+ POWER_SUPPLY_ATTR(voltage_now),
-+ POWER_SUPPLY_ATTR(voltage_avg),
-+ POWER_SUPPLY_ATTR(current_now),
-+ POWER_SUPPLY_ATTR(current_avg),
-+ POWER_SUPPLY_ATTR(charge_full_design),
-+ POWER_SUPPLY_ATTR(charge_empty_design),
-+ POWER_SUPPLY_ATTR(charge_full),
-+ POWER_SUPPLY_ATTR(charge_empty),
-+ POWER_SUPPLY_ATTR(charge_now),
-+ POWER_SUPPLY_ATTR(charge_avg),
-+ POWER_SUPPLY_ATTR(energy_full_design),
-+ POWER_SUPPLY_ATTR(energy_empty_design),
-+ POWER_SUPPLY_ATTR(energy_full),
-+ POWER_SUPPLY_ATTR(energy_empty),
-+ POWER_SUPPLY_ATTR(energy_now),
-+ POWER_SUPPLY_ATTR(energy_avg),
-+ POWER_SUPPLY_ATTR(capacity),
-+ POWER_SUPPLY_ATTR(capacity_level),
-+ POWER_SUPPLY_ATTR(temp),
-+ POWER_SUPPLY_ATTR(temp_ambient),
-+ POWER_SUPPLY_ATTR(time_to_empty_now),
-+ POWER_SUPPLY_ATTR(time_to_empty_avg),
-+ POWER_SUPPLY_ATTR(time_to_full_now),
-+ POWER_SUPPLY_ATTR(time_to_full_avg),
-+ /* Properties of type `const char *' */
-+ POWER_SUPPLY_ATTR(model_name),
-+};
-+
-+static ssize_t power_supply_show_static_attrs(struct device *dev,
-+ struct device_attribute *attr,
-+ char *buf) {
-+ static char *type_text[] = { "Battery", "UPS", "Mains", "USB" };
-+ struct power_supply *psy = dev_get_drvdata(dev);
-+
-+ return sprintf(buf, "%s\n", type_text[psy->type]);
-+}
-+
-+static struct device_attribute power_supply_static_attrs[] = {
-+ __ATTR(type, 0444, power_supply_show_static_attrs, NULL),
-+};
-+
-+int power_supply_create_attrs(struct power_supply *psy)
-+{
-+ int rc = 0;
-+ int i, j;
-+
-+ for (i = 0; i < ARRAY_SIZE(power_supply_static_attrs); i++) {
-+ rc = device_create_file(psy->dev,
-+ &power_supply_static_attrs[i]);
-+ if (rc)
-+ goto statics_failed;
-+ }
-+
-+ for (j = 0; j < psy->num_properties; j++) {
-+ rc = device_create_file(psy->dev,
-+ &power_supply_attrs[psy->properties[j]]);
-+ if (rc)
-+ goto dynamics_failed;
-+ }
-+
-+ goto succeed;
-+
-+dynamics_failed:
-+ while (j--)
-+ device_remove_file(psy->dev,
-+ &power_supply_attrs[psy->properties[j]]);
-+statics_failed:
-+ while (i--)
-+ device_remove_file(psy->dev,
-+ &power_supply_static_attrs[psy->properties[i]]);
-+succeed:
-+ return rc;
-+}
-+
-+void power_supply_remove_attrs(struct power_supply *psy)
-+{
-+ int i;
-+
-+ for (i = 0; i < ARRAY_SIZE(power_supply_static_attrs); i++)
-+ device_remove_file(psy->dev,
-+ &power_supply_static_attrs[i]);
-+
-+ for (i = 0; i < psy->num_properties; i++)
-+ device_remove_file(psy->dev,
-+ &power_supply_attrs[psy->properties[i]]);
-+
-+ return;
-+}
-+
-+static char *kstruprdup(const char *str, gfp_t gfp)
-+{
-+ char *ret, *ustr;
-+
-+ ustr = ret = kmalloc(strlen(str) + 1, gfp);
-+
-+ if (!ret)
-+ return NULL;
-+
-+ while (*str)
-+ *ustr++ = toupper(*str++);
-+
-+ *ustr = 0;
-+
-+ return ret;
-+}
-+
-+int power_supply_uevent(struct device *dev, char **envp, int num_envp,
-+ char *buffer, int buffer_size)
-+{
-+ struct power_supply *psy = dev_get_drvdata(dev);
-+ int i = 0, length = 0, ret = 0, j;
-+ char *prop_buf;
-+ char *attrname;
-+
-+ dev_dbg(dev, "uevent\n");
-+
-+ if (!psy) {
-+ dev_dbg(dev, "No power supply yet\n");
-+ return ret;
-+ }
-+
-+ dev_dbg(dev, "POWER_SUPPLY_NAME=%s\n", psy->name);
-+
-+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-+ &length, "POWER_SUPPLY_NAME=%s", psy->name);
-+ if (ret)
-+ return ret;
-+
-+ prop_buf = (char *)get_zeroed_page(GFP_KERNEL);
-+ if (!prop_buf)
-+ return -ENOMEM;
-+
-+ for (j = 0; j < ARRAY_SIZE(power_supply_static_attrs); j++) {
-+ struct device_attribute *attr;
-+ char *line;
-+
-+ attr = &power_supply_static_attrs[j];
-+
-+ ret = power_supply_show_static_attrs(dev, attr, prop_buf);
-+ if (ret < 0)
-+ goto out;
-+
-+ line = strchr(prop_buf, '\n');
-+ if (line)
-+ *line = 0;
-+
-+ attrname = kstruprdup(attr->attr.name, GFP_KERNEL);
-+ if (!attrname) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+
-+ dev_dbg(dev, "Static prop %s=%s\n", attrname, prop_buf);
-+
-+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-+ &length, "POWER_SUPPLY_%s=%s",
-+ attrname, prop_buf);
-+ kfree(attrname);
-+ if (ret)
-+ goto out;
-+ }
-+
-+ dev_dbg(dev, "%zd dynamic props\n", psy->num_properties);
-+
-+ for (j = 0; j < psy->num_properties; j++) {
-+ struct device_attribute *attr;
-+ char *line;
-+
-+ attr = &power_supply_attrs[psy->properties[j]];
-+
-+ ret = power_supply_show_property(dev, attr, prop_buf);
-+ if (ret < 0)
-+ goto out;
-+
-+ line = strchr(prop_buf, '\n');
-+ if (line)
-+ *line = 0;
-+
-+ attrname = kstruprdup(attr->attr.name, GFP_KERNEL);
-+ if (!attrname) {
-+ ret = -ENOMEM;
-+ goto out;
-+ }
-+
-+ dev_dbg(dev, "prop %s=%s\n", attrname, prop_buf);
-+
-+ ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-+ &length, "POWER_SUPPLY_%s=%s",
-+ attrname, prop_buf);
-+ kfree(attrname);
-+ if (ret)
-+ goto out;
-+ }
-+
-+out:
-+ free_page((unsigned long)prop_buf);
-+
-+ return ret;
-+}
-Index: linux-2.6.22/drivers/power/simpad-battery.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/power/simpad-battery.c 2007-08-23 12:13:52.000000000 +0200
-@@ -0,0 +1,242 @@
-+/*
-+ * linux/drivers/misc/simpad-battery.c
-+ *
-+ * Copyright (C) 2005 Holger Hans Peter Freyther
-+ * Copyright (C) 2001 Juergen Messerer
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License.
-+ *
-+ * Read the Battery Level through the UCB1x00 chip. T-Sinuspad is
-+ * unsupported for now.
-+ *
-+ */
-+
-+#include <linux/battery.h>
-+#include <asm/dma.h>
-+#include "ucb1x00.h"
-+
-+
-+/*
-+ * Conversion from AD -> mV
-+ * 7.5V = 1023 7.3313mV/Digit
-+ *
-+ * 400 Units == 9.7V
-+ * a = ADC value
-+ * 21 = ADC error
-+ * 12600 = Divident to get 2*7.3242
-+ * 860 = Divider to get 2*7.3242
-+ * 170 = Voltagedrop over
-+ */
-+#define CALIBRATE_BATTERY(a) ((((a + 21)*12600)/860) + 170)
-+
-+/*
-+ * We have two types of batteries a small and a large one
-+ * To get the right value we to distinguish between those two
-+ * 450 Units == 15 V
-+ */
-+#define CALIBRATE_SUPPLY(a) (((a) * 1500) / 45)
-+#define MIN_SUPPLY 12000 /* Less then 12V means no powersupply */
-+
-+/*
-+ * Charging Current
-+ * if value is >= 50 then charging is on
-+ */
-+#define CALIBRATE_CHARGING(a) (((a)* 1000)/(152/4)))
-+
-+struct simpad_battery_t {
-+ struct battery battery;
-+ struct ucb1x00* ucb;
-+
-+ /*
-+ * Variables for the values to one time support
-+ * T-Sinuspad as well
-+ */
-+ int min_voltage;
-+ int min_current;
-+ int min_charge;
-+
-+ int max_voltage;
-+ int max_current;
-+ int max_charge;
-+
-+ int min_supply;
-+ int charging_led_label;
-+ int charging_max_label;
-+ int batt_full;
-+ int batt_low;
-+ int batt_critical;
-+ int batt_empty;
-+};
-+
-+static int simpad_get_min_voltage(struct battery* _battery )
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->min_voltage;
-+}
-+
-+static int simpad_get_min_current(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->min_current;
-+}
-+
-+static int simpad_get_min_charge(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->min_charge;
-+}
-+
-+static int simpad_get_max_voltage(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->max_voltage;
-+}
-+
-+static int simpad_get_max_current(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->max_current;
-+}
-+
-+static int simpad_get_max_charge(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+ return battery->max_charge;
-+}
-+
-+static int simpad_get_temp(struct battery* _battery)
-+{
-+ return 0;
-+}
-+
-+static int simpad_get_voltage(struct battery* _battery)
-+{
-+ int val;
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+
-+
-+ ucb1x00_adc_enable(battery->ucb);
-+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD1, UCB_NOSYNC);
-+ ucb1x00_adc_disable(battery->ucb);
-+
-+ return CALIBRATE_BATTERY(val);
-+}
-+
-+static int simpad_get_current(struct battery* _battery)
-+{
-+ int val;
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+
-+ ucb1x00_adc_enable(battery->ucb);
-+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD3, UCB_NOSYNC);
-+ ucb1x00_adc_disable(battery->ucb);
-+
-+ return val;
-+}
-+
-+static int simpad_get_charge(struct battery* _battery)
-+{
-+ int val;
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)_battery;
-+
-+ ucb1x00_adc_enable(battery->ucb);
-+ val = ucb1x00_adc_read(battery->ucb, UCB_ADC_INP_AD2, UCB_NOSYNC);
-+ ucb1x00_adc_disable(battery->ucb);
-+
-+ return CALIBRATE_SUPPLY(val);
-+
-+}
-+
-+static int simpad_get_status(struct battery* _battery)
-+{
-+ struct simpad_battery_t* battery = (struct simpad_battery_t*)(_battery);
-+ int vcharger = simpad_get_voltage(_battery);
-+ int icharger = simpad_get_current(_battery);
-+
-+ int status = BATTERY_STATUS_UNKNOWN;
-+ if(icharger > battery->charging_led_label)
-+ status = BATTERY_STATUS_CHARGING;
-+ else if(vcharger > battery->min_supply)
-+ status = BATTERY_STATUS_NOT_CHARGING;
-+ else
-+ status = BATTERY_STATUS_DISCHARGING;
-+
-+ return status;
-+}
-+
-+static struct simpad_battery_t simpad_battery = {
-+ .battery = {
-+ .get_min_voltage = simpad_get_min_voltage,
-+ .get_min_current = simpad_get_min_current,
-+ .get_min_charge = simpad_get_min_charge,
-+ .get_max_voltage = simpad_get_max_voltage,
-+ .get_max_current = simpad_get_max_current,
-+ .get_max_charge = simpad_get_max_charge,
-+ .get_temp = simpad_get_temp,
-+ .get_voltage = simpad_get_voltage,
-+ .get_current = simpad_get_current,
-+ .get_charge = simpad_get_charge,
-+ .get_status = simpad_get_status,
-+ },
-+ .min_voltage = 0,
-+ .min_current = 0,
-+ .min_charge = 0,
-+ .max_voltage = 0,
-+ .max_current = 0,
-+ .max_charge = 0,
-+
-+ .min_supply = 1200,
-+ .charging_led_label = 18,
-+ .charging_max_label = 265,
-+ .batt_full = 8300,
-+ .batt_low = 7300,
-+ .batt_critical = 6800,
-+ .batt_empty = 6500,
-+};
-+
-+
-+
-+/*
-+ * UCB glue code
-+ */
-+static int ucb1x00_battery_add(struct class_device *dev)
-+{
-+ struct ucb1x00 *ucb = classdev_to_ucb1x00(dev);
-+ simpad_battery.ucb = ucb;
-+
-+ battery_class_register(&simpad_battery.battery);
-+
-+ return 0;
-+}
-+
-+static void ucb1x00_battery_remove(struct class_device *dev)
-+{
-+ return battery_class_unregister(&simpad_battery.battery);
-+}
-+
-+
-+static struct ucb1x00_class_interface ucb1x00_battery_interface = {
-+ .interface = {
-+ .add = ucb1x00_battery_add,
-+ .remove = ucb1x00_battery_remove,
-+ },
-+};
-+
-+
-+static int __init battery_register(void)
-+{
-+ return ucb1x00_register_interface(&ucb1x00_battery_interface);
-+}
-+
-+static void __exit battery_unregister(void)
-+{
-+ ucb1x00_unregister_interface(&ucb1x00_battery_interface);
-+}
-+
-+module_init(battery_register);
-+module_exit(battery_unregister);
-+
-+MODULE_AUTHOR("Holger Hans Peter Freyther");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.22/arch/arm/Kconfig
-===================================================================
---- linux-2.6.22.orig/arch/arm/Kconfig 2007-08-23 12:17:42.000000000 +0200
-+++ linux-2.6.22/arch/arm/Kconfig 2007-08-23 12:22:28.000000000 +0200
-@@ -1016,6 +1016,8 @@
-
- source "drivers/w1/Kconfig"
-
-+source "drivers/power/Kconfig"
-+
- source "drivers/hwmon/Kconfig"
-
- #source "drivers/l3/Kconfig"
-Index: linux-2.6.22/drivers/Kconfig
-===================================================================
---- linux-2.6.22.orig/drivers/Kconfig 2007-08-23 12:21:27.000000000 +0200
-+++ linux-2.6.22/drivers/Kconfig 2007-08-23 12:22:03.000000000 +0200
-@@ -54,6 +54,8 @@
-
- source "drivers/w1/Kconfig"
-
-+source "drivers/power/Kconfig"
-+
- source "drivers/hwmon/Kconfig"
-
- source "drivers/mfd/Kconfig"
-Index: linux-2.6.22/drivers/Makefile
-===================================================================
---- linux-2.6.22.orig/drivers/Makefile 2007-08-23 12:33:58.000000000 +0200
-+++ linux-2.6.22/drivers/Makefile 2007-08-23 12:34:34.000000000 +0200
-@@ -61,6 +61,7 @@
- obj-$(CONFIG_RTC_LIB) += rtc/
- obj-y += i2c/
- obj-$(CONFIG_W1) += w1/
-+obj-$(CONFIG_POWER_SUPPLY) += power/
- obj-$(CONFIG_HWMON) += hwmon/
- obj-$(CONFIG_PHONE) += telephony/
- obj-$(CONFIG_MD) += md/
-Index: linux-2.6.22/include/linux/power_supply.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/include/linux/power_supply.h 2007-08-23 12:37:10.000000000 +0200
-@@ -0,0 +1,175 @@
-+/*
-+ * Universal power supply monitor class
-+ *
-+ * Copyright (c) 2007 Anton Vorontsov <cbou@mail.ru>
-+ * Copyright (c) 2004 Szabolcs Gyurko
-+ * Copyright (c) 2003 Ian Molton <spyro@f2s.com>
-+ *
-+ * Modified: 2004, Oct Szabolcs Gyurko
-+ *
-+ * You may use this code as per GPL version 2
-+ */
-+
-+#ifndef __LINUX_POWER_SUPPLY_H__
-+#define __LINUX_POWER_SUPPLY_H__
-+
-+#include <linux/device.h>
-+#include <linux/workqueue.h>
-+#include <linux/leds.h>
-+
-+/*
-+ * All voltages, currents, charges, energies, time and temperatures in uV,
-+ * uA, uAh, uWh, seconds and tenths of degree Celsius unless otherwise
-+ * stated. It's driver's job to convert its raw values to units in which
-+ * this class operates.
-+ */
-+
-+/*
-+ * For systems where the charger determines the maximum battery capacity
-+ * the min and max fields should be used to present these values to user
-+ * space. Unused/unknown fields will not appear in sysfs.
-+ */
-+
-+enum {
-+ POWER_SUPPLY_STATUS_UNKNOWN = 0,
-+ POWER_SUPPLY_STATUS_CHARGING,
-+ POWER_SUPPLY_STATUS_DISCHARGING,
-+ POWER_SUPPLY_STATUS_NOT_CHARGING,
-+ POWER_SUPPLY_STATUS_FULL,
-+};
-+
-+enum {
-+ POWER_SUPPLY_HEALTH_UNKNOWN = 0,
-+ POWER_SUPPLY_HEALTH_GOOD,
-+ POWER_SUPPLY_HEALTH_OVERHEAT,
-+ POWER_SUPPLY_HEALTH_DEAD,
-+};
-+
-+enum {
-+ POWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,
-+ POWER_SUPPLY_TECHNOLOGY_NIMH,
-+ POWER_SUPPLY_TECHNOLOGY_LION,
-+ POWER_SUPPLY_TECHNOLOGY_LIPO,
-+};
-+
-+enum {
-+ POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
-+ POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL,
-+ POWER_SUPPLY_CAPACITY_LEVEL_LOW,
-+ POWER_SUPPLY_CAPACITY_LEVEL_NORMAL,
-+ POWER_SUPPLY_CAPACITY_LEVEL_HIGH,
-+ POWER_SUPPLY_CAPACITY_LEVEL_FULL,
-+};
-+
-+enum power_supply_property {
-+ /* Properties of type `int' */
-+ POWER_SUPPLY_PROP_STATUS = 0,
-+ POWER_SUPPLY_PROP_HEALTH,
-+ POWER_SUPPLY_PROP_PRESENT,
-+ POWER_SUPPLY_PROP_ONLINE,
-+ POWER_SUPPLY_PROP_TECHNOLOGY,
-+ POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
-+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
-+ POWER_SUPPLY_PROP_VOLTAGE_AVG,
-+ POWER_SUPPLY_PROP_CURRENT_NOW,
-+ POWER_SUPPLY_PROP_CURRENT_AVG,
-+ POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN,
-+ POWER_SUPPLY_PROP_CHARGE_FULL,
-+ POWER_SUPPLY_PROP_CHARGE_EMPTY,
-+ POWER_SUPPLY_PROP_CHARGE_NOW,
-+ POWER_SUPPLY_PROP_CHARGE_AVG,
-+ POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
-+ POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN,
-+ POWER_SUPPLY_PROP_ENERGY_FULL,
-+ POWER_SUPPLY_PROP_ENERGY_EMPTY,
-+ POWER_SUPPLY_PROP_ENERGY_NOW,
-+ POWER_SUPPLY_PROP_ENERGY_AVG,
-+ POWER_SUPPLY_PROP_CAPACITY, /* in percents! */
-+ POWER_SUPPLY_PROP_CAPACITY_LEVEL,
-+ POWER_SUPPLY_PROP_TEMP,
-+ POWER_SUPPLY_PROP_TEMP_AMBIENT,
-+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,
-+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
-+ POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,
-+ POWER_SUPPLY_PROP_TIME_TO_FULL_AVG,
-+ /* Properties of type `const char *' */
-+ POWER_SUPPLY_PROP_MODEL_NAME,
-+};
-+
-+enum power_supply_type {
-+ POWER_SUPPLY_TYPE_BATTERY = 0,
-+ POWER_SUPPLY_TYPE_UPS,
-+ POWER_SUPPLY_TYPE_MAINS,
-+ POWER_SUPPLY_TYPE_USB,
-+};
-+
-+union power_supply_propval {
-+ int intval;
-+ const char *strval;
-+};
-+
-+struct power_supply {
-+ const char *name;
-+ enum power_supply_type type;
-+ enum power_supply_property *properties;
-+ size_t num_properties;
-+
-+ char **supplied_to;
-+ size_t num_supplicants;
-+
-+ int (*get_property)(struct power_supply *psy,
-+ enum power_supply_property psp,
-+ union power_supply_propval *val);
-+ void (*external_power_changed)(struct power_supply *psy);
-+
-+ /* For APM emulation, think legacy userspace. */
-+ int use_for_apm;
-+
-+ /* private */
-+ struct device *dev;
-+ struct work_struct changed_work;
-+
-+#ifdef CONFIG_LEDS_TRIGGERS
-+ struct led_trigger *charging_full_trig;
-+ char *charging_full_trig_name;
-+ struct led_trigger *charging_trig;
-+ char *charging_trig_name;
-+ struct led_trigger *full_trig;
-+ char *full_trig_name;
-+ struct led_trigger *online_trig;
-+ char *online_trig_name;
-+#endif
-+};
-+
-+/*
-+ * This is recommended structure to specify static power supply parameters.
-+ * Generic one, parametrizable for different power supplies. Power supply
-+ * class itself does not use it, but that's what implementing most platform
-+ * drivers, should try reuse for consistency.
-+ */
-+
-+struct power_supply_info {
-+ const char *name;
-+ int technology;
-+ int voltage_max_design;
-+ int voltage_min_design;
-+ int charge_full_design;
-+ int charge_empty_design;
-+ int energy_full_design;
-+ int energy_empty_design;
-+ int use_for_apm;
-+};
-+
-+extern void power_supply_changed(struct power_supply *psy);
-+extern int power_supply_am_i_supplied(struct power_supply *psy);
-+
-+extern int power_supply_register(struct device *parent,
-+ struct power_supply *psy);
-+extern void power_supply_unregister(struct power_supply *psy);
-+
-+/* For APM emulation, think legacy userspace. */
-+extern struct class *power_supply_class;
-+
-+#endif /* __LINUX_POWER_SUPPLY_H__ */
diff --git a/packages/linux/linux-rp-2.6.23/tmio-ohci-r9.patch b/packages/linux/linux-rp-2.6.23/tmio-ohci-r9.patch
index 034acc7b8e..9b8434a0bc 100644
--- a/packages/linux/linux-rp-2.6.23/tmio-ohci-r9.patch
+++ b/packages/linux/linux-rp-2.6.23/tmio-ohci-r9.patch
@@ -3,8 +3,8 @@ Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/usb/host/ohci-tmio.c 2007-11-13 01:35:13.049455112 +0300
-@@ -0,0 +1,417 @@
++++ linux-2.6.23/drivers/usb/host/ohci-tmio.c 2007-11-14 16:58:47.637707413 +0300
+@@ -0,0 +1,530 @@
+/*
+ * OHCI HCD(Host Controller Driver) for USB.
+ *
@@ -53,6 +53,14 @@ Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
+
+/*-------------------------------------------------------------------------*/
+
++#define MAX_TMIO_USB_PORTS 2
++static bool default_tmio_ports[MAX_TMIO_USB_PORTS];
++module_param_array(default_tmio_ports, bool, NULL, 0644);
++MODULE_PARM_DESC(default_tmio_ports,
++ "disable specified TC6393 usb ports (default: all enabled)");
++
++/*-------------------------------------------------------------------------*/
++
+/*
+ * USB Host Controller Configuration Register
+ */
@@ -87,8 +95,8 @@ Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
+struct {
+ unsigned gcken:1; /* D0 */
+ unsigned ckrnen:1; /* D1 */
-+ unsigned uspw1:1; /* D2 USB Port 1 Power Disable */
-+ unsigned uspw2:1; /* D3 USB Port 2 Power Disable */
++ unsigned uspw0:1; /* D2 USB Port 1 Power Disable */
++ unsigned uspw1:1; /* D3 USB Port 2 Power Disable */
+ unsigned x00:4;
+ unsigned pmee:1; /* D8 */
+ unsigned x01:6;
@@ -100,6 +108,7 @@ Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
+
+struct tmio_hcd {
+ struct tmio_uhccr __iomem *ccr;
++ bool disabled_ports[MAX_TMIO_USB_PORTS];
+};
+
+#define hcd_to_tmio(hcd) ((struct tmio_hcd *)(hcd_to_ohci(hcd) + 1))
@@ -107,6 +116,39 @@ Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
+
+/*-------------------------------------------------------------------------*/
+
++struct indexed_device_attribute{
++ struct device_attribute dev_attr;
++ int index;
++};
++#define to_indexed_dev_attr(_dev_attr) \
++ container_of(_dev_attr, struct indexed_device_attribute, dev_attr)
++
++#define INDEXED_ATTR(_name, _mode, _show, _store, _index) \
++ { .dev_attr = __ATTR(_name ## _index, _mode, _show, _store), \
++ .index = _index }
++
++#define INDEXED_DEVICE_ATTR(_name, _mode, _show, _store, _index) \
++struct indexed_device_attribute dev_attr_##_name ## _index \
++ = INDEXED_ATTR(_name, _mode, _show, _store, _index)
++
++/*-------------------------------------------------------------------------*/
++
++
++static void tmio_fill_pm(struct tmio_hcd *tmio, union tmio_uhccr_pm *pm)
++{
++ pm->raw = 0;
++
++ pm->pmee = 1;
++ pm->pmes = 1;
++ pm->gcken = 1;
++ pm->ckrnen = 1;
++
++ if (tmio->disabled_ports[0])
++ pm->uspw0 = 1;
++ if (tmio->disabled_ports[1])
++ pm->uspw1 = 1;
++}
++
+static void tmio_stop_hc(struct device *dev)
+{
+ struct tmio_device *tdev = dev_to_tdev(dev);
@@ -117,8 +159,8 @@ Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
+
+ pm.gcken = 1;
+ pm.ckrnen = 1;
++ pm.uspw0 = 1;
+ pm.uspw1 = 1;
-+ pm.uspw2 = 1;
+
+ iowrite8(0, &ccr->intc);
+ iowrite8(0, &ccr->ilme);
@@ -139,10 +181,7 @@ Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
+ union tmio_uhccr_pm pm = {0};
+ unsigned long base = hcd->rsrc_start;
+
-+ pm.pmes = 1;
-+ pm.pmee = 1;
-+ pm.ckrnen = 1;
-+ pm.gcken = 1;
++ tmio_fill_pm(tmio, &pm);
+
+ tdev->ops->clock(dev, 1);
+ tdev->ops->function(dev, 1);
@@ -157,6 +196,54 @@ Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
+ ioread8(&ccr->revid), hcd->rsrc_start, hcd->irq);
+}
+
++static ssize_t tmio_disabled_port_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct usb_hcd *hcd = dev_get_drvdata(dev);
++ struct tmio_hcd *tmio = hcd_to_tmio(hcd);
++ int index = to_indexed_dev_attr(attr)->index;
++ return snprintf(buf, PAGE_SIZE, "%c",
++ tmio->disabled_ports[index]? 'Y': 'N');
++}
++
++static ssize_t tmio_disabled_port_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct usb_hcd *hcd = dev_get_drvdata(dev);
++ struct tmio_hcd *tmio = hcd_to_tmio(hcd);
++ struct tmio_uhccr __iomem *ccr = tmio->ccr;
++ union tmio_uhccr_pm pm = {0};
++ int index = to_indexed_dev_attr(attr)->index;
++
++ if (!count)
++ return -EINVAL;
++
++ switch (buf[0]) {
++ case 'y': case 'Y': case '1':
++ tmio->disabled_ports[index] = true;
++ break;
++ case 'n': case 'N': case '0':
++ tmio->disabled_ports[index] = false;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ tmio_fill_pm(tmio, &pm);
++
++ iowrite16(pm.raw, &ccr->pm);
++
++ return 1;
++}
++
++
++static INDEXED_DEVICE_ATTR(disabled_usb_port, S_IRUGO | S_IWUSR,
++ tmio_disabled_port_show, tmio_disabled_port_store, 0);
++static INDEXED_DEVICE_ATTR(disabled_usb_port, S_IRUGO | S_IWUSR,
++ tmio_disabled_port_show, tmio_disabled_port_store, 1);
++
+static int usb_hcd_tmio_probe(const struct hc_driver *driver,
+ struct device *dev)
+{
@@ -195,6 +282,9 @@ Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
+ hcd->rsrc_len = regs->end - regs->start + 1;
+
+ tmio = hcd_to_tmio(hcd);
++ memcpy(tmio->disabled_ports,
++ default_tmio_ports,
++ sizeof(default_tmio_ports));
+
+ tmio->ccr = ioremap(config->start, config->end - config->start + 1);
+ if (!tmio->ccr) {
@@ -224,11 +314,23 @@ Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
+ ohci = hcd_to_ohci(hcd);
+ ohci_hcd_init(ohci);
+
++ retval = device_create_file(dev,
++ &dev_attr_disabled_usb_port0.dev_attr);
++ retval |= device_create_file(dev,
++ &dev_attr_disabled_usb_port1.dev_attr);
++
++ if (retval)
++ goto err_create_file;
++
+ retval = usb_add_hcd(hcd, irq->start, IRQF_DISABLED);
+
+ if (retval == 0)
+ return retval;
+
++err_create_file:
++ device_remove_file(dev, &dev_attr_disabled_usb_port1.dev_attr);
++ device_remove_file(dev, &dev_attr_disabled_usb_port0.dev_attr);
++
+ tmio_stop_hc(dev);
+
+ dmabounce_unregister_dev(dev);
@@ -256,6 +358,8 @@ Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
+ struct tmio_hcd *tmio = hcd_to_tmio(hcd);
+
+ usb_remove_hcd(hcd);
++ device_remove_file(dev, &dev_attr_disabled_usb_port1.dev_attr);
++ device_remove_file(dev, &dev_attr_disabled_usb_port0.dev_attr);
+ tmio_stop_hc(dev);
+ dmabounce_unregister_dev(dev);
+ dma_release_declared_memory(dev);
@@ -343,13 +447,22 @@ Index: linux-2.6.23/drivers/usb/host/ohci-tmio.c
+static int ohci_hcd_tmio_drv_probe(struct device *dev)
+{
+ struct resource *sram = tmio_resource_mem(dev);
++ int retval;
+
+ dev->dma_mask = &dma_mask;
+ dev->coherent_dma_mask = DMA_32BIT_MASK;
+
++ /* FIXME: move dmabounce checkers to tc6393 core? */
+ dmabounce_register_checker(tmio_dmabounce_check, sram);
+
-+ return usb_hcd_tmio_probe(&ohci_tmio_hc_driver, dev);
++ retval = usb_hcd_tmio_probe(&ohci_tmio_hc_driver, dev);
++
++ if (retval == 0)
++ return retval;
++
++ dmabounce_remove_checker(tmio_dmabounce_check, sram);
++
++ return retval;
+}
+
+static int ohci_hcd_tmio_drv_remove(struct device *dev)
@@ -437,7 +550,7 @@ Index: linux-2.6.23/drivers/usb/host/Kconfig
Index: linux-2.6.23/drivers/usb/host/ohci-hcd.c
===================================================================
--- linux-2.6.23.orig/drivers/usb/host/ohci-hcd.c 2007-11-12 13:46:52.894560883 +0300
-+++ linux-2.6.23/drivers/usb/host/ohci-hcd.c 2007-11-13 01:03:53.950798640 +0300
++++ linux-2.6.23/drivers/usb/host/ohci-hcd.c 2007-11-14 16:44:32.788069355 +0300
@@ -915,6 +915,10 @@
#define PLATFORM_DRIVER usb_hcd_pnx4008_driver
#endif
diff --git a/packages/linux/linux-rp-2.6.23/versatile-armv6.patch b/packages/linux/linux-rp-2.6.23/versatile-armv6.patch
new file mode 100644
index 0000000000..e2d0060ac3
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.23/versatile-armv6.patch
@@ -0,0 +1,19 @@
+---
+ arch/arm/mm/Kconfig | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.23.orig/arch/arm/mm/Kconfig
++++ linux-2.6.23/arch/arm/mm/Kconfig
+@@ -343,11 +343,11 @@ config CPU_XSC3
+ select IO_36
+
+ # ARMv6
+ config CPU_V6
+ bool "Support ARM V6 processor"
+- depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3
++ depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_VERSATILE_PB
+ default y if ARCH_MX3
+ select CPU_32v6
+ select CPU_ABRT_EV6
+ select CPU_CACHE_V6
+ select CPU_CACHE_VIPT
diff --git a/packages/linux/linux-rp-2.6.23/vt_ioctl_race.patch b/packages/linux/linux-rp-2.6.23/vt_ioctl_race.patch
deleted file mode 100644
index 5a51d1c3f5..0000000000
--- a/packages/linux/linux-rp-2.6.23/vt_ioctl_race.patch
+++ /dev/null
@@ -1,46 +0,0 @@
----
- drivers/char/vt_ioctl.c | 8 +++++---
- 1 file changed, 5 insertions(+), 3 deletions(-)
-
-Index: linux-2.6.22/drivers/char/vt_ioctl.c
-===================================================================
---- linux-2.6.22.orig/drivers/char/vt_ioctl.c 2007-07-09 01:32:17.000000000 +0200
-+++ linux-2.6.22/drivers/char/vt_ioctl.c 2007-09-27 11:58:42.000000000 +0200
-@@ -770,6 +770,7 @@
- /*
- * Switching-from response
- */
-+ acquire_console_sem();
- if (vc->vt_newvt >= 0) {
- if (arg == 0)
- /*
-@@ -784,7 +785,6 @@
- * complete the switch.
- */
- int newvt;
-- acquire_console_sem();
- newvt = vc->vt_newvt;
- vc->vt_newvt = -1;
- i = vc_allocate(newvt);
-@@ -798,7 +798,6 @@
- * other console switches..
- */
- complete_change_console(vc_cons[newvt].d);
-- release_console_sem();
- }
- }
-
-@@ -810,9 +809,12 @@
- /*
- * If it's just an ACK, ignore it
- */
-- if (arg != VT_ACKACQ)
-+ if (arg != VT_ACKACQ) {
-+ release_console_sem();
- return -EINVAL;
-+ }
- }
-+ release_console_sem();
-
- return 0;
-
diff --git a/packages/linux/linux-rp-2.6.23/w100fb-unused-var.patch b/packages/linux/linux-rp-2.6.23/w100fb-unused-var.patch
deleted file mode 100644
index 8cbbb6bd01..0000000000
--- a/packages/linux/linux-rp-2.6.23/w100fb-unused-var.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-From: Marcin Juszkiewicz <openembedded@haerwu.biz>
-
-drivers/video/w100fb.c: In function ‘w100fb_imageblit’:
-drivers/video/w100fb.c:507: warning: unused variable ‘par’
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@haerwu.biz>
-
---- linux-2.6.23/drivers/video/w100fb.c 2007-10-11 16:52:30.000000000 +0200
-+++ linux-2.6.23/drivers/video/w100fb.c 2007-10-15 12:56:01.000000000 +0200
-@@ -504,7 +504,6 @@ static void w100_hostdata(u32 width, u32
- static void w100fb_imageblit(struct fb_info *info,
- const struct fb_image *image)
- {
-- struct w100fb_par *par = info->par;
- union dp_gui_master_cntl_u gmc;
- u32 fgcolor, bgcolor;
-
diff --git a/packages/linux/linux-rp-2.6.24/.mtn2git_empty b/packages/linux/linux-rp-2.6.24/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/.mtn2git_empty
diff --git a/packages/linux/linux-rp-2.6.24/binutils-buildid-arm.patch b/packages/linux/linux-rp-2.6.24/binutils-buildid-arm.patch
new file mode 100644
index 0000000000..68e35e89e1
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/binutils-buildid-arm.patch
@@ -0,0 +1,16 @@
+---
+ arch/arm/kernel/vmlinux.lds.S | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: linux-2.6.22/arch/arm/kernel/vmlinux.lds.S
+===================================================================
+--- linux-2.6.22.orig/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:32:29.000000000 +0200
++++ linux-2.6.22/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:33:42.000000000 +0200
+@@ -94,6 +94,7 @@
+ TEXT_TEXT
+ SCHED_TEXT
+ LOCK_TEXT
++ *(.note.*)
+ #ifdef CONFIG_MMU
+ *(.fixup)
+ #endif
diff --git a/packages/linux/linux-rp-2.6.21/connectplus-prevent-oops-HACK.patch b/packages/linux/linux-rp-2.6.24/connectplus-prevent-oops-HACK.patch
index b5439c62e7..b5439c62e7 100644
--- a/packages/linux/linux-rp-2.6.21/connectplus-prevent-oops-HACK.patch
+++ b/packages/linux/linux-rp-2.6.24/connectplus-prevent-oops-HACK.patch
diff --git a/packages/linux/linux-rp-2.6.16/connectplus-remove-ide-HACK.patch b/packages/linux/linux-rp-2.6.24/connectplus-remove-ide-HACK.patch
index 4414b21191..4414b21191 100644
--- a/packages/linux/linux-rp-2.6.16/connectplus-remove-ide-HACK.patch
+++ b/packages/linux/linux-rp-2.6.24/connectplus-remove-ide-HACK.patch
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-akita b/packages/linux/linux-rp-2.6.24/defconfig-akita
new file mode 100644
index 0000000000..5e4560c39d
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/defconfig-akita
@@ -0,0 +1,1740 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc8
+# Sun Jan 20 18:29:33 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+# CONFIG_PXA_SHARPSL_25x is not set
+CONFIG_PXA_SHARPSL_27x=y
+# CONFIG_MACH_HX2750 is not set
+CONFIG_MACH_AKITA=y
+CONFIG_MACH_SPITZ=y
+CONFIG_MACH_BORZOI=y
+CONFIG_PXA27x=y
+CONFIG_PXA_SHARP_Cxx00=y
+CONFIG_PXA_SSP=y
+# CONFIG_PXA_KEYS is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARPSL_PM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=m
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_PCMCIA_RAYCS is not set
+# CONFIG_LIBERTAS is not set
+CONFIG_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_ATMEL is not set
+CONFIG_AIRO_CS=m
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_CORGI is not set
+CONFIG_KEYBOARD_SPITZ=y
+# CONFIG_KEYBOARD_PXA27x is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_CORGI=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_USB_DSBR=m
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_DEFERRED_IO is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_W100 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_AC97_CODEC is not set
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=m
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_SPITZ=m
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_WM8750=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+# CONFIG_AC97_BUS is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=m
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_SPITZ=y
+# CONFIG_LEDS_TOSA is not set
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_SYSFS is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-bootcdx86 b/packages/linux/linux-rp-2.6.24/defconfig-bootcdx86
new file mode 100644
index 0000000000..fda13665cd
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/defconfig-bootcdx86
@@ -0,0 +1,1994 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc8
+# Sun Jan 20 18:34:58 2008
+#
+# CONFIG_64BIT is not set
+CONFIG_X86_32=y
+# CONFIG_X86_64 is not set
+CONFIG_X86=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_MMU=y
+CONFIG_ZONE_DMA=y
+CONFIG_QUICKLIST=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
+# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+# CONFIG_GENERIC_TIME_VSYSCALL is not set
+CONFIG_ARCH_SUPPORTS_OPROFILE=y
+# CONFIG_ZONE_DMA32 is not set
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+# CONFIG_AUDIT_ARCH is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+CONFIG_KTIME_SCALAR=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+CONFIG_AUDIT_TREE=y
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=15
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_X86_VSMP is not set
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+# CONFIG_PARAVIRT_GUEST is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+CONFIG_M686=y
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
+# CONFIG_MPSC is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_GENERIC_CPU is not set
+CONFIG_X86_GENERIC=y
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_X86_XADD=y
+CONFIG_X86_PPRO_FENCE=y
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_GOOD_APIC=y
+CONFIG_X86_INTEL_USERCOPY=y
+CONFIG_X86_USE_PPRO_CHECKSUM=y
+CONFIG_X86_TSC=y
+CONFIG_X86_CMOV=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=4
+CONFIG_HPET_TIMER=y
+CONFIG_NR_CPUS=8
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT_BKL=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+CONFIG_X86_MCE_NONFATAL=y
+CONFIG_X86_MCE_P4THERMAL=y
+CONFIG_VM86=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+# CONFIG_X86_REBOOTFIXUPS is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+CONFIG_NOHIGHMEM=y
+# CONFIG_HIGHMEM4G is not set
+# CONFIG_HIGHMEM64G is not set
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_3G_OPT is not set
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_2G_OPT is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_X86_PAE is not set
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_NR_QUICK=1
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+# CONFIG_EFI is not set
+CONFIG_IRQBALANCE=y
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_KEXEC=y
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+CONFIG_HOTPLUG_CPU=y
+CONFIG_COMPAT_VDSO=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_SMP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_HIBERNATION_SMP_POSSIBLE=y
+# CONFIG_HIBERNATION is not set
+CONFIG_ACPI=y
+CONFIG_ACPI_SLEEP=y
+# CONFIG_ACPI_PROCFS is not set
+CONFIG_ACPI_PROCFS_POWER=y
+CONFIG_ACPI_SYSFS_POWER=y
+CONFIG_ACPI_PROC_EVENT=y
+CONFIG_ACPI_AC=y
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BUTTON=y
+# CONFIG_ACPI_VIDEO is not set
+CONFIG_ACPI_FAN=y
+# CONFIG_ACPI_DOCK is not set
+CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_HOTPLUG_CPU=y
+CONFIG_ACPI_THERMAL=y
+# CONFIG_ACPI_ASUS is not set
+# CONFIG_ACPI_TOSHIBA is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_CONTAINER=y
+# CONFIG_ACPI_SBS is not set
+# CONFIG_APM is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_IDLE is not set
+
+#
+# Bus options (PCI etc.)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_PCIEAER=y
+CONFIG_ARCH_SUPPORTS_MSI=y
+CONFIG_PCI_MSI=y
+CONFIG_PCI_LEGACY=y
+CONFIG_HT_IRQ=y
+CONFIG_ISA_DMA_API=y
+CONFIG_ISA=y
+# CONFIG_EISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+CONFIG_K8_NB=y
+# CONFIG_PCCARD is not set
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats / Emulations
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+# CONFIG_VIA_FIR is not set
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+# CONFIG_MTD is not set
+CONFIG_PARPORT=y
+CONFIG_PARPORT_PC=y
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
+# CONFIG_PARPORT_1284 is not set
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+# CONFIG_ISAPNP is not set
+# CONFIG_PNPBIOS is not set
+CONFIG_PNPACPI=y
+CONFIG_BLK_DEV=y
+CONFIG_BLK_DEV_FD=y
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=65536
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_IBM_ASM is not set
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_ASUS_LAPTOP is not set
+# CONFIG_FUJITSU_LAPTOP is not set
+# CONFIG_MSI_LAPTOP is not set
+# CONFIG_SONY_LAPTOP is not set
+# CONFIG_THINKPAD_ACPI is not set
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_HD_IDE is not set
+CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_IDEACPI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_BLK_DEV_PLATFORM is not set
+CONFIG_BLK_DEV_CMD640=y
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_IDEPNP is not set
+
+#
+# PCI IDE chipsets support
+#
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+CONFIG_IDEPCI_PCIBUS_ORDER=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_RZ1000=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_AEC62XX 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_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 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_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_JMICRON is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+CONFIG_BLK_DEV_PIIX=y
+# CONFIG_BLK_DEV_IT8213 is not set
+# CONFIG_BLK_DEV_IT821X is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_BLK_DEV_TC86C001 is not set
+# CONFIG_IDE_ARM is not set
+
+#
+# Other IDE chipsets support
+#
+
+#
+# Note: most of these also require special kernel boot parameters
+#
+# CONFIG_BLK_DEV_4DRIVES is not set
+# CONFIG_BLK_DEV_ALI14XX is not set
+# CONFIG_BLK_DEV_DTC2278 is not set
+# CONFIG_BLK_DEV_HT6560B is not set
+# CONFIG_BLK_DEV_QD65XX is not set
+# CONFIG_BLK_DEV_UMC8672 is not set
+CONFIG_BLK_DEV_IDEDMA=y
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+CONFIG_SCSI_DPT_I2O=m
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA 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_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_SEAGATE is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_ULTRASTOR is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_NET_SB1000 is not set
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+CONFIG_NET_VENDOR_3COM=y
+# CONFIG_EL1 is not set
+# CONFIG_EL2 is not set
+# CONFIG_ELPLUS is not set
+# CONFIG_EL16 is not set
+# CONFIG_EL3 is not set
+# CONFIG_3C515 is not set
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+CONFIG_LANCE=m
+CONFIG_NET_VENDOR_SMC=y
+CONFIG_WD80x3=m
+CONFIG_ULTRA=m
+CONFIG_SMC9194=m
+# CONFIG_NET_VENDOR_RACAL is not set
+CONFIG_NET_TULIP=y
+# CONFIG_DE2104X is not set
+CONFIG_TULIP=m
+CONFIG_TULIP_MWI=y
+CONFIG_TULIP_MMIO=y
+CONFIG_TULIP_NAPI=y
+CONFIG_TULIP_NAPI_HW_MITIGATION=y
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+CONFIG_AT1700=m
+CONFIG_DEPCA=m
+CONFIG_HP100=m
+CONFIG_NET_ISA=y
+# CONFIG_E2100 is not set
+# CONFIG_EWRK3 is not set
+# CONFIG_EEXPRESS is not set
+# CONFIG_EEXPRESS_PRO is not set
+# CONFIG_HPLAN_PLUS is not set
+# CONFIG_HPLAN is not set
+# CONFIG_LP486E is not set
+# CONFIG_ETH16I is not set
+CONFIG_NE2000=y
+# CONFIG_ZNET is not set
+# CONFIG_SEEQ8005 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_PCNET32_NAPI=y
+CONFIG_AMD8111_ETH=m
+CONFIG_AMD8111E_NAPI=y
+CONFIG_ADAPTEC_STARFIRE=m
+CONFIG_ADAPTEC_STARFIRE_NAPI=y
+CONFIG_AC3200=m
+CONFIG_APRICOT=m
+CONFIG_B44=m
+CONFIG_B44_PCI_AUTOSELECT=y
+CONFIG_B44_PCICORE_AUTOSELECT=y
+CONFIG_B44_PCI=y
+CONFIG_FORCEDETH=m
+CONFIG_FORCEDETH_NAPI=y
+CONFIG_CS89x0=m
+CONFIG_EEPRO100=m
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=y
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+CONFIG_8139TOO_PIO=y
+CONFIG_8139TOO_TUNE_TWISTER=y
+CONFIG_8139TOO_8129=y
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+CONFIG_SUNDANCE_MMIO=y
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+CONFIG_VIA_RHINE_MMIO=y
+CONFIG_VIA_RHINE_NAPI=y
+CONFIG_SC92031=m
+# CONFIG_NET_POCKET is not set
+CONFIG_NETDEV_1000=y
+CONFIG_ACENIC=m
+CONFIG_ACENIC_OMIT_TIGON_I=y
+CONFIG_DL2K=m
+CONFIG_E1000=m
+CONFIG_E1000_NAPI=y
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_E1000E is not set
+# CONFIG_IP1000 is not set
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+CONFIG_R8169_NAPI=y
+CONFIG_SIS190=m
+CONFIG_SKGE=m
+CONFIG_SKY2=m
+CONFIG_SK98LIN=m
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+CONFIG_BNX2=m
+CONFIG_QLA3XXX=m
+CONFIG_ATL1=m
+CONFIG_NETDEV_10000=y
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_IXGBE is not set
+# CONFIG_IXGB is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+# CONFIG_NIU is not set
+# CONFIG_MLX4_CORE is not set
+# CONFIG_TEHUTI is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_LIBERTAS is not set
+# CONFIG_AIRO is not set
+CONFIG_HERMES=m
+# CONFIG_PLX_HERMES is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_NORTEL_HERMES is not set
+# CONFIG_PCI_HERMES is not set
+# CONFIG_ATMEL is not set
+# CONFIG_PRISM54 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+# CONFIG_HOSTAP_PLX is not set
+# CONFIG_HOSTAP_PCI is not set
+# CONFIG_BCM43XX is not set
+# CONFIG_ZD1211RW is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_LIFEBOOK=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TABLET=y
+# CONFIG_TABLET_USB_ACECAD is not set
+# CONFIG_TABLET_USB_AIPTEK is not set
+# CONFIG_TABLET_USB_GTCO is not set
+# CONFIG_TABLET_USB_KBTAB is not set
+CONFIG_TABLET_USB_WACOM=y
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_PCSPKR is not set
+# CONFIG_INPUT_WISTRON_BTNS is not set
+# CONFIG_INPUT_ATLAS_BTNS is not set
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_CONSOLE is not set
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_PRINTER=y
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+# CONFIG_MWAVE is not set
+# CONFIG_PC8736x_GPIO is not set
+# CONFIG_NSC_GPIO is not set
+# CONFIG_CS5535_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+# CONFIG_HANGCHECK_TIMER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+CONFIG_DEVPORT=y
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+CONFIG_SSB=m
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_PMS is not set
+# CONFIG_VIDEO_BWQCAM is not set
+# CONFIG_VIDEO_CQCAM is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_STRADIS is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_CADET is not set
+# CONFIG_RADIO_RTRACK is not set
+# CONFIG_RADIO_RTRACK2 is not set
+# CONFIG_RADIO_AZTECH is not set
+# CONFIG_RADIO_GEMTEK is not set
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO 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_USB_DSBR=m
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_AGP=m
+CONFIG_AGP_ALI=m
+CONFIG_AGP_ATI=m
+CONFIG_AGP_AMD=m
+CONFIG_AGP_AMD64=m
+CONFIG_AGP_INTEL=m
+CONFIG_AGP_NVIDIA=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_SWORKS=m
+CONFIG_AGP_VIA=m
+CONFIG_AGP_EFFICEON=m
+CONFIG_DRM=m
+# CONFIG_DRM_TDFX is not set
+# CONFIG_DRM_R128 is not set
+# CONFIG_DRM_RADEON is not set
+# CONFIG_DRM_I810 is not set
+# CONFIG_DRM_I830 is not set
+# CONFIG_DRM_I915 is not set
+# CONFIG_DRM_MGA is not set
+# CONFIG_DRM_SIS is not set
+# CONFIG_DRM_VIA is not set
+# CONFIG_DRM_SAVAGE is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=m
+CONFIG_FB_CFB_COPYAREA=m
+CONFIG_FB_CFB_IMAGEBLIT=m
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_DEFERRED_IO is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+CONFIG_FB_UVESA=m
+# CONFIG_FB_VESA is not set
+# CONFIG_FB_EFI is not set
+# CONFIG_FB_HECUBA is not set
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_I810 is not set
+# CONFIG_FB_LE80578 is not set
+# CONFIG_FB_INTEL is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_VT8623 is not set
+# CONFIG_FB_CYBLA is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CORGI=m
+# CONFIG_BACKLIGHT_PROGEAR is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_MTS64 is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_PORTMAN2X4 is not set
+
+#
+# ISA devices
+#
+# CONFIG_SND_ADLIB is not set
+# CONFIG_SND_AD1816A is not set
+# CONFIG_SND_AD1848 is not set
+# CONFIG_SND_ALS100 is not set
+# CONFIG_SND_AZT2320 is not set
+# CONFIG_SND_CMI8330 is not set
+# CONFIG_SND_CS4231 is not set
+# CONFIG_SND_CS4232 is not set
+# CONFIG_SND_CS4236 is not set
+# CONFIG_SND_DT019X is not set
+# CONFIG_SND_ES968 is not set
+# CONFIG_SND_ES1688 is not set
+# CONFIG_SND_ES18XX is not set
+# CONFIG_SND_SC6000 is not set
+# CONFIG_SND_GUSCLASSIC is not set
+# CONFIG_SND_GUSEXTREME is not set
+# CONFIG_SND_GUSMAX is not set
+# CONFIG_SND_INTERWAVE is not set
+# CONFIG_SND_INTERWAVE_STB 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_MIRO is not set
+# CONFIG_SND_SB8 is not set
+# CONFIG_SND_SB16 is not set
+# CONFIG_SND_SBAWE is not set
+# CONFIG_SND_SGALAXY is not set
+# CONFIG_SND_SSCAPE is not set
+# CONFIG_SND_WAVEFRONT is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI 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_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ 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_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+CONFIG_SND_INTEL8X0=y
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR 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_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_AC97_POWER_SAVE is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_USX2Y is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_SPLIT_ISO=y
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=y
+CONFIG_USB_SL811_HCD=m
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS is not set
+# CONFIG_INFINIBAND is not set
+# CONFIG_EDAC is not set
+# CONFIG_RTC_CLASS is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+CONFIG_VIRTUALIZATION=y
+# CONFIG_KVM is not set
+# CONFIG_LGUEST is not set
+
+#
+# Userspace I/O
+#
+# CONFIG_UIO is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+CONFIG_DMIID=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+CONFIG_UDF_FS=y
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+# CONFIG_NFSD_TCP is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=y
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+# CONFIG_KPROBES is not set
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_SAMPLES is not set
+CONFIG_EARLY_PRINTK=y
+CONFIG_X86_FIND_SMP_CONFIG=y
+CONFIG_X86_MPPARSE=y
+CONFIG_DOUBLEFAULT=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+# CONFIG_CRYPTO_TWOFISH_586 is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_AES_586 is not set
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_LZO_COMPRESS=m
+CONFIG_LZO_DECOMPRESS=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-c7x0 b/packages/linux/linux-rp-2.6.24/defconfig-c7x0
new file mode 100644
index 0000000000..a47e843a2e
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/defconfig-c7x0
@@ -0,0 +1,1746 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc8
+# Sun Jan 20 18:27:11 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+CONFIG_PXA_SHARPSL_25x=y
+# CONFIG_PXA_SHARPSL_27x is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_MACH_POODLE is not set
+CONFIG_MACH_CORGI=y
+CONFIG_MACH_SHEPHERD=y
+CONFIG_MACH_HUSKY=y
+# CONFIG_MACH_TOSA is not set
+CONFIG_PXA25x=y
+CONFIG_PXA_SHARP_C7xx=y
+CONFIG_PXA_SSP=y
+# CONFIG_PXA_KEYS is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARPSL_PM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=m
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+CONFIG_CPU_FREQ_PXA25x=y
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_PCMCIA_RAYCS is not set
+# CONFIG_LIBERTAS is not set
+CONFIG_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_ATMEL is not set
+CONFIG_AIRO_CS=m
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_CORGI=y
+# CONFIG_KEYBOARD_SPITZ is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_CORGI=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_USB_DSBR=m
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_DEFERRED_IO is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_W100=y
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_AC97_CODEC is not set
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=m
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_CORGI=m
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_WM8731=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+# CONFIG_AC97_BUS is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_CORGI=y
+# CONFIG_LEDS_TOSA is not set
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_SYSFS is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-collie b/packages/linux/linux-rp-2.6.24/defconfig-collie
new file mode 100644
index 0000000000..e1b80f94ab
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/defconfig-collie
@@ -0,0 +1,1370 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24
+# Sun Jan 27 14:12:17 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_GENERIC_TIME is not set
+# CONFIG_GENERIC_CLOCKEVENTS is not set
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+CONFIG_ARCH_SA1100=y
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_SA1100_CERF is not set
+CONFIG_SA1100_COLLIE=y
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SSP is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_SA1100=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4=y
+CONFIG_CPU_CACHE_V4WB=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WB=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_SHARP_LOCOMO=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARPSL_PM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+CONFIG_ISA=y
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+CONFIG_PCMCIA_SA1100=m
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+CONFIG_NODES_SHIFT=2
+CONFIG_SELECT_MEMORY_MODEL=y
+# CONFIG_FLATMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttySA0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 mem=64M fbcon=rotate:1 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_SA1100_FIR=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+# CONFIG_IEEE80211_SOFTMAC is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_SHARP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_SA1100=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+# CONFIG_PNP is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_IDE=m
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_IDE_ARM is not set
+
+#
+# Other IDE chipsets support
+#
+
+#
+# Note: most of these also require special kernel boot parameters
+#
+# CONFIG_BLK_DEV_4DRIVES is not set
+# CONFIG_BLK_DEV_ALI14XX is not set
+# CONFIG_BLK_DEV_DTC2278 is not set
+# CONFIG_BLK_DEV_HT6560B is not set
+# CONFIG_BLK_DEV_QD65XX is not set
+# CONFIG_BLK_DEV_UMC8672 is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_AX88796 is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_B44 is not set
+CONFIG_NETDEV_1000=y
+CONFIG_NETDEV_10000=y
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_PCMCIA_RAYCS=m
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_CS=m
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_ATMEL=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=m
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_LOCOMO=m
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_LOCOMO is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_AT25 is not set
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_MCP=y
+CONFIG_MCP_SA11X0=y
+CONFIG_MCP_UCB1200=y
+CONFIG_MCP_UCB1200_TS=m
+# CONFIG_MCP_COLLIE_TS is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_PMS is not set
+# CONFIG_VIDEO_CPIA is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_CADET is not set
+# CONFIG_RADIO_RTRACK is not set
+# CONFIG_RADIO_RTRACK2 is not set
+# CONFIG_RADIO_AZTECH is not set
+# CONFIG_RADIO_GEMTEK 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_DVB_CORE is not set
+CONFIG_DAB=y
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_DEFERRED_IO is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+CONFIG_FB_SA1100=y
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+# CONFIG_LCD_LTV350QV is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_LOCOMO=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_DUMMY=m
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# SPI devices
+#
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+# CONFIG_USB_SUPPORT is not set
+CONFIG_MMC=m
+CONFIG_MMC_DEBUG=y
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_SPI=m
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=m
+
+#
+# LED drivers
+#
+CONFIG_LEDS_LOCOMO=m
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=m
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+CONFIG_FS_MBCACHE=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_SYSFS is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_LZO is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CAMELLIA is not set
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-htcuniversal b/packages/linux/linux-rp-2.6.24/defconfig-htcuniversal
new file mode 100644
index 0000000000..f121ddea90
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/defconfig-htcuniversal
@@ -0,0 +1,1307 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc8
+# Sun Jan 20 21:46:02 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_UID16 is not set
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+CONFIG_DMABOUNCE=y
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+CONFIG_ARCH_LUBBOCK=y
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+CONFIG_PXA25x=y
+# CONFIG_PXA_KEYS is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+CONFIG_SA1111=y
+CONFIG_FORCE_MAX_ZONEORDER=9
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+CONFIG_CPU_FREQ_PXA25x=y
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+# CONFIG_SUSPEND is not set
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=y
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+# CONFIG_MTD_CHAR is not set
+# CONFIG_MTD_BLKDEVS is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=4096
+CONFIG_MTDRAM_ERASE_SIZE=128
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_NET_ETHERNET is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+CONFIG_ACX=m
+CONFIG_ACX_MEM=y
+# CONFIG_ACX_CS is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+# CONFIG_INPUT_POWER is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_ASIC3=y
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=m
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+CONFIG_W1=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS2482 is not set
+CONFIG_W1_MASTER_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
+CONFIG_W1_SLAVE_DS2760=y
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_PDA_POWER=y
+CONFIG_APM_POWER=y
+CONFIG_BATTERY_DS2760=y
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_HTC_ASIC3=y
+CONFIG_HTC_ASIC3_DS1WM=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_DEFERRED_IO is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+# CONFIG_FB_PXA_OVERLAY is not set
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+# CONFIG_MMC_PXA is not set
+CONFIG_MMC_ASIC3=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+CONFIG_LEDS_ASIC3=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_DEBUG=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_VM=y
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_CBC is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_LZO is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+CONFIG_CRYPTO_HW=y
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-hx2000 b/packages/linux/linux-rp-2.6.24/defconfig-hx2000
new file mode 100644
index 0000000000..41eee3854a
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/defconfig-hx2000
@@ -0,0 +1,1733 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc8
+# Sun Jan 20 18:10:53 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_MACH_HX2750=y
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+CONFIG_PXA27x=y
+CONFIG_PXA_SSP=y
+CONFIG_PXA_KEYS=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_PXA2XX is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_PCMCIA_RAYCS is not set
+# CONFIG_LIBERTAS is not set
+CONFIG_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_ATMEL is not set
+CONFIG_AIRO_CS=m
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+# CONFIG_ZD1211RW is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_KEYBOARD_PXA27x=m
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_TOUCHSCREEN_TSC2101=y
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+CONFIG_MFD_TSC2101=y
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_USB_DSBR=m
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_DEFERRED_IO is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=m
+CONFIG_SND_PXA2XX_SOC=m
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=y
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_SYSFS is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-poodle b/packages/linux/linux-rp-2.6.24/defconfig-poodle
new file mode 100644
index 0000000000..841bcf285e
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/defconfig-poodle
@@ -0,0 +1,1752 @@
+
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc8
+# Fri Jan 25 22:13:14 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+CONFIG_PXA_SHARPSL_25x=y
+# CONFIG_PXA_SHARPSL_27x is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+CONFIG_MACH_POODLE=y
+# CONFIG_MACH_CORGI is not set
+# CONFIG_MACH_SHEPHERD is not set
+# CONFIG_MACH_HUSKY is not set
+# CONFIG_MACH_TOSA is not set
+CONFIG_PXA25x=y
+CONFIG_PXA_SSP=y
+# CONFIG_PXA_KEYS is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_LOCOMO=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARPSL_PM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=m
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+CONFIG_CPU_FREQ_PXA25x=y
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_IDE=m
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_PCMCIA_RAYCS is not set
+# CONFIG_LIBERTAS is not set
+CONFIG_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_ATMEL is not set
+CONFIG_AIRO_CS=m
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+# CONFIG_ZD1211RW is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=240
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_LOCOMO=y
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_CORGI is not set
+# CONFIG_KEYBOARD_SPITZ is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_CORGI=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_USB_DSBR=m
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_DEFERRED_IO is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+# CONFIG_FB_PXA_OVERLAY is not set
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_W100 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_LOCOMO=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=m
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_POODLE=m
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_WM8731=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+CONFIG_USB_GADGET_PXA2XX=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_LOCOMO=y
+# CONFIG_LEDS_TOSA is not set
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_SYSFS is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-qemuarm b/packages/linux/linux-rp-2.6.24/defconfig-qemuarm
new file mode 100644
index 0000000000..d2b8265214
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/defconfig-qemuarm
@@ -0,0 +1,1582 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc8
+# Sun Jan 20 22:28:17 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+# CONFIG_GENERIC_GPIO is not set
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+CONFIG_ARCH_VERSATILE=y
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Versatile platform type
+#
+CONFIG_ARCH_VERSATILE_PB=y
+# CONFIG_MACH_VERSATILE_AB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM926T=y
+# CONFIG_CPU_V6 is not set
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_ARM_VIC=y
+CONFIG_ICST307=y
+
+#
+# Bus support
+#
+CONFIG_ARM_AMBA=y
+CONFIG_PCI=y
+CONFIG_PCI_SYSCALL=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCI_LEGACY=y
+# CONFIG_PCI_DEBUG is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_LEDS=y
+CONFIG_LEDS_CPU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyAMA0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+# CONFIG_APM_EMULATION is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_VLSI_FIR is not set
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+CONFIG_MTD_AFS_PARTS=y
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_GEOMETRY is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_INTEL_VR_NOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=m
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+CONFIG_MTD_NAND_IDS=m
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_CAFE is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=51200
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+CONFIG_SCSI_SYM53C8XX_2=y
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+CONFIG_SCSI_SYM53C8XX_MMIO=y
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+CONFIG_SMC91X=y
+# CONFIG_DM9000 is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_LIBERTAS is not set
+CONFIG_HERMES=m
+# CONFIG_PLX_HERMES is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_NORTEL_HERMES is not set
+# CONFIG_PCI_HERMES is not set
+# CONFIG_ATMEL is not set
+# CONFIG_PRISM54 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+# CONFIG_HOSTAP_PLX is not set
+# CONFIG_HOSTAP_PCI is not set
+# CONFIG_BCM43XX is not set
+# CONFIG_ZD1211RW is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TABLET=y
+# CONFIG_TABLET_USB_ACECAD is not set
+# CONFIG_TABLET_USB_AIPTEK is not set
+# CONFIG_TABLET_USB_GTCO is not set
+# CONFIG_TABLET_USB_KBTAB is not set
+CONFIG_TABLET_USB_WACOM=y
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+CONFIG_SERIO_AMBAKMI=y
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_STRADIS is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO is not set
+CONFIG_USB_DSBR=m
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_DEFERRED_IO is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+CONFIG_FB_ARMCLCD=y
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_VT8623 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CORGI=m
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+CONFIG_USB_SL811_HCD=m
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_PL031 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_SYSFS is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+# CONFIG_NFSD_TCP is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=y
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-qemux86 b/packages/linux/linux-rp-2.6.24/defconfig-qemux86
new file mode 100644
index 0000000000..e0094fec3c
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/defconfig-qemux86
@@ -0,0 +1,1993 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc8
+# Sun Jan 20 18:20:37 2008
+#
+# CONFIG_64BIT is not set
+CONFIG_X86_32=y
+# CONFIG_X86_64 is not set
+CONFIG_X86=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_MMU=y
+CONFIG_ZONE_DMA=y
+CONFIG_QUICKLIST=y
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_DMI=y
+# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+# CONFIG_GENERIC_TIME_VSYSCALL is not set
+CONFIG_ARCH_SUPPORTS_OPROFILE=y
+# CONFIG_ZONE_DMA32 is not set
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+# CONFIG_AUDIT_ARCH is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_PENDING_IRQ=y
+CONFIG_X86_SMP=y
+CONFIG_X86_HT=y
+CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_TRAMPOLINE=y
+CONFIG_KTIME_SCALAR=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+CONFIG_AUDIT_TREE=y
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=15
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_STOP_MACHINE=y
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Processor type and features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_SMP=y
+CONFIG_X86_PC=y
+# CONFIG_X86_ELAN is not set
+# CONFIG_X86_VOYAGER is not set
+# CONFIG_X86_NUMAQ is not set
+# CONFIG_X86_SUMMIT is not set
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_VISWS is not set
+# CONFIG_X86_GENERICARCH is not set
+# CONFIG_X86_ES7000 is not set
+# CONFIG_X86_VSMP is not set
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+# CONFIG_PARAVIRT_GUEST is not set
+# CONFIG_M386 is not set
+# CONFIG_M486 is not set
+# CONFIG_M586 is not set
+# CONFIG_M586TSC is not set
+# CONFIG_M586MMX is not set
+CONFIG_M686=y
+# CONFIG_MPENTIUMII is not set
+# CONFIG_MPENTIUMIII is not set
+# CONFIG_MPENTIUMM is not set
+# CONFIG_MPENTIUM4 is not set
+# CONFIG_MK6 is not set
+# CONFIG_MK7 is not set
+# CONFIG_MK8 is not set
+# CONFIG_MCRUSOE is not set
+# CONFIG_MEFFICEON is not set
+# CONFIG_MWINCHIPC6 is not set
+# CONFIG_MWINCHIP2 is not set
+# CONFIG_MWINCHIP3D is not set
+# CONFIG_MGEODEGX1 is not set
+# CONFIG_MGEODE_LX is not set
+# CONFIG_MCYRIXIII is not set
+# CONFIG_MVIAC3_2 is not set
+# CONFIG_MVIAC7 is not set
+# CONFIG_MPSC is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_GENERIC_CPU is not set
+CONFIG_X86_GENERIC=y
+CONFIG_X86_CMPXCHG=y
+CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_X86_XADD=y
+CONFIG_X86_PPRO_FENCE=y
+CONFIG_X86_WP_WORKS_OK=y
+CONFIG_X86_INVLPG=y
+CONFIG_X86_BSWAP=y
+CONFIG_X86_POPAD_OK=y
+CONFIG_X86_GOOD_APIC=y
+CONFIG_X86_INTEL_USERCOPY=y
+CONFIG_X86_USE_PPRO_CHECKSUM=y
+CONFIG_X86_TSC=y
+CONFIG_X86_CMOV=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=4
+# CONFIG_HPET_TIMER is not set
+CONFIG_NR_CPUS=8
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_PREEMPT_BKL=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_MCE=y
+CONFIG_X86_MCE_NONFATAL=y
+CONFIG_X86_MCE_P4THERMAL=y
+CONFIG_VM86=y
+# CONFIG_TOSHIBA is not set
+# CONFIG_I8K is not set
+# CONFIG_X86_REBOOTFIXUPS is not set
+# CONFIG_MICROCODE is not set
+# CONFIG_X86_MSR is not set
+# CONFIG_X86_CPUID is not set
+CONFIG_NOHIGHMEM=y
+# CONFIG_HIGHMEM4G is not set
+# CONFIG_HIGHMEM64G is not set
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_3G_OPT is not set
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_2G_OPT is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_X86_PAE is not set
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_STATIC=y
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_NR_QUICK=1
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_MATH_EMULATION is not set
+CONFIG_MTRR=y
+# CONFIG_EFI is not set
+CONFIG_IRQBALANCE=y
+CONFIG_SECCOMP=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_KEXEC=y
+CONFIG_PHYSICAL_START=0x100000
+# CONFIG_RELOCATABLE is not set
+CONFIG_PHYSICAL_ALIGN=0x100000
+CONFIG_HOTPLUG_CPU=y
+CONFIG_COMPAT_VDSO=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP_SMP=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_SMP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_HIBERNATION_SMP_POSSIBLE=y
+# CONFIG_HIBERNATION is not set
+CONFIG_ACPI=y
+CONFIG_ACPI_SLEEP=y
+# CONFIG_ACPI_PROCFS is not set
+CONFIG_ACPI_PROCFS_POWER=y
+CONFIG_ACPI_SYSFS_POWER=y
+CONFIG_ACPI_PROC_EVENT=y
+CONFIG_ACPI_AC=y
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BUTTON=y
+# CONFIG_ACPI_VIDEO is not set
+CONFIG_ACPI_FAN=y
+# CONFIG_ACPI_DOCK is not set
+CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_HOTPLUG_CPU=y
+CONFIG_ACPI_THERMAL=y
+# CONFIG_ACPI_ASUS is not set
+# CONFIG_ACPI_TOSHIBA is not set
+CONFIG_ACPI_BLACKLIST_YEAR=0
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_POWER=y
+CONFIG_ACPI_SYSTEM=y
+CONFIG_X86_PM_TIMER=y
+CONFIG_ACPI_CONTAINER=y
+# CONFIG_ACPI_SBS is not set
+# CONFIG_APM is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_IDLE is not set
+
+#
+# Bus options (PCI etc.)
+#
+CONFIG_PCI=y
+# CONFIG_PCI_GOBIOS is not set
+# CONFIG_PCI_GOMMCONFIG is not set
+# CONFIG_PCI_GODIRECT is not set
+CONFIG_PCI_GOANY=y
+CONFIG_PCI_BIOS=y
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_PCI_DOMAINS=y
+# CONFIG_PCIEPORTBUS is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+# CONFIG_PCI_MSI is not set
+CONFIG_PCI_LEGACY=y
+CONFIG_HT_IRQ=y
+CONFIG_ISA_DMA_API=y
+CONFIG_ISA=y
+# CONFIG_EISA is not set
+# CONFIG_MCA is not set
+# CONFIG_SCx200 is not set
+CONFIG_K8_NB=y
+# CONFIG_PCCARD is not set
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats / Emulations
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+# CONFIG_VIA_FIR is not set
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+# CONFIG_MTD is not set
+CONFIG_PARPORT=y
+CONFIG_PARPORT_PC=y
+# CONFIG_PARPORT_SERIAL is not set
+# CONFIG_PARPORT_PC_FIFO is not set
+# CONFIG_PARPORT_PC_SUPERIO is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
+# CONFIG_PARPORT_1284 is not set
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+# CONFIG_ISAPNP is not set
+# CONFIG_PNPBIOS is not set
+CONFIG_PNPACPI=y
+CONFIG_BLK_DEV=y
+CONFIG_BLK_DEV_FD=y
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=65536
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_IBM_ASM is not set
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_ASUS_LAPTOP is not set
+# CONFIG_FUJITSU_LAPTOP is not set
+# CONFIG_MSI_LAPTOP is not set
+# CONFIG_SONY_LAPTOP is not set
+# CONFIG_THINKPAD_ACPI is not set
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_HD_IDE is not set
+CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_IDEACPI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_BLK_DEV_PLATFORM is not set
+CONFIG_BLK_DEV_CMD640=y
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_IDEPNP is not set
+
+#
+# PCI IDE chipsets support
+#
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+CONFIG_IDEPCI_PCIBUS_ORDER=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_RZ1000=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_AEC62XX 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_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 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_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_JMICRON is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+CONFIG_BLK_DEV_PIIX=y
+# CONFIG_BLK_DEV_IT8213 is not set
+# CONFIG_BLK_DEV_IT821X is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_BLK_DEV_TC86C001 is not set
+# CONFIG_IDE_ARM is not set
+
+#
+# Other IDE chipsets support
+#
+
+#
+# Note: most of these also require special kernel boot parameters
+#
+# CONFIG_BLK_DEV_4DRIVES is not set
+# CONFIG_BLK_DEV_ALI14XX is not set
+# CONFIG_BLK_DEV_DTC2278 is not set
+# CONFIG_BLK_DEV_HT6560B is not set
+# CONFIG_BLK_DEV_QD65XX is not set
+# CONFIG_BLK_DEV_UMC8672 is not set
+CONFIG_BLK_DEV_IDEDMA=y
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+CONFIG_CHR_DEV_SG=y
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+CONFIG_SCSI_DPT_I2O=m
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA 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_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_SEAGATE is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_ULTRASTOR is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_NET_SB1000 is not set
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+CONFIG_NET_VENDOR_3COM=y
+# CONFIG_EL1 is not set
+# CONFIG_EL2 is not set
+# CONFIG_ELPLUS is not set
+# CONFIG_EL16 is not set
+# CONFIG_EL3 is not set
+# CONFIG_3C515 is not set
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+CONFIG_LANCE=m
+CONFIG_NET_VENDOR_SMC=y
+CONFIG_WD80x3=m
+CONFIG_ULTRA=m
+CONFIG_SMC9194=m
+# CONFIG_NET_VENDOR_RACAL is not set
+CONFIG_NET_TULIP=y
+# CONFIG_DE2104X is not set
+CONFIG_TULIP=m
+CONFIG_TULIP_MWI=y
+CONFIG_TULIP_MMIO=y
+CONFIG_TULIP_NAPI=y
+CONFIG_TULIP_NAPI_HW_MITIGATION=y
+CONFIG_DE4X5=m
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+CONFIG_AT1700=m
+CONFIG_DEPCA=m
+CONFIG_HP100=m
+CONFIG_NET_ISA=y
+# CONFIG_E2100 is not set
+# CONFIG_EWRK3 is not set
+# CONFIG_EEXPRESS is not set
+# CONFIG_EEXPRESS_PRO is not set
+# CONFIG_HPLAN_PLUS is not set
+# CONFIG_HPLAN is not set
+# CONFIG_LP486E is not set
+# CONFIG_ETH16I is not set
+CONFIG_NE2000=y
+# CONFIG_ZNET is not set
+# CONFIG_SEEQ8005 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+CONFIG_PCNET32_NAPI=y
+CONFIG_AMD8111_ETH=m
+CONFIG_AMD8111E_NAPI=y
+CONFIG_ADAPTEC_STARFIRE=m
+CONFIG_ADAPTEC_STARFIRE_NAPI=y
+CONFIG_AC3200=m
+CONFIG_APRICOT=m
+CONFIG_B44=m
+CONFIG_B44_PCI_AUTOSELECT=y
+CONFIG_B44_PCICORE_AUTOSELECT=y
+CONFIG_B44_PCI=y
+CONFIG_FORCEDETH=m
+CONFIG_FORCEDETH_NAPI=y
+CONFIG_CS89x0=m
+CONFIG_EEPRO100=m
+CONFIG_E100=m
+CONFIG_FEALNX=m
+CONFIG_NATSEMI=m
+CONFIG_NE2K_PCI=y
+# CONFIG_8139CP is not set
+CONFIG_8139TOO=y
+CONFIG_8139TOO_PIO=y
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_SIS900=m
+CONFIG_EPIC100=m
+CONFIG_SUNDANCE=m
+CONFIG_SUNDANCE_MMIO=y
+CONFIG_TLAN=m
+CONFIG_VIA_RHINE=m
+CONFIG_VIA_RHINE_MMIO=y
+CONFIG_VIA_RHINE_NAPI=y
+CONFIG_SC92031=m
+# CONFIG_NET_POCKET is not set
+CONFIG_NETDEV_1000=y
+CONFIG_ACENIC=m
+CONFIG_ACENIC_OMIT_TIGON_I=y
+CONFIG_DL2K=m
+CONFIG_E1000=m
+CONFIG_E1000_NAPI=y
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_E1000E is not set
+# CONFIG_IP1000 is not set
+CONFIG_NS83820=m
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_R8169=m
+CONFIG_R8169_NAPI=y
+CONFIG_SIS190=m
+CONFIG_SKGE=m
+CONFIG_SKY2=m
+CONFIG_SK98LIN=m
+CONFIG_VIA_VELOCITY=m
+CONFIG_TIGON3=m
+CONFIG_BNX2=m
+CONFIG_QLA3XXX=m
+CONFIG_ATL1=m
+CONFIG_NETDEV_10000=y
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_CHELSIO_T3 is not set
+# CONFIG_IXGBE is not set
+# CONFIG_IXGB is not set
+CONFIG_S2IO=m
+# CONFIG_S2IO_NAPI is not set
+# CONFIG_MYRI10GE is not set
+# CONFIG_NETXEN_NIC is not set
+# CONFIG_NIU is not set
+# CONFIG_MLX4_CORE is not set
+# CONFIG_TEHUTI is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_LIBERTAS is not set
+# CONFIG_AIRO is not set
+CONFIG_HERMES=m
+# CONFIG_PLX_HERMES is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_NORTEL_HERMES is not set
+# CONFIG_PCI_HERMES is not set
+# CONFIG_ATMEL is not set
+# CONFIG_PRISM54 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+# CONFIG_HOSTAP_PLX is not set
+# CONFIG_HOSTAP_PCI is not set
+# CONFIG_BCM43XX is not set
+# CONFIG_ZD1211RW is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_LIFEBOOK=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TABLET=y
+# CONFIG_TABLET_USB_ACECAD is not set
+# CONFIG_TABLET_USB_AIPTEK is not set
+# CONFIG_TABLET_USB_GTCO is not set
+# CONFIG_TABLET_USB_KBTAB is not set
+CONFIG_TABLET_USB_WACOM=y
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_PCSPKR is not set
+# CONFIG_INPUT_WISTRON_BTNS is not set
+# CONFIG_INPUT_ATLAS_BTNS is not set
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_CT82C710 is not set
+# CONFIG_SERIO_PARKBD is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_CONSOLE is not set
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_PRINTER=y
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_SONYPI is not set
+# CONFIG_MWAVE is not set
+# CONFIG_PC8736x_GPIO is not set
+# CONFIG_NSC_GPIO is not set
+# CONFIG_CS5535_GPIO is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_HPET is not set
+# CONFIG_HANGCHECK_TIMER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+CONFIG_DEVPORT=y
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+CONFIG_SSB=m
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_PMS is not set
+# CONFIG_VIDEO_BWQCAM is not set
+# CONFIG_VIDEO_CQCAM is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_STRADIS is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_RADIO_CADET is not set
+# CONFIG_RADIO_RTRACK is not set
+# CONFIG_RADIO_RTRACK2 is not set
+# CONFIG_RADIO_AZTECH is not set
+# CONFIG_RADIO_GEMTEK is not set
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO 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_USB_DSBR=m
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_AGP=m
+CONFIG_AGP_ALI=m
+CONFIG_AGP_ATI=m
+CONFIG_AGP_AMD=m
+CONFIG_AGP_AMD64=m
+CONFIG_AGP_INTEL=m
+CONFIG_AGP_NVIDIA=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_SWORKS=m
+CONFIG_AGP_VIA=m
+CONFIG_AGP_EFFICEON=m
+CONFIG_DRM=m
+# CONFIG_DRM_TDFX is not set
+# CONFIG_DRM_R128 is not set
+# CONFIG_DRM_RADEON is not set
+# CONFIG_DRM_I810 is not set
+# CONFIG_DRM_I830 is not set
+# CONFIG_DRM_I915 is not set
+# CONFIG_DRM_MGA is not set
+# CONFIG_DRM_SIS is not set
+# CONFIG_DRM_VIA is not set
+# CONFIG_DRM_SAVAGE is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=m
+CONFIG_FB_CFB_COPYAREA=m
+CONFIG_FB_CFB_IMAGEBLIT=m
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_DEFERRED_IO is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+CONFIG_FB_UVESA=m
+# CONFIG_FB_VESA is not set
+# CONFIG_FB_EFI is not set
+# CONFIG_FB_HECUBA is not set
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_I810 is not set
+# CONFIG_FB_LE80578 is not set
+# CONFIG_FB_INTEL is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_VT8623 is not set
+# CONFIG_FB_CYBLA is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CORGI=m
+# CONFIG_BACKLIGHT_PROGEAR is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
+CONFIG_VIDEO_SELECT=y
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_SEQUENCER=y
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=y
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_MTS64 is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_PORTMAN2X4 is not set
+
+#
+# ISA devices
+#
+# CONFIG_SND_ADLIB is not set
+# CONFIG_SND_AD1816A is not set
+# CONFIG_SND_AD1848 is not set
+# CONFIG_SND_ALS100 is not set
+# CONFIG_SND_AZT2320 is not set
+# CONFIG_SND_CMI8330 is not set
+# CONFIG_SND_CS4231 is not set
+# CONFIG_SND_CS4232 is not set
+# CONFIG_SND_CS4236 is not set
+# CONFIG_SND_DT019X is not set
+# CONFIG_SND_ES968 is not set
+# CONFIG_SND_ES1688 is not set
+# CONFIG_SND_ES18XX is not set
+# CONFIG_SND_SC6000 is not set
+# CONFIG_SND_GUSCLASSIC is not set
+# CONFIG_SND_GUSEXTREME is not set
+# CONFIG_SND_GUSMAX is not set
+# CONFIG_SND_INTERWAVE is not set
+# CONFIG_SND_INTERWAVE_STB 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_MIRO is not set
+# CONFIG_SND_SB8 is not set
+# CONFIG_SND_SB16 is not set
+# CONFIG_SND_SBAWE is not set
+# CONFIG_SND_SGALAXY is not set
+# CONFIG_SND_SSCAPE is not set
+# CONFIG_SND_WAVEFRONT is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI 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_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ 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_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+CONFIG_SND_INTEL8X0=y
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR 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_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+# CONFIG_SND_AC97_POWER_SAVE is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_USX2Y is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_SPLIT_ISO=y
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_UHCI_HCD=y
+CONFIG_USB_SL811_HCD=m
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+# CONFIG_LEDS_TRIGGERS is not set
+# CONFIG_INFINIBAND is not set
+# CONFIG_EDAC is not set
+# CONFIG_RTC_CLASS is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+CONFIG_VIRTUALIZATION=y
+# CONFIG_KVM is not set
+# CONFIG_LGUEST is not set
+
+#
+# Userspace I/O
+#
+# CONFIG_UIO is not set
+
+#
+# Firmware Drivers
+#
+# CONFIG_EDD is not set
+# CONFIG_DELL_RBU is not set
+# CONFIG_DCDBAS is not set
+CONFIG_DMIID=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+CONFIG_UDF_FS=y
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+# CONFIG_NFSD_TCP is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=y
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+# CONFIG_KPROBES is not set
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_SAMPLES is not set
+CONFIG_EARLY_PRINTK=y
+CONFIG_X86_FIND_SMP_CONFIG=y
+CONFIG_X86_MPPARSE=y
+CONFIG_DOUBLEFAULT=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+# CONFIG_CRYPTO_TWOFISH_586 is not set
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_AES_586 is not set
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_LZO_COMPRESS=m
+CONFIG_LZO_DECOMPRESS=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-spitz b/packages/linux/linux-rp-2.6.24/defconfig-spitz
new file mode 100644
index 0000000000..d0226301f7
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/defconfig-spitz
@@ -0,0 +1,1740 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc8
+# Sun Jan 20 18:32:23 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_ARMCORE is not set
+# CONFIG_PXA_SHARPSL_25x is not set
+CONFIG_PXA_SHARPSL_27x=y
+# CONFIG_MACH_HX2750 is not set
+CONFIG_MACH_AKITA=y
+CONFIG_MACH_SPITZ=y
+CONFIG_MACH_BORZOI=y
+CONFIG_PXA27x=y
+CONFIG_PXA_SHARP_Cxx00=y
+CONFIG_PXA_SSP=y
+# CONFIG_PXA_KEYS is not set
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARPSL_PM=y
+CONFIG_SHARP_SCOOP=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/hda1 rootfstype=ext3 rootdelay=1 rw fbcon=rotate:1 dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=m
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=m
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=m
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=m
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=m
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_PCMCIA_RAYCS is not set
+# CONFIG_LIBERTAS is not set
+CONFIG_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_ATMEL is not set
+CONFIG_AIRO_CS=m
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_CORGI is not set
+CONFIG_KEYBOARD_SPITZ=y
+# CONFIG_KEYBOARD_PXA27x is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_CORGI=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_USB_DSBR=m
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_DEFERRED_IO is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_LCD_QVGA=y
+# CONFIG_FB_PXA_LCD_VGA is not set
+CONFIG_FB_PXA_OVERLAY=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_W100 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_AC97_CODEC is not set
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=m
+CONFIG_SND_PXA2XX_SOC=m
+CONFIG_SND_PXA2XX_SOC_I2S=m
+CONFIG_SND_PXA2XX_SOC_SPITZ=m
+
+#
+# SoC Audio support for SuperH
+#
+CONFIG_SND_SOC_WM8750=m
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+# CONFIG_AC97_BUS is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+CONFIG_USB_GADGET_PXA27X=y
+CONFIG_USB_PXA27X=m
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_SPITZ=y
+# CONFIG_LEDS_TOSA is not set
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_SYSFS is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_LZO_COMPRESS=m
+CONFIG_LZO_DECOMPRESS=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.24/defconfig-zylonite b/packages/linux/linux-rp-2.6.24/defconfig-zylonite
new file mode 100644
index 0000000000..0cf0b23db5
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/defconfig-zylonite
@@ -0,0 +1,1740 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.24-rc8
+# Sun Jan 20 18:42:35 2008
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_MMU=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=m
+CONFIG_IOSCHED_CFQ=m
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+
+#
+# Supported PXA3xx Processor Variants
+#
+CONFIG_CPU_PXA300=y
+CONFIG_CPU_PXA310=y
+CONFIG_CPU_PXA320=y
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_MACH_EM_X270 is not set
+CONFIG_MACH_ZYLONITE=y
+# CONFIG_MACH_ARMCORE is not set
+CONFIG_PXA3xx=y
+
+#
+# Boot options
+#
+
+#
+# Power management
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSC3=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+CONFIG_IO_36=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+# CONFIG_OUTER_CACHE is not set
+CONFIG_IWMMXT=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=m
+
+#
+# Kernel Features
+#
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttyS0,38400 root=/dev/mtdblock2 rootfstype=jffs2 mem=64M dyntick=enable debug"
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=m
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_SUSPEND=y
+CONFIG_APM_EMULATION=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK_ENABLED is not set
+# CONFIG_NF_CONNTRACK is not set
+CONFIG_NETFILTER_XTABLES=m
+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT 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_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_POLICY is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP 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_MATCH_HASHLIMIT is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+# CONFIG_BT_HCIUSB_SCO is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIUART_LL is not set
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_EXT=y
+# CONFIG_MAC80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_SHARPSL is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+CONFIG_DM_MULTIPATH_EMC=m
+# CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
+# CONFIG_DM_DELAY is not set
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+CONFIG_SMC91X=y
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_B44 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_PCMCIA_RAYCS is not set
+# CONFIG_LIBERTAS is not set
+CONFIG_HERMES=m
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+# CONFIG_ATMEL is not set
+CONFIG_AIRO_CS=m
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+CONFIG_HOSTAP_CS=m
+# CONFIG_ZD1211RW is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+CONFIG_USB_NET_CDC_SUBSET=m
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+# CONFIG_USB_BELKIN is not set
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+# CONFIG_USB_KC2190 is not set
+# CONFIG_USB_NET_ZAURUS is not set
+# CONFIG_NET_PCMCIA is not set
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPPOL2TP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_POWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_UCB1400 is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=m
+# CONFIG_NVRAM is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# I2C Algorithms
+#
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_GPIO is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_HTC_ASIC3_DS1WM is not set
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+# CONFIG_VIDEO_VIVI is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+CONFIG_V4L_USB_DRIVERS=y
+# CONFIG_VIDEO_PVRUSB2 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_USBVISION is not set
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+# CONFIG_USB_QUICKCAM_MESSENGER is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_USB_W9968CF is not set
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_ZR364XX is not set
+CONFIG_RADIO_ADAPTERS=y
+CONFIG_USB_DSBR=m
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_DEFERRED_IO is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_LCD_QVGA is not set
+CONFIG_FB_PXA_LCD_VGA=y
+CONFIG_FB_PXA_OVERLAY=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CORGI=m
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+# CONFIG_LOGO_LINUX_CLUT224 is not set
+CONFIG_LOGO_OHAND_CLUT224=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_SEQUENCER_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# PCMCIA devices
+#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+
+#
+# System on Chip audio support
+#
+CONFIG_SND_SOC=m
+CONFIG_SND_PXA2XX_SOC=m
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_AC97_BUS=m
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_PERSIST is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRCABLE is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ARK3116 is not set
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP2101 is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_MOS7720 is not set
+# CONFIG_USB_SERIAL_MOS7840 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_HP4X is not set
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_EZUSB=y
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+# CONFIG_USB_BERRY_CHARGE is not set
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGET is not set
+CONFIG_USB_IDMOUSE=m
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+CONFIG_USB_GADGET_M66592=y
+CONFIG_USB_M66592=y
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_ETH is not set
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+
+#
+# MMC/SD Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_GPIO is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_IDE_DISK=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+
+#
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=m
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_SYSFS is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=m
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+# CONFIG_SUNRPC_BIND34 is not set
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="cp437"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+# CONFIG_DLM is not set
+CONFIG_INSTRUMENTATION=y
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=m
+# CONFIG_MARKERS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_PREEMPT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_HASH=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_HMAC=m
+# CONFIG_CRYPTO_XCBC is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/packages/linux/linux-rp-2.6.20/hostap-monitor-mode.patch b/packages/linux/linux-rp-2.6.24/hostap-monitor-mode.patch
index 641fd19e50..641fd19e50 100644
--- a/packages/linux/linux-rp-2.6.20/hostap-monitor-mode.patch
+++ b/packages/linux/linux-rp-2.6.24/hostap-monitor-mode.patch
diff --git a/packages/linux/linux-rp-2.6.24/htcuni-acx.patch b/packages/linux/linux-rp-2.6.24/htcuni-acx.patch
new file mode 100644
index 0000000000..1ccebddc8d
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/htcuni-acx.patch
@@ -0,0 +1,33527 @@
+---
+ drivers/net/wireless/Kconfig | 31
+ drivers/net/wireless/Makefile | 2
+ drivers/net/wireless/acx/Kconfig | 113
+ drivers/net/wireless/acx/Makefile | 21
+ drivers/net/wireless/acx/acx.h | 14
+ drivers/net/wireless/acx/acx_config.h | 50
+ drivers/net/wireless/acx/acx_func.h | 710 ++
+ drivers/net/wireless/acx/acx_hw.h | 18
+ drivers/net/wireless/acx/acx_struct.h | 2114 ++++++++
+ drivers/net/wireless/acx/common.c | 7388 ++++++++++++++++++++++++++++
+ drivers/net/wireless/acx/conv.c | 504 +
+ drivers/net/wireless/acx/cs.c | 5703 +++++++++++++++++++++
+ drivers/net/wireless/acx/htcsable_acx.c | 118
+ drivers/net/wireless/acx/htcuniversal_acx.c | 108
+ drivers/net/wireless/acx/hx4700_acx.c | 108
+ drivers/net/wireless/acx/ioctl.c | 2748 ++++++++++
+ drivers/net/wireless/acx/mem.c | 5363 ++++++++++++++++++++
+ drivers/net/wireless/acx/pci.c | 4234 ++++++++++++++++
+ drivers/net/wireless/acx/rx3000_acx.c | 110
+ drivers/net/wireless/acx/setrate.c | 213
+ drivers/net/wireless/acx/usb.c | 1922 +++++++
+ drivers/net/wireless/acx/wlan.c | 424 +
+ drivers/net/wireless/acx/wlan_compat.h | 260
+ drivers/net/wireless/acx/wlan_hdr.h | 497 +
+ drivers/net/wireless/acx/wlan_mgmt.h | 582 ++
+ 25 files changed, 33355 insertions(+)
+
+Index: linux-2.6.23/drivers/net/wireless/acx/acx_config.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/acx_config.h 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,50 @@
++#define ACX_RELEASE "v0.3.36"
++
++/*
++ * Test out all the channels in reg domain 0x10
++ */
++#define ACX_ALLOW_ALLCHANNELS
++
++/* set to 0 if you don't want any debugging code to be compiled in */
++/* set to 1 if you want some debugging */
++/* set to 2 if you want extensive debug log */
++#define ACX_DEBUG 0
++
++/*
++ * Since we'll be changing channels a lot
++#define ACX_DEFAULT_MSG (L_ASSOC|L_INIT)
++*/
++#define ACX_DEFAULT_MSG (L_ASSOC|L_INIT)
++
++/* assume 32bit I/O width
++ * (16bit is also compatible with Compact Flash) */
++#define ACX_IO_WIDTH 32
++
++/* Set this to 1 if you want monitor mode to use
++ * phy header. Currently it is not useful anyway since we
++ * don't know what useful info (if any) is in phy header.
++ * If you want faster/smaller code, say 0 here */
++#define WANT_PHY_HDR 0
++
++/* whether to do Tx descriptor cleanup in softirq (i.e. not in IRQ
++ * handler) or not. Note that doing it later does slightly increase
++ * system load, so still do that stuff in the IRQ handler for now,
++ * even if that probably means worse latency */
++#define TX_CLEANUP_IN_SOFTIRQ 0
++
++/* if you want very experimental 802.11 power save mode features */
++#define POWER_SAVE_80211 0
++
++/* if you want very early packet fragmentation bits and pieces */
++#define ACX_FRAGMENTATION 0
++
++/* Locking: */
++/* very talkative */
++/* #define PARANOID_LOCKING 1 */
++/* normal (use when bug-free) */
++#define DO_LOCKING 1
++/* else locking is disabled! */
++
++/* 0 - normal mode */
++/* 1 - development/debug: probe for IEs on modprobe */
++#define CMD_DISCOVERY 0
+Index: linux-2.6.23/drivers/net/wireless/acx/acx_func.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/acx_func.h 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,710 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++*/
++
++
++/***********************************************************************
++** LOGGING
++**
++** - Avoid SHOUTING needlessly. Avoid excessive verbosity.
++** Gradually remove messages which are old debugging aids.
++**
++** - Use printk() for messages which are to be always logged.
++** Supply either 'acx:' or '<devname>:' prefix so that user
++** can figure out who's speaking among other kernel chatter.
++** acx: is for general issues (e.g. "acx: no firmware image!")
++** while <devname>: is related to a particular device
++** (think about multi-card setup). Double check that message
++** is not confusing to the average user.
++**
++** - use printk KERN_xxx level only if message is not a WARNING
++** but is INFO, ERR etc.
++**
++** - Use printk_ratelimited() for messages which may flood
++** (e.g. "rx DUP pkt!").
++**
++** - Use log() for messages which may be omitted (and they
++** _will_ be omitted in non-debug builds). Note that
++** message levels may be disabled at compile-time selectively,
++** thus select them wisely. Example: L_DEBUG is the lowest
++** (most likely to be compiled out) -> use for less important stuff.
++**
++** - Do not print important stuff with log(), or else people
++** will never build non-debug driver.
++**
++** Style:
++** hex: capital letters, zero filled (e.g. 0x02AC)
++** str: dont start from capitals, no trailing periods ("tx: queue is stopped")
++*/
++#if ACX_DEBUG > 1
++
++void log_fn_enter(const char *funcname);
++void log_fn_exit(const char *funcname);
++void log_fn_exit_v(const char *funcname, int v);
++
++#define FN_ENTER \
++ do { \
++ if (unlikely(acx_debug & L_FUNC)) { \
++ log_fn_enter(__func__); \
++ } \
++ } while (0)
++
++#define FN_EXIT1(v) \
++ do { \
++ if (unlikely(acx_debug & L_FUNC)) { \
++ log_fn_exit_v(__func__, v); \
++ } \
++ } while (0)
++#define FN_EXIT0 \
++ do { \
++ if (unlikely(acx_debug & L_FUNC)) { \
++ log_fn_exit(__func__); \
++ } \
++ } while (0)
++
++#else
++
++#define FN_ENTER
++#define FN_EXIT1(v)
++#define FN_EXIT0
++
++#endif /* ACX_DEBUG > 1 */
++
++
++#if ACX_DEBUG
++
++#define log(chan, args...) \
++ do { \
++ if (acx_debug & (chan)) \
++ printk(KERN_DEBUG args); \
++ } while (0)
++#define printk_ratelimited(args...) printk(args)
++
++#else /* Non-debug build: */
++
++#define log(chan, args...)
++/* Standard way of log flood prevention */
++#define printk_ratelimited(args...) \
++do { \
++ if (printk_ratelimit()) \
++ printk(args); \
++} while (0)
++
++#endif /* ACX_DEBUG */
++
++void acx_print_mac(const char *head, const u8 *mac, const char *tail);
++
++/* Optimized out to nothing in non-debug build */
++static inline void
++acxlog_mac(int level, const char *head, const u8 *mac, const char *tail)
++{
++ if (acx_debug & level) {
++ acx_print_mac(head, mac, tail);
++ }
++}
++
++
++/***********************************************************************
++** MAC address helpers
++*/
++static inline void
++MAC_COPY(u8 *mac, const u8 *src)
++{
++ *(u32*)mac = *(u32*)src;
++ ((u16*)mac)[2] = ((u16*)src)[2];
++ /* kernel's memcpy will do the same: memcpy(dst, src, ETH_ALEN); */
++}
++
++static inline void
++MAC_FILL(u8 *mac, u8 val)
++{
++ memset(mac, val, ETH_ALEN);
++}
++
++static inline void
++MAC_BCAST(u8 *mac)
++{
++ ((u16*)mac)[2] = *(u32*)mac = -1;
++}
++
++static inline void
++MAC_ZERO(u8 *mac)
++{
++ ((u16*)mac)[2] = *(u32*)mac = 0;
++}
++
++static inline int
++mac_is_equal(const u8 *a, const u8 *b)
++{
++ /* can't beat this */
++ return memcmp(a, b, ETH_ALEN) == 0;
++}
++
++static inline int
++mac_is_bcast(const u8 *mac)
++{
++ /* AND together 4 first bytes with sign-extended 2 last bytes
++ ** Only bcast address gives 0xffffffff. +1 gives 0 */
++ return ( *(s32*)mac & ((s16*)mac)[2] ) + 1 == 0;
++}
++
++static inline int
++mac_is_zero(const u8 *mac)
++{
++ return ( *(u32*)mac | ((u16*)mac)[2] ) == 0;
++}
++
++static inline int
++mac_is_directed(const u8 *mac)
++{
++ return (mac[0] & 1)==0;
++}
++
++static inline int
++mac_is_mcast(const u8 *mac)
++{
++ return (mac[0] & 1) && !mac_is_bcast(mac);
++}
++
++#define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X"
++#define MAC(bytevector) \
++ ((unsigned char *)bytevector)[0], \
++ ((unsigned char *)bytevector)[1], \
++ ((unsigned char *)bytevector)[2], \
++ ((unsigned char *)bytevector)[3], \
++ ((unsigned char *)bytevector)[4], \
++ ((unsigned char *)bytevector)[5]
++
++
++/***********************************************************************
++** Random helpers
++*/
++#define TO_STRING(x) #x
++#define STRING(x) TO_STRING(x)
++
++#define CLEAR_BIT(val, mask) ((val) &= ~(mask))
++#define SET_BIT(val, mask) ((val) |= (mask))
++
++/* undefined if v==0 */
++static inline unsigned int
++lowest_bit(u16 v)
++{
++ unsigned int n = 0;
++ while (!(v & 0xf)) { v>>=4; n+=4; }
++ while (!(v & 1)) { v>>=1; n++; }
++ return n;
++}
++
++/* undefined if v==0 */
++static inline unsigned int
++highest_bit(u16 v)
++{
++ unsigned int n = 0;
++ while (v>0xf) { v>>=4; n+=4; }
++ while (v>1) { v>>=1; n++; }
++ return n;
++}
++
++/* undefined if v==0 */
++static inline int
++has_only_one_bit(u16 v)
++{
++ return ((v-1) ^ v) >= v;
++}
++
++
++static inline int
++is_hidden_essid(char *essid)
++{
++ return (('\0' == essid[0]) ||
++ ((' ' == essid[0]) && ('\0' == essid[1])));
++}
++
++/***********************************************************************
++** LOCKING
++** We have adev->sem and adev->lock.
++**
++** We employ following naming convention in order to get locking right:
++**
++** acx_e_xxxx - external entry points called from process context.
++** It is okay to sleep. adev->sem is to be taken on entry.
++** acx_i_xxxx - external entry points possibly called from atomic context.
++** Sleeping is not allowed (and thus down(sem) is not legal!)
++** acx_s_xxxx - potentially sleeping functions. Do not ever call under lock!
++** acx_l_xxxx - functions which expect lock to be already taken.
++** rest - non-sleeping functions which do not require locking
++** but may be run under lock
++**
++** A small number of local helpers do not have acx_[eisl]_ prefix.
++** They are always close to caller and are to be reviewed locally.
++**
++** Theory of operation:
++**
++** All process-context entry points (_e_ functions) take sem
++** immediately. IRQ handler and other 'atomic-context' entry points
++** (_i_ functions) take lock immediately on entry, but dont take sem
++** because that might sleep.
++**
++** Thus *all* code is either protected by sem or lock, or both.
++**
++** Code which must not run concurrently with IRQ takes lock.
++** Such code is marked with _l_.
++**
++** This results in the following rules of thumb useful in code review:
++**
++** + If a function calls _s_ fn, it must be an _s_ itself.
++** + You can call _l_ fn only (a) from another _l_ fn
++** or (b) from _s_, _e_ or _i_ fn by taking lock, calling _l_,
++** and dropping lock.
++** + All IRQ code runs under lock.
++** + Any _s_ fn is running under sem.
++** + Code under sem can race only with IRQ code.
++** + Code under sem+lock cannot race with anything.
++*/
++
++/* These functions *must* be inline or they will break horribly on SPARC, due
++ * to its weird semantics for save/restore flags */
++
++#if defined(PARANOID_LOCKING) /* Lock debugging */
++
++void acx_lock_debug(acx_device_t *adev, const char* where);
++void acx_unlock_debug(acx_device_t *adev, const char* where);
++void acx_down_debug(acx_device_t *adev, const char* where);
++void acx_up_debug(acx_device_t *adev, const char* where);
++void acx_lock_unhold(void);
++void acx_sem_unhold(void);
++
++static inline void
++acx_lock_helper(acx_device_t *adev, unsigned long *fp, const char* where)
++{
++ acx_lock_debug(adev, where);
++ spin_lock_irqsave(&adev->lock, *fp);
++}
++static inline void
++acx_unlock_helper(acx_device_t *adev, unsigned long *fp, const char* where)
++{
++ acx_unlock_debug(adev, where);
++ spin_unlock_irqrestore(&adev->lock, *fp);
++}
++static inline void
++acx_down_helper(acx_device_t *adev, const char* where)
++{
++ acx_down_debug(adev, where);
++}
++static inline void
++acx_up_helper(acx_device_t *adev, const char* where)
++{
++ acx_up_debug(adev, where);
++}
++#define acx_lock(adev, flags) acx_lock_helper(adev, &(flags), __FILE__ ":" STRING(__LINE__))
++#define acx_unlock(adev, flags) acx_unlock_helper(adev, &(flags), __FILE__ ":" STRING(__LINE__))
++#define acx_sem_lock(adev) acx_down_helper(adev, __FILE__ ":" STRING(__LINE__))
++#define acx_sem_unlock(adev) acx_up_helper(adev, __FILE__ ":" STRING(__LINE__))
++
++#elif defined(DO_LOCKING)
++
++#define acx_lock(adev, flags) spin_lock_irqsave(&adev->lock, flags)
++#define acx_unlock(adev, flags) spin_unlock_irqrestore(&adev->lock, flags)
++#define acx_sem_lock(adev) down(&adev->sem)
++#define acx_sem_unlock(adev) up(&adev->sem)
++#define acx_lock_unhold() ((void)0)
++#define acx_sem_unhold() ((void)0)
++
++#else /* no locking! :( */
++
++#define acx_lock(adev, flags) ((void)0)
++#define acx_unlock(adev, flags) ((void)0)
++#define acx_sem_lock(adev) ((void)0)
++#define acx_sem_unlock(adev) ((void)0)
++#define acx_lock_unhold() ((void)0)
++#define acx_sem_unhold() ((void)0)
++
++#endif
++
++
++/***********************************************************************
++*/
++
++/* Can race with rx path (which is not protected by sem):
++** rx -> process_[re]assocresp() -> set_status(ASSOCIATED) -> wake_queue()
++** Can race with tx_complete IRQ:
++** IRQ -> acxpci_l_clean_txdesc -> acx_wake_queue
++** Review carefully all callsites */
++static inline void
++acx_stop_queue(struct net_device *ndev, const char *msg)
++{
++ if (netif_queue_stopped(ndev))
++ return;
++
++ netif_stop_queue(ndev);
++ if (msg)
++ log(L_BUFT, "tx: stop queue %s\n", msg);
++}
++
++static inline int
++acx_queue_stopped(struct net_device *ndev)
++{
++ return netif_queue_stopped(ndev);
++}
++
++/*
++static inline void
++acx_start_queue(struct net_device *ndev, const char *msg)
++{
++ netif_start_queue(ndev);
++ if (msg)
++ log(L_BUFT, "tx: start queue %s\n", msg);
++}
++*/
++
++static inline void
++acx_wake_queue(struct net_device *ndev, const char *msg)
++{
++ netif_wake_queue(ndev);
++ if (msg)
++ log(L_BUFT, "tx: wake queue %s\n", msg);
++}
++
++static inline void
++acx_carrier_off(struct net_device *ndev, const char *msg)
++{
++ netif_carrier_off(ndev);
++ if (msg)
++ log(L_BUFT, "tx: carrier off %s\n", msg);
++}
++
++static inline void
++acx_carrier_on(struct net_device *ndev, const char *msg)
++{
++ netif_carrier_on(ndev);
++ if (msg)
++ log(L_BUFT, "tx: carrier on %s\n", msg);
++}
++
++/* This function does not need locking UNLESS you call it
++** as acx_set_status(ACX_STATUS_4_ASSOCIATED), bacause this can
++** wake queue. This can race with stop_queue elsewhere. */
++void acx_set_status(acx_device_t *adev, u16 status);
++
++
++/***********************************************************************
++** Communication with firmware
++*/
++#define CMD_TIMEOUT_MS(n) (n)
++#define ACX_CMD_TIMEOUT_DEFAULT CMD_TIMEOUT_MS(50)
++
++#if ACX_DEBUG
++
++/* We want to log cmd names */
++int acxpci_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
++int acxmem_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
++int acxusb_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
++static inline int
++acx_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr)
++{
++ if (IS_MEM(adev))
++ return acxmem_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
++ if (IS_PCI(adev))
++ return acxpci_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
++ return acxusb_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
++}
++#define acx_s_issue_cmd(adev,cmd,param,len) \
++ acx_s_issue_cmd_timeo_debug(adev,cmd,param,len,ACX_CMD_TIMEOUT_DEFAULT,#cmd)
++#define acx_s_issue_cmd_timeo(adev,cmd,param,len,timeo) \
++ acx_s_issue_cmd_timeo_debug(adev,cmd,param,len,timeo,#cmd)
++int acx_s_configure_debug(acx_device_t *adev, void *pdr, int type, const char* str);
++#define acx_s_configure(adev,pdr,type) \
++ acx_s_configure_debug(adev,pdr,type,#type)
++int acx_s_interrogate_debug(acx_device_t *adev, void *pdr, int type, const char* str);
++#define acx_s_interrogate(adev,pdr,type) \
++ acx_s_interrogate_debug(adev,pdr,type,#type)
++
++#else
++
++int acxpci_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
++int acxmem_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
++int acxusb_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
++static inline int
++acx_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout)
++{
++ if (IS_MEM(adev))
++ return acxmem_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
++ if (IS_PCI(adev))
++ return acxpci_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
++ return acxusb_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
++}
++static inline int
++acx_s_issue_cmd(acx_device_t *adev, unsigned cmd, void *param, unsigned len)
++{
++ if (IS_MEM(adev))
++ return acxmem_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
++ if (IS_PCI(adev))
++ return acxpci_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
++ return acxusb_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
++}
++int acx_s_configure(acx_device_t *adev, void *pdr, int type);
++int acx_s_interrogate(acx_device_t *adev, void *pdr, int type);
++
++#endif
++
++void acx_s_cmd_start_scan(acx_device_t *adev);
++
++
++/***********************************************************************
++** Ioctls
++*/
++int
++acx111pci_ioctl_info(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ struct iw_param *vwrq,
++ char *extra);
++int
++acx100pci_ioctl_set_phy_amp_bias(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ struct iw_param *vwrq,
++ char *extra);
++int
++acx100mem_ioctl_set_phy_amp_bias(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ struct iw_param *vwrq,
++ char *extra);
++
++
++/***********************************************************************
++** /proc
++*/
++#ifdef CONFIG_PROC_FS
++int acx_proc_register_entries(const struct net_device *ndev);
++int acx_proc_unregister_entries(const struct net_device *ndev);
++#else
++static inline int
++acx_proc_register_entries(const struct net_device *ndev) { return OK; }
++static inline int
++acx_proc_unregister_entries(const struct net_device *ndev) { return OK; }
++#endif
++
++
++/***********************************************************************
++*/
++firmware_image_t *acx_s_read_fw(struct device *dev, const char *file, u32 *size);
++int acxpci_s_upload_radio(acx_device_t *adev);
++int acxmem_s_upload_radio(acx_device_t *adev);
++
++
++/***********************************************************************
++** Unsorted yet :)
++*/
++int acxpci_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
++int acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
++int acxusb_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
++static inline int
++acx_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
++{
++ if (IS_MEM(adev))
++ return acxmem_s_read_phy_reg(adev, reg, charbuf);
++ if (IS_PCI(adev))
++ return acxpci_s_read_phy_reg(adev, reg, charbuf);
++ return acxusb_s_read_phy_reg(adev, reg, charbuf);
++}
++
++int acxpci_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
++int acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
++int acxusb_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
++static inline int
++acx_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
++{
++ if (IS_MEM(adev))
++ return acxmem_s_write_phy_reg(adev, reg, value);
++ if (IS_PCI(adev))
++ return acxpci_s_write_phy_reg(adev, reg, value);
++ return acxusb_s_write_phy_reg(adev, reg, value);
++}
++
++tx_t* acxpci_l_alloc_tx(acx_device_t *adev);
++tx_t* acxmem_l_alloc_tx(acx_device_t *adev);
++tx_t* acxusb_l_alloc_tx(acx_device_t *adev);
++static inline tx_t*
++acx_l_alloc_tx(acx_device_t *adev)
++{
++ if (IS_MEM(adev))
++ return acxmem_l_alloc_tx(adev);
++ if (IS_PCI(adev))
++ return acxpci_l_alloc_tx(adev);
++ return acxusb_l_alloc_tx(adev);
++}
++
++void acxusb_l_dealloc_tx(tx_t *tx_opaque);
++void acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque);
++static inline void
++acx_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque)
++{
++#ifdef ACX_MEM
++ acxmem_l_dealloc_tx (adev, tx_opaque);
++#else
++ if (IS_USB(adev))
++ acxusb_l_dealloc_tx(tx_opaque);
++#endif
++}
++
++void* acxpci_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
++void* acxmem_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
++void* acxusb_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
++static inline void*
++acx_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque)
++{
++#if defined (ACX_MEM)
++ return acxmem_l_get_txbuf(adev, tx_opaque);
++#else
++ if (IS_PCI(adev))
++ return acxpci_l_get_txbuf(adev, tx_opaque);
++ return acxusb_l_get_txbuf(adev, tx_opaque);
++#endif
++}
++
++void acxpci_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
++void acxmem_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
++void acxusb_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
++static inline void
++acx_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len)
++{
++#if defined (ACX_MEM)
++ acxmem_l_tx_data(adev, tx_opaque, len);
++#else
++ if (IS_PCI(adev))
++ acxpci_l_tx_data(adev, tx_opaque, len);
++ else
++ acxusb_l_tx_data(adev, tx_opaque, len);
++#endif
++}
++
++static inline wlan_hdr_t*
++acx_get_wlan_hdr(acx_device_t *adev, const rxbuffer_t *rxbuf)
++{
++ return (wlan_hdr_t*)((u8*)&rxbuf->hdr_a3 + adev->phy_header_len);
++}
++
++void acxpci_l_power_led(acx_device_t *adev, int enable);
++int acxpci_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf);
++unsigned int acxpci_l_clean_txdesc(acx_device_t *adev);
++void acxpci_l_clean_txdesc_emergency(acx_device_t *adev);
++int acxpci_s_create_hostdesc_queues(acx_device_t *adev);
++void acxpci_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start);
++void acxpci_free_desc_queues(acx_device_t *adev);
++char* acxpci_s_proc_diag_output(char *p, acx_device_t *adev);
++int acxpci_proc_eeprom_output(char *p, acx_device_t *adev);
++void acxpci_set_interrupt_mask(acx_device_t *adev);
++int acx100pci_s_set_tx_level(acx_device_t *adev, u8 level_dbm);
++
++void acxmem_l_power_led(acx_device_t *adev, int enable);
++int acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf);
++unsigned int acxmem_l_clean_txdesc(acx_device_t *adev);
++void acxmem_l_clean_txdesc_emergency(acx_device_t *adev);
++int acxmem_s_create_hostdesc_queues(acx_device_t *adev);
++void acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start);
++void acxmem_free_desc_queues(acx_device_t *adev);
++char* acxmem_s_proc_diag_output(char *p, acx_device_t *adev);
++int acxmem_proc_eeprom_output(char *p, acx_device_t *adev);
++void acxmem_set_interrupt_mask(acx_device_t *adev);
++int acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm);
++
++void acx_s_msleep(int ms);
++int acx_s_init_mac(acx_device_t *adev);
++void acx_set_reg_domain(acx_device_t *adev, unsigned char reg_dom_id);
++void acx_set_timer(acx_device_t *adev, int timeout_us);
++void acx_update_capabilities(acx_device_t *adev);
++void acx_s_start(acx_device_t *adev);
++
++void acx_s_update_card_settings(acx_device_t *adev);
++void acx_s_parse_configoption(acx_device_t *adev, const acx111_ie_configoption_t *pcfg);
++void acx_l_update_ratevector(acx_device_t *adev);
++
++void acx_init_task_scheduler(acx_device_t *adev);
++void acx_schedule_task(acx_device_t *adev, unsigned int set_flag);
++
++int acx_e_ioctl_old(struct net_device *ndev, struct ifreq *ifr, int cmd);
++
++client_t *acx_l_sta_list_get(acx_device_t *adev, const u8 *address);
++void acx_l_sta_list_del(acx_device_t *adev, client_t *clt);
++
++int acx_l_transmit_disassoc(acx_device_t *adev, client_t *clt);
++void acx_i_timer(unsigned long a);
++int acx_s_complete_scan(acx_device_t *adev);
++
++struct sk_buff *acx_rxbuf_to_ether(acx_device_t *adev, rxbuffer_t *rxbuf);
++int acx_ether_to_txbuf(acx_device_t *adev, void *txbuf, const struct sk_buff *skb);
++
++u8 acx_signal_determine_quality(u8 signal, u8 noise);
++
++void acx_l_process_rxbuf(acx_device_t *adev, rxbuffer_t *rxbuf);
++void acx_l_handle_txrate_auto(acx_device_t *adev, struct client *txc,
++ u16 intended_rate, u8 rate100, u16 rate111, u8 error,
++ int pkts_to_ignore);
++
++void acx_dump_bytes(const void *, int);
++void acx_log_bad_eid(wlan_hdr_t* hdr, int len, wlan_ie_t* ie_ptr);
++
++u8 acx_rate111to100(u16);
++
++void acx_s_set_defaults(acx_device_t *adev);
++
++#if !ACX_DEBUG
++static inline const char* acx_get_packet_type_string(u16 fc) { return ""; }
++#else
++const char* acx_get_packet_type_string(u16 fc);
++#endif
++const char* acx_cmd_status_str(unsigned int state);
++
++int acx_i_start_xmit(struct sk_buff *skb, struct net_device *ndev);
++
++void great_inquisitor(acx_device_t *adev);
++
++void acx_s_get_firmware_version(acx_device_t *adev);
++void acx_display_hardware_details(acx_device_t *adev);
++
++int acx_e_change_mtu(struct net_device *ndev, int mtu);
++struct net_device_stats* acx_e_get_stats(struct net_device *ndev);
++struct iw_statistics* acx_e_get_wireless_stats(struct net_device *ndev);
++
++#ifdef ACX_MEM
++int __init acxmem_e_init_module(void);
++void __exit acxmem_e_cleanup_module(void);
++void acxmem_e_release(struct device *dev);
++#else
++int __init acxpci_e_init_module(void);
++int __init acxusb_e_init_module(void);
++void __exit acxpci_e_cleanup_module(void);
++void __exit acxusb_e_cleanup_module(void);
++#endif
++int __init acx_cs_init(void);
++void __exit acx_cs_cleanup(void);
+Index: linux-2.6.23/drivers/net/wireless/acx/acx.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/acx.h 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,14 @@
++#if defined(CONFIG_ACX_MEM) && !defined(ACX_MEM)
++#define ACX_MEM
++#endif
++
++#if defined(CONFIG_ACX_CS) && !defined(ACX_MEM)
++#define ACX_MEM
++#endif
++
++#include "acx_config.h"
++#include "wlan_compat.h"
++#include "wlan_hdr.h"
++#include "wlan_mgmt.h"
++#include "acx_struct.h"
++#include "acx_func.h"
+Index: linux-2.6.23/drivers/net/wireless/acx/acx_hw.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/acx_hw.h 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,18 @@
++/*
++ * Interface for ACX slave memory driver
++ *
++ * Copyright (c) 2006 SDG Systems, LLC
++ *
++ * GPL
++ *
++ */
++
++#ifndef _ACX_HW_H
++#define _ACX_HW_H
++
++struct acx_hardware_data {
++ int (*start_hw)( void );
++ int (*stop_hw)( void );
++};
++
++#endif /* _ACX_HW_H */
+Index: linux-2.6.23/drivers/net/wireless/acx/acx_struct.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/acx_struct.h 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,2114 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++*/
++
++/***********************************************************************
++** Forward declarations of types
++*/
++typedef struct tx tx_t;
++typedef struct acx_device acx_device_t;
++typedef struct client client_t;
++typedef struct rxdesc rxdesc_t;
++typedef struct txdesc txdesc_t;
++typedef struct rxhostdesc rxhostdesc_t;
++typedef struct txhostdesc txhostdesc_t;
++
++
++/***********************************************************************
++** Debug / log functionality
++*/
++enum {
++ L_LOCK = (ACX_DEBUG>1)*0x0001, /* locking debug log */
++ L_INIT = (ACX_DEBUG>0)*0x0002, /* special card initialization logging */
++ L_IRQ = (ACX_DEBUG>0)*0x0004, /* interrupt stuff */
++ L_ASSOC = (ACX_DEBUG>0)*0x0008, /* assocation (network join) and station log */
++ L_FUNC = (ACX_DEBUG>1)*0x0020, /* logging of function enter / leave */
++ L_XFER = (ACX_DEBUG>1)*0x0080, /* logging of transfers and mgmt */
++ L_DATA = (ACX_DEBUG>1)*0x0100, /* logging of transfer data */
++ L_DEBUG = (ACX_DEBUG>1)*0x0200, /* log of debug info */
++ L_IOCTL = (ACX_DEBUG>0)*0x0400, /* log ioctl calls */
++ L_CTL = (ACX_DEBUG>1)*0x0800, /* log of low-level ctl commands */
++ L_BUFR = (ACX_DEBUG>1)*0x1000, /* debug rx buffer mgmt (ring buffer etc.) */
++ L_XFER_BEACON = (ACX_DEBUG>1)*0x2000, /* also log beacon packets */
++ L_BUFT = (ACX_DEBUG>1)*0x4000, /* debug tx buffer mgmt (ring buffer etc.) */
++ L_USBRXTX = (ACX_DEBUG>0)*0x8000, /* debug USB rx/tx operations */
++ L_BUF = L_BUFR + L_BUFT,
++ L_ANY = 0xffff
++};
++
++#if ACX_DEBUG
++extern unsigned int acx_debug;
++#else
++enum { acx_debug = 0 };
++#endif
++
++
++/***********************************************************************
++** Random helpers
++*/
++#define ACX_PACKED __attribute__ ((packed))
++
++#define VEC_SIZE(a) (sizeof(a)/sizeof(a[0]))
++
++/* Use worker_queues for 2.5/2.6 kernels and queue tasks for 2.4 kernels
++ (used for the 'bottom half' of the interrupt routine) */
++
++#include <linux/workqueue.h>
++#define USE_WORKER_TASKS
++#define WORK_STRUCT struct work_struct
++#define SCHEDULE_WORK schedule_work
++#define FLUSH_SCHEDULED_WORK flush_scheduled_work
++
++
++/***********************************************************************
++** Constants
++*/
++#define OK 0
++#define NOT_OK 1
++
++/* The supported chip models */
++#define CHIPTYPE_ACX100 1
++#define CHIPTYPE_ACX111 2
++
++#define IS_ACX100(adev) ((adev)->chip_type == CHIPTYPE_ACX100)
++#define IS_ACX111(adev) ((adev)->chip_type == CHIPTYPE_ACX111)
++
++/* Supported interfaces */
++#define DEVTYPE_PCI 0
++#define DEVTYPE_USB 1
++#define DEVTYPE_MEM 2
++
++#if !defined(CONFIG_ACX_PCI) && !defined(CONFIG_ACX_USB) && !defined(CONFIG_ACX_MEM) && !defined(CONFIG_ACX_CS)
++#error Driver must include PCI, USB, PCMCIA or memory mapped interface support. You selected none of them.
++#endif
++
++#if defined(CONFIG_ACX_PCI)
++ #if !defined(CONFIG_ACX_USB)
++ #define IS_PCI(adev) 1
++ #else
++ #define IS_PCI(adev) ((adev)->dev_type == DEVTYPE_PCI)
++ #endif
++#else
++ #define IS_PCI(adev) 0
++#endif
++
++#if defined(CONFIG_ACX_USB)
++ #if !defined(CONFIG_ACX_PCI)
++ #define IS_USB(adev) 1
++ #else
++ #define IS_USB(adev) ((adev)->dev_type == DEVTYPE_USB)
++ #endif
++#else
++ #define IS_USB(adev) 0
++#endif
++
++#if defined(CONFIG_ACX_MEM) || defined(CONFIG_ACX_CS)
++ #define IS_MEM(adev) 1
++#else
++ #define IS_MEM(adev) 0
++#endif
++
++/* Driver defaults */
++#define DEFAULT_DTIM_INTERVAL 10
++/* used to be 2048, but FreeBSD driver changed it to 4096 to work properly
++** in noisy wlans */
++#define DEFAULT_MSDU_LIFETIME 4096
++#define DEFAULT_RTS_THRESHOLD 2312 /* max. size: disable RTS mechanism */
++#define DEFAULT_BEACON_INTERVAL 100
++
++#define ACX100_BAP_DATALEN_MAX 4096
++#define ACX100_RID_GUESSING_MAXLEN 2048 /* I'm not really sure */
++#define ACX100_RIDDATA_MAXLEN ACX100_RID_GUESSING_MAXLEN
++
++/* Support Constants */
++/* Radio type names, found in Win98 driver's TIACXLN.INF */
++#define RADIO_MAXIM_0D 0x0d
++#define RADIO_RFMD_11 0x11
++#define RADIO_RALINK_15 0x15
++/* used in ACX111 cards (WG311v2, WL-121, ...): */
++#define RADIO_RADIA_16 0x16
++/* most likely *sometimes* used in ACX111 cards: */
++#define RADIO_UNKNOWN_17 0x17
++/* FwRad19.bin was found in a Safecom driver; must be an ACX111 radio: */
++#define RADIO_UNKNOWN_19 0x19
++#define RADIO_UNKNOWN_1B 0x1b /* radio in SafeCom SWLUT-54125 USB adapter; entirely unknown!! */
++
++/* Controller Commands */
++/* can be found in table cmdTable in firmware "Rev. 1.5.0" (FW150) */
++#define ACX1xx_CMD_RESET 0x00
++#define ACX1xx_CMD_INTERROGATE 0x01
++#define ACX1xx_CMD_CONFIGURE 0x02
++#define ACX1xx_CMD_ENABLE_RX 0x03
++#define ACX1xx_CMD_ENABLE_TX 0x04
++#define ACX1xx_CMD_DISABLE_RX 0x05
++#define ACX1xx_CMD_DISABLE_TX 0x06
++#define ACX1xx_CMD_FLUSH_QUEUE 0x07
++#define ACX1xx_CMD_SCAN 0x08
++#define ACX1xx_CMD_STOP_SCAN 0x09
++#define ACX1xx_CMD_CONFIG_TIM 0x0a
++#define ACX1xx_CMD_JOIN 0x0b
++#define ACX1xx_CMD_WEP_MGMT 0x0c
++#ifdef OLD_FIRMWARE_VERSIONS
++#define ACX100_CMD_HALT 0x0e /* mapped to unknownCMD in FW150 */
++#else
++#define ACX1xx_CMD_MEM_READ 0x0d
++#define ACX1xx_CMD_MEM_WRITE 0x0e
++#endif
++#define ACX1xx_CMD_SLEEP 0x0f
++#define ACX1xx_CMD_WAKE 0x10
++#define ACX1xx_CMD_UNKNOWN_11 0x11 /* mapped to unknownCMD in FW150 */
++#define ACX100_CMD_INIT_MEMORY 0x12
++#define ACX1FF_CMD_DISABLE_RADIO 0x12 /* new firmware? TNETW1450? */
++#define ACX1xx_CMD_CONFIG_BEACON 0x13
++#define ACX1xx_CMD_CONFIG_PROBE_RESPONSE 0x14
++#define ACX1xx_CMD_CONFIG_NULL_DATA 0x15
++#define ACX1xx_CMD_CONFIG_PROBE_REQUEST 0x16
++#define ACX1xx_CMD_FCC_TEST 0x17
++#define ACX1xx_CMD_RADIOINIT 0x18
++#define ACX111_CMD_RADIOCALIB 0x19
++#define ACX1FF_CMD_NOISE_HISTOGRAM 0x1c /* new firmware? TNETW1450? */
++#define ACX1FF_CMD_RX_RESET 0x1d /* new firmware? TNETW1450? */
++#define ACX1FF_CMD_LNA_CONTROL 0x20 /* new firmware? TNETW1450? */
++#define ACX1FF_CMD_CONTROL_DBG_TRACE 0x21 /* new firmware? TNETW1450? */
++
++/* 'After Interrupt' Commands */
++#define ACX_AFTER_IRQ_CMD_STOP_SCAN 0x01
++#define ACX_AFTER_IRQ_CMD_ASSOCIATE 0x02
++#define ACX_AFTER_IRQ_CMD_RADIO_RECALIB 0x04
++#define ACX_AFTER_IRQ_UPDATE_CARD_CFG 0x08
++#define ACX_AFTER_IRQ_TX_CLEANUP 0x10
++#define ACX_AFTER_IRQ_COMPLETE_SCAN 0x20
++#define ACX_AFTER_IRQ_RESTART_SCAN 0x40
++
++/***********************************************************************
++** Tx/Rx buffer sizes and watermarks
++**
++** This will alloc and use DMAable buffers of
++** WLAN_A4FR_MAXLEN_WEP_FCS * (RX_CNT + TX_CNT) bytes
++** RX/TX_CNT=32 -> ~150k DMA buffers
++** RX/TX_CNT=16 -> ~75k DMA buffers
++**
++** 2005-10-10: reduced memory usage by lowering both to 16
++*/
++#define RX_CNT 16
++#define TX_CNT 16
++
++/* we clean up txdescs when we have N free txdesc: */
++#define TX_CLEAN_BACKLOG (TX_CNT/4)
++#define TX_START_CLEAN (TX_CNT - TX_CLEAN_BACKLOG)
++#define TX_EMERG_CLEAN 2
++/* we stop queue if we have < N free txbufs: */
++#define TX_STOP_QUEUE 3
++/* we start queue if we have >= N free txbufs: */
++#define TX_START_QUEUE 5
++
++/***********************************************************************
++** Interrogate/Configure cmd constants
++**
++** NB: length includes JUST the data part of the IE
++** (does not include size of the (type,len) pair)
++**
++** TODO: seems that acx100, acx100usb, acx111 have some differences,
++** fix code with regard to this!
++*/
++
++#define DEF_IE(name, val, len) enum { ACX##name=val, ACX##name##_LEN=len }
++
++/* Information Elements: Network Parameters, Static Configuration Entities */
++/* these are handled by real_cfgtable in firmware "Rev 1.5.0" (FW150) */
++DEF_IE(1xx_IE_UNKNOWN_00 ,0x0000, -1); /* mapped to cfgInvalid in FW150 */
++DEF_IE(100_IE_ACX_TIMER ,0x0001, 0x10);
++DEF_IE(1xx_IE_POWER_MGMT ,0x0002, 0x06); /* TNETW1450: length 0x18!! */
++DEF_IE(1xx_IE_QUEUE_CONFIG ,0x0003, 0x1c);
++DEF_IE(100_IE_BLOCK_SIZE ,0x0004, 0x02);
++DEF_IE(1FF_IE_SLOT_TIME ,0x0004, 0x08); /* later firmware versions only? */
++DEF_IE(1xx_IE_MEMORY_CONFIG_OPTIONS ,0x0005, 0x14);
++DEF_IE(1FF_IE_QUEUE_HEAD ,0x0005, 0x14 /* FIXME: length? */);
++DEF_IE(1xx_IE_RATE_FALLBACK ,0x0006, 0x01); /* TNETW1450: length 2 */
++DEF_IE(100_IE_WEP_OPTIONS ,0x0007, 0x03);
++DEF_IE(111_IE_RADIO_BAND ,0x0007, -1);
++DEF_IE(1FF_IE_TIMING_CFG ,0x0007, -1); /* later firmware versions; TNETW1450 only? */
++DEF_IE(100_IE_SSID ,0x0008, 0x20); /* huh? */
++DEF_IE(1xx_IE_MEMORY_MAP ,0x0008, 0x28); /* huh? TNETW1450 has length 0x40!! */
++DEF_IE(1xx_IE_SCAN_STATUS ,0x0009, 0x04); /* mapped to cfgInvalid in FW150 */
++DEF_IE(1xx_IE_ASSOC_ID ,0x000a, 0x02);
++DEF_IE(1xx_IE_UNKNOWN_0B ,0x000b, -1); /* mapped to cfgInvalid in FW150 */
++DEF_IE(1FF_IE_TX_POWER_LEVEL_TABLE ,0x000b, 0x18); /* later firmware versions; TNETW1450 only? */
++DEF_IE(100_IE_UNKNOWN_0C ,0x000c, -1); /* very small implementation in FW150! */
++/* ACX100 has an equivalent struct in the cmd mailbox directly after reset.
++ * 0x14c seems extremely large, will trash stack on failure (memset!)
++ * in case of small input struct --> OOPS! */
++DEF_IE(111_IE_CONFIG_OPTIONS ,0x000c, 0x14c);
++DEF_IE(1xx_IE_FWREV ,0x000d, 0x18);
++DEF_IE(1xx_IE_FCS_ERROR_COUNT ,0x000e, 0x04);
++DEF_IE(1xx_IE_MEDIUM_USAGE ,0x000f, 0x08);
++DEF_IE(1xx_IE_RXCONFIG ,0x0010, 0x04);
++DEF_IE(100_IE_UNKNOWN_11 ,0x0011, -1); /* NONBINARY: large implementation in FW150! link quality readings or so? */
++DEF_IE(111_IE_QUEUE_THRESH ,0x0011, -1);
++DEF_IE(100_IE_UNKNOWN_12 ,0x0012, -1); /* NONBINARY: VERY large implementation in FW150!! */
++DEF_IE(111_IE_BSS_POWER_SAVE ,0x0012, /* -1 */ 2);
++DEF_IE(1xx_IE_FIRMWARE_STATISTICS ,0x0013, 0x9c); /* TNETW1450: length 0x134!! */
++DEF_IE(1FF_IE_RX_INTR_CONFIG ,0x0014, 0x14); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1xx_IE_FEATURE_CONFIG ,0x0015, 0x08);
++DEF_IE(111_IE_KEY_CHOOSE ,0x0016, 0x04); /* for rekeying. really len=4?? */
++DEF_IE(1FF_IE_MISC_CONFIG_TABLE ,0x0017, 0x04); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_WONE_CONFIG ,0x0018, -1); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_TID_CONFIG ,0x001a, 0x2c); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_CALIB_ASSESSMENT ,0x001e, 0x04); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_BEACON_FILTER_OPTIONS ,0x001f, 0x02); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_LOW_RSSI_THRESH_OPT ,0x0020, 0x04); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_NOISE_HISTOGRAM_RESULTS ,0x0021, 0x30); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_PACKET_DETECT_THRESH ,0x0023, 0x04); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_TX_CONFIG_OPTIONS ,0x0024, 0x04); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_CCA_THRESHOLD ,0x0025, 0x02); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_EVENT_MASK ,0x0026, 0x08); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_DTIM_PERIOD ,0x0027, 0x02); /* later firmware versions, TNETW1450 only? */
++DEF_IE(1FF_IE_ACI_CONFIG_SET ,0x0029, 0x06); /* later firmware versions; maybe TNETW1450 only? */
++DEF_IE(1FF_IE_EEPROM_VER ,0x0030, 0x04); /* later firmware versions; maybe TNETW1450 only? */
++DEF_IE(1xx_IE_DOT11_STATION_ID ,0x1001, 0x06);
++DEF_IE(100_IE_DOT11_UNKNOWN_1002 ,0x1002, -1); /* mapped to cfgInvalid in FW150 */
++DEF_IE(111_IE_DOT11_FRAG_THRESH ,0x1002, -1); /* mapped to cfgInvalid in FW150; TNETW1450 has length 2!! */
++DEF_IE(100_IE_DOT11_BEACON_PERIOD ,0x1003, 0x02); /* mapped to cfgInvalid in FW150 */
++DEF_IE(1xx_IE_DOT11_DTIM_PERIOD ,0x1004, -1); /* mapped to cfgInvalid in FW150 */
++DEF_IE(1FF_IE_DOT11_MAX_RX_LIFETIME ,0x1004, -1); /* later firmware versions; maybe TNETW1450 only? */
++DEF_IE(1xx_IE_DOT11_SHORT_RETRY_LIMIT ,0x1005, 0x01); /* TNETW1450: length 2 */
++DEF_IE(1xx_IE_DOT11_LONG_RETRY_LIMIT ,0x1006, 0x01); /* TNETW1450: length 2 */
++DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_WRITE ,0x1007, 0x20); /* configure default keys; TNETW1450 has length 0x24!! */
++DEF_IE(1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME ,0x1008, 0x04);
++DEF_IE(1xx_IE_DOT11_GROUP_ADDR ,0x1009, -1);
++DEF_IE(1xx_IE_DOT11_CURRENT_REG_DOMAIN ,0x100a, 0x02);
++/* It's harmless to have larger struct. Use USB case always. */
++DEF_IE(1xx_IE_DOT11_CURRENT_ANTENNA ,0x100b, 0x02); /* in fact len=1 for PCI */
++DEF_IE(1xx_IE_DOT11_UNKNOWN_100C ,0x100c, -1); /* mapped to cfgInvalid in FW150 */
++DEF_IE(1xx_IE_DOT11_TX_POWER_LEVEL ,0x100d, 0x01); /* TNETW1450 has length 2!! */
++DEF_IE(1xx_IE_DOT11_CURRENT_CCA_MODE ,0x100e, 0x02); /* in fact len=1 for PCI */
++/* USB doesn't return anything - len==0?! */
++DEF_IE(100_IE_DOT11_ED_THRESHOLD ,0x100f, 0x04);
++DEF_IE(1xx_IE_DOT11_WEP_DEFAULT_KEY_SET ,0x1010, 0x01); /* set default key ID; TNETW1450: length 2 */
++DEF_IE(100_IE_DOT11_UNKNOWN_1011 ,0x1011, -1); /* mapped to cfgInvalid in FW150 */
++DEF_IE(1FF_IE_DOT11_CURR_5GHZ_REGDOM ,0x1011, -1); /* later firmware versions; maybe TNETW1450 only? */
++DEF_IE(100_IE_DOT11_UNKNOWN_1012 ,0x1012, -1); /* mapped to cfgInvalid in FW150 */
++DEF_IE(100_IE_DOT11_UNKNOWN_1013 ,0x1013, -1); /* mapped to cfgInvalid in FW150 */
++
++#if 0
++/* Experimentally obtained on acx100, fw 1.9.8.b
++** -1 means that fw returned 'invalid IE'
++** 0200 FC00 nnnn... are test read contents: u16 type, u16 len, data
++** (AA are poison bytes marking bytes not written by fw)
++**
++** Looks like acx100 fw does not update len field (thus len=256-4=FC here)
++** A number of IEs seem to trash type,len fields
++** IEs marked 'huge' return gobs of data (no poison bytes remain)
++*/
++DEF_IE(100_IE_INVAL_00, 0x0000, -1);
++DEF_IE(100_IE_INVAL_01, 0x0001, -1); /* IE_ACX_TIMER, len=16 on older fw */
++DEF_IE(100_IE_POWER_MGMT, 0x0002, 4); /* 0200FC00 00040000 AAAAAAAA */
++DEF_IE(100_IE_QUEUE_CONFIG, 0x0003, 28); /* 0300FC00 48060000 9CAD0000 0101AAAA DCB00000 E4B00000 9CAA0000 00AAAAAA */
++DEF_IE(100_IE_BLOCK_SIZE, 0x0004, 2); /* 0400FC00 0001AAAA AAAAAAAA AAAAAAAA */
++/* write only: */
++DEF_IE(100_IE_MEMORY_CONFIG_OPTIONS, 0x0005, 20);
++DEF_IE(100_IE_RATE_FALLBACK, 0x0006, 1); /* 0600FC00 00AAAAAA AAAAAAAA AAAAAAAA */
++/* write only: */
++DEF_IE(100_IE_WEP_OPTIONS, 0x0007, 3);
++DEF_IE(100_IE_MEMORY_MAP, 0x0008, 40); /* huge: 0800FC00 30000000 6CA20000 70A20000... */
++/* gives INVAL on read: */
++DEF_IE(100_IE_SCAN_STATUS, 0x0009, -1);
++DEF_IE(100_IE_ASSOC_ID, 0x000a, 2); /* huge: 0A00FC00 00000000 01040800 00000000... */
++DEF_IE(100_IE_INVAL_0B, 0x000b, -1);
++/* 'command rejected': */
++DEF_IE(100_IE_CONFIG_OPTIONS, 0x000c, -3);
++DEF_IE(100_IE_FWREV, 0x000d, 24); /* 0D00FC00 52657620 312E392E 382E6200 AAAAAAAA AAAAAAAA 05050201 AAAAAAAA */
++DEF_IE(100_IE_FCS_ERROR_COUNT, 0x000e, 4);
++DEF_IE(100_IE_MEDIUM_USAGE, 0x000f, 8); /* E41F0000 2D780300 FCC91300 AAAAAAAA */
++DEF_IE(100_IE_RXCONFIG, 0x0010, 4); /* 1000FC00 00280000 AAAAAAAA AAAAAAAA */
++DEF_IE(100_IE_QUEUE_THRESH, 0x0011, 12); /* 1100FC00 AAAAAAAA 00000000 00000000 */
++DEF_IE(100_IE_BSS_POWER_SAVE, 0x0012, 1); /* 1200FC00 00AAAAAA AAAAAAAA AAAAAAAA */
++/* read only, variable len */
++DEF_IE(100_IE_FIRMWARE_STATISTICS, 0x0013, 256); /* 0000AC00 00000000 ... */
++DEF_IE(100_IE_INT_CONFIG, 0x0014, 20); /* 00000000 00000000 00000000 00000000 5D74D105 00000000 AAAAAAAA AAAAAAAA */
++DEF_IE(100_IE_FEATURE_CONFIG, 0x0015, 8); /* 1500FC00 16000000 AAAAAAAA AAAAAAAA */
++/* returns 'invalid MAC': */
++DEF_IE(100_IE_KEY_CHOOSE, 0x0016, -4);
++DEF_IE(100_IE_INVAL_17, 0x0017, -1);
++DEF_IE(100_IE_UNKNOWN_18, 0x0018, 0); /* null len?! 1800FC00 AAAAAAAA AAAAAAAA AAAAAAAA */
++DEF_IE(100_IE_UNKNOWN_19, 0x0019, 256); /* huge: 1900FC00 9C1F00EA FEFFFFEA FEFFFFEA... */
++DEF_IE(100_IE_INVAL_1A, 0x001A, -1);
++
++DEF_IE(100_IE_DOT11_INVAL_1000, 0x1000, -1);
++DEF_IE(100_IE_DOT11_STATION_ID, 0x1001, 6); /* huge: 0110FC00 58B10E2F 03000000 00000000... */
++DEF_IE(100_IE_DOT11_INVAL_1002, 0x1002, -1);
++DEF_IE(100_IE_DOT11_INVAL_1003, 0x1003, -1);
++DEF_IE(100_IE_DOT11_INVAL_1004, 0x1004, -1);
++DEF_IE(100_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1);
++DEF_IE(100_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1);
++/* write only: */
++DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, 32);
++DEF_IE(100_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4); /* huge: 0810FC00 00020000 F4010000 00000000... */
++/* undoc but returns something */
++DEF_IE(100_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* huge: 0910FC00 00000000 00000000 00000000... */
++DEF_IE(100_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1); /* 0A10FC00 30AAAAAA AAAAAAAA AAAAAAAA */
++DEF_IE(100_IE_DOT11_CURRENT_ANTENNA, 0x100b, 1); /* 0B10FC00 8FAAAAAA AAAAAAAA AAAAAAAA */
++DEF_IE(100_IE_DOT11_INVAL_100C, 0x100c, -1);
++DEF_IE(100_IE_DOT11_TX_POWER_LEVEL, 0x100d, 2); /* 00000000 0100AAAA AAAAAAAA AAAAAAAA */
++DEF_IE(100_IE_DOT11_CURRENT_CCA_MODE, 0x100e, 1); /* 0E10FC00 0DAAAAAA AAAAAAAA AAAAAAAA */
++DEF_IE(100_IE_DOT11_ED_THRESHOLD, 0x100f, 4); /* 0F10FC00 70000000 AAAAAAAA AAAAAAAA */
++/* set default key ID */
++DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1); /* 1010FC00 00AAAAAA AAAAAAAA AAAAAAAA */
++DEF_IE(100_IE_DOT11_INVAL_1011, 0x1011, -1);
++DEF_IE(100_IE_DOT11_INVAL_1012, 0x1012, -1);
++DEF_IE(100_IE_DOT11_INVAL_1013, 0x1013, -1);
++DEF_IE(100_IE_DOT11_UNKNOWN_1014, 0x1014, 256); /* huge */
++DEF_IE(100_IE_DOT11_UNKNOWN_1015, 0x1015, 256); /* huge */
++DEF_IE(100_IE_DOT11_UNKNOWN_1016, 0x1016, 256); /* huge */
++DEF_IE(100_IE_DOT11_UNKNOWN_1017, 0x1017, 256); /* huge */
++DEF_IE(100_IE_DOT11_UNKNOWN_1018, 0x1018, 256); /* huge */
++DEF_IE(100_IE_DOT11_UNKNOWN_1019, 0x1019, 256); /* huge */
++#endif
++
++#if 0
++/* Experimentally obtained on PCI acx111 Xterasys XN-2522g, fw 1.2.1.34
++** -1 means that fw returned 'invalid IE'
++** 0400 0800 nnnn... are test read contents: u16 type, u16 len, data
++** (AA are poison bytes marking bytes not written by fw)
++**
++** Looks like acx111 fw reports real len!
++*/
++DEF_IE(111_IE_INVAL_00, 0x0000, -1);
++DEF_IE(111_IE_INVAL_01, 0x0001, -1);
++DEF_IE(111_IE_POWER_MGMT, 0x0002, 12);
++/* write only, variable len: 12 + rxqueue_cnt*8 + txqueue_cnt*4: */
++DEF_IE(111_IE_MEMORY_CONFIG, 0x0003, 24);
++DEF_IE(111_IE_BLOCK_SIZE, 0x0004, 8); /* 04000800 AA00AAAA AAAAAAAA */
++/* variable len: 8 + rxqueue_cnt*8 + txqueue_cnt*8: */
++DEF_IE(111_IE_QUEUE_HEAD, 0x0005, 24);
++DEF_IE(111_IE_RATE_FALLBACK, 0x0006, 1);
++/* acx100 name:WEP_OPTIONS */
++/* said to have len:1 (not true, actually returns 12 bytes): */
++DEF_IE(111_IE_RADIO_BAND, 0x0007, 12); /* 07000C00 AAAA1F00 FF03AAAA AAAAAAAA */
++DEF_IE(111_IE_MEMORY_MAP, 0x0008, 48);
++/* said to have len:4, but gives INVAL on read: */
++DEF_IE(111_IE_SCAN_STATUS, 0x0009, -1);
++DEF_IE(111_IE_ASSOC_ID, 0x000a, 2);
++/* write only, len is not known: */
++DEF_IE(111_IE_UNKNOWN_0B, 0x000b, 0);
++/* read only, variable len. I see 67 byte reads: */
++DEF_IE(111_IE_CONFIG_OPTIONS, 0x000c, 67); /* 0C004300 01160500 ... */
++DEF_IE(111_IE_FWREV, 0x000d, 24);
++DEF_IE(111_IE_FCS_ERROR_COUNT, 0x000e, 4);
++DEF_IE(111_IE_MEDIUM_USAGE, 0x000f, 8);
++DEF_IE(111_IE_RXCONFIG, 0x0010, 4);
++DEF_IE(111_IE_QUEUE_THRESH, 0x0011, 12);
++DEF_IE(111_IE_BSS_POWER_SAVE, 0x0012, 1);
++/* read only, variable len. I see 240 byte reads: */
++DEF_IE(111_IE_FIRMWARE_STATISTICS, 0x0013, 240); /* 1300F000 00000000 ... */
++/* said to have len=17. looks like fw pads it to 20: */
++DEF_IE(111_IE_INT_CONFIG, 0x0014, 20); /* 14001400 00000000 00000000 00000000 00000000 00000000 */
++DEF_IE(111_IE_FEATURE_CONFIG, 0x0015, 8);
++/* said to be name:KEY_INDICATOR, len:4, but gives INVAL on read: */
++DEF_IE(111_IE_KEY_CHOOSE, 0x0016, -1);
++/* said to have len:4, but in fact returns 8: */
++DEF_IE(111_IE_MAX_USB_XFR, 0x0017, 8); /* 17000800 00014000 00000000 */
++DEF_IE(111_IE_INVAL_18, 0x0018, -1);
++DEF_IE(111_IE_INVAL_19, 0x0019, -1);
++/* undoc but returns something: */
++/* huh, fw indicates len=20 but uses 4 more bytes in buffer??? */
++DEF_IE(111_IE_UNKNOWN_1A, 0x001A, 20); /* 1A001400 AA00AAAA 0000020F FF030000 00020000 00000007 04000000 */
++
++DEF_IE(111_IE_DOT11_INVAL_1000, 0x1000, -1);
++DEF_IE(111_IE_DOT11_STATION_ID, 0x1001, 6);
++DEF_IE(111_IE_DOT11_FRAG_THRESH, 0x1002, 2);
++/* acx100 only? gives INVAL on read: */
++DEF_IE(111_IE_DOT11_BEACON_PERIOD, 0x1003, -1);
++/* said to be MAX_RECV_MSDU_LIFETIME: */
++DEF_IE(111_IE_DOT11_DTIM_PERIOD, 0x1004, 4);
++DEF_IE(111_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1);
++DEF_IE(111_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1);
++/* acx100 only? gives INVAL on read: */
++DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, -1);
++DEF_IE(111_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4);
++/* undoc but returns something. maybe it's 2 multicast MACs to listen to? */
++DEF_IE(111_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* 09100C00 00000000 00000000 00000000 */
++DEF_IE(111_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1);
++DEF_IE(111_IE_DOT11_CURRENT_ANTENNA, 0x100b, 2);
++DEF_IE(111_IE_DOT11_INVAL_100C, 0x100c, -1);
++DEF_IE(111_IE_DOT11_TX_POWER_LEVEL, 0x100d, 1);
++/* said to have len=1 but gives INVAL on read: */
++DEF_IE(111_IE_DOT11_CURRENT_CCA_MODE, 0x100e, -1);
++/* said to have len=4 but gives INVAL on read: */
++DEF_IE(111_IE_DOT11_ED_THRESHOLD, 0x100f, -1);
++/* set default key ID. write only: */
++DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1);
++/* undoc but returns something: */
++DEF_IE(111_IE_DOT11_UNKNOWN_1011, 0x1011, 1); /* 11100100 20 */
++DEF_IE(111_IE_DOT11_INVAL_1012, 0x1012, -1);
++DEF_IE(111_IE_DOT11_INVAL_1013, 0x1013, -1);
++#endif
++
++
++/***********************************************************************
++**Information Frames Structures
++*/
++
++/* Used in beacon frames and the like */
++#define DOT11RATEBYTE_1 (1*2)
++#define DOT11RATEBYTE_2 (2*2)
++#define DOT11RATEBYTE_5_5 (5*2+1)
++#define DOT11RATEBYTE_11 (11*2)
++#define DOT11RATEBYTE_22 (22*2)
++#define DOT11RATEBYTE_6_G (6*2)
++#define DOT11RATEBYTE_9_G (9*2)
++#define DOT11RATEBYTE_12_G (12*2)
++#define DOT11RATEBYTE_18_G (18*2)
++#define DOT11RATEBYTE_24_G (24*2)
++#define DOT11RATEBYTE_36_G (36*2)
++#define DOT11RATEBYTE_48_G (48*2)
++#define DOT11RATEBYTE_54_G (54*2)
++#define DOT11RATEBYTE_BASIC 0x80 /* flags rates included in basic rate set */
++
++
++/***********************************************************************
++** rxbuffer_t
++**
++** This is the format of rx data returned by acx
++*/
++
++/* I've hoped it's a 802.11 PHY header, but no...
++ * so far, I've seen on acx111:
++ * 0000 3a00 0000 0000 IBSS Beacons
++ * 0000 3c00 0000 0000 ESS Beacons
++ * 0000 2700 0000 0000 Probe requests
++ * --vda
++ */
++typedef struct phy_hdr {
++ u8 unknown[4];
++ u8 acx111_unknown[4];
++} ACX_PACKED phy_hdr_t;
++
++/* seems to be a bit similar to hfa384x_rx_frame.
++ * These fields are still not quite obvious, though.
++ * Some seem to have different meanings... */
++
++#define RXBUF_HDRSIZE 12
++#define RXBUF_BYTES_RCVD(adev, rxbuf) \
++ ((le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0xfff) - (adev)->phy_header_len)
++#define RXBUF_BYTES_USED(rxbuf) \
++ ((le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0xfff) + RXBUF_HDRSIZE)
++/* USBism */
++#define RXBUF_IS_TXSTAT(rxbuf) (le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0x8000)
++/*
++mac_cnt_rcvd:
++ 12 bits: length of frame from control field to first byte of FCS
++ 3 bits: reserved
++ 1 bit: 1 = it's a tx status info, not a rx packet (USB only)
++
++mac_cnt_mblks:
++ 6 bits: number of memory block used to store frame in adapter memory
++ 1 bit: Traffic Indicator bit in TIM of received Beacon was set
++
++mac_status: 1 byte (bitmap):
++ 7 Matching BSSID
++ 6 Matching SSID
++ 5 BDCST Address 1 field is a broadcast
++ 4 VBM received beacon frame has more than one set bit (?!)
++ 3 TIM Set bit representing this station is set in TIM of received beacon
++ 2 GROUP Address 1 is a multicast
++ 1 ADDR1 Address 1 matches our MAC
++ 0 FCSGD FSC is good
++
++phy_stat_baseband: 1 byte (bitmap):
++ 7 Preamble frame had a long preamble
++ 6 PLCP Error CRC16 error in PLCP header
++ 5 Unsup_Mod unsupported modulation
++ 4 Selected Antenna antenna 1 was used to receive this frame
++ 3 PBCC/CCK frame used: 1=PBCC, 0=CCK modulation
++ 2 OFDM frame used OFDM modulation
++ 1 TI Protection protection frame was detected
++ 0 Reserved
++
++phy_plcp_signal: 1 byte:
++ Receive PLCP Signal field from the Baseband Processor
++
++phy_level: 1 byte:
++ receive AGC gain level (can be used to measure receive signal strength)
++
++phy_snr: 1 byte:
++ estimated noise power of equalized receive signal
++ at input of FEC decoder (can be used to measure receive signal quality)
++
++time: 4 bytes:
++ timestamp sampled from either the Access Manager TSF counter
++ or free-running microsecond counter when the MAC receives
++ first byte of PLCP header.
++*/
++
++typedef struct rxbuffer {
++ u16 mac_cnt_rcvd; /* only 12 bits are len! (0xfff) */
++ u8 mac_cnt_mblks;
++ u8 mac_status;
++ u8 phy_stat_baseband; /* bit 0x80: used LNA (Low-Noise Amplifier) */
++ u8 phy_plcp_signal;
++ u8 phy_level; /* PHY stat */
++ u8 phy_snr; /* PHY stat */
++ u32 time; /* timestamp upon MAC rcv first byte */
++/* 4-byte (acx100) or 8-byte (acx111) phy header will be here
++** if RX_CFG1_INCLUDE_PHY_HDR is in effect:
++** phy_hdr_t phy */
++ wlan_hdr_a3_t hdr_a3;
++ /* maximally sized data part of wlan packet */
++ u8 data_a3[WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN];
++ /* can add hdr/data_a4 if needed */
++} ACX_PACKED rxbuffer_t;
++
++
++/*--- Firmware statistics ----------------------------------------------------*/
++
++/* define a random 100 bytes more to catch firmware versions which
++ * provide a bigger struct */
++#define FW_STATS_FUTURE_EXTENSION 100
++
++typedef struct fw_stats_tx {
++ u32 tx_desc_of;
++} ACX_PACKED fw_stats_tx_t;
++
++typedef struct fw_stats_rx {
++ u32 rx_oom;
++ u32 rx_hdr_of;
++ u32 rx_hw_stuck; /* old: u32 rx_hdr_use_next */
++ u32 rx_dropped_frame;
++ u32 rx_frame_ptr_err;
++ u32 rx_xfr_hint_trig;
++ u32 rx_aci_events; /* later versions only */
++ u32 rx_aci_resets; /* later versions only */
++} ACX_PACKED fw_stats_rx_t;
++
++typedef struct fw_stats_dma {
++ u32 rx_dma_req;
++ u32 rx_dma_err;
++ u32 tx_dma_req;
++ u32 tx_dma_err;
++} ACX_PACKED fw_stats_dma_t;
++
++typedef struct fw_stats_irq {
++ u32 cmd_cplt;
++ u32 fiq;
++ u32 rx_hdrs;
++ u32 rx_cmplt;
++ u32 rx_mem_of;
++ u32 rx_rdys;
++ u32 irqs;
++ u32 tx_procs;
++ u32 decrypt_done;
++ u32 dma_0_done;
++ u32 dma_1_done;
++ u32 tx_exch_complet;
++ u32 commands;
++ u32 rx_procs;
++ u32 hw_pm_mode_changes;
++ u32 host_acks;
++ u32 pci_pm;
++ u32 acm_wakeups;
++} ACX_PACKED fw_stats_irq_t;
++
++typedef struct fw_stats_wep {
++ u32 wep_key_count;
++ u32 wep_default_key_count;
++ u32 dot11_def_key_mib;
++ u32 wep_key_not_found;
++ u32 wep_decrypt_fail;
++ u32 wep_pkt_decrypt;
++ u32 wep_decrypt_irqs;
++} ACX_PACKED fw_stats_wep_t;
++
++typedef struct fw_stats_pwr {
++ u32 tx_start_ctr;
++ u32 no_ps_tx_too_short;
++ u32 rx_start_ctr;
++ u32 no_ps_rx_too_short;
++ u32 lppd_started;
++ u32 no_lppd_too_noisy;
++ u32 no_lppd_too_short;
++ u32 no_lppd_matching_frame;
++} ACX_PACKED fw_stats_pwr_t;
++
++typedef struct fw_stats_mic {
++ u32 mic_rx_pkts;
++ u32 mic_calc_fail;
++} ACX_PACKED fw_stats_mic_t;
++
++typedef struct fw_stats_aes {
++ u32 aes_enc_fail;
++ u32 aes_dec_fail;
++ u32 aes_enc_pkts;
++ u32 aes_dec_pkts;
++ u32 aes_enc_irq;
++ u32 aes_dec_irq;
++} ACX_PACKED fw_stats_aes_t;
++
++typedef struct fw_stats_event {
++ u32 heartbeat;
++ u32 calibration;
++ u32 rx_mismatch;
++ u32 rx_mem_empty;
++ u32 rx_pool;
++ u32 oom_late;
++ u32 phy_tx_err;
++ u32 tx_stuck;
++} ACX_PACKED fw_stats_event_t;
++
++/* mainly for size calculation only */
++typedef struct fw_stats {
++ u16 type;
++ u16 len;
++ fw_stats_tx_t tx;
++ fw_stats_rx_t rx;
++ fw_stats_dma_t dma;
++ fw_stats_irq_t irq;
++ fw_stats_wep_t wep;
++ fw_stats_pwr_t pwr;
++ fw_stats_mic_t mic;
++ fw_stats_aes_t aes;
++ fw_stats_event_t evt;
++ u8 _padding[FW_STATS_FUTURE_EXTENSION];
++} fw_stats_t;
++
++/* Firmware version struct */
++
++typedef struct fw_ver {
++ u16 cmd;
++ u16 size;
++ char fw_id[20];
++ u32 hw_id;
++} ACX_PACKED fw_ver_t;
++
++#define FW_ID_SIZE 20
++
++typedef struct shared_queueindicator {
++ u32 indicator;
++ u16 host_lock;
++ u16 fw_lock;
++} ACX_PACKED queueindicator_t;
++
++/*--- WEP stuff --------------------------------------------------------------*/
++#define DOT11_MAX_DEFAULT_WEP_KEYS 4
++
++/* non-firmware struct, no packing necessary */
++typedef struct wep_key {
++ size_t size; /* most often used member first */
++ u8 index;
++ u8 key[29];
++ u16 strange_filler;
++} wep_key_t; /* size = 264 bytes (33*8) */
++/* FIXME: We don't have size 264! Or is there 2 bytes beyond the key
++ * (strange_filler)? */
++
++/* non-firmware struct, no packing necessary */
++typedef struct key_struct {
++ u8 addr[ETH_ALEN]; /* 0x00 */
++ u16 filler1; /* 0x06 */
++ u32 filler2; /* 0x08 */
++ u32 index; /* 0x0c */
++ u16 len; /* 0x10 */
++ u8 key[29]; /* 0x12; is this long enough??? */
++} key_struct_t; /* size = 276. FIXME: where is the remaining space?? */
++
++
++/*--- Client (peer) info -----------------------------------------------------*/
++/* adev->sta_list[] is used for:
++** accumulating and processing of scan results
++** keeping client info in AP mode
++** keeping AP info in STA mode (AP is the only one 'client')
++** keeping peer info in ad-hoc mode
++** non-firmware struct --> no packing necessary */
++enum {
++ CLIENT_EMPTY_SLOT_0 = 0,
++ CLIENT_EXIST_1 = 1,
++ CLIENT_AUTHENTICATED_2 = 2,
++ CLIENT_ASSOCIATED_3 = 3,
++ CLIENT_JOIN_CANDIDATE = 4
++};
++struct client {
++ /* most frequent access first */
++ u8 used; /* misnamed, more like 'status' */
++ struct client* next;
++ unsigned long mtime; /* last time we heard it, in jiffies */
++ size_t essid_len; /* length of ESSID (without '\0') */
++ u32 sir; /* Standard IR */
++ u32 snr; /* Signal to Noise Ratio */
++ u16 aid; /* association ID */
++ u16 seq; /* from client's auth req */
++ u16 auth_alg; /* from client's auth req */
++ u16 cap_info; /* from client's assoc req */
++ u16 rate_cap; /* what client supports (all rates) */
++ u16 rate_bas; /* what client supports (basic rates) */
++ u16 rate_cfg; /* what is allowed (by iwconfig etc) */
++ u16 rate_cur; /* currently used rate mask */
++ u8 rate_100; /* currently used rate byte (acx100 only) */
++ u8 address[ETH_ALEN];
++ u8 bssid[ETH_ALEN]; /* ad-hoc hosts can have bssid != mac */
++ u8 channel;
++ u8 auth_step;
++ u8 ignore_count;
++ u8 fallback_count;
++ u8 stepup_count;
++ char essid[IW_ESSID_MAX_SIZE + 1]; /* ESSID and trailing '\0' */
++/* FIXME: this one is too damn big */
++ char challenge_text[WLAN_CHALLENGE_LEN];
++};
++
++
++/***********************************************************************
++** Hardware structures
++*/
++
++/* An opaque typesafe helper type
++ *
++ * Some hardware fields are actually pointers,
++ * but they have to remain u32, since using ptr instead
++ * (8 bytes on 64bit systems!) would disrupt the fixed descriptor
++ * format the acx firmware expects in the non-user area.
++ * Since we cannot cram an 8 byte ptr into 4 bytes, we need to
++ * enforce that pointed to data remains in low memory
++ * (address value needs to fit in 4 bytes) on 64bit systems.
++ *
++ * This is easy to get wrong, thus we are using a small struct
++ * and special macros to access it. Macros will check for
++ * attempts to overflow an acx_ptr with value > 0xffffffff.
++ *
++ * Attempts to use acx_ptr without macros result in compile-time errors */
++
++typedef struct {
++ u32 v;
++} ACX_PACKED acx_ptr;
++
++#if ACX_DEBUG
++#define CHECK32(n) BUG_ON(sizeof(n)>4 && (long)(n)>0xffffff00)
++#else
++#define CHECK32(n) ((void)0)
++#endif
++
++/* acx_ptr <-> integer conversion */
++#define cpu2acx(n) ({ CHECK32(n); ((acx_ptr){ .v = cpu_to_le32(n) }); })
++#define acx2cpu(a) (le32_to_cpu(a.v))
++
++/* acx_ptr <-> pointer conversion */
++#define ptr2acx(p) ({ CHECK32(p); ((acx_ptr){ .v = cpu_to_le32((u32)(long)(p)) }); })
++#define acx2ptr(a) ((void*)le32_to_cpu(a.v))
++
++/* Values for rate field (acx100 only) */
++#define RATE100_1 10
++#define RATE100_2 20
++#define RATE100_5 55
++#define RATE100_11 110
++#define RATE100_22 220
++/* This bit denotes use of PBCC:
++** (PBCC encoding is usable with 11 and 22 Mbps speeds only) */
++#define RATE100_PBCC511 0x80
++
++/* Bit values for rate111 field */
++#define RATE111_1 0x0001 /* DBPSK */
++#define RATE111_2 0x0002 /* DQPSK */
++#define RATE111_5 0x0004 /* CCK or PBCC */
++#define RATE111_6 0x0008 /* CCK-OFDM or OFDM */
++#define RATE111_9 0x0010 /* CCK-OFDM or OFDM */
++#define RATE111_11 0x0020 /* CCK or PBCC */
++#define RATE111_12 0x0040 /* CCK-OFDM or OFDM */
++#define RATE111_18 0x0080 /* CCK-OFDM or OFDM */
++#define RATE111_22 0x0100 /* PBCC */
++#define RATE111_24 0x0200 /* CCK-OFDM or OFDM */
++#define RATE111_36 0x0400 /* CCK-OFDM or OFDM */
++#define RATE111_48 0x0800 /* CCK-OFDM or OFDM */
++#define RATE111_54 0x1000 /* CCK-OFDM or OFDM */
++#define RATE111_RESERVED 0x2000
++#define RATE111_PBCC511 0x4000 /* PBCC mod at 5.5 or 11Mbit (else CCK) */
++#define RATE111_SHORTPRE 0x8000 /* short preamble */
++/* Special 'try everything' value */
++#define RATE111_ALL 0x1fff
++/* These bits denote acx100 compatible settings */
++#define RATE111_ACX100_COMPAT 0x0127
++/* These bits denote 802.11b compatible settings */
++#define RATE111_80211B_COMPAT 0x0027
++
++/* Descriptor Ctl field bits
++ * init value is 0x8e, "idle" value is 0x82 (in idle tx descs)
++ */
++#define DESC_CTL_SHORT_PREAMBLE 0x01 /* preamble type: 0 = long; 1 = short */
++#define DESC_CTL_FIRSTFRAG 0x02 /* this is the 1st frag of the frame */
++#define DESC_CTL_AUTODMA 0x04
++#define DESC_CTL_RECLAIM 0x08 /* ready to reuse */
++#define DESC_CTL_HOSTDONE 0x20 /* host has finished processing */
++#define DESC_CTL_ACXDONE 0x40 /* acx has finished processing */
++/* host owns the desc [has to be released last, AFTER modifying all other desc fields!] */
++#define DESC_CTL_HOSTOWN 0x80
++#define DESC_CTL_ACXDONE_HOSTOWN (DESC_CTL_ACXDONE | DESC_CTL_HOSTOWN)
++
++/* Descriptor Status field
++ */
++#define DESC_STATUS_FULL (1 << 31)
++
++/* NB: some bits may be interesting for Monitor mode tx (aka Raw tx): */
++#define DESC_CTL2_SEQ 0x01 /* don't increase sequence field */
++#define DESC_CTL2_FCS 0x02 /* don't add the FCS */
++#define DESC_CTL2_MORE_FRAG 0x04
++#define DESC_CTL2_RETRY 0x08 /* don't increase retry field */
++#define DESC_CTL2_POWER 0x10 /* don't increase power mgmt. field */
++#define DESC_CTL2_RTS 0x20 /* do RTS/CTS magic before sending */
++#define DESC_CTL2_WEP 0x40 /* encrypt this frame */
++#define DESC_CTL2_DUR 0x80 /* don't increase duration field */
++
++/***********************************************************************
++** PCI structures
++*/
++/* IRQ Constants
++** (outside of "#ifdef PCI" because USB (mis)uses HOST_INT_SCAN_COMPLETE) */
++#define HOST_INT_RX_DATA 0x0001
++#define HOST_INT_TX_COMPLETE 0x0002
++#define HOST_INT_TX_XFER 0x0004
++#define HOST_INT_RX_COMPLETE 0x0008
++#define HOST_INT_DTIM 0x0010
++#define HOST_INT_BEACON 0x0020
++#define HOST_INT_TIMER 0x0040
++#define HOST_INT_KEY_NOT_FOUND 0x0080
++#define HOST_INT_IV_ICV_FAILURE 0x0100
++#define HOST_INT_CMD_COMPLETE 0x0200
++#define HOST_INT_INFO 0x0400
++#define HOST_INT_OVERFLOW 0x0800
++#define HOST_INT_PROCESS_ERROR 0x1000
++#define HOST_INT_SCAN_COMPLETE 0x2000
++#define HOST_INT_FCS_THRESHOLD 0x4000
++#define HOST_INT_UNKNOWN 0x8000
++
++/* Outside of "#ifdef PCI" because USB needs to know sizeof()
++** of txdesc and rxdesc: */
++struct txdesc {
++ acx_ptr pNextDesc; /* pointer to next txdesc */
++ acx_ptr HostMemPtr; /* 0x04 */
++ acx_ptr AcxMemPtr; /* 0x08 */
++ u32 tx_time; /* 0x0c */
++ u16 total_length; /* 0x10 */
++ u16 Reserved; /* 0x12 */
++
++/* The following 16 bytes do not change when acx100 owns the descriptor */
++/* BUG: fw clears last byte of this area which is supposedly reserved
++** for driver use. amd64 blew up. We dare not use it now */
++ u32 dummy[4];
++
++ u8 Ctl_8; /* 0x24, 8bit value */
++ u8 Ctl2_8; /* 0x25, 8bit value */
++ u8 error; /* 0x26 */
++ u8 ack_failures; /* 0x27 */
++
++ union {
++ /*
++ * Packing doesn't work correctly on ARM unless unions are on
++ * 4 byte boundaries.
++ */
++ struct {
++ u8 rts_failures; /* 0x28 */
++ u8 rts_ok; /* 0x29 */
++ u16 d1;
++ } ACX_PACKED rts;
++ struct {
++ u16 d1;
++ u8 rate; /* 0x2a */
++ u8 queue_ctrl; /* 0x2b */
++ } ACX_PACKED r1;
++ struct {
++ u16 d1;
++ u16 rate111; /* 0x2a */
++ } ACX_PACKED r2;
++ } ACX_PACKED u;
++ u32 queue_info; /* 0x2c (acx100, reserved on acx111) */
++} ACX_PACKED; /* size : 48 = 0x30 */
++/* NB: acx111 txdesc structure is 4 byte larger */
++/* All these 4 extra bytes are reserved. tx alloc code takes them into account */
++
++struct rxdesc {
++ acx_ptr pNextDesc; /* 0x00 */
++ acx_ptr HostMemPtr; /* 0x04 */
++ acx_ptr ACXMemPtr; /* 0x08 */
++ u32 rx_time; /* 0x0c */
++ u16 total_length; /* 0x10 */
++ u16 WEP_length; /* 0x12 */
++ u32 WEP_ofs; /* 0x14 */
++
++/* the following 16 bytes do not change when acx100 owns the descriptor */
++ u8 driverWorkspace[16]; /* 0x18 */
++
++ u8 Ctl_8;
++ u8 rate;
++ u8 error;
++ u8 SNR; /* Signal-to-Noise Ratio */
++ u8 RxLevel;
++ u8 queue_ctrl;
++ u16 unknown;
++ u32 unknown2;
++} ACX_PACKED; /* size 52 = 0x34 */
++
++#if defined(ACX_PCI) || defined(ACX_MEM)
++
++/* Register I/O offsets */
++#define ACX100_EEPROM_ID_OFFSET 0x380
++
++/* please add further ACX hardware register definitions only when
++ it turns out you need them in the driver, and please try to use
++ firmware functionality instead, since using direct I/O access instead
++ of letting the firmware do it might confuse the firmware's state
++ machine */
++
++/* ***** ABSOLUTELY ALWAYS KEEP OFFSETS IN SYNC WITH THE INITIALIZATION
++** OF THE I/O ARRAYS!!!! (grep for '^IO_ACX') ***** */
++enum {
++ IO_ACX_SOFT_RESET = 0,
++
++ IO_ACX_SLV_MEM_ADDR,
++ IO_ACX_SLV_MEM_DATA,
++ IO_ACX_SLV_MEM_CTL,
++ IO_ACX_SLV_END_CTL,
++
++ IO_ACX_FEMR, /* Function Event Mask */
++
++ IO_ACX_INT_TRIG,
++ IO_ACX_IRQ_MASK,
++ IO_ACX_IRQ_STATUS_NON_DES,
++ IO_ACX_IRQ_STATUS_CLEAR, /* CLEAR = clear on read */
++ IO_ACX_IRQ_ACK,
++ IO_ACX_HINT_TRIG,
++
++ IO_ACX_ENABLE,
++
++ IO_ACX_EEPROM_CTL,
++ IO_ACX_EEPROM_ADDR,
++ IO_ACX_EEPROM_DATA,
++ IO_ACX_EEPROM_CFG,
++
++ IO_ACX_PHY_ADDR,
++ IO_ACX_PHY_DATA,
++ IO_ACX_PHY_CTL,
++
++ IO_ACX_GPIO_OE,
++
++ IO_ACX_GPIO_OUT,
++
++ IO_ACX_CMD_MAILBOX_OFFS,
++ IO_ACX_INFO_MAILBOX_OFFS,
++ IO_ACX_EEPROM_INFORMATION,
++
++ IO_ACX_EE_START,
++ IO_ACX_SOR_CFG,
++ IO_ACX_ECPU_CTRL
++};
++/* ***** ABSOLUTELY ALWAYS KEEP OFFSETS IN SYNC WITH THE INITIALIZATION
++** OF THE I/O ARRAYS!!!! (grep for '^IO_ACX') ***** */
++
++/* Values for IO_ACX_INT_TRIG register: */
++/* inform hw that rxdesc in queue needs processing */
++#define INT_TRIG_RXPRC 0x08
++/* inform hw that txdesc in queue needs processing */
++#define INT_TRIG_TXPRC 0x04
++/* ack that we received info from info mailbox */
++#define INT_TRIG_INFOACK 0x02
++/* inform hw that we have filled command mailbox */
++#define INT_TRIG_CMD 0x01
++
++struct txhostdesc {
++ acx_ptr data_phy; /* 0x00 [u8 *] */
++ u16 data_offset; /* 0x04 */
++ u16 reserved; /* 0x06 */
++ u16 Ctl_16; /* 16bit value, endianness!! */
++ u16 length; /* 0x0a */
++ acx_ptr desc_phy_next; /* 0x0c [txhostdesc *] */
++ acx_ptr pNext; /* 0x10 [txhostdesc *] */
++ u32 Status; /* 0x14, unused on Tx */
++/* From here on you can use this area as you want (variable length, too!) */
++ u8 *data;
++} ACX_PACKED;
++
++struct rxhostdesc {
++ acx_ptr data_phy; /* 0x00 [rxbuffer_t *] */
++ u16 data_offset; /* 0x04 */
++ u16 reserved; /* 0x06 */
++ u16 Ctl_16; /* 0x08; 16bit value, endianness!! */
++ u16 length; /* 0x0a */
++ acx_ptr desc_phy_next; /* 0x0c [rxhostdesc_t *] */
++ acx_ptr pNext; /* 0x10 [rxhostdesc_t *] */
++ u32 Status; /* 0x14 */
++/* From here on you can use this area as you want (variable length, too!) */
++ rxbuffer_t *data;
++} ACX_PACKED;
++
++#endif /* ACX_PCI */
++
++/***********************************************************************
++** USB structures and constants
++*/
++#ifdef ACX_USB
++
++/* Used for usb_txbuffer.desc field */
++#define USB_TXBUF_TXDESC 0xA
++/* Size of header (everything up to data[]) */
++#define USB_TXBUF_HDRSIZE 14
++typedef struct usb_txbuffer {
++ u16 desc;
++ u16 mpdu_len;
++ u8 queue_index;
++ u8 rate;
++ u32 hostdata;
++ u8 ctrl1;
++ u8 ctrl2;
++ u16 data_len;
++ /* wlan packet content is placed here: */
++ u8 data[WLAN_A4FR_MAXLEN_WEP_FCS];
++} ACX_PACKED usb_txbuffer_t;
++
++/* USB returns either rx packets (see rxbuffer) or
++** these "tx status" structs: */
++typedef struct usb_txstatus {
++ u16 mac_cnt_rcvd; /* only 12 bits are len! (0xfff) */
++ u8 queue_index;
++ u8 mac_status; /* seen 0x20 on tx failure */
++ u32 hostdata;
++ u8 rate;
++ u8 ack_failures;
++ u8 rts_failures;
++ u8 rts_ok;
++} ACX_PACKED usb_txstatus_t;
++
++typedef struct usb_tx {
++ unsigned busy:1;
++ struct urb *urb;
++ acx_device_t *adev;
++ /* actual USB bulk output data block is here: */
++ usb_txbuffer_t bulkout;
++} usb_tx_t;
++
++struct usb_rx_plain {
++ unsigned busy:1;
++ struct urb *urb;
++ acx_device_t *adev;
++ rxbuffer_t bulkin;
++};
++
++typedef struct usb_rx {
++ unsigned busy:1;
++ struct urb *urb;
++ acx_device_t *adev;
++ rxbuffer_t bulkin;
++ /* Make entire structure 4k. Report if it breaks something. */
++ u8 padding[4*1024 - sizeof(struct usb_rx_plain)];
++} usb_rx_t;
++#endif /* ACX_USB */
++
++
++/* Config Option structs */
++
++typedef struct co_antennas {
++ u8 type;
++ u8 len;
++ u8 list[2];
++} ACX_PACKED co_antennas_t;
++
++typedef struct co_powerlevels {
++ u8 type;
++ u8 len;
++ u16 list[8];
++} ACX_PACKED co_powerlevels_t;
++
++typedef struct co_datarates {
++ u8 type;
++ u8 len;
++ u8 list[8];
++} ACX_PACKED co_datarates_t;
++
++typedef struct co_domains {
++ u8 type;
++ u8 len;
++ u8 list[6];
++} ACX_PACKED co_domains_t;
++
++typedef struct co_product_id {
++ u8 type;
++ u8 len;
++ u8 list[128];
++} ACX_PACKED co_product_id_t;
++
++typedef struct co_manuf_id {
++ u8 type;
++ u8 len;
++ u8 list[128];
++} ACX_PACKED co_manuf_t;
++
++typedef struct co_fixed {
++ char NVSv[8];
++/* u16 NVS_vendor_offs; ACX111-only */
++/* u16 unknown; ACX111-only */
++ u8 MAC[6]; /* ACX100-only */
++ u16 probe_delay; /* ACX100-only */
++ u32 eof_memory;
++ u8 dot11CCAModes;
++ u8 dot11Diversity;
++ u8 dot11ShortPreambleOption;
++ u8 dot11PBCCOption;
++ u8 dot11ChannelAgility;
++ u8 dot11PhyType; /* FIXME: does 802.11 call it "dot11PHYType"? */
++ u8 dot11TempType;
++ u8 table_count;
++} ACX_PACKED co_fixed_t;
++
++typedef struct acx111_ie_configoption {
++ u16 type;
++ u16 len;
++/* Do not access below members directly, they are in fact variable length */
++ co_fixed_t fixed;
++ co_antennas_t antennas;
++ co_powerlevels_t power_levels;
++ co_datarates_t data_rates;
++ co_domains_t domains;
++ co_product_id_t product_id;
++ co_manuf_t manufacturer;
++ u8 _padding[4];
++} ACX_PACKED acx111_ie_configoption_t;
++
++
++/***********************************************************************
++** Main acx per-device data structure
++*/
++#define ACX_STATE_FW_LOADED 0x01
++#define ACX_STATE_IFACE_UP 0x02
++
++/* MAC mode (BSS type) defines
++ * Note that they shouldn't be redefined, since they are also used
++ * during communication with firmware */
++#define ACX_MODE_0_ADHOC 0
++#define ACX_MODE_1_UNUSED 1
++#define ACX_MODE_2_STA 2
++#define ACX_MODE_3_AP 3
++/* These are our own inventions. Sending these to firmware
++** makes it stop emitting beacons, which is exactly what we want
++** for these modes */
++#define ACX_MODE_MONITOR 0xfe
++#define ACX_MODE_OFF 0xff
++/* 'Submode': identifies exact status of ADHOC/STA host */
++#define ACX_STATUS_0_STOPPED 0
++#define ACX_STATUS_1_SCANNING 1
++#define ACX_STATUS_2_WAIT_AUTH 2
++#define ACX_STATUS_3_AUTHENTICATED 3
++#define ACX_STATUS_4_ASSOCIATED 4
++
++/* FIXME: this should be named something like struct acx_priv (typedef'd to
++ * acx_priv_t) */
++
++/* non-firmware struct, no packing necessary */
++struct acx_device {
++ /* most frequent accesses first (dereferencing and cache line!) */
++
++ /*** Locking ***/
++ /* FIXME: try to convert semaphore to more efficient mutex according
++ to Ingo Molnar's docs (but not before driver is in mainline or
++ pre-mutex Linux 2.6.10 is very outdated). */
++ struct semaphore sem;
++ spinlock_t lock;
++#if defined(PARANOID_LOCKING) /* Lock debugging */
++ const char *last_sem;
++ const char *last_lock;
++ unsigned long sem_time;
++ unsigned long lock_time;
++#endif
++#ifdef ACX_MEM
++ spinlock_t txbuf_lock;
++#endif
++
++ /*** Linux network device ***/
++ struct net_device *ndev; /* pointer to linux netdevice */
++
++ /*** Device statistics ***/
++ struct net_device_stats stats; /* net device statistics */
++#ifdef WIRELESS_EXT
++ struct iw_statistics wstats; /* wireless statistics */
++#endif
++ /*** Power managment ***/
++ struct pm_dev *pm; /* PM crap */
++
++ /*** Management timer ***/
++ struct timer_list mgmt_timer;
++
++ /*** Hardware identification ***/
++ const char *chip_name;
++ u8 dev_type;
++ u8 chip_type;
++ u8 form_factor;
++ u8 radio_type;
++ u8 eeprom_version;
++
++ /*** Config retrieved from EEPROM ***/
++ char cfgopt_NVSv[8];
++ u16 cfgopt_NVS_vendor_offs;
++ u8 cfgopt_MAC[6];
++ u16 cfgopt_probe_delay;
++ u32 cfgopt_eof_memory;
++ u8 cfgopt_dot11CCAModes;
++ u8 cfgopt_dot11Diversity;
++ u8 cfgopt_dot11ShortPreambleOption;
++ u8 cfgopt_dot11PBCCOption;
++ u8 cfgopt_dot11ChannelAgility;
++ u8 cfgopt_dot11PhyType;
++ u8 cfgopt_dot11TempType;
++ co_antennas_t cfgopt_antennas;
++ co_powerlevels_t cfgopt_power_levels;
++ co_datarates_t cfgopt_data_rates;
++ co_domains_t cfgopt_domains;
++ co_product_id_t cfgopt_product_id;
++ co_manuf_t cfgopt_manufacturer;
++
++ /*** Firmware identification ***/
++ char firmware_version[FW_ID_SIZE+1];
++ u32 firmware_numver;
++ u32 firmware_id;
++ const u16 *ie_len;
++ const u16 *ie_len_dot11;
++
++ /*** Device state ***/
++ u16 dev_state_mask;
++ u8 led_power; /* power LED status */
++ u32 get_mask; /* mask of settings to fetch from the card */
++ u32 set_mask; /* mask of settings to write to the card */
++
++ /* Barely used in USB case */
++ u16 irq_status;
++
++ u8 after_interrupt_jobs; /* mini job list for doing actions after an interrupt occurred */
++ WORK_STRUCT after_interrupt_task; /* our task for after interrupt actions */
++
++ /*** scanning ***/
++ u16 scan_count; /* number of times to do channel scan */
++ u8 scan_mode; /* 0 == active, 1 == passive, 2 == background */
++ u8 scan_rate;
++ u16 scan_duration;
++ u16 scan_probe_delay;
++#if WIRELESS_EXT > 15
++ struct iw_spy_data spy_data; /* FIXME: needs to be implemented! */
++#endif
++
++ /*** Wireless network settings ***/
++ /* copy of the device address (ifconfig hw ether) that we actually use
++ ** for 802.11; copied over from the network device's MAC address
++ ** (ifconfig) when it makes sense only */
++ u8 dev_addr[MAX_ADDR_LEN];
++ u8 bssid[ETH_ALEN]; /* the BSSID after having joined */
++ u8 ap[ETH_ALEN]; /* The AP we want, FF:FF:FF:FF:FF:FF is any */
++ u16 aid; /* The Association ID sent from the AP / last used AID if we're an AP */
++ u16 mode; /* mode from iwconfig */
++ int monitor_type; /* ARPHRD_IEEE80211 or ARPHRD_IEEE80211_PRISM */
++ u16 status; /* 802.11 association status */
++ u8 essid_active; /* specific ESSID active, or select any? */
++ u8 essid_len; /* to avoid dozens of strlen() */
++ /* INCLUDES \0 termination for easy printf - but many places
++ ** simply want the string data memcpy'd plus a length indicator!
++ ** Keep that in mind... */
++ char essid[IW_ESSID_MAX_SIZE+1];
++ /* essid we are going to use for association, in case of "essid 'any'"
++ ** and in case of hidden ESSID (use configured ESSID then) */
++ char essid_for_assoc[IW_ESSID_MAX_SIZE+1];
++ char nick[IW_ESSID_MAX_SIZE+1]; /* see essid! */
++ u8 channel;
++ u8 reg_dom_id; /* reg domain setting */
++ u16 reg_dom_chanmask;
++ u16 auth_or_assoc_retries;
++ u16 scan_retries;
++ unsigned long scan_start; /* YES, jiffies is defined as "unsigned long" */
++
++ /* stations known to us (if we're an ap) */
++ client_t sta_list[32]; /* tab is larger than list, so that */
++ client_t *sta_hash_tab[64]; /* hash collisions are not likely */
++ client_t *ap_client; /* this one is our AP (STA mode only) */
++
++ int dup_count;
++ int nondup_count;
++ unsigned long dup_msg_expiry;
++ u16 last_seq_ctrl; /* duplicate packet detection */
++
++ /* 802.11 power save mode */
++ u8 ps_wakeup_cfg;
++ u8 ps_listen_interval;
++ u8 ps_options;
++ u8 ps_hangover_period;
++ u32 ps_enhanced_transition_time;
++ u32 ps_beacon_rx_time;
++
++ /*** PHY settings ***/
++ u8 fallback_threshold;
++ u8 stepup_threshold;
++ u16 rate_basic;
++ u16 rate_oper;
++ u16 rate_bcast;
++ u16 rate_bcast100;
++ u8 rate_auto; /* false if "iwconfig rate N" (WITHOUT 'auto'!) */
++ u8 preamble_mode; /* 0 == Long Preamble, 1 == Short, 2 == Auto */
++ u8 preamble_cur;
++
++ u8 tx_disabled;
++ u8 tx_level_dbm;
++ /* u8 tx_level_val; */
++ /* u8 tx_level_auto; whether to do automatic power adjustment */
++
++ unsigned long recalib_time_last_success;
++ unsigned long recalib_time_last_attempt;
++ int recalib_failure_count;
++ int recalib_msg_ratelimit;
++ int retry_errors_msg_ratelimit;
++
++ unsigned long brange_time_last_state_change; /* time the power LED was last changed */
++ u8 brange_last_state; /* last state of the LED */
++ u8 brange_max_quality; /* maximum quality that equates to full speed */
++
++ u8 sensitivity;
++ u8 antenna; /* antenna settings */
++ u8 ed_threshold; /* energy detect threshold */
++ u8 cca; /* clear channel assessment */
++
++ u16 rts_threshold;
++ u16 frag_threshold;
++ u32 short_retry;
++ u32 long_retry;
++ u16 msdu_lifetime;
++ u16 listen_interval; /* given in units of beacon interval */
++ u32 beacon_interval;
++
++ u16 capabilities;
++ u8 rate_supported_len;
++ u8 rate_supported[13];
++
++ /*** Encryption settings (WEP) ***/
++ u32 auth_alg; /* used in transmit_authen1 */
++ u8 wep_enabled;
++ u8 wep_restricted;
++ u8 wep_current_index;
++ wep_key_t wep_keys[DOT11_MAX_DEFAULT_WEP_KEYS]; /* the default WEP keys */
++ key_struct_t wep_key_struct[10];
++
++ /*** Unknown ***/
++ u8 dtim_interval;
++
++#ifdef ACX_MEM
++ u32 acx_txbuf_start;
++ int acx_txbuf_numblocks;
++ u32 acx_txbuf_free; /* addr of head of free list */
++ int acx_txbuf_blocks_free; /* how many are still open */
++ queueindicator_t *acx_queue_indicator;
++#endif
++
++ /*** Card Rx/Tx management ***/
++ u16 rx_config_1;
++ u16 rx_config_2;
++ u16 memblocksize;
++ unsigned int tx_free;
++ unsigned int tx_head; /* keep as close as possible to Tx stuff below (cache line) */
++ u16 phy_header_len;
++
++/*************************************************************************
++ *** PCI/USB/... must be last or else hw agnostic code breaks horribly ***
++ *************************************************************************/
++
++ /* hack to let common code compile. FIXME */
++ dma_addr_t rxhostdesc_startphy;
++
++ /*** PCI stuff ***/
++#if defined(ACX_PCI) || defined(ACX_MEM)
++ /* pointers to tx buffers, tx host descriptors (in host memory)
++ ** and tx descs in device memory */
++ unsigned int tx_tail;
++ u8 *txbuf_start;
++ txhostdesc_t *txhostdesc_start;
++ txdesc_t *txdesc_start; /* points to PCI-mapped memory */
++ dma_addr_t txbuf_startphy;
++ dma_addr_t txhostdesc_startphy;
++ /* sizes of above host memory areas */
++ unsigned int txbuf_area_size;
++ unsigned int txhostdesc_area_size;
++
++ unsigned int txdesc_size; /* size of txdesc; ACX111 = ACX100 + 4 */
++ client_t *txc[TX_CNT];
++ u16 txr[TX_CNT];
++
++ /* same for rx */
++ unsigned int rx_tail;
++ rxbuffer_t *rxbuf_start;
++ rxhostdesc_t *rxhostdesc_start;
++ rxdesc_t *rxdesc_start;
++ /* physical addresses of above host memory areas */
++ dma_addr_t rxbuf_startphy;
++ /* dma_addr_t rxhostdesc_startphy; */
++ unsigned int rxbuf_area_size;
++ unsigned int rxhostdesc_area_size;
++
++ u8 need_radio_fw;
++ u8 irqs_active; /* whether irq sending is activated */
++
++ const u16 *io; /* points to ACX100 or ACX111 PCI I/O register address set */
++
++#ifdef ACX_PCI
++ struct pci_dev *pdev;
++#endif
++#ifdef ACX_MEM
++ struct device *dev;
++#endif
++
++#ifdef ACX_PCI
++ unsigned long membase;
++#endif
++#ifdef ACX_MEM
++ volatile u32 *membase;
++#endif
++ unsigned long membase2;
++#ifdef ACX_PCI
++ void __iomem *iobase;
++#endif
++#ifdef ACX_MEM
++ volatile u32 *iobase;
++#endif
++ void __iomem *iobase2;
++ /* command interface */
++ u8 __iomem *cmd_area;
++ u8 __iomem *info_area;
++
++ u16 irq_mask; /* interrupt types to mask out (not wanted) with many IRQs activated */
++ u16 irq_mask_off; /* interrupt types to mask out (not wanted) with IRQs off */
++ unsigned int irq_loops_this_jiffy;
++ unsigned long irq_last_jiffies;
++#endif
++
++ /*** USB stuff ***/
++#ifdef ACX_USB
++ struct usb_device *usbdev;
++
++ rxbuffer_t rxtruncbuf;
++
++ usb_tx_t *usb_tx;
++ usb_rx_t *usb_rx;
++
++ int bulkinep; /* bulk-in endpoint */
++ int bulkoutep; /* bulk-out endpoint */
++ int rxtruncsize;
++#endif
++
++};
++
++static inline acx_device_t*
++ndev2adev(struct net_device *ndev)
++{
++ return netdev_priv(ndev);
++}
++
++
++/* For use with ACX1xx_IE_RXCONFIG */
++/* bit description
++ * 13 include additional header (length etc.) *required*
++ * struct is defined in 'struct rxbuffer'
++ * is this bit acx100 only? does acx111 always put the header,
++ * and bit setting is irrelevant? --vda
++ * 10 receive frames only with SSID used in last join cmd
++ * 9 discard broadcast
++ * 8 receive packets for multicast address 1
++ * 7 receive packets for multicast address 0
++ * 6 discard all multicast packets
++ * 5 discard frames from foreign BSSID
++ * 4 discard frames with foreign destination MAC address
++ * 3 promiscuous mode (receive ALL frames, disable filter)
++ * 2 include FCS
++ * 1 include phy header
++ * 0 ???
++ */
++#define RX_CFG1_INCLUDE_RXBUF_HDR 0x2000 /* ACX100 only */
++#define RX_CFG1_FILTER_SSID 0x0400
++#define RX_CFG1_FILTER_BCAST 0x0200
++#define RX_CFG1_RCV_MC_ADDR1 0x0100
++#define RX_CFG1_RCV_MC_ADDR0 0x0080
++#define RX_CFG1_FILTER_ALL_MULTI 0x0040
++#define RX_CFG1_FILTER_BSSID 0x0020
++#define RX_CFG1_FILTER_MAC 0x0010
++#define RX_CFG1_RCV_PROMISCUOUS 0x0008
++#define RX_CFG1_INCLUDE_FCS 0x0004
++#define RX_CFG1_INCLUDE_PHY_HDR (WANT_PHY_HDR ? 0x0002 : 0)
++/* bit description
++ * 11 receive association requests etc.
++ * 10 receive authentication frames
++ * 9 receive beacon frames
++ * 8 receive contention free packets
++ * 7 receive control frames
++ * 6 receive data frames
++ * 5 receive broken frames
++ * 4 receive management frames
++ * 3 receive probe requests
++ * 2 receive probe responses
++ * 1 receive RTS/CTS/ACK frames
++ * 0 receive other
++ */
++#define RX_CFG2_RCV_ASSOC_REQ 0x0800
++#define RX_CFG2_RCV_AUTH_FRAMES 0x0400
++#define RX_CFG2_RCV_BEACON_FRAMES 0x0200
++#define RX_CFG2_RCV_CONTENTION_FREE 0x0100
++#define RX_CFG2_RCV_CTRL_FRAMES 0x0080
++#define RX_CFG2_RCV_DATA_FRAMES 0x0040
++#define RX_CFG2_RCV_BROKEN_FRAMES 0x0020
++#define RX_CFG2_RCV_MGMT_FRAMES 0x0010
++#define RX_CFG2_RCV_PROBE_REQ 0x0008
++#define RX_CFG2_RCV_PROBE_RESP 0x0004
++#define RX_CFG2_RCV_ACK_FRAMES 0x0002
++#define RX_CFG2_RCV_OTHER 0x0001
++
++/* For use with ACX1xx_IE_FEATURE_CONFIG */
++#define FEATURE1_80MHZ_CLOCK 0x00000040L
++#define FEATURE1_4X 0x00000020L
++#define FEATURE1_LOW_RX 0x00000008L
++#define FEATURE1_EXTRA_LOW_RX 0x00000001L
++
++#define FEATURE2_SNIFFER 0x00000080L
++#define FEATURE2_NO_TXCRYPT 0x00000001L
++
++/*-- get and set mask values --*/
++#define GETSET_LED_POWER 0x00000001L
++#define GETSET_STATION_ID 0x00000002L
++#define SET_TEMPLATES 0x00000004L
++#define SET_STA_LIST 0x00000008L
++#define GETSET_TX 0x00000010L
++#define GETSET_RX 0x00000020L
++#define SET_RXCONFIG 0x00000040L
++#define GETSET_ANTENNA 0x00000080L
++#define GETSET_SENSITIVITY 0x00000100L
++#define GETSET_TXPOWER 0x00000200L
++#define GETSET_ED_THRESH 0x00000400L
++#define GETSET_CCA 0x00000800L
++#define GETSET_POWER_80211 0x00001000L
++#define GETSET_RETRY 0x00002000L
++#define GETSET_REG_DOMAIN 0x00004000L
++#define GETSET_CHANNEL 0x00008000L
++/* Used when ESSID changes etc and we need to scan for AP anew */
++#define GETSET_RESCAN 0x00010000L
++#define GETSET_MODE 0x00020000L
++#define GETSET_WEP 0x00040000L
++#define SET_WEP_OPTIONS 0x00080000L
++#define SET_MSDU_LIFETIME 0x00100000L
++#define SET_RATE_FALLBACK 0x00200000L
++
++/* keep in sync with the above */
++#define GETSET_ALL (0 \
++/* GETSET_LED_POWER */ | 0x00000001L \
++/* GETSET_STATION_ID */ | 0x00000002L \
++/* SET_TEMPLATES */ | 0x00000004L \
++/* SET_STA_LIST */ | 0x00000008L \
++/* GETSET_TX */ | 0x00000010L \
++/* GETSET_RX */ | 0x00000020L \
++/* SET_RXCONFIG */ | 0x00000040L \
++/* GETSET_ANTENNA */ | 0x00000080L \
++/* GETSET_SENSITIVITY */| 0x00000100L \
++/* GETSET_TXPOWER */ | 0x00000200L \
++/* GETSET_ED_THRESH */ | 0x00000400L \
++/* GETSET_CCA */ | 0x00000800L \
++/* GETSET_POWER_80211 */| 0x00001000L \
++/* GETSET_RETRY */ | 0x00002000L \
++/* GETSET_REG_DOMAIN */ | 0x00004000L \
++/* GETSET_CHANNEL */ | 0x00008000L \
++/* GETSET_RESCAN */ | 0x00010000L \
++/* GETSET_MODE */ | 0x00020000L \
++/* GETSET_WEP */ | 0x00040000L \
++/* SET_WEP_OPTIONS */ | 0x00080000L \
++/* SET_MSDU_LIFETIME */ | 0x00100000L \
++/* SET_RATE_FALLBACK */ | 0x00200000L \
++ )
++
++
++/***********************************************************************
++** Firmware loading
++*/
++#include <linux/firmware.h> /* request_firmware() */
++#include <linux/pci.h> /* struct pci_device */
++
++
++/***********************************************************************
++*/
++typedef struct acx100_ie_memblocksize {
++ u16 type;
++ u16 len;
++ u16 size;
++} ACX_PACKED acx100_ie_memblocksize_t;
++
++typedef struct acx100_ie_queueconfig {
++ u16 type;
++ u16 len;
++ u32 AreaSize;
++ u32 RxQueueStart;
++ u8 QueueOptions;
++ u8 NumTxQueues;
++ u8 NumRxDesc; /* for USB only */
++ u8 pad1;
++ u32 QueueEnd;
++ u32 HostQueueEnd; /* QueueEnd2 */
++ u32 TxQueueStart;
++ u8 TxQueuePri;
++ u8 NumTxDesc;
++ u16 pad2;
++} ACX_PACKED acx100_ie_queueconfig_t;
++
++typedef struct acx111_ie_queueconfig {
++ u16 type;
++ u16 len;
++ u32 tx_memory_block_address;
++ u32 rx_memory_block_address;
++ u32 rx1_queue_address;
++ u32 reserved1;
++ u32 tx1_queue_address;
++ u8 tx1_attributes;
++ u16 reserved2;
++ u8 reserved3;
++} ACX_PACKED acx111_ie_queueconfig_t;
++
++typedef struct acx100_ie_memconfigoption {
++ u16 type;
++ u16 len;
++ u32 DMA_config;
++ acx_ptr pRxHostDesc;
++ u32 rx_mem;
++ u32 tx_mem;
++ u16 RxBlockNum;
++ u16 TxBlockNum;
++} ACX_PACKED acx100_ie_memconfigoption_t;
++
++typedef struct acx111_ie_memoryconfig {
++ u16 type;
++ u16 len;
++ u16 no_of_stations;
++ u16 memory_block_size;
++ u8 tx_rx_memory_block_allocation;
++ u8 count_rx_queues;
++ u8 count_tx_queues;
++ u8 options;
++ u8 fragmentation;
++ u16 reserved1;
++ u8 reserved2;
++
++ /* start of rx1 block */
++ u8 rx_queue1_count_descs;
++ u8 rx_queue1_reserved1;
++ u8 rx_queue1_type; /* must be set to 7 */
++ u8 rx_queue1_prio; /* must be set to 0 */
++ acx_ptr rx_queue1_host_rx_start;
++ /* end of rx1 block */
++
++ /* start of tx1 block */
++ u8 tx_queue1_count_descs;
++ u8 tx_queue1_reserved1;
++ u8 tx_queue1_reserved2;
++ u8 tx_queue1_attributes;
++ /* end of tx1 block */
++} ACX_PACKED acx111_ie_memoryconfig_t;
++
++typedef struct acx_ie_memmap {
++ u16 type;
++ u16 len;
++ u32 CodeStart;
++ u32 CodeEnd;
++ u32 WEPCacheStart;
++ u32 WEPCacheEnd;
++ u32 PacketTemplateStart;
++ u32 PacketTemplateEnd;
++ u32 QueueStart;
++ u32 QueueEnd;
++ u32 PoolStart;
++ u32 PoolEnd;
++} ACX_PACKED acx_ie_memmap_t;
++
++typedef struct acx111_ie_feature_config {
++ u16 type;
++ u16 len;
++ u32 feature_options;
++ u32 data_flow_options;
++} ACX_PACKED acx111_ie_feature_config_t;
++
++typedef struct acx111_ie_tx_level {
++ u16 type;
++ u16 len;
++ u8 level;
++} ACX_PACKED acx111_ie_tx_level_t;
++
++#define PS_CFG_ENABLE 0x80
++#define PS_CFG_PENDING 0x40 /* status flag when entering PS */
++#define PS_CFG_WAKEUP_MODE_MASK 0x07
++#define PS_CFG_WAKEUP_BY_HOST 0x03
++#define PS_CFG_WAKEUP_EACH_ITVL 0x02
++#define PS_CFG_WAKEUP_ON_DTIM 0x01
++#define PS_CFG_WAKEUP_ALL_BEAC 0x00
++
++/* Enhanced PS mode: sleep until Rx Beacon w/ the STA's AID bit set
++** in the TIM; newer firmwares only(?) */
++#define PS_OPT_ENA_ENHANCED_PS 0x04
++#define PS_OPT_TX_PSPOLL 0x02 /* send PSPoll frame to fetch waiting frames from AP (on frame with matching AID) */
++#define PS_OPT_STILL_RCV_BCASTS 0x01
++
++typedef struct acx100_ie_powersave {
++ u16 type;
++ u16 len;
++ u8 wakeup_cfg;
++ u8 listen_interval; /* for EACH_ITVL: wake up every "beacon units" interval */
++ u8 options;
++ u8 hangover_period; /* remaining wake time after Tx MPDU w/ PS bit, in values of 1/1024 seconds */
++ u16 enhanced_ps_transition_time; /* rem. wake time for Enh. PS */
++} ACX_PACKED acx100_ie_powersave_t;
++
++typedef struct acx111_ie_powersave {
++ u16 type;
++ u16 len;
++ u8 wakeup_cfg;
++ u8 listen_interval; /* for EACH_ITVL: wake up every "beacon units" interval */
++ u8 options;
++ u8 hangover_period; /* remaining wake time after Tx MPDU w/ PS bit, in values of 1/1024 seconds */
++ u32 beacon_rx_time;
++ u32 enhanced_ps_transition_time; /* rem. wake time for Enh. PS */
++} ACX_PACKED acx111_ie_powersave_t;
++
++
++/***********************************************************************
++** Commands and template structures
++*/
++
++/*
++** SCAN command structure
++**
++** even though acx100 scan rates match RATE100 constants,
++** acx111 ones do not match! Therefore we do not use RATE100 #defines */
++#define ACX_SCAN_RATE_1 10
++#define ACX_SCAN_RATE_2 20
++#define ACX_SCAN_RATE_5 55
++#define ACX_SCAN_RATE_11 110
++#define ACX_SCAN_RATE_22 220
++#define ACX_SCAN_RATE_PBCC 0x80 /* OR with this if needed */
++#define ACX_SCAN_OPT_ACTIVE 0x00 /* a bit mask */
++#define ACX_SCAN_OPT_PASSIVE 0x01
++/* Background scan: we go into Power Save mode (by transmitting
++** NULL data frame to AP with the power mgmt bit set), do the scan,
++** and then exit Power Save mode. A plus is that AP buffers frames
++** for us while we do background scan. Thus we avoid frame losses.
++** Background scan can be active or passive, just like normal one */
++#define ACX_SCAN_OPT_BACKGROUND 0x02
++typedef struct acx100_scan {
++ u16 count; /* number of scans to do, 0xffff == continuous */
++ u16 start_chan;
++ u16 flags; /* channel list mask; 0x8000 == all channels? */
++ u8 max_rate; /* max. probe rate */
++ u8 options; /* bit mask, see defines above */
++ u16 chan_duration;
++ u16 max_probe_delay;
++} ACX_PACKED acx100_scan_t; /* length 0xc */
++
++#define ACX111_SCAN_RATE_6 0x0B
++#define ACX111_SCAN_RATE_9 0x0F
++#define ACX111_SCAN_RATE_12 0x0A
++#define ACX111_SCAN_RATE_18 0x0E
++#define ACX111_SCAN_RATE_24 0x09
++#define ACX111_SCAN_RATE_36 0x0D
++#define ACX111_SCAN_RATE_48 0x08
++#define ACX111_SCAN_RATE_54 0x0C
++#define ACX111_SCAN_OPT_5GHZ 0x04 /* else 2.4GHZ */
++#define ACX111_SCAN_MOD_SHORTPRE 0x01 /* you can combine SHORTPRE and PBCC */
++#define ACX111_SCAN_MOD_PBCC 0x80
++#define ACX111_SCAN_MOD_OFDM 0x40
++typedef struct acx111_scan {
++ u16 count; /* number of scans to do */
++ u8 channel_list_select; /* 0: scan all channels, 1: from chan_list only */
++ u16 reserved1;
++ u8 reserved2;
++ u8 rate; /* rate for probe requests (if active scan) */
++ u8 options; /* bit mask, see defines above */
++ u16 chan_duration; /* min time to wait for reply on one channel (in TU) */
++ /* (active scan only) (802.11 section 11.1.3.2.2) */
++ u16 max_probe_delay; /* max time to wait for reply on one channel (active scan) */
++ /* time to listen on a channel (passive scan) */
++ u8 modulation;
++ u8 channel_list[26]; /* bits 7:0 first byte: channels 8:1 */
++ /* bits 7:0 second byte: channels 16:9 */
++ /* 26 bytes is enough to cover 802.11a */
++} ACX_PACKED acx111_scan_t;
++
++
++/*
++** Radio calibration command structure
++*/
++typedef struct acx111_cmd_radiocalib {
++/* 0x80000000 == automatic calibration by firmware, according to interval;
++ * bits 0..3: select calibration methods to go through:
++ * calib based on DC, AfeDC, Tx mismatch, Tx equilization */
++ u32 methods;
++ u32 interval;
++} ACX_PACKED acx111_cmd_radiocalib_t;
++
++
++/*
++** Packet template structures
++**
++** Packet templates store contents of Beacon, Probe response, Probe request,
++** Null data frame, and TIM data frame. Firmware automatically transmits
++** contents of template at appropriate time:
++** - Beacon: when configured as AP or Ad-hoc
++** - Probe response: when configured as AP or Ad-hoc, whenever
++** a Probe request frame is received
++** - Probe request: when host issues SCAN command (active)
++** - Null data frame: when entering 802.11 power save mode
++** - TIM data: at the end of Beacon frames (if no TIM template
++** is configured, then transmits default TIM)
++** NB:
++** - size field must be set to size of actual template
++** (NOT sizeof(struct) - templates are variable in length),
++** size field is not itself counted.
++** - members flagged with an asterisk must be initialized with host,
++** rest must be zero filled.
++** - variable length fields shown only in comments */
++typedef struct acx_template_tim {
++ u16 size;
++ u8 tim_eid; /* 00 1 TIM IE ID * */
++ u8 len; /* 01 1 Length * */
++ u8 dtim_cnt; /* 02 1 DTIM Count */
++ u8 dtim_period; /* 03 1 DTIM Period */
++ u8 bitmap_ctrl; /* 04 1 Bitmap Control * (except bit0) */
++ /* 05 n Partial Virtual Bitmap * */
++ u8 variable[0x100 - 1-1-1-1-1];
++} ACX_PACKED acx_template_tim_t;
++
++typedef struct acx_template_probereq {
++ u16 size;
++ u16 fc; /* 00 2 fc * */
++ u16 dur; /* 02 2 Duration */
++ u8 da[6]; /* 04 6 Destination Address * */
++ u8 sa[6]; /* 0A 6 Source Address * */
++ u8 bssid[6]; /* 10 6 BSSID * */
++ u16 seq; /* 16 2 Sequence Control */
++ /* 18 n SSID * */
++ /* nn n Supported Rates * */
++ u8 variable[0x44 - 2-2-6-6-6-2];
++} ACX_PACKED acx_template_probereq_t;
++
++typedef struct acx_template_proberesp {
++ u16 size;
++ u16 fc; /* 00 2 fc * (bits [15:12] and [10:8] per 802.11 section 7.1.3.1) */
++ u16 dur; /* 02 2 Duration */
++ u8 da[6]; /* 04 6 Destination Address */
++ u8 sa[6]; /* 0A 6 Source Address */
++ u8 bssid[6]; /* 10 6 BSSID */
++ u16 seq; /* 16 2 Sequence Control */
++ u8 timestamp[8];/* 18 8 Timestamp */
++ u16 beacon_interval; /* 20 2 Beacon Interval * */
++ u16 cap; /* 22 2 Capability Information * */
++ /* 24 n SSID * */
++ /* nn n Supported Rates * */
++ /* nn 1 DS Parameter Set * */
++ u8 variable[0x54 - 2-2-6-6-6-2-8-2-2];
++} ACX_PACKED acx_template_proberesp_t;
++#define acx_template_beacon_t acx_template_proberesp_t
++#define acx_template_beacon acx_template_proberesp
++
++typedef struct acx_template_nullframe {
++ u16 size;
++ struct wlan_hdr_a3 hdr;
++} ACX_PACKED acx_template_nullframe_t;
++
++
++/*
++** JOIN command structure
++**
++** as opposed to acx100, acx111 dtim interval is AFTER rates_basic111.
++** NOTE: took me about an hour to get !@#$%^& packing right --> struct packing is eeeeevil... */
++typedef struct acx_joinbss {
++ u8 bssid[ETH_ALEN];
++ u16 beacon_interval;
++ union {
++ struct {
++ u8 dtim_interval;
++ u8 rates_basic;
++ u8 rates_supported;
++ /*
++ * ARM compiler doesn't pack correctly unless unions
++ * inside structures are multiples of 4 bytes. Ugh.
++ */
++ u8 genfrm_txrate; /* generated frame (bcn, proberesp, RTS, PSpoll) tx rate */
++ } ACX_PACKED acx100;
++ struct {
++ u16 rates_basic;
++ u8 dtim_interval;
++ u8 genfrm_txrate; /* generated frame (bcn, proberesp, RTS, PSpoll) tx rate */
++ } ACX_PACKED acx111;
++ /*
++ * ARM compiler doesn't pack correctly unles unions are aligned on
++ * 4 byte boundaries and are multiples of 4 bytes.
++ */
++ struct {
++ u8 d1;
++ u8 d2;
++ u8 d3;
++ u8 genfrm_txrate;
++ } ACX_PACKED txrate;
++ } ACX_PACKED u;
++ u8 genfrm_mod_pre; /* generated frame modulation/preamble:
++ ** bit7: PBCC, bit6: OFDM (else CCK/DQPSK/DBPSK)
++ ** bit5: short pre */
++ u8 macmode; /* BSS Type, must be one of ACX_MODE_xxx */
++ u8 channel;
++ u8 essid_len;
++ char essid[IW_ESSID_MAX_SIZE];
++} ACX_PACKED acx_joinbss_t;
++
++#define JOINBSS_RATES_1 0x01
++#define JOINBSS_RATES_2 0x02
++#define JOINBSS_RATES_5 0x04
++#define JOINBSS_RATES_11 0x08
++#define JOINBSS_RATES_22 0x10
++
++/* Looks like missing bits are used to indicate 11g rates!
++** (it follows from the fact that constants below match 1:1 to RATE111_nn)
++** This was actually seen! Look at that Assoc Request sent by acx111,
++** it _does_ contain 11g rates in basic set:
++01:30:20.070772 Beacon (xxx) [1.0* 2.0* 5.5* 11.0* 6.0* 9.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit] ESS CH: 1
++01:30:20.074425 Authentication (Open System)-1: Succesful
++01:30:20.076539 Authentication (Open System)-2:
++01:30:20.076620 Acknowledgment
++01:30:20.088546 Assoc Request (xxx) [1.0* 2.0* 5.5* 6.0* 9.0* 11.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit]
++01:30:20.122413 Assoc Response AID(1) :: Succesful
++01:30:20.122679 Acknowledgment
++01:30:20.173204 Beacon (xxx) [1.0* 2.0* 5.5* 11.0* 6.0* 9.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit] ESS CH: 1
++*/
++#define JOINBSS_RATES_BASIC111_1 0x0001
++#define JOINBSS_RATES_BASIC111_2 0x0002
++#define JOINBSS_RATES_BASIC111_5 0x0004
++#define JOINBSS_RATES_BASIC111_11 0x0020
++#define JOINBSS_RATES_BASIC111_22 0x0100
++
++
++/***********************************************************************
++*/
++typedef struct mem_read_write {
++ u16 addr;
++ u16 type; /* 0x0 int. RAM / 0xffff MAC reg. / 0x81 PHY RAM / 0x82 PHY reg.; or maybe it's actually 0x30 for MAC? Better verify it by writing and reading back and checking whether the value holds! */
++ u32 len;
++ u32 data;
++} ACX_PACKED mem_read_write_t;
++
++typedef struct firmware_image {
++ u32 chksum;
++ u32 size;
++ u8 data[1]; /* the byte array of the actual firmware... */
++} ACX_PACKED firmware_image_t;
++
++typedef struct acx_cmd_radioinit {
++ u32 offset;
++ u32 len;
++} ACX_PACKED acx_cmd_radioinit_t;
++
++typedef struct acx100_ie_wep_options {
++ u16 type;
++ u16 len;
++ u16 NumKeys; /* max # of keys */
++ u8 WEPOption; /* 0 == decrypt default key only, 1 == override decrypt */
++ u8 Pad; /* used only for acx111 */
++} ACX_PACKED acx100_ie_wep_options_t;
++
++typedef struct ie_dot11WEPDefaultKey {
++ u16 type;
++ u16 len;
++ u8 action;
++ u8 keySize;
++ u8 defaultKeyNum;
++ u8 key[29]; /* check this! was Key[19] */
++} ACX_PACKED ie_dot11WEPDefaultKey_t;
++
++typedef struct acx111WEPDefaultKey {
++ u8 MacAddr[ETH_ALEN];
++ u16 action; /* NOTE: this is a u16, NOT a u8!! */
++ u16 reserved;
++ u8 keySize;
++ u8 type;
++ u8 index;
++ u8 defaultKeyNum;
++ u8 counter[6];
++ u8 key[32]; /* up to 32 bytes (for TKIP!) */
++} ACX_PACKED acx111WEPDefaultKey_t;
++
++typedef struct ie_dot11WEPDefaultKeyID {
++ u16 type;
++ u16 len;
++ u8 KeyID;
++} ACX_PACKED ie_dot11WEPDefaultKeyID_t;
++
++typedef struct acx100_cmd_wep_mgmt {
++ u8 MacAddr[ETH_ALEN];
++ u16 Action;
++ u16 KeySize;
++ u8 Key[29]; /* 29*8 == 232bits == WEP256 */
++} ACX_PACKED acx100_cmd_wep_mgmt_t;
++
++typedef struct acx_ie_generic {
++ u16 type;
++ u16 len;
++ union {
++ /* Association ID IE: just a 16bit value: */
++ u16 aid;
++ /* generic member for quick implementation of commands */
++ u8 bytes[32];
++ } ACX_PACKED m;
++} ACX_PACKED acx_ie_generic_t;
++
++/***********************************************************************
++*/
++#define CHECK_SIZEOF(type,size) { \
++ extern void BUG_bad_size_for_##type(void); \
++ if (sizeof(type)!=(size)) BUG_bad_size_for_##type(); \
++}
++
++static inline void
++acx_struct_size_check(void)
++{
++ CHECK_SIZEOF(txdesc_t, 0x30);
++ CHECK_SIZEOF(acx100_ie_memconfigoption_t, 24);
++ CHECK_SIZEOF(acx100_ie_queueconfig_t, 0x20);
++ CHECK_SIZEOF(acx_joinbss_t, 0x30);
++ /* IEs need 4 bytes for (type,len) tuple */
++ CHECK_SIZEOF(acx111_ie_configoption_t, ACX111_IE_CONFIG_OPTIONS_LEN + 4);
++}
++
++
++/***********************************************************************
++** Global data
++*/
++extern const u8 acx_bitpos2ratebyte[];
++extern const u8 acx_bitpos2rate100[];
++
++extern const u8 acx_reg_domain_ids[];
++extern const char * const acx_reg_domain_strings[];
++enum {
++ acx_reg_domain_ids_len = 8
++};
++
++extern const struct iw_handler_def acx_ioctl_handler_def;
+Index: linux-2.6.23/drivers/net/wireless/acx/common.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/common.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,7388 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++*/
++
++#include <linux/version.h>
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
++#include <linux/config.h>
++#endif
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/slab.h>
++#include <linux/delay.h>
++#include <linux/proc_fs.h>
++#include <linux/if_arp.h>
++#include <linux/rtnetlink.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/wireless.h>
++#include <linux/pm.h>
++#include <linux/vmalloc.h>
++#include <net/iw_handler.h>
++
++#include "acx_hw.h"
++#include "acx.h"
++
++
++/***********************************************************************
++*/
++static client_t *acx_l_sta_list_alloc(acx_device_t *adev);
++static client_t *acx_l_sta_list_get_from_hash(acx_device_t *adev, const u8 *address);
++
++static int acx_l_process_data_frame_master(acx_device_t *adev, rxbuffer_t *rxbuf);
++static int acx_l_process_data_frame_client(acx_device_t *adev, rxbuffer_t *rxbuf);
++/* static int acx_l_process_NULL_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala); */
++static int acx_l_process_mgmt_frame(acx_device_t *adev, rxbuffer_t *rxbuf);
++static void acx_l_process_disassoc_from_sta(acx_device_t *adev, const wlan_fr_disassoc_t *req);
++static void acx_l_process_disassoc_from_ap(acx_device_t *adev, const wlan_fr_disassoc_t *req);
++static void acx_l_process_deauth_from_sta(acx_device_t *adev, const wlan_fr_deauthen_t *req);
++static void acx_l_process_deauth_from_ap(acx_device_t *adev, const wlan_fr_deauthen_t *req);
++static int acx_l_process_probe_response(acx_device_t *adev, wlan_fr_proberesp_t *req, const rxbuffer_t *rxbuf);
++static int acx_l_process_assocresp(acx_device_t *adev, const wlan_fr_assocresp_t *req);
++static int acx_l_process_reassocresp(acx_device_t *adev, const wlan_fr_reassocresp_t *req);
++static int acx_l_process_authen(acx_device_t *adev, const wlan_fr_authen_t *req);
++static int acx_l_transmit_assocresp(acx_device_t *adev, const wlan_fr_assocreq_t *req);
++static int acx_l_transmit_reassocresp(acx_device_t *adev, const wlan_fr_reassocreq_t *req);
++static int acx_l_transmit_deauthen(acx_device_t *adev, const u8 *addr, u16 reason);
++static int acx_l_transmit_authen1(acx_device_t *adev);
++static int acx_l_transmit_authen2(acx_device_t *adev, const wlan_fr_authen_t *req, client_t *clt);
++static int acx_l_transmit_authen3(acx_device_t *adev, const wlan_fr_authen_t *req);
++static int acx_l_transmit_authen4(acx_device_t *adev, const wlan_fr_authen_t *req);
++static int acx_l_transmit_assoc_req(acx_device_t *adev);
++
++
++/***********************************************************************
++*/
++#if ACX_DEBUG
++unsigned int acx_debug /* will add __read_mostly later */ = ACX_DEFAULT_MSG;
++/* parameter is 'debug', corresponding var is acx_debug */
++module_param_named(debug, acx_debug, uint, 0);
++MODULE_PARM_DESC(debug, "Debug level mask (see L_xxx constants)");
++#endif
++
++#ifdef MODULE_LICENSE
++MODULE_LICENSE("Dual MPL/GPL");
++#endif
++/* USB had this: MODULE_AUTHOR("Martin Wawro <martin.wawro AT uni-dortmund.de>"); */
++MODULE_AUTHOR("ACX100 Open Source Driver development team");
++MODULE_DESCRIPTION("Driver for TI ACX1xx based wireless cards (CardBus/PCI/USB)");
++
++
++/***********************************************************************
++*/
++/* Probably a number of acx's intermediate buffers for USB transfers,
++** not to be confused with number of descriptors in tx/rx rings
++** (which are not directly accessible to host in USB devices) */
++#define USB_RX_CNT 10
++#define USB_TX_CNT 10
++
++
++/***********************************************************************
++*/
++
++/* minutes to wait until next radio recalibration: */
++#define RECALIB_PAUSE 5
++
++/* Please keep acx_reg_domain_ids_len in sync... */
++const u8 acx_reg_domain_ids[acx_reg_domain_ids_len] =
++ { 0x10, 0x20, 0x30, 0x31, 0x32, 0x40, 0x41, 0x51 };
++static const u16 reg_domain_channel_masks[acx_reg_domain_ids_len] =
++#ifdef ACX_ALLOW_ALLCHANNELS
++ { 0x3fff, 0x07ff, 0x1fff, 0x0600, 0x1e00, 0x2000, 0x3fff, 0x01fc };
++#else
++ { 0x07ff, 0x07ff, 0x1fff, 0x0600, 0x1e00, 0x2000, 0x3fff, 0x01fc };
++#endif
++const char * const
++acx_reg_domain_strings[] = {
++ /* 0 */ " 1-11 FCC (USA)",
++ /* 1 */ " 1-11 DOC/IC (Canada)",
++/* BTW: WLAN use in ETSI is regulated by ETSI standard EN 300 328-2 V1.1.2 */
++ /* 2 */ " 1-13 ETSI (Europe)",
++ /* 3 */ "10-11 Spain",
++ /* 4 */ "10-13 France",
++ /* 5 */ " 14 MKK (Japan)",
++ /* 6 */ " 1-14 MKK1",
++ /* 7 */ " 3-9 Israel (not all firmware versions)",
++ NULL /* needs to remain as last entry */
++};
++
++
++
++/***********************************************************************
++** Debugging support
++*/
++#ifdef PARANOID_LOCKING
++static unsigned max_lock_time;
++static unsigned max_sem_time;
++
++void
++acx_lock_unhold() { max_lock_time = 0; }
++void
++acx_sem_unhold() { max_sem_time = 0; }
++
++static inline const char*
++sanitize_str(const char *s)
++{
++ const char* t = strrchr(s, '/');
++ if (t) return t + 1;
++ return s;
++}
++
++void
++acx_lock_debug(acx_device_t *adev, const char* where)
++{
++ unsigned int count = 100*1000*1000;
++ where = sanitize_str(where);
++ while (--count) {
++ if (!spin_is_locked(&adev->lock)) break;
++ cpu_relax();
++ }
++ if (!count) {
++ printk(KERN_EMERG "LOCKUP: already taken at %s!\n", adev->last_lock);
++ BUG();
++ }
++ adev->last_lock = where;
++ rdtscl(adev->lock_time);
++}
++void
++acx_unlock_debug(acx_device_t *adev, const char* where)
++{
++#ifdef SMP
++ if (!spin_is_locked(&adev->lock)) {
++ where = sanitize_str(where);
++ printk(KERN_EMERG "STRAY UNLOCK at %s!\n", where);
++ BUG();
++ }
++#endif
++ if (acx_debug & L_LOCK) {
++ unsigned long diff;
++ rdtscl(diff);
++ diff -= adev->lock_time;
++ if (diff > max_lock_time) {
++ where = sanitize_str(where);
++ printk("max lock hold time %ld CPU ticks from %s "
++ "to %s\n", diff, adev->last_lock, where);
++ max_lock_time = diff;
++ }
++ }
++}
++void
++acx_down_debug(acx_device_t *adev, const char* where)
++{
++ int sem_count;
++ unsigned long timeout = jiffies + 5*HZ;
++
++ where = sanitize_str(where);
++
++ for (;;) {
++ sem_count = atomic_read(&adev->sem.count);
++ if (sem_count) break;
++ if (time_after(jiffies, timeout))
++ break;
++ msleep(5);
++ }
++ if (!sem_count) {
++ printk(KERN_EMERG "D STATE at %s! last sem at %s\n",
++ where, adev->last_sem);
++ dump_stack();
++ }
++ adev->last_sem = where;
++ adev->sem_time = jiffies;
++ down(&adev->sem);
++ if (acx_debug & L_LOCK) {
++ printk("%s: sem_down %d -> %d\n",
++ where, sem_count, atomic_read(&adev->sem.count));
++ }
++}
++void
++acx_up_debug(acx_device_t *adev, const char* where)
++{
++ int sem_count = atomic_read(&adev->sem.count);
++ if (sem_count) {
++ where = sanitize_str(where);
++ printk(KERN_EMERG "STRAY UP at %s! sem.count=%d\n", where, sem_count);
++ dump_stack();
++ }
++ if (acx_debug & L_LOCK) {
++ unsigned long diff = jiffies - adev->sem_time;
++ if (diff > max_sem_time) {
++ where = sanitize_str(where);
++ printk("max sem hold time %ld jiffies from %s "
++ "to %s\n", diff, adev->last_sem, where);
++ max_sem_time = diff;
++ }
++ }
++ up(&adev->sem);
++ if (acx_debug & L_LOCK) {
++ where = sanitize_str(where);
++ printk("%s: sem_up %d -> %d\n",
++ where, sem_count, atomic_read(&adev->sem.count));
++ }
++}
++#endif /* PARANOID_LOCKING */
++
++
++/***********************************************************************
++*/
++#if ACX_DEBUG > 1
++
++static int acx_debug_func_indent;
++#define DEBUG_TSC 0
++#define FUNC_INDENT_INCREMENT 2
++
++#if DEBUG_TSC
++#define TIMESTAMP(d) unsigned long d; rdtscl(d)
++#else
++#define TIMESTAMP(d) unsigned long d = jiffies
++#endif
++
++static const char
++spaces[] = " " " "; /* Nx10 spaces */
++
++void
++log_fn_enter(const char *funcname)
++{
++ int indent;
++ TIMESTAMP(d);
++
++ indent = acx_debug_func_indent;
++ if (indent >= sizeof(spaces))
++ indent = sizeof(spaces)-1;
++
++ printk("%08ld %s==> %s\n",
++ d % 100000000,
++ spaces + (sizeof(spaces)-1) - indent,
++ funcname
++ );
++
++ acx_debug_func_indent += FUNC_INDENT_INCREMENT;
++}
++void
++log_fn_exit(const char *funcname)
++{
++ int indent;
++ TIMESTAMP(d);
++
++ acx_debug_func_indent -= FUNC_INDENT_INCREMENT;
++
++ indent = acx_debug_func_indent;
++ if (indent >= sizeof(spaces))
++ indent = sizeof(spaces)-1;
++
++ printk("%08ld %s<== %s\n",
++ d % 100000000,
++ spaces + (sizeof(spaces)-1) - indent,
++ funcname
++ );
++}
++void
++log_fn_exit_v(const char *funcname, int v)
++{
++ int indent;
++ TIMESTAMP(d);
++
++ acx_debug_func_indent -= FUNC_INDENT_INCREMENT;
++
++ indent = acx_debug_func_indent;
++ if (indent >= sizeof(spaces))
++ indent = sizeof(spaces)-1;
++
++ printk("%08ld %s<== %s: %08X\n",
++ d % 100000000,
++ spaces + (sizeof(spaces)-1) - indent,
++ funcname,
++ v
++ );
++}
++#endif /* ACX_DEBUG > 1 */
++
++
++/***********************************************************************
++** Basically a msleep with logging
++*/
++void
++acx_s_msleep(int ms)
++{
++ FN_ENTER;
++ msleep(ms);
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** Not inlined: it's larger than it seems
++*/
++void
++acx_print_mac(const char *head, const u8 *mac, const char *tail)
++{
++ printk("%s"MACSTR"%s", head, MAC(mac), tail);
++}
++
++
++/***********************************************************************
++** acx_get_status_name
++*/
++static const char*
++acx_get_status_name(u16 status)
++{
++ static const char * const str[] = {
++ "STOPPED", "SCANNING", "WAIT_AUTH",
++ "AUTHENTICATED", "ASSOCIATED", "INVALID??"
++ };
++ if (status > VEC_SIZE(str)-1)
++ status = VEC_SIZE(str)-1;
++
++ return str[status];
++}
++
++
++/***********************************************************************
++** acx_get_packet_type_string
++*/
++#if ACX_DEBUG
++const char*
++acx_get_packet_type_string(u16 fc)
++{
++ static const char * const mgmt_arr[] = {
++ "MGMT/AssocReq", "MGMT/AssocResp", "MGMT/ReassocReq",
++ "MGMT/ReassocResp", "MGMT/ProbeReq", "MGMT/ProbeResp",
++ "MGMT/UNKNOWN", "MGMT/UNKNOWN", "MGMT/Beacon", "MGMT/ATIM",
++ "MGMT/Disassoc", "MGMT/Authen", "MGMT/Deauthen"
++ };
++ static const char * const ctl_arr[] = {
++ "CTL/PSPoll", "CTL/RTS", "CTL/CTS", "CTL/Ack", "CTL/CFEnd",
++ "CTL/CFEndCFAck"
++ };
++ static const char * const data_arr[] = {
++ "DATA/DataOnly", "DATA/Data CFAck", "DATA/Data CFPoll",
++ "DATA/Data CFAck/CFPoll", "DATA/Null", "DATA/CFAck",
++ "DATA/CFPoll", "DATA/CFAck/CFPoll"
++ };
++ const char *str;
++ u8 fstype = (WF_FC_FSTYPE & fc) >> 4;
++ u8 ctl;
++
++ switch (WF_FC_FTYPE & fc) {
++ case WF_FTYPE_MGMT:
++ if (fstype < VEC_SIZE(mgmt_arr))
++ str = mgmt_arr[fstype];
++ else
++ str = "MGMT/UNKNOWN";
++ break;
++ case WF_FTYPE_CTL:
++ ctl = fstype - 0x0a;
++ if (ctl < VEC_SIZE(ctl_arr))
++ str = ctl_arr[ctl];
++ else
++ str = "CTL/UNKNOWN";
++ break;
++ case WF_FTYPE_DATA:
++ if (fstype < VEC_SIZE(data_arr))
++ str = data_arr[fstype];
++ else
++ str = "DATA/UNKNOWN";
++ break;
++ default:
++ str = "UNKNOWN";
++ break;
++ }
++ return str;
++}
++#endif
++
++
++/***********************************************************************
++** acx_wlan_reason_str
++*/
++static inline const char*
++acx_wlan_reason_str(u16 reason)
++{
++ static const char* const reason_str[] = {
++ /* 0 */ "?",
++ /* 1 */ "unspecified",
++ /* 2 */ "prev auth is not valid",
++ /* 3 */ "leaving BBS",
++ /* 4 */ "due to inactivity",
++ /* 5 */ "AP is busy",
++ /* 6 */ "got class 2 frame from non-auth'ed STA",
++ /* 7 */ "got class 3 frame from non-assoc'ed STA",
++ /* 8 */ "STA has left BSS",
++ /* 9 */ "assoc without auth is not allowed",
++ /* 10 */ "bad power setting (802.11h)",
++ /* 11 */ "bad channel (802.11i)",
++ /* 12 */ "?",
++ /* 13 */ "invalid IE",
++ /* 14 */ "MIC failure",
++ /* 15 */ "four-way handshake timeout",
++ /* 16 */ "group key handshake timeout",
++ /* 17 */ "IE is different",
++ /* 18 */ "invalid group cipher",
++ /* 19 */ "invalid pairwise cipher",
++ /* 20 */ "invalid AKMP",
++ /* 21 */ "unsupported RSN version",
++ /* 22 */ "invalid RSN IE cap",
++ /* 23 */ "802.1x failed",
++ /* 24 */ "cipher suite rejected"
++ };
++ return reason < VEC_SIZE(reason_str) ? reason_str[reason] : "?";
++}
++
++
++/***********************************************************************
++** acx_cmd_status_str
++*/
++const char*
++acx_cmd_status_str(unsigned int state)
++{
++ static const char * const cmd_error_strings[] = {
++ "Idle",
++ "Success",
++ "Unknown Command",
++ "Invalid Information Element",
++ "Channel rejected",
++ "Channel invalid in current regulatory domain",
++ "MAC invalid",
++ "Command rejected (read-only information element)",
++ "Command rejected",
++ "Already asleep",
++ "TX in progress",
++ "Already awake",
++ "Write only",
++ "RX in progress",
++ "Invalid parameter",
++ "Scan in progress",
++ "Failed"
++ };
++ return state < VEC_SIZE(cmd_error_strings) ?
++ cmd_error_strings[state] : "?";
++}
++
++
++/***********************************************************************
++** get_status_string
++*/
++static inline const char*
++get_status_string(unsigned int status)
++{
++ /* A bit shortened, but hopefully still understandable */
++ static const char * const status_str[] = {
++ /* 0 */ "Successful",
++ /* 1 */ "Unspecified failure",
++ /* 2 */ "reserved",
++ /* 3 */ "reserved",
++ /* 4 */ "reserved",
++ /* 5 */ "reserved",
++ /* 6 */ "reserved",
++ /* 7 */ "reserved",
++ /* 8 */ "reserved",
++ /* 9 */ "reserved",
++ /*10 */ "Cannot support all requested capabilities in Capability Information field",
++ /*11 */ "Reassoc denied (reason outside of 802.11b scope)",
++ /*12 */ "Assoc denied (reason outside of 802.11b scope) -- maybe MAC filtering by peer?",
++ /*13 */ "Responding station doesnt support specified auth algorithm -- maybe WEP auth Open vs. Restricted?",
++ /*14 */ "Auth rejected: wrong transaction sequence number",
++ /*15 */ "Auth rejected: challenge failure",
++ /*16 */ "Auth rejected: timeout for next frame in sequence",
++ /*17 */ "Assoc denied: too many STAs on this AP",
++ /*18 */ "Assoc denied: requesting STA doesnt support all data rates in basic set",
++ /*19 */ "Assoc denied: requesting STA doesnt support Short Preamble",
++ /*20 */ "Assoc denied: requesting STA doesnt support PBCC Modulation",
++ /*21 */ "Assoc denied: requesting STA doesnt support Channel Agility"
++ /*22 */ "reserved",
++ /*23 */ "reserved",
++ /*24 */ "reserved",
++ /*25 */ "Assoc denied: requesting STA doesnt support Short Slot Time",
++ /*26 */ "Assoc denied: requesting STA doesnt support DSSS-OFDM"
++ };
++
++ return status_str[status < VEC_SIZE(status_str) ? status : 2];
++}
++
++
++/***********************************************************************
++*/
++void
++acx_log_bad_eid(wlan_hdr_t* hdr, int len, wlan_ie_t* ie_ptr)
++{
++ if (acx_debug & L_ASSOC) {
++ int offset = (u8*)ie_ptr - (u8*)hdr;
++ printk("acx: unknown EID %d in mgmt frame at offset %d. IE: ",
++ ie_ptr->eid, offset);
++ /* IE len can be bogus, IE can extend past packet end. Oh well... */
++ acx_dump_bytes(ie_ptr, ie_ptr->len + 2);
++ if (acx_debug & L_DATA) {
++ printk("frame (%s): ",
++ acx_get_packet_type_string(le16_to_cpu(hdr->fc)));
++ acx_dump_bytes(hdr, len);
++ }
++ }
++}
++
++
++/***********************************************************************
++*/
++#if ACX_DEBUG
++void
++acx_dump_bytes(const void *data, int num)
++{
++ const u8* ptr = (const u8*)data;
++
++ if (num <= 0) {
++ printk("\n");
++ return;
++ }
++
++ while (num >= 16) {
++ printk( "%02X %02X %02X %02X %02X %02X %02X %02X "
++ "%02X %02X %02X %02X %02X %02X %02X %02X\n",
++ ptr[0], ptr[1], ptr[2], ptr[3],
++ ptr[4], ptr[5], ptr[6], ptr[7],
++ ptr[8], ptr[9], ptr[10], ptr[11],
++ ptr[12], ptr[13], ptr[14], ptr[15]);
++ num -= 16;
++ ptr += 16;
++ }
++ if (num > 0) {
++ while (--num > 0)
++ printk("%02X ", *ptr++);
++ printk("%02X\n", *ptr);
++ }
++}
++#endif
++
++
++/***********************************************************************
++** acx_s_get_firmware_version
++*/
++void
++acx_s_get_firmware_version(acx_device_t *adev)
++{
++ fw_ver_t fw;
++ u8 hexarr[4] = { 0, 0, 0, 0 };
++ int hexidx = 0, val = 0;
++ const char *num;
++ char c;
++
++ FN_ENTER;
++
++ memset(fw.fw_id, 'E', FW_ID_SIZE);
++ acx_s_interrogate(adev, &fw, ACX1xx_IE_FWREV);
++ memcpy(adev->firmware_version, fw.fw_id, FW_ID_SIZE);
++ adev->firmware_version[FW_ID_SIZE] = '\0';
++
++ log(L_DEBUG, "fw_ver: fw_id='%s' hw_id=%08X\n",
++ adev->firmware_version, fw.hw_id);
++
++ if (strncmp(fw.fw_id, "Rev ", 4) != 0) {
++ printk("acx: strange firmware version string "
++ "'%s', please report\n", adev->firmware_version);
++ adev->firmware_numver = 0x01090407; /* assume 1.9.4.7 */
++ } else {
++ num = &fw.fw_id[4];
++ while (1) {
++ c = *num++;
++ if ((c == '.') || (c == '\0')) {
++ hexarr[hexidx++] = val;
++ if ((hexidx > 3) || (c == '\0')) /* end? */
++ break;
++ val = 0;
++ continue;
++ }
++ if ((c >= '0') && (c <= '9'))
++ c -= '0';
++ else
++ c = c - 'a' + (char)10;
++ val = val*16 + c;
++ }
++
++ adev->firmware_numver = (u32)(
++ (hexarr[0] << 24) | (hexarr[1] << 16)
++ | (hexarr[2] << 8) | hexarr[3]);
++ log(L_DEBUG, "firmware_numver 0x%08X\n", adev->firmware_numver);
++ }
++ if (IS_ACX111(adev)) {
++ if (adev->firmware_numver == 0x00010011) {
++ /* This one does not survive floodpinging */
++ printk("acx: firmware '%s' is known to be buggy, "
++ "please upgrade\n", adev->firmware_version);
++ }
++ }
++
++ adev->firmware_id = le32_to_cpu(fw.hw_id);
++
++ /* we're able to find out more detailed chip names now */
++ switch (adev->firmware_id & 0xffff0000) {
++ case 0x01010000:
++ case 0x01020000:
++ adev->chip_name = "TNETW1100A";
++ break;
++ case 0x01030000:
++ adev->chip_name = "TNETW1100B";
++ break;
++ case 0x03000000:
++ case 0x03010000:
++ adev->chip_name = "TNETW1130";
++ break;
++ case 0x04030000: /* 0x04030101 is TNETW1450 */
++ adev->chip_name = "TNETW1450";
++ break;
++ default:
++ printk("acx: unknown chip ID 0x%08X, "
++ "please report\n", adev->firmware_id);
++ break;
++ }
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_display_hardware_details
++**
++** Displays hw/fw version, radio type etc...
++*/
++void
++acx_display_hardware_details(acx_device_t *adev)
++{
++ const char *radio_str, *form_str;
++
++ FN_ENTER;
++
++ switch (adev->radio_type) {
++ case RADIO_MAXIM_0D:
++ radio_str = "Maxim";
++ break;
++ case RADIO_RFMD_11:
++ radio_str = "RFMD";
++ break;
++ case RADIO_RALINK_15:
++ radio_str = "Ralink";
++ break;
++ case RADIO_RADIA_16:
++ radio_str = "Radia";
++ break;
++ case RADIO_UNKNOWN_17:
++ /* TI seems to have a radio which is
++ * additionally 802.11a capable, too */
++ radio_str = "802.11a/b/g radio?! Please report";
++ break;
++ case RADIO_UNKNOWN_19:
++ radio_str = "A radio used by Safecom cards?! Please report";
++ break;
++ case RADIO_UNKNOWN_1B:
++ radio_str = "An unknown radio used by TNETW1450 USB adapters";
++ break;
++ default:
++ radio_str = "UNKNOWN, please report radio type name!";
++ break;
++ }
++
++ switch (adev->form_factor) {
++ case 0x00:
++ form_str = "unspecified";
++ break;
++ case 0x01:
++ form_str = "(mini-)PCI / CardBus";
++ break;
++ case 0x02:
++ form_str = "USB";
++ break;
++ case 0x03:
++ form_str = "Compact Flash";
++ break;
++ default:
++ form_str = "UNKNOWN, please report";
++ break;
++ }
++
++ printk("acx: === chipset %s, radio type 0x%02X (%s), "
++ "form factor 0x%02X (%s), EEPROM version 0x%02X: "
++ "uploaded firmware '%s' ===\n",
++ adev->chip_name, adev->radio_type, radio_str,
++ adev->form_factor, form_str, adev->eeprom_version,
++ adev->firmware_version);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++*/
++int
++acx_e_change_mtu(struct net_device *ndev, int mtu)
++{
++ enum {
++ MIN_MTU = 256,
++ MAX_MTU = WLAN_DATA_MAXLEN - (ETH_HLEN)
++ };
++
++ if (mtu < MIN_MTU || mtu > MAX_MTU)
++ return -EINVAL;
++
++ ndev->mtu = mtu;
++ return 0;
++}
++
++
++/***********************************************************************
++** acx_e_get_stats, acx_e_get_wireless_stats
++*/
++struct net_device_stats*
++acx_e_get_stats(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ return &adev->stats;
++}
++
++struct iw_statistics*
++acx_e_get_wireless_stats(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ return &adev->wstats;
++}
++
++
++/***********************************************************************
++** maps acx111 tx descr rate field to acx100 one
++*/
++const u8
++acx_bitpos2rate100[] = {
++ RATE100_1 ,/* 0 */
++ RATE100_2 ,/* 1 */
++ RATE100_5 ,/* 2 */
++ RATE100_2 ,/* 3, should not happen */
++ RATE100_2 ,/* 4, should not happen */
++ RATE100_11 ,/* 5 */
++ RATE100_2 ,/* 6, should not happen */
++ RATE100_2 ,/* 7, should not happen */
++ RATE100_22 ,/* 8 */
++ RATE100_2 ,/* 9, should not happen */
++ RATE100_2 ,/* 10, should not happen */
++ RATE100_2 ,/* 11, should not happen */
++ RATE100_2 ,/* 12, should not happen */
++ RATE100_2 ,/* 13, should not happen */
++ RATE100_2 ,/* 14, should not happen */
++ RATE100_2 ,/* 15, should not happen */
++};
++
++u8
++acx_rate111to100(u16 r) {
++ return acx_bitpos2rate100[highest_bit(r)];
++}
++
++
++/***********************************************************************
++** Calculate level like the feb 2003 windows driver seems to do
++*/
++static u8
++acx_signal_to_winlevel(u8 rawlevel)
++{
++ /* u8 winlevel = (u8) (0.5 + 0.625 * rawlevel); */
++ u8 winlevel = ((4 + (rawlevel * 5)) / 8);
++
++ if (winlevel > 100)
++ winlevel = 100;
++ return winlevel;
++}
++
++u8
++acx_signal_determine_quality(u8 signal, u8 noise)
++{
++ int qual;
++
++ qual = (((signal - 30) * 100 / 70) + (100 - noise * 4)) / 2;
++
++ if (qual > 100)
++ return 100;
++ if (qual < 0)
++ return 0;
++ return qual;
++}
++
++
++/***********************************************************************
++** Interrogate/configure commands
++*/
++
++/* FIXME: the lengths given here probably aren't always correct.
++ * They should be gradually replaced by proper "sizeof(acx1XX_ie_XXXX)-4",
++ * unless the firmware actually expects a different length than the struct length */
++static const u16
++acx100_ie_len[] = {
++ 0,
++ ACX100_IE_ACX_TIMER_LEN,
++ sizeof(acx100_ie_powersave_t)-4, /* is that 6 or 8??? */
++ ACX1xx_IE_QUEUE_CONFIG_LEN,
++ ACX100_IE_BLOCK_SIZE_LEN,
++ ACX1xx_IE_MEMORY_CONFIG_OPTIONS_LEN,
++ ACX1xx_IE_RATE_FALLBACK_LEN,
++ ACX100_IE_WEP_OPTIONS_LEN,
++ ACX1xx_IE_MEMORY_MAP_LEN, /* ACX1xx_IE_SSID_LEN, */
++ 0,
++ ACX1xx_IE_ASSOC_ID_LEN,
++ 0,
++ ACX111_IE_CONFIG_OPTIONS_LEN,
++ ACX1xx_IE_FWREV_LEN,
++ ACX1xx_IE_FCS_ERROR_COUNT_LEN,
++ ACX1xx_IE_MEDIUM_USAGE_LEN,
++ ACX1xx_IE_RXCONFIG_LEN,
++ 0,
++ 0,
++ sizeof(fw_stats_t)-4,
++ 0,
++ ACX1xx_IE_FEATURE_CONFIG_LEN,
++ ACX111_IE_KEY_CHOOSE_LEN,
++ ACX1FF_IE_MISC_CONFIG_TABLE_LEN,
++ ACX1FF_IE_WONE_CONFIG_LEN,
++ 0,
++ ACX1FF_IE_TID_CONFIG_LEN,
++ 0,
++ 0,
++ 0,
++ ACX1FF_IE_CALIB_ASSESSMENT_LEN,
++ ACX1FF_IE_BEACON_FILTER_OPTIONS_LEN,
++ ACX1FF_IE_LOW_RSSI_THRESH_OPT_LEN,
++ ACX1FF_IE_NOISE_HISTOGRAM_RESULTS_LEN,
++ 0,
++ ACX1FF_IE_PACKET_DETECT_THRESH_LEN,
++ ACX1FF_IE_TX_CONFIG_OPTIONS_LEN,
++ ACX1FF_IE_CCA_THRESHOLD_LEN,
++ ACX1FF_IE_EVENT_MASK_LEN,
++ ACX1FF_IE_DTIM_PERIOD_LEN,
++ 0,
++ ACX1FF_IE_ACI_CONFIG_SET_LEN,
++ 0,
++ 0,
++ 0,
++ 0,
++ 0,
++ 0,
++ ACX1FF_IE_EEPROM_VER_LEN,
++};
++
++static const u16
++acx100_ie_len_dot11[] = {
++ 0,
++ ACX1xx_IE_DOT11_STATION_ID_LEN,
++ 0,
++ ACX100_IE_DOT11_BEACON_PERIOD_LEN,
++ ACX1xx_IE_DOT11_DTIM_PERIOD_LEN,
++ ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN,
++ ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN,
++ ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE_LEN,
++ ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN,
++ 0,
++ ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN_LEN,
++ ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN,
++ 0,
++ ACX1xx_IE_DOT11_TX_POWER_LEVEL_LEN,
++ ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN,
++ ACX100_IE_DOT11_ED_THRESHOLD_LEN,
++ ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET_LEN,
++ 0,
++ 0,
++ 0,
++};
++
++static const u16
++acx111_ie_len[] = {
++ 0,
++ ACX100_IE_ACX_TIMER_LEN,
++ sizeof(acx111_ie_powersave_t)-4,
++ ACX1xx_IE_QUEUE_CONFIG_LEN,
++ ACX100_IE_BLOCK_SIZE_LEN,
++ ACX1xx_IE_MEMORY_CONFIG_OPTIONS_LEN,
++ ACX1xx_IE_RATE_FALLBACK_LEN,
++ ACX100_IE_WEP_OPTIONS_LEN,
++ ACX1xx_IE_MEMORY_MAP_LEN, /* ACX1xx_IE_SSID_LEN, */
++ 0,
++ ACX1xx_IE_ASSOC_ID_LEN,
++ 0,
++ ACX111_IE_CONFIG_OPTIONS_LEN,
++ ACX1xx_IE_FWREV_LEN,
++ ACX1xx_IE_FCS_ERROR_COUNT_LEN,
++ ACX1xx_IE_MEDIUM_USAGE_LEN,
++ ACX1xx_IE_RXCONFIG_LEN,
++ 0,
++ 0,
++ sizeof(fw_stats_t)-4,
++ 0,
++ ACX1xx_IE_FEATURE_CONFIG_LEN,
++ ACX111_IE_KEY_CHOOSE_LEN,
++ ACX1FF_IE_MISC_CONFIG_TABLE_LEN,
++ ACX1FF_IE_WONE_CONFIG_LEN,
++ 0,
++ ACX1FF_IE_TID_CONFIG_LEN,
++ 0,
++ 0,
++ 0,
++ ACX1FF_IE_CALIB_ASSESSMENT_LEN,
++ ACX1FF_IE_BEACON_FILTER_OPTIONS_LEN,
++ ACX1FF_IE_LOW_RSSI_THRESH_OPT_LEN,
++ ACX1FF_IE_NOISE_HISTOGRAM_RESULTS_LEN,
++ 0,
++ ACX1FF_IE_PACKET_DETECT_THRESH_LEN,
++ ACX1FF_IE_TX_CONFIG_OPTIONS_LEN,
++ ACX1FF_IE_CCA_THRESHOLD_LEN,
++ ACX1FF_IE_EVENT_MASK_LEN,
++ ACX1FF_IE_DTIM_PERIOD_LEN,
++ 0,
++ ACX1FF_IE_ACI_CONFIG_SET_LEN,
++ 0,
++ 0,
++ 0,
++ 0,
++ 0,
++ 0,
++ ACX1FF_IE_EEPROM_VER_LEN,
++};
++
++static const u16
++acx111_ie_len_dot11[] = {
++ 0,
++ ACX1xx_IE_DOT11_STATION_ID_LEN,
++ 0,
++ ACX100_IE_DOT11_BEACON_PERIOD_LEN,
++ ACX1xx_IE_DOT11_DTIM_PERIOD_LEN,
++ ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN,
++ ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN,
++ ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE_LEN,
++ ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN,
++ 0,
++ ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN_LEN,
++ ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN,
++ 0,
++ ACX1xx_IE_DOT11_TX_POWER_LEVEL_LEN,
++ ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN,
++ ACX100_IE_DOT11_ED_THRESHOLD_LEN,
++ ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET_LEN,
++ 0,
++ 0,
++ 0,
++};
++
++
++#undef FUNC
++#define FUNC "configure"
++#if !ACX_DEBUG
++int
++acx_s_configure(acx_device_t *adev, void *pdr, int type)
++{
++#else
++int
++acx_s_configure_debug(acx_device_t *adev, void *pdr, int type, const char* typestr)
++{
++#endif
++ u16 len;
++ int res;
++
++ if (type < 0x1000)
++ len = adev->ie_len[type];
++ else
++ len = adev->ie_len_dot11[type - 0x1000];
++
++ log(L_CTL, FUNC"(type:%s,len:%u)\n", typestr, len);
++ if (unlikely(!len)) {
++ log(L_DEBUG, "zero-length type %s?!\n", typestr);
++ }
++
++ ((acx_ie_generic_t *)pdr)->type = cpu_to_le16(type);
++ ((acx_ie_generic_t *)pdr)->len = cpu_to_le16(len);
++ res = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIGURE, pdr, len + 4);
++ if (unlikely(OK != res)) {
++#if ACX_DEBUG
++ printk("%s: "FUNC"(type:%s) FAILED\n", adev->ndev->name, typestr);
++#else
++ printk("%s: "FUNC"(type:0x%X) FAILED\n", adev->ndev->name, type);
++#endif
++ /* dump_stack() is already done in issue_cmd() */
++ }
++ return res;
++}
++
++#undef FUNC
++#define FUNC "interrogate"
++#if !ACX_DEBUG
++int
++acx_s_interrogate(acx_device_t *adev, void *pdr, int type)
++{
++#else
++int
++acx_s_interrogate_debug(acx_device_t *adev, void *pdr, int type,
++ const char* typestr)
++{
++#endif
++ u16 len;
++ int res;
++
++ /* FIXME: no check whether this exceeds the array yet.
++ * We should probably remember the number of entries... */
++ if (type < 0x1000)
++ len = adev->ie_len[type];
++ else
++ len = adev->ie_len_dot11[type-0x1000];
++
++ log(L_CTL, FUNC"(type:%s,len:%u)\n", typestr, len);
++
++ ((acx_ie_generic_t *)pdr)->type = cpu_to_le16(type);
++ ((acx_ie_generic_t *)pdr)->len = cpu_to_le16(len);
++ res = acx_s_issue_cmd(adev, ACX1xx_CMD_INTERROGATE, pdr, len + 4);
++ if (unlikely(OK != res)) {
++#if ACX_DEBUG
++ printk("%s: "FUNC"(type:%s) FAILED\n", adev->ndev->name, typestr);
++#else
++ printk("%s: "FUNC"(type:0x%X) FAILED\n", adev->ndev->name, type);
++#endif
++ /* dump_stack() is already done in issue_cmd() */
++ }
++ return res;
++}
++
++#if CMD_DISCOVERY
++void
++great_inquisitor(acx_device_t *adev)
++{
++ static struct {
++ u16 type;
++ u16 len;
++ /* 0x200 was too large here: */
++ u8 data[0x100 - 4];
++ } ACX_PACKED ie;
++ u16 type;
++
++ FN_ENTER;
++
++ /* 0..0x20, 0x1000..0x1020 */
++ for (type = 0; type <= 0x1020; type++) {
++ if (type == 0x21)
++ type = 0x1000;
++ ie.type = cpu_to_le16(type);
++ ie.len = cpu_to_le16(sizeof(ie) - 4);
++ acx_s_issue_cmd(adev, ACX1xx_CMD_INTERROGATE, &ie, sizeof(ie));
++ }
++ FN_EXIT0;
++}
++#endif
++
++
++#ifdef CONFIG_PROC_FS
++/***********************************************************************
++** /proc files
++*/
++/***********************************************************************
++** acx_l_proc_output
++** Generate content for our /proc entry
++**
++** Arguments:
++** buf is a pointer to write output to
++** adev is the usual pointer to our private struct acx_device
++** Returns:
++** number of bytes actually written to buf
++** Side effects:
++** none
++*/
++static int
++acx_l_proc_output(char *buf, acx_device_t *adev)
++{
++ char *p = buf;
++ int i;
++
++ FN_ENTER;
++
++ p += sprintf(p,
++ "acx driver version:\t\t" ACX_RELEASE "\n"
++ "Wireless extension version:\t" STRING(WIRELESS_EXT) "\n"
++ "chip name:\t\t\t%s (0x%08X)\n"
++ "radio type:\t\t\t0x%02X\n"
++ "form factor:\t\t\t0x%02X\n"
++ "EEPROM version:\t\t\t0x%02X\n"
++ "firmware version:\t\t%s (0x%08X)\n",
++ adev->chip_name, adev->firmware_id,
++ adev->radio_type,
++ adev->form_factor,
++ adev->eeprom_version,
++ adev->firmware_version, adev->firmware_numver);
++
++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
++ struct client *bss = &adev->sta_list[i];
++ if (!bss->used) continue;
++ p += sprintf(p, "BSS %u BSSID "MACSTR" ESSID %s channel %u "
++ "Cap 0x%X SIR %u SNR %u\n",
++ i, MAC(bss->bssid), (char*)bss->essid, bss->channel,
++ bss->cap_info, bss->sir, bss->snr);
++ }
++ p += sprintf(p, "status:\t\t\t%u (%s)\n",
++ adev->status, acx_get_status_name(adev->status));
++
++ FN_EXIT1(p - buf);
++ return p - buf;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_s_proc_diag_output(char *buf, acx_device_t *adev)
++{
++ char *p = buf;
++ unsigned long flags;
++ unsigned int len = 0, partlen;
++ u32 temp1, temp2;
++ u8 *st, *st_end;
++#ifdef __BIG_ENDIAN
++ u8 *st2;
++#endif
++ fw_stats_t *fw_stats;
++ char *part_str = NULL;
++ fw_stats_tx_t *tx = NULL;
++ fw_stats_rx_t *rx = NULL;
++ fw_stats_dma_t *dma = NULL;
++ fw_stats_irq_t *irq = NULL;
++ fw_stats_wep_t *wep = NULL;
++ fw_stats_pwr_t *pwr = NULL;
++ fw_stats_mic_t *mic = NULL;
++ fw_stats_aes_t *aes = NULL;
++ fw_stats_event_t *evt = NULL;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++
++#if defined (ACX_MEM)
++ p = acxmem_s_proc_diag_output(p, adev);
++#else
++ if (IS_PCI(adev))
++ p = acxpci_s_proc_diag_output(p, adev);
++#endif
++
++ p += sprintf(p,
++ "\n"
++ "** network status **\n"
++ "dev_state_mask 0x%04X\n"
++ "status %u (%s), "
++ "mode %u, channel %u, "
++ "reg_dom_id 0x%02X, reg_dom_chanmask 0x%04X, ",
++ adev->dev_state_mask,
++ adev->status, acx_get_status_name(adev->status),
++ adev->mode, adev->channel,
++ adev->reg_dom_id, adev->reg_dom_chanmask
++ );
++ p += sprintf(p,
++ "ESSID \"%s\", essid_active %d, essid_len %d, "
++ "essid_for_assoc \"%s\", nick \"%s\"\n"
++ "WEP ena %d, restricted %d, idx %d\n",
++ adev->essid, adev->essid_active, (int)adev->essid_len,
++ adev->essid_for_assoc, adev->nick,
++ adev->wep_enabled, adev->wep_restricted,
++ adev->wep_current_index);
++ p += sprintf(p, "dev_addr "MACSTR"\n", MAC(adev->dev_addr));
++ p += sprintf(p, "bssid "MACSTR"\n", MAC(adev->bssid));
++ p += sprintf(p, "ap_filter "MACSTR"\n", MAC(adev->ap));
++
++ p += sprintf(p,
++ "\n"
++ "** PHY status **\n"
++ "tx_disabled %d, tx_level_dbm %d\n" /* "tx_level_val %d, tx_level_auto %d\n" */
++ "sensitivity %d, antenna 0x%02X, ed_threshold %d, cca %d, preamble_mode %d\n"
++ "rate_basic 0x%04X, rate_oper 0x%04X\n"
++ "rts_threshold %d, frag_threshold %d, short_retry %d, long_retry %d\n"
++ "msdu_lifetime %d, listen_interval %d, beacon_interval %d\n",
++ adev->tx_disabled, adev->tx_level_dbm, /* adev->tx_level_val, adev->tx_level_auto, */
++ adev->sensitivity, adev->antenna, adev->ed_threshold, adev->cca, adev->preamble_mode,
++ adev->rate_basic, adev->rate_oper,
++ adev->rts_threshold, adev->frag_threshold, adev->short_retry, adev->long_retry,
++ adev->msdu_lifetime, adev->listen_interval, adev->beacon_interval);
++
++ acx_unlock(adev, flags);
++
++ p += sprintf(p,
++ "\n"
++ "** Firmware **\n"
++ "NOTE: version dependent statistics layout, "
++ "please report if you suspect wrong parsing!\n"
++ "\n"
++ "version \"%s\"\n", adev->firmware_version);
++
++ /* TODO: may replace kmalloc/memset with kzalloc once
++ * Linux 2.6.14 is widespread */
++ fw_stats = kmalloc(sizeof(*fw_stats), GFP_KERNEL);
++ if (!fw_stats) {
++ FN_EXIT1(0);
++ return 0;
++ }
++ memset(fw_stats, 0, sizeof(*fw_stats));
++
++ st = (u8 *)fw_stats;
++
++ part_str = "statistics query command";
++
++ if (OK != acx_s_interrogate(adev, st, ACX1xx_IE_FIRMWARE_STATISTICS))
++ goto fw_stats_end;
++
++ st += sizeof(u16);
++ len = *(u16 *)st;
++
++ if (len > sizeof(*fw_stats)) {
++ p += sprintf(p,
++ "firmware version with bigger fw_stats struct detected\n"
++ "(%u vs. %u), please report\n", len, sizeof(fw_stats_t));
++ if (len > sizeof(*fw_stats)) {
++ p += sprintf(p, "struct size exceeded allocation!\n");
++ len = sizeof(*fw_stats);
++ }
++ }
++ st += sizeof(u16);
++ st_end = st - 2*sizeof(u16) + len;
++
++#ifdef __BIG_ENDIAN
++ /* let's make one bold assumption here:
++ * (hopefully!) *all* statistics fields are u32 only,
++ * thus if we need to make endianness corrections
++ * we can simply do them in one go, in advance */
++ st2 = (u8 *)fw_stats;
++ for (temp1 = 0; temp1 < len; temp1 += 4, st2 += 4)
++ *(u32 *)st2 = le32_to_cpu(*(u32 *)st2);
++#endif
++
++ part_str = "Rx/Tx";
++
++ /* directly at end of a struct part? --> no error! */
++ if (st == st_end)
++ goto fw_stats_end;
++
++ tx = (fw_stats_tx_t *)st;
++ st += sizeof(fw_stats_tx_t);
++ rx = (fw_stats_rx_t *)st;
++ st += sizeof(fw_stats_rx_t);
++ partlen = sizeof(fw_stats_tx_t) + sizeof(fw_stats_rx_t);
++
++ if (IS_ACX100(adev)) {
++ /* at least ACX100 PCI F/W 1.9.8.b
++ * and ACX100 USB F/W 1.0.7-USB
++ * don't have those two fields... */
++ st -= 2*sizeof(u32);
++
++ /* our parsing doesn't quite match this firmware yet,
++ * log failure */
++ if (st > st_end)
++ goto fw_stats_fail;
++ temp1 = temp2 = 999999999;
++ } else {
++ if (st > st_end)
++ goto fw_stats_fail;
++ temp1 = rx->rx_aci_events;
++ temp2 = rx->rx_aci_resets;
++ }
++
++ p += sprintf(p,
++ "%s:\n"
++ " tx_desc_overfl %u\n"
++ " rx_OutOfMem %u, rx_hdr_overfl %u, rx_hw_stuck %u\n"
++ " rx_dropped_frame %u, rx_frame_ptr_err %u, rx_xfr_hint_trig %u\n"
++ " rx_aci_events %u, rx_aci_resets %u\n",
++ part_str,
++ tx->tx_desc_of,
++ rx->rx_oom,
++ rx->rx_hdr_of,
++ rx->rx_hw_stuck,
++ rx->rx_dropped_frame,
++ rx->rx_frame_ptr_err,
++ rx->rx_xfr_hint_trig,
++ temp1,
++ temp2);
++
++ part_str = "DMA";
++
++ if (st == st_end)
++ goto fw_stats_end;
++
++ dma = (fw_stats_dma_t *)st;
++ partlen = sizeof(fw_stats_dma_t);
++ st += partlen;
++
++ if (st > st_end)
++ goto fw_stats_fail;
++
++ p += sprintf(p,
++ "%s:\n"
++ " rx_dma_req %u, rx_dma_err %u, tx_dma_req %u, tx_dma_err %u\n",
++ part_str,
++ dma->rx_dma_req,
++ dma->rx_dma_err,
++ dma->tx_dma_req,
++ dma->tx_dma_err);
++
++ part_str = "IRQ";
++
++ if (st == st_end)
++ goto fw_stats_end;
++
++ irq = (fw_stats_irq_t *)st;
++ partlen = sizeof(fw_stats_irq_t);
++ st += partlen;
++
++ if (st > st_end)
++ goto fw_stats_fail;
++
++ p += sprintf(p,
++ "%s:\n"
++ " cmd_cplt %u, fiq %u\n"
++ " rx_hdrs %u, rx_cmplt %u, rx_mem_overfl %u, rx_rdys %u\n"
++ " irqs %u, tx_procs %u, decrypt_done %u\n"
++ " dma_0_done %u, dma_1_done %u, tx_exch_complet %u\n"
++ " commands %u, rx_procs %u, hw_pm_mode_changes %u\n"
++ " host_acks %u, pci_pm %u, acm_wakeups %u\n",
++ part_str,
++ irq->cmd_cplt,
++ irq->fiq,
++ irq->rx_hdrs,
++ irq->rx_cmplt,
++ irq->rx_mem_of,
++ irq->rx_rdys,
++ irq->irqs,
++ irq->tx_procs,
++ irq->decrypt_done,
++ irq->dma_0_done,
++ irq->dma_1_done,
++ irq->tx_exch_complet,
++ irq->commands,
++ irq->rx_procs,
++ irq->hw_pm_mode_changes,
++ irq->host_acks,
++ irq->pci_pm,
++ irq->acm_wakeups);
++
++ part_str = "WEP";
++
++ if (st == st_end)
++ goto fw_stats_end;
++
++ wep = (fw_stats_wep_t *)st;
++ partlen = sizeof(fw_stats_wep_t);
++ st += partlen;
++
++ if (
++ (IS_PCI(adev) && IS_ACX100(adev))
++ || (IS_USB(adev) && IS_ACX100(adev))
++ || (IS_MEM(adev) && IS_ACX100(adev))
++ ) {
++ /* at least ACX100 PCI F/W 1.9.8.b,
++ * ACX100 USB F/W 1.0.7-USB
++ * and ACX100 Generic Slave F/W 1.10.7.K
++ * don't have those two fields...
++ */
++ st -= 2*sizeof(u32);
++ if (st > st_end)
++ goto fw_stats_fail;
++ temp1 = temp2 = 999999999;
++ } else {
++ if (st > st_end)
++ goto fw_stats_fail;
++ temp1 = wep->wep_pkt_decrypt;
++ temp2 = wep->wep_decrypt_irqs;
++ }
++
++ p += sprintf(p,
++ "%s:\n"
++ " wep_key_count %u, wep_default_key_count %u, dot11_def_key_mib %u\n"
++ " wep_key_not_found %u, wep_decrypt_fail %u\n"
++ " wep_pkt_decrypt %u, wep_decrypt_irqs %u\n",
++ part_str,
++ wep->wep_key_count,
++ wep->wep_default_key_count,
++ wep->dot11_def_key_mib,
++ wep->wep_key_not_found,
++ wep->wep_decrypt_fail,
++ temp1,
++ temp2);
++
++ part_str = "power";
++
++ if (st == st_end)
++ goto fw_stats_end;
++
++ pwr = (fw_stats_pwr_t *)st;
++ partlen = sizeof(fw_stats_pwr_t);
++ st += partlen;
++
++ if (st > st_end)
++ goto fw_stats_fail;
++
++ p += sprintf(p,
++ "%s:\n"
++ " tx_start_ctr %u, no_ps_tx_too_short %u\n"
++ " rx_start_ctr %u, no_ps_rx_too_short %u\n"
++ " lppd_started %u\n"
++ " no_lppd_too_noisy %u, no_lppd_too_short %u, no_lppd_matching_frame %u\n",
++ part_str,
++ pwr->tx_start_ctr,
++ pwr->no_ps_tx_too_short,
++ pwr->rx_start_ctr,
++ pwr->no_ps_rx_too_short,
++ pwr->lppd_started,
++ pwr->no_lppd_too_noisy,
++ pwr->no_lppd_too_short,
++ pwr->no_lppd_matching_frame);
++
++ part_str = "MIC";
++
++ if (st == st_end)
++ goto fw_stats_end;
++
++ mic = (fw_stats_mic_t *)st;
++ partlen = sizeof(fw_stats_mic_t);
++ st += partlen;
++
++ if (st > st_end)
++ goto fw_stats_fail;
++
++ p += sprintf(p,
++ "%s:\n"
++ " mic_rx_pkts %u, mic_calc_fail %u\n",
++ part_str,
++ mic->mic_rx_pkts,
++ mic->mic_calc_fail);
++
++ part_str = "AES";
++
++ if (st == st_end)
++ goto fw_stats_end;
++
++ aes = (fw_stats_aes_t *)st;
++ partlen = sizeof(fw_stats_aes_t);
++ st += partlen;
++
++ if (st > st_end)
++ goto fw_stats_fail;
++
++ p += sprintf(p,
++ "%s:\n"
++ " aes_enc_fail %u, aes_dec_fail %u\n"
++ " aes_enc_pkts %u, aes_dec_pkts %u\n"
++ " aes_enc_irq %u, aes_dec_irq %u\n",
++ part_str,
++ aes->aes_enc_fail,
++ aes->aes_dec_fail,
++ aes->aes_enc_pkts,
++ aes->aes_dec_pkts,
++ aes->aes_enc_irq,
++ aes->aes_dec_irq);
++
++ part_str = "event";
++
++ if (st == st_end)
++ goto fw_stats_end;
++
++ evt = (fw_stats_event_t *)st;
++ partlen = sizeof(fw_stats_event_t);
++ st += partlen;
++
++ if (st > st_end)
++ goto fw_stats_fail;
++
++ p += sprintf(p,
++ "%s:\n"
++ " heartbeat %u, calibration %u\n"
++ " rx_mismatch %u, rx_mem_empty %u, rx_pool %u\n"
++ " oom_late %u\n"
++ " phy_tx_err %u, tx_stuck %u\n",
++ part_str,
++ evt->heartbeat,
++ evt->calibration,
++ evt->rx_mismatch,
++ evt->rx_mem_empty,
++ evt->rx_pool,
++ evt->oom_late,
++ evt->phy_tx_err,
++ evt->tx_stuck);
++
++ if (st < st_end)
++ goto fw_stats_bigger;
++
++ goto fw_stats_end;
++
++fw_stats_fail:
++ st -= partlen;
++ p += sprintf(p,
++ "failed at %s part (size %u), offset %u (struct size %u), "
++ "please report\n", part_str, partlen,
++ (int)st - (int)fw_stats, len);
++
++fw_stats_bigger:
++ for (; st < st_end; st += 4)
++ p += sprintf(p,
++ "UNKN%3d: %u\n", (int)st - (int)fw_stats, *(u32 *)st);
++
++fw_stats_end:
++ kfree(fw_stats);
++
++ FN_EXIT1(p - buf);
++ return p - buf;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_s_proc_phy_output(char *buf, acx_device_t *adev)
++{
++ char *p = buf;
++ int i;
++
++ FN_ENTER;
++
++ /*
++ if (RADIO_RFMD_11 != adev->radio_type) {
++ printk("sorry, not yet adapted for radio types "
++ "other than RFMD, please verify "
++ "PHY size etc. first!\n");
++ goto end;
++ }
++ */
++
++ /* The PHY area is only 0x80 bytes long; further pages after that
++ * only have some page number registers with altered value,
++ * all other registers remain the same. */
++ for (i = 0; i < 0x80; i++) {
++ acx_s_read_phy_reg(adev, i, p++);
++ }
++
++ FN_EXIT1(p - buf);
++ return p - buf;
++}
++
++
++/***********************************************************************
++** acx_e_read_proc_XXXX
++** Handle our /proc entry
++**
++** Arguments:
++** standard kernel read_proc interface
++** Returns:
++** number of bytes written to buf
++** Side effects:
++** none
++*/
++static int
++acx_e_read_proc(char *buf, char **start, off_t offset, int count,
++ int *eof, void *data)
++{
++ acx_device_t *adev = (acx_device_t*)data;
++ unsigned long flags;
++ int length;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++ acx_lock(adev, flags);
++ /* fill buf */
++ length = acx_l_proc_output(buf, adev);
++ acx_unlock(adev, flags);
++ acx_sem_unlock(adev);
++
++ /* housekeeping */
++ if (length <= offset + count)
++ *eof = 1;
++ *start = buf + offset;
++ length -= offset;
++ if (length > count)
++ length = count;
++ if (length < 0)
++ length = 0;
++ FN_EXIT1(length);
++ return length;
++}
++
++static char _buf[32768];
++static int
++acx_e_read_proc_diag(char *buf, char **start, off_t offset, int count,
++ int *eof, void *data)
++{
++ acx_device_t *adev = (acx_device_t*)data;
++ int length;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++ /* fill buf */
++ length = acx_s_proc_diag_output(_buf, adev);
++ acx_sem_unlock(adev);
++
++ memcpy(buf, _buf + offset, count);
++
++ /* housekeeping */
++ if (length <= offset + count)
++ *eof = 1;
++ *start = count;
++ length -= offset;
++ if (length > count)
++ length = count;
++ if (length < 0)
++ length = 0;
++ FN_EXIT1(length);
++ return length;
++}
++
++static int
++acx_e_read_proc_eeprom(char *buf, char **start, off_t offset, int count,
++ int *eof, void *data)
++{
++ acx_device_t *adev = (acx_device_t*)data;
++ int length;
++
++ FN_ENTER;
++
++ /* fill buf */
++ length = 0;
++#if defined (ACX_MEM)
++ acx_sem_lock(adev);
++ length = acxmem_proc_eeprom_output(buf, adev);
++ acx_sem_unlock(adev);
++#else
++ if (IS_PCI(adev)) {
++ acx_sem_lock(adev);
++ length = acxpci_proc_eeprom_output(buf, adev);
++ acx_sem_unlock(adev);
++ }
++#endif
++
++ /* housekeeping */
++ if (length <= offset + count)
++ *eof = 1;
++ *start = buf + offset;
++ length -= offset;
++ if (length > count)
++ length = count;
++ if (length < 0)
++ length = 0;
++ FN_EXIT1(length);
++ return length;
++}
++
++static int
++acx_e_read_proc_phy(char *buf, char **start, off_t offset, int count,
++ int *eof, void *data)
++{
++ acx_device_t *adev = (acx_device_t*)data;
++ int length;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++ /* fill buf */
++ length = acx_s_proc_phy_output(buf, adev);
++ acx_sem_unlock(adev);
++
++ /* housekeeping */
++ if (length <= offset + count)
++ *eof = 1;
++ *start = buf + offset;
++ length -= offset;
++ if (length > count)
++ length = count;
++ if (length < 0)
++ length = 0;
++ FN_EXIT1(length);
++ return length;
++}
++
++
++/***********************************************************************
++** /proc files registration
++*/
++static const char * const
++proc_files[] = { "", "_diag", "_eeprom", "_phy" };
++
++static read_proc_t * const
++proc_funcs[] = {
++ acx_e_read_proc,
++ acx_e_read_proc_diag,
++ acx_e_read_proc_eeprom,
++ acx_e_read_proc_phy
++};
++
++static int
++manage_proc_entries(const struct net_device *ndev, int remove)
++{
++ acx_device_t *adev = ndev2adev((struct net_device *)ndev);
++ char procbuf[80];
++ int i;
++
++ for (i = 0; i < VEC_SIZE(proc_files); i++) {
++ snprintf(procbuf, sizeof(procbuf),
++ "driver/acx_%s%s", ndev->name, proc_files[i]);
++ log(L_INIT, "%sing /proc entry %s\n",
++ remove ? "remov" : "creat", procbuf);
++ if (!remove) {
++ if (!create_proc_read_entry(procbuf, 0, 0, proc_funcs[i], adev)) {
++ printk("acx: cannot register /proc entry %s\n", procbuf);
++ return NOT_OK;
++ }
++ } else {
++ remove_proc_entry(procbuf, NULL);
++ }
++ }
++ return OK;
++}
++
++int
++acx_proc_register_entries(const struct net_device *ndev)
++{
++ return manage_proc_entries(ndev, 0);
++}
++
++int
++acx_proc_unregister_entries(const struct net_device *ndev)
++{
++ return manage_proc_entries(ndev, 1);
++}
++#endif /* CONFIG_PROC_FS */
++
++
++/***********************************************************************
++** acx_cmd_join_bssid
++**
++** Common code for both acx100 and acx111.
++*/
++/* NB: does NOT match RATE100_nn but matches ACX[111]_SCAN_RATE_n */
++static const u8
++bitpos2genframe_txrate[] = {
++ 10, /* 0. 1 Mbit/s */
++ 20, /* 1. 2 Mbit/s */
++ 55, /* 2. 5.5 Mbit/s */
++ 0x0B, /* 3. 6 Mbit/s */
++ 0x0F, /* 4. 9 Mbit/s */
++ 110, /* 5. 11 Mbit/s */
++ 0x0A, /* 6. 12 Mbit/s */
++ 0x0E, /* 7. 18 Mbit/s */
++ 220, /* 8. 22 Mbit/s */
++ 0x09, /* 9. 24 Mbit/s */
++ 0x0D, /* 10. 36 Mbit/s */
++ 0x08, /* 11. 48 Mbit/s */
++ 0x0C, /* 12. 54 Mbit/s */
++ 10, /* 13. 1 Mbit/s, should never happen */
++ 10, /* 14. 1 Mbit/s, should never happen */
++ 10, /* 15. 1 Mbit/s, should never happen */
++};
++
++/* Looks scary, eh?
++** Actually, each one compiled into one AND and one SHIFT,
++** 31 bytes in x86 asm (more if uints are replaced by u16/u8) */
++static inline unsigned int
++rate111to5bits(unsigned int rate)
++{
++ return (rate & 0x7)
++ | ( (rate & RATE111_11) / (RATE111_11/JOINBSS_RATES_11) )
++ | ( (rate & RATE111_22) / (RATE111_22/JOINBSS_RATES_22) )
++ ;
++}
++
++static void
++acx_s_cmd_join_bssid(acx_device_t *adev, const u8 *bssid)
++{
++ acx_joinbss_t tmp;
++ int dtim_interval;
++ int i;
++
++ if (mac_is_zero(bssid))
++ return;
++
++ FN_ENTER;
++
++ dtim_interval = (ACX_MODE_0_ADHOC == adev->mode) ?
++ 1 : adev->dtim_interval;
++
++ memset(&tmp, 0, sizeof(tmp));
++
++ for (i = 0; i < ETH_ALEN; i++) {
++ tmp.bssid[i] = bssid[ETH_ALEN-1 - i];
++ }
++
++ tmp.beacon_interval = cpu_to_le16(adev->beacon_interval);
++
++ /* Basic rate set. Control frame responses (such as ACK or CTS frames)
++ ** are sent with one of these rates */
++ if (IS_ACX111(adev)) {
++ /* It was experimentally determined that rates_basic
++ ** can take 11g rates as well, not only rates
++ ** defined with JOINBSS_RATES_BASIC111_nnn.
++ ** Just use RATE111_nnn constants... */
++ tmp.u.acx111.dtim_interval = dtim_interval;
++ tmp.u.acx111.rates_basic = cpu_to_le16(adev->rate_basic);
++ log(L_ASSOC, "rates_basic:%04X, rates_supported:%04X\n",
++ adev->rate_basic, adev->rate_oper);
++ } else {
++ tmp.u.acx100.dtim_interval = dtim_interval;
++ tmp.u.acx100.rates_basic = rate111to5bits(adev->rate_basic);
++ tmp.u.acx100.rates_supported = rate111to5bits(adev->rate_oper);
++ log(L_ASSOC, "rates_basic:%04X->%02X, "
++ "rates_supported:%04X->%02X\n",
++ adev->rate_basic, tmp.u.acx100.rates_basic,
++ adev->rate_oper, tmp.u.acx100.rates_supported);
++ }
++
++ /* Setting up how Beacon, Probe Response, RTS, and PS-Poll frames
++ ** will be sent (rate/modulation/preamble) */
++ tmp.u.txrate.genfrm_txrate = bitpos2genframe_txrate[lowest_bit(adev->rate_basic)];
++ tmp.genfrm_mod_pre = 0; /* FIXME: was = adev->capab_short (which was always 0); */
++ /* we can use short pre *if* all peers can understand it */
++ /* FIXME #2: we need to correctly set PBCC/OFDM bits here too */
++
++ /* we switch fw to STA mode in MONITOR mode, it seems to be
++ ** the only mode where fw does not emit beacons by itself
++ ** but allows us to send anything (we really want to retain
++ ** ability to tx arbitrary frames in MONITOR mode)
++ */
++ tmp.macmode = (adev->mode != ACX_MODE_MONITOR ? adev->mode : ACX_MODE_2_STA);
++ tmp.channel = adev->channel;
++ tmp.essid_len = adev->essid_len;
++ /* NOTE: the code memcpy'd essid_len + 1 before, which is WRONG! */
++ memcpy(tmp.essid, adev->essid, tmp.essid_len);
++ acx_s_issue_cmd(adev, ACX1xx_CMD_JOIN, &tmp, tmp.essid_len + 0x11);
++
++ log(L_ASSOC|L_DEBUG, "BSS_Type = %u\n", tmp.macmode);
++ acxlog_mac(L_ASSOC|L_DEBUG, "JoinBSSID MAC:", adev->bssid, "\n");
++
++ acx_update_capabilities(adev);
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_s_cmd_start_scan
++**
++** Issue scan command to the hardware
++**
++** unified function for both ACX111 and ACX100
++*/
++static void
++acx_s_scan_chan(acx_device_t *adev)
++{
++ union {
++ acx111_scan_t acx111;
++ acx100_scan_t acx100;
++ } s;
++
++ FN_ENTER;
++
++ memset(&s, 0, sizeof(s));
++
++ /* first common positions... */
++
++ s.acx111.count = cpu_to_le16(adev->scan_count);
++ s.acx111.rate = adev->scan_rate;
++ s.acx111.options = adev->scan_mode;
++ s.acx111.chan_duration = cpu_to_le16(adev->scan_duration);
++ s.acx111.max_probe_delay = cpu_to_le16(adev->scan_probe_delay);
++
++ /* ...then differences */
++
++ if (IS_ACX111(adev)) {
++ s.acx111.channel_list_select = 0; /* scan every allowed channel */
++ /*s.acx111.channel_list_select = 1;*/ /* scan given channels */
++ /*s.acx111.modulation = 0x40;*/ /* long preamble? OFDM? -> only for active scan */
++ s.acx111.modulation = 0;
++ /*s.acx111.channel_list[0] = 6;
++ s.acx111.channel_list[1] = 4;*/
++ } else {
++ s.acx100.start_chan = cpu_to_le16(1);
++ s.acx100.flags = cpu_to_le16(0x8000);
++ }
++
++ acx_s_issue_cmd(adev, ACX1xx_CMD_SCAN, &s, sizeof(s));
++ FN_EXIT0;
++}
++
++
++void
++acx_s_cmd_start_scan(acx_device_t *adev)
++{
++ /* time_before check is 'just in case' thing */
++ if (!(adev->irq_status & HOST_INT_SCAN_COMPLETE)
++ && time_before(jiffies, adev->scan_start + 10*HZ)
++ ) {
++ log(L_INIT, "start_scan: seems like previous scan "
++ "is still running. Not starting anew. Please report\n");
++ return;
++ }
++
++ log(L_INIT, "starting radio scan\n");
++ /* remember that fw is commanded to do scan */
++ adev->scan_start = jiffies;
++ CLEAR_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
++ /* issue it */
++ acx_s_scan_chan(adev);
++}
++
++
++/***********************************************************************
++** acx111 feature config
++*/
++static int
++acx111_s_get_feature_config(acx_device_t *adev,
++ u32 *feature_options, u32 *data_flow_options)
++{
++ struct acx111_ie_feature_config feat;
++
++ if (!IS_ACX111(adev)) {
++ return NOT_OK;
++ }
++
++ memset(&feat, 0, sizeof(feat));
++
++ if (OK != acx_s_interrogate(adev, &feat, ACX1xx_IE_FEATURE_CONFIG)) {
++ return NOT_OK;
++ }
++ log(L_DEBUG,
++ "got Feature option:0x%X, DataFlow option: 0x%X\n",
++ feat.feature_options,
++ feat.data_flow_options);
++
++ if (feature_options)
++ *feature_options = le32_to_cpu(feat.feature_options);
++ if (data_flow_options)
++ *data_flow_options = le32_to_cpu(feat.data_flow_options);
++
++ return OK;
++}
++
++static int
++acx111_s_set_feature_config(acx_device_t *adev,
++ u32 feature_options, u32 data_flow_options,
++ unsigned int mode /* 0 == remove, 1 == add, 2 == set */)
++{
++ struct acx111_ie_feature_config feat;
++
++ if (!IS_ACX111(adev)) {
++ return NOT_OK;
++ }
++
++ if ((mode < 0) || (mode > 2))
++ return NOT_OK;
++
++ if (mode != 2)
++ /* need to modify old data */
++ acx111_s_get_feature_config(adev, &feat.feature_options, &feat.data_flow_options);
++ else {
++ /* need to set a completely new value */
++ feat.feature_options = 0;
++ feat.data_flow_options = 0;
++ }
++
++ if (mode == 0) { /* remove */
++ CLEAR_BIT(feat.feature_options, cpu_to_le32(feature_options));
++ CLEAR_BIT(feat.data_flow_options, cpu_to_le32(data_flow_options));
++ } else { /* add or set */
++ SET_BIT(feat.feature_options, cpu_to_le32(feature_options));
++ SET_BIT(feat.data_flow_options, cpu_to_le32(data_flow_options));
++ }
++
++ log(L_DEBUG,
++ "old: feature 0x%08X dataflow 0x%08X. mode: %u\n"
++ "new: feature 0x%08X dataflow 0x%08X\n",
++ feature_options, data_flow_options, mode,
++ le32_to_cpu(feat.feature_options),
++ le32_to_cpu(feat.data_flow_options));
++
++ if (OK != acx_s_configure(adev, &feat, ACX1xx_IE_FEATURE_CONFIG)) {
++ return NOT_OK;
++ }
++
++ return OK;
++}
++
++static inline int
++acx111_s_feature_off(acx_device_t *adev, u32 f, u32 d)
++{
++ return acx111_s_set_feature_config(adev, f, d, 0);
++}
++static inline int
++acx111_s_feature_on(acx_device_t *adev, u32 f, u32 d)
++{
++ return acx111_s_set_feature_config(adev, f, d, 1);
++}
++static inline int
++acx111_s_feature_set(acx_device_t *adev, u32 f, u32 d)
++{
++ return acx111_s_set_feature_config(adev, f, d, 2);
++}
++
++
++/***********************************************************************
++** acx100_s_init_memory_pools
++*/
++static int
++acx100_s_init_memory_pools(acx_device_t *adev, const acx_ie_memmap_t *mmt)
++{
++ acx100_ie_memblocksize_t MemoryBlockSize;
++ acx100_ie_memconfigoption_t MemoryConfigOption;
++ int TotalMemoryBlocks;
++ int RxBlockNum;
++ int TotalRxBlockSize;
++ int TxBlockNum;
++ int TotalTxBlockSize;
++
++ FN_ENTER;
++
++ /* Let's see if we can follow this:
++ first we select our memory block size (which I think is
++ completely arbitrary) */
++ MemoryBlockSize.size = cpu_to_le16(adev->memblocksize);
++
++ /* Then we alert the card to our decision of block size */
++ if (OK != acx_s_configure(adev, &MemoryBlockSize, ACX100_IE_BLOCK_SIZE)) {
++ goto bad;
++ }
++
++ /* We figure out how many total blocks we can create, using
++ the block size we chose, and the beginning and ending
++ memory pointers, i.e.: end-start/size */
++ TotalMemoryBlocks = (le32_to_cpu(mmt->PoolEnd) - le32_to_cpu(mmt->PoolStart)) / adev->memblocksize;
++
++ log(L_DEBUG, "TotalMemoryBlocks=%u (%u bytes)\n",
++ TotalMemoryBlocks, TotalMemoryBlocks*adev->memblocksize);
++
++ /* MemoryConfigOption.DMA_config bitmask:
++ access to ACX memory is to be done:
++ 0x00080000 using PCI conf space?!
++ 0x00040000 using IO instructions?
++ 0x00000000 using memory access instructions
++ 0x00020000 using local memory block linked list (else what?)
++ 0x00010000 using host indirect descriptors (else host must access ACX memory?)
++ */
++#if defined (ACX_MEM)
++ /*
++ * ACX ignores DMA_config for generic slave mode.
++ */
++ MemoryConfigOption.DMA_config = 0;
++ /* Declare start of the Rx host pool */
++ MemoryConfigOption.pRxHostDesc = cpu2acx(0);
++ log(L_DEBUG, "pRxHostDesc 0x%08X, rxhostdesc_startphy 0x%lX\n",
++ acx2cpu(MemoryConfigOption.pRxHostDesc),
++ (long)adev->rxhostdesc_startphy);
++#else
++ if (IS_PCI(adev)) {
++ MemoryConfigOption.DMA_config = cpu_to_le32(0x30000);
++ /* Declare start of the Rx host pool */
++ MemoryConfigOption.pRxHostDesc = cpu2acx(adev->rxhostdesc_startphy);
++ log(L_DEBUG, "pRxHostDesc 0x%08X, rxhostdesc_startphy 0x%lX\n",
++ acx2cpu(MemoryConfigOption.pRxHostDesc),
++ (long)adev->rxhostdesc_startphy);
++ } else {
++ MemoryConfigOption.DMA_config = cpu_to_le32(0x20000);
++ }
++#endif
++
++ /* 50% of the allotment of memory blocks go to tx descriptors */
++ TxBlockNum = TotalMemoryBlocks / 2;
++ MemoryConfigOption.TxBlockNum = cpu_to_le16(TxBlockNum);
++
++ /* and 50% go to the rx descriptors */
++ RxBlockNum = TotalMemoryBlocks - TxBlockNum;
++ MemoryConfigOption.RxBlockNum = cpu_to_le16(RxBlockNum);
++
++ /* size of the tx and rx descriptor queues */
++ TotalTxBlockSize = TxBlockNum * adev->memblocksize;
++ TotalRxBlockSize = RxBlockNum * adev->memblocksize;
++ log(L_DEBUG, "TxBlockNum %u RxBlockNum %u TotalTxBlockSize %u "
++ "TotalTxBlockSize %u\n", TxBlockNum, RxBlockNum,
++ TotalTxBlockSize, TotalRxBlockSize);
++
++
++ /* align the tx descriptor queue to an alignment of 0x20 (32 bytes) */
++ MemoryConfigOption.rx_mem =
++ cpu_to_le32((le32_to_cpu(mmt->PoolStart) + 0x1f) & ~0x1f);
++
++ /* align the rx descriptor queue to units of 0x20
++ * and offset it by the tx descriptor queue */
++ MemoryConfigOption.tx_mem =
++ cpu_to_le32((le32_to_cpu(mmt->PoolStart) + TotalRxBlockSize + 0x1f) & ~0x1f);
++ log(L_DEBUG, "rx_mem %08X rx_mem %08X\n",
++ MemoryConfigOption.tx_mem, MemoryConfigOption.rx_mem);
++
++ /* alert the device to our decision */
++ if (OK != acx_s_configure(adev, &MemoryConfigOption, ACX1xx_IE_MEMORY_CONFIG_OPTIONS)) {
++ goto bad;
++ }
++
++ /* and tell the device to kick it into gear */
++ if (OK != acx_s_issue_cmd(adev, ACX100_CMD_INIT_MEMORY, NULL, 0)) {
++ goto bad;
++ }
++#ifdef ACX_MEM
++ /*
++ * slave memory interface has to manage the transmit pools for the ACX,
++ * so it needs to know what we chose here.
++ */
++ adev->acx_txbuf_start = MemoryConfigOption.tx_mem;
++ adev->acx_txbuf_numblocks = MemoryConfigOption.TxBlockNum;
++#endif
++
++ FN_EXIT1(OK);
++ return OK;
++bad:
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++** acx100_s_create_dma_regions
++**
++** Note that this fn messes up heavily with hardware, but we cannot
++** lock it (we need to sleep). Not a problem since IRQs can't happen
++*/
++static int
++acx100_s_create_dma_regions(acx_device_t *adev)
++{
++ acx100_ie_queueconfig_t queueconf;
++ acx_ie_memmap_t memmap;
++ int res = NOT_OK;
++ u32 tx_queue_start, rx_queue_start;
++
++ FN_ENTER;
++
++ /* read out the acx100 physical start address for the queues */
++ if (OK != acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
++ goto fail;
++ }
++
++ tx_queue_start = le32_to_cpu(memmap.QueueStart);
++ rx_queue_start = tx_queue_start + TX_CNT * sizeof(txdesc_t);
++
++ log(L_DEBUG, "initializing Queue Indicator\n");
++
++ memset(&queueconf, 0, sizeof(queueconf));
++
++ /* Not needed for PCI or slave memory, so we can avoid setting them altogether */
++ if (IS_USB(adev)) {
++ queueconf.NumTxDesc = USB_TX_CNT;
++ queueconf.NumRxDesc = USB_RX_CNT;
++ }
++
++ /* calculate size of queues */
++ queueconf.AreaSize = cpu_to_le32(
++ TX_CNT * sizeof(txdesc_t) +
++ RX_CNT * sizeof(rxdesc_t) + 8
++ );
++ queueconf.NumTxQueues = 1; /* number of tx queues */
++ /* sets the beginning of the tx descriptor queue */
++ queueconf.TxQueueStart = memmap.QueueStart;
++ /* done by memset: queueconf.TxQueuePri = 0; */
++ queueconf.RxQueueStart = cpu_to_le32(rx_queue_start);
++ queueconf.QueueOptions = 1; /* auto reset descriptor */
++ /* sets the end of the rx descriptor queue */
++ queueconf.QueueEnd = cpu_to_le32(
++ rx_queue_start + RX_CNT * sizeof(rxdesc_t)
++ );
++ /* sets the beginning of the next queue */
++ queueconf.HostQueueEnd = cpu_to_le32(le32_to_cpu(queueconf.QueueEnd) + 8);
++ if (OK != acx_s_configure(adev, &queueconf, ACX1xx_IE_QUEUE_CONFIG)) {
++ goto fail;
++ }
++
++#if defined (ACX_MEM)
++ /* sets the beginning of the rx descriptor queue, after the tx descrs */
++ adev->acx_queue_indicator =
++ (queueindicator_t *) le32_to_cpu (queueconf.QueueEnd);
++ if (OK != acxmem_s_create_hostdesc_queues(adev))
++ goto fail;
++
++ acxmem_create_desc_queues(adev, tx_queue_start, rx_queue_start);
++#else
++ if (IS_PCI(adev)) {
++ /* sets the beginning of the rx descriptor queue, after the tx descrs */
++ if (OK != acxpci_s_create_hostdesc_queues(adev))
++ goto fail;
++ acxpci_create_desc_queues(adev, tx_queue_start, rx_queue_start);
++ }
++#endif
++
++ if (OK != acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
++ goto fail;
++ }
++
++ /*
++ * Have to make sure we skip past the Queue Indicator (QueueEnd) and Host Queue Indicator
++ * maps, each of which are 8 bytes and follow immediately after the transmit and
++ * receive queues.
++ */
++ memmap.PoolStart = cpu_to_le32(
++ (le32_to_cpu(memmap.QueueEnd) + 4 + 0x1f) & ~0x1f
++ );
++
++ if (OK != acx_s_configure(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
++ goto fail;
++ }
++
++ if (OK != acx100_s_init_memory_pools(adev, &memmap)) {
++ goto fail;
++ }
++
++ res = OK;
++ goto end;
++
++fail:
++ acx_s_msleep(1000); /* ? */
++#if defined (ACX_MEM)
++ acxmem_free_desc_queues(adev);
++#else
++ if (IS_PCI(adev))
++ acxpci_free_desc_queues(adev);
++#endif
++end:
++ FN_EXIT1(res);
++ return res;
++}
++
++
++/***********************************************************************
++** acx111_s_create_dma_regions
++**
++** Note that this fn messes heavily with hardware, but we cannot
++** lock it (we need to sleep). Not a problem since IRQs can't happen
++*/
++#define ACX111_PERCENT(percent) ((percent)/5)
++
++static int
++acx111_s_create_dma_regions(acx_device_t *adev)
++{
++ struct acx111_ie_memoryconfig memconf;
++ struct acx111_ie_queueconfig queueconf;
++ u32 tx_queue_start, rx_queue_start;
++
++ FN_ENTER;
++
++ /* Calculate memory positions and queue sizes */
++
++ /* Set up our host descriptor pool + data pool */
++#if defined (ACX_MEM)
++ if (OK != acxmem_s_create_hostdesc_queues(adev))
++ goto fail;
++#else
++ if (IS_PCI(adev)) {
++ if (OK != acxpci_s_create_hostdesc_queues(adev))
++ goto fail;
++ }
++#endif
++
++ memset(&memconf, 0, sizeof(memconf));
++ /* the number of STAs (STA contexts) to support
++ ** NB: was set to 1 and everything seemed to work nevertheless... */
++ memconf.no_of_stations = cpu_to_le16(VEC_SIZE(adev->sta_list));
++ /* specify the memory block size. Default is 256 */
++ memconf.memory_block_size = cpu_to_le16(adev->memblocksize);
++ /* let's use 50%/50% for tx/rx (specify percentage, units of 5%) */
++ memconf.tx_rx_memory_block_allocation = ACX111_PERCENT(50);
++ /* set the count of our queues
++ ** NB: struct acx111_ie_memoryconfig shall be modified
++ ** if we ever will switch to more than one rx and/or tx queue */
++ memconf.count_rx_queues = 1;
++ memconf.count_tx_queues = 1;
++ /* 0 == Busmaster Indirect Memory Organization, which is what we want
++ * (using linked host descs with their allocated mem).
++ * 2 == Generic Bus Slave */
++ /* done by memset: memconf.options = 0; */
++ /* let's use 25% for fragmentations and 75% for frame transfers
++ * (specified in units of 5%) */
++ memconf.fragmentation = ACX111_PERCENT(75);
++ /* Rx descriptor queue config */
++ memconf.rx_queue1_count_descs = RX_CNT;
++ memconf.rx_queue1_type = 7; /* must be set to 7 */
++ /* done by memset: memconf.rx_queue1_prio = 0; low prio */
++#if defined (ACX_MEM)
++ memconf.rx_queue1_host_rx_start = cpu2acx(adev->rxhostdesc_startphy);
++#else
++ if (IS_PCI(adev)) {
++ memconf.rx_queue1_host_rx_start = cpu2acx(adev->rxhostdesc_startphy);
++ }
++#endif
++ /* Tx descriptor queue config */
++ memconf.tx_queue1_count_descs = TX_CNT;
++ /* done by memset: memconf.tx_queue1_attributes = 0; lowest priority */
++
++ /* NB1: this looks wrong: (memconf,ACX1xx_IE_QUEUE_CONFIG),
++ ** (queueconf,ACX1xx_IE_MEMORY_CONFIG_OPTIONS) look swapped, eh?
++ ** But it is actually correct wrt IE numbers.
++ ** NB2: sizeof(memconf) == 28 == 0x1c but configure(ACX1xx_IE_QUEUE_CONFIG)
++ ** writes 0x20 bytes (because same IE for acx100 uses struct acx100_ie_queueconfig
++ ** which is 4 bytes larger. what a mess. TODO: clean it up) */
++ if (OK != acx_s_configure(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG)) {
++ goto fail;
++ }
++
++ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
++
++ tx_queue_start = le32_to_cpu(queueconf.tx1_queue_address);
++ rx_queue_start = le32_to_cpu(queueconf.rx1_queue_address);
++
++ log(L_INIT, "dump queue head (from card):\n"
++ "len: %u\n"
++ "tx_memory_block_address: %X\n"
++ "rx_memory_block_address: %X\n"
++ "tx1_queue address: %X\n"
++ "rx1_queue address: %X\n",
++ le16_to_cpu(queueconf.len),
++ le32_to_cpu(queueconf.tx_memory_block_address),
++ le32_to_cpu(queueconf.rx_memory_block_address),
++ tx_queue_start,
++ rx_queue_start);
++
++#if defined (ACX_MEM)
++ acxmem_create_desc_queues(adev, tx_queue_start, rx_queue_start);
++#else
++ if (IS_PCI(adev))
++ acxpci_create_desc_queues(adev, tx_queue_start, rx_queue_start);
++#endif
++
++ FN_EXIT1(OK);
++ return OK;
++fail:
++#if defined (ACX_MEM)
++ acxmem_free_desc_queues(adev);
++#else
++ if (IS_PCI(adev))
++ acxpci_free_desc_queues(adev);
++#endif
++
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++*/
++static void
++acx_s_initialize_rx_config(acx_device_t *adev)
++{
++ struct {
++ u16 id;
++ u16 len;
++ u16 rx_cfg1;
++ u16 rx_cfg2;
++ } ACX_PACKED cfg;
++
++ switch (adev->mode) {
++ case ACX_MODE_OFF:
++ adev->rx_config_1 = (u16) (0
++ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
++ /* | RX_CFG1_FILTER_SSID */
++ /* | RX_CFG1_FILTER_BCAST */
++ /* | RX_CFG1_RCV_MC_ADDR1 */
++ /* | RX_CFG1_RCV_MC_ADDR0 */
++ /* | RX_CFG1_FILTER_ALL_MULTI */
++ /* | RX_CFG1_FILTER_BSSID */
++ /* | RX_CFG1_FILTER_MAC */
++ /* | RX_CFG1_RCV_PROMISCUOUS */
++ /* | RX_CFG1_INCLUDE_FCS */
++ /* | RX_CFG1_INCLUDE_PHY_HDR */
++ );
++ adev->rx_config_2 = (u16) (0
++ /*| RX_CFG2_RCV_ASSOC_REQ */
++ /*| RX_CFG2_RCV_AUTH_FRAMES */
++ /*| RX_CFG2_RCV_BEACON_FRAMES */
++ /*| RX_CFG2_RCV_CONTENTION_FREE */
++ /*| RX_CFG2_RCV_CTRL_FRAMES */
++ /*| RX_CFG2_RCV_DATA_FRAMES */
++ /*| RX_CFG2_RCV_BROKEN_FRAMES */
++ /*| RX_CFG2_RCV_MGMT_FRAMES */
++ /*| RX_CFG2_RCV_PROBE_REQ */
++ /*| RX_CFG2_RCV_PROBE_RESP */
++ /*| RX_CFG2_RCV_ACK_FRAMES */
++ /*| RX_CFG2_RCV_OTHER */
++ );
++ break;
++ case ACX_MODE_MONITOR:
++ adev->rx_config_1 = (u16) (0
++ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
++ /* | RX_CFG1_FILTER_SSID */
++ /* | RX_CFG1_FILTER_BCAST */
++ /* | RX_CFG1_RCV_MC_ADDR1 */
++ /* | RX_CFG1_RCV_MC_ADDR0 */
++ /* | RX_CFG1_FILTER_ALL_MULTI */
++ /* | RX_CFG1_FILTER_BSSID */
++ /* | RX_CFG1_FILTER_MAC */
++ | RX_CFG1_RCV_PROMISCUOUS
++ /* | RX_CFG1_INCLUDE_FCS */
++ /* | RX_CFG1_INCLUDE_PHY_HDR */
++ );
++ adev->rx_config_2 = (u16) (0
++ | RX_CFG2_RCV_ASSOC_REQ
++ | RX_CFG2_RCV_AUTH_FRAMES
++ | RX_CFG2_RCV_BEACON_FRAMES
++ | RX_CFG2_RCV_CONTENTION_FREE
++ | RX_CFG2_RCV_CTRL_FRAMES
++ | RX_CFG2_RCV_DATA_FRAMES
++ | RX_CFG2_RCV_BROKEN_FRAMES
++ | RX_CFG2_RCV_MGMT_FRAMES
++ | RX_CFG2_RCV_PROBE_REQ
++ | RX_CFG2_RCV_PROBE_RESP
++ | RX_CFG2_RCV_ACK_FRAMES
++ | RX_CFG2_RCV_OTHER
++ );
++ break;
++ default:
++ adev->rx_config_1 = (u16) (0
++ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
++ /* | RX_CFG1_FILTER_SSID */
++ /* | RX_CFG1_FILTER_BCAST */
++ /* | RX_CFG1_RCV_MC_ADDR1 */
++ /* | RX_CFG1_RCV_MC_ADDR0 */
++ /* | RX_CFG1_FILTER_ALL_MULTI */
++ /* | RX_CFG1_FILTER_BSSID */
++ | RX_CFG1_FILTER_MAC
++ /* | RX_CFG1_RCV_PROMISCUOUS */
++ /* | RX_CFG1_INCLUDE_FCS */
++ /* | RX_CFG1_INCLUDE_PHY_HDR */
++ );
++ adev->rx_config_2 = (u16) (0
++ | RX_CFG2_RCV_ASSOC_REQ
++ | RX_CFG2_RCV_AUTH_FRAMES
++ | RX_CFG2_RCV_BEACON_FRAMES
++ | RX_CFG2_RCV_CONTENTION_FREE
++ | RX_CFG2_RCV_CTRL_FRAMES
++ | RX_CFG2_RCV_DATA_FRAMES
++ /*| RX_CFG2_RCV_BROKEN_FRAMES */
++ | RX_CFG2_RCV_MGMT_FRAMES
++ | RX_CFG2_RCV_PROBE_REQ
++ | RX_CFG2_RCV_PROBE_RESP
++ /*| RX_CFG2_RCV_ACK_FRAMES */
++ | RX_CFG2_RCV_OTHER
++ );
++ break;
++ }
++ adev->rx_config_1 |= RX_CFG1_INCLUDE_RXBUF_HDR;
++
++ if ((adev->rx_config_1 & RX_CFG1_INCLUDE_PHY_HDR)
++ || (adev->firmware_numver >= 0x02000000))
++ adev->phy_header_len = IS_ACX111(adev) ? 8 : 4;
++ else
++ adev->phy_header_len = 0;
++
++ log(L_INIT, "setting RXconfig to %04X:%04X\n",
++ adev->rx_config_1, adev->rx_config_2);
++ cfg.rx_cfg1 = cpu_to_le16(adev->rx_config_1);
++ cfg.rx_cfg2 = cpu_to_le16(adev->rx_config_2);
++ acx_s_configure(adev, &cfg, ACX1xx_IE_RXCONFIG);
++}
++
++
++/***********************************************************************
++** acx_s_set_defaults
++*/
++void
++acx_s_set_defaults(acx_device_t *adev)
++{
++ unsigned long flags;
++
++ FN_ENTER;
++
++ /* do it before getting settings, prevent bogus channel 0 warning */
++ adev->channel = 1;
++
++ /* query some settings from the card.
++ * NOTE: for some settings, e.g. CCA and ED (ACX100!), an initial
++ * query is REQUIRED, otherwise the card won't work correctly! */
++ adev->get_mask = GETSET_ANTENNA|GETSET_SENSITIVITY|GETSET_STATION_ID|GETSET_REG_DOMAIN;
++ /* Only ACX100 supports ED and CCA */
++ if (IS_ACX100(adev))
++ adev->get_mask |= GETSET_CCA|GETSET_ED_THRESH;
++
++ acx_s_update_card_settings(adev);
++
++ acx_lock(adev, flags);
++
++ /* set our global interrupt mask */
++#if defined (ACX_MEM)
++ acxmem_set_interrupt_mask(adev);
++#else
++ if (IS_PCI(adev))
++ acxpci_set_interrupt_mask(adev);
++#endif
++
++ adev->led_power = 1; /* LED is active on startup */
++ adev->brange_max_quality = 60; /* LED blink max quality is 60 */
++ adev->brange_time_last_state_change = jiffies;
++
++ /* copy the MAC address we just got from the card
++ * into our MAC address used during current 802.11 session */
++ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr);
++ MAC_BCAST(adev->ap);
++
++ adev->essid_len =
++ snprintf(adev->essid, sizeof(adev->essid), "STA%02X%02X%02X",
++ adev->dev_addr[3], adev->dev_addr[4], adev->dev_addr[5]);
++ adev->essid_active = 1;
++
++ /* we have a nick field to waste, so why not abuse it
++ * to announce the driver version? ;-) */
++ strncpy(adev->nick, "acx " ACX_RELEASE, IW_ESSID_MAX_SIZE);
++
++#if defined (ACX_MEM)
++ adev->reg_dom_id = adev->cfgopt_domains.list[0];
++#else
++ if (IS_PCI(adev)) { /* FIXME: this should be made to apply to USB, too! */
++ /* first regulatory domain entry in EEPROM == default reg. domain */
++ adev->reg_dom_id = adev->cfgopt_domains.list[0];
++ }
++#endif
++
++ /* 0xffff would be better, but then we won't get a "scan complete"
++ * interrupt, so our current infrastructure will fail: */
++ adev->scan_count = 1;
++ adev->scan_mode = ACX_SCAN_OPT_ACTIVE;
++ adev->scan_duration = 100;
++ adev->scan_probe_delay = 200;
++ /* reported to break scanning: adev->scan_probe_delay = adev->cfgopt_probe_delay; */
++ adev->scan_rate = ACX_SCAN_RATE_1;
++
++ adev->mode = ACX_MODE_2_STA;
++ adev->auth_alg = WLAN_AUTH_ALG_OPENSYSTEM;
++ adev->listen_interval = 100;
++ adev->beacon_interval = DEFAULT_BEACON_INTERVAL;
++ adev->dtim_interval = DEFAULT_DTIM_INTERVAL;
++
++ adev->msdu_lifetime = DEFAULT_MSDU_LIFETIME;
++
++ adev->rts_threshold = DEFAULT_RTS_THRESHOLD;
++ adev->frag_threshold = 2346;
++
++ /* use standard default values for retry limits */
++ adev->short_retry = 7; /* max. retries for (short) non-RTS packets */
++ adev->long_retry = 4; /* max. retries for long (RTS) packets */
++
++ adev->preamble_mode = 2; /* auto */
++ adev->fallback_threshold = 3;
++ adev->stepup_threshold = 10;
++ adev->rate_bcast = RATE111_1;
++ adev->rate_bcast100 = RATE100_1;
++ adev->rate_basic = RATE111_1 | RATE111_2;
++ adev->rate_auto = 1;
++ if (IS_ACX111(adev)) {
++ adev->rate_oper = RATE111_ALL;
++ } else {
++ adev->rate_oper = RATE111_ACX100_COMPAT;
++ }
++
++ /* Supported Rates element - the rates here are given in units of
++ * 500 kbit/s, plus 0x80 added. See 802.11-1999.pdf item 7.3.2.2 */
++ acx_l_update_ratevector(adev);
++
++ /* set some more defaults */
++ if (IS_ACX111(adev)) {
++ /* 30mW (15dBm) is default, at least in my acx111 card: */
++ adev->tx_level_dbm = 15;
++ } else {
++ /* don't use max. level, since it might be dangerous
++ * (e.g. WRT54G people experience
++ * excessive Tx power damage!) */
++ adev->tx_level_dbm = 18;
++ /*
++ * Lower power for the iPaq hx4700
++ */
++ if (IS_MEM(adev)) {
++ adev->tx_level_dbm = 14;
++ }
++ }
++ /* adev->tx_level_auto = 1; */
++ if (IS_ACX111(adev)) {
++ /* start with sensitivity level 1 out of 3: */
++ adev->sensitivity = 1;
++ }
++
++/* #define ENABLE_POWER_SAVE */
++#ifdef ENABLE_POWER_SAVE
++ adev->ps_wakeup_cfg = PS_CFG_ENABLE | PS_CFG_WAKEUP_ALL_BEAC;
++ adev->ps_listen_interval = 1;
++ adev->ps_options = PS_OPT_ENA_ENHANCED_PS | PS_OPT_TX_PSPOLL | PS_OPT_STILL_RCV_BCASTS;
++ adev->ps_hangover_period = 30;
++ adev->ps_enhanced_transition_time = 0;
++#else
++ adev->ps_wakeup_cfg = 0;
++ adev->ps_listen_interval = 0;
++ adev->ps_options = 0;
++ adev->ps_hangover_period = 0;
++ adev->ps_enhanced_transition_time = 0;
++#endif
++
++ /* These settings will be set in fw on ifup */
++ adev->set_mask = 0
++ | GETSET_RETRY
++ | SET_MSDU_LIFETIME
++ /* configure card to do rate fallback when in auto rate mode */
++ | SET_RATE_FALLBACK
++ | SET_RXCONFIG
++ | GETSET_TXPOWER
++ /* better re-init the antenna value we got above */
++ | GETSET_ANTENNA
++#if POWER_SAVE_80211
++ | GETSET_POWER_80211
++#endif
++ ;
++
++ acx_unlock(adev, flags);
++ acx_lock_unhold(); /* hold time 844814 CPU ticks @2GHz */
++
++ acx_s_initialize_rx_config(adev);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** FIXME: this should be solved in a general way for all radio types
++** by decoding the radio firmware module,
++** since it probably has some standard structure describing how to
++** set the power level of the radio module which it controls.
++** Or maybe not, since the radio module probably has a function interface
++** instead which then manages Tx level programming :-\
++*/
++static int
++acx111_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
++{
++ struct acx111_ie_tx_level tx_level;
++
++ /* my acx111 card has two power levels in its configoptions (== EEPROM):
++ * 1 (30mW) [15dBm]
++ * 2 (10mW) [10dBm]
++ * For now, just assume all other acx111 cards have the same.
++ * FIXME: Ideally we would query it here, but we first need a
++ * standard way to query individual configoptions easily.
++ * Well, now we have proper cfgopt txpower variables, but this still
++ * hasn't been done yet, since it also requires dBm <-> mW conversion here... */
++ if (level_dbm <= 12) {
++ tx_level.level = 2; /* 10 dBm */
++ adev->tx_level_dbm = 10;
++ } else {
++ tx_level.level = 1; /* 15 dBm */
++ adev->tx_level_dbm = 15;
++ }
++ if (level_dbm != adev->tx_level_dbm)
++ log(L_INIT, "acx111 firmware has specific "
++ "power levels only: adjusted %d dBm to %d dBm!\n",
++ level_dbm, adev->tx_level_dbm);
++
++ return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
++}
++
++static int
++acx_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
++{
++ if (IS_ACX111(adev)) {
++ return acx111_s_set_tx_level(adev, level_dbm);
++ }
++#if defined (ACX_MEM)
++ return acx100mem_s_set_tx_level(adev, level_dbm);
++#else
++ if (IS_PCI(adev)) {
++ return acx100pci_s_set_tx_level(adev, level_dbm);
++ }
++#endif
++ return OK;
++}
++
++
++/***********************************************************************
++*/
++#ifdef UNUSED
++/* Returns the current tx level (ACX111) */
++static u8
++acx111_s_get_tx_level(acx_device_t *adev)
++{
++ struct acx111_ie_tx_level tx_level;
++
++ tx_level.level = 0;
++ acx_s_interrogate(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
++ return tx_level.level;
++}
++#endif
++
++
++/***********************************************************************
++** acx_l_rxmonitor
++** Called from IRQ context only
++*/
++static void
++acx_l_rxmonitor(acx_device_t *adev, const rxbuffer_t *rxbuf)
++{
++ wlansniffrm_t *msg;
++ struct sk_buff *skb;
++ void *datap;
++ unsigned int skb_len;
++ int payload_offset;
++
++ FN_ENTER;
++
++ /* we are in big luck: the acx100 doesn't modify any of the fields */
++ /* in the 802.11 frame. just pass this packet into the PF_PACKET */
++ /* subsystem. yeah. */
++ payload_offset = ((u8*)acx_get_wlan_hdr(adev, rxbuf) - (u8*)rxbuf);
++ skb_len = RXBUF_BYTES_USED(rxbuf) - payload_offset;
++
++ /* sanity check */
++ if (unlikely(skb_len > WLAN_A4FR_MAXLEN_WEP)) {
++ printk("%s: monitor mode panic: oversized frame!\n",
++ adev->ndev->name);
++ goto end;
++ }
++
++ if (adev->ndev->type == ARPHRD_IEEE80211_PRISM)
++ skb_len += sizeof(*msg);
++
++ /* allocate skb */
++ skb = dev_alloc_skb(skb_len);
++ if (unlikely(!skb)) {
++ printk("%s: no memory for skb (%u bytes)\n",
++ adev->ndev->name, skb_len);
++ goto end;
++ }
++
++ skb_put(skb, skb_len);
++
++ if (adev->ndev->type == ARPHRD_IEEE80211) {
++ /* when in raw 802.11 mode, just copy frame as-is */
++ datap = skb->data;
++ } else if (adev->ndev->type == ARPHRD_IEEE80211_PRISM) {
++ /* emulate prism header */
++ msg = (wlansniffrm_t*)skb->data;
++ datap = msg + 1;
++
++ msg->msgcode = WLANSNIFFFRM;
++ msg->msglen = sizeof(*msg);
++ strncpy(msg->devname, adev->ndev->name, sizeof(msg->devname)-1);
++ msg->devname[sizeof(msg->devname)-1] = '\0';
++
++ msg->hosttime.did = WLANSNIFFFRM_hosttime;
++ msg->hosttime.status = WLANITEM_STATUS_data_ok;
++ msg->hosttime.len = 4;
++ msg->hosttime.data = jiffies;
++
++ msg->mactime.did = WLANSNIFFFRM_mactime;
++ msg->mactime.status = WLANITEM_STATUS_data_ok;
++ msg->mactime.len = 4;
++ msg->mactime.data = rxbuf->time;
++
++ msg->channel.did = WLANSNIFFFRM_channel;
++ msg->channel.status = WLANITEM_STATUS_data_ok;
++ msg->channel.len = 4;
++ msg->channel.data = adev->channel;
++
++ msg->rssi.did = WLANSNIFFFRM_rssi;
++ msg->rssi.status = WLANITEM_STATUS_no_value;
++ msg->rssi.len = 4;
++ msg->rssi.data = 0;
++
++ msg->sq.did = WLANSNIFFFRM_sq;
++ msg->sq.status = WLANITEM_STATUS_no_value;
++ msg->sq.len = 4;
++ msg->sq.data = 0;
++
++ msg->signal.did = WLANSNIFFFRM_signal;
++ msg->signal.status = WLANITEM_STATUS_data_ok;
++ msg->signal.len = 4;
++ msg->signal.data = rxbuf->phy_snr;
++
++ msg->noise.did = WLANSNIFFFRM_noise;
++ msg->noise.status = WLANITEM_STATUS_data_ok;
++ msg->noise.len = 4;
++ msg->noise.data = rxbuf->phy_level;
++
++ msg->rate.did = WLANSNIFFFRM_rate;
++ msg->rate.status = WLANITEM_STATUS_data_ok;
++ msg->rate.len = 4;
++ msg->rate.data = rxbuf->phy_plcp_signal / 5;
++
++ msg->istx.did = WLANSNIFFFRM_istx;
++ msg->istx.status = WLANITEM_STATUS_data_ok;
++ msg->istx.len = 4;
++ msg->istx.data = 0; /* tx=0: it's not a tx packet */
++
++ skb_len -= sizeof(*msg);
++
++ msg->frmlen.did = WLANSNIFFFRM_signal;
++ msg->frmlen.status = WLANITEM_STATUS_data_ok;
++ msg->frmlen.len = 4;
++ msg->frmlen.data = skb_len;
++ } else {
++ printk("acx: unsupported netdev type %d!\n", adev->ndev->type);
++ dev_kfree_skb(skb);
++ return;
++ }
++
++ /* sanity check (keep it here) */
++ if (unlikely((int)skb_len < 0)) {
++ printk("acx: skb_len=%d. Driver bug, please report\n", (int)skb_len);
++ dev_kfree_skb(skb);
++ return;
++ }
++ memcpy(datap, ((unsigned char*)rxbuf)+payload_offset, skb_len);
++
++ skb->dev = adev->ndev;
++ skb->dev->last_rx = jiffies;
++
++ skb_reset_mac_header(skb);
++ skb->ip_summed = CHECKSUM_NONE;
++ skb->pkt_type = PACKET_OTHERHOST;
++ skb->protocol = htons(ETH_P_80211_RAW);
++ netif_rx(skb);
++
++ adev->stats.rx_packets++;
++ adev->stats.rx_bytes += skb->len;
++
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_l_rx_ieee802_11_frame
++**
++** Called from IRQ context only
++*/
++
++/* All these contortions are for saner dup logging
++**
++** We want: (a) to know about excessive dups
++** (b) to not spam kernel log about occasional dups
++**
++** 1/64 threshold was chosen by running "ping -A"
++** It gave "rx: 59 DUPs in 2878 packets" only with 4 parallel
++** "ping -A" streams running. */
++/* 2005-10-11: bumped up to 1/8
++** subtract a $smallint from dup_count in order to
++** avoid "2 DUPs in 19 packets" messages */
++static inline int
++acx_l_handle_dup(acx_device_t *adev, u16 seq)
++{
++ if (adev->dup_count) {
++ adev->nondup_count++;
++ if (time_after(jiffies, adev->dup_msg_expiry)) {
++ /* Log only if more than 1 dup in 64 packets */
++ if (adev->nondup_count/8 < adev->dup_count-5) {
++ printk(KERN_INFO "%s: rx: %d DUPs in "
++ "%d packets received in 10 secs\n",
++ adev->ndev->name,
++ adev->dup_count,
++ adev->nondup_count);
++ }
++ adev->dup_count = 0;
++ adev->nondup_count = 0;
++ }
++ }
++ if (unlikely(seq == adev->last_seq_ctrl)) {
++ if (!adev->dup_count++)
++ adev->dup_msg_expiry = jiffies + 10*HZ;
++ adev->stats.rx_errors++;
++ return 1; /* a dup */
++ }
++ adev->last_seq_ctrl = seq;
++ return 0;
++}
++
++static int
++acx_l_rx_ieee802_11_frame(acx_device_t *adev, rxbuffer_t *rxbuf)
++{
++ unsigned int ftype, fstype;
++ const wlan_hdr_t *hdr;
++ int result = NOT_OK;
++
++ FN_ENTER;
++
++ hdr = acx_get_wlan_hdr(adev, rxbuf);
++
++ /* see IEEE 802.11-1999.pdf chapter 7 "MAC frame formats" */
++ if (unlikely((hdr->fc & WF_FC_PVERi) != 0)) {
++ printk_ratelimited(KERN_INFO "rx: unsupported 802.11 protocol\n");
++ goto end;
++ }
++
++ ftype = hdr->fc & WF_FC_FTYPEi;
++ fstype = hdr->fc & WF_FC_FSTYPEi;
++
++ switch (ftype) {
++ /* check data frames first, for speed */
++ case WF_FTYPE_DATAi:
++ switch (fstype) {
++ case WF_FSTYPE_DATAONLYi:
++ if (acx_l_handle_dup(adev, hdr->seq))
++ break; /* a dup, simply discard it */
++
++ /* TODO:
++ if (WF_FC_FROMTODSi == (hdr->fc & WF_FC_FROMTODSi)) {
++ result = acx_l_process_data_frame_wds(adev, rxbuf);
++ break;
++ }
++ */
++
++ switch (adev->mode) {
++ case ACX_MODE_3_AP:
++ result = acx_l_process_data_frame_master(adev, rxbuf);
++ break;
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_2_STA:
++ result = acx_l_process_data_frame_client(adev, rxbuf);
++ break;
++ }
++ case WF_FSTYPE_DATA_CFACKi:
++ case WF_FSTYPE_DATA_CFPOLLi:
++ case WF_FSTYPE_DATA_CFACK_CFPOLLi:
++ case WF_FSTYPE_CFPOLLi:
++ case WF_FSTYPE_CFACK_CFPOLLi:
++ /* see above.
++ acx_process_class_frame(adev, rxbuf, 3); */
++ break;
++ case WF_FSTYPE_NULLi:
++ /* acx_l_process_NULL_frame(adev, rxbuf, 3); */
++ break;
++ /* FIXME: same here, see above */
++ case WF_FSTYPE_CFACKi:
++ default:
++ break;
++ }
++ break;
++ case WF_FTYPE_MGMTi:
++ result = acx_l_process_mgmt_frame(adev, rxbuf);
++ break;
++ case WF_FTYPE_CTLi:
++ if (fstype == WF_FSTYPE_PSPOLLi)
++ result = OK;
++ /* this call is irrelevant, since
++ * acx_process_class_frame is a stub, so return
++ * immediately instead.
++ * return acx_process_class_frame(adev, rxbuf, 3); */
++ break;
++ default:
++ break;
++ }
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_l_process_rxbuf
++**
++** NB: used by USB code also
++*/
++void
++acx_l_process_rxbuf(acx_device_t *adev, rxbuffer_t *rxbuf)
++{
++ struct wlan_hdr *hdr;
++ unsigned int qual;
++ int buf_len;
++ u16 fc;
++
++ hdr = acx_get_wlan_hdr(adev, rxbuf);
++ fc = le16_to_cpu(hdr->fc);
++ /* length of frame from control field to first byte of FCS */
++ buf_len = RXBUF_BYTES_RCVD(adev, rxbuf);
++
++ if ( ((WF_FC_FSTYPE & fc) != WF_FSTYPE_BEACON)
++ || (acx_debug & L_XFER_BEACON)
++ ) {
++ log(L_XFER|L_DATA, "rx: %s "
++ "time:%u len:%u signal:%u SNR:%u macstat:%02X "
++ "phystat:%02X phyrate:%u status:%u\n",
++ acx_get_packet_type_string(fc),
++ le32_to_cpu(rxbuf->time),
++ buf_len,
++ acx_signal_to_winlevel(rxbuf->phy_level),
++ acx_signal_to_winlevel(rxbuf->phy_snr),
++ rxbuf->mac_status,
++ rxbuf->phy_stat_baseband,
++ rxbuf->phy_plcp_signal,
++ adev->status);
++ }
++
++ if (unlikely(acx_debug & L_DATA)) {
++ printk("rx: 802.11 buf[%u]: ", buf_len);
++ acx_dump_bytes(hdr, buf_len);
++ }
++
++ /* FIXME: should check for Rx errors (rxbuf->mac_status?
++ * discard broken packets - but NOT for monitor!)
++ * and update Rx packet statistics here */
++
++ if (unlikely(adev->mode == ACX_MODE_MONITOR)) {
++ acx_l_rxmonitor(adev, rxbuf);
++ } else if (likely(buf_len >= WLAN_HDR_A3_LEN)) {
++ acx_l_rx_ieee802_11_frame(adev, rxbuf);
++ } else {
++ log(L_DEBUG|L_XFER|L_DATA,
++ "rx: NOT receiving packet (%s): "
++ "size too small (%u)\n",
++ acx_get_packet_type_string(fc),
++ buf_len);
++ }
++
++ /* Now check Rx quality level, AFTER processing packet.
++ * I tried to figure out how to map these levels to dBm
++ * values, but for the life of me I really didn't
++ * manage to get it. Either these values are not meant to
++ * be expressed in dBm, or it's some pretty complicated
++ * calculation. */
++
++#ifdef FROM_SCAN_SOURCE_ONLY
++ /* only consider packets originating from the MAC
++ * address of the device that's managing our BSSID.
++ * Disable it for now, since it removes information (levels
++ * from different peers) and slows the Rx path. */
++ if (adev->ap_client
++ && mac_is_equal(hdr->a2, adev->ap_client->address)) {
++#endif
++ adev->wstats.qual.level = acx_signal_to_winlevel(rxbuf->phy_level);
++ adev->wstats.qual.noise = acx_signal_to_winlevel(rxbuf->phy_snr);
++#ifndef OLD_QUALITY
++ qual = acx_signal_determine_quality(adev->wstats.qual.level,
++ adev->wstats.qual.noise);
++#else
++ qual = (adev->wstats.qual.noise <= 100) ?
++ 100 - adev->wstats.qual.noise : 0;
++#endif
++ adev->wstats.qual.qual = qual;
++ adev->wstats.qual.updated = 7; /* all 3 indicators updated */
++#ifdef FROM_SCAN_SOURCE_ONLY
++ }
++#endif
++}
++
++
++/***********************************************************************
++** acx_l_handle_txrate_auto
++**
++** Theory of operation:
++** client->rate_cap is a bitmask of rates client is capable of.
++** client->rate_cfg is a bitmask of allowed (configured) rates.
++** It is set as a result of iwconfig rate N [auto]
++** or iwpriv set_rates "N,N,N N,N,N" commands.
++** It can be fixed (e.g. 0x0080 == 18Mbit only),
++** auto (0x00ff == 18Mbit or any lower value),
++** and code handles any bitmask (0x1081 == try 54Mbit,18Mbit,1Mbit _only_).
++**
++** client->rate_cur is a value for rate111 field in tx descriptor.
++** It is always set to txrate_cfg sans zero or more most significant
++** bits. This routine handles selection of new rate_cur value depending on
++** outcome of last tx event.
++**
++** client->rate_100 is a precalculated rate value for acx100
++** (we can do without it, but will need to calculate it on each tx).
++**
++** You cannot configure mixed usage of 5.5 and/or 11Mbit rate
++** with PBCC and CCK modulation. Either both at CCK or both at PBCC.
++** In theory you can implement it, but so far it is considered not worth doing.
++**
++** 22Mbit, of course, is PBCC always. */
++
++/* maps acx100 tx descr rate field to acx111 one */
++static u16
++rate100to111(u8 r)
++{
++ switch (r) {
++ case RATE100_1: return RATE111_1;
++ case RATE100_2: return RATE111_2;
++ case RATE100_5:
++ case (RATE100_5 | RATE100_PBCC511): return RATE111_5;
++ case RATE100_11:
++ case (RATE100_11 | RATE100_PBCC511): return RATE111_11;
++ case RATE100_22: return RATE111_22;
++ default:
++ printk("acx: unexpected acx100 txrate: %u! "
++ "Please report\n", r);
++ return RATE111_1;
++ }
++}
++
++
++void
++acx_l_handle_txrate_auto(acx_device_t *adev, struct client *txc,
++ u16 cur, u8 rate100, u16 rate111,
++ u8 error, int pkts_to_ignore)
++{
++ u16 sent_rate;
++ int slower_rate_was_used;
++
++ /* vda: hmm. current code will do this:
++ ** 1. send packets at 11 Mbit, stepup++
++ ** 2. will try to send at 22Mbit. hardware will see no ACK,
++ ** retries at 11Mbit, success. code notes that used rate
++ ** is lower. stepup = 0, fallback++
++ ** 3. repeat step 2 fallback_count times. Fall back to
++ ** 11Mbit. go to step 1.
++ ** If stepup_count is large (say, 16) and fallback_count
++ ** is small (3), this wouldn't be too bad wrt throughput */
++
++ if (unlikely(!cur)) {
++ printk("acx: BUG! ratemask is empty\n");
++ return; /* or else we may lock up the box */
++ }
++
++ /* do some preparations, i.e. calculate the one rate that was
++ * used to send this packet */
++ if (IS_ACX111(adev)) {
++ sent_rate = 1 << highest_bit(rate111 & RATE111_ALL);
++ } else {
++ sent_rate = rate100to111(rate100);
++ }
++ /* sent_rate has only one bit set now, corresponding to tx rate
++ * which was used by hardware to tx this particular packet */
++
++ /* now do the actual auto rate management */
++ log(L_XFER, "tx: %sclient=%p/"MACSTR" used=%04X cur=%04X cfg=%04X "
++ "__=%u/%u ^^=%u/%u\n",
++ (txc->ignore_count > 0) ? "[IGN] " : "",
++ txc, MAC(txc->address), sent_rate, cur, txc->rate_cfg,
++ txc->fallback_count, adev->fallback_threshold,
++ txc->stepup_count, adev->stepup_threshold
++ );
++
++ /* we need to ignore old packets already in the tx queue since
++ * they use older rate bytes configured before our last rate change,
++ * otherwise our mechanism will get confused by interpreting old data.
++ * Do it after logging above */
++ if (txc->ignore_count) {
++ txc->ignore_count--;
++ return;
++ }
++
++ /* true only if the only nonzero bit in sent_rate is
++ ** less significant than highest nonzero bit in cur */
++ slower_rate_was_used = ( cur > ((sent_rate<<1)-1) );
++
++ if (slower_rate_was_used || error) {
++ txc->stepup_count = 0;
++ if (++txc->fallback_count <= adev->fallback_threshold)
++ return;
++ txc->fallback_count = 0;
++
++ /* clear highest 1 bit in cur */
++ sent_rate = RATE111_54;
++ while (!(cur & sent_rate)) sent_rate >>= 1;
++ CLEAR_BIT(cur, sent_rate);
++ if (!cur) /* we can't disable all rates! */
++ cur = sent_rate;
++ log(L_XFER, "tx: falling back to ratemask %04X\n", cur);
++
++ } else { /* there was neither lower rate nor error */
++ txc->fallback_count = 0;
++ if (++txc->stepup_count <= adev->stepup_threshold)
++ return;
++ txc->stepup_count = 0;
++
++ /* Sanitize. Sort of not needed, but I dont trust hw that much...
++ ** what if it can report bogus tx rates sometimes? */
++ while (!(cur & sent_rate)) sent_rate >>= 1;
++
++ /* try to find a higher sent_rate that isn't yet in our
++ * current set, but is an allowed cfg */
++ while (1) {
++ sent_rate <<= 1;
++ if (sent_rate > txc->rate_cfg)
++ /* no higher rates allowed by config */
++ return;
++ if (!(cur & sent_rate) && (txc->rate_cfg & sent_rate))
++ /* found */
++ break;
++ /* not found, try higher one */
++ }
++ SET_BIT(cur, sent_rate);
++ log(L_XFER, "tx: stepping up to ratemask %04X\n", cur);
++ }
++
++ txc->rate_cur = cur;
++ txc->ignore_count = pkts_to_ignore;
++ /* calculate acx100 style rate byte if needed */
++ if (IS_ACX100(adev)) {
++ txc->rate_100 = acx_bitpos2rate100[highest_bit(cur)];
++ }
++}
++
++
++/***********************************************************************
++** acx_i_start_xmit
++**
++** Called by network core. Can be called outside of process context.
++*/
++int
++acx_i_start_xmit(struct sk_buff *skb, struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ tx_t *tx;
++ void *txbuf;
++ unsigned long flags;
++ int txresult = NOT_OK;
++ int len;
++
++ FN_ENTER;
++
++ if (unlikely(!skb)) {
++ /* indicate success */
++ txresult = OK;
++ goto end_no_unlock;
++ }
++ if (unlikely(!adev)) {
++ goto end_no_unlock;
++ }
++
++ acx_lock(adev, flags);
++
++ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) {
++ goto end;
++ }
++ if (unlikely(adev->mode == ACX_MODE_OFF)) {
++ goto end;
++ }
++ if (unlikely(acx_queue_stopped(ndev))) {
++ log(L_DEBUG, "%s: called when queue stopped\n", __func__);
++ goto end;
++ }
++ if (unlikely(ACX_STATUS_4_ASSOCIATED != adev->status)) {
++ log(L_XFER, "trying to xmit, but not associated yet: "
++ "aborting...\n");
++ /* silently drop the packet, since we're not connected yet */
++ txresult = OK;
++ /* ...but indicate an error nevertheless */
++ adev->stats.tx_errors++;
++ goto end;
++ }
++
++ tx = acx_l_alloc_tx(adev);
++ if (unlikely(!tx)) {
++#ifndef ACX_MEM
++ /*
++ * generic slave interface has to make do with the tiny amount, around
++ * 7k, of transmit buffer space on the ACX itself. It is likely this will
++ * frequently be full.
++ */
++ printk_ratelimited("%s: start_xmit: txdesc ring is full, "
++ "dropping tx\n", ndev->name);
++#endif
++ txresult = NOT_OK;
++ goto end;
++ }
++
++ txbuf = acx_l_get_txbuf(adev, tx);
++ if (unlikely(!txbuf)) {
++ /* Card was removed */
++ txresult = NOT_OK;
++ acx_l_dealloc_tx(adev, tx);
++ goto end;
++ }
++ len = acx_ether_to_txbuf(adev, txbuf, skb);
++ if (unlikely(len < 0)) {
++ /* Error in packet conversion */
++ txresult = NOT_OK;
++ acx_l_dealloc_tx(adev, tx);
++ goto end;
++ }
++ acx_l_tx_data(adev, tx, len);
++ ndev->trans_start = jiffies;
++
++ txresult = OK;
++ adev->stats.tx_packets++;
++ adev->stats.tx_bytes += skb->len;
++
++end:
++ acx_unlock(adev, flags);
++
++end_no_unlock:
++ if ((txresult == OK) && skb)
++ dev_kfree_skb_any(skb);
++
++ FN_EXIT1(txresult);
++ return txresult;
++}
++
++
++/***********************************************************************
++** acx_l_update_ratevector
++**
++** Updates adev->rate_supported[_len] according to rate_{basic,oper}
++*/
++const u8
++acx_bitpos2ratebyte[] = {
++ DOT11RATEBYTE_1,
++ DOT11RATEBYTE_2,
++ DOT11RATEBYTE_5_5,
++ DOT11RATEBYTE_6_G,
++ DOT11RATEBYTE_9_G,
++ DOT11RATEBYTE_11,
++ DOT11RATEBYTE_12_G,
++ DOT11RATEBYTE_18_G,
++ DOT11RATEBYTE_22,
++ DOT11RATEBYTE_24_G,
++ DOT11RATEBYTE_36_G,
++ DOT11RATEBYTE_48_G,
++ DOT11RATEBYTE_54_G,
++};
++
++void
++acx_l_update_ratevector(acx_device_t *adev)
++{
++ u16 bcfg = adev->rate_basic;
++ u16 ocfg = adev->rate_oper;
++ u8 *supp = adev->rate_supported;
++ const u8 *dot11 = acx_bitpos2ratebyte;
++
++ FN_ENTER;
++
++ while (ocfg) {
++ if (ocfg & 1) {
++ *supp = *dot11;
++ if (bcfg & 1) {
++ *supp |= 0x80;
++ }
++ supp++;
++ }
++ dot11++;
++ ocfg >>= 1;
++ bcfg >>= 1;
++ }
++ adev->rate_supported_len = supp - adev->rate_supported;
++ if (acx_debug & L_ASSOC) {
++ printk("new ratevector: ");
++ acx_dump_bytes(adev->rate_supported, adev->rate_supported_len);
++ }
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_l_sta_list_init
++*/
++static void
++acx_l_sta_list_init(acx_device_t *adev)
++{
++ FN_ENTER;
++ memset(adev->sta_hash_tab, 0, sizeof(adev->sta_hash_tab));
++ memset(adev->sta_list, 0, sizeof(adev->sta_list));
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_l_sta_list_get_from_hash
++*/
++static inline client_t*
++acx_l_sta_list_get_from_hash(acx_device_t *adev, const u8 *address)
++{
++ return adev->sta_hash_tab[address[5] % VEC_SIZE(adev->sta_hash_tab)];
++}
++
++
++/***********************************************************************
++** acx_l_sta_list_get
++*/
++client_t*
++acx_l_sta_list_get(acx_device_t *adev, const u8 *address)
++{
++ client_t *client;
++ FN_ENTER;
++ client = acx_l_sta_list_get_from_hash(adev, address);
++ while (client) {
++ if (mac_is_equal(address, client->address)) {
++ client->mtime = jiffies;
++ break;
++ }
++ client = client->next;
++ }
++ FN_EXIT0;
++ return client;
++}
++
++
++/***********************************************************************
++** acx_l_sta_list_del
++*/
++void
++acx_l_sta_list_del(acx_device_t *adev, client_t *victim)
++{
++ client_t *client, *next;
++
++ client = acx_l_sta_list_get_from_hash(adev, victim->address);
++ next = client;
++ /* tricky. next = client on first iteration only,
++ ** on all other iters next = client->next */
++ while (next) {
++ if (next == victim) {
++ client->next = victim->next;
++ /* Overkill */
++ memset(victim, 0, sizeof(*victim));
++ break;
++ }
++ client = next;
++ next = client->next;
++ }
++}
++
++
++/***********************************************************************
++** acx_l_sta_list_alloc
++**
++** Never fails - will evict oldest client if needed
++*/
++static client_t*
++acx_l_sta_list_alloc(acx_device_t *adev)
++{
++ int i;
++ unsigned long age, oldest_age;
++ client_t *client, *oldest;
++
++ FN_ENTER;
++
++ oldest = &adev->sta_list[0];
++ oldest_age = 0;
++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
++ client = &adev->sta_list[i];
++
++ if (!client->used) {
++ goto found;
++ } else {
++ age = jiffies - client->mtime;
++ if (oldest_age < age) {
++ oldest_age = age;
++ oldest = client;
++ }
++ }
++ }
++ acx_l_sta_list_del(adev, oldest);
++ client = oldest;
++found:
++ memset(client, 0, sizeof(*client));
++ FN_EXIT0;
++ return client;
++}
++
++
++/***********************************************************************
++** acx_l_sta_list_add
++**
++** Never fails - will evict oldest client if needed
++*/
++/* In case we will reimplement it differently... */
++#define STA_LIST_ADD_CAN_FAIL 0
++
++static client_t*
++acx_l_sta_list_add(acx_device_t *adev, const u8 *address)
++{
++ client_t *client;
++ int index;
++
++ FN_ENTER;
++
++ client = acx_l_sta_list_alloc(adev);
++
++ client->mtime = jiffies;
++ MAC_COPY(client->address, address);
++ client->used = CLIENT_EXIST_1;
++ client->auth_alg = WLAN_AUTH_ALG_SHAREDKEY;
++ client->auth_step = 1;
++ /* give some tentative peer rate values
++ ** (needed because peer may do auth without probing us first,
++ ** thus we'll have no idea of peer's ratevector yet).
++ ** Will be overwritten by scanning or assoc code */
++ client->rate_cap = adev->rate_basic;
++ client->rate_cfg = adev->rate_basic;
++ client->rate_cur = 1 << lowest_bit(adev->rate_basic);
++
++ index = address[5] % VEC_SIZE(adev->sta_hash_tab);
++ client->next = adev->sta_hash_tab[index];
++ adev->sta_hash_tab[index] = client;
++
++ acxlog_mac(L_ASSOC, "sta_list_add: sta=", address, "\n");
++
++ FN_EXIT0;
++ return client;
++}
++
++
++/***********************************************************************
++** acx_l_sta_list_get_or_add
++**
++** Never fails - will evict oldest client if needed
++*/
++static client_t*
++acx_l_sta_list_get_or_add(acx_device_t *adev, const u8 *address)
++{
++ client_t *client = acx_l_sta_list_get(adev, address);
++ if (!client)
++ client = acx_l_sta_list_add(adev, address);
++ return client;
++}
++
++
++/***********************************************************************
++** acx_set_status
++**
++** This function is called in many atomic regions, must not sleep
++**
++** This function does not need locking UNLESS you call it
++** as acx_set_status(ACX_STATUS_4_ASSOCIATED), bacause this can
++** wake queue. This can race with stop_queue elsewhere.
++** See acx_stop_queue comment. */
++void
++acx_set_status(acx_device_t *adev, u16 new_status)
++{
++#define QUEUE_OPEN_AFTER_ASSOC 1 /* this really seems to be needed now */
++ u16 old_status = adev->status;
++
++ FN_ENTER;
++
++ log(L_ASSOC, "%s(%d):%s\n",
++ __func__, new_status, acx_get_status_name(new_status));
++
++ /* wireless_send_event never sleeps */
++ if (ACX_STATUS_4_ASSOCIATED == new_status) {
++ union iwreq_data wrqu;
++
++ wrqu.data.length = 0;
++ wrqu.data.flags = 0;
++ wireless_send_event(adev->ndev, SIOCGIWSCAN, &wrqu, NULL);
++
++ wrqu.data.length = 0;
++ wrqu.data.flags = 0;
++ MAC_COPY(wrqu.ap_addr.sa_data, adev->bssid);
++ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
++ wireless_send_event(adev->ndev, SIOCGIWAP, &wrqu, NULL);
++ } else {
++ union iwreq_data wrqu;
++
++ /* send event with empty BSSID to indicate we're not associated */
++ MAC_ZERO(wrqu.ap_addr.sa_data);
++ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
++ wireless_send_event(adev->ndev, SIOCGIWAP, &wrqu, NULL);
++ }
++
++ adev->status = new_status;
++
++ switch (new_status) {
++ case ACX_STATUS_1_SCANNING:
++ adev->scan_retries = 0;
++ /* 1.0 s initial scan time */
++ acx_set_timer(adev, 1000000);
++ break;
++ case ACX_STATUS_2_WAIT_AUTH:
++ case ACX_STATUS_3_AUTHENTICATED:
++ adev->auth_or_assoc_retries = 0;
++ acx_set_timer(adev, 1500000); /* 1.5 s */
++ break;
++ }
++
++#if QUEUE_OPEN_AFTER_ASSOC
++ if (new_status == ACX_STATUS_4_ASSOCIATED) {
++ if (old_status < ACX_STATUS_4_ASSOCIATED) {
++ /* ah, we're newly associated now,
++ * so let's indicate carrier */
++ acx_carrier_on(adev->ndev, "after association");
++ acx_wake_queue(adev->ndev, "after association");
++ }
++ } else {
++ /* not associated any more, so let's kill carrier */
++ if (old_status >= ACX_STATUS_4_ASSOCIATED) {
++ acx_carrier_off(adev->ndev, "after losing association");
++ acx_stop_queue(adev->ndev, "after losing association");
++ }
++ }
++#endif
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_i_timer
++**
++** Fires up periodically. Used to kick scan/auth/assoc if something goes wrong
++*/
++void
++acx_i_timer(unsigned long address)
++{
++ unsigned long flags;
++ acx_device_t *adev = (acx_device_t*)address;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++
++ log(L_DEBUG|L_ASSOC, "%s: adev->status=%d (%s)\n",
++ __func__, adev->status, acx_get_status_name(adev->status));
++
++ switch (adev->status) {
++ case ACX_STATUS_1_SCANNING:
++ /* was set to 0 by set_status() */
++ if (++adev->scan_retries < 7) {
++ acx_set_timer(adev, 1000000);
++ /* used to interrogate for scan status.
++ ** We rely on SCAN_COMPLETE IRQ instead */
++ log(L_ASSOC, "continuing scan (%d sec)\n",
++ adev->scan_retries);
++ } else {
++ log(L_ASSOC, "stopping scan\n");
++ /* send stop_scan cmd when we leave the interrupt context,
++ * and make a decision what to do next (COMPLETE_SCAN) */
++ acx_schedule_task(adev,
++ ACX_AFTER_IRQ_CMD_STOP_SCAN + ACX_AFTER_IRQ_COMPLETE_SCAN);
++ }
++ break;
++ case ACX_STATUS_2_WAIT_AUTH:
++ /* was set to 0 by set_status() */
++ if (++adev->auth_or_assoc_retries < 10) {
++ log(L_ASSOC, "resend authen1 request (attempt %d)\n",
++ adev->auth_or_assoc_retries + 1);
++ acx_l_transmit_authen1(adev);
++ } else {
++ /* time exceeded: fall back to scanning mode */
++ log(L_ASSOC,
++ "authen1 request reply timeout, giving up\n");
++ /* we are a STA, need to find AP anyhow */
++ acx_set_status(adev, ACX_STATUS_1_SCANNING);
++ acx_schedule_task(adev, ACX_AFTER_IRQ_RESTART_SCAN);
++ }
++ /* used to be 1500000, but some other driver uses 2.5s */
++ acx_set_timer(adev, 2500000);
++ break;
++ case ACX_STATUS_3_AUTHENTICATED:
++ /* was set to 0 by set_status() */
++ if (++adev->auth_or_assoc_retries < 10) {
++ log(L_ASSOC, "resend assoc request (attempt %d)\n",
++ adev->auth_or_assoc_retries + 1);
++ acx_l_transmit_assoc_req(adev);
++ } else {
++ /* time exceeded: give up */
++ log(L_ASSOC,
++ "association request reply timeout, giving up\n");
++ /* we are a STA, need to find AP anyhow */
++ acx_set_status(adev, ACX_STATUS_1_SCANNING);
++ acx_schedule_task(adev, ACX_AFTER_IRQ_RESTART_SCAN);
++ }
++ acx_set_timer(adev, 2500000); /* see above */
++ break;
++ case ACX_STATUS_4_ASSOCIATED:
++ default:
++ break;
++ }
++
++ acx_unlock(adev, flags);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_set_timer
++**
++** Sets the 802.11 state management timer's timeout.
++*/
++void
++acx_set_timer(acx_device_t *adev, int timeout_us)
++{
++ FN_ENTER;
++
++ log(L_DEBUG|L_IRQ, "%s(%u ms)\n", __func__, timeout_us/1000);
++ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
++ printk("attempt to set the timer "
++ "when the card interface is not up!\n");
++ goto end;
++ }
++
++ /* first check if the timer was already initialized, THEN modify it */
++ if (adev->mgmt_timer.function) {
++ mod_timer(&adev->mgmt_timer,
++ jiffies + (timeout_us * HZ / 1000000));
++ }
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_l_transmit_assocresp
++**
++** We are an AP here
++*/
++static const u8
++dot11ratebyte[] = {
++ DOT11RATEBYTE_1,
++ DOT11RATEBYTE_2,
++ DOT11RATEBYTE_5_5,
++ DOT11RATEBYTE_6_G,
++ DOT11RATEBYTE_9_G,
++ DOT11RATEBYTE_11,
++ DOT11RATEBYTE_12_G,
++ DOT11RATEBYTE_18_G,
++ DOT11RATEBYTE_22,
++ DOT11RATEBYTE_24_G,
++ DOT11RATEBYTE_36_G,
++ DOT11RATEBYTE_48_G,
++ DOT11RATEBYTE_54_G,
++};
++
++static inline int
++find_pos(const u8 *p, int size, u8 v)
++{
++ int i;
++ for (i = 0; i < size; i++)
++ if (p[i] == v)
++ return i;
++ /* printk a message about strange byte? */
++ return 0;
++}
++
++static void
++add_bits_to_ratemasks(u8* ratevec, int len, u16* brate, u16* orate)
++{
++ while (len--) {
++ int n = 1 << find_pos(dot11ratebyte,
++ sizeof(dot11ratebyte), *ratevec & 0x7f);
++ if (*ratevec & 0x80)
++ *brate |= n;
++ *orate |= n;
++ ratevec++;
++ }
++}
++
++static int
++acx_l_transmit_assocresp(acx_device_t *adev, const wlan_fr_assocreq_t *req)
++{
++ struct tx *tx;
++ struct wlan_hdr_mgmt *head;
++ struct assocresp_frame_body *body;
++ u8 *p;
++ const u8 *da;
++ /* const u8 *sa; */
++ const u8 *bssid;
++ client_t *clt;
++
++ FN_ENTER;
++
++ /* sa = req->hdr->a1; */
++ da = req->hdr->a2;
++ bssid = req->hdr->a3;
++
++ clt = acx_l_sta_list_get(adev, da);
++ if (!clt)
++ goto ok;
++
++ /* Assoc without auth is a big no-no */
++ /* Let's be liberal: if already assoc'ed STA sends assoc req again,
++ ** we won't be rude */
++ if (clt->used != CLIENT_AUTHENTICATED_2
++ && clt->used != CLIENT_ASSOCIATED_3) {
++ acx_l_transmit_deauthen(adev, da, WLAN_MGMT_REASON_CLASS2_NONAUTH);
++ goto bad;
++ }
++
++ clt->used = CLIENT_ASSOCIATED_3;
++
++ if (clt->aid == 0)
++ clt->aid = ++adev->aid;
++ clt->cap_info = ieee2host16(*(req->cap_info));
++
++ /* We cheat here a bit. We don't really care which rates are flagged
++ ** as basic by the client, so we stuff them in single ratemask */
++ clt->rate_cap = 0;
++ if (req->supp_rates)
++ add_bits_to_ratemasks(req->supp_rates->rates,
++ req->supp_rates->len, &clt->rate_cap, &clt->rate_cap);
++ if (req->ext_rates)
++ add_bits_to_ratemasks(req->ext_rates->rates,
++ req->ext_rates->len, &clt->rate_cap, &clt->rate_cap);
++ /* We can check that client supports all basic rates,
++ ** and deny assoc if not. But let's be liberal, right? ;) */
++ clt->rate_cfg = clt->rate_cap & adev->rate_oper;
++ if (!clt->rate_cfg) clt->rate_cfg = 1 << lowest_bit(adev->rate_oper);
++ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg);
++ if (IS_ACX100(adev))
++ clt->rate_100 = acx_bitpos2rate100[lowest_bit(clt->rate_cfg)];
++ clt->fallback_count = clt->stepup_count = 0;
++ clt->ignore_count = 16;
++
++ tx = acx_l_alloc_tx(adev);
++ if (!tx)
++ goto bad;
++ head = acx_l_get_txbuf(adev, tx);
++ if (!head) {
++ acx_l_dealloc_tx(adev, tx);
++ goto bad;
++ }
++ body = (void*)(head + 1);
++
++ head->fc = WF_FSTYPE_ASSOCRESPi;
++ head->dur = req->hdr->dur;
++ MAC_COPY(head->da, da);
++ MAC_COPY(head->sa, adev->dev_addr);
++ MAC_COPY(head->bssid, bssid);
++ head->seq = req->hdr->seq;
++
++ body->cap_info = host2ieee16(adev->capabilities);
++ body->status = host2ieee16(0);
++ body->aid = host2ieee16(clt->aid);
++ p = wlan_fill_ie_rates((u8*)&body->rates, adev->rate_supported_len,
++ adev->rate_supported);
++ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len,
++ adev->rate_supported);
++
++ acx_l_tx_data(adev, tx, p - (u8*)head);
++ok:
++ FN_EXIT1(OK);
++ return OK;
++bad:
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++* acx_l_transmit_reassocresp
++
++You may be wondering, just like me, what the hell ReAuth is.
++In practice it was seen sent by STA when STA feels like losing connection.
++
++[802.11]
++
++5.4.2.3 Reassociation
++
++Association is sufficient for no-transition message delivery between
++IEEE 802.11 stations. Additional functionality is needed to support
++BSS-transition mobility. The additional required functionality
++is provided by the reassociation service. Reassociation is a DSS.
++The reassociation service is invoked to 'move' a current association
++from one AP to another. This keeps the DS informed of the current
++mapping between AP and STA as the station moves from BSS to BSS within
++an ESS. Reassociation also enables changing association attributes
++of an established association while the STA remains associated with
++the same AP. Reassociation is always initiated by the mobile STA.
++
++5.4.3.1 Authentication
++...
++A STA may be authenticated with many other STAs at any given instant.
++
++5.4.3.1.1 Preauthentication
++
++Because the authentication process could be time-consuming (depending
++on the authentication protocol in use), the authentication service can
++be invoked independently of the association service. Preauthentication
++is typically done by a STA while it is already associated with an AP
++(with which it previously authenticated). IEEE 802.11 does not require
++that STAs preauthenticate with APs. However, authentication is required
++before an association can be established. If the authentication is left
++until reassociation time, this may impact the speed with which a STA can
++reassociate between APs, limiting BSS-transition mobility performance.
++The use of preauthentication takes the authentication service overhead
++out of the time-critical reassociation process.
++
++5.7.3 Reassociation
++
++For a STA to reassociate, the reassociation service causes the following
++message to occur:
++
++ Reassociation request
++
++* Message type: Management
++* Message subtype: Reassociation request
++* Information items:
++ - IEEE address of the STA
++ - IEEE address of the AP with which the STA will reassociate
++ - IEEE address of the AP with which the STA is currently associated
++ - ESSID
++* Direction of message: From STA to 'new' AP
++
++The address of the current AP is included for efficiency. The inclusion
++of the current AP address facilitates MAC reassociation to be independent
++of the DS implementation.
++
++ Reassociation response
++* Message type: Management
++* Message subtype: Reassociation response
++* Information items:
++ - Result of the requested reassociation. (success/failure)
++ - If the reassociation is successful, the response shall include the AID.
++* Direction of message: From AP to STA
++
++7.2.3.6 Reassociation Request frame format
++
++The frame body of a management frame of subtype Reassociation Request
++contains the information shown in Table 9.
++
++Table 9 Reassociation Request frame body
++Order Information
++1 Capability information
++2 Listen interval
++3 Current AP address
++4 SSID
++5 Supported rates
++
++7.2.3.7 Reassociation Response frame format
++
++The frame body of a management frame of subtype Reassociation Response
++contains the information shown in Table 10.
++
++Table 10 Reassociation Response frame body
++Order Information
++1 Capability information
++2 Status code
++3 Association ID (AID)
++4 Supported rates
++
++*/
++static int
++acx_l_transmit_reassocresp(acx_device_t *adev, const wlan_fr_reassocreq_t *req)
++{
++ struct tx *tx;
++ struct wlan_hdr_mgmt *head;
++ struct reassocresp_frame_body *body;
++ u8 *p;
++ const u8 *da;
++ /* const u8 *sa; */
++ const u8 *bssid;
++ client_t *clt;
++
++ FN_ENTER;
++
++ /* sa = req->hdr->a1; */
++ da = req->hdr->a2;
++ bssid = req->hdr->a3;
++
++ /* Must be already authenticated, so it must be in the list */
++ clt = acx_l_sta_list_get(adev, da);
++ if (!clt)
++ goto ok;
++
++ /* Assoc without auth is a big no-no */
++ /* Already assoc'ed STAs sending ReAssoc req are ok per 802.11 */
++ if (clt->used != CLIENT_AUTHENTICATED_2
++ && clt->used != CLIENT_ASSOCIATED_3) {
++ acx_l_transmit_deauthen(adev, da, WLAN_MGMT_REASON_CLASS2_NONAUTH);
++ goto bad;
++ }
++
++ clt->used = CLIENT_ASSOCIATED_3;
++ if (clt->aid == 0) {
++ clt->aid = ++adev->aid;
++ }
++ if (req->cap_info)
++ clt->cap_info = ieee2host16(*(req->cap_info));
++
++ /* We cheat here a bit. We don't really care which rates are flagged
++ ** as basic by the client, so we stuff them in single ratemask */
++ clt->rate_cap = 0;
++ if (req->supp_rates)
++ add_bits_to_ratemasks(req->supp_rates->rates,
++ req->supp_rates->len, &clt->rate_cap, &clt->rate_cap);
++ if (req->ext_rates)
++ add_bits_to_ratemasks(req->ext_rates->rates,
++ req->ext_rates->len, &clt->rate_cap, &clt->rate_cap);
++ /* We can check that client supports all basic rates,
++ ** and deny assoc if not. But let's be liberal, right? ;) */
++ clt->rate_cfg = clt->rate_cap & adev->rate_oper;
++ if (!clt->rate_cfg) clt->rate_cfg = 1 << lowest_bit(adev->rate_oper);
++ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg);
++ if (IS_ACX100(adev))
++ clt->rate_100 = acx_bitpos2rate100[lowest_bit(clt->rate_cfg)];
++
++ clt->fallback_count = clt->stepup_count = 0;
++ clt->ignore_count = 16;
++
++ tx = acx_l_alloc_tx(adev);
++ if (!tx)
++ goto ok;
++ head = acx_l_get_txbuf(adev, tx);
++ if (!head) {
++ acx_l_dealloc_tx(adev, tx);
++ goto ok;
++ }
++ body = (void*)(head + 1);
++
++ head->fc = WF_FSTYPE_REASSOCRESPi;
++ head->dur = req->hdr->dur;
++ MAC_COPY(head->da, da);
++ MAC_COPY(head->sa, adev->dev_addr);
++ MAC_COPY(head->bssid, bssid);
++ head->seq = req->hdr->seq;
++
++ /* IEs: 1. caps */
++ body->cap_info = host2ieee16(adev->capabilities);
++ /* 2. status code */
++ body->status = host2ieee16(0);
++ /* 3. AID */
++ body->aid = host2ieee16(clt->aid);
++ /* 4. supp rates */
++ p = wlan_fill_ie_rates((u8*)&body->rates, adev->rate_supported_len,
++ adev->rate_supported);
++ /* 5. ext supp rates */
++ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len,
++ adev->rate_supported);
++
++ acx_l_tx_data(adev, tx, p - (u8*)head);
++ok:
++ FN_EXIT1(OK);
++ return OK;
++bad:
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++** acx_l_process_disassoc_from_sta
++*/
++static void
++acx_l_process_disassoc_from_sta(acx_device_t *adev, const wlan_fr_disassoc_t *req)
++{
++ const u8 *ta;
++ client_t *clt;
++
++ FN_ENTER;
++
++ ta = req->hdr->a2;
++ clt = acx_l_sta_list_get(adev, ta);
++ if (!clt)
++ goto end;
++
++ if (clt->used != CLIENT_ASSOCIATED_3
++ && clt->used != CLIENT_AUTHENTICATED_2) {
++ /* it's disassociating, but it's
++ ** not even authenticated! Let it know that */
++ acxlog_mac(L_ASSOC|L_XFER, "peer ", ta, "has sent disassoc "
++ "req but it is not even auth'ed! sending deauth\n");
++ acx_l_transmit_deauthen(adev, ta,
++ WLAN_MGMT_REASON_CLASS2_NONAUTH);
++ clt->used = CLIENT_EXIST_1;
++ } else {
++ /* mark it as auth'ed only */
++ clt->used = CLIENT_AUTHENTICATED_2;
++ }
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_l_process_deauthen_from_sta
++*/
++static void
++acx_l_process_deauth_from_sta(acx_device_t *adev, const wlan_fr_deauthen_t *req)
++{
++ const wlan_hdr_t *hdr;
++ client_t *client;
++
++ FN_ENTER;
++
++ hdr = req->hdr;
++
++ if (acx_debug & L_ASSOC) {
++ acx_print_mac("got deauth from sta:", hdr->a2, " ");
++ acx_print_mac("a1:", hdr->a1, " ");
++ acx_print_mac("a3:", hdr->a3, " ");
++ acx_print_mac("adev->addr:", adev->dev_addr, " ");
++ acx_print_mac("adev->bssid:", adev->bssid, "\n");
++ }
++
++ if (!mac_is_equal(adev->dev_addr, hdr->a1)) {
++ goto end;
++ }
++
++ client = acx_l_sta_list_get(adev, hdr->a2);
++ if (!client) {
++ goto end;
++ }
++ client->used = CLIENT_EXIST_1;
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_l_process_disassoc_from_ap
++*/
++static void
++acx_l_process_disassoc_from_ap(acx_device_t *adev, const wlan_fr_disassoc_t *req)
++{
++ FN_ENTER;
++
++ if (!adev->ap_client) {
++ /* Hrm, we aren't assoc'ed yet anyhow... */
++ goto end;
++ }
++
++ printk("%s: got disassoc frame with reason %d (%s)\n",
++ adev->ndev->name, *req->reason,
++ acx_wlan_reason_str(*req->reason));
++
++ if (mac_is_equal(adev->dev_addr, req->hdr->a1)) {
++ acx_l_transmit_deauthen(adev, adev->bssid,
++ WLAN_MGMT_REASON_DEAUTH_LEAVING);
++ SET_BIT(adev->set_mask, GETSET_RESCAN);
++ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
++ }
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_l_process_deauth_from_ap
++*/
++static void
++acx_l_process_deauth_from_ap(acx_device_t *adev, const wlan_fr_deauthen_t *req)
++{
++ FN_ENTER;
++
++ if (!adev->ap_client) {
++ /* Hrm, we aren't assoc'ed yet anyhow... */
++ goto end;
++ }
++
++ printk("%s: got deauth frame with reason %d (%s)\n",
++ adev->ndev->name, *req->reason,
++ acx_wlan_reason_str(*req->reason));
++
++ /* Chk: is ta verified to be from our AP? */
++ if (mac_is_equal(adev->dev_addr, req->hdr->a1)) {
++ log(L_DEBUG, "AP sent us deauth packet\n");
++ SET_BIT(adev->set_mask, GETSET_RESCAN);
++ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
++ }
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_l_rx
++**
++** The end of the Rx path. Pulls data from a rxhostdesc into a socket
++** buffer and feeds it to the network stack via netif_rx().
++*/
++static void
++acx_l_rx(acx_device_t *adev, rxbuffer_t *rxbuf)
++{
++ FN_ENTER;
++ if (likely(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
++ struct sk_buff *skb;
++ skb = acx_rxbuf_to_ether(adev, rxbuf);
++ if (likely(skb)) {
++ netif_rx(skb);
++ adev->ndev->last_rx = jiffies;
++ adev->stats.rx_packets++;
++ adev->stats.rx_bytes += skb->len;
++ }
++ }
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_l_process_data_frame_master
++*/
++static int
++acx_l_process_data_frame_master(acx_device_t *adev, rxbuffer_t *rxbuf)
++{
++ struct wlan_hdr *hdr;
++ struct tx *tx;
++ void *txbuf;
++ int len;
++ int result = NOT_OK;
++
++ FN_ENTER;
++
++ hdr = acx_get_wlan_hdr(adev, rxbuf);
++
++ switch (WF_FC_FROMTODSi & hdr->fc) {
++ case 0:
++ case WF_FC_FROMDSi:
++ log(L_DEBUG, "ap->sta or adhoc->adhoc data frame ignored\n");
++ goto done;
++ case WF_FC_TODSi:
++ break;
++ default: /* WF_FC_FROMTODSi */
++ log(L_DEBUG, "wds data frame ignored (TODO)\n");
++ goto done;
++ }
++
++ /* check if it is our BSSID, if not, leave */
++ if (!mac_is_equal(adev->bssid, hdr->a1)) {
++ goto done;
++ }
++
++ if (mac_is_equal(adev->dev_addr, hdr->a3)) {
++ /* this one is for us */
++ acx_l_rx(adev, rxbuf);
++ } else {
++ if (mac_is_bcast(hdr->a3)) {
++ /* this one is bcast, rx it too */
++ acx_l_rx(adev, rxbuf);
++ }
++ tx = acx_l_alloc_tx(adev);
++ if (!tx) {
++ goto fail;
++ }
++ /* repackage, tx, and hope it someday reaches its destination */
++ /* order is important, we do it in-place */
++ MAC_COPY(hdr->a1, hdr->a3);
++ MAC_COPY(hdr->a3, hdr->a2);
++ MAC_COPY(hdr->a2, adev->bssid);
++ /* To_DS = 0, From_DS = 1 */
++ hdr->fc = WF_FC_FROMDSi + WF_FTYPE_DATAi;
++
++ txbuf = acx_l_get_txbuf(adev, tx);
++ if (txbuf) {
++ len = RXBUF_BYTES_RCVD(adev, rxbuf);
++ memcpy(txbuf, hdr, len);
++ acx_l_tx_data(adev, tx, len);
++ } else {
++ acx_l_dealloc_tx(adev, tx);
++ }
++ }
++done:
++ result = OK;
++fail:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_l_process_data_frame_client
++*/
++static int
++acx_l_process_data_frame_client(acx_device_t *adev, rxbuffer_t *rxbuf)
++{
++ const u8 *da, *bssid;
++ const wlan_hdr_t *hdr;
++ struct net_device *ndev = adev->ndev;
++ int result = NOT_OK;
++
++ FN_ENTER;
++
++ if (ACX_STATUS_4_ASSOCIATED != adev->status)
++ goto drop;
++
++ hdr = acx_get_wlan_hdr(adev, rxbuf);
++
++ switch (WF_FC_FROMTODSi & hdr->fc) {
++ case 0:
++ if (adev->mode != ACX_MODE_0_ADHOC) {
++ log(L_DEBUG, "adhoc->adhoc data frame ignored\n");
++ goto drop;
++ }
++ bssid = hdr->a3;
++ break;
++ case WF_FC_FROMDSi:
++ if (adev->mode != ACX_MODE_2_STA) {
++ log(L_DEBUG, "ap->sta data frame ignored\n");
++ goto drop;
++ }
++ bssid = hdr->a2;
++ break;
++ case WF_FC_TODSi:
++ log(L_DEBUG, "sta->ap data frame ignored\n");
++ goto drop;
++ default: /* WF_FC_FROMTODSi: wds->wds */
++ log(L_DEBUG, "wds data frame ignored (todo)\n");
++ goto drop;
++ }
++
++ da = hdr->a1;
++
++ if (unlikely(acx_debug & L_DEBUG)) {
++ acx_print_mac("rx: da=", da, "");
++ acx_print_mac(" bssid=", bssid, "");
++ acx_print_mac(" adev->bssid=", adev->bssid, "");
++ acx_print_mac(" adev->addr=", adev->dev_addr, "\n");
++ }
++
++ /* promiscuous mode --> receive all packets */
++ if (unlikely(ndev->flags & IFF_PROMISC))
++ goto process;
++
++ /* FIRST, check if it is our BSSID */
++ if (!mac_is_equal(adev->bssid, bssid)) {
++ /* is not our BSSID, so bail out */
++ goto drop;
++ }
++
++ /* then, check if it is our address */
++ if (mac_is_equal(adev->dev_addr, da)) {
++ goto process;
++ }
++
++ /* then, check if it is broadcast */
++ if (mac_is_bcast(da)) {
++ goto process;
++ }
++
++ if (mac_is_mcast(da)) {
++ /* unconditionally receive all multicasts */
++ if (ndev->flags & IFF_ALLMULTI)
++ goto process;
++
++ /* FIXME: need to check against the list of
++ * multicast addresses that are configured
++ * for the interface (ifconfig) */
++ log(L_XFER, "FIXME: multicast packet, need to check "
++ "against a list of multicast addresses "
++ "(to be created!); accepting packet for now\n");
++ /* for now, just accept it here */
++ goto process;
++ }
++
++ log(L_DEBUG, "rx: foreign packet, dropping\n");
++ goto drop;
++process:
++ /* receive packet */
++ acx_l_rx(adev, rxbuf);
++
++ result = OK;
++drop:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_l_process_mgmt_frame
++**
++** Theory of operation: mgmt packet gets parsed (to make it easy
++** to access variable-sized IEs), results stored in 'parsed'.
++** Then we react to the packet.
++*/
++typedef union parsed_mgmt_req {
++ wlan_fr_mgmt_t mgmt;
++ wlan_fr_assocreq_t assocreq;
++ wlan_fr_reassocreq_t reassocreq;
++ wlan_fr_assocresp_t assocresp;
++ wlan_fr_reassocresp_t reassocresp;
++ wlan_fr_beacon_t beacon;
++ wlan_fr_disassoc_t disassoc;
++ wlan_fr_authen_t authen;
++ wlan_fr_deauthen_t deauthen;
++ wlan_fr_proberesp_t proberesp;
++} parsed_mgmt_req_t;
++
++void BUG_excessive_stack_usage(void);
++
++static int
++acx_l_process_mgmt_frame(acx_device_t *adev, rxbuffer_t *rxbuf)
++{
++ parsed_mgmt_req_t parsed; /* takes ~100 bytes of stack */
++ wlan_hdr_t *hdr;
++ int adhoc, sta_scan, sta, ap;
++ int len;
++
++ if (sizeof(parsed) > 256)
++ BUG_excessive_stack_usage();
++
++ FN_ENTER;
++
++ hdr = acx_get_wlan_hdr(adev, rxbuf);
++
++ /* Management frames never have these set */
++ if (WF_FC_FROMTODSi & hdr->fc) {
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++ }
++
++ len = RXBUF_BYTES_RCVD(adev, rxbuf);
++ if (WF_FC_ISWEPi & hdr->fc)
++ len -= 0x10;
++
++ adhoc = (adev->mode == ACX_MODE_0_ADHOC);
++ sta_scan = ((adev->mode == ACX_MODE_2_STA)
++ && (adev->status != ACX_STATUS_4_ASSOCIATED));
++ sta = ((adev->mode == ACX_MODE_2_STA)
++ && (adev->status == ACX_STATUS_4_ASSOCIATED));
++ ap = (adev->mode == ACX_MODE_3_AP);
++
++ switch (WF_FC_FSTYPEi & hdr->fc) {
++ /* beacons first, for speed */
++ case WF_FSTYPE_BEACONi:
++ memset(&parsed.beacon, 0, sizeof(parsed.beacon));
++ parsed.beacon.hdr = hdr;
++ parsed.beacon.len = len;
++ if (acx_debug & L_DATA) {
++ printk("beacon len:%d fc:%04X dur:%04X seq:%04X",
++ len, hdr->fc, hdr->dur, hdr->seq);
++ acx_print_mac(" a1:", hdr->a1, "");
++ acx_print_mac(" a2:", hdr->a2, "");
++ acx_print_mac(" a3:", hdr->a3, "\n");
++ }
++ wlan_mgmt_decode_beacon(&parsed.beacon);
++ /* beacon and probe response are very similar, so... */
++ acx_l_process_probe_response(adev, &parsed.beacon, rxbuf);
++ break;
++ case WF_FSTYPE_ASSOCREQi:
++ if (!ap)
++ break;
++ memset(&parsed.assocreq, 0, sizeof(parsed.assocreq));
++ parsed.assocreq.hdr = hdr;
++ parsed.assocreq.len = len;
++ wlan_mgmt_decode_assocreq(&parsed.assocreq);
++ if (mac_is_equal(hdr->a1, adev->bssid)
++ && mac_is_equal(hdr->a3, adev->bssid)) {
++ acx_l_transmit_assocresp(adev, &parsed.assocreq);
++ }
++ break;
++ case WF_FSTYPE_REASSOCREQi:
++ if (!ap)
++ break;
++ memset(&parsed.assocreq, 0, sizeof(parsed.assocreq));
++ parsed.assocreq.hdr = hdr;
++ parsed.assocreq.len = len;
++ wlan_mgmt_decode_assocreq(&parsed.assocreq);
++ /* reassocreq and assocreq are equivalent */
++ acx_l_transmit_reassocresp(adev, &parsed.reassocreq);
++ break;
++ case WF_FSTYPE_ASSOCRESPi:
++ if (!sta_scan)
++ break;
++ memset(&parsed.assocresp, 0, sizeof(parsed.assocresp));
++ parsed.assocresp.hdr = hdr;
++ parsed.assocresp.len = len;
++ wlan_mgmt_decode_assocresp(&parsed.assocresp);
++ acx_l_process_assocresp(adev, &parsed.assocresp);
++ break;
++ case WF_FSTYPE_REASSOCRESPi:
++ if (!sta_scan)
++ break;
++ memset(&parsed.assocresp, 0, sizeof(parsed.assocresp));
++ parsed.assocresp.hdr = hdr;
++ parsed.assocresp.len = len;
++ wlan_mgmt_decode_assocresp(&parsed.assocresp);
++ acx_l_process_reassocresp(adev, &parsed.reassocresp);
++ break;
++ case WF_FSTYPE_PROBEREQi:
++ if (ap || adhoc) {
++ /* FIXME: since we're supposed to be an AP,
++ ** we need to return a Probe Response packet.
++ ** Currently firmware is doing it for us,
++ ** but firmware is buggy! See comment elsewhere --vda */
++ }
++ break;
++ case WF_FSTYPE_PROBERESPi:
++ memset(&parsed.proberesp, 0, sizeof(parsed.proberesp));
++ parsed.proberesp.hdr = hdr;
++ parsed.proberesp.len = len;
++ wlan_mgmt_decode_proberesp(&parsed.proberesp);
++ acx_l_process_probe_response(adev, &parsed.proberesp, rxbuf);
++ break;
++ case 6:
++ case 7:
++ /* exit */
++ break;
++ case WF_FSTYPE_ATIMi:
++ /* exit */
++ break;
++ case WF_FSTYPE_DISASSOCi:
++ if (!sta && !ap)
++ break;
++ memset(&parsed.disassoc, 0, sizeof(parsed.disassoc));
++ parsed.disassoc.hdr = hdr;
++ parsed.disassoc.len = len;
++ wlan_mgmt_decode_disassoc(&parsed.disassoc);
++ if (sta)
++ acx_l_process_disassoc_from_ap(adev, &parsed.disassoc);
++ else
++ acx_l_process_disassoc_from_sta(adev, &parsed.disassoc);
++ break;
++ case WF_FSTYPE_AUTHENi:
++ if (!sta_scan && !ap)
++ break;
++ memset(&parsed.authen, 0, sizeof(parsed.authen));
++ parsed.authen.hdr = hdr;
++ parsed.authen.len = len;
++ wlan_mgmt_decode_authen(&parsed.authen);
++ acx_l_process_authen(adev, &parsed.authen);
++ break;
++ case WF_FSTYPE_DEAUTHENi:
++ if (!sta && !ap)
++ break;
++ memset(&parsed.deauthen, 0, sizeof(parsed.deauthen));
++ parsed.deauthen.hdr = hdr;
++ parsed.deauthen.len = len;
++ wlan_mgmt_decode_deauthen(&parsed.deauthen);
++ if (sta)
++ acx_l_process_deauth_from_ap(adev, &parsed.deauthen);
++ else
++ acx_l_process_deauth_from_sta(adev, &parsed.deauthen);
++ break;
++ }
++
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++#ifdef UNUSED
++/***********************************************************************
++** acx_process_class_frame
++**
++** Called from IRQ context only
++*/
++static int
++acx_process_class_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala)
++{
++ return OK;
++}
++#endif
++
++
++/***********************************************************************
++** acx_l_process_NULL_frame
++*/
++#ifdef BOGUS_ITS_NOT_A_NULL_FRAME_HANDLER_AT_ALL
++static int
++acx_l_process_NULL_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala)
++{
++ const signed char *esi;
++ const u8 *ebx;
++ const wlan_hdr_t *hdr;
++ const client_t *client;
++ int result = NOT_OK;
++
++ hdr = acx_get_wlan_hdr(adev, rxbuf);
++
++ switch (WF_FC_FROMTODSi & hdr->fc) {
++ case 0:
++ esi = hdr->a1;
++ ebx = hdr->a2;
++ break;
++ case WF_FC_FROMDSi:
++ esi = hdr->a1;
++ ebx = hdr->a3;
++ break;
++ case WF_FC_TODSi:
++ esi = hdr->a1;
++ ebx = hdr->a2;
++ break;
++ default: /* WF_FC_FROMTODSi */
++ esi = hdr->a1; /* added by me! --vda */
++ ebx = hdr->a2;
++ }
++
++ if (esi[0x0] < 0) {
++ result = OK;
++ goto done;
++ }
++
++ client = acx_l_sta_list_get(adev, ebx);
++ if (client)
++ result = NOT_OK;
++ else {
++#ifdef IS_IT_BROKEN
++ log(L_DEBUG|L_XFER, "<transmit_deauth 7>\n");
++ acx_l_transmit_deauthen(adev, ebx,
++ WLAN_MGMT_REASON_CLASS2_NONAUTH);
++#else
++ log(L_DEBUG, "received NULL frame from unknown client! "
++ "We really shouldn't send deauthen here, right?\n");
++#endif
++ result = OK;
++ }
++done:
++ return result;
++}
++#endif
++
++
++/***********************************************************************
++** acx_l_process_probe_response
++*/
++static int
++acx_l_process_probe_response(acx_device_t *adev, wlan_fr_proberesp_t *req,
++ const rxbuffer_t *rxbuf)
++{
++ struct client *bss;
++ wlan_hdr_t *hdr;
++
++ FN_ENTER;
++
++ hdr = req->hdr;
++
++ if (mac_is_equal(hdr->a3, adev->dev_addr)) {
++ log(L_ASSOC, "huh, scan found our own MAC!?\n");
++ goto ok; /* just skip this one silently */
++ }
++
++ bss = acx_l_sta_list_get_or_add(adev, hdr->a2);
++
++ /* NB: be careful modifying bss data! It may be one
++ ** of the already known clients (like our AP if we are a STA)
++ ** Thus do not blindly modify e.g. current ratemask! */
++
++ if (STA_LIST_ADD_CAN_FAIL && !bss) {
++ /* uh oh, we found more sites/stations than we can handle with
++ * our current setup: pull the emergency brake and stop scanning! */
++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_STOP_SCAN);
++ /* TODO: a nice comment what below call achieves --vda */
++ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH);
++ goto ok;
++ }
++ /* NB: get_or_add already filled bss->address = hdr->a2 */
++ MAC_COPY(bss->bssid, hdr->a3);
++
++ /* copy the ESSID element */
++ if (req->ssid && req->ssid->len <= IW_ESSID_MAX_SIZE) {
++ bss->essid_len = req->ssid->len;
++ memcpy(bss->essid, req->ssid->ssid, req->ssid->len);
++ bss->essid[req->ssid->len] = '\0';
++ } else {
++ /* Either no ESSID IE or oversized one */
++ printk("%s: received packet has bogus ESSID\n",
++ adev->ndev->name);
++ }
++
++ if (req->ds_parms)
++ bss->channel = req->ds_parms->curr_ch;
++ if (req->cap_info)
++ bss->cap_info = ieee2host16(*req->cap_info);
++
++ bss->sir = acx_signal_to_winlevel(rxbuf->phy_level);
++ bss->snr = acx_signal_to_winlevel(rxbuf->phy_snr);
++
++ bss->rate_cap = 0; /* operational mask */
++ bss->rate_bas = 0; /* basic mask */
++ if (req->supp_rates)
++ add_bits_to_ratemasks(req->supp_rates->rates,
++ req->supp_rates->len, &bss->rate_bas, &bss->rate_cap);
++ if (req->ext_rates)
++ add_bits_to_ratemasks(req->ext_rates->rates,
++ req->ext_rates->len, &bss->rate_bas, &bss->rate_cap);
++ /* Fix up any possible bogosity - code elsewhere
++ * is not expecting empty masks */
++ if (!bss->rate_cap)
++ bss->rate_cap = adev->rate_basic;
++ if (!bss->rate_bas)
++ bss->rate_bas = 1 << lowest_bit(bss->rate_cap);
++ if (!bss->rate_cur)
++ bss->rate_cur = 1 << lowest_bit(bss->rate_bas);
++
++ /* People moan about this being too noisy at L_ASSOC */
++ log(L_DEBUG,
++ "found %s: ESSID=\"%s\" ch=%d "
++ "BSSID="MACSTR" caps=0x%04X SIR=%d SNR=%d\n",
++ (bss->cap_info & WF_MGMT_CAP_IBSS) ? "Ad-Hoc peer" : "AP",
++ bss->essid, bss->channel, MAC(bss->bssid), bss->cap_info,
++ bss->sir, bss->snr);
++ok:
++ FN_EXIT0;
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_l_process_assocresp
++*/
++static int
++acx_l_process_assocresp(acx_device_t *adev, const wlan_fr_assocresp_t *req)
++{
++ const wlan_hdr_t *hdr;
++ int res = OK;
++
++ FN_ENTER;
++
++ hdr = req->hdr;
++
++ if ((ACX_MODE_2_STA == adev->mode)
++ && mac_is_equal(adev->dev_addr, hdr->a1)) {
++ u16 st = ieee2host16(*(req->status));
++ if (WLAN_MGMT_STATUS_SUCCESS == st) {
++ adev->aid = ieee2host16(*(req->aid));
++ /* tell the card we are associated when
++ ** we are out of interrupt context */
++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_ASSOCIATE);
++ } else {
++
++ /* TODO: we shall delete peer from sta_list, and try
++ ** other candidates... */
++
++ printk("%s: association FAILED: peer sent "
++ "Status Code %d (%s)\n",
++ adev->ndev->name, st, get_status_string(st));
++ res = NOT_OK;
++ }
++ }
++
++ FN_EXIT1(res);
++ return res;
++}
++
++
++/***********************************************************************
++** acx_l_process_reassocresp
++*/
++static int
++acx_l_process_reassocresp(acx_device_t *adev, const wlan_fr_reassocresp_t *req)
++{
++ const wlan_hdr_t *hdr;
++ int result = NOT_OK;
++ u16 st;
++
++ FN_ENTER;
++
++ hdr = req->hdr;
++
++ if (!mac_is_equal(adev->dev_addr, hdr->a1)) {
++ goto end;
++ }
++ st = ieee2host16(*(req->status));
++ if (st == WLAN_MGMT_STATUS_SUCCESS) {
++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
++ result = OK;
++ } else {
++ printk("%s: reassociation FAILED: peer sent "
++ "response code %d (%s)\n",
++ adev->ndev->name, st, get_status_string(st));
++ }
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_l_process_authen
++**
++** Called only in STA_SCAN or AP mode
++*/
++static int
++acx_l_process_authen(acx_device_t *adev, const wlan_fr_authen_t *req)
++{
++ const wlan_hdr_t *hdr;
++ client_t *clt;
++ wlan_ie_challenge_t *chal;
++ u16 alg, seq, status;
++ int ap, result;
++
++ FN_ENTER;
++
++ hdr = req->hdr;
++
++ if (acx_debug & L_ASSOC) {
++ acx_print_mac("AUTHEN adev->addr=", adev->dev_addr, " ");
++ acx_print_mac("a1=", hdr->a1, " ");
++ acx_print_mac("a2=", hdr->a2, " ");
++ acx_print_mac("a3=", hdr->a3, " ");
++ acx_print_mac("adev->bssid=", adev->bssid, "\n");
++ }
++
++ if (!mac_is_equal(adev->dev_addr, hdr->a1)
++ || !mac_is_equal(adev->bssid, hdr->a3)) {
++ result = OK;
++ goto end;
++ }
++
++ alg = ieee2host16(*(req->auth_alg));
++ seq = ieee2host16(*(req->auth_seq));
++ status = ieee2host16(*(req->status));
++
++ log(L_ASSOC, "auth algorithm %d, auth sequence %d, status %d\n", alg, seq, status);
++
++ ap = (adev->mode == ACX_MODE_3_AP);
++
++ if (adev->auth_alg <= 1) {
++ if (adev->auth_alg != alg) {
++ log(L_ASSOC, "auth algorithm mismatch: "
++ "our:%d peer:%d\n", adev->auth_alg, alg);
++ result = NOT_OK;
++ goto end;
++ }
++ }
++ if (ap) {
++ clt = acx_l_sta_list_get_or_add(adev, hdr->a2);
++ if (STA_LIST_ADD_CAN_FAIL && !clt) {
++ log(L_ASSOC, "could not allocate room for client\n");
++ result = NOT_OK;
++ goto end;
++ }
++ } else {
++ clt = adev->ap_client;
++ if (!mac_is_equal(clt->address, hdr->a2)) {
++ printk("%s: malformed auth frame from AP?!\n",
++ adev->ndev->name);
++ result = NOT_OK;
++ goto end;
++ }
++ }
++
++ /* now check which step in the authentication sequence we are
++ * currently in, and act accordingly */
++ switch (seq) {
++ case 1:
++ if (!ap)
++ break;
++ acx_l_transmit_authen2(adev, req, clt);
++ break;
++ case 2:
++ if (ap)
++ break;
++ if (status == WLAN_MGMT_STATUS_SUCCESS) {
++ if (alg == WLAN_AUTH_ALG_OPENSYSTEM) {
++ acx_set_status(adev, ACX_STATUS_3_AUTHENTICATED);
++ acx_l_transmit_assoc_req(adev);
++ } else
++ if (alg == WLAN_AUTH_ALG_SHAREDKEY) {
++ acx_l_transmit_authen3(adev, req);
++ }
++ } else {
++ printk("%s: auth FAILED: peer sent "
++ "response code %d (%s), "
++ "still waiting for authentication\n",
++ adev->ndev->name,
++ status, get_status_string(status));
++ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH);
++ }
++ break;
++ case 3:
++ if (!ap)
++ break;
++ if ((clt->auth_alg != WLAN_AUTH_ALG_SHAREDKEY)
++ || (alg != WLAN_AUTH_ALG_SHAREDKEY)
++ || (clt->auth_step != 2))
++ break;
++ chal = req->challenge;
++ if (!chal
++ || memcmp(chal->challenge, clt->challenge_text, WLAN_CHALLENGE_LEN)
++ || (chal->eid != WLAN_EID_CHALLENGE)
++ || (chal->len != WLAN_CHALLENGE_LEN)
++ )
++ break;
++ acx_l_transmit_authen4(adev, req);
++ MAC_COPY(clt->address, hdr->a2);
++ clt->used = CLIENT_AUTHENTICATED_2;
++ clt->auth_step = 4;
++ clt->seq = ieee2host16(hdr->seq);
++ break;
++ case 4:
++ if (ap)
++ break;
++ /* ok, we're through: we're authenticated. Woohoo!! */
++ acx_set_status(adev, ACX_STATUS_3_AUTHENTICATED);
++ log(L_ASSOC, "Authenticated!\n");
++ /* now that we're authenticated, request association */
++ acx_l_transmit_assoc_req(adev);
++ break;
++ }
++ result = OK;
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_gen_challenge
++*/
++static inline void
++acx_gen_challenge(wlan_ie_challenge_t* d)
++{
++ FN_ENTER;
++ d->eid = WLAN_EID_CHALLENGE;
++ d->len = WLAN_CHALLENGE_LEN;
++ get_random_bytes(d->challenge, WLAN_CHALLENGE_LEN);
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_l_transmit_deauthen
++*/
++static int
++acx_l_transmit_deauthen(acx_device_t *adev, const u8 *addr, u16 reason)
++{
++ struct tx *tx;
++ struct wlan_hdr_mgmt *head;
++ struct deauthen_frame_body *body;
++
++ FN_ENTER;
++
++ tx = acx_l_alloc_tx(adev);
++ if (!tx)
++ goto bad;
++ head = acx_l_get_txbuf(adev, tx);
++ if (!head) {
++ acx_l_dealloc_tx(adev, tx);
++ goto bad;
++ }
++ body = (void*)(head + 1);
++
++ head->fc = (WF_FTYPE_MGMTi | WF_FSTYPE_DEAUTHENi);
++ head->dur = 0;
++ MAC_COPY(head->da, addr);
++ MAC_COPY(head->sa, adev->dev_addr);
++ MAC_COPY(head->bssid, adev->bssid);
++ head->seq = 0;
++
++ log(L_DEBUG|L_ASSOC|L_XFER,
++ "sending deauthen to "MACSTR" for %d\n",
++ MAC(addr), reason);
++
++ body->reason = host2ieee16(reason);
++
++ /* body is fixed size here, but beware of cutting-and-pasting this -
++ ** do not use sizeof(*body) for variable sized mgmt packets! */
++ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + sizeof(*body));
++
++ FN_EXIT1(OK);
++ return OK;
++bad:
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++** acx_l_transmit_authen1
++*/
++static int
++acx_l_transmit_authen1(acx_device_t *adev)
++{
++ struct tx *tx;
++ struct wlan_hdr_mgmt *head;
++ struct auth_frame_body *body;
++
++ FN_ENTER;
++
++ log(L_ASSOC, "sending authentication1 request (auth algo %d), "
++ "awaiting response\n", adev->auth_alg);
++
++ tx = acx_l_alloc_tx(adev);
++ if (!tx)
++ goto bad;
++ head = acx_l_get_txbuf(adev, tx);
++ if (!head) {
++ acx_l_dealloc_tx(adev, tx);
++ goto bad;
++ }
++ body = (void*)(head + 1);
++
++ head->fc = WF_FSTYPE_AUTHENi;
++ /* duration should be 0 instead of 0x8000 to have
++ * the firmware calculate the value, right? */
++ head->dur = 0;
++ MAC_COPY(head->da, adev->bssid);
++ MAC_COPY(head->sa, adev->dev_addr);
++ MAC_COPY(head->bssid, adev->bssid);
++ head->seq = 0;
++
++ body->auth_alg = host2ieee16(adev->auth_alg);
++ body->auth_seq = host2ieee16(1);
++ body->status = host2ieee16(0);
++
++ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + 2 + 2 + 2);
++
++ FN_EXIT1(OK);
++ return OK;
++bad:
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++** acx_l_transmit_authen2
++*/
++static int
++acx_l_transmit_authen2(acx_device_t *adev, const wlan_fr_authen_t *req,
++ client_t *clt)
++{
++ struct tx *tx;
++ struct wlan_hdr_mgmt *head;
++ struct auth_frame_body *body;
++ unsigned int packet_len;
++
++ FN_ENTER;
++
++ if (!clt)
++ goto ok;
++
++ MAC_COPY(clt->address, req->hdr->a2);
++#ifdef UNUSED
++ clt->ps = ((WF_FC_PWRMGTi & req->hdr->fc) != 0);
++#endif
++ clt->auth_alg = ieee2host16(*(req->auth_alg));
++ clt->auth_step = 2;
++ clt->seq = ieee2host16(req->hdr->seq);
++
++ tx = acx_l_alloc_tx(adev);
++ if (!tx)
++ goto bad;
++ head = acx_l_get_txbuf(adev, tx);
++ if (!head) {
++ acx_l_dealloc_tx(adev, tx);
++ goto bad;
++ }
++ body = (void*)(head + 1);
++
++ head->fc = WF_FSTYPE_AUTHENi;
++ head->dur = 0 /* req->hdr->dur */;
++ MAC_COPY(head->da, req->hdr->a2);
++ MAC_COPY(head->sa, adev->dev_addr);
++ MAC_COPY(head->bssid, req->hdr->a3);
++ head->seq = 0 /* req->hdr->seq */;
++
++ /* already in IEEE format, no endianness conversion */
++ body->auth_alg = *(req->auth_alg);
++ body->auth_seq = host2ieee16(2);
++ body->status = host2ieee16(0);
++
++ packet_len = WLAN_HDR_A3_LEN + 2 + 2 + 2;
++ if (ieee2host16(*(req->auth_alg)) == WLAN_AUTH_ALG_OPENSYSTEM) {
++ clt->used = CLIENT_AUTHENTICATED_2;
++ } else { /* shared key */
++ acx_gen_challenge(&body->challenge);
++ memcpy(&clt->challenge_text, body->challenge.challenge, WLAN_CHALLENGE_LEN);
++ packet_len += 2 + 2 + 2 + 1+1+WLAN_CHALLENGE_LEN;
++ }
++
++ acxlog_mac(L_ASSOC|L_XFER,
++ "transmit_auth2: BSSID=", head->bssid, "\n");
++
++ acx_l_tx_data(adev, tx, packet_len);
++ok:
++ FN_EXIT1(OK);
++ return OK;
++bad:
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++** acx_l_transmit_authen3
++*/
++static int
++acx_l_transmit_authen3(acx_device_t *adev, const wlan_fr_authen_t *req)
++{
++ struct tx *tx;
++ struct wlan_hdr_mgmt *head;
++ struct auth_frame_body *body;
++ unsigned int packet_len;
++
++ FN_ENTER;
++
++ tx = acx_l_alloc_tx(adev);
++ if (!tx)
++ goto ok;
++ head = acx_l_get_txbuf(adev, tx);
++ if (!head) {
++ acx_l_dealloc_tx(adev, tx);
++ goto ok;
++ }
++ body = (void*)(head + 1);
++
++ /* add WF_FC_ISWEPi: auth step 3 needs to be encrypted */
++ head->fc = WF_FC_ISWEPi + WF_FSTYPE_AUTHENi;
++ /* FIXME: is this needed?? authen4 does it...
++ * I think it's even wrong since we shouldn't re-use old
++ * values but instead let the firmware calculate proper ones
++ head->dur = req->hdr->dur;
++ head->seq = req->hdr->seq;
++ */
++ MAC_COPY(head->da, adev->bssid);
++ MAC_COPY(head->sa, adev->dev_addr);
++ MAC_COPY(head->bssid, adev->bssid);
++
++ /* already in IEEE format, no endianness conversion */
++ body->auth_alg = *(req->auth_alg);
++ body->auth_seq = host2ieee16(3);
++ body->status = host2ieee16(0);
++ memcpy(&body->challenge, req->challenge, req->challenge->len + 2);
++ packet_len = WLAN_HDR_A3_LEN + 8 + req->challenge->len;
++
++ log(L_ASSOC|L_XFER, "transmit_authen3!\n");
++
++ acx_l_tx_data(adev, tx, packet_len);
++ok:
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_l_transmit_authen4
++*/
++static int
++acx_l_transmit_authen4(acx_device_t *adev, const wlan_fr_authen_t *req)
++{
++ struct tx *tx;
++ struct wlan_hdr_mgmt *head;
++ struct auth_frame_body *body;
++
++ FN_ENTER;
++
++ tx = acx_l_alloc_tx(adev);
++ if (!tx)
++ goto ok;
++ head = acx_l_get_txbuf(adev, tx);
++ if (!head) {
++ acx_l_dealloc_tx(adev, tx);
++ goto ok;
++ }
++ body = (void*)(head + 1);
++
++ head->fc = WF_FSTYPE_AUTHENi; /* 0xb0 */
++ head->dur = 0 /* req->hdr->dur */;
++ MAC_COPY(head->da, req->hdr->a2);
++ MAC_COPY(head->sa, adev->dev_addr);
++ MAC_COPY(head->bssid, req->hdr->a3);
++ head->seq = 0 /* req->hdr->seq */;
++
++ /* already in IEEE format, no endianness conversion */
++ body->auth_alg = *(req->auth_alg);
++ body->auth_seq = host2ieee16(4);
++ body->status = host2ieee16(0);
++
++ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + 2 + 2 + 2);
++ok:
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_l_transmit_assoc_req
++**
++** adev->ap_client is a current candidate AP here
++*/
++static int
++acx_l_transmit_assoc_req(acx_device_t *adev)
++{
++ struct tx *tx;
++ struct wlan_hdr_mgmt *head;
++ u8 *body, *p, *prate;
++ unsigned int packet_len;
++ u16 cap;
++
++ FN_ENTER;
++
++ log(L_ASSOC, "sending association request, "
++ "awaiting response. NOT ASSOCIATED YET\n");
++ tx = acx_l_alloc_tx(adev);
++ if (!tx)
++ goto bad;
++ head = acx_l_get_txbuf(adev, tx);
++ if (!head) {
++ acx_l_dealloc_tx(adev, tx);
++ goto bad;
++ }
++ body = (void*)(head + 1);
++
++ head->fc = WF_FSTYPE_ASSOCREQi;
++ head->dur = host2ieee16(0x8000);
++ MAC_COPY(head->da, adev->bssid);
++ MAC_COPY(head->sa, adev->dev_addr);
++ MAC_COPY(head->bssid, adev->bssid);
++ head->seq = 0;
++
++ p = body;
++ /* now start filling the AssocReq frame body */
++
++ /* since this assoc request will most likely only get
++ * sent in the STA to AP case (and not when Ad-Hoc IBSS),
++ * the cap combination indicated here will thus be
++ * WF_MGMT_CAP_ESSi *always* (no IBSS ever)
++ * The specs are more than non-obvious on all that:
++ *
++ * 802.11 7.3.1.4 Capability Information field
++ ** APs set the ESS subfield to 1 and the IBSS subfield to 0 within
++ ** Beacon or Probe Response management frames. STAs within an IBSS
++ ** set the ESS subfield to 0 and the IBSS subfield to 1 in transmitted
++ ** Beacon or Probe Response management frames
++ **
++ ** APs set the Privacy subfield to 1 within transmitted Beacon,
++ ** Probe Response, Association Response, and Reassociation Response
++ ** if WEP is required for all data type frames within the BSS.
++ ** STAs within an IBSS set the Privacy subfield to 1 in Beacon
++ ** or Probe Response management frames if WEP is required
++ ** for all data type frames within the IBSS */
++
++ /* note that returning 0 will be refused by several APs...
++ * (so this indicates that you're probably supposed to
++ * "confirm" the ESS mode) */
++ cap = WF_MGMT_CAP_ESSi;
++
++ /* this one used to be a check on wep_restricted,
++ * but more likely it's wep_enabled instead */
++ if (adev->wep_enabled)
++ SET_BIT(cap, WF_MGMT_CAP_PRIVACYi);
++
++ /* Probably we can just set these always, because our hw is
++ ** capable of shortpre and PBCC --vda */
++ /* only ask for short preamble if the peer station supports it */
++ if (adev->ap_client->cap_info & WF_MGMT_CAP_SHORT)
++ SET_BIT(cap, WF_MGMT_CAP_SHORTi);
++ /* only ask for PBCC support if the peer station supports it */
++ if (adev->ap_client->cap_info & WF_MGMT_CAP_PBCC)
++ SET_BIT(cap, WF_MGMT_CAP_PBCCi);
++
++ /* IEs: 1. caps */
++ *(u16*)p = cap; p += 2;
++ /* 2. listen interval */
++ *(u16*)p = host2ieee16(adev->listen_interval); p += 2;
++ /* 3. ESSID */
++ p = wlan_fill_ie_ssid(p,
++ strlen(adev->essid_for_assoc), adev->essid_for_assoc);
++ /* 4. supp rates */
++ prate = p;
++ p = wlan_fill_ie_rates(p,
++ adev->rate_supported_len, adev->rate_supported);
++ /* 5. ext supp rates */
++ p = wlan_fill_ie_rates_ext(p,
++ adev->rate_supported_len, adev->rate_supported);
++
++ if (acx_debug & L_DEBUG) {
++ printk("association: rates element\n");
++ acx_dump_bytes(prate, p - prate);
++ }
++
++ /* calculate lengths */
++ packet_len = WLAN_HDR_A3_LEN + (p - body);
++
++ log(L_ASSOC, "association: requesting caps 0x%04X, ESSID \"%s\"\n",
++ cap, adev->essid_for_assoc);
++
++ acx_l_tx_data(adev, tx, packet_len);
++ FN_EXIT1(OK);
++ return OK;
++bad:
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++** acx_l_transmit_disassoc
++**
++** FIXME: looks like incomplete implementation of a helper:
++** acx_l_transmit_disassoc(adev, clt) - kick this client (we're an AP)
++** acx_l_transmit_disassoc(adev, NULL) - leave BSSID (we're a STA)
++*/
++#ifdef BROKEN
++int
++acx_l_transmit_disassoc(acx_device_t *adev, client_t *clt)
++{
++ struct tx *tx;
++ struct wlan_hdr_mgmt *head;
++ struct disassoc_frame_body *body;
++
++ FN_ENTER;
++/* if (clt != NULL) { */
++ tx = acx_l_alloc_tx(adev);
++ if (!tx)
++ goto bad;
++ head = acx_l_get_txbuf(adev, tx);
++ if (!head) {
++ acx_l_dealloc_tx(adev, tx);
++ goto bad;
++ }
++ body = (void*)(head + 1);
++
++/* clt->used = CLIENT_AUTHENTICATED_2; - not (yet?) associated */
++
++ head->fc = WF_FSTYPE_DISASSOCi;
++ head->dur = 0;
++ /* huh? It muchly depends on whether we're STA or AP...
++ ** sta->ap: da=bssid, sa=own, bssid=bssid
++ ** ap->sta: da=sta, sa=bssid, bssid=bssid. FIXME! */
++ MAC_COPY(head->da, adev->bssid);
++ MAC_COPY(head->sa, adev->dev_addr);
++ MAC_COPY(head->bssid, adev->dev_addr);
++ head->seq = 0;
++
++ /* "Class 3 frame received from nonassociated station." */
++ body->reason = host2ieee16(7);
++
++ /* fixed size struct, ok to sizeof */
++ acx_l_tx_data(adev, tx, WLAN_HDR_A3_LEN + sizeof(*body));
++/* } */
++ FN_EXIT1(OK);
++ return OK;
++bad:
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++#endif
++
++
++/***********************************************************************
++** acx_s_complete_scan
++**
++** Called either from after_interrupt_task() if:
++** 1) there was Scan_Complete IRQ, or
++** 2) scanning expired in timer()
++** We need to decide which ESS or IBSS to join.
++** Iterates thru adev->sta_list:
++** if adev->ap is not bcast, will join only specified
++** ESS or IBSS with this bssid
++** checks peers' caps for ESS/IBSS bit
++** checks peers' SSID, allows exact match or hidden SSID
++** If station to join is chosen:
++** points adev->ap_client to the chosen struct client
++** sets adev->essid_for_assoc for future assoc attempt
++** Auth/assoc is not yet performed
++** Returns OK if there is no need to restart scan
++*/
++int
++acx_s_complete_scan(acx_device_t *adev)
++{
++ struct client *bss;
++ unsigned long flags;
++ u16 needed_cap;
++ int i;
++ int idx_found = -1;
++ int result = OK;
++
++ FN_ENTER;
++
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ needed_cap = WF_MGMT_CAP_IBSS; /* 2, we require Ad-Hoc */
++ break;
++ case ACX_MODE_2_STA:
++ needed_cap = WF_MGMT_CAP_ESS; /* 1, we require Managed */
++ break;
++ default:
++ printk("acx: driver bug: mode=%d in complete_scan()\n", adev->mode);
++ dump_stack();
++ goto end;
++ }
++
++ acx_lock(adev, flags);
++
++ /* TODO: sta_iterator hiding implementation would be nice here... */
++
++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
++ bss = &adev->sta_list[i];
++ if (!bss->used) continue;
++
++
++ log(L_ASSOC, "scan table: SSID=\"%s\" CH=%d SIR=%d SNR=%d\n",
++ bss->essid, bss->channel, bss->sir, bss->snr);
++
++ if (!mac_is_bcast(adev->ap))
++ if (!mac_is_equal(bss->bssid, adev->ap))
++ continue; /* keep looking */
++
++ /* broken peer with no mode flags set? */
++ if (unlikely(!(bss->cap_info & (WF_MGMT_CAP_ESS | WF_MGMT_CAP_IBSS)))) {
++ printk("%s: strange peer "MACSTR" found with "
++ "neither ESS (AP) nor IBSS (Ad-Hoc) "
++ "capability - skipped\n",
++ adev->ndev->name, MAC(bss->address));
++ continue;
++ }
++ log(L_ASSOC, "peer_cap 0x%04X, needed_cap 0x%04X\n",
++ bss->cap_info, needed_cap);
++
++ /* does peer station support what we need? */
++ if ((bss->cap_info & needed_cap) != needed_cap)
++ continue; /* keep looking */
++
++ /* strange peer with NO basic rates?! */
++ if (unlikely(!bss->rate_bas)) {
++ printk("%s: strange peer "MACSTR" with empty rate set "
++ "- skipped\n",
++ adev->ndev->name, MAC(bss->address));
++ continue;
++ }
++
++ /* do we support all basic rates of this peer? */
++ if ((bss->rate_bas & adev->rate_oper) != bss->rate_bas) {
++/* we probably need to have all rates as operational rates,
++ even in case of an 11M-only configuration */
++#ifdef THIS_IS_TROUBLESOME
++ printk("%s: peer "MACSTR": incompatible basic rates "
++ "(AP requests 0x%04X, we have 0x%04X) "
++ "- skipped\n",
++ adev->ndev->name, MAC(bss->address),
++ bss->rate_bas, adev->rate_oper);
++ continue;
++#else
++ printk("%s: peer "MACSTR": incompatible basic rates "
++ "(AP requests 0x%04X, we have 0x%04X). "
++ "Considering anyway...\n",
++ adev->ndev->name, MAC(bss->address),
++ bss->rate_bas, adev->rate_oper);
++#endif
++ }
++
++ if ( !(adev->reg_dom_chanmask & (1<<(bss->channel-1))) ) {
++ printk("%s: warning: peer "MACSTR" is on channel %d "
++ "outside of channel range of current "
++ "regulatory domain - couldn't join "
++ "even if other settings match. "
++ "You might want to adapt your config\n",
++ adev->ndev->name, MAC(bss->address),
++ bss->channel);
++ continue; /* keep looking */
++ }
++
++ if (!adev->essid_active || !strcmp(bss->essid, adev->essid)) {
++ log(L_ASSOC,
++ "found station with matching ESSID! ('%s' "
++ "station, '%s' config)\n",
++ bss->essid,
++ (adev->essid_active) ? adev->essid : "[any]");
++ /* TODO: continue looking for peer with better SNR */
++ bss->used = CLIENT_JOIN_CANDIDATE;
++ idx_found = i;
++
++ /* stop searching if this station is
++ * on the current channel, otherwise
++ * keep looking for an even better match */
++ if (bss->channel == adev->channel)
++ break;
++ } else
++ if (is_hidden_essid(bss->essid)) {
++ /* hmm, station with empty or single-space SSID:
++ * using hidden SSID broadcast?
++ */
++ /* This behaviour is broken: which AP from zillion
++ ** of APs with hidden SSID you'd try?
++ ** We should use Probe requests to get Probe responses
++ ** and check for real SSID (are those never hidden?) */
++ bss->used = CLIENT_JOIN_CANDIDATE;
++ if (idx_found == -1)
++ idx_found = i;
++ log(L_ASSOC, "found station with empty or "
++ "single-space (hidden) SSID, considering "
++ "for assoc attempt\n");
++ /* ...and keep looking for better matches */
++ } else {
++ log(L_ASSOC, "ESSID doesn't match! ('%s' "
++ "station, '%s' config)\n",
++ bss->essid,
++ (adev->essid_active) ? adev->essid : "[any]");
++ }
++ }
++
++ /* TODO: iterate thru join candidates instead */
++ /* TODO: rescan if not associated within some timeout */
++ if (idx_found != -1) {
++ char *essid_src;
++ size_t essid_len;
++
++ bss = &adev->sta_list[idx_found];
++ adev->ap_client = bss;
++
++ if (is_hidden_essid(bss->essid)) {
++ /* if the ESSID of the station we found is empty
++ * (no broadcast), then use user-configured ESSID
++ * instead */
++ essid_src = adev->essid;
++ essid_len = adev->essid_len;
++ } else {
++ essid_src = bss->essid;
++ essid_len = strlen(bss->essid);
++ }
++
++ acx_update_capabilities(adev);
++
++ memcpy(adev->essid_for_assoc, essid_src, essid_len);
++ adev->essid_for_assoc[essid_len] = '\0';
++ adev->channel = bss->channel;
++ MAC_COPY(adev->bssid, bss->bssid);
++
++ bss->rate_cfg = (bss->rate_cap & adev->rate_oper);
++ bss->rate_cur = 1 << lowest_bit(bss->rate_cfg);
++ bss->rate_100 = acx_rate111to100(bss->rate_cur);
++
++ acxlog_mac(L_ASSOC,
++ "matching station found: ", adev->bssid, ", joining\n");
++
++ /* TODO: do we need to switch to the peer's channel first? */
++
++ if (ACX_MODE_0_ADHOC == adev->mode) {
++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
++ } else {
++ acx_l_transmit_authen1(adev);
++ acx_set_status(adev, ACX_STATUS_2_WAIT_AUTH);
++ }
++ } else { /* idx_found == -1 */
++ /* uh oh, no station found in range */
++ if (ACX_MODE_0_ADHOC == adev->mode) {
++ printk("%s: no matching station found in range, "
++ "generating our own IBSS instead\n",
++ adev->ndev->name);
++ /* we do it the HostAP way: */
++ MAC_COPY(adev->bssid, adev->dev_addr);
++ adev->bssid[0] |= 0x02; /* 'local assigned addr' bit */
++ /* add IBSS bit to our caps... */
++ acx_update_capabilities(adev);
++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
++ /* In order to cmd_join be called below */
++ idx_found = 0;
++ } else {
++ /* we shall scan again, AP can be
++ ** just temporarily powered off */
++ log(L_ASSOC,
++ "no matching station found in range yet\n");
++ acx_set_status(adev, ACX_STATUS_1_SCANNING);
++ result = NOT_OK;
++ }
++ }
++
++ acx_unlock(adev, flags);
++
++ if (idx_found != -1) {
++ if (ACX_MODE_0_ADHOC == adev->mode) {
++ /* need to update channel in beacon template */
++ SET_BIT(adev->set_mask, SET_TEMPLATES);
++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask)
++ acx_s_update_card_settings(adev);
++ }
++ /* Inform firmware on our decision to start or join BSS */
++ acx_s_cmd_join_bssid(adev, adev->bssid);
++ }
++
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_s_read_fw
++**
++** Loads a firmware image
++**
++** Returns:
++** 0 unable to load file
++** pointer to firmware success
++*/
++firmware_image_t*
++acx_s_read_fw(struct device *dev, const char *file, u32 *size)
++{
++ firmware_image_t *res;
++ const struct firmware *fw_entry;
++
++ res = NULL;
++ log(L_INIT, "requesting firmware image '%s'\n", file);
++ if (!request_firmware(&fw_entry, file, dev)) {
++ *size = 8;
++ if (fw_entry->size >= 8)
++ *size = 8 + le32_to_cpu(*(u32 *)(fw_entry->data + 4));
++ if (fw_entry->size != *size) {
++ printk("acx: firmware size does not match "
++ "firmware header: %d != %d, "
++ "aborting fw upload\n",
++ (int) fw_entry->size, (int) *size);
++ goto release_ret;
++ }
++ res = vmalloc(*size);
++ if (!res) {
++ printk("acx: no memory for firmware "
++ "(%u bytes)\n", *size);
++ goto release_ret;
++ }
++ memcpy(res, fw_entry->data, fw_entry->size);
++release_ret:
++ release_firmware(fw_entry);
++ return res;
++ }
++ printk("acx: firmware image '%s' was not provided. "
++ "Check your hotplug scripts\n", file);
++
++ /* checksum will be verified in write_fw, so don't bother here */
++ return res;
++}
++
++
++/***********************************************************************
++** acx_s_set_wepkey
++*/
++static void
++acx100_s_set_wepkey(acx_device_t *adev)
++{
++ ie_dot11WEPDefaultKey_t dk;
++ int i;
++
++ for (i = 0; i < DOT11_MAX_DEFAULT_WEP_KEYS; i++) {
++ if (adev->wep_keys[i].size != 0) {
++ log(L_INIT, "setting WEP key: %d with "
++ "total size: %d\n", i, (int) adev->wep_keys[i].size);
++ dk.action = 1;
++ dk.keySize = adev->wep_keys[i].size;
++ dk.defaultKeyNum = i;
++ memcpy(dk.key, adev->wep_keys[i].key, dk.keySize);
++ acx_s_configure(adev, &dk, ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE);
++ }
++ }
++}
++
++static void
++acx111_s_set_wepkey(acx_device_t *adev)
++{
++ acx111WEPDefaultKey_t dk;
++ int i;
++
++ for (i = 0; i < DOT11_MAX_DEFAULT_WEP_KEYS; i++) {
++ if (adev->wep_keys[i].size != 0) {
++ log(L_INIT, "setting WEP key: %d with "
++ "total size: %d\n", i, (int) adev->wep_keys[i].size);
++ memset(&dk, 0, sizeof(dk));
++ dk.action = cpu_to_le16(1); /* "add key"; yes, that's a 16bit value */
++ dk.keySize = adev->wep_keys[i].size;
++
++ /* are these two lines necessary? */
++ dk.type = 0; /* default WEP key */
++ dk.index = 0; /* ignored when setting default key */
++
++ dk.defaultKeyNum = i;
++ memcpy(dk.key, adev->wep_keys[i].key, dk.keySize);
++ acx_s_issue_cmd(adev, ACX1xx_CMD_WEP_MGMT, &dk, sizeof(dk));
++ }
++ }
++}
++
++static void
++acx_s_set_wepkey(acx_device_t *adev)
++{
++ if (IS_ACX111(adev))
++ acx111_s_set_wepkey(adev);
++ else
++ acx100_s_set_wepkey(adev);
++}
++
++
++/***********************************************************************
++** acx100_s_init_wep
++**
++** FIXME: this should probably be moved into the new card settings
++** management, but since we're also modifying the memory map layout here
++** due to the WEP key space we want, we should take care...
++*/
++static int
++acx100_s_init_wep(acx_device_t *adev)
++{
++ acx100_ie_wep_options_t options;
++ ie_dot11WEPDefaultKeyID_t dk;
++ acx_ie_memmap_t pt;
++ int res = NOT_OK;
++
++ FN_ENTER;
++
++ if (OK != acx_s_interrogate(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
++ goto fail;
++ }
++
++ log(L_DEBUG, "CodeEnd:%X\n", pt.CodeEnd);
++
++ pt.WEPCacheStart = cpu_to_le32(le32_to_cpu(pt.CodeEnd) + 0x4);
++ pt.WEPCacheEnd = cpu_to_le32(le32_to_cpu(pt.CodeEnd) + 0x4);
++
++ if (OK != acx_s_configure(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
++ goto fail;
++ }
++
++ /* let's choose maximum setting: 4 default keys, plus 10 other keys: */
++ options.NumKeys = cpu_to_le16(DOT11_MAX_DEFAULT_WEP_KEYS + 10);
++ options.WEPOption = 0x00;
++
++ log(L_ASSOC, "%s: writing WEP options\n", __func__);
++ acx_s_configure(adev, &options, ACX100_IE_WEP_OPTIONS);
++
++ acx100_s_set_wepkey(adev);
++
++ if (adev->wep_keys[adev->wep_current_index].size != 0) {
++ log(L_ASSOC, "setting active default WEP key number: %d\n",
++ adev->wep_current_index);
++ dk.KeyID = adev->wep_current_index;
++ acx_s_configure(adev, &dk, ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET); /* 0x1010 */
++ }
++ /* FIXME!!! wep_key_struct is filled nowhere! But adev
++ * is initialized to 0, and we don't REALLY need those keys either */
++/* for (i = 0; i < 10; i++) {
++ if (adev->wep_key_struct[i].len != 0) {
++ MAC_COPY(wep_mgmt.MacAddr, adev->wep_key_struct[i].addr);
++ wep_mgmt.KeySize = cpu_to_le16(adev->wep_key_struct[i].len);
++ memcpy(&wep_mgmt.Key, adev->wep_key_struct[i].key, le16_to_cpu(wep_mgmt.KeySize));
++ wep_mgmt.Action = cpu_to_le16(1);
++ log(L_ASSOC, "writing WEP key %d (len %d)\n", i, le16_to_cpu(wep_mgmt.KeySize));
++ if (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_WEP_MGMT, &wep_mgmt, sizeof(wep_mgmt))) {
++ adev->wep_key_struct[i].index = i;
++ }
++ }
++ }
++*/
++
++ /* now retrieve the updated WEPCacheEnd pointer... */
++ if (OK != acx_s_interrogate(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
++ printk("%s: ACX1xx_IE_MEMORY_MAP read #2 FAILED\n",
++ adev->ndev->name);
++ goto fail;
++ }
++ /* ...and tell it to start allocating templates at that location */
++ /* (no endianness conversion needed) */
++ pt.PacketTemplateStart = pt.WEPCacheEnd;
++
++ if (OK != acx_s_configure(adev, &pt, ACX1xx_IE_MEMORY_MAP)) {
++ printk("%s: ACX1xx_IE_MEMORY_MAP write #2 FAILED\n",
++ adev->ndev->name);
++ goto fail;
++ }
++ res = OK;
++
++fail:
++ FN_EXIT1(res);
++ return res;
++}
++
++
++static int
++acx_s_init_max_template_generic(acx_device_t *adev, unsigned int len, unsigned int cmd)
++{
++ int res;
++ union {
++ acx_template_nullframe_t null;
++ acx_template_beacon_t b;
++ acx_template_tim_t tim;
++ acx_template_probereq_t preq;
++ acx_template_proberesp_t presp;
++ } templ;
++
++ memset(&templ, 0, len);
++ templ.null.size = cpu_to_le16(len - 2);
++ res = acx_s_issue_cmd(adev, cmd, &templ, len);
++ return res;
++}
++
++static inline int
++acx_s_init_max_null_data_template(acx_device_t *adev)
++{
++ return acx_s_init_max_template_generic(
++ adev, sizeof(acx_template_nullframe_t), ACX1xx_CMD_CONFIG_NULL_DATA
++ );
++}
++
++static inline int
++acx_s_init_max_beacon_template(acx_device_t *adev)
++{
++ return acx_s_init_max_template_generic(
++ adev, sizeof(acx_template_beacon_t), ACX1xx_CMD_CONFIG_BEACON
++ );
++}
++
++static inline int
++acx_s_init_max_tim_template(acx_device_t *adev)
++{
++ return acx_s_init_max_template_generic(
++ adev, sizeof(acx_template_tim_t), ACX1xx_CMD_CONFIG_TIM
++ );
++}
++
++static inline int
++acx_s_init_max_probe_response_template(acx_device_t *adev)
++{
++ return acx_s_init_max_template_generic(
++ adev, sizeof(acx_template_proberesp_t), ACX1xx_CMD_CONFIG_PROBE_RESPONSE
++ );
++}
++
++static inline int
++acx_s_init_max_probe_request_template(acx_device_t *adev)
++{
++ return acx_s_init_max_template_generic(
++ adev, sizeof(acx_template_probereq_t), ACX1xx_CMD_CONFIG_PROBE_REQUEST
++ );
++}
++
++/***********************************************************************
++** acx_s_set_tim_template
++**
++** FIXME: In full blown driver we will regularly update partial virtual bitmap
++** by calling this function
++** (it can be done by irq handler on each DTIM irq or by timer...)
++
++[802.11 7.3.2.6] TIM information element:
++- 1 EID
++- 1 Length
++1 1 DTIM Count
++ indicates how many beacons (including this) appear before next DTIM
++ (0=this one is a DTIM)
++2 1 DTIM Period
++ number of beacons between successive DTIMs
++ (0=reserved, 1=all TIMs are DTIMs, 2=every other, etc)
++3 1 Bitmap Control
++ bit0: Traffic Indicator bit associated with Assoc ID 0 (Bcast AID?)
++ set to 1 in TIM elements with a value of 0 in the DTIM Count field
++ when one or more broadcast or multicast frames are buffered at the AP.
++ bit1-7: Bitmap Offset (logically Bitmap_Offset = Bitmap_Control & 0xFE).
++4 n Partial Virtual Bitmap
++ Visible part of traffic-indication bitmap.
++ Full bitmap consists of 2008 bits (251 octets) such that bit number N
++ (0<=N<=2007) in the bitmap corresponds to bit number (N mod 8)
++ in octet number N/8 where the low-order bit of each octet is bit0,
++ and the high order bit is bit7.
++ Each set bit in virtual bitmap corresponds to traffic buffered by AP
++ for a specific station (with corresponding AID?).
++ Partial Virtual Bitmap shows a part of bitmap which has non-zero.
++ Bitmap Offset is a number of skipped zero octets (see above).
++ 'Missing' octets at the tail are also assumed to be zero.
++ Example: Length=6, Bitmap_Offset=2, Partial_Virtual_Bitmap=55 55 55
++ This means that traffic-indication bitmap is:
++ 00000000 00000000 01010101 01010101 01010101 00000000 00000000...
++ (is bit0 in the map is always 0 and real value is in Bitmap Control bit0?)
++*/
++static int
++acx_s_set_tim_template(acx_device_t *adev)
++{
++/* For now, configure smallish test bitmap, all zero ("no pending data") */
++ enum { bitmap_size = 5 };
++
++ acx_template_tim_t t;
++ int result;
++
++ FN_ENTER;
++
++ memset(&t, 0, sizeof(t));
++ t.size = 5 + bitmap_size; /* eid+len+count+period+bmap_ctrl + bmap */
++ t.tim_eid = WLAN_EID_TIM;
++ t.len = 3 + bitmap_size; /* count+period+bmap_ctrl + bmap */
++ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_TIM, &t, sizeof(t));
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_fill_beacon_or_proberesp_template
++**
++** For frame format info, please see 802.11-1999.pdf item 7.2.3.9 and below!!
++**
++** NB: we use the fact that
++** struct acx_template_proberesp and struct acx_template_beacon are the same
++** (well, almost...)
++**
++** [802.11] Beacon's body consist of these IEs:
++** 1 Timestamp
++** 2 Beacon interval
++** 3 Capability information
++** 4 SSID
++** 5 Supported rates (up to 8 rates)
++** 6 FH Parameter Set (frequency-hopping PHYs only)
++** 7 DS Parameter Set (direct sequence PHYs only)
++** 8 CF Parameter Set (only if PCF is supported)
++** 9 IBSS Parameter Set (ad-hoc only)
++**
++** Beacon only:
++** 10 TIM (AP only) (see 802.11 7.3.2.6)
++** 11 Country Information (802.11d)
++** 12 FH Parameters (802.11d)
++** 13 FH Pattern Table (802.11d)
++** ... (?!! did not yet find relevant PDF file... --vda)
++** 19 ERP Information (extended rate PHYs)
++** 20 Extended Supported Rates (if more than 8 rates)
++**
++** Proberesp only:
++** 10 Country information (802.11d)
++** 11 FH Parameters (802.11d)
++** 12 FH Pattern Table (802.11d)
++** 13-n Requested information elements (802.11d)
++** ????
++** 18 ERP Information (extended rate PHYs)
++** 19 Extended Supported Rates (if more than 8 rates)
++*/
++static int
++acx_fill_beacon_or_proberesp_template(acx_device_t *adev,
++ struct acx_template_beacon *templ,
++ u16 fc /* in host order! */)
++{
++ int len;
++ u8 *p;
++
++ FN_ENTER;
++
++ memset(templ, 0, sizeof(*templ));
++ MAC_BCAST(templ->da);
++ MAC_COPY(templ->sa, adev->dev_addr);
++ MAC_COPY(templ->bssid, adev->bssid);
++
++ templ->beacon_interval = cpu_to_le16(adev->beacon_interval);
++ acx_update_capabilities(adev);
++ templ->cap = cpu_to_le16(adev->capabilities);
++
++ p = templ->variable;
++ p = wlan_fill_ie_ssid(p, adev->essid_len, adev->essid);
++ p = wlan_fill_ie_rates(p, adev->rate_supported_len, adev->rate_supported);
++ p = wlan_fill_ie_ds_parms(p, adev->channel);
++ /* NB: should go AFTER tim, but acx seem to keep tim last always */
++ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len, adev->rate_supported);
++
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ /* ATIM window */
++ p = wlan_fill_ie_ibss_parms(p, 0); break;
++ case ACX_MODE_3_AP:
++ /* TIM IE is set up as separate template */
++ break;
++ }
++
++ len = p - (u8*)templ;
++ templ->fc = cpu_to_le16(WF_FTYPE_MGMT | fc);
++ /* - 2: do not count 'u16 size' field */
++ templ->size = cpu_to_le16(len - 2);
++
++ FN_EXIT1(len);
++ return len;
++}
++
++
++#if POWER_SAVE_80211
++/***********************************************************************
++** acx_s_set_null_data_template
++*/
++static int
++acx_s_set_null_data_template(acx_device_t *adev)
++{
++ struct acx_template_nullframe b;
++ int result;
++
++ FN_ENTER;
++
++ /* memset(&b, 0, sizeof(b)); not needed, setting all members */
++
++ b.size = cpu_to_le16(sizeof(b) - 2);
++ b.hdr.fc = WF_FTYPE_MGMTi | WF_FSTYPE_NULLi;
++ b.hdr.dur = 0;
++ MAC_BCAST(b.hdr.a1);
++ MAC_COPY(b.hdr.a2, adev->dev_addr);
++ MAC_COPY(b.hdr.a3, adev->bssid);
++ b.hdr.seq = 0;
++
++ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_NULL_DATA, &b, sizeof(b));
++
++ FN_EXIT1(result);
++ return result;
++}
++#endif
++
++
++/***********************************************************************
++** acx_s_set_beacon_template
++*/
++static int
++acx_s_set_beacon_template(acx_device_t *adev)
++{
++ struct acx_template_beacon bcn;
++ int len, result;
++
++ FN_ENTER;
++
++ len = acx_fill_beacon_or_proberesp_template(adev, &bcn, WF_FSTYPE_BEACON);
++ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_BEACON, &bcn, len);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_s_set_probe_response_template
++*/
++static int
++acx_s_set_probe_response_template(acx_device_t *adev)
++{
++ struct acx_template_proberesp pr;
++ int len, result;
++
++ FN_ENTER;
++
++ len = acx_fill_beacon_or_proberesp_template(adev, &pr, WF_FSTYPE_PROBERESP);
++ result = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_PROBE_RESPONSE, &pr, len);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_s_init_packet_templates()
++**
++** NOTE: order is very important here, to have a correct memory layout!
++** init templates: max Probe Request (station mode), max NULL data,
++** max Beacon, max TIM, max Probe Response.
++*/
++static int
++acx_s_init_packet_templates(acx_device_t *adev)
++{
++ acx_ie_memmap_t mm; /* ACX100 only */
++ int result = NOT_OK;
++
++ FN_ENTER;
++
++ log(L_DEBUG|L_INIT, "initializing max packet templates\n");
++
++ if (OK != acx_s_init_max_probe_request_template(adev))
++ goto failed;
++
++ if (OK != acx_s_init_max_null_data_template(adev))
++ goto failed;
++
++ if (OK != acx_s_init_max_beacon_template(adev))
++ goto failed;
++
++ if (OK != acx_s_init_max_tim_template(adev))
++ goto failed;
++
++ if (OK != acx_s_init_max_probe_response_template(adev))
++ goto failed;
++
++ if (IS_ACX111(adev)) {
++ /* ACX111 doesn't need the memory map magic below,
++ * and the other templates will be set later (acx_start) */
++ result = OK;
++ goto success;
++ }
++
++ /* ACX100 will have its TIM template set,
++ * and we also need to update the memory map */
++
++ if (OK != acx_s_set_tim_template(adev))
++ goto failed_acx100;
++
++ log(L_DEBUG, "sizeof(memmap)=%d bytes\n", (int)sizeof(mm));
++
++ if (OK != acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP))
++ goto failed_acx100;
++
++ mm.QueueStart = cpu_to_le32(le32_to_cpu(mm.PacketTemplateEnd) + 4);
++ if (OK != acx_s_configure(adev, &mm, ACX1xx_IE_MEMORY_MAP))
++ goto failed_acx100;
++
++ result = OK;
++ goto success;
++
++failed_acx100:
++ log(L_DEBUG|L_INIT,
++ /* "cb=0x%X\n" */
++ "ACXMemoryMap:\n"
++ ".CodeStart=0x%X\n"
++ ".CodeEnd=0x%X\n"
++ ".WEPCacheStart=0x%X\n"
++ ".WEPCacheEnd=0x%X\n"
++ ".PacketTemplateStart=0x%X\n"
++ ".PacketTemplateEnd=0x%X\n",
++ /* len, */
++ le32_to_cpu(mm.CodeStart),
++ le32_to_cpu(mm.CodeEnd),
++ le32_to_cpu(mm.WEPCacheStart),
++ le32_to_cpu(mm.WEPCacheEnd),
++ le32_to_cpu(mm.PacketTemplateStart),
++ le32_to_cpu(mm.PacketTemplateEnd));
++
++failed:
++ printk("%s: %s() FAILED\n", adev->ndev->name, __func__);
++
++success:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_s_set_probe_request_template(acx_device_t *adev)
++{
++ struct acx_template_probereq probereq;
++ char *p;
++ int res;
++ int frame_len;
++
++ FN_ENTER;
++
++ memset(&probereq, 0, sizeof(probereq));
++
++ probereq.fc = WF_FTYPE_MGMTi | WF_FSTYPE_PROBEREQi;
++ MAC_BCAST(probereq.da);
++ MAC_COPY(probereq.sa, adev->dev_addr);
++ MAC_BCAST(probereq.bssid);
++
++ p = probereq.variable;
++ p = wlan_fill_ie_ssid(p, adev->essid_len, adev->essid);
++ p = wlan_fill_ie_rates(p, adev->rate_supported_len, adev->rate_supported);
++ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len, adev->rate_supported);
++ frame_len = p - (char*)&probereq;
++ probereq.size = cpu_to_le16(frame_len - 2);
++
++ res = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIG_PROBE_REQUEST, &probereq, frame_len);
++ FN_EXIT0;
++ return res;
++}
++
++
++/***********************************************************************
++** acx_s_init_mac
++*/
++int
++acx_s_init_mac(acx_device_t *adev)
++{
++ int result = NOT_OK;
++
++ FN_ENTER;
++
++ if (IS_ACX111(adev)) {
++ adev->ie_len = acx111_ie_len;
++ adev->ie_len_dot11 = acx111_ie_len_dot11;
++ } else {
++ adev->ie_len = acx100_ie_len;
++ adev->ie_len_dot11 = acx100_ie_len_dot11;
++ }
++
++#if defined (ACX_MEM)
++ adev->memblocksize = 256; /* 256 is default */
++ /* try to load radio for both ACX100 and ACX111, since both
++ * chips have at least some firmware versions making use of an
++ * external radio module */
++ acxmem_s_upload_radio(adev);
++#else
++ if (IS_PCI(adev)) {
++ adev->memblocksize = 256; /* 256 is default */
++ /* try to load radio for both ACX100 and ACX111, since both
++ * chips have at least some firmware versions making use of an
++ * external radio module */
++ acxpci_s_upload_radio(adev);
++ } else {
++ adev->memblocksize = 128;
++ }
++#endif
++
++ if (IS_ACX111(adev)) {
++ /* for ACX111, the order is different from ACX100
++ 1. init packet templates
++ 2. create station context and create dma regions
++ 3. init wep default keys
++ */
++ if (OK != acx_s_init_packet_templates(adev))
++ goto fail;
++ if (OK != acx111_s_create_dma_regions(adev)) {
++ printk("%s: acx111_create_dma_regions FAILED\n",
++ adev->ndev->name);
++ goto fail;
++ }
++ } else {
++ if (OK != acx100_s_init_wep(adev))
++ goto fail;
++ if (OK != acx_s_init_packet_templates(adev))
++ goto fail;
++ if (OK != acx100_s_create_dma_regions(adev)) {
++ printk("%s: acx100_create_dma_regions FAILED\n",
++ adev->ndev->name);
++ goto fail;
++ }
++ }
++
++ MAC_COPY(adev->ndev->dev_addr, adev->dev_addr);
++ result = OK;
++
++fail:
++ if (result)
++ printk("acx: init_mac() FAILED\n");
++ FN_EXIT1(result);
++ return result;
++}
++
++
++void
++acx_s_set_sane_reg_domain(acx_device_t *adev, int do_set)
++{
++ unsigned mask;
++
++ unsigned int i;
++
++ for (i = 0; i < sizeof(acx_reg_domain_ids); i++)
++ if (acx_reg_domain_ids[i] == adev->reg_dom_id)
++ break;
++
++ if (sizeof(acx_reg_domain_ids) == i) {
++ log(L_INIT, "Invalid or unsupported regulatory domain"
++ " 0x%02X specified, falling back to FCC (USA)!"
++ " Please report if this sounds fishy!\n",
++ adev->reg_dom_id);
++ i = 0;
++ adev->reg_dom_id = acx_reg_domain_ids[i];
++
++ /* since there was a mismatch, we need to force updating */
++ do_set = 1;
++ }
++
++ if (do_set) {
++ acx_ie_generic_t dom;
++ dom.m.bytes[0] = adev->reg_dom_id;
++ acx_s_configure(adev, &dom, ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN);
++ }
++
++ adev->reg_dom_chanmask = reg_domain_channel_masks[i];
++
++ mask = (1 << (adev->channel - 1));
++ if (!(adev->reg_dom_chanmask & mask)) {
++ /* hmm, need to adjust our channel to reside within domain */
++ mask = 1;
++ for (i = 1; i <= 14; i++) {
++ if (adev->reg_dom_chanmask & mask) {
++ printk("%s: adjusting selected channel from %d "
++ "to %d due to new regulatory domain\n",
++ adev->ndev->name, adev->channel, i);
++ adev->channel = i;
++ break;
++ }
++ mask <<= 1;
++ }
++ }
++}
++
++
++#if POWER_SAVE_80211
++static void
++acx_s_update_80211_powersave_mode(acx_device_t *adev)
++{
++ /* merge both structs in a union to be able to have common code */
++ union {
++ acx111_ie_powersave_t acx111;
++ acx100_ie_powersave_t acx100;
++ } pm;
++
++ /* change 802.11 power save mode settings */
++ log(L_INIT, "updating 802.11 power save mode settings: "
++ "wakeup_cfg 0x%02X, listen interval %u, "
++ "options 0x%02X, hangover period %u, "
++ "enhanced_ps_transition_time %u\n",
++ adev->ps_wakeup_cfg, adev->ps_listen_interval,
++ adev->ps_options, adev->ps_hangover_period,
++ adev->ps_enhanced_transition_time);
++ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT);
++ log(L_INIT, "Previous PS mode settings: wakeup_cfg 0x%02X, "
++ "listen interval %u, options 0x%02X, "
++ "hangover period %u, "
++ "enhanced_ps_transition_time %u, beacon_rx_time %u\n",
++ pm.acx111.wakeup_cfg,
++ pm.acx111.listen_interval,
++ pm.acx111.options,
++ pm.acx111.hangover_period,
++ IS_ACX111(adev) ?
++ pm.acx111.enhanced_ps_transition_time
++ : pm.acx100.enhanced_ps_transition_time,
++ IS_ACX111(adev) ?
++ pm.acx111.beacon_rx_time
++ : (u32)-1
++ );
++ pm.acx111.wakeup_cfg = adev->ps_wakeup_cfg;
++ pm.acx111.listen_interval = adev->ps_listen_interval;
++ pm.acx111.options = adev->ps_options;
++ pm.acx111.hangover_period = adev->ps_hangover_period;
++ if (IS_ACX111(adev)) {
++ pm.acx111.beacon_rx_time = cpu_to_le32(adev->ps_beacon_rx_time);
++ pm.acx111.enhanced_ps_transition_time = cpu_to_le32(adev->ps_enhanced_transition_time);
++ } else {
++ pm.acx100.enhanced_ps_transition_time = cpu_to_le16(adev->ps_enhanced_transition_time);
++ }
++ acx_s_configure(adev, &pm, ACX1xx_IE_POWER_MGMT);
++ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT);
++ log(L_INIT, "wakeup_cfg: 0x%02X\n", pm.acx111.wakeup_cfg);
++ acx_s_msleep(40);
++ acx_s_interrogate(adev, &pm, ACX1xx_IE_POWER_MGMT);
++ log(L_INIT, "wakeup_cfg: 0x%02X\n", pm.acx111.wakeup_cfg);
++ log(L_INIT, "power save mode change %s\n",
++ (pm.acx111.wakeup_cfg & PS_CFG_PENDING) ? "FAILED" : "was successful");
++ /* FIXME: maybe verify via PS_CFG_PENDING bit here
++ * that power save mode change was successful. */
++ /* FIXME: we shouldn't trigger a scan immediately after
++ * fiddling with power save mode (since the firmware is sending
++ * a NULL frame then). */
++}
++#endif
++
++
++/***********************************************************************
++** acx_s_update_card_settings
++**
++** Applies accumulated changes in various adev->xxxx members
++** Called by ioctl commit handler, acx_start, acx_set_defaults,
++** acx_s_after_interrupt_task (if IRQ_CMD_UPDATE_CARD_CFG),
++*/
++static void
++acx111_s_sens_radio_16_17(acx_device_t *adev)
++{
++ u32 feature1, feature2;
++
++ if ((adev->sensitivity < 1) || (adev->sensitivity > 3)) {
++ printk("%s: invalid sensitivity setting (1..3), "
++ "setting to 1\n", adev->ndev->name);
++ adev->sensitivity = 1;
++ }
++ acx111_s_get_feature_config(adev, &feature1, &feature2);
++ CLEAR_BIT(feature1, FEATURE1_LOW_RX|FEATURE1_EXTRA_LOW_RX);
++ if (adev->sensitivity > 1)
++ SET_BIT(feature1, FEATURE1_LOW_RX);
++ if (adev->sensitivity > 2)
++ SET_BIT(feature1, FEATURE1_EXTRA_LOW_RX);
++ acx111_s_feature_set(adev, feature1, feature2);
++}
++
++
++void
++acx_s_update_card_settings(acx_device_t *adev)
++{
++ unsigned long flags;
++ unsigned int start_scan = 0;
++ int i;
++
++ FN_ENTER;
++
++ log(L_INIT, "get_mask 0x%08X, set_mask 0x%08X\n",
++ adev->get_mask, adev->set_mask);
++
++ /* Track dependencies betweed various settings */
++
++ if (adev->set_mask & (GETSET_MODE|GETSET_RESCAN|GETSET_WEP)) {
++ log(L_INIT, "important setting has been changed. "
++ "Need to update packet templates, too\n");
++ SET_BIT(adev->set_mask, SET_TEMPLATES);
++ }
++ if (adev->set_mask & GETSET_CHANNEL) {
++ /* This will actually tune RX/TX to the channel */
++ SET_BIT(adev->set_mask, GETSET_RX|GETSET_TX);
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_3_AP:
++ /* Beacons contain channel# - update them */
++ SET_BIT(adev->set_mask, SET_TEMPLATES);
++ }
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_2_STA:
++ start_scan = 1;
++ }
++ }
++
++ /* Apply settings */
++
++#ifdef WHY_SHOULD_WE_BOTHER /* imagine we were just powered off */
++ /* send a disassoc request in case it's required */
++ if (adev->set_mask & (GETSET_MODE|GETSET_RESCAN|GETSET_CHANNEL|GETSET_WEP)) {
++ if (ACX_MODE_2_STA == adev->mode) {
++ if (ACX_STATUS_4_ASSOCIATED == adev->status) {
++ log(L_ASSOC, "we were ASSOCIATED - "
++ "sending disassoc request\n");
++ acx_lock(adev, flags);
++ acx_l_transmit_disassoc(adev, NULL);
++ /* FIXME: deauth? */
++ acx_unlock(adev, flags);
++ }
++ /* need to reset some other stuff as well */
++ log(L_DEBUG, "resetting bssid\n");
++ MAC_ZERO(adev->bssid);
++ SET_BIT(adev->set_mask, SET_TEMPLATES|SET_STA_LIST);
++ start_scan = 1;
++ }
++ }
++#endif
++
++ if (adev->get_mask & GETSET_STATION_ID) {
++ u8 stationID[4 + ACX1xx_IE_DOT11_STATION_ID_LEN];
++ const u8 *paddr;
++
++ acx_s_interrogate(adev, &stationID, ACX1xx_IE_DOT11_STATION_ID);
++ paddr = &stationID[4];
++ for (i = 0; i < ETH_ALEN; i++) {
++ /* we copy the MAC address (reversed in
++ * the card) to the netdevice's MAC
++ * address, and on ifup it will be
++ * copied into iwadev->dev_addr */
++ adev->ndev->dev_addr[ETH_ALEN - 1 - i] = paddr[i];
++ }
++ CLEAR_BIT(adev->get_mask, GETSET_STATION_ID);
++ }
++
++ if (adev->get_mask & GETSET_SENSITIVITY) {
++ if ((RADIO_RFMD_11 == adev->radio_type)
++ || (RADIO_MAXIM_0D == adev->radio_type)
++ || (RADIO_RALINK_15 == adev->radio_type)) {
++ acx_s_read_phy_reg(adev, 0x30, &adev->sensitivity);
++ } else {
++ log(L_INIT, "don't know how to get sensitivity "
++ "for radio type 0x%02X\n", adev->radio_type);
++ adev->sensitivity = 0;
++ }
++ log(L_INIT, "got sensitivity value %u\n", adev->sensitivity);
++
++ CLEAR_BIT(adev->get_mask, GETSET_SENSITIVITY);
++ }
++
++ if (adev->get_mask & GETSET_ANTENNA) {
++ u8 antenna[4 + ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN];
++
++ memset(antenna, 0, sizeof(antenna));
++ acx_s_interrogate(adev, antenna, ACX1xx_IE_DOT11_CURRENT_ANTENNA);
++ adev->antenna = antenna[4];
++ log(L_INIT, "got antenna value 0x%02X\n", adev->antenna);
++ CLEAR_BIT(adev->get_mask, GETSET_ANTENNA);
++ }
++
++ if (adev->get_mask & GETSET_ED_THRESH) {
++ if (IS_ACX100(adev)) {
++ u8 ed_threshold[4 + ACX100_IE_DOT11_ED_THRESHOLD_LEN];
++
++ memset(ed_threshold, 0, sizeof(ed_threshold));
++ acx_s_interrogate(adev, ed_threshold, ACX100_IE_DOT11_ED_THRESHOLD);
++ adev->ed_threshold = ed_threshold[4];
++ } else {
++ log(L_INIT, "acx111 doesn't support ED\n");
++ adev->ed_threshold = 0;
++ }
++ log(L_INIT, "got Energy Detect (ED) threshold %u\n", adev->ed_threshold);
++ CLEAR_BIT(adev->get_mask, GETSET_ED_THRESH);
++ }
++
++ if (adev->get_mask & GETSET_CCA) {
++ if (IS_ACX100(adev)) {
++ u8 cca[4 + ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN];
++
++ memset(cca, 0, sizeof(adev->cca));
++ acx_s_interrogate(adev, cca, ACX1xx_IE_DOT11_CURRENT_CCA_MODE);
++ adev->cca = cca[4];
++ } else {
++ log(L_INIT, "acx111 doesn't support CCA\n");
++ adev->cca = 0;
++ }
++ log(L_INIT, "got Channel Clear Assessment (CCA) value %u\n", adev->cca);
++ CLEAR_BIT(adev->get_mask, GETSET_CCA);
++ }
++
++ if (adev->get_mask & GETSET_REG_DOMAIN) {
++ acx_ie_generic_t dom;
++
++ acx_s_interrogate(adev, &dom, ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN);
++ adev->reg_dom_id = dom.m.bytes[0];
++ acx_s_set_sane_reg_domain(adev, 0);
++ log(L_INIT, "got regulatory domain 0x%02X\n", adev->reg_dom_id);
++ CLEAR_BIT(adev->get_mask, GETSET_REG_DOMAIN);
++ }
++
++ if (adev->set_mask & GETSET_STATION_ID) {
++ u8 stationID[4 + ACX1xx_IE_DOT11_STATION_ID_LEN];
++ u8 *paddr;
++
++ paddr = &stationID[4];
++ memcpy(adev->dev_addr, adev->ndev->dev_addr, ETH_ALEN);
++ for (i = 0; i < ETH_ALEN; i++) {
++ /* copy the MAC address we obtained when we noticed
++ * that the ethernet iface's MAC changed
++ * to the card (reversed in
++ * the card!) */
++ paddr[i] = adev->dev_addr[ETH_ALEN - 1 - i];
++ }
++ acx_s_configure(adev, &stationID, ACX1xx_IE_DOT11_STATION_ID);
++ CLEAR_BIT(adev->set_mask, GETSET_STATION_ID);
++ }
++
++ if (adev->set_mask & SET_TEMPLATES) {
++ log(L_INIT, "updating packet templates\n");
++ switch (adev->mode) {
++ case ACX_MODE_2_STA:
++ acx_s_set_probe_request_template(adev);
++#if POWER_SAVE_80211
++ acx_s_set_null_data_template(adev);
++#endif
++ break;
++ case ACX_MODE_0_ADHOC:
++ acx_s_set_probe_request_template(adev);
++#if POWER_SAVE_80211
++ /* maybe power save functionality is somehow possible
++ * for Ad-Hoc mode, too... FIXME: verify it somehow? firmware debug fields? */
++ acx_s_set_null_data_template(adev);
++#endif
++ /* fall through */
++ case ACX_MODE_3_AP:
++ acx_s_set_beacon_template(adev);
++ acx_s_set_tim_template(adev);
++ /* BTW acx111 firmware would not send probe responses
++ ** if probe request does not have all basic rates flagged
++ ** by 0x80! Thus firmware does not conform to 802.11,
++ ** it should ignore 0x80 bit in ratevector from STA.
++ ** We can 'fix' it by not using this template and
++ ** sending probe responses by hand. TODO --vda */
++ acx_s_set_probe_response_template(adev);
++ }
++ /* Needed if generated frames are to be emitted at different tx rate now */
++ log(L_IRQ, "redoing cmd_join_bssid() after template cfg\n");
++ acx_s_cmd_join_bssid(adev, adev->bssid);
++ CLEAR_BIT(adev->set_mask, SET_TEMPLATES);
++ }
++ if (adev->set_mask & SET_STA_LIST) {
++ acx_lock(adev, flags);
++ acx_l_sta_list_init(adev);
++ CLEAR_BIT(adev->set_mask, SET_STA_LIST);
++ acx_unlock(adev, flags);
++ }
++ if (adev->set_mask & SET_RATE_FALLBACK) {
++ u8 rate[4 + ACX1xx_IE_RATE_FALLBACK_LEN];
++
++ /* configure to not do fallbacks when not in auto rate mode */
++ rate[4] = (adev->rate_auto) ? /* adev->txrate_fallback_retries */ 1 : 0;
++ log(L_INIT, "updating Tx fallback to %u retries\n", rate[4]);
++ acx_s_configure(adev, &rate, ACX1xx_IE_RATE_FALLBACK);
++ CLEAR_BIT(adev->set_mask, SET_RATE_FALLBACK);
++ }
++ if (adev->set_mask & GETSET_TXPOWER) {
++ log(L_INIT, "updating transmit power: %u dBm\n",
++ adev->tx_level_dbm);
++ acx_s_set_tx_level(adev, adev->tx_level_dbm);
++ CLEAR_BIT(adev->set_mask, GETSET_TXPOWER);
++ }
++
++ if (adev->set_mask & GETSET_SENSITIVITY) {
++ log(L_INIT, "updating sensitivity value: %u\n",
++ adev->sensitivity);
++ switch (adev->radio_type) {
++ case RADIO_RFMD_11:
++ case RADIO_MAXIM_0D:
++ case RADIO_RALINK_15:
++ acx_s_write_phy_reg(adev, 0x30, adev->sensitivity);
++ break;
++ case RADIO_RADIA_16:
++ case RADIO_UNKNOWN_17:
++ acx111_s_sens_radio_16_17(adev);
++ break;
++ default:
++ log(L_INIT, "don't know how to modify sensitivity "
++ "for radio type 0x%02X\n", adev->radio_type);
++ }
++ CLEAR_BIT(adev->set_mask, GETSET_SENSITIVITY);
++ }
++
++ if (adev->set_mask & GETSET_ANTENNA) {
++ /* antenna */
++ u8 antenna[4 + ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN];
++
++ memset(antenna, 0, sizeof(antenna));
++ antenna[4] = adev->antenna;
++ log(L_INIT, "updating antenna value: 0x%02X\n",
++ adev->antenna);
++ acx_s_configure(adev, &antenna, ACX1xx_IE_DOT11_CURRENT_ANTENNA);
++ CLEAR_BIT(adev->set_mask, GETSET_ANTENNA);
++ }
++
++ if (adev->set_mask & GETSET_ED_THRESH) {
++ /* ed_threshold */
++ log(L_INIT, "updating Energy Detect (ED) threshold: %u\n",
++ adev->ed_threshold);
++ if (IS_ACX100(adev)) {
++ u8 ed_threshold[4 + ACX100_IE_DOT11_ED_THRESHOLD_LEN];
++
++ memset(ed_threshold, 0, sizeof(ed_threshold));
++ ed_threshold[4] = adev->ed_threshold;
++ acx_s_configure(adev, &ed_threshold, ACX100_IE_DOT11_ED_THRESHOLD);
++ }
++ else
++ log(L_INIT, "acx111 doesn't support ED!\n");
++ CLEAR_BIT(adev->set_mask, GETSET_ED_THRESH);
++ }
++
++ if (adev->set_mask & GETSET_CCA) {
++ /* CCA value */
++ log(L_INIT, "updating Channel Clear Assessment "
++ "(CCA) value: 0x%02X\n", adev->cca);
++ if (IS_ACX100(adev)) {
++ u8 cca[4 + ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN];
++
++ memset(cca, 0, sizeof(cca));
++ cca[4] = adev->cca;
++ acx_s_configure(adev, &cca, ACX1xx_IE_DOT11_CURRENT_CCA_MODE);
++ }
++ else
++ log(L_INIT, "acx111 doesn't support CCA!\n");
++ CLEAR_BIT(adev->set_mask, GETSET_CCA);
++ }
++
++ if (adev->set_mask & GETSET_LED_POWER) {
++ /* Enable Tx */
++ log(L_INIT, "updating power LED status: %u\n", adev->led_power);
++
++ acx_lock(adev, flags);
++#if defined (ACX_MEM)
++ acxmem_l_power_led(adev, adev->led_power);
++#else
++ if (IS_PCI(adev))
++ acxpci_l_power_led(adev, adev->led_power);
++#endif
++ CLEAR_BIT(adev->set_mask, GETSET_LED_POWER);
++ acx_unlock(adev, flags);
++ }
++
++ if (adev->set_mask & GETSET_POWER_80211) {
++#if POWER_SAVE_80211
++ acx_s_update_80211_powersave_mode(adev);
++#endif
++ CLEAR_BIT(adev->set_mask, GETSET_POWER_80211);
++ }
++
++ if (adev->set_mask & GETSET_CHANNEL) {
++ /* channel */
++ log(L_INIT, "updating channel to: %u\n", adev->channel);
++ CLEAR_BIT(adev->set_mask, GETSET_CHANNEL);
++ }
++
++ if (adev->set_mask & GETSET_TX) {
++ /* set Tx */
++ log(L_INIT, "updating: %s Tx\n",
++ adev->tx_disabled ? "disable" : "enable");
++ if (adev->tx_disabled)
++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
++ else
++ acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_TX, &adev->channel, 1);
++ CLEAR_BIT(adev->set_mask, GETSET_TX);
++ }
++
++ if (adev->set_mask & GETSET_RX) {
++ /* Enable Rx */
++ log(L_INIT, "updating: enable Rx on channel: %u\n",
++ adev->channel);
++ acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_RX, &adev->channel, 1);
++ CLEAR_BIT(adev->set_mask, GETSET_RX);
++ }
++
++ if (adev->set_mask & GETSET_RETRY) {
++ u8 short_retry[4 + ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN];
++ u8 long_retry[4 + ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN];
++
++ log(L_INIT, "updating short retry limit: %u, long retry limit: %u\n",
++ adev->short_retry, adev->long_retry);
++ short_retry[0x4] = adev->short_retry;
++ long_retry[0x4] = adev->long_retry;
++ acx_s_configure(adev, &short_retry, ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT);
++ acx_s_configure(adev, &long_retry, ACX1xx_IE_DOT11_LONG_RETRY_LIMIT);
++ CLEAR_BIT(adev->set_mask, GETSET_RETRY);
++ }
++
++ if (adev->set_mask & SET_MSDU_LIFETIME) {
++ u8 xmt_msdu_lifetime[4 + ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN];
++
++ log(L_INIT, "updating tx MSDU lifetime: %u\n",
++ adev->msdu_lifetime);
++ *(u32 *)&xmt_msdu_lifetime[4] = cpu_to_le32((u32)adev->msdu_lifetime);
++ acx_s_configure(adev, &xmt_msdu_lifetime, ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME);
++ CLEAR_BIT(adev->set_mask, SET_MSDU_LIFETIME);
++ }
++
++ if (adev->set_mask & GETSET_REG_DOMAIN) {
++ log(L_INIT, "updating regulatory domain: 0x%02X\n",
++ adev->reg_dom_id);
++ acx_s_set_sane_reg_domain(adev, 1);
++ CLEAR_BIT(adev->set_mask, GETSET_REG_DOMAIN);
++ }
++
++ if (adev->set_mask & GETSET_MODE) {
++ adev->ndev->type = (adev->mode == ACX_MODE_MONITOR) ?
++ adev->monitor_type : ARPHRD_ETHER;
++
++ switch (adev->mode) {
++ case ACX_MODE_3_AP:
++
++ acx_lock(adev, flags);
++ acx_l_sta_list_init(adev);
++ adev->aid = 0;
++ adev->ap_client = NULL;
++ MAC_COPY(adev->bssid, adev->dev_addr);
++ /* this basically says "we're connected" */
++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
++ acx_unlock(adev, flags);
++
++ acx111_s_feature_off(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER);
++ /* start sending beacons */
++ acx_s_cmd_join_bssid(adev, adev->bssid);
++ break;
++ case ACX_MODE_MONITOR:
++ acx111_s_feature_on(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER);
++ /* this stops beacons */
++ acx_s_cmd_join_bssid(adev, adev->bssid);
++ /* this basically says "we're connected" */
++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
++ SET_BIT(adev->set_mask, SET_RXCONFIG|SET_WEP_OPTIONS);
++ break;
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_2_STA:
++ acx111_s_feature_off(adev, 0, FEATURE2_NO_TXCRYPT|FEATURE2_SNIFFER);
++
++ acx_lock(adev, flags);
++ adev->aid = 0;
++ adev->ap_client = NULL;
++ acx_unlock(adev, flags);
++
++ /* we want to start looking for peer or AP */
++ start_scan = 1;
++ break;
++ case ACX_MODE_OFF:
++ /* TODO: disable RX/TX, stop any scanning activity etc: */
++ /* adev->tx_disabled = 1; */
++ /* SET_BIT(adev->set_mask, GETSET_RX|GETSET_TX); */
++
++ /* This stops beacons (invalid macmode...) */
++ acx_s_cmd_join_bssid(adev, adev->bssid);
++ acx_set_status(adev, ACX_STATUS_0_STOPPED);
++ break;
++ }
++ CLEAR_BIT(adev->set_mask, GETSET_MODE);
++ }
++
++ if (adev->set_mask & SET_RXCONFIG) {
++ acx_s_initialize_rx_config(adev);
++ CLEAR_BIT(adev->set_mask, SET_RXCONFIG);
++ }
++
++ if (adev->set_mask & GETSET_RESCAN) {
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_2_STA:
++ start_scan = 1;
++ break;
++ }
++ CLEAR_BIT(adev->set_mask, GETSET_RESCAN);
++ }
++
++ if (adev->set_mask & GETSET_WEP) {
++ /* encode */
++
++ ie_dot11WEPDefaultKeyID_t dkey;
++#ifdef DEBUG_WEP
++ struct {
++ u16 type;
++ u16 len;
++ u8 val;
++ } ACX_PACKED keyindic;
++#endif
++ log(L_INIT, "updating WEP key settings\n");
++
++ acx_s_set_wepkey(adev);
++
++ dkey.KeyID = adev->wep_current_index;
++ log(L_INIT, "setting WEP key %u as default\n", dkey.KeyID);
++ acx_s_configure(adev, &dkey, ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET);
++#ifdef DEBUG_WEP
++ keyindic.val = 3;
++ acx_s_configure(adev, &keyindic, ACX111_IE_KEY_CHOOSE);
++#endif
++ start_scan = 1;
++ CLEAR_BIT(adev->set_mask, GETSET_WEP);
++ }
++
++ if (adev->set_mask & SET_WEP_OPTIONS) {
++ acx100_ie_wep_options_t options;
++ if (IS_ACX111(adev)) {
++ log(L_DEBUG, "setting WEP Options for acx111 is not supported\n");
++ } else {
++ log(L_INIT, "setting WEP Options\n");
++ acx100_s_init_wep(adev);
++#if 0
++ /* let's choose maximum setting: 4 default keys,
++ * plus 10 other keys: */
++ options.NumKeys = cpu_to_le16(DOT11_MAX_DEFAULT_WEP_KEYS + 10);
++ /* don't decrypt default key only,
++ * don't override decryption: */
++ options.WEPOption = 0;
++ if (adev->mode == ACX_MODE_MONITOR) {
++ /* don't decrypt default key only,
++ * override decryption mechanism: */
++ options.WEPOption = 2;
++ }
++
++ acx_s_configure(adev, &options, ACX100_IE_WEP_OPTIONS);
++#endif
++ }
++ CLEAR_BIT(adev->set_mask, SET_WEP_OPTIONS);
++ }
++
++ /* Rescan was requested */
++ if (start_scan) {
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_2_STA:
++ /* We can avoid clearing list if join code
++ ** will be a bit more clever about not picking
++ ** 'bad' AP over and over again */
++ acx_lock(adev, flags);
++ adev->ap_client = NULL;
++ acx_l_sta_list_init(adev);
++ acx_set_status(adev, ACX_STATUS_1_SCANNING);
++ acx_unlock(adev, flags);
++
++ acx_s_cmd_start_scan(adev);
++ }
++ }
++
++ /* debug, rate, and nick don't need any handling */
++ /* what about sniffing mode?? */
++
++ log(L_INIT, "get_mask 0x%08X, set_mask 0x%08X - after update\n",
++ adev->get_mask, adev->set_mask);
++
++/* end: */
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_e_after_interrupt_task
++*/
++static int
++acx_s_recalib_radio(acx_device_t *adev)
++{
++ if (IS_ACX111(adev)) {
++ acx111_cmd_radiocalib_t cal;
++
++ printk("%s: recalibrating radio\n", adev->ndev->name);
++ /* automatic recalibration, choose all methods: */
++ cal.methods = cpu_to_le32(0x8000000f);
++ /* automatic recalibration every 60 seconds (value in TUs)
++ * I wonder what the firmware default here is? */
++ cal.interval = cpu_to_le32(58594);
++ return acx_s_issue_cmd_timeo(adev, ACX111_CMD_RADIOCALIB,
++ &cal, sizeof(cal), CMD_TIMEOUT_MS(100));
++ } else {
++ /* On ACX100, we need to recalibrate the radio
++ * by issuing a GETSET_TX|GETSET_RX */
++ if (/* (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0)) &&
++ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0)) && */
++ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_TX, &adev->channel, 1)) &&
++ (OK == acx_s_issue_cmd(adev, ACX1xx_CMD_ENABLE_RX, &adev->channel, 1)) )
++ return OK;
++ return NOT_OK;
++ }
++}
++
++static void
++acx_s_after_interrupt_recalib(acx_device_t *adev)
++{
++ int res;
++
++ /* this helps with ACX100 at least;
++ * hopefully ACX111 also does a
++ * recalibration here */
++
++ /* clear flag beforehand, since we want to make sure
++ * it's cleared; then only set it again on specific circumstances */
++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
++
++ /* better wait a bit between recalibrations to
++ * prevent overheating due to torturing the card
++ * into working too long despite high temperature
++ * (just a safety measure) */
++ if (adev->recalib_time_last_success
++ && time_before(jiffies, adev->recalib_time_last_success
++ + RECALIB_PAUSE * 60 * HZ)) {
++ if (adev->recalib_msg_ratelimit <= 4) {
++ printk("%s: less than " STRING(RECALIB_PAUSE)
++ " minutes since last radio recalibration, "
++ "not recalibrating (maybe card is too hot?)\n",
++ adev->ndev->name);
++ adev->recalib_msg_ratelimit++;
++ if (adev->recalib_msg_ratelimit == 5)
++ printk("disabling above message until next recalib\n");
++ }
++ return;
++ }
++
++ adev->recalib_msg_ratelimit = 0;
++
++ /* note that commands sometimes fail (card busy),
++ * so only clear flag if we were fully successful */
++ res = acx_s_recalib_radio(adev);
++ if (res == OK) {
++ printk("%s: successfully recalibrated radio\n",
++ adev->ndev->name);
++ adev->recalib_time_last_success = jiffies;
++ adev->recalib_failure_count = 0;
++ } else {
++ /* failed: resubmit, but only limited
++ * amount of times within some time range
++ * to prevent endless loop */
++
++ adev->recalib_time_last_success = 0; /* we failed */
++
++ /* if some time passed between last
++ * attempts, then reset failure retry counter
++ * to be able to do next recalib attempt */
++ if (time_after(jiffies, adev->recalib_time_last_attempt + 5*HZ))
++ adev->recalib_failure_count = 0;
++
++ if (adev->recalib_failure_count < 5) {
++ /* increment inside only, for speedup of outside path */
++ adev->recalib_failure_count++;
++ adev->recalib_time_last_attempt = jiffies;
++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
++ }
++ }
++}
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
++static void
++acx_e_after_interrupt_task(struct work_struct *work)
++{
++ acx_device_t *adev = container_of(work, acx_device_t, after_interrupt_task);
++#else
++ static void
++ acx_e_after_interrupt_task(void *data)
++ {
++ struct net_device *ndev = (struct net_device*)data;
++ acx_device_t *adev = ndev2adev(ndev);
++#endif
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ if (!adev->after_interrupt_jobs)
++ goto end; /* no jobs to do */
++
++#if TX_CLEANUP_IN_SOFTIRQ
++ /* can happen only on PCI */
++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_TX_CLEANUP) {
++ acx_lock(adev, flags);
++ acxpci_l_clean_txdesc(adev);
++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_TX_CLEANUP);
++ acx_unlock(adev, flags);
++ }
++#endif
++ /* we see lotsa tx errors */
++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_RADIO_RECALIB) {
++ acx_s_after_interrupt_recalib(adev);
++ }
++
++ /* a poor interrupt code wanted to do update_card_settings() */
++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_UPDATE_CARD_CFG) {
++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask)
++ acx_s_update_card_settings(adev);
++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
++ }
++
++ /* 1) we detected that no Scan_Complete IRQ came from fw, or
++ ** 2) we found too many STAs */
++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_STOP_SCAN) {
++ log(L_IRQ, "sending a stop scan cmd...\n");
++ acx_s_issue_cmd(adev, ACX1xx_CMD_STOP_SCAN, NULL, 0);
++ /* HACK: set the IRQ bit, since we won't get a
++ * scan complete IRQ any more on ACX111 (works on ACX100!),
++ * since _we_, not a fw, have stopped the scan */
++ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_STOP_SCAN);
++ }
++
++ /* either fw sent Scan_Complete or we detected that
++ ** no Scan_Complete IRQ came from fw. Finish scanning,
++ ** pick join partner if any */
++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_COMPLETE_SCAN) {
++ if (adev->status == ACX_STATUS_1_SCANNING) {
++ if (OK != acx_s_complete_scan(adev)) {
++ SET_BIT(adev->after_interrupt_jobs,
++ ACX_AFTER_IRQ_RESTART_SCAN);
++ }
++ } else {
++ /* + scan kills current join status - restore it
++ ** (do we need it for STA?) */
++ /* + does it happen only with active scans?
++ ** active and passive scans? ALL scans including
++ ** background one? */
++ /* + was not verified that everything is restored
++ ** (but at least we start to emit beacons again) */
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_3_AP:
++ log(L_IRQ, "redoing cmd_join_bssid() after scan\n");
++ acx_s_cmd_join_bssid(adev, adev->bssid);
++ }
++ }
++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_COMPLETE_SCAN);
++ }
++
++ /* STA auth or assoc timed out, start over again */
++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_RESTART_SCAN) {
++ log(L_IRQ, "sending a start_scan cmd...\n");
++ acx_s_cmd_start_scan(adev);
++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_RESTART_SCAN);
++ }
++
++ /* whee, we got positive assoc response! 8) */
++ if (adev->after_interrupt_jobs & ACX_AFTER_IRQ_CMD_ASSOCIATE) {
++ acx_ie_generic_t pdr;
++ /* tiny race window exists, checking that we still a STA */
++ switch (adev->mode) {
++ case ACX_MODE_2_STA:
++ pdr.m.aid = cpu_to_le16(adev->aid);
++ acx_s_configure(adev, &pdr, ACX1xx_IE_ASSOC_ID);
++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED);
++ log(L_ASSOC|L_DEBUG, "ASSOCIATED!\n");
++ CLEAR_BIT(adev->after_interrupt_jobs, ACX_AFTER_IRQ_CMD_ASSOCIATE);
++ }
++ }
++end:
++ acx_sem_unlock(adev);
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_schedule_task
++**
++** Schedule the call of the after_interrupt method after leaving
++** the interrupt context.
++*/
++void
++acx_schedule_task(acx_device_t *adev, unsigned int set_flag)
++{
++ SET_BIT(adev->after_interrupt_jobs, set_flag);
++ SCHEDULE_WORK(&adev->after_interrupt_task);
++}
++
++
++/***********************************************************************
++*/
++void
++acx_init_task_scheduler(acx_device_t *adev)
++{
++ /* configure task scheduler */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
++ INIT_WORK(&adev->after_interrupt_task, acx_e_after_interrupt_task);
++#else
++ INIT_WORK(&adev->after_interrupt_task, acx_e_after_interrupt_task,
++ adev->ndev);
++#endif
++}
++
++
++/***********************************************************************
++** acx_s_start
++*/
++void
++acx_s_start(acx_device_t *adev)
++{
++ FN_ENTER;
++
++ /*
++ * Ok, now we do everything that can possibly be done with ioctl
++ * calls to make sure that when it was called before the card
++ * was up we get the changes asked for
++ */
++
++ SET_BIT(adev->set_mask, SET_TEMPLATES|SET_STA_LIST|GETSET_WEP
++ |GETSET_TXPOWER|GETSET_ANTENNA|GETSET_ED_THRESH|GETSET_CCA
++ |GETSET_REG_DOMAIN|GETSET_MODE|GETSET_CHANNEL
++ |GETSET_TX|GETSET_RX|GETSET_STATION_ID);
++
++ log(L_INIT, "updating initial settings on iface activation\n");
++ acx_s_update_card_settings(adev);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acx_update_capabilities
++*/
++void
++acx_update_capabilities(acx_device_t *adev)
++{
++ u16 cap = 0;
++
++ switch (adev->mode) {
++ case ACX_MODE_3_AP:
++ SET_BIT(cap, WF_MGMT_CAP_ESS); break;
++ case ACX_MODE_0_ADHOC:
++ SET_BIT(cap, WF_MGMT_CAP_IBSS); break;
++ /* other types of stations do not emit beacons */
++ }
++
++ if (adev->wep_restricted) {
++ SET_BIT(cap, WF_MGMT_CAP_PRIVACY);
++ }
++ if (adev->cfgopt_dot11ShortPreambleOption) {
++ SET_BIT(cap, WF_MGMT_CAP_SHORT);
++ }
++ if (adev->cfgopt_dot11PBCCOption) {
++ SET_BIT(cap, WF_MGMT_CAP_PBCC);
++ }
++ if (adev->cfgopt_dot11ChannelAgility) {
++ SET_BIT(cap, WF_MGMT_CAP_AGILITY);
++ }
++ log(L_DEBUG, "caps updated from 0x%04X to 0x%04X\n",
++ adev->capabilities, cap);
++ adev->capabilities = cap;
++}
++
++/***********************************************************************
++** Common function to parse ALL configoption struct formats
++** (ACX100 and ACX111; FIXME: how to make it work with ACX100 USB!?!?).
++** FIXME: logging should be removed here and added to a /proc file instead
++*/
++void
++acx_s_parse_configoption(acx_device_t *adev, const acx111_ie_configoption_t *pcfg)
++{
++ const u8 *pEle;
++ int i;
++ int is_acx111 = IS_ACX111(adev);
++
++ if (acx_debug & L_DEBUG) {
++ printk("configoption struct content:\n");
++ acx_dump_bytes(pcfg, sizeof(*pcfg));
++ }
++
++ if (( is_acx111 && (adev->eeprom_version == 5))
++ || (!is_acx111 && (adev->eeprom_version == 4))
++ || (!is_acx111 && (adev->eeprom_version == 5))) {
++ /* these versions are known to be supported */
++ } else {
++ printk("unknown chip and EEPROM version combination (%s, v%d), "
++ "don't know how to parse config options yet. "
++ "Please report\n", is_acx111 ? "ACX111" : "ACX100",
++ adev->eeprom_version);
++ return;
++ }
++
++ /* first custom-parse the first part which has chip-specific layout */
++
++ pEle = (const u8 *) pcfg;
++
++ pEle += 4; /* skip (type,len) header */
++
++ memcpy(adev->cfgopt_NVSv, pEle, sizeof(adev->cfgopt_NVSv));
++ pEle += sizeof(adev->cfgopt_NVSv);
++
++ if (is_acx111) {
++ adev->cfgopt_NVS_vendor_offs = le16_to_cpu(*(u16 *)pEle);
++ pEle += sizeof(adev->cfgopt_NVS_vendor_offs);
++
++ adev->cfgopt_probe_delay = 200; /* good default value? */
++ pEle += 2; /* FIXME: unknown, value 0x0001 */
++ } else {
++ memcpy(adev->cfgopt_MAC, pEle, sizeof(adev->cfgopt_MAC));
++ pEle += sizeof(adev->cfgopt_MAC);
++
++ adev->cfgopt_probe_delay = le16_to_cpu(*(u16 *)pEle);
++ pEle += sizeof(adev->cfgopt_probe_delay);
++ if ((adev->cfgopt_probe_delay < 100) || (adev->cfgopt_probe_delay > 500)) {
++ printk("strange probe_delay value %d, "
++ "tweaking to 200\n", adev->cfgopt_probe_delay);
++ adev->cfgopt_probe_delay = 200;
++ }
++ }
++
++ adev->cfgopt_eof_memory = le32_to_cpu(*(u32 *)pEle);
++ pEle += sizeof(adev->cfgopt_eof_memory);
++
++ printk("NVS_vendor_offs:%04X probe_delay:%d eof_memory:%d\n",
++ adev->cfgopt_NVS_vendor_offs,
++ adev->cfgopt_probe_delay,
++ adev->cfgopt_eof_memory);
++
++ adev->cfgopt_dot11CCAModes = *pEle++;
++ adev->cfgopt_dot11Diversity = *pEle++;
++ adev->cfgopt_dot11ShortPreambleOption = *pEle++;
++ adev->cfgopt_dot11PBCCOption = *pEle++;
++ adev->cfgopt_dot11ChannelAgility = *pEle++;
++ adev->cfgopt_dot11PhyType = *pEle++;
++ adev->cfgopt_dot11TempType = *pEle++;
++ printk("CCAModes:%02X Diversity:%02X ShortPreOpt:%02X "
++ "PBCC:%02X ChanAgil:%02X PHY:%02X Temp:%02X\n",
++ adev->cfgopt_dot11CCAModes,
++ adev->cfgopt_dot11Diversity,
++ adev->cfgopt_dot11ShortPreambleOption,
++ adev->cfgopt_dot11PBCCOption,
++ adev->cfgopt_dot11ChannelAgility,
++ adev->cfgopt_dot11PhyType,
++ adev->cfgopt_dot11TempType);
++
++ /* then use common parsing for next part which has common layout */
++
++ pEle++; /* skip table_count (6) */
++
++ if (IS_MEM(adev) && IS_ACX100(adev))
++ {
++ /*
++ * For iPaq hx4700 Generic Slave F/W 1.10.7.K. I'm not sure if these
++ * 4 extra bytes are before the dot11 things above or after, so I'm just
++ * going to guess after. If someone sees these aren't reasonable numbers,
++ * please fix this.
++ * The area from which the dot11 values above are read contains:
++ * 04 01 01 01 00 05 01 06 00 02 01 02
++ * the 8 dot11 reads above take care of 8 of them, but which 8...
++ */
++ pEle += 4;
++ }
++
++ adev->cfgopt_antennas.type = pEle[0];
++ adev->cfgopt_antennas.len = pEle[1];
++ printk("AntennaID:%02X Len:%02X Data:",
++ adev->cfgopt_antennas.type, adev->cfgopt_antennas.len);
++ for (i = 0; i < pEle[1]; i++) {
++ adev->cfgopt_antennas.list[i] = pEle[i+2];
++ printk("%02X ", pEle[i+2]);
++ }
++ printk("\n");
++
++ pEle += pEle[1] + 2;
++ adev->cfgopt_power_levels.type = pEle[0];
++ adev->cfgopt_power_levels.len = pEle[1];
++ printk("PowerLevelID:%02X Len:%02X Data:",
++ adev->cfgopt_power_levels.type, adev->cfgopt_power_levels.len);
++ for (i = 0; i < pEle[1]; i++) {
++ adev->cfgopt_power_levels.list[i] = le16_to_cpu(*(u16 *)&pEle[i*2+2]);
++ printk("%04X ", adev->cfgopt_power_levels.list[i]);
++ }
++ printk("\n");
++
++ pEle += pEle[1]*2 + 2;
++ adev->cfgopt_data_rates.type = pEle[0];
++ adev->cfgopt_data_rates.len = pEle[1];
++ printk("DataRatesID:%02X Len:%02X Data:",
++ adev->cfgopt_data_rates.type, adev->cfgopt_data_rates.len);
++ for (i = 0; i < pEle[1]; i++) {
++ adev->cfgopt_data_rates.list[i] = pEle[i+2];
++ printk("%02X ", pEle[i+2]);
++ }
++ printk("\n");
++
++ pEle += pEle[1] + 2;
++ adev->cfgopt_domains.type = pEle[0];
++ adev->cfgopt_domains.len = pEle[1];
++ if (IS_MEM(adev) && IS_ACX100(adev))
++ {
++ /*
++ * For iPaq hx4700 Generic Slave F/W 1.10.7.K.
++ * There's an extra byte between this structure and the next
++ * that is not accounted for with this structure's length. It's
++ * most likely a bug in the firmware, but we can fix it here
++ * by bumping the length of this field by 1.
++ */
++ adev->cfgopt_domains.len++;
++ }
++ printk("DomainID:%02X Len:%02X Data:",
++ adev->cfgopt_domains.type, adev->cfgopt_domains.len);
++ for (i = 0; i < adev->cfgopt_domains.len; i++) {
++ adev->cfgopt_domains.list[i] = pEle[i+2];
++ printk("%02X ", pEle[i+2]);
++ }
++ printk("\n");
++
++ pEle += adev->cfgopt_domains.len + 2;
++
++ adev->cfgopt_product_id.type = pEle[0];
++ adev->cfgopt_product_id.len = pEle[1];
++ for (i = 0; i < pEle[1]; i++) {
++ adev->cfgopt_product_id.list[i] = pEle[i+2];
++ }
++ printk("ProductID:%02X Len:%02X Data:%.*s\n",
++ adev->cfgopt_product_id.type, adev->cfgopt_product_id.len,
++ adev->cfgopt_product_id.len, (char *)adev->cfgopt_product_id.list);
++
++ pEle += pEle[1] + 2;
++ adev->cfgopt_manufacturer.type = pEle[0];
++ adev->cfgopt_manufacturer.len = pEle[1];
++ for (i = 0; i < pEle[1]; i++) {
++ adev->cfgopt_manufacturer.list[i] = pEle[i+2];
++ }
++ printk("ManufacturerID:%02X Len:%02X Data:%.*s\n",
++ adev->cfgopt_manufacturer.type, adev->cfgopt_manufacturer.len,
++ adev->cfgopt_manufacturer.len, (char *)adev->cfgopt_manufacturer.list);
++/*
++ printk("EEPROM part:\n");
++ for (i=0; i<58; i++) {
++ printk("%02X =======> 0x%02X\n",
++ i, (u8 *)adev->cfgopt_NVSv[i-2]);
++ }
++*/
++}
++
++
++/***********************************************************************
++*/
++static int __init
++acx_e_init_module(void)
++{
++ int r1,r2,r3,r4;
++
++ acx_struct_size_check();
++
++ printk("acx: this driver is still EXPERIMENTAL\n"
++ "acx: reading README file and/or Craig's HOWTO is "
++ "recommended, visit http://acx100.sf.net in case "
++ "of further questions/discussion\n");
++
++#if defined(CONFIG_ACX_PCI)
++ r1 = acxpci_e_init_module();
++#else
++ r1 = -EINVAL;
++#endif
++#if defined(CONFIG_ACX_MEM)
++ r2 = acxmem_e_init_module();
++#else
++ r2 = -EINVAL;
++#endif
++#if defined(CONFIG_ACX_USB)
++ r3 = acxusb_e_init_module();
++#else
++ r3 = -EINVAL;
++#endif
++#if defined(CONFIG_ACX_CS)
++ r4 = acx_cs_init();
++#else
++ r4 = -EINVAL;
++#endif
++ if (r2 && r1 && r3 && r4) { /* all failed! */
++ if (r3 || r1)
++ return r3 ? r3 : r1;
++ else
++ return r2;
++ }
++ /* return success if at least one succeeded */
++ return 0;
++
++}
++
++static void __exit
++acx_e_cleanup_module(void)
++{
++#if defined(CONFIG_ACX_PCI)
++ acxpci_e_cleanup_module();
++#endif
++#if defined(CONFIG_ACX_MEM)
++ acxmem_e_cleanup_module();
++#endif
++#if defined(CONFIG_ACX_USB)
++ acxusb_e_cleanup_module();
++#endif
++#if defined(CONFIG_ACX_CS)
++ acx_cs_cleanup();
++#endif
++}
++
++module_init(acx_e_init_module)
++module_exit(acx_e_cleanup_module)
+Index: linux-2.6.23/drivers/net/wireless/acx/conv.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/conv.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,504 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++*/
++
++#include <linux/version.h>
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
++#include <linux/config.h>
++#endif
++#include <linux/skbuff.h>
++#include <linux/if_arp.h>
++#include <linux/etherdevice.h>
++#include <linux/wireless.h>
++#include <net/iw_handler.h>
++
++#include "acx.h"
++
++
++/***********************************************************************
++** proto_is_stt
++**
++** Searches the 802.1h Selective Translation Table for a given
++** protocol.
++**
++** prottype - protocol number (in host order) to search for.
++**
++** Returns:
++** 1 - if the table is empty or a match is found.
++** 0 - if the table is non-empty and a match is not found.
++**
++** Based largely on p80211conv.c of the linux-wlan-ng project
++*/
++static inline int
++proto_is_stt(unsigned int proto)
++{
++ /* Always return found for now. This is the behavior used by the */
++ /* Zoom Win95 driver when 802.1h mode is selected */
++ /* TODO: If necessary, add an actual search we'll probably
++ need this to match the CMAC's way of doing things.
++ Need to do some testing to confirm.
++ */
++
++ if (proto == 0x80f3) /* APPLETALK */
++ return 1;
++
++ return 0;
++/* return ((prottype == ETH_P_AARP) || (prottype == ETH_P_IPX)); */
++}
++
++/* Helpers */
++
++static inline void
++store_llc_snap(struct wlan_llc *llc)
++{
++ llc->dsap = 0xaa; /* SNAP, see IEEE 802 */
++ llc->ssap = 0xaa;
++ llc->ctl = 0x03;
++}
++static inline int
++llc_is_snap(const struct wlan_llc *llc)
++{
++ return (llc->dsap == 0xaa)
++ && (llc->ssap == 0xaa)
++ && (llc->ctl == 0x03);
++}
++static inline void
++store_oui_rfc1042(struct wlan_snap *snap)
++{
++ snap->oui[0] = 0;
++ snap->oui[1] = 0;
++ snap->oui[2] = 0;
++}
++static inline int
++oui_is_rfc1042(const struct wlan_snap *snap)
++{
++ return (snap->oui[0] == 0)
++ && (snap->oui[1] == 0)
++ && (snap->oui[2] == 0);
++}
++static inline void
++store_oui_8021h(struct wlan_snap *snap)
++{
++ snap->oui[0] = 0;
++ snap->oui[1] = 0;
++ snap->oui[2] = 0xf8;
++}
++static inline int
++oui_is_8021h(const struct wlan_snap *snap)
++{
++ return (snap->oui[0] == 0)
++ && (snap->oui[1] == 0)
++ && (snap->oui[2] == 0xf8);
++}
++
++
++/***********************************************************************
++** acx_ether_to_txbuf
++**
++** Uses the contents of the ether frame to build the elements of
++** the 802.11 frame.
++**
++** We don't actually set up the frame header here. That's the
++** MAC's job. We're only handling conversion of DIXII or 802.3+LLC
++** frames to something that works with 802.11.
++**
++** Based largely on p80211conv.c of the linux-wlan-ng project
++*/
++int
++acx_ether_to_txbuf(acx_device_t *adev, void *txbuf, const struct sk_buff *skb)
++{
++ struct wlan_hdr_a3 *w_hdr;
++ struct wlan_ethhdr *e_hdr;
++ struct wlan_llc *e_llc;
++ struct wlan_snap *e_snap;
++ const u8 *a1, *a3;
++ int header_len, payload_len = -1;
++ /* protocol type or data length, depending on whether
++ * DIX or 802.3 ethernet format */
++ u16 proto;
++ u16 fc;
++
++ FN_ENTER;
++
++ if (unlikely(!skb->len)) {
++ log(L_DEBUG, "zero-length skb!\n");
++ goto end;
++ }
++
++ w_hdr = (struct wlan_hdr_a3*)txbuf;
++
++ switch (adev->mode) {
++ case ACX_MODE_MONITOR:
++ /* NB: one day we might want to play with DESC_CTL2_FCS
++ ** Will need to stop doing "- WLAN_FCS_LEN" here then */
++ if (unlikely(skb->len >= WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_FCS_LEN)) {
++ printk("%s: can't tx oversized frame (%d bytes)\n",
++ adev->ndev->name, skb->len);
++ goto end;
++ }
++ memcpy(w_hdr, skb->data, skb->len);
++ payload_len = skb->len;
++ goto end;
++ }
++
++ /* step 1: classify ether frame, DIX or 802.3? */
++ e_hdr = (wlan_ethhdr_t *)skb->data;
++ proto = ntohs(e_hdr->type);
++ if (proto <= 1500) {
++ log(L_DEBUG, "tx: 802.3 len: %d\n", skb->len);
++ /* codes <= 1500 reserved for 802.3 lengths */
++ /* it's 802.3, pass ether payload unchanged, */
++ /* trim off ethernet header and copy payload to txdesc */
++ header_len = WLAN_HDR_A3_LEN;
++ } else {
++ /* it's DIXII, time for some conversion */
++ /* Create 802.11 packet. Header also contains llc and snap. */
++
++ log(L_DEBUG, "tx: DIXII len: %d\n", skb->len);
++
++ /* size of header is 802.11 header + llc + snap */
++ header_len = WLAN_HDR_A3_LEN + sizeof(wlan_llc_t) + sizeof(wlan_snap_t);
++ /* llc is located behind the 802.11 header */
++ e_llc = (wlan_llc_t*)(w_hdr + 1);
++ /* snap is located behind the llc */
++ e_snap = (wlan_snap_t*)(e_llc + 1);
++
++ /* setup the LLC header */
++ store_llc_snap(e_llc);
++
++ /* setup the SNAP header */
++ e_snap->type = htons(proto);
++ if (proto_is_stt(proto)) {
++ store_oui_8021h(e_snap);
++ } else {
++ store_oui_rfc1042(e_snap);
++ }
++ }
++ /* trim off ethernet header and copy payload to txbuf */
++ payload_len = skb->len - sizeof(wlan_ethhdr_t);
++ /* TODO: can we just let acx DMA payload from skb instead? */
++ memcpy((u8*)txbuf + header_len, skb->data + sizeof(wlan_ethhdr_t), payload_len);
++ payload_len += header_len;
++
++ /* Set up the 802.11 header */
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi);
++ a1 = e_hdr->daddr;
++ a3 = adev->bssid;
++ break;
++ case ACX_MODE_2_STA:
++ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi | WF_FC_TODSi);
++ a1 = adev->bssid;
++ a3 = e_hdr->daddr;
++ break;
++ case ACX_MODE_3_AP:
++ fc = (WF_FTYPE_DATAi | WF_FSTYPE_DATAONLYi | WF_FC_FROMDSi);
++ a1 = e_hdr->daddr;
++ a3 = e_hdr->saddr;
++ break;
++ default:
++ printk("%s: error - converting eth to wlan in unknown mode\n",
++ adev->ndev->name);
++ payload_len = -1;
++ goto end;
++ }
++ if (adev->wep_enabled)
++ SET_BIT(fc, WF_FC_ISWEPi);
++
++ w_hdr->fc = fc;
++ w_hdr->dur = 0;
++ MAC_COPY(w_hdr->a1, a1);
++ MAC_COPY(w_hdr->a2, adev->dev_addr);
++ MAC_COPY(w_hdr->a3, a3);
++ w_hdr->seq = 0;
++
++#ifdef DEBUG_CONVERT
++ if (acx_debug & L_DATA) {
++ printk("original eth frame [%d]: ", skb->len);
++ acx_dump_bytes(skb->data, skb->len);
++ printk("802.11 frame [%d]: ", payload_len);
++ acx_dump_bytes(w_hdr, payload_len);
++ }
++#endif
++
++end:
++ FN_EXIT1(payload_len);
++ return payload_len;
++}
++
++
++/***********************************************************************
++** acx_rxbuf_to_ether
++**
++** Uses the contents of a received 802.11 frame to build an ether
++** frame.
++**
++** This function extracts the src and dest address from the 802.11
++** frame to use in the construction of the eth frame.
++**
++** Based largely on p80211conv.c of the linux-wlan-ng project
++*/
++struct sk_buff*
++acx_rxbuf_to_ether(acx_device_t *adev, rxbuffer_t *rxbuf)
++{
++ struct wlan_hdr *w_hdr;
++ struct wlan_ethhdr *e_hdr;
++ struct wlan_llc *e_llc;
++ struct wlan_snap *e_snap;
++ struct sk_buff *skb;
++ const u8 *daddr;
++ const u8 *saddr;
++ const u8 *e_payload;
++ int buflen, payload_length;
++ unsigned int payload_offset, mtu;
++ u16 fc;
++
++ FN_ENTER;
++
++ /* This looks complex because it must handle possible
++ ** phy header in rxbuff */
++ w_hdr = acx_get_wlan_hdr(adev, rxbuf);
++ payload_offset = WLAN_HDR_A3_LEN; /* it is relative to w_hdr */
++ payload_length = RXBUF_BYTES_USED(rxbuf) /* entire rxbuff... */
++ - ((u8*)w_hdr - (u8*)rxbuf) /* minus space before 802.11 frame */
++ - WLAN_HDR_A3_LEN; /* minus 802.11 header */
++
++ /* setup some vars for convenience */
++ fc = w_hdr->fc;
++ switch (WF_FC_FROMTODSi & fc) {
++ case 0:
++ daddr = w_hdr->a1;
++ saddr = w_hdr->a2;
++ break;
++ case WF_FC_FROMDSi:
++ daddr = w_hdr->a1;
++ saddr = w_hdr->a3;
++ break;
++ case WF_FC_TODSi:
++ daddr = w_hdr->a3;
++ saddr = w_hdr->a2;
++ break;
++ default: /* WF_FC_FROMTODSi */
++ payload_offset += (WLAN_HDR_A4_LEN - WLAN_HDR_A3_LEN);
++ payload_length -= (WLAN_HDR_A4_LEN - WLAN_HDR_A3_LEN);
++ daddr = w_hdr->a3;
++ saddr = w_hdr->a4;
++ }
++
++ if ((WF_FC_ISWEPi & fc) && IS_ACX100(adev)) {
++ /* chop off the IV+ICV WEP header and footer */
++ log(L_DATA|L_DEBUG, "rx: WEP packet, "
++ "chopping off IV and ICV\n");
++ payload_offset += WLAN_WEP_IV_LEN;
++ payload_length -= WLAN_WEP_IV_LEN + WLAN_WEP_ICV_LEN;
++ }
++
++ if (unlikely(payload_length < 0)) {
++ printk("%s: rx frame too short, ignored\n", adev->ndev->name);
++ goto ret_null;
++ }
++
++ e_hdr = (wlan_ethhdr_t*) ((u8*) w_hdr + payload_offset);
++ e_llc = (wlan_llc_t*) e_hdr;
++ e_snap = (wlan_snap_t*) (e_llc + 1);
++ mtu = adev->ndev->mtu;
++ e_payload = (u8*) (e_snap + 1);
++
++ log(L_DATA, "rx: payload_offset %d, payload_length %d\n",
++ payload_offset, payload_length);
++ log(L_XFER|L_DATA,
++ "rx: frame info: llc=%02X%02X%02X "
++ "snap.oui=%02X%02X%02X snap.type=%04X\n",
++ e_llc->dsap, e_llc->ssap, e_llc->ctl,
++ e_snap->oui[0], e_snap->oui[1], e_snap->oui[2],
++ ntohs(e_snap->type));
++
++ /* Test for the various encodings */
++ if ((payload_length >= sizeof(wlan_ethhdr_t))
++ && ((e_llc->dsap != 0xaa) || (e_llc->ssap != 0xaa))
++ && ( (mac_is_equal(daddr, e_hdr->daddr))
++ || (mac_is_equal(saddr, e_hdr->saddr))
++ )
++ ) {
++ /* 802.3 Encapsulated: */
++ /* wlan frame body contains complete eth frame (header+body) */
++ log(L_DEBUG|L_DATA, "rx: 802.3 ENCAP len=%d\n", payload_length);
++
++ if (unlikely(payload_length > (mtu + ETH_HLEN))) {
++ printk("%s: rx: ENCAP frame too large (%d > %d)\n",
++ adev->ndev->name,
++ payload_length, mtu + ETH_HLEN);
++ goto ret_null;
++ }
++
++ /* allocate space and setup host buffer */
++ buflen = payload_length;
++ /* Attempt to align IP header (14 bytes eth header + 2 = 16) */
++ skb = dev_alloc_skb(buflen + 2);
++ if (unlikely(!skb))
++ goto no_skb;
++ skb_reserve(skb, 2);
++ skb_put(skb, buflen); /* make room */
++
++ /* now copy the data from the 80211 frame */
++ memcpy(skb->data, e_hdr, payload_length);
++
++ } else if ( (payload_length >= sizeof(wlan_llc_t)+sizeof(wlan_snap_t))
++ && llc_is_snap(e_llc) ) {
++ /* wlan frame body contains: AA AA 03 ... (it's a SNAP) */
++
++ if ( !oui_is_rfc1042(e_snap)
++ || (proto_is_stt(ieee2host16(e_snap->type)) /* && (ethconv == WLAN_ETHCONV_8021h) */)) {
++ log(L_DEBUG|L_DATA, "rx: SNAP+RFC1042 len=%d\n", payload_length);
++ /* wlan frame body contains: AA AA 03 !(00 00 00) ... -or- */
++ /* wlan frame body contains: AA AA 03 00 00 00 0x80f3 ... */
++ /* build eth hdr, type = len, copy AA AA 03... as eth body */
++ /* it's a SNAP + RFC1042 frame && protocol is in STT */
++
++ if (unlikely(payload_length > mtu)) {
++ printk("%s: rx: SNAP frame too large (%d > %d)\n",
++ adev->ndev->name,
++ payload_length, mtu);
++ goto ret_null;
++ }
++
++ /* allocate space and setup host buffer */
++ buflen = payload_length + ETH_HLEN;
++ skb = dev_alloc_skb(buflen + 2);
++ if (unlikely(!skb))
++ goto no_skb;
++ skb_reserve(skb, 2);
++ skb_put(skb, buflen); /* make room */
++
++ /* create 802.3 header */
++ e_hdr = (wlan_ethhdr_t*) skb->data;
++ MAC_COPY(e_hdr->daddr, daddr);
++ MAC_COPY(e_hdr->saddr, saddr);
++ e_hdr->type = htons(payload_length);
++
++ /* Now copy the data from the 80211 frame.
++ Make room in front for the eth header, and keep the
++ llc and snap from the 802.11 payload */
++ memcpy(skb->data + ETH_HLEN,
++ e_llc, payload_length);
++
++ } else {
++ /* wlan frame body contains: AA AA 03 00 00 00 [type] [tail] */
++ /* build eth hdr, type=[type], copy [tail] as eth body */
++ log(L_DEBUG|L_DATA, "rx: 802.1h/RFC1042 len=%d\n",
++ payload_length);
++ /* it's an 802.1h frame (an RFC1042 && protocol is not in STT) */
++ /* build a DIXII + RFC894 */
++
++ payload_length -= sizeof(wlan_llc_t) + sizeof(wlan_snap_t);
++ if (unlikely(payload_length > mtu)) {
++ printk("%s: rx: DIXII frame too large (%d > %d)\n",
++ adev->ndev->name,
++ payload_length, mtu);
++ goto ret_null;
++ }
++
++ /* allocate space and setup host buffer */
++ buflen = payload_length + ETH_HLEN;
++ skb = dev_alloc_skb(buflen + 2);
++ if (unlikely(!skb))
++ goto no_skb;
++ skb_reserve(skb, 2);
++ skb_put(skb, buflen); /* make room */
++
++ /* create 802.3 header */
++ e_hdr = (wlan_ethhdr_t *) skb->data;
++ MAC_COPY(e_hdr->daddr, daddr);
++ MAC_COPY(e_hdr->saddr, saddr);
++ e_hdr->type = e_snap->type;
++
++ /* Now copy the data from the 80211 frame.
++ Make room in front for the eth header, and cut off the
++ llc and snap from the 802.11 payload */
++ memcpy(skb->data + ETH_HLEN,
++ e_payload, payload_length);
++ }
++
++ } else {
++ log(L_DEBUG|L_DATA, "rx: NON-ENCAP len=%d\n", payload_length);
++ /* build eth hdr, type=len, copy wlan body as eth body */
++ /* any NON-ENCAP */
++ /* it's a generic 80211+LLC or IPX 'Raw 802.3' */
++ /* build an 802.3 frame */
++
++ if (unlikely(payload_length > mtu)) {
++ printk("%s: rx: OTHER frame too large (%d > %d)\n",
++ adev->ndev->name, payload_length, mtu);
++ goto ret_null;
++ }
++
++ /* allocate space and setup host buffer */
++ buflen = payload_length + ETH_HLEN;
++ skb = dev_alloc_skb(buflen + 2);
++ if (unlikely(!skb))
++ goto no_skb;
++ skb_reserve(skb, 2);
++ skb_put(skb, buflen); /* make room */
++
++ /* set up the 802.3 header */
++ e_hdr = (wlan_ethhdr_t *) skb->data;
++ MAC_COPY(e_hdr->daddr, daddr);
++ MAC_COPY(e_hdr->saddr, saddr);
++ e_hdr->type = htons(payload_length);
++
++ /* now copy the data from the 80211 frame */
++ memcpy(skb->data + ETH_HLEN, e_llc, payload_length);
++ }
++
++ skb->dev = adev->ndev;
++ skb->protocol = eth_type_trans(skb, adev->ndev);
++
++#ifdef DEBUG_CONVERT
++ if (acx_debug & L_DATA) {
++ int len = RXBUF_BYTES_RCVD(adev, rxbuf);
++ printk("p802.11 frame [%d]: ", len);
++ acx_dump_bytes(w_hdr, len);
++ printk("eth frame [%d]: ", skb->len);
++ acx_dump_bytes(skb->data, skb->len);
++ }
++#endif
++
++ FN_EXIT0;
++ return skb;
++
++no_skb:
++ printk("%s: rx: no memory for skb (%d bytes)\n",
++ adev->ndev->name, buflen + 2);
++ret_null:
++ FN_EXIT1((int)NULL);
++ return NULL;
++}
+Index: linux-2.6.23/drivers/net/wireless/acx/cs.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/cs.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,5703 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++**
++** Slave memory interface support:
++**
++** Todd Blumer - SDG Systems
++** Bill Reese - HP
++** Eric McCorkle - Shadowsun
++**
++** CF support, (c) Fabrice Crohas, Paul Sokolovsky
++*/
++#define ACX_MEM 1
++
++/*
++ * non-zero makes it dump the ACX memory to the console then
++ * panic when you cat /proc/driver/acx_wlan0_diag
++ */
++#define DUMP_MEM_DEFINED 1
++
++#define DUMP_MEM_DURING_DIAG 0
++#define DUMP_IF_SLOW 0
++
++#define PATCH_AROUND_BAD_SPOTS 1
++#define HX4700_FIRMWARE_CHECKSUM 0x0036862e
++#define HX4700_ALTERNATE_FIRMWARE_CHECKSUM 0x00368a75
++
++#include <linux/version.h>
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
++#include <linux/config.h>
++#endif
++
++/* Linux 2.6.18+ uses <linux/utsrelease.h> */
++#ifndef UTS_RELEASE
++#include <linux/utsrelease.h>
++#endif
++
++#include <linux/compiler.h> /* required for Lx 2.6.8 ?? */
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/skbuff.h>
++#include <linux/slab.h>
++#include <linux/if_arp.h>
++#include <linux/irq.h>
++#include <linux/rtnetlink.h>
++#include <linux/wireless.h>
++#include <net/iw_handler.h>
++#include <linux/netdevice.h>
++#include <linux/ioport.h>
++#include <linux/pci.h>
++#include <linux/platform_device.h>
++#include <linux/pm.h>
++#include <linux/vmalloc.h>
++#include <linux/delay.h>
++#include <linux/workqueue.h>
++#include <linux/inetdevice.h>
++
++#define PCMCIA_DEBUG 1
++
++/*
++ All the PCMCIA modules use PCMCIA_DEBUG to control debugging. If
++ you do not define PCMCIA_DEBUG at all, all the debug code will be
++ left out. If you compile with PCMCIA_DEBUG=0, the debug code will
++ be present but disabled -- but it can then be enabled for specific
++ modules at load time with a 'pc_debug=#' option to insmod.
++
++*/
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/cisreg.h>
++#include <pcmcia/ds.h>
++#include "acx.h"
++#include "acx_hw.h"
++
++#ifdef PCMCIA_DEBUG
++static int pc_debug = PCMCIA_DEBUG;
++module_param(pc_debug, int, 0);
++static char *version = "$Revision: 1.10 $";
++#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args);
++#else
++#define DEBUG(n, args...)
++#endif
++
++
++static win_req_t memwin;
++
++typedef struct local_info_t {
++ dev_node_t node;
++ struct net_device *ndev;
++} local_info_t;
++
++static struct net_device *resume_ndev;
++
++
++/***********************************************************************
++*/
++
++#define CARD_EEPROM_ID_SIZE 6
++
++#include <asm/io.h>
++
++#define REG_ACX_VENDOR_ID 0x900
++/*
++ * This is the vendor id on the HX4700, anyway
++ */
++#define ACX_VENDOR_ID 0x8400104c
++
++typedef enum {
++ ACX_SOFT_RESET = 0,
++
++ ACX_SLV_REG_ADDR,
++ ACX_SLV_REG_DATA,
++ ACX_SLV_REG_ADATA,
++
++ ACX_SLV_MEM_CP,
++ ACX_SLV_MEM_ADDR,
++ ACX_SLV_MEM_DATA,
++ ACX_SLV_MEM_CTL,
++} acxreg_t;
++
++/***********************************************************************
++*/
++static void acxmem_i_tx_timeout(struct net_device *ndev);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id);
++#else
++static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id, struct pt_regs *regs);
++#endif
++static void acxmem_i_set_multicast_list(struct net_device *ndev);
++
++static int acxmem_e_open(struct net_device *ndev);
++static int acxmem_e_close(struct net_device *ndev);
++static void acxmem_s_up(struct net_device *ndev);
++static void acxmem_s_down(struct net_device *ndev);
++
++static void dump_acxmem (acx_device_t *adev, u32 start, int length);
++static int acxmem_complete_hw_reset (acx_device_t *adev);
++static void acxmem_s_delete_dma_regions(acx_device_t *adev);
++
++static int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
++acxmem_e_suspend( struct net_device *ndev, pm_message_t state);
++#else
++acxmem_e_suspend( struct net_device *ndev, u32 state);
++#endif
++static void
++fw_resumer(struct work_struct *notused);
++//fw_resumer( void *data );
++
++static int acx_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)
++{
++ struct net_device *ndev = ptr;
++ acx_device_t *adev = ndev2adev(ndev);
++
++ /*
++ * Upper level ioctl() handlers send a NETDEV_CHANGEADDR if the MAC address changes.
++ */
++
++ if (NETDEV_CHANGEADDR == event) {
++ /*
++ * the upper layers put the new MAC address in ndev->dev_addr; we just copy
++ * it over and update the ACX with it.
++ */
++ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr);
++ adev->set_mask |= GETSET_STATION_ID;
++ acx_s_update_card_settings (adev);
++ }
++
++ return 0;
++}
++
++static struct notifier_block acx_netdev_notifier = {
++ .notifier_call = acx_netdev_event,
++};
++
++/***********************************************************************
++** Register access
++*/
++
++/* Pick one */
++/* #define INLINE_IO static */
++#define INLINE_IO static inline
++
++INLINE_IO u32
++read_id_register (acx_device_t *adev)
++{
++ writel (0x24, &adev->iobase[ACX_SLV_REG_ADDR]);
++ return readl (&adev->iobase[ACX_SLV_REG_DATA]);
++}
++
++INLINE_IO u32
++read_reg32(acx_device_t *adev, unsigned int offset)
++{
++ u32 val;
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20) {
++ return readl(((u8*)adev->iobase) + addr);
++ }
++
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ val = readl( &adev->iobase[ACX_SLV_REG_DATA] );
++
++ return val;
++}
++
++INLINE_IO u16
++read_reg16(acx_device_t *adev, unsigned int offset)
++{
++ u16 lo;
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20) {
++ return readw(((u8 *) adev->iobase) + addr);
++ }
++
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ lo = readw( (u16 *)&adev->iobase[ACX_SLV_REG_DATA] );
++
++ return lo;
++}
++
++INLINE_IO u8
++read_reg8(acx_device_t *adev, unsigned int offset)
++{
++ u8 lo;
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20)
++ return readb(((u8 *)adev->iobase) + addr);
++
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ lo = readw( (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
++
++ return (u8)lo;
++}
++
++INLINE_IO void
++write_reg32(acx_device_t *adev, unsigned int offset, u32 val)
++{
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20) {
++ writel(val, ((u8*)adev->iobase) + addr);
++ return;
++ }
++
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ writel( val, &adev->iobase[ACX_SLV_REG_DATA] );
++}
++
++INLINE_IO void
++write_reg16(acx_device_t *adev, unsigned int offset, u16 val)
++{
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20) {
++ writew(val, ((u8 *)adev->iobase) + addr);
++ return;
++ }
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ writew( val, (u16 *) &adev->iobase[ACX_SLV_REG_DATA] );
++}
++
++INLINE_IO void
++write_reg8(acx_device_t *adev, unsigned int offset, u8 val)
++{
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20) {
++ writeb(val, ((u8 *) adev->iobase) + addr);
++ return;
++ }
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ writeb( val, (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
++}
++
++/* Handle PCI posting properly:
++ * Make sure that writes reach the adapter in case they require to be executed
++ * *before* the next write, by reading a random (and safely accessible) register.
++ * This call has to be made if there is no read following (which would flush the data
++ * to the adapter), yet the written data has to reach the adapter immediately. */
++INLINE_IO void
++write_flush(acx_device_t *adev)
++{
++ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */
++ /* faster version (accesses the first register, IO_ACX_SOFT_RESET,
++ * which should also be safe): */
++ (void) readl(adev->iobase);
++}
++
++INLINE_IO void
++set_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
++ u32 tmp;
++
++ tmp = read_reg32 (adev, offset);
++ tmp = tmp | bits;
++ write_reg32 (adev, offset, tmp);
++ write_flush (adev);
++}
++
++INLINE_IO void
++clear_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
++ u32 tmp;
++
++ tmp = read_reg32 (adev, offset);
++ tmp = tmp & ~bits;
++ write_reg32 (adev, offset, tmp);
++ write_flush (adev);
++}
++
++/*
++ * Copy from PXA memory to the ACX memory. This assumes both the PXA and ACX
++ * addresses are 32 bit aligned. Count is in bytes.
++ */
++INLINE_IO void
++write_slavemem32 (acx_device_t *adev, u32 slave_address, u32 val)
++{
++ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
++ udelay (10);
++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, val);
++}
++
++INLINE_IO u32
++read_slavemem32 (acx_device_t *adev, u32 slave_address)
++{
++ u32 val;
++
++ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
++ udelay (10);
++ val = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
++
++ return val;
++}
++
++INLINE_IO void
++write_slavemem8 (acx_device_t *adev, u32 slave_address, u8 val)
++{
++ u32 data;
++ u32 base;
++ int offset;
++
++ /*
++ * Get the word containing the target address and the byte offset in that word.
++ */
++ base = slave_address & ~3;
++ offset = (slave_address & 3) * 8;
++
++ data = read_slavemem32 (adev, base);
++ data &= ~(0xff << offset);
++ data |= val << offset;
++ write_slavemem32 (adev, base, data);
++}
++
++INLINE_IO u8
++read_slavemem8 (acx_device_t *adev, u32 slave_address)
++{
++ u8 val;
++ u32 base;
++ u32 data;
++ int offset;
++
++ base = slave_address & ~3;
++ offset = (slave_address & 3) * 8;
++
++ data = read_slavemem32 (adev, base);
++
++ val = (data >> offset) & 0xff;
++
++ return val;
++}
++
++/*
++ * doesn't split across word boundaries
++ */
++INLINE_IO void
++write_slavemem16 (acx_device_t *adev, u32 slave_address, u16 val)
++{
++ u32 data;
++ u32 base;
++ int offset;
++
++ /*
++ * Get the word containing the target address and the byte offset in that word.
++ */
++ base = slave_address & ~3;
++ offset = (slave_address & 3) * 8;
++
++ data = read_slavemem32 (adev, base);
++ data &= ~(0xffff << offset);
++ data |= val << offset;
++ write_slavemem32 (adev, base, data);
++}
++
++/*
++ * doesn't split across word boundaries
++ */
++INLINE_IO u16
++read_slavemem16 (acx_device_t *adev, u32 slave_address)
++{
++ u16 val;
++ u32 base;
++ u32 data;
++ int offset;
++
++ base = slave_address & ~3;
++ offset = (slave_address & 3) * 8;
++
++ data = read_slavemem32 (adev, base);
++
++ val = (data >> offset) & 0xffff;
++
++ return val;
++}
++
++/*
++ * Copy from slave memory
++ *
++ * TODO - rewrite using address autoincrement, handle partial words
++ */
++void
++copy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count) {
++ u32 tmp = 0;
++ u8 *ptmp = (u8 *) &tmp;
++
++ /*
++ * Right now I'm making the assumption that the destination is aligned, but
++ * I'd better check.
++ */
++ if ((u32) destination & 3) {
++ printk ("acx copy_from_slavemem: warning! destination not word-aligned!\n");
++ }
++
++ while (count >= 4) {
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
++ udelay (10);
++ *((u32 *) destination) = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
++ count -= 4;
++ source += 4;
++ destination += 4;
++ }
++
++ /*
++ * If the word reads above didn't satisfy the count, read one more word
++ * and transfer a byte at a time until the request is satisfied.
++ */
++ if (count) {
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
++ udelay (10);
++ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
++ while (count--) {
++ *destination++ = *ptmp++;
++ }
++ }
++}
++
++/*
++ * Copy to slave memory
++ *
++ * TODO - rewrite using autoincrement, handle partial words
++ */
++void
++copy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
++{
++ u32 tmp = 0;
++ u8* ptmp = (u8 *) &tmp;
++ static u8 src[512]; /* make static to avoid huge stack objects */
++
++ /*
++ * For now, make sure the source is word-aligned by copying it to a word-aligned
++ * buffer. Someday rewrite to avoid the extra copy.
++ */
++ if (count > sizeof (src)) {
++ printk ("acx copy_to_slavemem: Warning! buffer overflow!\n");
++ count = sizeof (src);
++ }
++ memcpy (src, source, count);
++ source = src;
++
++ while (count >= 4) {
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
++ udelay (10);
++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, *((u32 *) source));
++ count -= 4;
++ source += 4;
++ destination += 4;
++ }
++
++ /*
++ * If there are leftovers read the next word from the acx and merge in
++ * what they want to write.
++ */
++ if (count) {
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
++ udelay (10);
++ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
++ while (count--) {
++ *ptmp++ = *source++;
++ }
++ /*
++ * reset address in case we're currently in auto-increment mode
++ */
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
++ udelay (10);
++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, tmp);
++ udelay (10);
++ }
++
++}
++
++/*
++ * Block copy to slave buffers using memory block chain mode. Copies to the ACX
++ * transmit buffer structure with minimal intervention on our part.
++ * Interrupts should be disabled when calling this.
++ */
++void
++chaincopy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
++{
++ u32 val;
++ u32 *data = (u32 *) source;
++ static u8 aligned_source[WLAN_A4FR_MAXLEN_WEP_FCS];
++
++ /*
++ * Warn if the pointers don't look right. Destination must fit in [23:5] with
++ * zero elsewhere and source should be 32 bit aligned.
++ * This should never happen since we're in control of both, but I want to know about
++ * it if it does.
++ */
++ if ((destination & 0x00ffffe0) != destination) {
++ printk ("acx chaincopy: destination block 0x%04x not aligned!\n", destination);
++ }
++ if (count > sizeof aligned_source) {
++ printk( KERN_ERR "chaincopy_to_slavemem overflow!\n" );
++ count = sizeof aligned_source;
++ }
++ if ((u32) source & 3) {
++ memcpy (aligned_source, source, count);
++ data = (u32 *) aligned_source;
++ }
++
++ /*
++ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
++ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
++ */
++ val = 2 << 16 | 1 << 2;
++ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
++
++ /*
++ * SLV_MEM_CP[23:5] = start of 1st block
++ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
++ */
++ val = destination & 0x00ffffe0;
++ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
++
++ /*
++ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
++ */
++ val = (destination & 0x00ffffe0) + (1<<2);
++ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
++
++ /*
++ * Write the data to the slave data register, rounding up to the end
++ * of the word containing the last byte (hence the > 0)
++ */
++ while (count > 0) {
++ writel (*data++, &adev->iobase[ACX_SLV_MEM_DATA]);
++ count -= 4;
++ }
++}
++
++
++/*
++ * Block copy from slave buffers using memory block chain mode. Copies from the ACX
++ * receive buffer structures with minimal intervention on our part.
++ * Interrupts should be disabled when calling this.
++ */
++void
++chaincopy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count)
++{
++ u32 val;
++ u32 *data = (u32 *) destination;
++ static u8 aligned_destination[WLAN_A4FR_MAXLEN_WEP_FCS];
++ int saved_count = count;
++
++ /*
++ * Warn if the pointers don't look right. Destination must fit in [23:5] with
++ * zero elsewhere and source should be 32 bit aligned.
++ * Turns out the network stack sends unaligned things, so fix them before
++ * copying to the ACX.
++ */
++ if ((source & 0x00ffffe0) != source) {
++ printk ("acx chaincopy: source block 0x%04x not aligned!\n", source);
++ dump_acxmem (adev, 0, 0x10000);
++ }
++ if ((u32) destination & 3) {
++ //printk ("acx chaincopy: data destination not word aligned!\n");
++ data = (u32 *) aligned_destination;
++ if (count > sizeof aligned_destination) {
++ printk( KERN_ERR "chaincopy_from_slavemem overflow!\n" );
++ count = sizeof aligned_destination;
++ }
++ }
++
++ /*
++ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
++ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
++ */
++ val = (2 << 16) | (1 << 2);
++ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
++
++ /*
++ * SLV_MEM_CP[23:5] = start of 1st block
++ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
++ */
++ val = source & 0x00ffffe0;
++ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
++
++ /*
++ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
++ */
++ val = (source & 0x00ffffe0) + (1<<2);
++ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
++
++ /*
++ * Read the data from the slave data register, rounding up to the end
++ * of the word containing the last byte (hence the > 0)
++ */
++ while (count > 0) {
++ *data++ = readl (&adev->iobase[ACX_SLV_MEM_DATA]);
++ count -= 4;
++ }
++
++ /*
++ * If the destination wasn't aligned, we would have saved it in
++ * the aligned buffer, so copy it where it should go.
++ */
++ if ((u32) destination & 3) {
++ memcpy (destination, aligned_destination, saved_count);
++ }
++}
++
++char
++printable (char c)
++{
++ return ((c >= 20) && (c < 127)) ? c : '.';
++}
++
++#if DUMP_MEM_DEFINED > 0
++static void
++dump_acxmem (acx_device_t *adev, u32 start, int length)
++{
++ int i;
++ u8 buf[16];
++
++ while (length > 0) {
++ printk ("%04x ", start);
++ copy_from_slavemem (adev, buf, start, 16);
++ for (i = 0; (i < 16) && (i < length); i++) {
++ printk ("%02x ", buf[i]);
++ }
++ for (i = 0; (i < 16) && (i < length); i++) {
++ printk ("%c", printable (buf[i]));
++ }
++ printk ("\n");
++ start += 16;
++ length -= 16;
++ }
++}
++#endif
++
++static void
++enable_acx_irq(acx_device_t *adev);
++static void
++disable_acx_irq(acx_device_t *adev);
++
++/*
++ * Return an acx pointer to the next transmit data block.
++ */
++u32
++allocate_acx_txbuf_space (acx_device_t *adev, int count) {
++ u32 block, next, last_block;
++ int blocks_needed;
++ unsigned long flags;
++
++ spin_lock_irqsave(&adev->txbuf_lock, flags);
++ /*
++ * Take 4 off the memory block size to account for the reserved word at the start of
++ * the block.
++ */
++ blocks_needed = count / (adev->memblocksize - 4);
++ if (count % (adev->memblocksize - 4))
++ blocks_needed++;
++
++ if (blocks_needed <= adev->acx_txbuf_blocks_free) {
++ /*
++ * Take blocks at the head of the free list.
++ */
++ last_block = block = adev->acx_txbuf_free;
++
++ /*
++ * Follow block pointers through the requested number of blocks both to
++ * find the new head of the free list and to set the flags for the blocks
++ * appropriately.
++ */
++ while (blocks_needed--) {
++ /*
++ * Keep track of the last block of the allocation
++ */
++ last_block = adev->acx_txbuf_free;
++
++ /*
++ * Make sure the end control flag is not set.
++ */
++ next = read_slavemem32 (adev, adev->acx_txbuf_free) & 0x7ffff;
++ write_slavemem32 (adev, adev->acx_txbuf_free, next);
++
++ /*
++ * Update the new head of the free list
++ */
++ adev->acx_txbuf_free = next << 5;
++ adev->acx_txbuf_blocks_free--;
++
++ }
++
++ /*
++ * Flag the last block both by clearing out the next pointer
++ * and marking the control field.
++ */
++ write_slavemem32 (adev, last_block, 0x02000000);
++
++ /*
++ * If we're out of buffers make sure the free list pointer is NULL
++ */
++ if (!adev->acx_txbuf_blocks_free) {
++ adev->acx_txbuf_free = 0;
++ }
++ }
++ else {
++ block = 0;
++ }
++ spin_unlock_irqrestore (&adev->txbuf_lock, flags);
++ return block;
++}
++
++/*
++ * Return buffer space back to the pool by following the next pointers until we find
++ * the block marked as the end. Point the last block to the head of the free list,
++ * then update the head of the free list to point to the newly freed memory.
++ * This routine gets called in interrupt context, so it shouldn't block to protect
++ * the integrity of the linked list. The ISR already holds the lock.
++ */
++void
++reclaim_acx_txbuf_space (acx_device_t *adev, u32 blockptr) {
++ u32 cur, last, next;
++ unsigned long flags;
++
++ spin_lock_irqsave (&adev->txbuf_lock, flags);
++ if ((blockptr >= adev->acx_txbuf_start) &&
++ (blockptr <= adev->acx_txbuf_start +
++ (adev->acx_txbuf_numblocks - 1) * adev->memblocksize)) {
++ cur = blockptr;
++ do {
++ last = cur;
++ next = read_slavemem32 (adev, cur);
++
++ /*
++ * Advance to the next block in this allocation
++ */
++ cur = (next & 0x7ffff) << 5;
++
++ /*
++ * This block now counts as free.
++ */
++ adev->acx_txbuf_blocks_free++;
++ } while (!(next & 0x02000000));
++
++ /*
++ * last now points to the last block of that allocation. Update the pointer
++ * in that block to point to the free list and reset the free list to the
++ * first block of the free call. If there were no free blocks, make sure
++ * the new end of the list marks itself as truly the end.
++ */
++ if (adev->acx_txbuf_free) {
++ write_slavemem32 (adev, last, adev->acx_txbuf_free >> 5);
++ }
++ else {
++ write_slavemem32 (adev, last, 0x02000000);
++ }
++ adev->acx_txbuf_free = blockptr;
++ }
++ spin_unlock_irqrestore(&adev->txbuf_lock, flags);
++}
++
++/*
++ * Initialize the pieces managing the transmit buffer pool on the ACX. The transmit
++ * buffer is a circular queue with one 32 bit word reserved at the beginning of each
++ * block. The upper 13 bits are a control field, of which only 0x02000000 has any
++ * meaning. The lower 19 bits are the address of the next block divided by 32.
++ */
++void
++init_acx_txbuf (acx_device_t *adev) {
++
++ /*
++ * acx100_s_init_memory_pools set up txbuf_start and txbuf_numblocks for us.
++ * All we need to do is reset the rest of the bookeeping.
++ */
++
++ adev->acx_txbuf_free = adev->acx_txbuf_start;
++ adev->acx_txbuf_blocks_free = adev->acx_txbuf_numblocks;
++
++ /*
++ * Initialization leaves the last transmit pool block without a pointer back to
++ * the head of the list, but marked as the end of the list. That's how we want
++ * to see it, too, so leave it alone. This is only ever called after a firmware
++ * reset, so the ACX memory is in the state we want.
++ */
++
++}
++
++INLINE_IO int
++adev_present(acx_device_t *adev)
++{
++ /* fast version (accesses the first register, IO_ACX_SOFT_RESET,
++ * which should be safe): */
++ return readl(adev->iobase) != 0xffffffff;
++}
++
++/***********************************************************************
++*/
++static inline txdesc_t*
++get_txdesc(acx_device_t *adev, int index)
++{
++ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size);
++}
++
++static inline txdesc_t*
++advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc)
++{
++ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size);
++}
++
++static txhostdesc_t*
++get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ index /= adev->txdesc_size;
++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ return &adev->txhostdesc_start[index*2];
++}
++
++static inline client_t*
++get_txc(acx_device_t *adev, txdesc_t* txdesc)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ index /= adev->txdesc_size;
++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ return adev->txc[index];
++}
++
++static inline u16
++get_txr(acx_device_t *adev, txdesc_t* txdesc)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ index /= adev->txdesc_size;
++ return adev->txr[index];
++}
++
++static inline void
++put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return;
++ }
++ index /= adev->txdesc_size;
++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return;
++ }
++ adev->txc[index] = c;
++ adev->txr[index] = r111;
++}
++
++
++/***********************************************************************
++** EEPROM and PHY read/write helpers
++*/
++/***********************************************************************
++** acxmem_read_eeprom_byte
++**
++** Function called to read an octet in the EEPROM.
++**
++** This function is used by acxmem_e_probe to check if the
++** connected card is a legal one or not.
++**
++** Arguments:
++** adev ptr to acx_device structure
++** addr address to read in the EEPROM
++** charbuf ptr to a char. This is where the read octet
++** will be stored
++*/
++int
++acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf)
++{
++ int result;
++ int count;
++
++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
++
++ count = 0xffff;
++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
++ /* scheduling away instead of CPU burning loop
++ * doesn't seem to work here at all:
++ * awful delay, sometimes also failure.
++ * Doesn't matter anyway (only small delay). */
++ if (unlikely(!--count)) {
++ printk("%s: timeout waiting for EEPROM read\n",
++ adev->ndev->name);
++ result = NOT_OK;
++ goto fail;
++ }
++ cpu_relax();
++ }
++
++ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA);
++ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf);
++ result = OK;
++
++fail:
++ return result;
++}
++
++
++/***********************************************************************
++** We don't lock hw accesses here since we never r/w eeprom in IRQ
++** Note: this function sleeps only because of GFP_KERNEL alloc
++*/
++#ifdef UNUSED
++int
++acxmem_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf)
++{
++ u8 *data_verify = NULL;
++ unsigned long flags;
++ int count, i;
++ int result = NOT_OK;
++ u16 gpio_orig;
++
++ printk("acx: WARNING! I would write to EEPROM now. "
++ "Since I really DON'T want to unless you know "
++ "what you're doing (THIS CODE WILL PROBABLY "
++ "NOT WORK YET!), I will abort that now. And "
++ "definitely make sure to make a "
++ "/proc/driver/acx_wlan0_eeprom backup copy first!!! "
++ "(the EEPROM content includes the PCI config header!! "
++ "If you kill important stuff, then you WILL "
++ "get in trouble and people DID get in trouble already)\n");
++ return OK;
++
++ FN_ENTER;
++
++ data_verify = kmalloc(len, GFP_KERNEL);
++ if (!data_verify) {
++ goto end;
++ }
++
++ /* first we need to enable the OE (EEPROM Output Enable) GPIO line
++ * to be able to write to the EEPROM.
++ * NOTE: an EEPROM writing success has been reported,
++ * but you probably have to modify GPIO_OUT, too,
++ * and you probably need to activate a different GPIO
++ * line instead! */
++ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE);
++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1);
++ write_flush(adev);
++
++ /* ok, now start writing the data out */
++ for (i = 0; i < len; i++) {
++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
++ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i));
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_EEPROM_CTL, 1);
++
++ count = 0xffff;
++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
++ if (unlikely(!--count)) {
++ printk("WARNING, DANGER!!! "
++ "Timeout waiting for EEPROM write\n");
++ goto end;
++ }
++ cpu_relax();
++ }
++ }
++
++ /* disable EEPROM writing */
++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig);
++ write_flush(adev);
++
++ /* now start a verification run */
++ for (i = 0; i < len; i++) {
++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
++
++ count = 0xffff;
++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
++ if (unlikely(!--count)) {
++ printk("timeout waiting for EEPROM read\n");
++ goto end;
++ }
++ cpu_relax();
++ }
++
++ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA);
++ }
++
++ if (0 == memcmp(charbuf, data_verify, len))
++ result = OK; /* read data matches, success */
++
++end:
++ kfree(data_verify);
++ FN_EXIT1(result);
++ return result;
++}
++#endif /* UNUSED */
++
++
++/***********************************************************************
++** acxmem_s_read_phy_reg
++**
++** Messing with rx/tx disabling and enabling here
++** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic
++*/
++int
++acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
++{
++ int result = NOT_OK;
++ int count;
++
++ FN_ENTER;
++
++ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_PHY_CTL, 2);
++
++ count = 0xffff;
++ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
++ /* scheduling away instead of CPU burning loop
++ * doesn't seem to work here at all:
++ * awful delay, sometimes also failure.
++ * Doesn't matter anyway (only small delay). */
++ if (unlikely(!--count)) {
++ printk("%s: timeout waiting for phy read\n",
++ adev->ndev->name);
++ *charbuf = 0;
++ goto fail;
++ }
++ cpu_relax();
++ }
++
++ log(L_DEBUG, "count was %u\n", count);
++ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA);
++
++ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg);
++ result = OK;
++ goto fail; /* silence compiler warning */
++fail:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++*/
++int
++acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
++{
++ int count;
++ FN_ENTER;
++
++ /* mprusko said that 32bit accesses result in distorted sensitivity
++ * on his card. Unconfirmed, looks like it's not true (most likely since we
++ * now properly flush writes). */
++ write_reg32(adev, IO_ACX_PHY_DATA, value);
++ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_PHY_CTL, 1);
++ write_flush(adev);
++
++ count = 0xffff;
++ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
++ /* scheduling away instead of CPU burning loop
++ * doesn't seem to work here at all:
++ * awful delay, sometimes also failure.
++ * Doesn't matter anyway (only small delay). */
++ if (unlikely(!--count)) {
++ printk("%s: timeout waiting for phy read\n",
++ adev->ndev->name);
++ goto fail;
++ }
++ cpu_relax();
++ }
++
++ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg);
++ fail:
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++#define NO_AUTO_INCREMENT 1
++
++/***********************************************************************
++** acxmem_s_write_fw
++**
++** Write the firmware image into the card.
++**
++** Arguments:
++** adev wlan device structure
++** fw_image firmware image.
++**
++** Returns:
++** 1 firmware image corrupted
++** 0 success
++*/
++static int
++acxmem_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset)
++{
++ int len, size, checkMismatch = -1;
++ u32 sum, v32, tmp, id;
++ /* we skip the first four bytes which contain the control sum */
++ const u8 *p = (u8*)fw_image + 4;
++
++ /* start the image checksum by adding the image size value */
++ sum = p[0]+p[1]+p[2]+p[3];
++ p += 4;
++
++#ifdef NOPE
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
++#else
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
++ write_flush(adev);
++#endif
++#endif
++ len = 0;
++ size = le32_to_cpu(fw_image->size) & (~3);
++
++ while (likely(len < size)) {
++ v32 = be32_to_cpu(*(u32*)p);
++ sum += p[0]+p[1]+p[2]+p[3];
++ p += 4;
++ len += 4;
++
++#ifdef NOPE
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
++ write_flush(adev);
++#endif
++ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32);
++ write_flush(adev);
++#endif
++ write_slavemem32 (adev, offset + len - 4, v32);
++
++ id = read_id_register (adev);
++
++ /*
++ * check the data written
++ */
++ tmp = read_slavemem32 (adev, offset + len - 4);
++ if (checkMismatch && (tmp != v32)) {
++ printk ("first data mismatch at 0x%08x good 0x%08x bad 0x%08x id 0x%08x\n",
++ offset + len - 4, v32, tmp, id);
++ checkMismatch = 0;
++ }
++ }
++ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n",
++ size, sum, le32_to_cpu(fw_image->chksum));
++
++ /* compare our checksum with the stored image checksum */
++ return (sum != le32_to_cpu(fw_image->chksum));
++}
++
++
++/***********************************************************************
++** acxmem_s_validate_fw
++**
++** Compare the firmware image given with
++** the firmware image written into the card.
++**
++** Arguments:
++** adev wlan device structure
++** fw_image firmware image.
++**
++** Returns:
++** NOT_OK firmware image corrupted or not correctly written
++** OK success
++*/
++static int
++acxmem_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image,
++ u32 offset)
++{
++ u32 sum, v32, w32;
++ int len, size;
++ int result = OK;
++ /* we skip the first four bytes which contain the control sum */
++ const u8 *p = (u8*)fw_image + 4;
++
++ /* start the image checksum by adding the image size value */
++ sum = p[0]+p[1]+p[2]+p[3];
++ p += 4;
++
++ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
++
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
++#else
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
++#endif
++
++ len = 0;
++ size = le32_to_cpu(fw_image->size) & (~3);
++
++ while (likely(len < size)) {
++ v32 = be32_to_cpu(*(u32*)p);
++ p += 4;
++ len += 4;
++
++#ifdef NOPE
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
++#endif
++ udelay(10);
++ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA);
++#endif
++ w32 = read_slavemem32 (adev, offset + len - 4);
++
++ if (unlikely(w32 != v32)) {
++ printk("acx: FATAL: firmware upload: "
++ "data parts at offset %d don't match\n(0x%08X vs. 0x%08X)!\n"
++ "I/O timing issues or defective memory, with DWL-xx0+? "
++ "ACX_IO_WIDTH=16 may help. Please report\n",
++ len, v32, w32);
++ result = NOT_OK;
++ break;
++ }
++
++ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24);
++ }
++
++ /* sum control verification */
++ if (result != NOT_OK) {
++ if (sum != le32_to_cpu(fw_image->chksum)) {
++ printk("acx: FATAL: firmware upload: "
++ "checksums don't match!\n");
++ result = NOT_OK;
++ }
++ }
++
++ return result;
++}
++
++
++/***********************************************************************
++** acxmem_s_upload_fw
++**
++** Called from acx_reset_dev
++*/
++static int
++acxmem_s_upload_fw(acx_device_t *adev)
++{
++ firmware_image_t *fw_image = NULL;
++ int res = NOT_OK;
++ int try;
++ u32 file_size;
++ char *filename = "WLANGEN.BIN";
++#ifdef PATCH_AROUND_BAD_SPOTS
++ u32 offset;
++ int i;
++ /*
++ * arm-linux-objdump -d patch.bin, or
++ * od -Ax -t x4 patch.bin after finding the bounds
++ * of the .text section with arm-linux-objdump -s patch.bin
++ */
++ u32 patch[] = {
++ 0xe584c030, 0xe59fc008,
++ 0xe92d1000, 0xe59fc004, 0xe8bd8000, 0x0000080c,
++ 0x0000aa68, 0x605a2200, 0x2c0a689c, 0x2414d80a,
++ 0x2f00689f, 0x1c27d007, 0x06241e7c, 0x2f000e24,
++ 0xe000d1f6, 0x602e6018, 0x23036468, 0x480203db,
++ 0x60ca6003, 0xbdf0750a, 0xffff0808
++ };
++#endif
++
++ FN_ENTER;
++ /* No combined image; tell common we need the radio firmware, too */
++ adev->need_radio_fw = 1;
++
++ fw_image = acx_s_read_fw(adev->dev, filename, &file_size);
++ if (!fw_image) {
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++ }
++
++ for (try = 1; try <= 5; try++) {
++ res = acxmem_s_write_fw(adev, fw_image, 0);
++ log(L_DEBUG|L_INIT, "acx_write_fw (main): %d\n", res);
++ if (OK == res) {
++ res = acxmem_s_validate_fw(adev, fw_image, 0);
++ log(L_DEBUG|L_INIT, "acx_validate_fw "
++ "(main): %d\n", res);
++ }
++
++ if (OK == res) {
++ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED);
++ break;
++ }
++ printk("acx: firmware upload attempt #%d FAILED, "
++ "retrying...\n", try);
++ acx_s_msleep(1000); /* better wait for a while... */
++ }
++
++#ifdef PATCH_AROUND_BAD_SPOTS
++ /*
++ * Only want to do this if the firmware is exactly what we expect for an
++ * iPaq 4700; otherwise, bad things would ensue.
++ */
++ if ((HX4700_FIRMWARE_CHECKSUM == fw_image->chksum) ||
++ (HX4700_ALTERNATE_FIRMWARE_CHECKSUM == fw_image->chksum)) {
++ /*
++ * Put the patch after the main firmware image. 0x950c contains
++ * the ACX's idea of the end of the firmware. Use that location to
++ * load ours (which depends on that location being 0xab58) then
++ * update that location to point to after ours.
++ */
++
++ offset = read_slavemem32 (adev, 0x950c);
++
++ log (L_DEBUG, "acx: patching in at 0x%04x\n", offset);
++
++ for (i = 0; i < sizeof(patch) / sizeof(patch[0]); i++) {
++ write_slavemem32 (adev, offset, patch[i]);
++ offset += sizeof(u32);
++ }
++
++ /*
++ * Patch the instruction at 0x0804 to branch to our ARM patch at 0xab58
++ */
++ write_slavemem32 (adev, 0x0804, 0xea000000 + (0xab58-0x0804-8)/4);
++
++ /*
++ * Patch the instructions at 0x1f40 to branch to our Thumb patch at 0xab74
++ *
++ * 4a00 ldr r2, [pc, #0]
++ * 4710 bx r2
++ * .data 0xab74+1
++ */
++ write_slavemem32 (adev, 0x1f40, 0x47104a00);
++ write_slavemem32 (adev, 0x1f44, 0x0000ab74+1);
++
++ /*
++ * Bump the end of the firmware up to beyond our patch.
++ */
++ write_slavemem32 (adev, 0x950c, offset);
++
++ }
++#endif
++
++ vfree(fw_image);
++
++ FN_EXIT1(res);
++ return res;
++}
++
++
++/***********************************************************************
++** acxmem_s_upload_radio
++**
++** Uploads the appropriate radio module firmware into the card.
++*/
++int
++acxmem_s_upload_radio(acx_device_t *adev)
++{
++ acx_ie_memmap_t mm;
++ firmware_image_t *radio_image;
++ acx_cmd_radioinit_t radioinit;
++ int res = NOT_OK;
++ int try;
++ u32 offset;
++ u32 size;
++ char filename[sizeof("RADIONN.BIN")];
++
++ if (!adev->need_radio_fw) return OK;
++
++ FN_ENTER;
++
++ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
++ offset = le32_to_cpu(mm.CodeEnd);
++
++ snprintf(filename, sizeof(filename), "RADIO%02x.BIN",
++ adev->radio_type);
++ radio_image = acx_s_read_fw(adev->dev, filename, &size);
++ if (!radio_image) {
++ printk("acx: can't load radio module '%s'\n", filename);
++ goto fail;
++ }
++
++ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
++
++ for (try = 1; try <= 5; try++) {
++ res = acxmem_s_write_fw(adev, radio_image, offset);
++ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res);
++ if (OK == res) {
++ res = acxmem_s_validate_fw(adev, radio_image, offset);
++ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res);
++ }
++
++ if (OK == res)
++ break;
++ printk("acx: radio firmware upload attempt #%d FAILED, "
++ "retrying...\n", try);
++ acx_s_msleep(1000); /* better wait for a while... */
++ }
++
++ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
++ radioinit.offset = cpu_to_le32(offset);
++
++ /* no endian conversion needed, remains in card CPU area: */
++ radioinit.len = radio_image->size;
++
++ vfree(radio_image);
++
++ if (OK != res)
++ goto fail;
++
++ /* will take a moment so let's have a big timeout */
++ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT,
++ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000));
++
++ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
++
++fail:
++ FN_EXIT1(res);
++ return res;
++}
++
++/***********************************************************************
++** acxmem_l_reset_mac
++**
++** MAC will be reset
++** Call context: reset_dev
++*/
++static void
++acxmem_l_reset_mac(acx_device_t *adev)
++{
++ int count;
++ FN_ENTER;
++
++ /* halt eCPU */
++ set_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
++
++ /* now do soft reset of eCPU, set bit */
++ set_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
++ log(L_DEBUG, "%s: enable soft reset...\n", __func__);
++
++ /* Windows driver sleeps here for a while with this sequence */
++ for (count = 0; count < 200; count++) {
++ udelay (50);
++ }
++
++ /* now clear bit again: deassert eCPU reset */
++ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__);
++ clear_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
++
++ /* now start a burst read from initial EEPROM */
++ set_regbits (adev, IO_ACX_EE_START, 0x1);
++
++ /*
++ * Windows driver sleeps here for a while with this sequence
++ */
++ for (count = 0; count < 200; count++) {
++ udelay (50);
++ }
++
++ /* Windows driver writes 0x10000 to register 0x808 here */
++
++ write_reg32 (adev, 0x808, 0x10000);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_s_verify_init
++*/
++static int
++acxmem_s_verify_init(acx_device_t *adev)
++{
++ int result = NOT_OK;
++ unsigned long timeout;
++
++ FN_ENTER;
++
++ timeout = jiffies + 2*HZ;
++ for (;;) {
++ u32 irqstat = read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES);
++ if ((irqstat != 0xFFFFFFFF) && (irqstat & HOST_INT_FCS_THRESHOLD)) {
++ result = OK;
++ write_reg32(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD);
++ break;
++ }
++ if (time_after(jiffies, timeout))
++ break;
++ /* Init may take up to ~0.5 sec total */
++ acx_s_msleep(50);
++ }
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** A few low-level helpers
++**
++** Note: these functions are not protected by lock
++** and thus are never allowed to be called from IRQ.
++** Also they must not race with fw upload which uses same hw regs
++*/
++
++/***********************************************************************
++** acxmem_write_cmd_type_status
++*/
++
++static inline void
++acxmem_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status)
++{
++ write_slavemem32 (adev, (u32) adev->cmd_area, type | (status << 16));
++ write_flush(adev);
++}
++
++
++/***********************************************************************
++** acxmem_read_cmd_type_status
++*/
++static u32
++acxmem_read_cmd_type_status(acx_device_t *adev)
++{
++ u32 cmd_type, cmd_status;
++
++ cmd_type = read_slavemem32 (adev, (u32) adev->cmd_area);
++
++ cmd_status = (cmd_type >> 16);
++ cmd_type = (u16)cmd_type;
++
++ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n",
++ cmd_type, cmd_status,
++ acx_cmd_status_str(cmd_status));
++
++ return cmd_status;
++}
++
++
++/***********************************************************************
++** acxmem_s_reset_dev
++**
++** Arguments:
++** netdevice that contains the adev variable
++** Returns:
++** NOT_OK on fail
++** OK on success
++** Side effects:
++** device is hard reset
++** Call context:
++** acxmem_e_probe
++** Comment:
++** This resets the device using low level hardware calls
++** as well as uploads and verifies the firmware to the card
++*/
++
++static inline void
++init_mboxes(acx_device_t *adev)
++{
++ u32 cmd_offs, info_offs;
++
++ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS);
++ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS);
++ adev->cmd_area = (u8*) cmd_offs;
++ adev->info_area = (u8*) info_offs;
++ /*
++ log(L_DEBUG, "iobase2=%p\n"
++ */
++ log( L_DEBUG, "cmd_mbox_offset=%X cmd_area=%p\n"
++ "info_mbox_offset=%X info_area=%p\n",
++ cmd_offs, adev->cmd_area,
++ info_offs, adev->info_area);
++}
++
++
++static inline void
++read_eeprom_area(acx_device_t *adev)
++{
++#if ACX_DEBUG > 1
++ int offs;
++ u8 tmp;
++
++ for (offs = 0x8c; offs < 0xb9; offs++)
++ acxmem_read_eeprom_byte(adev, offs, &tmp);
++#endif
++}
++
++static int
++acxmem_s_reset_dev(acx_device_t *adev)
++{
++ const char* msg = "";
++ unsigned long flags;
++ int result = NOT_OK;
++ u16 hardware_info;
++ u16 ecpu_ctrl;
++ int count;
++ u32 tmp;
++
++ FN_ENTER;
++ /*
++ write_reg32 (adev, IO_ACX_SLV_MEM_CP, 0);
++ */
++ /* reset the device to make sure the eCPU is stopped
++ * to upload the firmware correctly */
++
++ acx_lock(adev, flags);
++
++ /* Windows driver does some funny things here */
++ /*
++ * clear bit 0x200 in register 0x2A0
++ */
++ clear_regbits (adev, 0x2A0, 0x200);
++
++ /*
++ * Set bit 0x200 in ACX_GPIO_OUT
++ */
++ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
++
++ /*
++ * read register 0x900 until its value is 0x8400104C, sleeping
++ * in between reads if it's not immediate
++ */
++ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
++ count = 500;
++ while (count-- && (tmp != ACX_VENDOR_ID)) {
++ mdelay (10);
++ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
++ }
++
++ /* end what Windows driver does */
++
++ acxmem_l_reset_mac(adev);
++
++ ecpu_ctrl = read_reg32(adev, IO_ACX_ECPU_CTRL) & 1;
++ if (!ecpu_ctrl) {
++ msg = "eCPU is already running. ";
++ goto end_unlock;
++ }
++
++#ifdef WE_DONT_NEED_THAT_DO_WE
++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) {
++ /* eCPU most likely means "embedded CPU" */
++ msg = "eCPU did not start after boot from flash. ";
++ goto end_unlock;
++ }
++
++ /* check sense on reset flags */
++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) {
++ printk("%s: eCPU did not start after boot (SOR), "
++ "is this fatal?\n", adev->ndev->name);
++ }
++#endif
++ /* scan, if any, is stopped now, setting corresponding IRQ bit */
++ adev->irq_status |= HOST_INT_SCAN_COMPLETE;
++
++ acx_unlock(adev, flags);
++
++ /* need to know radio type before fw load */
++ /* Need to wait for arrival of this information in a loop,
++ * most probably since eCPU runs some init code from EEPROM
++ * (started burst read in reset_mac()) which also
++ * sets the radio type ID */
++
++ count = 0xffff;
++ do {
++ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION);
++ if (!--count) {
++ msg = "eCPU didn't indicate radio type";
++ goto end_fail;
++ }
++ cpu_relax();
++ } while (!(hardware_info & 0xff00)); /* radio type still zero? */
++ printk("ACX radio type 0x%02x\n", (hardware_info >> 8) & 0xff);
++ /* printk("DEBUG: count %d\n", count); */
++ adev->form_factor = hardware_info & 0xff;
++ adev->radio_type = hardware_info >> 8;
++
++ /* load the firmware */
++ if (OK != acxmem_s_upload_fw(adev))
++ goto end_fail;
++
++ /* acx_s_msleep(10); this one really shouldn't be required */
++
++ /* now start eCPU by clearing bit */
++ clear_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
++ log(L_DEBUG, "booted eCPU up and waiting for completion...\n");
++
++ /* Windows driver clears bit 0x200 in register 0x2A0 here */
++ clear_regbits (adev, 0x2A0, 0x200);
++
++ /* Windows driver sets bit 0x200 in ACX_GPIO_OUT here */
++ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
++ /* wait for eCPU bootup */
++ if (OK != acxmem_s_verify_init(adev)) {
++ msg = "timeout waiting for eCPU. ";
++ goto end_fail;
++ }
++ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n");
++ init_mboxes(adev);
++ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
++
++ /* test that EEPROM is readable */
++ read_eeprom_area(adev);
++
++ result = OK;
++ goto end;
++
++/* Finish error message. Indicate which function failed */
++end_unlock:
++ acx_unlock(adev, flags);
++end_fail:
++ printk("acx: %sreset_dev() FAILED\n", msg);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acxmem_s_issue_cmd_timeo
++**
++** Sends command to fw, extract result
++**
++** NB: we do _not_ take lock inside, so be sure to not touch anything
++** which may interfere with IRQ handler operation
++**
++** TODO: busy wait is a bit silly, so:
++** 1) stop doing many iters - go to sleep after first
++** 2) go to waitqueue based approach: wait, not poll!
++*/
++#undef FUNC
++#define FUNC "issue_cmd"
++
++#if !ACX_DEBUG
++int
++acxmem_s_issue_cmd_timeo(
++ acx_device_t *adev,
++ unsigned int cmd,
++ void *buffer,
++ unsigned buflen,
++ unsigned cmd_timeout)
++{
++#else
++int
++acxmem_s_issue_cmd_timeo_debug(
++ acx_device_t *adev,
++ unsigned cmd,
++ void *buffer,
++ unsigned buflen,
++ unsigned cmd_timeout,
++ const char* cmdstr)
++{
++ unsigned long start = jiffies;
++#endif
++ const char *devname;
++ unsigned counter;
++ u16 irqtype;
++ int i, j;
++ u8 *p;
++ u16 cmd_status;
++ unsigned long timeout;
++
++ FN_ENTER;
++
++ devname = adev->ndev->name;
++ if (!devname || !devname[0] || devname[4]=='%')
++ devname = "acx";
++
++ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n",
++ cmdstr, buflen, cmd_timeout,
++ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
++
++ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) {
++ printk("%s: "FUNC"(): firmware is not loaded yet, "
++ "cannot execute commands!\n", devname);
++ goto bad;
++ }
++
++ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) {
++ printk("input buffer (len=%u):\n", buflen);
++ acx_dump_bytes(buffer, buflen);
++ }
++
++ /* wait for firmware to become idle for our command submission */
++ timeout = HZ/5;
++ counter = (timeout * 1000 / HZ) - 1; /* in ms */
++ timeout += jiffies;
++ do {
++ cmd_status = acxmem_read_cmd_type_status(adev);
++ /* Test for IDLE state */
++ if (!cmd_status)
++ break;
++ if (counter % 8 == 0) {
++ if (time_after(jiffies, timeout)) {
++ counter = 0;
++ break;
++ }
++ /* we waited 8 iterations, no luck. Sleep 8 ms */
++ acx_s_msleep(8);
++ }
++ } while (likely(--counter));
++
++ if (!counter) {
++ /* the card doesn't get idle, we're in trouble */
++ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n",
++ devname, cmd_status);
++#if DUMP_IF_SLOW > 0
++ dump_acxmem (adev, 0, 0x10000);
++ panic ("not idle");
++#endif
++ goto bad;
++ } else if (counter < 190) { /* if waited >10ms... */
++ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. "
++ "Please report\n", 199 - counter);
++ }
++
++ /* now write the parameters of the command if needed */
++ if (buffer && buflen) {
++ /* if it's an INTERROGATE command, just pass the length
++ * of parameters to read, as data */
++#if CMD_DISCOVERY
++ if (cmd == ACX1xx_CMD_INTERROGATE)
++ memset_io(adev->cmd_area + 4, 0xAA, buflen);
++#endif
++ /*
++ * slave memory version
++ */
++ copy_to_slavemem (adev, (u32) (adev->cmd_area + 4), buffer,
++ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen);
++ }
++ /* now write the actual command type */
++ acxmem_write_cmd_type_status(adev, cmd, 0);
++
++ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */
++ adev->irq_status &= ~HOST_INT_CMD_COMPLETE;
++
++ /* execute command */
++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD);
++ write_flush(adev);
++
++ /* wait for firmware to process command */
++
++ /* Ensure nonzero and not too large timeout.
++ ** Also converts e.g. 100->99, 200->199
++ ** which is nice but not essential */
++ cmd_timeout = (cmd_timeout-1) | 1;
++ if (unlikely(cmd_timeout > 1199))
++ cmd_timeout = 1199;
++
++ /* we schedule away sometimes (timeout can be large) */
++ counter = cmd_timeout;
++ timeout = jiffies + cmd_timeout * HZ / 1000;
++ do {
++ if (!adev->irqs_active) { /* IRQ disabled: poll */
++ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
++ if (irqtype & HOST_INT_CMD_COMPLETE) {
++ write_reg16(adev, IO_ACX_IRQ_ACK,
++ HOST_INT_CMD_COMPLETE);
++ break;
++ }
++ } else { /* Wait when IRQ will set the bit */
++ irqtype = adev->irq_status;
++ if (irqtype & HOST_INT_CMD_COMPLETE)
++ break;
++ }
++
++ if (counter % 8 == 0) {
++ if (time_after(jiffies, timeout)) {
++ counter = 0;
++ break;
++ }
++ /* we waited 8 iterations, no luck. Sleep 8 ms */
++ acx_s_msleep(8);
++ }
++ } while (likely(--counter));
++
++ /* save state for debugging */
++ cmd_status = acxmem_read_cmd_type_status(adev);
++
++ /* put the card in IDLE state */
++ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
++
++ if (!counter) { /* timed out! */
++ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. "
++ "irq bits:0x%04X irq_status:0x%04X timeout:%dms "
++ "cmd_status:%d (%s)\n",
++ devname, (adev->irqs_active) ? "waiting" : "polling",
++ irqtype, adev->irq_status, cmd_timeout,
++ cmd_status, acx_cmd_status_str(cmd_status));
++ printk("%s: "FUNC"(): device irq status 0x%04x\n",
++ devname, read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES));
++ printk("%s: "FUNC"(): IO_ACX_IRQ_MASK 0x%04x IO_ACX_FEMR 0x%04x\n",
++ devname,
++ read_reg16 (adev, IO_ACX_IRQ_MASK),
++ read_reg16 (adev, IO_ACX_FEMR));
++ if (read_reg16 (adev, IO_ACX_IRQ_MASK) == 0xffff) {
++ printk ("acxmem: firmware probably hosed - reloading\n");
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
++ {
++ pm_message_t state;
++ /* acxmem_e_suspend (resume_pdev, state); */
++ acxmem_e_suspend (adev->ndev , state);
++ }
++#else
++ acxmem_e_suspend (adev, 0);
++#endif
++ {
++ resume_ndev = adev->ndev;
++ fw_resumer (NULL);
++ }
++ }
++
++ goto bad;
++ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */
++ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. "
++ "count:%d. Please report\n",
++ (adev->irqs_active) ? "waited" : "polled",
++ cmd_timeout - counter, counter);
++ }
++
++ if (1 != cmd_status) { /* it is not a 'Success' */
++ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). "
++ "Took %dms of %d\n",
++ devname, cmd_status, acx_cmd_status_str(cmd_status),
++ cmd_timeout - counter, cmd_timeout);
++ /* zero out result buffer
++ * WARNING: this will trash stack in case of illegally large input
++ * length! */
++ if (buflen > 388) {
++ /*
++ * 388 is maximum command length
++ */
++ printk ("invalid length 0x%08x\n", buflen);
++ buflen = 388;
++ }
++ p = (u8 *) buffer;
++ for (i = 0; i < buflen; i+= 16) {
++ printk ("%04x:", i);
++ for (j = 0; (j < 16) && (i+j < buflen); j++) {
++ printk (" %02x", *p++);
++ }
++ printk ("\n");
++ }
++ if (buffer && buflen)
++ memset(buffer, 0, buflen);
++ goto bad;
++ }
++
++ /* read in result parameters if needed */
++ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) {
++ copy_from_slavemem (adev, buffer, (u32) (adev->cmd_area + 4), buflen);
++ if (acx_debug & L_DEBUG) {
++ printk("output buffer (len=%u): ", buflen);
++ acx_dump_bytes(buffer, buflen);
++ }
++ }
++
++/* ok: */
++ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n",
++ cmdstr, jiffies - start);
++ FN_EXIT1(OK);
++ return OK;
++
++bad:
++ /* Give enough info so that callers can avoid
++ ** printing their own diagnostic messages */
++#if ACX_DEBUG
++ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
++#else
++ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
++#endif
++ dump_stack();
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++*/
++#if defined(NONESSENTIAL_FEATURES)
++typedef struct device_id {
++ unsigned char id[6];
++ char *descr;
++ char *type;
++} device_id_t;
++
++static const device_id_t
++device_ids[] =
++{
++ {
++ {'G', 'l', 'o', 'b', 'a', 'l'},
++ NULL,
++ NULL,
++ },
++ {
++ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
++ "uninitialized",
++ "SpeedStream SS1021 or Gigafast WF721-AEX"
++ },
++ {
++ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85},
++ "non-standard",
++ "DrayTek Vigor 520"
++ },
++ {
++ {'?', '?', '?', '?', '?', '?'},
++ "non-standard",
++ "Level One WPC-0200"
++ },
++ {
++ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
++ "empty",
++ "DWL-650+ variant"
++ }
++};
++
++static void
++acx_show_card_eeprom_id(acx_device_t *adev)
++{
++ unsigned char buffer[CARD_EEPROM_ID_SIZE];
++ int i;
++
++ memset(&buffer, 0, CARD_EEPROM_ID_SIZE);
++ /* use direct EEPROM access */
++ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) {
++ if (OK != acxmem_read_eeprom_byte(adev,
++ ACX100_EEPROM_ID_OFFSET + i,
++ &buffer[i])) {
++ printk("acx: reading EEPROM FAILED\n");
++ break;
++ }
++ }
++
++ for (i = 0; i < VEC_SIZE(device_ids); i++) {
++ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) {
++ if (device_ids[i].descr) {
++ printk("acx: EEPROM card ID string check "
++ "found %s card ID: is this %s?\n",
++ device_ids[i].descr, device_ids[i].type);
++ }
++ break;
++ }
++ }
++ if (i == VEC_SIZE(device_ids)) {
++ printk("acx: EEPROM card ID string check found "
++ "unknown card: expected 'Global', got '%.*s\'. "
++ "Please report\n", CARD_EEPROM_ID_SIZE, buffer);
++ }
++}
++#endif /* NONESSENTIAL_FEATURES */
++
++/***********************************************************************
++** acxmem_free_desc_queues
++**
++** Releases the queues that have been allocated, the
++** others have been initialised to NULL so this
++** function can be used if only part of the queues were allocated.
++*/
++
++void
++acxmem_free_desc_queues(acx_device_t *adev)
++{
++#define ACX_FREE_QUEUE(size, ptr, phyaddr) \
++ if (ptr) { \
++ kfree(ptr); \
++ ptr = NULL; \
++ size = 0; \
++ }
++
++ FN_ENTER;
++
++ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy);
++ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy);
++
++ adev->txdesc_start = NULL;
++
++ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy);
++ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy);
++
++ adev->rxdesc_start = NULL;
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_s_delete_dma_regions
++*/
++static void
++acxmem_s_delete_dma_regions(acx_device_t *adev)
++{
++ unsigned long flags;
++
++ FN_ENTER;
++ /* disable radio Tx/Rx. Shouldn't we use the firmware commands
++ * here instead? Or are we that much down the road that it's no
++ * longer possible here? */
++ /*
++ * slave memory interface really doesn't like this.
++ */
++ /*
++ write_reg16(adev, IO_ACX_ENABLE, 0);
++ */
++
++ acx_s_msleep(100);
++
++ acx_lock(adev, flags);
++ acxmem_free_desc_queues(adev);
++ acx_unlock(adev, flags);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_e_probe
++**
++** Probe routine called when a PCI device w/ matching ID is found.
++** Here's the sequence:
++** - Allocate the PCI resources.
++** - Read the PCMCIA attribute memory to make sure we have a WLAN card
++** - Reset the MAC
++** - Initialize the dev and wlan data
++** - Initialize the MAC
++**
++** pdev - ptr to pci device structure containing info about pci configuration
++** id - ptr to the device id entry that matched this device
++*/
++static const u16
++IO_ACX100[] =
++{
++ 0x0000, /* IO_ACX_SOFT_RESET */
++
++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
++ 0x0018, /* IO_ACX_SLV_MEM_DATA */
++ 0x001c, /* IO_ACX_SLV_MEM_CTL */
++ 0x0020, /* IO_ACX_SLV_END_CTL */
++
++ 0x0034, /* IO_ACX_FEMR */
++
++ 0x007c, /* IO_ACX_INT_TRIG */
++ 0x0098, /* IO_ACX_IRQ_MASK */
++ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */
++ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */
++ 0x00ac, /* IO_ACX_IRQ_ACK */
++ 0x00b0, /* IO_ACX_HINT_TRIG */
++
++ 0x0104, /* IO_ACX_ENABLE */
++
++ 0x0250, /* IO_ACX_EEPROM_CTL */
++ 0x0254, /* IO_ACX_EEPROM_ADDR */
++ 0x0258, /* IO_ACX_EEPROM_DATA */
++ 0x025c, /* IO_ACX_EEPROM_CFG */
++
++ 0x0268, /* IO_ACX_PHY_ADDR */
++ 0x026c, /* IO_ACX_PHY_DATA */
++ 0x0270, /* IO_ACX_PHY_CTL */
++
++ 0x0290, /* IO_ACX_GPIO_OE */
++
++ 0x0298, /* IO_ACX_GPIO_OUT */
++
++ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */
++ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */
++ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */
++
++ 0x02d0, /* IO_ACX_EE_START */
++ 0x02d4, /* IO_ACX_SOR_CFG */
++ 0x02d8 /* IO_ACX_ECPU_CTRL */
++};
++
++static const u16
++IO_ACX111[] =
++{
++ 0x0000, /* IO_ACX_SOFT_RESET */
++
++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
++ 0x0018, /* IO_ACX_SLV_MEM_DATA */
++ 0x001c, /* IO_ACX_SLV_MEM_CTL */
++ 0x0020, /* IO_ACX_SLV_MEM_CP */
++
++ 0x0034, /* IO_ACX_FEMR */
++
++ 0x00b4, /* IO_ACX_INT_TRIG */
++ 0x00d4, /* IO_ACX_IRQ_MASK */
++ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */
++ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */
++ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */
++ 0x00e8, /* IO_ACX_IRQ_ACK */
++ 0x00ec, /* IO_ACX_HINT_TRIG */
++
++ 0x01d0, /* IO_ACX_ENABLE */
++
++ 0x0338, /* IO_ACX_EEPROM_CTL */
++ 0x033c, /* IO_ACX_EEPROM_ADDR */
++ 0x0340, /* IO_ACX_EEPROM_DATA */
++ 0x0344, /* IO_ACX_EEPROM_CFG */
++
++ 0x0350, /* IO_ACX_PHY_ADDR */
++ 0x0354, /* IO_ACX_PHY_DATA */
++ 0x0358, /* IO_ACX_PHY_CTL */
++
++ 0x0374, /* IO_ACX_GPIO_OE */
++
++ 0x037c, /* IO_ACX_GPIO_OUT */
++
++ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */
++ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */
++ 0x0390, /* IO_ACX_EEPROM_INFORMATION */
++
++ 0x0100, /* IO_ACX_EE_START */
++ 0x0104, /* IO_ACX_SOR_CFG */
++ 0x0108, /* IO_ACX_ECPU_CTRL */
++};
++
++static void
++dummy_netdev_init(struct net_device *ndev) {}
++
++/*
++ * Most of the acx specific pieces of hardware reset.
++ */
++static int
++acxmem_complete_hw_reset (acx_device_t *adev)
++{
++ acx111_ie_configoption_t co;
++
++ /* NB: read_reg() reads may return bogus data before reset_dev(),
++ * since the firmware which directly controls large parts of the I/O
++ * registers isn't initialized yet.
++ * acx100 seems to be more affected than acx111 */
++ if (OK != acxmem_s_reset_dev (adev))
++ return -1;
++
++ if (IS_ACX100(adev)) {
++ /* ACX100: configopt struct in cmd mailbox - directly after reset */
++ copy_from_slavemem (adev, (u8*) &co, (u32) adev->cmd_area, sizeof (co));
++ }
++
++ if (OK != acx_s_init_mac(adev))
++ return -3;
++
++ if (IS_ACX111(adev)) {
++ /* ACX111: configopt struct needs to be queried after full init */
++ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS);
++ }
++
++ /*
++ * Set up transmit buffer administration
++ */
++ init_acx_txbuf (adev);
++
++ /*
++ * Windows driver writes 0x01000000 to register 0x288, RADIO_CTL, if the form factor
++ * is 3. It also write protects the EEPROM by writing 1<<9 to GPIO_OUT
++ */
++ if (adev->form_factor == 3) {
++ set_regbits (adev, 0x288, 0x01000000);
++ set_regbits (adev, 0x298, 1<<9);
++ }
++
++/* TODO: merge them into one function, they are called just once and are the same for pci & usb */
++ if (OK != acxmem_read_eeprom_byte(adev, 0x05, &adev->eeprom_version))
++ return -2;
++
++ acx_s_parse_configoption(adev, &co);
++ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */
++ acx_display_hardware_details(adev);
++
++ return 0;
++}
++
++static int acx_init_netdev(struct net_device *ndev, struct device *dev, int base_addr, int addr_size, int irq)
++{
++ const char *chip_name;
++ int result = -EIO;
++ int err;
++ u8 chip_type;
++ acx_device_t *adev = NULL;
++
++ FN_ENTER;
++
++ /* FIXME: prism54 calls pci_set_mwi() here,
++ * should we do/support the same? */
++
++ /* chiptype is u8 but id->driver_data is ulong
++ ** Works for now (possible values are 1 and 2) */
++ chip_type = CHIPTYPE_ACX100;
++ /* acx100 and acx111 have different PCI memory regions */
++ if (chip_type == CHIPTYPE_ACX100) {
++ chip_name = "ACX100";
++ } else if (chip_type == CHIPTYPE_ACX111) {
++ chip_name = "ACX111";
++ } else {
++ printk("acx: unknown chip type 0x%04X\n", chip_type);
++ goto fail_unknown_chiptype;
++ }
++
++ printk("acx: found %s-based wireless network card\n", chip_name);
++ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug);
++
++
++ dev_set_drvdata(dev, ndev);
++
++ ether_setup(ndev);
++
++ ndev->irq = irq;
++
++ ndev->base_addr = base_addr;
++printk (KERN_INFO "memwinbase=%lx memwinsize=%u\n",memwin.Base,memwin.Size);
++ if (addr_size == 0 || ndev->irq == 0)
++ goto fail_hw_params;
++ ndev->open = &acxmem_e_open;
++ ndev->stop = &acxmem_e_close;
++ //pdev->dev.release = &acxmem_e_release;
++ ndev->hard_start_xmit = &acx_i_start_xmit;
++ ndev->get_stats = &acx_e_get_stats;
++#if IW_HANDLER_VERSION <= 5
++ ndev->get_wireless_stats = &acx_e_get_wireless_stats;
++#endif
++ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
++ ndev->set_multicast_list = &acxmem_i_set_multicast_list;
++ ndev->tx_timeout = &acxmem_i_tx_timeout;
++ ndev->change_mtu = &acx_e_change_mtu;
++ ndev->watchdog_timeo = 4 * HZ;
++
++ adev = ndev2adev(ndev);
++ spin_lock_init(&adev->lock); /* initial state: unlocked */
++ spin_lock_init(&adev->txbuf_lock);
++ /* We do not start with downed sem: we want PARANOID_LOCKING to work */
++ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
++ /* since nobody can see new netdev yet, we can as well
++ ** just _presume_ that we're under sem (instead of actually taking it): */
++ /* acx_sem_lock(adev); */
++ adev->dev = dev;
++ adev->ndev = ndev;
++ adev->dev_type = DEVTYPE_MEM;
++ adev->chip_type = chip_type;
++ adev->chip_name = chip_name;
++ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111;
++ adev->membase = (volatile u32 *) ndev->base_addr;
++ adev->iobase = (volatile u32 *) ioremap_nocache (ndev->base_addr, addr_size);
++ /* to find crashes due to weird driver access
++ * to unconfigured interface (ifup) */
++ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead;
++
++#if defined(NONESSENTIAL_FEATURES)
++ acx_show_card_eeprom_id(adev);
++#endif /* NONESSENTIAL_FEATURES */
++
++#ifdef SET_MODULE_OWNER
++ SET_MODULE_OWNER(ndev);
++#endif
++ // need to fix that @@
++ SET_NETDEV_DEV(ndev, dev);
++
++ log(L_IRQ|L_INIT, "using IRQ %d\n", ndev->irq);
++
++ /* ok, pci setup is finished, now start initializing the card */
++
++ if (OK != acxmem_complete_hw_reset (adev))
++ goto fail_reset;
++
++ /*
++ * Set up default things for most of the card settings.
++ */
++ acx_s_set_defaults(adev);
++
++ /* Register the card, AFTER everything else has been set up,
++ * since otherwise an ioctl could step on our feet due to
++ * firmware operations happening in parallel or uninitialized data */
++ err = register_netdev(ndev);
++ if (OK != err) {
++ printk("acx: register_netdev() FAILED: %d\n", err);
++ goto fail_register_netdev;
++ }
++
++ acx_proc_register_entries(ndev);
++
++ /* Now we have our device, so make sure the kernel doesn't try
++ * to send packets even though we're not associated to a network yet */
++ acx_stop_queue(ndev, "on probe");
++ acx_carrier_off(ndev, "on probe");
++
++ /*
++ * Set up a default monitor type so that poor combinations of initialization
++ * sequences in monitor mode don't end up destroying the hardware type.
++ */
++ adev->monitor_type = ARPHRD_ETHER;
++
++ /*
++ * Register to receive inetaddr notifier changes. This will allow us to
++ * catch if the user changes the MAC address of the interface.
++ */
++ register_netdevice_notifier(&acx_netdev_notifier);
++
++ /* after register_netdev() userspace may start working with dev
++ * (in particular, on other CPUs), we only need to up the sem */
++ /* acx_sem_unlock(adev); */
++
++ printk("acx "ACX_RELEASE": net device %s, driver compiled "
++ "against wireless extensions %d and Linux %s\n",
++ ndev->name, WIRELESS_EXT, UTS_RELEASE);
++
++#if CMD_DISCOVERY
++ great_inquisitor(adev);
++#endif
++
++ result = OK;
++ goto done;
++
++ /* error paths: undo everything in reverse order... */
++
++fail_register_netdev:
++
++ acxmem_s_delete_dma_regions(adev);
++
++fail_reset:
++fail_hw_params:
++ free_netdev(ndev);
++fail_unknown_chiptype:
++
++
++done:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acxmem_e_remove
++**
++** Shut device down (if not hot unplugged)
++** and deallocate PCI resources for the acx chip.
++**
++** pdev - ptr to PCI device structure containing info about pci configuration
++*/
++static int __devexit
++acxmem_e_remove(struct pcmcia_device *link)
++{
++ struct net_device *ndev;
++ acx_device_t *adev;
++ unsigned long flags;
++
++ FN_ENTER;
++
++ ndev = ((local_info_t*)link->priv)->ndev;
++ if (!ndev) {
++ log(L_DEBUG, "%s: card is unused. Skipping any release code\n",
++ __func__);
++ goto end;
++ }
++
++ adev = ndev2adev(ndev);
++
++ /* If device wasn't hot unplugged... */
++ if (adev_present(adev)) {
++
++ acx_sem_lock(adev);
++
++ /* disable both Tx and Rx to shut radio down properly */
++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
++
++#ifdef REDUNDANT
++ /* put the eCPU to sleep to save power
++ * Halting is not possible currently,
++ * since not supported by all firmware versions */
++ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0);
++#endif
++ acx_lock(adev, flags);
++
++ /* disable power LED to save power :-) */
++ log(L_INIT, "switching off power LED to save power\n");
++ acxmem_l_power_led(adev, 0);
++
++ /* stop our eCPU */
++ if (IS_ACX111(adev)) {
++ /* FIXME: does this actually keep halting the eCPU?
++ * I don't think so...
++ */
++ acxmem_l_reset_mac(adev);
++ } else {
++ u16 temp;
++
++ /* halt eCPU */
++ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
++ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
++ write_flush(adev);
++ }
++
++ acx_unlock(adev, flags);
++
++ acx_sem_unlock(adev);
++ }
++
++
++ /*
++ * Unregister the notifier chain
++ */
++ unregister_netdevice_notifier(&acx_netdev_notifier);
++
++ /* unregister the device to not let the kernel
++ * (e.g. ioctls) access a half-deconfigured device
++ * NB: this will cause acxmem_e_close() to be called,
++ * thus we shouldn't call it under sem! */
++ log(L_INIT, "removing device %s\n", ndev->name);
++ unregister_netdev(ndev);
++
++ /* unregister_netdev ensures that no references to us left.
++ * For paranoid reasons we continue to follow the rules */
++ acx_sem_lock(adev);
++
++ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) {
++ acxmem_s_down(ndev);
++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
++ }
++
++ acx_proc_unregister_entries(ndev);
++
++ acxmem_s_delete_dma_regions(adev);
++
++ /* finally, clean up PCI bus state */
++ if (adev->iobase) iounmap((void *)adev->iobase);
++
++ acx_sem_unlock(adev);
++
++ /* Free netdev (quite late,
++ * since otherwise we might get caught off-guard
++ * by a netdev timeout handler execution
++ * expecting to see a working dev...) */
++ free_netdev(ndev);
++
++ printk ("e_remove done\n");
++end:
++ FN_EXIT0;
++
++ return 0;
++}
++
++
++/***********************************************************************
++** TODO: PM code needs to be fixed / debugged / tested.
++*/
++#ifdef CONFIG_PM
++static int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
++acxmem_e_suspend( struct net_device *ndev, pm_message_t state)
++#else
++acxmem_e_suspend( struct net_device *ndev, u32 state)
++#endif
++{
++ FN_ENTER;
++ acx_device_t *adev;
++ printk("acx: suspend handler is experimental!\n");
++ printk("sus: dev %p\n", ndev);
++
++ if (!netif_running(ndev))
++ goto end;
++ // @@ need to get it from link or something like that
++ adev = ndev2adev(ndev);
++ printk("sus: adev %p\n", adev);
++
++ acx_sem_lock(adev);
++
++ netif_device_detach(adev->ndev); /* this one cannot sleep */
++ acxmem_s_down(adev->ndev);
++ /* down() does not set it to 0xffff, but here we really want that */
++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
++ write_reg16(adev, IO_ACX_FEMR, 0x0);
++ acxmem_s_delete_dma_regions(adev);
++
++ /*
++ * Turn the ACX chip off.
++ */
++
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT0;
++ return OK;
++}
++
++
++static void
++fw_resumer(struct work_struct *notused)
++{
++ acx_device_t *adev;
++ struct net_device *ndev = resume_ndev;
++
++ printk("acx: resume handler is experimental!\n");
++ printk("rsm: got dev %p\n", ndev);
++
++ if (!netif_running(ndev))
++ return;
++
++ adev = ndev2adev(ndev);
++ printk("rsm: got adev %p\n", adev);
++
++ acx_sem_lock(adev);
++
++ /*
++ * Turn on the ACX.
++ */
++
++ acxmem_complete_hw_reset (adev);
++
++ /*
++ * done by acx_s_set_defaults for initial startup
++ */
++ acxmem_set_interrupt_mask(adev);
++
++ printk ("rsm: bringing up interface\n");
++ SET_BIT (adev->set_mask, GETSET_ALL);
++ acxmem_s_up(ndev);
++ printk("rsm: acx up done\n");
++
++ /* now even reload all card parameters as they were before suspend,
++ * and possibly be back in the network again already :-)
++ */
++ /* - most settings updated in acxmem_s_up()
++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) {
++ adev->set_mask = GETSET_ALL;
++ acx_s_update_card_settings(adev);
++ printk("rsm: settings updated\n");
++ }
++ */
++ netif_device_attach(ndev);
++ printk("rsm: device attached\n");
++
++ acx_sem_unlock(adev);
++}
++
++DECLARE_WORK( fw_resume_work, fw_resumer );
++
++static int
++acxmem_e_resume(struct pcmcia_device *link)
++{
++ FN_ENTER;
++
++ //resume_pdev = pdev;
++ schedule_work( &fw_resume_work );
++
++ FN_EXIT0;
++ return OK;
++}
++#endif /* CONFIG_PM */
++
++
++/***********************************************************************
++** acxmem_s_up
++**
++** This function is called by acxmem_e_open (when ifconfig sets the device as up)
++**
++** Side effects:
++** - Enables on-card interrupt requests
++** - calls acx_s_start
++*/
++
++static void
++enable_acx_irq(acx_device_t *adev)
++{
++ FN_ENTER;
++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask);
++ write_reg16(adev, IO_ACX_FEMR, 0x8000);
++ adev->irqs_active = 1;
++ FN_EXIT0;
++}
++
++static void
++acxmem_s_up(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++ enable_acx_irq(adev);
++ acx_unlock(adev, flags);
++
++ /* acx fw < 1.9.3.e has a hardware timer, and older drivers
++ ** used to use it. But we don't do that anymore, our OS
++ ** has reliable software timers */
++ init_timer(&adev->mgmt_timer);
++ adev->mgmt_timer.function = acx_i_timer;
++ adev->mgmt_timer.data = (unsigned long)adev;
++
++ /* Need to set ACX_STATE_IFACE_UP first, or else
++ ** timer won't be started by acx_set_status() */
++ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_2_STA:
++ /* actual scan cmd will happen in start() */
++ acx_set_status(adev, ACX_STATUS_1_SCANNING); break;
++ case ACX_MODE_3_AP:
++ case ACX_MODE_MONITOR:
++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break;
++ }
++
++ acx_s_start(adev);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_s_down
++**
++** This disables the netdevice
++**
++** Side effects:
++** - disables on-card interrupt request
++*/
++
++static void
++disable_acx_irq(acx_device_t *adev)
++{
++ FN_ENTER;
++
++ /* I guess mask is not 0xffff because acx100 won't signal
++ ** cmd completion then (needed for ifup).
++ ** Someone with acx100 please confirm */
++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off);
++ write_reg16(adev, IO_ACX_FEMR, 0x0);
++ adev->irqs_active = 0;
++ FN_EXIT0;
++}
++
++static void
++acxmem_s_down(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++
++ FN_ENTER;
++
++ /* Disable IRQs first, so that IRQs cannot race with us */
++ /* then wait until interrupts have finished executing on other CPUs */
++ acx_lock(adev, flags);
++ disable_acx_irq(adev);
++ synchronize_irq(adev->pdev->irq);
++ acx_unlock(adev, flags);
++
++ /* we really don't want to have an asynchronous tasklet disturb us
++ ** after something vital for its job has been shut down, so
++ ** end all remaining work now.
++ **
++ ** NB: carrier_off (done by set_status below) would lead to
++ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK().
++ ** That's why we do FLUSH first.
++ **
++ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK()
++ ** waits for acx_e_after_interrupt_task to complete if it is running
++ ** on another CPU, but acx_e_after_interrupt_task
++ ** will sleep on sem forever, because it is taken by us!
++ ** Work around that by temporary sem unlock.
++ ** This will fail miserably if we'll be hit by concurrent
++ ** iwconfig or something in between. TODO! */
++ acx_sem_unlock(adev);
++ FLUSH_SCHEDULED_WORK();
++ acx_sem_lock(adev);
++
++ /* This is possible:
++ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task ->
++ ** -> set_status(ASSOCIATED) -> wake_queue()
++ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK
++ ** lock/unlock is just paranoia, maybe not needed */
++ acx_lock(adev, flags);
++ acx_stop_queue(ndev, "on ifdown");
++ acx_set_status(adev, ACX_STATUS_0_STOPPED);
++ acx_unlock(adev, flags);
++
++ /* kernel/timer.c says it's illegal to del_timer_sync()
++ ** a timer which restarts itself. We guarantee this cannot
++ ** ever happen because acx_i_timer() never does this if
++ ** status is ACX_STATUS_0_STOPPED */
++ del_timer_sync(&adev->mgmt_timer);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_e_open
++**
++** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP
++** from clear to set. In other words: ifconfig up.
++**
++** Returns:
++** 0 success
++** >0 f/w reported error
++** <0 driver reported error
++*/
++static int
++acxmem_e_open(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result = OK;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ acx_init_task_scheduler(adev);
++
++/* TODO: pci_set_power_state(pdev, PCI_D0); ? */
++
++#if 0
++ /* request shared IRQ handler */
++ if (request_irq(ndev->irq, acxmem_i_interrupt, SA_INTERRUPT, ndev->name, ndev)) {
++ printk("%s: request_irq FAILED\n", ndev->name);
++ result = -EAGAIN;
++ goto done;
++ }
++ set_irq_type (ndev->irq, IRQT_FALLING);
++ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq);
++#endif
++
++ /* ifup device */
++ acxmem_s_up(ndev);
++
++ /* We don't currently have to do anything else.
++ * The setup of the MAC should be subsequently completed via
++ * the mlme commands.
++ * Higher layers know we're ready from dev->start==1 and
++ * dev->tbusy==0. Our rx path knows to pass up received/
++ * frames because of dev->flags&IFF_UP is true.
++ */
++done:
++ acx_sem_unlock(adev);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acxmem_e_close
++**
++** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP
++** from set to clear. I.e. called by "ifconfig DEV down"
++**
++** Returns:
++** 0 success
++** >0 f/w reported error
++** <0 driver reported error
++*/
++static int
++acxmem_e_close(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ /* ifdown device */
++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
++ if (netif_device_present(ndev)) {
++ acxmem_s_down(ndev);
++ }
++
++ /* disable all IRQs, release shared IRQ handler */
++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
++ write_reg16(adev, IO_ACX_FEMR, 0x0);
++ free_irq(ndev->irq, ndev);
++
++/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */
++
++ /* We currently don't have to do anything else.
++ * Higher layers know we're not ready from dev->start==0 and
++ * dev->tbusy==1. Our rx path knows to not pass up received
++ * frames because of dev->flags&IFF_UP is false.
++ */
++ acx_sem_unlock(adev);
++
++ log(L_INIT, "closed device\n");
++ FN_EXIT0;
++ return OK;
++}
++
++
++/***********************************************************************
++** acxmem_i_tx_timeout
++**
++** Called from network core. Must not sleep!
++*/
++static void
++acxmem_i_tx_timeout(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ unsigned int tx_num_cleaned;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++
++ /* clean processed tx descs, they may have been completely full */
++ tx_num_cleaned = acxmem_l_clean_txdesc(adev);
++
++ /* nothing cleaned, yet (almost) no free buffers available?
++ * --> clean all tx descs, no matter which status!!
++ * Note that I strongly suspect that doing emergency cleaning
++ * may confuse the firmware. This is a last ditch effort to get
++ * ANYTHING to work again...
++ *
++ * TODO: it's best to simply reset & reinit hw from scratch...
++ */
++ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) {
++ printk("%s: FAILED to free any of the many full tx buffers. "
++ "Switching to emergency freeing. "
++ "Please report!\n", ndev->name);
++ acxmem_l_clean_txdesc_emergency(adev);
++ }
++
++ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status))
++ acx_wake_queue(ndev, "after tx timeout");
++
++ /* stall may have happened due to radio drift, so recalib radio */
++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
++
++ /* do unimportant work last */
++ printk("%s: tx timeout!\n", ndev->name);
++ adev->stats.tx_errors++;
++
++ acx_unlock(adev, flags);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_i_set_multicast_list
++** FIXME: most likely needs refinement
++*/
++static void
++acxmem_i_set_multicast_list(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++
++ /* firmwares don't have allmulti capability,
++ * so just use promiscuous mode instead in this case. */
++ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
++ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
++ SET_BIT(adev->set_mask, SET_RXCONFIG);
++ /* let kernel know in case *we* needed to set promiscuous */
++ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI);
++ } else {
++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
++ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
++ SET_BIT(adev->set_mask, SET_RXCONFIG);
++ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI);
++ }
++
++ /* cannot update card settings directly here, atomic context */
++ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
++
++ acx_unlock(adev, flags);
++
++ FN_EXIT0;
++}
++
++
++/***************************************************************
++** acxmem_l_process_rxdesc
++**
++** Called directly and only from the IRQ handler
++*/
++
++#if !ACX_DEBUG
++static inline void log_rxbuffer(const acx_device_t *adev) {}
++#else
++static void
++log_rxbuffer(const acx_device_t *adev)
++{
++ register const struct rxhostdesc *rxhostdesc;
++ int i;
++ /* no FN_ENTER here, we don't want that */
++
++ rxhostdesc = adev->rxhostdesc_start;
++ if (unlikely(!rxhostdesc)) return;
++ for (i = 0; i < RX_CNT; i++) {
++ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
++ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
++ printk("rx: buf %d full\n", i);
++ rxhostdesc++;
++ }
++}
++#endif
++
++static void
++acxmem_l_process_rxdesc(acx_device_t *adev)
++{
++ register rxhostdesc_t *hostdesc;
++ register rxdesc_t *rxdesc;
++ unsigned count, tail;
++ u32 addr;
++ u8 Ctl_8;
++
++ FN_ENTER;
++
++ if (unlikely(acx_debug & L_BUFR))
++ log_rxbuffer(adev);
++
++ /* First, have a loop to determine the first descriptor that's
++ * full, just in case there's a mismatch between our current
++ * rx_tail and the full descriptor we're supposed to handle. */
++ tail = adev->rx_tail;
++ count = RX_CNT;
++ while (1) {
++ hostdesc = &adev->rxhostdesc_start[tail];
++ rxdesc = &adev->rxdesc_start[tail];
++ /* advance tail regardless of outcome of the below test */
++ tail = (tail + 1) % RX_CNT;
++
++ /*
++ * Unlike the PCI interface, where the ACX can write directly to
++ * the host descriptors, on the slave memory interface we have to
++ * pull these. All we really need to do is check the Ctl_8 field
++ * in the rx descriptor on the ACX, which should be 0x11000000 if
++ * we should process it.
++ */
++ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
++ if ((Ctl_8 & DESC_CTL_HOSTOWN) &&
++ (Ctl_8 & DESC_CTL_ACXDONE))
++ break; /* found it! */
++
++ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */
++ goto end;
++ }
++
++ /* now process descriptors, starting with the first we figured out */
++ while (1) {
++ log(L_BUFR, "rx: tail=%u Ctl_8=%02X\n", tail, Ctl_8);
++ /*
++ * If the ACX has CTL_RECLAIM set on this descriptor there
++ * is no buffer associated; it just wants us to tell it to
++ * reclaim the memory.
++ */
++ if (!(Ctl_8 & DESC_CTL_RECLAIM)) {
++
++ /*
++ * slave interface - pull data now
++ */
++ hostdesc->length = read_slavemem16 (adev, (u32) &(rxdesc->total_length));
++
++ /*
++ * hostdesc->data is an rxbuffer_t, which includes header information,
++ * but the length in the data packet doesn't. The header information
++ * takes up an additional 12 bytes, so add that to the length we copy.
++ */
++ addr = read_slavemem32 (adev, (u32) &(rxdesc->ACXMemPtr));
++ if (addr) {
++ /*
++ * How can &(rxdesc->ACXMemPtr) above ever be zero? Looks like we
++ * get that now and then - try to trap it for debug.
++ */
++ if (addr & 0xffff0000) {
++ printk("rxdesc 0x%08x\n", (u32) rxdesc);
++ dump_acxmem (adev, 0, 0x10000);
++ panic ("Bad access!");
++ }
++ chaincopy_from_slavemem (adev, (u8 *) hostdesc->data, addr,
++ hostdesc->length +
++ (u32) &((rxbuffer_t *)0)->hdr_a3);
++ acx_l_process_rxbuf(adev, hostdesc->data);
++ }
++ }
++ else {
++ printk ("rx reclaim only!\n");
++ }
++
++ hostdesc->Status = 0;
++
++ /*
++ * Let the ACX know we're done.
++ */
++ CLEAR_BIT (Ctl_8, DESC_CTL_HOSTOWN);
++ SET_BIT (Ctl_8, DESC_CTL_HOSTDONE);
++ SET_BIT (Ctl_8, DESC_CTL_RECLAIM);
++ write_slavemem8 (adev, (u32) &rxdesc->Ctl_8, Ctl_8);
++
++ /*
++ * Now tell the ACX we've finished with the receive buffer so
++ * it can finish the reclaim.
++ */
++ write_reg16 (adev, IO_ACX_INT_TRIG, INT_TRIG_RXPRC);
++
++ /* ok, descriptor is handled, now check the next descriptor */
++ hostdesc = &adev->rxhostdesc_start[tail];
++ rxdesc = &adev->rxdesc_start[tail];
++
++ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
++
++ /* if next descriptor is empty, then bail out */
++ if (!(Ctl_8 & DESC_CTL_HOSTOWN) || !(Ctl_8 & DESC_CTL_ACXDONE))
++ break;
++
++ tail = (tail + 1) % RX_CNT;
++ }
++end:
++ adev->rx_tail = tail;
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_i_interrupt
++**
++** IRQ handler (atomic context, must not sleep, blah, blah)
++*/
++
++/* scan is complete. all frames now on the receive queue are valid */
++#define INFO_SCAN_COMPLETE 0x0001
++#define INFO_WEP_KEY_NOT_FOUND 0x0002
++/* hw has been reset as the result of a watchdog timer timeout */
++#define INFO_WATCH_DOG_RESET 0x0003
++/* failed to send out NULL frame from PS mode notification to AP */
++/* recommended action: try entering 802.11 PS mode again */
++#define INFO_PS_FAIL 0x0004
++/* encryption/decryption process on a packet failed */
++#define INFO_IV_ICV_FAILURE 0x0005
++
++/* Info mailbox format:
++2 bytes: type
++2 bytes: status
++more bytes may follow
++ rumors say about status:
++ 0x0000 info available (set by hw)
++ 0x0001 information received (must be set by host)
++ 0x1000 info available, mailbox overflowed (messages lost) (set by hw)
++ but in practice we've seen:
++ 0x9000 when we did not set status to 0x0001 on prev message
++ 0x1001 when we did set it
++ 0x0000 was never seen
++ conclusion: this is really a bitfield:
++ 0x1000 is 'info available' bit
++ 'mailbox overflowed' bit is 0x8000, not 0x1000
++ value of 0x0000 probably means that there are no messages at all
++ P.S. I dunno how in hell hw is supposed to notice that messages are lost -
++ it does NOT clear bit 0x0001, and this bit will probably stay forever set
++ after we set it once. Let's hope this will be fixed in firmware someday
++*/
++
++static void
++handle_info_irq(acx_device_t *adev)
++{
++#if ACX_DEBUG
++ static const char * const info_type_msg[] = {
++ "(unknown)",
++ "scan complete",
++ "WEP key not found",
++ "internal watchdog reset was done",
++ "failed to send powersave (NULL frame) notification to AP",
++ "encrypt/decrypt on a packet has failed",
++ "TKIP tx keys disabled",
++ "TKIP rx keys disabled",
++ "TKIP rx: key ID not found",
++ "???",
++ "???",
++ "???",
++ "???",
++ "???",
++ "???",
++ "???",
++ "TKIP IV value exceeds thresh"
++ };
++#endif
++ u32 info_type, info_status;
++
++ info_type = read_slavemem32 (adev, (u32) adev->info_area);
++
++ info_status = (info_type >> 16);
++ info_type = (u16)info_type;
++
++ /* inform fw that we have read this info message */
++ write_slavemem32(adev, (u32) adev->info_area, info_type | 0x00010000);
++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK);
++ write_flush(adev);
++
++ log(L_CTL, "info_type:%04X info_status:%04X\n",
++ info_type, info_status);
++
++ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n",
++ info_status, info_type,
++ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ?
++ 0 : info_type]
++ );
++}
++
++
++static void
++log_unusual_irq(u16 irqtype) {
++ /*
++ if (!printk_ratelimit())
++ return;
++ */
++
++ printk("acx: got");
++ if (irqtype & HOST_INT_TX_XFER) {
++ printk(" Tx_Xfer");
++ }
++ if (irqtype & HOST_INT_RX_COMPLETE) {
++ printk(" Rx_Complete");
++ }
++ if (irqtype & HOST_INT_DTIM) {
++ printk(" DTIM");
++ }
++ if (irqtype & HOST_INT_BEACON) {
++ printk(" Beacon");
++ }
++ if (irqtype & HOST_INT_TIMER) {
++ log(L_IRQ, " Timer");
++ }
++ if (irqtype & HOST_INT_KEY_NOT_FOUND) {
++ printk(" Key_Not_Found");
++ }
++ if (irqtype & HOST_INT_IV_ICV_FAILURE) {
++ printk(" IV_ICV_Failure (crypto)");
++ }
++ /* HOST_INT_CMD_COMPLETE */
++ /* HOST_INT_INFO */
++ if (irqtype & HOST_INT_OVERFLOW) {
++ printk(" Overflow");
++ }
++ if (irqtype & HOST_INT_PROCESS_ERROR) {
++ printk(" Process_Error");
++ }
++ /* HOST_INT_SCAN_COMPLETE */
++ if (irqtype & HOST_INT_FCS_THRESHOLD) {
++ printk(" FCS_Threshold");
++ }
++ if (irqtype & HOST_INT_UNKNOWN) {
++ printk(" Unknown");
++ }
++ printk(" IRQ(s)\n");
++}
++
++
++static void
++update_link_quality_led(acx_device_t *adev)
++{
++ int qual;
++
++ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise);
++ if (qual > adev->brange_max_quality)
++ qual = adev->brange_max_quality;
++
++ if (time_after(jiffies, adev->brange_time_last_state_change +
++ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) {
++ acxmem_l_power_led(adev, (adev->brange_last_state == 0));
++ adev->brange_last_state ^= 1; /* toggle */
++ adev->brange_time_last_state_change = jiffies;
++ }
++}
++
++
++#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */
++
++static irqreturn_t
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++acxmem_i_interrupt(int irq, void *dev_id)
++#else
++acxmwm_i_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++#endif
++{
++ acx_device_t *adev;
++ unsigned long flags;
++ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY;
++ register u16 irqtype;
++ u16 unmasked;
++
++ adev = ndev2adev((struct net_device*)dev_id);
++
++ /* LOCKING: can just spin_lock() since IRQs are disabled anyway.
++ * I am paranoid */
++ acx_lock(adev, flags);
++
++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
++ if (unlikely(0xffff == unmasked)) {
++ /* 0xffff value hints at missing hardware,
++ * so don't do anything.
++ * Not very clean, but other drivers do the same... */
++ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n");
++ goto none;
++ }
++
++ /* We will check only "interesting" IRQ types */
++ irqtype = unmasked & ~adev->irq_mask;
++ if (!irqtype) {
++ /* We are on a shared IRQ line and it wasn't our IRQ */
++ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n",
++ unmasked, adev->irq_mask);
++ goto none;
++ }
++
++ /* Done here because IRQ_NONEs taking three lines of log
++ ** drive me crazy */
++ FN_ENTER;
++
++#define IRQ_ITERATE 1
++#if IRQ_ITERATE
++if (jiffies != adev->irq_last_jiffies) {
++ adev->irq_loops_this_jiffy = 0;
++ adev->irq_last_jiffies = jiffies;
++}
++
++/* safety condition; we'll normally abort loop below
++ * in case no IRQ type occurred */
++while (likely(--irqcount)) {
++#endif
++ /* ACK all IRQs ASAP */
++ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff);
++
++ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n",
++ unmasked, adev->irq_mask, irqtype);
++
++ /* Handle most important IRQ types first */
++ if (irqtype & HOST_INT_RX_DATA) {
++ log(L_IRQ, "got Rx_Data IRQ\n");
++ acxmem_l_process_rxdesc(adev);
++ }
++ if (irqtype & HOST_INT_TX_COMPLETE) {
++ log(L_IRQ, "got Tx_Complete IRQ\n");
++ /* don't clean up on each Tx complete, wait a bit
++ * unless we're going towards full, in which case
++ * we do it immediately, too (otherwise we might lockup
++ * with a full Tx buffer if we go into
++ * acxmem_l_clean_txdesc() at a time when we won't wakeup
++ * the net queue in there for some reason...) */
++ if (adev->tx_free <= TX_START_CLEAN) {
++#if TX_CLEANUP_IN_SOFTIRQ
++ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP);
++#else
++ acxmem_l_clean_txdesc(adev);
++#endif
++ }
++ }
++
++ /* Less frequent ones */
++ if (irqtype & (0
++ | HOST_INT_CMD_COMPLETE
++ | HOST_INT_INFO
++ | HOST_INT_SCAN_COMPLETE
++ )) {
++ if (irqtype & HOST_INT_CMD_COMPLETE) {
++ log(L_IRQ, "got Command_Complete IRQ\n");
++ /* save the state for the running issue_cmd() */
++ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE);
++ }
++ if (irqtype & HOST_INT_INFO) {
++ handle_info_irq(adev);
++ }
++ if (irqtype & HOST_INT_SCAN_COMPLETE) {
++ log(L_IRQ, "got Scan_Complete IRQ\n");
++ /* need to do that in process context */
++ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN);
++ /* remember that fw is not scanning anymore */
++ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
++ }
++ }
++
++ /* These we just log, but either they happen rarely
++ * or we keep them masked out */
++ if (irqtype & (0
++ /* | HOST_INT_RX_DATA */
++ /* | HOST_INT_TX_COMPLETE */
++ | HOST_INT_TX_XFER
++ | HOST_INT_RX_COMPLETE
++ | HOST_INT_DTIM
++ | HOST_INT_BEACON
++ | HOST_INT_TIMER
++ | HOST_INT_KEY_NOT_FOUND
++ | HOST_INT_IV_ICV_FAILURE
++ /* | HOST_INT_CMD_COMPLETE */
++ /* | HOST_INT_INFO */
++ | HOST_INT_OVERFLOW
++ | HOST_INT_PROCESS_ERROR
++ /* | HOST_INT_SCAN_COMPLETE */
++ | HOST_INT_FCS_THRESHOLD
++ | HOST_INT_UNKNOWN
++ )) {
++ log_unusual_irq(irqtype);
++ }
++
++#if IRQ_ITERATE
++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
++ irqtype = unmasked & ~adev->irq_mask;
++ /* Bail out if no new IRQ bits or if all are masked out */
++ if (!irqtype)
++ break;
++
++ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) {
++ printk(KERN_ERR "acx: too many interrupts per jiffy!\n");
++ /* Looks like card floods us with IRQs! Try to stop that */
++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
++ /* This will short-circuit all future attempts to handle IRQ.
++ * We cant do much more... */
++ adev->irq_mask = 0;
++ break;
++ }
++}
++#endif
++ /* Routine to perform blink with range */
++ if (unlikely(adev->led_power == 2))
++ update_link_quality_led(adev);
++
++/* handled: */
++ /* write_flush(adev); - not needed, last op was read anyway */
++ acx_unlock(adev, flags);
++ FN_EXIT0;
++ return IRQ_HANDLED;
++
++none:
++ acx_unlock(adev, flags);
++ return IRQ_NONE;
++}
++
++
++/***********************************************************************
++** acxmem_l_power_led
++*/
++void
++acxmem_l_power_led(acx_device_t *adev, int enable)
++{
++ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800;
++
++ /* A hack. Not moving message rate limiting to adev->xxx
++ * (it's only a debug message after all) */
++ static int rate_limit = 0;
++
++ if (rate_limit++ < 3)
++ log(L_IOCTL, "Please report in case toggling the power "
++ "LED doesn't work for your card!\n");
++ if (enable)
++ write_reg16(adev, IO_ACX_GPIO_OUT,
++ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled);
++ else
++ write_reg16(adev, IO_ACX_GPIO_OUT,
++ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled);
++}
++
++
++/***********************************************************************
++** Ioctls
++*/
++
++/***********************************************************************
++*/
++int
++acx111pci_ioctl_info(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ struct iw_param *vwrq,
++ char *extra)
++{
++#if ACX_DEBUG > 1
++ acx_device_t *adev = ndev2adev(ndev);
++ rxdesc_t *rxdesc;
++ txdesc_t *txdesc;
++ rxhostdesc_t *rxhostdesc;
++ txhostdesc_t *txhostdesc;
++ struct acx111_ie_memoryconfig memconf;
++ struct acx111_ie_queueconfig queueconf;
++ unsigned long flags;
++ int i;
++ char memmap[0x34];
++ char rxconfig[0x8];
++ char fcserror[0x8];
++ char ratefallback[0x5];
++
++ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) )
++ return OK;
++ /* using printk() since we checked debug flag already */
++
++ acx_sem_lock(adev);
++
++ if (!IS_ACX111(adev)) {
++ printk("acx111-specific function called "
++ "with non-acx111 chip, aborting\n");
++ goto end_ok;
++ }
++
++ /* get Acx111 Memory Configuration */
++ memset(&memconf, 0, sizeof(memconf));
++ /* BTW, fails with 12 (Write only) error code.
++ ** Retained for easy testing of issue_cmd error handling :) */
++ printk ("Interrogating queue config\n");
++ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG);
++ printk ("done with queue config\n");
++
++ /* get Acx111 Queue Configuration */
++ memset(&queueconf, 0, sizeof(queueconf));
++ printk ("Interrogating mem config options\n");
++ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
++ printk ("done with mem config options\n");
++
++ /* get Acx111 Memory Map */
++ memset(memmap, 0, sizeof(memmap));
++ printk ("Interrogating mem map\n");
++ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP);
++ printk ("done with mem map\n");
++
++ /* get Acx111 Rx Config */
++ memset(rxconfig, 0, sizeof(rxconfig));
++ printk ("Interrogating rxconfig\n");
++ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG);
++ printk ("done with queue rxconfig\n");
++
++ /* get Acx111 fcs error count */
++ memset(fcserror, 0, sizeof(fcserror));
++ printk ("Interrogating fcs err count\n");
++ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT);
++ printk ("done with err count\n");
++
++ /* get Acx111 rate fallback */
++ memset(ratefallback, 0, sizeof(ratefallback));
++ printk ("Interrogating rate fallback\n");
++ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK);
++ printk ("done with rate fallback\n");
++
++ /* force occurrence of a beacon interrupt */
++ /* TODO: comment why is this necessary */
++ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON);
++
++ /* dump Acx111 Mem Configuration */
++ printk("dump mem config:\n"
++ "data read: %d, struct size: %d\n"
++ "Number of stations: %1X\n"
++ "Memory block size: %1X\n"
++ "tx/rx memory block allocation: %1X\n"
++ "count rx: %X / tx: %X queues\n"
++ "options %1X\n"
++ "fragmentation %1X\n"
++ "Rx Queue 1 Count Descriptors: %X\n"
++ "Rx Queue 1 Host Memory Start: %X\n"
++ "Tx Queue 1 Count Descriptors: %X\n"
++ "Tx Queue 1 Attributes: %X\n",
++ memconf.len, (int) sizeof(memconf),
++ memconf.no_of_stations,
++ memconf.memory_block_size,
++ memconf.tx_rx_memory_block_allocation,
++ memconf.count_rx_queues, memconf.count_tx_queues,
++ memconf.options,
++ memconf.fragmentation,
++ memconf.rx_queue1_count_descs,
++ acx2cpu(memconf.rx_queue1_host_rx_start),
++ memconf.tx_queue1_count_descs,
++ memconf.tx_queue1_attributes);
++
++ /* dump Acx111 Queue Configuration */
++ printk("dump queue head:\n"
++ "data read: %d, struct size: %d\n"
++ "tx_memory_block_address (from card): %X\n"
++ "rx_memory_block_address (from card): %X\n"
++ "rx1_queue address (from card): %X\n"
++ "tx1_queue address (from card): %X\n"
++ "tx1_queue attributes (from card): %X\n",
++ queueconf.len, (int) sizeof(queueconf),
++ queueconf.tx_memory_block_address,
++ queueconf.rx_memory_block_address,
++ queueconf.rx1_queue_address,
++ queueconf.tx1_queue_address,
++ queueconf.tx1_attributes);
++
++ /* dump Acx111 Mem Map */
++ printk("dump mem map:\n"
++ "data read: %d, struct size: %d\n"
++ "Code start: %X\n"
++ "Code end: %X\n"
++ "WEP default key start: %X\n"
++ "WEP default key end: %X\n"
++ "STA table start: %X\n"
++ "STA table end: %X\n"
++ "Packet template start: %X\n"
++ "Packet template end: %X\n"
++ "Queue memory start: %X\n"
++ "Queue memory end: %X\n"
++ "Packet memory pool start: %X\n"
++ "Packet memory pool end: %X\n"
++ "iobase: %p\n"
++ "iobase2: %p\n",
++ *((u16 *)&memmap[0x02]), (int) sizeof(memmap),
++ *((u32 *)&memmap[0x04]),
++ *((u32 *)&memmap[0x08]),
++ *((u32 *)&memmap[0x0C]),
++ *((u32 *)&memmap[0x10]),
++ *((u32 *)&memmap[0x14]),
++ *((u32 *)&memmap[0x18]),
++ *((u32 *)&memmap[0x1C]),
++ *((u32 *)&memmap[0x20]),
++ *((u32 *)&memmap[0x24]),
++ *((u32 *)&memmap[0x28]),
++ *((u32 *)&memmap[0x2C]),
++ *((u32 *)&memmap[0x30]),
++ adev->iobase,
++ adev->iobase2);
++
++ /* dump Acx111 Rx Config */
++ printk("dump rx config:\n"
++ "data read: %d, struct size: %d\n"
++ "rx config: %X\n"
++ "rx filter config: %X\n",
++ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig),
++ *((u16 *)&rxconfig[0x04]),
++ *((u16 *)&rxconfig[0x06]));
++
++ /* dump Acx111 fcs error */
++ printk("dump fcserror:\n"
++ "data read: %d, struct size: %d\n"
++ "fcserrors: %X\n",
++ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror),
++ *((u32 *)&fcserror[0x04]));
++
++ /* dump Acx111 rate fallback */
++ printk("dump rate fallback:\n"
++ "data read: %d, struct size: %d\n"
++ "ratefallback: %X\n",
++ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback),
++ *((u8 *)&ratefallback[0x04]));
++
++ /* protect against IRQ */
++ acx_lock(adev, flags);
++
++ /* dump acx111 internal rx descriptor ring buffer */
++ rxdesc = adev->rxdesc_start;
++
++ /* loop over complete receive pool */
++ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
++ printk("\ndump internal rxdesc %d:\n"
++ "mem pos %p\n"
++ "next 0x%X\n"
++ "acx mem pointer (dynamic) 0x%X\n"
++ "CTL (dynamic) 0x%X\n"
++ "Rate (dynamic) 0x%X\n"
++ "RxStatus (dynamic) 0x%X\n"
++ "Mod/Pre (dynamic) 0x%X\n",
++ i,
++ rxdesc,
++ acx2cpu(rxdesc->pNextDesc),
++ acx2cpu(rxdesc->ACXMemPtr),
++ rxdesc->Ctl_8,
++ rxdesc->rate,
++ rxdesc->error,
++ rxdesc->SNR);
++ rxdesc++;
++ }
++
++ /* dump host rx descriptor ring buffer */
++
++ rxhostdesc = adev->rxhostdesc_start;
++
++ /* loop over complete receive pool */
++ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
++ printk("\ndump host rxdesc %d:\n"
++ "mem pos %p\n"
++ "buffer mem pos 0x%X\n"
++ "buffer mem offset 0x%X\n"
++ "CTL 0x%X\n"
++ "Length 0x%X\n"
++ "next 0x%X\n"
++ "Status 0x%X\n",
++ i,
++ rxhostdesc,
++ acx2cpu(rxhostdesc->data_phy),
++ rxhostdesc->data_offset,
++ le16_to_cpu(rxhostdesc->Ctl_16),
++ le16_to_cpu(rxhostdesc->length),
++ acx2cpu(rxhostdesc->desc_phy_next),
++ rxhostdesc->Status);
++ rxhostdesc++;
++ }
++
++ /* dump acx111 internal tx descriptor ring buffer */
++ txdesc = adev->txdesc_start;
++
++ /* loop over complete transmit pool */
++ if (txdesc) for (i = 0; i < TX_CNT; i++) {
++ printk("\ndump internal txdesc %d:\n"
++ "size 0x%X\n"
++ "mem pos %p\n"
++ "next 0x%X\n"
++ "acx mem pointer (dynamic) 0x%X\n"
++ "host mem pointer (dynamic) 0x%X\n"
++ "length (dynamic) 0x%X\n"
++ "CTL (dynamic) 0x%X\n"
++ "CTL2 (dynamic) 0x%X\n"
++ "Status (dynamic) 0x%X\n"
++ "Rate (dynamic) 0x%X\n",
++ i,
++ (int) sizeof(struct txdesc),
++ txdesc,
++ acx2cpu(txdesc->pNextDesc),
++ acx2cpu(txdesc->AcxMemPtr),
++ acx2cpu(txdesc->HostMemPtr),
++ le16_to_cpu(txdesc->total_length),
++ txdesc->Ctl_8,
++ txdesc->Ctl2_8, txdesc->error,
++ txdesc->u.r1.rate);
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++
++ /* dump host tx descriptor ring buffer */
++
++ txhostdesc = adev->txhostdesc_start;
++
++ /* loop over complete host send pool */
++ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) {
++ printk("\ndump host txdesc %d:\n"
++ "mem pos %p\n"
++ "buffer mem pos 0x%X\n"
++ "buffer mem offset 0x%X\n"
++ "CTL 0x%X\n"
++ "Length 0x%X\n"
++ "next 0x%X\n"
++ "Status 0x%X\n",
++ i,
++ txhostdesc,
++ acx2cpu(txhostdesc->data_phy),
++ txhostdesc->data_offset,
++ le16_to_cpu(txhostdesc->Ctl_16),
++ le16_to_cpu(txhostdesc->length),
++ acx2cpu(txhostdesc->desc_phy_next),
++ le32_to_cpu(txhostdesc->Status));
++ txhostdesc++;
++ }
++
++ /* write_reg16(adev, 0xb4, 0x4); */
++
++ acx_unlock(adev, flags);
++end_ok:
++
++ acx_sem_unlock(adev);
++#endif /* ACX_DEBUG */
++ return OK;
++}
++
++
++/***********************************************************************
++*/
++int
++acx100mem_ioctl_set_phy_amp_bias(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ struct iw_param *vwrq,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ u16 gpio_old;
++
++ if (!IS_ACX100(adev)) {
++ /* WARNING!!!
++ * Removing this check *might* damage
++ * hardware, since we're tweaking GPIOs here after all!!!
++ * You've been warned...
++ * WARNING!!! */
++ printk("acx: sorry, setting bias level for non-acx100 "
++ "is not supported yet\n");
++ return OK;
++ }
++
++ if (*extra > 7) {
++ printk("acx: invalid bias parameter, range is 0-7\n");
++ return -EINVAL;
++ }
++
++ acx_sem_lock(adev);
++
++ /* Need to lock accesses to [IO_ACX_GPIO_OUT]:
++ * IRQ handler uses it to update LED */
++ acx_lock(adev, flags);
++ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT);
++ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8));
++ acx_unlock(adev, flags);
++
++ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old);
++ printk("%s: PHY power amplifier bias: old:%d, new:%d\n",
++ ndev->name,
++ (gpio_old & 0x0700) >> 8, (unsigned char)*extra);
++
++ acx_sem_unlock(adev);
++
++ return OK;
++}
++
++/***************************************************************
++** acxmem_l_alloc_tx
++** Actually returns a txdesc_t* ptr
++**
++** FIXME: in case of fragments, should allocate multiple descrs
++** after figuring out how many we need and whether we still have
++** sufficiently many.
++*/
++tx_t*
++acxmem_l_alloc_tx(acx_device_t *adev)
++{
++ struct txdesc *txdesc;
++ unsigned head;
++ u8 ctl8;
++ static int txattempts = 0;
++
++ FN_ENTER;
++
++ if (unlikely(!adev->tx_free)) {
++ printk("acx: BUG: no free txdesc left\n");
++ /*
++ * Probably the ACX ignored a transmit attempt and now there's a packet
++ * sitting in the queue we think should be transmitting but the ACX doesn't
++ * know about.
++ * On the first pass, send the ACX a TxProc interrupt to try moving
++ * things along, and if that doesn't work (ie, we get called again) completely
++ * flush the transmit queue.
++ */
++ if (txattempts < 10) {
++ txattempts++;
++ printk ("acx: trying to wake up ACX\n");
++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
++ write_flush(adev); }
++ else {
++ txattempts = 0;
++ printk ("acx: flushing transmit queue.\n");
++ acxmem_l_clean_txdesc_emergency (adev);
++ }
++ txdesc = NULL;
++ goto end;
++ }
++
++ /*
++ * Make a quick check to see if there is transmit buffer space on
++ * the ACX. This can't guarantee there is enough space for the packet
++ * since we don't yet know how big it is, but it will prevent at least some
++ * annoyances.
++ */
++ if (!adev->acx_txbuf_blocks_free) {
++ txdesc = NULL;
++ goto end;
++ }
++
++ head = adev->tx_head;
++ /*
++ * txdesc points to ACX memory
++ */
++ txdesc = get_txdesc(adev, head);
++ ctl8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
++
++ /*
++ * If we don't own the buffer (HOSTOWN) it is certainly not free; however,
++ * we may have previously thought we had enough memory to send
++ * a packet, allocated the buffer then gave up when we found not enough
++ * transmit buffer space on the ACX. In that case, HOSTOWN and
++ * ACXDONE will both be set.
++ */
++ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_HOSTOWN))) {
++ /* whoops, descr at current index is not free, so probably
++ * ring buffer already full */
++ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find "
++ "free txdesc\n", head, ctl8);
++ txdesc = NULL;
++ goto end;
++ }
++
++ /* Needed in case txdesc won't be eventually submitted for tx */
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_ACXDONE_HOSTOWN);
++
++ adev->tx_free--;
++ log(L_BUFT, "tx: got desc %u, %u remain\n",
++ head, adev->tx_free);
++ /* Keep a few free descs between head and tail of tx ring.
++ ** It is not absolutely needed, just feels safer */
++ if (adev->tx_free < TX_STOP_QUEUE) {
++ log(L_BUF, "stop queue (%u tx desc left)\n",
++ adev->tx_free);
++ acx_stop_queue(adev->ndev, NULL);
++ }
++
++ /* returning current descriptor, so advance to next free one */
++ adev->tx_head = (head + 1) % TX_CNT;
++end:
++ FN_EXIT0;
++
++ return (tx_t*)txdesc;
++}
++
++
++/***************************************************************
++** acxmem_l_dealloc_tx
++** Clears out a previously allocatedvoid acxmem_l_dealloc_tx(tx_t *tx_opaque);
++ transmit descriptor. The ACX
++** can get confused if we skip transmit descriptors in the queue,
++** so when we don't need a descriptor return it to its original
++** state and move the queue head pointer back.
++**
++*/
++void
++acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque)
++{
++ /*
++ * txdesc is the address of the descriptor on the ACX.
++ */
++ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
++ txdesc_t tmptxdesc;
++ int index;
++
++ memset (&tmptxdesc, 0, sizeof(tmptxdesc));
++ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
++ tmptxdesc.u.r1.rate = 0x0a;
++
++ /*
++ * Clear out all of the transmit descriptor except for the next pointer
++ */
++ copy_to_slavemem (adev, (u32) &(txdesc->HostMemPtr),
++ (u8 *) &(tmptxdesc.HostMemPtr),
++ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc));
++
++ /*
++ * This is only called immediately after we've allocated, so we should
++ * be able to set the head back to this descriptor.
++ */
++ index = ((u8*) txdesc - (u8*)adev->txdesc_start) / adev->txdesc_size;
++ printk ("acx_dealloc: moving head from %d to %d\n", adev->tx_head, index);
++ adev->tx_head = index;
++}
++
++
++/***********************************************************************
++*/
++void*
++acxmem_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
++{
++ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data;
++}
++
++
++/***********************************************************************
++** acxmem_l_tx_data
++**
++** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
++** Can be called from acx_i_start_xmit (data frames from net core).
++**
++** FIXME: in case of fragments, should loop over the number of
++** pre-allocated tx descrs, properly setting up transfer data and
++** CTL_xxx flags according to fragment number.
++*/
++void
++acxmem_update_queue_indicator (acx_device_t *adev, int txqueue)
++{
++#ifdef USING_MORE_THAN_ONE_TRANSMIT_QUEUE
++ u32 indicator;
++ unsigned long flags;
++ int count;
++
++ /*
++ * Can't handle an interrupt while we're fiddling with the ACX's lock,
++ * according to TI. The ACX is supposed to hold fw_lock for at most
++ * 500ns.
++ */
++ local_irq_save (flags);
++
++ /*
++ * Wait for ACX to release the lock (at most 500ns).
++ */
++ count = 0;
++ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
++ && (count++ < 50)) {
++ ndelay (10);
++ }
++ if (count < 50) {
++
++ /*
++ * Take out the host lock - anything non-zero will work, so don't worry about
++ * be/le
++ */
++ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 1);
++
++ /*
++ * Avoid a race condition
++ */
++ count = 0;
++ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
++ && (count++ < 50)) {
++ ndelay (10);
++ }
++
++ if (count < 50) {
++ /*
++ * Mark the queue active
++ */
++ indicator = read_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator));
++ indicator |= cpu_to_le32 (1 << txqueue);
++ write_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator), indicator);
++ }
++
++ /*
++ * Release the host lock
++ */
++ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 0);
++
++ }
++
++ /*
++ * Restore interrupts
++ */
++ local_irq_restore (flags);
++#endif
++}
++
++void
++acxmem_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len)
++{
++ /*
++ * txdesc is the address on the ACX
++ */
++ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
++ txhostdesc_t *hostdesc1, *hostdesc2;
++ client_t *clt;
++ u16 rate_cur;
++ u8 Ctl_8, Ctl2_8;
++ u32 addr;
++
++ FN_ENTER;
++ /* fw doesn't tx such packets anyhow */
++ if (unlikely(len < WLAN_HDR_A3_LEN))
++ goto end;
++
++ hostdesc1 = get_txhostdesc(adev, txdesc);
++ /* modify flag status in separate variable to be able to write it back
++ * in one big swoop later (also in order to have less device memory
++ * accesses) */
++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
++ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */
++
++ hostdesc2 = hostdesc1 + 1;
++
++ /* DON'T simply set Ctl field to 0 here globally,
++ * it needs to maintain a consistent flag status (those are state flags!!),
++ * otherwise it may lead to severe disruption. Only set or reset particular
++ * flags at the exact moment this is needed... */
++
++ /* let chip do RTS/CTS handshaking before sending
++ * in case packet size exceeds threshold */
++ if (len > adev->rts_threshold)
++ SET_BIT(Ctl2_8, DESC_CTL2_RTS);
++ else
++ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS);
++
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_3_AP:
++ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1);
++ break;
++ case ACX_MODE_2_STA:
++ clt = adev->ap_client;
++ break;
++#if 0
++/* testing was done on acx111: */
++ case ACX_MODE_MONITOR:
++ SET_BIT(Ctl2_8, 0
++/* sends CTS to self before packet */
++ + DESC_CTL2_SEQ /* don't increase sequence field */
++/* not working (looks like good fcs is still added) */
++ + DESC_CTL2_FCS /* don't add the FCS */
++/* not tested */
++ + DESC_CTL2_MORE_FRAG
++/* not tested */
++ + DESC_CTL2_RETRY /* don't increase retry field */
++/* not tested */
++ + DESC_CTL2_POWER /* don't increase power mgmt. field */
++/* no effect */
++ + DESC_CTL2_WEP /* encrypt this frame */
++/* not tested */
++ + DESC_CTL2_DUR /* don't increase duration field */
++ );
++ /* fallthrough */
++#endif
++ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
++ clt = NULL;
++ break;
++ }
++
++ rate_cur = clt ? clt->rate_cur : adev->rate_bcast;
++ if (unlikely(!rate_cur)) {
++ printk("acx: driver bug! bad ratemask\n");
++ goto end;
++ }
++
++ /* used in tx cleanup routine for auto rate and accounting: */
++ put_txcr(adev, txdesc, clt, rate_cur);
++
++ write_slavemem16 (adev, (u32) &(txdesc->total_length), cpu_to_le16(len));
++ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN);
++ if (IS_ACX111(adev)) {
++ /* note that if !txdesc->do_auto, txrate->cur
++ ** has only one nonzero bit */
++ txdesc->u.r2.rate111 = cpu_to_le16(
++ rate_cur
++ /* WARNING: I was never able to make it work with prism54 AP.
++ ** It was falling down to 1Mbit where shortpre is not applicable,
++ ** and not working at all at "5,11 basic rates only" setting.
++ ** I even didn't see tx packets in radio packet capture.
++ ** Disabled for now --vda */
++ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */
++ );
++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
++ /* should add this to rate111 above as necessary */
++ | (clt->pbcc511 ? RATE111_PBCC511 : 0)
++#endif
++ hostdesc1->length = cpu_to_le16(len);
++ } else { /* ACX100 */
++ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100;
++ write_slavemem8 (adev, (u32) &(txdesc->u.r1.rate), rate_100);
++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
++ if (clt->pbcc511) {
++ if (n == RATE100_5 || n == RATE100_11)
++ n |= RATE100_PBCC511;
++ }
++
++ if (clt->shortpre && (clt->cur != RATE111_1))
++ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */
++#endif
++ /* set autodma and reclaim and 1st mpdu */
++ SET_BIT(Ctl_8, DESC_CTL_FIRSTFRAG);
++
++#if ACX_FRAGMENTATION
++ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */
++#endif
++ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN);
++
++ /*
++ * Since we're not using autodma copy the packet data to the acx now.
++ * Even host descriptors point to the packet header, and the odd indexed
++ * descriptor following points to the packet data.
++ *
++ * The first step is to find free memory in the ACX transmit buffers.
++ * They don't necessarily map one to one with the transmit queue entries,
++ * so search through them starting just after the last one used.
++ */
++ addr = allocate_acx_txbuf_space (adev, len);
++ if (addr) {
++ chaincopy_to_slavemem (adev, addr, hostdesc1->data, len);
++ }
++ else {
++ /*
++ * Bummer. We thought we might have enough room in the transmit
++ * buffers to send this packet, but it turns out we don't. alloc_tx
++ * has already marked this transmit descriptor as HOSTOWN and ACXDONE,
++ * which means the ACX will hang when it gets to this descriptor unless
++ * we do something about it. Having a bubble in the transmit queue just
++ * doesn't seem to work, so we have to reset this transmit queue entry's
++ * state to its original value and back up our head pointer to point
++ * back to this entry.
++ */
++ hostdesc1->length = 0;
++ hostdesc2->length = 0;
++ write_slavemem16 (adev, (u32) &(txdesc->total_length), 0);
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG);
++ adev->tx_head = ((u8*) txdesc - (u8*) adev->txdesc_start) / adev->txdesc_size;
++ goto end;
++ }
++ /*
++ * Tell the ACX where the packet is.
++ */
++ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), addr);
++
++ }
++ /* don't need to clean ack/rts statistics here, already
++ * done on descr cleanup */
++
++ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors
++ * are now owned by the acx100; do this as LAST operation */
++ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN);
++ /* flush writes before we release hostdesc to the adapter here */
++ //wmb();
++
++ /* write back modified flags */
++ /*
++ * At this point Ctl_8 should just be FIRSTFRAG
++ */
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl2_8),Ctl2_8);
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), Ctl_8);
++ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */
++
++ /*
++ * Update the queue indicator to say there's data on the first queue.
++ */
++ acxmem_update_queue_indicator (adev, 0);
++
++ /* flush writes before we tell the adapter that it's its turn now */
++ mmiowb();
++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
++ write_flush(adev);
++
++ /* log the packet content AFTER sending it,
++ * in order to not delay sending any further than absolutely needed
++ * Do separate logs for acx100/111 to have human-readable rates */
++ if (unlikely(acx_debug & (L_XFER|L_DATA))) {
++ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc;
++ if (IS_ACX111(adev))
++ printk("tx: pkt (%s): len %d "
++ "rate %04X%s status %u\n",
++ acx_get_packet_type_string(le16_to_cpu(fc)), len,
++ le16_to_cpu(txdesc->u.r2.rate111),
++ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "",
++ adev->status);
++ else
++ printk("tx: pkt (%s): len %d rate %03u%s status %u\n",
++ acx_get_packet_type_string(fc), len,
++ read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate)),
++ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "",
++ adev->status);
++
++ if (acx_debug & L_DATA) {
++ printk("tx: 802.11 [%d]: ", len);
++ acx_dump_bytes(hostdesc1->data, len);
++ }
++ }
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_l_clean_txdesc
++**
++** This function resets the txdescs' status when the ACX100
++** signals the TX done IRQ (txdescs have been processed), starting with
++** the pool index of the descriptor which we would use next,
++** in order to make sure that we can be as fast as possible
++** in filling new txdescs.
++** Everytime we get called we know where the next packet to be cleaned is.
++*/
++
++#if !ACX_DEBUG
++static inline void log_txbuffer(const acx_device_t *adev) {}
++#else
++static void
++log_txbuffer(acx_device_t *adev)
++{
++ txdesc_t *txdesc;
++ int i;
++ u8 Ctl_8;
++
++ /* no FN_ENTER here, we don't want that */
++ /* no locks here, since it's entirely non-critical code */
++ txdesc = adev->txdesc_start;
++ if (unlikely(!txdesc)) return;
++ printk("tx: desc->Ctl8's:");
++ for (i = 0; i < TX_CNT; i++) {
++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
++ printk(" %02X", Ctl_8);
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++ printk("\n");
++}
++#endif
++
++
++static void
++handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger)
++{
++ const char *err = "unknown error";
++
++ /* hmm, should we handle this as a mask
++ * of *several* bits?
++ * For now I think only caring about
++ * individual bits is ok... */
++ switch (error) {
++ case 0x01:
++ err = "no Tx due to error in other fragment";
++ adev->wstats.discard.fragment++;
++ break;
++ case 0x02:
++ err = "Tx aborted";
++ adev->stats.tx_aborted_errors++;
++ break;
++ case 0x04:
++ err = "Tx desc wrong parameters";
++ adev->wstats.discard.misc++;
++ break;
++ case 0x08:
++ err = "WEP key not found";
++ adev->wstats.discard.misc++;
++ break;
++ case 0x10:
++ err = "MSDU lifetime timeout? - try changing "
++ "'iwconfig retry lifetime XXX'";
++ adev->wstats.discard.misc++;
++ break;
++ case 0x20:
++ err = "excessive Tx retries due to either distance "
++ "too high or unable to Tx or Tx frame error - "
++ "try changing 'iwconfig txpower XXX' or "
++ "'sens'itivity or 'retry'";
++ adev->wstats.discard.retries++;
++ /* Tx error 0x20 also seems to occur on
++ * overheating, so I'm not sure whether we
++ * actually want to do aggressive radio recalibration,
++ * since people maybe won't notice then that their hardware
++ * is slowly getting cooked...
++ * Or is it still a safe long distance from utter
++ * radio non-functionality despite many radio recalibs
++ * to final destructive overheating of the hardware?
++ * In this case we really should do recalib here...
++ * I guess the only way to find out is to do a
++ * potentially fatal self-experiment :-\
++ * Or maybe only recalib in case we're using Tx
++ * rate auto (on errors switching to lower speed
++ * --> less heat?) or 802.11 power save mode?
++ *
++ * ok, just do it. */
++ if (++adev->retry_errors_msg_ratelimit % 4 == 0) {
++ if (adev->retry_errors_msg_ratelimit <= 20) {
++ printk("%s: several excessive Tx "
++ "retry errors occurred, attempting "
++ "to recalibrate radio. Radio "
++ "drift might be caused by increasing "
++ "card temperature, please check the card "
++ "before it's too late!\n",
++ adev->ndev->name);
++ if (adev->retry_errors_msg_ratelimit == 20)
++ printk("disabling above message\n");
++ }
++
++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
++ }
++ break;
++ case 0x40:
++ err = "Tx buffer overflow";
++ adev->stats.tx_fifo_errors++;
++ break;
++ case 0x80:
++ err = "DMA error";
++ adev->wstats.discard.misc++;
++ break;
++ }
++ adev->stats.tx_errors++;
++ if (adev->stats.tx_errors <= 20)
++ printk("%s: tx error 0x%02X, buf %02u! (%s)\n",
++ adev->ndev->name, error, finger, err);
++ else
++ printk("%s: tx error 0x%02X, buf %02u!\n",
++ adev->ndev->name, error, finger);
++}
++
++
++unsigned int
++acxmem_l_clean_txdesc(acx_device_t *adev)
++{
++ txdesc_t *txdesc;
++ unsigned finger;
++ int num_cleaned;
++ u16 r111;
++ u8 error, ack_failures, rts_failures, rts_ok, r100, Ctl_8;
++ u32 acxmem;
++ txdesc_t tmptxdesc;
++
++ FN_ENTER;
++
++ /*
++ * Set up a template descriptor for re-initialization. The only
++ * things that get set are Ctl_8 and the rate, and the rate defaults
++ * to 1Mbps.
++ */
++ memset (&tmptxdesc, 0, sizeof (tmptxdesc));
++ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
++ tmptxdesc.u.r1.rate = 0x0a;
++
++ if (unlikely(acx_debug & L_DEBUG))
++ log_txbuffer(adev);
++
++ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail);
++
++ /* We know first descr which is not free yet. We advance it as far
++ ** as we see correct bits set in following descs (if next desc
++ ** is NOT free, we shouldn't advance at all). We know that in
++ ** front of tx_tail may be "holes" with isolated free descs.
++ ** We will catch up when all intermediate descs will be freed also */
++
++ finger = adev->tx_tail;
++ num_cleaned = 0;
++ while (likely(finger != adev->tx_head)) {
++ txdesc = get_txdesc(adev, finger);
++
++ /* If we allocated txdesc on tx path but then decided
++ ** to NOT use it, then it will be left as a free "bubble"
++ ** in the "allocated for tx" part of the ring.
++ ** We may meet it on the next ring pass here. */
++
++ /* stop if not marked as "tx finished" and "host owned" */
++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
++ if ((Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN)
++ != DESC_CTL_ACXDONE_HOSTOWN) {
++ if (unlikely(!num_cleaned)) { /* maybe remove completely */
++ log(L_BUFT, "clean_txdesc: tail isn't free. "
++ "tail:%d head:%d\n",
++ adev->tx_tail, adev->tx_head);
++ }
++ break;
++ }
++
++ /* remember desc values... */
++ error = read_slavemem8 (adev, (u32) &(txdesc->error));
++ ack_failures = read_slavemem8 (adev, (u32) &(txdesc->ack_failures));
++ rts_failures = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures));
++ rts_ok = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok));
++ r100 = read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate));
++ r111 = le16_to_cpu(read_slavemem16 (adev, (u32) &(txdesc->u.r2.rate111)));
++
++ /* need to check for certain error conditions before we
++ * clean the descriptor: we still need valid descr data here */
++ if (unlikely(0x30 & error)) {
++ /* only send IWEVTXDROP in case of retry or lifetime exceeded;
++ * all other errors mean we screwed up locally */
++ union iwreq_data wrqu;
++ wlan_hdr_t *hdr;
++ txhostdesc_t *hostdesc;
++
++ hostdesc = get_txhostdesc(adev, txdesc);
++ hdr = (wlan_hdr_t *)hostdesc->data;
++ MAC_COPY(wrqu.addr.sa_data, hdr->a1);
++ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL);
++ }
++
++ /*
++ * Free up the transmit data buffers
++ */
++ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
++ if (acxmem) {
++ reclaim_acx_txbuf_space (adev, acxmem);
++ }
++
++ /* ...and free the desc by clearing all the fields
++ except the next pointer */
++ copy_to_slavemem (adev,
++ (u32) &(txdesc->HostMemPtr),
++ (u8 *) &(tmptxdesc.HostMemPtr),
++ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc)
++ );
++
++ adev->tx_free++;
++ num_cleaned++;
++
++ if ((adev->tx_free >= TX_START_QUEUE)
++ && (adev->status == ACX_STATUS_4_ASSOCIATED)
++ && (acx_queue_stopped(adev->ndev))
++ ) {
++ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n",
++ adev->tx_free);
++ acx_wake_queue(adev->ndev, NULL);
++ }
++
++ /* do error checking, rate handling and logging
++ * AFTER having done the work, it's faster */
++
++ /* do rate handling */
++ if (adev->rate_auto) {
++ struct client *clt = get_txc(adev, txdesc);
++ if (clt) {
++ u16 cur = get_txr(adev, txdesc);
++ if (clt->rate_cur == cur) {
++ acx_l_handle_txrate_auto(adev, clt,
++ cur, /* intended rate */
++ r100, r111, /* actually used rate */
++ (error & 0x30), /* was there an error? */
++ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free);
++ }
++ }
++ }
++
++ if (unlikely(error))
++ handle_tx_error(adev, error, finger);
++
++ if (IS_ACX111(adev))
++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n",
++ finger, ack_failures, rts_failures, rts_ok, r111);
++ else
++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n",
++ finger, ack_failures, rts_failures, rts_ok, r100);
++
++ /* update pointer for descr to be cleaned next */
++ finger = (finger + 1) % TX_CNT;
++ }
++
++ /* remember last position */
++ adev->tx_tail = finger;
++/* end: */
++ FN_EXIT1(num_cleaned);
++ return num_cleaned;
++}
++
++/* clean *all* Tx descriptors, and regardless of their previous state.
++ * Used for brute-force reset handling. */
++void
++acxmem_l_clean_txdesc_emergency(acx_device_t *adev)
++{
++ txdesc_t *txdesc;
++ int i;
++ u32 acxmem;
++
++ FN_ENTER;
++
++ for (i = 0; i < TX_CNT; i++) {
++ txdesc = get_txdesc(adev, i);
++
++ /* free it */
++ write_slavemem8 (adev, (u32) &(txdesc->ack_failures), 0);
++ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures), 0);
++ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok), 0);
++ write_slavemem8 (adev, (u32) &(txdesc->error), 0);
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN);
++
++ /*
++ * Clean up the memory allocated on the ACX for this transmit descriptor.
++ */
++ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
++ if (acxmem) {
++ reclaim_acx_txbuf_space (adev, acxmem);
++ }
++
++ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), 0);
++ }
++
++ adev->tx_free = TX_CNT;
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_s_create_tx_host_desc_queue
++*/
++
++static void*
++allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg)
++{
++ void *ptr;
++ ptr = kmalloc (size, GFP_KERNEL);
++ /*
++ * The ACX can't use the physical address, so we'll have to fake it
++ * later and it might be handy to have the virtual address.
++ */
++ *phy = (dma_addr_t) NULL;
++
++ if (ptr) {
++ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n",
++ msg, (int)size, ptr, (unsigned long long)*phy);
++ memset(ptr, 0, size);
++ return ptr;
++ }
++ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n",
++ msg, (int)size);
++ return NULL;
++}
++
++
++/*
++ * In the generic slave memory access mode, most of the stuff in
++ * the txhostdesc_t is unused. It's only here because the rest of
++ * the ACX driver expects it to be since the PCI version uses indirect
++ * host memory organization with DMA. Since we're not using DMA the
++ * only use we have for the host descriptors is to store the packets
++ * on the way out.
++ */
++static int
++acxmem_s_create_tx_host_desc_queue(acx_device_t *adev)
++{
++ txhostdesc_t *hostdesc;
++ u8 *txbuf;
++ int i;
++
++ FN_ENTER;
++
++ /* allocate TX buffer */
++ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS;
++
++ adev->txbuf_start = allocate(adev, adev->txbuf_area_size,
++ &adev->txbuf_startphy, "txbuf_start");
++ if (!adev->txbuf_start)
++ goto fail;
++
++ /* allocate the TX host descriptor queue pool */
++ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc);
++
++ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size,
++ &adev->txhostdesc_startphy, "txhostdesc_start");
++ if (!adev->txhostdesc_start)
++ goto fail;
++
++ /* check for proper alignment of TX host descriptor pool */
++ if ((long) adev->txhostdesc_start & 3) {
++ printk("acx: driver bug: dma alloc returns unaligned address\n");
++ goto fail;
++ }
++
++ hostdesc = adev->txhostdesc_start;
++ txbuf = adev->txbuf_start;
++
++#if 0
++/* Each tx buffer is accessed by hardware via
++** txdesc -> txhostdesc(s) -> txbuffer(s).
++** We use only one txhostdesc per txdesc, but it looks like
++** acx111 is buggy: it accesses second txhostdesc
++** (via hostdesc.desc_phy_next field) even if
++** txdesc->length == hostdesc->length and thus
++** entire packet was placed into first txhostdesc.
++** Due to this bug acx111 hangs unless second txhostdesc
++** has le16_to_cpu(hostdesc.length) = 3 (or larger)
++** Storing NULL into hostdesc.desc_phy_next
++** doesn't seem to help.
++**
++** Update: although it worked on Xterasys XN-2522g
++** with len=3 trick, WG311v2 is even more bogus, doesn't work.
++** Keeping this code (#ifdef'ed out) for documentational purposes.
++*/
++ for (i = 0; i < TX_CNT*2; i++) {
++ hostdesc_phy += sizeof(*hostdesc);
++ if (!(i & 1)) {
++ hostdesc->data_phy = cpu2acx(txbuf_phy);
++ /* hostdesc->data_offset = ... */
++ /* hostdesc->reserved = ... */
++ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
++ /* hostdesc->length = ... */
++ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
++ hostdesc->pNext = ptr2acx(NULL);
++ /* hostdesc->Status = ... */
++ /* below: non-hardware fields */
++ hostdesc->data = txbuf;
++
++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS;
++ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS;
++ } else {
++ /* hostdesc->data_phy = ... */
++ /* hostdesc->data_offset = ... */
++ /* hostdesc->reserved = ... */
++ /* hostdesc->Ctl_16 = ... */
++ hostdesc->length = cpu_to_le16(3); /* bug workaround */
++ /* hostdesc->desc_phy_next = ... */
++ /* hostdesc->pNext = ... */
++ /* hostdesc->Status = ... */
++ /* below: non-hardware fields */
++ /* hostdesc->data = ... */
++ }
++ hostdesc++;
++ }
++#endif
++/* We initialize two hostdescs so that they point to adjacent
++** memory areas. Thus txbuf is really just a contiguous memory area */
++ for (i = 0; i < TX_CNT*2; i++) {
++ /* ->data is a non-hardware field: */
++ hostdesc->data = txbuf;
++
++ if (!(i & 1)) {
++ txbuf += WLAN_HDR_A3_LEN;
++ } else {
++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
++ }
++ hostdesc++;
++ }
++ hostdesc--;
++
++ FN_EXIT1(OK);
++ return OK;
++fail:
++ printk("acx: create_tx_host_desc_queue FAILED\n");
++ /* dealloc will be done by free function on error case */
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***************************************************************
++** acxmem_s_create_rx_host_desc_queue
++*/
++/* the whole size of a data buffer (header plus data body)
++ * plus 32 bytes safety offset at the end */
++#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32)
++
++static int
++acxmem_s_create_rx_host_desc_queue(acx_device_t *adev)
++{
++ rxhostdesc_t *hostdesc;
++ rxbuffer_t *rxbuf;
++ int i;
++
++ FN_ENTER;
++
++ /* allocate the RX host descriptor queue pool */
++ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc);
++
++ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size,
++ &adev->rxhostdesc_startphy, "rxhostdesc_start");
++ if (!adev->rxhostdesc_start)
++ goto fail;
++
++ /* check for proper alignment of RX host descriptor pool */
++ if ((long) adev->rxhostdesc_start & 3) {
++ printk("acx: driver bug: dma alloc returns unaligned address\n");
++ goto fail;
++ }
++
++ /* allocate Rx buffer pool which will be used by the acx
++ * to store the whole content of the received frames in it */
++ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE;
++
++ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size,
++ &adev->rxbuf_startphy, "rxbuf_start");
++ if (!adev->rxbuf_start)
++ goto fail;
++
++ rxbuf = adev->rxbuf_start;
++ hostdesc = adev->rxhostdesc_start;
++
++ /* don't make any popular C programming pointer arithmetic mistakes
++ * here, otherwise I'll kill you...
++ * (and don't dare asking me why I'm warning you about that...) */
++ for (i = 0; i < RX_CNT; i++) {
++ hostdesc->data = rxbuf;
++ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE);
++ rxbuf++;
++ hostdesc++;
++ }
++ hostdesc--;
++ FN_EXIT1(OK);
++ return OK;
++fail:
++ printk("acx: create_rx_host_desc_queue FAILED\n");
++ /* dealloc will be done by free function on error case */
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***************************************************************
++** acxmem_s_create_hostdesc_queues
++*/
++int
++acxmem_s_create_hostdesc_queues(acx_device_t *adev)
++{
++ int result;
++ result = acxmem_s_create_tx_host_desc_queue(adev);
++ if (OK != result) return result;
++ result = acxmem_s_create_rx_host_desc_queue(adev);
++ return result;
++}
++
++
++/***************************************************************
++** acxmem_create_tx_desc_queue
++*/
++static void
++acxmem_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start)
++{
++ txdesc_t *txdesc;
++ u32 clr;
++ int i;
++
++ FN_ENTER;
++
++ if (IS_ACX100(adev))
++ adev->txdesc_size = sizeof(*txdesc);
++ else
++ /* the acx111 txdesc is 4 bytes larger */
++ adev->txdesc_size = sizeof(*txdesc) + 4;
++
++ /*
++ * This refers to an ACX address, not one of ours
++ */
++ adev->txdesc_start = (txdesc_t *) tx_queue_start;
++
++ log(L_DEBUG, "adev->txdesc_start=%p\n",
++ adev->txdesc_start);
++
++ adev->tx_free = TX_CNT;
++ /* done by memset: adev->tx_head = 0; */
++ /* done by memset: adev->tx_tail = 0; */
++ txdesc = adev->txdesc_start;
++
++ if (IS_ACX111(adev)) {
++ /* ACX111 has a preinitialized Tx buffer! */
++ /* loop over whole send pool */
++ /* FIXME: do we have to do the hostmemptr stuff here?? */
++ for (i = 0; i < TX_CNT; i++) {
++ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
++ /* reserve two (hdr desc and payload desc) */
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++ } else {
++ /* ACX100 Tx buffer needs to be initialized by us */
++ /* clear whole send pool. sizeof is safe here (we are acx100) */
++
++ /*
++ * adev->txdesc_start refers to device memory, so we can't write
++ * directly to it.
++ */
++ clr = (u32) adev->txdesc_start;
++ while (clr < (u32) adev->txdesc_start + (TX_CNT * sizeof(*txdesc))) {
++ write_slavemem32 (adev, clr, 0);
++ clr += 4;
++ }
++
++ /* loop over whole send pool */
++ for (i = 0; i < TX_CNT; i++) {
++ log(L_DEBUG, "configure card tx descriptor: 0x%p, "
++ "size: 0x%X\n", txdesc, adev->txdesc_size);
++
++ /* initialise ctl */
++ /*
++ * No auto DMA here
++ */
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8),
++ (u8) (DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG));
++ /* done by memset(0): txdesc->Ctl2_8 = 0; */
++
++ /* point to next txdesc */
++ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
++ (u32) cpu_to_le32 ((u8 *) txdesc + adev->txdesc_size));
++
++ /* go to the next one */
++ /* ++ is safe here (we are acx100) */
++ txdesc++;
++ }
++ /* go back to the last one */
++ txdesc--;
++ /* and point to the first making it a ring buffer */
++ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
++ (u32) cpu_to_le32 (tx_queue_start));
++ }
++ FN_EXIT0;
++}
++
++
++/***************************************************************
++** acxmem_create_rx_desc_queue
++*/
++static void
++acxmem_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start)
++{
++ rxdesc_t *rxdesc;
++ u32 mem_offs;
++ int i;
++
++ FN_ENTER;
++
++ /* done by memset: adev->rx_tail = 0; */
++
++ /* ACX111 doesn't need any further config: preconfigures itself.
++ * Simply print ring buffer for debugging */
++ if (IS_ACX111(adev)) {
++ /* rxdesc_start already set here */
++
++ adev->rxdesc_start = (rxdesc_t *) rx_queue_start;
++
++ rxdesc = adev->rxdesc_start;
++ for (i = 0; i < RX_CNT; i++) {
++ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc);
++ rxdesc = adev->rxdesc_start = (rxdesc_t *)
++ acx2cpu(rxdesc->pNextDesc);
++ }
++ } else {
++ /* we didn't pre-calculate rxdesc_start in case of ACX100 */
++ /* rxdesc_start should be right AFTER Tx pool */
++ adev->rxdesc_start = (rxdesc_t *)
++ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t)));
++ /* NB: sizeof(txdesc_t) above is valid because we know
++ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere!
++ ** acx111's txdesc is larger! */
++
++ mem_offs = (u32) adev->rxdesc_start;
++ while (mem_offs < (u32) adev->rxdesc_start + (RX_CNT * sizeof (*rxdesc))) {
++ write_slavemem32 (adev, mem_offs, 0);
++ mem_offs += 4;
++ }
++
++ /* loop over whole receive pool */
++ rxdesc = adev->rxdesc_start;
++ for (i = 0; i < RX_CNT; i++) {
++ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc);
++ /* point to next rxdesc */
++ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
++ (u32) cpu_to_le32 ((u8 *) rxdesc + sizeof(*rxdesc)));
++ /* go to the next one */
++ rxdesc++;
++ }
++ /* go to the last one */
++ rxdesc--;
++
++ /* and point to the first making it a ring buffer */
++ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
++ (u32) cpu_to_le32 (rx_queue_start));
++ }
++ FN_EXIT0;
++}
++
++
++/***************************************************************
++** acxmem_create_desc_queues
++*/
++void
++acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start)
++{
++ u32 *p;
++ int i;
++
++ acxmem_create_tx_desc_queue(adev, tx_queue_start);
++ acxmem_create_rx_desc_queue(adev, rx_queue_start);
++ p = (u32 *) adev->acx_queue_indicator;
++ for (i = 0; i < 4; i++) {
++ write_slavemem32 (adev, (u32) p, 0);
++ p++;
++ }
++}
++
++
++/***************************************************************
++** acxmem_s_proc_diag_output
++*/
++char*
++acxmem_s_proc_diag_output(char *p, acx_device_t *adev)
++{
++ const char *rtl, *thd, *ttl;
++ txdesc_t *txdesc;
++ u8 Ctl_8;
++ rxdesc_t *rxdesc;
++ int i;
++ u32 tmp;
++ txdesc_t txd;
++ u8 buf[0x200];
++ int j, k;
++
++ FN_ENTER;
++
++#if DUMP_MEM_DURING_DIAG > 0
++ dump_acxmem (adev, 0, 0x10000);
++ panic ("dump finished");
++#endif
++
++ p += sprintf(p, "** Rx buf **\n");
++ rxdesc = adev->rxdesc_start;
++ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
++ rtl = (i == adev->rx_tail) ? " [tail]" : "";
++ Ctl_8 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
++ if (Ctl_8 & DESC_CTL_HOSTOWN)
++ p += sprintf(p, "%02u (%02x) FULL%s\n", i, Ctl_8, rtl);
++ else
++ p += sprintf(p, "%02u (%02x) empty%s\n", i, Ctl_8, rtl);
++ rxdesc++;
++ }
++ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free,
++ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running");
++
++ p += sprintf(p, "** Tx buf %d blocks total, %d available, free list head %04x\n",
++ adev->acx_txbuf_numblocks, adev->acx_txbuf_blocks_free, adev->acx_txbuf_free);
++ txdesc = adev->txdesc_start;
++ if (txdesc) {
++ for (i = 0; i < TX_CNT; i++) {
++ thd = (i == adev->tx_head) ? " [head]" : "";
++ ttl = (i == adev->tx_tail) ? " [tail]" : "";
++ copy_from_slavemem (adev, (u8 *) &txd, (u32) txdesc, sizeof (txd));
++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
++ if (Ctl_8 & DESC_CTL_ACXDONE)
++ p += sprintf(p, "%02u ready to free (%02X)%s%s", i, Ctl_8, thd, ttl);
++ else if (Ctl_8 & DESC_CTL_HOSTOWN)
++ p += sprintf(p, "%02u available (%02X)%s%s", i, Ctl_8, thd, ttl);
++ else
++ p += sprintf(p, "%02u busy (%02X)%s%s", i, Ctl_8, thd, ttl);
++ tmp = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
++ if (tmp) {
++ p += sprintf (p, " %04x", tmp);
++ while ((tmp = read_slavemem32 (adev, (u32) tmp)) != 0x02000000) {
++ tmp <<= 5;
++ p += sprintf (p, " %04x", tmp);
++ }
++ }
++ p += sprintf (p, "\n");
++ p += sprintf (p, " %04x: %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %02x %02x %02x %02x\n"
++ "%02x %02x %02x %02x %04x\n",
++ (u32) txdesc,
++ txd.pNextDesc.v, txd.HostMemPtr.v, txd.AcxMemPtr.v, txd.tx_time,
++ txd.total_length, txd.Reserved,
++ txd.dummy[0], txd.dummy[1], txd.dummy[2], txd.dummy[3],
++ txd.Ctl_8, txd.Ctl2_8, txd.error, txd.ack_failures,
++ txd.u.rts.rts_failures, txd.u.rts.rts_ok, txd.u.r1.rate, txd.u.r1.queue_ctrl,
++ txd.queue_info
++ );
++ if (txd.AcxMemPtr.v) {
++ copy_from_slavemem (adev, buf, txd.AcxMemPtr.v, sizeof (buf));
++ for (j = 0; (j < txd.total_length) && (j<(sizeof(buf)-4)); j+=16) {
++ p += sprintf (p, " ");
++ for (k = 0; (k < 16) && (j+k < txd.total_length); k++) {
++ p += sprintf (p, " %02x", buf[j+k+4]);
++ }
++ p += sprintf (p, "\n");
++ }
++ }
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++ }
++
++ p += sprintf(p,
++ "\n"
++ "** Generic slave data **\n"
++ "irq_mask 0x%04x irq_status 0x%04x irq on acx 0x%04x\n"
++ "txbuf_start 0x%p, txbuf_area_size %u\n"
++ "txdesc_size %u, txdesc_start 0x%p\n"
++ "txhostdesc_start 0x%p, txhostdesc_area_size %u\n"
++ "txbuf start 0x%04x, txbuf size %d\n"
++ "rxdesc_start 0x%p\n"
++ "rxhostdesc_start 0x%p, rxhostdesc_area_size %u\n"
++ "rxbuf_start 0x%p, rxbuf_area_size %u\n",
++ adev->irq_mask, adev->irq_status, read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES),
++ adev->txbuf_start, adev->txbuf_area_size,
++ adev->txdesc_size, adev->txdesc_start,
++ adev->txhostdesc_start, adev->txhostdesc_area_size,
++ adev->acx_txbuf_start, adev->acx_txbuf_numblocks * adev->memblocksize,
++ adev->rxdesc_start,
++ adev->rxhostdesc_start, adev->rxhostdesc_area_size,
++ adev->rxbuf_start, adev->rxbuf_area_size);
++ FN_EXIT0;
++ return p;
++}
++
++
++/***********************************************************************
++*/
++int
++acxmem_proc_eeprom_output(char *buf, acx_device_t *adev)
++{
++ char *p = buf;
++ int i;
++
++ FN_ENTER;
++
++ for (i = 0; i < 0x400; i++) {
++ acxmem_read_eeprom_byte(adev, i, p++);
++ }
++
++ FN_EXIT1(p - buf);
++ return p - buf;
++}
++
++
++/***********************************************************************
++*/
++void
++acxmem_set_interrupt_mask(acx_device_t *adev)
++{
++ if (IS_ACX111(adev)) {
++ adev->irq_mask = (u16) ~(0
++ | HOST_INT_RX_DATA
++ | HOST_INT_TX_COMPLETE
++ /* | HOST_INT_TX_XFER */
++ /* | HOST_INT_RX_COMPLETE */
++ /* | HOST_INT_DTIM */
++ /* | HOST_INT_BEACON */
++ /* | HOST_INT_TIMER */
++ /* | HOST_INT_KEY_NOT_FOUND */
++ | HOST_INT_IV_ICV_FAILURE
++ | HOST_INT_CMD_COMPLETE
++ | HOST_INT_INFO
++ | HOST_INT_OVERFLOW
++ /* | HOST_INT_PROCESS_ERROR */
++ | HOST_INT_SCAN_COMPLETE
++ | HOST_INT_FCS_THRESHOLD
++ | HOST_INT_UNKNOWN
++ );
++ /* Or else acx100 won't signal cmd completion, right? */
++ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */
++ } else {
++ adev->irq_mask = (u16) ~(0
++ | HOST_INT_RX_DATA
++ | HOST_INT_TX_COMPLETE
++ /* | HOST_INT_TX_XFER */
++ /* | HOST_INT_RX_COMPLETE */
++ /* | HOST_INT_DTIM */
++ /* | HOST_INT_BEACON */
++ /* | HOST_INT_TIMER */
++ /* | HOST_INT_KEY_NOT_FOUND */
++ /* | HOST_INT_IV_ICV_FAILURE */
++ | HOST_INT_CMD_COMPLETE
++ | HOST_INT_INFO
++ /* | HOST_INT_OVERFLOW */
++ /* | HOST_INT_PROCESS_ERROR */
++ | HOST_INT_SCAN_COMPLETE
++ /* | HOST_INT_FCS_THRESHOLD */
++ /* | HOST_INT_BEACON_MISSED */
++ );
++ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */
++ }
++}
++
++
++/***********************************************************************
++*/
++int
++acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
++{
++ struct acx111_ie_tx_level tx_level;
++
++ /* since it can be assumed that at least the Maxim radio has a
++ * maximum power output of 20dBm and since it also can be
++ * assumed that these values drive the DAC responsible for
++ * setting the linear Tx level, I'd guess that these values
++ * should be the corresponding linear values for a dBm value,
++ * in other words: calculate the values from that formula:
++ * Y [dBm] = 10 * log (X [mW])
++ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm)
++ * and you're done...
++ * Hopefully that's ok, but you never know if we're actually
++ * right... (especially since Windows XP doesn't seem to show
++ * actual Tx dBm values :-P) */
++
++ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the
++ * values are EXACTLY mW!!! Not sure about RFMD and others,
++ * though... */
++ static const u8 dbm2val_maxim[21] = {
++ 63, 63, 63, 62,
++ 61, 61, 60, 60,
++ 59, 58, 57, 55,
++ 53, 50, 47, 43,
++ 38, 31, 23, 13,
++ 0
++ };
++ static const u8 dbm2val_rfmd[21] = {
++ 0, 0, 0, 1,
++ 2, 2, 3, 3,
++ 4, 5, 6, 8,
++ 10, 13, 16, 20,
++ 25, 32, 41, 50,
++ 63
++ };
++ const u8 *table;
++
++ switch (adev->radio_type) {
++ case RADIO_MAXIM_0D:
++ table = &dbm2val_maxim[0];
++ break;
++ case RADIO_RFMD_11:
++ case RADIO_RALINK_15:
++ table = &dbm2val_rfmd[0];
++ break;
++ default:
++ printk("%s: unknown/unsupported radio type, "
++ "cannot modify tx power level yet!\n",
++ adev->ndev->name);
++ return NOT_OK;
++ }
++ /*
++ * The hx4700 EEPROM, at least, only supports 1 power setting. The configure
++ * routine matches the PA bias with the gain, so just use its default value.
++ * The values are: 0x2b for the gain and 0x03 for the PA bias. The firmware
++ * writes the gain level to the Tx gain control DAC and the PA bias to the Maxim
++ * radio's PA bias register. The firmware limits itself to 0 - 64 when writing to the
++ * gain control DAC.
++ *
++ * Physically between the ACX and the radio, higher Tx gain control DAC values result
++ * in less power output; 0 volts to the Maxim radio results in the highest output power
++ * level, which I'm assuming matches up with 0 in the Tx Gain DAC register.
++ *
++ * Although there is only the 1 power setting, one of the radio firmware functions adjusts
++ * the transmit power level up and down. That function is called by the ACX FIQ handler
++ * under certain conditions.
++ */
++ tx_level.level = 1;
++ //return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
++
++ printk("%s: changing radio power level to %u dBm (%u)\n",
++ adev->ndev->name, level_dbm, table[level_dbm]);
++ acxmem_s_write_phy_reg(adev, 0x11, table[level_dbm]);
++
++ return 0;
++}
++
++void acxmem_e_release(struct device *dev) {
++}
++
++/***********************************************************************
++** acx_cs part
++**
++** called by pcmcia card service
++*/
++
++/*
++ The event() function is this driver's Card Services event handler.
++ It will be called by Card Services when an appropriate card status
++ event is received. The config() and release() entry points are
++ used to configure or release a socket, in response to card
++ insertion and ejection events. They are invoked from the acx_cs
++ event handler.
++*/
++
++static int acx_cs_config(struct pcmcia_device *link);
++static void acx_cs_release(struct pcmcia_device *link);
++
++/*
++ The attach() and detach() entry points are used to create and destroy
++ "instances" of the driver, where each instance represents everything
++ needed to manage one actual PCMCIA card.
++*/
++
++static void acx_cs_detach(struct pcmcia_device *p_dev);
++
++/*
++ You'll also need to prototype all the functions that will actually
++ be used to talk to your device. See 'pcmem_cs' for a good example
++ of a fully self-sufficient driver; the other drivers rely more or
++ less on other parts of the kernel.
++*/
++
++/*
++ A linked list of "instances" of the acxnet device. Each actual
++ PCMCIA card corresponds to one device instance, and is described
++ by one struct pcmcia_device structure (defined in ds.h).
++
++ You may not want to use a linked list for this -- for example, the
++ memory card driver uses an array of struct pcmcia_device pointers, where minor
++ device numbers are used to derive the corresponding array index.
++*/
++
++/*
++ A driver needs to provide a dev_node_t structure for each device
++ on a card. In some cases, there is only one device per card (for
++ example, ethernet cards, modems). In other cases, there may be
++ many actual or logical devices (SCSI adapters, memory cards with
++ multiple partitions). The dev_node_t structures need to be kept
++ in a linked list starting at the 'dev' field of a struct pcmcia_device
++ structure. We allocate them in the card's private data structure,
++ because they generally shouldn't be allocated dynamically.
++
++ In this case, we also provide a flag to indicate if a device is
++ "stopped" due to a power management event, or card ejection. The
++ device IO routines can use a flag like this to throttle IO to a
++ card that is not ready to accept it.
++*/
++
++
++/*======================================================================
++
++ acx_attach() creates an "instance" of the driver, allocating
++ local data structures for one device. The device is registered
++ with Card Services.
++
++ The dev_link structure is initialized, but we don't actually
++ configure the card at this point -- we wait until we receive a
++ card insertion event.
++
++ ======================================================================*/
++
++static int acx_cs_probe(struct pcmcia_device *link)
++{
++ local_info_t *local;
++ struct net_device *ndev;
++
++ DEBUG(0, "acx_attach()\n");
++
++ ndev = alloc_netdev(sizeof(acx_device_t), "wlan%d", dummy_netdev_init);
++ if (!ndev) {
++ printk("acx: no memory for netdevice struct\n");
++ return -ENOMEM;
++ }
++
++ /* Interrupt setup */
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_LEVEL_ID;
++ link->irq.Handler = acxmem_i_interrupt;
++ link->irq.Instance = ndev;
++
++ /*
++ General socket configuration defaults can go here. In this
++ client, we assume very little, and rely on the CIS for almost
++ everything. In most clients, many details (i.e., number, sizes,
++ and attributes of IO windows) are fixed by the nature of the
++ device, and can be hard-wired here.
++ */
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++ link->conf.Present = PRESENT_OPTION | PRESENT_COPY;
++
++ /* Allocate space for private device-specific data */
++ local = kzalloc(sizeof(local_info_t), GFP_KERNEL);
++ if (!local) {
++ printk(KERN_ERR "acx_cs: no memory for new device\n");
++ return -ENOMEM;
++ }
++ local->ndev = ndev;
++
++ link->priv = local;
++
++ return acx_cs_config(link);
++} /* acx_attach */
++
++/*======================================================================
++
++ This deletes a driver "instance". The device is de-registered
++ with Card Services. If it has been released, all local data
++ structures are freed. Otherwise, the structures will be freed
++ when the device is released.
++
++ ======================================================================*/
++
++static void acx_cs_detach(struct pcmcia_device *link)
++{
++ DEBUG(0, "acx_detach(0x%p)\n", link);
++
++
++ if ( ((local_info_t*)link->priv)->ndev ) {
++ acxmem_e_close( ((local_info_t*)link->priv)->ndev );
++ }
++
++ acx_cs_release(link);
++
++ ((local_info_t*)link->priv)->ndev = NULL;
++
++ kfree(link->priv);
++} /* acx_detach */
++
++/*======================================================================
++
++ acx_config() is scheduled to run after a CARD_INSERTION event
++ is received, to configure the PCMCIA socket, and to make the
++ device available to the system.
++
++ ======================================================================*/
++
++#define CS_CHECK(fn, ret) \
++do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
++
++static int acx_cs_config(struct pcmcia_device *link)
++{
++ tuple_t tuple;
++ cisparse_t parse;
++ local_info_t *local = link->priv;
++ int last_fn, last_ret;
++ u_char buf[64];
++ win_req_t req;
++ memreq_t map;
++// int i;
++// acx_device_t *adev;
++
++// adev = (acx_device_t *)link->priv;
++
++ DEBUG(0, "acx_cs_config(0x%p)\n", link);
++
++ /*
++ In this loop, we scan the CIS for configuration table entries,
++ each of which describes a valid card configuration, including
++ voltage, IO window, memory window, and interrupt settings.
++
++ We make no assumptions about the card to be configured: we use
++ just the information available in the CIS. In an ideal world,
++ this would work for any PCMCIA card, but it requires a complete
++ and accurate CIS. In practice, a driver usually "knows" most of
++ these things without consulting the CIS, and most client drivers
++ will only use the CIS to fill in implementation-defined details.
++ */
++ tuple.Attributes = 0;
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleDataMax = sizeof(buf);
++ tuple.TupleOffset = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++
++ /* don't trust the CIS on this; Linksys got it wrong */
++ //link->conf.Present = 0x63;
++
++ CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));
++ while (1) {
++ cistpl_cftable_entry_t dflt = { 0 };
++ cistpl_cftable_entry_t *cfg = &(parse.cftable_entry);
++ if (pcmcia_get_tuple_data(link, &tuple) != 0 ||
++ pcmcia_parse_tuple(link, &tuple, &parse) != 0)
++ goto next_entry;
++
++ if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;
++ if (cfg->index == 0) goto next_entry;
++ link->conf.ConfigIndex = cfg->index;
++
++ /* Does this card need audio output? */
++ if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
++ link->conf.Attributes |= CONF_ENABLE_SPKR;
++ link->conf.Status = CCSR_AUDIO_ENA;
++ }
++
++ /* Use power settings for Vcc and Vpp if present */
++ /* Note that the CIS values need to be rescaled */
++ if (cfg->vpp1.present & (1<<CISTPL_POWER_VNOM))
++ link->conf.Vpp =
++ cfg->vpp1.param[CISTPL_POWER_VNOM]/10000;
++ else if (dflt.vpp1.present & (1<<CISTPL_POWER_VNOM))
++ link->conf.Vpp =
++ dflt.vpp1.param[CISTPL_POWER_VNOM]/10000;
++
++ /* Do we need to allocate an interrupt? */
++ if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)
++ link->conf.Attributes |= CONF_ENABLE_IRQ;
++ if ((cfg->mem.nwin > 0) || (dflt.mem.nwin > 0)) {
++ cistpl_mem_t *mem =
++ (cfg->mem.nwin) ? &cfg->mem : &dflt.mem;
++// req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_AM|WIN_ENABLE|WIN_USE_WAIT;
++ req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE|WIN_USE_WAIT;
++ req.Base = mem->win[0].host_addr;
++ req.Size = mem->win[0].len;
++ req.Size=0x1000;
++ req.AccessSpeed = 0;
++ if (pcmcia_request_window(&link, &req, &link->win) != 0)
++ goto next_entry;
++ map.Page = 0; map.CardOffset = mem->win[0].card_addr;
++ if (pcmcia_map_mem_page(link->win, &map) != 0)
++ goto next_entry;
++ else
++ printk(KERN_INFO "MEMORY WINDOW FOUND!!!\n");
++ }
++ /* If we got this far, we're cool! */
++ break;
++
++ next_entry:
++ CS_CHECK(GetNextTuple, pcmcia_get_next_tuple(link, &tuple));
++ }
++
++ if (link->conf.Attributes & CONF_ENABLE_IRQ) {
++ printk(KERN_INFO "requesting Irq...\n");
++ CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
++ }
++
++ /*
++ This actually configures the PCMCIA socket -- setting up
++ the I/O windows and the interrupt mapping, and putting the
++ card and host interface into "Memory and IO" mode.
++ */
++ CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
++ DEBUG(0,"RequestConfiguration OK\n");
++
++
++ memwin.Base=req.Base;
++ memwin.Size=req.Size;
++
++ acx_init_netdev(local->ndev, &link->dev, memwin.Base, memwin.Size, link->irq.AssignedIRQ);
++
++#if 1
++ /*
++ At this point, the dev_node_t structure(s) need to be
++ initialized and arranged in a linked list at link->dev_node.
++ */
++ strcpy(local->node.dev_name, local->ndev->name );
++ local->node.major = local->node.minor = 0;
++ link->dev_node = &local->node;
++
++ /* Finally, report what we've done */
++ printk(KERN_INFO "%s: index 0x%02x: ",
++ local->ndev->name, link->conf.ConfigIndex);
++#endif
++ if (link->conf.Attributes & CONF_ENABLE_IRQ)
++ printk("irq %d", link->irq.AssignedIRQ);
++ if (link->io.NumPorts1)
++ printk(", io 0x%04x-0x%04x", link->io.BasePort1,
++ link->io.BasePort1+link->io.NumPorts1-1);
++ if (link->io.NumPorts2)
++ printk(" & 0x%04x-0x%04x", link->io.BasePort2,
++ link->io.BasePort2+link->io.NumPorts2-1);
++ if (link->win)
++ printk(", mem 0x%06lx-0x%06lx\n", req.Base,
++ req.Base+req.Size-1);
++ return 0;
++
++ cs_failed:
++ cs_error(link, last_fn, last_ret);
++ acx_cs_release(link);
++ return -ENODEV;
++} /* acx_config */
++
++/*======================================================================
++
++ After a card is removed, acx_release() will unregister the
++ device, and release the PCMCIA configuration. If the device is
++ still open, this will be postponed until it is closed.
++
++ ======================================================================*/
++
++static void acx_cs_release(struct pcmcia_device *link)
++{
++ DEBUG(0, "acx_release(0x%p)\n", link);
++ acxmem_e_remove(link);
++ pcmcia_disable_device(link);
++}
++
++static int acx_cs_suspend(struct pcmcia_device *link)
++{
++ local_info_t *local = link->priv;
++
++ pm_message_t state;
++ acxmem_e_suspend ( local->ndev, state);
++ /* Already done in suspend
++ * netif_device_detach(local->ndev); */
++
++ return 0;
++}
++
++static int acx_cs_resume(struct pcmcia_device *link)
++{
++ local_info_t *local = link->priv;
++
++ FN_ENTER;
++ resume_ndev = local->ndev;
++
++ schedule_work( &fw_resume_work );
++
++ /* Already done in suspend
++ if (link->open) {
++ // do we need reset for ACX, if so what function nane is ?
++ //reset_acx_card(local->eth_dev);
++ netif_device_attach(local->ndev);
++ } */
++
++ FN_EXIT0;
++ return 0;
++}
++
++static struct pcmcia_device_id acx_ids[] = {
++ PCMCIA_DEVICE_MANF_CARD(0x0097, 0x8402),
++ PCMCIA_DEVICE_MANF_CARD(0x0250, 0xb001),
++ PCMCIA_DEVICE_NULL,
++};
++MODULE_DEVICE_TABLE(pcmcia, acx_ids);
++
++static struct pcmcia_driver acx_driver = {
++ .owner = THIS_MODULE,
++ .drv = {
++ .name = "acx_cs",
++ },
++ .probe = acx_cs_probe,
++ .remove = acx_cs_detach,
++ .id_table = acx_ids,
++ .suspend = acx_cs_suspend,
++ .resume = acx_cs_resume,
++};
++
++int acx_cs_init(void)
++{
++ /* return success if at least one succeeded */
++ DEBUG(0, "acxcs_init()\n");
++ return pcmcia_register_driver(&acx_driver);
++}
++
++void acx_cs_cleanup(void)
++{
++ pcmcia_unregister_driver(&acx_driver);
++}
++
++/*
++ This program is free software; you can redistribute it and/or
++ modify it under the terms of the GNU General Public License
++ as published by the Free Software Foundation; either version 2
++ of the License, or (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ In addition:
++
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions
++ are met:
++
++ 1. Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++ 2. Redistributions in binary form must reproduce the above copyright
++ notice, this list of conditions and the following disclaimer in the
++ documentation and/or other materials provided with the distribution.
++ 3. The name of the author may not be used to endorse or promote
++ products derived from this software without specific prior written
++ permission.
++
++ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
++ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
++ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
++ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
++ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
++ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
++ POSSIBILITY OF SUCH DAMAGE.
++*/
++
++MODULE_DESCRIPTION( "ACX Cardbus Driver" );
++MODULE_LICENSE( "GPL" );
++
+Index: linux-2.6.23/drivers/net/wireless/acx/htcsable_acx.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/htcsable_acx.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,118 @@
++/*
++ * WLAN (TI TNETW1100B) support in the HTC Sable
++ *
++ * Copyright (c) 2006 SDG Systems, LLC
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * 28-March-2006 Todd Blumer <todd@sdgsystems.com>
++ */
++
++
++#include <linux/kernel.h>
++#include <linux/platform_device.h>
++#include <linux/delay.h>
++
++#include <asm/hardware.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <linux/mfd/asic3_base.h>
++#include <asm/arch/htcsable-gpio.h>
++#include <asm/arch/htcsable-asic.h>
++#include <asm/io.h>
++
++#include "acx_hw.h"
++
++#define WLAN_BASE PXA_CS2_PHYS
++
++/*
++off: b15 c8 d3
++on: d3 c8 b5 b5-
++*/
++
++#define GPIO_NR_HTCSABLE_ACX111 111
++
++static int
++htcsable_wlan_stop( void );
++
++static int
++htcsable_wlan_start( void )
++{
++ printk( "htcsable_wlan_start\n" );
++
++ /*asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_RESET, 0);*/
++ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_PWR_3, 1<<GPIOC_ACX_PWR_3); /* related to acx */
++ SET_HTCSABLE_GPIO(ACX111, 1);
++ asic3_set_gpio_out_b(&htcsable_asic3.dev, 1<<GPIOB_ACX_PWR_1, 1<<GPIOB_ACX_PWR_1);
++ asic3_set_gpio_out_d(&htcsable_asic3.dev, 1<<GPIOD_ACX_PWR_2, 1<<GPIOD_ACX_PWR_2);
++ mdelay(260);
++ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_RESET, 1<<GPIOC_ACX_RESET);
++
++ return 0;
++}
++
++static int
++htcsable_wlan_stop( void )
++{
++ printk( "htcsable_wlan_stop\n" );
++ asic3_set_gpio_out_b(&htcsable_asic3.dev, 1<<GPIOB_ACX_PWR_1, 0);
++ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_RESET, 0);
++ asic3_set_gpio_out_d(&htcsable_asic3.dev, 1<<GPIOD_ACX_PWR_2, 0);
++ SET_HTCSABLE_GPIO(ACX111, 0); /* not necessary to power down this one? */
++ asic3_set_gpio_out_c(&htcsable_asic3.dev, 1<<GPIOC_ACX_PWR_3, 0); /* not necessary to power down this one? */
++
++ return 0;
++}
++
++static struct resource acx_resources[] = {
++ [0] = {
++ .start = WLAN_BASE,
++ .end = WLAN_BASE + 0x20,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++// .start = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
++// .end = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct acx_hardware_data acx_data = {
++ .start_hw = htcsable_wlan_start,
++ .stop_hw = htcsable_wlan_stop,
++};
++
++static struct platform_device acx_device = {
++ .name = "acx-mem",
++ .dev = {
++ .platform_data = &acx_data,
++ },
++ .num_resources = ARRAY_SIZE( acx_resources ),
++ .resource = acx_resources,
++};
++
++static int __init
++htcsable_wlan_init( void )
++{
++ printk( "htcsable_wlan_init: acx-mem platform_device_register\n" );
++ acx_device.resource[1].start = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOB_IRQ_BASE+GPIOB_ACX_IRQ_N;
++ acx_device.resource[1].end = asic3_irq_base(&htcsable_asic3.dev) + ASIC3_GPIOB_IRQ_BASE+GPIOB_ACX_IRQ_N;
++ return platform_device_register( &acx_device );
++}
++
++
++static void __exit
++htcsable_wlan_exit( void )
++{
++ platform_device_unregister( &acx_device );
++}
++
++module_init( htcsable_wlan_init );
++module_exit( htcsable_wlan_exit );
++
++MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
++MODULE_DESCRIPTION( "WLAN driver for HTC Sable" );
++MODULE_LICENSE( "GPL" );
++
+Index: linux-2.6.23/drivers/net/wireless/acx/htcuniversal_acx.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/htcuniversal_acx.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,108 @@
++/*
++ * WLAN (TI TNETW1100B) support in the HTC Universal
++ *
++ * Copyright (c) 2006 SDG Systems, LLC
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * 28-March-2006 Todd Blumer <todd@sdgsystems.com>
++ */
++
++
++#include <linux/kernel.h>
++#include <linux/platform_device.h>
++#include <linux/delay.h>
++
++#include <asm/hardware.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <linux/soc/asic3_base.h>
++#include <asm/arch/htcuniversal-gpio.h>
++#include <asm/arch/htcuniversal-asic.h>
++#include <asm/io.h>
++
++#include "acx_hw.h"
++
++#define WLAN_BASE PXA_CS2_PHYS
++
++
++static int
++htcuniversal_wlan_start( void )
++{
++ htcuniversal_egpio_enable(1<<EGPIO6_WIFI_ON);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_PWR1_ON, 1<<GPIOC_WIFI_PWR1_ON);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR3_ON, 1<<GPIOD_WIFI_PWR3_ON);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR2_ON, 1<<GPIOD_WIFI_PWR2_ON);
++ mdelay(100);
++
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_RESET, 0);
++ mdelay(100);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_RESET, 1<<GPIOC_WIFI_RESET);
++ mdelay(100);
++ return 0;
++}
++
++static int
++htcuniversal_wlan_stop( void )
++{
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_RESET, 0);
++
++ htcuniversal_egpio_disable(1<<EGPIO6_WIFI_ON);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_WIFI_PWR1_ON, 0);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR2_ON, 0);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_WIFI_PWR3_ON, 0);
++ return 0;
++}
++
++static struct resource acx_resources[] = {
++ [0] = {
++ .start = WLAN_BASE,
++ .end = WLAN_BASE + 0x20,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++// .start = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
++// .end = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct acx_hardware_data acx_data = {
++ .start_hw = htcuniversal_wlan_start,
++ .stop_hw = htcuniversal_wlan_stop,
++};
++
++static struct platform_device acx_device = {
++ .name = "acx-mem",
++ .dev = {
++ .platform_data = &acx_data,
++ },
++ .num_resources = ARRAY_SIZE( acx_resources ),
++ .resource = acx_resources,
++};
++
++static int __init
++htcuniversal_wlan_init( void )
++{
++ printk( "htcuniversal_wlan_init: acx-mem platform_device_register\n" );
++ acx_device.resource[1].start = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N;
++ acx_device.resource[1].end = asic3_irq_base(&htcuniversal_asic3.dev) + ASIC3_GPIOC_IRQ_BASE+GPIOC_WIFI_IRQ_N;
++ return platform_device_register( &acx_device );
++}
++
++
++static void __exit
++htcuniversal_wlan_exit( void )
++{
++ platform_device_unregister( &acx_device );
++}
++
++module_init( htcuniversal_wlan_init );
++module_exit( htcuniversal_wlan_exit );
++
++MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
++MODULE_DESCRIPTION( "WLAN driver for HTC Universal" );
++MODULE_LICENSE( "GPL" );
++
+Index: linux-2.6.23/drivers/net/wireless/acx/hx4700_acx.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/hx4700_acx.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,108 @@
++/*
++ * WLAN (TI TNETW1100B) support in the hx470x.
++ *
++ * Copyright (c) 2006 SDG Systems, LLC
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * 28-March-2006 Todd Blumer <todd@sdgsystems.com>
++ */
++
++
++#include <linux/kernel.h>
++#include <linux/platform_device.h>
++#include <linux/delay.h>
++#include <linux/leds.h>
++
++#include <asm/hardware.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/hx4700-gpio.h>
++#include <asm/arch/hx4700-core.h>
++#include <asm/io.h>
++
++#include "acx_hw.h"
++
++#define WLAN_OFFSET 0x1000000
++#define WLAN_BASE (PXA_CS5_PHYS+WLAN_OFFSET)
++
++
++static int
++hx4700_wlan_start( void )
++{
++ SET_HX4700_GPIO( WLAN_RESET_N, 0 );
++ mdelay(5);
++ hx4700_egpio_enable( EGPIO0_VCC_3V3_EN );
++ mdelay(100);
++ hx4700_egpio_enable( EGPIO7_VCC_3V3_WL_EN );
++ mdelay(150);
++ hx4700_egpio_enable( EGPIO1_WL_VREG_EN | EGPIO2_VCC_2V1_WL_EN |
++ EGPIO6_WL1V8_EN );
++ mdelay(10);
++ SET_HX4700_GPIO( WLAN_RESET_N, 1 );
++ mdelay(50);
++ led_trigger_event_shared(hx4700_radio_trig, LED_FULL);
++ return 0;
++}
++
++static int
++hx4700_wlan_stop( void )
++{
++ hx4700_egpio_disable( EGPIO0_VCC_3V3_EN | EGPIO1_WL_VREG_EN |
++ EGPIO7_VCC_3V3_WL_EN | EGPIO2_VCC_2V1_WL_EN |
++ EGPIO6_WL1V8_EN );
++ SET_HX4700_GPIO( WLAN_RESET_N, 0 );
++ led_trigger_event_shared(hx4700_radio_trig, LED_OFF);
++ return 0;
++}
++
++static struct resource acx_resources[] = {
++ [0] = {
++ .start = WLAN_BASE,
++ .end = WLAN_BASE + 0x20,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = HX4700_IRQ(WLAN_IRQ_N),
++ .end = HX4700_IRQ(WLAN_IRQ_N),
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct acx_hardware_data acx_data = {
++ .start_hw = hx4700_wlan_start,
++ .stop_hw = hx4700_wlan_stop,
++};
++
++static struct platform_device acx_device = {
++ .name = "acx-mem",
++ .dev = {
++ .platform_data = &acx_data,
++ },
++ .num_resources = ARRAY_SIZE( acx_resources ),
++ .resource = acx_resources,
++};
++
++static int __init
++hx4700_wlan_init( void )
++{
++ printk( "hx4700_wlan_init: acx-mem platform_device_register\n" );
++ return platform_device_register( &acx_device );
++}
++
++
++static void __exit
++hx4700_wlan_exit( void )
++{
++ platform_device_unregister( &acx_device );
++}
++
++module_init( hx4700_wlan_init );
++module_exit( hx4700_wlan_exit );
++
++MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
++MODULE_DESCRIPTION( "WLAN driver for iPAQ hx4700" );
++MODULE_LICENSE( "GPL" );
++
+Index: linux-2.6.23/drivers/net/wireless/acx/ioctl.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/ioctl.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,2748 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++*/
++
++#include <linux/version.h>
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
++#include <linux/config.h>
++#endif
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <asm/io.h>
++/* #include <asm/uaccess.h> */ /* required for 2.4.x kernels; verify_write() */
++#include <linux/if_arp.h>
++#include <linux/wireless.h>
++#include <net/iw_handler.h>
++
++#include "acx.h"
++
++
++/***********************************************************************
++*/
++
++/* channel frequencies
++ * TODO: Currently, every other 802.11 driver keeps its own copy of this. In
++ * the long run this should be integrated into ieee802_11.h or wireless.h or
++ * whatever IEEE802.11x framework evolves */
++static const u16 acx_channel_freq[] = {
++ 2412, 2417, 2422, 2427, 2432, 2437, 2442,
++ 2447, 2452, 2457, 2462, 2467, 2472, 2484,
++};
++
++
++/***********************************************************************
++** acx_ioctl_commit
++*/
++static int
++acx_ioctl_commit(struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask)
++ acx_s_update_card_settings(adev);
++ acx_sem_unlock(adev);
++
++ FN_EXIT0;
++ return OK;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_ioctl_get_name(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ static const char * const names[] = { "IEEE 802.11b+/g+", "IEEE 802.11b+" };
++
++ strcpy(wrqu->name, names[IS_ACX111(adev) ? 0 : 1]);
++
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_freq
++*/
++static int
++acx_ioctl_set_freq(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int channel = -1;
++ unsigned int mult = 1;
++ int result;
++
++ FN_ENTER;
++
++ if (wrqu->freq.e == 0 && wrqu->freq.m <= 1000) {
++ /* Setting by channel number */
++ channel = wrqu->freq.m;
++ } else {
++ /* If setting by frequency, convert to a channel */
++ int i;
++
++ for (i = 0; i < (6 - wrqu->freq.e); i++)
++ mult *= 10;
++
++ for (i = 1; i <= 14; i++)
++ if (wrqu->freq.m == acx_channel_freq[i - 1] * mult)
++ channel = i;
++ }
++
++ if (channel > 14) {
++ result = -EINVAL;
++ goto end;
++ }
++
++ acx_sem_lock(adev);
++
++ adev->channel = channel;
++ /* hmm, the following code part is strange, but this is how
++ * it was being done before... */
++ log(L_IOCTL, "Changing to channel %d\n", channel);
++ SET_BIT(adev->set_mask, GETSET_CHANNEL);
++
++ result = -EINPROGRESS; /* need to call commit handler */
++
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++*/
++static inline int
++acx_ioctl_get_freq(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ wrqu->freq.e = 0;
++ wrqu->freq.m = adev->channel;
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_mode
++*/
++static int
++acx_ioctl_set_mode(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ switch (wrqu->mode) {
++ case IW_MODE_AUTO:
++ adev->mode = ACX_MODE_OFF;
++ break;
++ case IW_MODE_MONITOR:
++ adev->mode = ACX_MODE_MONITOR;
++ break;
++ case IW_MODE_ADHOC:
++ adev->mode = ACX_MODE_0_ADHOC;
++ break;
++ case IW_MODE_INFRA:
++ adev->mode = ACX_MODE_2_STA;
++ break;
++ case IW_MODE_MASTER:
++ printk("acx: master mode (HostAP) is very, very "
++ "experimental! It might work partially, but "
++ "better get prepared for nasty surprises "
++ "at any time\n");
++ adev->mode = ACX_MODE_3_AP;
++ break;
++ case IW_MODE_REPEAT:
++ case IW_MODE_SECOND:
++ default:
++ result = -EOPNOTSUPP;
++ goto end_unlock;
++ }
++
++ log(L_ASSOC, "new adev->mode=%d\n", adev->mode);
++ SET_BIT(adev->set_mask, GETSET_MODE);
++ result = -EINPROGRESS;
++
++end_unlock:
++ acx_sem_unlock(adev);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_ioctl_get_mode(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result = 0;
++
++ switch (adev->mode) {
++ case ACX_MODE_OFF:
++ wrqu->mode = IW_MODE_AUTO; break;
++ case ACX_MODE_MONITOR:
++ wrqu->mode = IW_MODE_MONITOR; break;
++ case ACX_MODE_0_ADHOC:
++ wrqu->mode = IW_MODE_ADHOC; break;
++ case ACX_MODE_2_STA:
++ wrqu->mode = IW_MODE_INFRA; break;
++ case ACX_MODE_3_AP:
++ wrqu->mode = IW_MODE_MASTER; break;
++ default:
++ result = -EOPNOTSUPP;
++ }
++ return result;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_ioctl_set_sens(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->sens;
++ acx_device_t *adev = ndev2adev(ndev);
++
++ acx_sem_lock(adev);
++
++ adev->sensitivity = (1 == vwrq->disabled) ? 0 : vwrq->value;
++ SET_BIT(adev->set_mask, GETSET_SENSITIVITY);
++
++ acx_sem_unlock(adev);
++
++ return -EINPROGRESS;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_ioctl_get_sens(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->sens;
++ acx_device_t *adev = ndev2adev(ndev);
++
++ if (IS_USB(adev))
++ /* setting the PHY reg via fw cmd doesn't work yet */
++ return -EOPNOTSUPP;
++
++ /* acx_sem_lock(adev); */
++
++ vwrq->value = adev->sensitivity;
++ vwrq->disabled = (vwrq->value == 0);
++ vwrq->fixed = 1;
++
++ /* acx_sem_unlock(adev); */
++
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_ap
++**
++** Sets the MAC address of the AP to associate with
++*/
++static int
++acx_ioctl_set_ap(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct sockaddr *awrq = &wrqu->ap_addr;
++ acx_device_t *adev = ndev2adev(ndev);
++ int result = 0;
++ const u8 *ap;
++
++ FN_ENTER;
++ if (NULL == awrq) {
++ result = -EFAULT;
++ goto end;
++ }
++ if (ARPHRD_ETHER != awrq->sa_family) {
++ result = -EINVAL;
++ goto end;
++ }
++
++ ap = awrq->sa_data;
++ acxlog_mac(L_IOCTL, "set AP=", ap, "\n");
++
++ MAC_COPY(adev->ap, ap);
++
++ /* We want to start rescan in managed or ad-hoc mode,
++ ** otherwise just set adev->ap.
++ ** "iwconfig <if> ap <mac> mode managed": we must be able
++ ** to set ap _first_ and _then_ set mode */
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_2_STA:
++ /* FIXME: if there is a convention on what zero AP means,
++ ** please add a comment about that. I don't know of any --vda */
++ if (mac_is_zero(ap)) {
++ /* "off" == 00:00:00:00:00:00 */
++ MAC_BCAST(adev->ap);
++ log(L_IOCTL, "Not reassociating\n");
++ } else {
++ log(L_IOCTL, "Forcing reassociation\n");
++ SET_BIT(adev->set_mask, GETSET_RESCAN);
++ }
++ break;
++ }
++ result = -EINPROGRESS;
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_ioctl_get_ap(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct sockaddr *awrq = &wrqu->ap_addr;
++ acx_device_t *adev = ndev2adev(ndev);
++
++ if (ACX_STATUS_4_ASSOCIATED == adev->status) {
++ /* as seen in Aironet driver, airo.c */
++ MAC_COPY(awrq->sa_data, adev->bssid);
++ } else {
++ MAC_ZERO(awrq->sa_data);
++ }
++ awrq->sa_family = ARPHRD_ETHER;
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_ioctl_get_aplist
++**
++** Deprecated in favor of iwscan.
++** We simply return the list of currently available stations in range,
++** don't do a new scan.
++*/
++static int
++acx_ioctl_get_aplist(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_point *dwrq = &wrqu->data;
++ acx_device_t *adev = ndev2adev(ndev);
++ struct sockaddr *address = (struct sockaddr *) extra;
++ struct iw_quality qual[IW_MAX_AP];
++ int i, cur;
++ int result = OK;
++
++ FN_ENTER;
++
++ /* we have AP list only in STA mode */
++ if (ACX_MODE_2_STA != adev->mode) {
++ result = -EOPNOTSUPP;
++ goto end;
++ }
++
++ cur = 0;
++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
++ struct client *bss = &adev->sta_list[i];
++ if (!bss->used) continue;
++ MAC_COPY(address[cur].sa_data, bss->bssid);
++ address[cur].sa_family = ARPHRD_ETHER;
++ qual[cur].level = bss->sir;
++ qual[cur].noise = bss->snr;
++#ifndef OLD_QUALITY
++ qual[cur].qual = acx_signal_determine_quality(qual[cur].level,
++ qual[cur].noise);
++#else
++ qual[cur].qual = (qual[cur].noise <= 100) ?
++ 100 - qual[cur].noise : 0;
++#endif
++ /* no scan: level/noise/qual not updated: */
++ qual[cur].updated = 0;
++ cur++;
++ }
++ if (cur) {
++ dwrq->flags = 1;
++ memcpy(extra + sizeof(struct sockaddr)*cur, &qual,
++ sizeof(struct iw_quality)*cur);
++ }
++ dwrq->length = cur;
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_ioctl_set_scan(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ /* don't start scan if device is not up yet */
++ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
++ result = -EAGAIN;
++ goto end_unlock;
++ }
++
++ /* This is NOT a rescan for new AP!
++ ** Do not use SET_BIT(GETSET_RESCAN); */
++ acx_s_cmd_start_scan(adev);
++ result = OK;
++
++end_unlock:
++ acx_sem_unlock(adev);
++/* end: */
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_s_scan_add_station
++*/
++/* helper. not sure whether it's really a _s_leeping fn */
++static char*
++acx_s_scan_add_station(
++ acx_device_t *adev,
++ char *ptr,
++ char *end_buf,
++ struct client *bss)
++{
++ struct iw_event iwe;
++ char *ptr_rate;
++
++ FN_ENTER;
++
++ /* MAC address has to be added first */
++ iwe.cmd = SIOCGIWAP;
++ iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
++ MAC_COPY(iwe.u.ap_addr.sa_data, bss->bssid);
++ acxlog_mac(L_IOCTL, "scan, station address: ", bss->bssid, "\n");
++ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_ADDR_LEN);
++
++ /* Add ESSID */
++ iwe.cmd = SIOCGIWESSID;
++ iwe.u.data.length = bss->essid_len;
++ iwe.u.data.flags = 1;
++ log(L_IOCTL, "scan, essid: %s\n", bss->essid);
++ ptr = iwe_stream_add_point(ptr, end_buf, &iwe, bss->essid);
++
++ /* Add mode */
++ iwe.cmd = SIOCGIWMODE;
++ if (bss->cap_info & (WF_MGMT_CAP_ESS | WF_MGMT_CAP_IBSS)) {
++ if (bss->cap_info & WF_MGMT_CAP_ESS)
++ iwe.u.mode = IW_MODE_MASTER;
++ else
++ iwe.u.mode = IW_MODE_ADHOC;
++ log(L_IOCTL, "scan, mode: %d\n", iwe.u.mode);
++ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_UINT_LEN);
++ }
++
++ /* Add frequency */
++ iwe.cmd = SIOCGIWFREQ;
++ iwe.u.freq.m = acx_channel_freq[bss->channel - 1] * 100000;
++ iwe.u.freq.e = 1;
++ log(L_IOCTL, "scan, frequency: %d\n", iwe.u.freq.m);
++ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_FREQ_LEN);
++
++ /* Add link quality */
++ iwe.cmd = IWEVQUAL;
++ /* FIXME: these values should be expressed in dBm, but we don't know
++ * how to calibrate it yet */
++ iwe.u.qual.level = bss->sir;
++ iwe.u.qual.noise = bss->snr;
++#ifndef OLD_QUALITY
++ iwe.u.qual.qual = acx_signal_determine_quality(iwe.u.qual.level,
++ iwe.u.qual.noise);
++#else
++ iwe.u.qual.qual = (iwe.u.qual.noise <= 100) ?
++ 100 - iwe.u.qual.noise : 0;
++#endif
++ iwe.u.qual.updated = 7;
++ log(L_IOCTL, "scan, link quality: %d/%d/%d\n",
++ iwe.u.qual.level, iwe.u.qual.noise, iwe.u.qual.qual);
++ ptr = iwe_stream_add_event(ptr, end_buf, &iwe, IW_EV_QUAL_LEN);
++
++ /* Add encryption */
++ iwe.cmd = SIOCGIWENCODE;
++ if (bss->cap_info & WF_MGMT_CAP_PRIVACY)
++ iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;
++ else
++ iwe.u.data.flags = IW_ENCODE_DISABLED;
++ iwe.u.data.length = 0;
++ log(L_IOCTL, "scan, encryption flags: %X\n", iwe.u.data.flags);
++ ptr = iwe_stream_add_point(ptr, end_buf, &iwe, bss->essid);
++
++ /* add rates */
++ iwe.cmd = SIOCGIWRATE;
++ iwe.u.bitrate.fixed = iwe.u.bitrate.disabled = 0;
++ ptr_rate = ptr + IW_EV_LCP_LEN;
++
++ {
++ u16 rate = bss->rate_cap;
++ const u8* p = acx_bitpos2ratebyte;
++ while (rate) {
++ if (rate & 1) {
++ iwe.u.bitrate.value = *p * 500000; /* units of 500kb/s */
++ log(L_IOCTL, "scan, rate: %d\n", iwe.u.bitrate.value);
++ ptr_rate = iwe_stream_add_value(ptr, ptr_rate, end_buf,
++ &iwe, IW_EV_PARAM_LEN);
++ }
++ rate >>= 1;
++ p++;
++ }}
++
++ if ((ptr_rate - ptr) > (ptrdiff_t)IW_EV_LCP_LEN)
++ ptr = ptr_rate;
++
++ /* drop remaining station data items for now */
++
++ FN_EXIT0;
++ return ptr;
++}
++
++
++/***********************************************************************
++ * acx_ioctl_get_scan
++ */
++static int
++acx_ioctl_get_scan(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_point *dwrq = &wrqu->data;
++ acx_device_t *adev = ndev2adev(ndev);
++ char *ptr = extra;
++ int i;
++ int result = OK;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ /* no scan available if device is not up yet */
++ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
++ log(L_IOCTL, "iface not up yet\n");
++ result = -EAGAIN;
++ goto end_unlock;
++ }
++
++#ifdef ENODATA_TO_BE_USED_AFTER_SCAN_ERROR_ONLY
++ if (adev->bss_table_count == 0) {
++ /* no stations found */
++ result = -ENODATA;
++ goto end_unlock;
++ }
++#endif
++
++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
++ struct client *bss = &adev->sta_list[i];
++ if (!bss->used) continue;
++ ptr = acx_s_scan_add_station(adev, ptr,
++ extra + IW_SCAN_MAX_DATA, bss);
++ }
++ dwrq->length = ptr - extra;
++ dwrq->flags = 0;
++
++end_unlock:
++ acx_sem_unlock(adev);
++/* end: */
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_essid
++*/
++static int
++acx_ioctl_set_essid(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_point *dwrq = &wrqu->essid;
++ acx_device_t *adev = ndev2adev(ndev);
++ int len = dwrq->length;
++ int result;
++
++ FN_ENTER;
++
++ if (len < 0) {
++ result = -EINVAL;
++ goto end;
++ }
++
++ log(L_IOCTL, "set ESSID '%*s', length %d, flags 0x%04X\n",
++ len, extra, len, dwrq->flags);
++
++#if WIRELESS_EXT >= 21
++ /* WE 21 gives real ESSID strlen, not +1 (trailing zero):
++ * see LKML "[patch] drivers/net/wireless: correct reported ssid lengths" */
++ len += 1;
++#endif
++
++ acx_sem_lock(adev);
++
++ /* ESSID disabled? */
++ if (0 == dwrq->flags) {
++ adev->essid_active = 0;
++
++ } else {
++ if (len > IW_ESSID_MAX_SIZE) {
++ result = -E2BIG;
++ goto end_unlock;
++ }
++
++ if (len >= sizeof(adev->essid))
++ len = sizeof(adev->essid) - 1;
++ memcpy(adev->essid, extra, len);
++ adev->essid[len] = '\0';
++ /* Paranoia: just in case there is a '\0'... */
++ adev->essid_len = strlen(adev->essid);
++ adev->essid_active = 1;
++ }
++
++ SET_BIT(adev->set_mask, GETSET_RESCAN);
++
++ result = -EINPROGRESS;
++
++end_unlock:
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_ioctl_get_essid(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_point *dwrq = &wrqu->essid;
++ acx_device_t *adev = ndev2adev(ndev);
++
++ dwrq->flags = adev->essid_active;
++ if (adev->essid_active) {
++ memcpy(extra, adev->essid, adev->essid_len);
++ extra[adev->essid_len] = '\0';
++ dwrq->length = adev->essid_len + 1;
++ dwrq->flags = 1;
++ }
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_l_update_client_rates
++*/
++static void
++acx_l_update_client_rates(acx_device_t *adev, u16 rate)
++{
++ int i;
++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
++ client_t *clt = &adev->sta_list[i];
++ if (!clt->used) continue;
++ clt->rate_cfg = (clt->rate_cap & rate);
++ if (!clt->rate_cfg) {
++ /* no compatible rates left: kick client */
++ acxlog_mac(L_ASSOC, "client ",clt->address," kicked: "
++ "rates are not compatible anymore\n");
++ acx_l_sta_list_del(adev, clt);
++ continue;
++ }
++ clt->rate_cur &= clt->rate_cfg;
++ if (!clt->rate_cur) {
++ /* current rate become invalid, choose a valid one */
++ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg);
++ }
++ if (IS_ACX100(adev))
++ clt->rate_100 = acx_bitpos2rate100[highest_bit(clt->rate_cur)];
++ clt->fallback_count = clt->stepup_count = 0;
++ clt->ignore_count = 16;
++ }
++ switch (adev->mode) {
++ case ACX_MODE_2_STA:
++ if (adev->ap_client && !adev->ap_client->used) {
++ /* Owwww... we kicked our AP!! :) */
++ SET_BIT(adev->set_mask, GETSET_RESCAN);
++ }
++ }
++}
++
++
++/***********************************************************************
++*/
++/* maps bits from acx111 rate to rate in Mbits */
++static const unsigned int
++acx111_rate_tbl[] = {
++ 1000000, /* 0 */
++ 2000000, /* 1 */
++ 5500000, /* 2 */
++ 6000000, /* 3 */
++ 9000000, /* 4 */
++ 11000000, /* 5 */
++ 12000000, /* 6 */
++ 18000000, /* 7 */
++ 22000000, /* 8 */
++ 24000000, /* 9 */
++ 36000000, /* 10 */
++ 48000000, /* 11 */
++ 54000000, /* 12 */
++ 500000, /* 13, should not happen */
++ 500000, /* 14, should not happen */
++ 500000, /* 15, should not happen */
++};
++
++/***********************************************************************
++ * acx_ioctl_set_rate
++ */
++static int
++acx_ioctl_set_rate(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->param;
++ acx_device_t *adev = ndev2adev(ndev);
++ u16 txrate_cfg = 1;
++ unsigned long flags;
++ int autorate;
++ int result = -EINVAL;
++
++ FN_ENTER;
++ log(L_IOCTL, "rate %d fixed 0x%X disabled 0x%X flags 0x%X\n",
++ vwrq->value, vwrq->fixed, vwrq->disabled, vwrq->flags);
++
++ if ((0 == vwrq->fixed) || (1 == vwrq->fixed)) {
++ int i = VEC_SIZE(acx111_rate_tbl)-1;
++ if (vwrq->value == -1)
++ /* "iwconfig rate auto" --> choose highest */
++ vwrq->value = IS_ACX100(adev) ? 22000000 : 54000000;
++ while (i >= 0) {
++ if (vwrq->value == acx111_rate_tbl[i]) {
++ txrate_cfg <<= i;
++ i = 0;
++ break;
++ }
++ i--;
++ }
++ if (i == -1) { /* no matching rate */
++ result = -EINVAL;
++ goto end;
++ }
++ } else { /* rate N, N<1000 (driver specific): we don't use this */
++ result = -EOPNOTSUPP;
++ goto end;
++ }
++ /* now: only one bit is set in txrate_cfg, corresponding to
++ ** indicated rate */
++
++ autorate = (vwrq->fixed == 0) && (RATE111_1 != txrate_cfg);
++ if (autorate) {
++ /* convert 00100000 -> 00111111 */
++ txrate_cfg = (txrate_cfg<<1)-1;
++ }
++
++ if (IS_ACX100(adev)) {
++ txrate_cfg &= RATE111_ACX100_COMPAT;
++ if (!txrate_cfg) {
++ result = -ENOTSUPP; /* rate is not supported by acx100 */
++ goto end;
++ }
++ }
++
++ acx_sem_lock(adev);
++ acx_lock(adev, flags);
++
++ adev->rate_auto = autorate;
++ adev->rate_oper = txrate_cfg;
++ adev->rate_basic = txrate_cfg;
++ /* only do that in auto mode, non-auto will be able to use
++ * one specific Tx rate only anyway */
++ if (autorate) {
++ /* only use 802.11b base rates, for standard 802.11b H/W
++ * compatibility */
++ adev->rate_basic &= RATE111_80211B_COMPAT;
++ }
++ adev->rate_bcast = 1 << lowest_bit(txrate_cfg);
++ if (IS_ACX100(adev))
++ adev->rate_bcast100 = acx_rate111to100(adev->rate_bcast);
++ acx_l_update_ratevector(adev);
++ acx_l_update_client_rates(adev, txrate_cfg);
++
++ /* Do/don't do tx rate fallback; beacon contents and rate */
++ SET_BIT(adev->set_mask, SET_RATE_FALLBACK|SET_TEMPLATES);
++ result = -EINPROGRESS;
++
++ acx_unlock(adev, flags);
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_get_rate
++*/
++static int
++acx_ioctl_get_rate(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->param;
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ u16 rate;
++
++ acx_lock(adev, flags);
++ rate = adev->rate_oper;
++ if (adev->ap_client)
++ rate = adev->ap_client->rate_cur;
++ vwrq->value = acx111_rate_tbl[highest_bit(rate)];
++ vwrq->fixed = !adev->rate_auto;
++ vwrq->disabled = 0;
++ acx_unlock(adev, flags);
++
++ return OK;
++}
++
++static int
++acx_ioctl_set_rts(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->rts;
++ acx_device_t *adev = ndev2adev(ndev);
++ int val = vwrq->value;
++
++ if (vwrq->disabled)
++ val = 2312;
++ if ((val < 0) || (val > 2312))
++ return -EINVAL;
++
++ adev->rts_threshold = val;
++ return OK;
++}
++
++static inline int
++acx_ioctl_get_rts(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->rts;
++ acx_device_t *adev = ndev2adev(ndev);
++
++ vwrq->value = adev->rts_threshold;
++ vwrq->disabled = (vwrq->value >= 2312);
++ vwrq->fixed = 1;
++ return OK;
++}
++
++
++#if ACX_FRAGMENTATION
++static int
++acx_ioctl_set_frag(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ struct iw_param *vwrq,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int val = vwrq->value;
++
++ if (vwrq->disabled)
++ val = 32767;
++ else
++ if ((val < 256) || (val > 2347))
++ return -EINVAL;
++
++ adev->frag_threshold = val;
++ return OK;
++}
++
++static inline int
++acx_ioctl_get_frag(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->frag;
++ acx_device_t *adev = ndev2adev(ndev);
++
++ vwrq->value = adev->frag_threshold;
++ vwrq->disabled = (vwrq->value >= 2347);
++ vwrq->fixed = 1;
++ return OK;
++}
++#endif
++
++
++/***********************************************************************
++** acx_ioctl_set_encode
++*/
++static int
++acx_ioctl_set_encode(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_point *dwrq = &wrqu->encoding;
++ acx_device_t *adev = ndev2adev(ndev);
++ int index;
++ int result;
++
++ FN_ENTER;
++
++ log(L_IOCTL, "set encoding flags=0x%04X, size=%d, key: %s\n",
++ dwrq->flags, dwrq->length, extra ? "set" : "No key");
++
++ acx_sem_lock(adev);
++
++ index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
++
++ if (dwrq->length > 0) {
++ /* if index is 0 or invalid, use default key */
++ if ((index < 0) || (index > 3))
++ index = (int)adev->wep_current_index;
++
++ if (0 == (dwrq->flags & IW_ENCODE_NOKEY)) {
++ if (dwrq->length > 29)
++ dwrq->length = 29; /* restrict it */
++
++ if (dwrq->length > 13) {
++ /* 29*8 == 232, WEP256 */
++ adev->wep_keys[index].size = 29;
++ } else if (dwrq->length > 5) {
++ /* 13*8 == 104bit, WEP128 */
++ adev->wep_keys[index].size = 13;
++ } else if (dwrq->length > 0) {
++ /* 5*8 == 40bit, WEP64 */
++ adev->wep_keys[index].size = 5;
++ } else {
++ /* disable key */
++ adev->wep_keys[index].size = 0;
++ }
++
++ memset(adev->wep_keys[index].key, 0,
++ sizeof(adev->wep_keys[index].key));
++ memcpy(adev->wep_keys[index].key, extra, dwrq->length);
++ }
++ } else {
++ /* set transmit key */
++ if ((index >= 0) && (index <= 3))
++ adev->wep_current_index = index;
++ else if (0 == (dwrq->flags & IW_ENCODE_MODE)) {
++ /* complain if we were not just setting
++ * the key mode */
++ result = -EINVAL;
++ goto end_unlock;
++ }
++ }
++
++ adev->wep_enabled = !(dwrq->flags & IW_ENCODE_DISABLED);
++
++ if (dwrq->flags & IW_ENCODE_OPEN) {
++ adev->auth_alg = WLAN_AUTH_ALG_OPENSYSTEM;
++ adev->wep_restricted = 0;
++
++ } else if (dwrq->flags & IW_ENCODE_RESTRICTED) {
++ adev->auth_alg = WLAN_AUTH_ALG_SHAREDKEY;
++ adev->wep_restricted = 1;
++ }
++
++ /* set flag to make sure the card WEP settings get updated */
++ SET_BIT(adev->set_mask, GETSET_WEP);
++
++ log(L_IOCTL, "len=%d, key at 0x%p, flags=0x%X\n",
++ dwrq->length, extra, dwrq->flags);
++
++ for (index = 0; index <= 3; index++) {
++ if (adev->wep_keys[index].size) {
++ log(L_IOCTL, "index=%d, size=%d, key at 0x%p\n",
++ adev->wep_keys[index].index,
++ (int) adev->wep_keys[index].size,
++ adev->wep_keys[index].key);
++ }
++ }
++ result = -EINPROGRESS;
++
++end_unlock:
++ acx_sem_unlock(adev);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_get_encode
++*/
++static int
++acx_ioctl_get_encode(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_point *dwrq = &wrqu->encoding;
++ acx_device_t *adev = ndev2adev(ndev);
++ int index = (dwrq->flags & IW_ENCODE_INDEX) - 1;
++
++ FN_ENTER;
++
++ if (adev->wep_enabled == 0) {
++ dwrq->flags = IW_ENCODE_DISABLED;
++ } else {
++ if ((index < 0) || (index > 3))
++ index = (int)adev->wep_current_index;
++
++ dwrq->flags = (adev->wep_restricted == 1) ?
++ IW_ENCODE_RESTRICTED : IW_ENCODE_OPEN;
++ dwrq->length = adev->wep_keys[index].size;
++
++ memcpy(extra, adev->wep_keys[index].key,
++ adev->wep_keys[index].size);
++ }
++
++ /* set the current index */
++ SET_BIT(dwrq->flags, index + 1);
++
++ log(L_IOCTL, "len=%d, key=%p, flags=0x%X\n",
++ dwrq->length, dwrq->pointer,
++ dwrq->flags);
++
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_ioctl_set_power(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->power;
++ acx_device_t *adev = ndev2adev(ndev);
++ int result = -EINPROGRESS;
++
++ FN_ENTER;
++
++ log(L_IOCTL, "set 802.11 powersave flags=0x%04X\n", vwrq->flags);
++
++ acx_sem_lock(adev);
++
++ if (vwrq->disabled) {
++ CLEAR_BIT(adev->ps_wakeup_cfg, PS_CFG_ENABLE);
++ SET_BIT(adev->set_mask, GETSET_POWER_80211);
++ goto end;
++ }
++ if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) {
++ u16 ps_timeout = (vwrq->value * 1024) / 1000;
++
++ if (ps_timeout > 255)
++ ps_timeout = 255;
++ log(L_IOCTL, "setting PS timeout value to %d time units "
++ "due to %dus\n", ps_timeout, vwrq->value);
++ adev->ps_hangover_period = ps_timeout;
++ } else if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_PERIOD) {
++ u16 ps_periods = vwrq->value / 1000000;
++
++ if (ps_periods > 255)
++ ps_periods = 255;
++ log(L_IOCTL, "setting PS period value to %d periods "
++ "due to %dus\n", ps_periods, vwrq->value);
++ adev->ps_listen_interval = ps_periods;
++ CLEAR_BIT(adev->ps_wakeup_cfg, PS_CFG_WAKEUP_MODE_MASK);
++ SET_BIT(adev->ps_wakeup_cfg, PS_CFG_WAKEUP_EACH_ITVL);
++ }
++
++ switch (vwrq->flags & IW_POWER_MODE) {
++ /* FIXME: are we doing the right thing here? */
++ case IW_POWER_UNICAST_R:
++ CLEAR_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS);
++ break;
++ case IW_POWER_MULTICAST_R:
++ SET_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS);
++ break;
++ case IW_POWER_ALL_R:
++ SET_BIT(adev->ps_options, PS_OPT_STILL_RCV_BCASTS);
++ break;
++ case IW_POWER_ON:
++ break;
++ default:
++ log(L_IOCTL, "unknown PS mode\n");
++ result = -EINVAL;
++ goto end;
++ }
++
++ SET_BIT(adev->ps_wakeup_cfg, PS_CFG_ENABLE);
++ SET_BIT(adev->set_mask, GETSET_POWER_80211);
++end:
++ acx_sem_unlock(adev);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx_ioctl_get_power(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->power;
++ acx_device_t *adev = ndev2adev(ndev);
++
++ FN_ENTER;
++
++ log(L_IOCTL, "Get 802.11 Power Save flags = 0x%04X\n", vwrq->flags);
++ vwrq->disabled = ((adev->ps_wakeup_cfg & PS_CFG_ENABLE) == 0);
++ if (vwrq->disabled)
++ goto end;
++
++ if ((vwrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) {
++ vwrq->value = adev->ps_hangover_period * 1000 / 1024;
++ vwrq->flags = IW_POWER_TIMEOUT;
++ } else {
++ vwrq->value = adev->ps_listen_interval * 1000000;
++ vwrq->flags = IW_POWER_PERIOD|IW_POWER_RELATIVE;
++ }
++ if (adev->ps_options & PS_OPT_STILL_RCV_BCASTS)
++ SET_BIT(vwrq->flags, IW_POWER_ALL_R);
++ else
++ SET_BIT(vwrq->flags, IW_POWER_UNICAST_R);
++end:
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_ioctl_get_txpow
++*/
++static inline int
++acx_ioctl_get_txpow(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->power;
++ acx_device_t *adev = ndev2adev(ndev);
++
++ FN_ENTER;
++
++ vwrq->flags = IW_TXPOW_DBM;
++ vwrq->disabled = 0;
++ vwrq->fixed = 1;
++ vwrq->value = adev->tx_level_dbm;
++
++ log(L_IOCTL, "get txpower:%d dBm\n", adev->tx_level_dbm);
++
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_txpow
++*/
++static int
++acx_ioctl_set_txpow(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->power;
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++
++ FN_ENTER;
++
++ log(L_IOCTL, "set txpower:%d, disabled:%d, flags:0x%04X\n",
++ vwrq->value, vwrq->disabled, vwrq->flags);
++
++ acx_sem_lock(adev);
++
++ if (vwrq->disabled != adev->tx_disabled) {
++ SET_BIT(adev->set_mask, GETSET_TX);
++ }
++
++ adev->tx_disabled = vwrq->disabled;
++ if (vwrq->value == -1) {
++ if (vwrq->disabled) {
++ adev->tx_level_dbm = 0;
++ log(L_IOCTL, "disable radio tx\n");
++ } else {
++ /* adev->tx_level_auto = 1; */
++ log(L_IOCTL, "set tx power auto (NIY)\n");
++ }
++ } else {
++ adev->tx_level_dbm = vwrq->value <= 20 ? vwrq->value : 20;
++ /* adev->tx_level_auto = 0; */
++ log(L_IOCTL, "set txpower=%d dBm\n", adev->tx_level_dbm);
++ }
++ SET_BIT(adev->set_mask, GETSET_TXPOWER);
++
++ result = -EINPROGRESS;
++
++ acx_sem_unlock(adev);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_get_range
++*/
++static int
++acx_ioctl_get_range(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_point *dwrq = &wrqu->data;
++ struct iw_range *range = (struct iw_range *)extra;
++ acx_device_t *adev = ndev2adev(ndev);
++ int i,n;
++
++ FN_ENTER;
++
++ if (!dwrq->pointer)
++ goto end;
++
++ dwrq->length = sizeof(struct iw_range);
++ memset(range, 0, sizeof(struct iw_range));
++ n = 0;
++ for (i = 1; i <= 14; i++) {
++ if (adev->reg_dom_chanmask & (1 << (i - 1))) {
++ range->freq[n].i = i;
++ range->freq[n].m = acx_channel_freq[i - 1] * 100000;
++ range->freq[n].e = 1; /* units are MHz */
++ n++;
++ }
++ }
++ range->num_channels = n;
++ range->num_frequency = n;
++
++ range->min_rts = 0;
++ range->max_rts = 2312;
++
++#if ACX_FRAGMENTATION
++ range->min_frag = 256;
++ range->max_frag = 2312;
++#endif
++
++ range->encoding_size[0] = 5;
++ range->encoding_size[1] = 13;
++ range->encoding_size[2] = 29;
++ range->num_encoding_sizes = 3;
++ range->max_encoding_tokens = 4;
++
++ range->min_pmp = 0;
++ range->max_pmp = 5000000;
++ range->min_pmt = 0;
++ range->max_pmt = 65535 * 1000;
++ range->pmp_flags = IW_POWER_PERIOD;
++ range->pmt_flags = IW_POWER_TIMEOUT;
++ range->pm_capa = IW_POWER_PERIOD | IW_POWER_TIMEOUT | IW_POWER_ALL_R;
++
++ if (IS_ACX100(adev)) { /* ACX100 has direct radio programming - arbitrary levels, so offer a lot */
++ for (i = 0; i <= IW_MAX_TXPOWER - 1; i++)
++ range->txpower[i] = 20 * i / (IW_MAX_TXPOWER - 1);
++ range->num_txpower = IW_MAX_TXPOWER;
++ range->txpower_capa = IW_TXPOW_DBM;
++ }
++ else {
++ int count = min(IW_MAX_TXPOWER, (int)adev->cfgopt_power_levels.len);
++ for (i = 0; i <= count; i++)
++ range->txpower[i] = adev->cfgopt_power_levels.list[i];
++ range->num_txpower = count;
++ /* this list is given in mW */
++ range->txpower_capa = IW_TXPOW_MWATT;
++ }
++
++ range->we_version_compiled = WIRELESS_EXT;
++ range->we_version_source = 0x9;
++
++ range->retry_capa = IW_RETRY_LIMIT;
++ range->retry_flags = IW_RETRY_LIMIT;
++ range->min_retry = 1;
++ range->max_retry = 255;
++
++ range->r_time_flags = IW_RETRY_LIFETIME;
++ range->min_r_time = 0;
++ /* FIXME: lifetime ranges and orders of magnitude are strange?? */
++ range->max_r_time = 65535;
++
++ if (IS_USB(adev))
++ range->sensitivity = 0;
++ else if (IS_ACX111(adev))
++ range->sensitivity = 3;
++ else
++ range->sensitivity = 255;
++
++ for (i=0; i < adev->rate_supported_len; i++) {
++ range->bitrate[i] = (adev->rate_supported[i] & ~0x80) * 500000;
++ /* never happens, but keep it, to be safe: */
++ if (range->bitrate[i] == 0)
++ break;
++ }
++ range->num_bitrates = i;
++
++ range->max_qual.qual = 100;
++ range->max_qual.level = 100;
++ range->max_qual.noise = 100;
++ /* TODO: better values */
++ range->avg_qual.qual = 90;
++ range->avg_qual.level = 80;
++ range->avg_qual.noise = 2;
++
++end:
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++/***********************************************************************
++** Private functions
++*/
++
++/***********************************************************************
++** acx_ioctl_get_nick
++*/
++static inline int
++acx_ioctl_get_nick(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_point *dwrq = &wrqu->data;
++ acx_device_t *adev = ndev2adev(ndev);
++
++ strcpy(extra, adev->nick);
++ dwrq->length = strlen(extra) + 1;
++
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_nick
++*/
++static int
++acx_ioctl_set_nick(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_point *dwrq = &wrqu->data;
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ if (dwrq->length > IW_ESSID_MAX_SIZE + 1) {
++ result = -E2BIG;
++ goto end_unlock;
++ }
++
++ /* extra includes trailing \0, so it's ok */
++ strcpy(adev->nick, extra);
++ result = OK;
++
++end_unlock:
++ acx_sem_unlock(adev);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_get_retry
++*/
++static int
++acx_ioctl_get_retry(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->retry;
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned int type = vwrq->flags & IW_RETRY_TYPE;
++ unsigned int modifier = vwrq->flags & IW_RETRY_MODIFIER;
++ int result;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ /* return the short retry number by default */
++ if (type == IW_RETRY_LIFETIME) {
++ vwrq->flags = IW_RETRY_LIFETIME;
++ vwrq->value = adev->msdu_lifetime;
++ } else if (modifier == IW_RETRY_MAX) {
++ vwrq->flags = IW_RETRY_LIMIT | IW_RETRY_MAX;
++ vwrq->value = adev->long_retry;
++ } else {
++ vwrq->flags = IW_RETRY_LIMIT;
++ if (adev->long_retry != adev->short_retry)
++ SET_BIT(vwrq->flags, IW_RETRY_MIN);
++ vwrq->value = adev->short_retry;
++ }
++
++ /* can't be disabled */
++ vwrq->disabled = (u8)0;
++ result = OK;
++
++ acx_sem_unlock(adev);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_retry
++*/
++static int
++acx_ioctl_set_retry(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->retry;
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++
++ FN_ENTER;
++
++ if (!vwrq) {
++ result = -EFAULT;
++ goto end;
++ }
++ if (vwrq->disabled) {
++ result = -EINVAL;
++ goto end;
++ }
++
++ acx_sem_lock(adev);
++
++ result = -EINVAL;
++ if (IW_RETRY_LIMIT == (vwrq->flags & IW_RETRY_TYPE)) {
++ printk("old retry limits: short %d long %d\n",
++ adev->short_retry, adev->long_retry);
++ if (vwrq->flags & IW_RETRY_MAX) {
++ adev->long_retry = vwrq->value;
++ } else if (vwrq->flags & IW_RETRY_MIN) {
++ adev->short_retry = vwrq->value;
++ } else {
++ /* no modifier: set both */
++ adev->long_retry = vwrq->value;
++ adev->short_retry = vwrq->value;
++ }
++ printk("new retry limits: short %d long %d\n",
++ adev->short_retry, adev->long_retry);
++ SET_BIT(adev->set_mask, GETSET_RETRY);
++ result = -EINPROGRESS;
++ }
++ else if (vwrq->flags & IW_RETRY_LIFETIME) {
++ adev->msdu_lifetime = vwrq->value;
++ printk("new MSDU lifetime: %d\n", adev->msdu_lifetime);
++ SET_BIT(adev->set_mask, SET_MSDU_LIFETIME);
++ result = -EINPROGRESS;
++ }
++
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/************************ private ioctls ******************************/
++
++
++/***********************************************************************
++** acx_ioctl_set_debug
++*/
++#if ACX_DEBUG
++static int
++acx_ioctl_set_debug(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ unsigned int debug_new = *((unsigned int *)extra);
++ int result = -EINVAL;
++
++ log(L_ANY, "setting debug from %04X to %04X\n", acx_debug, debug_new);
++ acx_debug = debug_new;
++
++ result = OK;
++ return result;
++
++}
++#endif
++
++
++/***********************************************************************
++** acx_ioctl_list_reg_domain
++*/
++static int
++acx_ioctl_list_reg_domain(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ int i = 1;
++ const char * const *entry = acx_reg_domain_strings;
++
++ printk("dom# chan# domain/country\n");
++ while (*entry)
++ printk("%4d %s\n", i++, *entry++);
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_reg_domain
++*/
++static int
++acx_ioctl_set_reg_domain(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++
++ FN_ENTER;
++
++ if ((*extra < 1) || ((size_t)*extra > acx_reg_domain_ids_len)) {
++ result = -EINVAL;
++ goto end;
++ }
++
++ acx_sem_lock(adev);
++
++ adev->reg_dom_id = acx_reg_domain_ids[*extra - 1];
++ SET_BIT(adev->set_mask, GETSET_REG_DOMAIN);
++
++ result = -EINPROGRESS;
++
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_get_reg_domain
++*/
++static int
++acx_ioctl_get_reg_domain(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int dom,i;
++
++ /* no locking */
++ dom = adev->reg_dom_id;
++
++ for (i = 1; i <= acx_reg_domain_ids_len; i++) {
++ if (acx_reg_domain_ids[i-1] == dom) {
++ log(L_IOCTL, "regulatory domain is currently set "
++ "to %d (0x%X): %s\n", i, dom,
++ acx_reg_domain_strings[i-1]);
++ *extra = i;
++ break;
++ }
++ }
++
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_short_preamble
++*/
++static const char * const
++preamble_modes[] = {
++ "off",
++ "on",
++ "auto (peer capability dependent)",
++ "unknown mode, error"
++};
++
++static int
++acx_ioctl_set_short_preamble(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int i;
++ int result;
++
++ FN_ENTER;
++
++ if ((unsigned char)*extra > 2) {
++ result = -EINVAL;
++ goto end;
++ }
++
++ acx_sem_lock(adev);
++
++ adev->preamble_mode = (u8)*extra;
++ switch (adev->preamble_mode) {
++ case 0: /* long */
++ adev->preamble_cur = 0;
++ break;
++ case 1:
++ /* short, kick incapable peers */
++ adev->preamble_cur = 1;
++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
++ client_t *clt = &adev->sta_list[i];
++ if (!clt->used) continue;
++ if (!(clt->cap_info & WF_MGMT_CAP_SHORT)) {
++ clt->used = CLIENT_EMPTY_SLOT_0;
++ }
++ }
++ switch (adev->mode) {
++ case ACX_MODE_2_STA:
++ if (adev->ap_client && !adev->ap_client->used) {
++ /* We kicked our AP :) */
++ SET_BIT(adev->set_mask, GETSET_RESCAN);
++ }
++ }
++ break;
++ case 2: /* auto. short only if all peers are short-capable */
++ adev->preamble_cur = 1;
++ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
++ client_t *clt = &adev->sta_list[i];
++ if (!clt->used) continue;
++ if (!(clt->cap_info & WF_MGMT_CAP_SHORT)) {
++ adev->preamble_cur = 0;
++ break;
++ }
++ }
++ break;
++ }
++ printk("new short preamble setting: configured %s, active %s\n",
++ preamble_modes[adev->preamble_mode],
++ preamble_modes[adev->preamble_cur]);
++ result = OK;
++
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_get_short_preamble
++*/
++static int
++acx_ioctl_get_short_preamble(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++
++ acx_sem_lock(adev);
++
++ printk("current short preamble setting: configured %s, active %s\n",
++ preamble_modes[adev->preamble_mode],
++ preamble_modes[adev->preamble_cur]);
++
++ *extra = (char)adev->preamble_mode;
++
++ acx_sem_unlock(adev);
++
++ return OK;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_antenna
++**
++** TX and RX antenna can be set separately but this function good
++** for testing 0-4 bits
++*/
++static int
++acx_ioctl_set_antenna(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++
++ acx_sem_lock(adev);
++
++ printk("old antenna value: 0x%02X (COMBINED bit mask)\n"
++ "Rx antenna selection:\n"
++ "0x00 ant. 1\n"
++ "0x40 ant. 2\n"
++ "0x80 full diversity\n"
++ "0xc0 partial diversity\n"
++ "0x0f dwell time mask (in units of us)\n"
++ "Tx antenna selection:\n"
++ "0x00 ant. 2\n" /* yep, those ARE reversed! */
++ "0x20 ant. 1\n"
++ "new antenna value: 0x%02X\n",
++ adev->antenna, (u8)*extra);
++
++ adev->antenna = (u8)*extra;
++ SET_BIT(adev->set_mask, GETSET_ANTENNA);
++
++ acx_sem_unlock(adev);
++
++ return -EINPROGRESS;
++}
++
++
++/***********************************************************************
++** acx_ioctl_get_antenna
++*/
++static int
++acx_ioctl_get_antenna(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++
++ /* no locking. it's pointless to lock a single load */
++ printk("current antenna value: 0x%02X (COMBINED bit mask)\n"
++ "Rx antenna selection:\n"
++ "0x00 ant. 1\n"
++ "0x40 ant. 2\n"
++ "0x80 full diversity\n"
++ "0xc0 partial diversity\n"
++ "Tx antenna selection:\n"
++ "0x00 ant. 2\n" /* yep, those ARE reversed! */
++ "0x20 ant. 1\n", adev->antenna);
++
++ return 0;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_rx_antenna
++**
++** 0 = antenna1; 1 = antenna2; 2 = full diversity; 3 = partial diversity
++** Could anybody test which antenna is the external one?
++*/
++static int
++acx_ioctl_set_rx_antenna(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++
++ FN_ENTER;
++
++ if (*extra > 3) {
++ result = -EINVAL;
++ goto end;
++ }
++
++ printk("old antenna value: 0x%02X\n", adev->antenna);
++
++ acx_sem_lock(adev);
++
++ adev->antenna &= 0x3f;
++ SET_BIT(adev->antenna, (*extra << 6));
++ SET_BIT(adev->set_mask, GETSET_ANTENNA);
++ printk("new antenna value: 0x%02X\n", adev->antenna);
++ result = -EINPROGRESS;
++
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_tx_antenna
++**
++** Arguments: 0 == antenna2; 1 == antenna1;
++** Could anybody test which antenna is the external one?
++*/
++static int
++acx_ioctl_set_tx_antenna(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++
++ FN_ENTER;
++
++ if (*extra > 1) {
++ result = -EINVAL;
++ goto end;
++ }
++
++ printk("old antenna value: 0x%02X\n", adev->antenna);
++
++ acx_sem_lock(adev);
++
++ adev->antenna &= ~0x30;
++ SET_BIT(adev->antenna, ((*extra & 0x01) << 5));
++ SET_BIT(adev->set_mask, GETSET_ANTENNA);
++ printk("new antenna value: 0x%02X\n", adev->antenna);
++ result = -EINPROGRESS;
++
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_wlansniff
++**
++** can we just remove this in favor of monitor mode? --vda
++*/
++static int
++acx_ioctl_wlansniff(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned int *params = (unsigned int*)extra;
++ unsigned int enable = (unsigned int)(params[0] > 0);
++ int result;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ /* not using printk() here, since it distorts kismet display
++ * when printk messages activated */
++ log(L_IOCTL, "setting monitor to: 0x%02X\n", params[0]);
++
++ switch (params[0]) {
++ case 0:
++ /* no monitor mode. hmm, should we simply ignore it
++ * or go back to enabling adev->netdev->type ARPHRD_ETHER? */
++ break;
++ case 1:
++ adev->monitor_type = ARPHRD_IEEE80211_PRISM;
++ break;
++ case 2:
++ adev->monitor_type = ARPHRD_IEEE80211;
++ break;
++ }
++
++ if (params[0]) {
++ adev->mode = ACX_MODE_MONITOR;
++ SET_BIT(adev->set_mask, GETSET_MODE);
++ }
++
++ if (enable) {
++ adev->channel = params[1];
++ SET_BIT(adev->set_mask, GETSET_RX);
++ }
++ result = -EINPROGRESS;
++
++ acx_sem_unlock(adev);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_unknown11
++** FIXME: looks like some sort of "iwpriv kick_sta MAC" but it's broken
++*/
++static int
++acx_ioctl_unknown11(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++#ifdef BROKEN
++ struct iw_param *vwrq = &wrqu->param;
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ client_t client;
++ int result;
++
++ acx_sem_lock(adev);
++ acx_lock(adev, flags);
++
++ acx_l_transmit_disassoc(adev, &client);
++ result = OK;
++
++ acx_unlock(adev, flags);
++ acx_sem_unlock(adev);
++
++ return result;
++#endif
++ return -EINVAL;
++}
++
++
++/***********************************************************************
++** debug helper function to be able to debug various issues relatively easily
++*/
++static int
++acx_ioctl_dbg_set_masks(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ const unsigned int *params = (unsigned int*)extra;
++ int result;
++
++ acx_sem_lock(adev);
++
++ log(L_IOCTL, "setting flags in settings mask: "
++ "get_mask %08X set_mask %08X\n"
++ "before: get_mask %08X set_mask %08X\n",
++ params[0], params[1],
++ adev->get_mask, adev->set_mask);
++ SET_BIT(adev->get_mask, params[0]);
++ SET_BIT(adev->set_mask, params[1]);
++ log(L_IOCTL, "after: get_mask %08X set_mask %08X\n",
++ adev->get_mask, adev->set_mask);
++ result = -EINPROGRESS; /* immediately call commit handler */
++
++ acx_sem_unlock(adev);
++
++ return result;
++}
++
++
++/***********************************************************************
++* acx_ioctl_set_rates
++*
++* This ioctl takes string parameter. Examples:
++* iwpriv wlan0 SetRates "1,2"
++* use 1 and 2 Mbit rates, both are in basic rate set
++* iwpriv wlan0 SetRates "1,2 5,11"
++* use 1,2,5.5,11 Mbit rates. 1 and 2 are basic
++* iwpriv wlan0 SetRates "1,2 5c,11c"
++* same ('c' means 'CCK modulation' and it is a default for 5 and 11)
++* iwpriv wlan0 SetRates "1,2 5p,11p"
++* use 1,2,5.5,11 Mbit, 1,2 are basic. 5 and 11 are using PBCC
++* iwpriv wlan0 SetRates "1,2,5,11 22p"
++* use 1,2,5.5,11,22 Mbit. 1,2,5.5 and 11 are basic. 22 is using PBCC
++* (this is the maximum acx100 can do (modulo x4 mode))
++* iwpriv wlan0 SetRates "1,2,5,11 22"
++* same. 802.11 defines only PBCC modulation
++* for 22 and 33 Mbit rates, so there is no ambiguity
++* iwpriv wlan0 SetRates "1,2,5,11 6o,9o,12o,18o,24o,36o,48o,54o"
++* 1,2,5.5 and 11 are basic. 11g OFDM rates are enabled but
++* they are not in basic rate set. 22 Mbit is disabled.
++* iwpriv wlan0 SetRates "1,2,5,11 6,9,12,18,24,36,48,54"
++* same. OFDM is default for 11g rates except 22 and 33 Mbit,
++* thus 'o' is optional
++* iwpriv wlan0 SetRates "1,2,5,11 6d,9d,12d,18d,24d,36d,48d,54d"
++* 1,2,5.5 and 11 are basic. 11g CCK-OFDM rates are enabled
++* (acx111 does not support CCK-OFDM, driver will reject this cmd)
++* iwpriv wlan0 SetRates "6,9,12 18,24,36,48,54"
++* 6,9,12 are basic, rest of 11g rates is enabled. Using OFDM
++*/
++#include "setrate.c"
++
++/* disallow: 33Mbit (unsupported by hw) */
++/* disallow: CCKOFDM (unsupported by hw) */
++static int
++acx111_supported(int mbit, int modulation, void *opaque)
++{
++ if (mbit==33) return -ENOTSUPP;
++ if (modulation==DOT11_MOD_CCKOFDM) return -ENOTSUPP;
++ return OK;
++}
++
++static const u16
++acx111mask[] = {
++ [DOT11_RATE_1 ] = RATE111_1 ,
++ [DOT11_RATE_2 ] = RATE111_2 ,
++ [DOT11_RATE_5 ] = RATE111_5 ,
++ [DOT11_RATE_11] = RATE111_11,
++ [DOT11_RATE_22] = RATE111_22,
++ /* [DOT11_RATE_33] = */
++ [DOT11_RATE_6 ] = RATE111_6 ,
++ [DOT11_RATE_9 ] = RATE111_9 ,
++ [DOT11_RATE_12] = RATE111_12,
++ [DOT11_RATE_18] = RATE111_18,
++ [DOT11_RATE_24] = RATE111_24,
++ [DOT11_RATE_36] = RATE111_36,
++ [DOT11_RATE_48] = RATE111_48,
++ [DOT11_RATE_54] = RATE111_54,
++};
++
++static u32
++acx111_gen_mask(int mbit, int modulation, void *opaque)
++{
++ /* lower 16 bits show selected 1, 2, CCK and OFDM rates */
++ /* upper 16 bits show selected PBCC rates */
++ u32 m = acx111mask[rate_mbit2enum(mbit)];
++ if (modulation==DOT11_MOD_PBCC)
++ return m<<16;
++ return m;
++}
++
++static int
++verify_rate(u32 rate, int chip_type)
++{
++ /* never happens. be paranoid */
++ if (!rate) return -EINVAL;
++
++ /* disallow: mixing PBCC and CCK at 5 and 11Mbit
++ ** (can be supported, but needs complicated handling in tx code) */
++ if (( rate & ((RATE111_11+RATE111_5)<<16) )
++ && ( rate & (RATE111_11+RATE111_5) )
++ ) {
++ return -ENOTSUPP;
++ }
++ if (CHIPTYPE_ACX100 == chip_type) {
++ if ( rate & ~(RATE111_ACX100_COMPAT+(RATE111_ACX100_COMPAT<<16)) )
++ return -ENOTSUPP;
++ }
++ return 0;
++}
++
++static int
++acx_ioctl_set_rates(struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ int result;
++ u32 brate = 0, orate = 0; /* basic, operational rate set */
++
++ FN_ENTER;
++
++ log(L_IOCTL, "set_rates %s\n", extra);
++ result = fill_ratemasks(extra, &brate, &orate,
++ acx111_supported, acx111_gen_mask, 0);
++ if (result) goto end;
++ SET_BIT(orate, brate);
++ log(L_IOCTL, "brate %08X orate %08X\n", brate, orate);
++
++ result = verify_rate(brate, adev->chip_type);
++ if (result) goto end;
++ result = verify_rate(orate, adev->chip_type);
++ if (result) goto end;
++
++ acx_sem_lock(adev);
++ acx_lock(adev, flags);
++
++ adev->rate_basic = brate;
++ adev->rate_oper = orate;
++ /* TODO: ideally, we shall monitor highest basic rate
++ ** which was successfully sent to every peer
++ ** (say, last we checked, everybody could hear 5.5 Mbits)
++ ** and use that for bcasts when we want to reach all peers.
++ ** For beacons, we probably shall use lowest basic rate
++ ** because we want to reach all *potential* new peers too */
++ adev->rate_bcast = 1 << lowest_bit(brate);
++ if (IS_ACX100(adev))
++ adev->rate_bcast100 = acx_rate111to100(adev->rate_bcast);
++ adev->rate_auto = !has_only_one_bit(orate);
++ acx_l_update_client_rates(adev, orate);
++ /* TODO: get rid of ratevector, build it only when needed */
++ acx_l_update_ratevector(adev);
++
++ /* Do/don't do tx rate fallback; beacon contents and rate */
++ SET_BIT(adev->set_mask, SET_RATE_FALLBACK|SET_TEMPLATES);
++ result = -EINPROGRESS;
++
++ acx_unlock(adev, flags);
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_get_phy_chan_busy_percentage
++*/
++static int
++acx_ioctl_get_phy_chan_busy_percentage(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ struct {
++ u16 type;
++ u16 len;
++ u32 busytime;
++ u32 totaltime;
++ } ACX_PACKED usage;
++ int result;
++
++ acx_sem_lock(adev);
++
++ if (OK != acx_s_interrogate(adev, &usage, ACX1xx_IE_MEDIUM_USAGE)) {
++ result = NOT_OK;
++ goto end_unlock;
++ }
++
++ usage.busytime = le32_to_cpu(usage.busytime);
++ usage.totaltime = le32_to_cpu(usage.totaltime);
++
++ /* yes, this is supposed to be "Medium" (singular of media),
++ not "average"! OK, reword the message to make it obvious... */
++ printk("%s: busy percentage of medium (since last invocation): %d%% "
++ "(%u of %u microseconds)\n",
++ ndev->name,
++ usage.busytime / ((usage.totaltime / 100) + 1),
++ usage.busytime, usage.totaltime);
++
++ result = OK;
++
++end_unlock:
++ acx_sem_unlock(adev);
++
++ return result;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_ed_threshold
++*/
++static inline int
++acx_ioctl_set_ed_threshold(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++
++ acx_sem_lock(adev);
++
++ printk("old ED threshold value: %d\n", adev->ed_threshold);
++ adev->ed_threshold = (unsigned char)*extra;
++ printk("new ED threshold value: %d\n", (unsigned char)*extra);
++ SET_BIT(adev->set_mask, GETSET_ED_THRESH);
++
++ acx_sem_unlock(adev);
++
++ return -EINPROGRESS;
++}
++
++
++/***********************************************************************
++** acx_ioctl_set_cca
++*/
++static inline int
++acx_ioctl_set_cca(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++
++ acx_sem_lock(adev);
++
++ printk("old CCA value: 0x%02X\n", adev->cca);
++ adev->cca = (unsigned char)*extra;
++ printk("new CCA value: 0x%02X\n", (unsigned char)*extra);
++ SET_BIT(adev->set_mask, GETSET_CCA);
++ result = -EINPROGRESS;
++
++ acx_sem_unlock(adev);
++
++ return result;
++}
++
++
++/***********************************************************************
++*/
++static const char * const
++scan_modes[] = { "active", "passive", "background" };
++
++static void
++acx_print_scan_params(acx_device_t *adev, const char* head)
++{
++ printk("%s: %smode %d (%s), min chan time %dTU, "
++ "max chan time %dTU, max scan rate byte: %d\n",
++ adev->ndev->name, head,
++ adev->scan_mode, scan_modes[adev->scan_mode],
++ adev->scan_probe_delay, adev->scan_duration, adev->scan_rate);
++}
++
++static int
++acx_ioctl_set_scan_params(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++ const int *params = (int *)extra;
++
++ acx_sem_lock(adev);
++
++ acx_print_scan_params(adev, "old scan parameters: ");
++ if ((params[0] != -1) && (params[0] >= 0) && (params[0] <= 2))
++ adev->scan_mode = params[0];
++ if (params[1] != -1)
++ adev->scan_probe_delay = params[1];
++ if (params[2] != -1)
++ adev->scan_duration = params[2];
++ if ((params[3] != -1) && (params[3] <= 255))
++ adev->scan_rate = params[3];
++ acx_print_scan_params(adev, "new scan parameters: ");
++ SET_BIT(adev->set_mask, GETSET_RESCAN);
++ result = -EINPROGRESS;
++
++ acx_sem_unlock(adev);
++
++ return result;
++}
++
++static int
++acx_ioctl_get_scan_params(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++ int *params = (int *)extra;
++
++ acx_sem_lock(adev);
++
++ acx_print_scan_params(adev, "current scan parameters: ");
++ params[0] = adev->scan_mode;
++ params[1] = adev->scan_probe_delay;
++ params[2] = adev->scan_duration;
++ params[3] = adev->scan_rate;
++ result = OK;
++
++ acx_sem_unlock(adev);
++
++ return result;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx100_ioctl_set_led_power(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ static const char * const led_modes[] = { "off", "on", "LinkQuality" };
++
++ acx_device_t *adev = ndev2adev(ndev);
++ int result;
++
++ acx_sem_lock(adev);
++
++ printk("%s: power LED status: old %d (%s), ",
++ ndev->name,
++ adev->led_power,
++ led_modes[adev->led_power]);
++ adev->led_power = extra[0];
++ if (adev->led_power > 2) adev->led_power = 2;
++ printk("new %d (%s)\n",
++ adev->led_power,
++ led_modes[adev->led_power]);
++
++ if (adev->led_power == 2) {
++ printk("%s: max link quality setting: old %d, ",
++ ndev->name, adev->brange_max_quality);
++ if (extra[1])
++ adev->brange_max_quality = extra[1];
++ printk("new %d\n", adev->brange_max_quality);
++ }
++
++ SET_BIT(adev->set_mask, GETSET_LED_POWER);
++
++ result = -EINPROGRESS;
++
++ acx_sem_unlock(adev);
++
++ return result;
++}
++
++
++/***********************************************************************
++*/
++static inline int
++acx100_ioctl_get_led_power(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++
++ acx_sem_lock(adev);
++
++ extra[0] = adev->led_power;
++ if (adev->led_power == 2)
++ extra[1] = adev->brange_max_quality;
++ else
++ extra[1] = -1;
++
++ acx_sem_unlock(adev);
++
++ return OK;
++}
++
++
++/***********************************************************************
++*/
++static int
++acx111_ioctl_info(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->param;
++ if (!IS_PCI(ndev2adev(ndev)))
++ return OK;
++ return acx111pci_ioctl_info(ndev, info, vwrq, extra);
++}
++
++
++/***********************************************************************
++*/
++static int
++acx100_ioctl_set_phy_amp_bias(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ union iwreq_data *wrqu,
++ char *extra)
++{
++ struct iw_param *vwrq = &wrqu->param;
++ if (IS_USB(ndev2adev(ndev))) {
++ printk("acx: set_phy_amp_bias() is not supported on USB\n");
++ return OK;
++ }
++#ifdef ACX_MEM
++ return acx100mem_ioctl_set_phy_amp_bias(ndev, info, vwrq, extra);
++#else
++ return acx100pci_ioctl_set_phy_amp_bias(ndev, info, vwrq, extra);
++#endif
++}
++
++
++/***********************************************************************
++*/
++static const iw_handler acx_ioctl_handler[] =
++{
++ acx_ioctl_commit, /* SIOCSIWCOMMIT */
++ acx_ioctl_get_name, /* SIOCGIWNAME */
++ NULL, /* SIOCSIWNWID */
++ NULL, /* SIOCGIWNWID */
++ acx_ioctl_set_freq, /* SIOCSIWFREQ */
++ acx_ioctl_get_freq, /* SIOCGIWFREQ */
++ acx_ioctl_set_mode, /* SIOCSIWMODE */
++ acx_ioctl_get_mode, /* SIOCGIWMODE */
++ acx_ioctl_set_sens, /* SIOCSIWSENS */
++ acx_ioctl_get_sens, /* SIOCGIWSENS */
++ NULL, /* SIOCSIWRANGE */
++ acx_ioctl_get_range, /* SIOCGIWRANGE */
++ NULL, /* SIOCSIWPRIV */
++ NULL, /* SIOCGIWPRIV */
++ NULL, /* SIOCSIWSTATS */
++ NULL, /* SIOCGIWSTATS */
++#if IW_HANDLER_VERSION > 4
++ iw_handler_set_spy, /* SIOCSIWSPY */
++ iw_handler_get_spy, /* SIOCGIWSPY */
++ iw_handler_set_thrspy, /* SIOCSIWTHRSPY */
++ iw_handler_get_thrspy, /* SIOCGIWTHRSPY */
++#else /* IW_HANDLER_VERSION > 4 */
++#ifdef WIRELESS_SPY
++ NULL /* acx_ioctl_set_spy FIXME */, /* SIOCSIWSPY */
++ NULL /* acx_ioctl_get_spy */, /* SIOCGIWSPY */
++#else /* WSPY */
++ NULL, /* SIOCSIWSPY */
++ NULL, /* SIOCGIWSPY */
++#endif /* WSPY */
++ NULL, /* [nothing] */
++ NULL, /* [nothing] */
++#endif /* IW_HANDLER_VERSION > 4 */
++ acx_ioctl_set_ap, /* SIOCSIWAP */
++ acx_ioctl_get_ap, /* SIOCGIWAP */
++ NULL, /* [nothing] */
++ acx_ioctl_get_aplist, /* SIOCGIWAPLIST */
++ acx_ioctl_set_scan, /* SIOCSIWSCAN */
++ acx_ioctl_get_scan, /* SIOCGIWSCAN */
++ acx_ioctl_set_essid, /* SIOCSIWESSID */
++ acx_ioctl_get_essid, /* SIOCGIWESSID */
++ acx_ioctl_set_nick, /* SIOCSIWNICKN */
++ acx_ioctl_get_nick, /* SIOCGIWNICKN */
++ NULL, /* [nothing] */
++ NULL, /* [nothing] */
++ acx_ioctl_set_rate, /* SIOCSIWRATE */
++ acx_ioctl_get_rate, /* SIOCGIWRATE */
++ acx_ioctl_set_rts, /* SIOCSIWRTS */
++ acx_ioctl_get_rts, /* SIOCGIWRTS */
++#if ACX_FRAGMENTATION
++ acx_ioctl_set_frag, /* SIOCSIWFRAG */
++ acx_ioctl_get_frag, /* SIOCGIWFRAG */
++#else
++ NULL, /* SIOCSIWFRAG */
++ NULL, /* SIOCGIWFRAG */
++#endif
++ acx_ioctl_set_txpow, /* SIOCSIWTXPOW */
++ acx_ioctl_get_txpow, /* SIOCGIWTXPOW */
++ acx_ioctl_set_retry, /* SIOCSIWRETRY */
++ acx_ioctl_get_retry, /* SIOCGIWRETRY */
++ acx_ioctl_set_encode, /* SIOCSIWENCODE */
++ acx_ioctl_get_encode, /* SIOCGIWENCODE */
++ acx_ioctl_set_power, /* SIOCSIWPOWER */
++ acx_ioctl_get_power, /* SIOCGIWPOWER */
++};
++
++
++/***********************************************************************
++*/
++
++/* if you plan to reorder something, make sure to reorder all other places
++ * accordingly! */
++/* SET/GET convention: SETs must have even position, GETs odd */
++#define ACX100_IOCTL SIOCIWFIRSTPRIV
++enum {
++ ACX100_IOCTL_DEBUG = ACX100_IOCTL,
++ ACX100_IOCTL_GET__________UNUSED1,
++ ACX100_IOCTL_SET_PLED,
++ ACX100_IOCTL_GET_PLED,
++ ACX100_IOCTL_SET_RATES,
++ ACX100_IOCTL_LIST_DOM,
++ ACX100_IOCTL_SET_DOM,
++ ACX100_IOCTL_GET_DOM,
++ ACX100_IOCTL_SET_SCAN_PARAMS,
++ ACX100_IOCTL_GET_SCAN_PARAMS,
++ ACX100_IOCTL_SET_PREAMB,
++ ACX100_IOCTL_GET_PREAMB,
++ ACX100_IOCTL_SET_ANT,
++ ACX100_IOCTL_GET_ANT,
++ ACX100_IOCTL_RX_ANT,
++ ACX100_IOCTL_TX_ANT,
++ ACX100_IOCTL_SET_PHY_AMP_BIAS,
++ ACX100_IOCTL_GET_PHY_CHAN_BUSY,
++ ACX100_IOCTL_SET_ED,
++ ACX100_IOCTL_GET__________UNUSED3,
++ ACX100_IOCTL_SET_CCA,
++ ACX100_IOCTL_GET__________UNUSED4,
++ ACX100_IOCTL_MONITOR,
++ ACX100_IOCTL_TEST,
++ ACX100_IOCTL_DBG_SET_MASKS,
++ ACX111_IOCTL_INFO,
++ ACX100_IOCTL_DBG_SET_IO,
++ ACX100_IOCTL_DBG_GET_IO
++};
++
++
++static const iw_handler acx_ioctl_private_handler[] =
++{
++#if ACX_DEBUG
++[ACX100_IOCTL_DEBUG - ACX100_IOCTL] = acx_ioctl_set_debug,
++#endif
++[ACX100_IOCTL_SET_PLED - ACX100_IOCTL] = acx100_ioctl_set_led_power,
++[ACX100_IOCTL_GET_PLED - ACX100_IOCTL] = acx100_ioctl_get_led_power,
++[ACX100_IOCTL_SET_RATES - ACX100_IOCTL] = acx_ioctl_set_rates,
++[ACX100_IOCTL_LIST_DOM - ACX100_IOCTL] = acx_ioctl_list_reg_domain,
++[ACX100_IOCTL_SET_DOM - ACX100_IOCTL] = acx_ioctl_set_reg_domain,
++[ACX100_IOCTL_GET_DOM - ACX100_IOCTL] = acx_ioctl_get_reg_domain,
++[ACX100_IOCTL_SET_SCAN_PARAMS - ACX100_IOCTL] = acx_ioctl_set_scan_params,
++[ACX100_IOCTL_GET_SCAN_PARAMS - ACX100_IOCTL] = acx_ioctl_get_scan_params,
++[ACX100_IOCTL_SET_PREAMB - ACX100_IOCTL] = acx_ioctl_set_short_preamble,
++[ACX100_IOCTL_GET_PREAMB - ACX100_IOCTL] = acx_ioctl_get_short_preamble,
++[ACX100_IOCTL_SET_ANT - ACX100_IOCTL] = acx_ioctl_set_antenna,
++[ACX100_IOCTL_GET_ANT - ACX100_IOCTL] = acx_ioctl_get_antenna,
++[ACX100_IOCTL_RX_ANT - ACX100_IOCTL] = acx_ioctl_set_rx_antenna,
++[ACX100_IOCTL_TX_ANT - ACX100_IOCTL] = acx_ioctl_set_tx_antenna,
++[ACX100_IOCTL_SET_PHY_AMP_BIAS - ACX100_IOCTL] = acx100_ioctl_set_phy_amp_bias,
++[ACX100_IOCTL_GET_PHY_CHAN_BUSY - ACX100_IOCTL] = acx_ioctl_get_phy_chan_busy_percentage,
++[ACX100_IOCTL_SET_ED - ACX100_IOCTL] = acx_ioctl_set_ed_threshold,
++[ACX100_IOCTL_SET_CCA - ACX100_IOCTL] = acx_ioctl_set_cca,
++[ACX100_IOCTL_MONITOR - ACX100_IOCTL] = acx_ioctl_wlansniff,
++[ACX100_IOCTL_TEST - ACX100_IOCTL] = acx_ioctl_unknown11,
++[ACX100_IOCTL_DBG_SET_MASKS - ACX100_IOCTL] = acx_ioctl_dbg_set_masks,
++[ACX111_IOCTL_INFO - ACX100_IOCTL] = acx111_ioctl_info,
++};
++
++
++static const struct iw_priv_args acx_ioctl_private_args[] = {
++#if ACX_DEBUG
++{ cmd : ACX100_IOCTL_DEBUG,
++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
++ get_args : 0,
++ name : "SetDebug" },
++#endif
++{ cmd : ACX100_IOCTL_SET_PLED,
++ set_args : IW_PRIV_TYPE_BYTE | 2,
++ get_args : 0,
++ name : "SetLEDPower" },
++{ cmd : ACX100_IOCTL_GET_PLED,
++ set_args : 0,
++ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 2,
++ name : "GetLEDPower" },
++{ cmd : ACX100_IOCTL_SET_RATES,
++ set_args : IW_PRIV_TYPE_CHAR | 256,
++ get_args : 0,
++ name : "SetRates" },
++{ cmd : ACX100_IOCTL_LIST_DOM,
++ set_args : 0,
++ get_args : 0,
++ name : "ListRegDomain" },
++{ cmd : ACX100_IOCTL_SET_DOM,
++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
++ get_args : 0,
++ name : "SetRegDomain" },
++{ cmd : ACX100_IOCTL_GET_DOM,
++ set_args : 0,
++ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
++ name : "GetRegDomain" },
++{ cmd : ACX100_IOCTL_SET_SCAN_PARAMS,
++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4,
++ get_args : 0,
++ name : "SetScanParams" },
++{ cmd : ACX100_IOCTL_GET_SCAN_PARAMS,
++ set_args : 0,
++ get_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4,
++ name : "GetScanParams" },
++{ cmd : ACX100_IOCTL_SET_PREAMB,
++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
++ get_args : 0,
++ name : "SetSPreamble" },
++{ cmd : ACX100_IOCTL_GET_PREAMB,
++ set_args : 0,
++ get_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
++ name : "GetSPreamble" },
++{ cmd : ACX100_IOCTL_SET_ANT,
++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
++ get_args : 0,
++ name : "SetAntenna" },
++{ cmd : ACX100_IOCTL_GET_ANT,
++ set_args : 0,
++ get_args : 0,
++ name : "GetAntenna" },
++{ cmd : ACX100_IOCTL_RX_ANT,
++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
++ get_args : 0,
++ name : "SetRxAnt" },
++{ cmd : ACX100_IOCTL_TX_ANT,
++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
++ get_args : 0,
++ name : "SetTxAnt" },
++{ cmd : ACX100_IOCTL_SET_PHY_AMP_BIAS,
++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
++ get_args : 0,
++ name : "SetPhyAmpBias"},
++{ cmd : ACX100_IOCTL_GET_PHY_CHAN_BUSY,
++ set_args : 0,
++ get_args : 0,
++ name : "GetPhyChanBusy" },
++{ cmd : ACX100_IOCTL_SET_ED,
++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
++ get_args : 0,
++ name : "SetED" },
++{ cmd : ACX100_IOCTL_SET_CCA,
++ set_args : IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1,
++ get_args : 0,
++ name : "SetCCA" },
++{ cmd : ACX100_IOCTL_MONITOR,
++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2,
++ get_args : 0,
++ name : "monitor" },
++{ cmd : ACX100_IOCTL_TEST,
++ set_args : 0,
++ get_args : 0,
++ name : "Test" },
++{ cmd : ACX100_IOCTL_DBG_SET_MASKS,
++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2,
++ get_args : 0,
++ name : "DbgSetMasks" },
++{ cmd : ACX111_IOCTL_INFO,
++ set_args : 0,
++ get_args : 0,
++ name : "GetAcx111Info" },
++{ cmd : ACX100_IOCTL_DBG_SET_IO,
++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4,
++ get_args : 0,
++ name : "DbgSetIO" },
++{ cmd : ACX100_IOCTL_DBG_GET_IO,
++ set_args : IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3,
++ get_args : 0,
++ name : "DbgGetIO" },
++};
++
++
++const struct iw_handler_def acx_ioctl_handler_def =
++{
++ .num_standard = VEC_SIZE(acx_ioctl_handler),
++ .num_private = VEC_SIZE(acx_ioctl_private_handler),
++ .num_private_args = VEC_SIZE(acx_ioctl_private_args),
++ .standard = (iw_handler *) acx_ioctl_handler,
++ .private = (iw_handler *) acx_ioctl_private_handler,
++ .private_args = (struct iw_priv_args *) acx_ioctl_private_args,
++#if IW_HANDLER_VERSION > 5
++ .get_wireless_stats = acx_e_get_wireless_stats
++#endif /* IW > 5 */
++};
+Index: linux-2.6.23/drivers/net/wireless/acx/Kconfig
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/Kconfig 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,113 @@
++config ACX
++ tristate "TI acx100/acx111 802.11b/g wireless chipsets"
++ depends on NET_RADIO && EXPERIMENTAL
++ select FW_LOADER
++ ---help---
++ A driver for 802.11b/g wireless cards based on
++ Texas Instruments acx100 and acx111 chipsets.
++
++ This driver supports Host AP mode that allows
++ your computer to act as an IEEE 802.11 access point.
++ This driver is new and experimental.
++
++ Texas Instruments did not take part in development of this driver
++ in any way, shape or form.
++
++ The driver can be compiled as a module and will be named "acx".
++
++config ACX_PCI
++ bool "TI acx100/acx111 802.11b/g PCI"
++ depends on ACX && PCI
++ ---help---
++ Include PCI and CardBus support in acx.
++
++ acx chipsets need their firmware loaded at startup.
++ You will need to provide a firmware image via hotplug.
++
++ Firmware may be in a form of single image 40-100kb in size
++ (a 'combined' firmware) or two images - main image
++ (again 40-100kb) and radio image (~10kb or less).
++
++ Firmware images are requested from hotplug using following names:
++
++ tiacx100 - main firmware image for acx100 chipset
++ tiacx100rNN - radio acx100 firmware for radio type NN
++ tiacx100cNN - combined acx100 firmware for radio type NN
++ tiacx111 - main acx111 firmware
++ tiacx111rNN - radio acx111 firmware for radio type NN
++ tiacx111cNN - combined acx111 firmware for radio type NN
++
++ Driver will attempt to load combined image first.
++ If no such image is found, it will try to load main image
++ and radio image instead.
++
++ Firmware files are not covered by GPL and are not distributed
++ with this driver for legal reasons.
++
++config ACX_USB
++ bool "TI acx100/acx111 802.11b/g USB"
++ depends on ACX && (USB=y || USB=ACX)
++ ---help---
++ Include USB support in acx.
++
++ There is only one currently known device in this category,
++ D-Link DWL-120+, but newer devices seem to be on the horizon.
++
++ acx chipsets need their firmware loaded at startup.
++ You will need to provide a firmware image via hotplug.
++
++ Firmware for USB device is requested from hotplug
++ by the 'tiacx100usb' name.
++
++ Firmware files are not covered by GPL and are not distributed
++ with this driver for legal reasons.
++
++config ACX_MEM
++ bool "TI acx100/acx111 802.11b/g memory mapped slave 16 interface"
++ depends on ACX
++ ---help---
++ acx chipsets need their firmware loaded at startup.
++ You will need to provide a firmware image via hotplug.
++
++ Firmware for USB device is requested from hotplug
++ by the 'tiacx100usb' name.
++
++ Firmware files are not covered by GPL and are not distributed
++ with this driver for legal reasons.
++
++config ACX_CS
++ bool "TI acx100/acx111 802.11b/g cardbus interface"
++ depends on ACX
++ ---help---
++ acx chipsets need their firmware loaded at startup.
++ You will need to provide a firmware image via hotplug.
++
++ This driver is based on memory mapped driver.
++
++ Firmware files are not covered by GPL and are not distributed
++ with this driver for legal reasons.
++
++config ACX_HX4700
++ tristate "ACX support for the iPAQ hx4700 using ACX_MEM"
++ depends on HX4700_CORE && ACX_MEM
++ ---help---
++ Include memory interface support in acx for the iPAQ hx4700.
++
++config ACX_HTCUNIVERSAL
++ tristate "ACX support for the HTC Universal using ACX_MEM"
++ depends on HTCUNIVERSAL_CORE && HTC_ASIC3 && ACX_MEM
++ ---help---
++ Include memory interface support in acx for the HTC Universal.
++
++config ACX_HTCSABLE
++ tristate "ACX support for the HTC Sable (IPAQ hw6915) using ACX_MEM"
++ depends on MACH_HW6900 && HTC_ASIC3 && ACX_MEM
++ ---help---
++ Include memory interface support in acx for the HTC Sable (IPAQ hw6915).
++
++config ACX_RX3000
++ tristate "ACX support for the iPAQ RX3000 using ACX_MEM"
++ depends on MACH_RX3715 && ACX_MEM && LEDS_ASIC3
++ ---help---
++ Include memory interface support in acx for the IPAQ RX3000.
++
+Index: linux-2.6.23/drivers/net/wireless/acx/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/Makefile 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,21 @@
++#obj-m += acx.o
++
++#acx-obj-y += pci.o
++#acx-obj-y += usb.o
++
++#acx-objs := wlan.o conv.o ioctl.o common.o $(acx-obj-y)
++
++# Use this if you have proper Kconfig integration:
++
++obj-$(CONFIG_ACX) += acx.o
++obj-$(CONFIG_ACX_HX4700) += hx4700_acx.o
++obj-$(CONFIG_ACX_HTCUNIVERSAL) += htcuniversal_acx.o
++obj-$(CONFIG_ACX_HTCSABLE) += htcsable_acx.o
++obj-$(CONFIG_ACX_RX3000) += rx3000_acx.o
++#
++acx-obj-$(CONFIG_ACX_PCI) += pci.o
++acx-obj-$(CONFIG_ACX_USB) += usb.o
++acx-obj-$(CONFIG_ACX_MEM) += mem.o
++acx-obj-$(CONFIG_ACX_CS) += cs.o
++#
++acx-objs := wlan.o conv.o ioctl.o common.o $(acx-obj-y)
+Index: linux-2.6.23/drivers/net/wireless/acx/mem.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/mem.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,5363 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++**
++** Slave memory interface support:
++**
++** Todd Blumer - SDG Systems
++** Bill Reese - HP
++** Eric McCorkle - Shadowsun
++*/
++#define ACX_MEM 1
++
++/*
++ * non-zero makes it dump the ACX memory to the console then
++ * panic when you cat /proc/driver/acx_wlan0_diag
++ */
++#define DUMP_MEM_DEFINED 1
++
++#define DUMP_MEM_DURING_DIAG 0
++#define DUMP_IF_SLOW 0
++
++#define PATCH_AROUND_BAD_SPOTS 1
++#define HX4700_FIRMWARE_CHECKSUM 0x0036862e
++#define HX4700_ALTERNATE_FIRMWARE_CHECKSUM 0x00368a75
++
++#include <linux/version.h>
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
++#include <linux/config.h>
++#endif
++
++/* Linux 2.6.18+ uses <linux/utsrelease.h> */
++#ifndef UTS_RELEASE
++#include <linux/utsrelease.h>
++#endif
++
++#include <linux/compiler.h> /* required for Lx 2.6.8 ?? */
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/skbuff.h>
++#include <linux/slab.h>
++#include <linux/if_arp.h>
++#include <linux/irq.h>
++#include <linux/rtnetlink.h>
++#include <linux/wireless.h>
++#include <net/iw_handler.h>
++#include <linux/netdevice.h>
++#include <linux/ioport.h>
++#include <linux/pci.h>
++#include <linux/platform_device.h>
++#include <linux/pm.h>
++#include <linux/vmalloc.h>
++#include <linux/delay.h>
++#include <linux/workqueue.h>
++#include <linux/inetdevice.h>
++
++#include "acx.h"
++#include "acx_hw.h"
++
++/***********************************************************************
++*/
++
++#define CARD_EEPROM_ID_SIZE 6
++
++#include <asm/io.h>
++
++#define REG_ACX_VENDOR_ID 0x900
++/*
++ * This is the vendor id on the HX4700, anyway
++ */
++#define ACX_VENDOR_ID 0x8400104c
++
++typedef enum {
++ ACX_SOFT_RESET = 0,
++
++ ACX_SLV_REG_ADDR,
++ ACX_SLV_REG_DATA,
++ ACX_SLV_REG_ADATA,
++
++ ACX_SLV_MEM_CP,
++ ACX_SLV_MEM_ADDR,
++ ACX_SLV_MEM_DATA,
++ ACX_SLV_MEM_CTL,
++} acxreg_t;
++
++/***********************************************************************
++*/
++static void acxmem_i_tx_timeout(struct net_device *ndev);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id);
++#else
++static irqreturn_t acxmem_i_interrupt(int irq, void *dev_id, struct pt_regs *regs);
++#endif
++static void acxmem_i_set_multicast_list(struct net_device *ndev);
++
++static int acxmem_e_open(struct net_device *ndev);
++static int acxmem_e_close(struct net_device *ndev);
++static void acxmem_s_up(struct net_device *ndev);
++static void acxmem_s_down(struct net_device *ndev);
++
++static void dump_acxmem (acx_device_t *adev, u32 start, int length);
++static int acxmem_complete_hw_reset (acx_device_t *adev);
++static void acxmem_s_delete_dma_regions(acx_device_t *adev);
++
++static struct platform_device *resume_pdev;
++
++static int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
++acxmem_e_suspend(struct platform_device *pdev, pm_message_t state);
++#else
++acxmem_e_suspend(struct device *pdev, u32 state);
++#endif
++static void
++fw_resumer(struct work_struct *notused);
++//fw_resumer( void *data );
++
++static int acx_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)
++{
++ struct net_device *ndev = ptr;
++ acx_device_t *adev = ndev2adev(ndev);
++
++ /*
++ * Upper level ioctl() handlers send a NETDEV_CHANGEADDR if the MAC address changes.
++ */
++
++ if (NETDEV_CHANGEADDR == event) {
++ /*
++ * the upper layers put the new MAC address in ndev->dev_addr; we just copy
++ * it over and update the ACX with it.
++ */
++ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr);
++ adev->set_mask |= GETSET_STATION_ID;
++ acx_s_update_card_settings (adev);
++ }
++
++ return 0;
++}
++
++static struct notifier_block acx_netdev_notifier = {
++ .notifier_call = acx_netdev_event,
++};
++
++/***********************************************************************
++** Register access
++*/
++
++/* Pick one */
++/* #define INLINE_IO static */
++#define INLINE_IO static inline
++
++INLINE_IO u32
++read_id_register (acx_device_t *adev)
++{
++ writel (0x24, &adev->iobase[ACX_SLV_REG_ADDR]);
++ return readl (&adev->iobase[ACX_SLV_REG_DATA]);
++}
++
++INLINE_IO u32
++read_reg32(acx_device_t *adev, unsigned int offset)
++{
++ u32 val;
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20) {
++ return readl(((u8*)adev->iobase) + addr);
++ }
++
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ val = readl( &adev->iobase[ACX_SLV_REG_DATA] );
++
++ return val;
++}
++
++INLINE_IO u16
++read_reg16(acx_device_t *adev, unsigned int offset)
++{
++ u16 lo;
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20) {
++ return readw(((u8 *) adev->iobase) + addr);
++ }
++
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ lo = readw( (u16 *)&adev->iobase[ACX_SLV_REG_DATA] );
++
++ return lo;
++}
++
++INLINE_IO u8
++read_reg8(acx_device_t *adev, unsigned int offset)
++{
++ u8 lo;
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20)
++ return readb(((u8 *)adev->iobase) + addr);
++
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ lo = readw( (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
++
++ return (u8)lo;
++}
++
++INLINE_IO void
++write_reg32(acx_device_t *adev, unsigned int offset, u32 val)
++{
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20) {
++ writel(val, ((u8*)adev->iobase) + addr);
++ return;
++ }
++
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ writel( val, &adev->iobase[ACX_SLV_REG_DATA] );
++}
++
++INLINE_IO void
++write_reg16(acx_device_t *adev, unsigned int offset, u16 val)
++{
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20) {
++ writew(val, ((u8 *)adev->iobase) + addr);
++ return;
++ }
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ writew( val, (u16 *) &adev->iobase[ACX_SLV_REG_DATA] );
++}
++
++INLINE_IO void
++write_reg8(acx_device_t *adev, unsigned int offset, u8 val)
++{
++ u32 addr;
++
++ if (offset > IO_ACX_ECPU_CTRL)
++ addr = offset;
++ else
++ addr = adev->io[offset];
++
++ if (addr < 0x20) {
++ writeb(val, ((u8 *) adev->iobase) + addr);
++ return;
++ }
++ writel( addr, &adev->iobase[ACX_SLV_REG_ADDR] );
++ writeb( val, (u8 *)&adev->iobase[ACX_SLV_REG_DATA] );
++}
++
++/* Handle PCI posting properly:
++ * Make sure that writes reach the adapter in case they require to be executed
++ * *before* the next write, by reading a random (and safely accessible) register.
++ * This call has to be made if there is no read following (which would flush the data
++ * to the adapter), yet the written data has to reach the adapter immediately. */
++INLINE_IO void
++write_flush(acx_device_t *adev)
++{
++ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */
++ /* faster version (accesses the first register, IO_ACX_SOFT_RESET,
++ * which should also be safe): */
++ (void) readl(adev->iobase);
++}
++
++INLINE_IO void
++set_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
++ u32 tmp;
++
++ tmp = read_reg32 (adev, offset);
++ tmp = tmp | bits;
++ write_reg32 (adev, offset, tmp);
++ write_flush (adev);
++}
++
++INLINE_IO void
++clear_regbits (acx_device_t *adev, unsigned int offset, u32 bits) {
++ u32 tmp;
++
++ tmp = read_reg32 (adev, offset);
++ tmp = tmp & ~bits;
++ write_reg32 (adev, offset, tmp);
++ write_flush (adev);
++}
++
++/*
++ * Copy from PXA memory to the ACX memory. This assumes both the PXA and ACX
++ * addresses are 32 bit aligned. Count is in bytes.
++ */
++INLINE_IO void
++write_slavemem32 (acx_device_t *adev, u32 slave_address, u32 val)
++{
++ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
++ udelay (10);
++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, val);
++}
++
++INLINE_IO u32
++read_slavemem32 (acx_device_t *adev, u32 slave_address)
++{
++ u32 val;
++
++ write_reg32 (adev, IO_ACX_SLV_MEM_CTL, 0x0);
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, slave_address);
++ udelay (10);
++ val = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
++
++ return val;
++}
++
++INLINE_IO void
++write_slavemem8 (acx_device_t *adev, u32 slave_address, u8 val)
++{
++ u32 data;
++ u32 base;
++ int offset;
++
++ /*
++ * Get the word containing the target address and the byte offset in that word.
++ */
++ base = slave_address & ~3;
++ offset = (slave_address & 3) * 8;
++
++ data = read_slavemem32 (adev, base);
++ data &= ~(0xff << offset);
++ data |= val << offset;
++ write_slavemem32 (adev, base, data);
++}
++
++INLINE_IO u8
++read_slavemem8 (acx_device_t *adev, u32 slave_address)
++{
++ u8 val;
++ u32 base;
++ u32 data;
++ int offset;
++
++ base = slave_address & ~3;
++ offset = (slave_address & 3) * 8;
++
++ data = read_slavemem32 (adev, base);
++
++ val = (data >> offset) & 0xff;
++
++ return val;
++}
++
++/*
++ * doesn't split across word boundaries
++ */
++INLINE_IO void
++write_slavemem16 (acx_device_t *adev, u32 slave_address, u16 val)
++{
++ u32 data;
++ u32 base;
++ int offset;
++
++ /*
++ * Get the word containing the target address and the byte offset in that word.
++ */
++ base = slave_address & ~3;
++ offset = (slave_address & 3) * 8;
++
++ data = read_slavemem32 (adev, base);
++ data &= ~(0xffff << offset);
++ data |= val << offset;
++ write_slavemem32 (adev, base, data);
++}
++
++/*
++ * doesn't split across word boundaries
++ */
++INLINE_IO u16
++read_slavemem16 (acx_device_t *adev, u32 slave_address)
++{
++ u16 val;
++ u32 base;
++ u32 data;
++ int offset;
++
++ base = slave_address & ~3;
++ offset = (slave_address & 3) * 8;
++
++ data = read_slavemem32 (adev, base);
++
++ val = (data >> offset) & 0xffff;
++
++ return val;
++}
++
++/*
++ * Copy from slave memory
++ *
++ * TODO - rewrite using address autoincrement, handle partial words
++ */
++void
++copy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count) {
++ u32 tmp = 0;
++ u8 *ptmp = (u8 *) &tmp;
++
++ /*
++ * Right now I'm making the assumption that the destination is aligned, but
++ * I'd better check.
++ */
++ if ((u32) destination & 3) {
++ printk ("acx copy_from_slavemem: warning! destination not word-aligned!\n");
++ }
++
++ while (count >= 4) {
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
++ udelay (10);
++ *((u32 *) destination) = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
++ count -= 4;
++ source += 4;
++ destination += 4;
++ }
++
++ /*
++ * If the word reads above didn't satisfy the count, read one more word
++ * and transfer a byte at a time until the request is satisfied.
++ */
++ if (count) {
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, source);
++ udelay (10);
++ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
++ while (count--) {
++ *destination++ = *ptmp++;
++ }
++ }
++}
++
++/*
++ * Copy to slave memory
++ *
++ * TODO - rewrite using autoincrement, handle partial words
++ */
++void
++copy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
++{
++ u32 tmp = 0;
++ u8* ptmp = (u8 *) &tmp;
++ static u8 src[512]; /* make static to avoid huge stack objects */
++
++ /*
++ * For now, make sure the source is word-aligned by copying it to a word-aligned
++ * buffer. Someday rewrite to avoid the extra copy.
++ */
++ if (count > sizeof (src)) {
++ printk ("acx copy_to_slavemem: Warning! buffer overflow!\n");
++ count = sizeof (src);
++ }
++ memcpy (src, source, count);
++ source = src;
++
++ while (count >= 4) {
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
++ udelay (10);
++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, *((u32 *) source));
++ count -= 4;
++ source += 4;
++ destination += 4;
++ }
++
++ /*
++ * If there are leftovers read the next word from the acx and merge in
++ * what they want to write.
++ */
++ if (count) {
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
++ udelay (10);
++ tmp = read_reg32 (adev, IO_ACX_SLV_MEM_DATA);
++ while (count--) {
++ *ptmp++ = *source++;
++ }
++ /*
++ * reset address in case we're currently in auto-increment mode
++ */
++ write_reg32 (adev, IO_ACX_SLV_MEM_ADDR, destination);
++ udelay (10);
++ write_reg32 (adev, IO_ACX_SLV_MEM_DATA, tmp);
++ udelay (10);
++ }
++
++}
++
++/*
++ * Block copy to slave buffers using memory block chain mode. Copies to the ACX
++ * transmit buffer structure with minimal intervention on our part.
++ * Interrupts should be disabled when calling this.
++ */
++void
++chaincopy_to_slavemem (acx_device_t *adev, u32 destination, u8 *source, int count)
++{
++ u32 val;
++ u32 *data = (u32 *) source;
++ static u8 aligned_source[WLAN_A4FR_MAXLEN_WEP_FCS];
++
++ /*
++ * Warn if the pointers don't look right. Destination must fit in [23:5] with
++ * zero elsewhere and source should be 32 bit aligned.
++ * This should never happen since we're in control of both, but I want to know about
++ * it if it does.
++ */
++ if ((destination & 0x00ffffe0) != destination) {
++ printk ("acx chaincopy: destination block 0x%04x not aligned!\n", destination);
++ }
++ if (count > sizeof aligned_source) {
++ printk( KERN_ERR "chaincopy_to_slavemem overflow!\n" );
++ count = sizeof aligned_source;
++ }
++ if ((u32) source & 3) {
++ memcpy (aligned_source, source, count);
++ data = (u32 *) aligned_source;
++ }
++
++ /*
++ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
++ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
++ */
++ val = 2 << 16 | 1 << 2;
++ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
++
++ /*
++ * SLV_MEM_CP[23:5] = start of 1st block
++ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
++ */
++ val = destination & 0x00ffffe0;
++ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
++
++ /*
++ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
++ */
++ val = (destination & 0x00ffffe0) + (1<<2);
++ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
++
++ /*
++ * Write the data to the slave data register, rounding up to the end
++ * of the word containing the last byte (hence the > 0)
++ */
++ while (count > 0) {
++ writel (*data++, &adev->iobase[ACX_SLV_MEM_DATA]);
++ count -= 4;
++ }
++}
++
++
++/*
++ * Block copy from slave buffers using memory block chain mode. Copies from the ACX
++ * receive buffer structures with minimal intervention on our part.
++ * Interrupts should be disabled when calling this.
++ */
++void
++chaincopy_from_slavemem (acx_device_t *adev, u8 *destination, u32 source, int count)
++{
++ u32 val;
++ u32 *data = (u32 *) destination;
++ static u8 aligned_destination[WLAN_A4FR_MAXLEN_WEP_FCS];
++ int saved_count = count;
++
++ /*
++ * Warn if the pointers don't look right. Destination must fit in [23:5] with
++ * zero elsewhere and source should be 32 bit aligned.
++ * Turns out the network stack sends unaligned things, so fix them before
++ * copying to the ACX.
++ */
++ if ((source & 0x00ffffe0) != source) {
++ printk ("acx chaincopy: source block 0x%04x not aligned!\n", source);
++ dump_acxmem (adev, 0, 0x10000);
++ }
++ if ((u32) destination & 3) {
++ //printk ("acx chaincopy: data destination not word aligned!\n");
++ data = (u32 *) aligned_destination;
++ if (count > sizeof aligned_destination) {
++ printk( KERN_ERR "chaincopy_from_slavemem overflow!\n" );
++ count = sizeof aligned_destination;
++ }
++ }
++
++ /*
++ * SLV_MEM_CTL[17:16] = memory block chain mode with auto-increment
++ * SLV_MEM_CTL[5:2] = offset to data portion = 1 word
++ */
++ val = (2 << 16) | (1 << 2);
++ writel (val, &adev->iobase[ACX_SLV_MEM_CTL]);
++
++ /*
++ * SLV_MEM_CP[23:5] = start of 1st block
++ * SLV_MEM_CP[3:2] = offset to memblkptr = 0
++ */
++ val = source & 0x00ffffe0;
++ writel (val, &adev->iobase[ACX_SLV_MEM_CP]);
++
++ /*
++ * SLV_MEM_ADDR[23:2] = SLV_MEM_CTL[5:2] + SLV_MEM_CP[23:5]
++ */
++ val = (source & 0x00ffffe0) + (1<<2);
++ writel (val, &adev->iobase[ACX_SLV_MEM_ADDR]);
++
++ /*
++ * Read the data from the slave data register, rounding up to the end
++ * of the word containing the last byte (hence the > 0)
++ */
++ while (count > 0) {
++ *data++ = readl (&adev->iobase[ACX_SLV_MEM_DATA]);
++ count -= 4;
++ }
++
++ /*
++ * If the destination wasn't aligned, we would have saved it in
++ * the aligned buffer, so copy it where it should go.
++ */
++ if ((u32) destination & 3) {
++ memcpy (destination, aligned_destination, saved_count);
++ }
++}
++
++char
++printable (char c)
++{
++ return ((c >= 20) && (c < 127)) ? c : '.';
++}
++
++#if DUMP_MEM_DEFINED > 0
++static void
++dump_acxmem (acx_device_t *adev, u32 start, int length)
++{
++ int i;
++ u8 buf[16];
++
++ while (length > 0) {
++ printk ("%04x ", start);
++ copy_from_slavemem (adev, buf, start, 16);
++ for (i = 0; (i < 16) && (i < length); i++) {
++ printk ("%02x ", buf[i]);
++ }
++ for (i = 0; (i < 16) && (i < length); i++) {
++ printk ("%c", printable (buf[i]));
++ }
++ printk ("\n");
++ start += 16;
++ length -= 16;
++ }
++}
++#endif
++
++static void
++enable_acx_irq(acx_device_t *adev);
++static void
++disable_acx_irq(acx_device_t *adev);
++
++/*
++ * Return an acx pointer to the next transmit data block.
++ */
++u32
++allocate_acx_txbuf_space (acx_device_t *adev, int count) {
++ u32 block, next, last_block;
++ int blocks_needed;
++ unsigned long flags;
++
++ spin_lock_irqsave(&adev->txbuf_lock, flags);
++ /*
++ * Take 4 off the memory block size to account for the reserved word at the start of
++ * the block.
++ */
++ blocks_needed = count / (adev->memblocksize - 4);
++ if (count % (adev->memblocksize - 4))
++ blocks_needed++;
++
++ if (blocks_needed <= adev->acx_txbuf_blocks_free) {
++ /*
++ * Take blocks at the head of the free list.
++ */
++ last_block = block = adev->acx_txbuf_free;
++
++ /*
++ * Follow block pointers through the requested number of blocks both to
++ * find the new head of the free list and to set the flags for the blocks
++ * appropriately.
++ */
++ while (blocks_needed--) {
++ /*
++ * Keep track of the last block of the allocation
++ */
++ last_block = adev->acx_txbuf_free;
++
++ /*
++ * Make sure the end control flag is not set.
++ */
++ next = read_slavemem32 (adev, adev->acx_txbuf_free) & 0x7ffff;
++ write_slavemem32 (adev, adev->acx_txbuf_free, next);
++
++ /*
++ * Update the new head of the free list
++ */
++ adev->acx_txbuf_free = next << 5;
++ adev->acx_txbuf_blocks_free--;
++
++ }
++
++ /*
++ * Flag the last block both by clearing out the next pointer
++ * and marking the control field.
++ */
++ write_slavemem32 (adev, last_block, 0x02000000);
++
++ /*
++ * If we're out of buffers make sure the free list pointer is NULL
++ */
++ if (!adev->acx_txbuf_blocks_free) {
++ adev->acx_txbuf_free = 0;
++ }
++ }
++ else {
++ block = 0;
++ }
++ spin_unlock_irqrestore (&adev->txbuf_lock, flags);
++ return block;
++}
++
++/*
++ * Return buffer space back to the pool by following the next pointers until we find
++ * the block marked as the end. Point the last block to the head of the free list,
++ * then update the head of the free list to point to the newly freed memory.
++ * This routine gets called in interrupt context, so it shouldn't block to protect
++ * the integrity of the linked list. The ISR already holds the lock.
++ */
++void
++reclaim_acx_txbuf_space (acx_device_t *adev, u32 blockptr) {
++ u32 cur, last, next;
++ unsigned long flags;
++
++ spin_lock_irqsave (&adev->txbuf_lock, flags);
++ if ((blockptr >= adev->acx_txbuf_start) &&
++ (blockptr <= adev->acx_txbuf_start +
++ (adev->acx_txbuf_numblocks - 1) * adev->memblocksize)) {
++ cur = blockptr;
++ do {
++ last = cur;
++ next = read_slavemem32 (adev, cur);
++
++ /*
++ * Advance to the next block in this allocation
++ */
++ cur = (next & 0x7ffff) << 5;
++
++ /*
++ * This block now counts as free.
++ */
++ adev->acx_txbuf_blocks_free++;
++ } while (!(next & 0x02000000));
++
++ /*
++ * last now points to the last block of that allocation. Update the pointer
++ * in that block to point to the free list and reset the free list to the
++ * first block of the free call. If there were no free blocks, make sure
++ * the new end of the list marks itself as truly the end.
++ */
++ if (adev->acx_txbuf_free) {
++ write_slavemem32 (adev, last, adev->acx_txbuf_free >> 5);
++ }
++ else {
++ write_slavemem32 (adev, last, 0x02000000);
++ }
++ adev->acx_txbuf_free = blockptr;
++ }
++ spin_unlock_irqrestore(&adev->txbuf_lock, flags);
++}
++
++/*
++ * Initialize the pieces managing the transmit buffer pool on the ACX. The transmit
++ * buffer is a circular queue with one 32 bit word reserved at the beginning of each
++ * block. The upper 13 bits are a control field, of which only 0x02000000 has any
++ * meaning. The lower 19 bits are the address of the next block divided by 32.
++ */
++void
++init_acx_txbuf (acx_device_t *adev) {
++
++ /*
++ * acx100_s_init_memory_pools set up txbuf_start and txbuf_numblocks for us.
++ * All we need to do is reset the rest of the bookeeping.
++ */
++
++ adev->acx_txbuf_free = adev->acx_txbuf_start;
++ adev->acx_txbuf_blocks_free = adev->acx_txbuf_numblocks;
++
++ /*
++ * Initialization leaves the last transmit pool block without a pointer back to
++ * the head of the list, but marked as the end of the list. That's how we want
++ * to see it, too, so leave it alone. This is only ever called after a firmware
++ * reset, so the ACX memory is in the state we want.
++ */
++
++}
++
++INLINE_IO int
++adev_present(acx_device_t *adev)
++{
++ /* fast version (accesses the first register, IO_ACX_SOFT_RESET,
++ * which should be safe): */
++ return readl(adev->iobase) != 0xffffffff;
++}
++
++/***********************************************************************
++*/
++static inline txdesc_t*
++get_txdesc(acx_device_t *adev, int index)
++{
++ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size);
++}
++
++static inline txdesc_t*
++advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc)
++{
++ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size);
++}
++
++static txhostdesc_t*
++get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ index /= adev->txdesc_size;
++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ return &adev->txhostdesc_start[index*2];
++}
++
++static inline client_t*
++get_txc(acx_device_t *adev, txdesc_t* txdesc)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ index /= adev->txdesc_size;
++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ return adev->txc[index];
++}
++
++static inline u16
++get_txr(acx_device_t *adev, txdesc_t* txdesc)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ index /= adev->txdesc_size;
++ return adev->txr[index];
++}
++
++static inline void
++put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return;
++ }
++ index /= adev->txdesc_size;
++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return;
++ }
++ adev->txc[index] = c;
++ adev->txr[index] = r111;
++}
++
++
++/***********************************************************************
++** EEPROM and PHY read/write helpers
++*/
++/***********************************************************************
++** acxmem_read_eeprom_byte
++**
++** Function called to read an octet in the EEPROM.
++**
++** This function is used by acxmem_e_probe to check if the
++** connected card is a legal one or not.
++**
++** Arguments:
++** adev ptr to acx_device structure
++** addr address to read in the EEPROM
++** charbuf ptr to a char. This is where the read octet
++** will be stored
++*/
++int
++acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf)
++{
++ int result;
++ int count;
++
++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
++
++ count = 0xffff;
++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
++ /* scheduling away instead of CPU burning loop
++ * doesn't seem to work here at all:
++ * awful delay, sometimes also failure.
++ * Doesn't matter anyway (only small delay). */
++ if (unlikely(!--count)) {
++ printk("%s: timeout waiting for EEPROM read\n",
++ adev->ndev->name);
++ result = NOT_OK;
++ goto fail;
++ }
++ cpu_relax();
++ }
++
++ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA);
++ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf);
++ result = OK;
++
++fail:
++ return result;
++}
++
++
++/***********************************************************************
++** We don't lock hw accesses here since we never r/w eeprom in IRQ
++** Note: this function sleeps only because of GFP_KERNEL alloc
++*/
++#ifdef UNUSED
++int
++acxmem_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf)
++{
++ u8 *data_verify = NULL;
++ unsigned long flags;
++ int count, i;
++ int result = NOT_OK;
++ u16 gpio_orig;
++
++ printk("acx: WARNING! I would write to EEPROM now. "
++ "Since I really DON'T want to unless you know "
++ "what you're doing (THIS CODE WILL PROBABLY "
++ "NOT WORK YET!), I will abort that now. And "
++ "definitely make sure to make a "
++ "/proc/driver/acx_wlan0_eeprom backup copy first!!! "
++ "(the EEPROM content includes the PCI config header!! "
++ "If you kill important stuff, then you WILL "
++ "get in trouble and people DID get in trouble already)\n");
++ return OK;
++
++ FN_ENTER;
++
++ data_verify = kmalloc(len, GFP_KERNEL);
++ if (!data_verify) {
++ goto end;
++ }
++
++ /* first we need to enable the OE (EEPROM Output Enable) GPIO line
++ * to be able to write to the EEPROM.
++ * NOTE: an EEPROM writing success has been reported,
++ * but you probably have to modify GPIO_OUT, too,
++ * and you probably need to activate a different GPIO
++ * line instead! */
++ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE);
++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1);
++ write_flush(adev);
++
++ /* ok, now start writing the data out */
++ for (i = 0; i < len; i++) {
++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
++ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i));
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_EEPROM_CTL, 1);
++
++ count = 0xffff;
++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
++ if (unlikely(!--count)) {
++ printk("WARNING, DANGER!!! "
++ "Timeout waiting for EEPROM write\n");
++ goto end;
++ }
++ cpu_relax();
++ }
++ }
++
++ /* disable EEPROM writing */
++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig);
++ write_flush(adev);
++
++ /* now start a verification run */
++ for (i = 0; i < len; i++) {
++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
++
++ count = 0xffff;
++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
++ if (unlikely(!--count)) {
++ printk("timeout waiting for EEPROM read\n");
++ goto end;
++ }
++ cpu_relax();
++ }
++
++ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA);
++ }
++
++ if (0 == memcmp(charbuf, data_verify, len))
++ result = OK; /* read data matches, success */
++
++end:
++ kfree(data_verify);
++ FN_EXIT1(result);
++ return result;
++}
++#endif /* UNUSED */
++
++
++/***********************************************************************
++** acxmem_s_read_phy_reg
++**
++** Messing with rx/tx disabling and enabling here
++** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic
++*/
++int
++acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
++{
++ int result = NOT_OK;
++ int count;
++
++ FN_ENTER;
++
++ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_PHY_CTL, 2);
++
++ count = 0xffff;
++ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
++ /* scheduling away instead of CPU burning loop
++ * doesn't seem to work here at all:
++ * awful delay, sometimes also failure.
++ * Doesn't matter anyway (only small delay). */
++ if (unlikely(!--count)) {
++ printk("%s: timeout waiting for phy read\n",
++ adev->ndev->name);
++ *charbuf = 0;
++ goto fail;
++ }
++ cpu_relax();
++ }
++
++ log(L_DEBUG, "count was %u\n", count);
++ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA);
++
++ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg);
++ result = OK;
++ goto fail; /* silence compiler warning */
++fail:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++*/
++int
++acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
++{
++ int count;
++ FN_ENTER;
++
++ /* mprusko said that 32bit accesses result in distorted sensitivity
++ * on his card. Unconfirmed, looks like it's not true (most likely since we
++ * now properly flush writes). */
++ write_reg32(adev, IO_ACX_PHY_DATA, value);
++ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_PHY_CTL, 1);
++ write_flush(adev);
++
++ count = 0xffff;
++ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
++ /* scheduling away instead of CPU burning loop
++ * doesn't seem to work here at all:
++ * awful delay, sometimes also failure.
++ * Doesn't matter anyway (only small delay). */
++ if (unlikely(!--count)) {
++ printk("%s: timeout waiting for phy read\n",
++ adev->ndev->name);
++ goto fail;
++ }
++ cpu_relax();
++ }
++
++ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg);
++ fail:
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++#define NO_AUTO_INCREMENT 1
++
++/***********************************************************************
++** acxmem_s_write_fw
++**
++** Write the firmware image into the card.
++**
++** Arguments:
++** adev wlan device structure
++** fw_image firmware image.
++**
++** Returns:
++** 1 firmware image corrupted
++** 0 success
++*/
++static int
++acxmem_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset)
++{
++ int len, size, checkMismatch = -1;
++ u32 sum, v32, tmp, id;
++ /* we skip the first four bytes which contain the control sum */
++ const u8 *p = (u8*)fw_image + 4;
++
++ /* start the image checksum by adding the image size value */
++ sum = p[0]+p[1]+p[2]+p[3];
++ p += 4;
++
++#ifdef NOPE
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
++#else
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
++ write_flush(adev);
++#endif
++#endif
++ len = 0;
++ size = le32_to_cpu(fw_image->size) & (~3);
++
++ while (likely(len < size)) {
++ v32 = be32_to_cpu(*(u32*)p);
++ sum += p[0]+p[1]+p[2]+p[3];
++ p += 4;
++ len += 4;
++
++#ifdef NOPE
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
++ write_flush(adev);
++#endif
++ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32);
++ write_flush(adev);
++#endif
++ write_slavemem32 (adev, offset + len - 4, v32);
++
++ id = read_id_register (adev);
++
++ /*
++ * check the data written
++ */
++ tmp = read_slavemem32 (adev, offset + len - 4);
++ if (checkMismatch && (tmp != v32)) {
++ printk ("first data mismatch at 0x%08x good 0x%08x bad 0x%08x id 0x%08x\n",
++ offset + len - 4, v32, tmp, id);
++ checkMismatch = 0;
++ }
++ }
++ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n",
++ size, sum, le32_to_cpu(fw_image->chksum));
++
++ /* compare our checksum with the stored image checksum */
++ return (sum != le32_to_cpu(fw_image->chksum));
++}
++
++
++/***********************************************************************
++** acxmem_s_validate_fw
++**
++** Compare the firmware image given with
++** the firmware image written into the card.
++**
++** Arguments:
++** adev wlan device structure
++** fw_image firmware image.
++**
++** Returns:
++** NOT_OK firmware image corrupted or not correctly written
++** OK success
++*/
++static int
++acxmem_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image,
++ u32 offset)
++{
++ u32 sum, v32, w32;
++ int len, size;
++ int result = OK;
++ /* we skip the first four bytes which contain the control sum */
++ const u8 *p = (u8*)fw_image + 4;
++
++ /* start the image checksum by adding the image size value */
++ sum = p[0]+p[1]+p[2]+p[3];
++ p += 4;
++
++ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
++
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
++#else
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
++#endif
++
++ len = 0;
++ size = le32_to_cpu(fw_image->size) & (~3);
++
++ while (likely(len < size)) {
++ v32 = be32_to_cpu(*(u32*)p);
++ p += 4;
++ len += 4;
++
++#ifdef NOPE
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
++#endif
++ udelay(10);
++ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA);
++#endif
++ w32 = read_slavemem32 (adev, offset + len - 4);
++
++ if (unlikely(w32 != v32)) {
++ printk("acx: FATAL: firmware upload: "
++ "data parts at offset %d don't match\n(0x%08X vs. 0x%08X)!\n"
++ "I/O timing issues or defective memory, with DWL-xx0+? "
++ "ACX_IO_WIDTH=16 may help. Please report\n",
++ len, v32, w32);
++ result = NOT_OK;
++ break;
++ }
++
++ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24);
++ }
++
++ /* sum control verification */
++ if (result != NOT_OK) {
++ if (sum != le32_to_cpu(fw_image->chksum)) {
++ printk("acx: FATAL: firmware upload: "
++ "checksums don't match!\n");
++ result = NOT_OK;
++ }
++ }
++
++ return result;
++}
++
++
++/***********************************************************************
++** acxmem_s_upload_fw
++**
++** Called from acx_reset_dev
++*/
++static int
++acxmem_s_upload_fw(acx_device_t *adev)
++{
++ firmware_image_t *fw_image = NULL;
++ int res = NOT_OK;
++ int try;
++ u32 file_size;
++ char *filename = "WLANGEN.BIN";
++#ifdef PATCH_AROUND_BAD_SPOTS
++ u32 offset;
++ int i;
++ /*
++ * arm-linux-objdump -d patch.bin, or
++ * od -Ax -t x4 patch.bin after finding the bounds
++ * of the .text section with arm-linux-objdump -s patch.bin
++ */
++ u32 patch[] = {
++ 0xe584c030, 0xe59fc008,
++ 0xe92d1000, 0xe59fc004, 0xe8bd8000, 0x0000080c,
++ 0x0000aa68, 0x605a2200, 0x2c0a689c, 0x2414d80a,
++ 0x2f00689f, 0x1c27d007, 0x06241e7c, 0x2f000e24,
++ 0xe000d1f6, 0x602e6018, 0x23036468, 0x480203db,
++ 0x60ca6003, 0xbdf0750a, 0xffff0808
++ };
++#endif
++
++ FN_ENTER;
++ /* No combined image; tell common we need the radio firmware, too */
++ adev->need_radio_fw = 1;
++
++ fw_image = acx_s_read_fw(adev->dev, filename, &file_size);
++ if (!fw_image) {
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++ }
++
++ for (try = 1; try <= 5; try++) {
++ res = acxmem_s_write_fw(adev, fw_image, 0);
++ log(L_DEBUG|L_INIT, "acx_write_fw (main): %d\n", res);
++ if (OK == res) {
++ res = acxmem_s_validate_fw(adev, fw_image, 0);
++ log(L_DEBUG|L_INIT, "acx_validate_fw "
++ "(main): %d\n", res);
++ }
++
++ if (OK == res) {
++ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED);
++ break;
++ }
++ printk("acx: firmware upload attempt #%d FAILED, "
++ "retrying...\n", try);
++ acx_s_msleep(1000); /* better wait for a while... */
++ }
++
++#ifdef PATCH_AROUND_BAD_SPOTS
++ /*
++ * Only want to do this if the firmware is exactly what we expect for an
++ * iPaq 4700; otherwise, bad things would ensue.
++ */
++ if ((HX4700_FIRMWARE_CHECKSUM == fw_image->chksum) ||
++ (HX4700_ALTERNATE_FIRMWARE_CHECKSUM == fw_image->chksum)) {
++ /*
++ * Put the patch after the main firmware image. 0x950c contains
++ * the ACX's idea of the end of the firmware. Use that location to
++ * load ours (which depends on that location being 0xab58) then
++ * update that location to point to after ours.
++ */
++
++ offset = read_slavemem32 (adev, 0x950c);
++
++ log (L_DEBUG, "acx: patching in at 0x%04x\n", offset);
++
++ for (i = 0; i < sizeof(patch) / sizeof(patch[0]); i++) {
++ write_slavemem32 (adev, offset, patch[i]);
++ offset += sizeof(u32);
++ }
++
++ /*
++ * Patch the instruction at 0x0804 to branch to our ARM patch at 0xab58
++ */
++ write_slavemem32 (adev, 0x0804, 0xea000000 + (0xab58-0x0804-8)/4);
++
++ /*
++ * Patch the instructions at 0x1f40 to branch to our Thumb patch at 0xab74
++ *
++ * 4a00 ldr r2, [pc, #0]
++ * 4710 bx r2
++ * .data 0xab74+1
++ */
++ write_slavemem32 (adev, 0x1f40, 0x47104a00);
++ write_slavemem32 (adev, 0x1f44, 0x0000ab74+1);
++
++ /*
++ * Bump the end of the firmware up to beyond our patch.
++ */
++ write_slavemem32 (adev, 0x950c, offset);
++
++ }
++#endif
++
++ vfree(fw_image);
++
++ FN_EXIT1(res);
++ return res;
++}
++
++
++/***********************************************************************
++** acxmem_s_upload_radio
++**
++** Uploads the appropriate radio module firmware into the card.
++*/
++int
++acxmem_s_upload_radio(acx_device_t *adev)
++{
++ acx_ie_memmap_t mm;
++ firmware_image_t *radio_image;
++ acx_cmd_radioinit_t radioinit;
++ int res = NOT_OK;
++ int try;
++ u32 offset;
++ u32 size;
++ char filename[sizeof("RADIONN.BIN")];
++
++ if (!adev->need_radio_fw) return OK;
++
++ FN_ENTER;
++
++ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
++ offset = le32_to_cpu(mm.CodeEnd);
++
++ snprintf(filename, sizeof(filename), "RADIO%02x.BIN",
++ adev->radio_type);
++ radio_image = acx_s_read_fw(adev->dev, filename, &size);
++ if (!radio_image) {
++ printk("acx: can't load radio module '%s'\n", filename);
++ goto fail;
++ }
++
++ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
++
++ for (try = 1; try <= 5; try++) {
++ res = acxmem_s_write_fw(adev, radio_image, offset);
++ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res);
++ if (OK == res) {
++ res = acxmem_s_validate_fw(adev, radio_image, offset);
++ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res);
++ }
++
++ if (OK == res)
++ break;
++ printk("acx: radio firmware upload attempt #%d FAILED, "
++ "retrying...\n", try);
++ acx_s_msleep(1000); /* better wait for a while... */
++ }
++
++ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
++ radioinit.offset = cpu_to_le32(offset);
++
++ /* no endian conversion needed, remains in card CPU area: */
++ radioinit.len = radio_image->size;
++
++ vfree(radio_image);
++
++ if (OK != res)
++ goto fail;
++
++ /* will take a moment so let's have a big timeout */
++ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT,
++ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000));
++
++ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
++
++fail:
++ FN_EXIT1(res);
++ return res;
++}
++
++/***********************************************************************
++** acxmem_l_reset_mac
++**
++** MAC will be reset
++** Call context: reset_dev
++*/
++static void
++acxmem_l_reset_mac(acx_device_t *adev)
++{
++ int count;
++ FN_ENTER;
++
++ /* halt eCPU */
++ set_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
++
++ /* now do soft reset of eCPU, set bit */
++ set_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
++ log(L_DEBUG, "%s: enable soft reset...\n", __func__);
++
++ /* Windows driver sleeps here for a while with this sequence */
++ for (count = 0; count < 200; count++) {
++ udelay (50);
++ }
++
++ /* now clear bit again: deassert eCPU reset */
++ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__);
++ clear_regbits (adev, IO_ACX_SOFT_RESET, 0x1);
++
++ /* now start a burst read from initial EEPROM */
++ set_regbits (adev, IO_ACX_EE_START, 0x1);
++
++ /*
++ * Windows driver sleeps here for a while with this sequence
++ */
++ for (count = 0; count < 200; count++) {
++ udelay (50);
++ }
++
++ /* Windows driver writes 0x10000 to register 0x808 here */
++
++ write_reg32 (adev, 0x808, 0x10000);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_s_verify_init
++*/
++static int
++acxmem_s_verify_init(acx_device_t *adev)
++{
++ int result = NOT_OK;
++ unsigned long timeout;
++
++ FN_ENTER;
++
++ timeout = jiffies + 2*HZ;
++ for (;;) {
++ u32 irqstat = read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES);
++ if ((irqstat != 0xFFFFFFFF) && (irqstat & HOST_INT_FCS_THRESHOLD)) {
++ result = OK;
++ write_reg32(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD);
++ break;
++ }
++ if (time_after(jiffies, timeout))
++ break;
++ /* Init may take up to ~0.5 sec total */
++ acx_s_msleep(50);
++ }
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** A few low-level helpers
++**
++** Note: these functions are not protected by lock
++** and thus are never allowed to be called from IRQ.
++** Also they must not race with fw upload which uses same hw regs
++*/
++
++/***********************************************************************
++** acxmem_write_cmd_type_status
++*/
++
++static inline void
++acxmem_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status)
++{
++ write_slavemem32 (adev, (u32) adev->cmd_area, type | (status << 16));
++ write_flush(adev);
++}
++
++
++/***********************************************************************
++** acxmem_read_cmd_type_status
++*/
++static u32
++acxmem_read_cmd_type_status(acx_device_t *adev)
++{
++ u32 cmd_type, cmd_status;
++
++ cmd_type = read_slavemem32 (adev, (u32) adev->cmd_area);
++
++ cmd_status = (cmd_type >> 16);
++ cmd_type = (u16)cmd_type;
++
++ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n",
++ cmd_type, cmd_status,
++ acx_cmd_status_str(cmd_status));
++
++ return cmd_status;
++}
++
++
++/***********************************************************************
++** acxmem_s_reset_dev
++**
++** Arguments:
++** netdevice that contains the adev variable
++** Returns:
++** NOT_OK on fail
++** OK on success
++** Side effects:
++** device is hard reset
++** Call context:
++** acxmem_e_probe
++** Comment:
++** This resets the device using low level hardware calls
++** as well as uploads and verifies the firmware to the card
++*/
++
++static inline void
++init_mboxes(acx_device_t *adev)
++{
++ u32 cmd_offs, info_offs;
++
++ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS);
++ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS);
++ adev->cmd_area = (u8*) cmd_offs;
++ adev->info_area = (u8*) info_offs;
++ /*
++ log(L_DEBUG, "iobase2=%p\n"
++ */
++ log( L_DEBUG, "cmd_mbox_offset=%X cmd_area=%p\n"
++ "info_mbox_offset=%X info_area=%p\n",
++ cmd_offs, adev->cmd_area,
++ info_offs, adev->info_area);
++}
++
++
++static inline void
++read_eeprom_area(acx_device_t *adev)
++{
++#if ACX_DEBUG > 1
++ int offs;
++ u8 tmp;
++
++ for (offs = 0x8c; offs < 0xb9; offs++)
++ acxmem_read_eeprom_byte(adev, offs, &tmp);
++#endif
++}
++
++static int
++acxmem_s_reset_dev(acx_device_t *adev)
++{
++ const char* msg = "";
++ unsigned long flags;
++ int result = NOT_OK;
++ u16 hardware_info;
++ u16 ecpu_ctrl;
++ int count;
++ u32 tmp;
++
++ FN_ENTER;
++ /*
++ write_reg32 (adev, IO_ACX_SLV_MEM_CP, 0);
++ */
++ /* reset the device to make sure the eCPU is stopped
++ * to upload the firmware correctly */
++
++ acx_lock(adev, flags);
++
++ /* Windows driver does some funny things here */
++ /*
++ * clear bit 0x200 in register 0x2A0
++ */
++ clear_regbits (adev, 0x2A0, 0x200);
++
++ /*
++ * Set bit 0x200 in ACX_GPIO_OUT
++ */
++ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
++
++ /*
++ * read register 0x900 until its value is 0x8400104C, sleeping
++ * in between reads if it's not immediate
++ */
++ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
++ count = 500;
++ while (count-- && (tmp != ACX_VENDOR_ID)) {
++ mdelay (10);
++ tmp = read_reg32 (adev, REG_ACX_VENDOR_ID);
++ }
++
++ /* end what Windows driver does */
++
++ acxmem_l_reset_mac(adev);
++
++ ecpu_ctrl = read_reg32(adev, IO_ACX_ECPU_CTRL) & 1;
++ if (!ecpu_ctrl) {
++ msg = "eCPU is already running. ";
++ goto end_unlock;
++ }
++
++#ifdef WE_DONT_NEED_THAT_DO_WE
++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) {
++ /* eCPU most likely means "embedded CPU" */
++ msg = "eCPU did not start after boot from flash. ";
++ goto end_unlock;
++ }
++
++ /* check sense on reset flags */
++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) {
++ printk("%s: eCPU did not start after boot (SOR), "
++ "is this fatal?\n", adev->ndev->name);
++ }
++#endif
++ /* scan, if any, is stopped now, setting corresponding IRQ bit */
++ adev->irq_status |= HOST_INT_SCAN_COMPLETE;
++
++ acx_unlock(adev, flags);
++
++ /* need to know radio type before fw load */
++ /* Need to wait for arrival of this information in a loop,
++ * most probably since eCPU runs some init code from EEPROM
++ * (started burst read in reset_mac()) which also
++ * sets the radio type ID */
++
++ count = 0xffff;
++ do {
++ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION);
++ if (!--count) {
++ msg = "eCPU didn't indicate radio type";
++ goto end_fail;
++ }
++ cpu_relax();
++ } while (!(hardware_info & 0xff00)); /* radio type still zero? */
++ printk("ACX radio type 0x%02x\n", (hardware_info >> 8) & 0xff);
++ /* printk("DEBUG: count %d\n", count); */
++ adev->form_factor = hardware_info & 0xff;
++ adev->radio_type = hardware_info >> 8;
++
++ /* load the firmware */
++ if (OK != acxmem_s_upload_fw(adev))
++ goto end_fail;
++
++ /* acx_s_msleep(10); this one really shouldn't be required */
++
++ /* now start eCPU by clearing bit */
++ clear_regbits (adev, IO_ACX_ECPU_CTRL, 0x1);
++ log(L_DEBUG, "booted eCPU up and waiting for completion...\n");
++
++ /* Windows driver clears bit 0x200 in register 0x2A0 here */
++ clear_regbits (adev, 0x2A0, 0x200);
++
++ /* Windows driver sets bit 0x200 in ACX_GPIO_OUT here */
++ set_regbits (adev, IO_ACX_GPIO_OUT, 0x200);
++ /* wait for eCPU bootup */
++ if (OK != acxmem_s_verify_init(adev)) {
++ msg = "timeout waiting for eCPU. ";
++ goto end_fail;
++ }
++ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n");
++ init_mboxes(adev);
++ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
++
++ /* test that EEPROM is readable */
++ read_eeprom_area(adev);
++
++ result = OK;
++ goto end;
++
++/* Finish error message. Indicate which function failed */
++end_unlock:
++ acx_unlock(adev, flags);
++end_fail:
++ printk("acx: %sreset_dev() FAILED\n", msg);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acxmem_s_issue_cmd_timeo
++**
++** Sends command to fw, extract result
++**
++** NB: we do _not_ take lock inside, so be sure to not touch anything
++** which may interfere with IRQ handler operation
++**
++** TODO: busy wait is a bit silly, so:
++** 1) stop doing many iters - go to sleep after first
++** 2) go to waitqueue based approach: wait, not poll!
++*/
++#undef FUNC
++#define FUNC "issue_cmd"
++
++#if !ACX_DEBUG
++int
++acxmem_s_issue_cmd_timeo(
++ acx_device_t *adev,
++ unsigned int cmd,
++ void *buffer,
++ unsigned buflen,
++ unsigned cmd_timeout)
++{
++#else
++int
++acxmem_s_issue_cmd_timeo_debug(
++ acx_device_t *adev,
++ unsigned cmd,
++ void *buffer,
++ unsigned buflen,
++ unsigned cmd_timeout,
++ const char* cmdstr)
++{
++ unsigned long start = jiffies;
++#endif
++ const char *devname;
++ unsigned counter;
++ u16 irqtype;
++ int i, j;
++ u8 *p;
++ u16 cmd_status;
++ unsigned long timeout;
++
++ FN_ENTER;
++
++ devname = adev->ndev->name;
++ if (!devname || !devname[0] || devname[4]=='%')
++ devname = "acx";
++
++ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n",
++ cmdstr, buflen, cmd_timeout,
++ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
++
++ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) {
++ printk("%s: "FUNC"(): firmware is not loaded yet, "
++ "cannot execute commands!\n", devname);
++ goto bad;
++ }
++
++ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) {
++ printk("input buffer (len=%u):\n", buflen);
++ acx_dump_bytes(buffer, buflen);
++ }
++
++ /* wait for firmware to become idle for our command submission */
++ timeout = HZ/5;
++ counter = (timeout * 1000 / HZ) - 1; /* in ms */
++ timeout += jiffies;
++ do {
++ cmd_status = acxmem_read_cmd_type_status(adev);
++ /* Test for IDLE state */
++ if (!cmd_status)
++ break;
++ if (counter % 8 == 0) {
++ if (time_after(jiffies, timeout)) {
++ counter = 0;
++ break;
++ }
++ /* we waited 8 iterations, no luck. Sleep 8 ms */
++ acx_s_msleep(8);
++ }
++ } while (likely(--counter));
++
++ if (!counter) {
++ /* the card doesn't get idle, we're in trouble */
++ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n",
++ devname, cmd_status);
++#if DUMP_IF_SLOW > 0
++ dump_acxmem (adev, 0, 0x10000);
++ panic ("not idle");
++#endif
++ goto bad;
++ } else if (counter < 190) { /* if waited >10ms... */
++ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. "
++ "Please report\n", 199 - counter);
++ }
++
++ /* now write the parameters of the command if needed */
++ if (buffer && buflen) {
++ /* if it's an INTERROGATE command, just pass the length
++ * of parameters to read, as data */
++#if CMD_DISCOVERY
++ if (cmd == ACX1xx_CMD_INTERROGATE)
++ memset_io(adev->cmd_area + 4, 0xAA, buflen);
++#endif
++ /*
++ * slave memory version
++ */
++ copy_to_slavemem (adev, (u32) (adev->cmd_area + 4), buffer,
++ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen);
++ }
++ /* now write the actual command type */
++ acxmem_write_cmd_type_status(adev, cmd, 0);
++
++ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */
++ adev->irq_status &= ~HOST_INT_CMD_COMPLETE;
++
++ /* execute command */
++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD);
++ write_flush(adev);
++
++ /* wait for firmware to process command */
++
++ /* Ensure nonzero and not too large timeout.
++ ** Also converts e.g. 100->99, 200->199
++ ** which is nice but not essential */
++ cmd_timeout = (cmd_timeout-1) | 1;
++ if (unlikely(cmd_timeout > 1199))
++ cmd_timeout = 1199;
++
++ /* we schedule away sometimes (timeout can be large) */
++ counter = cmd_timeout;
++ timeout = jiffies + cmd_timeout * HZ / 1000;
++ do {
++ if (!adev->irqs_active) { /* IRQ disabled: poll */
++ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
++ if (irqtype & HOST_INT_CMD_COMPLETE) {
++ write_reg16(adev, IO_ACX_IRQ_ACK,
++ HOST_INT_CMD_COMPLETE);
++ break;
++ }
++ } else { /* Wait when IRQ will set the bit */
++ irqtype = adev->irq_status;
++ if (irqtype & HOST_INT_CMD_COMPLETE)
++ break;
++ }
++
++ if (counter % 8 == 0) {
++ if (time_after(jiffies, timeout)) {
++ counter = 0;
++ break;
++ }
++ /* we waited 8 iterations, no luck. Sleep 8 ms */
++ acx_s_msleep(8);
++ }
++ } while (likely(--counter));
++
++ /* save state for debugging */
++ cmd_status = acxmem_read_cmd_type_status(adev);
++
++ /* put the card in IDLE state */
++ acxmem_write_cmd_type_status(adev, ACX1xx_CMD_RESET, 0);
++
++ if (!counter) { /* timed out! */
++ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. "
++ "irq bits:0x%04X irq_status:0x%04X timeout:%dms "
++ "cmd_status:%d (%s)\n",
++ devname, (adev->irqs_active) ? "waiting" : "polling",
++ irqtype, adev->irq_status, cmd_timeout,
++ cmd_status, acx_cmd_status_str(cmd_status));
++ printk("%s: "FUNC"(): device irq status 0x%04x\n",
++ devname, read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES));
++ printk("%s: "FUNC"(): IO_ACX_IRQ_MASK 0x%04x IO_ACX_FEMR 0x%04x\n",
++ devname,
++ read_reg16 (adev, IO_ACX_IRQ_MASK),
++ read_reg16 (adev, IO_ACX_FEMR));
++ if (read_reg16 (adev, IO_ACX_IRQ_MASK) == 0xffff) {
++ printk ("acxmem: firmware probably hosed - reloading\n");
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
++ {
++ pm_message_t state;
++ acxmem_e_suspend (resume_pdev, state);
++ }
++#else
++ acxmem_e_suspend (adev->dev, 0);
++#endif
++ {
++ struct work_struct *notused;
++ fw_resumer (notused);
++ }
++ }
++
++ goto bad;
++ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */
++ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. "
++ "count:%d. Please report\n",
++ (adev->irqs_active) ? "waited" : "polled",
++ cmd_timeout - counter, counter);
++ }
++
++ if (1 != cmd_status) { /* it is not a 'Success' */
++ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). "
++ "Took %dms of %d\n",
++ devname, cmd_status, acx_cmd_status_str(cmd_status),
++ cmd_timeout - counter, cmd_timeout);
++ /* zero out result buffer
++ * WARNING: this will trash stack in case of illegally large input
++ * length! */
++ if (buflen > 388) {
++ /*
++ * 388 is maximum command length
++ */
++ printk ("invalid length 0x%08x\n", buflen);
++ buflen = 388;
++ }
++ p = (u8 *) buffer;
++ for (i = 0; i < buflen; i+= 16) {
++ printk ("%04x:", i);
++ for (j = 0; (j < 16) && (i+j < buflen); j++) {
++ printk (" %02x", *p++);
++ }
++ printk ("\n");
++ }
++
++ if (buffer && buflen)
++ memset(buffer, 0, buflen);
++ goto bad;
++ }
++
++ /* read in result parameters if needed */
++ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) {
++ copy_from_slavemem (adev, buffer, (u32) (adev->cmd_area + 4), buflen);
++ if (acx_debug & L_DEBUG) {
++ printk("output buffer (len=%u): ", buflen);
++ acx_dump_bytes(buffer, buflen);
++ }
++ }
++
++/* ok: */
++ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n",
++ cmdstr, jiffies - start);
++ FN_EXIT1(OK);
++ return OK;
++
++bad:
++ /* Give enough info so that callers can avoid
++ ** printing their own diagnostic messages */
++#if ACX_DEBUG
++ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
++#else
++ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
++#endif
++ dump_stack();
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++*/
++#if defined(NONESSENTIAL_FEATURES)
++typedef struct device_id {
++ unsigned char id[6];
++ char *descr;
++ char *type;
++} device_id_t;
++
++static const device_id_t
++device_ids[] =
++{
++ {
++ {'G', 'l', 'o', 'b', 'a', 'l'},
++ NULL,
++ NULL,
++ },
++ {
++ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
++ "uninitialized",
++ "SpeedStream SS1021 or Gigafast WF721-AEX"
++ },
++ {
++ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85},
++ "non-standard",
++ "DrayTek Vigor 520"
++ },
++ {
++ {'?', '?', '?', '?', '?', '?'},
++ "non-standard",
++ "Level One WPC-0200"
++ },
++ {
++ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
++ "empty",
++ "DWL-650+ variant"
++ }
++};
++
++static void
++acx_show_card_eeprom_id(acx_device_t *adev)
++{
++ unsigned char buffer[CARD_EEPROM_ID_SIZE];
++ int i;
++
++ memset(&buffer, 0, CARD_EEPROM_ID_SIZE);
++ /* use direct EEPROM access */
++ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) {
++ if (OK != acxmem_read_eeprom_byte(adev,
++ ACX100_EEPROM_ID_OFFSET + i,
++ &buffer[i])) {
++ printk("acx: reading EEPROM FAILED\n");
++ break;
++ }
++ }
++
++ for (i = 0; i < VEC_SIZE(device_ids); i++) {
++ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) {
++ if (device_ids[i].descr) {
++ printk("acx: EEPROM card ID string check "
++ "found %s card ID: is this %s?\n",
++ device_ids[i].descr, device_ids[i].type);
++ }
++ break;
++ }
++ }
++ if (i == VEC_SIZE(device_ids)) {
++ printk("acx: EEPROM card ID string check found "
++ "unknown card: expected 'Global', got '%.*s\'. "
++ "Please report\n", CARD_EEPROM_ID_SIZE, buffer);
++ }
++}
++#endif /* NONESSENTIAL_FEATURES */
++
++/***********************************************************************
++** acxmem_free_desc_queues
++**
++** Releases the queues that have been allocated, the
++** others have been initialised to NULL so this
++** function can be used if only part of the queues were allocated.
++*/
++
++void
++acxmem_free_desc_queues(acx_device_t *adev)
++{
++#define ACX_FREE_QUEUE(size, ptr, phyaddr) \
++ if (ptr) { \
++ kfree(ptr); \
++ ptr = NULL; \
++ size = 0; \
++ }
++
++ FN_ENTER;
++
++ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy);
++ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy);
++
++ adev->txdesc_start = NULL;
++
++ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy);
++ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy);
++
++ adev->rxdesc_start = NULL;
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_s_delete_dma_regions
++*/
++static void
++acxmem_s_delete_dma_regions(acx_device_t *adev)
++{
++ unsigned long flags;
++
++ FN_ENTER;
++ /* disable radio Tx/Rx. Shouldn't we use the firmware commands
++ * here instead? Or are we that much down the road that it's no
++ * longer possible here? */
++ /*
++ * slave memory interface really doesn't like this.
++ */
++ /*
++ write_reg16(adev, IO_ACX_ENABLE, 0);
++ */
++
++ acx_s_msleep(100);
++
++ acx_lock(adev, flags);
++ acxmem_free_desc_queues(adev);
++ acx_unlock(adev, flags);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_e_probe
++**
++** Probe routine called when a PCI device w/ matching ID is found.
++** Here's the sequence:
++** - Allocate the PCI resources.
++** - Read the PCMCIA attribute memory to make sure we have a WLAN card
++** - Reset the MAC
++** - Initialize the dev and wlan data
++** - Initialize the MAC
++**
++** pdev - ptr to pci device structure containing info about pci configuration
++** id - ptr to the device id entry that matched this device
++*/
++static const u16
++IO_ACX100[] =
++{
++ 0x0000, /* IO_ACX_SOFT_RESET */
++
++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
++ 0x0018, /* IO_ACX_SLV_MEM_DATA */
++ 0x001c, /* IO_ACX_SLV_MEM_CTL */
++ 0x0020, /* IO_ACX_SLV_END_CTL */
++
++ 0x0034, /* IO_ACX_FEMR */
++
++ 0x007c, /* IO_ACX_INT_TRIG */
++ 0x0098, /* IO_ACX_IRQ_MASK */
++ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */
++ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */
++ 0x00ac, /* IO_ACX_IRQ_ACK */
++ 0x00b0, /* IO_ACX_HINT_TRIG */
++
++ 0x0104, /* IO_ACX_ENABLE */
++
++ 0x0250, /* IO_ACX_EEPROM_CTL */
++ 0x0254, /* IO_ACX_EEPROM_ADDR */
++ 0x0258, /* IO_ACX_EEPROM_DATA */
++ 0x025c, /* IO_ACX_EEPROM_CFG */
++
++ 0x0268, /* IO_ACX_PHY_ADDR */
++ 0x026c, /* IO_ACX_PHY_DATA */
++ 0x0270, /* IO_ACX_PHY_CTL */
++
++ 0x0290, /* IO_ACX_GPIO_OE */
++
++ 0x0298, /* IO_ACX_GPIO_OUT */
++
++ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */
++ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */
++ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */
++
++ 0x02d0, /* IO_ACX_EE_START */
++ 0x02d4, /* IO_ACX_SOR_CFG */
++ 0x02d8 /* IO_ACX_ECPU_CTRL */
++};
++
++static const u16
++IO_ACX111[] =
++{
++ 0x0000, /* IO_ACX_SOFT_RESET */
++
++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
++ 0x0018, /* IO_ACX_SLV_MEM_DATA */
++ 0x001c, /* IO_ACX_SLV_MEM_CTL */
++ 0x0020, /* IO_ACX_SLV_MEM_CP */
++
++ 0x0034, /* IO_ACX_FEMR */
++
++ 0x00b4, /* IO_ACX_INT_TRIG */
++ 0x00d4, /* IO_ACX_IRQ_MASK */
++ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */
++ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */
++ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */
++ 0x00e8, /* IO_ACX_IRQ_ACK */
++ 0x00ec, /* IO_ACX_HINT_TRIG */
++
++ 0x01d0, /* IO_ACX_ENABLE */
++
++ 0x0338, /* IO_ACX_EEPROM_CTL */
++ 0x033c, /* IO_ACX_EEPROM_ADDR */
++ 0x0340, /* IO_ACX_EEPROM_DATA */
++ 0x0344, /* IO_ACX_EEPROM_CFG */
++
++ 0x0350, /* IO_ACX_PHY_ADDR */
++ 0x0354, /* IO_ACX_PHY_DATA */
++ 0x0358, /* IO_ACX_PHY_CTL */
++
++ 0x0374, /* IO_ACX_GPIO_OE */
++
++ 0x037c, /* IO_ACX_GPIO_OUT */
++
++ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */
++ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */
++ 0x0390, /* IO_ACX_EEPROM_INFORMATION */
++
++ 0x0100, /* IO_ACX_EE_START */
++ 0x0104, /* IO_ACX_SOR_CFG */
++ 0x0108, /* IO_ACX_ECPU_CTRL */
++};
++
++static void
++dummy_netdev_init(struct net_device *ndev) {}
++
++/*
++ * Most of the acx specific pieces of hardware reset.
++ */
++static int
++acxmem_complete_hw_reset (acx_device_t *adev)
++{
++ acx111_ie_configoption_t co;
++
++ /* NB: read_reg() reads may return bogus data before reset_dev(),
++ * since the firmware which directly controls large parts of the I/O
++ * registers isn't initialized yet.
++ * acx100 seems to be more affected than acx111 */
++ if (OK != acxmem_s_reset_dev (adev))
++ return -1;
++
++ if (IS_ACX100(adev)) {
++ /* ACX100: configopt struct in cmd mailbox - directly after reset */
++ copy_from_slavemem (adev, (u8*) &co, (u32) adev->cmd_area, sizeof (co));
++ }
++
++ if (OK != acx_s_init_mac(adev))
++ return -3;
++
++ if (IS_ACX111(adev)) {
++ /* ACX111: configopt struct needs to be queried after full init */
++ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS);
++ }
++
++ /*
++ * Set up transmit buffer administration
++ */
++ init_acx_txbuf (adev);
++
++ /*
++ * Windows driver writes 0x01000000 to register 0x288, RADIO_CTL, if the form factor
++ * is 3. It also write protects the EEPROM by writing 1<<9 to GPIO_OUT
++ */
++ if (adev->form_factor == 3) {
++ set_regbits (adev, 0x288, 0x01000000);
++ set_regbits (adev, 0x298, 1<<9);
++ }
++
++/* TODO: merge them into one function, they are called just once and are the same for pci & usb */
++ if (OK != acxmem_read_eeprom_byte(adev, 0x05, &adev->eeprom_version))
++ return -2;
++
++ acx_s_parse_configoption(adev, &co);
++ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */
++ acx_display_hardware_details(adev);
++
++ return 0;
++}
++
++static int __devinit
++acxmem_e_probe(struct platform_device *pdev)
++{
++ struct acx_hardware_data *hwdata = pdev->dev.platform_data;
++ acx_device_t *adev = NULL;
++ struct net_device *ndev = NULL;
++ const char *chip_name;
++ int result = -EIO;
++ int err;
++ int i;
++ unsigned long addr_size=0;
++ u8 chip_type;
++
++ FN_ENTER;
++ (void) hwdata->start_hw();
++
++ /* FIXME: prism54 calls pci_set_mwi() here,
++ * should we do/support the same? */
++
++ /* chiptype is u8 but id->driver_data is ulong
++ ** Works for now (possible values are 1 and 2) */
++ chip_type = CHIPTYPE_ACX100;
++ /* acx100 and acx111 have different PCI memory regions */
++ if (chip_type == CHIPTYPE_ACX100) {
++ chip_name = "ACX100";
++ } else if (chip_type == CHIPTYPE_ACX111) {
++ chip_name = "ACX111";
++ } else {
++ printk("acx: unknown chip type 0x%04X\n", chip_type);
++ goto fail_unknown_chiptype;
++ }
++
++ printk("acx: found %s-based wireless network card\n", chip_name);
++ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug);
++
++ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init);
++ /* (NB: memsets to 0 entire area) */
++ if (!ndev) {
++ printk("acx: no memory for netdevice struct\n");
++ goto fail_alloc_netdev;
++ }
++
++ platform_set_drvdata (pdev, ndev);
++
++ ether_setup(ndev);
++
++ /*
++ * use platform_data resources that were provided
++ */
++ ndev->irq = 0;
++ for (i=0; i<pdev->num_resources; i++) {
++ if (pdev->resource[i].flags == IORESOURCE_IRQ) {
++ ndev->irq = pdev->resource[i].start;
++ }
++ else if (pdev->resource[i].flags == IORESOURCE_MEM) {
++ ndev->base_addr = pdev->resource[i].start;
++ addr_size = pdev->resource[i].end - pdev->resource[i].start;
++ }
++ }
++ if (addr_size == 0 || ndev->irq == 0)
++ goto fail_hw_params;
++ ndev->open = &acxmem_e_open;
++ ndev->stop = &acxmem_e_close;
++ pdev->dev.release = &acxmem_e_release;
++ ndev->hard_start_xmit = &acx_i_start_xmit;
++ ndev->get_stats = &acx_e_get_stats;
++#if IW_HANDLER_VERSION <= 5
++ ndev->get_wireless_stats = &acx_e_get_wireless_stats;
++#endif
++ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
++ ndev->set_multicast_list = &acxmem_i_set_multicast_list;
++ ndev->tx_timeout = &acxmem_i_tx_timeout;
++ ndev->change_mtu = &acx_e_change_mtu;
++ ndev->watchdog_timeo = 4 * HZ;
++
++ adev = ndev2adev(ndev);
++ spin_lock_init(&adev->lock); /* initial state: unlocked */
++ spin_lock_init(&adev->txbuf_lock);
++ /* We do not start with downed sem: we want PARANOID_LOCKING to work */
++ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
++ /* since nobody can see new netdev yet, we can as well
++ ** just _presume_ that we're under sem (instead of actually taking it): */
++ /* acx_sem_lock(adev); */
++ adev->dev = &pdev->dev;
++ adev->ndev = ndev;
++ adev->dev_type = DEVTYPE_MEM;
++ adev->chip_type = chip_type;
++ adev->chip_name = chip_name;
++ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111;
++ adev->membase = (volatile u32 *) ndev->base_addr;
++ adev->iobase = (volatile u32 *) ioremap_nocache (ndev->base_addr, addr_size);
++ /* to find crashes due to weird driver access
++ * to unconfigured interface (ifup) */
++ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead;
++
++#if defined(NONESSENTIAL_FEATURES)
++ acx_show_card_eeprom_id(adev);
++#endif /* NONESSENTIAL_FEATURES */
++
++#ifdef SET_MODULE_OWNER
++ SET_MODULE_OWNER(ndev);
++#endif
++ SET_NETDEV_DEV(ndev, &pdev->dev);
++
++ log(L_IRQ|L_INIT, "using IRQ %d\n", ndev->irq);
++
++ /* ok, pci setup is finished, now start initializing the card */
++
++ if (OK != acxmem_complete_hw_reset (adev))
++ goto fail_reset;
++
++ /*
++ * Set up default things for most of the card settings.
++ */
++ acx_s_set_defaults(adev);
++
++ /* Register the card, AFTER everything else has been set up,
++ * since otherwise an ioctl could step on our feet due to
++ * firmware operations happening in parallel or uninitialized data */
++ err = register_netdev(ndev);
++ if (OK != err) {
++ printk("acx: register_netdev() FAILED: %d\n", err);
++ goto fail_register_netdev;
++ }
++
++ acx_proc_register_entries(ndev);
++
++ /* Now we have our device, so make sure the kernel doesn't try
++ * to send packets even though we're not associated to a network yet */
++ acx_stop_queue(ndev, "on probe");
++ acx_carrier_off(ndev, "on probe");
++
++ /*
++ * Set up a default monitor type so that poor combinations of initialization
++ * sequences in monitor mode don't end up destroying the hardware type.
++ */
++ adev->monitor_type = ARPHRD_ETHER;
++
++ /*
++ * Register to receive inetaddr notifier changes. This will allow us to
++ * catch if the user changes the MAC address of the interface.
++ */
++ register_netdevice_notifier(&acx_netdev_notifier);
++
++ /* after register_netdev() userspace may start working with dev
++ * (in particular, on other CPUs), we only need to up the sem */
++ /* acx_sem_unlock(adev); */
++
++ printk("acx "ACX_RELEASE": net device %s, driver compiled "
++ "against wireless extensions %d and Linux %s\n",
++ ndev->name, WIRELESS_EXT, UTS_RELEASE);
++
++#if CMD_DISCOVERY
++ great_inquisitor(adev);
++#endif
++
++ result = OK;
++ goto done;
++
++ /* error paths: undo everything in reverse order... */
++
++fail_register_netdev:
++
++ acxmem_s_delete_dma_regions(adev);
++
++fail_reset:
++fail_hw_params:
++ free_netdev(ndev);
++fail_alloc_netdev:
++fail_unknown_chiptype:
++
++
++done:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acxmem_e_remove
++**
++** Shut device down (if not hot unplugged)
++** and deallocate PCI resources for the acx chip.
++**
++** pdev - ptr to PCI device structure containing info about pci configuration
++*/
++static int __devexit
++acxmem_e_remove(struct platform_device *pdev)
++{
++ struct acx_hardware_data *hwdata = pdev->dev.platform_data;
++ struct net_device *ndev;
++ acx_device_t *adev;
++ unsigned long flags;
++
++ FN_ENTER;
++
++ ndev = (struct net_device*) platform_get_drvdata(pdev);
++ if (!ndev) {
++ log(L_DEBUG, "%s: card is unused. Skipping any release code\n",
++ __func__);
++ goto end;
++ }
++
++ adev = ndev2adev(ndev);
++
++ /* If device wasn't hot unplugged... */
++ if (adev_present(adev)) {
++
++ acx_sem_lock(adev);
++
++ /* disable both Tx and Rx to shut radio down properly */
++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
++
++#ifdef REDUNDANT
++ /* put the eCPU to sleep to save power
++ * Halting is not possible currently,
++ * since not supported by all firmware versions */
++ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0);
++#endif
++ acx_lock(adev, flags);
++
++ /* disable power LED to save power :-) */
++ log(L_INIT, "switching off power LED to save power\n");
++ acxmem_l_power_led(adev, 0);
++
++ /* stop our eCPU */
++ if (IS_ACX111(adev)) {
++ /* FIXME: does this actually keep halting the eCPU?
++ * I don't think so...
++ */
++ acxmem_l_reset_mac(adev);
++ } else {
++ u16 temp;
++
++ /* halt eCPU */
++ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
++ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
++ write_flush(adev);
++ }
++
++ acx_unlock(adev, flags);
++
++ acx_sem_unlock(adev);
++ }
++
++
++ /*
++ * Unregister the notifier chain
++ */
++ unregister_netdevice_notifier(&acx_netdev_notifier);
++
++ /* unregister the device to not let the kernel
++ * (e.g. ioctls) access a half-deconfigured device
++ * NB: this will cause acxmem_e_close() to be called,
++ * thus we shouldn't call it under sem! */
++ log(L_INIT, "removing device %s\n", ndev->name);
++ unregister_netdev(ndev);
++
++ /* unregister_netdev ensures that no references to us left.
++ * For paranoid reasons we continue to follow the rules */
++ acx_sem_lock(adev);
++
++ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) {
++ acxmem_s_down(ndev);
++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
++ }
++
++ acx_proc_unregister_entries(ndev);
++
++ acxmem_s_delete_dma_regions(adev);
++
++ /* finally, clean up PCI bus state */
++ if (adev->iobase) iounmap((void *)adev->iobase);
++
++ acx_sem_unlock(adev);
++
++ /* Free netdev (quite late,
++ * since otherwise we might get caught off-guard
++ * by a netdev timeout handler execution
++ * expecting to see a working dev...) */
++ free_netdev(ndev);
++
++ (void) hwdata->stop_hw();
++
++ printk ("e_remove done\n");
++end:
++ FN_EXIT0;
++
++ return 0;
++}
++
++
++/***********************************************************************
++** TODO: PM code needs to be fixed / debugged / tested.
++*/
++#ifdef CONFIG_PM
++static int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
++acxmem_e_suspend(struct platform_device *pdev, pm_message_t state)
++#else
++acxmem_e_suspend(struct device *pdev, u32 state)
++#endif
++{
++ struct net_device *ndev = platform_get_drvdata(pdev);
++ acx_device_t *adev;
++ struct acx_hardware_data *hwdata;
++
++ FN_ENTER;
++ printk("acx: suspend handler is experimental!\n");
++ printk("sus: dev %p\n", ndev);
++
++ if (!netif_running(ndev))
++ goto end;
++
++ adev = ndev2adev(ndev);
++ printk("sus: adev %p\n", adev);
++
++ hwdata = adev->dev->platform_data;
++
++ acx_sem_lock(adev);
++
++ netif_device_detach(ndev); /* this one cannot sleep */
++ acxmem_s_down(ndev);
++ /* down() does not set it to 0xffff, but here we really want that */
++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
++ write_reg16(adev, IO_ACX_FEMR, 0x0);
++ acxmem_s_delete_dma_regions(adev);
++
++ /*
++ * Turn the ACX chip off.
++ */
++ hwdata->stop_hw();
++
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT0;
++ return OK;
++}
++
++
++
++static void
++fw_resumer(struct work_struct *notused)
++{
++ struct platform_device *pdev = resume_pdev;
++ struct net_device *ndev = platform_get_drvdata(pdev);
++ acx_device_t *adev;
++ struct acx_hardware_data *hwdata;
++
++ printk("acx: resume handler is experimental!\n");
++ printk("rsm: got dev %p\n", ndev);
++
++ if (!netif_running(ndev))
++ return;
++
++ adev = ndev2adev(ndev);
++ printk("rsm: got adev %p\n", adev);
++
++ acx_sem_lock(adev);
++
++ hwdata = adev->dev->platform_data;
++
++ /*
++ * Turn on the ACX.
++ */
++ hwdata->start_hw();
++
++ acxmem_complete_hw_reset (adev);
++
++ /*
++ * done by acx_s_set_defaults for initial startup
++ */
++ acxmem_set_interrupt_mask(adev);
++
++ printk ("rsm: bringing up interface\n");
++ SET_BIT (adev->set_mask, GETSET_ALL);
++ acxmem_s_up(ndev);
++ printk("rsm: acx up done\n");
++
++ /* now even reload all card parameters as they were before suspend,
++ * and possibly be back in the network again already :-)
++ */
++ /* - most settings updated in acxmem_s_up()
++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) {
++ adev->set_mask = GETSET_ALL;
++ acx_s_update_card_settings(adev);
++ printk("rsm: settings updated\n");
++ }
++ */
++ netif_device_attach(ndev);
++ printk("rsm: device attached\n");
++
++ acx_sem_unlock(adev);
++}
++
++DECLARE_WORK( fw_resume_work, fw_resumer );
++
++static int
++acxmem_e_resume(struct platform_device *pdev)
++{
++ FN_ENTER;
++
++ resume_pdev = pdev;
++ schedule_work( &fw_resume_work );
++
++ FN_EXIT0;
++ return OK;
++}
++#endif /* CONFIG_PM */
++
++
++/***********************************************************************
++** acxmem_s_up
++**
++** This function is called by acxmem_e_open (when ifconfig sets the device as up)
++**
++** Side effects:
++** - Enables on-card interrupt requests
++** - calls acx_s_start
++*/
++
++static void
++enable_acx_irq(acx_device_t *adev)
++{
++ FN_ENTER;
++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask);
++ write_reg16(adev, IO_ACX_FEMR, 0x8000);
++ adev->irqs_active = 1;
++ FN_EXIT0;
++}
++
++static void
++acxmem_s_up(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++ enable_acx_irq(adev);
++ acx_unlock(adev, flags);
++
++ /* acx fw < 1.9.3.e has a hardware timer, and older drivers
++ ** used to use it. But we don't do that anymore, our OS
++ ** has reliable software timers */
++ init_timer(&adev->mgmt_timer);
++ adev->mgmt_timer.function = acx_i_timer;
++ adev->mgmt_timer.data = (unsigned long)adev;
++
++ /* Need to set ACX_STATE_IFACE_UP first, or else
++ ** timer won't be started by acx_set_status() */
++ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_2_STA:
++ /* actual scan cmd will happen in start() */
++ acx_set_status(adev, ACX_STATUS_1_SCANNING); break;
++ case ACX_MODE_3_AP:
++ case ACX_MODE_MONITOR:
++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break;
++ }
++
++ acx_s_start(adev);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_s_down
++**
++** This disables the netdevice
++**
++** Side effects:
++** - disables on-card interrupt request
++*/
++
++static void
++disable_acx_irq(acx_device_t *adev)
++{
++ FN_ENTER;
++
++ /* I guess mask is not 0xffff because acx100 won't signal
++ ** cmd completion then (needed for ifup).
++ ** Someone with acx100 please confirm */
++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off);
++ write_reg16(adev, IO_ACX_FEMR, 0x0);
++ adev->irqs_active = 0;
++ FN_EXIT0;
++}
++
++static void
++acxmem_s_down(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++
++ FN_ENTER;
++
++ /* Disable IRQs first, so that IRQs cannot race with us */
++ /* then wait until interrupts have finished executing on other CPUs */
++ acx_lock(adev, flags);
++ disable_acx_irq(adev);
++ synchronize_irq(adev->pdev->irq);
++ acx_unlock(adev, flags);
++
++ /* we really don't want to have an asynchronous tasklet disturb us
++ ** after something vital for its job has been shut down, so
++ ** end all remaining work now.
++ **
++ ** NB: carrier_off (done by set_status below) would lead to
++ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK().
++ ** That's why we do FLUSH first.
++ **
++ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK()
++ ** waits for acx_e_after_interrupt_task to complete if it is running
++ ** on another CPU, but acx_e_after_interrupt_task
++ ** will sleep on sem forever, because it is taken by us!
++ ** Work around that by temporary sem unlock.
++ ** This will fail miserably if we'll be hit by concurrent
++ ** iwconfig or something in between. TODO! */
++ acx_sem_unlock(adev);
++ FLUSH_SCHEDULED_WORK();
++ acx_sem_lock(adev);
++
++ /* This is possible:
++ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task ->
++ ** -> set_status(ASSOCIATED) -> wake_queue()
++ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK
++ ** lock/unlock is just paranoia, maybe not needed */
++ acx_lock(adev, flags);
++ acx_stop_queue(ndev, "on ifdown");
++ acx_set_status(adev, ACX_STATUS_0_STOPPED);
++ acx_unlock(adev, flags);
++
++ /* kernel/timer.c says it's illegal to del_timer_sync()
++ ** a timer which restarts itself. We guarantee this cannot
++ ** ever happen because acx_i_timer() never does this if
++ ** status is ACX_STATUS_0_STOPPED */
++ del_timer_sync(&adev->mgmt_timer);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_e_open
++**
++** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP
++** from clear to set. In other words: ifconfig up.
++**
++** Returns:
++** 0 success
++** >0 f/w reported error
++** <0 driver reported error
++*/
++static int
++acxmem_e_open(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result = OK;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ acx_init_task_scheduler(adev);
++
++/* TODO: pci_set_power_state(pdev, PCI_D0); ? */
++
++ /* request shared IRQ handler */
++ if (request_irq(ndev->irq, acxmem_i_interrupt, SA_INTERRUPT, ndev->name, ndev)) {
++ printk("%s: request_irq FAILED\n", ndev->name);
++ result = -EAGAIN;
++ goto done;
++ }
++ set_irq_type (ndev->irq, IRQT_FALLING);
++ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq);
++
++ /* ifup device */
++ acxmem_s_up(ndev);
++
++ /* We don't currently have to do anything else.
++ * The setup of the MAC should be subsequently completed via
++ * the mlme commands.
++ * Higher layers know we're ready from dev->start==1 and
++ * dev->tbusy==0. Our rx path knows to pass up received/
++ * frames because of dev->flags&IFF_UP is true.
++ */
++done:
++ acx_sem_unlock(adev);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acxmem_e_close
++**
++** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP
++** from set to clear. I.e. called by "ifconfig DEV down"
++**
++** Returns:
++** 0 success
++** >0 f/w reported error
++** <0 driver reported error
++*/
++static int
++acxmem_e_close(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ /* ifdown device */
++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
++ if (netif_device_present(ndev)) {
++ acxmem_s_down(ndev);
++ }
++
++ /* disable all IRQs, release shared IRQ handler */
++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
++ write_reg16(adev, IO_ACX_FEMR, 0x0);
++ free_irq(ndev->irq, ndev);
++
++/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */
++
++ /* We currently don't have to do anything else.
++ * Higher layers know we're not ready from dev->start==0 and
++ * dev->tbusy==1. Our rx path knows to not pass up received
++ * frames because of dev->flags&IFF_UP is false.
++ */
++ acx_sem_unlock(adev);
++
++ log(L_INIT, "closed device\n");
++ FN_EXIT0;
++ return OK;
++}
++
++
++/***********************************************************************
++** acxmem_i_tx_timeout
++**
++** Called from network core. Must not sleep!
++*/
++static void
++acxmem_i_tx_timeout(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ unsigned int tx_num_cleaned;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++
++ /* clean processed tx descs, they may have been completely full */
++ tx_num_cleaned = acxmem_l_clean_txdesc(adev);
++
++ /* nothing cleaned, yet (almost) no free buffers available?
++ * --> clean all tx descs, no matter which status!!
++ * Note that I strongly suspect that doing emergency cleaning
++ * may confuse the firmware. This is a last ditch effort to get
++ * ANYTHING to work again...
++ *
++ * TODO: it's best to simply reset & reinit hw from scratch...
++ */
++ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) {
++ printk("%s: FAILED to free any of the many full tx buffers. "
++ "Switching to emergency freeing. "
++ "Please report!\n", ndev->name);
++ acxmem_l_clean_txdesc_emergency(adev);
++ }
++
++ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status))
++ acx_wake_queue(ndev, "after tx timeout");
++
++ /* stall may have happened due to radio drift, so recalib radio */
++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
++
++ /* do unimportant work last */
++ printk("%s: tx timeout!\n", ndev->name);
++ adev->stats.tx_errors++;
++
++ acx_unlock(adev, flags);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_i_set_multicast_list
++** FIXME: most likely needs refinement
++*/
++static void
++acxmem_i_set_multicast_list(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++
++ /* firmwares don't have allmulti capability,
++ * so just use promiscuous mode instead in this case. */
++ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
++ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
++ SET_BIT(adev->set_mask, SET_RXCONFIG);
++ /* let kernel know in case *we* needed to set promiscuous */
++ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI);
++ } else {
++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
++ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
++ SET_BIT(adev->set_mask, SET_RXCONFIG);
++ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI);
++ }
++
++ /* cannot update card settings directly here, atomic context */
++ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
++
++ acx_unlock(adev, flags);
++
++ FN_EXIT0;
++}
++
++
++/***************************************************************
++** acxmem_l_process_rxdesc
++**
++** Called directly and only from the IRQ handler
++*/
++
++#if !ACX_DEBUG
++static inline void log_rxbuffer(const acx_device_t *adev) {}
++#else
++static void
++log_rxbuffer(const acx_device_t *adev)
++{
++ register const struct rxhostdesc *rxhostdesc;
++ int i;
++ /* no FN_ENTER here, we don't want that */
++
++ rxhostdesc = adev->rxhostdesc_start;
++ if (unlikely(!rxhostdesc)) return;
++ for (i = 0; i < RX_CNT; i++) {
++ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
++ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
++ printk("rx: buf %d full\n", i);
++ rxhostdesc++;
++ }
++}
++#endif
++
++static void
++acxmem_l_process_rxdesc(acx_device_t *adev)
++{
++ register rxhostdesc_t *hostdesc;
++ register rxdesc_t *rxdesc;
++ unsigned count, tail;
++ u32 addr;
++ u8 Ctl_8;
++
++ FN_ENTER;
++
++ if (unlikely(acx_debug & L_BUFR))
++ log_rxbuffer(adev);
++
++ /* First, have a loop to determine the first descriptor that's
++ * full, just in case there's a mismatch between our current
++ * rx_tail and the full descriptor we're supposed to handle. */
++ tail = adev->rx_tail;
++ count = RX_CNT;
++ while (1) {
++ hostdesc = &adev->rxhostdesc_start[tail];
++ rxdesc = &adev->rxdesc_start[tail];
++ /* advance tail regardless of outcome of the below test */
++ tail = (tail + 1) % RX_CNT;
++
++ /*
++ * Unlike the PCI interface, where the ACX can write directly to
++ * the host descriptors, on the slave memory interface we have to
++ * pull these. All we really need to do is check the Ctl_8 field
++ * in the rx descriptor on the ACX, which should be 0x11000000 if
++ * we should process it.
++ */
++ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
++ if ((Ctl_8 & DESC_CTL_HOSTOWN) &&
++ (Ctl_8 & DESC_CTL_ACXDONE))
++ break; /* found it! */
++
++ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */
++ goto end;
++ }
++
++ /* now process descriptors, starting with the first we figured out */
++ while (1) {
++ log(L_BUFR, "rx: tail=%u Ctl_8=%02X\n", tail, Ctl_8);
++ /*
++ * If the ACX has CTL_RECLAIM set on this descriptor there
++ * is no buffer associated; it just wants us to tell it to
++ * reclaim the memory.
++ */
++ if (!(Ctl_8 & DESC_CTL_RECLAIM)) {
++
++ /*
++ * slave interface - pull data now
++ */
++ hostdesc->length = read_slavemem16 (adev, (u32) &(rxdesc->total_length));
++
++ /*
++ * hostdesc->data is an rxbuffer_t, which includes header information,
++ * but the length in the data packet doesn't. The header information
++ * takes up an additional 12 bytes, so add that to the length we copy.
++ */
++ addr = read_slavemem32 (adev, (u32) &(rxdesc->ACXMemPtr));
++ if (addr) {
++ /*
++ * How can &(rxdesc->ACXMemPtr) above ever be zero? Looks like we
++ * get that now and then - try to trap it for debug.
++ */
++ if (addr & 0xffff0000) {
++ printk("rxdesc 0x%08x\n", (u32) rxdesc);
++ dump_acxmem (adev, 0, 0x10000);
++ panic ("Bad access!");
++ }
++ chaincopy_from_slavemem (adev, (u8 *) hostdesc->data, addr,
++ hostdesc->length +
++ (u32) &((rxbuffer_t *)0)->hdr_a3);
++ acx_l_process_rxbuf(adev, hostdesc->data);
++ }
++ }
++ else {
++ printk ("rx reclaim only!\n");
++ }
++
++ hostdesc->Status = 0;
++
++ /*
++ * Let the ACX know we're done.
++ */
++ CLEAR_BIT (Ctl_8, DESC_CTL_HOSTOWN);
++ SET_BIT (Ctl_8, DESC_CTL_HOSTDONE);
++ SET_BIT (Ctl_8, DESC_CTL_RECLAIM);
++ write_slavemem8 (adev, (u32) &rxdesc->Ctl_8, Ctl_8);
++
++ /*
++ * Now tell the ACX we've finished with the receive buffer so
++ * it can finish the reclaim.
++ */
++ write_reg16 (adev, IO_ACX_INT_TRIG, INT_TRIG_RXPRC);
++
++ /* ok, descriptor is handled, now check the next descriptor */
++ hostdesc = &adev->rxhostdesc_start[tail];
++ rxdesc = &adev->rxdesc_start[tail];
++
++ Ctl_8 = hostdesc->Ctl_16 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
++
++ /* if next descriptor is empty, then bail out */
++ if (!(Ctl_8 & DESC_CTL_HOSTOWN) || !(Ctl_8 & DESC_CTL_ACXDONE))
++ break;
++
++ tail = (tail + 1) % RX_CNT;
++ }
++end:
++ adev->rx_tail = tail;
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_i_interrupt
++**
++** IRQ handler (atomic context, must not sleep, blah, blah)
++*/
++
++/* scan is complete. all frames now on the receive queue are valid */
++#define INFO_SCAN_COMPLETE 0x0001
++#define INFO_WEP_KEY_NOT_FOUND 0x0002
++/* hw has been reset as the result of a watchdog timer timeout */
++#define INFO_WATCH_DOG_RESET 0x0003
++/* failed to send out NULL frame from PS mode notification to AP */
++/* recommended action: try entering 802.11 PS mode again */
++#define INFO_PS_FAIL 0x0004
++/* encryption/decryption process on a packet failed */
++#define INFO_IV_ICV_FAILURE 0x0005
++
++/* Info mailbox format:
++2 bytes: type
++2 bytes: status
++more bytes may follow
++ rumors say about status:
++ 0x0000 info available (set by hw)
++ 0x0001 information received (must be set by host)
++ 0x1000 info available, mailbox overflowed (messages lost) (set by hw)
++ but in practice we've seen:
++ 0x9000 when we did not set status to 0x0001 on prev message
++ 0x1001 when we did set it
++ 0x0000 was never seen
++ conclusion: this is really a bitfield:
++ 0x1000 is 'info available' bit
++ 'mailbox overflowed' bit is 0x8000, not 0x1000
++ value of 0x0000 probably means that there are no messages at all
++ P.S. I dunno how in hell hw is supposed to notice that messages are lost -
++ it does NOT clear bit 0x0001, and this bit will probably stay forever set
++ after we set it once. Let's hope this will be fixed in firmware someday
++*/
++
++static void
++handle_info_irq(acx_device_t *adev)
++{
++#if ACX_DEBUG
++ static const char * const info_type_msg[] = {
++ "(unknown)",
++ "scan complete",
++ "WEP key not found",
++ "internal watchdog reset was done",
++ "failed to send powersave (NULL frame) notification to AP",
++ "encrypt/decrypt on a packet has failed",
++ "TKIP tx keys disabled",
++ "TKIP rx keys disabled",
++ "TKIP rx: key ID not found",
++ "???",
++ "???",
++ "???",
++ "???",
++ "???",
++ "???",
++ "???",
++ "TKIP IV value exceeds thresh"
++ };
++#endif
++ u32 info_type, info_status;
++
++ info_type = read_slavemem32 (adev, (u32) adev->info_area);
++
++ info_status = (info_type >> 16);
++ info_type = (u16)info_type;
++
++ /* inform fw that we have read this info message */
++ write_slavemem32(adev, (u32) adev->info_area, info_type | 0x00010000);
++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK);
++ write_flush(adev);
++
++ log(L_CTL, "info_type:%04X info_status:%04X\n",
++ info_type, info_status);
++
++ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n",
++ info_status, info_type,
++ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ?
++ 0 : info_type]
++ );
++}
++
++
++static void
++log_unusual_irq(u16 irqtype) {
++ /*
++ if (!printk_ratelimit())
++ return;
++ */
++
++ printk("acx: got");
++ if (irqtype & HOST_INT_TX_XFER) {
++ printk(" Tx_Xfer");
++ }
++ if (irqtype & HOST_INT_RX_COMPLETE) {
++ printk(" Rx_Complete");
++ }
++ if (irqtype & HOST_INT_DTIM) {
++ printk(" DTIM");
++ }
++ if (irqtype & HOST_INT_BEACON) {
++ printk(" Beacon");
++ }
++ if (irqtype & HOST_INT_TIMER) {
++ log(L_IRQ, " Timer");
++ }
++ if (irqtype & HOST_INT_KEY_NOT_FOUND) {
++ printk(" Key_Not_Found");
++ }
++ if (irqtype & HOST_INT_IV_ICV_FAILURE) {
++ printk(" IV_ICV_Failure (crypto)");
++ }
++ /* HOST_INT_CMD_COMPLETE */
++ /* HOST_INT_INFO */
++ if (irqtype & HOST_INT_OVERFLOW) {
++ printk(" Overflow");
++ }
++ if (irqtype & HOST_INT_PROCESS_ERROR) {
++ printk(" Process_Error");
++ }
++ /* HOST_INT_SCAN_COMPLETE */
++ if (irqtype & HOST_INT_FCS_THRESHOLD) {
++ printk(" FCS_Threshold");
++ }
++ if (irqtype & HOST_INT_UNKNOWN) {
++ printk(" Unknown");
++ }
++ printk(" IRQ(s)\n");
++}
++
++
++static void
++update_link_quality_led(acx_device_t *adev)
++{
++ int qual;
++
++ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise);
++ if (qual > adev->brange_max_quality)
++ qual = adev->brange_max_quality;
++
++ if (time_after(jiffies, adev->brange_time_last_state_change +
++ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) {
++ acxmem_l_power_led(adev, (adev->brange_last_state == 0));
++ adev->brange_last_state ^= 1; /* toggle */
++ adev->brange_time_last_state_change = jiffies;
++ }
++}
++
++
++#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */
++
++static irqreturn_t
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++acxmem_i_interrupt(int irq, void *dev_id)
++#else
++acxmwm_i_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++#endif
++{
++ acx_device_t *adev;
++ unsigned long flags;
++ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY;
++ register u16 irqtype;
++ u16 unmasked;
++
++ adev = ndev2adev((struct net_device*)dev_id);
++
++ /* LOCKING: can just spin_lock() since IRQs are disabled anyway.
++ * I am paranoid */
++ acx_lock(adev, flags);
++
++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
++ if (unlikely(0xffff == unmasked)) {
++ /* 0xffff value hints at missing hardware,
++ * so don't do anything.
++ * Not very clean, but other drivers do the same... */
++ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n");
++ goto none;
++ }
++
++ /* We will check only "interesting" IRQ types */
++ irqtype = unmasked & ~adev->irq_mask;
++ if (!irqtype) {
++ /* We are on a shared IRQ line and it wasn't our IRQ */
++ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n",
++ unmasked, adev->irq_mask);
++ goto none;
++ }
++
++ /* Done here because IRQ_NONEs taking three lines of log
++ ** drive me crazy */
++ FN_ENTER;
++
++#define IRQ_ITERATE 1
++#if IRQ_ITERATE
++if (jiffies != adev->irq_last_jiffies) {
++ adev->irq_loops_this_jiffy = 0;
++ adev->irq_last_jiffies = jiffies;
++}
++
++/* safety condition; we'll normally abort loop below
++ * in case no IRQ type occurred */
++while (likely(--irqcount)) {
++#endif
++ /* ACK all IRQs ASAP */
++ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff);
++
++ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n",
++ unmasked, adev->irq_mask, irqtype);
++
++ /* Handle most important IRQ types first */
++ if (irqtype & HOST_INT_RX_DATA) {
++ log(L_IRQ, "got Rx_Data IRQ\n");
++ acxmem_l_process_rxdesc(adev);
++ }
++ if (irqtype & HOST_INT_TX_COMPLETE) {
++ log(L_IRQ, "got Tx_Complete IRQ\n");
++ /* don't clean up on each Tx complete, wait a bit
++ * unless we're going towards full, in which case
++ * we do it immediately, too (otherwise we might lockup
++ * with a full Tx buffer if we go into
++ * acxmem_l_clean_txdesc() at a time when we won't wakeup
++ * the net queue in there for some reason...) */
++ if (adev->tx_free <= TX_START_CLEAN) {
++#if TX_CLEANUP_IN_SOFTIRQ
++ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP);
++#else
++ acxmem_l_clean_txdesc(adev);
++#endif
++ }
++ }
++
++ /* Less frequent ones */
++ if (irqtype & (0
++ | HOST_INT_CMD_COMPLETE
++ | HOST_INT_INFO
++ | HOST_INT_SCAN_COMPLETE
++ )) {
++ if (irqtype & HOST_INT_CMD_COMPLETE) {
++ log(L_IRQ, "got Command_Complete IRQ\n");
++ /* save the state for the running issue_cmd() */
++ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE);
++ }
++ if (irqtype & HOST_INT_INFO) {
++ handle_info_irq(adev);
++ }
++ if (irqtype & HOST_INT_SCAN_COMPLETE) {
++ log(L_IRQ, "got Scan_Complete IRQ\n");
++ /* need to do that in process context */
++ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN);
++ /* remember that fw is not scanning anymore */
++ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
++ }
++ }
++
++ /* These we just log, but either they happen rarely
++ * or we keep them masked out */
++ if (irqtype & (0
++ /* | HOST_INT_RX_DATA */
++ /* | HOST_INT_TX_COMPLETE */
++ | HOST_INT_TX_XFER
++ | HOST_INT_RX_COMPLETE
++ | HOST_INT_DTIM
++ | HOST_INT_BEACON
++ | HOST_INT_TIMER
++ | HOST_INT_KEY_NOT_FOUND
++ | HOST_INT_IV_ICV_FAILURE
++ /* | HOST_INT_CMD_COMPLETE */
++ /* | HOST_INT_INFO */
++ | HOST_INT_OVERFLOW
++ | HOST_INT_PROCESS_ERROR
++ /* | HOST_INT_SCAN_COMPLETE */
++ | HOST_INT_FCS_THRESHOLD
++ | HOST_INT_UNKNOWN
++ )) {
++ log_unusual_irq(irqtype);
++ }
++
++#if IRQ_ITERATE
++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
++ irqtype = unmasked & ~adev->irq_mask;
++ /* Bail out if no new IRQ bits or if all are masked out */
++ if (!irqtype)
++ break;
++
++ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) {
++ printk(KERN_ERR "acx: too many interrupts per jiffy!\n");
++ /* Looks like card floods us with IRQs! Try to stop that */
++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
++ /* This will short-circuit all future attempts to handle IRQ.
++ * We cant do much more... */
++ adev->irq_mask = 0;
++ break;
++ }
++}
++#endif
++ /* Routine to perform blink with range */
++ if (unlikely(adev->led_power == 2))
++ update_link_quality_led(adev);
++
++/* handled: */
++ /* write_flush(adev); - not needed, last op was read anyway */
++ acx_unlock(adev, flags);
++ FN_EXIT0;
++ return IRQ_HANDLED;
++
++none:
++ acx_unlock(adev, flags);
++ return IRQ_NONE;
++}
++
++
++/***********************************************************************
++** acxmem_l_power_led
++*/
++void
++acxmem_l_power_led(acx_device_t *adev, int enable)
++{
++ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800;
++
++ /* A hack. Not moving message rate limiting to adev->xxx
++ * (it's only a debug message after all) */
++ static int rate_limit = 0;
++
++ if (rate_limit++ < 3)
++ log(L_IOCTL, "Please report in case toggling the power "
++ "LED doesn't work for your card!\n");
++ if (enable)
++ write_reg16(adev, IO_ACX_GPIO_OUT,
++ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled);
++ else
++ write_reg16(adev, IO_ACX_GPIO_OUT,
++ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled);
++}
++
++
++/***********************************************************************
++** Ioctls
++*/
++
++/***********************************************************************
++*/
++int
++acx111pci_ioctl_info(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ struct iw_param *vwrq,
++ char *extra)
++{
++#if ACX_DEBUG > 1
++ acx_device_t *adev = ndev2adev(ndev);
++ rxdesc_t *rxdesc;
++ txdesc_t *txdesc;
++ rxhostdesc_t *rxhostdesc;
++ txhostdesc_t *txhostdesc;
++ struct acx111_ie_memoryconfig memconf;
++ struct acx111_ie_queueconfig queueconf;
++ unsigned long flags;
++ int i;
++ char memmap[0x34];
++ char rxconfig[0x8];
++ char fcserror[0x8];
++ char ratefallback[0x5];
++
++ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) )
++ return OK;
++ /* using printk() since we checked debug flag already */
++
++ acx_sem_lock(adev);
++
++ if (!IS_ACX111(adev)) {
++ printk("acx111-specific function called "
++ "with non-acx111 chip, aborting\n");
++ goto end_ok;
++ }
++
++ /* get Acx111 Memory Configuration */
++ memset(&memconf, 0, sizeof(memconf));
++ /* BTW, fails with 12 (Write only) error code.
++ ** Retained for easy testing of issue_cmd error handling :) */
++ printk ("Interrogating queue config\n");
++ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG);
++ printk ("done with queue config\n");
++
++ /* get Acx111 Queue Configuration */
++ memset(&queueconf, 0, sizeof(queueconf));
++ printk ("Interrogating mem config options\n");
++ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
++ printk ("done with mem config options\n");
++
++ /* get Acx111 Memory Map */
++ memset(memmap, 0, sizeof(memmap));
++ printk ("Interrogating mem map\n");
++ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP);
++ printk ("done with mem map\n");
++
++ /* get Acx111 Rx Config */
++ memset(rxconfig, 0, sizeof(rxconfig));
++ printk ("Interrogating rxconfig\n");
++ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG);
++ printk ("done with queue rxconfig\n");
++
++ /* get Acx111 fcs error count */
++ memset(fcserror, 0, sizeof(fcserror));
++ printk ("Interrogating fcs err count\n");
++ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT);
++ printk ("done with err count\n");
++
++ /* get Acx111 rate fallback */
++ memset(ratefallback, 0, sizeof(ratefallback));
++ printk ("Interrogating rate fallback\n");
++ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK);
++ printk ("done with rate fallback\n");
++
++ /* force occurrence of a beacon interrupt */
++ /* TODO: comment why is this necessary */
++ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON);
++
++ /* dump Acx111 Mem Configuration */
++ printk("dump mem config:\n"
++ "data read: %d, struct size: %d\n"
++ "Number of stations: %1X\n"
++ "Memory block size: %1X\n"
++ "tx/rx memory block allocation: %1X\n"
++ "count rx: %X / tx: %X queues\n"
++ "options %1X\n"
++ "fragmentation %1X\n"
++ "Rx Queue 1 Count Descriptors: %X\n"
++ "Rx Queue 1 Host Memory Start: %X\n"
++ "Tx Queue 1 Count Descriptors: %X\n"
++ "Tx Queue 1 Attributes: %X\n",
++ memconf.len, (int) sizeof(memconf),
++ memconf.no_of_stations,
++ memconf.memory_block_size,
++ memconf.tx_rx_memory_block_allocation,
++ memconf.count_rx_queues, memconf.count_tx_queues,
++ memconf.options,
++ memconf.fragmentation,
++ memconf.rx_queue1_count_descs,
++ acx2cpu(memconf.rx_queue1_host_rx_start),
++ memconf.tx_queue1_count_descs,
++ memconf.tx_queue1_attributes);
++
++ /* dump Acx111 Queue Configuration */
++ printk("dump queue head:\n"
++ "data read: %d, struct size: %d\n"
++ "tx_memory_block_address (from card): %X\n"
++ "rx_memory_block_address (from card): %X\n"
++ "rx1_queue address (from card): %X\n"
++ "tx1_queue address (from card): %X\n"
++ "tx1_queue attributes (from card): %X\n",
++ queueconf.len, (int) sizeof(queueconf),
++ queueconf.tx_memory_block_address,
++ queueconf.rx_memory_block_address,
++ queueconf.rx1_queue_address,
++ queueconf.tx1_queue_address,
++ queueconf.tx1_attributes);
++
++ /* dump Acx111 Mem Map */
++ printk("dump mem map:\n"
++ "data read: %d, struct size: %d\n"
++ "Code start: %X\n"
++ "Code end: %X\n"
++ "WEP default key start: %X\n"
++ "WEP default key end: %X\n"
++ "STA table start: %X\n"
++ "STA table end: %X\n"
++ "Packet template start: %X\n"
++ "Packet template end: %X\n"
++ "Queue memory start: %X\n"
++ "Queue memory end: %X\n"
++ "Packet memory pool start: %X\n"
++ "Packet memory pool end: %X\n"
++ "iobase: %p\n"
++ "iobase2: %p\n",
++ *((u16 *)&memmap[0x02]), (int) sizeof(memmap),
++ *((u32 *)&memmap[0x04]),
++ *((u32 *)&memmap[0x08]),
++ *((u32 *)&memmap[0x0C]),
++ *((u32 *)&memmap[0x10]),
++ *((u32 *)&memmap[0x14]),
++ *((u32 *)&memmap[0x18]),
++ *((u32 *)&memmap[0x1C]),
++ *((u32 *)&memmap[0x20]),
++ *((u32 *)&memmap[0x24]),
++ *((u32 *)&memmap[0x28]),
++ *((u32 *)&memmap[0x2C]),
++ *((u32 *)&memmap[0x30]),
++ adev->iobase,
++ adev->iobase2);
++
++ /* dump Acx111 Rx Config */
++ printk("dump rx config:\n"
++ "data read: %d, struct size: %d\n"
++ "rx config: %X\n"
++ "rx filter config: %X\n",
++ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig),
++ *((u16 *)&rxconfig[0x04]),
++ *((u16 *)&rxconfig[0x06]));
++
++ /* dump Acx111 fcs error */
++ printk("dump fcserror:\n"
++ "data read: %d, struct size: %d\n"
++ "fcserrors: %X\n",
++ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror),
++ *((u32 *)&fcserror[0x04]));
++
++ /* dump Acx111 rate fallback */
++ printk("dump rate fallback:\n"
++ "data read: %d, struct size: %d\n"
++ "ratefallback: %X\n",
++ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback),
++ *((u8 *)&ratefallback[0x04]));
++
++ /* protect against IRQ */
++ acx_lock(adev, flags);
++
++ /* dump acx111 internal rx descriptor ring buffer */
++ rxdesc = adev->rxdesc_start;
++
++ /* loop over complete receive pool */
++ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
++ printk("\ndump internal rxdesc %d:\n"
++ "mem pos %p\n"
++ "next 0x%X\n"
++ "acx mem pointer (dynamic) 0x%X\n"
++ "CTL (dynamic) 0x%X\n"
++ "Rate (dynamic) 0x%X\n"
++ "RxStatus (dynamic) 0x%X\n"
++ "Mod/Pre (dynamic) 0x%X\n",
++ i,
++ rxdesc,
++ acx2cpu(rxdesc->pNextDesc),
++ acx2cpu(rxdesc->ACXMemPtr),
++ rxdesc->Ctl_8,
++ rxdesc->rate,
++ rxdesc->error,
++ rxdesc->SNR);
++ rxdesc++;
++ }
++
++ /* dump host rx descriptor ring buffer */
++
++ rxhostdesc = adev->rxhostdesc_start;
++
++ /* loop over complete receive pool */
++ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
++ printk("\ndump host rxdesc %d:\n"
++ "mem pos %p\n"
++ "buffer mem pos 0x%X\n"
++ "buffer mem offset 0x%X\n"
++ "CTL 0x%X\n"
++ "Length 0x%X\n"
++ "next 0x%X\n"
++ "Status 0x%X\n",
++ i,
++ rxhostdesc,
++ acx2cpu(rxhostdesc->data_phy),
++ rxhostdesc->data_offset,
++ le16_to_cpu(rxhostdesc->Ctl_16),
++ le16_to_cpu(rxhostdesc->length),
++ acx2cpu(rxhostdesc->desc_phy_next),
++ rxhostdesc->Status);
++ rxhostdesc++;
++ }
++
++ /* dump acx111 internal tx descriptor ring buffer */
++ txdesc = adev->txdesc_start;
++
++ /* loop over complete transmit pool */
++ if (txdesc) for (i = 0; i < TX_CNT; i++) {
++ printk("\ndump internal txdesc %d:\n"
++ "size 0x%X\n"
++ "mem pos %p\n"
++ "next 0x%X\n"
++ "acx mem pointer (dynamic) 0x%X\n"
++ "host mem pointer (dynamic) 0x%X\n"
++ "length (dynamic) 0x%X\n"
++ "CTL (dynamic) 0x%X\n"
++ "CTL2 (dynamic) 0x%X\n"
++ "Status (dynamic) 0x%X\n"
++ "Rate (dynamic) 0x%X\n",
++ i,
++ (int) sizeof(struct txdesc),
++ txdesc,
++ acx2cpu(txdesc->pNextDesc),
++ acx2cpu(txdesc->AcxMemPtr),
++ acx2cpu(txdesc->HostMemPtr),
++ le16_to_cpu(txdesc->total_length),
++ txdesc->Ctl_8,
++ txdesc->Ctl2_8, txdesc->error,
++ txdesc->u.r1.rate);
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++
++ /* dump host tx descriptor ring buffer */
++
++ txhostdesc = adev->txhostdesc_start;
++
++ /* loop over complete host send pool */
++ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) {
++ printk("\ndump host txdesc %d:\n"
++ "mem pos %p\n"
++ "buffer mem pos 0x%X\n"
++ "buffer mem offset 0x%X\n"
++ "CTL 0x%X\n"
++ "Length 0x%X\n"
++ "next 0x%X\n"
++ "Status 0x%X\n",
++ i,
++ txhostdesc,
++ acx2cpu(txhostdesc->data_phy),
++ txhostdesc->data_offset,
++ le16_to_cpu(txhostdesc->Ctl_16),
++ le16_to_cpu(txhostdesc->length),
++ acx2cpu(txhostdesc->desc_phy_next),
++ le32_to_cpu(txhostdesc->Status));
++ txhostdesc++;
++ }
++
++ /* write_reg16(adev, 0xb4, 0x4); */
++
++ acx_unlock(adev, flags);
++end_ok:
++
++ acx_sem_unlock(adev);
++#endif /* ACX_DEBUG */
++ return OK;
++}
++
++
++/***********************************************************************
++*/
++int
++acx100mem_ioctl_set_phy_amp_bias(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ struct iw_param *vwrq,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ u16 gpio_old;
++
++ if (!IS_ACX100(adev)) {
++ /* WARNING!!!
++ * Removing this check *might* damage
++ * hardware, since we're tweaking GPIOs here after all!!!
++ * You've been warned...
++ * WARNING!!! */
++ printk("acx: sorry, setting bias level for non-acx100 "
++ "is not supported yet\n");
++ return OK;
++ }
++
++ if (*extra > 7) {
++ printk("acx: invalid bias parameter, range is 0-7\n");
++ return -EINVAL;
++ }
++
++ acx_sem_lock(adev);
++
++ /* Need to lock accesses to [IO_ACX_GPIO_OUT]:
++ * IRQ handler uses it to update LED */
++ acx_lock(adev, flags);
++ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT);
++ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8));
++ acx_unlock(adev, flags);
++
++ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old);
++ printk("%s: PHY power amplifier bias: old:%d, new:%d\n",
++ ndev->name,
++ (gpio_old & 0x0700) >> 8, (unsigned char)*extra);
++
++ acx_sem_unlock(adev);
++
++ return OK;
++}
++
++/***************************************************************
++** acxmem_l_alloc_tx
++** Actually returns a txdesc_t* ptr
++**
++** FIXME: in case of fragments, should allocate multiple descrs
++** after figuring out how many we need and whether we still have
++** sufficiently many.
++*/
++tx_t*
++acxmem_l_alloc_tx(acx_device_t *adev)
++{
++ struct txdesc *txdesc;
++ unsigned head;
++ u8 ctl8;
++ static int txattempts = 0;
++
++ FN_ENTER;
++
++ if (unlikely(!adev->tx_free)) {
++ printk("acx: BUG: no free txdesc left\n");
++ /*
++ * Probably the ACX ignored a transmit attempt and now there's a packet
++ * sitting in the queue we think should be transmitting but the ACX doesn't
++ * know about.
++ * On the first pass, send the ACX a TxProc interrupt to try moving
++ * things along, and if that doesn't work (ie, we get called again) completely
++ * flush the transmit queue.
++ */
++ if (txattempts < 10) {
++ txattempts++;
++ printk ("acx: trying to wake up ACX\n");
++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
++ write_flush(adev); }
++ else {
++ txattempts = 0;
++ printk ("acx: flushing transmit queue.\n");
++ acxmem_l_clean_txdesc_emergency (adev);
++ }
++ txdesc = NULL;
++ goto end;
++ }
++
++ /*
++ * Make a quick check to see if there is transmit buffer space on
++ * the ACX. This can't guarantee there is enough space for the packet
++ * since we don't yet know how big it is, but it will prevent at least some
++ * annoyances.
++ */
++ if (!adev->acx_txbuf_blocks_free) {
++ txdesc = NULL;
++ goto end;
++ }
++
++ head = adev->tx_head;
++ /*
++ * txdesc points to ACX memory
++ */
++ txdesc = get_txdesc(adev, head);
++ ctl8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
++
++ /*
++ * If we don't own the buffer (HOSTOWN) it is certainly not free; however,
++ * we may have previously thought we had enough memory to send
++ * a packet, allocated the buffer then gave up when we found not enough
++ * transmit buffer space on the ACX. In that case, HOSTOWN and
++ * ACXDONE will both be set.
++ */
++ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_HOSTOWN))) {
++ /* whoops, descr at current index is not free, so probably
++ * ring buffer already full */
++ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find "
++ "free txdesc\n", head, ctl8);
++ txdesc = NULL;
++ goto end;
++ }
++
++ /* Needed in case txdesc won't be eventually submitted for tx */
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_ACXDONE_HOSTOWN);
++
++ adev->tx_free--;
++ log(L_BUFT, "tx: got desc %u, %u remain\n",
++ head, adev->tx_free);
++ /* Keep a few free descs between head and tail of tx ring.
++ ** It is not absolutely needed, just feels safer */
++ if (adev->tx_free < TX_STOP_QUEUE) {
++ log(L_BUF, "stop queue (%u tx desc left)\n",
++ adev->tx_free);
++ acx_stop_queue(adev->ndev, NULL);
++ }
++
++ /* returning current descriptor, so advance to next free one */
++ adev->tx_head = (head + 1) % TX_CNT;
++end:
++ FN_EXIT0;
++
++ return (tx_t*)txdesc;
++}
++
++
++/***************************************************************
++** acxmem_l_dealloc_tx
++** Clears out a previously allocatedvoid acxmem_l_dealloc_tx(tx_t *tx_opaque);
++ transmit descriptor. The ACX
++** can get confused if we skip transmit descriptors in the queue,
++** so when we don't need a descriptor return it to its original
++** state and move the queue head pointer back.
++**
++*/
++void
++acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque)
++{
++ /*
++ * txdesc is the address of the descriptor on the ACX.
++ */
++ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
++ txdesc_t tmptxdesc;
++ int index;
++
++ memset (&tmptxdesc, 0, sizeof(tmptxdesc));
++ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
++ tmptxdesc.u.r1.rate = 0x0a;
++
++ /*
++ * Clear out all of the transmit descriptor except for the next pointer
++ */
++ copy_to_slavemem (adev, (u32) &(txdesc->HostMemPtr),
++ (u8 *) &(tmptxdesc.HostMemPtr),
++ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc));
++
++ /*
++ * This is only called immediately after we've allocated, so we should
++ * be able to set the head back to this descriptor.
++ */
++ index = ((u8*) txdesc - (u8*)adev->txdesc_start) / adev->txdesc_size;
++ printk ("acx_dealloc: moving head from %d to %d\n", adev->tx_head, index);
++ adev->tx_head = index;
++}
++
++
++/***********************************************************************
++*/
++void*
++acxmem_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
++{
++ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data;
++}
++
++
++/***********************************************************************
++** acxmem_l_tx_data
++**
++** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
++** Can be called from acx_i_start_xmit (data frames from net core).
++**
++** FIXME: in case of fragments, should loop over the number of
++** pre-allocated tx descrs, properly setting up transfer data and
++** CTL_xxx flags according to fragment number.
++*/
++void
++acxmem_update_queue_indicator (acx_device_t *adev, int txqueue)
++{
++#ifdef USING_MORE_THAN_ONE_TRANSMIT_QUEUE
++ u32 indicator;
++ unsigned long flags;
++ int count;
++
++ /*
++ * Can't handle an interrupt while we're fiddling with the ACX's lock,
++ * according to TI. The ACX is supposed to hold fw_lock for at most
++ * 500ns.
++ */
++ local_irq_save (flags);
++
++ /*
++ * Wait for ACX to release the lock (at most 500ns).
++ */
++ count = 0;
++ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
++ && (count++ < 50)) {
++ ndelay (10);
++ }
++ if (count < 50) {
++
++ /*
++ * Take out the host lock - anything non-zero will work, so don't worry about
++ * be/le
++ */
++ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 1);
++
++ /*
++ * Avoid a race condition
++ */
++ count = 0;
++ while (read_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->fw_lock))
++ && (count++ < 50)) {
++ ndelay (10);
++ }
++
++ if (count < 50) {
++ /*
++ * Mark the queue active
++ */
++ indicator = read_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator));
++ indicator |= cpu_to_le32 (1 << txqueue);
++ write_slavemem32 (adev, (u32) &(adev->acx_queue_indicator->indicator), indicator);
++ }
++
++ /*
++ * Release the host lock
++ */
++ write_slavemem16 (adev, (u32) &(adev->acx_queue_indicator->host_lock), 0);
++
++ }
++
++ /*
++ * Restore interrupts
++ */
++ local_irq_restore (flags);
++#endif
++}
++
++void
++acxmem_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len)
++{
++ /*
++ * txdesc is the address on the ACX
++ */
++ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
++ txhostdesc_t *hostdesc1, *hostdesc2;
++ client_t *clt;
++ u16 rate_cur;
++ u8 Ctl_8, Ctl2_8;
++ u32 addr;
++
++ FN_ENTER;
++ /* fw doesn't tx such packets anyhow */
++ if (unlikely(len < WLAN_HDR_A3_LEN))
++ goto end;
++
++ hostdesc1 = get_txhostdesc(adev, txdesc);
++ /* modify flag status in separate variable to be able to write it back
++ * in one big swoop later (also in order to have less device memory
++ * accesses) */
++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
++ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */
++
++ hostdesc2 = hostdesc1 + 1;
++
++ /* DON'T simply set Ctl field to 0 here globally,
++ * it needs to maintain a consistent flag status (those are state flags!!),
++ * otherwise it may lead to severe disruption. Only set or reset particular
++ * flags at the exact moment this is needed... */
++
++ /* let chip do RTS/CTS handshaking before sending
++ * in case packet size exceeds threshold */
++ if (len > adev->rts_threshold)
++ SET_BIT(Ctl2_8, DESC_CTL2_RTS);
++ else
++ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS);
++
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_3_AP:
++ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1);
++ break;
++ case ACX_MODE_2_STA:
++ clt = adev->ap_client;
++ break;
++#if 0
++/* testing was done on acx111: */
++ case ACX_MODE_MONITOR:
++ SET_BIT(Ctl2_8, 0
++/* sends CTS to self before packet */
++ + DESC_CTL2_SEQ /* don't increase sequence field */
++/* not working (looks like good fcs is still added) */
++ + DESC_CTL2_FCS /* don't add the FCS */
++/* not tested */
++ + DESC_CTL2_MORE_FRAG
++/* not tested */
++ + DESC_CTL2_RETRY /* don't increase retry field */
++/* not tested */
++ + DESC_CTL2_POWER /* don't increase power mgmt. field */
++/* no effect */
++ + DESC_CTL2_WEP /* encrypt this frame */
++/* not tested */
++ + DESC_CTL2_DUR /* don't increase duration field */
++ );
++ /* fallthrough */
++#endif
++ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
++ clt = NULL;
++ break;
++ }
++
++ rate_cur = clt ? clt->rate_cur : adev->rate_bcast;
++ if (unlikely(!rate_cur)) {
++ printk("acx: driver bug! bad ratemask\n");
++ goto end;
++ }
++
++ /* used in tx cleanup routine for auto rate and accounting: */
++ put_txcr(adev, txdesc, clt, rate_cur);
++
++ write_slavemem16 (adev, (u32) &(txdesc->total_length), cpu_to_le16(len));
++ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN);
++ if (IS_ACX111(adev)) {
++ /* note that if !txdesc->do_auto, txrate->cur
++ ** has only one nonzero bit */
++ txdesc->u.r2.rate111 = cpu_to_le16(
++ rate_cur
++ /* WARNING: I was never able to make it work with prism54 AP.
++ ** It was falling down to 1Mbit where shortpre is not applicable,
++ ** and not working at all at "5,11 basic rates only" setting.
++ ** I even didn't see tx packets in radio packet capture.
++ ** Disabled for now --vda */
++ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */
++ );
++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
++ /* should add this to rate111 above as necessary */
++ | (clt->pbcc511 ? RATE111_PBCC511 : 0)
++#endif
++ hostdesc1->length = cpu_to_le16(len);
++ } else { /* ACX100 */
++ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100;
++ write_slavemem8 (adev, (u32) &(txdesc->u.r1.rate), rate_100);
++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
++ if (clt->pbcc511) {
++ if (n == RATE100_5 || n == RATE100_11)
++ n |= RATE100_PBCC511;
++ }
++
++ if (clt->shortpre && (clt->cur != RATE111_1))
++ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */
++#endif
++ /* set autodma and reclaim and 1st mpdu */
++ SET_BIT(Ctl_8, DESC_CTL_FIRSTFRAG);
++
++#if ACX_FRAGMENTATION
++ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */
++#endif
++ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN);
++
++ /*
++ * Since we're not using autodma copy the packet data to the acx now.
++ * Even host descriptors point to the packet header, and the odd indexed
++ * descriptor following points to the packet data.
++ *
++ * The first step is to find free memory in the ACX transmit buffers.
++ * They don't necessarily map one to one with the transmit queue entries,
++ * so search through them starting just after the last one used.
++ */
++ addr = allocate_acx_txbuf_space (adev, len);
++ if (addr) {
++ chaincopy_to_slavemem (adev, addr, hostdesc1->data, len);
++ }
++ else {
++ /*
++ * Bummer. We thought we might have enough room in the transmit
++ * buffers to send this packet, but it turns out we don't. alloc_tx
++ * has already marked this transmit descriptor as HOSTOWN and ACXDONE,
++ * which means the ACX will hang when it gets to this descriptor unless
++ * we do something about it. Having a bubble in the transmit queue just
++ * doesn't seem to work, so we have to reset this transmit queue entry's
++ * state to its original value and back up our head pointer to point
++ * back to this entry.
++ */
++ hostdesc1->length = 0;
++ hostdesc2->length = 0;
++ write_slavemem16 (adev, (u32) &(txdesc->total_length), 0);
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG);
++ adev->tx_head = ((u8*) txdesc - (u8*) adev->txdesc_start) / adev->txdesc_size;
++ goto end;
++ }
++ /*
++ * Tell the ACX where the packet is.
++ */
++ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), addr);
++
++ }
++ /* don't need to clean ack/rts statistics here, already
++ * done on descr cleanup */
++
++ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors
++ * are now owned by the acx100; do this as LAST operation */
++ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN);
++ /* flush writes before we release hostdesc to the adapter here */
++ //wmb();
++
++ /* write back modified flags */
++ /*
++ * At this point Ctl_8 should just be FIRSTFRAG
++ */
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl2_8),Ctl2_8);
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), Ctl_8);
++ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */
++
++ /*
++ * Update the queue indicator to say there's data on the first queue.
++ */
++ acxmem_update_queue_indicator (adev, 0);
++
++ /* flush writes before we tell the adapter that it's its turn now */
++ mmiowb();
++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
++ write_flush(adev);
++
++ /* log the packet content AFTER sending it,
++ * in order to not delay sending any further than absolutely needed
++ * Do separate logs for acx100/111 to have human-readable rates */
++ if (unlikely(acx_debug & (L_XFER|L_DATA))) {
++ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc;
++ if (IS_ACX111(adev))
++ printk("tx: pkt (%s): len %d "
++ "rate %04X%s status %u\n",
++ acx_get_packet_type_string(le16_to_cpu(fc)), len,
++ le16_to_cpu(txdesc->u.r2.rate111),
++ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "",
++ adev->status);
++ else
++ printk("tx: pkt (%s): len %d rate %03u%s status %u\n",
++ acx_get_packet_type_string(fc), len,
++ read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate)),
++ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "",
++ adev->status);
++
++ if (acx_debug & L_DATA) {
++ printk("tx: 802.11 [%d]: ", len);
++ acx_dump_bytes(hostdesc1->data, len);
++ }
++ }
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_l_clean_txdesc
++**
++** This function resets the txdescs' status when the ACX100
++** signals the TX done IRQ (txdescs have been processed), starting with
++** the pool index of the descriptor which we would use next,
++** in order to make sure that we can be as fast as possible
++** in filling new txdescs.
++** Everytime we get called we know where the next packet to be cleaned is.
++*/
++
++#if !ACX_DEBUG
++static inline void log_txbuffer(const acx_device_t *adev) {}
++#else
++static void
++log_txbuffer(acx_device_t *adev)
++{
++ txdesc_t *txdesc;
++ int i;
++ u8 Ctl_8;
++
++ /* no FN_ENTER here, we don't want that */
++ /* no locks here, since it's entirely non-critical code */
++ txdesc = adev->txdesc_start;
++ if (unlikely(!txdesc)) return;
++ printk("tx: desc->Ctl8's:");
++ for (i = 0; i < TX_CNT; i++) {
++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
++ printk(" %02X", Ctl_8);
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++ printk("\n");
++}
++#endif
++
++
++static void
++handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger)
++{
++ const char *err = "unknown error";
++
++ /* hmm, should we handle this as a mask
++ * of *several* bits?
++ * For now I think only caring about
++ * individual bits is ok... */
++ switch (error) {
++ case 0x01:
++ err = "no Tx due to error in other fragment";
++ adev->wstats.discard.fragment++;
++ break;
++ case 0x02:
++ err = "Tx aborted";
++ adev->stats.tx_aborted_errors++;
++ break;
++ case 0x04:
++ err = "Tx desc wrong parameters";
++ adev->wstats.discard.misc++;
++ break;
++ case 0x08:
++ err = "WEP key not found";
++ adev->wstats.discard.misc++;
++ break;
++ case 0x10:
++ err = "MSDU lifetime timeout? - try changing "
++ "'iwconfig retry lifetime XXX'";
++ adev->wstats.discard.misc++;
++ break;
++ case 0x20:
++ err = "excessive Tx retries due to either distance "
++ "too high or unable to Tx or Tx frame error - "
++ "try changing 'iwconfig txpower XXX' or "
++ "'sens'itivity or 'retry'";
++ adev->wstats.discard.retries++;
++ /* Tx error 0x20 also seems to occur on
++ * overheating, so I'm not sure whether we
++ * actually want to do aggressive radio recalibration,
++ * since people maybe won't notice then that their hardware
++ * is slowly getting cooked...
++ * Or is it still a safe long distance from utter
++ * radio non-functionality despite many radio recalibs
++ * to final destructive overheating of the hardware?
++ * In this case we really should do recalib here...
++ * I guess the only way to find out is to do a
++ * potentially fatal self-experiment :-\
++ * Or maybe only recalib in case we're using Tx
++ * rate auto (on errors switching to lower speed
++ * --> less heat?) or 802.11 power save mode?
++ *
++ * ok, just do it. */
++ if (++adev->retry_errors_msg_ratelimit % 4 == 0) {
++ if (adev->retry_errors_msg_ratelimit <= 20) {
++ printk("%s: several excessive Tx "
++ "retry errors occurred, attempting "
++ "to recalibrate radio. Radio "
++ "drift might be caused by increasing "
++ "card temperature, please check the card "
++ "before it's too late!\n",
++ adev->ndev->name);
++ if (adev->retry_errors_msg_ratelimit == 20)
++ printk("disabling above message\n");
++ }
++
++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
++ }
++ break;
++ case 0x40:
++ err = "Tx buffer overflow";
++ adev->stats.tx_fifo_errors++;
++ break;
++ case 0x80:
++ err = "DMA error";
++ adev->wstats.discard.misc++;
++ break;
++ }
++ adev->stats.tx_errors++;
++ if (adev->stats.tx_errors <= 20)
++ printk("%s: tx error 0x%02X, buf %02u! (%s)\n",
++ adev->ndev->name, error, finger, err);
++ else
++ printk("%s: tx error 0x%02X, buf %02u!\n",
++ adev->ndev->name, error, finger);
++}
++
++
++unsigned int
++acxmem_l_clean_txdesc(acx_device_t *adev)
++{
++ txdesc_t *txdesc;
++ unsigned finger;
++ int num_cleaned;
++ u16 r111;
++ u8 error, ack_failures, rts_failures, rts_ok, r100, Ctl_8;
++ u32 acxmem;
++ txdesc_t tmptxdesc;
++
++ FN_ENTER;
++
++ /*
++ * Set up a template descriptor for re-initialization. The only
++ * things that get set are Ctl_8 and the rate, and the rate defaults
++ * to 1Mbps.
++ */
++ memset (&tmptxdesc, 0, sizeof (tmptxdesc));
++ tmptxdesc.Ctl_8 = DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG;
++ tmptxdesc.u.r1.rate = 0x0a;
++
++ if (unlikely(acx_debug & L_DEBUG))
++ log_txbuffer(adev);
++
++ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail);
++
++ /* We know first descr which is not free yet. We advance it as far
++ ** as we see correct bits set in following descs (if next desc
++ ** is NOT free, we shouldn't advance at all). We know that in
++ ** front of tx_tail may be "holes" with isolated free descs.
++ ** We will catch up when all intermediate descs will be freed also */
++
++ finger = adev->tx_tail;
++ num_cleaned = 0;
++ while (likely(finger != adev->tx_head)) {
++ txdesc = get_txdesc(adev, finger);
++
++ /* If we allocated txdesc on tx path but then decided
++ ** to NOT use it, then it will be left as a free "bubble"
++ ** in the "allocated for tx" part of the ring.
++ ** We may meet it on the next ring pass here. */
++
++ /* stop if not marked as "tx finished" and "host owned" */
++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
++ if ((Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN)
++ != DESC_CTL_ACXDONE_HOSTOWN) {
++ if (unlikely(!num_cleaned)) { /* maybe remove completely */
++ log(L_BUFT, "clean_txdesc: tail isn't free. "
++ "tail:%d head:%d\n",
++ adev->tx_tail, adev->tx_head);
++ }
++ break;
++ }
++
++ /* remember desc values... */
++ error = read_slavemem8 (adev, (u32) &(txdesc->error));
++ ack_failures = read_slavemem8 (adev, (u32) &(txdesc->ack_failures));
++ rts_failures = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures));
++ rts_ok = read_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok));
++ r100 = read_slavemem8 (adev, (u32) &(txdesc->u.r1.rate));
++ r111 = le16_to_cpu(read_slavemem16 (adev, (u32) &(txdesc->u.r2.rate111)));
++
++ /* need to check for certain error conditions before we
++ * clean the descriptor: we still need valid descr data here */
++ if (unlikely(0x30 & error)) {
++ /* only send IWEVTXDROP in case of retry or lifetime exceeded;
++ * all other errors mean we screwed up locally */
++ union iwreq_data wrqu;
++ wlan_hdr_t *hdr;
++ txhostdesc_t *hostdesc;
++
++ hostdesc = get_txhostdesc(adev, txdesc);
++ hdr = (wlan_hdr_t *)hostdesc->data;
++ MAC_COPY(wrqu.addr.sa_data, hdr->a1);
++ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL);
++ }
++
++ /*
++ * Free up the transmit data buffers
++ */
++ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
++ if (acxmem) {
++ reclaim_acx_txbuf_space (adev, acxmem);
++ }
++
++ /* ...and free the desc by clearing all the fields
++ except the next pointer */
++ copy_to_slavemem (adev,
++ (u32) &(txdesc->HostMemPtr),
++ (u8 *) &(tmptxdesc.HostMemPtr),
++ sizeof (tmptxdesc) - sizeof(tmptxdesc.pNextDesc)
++ );
++
++ adev->tx_free++;
++ num_cleaned++;
++
++ if ((adev->tx_free >= TX_START_QUEUE)
++ && (adev->status == ACX_STATUS_4_ASSOCIATED)
++ && (acx_queue_stopped(adev->ndev))
++ ) {
++ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n",
++ adev->tx_free);
++ acx_wake_queue(adev->ndev, NULL);
++ }
++
++ /* do error checking, rate handling and logging
++ * AFTER having done the work, it's faster */
++
++ /* do rate handling */
++ if (adev->rate_auto) {
++ struct client *clt = get_txc(adev, txdesc);
++ if (clt) {
++ u16 cur = get_txr(adev, txdesc);
++ if (clt->rate_cur == cur) {
++ acx_l_handle_txrate_auto(adev, clt,
++ cur, /* intended rate */
++ r100, r111, /* actually used rate */
++ (error & 0x30), /* was there an error? */
++ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free);
++ }
++ }
++ }
++
++ if (unlikely(error))
++ handle_tx_error(adev, error, finger);
++
++ if (IS_ACX111(adev))
++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n",
++ finger, ack_failures, rts_failures, rts_ok, r111);
++ else
++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n",
++ finger, ack_failures, rts_failures, rts_ok, r100);
++
++ /* update pointer for descr to be cleaned next */
++ finger = (finger + 1) % TX_CNT;
++ }
++
++ /* remember last position */
++ adev->tx_tail = finger;
++/* end: */
++ FN_EXIT1(num_cleaned);
++ return num_cleaned;
++}
++
++/* clean *all* Tx descriptors, and regardless of their previous state.
++ * Used for brute-force reset handling. */
++void
++acxmem_l_clean_txdesc_emergency(acx_device_t *adev)
++{
++ txdesc_t *txdesc;
++ int i;
++ u32 acxmem;
++
++ FN_ENTER;
++
++ for (i = 0; i < TX_CNT; i++) {
++ txdesc = get_txdesc(adev, i);
++
++ /* free it */
++ write_slavemem8 (adev, (u32) &(txdesc->ack_failures), 0);
++ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_failures), 0);
++ write_slavemem8 (adev, (u32) &(txdesc->u.rts.rts_ok), 0);
++ write_slavemem8 (adev, (u32) &(txdesc->error), 0);
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8), DESC_CTL_HOSTOWN);
++
++ /*
++ * Clean up the memory allocated on the ACX for this transmit descriptor.
++ */
++ acxmem = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
++ if (acxmem) {
++ reclaim_acx_txbuf_space (adev, acxmem);
++ }
++
++ write_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr), 0);
++ }
++
++ adev->tx_free = TX_CNT;
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxmem_s_create_tx_host_desc_queue
++*/
++
++static void*
++allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg)
++{
++ void *ptr;
++ ptr = kmalloc (size, GFP_KERNEL);
++ /*
++ * The ACX can't use the physical address, so we'll have to fake it
++ * later and it might be handy to have the virtual address.
++ */
++ *phy = (dma_addr_t) NULL;
++
++ if (ptr) {
++ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n",
++ msg, (int)size, ptr, (unsigned long long)*phy);
++ memset(ptr, 0, size);
++ return ptr;
++ }
++ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n",
++ msg, (int)size);
++ return NULL;
++}
++
++
++/*
++ * In the generic slave memory access mode, most of the stuff in
++ * the txhostdesc_t is unused. It's only here because the rest of
++ * the ACX driver expects it to be since the PCI version uses indirect
++ * host memory organization with DMA. Since we're not using DMA the
++ * only use we have for the host descriptors is to store the packets
++ * on the way out.
++ */
++static int
++acxmem_s_create_tx_host_desc_queue(acx_device_t *adev)
++{
++ txhostdesc_t *hostdesc;
++ u8 *txbuf;
++ int i;
++
++ FN_ENTER;
++
++ /* allocate TX buffer */
++ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS;
++
++ adev->txbuf_start = allocate(adev, adev->txbuf_area_size,
++ &adev->txbuf_startphy, "txbuf_start");
++ if (!adev->txbuf_start)
++ goto fail;
++
++ /* allocate the TX host descriptor queue pool */
++ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc);
++
++ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size,
++ &adev->txhostdesc_startphy, "txhostdesc_start");
++ if (!adev->txhostdesc_start)
++ goto fail;
++
++ /* check for proper alignment of TX host descriptor pool */
++ if ((long) adev->txhostdesc_start & 3) {
++ printk("acx: driver bug: dma alloc returns unaligned address\n");
++ goto fail;
++ }
++
++ hostdesc = adev->txhostdesc_start;
++ txbuf = adev->txbuf_start;
++
++#if 0
++/* Each tx buffer is accessed by hardware via
++** txdesc -> txhostdesc(s) -> txbuffer(s).
++** We use only one txhostdesc per txdesc, but it looks like
++** acx111 is buggy: it accesses second txhostdesc
++** (via hostdesc.desc_phy_next field) even if
++** txdesc->length == hostdesc->length and thus
++** entire packet was placed into first txhostdesc.
++** Due to this bug acx111 hangs unless second txhostdesc
++** has le16_to_cpu(hostdesc.length) = 3 (or larger)
++** Storing NULL into hostdesc.desc_phy_next
++** doesn't seem to help.
++**
++** Update: although it worked on Xterasys XN-2522g
++** with len=3 trick, WG311v2 is even more bogus, doesn't work.
++** Keeping this code (#ifdef'ed out) for documentational purposes.
++*/
++ for (i = 0; i < TX_CNT*2; i++) {
++ hostdesc_phy += sizeof(*hostdesc);
++ if (!(i & 1)) {
++ hostdesc->data_phy = cpu2acx(txbuf_phy);
++ /* hostdesc->data_offset = ... */
++ /* hostdesc->reserved = ... */
++ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
++ /* hostdesc->length = ... */
++ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
++ hostdesc->pNext = ptr2acx(NULL);
++ /* hostdesc->Status = ... */
++ /* below: non-hardware fields */
++ hostdesc->data = txbuf;
++
++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS;
++ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS;
++ } else {
++ /* hostdesc->data_phy = ... */
++ /* hostdesc->data_offset = ... */
++ /* hostdesc->reserved = ... */
++ /* hostdesc->Ctl_16 = ... */
++ hostdesc->length = cpu_to_le16(3); /* bug workaround */
++ /* hostdesc->desc_phy_next = ... */
++ /* hostdesc->pNext = ... */
++ /* hostdesc->Status = ... */
++ /* below: non-hardware fields */
++ /* hostdesc->data = ... */
++ }
++ hostdesc++;
++ }
++#endif
++/* We initialize two hostdescs so that they point to adjacent
++** memory areas. Thus txbuf is really just a contiguous memory area */
++ for (i = 0; i < TX_CNT*2; i++) {
++ /* ->data is a non-hardware field: */
++ hostdesc->data = txbuf;
++
++ if (!(i & 1)) {
++ txbuf += WLAN_HDR_A3_LEN;
++ } else {
++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
++ }
++ hostdesc++;
++ }
++ hostdesc--;
++
++ FN_EXIT1(OK);
++ return OK;
++fail:
++ printk("acx: create_tx_host_desc_queue FAILED\n");
++ /* dealloc will be done by free function on error case */
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***************************************************************
++** acxmem_s_create_rx_host_desc_queue
++*/
++/* the whole size of a data buffer (header plus data body)
++ * plus 32 bytes safety offset at the end */
++#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32)
++
++static int
++acxmem_s_create_rx_host_desc_queue(acx_device_t *adev)
++{
++ rxhostdesc_t *hostdesc;
++ rxbuffer_t *rxbuf;
++ int i;
++
++ FN_ENTER;
++
++ /* allocate the RX host descriptor queue pool */
++ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc);
++
++ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size,
++ &adev->rxhostdesc_startphy, "rxhostdesc_start");
++ if (!adev->rxhostdesc_start)
++ goto fail;
++
++ /* check for proper alignment of RX host descriptor pool */
++ if ((long) adev->rxhostdesc_start & 3) {
++ printk("acx: driver bug: dma alloc returns unaligned address\n");
++ goto fail;
++ }
++
++ /* allocate Rx buffer pool which will be used by the acx
++ * to store the whole content of the received frames in it */
++ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE;
++
++ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size,
++ &adev->rxbuf_startphy, "rxbuf_start");
++ if (!adev->rxbuf_start)
++ goto fail;
++
++ rxbuf = adev->rxbuf_start;
++ hostdesc = adev->rxhostdesc_start;
++
++ /* don't make any popular C programming pointer arithmetic mistakes
++ * here, otherwise I'll kill you...
++ * (and don't dare asking me why I'm warning you about that...) */
++ for (i = 0; i < RX_CNT; i++) {
++ hostdesc->data = rxbuf;
++ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE);
++ rxbuf++;
++ hostdesc++;
++ }
++ hostdesc--;
++ FN_EXIT1(OK);
++ return OK;
++fail:
++ printk("acx: create_rx_host_desc_queue FAILED\n");
++ /* dealloc will be done by free function on error case */
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***************************************************************
++** acxmem_s_create_hostdesc_queues
++*/
++int
++acxmem_s_create_hostdesc_queues(acx_device_t *adev)
++{
++ int result;
++ result = acxmem_s_create_tx_host_desc_queue(adev);
++ if (OK != result) return result;
++ result = acxmem_s_create_rx_host_desc_queue(adev);
++ return result;
++}
++
++
++/***************************************************************
++** acxmem_create_tx_desc_queue
++*/
++static void
++acxmem_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start)
++{
++ txdesc_t *txdesc;
++ u32 clr;
++ int i;
++
++ FN_ENTER;
++
++ if (IS_ACX100(adev))
++ adev->txdesc_size = sizeof(*txdesc);
++ else
++ /* the acx111 txdesc is 4 bytes larger */
++ adev->txdesc_size = sizeof(*txdesc) + 4;
++
++ /*
++ * This refers to an ACX address, not one of ours
++ */
++ adev->txdesc_start = (txdesc_t *) tx_queue_start;
++
++ log(L_DEBUG, "adev->txdesc_start=%p\n",
++ adev->txdesc_start);
++
++ adev->tx_free = TX_CNT;
++ /* done by memset: adev->tx_head = 0; */
++ /* done by memset: adev->tx_tail = 0; */
++ txdesc = adev->txdesc_start;
++
++ if (IS_ACX111(adev)) {
++ /* ACX111 has a preinitialized Tx buffer! */
++ /* loop over whole send pool */
++ /* FIXME: do we have to do the hostmemptr stuff here?? */
++ for (i = 0; i < TX_CNT; i++) {
++ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
++ /* reserve two (hdr desc and payload desc) */
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++ } else {
++ /* ACX100 Tx buffer needs to be initialized by us */
++ /* clear whole send pool. sizeof is safe here (we are acx100) */
++
++ /*
++ * adev->txdesc_start refers to device memory, so we can't write
++ * directly to it.
++ */
++ clr = (u32) adev->txdesc_start;
++ while (clr < (u32) adev->txdesc_start + (TX_CNT * sizeof(*txdesc))) {
++ write_slavemem32 (adev, clr, 0);
++ clr += 4;
++ }
++
++ /* loop over whole send pool */
++ for (i = 0; i < TX_CNT; i++) {
++ log(L_DEBUG, "configure card tx descriptor: 0x%p, "
++ "size: 0x%X\n", txdesc, adev->txdesc_size);
++
++ /* initialise ctl */
++ /*
++ * No auto DMA here
++ */
++ write_slavemem8 (adev, (u32) &(txdesc->Ctl_8),
++ (u8) (DESC_CTL_HOSTOWN | DESC_CTL_FIRSTFRAG));
++ /* done by memset(0): txdesc->Ctl2_8 = 0; */
++
++ /* point to next txdesc */
++ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
++ (u32) cpu_to_le32 ((u8 *) txdesc + adev->txdesc_size));
++
++ /* go to the next one */
++ /* ++ is safe here (we are acx100) */
++ txdesc++;
++ }
++ /* go back to the last one */
++ txdesc--;
++ /* and point to the first making it a ring buffer */
++ write_slavemem32 (adev, (u32) &(txdesc->pNextDesc),
++ (u32) cpu_to_le32 (tx_queue_start));
++ }
++ FN_EXIT0;
++}
++
++
++/***************************************************************
++** acxmem_create_rx_desc_queue
++*/
++static void
++acxmem_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start)
++{
++ rxdesc_t *rxdesc;
++ u32 mem_offs;
++ int i;
++
++ FN_ENTER;
++
++ /* done by memset: adev->rx_tail = 0; */
++
++ /* ACX111 doesn't need any further config: preconfigures itself.
++ * Simply print ring buffer for debugging */
++ if (IS_ACX111(adev)) {
++ /* rxdesc_start already set here */
++
++ adev->rxdesc_start = (rxdesc_t *) rx_queue_start;
++
++ rxdesc = adev->rxdesc_start;
++ for (i = 0; i < RX_CNT; i++) {
++ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc);
++ rxdesc = adev->rxdesc_start = (rxdesc_t *)
++ acx2cpu(rxdesc->pNextDesc);
++ }
++ } else {
++ /* we didn't pre-calculate rxdesc_start in case of ACX100 */
++ /* rxdesc_start should be right AFTER Tx pool */
++ adev->rxdesc_start = (rxdesc_t *)
++ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t)));
++ /* NB: sizeof(txdesc_t) above is valid because we know
++ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere!
++ ** acx111's txdesc is larger! */
++
++ mem_offs = (u32) adev->rxdesc_start;
++ while (mem_offs < (u32) adev->rxdesc_start + (RX_CNT * sizeof (*rxdesc))) {
++ write_slavemem32 (adev, mem_offs, 0);
++ mem_offs += 4;
++ }
++
++ /* loop over whole receive pool */
++ rxdesc = adev->rxdesc_start;
++ for (i = 0; i < RX_CNT; i++) {
++ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc);
++ /* point to next rxdesc */
++ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
++ (u32) cpu_to_le32 ((u8 *) rxdesc + sizeof(*rxdesc)));
++ /* go to the next one */
++ rxdesc++;
++ }
++ /* go to the last one */
++ rxdesc--;
++
++ /* and point to the first making it a ring buffer */
++ write_slavemem32 (adev, (u32) &(rxdesc->pNextDesc),
++ (u32) cpu_to_le32 (rx_queue_start));
++ }
++ FN_EXIT0;
++}
++
++
++/***************************************************************
++** acxmem_create_desc_queues
++*/
++void
++acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start)
++{
++ u32 *p;
++ int i;
++
++ acxmem_create_tx_desc_queue(adev, tx_queue_start);
++ acxmem_create_rx_desc_queue(adev, rx_queue_start);
++ p = (u32 *) adev->acx_queue_indicator;
++ for (i = 0; i < 4; i++) {
++ write_slavemem32 (adev, (u32) p, 0);
++ p++;
++ }
++}
++
++
++/***************************************************************
++** acxmem_s_proc_diag_output
++*/
++char*
++acxmem_s_proc_diag_output(char *p, acx_device_t *adev)
++{
++ const char *rtl, *thd, *ttl;
++ txdesc_t *txdesc;
++ u8 Ctl_8;
++ rxdesc_t *rxdesc;
++ int i;
++ u32 tmp;
++ txdesc_t txd;
++ u8 buf[0x200];
++ int j, k;
++
++ FN_ENTER;
++
++#if DUMP_MEM_DURING_DIAG > 0
++ dump_acxmem (adev, 0, 0x10000);
++ panic ("dump finished");
++#endif
++
++ p += sprintf(p, "** Rx buf **\n");
++ rxdesc = adev->rxdesc_start;
++ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
++ rtl = (i == adev->rx_tail) ? " [tail]" : "";
++ Ctl_8 = read_slavemem8 (adev, (u32) &(rxdesc->Ctl_8));
++ if (Ctl_8 & DESC_CTL_HOSTOWN)
++ p += sprintf(p, "%02u (%02x) FULL%s\n", i, Ctl_8, rtl);
++ else
++ p += sprintf(p, "%02u (%02x) empty%s\n", i, Ctl_8, rtl);
++ rxdesc++;
++ }
++ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free,
++ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running");
++
++ p += sprintf(p, "** Tx buf %d blocks total, %d available, free list head %04x\n",
++ adev->acx_txbuf_numblocks, adev->acx_txbuf_blocks_free, adev->acx_txbuf_free);
++ txdesc = adev->txdesc_start;
++ if (txdesc) {
++ for (i = 0; i < TX_CNT; i++) {
++ thd = (i == adev->tx_head) ? " [head]" : "";
++ ttl = (i == adev->tx_tail) ? " [tail]" : "";
++ copy_from_slavemem (adev, (u8 *) &txd, (u32) txdesc, sizeof (txd));
++ Ctl_8 = read_slavemem8 (adev, (u32) &(txdesc->Ctl_8));
++ if (Ctl_8 & DESC_CTL_ACXDONE)
++ p += sprintf(p, "%02u ready to free (%02X)%s%s", i, Ctl_8, thd, ttl);
++ else if (Ctl_8 & DESC_CTL_HOSTOWN)
++ p += sprintf(p, "%02u available (%02X)%s%s", i, Ctl_8, thd, ttl);
++ else
++ p += sprintf(p, "%02u busy (%02X)%s%s", i, Ctl_8, thd, ttl);
++ tmp = read_slavemem32 (adev, (u32) &(txdesc->AcxMemPtr));
++ if (tmp) {
++ p += sprintf (p, " %04x", tmp);
++ while ((tmp = read_slavemem32 (adev, (u32) tmp)) != 0x02000000) {
++ tmp <<= 5;
++ p += sprintf (p, " %04x", tmp);
++ }
++ }
++ p += sprintf (p, "\n");
++ p += sprintf (p, " %04x: %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %02x %02x %02x %02x\n"
++ "%02x %02x %02x %02x %04x\n",
++ (u32) txdesc,
++ txd.pNextDesc.v, txd.HostMemPtr.v, txd.AcxMemPtr.v, txd.tx_time,
++ txd.total_length, txd.Reserved,
++ txd.dummy[0], txd.dummy[1], txd.dummy[2], txd.dummy[3],
++ txd.Ctl_8, txd.Ctl2_8, txd.error, txd.ack_failures,
++ txd.u.rts.rts_failures, txd.u.rts.rts_ok, txd.u.r1.rate, txd.u.r1.queue_ctrl,
++ txd.queue_info
++ );
++ if (txd.AcxMemPtr.v) {
++ copy_from_slavemem (adev, buf, txd.AcxMemPtr.v, sizeof (buf));
++ for (j = 0; (j < txd.total_length) && (j<(sizeof(buf)-4)); j+=16) {
++ p += sprintf (p, " ");
++ for (k = 0; (k < 16) && (j+k < txd.total_length); k++) {
++ p += sprintf (p, " %02x", buf[j+k+4]);
++ }
++ p += sprintf (p, "\n");
++ }
++ }
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++ }
++
++ p += sprintf(p,
++ "\n"
++ "** Generic slave data **\n"
++ "irq_mask 0x%04x irq_status 0x%04x irq on acx 0x%04x\n"
++ "txbuf_start 0x%p, txbuf_area_size %u\n"
++ "txdesc_size %u, txdesc_start 0x%p\n"
++ "txhostdesc_start 0x%p, txhostdesc_area_size %u\n"
++ "txbuf start 0x%04x, txbuf size %d\n"
++ "rxdesc_start 0x%p\n"
++ "rxhostdesc_start 0x%p, rxhostdesc_area_size %u\n"
++ "rxbuf_start 0x%p, rxbuf_area_size %u\n",
++ adev->irq_mask, adev->irq_status, read_reg32(adev, IO_ACX_IRQ_STATUS_NON_DES),
++ adev->txbuf_start, adev->txbuf_area_size,
++ adev->txdesc_size, adev->txdesc_start,
++ adev->txhostdesc_start, adev->txhostdesc_area_size,
++ adev->acx_txbuf_start, adev->acx_txbuf_numblocks * adev->memblocksize,
++ adev->rxdesc_start,
++ adev->rxhostdesc_start, adev->rxhostdesc_area_size,
++ adev->rxbuf_start, adev->rxbuf_area_size);
++ FN_EXIT0;
++ return p;
++}
++
++
++/***********************************************************************
++*/
++int
++acxmem_proc_eeprom_output(char *buf, acx_device_t *adev)
++{
++ char *p = buf;
++ int i;
++
++ FN_ENTER;
++
++ for (i = 0; i < 0x400; i++) {
++ acxmem_read_eeprom_byte(adev, i, p++);
++ }
++
++ FN_EXIT1(p - buf);
++ return p - buf;
++}
++
++
++/***********************************************************************
++*/
++void
++acxmem_set_interrupt_mask(acx_device_t *adev)
++{
++ if (IS_ACX111(adev)) {
++ adev->irq_mask = (u16) ~(0
++ | HOST_INT_RX_DATA
++ | HOST_INT_TX_COMPLETE
++ /* | HOST_INT_TX_XFER */
++ /* | HOST_INT_RX_COMPLETE */
++ /* | HOST_INT_DTIM */
++ /* | HOST_INT_BEACON */
++ /* | HOST_INT_TIMER */
++ /* | HOST_INT_KEY_NOT_FOUND */
++ | HOST_INT_IV_ICV_FAILURE
++ | HOST_INT_CMD_COMPLETE
++ | HOST_INT_INFO
++ | HOST_INT_OVERFLOW
++ /* | HOST_INT_PROCESS_ERROR */
++ | HOST_INT_SCAN_COMPLETE
++ | HOST_INT_FCS_THRESHOLD
++ | HOST_INT_UNKNOWN
++ );
++ /* Or else acx100 won't signal cmd completion, right? */
++ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */
++ } else {
++ adev->irq_mask = (u16) ~(0
++ | HOST_INT_RX_DATA
++ | HOST_INT_TX_COMPLETE
++ /* | HOST_INT_TX_XFER */
++ /* | HOST_INT_RX_COMPLETE */
++ /* | HOST_INT_DTIM */
++ /* | HOST_INT_BEACON */
++ /* | HOST_INT_TIMER */
++ /* | HOST_INT_KEY_NOT_FOUND */
++ /* | HOST_INT_IV_ICV_FAILURE */
++ | HOST_INT_CMD_COMPLETE
++ | HOST_INT_INFO
++ /* | HOST_INT_OVERFLOW */
++ /* | HOST_INT_PROCESS_ERROR */
++ | HOST_INT_SCAN_COMPLETE
++ /* | HOST_INT_FCS_THRESHOLD */
++ /* | HOST_INT_BEACON_MISSED */
++ );
++ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */
++ }
++}
++
++
++/***********************************************************************
++*/
++int
++acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
++{
++ struct acx111_ie_tx_level tx_level;
++
++ /* since it can be assumed that at least the Maxim radio has a
++ * maximum power output of 20dBm and since it also can be
++ * assumed that these values drive the DAC responsible for
++ * setting the linear Tx level, I'd guess that these values
++ * should be the corresponding linear values for a dBm value,
++ * in other words: calculate the values from that formula:
++ * Y [dBm] = 10 * log (X [mW])
++ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm)
++ * and you're done...
++ * Hopefully that's ok, but you never know if we're actually
++ * right... (especially since Windows XP doesn't seem to show
++ * actual Tx dBm values :-P) */
++
++ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the
++ * values are EXACTLY mW!!! Not sure about RFMD and others,
++ * though... */
++ static const u8 dbm2val_maxim[21] = {
++ 63, 63, 63, 62,
++ 61, 61, 60, 60,
++ 59, 58, 57, 55,
++ 53, 50, 47, 43,
++ 38, 31, 23, 13,
++ 0
++ };
++ static const u8 dbm2val_rfmd[21] = {
++ 0, 0, 0, 1,
++ 2, 2, 3, 3,
++ 4, 5, 6, 8,
++ 10, 13, 16, 20,
++ 25, 32, 41, 50,
++ 63
++ };
++ const u8 *table;
++
++ switch (adev->radio_type) {
++ case RADIO_MAXIM_0D:
++ table = &dbm2val_maxim[0];
++ break;
++ case RADIO_RFMD_11:
++ case RADIO_RALINK_15:
++ table = &dbm2val_rfmd[0];
++ break;
++ default:
++ printk("%s: unknown/unsupported radio type, "
++ "cannot modify tx power level yet!\n",
++ adev->ndev->name);
++ return NOT_OK;
++ }
++ /*
++ * The hx4700 EEPROM, at least, only supports 1 power setting. The configure
++ * routine matches the PA bias with the gain, so just use its default value.
++ * The values are: 0x2b for the gain and 0x03 for the PA bias. The firmware
++ * writes the gain level to the Tx gain control DAC and the PA bias to the Maxim
++ * radio's PA bias register. The firmware limits itself to 0 - 64 when writing to the
++ * gain control DAC.
++ *
++ * Physically between the ACX and the radio, higher Tx gain control DAC values result
++ * in less power output; 0 volts to the Maxim radio results in the highest output power
++ * level, which I'm assuming matches up with 0 in the Tx Gain DAC register.
++ *
++ * Although there is only the 1 power setting, one of the radio firmware functions adjusts
++ * the transmit power level up and down. That function is called by the ACX FIQ handler
++ * under certain conditions.
++ */
++ tx_level.level = 1;
++ //return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
++
++ printk("%s: changing radio power level to %u dBm (%u)\n",
++ adev->ndev->name, level_dbm, table[level_dbm]);
++ acxmem_s_write_phy_reg(adev, 0x11, table[level_dbm]);
++
++ return 0;
++}
++
++
++static struct platform_driver
++acxmem_drv_id = {
++ .driver = {
++ .name = "acx-mem",
++ },
++ .probe = acxmem_e_probe,
++ .remove = __devexit_p(acxmem_e_remove),
++#ifdef CONFIG_PM
++ .suspend = acxmem_e_suspend,
++ .resume = acxmem_e_resume
++#endif /* CONFIG_PM */
++};
++
++
++/***********************************************************************
++** acxmem_e_init_module
++**
++** Module initialization routine, called once at module load time
++*/
++int __init
++acxmem_e_init_module(void)
++{
++ int res;
++
++ FN_ENTER;
++
++#if (ACX_IO_WIDTH==32)
++ printk("acx: compiled to use 32bit I/O access. "
++ "I/O timing issues might occur, such as "
++ "non-working firmware upload. Report them\n");
++#else
++ printk("acx: compiled to use 16bit I/O access only "
++ "(compatibility mode)\n");
++#endif
++
++#ifdef __LITTLE_ENDIAN
++#define ENDIANNESS_STRING "running on a little-endian CPU\n"
++#else
++#define ENDIANNESS_STRING "running on a BIG-ENDIAN CPU\n"
++#endif
++ log(L_INIT,
++ ENDIANNESS_STRING
++ "PCI module " ACX_RELEASE " initialized, "
++ "waiting for cards to probe...\n"
++ );
++
++ res = platform_driver_register (&acxmem_drv_id);
++ FN_EXIT1(res);
++ return res;
++}
++
++
++/***********************************************************************
++** acxmem_e_cleanup_module
++**
++** Called at module unload time. This is our last chance to
++** clean up after ourselves.
++*/
++void __exit
++acxmem_e_cleanup_module(void)
++{
++ FN_ENTER;
++
++ printk ("cleanup_module\n");
++ platform_driver_unregister( &acxmem_drv_id );
++
++ FN_EXIT0;
++}
++
++void acxmem_e_release(struct device *dev) {
++}
++
++MODULE_AUTHOR( "Todd Blumer <todd@sdgsystems.com>" );
++MODULE_DESCRIPTION( "ACX Slave Memory Driver" );
++MODULE_LICENSE( "GPL" );
++
+Index: linux-2.6.23/drivers/net/wireless/acx/pci.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/pci.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,4234 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++*/
++#define ACX_PCI 1
++
++#include <linux/version.h>
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
++#include <linux/config.h>
++#endif
++
++/* Linux 2.6.18+ uses <linux/utsrelease.h> */
++#ifndef UTS_RELEASE
++#include <linux/utsrelease.h>
++#endif
++
++#include <linux/compiler.h> /* required for Lx 2.6.8 ?? */
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/skbuff.h>
++#include <linux/slab.h>
++#include <linux/if_arp.h>
++#include <linux/rtnetlink.h>
++#include <linux/wireless.h>
++#include <net/iw_handler.h>
++#include <linux/netdevice.h>
++#include <linux/ioport.h>
++#include <linux/pci.h>
++#include <linux/pm.h>
++#include <linux/vmalloc.h>
++#include <linux/dma-mapping.h>
++
++#include "acx.h"
++
++
++/***********************************************************************
++*/
++#define PCI_TYPE (PCI_USES_MEM | PCI_ADDR0 | PCI_NO_ACPI_WAKE)
++#define PCI_ACX100_REGION1 0x01
++#define PCI_ACX100_REGION1_SIZE 0x1000 /* Memory size - 4K bytes */
++#define PCI_ACX100_REGION2 0x02
++#define PCI_ACX100_REGION2_SIZE 0x10000 /* Memory size - 64K bytes */
++
++#define PCI_ACX111_REGION1 0x00
++#define PCI_ACX111_REGION1_SIZE 0x2000 /* Memory size - 8K bytes */
++#define PCI_ACX111_REGION2 0x01
++#define PCI_ACX111_REGION2_SIZE 0x20000 /* Memory size - 128K bytes */
++
++/* Texas Instruments Vendor ID */
++#define PCI_VENDOR_ID_TI 0x104c
++
++/* ACX100 22Mb/s WLAN controller */
++#define PCI_DEVICE_ID_TI_TNETW1100A 0x8400
++#define PCI_DEVICE_ID_TI_TNETW1100B 0x8401
++
++/* ACX111 54Mb/s WLAN controller */
++#define PCI_DEVICE_ID_TI_TNETW1130 0x9066
++
++/* PCI Class & Sub-Class code, Network-'Other controller' */
++#define PCI_CLASS_NETWORK_OTHERS 0x0280
++
++#define CARD_EEPROM_ID_SIZE 6
++
++#ifndef PCI_D0
++/* From include/linux/pci.h */
++#define PCI_D0 0
++#define PCI_D1 1
++#define PCI_D2 2
++#define PCI_D3hot 3
++#define PCI_D3cold 4
++#define PCI_UNKNOWN 5
++#define PCI_POWER_ERROR -1
++#endif
++
++
++/***********************************************************************
++*/
++static void acxpci_i_tx_timeout(struct net_device *ndev);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++static irqreturn_t acxpci_i_interrupt(int irq, void *dev_id);
++#else
++static irqreturn_t acxpci_i_interrupt(int irq, void *dev_id, struct pt_regs *regs);
++#endif
++static void acxpci_i_set_multicast_list(struct net_device *ndev);
++
++static int acxpci_e_open(struct net_device *ndev);
++static int acxpci_e_close(struct net_device *ndev);
++static void acxpci_s_up(struct net_device *ndev);
++static void acxpci_s_down(struct net_device *ndev);
++
++
++/***********************************************************************
++** Register access
++*/
++
++/* Pick one */
++/* #define INLINE_IO static */
++#define INLINE_IO static inline
++
++INLINE_IO u32
++read_reg32(acx_device_t *adev, unsigned int offset)
++{
++#if ACX_IO_WIDTH == 32
++ return readl((u8 *)adev->iobase + adev->io[offset]);
++#else
++ return readw((u8 *)adev->iobase + adev->io[offset])
++ + (readw((u8 *)adev->iobase + adev->io[offset] + 2) << 16);
++#endif
++}
++
++INLINE_IO u16
++read_reg16(acx_device_t *adev, unsigned int offset)
++{
++ return readw((u8 *)adev->iobase + adev->io[offset]);
++}
++
++INLINE_IO u8
++read_reg8(acx_device_t *adev, unsigned int offset)
++{
++ return readb((u8 *)adev->iobase + adev->io[offset]);
++}
++
++INLINE_IO void
++write_reg32(acx_device_t *adev, unsigned int offset, u32 val)
++{
++#if ACX_IO_WIDTH == 32
++ writel(val, (u8 *)adev->iobase + adev->io[offset]);
++#else
++ writew(val & 0xffff, (u8 *)adev->iobase + adev->io[offset]);
++ writew(val >> 16, (u8 *)adev->iobase + adev->io[offset] + 2);
++#endif
++}
++
++INLINE_IO void
++write_reg16(acx_device_t *adev, unsigned int offset, u16 val)
++{
++ writew(val, (u8 *)adev->iobase + adev->io[offset]);
++}
++
++INLINE_IO void
++write_reg8(acx_device_t *adev, unsigned int offset, u8 val)
++{
++ writeb(val, (u8 *)adev->iobase + adev->io[offset]);
++}
++
++/* Handle PCI posting properly:
++ * Make sure that writes reach the adapter in case they require to be executed
++ * *before* the next write, by reading a random (and safely accessible) register.
++ * This call has to be made if there is no read following (which would flush the data
++ * to the adapter), yet the written data has to reach the adapter immediately. */
++INLINE_IO void
++write_flush(acx_device_t *adev)
++{
++ /* readb(adev->iobase + adev->io[IO_ACX_INFO_MAILBOX_OFFS]); */
++ /* faster version (accesses the first register, IO_ACX_SOFT_RESET,
++ * which should also be safe): */
++ readb(adev->iobase);
++}
++
++INLINE_IO int
++adev_present(acx_device_t *adev)
++{
++ /* fast version (accesses the first register, IO_ACX_SOFT_RESET,
++ * which should be safe): */
++ return readl(adev->iobase) != 0xffffffff;
++}
++
++
++/***********************************************************************
++*/
++static inline txdesc_t*
++get_txdesc(acx_device_t *adev, int index)
++{
++ return (txdesc_t*) (((u8*)adev->txdesc_start) + index * adev->txdesc_size);
++}
++
++static inline txdesc_t*
++advance_txdesc(acx_device_t *adev, txdesc_t* txdesc, int inc)
++{
++ return (txdesc_t*) (((u8*)txdesc) + inc * adev->txdesc_size);
++}
++
++static txhostdesc_t*
++get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ index /= adev->txdesc_size;
++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ return &adev->txhostdesc_start[index*2];
++}
++
++static inline client_t*
++get_txc(acx_device_t *adev, txdesc_t* txdesc)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ index /= adev->txdesc_size;
++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return NULL;
++ }
++ return adev->txc[index];
++}
++
++static inline u16
++get_txr(acx_device_t *adev, txdesc_t* txdesc)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ index /= adev->txdesc_size;
++ return adev->txr[index];
++}
++
++static inline void
++put_txcr(acx_device_t *adev, txdesc_t* txdesc, client_t* c, u16 r111)
++{
++ int index = (u8*)txdesc - (u8*)adev->txdesc_start;
++ if (unlikely(ACX_DEBUG && (index % adev->txdesc_size))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return;
++ }
++ index /= adev->txdesc_size;
++ if (unlikely(ACX_DEBUG && (index >= TX_CNT))) {
++ printk("bad txdesc ptr %p\n", txdesc);
++ return;
++ }
++ adev->txc[index] = c;
++ adev->txr[index] = r111;
++}
++
++
++/***********************************************************************
++** EEPROM and PHY read/write helpers
++*/
++/***********************************************************************
++** acxpci_read_eeprom_byte
++**
++** Function called to read an octet in the EEPROM.
++**
++** This function is used by acxpci_e_probe to check if the
++** connected card is a legal one or not.
++**
++** Arguments:
++** adev ptr to acx_device structure
++** addr address to read in the EEPROM
++** charbuf ptr to a char. This is where the read octet
++** will be stored
++*/
++int
++acxpci_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf)
++{
++ int result;
++ int count;
++
++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
++
++ count = 0xffff;
++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
++ /* scheduling away instead of CPU burning loop
++ * doesn't seem to work here at all:
++ * awful delay, sometimes also failure.
++ * Doesn't matter anyway (only small delay). */
++ if (unlikely(!--count)) {
++ printk("%s: timeout waiting for EEPROM read\n",
++ adev->ndev->name);
++ result = NOT_OK;
++ goto fail;
++ }
++ cpu_relax();
++ }
++
++ *charbuf = read_reg8(adev, IO_ACX_EEPROM_DATA);
++ log(L_DEBUG, "EEPROM at 0x%04X = 0x%02X\n", addr, *charbuf);
++ result = OK;
++
++fail:
++ return result;
++}
++
++
++/***********************************************************************
++** We don't lock hw accesses here since we never r/w eeprom in IRQ
++** Note: this function sleeps only because of GFP_KERNEL alloc
++*/
++#ifdef UNUSED
++int
++acxpci_s_write_eeprom(acx_device_t *adev, u32 addr, u32 len, const u8 *charbuf)
++{
++ u8 *data_verify = NULL;
++ unsigned long flags;
++ int count, i;
++ int result = NOT_OK;
++ u16 gpio_orig;
++
++ printk("acx: WARNING! I would write to EEPROM now. "
++ "Since I really DON'T want to unless you know "
++ "what you're doing (THIS CODE WILL PROBABLY "
++ "NOT WORK YET!), I will abort that now. And "
++ "definitely make sure to make a "
++ "/proc/driver/acx_wlan0_eeprom backup copy first!!! "
++ "(the EEPROM content includes the PCI config header!! "
++ "If you kill important stuff, then you WILL "
++ "get in trouble and people DID get in trouble already)\n");
++ return OK;
++
++ FN_ENTER;
++
++ data_verify = kmalloc(len, GFP_KERNEL);
++ if (!data_verify) {
++ goto end;
++ }
++
++ /* first we need to enable the OE (EEPROM Output Enable) GPIO line
++ * to be able to write to the EEPROM.
++ * NOTE: an EEPROM writing success has been reported,
++ * but you probably have to modify GPIO_OUT, too,
++ * and you probably need to activate a different GPIO
++ * line instead! */
++ gpio_orig = read_reg16(adev, IO_ACX_GPIO_OE);
++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig & ~1);
++ write_flush(adev);
++
++ /* ok, now start writing the data out */
++ for (i = 0; i < len; i++) {
++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
++ write_reg32(adev, IO_ACX_EEPROM_DATA, *(charbuf + i));
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_EEPROM_CTL, 1);
++
++ count = 0xffff;
++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
++ if (unlikely(!--count)) {
++ printk("WARNING, DANGER!!! "
++ "Timeout waiting for EEPROM write\n");
++ goto end;
++ }
++ cpu_relax();
++ }
++ }
++
++ /* disable EEPROM writing */
++ write_reg16(adev, IO_ACX_GPIO_OE, gpio_orig);
++ write_flush(adev);
++
++ /* now start a verification run */
++ for (i = 0; i < len; i++) {
++ write_reg32(adev, IO_ACX_EEPROM_CFG, 0);
++ write_reg32(adev, IO_ACX_EEPROM_ADDR, addr + i);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_EEPROM_CTL, 2);
++
++ count = 0xffff;
++ while (read_reg16(adev, IO_ACX_EEPROM_CTL)) {
++ if (unlikely(!--count)) {
++ printk("timeout waiting for EEPROM read\n");
++ goto end;
++ }
++ cpu_relax();
++ }
++
++ data_verify[i] = read_reg16(adev, IO_ACX_EEPROM_DATA);
++ }
++
++ if (0 == memcmp(charbuf, data_verify, len))
++ result = OK; /* read data matches, success */
++
++end:
++ kfree(data_verify);
++ FN_EXIT1(result);
++ return result;
++}
++#endif /* UNUSED */
++
++
++/***********************************************************************
++** acxpci_s_read_phy_reg
++**
++** Messing with rx/tx disabling and enabling here
++** (write_reg32(adev, IO_ACX_ENABLE, 0b000000xx)) kills traffic
++*/
++int
++acxpci_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
++{
++ int result = NOT_OK;
++ int count;
++
++ FN_ENTER;
++
++ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_PHY_CTL, 2);
++
++ count = 0xffff;
++ while (read_reg32(adev, IO_ACX_PHY_CTL)) {
++ /* scheduling away instead of CPU burning loop
++ * doesn't seem to work here at all:
++ * awful delay, sometimes also failure.
++ * Doesn't matter anyway (only small delay). */
++ if (unlikely(!--count)) {
++ printk("%s: timeout waiting for phy read\n",
++ adev->ndev->name);
++ *charbuf = 0;
++ goto fail;
++ }
++ cpu_relax();
++ }
++
++ log(L_DEBUG, "count was %u\n", count);
++ *charbuf = read_reg8(adev, IO_ACX_PHY_DATA);
++
++ log(L_DEBUG, "radio PHY at 0x%04X = 0x%02X\n", *charbuf, reg);
++ result = OK;
++ goto fail; /* silence compiler warning */
++fail:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++*/
++int
++acxpci_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
++{
++ FN_ENTER;
++
++ /* mprusko said that 32bit accesses result in distorted sensitivity
++ * on his card. Unconfirmed, looks like it's not true (most likely since we
++ * now properly flush writes). */
++ write_reg32(adev, IO_ACX_PHY_DATA, value);
++ write_reg32(adev, IO_ACX_PHY_ADDR, reg);
++ write_flush(adev);
++ write_reg32(adev, IO_ACX_PHY_CTL, 1);
++ write_flush(adev);
++ log(L_DEBUG, "radio PHY write 0x%02X at 0x%04X\n", value, reg);
++
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++#define NO_AUTO_INCREMENT 1
++
++/***********************************************************************
++** acxpci_s_write_fw
++**
++** Write the firmware image into the card.
++**
++** Arguments:
++** adev wlan device structure
++** fw_image firmware image.
++**
++** Returns:
++** 1 firmware image corrupted
++** 0 success
++*/
++static int
++acxpci_s_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset)
++{
++ int len, size;
++ u32 sum, v32;
++ /* we skip the first four bytes which contain the control sum */
++ const u8 *p = (u8*)fw_image + 4;
++
++ /* start the image checksum by adding the image size value */
++ sum = p[0]+p[1]+p[2]+p[3];
++ p += 4;
++
++ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
++
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
++#else
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
++ write_flush(adev);
++#endif
++
++ len = 0;
++ size = le32_to_cpu(fw_image->size) & (~3);
++
++ while (likely(len < size)) {
++ v32 = be32_to_cpu(*(u32*)p);
++ sum += p[0]+p[1]+p[2]+p[3];
++ p += 4;
++ len += 4;
++
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
++ write_flush(adev);
++#endif
++ write_reg32(adev, IO_ACX_SLV_MEM_DATA, v32);
++ }
++
++ log(L_DEBUG, "firmware written, size:%d sum1:%x sum2:%x\n",
++ size, sum, le32_to_cpu(fw_image->chksum));
++
++ /* compare our checksum with the stored image checksum */
++ return (sum != le32_to_cpu(fw_image->chksum));
++}
++
++
++/***********************************************************************
++** acxpci_s_validate_fw
++**
++** Compare the firmware image given with
++** the firmware image written into the card.
++**
++** Arguments:
++** adev wlan device structure
++** fw_image firmware image.
++**
++** Returns:
++** NOT_OK firmware image corrupted or not correctly written
++** OK success
++*/
++static int
++acxpci_s_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image,
++ u32 offset)
++{
++ u32 sum, v32, w32;
++ int len, size;
++ int result = OK;
++ /* we skip the first four bytes which contain the control sum */
++ const u8 *p = (u8*)fw_image + 4;
++
++ /* start the image checksum by adding the image size value */
++ sum = p[0]+p[1]+p[2]+p[3];
++ p += 4;
++
++ write_reg32(adev, IO_ACX_SLV_END_CTL, 0);
++
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 0); /* use basic mode */
++#else
++ write_reg32(adev, IO_ACX_SLV_MEM_CTL, 1); /* use autoincrement mode */
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset); /* configure start address */
++#endif
++
++ len = 0;
++ size = le32_to_cpu(fw_image->size) & (~3);
++
++ while (likely(len < size)) {
++ v32 = be32_to_cpu(*(u32*)p);
++ p += 4;
++ len += 4;
++
++#if NO_AUTO_INCREMENT
++ write_reg32(adev, IO_ACX_SLV_MEM_ADDR, offset + len - 4);
++#endif
++ w32 = read_reg32(adev, IO_ACX_SLV_MEM_DATA);
++
++ if (unlikely(w32 != v32)) {
++ printk("acx: FATAL: firmware upload: "
++ "data parts at offset %d don't match (0x%08X vs. 0x%08X)! "
++ "I/O timing issues or defective memory, with DWL-xx0+? "
++ "ACX_IO_WIDTH=16 may help. Please report\n",
++ len, v32, w32);
++ result = NOT_OK;
++ break;
++ }
++
++ sum += (u8)w32 + (u8)(w32>>8) + (u8)(w32>>16) + (u8)(w32>>24);
++ }
++
++ /* sum control verification */
++ if (result != NOT_OK) {
++ if (sum != le32_to_cpu(fw_image->chksum)) {
++ printk("acx: FATAL: firmware upload: "
++ "checksums don't match!\n");
++ result = NOT_OK;
++ }
++ }
++
++ return result;
++}
++
++
++/***********************************************************************
++** acxpci_s_upload_fw
++**
++** Called from acx_reset_dev
++*/
++static int
++acxpci_s_upload_fw(acx_device_t *adev)
++{
++ firmware_image_t *fw_image = NULL;
++ int res = NOT_OK;
++ int try;
++ u32 file_size;
++ char filename[sizeof("tiacx1NNcNN")];
++
++ FN_ENTER;
++
++ /* print exact chipset and radio ID to make sure people really get a clue on which files exactly they are supposed to provide,
++ * since firmware loading is the biggest enduser PITA with these chipsets.
++ * Not printing radio ID in 0xHEX in order to not confuse them into wrong file naming */
++ printk( "acx: need to load firmware for acx1%02d chipset with radio ID %02x, please provide via firmware hotplug:\n"
++ "acx: either one file only (<c>ombined firmware image file, radio-specific) or two files (radio-less base image file *plus* separate <r>adio-specific extension file)\n",
++ IS_ACX111(adev)*11, adev->radio_type);
++
++ /* Try combined, then main image */
++ adev->need_radio_fw = 0;
++ snprintf(filename, sizeof(filename), "tiacx1%02dc%02X",
++ IS_ACX111(adev)*11, adev->radio_type);
++
++ fw_image = acx_s_read_fw(&adev->pdev->dev, filename, &file_size);
++ if (!fw_image) {
++ adev->need_radio_fw = 1;
++ filename[sizeof("tiacx1NN")-1] = '\0';
++ fw_image = acx_s_read_fw(&adev->pdev->dev, filename, &file_size);
++ if (!fw_image) {
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++ }
++ }
++
++ for (try = 1; try <= 5; try++) {
++ res = acxpci_s_write_fw(adev, fw_image, 0);
++ log(L_DEBUG|L_INIT, "acx_write_fw (main/combined): %d\n", res);
++ if (OK == res) {
++ res = acxpci_s_validate_fw(adev, fw_image, 0);
++ log(L_DEBUG|L_INIT, "acx_validate_fw "
++ "(main/combined): %d\n", res);
++ }
++
++ if (OK == res) {
++ SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED);
++ break;
++ }
++ printk("acx: firmware upload attempt #%d FAILED, "
++ "retrying...\n", try);
++ acx_s_msleep(1000); /* better wait for a while... */
++ }
++
++ vfree(fw_image);
++
++ FN_EXIT1(res);
++ return res;
++}
++
++
++/***********************************************************************
++** acxpci_s_upload_radio
++**
++** Uploads the appropriate radio module firmware into the card.
++*/
++int
++acxpci_s_upload_radio(acx_device_t *adev)
++{
++ acx_ie_memmap_t mm;
++ firmware_image_t *radio_image;
++ acx_cmd_radioinit_t radioinit;
++ int res = NOT_OK;
++ int try;
++ u32 offset;
++ u32 size;
++ char filename[sizeof("tiacx1NNrNN")];
++
++ if (!adev->need_radio_fw) return OK;
++
++ FN_ENTER;
++
++ acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
++ offset = le32_to_cpu(mm.CodeEnd);
++
++ snprintf(filename, sizeof(filename), "tiacx1%02dr%02X",
++ IS_ACX111(adev)*11,
++ adev->radio_type);
++ radio_image = acx_s_read_fw(&adev->pdev->dev, filename, &size);
++ if (!radio_image) {
++ printk("acx: can't load radio module '%s'\n", filename);
++ goto fail;
++ }
++
++ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
++
++ for (try = 1; try <= 5; try++) {
++ res = acxpci_s_write_fw(adev, radio_image, offset);
++ log(L_DEBUG|L_INIT, "acx_write_fw (radio): %d\n", res);
++ if (OK == res) {
++ res = acxpci_s_validate_fw(adev, radio_image, offset);
++ log(L_DEBUG|L_INIT, "acx_validate_fw (radio): %d\n", res);
++ }
++
++ if (OK == res)
++ break;
++ printk("acx: radio firmware upload attempt #%d FAILED, "
++ "retrying...\n", try);
++ acx_s_msleep(1000); /* better wait for a while... */
++ }
++
++ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
++ radioinit.offset = cpu_to_le32(offset);
++ /* no endian conversion needed, remains in card CPU area: */
++ radioinit.len = radio_image->size;
++
++ vfree(radio_image);
++
++ if (OK != res)
++ goto fail;
++
++ /* will take a moment so let's have a big timeout */
++ acx_s_issue_cmd_timeo(adev, ACX1xx_CMD_RADIOINIT,
++ &radioinit, sizeof(radioinit), CMD_TIMEOUT_MS(1000));
++
++ res = acx_s_interrogate(adev, &mm, ACX1xx_IE_MEMORY_MAP);
++fail:
++ FN_EXIT1(res);
++ return res;
++}
++
++
++/***********************************************************************
++** acxpci_l_reset_mac
++**
++** MAC will be reset
++** Call context: reset_dev
++*/
++static void
++acxpci_l_reset_mac(acx_device_t *adev)
++{
++ u16 temp;
++
++ FN_ENTER;
++
++ /* halt eCPU */
++ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
++ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
++
++ /* now do soft reset of eCPU, set bit */
++ temp = read_reg16(adev, IO_ACX_SOFT_RESET) | 0x1;
++ log(L_DEBUG, "%s: enable soft reset...\n", __func__);
++ write_reg16(adev, IO_ACX_SOFT_RESET, temp);
++ write_flush(adev);
++
++ /* now clear bit again: deassert eCPU reset */
++ log(L_DEBUG, "%s: disable soft reset and go to init mode...\n", __func__);
++ write_reg16(adev, IO_ACX_SOFT_RESET, temp & ~0x1);
++
++ /* now start a burst read from initial EEPROM */
++ temp = read_reg16(adev, IO_ACX_EE_START) | 0x1;
++ write_reg16(adev, IO_ACX_EE_START, temp);
++ write_flush(adev);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxpci_s_verify_init
++*/
++static int
++acxpci_s_verify_init(acx_device_t *adev)
++{
++ int result = NOT_OK;
++ unsigned long timeout;
++
++ FN_ENTER;
++
++ timeout = jiffies + 2*HZ;
++ for (;;) {
++ u16 irqstat = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
++ if (irqstat & HOST_INT_FCS_THRESHOLD) {
++ result = OK;
++ write_reg16(adev, IO_ACX_IRQ_ACK, HOST_INT_FCS_THRESHOLD);
++ break;
++ }
++ if (time_after(jiffies, timeout))
++ break;
++ /* Init may take up to ~0.5 sec total */
++ acx_s_msleep(50);
++ }
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** A few low-level helpers
++**
++** Note: these functions are not protected by lock
++** and thus are never allowed to be called from IRQ.
++** Also they must not race with fw upload which uses same hw regs
++*/
++
++/***********************************************************************
++** acxpci_write_cmd_type_status
++*/
++
++static inline void
++acxpci_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status)
++{
++ writel(type | (status << 16), adev->cmd_area);
++ write_flush(adev);
++}
++
++
++/***********************************************************************
++** acxpci_read_cmd_type_status
++*/
++static u32
++acxpci_read_cmd_type_status(acx_device_t *adev)
++{
++ u32 cmd_type, cmd_status;
++
++ cmd_type = readl(adev->cmd_area);
++ cmd_status = (cmd_type >> 16);
++ cmd_type = (u16)cmd_type;
++
++ log(L_CTL, "cmd_type:%04X cmd_status:%04X [%s]\n",
++ cmd_type, cmd_status,
++ acx_cmd_status_str(cmd_status));
++
++ return cmd_status;
++}
++
++
++/***********************************************************************
++** acxpci_s_reset_dev
++**
++** Arguments:
++** netdevice that contains the adev variable
++** Returns:
++** NOT_OK on fail
++** OK on success
++** Side effects:
++** device is hard reset
++** Call context:
++** acxpci_e_probe
++** Comment:
++** This resets the device using low level hardware calls
++** as well as uploads and verifies the firmware to the card
++*/
++
++static inline void
++init_mboxes(acx_device_t *adev)
++{
++ u32 cmd_offs, info_offs;
++
++ cmd_offs = read_reg32(adev, IO_ACX_CMD_MAILBOX_OFFS);
++ info_offs = read_reg32(adev, IO_ACX_INFO_MAILBOX_OFFS);
++ adev->cmd_area = (u8 *)adev->iobase2 + cmd_offs;
++ adev->info_area = (u8 *)adev->iobase2 + info_offs;
++ log(L_DEBUG, "iobase2=%p\n"
++ "cmd_mbox_offset=%X cmd_area=%p\n"
++ "info_mbox_offset=%X info_area=%p\n",
++ adev->iobase2,
++ cmd_offs, adev->cmd_area,
++ info_offs, adev->info_area);
++}
++
++
++static inline void
++read_eeprom_area(acx_device_t *adev)
++{
++#if ACX_DEBUG > 1
++ int offs;
++ u8 tmp;
++
++ for (offs = 0x8c; offs < 0xb9; offs++)
++ acxpci_read_eeprom_byte(adev, offs, &tmp);
++#endif
++}
++
++
++static int
++acxpci_s_reset_dev(acx_device_t *adev)
++{
++ const char* msg = "";
++ unsigned long flags;
++ int result = NOT_OK;
++ u16 hardware_info;
++ u16 ecpu_ctrl;
++ int count;
++
++ FN_ENTER;
++
++ /* reset the device to make sure the eCPU is stopped
++ * to upload the firmware correctly */
++
++ acx_lock(adev, flags);
++
++ acxpci_l_reset_mac(adev);
++
++ ecpu_ctrl = read_reg16(adev, IO_ACX_ECPU_CTRL) & 1;
++ if (!ecpu_ctrl) {
++ msg = "eCPU is already running. ";
++ goto end_unlock;
++ }
++
++#ifdef WE_DONT_NEED_THAT_DO_WE
++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 2) {
++ /* eCPU most likely means "embedded CPU" */
++ msg = "eCPU did not start after boot from flash. ";
++ goto end_unlock;
++ }
++
++ /* check sense on reset flags */
++ if (read_reg16(adev, IO_ACX_SOR_CFG) & 0x10) {
++ printk("%s: eCPU did not start after boot (SOR), "
++ "is this fatal?\n", adev->ndev->name);
++ }
++#endif
++ /* scan, if any, is stopped now, setting corresponding IRQ bit */
++ adev->irq_status |= HOST_INT_SCAN_COMPLETE;
++
++ acx_unlock(adev, flags);
++
++ /* need to know radio type before fw load */
++ /* Need to wait for arrival of this information in a loop,
++ * most probably since eCPU runs some init code from EEPROM
++ * (started burst read in reset_mac()) which also
++ * sets the radio type ID */
++
++ count = 0xffff;
++ do {
++ hardware_info = read_reg16(adev, IO_ACX_EEPROM_INFORMATION);
++ if (!--count) {
++ msg = "eCPU didn't indicate radio type";
++ goto end_fail;
++ }
++ cpu_relax();
++ } while (!(hardware_info & 0xff00)); /* radio type still zero? */
++
++ /* printk("DEBUG: count %d\n", count); */
++ adev->form_factor = hardware_info & 0xff;
++ adev->radio_type = hardware_info >> 8;
++
++ /* load the firmware */
++ if (OK != acxpci_s_upload_fw(adev))
++ goto end_fail;
++
++ /* acx_s_msleep(10); this one really shouldn't be required */
++
++ /* now start eCPU by clearing bit */
++ write_reg16(adev, IO_ACX_ECPU_CTRL, ecpu_ctrl & ~0x1);
++ log(L_DEBUG, "booted eCPU up and waiting for completion...\n");
++
++ /* wait for eCPU bootup */
++ if (OK != acxpci_s_verify_init(adev)) {
++ msg = "timeout waiting for eCPU. ";
++ goto end_fail;
++ }
++ log(L_DEBUG, "eCPU has woken up, card is ready to be configured\n");
++
++ init_mboxes(adev);
++ acxpci_write_cmd_type_status(adev, 0, 0);
++
++ /* test that EEPROM is readable */
++ read_eeprom_area(adev);
++
++ result = OK;
++ goto end;
++
++/* Finish error message. Indicate which function failed */
++end_unlock:
++ acx_unlock(adev, flags);
++end_fail:
++ printk("acx: %sreset_dev() FAILED\n", msg);
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acxpci_s_issue_cmd_timeo
++**
++** Sends command to fw, extract result
++**
++** NB: we do _not_ take lock inside, so be sure to not touch anything
++** which may interfere with IRQ handler operation
++**
++** TODO: busy wait is a bit silly, so:
++** 1) stop doing many iters - go to sleep after first
++** 2) go to waitqueue based approach: wait, not poll!
++*/
++#undef FUNC
++#define FUNC "issue_cmd"
++
++#if !ACX_DEBUG
++int
++acxpci_s_issue_cmd_timeo(
++ acx_device_t *adev,
++ unsigned int cmd,
++ void *buffer,
++ unsigned buflen,
++ unsigned cmd_timeout)
++{
++#else
++int
++acxpci_s_issue_cmd_timeo_debug(
++ acx_device_t *adev,
++ unsigned cmd,
++ void *buffer,
++ unsigned buflen,
++ unsigned cmd_timeout,
++ const char* cmdstr)
++{
++ unsigned long start = jiffies;
++#endif
++ const char *devname;
++ unsigned counter;
++ u16 irqtype;
++ u16 cmd_status;
++ unsigned long timeout;
++
++ FN_ENTER;
++
++ devname = adev->ndev->name;
++ if (!devname || !devname[0] || devname[4]=='%')
++ devname = "acx";
++
++ log(L_CTL, FUNC"(cmd:%s,buflen:%u,timeout:%ums,type:0x%04X)\n",
++ cmdstr, buflen, cmd_timeout,
++ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
++
++ if (!(adev->dev_state_mask & ACX_STATE_FW_LOADED)) {
++ printk("%s: "FUNC"(): firmware is not loaded yet, "
++ "cannot execute commands!\n", devname);
++ goto bad;
++ }
++
++ if ((acx_debug & L_DEBUG) && (cmd != ACX1xx_CMD_INTERROGATE)) {
++ printk("input buffer (len=%u):\n", buflen);
++ acx_dump_bytes(buffer, buflen);
++ }
++
++ /* wait for firmware to become idle for our command submission */
++ timeout = HZ/5;
++ counter = (timeout * 1000 / HZ) - 1; /* in ms */
++ timeout += jiffies;
++ do {
++ cmd_status = acxpci_read_cmd_type_status(adev);
++ /* Test for IDLE state */
++ if (!cmd_status)
++ break;
++ if (counter % 8 == 0) {
++ if (time_after(jiffies, timeout)) {
++ counter = 0;
++ break;
++ }
++ /* we waited 8 iterations, no luck. Sleep 8 ms */
++ acx_s_msleep(8);
++ }
++ } while (likely(--counter));
++
++ if (!counter) {
++ /* the card doesn't get idle, we're in trouble */
++ printk("%s: "FUNC"(): cmd_status is not IDLE: 0x%04X!=0\n",
++ devname, cmd_status);
++ goto bad;
++ } else if (counter < 190) { /* if waited >10ms... */
++ log(L_CTL|L_DEBUG, FUNC"(): waited for IDLE %dms. "
++ "Please report\n", 199 - counter);
++ }
++
++ /* now write the parameters of the command if needed */
++ if (buffer && buflen) {
++ /* if it's an INTERROGATE command, just pass the length
++ * of parameters to read, as data */
++#if CMD_DISCOVERY
++ if (cmd == ACX1xx_CMD_INTERROGATE)
++ memset_io(adev->cmd_area + 4, 0xAA, buflen);
++#endif
++ /* adev->cmd_area points to PCI device's memory, not to RAM! */
++ memcpy_toio(adev->cmd_area + 4, buffer,
++ (cmd == ACX1xx_CMD_INTERROGATE) ? 4 : buflen);
++ }
++ /* now write the actual command type */
++ acxpci_write_cmd_type_status(adev, cmd, 0);
++ /* execute command */
++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_CMD);
++ write_flush(adev);
++
++ /* wait for firmware to process command */
++
++ /* Ensure nonzero and not too large timeout.
++ ** Also converts e.g. 100->99, 200->199
++ ** which is nice but not essential */
++ cmd_timeout = (cmd_timeout-1) | 1;
++ if (unlikely(cmd_timeout > 1199))
++ cmd_timeout = 1199;
++ /* clear CMD_COMPLETE bit. can be set only by IRQ handler: */
++ adev->irq_status &= ~HOST_INT_CMD_COMPLETE;
++
++ /* we schedule away sometimes (timeout can be large) */
++ counter = cmd_timeout;
++ timeout = jiffies + cmd_timeout * HZ / 1000;
++ do {
++ if (!adev->irqs_active) { /* IRQ disabled: poll */
++ irqtype = read_reg16(adev, IO_ACX_IRQ_STATUS_NON_DES);
++ if (irqtype & HOST_INT_CMD_COMPLETE) {
++ write_reg16(adev, IO_ACX_IRQ_ACK,
++ HOST_INT_CMD_COMPLETE);
++ break;
++ }
++ } else { /* Wait when IRQ will set the bit */
++ irqtype = adev->irq_status;
++ if (irqtype & HOST_INT_CMD_COMPLETE)
++ break;
++ }
++
++ if (counter % 8 == 0) {
++ if (time_after(jiffies, timeout)) {
++ counter = 0;
++ break;
++ }
++ /* we waited 8 iterations, no luck. Sleep 8 ms */
++ acx_s_msleep(8);
++ }
++ } while (likely(--counter));
++
++ /* save state for debugging */
++ cmd_status = acxpci_read_cmd_type_status(adev);
++
++ /* put the card in IDLE state */
++ acxpci_write_cmd_type_status(adev, 0, 0);
++
++ if (!counter) { /* timed out! */
++ printk("%s: "FUNC"(): timed out %s for CMD_COMPLETE. "
++ "irq bits:0x%04X irq_status:0x%04X timeout:%dms "
++ "cmd_status:%d (%s)\n",
++ devname, (adev->irqs_active) ? "waiting" : "polling",
++ irqtype, adev->irq_status, cmd_timeout,
++ cmd_status, acx_cmd_status_str(cmd_status));
++ goto bad;
++ } else if (cmd_timeout - counter > 30) { /* if waited >30ms... */
++ log(L_CTL|L_DEBUG, FUNC"(): %s for CMD_COMPLETE %dms. "
++ "count:%d. Please report\n",
++ (adev->irqs_active) ? "waited" : "polled",
++ cmd_timeout - counter, counter);
++ }
++
++ if (1 != cmd_status) { /* it is not a 'Success' */
++ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s). "
++ "Took %dms of %d\n",
++ devname, cmd_status, acx_cmd_status_str(cmd_status),
++ cmd_timeout - counter, cmd_timeout);
++ /* zero out result buffer
++ * WARNING: this will trash stack in case of illegally large input
++ * length! */
++ if (buffer && buflen)
++ memset(buffer, 0, buflen);
++ goto bad;
++ }
++
++ /* read in result parameters if needed */
++ if (buffer && buflen && (cmd == ACX1xx_CMD_INTERROGATE)) {
++ /* adev->cmd_area points to PCI device's memory, not to RAM! */
++ memcpy_fromio(buffer, adev->cmd_area + 4, buflen);
++ if (acx_debug & L_DEBUG) {
++ printk("output buffer (len=%u): ", buflen);
++ acx_dump_bytes(buffer, buflen);
++ }
++ }
++/* ok: */
++ log(L_CTL, FUNC"(%s): took %ld jiffies to complete\n",
++ cmdstr, jiffies - start);
++ FN_EXIT1(OK);
++ return OK;
++
++bad:
++ /* Give enough info so that callers can avoid
++ ** printing their own diagnostic messages */
++#if ACX_DEBUG
++ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
++#else
++ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
++#endif
++ dump_stack();
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++*/
++#ifdef NONESSENTIAL_FEATURES
++typedef struct device_id {
++ unsigned char id[6];
++ char *descr;
++ char *type;
++} device_id_t;
++
++static const device_id_t
++device_ids[] =
++{
++ {
++ {'G', 'l', 'o', 'b', 'a', 'l'},
++ NULL,
++ NULL,
++ },
++ {
++ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
++ "uninitialized",
++ "SpeedStream SS1021 or Gigafast WF721-AEX"
++ },
++ {
++ {0x80, 0x81, 0x82, 0x83, 0x84, 0x85},
++ "non-standard",
++ "DrayTek Vigor 520"
++ },
++ {
++ {'?', '?', '?', '?', '?', '?'},
++ "non-standard",
++ "Level One WPC-0200"
++ },
++ {
++ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
++ "empty",
++ "DWL-650+ variant"
++ }
++};
++
++static void
++acx_show_card_eeprom_id(acx_device_t *adev)
++{
++ unsigned char buffer[CARD_EEPROM_ID_SIZE];
++ int i;
++
++ memset(&buffer, 0, CARD_EEPROM_ID_SIZE);
++ /* use direct EEPROM access */
++ for (i = 0; i < CARD_EEPROM_ID_SIZE; i++) {
++ if (OK != acxpci_read_eeprom_byte(adev,
++ ACX100_EEPROM_ID_OFFSET + i,
++ &buffer[i])) {
++ printk("acx: reading EEPROM FAILED\n");
++ break;
++ }
++ }
++
++ for (i = 0; i < VEC_SIZE(device_ids); i++) {
++ if (!memcmp(&buffer, device_ids[i].id, CARD_EEPROM_ID_SIZE)) {
++ if (device_ids[i].descr) {
++ printk("acx: EEPROM card ID string check "
++ "found %s card ID: is this %s?\n",
++ device_ids[i].descr, device_ids[i].type);
++ }
++ break;
++ }
++ }
++ if (i == VEC_SIZE(device_ids)) {
++ printk("acx: EEPROM card ID string check found "
++ "unknown card: expected 'Global', got '%.*s\'. "
++ "Please report\n", CARD_EEPROM_ID_SIZE, buffer);
++ }
++}
++#endif /* NONESSENTIAL_FEATURES */
++
++
++/***********************************************************************
++** acxpci_free_desc_queues
++**
++** Releases the queues that have been allocated, the
++** others have been initialised to NULL so this
++** function can be used if only part of the queues were allocated.
++*/
++
++static inline void
++free_coherent(struct pci_dev *hwdev, size_t size,
++ void *vaddr, dma_addr_t dma_handle)
++{
++ dma_free_coherent(hwdev == NULL ? NULL : &hwdev->dev,
++ size, vaddr, dma_handle);
++}
++
++void
++acxpci_free_desc_queues(acx_device_t *adev)
++{
++#define ACX_FREE_QUEUE(size, ptr, phyaddr) \
++ if (ptr) { \
++ free_coherent(0, size, ptr, phyaddr); \
++ ptr = NULL; \
++ size = 0; \
++ }
++
++ FN_ENTER;
++
++ ACX_FREE_QUEUE(adev->txhostdesc_area_size, adev->txhostdesc_start, adev->txhostdesc_startphy);
++ ACX_FREE_QUEUE(adev->txbuf_area_size, adev->txbuf_start, adev->txbuf_startphy);
++
++ adev->txdesc_start = NULL;
++
++ ACX_FREE_QUEUE(adev->rxhostdesc_area_size, adev->rxhostdesc_start, adev->rxhostdesc_startphy);
++ ACX_FREE_QUEUE(adev->rxbuf_area_size, adev->rxbuf_start, adev->rxbuf_startphy);
++
++ adev->rxdesc_start = NULL;
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxpci_s_delete_dma_regions
++*/
++static void
++acxpci_s_delete_dma_regions(acx_device_t *adev)
++{
++ unsigned long flags;
++
++ FN_ENTER;
++ /* disable radio Tx/Rx. Shouldn't we use the firmware commands
++ * here instead? Or are we that much down the road that it's no
++ * longer possible here? */
++ write_reg16(adev, IO_ACX_ENABLE, 0);
++
++ acx_s_msleep(100);
++
++ acx_lock(adev, flags);
++ acxpci_free_desc_queues(adev);
++ acx_unlock(adev, flags);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxpci_e_probe
++**
++** Probe routine called when a PCI device w/ matching ID is found.
++** Here's the sequence:
++** - Allocate the PCI resources.
++** - Read the PCMCIA attribute memory to make sure we have a WLAN card
++** - Reset the MAC
++** - Initialize the dev and wlan data
++** - Initialize the MAC
++**
++** pdev - ptr to pci device structure containing info about pci configuration
++** id - ptr to the device id entry that matched this device
++*/
++static const u16
++IO_ACX100[] =
++{
++ 0x0000, /* IO_ACX_SOFT_RESET */
++
++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
++ 0x0018, /* IO_ACX_SLV_MEM_DATA */
++ 0x001c, /* IO_ACX_SLV_MEM_CTL */
++ 0x0020, /* IO_ACX_SLV_END_CTL */
++
++ 0x0034, /* IO_ACX_FEMR */
++
++ 0x007c, /* IO_ACX_INT_TRIG */
++ 0x0098, /* IO_ACX_IRQ_MASK */
++ 0x00a4, /* IO_ACX_IRQ_STATUS_NON_DES */
++ 0x00a8, /* IO_ACX_IRQ_STATUS_CLEAR */
++ 0x00ac, /* IO_ACX_IRQ_ACK */
++ 0x00b0, /* IO_ACX_HINT_TRIG */
++
++ 0x0104, /* IO_ACX_ENABLE */
++
++ 0x0250, /* IO_ACX_EEPROM_CTL */
++ 0x0254, /* IO_ACX_EEPROM_ADDR */
++ 0x0258, /* IO_ACX_EEPROM_DATA */
++ 0x025c, /* IO_ACX_EEPROM_CFG */
++
++ 0x0268, /* IO_ACX_PHY_ADDR */
++ 0x026c, /* IO_ACX_PHY_DATA */
++ 0x0270, /* IO_ACX_PHY_CTL */
++
++ 0x0290, /* IO_ACX_GPIO_OE */
++
++ 0x0298, /* IO_ACX_GPIO_OUT */
++
++ 0x02a4, /* IO_ACX_CMD_MAILBOX_OFFS */
++ 0x02a8, /* IO_ACX_INFO_MAILBOX_OFFS */
++ 0x02ac, /* IO_ACX_EEPROM_INFORMATION */
++
++ 0x02d0, /* IO_ACX_EE_START */
++ 0x02d4, /* IO_ACX_SOR_CFG */
++ 0x02d8 /* IO_ACX_ECPU_CTRL */
++};
++
++static const u16
++IO_ACX111[] =
++{
++ 0x0000, /* IO_ACX_SOFT_RESET */
++
++ 0x0014, /* IO_ACX_SLV_MEM_ADDR */
++ 0x0018, /* IO_ACX_SLV_MEM_DATA */
++ 0x001c, /* IO_ACX_SLV_MEM_CTL */
++ 0x0020, /* IO_ACX_SLV_END_CTL */
++
++ 0x0034, /* IO_ACX_FEMR */
++
++ 0x00b4, /* IO_ACX_INT_TRIG */
++ 0x00d4, /* IO_ACX_IRQ_MASK */
++ /* we do mean NON_DES (0xf0), not NON_DES_MASK which is at 0xe0: */
++ 0x00f0, /* IO_ACX_IRQ_STATUS_NON_DES */
++ 0x00e4, /* IO_ACX_IRQ_STATUS_CLEAR */
++ 0x00e8, /* IO_ACX_IRQ_ACK */
++ 0x00ec, /* IO_ACX_HINT_TRIG */
++
++ 0x01d0, /* IO_ACX_ENABLE */
++
++ 0x0338, /* IO_ACX_EEPROM_CTL */
++ 0x033c, /* IO_ACX_EEPROM_ADDR */
++ 0x0340, /* IO_ACX_EEPROM_DATA */
++ 0x0344, /* IO_ACX_EEPROM_CFG */
++
++ 0x0350, /* IO_ACX_PHY_ADDR */
++ 0x0354, /* IO_ACX_PHY_DATA */
++ 0x0358, /* IO_ACX_PHY_CTL */
++
++ 0x0374, /* IO_ACX_GPIO_OE */
++
++ 0x037c, /* IO_ACX_GPIO_OUT */
++
++ 0x0388, /* IO_ACX_CMD_MAILBOX_OFFS */
++ 0x038c, /* IO_ACX_INFO_MAILBOX_OFFS */
++ 0x0390, /* IO_ACX_EEPROM_INFORMATION */
++
++ 0x0100, /* IO_ACX_EE_START */
++ 0x0104, /* IO_ACX_SOR_CFG */
++ 0x0108, /* IO_ACX_ECPU_CTRL */
++};
++
++static void
++dummy_netdev_init(struct net_device *ndev) {}
++
++static int __devinit
++acxpci_e_probe(struct pci_dev *pdev, const struct pci_device_id *id)
++{
++ acx111_ie_configoption_t co;
++ unsigned long mem_region1 = 0;
++ unsigned long mem_region2 = 0;
++ unsigned long mem_region1_size;
++ unsigned long mem_region2_size;
++ unsigned long phymem1;
++ unsigned long phymem2;
++ void *mem1 = NULL;
++ void *mem2 = NULL;
++ acx_device_t *adev = NULL;
++ struct net_device *ndev = NULL;
++ const char *chip_name;
++ int result = -EIO;
++ int err;
++ u8 chip_type;
++
++ FN_ENTER;
++
++ /* Enable the PCI device */
++ if (pci_enable_device(pdev)) {
++ printk("acx: pci_enable_device() FAILED\n");
++ result = -ENODEV;
++ goto fail_pci_enable_device;
++ }
++
++ /* enable busmastering (required for CardBus) */
++ pci_set_master(pdev);
++
++ /* FIXME: prism54 calls pci_set_mwi() here,
++ * should we do/support the same? */
++
++ /* chiptype is u8 but id->driver_data is ulong
++ ** Works for now (possible values are 1 and 2) */
++ chip_type = (u8)id->driver_data;
++ /* acx100 and acx111 have different PCI memory regions */
++ if (chip_type == CHIPTYPE_ACX100) {
++ chip_name = "ACX100";
++ mem_region1 = PCI_ACX100_REGION1;
++ mem_region1_size = PCI_ACX100_REGION1_SIZE;
++
++ mem_region2 = PCI_ACX100_REGION2;
++ mem_region2_size = PCI_ACX100_REGION2_SIZE;
++ } else if (chip_type == CHIPTYPE_ACX111) {
++ chip_name = "ACX111";
++ mem_region1 = PCI_ACX111_REGION1;
++ mem_region1_size = PCI_ACX111_REGION1_SIZE;
++
++ mem_region2 = PCI_ACX111_REGION2;
++ mem_region2_size = PCI_ACX111_REGION2_SIZE;
++ } else {
++ printk("acx: unknown chip type 0x%04X\n", chip_type);
++ goto fail_unknown_chiptype;
++ }
++
++ /* Figure out our resources */
++ phymem1 = pci_resource_start(pdev, mem_region1);
++ phymem2 = pci_resource_start(pdev, mem_region2);
++ if (!request_mem_region(phymem1, pci_resource_len(pdev, mem_region1), "acx_1")) {
++ printk("acx: cannot reserve PCI memory region 1 (are you sure "
++ "you have CardBus support in kernel?)\n");
++ goto fail_request_mem_region1;
++ }
++ if (!request_mem_region(phymem2, pci_resource_len(pdev, mem_region2), "acx_2")) {
++ printk("acx: cannot reserve PCI memory region 2\n");
++ goto fail_request_mem_region2;
++ }
++
++ /* this used to be ioremap(), but ioremap_nocache()
++ * is much less risky, right? (and slower?)
++ * FIXME: we may want to go back to cached variant if it's
++ * certain that our code really properly handles
++ * cached operation (memory barriers, volatile?, ...)
++ * (but always keep this comment here regardless!)
++ * Possibly make this a driver config setting? */
++
++ mem1 = ioremap_nocache(phymem1, mem_region1_size);
++ if (!mem1) {
++ printk("acx: ioremap() FAILED\n");
++ goto fail_ioremap1;
++ }
++ mem2 = ioremap_nocache(phymem2, mem_region2_size);
++ if (!mem2) {
++ printk("acx: ioremap() #2 FAILED\n");
++ goto fail_ioremap2;
++ }
++
++ printk("acx: found %s-based wireless network card at %s, irq:%d, "
++ "phymem1:0x%lX, phymem2:0x%lX, mem1:0x%p, mem1_size:%ld, "
++ "mem2:0x%p, mem2_size:%ld\n",
++ chip_name, pci_name(pdev), pdev->irq, phymem1, phymem2,
++ mem1, mem_region1_size,
++ mem2, mem_region2_size);
++ log(L_ANY, "initial debug setting is 0x%04X\n", acx_debug);
++
++ if (0 == pdev->irq) {
++ printk("acx: can't use IRQ 0\n");
++ goto fail_irq;
++ }
++
++ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init);
++ /* (NB: memsets to 0 entire area) */
++ if (!ndev) {
++ printk("acx: no memory for netdevice struct\n");
++ goto fail_alloc_netdev;
++ }
++
++ ether_setup(ndev);
++ ndev->open = &acxpci_e_open;
++ ndev->stop = &acxpci_e_close;
++ ndev->hard_start_xmit = &acx_i_start_xmit;
++ ndev->get_stats = &acx_e_get_stats;
++#if IW_HANDLER_VERSION <= 5
++ ndev->get_wireless_stats = &acx_e_get_wireless_stats;
++#endif
++ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
++ ndev->set_multicast_list = &acxpci_i_set_multicast_list;
++ ndev->tx_timeout = &acxpci_i_tx_timeout;
++ ndev->change_mtu = &acx_e_change_mtu;
++ ndev->watchdog_timeo = 4 * HZ;
++ ndev->irq = pdev->irq;
++ ndev->base_addr = pci_resource_start(pdev, 0);
++
++ adev = ndev2adev(ndev);
++ spin_lock_init(&adev->lock); /* initial state: unlocked */
++ /* We do not start with downed sem: we want PARANOID_LOCKING to work */
++ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
++ /* since nobody can see new netdev yet, we can as well
++ ** just _presume_ that we're under sem (instead of actually taking it): */
++ /* acx_sem_lock(adev); */
++ adev->pdev = pdev;
++ adev->ndev = ndev;
++ adev->dev_type = DEVTYPE_PCI;
++ adev->chip_type = chip_type;
++ adev->chip_name = chip_name;
++ adev->io = (CHIPTYPE_ACX100 == chip_type) ? IO_ACX100 : IO_ACX111;
++ adev->membase = phymem1;
++ adev->iobase = mem1;
++ adev->membase2 = phymem2;
++ adev->iobase2 = mem2;
++ /* to find crashes due to weird driver access
++ * to unconfigured interface (ifup) */
++ adev->mgmt_timer.function = (void (*)(unsigned long))0x0000dead;
++
++#ifdef NONESSENTIAL_FEATURES
++ acx_show_card_eeprom_id(adev);
++#endif /* NONESSENTIAL_FEATURES */
++
++#ifdef SET_MODULE_OWNER
++ SET_MODULE_OWNER(ndev);
++#endif
++ SET_NETDEV_DEV(ndev, &pdev->dev);
++
++ log(L_IRQ|L_INIT, "using IRQ %d\n", pdev->irq);
++
++ /* need to be able to restore PCI state after a suspend */
++ pci_save_state(pdev);
++ pci_set_drvdata(pdev, ndev);
++
++ /* ok, pci setup is finished, now start initializing the card */
++
++ /* NB: read_reg() reads may return bogus data before reset_dev(),
++ * since the firmware which directly controls large parts of the I/O
++ * registers isn't initialized yet.
++ * acx100 seems to be more affected than acx111 */
++ if (OK != acxpci_s_reset_dev(adev))
++ goto fail_reset;
++
++ if (IS_ACX100(adev)) {
++ /* ACX100: configopt struct in cmd mailbox - directly after reset */
++ memcpy_fromio(&co, adev->cmd_area, sizeof(co));
++ }
++
++ if (OK != acx_s_init_mac(adev))
++ goto fail_init_mac;
++
++ if (IS_ACX111(adev)) {
++ /* ACX111: configopt struct needs to be queried after full init */
++ acx_s_interrogate(adev, &co, ACX111_IE_CONFIG_OPTIONS);
++ }
++
++/* TODO: merge them into one function, they are called just once and are the same for pci & usb */
++ if (OK != acxpci_read_eeprom_byte(adev, 0x05, &adev->eeprom_version))
++ goto fail_read_eeprom_version;
++
++ acx_s_parse_configoption(adev, &co);
++ acx_s_set_defaults(adev);
++ acx_s_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */
++ acx_display_hardware_details(adev);
++
++ /* Register the card, AFTER everything else has been set up,
++ * since otherwise an ioctl could step on our feet due to
++ * firmware operations happening in parallel or uninitialized data */
++ err = register_netdev(ndev);
++ if (OK != err) {
++ printk("acx: register_netdev() FAILED: %d\n", err);
++ goto fail_register_netdev;
++ }
++
++ acx_proc_register_entries(ndev);
++
++ /* Now we have our device, so make sure the kernel doesn't try
++ * to send packets even though we're not associated to a network yet */
++ acx_stop_queue(ndev, "on probe");
++ acx_carrier_off(ndev, "on probe");
++
++ /* after register_netdev() userspace may start working with dev
++ * (in particular, on other CPUs), we only need to up the sem */
++ /* acx_sem_unlock(adev); */
++
++ printk("acx "ACX_RELEASE": net device %s, driver compiled "
++ "against wireless extensions %d and Linux %s\n",
++ ndev->name, WIRELESS_EXT, UTS_RELEASE);
++
++#if CMD_DISCOVERY
++ great_inquisitor(adev);
++#endif
++
++ result = OK;
++ goto done;
++
++ /* error paths: undo everything in reverse order... */
++
++fail_register_netdev:
++
++ acxpci_s_delete_dma_regions(adev);
++ pci_set_drvdata(pdev, NULL);
++
++fail_init_mac:
++fail_read_eeprom_version:
++fail_reset:
++
++ free_netdev(ndev);
++fail_alloc_netdev:
++fail_irq:
++
++ iounmap(mem2);
++fail_ioremap2:
++
++ iounmap(mem1);
++fail_ioremap1:
++
++ release_mem_region(pci_resource_start(pdev, mem_region2),
++ pci_resource_len(pdev, mem_region2));
++fail_request_mem_region2:
++
++ release_mem_region(pci_resource_start(pdev, mem_region1),
++ pci_resource_len(pdev, mem_region1));
++fail_request_mem_region1:
++fail_unknown_chiptype:
++
++ pci_disable_device(pdev);
++fail_pci_enable_device:
++
++ pci_set_power_state(pdev, PCI_D3hot);
++
++done:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acxpci_e_remove
++**
++** Shut device down (if not hot unplugged)
++** and deallocate PCI resources for the acx chip.
++**
++** pdev - ptr to PCI device structure containing info about pci configuration
++*/
++static void __devexit
++acxpci_e_remove(struct pci_dev *pdev)
++{
++ struct net_device *ndev;
++ acx_device_t *adev;
++ unsigned long mem_region1, mem_region2;
++ unsigned long flags;
++
++ FN_ENTER;
++
++ ndev = (struct net_device*) pci_get_drvdata(pdev);
++ if (!ndev) {
++ log(L_DEBUG, "%s: card is unused. Skipping any release code\n",
++ __func__);
++ goto end;
++ }
++
++ adev = ndev2adev(ndev);
++
++ /* If device wasn't hot unplugged... */
++ if (adev_present(adev)) {
++
++ acx_sem_lock(adev);
++
++ /* disable both Tx and Rx to shut radio down properly */
++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
++
++#ifdef REDUNDANT
++ /* put the eCPU to sleep to save power
++ * Halting is not possible currently,
++ * since not supported by all firmware versions */
++ acx_s_issue_cmd(adev, ACX100_CMD_SLEEP, NULL, 0);
++#endif
++ acx_lock(adev, flags);
++ /* disable power LED to save power :-) */
++ log(L_INIT, "switching off power LED to save power\n");
++ acxpci_l_power_led(adev, 0);
++ /* stop our eCPU */
++ if (IS_ACX111(adev)) {
++ /* FIXME: does this actually keep halting the eCPU?
++ * I don't think so...
++ */
++ acxpci_l_reset_mac(adev);
++ } else {
++ u16 temp;
++ /* halt eCPU */
++ temp = read_reg16(adev, IO_ACX_ECPU_CTRL) | 0x1;
++ write_reg16(adev, IO_ACX_ECPU_CTRL, temp);
++ write_flush(adev);
++ }
++ acx_unlock(adev, flags);
++
++ acx_sem_unlock(adev);
++ }
++
++ /* unregister the device to not let the kernel
++ * (e.g. ioctls) access a half-deconfigured device
++ * NB: this will cause acxpci_e_close() to be called,
++ * thus we shouldn't call it under sem! */
++ log(L_INIT, "removing device %s\n", ndev->name);
++ unregister_netdev(ndev);
++
++ /* unregister_netdev ensures that no references to us left.
++ * For paranoid reasons we continue to follow the rules */
++ acx_sem_lock(adev);
++
++ if (adev->dev_state_mask & ACX_STATE_IFACE_UP) {
++ acxpci_s_down(ndev);
++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
++ }
++
++ acx_proc_unregister_entries(ndev);
++
++ if (IS_ACX100(adev)) {
++ mem_region1 = PCI_ACX100_REGION1;
++ mem_region2 = PCI_ACX100_REGION2;
++ } else {
++ mem_region1 = PCI_ACX111_REGION1;
++ mem_region2 = PCI_ACX111_REGION2;
++ }
++
++ /* finally, clean up PCI bus state */
++ acxpci_s_delete_dma_regions(adev);
++ if (adev->iobase) iounmap(adev->iobase);
++ if (adev->iobase2) iounmap(adev->iobase2);
++ release_mem_region(pci_resource_start(pdev, mem_region1),
++ pci_resource_len(pdev, mem_region1));
++ release_mem_region(pci_resource_start(pdev, mem_region2),
++ pci_resource_len(pdev, mem_region2));
++ pci_disable_device(pdev);
++
++ /* remove dev registration */
++ pci_set_drvdata(pdev, NULL);
++
++ acx_sem_unlock(adev);
++
++ /* Free netdev (quite late,
++ * since otherwise we might get caught off-guard
++ * by a netdev timeout handler execution
++ * expecting to see a working dev...) */
++ free_netdev(ndev);
++
++ /* put device into ACPI D3 mode (shutdown) */
++ pci_set_power_state(pdev, PCI_D3hot);
++
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** TODO: PM code needs to be fixed / debugged / tested.
++*/
++#ifdef CONFIG_PM
++static int
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
++acxpci_e_suspend(struct pci_dev *pdev, pm_message_t state)
++#else
++acxpci_e_suspend(struct pci_dev *pdev, u32 state)
++#endif
++{
++ struct net_device *ndev = pci_get_drvdata(pdev);
++ acx_device_t *adev;
++
++ FN_ENTER;
++ printk("acx: suspend handler is experimental!\n");
++ printk("sus: dev %p\n", ndev);
++
++ if (!netif_running(ndev))
++ goto end;
++
++ adev = ndev2adev(ndev);
++ printk("sus: adev %p\n", adev);
++
++ acx_sem_lock(adev);
++
++ netif_device_detach(ndev); /* this one cannot sleep */
++ acxpci_s_down(ndev);
++ /* down() does not set it to 0xffff, but here we really want that */
++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
++ write_reg16(adev, IO_ACX_FEMR, 0x0);
++ acxpci_s_delete_dma_regions(adev);
++ pci_save_state(pdev);
++ pci_set_power_state(pdev, PCI_D3hot);
++
++ acx_sem_unlock(adev);
++end:
++ FN_EXIT0;
++ return OK;
++}
++
++
++static int
++acxpci_e_resume(struct pci_dev *pdev)
++{
++ struct net_device *ndev = pci_get_drvdata(pdev);
++ acx_device_t *adev;
++
++ FN_ENTER;
++
++ printk("acx: resume handler is experimental!\n");
++ printk("rsm: got dev %p\n", ndev);
++
++ if (!netif_running(ndev))
++ goto end;
++
++ adev = ndev2adev(ndev);
++ printk("rsm: got adev %p\n", adev);
++
++ acx_sem_lock(adev);
++
++ pci_set_power_state(pdev, PCI_D0);
++ printk("rsm: power state PCI_D0 set\n");
++ pci_restore_state(pdev);
++ printk("rsm: PCI state restored\n");
++
++ if (OK != acxpci_s_reset_dev(adev))
++ goto end_unlock;
++ printk("rsm: device reset done\n");
++ if (OK != acx_s_init_mac(adev))
++ goto end_unlock;
++ printk("rsm: init MAC done\n");
++
++ acxpci_s_up(ndev);
++ printk("rsm: acx up done\n");
++
++ /* now even reload all card parameters as they were before suspend,
++ * and possibly be back in the network again already :-) */
++ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) {
++ adev->set_mask = GETSET_ALL;
++ acx_s_update_card_settings(adev);
++ printk("rsm: settings updated\n");
++ }
++ netif_device_attach(ndev);
++ printk("rsm: device attached\n");
++
++end_unlock:
++ acx_sem_unlock(adev);
++end:
++ /* we need to return OK here anyway, right? */
++ FN_EXIT0;
++ return OK;
++}
++#endif /* CONFIG_PM */
++
++
++/***********************************************************************
++** acxpci_s_up
++**
++** This function is called by acxpci_e_open (when ifconfig sets the device as up)
++**
++** Side effects:
++** - Enables on-card interrupt requests
++** - calls acx_s_start
++*/
++
++static void
++enable_acx_irq(acx_device_t *adev)
++{
++ FN_ENTER;
++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask);
++ write_reg16(adev, IO_ACX_FEMR, 0x8000);
++ adev->irqs_active = 1;
++ FN_EXIT0;
++}
++
++static void
++acxpci_s_up(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++ enable_acx_irq(adev);
++ acx_unlock(adev, flags);
++
++ /* acx fw < 1.9.3.e has a hardware timer, and older drivers
++ ** used to use it. But we don't do that anymore, our OS
++ ** has reliable software timers */
++ init_timer(&adev->mgmt_timer);
++ adev->mgmt_timer.function = acx_i_timer;
++ adev->mgmt_timer.data = (unsigned long)adev;
++
++ /* Need to set ACX_STATE_IFACE_UP first, or else
++ ** timer won't be started by acx_set_status() */
++ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_2_STA:
++ /* actual scan cmd will happen in start() */
++ acx_set_status(adev, ACX_STATUS_1_SCANNING); break;
++ case ACX_MODE_3_AP:
++ case ACX_MODE_MONITOR:
++ acx_set_status(adev, ACX_STATUS_4_ASSOCIATED); break;
++ }
++
++ acx_s_start(adev);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxpci_s_down
++**
++** NB: device may be already hot unplugged if called from acxpci_e_remove()
++**
++** Disables on-card interrupt request, stops softirq and timer, stops queue,
++** sets status == STOPPED
++*/
++
++static void
++disable_acx_irq(acx_device_t *adev)
++{
++ FN_ENTER;
++
++ /* I guess mask is not 0xffff because acx100 won't signal
++ ** cmd completion then (needed for ifup).
++ ** Someone with acx100 please confirm */
++ write_reg16(adev, IO_ACX_IRQ_MASK, adev->irq_mask_off);
++ write_reg16(adev, IO_ACX_FEMR, 0x0);
++ adev->irqs_active = 0;
++ FN_EXIT0;
++}
++
++static void
++acxpci_s_down(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++
++ FN_ENTER;
++
++ /* Disable IRQs first, so that IRQs cannot race with us */
++ /* then wait until interrupts have finished executing on other CPUs */
++ acx_lock(adev, flags);
++ disable_acx_irq(adev);
++ synchronize_irq(adev->pdev->irq);
++ acx_unlock(adev, flags);
++
++ /* we really don't want to have an asynchronous tasklet disturb us
++ ** after something vital for its job has been shut down, so
++ ** end all remaining work now.
++ **
++ ** NB: carrier_off (done by set_status below) would lead to
++ ** not yet fully understood deadlock in FLUSH_SCHEDULED_WORK().
++ ** That's why we do FLUSH first.
++ **
++ ** NB2: we have a bad locking bug here: FLUSH_SCHEDULED_WORK()
++ ** waits for acx_e_after_interrupt_task to complete if it is running
++ ** on another CPU, but acx_e_after_interrupt_task
++ ** will sleep on sem forever, because it is taken by us!
++ ** Work around that by temporary sem unlock.
++ ** This will fail miserably if we'll be hit by concurrent
++ ** iwconfig or something in between. TODO! */
++ acx_sem_unlock(adev);
++ FLUSH_SCHEDULED_WORK();
++ acx_sem_lock(adev);
++
++ /* This is possible:
++ ** FLUSH_SCHEDULED_WORK -> acx_e_after_interrupt_task ->
++ ** -> set_status(ASSOCIATED) -> wake_queue()
++ ** That's why we stop queue _after_ FLUSH_SCHEDULED_WORK
++ ** lock/unlock is just paranoia, maybe not needed */
++ acx_lock(adev, flags);
++ acx_stop_queue(ndev, "on ifdown");
++ acx_set_status(adev, ACX_STATUS_0_STOPPED);
++ acx_unlock(adev, flags);
++
++ /* kernel/timer.c says it's illegal to del_timer_sync()
++ ** a timer which restarts itself. We guarantee this cannot
++ ** ever happen because acx_i_timer() never does this if
++ ** status is ACX_STATUS_0_STOPPED */
++ del_timer_sync(&adev->mgmt_timer);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxpci_e_open
++**
++** Called as a result of SIOCSIFFLAGS ioctl changing the flags bit IFF_UP
++** from clear to set. In other words: ifconfig up.
++**
++** Returns:
++** 0 success
++** >0 f/w reported error
++** <0 driver reported error
++*/
++static int
++acxpci_e_open(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ int result = OK;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ acx_init_task_scheduler(adev);
++
++/* TODO: pci_set_power_state(pdev, PCI_D0); ? */
++
++ /* request shared IRQ handler */
++ if (request_irq(ndev->irq, acxpci_i_interrupt, SA_SHIRQ, ndev->name, ndev)) {
++ printk("%s: request_irq FAILED\n", ndev->name);
++ result = -EAGAIN;
++ goto done;
++ }
++ log(L_DEBUG|L_IRQ, "request_irq %d successful\n", ndev->irq);
++
++ /* ifup device */
++ acxpci_s_up(ndev);
++
++ /* We don't currently have to do anything else.
++ * The setup of the MAC should be subsequently completed via
++ * the mlme commands.
++ * Higher layers know we're ready from dev->start==1 and
++ * dev->tbusy==0. Our rx path knows to pass up received/
++ * frames because of dev->flags&IFF_UP is true.
++ */
++done:
++ acx_sem_unlock(adev);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acxpci_e_close
++**
++** Called as a result of SIOCSIIFFLAGS ioctl changing the flags bit IFF_UP
++** from set to clear. I.e. called by "ifconfig DEV down"
++**
++** Returns:
++** 0 success
++** >0 f/w reported error
++** <0 driver reported error
++*/
++static int
++acxpci_e_close(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ /* ifdown device */
++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
++ if (netif_device_present(ndev)) {
++ acxpci_s_down(ndev);
++ }
++
++ /* disable all IRQs, release shared IRQ handler */
++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
++ write_reg16(adev, IO_ACX_FEMR, 0x0);
++ free_irq(ndev->irq, ndev);
++
++/* TODO: pci_set_power_state(pdev, PCI_D3hot); ? */
++
++ /* We currently don't have to do anything else.
++ * Higher layers know we're not ready from dev->start==0 and
++ * dev->tbusy==1. Our rx path knows to not pass up received
++ * frames because of dev->flags&IFF_UP is false.
++ */
++ acx_sem_unlock(adev);
++
++ log(L_INIT, "closed device\n");
++ FN_EXIT0;
++ return OK;
++}
++
++
++/***********************************************************************
++** acxpci_i_tx_timeout
++**
++** Called from network core. Must not sleep!
++*/
++static void
++acxpci_i_tx_timeout(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ unsigned int tx_num_cleaned;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++
++ /* clean processed tx descs, they may have been completely full */
++ tx_num_cleaned = acxpci_l_clean_txdesc(adev);
++
++ /* nothing cleaned, yet (almost) no free buffers available?
++ * --> clean all tx descs, no matter which status!!
++ * Note that I strongly suspect that doing emergency cleaning
++ * may confuse the firmware. This is a last ditch effort to get
++ * ANYTHING to work again...
++ *
++ * TODO: it's best to simply reset & reinit hw from scratch...
++ */
++ if ((adev->tx_free <= TX_EMERG_CLEAN) && (tx_num_cleaned == 0)) {
++ printk("%s: FAILED to free any of the many full tx buffers. "
++ "Switching to emergency freeing. "
++ "Please report!\n", ndev->name);
++ acxpci_l_clean_txdesc_emergency(adev);
++ }
++
++ if (acx_queue_stopped(ndev) && (ACX_STATUS_4_ASSOCIATED == adev->status))
++ acx_wake_queue(ndev, "after tx timeout");
++
++ /* stall may have happened due to radio drift, so recalib radio */
++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
++
++ /* do unimportant work last */
++ printk("%s: tx timeout!\n", ndev->name);
++ adev->stats.tx_errors++;
++
++ acx_unlock(adev, flags);
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxpci_i_set_multicast_list
++** FIXME: most likely needs refinement
++*/
++static void
++acxpci_i_set_multicast_list(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++
++ /* firmwares don't have allmulti capability,
++ * so just use promiscuous mode instead in this case. */
++ if (ndev->flags & (IFF_PROMISC|IFF_ALLMULTI)) {
++ SET_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
++ SET_BIT(adev->set_mask, SET_RXCONFIG);
++ /* let kernel know in case *we* needed to set promiscuous */
++ ndev->flags |= (IFF_PROMISC|IFF_ALLMULTI);
++ } else {
++ CLEAR_BIT(adev->rx_config_1, RX_CFG1_RCV_PROMISCUOUS);
++ SET_BIT(adev->rx_config_1, RX_CFG1_FILTER_ALL_MULTI);
++ SET_BIT(adev->set_mask, SET_RXCONFIG);
++ ndev->flags &= ~(IFF_PROMISC|IFF_ALLMULTI);
++ }
++
++ /* cannot update card settings directly here, atomic context */
++ acx_schedule_task(adev, ACX_AFTER_IRQ_UPDATE_CARD_CFG);
++
++ acx_unlock(adev, flags);
++
++ FN_EXIT0;
++}
++
++
++/***************************************************************
++** acxpci_l_process_rxdesc
++**
++** Called directly and only from the IRQ handler
++*/
++
++#if !ACX_DEBUG
++static inline void log_rxbuffer(const acx_device_t *adev) {}
++#else
++static void
++log_rxbuffer(const acx_device_t *adev)
++{
++ register const struct rxhostdesc *rxhostdesc;
++ int i;
++ /* no FN_ENTER here, we don't want that */
++
++ rxhostdesc = adev->rxhostdesc_start;
++ if (unlikely(!rxhostdesc)) return;
++ for (i = 0; i < RX_CNT; i++) {
++ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
++ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
++ printk("rx: buf %d full\n", i);
++ rxhostdesc++;
++ }
++}
++#endif
++
++static void
++acxpci_l_process_rxdesc(acx_device_t *adev)
++{
++ register rxhostdesc_t *hostdesc;
++ unsigned count, tail;
++
++ FN_ENTER;
++
++ if (unlikely(acx_debug & L_BUFR))
++ log_rxbuffer(adev);
++
++ /* First, have a loop to determine the first descriptor that's
++ * full, just in case there's a mismatch between our current
++ * rx_tail and the full descriptor we're supposed to handle. */
++ tail = adev->rx_tail;
++ count = RX_CNT;
++ while (1) {
++ hostdesc = &adev->rxhostdesc_start[tail];
++ /* advance tail regardless of outcome of the below test */
++ tail = (tail + 1) % RX_CNT;
++
++ if ((hostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
++ && (hostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
++ break; /* found it! */
++
++ if (unlikely(!--count)) /* hmm, no luck: all descs empty, bail out */
++ goto end;
++ }
++
++ /* now process descriptors, starting with the first we figured out */
++ while (1) {
++ log(L_BUFR, "rx: tail=%u Ctl_16=%04X Status=%08X\n",
++ tail, hostdesc->Ctl_16, hostdesc->Status);
++
++ acx_l_process_rxbuf(adev, hostdesc->data);
++
++ hostdesc->Status = 0;
++ /* flush all writes before adapter sees CTL_HOSTOWN change */
++ wmb();
++ /* Host no longer owns this, needs to be LAST */
++ CLEAR_BIT(hostdesc->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
++
++ /* ok, descriptor is handled, now check the next descriptor */
++ hostdesc = &adev->rxhostdesc_start[tail];
++
++ /* if next descriptor is empty, then bail out */
++ if (!(hostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
++ || !(hostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)))
++ break;
++
++ tail = (tail + 1) % RX_CNT;
++ }
++end:
++ adev->rx_tail = tail;
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxpci_i_interrupt
++**
++** IRQ handler (atomic context, must not sleep, blah, blah)
++*/
++
++/* scan is complete. all frames now on the receive queue are valid */
++#define INFO_SCAN_COMPLETE 0x0001
++#define INFO_WEP_KEY_NOT_FOUND 0x0002
++/* hw has been reset as the result of a watchdog timer timeout */
++#define INFO_WATCH_DOG_RESET 0x0003
++/* failed to send out NULL frame from PS mode notification to AP */
++/* recommended action: try entering 802.11 PS mode again */
++#define INFO_PS_FAIL 0x0004
++/* encryption/decryption process on a packet failed */
++#define INFO_IV_ICV_FAILURE 0x0005
++
++/* Info mailbox format:
++2 bytes: type
++2 bytes: status
++more bytes may follow
++ rumors say about status:
++ 0x0000 info available (set by hw)
++ 0x0001 information received (must be set by host)
++ 0x1000 info available, mailbox overflowed (messages lost) (set by hw)
++ but in practice we've seen:
++ 0x9000 when we did not set status to 0x0001 on prev message
++ 0x1001 when we did set it
++ 0x0000 was never seen
++ conclusion: this is really a bitfield:
++ 0x1000 is 'info available' bit
++ 'mailbox overflowed' bit is 0x8000, not 0x1000
++ value of 0x0000 probably means that there are no messages at all
++ P.S. I dunno how in hell hw is supposed to notice that messages are lost -
++ it does NOT clear bit 0x0001, and this bit will probably stay forever set
++ after we set it once. Let's hope this will be fixed in firmware someday
++*/
++
++static void
++handle_info_irq(acx_device_t *adev)
++{
++#if ACX_DEBUG
++ static const char * const info_type_msg[] = {
++ "(unknown)",
++ "scan complete",
++ "WEP key not found",
++ "internal watchdog reset was done",
++ "failed to send powersave (NULL frame) notification to AP",
++ "encrypt/decrypt on a packet has failed",
++ "TKIP tx keys disabled",
++ "TKIP rx keys disabled",
++ "TKIP rx: key ID not found",
++ "???",
++ "???",
++ "???",
++ "???",
++ "???",
++ "???",
++ "???",
++ "TKIP IV value exceeds thresh"
++ };
++#endif
++ u32 info_type, info_status;
++
++ info_type = readl(adev->info_area);
++ info_status = (info_type >> 16);
++ info_type = (u16)info_type;
++
++ /* inform fw that we have read this info message */
++ writel(info_type | 0x00010000, adev->info_area);
++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_INFOACK);
++ write_flush(adev);
++
++ log(L_CTL, "info_type:%04X info_status:%04X\n",
++ info_type, info_status);
++
++ log(L_IRQ, "got Info IRQ: status %04X type %04X: %s\n",
++ info_status, info_type,
++ info_type_msg[(info_type >= VEC_SIZE(info_type_msg)) ?
++ 0 : info_type]
++ );
++}
++
++
++static void
++log_unusual_irq(u16 irqtype) {
++ /*
++ if (!printk_ratelimit())
++ return;
++ */
++
++ printk("acx: got");
++ if (irqtype & HOST_INT_RX_DATA) {
++ printk(" Rx_Data");
++ }
++ /* HOST_INT_TX_COMPLETE */
++ if (irqtype & HOST_INT_TX_XFER) {
++ printk(" Tx_Xfer");
++ }
++ /* HOST_INT_RX_COMPLETE */
++ if (irqtype & HOST_INT_DTIM) {
++ printk(" DTIM");
++ }
++ if (irqtype & HOST_INT_BEACON) {
++ printk(" Beacon");
++ }
++ if (irqtype & HOST_INT_TIMER) {
++ log(L_IRQ, " Timer");
++ }
++ if (irqtype & HOST_INT_KEY_NOT_FOUND) {
++ printk(" Key_Not_Found");
++ }
++ if (irqtype & HOST_INT_IV_ICV_FAILURE) {
++ printk(" IV_ICV_Failure (crypto)");
++ }
++ /* HOST_INT_CMD_COMPLETE */
++ /* HOST_INT_INFO */
++ if (irqtype & HOST_INT_OVERFLOW) {
++ printk(" Overflow");
++ }
++ if (irqtype & HOST_INT_PROCESS_ERROR) {
++ printk(" Process_Error");
++ }
++ /* HOST_INT_SCAN_COMPLETE */
++ if (irqtype & HOST_INT_FCS_THRESHOLD) {
++ printk(" FCS_Threshold");
++ }
++ if (irqtype & HOST_INT_UNKNOWN) {
++ printk(" Unknown");
++ }
++ printk(" IRQ(s)\n");
++}
++
++
++static void
++update_link_quality_led(acx_device_t *adev)
++{
++ int qual;
++
++ qual = acx_signal_determine_quality(adev->wstats.qual.level, adev->wstats.qual.noise);
++ if (qual > adev->brange_max_quality)
++ qual = adev->brange_max_quality;
++
++ if (time_after(jiffies, adev->brange_time_last_state_change +
++ (HZ/2 - HZ/2 * (unsigned long)qual / adev->brange_max_quality ) )) {
++ acxpci_l_power_led(adev, (adev->brange_last_state == 0));
++ adev->brange_last_state ^= 1; /* toggle */
++ adev->brange_time_last_state_change = jiffies;
++ }
++}
++
++
++#define MAX_IRQLOOPS_PER_JIFFY (20000/HZ) /* a la orinoco.c */
++
++static irqreturn_t
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++acxpci_i_interrupt(int irq, void *dev_id)
++#else
++acxpci_i_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++#endif
++{
++ acx_device_t *adev;
++ unsigned long flags;
++ unsigned int irqcount = MAX_IRQLOOPS_PER_JIFFY;
++ register u16 irqtype;
++ u16 unmasked;
++
++ adev = ndev2adev((struct net_device*)dev_id);
++
++ /* LOCKING: can just spin_lock() since IRQs are disabled anyway.
++ * I am paranoid */
++ acx_lock(adev, flags);
++
++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
++ if (unlikely(0xffff == unmasked)) {
++ /* 0xffff value hints at missing hardware,
++ * so don't do anything.
++ * Not very clean, but other drivers do the same... */
++ log(L_IRQ, "IRQ type:FFFF - device removed? IRQ_NONE\n");
++ goto none;
++ }
++
++ /* We will check only "interesting" IRQ types */
++ irqtype = unmasked & ~adev->irq_mask;
++ if (!irqtype) {
++ /* We are on a shared IRQ line and it wasn't our IRQ */
++ log(L_IRQ, "IRQ type:%04X, mask:%04X - all are masked, IRQ_NONE\n",
++ unmasked, adev->irq_mask);
++ goto none;
++ }
++
++ /* Done here because IRQ_NONEs taking three lines of log
++ ** drive me crazy */
++ FN_ENTER;
++
++#define IRQ_ITERATE 1
++#if IRQ_ITERATE
++if (jiffies != adev->irq_last_jiffies) {
++ adev->irq_loops_this_jiffy = 0;
++ adev->irq_last_jiffies = jiffies;
++}
++
++/* safety condition; we'll normally abort loop below
++ * in case no IRQ type occurred */
++while (likely(--irqcount)) {
++#endif
++ /* ACK all IRQs ASAP */
++ write_reg16(adev, IO_ACX_IRQ_ACK, 0xffff);
++
++ log(L_IRQ, "IRQ type:%04X, mask:%04X, type & ~mask:%04X\n",
++ unmasked, adev->irq_mask, irqtype);
++
++ /* Handle most important IRQ types first */
++ if (irqtype & HOST_INT_RX_COMPLETE) {
++ log(L_IRQ, "got Rx_Complete IRQ\n");
++ acxpci_l_process_rxdesc(adev);
++ }
++ if (irqtype & HOST_INT_TX_COMPLETE) {
++ log(L_IRQ, "got Tx_Complete IRQ\n");
++ /* don't clean up on each Tx complete, wait a bit
++ * unless we're going towards full, in which case
++ * we do it immediately, too (otherwise we might lockup
++ * with a full Tx buffer if we go into
++ * acxpci_l_clean_txdesc() at a time when we won't wakeup
++ * the net queue in there for some reason...) */
++ if (adev->tx_free <= TX_START_CLEAN) {
++#if TX_CLEANUP_IN_SOFTIRQ
++ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP);
++#else
++ acxpci_l_clean_txdesc(adev);
++#endif
++ }
++ }
++
++ /* Less frequent ones */
++ if (irqtype & (0
++ | HOST_INT_CMD_COMPLETE
++ | HOST_INT_INFO
++ | HOST_INT_SCAN_COMPLETE
++ )) {
++ if (irqtype & HOST_INT_CMD_COMPLETE) {
++ log(L_IRQ, "got Command_Complete IRQ\n");
++ /* save the state for the running issue_cmd() */
++ SET_BIT(adev->irq_status, HOST_INT_CMD_COMPLETE);
++ }
++ if (irqtype & HOST_INT_INFO) {
++ handle_info_irq(adev);
++ }
++ if (irqtype & HOST_INT_SCAN_COMPLETE) {
++ log(L_IRQ, "got Scan_Complete IRQ\n");
++ /* need to do that in process context */
++ acx_schedule_task(adev, ACX_AFTER_IRQ_COMPLETE_SCAN);
++ /* remember that fw is not scanning anymore */
++ SET_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
++ }
++ }
++
++ /* These we just log, but either they happen rarely
++ * or we keep them masked out */
++ if (irqtype & (0
++ | HOST_INT_RX_DATA
++ /* | HOST_INT_TX_COMPLETE */
++ | HOST_INT_TX_XFER
++ /* | HOST_INT_RX_COMPLETE */
++ | HOST_INT_DTIM
++ | HOST_INT_BEACON
++ | HOST_INT_TIMER
++ | HOST_INT_KEY_NOT_FOUND
++ | HOST_INT_IV_ICV_FAILURE
++ /* | HOST_INT_CMD_COMPLETE */
++ /* | HOST_INT_INFO */
++ | HOST_INT_OVERFLOW
++ | HOST_INT_PROCESS_ERROR
++ /* | HOST_INT_SCAN_COMPLETE */
++ | HOST_INT_FCS_THRESHOLD
++ | HOST_INT_UNKNOWN
++ )) {
++ log_unusual_irq(irqtype);
++ }
++
++#if IRQ_ITERATE
++ unmasked = read_reg16(adev, IO_ACX_IRQ_STATUS_CLEAR);
++ irqtype = unmasked & ~adev->irq_mask;
++ /* Bail out if no new IRQ bits or if all are masked out */
++ if (!irqtype)
++ break;
++
++ if (unlikely(++adev->irq_loops_this_jiffy > MAX_IRQLOOPS_PER_JIFFY)) {
++ printk(KERN_ERR "acx: too many interrupts per jiffy!\n");
++ /* Looks like card floods us with IRQs! Try to stop that */
++ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff);
++ /* This will short-circuit all future attempts to handle IRQ.
++ * We cant do much more... */
++ adev->irq_mask = 0;
++ break;
++ }
++}
++#endif
++ /* Routine to perform blink with range */
++ if (unlikely(adev->led_power == 2))
++ update_link_quality_led(adev);
++
++/* handled: */
++ /* write_flush(adev); - not needed, last op was read anyway */
++ acx_unlock(adev, flags);
++ FN_EXIT0;
++ return IRQ_HANDLED;
++
++none:
++ acx_unlock(adev, flags);
++ return IRQ_NONE;
++}
++
++
++/***********************************************************************
++** acxpci_l_power_led
++*/
++void
++acxpci_l_power_led(acx_device_t *adev, int enable)
++{
++ u16 gpio_pled = IS_ACX111(adev) ? 0x0040 : 0x0800;
++
++ /* A hack. Not moving message rate limiting to adev->xxx
++ * (it's only a debug message after all) */
++ static int rate_limit = 0;
++
++ if (rate_limit++ < 3)
++ log(L_IOCTL, "Please report in case toggling the power "
++ "LED doesn't work for your card!\n");
++ if (enable)
++ write_reg16(adev, IO_ACX_GPIO_OUT,
++ read_reg16(adev, IO_ACX_GPIO_OUT) & ~gpio_pled);
++ else
++ write_reg16(adev, IO_ACX_GPIO_OUT,
++ read_reg16(adev, IO_ACX_GPIO_OUT) | gpio_pled);
++}
++
++
++/***********************************************************************
++** Ioctls
++*/
++
++/***********************************************************************
++*/
++int
++acx111pci_ioctl_info(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ struct iw_param *vwrq,
++ char *extra)
++{
++#if ACX_DEBUG > 1
++ acx_device_t *adev = ndev2adev(ndev);
++ rxdesc_t *rxdesc;
++ txdesc_t *txdesc;
++ rxhostdesc_t *rxhostdesc;
++ txhostdesc_t *txhostdesc;
++ struct acx111_ie_memoryconfig memconf;
++ struct acx111_ie_queueconfig queueconf;
++ unsigned long flags;
++ int i;
++ char memmap[0x34];
++ char rxconfig[0x8];
++ char fcserror[0x8];
++ char ratefallback[0x5];
++
++ if ( !(acx_debug & (L_IOCTL|L_DEBUG)) )
++ return OK;
++ /* using printk() since we checked debug flag already */
++
++ acx_sem_lock(adev);
++
++ if (!IS_ACX111(adev)) {
++ printk("acx111-specific function called "
++ "with non-acx111 chip, aborting\n");
++ goto end_ok;
++ }
++
++ /* get Acx111 Memory Configuration */
++ memset(&memconf, 0, sizeof(memconf));
++ /* BTW, fails with 12 (Write only) error code.
++ ** Retained for easy testing of issue_cmd error handling :) */
++ acx_s_interrogate(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG);
++
++ /* get Acx111 Queue Configuration */
++ memset(&queueconf, 0, sizeof(queueconf));
++ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
++
++ /* get Acx111 Memory Map */
++ memset(memmap, 0, sizeof(memmap));
++ acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP);
++
++ /* get Acx111 Rx Config */
++ memset(rxconfig, 0, sizeof(rxconfig));
++ acx_s_interrogate(adev, &rxconfig, ACX1xx_IE_RXCONFIG);
++
++ /* get Acx111 fcs error count */
++ memset(fcserror, 0, sizeof(fcserror));
++ acx_s_interrogate(adev, &fcserror, ACX1xx_IE_FCS_ERROR_COUNT);
++
++ /* get Acx111 rate fallback */
++ memset(ratefallback, 0, sizeof(ratefallback));
++ acx_s_interrogate(adev, &ratefallback, ACX1xx_IE_RATE_FALLBACK);
++
++ /* force occurrence of a beacon interrupt */
++ /* TODO: comment why is this necessary */
++ write_reg16(adev, IO_ACX_HINT_TRIG, HOST_INT_BEACON);
++
++ /* dump Acx111 Mem Configuration */
++ printk("dump mem config:\n"
++ "data read: %d, struct size: %d\n"
++ "Number of stations: %1X\n"
++ "Memory block size: %1X\n"
++ "tx/rx memory block allocation: %1X\n"
++ "count rx: %X / tx: %X queues\n"
++ "options %1X\n"
++ "fragmentation %1X\n"
++ "Rx Queue 1 Count Descriptors: %X\n"
++ "Rx Queue 1 Host Memory Start: %X\n"
++ "Tx Queue 1 Count Descriptors: %X\n"
++ "Tx Queue 1 Attributes: %X\n",
++ memconf.len, (int) sizeof(memconf),
++ memconf.no_of_stations,
++ memconf.memory_block_size,
++ memconf.tx_rx_memory_block_allocation,
++ memconf.count_rx_queues, memconf.count_tx_queues,
++ memconf.options,
++ memconf.fragmentation,
++ memconf.rx_queue1_count_descs,
++ acx2cpu(memconf.rx_queue1_host_rx_start),
++ memconf.tx_queue1_count_descs,
++ memconf.tx_queue1_attributes);
++
++ /* dump Acx111 Queue Configuration */
++ printk("dump queue head:\n"
++ "data read: %d, struct size: %d\n"
++ "tx_memory_block_address (from card): %X\n"
++ "rx_memory_block_address (from card): %X\n"
++ "rx1_queue address (from card): %X\n"
++ "tx1_queue address (from card): %X\n"
++ "tx1_queue attributes (from card): %X\n",
++ queueconf.len, (int) sizeof(queueconf),
++ queueconf.tx_memory_block_address,
++ queueconf.rx_memory_block_address,
++ queueconf.rx1_queue_address,
++ queueconf.tx1_queue_address,
++ queueconf.tx1_attributes);
++
++ /* dump Acx111 Mem Map */
++ printk("dump mem map:\n"
++ "data read: %d, struct size: %d\n"
++ "Code start: %X\n"
++ "Code end: %X\n"
++ "WEP default key start: %X\n"
++ "WEP default key end: %X\n"
++ "STA table start: %X\n"
++ "STA table end: %X\n"
++ "Packet template start: %X\n"
++ "Packet template end: %X\n"
++ "Queue memory start: %X\n"
++ "Queue memory end: %X\n"
++ "Packet memory pool start: %X\n"
++ "Packet memory pool end: %X\n"
++ "iobase: %p\n"
++ "iobase2: %p\n",
++ *((u16 *)&memmap[0x02]), (int) sizeof(memmap),
++ *((u32 *)&memmap[0x04]),
++ *((u32 *)&memmap[0x08]),
++ *((u32 *)&memmap[0x0C]),
++ *((u32 *)&memmap[0x10]),
++ *((u32 *)&memmap[0x14]),
++ *((u32 *)&memmap[0x18]),
++ *((u32 *)&memmap[0x1C]),
++ *((u32 *)&memmap[0x20]),
++ *((u32 *)&memmap[0x24]),
++ *((u32 *)&memmap[0x28]),
++ *((u32 *)&memmap[0x2C]),
++ *((u32 *)&memmap[0x30]),
++ adev->iobase,
++ adev->iobase2);
++
++ /* dump Acx111 Rx Config */
++ printk("dump rx config:\n"
++ "data read: %d, struct size: %d\n"
++ "rx config: %X\n"
++ "rx filter config: %X\n",
++ *((u16 *)&rxconfig[0x02]), (int) sizeof(rxconfig),
++ *((u16 *)&rxconfig[0x04]),
++ *((u16 *)&rxconfig[0x06]));
++
++ /* dump Acx111 fcs error */
++ printk("dump fcserror:\n"
++ "data read: %d, struct size: %d\n"
++ "fcserrors: %X\n",
++ *((u16 *)&fcserror[0x02]), (int) sizeof(fcserror),
++ *((u32 *)&fcserror[0x04]));
++
++ /* dump Acx111 rate fallback */
++ printk("dump rate fallback:\n"
++ "data read: %d, struct size: %d\n"
++ "ratefallback: %X\n",
++ *((u16 *)&ratefallback[0x02]), (int) sizeof(ratefallback),
++ *((u8 *)&ratefallback[0x04]));
++
++ /* protect against IRQ */
++ acx_lock(adev, flags);
++
++ /* dump acx111 internal rx descriptor ring buffer */
++ rxdesc = adev->rxdesc_start;
++
++ /* loop over complete receive pool */
++ if (rxdesc) for (i = 0; i < RX_CNT; i++) {
++ printk("\ndump internal rxdesc %d:\n"
++ "mem pos %p\n"
++ "next 0x%X\n"
++ "acx mem pointer (dynamic) 0x%X\n"
++ "CTL (dynamic) 0x%X\n"
++ "Rate (dynamic) 0x%X\n"
++ "RxStatus (dynamic) 0x%X\n"
++ "Mod/Pre (dynamic) 0x%X\n",
++ i,
++ rxdesc,
++ acx2cpu(rxdesc->pNextDesc),
++ acx2cpu(rxdesc->ACXMemPtr),
++ rxdesc->Ctl_8,
++ rxdesc->rate,
++ rxdesc->error,
++ rxdesc->SNR);
++ rxdesc++;
++ }
++
++ /* dump host rx descriptor ring buffer */
++
++ rxhostdesc = adev->rxhostdesc_start;
++
++ /* loop over complete receive pool */
++ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
++ printk("\ndump host rxdesc %d:\n"
++ "mem pos %p\n"
++ "buffer mem pos 0x%X\n"
++ "buffer mem offset 0x%X\n"
++ "CTL 0x%X\n"
++ "Length 0x%X\n"
++ "next 0x%X\n"
++ "Status 0x%X\n",
++ i,
++ rxhostdesc,
++ acx2cpu(rxhostdesc->data_phy),
++ rxhostdesc->data_offset,
++ le16_to_cpu(rxhostdesc->Ctl_16),
++ le16_to_cpu(rxhostdesc->length),
++ acx2cpu(rxhostdesc->desc_phy_next),
++ rxhostdesc->Status);
++ rxhostdesc++;
++ }
++
++ /* dump acx111 internal tx descriptor ring buffer */
++ txdesc = adev->txdesc_start;
++
++ /* loop over complete transmit pool */
++ if (txdesc) for (i = 0; i < TX_CNT; i++) {
++ printk("\ndump internal txdesc %d:\n"
++ "size 0x%X\n"
++ "mem pos %p\n"
++ "next 0x%X\n"
++ "acx mem pointer (dynamic) 0x%X\n"
++ "host mem pointer (dynamic) 0x%X\n"
++ "length (dynamic) 0x%X\n"
++ "CTL (dynamic) 0x%X\n"
++ "CTL2 (dynamic) 0x%X\n"
++ "Status (dynamic) 0x%X\n"
++ "Rate (dynamic) 0x%X\n",
++ i,
++ (int) sizeof(struct txdesc),
++ txdesc,
++ acx2cpu(txdesc->pNextDesc),
++ acx2cpu(txdesc->AcxMemPtr),
++ acx2cpu(txdesc->HostMemPtr),
++ le16_to_cpu(txdesc->total_length),
++ txdesc->Ctl_8,
++ txdesc->Ctl2_8, txdesc->error,
++ txdesc->u.r1.rate);
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++
++ /* dump host tx descriptor ring buffer */
++
++ txhostdesc = adev->txhostdesc_start;
++
++ /* loop over complete host send pool */
++ if (txhostdesc) for (i = 0; i < TX_CNT * 2; i++) {
++ printk("\ndump host txdesc %d:\n"
++ "mem pos %p\n"
++ "buffer mem pos 0x%X\n"
++ "buffer mem offset 0x%X\n"
++ "CTL 0x%X\n"
++ "Length 0x%X\n"
++ "next 0x%X\n"
++ "Status 0x%X\n",
++ i,
++ txhostdesc,
++ acx2cpu(txhostdesc->data_phy),
++ txhostdesc->data_offset,
++ le16_to_cpu(txhostdesc->Ctl_16),
++ le16_to_cpu(txhostdesc->length),
++ acx2cpu(txhostdesc->desc_phy_next),
++ le32_to_cpu(txhostdesc->Status));
++ txhostdesc++;
++ }
++
++ /* write_reg16(adev, 0xb4, 0x4); */
++
++ acx_unlock(adev, flags);
++end_ok:
++
++ acx_sem_unlock(adev);
++#endif /* ACX_DEBUG */
++ return OK;
++}
++
++
++/***********************************************************************
++*/
++int
++acx100pci_ioctl_set_phy_amp_bias(
++ struct net_device *ndev,
++ struct iw_request_info *info,
++ struct iw_param *vwrq,
++ char *extra)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ u16 gpio_old;
++
++ if (!IS_ACX100(adev)) {
++ /* WARNING!!!
++ * Removing this check *might* damage
++ * hardware, since we're tweaking GPIOs here after all!!!
++ * You've been warned...
++ * WARNING!!! */
++ printk("acx: sorry, setting bias level for non-acx100 "
++ "is not supported yet\n");
++ return OK;
++ }
++
++ if (*extra > 7) {
++ printk("acx: invalid bias parameter, range is 0-7\n");
++ return -EINVAL;
++ }
++
++ acx_sem_lock(adev);
++
++ /* Need to lock accesses to [IO_ACX_GPIO_OUT]:
++ * IRQ handler uses it to update LED */
++ acx_lock(adev, flags);
++ gpio_old = read_reg16(adev, IO_ACX_GPIO_OUT);
++ write_reg16(adev, IO_ACX_GPIO_OUT, (gpio_old & 0xf8ff) | ((u16)*extra << 8));
++ acx_unlock(adev, flags);
++
++ log(L_DEBUG, "gpio_old: 0x%04X\n", gpio_old);
++ printk("%s: PHY power amplifier bias: old:%d, new:%d\n",
++ ndev->name,
++ (gpio_old & 0x0700) >> 8, (unsigned char)*extra);
++
++ acx_sem_unlock(adev);
++
++ return OK;
++}
++
++
++/***************************************************************
++** acxpci_l_alloc_tx
++** Actually returns a txdesc_t* ptr
++**
++** FIXME: in case of fragments, should allocate multiple descrs
++** after figuring out how many we need and whether we still have
++** sufficiently many.
++*/
++tx_t*
++acxpci_l_alloc_tx(acx_device_t *adev)
++{
++ struct txdesc *txdesc;
++ unsigned head;
++ u8 ctl8;
++
++ FN_ENTER;
++
++ if (unlikely(!adev->tx_free)) {
++ printk("acx: BUG: no free txdesc left\n");
++ txdesc = NULL;
++ goto end;
++ }
++
++ head = adev->tx_head;
++ txdesc = get_txdesc(adev, head);
++ ctl8 = txdesc->Ctl_8;
++
++ /* 2005-10-11: there were several bug reports on this happening
++ ** but now cause seems to be understood & fixed */
++ if (unlikely(DESC_CTL_HOSTOWN != (ctl8 & DESC_CTL_ACXDONE_HOSTOWN))) {
++ /* whoops, descr at current index is not free, so probably
++ * ring buffer already full */
++ printk("acx: BUG: tx_head:%d Ctl8:0x%02X - failed to find "
++ "free txdesc\n", head, ctl8);
++ txdesc = NULL;
++ goto end;
++ }
++
++ /* Needed in case txdesc won't be eventually submitted for tx */
++ txdesc->Ctl_8 = DESC_CTL_ACXDONE_HOSTOWN;
++
++ adev->tx_free--;
++ log(L_BUFT, "tx: got desc %u, %u remain\n",
++ head, adev->tx_free);
++ /* Keep a few free descs between head and tail of tx ring.
++ ** It is not absolutely needed, just feels safer */
++ if (adev->tx_free < TX_STOP_QUEUE) {
++ log(L_BUF, "stop queue (%u tx desc left)\n",
++ adev->tx_free);
++ acx_stop_queue(adev->ndev, NULL);
++ }
++
++ /* returning current descriptor, so advance to next free one */
++ adev->tx_head = (head + 1) % TX_CNT;
++end:
++ FN_EXIT0;
++
++ return (tx_t*)txdesc;
++}
++
++
++/***********************************************************************
++*/
++void*
++acxpci_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
++{
++ return get_txhostdesc(adev, (txdesc_t*)tx_opaque)->data;
++}
++
++
++/***********************************************************************
++** acxpci_l_tx_data
++**
++** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
++** Can be called from acx_i_start_xmit (data frames from net core).
++**
++** FIXME: in case of fragments, should loop over the number of
++** pre-allocated tx descrs, properly setting up transfer data and
++** CTL_xxx flags according to fragment number.
++*/
++void
++acxpci_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int len)
++{
++ txdesc_t *txdesc = (txdesc_t*)tx_opaque;
++ txhostdesc_t *hostdesc1, *hostdesc2;
++ client_t *clt;
++ u16 rate_cur;
++ u8 Ctl_8, Ctl2_8;
++
++ FN_ENTER;
++
++ /* fw doesn't tx such packets anyhow */
++ if (unlikely(len < WLAN_HDR_A3_LEN))
++ goto end;
++
++ hostdesc1 = get_txhostdesc(adev, txdesc);
++ /* modify flag status in separate variable to be able to write it back
++ * in one big swoop later (also in order to have less device memory
++ * accesses) */
++ Ctl_8 = txdesc->Ctl_8;
++ Ctl2_8 = 0; /* really need to init it to 0, not txdesc->Ctl2_8, it seems */
++
++ hostdesc2 = hostdesc1 + 1;
++
++ /* DON'T simply set Ctl field to 0 here globally,
++ * it needs to maintain a consistent flag status (those are state flags!!),
++ * otherwise it may lead to severe disruption. Only set or reset particular
++ * flags at the exact moment this is needed... */
++
++ /* let chip do RTS/CTS handshaking before sending
++ * in case packet size exceeds threshold */
++ if (len > adev->rts_threshold)
++ SET_BIT(Ctl2_8, DESC_CTL2_RTS);
++ else
++ CLEAR_BIT(Ctl2_8, DESC_CTL2_RTS);
++
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_3_AP:
++ clt = acx_l_sta_list_get(adev, ((wlan_hdr_t*)hostdesc1->data)->a1);
++ break;
++ case ACX_MODE_2_STA:
++ clt = adev->ap_client;
++ break;
++#if 0
++/* testing was done on acx111: */
++ case ACX_MODE_MONITOR:
++ SET_BIT(Ctl2_8, 0
++/* sends CTS to self before packet */
++ + DESC_CTL2_SEQ /* don't increase sequence field */
++/* not working (looks like good fcs is still added) */
++ + DESC_CTL2_FCS /* don't add the FCS */
++/* not tested */
++ + DESC_CTL2_MORE_FRAG
++/* not tested */
++ + DESC_CTL2_RETRY /* don't increase retry field */
++/* not tested */
++ + DESC_CTL2_POWER /* don't increase power mgmt. field */
++/* no effect */
++ + DESC_CTL2_WEP /* encrypt this frame */
++/* not tested */
++ + DESC_CTL2_DUR /* don't increase duration field */
++ );
++ /* fallthrough */
++#endif
++ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
++ clt = NULL;
++ break;
++ }
++
++ rate_cur = clt ? clt->rate_cur : adev->rate_bcast;
++ if (unlikely(!rate_cur)) {
++ printk("acx: driver bug! bad ratemask\n");
++ goto end;
++ }
++
++ /* used in tx cleanup routine for auto rate and accounting: */
++ put_txcr(adev, txdesc, clt, rate_cur);
++
++ txdesc->total_length = cpu_to_le16(len);
++ hostdesc2->length = cpu_to_le16(len - WLAN_HDR_A3_LEN);
++ if (IS_ACX111(adev)) {
++ /* note that if !txdesc->do_auto, txrate->cur
++ ** has only one nonzero bit */
++ txdesc->u.r2.rate111 = cpu_to_le16(
++ rate_cur
++ /* WARNING: I was never able to make it work with prism54 AP.
++ ** It was falling down to 1Mbit where shortpre is not applicable,
++ ** and not working at all at "5,11 basic rates only" setting.
++ ** I even didn't see tx packets in radio packet capture.
++ ** Disabled for now --vda */
++ /*| ((clt->shortpre && clt->cur!=RATE111_1) ? RATE111_SHORTPRE : 0) */
++ );
++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
++ /* should add this to rate111 above as necessary */
++ | (clt->pbcc511 ? RATE111_PBCC511 : 0)
++#endif
++ hostdesc1->length = cpu_to_le16(len);
++ } else { /* ACX100 */
++ u8 rate_100 = clt ? clt->rate_100 : adev->rate_bcast100;
++ txdesc->u.r1.rate = rate_100;
++#ifdef TODO_FIGURE_OUT_WHEN_TO_SET_THIS
++ if (clt->pbcc511) {
++ if (n == RATE100_5 || n == RATE100_11)
++ n |= RATE100_PBCC511;
++ }
++
++ if (clt->shortpre && (clt->cur != RATE111_1))
++ SET_BIT(Ctl_8, DESC_CTL_SHORT_PREAMBLE); /* set Short Preamble */
++#endif
++ /* set autodma and reclaim and 1st mpdu */
++ SET_BIT(Ctl_8, DESC_CTL_AUTODMA | DESC_CTL_RECLAIM | DESC_CTL_FIRSTFRAG);
++#if ACX_FRAGMENTATION
++ /* SET_BIT(Ctl2_8, DESC_CTL2_MORE_FRAG); cannot set it unconditionally, needs to be set for all non-last fragments */
++#endif
++ hostdesc1->length = cpu_to_le16(WLAN_HDR_A3_LEN);
++ }
++ /* don't need to clean ack/rts statistics here, already
++ * done on descr cleanup */
++
++ /* clears HOSTOWN and ACXDONE bits, thus telling that the descriptors
++ * are now owned by the acx100; do this as LAST operation */
++ CLEAR_BIT(Ctl_8, DESC_CTL_ACXDONE_HOSTOWN);
++ /* flush writes before we release hostdesc to the adapter here */
++ wmb();
++ CLEAR_BIT(hostdesc1->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
++ CLEAR_BIT(hostdesc2->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
++
++ /* write back modified flags */
++ txdesc->Ctl2_8 = Ctl2_8;
++ txdesc->Ctl_8 = Ctl_8;
++ /* unused: txdesc->tx_time = cpu_to_le32(jiffies); */
++
++ /* flush writes before we tell the adapter that it's its turn now */
++ mmiowb();
++ write_reg16(adev, IO_ACX_INT_TRIG, INT_TRIG_TXPRC);
++ write_flush(adev);
++
++ /* log the packet content AFTER sending it,
++ * in order to not delay sending any further than absolutely needed
++ * Do separate logs for acx100/111 to have human-readable rates */
++ if (unlikely(acx_debug & (L_XFER|L_DATA))) {
++ u16 fc = ((wlan_hdr_t*)hostdesc1->data)->fc;
++ if (IS_ACX111(adev))
++ printk("tx: pkt (%s): len %d "
++ "rate %04X%s status %u\n",
++ acx_get_packet_type_string(le16_to_cpu(fc)), len,
++ le16_to_cpu(txdesc->u.r2.rate111),
++ (le16_to_cpu(txdesc->u.r2.rate111) & RATE111_SHORTPRE) ? "(SPr)" : "",
++ adev->status);
++ else
++ printk("tx: pkt (%s): len %d rate %03u%s status %u\n",
++ acx_get_packet_type_string(fc), len,
++ txdesc->u.r1.rate,
++ (Ctl_8 & DESC_CTL_SHORT_PREAMBLE) ? "(SPr)" : "",
++ adev->status);
++
++ if (acx_debug & L_DATA) {
++ printk("tx: 802.11 [%d]: ", len);
++ acx_dump_bytes(hostdesc1->data, len);
++ }
++ }
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxpci_l_clean_txdesc
++**
++** This function resets the txdescs' status when the ACX100
++** signals the TX done IRQ (txdescs have been processed), starting with
++** the pool index of the descriptor which we would use next,
++** in order to make sure that we can be as fast as possible
++** in filling new txdescs.
++** Everytime we get called we know where the next packet to be cleaned is.
++*/
++
++#if !ACX_DEBUG
++static inline void log_txbuffer(const acx_device_t *adev) {}
++#else
++static void
++log_txbuffer(acx_device_t *adev)
++{
++ txdesc_t *txdesc;
++ int i;
++
++ /* no FN_ENTER here, we don't want that */
++ /* no locks here, since it's entirely non-critical code */
++ txdesc = adev->txdesc_start;
++ if (unlikely(!txdesc)) return;
++ printk("tx: desc->Ctl8's:");
++ for (i = 0; i < TX_CNT; i++) {
++ printk(" %02X", txdesc->Ctl_8);
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++ printk("\n");
++}
++#endif
++
++
++static void
++handle_tx_error(acx_device_t *adev, u8 error, unsigned int finger)
++{
++ const char *err = "unknown error";
++
++ /* hmm, should we handle this as a mask
++ * of *several* bits?
++ * For now I think only caring about
++ * individual bits is ok... */
++ switch (error) {
++ case 0x01:
++ err = "no Tx due to error in other fragment";
++ adev->wstats.discard.fragment++;
++ break;
++ case 0x02:
++ err = "Tx aborted";
++ adev->stats.tx_aborted_errors++;
++ break;
++ case 0x04:
++ err = "Tx desc wrong parameters";
++ adev->wstats.discard.misc++;
++ break;
++ case 0x08:
++ err = "WEP key not found";
++ adev->wstats.discard.misc++;
++ break;
++ case 0x10:
++ err = "MSDU lifetime timeout? - try changing "
++ "'iwconfig retry lifetime XXX'";
++ adev->wstats.discard.misc++;
++ break;
++ case 0x20:
++ err = "excessive Tx retries due to either distance "
++ "too high or unable to Tx or Tx frame error - "
++ "try changing 'iwconfig txpower XXX' or "
++ "'sens'itivity or 'retry'";
++ adev->wstats.discard.retries++;
++ /* Tx error 0x20 also seems to occur on
++ * overheating, so I'm not sure whether we
++ * actually want to do aggressive radio recalibration,
++ * since people maybe won't notice then that their hardware
++ * is slowly getting cooked...
++ * Or is it still a safe long distance from utter
++ * radio non-functionality despite many radio recalibs
++ * to final destructive overheating of the hardware?
++ * In this case we really should do recalib here...
++ * I guess the only way to find out is to do a
++ * potentially fatal self-experiment :-\
++ * Or maybe only recalib in case we're using Tx
++ * rate auto (on errors switching to lower speed
++ * --> less heat?) or 802.11 power save mode?
++ *
++ * ok, just do it. */
++ if (++adev->retry_errors_msg_ratelimit % 4 == 0) {
++ if (adev->retry_errors_msg_ratelimit <= 20) {
++ printk("%s: several excessive Tx "
++ "retry errors occurred, attempting "
++ "to recalibrate radio. Radio "
++ "drift might be caused by increasing "
++ "card temperature, please check the card "
++ "before it's too late!\n",
++ adev->ndev->name);
++ if (adev->retry_errors_msg_ratelimit == 20)
++ printk("disabling above message\n");
++ }
++
++ acx_schedule_task(adev, ACX_AFTER_IRQ_CMD_RADIO_RECALIB);
++ }
++ break;
++ case 0x40:
++ err = "Tx buffer overflow";
++ adev->stats.tx_fifo_errors++;
++ break;
++ case 0x80:
++ /* possibly ACPI C-state powersaving related!!!
++ * (DMA timeout due to excessively high wakeup
++ * latency after C-state activation!?)
++ * Disable C-State powersaving and try again,
++ * then PLEASE REPORT, I'm VERY interested in
++ * whether my theory is correct that this is
++ * actually the problem here.
++ * In that case, use new Linux idle wakeup latency
++ * requirements kernel API to prevent this issue. */
++ err = "DMA error";
++ adev->wstats.discard.misc++;
++ break;
++ }
++ adev->stats.tx_errors++;
++ if (adev->stats.tx_errors <= 20)
++ printk("%s: tx error 0x%02X, buf %02u! (%s)\n",
++ adev->ndev->name, error, finger, err);
++ else
++ printk("%s: tx error 0x%02X, buf %02u!\n",
++ adev->ndev->name, error, finger);
++}
++
++
++unsigned int
++acxpci_l_clean_txdesc(acx_device_t *adev)
++{
++ txdesc_t *txdesc;
++ unsigned finger;
++ int num_cleaned;
++ u16 r111;
++ u8 error, ack_failures, rts_failures, rts_ok, r100;
++
++ FN_ENTER;
++
++ if (unlikely(acx_debug & L_DEBUG))
++ log_txbuffer(adev);
++
++ log(L_BUFT, "tx: cleaning up bufs from %u\n", adev->tx_tail);
++
++ /* We know first descr which is not free yet. We advance it as far
++ ** as we see correct bits set in following descs (if next desc
++ ** is NOT free, we shouldn't advance at all). We know that in
++ ** front of tx_tail may be "holes" with isolated free descs.
++ ** We will catch up when all intermediate descs will be freed also */
++
++ finger = adev->tx_tail;
++ num_cleaned = 0;
++ while (likely(finger != adev->tx_head)) {
++ txdesc = get_txdesc(adev, finger);
++
++ /* If we allocated txdesc on tx path but then decided
++ ** to NOT use it, then it will be left as a free "bubble"
++ ** in the "allocated for tx" part of the ring.
++ ** We may meet it on the next ring pass here. */
++
++ /* stop if not marked as "tx finished" and "host owned" */
++ if ((txdesc->Ctl_8 & DESC_CTL_ACXDONE_HOSTOWN)
++ != DESC_CTL_ACXDONE_HOSTOWN) {
++ if (unlikely(!num_cleaned)) { /* maybe remove completely */
++ log(L_BUFT, "clean_txdesc: tail isn't free. "
++ "tail:%d head:%d\n",
++ adev->tx_tail, adev->tx_head);
++ }
++ break;
++ }
++
++ /* remember desc values... */
++ error = txdesc->error;
++ ack_failures = txdesc->ack_failures;
++ rts_failures = txdesc->rts_failures;
++ rts_ok = txdesc->rts_ok;
++ r100 = txdesc->u.r1.rate;
++ r111 = le16_to_cpu(txdesc->u.r2.rate111);
++
++ /* need to check for certain error conditions before we
++ * clean the descriptor: we still need valid descr data here */
++ if (unlikely(0x30 & error)) {
++ /* only send IWEVTXDROP in case of retry or lifetime exceeded;
++ * all other errors mean we screwed up locally */
++ union iwreq_data wrqu;
++ wlan_hdr_t *hdr;
++ txhostdesc_t *hostdesc;
++
++ hostdesc = get_txhostdesc(adev, txdesc);
++ hdr = (wlan_hdr_t *)hostdesc->data;
++ MAC_COPY(wrqu.addr.sa_data, hdr->a1);
++ wireless_send_event(adev->ndev, IWEVTXDROP, &wrqu, NULL);
++ }
++
++ /* ...and free the desc */
++ txdesc->error = 0;
++ txdesc->ack_failures = 0;
++ txdesc->rts_failures = 0;
++ txdesc->rts_ok = 0;
++ /* signal host owning it LAST, since ACX already knows that this
++ ** descriptor is finished since it set Ctl_8 accordingly. */
++ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
++
++ adev->tx_free++;
++ num_cleaned++;
++
++ if ((adev->tx_free >= TX_START_QUEUE)
++ && (adev->status == ACX_STATUS_4_ASSOCIATED)
++ && (acx_queue_stopped(adev->ndev))
++ ) {
++ log(L_BUF, "tx: wake queue (avail. Tx desc %u)\n",
++ adev->tx_free);
++ acx_wake_queue(adev->ndev, NULL);
++ }
++
++ /* do error checking, rate handling and logging
++ * AFTER having done the work, it's faster */
++
++ /* do rate handling */
++ if (adev->rate_auto) {
++ struct client *clt = get_txc(adev, txdesc);
++ if (clt) {
++ u16 cur = get_txr(adev, txdesc);
++ if (clt->rate_cur == cur) {
++ acx_l_handle_txrate_auto(adev, clt,
++ cur, /* intended rate */
++ r100, r111, /* actually used rate */
++ (error & 0x30), /* was there an error? */
++ TX_CNT + TX_CLEAN_BACKLOG - adev->tx_free);
++ }
++ }
++ }
++
++ if (unlikely(error))
++ handle_tx_error(adev, error, finger);
++
++ if (IS_ACX111(adev))
++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u r111=%04X\n",
++ finger, ack_failures, rts_failures, rts_ok, r111);
++ else
++ log(L_BUFT, "tx: cleaned %u: !ACK=%u !RTS=%u RTS=%u rate=%u\n",
++ finger, ack_failures, rts_failures, rts_ok, r100);
++
++ /* update pointer for descr to be cleaned next */
++ finger = (finger + 1) % TX_CNT;
++ }
++
++ /* remember last position */
++ adev->tx_tail = finger;
++/* end: */
++ FN_EXIT1(num_cleaned);
++ return num_cleaned;
++}
++
++/* clean *all* Tx descriptors, and regardless of their previous state.
++ * Used for brute-force reset handling. */
++void
++acxpci_l_clean_txdesc_emergency(acx_device_t *adev)
++{
++ txdesc_t *txdesc;
++ int i;
++
++ FN_ENTER;
++
++ for (i = 0; i < TX_CNT; i++) {
++ txdesc = get_txdesc(adev, i);
++
++ /* free it */
++ txdesc->ack_failures = 0;
++ txdesc->rts_failures = 0;
++ txdesc->rts_ok = 0;
++ txdesc->error = 0;
++ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
++ }
++
++ adev->tx_free = TX_CNT;
++
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxpci_s_create_tx_host_desc_queue
++*/
++
++static void*
++allocate(acx_device_t *adev, size_t size, dma_addr_t *phy, const char *msg)
++{
++ void *ptr;
++
++ ptr = dma_alloc_coherent(adev->pdev ? &adev->pdev->dev : NULL,
++ size, phy, GFP_KERNEL);
++
++ if (ptr) {
++ log(L_DEBUG, "%s sz=%d adr=0x%p phy=0x%08llx\n",
++ msg, (int)size, ptr, (unsigned long long)*phy);
++ memset(ptr, 0, size);
++ return ptr;
++ }
++ printk(KERN_ERR "acx: %s allocation FAILED (%d bytes)\n",
++ msg, (int)size);
++ return NULL;
++}
++
++
++static int
++acxpci_s_create_tx_host_desc_queue(acx_device_t *adev)
++{
++ txhostdesc_t *hostdesc;
++ u8 *txbuf;
++ dma_addr_t hostdesc_phy;
++ dma_addr_t txbuf_phy;
++ int i;
++
++ FN_ENTER;
++
++ /* allocate TX buffer */
++ adev->txbuf_area_size = TX_CNT * WLAN_A4FR_MAXLEN_WEP_FCS;
++ adev->txbuf_start = allocate(adev, adev->txbuf_area_size,
++ &adev->txbuf_startphy, "txbuf_start");
++ if (!adev->txbuf_start)
++ goto fail;
++
++ /* allocate the TX host descriptor queue pool */
++ adev->txhostdesc_area_size = TX_CNT * 2*sizeof(*hostdesc);
++ adev->txhostdesc_start = allocate(adev, adev->txhostdesc_area_size,
++ &adev->txhostdesc_startphy, "txhostdesc_start");
++ if (!adev->txhostdesc_start)
++ goto fail;
++ /* check for proper alignment of TX host descriptor pool */
++ if ((long) adev->txhostdesc_start & 3) {
++ printk("acx: driver bug: dma alloc returns unaligned address\n");
++ goto fail;
++ }
++
++ hostdesc = adev->txhostdesc_start;
++ hostdesc_phy = adev->txhostdesc_startphy;
++ txbuf = adev->txbuf_start;
++ txbuf_phy = adev->txbuf_startphy;
++
++#if 0
++/* Each tx buffer is accessed by hardware via
++** txdesc -> txhostdesc(s) -> txbuffer(s).
++** We use only one txhostdesc per txdesc, but it looks like
++** acx111 is buggy: it accesses second txhostdesc
++** (via hostdesc.desc_phy_next field) even if
++** txdesc->length == hostdesc->length and thus
++** entire packet was placed into first txhostdesc.
++** Due to this bug acx111 hangs unless second txhostdesc
++** has le16_to_cpu(hostdesc.length) = 3 (or larger)
++** Storing NULL into hostdesc.desc_phy_next
++** doesn't seem to help.
++**
++** Update: although it worked on Xterasys XN-2522g
++** with len=3 trick, WG311v2 is even more bogus, doesn't work.
++** Keeping this code (#ifdef'ed out) for documentational purposes.
++*/
++ for (i = 0; i < TX_CNT*2; i++) {
++ hostdesc_phy += sizeof(*hostdesc);
++ if (!(i & 1)) {
++ hostdesc->data_phy = cpu2acx(txbuf_phy);
++ /* hostdesc->data_offset = ... */
++ /* hostdesc->reserved = ... */
++ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
++ /* hostdesc->length = ... */
++ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
++ hostdesc->pNext = ptr2acx(NULL);
++ /* hostdesc->Status = ... */
++ /* below: non-hardware fields */
++ hostdesc->data = txbuf;
++
++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS;
++ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS;
++ } else {
++ /* hostdesc->data_phy = ... */
++ /* hostdesc->data_offset = ... */
++ /* hostdesc->reserved = ... */
++ /* hostdesc->Ctl_16 = ... */
++ hostdesc->length = cpu_to_le16(3); /* bug workaround */
++ /* hostdesc->desc_phy_next = ... */
++ /* hostdesc->pNext = ... */
++ /* hostdesc->Status = ... */
++ /* below: non-hardware fields */
++ /* hostdesc->data = ... */
++ }
++ hostdesc++;
++ }
++#endif
++/* We initialize two hostdescs so that they point to adjacent
++** memory areas. Thus txbuf is really just a contiguous memory area */
++ for (i = 0; i < TX_CNT*2; i++) {
++ hostdesc_phy += sizeof(*hostdesc);
++
++ hostdesc->data_phy = cpu2acx(txbuf_phy);
++ /* done by memset(0): hostdesc->data_offset = 0; */
++ /* hostdesc->reserved = ... */
++ hostdesc->Ctl_16 = cpu_to_le16(DESC_CTL_HOSTOWN);
++ /* hostdesc->length = ... */
++ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
++ /* done by memset(0): hostdesc->pNext = ptr2acx(NULL); */
++ /* hostdesc->Status = ... */
++ /* ->data is a non-hardware field: */
++ hostdesc->data = txbuf;
++
++ if (!(i & 1)) {
++ txbuf += WLAN_HDR_A3_LEN;
++ txbuf_phy += WLAN_HDR_A3_LEN;
++ } else {
++ txbuf += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
++ txbuf_phy += WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN;
++ }
++ hostdesc++;
++ }
++ hostdesc--;
++ hostdesc->desc_phy_next = cpu2acx(adev->txhostdesc_startphy);
++
++ FN_EXIT1(OK);
++ return OK;
++fail:
++ printk("acx: create_tx_host_desc_queue FAILED\n");
++ /* dealloc will be done by free function on error case */
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***************************************************************
++** acxpci_s_create_rx_host_desc_queue
++*/
++/* the whole size of a data buffer (header plus data body)
++ * plus 32 bytes safety offset at the end */
++#define RX_BUFFER_SIZE (sizeof(rxbuffer_t) + 32)
++
++static int
++acxpci_s_create_rx_host_desc_queue(acx_device_t *adev)
++{
++ rxhostdesc_t *hostdesc;
++ rxbuffer_t *rxbuf;
++ dma_addr_t hostdesc_phy;
++ dma_addr_t rxbuf_phy;
++ int i;
++
++ FN_ENTER;
++
++ /* allocate the RX host descriptor queue pool */
++ adev->rxhostdesc_area_size = RX_CNT * sizeof(*hostdesc);
++ adev->rxhostdesc_start = allocate(adev, adev->rxhostdesc_area_size,
++ &adev->rxhostdesc_startphy, "rxhostdesc_start");
++ if (!adev->rxhostdesc_start)
++ goto fail;
++ /* check for proper alignment of RX host descriptor pool */
++ if ((long) adev->rxhostdesc_start & 3) {
++ printk("acx: driver bug: dma alloc returns unaligned address\n");
++ goto fail;
++ }
++
++ /* allocate Rx buffer pool which will be used by the acx
++ * to store the whole content of the received frames in it */
++ adev->rxbuf_area_size = RX_CNT * RX_BUFFER_SIZE;
++ adev->rxbuf_start = allocate(adev, adev->rxbuf_area_size,
++ &adev->rxbuf_startphy, "rxbuf_start");
++ if (!adev->rxbuf_start)
++ goto fail;
++
++ rxbuf = adev->rxbuf_start;
++ rxbuf_phy = adev->rxbuf_startphy;
++ hostdesc = adev->rxhostdesc_start;
++ hostdesc_phy = adev->rxhostdesc_startphy;
++
++ /* don't make any popular C programming pointer arithmetic mistakes
++ * here, otherwise I'll kill you...
++ * (and don't dare asking me why I'm warning you about that...) */
++ for (i = 0; i < RX_CNT; i++) {
++ hostdesc->data = rxbuf;
++ hostdesc->data_phy = cpu2acx(rxbuf_phy);
++ hostdesc->length = cpu_to_le16(RX_BUFFER_SIZE);
++ CLEAR_BIT(hostdesc->Ctl_16, cpu_to_le16(DESC_CTL_HOSTOWN));
++ rxbuf++;
++ rxbuf_phy += sizeof(*rxbuf);
++ hostdesc_phy += sizeof(*hostdesc);
++ hostdesc->desc_phy_next = cpu2acx(hostdesc_phy);
++ hostdesc++;
++ }
++ hostdesc--;
++ hostdesc->desc_phy_next = cpu2acx(adev->rxhostdesc_startphy);
++ FN_EXIT1(OK);
++ return OK;
++fail:
++ printk("acx: create_rx_host_desc_queue FAILED\n");
++ /* dealloc will be done by free function on error case */
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***************************************************************
++** acxpci_s_create_hostdesc_queues
++*/
++int
++acxpci_s_create_hostdesc_queues(acx_device_t *adev)
++{
++ int result;
++ result = acxpci_s_create_tx_host_desc_queue(adev);
++ if (OK != result) return result;
++ result = acxpci_s_create_rx_host_desc_queue(adev);
++ return result;
++}
++
++
++/***************************************************************
++** acxpci_create_tx_desc_queue
++*/
++static void
++acxpci_create_tx_desc_queue(acx_device_t *adev, u32 tx_queue_start)
++{
++ txdesc_t *txdesc;
++ txhostdesc_t *hostdesc;
++ dma_addr_t hostmemptr;
++ u32 mem_offs;
++ int i;
++
++ FN_ENTER;
++
++ if (IS_ACX100(adev))
++ adev->txdesc_size = sizeof(*txdesc);
++ else
++ /* the acx111 txdesc is 4 bytes larger */
++ adev->txdesc_size = sizeof(*txdesc) + 4;
++
++ adev->txdesc_start = (txdesc_t *) (adev->iobase2 + tx_queue_start);
++
++ log(L_DEBUG, "adev->iobase2=%p\n"
++ "tx_queue_start=%08X\n"
++ "adev->txdesc_start=%p\n",
++ adev->iobase2,
++ tx_queue_start,
++ adev->txdesc_start);
++
++ adev->tx_free = TX_CNT;
++ /* done by memset: adev->tx_head = 0; */
++ /* done by memset: adev->tx_tail = 0; */
++ txdesc = adev->txdesc_start;
++ mem_offs = tx_queue_start;
++ hostmemptr = adev->txhostdesc_startphy;
++ hostdesc = adev->txhostdesc_start;
++
++ if (IS_ACX111(adev)) {
++ /* ACX111 has a preinitialized Tx buffer! */
++ /* loop over whole send pool */
++ /* FIXME: do we have to do the hostmemptr stuff here?? */
++ for (i = 0; i < TX_CNT; i++) {
++ txdesc->HostMemPtr = ptr2acx(hostmemptr);
++ txdesc->Ctl_8 = DESC_CTL_HOSTOWN;
++ /* reserve two (hdr desc and payload desc) */
++ hostdesc += 2;
++ hostmemptr += 2 * sizeof(*hostdesc);
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++ } else {
++ /* ACX100 Tx buffer needs to be initialized by us */
++ /* clear whole send pool. sizeof is safe here (we are acx100) */
++ memset(adev->txdesc_start, 0, TX_CNT * sizeof(*txdesc));
++
++ /* loop over whole send pool */
++ for (i = 0; i < TX_CNT; i++) {
++ log(L_DEBUG, "configure card tx descriptor: 0x%p, "
++ "size: 0x%X\n", txdesc, adev->txdesc_size);
++
++ /* pointer to hostdesc memory */
++ txdesc->HostMemPtr = ptr2acx(hostmemptr);
++ /* initialise ctl */
++ txdesc->Ctl_8 = ( DESC_CTL_HOSTOWN | DESC_CTL_RECLAIM
++ | DESC_CTL_AUTODMA | DESC_CTL_FIRSTFRAG);
++ /* done by memset(0): txdesc->Ctl2_8 = 0; */
++ /* point to next txdesc */
++ txdesc->pNextDesc = cpu2acx(mem_offs + adev->txdesc_size);
++ /* reserve two (hdr desc and payload desc) */
++ hostdesc += 2;
++ hostmemptr += 2 * sizeof(*hostdesc);
++ /* go to the next one */
++ mem_offs += adev->txdesc_size;
++ /* ++ is safe here (we are acx100) */
++ txdesc++;
++ }
++ /* go back to the last one */
++ txdesc--;
++ /* and point to the first making it a ring buffer */
++ txdesc->pNextDesc = cpu2acx(tx_queue_start);
++ }
++ FN_EXIT0;
++}
++
++
++/***************************************************************
++** acxpci_create_rx_desc_queue
++*/
++static void
++acxpci_create_rx_desc_queue(acx_device_t *adev, u32 rx_queue_start)
++{
++ rxdesc_t *rxdesc;
++ u32 mem_offs;
++ int i;
++
++ FN_ENTER;
++
++ /* done by memset: adev->rx_tail = 0; */
++
++ /* ACX111 doesn't need any further config: preconfigures itself.
++ * Simply print ring buffer for debugging */
++ if (IS_ACX111(adev)) {
++ /* rxdesc_start already set here */
++
++ adev->rxdesc_start = (rxdesc_t *) ((u8 *)adev->iobase2 + rx_queue_start);
++
++ rxdesc = adev->rxdesc_start;
++ for (i = 0; i < RX_CNT; i++) {
++ log(L_DEBUG, "rx descriptor %d @ 0x%p\n", i, rxdesc);
++ rxdesc = adev->rxdesc_start = (rxdesc_t *)
++ (adev->iobase2 + acx2cpu(rxdesc->pNextDesc));
++ }
++ } else {
++ /* we didn't pre-calculate rxdesc_start in case of ACX100 */
++ /* rxdesc_start should be right AFTER Tx pool */
++ adev->rxdesc_start = (rxdesc_t *)
++ ((u8 *) adev->txdesc_start + (TX_CNT * sizeof(txdesc_t)));
++ /* NB: sizeof(txdesc_t) above is valid because we know
++ ** we are in if (acx100) block. Beware of cut-n-pasting elsewhere!
++ ** acx111's txdesc is larger! */
++
++ memset(adev->rxdesc_start, 0, RX_CNT * sizeof(*rxdesc));
++
++ /* loop over whole receive pool */
++ rxdesc = adev->rxdesc_start;
++ mem_offs = rx_queue_start;
++ for (i = 0; i < RX_CNT; i++) {
++ log(L_DEBUG, "rx descriptor @ 0x%p\n", rxdesc);
++ rxdesc->Ctl_8 = DESC_CTL_RECLAIM | DESC_CTL_AUTODMA;
++ /* point to next rxdesc */
++ rxdesc->pNextDesc = cpu2acx(mem_offs + sizeof(*rxdesc));
++ /* go to the next one */
++ mem_offs += sizeof(*rxdesc);
++ rxdesc++;
++ }
++ /* go to the last one */
++ rxdesc--;
++
++ /* and point to the first making it a ring buffer */
++ rxdesc->pNextDesc = cpu2acx(rx_queue_start);
++ }
++ FN_EXIT0;
++}
++
++
++/***************************************************************
++** acxpci_create_desc_queues
++*/
++void
++acxpci_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start)
++{
++ acxpci_create_tx_desc_queue(adev, tx_queue_start);
++ acxpci_create_rx_desc_queue(adev, rx_queue_start);
++}
++
++
++/***************************************************************
++** acxpci_s_proc_diag_output
++*/
++char*
++acxpci_s_proc_diag_output(char *p, acx_device_t *adev)
++{
++ const char *rtl, *thd, *ttl;
++ rxhostdesc_t *rxhostdesc;
++ txdesc_t *txdesc;
++ int i;
++
++ FN_ENTER;
++
++ p += sprintf(p, "** Rx buf **\n");
++ rxhostdesc = adev->rxhostdesc_start;
++ if (rxhostdesc) for (i = 0; i < RX_CNT; i++) {
++ rtl = (i == adev->rx_tail) ? " [tail]" : "";
++ if ((rxhostdesc->Ctl_16 & cpu_to_le16(DESC_CTL_HOSTOWN))
++ && (rxhostdesc->Status & cpu_to_le32(DESC_STATUS_FULL)) )
++ p += sprintf(p, "%02u FULL%s\n", i, rtl);
++ else
++ p += sprintf(p, "%02u empty%s\n", i, rtl);
++ rxhostdesc++;
++ }
++ p += sprintf(p, "** Tx buf (free %d, Linux netqueue %s) **\n", adev->tx_free,
++ acx_queue_stopped(adev->ndev) ? "STOPPED" : "running");
++ txdesc = adev->txdesc_start;
++ if (txdesc) for (i = 0; i < TX_CNT; i++) {
++ thd = (i == adev->tx_head) ? " [head]" : "";
++ ttl = (i == adev->tx_tail) ? " [tail]" : "";
++ if (txdesc->Ctl_8 & DESC_CTL_ACXDONE)
++ p += sprintf(p, "%02u free (%02X)%s%s\n", i, txdesc->Ctl_8, thd, ttl);
++ else
++ p += sprintf(p, "%02u tx (%02X)%s%s\n", i, txdesc->Ctl_8, thd, ttl);
++ txdesc = advance_txdesc(adev, txdesc, 1);
++ }
++ p += sprintf(p,
++ "\n"
++ "** PCI data **\n"
++ "txbuf_start %p, txbuf_area_size %u, txbuf_startphy %08llx\n"
++ "txdesc_size %u, txdesc_start %p\n"
++ "txhostdesc_start %p, txhostdesc_area_size %u, txhostdesc_startphy %08llx\n"
++ "rxdesc_start %p\n"
++ "rxhostdesc_start %p, rxhostdesc_area_size %u, rxhostdesc_startphy %08llx\n"
++ "rxbuf_start %p, rxbuf_area_size %u, rxbuf_startphy %08llx\n",
++ adev->txbuf_start, adev->txbuf_area_size,
++ (unsigned long long)adev->txbuf_startphy,
++ adev->txdesc_size, adev->txdesc_start,
++ adev->txhostdesc_start, adev->txhostdesc_area_size,
++ (unsigned long long)adev->txhostdesc_startphy,
++ adev->rxdesc_start,
++ adev->rxhostdesc_start, adev->rxhostdesc_area_size,
++ (unsigned long long)adev->rxhostdesc_startphy,
++ adev->rxbuf_start, adev->rxbuf_area_size,
++ (unsigned long long)adev->rxbuf_startphy);
++
++ FN_EXIT0;
++ return p;
++}
++
++
++/***********************************************************************
++*/
++int
++acxpci_proc_eeprom_output(char *buf, acx_device_t *adev)
++{
++ char *p = buf;
++ int i;
++
++ FN_ENTER;
++
++ for (i = 0; i < 0x400; i++) {
++ acxpci_read_eeprom_byte(adev, i, p++);
++ }
++
++ FN_EXIT1(p - buf);
++ return p - buf;
++}
++
++
++/***********************************************************************
++*/
++void
++acxpci_set_interrupt_mask(acx_device_t *adev)
++{
++ if (IS_ACX111(adev)) {
++ adev->irq_mask = (u16) ~(0
++ /* | HOST_INT_RX_DATA */
++ | HOST_INT_TX_COMPLETE
++ /* | HOST_INT_TX_XFER */
++ | HOST_INT_RX_COMPLETE
++ /* | HOST_INT_DTIM */
++ /* | HOST_INT_BEACON */
++ /* | HOST_INT_TIMER */
++ /* | HOST_INT_KEY_NOT_FOUND */
++ | HOST_INT_IV_ICV_FAILURE
++ | HOST_INT_CMD_COMPLETE
++ | HOST_INT_INFO
++ /* | HOST_INT_OVERFLOW */
++ /* | HOST_INT_PROCESS_ERROR */
++ | HOST_INT_SCAN_COMPLETE
++ | HOST_INT_FCS_THRESHOLD
++ /* | HOST_INT_UNKNOWN */
++ );
++ /* Or else acx100 won't signal cmd completion, right? */
++ adev->irq_mask_off = (u16)~( HOST_INT_CMD_COMPLETE ); /* 0xfdff */
++ } else {
++ adev->irq_mask = (u16) ~(0
++ /* | HOST_INT_RX_DATA */
++ | HOST_INT_TX_COMPLETE
++ /* | HOST_INT_TX_XFER */
++ | HOST_INT_RX_COMPLETE
++ /* | HOST_INT_DTIM */
++ /* | HOST_INT_BEACON */
++ /* | HOST_INT_TIMER */
++ /* | HOST_INT_KEY_NOT_FOUND */
++ /* | HOST_INT_IV_ICV_FAILURE */
++ | HOST_INT_CMD_COMPLETE
++ | HOST_INT_INFO
++ /* | HOST_INT_OVERFLOW */
++ /* | HOST_INT_PROCESS_ERROR */
++ | HOST_INT_SCAN_COMPLETE
++ /* | HOST_INT_FCS_THRESHOLD */
++ /* | HOST_INT_UNKNOWN */
++ );
++ adev->irq_mask_off = (u16)~( HOST_INT_UNKNOWN ); /* 0x7fff */
++ }
++}
++
++
++/***********************************************************************
++*/
++int
++acx100pci_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
++{
++ /* since it can be assumed that at least the Maxim radio has a
++ * maximum power output of 20dBm and since it also can be
++ * assumed that these values drive the DAC responsible for
++ * setting the linear Tx level, I'd guess that these values
++ * should be the corresponding linear values for a dBm value,
++ * in other words: calculate the values from that formula:
++ * Y [dBm] = 10 * log (X [mW])
++ * then scale the 0..63 value range onto the 1..100mW range (0..20 dBm)
++ * and you're done...
++ * Hopefully that's ok, but you never know if we're actually
++ * right... (especially since Windows XP doesn't seem to show
++ * actual Tx dBm values :-P) */
++
++ /* NOTE: on Maxim, value 30 IS 30mW, and value 10 IS 10mW - so the
++ * values are EXACTLY mW!!! Not sure about RFMD and others,
++ * though... */
++ static const u8 dbm2val_maxim[21] = {
++ 63, 63, 63, 62,
++ 61, 61, 60, 60,
++ 59, 58, 57, 55,
++ 53, 50, 47, 43,
++ 38, 31, 23, 13,
++ 0
++ };
++ static const u8 dbm2val_rfmd[21] = {
++ 0, 0, 0, 1,
++ 2, 2, 3, 3,
++ 4, 5, 6, 8,
++ 10, 13, 16, 20,
++ 25, 32, 41, 50,
++ 63
++ };
++ const u8 *table;
++
++ switch (adev->radio_type) {
++ case RADIO_MAXIM_0D:
++ table = &dbm2val_maxim[0];
++ break;
++ case RADIO_RFMD_11:
++ case RADIO_RALINK_15:
++ table = &dbm2val_rfmd[0];
++ break;
++ default:
++ printk("%s: unknown/unsupported radio type, "
++ "cannot modify tx power level yet!\n",
++ adev->ndev->name);
++ return NOT_OK;
++ }
++ printk("%s: changing radio power level to %u dBm (%u)\n",
++ adev->ndev->name, level_dbm, table[level_dbm]);
++ acxpci_s_write_phy_reg(adev, 0x11, table[level_dbm]);
++ return OK;
++}
++
++
++/***********************************************************************
++** Data for init_module/cleanup_module
++*/
++static const struct pci_device_id
++acxpci_id_tbl[] __devinitdata = {
++ {
++ .vendor = PCI_VENDOR_ID_TI,
++ .device = PCI_DEVICE_ID_TI_TNETW1100A,
++ .subvendor = PCI_ANY_ID,
++ .subdevice = PCI_ANY_ID,
++ .driver_data = CHIPTYPE_ACX100,
++ },
++ {
++ .vendor = PCI_VENDOR_ID_TI,
++ .device = PCI_DEVICE_ID_TI_TNETW1100B,
++ .subvendor = PCI_ANY_ID,
++ .subdevice = PCI_ANY_ID,
++ .driver_data = CHIPTYPE_ACX100,
++ },
++ {
++ .vendor = PCI_VENDOR_ID_TI,
++ .device = PCI_DEVICE_ID_TI_TNETW1130,
++ .subvendor = PCI_ANY_ID,
++ .subdevice = PCI_ANY_ID,
++ .driver_data = CHIPTYPE_ACX111,
++ },
++ {
++ .vendor = 0,
++ .device = 0,
++ .subvendor = 0,
++ .subdevice = 0,
++ .driver_data = 0,
++ }
++};
++
++MODULE_DEVICE_TABLE(pci, acxpci_id_tbl);
++
++/* FIXME: checks should be removed once driver is included in the kernel */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11)
++/* pci_name() got introduced at start of 2.6.x,
++ * got mandatory (slot_name member removed) in 2.6.11-bk1 */
++#define pci_name(x) x->slot_name
++#endif
++
++static struct pci_driver
++acxpci_drv_id = {
++ .name = "acx_pci",
++ .id_table = acxpci_id_tbl,
++ .probe = acxpci_e_probe,
++ .remove = __devexit_p(acxpci_e_remove),
++#ifdef CONFIG_PM
++ .suspend = acxpci_e_suspend,
++ .resume = acxpci_e_resume
++#endif /* CONFIG_PM */
++};
++
++
++/***********************************************************************
++** acxpci_e_init_module
++**
++** Module initialization routine, called once at module load time
++*/
++int __init
++acxpci_e_init_module(void)
++{
++ int res;
++
++ FN_ENTER;
++
++#if (ACX_IO_WIDTH==32)
++ printk("acx: compiled to use 32bit I/O access. "
++ "I/O timing issues might occur, such as "
++ "non-working firmware upload. Report them\n");
++#else
++ printk("acx: compiled to use 16bit I/O access only "
++ "(compatibility mode)\n");
++#endif
++
++#ifdef __LITTLE_ENDIAN
++#define ENDIANNESS_STRING "running on a little-endian CPU\n"
++#else
++#define ENDIANNESS_STRING "running on a BIG-ENDIAN CPU\n"
++#endif
++ log(L_INIT,
++ ENDIANNESS_STRING
++ "PCI module " ACX_RELEASE " initialized, "
++ "waiting for cards to probe...\n"
++ );
++
++ res = pci_register_driver(&acxpci_drv_id);
++ FN_EXIT1(res);
++ return res;
++}
++
++
++/***********************************************************************
++** acxpci_e_cleanup_module
++**
++** Called at module unload time. This is our last chance to
++** clean up after ourselves.
++*/
++void __exit
++acxpci_e_cleanup_module(void)
++{
++ FN_ENTER;
++
++ pci_unregister_driver(&acxpci_drv_id);
++
++ FN_EXIT0;
++}
+Index: linux-2.6.23/drivers/net/wireless/acx/rx3000_acx.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/rx3000_acx.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,110 @@
++/*
++ * WLAN (TI TNETW1100B) support in the HP iPAQ RX3000
++ *
++ * Copyright (c) 2006 SDG Systems, LLC
++ * Copyright (c) 2006 Roman Moravcik
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * Based on hx4700_acx.c
++ */
++
++
++#include <linux/kernel.h>
++#include <linux/platform_device.h>
++#include <linux/delay.h>
++#include <linux/dpm.h>
++#include <linux/leds.h>
++
++#include <asm/hardware.h>
++
++#include <asm/arch/regs-gpio.h>
++#include <linux/mfd/asic3_base.h>
++#include <asm/arch/rx3000.h>
++#include <asm/arch/rx3000-asic3.h>
++#include <asm/io.h>
++
++#include "acx_hw.h"
++
++extern struct platform_device s3c_device_asic3;
++
++static int rx3000_wlan_start(void)
++{
++ DPM_DEBUG("rx3000_acx: Turning on\n");
++ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, ASIC3_GPB3);
++ mdelay(20);
++ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC13, ASIC3_GPC13);
++ mdelay(20);
++ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC11, ASIC3_GPC11);
++ mdelay(100);
++ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, ASIC3_GPB3);
++ mdelay(20);
++ s3c2410_gpio_cfgpin(S3C2410_GPA15, S3C2410_GPA15_nGCS4);
++ mdelay(100);
++ s3c2410_gpio_setpin(S3C2410_GPA11, 0);
++ mdelay(50);
++ s3c2410_gpio_setpin(S3C2410_GPA11, 1);
++ led_trigger_event_shared(rx3000_radio_trig, LED_FULL);
++ return 0;
++}
++
++static int rx3000_wlan_stop(void)
++{
++ DPM_DEBUG("rx3000_acx: Turning off\n");
++ s3c2410_gpio_setpin(S3C2410_GPA15, 1);
++ s3c2410_gpio_cfgpin(S3C2410_GPA15, S3C2410_GPA15_OUT);
++ asic3_set_gpio_out_b(&s3c_device_asic3.dev, ASIC3_GPB3, 0);
++ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC13, 0);
++ asic3_set_gpio_out_c(&s3c_device_asic3.dev, ASIC3_GPC11, 0);
++ led_trigger_event_shared(rx3000_radio_trig, LED_OFF);
++ return 0;
++}
++
++static struct resource acx_resources[] = {
++ [0] = {
++ .start = RX3000_PA_WLAN,
++ .end = RX3000_PA_WLAN + 0x20,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = IRQ_EINT16,
++ .end = IRQ_EINT16,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct acx_hardware_data acx_data = {
++ .start_hw = rx3000_wlan_start,
++ .stop_hw = rx3000_wlan_stop,
++};
++
++static struct platform_device acx_device = {
++ .name = "acx-mem",
++ .dev = {
++ .platform_data = &acx_data,
++ },
++ .num_resources = ARRAY_SIZE(acx_resources),
++ .resource = acx_resources,
++};
++
++static int __init rx3000_wlan_init(void)
++{
++ printk("rx3000_wlan_init: acx-mem platform_device_register\n");
++ return platform_device_register(&acx_device);
++}
++
++
++static void __exit rx3000_wlan_exit(void)
++{
++ platform_device_unregister(&acx_device);
++}
++
++module_init(rx3000_wlan_init);
++module_exit(rx3000_wlan_exit);
++
++MODULE_AUTHOR("Todd Blumer <todd@sdgsystems.com>, Roman Moravcik <roman.moravcik@gmail.com>");
++MODULE_DESCRIPTION("WLAN driver for HP iPAQ RX3000");
++MODULE_LICENSE("GPL");
++
+Index: linux-2.6.23/drivers/net/wireless/acx/setrate.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/setrate.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,213 @@
++/* TODO: stop #including, move into wireless.c
++ * until then, keep in sync copies in prism54/ and acx/ dirs
++ * code+data size: less than 1k */
++
++enum {
++ DOT11_RATE_1,
++ DOT11_RATE_2,
++ DOT11_RATE_5,
++ DOT11_RATE_11,
++ DOT11_RATE_22,
++ DOT11_RATE_33,
++ DOT11_RATE_6,
++ DOT11_RATE_9,
++ DOT11_RATE_12,
++ DOT11_RATE_18,
++ DOT11_RATE_24,
++ DOT11_RATE_36,
++ DOT11_RATE_48,
++ DOT11_RATE_54
++};
++enum {
++ DOT11_MOD_DBPSK,
++ DOT11_MOD_DQPSK,
++ DOT11_MOD_CCK,
++ DOT11_MOD_OFDM,
++ DOT11_MOD_CCKOFDM,
++ DOT11_MOD_PBCC
++};
++static const u8 ratelist[] = { 1,2,5,11,22,33,6,9,12,18,24,36,48,54 };
++static const u8 dot11ratebyte[] = { 1*2,2*2,11,11*2,22*2,33*2,6*2,9*2,12*2,18*2,24*2,36*2,48*2,54*2 };
++static const u8 default_modulation[] = {
++ DOT11_MOD_DBPSK,
++ DOT11_MOD_DQPSK,
++ DOT11_MOD_CCK,
++ DOT11_MOD_CCK,
++ DOT11_MOD_PBCC,
++ DOT11_MOD_PBCC,
++ DOT11_MOD_OFDM,
++ DOT11_MOD_OFDM,
++ DOT11_MOD_OFDM,
++ DOT11_MOD_OFDM,
++ DOT11_MOD_OFDM,
++ DOT11_MOD_OFDM,
++ DOT11_MOD_OFDM,
++ DOT11_MOD_OFDM
++};
++
++static /* TODO: remove 'static' when moved to wireless.c */
++int
++rate_mbit2enum(int n) {
++ int i=0;
++ while(i<sizeof(ratelist)) {
++ if(n==ratelist[i]) return i;
++ i++;
++ }
++ return -EINVAL;
++}
++
++static int
++get_modulation(int r_enum, char suffix) {
++ if(suffix==',' || suffix==' ' || suffix=='\0') {
++ /* could shorten default_mod by 8 bytes:
++ if(r_enum>=DOT11_RATE_6) return DOT11_MOD_OFDM; */
++ return default_modulation[r_enum];
++ }
++ if(suffix=='c') {
++ if(r_enum<DOT11_RATE_5 || r_enum>DOT11_RATE_11) return -EINVAL;
++ return DOT11_MOD_CCK;
++ }
++ if(suffix=='p') {
++ if(r_enum<DOT11_RATE_5 || r_enum>DOT11_RATE_33) return -EINVAL;
++ return DOT11_MOD_PBCC;
++ }
++ if(suffix=='o') {
++ if(r_enum<DOT11_RATE_6) return -EINVAL;
++ return DOT11_MOD_OFDM;
++ }
++ if(suffix=='d') {
++ if(r_enum<DOT11_RATE_6) return -EINVAL;
++ return DOT11_MOD_CCKOFDM;
++ }
++ return -EINVAL;
++}
++
++#ifdef UNUSED
++static int
++fill_ratevector(const char **pstr, u8 *vector, int size,
++ int (*supported)(int mbit, int mod, void *opaque), void *opaque, int or_mask)
++{
++ unsigned long rate_mbit;
++ int rate_enum,mod;
++ const char *str = *pstr;
++ char c;
++
++ do {
++ rate_mbit = simple_strtoul(str, (char**)&str, 10);
++ if(rate_mbit>INT_MAX) return -EINVAL;
++
++ rate_enum = rate_mbit2enum(rate_mbit);
++ if(rate_enum<0) return rate_enum;
++
++ c = *str;
++ mod = get_modulation(rate_enum, c);
++ if(mod<0) return mod;
++
++ if(c>='a' && c<='z') c = *++str;
++ if(c!=',' && c!=' ' && c!='\0') return -EINVAL;
++
++ if(supported) {
++ int r = supported(rate_mbit, mod, opaque);
++ if(r) return r;
++ }
++
++ *vector++ = dot11ratebyte[rate_enum] | or_mask;
++
++ size--;
++ str++;
++ } while(size>0 && c==',');
++
++ if(size<1) return -E2BIG;
++ *vector=0; /* TODO: sort, remove dups? */
++
++ *pstr = str-1;
++ return 0;
++}
++
++static /* TODO: remove 'static' when moved to wireless.c */
++int
++fill_ratevectors(const char *str, u8 *brate, u8 *orate, int size,
++ int (*supported)(int mbit, int mod, void *opaque), void *opaque)
++{
++ int r;
++
++ r = fill_ratevector(&str, brate, size, supported, opaque, 0x80);
++ if(r) return r;
++
++ orate[0] = 0;
++ if(*str==' ') {
++ str++;
++ r = fill_ratevector(&str, orate, size, supported, opaque, 0);
++ if(r) return r;
++ /* TODO: sanitize, e.g. remove/error on rates already in basic rate set? */
++ }
++ if(*str)
++ return -EINVAL;
++
++ return 0;
++}
++#endif
++
++/* TODO: use u64 masks? */
++
++static int
++fill_ratemask(const char **pstr, u32* mask,
++ int (*supported)(int mbit, int mod,void *opaque),
++ u32 (*gen_mask)(int mbit, int mod,void *opaque),
++ void *opaque)
++{
++ unsigned long rate_mbit;
++ int rate_enum,mod;
++ u32 m = 0;
++ const char *str = *pstr;
++ char c;
++
++ do {
++ rate_mbit = simple_strtoul(str, (char**)&str, 10);
++ if(rate_mbit>INT_MAX) return -EINVAL;
++
++ rate_enum = rate_mbit2enum(rate_mbit);
++ if(rate_enum<0) return rate_enum;
++
++ c = *str;
++ mod = get_modulation(rate_enum, c);
++ if(mod<0) return mod;
++
++ if(c>='a' && c<='z') c = *++str;
++ if(c!=',' && c!=' ' && c!='\0') return -EINVAL;
++
++ if(supported) {
++ int r = supported(rate_mbit, mod, opaque);
++ if(r) return r;
++ }
++
++ m |= gen_mask(rate_mbit, mod, opaque);
++ str++;
++ } while(c==',');
++
++ *pstr = str-1;
++ *mask |= m;
++ return 0;
++}
++
++static /* TODO: remove 'static' when moved to wireless.c */
++int
++fill_ratemasks(const char *str, u32 *bmask, u32 *omask,
++ int (*supported)(int mbit, int mod,void *opaque),
++ u32 (*gen_mask)(int mbit, int mod,void *opaque),
++ void *opaque)
++{
++ int r;
++
++ r = fill_ratemask(&str, bmask, supported, gen_mask, opaque);
++ if(r) return r;
++
++ if(*str==' ') {
++ str++;
++ r = fill_ratemask(&str, omask, supported, gen_mask, opaque);
++ if(r) return r;
++ }
++ if(*str)
++ return -EINVAL;
++ return 0;
++}
+Index: linux-2.6.23/drivers/net/wireless/acx/usb.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/usb.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,1922 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++*/
++
++/***********************************************************************
++** USB support for TI ACX100 based devices. Many parts are taken from
++** the PCI driver.
++**
++** Authors:
++** Martin Wawro <martin.wawro AT uni-dortmund.de>
++** Andreas Mohr <andi AT lisas.de>
++**
++** LOCKING
++** callback functions called by USB core are running in interrupt context
++** and thus have names with _i_.
++*/
++#define ACX_USB 1
++
++#include <linux/version.h>
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
++#include <linux/config.h>
++#endif
++#include <linux/types.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/kernel.h>
++#include <linux/usb.h>
++#include <linux/netdevice.h>
++#include <linux/rtnetlink.h>
++#include <linux/etherdevice.h>
++#include <linux/wireless.h>
++#include <net/iw_handler.h>
++#include <linux/vmalloc.h>
++
++#include "acx.h"
++
++
++/***********************************************************************
++*/
++/* number of endpoints of an interface */
++#define NUM_EP(intf) (intf)->altsetting[0].desc.bNumEndpoints
++#define EP(intf, nr) (intf)->altsetting[0].endpoint[(nr)].desc
++#define GET_DEV(udev) usb_get_dev((udev))
++#define PUT_DEV(udev) usb_put_dev((udev))
++#define SET_NETDEV_OWNER(ndev, owner) /* not needed anymore ??? */
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
++/* removed in 2.6.14. We will use fake value for now */
++#define URB_ASYNC_UNLINK 0
++#endif
++
++
++/***********************************************************************
++*/
++/* ACX100 (TNETW1100) USB device: D-Link DWL-120+ */
++#define ACX100_VENDOR_ID 0x2001
++#define ACX100_PRODUCT_ID_UNBOOTED 0x3B01
++#define ACX100_PRODUCT_ID_BOOTED 0x3B00
++
++/* TNETW1450 USB devices */
++#define VENDOR_ID_DLINK 0x07b8 /* D-Link Corp. */
++#define PRODUCT_ID_WUG2400 0xb21a /* AboCom WUG2400 or SafeCom SWLUT-54125 */
++#define VENDOR_ID_AVM_GMBH 0x057c
++#define PRODUCT_ID_AVM_WLAN_USB 0x5601
++#define PRODUCT_ID_AVM_WLAN_USB_si 0x6201 /* "self install" named Version: driver kills kernel on inbound scans from fritz box ??? */
++#define VENDOR_ID_ZCOM 0x0cde
++#define PRODUCT_ID_ZCOM_XG750 0x0017 /* not tested yet */
++#define VENDOR_ID_TI 0x0451
++#define PRODUCT_ID_TI_UNKNOWN 0x60c5 /* not tested yet */
++
++#define ACX_USB_CTRL_TIMEOUT 5500 /* steps in ms */
++
++/* Buffer size for fw upload, same for both ACX100 USB and TNETW1450 */
++#define USB_RWMEM_MAXLEN 2048
++
++/* The number of bulk URBs to use */
++#define ACX_TX_URB_CNT 8
++#define ACX_RX_URB_CNT 2
++
++/* Should be sent to the bulkout endpoint */
++#define ACX_USB_REQ_UPLOAD_FW 0x10
++#define ACX_USB_REQ_ACK_CS 0x11
++#define ACX_USB_REQ_CMD 0x12
++
++/***********************************************************************
++** Prototypes
++*/
++static int acxusb_e_probe(struct usb_interface *, const struct usb_device_id *);
++static void acxusb_e_disconnect(struct usb_interface *);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++static void acxusb_i_complete_tx(struct urb *);
++static void acxusb_i_complete_rx(struct urb *);
++#else
++static void acxusb_i_complete_tx(struct urb *, struct pt_regs *);
++static void acxusb_i_complete_rx(struct urb *, struct pt_regs *);
++#endif
++static int acxusb_e_open(struct net_device *);
++static int acxusb_e_close(struct net_device *);
++static void acxusb_i_set_rx_mode(struct net_device *);
++static int acxusb_boot(struct usb_device *, int is_tnetw1450, int *radio_type);
++
++static void acxusb_l_poll_rx(acx_device_t *adev, usb_rx_t* rx);
++
++static void acxusb_i_tx_timeout(struct net_device *);
++
++/* static void dump_device(struct usb_device *); */
++/* static void dump_device_descriptor(struct usb_device_descriptor *); */
++/* static void dump_config_descriptor(struct usb_config_descriptor *); */
++
++/***********************************************************************
++** Module Data
++*/
++#define TXBUFSIZE sizeof(usb_txbuffer_t)
++/*
++ * Now, this is just plain lying, but the device insists in giving us
++ * huge packets. We supply extra space after rxbuffer. Need to understand
++ * it better...
++ */
++#define RXBUFSIZE (sizeof(rxbuffer_t) + \
++ (sizeof(usb_rx_t) - sizeof(struct usb_rx_plain)))
++
++static const struct usb_device_id
++acxusb_ids[] = {
++ { USB_DEVICE(ACX100_VENDOR_ID, ACX100_PRODUCT_ID_BOOTED) },
++ { USB_DEVICE(ACX100_VENDOR_ID, ACX100_PRODUCT_ID_UNBOOTED) },
++ { USB_DEVICE(VENDOR_ID_DLINK, PRODUCT_ID_WUG2400) },
++ { USB_DEVICE(VENDOR_ID_AVM_GMBH, PRODUCT_ID_AVM_WLAN_USB) },
++ { USB_DEVICE(VENDOR_ID_AVM_GMBH, PRODUCT_ID_AVM_WLAN_USB_si) },
++ { USB_DEVICE(VENDOR_ID_ZCOM, PRODUCT_ID_ZCOM_XG750) },
++ { USB_DEVICE(VENDOR_ID_TI, PRODUCT_ID_TI_UNKNOWN) },
++ {}
++};
++
++MODULE_DEVICE_TABLE(usb, acxusb_ids);
++
++/* USB driver data structure as required by the kernel's USB core */
++static struct usb_driver
++acxusb_driver = {
++ .name = "acx_usb",
++ .probe = acxusb_e_probe,
++ .disconnect = acxusb_e_disconnect,
++ .id_table = acxusb_ids
++};
++
++
++/***********************************************************************
++** USB helper
++**
++** ldd3 ch13 says:
++** When the function is usb_kill_urb, the urb lifecycle is stopped. This
++** function is usually used when the device is disconnected from the system,
++** in the disconnect callback. For some drivers, the usb_unlink_urb function
++** should be used to tell the USB core to stop an urb. This function does not
++** wait for the urb to be fully stopped before returning to the caller.
++** This is useful for stoppingthe urb while in an interrupt handler or when
++** a spinlock is held, as waiting for a urb to fully stop requires the ability
++** for the USB core to put the calling process to sleep. This function requires
++** that the URB_ASYNC_UNLINK flag value be set in the urb that is being asked
++** to be stopped in order to work properly.
++**
++** (URB_ASYNC_UNLINK is obsolete, usb_unlink_urb will always be
++** asynchronous while usb_kill_urb is synchronous and should be called
++** directly (drivers/usb/core/urb.c))
++**
++** In light of this, timeout is just for paranoid reasons...
++*
++* Actually, it's useful for debugging. If we reach timeout, we're doing
++* something wrong with the urbs.
++*/
++static void
++acxusb_unlink_urb(struct urb* urb)
++{
++ if (!urb)
++ return;
++
++ if (urb->status == -EINPROGRESS) {
++ int timeout = 10;
++
++ usb_unlink_urb(urb);
++ while (--timeout && urb->status == -EINPROGRESS) {
++ mdelay(1);
++ }
++ if (!timeout) {
++ printk("acx_usb: urb unlink timeout!\n");
++ }
++ }
++}
++
++
++/***********************************************************************
++** EEPROM and PHY read/write helpers
++*/
++/***********************************************************************
++** acxusb_s_read_phy_reg
++*/
++int
++acxusb_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
++{
++ /* mem_read_write_t mem; */
++
++ FN_ENTER;
++
++ printk("%s doesn't seem to work yet, disabled.\n", __func__);
++
++ /*
++ mem.addr = cpu_to_le16(reg);
++ mem.type = cpu_to_le16(0x82);
++ mem.len = cpu_to_le32(4);
++ acx_s_issue_cmd(adev, ACX1xx_CMD_MEM_READ, &mem, sizeof(mem));
++ *charbuf = mem.data;
++ log(L_DEBUG, "read radio PHY[0x%04X]=0x%02X\n", reg, *charbuf);
++ */
++
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++/***********************************************************************
++*/
++int
++acxusb_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
++{
++ mem_read_write_t mem;
++
++ FN_ENTER;
++
++ mem.addr = cpu_to_le16(reg);
++ mem.type = cpu_to_le16(0x82);
++ mem.len = cpu_to_le32(4);
++ mem.data = value;
++ acx_s_issue_cmd(adev, ACX1xx_CMD_MEM_WRITE, &mem, sizeof(mem));
++ log(L_DEBUG, "write radio PHY[0x%04X]=0x%02X\n", reg, value);
++
++ FN_EXIT1(OK);
++ return OK;
++}
++
++
++/***********************************************************************
++** acxusb_s_issue_cmd_timeo
++** Excecutes a command in the command mailbox
++**
++** buffer = a pointer to the data.
++** The data must not include 4 byte command header
++*/
++
++/* TODO: ideally we shall always know how much we need
++** and this shall be 0 */
++#define BOGUS_SAFETY_PADDING 0x40
++
++#undef FUNC
++#define FUNC "issue_cmd"
++
++#if !ACX_DEBUG
++int
++acxusb_s_issue_cmd_timeo(
++ acx_device_t *adev,
++ unsigned cmd,
++ void *buffer,
++ unsigned buflen,
++ unsigned timeout)
++{
++#else
++int
++acxusb_s_issue_cmd_timeo_debug(
++ acx_device_t *adev,
++ unsigned cmd,
++ void *buffer,
++ unsigned buflen,
++ unsigned timeout,
++ const char* cmdstr)
++{
++#endif
++ /* USB ignores timeout param */
++
++ struct usb_device *usbdev;
++ struct {
++ u16 cmd;
++ u16 status;
++ u8 data[1];
++ } ACX_PACKED *loc;
++ const char *devname;
++ int acklen, blocklen, inpipe, outpipe;
++ int cmd_status;
++ int result;
++
++ FN_ENTER;
++
++ devname = adev->ndev->name;
++ /* no "wlan%%d: ..." please */
++ if (!devname || !devname[0] || devname[4]=='%')
++ devname = "acx";
++
++ log(L_CTL, FUNC"(cmd:%s,buflen:%u,type:0x%04X)\n",
++ cmdstr, buflen,
++ buffer ? le16_to_cpu(((acx_ie_generic_t *)buffer)->type) : -1);
++
++ loc = kmalloc(buflen + 4 + BOGUS_SAFETY_PADDING, GFP_KERNEL);
++ if (!loc) {
++ printk("%s: "FUNC"(): no memory for data buffer\n", devname);
++ goto bad;
++ }
++
++ /* get context from acx_device */
++ usbdev = adev->usbdev;
++
++ /* check which kind of command was issued */
++ loc->cmd = cpu_to_le16(cmd);
++ loc->status = 0;
++
++/* NB: buflen == frmlen + 4
++**
++** Interrogate: write 8 bytes: (cmd,status,rid,frmlen), then
++** read (cmd,status,rid,frmlen,data[frmlen]) back
++**
++** Configure: write (cmd,status,rid,frmlen,data[frmlen])
++**
++** Possibly bogus special handling of ACX1xx_IE_SCAN_STATUS removed
++*/
++
++ /* now write the parameters of the command if needed */
++ acklen = buflen + 4 + BOGUS_SAFETY_PADDING;
++ blocklen = buflen;
++ if (buffer && buflen) {
++ /* if it's an INTERROGATE command, just pass the length
++ * of parameters to read, as data */
++ if (cmd == ACX1xx_CMD_INTERROGATE) {
++ blocklen = 4;
++ acklen = buflen + 4;
++ }
++ memcpy(loc->data, buffer, blocklen);
++ }
++ blocklen += 4; /* account for cmd,status */
++
++ /* obtain the I/O pipes */
++ outpipe = usb_sndctrlpipe(usbdev, 0);
++ inpipe = usb_rcvctrlpipe(usbdev, 0);
++ log(L_CTL, "ctrl inpipe=0x%X outpipe=0x%X\n", inpipe, outpipe);
++ log(L_CTL, "sending USB control msg (out) (blocklen=%d)\n", blocklen);
++ if (acx_debug & L_DATA)
++ acx_dump_bytes(loc, blocklen);
++
++ result = usb_control_msg(usbdev, outpipe,
++ ACX_USB_REQ_CMD, /* request */
++ USB_TYPE_VENDOR|USB_DIR_OUT, /* requesttype */
++ 0, /* value */
++ 0, /* index */
++ loc, /* dataptr */
++ blocklen, /* size */
++ ACX_USB_CTRL_TIMEOUT /* timeout in ms */
++ );
++
++ if (result == -ENODEV) {
++ log(L_CTL, "no device present (unplug?)\n");
++ goto good;
++ }
++
++ log(L_CTL, "wrote %d bytes\n", result);
++ if (result < 0) {
++ goto bad;
++ }
++
++ /* check for device acknowledge */
++ log(L_CTL, "sending USB control msg (in) (acklen=%d)\n", acklen);
++ loc->status = 0; /* delete old status flag -> set to IDLE */
++ /* shall we zero out the rest? */
++ result = usb_control_msg(usbdev, inpipe,
++ ACX_USB_REQ_CMD, /* request */
++ USB_TYPE_VENDOR|USB_DIR_IN, /* requesttype */
++ 0, /* value */
++ 0, /* index */
++ loc, /* dataptr */
++ acklen, /* size */
++ ACX_USB_CTRL_TIMEOUT /* timeout in ms */
++ );
++ if (result < 0) {
++ printk("%s: "FUNC"(): USB read error %d\n", devname, result);
++ goto bad;
++ }
++ if (acx_debug & L_CTL) {
++ printk("read %d bytes: ", result);
++ acx_dump_bytes(loc, result);
++ }
++
++/*
++ check for result==buflen+4? Was seen:
++
++interrogate(type:ACX100_IE_DOT11_ED_THRESHOLD,len:4)
++issue_cmd(cmd:ACX1xx_CMD_INTERROGATE,buflen:8,type:4111)
++ctrl inpipe=0x80000280 outpipe=0x80000200
++sending USB control msg (out) (blocklen=8)
++01 00 00 00 0F 10 04 00
++wrote 8 bytes
++sending USB control msg (in) (acklen=12) sizeof(loc->data
++read 4 bytes <==== MUST BE 12!!
++*/
++
++ cmd_status = le16_to_cpu(loc->status);
++ if (cmd_status != 1) {
++ printk("%s: "FUNC"(): cmd_status is not SUCCESS: %d (%s)\n",
++ devname, cmd_status, acx_cmd_status_str(cmd_status));
++ /* TODO: goto bad; ? */
++ }
++ if ((cmd == ACX1xx_CMD_INTERROGATE) && buffer && buflen) {
++ memcpy(buffer, loc->data, buflen);
++ log(L_CTL, "response frame: cmd=0x%04X status=%d\n",
++ le16_to_cpu(loc->cmd),
++ cmd_status);
++ }
++good:
++ kfree(loc);
++ FN_EXIT1(OK);
++ return OK;
++bad:
++ /* Give enough info so that callers can avoid
++ ** printing their own diagnostic messages */
++#if ACX_DEBUG
++ printk("%s: "FUNC"(cmd:%s) FAILED\n", devname, cmdstr);
++#else
++ printk("%s: "FUNC"(cmd:0x%04X) FAILED\n", devname, cmd);
++#endif
++ dump_stack();
++ kfree(loc);
++ FN_EXIT1(NOT_OK);
++ return NOT_OK;
++}
++
++
++/***********************************************************************
++** acxusb_boot()
++** Inputs:
++** usbdev -> Pointer to kernel's usb_device structure
++**
++** Returns:
++** (int) Errorcode or 0 on success
++**
++** This function triggers the loading of the firmware image from harddisk
++** and then uploads the firmware to the USB device. After uploading the
++** firmware and transmitting the checksum, the device resets and appears
++** as a new device on the USB bus (the device we can finally deal with)
++*/
++static inline int
++acxusb_fw_needs_padding(firmware_image_t *fw_image, unsigned int usb_maxlen)
++{
++ unsigned int num_xfers = ((fw_image->size - 1) / usb_maxlen) + 1;
++
++ return ((num_xfers % 2) == 0);
++}
++
++static int
++acxusb_boot(struct usb_device *usbdev, int is_tnetw1450, int *radio_type)
++{
++ char filename[sizeof("tiacx1NNusbcRR")];
++
++ firmware_image_t *fw_image = NULL;
++ char *usbbuf;
++ unsigned int offset;
++ unsigned int blk_len, inpipe, outpipe;
++ u32 num_processed;
++ u32 img_checksum, sum;
++ u32 file_size;
++ int result = -EIO;
++ int i;
++
++ FN_ENTER;
++
++ /* dump_device(usbdev); */
++
++ usbbuf = kmalloc(USB_RWMEM_MAXLEN, GFP_KERNEL);
++ if (!usbbuf) {
++ printk(KERN_ERR "acx: no memory for USB transfer buffer (%d bytes)\n", USB_RWMEM_MAXLEN);
++ result = -ENOMEM;
++ goto end;
++ }
++ if (is_tnetw1450) {
++ /* Obtain the I/O pipes */
++ outpipe = usb_sndbulkpipe(usbdev, 1);
++ inpipe = usb_rcvbulkpipe(usbdev, 2);
++
++ printk(KERN_DEBUG "wait for device ready\n");
++ for (i = 0; i <= 2; i++) {
++ result = usb_bulk_msg(usbdev, inpipe,
++ usbbuf,
++ USB_RWMEM_MAXLEN,
++ &num_processed,
++ 2000
++ );
++
++ if ((*(u32 *)&usbbuf[4] == 0x40000001)
++ && (*(u16 *)&usbbuf[2] == 0x1)
++ && ((*(u16 *)usbbuf & 0x3fff) == 0)
++ && ((*(u16 *)usbbuf & 0xc000) == 0xc000))
++ break;
++ msleep(10);
++ }
++ if (i == 2)
++ goto fw_end;
++
++ *radio_type = usbbuf[8];
++ } else {
++ /* Obtain the I/O pipes */
++ outpipe = usb_sndctrlpipe(usbdev, 0);
++ inpipe = usb_rcvctrlpipe(usbdev, 0);
++
++ /* FIXME: shouldn't be hardcoded */
++ *radio_type = RADIO_MAXIM_0D;
++ }
++
++ snprintf(filename, sizeof(filename), "tiacx1%02dusbc%02X",
++ is_tnetw1450 * 11, *radio_type);
++
++ fw_image = acx_s_read_fw(&usbdev->dev, filename, &file_size);
++ if (!fw_image) {
++ result = -EIO;
++ goto end;
++ }
++ log(L_INIT, "firmware size: %d bytes\n", file_size);
++
++ img_checksum = le32_to_cpu(fw_image->chksum);
++
++ if (is_tnetw1450) {
++ u8 cmdbuf[20];
++ const u8 *p;
++ u8 need_padding;
++ u32 tmplen, val;
++
++ memset(cmdbuf, 0, 16);
++
++ need_padding = acxusb_fw_needs_padding(fw_image, USB_RWMEM_MAXLEN);
++ tmplen = need_padding ? file_size-4 : file_size-8;
++ *(u16 *)&cmdbuf[0] = 0xc000;
++ *(u16 *)&cmdbuf[2] = 0x000b;
++ *(u32 *)&cmdbuf[4] = tmplen;
++ *(u32 *)&cmdbuf[8] = file_size-8;
++ *(u32 *)&cmdbuf[12] = img_checksum;
++
++ result = usb_bulk_msg(usbdev, outpipe, cmdbuf, 16, &num_processed, HZ);
++ if (result < 0)
++ goto fw_end;
++
++ p = (const u8 *)&fw_image->size;
++
++ /* first calculate checksum for image size part */
++ sum = p[0]+p[1]+p[2]+p[3];
++ p += 4;
++
++ /* now continue checksum for firmware data part */
++ tmplen = le32_to_cpu(fw_image->size);
++ for (i = 0; i < tmplen /* image size */; i++) {
++ sum += *p++;
++ }
++
++ if (sum != le32_to_cpu(fw_image->chksum)) {
++ printk("acx: FATAL: firmware upload: "
++ "checksums don't match! "
++ "(0x%08x vs. 0x%08x)\n",
++ sum, fw_image->chksum);
++ goto fw_end;
++ }
++
++ offset = 8;
++ while (offset < file_size) {
++ blk_len = file_size - offset;
++ if (blk_len > USB_RWMEM_MAXLEN) {
++ blk_len = USB_RWMEM_MAXLEN;
++ }
++
++ log(L_INIT, "uploading firmware (%d bytes, offset=%d)\n",
++ blk_len, offset);
++ memcpy(usbbuf, ((u8 *)fw_image) + offset, blk_len);
++
++ p = usbbuf;
++ for (i = 0; i < blk_len; i += 4) {
++ *(u32 *)p = be32_to_cpu(*(u32 *)p);
++ p += 4;
++ }
++
++ result = usb_bulk_msg(usbdev, outpipe, usbbuf, blk_len, &num_processed, HZ);
++ if ((result < 0) || (num_processed != blk_len))
++ goto fw_end;
++ offset += blk_len;
++ }
++ if (need_padding) {
++ printk(KERN_DEBUG "send padding\n");
++ memset(usbbuf, 0, 4);
++ result = usb_bulk_msg(usbdev, outpipe, usbbuf, 4, &num_processed, HZ);
++ if ((result < 0) || (num_processed != 4))
++ goto fw_end;
++ }
++ printk(KERN_DEBUG "read firmware upload result\n");
++ memset(cmdbuf, 0, 20); /* additional memset */
++ result = usb_bulk_msg(usbdev, inpipe, cmdbuf, 20, &num_processed, 2000);
++ if (result < 0)
++ goto fw_end;
++ if (*(u32 *)&cmdbuf[4] == 0x40000003)
++ goto fw_end;
++ if (*(u32 *)&cmdbuf[4])
++ goto fw_end;
++ if (*(u16 *)&cmdbuf[16] != 1)
++ goto fw_end;
++
++ val = *(u32 *)&cmdbuf[0];
++ if ((val & 0x3fff)
++ || ((val & 0xc000) != 0xc000))
++ goto fw_end;
++
++ val = *(u32 *)&cmdbuf[8];
++ if (val & 2) {
++ result = usb_bulk_msg(usbdev, inpipe, cmdbuf, 20, &num_processed, 2000);
++ if (result < 0)
++ goto fw_end;
++ val = *(u32 *)&cmdbuf[8];
++ }
++ /* yup, no "else" here! */
++ if (val & 1) {
++ memset(usbbuf, 0, 4);
++ result = usb_bulk_msg(usbdev, outpipe, usbbuf, 4, &num_processed, HZ);
++ if ((result < 0) || (!num_processed))
++ goto fw_end;
++ }
++
++ printk("TNETW1450 firmware upload successful!\n");
++ result = 0;
++ goto end;
++fw_end:
++ result = -EIO;
++ goto end;
++ } else {
++ /* ACX100 USB */
++
++ /* now upload the firmware, slice the data into blocks */
++ offset = 8;
++ while (offset < file_size) {
++ blk_len = file_size - offset;
++ if (blk_len > USB_RWMEM_MAXLEN) {
++ blk_len = USB_RWMEM_MAXLEN;
++ }
++ log(L_INIT, "uploading firmware (%d bytes, offset=%d)\n",
++ blk_len, offset);
++ memcpy(usbbuf, ((u8 *)fw_image) + offset, blk_len);
++ result = usb_control_msg(usbdev, outpipe,
++ ACX_USB_REQ_UPLOAD_FW,
++ USB_TYPE_VENDOR|USB_DIR_OUT,
++ (file_size - 8) & 0xffff, /* value */
++ (file_size - 8) >> 16, /* index */
++ usbbuf, /* dataptr */
++ blk_len, /* size */
++ 3000 /* timeout in ms */
++ );
++ offset += blk_len;
++ if (result < 0) {
++ printk(KERN_ERR "acx: error %d during upload "
++ "of firmware, aborting\n", result);
++ goto end;
++ }
++ }
++
++ /* finally, send the checksum and reboot the device */
++ /* does this trigger the reboot? */
++ result = usb_control_msg(usbdev, outpipe,
++ ACX_USB_REQ_UPLOAD_FW,
++ USB_TYPE_VENDOR|USB_DIR_OUT,
++ img_checksum & 0xffff, /* value */
++ img_checksum >> 16, /* index */
++ NULL, /* dataptr */
++ 0, /* size */
++ 3000 /* timeout in ms */
++ );
++ if (result < 0) {
++ printk(KERN_ERR "acx: error %d during tx of checksum, "
++ "aborting\n", result);
++ goto end;
++ }
++ result = usb_control_msg(usbdev, inpipe,
++ ACX_USB_REQ_ACK_CS,
++ USB_TYPE_VENDOR|USB_DIR_IN,
++ img_checksum & 0xffff, /* value */
++ img_checksum >> 16, /* index */
++ usbbuf, /* dataptr */
++ 8, /* size */
++ 3000 /* timeout in ms */
++ );
++ if (result < 0) {
++ printk(KERN_ERR "acx: error %d during ACK of checksum, "
++ "aborting\n", result);
++ goto end;
++ }
++ if (*usbbuf != 0x10) {
++ printk(KERN_ERR "acx: invalid checksum?\n");
++ result = -EINVAL;
++ goto end;
++ }
++ result = 0;
++ }
++
++end:
++ vfree(fw_image);
++ kfree(usbbuf);
++
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/* FIXME: maybe merge it with usual eeprom reading, into common code? */
++static void
++acxusb_s_read_eeprom_version(acx_device_t *adev)
++{
++ u8 eeprom_ver[0x8];
++
++ memset(eeprom_ver, 0, sizeof(eeprom_ver));
++ acx_s_interrogate(adev, &eeprom_ver, ACX1FF_IE_EEPROM_VER);
++
++ /* FIXME: which one of those values to take? */
++ adev->eeprom_version = eeprom_ver[5];
++}
++
++
++/*
++ * temporary helper function to at least fill important cfgopt members with
++ * useful replacement values until we figure out how one manages to fetch
++ * the configoption struct in the USB device case...
++ */
++static int
++acxusb_s_fill_configoption(acx_device_t *adev)
++{
++ adev->cfgopt_probe_delay = 200;
++ adev->cfgopt_dot11CCAModes = 4;
++ adev->cfgopt_dot11Diversity = 1;
++ adev->cfgopt_dot11ShortPreambleOption = 1;
++ adev->cfgopt_dot11PBCCOption = 1;
++ adev->cfgopt_dot11ChannelAgility = 0;
++ adev->cfgopt_dot11PhyType = 5;
++ adev->cfgopt_dot11TempType = 1;
++ return OK;
++}
++
++
++/***********************************************************************
++** acxusb_e_probe()
++**
++** This function is invoked by the kernel's USB core whenever a new device is
++** attached to the system or the module is loaded. It is presented a usb_device
++** structure from which information regarding the device is obtained and evaluated.
++** In case this driver is able to handle one of the offered devices, it returns
++** a non-null pointer to a driver context and thereby claims the device.
++*/
++
++static void
++dummy_netdev_init(struct net_device *ndev) {}
++
++static int
++acxusb_e_probe(struct usb_interface *intf, const struct usb_device_id *devID)
++{
++ struct usb_device *usbdev = interface_to_usbdev(intf);
++ acx_device_t *adev = NULL;
++ struct net_device *ndev = NULL;
++ struct usb_config_descriptor *config;
++ struct usb_endpoint_descriptor *epdesc;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
++ struct usb_host_endpoint *ep;
++#endif
++ struct usb_interface_descriptor *ifdesc;
++ const char* msg;
++ int numconfigs, numfaces, numep;
++ int result = OK;
++ int i;
++ int radio_type;
++ /* this one needs to be more precise in case there appears a TNETW1450 from the same vendor */
++ int is_tnetw1450 = (usbdev->descriptor.idVendor != ACX100_VENDOR_ID);
++
++ FN_ENTER;
++
++ if (is_tnetw1450) {
++ /* Boot the device (i.e. upload the firmware) */
++ acxusb_boot(usbdev, is_tnetw1450, &radio_type);
++
++ /* TNETW1450-based cards will continue right away with
++ * the same USB ID after booting */
++ } else {
++ /* First check if this is the "unbooted" hardware */
++ if (usbdev->descriptor.idProduct == ACX100_PRODUCT_ID_UNBOOTED) {
++
++ /* Boot the device (i.e. upload the firmware) */
++ acxusb_boot(usbdev, is_tnetw1450, &radio_type);
++
++ /* DWL-120+ will first boot the firmware,
++ * then later have a *separate* probe() run
++ * since its USB ID will have changed after
++ * firmware boot!
++ * Since the first probe() run has no
++ * other purpose than booting the firmware,
++ * simply return immediately.
++ */
++ log(L_INIT, "finished booting, returning from probe()\n");
++ result = OK; /* success */
++ goto end;
++ }
++ else
++ /* device not unbooted, but invalid USB ID!? */
++ if (usbdev->descriptor.idProduct != ACX100_PRODUCT_ID_BOOTED)
++ goto end_nodev;
++ }
++
++/* Ok, so it's our device and it has already booted */
++
++ /* Allocate memory for a network device */
++
++ ndev = alloc_netdev(sizeof(*adev), "wlan%d", dummy_netdev_init);
++ /* (NB: memsets to 0 entire area) */
++ if (!ndev) {
++ msg = "acx: no memory for netdev\n";
++ goto end_nomem;
++ }
++
++ /* Register the callbacks for the network device functions */
++
++ ether_setup(ndev);
++ ndev->open = &acxusb_e_open;
++ ndev->stop = &acxusb_e_close;
++ ndev->hard_start_xmit = (void *)&acx_i_start_xmit;
++ ndev->get_stats = (void *)&acx_e_get_stats;
++#if IW_HANDLER_VERSION <= 5
++ ndev->get_wireless_stats = (void *)&acx_e_get_wireless_stats;
++#endif
++ ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def;
++ ndev->set_multicast_list = (void *)&acxusb_i_set_rx_mode;
++#ifdef HAVE_TX_TIMEOUT
++ ndev->tx_timeout = &acxusb_i_tx_timeout;
++ ndev->watchdog_timeo = 4 * HZ;
++#endif
++ ndev->change_mtu = &acx_e_change_mtu;
++ SET_MODULE_OWNER(ndev);
++
++ /* Setup private driver context */
++
++ adev = ndev2adev(ndev);
++ adev->ndev = ndev;
++
++ adev->dev_type = DEVTYPE_USB;
++ adev->radio_type = radio_type;
++ if (is_tnetw1450) {
++ /* well, actually it's a TNETW1450, but since it
++ * seems to be sufficiently similar to TNETW1130,
++ * I don't want to change large amounts of code now */
++ adev->chip_type = CHIPTYPE_ACX111;
++ } else {
++ adev->chip_type = CHIPTYPE_ACX100;
++ }
++
++ adev->usbdev = usbdev;
++ spin_lock_init(&adev->lock); /* initial state: unlocked */
++ sema_init(&adev->sem, 1); /* initial state: 1 (upped) */
++
++ /* Check that this is really the hardware we know about.
++ ** If not sure, at least notify the user that he
++ ** may be in trouble...
++ */
++ numconfigs = (int)usbdev->descriptor.bNumConfigurations;
++ if (numconfigs != 1)
++ printk("acx: number of configurations is %d, "
++ "this driver only knows how to handle 1, "
++ "be prepared for surprises\n", numconfigs);
++
++ config = &usbdev->config->desc;
++ numfaces = config->bNumInterfaces;
++ if (numfaces != 1)
++ printk("acx: number of interfaces is %d, "
++ "this driver only knows how to handle 1, "
++ "be prepared for surprises\n", numfaces);
++
++ ifdesc = &intf->altsetting->desc;
++ numep = ifdesc->bNumEndpoints;
++ log(L_DEBUG, "# of endpoints: %d\n", numep);
++
++ if (is_tnetw1450) {
++ adev->bulkoutep = 1;
++ adev->bulkinep = 2;
++ } else {
++ /* obtain information about the endpoint
++ ** addresses, begin with some default values
++ */
++ adev->bulkoutep = 1;
++ adev->bulkinep = 1;
++ for (i = 0; i < numep; i++) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
++ ep = usbdev->ep_in[i];
++ if (!ep)
++ continue;
++ epdesc = &ep->desc;
++#else
++ epdesc = usb_epnum_to_ep_desc(usbdev, i);
++ if (!epdesc)
++ continue;
++#endif
++ if (epdesc->bmAttributes & USB_ENDPOINT_XFER_BULK) {
++ if (epdesc->bEndpointAddress & 0x80)
++ adev->bulkinep = epdesc->bEndpointAddress & 0xF;
++ else
++ adev->bulkoutep = epdesc->bEndpointAddress & 0xF;
++ }
++ }
++ }
++ log(L_DEBUG, "bulkout ep: 0x%X\n", adev->bulkoutep);
++ log(L_DEBUG, "bulkin ep: 0x%X\n", adev->bulkinep);
++
++ /* already done by memset: adev->rxtruncsize = 0; */
++ log(L_DEBUG, "TXBUFSIZE=%d RXBUFSIZE=%d\n",
++ (int) TXBUFSIZE, (int) RXBUFSIZE);
++
++ /* Allocate the RX/TX containers. */
++ adev->usb_tx = kmalloc(sizeof(usb_tx_t) * ACX_TX_URB_CNT, GFP_KERNEL);
++ if (!adev->usb_tx) {
++ msg = "acx: no memory for tx container";
++ goto end_nomem;
++ }
++ adev->usb_rx = kmalloc(sizeof(usb_rx_t) * ACX_RX_URB_CNT, GFP_KERNEL);
++ if (!adev->usb_rx) {
++ msg = "acx: no memory for rx container";
++ goto end_nomem;
++ }
++
++ /* Setup URBs for bulk-in/out messages */
++ for (i = 0; i < ACX_RX_URB_CNT; i++) {
++ adev->usb_rx[i].urb = usb_alloc_urb(0, GFP_KERNEL);
++ if (!adev->usb_rx[i].urb) {
++ msg = "acx: no memory for input URB\n";
++ goto end_nomem;
++ }
++ adev->usb_rx[i].urb->status = 0;
++ adev->usb_rx[i].adev = adev;
++ adev->usb_rx[i].busy = 0;
++ }
++
++ for (i = 0; i< ACX_TX_URB_CNT; i++) {
++ adev->usb_tx[i].urb = usb_alloc_urb(0, GFP_KERNEL);
++ if (!adev->usb_tx[i].urb) {
++ msg = "acx: no memory for output URB\n";
++ goto end_nomem;
++ }
++ adev->usb_tx[i].urb->status = 0;
++ adev->usb_tx[i].adev = adev;
++ adev->usb_tx[i].busy = 0;
++ }
++ adev->tx_free = ACX_TX_URB_CNT;
++
++ usb_set_intfdata(intf, adev);
++ SET_NETDEV_DEV(ndev, &intf->dev);
++
++ /* TODO: move all of fw cmds to open()? But then we won't know our MAC addr
++ until ifup (it's available via reading ACX1xx_IE_DOT11_STATION_ID)... */
++
++ /* put acx out of sleep mode and initialize it */
++ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
++
++ result = acx_s_init_mac(adev);
++ if (result)
++ goto end;
++
++ /* TODO: see similar code in pci.c */
++ acxusb_s_read_eeprom_version(adev);
++ acxusb_s_fill_configoption(adev);
++ acx_s_set_defaults(adev);
++ acx_s_get_firmware_version(adev);
++ acx_display_hardware_details(adev);
++
++ /* Register the network device */
++ log(L_INIT, "registering network device\n");
++ result = register_netdev(ndev);
++ if (result) {
++ msg = "acx: failed to register USB network device "
++ "(error %d)\n";
++ goto end_nomem;
++ }
++
++ acx_proc_register_entries(ndev);
++
++ acx_stop_queue(ndev, "on probe");
++ acx_carrier_off(ndev, "on probe");
++
++ printk("acx: USB module " ACX_RELEASE " loaded successfully\n");
++
++#if CMD_DISCOVERY
++ great_inquisitor(adev);
++#endif
++
++ /* Everything went OK, we are happy now */
++ result = OK;
++ goto end;
++
++end_nomem:
++ printk(msg, result);
++
++ if (ndev) {
++ if (adev->usb_rx) {
++ for (i = 0; i < ACX_RX_URB_CNT; i++)
++ usb_free_urb(adev->usb_rx[i].urb);
++ kfree(adev->usb_rx);
++ }
++ if (adev->usb_tx) {
++ for (i = 0; i < ACX_TX_URB_CNT; i++)
++ usb_free_urb(adev->usb_tx[i].urb);
++ kfree(adev->usb_tx);
++ }
++ free_netdev(ndev);
++ }
++
++ result = -ENOMEM;
++ goto end;
++
++end_nodev:
++ /* no device we could handle, return error. */
++ result = -EIO;
++
++end:
++ FN_EXIT1(result);
++ return result;
++}
++
++
++/***********************************************************************
++** acxusb_e_disconnect()
++**
++** This function is invoked whenever the user pulls the plug from the USB
++** device or the module is removed from the kernel. In these cases, the
++** network devices have to be taken down and all allocated memory has
++** to be freed.
++*/
++static void
++acxusb_e_disconnect(struct usb_interface *intf)
++{
++ acx_device_t *adev = usb_get_intfdata(intf);
++ unsigned long flags;
++ int i;
++
++ FN_ENTER;
++
++ /* No WLAN device... no sense */
++ if (!adev)
++ goto end;
++
++ /* Unregister network device
++ *
++ * If the interface is up, unregister_netdev() will take
++ * care of calling our close() function, which takes
++ * care of unlinking the urbs, sending the device to
++ * sleep, etc...
++ * This can't be called with sem or lock held because
++ * _close() will try to grab it as well if it's called,
++ * deadlocking the machine.
++ */
++ unregister_netdev(adev->ndev);
++
++ acx_sem_lock(adev);
++ acx_lock(adev, flags);
++ /* This device exists no more */
++ usb_set_intfdata(intf, NULL);
++ acx_proc_unregister_entries(adev->ndev);
++
++ /*
++ * Here we only free them. _close() took care of
++ * unlinking them.
++ */
++ for (i = 0; i < ACX_RX_URB_CNT; ++i) {
++ usb_free_urb(adev->usb_rx[i].urb);
++ }
++ for (i = 0; i< ACX_TX_URB_CNT; ++i) {
++ usb_free_urb(adev->usb_tx[i].urb);
++ }
++
++ /* Freeing containers */
++ kfree(adev->usb_rx);
++ kfree(adev->usb_tx);
++
++ acx_unlock(adev, flags);
++ acx_sem_unlock(adev);
++
++ free_netdev(adev->ndev);
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxusb_e_open()
++** This function is called when the user sets up the network interface.
++** It initializes a management timer, sets up the USB card and starts
++** the network tx queue and USB receive.
++*/
++static int
++acxusb_e_open(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ int i;
++
++ FN_ENTER;
++
++ acx_sem_lock(adev);
++
++ /* put the ACX100 out of sleep mode */
++ acx_s_issue_cmd(adev, ACX1xx_CMD_WAKE, NULL, 0);
++
++ acx_init_task_scheduler(adev);
++
++ init_timer(&adev->mgmt_timer);
++ adev->mgmt_timer.function = acx_i_timer;
++ adev->mgmt_timer.data = (unsigned long)adev;
++
++ /* acx_s_start needs it */
++ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
++ acx_s_start(adev);
++
++ /* don't acx_start_queue() here, we need to associate first */
++
++ acx_lock(adev, flags);
++ for (i = 0; i < ACX_RX_URB_CNT; i++) {
++ adev->usb_rx[i].urb->status = 0;
++ }
++
++ acxusb_l_poll_rx(adev, &adev->usb_rx[0]);
++
++ acx_unlock(adev, flags);
++
++ acx_sem_unlock(adev);
++
++ FN_EXIT0;
++ return 0;
++}
++
++
++/***********************************************************************
++** acxusb_e_close()
++**
++** This function stops the network functionality of the interface (invoked
++** when the user calls ifconfig <wlan> down). The tx queue is halted and
++** the device is marked as down. In case there were any pending USB bulk
++** transfers, these are unlinked (asynchronously). The module in-use count
++** is also decreased in this function.
++*/
++static int
++acxusb_e_close(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ int i;
++
++ FN_ENTER;
++
++#ifdef WE_STILL_DONT_CARE_ABOUT_IT
++ /* Transmit a disassociate frame */
++ lock
++ acx_l_transmit_disassoc(adev, &client);
++ unlock
++#endif
++
++ acx_sem_lock(adev);
++
++ CLEAR_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP);
++
++/* Code below is remarkably similar to acxpci_s_down(). Maybe we can merge them? */
++
++ /* Make sure we don't get any more rx requests */
++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_RX, NULL, 0);
++ acx_s_issue_cmd(adev, ACX1xx_CMD_DISABLE_TX, NULL, 0);
++
++ /*
++ * We must do FLUSH *without* holding sem to avoid a deadlock.
++ * See pci.c:acxpci_s_down() for deails.
++ */
++ acx_sem_unlock(adev);
++ FLUSH_SCHEDULED_WORK();
++ acx_sem_lock(adev);
++
++ /* Power down the device */
++ acx_s_issue_cmd(adev, ACX1xx_CMD_SLEEP, NULL, 0);
++
++ /* Stop the transmit queue, mark the device as DOWN */
++ acx_lock(adev, flags);
++ acx_stop_queue(ndev, "on ifdown");
++ acx_set_status(adev, ACX_STATUS_0_STOPPED);
++ /* stop pending rx/tx urb transfers */
++ for (i = 0; i < ACX_TX_URB_CNT; i++) {
++ acxusb_unlink_urb(adev->usb_tx[i].urb);
++ adev->usb_tx[i].busy = 0;
++ }
++ for (i = 0; i < ACX_RX_URB_CNT; i++) {
++ acxusb_unlink_urb(adev->usb_rx[i].urb);
++ adev->usb_rx[i].busy = 0;
++ }
++ adev->tx_free = ACX_TX_URB_CNT;
++ acx_unlock(adev, flags);
++
++ /* Must do this outside of lock */
++ del_timer_sync(&adev->mgmt_timer);
++
++ acx_sem_unlock(adev);
++
++ FN_EXIT0;
++ return 0;
++}
++
++
++/***********************************************************************
++** acxusb_l_poll_rx
++** This function (re)initiates a bulk-in USB transfer on a given urb
++*/
++static void
++acxusb_l_poll_rx(acx_device_t *adev, usb_rx_t* rx)
++{
++ struct usb_device *usbdev;
++ struct urb *rxurb;
++ int errcode, rxnum;
++ unsigned int inpipe;
++
++ FN_ENTER;
++
++ rxurb = rx->urb;
++ usbdev = adev->usbdev;
++
++ rxnum = rx - adev->usb_rx;
++
++ inpipe = usb_rcvbulkpipe(usbdev, adev->bulkinep);
++ if (unlikely(rxurb->status == -EINPROGRESS)) {
++ printk(KERN_ERR "acx: error, rx triggered while rx urb in progress\n");
++ /* FIXME: this is nasty, receive is being cancelled by this code
++ * on the other hand, this should not happen anyway...
++ */
++ usb_unlink_urb(rxurb);
++ } else
++ if (unlikely(rxurb->status == -ECONNRESET)) {
++ log(L_USBRXTX, "acx_usb: _poll_rx: connection reset\n");
++ goto end;
++ }
++ rxurb->actual_length = 0;
++ usb_fill_bulk_urb(rxurb, usbdev, inpipe,
++ &rx->bulkin, /* dataptr */
++ RXBUFSIZE, /* size */
++ acxusb_i_complete_rx, /* handler */
++ rx /* handler param */
++ );
++ rxurb->transfer_flags = URB_ASYNC_UNLINK;
++
++ /* ATOMIC: we may be called from complete_rx() usb callback */
++ errcode = usb_submit_urb(rxurb, GFP_ATOMIC);
++ /* FIXME: evaluate the error code! */
++ log(L_USBRXTX, "SUBMIT RX (%d) inpipe=0x%X size=%d errcode=%d\n",
++ rxnum, inpipe, (int) RXBUFSIZE, errcode);
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxusb_i_complete_rx()
++** Inputs:
++** urb -> pointer to USB request block
++** regs -> pointer to register-buffer for syscalls (see asm/ptrace.h)
++**
++** This function is invoked by USB subsystem whenever a bulk receive
++** request returns.
++** The received data is then committed to the network stack and the next
++** USB receive is triggered.
++*/
++static void
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++acxusb_i_complete_rx(struct urb *urb)
++#else
++acxusb_i_complete_rx(struct urb *urb, struct pt_regs *regs)
++#endif
++{
++ acx_device_t *adev;
++ rxbuffer_t *ptr;
++ rxbuffer_t *inbuf;
++ usb_rx_t *rx;
++ unsigned long flags;
++ int size, remsize, packetsize, rxnum;
++
++ FN_ENTER;
++
++ BUG_ON(!urb->context);
++
++ rx = (usb_rx_t *)urb->context;
++ adev = rx->adev;
++
++ acx_lock(adev, flags);
++
++ /*
++ * Happens on disconnect or close. Don't play with the urb.
++ * Don't resubmit it. It will get unlinked by close()
++ */
++ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) {
++ log(L_USBRXTX, "rx: device is down, not doing anything\n");
++ goto end_unlock;
++ }
++
++ inbuf = &rx->bulkin;
++ size = urb->actual_length;
++ remsize = size;
++ rxnum = rx - adev->usb_rx;
++
++ log(L_USBRXTX, "RETURN RX (%d) status=%d size=%d\n",
++ rxnum, urb->status, size);
++
++ /* Send the URB that's waiting. */
++ log(L_USBRXTX, "rxnum=%d, sending=%d\n", rxnum, rxnum^1);
++ acxusb_l_poll_rx(adev, &adev->usb_rx[rxnum^1]);
++
++ if (unlikely(size > sizeof(rxbuffer_t)))
++ printk("acx_usb: rx too large: %d, please report\n", size);
++
++ /* check if the transfer was aborted */
++ switch (urb->status) {
++ case 0: /* No error */
++ break;
++ case -EOVERFLOW:
++ printk(KERN_ERR "acx: rx data overrun\n");
++ adev->rxtruncsize = 0; /* Not valid anymore. */
++ goto end_unlock;
++ case -ECONNRESET:
++ adev->rxtruncsize = 0;
++ goto end_unlock;
++ case -ESHUTDOWN: /* rmmod */
++ adev->rxtruncsize = 0;
++ goto end_unlock;
++ default:
++ adev->rxtruncsize = 0;
++ adev->stats.rx_errors++;
++ printk("acx: rx error (urb status=%d)\n", urb->status);
++ goto end_unlock;
++ }
++
++ if (unlikely(!size))
++ printk("acx: warning, encountered zerolength rx packet\n");
++
++ if (urb->transfer_buffer != inbuf)
++ goto end_unlock;
++
++ /* check if previous frame was truncated
++ ** FIXME: this code can only handle truncation
++ ** of consecutive packets!
++ */
++ ptr = inbuf;
++ if (adev->rxtruncsize) {
++ int tail_size;
++
++ ptr = &adev->rxtruncbuf;
++ packetsize = RXBUF_BYTES_USED(ptr);
++ if (acx_debug & L_USBRXTX) {
++ printk("handling truncated frame (truncsize=%d size=%d "
++ "packetsize(from trunc)=%d)\n",
++ adev->rxtruncsize, size, packetsize);
++ acx_dump_bytes(ptr, RXBUF_HDRSIZE);
++ acx_dump_bytes(inbuf, RXBUF_HDRSIZE);
++ }
++
++ /* bytes needed for rxtruncbuf completion: */
++ tail_size = packetsize - adev->rxtruncsize;
++
++ if (size < tail_size) {
++ /* there is not enough data to complete this packet,
++ ** simply append the stuff to the truncation buffer
++ */
++ memcpy(((char *)ptr) + adev->rxtruncsize, inbuf, size);
++ adev->rxtruncsize += size;
++ remsize = 0;
++ } else {
++ /* ok, this data completes the previously
++ ** truncated packet. copy it into a descriptor
++ ** and give it to the rest of the stack */
++
++ /* append tail to previously truncated part
++ ** NB: adev->rxtruncbuf (pointed to by ptr) can't
++ ** overflow because this is already checked before
++ ** truncation buffer was filled. See below,
++ ** "if (packetsize > sizeof(rxbuffer_t))..." code */
++ memcpy(((char *)ptr) + adev->rxtruncsize, inbuf, tail_size);
++
++ if (acx_debug & L_USBRXTX) {
++ printk("full trailing packet + 12 bytes:\n");
++ acx_dump_bytes(inbuf, tail_size + RXBUF_HDRSIZE);
++ }
++ acx_l_process_rxbuf(adev, ptr);
++ adev->rxtruncsize = 0;
++ ptr = (rxbuffer_t *) (((char *)inbuf) + tail_size);
++ remsize -= tail_size;
++ }
++ log(L_USBRXTX, "post-merge size=%d remsize=%d\n",
++ size, remsize);
++ }
++
++ /* size = USB data block size
++ ** remsize = unprocessed USB bytes left
++ ** ptr = current pos in USB data block
++ */
++ while (remsize) {
++ if (remsize < RXBUF_HDRSIZE) {
++ printk("acx: truncated rx header (%d bytes)!\n",
++ remsize);
++ if (ACX_DEBUG)
++ acx_dump_bytes(ptr, remsize);
++ break;
++ }
++
++ packetsize = RXBUF_BYTES_USED(ptr);
++ log(L_USBRXTX, "packet with packetsize=%d\n", packetsize);
++
++ if (RXBUF_IS_TXSTAT(ptr)) {
++ /* do rate handling */
++ usb_txstatus_t *stat = (void*)ptr;
++ u16 client_no = (u16)stat->hostdata;
++
++ log(L_USBRXTX, "tx: stat: mac_cnt_rcvd:%04X "
++ "queue_index:%02X mac_status:%02X hostdata:%08X "
++ "rate:%u ack_failures:%02X rts_failures:%02X "
++ "rts_ok:%02X\n",
++ stat->mac_cnt_rcvd,
++ stat->queue_index, stat->mac_status, stat->hostdata,
++ stat->rate, stat->ack_failures, stat->rts_failures,
++ stat->rts_ok);
++
++ if (adev->rate_auto && client_no < VEC_SIZE(adev->sta_list)) {
++ client_t *clt = &adev->sta_list[client_no];
++ u16 cur = stat->hostdata >> 16;
++
++ if (clt && clt->rate_cur == cur) {
++ acx_l_handle_txrate_auto(adev, clt,
++ cur, /* intended rate */
++ stat->rate, 0, /* actually used rate */
++ stat->mac_status, /* error? */
++ ACX_TX_URB_CNT - adev->tx_free);
++ }
++ }
++ goto next;
++ }
++
++ if (packetsize > sizeof(rxbuffer_t)) {
++ printk("acx: packet exceeds max wlan "
++ "frame size (%d > %d). size=%d\n",
++ packetsize, (int) sizeof(rxbuffer_t), size);
++ if (ACX_DEBUG)
++ acx_dump_bytes(ptr, 16);
++ /* FIXME: put some real error-handling in here! */
++ break;
++ }
++
++ if (packetsize > remsize) {
++ /* frame truncation handling */
++ if (acx_debug & L_USBRXTX) {
++ printk("need to truncate packet, "
++ "packetsize=%d remsize=%d "
++ "size=%d bytes:",
++ packetsize, remsize, size);
++ acx_dump_bytes(ptr, RXBUF_HDRSIZE);
++ }
++ memcpy(&adev->rxtruncbuf, ptr, remsize);
++ adev->rxtruncsize = remsize;
++ break;
++ }
++
++ /* packetsize <= remsize */
++ /* now handle the received data */
++ acx_l_process_rxbuf(adev, ptr);
++next:
++ ptr = (rxbuffer_t *)(((char *)ptr) + packetsize);
++ remsize -= packetsize;
++ if ((acx_debug & L_USBRXTX) && remsize) {
++ printk("more than one packet in buffer, "
++ "second packet hdr:");
++ acx_dump_bytes(ptr, RXBUF_HDRSIZE);
++ }
++ }
++
++end_unlock:
++ acx_unlock(adev, flags);
++/* end: */
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++** acxusb_i_complete_tx()
++** Inputs:
++** urb -> pointer to USB request block
++** regs -> pointer to register-buffer for syscalls (see asm/ptrace.h)
++**
++** This function is invoked upon termination of a USB transfer.
++*/
++static void
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
++acxusb_i_complete_tx(struct urb *urb)
++#else
++acxusb_i_complete_tx(struct urb *urb, struct pt_regs *regs)
++#endif
++{
++ acx_device_t *adev;
++ usb_tx_t *tx;
++ unsigned long flags;
++ int txnum;
++
++ FN_ENTER;
++
++ BUG_ON(!urb->context);
++
++ tx = (usb_tx_t *)urb->context;
++ adev = tx->adev;
++
++ txnum = tx - adev->usb_tx;
++
++ acx_lock(adev, flags);
++
++ /*
++ * If the iface isn't up, we don't have any right
++ * to play with them. The urb may get unlinked.
++ */
++ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) {
++ log(L_USBRXTX, "tx: device is down, not doing anything\n");
++ goto end_unlock;
++ }
++
++ log(L_USBRXTX, "RETURN TX (%d): status=%d size=%d\n",
++ txnum, urb->status, urb->actual_length);
++
++ /* handle USB transfer errors */
++ switch (urb->status) {
++ case 0: /* No error */
++ break;
++ case -ESHUTDOWN:
++ goto end_unlock;
++ break;
++ case -ECONNRESET:
++ goto end_unlock;
++ break;
++ /* FIXME: real error-handling code here please */
++ default:
++ printk(KERN_ERR "acx: tx error, urb status=%d\n", urb->status);
++ /* FIXME: real error-handling code here please */
++ }
++
++ /* free the URB and check for more data */
++ tx->busy = 0;
++ adev->tx_free++;
++ if ((adev->tx_free >= TX_START_QUEUE)
++ && (adev->status == ACX_STATUS_4_ASSOCIATED)
++ && (acx_queue_stopped(adev->ndev))
++ ) {
++ log(L_BUF, "tx: wake queue (%u free txbufs)\n",
++ adev->tx_free);
++ acx_wake_queue(adev->ndev, NULL);
++ }
++
++end_unlock:
++ acx_unlock(adev, flags);
++/* end: */
++ FN_EXIT0;
++}
++
++
++/***************************************************************
++** acxusb_l_alloc_tx
++** Actually returns a usb_tx_t* ptr
++*/
++tx_t*
++acxusb_l_alloc_tx(acx_device_t *adev)
++{
++ usb_tx_t *tx;
++ unsigned head;
++
++ FN_ENTER;
++
++ head = adev->tx_head;
++ do {
++ head = (head + 1) % ACX_TX_URB_CNT;
++ if (!adev->usb_tx[head].busy) {
++ log(L_USBRXTX, "allocated tx %d\n", head);
++ tx = &adev->usb_tx[head];
++ tx->busy = 1;
++ adev->tx_free--;
++ /* Keep a few free descs between head and tail of tx ring.
++ ** It is not absolutely needed, just feels safer */
++ if (adev->tx_free < TX_STOP_QUEUE) {
++ log(L_BUF, "tx: stop queue "
++ "(%u free txbufs)\n", adev->tx_free);
++ acx_stop_queue(adev->ndev, NULL);
++ }
++ goto end;
++ }
++ } while (likely(head!=adev->tx_head));
++ tx = NULL;
++ printk_ratelimited("acx: tx buffers full\n");
++end:
++ adev->tx_head = head;
++ FN_EXIT0;
++ return (tx_t*)tx;
++}
++
++
++/***************************************************************
++** Used if alloc_tx()'ed buffer needs to be cancelled without doing tx
++*/
++void
++acxusb_l_dealloc_tx(tx_t *tx_opaque)
++{
++ usb_tx_t* tx = (usb_tx_t*)tx_opaque;
++ tx->busy = 0;
++}
++
++
++/***************************************************************
++*/
++void*
++acxusb_l_get_txbuf(acx_device_t *adev, tx_t* tx_opaque)
++{
++ usb_tx_t* tx = (usb_tx_t*)tx_opaque;
++ return &tx->bulkout.data;
++}
++
++
++/***************************************************************
++** acxusb_l_tx_data
++**
++** Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx).
++** Can be called from acx_i_start_xmit (data frames from net core).
++*/
++void
++acxusb_l_tx_data(acx_device_t *adev, tx_t* tx_opaque, int wlanpkt_len)
++{
++ struct usb_device *usbdev;
++ struct urb* txurb;
++ usb_tx_t* tx;
++ usb_txbuffer_t* txbuf;
++ client_t *clt;
++ wlan_hdr_t* whdr;
++ unsigned int outpipe;
++ int ucode, txnum;
++
++ FN_ENTER;
++
++ tx = ((usb_tx_t *)tx_opaque);
++ txurb = tx->urb;
++ txbuf = &tx->bulkout;
++ whdr = (wlan_hdr_t *)txbuf->data;
++ txnum = tx - adev->usb_tx;
++
++ log(L_DEBUG, "using buf#%d free=%d len=%d\n",
++ txnum, adev->tx_free, wlanpkt_len);
++
++ switch (adev->mode) {
++ case ACX_MODE_0_ADHOC:
++ case ACX_MODE_3_AP:
++ clt = acx_l_sta_list_get(adev, whdr->a1);
++ break;
++ case ACX_MODE_2_STA:
++ clt = adev->ap_client;
++ break;
++ default: /* ACX_MODE_OFF, ACX_MODE_MONITOR */
++ clt = NULL;
++ break;
++ }
++
++ if (unlikely(clt && !clt->rate_cur)) {
++ printk("acx: driver bug! bad ratemask\n");
++ goto end;
++ }
++
++ /* fill the USB transfer header */
++ txbuf->desc = cpu_to_le16(USB_TXBUF_TXDESC);
++ txbuf->mpdu_len = cpu_to_le16(wlanpkt_len);
++ txbuf->queue_index = 1;
++ if (clt) {
++ txbuf->rate = clt->rate_100;
++ txbuf->hostdata = (clt - adev->sta_list) | (clt->rate_cur << 16);
++ } else {
++ txbuf->rate = adev->rate_bcast100;
++ txbuf->hostdata = ((u16)-1) | (adev->rate_bcast << 16);
++ }
++ txbuf->ctrl1 = DESC_CTL_FIRSTFRAG;
++ if (1 == adev->preamble_cur)
++ SET_BIT(txbuf->ctrl1, DESC_CTL_SHORT_PREAMBLE);
++ txbuf->ctrl2 = 0;
++ txbuf->data_len = cpu_to_le16(wlanpkt_len);
++
++ if (unlikely(acx_debug & L_DATA)) {
++ printk("dump of bulk out urb:\n");
++ acx_dump_bytes(txbuf, wlanpkt_len + USB_TXBUF_HDRSIZE);
++ }
++
++ if (unlikely(txurb->status == -EINPROGRESS)) {
++ printk("acx: trying to submit tx urb while already in progress\n");
++ }
++
++ /* now schedule the USB transfer */
++ usbdev = adev->usbdev;
++ outpipe = usb_sndbulkpipe(usbdev, adev->bulkoutep);
++
++ usb_fill_bulk_urb(txurb, usbdev, outpipe,
++ txbuf, /* dataptr */
++ wlanpkt_len + USB_TXBUF_HDRSIZE, /* size */
++ acxusb_i_complete_tx, /* handler */
++ tx /* handler param */
++ );
++
++ txurb->transfer_flags = URB_ASYNC_UNLINK|URB_ZERO_PACKET;
++ ucode = usb_submit_urb(txurb, GFP_ATOMIC);
++ log(L_USBRXTX, "SUBMIT TX (%d): outpipe=0x%X buf=%p txsize=%d "
++ "rate=%u errcode=%d\n", txnum, outpipe, txbuf,
++ wlanpkt_len + USB_TXBUF_HDRSIZE, txbuf->rate, ucode);
++
++ if (unlikely(ucode)) {
++ printk(KERN_ERR "acx: submit_urb() error=%d txsize=%d\n",
++ ucode, wlanpkt_len + USB_TXBUF_HDRSIZE);
++
++ /* on error, just mark the frame as done and update
++ ** the statistics
++ */
++ adev->stats.tx_errors++;
++ tx->busy = 0;
++ adev->tx_free++;
++ /* needed? if (adev->tx_free > TX_START_QUEUE) acx_wake_queue(...) */
++ }
++end:
++ FN_EXIT0;
++}
++
++
++/***********************************************************************
++*/
++static void
++acxusb_i_set_rx_mode(struct net_device *ndev)
++{
++}
++
++
++/***********************************************************************
++*/
++#ifdef HAVE_TX_TIMEOUT
++static void
++acxusb_i_tx_timeout(struct net_device *ndev)
++{
++ acx_device_t *adev = ndev2adev(ndev);
++ unsigned long flags;
++ int i;
++
++ FN_ENTER;
++
++ acx_lock(adev, flags);
++ /* unlink the URBs */
++ for (i = 0; i < ACX_TX_URB_CNT; i++) {
++ acxusb_unlink_urb(adev->usb_tx[i].urb);
++ adev->usb_tx[i].busy = 0;
++ }
++ adev->tx_free = ACX_TX_URB_CNT;
++ /* TODO: stats update */
++ acx_unlock(adev, flags);
++
++ FN_EXIT0;
++}
++#endif
++
++
++/***********************************************************************
++** init_module()
++**
++** This function is invoked upon loading of the kernel module.
++** It registers itself at the kernel's USB subsystem.
++**
++** Returns: Errorcode on failure, 0 on success
++*/
++int __init
++acxusb_e_init_module(void)
++{
++ log(L_INIT, "USB module " ACX_RELEASE " initialized, "
++ "probing for devices...\n");
++ return usb_register(&acxusb_driver);
++}
++
++
++
++/***********************************************************************
++** cleanup_module()
++**
++** This function is invoked as last step of the module unloading. It simply
++** deregisters this module at the kernel's USB subsystem.
++*/
++void __exit
++acxusb_e_cleanup_module()
++{
++ usb_deregister(&acxusb_driver);
++}
++
++
++/***********************************************************************
++** DEBUG STUFF
++*/
++#if ACX_DEBUG
++
++#ifdef UNUSED
++static void
++dump_device(struct usb_device *usbdev)
++{
++ int i;
++ struct usb_config_descriptor *cd;
++
++ printk("acx device dump:\n");
++ printk(" devnum: %d\n", usbdev->devnum);
++ printk(" speed: %d\n", usbdev->speed);
++ printk(" tt: 0x%X\n", (unsigned int)(usbdev->tt));
++ printk(" ttport: %d\n", (unsigned int)(usbdev->ttport));
++ printk(" toggle[0]: 0x%X toggle[1]: 0x%X\n", (unsigned int)(usbdev->toggle[0]), (unsigned int)(usbdev->toggle[1]));
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
++ /* This saw a change after 2.6.10 */
++ printk(" ep_in wMaxPacketSize: ");
++ for (i = 0; i < 16; ++i)
++ if (usbdev->ep_in[i] != NULL)
++ printk("%d:%d ", i, usbdev->ep_in[i]->desc.wMaxPacketSize);
++ printk("\n");
++ printk(" ep_out wMaxPacketSize: ");
++ for (i = 0; i < VEC_SIZE(usbdev->ep_out); ++i)
++ if (usbdev->ep_out[i] != NULL)
++ printk("%d:%d ", i, usbdev->ep_out[i]->desc.wMaxPacketSize);
++ printk("\n");
++#else
++ printk(" epmaxpacketin: ");
++ for (i = 0; i < 16; i++)
++ printk("%d ", usbdev->epmaxpacketin[i]);
++ printk("\n");
++ printk(" epmaxpacketout: ");
++ for (i = 0; i < 16; i++)
++ printk("%d ", usbdev->epmaxpacketout[i]);
++ printk("\n");
++#endif
++ printk(" parent: 0x%X\n", (unsigned int)usbdev->parent);
++ printk(" bus: 0x%X\n", (unsigned int)usbdev->bus);
++#ifdef NO_DATATYPE
++ printk(" configs: ");
++ for (i = 0; i < usbdev->descriptor.bNumConfigurations; i++)
++ printk("0x%X ", usbdev->config[i]);
++ printk("\n");
++#endif
++ printk(" actconfig: %p\n", usbdev->actconfig);
++ dump_device_descriptor(&usbdev->descriptor);
++
++ cd = &usbdev->config->desc;
++ dump_config_descriptor(cd);
++}
++
++
++/***********************************************************************
++*/
++static void
++dump_config_descriptor(struct usb_config_descriptor *cd)
++{
++ printk("Configuration Descriptor:\n");
++ if (!cd) {
++ printk("NULL\n");
++ return;
++ }
++ printk(" bLength: %d (0x%X)\n", cd->bLength, cd->bLength);
++ printk(" bDescriptorType: %d (0x%X)\n", cd->bDescriptorType, cd->bDescriptorType);
++ printk(" bNumInterfaces: %d (0x%X)\n", cd->bNumInterfaces, cd->bNumInterfaces);
++ printk(" bConfigurationValue: %d (0x%X)\n", cd->bConfigurationValue, cd->bConfigurationValue);
++ printk(" iConfiguration: %d (0x%X)\n", cd->iConfiguration, cd->iConfiguration);
++ printk(" bmAttributes: %d (0x%X)\n", cd->bmAttributes, cd->bmAttributes);
++ /* printk(" MaxPower: %d (0x%X)\n", cd->bMaxPower, cd->bMaxPower); */
++}
++
++
++static void
++dump_device_descriptor(struct usb_device_descriptor *dd)
++{
++ printk("Device Descriptor:\n");
++ if (!dd) {
++ printk("NULL\n");
++ return;
++ }
++ printk(" bLength: %d (0x%X)\n", dd->bLength, dd->bLength);
++ printk(" bDescriptortype: %d (0x%X)\n", dd->bDescriptorType, dd->bDescriptorType);
++ printk(" bcdUSB: %d (0x%X)\n", dd->bcdUSB, dd->bcdUSB);
++ printk(" bDeviceClass: %d (0x%X)\n", dd->bDeviceClass, dd->bDeviceClass);
++ printk(" bDeviceSubClass: %d (0x%X)\n", dd->bDeviceSubClass, dd->bDeviceSubClass);
++ printk(" bDeviceProtocol: %d (0x%X)\n", dd->bDeviceProtocol, dd->bDeviceProtocol);
++ printk(" bMaxPacketSize0: %d (0x%X)\n", dd->bMaxPacketSize0, dd->bMaxPacketSize0);
++ printk(" idVendor: %d (0x%X)\n", dd->idVendor, dd->idVendor);
++ printk(" idProduct: %d (0x%X)\n", dd->idProduct, dd->idProduct);
++ printk(" bcdDevice: %d (0x%X)\n", dd->bcdDevice, dd->bcdDevice);
++ printk(" iManufacturer: %d (0x%X)\n", dd->iManufacturer, dd->iManufacturer);
++ printk(" iProduct: %d (0x%X)\n", dd->iProduct, dd->iProduct);
++ printk(" iSerialNumber: %d (0x%X)\n", dd->iSerialNumber, dd->iSerialNumber);
++ printk(" bNumConfigurations: %d (0x%X)\n", dd->bNumConfigurations, dd->bNumConfigurations);
++}
++#endif /* UNUSED */
++
++#endif /* ACX_DEBUG */
+Index: linux-2.6.23/drivers/net/wireless/acx/wlan.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/wlan.c 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,424 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++*/
++
++/***********************************************************************
++** This code is based on elements which are
++** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
++** info@linux-wlan.com
++** http://www.linux-wlan.com
++*/
++
++#include <linux/version.h>
++#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
++#include <linux/config.h>
++#endif
++#include <linux/types.h>
++#include <linux/if_arp.h>
++#include <linux/wireless.h>
++#include <net/iw_handler.h>
++
++#include "acx.h"
++
++
++/***********************************************************************
++*/
++#define LOG_BAD_EID(hdr,len,ie_ptr) acx_log_bad_eid(hdr, len, ((wlan_ie_t*)ie_ptr))
++
++#define IE_EID(ie_ptr) (((wlan_ie_t*)(ie_ptr))->eid)
++#define IE_LEN(ie_ptr) (((wlan_ie_t*)(ie_ptr))->len)
++#define OFFSET(hdr,off) (WLAN_HDR_A3_DATAP(hdr) + (off))
++
++
++/***********************************************************************
++** wlan_mgmt_decode_XXX
++**
++** Given a complete frame in f->hdr, sets the pointers in f to
++** the areas that correspond to the parts of the frame.
++**
++** Assumptions:
++** 1) f->len and f->hdr are already set
++** 2) f->len is the length of the MAC header + data, the FCS
++** is NOT included
++** 3) all members except len and hdr are zero
++** Arguments:
++** f frame structure
++**
++** Returns:
++** nothing
++**
++** Side effects:
++** frame structure members are pointing at their
++** respective portions of the frame buffer.
++*/
++void
++wlan_mgmt_decode_beacon(wlan_fr_beacon_t * f)
++{
++ u8 *ie_ptr;
++ u8 *end = (u8*)f->hdr + f->len;
++
++ f->type = WLAN_FSTYPE_BEACON;
++
++ /*-- Fixed Fields ----*/
++ f->ts = (u64 *) OFFSET(f->hdr, WLAN_BEACON_OFF_TS);
++ f->bcn_int = (u16 *) OFFSET(f->hdr, WLAN_BEACON_OFF_BCN_INT);
++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_BEACON_OFF_CAPINFO);
++
++ /*-- Information elements */
++ ie_ptr = OFFSET(f->hdr, WLAN_BEACON_OFF_SSID);
++ while (ie_ptr < end) {
++ switch (IE_EID(ie_ptr)) {
++ case WLAN_EID_SSID:
++ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
++ break;
++ case WLAN_EID_SUPP_RATES:
++ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
++ break;
++ case WLAN_EID_EXT_RATES:
++ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
++ break;
++ case WLAN_EID_FH_PARMS:
++ f->fh_parms = (wlan_ie_fh_parms_t *) ie_ptr;
++ break;
++ case WLAN_EID_DS_PARMS:
++ f->ds_parms = (wlan_ie_ds_parms_t *) ie_ptr;
++ break;
++ case WLAN_EID_CF_PARMS:
++ f->cf_parms = (wlan_ie_cf_parms_t *) ie_ptr;
++ break;
++ case WLAN_EID_IBSS_PARMS:
++ f->ibss_parms = (wlan_ie_ibss_parms_t *) ie_ptr;
++ break;
++ case WLAN_EID_TIM:
++ f->tim = (wlan_ie_tim_t *) ie_ptr;
++ break;
++ case WLAN_EID_ERP_INFO:
++ f->erp = (wlan_ie_erp_t *) ie_ptr;
++ break;
++
++ case WLAN_EID_COUNTRY:
++ /* was seen: 07 06 47 42 20 01 0D 14 */
++ case WLAN_EID_PWR_CONSTRAINT:
++ /* was seen by Ashwin Mansinghka <ashwin_man@yahoo.com> from
++ Atheros-based PCI card in AP mode using madwifi drivers: */
++ /* 20 01 00 */
++ case WLAN_EID_NONERP:
++ /* was seen from WRT54GS with OpenWrt: 2F 01 07 */
++ case WLAN_EID_UNKNOWN128:
++ /* was seen by Jacek Jablonski <conexion2000@gmail.com> from Orinoco AP */
++ /* 80 06 00 60 1D 2C 3B 00 */
++ case WLAN_EID_UNKNOWN133:
++ /* was seen by David Bronaugh <dbronaugh@linuxboxen.org> from ???? */
++ /* 85 1E 00 00 84 12 07 00 FF 00 11 00 61 70 63 31 */
++ /* 63 73 72 30 34 32 00 00 00 00 00 00 00 00 00 25 */
++ case WLAN_EID_UNKNOWN223:
++ /* was seen by Carlos Martin <carlosmn@gmail.com> from ???? */
++ /* DF 20 01 1E 04 00 00 00 06 63 09 02 FF 0F 30 30 */
++ /* 30 42 36 42 33 34 30 39 46 31 00 00 00 00 00 00 00 00 */
++ case WLAN_EID_GENERIC:
++ /* WPA: hostap code:
++ if (pos[1] >= 4 &&
++ pos[2] == 0x00 && pos[3] == 0x50 &&
++ pos[4] == 0xf2 && pos[5] == 1) {
++ wpa = pos;
++ wpa_len = pos[1] + 2;
++ }
++ TI x4 mode: seen DD 04 08 00 28 00
++ (08 00 28 is TI's OUI)
++ last byte is probably 0/1 - disabled/enabled
++ */
++ case WLAN_EID_RSN:
++ /* hostap does something with it:
++ rsn = pos;
++ rsn_len = pos[1] + 2;
++ */
++ break;
++
++ default:
++ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
++ break;
++ }
++ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
++ }
++}
++
++
++#ifdef UNUSED
++void wlan_mgmt_decode_ibssatim(wlan_fr_ibssatim_t * f)
++{
++ f->type = WLAN_FSTYPE_ATIM;
++ /*-- Fixed Fields ----*/
++ /*-- Information elements */
++}
++#endif /* UNUSED */
++
++void
++wlan_mgmt_decode_disassoc(wlan_fr_disassoc_t * f)
++{
++ f->type = WLAN_FSTYPE_DISASSOC;
++
++ /*-- Fixed Fields ----*/
++ f->reason = (u16 *) OFFSET(f->hdr, WLAN_DISASSOC_OFF_REASON);
++
++ /*-- Information elements */
++}
++
++
++void
++wlan_mgmt_decode_assocreq(wlan_fr_assocreq_t * f)
++{
++ u8 *ie_ptr;
++ u8 *end = (u8*)f->hdr + f->len;
++
++
++ f->type = WLAN_FSTYPE_ASSOCREQ;
++
++ /*-- Fixed Fields ----*/
++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_CAP_INFO);
++ f->listen_int = (u16 *) OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_LISTEN_INT);
++
++ /*-- Information elements */
++ ie_ptr = OFFSET(f->hdr, WLAN_ASSOCREQ_OFF_SSID);
++ while (ie_ptr < end) {
++ switch (IE_EID(ie_ptr)) {
++ case WLAN_EID_SSID:
++ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
++ break;
++ case WLAN_EID_SUPP_RATES:
++ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
++ break;
++ case WLAN_EID_EXT_RATES:
++ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
++ break;
++ default:
++ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
++ break;
++ }
++ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
++ }
++}
++
++
++void
++wlan_mgmt_decode_assocresp(wlan_fr_assocresp_t * f)
++{
++ f->type = WLAN_FSTYPE_ASSOCRESP;
++
++ /*-- Fixed Fields ----*/
++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_CAP_INFO);
++ f->status = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_STATUS);
++ f->aid = (u16 *) OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_AID);
++
++ /*-- Information elements */
++ f->supp_rates = (wlan_ie_supp_rates_t *)
++ OFFSET(f->hdr, WLAN_ASSOCRESP_OFF_SUPP_RATES);
++}
++
++
++#ifdef UNUSED
++void
++wlan_mgmt_decode_reassocreq(wlan_fr_reassocreq_t * f)
++{
++ u8 *ie_ptr;
++ u8 *end = (u8*)f->hdr + f->len;
++
++ f->type = WLAN_FSTYPE_REASSOCREQ;
++
++ /*-- Fixed Fields ----*/
++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_CAP_INFO);
++ f->listen_int = (u16 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_LISTEN_INT);
++ f->curr_ap = (u8 *) OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_CURR_AP);
++
++ /*-- Information elements */
++ ie_ptr = OFFSET(f->hdr, WLAN_REASSOCREQ_OFF_SSID);
++ while (ie_ptr < end) {
++ switch (IE_EID(ie_ptr)) {
++ case WLAN_EID_SSID:
++ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
++ break;
++ case WLAN_EID_SUPP_RATES:
++ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
++ break;
++ case WLAN_EID_EXT_RATES:
++ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
++ break;
++ default:
++ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
++ break;
++ }
++ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
++ }
++}
++
++
++void
++wlan_mgmt_decode_reassocresp(wlan_fr_reassocresp_t * f)
++{
++ f->type = WLAN_FSTYPE_REASSOCRESP;
++
++ /*-- Fixed Fields ----*/
++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_CAP_INFO);
++ f->status = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_STATUS);
++ f->aid = (u16 *) OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_AID);
++
++ /*-- Information elements */
++ f->supp_rates = (wlan_ie_supp_rates_t *)
++ OFFSET(f->hdr, WLAN_REASSOCRESP_OFF_SUPP_RATES);
++}
++
++
++void
++wlan_mgmt_decode_probereq(wlan_fr_probereq_t * f)
++{
++ u8 *ie_ptr;
++ u8 *end = (u8*)f->hdr + f->len;
++
++ f->type = WLAN_FSTYPE_PROBEREQ;
++
++ /*-- Fixed Fields ----*/
++
++ /*-- Information elements */
++ ie_ptr = OFFSET(f->hdr, WLAN_PROBEREQ_OFF_SSID);
++ while (ie_ptr < end) {
++ switch (IE_EID(ie_ptr)) {
++ case WLAN_EID_SSID:
++ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
++ break;
++ case WLAN_EID_SUPP_RATES:
++ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
++ break;
++ case WLAN_EID_EXT_RATES:
++ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
++ break;
++ default:
++ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
++ break;
++ }
++ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
++ }
++}
++#endif /* UNUSED */
++
++
++/* TODO: decoding of beacon and proberesp can be merged (similar structure) */
++void
++wlan_mgmt_decode_proberesp(wlan_fr_proberesp_t * f)
++{
++ u8 *ie_ptr;
++ u8 *end = (u8*)f->hdr + f->len;
++
++ f->type = WLAN_FSTYPE_PROBERESP;
++
++ /*-- Fixed Fields ----*/
++ f->ts = (u64 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_TS);
++ f->bcn_int = (u16 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_BCN_INT);
++ f->cap_info = (u16 *) OFFSET(f->hdr, WLAN_PROBERESP_OFF_CAP_INFO);
++
++ /*-- Information elements */
++ ie_ptr = OFFSET(f->hdr, WLAN_PROBERESP_OFF_SSID);
++ while (ie_ptr < end) {
++ switch (IE_EID(ie_ptr)) {
++ case WLAN_EID_SSID:
++ f->ssid = (wlan_ie_ssid_t *) ie_ptr;
++ break;
++ case WLAN_EID_SUPP_RATES:
++ f->supp_rates = (wlan_ie_supp_rates_t *) ie_ptr;
++ break;
++ case WLAN_EID_EXT_RATES:
++ f->ext_rates = (wlan_ie_supp_rates_t *) ie_ptr;
++ break;
++ case WLAN_EID_FH_PARMS:
++ f->fh_parms = (wlan_ie_fh_parms_t *) ie_ptr;
++ break;
++ case WLAN_EID_DS_PARMS:
++ f->ds_parms = (wlan_ie_ds_parms_t *) ie_ptr;
++ break;
++ case WLAN_EID_CF_PARMS:
++ f->cf_parms = (wlan_ie_cf_parms_t *) ie_ptr;
++ break;
++ case WLAN_EID_IBSS_PARMS:
++ f->ibss_parms = (wlan_ie_ibss_parms_t *) ie_ptr;
++ break;
++#ifdef DONT_DO_IT_ADD_REAL_HANDLING_INSTEAD
++ case WLAN_EID_COUNTRY:
++ break;
++ ...
++#endif
++#ifdef SENT_HERE_BY_OPENWRT
++ /* should those be trapped or handled?? */
++ case WLAN_EID_ERP_INFO:
++ break;
++ case WLAN_EID_NONERP:
++ break;
++ case WLAN_EID_GENERIC:
++ break;
++#endif
++ default:
++ LOG_BAD_EID(f->hdr, f->len, ie_ptr);
++ break;
++ }
++
++ ie_ptr = ie_ptr + 2 + IE_LEN(ie_ptr);
++ }
++}
++
++
++void
++wlan_mgmt_decode_authen(wlan_fr_authen_t * f)
++{
++ u8 *ie_ptr;
++ u8 *end = (u8*)f->hdr + f->len;
++
++ f->type = WLAN_FSTYPE_AUTHEN;
++
++ /*-- Fixed Fields ----*/
++ f->auth_alg = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_AUTH_ALG);
++ f->auth_seq = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_AUTH_SEQ);
++ f->status = (u16 *) OFFSET(f->hdr, WLAN_AUTHEN_OFF_STATUS);
++
++ /*-- Information elements */
++ ie_ptr = OFFSET(f->hdr, WLAN_AUTHEN_OFF_CHALLENGE);
++ if ((ie_ptr < end) && (IE_EID(ie_ptr) == WLAN_EID_CHALLENGE)) {
++ f->challenge = (wlan_ie_challenge_t *) ie_ptr;
++ }
++}
++
++
++void
++wlan_mgmt_decode_deauthen(wlan_fr_deauthen_t * f)
++{
++ f->type = WLAN_FSTYPE_DEAUTHEN;
++
++ /*-- Fixed Fields ----*/
++ f->reason = (u16 *) OFFSET(f->hdr, WLAN_DEAUTHEN_OFF_REASON);
++
++ /*-- Information elements */
++}
+Index: linux-2.6.23/drivers/net/wireless/acx/wlan_compat.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/wlan_compat.h 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,260 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++*/
++
++/***********************************************************************
++** This code is based on elements which are
++** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
++** info@linux-wlan.com
++** http://www.linux-wlan.com
++*/
++
++/*=============================================================*/
++/*------ Establish Platform Identity --------------------------*/
++/*=============================================================*/
++/* Key macros: */
++/* WLAN_CPU_FAMILY */
++#define WLAN_Ix86 1
++#define WLAN_PPC 2
++#define WLAN_Ix96 3
++#define WLAN_ARM 4
++#define WLAN_ALPHA 5
++#define WLAN_MIPS 6
++#define WLAN_HPPA 7
++#define WLAN_SPARC 8
++#define WLAN_SH 9
++#define WLAN_x86_64 10
++/* WLAN_CPU_CORE */
++#define WLAN_I386CORE 1
++#define WLAN_PPCCORE 2
++#define WLAN_I296 3
++#define WLAN_ARMCORE 4
++#define WLAN_ALPHACORE 5
++#define WLAN_MIPSCORE 6
++#define WLAN_HPPACORE 7
++/* WLAN_CPU_PART */
++#define WLAN_I386PART 1
++#define WLAN_MPC860 2
++#define WLAN_MPC823 3
++#define WLAN_I296SA 4
++#define WLAN_PPCPART 5
++#define WLAN_ARMPART 6
++#define WLAN_ALPHAPART 7
++#define WLAN_MIPSPART 8
++#define WLAN_HPPAPART 9
++/* WLAN_SYSARCH */
++#define WLAN_PCAT 1
++#define WLAN_MBX 2
++#define WLAN_RPX 3
++#define WLAN_LWARCH 4
++#define WLAN_PMAC 5
++#define WLAN_SKIFF 6
++#define WLAN_BITSY 7
++#define WLAN_ALPHAARCH 7
++#define WLAN_MIPSARCH 9
++#define WLAN_HPPAARCH 10
++/* WLAN_HOSTIF (generally set on the command line, not detected) */
++#define WLAN_PCMCIA 1
++#define WLAN_ISA 2
++#define WLAN_PCI 3
++#define WLAN_USB 4
++#define WLAN_PLX 5
++
++/* Note: the PLX HOSTIF above refers to some vendors implementations for */
++/* PCI. It's a PLX chip that is a PCI to PCMCIA adapter, but it */
++/* isn't a real PCMCIA host interface adapter providing all the */
++/* card&socket services. */
++
++#ifdef __powerpc__
++#ifndef __ppc__
++#define __ppc__
++#endif
++#endif
++
++#if (defined(CONFIG_PPC) || defined(CONFIG_8xx))
++#ifndef __ppc__
++#define __ppc__
++#endif
++#endif
++
++#if defined(__x86_64__)
++ #define WLAN_CPU_FAMILY WLAN_x86_64
++ #define WLAN_SYSARCH WLAN_PCAT
++#elif defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__)
++ #define WLAN_CPU_FAMILY WLAN_Ix86
++ #define WLAN_CPU_CORE WLAN_I386CORE
++ #define WLAN_CPU_PART WLAN_I386PART
++ #define WLAN_SYSARCH WLAN_PCAT
++#elif defined(__ppc__)
++ #define WLAN_CPU_FAMILY WLAN_PPC
++ #define WLAN_CPU_CORE WLAN_PPCCORE
++ #if defined(CONFIG_MBX)
++ #define WLAN_CPU_PART WLAN_MPC860
++ #define WLAN_SYSARCH WLAN_MBX
++ #elif defined(CONFIG_RPXLITE)
++ #define WLAN_CPU_PART WLAN_MPC823
++ #define WLAN_SYSARCH WLAN_RPX
++ #elif defined(CONFIG_RPXCLASSIC)
++ #define WLAN_CPU_PART WLAN_MPC860
++ #define WLAN_SYSARCH WLAN_RPX
++ #else
++ #define WLAN_CPU_PART WLAN_PPCPART
++ #define WLAN_SYSARCH WLAN_PMAC
++ #endif
++#elif defined(__arm__)
++ #define WLAN_CPU_FAMILY WLAN_ARM
++ #define WLAN_CPU_CORE WLAN_ARMCORE
++ #define WLAN_CPU_PART WLAN_ARM_PART
++ #define WLAN_SYSARCH WLAN_SKIFF
++#elif defined(__alpha__)
++ #define WLAN_CPU_FAMILY WLAN_ALPHA
++ #define WLAN_CPU_CORE WLAN_ALPHACORE
++ #define WLAN_CPU_PART WLAN_ALPHAPART
++ #define WLAN_SYSARCH WLAN_ALPHAARCH
++#elif defined(__mips__)
++ #define WLAN_CPU_FAMILY WLAN_MIPS
++ #define WLAN_CPU_CORE WLAN_MIPSCORE
++ #define WLAN_CPU_PART WLAN_MIPSPART
++ #define WLAN_SYSARCH WLAN_MIPSARCH
++#elif defined(__hppa__)
++ #define WLAN_CPU_FAMILY WLAN_HPPA
++ #define WLAN_CPU_CORE WLAN_HPPACORE
++ #define WLAN_CPU_PART WLAN_HPPAPART
++ #define WLAN_SYSARCH WLAN_HPPAARCH
++#elif defined(__sparc__)
++ #define WLAN_CPU_FAMILY WLAN_SPARC
++ #define WLAN_SYSARCH WLAN_SPARC
++#elif defined(__sh__)
++ #define WLAN_CPU_FAMILY WLAN_SH
++ #define WLAN_SYSARCH WLAN_SHARCH
++ #ifndef __LITTLE_ENDIAN__
++ #define __LITTLE_ENDIAN__
++ #endif
++#else
++ #error "No CPU identified!"
++#endif
++
++/*
++ Some big endian machines implicitly do all I/O in little endian mode.
++
++ In particular:
++ Linux/PPC on PowerMacs (PCI)
++ Arm/Intel Xscale (PCI)
++
++ This may also affect PLX boards and other BE &| PPC platforms;
++ as new ones are discovered, add them below.
++*/
++
++#if ((WLAN_SYSARCH == WLAN_SKIFF) || (WLAN_SYSARCH == WLAN_PMAC))
++#define REVERSE_ENDIAN
++#endif
++
++/*=============================================================*/
++/*------ Hardware Portability Macros --------------------------*/
++/*=============================================================*/
++#if (WLAN_CPU_FAMILY == WLAN_PPC)
++#define wlan_inw(a) in_be16((unsigned short *)((a)+_IO_BASE))
++#define wlan_inw_le16_to_cpu(a) inw((a))
++#define wlan_outw(v,a) out_be16((unsigned short *)((a)+_IO_BASE), (v))
++#define wlan_outw_cpu_to_le16(v,a) outw((v),(a))
++#else
++#define wlan_inw(a) inw((a))
++#define wlan_inw_le16_to_cpu(a) __cpu_to_le16(inw((a)))
++#define wlan_outw(v,a) outw((v),(a))
++#define wlan_outw_cpu_to_le16(v,a) outw(__cpu_to_le16((v)),(a))
++#endif
++
++/*=============================================================*/
++/*------ Bit settings -----------------------------------------*/
++/*=============================================================*/
++#define ieee2host16(n) __le16_to_cpu(n)
++#define ieee2host32(n) __le32_to_cpu(n)
++#define host2ieee16(n) __cpu_to_le16(n)
++#define host2ieee32(n) __cpu_to_le32(n)
++
++/* for constants */
++#ifdef __LITTLE_ENDIAN
++ #define IEEE16(a,n) a = n, a##i = n,
++#else
++ #ifdef __BIG_ENDIAN
++ /* shifts would produce gcc warnings. Oh well... */
++ #define IEEE16(a,n) a = n, a##i = ((n&0xff)*256 + ((n&0xff00)/256)),
++ #else
++ #error give me endianness or give me death
++ #endif
++#endif
++
++/*=============================================================*/
++/*------ Compiler Portability Macros --------------------------*/
++/*=============================================================*/
++#define WLAN_PACKED __attribute__ ((packed))
++
++/* Interrupt handler backwards compatibility stuff */
++#ifndef IRQ_NONE
++#define IRQ_NONE
++#define IRQ_HANDLED
++typedef void irqreturn_t;
++#endif
++
++#ifndef ARPHRD_IEEE80211_PRISM
++#define ARPHRD_IEEE80211_PRISM 802
++#endif
++
++#define ETH_P_80211_RAW (ETH_P_ECONET + 1)
++
++/*============================================================================*
++ * Constants *
++ *============================================================================*/
++#define WLAN_IEEE_OUI_LEN 3
++
++/*============================================================================*
++ * Types *
++ *============================================================================*/
++
++/* local ether header type */
++typedef struct wlan_ethhdr {
++ u8 daddr[ETH_ALEN];
++ u8 saddr[ETH_ALEN];
++ u16 type;
++} WLAN_PACKED wlan_ethhdr_t;
++
++/* local llc header type */
++typedef struct wlan_llc {
++ u8 dsap;
++ u8 ssap;
++ u8 ctl;
++} WLAN_PACKED wlan_llc_t;
++
++/* local snap header type */
++typedef struct wlan_snap {
++ u8 oui[WLAN_IEEE_OUI_LEN];
++ u16 type;
++} WLAN_PACKED wlan_snap_t;
+Index: linux-2.6.23/drivers/net/wireless/acx/wlan_hdr.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/wlan_hdr.h 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,497 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++*/
++
++/***********************************************************************
++** This code is based on elements which are
++** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
++** info@linux-wlan.com
++** http://www.linux-wlan.com
++*/
++
++/* mini-doc
++
++Here are all 11b/11g/11a rates and modulations:
++
++ 11b 11g 11a
++ --- --- ---
++ 1 |B |B |
++ 2 |Q |Q |
++ 5.5|Cp |C p|
++ 6 | |Od |O
++ 9 | |od |o
++11 |Cp |C p|
++12 | |Od |O
++18 | |od |o
++22 | | p|
++24 | |Od |O
++33 | | p|
++36 | |od |o
++48 | |od |o
++54 | |od |o
++
++Mandatory:
++ B - DBPSK (Differential Binary Phase Shift Keying)
++ Q - DQPSK (Differential Quaternary Phase Shift Keying)
++ C - CCK (Complementary Code Keying, a form of DSSS
++ (Direct Sequence Spread Spectrum) modulation)
++ O - OFDM (Orthogonal Frequency Division Multiplexing)
++Optional:
++ o - OFDM
++ d - CCK-OFDM (also known as DSSS-OFDM)
++ p - PBCC (Packet Binary Convolutional Coding)
++
++The term CCK-OFDM may be used interchangeably with DSSS-OFDM
++(the IEEE 802.11g-2003 standard uses the latter terminology).
++In the CCK-OFDM, the PLCP header of the frame uses the CCK form of DSSS,
++while the PLCP payload (the MAC frame) is modulated using OFDM.
++
++Basically, you must use CCK-OFDM if you have mixed 11b/11g environment,
++or else (pure OFDM) 11b equipment may not realize that AP
++is sending a packet and start sending its own one.
++Sadly, looks like acx111 does not support CCK-OFDM, only pure OFDM.
++
++Re PBCC: avoid using it. It makes sense only if you have
++TI "11b+" hardware. You _must_ use PBCC in order to reach 22Mbps on it.
++
++Preambles:
++
++Long preamble (at 1Mbit rate, takes 144 us):
++ 16 bytes ones
++ 2 bytes 0xF3A0 (lsb sent first)
++PLCP header follows (at 1Mbit also):
++ 1 byte Signal: speed, in 0.1Mbit units, except for:
++ 33Mbit: 33 (instead of 330 - doesn't fit in octet)
++ all CCK-OFDM rates: 30
++ 1 byte Service
++ 0,1,4: reserved
++ 2: 1=locked clock
++ 3: 1=PBCC
++ 5: Length Extension (PBCC 22,33Mbit (11g only)) <-
++ 6: Length Extension (PBCC 22,33Mbit (11g only)) <- BLACK MAGIC HERE
++ 7: Length Extension <-
++ 2 bytes Length (time needed to tx this frame)
++ a) 5.5 Mbit/s CCK
++ Length = octets*8/5.5, rounded up to integer
++ b) 11 Mbit/s CCK
++ Length = octets*8/11, rounded up to integer
++ Service bit 7:
++ 0 = rounding took less than 8/11
++ 1 = rounding took more than or equal to 8/11
++ c) 5.5 Mbit/s PBCC
++ Length = (octets+1)*8/5.5, rounded up to integer
++ d) 11 Mbit/s PBCC
++ Length = (octets+1)*8/11, rounded up to integer
++ Service bit 7:
++ 0 = rounding took less than 8/11
++ 1 = rounding took more than or equal to 8/11
++ e) 22 Mbit/s PBCC
++ Length = (octets+1)*8/22, rounded up to integer
++ Service bits 6,7:
++ 00 = rounding took less than 8/22ths
++ 01 = rounding took 8/22...15/22ths
++ 10 = rounding took 16/22ths or more.
++ f) 33 Mbit/s PBCC
++ Length = (octets+1)*8/33, rounded up to integer
++ Service bits 5,6,7:
++ 000 rounding took less than 8/33
++ 001 rounding took 8/33...15/33
++ 010 rounding took 16/33...23/33
++ 011 rounding took 24/33...31/33
++ 100 rounding took 32/33 or more
++ 2 bytes CRC
++
++PSDU follows (up to 2346 bytes at selected rate)
++
++While Signal value alone is not enough to determine rate and modulation,
++Signal+Service is always sufficient.
++
++Short preamble (at 1Mbit rate, takes 72 us):
++ 7 bytes zeroes
++ 2 bytes 0x05CF (lsb sent first)
++PLCP header follows *at 2Mbit/s*. Format is the same as in long preamble.
++PSDU follows (up to 2346 bytes at selected rate)
++
++OFDM preamble is completely different, uses OFDM
++modulation from the start and thus easily identifiable.
++Not shown here.
++*/
++
++
++/***********************************************************************
++** Constants
++*/
++
++#define WLAN_HDR_A3_LEN 24
++#define WLAN_HDR_A4_LEN 30
++/* IV structure:
++** 3 bytes: Initialization Vector (24 bits)
++** 1 byte: 0..5: padding, must be 0; 6..7: key selector (0-3)
++*/
++#define WLAN_WEP_IV_LEN 4
++/* 802.11 says 2312 but looks like 2312 is a max size of _WEPed data_ */
++#define WLAN_DATA_MAXLEN 2304
++#define WLAN_WEP_ICV_LEN 4
++#define WLAN_FCS_LEN 4
++#define WLAN_A3FR_MAXLEN (WLAN_HDR_A3_LEN + WLAN_DATA_MAXLEN)
++#define WLAN_A4FR_MAXLEN (WLAN_HDR_A4_LEN + WLAN_DATA_MAXLEN)
++#define WLAN_A3FR_MAXLEN_FCS (WLAN_HDR_A3_LEN + WLAN_DATA_MAXLEN + 4)
++#define WLAN_A4FR_MAXLEN_FCS (WLAN_HDR_A4_LEN + WLAN_DATA_MAXLEN + 4)
++#define WLAN_A3FR_MAXLEN_WEP (WLAN_A3FR_MAXLEN + 8)
++#define WLAN_A4FR_MAXLEN_WEP (WLAN_A4FR_MAXLEN + 8)
++#define WLAN_A3FR_MAXLEN_WEP_FCS (WLAN_A3FR_MAXLEN_FCS + 8)
++#define WLAN_A4FR_MAXLEN_WEP_FCS (WLAN_A4FR_MAXLEN_FCS + 8)
++
++#define WLAN_BSS_TS_LEN 8
++#define WLAN_SSID_MAXLEN 32
++#define WLAN_BEACON_FR_MAXLEN (WLAN_HDR_A3_LEN + 334)
++#define WLAN_ATIM_FR_MAXLEN (WLAN_HDR_A3_LEN + 0)
++#define WLAN_DISASSOC_FR_MAXLEN (WLAN_HDR_A3_LEN + 2)
++#define WLAN_ASSOCREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 48)
++#define WLAN_ASSOCRESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 16)
++#define WLAN_REASSOCREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 54)
++#define WLAN_REASSOCRESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 16)
++#define WLAN_PROBEREQ_FR_MAXLEN (WLAN_HDR_A3_LEN + 44)
++#define WLAN_PROBERESP_FR_MAXLEN (WLAN_HDR_A3_LEN + 78)
++#define WLAN_AUTHEN_FR_MAXLEN (WLAN_HDR_A3_LEN + 261)
++#define WLAN_DEAUTHEN_FR_MAXLEN (WLAN_HDR_A3_LEN + 2)
++#define WLAN_CHALLENGE_IE_LEN 130
++#define WLAN_CHALLENGE_LEN 128
++#define WLAN_WEP_MAXKEYLEN 13
++#define WLAN_WEP_NKEYS 4
++
++/*--- Frame Control Field -------------------------------------*/
++/* Frame Types */
++#define WLAN_FTYPE_MGMT 0x00
++#define WLAN_FTYPE_CTL 0x01
++#define WLAN_FTYPE_DATA 0x02
++
++/* Frame subtypes */
++/* Management */
++#define WLAN_FSTYPE_ASSOCREQ 0x00
++#define WLAN_FSTYPE_ASSOCRESP 0x01
++#define WLAN_FSTYPE_REASSOCREQ 0x02
++#define WLAN_FSTYPE_REASSOCRESP 0x03
++#define WLAN_FSTYPE_PROBEREQ 0x04
++#define WLAN_FSTYPE_PROBERESP 0x05
++#define WLAN_FSTYPE_BEACON 0x08
++#define WLAN_FSTYPE_ATIM 0x09
++#define WLAN_FSTYPE_DISASSOC 0x0a
++#define WLAN_FSTYPE_AUTHEN 0x0b
++#define WLAN_FSTYPE_DEAUTHEN 0x0c
++
++/* Control */
++#define WLAN_FSTYPE_PSPOLL 0x0a
++#define WLAN_FSTYPE_RTS 0x0b
++#define WLAN_FSTYPE_CTS 0x0c
++#define WLAN_FSTYPE_ACK 0x0d
++#define WLAN_FSTYPE_CFEND 0x0e
++#define WLAN_FSTYPE_CFENDCFACK 0x0f
++
++/* Data */
++#define WLAN_FSTYPE_DATAONLY 0x00
++#define WLAN_FSTYPE_DATA_CFACK 0x01
++#define WLAN_FSTYPE_DATA_CFPOLL 0x02
++#define WLAN_FSTYPE_DATA_CFACK_CFPOLL 0x03
++#define WLAN_FSTYPE_NULL 0x04
++#define WLAN_FSTYPE_CFACK 0x05
++#define WLAN_FSTYPE_CFPOLL 0x06
++#define WLAN_FSTYPE_CFACK_CFPOLL 0x07
++
++/*--- FC Constants v. 2.0 ------------------------------------*/
++/* Each constant is defined twice: WF_CONST is in host */
++/* byteorder, WF_CONSTi is in ieee byteorder. */
++/* Usage: */
++/* printf("the frame subtype is %X", WF_FC_FTYPEi & rx.fc); */
++/* tx.fc = WF_FTYPE_CTLi | WF_FSTYPE_RTSi; */
++/*------------------------------------------------------------*/
++
++enum {
++/*--- Frame Control Field -------------------------------------*/
++/* Protocol version: always 0 for current 802.11 standards */
++IEEE16(WF_FC_PVER, 0x0003)
++IEEE16(WF_FC_FTYPE, 0x000c)
++IEEE16(WF_FC_FSTYPE, 0x00f0)
++IEEE16(WF_FC_TODS, 0x0100)
++IEEE16(WF_FC_FROMDS, 0x0200)
++IEEE16(WF_FC_FROMTODS, 0x0300)
++IEEE16(WF_FC_MOREFRAG, 0x0400)
++IEEE16(WF_FC_RETRY, 0x0800)
++/* Indicates PS mode in which STA will be after successful completion
++** of current frame exchange sequence. Always 0 for AP frames */
++IEEE16(WF_FC_PWRMGT, 0x1000)
++/* What MoreData=1 means:
++** From AP to STA in PS mode: don't sleep yet, I have more frames for you
++** From Contention-Free (CF) Pollable STA in response to a CF-Poll:
++** STA has buffered frames for transmission in response to next CF-Poll
++** Bcast/mcast frames transmitted from AP:
++** when additional bcast/mcast frames remain to be transmitted by AP
++** during this beacon interval
++** In all other cases MoreData=0 */
++IEEE16(WF_FC_MOREDATA, 0x2000)
++IEEE16(WF_FC_ISWEP, 0x4000)
++IEEE16(WF_FC_ORDER, 0x8000)
++
++/* Frame Types */
++IEEE16(WF_FTYPE_MGMT, 0x00)
++IEEE16(WF_FTYPE_CTL, 0x04)
++IEEE16(WF_FTYPE_DATA, 0x08)
++
++/* Frame subtypes */
++/* Management */
++IEEE16(WF_FSTYPE_ASSOCREQ, 0x00)
++IEEE16(WF_FSTYPE_ASSOCRESP, 0x10)
++IEEE16(WF_FSTYPE_REASSOCREQ, 0x20)
++IEEE16(WF_FSTYPE_REASSOCRESP, 0x30)
++IEEE16(WF_FSTYPE_PROBEREQ, 0x40)
++IEEE16(WF_FSTYPE_PROBERESP, 0x50)
++IEEE16(WF_FSTYPE_BEACON, 0x80)
++IEEE16(WF_FSTYPE_ATIM, 0x90)
++IEEE16(WF_FSTYPE_DISASSOC, 0xa0)
++IEEE16(WF_FSTYPE_AUTHEN, 0xb0)
++IEEE16(WF_FSTYPE_DEAUTHEN, 0xc0)
++
++/* Control */
++IEEE16(WF_FSTYPE_PSPOLL, 0xa0)
++IEEE16(WF_FSTYPE_RTS, 0xb0)
++IEEE16(WF_FSTYPE_CTS, 0xc0)
++IEEE16(WF_FSTYPE_ACK, 0xd0)
++IEEE16(WF_FSTYPE_CFEND, 0xe0)
++IEEE16(WF_FSTYPE_CFENDCFACK, 0xf0)
++
++/* Data */
++IEEE16(WF_FSTYPE_DATAONLY, 0x00)
++IEEE16(WF_FSTYPE_DATA_CFACK, 0x10)
++IEEE16(WF_FSTYPE_DATA_CFPOLL, 0x20)
++IEEE16(WF_FSTYPE_DATA_CFACK_CFPOLL, 0x30)
++IEEE16(WF_FSTYPE_NULL, 0x40)
++IEEE16(WF_FSTYPE_CFACK, 0x50)
++IEEE16(WF_FSTYPE_CFPOLL, 0x60)
++IEEE16(WF_FSTYPE_CFACK_CFPOLL, 0x70)
++};
++
++
++/***********************************************************************
++** Macros
++*/
++
++/*--- Duration Macros ----------------------------------------*/
++/* Macros to get/set the bitfields of the Duration Field */
++/* - the duration value is only valid when bit15 is zero */
++/* - the firmware handles these values, so I'm not going */
++/* to use these macros right now. */
++/*------------------------------------------------------------*/
++
++/*--- Sequence Control Macros -------------------------------*/
++/* Macros to get/set the bitfields of the Sequence Control */
++/* Field. */
++/*------------------------------------------------------------*/
++#define WLAN_GET_SEQ_FRGNUM(n) ((u16)(n) & 0x000f)
++#define WLAN_GET_SEQ_SEQNUM(n) (((u16)(n) & 0xfff0) >> 4)
++
++/*--- Data ptr macro -----------------------------------------*/
++/* Creates a u8* to the data portion of a frame */
++/* Assumes you're passing in a ptr to the beginning of the hdr*/
++/*------------------------------------------------------------*/
++#define WLAN_HDR_A3_DATAP(p) (((u8*)(p)) + WLAN_HDR_A3_LEN)
++#define WLAN_HDR_A4_DATAP(p) (((u8*)(p)) + WLAN_HDR_A4_LEN)
++
++
++/***********************************************************************
++** Types
++*/
++
++/* 802.11 header type
++**
++** Note the following:
++** a1 *always* is receiver's mac or bcast/mcast
++** a2 *always* is transmitter's mac, if a2 exists
++** seq: [0:3] frag#, [4:15] seq# - used for dup detection
++** (dups from retries have same seq#) */
++typedef struct wlan_hdr {
++ u16 fc;
++ u16 dur;
++ u8 a1[ETH_ALEN];
++ u8 a2[ETH_ALEN];
++ u8 a3[ETH_ALEN];
++ u16 seq;
++ u8 a4[ETH_ALEN];
++} WLAN_PACKED wlan_hdr_t;
++
++/* Separate structs for use if frame type is known */
++typedef struct wlan_hdr_a3 {
++ u16 fc;
++ u16 dur;
++ u8 a1[ETH_ALEN];
++ u8 a2[ETH_ALEN];
++ u8 a3[ETH_ALEN];
++ u16 seq;
++} WLAN_PACKED wlan_hdr_a3_t;
++
++typedef struct wlan_hdr_mgmt {
++ u16 fc;
++ u16 dur;
++ u8 da[ETH_ALEN];
++ u8 sa[ETH_ALEN];
++ u8 bssid[ETH_ALEN];
++ u16 seq;
++} WLAN_PACKED wlan_hdr_mgmt_t;
++
++#ifdef NOT_NEEDED_YET
++typedef struct { /* ad-hoc peer->peer (to/from DS = 0/0) */
++ u16 fc;
++ u16 dur;
++ u8 da[ETH_ALEN];
++ u8 sa[ETH_ALEN];
++ u8 bssid[ETH_ALEN];
++ u16 seq;
++} WLAN_PACKED ibss;
++typedef struct { /* ap->sta (to/from DS = 0/1) */
++ u16 fc;
++ u16 dur;
++ u8 da[ETH_ALEN];
++ u8 bssid[ETH_ALEN];
++ u8 sa[ETH_ALEN];
++ u16 seq;
++} WLAN_PACKED fromap;
++typedef struct { /* sta->ap (to/from DS = 1/0) */
++ u16 fc;
++ u16 dur;
++ u8 bssid[ETH_ALEN];
++ u8 sa[ETH_ALEN];
++ u8 da[ETH_ALEN];
++ u16 seq;
++} WLAN_PACKED toap;
++typedef struct { /* wds->wds (to/from DS = 1/1), the only 4addr pkt */
++ u16 fc;
++ u16 dur;
++ u8 ra[ETH_ALEN];
++ u8 ta[ETH_ALEN];
++ u8 da[ETH_ALEN];
++ u16 seq;
++ u8 sa[ETH_ALEN];
++} WLAN_PACKED wds;
++typedef struct { /* all management packets */
++ u16 fc;
++ u16 dur;
++ u8 da[ETH_ALEN];
++ u8 sa[ETH_ALEN];
++ u8 bssid[ETH_ALEN];
++ u16 seq;
++} WLAN_PACKED mgmt;
++typedef struct { /* has no body, just a FCS */
++ u16 fc;
++ u16 dur;
++ u8 ra[ETH_ALEN];
++ u8 ta[ETH_ALEN];
++} WLAN_PACKED rts;
++typedef struct { /* has no body, just a FCS */
++ u16 fc;
++ u16 dur;
++ u8 ra[ETH_ALEN];
++} WLAN_PACKED cts;
++typedef struct { /* has no body, just a FCS */
++ u16 fc;
++ u16 dur;
++ u8 ra[ETH_ALEN];
++} WLAN_PACKED ack;
++typedef struct { /* has no body, just a FCS */
++ u16 fc;
++ /* NB: this one holds Assoc ID in dur field: */
++ u16 aid;
++ u8 bssid[ETH_ALEN];
++ u8 ta[ETH_ALEN];
++} WLAN_PACKED pspoll;
++typedef struct { /* has no body, just a FCS */
++ u16 fc;
++ u16 dur;
++ u8 ra[ETH_ALEN];
++ u8 bssid[ETH_ALEN];
++} WLAN_PACKED cfend;
++typedef struct { /* has no body, just a FCS */
++ u16 fc;
++ u16 dur;
++ u8 ra[ETH_ALEN];
++ u8 bssid[ETH_ALEN];
++} WLAN_PACKED cfendcfack;
++#endif
++
++/* Prism header emulation (monitor mode) */
++typedef struct wlanitem_u32 {
++ u32 did;
++ u16 status;
++ u16 len;
++ u32 data;
++} WLAN_PACKED wlanitem_u32_t;
++#define WLANITEM_STATUS_data_ok 0
++#define WLANITEM_STATUS_no_value 1
++#define WLANITEM_STATUS_invalid_itemname 2
++#define WLANITEM_STATUS_invalid_itemdata 3
++#define WLANITEM_STATUS_missing_itemdata 4
++#define WLANITEM_STATUS_incomplete_itemdata 5
++#define WLANITEM_STATUS_invalid_msg_did 6
++#define WLANITEM_STATUS_invalid_mib_did 7
++#define WLANITEM_STATUS_missing_conv_func 8
++#define WLANITEM_STATUS_string_too_long 9
++#define WLANITEM_STATUS_data_out_of_range 10
++#define WLANITEM_STATUS_string_too_short 11
++#define WLANITEM_STATUS_missing_valid_func 12
++#define WLANITEM_STATUS_unknown 13
++#define WLANITEM_STATUS_invalid_did 14
++#define WLANITEM_STATUS_missing_print_func 15
++
++#define WLAN_DEVNAMELEN_MAX 16
++typedef struct wlansniffrm {
++ u32 msgcode;
++ u32 msglen;
++ u8 devname[WLAN_DEVNAMELEN_MAX];
++ wlanitem_u32_t hosttime;
++ wlanitem_u32_t mactime;
++ wlanitem_u32_t channel;
++ wlanitem_u32_t rssi;
++ wlanitem_u32_t sq;
++ wlanitem_u32_t signal;
++ wlanitem_u32_t noise;
++ wlanitem_u32_t rate;
++ wlanitem_u32_t istx; /* tx? 0:no 1:yes */
++ wlanitem_u32_t frmlen;
++} WLAN_PACKED wlansniffrm_t;
++#define WLANSNIFFFRM 0x0041
++#define WLANSNIFFFRM_hosttime 0x1041
++#define WLANSNIFFFRM_mactime 0x2041
++#define WLANSNIFFFRM_channel 0x3041
++#define WLANSNIFFFRM_rssi 0x4041
++#define WLANSNIFFFRM_sq 0x5041
++#define WLANSNIFFFRM_signal 0x6041
++#define WLANSNIFFFRM_noise 0x7041
++#define WLANSNIFFFRM_rate 0x8041
++#define WLANSNIFFFRM_istx 0x9041
++#define WLANSNIFFFRM_frmlen 0xA041
+Index: linux-2.6.23/drivers/net/wireless/acx/wlan_mgmt.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/acx/wlan_mgmt.h 2008-01-20 21:13:40.000000000 +0000
+@@ -0,0 +1,582 @@
++/***********************************************************************
++** Copyright (C) 2003 ACX100 Open Source Project
++**
++** The contents of this file are subject to the Mozilla Public
++** License Version 1.1 (the "License"); you may not use this file
++** except in compliance with the License. You may obtain a copy of
++** the License at http://www.mozilla.org/MPL/
++**
++** Software distributed under the License is distributed on an "AS
++** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++** implied. See the License for the specific language governing
++** rights and limitations under the License.
++**
++** Alternatively, the contents of this file may be used under the
++** terms of the GNU Public License version 2 (the "GPL"), in which
++** case the provisions of the GPL are applicable instead of the
++** above. If you wish to allow the use of your version of this file
++** only under the terms of the GPL and not to allow others to use
++** your version of this file under the MPL, indicate your decision
++** by deleting the provisions above and replace them with the notice
++** and other provisions required by the GPL. If you do not delete
++** the provisions above, a recipient may use your version of this
++** file under either the MPL or the GPL.
++** ---------------------------------------------------------------------
++** Inquiries regarding the ACX100 Open Source Project can be
++** made directly to:
++**
++** acx100-users@lists.sf.net
++** http://acx100.sf.net
++** ---------------------------------------------------------------------
++*/
++
++/***********************************************************************
++** This code is based on elements which are
++** Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
++** info@linux-wlan.com
++** http://www.linux-wlan.com
++*/
++
++/***********************************************************************
++** Constants
++*/
++
++/*-- Information Element IDs --------------------*/
++#define WLAN_EID_SSID 0
++#define WLAN_EID_SUPP_RATES 1
++#define WLAN_EID_FH_PARMS 2
++#define WLAN_EID_DS_PARMS 3
++#define WLAN_EID_CF_PARMS 4
++#define WLAN_EID_TIM 5
++#define WLAN_EID_IBSS_PARMS 6
++#define WLAN_EID_COUNTRY 7 /* 802.11d */
++#define WLAN_EID_FH_HOP_PARMS 8 /* 802.11d */
++#define WLAN_EID_FH_TABLE 9 /* 802.11d */
++#define WLAN_EID_REQUEST 10 /* 802.11d */
++/*-- values 11-15 reserved --*/
++#define WLAN_EID_CHALLENGE 16
++/*-- values 17-31 reserved for challenge text extension --*/
++#define WLAN_EID_PWR_CONSTRAINT 32 /* 11h PowerConstraint */
++#define WLAN_EID_ERP_INFO 42 /* was seen from WRT54GS with OpenWrt */
++#define WLAN_EID_NONERP 47 /* was seen from WRT54GS with OpenWrt */
++#define WLAN_EID_RSN 48
++#define WLAN_EID_EXT_RATES 50
++#define WLAN_EID_UNKNOWN128 128
++#define WLAN_EID_UNKNOWN133 133
++#define WLAN_EID_GENERIC 221 /* was seen from WRT54GS with OpenWrt */
++#define WLAN_EID_UNKNOWN223 223
++
++#if 0
++#define WLAN_EID_PWR_CAP 33 /* 11h PowerCapability */
++#define WLAN_EID_TPC_REQUEST 34 /* 11h TPC Request */
++#define WLAN_EID_TPC_REPORT 35 /* 11h TPC Report */
++#define WLAN_EID_SUPP_CHANNELS 36 /* 11h Supported Channels */
++#define WLAN_EID_CHANNEL_SWITCH 37 /* 11h ChannelSwitch */
++#define WLAN_EID_MEASURE_REQUEST 38 /* 11h MeasurementRequest */
++#define WLAN_EID_MEASURE_REPORT 39 /* 11h MeasurementReport */
++#define WLAN_EID_QUIET_ID 40 /* 11h Quiet */
++#define WLAN_EID_IBSS_DFS_ID 41 /* 11h IBSS_DFS */
++#endif
++
++/*-- Reason Codes -------------------------------*/
++#define WLAN_MGMT_REASON_RSVD 0
++#define WLAN_MGMT_REASON_UNSPEC 1
++#define WLAN_MGMT_REASON_PRIOR_AUTH_INVALID 2
++#define WLAN_MGMT_REASON_DEAUTH_LEAVING 3
++#define WLAN_MGMT_REASON_DISASSOC_INACTIVE 4
++#define WLAN_MGMT_REASON_DISASSOC_AP_BUSY 5
++#define WLAN_MGMT_REASON_CLASS2_NONAUTH 6
++#define WLAN_MGMT_REASON_CLASS3_NONASSOC 7
++#define WLAN_MGMT_REASON_DISASSOC_STA_HASLEFT 8
++#define WLAN_MGMT_REASON_CANT_ASSOC_NONAUTH 9
++
++/*-- Status Codes -------------------------------*/
++#define WLAN_MGMT_STATUS_SUCCESS 0
++#define WLAN_MGMT_STATUS_UNSPEC_FAILURE 1
++#define WLAN_MGMT_STATUS_CAPS_UNSUPPORTED 10
++#define WLAN_MGMT_STATUS_REASSOC_NO_ASSOC 11
++#define WLAN_MGMT_STATUS_ASSOC_DENIED_UNSPEC 12
++#define WLAN_MGMT_STATUS_UNSUPPORTED_AUTHALG 13
++#define WLAN_MGMT_STATUS_RX_AUTH_NOSEQ 14
++#define WLAN_MGMT_STATUS_CHALLENGE_FAIL 15
++#define WLAN_MGMT_STATUS_AUTH_TIMEOUT 16
++#define WLAN_MGMT_STATUS_ASSOC_DENIED_BUSY 17
++#define WLAN_MGMT_STATUS_ASSOC_DENIED_RATES 18
++/* p80211b additions */
++#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOSHORT 19
++#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOPBCC 20
++#define WLAN_MGMT_STATUS_ASSOC_DENIED_NOAGILITY 21
++
++/*-- Auth Algorithm Field ---------------------------*/
++#define WLAN_AUTH_ALG_OPENSYSTEM 0
++#define WLAN_AUTH_ALG_SHAREDKEY 1
++
++/*-- Management Frame Field Offsets -------------*/
++/* Note: Not all fields are listed because of variable lengths */
++/* Note: These offsets are from the start of the frame data */
++
++#define WLAN_BEACON_OFF_TS 0
++#define WLAN_BEACON_OFF_BCN_INT 8
++#define WLAN_BEACON_OFF_CAPINFO 10
++#define WLAN_BEACON_OFF_SSID 12
++
++#define WLAN_DISASSOC_OFF_REASON 0
++
++#define WLAN_ASSOCREQ_OFF_CAP_INFO 0
++#define WLAN_ASSOCREQ_OFF_LISTEN_INT 2
++#define WLAN_ASSOCREQ_OFF_SSID 4
++
++#define WLAN_ASSOCRESP_OFF_CAP_INFO 0
++#define WLAN_ASSOCRESP_OFF_STATUS 2
++#define WLAN_ASSOCRESP_OFF_AID 4
++#define WLAN_ASSOCRESP_OFF_SUPP_RATES 6
++
++#define WLAN_REASSOCREQ_OFF_CAP_INFO 0
++#define WLAN_REASSOCREQ_OFF_LISTEN_INT 2
++#define WLAN_REASSOCREQ_OFF_CURR_AP 4
++#define WLAN_REASSOCREQ_OFF_SSID 10
++
++#define WLAN_REASSOCRESP_OFF_CAP_INFO 0
++#define WLAN_REASSOCRESP_OFF_STATUS 2
++#define WLAN_REASSOCRESP_OFF_AID 4
++#define WLAN_REASSOCRESP_OFF_SUPP_RATES 6
++
++#define WLAN_PROBEREQ_OFF_SSID 0
++
++#define WLAN_PROBERESP_OFF_TS 0
++#define WLAN_PROBERESP_OFF_BCN_INT 8
++#define WLAN_PROBERESP_OFF_CAP_INFO 10
++#define WLAN_PROBERESP_OFF_SSID 12
++
++#define WLAN_AUTHEN_OFF_AUTH_ALG 0
++#define WLAN_AUTHEN_OFF_AUTH_SEQ 2
++#define WLAN_AUTHEN_OFF_STATUS 4
++#define WLAN_AUTHEN_OFF_CHALLENGE 6
++
++#define WLAN_DEAUTHEN_OFF_REASON 0
++
++enum {
++IEEE16(WF_MGMT_CAP_ESS, 0x0001)
++IEEE16(WF_MGMT_CAP_IBSS, 0x0002)
++/* In (re)assoc request frames by STA:
++** Pollable=0, PollReq=0: STA is not CF-Pollable
++** 0 1: STA is CF-Pollable, not requesting to be placed on the CF-Polling list
++** 1 0: STA is CF-Pollable, requesting to be placed on the CF-Polling list
++** 1 1: STA is CF-Pollable, requesting never to be polled
++** In beacon, proberesp, (re)assoc resp frames by AP:
++** 0 0: No point coordinator at AP
++** 0 1: Point coordinator at AP for delivery only (no polling)
++** 1 0: Point coordinator at AP for delivery and polling
++** 1 1: Reserved */
++IEEE16(WF_MGMT_CAP_CFPOLLABLE, 0x0004)
++IEEE16(WF_MGMT_CAP_CFPOLLREQ, 0x0008)
++/* 1=non-WEP data frames are disallowed */
++IEEE16(WF_MGMT_CAP_PRIVACY, 0x0010)
++/* In beacon, proberesp, (re)assocresp by AP/AdHoc:
++** 1=use of shortpre is allowed ("I can receive shortpre") */
++IEEE16(WF_MGMT_CAP_SHORT, 0x0020)
++IEEE16(WF_MGMT_CAP_PBCC, 0x0040)
++IEEE16(WF_MGMT_CAP_AGILITY, 0x0080)
++/* In (re)assoc request frames by STA:
++** 1=short slot time implemented and enabled
++** NB: AP shall use long slot time beginning at the next Beacon after assoc
++** of STA with this bit set to 0
++** In beacon, proberesp, (re)assoc resp frames by AP:
++** currently used slot time value: 0/1 - long/short */
++IEEE16(WF_MGMT_CAP_SHORTSLOT, 0x0400)
++/* In (re)assoc request frames by STA: 1=CCK-OFDM is implemented and enabled
++** In beacon, proberesp, (re)assoc resp frames by AP/AdHoc:
++** 1=CCK-OFDM is allowed */
++IEEE16(WF_MGMT_CAP_CCKOFDM, 0x2000)
++};
++
++
++/***********************************************************************
++** Types
++*/
++
++/* Information Element types */
++
++/* prototype structure, all IEs start with these members */
++typedef struct wlan_ie {
++ u8 eid;
++ u8 len;
++} WLAN_PACKED wlan_ie_t;
++
++/*-- Service Set Identity (SSID) -----------------*/
++typedef struct wlan_ie_ssid {
++ u8 eid;
++ u8 len;
++ u8 ssid[1]; /* may be zero */
++} WLAN_PACKED wlan_ie_ssid_t;
++
++/*-- Supported Rates -----------------------------*/
++typedef struct wlan_ie_supp_rates {
++ u8 eid;
++ u8 len;
++ u8 rates[1]; /* had better be at LEAST one! */
++} WLAN_PACKED wlan_ie_supp_rates_t;
++
++/*-- FH Parameter Set ----------------------------*/
++typedef struct wlan_ie_fh_parms {
++ u8 eid;
++ u8 len;
++ u16 dwell;
++ u8 hopset;
++ u8 hoppattern;
++ u8 hopindex;
++} WLAN_PACKED wlan_ie_fh_parms_t;
++
++/*-- DS Parameter Set ----------------------------*/
++typedef struct wlan_ie_ds_parms {
++ u8 eid;
++ u8 len;
++ u8 curr_ch;
++} WLAN_PACKED wlan_ie_ds_parms_t;
++
++/*-- CF Parameter Set ----------------------------*/
++typedef struct wlan_ie_cf_parms {
++ u8 eid;
++ u8 len;
++ u8 cfp_cnt;
++ u8 cfp_period;
++ u16 cfp_maxdur;
++ u16 cfp_durremaining;
++} WLAN_PACKED wlan_ie_cf_parms_t;
++
++/*-- TIM ------------------------------------------*/
++typedef struct wlan_ie_tim {
++ u8 eid;
++ u8 len;
++ u8 dtim_cnt;
++ u8 dtim_period;
++ u8 bitmap_ctl;
++ u8 virt_bm[1];
++} WLAN_PACKED wlan_ie_tim_t;
++
++/*-- IBSS Parameter Set ---------------------------*/
++typedef struct wlan_ie_ibss_parms {
++ u8 eid;
++ u8 len;
++ u16 atim_win;
++} WLAN_PACKED wlan_ie_ibss_parms_t;
++
++/*-- Challenge Text ------------------------------*/
++typedef struct wlan_ie_challenge {
++ u8 eid;
++ u8 len;
++ u8 challenge[1];
++} WLAN_PACKED wlan_ie_challenge_t;
++
++/*-- ERP (42) -------------------------------------*/
++typedef struct wlan_ie_erp {
++ u8 eid;
++ u8 len;
++ /* bit 0:Non ERP present
++ ** 1:Use Protection
++ ** 2:Barker Preamble mode
++ ** 3-7:reserved */
++ u8 erp;
++} WLAN_PACKED wlan_ie_erp_t;
++
++/* Types for parsing mgmt frames */
++
++/* prototype structure, all mgmt frame types will start with these members */
++typedef struct wlan_fr_mgmt {
++ u16 type;
++ u16 len; /* DOES NOT include FCS */
++ wlan_hdr_t *hdr;
++ /* used for target specific data, skb in Linux */
++ /*-- fixed fields -----------*/
++ /*-- info elements ----------*/
++} WLAN_PACKED wlan_fr_mgmt_t;
++
++/*-- Beacon ---------------------------------------*/
++typedef struct wlan_fr_beacon {
++ u16 type;
++ u16 len;
++ wlan_hdr_t *hdr;
++ /*-- fixed fields -----------*/
++ u64 *ts;
++ u16 *bcn_int;
++ u16 *cap_info;
++ /*-- info elements ----------*/
++ wlan_ie_ssid_t *ssid;
++ wlan_ie_supp_rates_t *supp_rates;
++ wlan_ie_supp_rates_t *ext_rates;
++ wlan_ie_fh_parms_t *fh_parms;
++ wlan_ie_ds_parms_t *ds_parms;
++ wlan_ie_cf_parms_t *cf_parms;
++ wlan_ie_ibss_parms_t *ibss_parms;
++ wlan_ie_tim_t *tim; /* in beacon only, not proberesp */
++ wlan_ie_erp_t *erp; /* in beacon only, not proberesp */
++} wlan_fr_beacon_t;
++#define wlan_fr_proberesp wlan_fr_beacon
++#define wlan_fr_proberesp_t wlan_fr_beacon_t
++
++/*-- IBSS ATIM ------------------------------------*/
++typedef struct wlan_fr_ibssatim {
++ u16 type;
++ u16 len;
++ wlan_hdr_t *hdr;
++ /*-- fixed fields -----------*/
++ /*-- info elements ----------*/
++ /* this frame type has a null body */
++} wlan_fr_ibssatim_t;
++
++/*-- Disassociation -------------------------------*/
++typedef struct wlan_fr_disassoc {
++ u16 type;
++ u16 len;
++ wlan_hdr_t *hdr;
++ /*-- fixed fields -----------*/
++ u16 *reason;
++ /*-- info elements ----------*/
++} wlan_fr_disassoc_t;
++
++/*-- Association Request --------------------------*/
++typedef struct wlan_fr_assocreq {
++ u16 type;
++ u16 len;
++ wlan_hdr_t *hdr;
++ /*-- fixed fields -----------*/
++ u16 *cap_info;
++ u16 *listen_int;
++ /*-- info elements ----------*/
++ wlan_ie_ssid_t *ssid;
++ wlan_ie_supp_rates_t *supp_rates;
++ wlan_ie_supp_rates_t *ext_rates;
++} wlan_fr_assocreq_t;
++
++/*-- Association Response -------------------------*/
++typedef struct wlan_fr_assocresp {
++ u16 type;
++ u16 len;
++ wlan_hdr_t *hdr;
++ /*-- fixed fields -----------*/
++ u16 *cap_info;
++ u16 *status;
++ u16 *aid;
++ /*-- info elements ----------*/
++ wlan_ie_supp_rates_t *supp_rates;
++ wlan_ie_supp_rates_t *ext_rates;
++} wlan_fr_assocresp_t;
++
++/*-- Reassociation Request ------------------------*/
++typedef struct wlan_fr_reassocreq {
++ u16 type;
++ u16 len;
++ wlan_hdr_t *hdr;
++ /*-- fixed fields -----------*/
++ u16 *cap_info;
++ u16 *listen_int;
++ u8 *curr_ap;
++ /*-- info elements ----------*/
++ wlan_ie_ssid_t *ssid;
++ wlan_ie_supp_rates_t *supp_rates;
++ wlan_ie_supp_rates_t *ext_rates;
++} wlan_fr_reassocreq_t;
++
++/*-- Reassociation Response -----------------------*/
++typedef struct wlan_fr_reassocresp {
++ u16 type;
++ u16 len;
++ wlan_hdr_t *hdr;
++ /*-- fixed fields -----------*/
++ u16 *cap_info;
++ u16 *status;
++ u16 *aid;
++ /*-- info elements ----------*/
++ wlan_ie_supp_rates_t *supp_rates;
++ wlan_ie_supp_rates_t *ext_rates;
++} wlan_fr_reassocresp_t;
++
++/*-- Probe Request --------------------------------*/
++typedef struct wlan_fr_probereq {
++ u16 type;
++ u16 len;
++ wlan_hdr_t *hdr;
++ /*-- fixed fields -----------*/
++ /*-- info elements ----------*/
++ wlan_ie_ssid_t *ssid;
++ wlan_ie_supp_rates_t *supp_rates;
++ wlan_ie_supp_rates_t *ext_rates;
++} wlan_fr_probereq_t;
++
++/*-- Authentication -------------------------------*/
++typedef struct wlan_fr_authen {
++ u16 type;
++ u16 len;
++ wlan_hdr_t *hdr;
++ /*-- fixed fields -----------*/
++ u16 *auth_alg;
++ u16 *auth_seq;
++ u16 *status;
++ /*-- info elements ----------*/
++ wlan_ie_challenge_t *challenge;
++} wlan_fr_authen_t;
++
++/*-- Deauthenication -----------------------------*/
++typedef struct wlan_fr_deauthen {
++ u16 type;
++ u16 len;
++ wlan_hdr_t *hdr;
++ /*-- fixed fields -----------*/
++ u16 *reason;
++ /*-- info elements ----------*/
++} wlan_fr_deauthen_t;
++
++/* Types for building mgmt frames */
++
++/* Warning. Several types used in below structs are
++** in fact variable length. Use structs with such fields with caution */
++typedef struct auth_frame_body {
++ u16 auth_alg;
++ u16 auth_seq;
++ u16 status;
++ wlan_ie_challenge_t challenge;
++} WLAN_PACKED auth_frame_body_t;
++
++typedef struct assocresp_frame_body {
++ u16 cap_info;
++ u16 status;
++ u16 aid;
++ wlan_ie_supp_rates_t rates;
++} WLAN_PACKED assocresp_frame_body_t;
++
++typedef struct reassocreq_frame_body {
++ u16 cap_info;
++ u16 listen_int;
++ u8 current_ap[ETH_ALEN];
++ wlan_ie_ssid_t ssid;
++/* access to this one is disabled since ssid_t is variable length: */
++ /* wlan_ie_supp_rates_t rates; */
++} WLAN_PACKED reassocreq_frame_body_t;
++
++typedef struct reassocresp_frame_body {
++ u16 cap_info;
++ u16 status;
++ u16 aid;
++ wlan_ie_supp_rates_t rates;
++} WLAN_PACKED reassocresp_frame_body_t;
++
++typedef struct deauthen_frame_body {
++ u16 reason;
++} WLAN_PACKED deauthen_frame_body_t;
++
++typedef struct disassoc_frame_body {
++ u16 reason;
++} WLAN_PACKED disassoc_frame_body_t;
++
++typedef struct probereq_frame_body {
++ wlan_ie_ssid_t ssid;
++ wlan_ie_supp_rates_t rates;
++} WLAN_PACKED probereq_frame_body_t;
++
++typedef struct proberesp_frame_body {
++ u8 timestamp[8];
++ u16 beacon_int;
++ u16 cap_info;
++ wlan_ie_ssid_t ssid;
++/* access to these is disabled since ssid_t is variable length: */
++ /* wlan_ie_supp_rates_t rates; */
++ /* fhps_t fhps; */
++ /* dsps_t dsps; */
++ /* cfps_t cfps; */
++} WLAN_PACKED proberesp_frame_body_t;
++
++
++/***********************************************************************
++** Functions
++*/
++
++/* Helpers for parsing mgmt frames */
++void wlan_mgmt_decode_ibssatim(wlan_fr_ibssatim_t *f);
++void wlan_mgmt_decode_assocreq(wlan_fr_assocreq_t *f);
++void wlan_mgmt_decode_assocresp(wlan_fr_assocresp_t *f);
++void wlan_mgmt_decode_authen(wlan_fr_authen_t *f);
++void wlan_mgmt_decode_beacon(wlan_fr_beacon_t *f);
++void wlan_mgmt_decode_deauthen(wlan_fr_deauthen_t *f);
++void wlan_mgmt_decode_disassoc(wlan_fr_disassoc_t *f);
++void wlan_mgmt_decode_probereq(wlan_fr_probereq_t *f);
++void wlan_mgmt_decode_proberesp(wlan_fr_proberesp_t *f);
++void wlan_mgmt_decode_reassocreq(wlan_fr_reassocreq_t *f);
++void wlan_mgmt_decode_reassocresp(wlan_fr_reassocresp_t *f);
++
++/* Helpers for building mgmt frames */
++static inline u8*
++wlan_fill_ie_ssid(u8 *p, int len, const char *ssid)
++{
++ struct wlan_ie_ssid *ie = (void*)p;
++ ie->eid = WLAN_EID_SSID;
++ ie->len = len;
++ memcpy(ie->ssid, ssid, len);
++ return p + len + 2;
++}
++/* This controls whether we create 802.11g 'ext supported rates' IEs
++** or just create overlong 'supported rates' IEs instead
++** (non-11g compliant) */
++#define WE_OBEY_802_11G 1
++static inline u8*
++wlan_fill_ie_rates(u8 *p, int len, const u8 *rates)
++{
++ struct wlan_ie_supp_rates *ie = (void*)p;
++#if WE_OBEY_802_11G
++ if (len > 8 ) len = 8;
++#endif
++ /* supported rates (1 to 8 octets) */
++ ie->eid = WLAN_EID_SUPP_RATES;
++ ie->len = len;
++ memcpy(ie->rates, rates, len);
++ return p + len + 2;
++}
++/* This one wouldn't create an IE at all if not needed */
++static inline u8*
++wlan_fill_ie_rates_ext(u8 *p, int len, const u8 *rates)
++{
++ struct wlan_ie_supp_rates *ie = (void*)p;
++#if !WE_OBEY_802_11G
++ return p;
++#endif
++ len -= 8;
++ if (len <= 0) return p;
++ /* ext supported rates */
++ ie->eid = WLAN_EID_EXT_RATES;
++ ie->len = len;
++ memcpy(ie->rates, rates+8, len);
++ return p + len + 2;
++}
++static inline u8*
++wlan_fill_ie_ds_parms(u8 *p, int channel)
++{
++ struct wlan_ie_ds_parms *ie = (void*)p;
++ ie->eid = WLAN_EID_DS_PARMS;
++ ie->len = 1;
++ ie->curr_ch = channel;
++ return p + sizeof(*ie);
++}
++static inline u8*
++wlan_fill_ie_ibss_parms(u8 *p, int atim_win)
++{
++ struct wlan_ie_ibss_parms *ie = (void*)p;
++ ie->eid = WLAN_EID_IBSS_PARMS;
++ ie->len = 2;
++ ie->atim_win = atim_win;
++ return p + sizeof(*ie);
++}
++static inline u8*
++wlan_fill_ie_tim(u8 *p, int rem, int period, int bcast,
++ int ofs, int len, const u8 *vbm)
++{
++ struct wlan_ie_tim *ie = (void*)p;
++ ie->eid = WLAN_EID_TIM;
++ ie->len = len + 3;
++ ie->dtim_cnt = rem;
++ ie->dtim_period = period;
++ ie->bitmap_ctl = ofs | (bcast!=0);
++ if (vbm)
++ memcpy(ie->virt_bm, vbm, len); /* min 1 byte */
++ else
++ ie->virt_bm[0] = 0;
++ return p + len + 3 + 2;
++}
+Index: linux-2.6.23/drivers/net/wireless/Kconfig
+===================================================================
+--- linux-2.6.23.orig/drivers/net/wireless/Kconfig 2008-01-20 21:13:17.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/Kconfig 2008-01-20 21:15:12.000000000 +0000
+@@ -5,6 +5,36 @@
+ menu "Wireless LAN"
+ depends on !S390
+
++config NET_RADIO
++ bool "Wireless LAN drivers (non-hamradio) & Wireless Extensions"
++ select WIRELESS_EXT
++ ---help---
++ Support for wireless LANs and everything having to do with radio,
++ but not with amateur radio or FM broadcasting.
++
++ Saying Y here also enables the Wireless Extensions (creates
++ /proc/net/wireless and enables iwconfig access). The Wireless
++ Extension is a generic API allowing a driver to expose to the user
++ space configuration and statistics specific to common Wireless LANs.
++ The beauty of it is that a single set of tool can support all the
++ variations of Wireless LANs, regardless of their type (as long as
++ the driver supports Wireless Extension). Another advantage is that
++ these parameters may be changed on the fly without restarting the
++ driver (or Linux). If you wish to use Wireless Extensions with
++ wireless PCMCIA (PC-) cards, you need to say Y here; you can fetch
++ the tools from
++ <http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html>.
++
++config NET_WIRELESS_RTNETLINK
++ bool "Wireless Extension API over RtNetlink"
++ depends on NET_RADIO
++ ---help---
++ Support the Wireless Extension API over the RtNetlink socket
++ in addition to the traditional ioctl interface (selected above).
++
++ For now, few tools use this facility, but it might grow in the
++ future. The only downside is that it adds 4.5 kB to your kernel.
++
+ config WLAN_PRE80211
+ bool "Wireless LAN (pre-802.11)"
+ depends on NETDEVICES
+@@ -650,6 +680,7 @@ config P54_PCI
+
+ source "drivers/net/wireless/iwlwifi/Kconfig"
+ source "drivers/net/wireless/hostap/Kconfig"
++source "drivers/net/wireless/acx/Kconfig"
+ source "drivers/net/wireless/bcm43xx/Kconfig"
+ source "drivers/net/wireless/b43/Kconfig"
+ source "drivers/net/wireless/b43legacy/Kconfig"
+Index: linux-2.6.23/drivers/net/wireless/Makefile
+===================================================================
+--- linux-2.6.23.orig/drivers/net/wireless/Makefile 2008-01-20 21:13:17.000000000 +0000
++++ linux-2.6.23/drivers/net/wireless/Makefile 2008-01-20 21:13:40.000000000 +0000
+@@ -34,6 +34,8 @@ obj-$(CONFIG_PCMCIA_ATMEL) += atmel
+
+ obj-$(CONFIG_PRISM54) += prism54/
+
++obj-$(CONFIG_ACX) += acx/
++
+ obj-$(CONFIG_HOSTAP) += hostap/
+ obj-$(CONFIG_BCM43XX) += bcm43xx/
+ obj-$(CONFIG_B43) += b43/
diff --git a/packages/linux/linux-rp-2.6.24/htcuni.patch b/packages/linux/linux-rp-2.6.24/htcuni.patch
new file mode 100644
index 0000000000..f462650566
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/htcuni.patch
@@ -0,0 +1,7928 @@
+---
+ arch/arm/Kconfig | 2
+ arch/arm/mach-pxa/Kconfig | 89 +
+ arch/arm/mach-pxa/Makefile | 1
+ arch/arm/mach-pxa/generic.c | 13
+ arch/arm/mach-pxa/htcuniversal/Makefile | 19
+ arch/arm/mach-pxa/htcuniversal/htcuniversal.c | 468 +++++
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c | 917 +++++++++++
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h | 65
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c | 143 +
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c | 61
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c | 135 +
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h | 17
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c | 87 +
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c | 226 ++
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c | 212 ++
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c | 167 ++
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h | 16
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c | 69
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c | 97 +
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c | 490 ++++++
+ arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c | 71
+ arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h | 20
+ drivers/input/keyboard/Kconfig | 7
+ drivers/input/keyboard/Makefile | 1
+ drivers/input/keyboard/asic3_keys.c | 131 +
+ drivers/leds/Kconfig | 7
+ drivers/leds/Makefile | 1
+ drivers/leds/leds-asic3.c | 189 ++
+ drivers/mfd/Kconfig | 10
+ drivers/mfd/Makefile | 2
+ drivers/mfd/asic3_base.c | 1208 +++++++++++++++
+ drivers/mfd/soc-core.c | 106 +
+ drivers/mfd/soc-core.h | 30
+ drivers/mmc/host/Kconfig | 6
+ drivers/mmc/host/Makefile | 1
+ drivers/mmc/host/asic3_mmc.c | 900 +++++++++++
+ drivers/mmc/host/asic3_mmc.h | 25
+ drivers/serial/pxa.c | 22
+ include/asm-arm/arch-pxa/clock.h | 27
+ include/asm-arm/arch-pxa/htcuniversal-asic.h | 213 ++
+ include/asm-arm/arch-pxa/htcuniversal-gpio.h | 220 ++
+ include/asm-arm/arch-pxa/htcuniversal-init.h | 14
+ include/asm-arm/arch-pxa/htcuniversal.h | 3
+ include/asm-arm/arch-pxa/irqs.h | 2
+ include/asm-arm/arch-pxa/pxa-pm_ll.h | 6
+ include/asm-arm/arch-pxa/pxa-regs.h | 2
+ include/asm-arm/arch-pxa/serial.h | 78
+ include/asm-arm/hardware/asic3_keys.h | 18
+ include/asm-arm/hardware/asic3_leds.h | 34
+ include/asm-arm/hardware/ipaq-asic3.h | 602 +++++++
+ include/linux/backlight.h | 7
+ include/linux/gpiodev.h | 44
+ include/linux/input_pda.h | 47
+ include/linux/ioport.h | 1
+ include/linux/soc/asic3_base.h | 104 +
+ include/linux/soc/tmio_mmc.h | 17
+ 56 files changed, 7469 insertions(+), 1 deletion(-)
+
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/Makefile 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,19 @@
++#
++# Makefile for HTC Universal
++#
++
++snd-htcuniversal-ak4641-objs := htcuniversal_ak4641.o
++
++obj-$(CONFIG_MACH_HTCUNIVERSAL) += htcuniversal.o
++obj-$(CONFIG_HTCUNIVERSAL_CORE) += htcuniversal_core.o
++obj-$(CONFIG_HTCUNIVERSAL_POWER) += htcuniversal_power2.o
++obj-$(CONFIG_HTCUNIVERSAL_LCD) += htcuniversal_lcd.o
++obj-$(CONFIG_HTCUNIVERSAL_BACKLIGHT) += htcuniversal_bl.o
++obj-$(CONFIG_HTCUNIVERSAL_TS2) += htcuniversal_ts2.o
++obj-$(CONFIG_HTCUNIVERSAL_BUTTONS) += htcuniversal_buttons.o
++obj-$(CONFIG_HTCUNIVERSAL_BLUETOOTH) += htcuniversal_bt.o
++obj-$(CONFIG_HTCUNIVERSAL_PHONE) += htcuniversal_phone.o
++obj-$(CONFIG_HTCUNIVERSAL_ASIC3_LEDS) += htcuniversal_asic3_leds.o
++obj-$(CONFIG_HTCUNIVERSAL_UDC) += htcuniversal_udc.o
++
++obj-$(CONFIG_HTCUNIVERSAL_AK4641) += htcuniversal_ak4641.o
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,468 @@
++/*
++ * Hardware definitions for HTC Universal
++ *
++ * Copyright (c) 2006 Oleg Gusev
++ *
++ * Use consistent with the GNU GPL is permitted,
++ * provided that this copyright notice is
++ * preserved in its entirety in all copies and derived works.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/irq.h>
++#include <linux/input.h>
++#include <linux/gpio_keys.h>
++#include <linux/soc/asic3_base.h>
++
++#include <asm/mach-types.h>
++#include <asm/hardware.h>
++#include <asm/setup.h>
++
++#include <asm/mach/irq.h>
++#include <asm/mach/arch.h>
++
++#include <asm/arch/bitfield.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/serial.h>
++#include <asm/arch/pxa27x_keyboard.h>
++#include <asm/arch/pxafb.h>
++#include <asm/arch/irda.h>
++#include <asm/arch/ohci.h>
++
++#include <asm/arch/htcuniversal.h>
++#include <asm/arch/htcuniversal-gpio.h>
++#include <asm/arch/htcuniversal-init.h>
++#include <asm/arch/htcuniversal-asic.h>
++
++#include <asm/hardware/ipaq-asic3.h>
++
++#include "../generic.h"
++
++#include "htcuniversal_bt.h"
++#include "htcuniversal_phone.h"
++#include "tsc2046_ts.h"
++
++/*
++ * IRDA
++ */
++
++static void htcuniversal_irda_transceiver_mode(struct device *dev, int mode)
++{
++ /* */
++}
++
++static struct pxaficp_platform_data htcuniversal_ficp_platform_data = {
++ .transceiver_cap = IR_SIRMODE | IR_FIRMODE,
++ .transceiver_mode = htcuniversal_irda_transceiver_mode,
++};
++
++/*
++ * Bluetooth - Relies on other loadable modules, like ASIC3 and Core,
++ * so make the calls indirectly through pointers. Requires that the
++ * htcuniversal_bt module be loaded before any attempt to use
++ * bluetooth (obviously).
++ */
++
++static struct htcuniversal_bt_funcs bt_funcs;
++
++static void
++htcuniversal_bt_configure( int state )
++{
++ if (bt_funcs.configure != NULL)
++ bt_funcs.configure( state );
++}
++
++static struct htcuniversal_phone_funcs phone_funcs;
++
++static void
++htcuniversal_phone_configure( int state )
++{
++ if (phone_funcs.configure != NULL)
++ phone_funcs.configure( state );
++}
++
++//void htcuniversal_ll_pm_init(void);
++
++extern struct platform_device htcuniversal_bl;
++static struct platform_device htcuniversal_lcd = { .name = "htcuniversal_lcd", };
++//static struct platform_device htcuniversal_kbd = { .name = "htcuniversal_kbd", };
++static struct platform_device htcuniversal_buttons = { .name = "htcuniversal_buttons", };
++//static struct platform_device htcuniversal_ts = { .name = "htcuniversal_ts", };
++//static struct platform_device htcuniversal_bt = { .name = "htcuniversal_bt", };
++//static struct platform_device htcuniversal_phone = { .name = "htcuniversal_phone", };
++static struct platform_device htcuniversal_power = { .name = "htcuniversal_power", };
++static struct platform_device htcuniversal_udc = { .name = "htcuniversal_udc", };
++
++static struct tsc2046_mach_info htcuniversal_ts_platform_data = {
++ .port = 1,
++ .clock = CKEN_SSP1,
++ .pwrbit_X = 1,
++ .pwrbit_Y = 1,
++ .irq = 0 /* asic3 irq */
++};
++
++static struct platform_device htcuniversal_ts = {
++ .name = "htcuniversal_ts",
++ .dev = {
++ .platform_data = &htcuniversal_ts_platform_data,
++ },
++};
++
++
++/* Bluetooth */
++
++static struct platform_device htcuniversal_bt = {
++ .name = "htcuniversal_bt",
++ .id = -1,
++ .dev = {
++ .platform_data = &bt_funcs,
++ },
++};
++
++static struct platform_device htcuniversal_phone = {
++ .name = "htcuniversal_phone",
++ .id = -1,
++ .dev = {
++ .platform_data = &phone_funcs,
++ },
++};
++
++/* PXA2xx Keys */
++
++static struct gpio_keys_button htcuniversal_button_table[] = {
++ { KEY_POWER, GPIO_NR_HTCUNIVERSAL_KEY_ON_N, 1 },
++};
++
++static struct gpio_keys_platform_data htcuniversal_pxa_keys_data = {
++ .buttons = htcuniversal_button_table,
++ .nbuttons = ARRAY_SIZE(htcuniversal_button_table),
++};
++
++static struct platform_device htcuniversal_pxa_keys = {
++ .name = "gpio-keys",
++ .dev = {
++ .platform_data = &htcuniversal_pxa_keys_data,
++ },
++ .id = -1,
++};
++
++/****************************************************************
++ * Keyboard
++ ****************************************************************/
++
++static struct pxa27x_keyboard_platform_data htcuniversal_kbd = {
++ .nr_rows = 8,
++ .nr_cols = 8,
++ .keycodes = {
++ {
++ /* row 0 */
++ KEY_ENTER,
++ KEY_MINUS,
++ KEY_ESC,
++ KEY_1,
++ KEY_TAB,
++ KEY_CAPSLOCK,
++ KEY_LEFTSHIFT,
++ KEY_RIGHTALT, /* Fn */
++ }, { /* row 1 */
++ KEY_COMMA,
++ KEY_EQUAL,
++ KEY_F1,
++ KEY_2,
++ KEY_Q,
++ KEY_A,
++ KEY_Z,
++ KEY_LEFTCTRL,
++ }, { /* row 2 */
++ KEY_UP,
++ KEY_I,
++ KEY_F2,
++ KEY_3,
++ KEY_W,
++ KEY_S,
++ KEY_X,
++ KEY_F6,
++ }, { /* row 3 */
++ KEY_DOT,
++ KEY_O,
++ KEY_F3,
++ KEY_4,
++ KEY_E,
++ KEY_D,
++ KEY_C,
++ KEY_LEFTALT,
++ }, { /* row 4 */
++ KEY_F9,
++ KEY_P,
++ KEY_F4,
++ KEY_5,
++ KEY_R,
++ KEY_F,
++ KEY_V,
++ KEY_SPACE,
++ }, { /* row 5 */
++ KEY_RIGHT,
++ KEY_BACKSPACE,
++ KEY_F5,
++ KEY_6,
++ KEY_T,
++ KEY_G,
++ KEY_B,
++ KEY_F7,
++ }, { /* row 6 */
++ KEY_F9,
++ KEY_K,
++ KEY_9,
++ KEY_7,
++ KEY_Y,
++ KEY_H,
++ KEY_N,
++ KEY_LEFT,
++ }, { /* row 7 */
++ KEY_F10,
++ KEY_L,
++ KEY_0,
++ KEY_8,
++ KEY_U,
++ KEY_J,
++ KEY_M,
++ KEY_DOWN,
++ },
++ },
++ .gpio_modes = {
++ GPIO_NR_HTCUNIVERSAL_KP_MKIN0_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKIN1_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKIN2_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKIN3_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKIN4_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKIN5_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKIN6_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKIN7_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT0_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT1_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT2_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT3_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT4_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT5_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT6_MD,
++ GPIO_NR_HTCUNIVERSAL_KP_MKOUT7_MD,
++ },
++};
++
++static struct platform_device htcuniversal_pxa_keyboard = {
++ .name = "pxa27x-keyboard",
++ .id = -1,
++ .dev = {
++ .platform_data = &htcuniversal_kbd,
++ },
++};
++/* Core Hardware Functions */
++
++struct platform_device htcuniversal_core = {
++ .name = "htcuniversal_core",
++ .id = 0,
++ .dev = {
++ .platform_data = NULL,
++ },
++};
++
++static struct platform_device *devices[] __initdata = {
++ &htcuniversal_core,
++// &htcuniversal_flash,
++ &htcuniversal_pxa_keyboard,
++ &htcuniversal_pxa_keys,
++};
++
++static struct platform_device *htcuniversal_asic3_devices[] __initdata = {
++ &htcuniversal_lcd,
++#ifdef CONFIG_HTCUNIVERSAL_BACKLIGHT
++ &htcuniversal_bl,
++#endif
++ &htcuniversal_buttons,
++ &htcuniversal_ts,
++ &htcuniversal_bt,
++ &htcuniversal_phone,
++ &htcuniversal_power,
++ &htcuniversal_udc,
++};
++
++static struct asic3_platform_data htcuniversal_asic3_platform_data = {
++
++ /* Setting ASIC3 GPIO registers to the below initialization states
++ * HTC Universal asic3 information:
++ * http://wiki.xda-developers.com/index.php?pagename=UniversalASIC3
++ * http://wiki.xda-developers.com/index.php?pagename=ASIC3
++ *
++ * dir: Direction of the GPIO pin. 0: input, 1: output.
++ * If unknown, set as output to avoid power consuming floating input nodes
++ * init: Initial state of the GPIO bits
++ *
++ * These registers are configured as they are on Wince.
++ */
++ .gpio_a = {
++ .dir = (1<<GPIOA_LCD_PWR5_ON) |
++ (1<<GPIOA_FLASHLIGHT) |
++ (1<<GPIOA_UNKNOWN9) |
++ (1<<GPIOA_SPK_PWR2_ON) |
++ (1<<GPIOA_UNKNOWN4) |
++ (1<<GPIOA_EARPHONE_PWR_ON)|
++ (1<<GPIOA_AUDIO_PWR_ON) |
++ (1<<GPIOA_SPK_PWR1_ON) |
++ (1<<GPIOA_I2C_EN),
++ .init = (1<<GPIOA_LCD_PWR5_ON) |
++ (1<<GPIOA_I2C_EN),
++ .sleep_out = 0x0000,
++ .batt_fault_out = 0x0000,
++ .alt_function = 0x0000,
++ .sleep_conf = 0x000c,
++ },
++ .gpio_b = {
++ .dir = 0xc142,
++ .init = 0x8842, // TODO: 0x0900
++ .sleep_out = 0x0000,
++ .batt_fault_out = 0x0000,
++ .alt_function = 0x0000,
++ .sleep_conf = 0x000c,
++ },
++ .gpio_c = {
++ .dir = 0xc7e7,
++ .init = 0xc6e0, // TODO: 0x8000
++ .sleep_out = 0x0000,
++ .batt_fault_out = 0x0000,
++ .alt_function = 0x0007, // GPIOC_LED_RED | GPIOC_LED_GREEN | GPIOC_LED_BLUE
++ .sleep_conf = 0x000c,
++ },
++ .gpio_d = {
++ .dir = 0xffc0,
++ .init = 0x7840, // TODO: 0x0000
++ .sleep_out = 0x0000,
++ .batt_fault_out = 0x0000,
++ .alt_function = 0x0000,
++ .sleep_conf = 0x0008,
++ },
++ .bus_shift = 1,
++ .irq_base = HTCUNIVERSAL_ASIC3_IRQ_BASE,
++
++ .child_platform_devs = htcuniversal_asic3_devices,
++ .num_child_platform_devs = ARRAY_SIZE(htcuniversal_asic3_devices),
++};
++
++static struct resource htcuniversal_asic3_resources[] = {
++ [0] = {
++ .start = HTCUNIVERSAL_ASIC3_GPIO_PHYS,
++ .end = HTCUNIVERSAL_ASIC3_GPIO_PHYS + IPAQ_ASIC3_MAP_SIZE,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = HTCUNIVERSAL_IRQ(ASIC3_EXT_INT),
++ .end = HTCUNIVERSAL_IRQ(ASIC3_EXT_INT),
++ .flags = IORESOURCE_IRQ,
++ },
++ [2] = {
++ .start = HTCUNIVERSAL_ASIC3_MMC_PHYS,
++ .end = HTCUNIVERSAL_ASIC3_MMC_PHYS + IPAQ_ASIC3_MAP_SIZE,
++ .flags = IORESOURCE_MEM,
++ },
++ [3] = {
++ .start = HTCUNIVERSAL_IRQ(ASIC3_SDIO_INT_N),
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++struct platform_device htcuniversal_asic3 = {
++ .name = "asic3",
++ .id = 0,
++ .num_resources = ARRAY_SIZE(htcuniversal_asic3_resources),
++ .resource = htcuniversal_asic3_resources,
++ .dev = { .platform_data = &htcuniversal_asic3_platform_data, },
++};
++EXPORT_SYMBOL(htcuniversal_asic3);
++
++static struct pxafb_mode_info htcuniversal_lcd_modes[] = {
++{
++ .pixclock = 96153,
++ .xres = 480,
++ .yres = 640,
++ .bpp = 16,
++ .hsync_len = 4,
++ .vsync_len = 1,
++ .left_margin = 20,
++ .right_margin = 8,
++ .upper_margin = 7,
++ .lower_margin = 8,
++
++// .sync = FB_SYNC_HOR_LOW_ACT|FB_SYNC_VERT_LOW_ACT,
++
++},
++};
++
++static struct pxafb_mach_info sony_acx526akm = {
++ .modes = htcuniversal_lcd_modes,
++ .num_modes = ARRAY_SIZE(htcuniversal_lcd_modes),
++
++ /* fixme: use constants defined in pxafb.h */
++ .lccr0 = 0x00000080,
++ .lccr3 = 0x00400000,
++// .lccr4 = 0x80000000,
++};
++
++static void __init htcuniversal_init_irq(void)
++{
++ pxa27x_init_irq();
++}
++
++static struct platform_pxa_serial_funcs htcuniversal_pxa_bt_funcs = {
++ .configure = htcuniversal_bt_configure,
++};
++static struct platform_pxa_serial_funcs htcuniversal_pxa_phone_funcs = {
++ .configure = htcuniversal_phone_configure,
++};
++
++/* USB OHCI */
++
++static int htcuniversal_ohci_init(struct device *dev)
++{
++ /* missing GPIO setup here */
++
++ /* got the value from wince */
++ UHCHR=UHCHR_CGR;
++
++ return 0;
++}
++
++static struct pxaohci_platform_data htcuniversal_ohci_platform_data = {
++ .port_mode = PMM_PERPORT_MODE,
++ .init = htcuniversal_ohci_init,
++};
++
++static void __init htcuniversal_map_io(void)
++{
++ pxa_map_io();
++
++ pxa_set_btuart_info(&htcuniversal_pxa_bt_funcs);
++ pxa_set_ffuart_info(&htcuniversal_pxa_phone_funcs);
++}
++
++static void __init htcuniversal_init(void)
++{
++ set_pxa_fb_info(&sony_acx526akm);
++
++ platform_device_register(&htcuniversal_asic3);
++ platform_add_devices(devices, ARRAY_SIZE(devices) );
++ pxa_set_ficp_info(&htcuniversal_ficp_platform_data);
++ pxa_set_ohci_info(&htcuniversal_ohci_platform_data);
++}
++
++MACHINE_START(HTCUNIVERSAL, "HTC Universal")
++ /* Maintainer xanadux.org */
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .boot_params = 0xa0000100,
++ .map_io = htcuniversal_map_io,
++ .init_irq = htcuniversal_init_irq,
++ .init_machine = htcuniversal_init,
++ .timer = &pxa_timer,
++MACHINE_END
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,917 @@
++/*
++ * Audio support for codec Asahi Kasei AK4641
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Copyright (c) 2006 Giorgio Padrin <giorgio@mandarinlogiq.org>
++ *
++ * History:
++ *
++ * 2006-03 Written -- Giorgio Padrin
++ * 2006-09 Test and debug on machine (HP hx4700) -- Elshin Roman <roxmail@list.ru>
++ *
++ * AK4641 codec device driver
++ *
++ * Copyright (c) 2005 SDG Systems, LLC
++ *
++ * Based on code:
++ * Copyright (c) 2002 Hewlett-Packard Company
++ * Copyright (c) 2000 Nicolas Pitre <nico@cam.org>
++ * Copyright (c) 2000 Lernout & Hauspie Speech Products, N.V.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License.
++ */
++
++#include <sound/driver.h>
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/types.h>
++#include <linux/string.h>
++#include <linux/slab.h>
++#include <linux/errno.h>
++#include <linux/ioctl.h>
++#include <linux/delay.h>
++#include <linux/i2c.h>
++
++#include <sound/core.h>
++#include <sound/control.h>
++#include <sound/initval.h>
++#include <sound/info.h>
++
++#include "htcuniversal_ak4641.h"
++
++/* Registers */
++#define R_PM1 0x00
++#define R_PM2 0x01
++#define R_SEL1 0x02
++#define R_SEL2 0x03
++#define R_MODE1 0x04
++#define R_MODE2 0x05
++#define R_DAC 0x06
++#define R_MIC 0x07
++#define REG_TIMER 0x08
++#define REG_ALC1 0x09
++#define REG_ALC2 0x0a
++#define R_PGA 0x0b
++#define R_ATTL 0x0c
++#define R_ATTR 0x0d
++#define REG_VOL 0x0e
++#define R_STATUS 0x0f
++#define REG_EQLO 0x10
++#define REG_EQMID 0x11
++#define REG_EQHI 0x12
++#define REG_BTIF 0x13
++
++/* Register flags */
++/* REG_PWR1 */
++#define R_PM1_PMADC 0x01
++#define R_PM1_PMMIC 0x02
++#define REG_PWR1_PMAUX 0x04
++#define REG_PWR1_PMMO 0x08
++#define R_PM1_PMLO 0x10
++/* unused 0x20 */
++/* unused 0x40 */
++#define R_PM1_PMVCM 0x80
++
++/* REG_PWR2 */
++#define R_PM2_PMDAC 0x01
++/* unused 0x02 */
++/* unused 0x04 */
++#define R_PM2_PMMO2 0x08
++#define REG_PWR2_MCKAC 0x10
++/* unused 0x20 */
++/* unused 0x40 */
++#define R_PM2_MCKPD 0x80
++
++/* REG_SEL1 */
++#define R_SEL1_PSMO2 0x01
++/* unused 0x02 */
++/* unused 0x04 */
++/* unused 0x08 */
++#define REG_SEL1_MICM 0x10
++#define REG_SEL1_DACM 0x20
++#define REG_SEL1_PSMO 0x40
++#define REG_SEL1_MOGN 0x80
++
++/* REG_SEL2 */
++#define R_SEL2_PSLOR 0x01
++#define R_SEL2_PSLOL 0x02
++#define REG_SEL2_AUXSI 0x04
++/* unused 0x08 */
++#define REG_SEL2_MICL 0x10
++#define REG_SEL2_AUXL 0x20
++/* unused 0x40 */
++#define R_SEL2_DACL 0x80
++
++/* REG_MODE1 */
++#define REG_MODE1_DIF0 0x01
++#define REG_MODE1_DIF1 0x02
++/* unused 0x04 */
++/* unused 0x08 */
++/* unused 0x10 */
++/* unused 0x20 */
++/* unused 0x40 */
++/* unused 0x80 */
++
++/* REG_MODE2 */
++/* unused 0x01 */
++#define REG_MODE2_LOOP 0x02
++#define REG_MODE2_HPM 0x04
++/* unused 0x08 */
++/* unused 0x10 */
++#define REG_MODE2_MCK0 0x20
++#define REG_MODE2_MCK1 0x40
++/* unused 0x80 */
++
++/* REG_DAC */
++#define REG_DAC_DEM0 0x01
++#define REG_DAC_DEM1 0x02
++#define REG_DAC_EQ 0x04
++/* unused 0x08 */
++#define R_DAC_DATTC 0x10
++#define R_DAC_SMUTE 0x20
++#define REG_DAC_TM 0x40
++/* unused 0x80 */
++
++/* REG_MIC */
++#define R_MIC_MGAIN 0x01
++#define R_MIC_MSEL 0x02
++#define R_MIC_MICAD 0x04
++#define R_MIC_MPWRI 0x08
++#define R_MIC_MPWRE 0x10
++#define REG_MIC_AUXAD 0x20
++/* unused 0x40 */
++/* unused 0x80 */
++
++/* REG_TIMER */
++
++#define REG_TIMER_LTM0 0x01
++#define REG_TIMER_LTM1 0x02
++#define REG_TIMER_WTM0 0x04
++#define REG_TIMER_WTM1 0x08
++#define REG_TIMER_ZTM0 0x10
++#define REG_TIMER_ZTM1 0x20
++/* unused 0x40 */
++/* unused 0x80 */
++
++#define REG_ALC1_LMTH 0x01
++#define REG_ALC1_RATT 0x02
++#define REG_ALC1_LMAT0 0x04
++#define REG_ALC1_LMAT1 0x08
++#define REG_ALC1_ZELM 0x10
++#define REG_ALC1_ALC1 0x20
++/* unused 0x40 */
++/* unused 0x80 */
++
++/* REG_ALC2 */
++
++/* REG_PGA */
++
++/* REG_ATTL */
++
++/* REG_ATTR */
++
++/* REG_VOL */
++#define REG_VOL_ATTM 0x80
++
++/* REG_STATUS */
++#define R_STATUS_DTMIC 0x01
++
++/* REG_EQ controls use 4 bits for each of 5 EQ levels */
++
++/* Bluetooth not yet implemented */
++#define REG_BTIF_PMAD2 0x01
++#define REG_BTIF_PMDA2 0x02
++#define REG_BTIF_PMBIF 0x04
++#define REG_BTIF_ADC2 0x08
++#define REG_BTIF_DAC2 0x10
++#define REG_BTIF_BTFMT0 0x20
++#define REG_BTIF_BTFMT1 0x40
++/* unused 0x80 */
++
++/* begin {{ I2C }} */
++
++static struct i2c_driver snd_ak4641_i2c_driver = {
++ .driver = {
++ .name = "ak4641-i2c"
++ },
++};
++
++static int snd_ak4641_i2c_init(void)
++{
++ return i2c_add_driver(&snd_ak4641_i2c_driver);
++}
++
++static void snd_ak4641_i2c_free(void)
++{
++ i2c_del_driver(&snd_ak4641_i2c_driver);
++}
++
++static inline int snd_ak4641_i2c_probe(struct snd_ak4641 *ak)
++{
++ if (ak->i2c_client.adapter == NULL) return -EINVAL;
++ ak->i2c_client.addr = 0x12;
++ if (i2c_smbus_xfer(ak->i2c_client.adapter, ak->i2c_client.addr,
++ 0, 0, 0, I2C_SMBUS_QUICK, NULL) < 0)
++ return -ENODEV;
++ else return 0;
++}
++
++static int snd_ak4641_i2c_attach(struct snd_ak4641 *ak)
++{
++ int ret = 0;
++ if ((ret = snd_ak4641_i2c_probe(ak)) < 0) return ret;
++ snprintf(ak->i2c_client.name, sizeof(ak->i2c_client.name),
++ "ak4641-i2c at %d-%04x",
++ i2c_adapter_id(ak->i2c_client.adapter), ak->i2c_client.addr);
++ return i2c_attach_client(&ak->i2c_client);
++}
++
++static void snd_ak4641_i2c_detach(struct snd_ak4641 *ak)
++{
++ i2c_detach_client(&ak->i2c_client);
++}
++
++/* end {{ I2C }} */
++
++
++/* begin {{ Registers & Cache Ops }} */
++
++static int snd_ak4641_hwsync(struct snd_ak4641 *ak, int read, u8 reg)
++{
++ struct i2c_msg msgs[2];
++ u8 buf[2];
++ int ret;
++
++ snd_assert(reg < ARRAY_SIZE(ak->regs), return -EINVAL);
++
++ /* setup i2c msgs */
++ msgs[0].addr = ak->i2c_client.addr;
++ msgs[0].flags = 0;
++ msgs[0].buf = buf;
++ if (!read)
++ msgs[0].len = 2;
++ else {
++ msgs[1].flags = I2C_M_RD;
++ msgs[1].addr = msgs[0].addr;
++ msgs[1].buf = msgs[0].buf + 1;
++ msgs[0].len = 1;
++ msgs[1].len = 1;
++ }
++
++ buf[0] = reg;
++
++ /* regs[reg] -> buffer, on write */
++ if (!read) buf[1] = ak->regs[reg];
++
++ /* i2c transfer */
++ ret = i2c_transfer(ak->i2c_client.adapter, msgs, read ? 2 : 1);
++ if (ret != (read ? 2 : 1)) return ret; /* transfer error */ //@@ error ret < 0, or not ?
++
++ /* regs[reg] <- buffer, on read */
++ if (read) ak->regs[reg] = buf[1];
++
++ return 0;
++}
++
++static inline int snd_ak4641_hwsync_read(struct snd_ak4641 *ak, u8 reg)
++{
++ return snd_ak4641_hwsync(ak, 1, reg);
++}
++
++static inline int snd_ak4641_hwsync_write(struct snd_ak4641 *ak, u8 reg)
++{
++ return snd_ak4641_hwsync(ak, 0, reg);
++}
++
++static int snd_ak4641_hwsync_read_all(struct snd_ak4641 *ak)
++{
++ u8 reg;
++ for (reg = 0; reg < ARRAY_SIZE(ak->regs); reg++)
++ if (snd_ak4641_hwsync_read(ak, reg) < 0) return -1;
++ return 0;
++}
++
++static int snd_ak4641_hwsync_write_all(struct snd_ak4641 *ak)
++{
++ u8 reg;
++ for (reg = 0; reg < ARRAY_SIZE(ak->regs); reg++)
++ if (snd_ak4641_hwsync_write(ak, reg) < 0) return -1;
++ return 0;
++}
++
++static int snd_ak4641_reg_changed(struct snd_ak4641 *ak, u8 reg)
++{
++ if ((reg != R_PGA && ak->powered_on) ||
++ (reg == R_PGA && (ak->regs[R_PM1] & R_PM1_PMMIC)))
++ return snd_ak4641_hwsync_write(ak, reg);
++ return 0;
++}
++
++/* end {{ Registers & Cache Ops }}*/
++
++
++static inline void snd_ak4641_lock(struct snd_ak4641 *ak)
++{
++ down(&ak->sem);
++}
++
++static inline void snd_ak4641_unlock(struct snd_ak4641 *ak)
++{
++ up(&ak->sem);
++}
++
++#define WRITE_MASK(i, val, mask) (((i) & ~(mask)) | ((val) & (mask)))
++
++
++/* begin {{ Controls }} */
++
++#define INV_RANGE(val, mask) \
++ (~(val) & (mask))
++
++/*-begin----------------------------------------------------------*/
++static int snd_ak4641_actl_playback_volume_info(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_info *uinfo)
++{
++ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
++ uinfo->count = 2;
++ uinfo->value.integer.min = 0;
++ uinfo->value.integer.max = 0xff;
++ return 0;
++}
++
++static int snd_ak4641_actl_playback_volume_get(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
++
++ snd_ak4641_lock(ak);
++ ucontrol->value.integer.value[0] = INV_RANGE(ak->regs[R_ATTL], 0xff);
++ ucontrol->value.integer.value[1] = INV_RANGE(ak->regs[R_ATTR], 0xff);
++ snd_ak4641_unlock(ak);
++ return 0;
++}
++
++static int snd_ak4641_actl_playback_volume_put(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
++
++ snd_ak4641_lock(ak);
++ ak->regs[R_ATTL] = INV_RANGE(ucontrol->value.integer.value[0], 0xff);
++ ak->regs[R_ATTR] = INV_RANGE(ucontrol->value.integer.value[1], 0xff);
++ snd_ak4641_reg_changed(ak, R_ATTL);
++ snd_ak4641_reg_changed(ak, R_ATTR);
++ snd_ak4641_unlock(ak);
++ return 0;
++}
++/*-end------------------------------------------------------------*/
++
++/*-begin----------------------------------------------------------*/
++static int snd_ak4641_actl_mic_gain_info(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_info *uinfo)
++{
++ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
++ uinfo->count = 1;
++ uinfo->value.integer.min = 0;
++ uinfo->value.integer.max = 0x7f;
++ return 0;
++}
++
++static int snd_ak4641_actl_mic_gain_get(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
++
++ ucontrol->value.integer.value[0] = ak->regs[R_PGA];
++ return 0;
++}
++
++static int snd_ak4641_actl_mic_gain_put(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
++
++ snd_ak4641_lock(ak);
++ ak->regs[R_PGA] = ucontrol->value.integer.value[0];
++ snd_ak4641_reg_changed(ak, R_PGA);
++ snd_ak4641_unlock(ak);
++ return 0;
++}
++/*-end------------------------------------------------------------*/
++
++#define ACTL(ctl_name, _name) \
++static struct snd_kcontrol_new snd_ak4641_actl_ ## ctl_name = \
++{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = _name, \
++ .info = snd_ak4641_actl_ ## ctl_name ## _info, \
++ .get = snd_ak4641_actl_ ## ctl_name ## _get, .put = snd_ak4641_actl_ ## ctl_name ## _put };
++
++ACTL(playback_volume, "Master Playback Volume")
++ACTL(mic_gain, "Mic Capture Gain")
++
++struct snd_ak4641_uctl_bool {
++ int (*get) (struct snd_ak4641 *uda);
++ int (*set) (struct snd_ak4641 *uda, int on);
++};
++
++static int snd_ak4641_actl_bool_info(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_info *uinfo)
++{
++ uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
++ uinfo->count = 1;
++ return 0;
++}
++
++static int snd_ak4641_actl_bool_get(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
++ struct snd_ak4641_uctl_bool *uctl =
++ (struct snd_ak4641_uctl_bool *) kcontrol->private_value;
++
++ ucontrol->value.integer.value[0] = uctl->get(ak);
++ return 0;
++}
++
++static int snd_ak4641_actl_bool_put(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ struct snd_ak4641 *ak = (struct snd_ak4641 *) kcontrol->private_data;
++ struct snd_ak4641_uctl_bool *uctl =
++ (struct snd_ak4641_uctl_bool *) kcontrol->private_value;
++
++ return uctl->set(ak, ucontrol->value.integer.value[0]);
++}
++
++/*-begin----------------------------------------------------------*/
++static int snd_ak4641_uctl_playback_switch_get(struct snd_ak4641 *ak)
++{
++ return (ak->regs[R_DAC] & R_DAC_SMUTE) == 0x00;
++}
++
++static int snd_ak4641_uctl_playback_switch_set(struct snd_ak4641 *ak, int on)
++{
++ snd_ak4641_lock(ak);
++ ak->regs[R_DAC] = WRITE_MASK(ak->regs[R_DAC],
++ on ? 0x00 : R_DAC_SMUTE, R_DAC_SMUTE);
++ snd_ak4641_reg_changed(ak, R_DAC);
++ snd_ak4641_unlock(ak);
++ return 0;
++}
++/*-end------------------------------------------------------------*/
++
++/*-begin----------------------------------------------------------*/
++static int snd_ak4641_uctl_mic_boost_get(struct snd_ak4641 *ak)
++{
++ return (ak->regs[R_MIC] & R_MIC_MGAIN) == R_MIC_MGAIN;
++}
++
++static int snd_ak4641_uctl_mic_boost_set(struct snd_ak4641 *ak, int on)
++{
++ snd_ak4641_lock(ak);
++ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC],
++ on ? R_MIC_MGAIN : 0x00, R_MIC_MGAIN);
++ snd_ak4641_reg_changed(ak, R_MIC);
++ snd_ak4641_unlock(ak);
++ return 0;
++}
++/*-end------------------------------------------------------------*/
++
++/*-begin----------------------------------------------------------*/
++static int snd_ak4641_uctl_mono_out_get(struct snd_ak4641 *ak)
++{
++ printk("mono_out status 0x%8.8x -> 0x%8.8x\n",ak->regs[R_SEL1], ak->regs[R_SEL1] & REG_SEL1_PSMO);
++ return (ak->regs[R_SEL1] & REG_SEL1_PSMO) == REG_SEL1_PSMO;
++}
++
++static int snd_ak4641_uctl_mono_out_set(struct snd_ak4641 *ak, int on)
++{
++ printk("phone mic enable called. on=%d\n",on);
++ snd_ak4641_lock(ak);
++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], on ? R_PM1_PMMIC : 0x00, R_PM1_PMMIC);
++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], on ? REG_PWR1_PMMO : 0x00, REG_PWR1_PMMO);
++ snd_ak4641_reg_changed(ak, R_PM1);
++
++ snd_ak4641_hwsync_write(ak, R_PGA); /* mic PGA gain is reset when PMMIC = 0 */
++
++ /* internal mic */
++ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], on ? R_MIC_MPWRI : 0x0, R_MIC_MPWRI);
++ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], 0x0, R_MIC_MSEL);
++ snd_ak4641_hwsync_write(ak, R_MIC);
++
++// ak->regs[REG_BTIF] = WRITE_MASK(ak->regs[REG_BTIF], 0x0, REG_BTIF_DAC2);
++// snd_ak4641_hwsync_write(ak, REG_BTIF);
++ /* */
++// ak->regs[REG_VOL] = WRITE_MASK(ak->regs[REG_VOL], on ? REG_VOL_ATTM : 0x00, REG_VOL_ATTM);
++// ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_MOGN : 0x00, REG_SEL1_MOGN);
++ ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_MICM : 0x00, REG_SEL1_MICM);
++ ak->regs[R_SEL1] = WRITE_MASK(ak->regs[R_SEL1], on ? REG_SEL1_PSMO : 0x00, REG_SEL1_PSMO);
++ snd_ak4641_reg_changed(ak, R_SEL1);
++ snd_ak4641_unlock(ak);
++ return 0;
++}
++/*-end------------------------------------------------------------*/
++
++#define ACTL_BOOL(ctl_name, _name) \
++static struct snd_ak4641_uctl_bool snd_ak4641_actl_ ## ctl_name ## _pvalue = \
++{ .get = snd_ak4641_uctl_ ## ctl_name ## _get, \
++ .set = snd_ak4641_uctl_ ## ctl_name ## _set }; \
++static struct snd_kcontrol_new snd_ak4641_actl_ ## ctl_name = \
++{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = _name, .info = snd_ak4641_actl_bool_info, \
++ .get = snd_ak4641_actl_bool_get, .put = snd_ak4641_actl_bool_put, \
++ .private_value = (unsigned long) &snd_ak4641_actl_ ## ctl_name ## _pvalue };
++
++ACTL_BOOL(playback_switch, "Master Playback Switch")
++ACTL_BOOL(mic_boost, "Mic Boost (+20dB)")
++ACTL_BOOL(mono_out, "Phone mic enable")
++
++static void snd_ak4641_headphone_on(struct snd_ak4641 *ak, int on);
++static void snd_ak4641_speaker_on(struct snd_ak4641 *ak, int on);
++static void snd_ak4641_select_mic(struct snd_ak4641 *ak);
++
++void snd_ak4641_hp_connected(struct snd_ak4641 *ak, int connected)
++{
++ snd_ak4641_lock(ak);
++ if (connected != ak->hp_connected) {
++ ak->hp_connected = connected;
++
++ /* headphone or speaker, on playback */
++ if (ak->playback_on) {
++ if (connected) {
++ snd_ak4641_headphone_on(ak, 1);
++ snd_ak4641_speaker_on(ak, 0);
++ } else {
++ snd_ak4641_speaker_on(ak, 1);
++ snd_ak4641_headphone_on(ak, 0);
++ }
++ }
++
++ /* headset or internal mic, on capture */
++ if (ak->capture_on)
++ snd_ak4641_select_mic(ak);
++ }
++ snd_ak4641_unlock(ak);
++}
++
++/* end {{ Controls }} */
++
++
++/* begin {{ Headphone Detected Notification }} */
++
++static void snd_ak4641_hp_detected_w_fn(void *p)
++{
++ struct snd_ak4641 *ak = (struct snd_ak4641 *)p;
++
++ snd_ak4641_hp_connected(ak, ak->hp_detected.detected);
++}
++
++void snd_ak4641_hp_detected(struct snd_ak4641 *ak, int detected)
++{
++ if (detected != ak->hp_detected.detected) {
++ ak->hp_detected.detected = detected;
++ queue_work(ak->hp_detected.wq, &ak->hp_detected.w);
++ }
++}
++
++static int snd_ak4641_hp_detected_init(struct snd_ak4641 *ak)
++{
++ INIT_WORK(&ak->hp_detected.w, snd_ak4641_hp_detected_w_fn);
++ ak->hp_detected.detected = ak->hp_connected;
++ ak->hp_detected.wq = create_singlethread_workqueue("ak4641");
++ if (ak->hp_detected.wq) return 0;
++ else return -1;
++}
++
++static void snd_ak4641_hp_detected_free(struct snd_ak4641 *ak)
++{
++ destroy_workqueue(ak->hp_detected.wq);
++}
++
++/* end {{ Headphone Detected Notification }} */
++
++
++/* begin {{ Codec Control }} */
++
++static void snd_ak4641_headphone_on(struct snd_ak4641 *ak, int on)
++{
++ if (on) {
++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO);
++ snd_ak4641_hwsync_write(ak, R_PM1);
++ ak->headphone_out_on(1);
++ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
++ R_SEL2_PSLOL | R_SEL2_PSLOR,
++ R_SEL2_PSLOL | R_SEL2_PSLOR);
++ snd_ak4641_hwsync_write(ak, R_SEL2);
++ } else {
++ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
++ 0x00, R_SEL2_PSLOL | R_SEL2_PSLOR);
++ snd_ak4641_hwsync_write(ak, R_SEL2);
++ ak->headphone_out_on(0);
++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO);
++ snd_ak4641_hwsync_write(ak, R_PM1);
++ }
++}
++
++static void snd_ak4641_speaker_on(struct snd_ak4641 *ak, int on)
++{
++ if (on) {
++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO);
++ snd_ak4641_hwsync_write(ak, R_PM1);
++ ak->speaker_out_on(1);
++ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
++ R_SEL2_PSLOL | R_SEL2_PSLOR,
++ R_SEL2_PSLOL | R_SEL2_PSLOR);
++ snd_ak4641_hwsync_write(ak, R_SEL2);
++ } else {
++ ak->regs[R_SEL2] = WRITE_MASK(ak->regs[R_SEL2],
++ 0x00, R_SEL2_PSLOL | R_SEL2_PSLOR);
++ snd_ak4641_hwsync_write(ak, R_SEL2);
++ ak->speaker_out_on(0);
++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO);
++ snd_ak4641_hwsync_write(ak, R_PM1);
++ }
++}
++
++static inline int snd_ak4641_power_on(struct snd_ak4641 *ak)
++{
++ ak->reset_pin(1);
++ ak->power_on_chip(1);
++ msleep(1);
++ ak->reset_pin(0);
++ ak->powered_on = 1;
++ return 0;
++}
++
++static inline int snd_ak4641_power_off(struct snd_ak4641 *ak)
++{
++ ak->powered_on = 0;
++ ak->power_on_chip(0);
++ return 0;
++}
++
++static inline void snd_ak4641_headphone_out_on(struct snd_ak4641 *ak, int on)
++{
++ if (ak->headphone_out_on) ak->headphone_out_on(on);
++}
++
++static inline void snd_ak4641_speaker_out_on(struct snd_ak4641 *ak, int on)
++{
++ if (ak->speaker_out_on) ak->speaker_out_on(on);
++}
++
++static int snd_ak4641_playback_on(struct snd_ak4641 *ak)
++{
++ if (ak->playback_on) return 0;
++
++ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2],
++ R_PM2_PMDAC, R_PM2_MCKPD | R_PM2_PMDAC);
++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMLO, R_PM1_PMLO);
++ snd_ak4641_hwsync_write(ak, R_PM2);
++ snd_ak4641_hwsync_write(ak, R_PM1);
++ if (ak->hp_connected) snd_ak4641_headphone_on(ak, 1);
++ else snd_ak4641_speaker_on(ak, 1);
++
++ ak->playback_on = 1;
++
++ return 0;
++}
++
++static int snd_ak4641_playback_off(struct snd_ak4641 *ak)
++{
++ if (!ak->playback_on) return 0;
++
++ ak->playback_on = 0;
++
++ if (ak->hp_connected) snd_ak4641_headphone_on(ak, 0);
++ else snd_ak4641_speaker_on(ak, 0);
++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMLO);
++ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2],
++ (!ak->capture_on ? R_PM2_MCKPD : 0x00) | R_PM2_PMDAC,
++ R_PM2_MCKPD | R_PM2_PMDAC);
++ snd_ak4641_hwsync_write(ak, R_PM1);
++ snd_ak4641_hwsync_write(ak, R_PM2);
++
++ return 0;
++}
++
++static void snd_ak4641_select_mic(struct snd_ak4641 *ak)
++{
++ int mic = 0;
++ u8 r_mic;
++
++ if (ak->hp_connected) {
++ /* check headset mic */
++ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC], R_MIC_MPWRE, R_MIC_MPWRE);
++ snd_ak4641_hwsync_write(ak, R_MIC);
++ snd_ak4641_hwsync_read(ak, R_STATUS);
++ mic = (ak->regs[R_STATUS] & R_STATUS_DTMIC) == R_STATUS_DTMIC;
++
++ printk("htcuniversal_ak4641_select_mic: mic=%d\n",mic);
++
++ r_mic = WRITE_MASK(ak->regs[R_MIC],
++ R_MIC_MSEL | (ak->capture_on ? R_MIC_MPWRE : 0x00),
++ R_MIC_MSEL | R_MIC_MPWRI | R_MIC_MPWRE);
++ }
++ else
++ r_mic = WRITE_MASK(ak->regs[R_MIC],
++ 0x00 | (ak->capture_on ? R_MIC_MPWRI : 0x00),
++ R_MIC_MSEL | R_MIC_MPWRI | R_MIC_MPWRE);
++
++ if (r_mic != ak->regs[R_MIC]) {
++ ak->regs[R_MIC] = r_mic;
++ snd_ak4641_hwsync_write(ak, R_MIC);
++ }
++}
++
++static int snd_ak4641_capture_on(struct snd_ak4641 *ak)
++{
++ if (ak->capture_on) return 0;
++
++ if (!ak->playback_on) {
++ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2], 0x00, R_PM2_MCKPD);
++ snd_ak4641_hwsync_write(ak, R_PM2);
++ }
++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMMIC | R_PM1_PMADC,
++ R_PM1_PMMIC | R_PM1_PMADC);
++ snd_ak4641_hwsync_write(ak, R_PM1);
++ snd_ak4641_hwsync_write(ak, R_PGA); /* mic PGA gain is reset when PMMIC = 0 */
++
++ ak->capture_on = 1;
++
++ snd_ak4641_select_mic(ak);
++
++ msleep(47); /* accounts for ADC init cycle, time enough for fs >= 44.1 kHz */
++
++ return 0;
++}
++
++static int snd_ak4641_capture_off(struct snd_ak4641 *ak)
++{
++ if (!ak->capture_on) return 0;
++
++ ak->regs[R_MIC] = WRITE_MASK(ak->regs[R_MIC],
++ 0x00, R_MIC_MPWRI | R_MIC_MPWRE | R_MIC_MSEL);
++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], 0x00, R_PM1_PMMIC | R_PM1_PMADC);
++ snd_ak4641_hwsync_write(ak, R_MIC);
++ snd_ak4641_hwsync_write(ak, R_PM1);
++ if (!ak->playback_on) {
++ ak->regs[R_PM2] = WRITE_MASK(ak->regs[R_PM2], R_PM2_MCKPD, R_PM2_MCKPD);
++ snd_ak4641_hwsync_write(ak, R_PM2);
++ }
++
++ ak->capture_on = 0;
++
++ return 0;
++}
++
++int snd_ak4641_open_stream(struct snd_ak4641 *ak, int stream)
++{
++ snd_ak4641_lock(ak);
++ if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
++ ak->playback_stream_opened = 1;
++ snd_ak4641_playback_on(ak);
++ } else {
++ ak->capture_stream_opened = 1;
++ snd_ak4641_capture_on(ak);
++ }
++ snd_ak4641_unlock(ak);
++ return 0;
++}
++
++int snd_ak4641_close_stream(struct snd_ak4641 *ak, int stream)
++{
++ snd_ak4641_lock(ak);
++ if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
++ ak->playback_stream_opened = 0;
++ snd_ak4641_playback_off(ak);
++ } else {
++ ak->capture_stream_opened = 0;
++ snd_ak4641_capture_off(ak);
++ }
++ snd_ak4641_unlock(ak);
++ return 0;
++}
++
++static int snd_ak4641_init_regs(struct snd_ak4641 *ak)
++{
++ snd_ak4641_hwsync_read_all(ak);
++
++ //@@ MEMO: add some configs
++
++ ak->regs[R_PM1] = WRITE_MASK(ak->regs[R_PM1], R_PM1_PMVCM, R_PM1_PMVCM);
++ ak->regs[R_DAC] = WRITE_MASK(ak->regs[R_DAC], 0x00, R_DAC_DATTC);
++ snd_ak4641_hwsync_write(ak, R_PM1);
++ snd_ak4641_hwsync_write(ak, R_DAC);
++
++ return 0;
++}
++
++int snd_ak4641_suspend(struct snd_ak4641 *ak, pm_message_t state)
++{
++ snd_ak4641_lock(ak);
++ if (ak->playback_on) snd_ak4641_playback_off(ak);
++ if (ak->capture_on) snd_ak4641_capture_off(ak);
++ snd_ak4641_power_off(ak);
++ snd_ak4641_unlock(ak);
++ return 0;
++}
++
++int snd_ak4641_resume(struct snd_ak4641 *ak)
++{
++ snd_ak4641_lock(ak);
++ snd_ak4641_power_on(ak);
++ snd_ak4641_hwsync_write_all(ak);
++ if (ak->playback_stream_opened) snd_ak4641_playback_on(ak);
++ if (ak->capture_stream_opened) snd_ak4641_capture_on(ak);
++ snd_ak4641_unlock(ak);
++ return 0;
++}
++
++static void snd_ak4641_init_ak(struct snd_ak4641 *ak)
++{
++ init_MUTEX(&ak->sem);
++ ak->i2c_client.driver = &snd_ak4641_i2c_driver;
++}
++
++int snd_ak4641_activate(struct snd_ak4641 *ak)
++{
++ int ret = 0;
++
++ snd_ak4641_init_ak(ak);
++ snd_ak4641_lock(ak);
++ snd_ak4641_power_on(ak);
++ if ((ret = snd_ak4641_i2c_attach(ak)) < 0)
++ goto failed_i2c_attach;
++ snd_ak4641_init_regs(ak);
++ if ((ret = snd_ak4641_hp_detected_init(ak)) < 0)
++ goto failed_hp_detected_init;
++ snd_ak4641_unlock(ak);
++ return 0;
++
++ failed_hp_detected_init:
++ snd_ak4641_i2c_detach(ak);
++ failed_i2c_attach:
++ snd_ak4641_power_off(ak);
++ snd_ak4641_unlock(ak);
++ return ret;
++}
++
++void snd_ak4641_deactivate(struct snd_ak4641 *ak)
++{
++ snd_ak4641_lock(ak);
++ snd_ak4641_hp_detected_free(ak);
++ snd_ak4641_i2c_detach(ak);
++ snd_ak4641_power_off(ak);
++ snd_ak4641_unlock(ak);
++}
++
++int snd_ak4641_add_mixer_controls(struct snd_ak4641 *ak, struct snd_card *card)
++{
++ snd_ak4641_lock(ak);
++ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_playback_volume, ak));
++ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_playback_switch, ak));
++ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mic_gain, ak));
++ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mic_boost, ak));
++ snd_ctl_add(card, snd_ctl_new1(&snd_ak4641_actl_mono_out, ak));
++ snd_ak4641_unlock(ak);
++ return 0;
++}
++
++/* end {{ Codec Control }} */
++
++
++/* begin {{ Module }} */
++
++static int __init snd_ak4641_module_on_load(void)
++{
++ snd_ak4641_i2c_init();
++ return 0;
++}
++
++static void __exit snd_ak4641_module_on_unload(void)
++{
++ snd_ak4641_i2c_free();
++}
++
++module_init(snd_ak4641_module_on_load);
++module_exit(snd_ak4641_module_on_unload);
++
++EXPORT_SYMBOL(snd_ak4641_activate);
++EXPORT_SYMBOL(snd_ak4641_deactivate);
++EXPORT_SYMBOL(snd_ak4641_add_mixer_controls);
++EXPORT_SYMBOL(snd_ak4641_open_stream);
++EXPORT_SYMBOL(snd_ak4641_close_stream);
++EXPORT_SYMBOL(snd_ak4641_suspend);
++EXPORT_SYMBOL(snd_ak4641_resume);
++EXPORT_SYMBOL(snd_ak4641_hp_connected);
++EXPORT_SYMBOL(snd_ak4641_hp_detected);
++
++MODULE_AUTHOR("Giorgio Padrin");
++MODULE_DESCRIPTION("Audio support for codec Asahi Kasei AK4641");
++MODULE_LICENSE("GPL");
++
++/* end {{ Module }} */
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,65 @@
++/*
++ * Audio support for codec Asahi Kasei AK4641
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Copyright (c) 2006 Giorgio Padrin <giorgio@mandarinlogiq.org>
++ */
++
++#ifndef __SOUND_AK4641_H
++#define __SOUND_AK4641_H
++
++#include <linux/i2c.h>
++
++struct snd_ak4641 {
++ struct semaphore sem;
++
++ u8 regs[0x14]; /* registers cache */
++
++ unsigned int
++ powered_on:1,
++ playback_on:1,
++ playback_stream_opened:1,
++ capture_on:1,
++ capture_stream_opened:1;
++
++ unsigned int
++ hp_connected:1;
++
++ /* -- configuration (to fill before activation) -- */
++ void (*power_on_chip)(int on);
++ void (*reset_pin)(int on);
++ void (*headphone_out_on)(int on);
++ void (*speaker_out_on)(int on);
++
++ struct i2c_client i2c_client; /* to fill .adapter */
++ /* ----------------------------------------------- */
++
++ struct {
++ int detected;
++ struct workqueue_struct *wq;
++ struct work_struct w;
++ } hp_detected;
++};
++
++
++/* Note: opening, closing, suspending and resuming a stream
++ * require the clocks (MCLK and I2S ones) running
++ */
++
++/* don't forget to specify I2C adapter in i2c_client field */
++int snd_ak4641_activate(struct snd_ak4641 *ak);
++
++void snd_ak4641_deactivate(struct snd_ak4641 *ak);
++int snd_ak4641_add_mixer_controls(struct snd_ak4641 *ak, struct snd_card *card);
++int snd_ak4641_open_stream(struct snd_ak4641 *ak, int stream);
++int snd_ak4641_close_stream(struct snd_ak4641 *ak, int stream);
++int snd_ak4641_suspend(struct snd_ak4641 *ak, pm_message_t state);
++int snd_ak4641_resume(struct snd_ak4641 *ak);
++
++void snd_ak4641_hp_connected(struct snd_ak4641 *ak, int connected); /* non atomic context */
++void snd_ak4641_hp_detected(struct snd_ak4641 *ak, int detected); /* atomic context */
++
++#endif /* __SOUND_AK4641_H */
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,143 @@
++/*
++ * LEDs support for the HP iPaq hx4700
++ *
++ * Copyright (c) 2006 Anton Vorontsov <cbou@mail.ru>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/leds.h>
++#include <linux/soc/asic3_base.h>
++
++#include <asm/hardware/ipaq-asic3.h>
++#include <asm/mach-types.h>
++#include <asm/hardware/asic3_leds.h>
++#include <asm/arch/htcuniversal-asic.h>
++
++//FIXME
++//DEFINE_LED_TRIGGER_SHARED_GLOBAL(htcuniversal_radio_trig);
++//EXPORT_LED_TRIGGER_SHARED(htcuniversal_radio_trig);
++
++static struct asic3_led htcuniversal_leds[] = {
++ {
++ .led_cdev = {
++ .name = "htcuniversal:red",
++ .default_trigger = "htcuniversal-charging",
++ },
++ .hw_num = 2,
++
++ },
++ {
++ .led_cdev = {
++ .name = "htcuniversal:green",
++ .default_trigger = "htcuniversal-chargefull",
++ },
++ .hw_num = 1,
++ },
++ {
++ .led_cdev = {
++ .name = "htcuniversal:wifi-bt",
++ .default_trigger = "htcuniversal-radio",
++ },
++ .hw_num = 0,
++ },
++ {
++ .led_cdev = {
++ .name = "htcuniversal:phonebuttons",
++ .default_trigger = "htcuniversal-phonebuttons",
++ },
++ .hw_num = -1,
++ .gpio_num = ('D'-'A')*16+GPIOD_BL_KEYP_PWR_ON,
++ },
++ {
++ .led_cdev = {
++ .name = "htcuniversal:vibra",
++ .default_trigger = "htcuniversal-vibra",
++ },
++ .hw_num = -1,
++ .gpio_num = ('D'-'A')*16+GPIOD_VIBRA_PWR_ON,
++ },
++ {
++ .led_cdev = {
++ .name = "htcuniversal:flashlight1",
++ .default_trigger = "htcuniversal-flashlight1",
++ },
++ .hw_num = -1,
++ .gpio_num = ('A'-'A')*16+GPIOA_FLASHLIGHT,
++ },
++ {
++ .led_cdev = {
++ .name = "htcuniversal:kbdbacklight",
++ .default_trigger = "htcuniversal-kbdbacklight",
++ },
++ .hw_num = -1,
++ .gpio_num = ('D'-'A')*16+GPIOD_BL_KEYB_PWR_ON,
++ },
++};
++
++void htcuniversal_leds_release(struct device *dev)
++{
++ return;
++}
++
++static
++struct asic3_leds_machinfo htcuniversal_leds_machinfo = {
++ .num_leds = ARRAY_SIZE(htcuniversal_leds),
++ .leds = htcuniversal_leds,
++ .asic3_pdev = &htcuniversal_asic3,
++};
++
++static
++struct platform_device htcuniversal_leds_pdev = {
++ .name = "asic3-leds",
++ .dev = {
++ .platform_data = &htcuniversal_leds_machinfo,
++ .release = htcuniversal_leds_release,
++ },
++};
++
++static
++int __init htcuniversal_leds_init(void)
++{
++ int ret;
++ printk("htcuniversal LEDs Driver\n");
++// led_trigger_register_shared("htcuniversal-radio", &htcuniversal_radio_trig);
++
++ ret = asic3_leds_register();
++ if (ret) goto asic3_leds_failed;
++
++ ret = platform_device_register(&htcuniversal_leds_pdev);
++ if (ret) goto platform_device_failed;
++
++ goto success;
++
++platform_device_failed:
++ asic3_leds_unregister();
++asic3_leds_failed:
++// led_trigger_unregister_shared(htcuniversal_radio_trig);
++ printk("htcuniversal LEDs Driver failed to init");
++success:
++ return ret;
++}
++
++static
++void __exit htcuniversal_leds_exit(void)
++{
++// led_trigger_unregister_shared(htcuniversal_radio_trig);
++ platform_device_unregister(&htcuniversal_leds_pdev);
++ asic3_leds_unregister();
++ return;
++}
++
++module_init(htcuniversal_leds_init);
++module_exit(htcuniversal_leds_exit);
++
++MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>");
++MODULE_DESCRIPTION("htcuniversal LEDs driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,61 @@
++/*
++ * Use consistent with the GNU GPL is permitted,
++ * provided that this copyright notice is
++ * preserved in its entirety in all copies and derived works.
++ *
++ * Copyright (C) 2006 Paul Sokolosvky
++ * Based on code from older versions of htcuniversal_lcd.c
++ *
++ */
++
++#include <linux/types.h>
++#include <linux/platform_device.h>
++#include <asm/arch/hardware.h> /* for pxa-regs.h (__REG) */
++#include <asm/arch/pxa-regs.h>
++#include <asm/mach-types.h> /* machine_is_htcuniversal */
++//#include <linux/corgi_bl.h>
++#include <linux/backlight.h>
++#include <linux/err.h>
++
++#include <asm/arch/htcuniversal-gpio.h>
++#include <asm/arch/htcuniversal-asic.h>
++#include <asm/hardware/ipaq-asic3.h>
++#include <linux/soc/asic3_base.h>
++
++#define HTCUNIVERSAL_MAX_INTENSITY 0xc7
++
++static void htcuniversal_set_bl_intensity(int intensity)
++{
++ PWM_CTRL1 = 1; /* pre-scaler */
++ PWM_PWDUTY1 = intensity; /* duty cycle */
++ PWM_PERVAL1 = HTCUNIVERSAL_MAX_INTENSITY+1; /* period */
++
++ if (intensity > 0) {
++ pxa_set_cken(CKEN_PWM1, 1);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev,
++ (1<<GPIOD_FL_PWR_ON), (1<<GPIOD_FL_PWR_ON));
++ } else {
++ pxa_set_cken(CKEN_PWM1, 0);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev,
++ (1<<GPIOD_FL_PWR_ON), 0);
++ }
++}
++
++
++static struct generic_bl_info htcuniversal_bl_machinfo = {
++ .default_intensity = HTCUNIVERSAL_MAX_INTENSITY / 4,
++ .limit_mask = 0xff,
++ .max_intensity = HTCUNIVERSAL_MAX_INTENSITY,
++ .set_bl_intensity = htcuniversal_set_bl_intensity,
++};
++
++struct platform_device htcuniversal_bl = {
++ .name = "corgi-bl",
++ .dev = {
++ .platform_data = &htcuniversal_bl_machinfo,
++ },
++};
++
++MODULE_AUTHOR("Paul Sokolovsky <pmiscml@gmail.com>");
++MODULE_DESCRIPTION("Backlight driver for HTC Universal");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,135 @@
++/* Bluetooth interface driver for TI BRF6150 on HX4700
++ *
++ * Copyright (c) 2005 SDG Systems, LLC
++ *
++ * 2005-04-21 Todd Blumer Created.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/soc/asic3_base.h>
++
++#include <asm/hardware.h>
++#include <asm/arch/serial.h>
++#include <asm/hardware/ipaq-asic3.h>
++#include <asm/arch/htcuniversal-gpio.h>
++#include <asm/arch/htcuniversal-asic.h>
++
++#include "htcuniversal_bt.h"
++
++static uint use_led=1;
++
++static void
++htcuniversal_bt_configure( int state )
++{
++ int tries;
++
++ printk( KERN_NOTICE "htcuniversal configure bluetooth: %d\n", state );
++ switch (state) {
++
++ case PXA_UART_CFG_PRE_STARTUP:
++ break;
++
++ case PXA_UART_CFG_POST_STARTUP:
++ /* pre-serial-up hardware configuration */
++ htcuniversal_egpio_enable(1<<EGPIO5_BT_3V3_ON);
++ mdelay(50);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_PWR_ON, 1<<GPIOC_BT_PWR_ON);
++ mdelay(10);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_RESET, 0);
++ mdelay(10);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_RESET, 1<<GPIOC_BT_RESET);
++ mdelay(10);
++
++ /*
++ * BRF6150's RTS goes low when firmware is ready
++ * so check for CTS=1 (nCTS=0 -> CTS=1). Typical 150ms
++ */
++ tries = 0;
++ do {
++ mdelay(10);
++ } while ((BTMSR & MSR_CTS) == 0 && tries++ < 50);
++ if (use_led) {
++// htcuniversal_set_led(2, 16, 16);
++ }
++ break;
++
++ case PXA_UART_CFG_PRE_SHUTDOWN:
++ htcuniversal_egpio_disable(1<<EGPIO5_BT_3V3_ON );
++ mdelay(50);
++// htcuniversal_clear_led(2);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_BT_PWR_ON, 0);
++ break;
++
++ default:
++ break;
++ }
++}
++
++
++static int
++htcuniversal_bt_probe( struct platform_device *dev )
++{
++ struct htcuniversal_bt_funcs *funcs = dev->dev.platform_data;
++
++ /* configure bluetooth UART */
++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_RXD_MD );
++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_TXD_MD );
++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_UART_CTS_MD );
++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_BT_UART_RTS_MD );
++
++ funcs->configure = htcuniversal_bt_configure;
++
++ /* Make sure the LED is off */
++// htcuniversal_clear_led(2);
++
++ return 0;
++}
++
++static int
++htcuniversal_bt_remove( struct platform_device *dev )
++{
++ struct htcuniversal_bt_funcs *funcs = dev->dev.platform_data;
++
++ funcs->configure = NULL;
++
++ /* Make sure the LED is off */
++// htcuniversal_clear_led(2);
++
++ return 0;
++}
++
++static struct platform_driver bt_driver = {
++ .driver = {
++ .name = "htcuniversal_bt",
++ },
++ .probe = htcuniversal_bt_probe,
++ .remove = htcuniversal_bt_remove,
++};
++
++module_param(use_led, uint, 0);
++
++static int __init
++htcuniversal_bt_init( void )
++{
++ printk(KERN_NOTICE "htcuniversal Bluetooth Driver\n");
++ return platform_driver_register( &bt_driver );
++}
++
++static void __exit
++htcuniversal_bt_exit( void )
++{
++ platform_driver_unregister( &bt_driver );
++}
++
++module_init( htcuniversal_bt_init );
++module_exit( htcuniversal_bt_exit );
++
++MODULE_AUTHOR("Todd Blumer, SDG Systems, LLC");
++MODULE_DESCRIPTION("HTC Universal Bluetooth Support Driver");
++MODULE_LICENSE("GPL");
++
++/* vim600: set noexpandtab sw=8 ts=8 :*/
++
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,17 @@
++/*
++ * Bluetooth support file for calling bluetooth configuration functions
++ *
++ * Copyright (c) 2005 SDG Systems, LLC
++ *
++ * 2005-06 Todd Blumer Initial Revision
++ */
++
++#ifndef _HTCUNIVERSAL_BT_H
++#define _HTCUNIVERSAL_BT_H
++
++struct htcuniversal_bt_funcs {
++ void (*configure) ( int state );
++};
++
++
++#endif
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,87 @@
++/*
++ * Buttons driver for HTC Universal
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License.
++ *
++ * Copyright (C) 2005 Pawel Kolodziejski
++ * Copyright (C) 2003 Joshua Wise
++ *
++ */
++
++#include <linux/input.h>
++#include <linux/input_pda.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/irq.h>
++#include <linux/platform_device.h>
++#include <linux/gpio_keys.h>
++#include <linux/soc/asic3_base.h>
++#include <asm/mach-types.h>
++#include <asm/hardware/asic3_keys.h>
++#include <asm/arch/htcuniversal-gpio.h>
++#include <asm/arch/htcuniversal-asic.h>
++
++static struct asic3_keys_button asic3_buttons[] = {
++//{KEY_SCREEN, ASIC3_GPIOA_IRQ_BASE+GPIOA_COVER_ROTATE_N, 1, "screen_cover", EV_SW},
++//{KEY_SWITCHVIDEOMODE, ASIC3_GPIOB_IRQ_BASE+GPIOB_CLAMSHELL_N, 1, "clamshell_rotate", EV_SW},
++//{KEY_KBDILLUMTOGGLE, ASIC3_GPIOB_IRQ_BASE+GPIOB_NIGHT_SENSOR, 1, "night_sensor", EV_SW},
++{SW_LID, ASIC3_GPIOA_IRQ_BASE+GPIOA_COVER_ROTATE_N, 1, "screen_cover", EV_SW},
++{SW_TABLET_MODE, ASIC3_GPIOB_IRQ_BASE+GPIOB_CLAMSHELL_N, 1, "clamshell_rotate", EV_SW},
++//{SW_NIGHT_SENSOR, ASIC3_GPIOB_IRQ_BASE+GPIOB_NIGHT_SENSOR, 1, "night_sensor", EV_SW},
++{KEY_F10, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_BACKLIGHT_N, 1, "backlight_button"},
++{KEY_RECORD, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_RECORD_N, 1, "record_button"},
++{KEY_CAMERA, ASIC3_GPIOA_IRQ_BASE+GPIOA_BUTTON_CAMERA_N, 1, "camera_button"},
++{KEY_VOLUMEDOWN, ASIC3_GPIOA_IRQ_BASE+GPIOA_VOL_UP_N, 1, "volume_slider_down"},
++{KEY_VOLUMEUP, ASIC3_GPIOA_IRQ_BASE+GPIOA_VOL_DOWN_N, 1, "volume_slider_up"},
++{KEY_KPENTER, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_OK_N, 1, "select"},
++{KEY_RIGHT, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_RIGHT_N, 1, "right"},
++{KEY_LEFT, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_LEFT_N, 1, "left"},
++{KEY_DOWN, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_DOWN_N, 1, "down"},
++{KEY_UP, ASIC3_GPIOD_IRQ_BASE+GPIOD_KEY_UP_N, 1, "up"},
++};
++
++static struct asic3_keys_platform_data asic3_keys_data = {
++ .buttons = asic3_buttons,
++ .nbuttons = ARRAY_SIZE(asic3_buttons),
++ .asic3_dev = &htcuniversal_asic3.dev,
++};
++
++static struct platform_device htcuniversal_keys_asic3 = {
++ .name = "asic3-keys",
++ .dev = { .platform_data = &asic3_keys_data, }
++};
++
++static int __init htcuniversal_buttons_probe(struct platform_device *dev)
++{
++ platform_device_register(&htcuniversal_keys_asic3);
++ return 0;
++}
++
++static struct platform_driver htcuniversal_buttons_driver = {
++ .driver = {
++ .name = "htcuniversal_buttons",
++ },
++ .probe = htcuniversal_buttons_probe,
++};
++
++static int __init htcuniversal_buttons_init(void)
++{
++ if (!machine_is_htcuniversal())
++ return -ENODEV;
++
++ return platform_driver_register(&htcuniversal_buttons_driver);
++}
++
++static void __exit htcuniversal_buttons_exit(void)
++{
++ platform_driver_unregister(&htcuniversal_buttons_driver);
++}
++
++module_init(htcuniversal_buttons_init);
++module_exit(htcuniversal_buttons_exit);
++
++MODULE_AUTHOR ("Joshua Wise, Pawel Kolodziejski, Paul Sokolosvky");
++MODULE_DESCRIPTION ("Buttons support for HTC Universal");
++MODULE_LICENSE ("GPL");
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,226 @@
++/* Core Hardware driver for Hx4700 (Serial, ASIC3, EGPIOs)
++ *
++ * Copyright (c) 2005 SDG Systems, LLC
++ *
++ * 2005-03-29 Todd Blumer Converted basic structure to support hx4700
++ * 2005-04-30 Todd Blumer Add IRDA code from H2200
++ */
++
++#include <linux/module.h>
++#include <linux/version.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <linux/delay.h>
++#include <linux/pm.h>
++#include <linux/irq.h>
++
++#include <asm/io.h>
++#include <asm/mach/irq.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxa-pm_ll.h>
++#include <asm/arch/htcuniversal-gpio.h>
++#include <asm/arch/htcuniversal-asic.h>
++
++#include <linux/soc/asic3_base.h>
++#include <asm/hardware/ipaq-asic3.h>
++
++volatile u_int16_t *egpios;
++u_int16_t egpio_reg;
++
++static int htc_bootloader = 0; /* Is the stock HTC bootloader installed? */
++
++/*
++ * may make sense to put egpios elsewhere, but they're here now
++ * since they share some of the same address space with the TI WLAN
++ *
++ * EGPIO register is write-only
++ */
++
++void
++htcuniversal_egpio_enable( u_int16_t bits )
++{
++ unsigned long flags;
++
++ local_irq_save(flags);
++
++ egpio_reg |= bits;
++ *egpios = egpio_reg;
++
++ local_irq_restore(flags);
++}
++EXPORT_SYMBOL_GPL(htcuniversal_egpio_enable);
++
++void
++htcuniversal_egpio_disable( u_int16_t bits )
++{
++ unsigned long flags;
++
++ local_irq_save(flags);
++
++ egpio_reg &= ~bits;
++ *egpios = egpio_reg;
++
++ local_irq_restore(flags);
++}
++EXPORT_SYMBOL_GPL(htcuniversal_egpio_disable);
++
++#ifdef CONFIG_PM
++
++//void htcuniversal_ll_pm_init(void);
++
++static int htcuniversal_suspend(struct platform_device *dev, pm_message_t state)
++{
++ /* Turn off external clocks here, because htcuniversal_power and asic3_mmc
++ * scared to do so to not hurt each other. (-5 mA) */
++
++
++ /* 0x20c2 is HTC clock value
++ * CLOCK_CDEX_SOURCE 2
++ * CLOCK_CDEX_SPI 0
++ * CLOCK_CDEX_OWM 0
++ *
++ * CLOCK_CDEX_PWM0 0
++ * CLOCK_CDEX_PWM1 0
++ * CLOCK_CDEX_LED0 1
++ * CLOCK_CDEX_LED1 1
++ *
++ * CLOCK_CDEX_LED2 0
++ * CLOCK_CDEX_SD_HOST 0
++ * CLOCK_CDEX_SD_BUS 0
++ * CLOCK_CDEX_SMBUS 0
++ *
++ * CLOCK_CDEX_CONTROL_CX 0
++ * CLOCK_CDEX_EX0 1
++ * CLOCK_CDEX_EX1 0
++ * */
++ asic3_set_clock_cdex(&htcuniversal_asic3.dev, 0xffff, CLOCK_CDEX_SOURCE1
++ |CLOCK_CDEX_LED0
++ |CLOCK_CDEX_LED1
++ |CLOCK_CDEX_LED2
++ |CLOCK_CDEX_EX0
++ |CLOCK_CDEX_EX1);
++
++ *egpios = 0; /* turn off all egpio power */
++
++ /* Wake up enable. */
++ PWER = PWER_GPIO0
++ | PWER_GPIO1 /* reset */
++ | PWER_GPIO9 /* USB */
++ | PWER_GPIO10 /* AC on USB */
++ | PWER_GPIO14 /* ASIC3 mux */
++ | PWER_RTC;
++ /* Wake up on falling edge. */
++ PFER = PWER_GPIO0
++ | PWER_GPIO1
++ | PWER_GPIO9
++ | PWER_GPIO10
++ | PWER_GPIO14;
++
++ /* Wake up on rising edge. */
++ PRER = PWER_GPIO0
++ | PWER_GPIO1
++ | PWER_GPIO9
++ | PWER_GPIO10;
++ /* 3.6864 MHz oscillator power-down enable */
++ PCFR = PCFR_OPDE | PCFR_PI2CEN | PCFR_GPROD | PCFR_GPR_EN;
++
++ PGSR0 = 0x09088004;
++ PGSR1 = 0x00020002;
++ PGSR2 = 0x8001c000;
++ PGSR3 = 0x00106284;
++
++ PSLR = 0xcc000000;
++
++#if 0
++ /*
++ * If we're using bootldr and not the stock HTC bootloader,
++ * we want to wake up periodically to see if the charge is full while
++ * it is suspended. We do this with the OS timer 4 in the pxa270.
++ */
++ if (!htc_bootloader) {
++ OMCR4 = 0x4b; /* Periodic, self-resetting, 1-second timer */
++ OSMR4 = 5; /* Wake up bootldr after x seconds so it can
++ figure out what to do with the LEDs. */
++ OIER |= 0x10; /* Enable interrupt source for Timer 4 */
++ OSCR4 = 0; /* This starts the timer */
++ }
++#endif
++
++ asic3_set_extcf_select(&htcuniversal_asic3.dev, ASIC3_EXTCF_OWM_EN, 0);
++
++ return 0;
++}
++
++static int htcuniversal_resume(struct platform_device *dev)
++{
++ htcuniversal_egpio_enable(0);
++
++ return 0;
++}
++#else
++# define htcuniversal_suspend NULL
++# define htcuniversal_resume NULL
++#endif
++
++static int
++htcuniversal_core_probe( struct platform_device *dev )
++{
++
++ printk( KERN_NOTICE "HTC Universal Core Hardware Driver\n" );
++
++ egpios = (volatile u_int16_t *)ioremap_nocache(HTCUNIVERSAL_EGPIO_BASE, sizeof *egpios );
++ if (!egpios)
++ return -ENODEV;
++ else
++ printk( KERN_NOTICE "HTC Universal Core: egpio at phy=0x%8.8x is at virt=0x%p\n",
++ HTCUNIVERSAL_EGPIO_BASE, egpios );
++
++ printk("Using stock HTC first stage bootloader\n");
++ htc_bootloader = 1;
++
++// htcuniversal_ll_pm_init();
++
++ return 0;
++}
++
++static int
++htcuniversal_core_remove( struct platform_device *dev )
++{
++
++ if (egpios != NULL)
++ iounmap( (void *)egpios );
++
++ return 0;
++}
++
++static struct platform_driver htcuniversal_core_driver = {
++ .driver = {
++ .name = "htcuniversal_core",
++ },
++ .probe = htcuniversal_core_probe,
++ .remove = htcuniversal_core_remove,
++ .suspend = htcuniversal_suspend,
++ .resume = htcuniversal_resume,
++};
++
++static int __init
++htcuniversal_core_init( void )
++{
++ return platform_driver_register( &htcuniversal_core_driver );
++}
++
++
++static void __exit
++htcuniversal_core_exit( void )
++{
++ platform_driver_unregister( &htcuniversal_core_driver );
++}
++
++module_init( htcuniversal_core_init );
++module_exit( htcuniversal_core_exit );
++
++MODULE_AUTHOR("Todd Blumer, SDG Systems, LLC");
++MODULE_DESCRIPTION("HTC Universal Core Hardware Driver");
++MODULE_LICENSE("GPL");
++
++/* vim600: set noexpandtab sw=8 ts=8 :*/
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,212 @@
++/*
++ * Use consistent with the GNU GPL is permitted,
++ * provided that this copyright notice is
++ * preserved in its entirety in all copies and derived works.
++ *
++ * History:
++ *
++ * 2004-03-01 Eddi De Pieri Adapted for htcuniversal using h3900_lcd.c
++ * 2004 Shawn Anderson Lcd hacking on htcuniversal
++ * see h3900_lcd.c for more history.
++ *
++ */
++
++#include <linux/types.h>
++#include <asm/arch/hardware.h> /* for pxa-regs.h (__REG) */
++#include <linux/platform_device.h>
++#include <asm/arch/pxa-regs.h> /* LCCR[0,1,2,3]* */
++#include <asm/arch/bitfield.h> /* for pxa-regs.h (Fld, etc) */
++#include <asm/arch/pxafb.h> /* pxafb_mach_info, set_pxa_fb_info */
++#include <asm/mach-types.h> /* machine_is_htcuniversal */
++#include <linux/lcd.h> /* lcd_device */
++#include <linux/err.h>
++#include <linux/delay.h>
++
++#include <asm/arch/htcuniversal-gpio.h>
++#include <asm/arch/htcuniversal-asic.h>
++#include <asm/hardware/ipaq-asic3.h>
++#include <linux/soc/asic3_base.h>
++
++static int saved_lcdpower=-1;
++
++static int powerup_lcd(void)
++{
++ printk( KERN_INFO "htcuniversal powerup_lcd: called\n");
++
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 0);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 0);
++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 0);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 0);
++ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 0);
++#if 1
++ LCCR4|=LCCR4_PCDDIV;
++#endif
++ pxa_set_cken(CKEN_LCD, 0);
++
++ mdelay(100);
++ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 1<<GPIOA_LCD_PWR5_ON);
++ mdelay(5);
++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 1<<GPIOB_LCD_PWR3_ON);
++ mdelay(2);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 1<<GPIOC_LCD_PWR1_ON);
++ mdelay(2);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 1<<GPIOC_LCD_PWR2_ON);
++ mdelay(20);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 1<<GPIOD_LCD_PWR4_ON);
++ mdelay(1);
++ pxa_set_cken(CKEN_LCD, 1);
++
++ SET_HTCUNIVERSAL_GPIO(LCD1,1);
++ SET_HTCUNIVERSAL_GPIO(LCD2,1);
++ return 0;
++}
++
++static int powerdown_lcd(void)
++{
++ printk( KERN_INFO "htcuniversal powerdown_lcd: called\n");
++
++#if 1
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 0);
++ mdelay(100);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 0);
++ mdelay(10);
++ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 0);
++ mdelay(1);
++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 0);
++ mdelay(1);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 0);
++ pxa_set_cken(CKEN_LCD, 0);
++
++ SET_HTCUNIVERSAL_GPIO(LCD1,0);
++ SET_HTCUNIVERSAL_GPIO(LCD2,0);
++#else
++ pxa_set_cken(CKEN_LCD, 0);
++
++ SET_HTCUNIVERSAL_GPIO(LCD1,0);
++ SET_HTCUNIVERSAL_GPIO(LCD2,0);
++
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR2_ON, 0);
++ mdelay(100);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_LCD_PWR4_ON, 0);
++ mdelay(10);
++ asic3_set_gpio_out_a(&htcuniversal_asic3.dev, 1<<GPIOA_LCD_PWR5_ON, 0);
++ mdelay(1);
++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_LCD_PWR3_ON, 0);
++ mdelay(1);
++ asic3_set_gpio_out_c(&htcuniversal_asic3.dev, 1<<GPIOC_LCD_PWR1_ON, 0);
++#endif
++ return 0;
++}
++
++static int htcuniversal_lcd_set_power(struct lcd_device *lm, int power)
++{
++ /* Enable or disable power to the LCD (0: on; 4: off) */
++
++ if ( power < 1 ) {
++
++ powerup_lcd();
++
++ } else {
++
++ powerdown_lcd();
++
++ }
++
++ saved_lcdpower=power;
++
++ return 0;
++}
++
++static int htcuniversal_lcd_get_power(struct lcd_device *lm)
++{
++ /* Get the LCD panel power status (0: full on, 1..3: controller
++ * power on, flat panel power off, 4: full off) */
++
++ if (saved_lcdpower == -1)
++ {
++ htcuniversal_lcd_set_power(lm, 4);
++ saved_lcdpower=4;
++ }
++
++ return saved_lcdpower;
++}
++
++static struct lcd_ops htcuniversal_lcd_properties =
++{
++ .get_power = htcuniversal_lcd_get_power,
++ .set_power = htcuniversal_lcd_set_power,
++};
++
++static struct lcd_device *htcuniversal_lcd_dev;
++
++static int htcuniversal_lcd_probe(struct platform_device * dev)
++{
++ htcuniversal_lcd_dev = lcd_device_register("pxa2xx-fb", &dev->dev, NULL,
++ &htcuniversal_lcd_properties);
++ if (IS_ERR(htcuniversal_lcd_dev)) {
++ printk("htcuniversal_lcd_probe: error registering devices\n");
++ return -1;
++ }
++
++ return 0;
++}
++
++static int htcuniversal_lcd_remove(struct platform_device * dev)
++{
++ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 4);
++ lcd_device_unregister(htcuniversal_lcd_dev);
++
++ return 0;
++}
++
++static int htcuniversal_lcd_suspend(struct platform_device * dev, pm_message_t state)
++{
++// printk("htcuniversal_lcd_suspend: called.\n");
++ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 4);
++ return 0;
++}
++
++static int htcuniversal_lcd_resume(struct platform_device * dev)
++{
++// printk("htcuniversal_lcd_resume: called.\n");
++
++ /* */
++#if 1
++ LCCR4|=LCCR4_PCDDIV;
++#endif
++
++ htcuniversal_lcd_set_power(htcuniversal_lcd_dev, 0);
++ return 0;
++}
++
++static struct platform_driver htcuniversal_lcd_driver = {
++ .driver = {
++ .name = "htcuniversal_lcd",
++ },
++ .probe = htcuniversal_lcd_probe,
++ .remove = htcuniversal_lcd_remove,
++ .suspend = htcuniversal_lcd_suspend,
++ .resume = htcuniversal_lcd_resume,
++};
++
++static int htcuniversal_lcd_init(void)
++{
++ if (!machine_is_htcuniversal())
++ return -ENODEV;
++
++ return platform_driver_register(&htcuniversal_lcd_driver);
++}
++
++static void htcuniversal_lcd_exit(void)
++{
++ lcd_device_unregister(htcuniversal_lcd_dev);
++ platform_driver_unregister(&htcuniversal_lcd_driver);
++}
++
++module_init(htcuniversal_lcd_init);
++module_exit(htcuniversal_lcd_exit);
++
++MODULE_AUTHOR("xanadux.org");
++MODULE_DESCRIPTION("Framebuffer driver for HTC Universal");
++MODULE_LICENSE("GPL");
++
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,167 @@
++
++/* Phone interface driver for Qualcomm MSM6250 on HTC Universal
++ *
++ * Copyright (c) 2005 SDG Systems, LLC
++ *
++ * 2005-04-21 Todd Blumer Created.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/soc/asic3_base.h>
++
++#include <asm/hardware.h>
++#include <asm/arch/serial.h>
++#include <asm/hardware/ipaq-asic3.h>
++#include <asm/arch/htcuniversal-gpio.h>
++#include <asm/arch/htcuniversal-asic.h>
++
++#include "htcuniversal_phone.h"
++
++static void phone_reset(void)
++{
++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_RESET2, 0);
++
++ SET_HTCUNIVERSAL_GPIO(PHONE_RESET,0);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 0);
++ mdelay(1);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 1<<GPIOD_BB_RESET1);
++ mdelay(20);
++ SET_HTCUNIVERSAL_GPIO(PHONE_RESET,1);
++ mdelay(200);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 0);
++}
++
++static void phone_off(void)
++{
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 1<<GPIOD_BB_RESET1);
++ mdelay(2000);
++ asic3_set_gpio_out_d(&htcuniversal_asic3.dev, 1<<GPIOD_BB_RESET1, 0);
++
++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_RESET2, 1<<GPIOB_BB_RESET2);
++ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,0);
++}
++
++static void
++htcuniversal_phone_configure( int state )
++{
++ int tries;
++ unsigned short statusb;
++
++ printk( KERN_NOTICE "htcuniversal configure phone: %d\n", state );
++ switch (state) {
++
++ case PXA_UART_CFG_PRE_STARTUP:
++ break;
++
++ case PXA_UART_CFG_POST_STARTUP:
++ /* pre-serial-up hardware configuration */
++
++ SET_HTCUNIVERSAL_GPIO(PHONE_START,0); /* "bootloader" */
++ SET_HTCUNIVERSAL_GPIO(PHONE_UNKNOWN,0); /* not used */
++ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,0); /* PHONE_OFF */
++
++ phone_reset();
++
++ SET_HTCUNIVERSAL_GPIO(PHONE_START,1); /* phone */
++
++ phone_reset();
++
++ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_READY, 0);
++ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_UNKNOWN3, 0);
++
++ /*
++ */
++ tries = 0;
++ do {
++ mdelay(10);
++ statusb = asic3_get_gpio_status_b( &htcuniversal_asic3.dev );
++ } while ( (statusb & (1<<GPIOB_UMTS_DCD)) == 0 && tries++ < 200);
++
++ printk("UMTS_DCD tries=%d of 200\n",tries);
++
++ tries = 0;
++ do {
++ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,1);
++ mdelay(10);
++ SET_HTCUNIVERSAL_GPIO(PHONE_OFF,0);
++ mdelay(20);
++ statusb = asic3_get_gpio_status_b( &htcuniversal_asic3.dev );
++ } while ( (statusb & (1<<GPIOB_BB_READY)) == 0 && tries++ < 200);
++
++ printk("BB_READY tries=%d of 200\n",tries);
++
++ break;
++
++ case PXA_UART_CFG_PRE_SHUTDOWN:
++
++ phone_off();
++
++ break;
++
++ default:
++ break;
++ }
++}
++
++
++static int
++htcuniversal_phone_probe( struct platform_device *dev )
++{
++ struct htcuniversal_phone_funcs *funcs = dev->dev.platform_data;
++
++ /* configure phone UART */
++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_RXD_MD );
++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_TXD_MD );
++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS_MD );
++ pxa_gpio_mode( GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS_MD );
++
++ funcs->configure = htcuniversal_phone_configure;
++
++ return 0;
++}
++
++static int
++htcuniversal_phone_remove( struct platform_device *dev )
++{
++ struct htcuniversal_phone_funcs *funcs = dev->dev.platform_data;
++
++ funcs->configure = NULL;
++
++ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_READY, 1<<GPIOB_BB_READY);
++ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_BB_UNKNOWN3, 1<<GPIOB_BB_UNKNOWN3);
++
++ return 0;
++}
++
++static struct platform_driver phone_driver = {
++ .driver = {
++ .name = "htcuniversal_phone",
++ },
++ .probe = htcuniversal_phone_probe,
++ .remove = htcuniversal_phone_remove,
++};
++
++static int __init
++htcuniversal_phone_init( void )
++{
++ printk(KERN_NOTICE "htcuniversal Phone Driver\n");
++ return platform_driver_register( &phone_driver );
++}
++
++static void __exit
++htcuniversal_phone_exit( void )
++{
++ platform_driver_unregister( &phone_driver );
++}
++
++module_init( htcuniversal_phone_init );
++module_exit( htcuniversal_phone_exit );
++
++MODULE_AUTHOR("Todd Blumer, SDG Systems, LLC");
++MODULE_DESCRIPTION("HTC Universal Phone Support Driver");
++MODULE_LICENSE("GPL");
++
++/* vim600: set noexpandtab sw=8 ts=8 :*/
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,16 @@
++/*
++ * Bluetooth support file for calling bluetooth configuration functions
++ *
++ * Copyright (c) 2005 SDG Systems, LLC
++ *
++ * 2005-06 Todd Blumer Initial Revision
++ */
++
++#ifndef _HTCUNIVERSAL_PHONE_H
++#define _HTCUNIVERSAL_PHONE_H
++
++struct htcuniversal_phone_funcs {
++ void (*configure) ( int state );
++};
++
++#endif
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,69 @@
++/*
++ * MyPal 716 power management support for the original HTC IPL in DoC G3
++ *
++ * Use consistent with the GNU GPL is permitted, provided that this
++ * copyright notice is preserved in its entirety in all copies and
++ * derived works.
++ *
++ * Copyright (C) 2005 Pawel Kolodziejski
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/device.h>
++#include <linux/pm.h>
++
++#include <asm/mach-types.h>
++#include <asm/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/pxa-pm_ll.h>
++
++#ifdef CONFIG_PM
++
++static u32 *addr_a0040000;
++static u32 *addr_a0040004;
++static u32 *addr_a0040008;
++static u32 *addr_a004000c;
++
++static u32 save_a0040000;
++static u32 save_a0040004;
++static u32 save_a0040008;
++static u32 save_a004000c;
++
++static void htcuniversal_pxa_ll_pm_suspend(unsigned long resume_addr)
++{
++ save_a0040000 = *addr_a0040000;
++ save_a0040004 = *addr_a0040004;
++ save_a0040008 = *addr_a0040008;
++ save_a004000c = *addr_a004000c;
++
++ /* jump to PSPR */
++ *addr_a0040000 = 0xe3a00101; // mov r0, #0x40000000
++ *addr_a0040004 = 0xe380060f; // orr r0, r0, #0x0f000000
++ *addr_a0040008 = 0xe3800008; // orr r0, r0, #8
++ *addr_a004000c = 0xe590f000; // ldr pc, [r0]
++}
++
++static void htcuniversal_pxa_ll_pm_resume(void)
++{
++ *addr_a0040000 = save_a0040000;
++ *addr_a0040004 = save_a0040004;
++ *addr_a0040008 = save_a0040008;
++ *addr_a004000c = save_a004000c;
++}
++
++static struct pxa_ll_pm_ops htcuniversal_ll_pm_ops = {
++ .suspend = htcuniversal_pxa_ll_pm_suspend,
++ .resume = htcuniversal_pxa_ll_pm_resume,
++};
++
++void htcuniversal_ll_pm_init(void) {
++ addr_a0040000 = phys_to_virt(0xa0040000);
++ addr_a0040004 = phys_to_virt(0xa0040004);
++ addr_a0040008 = phys_to_virt(0xa0040008);
++ addr_a004000c = phys_to_virt(0xa004000c);
++
++ pxa_pm_set_ll_ops(&htcuniversal_ll_pm_ops);
++}
++#endif /* CONFIG_PM */
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,97 @@
++/*
++ * pda_power driver for HTC Universal
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or (at
++ * your option) any later version.
++ *
++ */
++
++#include <linux/platform_device.h>
++#include <linux/module.h>
++#include <linux/pda_power.h>
++#include <linux/soc/asic3_base.h>
++
++#include <asm/mach-types.h>
++#include <asm/hardware.h>
++#include <asm/arch/htcuniversal-gpio.h>
++#include <asm/arch/htcuniversal-asic.h>
++
++static void charge_on(int flags)
++{
++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev, 1<<GPIOB_CHARGE_EN, 0);
++}
++
++static int ac_on(void)
++{
++ return (GET_HTCUNIVERSAL_GPIO(POWER_DET) == 0);
++}
++
++static int usb_on(void)
++{
++ return (GET_HTCUNIVERSAL_GPIO(USB_DET) == 0);
++}
++
++static char *supplicants[] = {
++ "ds2760-battery.0", "backup-battery"
++};
++
++static struct pda_power_pdata power_pdata = {
++ .is_ac_online = ac_on,
++ .is_usb_online = usb_on,
++ .set_charge = charge_on,
++ .supplied_to = supplicants,
++ .num_supplicants = ARRAY_SIZE(supplicants),
++};
++
++static struct resource power_resources[] = {
++ [0] = {
++ .name = "ac",
++ .start = HTCUNIVERSAL_IRQ(POWER_DET),
++ .end = HTCUNIVERSAL_IRQ(POWER_DET),
++ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE,
++ },
++ [1] = {
++ .name = "usb",
++ .start = HTCUNIVERSAL_IRQ(USB_DET),
++ .end = HTCUNIVERSAL_IRQ(USB_DET),
++ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE,
++ },
++};
++
++static void dev_release(struct device *dev)
++{
++ return;
++}
++
++static struct platform_device power_dev =
++{
++ .name = "pda-power",
++ .id = -1,
++ .resource = power_resources,
++ .num_resources = ARRAY_SIZE(power_resources),
++ .dev =
++ {
++ .platform_data = &power_pdata,
++ .release = dev_release,
++ },
++};
++
++static int htcuniversal_power_init(void)
++{
++ return platform_device_register(&power_dev);
++}
++
++static void htcuniversal_power_exit(void)
++{
++ platform_device_unregister(&power_dev);
++
++ return;
++}
++
++module_init(htcuniversal_power_init);
++module_exit(htcuniversal_power_exit);
++
++MODULE_DESCRIPTION("Power driver for HTC Universal");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,490 @@
++/* Touch screen driver for the TI something-or-other
++ *
++ * Copyright © 2005 SDG Systems, LLC
++ *
++ * Based on code that was based on the SAMCOP driver.
++ * Copyright © 2003, 2004 Compaq Computer Corporation.
++ *
++ * Use consistent with the GNU GPL is permitted,
++ * provided that this copyright notice is
++ * preserved in its entirety in all copies and derived works.
++ *
++ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
++ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
++ * FITNESS FOR ANY PARTICULAR PURPOSE.
++ *
++ * Author: Keith Packard <keith.packard@hp.com>
++ * May 2003
++ *
++ * Updates:
++ *
++ * 2004-02-11 Michael Opdenacker Renamed names from samcop to shamcop,
++ * Goal:support HAMCOP and SAMCOP.
++ * 2004-02-14 Michael Opdenacker Temporary fix for device id handling
++ *
++ * 2005-02-18 Aric Blumer Converted basic structure to support hx4700
++ *
++ * 2005-06-07 Aric Blumer Added tssim device handling so we can
++ * hook in the fbvncserver.
++ */
++
++#include <linux/module.h>
++#include <linux/version.h>
++
++#include <linux/init.h>
++#include <linux/fs.h>
++#include <linux/cdev.h>
++#include <linux/interrupt.h>
++#include <linux/sched.h>
++#include <linux/pm.h>
++#include <linux/delay.h>
++#include <linux/input.h>
++#include <linux/platform_device.h>
++#include <linux/irq.h>
++
++#include <asm/arch/hardware.h>
++#include <asm/mach/irq.h>
++#include <asm/io.h>
++
++/* remove me */
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/htcuniversal-gpio.h>
++#include <asm/arch/htcuniversal-asic.h>
++#include <asm/mach-types.h>
++
++#include <asm/hardware/ipaq-asic3.h>
++#include <linux/soc/asic3_base.h>
++
++
++#include "tsc2046_ts.h"
++
++enum touchscreen_state {
++ STATE_WAIT_FOR_TOUCH, /* Waiting for a PEN interrupt */
++ STATE_SAMPLING /* Actively sampling ADC */
++};
++
++struct touchscreen_data {
++ enum touchscreen_state state;
++ struct timer_list timer;
++ int irq;
++ struct input_dev *input;
++ /* */
++ int port;
++ int clock;
++ int pwrbit_X;
++ int pwrbit_Y;
++ int (*pen_down)(void);
++};
++
++static unsigned long poll_sample_time = 10; /* Sample every 10 milliseconds */
++
++static struct touchscreen_data *ts_data;
++
++static int irqblock;
++
++module_param(poll_sample_time, ulong, 0644);
++MODULE_PARM_DESC(poll_sample_time, "Poll sample time");
++
++static inline void
++report_touchpanel(struct touchscreen_data *ts, int pressure, int x, int y)
++{
++ input_report_abs(ts->input, ABS_PRESSURE, pressure);
++ input_report_abs(ts->input, ABS_X, x);
++ input_report_abs(ts->input, ABS_Y, y);
++ input_sync(ts->input);
++}
++
++static void start_read(struct touchscreen_data *touch);
++
++static irqreturn_t
++pen_isr(int irq, void *irq_desc)
++{
++ struct touchscreen_data *ts = ts_data;
++
++ if(irq == ts->irq /* && !irqblock */) {
++ irqblock = 1;
++
++ /*
++ * Disable the pen interrupt. It's reenabled when the user lifts the
++ * pen.
++ */
++ disable_irq(ts->irq);
++
++ if (ts->state == STATE_WAIT_FOR_TOUCH) {
++ ts->state = STATE_SAMPLING;
++ start_read(ts);
++ } else {
++ /* Shouldn't happen */
++ printk(KERN_ERR "Unexpected ts interrupt\n");
++ }
++
++ }
++ return IRQ_HANDLED;
++}
++
++static void
++ssp_init(int port, int clock)
++{
++
++ pxa_set_cken(clock, 0);
++
++ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_CLK_MD);
++ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_FRM_MD);
++ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DO_MD);
++ pxa_gpio_mode(GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DI_MD);
++
++ SET_HTCUNIVERSAL_GPIO(SPI_FRM,1);
++
++ /* *** Set up the SPI Registers *** */
++ SSCR0_P(port) =
++ SSCR0_EDSS /* Extended Data Size Select */
++ | SSCR0_SerClkDiv(7) /* Serial Clock Rate */
++ /* Synchronous Serial Enable (Disable for now) */
++ | SSCR0_Motorola /* Motorola SPI Interface */
++ | SSCR0_DataSize(8) /* Data Size Select (24-bit) */
++ ;
++ SSCR1_P(port) = 0;
++ SSPSP_P(port) = 0;
++
++ /* Clear the Status */
++ SSSR_P(port) = SSSR_P(port) & 0x00fcfffc;
++
++ /* Now enable it */
++ SSCR0_P(port) =
++ SSCR0_EDSS /* Extended Data Size Select */
++ | SSCR0_SerClkDiv(7) /* Serial Clock Rate */
++ | SSCR0_SSE /* Synchronous Serial Enable */
++ | SSCR0_Motorola /* Motorola SPI Interface */
++ | SSCR0_DataSize(8) /* Data Size Select (24-bit) */
++ ;
++
++ pxa_set_cken(clock, 1);
++}
++
++static void
++start_read(struct touchscreen_data *touch)
++{
++ unsigned long inc = (poll_sample_time * HZ) / 1000;
++ int i;
++
++ /* Write here to the serial port. We request X and Y only for now.
++ * Then we have to wait for poll_sample_time before we read out the serial
++ * port. Then, when we read it out, we check to see if the pen is still
++ * down. If so, then we issue another request here.
++ */
++#define TS_SAMPLES 7
++
++ /*
++ * We do four samples for each, and throw out the highest and lowest, then
++ * average the other two.
++ */
++
++ for(i = 0; i < TS_SAMPLES; i++) {
++ while(!(SSSR_P(touch->port) & SSSR_TNF))
++ ;
++ /* It's not full. Write the command for X */
++ SSDR_P(touch->port) = (TSC2046_SAMPLE_X|(touch->pwrbit_X))<<16;
++ }
++
++ for(i = 0; i < TS_SAMPLES; i++) {
++ while(!(SSSR_P(touch->port) & SSSR_TNF))
++ ;
++ /* It's not full. Write the command for Y */
++ SSDR_P(touch->port) = (TSC2046_SAMPLE_Y|(touch->pwrbit_Y))<<16;
++ }
++
++ /*
++ * Enable the timer. We should get an interrupt, but we want keep a timer
++ * to ensure that we can detect missing data
++ */
++ mod_timer(&touch->timer, jiffies + inc);
++}
++
++static void
++ts_timer_callback(unsigned long data)
++{
++ struct touchscreen_data *ts = (struct touchscreen_data *)data;
++ int x, a[TS_SAMPLES], y;
++ static int oldx, oldy;
++ int ssrval;
++
++ /*
++ * Check here to see if there is anything in the SPI FIFO. If so,
++ * return it if there has been a change. If not, then we have a
++ * timeout. Generate an erro somehow.
++ */
++ ssrval = SSSR_P(ts->port);
++
++ if(ssrval & SSSR_RNE) { /* Look at Rx Not Empty bit */
++ int number_of_entries_in_fifo;
++
++ /* The FIFO is not emtpy. Good! Now make sure there are at least two
++ * entries. (Should be two exactly.) */
++
++ number_of_entries_in_fifo = ((ssrval >> 12) & 0xf) + 1;
++
++ if(number_of_entries_in_fifo < TS_SAMPLES * 2) {
++ /* Not ready yet. Come back later. */
++ unsigned long inc = (poll_sample_time * HZ) / 1000;
++ mod_timer(&ts->timer, jiffies + inc);
++ return;
++ }
++
++ if(number_of_entries_in_fifo == TS_SAMPLES * 2) {
++ int i, j;
++
++ for(i = 0; i < TS_SAMPLES; i++) {
++ a[i] = SSDR_P(ts->port);
++ }
++ /* Sort them (bubble) */
++ for(j = TS_SAMPLES - 1; j > 0; j--) {
++ for(i = 0; i < j; i++) {
++ if(a[i] > a[i + 1]) {
++ int tmp;
++ tmp = a[i+1];
++ a[i+1] = a[i];
++ a[i] = tmp;
++ }
++ }
++ }
++
++ /* Take the average of the middle two */
++ /* x = (a[TS_SAMPLES/2 - 1] + a[TS_SAMPLES/2] + a[TS_SAMPLES/2+1] + a[TS_SAMPLES/2+2]) >> 2; */
++ x = a[TS_SAMPLES/2];
++
++ for(i = 0; i < TS_SAMPLES; i++) {
++ a[i] = SSDR_P(ts->port);
++ }
++ /* Sort them (bubble) */
++ for(j = TS_SAMPLES - 1; j > 0; j--) {
++ for(i = 0; i < j; i++) {
++ if(a[i] > a[i + 1]) {
++ int tmp;
++ tmp = a[i+1];
++ a[i+1] = a[i];
++ a[i] = tmp;
++ }
++ }
++ }
++
++
++ /* Take the average of the middle two */
++ /* y = (a[TS_SAMPLES/2 - 1] + a[TS_SAMPLES/2] + a[TS_SAMPLES/2+1] + a[TS_SAMPLES/2+2]) >> 2; */
++ y = a[TS_SAMPLES/2];
++ } else {
++ /* We have an error! Too many entries. */
++ printk(KERN_ERR "TS: Expected %d entries. Got %d\n", TS_SAMPLES*2, number_of_entries_in_fifo);
++ /* Try to clear the FIFO */
++ while(number_of_entries_in_fifo--) {
++ (void)SSDR_P(ts->port);
++ }
++
++ if (ts->pen_down())
++ start_read(ts);
++
++ return;
++ }
++ } else {
++ /* Not ready yet. Come back later. */
++ unsigned long inc = (poll_sample_time * HZ) / 1000;
++ mod_timer(&ts->timer, jiffies + inc);
++ return;
++ }
++
++ /*
++ * Now we check to see if the pen is still down. If it is, then call
++ * start_read().
++ */
++ if (ts->pen_down())
++ {
++ /* Still down */
++ if(oldx != x || oldy != y) {
++ oldx = x;
++ oldy = y;
++ report_touchpanel(ts, 1, x, y);
++ }
++ start_read(ts);
++ } else {
++ /* Up */
++ report_touchpanel(ts, 0, 0, 0);
++ irqblock = 0;
++ ts->state = STATE_WAIT_FOR_TOUCH;
++ /* Re-enable pen down interrupt */
++ enable_irq(ts->irq);
++ }
++}
++
++static int pen_down(void)
++{
++ return ( asic3_get_gpio_status_a( &htcuniversal_asic3.dev ) & (1<<GPIOA_TOUCHSCREEN_N)) == 0 ;
++}
++
++static int
++ts_probe (struct platform_device *dev)
++{
++ int retval;
++ struct touchscreen_data *ts;
++ struct tsc2046_mach_info *mach = dev->dev.platform_data;
++
++ printk("htcuniversal: ts_probe\n");
++
++ ts = ts_data = kmalloc (sizeof (*ts), GFP_KERNEL);
++ if (ts == NULL) {
++ printk( KERN_NOTICE "htcuniversal_ts: unable to allocate memory\n" );
++ return -ENOMEM;
++ }
++ memset (ts, 0, sizeof (*ts));
++
++ ts->input = input_allocate_device();
++ if (ts->input == NULL) {
++ printk( KERN_NOTICE "htcuniversal_ts: unable to allocation touchscreen input\n" );
++ kfree(ts);
++ return -ENOMEM;
++ }
++ ts->input->evbit[0] = BIT(EV_ABS);
++ ts->input->absbit[0] = BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE);
++ ts->input->absmin[ABS_X] = 0;
++ ts->input->absmax[ABS_X] = 32767;
++ ts->input->absmin[ABS_Y] = 0;
++ ts->input->absmax[ABS_Y] = 32767;
++ ts->input->absmin[ABS_PRESSURE] = 0;
++ ts->input->absmax[ABS_PRESSURE] = 1;
++
++ ts->input->name = "htcuniversal_ts";
++ ts->input->phys = "touchscreen/htcuniversal_ts";
++ ts->input->private = ts;
++
++ input_register_device(ts->input);
++
++ ts->timer.function = ts_timer_callback;
++ ts->timer.data = (unsigned long)ts;
++ ts->state = STATE_WAIT_FOR_TOUCH;
++ init_timer (&ts->timer);
++
++ platform_set_drvdata(dev, ts);
++
++ ts->port=-1;
++
++ if (mach) {
++ ts->port = mach->port;
++ ts->clock = mach->clock;
++ ts->pwrbit_X = mach->pwrbit_X;
++ ts->pwrbit_Y = mach->pwrbit_Y;
++
++ /* static irq */
++ if (mach->irq)
++ ts->irq = mach->irq;
++
++ if (mach->pen_down)
++ ts->pen_down=mach->pen_down;
++ }
++
++ if (ts->port == -1)
++ {
++ printk("tsc2046: your device is not supported by this driver\n");
++ return -ENODEV;
++ }
++
++ /* *** Initialize the SSP interface *** */
++ ssp_init(ts->port, ts->clock);
++
++ while(!(SSSR_P(ts->port) & SSSR_TNF))
++ ;
++ SSDR_P(ts->port) = (TSC2046_SAMPLE_X|(ts->pwrbit_X))<<16;
++
++ for(retval = 0; retval < 100; retval++) {
++ if(SSSR_P(ts->port) & SSSR_RNE) {
++ while(SSSR_P(ts->port) & SSSR_RNE) {
++ (void)SSDR_P(ts->port);
++ }
++ break;
++ }
++ mdelay(1);
++ }
++
++ if (machine_is_htcuniversal() )
++ {
++ ts->irq = asic3_irq_base( &htcuniversal_asic3.dev ) + ASIC3_GPIOA_IRQ_BASE + GPIOA_TOUCHSCREEN_N;
++ ts->pen_down=pen_down;
++ }
++
++ retval = request_irq(ts->irq, pen_isr, IRQF_DISABLED, "tsc2046_ts", ts);
++ if(retval) {
++ printk("Unable to get interrupt\n");
++ input_unregister_device (ts->input);
++ return -ENODEV;
++ }
++ set_irq_type(ts->irq, IRQ_TYPE_EDGE_FALLING);
++
++ return 0;
++}
++
++static int
++ts_remove (struct platform_device *dev)
++{
++ struct touchscreen_data *ts = platform_get_drvdata(dev);
++
++ input_unregister_device (ts->input);
++ del_timer_sync (&ts->timer);
++ free_irq (ts->irq, ts);
++ pxa_set_cken(ts->clock, 0);
++
++ kfree(ts);
++ return 0;
++}
++
++static int
++ts_suspend (struct platform_device *dev, pm_message_t state)
++{
++ struct touchscreen_data *ts = platform_get_drvdata(dev);
++
++ disable_irq(ts->irq);
++
++ printk("htcuniversal_ts2_suspend: called.\n");
++ return 0;
++}
++
++static int
++ts_resume (struct platform_device *dev)
++{
++ struct touchscreen_data *ts = platform_get_drvdata(dev);
++
++ ts->state = STATE_WAIT_FOR_TOUCH;
++ ssp_init(ts->port, ts->clock);
++ enable_irq(ts->irq);
++
++ printk("htcuniversal_ts2_resume: called.\n");
++ return 0;
++}
++
++static struct platform_driver ts_driver = {
++ .probe = ts_probe,
++ .remove = ts_remove,
++ .suspend = ts_suspend,
++ .resume = ts_resume,
++ .driver = {
++ .name = "htcuniversal_ts",
++ },
++};
++
++
++static int
++ts_module_init (void)
++{
++ printk(KERN_NOTICE "HTC Universal Touch Screen Driver\n");
++
++ return platform_driver_register(&ts_driver);
++}
++
++static void
++ts_module_cleanup (void)
++{
++ platform_driver_unregister (&ts_driver);
++}
++
++module_init(ts_module_init);
++module_exit(ts_module_cleanup);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Aric Blumer, SDG Systems, LLC");
++MODULE_DESCRIPTION("HTC Universal Touch Screen Driver");
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,71 @@
++
++/*
++ *
++ * htcuniversal_udc.c:
++ * htcuniversal specific code for the pxa27x usb device controller.
++ *
++ * Use consistent with the GNU GPL is permitted.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/udc.h>
++#include <linux/soc/asic3_base.h>
++#include <asm/arch/htcuniversal-gpio.h>
++#include <asm/arch/htcuniversal-asic.h>
++
++static void htcuniversal_udc_command(int cmd)
++{
++ switch (cmd) {
++ case PXA2XX_UDC_CMD_DISCONNECT:
++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev,
++ 1<<GPIOB_USB_PUEN, 0);
++// SET_HTCUNIVERSAL_GPIO(USB_PUEN,0);
++ break;
++ case PXA2XX_UDC_CMD_CONNECT:
++ asic3_set_gpio_out_b(&htcuniversal_asic3.dev,
++ 1<<GPIOB_USB_PUEN, 1<<GPIOB_USB_PUEN);
++// SET_HTCUNIVERSAL_GPIO(USB_PUEN,1);
++ break;
++ default:
++ printk("_udc_control: unknown command!\n");
++ break;
++ }
++}
++
++static int htcuniversal_udc_is_connected(void)
++{
++ return (GET_HTCUNIVERSAL_GPIO(USB_DET) != 0);
++}
++
++static struct pxa2xx_udc_mach_info htcuniversal_udc_info __initdata = {
++ .udc_is_connected = htcuniversal_udc_is_connected,
++ .udc_command = htcuniversal_udc_command,
++};
++
++static int htcuniversal_udc_probe(struct platform_device * dev)
++{
++ asic3_set_gpio_dir_b(&htcuniversal_asic3.dev, 1<<GPIOB_USB_PUEN, 1<<GPIOB_USB_PUEN);
++
++ pxa_set_udc_info(&htcuniversal_udc_info);
++ return 0;
++}
++
++static struct platform_driver htcuniversal_udc_driver = {
++ .driver = {
++ .name = "htcuniversal_udc",
++ },
++ .probe = htcuniversal_udc_probe,
++};
++
++static int __init htcuniversal_udc_init(void)
++{
++ return platform_driver_register(&htcuniversal_udc_driver);
++}
++
++module_init(htcuniversal_udc_init);
++MODULE_LICENSE("GPL");
+Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,20 @@
++/*
++ * temporary TSC2046 touchscreen hack
++ */
++
++#ifndef _TSC2046_TS_H
++#define _TSC2046_TS_H
++
++struct tsc2046_mach_info {
++ int port;
++ int clock;
++ int pwrbit_X;
++ int pwrbit_Y;
++ int irq;
++ int (*pen_down)(void);
++};
++
++#define TSC2046_SAMPLE_X 0xd0
++#define TSC2046_SAMPLE_Y 0x90
++
++#endif
+Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2008-01-20 18:59:41.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2008-01-20 18:59:46.000000000 +0000
+@@ -92,6 +92,14 @@ config MACH_HX2750
+ help
+ This enables support for the HP iPAQ HX2750 handheld.
+
++config MACH_HTCUNIVERSAL
++ bool "HTC Universal"
++ select PXA27x
++ help
++ Say Y here if you intend to run this kernel on a
++ HTC Universal. Currently there is only basic support
++ for this PDA.
++
+ endchoice
+
+ endif
+@@ -111,6 +119,86 @@ endchoice
+
+ endif
+
++if MACH_HTCUNIVERSAL
++
++menu "HTC Universal support"
++
++config HTCUNIVERSAL_CORE
++ tristate "HTC Universal core"
++ depends on MACH_HTCUNIVERSAL
++ help
++ This selection enables HTC Universal core support.
++
++config HTCUNIVERSAL_UDC
++ bool "USB Device Controller support"
++ depends on MACH_HTCUNIVERSAL && HTC_ASIC3 && USB_PXA27X
++ help
++ Enables HTC Universal specific USB detection
++
++config HTCUNIVERSAL_POWER
++ tristate "HTC Universal power"
++ depends on MACH_HTCUNIVERSAL && HTC_ASIC3
++ help
++ This selection enables HTC Universal power monitoring
++ hardware support (through ASIC3).
++
++config HTCUNIVERSAL_BACKLIGHT
++ bool "HTC Universal Backlight"
++ depends on MACH_HTCUNIVERSAL && HTC_ASIC3 && BACKLIGHT_CLASS_DEVICE
++ help
++ This driver provides support for changing power and brightness
++ on HTC Universal LCD backlight.
++
++config HTCUNIVERSAL_LCD
++ tristate "HTC Universal LCD"
++ depends on MACH_HTCUNIVERSAL && HTC_ASIC3 && LCD_CLASS_DEVICE
++ help
++ This driver provides support for changing power and brightness
++ on HTC Universal LCD display.
++
++config HTCUNIVERSAL_TS2
++ tristate "HTC Universal Touchscreen (old)"
++ depends on MACH_HTCUNIVERSAL && HTC_ASIC3
++ help
++ Enable support for the HTC Universal Touchscreen Panel.
++
++config HTCUNIVERSAL_BUTTONS
++ tristate "HTC Universal buttons support"
++ depends on MACH_HTCUNIVERSAL && HTC_ASIC3
++
++config HTCUNIVERSAL_BLUETOOTH
++ tristate "HTC Universal Bluetooth"
++ depends on MACH_HTCUNIVERSAL && HTCUNIVERSAL_CORE && HTC_ASIC3
++ help
++ Enables support for the TI BRF6150 Bluetooth Module
++ in the HTC Universal.
++
++config HTCUNIVERSAL_ASIC3_LEDS
++ tristate "HTC Universal ASIC3 LED support"
++ select LEDS_ASIC3
++ depends on MACH_HTCUNIVERSAL && HTCUNIVERSAL_CORE && HTC_ASIC3
++ ---help---
++ Support for right (colors red+green+(amber)) and left (green+blue) led
++ Off/on hook keys LED backlight
++ Keyboard backlight
++ Vibra
++ Flashlight
++
++config HTCUNIVERSAL_PHONE
++ tristate "HTC Universal Phone"
++ depends on MACH_HTCUNIVERSAL && HTCUNIVERSAL_CORE && HTC_ASIC3
++ help
++ Enables support for the Qualcomm MSM6520 Phone Module
++ in the HTC Universal.
++
++config HTCUNIVERSAL_AK4641
++ depends on SND && I2C
++ tristate "AK4641 chipset support"
++
++endmenu
++
++endif
++
+ endmenu
+
+ config MACH_POODLE
+@@ -196,4 +284,3 @@ config PXA_KEYS
+ depends on (PXA25x || PXA27x) && INPUT
+
+ endif
+-
+Index: linux-2.6.23/arch/arm/mach-pxa/Makefile
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2008-01-20 18:59:41.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2008-01-20 18:59:46.000000000 +0000
+@@ -23,6 +23,7 @@ obj-$(CONFIG_MACH_POODLE) += poodle.o co
+ obj-$(CONFIG_MACH_TOSA) += tosa.o
+ obj-$(CONFIG_MACH_EM_X270) += em-x270.o
+ obj-$(CONFIG_MACH_HX2750) += hx2750.o hx2750_test.o
++obj-$(CONFIG_MACH_HTCUNIVERSAL) += htcuniversal/
+
+ ifeq ($(CONFIG_MACH_ZYLONITE),y)
+ obj-y += zylonite.o
+Index: linux-2.6.23/drivers/leds/Kconfig
+===================================================================
+--- linux-2.6.23.orig/drivers/leds/Kconfig 2008-01-20 18:59:17.000000000 +0000
++++ linux-2.6.23/drivers/leds/Kconfig 2008-01-20 18:59:46.000000000 +0000
+@@ -114,6 +114,13 @@ config LEDS_CM_X270
+ help
+ This option enables support for the CM-X270 LEDs.
+
++config LEDS_ASIC3
++ tristate "LED Support for the HTC ASIC3 chip"
++ depends on LEDS_CLASS && HTC_ASIC3
++ help
++ This option enables support for the LEDs connected to the
++ HTC ASIC3 chip.
++
+ comment "LED Triggers"
+
+ config LEDS_TRIGGERS
+Index: linux-2.6.23/drivers/leds/leds-asic3.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/leds/leds-asic3.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,189 @@
++/*
++ * LEDs support for HTC ASIC3 devices.
++ *
++ * Copyright (c) 2006 Anton Vorontsov <cbou@mail.ru>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/leds.h>
++#include "leds.h"
++
++#include <asm/hardware/ipaq-asic3.h>
++#include <linux/soc/asic3_base.h>
++#include <asm/mach-types.h>
++#include <asm/hardware/asic3_leds.h>
++
++#ifdef DEBUG
++#define dbg(msg, ...) printk(msg, __VA_ARGS__)
++#else
++#define dbg(msg, ...)
++#endif
++
++static
++void asic3_leds_set(struct led_classdev *led_cdev, enum led_brightness b)
++{
++ struct asic3_led *led = container_of(led_cdev, struct asic3_led,
++ led_cdev);
++ struct asic3_leds_machinfo *machinfo = led->machinfo;
++ struct device *asic3_dev = &machinfo->asic3_pdev->dev;
++
++ dbg("%s:%s %d(%d)-%s %d\n", __FILE__, __FUNCTION__, led->hw_num,
++ led->gpio_num, led->led_cdev.name, b);
++
++ if (led->hw_num == -1) {
++ asic3_gpio_set_value(asic3_dev, led->gpio_num, b);
++ return;
++ }
++
++ if (b == LED_OFF) {
++ asic3_set_led(asic3_dev, led->hw_num, 0, 16, 6);
++ asic3_set_gpio_out_c(asic3_dev, led->hw_num, 0);
++ }
++ else {
++ asic3_set_gpio_out_c(asic3_dev, led->hw_num, led->hw_num);
++ #ifdef CONFIG_LEDS_TRIGGER_HWTIMER
++ if (led_cdev->trigger && led_cdev->trigger->is_led_supported &&
++ (led_cdev->trigger->is_led_supported(led_cdev) &
++ LED_SUPPORTS_HWTIMER)) {
++ struct hwtimer_data *td = led_cdev->trigger_data;
++ if (!td) return;
++ asic3_set_led(asic3_dev, led->hw_num, td->delay_on/8,
++ (td->delay_on + td->delay_off)/8, 6);
++ }
++ else
++ #endif
++ asic3_set_led(asic3_dev, led->hw_num, 16, 16, 6);
++ }
++
++ return;
++}
++
++static
++int asic3_leds_probe(struct platform_device *pdev)
++{
++ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
++ struct asic3_led *leds = machinfo->leds;
++ int ret, i = 0;
++
++ dbg("%s:%s\n", __FILE__, __FUNCTION__);
++
++ // Turn on clocks early, for the case if trigger would enable
++ // led immediately after led_classdev_register().
++ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev,
++ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2,
++ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2);
++
++ for (i = 0; i < machinfo->num_leds; i++) {
++ leds[i].machinfo = machinfo;
++ leds[i].led_cdev.brightness_set = asic3_leds_set;
++ ret = led_classdev_register(&pdev->dev, &leds[i].led_cdev);
++ if (ret) {
++ printk(KERN_ERR "Error: can't register %s led\n",
++ leds[i].led_cdev.name);
++ goto out_err;
++ }
++ }
++
++ return 0;
++
++out_err:
++ while (--i >= 0) led_classdev_unregister(&leds[i].led_cdev);
++
++ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev,
++ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2,
++ 0 | 0 | 0);
++
++ return ret;
++}
++
++static
++int asic3_leds_remove(struct platform_device *pdev)
++{
++ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
++ struct asic3_led *leds = machinfo->leds;
++ int i = 0;
++
++ dbg("%s:%s\n", __FILE__, __FUNCTION__);
++
++ for (i = 0; i < machinfo->num_leds; i++)
++ led_classdev_unregister(&leds[i].led_cdev);
++
++ asic3_set_clock_cdex(&machinfo->asic3_pdev->dev,
++ CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2,
++ 0 | 0 | 0);
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++
++static
++int asic3_leds_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
++ struct asic3_led *leds = machinfo->leds;
++ int i = 0;
++
++ dbg("%s:%s\n", __FILE__, __FUNCTION__);
++
++ for (i = 0; i < machinfo->num_leds; i++)
++ led_classdev_suspend(&leds[i].led_cdev);
++
++ return 0;
++}
++
++static
++int asic3_leds_resume(struct platform_device *pdev)
++{
++ struct asic3_leds_machinfo *machinfo = pdev->dev.platform_data;
++ struct asic3_led *leds = machinfo->leds;
++ int i = 0;
++
++ dbg("%s:%s\n", __FILE__, __FUNCTION__);
++
++ for (i = 0; i < machinfo->num_leds; i++)
++ led_classdev_resume(&leds[i].led_cdev);
++
++ return 0;
++}
++
++#endif
++
++static
++struct platform_driver asic3_leds_driver = {
++ .probe = asic3_leds_probe,
++ .remove = asic3_leds_remove,
++#ifdef CONFIG_PM
++ .suspend = asic3_leds_suspend,
++ .resume = asic3_leds_resume,
++#endif
++ .driver = {
++ .name = "asic3-leds",
++ },
++};
++
++int asic3_leds_register(void)
++{
++ dbg("%s:%s\n", __FILE__, __FUNCTION__);
++ return platform_driver_register(&asic3_leds_driver);
++}
++
++void asic3_leds_unregister(void)
++{
++ platform_driver_unregister(&asic3_leds_driver);
++ return;
++}
++
++EXPORT_SYMBOL_GPL(asic3_leds_register);
++EXPORT_SYMBOL_GPL(asic3_leds_unregister);
++
++MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>");
++MODULE_DESCRIPTION("HTC ASIC3 LEDs driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.23/drivers/mfd/Kconfig
+===================================================================
+--- linux-2.6.23.orig/drivers/mfd/Kconfig 2008-01-20 18:59:38.000000000 +0000
++++ linux-2.6.23/drivers/mfd/Kconfig 2008-01-20 18:59:46.000000000 +0000
+@@ -21,6 +21,16 @@ config MFD_TSC2101
+ help
+ Support for TI TSC2101 Touchscreen and Audio Codec
+
++config HTC_ASIC3
++ tristate "HTC ASIC3 (iPAQ h1900/h3900/h4000/hx4700/rx3000) support"
++
++config HTC_ASIC3_DS1WM
++ bool "Support HTC ASIC3 builtin DS1WM block"
++ help
++ Choose Y here if you want to include support for ASIC3's builtin
++ W1 controller. Some devices do not use it, and yet other have
++ separate DS1WM controller. For them, choose N.
++
+ endmenu
+
+ menu "Multimedia Capabilities Port drivers"
+Index: linux-2.6.23/drivers/mfd/Makefile
+===================================================================
+--- linux-2.6.23.orig/drivers/mfd/Makefile 2008-01-20 18:59:38.000000000 +0000
++++ linux-2.6.23/drivers/mfd/Makefile 2008-01-20 18:59:46.000000000 +0000
+@@ -2,6 +2,8 @@
+ # Makefile for multifunction miscellaneous devices
+ #
+
++obj-$(CONFIG_HTC_ASIC3) += asic3_base.o soc-core.o
++
+ obj-$(CONFIG_MFD_SM501) += sm501.o
+
+ obj-$(CONFIG_MCP) += mcp-core.o
+Index: linux-2.6.23/drivers/mfd/asic3_base.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/mfd/asic3_base.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,1208 @@
++/*
++ * Driver interface to HTC "ASIC3"
++ *
++ * Copyright 2001 Compaq Computer Corporation.
++ * Copyright 2004-2005 Phil Blundell
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
++ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
++ * FITNESS FOR ANY PARTICULAR PURPOSE.
++ *
++ * Author: Andrew Christian
++ * <Andrew.Christian@compaq.com>
++ * October 2001
++ */
++
++#include <linux/module.h>
++#include <linux/version.h>
++#include <linux/platform_device.h>
++#include <linux/delay.h>
++#include <linux/init.h>
++#include <linux/irq.h>
++#include <linux/clk.h>
++#include <linux/ds1wm.h>
++#include <asm/arch/clock.h>
++
++#include <asm/hardware.h>
++#include <asm/irq.h>
++#include <asm/io.h>
++
++#include <asm/hardware/ipaq-asic3.h>
++#include <linux/soc/asic3_base.h>
++#include <linux/soc/tmio_mmc.h>
++#include "soc-core.h"
++
++
++struct asic3_data {
++ void *mapping;
++ unsigned int bus_shift;
++ int irq_base;
++ int irq_nr;
++
++ u16 irq_bothedge[4];
++ struct device *dev;
++
++ struct platform_device *mmc_dev;
++};
++
++static DEFINE_SPINLOCK(asic3_gpio_lock);
++
++static int asic3_remove(struct platform_device *dev);
++
++static inline unsigned long asic3_address(struct device *dev,
++ unsigned int reg)
++{
++ struct asic3_data *adata;
++
++ adata = (struct asic3_data *)dev->driver_data;
++
++ return (unsigned long)adata->mapping + (reg >> (2 - adata->bus_shift));
++}
++
++void asic3_write_register(struct device *dev, unsigned int reg, u32 value)
++{
++ __raw_writew(value, asic3_address(dev, reg));
++}
++EXPORT_SYMBOL(asic3_write_register);
++
++u32 asic3_read_register(struct device *dev, unsigned int reg)
++{
++ return __raw_readw(asic3_address(dev, reg));
++}
++EXPORT_SYMBOL(asic3_read_register);
++
++static inline void __asic3_write_register(struct asic3_data *asic,
++ unsigned int reg, u32 value)
++{
++ __raw_writew(value, (unsigned long)asic->mapping
++ + (reg >> (2 - asic->bus_shift)));
++}
++
++static inline u32 __asic3_read_register(struct asic3_data *asic,
++ unsigned int reg)
++{
++ return __raw_readw((unsigned long)asic->mapping
++ + (reg >> (2 - asic->bus_shift)));
++}
++
++#define ASIC3_GPIO_FN(get_fn_name, set_fn_name, REG) \
++u32 get_fn_name(struct device *dev) \
++{ \
++ return asic3_read_register(dev, REG); \
++} \
++EXPORT_SYMBOL(get_fn_name); \
++ \
++void set_fn_name(struct device *dev, u32 bits, u32 val) \
++{ \
++ unsigned long flags; \
++ \
++ spin_lock_irqsave(&asic3_gpio_lock, flags); \
++ val |= (asic3_read_register(dev, REG) & ~bits); \
++ asic3_write_register(dev, REG, val); \
++ spin_unlock_irqrestore(&asic3_gpio_lock, flags); \
++} \
++EXPORT_SYMBOL(set_fn_name);
++
++#define ASIC3_GPIO_REGISTER(ACTION, action, fn, FN) \
++ ASIC3_GPIO_FN(asic3_get_gpio_ ## action ## _ ## fn , \
++ asic3_set_gpio_ ## action ## _ ## fn , \
++ _IPAQ_ASIC3_GPIO_ ## FN ## _Base \
++ + _IPAQ_ASIC3_GPIO_ ## ACTION )
++
++#define ASIC3_GPIO_FUNCTIONS(fn, FN) \
++ ASIC3_GPIO_REGISTER(Direction, dir, fn, FN) \
++ ASIC3_GPIO_REGISTER(Out, out, fn, FN) \
++ ASIC3_GPIO_REGISTER(SleepMask, sleepmask, fn, FN) \
++ ASIC3_GPIO_REGISTER(SleepOut, sleepout, fn, FN) \
++ ASIC3_GPIO_REGISTER(BattFaultOut, battfaultout, fn, FN) \
++ ASIC3_GPIO_REGISTER(AltFunction, alt_fn, fn, FN) \
++ ASIC3_GPIO_REGISTER(SleepConf, sleepconf, fn, FN) \
++ ASIC3_GPIO_REGISTER(Status, status, fn, FN)
++
++#if 0
++ ASIC3_GPIO_REGISTER(Mask, mask, fn, FN)
++ ASIC3_GPIO_REGISTER(TriggerType, trigtype, fn, FN)
++ ASIC3_GPIO_REGISTER(EdgeTrigger, rising, fn, FN)
++ ASIC3_GPIO_REGISTER(LevelTrigger, triglevel, fn, FN)
++ ASIC3_GPIO_REGISTER(IntStatus, intstatus, fn, FN)
++#endif
++
++ASIC3_GPIO_FUNCTIONS(a, A)
++ASIC3_GPIO_FUNCTIONS(b, B)
++ASIC3_GPIO_FUNCTIONS(c, C)
++ASIC3_GPIO_FUNCTIONS(d, D)
++
++int asic3_gpio_get_value(struct device *dev, unsigned gpio)
++{
++ u32 mask = ASIC3_GPIO_bit(gpio);
++ printk("%s(%d)\n", __FUNCTION__, gpio);
++ switch (gpio >> 4) {
++ case _IPAQ_ASIC3_GPIO_BANK_A:
++ return asic3_get_gpio_status_a(dev) & mask;
++ case _IPAQ_ASIC3_GPIO_BANK_B:
++ return asic3_get_gpio_status_b(dev) & mask;
++ case _IPAQ_ASIC3_GPIO_BANK_C:
++ return asic3_get_gpio_status_c(dev) & mask;
++ case _IPAQ_ASIC3_GPIO_BANK_D:
++ return asic3_get_gpio_status_d(dev) & mask;
++ }
++
++ printk(KERN_ERR "%s: invalid GPIO value 0x%x", __FUNCTION__, gpio);
++ return 0;
++}
++EXPORT_SYMBOL(asic3_gpio_get_value);
++
++void asic3_gpio_set_value(struct device *dev, unsigned gpio, int val)
++{
++ u32 mask = ASIC3_GPIO_bit(gpio);
++ u32 bitval = 0;
++ if (val) bitval = mask;
++ printk("%s(%d, %d)\n", __FUNCTION__, gpio, val);
++
++ switch (gpio >> 4) {
++ case _IPAQ_ASIC3_GPIO_BANK_A:
++ asic3_set_gpio_out_a(dev, mask, bitval);
++ return;
++ case _IPAQ_ASIC3_GPIO_BANK_B:
++ asic3_set_gpio_out_b(dev, mask, bitval);
++ return;
++ case _IPAQ_ASIC3_GPIO_BANK_C:
++ asic3_set_gpio_out_c(dev, mask, bitval);
++ return;
++ case _IPAQ_ASIC3_GPIO_BANK_D:
++ asic3_set_gpio_out_d(dev, mask, bitval);
++ return;
++ }
++
++ printk(KERN_ERR "%s: invalid GPIO value 0x%x", __FUNCTION__, gpio);
++}
++EXPORT_SYMBOL(asic3_gpio_set_value);
++
++int asic3_irq_base(struct device *dev)
++{
++ struct asic3_data *asic = dev->driver_data;
++
++ return asic->irq_base;
++}
++EXPORT_SYMBOL(asic3_irq_base);
++
++static int asic3_gpio_to_irq(struct device *dev, unsigned gpio)
++{
++ struct asic3_data *asic = dev->driver_data;
++ printk("%s(%d)\n", __FUNCTION__, gpio);
++
++ return asic->irq_base + gpio;
++}
++
++void asic3_set_led(struct device *dev, int led_num, int duty_time,
++ int cycle_time, int timebase)
++{
++ struct asic3_data *asic = dev->driver_data;
++ unsigned int led_base;
++
++ /* it's a macro thing: see #define _IPAQ_ASIC_LED_0_Base for why you
++ * can't substitute led_num in the macros below...
++ */
++
++ switch (led_num) {
++ case 0:
++ led_base = _IPAQ_ASIC3_LED_0_Base;
++ break;
++ case 1:
++ led_base = _IPAQ_ASIC3_LED_1_Base;
++ break;
++ case 2:
++ led_base = _IPAQ_ASIC3_LED_2_Base;
++ break;
++ default:
++ printk(KERN_ERR "%s: invalid led number %d", __FUNCTION__,
++ led_num);
++ return;
++ }
++
++ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_TimeBase,
++ timebase | LED_EN);
++ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_PeriodTime,
++ cycle_time);
++ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_DutyTime,
++ 0);
++ udelay(20); /* asic voodoo - possibly need a whole duty cycle? */
++ __asic3_write_register(asic, led_base + _IPAQ_ASIC3_LED_DutyTime,
++ duty_time);
++}
++EXPORT_SYMBOL(asic3_set_led);
++
++void asic3_set_clock_sel(struct device *dev, u32 bits, u32 val)
++{
++ struct asic3_data *asic = dev->driver_data;
++ unsigned long flags;
++ u32 v;
++
++ spin_lock_irqsave(&asic3_gpio_lock, flags);
++ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL));
++ v = (v & ~bits) | val;
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), v);
++ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
++}
++EXPORT_SYMBOL(asic3_set_clock_sel);
++
++void asic3_set_clock_cdex(struct device *dev, u32 bits, u32 val)
++{
++ struct asic3_data *asic = dev->driver_data;
++ unsigned long flags;
++ u32 v;
++
++ spin_lock_irqsave(&asic3_gpio_lock, flags);
++ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX));
++ v = (v & ~bits) | val;
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), v);
++ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
++}
++EXPORT_SYMBOL(asic3_set_clock_cdex);
++
++static void asic3_clock_cdex_enable(struct clk *clk)
++{
++ struct asic3_data *asic = (struct asic3_data *)clk->parent->ctrlbit;
++ unsigned long flags, val;
++
++ local_irq_save(flags);
++
++ val = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX));
++ val |= clk->ctrlbit;
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), val);
++
++ local_irq_restore(flags);
++}
++
++static void asic3_clock_cdex_disable(struct clk *clk)
++{
++ struct asic3_data *asic = (struct asic3_data *)clk->parent->ctrlbit;
++ unsigned long flags, val;
++
++ local_irq_save(flags);
++
++ val = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX));
++ val &= ~clk->ctrlbit;
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX), val);
++
++ local_irq_restore(flags);
++}
++
++/* base clocks */
++
++static struct clk clk_g = {
++ .name = "gclk",
++ .rate = 0,
++ .parent = NULL,
++};
++
++/* clock definitions */
++
++static struct clk asic3_clocks[] = {
++ {
++ .name = "spi",
++ .id = -1,
++ .parent = &clk_g,
++ .enable = asic3_clock_cdex_enable,
++ .disable = asic3_clock_cdex_disable,
++ .ctrlbit = CLOCK_CDEX_SPI,
++ },
++#ifdef CONFIG_HTC_ASIC3_DS1WM
++ {
++ .name = "ds1wm",
++ .id = -1,
++ .rate = 5000000,
++ .parent = &clk_g,
++ .enable = asic3_clock_cdex_enable,
++ .disable = asic3_clock_cdex_disable,
++ .ctrlbit = CLOCK_CDEX_OWM,
++ },
++#endif
++ {
++ .name = "pwm0",
++ .id = -1,
++ .parent = &clk_g,
++ .enable = asic3_clock_cdex_enable,
++ .disable = asic3_clock_cdex_disable,
++ .ctrlbit = CLOCK_CDEX_PWM0,
++ },
++ {
++ .name = "pwm1",
++ .id = -1,
++ .parent = &clk_g,
++ .enable = asic3_clock_cdex_enable,
++ .disable = asic3_clock_cdex_disable,
++ .ctrlbit = CLOCK_CDEX_PWM1,
++ },
++ {
++ .name = "led0",
++ .id = -1,
++ .parent = &clk_g,
++ .enable = asic3_clock_cdex_enable,
++ .disable = asic3_clock_cdex_disable,
++ .ctrlbit = CLOCK_CDEX_LED0,
++ },
++ {
++ .name = "led1",
++ .id = -1,
++ .parent = &clk_g,
++ .enable = asic3_clock_cdex_enable,
++ .disable = asic3_clock_cdex_disable,
++ .ctrlbit = CLOCK_CDEX_LED1,
++ },
++ {
++ .name = "led2",
++ .id = -1,
++ .parent = &clk_g,
++ .enable = asic3_clock_cdex_enable,
++ .disable = asic3_clock_cdex_disable,
++ .ctrlbit = CLOCK_CDEX_LED2,
++ },
++ {
++ .name = "smbus",
++ .id = -1,
++ .parent = &clk_g,
++ .enable = asic3_clock_cdex_enable,
++ .disable = asic3_clock_cdex_disable,
++ .ctrlbit = CLOCK_CDEX_SMBUS,
++ },
++ {
++ .name = "ex0",
++ .id = -1,
++ .parent = &clk_g,
++ .enable = asic3_clock_cdex_enable,
++ .disable = asic3_clock_cdex_disable,
++ .ctrlbit = CLOCK_CDEX_EX0,
++ },
++ {
++ .name = "ex1",
++ .id = -1,
++ .parent = &clk_g,
++ .enable = asic3_clock_cdex_enable,
++ .disable = asic3_clock_cdex_disable,
++ .ctrlbit = CLOCK_CDEX_EX1,
++ },
++};
++
++void asic3_set_extcf_select(struct device *dev, u32 bits, u32 val)
++{
++ struct asic3_data *asic = dev->driver_data;
++ unsigned long flags;
++ u32 v;
++
++ spin_lock_irqsave(&asic3_gpio_lock, flags);
++ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Select));
++ v = (v & ~bits) | val;
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Select), v);
++ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
++}
++EXPORT_SYMBOL(asic3_set_extcf_select);
++
++void asic3_set_extcf_reset(struct device *dev, u32 bits, u32 val)
++{
++ struct asic3_data *asic = dev->driver_data;
++ unsigned long flags;
++ u32 v;
++
++ spin_lock_irqsave(&asic3_gpio_lock, flags);
++ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Reset));
++ v = (v & ~bits) | val;
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(EXTCF, Reset), v);
++ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
++}
++EXPORT_SYMBOL(asic3_set_extcf_reset);
++
++void asic3_set_sdhwctrl(struct device *dev, u32 bits, u32 val)
++{
++ struct asic3_data *asic = dev->driver_data;
++ unsigned long flags;
++ u32 v;
++
++ spin_lock_irqsave (&asic3_gpio_lock, flags);
++ v = __asic3_read_register(asic, IPAQ_ASIC3_OFFSET(SDHWCTRL, SDConf));
++ v = (v & ~bits) | val;
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(SDHWCTRL, SDConf), v);
++ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
++}
++EXPORT_SYMBOL(asic3_set_sdhwctrl);
++
++
++#define MAX_ASIC_ISR_LOOPS 20
++#define _IPAQ_ASIC3_GPIO_Base_INCR \
++ (_IPAQ_ASIC3_GPIO_B_Base - _IPAQ_ASIC3_GPIO_A_Base)
++
++static inline void asic3_irq_flip_edge(struct asic3_data *asic,
++ u32 base, int bit)
++{
++ u16 edge = __asic3_read_register(asic,
++ base + _IPAQ_ASIC3_GPIO_EdgeTrigger);
++ edge ^= bit;
++ __asic3_write_register(asic,
++ base + _IPAQ_ASIC3_GPIO_EdgeTrigger, edge);
++}
++
++static void asic3_irq_demux(unsigned int irq, struct irq_desc *desc)
++{
++ int iter;
++ struct asic3_data *asic;
++
++ /* Acknowledge the parrent (i.e. CPU's) IRQ */
++ desc->chip->ack(irq);
++
++ asic = desc->handler_data;
++
++ /* printk( KERN_NOTICE "asic3_irq_demux: irq=%d\n", irq ); */
++ for (iter = 0 ; iter < MAX_ASIC_ISR_LOOPS; iter++) {
++ u32 status;
++ int bank;
++
++ status = __asic3_read_register(asic,
++ IPAQ_ASIC3_OFFSET(INTR, PIntStat));
++ /* Check all ten register bits */
++ if ((status & 0x3ff) == 0)
++ break;
++
++ /* Handle GPIO IRQs */
++ for (bank = 0; bank < 4; bank++) {
++ if (status & (1 << bank)) {
++ unsigned long base, i, istat;
++
++ base = _IPAQ_ASIC3_GPIO_A_Base
++ + bank * _IPAQ_ASIC3_GPIO_Base_INCR;
++ istat = __asic3_read_register(asic,
++ base + _IPAQ_ASIC3_GPIO_IntStatus);
++ /* IntStatus is write 0 to clear */
++ /* XXX could miss interrupts! */
++ __asic3_write_register(asic,
++ base + _IPAQ_ASIC3_GPIO_IntStatus, 0);
++
++ for (i = 0; i < 16; i++) {
++ int bit = (1 << i);
++ unsigned int irqnr;
++ if (!(istat & bit))
++ continue;
++
++ irqnr = asic->irq_base
++ + (16 * bank) + i;
++ desc = irq_desc + irqnr;
++ desc->handle_irq(irqnr, desc);
++ if (asic->irq_bothedge[bank] & bit) {
++ asic3_irq_flip_edge(asic, base,
++ bit);
++ }
++ }
++ }
++ }
++
++ /* Handle remaining IRQs in the status register */
++ {
++ int i;
++
++ for (i = ASIC3_LED0_IRQ; i <= ASIC3_OWM_IRQ; i++) {
++ /* They start at bit 4 and go up */
++ if (status & (1 << (i - ASIC3_LED0_IRQ + 4))) {
++ desc = irq_desc + asic->irq_base + i;
++ desc->handle_irq(asic->irq_base + i,
++ desc);
++ }
++ }
++ }
++
++ }
++
++ if (iter >= MAX_ASIC_ISR_LOOPS)
++ printk(KERN_ERR "%s: interrupt processing overrun\n",
++ __FUNCTION__);
++}
++
++static inline int asic3_irq_to_bank(struct asic3_data *asic, int irq)
++{
++ int n;
++
++ n = (irq - asic->irq_base) >> 4;
++
++ return (n * (_IPAQ_ASIC3_GPIO_B_Base - _IPAQ_ASIC3_GPIO_A_Base));
++}
++
++static inline int asic3_irq_to_index(struct asic3_data *asic, int irq)
++{
++ return (irq - asic->irq_base) & 15;
++}
++
++static void asic3_mask_gpio_irq(unsigned int irq)
++{
++ struct asic3_data *asic = get_irq_chip_data(irq);
++ u32 val, bank, index;
++ unsigned long flags;
++
++ bank = asic3_irq_to_bank(asic, irq);
++ index = asic3_irq_to_index(asic, irq);
++
++ spin_lock_irqsave(&asic3_gpio_lock, flags);
++ val = __asic3_read_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask);
++ val |= 1 << index;
++ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask, val);
++ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
++}
++
++static void asic3_mask_irq(unsigned int irq)
++{
++ struct asic3_data *asic = get_irq_chip_data(irq);
++ int regval;
++
++ if (irq < ASIC3_NR_GPIO_IRQS) {
++ printk(KERN_ERR "asic3_base: gpio mask attempt, irq %d\n",
++ irq);
++ return;
++ }
++
++ regval = __asic3_read_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask);
++
++ switch (irq - asic->irq_base) {
++ case ASIC3_LED0_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval & ~ASIC3_INTMASK_MASK0);
++ break;
++ case ASIC3_LED1_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval & ~ASIC3_INTMASK_MASK1);
++ break;
++ case ASIC3_LED2_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval & ~ASIC3_INTMASK_MASK2);
++ break;
++ case ASIC3_SPI_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval & ~ASIC3_INTMASK_MASK3);
++ break;
++ case ASIC3_SMBUS_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval & ~ASIC3_INTMASK_MASK4);
++ break;
++ case ASIC3_OWM_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval & ~ASIC3_INTMASK_MASK5);
++ break;
++ default:
++ printk(KERN_ERR "asic3_base: bad non-gpio irq %d\n", irq);
++ break;
++ }
++}
++
++static void asic3_unmask_gpio_irq(unsigned int irq)
++{
++ struct asic3_data *asic = get_irq_chip_data(irq);
++ u32 val, bank, index;
++ unsigned long flags;
++
++ bank = asic3_irq_to_bank(asic, irq);
++ index = asic3_irq_to_index(asic, irq);
++
++ spin_lock_irqsave(&asic3_gpio_lock, flags);
++ val = __asic3_read_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask);
++ val &= ~(1 << index);
++ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_Mask, val);
++ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
++}
++
++static void asic3_unmask_irq(unsigned int irq)
++{
++ struct asic3_data *asic = get_irq_chip_data(irq);
++ int regval;
++
++ if (irq < ASIC3_NR_GPIO_IRQS) {
++ printk(KERN_ERR "asic3_base: gpio unmask attempt, irq %d\n",
++ irq);
++ return;
++ }
++
++ regval = __asic3_read_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask);
++
++ switch (irq - asic->irq_base) {
++ case ASIC3_LED0_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval | ASIC3_INTMASK_MASK0);
++ break;
++ case ASIC3_LED1_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval | ASIC3_INTMASK_MASK1);
++ break;
++ case ASIC3_LED2_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval | ASIC3_INTMASK_MASK2);
++ break;
++ case ASIC3_SPI_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval | ASIC3_INTMASK_MASK3);
++ break;
++ case ASIC3_SMBUS_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval | ASIC3_INTMASK_MASK4);
++ break;
++ case ASIC3_OWM_IRQ:
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask,
++ regval | ASIC3_INTMASK_MASK5);
++ break;
++ default:
++ printk(KERN_ERR "asic3_base: bad non-gpio irq %d\n", irq);
++ break;
++ }
++}
++
++static int asic3_gpio_irq_type(unsigned int irq, unsigned int type)
++{
++ struct asic3_data *asic = get_irq_chip_data(irq);
++ u32 bank, index;
++ unsigned long flags;
++ u16 trigger, level, edge, bit;
++
++ bank = asic3_irq_to_bank(asic, irq);
++ index = asic3_irq_to_index(asic, irq);
++ bit = 1<<index;
++
++ spin_lock_irqsave(&asic3_gpio_lock, flags);
++ level = __asic3_read_register(asic,
++ bank + _IPAQ_ASIC3_GPIO_LevelTrigger);
++ edge = __asic3_read_register(asic,
++ bank + _IPAQ_ASIC3_GPIO_EdgeTrigger);
++ trigger = __asic3_read_register(asic,
++ bank + _IPAQ_ASIC3_GPIO_TriggerType);
++ asic->irq_bothedge[(irq - asic->irq_base) >> 4] &= ~bit;
++
++ if (type == IRQT_RISING) {
++ trigger |= bit;
++ edge |= bit;
++ } else if (type == IRQT_FALLING) {
++ trigger |= bit;
++ edge &= ~bit;
++ } else if (type == IRQT_BOTHEDGE) {
++ trigger |= bit;
++ if (asic3_gpio_get_value(asic->dev, irq - asic->irq_base))
++ edge &= ~bit;
++ else
++ edge |= bit;
++ asic->irq_bothedge[(irq - asic->irq_base) >> 4] |= bit;
++ } else if (type == IRQT_LOW) {
++ trigger &= ~bit;
++ level &= ~bit;
++ } else if (type == IRQT_HIGH) {
++ trigger &= ~bit;
++ level |= bit;
++ } else {
++ /*
++ * if type == IRQT_NOEDGE, we should mask interrupts, but
++ * be careful to not unmask them if mask was also called.
++ * Probably need internal state for mask.
++ */
++ printk(KERN_NOTICE "asic3: irq type not changed.\n");
++ }
++ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_LevelTrigger,
++ level);
++ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_EdgeTrigger,
++ edge);
++ __asic3_write_register(asic, bank + _IPAQ_ASIC3_GPIO_TriggerType,
++ trigger);
++ spin_unlock_irqrestore(&asic3_gpio_lock, flags);
++ return 0;
++}
++
++static struct irq_chip asic3_gpio_irq_chip = {
++ .name = "ASIC3-GPIO",
++ .ack = asic3_mask_gpio_irq,
++ .mask = asic3_mask_gpio_irq,
++ .unmask = asic3_unmask_gpio_irq,
++ .set_type = asic3_gpio_irq_type,
++};
++
++static struct irq_chip asic3_irq_chip = {
++ .name = "ASIC3",
++ .ack = asic3_mask_irq,
++ .mask = asic3_mask_irq,
++ .unmask = asic3_unmask_irq,
++};
++
++static void asic3_release(struct device *dev)
++{
++ struct platform_device *sdev = to_platform_device(dev);
++
++ kfree(sdev->resource);
++ kfree(sdev);
++}
++
++int asic3_register_mmc(struct device *dev)
++{
++ struct platform_device *sdev = kzalloc(sizeof(*sdev), GFP_KERNEL);
++ struct tmio_mmc_hwconfig *mmc_config = kmalloc(sizeof(*mmc_config),
++ GFP_KERNEL);
++ struct platform_device *pdev = to_platform_device(dev);
++ struct asic3_data *asic = dev->driver_data;
++ struct asic3_platform_data *asic3_pdata = dev->platform_data;
++ struct resource *res;
++ int rc;
++
++ if (sdev == NULL || mmc_config == NULL)
++ return -ENOMEM;
++
++ if (asic3_pdata->tmio_mmc_hwconfig) {
++ memcpy(mmc_config, asic3_pdata->tmio_mmc_hwconfig,
++ sizeof(*mmc_config));
++ } else {
++ memset(mmc_config, 0, sizeof(*mmc_config));
++ }
++ mmc_config->address_shift = asic->bus_shift;
++
++ sdev->id = -1;
++ sdev->name = "asic3_mmc";
++ sdev->dev.parent = dev;
++ sdev->num_resources = 2;
++ sdev->dev.platform_data = mmc_config;
++ sdev->dev.release = asic3_release;
++
++ res = kzalloc(sdev->num_resources * sizeof(struct resource),
++ GFP_KERNEL);
++ if (res == NULL) {
++ kfree(sdev);
++ kfree(mmc_config);
++ return -ENOMEM;
++ }
++ sdev->resource = res;
++
++ res[0].start = pdev->resource[2].start;
++ res[0].end = pdev->resource[2].end;
++ res[0].flags = IORESOURCE_MEM;
++ res[1].start = res[1].end = pdev->resource[3].start;
++ res[1].flags = IORESOURCE_IRQ;
++
++ rc = platform_device_register(sdev);
++ if (rc) {
++ printk(KERN_ERR "asic3_base: "
++ "Could not register asic3_mmc device\n");
++ kfree(res);
++ kfree(sdev);
++ return rc;
++ }
++
++ asic->mmc_dev = sdev;
++
++ return 0;
++}
++EXPORT_SYMBOL(asic3_register_mmc);
++
++int asic3_unregister_mmc(struct device *dev)
++{
++ struct asic3_data *asic = dev->driver_data;
++ platform_device_unregister(asic->mmc_dev);
++ asic->mmc_dev = 0;
++
++ return 0;
++}
++EXPORT_SYMBOL(asic3_unregister_mmc);
++
++#ifdef CONFIG_HTC_ASIC3_DS1WM
++/*
++ * DS1WM subdevice
++ */
++
++static void asic3_ds1wm_enable(struct platform_device *ds1wm_dev)
++{
++ struct device *dev = ds1wm_dev->dev.parent;
++
++ /* Turn on external clocks and the OWM clock */
++ asic3_set_clock_cdex(dev,
++ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM,
++ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM);
++
++ mdelay(1);
++
++ asic3_set_extcf_reset(dev, ASIC3_EXTCF_OWM_RESET,
++ ASIC3_EXTCF_OWM_RESET);
++ mdelay(1);
++ asic3_set_extcf_reset(dev, ASIC3_EXTCF_OWM_RESET, 0);
++ mdelay(1);
++
++ /* Clear OWM_SMB, set OWM_EN */
++ asic3_set_extcf_select(dev,
++ ASIC3_EXTCF_OWM_SMB | ASIC3_EXTCF_OWM_EN,
++ 0 | ASIC3_EXTCF_OWM_EN);
++
++ mdelay(1);
++}
++
++static void asic3_ds1wm_disable(struct platform_device *ds1wm_dev)
++{
++ struct device *dev = ds1wm_dev->dev.parent;
++
++ asic3_set_extcf_select(dev,
++ ASIC3_EXTCF_OWM_SMB | ASIC3_EXTCF_OWM_EN,
++ 0 | 0);
++
++ asic3_set_clock_cdex(dev,
++ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM,
++ CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | 0);
++}
++
++
++static struct resource asic3_ds1wm_resources[] = {
++ {
++ .start = _IPAQ_ASIC3_OWM_Base,
++ .end = _IPAQ_ASIC3_OWM_Base + 0x14 - 1,
++ .flags = IORESOURCE_MEM,
++ },
++ {
++ .start = ASIC3_OWM_IRQ,
++ .end = ASIC3_OWM_IRQ,
++ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE |
++ IORESOURCE_IRQ_SOC_SUBDEVICE,
++ },
++};
++
++static struct ds1wm_platform_data ds1wm_pd = {
++ .enable = asic3_ds1wm_enable,
++ .disable = asic3_ds1wm_disable,
++};
++#endif
++
++static struct soc_device_data asic3_blocks[] = {
++#ifdef CONFIG_HTC_ASIC3_DS1WM
++ {
++ .name = "ds1wm",
++ .res = asic3_ds1wm_resources,
++ .num_resources = ARRAY_SIZE(asic3_ds1wm_resources),
++ .hwconfig = &ds1wm_pd,
++ },
++#endif
++};
++
++static int asic3_probe(struct platform_device *pdev)
++{
++ struct asic3_platform_data *pdata = pdev->dev.platform_data;
++ struct asic3_data *asic;
++ struct device *dev = &pdev->dev;
++ unsigned long clksel;
++ int i, rc;
++
++ asic = kzalloc(sizeof(struct asic3_data), GFP_KERNEL);
++ if (!asic)
++ return -ENOMEM;
++
++ platform_set_drvdata(pdev, asic);
++ asic->dev = &pdev->dev;
++
++ asic->mapping = ioremap(pdev->resource[0].start, IPAQ_ASIC3_MAP_SIZE);
++ if (!asic->mapping) {
++ printk(KERN_ERR "asic3: couldn't ioremap ASIC3\n");
++ kfree (asic);
++ return -ENOMEM;
++ }
++
++ if (pdata && pdata->bus_shift)
++ asic->bus_shift = pdata->bus_shift;
++ else
++ asic->bus_shift = 2;
++
++ /* XXX: should get correct SD clock values from pdata struct */
++ clksel = 0;
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), clksel);
++
++ /* Register ASIC3's clocks. */
++ clk_g.ctrlbit = (int)asic;
++
++ if (clk_register(&clk_g) < 0)
++ printk(KERN_ERR "asic3: failed to register ASIC3 gclk\n");
++
++ for (i = 0; i < ARRAY_SIZE(asic3_clocks); i++) {
++ rc = clk_register(&asic3_clocks[i]);
++ if (rc < 0)
++ printk(KERN_ERR "asic3: "
++ "failed to register clock %s (%d)\n",
++ asic3_clocks[i].name, rc);
++ }
++
++ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(A, Mask), 0xffff);
++ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(B, Mask), 0xffff);
++ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(C, Mask), 0xffff);
++ __asic3_write_register(asic, IPAQ_ASIC3_GPIO_OFFSET(D, Mask), 0xffff);
++
++ asic3_set_gpio_sleepmask_a(dev, 0xffff, 0xffff);
++ asic3_set_gpio_sleepmask_b(dev, 0xffff, 0xffff);
++ asic3_set_gpio_sleepmask_c(dev, 0xffff, 0xffff);
++ asic3_set_gpio_sleepmask_d(dev, 0xffff, 0xffff);
++
++ if (pdata) {
++ asic3_set_gpio_out_a(dev, 0xffff, pdata->gpio_a.init);
++ asic3_set_gpio_out_b(dev, 0xffff, pdata->gpio_b.init);
++ asic3_set_gpio_out_c(dev, 0xffff, pdata->gpio_c.init);
++ asic3_set_gpio_out_d(dev, 0xffff, pdata->gpio_d.init);
++
++ asic3_set_gpio_dir_a(dev, 0xffff, pdata->gpio_a.dir);
++ asic3_set_gpio_dir_b(dev, 0xffff, pdata->gpio_b.dir);
++ asic3_set_gpio_dir_c(dev, 0xffff, pdata->gpio_c.dir);
++ asic3_set_gpio_dir_d(dev, 0xffff, pdata->gpio_d.dir);
++
++ asic3_set_gpio_sleepmask_a(dev, 0xffff,
++ pdata->gpio_a.sleep_mask);
++ asic3_set_gpio_sleepmask_b(dev, 0xffff,
++ pdata->gpio_b.sleep_mask);
++ asic3_set_gpio_sleepmask_c(dev, 0xffff,
++ pdata->gpio_c.sleep_mask);
++ asic3_set_gpio_sleepmask_d(dev, 0xffff,
++ pdata->gpio_d.sleep_mask);
++
++ asic3_set_gpio_sleepout_a(dev, 0xffff,
++ pdata->gpio_a.sleep_out);
++ asic3_set_gpio_sleepout_b(dev, 0xffff,
++ pdata->gpio_b.sleep_out);
++ asic3_set_gpio_sleepout_c(dev, 0xffff,
++ pdata->gpio_c.sleep_out);
++ asic3_set_gpio_sleepout_d(dev, 0xffff,
++ pdata->gpio_d.sleep_out);
++
++ asic3_set_gpio_battfaultout_a(dev, 0xffff,
++ pdata->gpio_a.batt_fault_out);
++ asic3_set_gpio_battfaultout_b(dev, 0xffff,
++ pdata->gpio_b.batt_fault_out);
++ asic3_set_gpio_battfaultout_c(dev, 0xffff,
++ pdata->gpio_c.batt_fault_out);
++ asic3_set_gpio_battfaultout_d(dev, 0xffff,
++ pdata->gpio_d.batt_fault_out);
++
++ asic3_set_gpio_sleepconf_a(dev, 0xffff,
++ pdata->gpio_a.sleep_conf);
++ asic3_set_gpio_sleepconf_b(dev, 0xffff,
++ pdata->gpio_b.sleep_conf);
++ asic3_set_gpio_sleepconf_c(dev, 0xffff,
++ pdata->gpio_c.sleep_conf);
++ asic3_set_gpio_sleepconf_d(dev, 0xffff,
++ pdata->gpio_d.sleep_conf);
++
++ asic3_set_gpio_alt_fn_a(dev, 0xffff,
++ pdata->gpio_a.alt_function);
++ asic3_set_gpio_alt_fn_b(dev, 0xffff,
++ pdata->gpio_b.alt_function);
++ asic3_set_gpio_alt_fn_c(dev, 0xffff,
++ pdata->gpio_c.alt_function);
++ asic3_set_gpio_alt_fn_d(dev, 0xffff,
++ pdata->gpio_d.alt_function);
++ }
++
++ asic->irq_nr = -1;
++ asic->irq_base = -1;
++
++ if (pdev->num_resources > 1)
++ asic->irq_nr = pdev->resource[1].start;
++
++ if (asic->irq_nr != -1) {
++ unsigned int i;
++
++ if (!pdata->irq_base) {
++ printk(KERN_ERR "asic3: IRQ base not specified\n");
++ asic3_remove(pdev);
++ return -EINVAL;
++ }
++
++ asic->irq_base = pdata->irq_base;
++
++ /* turn on clock to IRQ controller */
++ clksel |= CLOCK_SEL_CX;
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL),
++ clksel);
++
++ printk(KERN_INFO "asic3: using irq %d-%d on irq %d\n",
++ asic->irq_base, asic->irq_base + ASIC3_NR_IRQS - 1,
++ asic->irq_nr);
++
++ for (i = 0 ; i < ASIC3_NR_IRQS ; i++) {
++ int irq = i + asic->irq_base;
++ if (i < ASIC3_NR_GPIO_IRQS) {
++ set_irq_chip(irq, &asic3_gpio_irq_chip);
++ set_irq_chip_data(irq, asic);
++ set_irq_handler(irq, handle_level_irq);
++ set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
++ } else {
++ /* The remaining IRQs are not GPIO */
++ set_irq_chip(irq, &asic3_irq_chip);
++ set_irq_chip_data(irq, asic);
++ set_irq_handler(irq, handle_level_irq);
++ set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
++ }
++ }
++
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask),
++ ASIC3_INTMASK_GINTMASK);
++
++ set_irq_chained_handler(asic->irq_nr, asic3_irq_demux);
++ set_irq_type(asic->irq_nr, IRQT_RISING);
++ set_irq_data(asic->irq_nr, asic);
++ }
++
++#ifdef CONFIG_HTC_ASIC3_DS1WM
++ ds1wm_pd.bus_shift = asic->bus_shift;
++#endif
++
++ pdata->gpiodev_ops.get = asic3_gpio_get_value;
++ pdata->gpiodev_ops.set = asic3_gpio_set_value;
++ pdata->gpiodev_ops.to_irq = asic3_gpio_to_irq;
++
++ soc_add_devices(pdev, asic3_blocks, ARRAY_SIZE(asic3_blocks),
++ &pdev->resource[0],
++ asic->bus_shift - ASIC3_DEFAULT_ADDR_SHIFT,
++ asic->irq_base);
++
++ if (pdev->num_resources > 2) {
++ int rc;
++ rc = asic3_register_mmc(dev);
++ if (rc) {
++ asic3_remove(pdev);
++ return rc;
++ }
++ }
++
++ if (pdata && pdata->num_child_platform_devs != 0)
++ platform_add_devices(pdata->child_platform_devs,
++ pdata->num_child_platform_devs);
++
++ return 0;
++}
++
++static int asic3_remove(struct platform_device *pdev)
++{
++ struct asic3_platform_data *pdata = pdev->dev.platform_data;
++ struct asic3_data *asic = platform_get_drvdata(pdev);
++ int i;
++
++ if (pdata && pdata->num_child_platform_devs != 0) {
++ for (i = 0; i < pdata->num_child_platform_devs; i++) {
++ platform_device_unregister(
++ pdata->child_platform_devs[i]);
++ }
++ }
++
++ if (asic->irq_nr != -1) {
++ unsigned int i;
++
++ for (i = 0 ; i < ASIC3_NR_IRQS ; i++) {
++ int irq = i + asic->irq_base;
++ set_irq_flags(irq, 0);
++ set_irq_handler (irq, NULL);
++ set_irq_chip (irq, NULL);
++ set_irq_chip_data(irq, NULL);
++ }
++
++ set_irq_chained_handler(asic->irq_nr, NULL);
++ }
++
++ if (asic->mmc_dev)
++ asic3_unregister_mmc(&pdev->dev);
++
++ for (i = 0; i < ARRAY_SIZE(asic3_clocks); i++)
++ clk_unregister(&asic3_clocks[i]);
++ clk_unregister(&clk_g);
++
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, SEL), 0);
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask), 0);
++
++ iounmap(asic->mapping);
++
++ kfree(asic);
++
++ return 0;
++}
++
++static void asic3_shutdown(struct platform_device *pdev)
++{
++}
++
++#define ASIC3_SUSPEND_CDEX_MASK \
++ (CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2)
++static unsigned short suspend_cdex;
++
++static int asic3_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct asic3_data *asic = platform_get_drvdata(pdev);
++ suspend_cdex = __asic3_read_register(asic,
++ _IPAQ_ASIC3_CLOCK_Base + _IPAQ_ASIC3_CLOCK_CDEX);
++ /* The LEDs are still active during suspend */
++ __asic3_write_register(asic,
++ _IPAQ_ASIC3_CLOCK_Base + _IPAQ_ASIC3_CLOCK_CDEX,
++ suspend_cdex & ASIC3_SUSPEND_CDEX_MASK);
++ return 0;
++}
++
++static int asic3_resume(struct platform_device *pdev)
++{
++ struct asic3_data *asic = platform_get_drvdata(pdev);
++ unsigned short intmask;
++
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(CLOCK, CDEX),
++ suspend_cdex);
++
++ if (asic->irq_nr != -1) {
++ /* Toggle the interrupt mask to try to get ASIC3 to show
++ * the CPU an interrupt edge. For more details see the
++ * kernel-discuss thread around 13 June 2005 with the
++ * subject "asic3 suspend / resume". */
++ intmask = __asic3_read_register(asic,
++ IPAQ_ASIC3_OFFSET(INTR, IntMask));
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask),
++ intmask & ~ASIC3_INTMASK_GINTMASK);
++ mdelay(1);
++ __asic3_write_register(asic, IPAQ_ASIC3_OFFSET(INTR, IntMask),
++ intmask | ASIC3_INTMASK_GINTMASK);
++ }
++
++ return 0;
++}
++
++static struct platform_driver asic3_device_driver = {
++ .driver = {
++ .name = "asic3",
++ },
++ .probe = asic3_probe,
++ .remove = asic3_remove,
++ .suspend = asic3_suspend,
++ .resume = asic3_resume,
++ .shutdown = asic3_shutdown,
++};
++
++static int __init asic3_base_init(void)
++{
++ int retval = 0;
++ retval = platform_driver_register(&asic3_device_driver);
++ return retval;
++}
++
++static void __exit asic3_base_exit(void)
++{
++ platform_driver_unregister(&asic3_device_driver);
++}
++
++#ifdef MODULE
++module_init(asic3_base_init);
++#else /* start early for dependencies */
++subsys_initcall(asic3_base_init);
++#endif
++module_exit(asic3_base_exit);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Phil Blundell <pb@handhelds.org>");
++MODULE_DESCRIPTION("Core driver for HTC ASIC3");
++MODULE_SUPPORTED_DEVICE("asic3");
+Index: linux-2.6.23/drivers/mfd/soc-core.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/mfd/soc-core.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,106 @@
++/*
++ * drivers/soc/soc-core.c
++ *
++ * core SoC support
++ * Copyright (c) 2006 Ian Molton
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This file contains functionality used by many SoC type devices.
++ *
++ * Created: 2006-11-28
++ *
++ */
++
++#include <linux/ioport.h>
++#include <linux/slab.h>
++#include <linux/kernel.h>
++#include <linux/platform_device.h>
++#include "soc-core.h"
++
++void soc_free_devices(struct platform_device *devices, int nr_devs)
++{
++ struct platform_device *dev = devices;
++ int i;
++
++ for (i = 0; i < nr_devs; i++) {
++ struct resource *res = dev->resource;
++ platform_device_unregister(dev++);
++ kfree(res);
++ }
++ kfree(devices);
++}
++EXPORT_SYMBOL_GPL(soc_free_devices);
++
++#define SIGNED_SHIFT(val, shift) ((shift) >= 0 ? ((val) << (shift)) : ((val) >> -(shift)))
++
++struct platform_device *soc_add_devices(struct platform_device *dev,
++ struct soc_device_data *soc, int nr_devs,
++ struct resource *mem,
++ int relative_addr_shift, int irq_base)
++{
++ struct platform_device *devices;
++ int i, r, base;
++
++ devices = kzalloc(nr_devs * sizeof(struct platform_device), GFP_KERNEL);
++ if (!devices)
++ return NULL;
++
++ for (i = 0; i < nr_devs; i++) {
++ struct platform_device *sdev = &devices[i];
++ struct soc_device_data *blk = &soc[i];
++ struct resource *res;
++
++ sdev->id = -1;
++ sdev->name = blk->name;
++
++ sdev->dev.parent = &dev->dev;
++ sdev->dev.platform_data = (void *)blk->hwconfig;
++ sdev->num_resources = blk->num_resources;
++
++ /* Allocate space for the subdevice resources */
++ res = kzalloc (blk->num_resources * sizeof (struct resource), GFP_KERNEL);
++ if (!res)
++ goto fail;
++
++ for (r = 0 ; r < blk->num_resources ; r++) {
++ res[r].name = blk->res[r].name; // Fixme - should copy
++
++ /* Find out base to use */
++ base = 0;
++ if (blk->res[r].flags & IORESOURCE_MEM) {
++ base = mem->start;
++ } else if ((blk->res[r].flags & IORESOURCE_IRQ) &&
++ (blk->res[r].flags & IORESOURCE_IRQ_SOC_SUBDEVICE)) {
++ base = irq_base;
++ }
++
++ /* Adjust resource */
++ if (blk->res[r].flags & IORESOURCE_MEM) {
++ res[r].parent = mem;
++ res[r].start = base + SIGNED_SHIFT(blk->res[r].start, relative_addr_shift);
++ res[r].end = base + SIGNED_SHIFT(blk->res[r].end, relative_addr_shift);
++ } else {
++ res[r].start = base + blk->res[r].start;
++ res[r].end = base + blk->res[r].end;
++ }
++ res[r].flags = blk->res[r].flags;
++ }
++
++ sdev->resource = res;
++ if (platform_device_register(sdev)) {
++ kfree(res);
++ goto fail;
++ }
++
++ printk(KERN_INFO "SoC: registering %s\n", blk->name);
++ }
++ return devices;
++
++fail:
++ soc_free_devices(devices, i + 1);
++ return NULL;
++}
++EXPORT_SYMBOL_GPL(soc_add_devices);
+Index: linux-2.6.23/drivers/mfd/soc-core.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/mfd/soc-core.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,30 @@
++/*
++ * drivers/soc/soc-core.h
++ *
++ * core SoC support
++ * Copyright (c) 2006 Ian Molton
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * This file contains prototypes for the functions in soc-core.c
++ *
++ * Created: 2006-11-28
++ *
++ */
++
++struct soc_device_data {
++ char *name;
++ struct resource *res;
++ int num_resources;
++ void *hwconfig; /* platform_data to pass to the subdevice */
++};
++
++struct platform_device *soc_add_devices(struct platform_device *dev,
++ struct soc_device_data *soc, int n_devs,
++ struct resource *mem,
++ int relative_addr_shift, int irq_base);
++
++void soc_free_devices(struct platform_device *devices, int nr_devs);
++
+Index: linux-2.6.23/include/asm-arm/arch-pxa/clock.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/asm-arm/arch-pxa/clock.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,27 @@
++/*
++ * linux/include/asm-arm/arch-pxa/clock.h
++ *
++ * Copyright (C) 2006 Erik Hovland
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++struct clk {
++ struct list_head node;
++ struct module *owner;
++ struct clk *parent;
++ const char *name;
++ int id;
++ unsigned int enabled;
++ unsigned long rate;
++ unsigned long ctrlbit;
++
++ void (*enable)(struct clk *);
++ void (*disable)(struct clk *);
++};
++
++
++extern int clk_register(struct clk *clk);
++extern void clk_unregister(struct clk *clk);
+Index: linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-asic.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-asic.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,213 @@
++/*
++ * include/asm/arm/arch-pxa/htcuniversal-asic.h
++ *
++ * Authors: Giuseppe Zompatori <giuseppe_zompatori@yahoo.it>
++ *
++ * based on previews work, see below:
++ *
++ * include/asm/arm/arch-pxa/hx4700-asic.h
++ * Copyright (c) 2004 SDG Systems, LLC
++ *
++ */
++
++#ifndef _HTCUNIVERSAL_ASIC_H_
++#define _HTCUNIVERSAL_ASIC_H_
++
++#include <asm/hardware/ipaq-asic3.h>
++
++/* ASIC3 */
++
++#define HTCUNIVERSAL_ASIC3_GPIO_PHYS PXA_CS4_PHYS
++#define HTCUNIVERSAL_ASIC3_MMC_PHYS PXA_CS3_PHYS
++
++/* TODO: some information is missing here */
++
++/* ASIC3 GPIO A bank */
++
++#define GPIOA_I2C_EN 0 /* Output */
++#define GPIOA_SPK_PWR1_ON 1 /* Output */
++#define GPIOA_AUDIO_PWR_ON 2 /* Output */
++#define GPIOA_EARPHONE_PWR_ON 3 /* Output */
++
++#define GPIOA_UNKNOWN4 4 /* Output */
++#define GPIOA_BUTTON_BACKLIGHT_N 5 /* Input */
++#define GPIOA_SPK_PWR2_ON 6 /* Output */
++#define GPIOA_BUTTON_RECORD_N 7 /* Input */
++
++#define GPIOA_BUTTON_CAMERA_N 8 /* Input */
++#define GPIOA_UNKNOWN9 9 /* Output */
++#define GPIOA_FLASHLIGHT 10 /* Output */
++#define GPIOA_COVER_ROTATE_N 11 /* Input */
++
++#define GPIOA_TOUCHSCREEN_N 12 /* Input */
++#define GPIOA_VOL_UP_N 13 /* Input */
++#define GPIOA_VOL_DOWN_N 14 /* Input */
++#define GPIOA_LCD_PWR5_ON 15 /* Output */
++
++/* ASIC3 GPIO B bank */
++
++#define GPIOB_BB_READY 0 /* Input */
++#define GPIOB_CODEC_PDN 1 /* Output */
++#define GPIOB_UNKNOWN2 2 /* Input */
++#define GPIOB_BB_UNKNOWN3 3 /* Input */
++
++#define GPIOB_BT_IRQ 4 /* Input */
++#define GPIOB_CLAMSHELL_N 5 /* Input */
++#define GPIOB_LCD_PWR3_ON 6 /* Output */
++#define GPIOB_BB_ALERT 7 /* Input */
++
++#define GPIOB_BB_RESET2 8 /* Output */
++#define GPIOB_EARPHONE_N 9 /* Input */
++#define GPIOB_MICRECORD_N 10 /* Input */
++#define GPIOB_NIGHT_SENSOR 11 /* Input */
++
++#define GPIOB_UMTS_DCD 12 /* Input */
++#define GPIOB_UNKNOWN13 13 /* Input */
++#define GPIOB_CHARGE_EN 14 /* Output */
++#define GPIOB_USB_PUEN 15 /* Output */
++
++/* ASIC3 GPIO C bank */
++
++#define GPIOC_LED_BTWIFI 0 /* Output */
++#define GPIOC_LED_RED 1 /* Output */
++#define GPIOC_LED_GREEN 2 /* Output */
++#define GPIOC_BOARDID3 3 /* Input */
++
++#define GPIOC_WIFI_IRQ_N 4 /* Input */
++#define GPIOC_WIFI_RESET 5 /* Output */
++#define GPIOC_WIFI_PWR1_ON 6 /* Output */
++#define GPIOC_BT_RESET 7 /* Output */
++
++#define GPIOC_UNKNOWN8 8 /* Output */
++#define GPIOC_LCD_PWR1_ON 9 /* Output */
++#define GPIOC_LCD_PWR2_ON 10 /* Output */
++#define GPIOC_BOARDID2 11 /* Input */
++
++#define GPIOC_BOARDID1 12 /* Input */
++#define GPIOC_BOARDID0 13 /* Input */
++#define GPIOC_BT_PWR_ON 14 /* Output */
++#define GPIOC_CHARGE_ON 15 /* Output */
++
++/* ASIC3 GPIO D bank */
++
++#define GPIOD_KEY_OK_N 0 /* Input */
++#define GPIOD_KEY_RIGHT_N 1 /* Input */
++#define GPIOD_KEY_LEFT_N 2 /* Input */
++#define GPIOD_KEY_DOWN_N 3 /* Input */
++
++#define GPIOD_KEY_UP_N 4 /* Input */
++#define GPIOD_SDIO_DET 5 /* Input */
++#define GPIOD_WIFI_PWR2_ON 6 /* Output */
++#define GPIOD_HW_REBOOT 7 /* Output */
++
++#define GPIOD_BB_RESET1 8 /* Output */
++#define GPIOD_UNKNOWN9 9 /* Output */
++#define GPIOD_VIBRA_PWR_ON 10 /* Output */
++#define GPIOD_WIFI_PWR3_ON 11 /* Output */
++
++#define GPIOD_FL_PWR_ON 12 /* Output */
++#define GPIOD_LCD_PWR4_ON 13 /* Output */
++#define GPIOD_BL_KEYP_PWR_ON 14 /* Output */
++#define GPIOD_BL_KEYB_PWR_ON 15 /* Output */
++
++extern struct platform_device htcuniversal_asic3;
++
++/* ASIC3 GPIO A bank */
++
++#define GPIO_I2C_EN 0*16+GPIOA_I2C_EN
++#define GPIO_SPK_PWR1_ON 0*16+GPIOA_SPK_PWR1_ON
++#define GPIO_AUDIO_PWR_ON 0*16+GPIOA_AUDIO_PWR_ON
++#define GPIO_EARPHONE_PWR_ON 0*16+GPIOA_EARPHONE_PWR_ON
++
++#define GPIO_UNKNOWNA4 0*16+GPIOA_UNKNOWN4
++#define GPIO_BUTTON_BACKLIGHT_N 0*16+GPIOA_BUTTON_BACKLIGHT_N
++#define GPIO_SPK_PWR2_ON 0*16+GPIOA_SPK_PWR2_ON
++#define GPIO_BUTTON_RECORD_N 0*16+GPIOA_BUTTON_RECORD_N
++
++#define GPIO_BUTTON_CAMERA_N 0*16+GPIOA_BUTTON_CAMERA_N
++#define GPIO_UNKNOWNA9 0*16+GPIOA_UNKNOWN9
++#define GPIO_FLASHLIGHT 0*16+GPIOA_FLASHLIGHT
++#define GPIO_COVER_ROTATE_N 0*16+GPIOA_COVER_ROTATE_N
++
++#define GPIO_TOUCHSCREEN_N 0*16+GPIOA_TOUCHSCREEN_N
++#define GPIO_VOL_UP_N 0*16+GPIOA_VOL_UP_N
++#define GPIO_VOL_DOWN_N 0*16+GPIOA_VOL_DOWN_N
++#define GPIO_LCD_PWR5_ON 0*16+GPIOA_LCD_PWR5_ON
++
++/* ASIC3 GPIO B bank */
++
++#define GPIO_BB_READY 1*16+GPIOB_BB_READY
++#define GPIO_CODEC_PDN 1*16+GPIOB_CODEC_PDN
++#define GPIO_UNKNOWNB2 1*16+GPIOB_UNKNOWN2
++#define GPIO_BB_UNKNOWN3 1*16+GPIOB_BB_UNKNOWN3
++
++#define GPIO_BT_IRQ 1*16+GPIOB_BT_IRQ
++#define GPIO_CLAMSHELL_N 1*16+GPIOB_CLAMSHELL_N
++#define GPIO_LCD_PWR3_ON 1*16+GPIOB_LCD_PWR3_ON
++#define GPIO_BB_ALERT 1*16+GPIOB_BB_ALERT
++
++#define GPIO_BB_RESET2 1*16+GPIOB_BB_RESET2
++#define GPIO_EARPHONE_N 1*16+GPIOB_EARPHONE_N
++#define GPIO_MICRECORD_N 1*16+GPIOB_MICRECORD_N
++#define GPIO_NIGHT_SENSOR 1*16+GPIOB_NIGHT_SENSOR
++
++#define GPIO_UMTS_DCD 1*16+GPIOB_UMTS_DCD
++#define GPIO_UNKNOWNB13 1*16+GPIOB_UNKNOWN13
++#define GPIO_CHARGE_EN 1*16+GPIOB_CHARGE_EN
++#define GPIO_USB_PUEN 1*16+GPIOB_USB_PUEN
++
++/* ASIC3 GPIO C bank */
++
++#define GPIO_LED_BTWIFI 2*16+GPIOC_LED_BTWIFI
++#define GPIO_LED_RED 2*16+GPIOC_LED_RED
++#define GPIO_LED_GREEN 2*16+GPIOC_LED_GREEN
++#define GPIO_BOARDID3 2*16+GPIOC_BOARDID3
++
++#define GPIO_WIFI_IRQ_N 2*16+GPIOC_WIFI_IRQ_N
++#define GPIO_WIFI_RESET 2*16+GPIOC_WIFI_RESET
++#define GPIO_WIFI_PWR1_ON 2*16+GPIOC_WIFI_PWR1_ON
++#define GPIO_BT_RESET 2*16+GPIOC_BT_RESET
++
++#define GPIO_UNKNOWNC8 2*16+GPIOC_UNKNOWN8
++#define GPIO_LCD_PWR1_ON 2*16+GPIOC_LCD_PWR1_ON
++#define GPIO_LCD_PWR2_ON 2*16+GPIOC_LCD_PWR2_ON
++#define GPIO_BOARDID2 2*16+GPIOC_BOARDID2
++
++#define GPIO_BOARDID1 2*16+GPIOC_BOARDID1
++#define GPIO_BOARDID0 2*16+GPIOC_BOARDID0
++#define GPIO_BT_PWR_ON 2*16+GPIOC_BT_PWR_ON
++#define GPIO_CHARGE_ON 2*16+GPIOC_CHARGE_ON
++
++/* ASIC3 GPIO D bank */
++
++#define GPIO_KEY_OK_N 3*16+GPIOD_KEY_OK_N
++#define GPIO_KEY_RIGHT_N 3*16+GPIOD_KEY_RIGHT_N
++#define GPIO_KEY_LEFT_N 3*16+GPIOD_KEY_LEFT_N
++#define GPIO_KEY_DOWN_N 3*16+GPIOD_KEY_DOWN_N
++
++#define GPIO_KEY_UP_N 3*16+GPIOD_KEY_UP_N
++#define GPIO_SDIO_DET 3*16+GPIOD_SDIO_DET
++#define GPIO_WIFI_PWR2_ON 3*16+GPIOD_WIFI_PWR2_ON
++#define GPIO_HW_REBOOT 3*16+GPIOD_HW_REBOOT
++
++#define GPIO_BB_RESET1 3*16+GPIOD_BB_RESET1
++#define GPIO_UNKNOWND9 3*16+GPIOD_UNKNOWN9
++#define GPIO_VIBRA_PWR_ON 3*16+GPIOD_VIBRA_PWR_ON
++#define GPIO_WIFI_PWR3_ON 3*16+GPIOD_WIFI_PWR3_ON
++
++#define GPIO_FL_PWR_ON 3*16+GPIOD_FL_PWR_ON
++#define GPIO_LCD_PWR4_ON 3*16+GPIOD_LCD_PWR4_ON
++#define GPIO_BL_KEYP_PWR_ON 3*16+GPIOD_BL_KEYP_PWR_ON
++#define GPIO_BL_KEYB_PWR_ON 3*16+GPIOD_BL_KEYB_PWR_ON
++
++#define HTCUNIVERSAL_EGPIO_BASE PXA_CS2_PHYS+0x02000000
++
++#define EGPIO4_ON 4 /* something */
++#define EGPIO5_BT_3V3_ON 5 /* Bluetooth related */
++#define EGPIO6_WIFI_ON 6 /* WLAN related*/
++
++extern void htcuniversal_egpio_enable( u_int16_t bits );
++extern void htcuniversal_egpio_disable( u_int16_t bits );
++
++#endif /* _HTCUNIVERSAL_ASIC_H_ */
++
+Index: linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-gpio.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-gpio.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,220 @@
++/*
++ * include/asm-arm/arch-pxa/htcuniversal-gpio.h
++ * History:
++ *
++ * 2004-12-10 Michael Opdenacker. Wrote down GPIO settings as identified by Jamey Hicks.
++ * Reused the h2200-gpio.h file as a template.
++ */
++
++#ifndef _HTCUNIVERSAL_GPIO_H_
++#define _HTCUNIVERSAL_GPIO_H_
++
++#include <asm/arch/pxa-regs.h>
++
++#define GET_HTCUNIVERSAL_GPIO(gpio) \
++ (GPLR(GPIO_NR_HTCUNIVERSAL_ ## gpio) & GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio))
++
++#define SET_HTCUNIVERSAL_GPIO(gpio, setp) \
++do { \
++if (setp) \
++ GPSR(GPIO_NR_HTCUNIVERSAL_ ## gpio) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio); \
++else \
++ GPCR(GPIO_NR_HTCUNIVERSAL_ ## gpio) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio); \
++} while (0)
++
++#define SET_HTCUNIVERSAL_GPIO_N(gpio, setp) \
++do { \
++if (setp) \
++ GPCR(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N); \
++else \
++ GPSR(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N) = GPIO_bit(GPIO_NR_HTCUNIVERSAL_ ## gpio ## _N); \
++} while (0)
++
++#define HTCUNIVERSAL_IRQ(gpio) \
++ IRQ_GPIO(GPIO_NR_HTCUNIVERSAL_ ## gpio)
++
++#define GPIO_NR_HTCUNIVERSAL_KEY_ON_N 0
++#define GPIO_NR_HTCUNIVERSAL_GP_RST_N 1
++
++#define GPIO_NR_HTCUNIVERSAL_USB_DET 9
++#define GPIO_NR_HTCUNIVERSAL_POWER_DET 10
++
++#define GPIO_NR_HTCUNIVERSAL_CIF_DD7 12
++#define GPIO_NR_HTCUNIVERSAL_ASIC3_SDIO_INT_N 13
++#define GPIO_NR_HTCUNIVERSAL_ASIC3_EXT_INT 14
++#define GPIO_NR_HTCUNIVERSAL_CS1_N 15
++
++#define GPIO_NR_HTCUNIVERSAL_CIF_DD6 17
++#define GPIO_NR_HTCUNIVERSAL_RDY 18
++
++#define GPIO_NR_HTCUNIVERSAL_PHONE_START 19
++
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT7 22
++#define GPIO_NR_HTCUNIVERSAL_SPI_CLK 23
++#define GPIO_NR_HTCUNIVERSAL_SPI_FRM 24
++#define GPIO_NR_HTCUNIVERSAL_SPI_DO 25
++#define GPIO_NR_HTCUNIVERSAL_SPI_DI 26
++
++#define GPIO_NR_HTCUNIVERSAL_CODEC_ON 27
++#define GPIO_NR_HTCUNIVERSAL_I2S_BCK 28
++#define GPIO_NR_HTCUNIVERSAL_I2S_DIN 29
++#define GPIO_NR_HTCUNIVERSAL_I2S_DOUT 30
++#define GPIO_NR_HTCUNIVERSAL_I2S_SYNC 31
++
++#define GPIO_NR_HTCUNIVERSAL_RS232_ON 32
++#define GPIO_NR_HTCUNIVERSAL_CS5_N 33
++
++#define GPIO_NR_HTCUNIVERSAL_PHONE_RXD 34
++#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS 35
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN7 36
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN3 37
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN4 38
++#define GPIO_NR_HTCUNIVERSAL_PHONE_TXD 39
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT6 40
++#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS 41
++#define GPIO_NR_HTCUNIVERSAL_BT_RXD 42
++#define GPIO_NR_HTCUNIVERSAL_BT_TXD 43
++#define GPIO_NR_HTCUNIVERSAL_BT_UART_CTS 44
++#define GPIO_NR_HTCUNIVERSAL_BT_UART_RTS 45
++
++#define GPIO_NR_HTCUNIVERSAL_SIR_RXD 42
++#define GPIO_NR_HTCUNIVERSAL_SIR_TXD 43
++
++#define GPIO_NR_HTCUNIVERSAL_POE_N 48
++#define GPIO_NR_HTCUNIVERSAL_PWE_N 49
++#define GPIO_NR_HTCUNIVERSAL_CIF_DD3 50
++#define GPIO_NR_HTCUNIVERSAL_CIF_DD2 51
++#define GPIO_NR_HTCUNIVERSAL_CIF_DD4 52
++
++#define GPIO_NR_HTCUNIVERSAL_CIF_MCLK 53
++#define GPIO_NR_HTCUNIVERSAL_CIF_PCLK 54
++#define GPIO_NR_HTCUNIVERSAL_CIF_DD1 55
++
++#define GPIO_NR_HTCUNIVERSAL_LDD0 58
++#define GPIO_NR_HTCUNIVERSAL_LDD1 59
++#define GPIO_NR_HTCUNIVERSAL_LDD2 60
++#define GPIO_NR_HTCUNIVERSAL_LDD3 61
++#define GPIO_NR_HTCUNIVERSAL_LDD4 62
++#define GPIO_NR_HTCUNIVERSAL_LDD5 63
++#define GPIO_NR_HTCUNIVERSAL_LDD6 64
++#define GPIO_NR_HTCUNIVERSAL_LDD7 65
++#define GPIO_NR_HTCUNIVERSAL_LDD8 66
++#define GPIO_NR_HTCUNIVERSAL_LDD9 67
++#define GPIO_NR_HTCUNIVERSAL_LDD10 68
++#define GPIO_NR_HTCUNIVERSAL_LDD11 69
++#define GPIO_NR_HTCUNIVERSAL_LDD12 70
++#define GPIO_NR_HTCUNIVERSAL_LDD13 71
++#define GPIO_NR_HTCUNIVERSAL_LDD14 72
++#define GPIO_NR_HTCUNIVERSAL_LDD15 73
++
++#define GPIO_NR_HTCUNIVERSAL_LFCLK_RD 74
++#define GPIO_NR_HTCUNIVERSAL_LFCLK_A0 75
++#define GPIO_NR_HTCUNIVERSAL_LFCLK_WR 76
++#define GPIO_NR_HTCUNIVERSAL_LBIAS 77
++
++#define GPIO_NR_HTCUNIVERSAL_CS2_N 78
++#define GPIO_NR_HTCUNIVERSAL_CS3_N 79
++#define GPIO_NR_HTCUNIVERSAL_CS4_N 80
++#define GPIO_NR_HTCUNIVERSAL_CIF_DD0 81
++#define GPIO_NR_HTCUNIVERSAL_CIF_DD5 82
++
++#define GPIO_NR_HTCUNIVERSAL_CIF_LV 84
++#define GPIO_NR_HTCUNIVERSAL_CIF_FV 85
++
++#define GPIO_NR_HTCUNIVERSAL_LCD1 86
++#define GPIO_NR_HTCUNIVERSAL_LCD2 87
++
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN5 90
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN6 91
++
++#define GPIO_NR_HTCUNIVERSAL_DREQ1 97
++
++#define GPIO_NR_HTCUNIVERSAL_PHONE_RESET 98
++
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN0 100
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN1 101
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN2 102
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT0 103
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT1 104
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT2 105
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT3 106
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT4 107
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT5 108
++
++#define GPIO_NR_HTCUNIVERSAL_PHONE_UNKNOWN 109
++#define GPIO_NR_HTCUNIVERSAL_PHONE_OFF 110
++
++#define GPIO_NR_HTCUNIVERSAL_USB_PUEN 112
++#define GPIO_NR_HTCUNIVERSAL_I2S_SYSCLK 113
++
++#define GPIO_NR_HTCUNIVERSAL_PWM_OUT1 115
++
++#define GPIO_NR_HTCUNIVERSAL_I2C_SCL 117
++#define GPIO_NR_HTCUNIVERSAL_I2C_SDA 118
++
++#if 0
++#define GPIO_NR_HTCUNIVERSAL_CPU_BATT_FAULT_N
++#define GPIO_NR_HTCUNIVERSAL_ASIC3_RESET_N
++#define GPIO_NR_HTCUNIVERSAL_CHARGE_EN_N
++#define GPIO_NR_HTCUNIVERSAL_FLASH_VPEN
++#define GPIO_NR_HTCUNIVERSAL_BATT_OFF
++#define GPIO_NR_HTCUNIVERSAL_USB_CHARGE_RATE
++#define GPIO_NR_HTCUNIVERSAL_BL_DETECT_N
++#define GPIO_NR_HTCUNIVERSAL_CPU_HW_RESET_N
++#endif
++
++
++#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_CLK_MD (23 | GPIO_ALT_FN_2_OUT)
++#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_FRM_MD (24 | GPIO_ALT_FN_2_OUT)
++#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DO_MD (25 | GPIO_ALT_FN_2_OUT)
++#define GPIO_NR_HTCUNIVERSAL_TOUCHSCREEN_SPI_DI_MD (26 | GPIO_ALT_FN_1_IN)
++
++#define GPIO_NR_HTCUNIVERSAL_I2S_BCK_MD (28 | GPIO_ALT_FN_1_OUT)
++#define GPIO_NR_HTCUNIVERSAL_I2S_DIN_MD (29 | GPIO_ALT_FN_2_IN)
++#define GPIO_NR_HTCUNIVERSAL_I2S_DOUT_MD (30 | GPIO_ALT_FN_1_OUT)
++#define GPIO_NR_HTCUNIVERSAL_I2S_SYNC_MD (31 | GPIO_ALT_FN_1_OUT)
++
++#define GPIO_NR_HTCUNIVERSAL_PHONE_RXD_MD (34 | GPIO_ALT_FN_1_IN)
++#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_CTS_MD (35 | GPIO_ALT_FN_1_IN)
++
++#define GPIO_NR_HTCUNIVERSAL_PHONE_TXD_MD (39 | GPIO_ALT_FN_2_OUT)
++#define GPIO_NR_HTCUNIVERSAL_PHONE_UART_RTS_MD (41 | GPIO_ALT_FN_2_OUT)
++
++#define GPIO_NR_HTCUNIVERSAL_BT_RXD_MD (42 | GPIO_ALT_FN_1_IN)
++#define GPIO_NR_HTCUNIVERSAL_BT_TXD_MD (43 | GPIO_ALT_FN_2_OUT)
++#define GPIO_NR_HTCUNIVERSAL_BT_UART_CTS_MD (44 | GPIO_ALT_FN_1_IN)
++#define GPIO_NR_HTCUNIVERSAL_BT_UART_RTS_MD (45 | GPIO_ALT_FN_2_OUT)
++
++#define GPIO_NR_HTCUNIVERSAL_SIR_RXD_MD (46 | GPIO_ALT_FN_2_IN)
++#define GPIO_NR_HTCUNIVERSAL_SIR_TXD_MD (47 | GPIO_ALT_FN_1_OUT)
++
++#define GPIO_NR_HTCUNIVERSAL_POE_N_MD (48 | GPIO_ALT_FN_2_OUT | GPIO_DFLT_HIGH)
++#define GPIO_NR_HTCUNIVERSAL_PWE_N_MD (49 | GPIO_ALT_FN_2_OUT | GPIO_DFLT_HIGH)
++
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN0_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN0 | GPIO_ALT_FN_1_IN)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN1_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN1 | GPIO_ALT_FN_1_IN)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN2_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN2 | GPIO_ALT_FN_1_IN)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN3_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN3 | GPIO_ALT_FN_3_IN)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN4_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN4 | GPIO_ALT_FN_2_IN)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN5_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN5 | GPIO_ALT_FN_1_IN)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN6_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN6 | GPIO_ALT_FN_1_IN)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKIN7_MD (GPIO_NR_HTCUNIVERSAL_KP_MKIN7 | GPIO_ALT_FN_3_IN)
++
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT0_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT0 | GPIO_ALT_FN_2_OUT)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT1_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT1 | GPIO_ALT_FN_2_OUT)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT2_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT2 | GPIO_ALT_FN_2_OUT)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT3_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT3 | GPIO_ALT_FN_2_OUT)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT4_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT4 | GPIO_ALT_FN_2_OUT)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT5_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT5 | GPIO_ALT_FN_2_OUT)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT6_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT6 | GPIO_ALT_FN_1_OUT)
++#define GPIO_NR_HTCUNIVERSAL_KP_MKOUT7_MD (GPIO_NR_HTCUNIVERSAL_KP_MKOUT7 | GPIO_ALT_FN_1_OUT)
++
++
++#define GPIO_NR_HTCUNIVERSAL_I2S_SYSCLK_MD (113 | GPIO_ALT_FN_1_OUT)
++
++#define GPIO_NR_HTCUNIVERSAL_PWM1OUT_MD (115 | GPIO_ALT_FN_3_OUT)
++
++#define GPIO_NR_HTCUNIVERSAL_I2C_SCL_MD (117 | GPIO_ALT_FN_1_OUT)
++#define GPIO_NR_HTCUNIVERSAL_I2C_SDA_MD (118 | GPIO_ALT_FN_1_OUT)
++
++#endif /* _HTCUNIVERSAL_GPIO_H */
+Index: linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-init.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-init.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,14 @@
++/*
++ * include/asm/arm/arch-pxa/htcuniversal-init.h
++ * Copyright (c) 2004 SDG Systems, LLC
++ */
++
++#ifndef _HTCUNIVERSAL_INIT_H_
++#define _HTCUNIVERSAL_INIT_H_
++
++/* htcuniversal initialization data should be found here
++ * See -init.h files from other devices for details
++ */
++
++#endif /* _HTCUNIVERSAL_INIT_H_ */
++
+Index: linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,3 @@
++#include <asm/arch/irqs.h>
++
++#define HTCUNIVERSAL_ASIC3_IRQ_BASE IRQ_BOARD_START
+Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-pm_ll.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-pm_ll.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,6 @@
++struct pxa_ll_pm_ops {
++ void (*suspend)(unsigned long);
++ void (*resume)(void);
++};
++
++extern struct pxa_ll_pm_ops *pxa_pm_set_ll_ops(struct pxa_ll_pm_ops *new_ops);
+Index: linux-2.6.23/include/asm-arm/hardware/asic3_keys.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/asm-arm/hardware/asic3_keys.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,18 @@
++#include <linux/input.h>
++
++struct asic3_keys_button {
++ /* Configuration parameters */
++ int keycode;
++ int gpio;
++ int active_low;
++ char *desc;
++ int type;
++ /* Internal state vars - add below */
++};
++
++struct asic3_keys_platform_data {
++ struct asic3_keys_button *buttons;
++ int nbuttons;
++ struct input_dev *input;
++ struct device *asic3_dev;
++};
+Index: linux-2.6.23/include/asm-arm/hardware/asic3_leds.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/asm-arm/hardware/asic3_leds.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,34 @@
++/*
++ * LEDs support for HTC ASIC3 devices.
++ *
++ * Copyright (c) 2006 Anton Vorontsov <cbou@mail.ru>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/leds.h>
++
++struct asic3_leds_machinfo;
++
++struct asic3_led {
++ struct led_classdev led_cdev;
++ int hw_num; /* Number of "hardware-accelerated" led */
++ int gpio_num; /* Number of GPIO if hw_num == -1 */
++ struct asic3_leds_machinfo *machinfo;
++};
++
++struct asic3_leds_machinfo {
++ int num_leds;
++ struct asic3_led *leds;
++ struct platform_device *asic3_pdev;
++};
++
++extern int asic3_leds_register(void);
++extern void asic3_leds_unregister(void);
++
+Index: linux-2.6.23/include/asm-arm/hardware/ipaq-asic3.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/asm-arm/hardware/ipaq-asic3.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,602 @@
++/*
++ *
++ * Definitions for the HTC ASIC3 chip found in several handheld devices
++ *
++ * Copyright 2001 Compaq Computer Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
++ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
++ * FITNESS FOR ANY PARTICULAR PURPOSE.
++ *
++ * Author: Andrew Christian
++ *
++ */
++
++#ifndef IPAQ_ASIC3_H
++#define IPAQ_ASIC3_H
++
++/****************************************************/
++/* IPAQ, ASIC #3, replaces ASIC #1 */
++
++#define IPAQ_ASIC3_OFFSET(x,y) (_IPAQ_ASIC3_ ## x ## _Base + _IPAQ_ASIC3_ ## x ## _ ## y)
++#define IPAQ_ASIC3_GPIO_OFFSET(x,y) (_IPAQ_ASIC3_GPIO_ ## x ## _Base + _IPAQ_ASIC3_GPIO_ ## y)
++
++
++/* All offsets below are specified with the following address bus shift */
++#define ASIC3_DEFAULT_ADDR_SHIFT 2
++
++#define _IPAQ_ASIC3_GPIO_A_Base 0x0000
++#define _IPAQ_ASIC3_GPIO_B_Base 0x0100
++#define _IPAQ_ASIC3_GPIO_C_Base 0x0200
++#define _IPAQ_ASIC3_GPIO_D_Base 0x0300
++
++#define _IPAQ_ASIC3_GPIO_Mask 0x00 /* R/W 0:don't mask, 1:mask interrupt */
++#define _IPAQ_ASIC3_GPIO_Direction 0x04 /* R/W 0:input, 1:output */
++#define _IPAQ_ASIC3_GPIO_Out 0x08 /* R/W 0:output low, 1:output high */
++#define _IPAQ_ASIC3_GPIO_TriggerType 0x0c /* R/W 0:level, 1:edge */
++#define _IPAQ_ASIC3_GPIO_EdgeTrigger 0x10 /* R/W 0:falling, 1:rising */
++#define _IPAQ_ASIC3_GPIO_LevelTrigger 0x14 /* R/W 0:low, 1:high level detect */
++#define _IPAQ_ASIC3_GPIO_SleepMask 0x18 /* R/W 0:don't mask, 1:mask trigger in sleep mode */
++#define _IPAQ_ASIC3_GPIO_SleepOut 0x1c /* R/W level 0:low, 1:high in sleep mode */
++#define _IPAQ_ASIC3_GPIO_BattFaultOut 0x20 /* R/W level 0:low, 1:high in batt_fault */
++#define _IPAQ_ASIC3_GPIO_IntStatus 0x24 /* R/W 0:none, 1:detect */
++#define _IPAQ_ASIC3_GPIO_AltFunction 0x28 /* R/W 0:normal control 1:LED register control */
++#define _IPAQ_ASIC3_GPIO_SleepConf 0x2c /* R/W bit 1: autosleep 0: disable gposlpout in normal mode, enable gposlpout in sleep mode */
++#define _IPAQ_ASIC3_GPIO_Status 0x30 /* R Pin status */
++
++#define IPAQ_ASIC3_GPIO_A_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Mask )
++#define IPAQ_ASIC3_GPIO_A_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Direction )
++#define IPAQ_ASIC3_GPIO_A_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Out )
++#define IPAQ_ASIC3_GPIO_A_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, A, TriggerType )
++#define IPAQ_ASIC3_GPIO_A_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, A, EdgeTrigger )
++#define IPAQ_ASIC3_GPIO_A_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, A, LevelTrigger )
++#define IPAQ_ASIC3_GPIO_A_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepMask )
++#define IPAQ_ASIC3_GPIO_A_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepOut )
++#define IPAQ_ASIC3_GPIO_A_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, A, BattFaultOut )
++#define IPAQ_ASIC3_GPIO_A_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, A, IntStatus )
++#define IPAQ_ASIC3_GPIO_A_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, A, AltFunction )
++#define IPAQ_ASIC3_GPIO_A_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, A, SleepConf )
++#define IPAQ_ASIC3_GPIO_A_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, A, Status )
++
++#define IPAQ_ASIC3_GPIO_B_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Mask )
++#define IPAQ_ASIC3_GPIO_B_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Direction )
++#define IPAQ_ASIC3_GPIO_B_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Out )
++#define IPAQ_ASIC3_GPIO_B_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, B, TriggerType )
++#define IPAQ_ASIC3_GPIO_B_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, B, EdgeTrigger )
++#define IPAQ_ASIC3_GPIO_B_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, B, LevelTrigger )
++#define IPAQ_ASIC3_GPIO_B_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepMask )
++#define IPAQ_ASIC3_GPIO_B_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepOut )
++#define IPAQ_ASIC3_GPIO_B_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, B, BattFaultOut )
++#define IPAQ_ASIC3_GPIO_B_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, B, IntStatus )
++#define IPAQ_ASIC3_GPIO_B_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, B, AltFunction )
++#define IPAQ_ASIC3_GPIO_B_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, B, SleepConf )
++#define IPAQ_ASIC3_GPIO_B_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, B, Status )
++
++#define IPAQ_ASIC3_GPIO_C_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Mask )
++#define IPAQ_ASIC3_GPIO_C_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Direction )
++#define IPAQ_ASIC3_GPIO_C_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Out )
++#define IPAQ_ASIC3_GPIO_C_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, C, TriggerType )
++#define IPAQ_ASIC3_GPIO_C_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, C, EdgeTrigger )
++#define IPAQ_ASIC3_GPIO_C_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, C, LevelTrigger )
++#define IPAQ_ASIC3_GPIO_C_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepMask )
++#define IPAQ_ASIC3_GPIO_C_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepOut )
++#define IPAQ_ASIC3_GPIO_C_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, C, BattFaultOut )
++#define IPAQ_ASIC3_GPIO_C_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, C, IntStatus )
++#define IPAQ_ASIC3_GPIO_C_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, C, AltFunction )
++#define IPAQ_ASIC3_GPIO_C_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, C, SleepConf )
++#define IPAQ_ASIC3_GPIO_C_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, C, Status )
++
++#define IPAQ_ASIC3_GPIO_D_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Mask )
++#define IPAQ_ASIC3_GPIO_D_DIR(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Direction )
++#define IPAQ_ASIC3_GPIO_D_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Out )
++#define IPAQ_ASIC3_GPIO_D_LEVELTRI(_b) IPAQ_ASIC3_GPIO( _b, u16, D, TriggerType )
++#define IPAQ_ASIC3_GPIO_D_RISING(_b) IPAQ_ASIC3_GPIO( _b, u16, D, EdgeTrigger )
++#define IPAQ_ASIC3_GPIO_D_LEVEL(_b) IPAQ_ASIC3_GPIO( _b, u16, D, LevelTrigger )
++#define IPAQ_ASIC3_GPIO_D_SLEEP_MASK(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepMask )
++#define IPAQ_ASIC3_GPIO_D_SLEEP_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepOut )
++#define IPAQ_ASIC3_GPIO_D_BATT_FAULT_OUT(_b) IPAQ_ASIC3_GPIO( _b, u16, D, BattFaultOut )
++#define IPAQ_ASIC3_GPIO_D_INT_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, D, IntStatus )
++#define IPAQ_ASIC3_GPIO_D_ALT_FUNCTION(_b) IPAQ_ASIC3_GPIO( _b, u16, D, AltFunction )
++#define IPAQ_ASIC3_GPIO_D_SLEEP_CONF(_b) IPAQ_ASIC3_GPIO( _b, u16, D, SleepConf )
++#define IPAQ_ASIC3_GPIO_D_STATUS(_b) IPAQ_ASIC3_GPIO( _b, u16, D, Status )
++
++#define _IPAQ_ASIC3_SPI_Base 0x0400
++#define _IPAQ_ASIC3_SPI_Control 0x0000
++#define _IPAQ_ASIC3_SPI_TxData 0x0004
++#define _IPAQ_ASIC3_SPI_RxData 0x0008
++#define _IPAQ_ASIC3_SPI_Int 0x000c
++#define _IPAQ_ASIC3_SPI_Status 0x0010
++
++#define IPAQ_ASIC3_SPI_Control(_b) IPAQ_ASIC3( _b, u16, SPI, Control )
++#define IPAQ_ASIC3_SPI_TxData(_b) IPAQ_ASIC3( _b, u16, SPI, TxData )
++#define IPAQ_ASIC3_SPI_RxData(_b) IPAQ_ASIC3( _b, u16, SPI, RxData )
++#define IPAQ_ASIC3_SPI_Int(_b) IPAQ_ASIC3( _b, u16, SPI, Int )
++#define IPAQ_ASIC3_SPI_Status(_b) IPAQ_ASIC3( _b, u16, SPI, Status )
++
++#define SPI_CONTROL_SPR(clk) ((clk) & 0x0f) /* Clock rate */
++
++#define _IPAQ_ASIC3_PWM_0_Base 0x0500
++#define _IPAQ_ASIC3_PWM_1_Base 0x0600
++#define _IPAQ_ASIC3_PWM_TimeBase 0x0000
++#define _IPAQ_ASIC3_PWM_PeriodTime 0x0004
++#define _IPAQ_ASIC3_PWM_DutyTime 0x0008
++
++#define IPAQ_ASIC3_PWM_TimeBase(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, TimeBase )
++#define IPAQ_ASIC3_PWM_PeriodTime(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, PeriodTime )
++#define IPAQ_ASIC3_PWM_DutyTime(_b, x) IPAQ_ASIC3_N( _b, u16, PWM, x, DutyTime )
++
++#define PWM_TIMEBASE_VALUE(x) ((x)&0xf) /* Low 4 bits sets time base */
++#define PWM_TIMEBASE_ENABLE (1 << 4) /* Enable clock */
++
++#define _IPAQ_ASIC3_LED_0_Base 0x0700
++#define _IPAQ_ASIC3_LED_1_Base 0x0800
++#define _IPAQ_ASIC3_LED_2_Base 0x0900
++#define _IPAQ_ASIC3_LED_TimeBase 0x0000 /* R/W 7 bits */
++#define _IPAQ_ASIC3_LED_PeriodTime 0x0004 /* R/W 12 bits */
++#define _IPAQ_ASIC3_LED_DutyTime 0x0008 /* R/W 12 bits */
++#define _IPAQ_ASIC3_LED_AutoStopCount 0x000c /* R/W 16 bits */
++
++#define IPAQ_ASIC3_LED_TimeBase(_b, x) IPAQ_ASIC3_N( _b, u8, LED, x, TimeBase )
++#define IPAQ_ASIC3_LED_PeriodTime(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, PeriodTime )
++#define IPAQ_ASIC3_LED_DutyTime(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, DutyTime )
++#define IPAQ_ASIC3_LED_AutoStopCount(_b, x) IPAQ_ASIC3_N( _b, u16, LED, x, AutoStopCount )
++
++/* LED TimeBase bits - match ASIC2 */
++#define LED_TBS 0x0f /* Low 4 bits sets time base, max = 13 */
++ /* Note: max = 5 on hx4700 */
++ /* 0: maximum time base */
++ /* 1: maximum time base / 2 */
++ /* n: maximum time base / 2^n */
++
++#define LED_EN (1 << 4) /* LED ON/OFF 0:off, 1:on */
++#define LED_AUTOSTOP (1 << 5) /* LED ON/OFF auto stop set 0:disable, 1:enable */
++#define LED_ALWAYS (1 << 6) /* LED Interrupt Mask 0:No mask, 1:mask */
++
++#define _IPAQ_ASIC3_CLOCK_Base 0x0A00
++#define _IPAQ_ASIC3_CLOCK_CDEX 0x00
++#define _IPAQ_ASIC3_CLOCK_SEL 0x04
++
++#define IPAQ_ASIC3_CLOCK_CDEX(_b) IPAQ_ASIC3( _b, u16, CLOCK, CDEX )
++#define IPAQ_ASIC3_CLOCK_SEL(_b) IPAQ_ASIC3( _b, u16, CLOCK, SEL )
++
++#define CLOCK_CDEX_SOURCE (1 << 0) /* 2 bits */
++#define CLOCK_CDEX_SOURCE0 (1 << 0)
++#define CLOCK_CDEX_SOURCE1 (1 << 1)
++#define CLOCK_CDEX_SPI (1 << 2)
++#define CLOCK_CDEX_OWM (1 << 3)
++#define CLOCK_CDEX_PWM0 (1 << 4)
++#define CLOCK_CDEX_PWM1 (1 << 5)
++#define CLOCK_CDEX_LED0 (1 << 6)
++#define CLOCK_CDEX_LED1 (1 << 7)
++#define CLOCK_CDEX_LED2 (1 << 8)
++
++#define CLOCK_CDEX_SD_HOST (1 << 9) /* R/W: SD host clock source 24.576M/12.288M */
++#define CLOCK_CDEX_SD_BUS (1 << 10) /* R/W: SD bus clock source control 24.576M/12.288M */
++#define CLOCK_CDEX_SMBUS (1 << 11)
++#define CLOCK_CDEX_CONTROL_CX (1 << 12)
++
++#define CLOCK_CDEX_EX0 (1 << 13) /* R/W: 32.768 kHz crystal */
++#define CLOCK_CDEX_EX1 (1 << 14) /* R/W: 24.576 MHz crystal */
++
++#define CLOCK_SEL_SD_HCLK_SEL (1 << 0) /* R/W: SDIO host clock select - 1: 24.576 Mhz, 0: 12.288 MHz */
++#define CLOCK_SEL_SD_BCLK_SEL (1 << 1) /* R/W: SDIO bus clock select - 1: 24.576 MHz, 0: 12.288 MHz */
++#define CLOCK_SEL_CX (1 << 2) /* R/W: INT clock source control (32.768 kHz) */
++
++
++#define _IPAQ_ASIC3_INTR_Base 0x0B00
++
++#define _IPAQ_ASIC3_INTR_IntMask 0x00 /* Interrupt mask control */
++#define _IPAQ_ASIC3_INTR_PIntStat 0x04 /* Peripheral interrupt status */
++#define _IPAQ_ASIC3_INTR_IntCPS 0x08 /* Interrupt timer clock pre-scale */
++#define _IPAQ_ASIC3_INTR_IntTBS 0x0c /* Interrupt timer set */
++
++#define IPAQ_ASIC3_INTR_IntMask(_b) IPAQ_ASIC3( _b, u8, INTR, IntMask )
++#define IPAQ_ASIC3_INTR_PIntStat(_b) IPAQ_ASIC3( _b, u8, INTR, PIntStat )
++#define IPAQ_ASIC3_INTR_IntCPS(_b) IPAQ_ASIC3( _b, u8, INTR, IntCPS )
++#define IPAQ_ASIC3_INTR_IntTBS(_b) IPAQ_ASIC3( _b, u16, INTR, IntTBS )
++
++#define ASIC3_INTMASK_GINTMASK (1 << 0) /* Global interrupt mask 1:enable */
++#define ASIC3_INTMASK_GINTEL (1 << 1) /* 1: rising edge, 0: hi level */
++#define ASIC3_INTMASK_MASK0 (1 << 2)
++#define ASIC3_INTMASK_MASK1 (1 << 3)
++#define ASIC3_INTMASK_MASK2 (1 << 4)
++#define ASIC3_INTMASK_MASK3 (1 << 5)
++#define ASIC3_INTMASK_MASK4 (1 << 6)
++#define ASIC3_INTMASK_MASK5 (1 << 7)
++
++#define ASIC3_INTR_PERIPHERAL_A (1 << 0)
++#define ASIC3_INTR_PERIPHERAL_B (1 << 1)
++#define ASIC3_INTR_PERIPHERAL_C (1 << 2)
++#define ASIC3_INTR_PERIPHERAL_D (1 << 3)
++#define ASIC3_INTR_LED0 (1 << 4)
++#define ASIC3_INTR_LED1 (1 << 5)
++#define ASIC3_INTR_LED2 (1 << 6)
++#define ASIC3_INTR_SPI (1 << 7)
++#define ASIC3_INTR_SMBUS (1 << 8)
++#define ASIC3_INTR_OWM (1 << 9)
++
++#define ASIC3_INTR_CPS(x) ((x)&0x0f) /* 4 bits, max 14 */
++#define ASIC3_INTR_CPS_SET ( 1 << 4 ) /* Time base enable */
++
++
++/* Basic control of the SD ASIC */
++#define _IPAQ_ASIC3_SDHWCTRL_Base 0x0E00
++
++#define _IPAQ_ASIC3_SDHWCTRL_SDConf 0x00
++#define IPAQ_ASIC3_SDHWCTRL_SDConf(_b) IPAQ_ASIC3( _b, u8, SDHWCTRL, SDConf )
++
++#define ASIC3_SDHWCTRL_SUSPEND (1 << 0) /* 1=suspend all SD operations */
++#define ASIC3_SDHWCTRL_CLKSEL (1 << 1) /* 1=SDICK, 0=HCLK */
++#define ASIC3_SDHWCTRL_PCLR (1 << 2) /* All registers of SDIO cleared */
++#define ASIC3_SDHWCTRL_LEVCD (1 << 3) /* Level of SD card detection: 1:high, 0:low */
++#define ASIC3_SDHWCTRL_LEVWP (1 << 4) /* Level of SD card write protection: 1=low, 0=high */
++#define ASIC3_SDHWCTRL_SDLED (1 << 5) /* SD card LED signal 1=enable, 0=disable */
++#define ASIC3_SDHWCTRL_SDPWR (1 << 6) /* SD card power supply control 1=enable */
++
++
++/* This is a pointer to an array of 12 u32 values - but only the lower 2 bytes matter */
++/* Use it as "IPAQ_ASIC3_HWPROTECT_ARRAY[x]" */
++
++#define _IPAQ_ASIC3_HWPROTECT_Base 0x1000
++#define IPAQ_ASIC3_HWPROTECT_ARRAY ((volatile u32*)(_IPAQ_ASIC3_Base + _IPAQ_ASIC3_HWPROTECT_Base))
++#define HWPROTECT_ARRAY_LEN 12
++#define HWPROTECT_ARRAY_VALUES {0x4854,0x432d,0x5344,0x494f,0x2050,0x2f4e,0x3a33,0x3048,0x3830,0x3032,0x382d,0x3030}
++
++
++#define _IPAQ_ASIC3_EXTCF_Base 0x1100
++
++#define _IPAQ_ASIC3_EXTCF_Select 0x00
++#define _IPAQ_ASIC3_EXTCF_Reset 0x04
++
++#define IPAQ_ASIC3_EXTCF_Select(_b) IPAQ_ASIC3( _b, u16, EXTCF, Select )
++#define IPAQ_ASIC3_EXTCF_Reset(_b) IPAQ_ASIC3( _b, u16, EXTCF, Reset )
++
++#define ASIC3_EXTCF_SMOD0 (1 << 0) /* slot number of mode 0 */
++#define ASIC3_EXTCF_SMOD1 (1 << 1) /* slot number of mode 1 */
++#define ASIC3_EXTCF_SMOD2 (1 << 2) /* slot number of mode 2 */
++#define ASIC3_EXTCF_OWM_EN (1 << 4) /* enable onewire module */
++#define ASIC3_EXTCF_OWM_SMB (1 << 5) /* OWM bus selection */
++#define ASIC3_EXTCF_OWM_RESET (1 << 6) /* undocumented, used by OWM and CF */
++#define ASIC3_EXTCF_CF0_SLEEP_MODE (1 << 7) /* CF0 sleep state control */
++#define ASIC3_EXTCF_CF1_SLEEP_MODE (1 << 8) /* CF1 sleep state control */
++#define ASIC3_EXTCF_CF0_PWAIT_EN (1 << 10) /* CF0 PWAIT_n control */
++#define ASIC3_EXTCF_CF1_PWAIT_EN (1 << 11) /* CF1 PWAIT_n control */
++#define ASIC3_EXTCF_CF0_BUF_EN (1 << 12) /* CF0 buffer control */
++#define ASIC3_EXTCF_CF1_BUF_EN (1 << 13) /* CF1 buffer control */
++#define ASIC3_EXTCF_SD_MEM_ENABLE (1 << 14)
++#define ASIC3_EXTCF_CF_SLEEP (1 << 15) /* CF sleep mode control */
++
++/*****************************************************************************
++ * The Onewire interface registers
++ *
++ * OWM_CMD
++ * OWM_DAT
++ * OWM_INTR
++ * OWM_INTEN
++ * OWM_CLKDIV
++ *
++ *****************************************************************************/
++
++#define _IPAQ_ASIC3_OWM_Base 0xC00
++
++#define _IPAQ_ASIC3_OWM_CMD 0x00
++#define _IPAQ_ASIC3_OWM_DAT 0x04
++#define _IPAQ_ASIC3_OWM_INTR 0x08
++#define _IPAQ_ASIC3_OWM_INTEN 0x0C
++#define _IPAQ_ASIC3_OWM_CLKDIV 0x10
++
++#define ASIC3_OWM_CMD_ONEWR (1 << 0)
++#define ASIC3_OWM_CMD_SRA (1 << 1)
++#define ASIC3_OWM_CMD_DQO (1 << 2)
++#define ASIC3_OWM_CMD_DQI (1 << 3)
++
++#define ASIC3_OWM_INTR_PD (1 << 0)
++#define ASIC3_OWM_INTR_PDR (1 << 1)
++#define ASIC3_OWM_INTR_TBE (1 << 2)
++#define ASIC3_OWM_INTR_TEMP (1 << 3)
++#define ASIC3_OWM_INTR_RBF (1 << 4)
++
++#define ASIC3_OWM_INTEN_EPD (1 << 0)
++#define ASIC3_OWM_INTEN_IAS (1 << 1)
++#define ASIC3_OWM_INTEN_ETBE (1 << 2)
++#define ASIC3_OWM_INTEN_ETMT (1 << 3)
++#define ASIC3_OWM_INTEN_ERBF (1 << 4)
++
++#define ASIC3_OWM_CLKDIV_PRE (3 << 0) /* two bits wide at bit position 0 */
++#define ASIC3_OWM_CLKDIV_DIV (7 << 2) /* 3 bits wide at bit position 2 */
++
++
++/*****************************************************************************
++ * The SD configuration registers are at a completely different location
++ * in memory. They are divided into three sets of registers:
++ *
++ * SD_CONFIG Core configuration register
++ * SD_CTRL Control registers for SD operations
++ * SDIO_CTRL Control registers for SDIO operations
++ *
++ *****************************************************************************/
++
++#define IPAQ_ASIC3_SD_CONFIG(_b, s,x) \
++ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SD_CONFIG_Base + (_IPAQ_ASIC3_SD_CONFIG_ ## x))))
++
++#define _IPAQ_ASIC3_SD_CONFIG_Base 0x0400 // Assumes 32 bit addressing
++
++#define _IPAQ_ASIC3_SD_CONFIG_Command 0x08 /* R/W: Command */
++#define _IPAQ_ASIC3_SD_CONFIG_Addr0 0x20 /* [9:31] SD Control Register Base Address */
++#define _IPAQ_ASIC3_SD_CONFIG_Addr1 0x24 /* [9:31] SD Control Register Base Address */
++#define _IPAQ_ASIC3_SD_CONFIG_IntPin 0x78 /* R/O: interrupt assigned to pin */
++#define _IPAQ_ASIC3_SD_CONFIG_ClkStop 0x80 /* Set to 0x1f to clock SD controller, 0 otherwise. */
++ /* at 0x82 - Gated Clock Control */
++#define _IPAQ_ASIC3_SD_CONFIG_ClockMode 0x84 /* Control clock of SD controller */
++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_PinStatus 0x88 /* R/0: read status of SD pins */
++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Power1 0x90 /* Power1 - manual power control */
++ /* Power2 is at 0x92 - auto power up after card inserted */
++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Power3 0x94 /* auto power down when card removed */
++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_CardDetect 0x98 /* */
++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_Slot 0xA0 /* R/O: define support slot number */
++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk1 0x1E0 /* Could be used for gated clock (don't use) */
++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk2 0x1E2 /* Could be used for gated clock (don't use) */
++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_GPIO_OutAndEnable 0x1E8 /* GPIO Output Reg. , at 0x1EA - GPIO Output Enable Reg. */
++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_GPIO_Status 0x1EC /* GPIO Status Reg. */
++#define _IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk3 0x1F0 /* Bit 1: double buffer/single buffer */
++
++#define IPAQ_ASIC3_SD_CONFIG_Command(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Command )
++#define IPAQ_ASIC3_SD_CONFIG_Addr0(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Addr0 )
++#define IPAQ_ASIC3_SD_CONFIG_Addr1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, Addr1 )
++#define IPAQ_ASIC3_SD_CONFIG_IntPin(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, IntPin )
++#define IPAQ_ASIC3_SD_CONFIG_ClkStop(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, ClkStop )
++#define IPAQ_ASIC3_SD_CONFIG_ClockMode(_b) IPAQ_ASIC3_SD_CONFIG(_b, u8, ClockMode )
++#define IPAQ_ASIC3_SD_CONFIG_SDHC_PinStatus(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_PinStatus )
++#define IPAQ_ASIC3_SD_CONFIG_SDHC_Power1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Power1 )
++#define IPAQ_ASIC3_SD_CONFIG_SDHC_Power3(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Power3 )
++#define IPAQ_ASIC3_SD_CONFIG_SDHC_CardDetect(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_CardDetect )
++#define IPAQ_ASIC3_SD_CONFIG_SDHC_Slot(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_Slot )
++#define IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk1(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_ExtGateClk1 )
++#define IPAQ_ASIC3_SD_CONFIG_SDHC_ExtGateClk3(_b) IPAQ_ASIC3_SD_CONFIG(_b, u16, SDHC_ExtGateClk3 )
++
++#define SD_CONFIG_
++
++#define SD_CONFIG_COMMAND_MAE (1<<1) /* Memory access enable (set to 1 to access SD Controller) */
++
++#define SD_CONFIG_CLK_ENABLE_ALL 0x1f
++
++#define SD_CONFIG_POWER1_PC_33V 0x0200 /* Set for 3.3 volts */
++#define SD_CONFIG_POWER1_PC_OFF 0x0000 /* Turn off power */
++
++#define SD_CONFIG_CARDDETECTMODE_CLK ((x)&0x3) /* two bits - number of cycles for card detection */
++
++
++#define _IPAQ_ASIC3_SD_CTRL_Base 0x1000
++
++#define IPAQ_ASIC3_SD(_b, s,x) \
++ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SD_CTRL_Base + (_IPAQ_ASIC3_SD_CTRL_ ## x))))
++
++#define _IPAQ_ASIC3_SD_CTRL_Cmd 0x00
++#define _IPAQ_ASIC3_SD_CTRL_Arg0 0x08
++#define _IPAQ_ASIC3_SD_CTRL_Arg1 0x0C
++#define _IPAQ_ASIC3_SD_CTRL_StopInternal 0x10
++#define _IPAQ_ASIC3_SD_CTRL_TransferSectorCount 0x14
++#define _IPAQ_ASIC3_SD_CTRL_Response0 0x18
++#define _IPAQ_ASIC3_SD_CTRL_Response1 0x1C
++#define _IPAQ_ASIC3_SD_CTRL_Response2 0x20
++#define _IPAQ_ASIC3_SD_CTRL_Response3 0x24
++#define _IPAQ_ASIC3_SD_CTRL_Response4 0x28
++#define _IPAQ_ASIC3_SD_CTRL_Response5 0x2C
++#define _IPAQ_ASIC3_SD_CTRL_Response6 0x30
++#define _IPAQ_ASIC3_SD_CTRL_Response7 0x34
++#define _IPAQ_ASIC3_SD_CTRL_CardStatus 0x38
++#define _IPAQ_ASIC3_SD_CTRL_BufferCtrl 0x3C
++#define _IPAQ_ASIC3_SD_CTRL_IntMaskCard 0x40
++#define _IPAQ_ASIC3_SD_CTRL_IntMaskBuffer 0x44
++#define _IPAQ_ASIC3_SD_CTRL_CardClockCtrl 0x48
++#define _IPAQ_ASIC3_SD_CTRL_MemCardXferDataLen 0x4C
++#define _IPAQ_ASIC3_SD_CTRL_MemCardOptionSetup 0x50
++#define _IPAQ_ASIC3_SD_CTRL_ErrorStatus0 0x58
++#define _IPAQ_ASIC3_SD_CTRL_ErrorStatus1 0x5C
++#define _IPAQ_ASIC3_SD_CTRL_DataPort 0x60
++#define _IPAQ_ASIC3_SD_CTRL_TransactionCtrl 0x68
++#define _IPAQ_ASIC3_SD_CTRL_SoftwareReset 0x1C0
++
++#define IPAQ_ASIC3_SD_CTRL_Cmd(_b) IPAQ_ASIC3_SD( _b, u16, Cmd ) /* */
++#define IPAQ_ASIC3_SD_CTRL_Arg0(_b) IPAQ_ASIC3_SD( _b, u16, Arg0 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_Arg1(_b) IPAQ_ASIC3_SD( _b, u16, Arg1 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_StopInternal(_b) IPAQ_ASIC3_SD( _b, u16, StopInternal ) /* */
++#define IPAQ_ASIC3_SD_CTRL_TransferSectorCount(_b) IPAQ_ASIC3_SD( _b, u16, TransferSectorCount ) /* */
++#define IPAQ_ASIC3_SD_CTRL_Response0(_b) IPAQ_ASIC3_SD( _b, u16, Response0 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_Response1(_b) IPAQ_ASIC3_SD( _b, u16, Response1 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_Response2(_b) IPAQ_ASIC3_SD( _b, u16, Response2 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_Response3(_b) IPAQ_ASIC3_SD( _b, u16, Response3 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_Response4(_b) IPAQ_ASIC3_SD( _b, u16, Response4 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_Response5(_b) IPAQ_ASIC3_SD( _b, u16, Response5 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_Response6(_b) IPAQ_ASIC3_SD( _b, u16, Response6 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_Response7(_b) IPAQ_ASIC3_SD( _b, u16, Response7 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_CardStatus(_b) IPAQ_ASIC3_SD( _b, u16, CardStatus ) /* */
++#define IPAQ_ASIC3_SD_CTRL_BufferCtrl(_b) IPAQ_ASIC3_SD( _b, u16, BufferCtrl ) /* and error status*/
++#define IPAQ_ASIC3_SD_CTRL_IntMaskCard(_b) IPAQ_ASIC3_SD( _b, u16, IntMaskCard ) /* */
++#define IPAQ_ASIC3_SD_CTRL_IntMaskBuffer(_b) IPAQ_ASIC3_SD( _b, u16, IntMaskBuffer ) /* */
++#define IPAQ_ASIC3_SD_CTRL_CardClockCtrl(_b) IPAQ_ASIC3_SD( _b, u16, CardClockCtrl ) /* */
++#define IPAQ_ASIC3_SD_CTRL_MemCardXferDataLen(_b) IPAQ_ASIC3_SD( _b, u16, MemCardXferDataLen ) /* */
++#define IPAQ_ASIC3_SD_CTRL_MemCardOptionSetup(_b) IPAQ_ASIC3_SD( _b, u16, MemCardOptionSetup ) /* */
++#define IPAQ_ASIC3_SD_CTRL_ErrorStatus0(_b) IPAQ_ASIC3_SD( _b, u16, ErrorStatus0 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_ErrorStatus1(_b) IPAQ_ASIC3_SD( _b, u16, ErrorStatus1 ) /* */
++#define IPAQ_ASIC3_SD_CTRL_DataPort(_b) IPAQ_ASIC3_SD( _b, u16, DataPort ) /* */
++#define IPAQ_ASIC3_SD_CTRL_TransactionCtrl(_b) IPAQ_ASIC3_SD( _b, u16, TransactionCtrl ) /* */
++#define IPAQ_ASIC3_SD_CTRL_SoftwareReset(_b) IPAQ_ASIC3_SD( _b, u16, SoftwareReset ) /* */
++
++#define SD_CTRL_SOFTWARE_RESET_CLEAR (1<<0)
++
++#define SD_CTRL_TRANSACTIONCONTROL_SET (1<<8) // 0x0100
++
++#define SD_CTRL_CARDCLOCKCONTROL_FOR_SD_CARD (1<<15)// 0x8000
++#define SD_CTRL_CARDCLOCKCONTROL_ENABLE_CLOCK (1<<8) // 0x0100
++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_512 (1<<7) // 0x0080
++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_256 (1<<6) // 0x0040
++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_128 (1<<5) // 0x0020
++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_64 (1<<4) // 0x0010
++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_32 (1<<3) // 0x0008
++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_16 (1<<2) // 0x0004
++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_8 (1<<1) // 0x0002
++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_4 (1<<0) // 0x0001
++#define SD_CTRL_CARDCLOCKCONTROL_CLK_DIV_2 (0<<0) // 0x0000
++
++#define MEM_CARD_OPTION_REQUIRED 0x000e
++#define MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(x) (((x)&0x0f)<<4) /* Four bits */
++#define MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT (1<<14) // 0x4000
++#define MEM_CARD_OPTION_DATA_XFR_WIDTH_1 (1<<15) // 0x8000
++#define MEM_CARD_OPTION_DATA_XFR_WIDTH_4 (0<<15) //~0x8000
++
++#define SD_CTRL_COMMAND_INDEX(x) ((x)&0x3f) /* 0=CMD0, 1=CMD1, ..., 63=CMD63 */
++#define SD_CTRL_COMMAND_TYPE_CMD (0 << 6)
++#define SD_CTRL_COMMAND_TYPE_ACMD (1 << 6)
++#define SD_CTRL_COMMAND_TYPE_AUTHENTICATION (2 << 6)
++#define SD_CTRL_COMMAND_RESPONSE_TYPE_NORMAL (0 << 8)
++#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1 (4 << 8)
++#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1B (5 << 8)
++#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R2 (6 << 8)
++#define SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R3 (7 << 8)
++#define SD_CTRL_COMMAND_DATA_PRESENT (1 << 11)
++#define SD_CTRL_COMMAND_TRANSFER_READ (1 << 12)
++#define SD_CTRL_COMMAND_TRANSFER_WRITE (0 << 12)
++#define SD_CTRL_COMMAND_MULTI_BLOCK (1 << 13)
++#define SD_CTRL_COMMAND_SECURITY_CMD (1 << 14)
++
++#define SD_CTRL_STOP_INTERNAL_ISSSUE_CMD12 (1 << 0)
++#define SD_CTRL_STOP_INTERNAL_AUTO_ISSUE_CMD12 (1 << 8)
++
++#define SD_CTRL_CARDSTATUS_RESPONSE_END (1 << 0)
++#define SD_CTRL_CARDSTATUS_RW_END (1 << 2)
++#define SD_CTRL_CARDSTATUS_CARD_REMOVED_0 (1 << 3)
++#define SD_CTRL_CARDSTATUS_CARD_INSERTED_0 (1 << 4)
++#define SD_CTRL_CARDSTATUS_SIGNAL_STATE_PRESENT_0 (1 << 5)
++#define SD_CTRL_CARDSTATUS_WRITE_PROTECT (1 << 7)
++#define SD_CTRL_CARDSTATUS_CARD_REMOVED_3 (1 << 8)
++#define SD_CTRL_CARDSTATUS_CARD_INSERTED_3 (1 << 9)
++#define SD_CTRL_CARDSTATUS_SIGNAL_STATE_PRESENT_3 (1 << 10)
++
++#define SD_CTRL_BUFFERSTATUS_CMD_INDEX_ERROR (1 << 0) // 0x0001
++#define SD_CTRL_BUFFERSTATUS_CRC_ERROR (1 << 1) // 0x0002
++#define SD_CTRL_BUFFERSTATUS_STOP_BIT_END_ERROR (1 << 2) // 0x0004
++#define SD_CTRL_BUFFERSTATUS_DATA_TIMEOUT (1 << 3) // 0x0008
++#define SD_CTRL_BUFFERSTATUS_BUFFER_OVERFLOW (1 << 4) // 0x0010
++#define SD_CTRL_BUFFERSTATUS_BUFFER_UNDERFLOW (1 << 5) // 0x0020
++#define SD_CTRL_BUFFERSTATUS_CMD_TIMEOUT (1 << 6) // 0x0040
++#define SD_CTRL_BUFFERSTATUS_UNK7 (1 << 7) // 0x0080
++#define SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE (1 << 8) // 0x0100
++#define SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE (1 << 9) // 0x0200
++#define SD_CTRL_BUFFERSTATUS_ILLEGAL_FUNCTION (1 << 13)// 0x2000
++#define SD_CTRL_BUFFERSTATUS_CMD_BUSY (1 << 14)// 0x4000
++#define SD_CTRL_BUFFERSTATUS_ILLEGAL_ACCESS (1 << 15)// 0x8000
++
++#define SD_CTRL_INTMASKCARD_RESPONSE_END (1 << 0) // 0x0001
++#define SD_CTRL_INTMASKCARD_RW_END (1 << 2) // 0x0004
++#define SD_CTRL_INTMASKCARD_CARD_REMOVED_0 (1 << 3) // 0x0008
++#define SD_CTRL_INTMASKCARD_CARD_INSERTED_0 (1 << 4) // 0x0010
++#define SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_0 (1 << 5) // 0x0020
++#define SD_CTRL_INTMASKCARD_UNK6 (1 << 6) // 0x0040
++#define SD_CTRL_INTMASKCARD_WRITE_PROTECT (1 << 7) // 0x0080
++#define SD_CTRL_INTMASKCARD_CARD_REMOVED_3 (1 << 8) // 0x0100
++#define SD_CTRL_INTMASKCARD_CARD_INSERTED_3 (1 << 9) // 0x0200
++#define SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_3 (1 << 10)// 0x0400
++
++#define SD_CTRL_INTMASKBUFFER_CMD_INDEX_ERROR (1 << 0) // 0x0001
++#define SD_CTRL_INTMASKBUFFER_CRC_ERROR (1 << 1) // 0x0002
++#define SD_CTRL_INTMASKBUFFER_STOP_BIT_END_ERROR (1 << 2) // 0x0004
++#define SD_CTRL_INTMASKBUFFER_DATA_TIMEOUT (1 << 3) // 0x0008
++#define SD_CTRL_INTMASKBUFFER_BUFFER_OVERFLOW (1 << 4) // 0x0010
++#define SD_CTRL_INTMASKBUFFER_BUFFER_UNDERFLOW (1 << 5) // 0x0020
++#define SD_CTRL_INTMASKBUFFER_CMD_TIMEOUT (1 << 6) // 0x0040
++#define SD_CTRL_INTMASKBUFFER_UNK7 (1 << 7) // 0x0080
++#define SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE (1 << 8) // 0x0100
++#define SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE (1 << 9) // 0x0200
++#define SD_CTRL_INTMASKBUFFER_ILLEGAL_FUNCTION (1 << 13)// 0x2000
++#define SD_CTRL_INTMASKBUFFER_CMD_BUSY (1 << 14)// 0x4000
++#define SD_CTRL_INTMASKBUFFER_ILLEGAL_ACCESS (1 << 15)// 0x8000
++
++#define SD_CTRL_DETAIL0_RESPONSE_CMD_ERROR (1 << 0) // 0x0001
++#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_RESPONSE_NON_CMD12 (1 << 2) // 0x0004
++#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_RESPONSE_CMD12 (1 << 3) // 0x0008
++#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_READ_DATA (1 << 4) // 0x0010
++#define SD_CTRL_DETAIL0_END_BIT_ERROR_FOR_WRITE_CRC_STATUS (1 << 5) // 0x0020
++#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_RESPONSE_NON_CMD12 (1 << 8) // 0x0100
++#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_RESPONSE_CMD12 (1 << 9) // 0x0200
++#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_READ_DATA (1 << 10)// 0x0400
++#define SD_CTRL_DETAIL0_CRC_ERROR_FOR_WRITE_CMD (1 << 11)// 0x0800
++
++#define SD_CTRL_DETAIL1_NO_CMD_RESPONSE (1 << 0) // 0x0001
++#define SD_CTRL_DETAIL1_TIMEOUT_READ_DATA (1 << 4) // 0x0010
++#define SD_CTRL_DETAIL1_TIMEOUT_CRS_STATUS (1 << 5) // 0x0020
++#define SD_CTRL_DETAIL1_TIMEOUT_CRC_BUSY (1 << 6) // 0x0040
++
++#define _IPAQ_ASIC3_SDIO_CTRL_Base 0x1200
++
++#define IPAQ_ASIC3_SDIO(_b, s,x) \
++ (*((volatile s *) ((_b) + _IPAQ_ASIC3_SDIO_CTRL_Base + (_IPAQ_ASIC3_SDIO_CTRL_ ## x))))
++
++#define _IPAQ_ASIC3_SDIO_CTRL_Cmd 0x00
++#define _IPAQ_ASIC3_SDIO_CTRL_CardPortSel 0x04
++#define _IPAQ_ASIC3_SDIO_CTRL_Arg0 0x08
++#define _IPAQ_ASIC3_SDIO_CTRL_Arg1 0x0C
++#define _IPAQ_ASIC3_SDIO_CTRL_TransferBlockCount 0x14
++#define _IPAQ_ASIC3_SDIO_CTRL_Response0 0x18
++#define _IPAQ_ASIC3_SDIO_CTRL_Response1 0x1C
++#define _IPAQ_ASIC3_SDIO_CTRL_Response2 0x20
++#define _IPAQ_ASIC3_SDIO_CTRL_Response3 0x24
++#define _IPAQ_ASIC3_SDIO_CTRL_Response4 0x28
++#define _IPAQ_ASIC3_SDIO_CTRL_Response5 0x2C
++#define _IPAQ_ASIC3_SDIO_CTRL_Response6 0x30
++#define _IPAQ_ASIC3_SDIO_CTRL_Response7 0x34
++#define _IPAQ_ASIC3_SDIO_CTRL_CardStatus 0x38
++#define _IPAQ_ASIC3_SDIO_CTRL_BufferCtrl 0x3C
++#define _IPAQ_ASIC3_SDIO_CTRL_IntMaskCard 0x40
++#define _IPAQ_ASIC3_SDIO_CTRL_IntMaskBuffer 0x44
++#define _IPAQ_ASIC3_SDIO_CTRL_CardXferDataLen 0x4C
++#define _IPAQ_ASIC3_SDIO_CTRL_CardOptionSetup 0x50
++#define _IPAQ_ASIC3_SDIO_CTRL_ErrorStatus0 0x54
++#define _IPAQ_ASIC3_SDIO_CTRL_ErrorStatus1 0x58
++#define _IPAQ_ASIC3_SDIO_CTRL_DataPort 0x60
++#define _IPAQ_ASIC3_SDIO_CTRL_TransactionCtrl 0x68
++#define _IPAQ_ASIC3_SDIO_CTRL_CardIntCtrl 0x6C
++#define _IPAQ_ASIC3_SDIO_CTRL_ClocknWaitCtrl 0x70
++#define _IPAQ_ASIC3_SDIO_CTRL_HostInformation 0x74
++#define _IPAQ_ASIC3_SDIO_CTRL_ErrorCtrl 0x78
++#define _IPAQ_ASIC3_SDIO_CTRL_LEDCtrl 0x7C
++#define _IPAQ_ASIC3_SDIO_CTRL_SoftwareReset 0x1C0
++
++#define IPAQ_ASIC3_SDIO_CTRL_Cmd(_b) IPAQ_ASIC3_SDIO( _b, u16, Cmd ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_CardPortSel(_b) IPAQ_ASIC3_SDIO( _b, u16, CardPortSel ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_Arg0(_b) IPAQ_ASIC3_SDIO( _b, u16, Arg0 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_Arg1(_b) IPAQ_ASIC3_SDIO( _b, u16, Arg1 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_TransferBlockCount(_b) IPAQ_ASIC3_SDIO( _b, u16, TransferBlockCount ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_Response0(_b) IPAQ_ASIC3_SDIO( _b, u16, Response0 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_Response1(_b) IPAQ_ASIC3_SDIO( _b, u16, Response1 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_Response2(_b) IPAQ_ASIC3_SDIO( _b, u16, Response2 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_Response3(_b) IPAQ_ASIC3_SDIO( _b, u16, Response3 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_Response4(_b) IPAQ_ASIC3_SDIO( _b, u16, Response4 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_Response5(_b) IPAQ_ASIC3_SDIO( _b, u16, Response5 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_Response6(_b) IPAQ_ASIC3_SDIO( _b, u16, Response6 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_Response7(_b) IPAQ_ASIC3_SDIO( _b, u16, Response7 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_CardStatus(_b) IPAQ_ASIC3_SDIO( _b, u16, CardStatus ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_BufferCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, BufferCtrl ) /* and error status*/
++#define IPAQ_ASIC3_SDIO_CTRL_IntMaskCard(_b) IPAQ_ASIC3_SDIO( _b, u16, IntMaskCard ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_IntMaskBuffer(_b) IPAQ_ASIC3_SDIO( _b, u16, IntMaskBuffer ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_CardXferDataLen(_b) IPAQ_ASIC3_SDIO( _b, u16, CardXferDataLen ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_CardOptionSetup(_b) IPAQ_ASIC3_SDIO( _b, u16, CardOptionSetup ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_ErrorStatus0(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorStatus0 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_ErrorStatus1(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorStatus1 ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_DataPort(_b) IPAQ_ASIC3_SDIO( _b, u16, DataPort ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_TransactionCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, TransactionCtrl ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_CardIntCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, CardIntCtrl ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_ClocknWaitCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, ClocknWaitCtrl ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_HostInformation(_b) IPAQ_ASIC3_SDIO( _b, u16, HostInformation ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_ErrorCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, ErrorCtrl ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_LEDCtrl(_b) IPAQ_ASIC3_SDIO( _b, u16, LEDCtrl ) /* */
++#define IPAQ_ASIC3_SDIO_CTRL_SoftwareReset(_b) IPAQ_ASIC3_SDIO( _b, u16, SoftwareReset ) /* */
++
++#define IPAQ_ASIC3_MAP_SIZE 0x2000
++
++#endif
+Index: linux-2.6.23/include/linux/gpiodev.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/linux/gpiodev.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,44 @@
++#ifndef __GPIODEV_H
++#define __GPIODEV_H
++
++#include <linux/device.h>
++#include <linux/platform_device.h>
++#include <asm/gpio.h>
++
++/* Interface */
++
++/* This structure must be first member of device platform_data structure
++ of a device which provides gpiodev interface. All method pointers
++ must be non-NULL, so stubs must be used for non-implemented ones. */
++struct gpiodev_ops {
++ int (*get)(struct device *this, unsigned gpio_no);
++ void (*set)(struct device *this, unsigned gpio_no, int val);
++ int (*to_irq)(struct device *this, unsigned gpio_no);
++};
++
++/* Generalized GPIO structure */
++
++struct gpio {
++ struct device *gpio_dev;
++ unsigned gpio_no;
++};
++
++/* API functions */
++
++static inline int gpiodev_get_value(struct gpio *gpio)
++{
++ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data;
++ return ops->get(gpio->gpio_dev, gpio->gpio_no);
++}
++static inline void gpiodev_set_value(struct gpio *gpio, int val)
++{
++ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data;
++ ops->set(gpio->gpio_dev, gpio->gpio_no, val);
++}
++static inline int gpiodev_to_irq(struct gpio *gpio)
++{
++ struct gpiodev_ops *ops = gpio->gpio_dev->platform_data;
++ return ops->to_irq(gpio->gpio_dev, gpio->gpio_no);
++}
++
++#endif /* __GPIODEV_H */
+Index: linux-2.6.23/include/linux/input_pda.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/linux/input_pda.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,47 @@
++#ifndef _INPUT_PDA_H
++#define _INPUT_PDA_H
++
++/*
++ * This is temporary virtual button key codes map
++ * for keyboardless handheld computers.
++ * Its purpose is to provide map common to all devices
++ * and known to work with current software and its bugs
++ * and misfeatures. Once issues with the software are
++ * solved, codes from input.h will be used directly
++ * (missing key definitions will be added).
++ */
++
++/* Some directly usable keycodes:
++KEY_POWER - Power/suspend button
++KEY_ENTER - Enter/Action/Central button on joypad
++KEY_UP
++KEY_DOWN
++KEY_LEFT
++KEY_RIGHT
++*/
++
++/* XXX Instead of using any values in include/linux/input.h, we have to use
++ use values < 128 due to some munging that kdrive does to get keystrokes.
++ When kdrive gets its key events from evdev instead of the console,
++ we should be able to switch to using input.h values and get rid of
++ xmodmap. */
++
++#define _KEY_APP1 KEY_F9 // xmodmap sees 67 + 8 = 75
++#define _KEY_APP2 KEY_F10 // xmodmap 76
++#define _KEY_APP3 KEY_F11 // xmodmap 95
++#define _KEY_APP4 KEY_F12 // xmodmap 96
++
++#define _KEY_RECORD KEY_RO
++
++/* It is highly recommended to use exactly 4 codes above for
++ 4 buttons the device has. This will ensure that console and
++ framebuffer applications (e.g. games) will work ok on all
++ devices. If you'd like more distinguishable names, following
++ convenience defines are provided, suiting many devices. */
++
++#define _KEY_CALENDAR _KEY_APP1
++#define _KEY_CONTACTS _KEY_APP2
++#define _KEY_MAIL _KEY_APP3
++#define _KEY_HOMEPAGE _KEY_APP4
++
++#endif
+Index: linux-2.6.23/include/linux/soc/asic3_base.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/linux/soc/asic3_base.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,104 @@
++#include <asm/types.h>
++#include <linux/gpiodev.h>
++
++/* Private API - for ASIC3 devices internal use only */
++#define HDR_IPAQ_ASIC3_ACTION(ACTION,action,fn,FN) \
++u32 asic3_get_gpio_ ## action ## _ ## fn (struct device *dev); \
++void asic3_set_gpio_ ## action ## _ ## fn (struct device *dev, u32 bits, u32 val);
++
++#define HDR_IPAQ_ASIC3_FN(fn,FN) \
++ HDR_IPAQ_ASIC3_ACTION ( MASK,mask,fn,FN) \
++ HDR_IPAQ_ASIC3_ACTION ( DIR, dir, fn, FN) \
++ HDR_IPAQ_ASIC3_ACTION ( OUT, out, fn, FN) \
++ HDR_IPAQ_ASIC3_ACTION ( LEVELTRI, trigtype, fn, FN) \
++ HDR_IPAQ_ASIC3_ACTION ( RISING, rising, fn, FN) \
++ HDR_IPAQ_ASIC3_ACTION ( LEVEL, triglevel, fn, FN) \
++ HDR_IPAQ_ASIC3_ACTION ( SLEEP_MASK, sleepmask, fn, FN) \
++ HDR_IPAQ_ASIC3_ACTION ( SLEEP_OUT, sleepout, fn, FN) \
++ HDR_IPAQ_ASIC3_ACTION ( BATT_FAULT_OUT, battfaultout, fn, FN) \
++ HDR_IPAQ_ASIC3_ACTION ( INT_STATUS, intstatus, fn, FN) \
++ HDR_IPAQ_ASIC3_ACTION ( ALT_FUNCTION, alt_fn, fn, FN) \
++ HDR_IPAQ_ASIC3_ACTION ( SLEEP_CONF, sleepconf, fn, FN) \
++ HDR_IPAQ_ASIC3_ACTION ( STATUS, status, fn, FN)
++
++/* Public API */
++
++#define ASIC3_GPIOA_IRQ_BASE 0
++#define ASIC3_GPIOB_IRQ_BASE 16
++#define ASIC3_GPIOC_IRQ_BASE 32
++#define ASIC3_GPIOD_IRQ_BASE 48
++#define ASIC3_LED0_IRQ 64
++#define ASIC3_LED1_IRQ 65
++#define ASIC3_LED2_IRQ 66
++#define ASIC3_SPI_IRQ 67
++#define ASIC3_SMBUS_IRQ 68
++#define ASIC3_OWM_IRQ 69
++
++#define ASIC3_NR_GPIO_IRQS 64 /* 16 bits each GPIO A...D banks */
++#define ASIC3_NR_IRQS (ASIC3_OWM_IRQ + 1)
++
++extern int asic3_irq_base(struct device *dev);
++
++extern void asic3_write_register(struct device *dev, unsigned int reg,
++ u32 value);
++extern u32 asic3_read_register(struct device *dev, unsigned int reg);
++
++/* old clock api */
++extern void asic3_set_clock_sel(struct device *dev, u32 bits, u32 val);
++extern u32 asic3_get_clock_cdex(struct device *dev);
++extern void asic3_set_clock_cdex(struct device *dev, u32 bits, u32 val);
++
++extern void asic3_set_extcf_select(struct device *dev, u32 bits, u32 val);
++extern void asic3_set_extcf_reset(struct device *dev, u32 bits, u32 val);
++extern void asic3_set_sdhwctrl(struct device *dev, u32 bits, u32 val);
++
++extern void asic3_set_led(struct device *dev, int led_num, int duty_time,
++ int cycle_time, int timebase);
++
++extern int asic3_register_mmc(struct device *dev);
++extern int asic3_unregister_mmc(struct device *dev);
++
++/* Accessors for GPIO banks */
++HDR_IPAQ_ASIC3_FN(a, A)
++HDR_IPAQ_ASIC3_FN(b, B)
++HDR_IPAQ_ASIC3_FN(c, C)
++HDR_IPAQ_ASIC3_FN(d, D)
++
++#define _IPAQ_ASIC3_GPIO_BANK_A 0
++#define _IPAQ_ASIC3_GPIO_BANK_B 1
++#define _IPAQ_ASIC3_GPIO_BANK_C 2
++#define _IPAQ_ASIC3_GPIO_BANK_D 3
++
++#define ASIC3_GPIO_bit(gpio) (1 << (gpio & 0xf))
++
++extern int asic3_get_gpio_bit(struct device *dev, int gpio);
++extern void asic3_set_gpio_bit(struct device *dev, int gpio, int val);
++extern int asic3_gpio_get_value(struct device *dev, unsigned gpio);
++extern void asic3_gpio_set_value(struct device *dev, unsigned gpio, int val);
++
++
++struct tmio_mmc_hwconfig;
++
++struct asic3_platform_data
++{
++ // Must be first member
++ struct gpiodev_ops gpiodev_ops;
++
++ struct {
++ u32 dir;
++ u32 init;
++ u32 sleep_mask;
++ u32 sleep_out;
++ u32 batt_fault_out;
++ u32 sleep_conf;
++ u32 alt_function;
++ } gpio_a, gpio_b, gpio_c, gpio_d;
++
++ int irq_base;
++ unsigned int bus_shift;
++
++ struct platform_device **child_platform_devs;
++ int num_child_platform_devs;
++
++ struct tmio_mmc_hwconfig *tmio_mmc_hwconfig;
++};
+Index: linux-2.6.23/include/linux/soc/tmio_mmc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/linux/soc/tmio_mmc.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,17 @@
++#include <linux/platform_device.h>
++
++#define MMC_CLOCK_DISABLED 0
++#define MMC_CLOCK_ENABLED 1
++
++#define TMIO_WP_ALWAYS_RW ((void*)-1)
++
++struct tmio_mmc_hwconfig {
++ void (*hwinit)(struct platform_device *sdev);
++ void (*set_mmc_clock)(struct platform_device *sdev, int state);
++
++ /* NULL - use ASIC3 signal,
++ TMIO_WP_ALWAYS_RW - assume always R/W (e.g. miniSD)
++ otherwise - machine-specific handler */
++ int (*mmc_get_ro)(struct platform_device *pdev);
++ short address_shift;
++};
+Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h
+===================================================================
+--- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h 2008-01-20 18:59:40.000000000 +0000
++++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h 2008-01-20 18:59:46.000000000 +0000
+@@ -2058,6 +2058,8 @@
+ #define LDCMD_SOFINT (1 << 22)
+ #define LDCMD_EOFINT (1 << 21)
+
++#define LCCR4_13M_PCD_EN (1<<25) /* 13M PCD enable */
++#define LCCR4_PCDDIV (1<<31) /* PCD selection */
+
+ #define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */
+ #define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */
+Index: linux-2.6.23/drivers/mmc/host/Kconfig
+===================================================================
+--- linux-2.6.23.orig/drivers/mmc/host/Kconfig 2008-01-20 18:59:18.000000000 +0000
++++ linux-2.6.23/drivers/mmc/host/Kconfig 2008-01-20 18:59:46.000000000 +0000
+@@ -130,3 +130,9 @@ config MMC_SPI
+
+ If unsure, or if your system has no SPI master driver, say N.
+
++config MMC_ASIC3
++ tristate "HTC ASIC3 SD/MMC support"
++ depends on MMC && HTC_ASIC3
++ help
++ This provides support for the ASIC3 SD/MMC controller, used
++ in the iPAQ hx4700 and others.
+Index: linux-2.6.23/drivers/mmc/host/Makefile
+===================================================================
+--- linux-2.6.23.orig/drivers/mmc/host/Makefile 2008-01-20 18:59:18.000000000 +0000
++++ linux-2.6.23/drivers/mmc/host/Makefile 2008-01-20 21:12:10.000000000 +0000
+@@ -13,6 +13,7 @@ obj-$(CONFIG_MMC_SDHCI) += sdhci.o
+ obj-$(CONFIG_MMC_RICOH_MMC) += ricoh_mmc.o
+ obj-$(CONFIG_MMC_WBSD) += wbsd.o
+ obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
++obj-$(CONFIG_MMC_ASIC3) += asic3_mmc.o
+ obj-$(CONFIG_MMC_OMAP) += omap.o
+ obj-$(CONFIG_MMC_AT91) += at91_mci.o
+ obj-$(CONFIG_MMC_TIFM_SD) += tifm_sd.o
+Index: linux-2.6.23/drivers/mmc/host/asic3_mmc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/mmc/host/asic3_mmc.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,900 @@
++/* Note that this driver can likely be merged into the tmio driver, so
++ * consider this code temporary. It works, though.
++ */
++/*
++ * linux/drivers/mmc/asic3_mmc.c
++ *
++ * Copyright (c) 2005 SDG Systems, LLC
++ *
++ * based on tmio_mmc.c
++ * Copyright (C) 2004 Ian Molton
++ *
++ * Refactored to support all ASIC3 devices, 2006 Paul Sokolovsky
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Driver for the SD / SDIO cell found in:
++ *
++ * TC6393XB
++ *
++ * This driver draws mainly on scattered spec sheets, Reverse engineering
++ * of the toshiba e800 SD driver and some parts of the 2.4 ASIC3 driver (4 bit
++ * support).
++ *
++ * Supports MMC 1 bit transfers and SD 1 and 4 bit modes.
++ *
++ * TODO:
++ * Eliminate FIXMEs
++ * SDIO support
++ * Power management
++ * Handle MMC errors (at all)
++ *
++ */
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/init.h>
++#include <linux/ioport.h>
++#include <linux/platform_device.h>
++#include <linux/interrupt.h>
++#include <linux/blkdev.h>
++#include <linux/delay.h>
++#include <linux/err.h>
++#include <linux/mmc/mmc.h>
++#include <linux/mmc/host.h>
++#include <linux/mmc/card.h>
++//#include <linux/mmc/protocol.h>
++#include <linux/mmc/sd.h>
++#include <linux/scatterlist.h>
++//#include <linux/soc-old.h>
++#include <linux/soc/asic3_base.h>
++#include <linux/soc/tmio_mmc.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/mach/irq.h>
++#include <linux/clk.h>
++#include <asm/mach-types.h>
++
++#include <asm/hardware/ipaq-asic3.h>
++#include "asic3_mmc.h"
++
++struct asic3_mmc_host {
++ void *ctl_base;
++ struct device *asic3_dev; /* asic3 device */
++ struct tmio_mmc_hwconfig *hwconfig; /* HW config data/handlers, guaranteed != NULL */
++ unsigned long bus_shift;
++ struct mmc_command *cmd;
++ struct mmc_request *mrq;
++ struct mmc_data *data;
++ struct mmc_host *mmc;
++ int irq;
++ unsigned short clock_for_sd;
++
++ /* I/O related stuff */
++ struct scatterlist *sg_ptr;
++ unsigned int sg_len;
++ unsigned int sg_off;
++};
++
++static void
++mmc_finish_request(struct asic3_mmc_host *host)
++{
++ struct mmc_request *mrq = host->mrq;
++
++ /* Write something to end the command */
++ host->mrq = NULL;
++ host->cmd = NULL;
++ host->data = NULL;
++
++ mmc_request_done(host->mmc, mrq);
++}
++
++
++#define ASIC3_MMC_REG(host, block, reg) (*((volatile u16 *) ((host->ctl_base) + ((_IPAQ_ASIC3_## block ## _Base + _IPAQ_ASIC3_ ## block ## _ ## reg) >> (2 - host->bus_shift))) ))
++
++static void
++mmc_start_command(struct asic3_mmc_host *host, struct mmc_command *cmd)
++{
++ struct mmc_data *data = host->data;
++ int c = cmd->opcode;
++
++ DBG("Opcode: %d, base: %p\n", cmd->opcode, host->ctl_base);
++
++ if(cmd->opcode == MMC_STOP_TRANSMISSION) {
++ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = SD_CTRL_STOP_INTERNAL_ISSSUE_CMD12;
++ cmd->resp[0] = cmd->opcode;
++ cmd->resp[1] = 0;
++ cmd->resp[2] = 0;
++ cmd->resp[3] = 0;
++ cmd->resp[4] = 0;
++ return;
++ }
++
++ switch(cmd->flags & 0x1f) {
++ case MMC_RSP_NONE: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_NORMAL; break;
++ case MMC_RSP_R1: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1; break;
++ case MMC_RSP_R1B: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R1B; break;
++ case MMC_RSP_R2: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R2; break;
++ case MMC_RSP_R3: c |= SD_CTRL_COMMAND_RESPONSE_TYPE_EXT_R3; break;
++ default:
++ DBG("Unknown response type %d\n", cmd->flags & 0x1f);
++ break;
++ }
++
++ host->cmd = cmd;
++
++ if(cmd->opcode == MMC_APP_CMD) {
++ c |= APP_CMD;
++ }
++ if (cmd->opcode == MMC_GO_IDLE_STATE) {
++ c |= (3 << 8); /* This was removed from ipaq-asic3.h for some reason */
++ }
++ if(data) {
++ c |= SD_CTRL_COMMAND_DATA_PRESENT;
++ if(data->blocks > 1) {
++ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = SD_CTRL_STOP_INTERNAL_AUTO_ISSUE_CMD12;
++ c |= SD_CTRL_COMMAND_MULTI_BLOCK;
++ }
++ if(data->flags & MMC_DATA_READ) {
++ c |= SD_CTRL_COMMAND_TRANSFER_READ;
++ }
++ /* MMC_DATA_WRITE does not require a bit to be set */
++ }
++
++ /* Enable the command and data interrupts */
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
++ SD_CTRL_INTMASKCARD_RESPONSE_END
++ | SD_CTRL_INTMASKCARD_RW_END
++ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0
++ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0
++#if 0
++ | SD_CTRL_INTMASKCARD_CARD_REMOVED_3
++ | SD_CTRL_INTMASKCARD_CARD_INSERTED_3
++#endif
++ );
++
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) = ~(
++ SD_CTRL_INTMASKBUFFER_UNK7
++ | SD_CTRL_INTMASKBUFFER_CMD_BUSY
++#if 0
++ | SD_CTRL_INTMASKBUFFER_CMD_INDEX_ERROR
++ | SD_CTRL_INTMASKBUFFER_CRC_ERROR
++ | SD_CTRL_INTMASKBUFFER_STOP_BIT_END_ERROR
++ | SD_CTRL_INTMASKBUFFER_DATA_TIMEOUT
++ | SD_CTRL_INTMASKBUFFER_BUFFER_OVERFLOW
++ | SD_CTRL_INTMASKBUFFER_BUFFER_UNDERFLOW
++ | SD_CTRL_INTMASKBUFFER_CMD_TIMEOUT
++ | SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE
++ | SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE
++ | SD_CTRL_INTMASKBUFFER_ILLEGAL_ACCESS
++#endif
++ );
++
++ /* Send the command */
++ ASIC3_MMC_REG(host, SD_CTRL, Arg1) = cmd->arg >> 16;
++ ASIC3_MMC_REG(host, SD_CTRL, Arg0) = cmd->arg & 0xffff;
++ ASIC3_MMC_REG(host, SD_CTRL, Cmd) = c;
++}
++
++/* This chip always returns (at least?) as much data as you ask for. I'm
++ * unsure what happens if you ask for less than a block. This should be looked
++ * into to ensure that a funny length read doesnt mess up the controller data
++ * state machine.
++ *
++ * Aric: Statement above may not apply to ASIC3.
++ *
++ * FIXME - this chip cannot do 1 and 2 byte data requests in 4 bit mode
++ *
++ * Aric: Statement above may not apply to ASIC3.
++ */
++
++static struct tasklet_struct mmc_data_read_tasklet;
++
++static void
++mmc_data_transfer(unsigned long h)
++{
++ struct asic3_mmc_host *host = (struct asic3_mmc_host *)h;
++ struct mmc_data *data = host->data;
++ unsigned short *buf;
++ int count;
++ /* unsigned long flags; */
++
++ if(!data){
++ printk(KERN_WARNING DRIVER_NAME ": Spurious Data IRQ\n");
++ return;
++ }
++
++ /* local_irq_save(flags); */
++ /* buf = kmap_atomic(host->sg_ptr->page, KM_BIO_SRC_IRQ); */
++ buf = kmap(host->sg_ptr->page);
++ buf += host->sg_ptr->offset/2 + host->sg_off/2;
++
++ /*
++ * Ensure we dont read more than one block. The chip will interrupt us
++ * When the next block is available.
++ */
++ count = host->sg_ptr->length - host->sg_off;
++ if(count > data->blksz) {
++ count = data->blksz;
++ }
++
++ DBG("count: %08x, page: %p, offset: %08x flags %08x\n",
++ count, host->sg_ptr->page, host->sg_off, data->flags);
++
++ host->sg_off += count;
++
++ /* Transfer the data */
++ if(data->flags & MMC_DATA_READ) {
++ while(count > 0) {
++ /* Read two bytes from SD/MMC controller. */
++ *buf = ASIC3_MMC_REG(host, SD_CTRL, DataPort);
++ buf++;
++ count -= 2;
++ }
++ //flush_dcache_page(host->sg_ptr->page);
++ } else {
++ while(count > 0) {
++ /* Write two bytes to SD/MMC controller. */
++ ASIC3_MMC_REG(host, SD_CTRL, DataPort) = *buf;
++ buf++;
++ count -= 2;
++ }
++ }
++
++ /* kunmap_atomic(host->sg_ptr->page, KM_BIO_SRC_IRQ); */
++ kunmap(host->sg_ptr->page);
++ /* local_irq_restore(flags); */
++ if(host->sg_off == host->sg_ptr->length) {
++ host->sg_ptr++;
++ host->sg_off = 0;
++ --host->sg_len;
++ }
++
++ return;
++}
++
++static void
++mmc_data_end_irq(struct asic3_mmc_host *host)
++{
++ struct mmc_data *data = host->data;
++
++ host->data = NULL;
++
++ if(!data){
++ printk(KERN_WARNING DRIVER_NAME ": Spurious data end IRQ\n");
++ return;
++ }
++
++ if (data->error == MMC_ERR_NONE) {
++ data->bytes_xfered = data->blocks * data->blksz;
++ } else {
++ data->bytes_xfered = 0;
++ }
++
++ DBG("Completed data request\n");
++
++ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = 0;
++
++ /* Make sure read enable interrupt and write enable interrupt are disabled */
++ if(data->flags & MMC_DATA_READ) {
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) |= SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE;
++ } else {
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) |= SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE;
++ }
++
++ mmc_finish_request(host);
++}
++
++static void
++mmc_cmd_irq(struct asic3_mmc_host *host, unsigned int buffer_stat)
++{
++ struct mmc_command *cmd = host->cmd;
++ u8 *buf = (u8 *)cmd->resp;
++ u16 data;
++
++ if(!host->cmd) {
++ printk(KERN_WARNING DRIVER_NAME ": Spurious CMD irq\n");
++ return;
++ }
++
++ host->cmd = NULL;
++ if(cmd->flags & MMC_RSP_PRESENT && cmd->flags & MMC_RSP_136) {
++ /* R2 */
++ buf[12] = 0xff;
++ data = ASIC3_MMC_REG(host, SD_CTRL, Response0);
++ buf[13] = data & 0xff;
++ buf[14] = data >> 8;
++ data = ASIC3_MMC_REG(host, SD_CTRL, Response1);
++ buf[15] = data & 0xff;
++ buf[8] = data >> 8;
++ data = ASIC3_MMC_REG(host, SD_CTRL, Response2);
++ buf[9] = data & 0xff;
++ buf[10] = data >> 8;
++ data = ASIC3_MMC_REG(host, SD_CTRL, Response3);
++ buf[11] = data & 0xff;
++ buf[4] = data >> 8;
++ data = ASIC3_MMC_REG(host, SD_CTRL, Response4);
++ buf[5] = data & 0xff;
++ buf[6] = data >> 8;
++ data = ASIC3_MMC_REG(host, SD_CTRL, Response5);
++ buf[7] = data & 0xff;
++ buf[0] = data >> 8;
++ data = ASIC3_MMC_REG(host, SD_CTRL, Response6);
++ buf[1] = data & 0xff;
++ buf[2] = data >> 8;
++ data = ASIC3_MMC_REG(host, SD_CTRL, Response7);
++ buf[3] = data & 0xff;
++ } else if(cmd->flags & MMC_RSP_PRESENT) {
++ /* R1, R1B, R3 */
++ data = ASIC3_MMC_REG(host, SD_CTRL, Response0);
++ buf[0] = data & 0xff;
++ buf[1] = data >> 8;
++ data = ASIC3_MMC_REG(host, SD_CTRL, Response1);
++ buf[2] = data & 0xff;
++ buf[3] = data >> 8;
++ }
++ DBG("Response: %08x %08x %08x %08x\n", cmd->resp[0], cmd->resp[1], cmd->resp[2], cmd->resp[3]);
++
++ if(buffer_stat & SD_CTRL_BUFFERSTATUS_CMD_TIMEOUT) {
++ cmd->error = MMC_ERR_TIMEOUT;
++ } else if((buffer_stat & SD_CTRL_BUFFERSTATUS_CRC_ERROR) && (cmd->flags & MMC_RSP_CRC)) {
++ cmd->error = MMC_ERR_BADCRC;
++ } else if(buffer_stat &
++ (
++ SD_CTRL_BUFFERSTATUS_ILLEGAL_ACCESS
++ | SD_CTRL_BUFFERSTATUS_CMD_INDEX_ERROR
++ | SD_CTRL_BUFFERSTATUS_STOP_BIT_END_ERROR
++ | SD_CTRL_BUFFERSTATUS_BUFFER_OVERFLOW
++ | SD_CTRL_BUFFERSTATUS_BUFFER_UNDERFLOW
++ | SD_CTRL_BUFFERSTATUS_DATA_TIMEOUT
++ )
++ ) {
++ DBG("Buffer status ERROR 0x%04x - inside check buffer\n", buffer_stat);
++ DBG("detail0 error status 0x%04x\n", ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus0));
++ DBG("detail1 error status 0x%04x\n", ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus1));
++ cmd->error = MMC_ERR_FAILED;
++ }
++
++ if(cmd->error == MMC_ERR_NONE) {
++ switch (cmd->opcode) {
++ case SD_APP_SET_BUS_WIDTH:
++ if(cmd->arg == SD_BUS_WIDTH_4) {
++ host->clock_for_sd = SD_CTRL_CARDCLOCKCONTROL_FOR_SD_CARD;
++ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
++ MEM_CARD_OPTION_REQUIRED
++ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
++ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
++ | MEM_CARD_OPTION_DATA_XFR_WIDTH_4;
++ } else {
++ host->clock_for_sd = 0;
++ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
++ MEM_CARD_OPTION_REQUIRED
++ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
++ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
++ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1;
++ }
++ break;
++ case MMC_SELECT_CARD:
++ if((cmd->arg >> 16) == 0) {
++ /* We have been deselected. */
++ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
++ MEM_CARD_OPTION_REQUIRED
++ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
++ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
++ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1;
++ }
++ }
++ }
++
++ /*
++ * If there is data to handle we enable data IRQs here, and we will
++ * ultimatley finish the request in the mmc_data_end_irq handler.
++ */
++ if(host->data && (cmd->error == MMC_ERR_NONE)){
++ if(host->data->flags & MMC_DATA_READ) {
++ /* Enable the read enable interrupt */
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &=
++ ~SD_CTRL_INTMASKBUFFER_BUFFER_READ_ENABLE;
++ } else {
++ /* Enable the write enable interrupt */
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &=
++ ~SD_CTRL_INTMASKBUFFER_BUFFER_WRITE_ENABLE;
++ }
++ } else {
++ /* There's no data, or we encountered an error, so finish now. */
++ mmc_finish_request(host);
++ }
++
++ return;
++}
++
++static void hwinit2_irqsafe(struct asic3_mmc_host *host);
++
++static irqreturn_t
++mmc_irq(int irq, void *irq_desc)
++{
++ struct asic3_mmc_host *host;
++ unsigned int breg, bmask, bstatus, creg, cmask, cstatus;
++
++ host = irq_desc;
++
++ /* asic3 bstatus has errors */
++ bstatus = ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl);
++ bmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer);
++ cstatus = ASIC3_MMC_REG(host, SD_CTRL, CardStatus);
++ cmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard);
++ breg = bstatus & ~bmask & ~DONT_CARE_BUFFER_BITS;
++ creg = cstatus & ~cmask & ~DONT_CARE_CARD_BITS;
++
++ if (!breg && !creg) {
++ /* This occurs sometimes for no known reason. It doesn't hurt
++ * anything, so I don't print it. */
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) &= ~breg;
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) &= ~creg;
++ goto out;
++ }
++
++ while (breg || creg) {
++
++ /* XXX TODO: Need to handle errors in breg here. */
++
++ /*
++ * Card insert/remove. The mmc controlling code is stateless. That
++ * is, it doesn't care if it was an insert or a remove. It treats
++ * both the same.
++ */
++ /* XXX Asic3 has _3 versions of these status bits, too, for a second slot, perhaps? */
++ if (creg & (SD_CTRL_CARDSTATUS_CARD_INSERTED_0 | SD_CTRL_CARDSTATUS_CARD_REMOVED_0)) {
++ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &=
++ ~(SD_CTRL_CARDSTATUS_CARD_REMOVED_0 | SD_CTRL_CARDSTATUS_CARD_INSERTED_0);
++ if(creg & SD_CTRL_CARDSTATUS_CARD_INSERTED_0) {
++ hwinit2_irqsafe(host);
++ }
++ mmc_detect_change(host->mmc,1);
++ }
++
++ /* Command completion */
++ if (creg & SD_CTRL_CARDSTATUS_RESPONSE_END) {
++ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &=
++ ~(SD_CTRL_CARDSTATUS_RESPONSE_END);
++ mmc_cmd_irq(host, bstatus);
++ }
++
++ /* Data transfer */
++ if (breg & (SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE | SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE)) {
++ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) &=
++ ~(SD_CTRL_BUFFERSTATUS_BUFFER_WRITE_ENABLE | SD_CTRL_BUFFERSTATUS_BUFFER_READ_ENABLE);
++ tasklet_schedule(&mmc_data_read_tasklet);
++ }
++
++ /* Data transfer completion */
++ if (creg & SD_CTRL_CARDSTATUS_RW_END) {
++ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) &= ~(SD_CTRL_CARDSTATUS_RW_END);
++ mmc_data_end_irq(host);
++ }
++
++ /* Check status - keep going until we've handled it all */
++ bstatus = ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl);
++ bmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer);
++ cstatus = ASIC3_MMC_REG(host, SD_CTRL, CardStatus);
++ cmask = ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard);
++ breg = bstatus & ~bmask & ~DONT_CARE_BUFFER_BITS;
++ creg = cstatus & ~cmask & ~DONT_CARE_CARD_BITS;
++ }
++
++out:
++ /* Ensure all interrupt sources are cleared */
++ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) = 0;
++ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) = 0;
++ return IRQ_HANDLED;
++}
++
++static void
++mmc_start_data(struct asic3_mmc_host *host, struct mmc_data *data)
++{
++ DBG("setup data transfer: blocksize %08x nr_blocks %d, page: %08x, offset: %08x\n", data->blksz,
++ data->blocks, (int)data->sg->page, data->sg->offset);
++
++ host->sg_len = data->sg_len;
++ host->sg_ptr = data->sg;
++ host->sg_off = 0;
++ host->data = data;
++
++ /* Set transfer length and blocksize */
++ ASIC3_MMC_REG(host, SD_CTRL, TransferSectorCount) = data->blocks;
++ ASIC3_MMC_REG(host, SD_CTRL, MemCardXferDataLen) = data->blksz;
++}
++
++/* Process requests from the MMC layer */
++static void
++mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
++{
++ struct asic3_mmc_host *host = mmc_priv(mmc);
++
++ WARN_ON(host->mrq != NULL);
++
++ host->mrq = mrq;
++
++ /* If we're performing a data request we need to setup some
++ extra information */
++ if(mrq->data) {
++ mmc_start_data(host, mrq->data);
++ }
++
++ mmc_start_command(host, mrq->cmd);
++}
++
++/* Set MMC clock / power.
++ * Note: This controller uses a simple divider scheme therefore it cannot run
++ * a MMC card at full speed (20MHz). The max clock is 24MHz on SD, but as MMC
++ * wont run that fast, it has to be clocked at 12MHz which is the next slowest
++ * setting. This is likely not an issue because we are doing single 16-bit
++ * writes for data I/O.
++ */
++static void
++mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
++{
++ struct asic3_mmc_host *host = mmc_priv(mmc);
++ u32 clk = 0;
++
++ DBG("clock %uHz busmode %u powermode %u Vdd %u\n",
++ ios->clock, ios->bus_mode, ios->power_mode, ios->vdd);
++
++ if (ios->clock) {
++ clk = 0x80; /* slowest by default */
++ if(ios->clock >= 24000000 / 256) clk >>= 1;
++ if(ios->clock >= 24000000 / 128) clk >>= 1;
++ if(ios->clock >= 24000000 / 64) clk >>= 1;
++ if(ios->clock >= 24000000 / 32) clk >>= 1;
++ if(ios->clock >= 24000000 / 16) clk >>= 1;
++ if(ios->clock >= 24000000 / 8) clk >>= 1;
++ if(ios->clock >= 24000000 / 4) clk >>= 1;
++ if(ios->clock >= 24000000 / 2) clk >>= 1;
++ if(ios->clock >= 24000000 / 1) clk >>= 1;
++ if(clk == 0) { /* For fastest speed we disable the divider. */
++ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 0;
++ } else {
++ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 1;
++ }
++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) =
++ host->clock_for_sd
++ | SD_CTRL_CARDCLOCKCONTROL_ENABLE_CLOCK
++ | clk;
++ msleep(10);
++ } else {
++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
++ }
++
++ switch (ios->power_mode) {
++ case MMC_POWER_OFF:
++ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = 0;
++ msleep(1);
++ break;
++ case MMC_POWER_UP:
++ break;
++ case MMC_POWER_ON:
++ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = SD_CONFIG_POWER1_PC_33V;
++ msleep(20);
++ break;
++ }
++}
++
++static int
++mmc_get_ro(struct mmc_host *mmc)
++{
++ struct asic3_mmc_host *host = mmc_priv(mmc);
++
++ /* Call custom handler for RO status */
++ if(host->hwconfig->mmc_get_ro) {
++ /* Special case for cards w/o WP lock (like miniSD) */
++ if (host->hwconfig->mmc_get_ro == (void*)-1) {
++ return 0;
++ } else {
++ struct platform_device *pdev = to_platform_device(mmc_dev(mmc));
++ return host->hwconfig->mmc_get_ro(pdev);
++ }
++ }
++
++ /* WRITE_PROTECT is active low */
++ return (ASIC3_MMC_REG(host, SD_CTRL, CardStatus) & SD_CTRL_CARDSTATUS_WRITE_PROTECT)?0:1;
++}
++
++static struct mmc_host_ops mmc_ops = {
++ .request = mmc_request,
++ .set_ios = mmc_set_ios,
++ .get_ro = mmc_get_ro,
++};
++
++static void
++hwinit2_irqsafe(struct asic3_mmc_host *host)
++{
++ ASIC3_MMC_REG(host, SD_CONFIG, Addr1) = 0x0000;
++ ASIC3_MMC_REG(host, SD_CONFIG, Addr0) = 0x0800;
++
++ ASIC3_MMC_REG(host, SD_CONFIG, ClkStop) = SD_CONFIG_CLKSTOP_ENABLE_ALL;
++ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_CardDetect) = 2;
++ ASIC3_MMC_REG(host, SD_CONFIG, Command) = SD_CONFIG_COMMAND_MAE;
++
++ ASIC3_MMC_REG(host, SD_CTRL, SoftwareReset) = 0; /* reset on */
++ mdelay(2);
++
++ ASIC3_MMC_REG(host, SD_CTRL, SoftwareReset) = 1; /* reset off */
++ mdelay(2);
++
++ ASIC3_MMC_REG(host, SD_CTRL, MemCardOptionSetup) =
++ MEM_CARD_OPTION_REQUIRED
++ | MEM_CARD_OPTION_DATA_RESPONSE_TIMEOUT(14)
++ | MEM_CARD_OPTION_C2_MODULE_NOT_PRESENT
++ | MEM_CARD_OPTION_DATA_XFR_WIDTH_1
++ ;
++ host->clock_for_sd = 0;
++
++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
++ ASIC3_MMC_REG(host, SD_CTRL, CardStatus) = 0;
++ ASIC3_MMC_REG(host, SD_CTRL, BufferCtrl) = 0;
++ ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus0) = 0;
++ ASIC3_MMC_REG(host, SD_CTRL, ErrorStatus1) = 0;
++ ASIC3_MMC_REG(host, SD_CTRL, StopInternal) = 0;
++
++ ASIC3_MMC_REG(host, SDIO_CTRL, ClocknWaitCtrl) = 0x100;
++ /* *((unsigned short *)(((char *)host->ctl_base) + 0x938)) = 0x100; */
++
++ ASIC3_MMC_REG(host, SD_CONFIG, ClockMode) = 0;
++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
++
++ mdelay(1);
++
++
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
++ SD_CTRL_INTMASKCARD_RESPONSE_END
++ | SD_CTRL_INTMASKCARD_RW_END
++ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0
++ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0
++#if 0
++ | SD_CTRL_INTMASKCARD_CARD_REMOVED_3
++ | SD_CTRL_INTMASKCARD_CARD_INSERTED_3
++#endif
++ )
++ ; /* check */
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskBuffer) = 0xffff; /* IRQs off */
++
++ /*
++ * ASIC3_MMC_REG(host, SD_CTRL, TransactionCtrl) = SD_CTRL_TRANSACTIONCONTROL_SET;
++ * Wince has 0x1000
++ */
++ /* ASIC3_MMC_REG(host, SD_CTRL, TransactionCtrl) = 0x1000; */
++
++
++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SDPWR, ASIC3_SDHWCTRL_SDPWR); /* turn on power at controller(?) */
++
++}
++
++static void
++hwinit(struct asic3_mmc_host *host, struct platform_device *pdev)
++{
++ /* Call custom handler for enabling clock (if needed) */
++ if(host->hwconfig->set_mmc_clock)
++ host->hwconfig->set_mmc_clock(pdev, MMC_CLOCK_ENABLED);
++
++ /* Not sure if it must be done bit by bit, but leaving as-is */
++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_LEVCD, ASIC3_SDHWCTRL_LEVCD);
++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_LEVWP, ASIC3_SDHWCTRL_LEVWP);
++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, 0);
++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_PCLR, 0);
++
++ asic3_set_clock_cdex (host->asic3_dev,
++ CLOCK_CDEX_EX1 | CLOCK_CDEX_EX0, CLOCK_CDEX_EX1 | CLOCK_CDEX_EX0);
++ msleep(1);
++
++ asic3_set_clock_sel (host->asic3_dev,
++ CLOCK_SEL_SD_HCLK_SEL | CLOCK_SEL_SD_BCLK_SEL,
++ CLOCK_SEL_SD_HCLK_SEL | 0); /* ? */
++
++ asic3_set_clock_cdex (host->asic3_dev,
++ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS,
++ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS);
++ msleep(1);
++
++ asic3_set_extcf_select(host->asic3_dev, ASIC3_EXTCF_SD_MEM_ENABLE, ASIC3_EXTCF_SD_MEM_ENABLE);
++
++ /* Long Delay */
++ if( !machine_is_h4700())
++ msleep(500);
++
++ hwinit2_irqsafe(host);
++}
++
++#ifdef CONFIG_PM
++static int
++mmc_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ struct mmc_host *mmc = platform_get_drvdata(pdev);
++ struct asic3_mmc_host *host = mmc_priv(mmc);
++ int ret;
++
++ ret = mmc_suspend_host(mmc, state);
++
++ if (ret) {
++ printk(KERN_ERR DRIVER_NAME ": Could not suspend MMC host, hardware not suspended");
++ return ret;
++ }
++
++ /* disable the card insert / remove interrupt while sleeping */
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
++ SD_CTRL_INTMASKCARD_RESPONSE_END
++ | SD_CTRL_INTMASKCARD_RW_END);
++
++ /* disable clock */
++ ASIC3_MMC_REG(host, SD_CTRL, CardClockCtrl) = 0;
++ ASIC3_MMC_REG(host, SD_CONFIG, ClkStop) = 0;
++
++ /* power down */
++ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = 0;
++
++ asic3_set_clock_cdex (host->asic3_dev,
++ CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS, 0);
++
++ /* disable core clock */
++ if(host->hwconfig->set_mmc_clock)
++ host->hwconfig->set_mmc_clock(pdev, MMC_CLOCK_DISABLED);
++
++ /* Put in suspend mode */
++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, ASIC3_SDHWCTRL_SUSPEND);
++ return 0;
++}
++
++static int
++mmc_resume(struct platform_device *pdev)
++{
++ struct mmc_host *mmc = platform_get_drvdata(pdev);
++ struct asic3_mmc_host *host = mmc_priv(mmc);
++
++ printk(KERN_INFO "%s: starting resume\n", DRIVER_NAME);
++
++ asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, 0);
++ hwinit(host, pdev);
++
++ /* re-enable card remove / insert interrupt */
++ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~(
++ SD_CTRL_INTMASKCARD_RESPONSE_END
++ | SD_CTRL_INTMASKCARD_RW_END
++ | SD_CTRL_INTMASKCARD_CARD_REMOVED_0
++ | SD_CTRL_INTMASKCARD_CARD_INSERTED_0 );
++
++ mmc_resume_host(mmc);
++
++ printk(KERN_INFO "%s: finished resume\n", DRIVER_NAME);
++ return 0;
++}
++#endif
++
++static int
++mmc_probe(struct platform_device *pdev)
++{
++ struct mmc_host *mmc;
++ struct asic3_mmc_host *host = NULL;
++ int retval = 0;
++ struct tmio_mmc_hwconfig *mmc_config = (struct tmio_mmc_hwconfig *)pdev->dev.platform_data;
++
++ /* bus_shift is mandatory */
++ if (!mmc_config) {
++ printk(KERN_ERR DRIVER_NAME ": Invalid configuration\n");
++ return -EINVAL;
++ }
++
++ mmc = mmc_alloc_host(sizeof(struct asic3_mmc_host) + 128, &pdev->dev);
++ if (!mmc) {
++ retval = -ENOMEM;
++ goto exceptional_return;
++ }
++
++ host = mmc_priv(mmc);
++ host->mmc = mmc;
++ platform_set_drvdata(pdev, mmc);
++
++ host->ctl_base = 0;
++ host->hwconfig = mmc_config;
++ host->bus_shift = mmc_config->address_shift;
++ host->asic3_dev = pdev->dev.parent;
++ host->clock_for_sd = 0;
++
++ tasklet_init(&mmc_data_read_tasklet, mmc_data_transfer, (unsigned long)host);
++
++ host->ctl_base = ioremap_nocache ((unsigned long)pdev->resource[0].start, pdev->resource[0].end - pdev->resource[0].start);
++ if(!host->ctl_base){
++ printk(KERN_ERR DRIVER_NAME ": Could not map ASIC3 SD controller\n");
++ retval = -ENODEV;
++ goto exceptional_return;
++ }
++
++ printk(DRIVER_NAME ": ASIC3 MMC/SD Driver, controller at 0x%lx\n", (unsigned long)pdev->resource[0].start);
++
++ mmc->ops = &mmc_ops;
++ mmc->caps = MMC_CAP_4_BIT_DATA;
++ mmc->f_min = 46875; /* ARIC: not sure what these should be */
++ mmc->f_max = 24000000; /* ARIC: not sure what these should be */
++ mmc->ocr_avail = MMC_VDD_32_33;
++
++ hwinit(host, pdev);
++
++
++ host->irq = pdev->resource[1].start;
++
++ retval = request_irq(host->irq, mmc_irq, 0, DRIVER_NAME, host);
++ if(retval) {
++ printk(KERN_ERR DRIVER_NAME ": Unable to get interrupt\n");
++ retval = -ENODEV;
++ goto exceptional_return;
++ }
++ set_irq_type(host->irq, IRQT_FALLING);
++
++ mmc_add_host(mmc);
++
++#ifdef CONFIG_PM
++ // resume_timer.function = resume_timer_callback;
++ // resume_timer.data = 0;
++ // init_timer(&resume_timer);
++#endif
++
++ return 0;
++
++exceptional_return:
++ if (mmc) {
++ mmc_free_host(mmc);
++ }
++ if(host && host->ctl_base) iounmap(host->ctl_base);
++ return retval;
++}
++
++static int
++mmc_remove(struct platform_device *pdev)
++{
++ struct mmc_host *mmc = platform_get_drvdata(pdev);
++
++ platform_set_drvdata(pdev, NULL);
++
++ if (mmc) {
++ struct asic3_mmc_host *host = mmc_priv(mmc);
++ mmc_remove_host(mmc);
++ free_irq(host->irq, host);
++ /* FIXME - we might want to consider stopping the chip here... */
++ iounmap(host->ctl_base);
++ mmc_free_host(mmc); /* FIXME - why does this call hang? */
++ }
++ return 0;
++}
++
++/* ------------------- device registration ----------------------- */
++
++static struct platform_driver mmc_asic3_driver = {
++ .driver = {
++ .name = DRIVER_NAME,
++ },
++ .probe = mmc_probe,
++ .remove = mmc_remove,
++#ifdef CONFIG_PM
++ .suspend = mmc_suspend,
++ .resume = mmc_resume,
++#endif
++};
++
++static int __init mmc_init(void)
++{
++ return platform_driver_register(&mmc_asic3_driver);
++}
++
++static void __exit mmc_exit(void)
++{
++ platform_driver_unregister(&mmc_asic3_driver);
++}
++
++late_initcall(mmc_init);
++module_exit(mmc_exit);
++
++MODULE_DESCRIPTION("HTC ASIC3 SD/MMC driver");
++MODULE_AUTHOR("Aric Blumer, SDG Systems, LLC");
++MODULE_LICENSE("GPL");
++
+Index: linux-2.6.23/drivers/mmc/host/asic3_mmc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/mmc/host/asic3_mmc.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,25 @@
++#ifndef __ASIC3_MMC_H
++#define __ASIC3_MMC_H
++
++#define DRIVER_NAME "asic3_mmc"
++
++#ifdef CONFIG_MMC_DEBUG
++#define DBG(x...) printk(DRIVER_NAME ": " x)
++#else
++#define DBG(x...) do { } while (0)
++#endif
++
++/* Response types */
++#define APP_CMD 0x0040
++
++#define SD_CONFIG_CLKSTOP_ENABLE_ALL 0x1f
++
++#define DONT_CARE_CARD_BITS ( \
++ SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_3 \
++ | SD_CTRL_INTMASKCARD_WRITE_PROTECT \
++ | SD_CTRL_INTMASKCARD_UNK6 \
++ | SD_CTRL_INTMASKCARD_SIGNAL_STATE_PRESENT_0 \
++ )
++#define DONT_CARE_BUFFER_BITS ( SD_CTRL_INTMASKBUFFER_UNK7 | SD_CTRL_INTMASKBUFFER_CMD_BUSY )
++
++#endif // __ASIC3_MMC_H
+Index: linux-2.6.23/drivers/input/keyboard/Makefile
+===================================================================
+--- linux-2.6.23.orig/drivers/input/keyboard/Makefile 2008-01-20 18:59:16.000000000 +0000
++++ linux-2.6.23/drivers/input/keyboard/Makefile 2008-01-20 21:11:40.000000000 +0000
+@@ -15,6 +15,7 @@ obj-$(CONFIG_KEYBOARD_NEWTON) += newton
+ obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o
+ obj-$(CONFIG_KEYBOARD_CORGI) += corgikbd.o
+ obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o
++obj-$(CONFIG_KEYBOARD_ASIC3) += asic3_keys.o
+ obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
+ obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
+ obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
+Index: linux-2.6.23/drivers/input/keyboard/asic3_keys.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/drivers/input/keyboard/asic3_keys.c 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,131 @@
++/*
++ * Generic buttons driver for ASIC3 SoC.
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * Copyright (C) 2003 Joshua Wise
++ * Copyright (C) 2005 Pawel Kolodziejski
++ * Copyright (C) 2006 Paul Sokolovsky
++ *
++ */
++
++#include <linux/input.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <linux/irq.h>
++#include <linux/soc/asic3_base.h>
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/arch/irqs.h>
++#include <asm/hardware.h>
++#include <asm/hardware/ipaq-asic3.h>
++#include <asm/hardware/asic3_keys.h>
++
++static irqreturn_t asic3_keys_asic_handle(int irq, void *data)
++{
++ struct asic3_keys_platform_data *pdata = data;
++ int i, base_irq;
++
++ base_irq = asic3_irq_base(pdata->asic3_dev);
++ for (i = 0; i < pdata->nbuttons; i++) {
++ struct asic3_keys_button *b = &pdata->buttons[i];
++ if ((base_irq + b->gpio) == irq) {
++ int state = !!asic3_gpio_get_value(pdata->asic3_dev, b->gpio);
++
++ if (pdata->buttons[i].type == EV_SW)
++ input_report_switch(pdata->input, pdata->buttons[i].keycode, state ^ b->active_low);
++ else
++ input_report_key(pdata->input, b->keycode, state ^ b->active_low);
++ input_sync(pdata->input);
++ }
++ }
++
++ return IRQ_HANDLED;
++}
++
++static int __devinit asic3_keys_probe(struct platform_device *pdev)
++{
++ struct asic3_keys_platform_data *pdata = pdev->dev.platform_data;
++ int i, base_irq;
++ int j, ret;
++
++ pdata->input = input_allocate_device();
++
++ base_irq = asic3_irq_base(pdata->asic3_dev);
++
++ for (i = 0; i < pdata->nbuttons; i++) {
++ struct asic3_keys_button *b = &pdata->buttons[i];
++ set_bit(b->keycode, pdata->input->keybit);
++ ret=request_irq(base_irq + b->gpio, asic3_keys_asic_handle, SA_SAMPLE_RANDOM, b->desc, pdata);
++ if (ret)
++ {
++ printk(KERN_NOTICE "Failed to allocate asic3_keys irq=%d.\n",b->gpio);
++
++ for(j=0; j<i ; j++)
++ free_irq(base_irq + pdata->buttons[i].gpio, NULL);
++
++ input_unregister_device (pdata->input);
++
++ return -ENODEV;
++ }
++
++ set_irq_type(base_irq + b->gpio, IRQT_BOTHEDGE);
++ if (pdata->buttons[i].type == EV_SW) {
++ pdata->input->evbit[0] |= BIT(EV_SW);
++ set_bit(b->keycode, pdata->input->swbit);
++ } else {
++ pdata->input->evbit[0] |= BIT(EV_KEY);
++ set_bit(b->keycode, pdata->input->keybit);
++ }
++ }
++
++ pdata->input->name = pdev->name;
++ input_register_device(pdata->input);
++
++ return 0;
++}
++
++static int __devexit asic3_keys_remove(struct platform_device *pdev)
++{
++ struct asic3_keys_platform_data *pdata = pdev->dev.platform_data;
++ int i, base_irq;
++
++ base_irq = asic3_irq_base(pdata->asic3_dev);
++ for (i = 0; i < pdata->nbuttons; i++) {
++ free_irq(base_irq + pdata->buttons[i].gpio, NULL);
++ }
++
++ input_unregister_device(pdata->input);
++
++ return 0;
++}
++
++
++static struct platform_driver asic3_keys_driver = {
++ .probe = asic3_keys_probe,
++ .remove = __devexit_p(asic3_keys_remove),
++ .driver = {
++ .name = "asic3-keys",
++ },
++};
++
++static int __init asic3_keys_init(void)
++{
++ return platform_driver_register(&asic3_keys_driver);
++}
++
++static void __exit asic3_keys_exit(void)
++{
++ platform_driver_unregister(&asic3_keys_driver);
++}
++
++module_init(asic3_keys_init);
++module_exit(asic3_keys_exit);
++
++MODULE_AUTHOR("Joshua Wise, Pawel Kolodziejski, Paul Sokolovsky");
++MODULE_DESCRIPTION("Buttons driver for HTC ASIC3 SoC");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.23/include/asm-arm/arch-pxa/irqs.h
+===================================================================
+--- linux-2.6.23.orig/include/asm-arm/arch-pxa/irqs.h 2008-01-20 18:59:28.000000000 +0000
++++ linux-2.6.23/include/asm-arm/arch-pxa/irqs.h 2008-01-20 18:59:46.000000000 +0000
+@@ -182,6 +182,8 @@
+ defined(CONFIG_MACH_LOGICPD_PXA270) || \
+ defined(CONFIG_MACH_MAINSTONE)
+ #define NR_IRQS (IRQ_BOARD_END)
++#elif defined(CONFIG_MACH_HTCUNIVERSAL)
++#define NR_IRQS (IRQ_BOARD_START + 96)
+ #else
+ #define NR_IRQS (IRQ_BOARD_START)
+ #endif
+Index: linux-2.6.23/include/linux/ioport.h
+===================================================================
+--- linux-2.6.23.orig/include/linux/ioport.h 2008-01-20 18:59:31.000000000 +0000
++++ linux-2.6.23/include/linux/ioport.h 2008-01-20 18:59:46.000000000 +0000
+@@ -56,6 +56,7 @@ struct resource_list {
+ #define IORESOURCE_IRQ_HIGHLEVEL (1<<2)
+ #define IORESOURCE_IRQ_LOWLEVEL (1<<3)
+ #define IORESOURCE_IRQ_SHAREABLE (1<<4)
++#define IORESOURCE_IRQ_SOC_SUBDEVICE (1<<5)
+
+ /* ISA PnP DMA specific bits (IORESOURCE_BITS) */
+ #define IORESOURCE_DMA_TYPE_MASK (3<<0)
+Index: linux-2.6.23/include/asm-arm/arch-pxa/serial.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.23/include/asm-arm/arch-pxa/serial.h 2008-01-20 18:59:46.000000000 +0000
+@@ -0,0 +1,78 @@
++/*
++ * linux/include/asm-arm/arch-pxa/serial.h
++ *
++ * Author: Nicolas Pitre
++ * Copyright: (C) 2001 MontaVista Software Inc.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <asm/arch/pxa-regs.h>
++
++#define BAUD_BASE 921600
++
++/* Standard COM flags */
++#define STD_COM_FLAGS (ASYNC_SKIP_TEST)
++
++#define STD_SERIAL_PORT_DEFNS \
++ { \
++ type: PORT_PXA, \
++ xmit_fifo_size: 64, \
++ baud_base: BAUD_BASE, \
++ iomem_base: &FFUART, \
++ iomem_reg_shift: 2, \
++ io_type: SERIAL_IO_MEM, \
++ irq: IRQ_FFUART, \
++ flags: STD_COM_FLAGS, \
++ }, { \
++ type: PORT_PXA, \
++ xmit_fifo_size: 64, \
++ baud_base: BAUD_BASE, \
++ iomem_base: &STUART, \
++ iomem_reg_shift: 2, \
++ io_type: SERIAL_IO_MEM, \
++ irq: IRQ_STUART, \
++ flags: STD_COM_FLAGS, \
++ }, { \
++ type: PORT_PXA, \
++ xmit_fifo_size: 64, \
++ baud_base: BAUD_BASE, \
++ iomem_base: &BTUART, \
++ iomem_reg_shift: 2, \
++ io_type: SERIAL_IO_MEM, \
++ irq: IRQ_BTUART, \
++ flags: STD_COM_FLAGS, \
++ }
++
++#define EXTRA_SERIAL_PORT_DEFNS
++
++struct platform_pxa_serial_funcs {
++
++ /* Initialize whatever is connected to this serial port. */
++ void (*configure)(int state);
++#define PXA_UART_CFG_PRE_STARTUP 0
++#define PXA_UART_CFG_POST_STARTUP 1
++#define PXA_UART_CFG_PRE_SHUTDOWN 2
++#define PXA_UART_CFG_POST_SHUTDOWN 3
++
++ /* Enable or disable the individual transmitter/receiver submodules.
++ * On transceivers without echo cancellation (e.g. SIR)
++ * transmitter always has priority; e.g. if both bits are set,
++ * only the transmitter is enabled. */
++ void (*set_txrx)(int txrx);
++#define PXA_SERIAL_TX 1
++#define PXA_SERIAL_RX 2
++
++ /* Get the current state of tx/rx. */
++ int (*get_txrx)(void);
++
++ int (*suspend)(struct platform_device *dev, pm_message_t state);
++ int (*resume)(struct platform_device *dev);
++};
++
++void pxa_set_ffuart_info(struct platform_pxa_serial_funcs *ffuart_funcs);
++void pxa_set_btuart_info(struct platform_pxa_serial_funcs *btuart_funcs);
++void pxa_set_stuart_info(struct platform_pxa_serial_funcs *stuart_funcs);
++void pxa_set_hwuart_info(struct platform_pxa_serial_funcs *hwuart_funcs);
+Index: linux-2.6.23/drivers/serial/pxa.c
+===================================================================
+--- linux-2.6.23.orig/drivers/serial/pxa.c 2008-01-20 18:59:23.000000000 +0000
++++ linux-2.6.23/drivers/serial/pxa.c 2008-01-20 18:59:46.000000000 +0000
+@@ -47,6 +47,7 @@
+ #include <asm/io.h>
+ #include <asm/hardware.h>
+ #include <asm/irq.h>
++#include <asm/arch/serial.h>
+ #include <asm/arch/pxa-regs.h>
+
+
+@@ -60,6 +61,14 @@ struct uart_pxa_port {
+ char *name;
+ };
+
++
++#define IS_METHOD(dev, method) (dev && (dev)->platform_data && ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method)
++#define METHOD_CALL(dev, method) \
++ ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method()
++#define SAFE_METHOD_CALL(dev, method, args...) \
++ if (IS_METHOD(dev, method)) \
++ ((struct platform_pxa_serial_funcs *)(dev)->platform_data)->method(args)
++
+ static inline unsigned int serial_in(struct uart_pxa_port *up, int offset)
+ {
+ offset <<= 2;
+@@ -347,6 +356,9 @@ static int serial_pxa_startup(struct uar
+ unsigned long flags;
+ int retval;
+
++ /* Perform platform-specific port initialization, if needed. */
++ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_PRE_STARTUP);
++
+ if (port->line == 3) /* HWUART */
+ up->mcr |= UART_MCR_AFE;
+ else
+@@ -404,6 +416,12 @@ static int serial_pxa_startup(struct uar
+ (void) serial_in(up, UART_IIR);
+ (void) serial_in(up, UART_MSR);
+
++ /*
++ * Perform platform-specific port initialization if needed
++ */
++ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_POST_STARTUP);
++ SAFE_METHOD_CALL(port->dev, set_txrx, PXA_SERIAL_RX);
++
+ return 0;
+ }
+
+@@ -412,6 +430,8 @@ static void serial_pxa_shutdown(struct u
+ struct uart_pxa_port *up = (struct uart_pxa_port *)port;
+ unsigned long flags;
+
++ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_PRE_SHUTDOWN);
++
+ free_irq(up->port.irq, up);
+
+ /*
+@@ -433,6 +453,8 @@ static void serial_pxa_shutdown(struct u
+ UART_FCR_CLEAR_RCVR |
+ UART_FCR_CLEAR_XMIT);
+ serial_out(up, UART_FCR, 0);
++
++ SAFE_METHOD_CALL(port->dev, configure, PXA_UART_CFG_POST_SHUTDOWN);
+ }
+
+ static void
+Index: linux-2.6.23/arch/arm/mach-pxa/generic.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/generic.c 2008-01-20 18:59:09.000000000 +0000
++++ linux-2.6.23/arch/arm/mach-pxa/generic.c 2008-01-20 18:59:46.000000000 +0000
+@@ -38,6 +38,7 @@
+ #include <asm/arch/mmc.h>
+ #include <asm/arch/irda.h>
+ #include <asm/arch/i2c.h>
++#include <asm/arch/serial.h>
+
+ #include "devices.h"
+ #include "generic.h"
+@@ -412,6 +413,18 @@ struct platform_device pxa_device_hwuart
+ .num_resources = ARRAY_SIZE(pxa_resource_hwuart),
+ };
+
++void __init pxa_set_ffuart_info(struct platform_pxa_serial_funcs *info)
++{
++ pxa_device_ffuart.dev.platform_data = info;
++}
++EXPORT_SYMBOL(pxa_set_ffuart_info);
++
++void __init pxa_set_btuart_info(struct platform_pxa_serial_funcs *info)
++{
++ pxa_device_btuart.dev.platform_data = info;
++}
++EXPORT_SYMBOL(pxa_set_btuart_info);
++
+ static struct resource pxai2c_resources[] = {
+ {
+ .start = 0x40301680,
+Index: linux-2.6.23/drivers/leds/Makefile
+===================================================================
+--- linux-2.6.23.orig/drivers/leds/Makefile 2008-01-20 18:59:17.000000000 +0000
++++ linux-2.6.23/drivers/leds/Makefile 2008-01-20 21:10:45.000000000 +0000
+@@ -15,6 +15,7 @@ obj-$(CONFIG_LEDS_AMS_DELTA) += leds-am
+ obj-$(CONFIG_LEDS_NET48XX) += leds-net48xx.o
+ obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o
+ obj-$(CONFIG_LEDS_H1940) += leds-h1940.o
++obj-$(CONFIG_LEDS_ASIC3) += leds-asic3.o
+ obj-$(CONFIG_LEDS_COBALT_QUBE) += leds-cobalt-qube.o
+ obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o
+ obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o
+Index: linux-2.6.23/drivers/input/keyboard/Kconfig
+===================================================================
+--- linux-2.6.23.orig/drivers/input/keyboard/Kconfig 2008-01-20 18:59:16.000000000 +0000
++++ linux-2.6.23/drivers/input/keyboard/Kconfig 2008-01-20 18:59:46.000000000 +0000
+@@ -293,4 +293,11 @@ config KEYBOARD_BFIN
+ To compile this driver as a module, choose M here: the
+ module will be called bf54x-keys.
+
++config KEYBOARD_ASIC3
++ tristate "Buttons on ASIC3 SoC GPIOs (iPaqs, etc.)"
++ depends on HTC_ASIC3
++ help
++ This enables support for the buttons attached to GPIOs of
++ HTC ASIC3 peripheral controller.
++
+ endif
diff --git a/packages/linux/linux-rp-2.6.24/poodle_ts.patch b/packages/linux/linux-rp-2.6.24/poodle_ts.patch
new file mode 100644
index 0000000000..b10ee2eab8
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/poodle_ts.patch
@@ -0,0 +1,22 @@
+Index: linux-2.6.23/arch/arm/mach-pxa/poodle.c
+===================================================================
+--- linux-2.6.23.orig/arch/arm/mach-pxa/poodle.c 2008-01-25 12:10:10.000000000 -0800
++++ linux-2.6.23/arch/arm/mach-pxa/poodle.c 2008-01-25 12:11:58.000000000 -0800
+@@ -166,7 +166,7 @@
+ },
+ };
+
+-static unsigned long poodle_get_hsync_len(void)
++static unsigned long poodle_get_hsync_invperiod(void)
+ {
+ return 0;
+ }
+@@ -176,7 +176,7 @@
+ }
+
+ static struct corgits_machinfo poodle_ts_machinfo = {
+- .get_hsync_len = poodle_get_hsync_len,
++ .get_hsync_invperiod = poodle_get_hsync_invperiod,
+ .put_hsync = poodle_null_hsync,
+ .wait_hsync = poodle_null_hsync,
+ };
diff --git a/packages/linux/linux-rp-2.6.20/pxa-serial-hack.patch b/packages/linux/linux-rp-2.6.24/pxa-serial-hack.patch
index bf20f46a05..bf20f46a05 100644
--- a/packages/linux/linux-rp-2.6.20/pxa-serial-hack.patch
+++ b/packages/linux/linux-rp-2.6.24/pxa-serial-hack.patch
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pxa_fb_overlay.patch b/packages/linux/linux-rp-2.6.24/pxa_fb_overlay.patch
index 49c59b3275..49c59b3275 100644
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/pxa_fb_overlay.patch
+++ b/packages/linux/linux-rp-2.6.24/pxa_fb_overlay.patch
diff --git a/packages/linux/linux-rp-2.6.24/pxafb.patch b/packages/linux/linux-rp-2.6.24/pxafb.patch
new file mode 100644
index 0000000000..efcfb079b2
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/pxafb.patch
@@ -0,0 +1,26 @@
+Index: linux-2.6.23/drivers/video/pxafb.c
+===================================================================
+--- linux-2.6.23.orig/drivers/video/pxafb.c 2008-01-25 16:25:21.000000000 -0800
++++ linux-2.6.23/drivers/video/pxafb.c 2008-01-25 16:32:14.000000000 -0800
+@@ -1194,7 +1194,7 @@
+ if ((clkinfo->old == 13000))
+ break;
+
+- pcd = get_pcd(fbi->fb.var.pixclock);
++ pcd = get_pcd(fbi,fbi->fb.var.pixclock);
+ lccr3 = fbi->reg_lccr3;
+ set_hsync_time(fbi, pcd);
+ fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd);
+Index: linux-2.6.23/drivers/video/pxafb.c
+===================================================================
+--- linux-2.6.23.orig/drivers/video/pxafb.c 2008-01-25 16:25:21.000000000 -0800
++++ linux-2.6.23/drivers/video/pxafb.c 2008-01-25 16:32:14.000000000 -0800
+@@ -1194,7 +1194,7 @@
+ if ((clkinfo->old == 13000))
+ break;
+
+- pcd = get_pcd(fbi->fb.var.pixclock);
++ pcd = get_pcd(fbi,fbi->fb.var.pixclock);
+ lccr3 = fbi->reg_lccr3;
+ set_hsync_time(fbi, pcd);
+ fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd);
diff --git a/packages/linux/linux-rp-2.6.22/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch b/packages/linux/linux-rp-2.6.24/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
index b513ba1466..b513ba1466 100644
--- a/packages/linux/linux-rp-2.6.22/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
+++ b/packages/linux/linux-rp-2.6.24/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch
diff --git a/packages/linux/linux-rp-2.6.24/squashfs3.3.patch b/packages/linux/linux-rp-2.6.24/squashfs3.3.patch
new file mode 100644
index 0000000000..cb9a5c49e4
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/squashfs3.3.patch
@@ -0,0 +1,4234 @@
+diff -x .gitignore -Nurp linux-2.6.24/fs/Kconfig linux-2.6.24-squashfs3.3/fs/Kconfig
+--- linux-2.6.24/fs/Kconfig 2007-10-25 17:41:45.000000000 +0100
++++ linux-2.6.24-squashfs3.3/fs/Kconfig 2007-11-01 05:06:25.000000000 +0000
+@@ -1396,6 +1396,56 @@ config CRAMFS
+
+ If unsure, say N.
+
++config SQUASHFS
++ tristate "SquashFS 3.3 - Squashed file system support"
++ select ZLIB_INFLATE
++ help
++ Saying Y here includes support for SquashFS 3.3 (a Compressed
++ Read-Only File System). Squashfs is a highly compressed read-only
++ filesystem for Linux. It uses zlib compression to compress both
++ files, inodes and directories. Inodes in the system are very small
++ and all blocks are packed to minimise data overhead. Block sizes
++ greater than 4K are supported up to a maximum of 1 Mbytes (default
++ block size 128K). SquashFS 3.3 supports 64 bit filesystems and files
++ (larger than 4GB), full uid/gid information, hard links and timestamps.
++
++ Squashfs is intended for general read-only filesystem use, for
++ archival use (i.e. in cases where a .tar.gz file may be used), and in
++ embedded systems where low overhead is needed. Further information
++ and filesystem tools are available from http://squashfs.sourceforge.net.
++
++ If you want to compile this as a module ( = code which can be
++ inserted in and removed from the running kernel whenever you want),
++ say M here and read <file:Documentation/modules.txt>. The module
++ will be called squashfs. Note that the root file system (the one
++ containing the directory /) cannot be compiled as a module.
++
++ If unsure, say N.
++
++config SQUASHFS_EMBEDDED
++
++ bool "Additional option for memory-constrained systems"
++ depends on SQUASHFS
++ default n
++ help
++ Saying Y here allows you to specify cache size.
++
++ If unsure, say N.
++
++config SQUASHFS_FRAGMENT_CACHE_SIZE
++ int "Number of fragments cached" if SQUASHFS_EMBEDDED
++ depends on SQUASHFS
++ default "3"
++ help
++ By default SquashFS caches the last 3 fragments read from
++ the filesystem. Increasing this amount may mean SquashFS
++ has to re-read fragments less often from disk, at the expense
++ of extra system memory. Decreasing this amount will mean
++ SquashFS uses less memory at the expense of extra reads from disk.
++
++ Note there must be at least one cached fragment. Anything
++ much more than three will probably not make much difference.
++
+ config VXFS_FS
+ tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
+ depends on BLOCK
+diff -x .gitignore -Nurp linux-2.6.24/fs/Makefile linux-2.6.24-squashfs3.3/fs/Makefile
+--- linux-2.6.24/fs/Makefile 2007-10-25 17:41:45.000000000 +0100
++++ linux-2.6.24-squashfs3.3/fs/Makefile 2007-11-01 05:08:09.000000000 +0000
+@@ -72,6 +72,7 @@ obj-$(CONFIG_JBD) += jbd/
+ obj-$(CONFIG_JBD2) += jbd2/
+ obj-$(CONFIG_EXT2_FS) += ext2/
+ obj-$(CONFIG_CRAMFS) += cramfs/
++obj-$(CONFIG_SQUASHFS) += squashfs/
+ obj-y += ramfs/
+ obj-$(CONFIG_HUGETLBFS) += hugetlbfs/
+ obj-$(CONFIG_CODA_FS) += coda/
+diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/inode.c linux-2.6.24-squashfs3.3/fs/squashfs/inode.c
+--- linux-2.6.24/fs/squashfs/inode.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/fs/squashfs/inode.c 2007-11-01 05:05:00.000000000 +0000
+@@ -0,0 +1,2192 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Phillip Lougher <phillip@lougher.demon.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * inode.c
++ */
++
++#include <linux/squashfs_fs.h>
++#include <linux/module.h>
++#include <linux/zlib.h>
++#include <linux/fs.h>
++#include <linux/squashfs_fs_sb.h>
++#include <linux/squashfs_fs_i.h>
++#include <linux/buffer_head.h>
++#include <linux/vfs.h>
++#include <linux/vmalloc.h>
++#include <linux/smp_lock.h>
++#include <linux/exportfs.h>
++
++#include "squashfs.h"
++
++int squashfs_cached_blks;
++
++static void vfs_read_inode(struct inode *i);
++static struct dentry *squashfs_get_parent(struct dentry *child);
++static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode);
++static int squashfs_statfs(struct dentry *, struct kstatfs *);
++static int squashfs_symlink_readpage(struct file *file, struct page *page);
++static long long read_blocklist(struct inode *inode, int index,
++ int readahead_blks, char *block_list,
++ unsigned short **block_p, unsigned int *bsize);
++static int squashfs_readpage(struct file *file, struct page *page);
++static int squashfs_readdir(struct file *, void *, filldir_t);
++static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
++ struct nameidata *);
++static int squashfs_remount(struct super_block *s, int *flags, char *data);
++static void squashfs_put_super(struct super_block *);
++static int squashfs_get_sb(struct file_system_type *,int, const char *, void *,
++ struct vfsmount *);
++static struct inode *squashfs_alloc_inode(struct super_block *sb);
++static void squashfs_destroy_inode(struct inode *inode);
++static int init_inodecache(void);
++static void destroy_inodecache(void);
++
++static struct file_system_type squashfs_fs_type = {
++ .owner = THIS_MODULE,
++ .name = "squashfs",
++ .get_sb = squashfs_get_sb,
++ .kill_sb = kill_block_super,
++ .fs_flags = FS_REQUIRES_DEV
++};
++
++static const unsigned char squashfs_filetype_table[] = {
++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
++};
++
++static struct super_operations squashfs_super_ops = {
++ .alloc_inode = squashfs_alloc_inode,
++ .destroy_inode = squashfs_destroy_inode,
++ .statfs = squashfs_statfs,
++ .put_super = squashfs_put_super,
++ .remount_fs = squashfs_remount
++};
++
++static struct super_operations squashfs_export_super_ops = {
++ .alloc_inode = squashfs_alloc_inode,
++ .destroy_inode = squashfs_destroy_inode,
++ .statfs = squashfs_statfs,
++ .put_super = squashfs_put_super,
++ .read_inode = vfs_read_inode
++};
++
++static struct export_operations squashfs_export_ops = {
++ .get_parent = squashfs_get_parent
++};
++
++SQSH_EXTERN const struct address_space_operations squashfs_symlink_aops = {
++ .readpage = squashfs_symlink_readpage
++};
++
++SQSH_EXTERN const struct address_space_operations squashfs_aops = {
++ .readpage = squashfs_readpage
++};
++
++static const struct file_operations squashfs_dir_ops = {
++ .read = generic_read_dir,
++ .readdir = squashfs_readdir
++};
++
++SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
++ .lookup = squashfs_lookup
++};
++
++
++static struct buffer_head *get_block_length(struct super_block *s,
++ int *cur_index, int *offset, int *c_byte)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ unsigned short temp;
++ struct buffer_head *bh;
++
++ if (!(bh = sb_bread(s, *cur_index)))
++ goto out;
++
++ if (msblk->devblksize - *offset == 1) {
++ if (msblk->swap)
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset));
++ else
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset));
++ brelse(bh);
++ if (!(bh = sb_bread(s, ++(*cur_index))))
++ goto out;
++ if (msblk->swap)
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ bh->b_data);
++ else
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ bh->b_data);
++ *c_byte = temp;
++ *offset = 1;
++ } else {
++ if (msblk->swap) {
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset));
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset + 1));
++ } else {
++ ((unsigned char *) &temp)[0] = *((unsigned char *)
++ (bh->b_data + *offset));
++ ((unsigned char *) &temp)[1] = *((unsigned char *)
++ (bh->b_data + *offset + 1));
++ }
++ *c_byte = temp;
++ *offset += 2;
++ }
++
++ if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
++ if (*offset == msblk->devblksize) {
++ brelse(bh);
++ if (!(bh = sb_bread(s, ++(*cur_index))))
++ goto out;
++ *offset = 0;
++ }
++ if (*((unsigned char *) (bh->b_data + *offset)) !=
++ SQUASHFS_MARKER_BYTE) {
++ ERROR("Metadata block marker corrupt @ %x\n",
++ *cur_index);
++ brelse(bh);
++ goto out;
++ }
++ (*offset)++;
++ }
++ return bh;
++
++out:
++ return NULL;
++}
++
++
++SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
++ long long index, unsigned int length,
++ long long *next_index, int srclength)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ struct buffer_head **bh;
++ unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
++ unsigned int cur_index = index >> msblk->devblksize_log2;
++ int bytes, avail_bytes, b = 0, k = 0;
++ unsigned int compressed;
++ unsigned int c_byte = length;
++
++ bh = kmalloc(((sblk->block_size >> msblk->devblksize_log2) + 1) *
++ sizeof(struct buffer_head *), GFP_KERNEL);
++ if (bh == NULL)
++ goto read_failure;
++
++ if (c_byte) {
++ bytes = msblk->devblksize - offset;
++ compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
++ c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
++
++ TRACE("Block @ 0x%llx, %scompressed size %d, src size %d\n", index,
++ compressed ? "" : "un", (unsigned int) c_byte, srclength);
++
++ if (c_byte > srclength || index < 0 || (index + c_byte) > sblk->bytes_used)
++ goto read_failure;
++
++ bh[0] = sb_getblk(s, cur_index);
++ if (bh[0] == NULL)
++ goto block_release;
++
++ for (b = 1; bytes < c_byte; b++) {
++ bh[b] = sb_getblk(s, ++cur_index);
++ if (bh[b] == NULL)
++ goto block_release;
++ bytes += msblk->devblksize;
++ }
++ ll_rw_block(READ, b, bh);
++ } else {
++ if (index < 0 || (index + 2) > sblk->bytes_used)
++ goto read_failure;
++
++ bh[0] = get_block_length(s, &cur_index, &offset, &c_byte);
++ if (bh[0] == NULL)
++ goto read_failure;
++
++ bytes = msblk->devblksize - offset;
++ compressed = SQUASHFS_COMPRESSED(c_byte);
++ c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
++
++ TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
++ ? "" : "un", (unsigned int) c_byte);
++
++ if (c_byte > srclength || (index + c_byte) > sblk->bytes_used)
++ goto read_failure;
++
++ for (b = 1; bytes < c_byte; b++) {
++ bh[b] = sb_getblk(s, ++cur_index);
++ if (bh[b] == NULL)
++ goto block_release;
++ bytes += msblk->devblksize;
++ }
++ ll_rw_block(READ, b - 1, bh + 1);
++ }
++
++ if (compressed) {
++ int zlib_err = 0;
++
++ /*
++ * uncompress block
++ */
++
++ mutex_lock(&msblk->read_data_mutex);
++
++ msblk->stream.next_out = buffer;
++ msblk->stream.avail_out = srclength;
++
++ for (bytes = 0; k < b; k++) {
++ avail_bytes = min(c_byte - bytes, msblk->devblksize - offset);
++
++ wait_on_buffer(bh[k]);
++ if (!buffer_uptodate(bh[k]))
++ goto release_mutex;
++
++ msblk->stream.next_in = bh[k]->b_data + offset;
++ msblk->stream.avail_in = avail_bytes;
++
++ if (k == 0) {
++ zlib_err = zlib_inflateInit(&msblk->stream);
++ if (zlib_err != Z_OK) {
++ ERROR("zlib_inflateInit returned unexpected result 0x%x,"
++ " srclength %d\n", zlib_err, srclength);
++ goto release_mutex;
++ }
++
++ if (avail_bytes == 0) {
++ offset = 0;
++ brelse(bh[k]);
++ continue;
++ }
++ }
++
++ zlib_err = zlib_inflate(&msblk->stream, Z_NO_FLUSH);
++ if (zlib_err != Z_OK && zlib_err != Z_STREAM_END) {
++ ERROR("zlib_inflate returned unexpected result 0x%x,"
++ " srclength %d, avail_in %d, avail_out %d\n", zlib_err,
++ srclength, msblk->stream.avail_in, msblk->stream.avail_out);
++ goto release_mutex;
++ }
++
++ bytes += avail_bytes;
++ offset = 0;
++ brelse(bh[k]);
++ }
++
++ if (zlib_err != Z_STREAM_END)
++ goto release_mutex;
++
++ zlib_err = zlib_inflateEnd(&msblk->stream);
++ if (zlib_err != Z_OK) {
++ ERROR("zlib_inflateEnd returned unexpected result 0x%x,"
++ " srclength %d\n", zlib_err, srclength);
++ goto release_mutex;
++ }
++ bytes = msblk->stream.total_out;
++ mutex_unlock(&msblk->read_data_mutex);
++ } else {
++ int i;
++
++ for(i = 0; i < b; i++) {
++ wait_on_buffer(bh[i]);
++ if (!buffer_uptodate(bh[i]))
++ goto block_release;
++ }
++
++ for (bytes = 0; k < b; k++) {
++ avail_bytes = min(c_byte - bytes, msblk->devblksize - offset);
++
++ memcpy(buffer + bytes, bh[k]->b_data + offset, avail_bytes);
++ bytes += avail_bytes;
++ offset = 0;
++ brelse(bh[k]);
++ }
++ }
++
++ if (next_index)
++ *next_index = index + c_byte + (length ? 0 :
++ (SQUASHFS_CHECK_DATA(msblk->sblk.flags) ? 3 : 2));
++
++ kfree(bh);
++ return bytes;
++
++release_mutex:
++ mutex_unlock(&msblk->read_data_mutex);
++
++block_release:
++ for (; k < b; k++)
++ brelse(bh[k]);
++
++read_failure:
++ ERROR("sb_bread failed reading block 0x%x\n", cur_index);
++ kfree(bh);
++ return 0;
++}
++
++
++SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, void *buffer,
++ long long block, unsigned int offset,
++ int length, long long *next_block,
++ unsigned int *next_offset)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ int n, i, bytes, return_length = length;
++ long long next_index;
++
++ TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
++
++ while (1) {
++ for (i = 0; i < squashfs_cached_blks; i++)
++ if (msblk->block_cache[i].block == block)
++ break;
++
++ mutex_lock(&msblk->block_cache_mutex);
++
++ if (i == squashfs_cached_blks) {
++ /* read inode header block */
++ if (msblk->unused_cache_blks == 0) {
++ mutex_unlock(&msblk->block_cache_mutex);
++ wait_event(msblk->waitq, msblk->unused_cache_blks);
++ continue;
++ }
++
++ i = msblk->next_cache;
++ for (n = 0; n < squashfs_cached_blks; n++) {
++ if (msblk->block_cache[i].block != SQUASHFS_USED_BLK)
++ break;
++ i = (i + 1) % squashfs_cached_blks;
++ }
++
++ msblk->next_cache = (i + 1) % squashfs_cached_blks;
++
++ if (msblk->block_cache[i].block == SQUASHFS_INVALID_BLK) {
++ msblk->block_cache[i].data = vmalloc(SQUASHFS_METADATA_SIZE);
++ if (msblk->block_cache[i].data == NULL) {
++ ERROR("Failed to allocate cache block\n");
++ mutex_unlock(&msblk->block_cache_mutex);
++ goto out;
++ }
++ }
++
++ msblk->block_cache[i].block = SQUASHFS_USED_BLK;
++ msblk->unused_cache_blks --;
++ mutex_unlock(&msblk->block_cache_mutex);
++
++ msblk->block_cache[i].length = squashfs_read_data(s,
++ msblk->block_cache[i].data, block, 0, &next_index,
++ SQUASHFS_METADATA_SIZE);
++
++ if (msblk->block_cache[i].length == 0) {
++ ERROR("Unable to read cache block [%llx:%x]\n", block, offset);
++ mutex_lock(&msblk->block_cache_mutex);
++ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
++ msblk->unused_cache_blks ++;
++ smp_mb();
++ vfree(msblk->block_cache[i].data);
++ wake_up(&msblk->waitq);
++ mutex_unlock(&msblk->block_cache_mutex);
++ goto out;
++ }
++
++ mutex_lock(&msblk->block_cache_mutex);
++ msblk->block_cache[i].block = block;
++ msblk->block_cache[i].next_index = next_index;
++ msblk->unused_cache_blks ++;
++ smp_mb();
++ wake_up(&msblk->waitq);
++ TRACE("Read cache block [%llx:%x]\n", block, offset);
++ }
++
++ if (msblk->block_cache[i].block != block) {
++ mutex_unlock(&msblk->block_cache_mutex);
++ continue;
++ }
++
++ bytes = msblk->block_cache[i].length - offset;
++
++ if (bytes < 1) {
++ mutex_unlock(&msblk->block_cache_mutex);
++ goto out;
++ } else if (bytes >= length) {
++ if (buffer)
++ memcpy(buffer, msblk->block_cache[i].data + offset, length);
++ if (msblk->block_cache[i].length - offset == length) {
++ *next_block = msblk->block_cache[i].next_index;
++ *next_offset = 0;
++ } else {
++ *next_block = block;
++ *next_offset = offset + length;
++ }
++ mutex_unlock(&msblk->block_cache_mutex);
++ goto finish;
++ } else {
++ if (buffer) {
++ memcpy(buffer, msblk->block_cache[i].data + offset, bytes);
++ buffer = (char *) buffer + bytes;
++ }
++ block = msblk->block_cache[i].next_index;
++ mutex_unlock(&msblk->block_cache_mutex);
++ length -= bytes;
++ offset = 0;
++ }
++ }
++
++finish:
++ return return_length;
++out:
++ return 0;
++}
++
++
++static int get_fragment_location(struct super_block *s, unsigned int fragment,
++ long long *fragment_start_block,
++ unsigned int *fragment_size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ long long start_block =
++ msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
++ struct squashfs_fragment_entry fragment_entry;
++
++ if (msblk->swap) {
++ struct squashfs_fragment_entry sfragment_entry;
++
++ if (!squashfs_get_cached_block(s, &sfragment_entry, start_block, offset,
++ sizeof(sfragment_entry), &start_block, &offset))
++ goto out;
++ SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
++ } else
++ if (!squashfs_get_cached_block(s, &fragment_entry, start_block, offset,
++ sizeof(fragment_entry), &start_block, &offset))
++ goto out;
++
++ *fragment_start_block = fragment_entry.start_block;
++ *fragment_size = fragment_entry.size;
++
++ return 1;
++
++out:
++ return 0;
++}
++
++
++SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk,
++ struct squashfs_fragment_cache *fragment)
++{
++ mutex_lock(&msblk->fragment_mutex);
++ fragment->locked --;
++ if (fragment->locked == 0) {
++ msblk->unused_frag_blks ++;
++ smp_mb();
++ wake_up(&msblk->fragment_wait_queue);
++ }
++ mutex_unlock(&msblk->fragment_mutex);
++}
++
++
++SQSH_EXTERN
++struct squashfs_fragment_cache *get_cached_fragment(struct super_block *s,
++ long long start_block, int length)
++{
++ int i, n;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ while (1) {
++ mutex_lock(&msblk->fragment_mutex);
++
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
++ msblk->fragment[i].block != start_block; i++);
++
++ if (i == SQUASHFS_CACHED_FRAGMENTS) {
++ if (msblk->unused_frag_blks == 0) {
++ mutex_unlock(&msblk->fragment_mutex);
++ wait_event(msblk->fragment_wait_queue, msblk->unused_frag_blks);
++ continue;
++ }
++
++ i = msblk->next_fragment;
++ for (n = 0; n < SQUASHFS_CACHED_FRAGMENTS; n++) {
++ if (msblk->fragment[i].locked == 0)
++ break;
++ i = (i + 1) % SQUASHFS_CACHED_FRAGMENTS;
++ }
++
++ msblk->next_fragment = (msblk->next_fragment + 1) %
++ SQUASHFS_CACHED_FRAGMENTS;
++
++ if (msblk->fragment[i].data == NULL) {
++ msblk->fragment[i].data = vmalloc(sblk->block_size);
++ if (msblk->fragment[i].data == NULL) {
++ ERROR("Failed to allocate fragment cache block\n");
++ mutex_unlock(&msblk->fragment_mutex);
++ goto out;
++ }
++ }
++
++ msblk->unused_frag_blks --;
++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
++ msblk->fragment[i].locked = 1;
++ mutex_unlock(&msblk->fragment_mutex);
++
++ msblk->fragment[i].length = squashfs_read_data(s,
++ msblk->fragment[i].data, start_block, length, NULL,
++ sblk->block_size);
++
++ if (msblk->fragment[i].length == 0) {
++ ERROR("Unable to read fragment cache block [%llx]\n", start_block);
++ msblk->fragment[i].locked = 0;
++ msblk->unused_frag_blks ++;
++ smp_mb();
++ wake_up(&msblk->fragment_wait_queue);
++ goto out;
++ }
++
++ mutex_lock(&msblk->fragment_mutex);
++ msblk->fragment[i].block = start_block;
++ TRACE("New fragment %d, start block %lld, locked %d\n",
++ i, msblk->fragment[i].block, msblk->fragment[i].locked);
++ mutex_unlock(&msblk->fragment_mutex);
++ break;
++ }
++
++ if (msblk->fragment[i].locked == 0)
++ msblk->unused_frag_blks --;
++ msblk->fragment[i].locked++;
++ mutex_unlock(&msblk->fragment_mutex);
++ TRACE("Got fragment %d, start block %lld, locked %d\n", i,
++ msblk->fragment[i].block, msblk->fragment[i].locked);
++ break;
++ }
++
++ return &msblk->fragment[i];
++
++out:
++ return NULL;
++}
++
++
++static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i,
++ struct squashfs_base_inode_header *inodeb)
++{
++ i->i_ino = inodeb->inode_number;
++ i->i_mtime.tv_sec = inodeb->mtime;
++ i->i_atime.tv_sec = inodeb->mtime;
++ i->i_ctime.tv_sec = inodeb->mtime;
++ i->i_uid = msblk->uid[inodeb->uid];
++ i->i_mode = inodeb->mode;
++ i->i_size = 0;
++
++ if (inodeb->guid == SQUASHFS_GUIDS)
++ i->i_gid = i->i_uid;
++ else
++ i->i_gid = msblk->guid[inodeb->guid];
++}
++
++
++static squashfs_inode_t squashfs_inode_lookup(struct super_block *s, int ino)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ long long start = msblk->inode_lookup_table[SQUASHFS_LOOKUP_BLOCK(ino - 1)];
++ int offset = SQUASHFS_LOOKUP_BLOCK_OFFSET(ino - 1);
++ squashfs_inode_t inode;
++
++ TRACE("Entered squashfs_inode_lookup, inode_number = %d\n", ino);
++
++ if (msblk->swap) {
++ squashfs_inode_t sinode;
++
++ if (!squashfs_get_cached_block(s, &sinode, start, offset,
++ sizeof(sinode), &start, &offset))
++ goto out;
++ SQUASHFS_SWAP_INODE_T((&inode), &sinode);
++ } else if (!squashfs_get_cached_block(s, &inode, start, offset,
++ sizeof(inode), &start, &offset))
++ goto out;
++
++ TRACE("squashfs_inode_lookup, inode = 0x%llx\n", inode);
++
++ return inode;
++
++out:
++ return SQUASHFS_INVALID_BLK;
++}
++
++
++static void vfs_read_inode(struct inode *i)
++{
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ squashfs_inode_t inode = squashfs_inode_lookup(i->i_sb, i->i_ino);
++
++ TRACE("Entered vfs_read_inode\n");
++
++ if(inode != SQUASHFS_INVALID_BLK)
++ (msblk->read_inode)(i, inode);
++}
++
++
++static struct dentry *squashfs_get_parent(struct dentry *child)
++{
++ struct inode *i = child->d_inode;
++ struct inode *parent = iget(i->i_sb, SQUASHFS_I(i)->u.s2.parent_inode);
++ struct dentry *rv;
++
++ TRACE("Entered squashfs_get_parent\n");
++
++ if(parent == NULL) {
++ rv = ERR_PTR(-EACCES);
++ goto out;
++ }
++
++ rv = d_alloc_anon(parent);
++ if(rv == NULL)
++ rv = ERR_PTR(-ENOMEM);
++
++out:
++ return rv;
++}
++
++
++SQSH_EXTERN struct inode *squashfs_iget(struct super_block *s,
++ squashfs_inode_t inode, unsigned int inode_number)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct inode *i = iget_locked(s, inode_number);
++
++ TRACE("Entered squashfs_iget\n");
++
++ if(i && (i->i_state & I_NEW)) {
++ (msblk->read_inode)(i, inode);
++ unlock_new_inode(i);
++ }
++
++ return i;
++}
++
++
++static int squashfs_read_inode(struct inode *i, squashfs_inode_t inode)
++{
++ struct super_block *s = i->i_sb;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long block = SQUASHFS_INODE_BLK(inode) + sblk->inode_table_start;
++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
++ long long next_block;
++ unsigned int next_offset;
++ union squashfs_inode_header id, sid;
++ struct squashfs_base_inode_header *inodeb = &id.base, *sinodeb = &sid.base;
++
++ TRACE("Entered squashfs_read_inode\n");
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, sinodeb, block, offset,
++ sizeof(*sinodeb), &next_block, &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb, sizeof(*sinodeb));
++ } else
++ if (!squashfs_get_cached_block(s, inodeb, block, offset,
++ sizeof(*inodeb), &next_block, &next_offset))
++ goto failed_read;
++
++ squashfs_new_inode(msblk, i, inodeb);
++
++ switch(inodeb->inode_type) {
++ case SQUASHFS_FILE_TYPE: {
++ unsigned int frag_size;
++ long long frag_blk;
++ struct squashfs_reg_inode_header *inodep = &id.reg;
++ struct squashfs_reg_inode_header *sinodep = &sid.reg;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, sinodep, block, offset,
++ sizeof(*sinodep), &next_block, &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, inodep, block, offset,
++ sizeof(*inodep), &next_block, &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG)
++ if(!get_fragment_location(s, inodep->fragment, &frag_blk,
++ &frag_size))
++ goto failed_read;
++
++ i->i_nlink = 1;
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ i->i_data.a_ops = &squashfs_aops;
++
++ TRACE("File inode %x:%x, start_block %llx, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_LREG_TYPE: {
++ unsigned int frag_size;
++ long long frag_blk;
++ struct squashfs_lreg_inode_header *inodep = &id.lreg;
++ struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, sinodep, block, offset,
++ sizeof(*sinodep), &next_block, &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, inodep, block, offset,
++ sizeof(*inodep), &next_block, &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG)
++ if (!get_fragment_location(s, inodep->fragment, &frag_blk,
++ &frag_size))
++ goto failed_read;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ i->i_data.a_ops = &squashfs_aops;
++
++ TRACE("File inode %x:%x, start_block %llx, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_DIR_TYPE: {
++ struct squashfs_dir_inode_header *inodep = &id.dir;
++ struct squashfs_dir_inode_header *sinodep = &sid.dir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, sinodep, block, offset,
++ sizeof(*sinodep), &next_block, &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, inodep, block, offset,
++ sizeof(*inodep), &next_block, &next_offset))
++ goto failed_read;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops;
++ i->i_fop = &squashfs_dir_ops;
++ i->i_mode |= S_IFDIR;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
++
++ TRACE("Directory inode %x:%x, start_block %x, offset "
++ "%x\n", SQUASHFS_INODE_BLK(inode),
++ offset, inodep->start_block,
++ inodep->offset);
++ break;
++ }
++ case SQUASHFS_LDIR_TYPE: {
++ struct squashfs_ldir_inode_header *inodep = &id.ldir;
++ struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, sinodep, block, offset,
++ sizeof(*sinodep), &next_block, &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, inodep, block, offset,
++ sizeof(*inodep), &next_block, &next_offset))
++ goto failed_read;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops;
++ i->i_fop = &squashfs_dir_ops;
++ i->i_mode |= S_IFDIR;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
++ SQUASHFS_I(i)->u.s2.directory_index_offset = next_offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count = inodep->i_count;
++ SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
++
++ TRACE("Long directory inode %x:%x, start_block %x, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, inodep->offset);
++ break;
++ }
++ case SQUASHFS_SYMLINK_TYPE: {
++ struct squashfs_symlink_inode_header *inodep = &id.symlink;
++ struct squashfs_symlink_inode_header *sinodep = &sid.symlink;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, sinodep, block, offset,
++ sizeof(*sinodep), &next_block, &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, inodep, block, offset,
++ sizeof(*inodep), &next_block, &next_offset))
++ goto failed_read;
++
++ i->i_nlink = inodep->nlink;
++ i->i_size = inodep->symlink_size;
++ i->i_op = &page_symlink_inode_operations;
++ i->i_data.a_ops = &squashfs_symlink_aops;
++ i->i_mode |= S_IFLNK;
++ SQUASHFS_I(i)->start_block = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++
++ TRACE("Symbolic link inode %x:%x, start_block %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ next_block, next_offset);
++ break;
++ }
++ case SQUASHFS_BLKDEV_TYPE:
++ case SQUASHFS_CHRDEV_TYPE: {
++ struct squashfs_dev_inode_header *inodep = &id.dev;
++ struct squashfs_dev_inode_header *sinodep = &sid.dev;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, sinodep, block, offset,
++ sizeof(*sinodep), &next_block, &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, inodep, block, offset,
++ sizeof(*inodep), &next_block, &next_offset))
++ goto failed_read;
++
++ i->i_nlink = inodep->nlink;
++ i->i_mode |= (inodeb->inode_type == SQUASHFS_CHRDEV_TYPE) ?
++ S_IFCHR : S_IFBLK;
++ init_special_inode(i, i->i_mode, old_decode_dev(inodep->rdev));
++
++ TRACE("Device inode %x:%x, rdev %x\n",
++ SQUASHFS_INODE_BLK(inode), offset, inodep->rdev);
++ break;
++ }
++ case SQUASHFS_FIFO_TYPE:
++ case SQUASHFS_SOCKET_TYPE: {
++ struct squashfs_ipc_inode_header *inodep = &id.ipc;
++ struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, sinodep, block, offset,
++ sizeof(*sinodep), &next_block, &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, inodep, block, offset,
++ sizeof(*inodep), &next_block, &next_offset))
++ goto failed_read;
++
++ i->i_nlink = inodep->nlink;
++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
++ ? S_IFIFO : S_IFSOCK;
++ init_special_inode(i, i->i_mode, 0);
++ break;
++ }
++ default:
++ ERROR("Unknown inode type %d in squashfs_iget!\n",
++ inodeb->inode_type);
++ goto failed_read1;
++ }
++
++ return 1;
++
++failed_read:
++ ERROR("Unable to read inode [%llx:%x]\n", block, offset);
++
++failed_read1:
++ make_bad_inode(i);
++ return 0;
++}
++
++
++static int read_inode_lookup_table(struct super_block *s)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned int length = SQUASHFS_LOOKUP_BLOCK_BYTES(sblk->inodes);
++
++ TRACE("In read_inode_lookup_table, length %d\n", length);
++
++ /* Allocate inode lookup table */
++ msblk->inode_lookup_table = kmalloc(length, GFP_KERNEL);
++ if (msblk->inode_lookup_table == NULL) {
++ ERROR("Failed to allocate inode lookup table\n");
++ return 0;
++ }
++
++ if (!squashfs_read_data(s, (char *) msblk->inode_lookup_table,
++ sblk->lookup_table_start, length |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) {
++ ERROR("unable to read inode lookup table\n");
++ return 0;
++ }
++
++ if (msblk->swap) {
++ int i;
++ long long block;
++
++ for (i = 0; i < SQUASHFS_LOOKUP_BLOCKS(sblk->inodes); i++) {
++ /* XXX */
++ SQUASHFS_SWAP_LOOKUP_BLOCKS((&block),
++ &msblk->inode_lookup_table[i], 1);
++ msblk->inode_lookup_table[i] = block;
++ }
++ }
++
++ return 1;
++}
++
++
++static int read_fragment_index_table(struct super_block *s)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned int length = SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments);
++
++ if(length == 0)
++ return 1;
++
++ /* Allocate fragment index table */
++ msblk->fragment_index = kmalloc(length, GFP_KERNEL);
++ if (msblk->fragment_index == NULL) {
++ ERROR("Failed to allocate fragment index table\n");
++ return 0;
++ }
++
++ if (!squashfs_read_data(s, (char *) msblk->fragment_index,
++ sblk->fragment_table_start, length |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, length)) {
++ ERROR("unable to read fragment index table\n");
++ return 0;
++ }
++
++ if (msblk->swap) {
++ int i;
++ long long fragment;
++
++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments); i++) {
++ /* XXX */
++ SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
++ &msblk->fragment_index[i], 1);
++ msblk->fragment_index[i] = fragment;
++ }
++ }
++
++ return 1;
++}
++
++
++static int readahead_metadata(struct super_block *s)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ int i;
++
++ squashfs_cached_blks = SQUASHFS_CACHED_BLKS;
++
++ /* Init inode_table block pointer array */
++ msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
++ squashfs_cached_blks, GFP_KERNEL);
++ if (msblk->block_cache == NULL) {
++ ERROR("Failed to allocate block cache\n");
++ goto failed;
++ }
++
++ for (i = 0; i < squashfs_cached_blks; i++)
++ msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
++
++ msblk->next_cache = 0;
++ msblk->unused_cache_blks = squashfs_cached_blks;
++
++ return 1;
++
++failed:
++ return 0;
++}
++
++
++static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
++{
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ msblk->read_inode = squashfs_read_inode;
++ msblk->read_blocklist = read_blocklist;
++ msblk->read_fragment_index_table = read_fragment_index_table;
++
++ if (sblk->s_major == 1) {
++ if (!squashfs_1_0_supported(msblk)) {
++ SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
++ "are unsupported\n");
++ SERROR("Please recompile with Squashfs 1.0 support enabled\n");
++ return 0;
++ }
++ } else if (sblk->s_major == 2) {
++ if (!squashfs_2_0_supported(msblk)) {
++ SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
++ "are unsupported\n");
++ SERROR("Please recompile with Squashfs 2.0 support enabled\n");
++ return 0;
++ }
++ } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
++ SQUASHFS_MINOR) {
++ SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
++ "filesystem\n", sblk->s_major, sblk->s_minor);
++ SERROR("Please update your kernel\n");
++ return 0;
++ }
++
++ return 1;
++}
++
++
++static int squashfs_fill_super(struct super_block *s, void *data, int silent)
++{
++ struct squashfs_sb_info *msblk;
++ struct squashfs_super_block *sblk;
++ int i;
++ char b[BDEVNAME_SIZE];
++ struct inode *root;
++
++ TRACE("Entered squashfs_fill_superblock\n");
++
++ s->s_fs_info = kzalloc(sizeof(struct squashfs_sb_info), GFP_KERNEL);
++ if (s->s_fs_info == NULL) {
++ ERROR("Failed to allocate superblock\n");
++ goto failure;
++ }
++ msblk = s->s_fs_info;
++
++ msblk->stream.workspace = vmalloc(zlib_inflate_workspacesize());
++ if (msblk->stream.workspace == NULL) {
++ ERROR("Failed to allocate zlib workspace\n");
++ goto failure;
++ }
++ sblk = &msblk->sblk;
++
++ msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
++ msblk->devblksize_log2 = ffz(~msblk->devblksize);
++
++ mutex_init(&msblk->read_data_mutex);
++ mutex_init(&msblk->read_page_mutex);
++ mutex_init(&msblk->block_cache_mutex);
++ mutex_init(&msblk->fragment_mutex);
++ mutex_init(&msblk->meta_index_mutex);
++
++ init_waitqueue_head(&msblk->waitq);
++ init_waitqueue_head(&msblk->fragment_wait_queue);
++
++ /* sblk->bytes_used is checked in squashfs_read_data to ensure reads are not
++ * beyond filesystem end. As we're using squashfs_read_data to read sblk here,
++ * first set sblk->bytes_used to a useful value */
++ sblk->bytes_used = sizeof(struct squashfs_super_block);
++ if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
++ sizeof(struct squashfs_super_block) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, sizeof(struct squashfs_super_block))) {
++ SERROR("unable to read superblock\n");
++ goto failed_mount;
++ }
++
++ /* Check it is a SQUASHFS superblock */
++ if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
++ if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
++ struct squashfs_super_block ssblk;
++
++ WARNING("Mounting a different endian SQUASHFS filesystem on %s\n",
++ bdevname(s->s_bdev, b));
++
++ SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
++ memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
++ msblk->swap = 1;
++ } else {
++ SERROR("Can't find a SQUASHFS superblock on %s\n",
++ bdevname(s->s_bdev, b));
++ goto failed_mount;
++ }
++ }
++
++ /* Check the MAJOR & MINOR versions */
++ if(!supported_squashfs_filesystem(msblk, silent))
++ goto failed_mount;
++
++ /* Check the filesystem does not extend beyond the end of the
++ block device */
++ if(sblk->bytes_used < 0 || sblk->bytes_used > i_size_read(s->s_bdev->bd_inode))
++ goto failed_mount;
++
++ /* Check the root inode for sanity */
++ if (SQUASHFS_INODE_OFFSET(sblk->root_inode) > SQUASHFS_METADATA_SIZE)
++ goto failed_mount;
++
++ TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
++ TRACE("Inodes are %scompressed\n", SQUASHFS_UNCOMPRESSED_INODES(sblk->flags)
++ ? "un" : "");
++ TRACE("Data is %scompressed\n", SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
++ ? "un" : "");
++ TRACE("Check data is %spresent in the filesystem\n",
++ SQUASHFS_CHECK_DATA(sblk->flags) ? "" : "not ");
++ TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
++ TRACE("Block size %d\n", sblk->block_size);
++ TRACE("Number of inodes %d\n", sblk->inodes);
++ if (sblk->s_major > 1)
++ TRACE("Number of fragments %d\n", sblk->fragments);
++ TRACE("Number of uids %d\n", sblk->no_uids);
++ TRACE("Number of gids %d\n", sblk->no_guids);
++ TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
++ TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
++ if (sblk->s_major > 1)
++ TRACE("sblk->fragment_table_start %llx\n", sblk->fragment_table_start);
++ TRACE("sblk->uid_start %llx\n", sblk->uid_start);
++
++ s->s_maxbytes = MAX_LFS_FILESIZE;
++ s->s_flags |= MS_RDONLY;
++ s->s_op = &squashfs_super_ops;
++
++ if (readahead_metadata(s) == 0)
++ goto failed_mount;
++
++ /* Allocate read_page block */
++ msblk->read_page = vmalloc(sblk->block_size);
++ if (msblk->read_page == NULL) {
++ ERROR("Failed to allocate read_page block\n");
++ goto failed_mount;
++ }
++
++ /* Allocate uid and gid tables */
++ msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int), GFP_KERNEL);
++ if (msblk->uid == NULL) {
++ ERROR("Failed to allocate uid/gid table\n");
++ goto failed_mount;
++ }
++ msblk->guid = msblk->uid + sblk->no_uids;
++
++ if (msblk->swap) {
++ unsigned int suid[sblk->no_uids + sblk->no_guids];
++
++ if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
++ ((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int)) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) {
++ ERROR("unable to read uid/gid table\n");
++ goto failed_mount;
++ }
++
++ SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
++ sblk->no_guids), (sizeof(unsigned int) * 8));
++ } else
++ if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
++ ((sblk->no_uids + sblk->no_guids) *
++ sizeof(unsigned int)) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, (sblk->no_uids + sblk->no_guids) * sizeof(unsigned int))) {
++ ERROR("unable to read uid/gid table\n");
++ goto failed_mount;
++ }
++
++
++ if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
++ goto allocate_root;
++
++ msblk->fragment = kzalloc(sizeof(struct squashfs_fragment_cache) *
++ SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL);
++ if (msblk->fragment == NULL) {
++ ERROR("Failed to allocate fragment block cache\n");
++ goto failed_mount;
++ }
++
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
++ msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
++ }
++
++ msblk->next_fragment = 0;
++ msblk->unused_frag_blks = SQUASHFS_CACHED_FRAGMENTS;
++
++ /* Allocate and read fragment index table */
++ if (msblk->read_fragment_index_table(s) == 0)
++ goto failed_mount;
++
++ if(sblk->s_major < 3 || sblk->lookup_table_start == SQUASHFS_INVALID_BLK)
++ goto allocate_root;
++
++ /* Allocate and read inode lookup table */
++ if (read_inode_lookup_table(s) == 0)
++ goto failed_mount;
++
++ s->s_op = &squashfs_export_super_ops;
++ s->s_export_op = &squashfs_export_ops;
++
++allocate_root:
++ root = new_inode(s);
++ if ((msblk->read_inode)(root, sblk->root_inode) == 0)
++ goto failed_mount;
++ insert_inode_hash(root);
++
++ s->s_root = d_alloc_root(root);
++ if (s->s_root == NULL) {
++ ERROR("Root inode create failed\n");
++ iput(root);
++ goto failed_mount;
++ }
++
++ TRACE("Leaving squashfs_fill_super\n");
++ return 0;
++
++failed_mount:
++ kfree(msblk->inode_lookup_table);
++ kfree(msblk->fragment_index);
++ kfree(msblk->fragment);
++ kfree(msblk->uid);
++ vfree(msblk->read_page);
++ kfree(msblk->block_cache);
++ kfree(msblk->fragment_index_2);
++ vfree(msblk->stream.workspace);
++ kfree(s->s_fs_info);
++ s->s_fs_info = NULL;
++ return -EINVAL;
++
++failure:
++ return -ENOMEM;
++}
++
++
++static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf)
++{
++ struct squashfs_sb_info *msblk = dentry->d_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ TRACE("Entered squashfs_statfs\n");
++
++ buf->f_type = SQUASHFS_MAGIC;
++ buf->f_bsize = sblk->block_size;
++ buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
++ buf->f_bfree = buf->f_bavail = 0;
++ buf->f_files = sblk->inodes;
++ buf->f_ffree = 0;
++ buf->f_namelen = SQUASHFS_NAME_LEN;
++
++ return 0;
++}
++
++
++static int squashfs_symlink_readpage(struct file *file, struct page *page)
++{
++ struct inode *inode = page->mapping->host;
++ int index = page->index << PAGE_CACHE_SHIFT, length, bytes, avail_bytes;
++ long long block = SQUASHFS_I(inode)->start_block;
++ int offset = SQUASHFS_I(inode)->offset;
++ void *pageaddr = kmap(page);
++
++ TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
++ "%llx, offset %x\n", page->index,
++ SQUASHFS_I(inode)->start_block,
++ SQUASHFS_I(inode)->offset);
++
++ for (length = 0; length < index; length += bytes) {
++ bytes = squashfs_get_cached_block(inode->i_sb, NULL, block,
++ offset, PAGE_CACHE_SIZE, &block, &offset);
++ if (bytes == 0) {
++ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
++ goto skip_read;
++ }
++ }
++
++ if (length != index) {
++ ERROR("(squashfs_symlink_readpage) length != index\n");
++ bytes = 0;
++ goto skip_read;
++ }
++
++ avail_bytes = min_t(int, i_size_read(inode) - length, PAGE_CACHE_SIZE);
++
++ bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block, offset,
++ avail_bytes, &block, &offset);
++ if (bytes == 0)
++ ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
++
++skip_read:
++ memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
++ kunmap(page);
++ flush_dcache_page(page);
++ SetPageUptodate(page);
++ unlock_page(page);
++
++ return 0;
++}
++
++
++struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
++{
++ struct meta_index *meta = NULL;
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ int i;
++
++ mutex_lock(&msblk->meta_index_mutex);
++
++ TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
++
++ if (msblk->meta_index == NULL)
++ goto not_allocated;
++
++ for (i = 0; i < SQUASHFS_META_NUMBER; i ++) {
++ if (msblk->meta_index[i].inode_number == inode->i_ino &&
++ msblk->meta_index[i].offset >= offset &&
++ msblk->meta_index[i].offset <= index &&
++ msblk->meta_index[i].locked == 0) {
++ TRACE("locate_meta_index: entry %d, offset %d\n", i,
++ msblk->meta_index[i].offset);
++ meta = &msblk->meta_index[i];
++ offset = meta->offset;
++ }
++ }
++
++ if (meta)
++ meta->locked = 1;
++
++not_allocated:
++ mutex_unlock(&msblk->meta_index_mutex);
++
++ return meta;
++}
++
++
++struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
++{
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct meta_index *meta = NULL;
++ int i;
++
++ mutex_lock(&msblk->meta_index_mutex);
++
++ TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
++
++ if (msblk->meta_index == NULL) {
++ msblk->meta_index = kmalloc(sizeof(struct meta_index) *
++ SQUASHFS_META_NUMBER, GFP_KERNEL);
++ if (msblk->meta_index == NULL) {
++ ERROR("Failed to allocate meta_index\n");
++ goto failed;
++ }
++ for (i = 0; i < SQUASHFS_META_NUMBER; i++) {
++ msblk->meta_index[i].inode_number = 0;
++ msblk->meta_index[i].locked = 0;
++ }
++ msblk->next_meta_index = 0;
++ }
++
++ for (i = SQUASHFS_META_NUMBER; i &&
++ msblk->meta_index[msblk->next_meta_index].locked; i --)
++ msblk->next_meta_index = (msblk->next_meta_index + 1) %
++ SQUASHFS_META_NUMBER;
++
++ if (i == 0) {
++ TRACE("empty_meta_index: failed!\n");
++ goto failed;
++ }
++
++ TRACE("empty_meta_index: returned meta entry %d, %p\n",
++ msblk->next_meta_index,
++ &msblk->meta_index[msblk->next_meta_index]);
++
++ meta = &msblk->meta_index[msblk->next_meta_index];
++ msblk->next_meta_index = (msblk->next_meta_index + 1) %
++ SQUASHFS_META_NUMBER;
++
++ meta->inode_number = inode->i_ino;
++ meta->offset = offset;
++ meta->skip = skip;
++ meta->entries = 0;
++ meta->locked = 1;
++
++failed:
++ mutex_unlock(&msblk->meta_index_mutex);
++ return meta;
++}
++
++
++void release_meta_index(struct inode *inode, struct meta_index *meta)
++{
++ meta->locked = 0;
++ smp_mb();
++}
++
++
++static int read_block_index(struct super_block *s, int blocks, char *block_list,
++ long long *start_block, int *offset)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ unsigned int *block_listp;
++ int block = 0;
++
++ if (msblk->swap) {
++ char sblock_list[blocks << 2];
++
++ if (!squashfs_get_cached_block(s, sblock_list, *start_block,
++ *offset, blocks << 2, start_block, offset)) {
++ ERROR("Fail reading block list [%llx:%x]\n", *start_block, *offset);
++ goto failure;
++ }
++ SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
++ ((unsigned int *)sblock_list), blocks);
++ } else {
++ if (!squashfs_get_cached_block(s, block_list, *start_block,
++ *offset, blocks << 2, start_block, offset)) {
++ ERROR("Fail reading block list [%llx:%x]\n", *start_block, *offset);
++ goto failure;
++ }
++ }
++
++ for (block_listp = (unsigned int *) block_list; blocks;
++ block_listp++, blocks --)
++ block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
++
++ return block;
++
++failure:
++ return -1;
++}
++
++
++#define SIZE 256
++
++static inline int calculate_skip(int blocks) {
++ int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
++ return skip >= 7 ? 7 : skip + 1;
++}
++
++
++static int get_meta_index(struct inode *inode, int index,
++ long long *index_block, int *index_offset,
++ long long *data_block, char *block_list)
++{
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
++ int offset = 0;
++ struct meta_index *meta;
++ struct meta_entry *meta_entry;
++ long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
++ int cur_offset = SQUASHFS_I(inode)->offset;
++ long long cur_data_block = SQUASHFS_I(inode)->start_block;
++ int i;
++
++ index /= SQUASHFS_META_INDEXES * skip;
++
++ while (offset < index) {
++ meta = locate_meta_index(inode, index, offset + 1);
++
++ if (meta == NULL) {
++ meta = empty_meta_index(inode, offset + 1, skip);
++ if (meta == NULL)
++ goto all_done;
++ } else {
++ if(meta->entries == 0)
++ goto failed;
++ /* XXX */
++ offset = index < meta->offset + meta->entries ? index :
++ meta->offset + meta->entries - 1;
++ /* XXX */
++ meta_entry = &meta->meta_entry[offset - meta->offset];
++ cur_index_block = meta_entry->index_block + sblk->inode_table_start;
++ cur_offset = meta_entry->offset;
++ cur_data_block = meta_entry->data_block;
++ TRACE("get_meta_index: offset %d, meta->offset %d, "
++ "meta->entries %d\n", offset, meta->offset, meta->entries);
++ TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
++ " data_block 0x%llx\n", cur_index_block,
++ cur_offset, cur_data_block);
++ }
++
++ for (i = meta->offset + meta->entries; i <= index &&
++ i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
++ int blocks = skip * SQUASHFS_META_INDEXES;
++
++ while (blocks) {
++ int block = blocks > (SIZE >> 2) ? (SIZE >> 2) : blocks;
++ int res = read_block_index(inode->i_sb, block, block_list,
++ &cur_index_block, &cur_offset);
++
++ if (res == -1)
++ goto failed;
++
++ cur_data_block += res;
++ blocks -= block;
++ }
++
++ meta_entry = &meta->meta_entry[i - meta->offset];
++ meta_entry->index_block = cur_index_block - sblk->inode_table_start;
++ meta_entry->offset = cur_offset;
++ meta_entry->data_block = cur_data_block;
++ meta->entries ++;
++ offset ++;
++ }
++
++ TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
++ meta->offset, meta->entries);
++
++ release_meta_index(inode, meta);
++ }
++
++all_done:
++ *index_block = cur_index_block;
++ *index_offset = cur_offset;
++ *data_block = cur_data_block;
++
++ return offset * SQUASHFS_META_INDEXES * skip;
++
++failed:
++ release_meta_index(inode, meta);
++ return -1;
++}
++
++
++static long long read_blocklist(struct inode *inode, int index,
++ int readahead_blks, char *block_list,
++ unsigned short **block_p, unsigned int *bsize)
++{
++ long long block_ptr;
++ int offset;
++ long long block;
++ int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
++ block_list);
++
++ TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
++ " 0x%x, block 0x%llx\n", res, index, block_ptr, offset, block);
++
++ if(res == -1)
++ goto failure;
++
++ index -= res;
++
++ while (index) {
++ int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
++ int res = read_block_index(inode->i_sb, blocks, block_list,
++ &block_ptr, &offset);
++ if (res == -1)
++ goto failure;
++ block += res;
++ index -= blocks;
++ }
++
++ if (read_block_index(inode->i_sb, 1, block_list, &block_ptr, &offset) == -1)
++ goto failure;
++ *bsize = *((unsigned int *) block_list);
++
++ return block;
++
++failure:
++ return 0;
++}
++
++
++static int squashfs_readpage(struct file *file, struct page *page)
++{
++ struct inode *inode = page->mapping->host;
++ struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned char *block_list = NULL;
++ long long block;
++ unsigned int bsize, i;
++ int bytes;
++ int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
++ void *pageaddr;
++ struct squashfs_fragment_cache *fragment = NULL;
++ char *data_ptr = msblk->read_page;
++
++ int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
++ int start_index = page->index & ~mask;
++ int end_index = start_index | mask;
++ int file_end = i_size_read(inode) >> sblk->block_log;
++ int sparse = 0;
++
++ TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
++ page->index, SQUASHFS_I(inode)->start_block);
++
++ if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
++ PAGE_CACHE_SHIFT))
++ goto out;
++
++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
++ || index < file_end) {
++ block_list = kmalloc(SIZE, GFP_KERNEL);
++ if (block_list == NULL) {
++ ERROR("Failed to allocate block_list\n");
++ goto error_out;
++ }
++
++ block = (msblk->read_blocklist)(inode, index, 1, block_list, NULL, &bsize);
++ if (block == 0)
++ goto error_out;
++
++ if (bsize == 0) { /* hole */
++ bytes = index == file_end ?
++ (i_size_read(inode) & (sblk->block_size - 1)) : sblk->block_size;
++ sparse = 1;
++ } else {
++ mutex_lock(&msblk->read_page_mutex);
++
++ bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
++ bsize, NULL, sblk->block_size);
++
++ if (bytes == 0) {
++ ERROR("Unable to read page, block %llx, size %x\n", block, bsize);
++ mutex_unlock(&msblk->read_page_mutex);
++ goto error_out;
++ }
++ }
++ } else {
++ fragment = get_cached_fragment(inode->i_sb,
++ SQUASHFS_I(inode)-> u.s1.fragment_start_block,
++ SQUASHFS_I(inode)->u.s1.fragment_size);
++
++ if (fragment == NULL) {
++ ERROR("Unable to read page, block %llx, size %x\n",
++ SQUASHFS_I(inode)->u.s1.fragment_start_block,
++ (int) SQUASHFS_I(inode)->u.s1.fragment_size);
++ goto error_out;
++ }
++ bytes = i_size_read(inode) & (sblk->block_size - 1);
++ data_ptr = fragment->data + SQUASHFS_I(inode)->u.s1.fragment_offset;
++ }
++
++ for (i = start_index; i <= end_index && bytes > 0; i++,
++ bytes -= PAGE_CACHE_SIZE, data_ptr += PAGE_CACHE_SIZE) {
++ struct page *push_page;
++ int avail = sparse ? 0 : min_t(unsigned int, bytes, PAGE_CACHE_SIZE);
++
++ TRACE("bytes %d, i %d, available_bytes %d\n", bytes, i, avail);
++
++ push_page = (i == page->index) ? page :
++ grab_cache_page_nowait(page->mapping, i);
++
++ if (!push_page)
++ continue;
++
++ if (PageUptodate(push_page))
++ goto skip_page;
++
++ pageaddr = kmap_atomic(push_page, KM_USER0);
++ memcpy(pageaddr, data_ptr, avail);
++ memset(pageaddr + avail, 0, PAGE_CACHE_SIZE - avail);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(push_page);
++ SetPageUptodate(push_page);
++skip_page:
++ unlock_page(push_page);
++ if(i != page->index)
++ page_cache_release(push_page);
++ }
++
++ if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
++ || index < file_end) {
++ if (!sparse)
++ mutex_unlock(&msblk->read_page_mutex);
++ kfree(block_list);
++ } else
++ release_cached_fragment(msblk, fragment);
++
++ return 0;
++
++error_out:
++ SetPageError(page);
++out:
++ pageaddr = kmap_atomic(page, KM_USER0);
++ memset(pageaddr, 0, PAGE_CACHE_SIZE);
++ kunmap_atomic(pageaddr, KM_USER0);
++ flush_dcache_page(page);
++ if (!PageError(page))
++ SetPageUptodate(page);
++ unlock_page(page);
++
++ kfree(block_list);
++ return 0;
++}
++
++
++static int get_dir_index_using_offset(struct super_block *s,
++ long long *next_block, unsigned int *next_offset,
++ long long index_start, unsigned int index_offset, int i_count,
++ long long f_pos)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index index;
++
++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
++ i_count, (unsigned int) f_pos);
++
++ f_pos =- 3;
++ if (f_pos == 0)
++ goto finish;
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index sindex;
++ squashfs_get_cached_block(s, &sindex, index_start, index_offset,
++ sizeof(sindex), &index_start, &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
++ } else
++ squashfs_get_cached_block(s, &index, index_start, index_offset,
++ sizeof(index), &index_start, &index_offset);
++
++ if (index.index > f_pos)
++ break;
++
++ squashfs_get_cached_block(s, NULL, index_start, index_offset,
++ index.size + 1, &index_start, &index_offset);
++
++ length = index.index;
++ *next_block = index.start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++
++finish:
++ return length + 3;
++}
++
++
++static int get_dir_index_using_name(struct super_block *s,
++ long long *next_block, unsigned int *next_offset,
++ long long index_start, unsigned int index_offset, int i_count,
++ const char *name, int size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index *index;
++ char *str;
++
++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
++
++ str = kmalloc(sizeof(struct squashfs_dir_index) +
++ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL);
++ if (str == NULL) {
++ ERROR("Failed to allocate squashfs_dir_index\n");
++ goto failure;
++ }
++
++ index = (struct squashfs_dir_index *) (str + SQUASHFS_NAME_LEN + 1);
++ strncpy(str, name, size);
++ str[size] = '\0';
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index sindex;
++ squashfs_get_cached_block(s, &sindex, index_start, index_offset,
++ sizeof(sindex), &index_start, &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
++ } else
++ squashfs_get_cached_block(s, index, index_start, index_offset,
++ sizeof(struct squashfs_dir_index), &index_start, &index_offset);
++
++ squashfs_get_cached_block(s, index->name, index_start, index_offset,
++ index->size + 1, &index_start, &index_offset);
++
++ index->name[index->size + 1] = '\0';
++
++ if (strcmp(index->name, str) > 0)
++ break;
++
++ length = index->index;
++ *next_block = index->start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++ kfree(str);
++
++failure:
++ return length + 3;
++}
++
++
++static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
++{
++ struct inode *i = file->f_dentry->d_inode;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0, dir_count;
++ struct squashfs_dir_header dirh;
++ struct squashfs_dir_entry *dire;
++
++ TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
++
++ dire = kmalloc(sizeof(struct squashfs_dir_entry) +
++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL);
++ if (dire == NULL) {
++ ERROR("Failed to allocate squashfs_dir_entry\n");
++ goto finish;
++ }
++
++ while(file->f_pos < 3) {
++ char *name;
++ int size, i_ino;
++
++ if(file->f_pos == 0) {
++ name = ".";
++ size = 1;
++ i_ino = i->i_ino;
++ } else {
++ name = "..";
++ size = 2;
++ i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
++ }
++ TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
++ (unsigned int) dirent, name, size, (int)
++ file->f_pos, i_ino, squashfs_filetype_table[1]);
++
++ if (filldir(dirent, name, size, file->f_pos, i_ino,
++ squashfs_filetype_table[1]) < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos += size;
++ }
++
++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count, file->f_pos);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header sdirh;
++
++ if (!squashfs_get_cached_block(i->i_sb, &sdirh, next_block,
++ next_offset, sizeof(sdirh), &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block,
++ next_offset, sizeof(dirh), &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry sdire;
++ if (!squashfs_get_cached_block(i->i_sb, &sdire, next_block,
++ next_offset, sizeof(sdire), &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, dire, next_block,
++ next_offset, sizeof(*dire), &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name, next_block,
++ next_offset, dire->size + 1, &next_block, &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (file->f_pos >= length)
++ continue;
++
++ dire->name[dire->size + 1] = '\0';
++
++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
++ (unsigned int) dirent, dire->name, dire->size + 1,
++ (int) file->f_pos, dirh.start_block, dire->offset,
++ dirh.inode_number + dire->inode_number,
++ squashfs_filetype_table[dire->type]);
++
++ if (filldir(dirent, dire->name, dire->size + 1, file->f_pos,
++ dirh.inode_number + dire->inode_number,
++ squashfs_filetype_table[dire->type]) < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos = length;
++ }
++ }
++
++finish:
++ kfree(dire);
++ return 0;
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ kfree(dire);
++ return 0;
++}
++
++
++static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
++ struct nameidata *nd)
++{
++ const unsigned char *name = dentry->d_name.name;
++ int len = dentry->d_name.len;
++ struct inode *inode = NULL;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0, dir_count;
++ struct squashfs_dir_header dirh;
++ struct squashfs_dir_entry *dire;
++
++ TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
++
++ dire = kmalloc(sizeof(struct squashfs_dir_entry) +
++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL);
++ if (dire == NULL) {
++ ERROR("Failed to allocate squashfs_dir_entry\n");
++ goto exit_lookup;
++ }
++
++ if (len > SQUASHFS_NAME_LEN)
++ goto exit_lookup;
++
++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count, name, len);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header sdirh;
++ if (!squashfs_get_cached_block(i->i_sb, &sdirh, next_block,
++ next_offset, sizeof(sdirh), &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, &dirh, next_block,
++ next_offset, sizeof(dirh), &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry sdire;
++ if (!squashfs_get_cached_block(i->i_sb, &sdire, next_block,
++ next_offset, sizeof(sdire), &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, dire, next_block,
++ next_offset, sizeof(*dire), &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name, next_block,
++ next_offset, dire->size + 1, &next_block, &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (name[0] < dire->name[0])
++ goto exit_lookup;
++
++ if ((len == dire->size + 1) && !strncmp(name, dire->name, len)) {
++ squashfs_inode_t ino = SQUASHFS_MKINODE(dirh.start_block,
++ dire->offset);
++
++ TRACE("calling squashfs_iget for directory entry %s, inode"
++ " %x:%x, %d\n", name, dirh.start_block, dire->offset,
++ dirh.inode_number + dire->inode_number);
++
++ inode = squashfs_iget(i->i_sb, ino, dirh.inode_number + dire->inode_number);
++
++ goto exit_lookup;
++ }
++ }
++ }
++
++exit_lookup:
++ kfree(dire);
++ if (inode)
++ return d_splice_alias(inode, dentry);
++ d_add(dentry, inode);
++ return ERR_PTR(0);
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ goto exit_lookup;
++}
++
++
++static int squashfs_remount(struct super_block *s, int *flags, char *data)
++{
++ *flags |= MS_RDONLY;
++ return 0;
++}
++
++
++static void squashfs_put_super(struct super_block *s)
++{
++ int i;
++
++ if (s->s_fs_info) {
++ struct squashfs_sb_info *sbi = s->s_fs_info;
++ if (sbi->block_cache)
++ for (i = 0; i < squashfs_cached_blks; i++)
++ if (sbi->block_cache[i].block != SQUASHFS_INVALID_BLK)
++ vfree(sbi->block_cache[i].data);
++ if (sbi->fragment)
++ for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
++ vfree(sbi->fragment[i].data);
++ kfree(sbi->fragment);
++ kfree(sbi->block_cache);
++ vfree(sbi->read_page);
++ kfree(sbi->uid);
++ kfree(sbi->fragment_index);
++ kfree(sbi->fragment_index_2);
++ kfree(sbi->meta_index);
++ vfree(sbi->stream.workspace);
++ kfree(s->s_fs_info);
++ s->s_fs_info = NULL;
++ }
++}
++
++
++static int squashfs_get_sb(struct file_system_type *fs_type, int flags,
++ const char *dev_name, void *data, struct vfsmount *mnt)
++{
++ return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super,
++ mnt);
++}
++
++
++static int __init init_squashfs_fs(void)
++{
++ int err = init_inodecache();
++ if (err)
++ goto out;
++
++ printk(KERN_INFO "squashfs: version 3.3 (2007/10/31) "
++ "Phillip Lougher\n");
++
++ err = register_filesystem(&squashfs_fs_type);
++ if (err)
++ destroy_inodecache();
++
++out:
++ return err;
++}
++
++
++static void __exit exit_squashfs_fs(void)
++{
++ unregister_filesystem(&squashfs_fs_type);
++ destroy_inodecache();
++}
++
++
++static struct kmem_cache * squashfs_inode_cachep;
++
++
++static struct inode *squashfs_alloc_inode(struct super_block *sb)
++{
++ struct squashfs_inode_info *ei;
++ ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL);
++ return ei ? &ei->vfs_inode : NULL;
++}
++
++
++static void squashfs_destroy_inode(struct inode *inode)
++{
++ kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
++}
++
++
++static void init_once(struct kmem_cache *cachep, void *foo)
++{
++ struct squashfs_inode_info *ei = foo;
++
++ inode_init_once(&ei->vfs_inode);
++}
++
++
++static int __init init_inodecache(void)
++{
++ squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
++ sizeof(struct squashfs_inode_info), 0,
++ SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT, init_once);
++ if (squashfs_inode_cachep == NULL)
++ return -ENOMEM;
++ return 0;
++}
++
++
++static void destroy_inodecache(void)
++{
++ kmem_cache_destroy(squashfs_inode_cachep);
++}
++
++
++module_init(init_squashfs_fs);
++module_exit(exit_squashfs_fs);
++MODULE_DESCRIPTION("squashfs 3.2-r2-CVS, a compressed read-only filesystem");
++MODULE_AUTHOR("Phillip Lougher <phillip@lougher.demon.co.uk>");
++MODULE_LICENSE("GPL");
+diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/Makefile linux-2.6.24-squashfs3.3/fs/squashfs/Makefile
+--- linux-2.6.24/fs/squashfs/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/fs/squashfs/Makefile 2005-11-20 14:31:00.000000000 +0000
+@@ -0,0 +1,7 @@
++#
++# Makefile for the linux squashfs routines.
++#
++
++obj-$(CONFIG_SQUASHFS) += squashfs.o
++squashfs-y += inode.o
++squashfs-y += squashfs2_0.o
+diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/squashfs2_0.c linux-2.6.24-squashfs3.3/fs/squashfs/squashfs2_0.c
+--- linux-2.6.24/fs/squashfs/squashfs2_0.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/fs/squashfs/squashfs2_0.c 2007-10-25 00:43:59.000000000 +0100
+@@ -0,0 +1,740 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Phillip Lougher <phillip@lougher.demon.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs2_0.c
++ */
++
++#include <linux/squashfs_fs.h>
++#include <linux/module.h>
++#include <linux/zlib.h>
++#include <linux/fs.h>
++#include <linux/squashfs_fs_sb.h>
++#include <linux/squashfs_fs_i.h>
++
++#include "squashfs.h"
++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
++static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
++ struct nameidata *);
++
++static struct file_operations squashfs_dir_ops_2 = {
++ .read = generic_read_dir,
++ .readdir = squashfs_readdir_2
++};
++
++static struct inode_operations squashfs_dir_inode_ops_2 = {
++ .lookup = squashfs_lookup_2
++};
++
++static unsigned char squashfs_filetype_table[] = {
++ DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
++};
++
++static int read_fragment_index_table_2(struct super_block *s)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
++ (sblk->fragments), GFP_KERNEL))) {
++ ERROR("Failed to allocate uid/gid table\n");
++ return 0;
++ }
++
++ if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
++ !squashfs_read_data(s, (char *)
++ msblk->fragment_index_2,
++ sblk->fragment_table_start,
++ SQUASHFS_FRAGMENT_INDEX_BYTES_2
++ (sblk->fragments) |
++ SQUASHFS_COMPRESSED_BIT_BLOCK, NULL, SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments))) {
++ ERROR("unable to read fragment index table\n");
++ return 0;
++ }
++
++ if (msblk->swap) {
++ int i;
++ unsigned int fragment;
++
++ for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
++ i++) {
++ SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
++ &msblk->fragment_index_2[i], 1);
++ msblk->fragment_index_2[i] = fragment;
++ }
++ }
++
++ return 1;
++}
++
++
++static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
++ long long *fragment_start_block,
++ unsigned int *fragment_size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ long long start_block =
++ msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
++ int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
++ struct squashfs_fragment_entry_2 fragment_entry;
++
++ if (msblk->swap) {
++ struct squashfs_fragment_entry_2 sfragment_entry;
++
++ if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
++ start_block, offset,
++ sizeof(sfragment_entry), &start_block,
++ &offset))
++ goto out;
++ SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
++ } else
++ if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
++ start_block, offset,
++ sizeof(fragment_entry), &start_block,
++ &offset))
++ goto out;
++
++ *fragment_start_block = fragment_entry.start_block;
++ *fragment_size = fragment_entry.size;
++
++ return 1;
++
++out:
++ return 0;
++}
++
++
++static void squashfs_new_inode(struct squashfs_sb_info *msblk, struct inode *i,
++ struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
++{
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ i->i_ino = ino;
++ i->i_mtime.tv_sec = sblk->mkfs_time;
++ i->i_atime.tv_sec = sblk->mkfs_time;
++ i->i_ctime.tv_sec = sblk->mkfs_time;
++ i->i_uid = msblk->uid[inodeb->uid];
++ i->i_mode = inodeb->mode;
++ i->i_nlink = 1;
++ i->i_size = 0;
++ if (inodeb->guid == SQUASHFS_GUIDS)
++ i->i_gid = i->i_uid;
++ else
++ i->i_gid = msblk->guid[inodeb->guid];
++}
++
++
++static int squashfs_read_inode_2(struct inode *i, squashfs_inode_t inode)
++{
++ struct super_block *s = i->i_sb;
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ unsigned int block = SQUASHFS_INODE_BLK(inode) +
++ sblk->inode_table_start;
++ unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
++ unsigned int ino = SQUASHFS_MK_VFS_INODE(block -
++ sblk->inode_table_start, offset);
++ long long next_block;
++ unsigned int next_offset;
++ union squashfs_inode_header_2 id, sid;
++ struct squashfs_base_inode_header_2 *inodeb = &id.base,
++ *sinodeb = &sid.base;
++
++ TRACE("Entered squashfs_read_inode_2\n");
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
++ offset, sizeof(*sinodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
++ sizeof(*sinodeb));
++ } else
++ if (!squashfs_get_cached_block(s, (char *) inodeb, block,
++ offset, sizeof(*inodeb), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ squashfs_new_inode(msblk, i, inodeb, ino);
++
++ switch(inodeb->inode_type) {
++ case SQUASHFS_FILE_TYPE: {
++ struct squashfs_reg_inode_header_2 *inodep = &id.reg;
++ struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
++ long long frag_blk;
++ unsigned int frag_size = 0;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ frag_blk = SQUASHFS_INVALID_BLK;
++ if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
++ !get_fragment_location_2(s,
++ inodep->fragment, &frag_blk, &frag_size))
++ goto failed_read;
++
++ i->i_size = inodep->file_size;
++ i->i_fop = &generic_ro_fops;
++ i->i_mode |= S_IFREG;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ i->i_blocks = ((i->i_size - 1) >> 9) + 1;
++ SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
++ SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
++ SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->u.s1.block_list_start = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++ i->i_data.a_ops = &squashfs_aops;
++
++ TRACE("File inode %x:%x, start_block %x, "
++ "block_list_start %llx, offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, next_block,
++ next_offset);
++ break;
++ }
++ case SQUASHFS_DIR_TYPE: {
++ struct squashfs_dir_inode_header_2 *inodep = &id.dir;
++ struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops_2;
++ i->i_fop = &squashfs_dir_ops_2;
++ i->i_mode |= S_IFDIR;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count = 0;
++ SQUASHFS_I(i)->u.s2.parent_inode = 0;
++
++ TRACE("Directory inode %x:%x, start_block %x, offset "
++ "%x\n", SQUASHFS_INODE_BLK(inode),
++ offset, inodep->start_block,
++ inodep->offset);
++ break;
++ }
++ case SQUASHFS_LDIR_TYPE: {
++ struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
++ struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ i->i_size = inodep->file_size;
++ i->i_op = &squashfs_dir_inode_ops_2;
++ i->i_fop = &squashfs_dir_ops_2;
++ i->i_mode |= S_IFDIR;
++ i->i_mtime.tv_sec = inodep->mtime;
++ i->i_atime.tv_sec = inodep->mtime;
++ i->i_ctime.tv_sec = inodep->mtime;
++ SQUASHFS_I(i)->start_block = inodep->start_block;
++ SQUASHFS_I(i)->offset = inodep->offset;
++ SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
++ SQUASHFS_I(i)->u.s2.directory_index_offset =
++ next_offset;
++ SQUASHFS_I(i)->u.s2.directory_index_count =
++ inodep->i_count;
++ SQUASHFS_I(i)->u.s2.parent_inode = 0;
++
++ TRACE("Long directory inode %x:%x, start_block %x, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->start_block, inodep->offset);
++ break;
++ }
++ case SQUASHFS_SYMLINK_TYPE: {
++ struct squashfs_symlink_inode_header_2 *inodep =
++ &id.symlink;
++ struct squashfs_symlink_inode_header_2 *sinodep =
++ &sid.symlink;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
++ sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ i->i_size = inodep->symlink_size;
++ i->i_op = &page_symlink_inode_operations;
++ i->i_data.a_ops = &squashfs_symlink_aops;
++ i->i_mode |= S_IFLNK;
++ SQUASHFS_I(i)->start_block = next_block;
++ SQUASHFS_I(i)->offset = next_offset;
++
++ TRACE("Symbolic link inode %x:%x, start_block %llx, "
++ "offset %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ next_block, next_offset);
++ break;
++ }
++ case SQUASHFS_BLKDEV_TYPE:
++ case SQUASHFS_CHRDEV_TYPE: {
++ struct squashfs_dev_inode_header_2 *inodep = &id.dev;
++ struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
++
++ if (msblk->swap) {
++ if (!squashfs_get_cached_block(s, (char *)
++ sinodep, block, offset,
++ sizeof(*sinodep), &next_block,
++ &next_offset))
++ goto failed_read;
++ SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
++ } else
++ if (!squashfs_get_cached_block(s, (char *)
++ inodep, block, offset,
++ sizeof(*inodep), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ i->i_mode |= (inodeb->inode_type ==
++ SQUASHFS_CHRDEV_TYPE) ? S_IFCHR :
++ S_IFBLK;
++ init_special_inode(i, i->i_mode,
++ old_decode_dev(inodep->rdev));
++
++ TRACE("Device inode %x:%x, rdev %x\n",
++ SQUASHFS_INODE_BLK(inode), offset,
++ inodep->rdev);
++ break;
++ }
++ case SQUASHFS_FIFO_TYPE:
++ case SQUASHFS_SOCKET_TYPE: {
++
++ i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
++ ? S_IFIFO : S_IFSOCK;
++ init_special_inode(i, i->i_mode, 0);
++ break;
++ }
++ default:
++ ERROR("Unknown inode type %d in squashfs_iget!\n",
++ inodeb->inode_type);
++ goto failed_read1;
++ }
++
++ return 1;
++
++failed_read:
++ ERROR("Unable to read inode [%x:%x]\n", block, offset);
++
++failed_read1:
++ return 0;
++}
++
++
++static int get_dir_index_using_offset(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ long long f_pos)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index_2 index;
++
++ TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
++ i_count, (unsigned int) f_pos);
++
++ if (f_pos == 0)
++ goto finish;
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index_2 sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) &index,
++ index_start, index_offset,
++ sizeof(index), &index_start,
++ &index_offset);
++
++ if (index.index > f_pos)
++ break;
++
++ squashfs_get_cached_block(s, NULL, index_start, index_offset,
++ index.size + 1, &index_start,
++ &index_offset);
++
++ length = index.index;
++ *next_block = index.start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++
++finish:
++ return length;
++}
++
++
++static int get_dir_index_using_name(struct super_block *s, long long
++ *next_block, unsigned int *next_offset,
++ long long index_start,
++ unsigned int index_offset, int i_count,
++ const char *name, int size)
++{
++ struct squashfs_sb_info *msblk = s->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ int i, length = 0;
++ struct squashfs_dir_index_2 *index;
++ char *str;
++
++ TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
++
++ if (!(str = kmalloc(sizeof(struct squashfs_dir_index) +
++ (SQUASHFS_NAME_LEN + 1) * 2, GFP_KERNEL))) {
++ ERROR("Failed to allocate squashfs_dir_index\n");
++ goto failure;
++ }
++
++ index = (struct squashfs_dir_index_2 *) (str + SQUASHFS_NAME_LEN + 1);
++ strncpy(str, name, size);
++ str[size] = '\0';
++
++ for (i = 0; i < i_count; i++) {
++ if (msblk->swap) {
++ struct squashfs_dir_index_2 sindex;
++ squashfs_get_cached_block(s, (char *) &sindex,
++ index_start, index_offset,
++ sizeof(sindex), &index_start,
++ &index_offset);
++ SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
++ } else
++ squashfs_get_cached_block(s, (char *) index,
++ index_start, index_offset,
++ sizeof(struct squashfs_dir_index_2),
++ &index_start, &index_offset);
++
++ squashfs_get_cached_block(s, index->name, index_start,
++ index_offset, index->size + 1,
++ &index_start, &index_offset);
++
++ index->name[index->size + 1] = '\0';
++
++ if (strcmp(index->name, str) > 0)
++ break;
++
++ length = index->index;
++ *next_block = index->start_block + sblk->directory_table_start;
++ }
++
++ *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
++ kfree(str);
++failure:
++ return length;
++}
++
++
++static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
++{
++ struct inode *i = file->f_dentry->d_inode;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0,
++ dir_count;
++ struct squashfs_dir_header_2 dirh;
++ struct squashfs_dir_entry_2 *dire;
++
++ TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
++
++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) +
++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) {
++ ERROR("Failed to allocate squashfs_dir_entry\n");
++ goto finish;
++ }
++
++ length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count,
++ file->f_pos);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header_2 sdirh;
++
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry_2 sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block, next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block, next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset,
++ dire->size + 1, &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (file->f_pos >= length)
++ continue;
++
++ dire->name[dire->size + 1] = '\0';
++
++ TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
++ (unsigned int) dirent, dire->name,
++ dire->size + 1, (int) file->f_pos,
++ dirh.start_block, dire->offset,
++ squashfs_filetype_table[dire->type]);
++
++ if (filldir(dirent, dire->name, dire->size + 1,
++ file->f_pos, SQUASHFS_MK_VFS_INODE(
++ dirh.start_block, dire->offset),
++ squashfs_filetype_table[dire->type])
++ < 0) {
++ TRACE("Filldir returned less than 0\n");
++ goto finish;
++ }
++ file->f_pos = length;
++ }
++ }
++
++finish:
++ kfree(dire);
++ return 0;
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ kfree(dire);
++ return 0;
++}
++
++
++static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
++ struct nameidata *nd)
++{
++ const unsigned char *name = dentry->d_name.name;
++ int len = dentry->d_name.len;
++ struct inode *inode = NULL;
++ struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
++ struct squashfs_super_block *sblk = &msblk->sblk;
++ long long next_block = SQUASHFS_I(i)->start_block +
++ sblk->directory_table_start;
++ int next_offset = SQUASHFS_I(i)->offset, length = 0,
++ dir_count;
++ struct squashfs_dir_header_2 dirh;
++ struct squashfs_dir_entry_2 *dire;
++ int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
++
++ TRACE("Entered squashfs_lookup_2 [%llx:%x]\n", next_block, next_offset);
++
++ if (!(dire = kmalloc(sizeof(struct squashfs_dir_entry) +
++ SQUASHFS_NAME_LEN + 1, GFP_KERNEL))) {
++ ERROR("Failed to allocate squashfs_dir_entry\n");
++ goto exit_loop;
++ }
++
++ if (len > SQUASHFS_NAME_LEN)
++ goto exit_loop;
++
++ length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_start,
++ SQUASHFS_I(i)->u.s2.directory_index_offset,
++ SQUASHFS_I(i)->u.s2.directory_index_count, name,
++ len);
++
++ while (length < i_size_read(i)) {
++ /* read directory header */
++ if (msblk->swap) {
++ struct squashfs_dir_header_2 sdirh;
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
++ next_block, next_offset, sizeof(sdirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdirh);
++ SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
++ next_block, next_offset, sizeof(dirh),
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += sizeof(dirh);
++ }
++
++ dir_count = dirh.count + 1;
++ while (dir_count--) {
++ if (msblk->swap) {
++ struct squashfs_dir_entry_2 sdire;
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ &sdire, next_block,next_offset,
++ sizeof(sdire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(sdire);
++ SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
++ } else {
++ if (!squashfs_get_cached_block(i->i_sb, (char *)
++ dire, next_block,next_offset,
++ sizeof(*dire), &next_block,
++ &next_offset))
++ goto failed_read;
++
++ length += sizeof(*dire);
++ }
++
++ if (!squashfs_get_cached_block(i->i_sb, dire->name,
++ next_block, next_offset, dire->size + 1,
++ &next_block, &next_offset))
++ goto failed_read;
++
++ length += dire->size + 1;
++
++ if (sorted && name[0] < dire->name[0])
++ goto exit_loop;
++
++ if ((len == dire->size + 1) && !strncmp(name,
++ dire->name, len)) {
++ squashfs_inode_t ino =
++ SQUASHFS_MKINODE(dirh.start_block,
++ dire->offset);
++ unsigned int inode_number = SQUASHFS_MK_VFS_INODE(dirh.start_block,
++ dire->offset);
++
++ TRACE("calling squashfs_iget for directory "
++ "entry %s, inode %x:%x, %lld\n", name,
++ dirh.start_block, dire->offset, ino);
++
++ inode = squashfs_iget(i->i_sb, ino, inode_number);
++
++ goto exit_loop;
++ }
++ }
++ }
++
++exit_loop:
++ kfree(dire);
++ d_add(dentry, inode);
++ return ERR_PTR(0);
++
++failed_read:
++ ERROR("Unable to read directory block [%llx:%x]\n", next_block,
++ next_offset);
++ goto exit_loop;
++}
++
++
++int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
++{
++ struct squashfs_super_block *sblk = &msblk->sblk;
++
++ msblk->read_inode = squashfs_read_inode_2;
++ msblk->read_fragment_index_table = read_fragment_index_table_2;
++
++ sblk->bytes_used = sblk->bytes_used_2;
++ sblk->uid_start = sblk->uid_start_2;
++ sblk->guid_start = sblk->guid_start_2;
++ sblk->inode_table_start = sblk->inode_table_start_2;
++ sblk->directory_table_start = sblk->directory_table_start_2;
++ sblk->fragment_table_start = sblk->fragment_table_start_2;
++
++ return 1;
++}
+diff -x .gitignore -Nurp linux-2.6.24/fs/squashfs/squashfs.h linux-2.6.24-squashfs3.3/fs/squashfs/squashfs.h
+--- linux-2.6.24/fs/squashfs/squashfs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/fs/squashfs/squashfs.h 2007-08-19 04:23:16.000000000 +0100
+@@ -0,0 +1,86 @@
++/*
++ * Squashfs - a compressed read only filesystem for Linux
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Phillip Lougher <phillip@lougher.demon.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs.h
++ */
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++#endif
++
++#ifdef SQUASHFS_TRACE
++#define TRACE(s, args...) printk(KERN_NOTICE "SQUASHFS: "s, ## args)
++#else
++#define TRACE(s, args...) {}
++#endif
++
++#define ERROR(s, args...) printk(KERN_ERR "SQUASHFS error: "s, ## args)
++
++#define SERROR(s, args...) do { \
++ if (!silent) \
++ printk(KERN_ERR "SQUASHFS error: "s, ## args);\
++ } while(0)
++
++#define WARNING(s, args...) printk(KERN_WARNING "SQUASHFS: "s, ## args)
++
++static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
++{
++ return list_entry(inode, struct squashfs_inode_info, vfs_inode);
++}
++
++#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
++#define SQSH_EXTERN
++extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
++ long long index, unsigned int length,
++ long long *next_index, int srclength);
++extern int squashfs_get_cached_block(struct super_block *s, void *buffer,
++ long long block, unsigned int offset,
++ int length, long long *next_block,
++ unsigned int *next_offset);
++extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
++ squashfs_fragment_cache *fragment);
++extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
++ *s, long long start_block,
++ int length);
++extern struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode, unsigned int inode_number);
++extern const struct address_space_operations squashfs_symlink_aops;
++extern const struct address_space_operations squashfs_aops;
++extern struct inode_operations squashfs_dir_inode_ops;
++#else
++#define SQSH_EXTERN static
++#endif
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
++{
++ return 0;
++}
++#endif
++
++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
++#else
++static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
++{
++ return 0;
++}
++#endif
+diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs.h
+--- linux-2.6.24/include/linux/squashfs_fs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs.h 2007-11-01 03:50:57.000000000 +0000
+@@ -0,0 +1,935 @@
++#ifndef SQUASHFS_FS
++#define SQUASHFS_FS
++
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Phillip Lougher <phillip@lougher.demon.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs.h
++ */
++
++#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
++#endif
++
++#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
++#define SQUASHFS_MAJOR 3
++#define SQUASHFS_MINOR 1
++#define SQUASHFS_MAGIC 0x73717368
++#define SQUASHFS_MAGIC_SWAP 0x68737173
++#define SQUASHFS_START 0
++
++/* size of metadata (inode and directory) blocks */
++#define SQUASHFS_METADATA_SIZE 8192
++#define SQUASHFS_METADATA_LOG 13
++
++/* default size of data blocks */
++#define SQUASHFS_FILE_SIZE 131072
++#define SQUASHFS_FILE_LOG 17
++
++#define SQUASHFS_FILE_MAX_SIZE 1048576
++
++/* Max number of uids and gids */
++#define SQUASHFS_UIDS 256
++#define SQUASHFS_GUIDS 255
++
++/* Max length of filename (not 255) */
++#define SQUASHFS_NAME_LEN 256
++
++#define SQUASHFS_INVALID ((long long) 0xffffffffffff)
++#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff)
++#define SQUASHFS_INVALID_BLK ((long long) -1)
++#define SQUASHFS_USED_BLK ((long long) -2)
++
++/* Filesystem flags */
++#define SQUASHFS_NOI 0
++#define SQUASHFS_NOD 1
++#define SQUASHFS_CHECK 2
++#define SQUASHFS_NOF 3
++#define SQUASHFS_NO_FRAG 4
++#define SQUASHFS_ALWAYS_FRAG 5
++#define SQUASHFS_DUPLICATE 6
++#define SQUASHFS_EXPORT 7
++
++#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1)
++
++#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOI)
++
++#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOD)
++
++#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NOF)
++
++#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_NO_FRAG)
++
++#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_ALWAYS_FRAG)
++
++#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_DUPLICATE)
++
++#define SQUASHFS_EXPORTABLE(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_EXPORT)
++
++#define SQUASHFS_CHECK_DATA(flags) SQUASHFS_BIT(flags, \
++ SQUASHFS_CHECK)
++
++#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
++ duplicate_checking, exortable) (noi | (nod << 1) | (check_data << 2) \
++ | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
++ (duplicate_checking << 6) | (exportable << 7))
++
++/* Max number of types and file types */
++#define SQUASHFS_DIR_TYPE 1
++#define SQUASHFS_FILE_TYPE 2
++#define SQUASHFS_SYMLINK_TYPE 3
++#define SQUASHFS_BLKDEV_TYPE 4
++#define SQUASHFS_CHRDEV_TYPE 5
++#define SQUASHFS_FIFO_TYPE 6
++#define SQUASHFS_SOCKET_TYPE 7
++#define SQUASHFS_LDIR_TYPE 8
++#define SQUASHFS_LREG_TYPE 9
++
++/* 1.0 filesystem type definitions */
++#define SQUASHFS_TYPES 5
++#define SQUASHFS_IPC_TYPE 0
++
++/* Flag whether block is compressed or uncompressed, bit is set if block is
++ * uncompressed */
++#define SQUASHFS_COMPRESSED_BIT (1 << 15)
++
++#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
++ (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT)
++
++#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT))
++
++#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24)
++
++#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) ((B) & \
++ ~SQUASHFS_COMPRESSED_BIT_BLOCK)
++
++#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
++
++/*
++ * Inode number ops. Inodes consist of a compressed block number, and an
++ * uncompressed offset within that block
++ */
++#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16))
++
++#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff))
++
++#define SQUASHFS_MKINODE(A, B) ((squashfs_inode_t)(((squashfs_inode_t) (A)\
++ << 16) + (B)))
++
++/* Compute 32 bit VFS inode number from squashfs inode number */
++#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \
++ ((b) >> 2) + 1))
++/* XXX */
++
++/* Translate between VFS mode and squashfs mode */
++#define SQUASHFS_MODE(a) ((a) & 0xfff)
++
++/* fragment and fragment table defines */
++#define SQUASHFS_FRAGMENT_BYTES(A) ((A) * sizeof(struct squashfs_fragment_entry))
++
++#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \
++ SQUASHFS_METADATA_SIZE - 1) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\
++ sizeof(long long))
++
++/* inode lookup table defines */
++#define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(squashfs_inode_t))
++
++#define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \
++ SQUASHFS_METADATA_SIZE - 1) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(A) *\
++ sizeof(long long))
++
++/* cached data constants for filesystem */
++#define SQUASHFS_CACHED_BLKS 8
++
++#define SQUASHFS_MAX_FILE_SIZE_LOG 64
++
++#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \
++ (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
++
++#define SQUASHFS_MARKER_BYTE 0xff
++
++/* meta index cache */
++#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
++#define SQUASHFS_META_ENTRIES 31
++#define SQUASHFS_META_NUMBER 8
++#define SQUASHFS_SLOTS 4
++
++struct meta_entry {
++ long long data_block;
++ unsigned int index_block;
++ unsigned short offset;
++ unsigned short pad;
++};
++
++struct meta_index {
++ unsigned int inode_number;
++ unsigned int offset;
++ unsigned short entries;
++ unsigned short skip;
++ unsigned short locked;
++ unsigned short pad;
++ struct meta_entry meta_entry[SQUASHFS_META_ENTRIES];
++};
++
++
++/*
++ * definitions for structures on disk
++ */
++
++typedef long long squashfs_block_t;
++typedef long long squashfs_inode_t;
++
++struct squashfs_super_block {
++ unsigned int s_magic;
++ unsigned int inodes;
++ unsigned int bytes_used_2;
++ unsigned int uid_start_2;
++ unsigned int guid_start_2;
++ unsigned int inode_table_start_2;
++ unsigned int directory_table_start_2;
++ unsigned int s_major:16;
++ unsigned int s_minor:16;
++ unsigned int block_size_1:16;
++ unsigned int block_log:16;
++ unsigned int flags:8;
++ unsigned int no_uids:8;
++ unsigned int no_guids:8;
++ unsigned int mkfs_time /* time of filesystem creation */;
++ squashfs_inode_t root_inode;
++ unsigned int block_size;
++ unsigned int fragments;
++ unsigned int fragment_table_start_2;
++ long long bytes_used;
++ long long uid_start;
++ long long guid_start;
++ long long inode_table_start;
++ long long directory_table_start;
++ long long fragment_table_start;
++ long long lookup_table_start;
++} __attribute__ ((packed));
++
++struct squashfs_dir_index {
++ unsigned int index;
++ unsigned int start_block;
++ unsigned char size;
++ unsigned char name[0];
++} __attribute__ ((packed));
++
++#define SQUASHFS_BASE_INODE_HEADER \
++ unsigned int inode_type:4; \
++ unsigned int mode:12; \
++ unsigned int uid:8; \
++ unsigned int guid:8; \
++ unsigned int mtime; \
++ unsigned int inode_number;
++
++struct squashfs_base_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ squashfs_block_t start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ unsigned int file_size;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_lreg_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ squashfs_block_t start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ long long file_size;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int start_block;
++ unsigned int parent_inode;
++} __attribute__ ((packed));
++
++struct squashfs_ldir_inode_header {
++ SQUASHFS_BASE_INODE_HEADER;
++ unsigned int nlink;
++ unsigned int file_size:27;
++ unsigned int offset:13;
++ unsigned int start_block;
++ unsigned int i_count:16;
++ unsigned int parent_inode;
++ struct squashfs_dir_index index[0];
++} __attribute__ ((packed));
++
++union squashfs_inode_header {
++ struct squashfs_base_inode_header base;
++ struct squashfs_dev_inode_header dev;
++ struct squashfs_symlink_inode_header symlink;
++ struct squashfs_reg_inode_header reg;
++ struct squashfs_lreg_inode_header lreg;
++ struct squashfs_dir_inode_header dir;
++ struct squashfs_ldir_inode_header ldir;
++ struct squashfs_ipc_inode_header ipc;
++};
++
++struct squashfs_dir_entry {
++ unsigned int offset:13;
++ unsigned int type:3;
++ unsigned int size:8;
++ int inode_number:16;
++ char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_header {
++ unsigned int count:8;
++ unsigned int start_block;
++ unsigned int inode_number;
++} __attribute__ ((packed));
++
++struct squashfs_fragment_entry {
++ long long start_block;
++ unsigned int size;
++ unsigned int pending;
++} __attribute__ ((packed));
++
++extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
++extern int squashfs_uncompress_init(void);
++extern int squashfs_uncompress_exit(void);
++
++/*
++ * macros to convert each packed bitfield structure from little endian to big
++ * endian and vice versa. These are needed when creating or using a filesystem
++ * on a machine with different byte ordering to the target architecture.
++ *
++ */
++
++#define SQUASHFS_SWAP_START \
++ int bits;\
++ int b_pos;\
++ unsigned long long val;\
++ unsigned char *s;\
++ unsigned char *d;
++
++#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
++ SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
++ SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
++ SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
++ SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
++ SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
++ SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
++ SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
++ SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
++ SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
++ SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
++ SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
++ SQUASHFS_SWAP((s)->flags, d, 288, 8);\
++ SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
++ SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
++ SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
++ SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
++ SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
++ SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
++ SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
++ SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
++ SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
++ SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
++ SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
++ SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
++ SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
++ SQUASHFS_SWAP((s)->lookup_table_start, d, 888, 64);\
++}
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
++ SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_ipc_inode_header))\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++}
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_dev_inode_header)); \
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_symlink_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_reg_inode_header));\
++ SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
++ SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 192, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
++}
++
++#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_lreg_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
++ SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 224, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_dir_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 147, 13);\
++ SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
++ SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
++}
++
++#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
++ sizeof(struct squashfs_ldir_inode_header));\
++ SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
++ SQUASHFS_SWAP((s)->offset, d, 155, 13);\
++ SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
++ SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
++ SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
++ SQUASHFS_SWAP((s)->index, d, 0, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
++ SQUASHFS_SWAP((s)->size, d, 64, 8);\
++}
++
++#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
++ SQUASHFS_SWAP((s)->count, d, 0, 8);\
++ SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
++ SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
++ SQUASHFS_SWAP((s)->type, d, 13, 3);\
++ SQUASHFS_SWAP((s)->size, d, 16, 8);\
++ SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
++ SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
++ SQUASHFS_SWAP((s)->size, d, 64, 32);\
++}
++
++#define SQUASHFS_SWAP_INODE_T(s, d) SQUASHFS_SWAP_LONG_LONGS(s, d, 1)
++
++#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 2);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 16)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
++}
++
++#define SQUASHFS_SWAP_INTS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 4);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 32)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
++}
++
++#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * 8);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ 64)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
++}
++
++#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
++ int entry;\
++ int bit_position;\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, n * bits / 8);\
++ for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
++ bits)\
++ SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
++#define SQUASHFS_SWAP_LOOKUP_BLOCKS(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
++
++#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
++
++struct squashfs_base_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int type:4;
++ unsigned int offset:4;
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int mtime;
++ unsigned int start_block;
++ unsigned int file_size:32;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header_1 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:4; /* index into uid table */
++ unsigned int guid:4; /* index into guid table */
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++union squashfs_inode_header_1 {
++ struct squashfs_base_inode_header_1 base;
++ struct squashfs_dev_inode_header_1 dev;
++ struct squashfs_symlink_inode_header_1 symlink;
++ struct squashfs_reg_inode_header_1 reg;
++ struct squashfs_dir_inode_header_1 dir;
++ struct squashfs_ipc_inode_header_1 ipc;
++};
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 4);\
++ SQUASHFS_SWAP((s)->guid, d, 20, 4);
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_ipc_inode_header_1));\
++ SQUASHFS_SWAP((s)->type, d, 24, 4);\
++ SQUASHFS_SWAP((s)->offset, d, 28, 4);\
++}
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_dev_inode_header_1));\
++ SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_symlink_inode_header_1));\
++ SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_reg_inode_header_1));\
++ SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
++ sizeof(struct squashfs_dir_inode_header_1));\
++ SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 43, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
++}
++
++#endif
++
++#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
++
++struct squashfs_dir_index_2 {
++ unsigned int index:27;
++ unsigned int start_block:29;
++ unsigned char size;
++ unsigned char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_base_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_ipc_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++} __attribute__ ((packed));
++
++struct squashfs_dev_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned short rdev;
++} __attribute__ ((packed));
++
++struct squashfs_symlink_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned short symlink_size;
++ char symlink[0];
++} __attribute__ ((packed));
++
++struct squashfs_reg_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int mtime;
++ unsigned int start_block;
++ unsigned int fragment;
++ unsigned int offset;
++ unsigned int file_size:32;
++ unsigned short block_list[0];
++} __attribute__ ((packed));
++
++struct squashfs_dir_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int file_size:19;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++struct squashfs_ldir_inode_header_2 {
++ unsigned int inode_type:4;
++ unsigned int mode:12; /* protection */
++ unsigned int uid:8; /* index into uid table */
++ unsigned int guid:8; /* index into guid table */
++ unsigned int file_size:27;
++ unsigned int offset:13;
++ unsigned int mtime;
++ unsigned int start_block:24;
++ unsigned int i_count:16;
++ struct squashfs_dir_index_2 index[0];
++} __attribute__ ((packed));
++
++union squashfs_inode_header_2 {
++ struct squashfs_base_inode_header_2 base;
++ struct squashfs_dev_inode_header_2 dev;
++ struct squashfs_symlink_inode_header_2 symlink;
++ struct squashfs_reg_inode_header_2 reg;
++ struct squashfs_dir_inode_header_2 dir;
++ struct squashfs_ldir_inode_header_2 ldir;
++ struct squashfs_ipc_inode_header_2 ipc;
++};
++
++struct squashfs_dir_header_2 {
++ unsigned int count:8;
++ unsigned int start_block:24;
++} __attribute__ ((packed));
++
++struct squashfs_dir_entry_2 {
++ unsigned int offset:13;
++ unsigned int type:3;
++ unsigned int size:8;
++ char name[0];
++} __attribute__ ((packed));
++
++struct squashfs_fragment_entry_2 {
++ unsigned int start_block;
++ unsigned int size;
++} __attribute__ ((packed));
++
++#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
++ SQUASHFS_MEMSET(s, d, n);\
++ SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
++ SQUASHFS_SWAP((s)->mode, d, 4, 12);\
++ SQUASHFS_SWAP((s)->uid, d, 16, 8);\
++ SQUASHFS_SWAP((s)->guid, d, 24, 8);\
++
++#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
++}
++
++#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
++ SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
++
++#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_dev_inode_header_2)); \
++ SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
++}
++
++#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_symlink_inode_header_2));\
++ SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
++}
++
++#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_reg_inode_header_2));\
++ SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
++ SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
++ SQUASHFS_SWAP((s)->offset, d, 128, 32);\
++ SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
++}
++
++#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_dir_inode_header_2));\
++ SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
++ SQUASHFS_SWAP((s)->offset, d, 51, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
++}
++
++#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
++ sizeof(struct squashfs_ldir_inode_header_2));\
++ SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
++ SQUASHFS_SWAP((s)->offset, d, 59, 13);\
++ SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
++ SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
++ SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
++}
++
++#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
++ SQUASHFS_SWAP((s)->index, d, 0, 27);\
++ SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
++ SQUASHFS_SWAP((s)->size, d, 56, 8);\
++}
++#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
++ SQUASHFS_SWAP((s)->count, d, 0, 8);\
++ SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
++}
++
++#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
++ SQUASHFS_SWAP((s)->offset, d, 0, 13);\
++ SQUASHFS_SWAP((s)->type, d, 13, 3);\
++ SQUASHFS_SWAP((s)->size, d, 16, 8);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
++ SQUASHFS_SWAP_START\
++ SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
++ SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
++ SQUASHFS_SWAP((s)->size, d, 32, 32);\
++}
++
++#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
++
++/* fragment and fragment table defines */
++#define SQUASHFS_FRAGMENT_BYTES_2(A) (A * sizeof(struct squashfs_fragment_entry_2))
++
++#define SQUASHFS_FRAGMENT_INDEX_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A) (SQUASHFS_FRAGMENT_BYTES_2(A) % \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEXES_2(A) ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
++ SQUASHFS_METADATA_SIZE - 1) / \
++ SQUASHFS_METADATA_SIZE)
++
++#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A) (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
++ sizeof(int))
++
++#endif
++
++#ifdef __KERNEL__
++
++/*
++ * macros used to swap each structure entry, taking into account
++ * bitfields and different bitfield placing conventions on differing
++ * architectures
++ */
++
++#include <asm/byteorder.h>
++
++#ifdef __BIG_ENDIAN
++ /* convert from little endian to big endian */
++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
++ tbits, b_pos)
++#else
++ /* convert from big endian to little endian */
++#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
++ tbits, 64 - tbits - b_pos)
++#endif
++
++#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
++ b_pos = pos % 8;\
++ val = 0;\
++ s = (unsigned char *)p + (pos / 8);\
++ d = ((unsigned char *) &val) + 7;\
++ for(bits = 0; bits < (tbits + b_pos); bits += 8) \
++ *d-- = *s++;\
++ value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
++}
++
++#define SQUASHFS_MEMSET(s, d, n) memset(s, 0, n);
++
++#endif
++#endif
+diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs_i.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_i.h
+--- linux-2.6.24/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_i.h 2007-08-19 04:24:08.000000000 +0100
+@@ -0,0 +1,45 @@
++#ifndef SQUASHFS_FS_I
++#define SQUASHFS_FS_I
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Phillip Lougher <phillip@lougher.demon.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs_i.h
++ */
++
++struct squashfs_inode_info {
++ long long start_block;
++ unsigned int offset;
++ union {
++ struct {
++ long long fragment_start_block;
++ unsigned int fragment_size;
++ unsigned int fragment_offset;
++ long long block_list_start;
++ } s1;
++ struct {
++ long long directory_index_start;
++ unsigned int directory_index_offset;
++ unsigned int directory_index_count;
++ unsigned int parent_inode;
++ } s2;
++ } u;
++ struct inode vfs_inode;
++};
++#endif
+diff -x .gitignore -Nurp linux-2.6.24/include/linux/squashfs_fs_sb.h linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_sb.h
+--- linux-2.6.24/include/linux/squashfs_fs_sb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.24-squashfs3.3/include/linux/squashfs_fs_sb.h 2007-08-19 04:24:26.000000000 +0100
+@@ -0,0 +1,76 @@
++#ifndef SQUASHFS_FS_SB
++#define SQUASHFS_FS_SB
++/*
++ * Squashfs
++ *
++ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007
++ * Phillip Lougher <phillip@lougher.demon.co.uk>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2,
++ * or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * squashfs_fs_sb.h
++ */
++
++#include <linux/squashfs_fs.h>
++
++struct squashfs_cache {
++ long long block;
++ int length;
++ long long next_index;
++ char *data;
++};
++
++struct squashfs_fragment_cache {
++ long long block;
++ int length;
++ unsigned int locked;
++ char *data;
++};
++
++struct squashfs_sb_info {
++ struct squashfs_super_block sblk;
++ int devblksize;
++ int devblksize_log2;
++ int swap;
++ struct squashfs_cache *block_cache;
++ struct squashfs_fragment_cache *fragment;
++ int next_cache;
++ int next_fragment;
++ int next_meta_index;
++ unsigned int *uid;
++ unsigned int *guid;
++ long long *fragment_index;
++ unsigned int *fragment_index_2;
++ char *read_page;
++ struct mutex read_data_mutex;
++ struct mutex read_page_mutex;
++ struct mutex block_cache_mutex;
++ struct mutex fragment_mutex;
++ struct mutex meta_index_mutex;
++ wait_queue_head_t waitq;
++ wait_queue_head_t fragment_wait_queue;
++ struct meta_index *meta_index;
++ z_stream stream;
++ long long *inode_lookup_table;
++ int unused_cache_blks;
++ int unused_frag_blks;
++ int (*read_inode)(struct inode *i, squashfs_inode_t \
++ inode);
++ long long (*read_blocklist)(struct inode *inode, int \
++ index, int readahead_blks, char *block_list, \
++ unsigned short **block_p, unsigned int *bsize);
++ int (*read_fragment_index_table)(struct super_block *s);
++};
++#endif
+diff -x .gitignore -Nurp linux-2.6.24/init/do_mounts_rd.c linux-2.6.24-squashfs3.3/init/do_mounts_rd.c
+--- linux-2.6.24/init/do_mounts_rd.c 2007-10-25 17:41:49.000000000 +0100
++++ linux-2.6.24-squashfs3.3/init/do_mounts_rd.c 2007-11-01 05:06:25.000000000 +0000
+@@ -5,6 +5,7 @@
+ #include <linux/ext2_fs.h>
+ #include <linux/romfs_fs.h>
+ #include <linux/cramfs_fs.h>
++#include <linux/squashfs_fs.h>
+ #include <linux/initrd.h>
+ #include <linux/string.h>
+
+@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
+ * numbers could not be found.
+ *
+ * We currently check for the following magic numbers:
++ * squashfs
+ * minix
+ * ext2
+ * romfs
+@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
+ struct ext2_super_block *ext2sb;
+ struct romfs_super_block *romfsb;
+ struct cramfs_super *cramfsb;
++ struct squashfs_super_block *squashfsb;
+ int nblocks = -1;
+ unsigned char *buf;
+
+@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
+ ext2sb = (struct ext2_super_block *) buf;
+ romfsb = (struct romfs_super_block *) buf;
+ cramfsb = (struct cramfs_super *) buf;
++ squashfsb = (struct squashfs_super_block *) buf;
+ memset(buf, 0xe5, size);
+
+ /*
+@@ -101,6 +105,18 @@ identify_ramdisk_image(int fd, int start
+ goto done;
+ }
+
++ /* squashfs is at block zero too */
++ if (squashfsb->s_magic == SQUASHFS_MAGIC) {
++ printk(KERN_NOTICE
++ "RAMDISK: squashfs filesystem found at block %d\n",
++ start_block);
++ if (squashfsb->s_major < 3)
++ nblocks = (squashfsb->bytes_used_2+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
++ else
++ nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
++ goto done;
++ }
++
+ /*
+ * Read block 1 to test for minix and ext2 superblock
+ */
diff --git a/packages/linux/linux-rp-2.6.24/versatile-armv6.patch b/packages/linux/linux-rp-2.6.24/versatile-armv6.patch
new file mode 100644
index 0000000000..e2d0060ac3
--- /dev/null
+++ b/packages/linux/linux-rp-2.6.24/versatile-armv6.patch
@@ -0,0 +1,19 @@
+---
+ arch/arm/mm/Kconfig | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- linux-2.6.23.orig/arch/arm/mm/Kconfig
++++ linux-2.6.23/arch/arm/mm/Kconfig
+@@ -343,11 +343,11 @@ config CPU_XSC3
+ select IO_36
+
+ # ARMv6
+ config CPU_V6
+ bool "Support ARM V6 processor"
+- depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3
++ depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_VERSATILE_PB
+ default y if ARCH_MX3
+ select CPU_32v6
+ select CPU_ABRT_EV6
+ select CPU_CACHE_V6
+ select CPU_CACHE_VIPT
diff --git a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/zylonite-boot.patch b/packages/linux/linux-rp-2.6.24/zylonite-boot.patch
index f41928eca5..f41928eca5 100644
--- a/packages/linux/linux-rp-2.6.23+2.6.24-rc0+git/zylonite-boot.patch
+++ b/packages/linux/linux-rp-2.6.24/zylonite-boot.patch
diff --git a/packages/linux/linux-rp.inc b/packages/linux/linux-rp.inc
index 0f81bd4221..e823839afd 100644
--- a/packages/linux/linux-rp.inc
+++ b/packages/linux/linux-rp.inc
@@ -4,7 +4,7 @@ LICENSE = "GPL"
inherit kernel
-DEPENDS_collie += "bc-native"
+DEPENDS_append_collie = " bc-native"
RPROVIDES_kernel-base += "hostap-modules"
DOSRC = "http://www.do13.de/openzaurus/patches"
@@ -34,8 +34,8 @@ CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",
##############################################################
# Configure memory/ramdisk split for collie
#
-export mem = '${@bb.data.getVar("COLLIE_MEMORY_SIZE",d,1) or "32"}'
-export rd = '${@bb.data.getVar("COLLIE_RAMDISK_SIZE",d,1) or "32"}'
+export mem = '${@bb.data.getVar("COLLIE_MEMORY_SIZE",d,1) or "64"}'
+export rd = '${@bb.data.getVar("COLLIE_RAMDISK_SIZE",d,1) or "0"}'
CMDLINE_MEM_collie = "mem=${mem}M"
CMDLINE_ROTATE_spitz = "fbcon=rotate:1"
@@ -56,8 +56,15 @@ module_autoload_snd-soc-corgi_c7x0 = "snd-soc-corgi"
module_autoload_snd-soc-spitz_akita = "snd-soc-spitz"
module_autoload_snd-soc-spitz_spitz = "snd-soc-spitz"
module_autoload_snd-soc-poodle_poodle = "snd-soc-poodle"
+
module_autoload_locomo-spi_collie = "locomo-spi"
module_autoload_mmc_block_collie = "mmc_block"
+module_autoload_locomokbd_collie = "locomokbd"
+module_autoload_sa1100-cs_collie = "sa1100_cs"
+module_autoload_collie-ts_collie = "collie-ts"
+module_autoload_leds-locomo_collie = "leds-locomo"
+module_autoload_unix_collie = "unix"
+
do_configure() {
rm -f ${S}/.config
@@ -135,30 +142,6 @@ do_configure() {
yes '' | oe_runmake oldconfig
}
-# Check the kernel is below the 1264*1024 byte limit for the PXA Zaurii
-do_compile_append() {
- case ${MACHINE} in
- c7x0 | akita | poodle | spitz | tosa )
- size=`ls -l arch/${ARCH}/boot/${KERNEL_IMAGETYPE} | awk '{ print $5}'`
- if [ $size -ge 1294336 ]; then
- rm arch/${ARCH}/boot/${KERNEL_IMAGETYPE}
- echo "Size is $size"
- die "This kernel is too big for your PXA Zaurus and will destroy data if you flash it. Please reduce the size of the kernel by making more of it modular."
- fi
- ;;
- collie )
- size=`ls -l arch/${ARCH}/boot/${KERNEL_IMAGETYPE} | awk '{ print $5}'`
- if [ $size -ge 1048576 ]; then
- rm arch/${ARCH}/boot/${KERNEL_IMAGETYPE}
- echo "Size is $size"
- die "This kernel is too big for your Collie and will not be flashed. Please reduce the size of the kernel by making more of it modular."
- fi
- ;;
- *)
- ;;
- esac
-}
-
do_deploy() {
install -d ${DEPLOY_DIR_IMAGE}
install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_DEPLOY_NAME}
diff --git a/packages/linux/linux-rp_2.6.16.bb b/packages/linux/linux-rp_2.6.16.bb
deleted file mode 100644
index e49e9e2366..0000000000
--- a/packages/linux/linux-rp_2.6.16.bb
+++ /dev/null
@@ -1,156 +0,0 @@
-require linux-rp.inc
-
-PR = "r48"
-
-# Handy URLs
-# git://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git \
-# http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 \
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.15-rc1.bz2;patch=1 \
-# http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.15-rc2-git1.bz2;patch=1 \
-# http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1 \
-# http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1 \
-
-# Patches submitted upstream are towards top of this list
-# Hacks should clearly named and at the bottom
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.16.tar.bz2 \
- file://rmk-mmc1.patch;patch=1;status=merged \
- file://rmk-mmc2.patch;patch=1;status=merged \
- ${RPSRC}/led_core-r15.patch;patch=1;status=merged \
- ${RPSRC}/led_triggers-r14.patch;patch=1;status=merged \
- ${RPSRC}/led_trig_timer-r8.patch;patch=1;status=merged \
- ${RPSRC}/led_trig_sharpsl_pm-r5.patch;patch=1;status=merged \
- ${RPSRC}/led_zaurus-r10.patch;patch=1;status=merged \
- ${RPSRC}/led_locomo-r7.patch;patch=1;status=merged \
- ${RPSRC}/led_ixp4xx-r2.patch;patch=1;status=merged \
- ${RPSRC}/led_tosa-r5.patch;patch=1;status=merged \
- ${RPSRC}/led_ide-r6.patch;patch=1;status=merged \
- ${RPSRC}/led_nand-r3.patch;patch=1;status=merged \
- ${RPSRC}/ide_end_request-r1.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-library-functions.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-arm-cleanup-r1.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-class.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-class-fix.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-class-fix-2.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-i2c-cleanup-r1.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-sysfs-interface.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-proc-interface.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-dev-interface.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-x1205-driver.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-test-device-driver.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-ds1672-driver.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-pcf8563-driver.patch;patch=1;status=merged \
- ${RPSRC}/rtc-subsystem-rs5c372-driver.patch;patch=1;status=merged \
- ${RPSRC}/rtc_class_pxa-r2.patch;patch=1;status=merged \
- ${RPSRC}/rmk_pxa_mmc_timeout-r0.patch;patch=1;status=merged \
- ${RPSRC}/integrator_rtc-r0.patch;patch=1;status=merged \
- ${RPSRC}/zaurus_keyboard_tweak-r3.patch;patch=1;status=merged \
- ${RPSRC}/arm_eabi_enum_fix-r0.patch;patch=1;status=merged \
- ${RPSRC}/pxafb_tweaks-r0.patch;patch=1;status=merged \
- ${RPSRC}/spitz_kbd_fix-r0.patch;patch=1;status=merged \
- ${RPSRC}/fbmem_fix-r1.patch;patch=1;status=merged \
- ${RPSRC}/scoop_linkage-r0.patch;patch=1;status=merged \
- ${RPSRC}/ssp_cleanup-r0.patch;patch=1;status=merged \
- ${RPSRC}/misc_fix1-r0.patch;patch=1;status=merged \
- ${RPSRC}/corgi_bl_cleanup-r3.patch;patch=1;status=merged \
- ${RPSRC}/corgi_bl_generic-r3.patch;patch=1;status=merged \
- ${RPSRC}/w100_accel1-r0.patch;patch=1;status=merged \
- ${RPSRC}/poodle_memsize-r0.patch;patch=1;status=merged \
- ${RPSRC}/led_class_kconfig-r0.patch;patch=1;status=merged \
- ${RPSRC}/led_maintainer-r0.patch;patch=1;status=merged \
- ${RPSRC}/led_sysfs_fix-r0.patch;patch=1;status=merged \
- ${RPSRC}/backlight_sysfs_fix-r0.patch;patch=1;status=merged \
- ${RPSRC}/pxaohci_pwrlimit-r0.patch;patch=1;status=merged \
- ${RPSRC}/mmc_oops_fix-r1.patch;patch=1;status=merged \
- ${RPSRC}/zlib_inflate-r3.patch;patch=1;status=merged \
- ${RPSRC}/logo_rotate_fix-r1.patch;patch=1;status=merged \
- ${RPSRC}/poodle_partsize-r0.patch;patch=1;status=merged \
- ${RPSRC}/jffs2_longfilename-r1.patch;patch=1;status=merged \
- file://00-hostap.patch;patch=1;status=merged \
- file://10-pcnet.patch;patch=1;status=merged \
- ${RPSRC}/alsa/asoc-v0.10rc4.patch;patch=1 \
- file://maxpower-message.patch;patch=1;status=backported \
- ${RPSRC}/asoc_fixups-r0.patch;patch=1 \
- ${RPSRC}/hx2750_base-r24.patch;patch=1 \
- ${RPSRC}/hx2750_bl-r5.patch;patch=1 \
- ${RPSRC}/hx2750_pcmcia-r2.patch;patch=1 \
- ${RPSRC}/pxa_keys-r5.patch;patch=1 \
- ${RPSRC}/tsc2101-r12.patch;patch=1 \
- ${RPSRC}/hx2750_test1-r3.patch;patch=1 \
- ${RPSRC}/pxa_timerfix-r0.patch;patch=1 \
- ${RPSRC}/input_power-r4.patch;patch=1 \
- ${RPSRC}/pxa25x_cpufreq-r0.patch;patch=1 \
- ${RPSRC}/collie_frontlight-r1.patch;patch=1;status=merged \
- ${RPSRC}/zaurus_reboot-r0.patch;patch=1;status=merged \
- ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \
- ${RPSRC}/pm_changes-r1.patch;patch=1 \
- ${RPSRC}/sharpsl_pm-do-r2.patch;patch=1;status=merged \
- ${RPSRC}/usb_pxa27x_udc-r0.patch;patch=1 \
- ${RPSRC}/usb_add_epalloc-r1.patch;patch=1 \
- ${RPSRC}/kexec-arm-r2a.patch;patch=1 \
- file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
- file://hrw-pcmcia-ids-r5.patch;patch=1 \
- file://locomo-kbd-hotkeys.patch;patch=1 \
- file://locomo-sysrq+keyrepeat.patch;patch=1 \
- file://locomo-lcd-def-bightness.patch;patch=1 \
- ${RPSRC}/logo_oh-r0.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
- file://add-oz-release-string.patch;patch=1;status=unmergable \
- ${RPSRC}/mmcsd_large_cards-r0.patch;patch=1;status=hack \
- ${RPSRC}/mmcsd_no_scr_check-r0.patch;patch=1;status=hack \
- ${RPSRC}/integrator_rgb-r0.patch;patch=1;status=hack \
- ${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
- ${RPSRC}/poodle_ts_hack-r0.patch;patch=1;status=hack \
- file://pxa-serial-hack.patch;patch=1;status=hack \
- file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
- file://squashfs3.0-2.6.15.patch;patch=1;status=external \
- file://defconfig-c7x0 \
- file://defconfig-hx2000 \
- file://defconfig-collie \
- file://defconfig-poodle \
- file://defconfig-akita \
- file://defconfig-spitz \
- file://defconfig-qemuarm \
- file://defconfig-tosa "
-
-# Add this to enable pm debug code (useful with a serial lead)
-# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
-
-# Disabled until I find the reason this gives issues with cdc_subset
-# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \
-
-# These patches would really help collie/poodle but we
-# need someone to maintain them
-# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1
-# (Pavel Machek's git tree has updated versions of this?)
-# Also parts were recently committed to mainline by rmk (drivers/mfd/)
-# ${JLSRC}/zaurus-base-2.6.11.diff.gz;patch=1
-# (This is mostly in mainline now?)
-# ${JLSRC}/zaurus-local-2.6.11.diff.gz;patch=1 \
-# ${JLSRC}/zaurus-leds-2.6.11.diff.gz;patch=1 \
-
-SRC_URI_append_tosa = "\
- ${CHSRC}/usb-ohci-hooks-r1.patch;patch=1 \
- ${CHSRC}/tmio-core-r4.patch;patch=1 \
- ${CHSRC}/tmio-tc6393-r5.patch;patch=1 \
- ${CHSRC}/tmio-nand-r5.patch;patch=1 \
- ${CHSRC}/tmio-ohci-r3.patch;patch=1 \
- ${CHSRC}/tmio-fb-r6.patch;patch=1 \
- ${DOSRC}/tosa-keyboard-r14.patch;patch=1 \
- ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
- ${DOSRC}/tosa-tmio-r6.patch;patch=1 \
- ${DOSRC}/tosa-power-r15.patch;patch=1 \
- ${DOSRC}/tosa-tmio-lcd-r7.patch;patch=1 \
- ${DOSRC}/tosa-bluetooth-r6.patch;patch=1 \
- ${DOSRC}/wm97xx-lg7-r0.patch;patch=1 \
- ${DOSRC}/wm9712-suspend-cold-res-r0.patch;patch=1 \
- ${DOSRC}/sharpsl-pm-postresume-r0.patch;patch=1 \
- ${DOSRC}/wm97xx-dig-restore-r0.patch;patch=1 \
- ${DOSRC}/wm97xx-miscdevs-resume-r0.patch;patch=1 \
- ${DOSRC}/wm9712-reset-loop-r0.patch;patch=1 \
- ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
-
-SRC_URI_append_poodle = "\
- ${RPSRC}/rp_poodle_hacks-r0.patch;patch=1"
-
-S = "${WORKDIR}/linux-2.6.16"
diff --git a/packages/linux/linux-rp_2.6.17.bb b/packages/linux/linux-rp_2.6.17.bb
deleted file mode 100644
index de898b3f11..0000000000
--- a/packages/linux/linux-rp_2.6.17.bb
+++ /dev/null
@@ -1,127 +0,0 @@
-require linux-rp.inc
-
-PR = "r38"
-
-DEFAULT_PREFERENCE_poodle = "99"
-
-# Handy URLs
-# git://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git \
-# http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 \
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.15-rc1.bz2;patch=1 \
-# http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.15-rc2-git1.bz2;patch=1 \
-# http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1 \
-# http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1 \
-
-# Patches submitted upstream are towards top of this list
-# Hacks should clearly named and at the bottom
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.17.tar.bz2 \
- ${RPSRC}/poodle_partsize-r0.patch;patch=1;status=merged \
- ${RPSRC}/jffs2_longfilename-r1.patch;patch=1;status=merged \
- ${RPSRC}/locomo_led_default_trigger-r0.patch;patch=1;status=merged \
- ${RPSRC}/zaurus_reboot-r3.patch;patch=1;status=merged \
- ${RPSRC}/poodle_mmcsd_fix-r0.patch;patch=1;status=merged \
- ${RPSRC}/poodle_ssp-r1.patch;patch=1;status=merged \
- ${RPSRC}/sharpsl_pm-do-r2.patch;patch=1;status=merged \
- ${RPSRC}/zlib_inflate-r3.patch;patch=1;status=merged \
- ${RPSRC}/logo_rotate_fix-r1.patch;patch=1;status=merged \
- ${RPSRC}/collie_frontlight-r6.patch;patch=1;status=merged \
- ${RPSRC}/input_modalias_fix-r0.patch;patch=1;status=merged \
- ${RPSRC}/spectrumcs_fix-r0.patch;patch=1 \
- file://00-hostap.patch;patch=1;status=merged \
- file://10-pcnet.patch;patch=1;status=merged \
- file://asoc-v0.12.4_2.6.17.patch;patch=1 \
- ${RPSRC}/hx2750_base-r27.patch;patch=1 \
- ${RPSRC}/hx2750_bl-r7.patch;patch=1 \
- ${RPSRC}/hx2750_pcmcia-r2.patch;patch=1 \
- ${RPSRC}/pxa_keys-r5.patch;patch=1 \
- ${RPSRC}/tsc2101-r12.patch;patch=1 \
- ${RPSRC}/hx2750_test1-r4.patch;patch=1 \
- ${RPSRC}/pxa_timerfix-r0.patch;patch=1 \
- ${RPSRC}/input_power-r5.patch;patch=1 \
- ${RPSRC}/pxa25x_cpufreq-r0.patch;patch=1 \
- ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \
- ${RPSRC}/pm_changes-r1.patch;patch=1 \
- ${RPSRC}/usb_pxa27x_udc-r0.patch;patch=1 \
- ${RPSRC}/usb_add_epalloc-r1.patch;patch=1 \
- ${RPSRC}/kexec-arm-r3a.patch;patch=1 \
- ${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \
- ${RPSRC}/poodle_pm-r3.patch;patch=1 \
- ${RPSRC}/pxafb_changeres-r0.patch;patch=1 \
- ${RPSRC}/poodle_audio-r7.patch;patch=1 \
- ${RPSRC}/pxa27x_overlay-r2.patch;patch=1 \
- ${RPSRC}/w100_extaccel-r0.patch;patch=1 \
- ${RPSRC}/xscale_cache_workaround-r1.patch;patch=1 \
- file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
- file://hrw-pcmcia-ids-r5.patch;patch=1 \
- ${RPSRC}/logo_oh-r0.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
- file://add-oz-release-string.patch;patch=1;status=unmergable \
- ${RPSRC}/mmcsd_large_cards-r0.patch;patch=1;status=hack \
- ${RPSRC}/mmcsd_no_scr_check-r0.patch;patch=1;status=hack \
- ${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \
- ${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
- file://pxa-serial-hack.patch;patch=1;status=hack \
- file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
- file://orinoco-remove-all-which-are-in-hostap-HACK.patch;patch=1;status=unmergable-hack \
- file://squashfs3.0-2.6.15.patch;patch=1;status=external \
- file://vesafb-tng-1.0-rc2-git-20060629.patch;patch=1;status=external \
- file://defconfig-c7x0 \
- file://defconfig-hx2000 \
- file://defconfig-collie \
- file://defconfig-poodle \
- file://defconfig-akita \
- file://defconfig-spitz \
- file://defconfig-qemuarm \
- file://defconfig-qemux86 \
- file://defconfig-tosa "
-
-# Add this to enable pm debug code (useful with a serial lead)
-# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
-
-# Disabled until I find the reason this gives issues with cdc_subset
-# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \
-
-# http://tglx.de/projects/armirq/2.6.17-rc3/patch-2.6.17-rc3-armirq4.patch;patch=1 \
-# ${RPSRC}/../pxa27x_overlay-r0.patch;patch=1 \
-
-# Is anything out of this still needed? Parts were commited to mainline by rmk (drivers/mfd/)
-# (Pavel Machek's git tree has updated versions of this?)
-# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1
-
-# These patches are extracted from Pavel Machek's git tree
-# (diff against vanilla kernel)
-SRC_URI_append_collie = "\
- ${DOSRC}/collie/mtd-sharp-flash-hack-r0.patch;patch=1 \
- ${DOSRC}/collie/collie-r0.patch;patch=1 \
- ${DOSRC}/collie/locomolcd-backlight-r0.patch;patch=1 \
- ${DOSRC}/collie/ucb1x00-touch-audio-r0.patch;patch=1 \
- ${DOSRC}/collie/collie-mcp-r0.patch;patch=1 \
- ${DOSRC}/collie/sa1100-udc-r0.patch;patch=1 \
-# ${DOSRC}/collie/collie-pm-r1.patch;patch=1 \
- "
-
-SRC_URI_append_tosa = "\
- ${CHSRC}/usb-ohci-hooks-r1.patch;patch=1 \
- ${CHSRC}/tmio-core-r4.patch;patch=1 \
- ${DOSRC}/temp/tmio-tc6393-r6.patch;patch=1 \
- ${CHSRC}/tmio-nand-r5.patch;patch=1 \
- ${DOSRC}/temp/tmio-ohci-r4.patch;patch=1 \
- ${CHSRC}/tmio-fb-r6.patch;patch=1 \
- ${DOSRC}/tosa-keyboard-r17.patch;patch=1 \
- ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
- ${DOSRC}/tosa-tmio-r6.patch;patch=1 \
- ${DOSRC}/tosa-power-r17.patch;patch=1 \
- ${DOSRC}/tosa-tmio-lcd-r8.patch;patch=1 \
- ${DOSRC}/tosa-bluetooth-r8.patch;patch=1 \
- ${DOSRC}/wm97xx-lg7-r0.patch;patch=1 \
- file://wm9712-suspend-cold-res-r2.patch;patch=1 \
- ${DOSRC}/sharpsl-pm-postresume-r0.patch;patch=1 \
- ${DOSRC}/wm97xx-dig-restore-r0.patch;patch=1 \
- ${DOSRC}/wm97xx-miscdevs-resume-r0.patch;patch=1 \
- file://wm9712-reset-loop-r2.patch;patch=1 \
- file://tosa-lcdnoise-r0.patch;patch=1 \
- file://wm97xx-lcdnoise-r0.patch;patch=1 "
-# ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
-
-S = "${WORKDIR}/linux-2.6.17"
diff --git a/packages/linux/linux-rp_2.6.19+git.bb b/packages/linux/linux-rp_2.6.19+git.bb
deleted file mode 100644
index 4a71e86e91..0000000000
--- a/packages/linux/linux-rp_2.6.19+git.bb
+++ /dev/null
@@ -1,106 +0,0 @@
-require linux-rp.inc
-
-PR = "r5"
-
-DEFAULT_PREFERENCE = "-1"
-#up the default pref for the hx2000 machine, since this is the only working kernel for it present in .dev
-DEFAULT_PREFERENCE_hx2000 = "1"
-
-# Handy URLs
-# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
-# http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1
-
-# Patches submitted upstream are towards top of this list
-# Hacks should clearly named and at the bottom
-SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=v2.6.20-rc4 \
- http://opensource.wolfsonmicro.com/~lg/asoc/asoc-v0.13pre1.patch;patch=1;status=merged \
- ${RPSRC}/asoc_13pre1_fix-r0.patch;patch=1 \
- ${RPSRC}/hx2750_base-r28.patch;patch=1 \
- ${RPSRC}/hx2750_bl-r8.patch;patch=1 \
- ${RPSRC}/hx2750_pcmcia-r2.patch;patch=1 \
- ${RPSRC}/pxa_keys-r7.patch;patch=1 \
- ${RPSRC}/tsc2101-r16.patch;patch=1 \
- ${RPSRC}/hx2750_test1-r6.patch;patch=1 \
- ${RPSRC}/pxa_timerfix-r0.patch;patch=1 \
- ${RPSRC}/input_power-r6.patch;patch=1 \
- ${RPSRC}/pxa25x_cpufreq-r2.patch;patch=1 \
- ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \
- ${RPSRC}/pm_changes-r1.patch;patch=1 \
- ${RPSRC}/usb_add_epalloc-r3.patch;patch=1 \
- ${RPSRC}/usb_pxa27x_udc-r3.patch;patch=1 \
- ${RPSRC}/kexec-arm-r4a.patch;patch=1 \
- ${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \
- ${RPSRC}/poodle_pm-r3.patch;patch=1 \
- ${RPSRC}/pxa27x_overlay-r5.patch;patch=1 \
- ${RPSRC}/w100_extaccel-r0.patch;patch=1 \
- file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
- ${RPSRC}/logo_oh-r0.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
- ${RPSRC}/mmcsd_large_cards-r0.patch;patch=1;status=hack \
- ${RPSRC}/mmcsd_no_scr_check-r0.patch;patch=1;status=hack \
- ${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \
- ${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
- file://pxa-serial-hack.patch;patch=1;status=hack \
- file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
- file://squashfs3.0-2.6.15.patch;patch=1;status=external \
- file://defconfig-c7x0 \
- file://defconfig-hx2000 \
- file://defconfig-collie \
- file://defconfig-poodle \
- file://defconfig-akita \
- file://defconfig-spitz \
- file://defconfig-qemuarm \
- file://defconfig-qemux86 \
- file://defconfig-tosa "
-
-# Add this to enable pm debug code (useful with a serial lead)
-# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
-
-# Disabled until I find the reason this gives issues with cdc_subset
-# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \
-
-# Is anything out of this still needed? Parts were commited to mainline by rmk (drivers/mfd/)
-# (Pavel Machek's git tree has updated versions of this?)
-# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1
-
-# These patches are extracted from Pavel Machek's git tree
-# (diff against vanilla kernel)
-SRC_URI_append_collie = "\
- ${DOSRC}/collie/mtd-sharp-flash-hack-r0.patch;patch=1 \
- ${DOSRC}/collie/collie-r0.patch;patch=1 \
- ${DOSRC}/collie/locomolcd-backlight-r0.patch;patch=1 \
- ${DOSRC}/collie/ucb1x00-touch-audio-r0.patch;patch=1 \
- file://collie-mcp-r1.patch;patch=1 \
- ${DOSRC}/collie/sa1100-udc-r0.patch;patch=1 \
-# ${DOSRC}/collie/collie-pm-r1.patch;patch=1 \
-"
-
-SRC_URI_append_tosa = "\
- ${CHSRC}/usb-ohci-hooks-r1.patch;patch=1 \
- ${CHSRC}/tmio-core-r4.patch;patch=1 \
- file://tmio-tc6393-r8.patch;patch=1 \
- file://tmio-nand-r7.patch;patch=1 \
- file://tmio-ohci-r6.patch;patch=1 \
- ${CHSRC}/tmio-fb-r6.patch;patch=1 \
- file://tosa-keyboard-r18.patch;patch=1 \
- ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
- ${DOSRC}/tosa-tmio-r6.patch;patch=1 \
- ${DOSRC}/tosa-power-r17.patch;patch=1 \
- file://tosa-tmio-lcd-r10.patch;patch=1 \
- ${DOSRC}/tosa-bluetooth-r8.patch;patch=1 \
- ${DOSRC}/wm97xx-lg7-r0.patch;patch=1 \
- file://wm9712-suspend-cold-res-r2.patch;patch=1 \
- file://sharpsl-pm-postresume-r1.patch;patch=1 \
- ${DOSRC}/wm97xx-dig-restore-r0.patch;patch=1 \
- ${DOSRC}/wm97xx-miscdevs-resume-r0.patch;patch=1 \
- file://wm9712-reset-loop-r2.patch;patch=1 \
- file://tosa-lcdnoise-r1.patch;patch=1 \
- file://wm97xx-lcdnoise-r0.patch;patch=1 "
-# ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
-
-S = "${WORKDIR}/git"
diff --git a/packages/linux/linux-rp_2.6.20.bb b/packages/linux/linux-rp_2.6.20.bb
deleted file mode 100644
index 60305488ca..0000000000
--- a/packages/linux/linux-rp_2.6.20.bb
+++ /dev/null
@@ -1,122 +0,0 @@
-require linux-rp.inc
-
-PR = "r19"
-
-DEFAULT_PREFERENCE_poodle = "-99"
-
-# Handy URLs
-# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
-# http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1
-
-# Patches submitted upstream are towards top of this list
-# Hacks should clearly named and at the bottom
-SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 \
- http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.20.6.bz2;patch=1 \
- http://opensource.wolfsonmicro.com/~lg/asoc/asoc-v0.13.3.patch;patch=1;status=merged \
- ${RPSRC}/oprofile_always_bt_arm-r0.patch;patch=1 \
- ${RPSRC}/lzo_kernel-r0.patch;patch=1 \
- ${RPSRC}/lzo_jffs2-r0.patch;patch=1 \
- ${RPSRC}/lzo_crypto-r0a.patch;patch=1 \
- ${RPSRC}/lzo_jffs2_lzomode-r0.patch;patch=1 \
- ${RPSRC}/lzo_jffs2_sysfs-r0.patch;patch=1 \
- ${RPSRC}/hx2750_base-r28.patch;patch=1 \
- ${RPSRC}/hx2750_bl-r8.patch;patch=1 \
- ${RPSRC}/hx2750_pcmcia-r2.patch;patch=1 \
- ${RPSRC}/pxa_keys-r7.patch;patch=1 \
- ${RPSRC}/tsc2101-r16.patch;patch=1 \
- ${RPSRC}/hx2750_test1-r6.patch;patch=1 \
- ${RPSRC}/pxa_timerfix-r0.patch;patch=1 \
- ${RPSRC}/input_power-r6.patch;patch=1 \
- ${RPSRC}/pxa25x_cpufreq-r2.patch;patch=1 \
- ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \
- ${RPSRC}/pm_changes-r1.patch;patch=1 \
- ${RPSRC}/usb_add_epalloc-r3.patch;patch=1 \
- ${RPSRC}/usb_pxa27x_udc-r3.patch;patch=1 \
- ${RPSRC}/kexec-arm-r4a.patch;patch=1 \
- ${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \
- ${RPSRC}/poodle_pm-r3.patch;patch=1 \
- ${RPSRC}/pxa27x_overlay-r5.patch;patch=1 \
- ${RPSRC}/w100_extaccel-r0.patch;patch=1 \
- ${RPSRC}/w100_extmem-r0.patch;patch=1 \
- file://hostap-monitor-mode.patch;patch=1 \
- file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
- ${RPSRC}/logo_oh-r0.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
- ${RPSRC}/mmcsd_large_cards-r0.patch;patch=1;status=hack \
- ${RPSRC}/mmcsd_no_scr_check-r0.patch;patch=1;status=hack \
- ${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \
- ${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
- file://pxa-serial-hack.patch;patch=1;status=hack \
- file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
- file://squashfs3.0-2.6.15.patch;patch=1;status=external \
- file://vesafb-tng-1.0-rc2-2.6.20-rc2.patch;patch=1;status=external \
- file://sharpsl-rc-r1.patch;patch=1 \
- file://defconfig-c7x0 \
- file://defconfig-hx2000 \
- file://defconfig-collie \
- file://defconfig-poodle \
- file://defconfig-akita \
- file://defconfig-spitz* \
- file://defconfig-qemuarm \
- file://defconfig-qemux86 \
- file://defconfig-tosa "
-
-# Add this to enable pm debug code (useful with a serial lead)
-# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
-
-# Disabled until I find the reason this gives issues with cdc_subset
-# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \
-
-# Is anything out of this still needed? Parts were commited to mainline by rmk (drivers/mfd/)
-# (Pavel Machek's git tree has updated versions of this?)
-# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1
-
-# These patches are extracted from Pavel Machek's git tree
-# (diff against vanilla kernel)
-
-SRC_URI_append_collie = "\
- ${TKSRC}/mtd-sharp-flash-hack-r2.patch;patch=1 \
- ${TKSRC}/ucb1x00-touch-audio-r1.patch;patch=1 \
- ${TKSRC}/mcp-sa11x0-r0.patch;patch=1 \
- ${TKSRC}/sa1100-udc-r2.patch;patch=1 \
- ${TKSRC}/mmc_spi-r4.patch;patch=1 \
- ${TKSRC}/locomo-r0.patch;patch=1 \
- ${TKSRC}/collie-kexec.patch;patch=1 \
- ${TKSRC}/locomo_spi-r3.patch;patch=1 \
- ${TKSRC}/sharpsl_pm.patch;patch=1 \
- ${TKSRC}/collie_pm-2.patch;patch=1 \
- ${TKSRC}/locomokeyb_suspendkey.patch;patch=1 \
- ${TKSRC}/pcmcia_suspend.patch;patch=1 \
- ${TKSRC}/ucb1x00_suspend.patch;patch=1 \
-"
-
-SRC_URI_append_tosa = "\
- ${CHSRC}/usb-ohci-hooks-r1.patch;patch=1 \
- ${CHSRC}/tmio-core-r4.patch;patch=1 \
- file://tmio-tc6393-r8.patch;patch=1 \
- file://tmio-nand-r7.patch;patch=1 \
- file://tmio-ohci-r6.patch;patch=1 \
- ${CHSRC}/tmio-fb-r6.patch;patch=1 \
- file://tosa-keyboard-r18.patch;patch=1 \
- ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
- ${DOSRC}/tosa-tmio-r6.patch;patch=1 \
- ${DOSRC}/tosa-power-r17.patch;patch=1 \
- file://tosa-tmio-lcd-r10.patch;patch=1 \
- ${DOSRC}/tosa-bluetooth-r8.patch;patch=1 \
- ${DOSRC}/wm97xx-lg7-r0.patch;patch=1 \
- file://wm9712-suspend-cold-res-r2.patch;patch=1 \
- file://sharpsl-pm-postresume-r1.patch;patch=1 \
- ${DOSRC}/wm97xx-dig-restore-r0.patch;patch=1 \
- ${DOSRC}/wm97xx-miscdevs-resume-r0.patch;patch=1 \
- file://wm9712-reset-loop-r2.patch;patch=1 \
- file://tosa-lcdnoise-r1.patch;patch=1 \
- file://wm97xx-lcdnoise-r0.patch;patch=1 "
-# ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
-
-S = "${WORKDIR}/linux-2.6.20"
diff --git a/packages/linux/linux-rp_2.6.21.bb b/packages/linux/linux-rp_2.6.21.bb
deleted file mode 100644
index d239b2aa32..0000000000
--- a/packages/linux/linux-rp_2.6.21.bb
+++ /dev/null
@@ -1,119 +0,0 @@
-require linux-rp.inc
-
-PR = "r12"
-
-DEFAULT_PREFERENCE_poodle = "-99"
-DEFAULT_PREFERENCE_collie = "1"
-
-# Handy URLs
-# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
-# http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1
-
-# Patches submitted upstream are towards top of this list
-# Hacks should clearly named and at the bottom
-SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2 \
- ${RPSRC}/lzo_kernel-r0.patch;patch=1 \
- ${RPSRC}/lzo_jffs2-r0.patch;patch=1 \
- ${RPSRC}/lzo_crypto-r1.patch;patch=1 \
- ${RPSRC}/lzo_jffs2_lzomode-r0.patch;patch=1 \
- ${RPSRC}/lzo_jffs2_sysfs-r0.patch;patch=1 \
- ${RPSRC}/hx2750_base-r28.patch;patch=1 \
- ${RPSRC}/hx2750_bl-r9.patch;patch=1 \
- ${RPSRC}/hx2750_pcmcia-r2.patch;patch=1 \
- ${RPSRC}/pxa_keys-r7.patch;patch=1 \
- ${RPSRC}/tsc2101-r16.patch;patch=1 \
- ${RPSRC}/hx2750_test1-r6.patch;patch=1 \
- ${RPSRC}/pxa_timerfix-r0.patch;patch=1 \
- ${RPSRC}/input_power-r7.patch;patch=1 \
- ${RPSRC}/pxa25x_cpufreq-r2.patch;patch=1 \
- ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \
- ${RPSRC}/pm_changes-r1.patch;patch=1 \
- ${RPSRC}/usb_add_epalloc-r3.patch;patch=1 \
- ${RPSRC}/usb_pxa27x_udc-r4.patch;patch=1 \
- ${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \
- ${RPSRC}/poodle_pm-r4.patch;patch=1 \
- ${RPSRC}/pxa27x_overlay-r5.patch;patch=1 \
- ${RPSRC}/w100_extaccel-r0.patch;patch=1 \
- ${RPSRC}/asoc_fix_typo-r0.patch;patch=1 \
- ${RPSRC}/qemuarm_scsi_fix-r0.patch;patch=1 \
- file://hostap-monitor-mode.patch;patch=1 \
- file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
- ${RPSRC}/logo_oh-r0.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
- ${RPSRC}/mmcsd_large_cards-r0.patch;patch=1;status=hack \
- ${RPSRC}/mmcsd_no_scr_check-r0.patch;patch=1;status=hack \
- ${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \
- ${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
- file://pxa-serial-hack.patch;patch=1;status=hack \
- file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
- file://connectplus-prevent-oops-HACK.patch;patch=1;status=hack \
- file://squashfs3.0-2.6.15.patch;patch=1;status=external \
- file://vesafb-tng-1.0-rc2-2.6.20-rc2.patch;patch=1;status=external \
- file://sharpsl-rc-r1.patch;patch=1 \
- file://defconfig-c7x0 \
- file://defconfig-hx2000 \
- file://defconfig-collie \
- file://defconfig-poodle \
- file://defconfig-akita \
- file://defconfig-spitz \
- file://defconfig-qemuarm \
- file://defconfig-qemux86 \
- file://defconfig-bootcdx86 \
- file://defconfig-tosa "
-
-# Add this to enable pm debug code (useful with a serial lead)
-# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
-
-# Disabled until I find the reason this gives issues with cdc_subset
-# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \
-
-# Is anything out of this still needed? Parts were commited to mainline by rmk (drivers/mfd/)
-# (Pavel Machek's git tree has updated versions of this?)
-# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1
-
-SRC_URI_append_collie = "\
- ${TKSRC}/mtd-sharp-flash-hack-r2.patch;patch=1 \
- ${TKSRC}/ucb1x00-touch-audio-r1.patch;patch=1 \
- ${TKSRC}/mcp-sa11x0-r0.patch;patch=1 \
- ${TKSRC}/sa1100-udc-r2.patch;patch=1 \
- ${TKSRC}/mmc_spi-r4.patch;patch=1 \
- ${TKSRC}/locomo-r0.patch;patch=1 \
- ${TKSRC}/collie-kexec.patch;patch=1 \
- ${TKSRC}/locomo_spi-r4.patch;patch=1 \
- ${TKSRC}/sharpsl_pm-r2.patch;patch=1 \
- ${TKSRC}/collie_pm-r2.patch;patch=1 \
- ${TKSRC}/locomokeyb_suspendkey-2.patch;patch=1 \
- ${TKSRC}/pcmcia_suspend.patch;patch=1 \
- ${TKSRC}/ucb1x00_suspend.patch;patch=1 \
-"
-
-SRC_URI_append_tosa = "\
- ${CHSRC}/usb-ohci-hooks-r1.patch;patch=1 \
- ${CHSRC}/tmio-core-r4.patch;patch=1 \
- file://tmio-tc6393-r8.patch;patch=1 \
- file://tmio-nand-r7.patch;patch=1 \
- file://tmio-ohci-r6.patch;patch=1 \
- ${CHSRC}/tmio-fb-r6.patch;patch=1 \
- file://tosa-keyboard-r18.patch;patch=1 \
- ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
- ${DOSRC}/tosa-tmio-r6.patch;patch=1 \
- ${DOSRC}/tosa-power-r17.patch;patch=1 \
- file://tosa-tmio-lcd-r10.patch;patch=1 \
- ${DOSRC}/tosa-bluetooth-r8.patch;patch=1 \
- ${DOSRC}/wm97xx-lg7-r0.patch;patch=1 \
- file://wm9712-suspend-cold-res-r2.patch;patch=1 \
- file://sharpsl-pm-postresume-r1.patch;patch=1 \
- ${DOSRC}/wm97xx-dig-restore-r0.patch;patch=1 \
- ${DOSRC}/wm97xx-miscdevs-resume-r0.patch;patch=1 \
- file://wm9712-reset-loop-r2.patch;patch=1 \
- file://tosa-lcdnoise-r1.patch;patch=1 \
- file://wm97xx-lcdnoise-r0.patch;patch=1 "
-# ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
-
-S = "${WORKDIR}/linux-2.6.21"
diff --git a/packages/linux/linux-rp_2.6.22.bb b/packages/linux/linux-rp_2.6.22.bb
deleted file mode 100644
index 55c37af4c9..0000000000
--- a/packages/linux/linux-rp_2.6.22.bb
+++ /dev/null
@@ -1,121 +0,0 @@
-require linux-rp.inc
-
-PR = "r11"
-
-DEFAULT_PREFERENCE_poodle = "-99"
-
-# Handy URLs
-# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
-# http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1
-
-# Patches submitted upstream are towards top of this list
-# Hacks should clearly named and at the bottom
-SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2 \
- ${RPSRC}/lzo_kernel-r3.patch;patch=1 \
- ${RPSRC}/lzo_jffs2-r2.patch;patch=1 \
- ${RPSRC}/lzo_crypto-r2.patch;patch=1 \
- ${RPSRC}/lzo_jffs2_lzomode-r1.patch;patch=1 \
- ${RPSRC}/lzo_jffs2_sysfs-r1.patch;patch=1 \
- ${RPSRC}/lzo_fix-r0.patch;patch=1 \
- ${RPSRC}/hx2750_base-r28.patch;patch=1 \
- ${RPSRC}/hx2750_bl-r9.patch;patch=1 \
- ${RPSRC}/hx2750_pcmcia-r2.patch;patch=1 \
- ${RPSRC}/pxa_keys-r7.patch;patch=1 \
- ${RPSRC}/tsc2101-r16.patch;patch=1 \
- ${RPSRC}/hx2750_test1-r6.patch;patch=1 \
- ${RPSRC}/pxa_timerfix-r0.patch;patch=1 \
- ${RPSRC}/input_power-r9.patch;patch=1 \
- ${RPSRC}/pxa25x_cpufreq-r2.patch;patch=1 \
- ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \
- ${RPSRC}/pm_changes-r1.patch;patch=1 \
- ${RPSRC}/usb_add_epalloc-r3.patch;patch=1 \
- ${RPSRC}/usb_pxa27x_udc-r5.patch;patch=1 \
- ${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \
- ${RPSRC}/poodle_pm-r4.patch;patch=1 \
- ${RPSRC}/pxa27x_overlay-r5.patch;patch=1 \
- ${RPSRC}/w100_extaccel-r1.patch;patch=1 \
- ${RPSRC}/w100_extmem-r1.patch;patch=1 \
- file://hostap-monitor-mode.patch;patch=1 \
- file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
- ${RPSRC}/logo_oh-r0.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
- ${RPSRC}/mmcsd_large_cards-r1.patch;patch=1;status=hack \
- ${RPSRC}/mmcsd_no_scr_check-r1.patch;patch=1;status=hack \
- ${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \
- ${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
- file://htcuni.patch;patch=1 \
- file://pxa-serial-hack.patch;patch=1;status=hack \
- file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
- file://squashfs3.0-2.6.15.patch;patch=1;status=external \
- file://vesafb-tng-1.0-rc2-2.6.20-rc2.patch;patch=1;status=external \
- file://pda-power.patch;patch=1 \
- file://defconfig-c7x0 \
- file://defconfig-hx2000 \
- file://defconfig-collie \
- file://defconfig-poodle \
- file://defconfig-akita \
- file://defconfig-spitz \
- file://defconfig-qemuarm \
- file://defconfig-qemux86 \
- file://defconfig-bootcdx86 \
- file://defconfig-htcuniversal \
- file://defconfig-tosa "
-
-# Add this to enable pm debug code (useful with a serial lead)
-# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
-
-# Disabled until I find the reason this gives issues with cdc_subset
-# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \
-
-# Is anything out of this still needed? Parts were commited to mainline by rmk (drivers/mfd/)
-# (Pavel Machek's git tree has updated versions of this?)
-# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1
-
-# These patches are extracted from Pavel Machek's git tree
-# (diff against vanilla kernel)
-SRC_URI_append_collie = "\
- ${DOSRC}/collie/mtd-sharp-flash-hack-r0.patch;patch=1 \
- ${DOSRC}/collie/collie-r0.patch;patch=1 \
- ${DOSRC}/collie/locomolcd-backlight-r0.patch;patch=1 \
- ${DOSRC}/collie/ucb1x00-touch-audio-r0.patch;patch=1 \
- file://collie-mcp-r1.patch;patch=1 \
- ${DOSRC}/collie/sa1100-udc-r0.patch;patch=1 \
-# ${DOSRC}/collie/collie-pm-r1.patch;patch=1 \
-"
-
-#- ${CHSRC}/usb-ohci-hooks-r1.patch;patch=1 \
-#- file://tmio-ohci-r6.patch;patch=1 \
-# wm97xx-lg13-r0.patch;patch=1 was adapted from $(DOSRC) to apply cleanly
-SRC_URI_append_tosa = "\
- ${CHSRC}/tmio-core-r4.patch;patch=1 \
- file://tmio-tc6393-r8.patch;patch=1 \
- file://tmio-nand-r8.patch;patch=1 \
- ${CHSRC}/tmio-fb-r6.patch;patch=1 \
- file://tmio-fb-r6-fix-r0.patch;patch=1 \
- file://tosa-keyboard-r19.patch;patch=1 \
- ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
- file://tosa-pxaac97-r6-fix-r0.patch;patch=1 \
- ${DOSRC}/tosa-tmio-r6.patch;patch=1 \
- ${DOSRC}/tosa-power-r18.patch;patch=1 \
- file://tosa-power-r18-fix-r0.patch;patch=1 \
- file://tosa-tmio-lcd-r10.patch;patch=1 \
- file://tosa-tmio-lcd-r10-fix-r0.patch;patch=1 \
- ${DOSRC}/tosa-bluetooth-r8.patch;patch=1 \
- file://wm97xx-lg13-r0.patch;patch=1 \
- file://wm97xx-lg13-r0-fix-r0.patch;patch=1 \
- file://wm9712-suspend-cold-res-r2.patch;patch=1 \
- file://sharpsl-pm-postresume-r1.patch;patch=1 \
- file://wm9712-reset-loop-r2.patch;patch=1 \
- file://tosa-lcdnoise-r1.patch;patch=1 \
- file://tosa-lcdnoise-r1-fix-r0.patch;patch=1 "
-# ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
-
-SRC_URI_append_htcuniversal = "file://htcuni-acx.patch;patch=1;status=external"
-
-S = "${WORKDIR}/linux-2.6.22"
diff --git a/packages/linux/linux-rp_2.6.23+2.6.24-rc0+git.bb b/packages/linux/linux-rp_2.6.23+2.6.24-rc0+git.bb
deleted file mode 100644
index 93ffe19b6e..0000000000
--- a/packages/linux/linux-rp_2.6.23+2.6.24-rc0+git.bb
+++ /dev/null
@@ -1,128 +0,0 @@
-require linux-rp.inc
-
-PR = "r1"
-
-DEFAULT_PREFERENCE = "-1"
-
-# Handy URLs
-# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
-# http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1
-
-# Patches submitted upstream are towards top of this list
-# Hacks should clearly named and at the bottom
-SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
- http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.23-git9.bz2;patch=1 \
- ${RPSRC}/lzo_crypto-r2.patch;patch=1 \
- ${RPSRC}/lzo_jffs2_sysfs-r1.patch;patch=1 \
- ${RPSRC}/hx2750_base-r30.patch;patch=1 \
- ${RPSRC}/hx2750_bl-r9.patch;patch=1 \
- ${RPSRC}/hx2750_pcmcia-r3.patch;patch=1 \
- ${RPSRC}/pxa_keys-r8.patch;patch=1 \
- ${RPSRC}/tsc2101-r16.patch;patch=1 \
- ${RPSRC}/hx2750_test1-r7.patch;patch=1 \
- ${RPSRC}/input_power-r9.patch;patch=1 \
- ${RPSRC}/pxa25x_cpufreq-r2.patch;patch=1 \
- ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \
- ${RPSRC}/pm_changes-r1.patch;patch=1 \
- ${RPSRC}/usb_add_epalloc-r4.patch;patch=1 \
- ${RPSRC}/usb_pxa27x_udc-r7.patch;patch=1 \
- ${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \
- ${RPSRC}/poodle_pm-r5.patch;patch=1 \
- ${RPSRC}/pxa27x_overlay-r7.patch;patch=1 \
- ${RPSRC}/w100_extaccel-r1.patch;patch=1 \
- ${RPSRC}/w100_extmem-r1.patch;patch=1 \
- file://w100fb-unused-var.patch;patch=1 \
- file://hostap-monitor-mode.patch;patch=1 \
- file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
- ${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
- ${RPSRC}/mmcsd_large_cards-r1.patch;patch=1;status=hack \
- file://mmcsd_no_scr_check-r2.patch;patch=1 \
- ${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \
- ${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
- ${RPSRC}/corgi_rearrange_lcd-r0.patch;patch=1 \
- file://pxa-serial-hack.patch;patch=1;status=hack \
- file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
- file://squashfs3.0-2.6.15.patch;patch=1;status=external \
- file://uvesafb-0.1-rc3-2.6.22.patch;patch=1;status=external \
-# file://htcuni.patch;patch=1 \
- file://binutils-buildid-arm.patch;patch=1 \
- file://defconfig-c7x0 \
- file://defconfig-hx2000 \
- file://defconfig-collie \
- file://defconfig-poodle \
- file://defconfig-akita \
- file://defconfig-spitz \
- file://defconfig-qemuarm \
- file://defconfig-qemux86 \
- file://defconfig-bootcdx86 \
- file://defconfig-htcuniversal \
- file://defconfig-zylonite \
- file://defconfig-tosa "
-
-# FIXMEs before made default
-# ${RPSRC}/mmcsd_no_scr_check-r1.patch;patch=1;status=hack
-
-
-# Add this to enable pm debug code (useful with a serial lead)
-# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
-
-# Disabled until I find the reason this gives issues with cdc_subset
-# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \
-
-# Is anything out of this still needed? Parts were commited to mainline by rmk (drivers/mfd/)
-# (Pavel Machek's git tree has updated versions of this?)
-# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1
-
-# These patches are extracted from Pavel Machek's git tree
-# (diff against vanilla kernel)
-SRC_URI_append_collie = "\
- ${DOSRC}/collie/mtd-sharp-flash-hack-r0.patch;patch=1 \
- ${DOSRC}/collie/collie-r0.patch;patch=1 \
- ${DOSRC}/collie/locomolcd-backlight-r0.patch;patch=1 \
- ${DOSRC}/collie/ucb1x00-touch-audio-r0.patch;patch=1 \
- file://collie-mcp-r1.patch;patch=1 \
- ${DOSRC}/collie/sa1100-udc-r0.patch;patch=1 \
-# ${DOSRC}/collie/collie-pm-r1.patch;patch=1 \
-"
-
-SRC_URI_append_tosa = "\
- ${CHSRC}/usb-ohci-hooks-r1.patch;patch=1 \
- ${CHSRC}/tmio-core-r4.patch;patch=1 \
- file://tmio-tc6393-r8.patch;patch=1 \
- file://tmio-nand-r7.patch;patch=1 \
- file://tmio-ohci-r6.patch;patch=1 \
- ${CHSRC}/tmio-fb-r6.patch;patch=1 \
- file://tosa-keyboard-r18.patch;patch=1 \
- ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
- ${DOSRC}/tosa-tmio-r6.patch;patch=1 \
- ${DOSRC}/tosa-power-r17.patch;patch=1 \
- file://tosa-tmio-lcd-r10.patch;patch=1 \
- ${DOSRC}/tosa-bluetooth-r8.patch;patch=1 \
- ${DOSRC}/wm97xx-lg7-r0.patch;patch=1 \
- file://wm9712-suspend-cold-res-r2.patch;patch=1 \
- file://sharpsl-pm-postresume-r1.patch;patch=1 \
- ${DOSRC}/wm97xx-dig-restore-r0.patch;patch=1 \
- ${DOSRC}/wm97xx-miscdevs-resume-r0.patch;patch=1 \
- file://wm9712-reset-loop-r2.patch;patch=1 \
- file://tosa-lcdnoise-r1.patch;patch=1 \
- file://wm97xx-lcdnoise-r0.patch;patch=1 "
-# ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
-
-SRC_URI_append_htcuniversal ="\
- file://htcuni-acx.patch;patch=1;status=external \
- "
-
-SRC_URI_append_zylonite ="\
- file://arm_pxa_20070923.patch;patch=1 \
- file://pxa_fb_overlay.patch;patch=1 \
- file://zylonite-boot.patch;patch=1 \
- "
-
-S = "${WORKDIR}/linux-2.6.23"
diff --git a/packages/linux/linux-rp_2.6.23.bb b/packages/linux/linux-rp_2.6.23.bb
index 53625791a7..a8c5f79f67 100644
--- a/packages/linux/linux-rp_2.6.23.bb
+++ b/packages/linux/linux-rp_2.6.23.bb
@@ -1,26 +1,28 @@
require linux-rp.inc
-PR = "r10"
-
-DEFAULT_PREFERENCE_qemuarm = "-1"
-DEFAULT_PREFERENCE_qemux86 = "-1"
-DEFAULT_PREFERENCE_poodle = "-99"
+PR = "r26"
# Handy URLs
# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
-# http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2
-# http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
-# http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1
+# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
+# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2
+# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
+# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
+# ${KERNELORG_MIRROR}pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
+# ${KERNELORG_MIRROR}pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1
# Patches submitted upstream are towards top of this list
# Hacks should clearly named and at the bottom
-SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
- ${RPSRC}/lzo_jffs2-r3.patch;patch=1 \
- ${RPSRC}/lzo_crypto-r2.patch;patch=1 \
- ${RPSRC}/lzo_jffs2_lzomode-r1.patch;patch=1 \
+SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
+ ${RPSRC}/pxa25x_suspend_fixes-r0.patch;patch=1;status=merged \
+ ${RPSRC}/lzo_jffs2-r3.patch;patch=1;status=merged \
+ ${RPSRC}/lzo_jffs2_lzomode-r1.patch;patch=1;status=merged \
+ ${RPSRC}/spitzkbd_fix-r0.patch;patch=1;status=merged \
+ file://uvesafb-0.1-rc3-2.6.22.patch;patch=1;status=merged \
+ ${RPSRC}/locomo_led_fix-r0.patch;patch=1;status=merged \
+ file://hrw-add-wcf11-to-hostap.patch;patch=1;status=merged \
+ ${RPSRC}/export_atags-r0a.patch;patch=1;status=pending \
+ ${RPSRC}/lzo_crypto-r2.patch;patch=1;status=pending \
${RPSRC}/lzo_jffs2_sysfs-r1.patch;patch=1 \
${RPSRC}/hx2750_base-r29.patch;patch=1 \
${RPSRC}/hx2750_bl-r9.patch;patch=1 \
@@ -35,27 +37,27 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
${RPSRC}/usb_add_epalloc-r3.patch;patch=1 \
${RPSRC}/usb_pxa27x_udc-r6.patch;patch=1 \
${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \
- ${RPSRC}/poodle_pm-r4.patch;patch=1 \
${RPSRC}/pxa27x_overlay-r6.patch;patch=1 \
- ${RPSRC}/w100_extaccel-r1.patch;patch=1 \
+ ${RPSRC}/w100_extaccel-r2.patch;patch=1 \
${RPSRC}/w100_extmem-r1.patch;patch=1 \
- file://w100fb-unused-var.patch;patch=1 \
- file://hostap-monitor-mode.patch;patch=1 \
- file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1 \
+ ${RPSRC}/poodle_pm-r4.patch;patch=1 \
+ ${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \
+ ${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \
+ file://squashfs3.0-2.6.15.patch;patch=1;status=external \
${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \
- ${RPSRC}/logo_oz-r2.patch.bz2;patch=1;status=unmergable \
${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
+ file://hostap-monitor-mode.patch;patch=1;status=unmergable \
+ file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1;status=unmergable \
${RPSRC}/mmcsd_large_cards-r1.patch;patch=1;status=hack \
- file://mmcsd_no_scr_check-r2.patch;patch=1 \
+ ${RPSRC}/mmcsd_no_scr_check-r2.patch;patch=1;status=hack \
${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \
${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
file://pxa-serial-hack.patch;patch=1;status=hack \
file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
file://connectplus-prevent-oops-HACK.patch;patch=1;status=hack \
- file://squashfs3.0-2.6.15.patch;patch=1;status=external \
- file://uvesafb-0.1-rc3-2.6.22.patch;patch=1;status=external \
file://htcuni.patch;patch=1 \
file://binutils-buildid-arm.patch;patch=1 \
+ file://versatile-armv6.patch;patch=1 \
file://defconfig-c7x0 \
file://defconfig-hx2000 \
file://defconfig-collie \
@@ -72,7 +74,6 @@ SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
# FIXMEs before made default
# ${RPSRC}/mmcsd_no_scr_check-r1.patch;patch=1;status=hack
-
# Add this to enable pm debug code (useful with a serial lead)
# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
@@ -95,9 +96,10 @@ SRC_URI_append_collie = "\
# ${DOSRC}/collie/collie-pm-r1.patch;patch=1 \
"
+SRC_URI_append_poodle = "\
+ ${RPSRC}/poodle_serial_vcc-r0.patch;patch=1 \
+"
-# wm97xx-lg13-r0.patch, tosa-power-r18.patch and tosa-bluetooth-r8.patch
-# were adapted from $(DOSRC) to apply cleanly
SRC_URI_append_tosa = "\
${CHSRC}/tmio-core-r4.patch;patch=1 \
file://tmio-tc6393-r8.patch;patch=1 \
diff --git a/packages/linux/linux-rp_2.6.24.bb b/packages/linux/linux-rp_2.6.24.bb
new file mode 100644
index 0000000000..593a70a48b
--- /dev/null
+++ b/packages/linux/linux-rp_2.6.24.bb
@@ -0,0 +1,148 @@
+require linux-rp.inc
+
+PR = "r2"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_collie = "1"
+
+# Handy URLs
+# git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git;protocol=git;tag=ef7d1b244fa6c94fb76d5f787b8629df64ea4046
+# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
+# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/linux-2.6.20-rc4.tar.bz2
+# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/testing/patch-2.6.18-rc6.bz2;patch=1
+# ${KERNELORG_MIRROR}pub/linux/kernel/v2.6/snapshots/patch-2.6.18-rc2-git1.bz2;patch=1
+# ${KERNELORG_MIRROR}pub/linux/kernel/people/alan/linux-2.6/2.6.10/patch-2.6.10-ac8.gz;patch=1
+# ${KERNELORG_MIRROR}pub/linux/kernel/people/akpm/patches/2.6/2.6.14-rc2/2.6.14-rc2-mm1/2.6.14-rc2-mm1.bz2;patch=1
+
+# Patches submitted upstream are towards top of this list
+# Hacks should clearly named and at the bottom
+SRC_URI = "${KERNELORG_MIRROR}pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \
+ ${RPSRC}/export_atags-r2.patch;patch=1;status=pending \
+ ${RPSRC}/lzo_crypto-r2.patch;patch=1;status=pending \
+ ${RPSRC}/corgi_rearrange_lcd-r0.patch;patch=1;status=pending \
+ ${RPSRC}/allow_disable_deferrred-r0.patch;patch=1 \
+ ${RPSRC}/lzo_jffs2_sysfs-r1.patch;patch=1 \
+ ${RPSRC}/hx2750_base-r33.patch;patch=1 \
+ ${RPSRC}/hx2750_bl-r9.patch;patch=1 \
+ ${RPSRC}/hx2750_pcmcia-r3.patch;patch=1 \
+ ${RPSRC}/pxa_keys-r8.patch;patch=1 \
+ ${RPSRC}/tsc2101-r18.patch;patch=1 \
+ ${RPSRC}/hx2750_test1-r8.patch;patch=1 \
+ ${RPSRC}/input_power-r10.patch;patch=1 \
+ ${RPSRC}/pxa25x_cpufreq-r2.patch;patch=1 \
+ ${RPSRC}/sharpsl_pm_fixes1-r0.patch;patch=1 \
+ ${RPSRC}/pm_changes-r1.patch;patch=1 \
+ ${RPSRC}/usb_add_epalloc-r4.patch;patch=1 \
+ ${RPSRC}/usb_pxa27x_udc-r8.patch;patch=1 \
+ ${RPSRC}/locomo_kbd_tweak-r1.patch;patch=1 \
+ ${RPSRC}/pxa27x_overlay-r8.patch;patch=1 \
+ ${RPSRC}/w100_extaccel-r2.patch;patch=1 \
+ ${RPSRC}/w100_extmem-r1.patch;patch=1 \
+ ${RPSRC}/poodle_pm-r5.patch;patch=1 \
+ ${RPSRC}/poodle_lcd_hack-r0.patch;patch=1 \
+ ${RPSRC}/poodle_asoc_fix-r1.patch;patch=1 \
+ file://squashfs3.3.patch;patch=1;status=external \
+ ${RPSRC}/logo_oh-r1.patch.bz2;patch=1;status=unmergable \
+ ${RPSRC}/pxa-linking-bug.patch;patch=1;status=unmergable \
+ file://hostap-monitor-mode.patch;patch=1;status=unmergable \
+ file://serial-add-support-for-non-standard-xtals-to-16c950-driver.patch;patch=1;status=unmergable \
+ ${RPSRC}/mmcsd_large_cards-r1.patch;patch=1;status=hack \
+ ${RPSRC}/mmcsd_no_scr_check-r2.patch;patch=1;status=hack \
+ ${RPSRC}/integrator_rgb-r1.patch;patch=1;status=hack \
+ ${RPSRC}/pxa_cf_initorder_hack-r1.patch;patch=1;status=hack \
+ file://pxa-serial-hack.patch;patch=1;status=hack \
+ file://connectplus-remove-ide-HACK.patch;patch=1;status=hack \
+ file://connectplus-prevent-oops-HACK.patch;patch=1;status=hack \
+ file://htcuni.patch;patch=1 \
+ file://binutils-buildid-arm.patch;patch=1 \
+ file://versatile-armv6.patch;patch=1 \
+ file://defconfig-c7x0 \
+ file://defconfig-hx2000 \
+ file://defconfig-collie \
+ file://defconfig-poodle \
+ file://defconfig-akita \
+ file://defconfig-spitz \
+ file://defconfig-qemuarm \
+ file://defconfig-qemux86 \
+ file://defconfig-bootcdx86 \
+ file://defconfig-htcuniversal \
+ file://defconfig-zylonite"
+# Tosa disabled until the patchset is updated
+# file://defconfig-tosa
+
+# FIXMEs before made default
+# ${RPSRC}/mmcsd_no_scr_check-r1.patch;patch=1;status=hack
+
+
+# Add this to enable pm debug code (useful with a serial lead)
+# ${RPSRC}/sharpsl_pm_debug-r0.patch;patch=1
+
+# Disabled until I find the reason this gives issues with cdc_subset
+# ${RPSRC}/usb_rndis_tweaks-r0.patch;patch=1 \
+
+# Is anything out of this still needed? Parts were commited to mainline by rmk (drivers/mfd/)
+# (Pavel Machek's git tree has updated versions of this?)
+# ${JLSRC}/zaurus-lcd-2.6.11.diff.gz;patch=1
+
+# These patches are extracted from Pavel Machek's git tree
+# (diff against vanilla kernel)
+SRC_URI_append_collie = "\
+ ${TKSRC}/mtd-sharp-flash-hack-r3.patch;patch=1 \
+ ${TKSRC}/mcp-sa11x0-r0.patch;patch=1 \
+ ${TKSRC}/locomo-r0.patch;patch=1 \
+# ${TKSRC}/locomo_spi-4.patch;patch=1 \
+ ${TKSRC}/collie-kexec.patch;patch=1 \
+ ${TKSRC}/sharpsl_pm-3.patch;patch=1 \
+ ${TKSRC}/collie_pm-2.patch;patch=1 \
+ ${TKSRC}/locomokeyb_suspendkey-2.patch;patch=1 \
+ ${TKSRC}/ucb1x00_suspend.patch;patch=1 \
+ ${TKSRC}/collie-ts.patch;patch=1 \
+ ${TKSRC}/pcmcia_suspend.patch;patch=1 \
+"
+
+SRC_URI_append_poodle = "\
+ ${RPSRC}/poodle_serial_vcc-r0.patch;patch=1 \
+ file://poodle_ts.patch;patch=1 \
+ file://pxafb.patch;patch=1 \
+"
+
+SRC_URI_append_tosa = "\
+ ${CHSRC}/tmio-core-r4.patch;patch=1 \
+ file://tmio-tc6393-r8.patch;patch=1 \
+ file://tmio-nand-r8.patch;patch=1 \
+ ${CHSRC}/tmio-fb-r6.patch;patch=1 \
+ file://tmio-fb-r6-fix-r0.patch;patch=1 \
+ file://tosa-keyboard-r19.patch;patch=1 \
+ ${DOSRC}/tosa-pxaac97-r6.patch;patch=1 \
+ file://tosa-pxaac97-r6-fix-r0.patch;patch=1 \
+ ${DOSRC}/tosa-tmio-r6.patch;patch=1 \
+ file://tosa-power-r18.patch;patch=1 \
+ file://tosa-power-r18-fix-r0.patch;patch=1 \
+ file://tosa-tmio-lcd-r10.patch;patch=1 \
+ file://tosa-tmio-lcd-r10-fix-r0.patch;patch=1 \
+ file://tosa-bluetooth-r8.patch;patch=1 \
+ file://wm97xx-lg13-r0.patch;patch=1 \
+ file://wm97xx-lg13-r0-fix-r0.patch;patch=1 \
+ file://wm9712-suspend-cold-res-r2.patch;patch=1 \
+ file://sharpsl-pm-postresume-r1.patch;patch=1 \
+ file://wm9712-reset-loop-r2.patch;patch=1 \
+ file://tosa-lcdnoise-r1.patch;patch=1 \
+ file://tosa-lcdnoise-r1-fix-r0.patch;patch=1 \
+ file://arm-dma-coherent.patch;patch=1 \
+ file://usb-ohci-hooks-r3.patch;patch=1 \
+ file://tmio-ohci-r9.patch;patch=1 \
+ file://pxa2xx_udc_support_inverse_vbus.patch;patch=1 \
+ file://tosa_udc_use_gpio_vbus.patch;patch=1 \
+ "
+# ${DOSRC}/tosa-asoc-r1.patch;patch=1 "
+
+SRC_URI_append_htcuniversal ="\
+ file://htcuni-acx.patch;patch=1;status=external \
+ "
+
+SRC_URI_append_zylonite ="\
+ file://pxa_fb_overlay.patch;patch=1 \
+ file://zylonite-boot.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/linux-2.6.24"
diff --git a/packages/linux/linux-sequoia_2.6.21.bb b/packages/linux/linux-sequoia_2.6.21.bb
index 1fa520e914..49c7878ca2 100644
--- a/packages/linux/linux-sequoia_2.6.21.bb
+++ b/packages/linux/linux-sequoia_2.6.21.bb
@@ -31,12 +31,12 @@ do_stage_append () {
#need ppc platforms includes + friends in order for external kernel modules to compile as headers a$
install -d ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/ppc ${STAGING_KERNEL_DIR}/arch/
- cp -a arch/powerpc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/ppc ${STAGING_KERNEL_DIR}/arch/
+ cp -pPR arch/powerpc ${STAGING_KERNEL_DIR}/arch/
install -d ${STAGING_KERNEL_DIR}/include/asm
- cp -a include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
- cp -a include/asm-ppc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-powerpc ${STAGING_KERNEL_DIR}/include/
+ cp -pPR include/asm-ppc ${STAGING_KERNEL_DIR}/include/
}
diff --git a/packages/linux/linux-storcenter/defconfig-2.6.15.7 b/packages/linux/linux-storcenter/defconfig-2.6.15.7
new file mode 100644
index 0000000000..de5e5b80f7
--- /dev/null
+++ b/packages/linux/linux-storcenter/defconfig-2.6.15.7
@@ -0,0 +1,1176 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.15.7
+# Tue Jan 15 08:24:59 2008
+#
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_PPC=y
+CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_HOTPLUG=y
+CONFIG_KOBJECT_UEVENT=y
+# CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_EMBEDDED=y
+# CONFIG_KALLSYMS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_LBD=y
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# Processor
+#
+CONFIG_6xx=y
+# CONFIG_40x is not set
+# CONFIG_44x is not set
+# CONFIG_POWER3 is not set
+# CONFIG_POWER4 is not set
+# CONFIG_8xx is not set
+# CONFIG_E200 is not set
+# CONFIG_E500 is not set
+CONFIG_PPC_FPU=y
+# CONFIG_ALTIVEC is not set
+# CONFIG_TAU is not set
+# CONFIG_KEXEC is not set
+# CONFIG_CPU_FREQ is not set
+# CONFIG_WANT_EARLY_SERIAL is not set
+CONFIG_PPC_GEN550=y
+CONFIG_PPC_STD_MMU=y
+
+#
+# Platform options
+#
+# CONFIG_PPC_MULTIPLATFORM is not set
+# CONFIG_APUS is not set
+# CONFIG_KATANA is not set
+# CONFIG_WILLOW is not set
+# CONFIG_CPCI690 is not set
+# CONFIG_POWERPMC250 is not set
+# CONFIG_CHESTNUT is not set
+# CONFIG_SPRUCE is not set
+# CONFIG_HDPU is not set
+# CONFIG_EV64260 is not set
+# CONFIG_LOPEC is not set
+# CONFIG_MVME5100 is not set
+# CONFIG_PPLUS is not set
+# CONFIG_PRPMC750 is not set
+# CONFIG_PRPMC800 is not set
+# CONFIG_SANDPOINT is not set
+# CONFIG_RADSTONE_PPC7D is not set
+# CONFIG_PAL4 is not set
+# CONFIG_GEMINI is not set
+# CONFIG_EST8260 is not set
+# CONFIG_SBC82xx is not set
+CONFIG_IOMEGA8241=y
+# CONFIG_SBS8260 is not set
+# CONFIG_RPX8260 is not set
+# CONFIG_TQM8260 is not set
+# CONFIG_ADS8272 is not set
+# CONFIG_PQ2FADS is not set
+# CONFIG_LITE5200 is not set
+# CONFIG_MPC834x_SYS is not set
+# CONFIG_EV64360 is not set
+CONFIG_MPC10X_BRIDGE=y
+CONFIG_MPC10X_OPENPIC=y
+# CONFIG_MPC10X_STORE_GATHERING is not set
+# CONFIG_SMP is not set
+# CONFIG_HIGHMEM is not set
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0,115200"
+# CONFIG_PM is not set
+# CONFIG_SOFTWARE_SUSPEND is not set
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+CONFIG_GENERIC_ISA_DMA=y
+# CONFIG_PPC_I8259 is not set
+CONFIG_PPC_INDIRECT_PCI=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+# CONFIG_PCI_LEGACY_PROC is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_HIGHMEM_START=0xfe000000
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_TASK_SIZE=0x80000000
+CONFIG_BOOT_LOAD=0x00800000
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=m
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+CONFIG_FTL=y
+CONFIG_NFTL=y
+CONFIG_NFTL_RW=y
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_AMDSTD_RETRY=0
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0xFF800000
+CONFIG_MTD_PHYSMAP_LEN=0x00800000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=1
+# CONFIG_MTD_PLATRAM is not set
+CONFIG_MTD_IOMEGA8241=y
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+CONFIG_BLK_DEV_RAM_COUNT=16
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_IDEPCI_SHARE_IRQ is not set
+CONFIG_BLK_DEV_OFFBOARD=y
+# CONFIG_BLK_DEV_GENERIC is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+# CONFIG_BLK_DEV_SL82C105 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+# CONFIG_IDEDMA_PCI_AUTO is not set
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+# CONFIG_BLK_DEV_PIIX is not set
+# CONFIG_BLK_DEV_IT821X is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+CONFIG_BLK_DEV_VIA82CXXX=y
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+CONFIG_SCSI_SPI_ATTRS=y
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+CONFIG_SCSI_QLA2XXX=y
+# CONFIG_SCSI_QLA21XX is not set
+# CONFIG_SCSI_QLA22XX is not set
+# CONFIG_SCSI_QLA2300 is not set
+# CONFIG_SCSI_QLA2322 is not set
+# CONFIG_SCSI_QLA6312 is not set
+# CONFIG_SCSI_QLA24XX is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=y
+CONFIG_MD_LINEAR=y
+CONFIG_MD_RAID0=y
+CONFIG_MD_RAID1=y
+CONFIG_MD_RAID10=y
+CONFIG_MD_RAID5=y
+# CONFIG_MD_RAID6 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_MD_FAULTY is not set
+# CONFIG_BLK_DEV_DM is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Macintosh device drivers
+#
+# CONFIG_WINDFARM is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+CONFIG_R8169=y
+# CONFIG_R8169_NAPI is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+# CONFIG_SERIAL_8250_SHARE_IRQ is not set
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+CONFIG_8241EMI=y
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# 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_I801 is not set
+# CONFIG_I2C_I810 is not set
+# CONFIG_I2C_PIIX4 is not set
+CONFIG_I2C_MPC=y
+# CONFIG_I2C_NFORCE2 is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PROSAVAGE is not set
+# CONFIG_I2C_SAVAGE4 is not set
+# CONFIG_SCx200_ACB is not set
+# CONFIG_I2C_SIS5595 is not set
+# CONFIG_I2C_SIS630 is not set
+# CONFIG_I2C_SIS96X is not set
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_VIA is not set
+# CONFIG_I2C_VIAPRO is not set
+# CONFIG_I2C_VOODOO3 is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_SENSORS_DS1337=y
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_M41T00 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_RTC_X1205_I2C is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 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_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SIS5595 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VIA686A is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=y
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# SN Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=y
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SERIAL_TEXT_DEBUG=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
diff --git a/packages/linux/linux-storcenter/kernel.patch-2.6.15.7 b/packages/linux/linux-storcenter/kernel.patch-2.6.15.7
new file mode 100644
index 0000000000..030ef64d2a
--- /dev/null
+++ b/packages/linux/linux-storcenter/kernel.patch-2.6.15.7
@@ -0,0 +1,1181 @@
+--- linux-2.6.15.orig/arch/ppc/platforms/iomega8241.c 1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.15/arch/ppc/platforms/iomega8241.c 2008-01-07 16:56:45.628534603 -0800
+@@ -0,0 +1,603 @@
++/*
++ * arch/ppc/platforms/iomega8241.c
++ *
++ * The Iomega StorCenter Network Hard Drive platform is based on the
++ * original sandpoint test platform. That GNU copyright information
++ * is reproduced below:
++ *
++ * Board setup routines for the Motorola SPS Sandpoint Test Platform.
++ *
++ * Author: Mark A. Greer
++ * mgreer@mvista.com
++ *
++ * 2000-2003 (c) MontaVista Software, Inc. This file is licensed under
++ * the terms of the GNU General Public License version 2. This program
++ * is licensed "as is" without any warranty of any kind, whether express
++ * or implied.
++ */
++
++/*
++ * Iomega StorCenter Network Hard Drive.
++ *
++ * Maintainer (Iomega Port): Anthony Russello
++ * russello@iomega.com
++ * Much of the below code was taken from the original sandpoint.c/.h port
++ * done my Mark A. Greer (see above copyright information). It was adapted
++ * to support a custom board.
++ */
++
++#include <linux/config.h>
++#include <linux/stddef.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/errno.h>
++#include <linux/reboot.h>
++#include <linux/pci.h>
++#include <linux/kdev_t.h>
++#include <linux/major.h>
++#include <linux/initrd.h>
++#include <linux/console.h>
++#include <linux/delay.h>
++#include <linux/irq.h>
++#include <linux/ide.h>
++#include <linux/seq_file.h>
++#include <linux/root_dev.h>
++#include <linux/serial.h>
++#include <linux/tty.h> /* for linux/serial_core.h */
++#include <linux/serial_8250.h>
++
++#include <asm/system.h>
++#include <asm/pgtable.h>
++#include <asm/page.h>
++#include <asm/time.h>
++#include <asm/dma.h>
++#include <asm/io.h>
++#include <asm/machdep.h>
++#include <asm/prom.h>
++#include <asm/smp.h>
++#include <asm/vga.h>
++#include <asm/open_pic.h>
++#include <asm/todc.h>
++#include <asm/bootinfo.h>
++#include <asm/mpc10x.h>
++#include <asm/pci-bridge.h>
++#include <asm/kgdb.h>
++
++#include "iomega8241.h"
++
++/* Real Time Clock */
++extern spinlock_t rtc_lock;
++extern int ds1337_do_command(int id, int cmd, void *arg);
++#define DS1337_GET_DATE 0
++#define DS1337_SET_DATE 1
++
++unsigned char __res[sizeof(bd_t)];
++
++static void iomega8241_halt(void);
++
++/*
++ * Define all of the IRQ senses and polarities.
++ */
++static u_char iomega8241_openpic_initsenses[] __initdata = {
++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 0: AN983B */
++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 1: IDE VIA DS6410 */
++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 2: USB */
++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 3: USB */
++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 4: USB */
++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 5: UART0 */
++ (IRQ_SENSE_LEVEL | IRQ_POLARITY_NEGATIVE), /* 6: UART1 */
++};
++
++/*
++ * Define all of the PCI IRQ Mappings
++ */
++static inline int
++iomega8241_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
++{
++ static char pci_irq_table[][4] =
++ /*
++ * PCI IDSEL/INTPIN->INTLINE
++ * A B C D
++ */
++ {
++ { 1, 1, 0, 0 },
++ { 2, 3, 4, 1 },
++ { 0, 0, 4, 4 },
++ { 3, 3, 4, 4 },
++ { 3, 3, 4, 4 },
++ };
++
++ const long min_idsel = 13, max_idsel = 17, irqs_per_slot = 4;
++ return PCI_IRQ_TABLE_LOOKUP;
++}
++
++static int
++iomega8241_exclude_device(u_char bus, u_char devfn)
++{
++ if ((bus == 0) && (PCI_SLOT(devfn) == IOMEGA8241_HOST_BRIDGE_IDSEL))
++ return PCIBIOS_DEVICE_NOT_FOUND;
++ else
++ return PCIBIOS_SUCCESSFUL;
++}
++
++static void __init
++iomega8241_find_bridges(void)
++{
++ struct pci_controller *hose;
++
++ hose = pcibios_alloc_controller();
++
++ if (!hose)
++ return;
++
++ hose->first_busno = 0;
++ hose->last_busno = 0x1;
++
++ if (mpc10x_bridge_init(hose,
++ MPC10X_MEM_MAP_B,
++ MPC10X_MEM_MAP_B,
++ MPC10X_MAPB_EUMB_BASE) == 0) {
++
++ ppc_md.pci_exclude_device = iomega8241_exclude_device;
++ hose->last_busno = pciauto_bus_scan(hose, hose->first_busno);
++ ppc_md.pcibios_fixup = NULL;
++ ppc_md.pcibios_fixup_bus = NULL;
++ ppc_md.pci_swizzle = common_swizzle;
++ ppc_md.pci_map_irq = iomega8241_map_irq;
++ }
++ else {
++ if (ppc_md.progress)
++ ppc_md.progress("Bridge init failed", 0x100);
++ printk("Host bridge init failed\n");
++ }
++ return;
++}
++
++
++static ulong
++get_bus_frequency(void)
++{
++ bd_t *bp = (bd_t *)__res;
++ ulong freq;
++ if (133333332 == bp->bi_busfreq)
++ freq = 132000000;
++ if (99999999 == bp->bi_busfreq)
++ freq = 100000000;
++ return(freq);
++}
++
++
++static void
++iomega8241_early_serial_map(void)
++{
++#if defined(CONFIG_SERIAL_8250)
++ struct plat_serial8250_port *pdata;
++ bd_t *binfo = (bd_t *) __res;
++
++ pdata = (struct plat_serial8250_port *) ppc_sys_get_pdata(MPC10X_UART0);
++ pdata[0].uartclk = get_bus_frequency();
++ pdata[0].membase = (unsigned char __iomem *) IOMEGA8241_SERIAL_0;
++
++ pdata = (struct plat_serial8250_port *) ppc_sys_get_pdata(MPC10X_UART1);
++ pdata[0].uartclk = get_bus_frequency();
++ pdata[0].membase = (unsigned char __iomem *) IOMEGA8241_SERIAL_1;
++#endif
++}
++
++static void __init
++iomega8241_setup_arch(void)
++{
++ int i = 0;
++
++ loops_per_jiffy = 100000000 / HZ;
++
++#ifdef CONFIG_BLK_DEV_INITRD
++ if (initrd_start)
++ ROOT_DEV = Root_RAM0;
++ else
++#endif
++#ifdef CONFIG_ROOT_NFS
++ ROOT_DEV = Root_NFS;
++#else
++ ROOT_DEV = Root_HDA1;
++#endif
++
++ /* Lookup PCI host bridges */
++ iomega8241_find_bridges();
++
++ iomega8241_early_serial_map();
++
++ printk(KERN_INFO "Iomega StorCenter Network Hard Drive\n");
++ printk(KERN_INFO "Linux Kernel by Protium Computing\n");
++
++ /* DINK32 12.3 and below do not correctly enable any caches.
++ * We will do this now with good known values. Future versions
++ * of DINK32 are supposed to get this correct.
++ */
++ if (cpu_has_feature(CPU_FTR_SPEC7450))
++ /* 745x is different. We only want to pass along enable. */
++ _set_L2CR(L2CR_L2E);
++ else if (cpu_has_feature(CPU_FTR_L2CR))
++ /* All modules have 1MB of L2. We also assume that an
++ * L2 divisor of 3 will work.
++ */
++ _set_L2CR(L2CR_L2E | L2CR_L2SIZ_1MB | L2CR_L2CLK_DIV3
++ | L2CR_L2RAM_PIPE | L2CR_L2OH_1_0 | L2CR_L2DF);
++#if 0
++ /* Untested right now. */
++ if (cpu_has_feature(CPU_FTR_L3CR)) {
++ /* Magic value. */
++ _set_L3CR(0x8f032000);
++ }
++#endif
++}
++
++#define IOMEGA8241_87308_CFG_ADDR 0x15c
++#define IOMEGA8241_87308_CFG_DATA 0x15d
++
++#define IOMEGA8241_87308_CFG_INB(addr, byte) { \
++ outb((addr), IOMEGA8241_87308_CFG_ADDR); \
++ (byte) = inb(IOMEGA8241_87308_CFG_DATA); \
++}
++
++#define IOMEGA8241_87308_CFG_OUTB(addr, byte) { \
++ outb((addr), IOMEGA8241_87308_CFG_ADDR); \
++ outb((byte), IOMEGA8241_87308_CFG_DATA); \
++}
++
++#define IOMEGA8241_87308_SELECT_DEV(dev_num) { \
++ IOMEGA8241_87308_CFG_OUTB(0x07, (dev_num)); \
++}
++
++#define IOMEGA8241_87308_DEV_ENABLE(dev_num) { \
++ IOMEGA8241_87308_SELECT_DEV(dev_num); \
++ IOMEGA8241_87308_CFG_OUTB(0x30, 0x01); \
++}
++
++static int __init
++iomega8241_request_io(void)
++{
++ request_region(0x00,0x20,"dma1");
++ request_region(0x20,0x20,"pic1");
++ request_region(0x40,0x20,"timer");
++ request_region(0x80,0x10,"dma page reg");
++ request_region(0xa0,0x20,"pic2");
++ request_region(0xc0,0x20,"dma2");
++
++ return 0;
++}
++
++arch_initcall(iomega8241_request_io);
++
++/*
++ * Interrupt setup and service. Interrrupts on the Sandpoint come
++ * from the four PCI slots plus the 8259 in the Winbond Super I/O (SIO).
++ * The 8259 is cascaded from EPIC IRQ0, IRQ1-4 map to PCI slots 1-4,
++ * IDE is on EPIC 7 and 8.
++ */
++static void __init
++iomega8241_init_IRQ(void)
++{
++ OpenPIC_InitSenses = iomega8241_openpic_initsenses;
++ OpenPIC_NumInitSenses = sizeof(iomega8241_openpic_initsenses);
++
++ /*
++ * We need to tell openpic_set_sources where things actually are.
++ * mpc10x_common will set up OpenPIC_Addr at ioremap(EUMB phys base +
++ * EPIC offset (0x40000)); The EPIC IRQ register address map -
++ * Interrupt Source Configuration Registers gives these numbers as
++ * offsets starting at 0x50200, we need to adjust accordingly
++ */
++ mpc10x_set_openpic();
++}
++
++static int
++iomega8241_get_irq(struct pt_regs *regs)
++{
++ int irq;
++
++ irq = openpic_irq();
++ if (irq == OPENPIC_VEC_SPURIOUS)
++ irq = -1;
++
++ return irq;
++}
++
++static u32
++iomega8241_irq_canonicalize(u32 irq)
++{
++ return irq;
++}
++
++static unsigned long __init
++iomega8241_find_end_of_memory(void)
++{
++ bd_t *bp = (bd_t *)__res;
++
++ if (bp->bi_memsize)
++ return bp->bi_memsize;
++
++ return 64*1024*1024;
++}
++
++static void __init
++iomega8241_map_io(void)
++{
++ /* changes suggested by Freescale: */
++ io_block_mapping(0xfc000000, 0xfc000000, 0x04000000, _PAGE_IO);
++}
++
++static void
++iomega8241_restart(char *cmd)
++{
++ local_irq_disable();
++
++ /* Set exception prefix high - to the firmware */
++ _nmask_and_or_msr(0, MSR_IP);
++
++ for(;;); /* Spin until reset happens */
++}
++
++static void
++iomega8241_power_off(void)
++{
++ local_irq_disable();
++ for(;;); /* No way to shut power off with software */
++ /* NOTREACHED */
++}
++
++static void
++iomega8241_halt(void)
++{
++ iomega8241_power_off();
++ /* NOTREACHED */
++}
++
++static int
++iomega8241_show_cpuinfo(struct seq_file *m)
++{
++ seq_printf(m, "vendor\t\t: Iomega Corporation\n");
++ seq_printf(m, "machine\t\t: Iomega StorCenter Network Hard Drive\n");
++
++ return 0;
++}
++
++#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
++/*
++ * IDE support.
++ */
++static int iomega8241_ide_ports_known = 0;
++static unsigned long iomega8241_ide_regbase[MAX_HWIFS];
++static unsigned long iomega8241_ide_ctl_regbase[MAX_HWIFS];
++static unsigned long iomega8241_idedma_regbase;
++
++static void
++iomega8241_ide_probe(void)
++{
++ struct pci_dev *pdev = pci_get_device(PCI_VENDOR_ID_VIA,
++ PCI_DEVICE_ID_VIA_6410, NULL);
++
++ if (pdev) {
++ iomega8241_ide_regbase[0]=pdev->resource[0].start;
++ iomega8241_ide_regbase[1]=pdev->resource[2].start;
++ iomega8241_ide_ctl_regbase[0]=pdev->resource[1].start;
++ iomega8241_ide_ctl_regbase[1]=pdev->resource[3].start;
++ iomega8241_idedma_regbase=pdev->resource[4].start;
++
++ printk("Found: VIA VT6410 based IDE\n");
++ }
++
++ iomega8241_ide_ports_known = 1;
++}
++
++static int
++iomega8241_ide_default_irq(unsigned long base)
++{
++ if (iomega8241_ide_ports_known == 0)
++ iomega8241_ide_probe();
++
++ if (base == iomega8241_ide_regbase[0])
++ return IDE_INTRUPT;
++ else if (base == iomega8241_ide_regbase[1])
++ return IDE_INTRUPT;
++ else
++ return 0;
++}
++
++static unsigned long
++iomega8241_ide_default_io_base(int index)
++{
++ if (iomega8241_ide_ports_known == 0)
++ iomega8241_ide_probe();
++
++ return iomega8241_ide_regbase[index];
++}
++
++static void __init
++iomega8241_ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port,
++ unsigned long ctrl_port, int *irq)
++{
++ unsigned long reg = data_port;
++ uint alt_status_base;
++ int i;
++
++ for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
++ hw->io_ports[i] = reg++;
++ }
++
++ if (data_port == iomega8241_ide_regbase[0]) {
++ alt_status_base = iomega8241_ide_ctl_regbase[0] + 2;
++ hw->irq = IDE_INTRUPT;
++ } else if (data_port == iomega8241_ide_regbase[1]) {
++ alt_status_base = iomega8241_ide_ctl_regbase[1] + 2;
++ hw->irq = IDE_INTRUPT;
++ } else {
++ alt_status_base = 0;
++ hw->irq = 0;
++ }
++
++ if (ctrl_port) {
++ hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port;
++ } else {
++ hw->io_ports[IDE_CONTROL_OFFSET] = alt_status_base;
++ }
++
++ if (irq != NULL) {
++ *irq = hw->irq;
++ }
++}
++#endif
++
++/*
++ * Set BAT 3 to map 0xf8000000 to end of physical memory space 1-to-1.
++ */
++static __inline__ void
++iomega8241_set_bat(void)
++{
++ unsigned long bat3u, bat3l;
++
++ __asm__ __volatile__(
++ " lis %0,0xf800\n \
++ ori %1,%0,0x002a\n \
++ ori %0,%0,0x0ffe\n \
++ mtspr 0x21e,%0\n \
++ mtspr 0x21f,%1\n \
++ isync\n \
++ sync "
++ : "=r" (bat3u), "=r" (bat3l));
++}
++
++TODC_ALLOC();
++
++/* Real Time Clock support.
++ * StorCenter has a DS1337 accessed by I2C.
++ */
++static void __init
++iomega8241_calibrate_decr(void)
++{
++ ulong freq = get_bus_frequency() / 4;
++ printk("time_init: decrementer frequency = %lu.%.6lu MHz\n",
++ freq/1000000, freq%1000000);
++ if (freq == 33000000)
++ freq += 332550;
++
++ tb_ticks_per_jiffy = freq / HZ;
++ tb_to_us = mulhwu_scale_factor(freq, 1000000);
++
++ return;
++}
++
++
++static ulong iomega8241_get_rtc_time(void)
++{
++ struct rtc_time tm;
++ int result;
++
++ spin_lock(&rtc_lock);
++ result = ds1337_do_command(0, DS1337_GET_DATE, &tm);
++ spin_unlock(&rtc_lock);
++
++ if (result == 0)
++ result = mktime(tm.tm_year+1900, tm.tm_mon, tm.tm_mday,
++ tm.tm_hour, tm.tm_min, tm.tm_sec);
++
++ return result;
++}
++
++
++static int iomega8241_set_rtc_time(unsigned long nowtime)
++{
++ struct rtc_time tm;
++ int result;
++
++ to_tm(nowtime, &tm);
++ tm.tm_year -= 1900;
++ spin_lock(&rtc_lock);
++ result = ds1337_do_command(0, DS1337_SET_DATE, &tm);
++ spin_unlock(&rtc_lock);
++
++ return result;
++}
++
++
++static void __init
++iomega8241_init2(void)
++{
++ ppc_md.set_rtc_time = iomega8241_set_rtc_time;
++ ppc_md.get_rtc_time = iomega8241_get_rtc_time;
++}
++
++
++void __init
++platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
++ unsigned long r6, unsigned long r7)
++{
++ parse_bootinfo(find_bootinfo());
++
++ /* ASSUMPTION: If both r3 (bd_t pointer) and r6 (cmdline pointer)
++ * are non-zero, then we should use the board info from the bd_t
++ * structure and the cmdline pointed to by r6 instead of the
++ * information from birecs, if any. Otherwise, use the information
++ * from birecs as discovered by the preceeding call to
++ * parse_bootinfo(). This rule should work with both PPCBoot, which
++ * uses a bd_t board info structure, and the kernel boot wrapper,
++ * which uses birecs.
++ */
++ if (r3 && r6) {
++ /* copy board info structure */
++ memcpy( (void *)__res,(void *)(r3+KERNELBASE), sizeof(bd_t) );
++ /* copy command line */
++ *(char *)(r7+KERNELBASE) = 0;
++ strcpy(cmd_line, (char *)(r6+KERNELBASE));
++ }
++
++#ifdef CONFIG_BLK_DEV_INITRD
++ /* take care of initrd if we have one */
++ if (r4) {
++ initrd_start = r4 + KERNELBASE;
++ initrd_end = r5 + KERNELBASE;
++ }
++#endif /* CONFIG_BLK_DEV_INITRD */
++
++ /* Map in board regs, etc. */
++ iomega8241_set_bat();
++
++ isa_io_base = MPC10X_MAPB_ISA_IO_BASE;
++ isa_mem_base = MPC10X_MAPB_ISA_MEM_BASE;
++ pci_dram_offset = MPC10X_MAPB_DRAM_OFFSET;
++ ISA_DMA_THRESHOLD = 0x00ffffff;
++ DMA_MODE_READ = 0x44;
++ DMA_MODE_WRITE = 0x48;
++
++ ppc_md.setup_arch = iomega8241_setup_arch;
++ ppc_md.show_cpuinfo = iomega8241_show_cpuinfo;
++ ppc_md.irq_canonicalize = iomega8241_irq_canonicalize;
++ ppc_md.init_IRQ = iomega8241_init_IRQ;
++ ppc_md.get_irq = iomega8241_get_irq;
++ ppc_md.init = iomega8241_init2;
++
++ ppc_md.restart = iomega8241_restart;
++ ppc_md.power_off = iomega8241_power_off;
++ ppc_md.halt = iomega8241_halt;
++
++ ppc_md.find_end_of_memory = iomega8241_find_end_of_memory;
++ ppc_md.setup_io_mappings = iomega8241_map_io;
++
++ ppc_md.time_init = NULL;
++ ppc_md.set_rtc_time = NULL;
++ ppc_md.get_rtc_time = NULL;
++ ppc_md.calibrate_decr = iomega8241_calibrate_decr;
++
++/*
++ * extra credit:
++ *
++ * ppc_md.nvram_read_val = todc_mc146818_read_val;
++ * ppc_md.nvram_write_val = todc_mc146818_write_val;
++ */
++#if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
++ ppc_ide_md.default_irq = iomega8241_ide_default_irq;
++ ppc_ide_md.default_io_base = iomega8241_ide_default_io_base;
++ ppc_ide_md.ide_init_hwif = iomega8241_ide_init_hwif_ports;
++#endif
++
++}
+--- linux-2.6.15.orig/arch/ppc/Kconfig 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/arch/ppc/Kconfig 2008-01-01 22:12:32.365126129 -0800
+@@ -649,6 +649,15 @@
+ End of Life: -
+ URL: <http://www.windriver.com/>
+
++config IOMEGA8241
++ bool "IOMEGA8241"
++ ---help---
++ Iomega StorCenter Network Hard Drive
++ Manufacturer: Iomega Corporation
++ Date of Release: May 2005
++ End of Life: -
++ URL: <http://www.iomega.com/>
++
+ config SBS8260
+ bool "SBS8260"
+
+@@ -801,7 +810,7 @@
+ depends on SANDPOINT || SPRUCE || PPLUS || \
+ PRPMC750 || PRPMC800 || LOPEC || \
+ (EV64260 && !SERIAL_MPSC) || CHESTNUT || RADSTONE_PPC7D || \
+- 83xx
++ 83xx || IOMEGA8241
+ default y
+
+ config FORCE
+@@ -870,13 +879,13 @@
+
+ config MPC10X_BRIDGE
+ bool
+- depends on POWERPMC250 || LOPEC || SANDPOINT
++ depends on POWERPMC250 || LOPEC || SANDPOINT || IOMEGA8241
+ select PPC_INDIRECT_PCI
+ default y
+
+ config MPC10X_OPENPIC
+ bool
+- depends on POWERPMC250 || LOPEC || SANDPOINT
++ depends on POWERPMC250 || LOPEC || SANDPOINT || IOMEGA8241
+ default y
+
+ config MPC10X_STORE_GATHERING
+--- linux-2.6.15.orig/arch/ppc/boot/Makefile 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/arch/ppc/boot/Makefile 2008-01-01 22:12:32.365126129 -0800
+@@ -13,7 +13,7 @@
+ CFLAGS += -fno-builtin -D__BOOTER__ -Iarch/$(ARCH)/boot/include
+ HOSTCFLAGS += -Iarch/$(ARCH)/boot/include
+
+-BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd
++BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd uImage
+
+ bootdir-y := simple
+ bootdir-$(CONFIG_PPC_OF) += openfirmware
+--- linux-2.6.15.orig/arch/ppc/boot/simple/Makefile 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/arch/ppc/boot/simple/Makefile 2008-01-01 22:12:32.365126129 -0800
+@@ -158,6 +158,10 @@
+ end-$(CONFIG_SANDPOINT) := sandpoint
+ cacheflag-$(CONFIG_SANDPOINT) := -include $(clear_L2_L3)
+
++ end-$(CONFIG_IOMEGA8241) := iomega8241
++ cacheflag-$(CONFIG_IOMEGA8241) := -include $(clear_L2_L3)
++
++
+ zimage-$(CONFIG_SPRUCE) := zImage-TREE
+ zimageinitrd-$(CONFIG_SPRUCE) := zImage.initrd-TREE
+ end-$(CONFIG_SPRUCE) := spruce
+--- linux-2.6.15.orig/arch/ppc/platforms/Makefile 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/arch/ppc/platforms/Makefile 2008-01-01 22:12:32.365126129 -0800
+@@ -42,6 +42,7 @@
+ obj-$(CONFIG_RADSTONE_PPC7D) += radstone_ppc7d.o
+ obj-$(CONFIG_SANDPOINT) += sandpoint.o
+ obj-$(CONFIG_SBC82xx) += sbc82xx.o
++obj-$(CONFIG_IOMEGA8241) += iomega8241.o
+ obj-$(CONFIG_SPRUCE) += spruce.o
+ obj-$(CONFIG_LITE5200) += lite5200.o
+ obj-$(CONFIG_EV64360) += ev64360.o
+--- linux-2.6.15.orig/arch/ppc/platforms/iomega8241.h 1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.15/arch/ppc/platforms/iomega8241.h 2008-01-01 22:12:32.365126129 -0800
+@@ -0,0 +1,66 @@
++/*
++ * arch/ppc/platforms/iomega8241.h
++ *
++ * The Iomega StorCenter Network Hard Drive platform is based on the
++ * original sandpoint test platform. That GNU copyright information
++ * is reproduced below:
++ *
++ * Board setup routines for the Motorola SPS Sandpoint Test Platform.
++ *
++ * Author: Mark A. Greer
++ * mgreer@mvista.com
++ *
++ * 2000-2003 (c) MontaVista Software, Inc. This file is licensed under
++ * the terms of the GNU General Public License version 2. This program
++ * is licensed "as is" without any warranty of any kind, whether express
++ * or implied.
++ */
++
++#ifndef __PPC_PLATFORMS_IOMEGA8241_H
++#define __PPC_PLATFORMS_IOMEGA8241_H
++
++#include <asm/ppcboot.h>
++#include <linux/config.h>
++
++/*
++ * G2 Configuration:
++ *
++ * DEVICE IDSEL INTERRUPT NUMBER
++ * AN983B AD12 IRQ0
++ * IDE Via DS6410 AD13 IRQ1
++ * NEC USB uPD720101 AD14 IRQ2,3,4
++ */
++
++#define IDE_INTRUPT 1
++
++/*
++ * The sandpoint boards have processor modules that either have an 8240 or
++ * an MPC107 host bridge on them. These bridges have an IDSEL line that allows
++ * them to respond to PCI transactions as if they were a normal PCI devices.
++ * However, the processor on the processor side of the bridge can not reach
++ * out onto the PCI bus and then select the bridge or bad things will happen
++ * (documented in the 8240 and 107 manuals).
++ * Because of this, we always skip the bridge PCI device when accessing the
++ * PCI bus. The PCI slot that the bridge occupies is defined by the macro
++ * below.
++ */
++#define IOMEGA8241_HOST_BRIDGE_IDSEL 12
++
++void board_find_bridges(void);
++void iomega8241_fix_uart(void);
++/*
++ * Serial defines.
++ */
++#define IOMEGA8241_SERIAL_0 0xFDF04500
++#define IOMEGA8241_SERIAL_1 0xFDF04600
++
++#define RS_TABLE_SIZE 4
++
++/* Rate for the 1.8432 Mhz clock for the onboard serial chip */
++#define BASE_BAUD ( 100000000 / 16 ) /* 100Mhz speed, divided by 16
++ to make the output freqency*/
++#define UART_CLK 1843200
++
++#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF|ASYNC_SKIP_TEST)
++
++#endif /* __PPC_PLATFORMS_IOMEGA8241_H */
+--- linux-2.6.15.orig/arch/ppc/syslib/Makefile 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/arch/ppc/syslib/Makefile 2008-01-01 22:12:32.365126129 -0800
+@@ -71,6 +71,7 @@
+ obj-$(CONFIG_PRPMC800) += open_pic.o pci_auto.o
+ obj-$(CONFIG_RADSTONE_PPC7D) += pci_auto.o
+ obj-$(CONFIG_SANDPOINT) += pci_auto.o todc_time.o
++obj-$(CONFIG_IOMEGA8241) += pci_auto.o
+ obj-$(CONFIG_SBC82xx) += todc_time.o
+ obj-$(CONFIG_SPRUCE) += cpc700_pic.o pci_auto.o \
+ todc_time.o
+--- linux-2.6.15.orig/arch/ppc/syslib/mpc10x_common.c 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/arch/ppc/syslib/mpc10x_common.c 2008-01-01 22:12:32.365126129 -0800
+@@ -35,6 +35,10 @@
+ #include <asm/mpc10x.h>
+ #include <asm/ppc_sys.h>
+
++#ifdef CONFIG_IOMEGA8241
++#define NUM_8259_INTERRUPTS 0
++#endif
++
+ #ifdef CONFIG_MPC10X_OPENPIC
+ #ifdef CONFIG_EPIC_SERIAL_MODE
+ #define EPIC_IRQ_BASE (epic_serial_mode ? 16 : 5)
+--- linux-2.6.15.orig/drivers/char/Kconfig 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/drivers/char/Kconfig 2008-01-01 22:12:32.369126358 -0800
+@@ -999,6 +999,25 @@
+ The mmtimer device allows direct userspace access to the
+ Altix system timer.
+
++config 8241EMI
++ tristate "EMI fixes for the 8241 processor"
++ depends on IOMEGA8241
++ default y
++ help
++ By changing the ODCR value from 0xAB to 0x95, we are able to reduce
++ the EMI along the PCI and MEMORY buses.
++
++ msb 7 1 Controls the drive strength of DRV_PCI (40ohm)
++ 6 0 reserved
++ 5-4 01 Controls the drive strength of SDRAM_CLK (40ohm)
++ 3-2 01 Controls the drive strength of PCI_CLK and
++ PCI_CLK_SYNC_OUT (40ohm)
++ 1-0 01 Controls the drive strength of SDRAM_CLK and
++ SDRAM_SYNC_OUT (40ohm)
++
++ See table 4-19 on page 4-22 of the MPC8245 Integrated Processor
++ User's Manual for details on these registers.
++
+ source "drivers/char/tpm/Kconfig"
+
+ config TELCLOCK
+--- linux-2.6.15.orig/drivers/char/Makefile 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/drivers/char/Makefile 2008-01-01 22:12:32.369126358 -0800
+@@ -48,6 +48,7 @@
+ obj-$(CONFIG_VIOTAPE) += viotape.o
+ obj-$(CONFIG_HVCS) += hvcs.o
+ obj-$(CONFIG_SGI_MBCS) += mbcs.o
++obj-$(CONFIG_8241EMI) += emiregs.o
+
+ obj-$(CONFIG_PRINTER) += lp.o
+ obj-$(CONFIG_TIPAR) += tipar.o
+--- linux-2.6.15.orig/drivers/char/emiregs.c 1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.15/drivers/char/emiregs.c 2008-01-01 22:12:32.369126358 -0800
+@@ -0,0 +1,68 @@
++#include <linux/init.h>
++#include <linux/module.h>
++
++MODULE_LICENSE ("GPL");
++
++/*
++ The following CONFIG_READ_BYTE and CONFIG_WRITE_BYTE
++ functions were taken from u-boot
++
++ By changing the ODCR value from 0xAB to 0x95, we are able to reduce
++ the EMI along the PCI and MEMORY buses.
++
++ msb 7 1 Controls the drive strength of DRV_PCI (40ohm)
++ 6 0 reserved
++ 5-4 01 Controls the drive strength of SDRAM_CLK (40ohm)
++ 3-2 01 Controls the drive strength of PCI_CLK and
++ PCI_CLK_SYNC_OUT (40ohm)
++ 1-0 01 Controls the drive strength of SDRAM_CLK and
++ SDRAM_SYNC_OUT (40ohm)
++
++ See table 4-19 on page 4-22 of the MPC8245 Integrated Processor
++ User's Manual for details on these registers.
++*/
++#define CONFIG_ADDR 0xfec00000
++#define CONFIG_DATA 0xfee00000
++
++#define CONFIG_READ_BYTE( addr, reg ) \
++ __asm__ ( \
++ " stwbrx %1, 0, %2\n \
++ sync\n \
++ lbz %0, %4(%3)\n \
++ sync " \
++ : "=r" (reg) \
++ : "r" ((addr) & ~3), "r" (CONFIG_ADDR), \
++ "b" (CONFIG_DATA), "n" ((addr) & 3));
++
++#define CONFIG_WRITE_BYTE( addr, data ) \
++ __asm__ __volatile__( \
++ " stwbrx %1, 0, %0\n \
++ sync\n \
++ stb %3, %4(%2)\n \
++ sync " \
++ : /* no output */ \
++ : "r" (CONFIG_ADDR), "r" ((addr) & ~3), \
++ "b" (CONFIG_DATA), "r" (data), \
++ "n" ((addr) & 3));
++
++
++static int emiregs_init (void)
++ {
++ u_long val, val2;
++ CONFIG_READ_BYTE (0x80000073, val);
++ CONFIG_WRITE_BYTE (0x80000073, 0x95);
++ CONFIG_READ_BYTE (0x80000073, val2);
++
++ printk (KERN_INFO "8241 ODCR: changed from 0x%02lx, to 0x%02lx\n", val, val2);
++
++ return 0;
++ }
++
++static void emiregs_exit (void)
++ {
++ printk (KERN_INFO "emiregs module exitting\n");
++ return;
++ }
++
++module_init (emiregs_init);
++module_exit (emiregs_exit);
+--- linux-2.6.15.orig/drivers/char/rtc.c 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/drivers/char/rtc.c 2008-01-01 22:12:32.369126358 -0800
+@@ -514,9 +514,16 @@
+ }
+ case RTC_RD_TIME: /* Read the time/date from RTC */
+ {
++#ifdef CONFIG_IOMEGA8241
++ unsigned long usi_time;
++ usi_time = ds1337_get_time();
++ to_tm(usi_time,wtime);
++ break;
++#else
+ memset(&wtime, 0, sizeof(struct rtc_time));
+ rtc_get_rtc_time(&wtime);
+ break;
++#endif /* CONFIG_IOMEGA8241 */
+ }
+ case RTC_SET_TIME: /* Set the RTC */
+ {
+@@ -558,7 +565,7 @@
+
+ if ((yrs -= epoch) > 255) /* They are unsigned */
+ return -EINVAL;
+-
++#ifndef CONFIG_IOMEGA8241
+ spin_lock_irq(&rtc_lock);
+ #ifdef CONFIG_MACH_DECSTATION
+ real_yrs = yrs;
+@@ -614,6 +621,11 @@
+
+ spin_unlock_irq(&rtc_lock);
+ return 0;
++#else /* CONFIG_IOMEGA8241 */
++ /* next is the forth API provided by ds1337.c USI-SS */
++ ds1337_usi_set_time(yrs,mon,day,hrs,min,sec);
++ break;
++#endif /* CONFIG_IOMEGA8241 */
+ }
+ #ifdef RTC_IRQ
+ case RTC_IRQP_READ: /* Read the periodic IRQ rate. */
+--- linux-2.6.15.orig/drivers/i2c/busses/i2c-mpc.c 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/drivers/i2c/busses/i2c-mpc.c 2008-01-01 22:12:32.369126358 -0800
+@@ -285,7 +285,11 @@
+ .algo = &mpc_algo,
+ .class = I2C_CLASS_HWMON,
+ .timeout = 1,
++#ifdef CONFIG_IOMEGA8241
++ .retries = 400
++#else
+ .retries = 1
++#endif /* CONFIG_IOMEGA8241 */
+ };
+
+ static int fsl_i2c_probe(struct platform_device *pdev)
+--- linux-2.6.15.orig/drivers/ide/pci/via82cxxx.c 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/drivers/ide/pci/via82cxxx.c 2008-01-02 08:21:42.876113109 -0800
+@@ -305,6 +305,12 @@
+ */
+
+ pci_read_config_byte(dev, VIA_IDE_ENABLE, &v);
++#ifdef CONFIG_IOMEGA8241
++ if(via_config->id == PCI_DEVICE_ID_VIA_6410) {
++ pci_write_config_byte(dev, VIA_IDE_ENABLE, v | 0x3);
++ }
++#endif
++
+
+ /*
+ * Set up FIFO sizes and thresholds.
+@@ -485,7 +492,11 @@
+ .channels = 2,
+ .autodma = AUTODMA,
+ .enablebits = {{0x00,0x00,0x00}, {0x00,0x00,0x00}},
++#ifdef CONFIG_IOMEGA8241
++ .bootable = NEVER_BOARD,
++#else
+ .bootable = ON_BOARD,
++#endif
+ }
+ };
+
+--- linux-2.6.15.orig/drivers/mtd/maps/Kconfig 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/drivers/mtd/maps/Kconfig 2008-01-01 22:12:32.369126358 -0800
+@@ -639,5 +639,10 @@
+
+ This selection automatically selects the map_ram driver.
+
+-endmenu
++config MTD_IOMEGA8241
++ tristate "Map driver for the Iomega 8241 StorCenter board"
++ depends on IOMEGA8241
++ help
++ Map driver for the Iomega StorCenter Network Hard Drive.
+
++endmenu
+--- linux-2.6.15.orig/drivers/mtd/maps/Makefile 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/drivers/mtd/maps/Makefile 2008-01-01 22:12:32.369126358 -0800
+@@ -68,6 +68,7 @@
+ obj-$(CONFIG_MTD_WRSBC8260) += wr_sbc82xx_flash.o
+ obj-$(CONFIG_MTD_DMV182) += dmv182.o
+ obj-$(CONFIG_MTD_SHARP_SL) += sharpsl-flash.o
++obj-$(CONFIG_MTD_IOMEGA8241) += iomega8241_mtd.o
+ obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o
+ obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o
+ obj-$(CONFIG_MTD_MTX1) += mtx-1_flash.o
+--- linux-2.6.15.orig/drivers/mtd/maps/iomega8241_mtd.c 1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.15/drivers/mtd/maps/iomega8241_mtd.c 2008-01-01 22:12:32.369126358 -0800
+@@ -0,0 +1,102 @@
++/*
++ * drivers/mtd/maps/iomega8241_mtd.c
++ *
++ * Iomega Corporation
++ *
++ * Flash mapping for the Iomega StorCenter Network Hard Drive
++ *
++ * This module is based on the mpc1211.c file created by
++ * Saito.K & Jeanne <ksaito@interface.co.jp>
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <asm/io.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/map.h>
++#include <linux/config.h>
++#include <linux/mtd/partitions.h>
++
++#include <asm/immap_cpm2.h>
++
++static struct mtd_info *iomegamtd;
++static struct mtd_partition *parsed_parts;
++
++struct map_info iomega8241_flash_map = {
++ .name = "Flash",
++ .phys = 0xFF800000,
++ .size = 0x800000,
++ .bankwidth = 1,
++};
++
++static struct mtd_partition iomega8241_partitions[] = {
++ {
++ .name = "kernel",
++ /* 1507328 bytes: kernel space */
++ .size = 0x00170000,
++ .offset = 0,
++ }, {
++ .name = "filesystem",
++ /* 5832704 bytes: root partition */
++ .size = 0x00590000,
++ /* start is FF970000 */
++ .offset = MTDPART_OFS_APPEND,
++ }, {
++ .name = "bootloader",
++ /* 262144 bytes for u-boot */
++ .size = 0x00040000,
++ /* start is FFF00000 */
++ .offset = MTDPART_OFS_APPEND,
++ }, {
++ .name = "sysconfig",
++ /* 786432 bytes: sysconf partition */
++ .size = 0x000C0000,
++ /* start is FFF40000 */
++ .offset = MTDPART_OFS_APPEND,
++ }
++};
++
++static int __init
++init_iomega8241_flash(void)
++{
++ int nr_parts;
++
++ iomega8241_flash_map.virt = ioremap(iomega8241_flash_map.phys, iomega8241_flash_map.size);
++
++ simple_map_init(&iomega8241_flash_map);
++
++ printk("Iomega8241: Probing for flash...\n");
++ iomegamtd = do_map_probe("cfi_probe", &iomega8241_flash_map);
++ if (!iomegamtd) {
++ printk(KERN_NOTICE "Flash chips not detected at either possible location.\n");
++ return -ENXIO;
++ }
++ printk("Iomega8241: Flash found at location 0x%x\n", iomega8241_flash_map.phys);
++ iomegamtd->owner = THIS_MODULE;
++
++ parsed_parts = iomega8241_partitions;
++ nr_parts = ARRAY_SIZE(iomega8241_partitions);
++
++ add_mtd_partitions(iomegamtd, parsed_parts, nr_parts);
++ return 0;
++}
++
++static void __exit
++cleanup_iomega8241_flash(void)
++{
++ if (parsed_parts)
++ del_mtd_partitions(iomegamtd);
++ else
++ del_mtd_device(iomegamtd);
++ map_destroy(iomegamtd);
++}
++
++module_init(init_iomega8241_flash);
++module_exit(cleanup_iomega8241_flash);
++
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Anthony Russello <russello@iomega.com>");
++MODULE_DESCRIPTION("Flash mapping for the Iomega StorCenter Network Hard Drive");
+--- linux-2.6.15.orig/drivers/net/wireless/prism54/islpci_dev.c 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/drivers/net/wireless/prism54/islpci_dev.c 2008-01-01 22:12:32.369126358 -0800
+@@ -874,6 +874,7 @@
+
+ /* select the firmware file depending on the device id */
+ switch (pdev->device) {
++ case 0x3873:
+ case 0x3877:
+ strcpy(priv->firmware, ISL3877_IMAGE_FILE);
+ break;
+--- linux-2.6.15.orig/drivers/net/wireless/prism54/islpci_hotplug.c 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/drivers/net/wireless/prism54/islpci_hotplug.c 2008-01-01 22:12:32.373126589 -0800
+@@ -70,6 +70,13 @@
+ PCI_ANY_ID, PCI_ANY_ID,
+ 0, 0, 0
+ },
++ /* Intersil PRISM NetGate 2511 MP PLUS 100mW */
++ {
++ 0x1260, 0x3873,
++ PCI_ANY_ID, PCI_ANY_ID,
++ 0, 0, 0
++ },
++
+
+ /* End of list */
+ {0,0,0,0,0,0,0}
+--- linux-2.6.15.orig/drivers/pci/probe.c 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/drivers/pci/probe.c 2008-01-01 22:12:32.373126589 -0800
+@@ -596,6 +596,20 @@
+ pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
+ class >>= 8; /* upper 3 bytes */
+ dev->class = class;
++#ifdef CONFIG_IOMEGA8241
++ /*
++ * The VIA VT6410 used on the Iomega StorCenter Network Hard Drive reports
++ * with a class of 0x01040 (PCI_CLASS_STORAGE_RAID).
++ *
++ * The following correction allows it to be used as a standard PCI IDE
++ * controller (0x0101)
++ */
++ if((dev->vendor==PCI_VENDOR_ID_VIA)&&(dev->device==PCI_DEVICE_ID_VIA_6410)) {
++ dev->class=0x01018f;
++ printk("PCI: Adjustments for the VIA VT6410 controller have been made\n");
++ }
++#endif /* CONFIG_IOMEGA8241 */
++
+ class >>= 8;
+
+ pr_debug("PCI: Found %s [%04x/%04x] %06x %02x\n", pci_name(dev),
+--- linux-2.6.15.orig/include/asm-ppc/mpc10x.h 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/include/asm-ppc/mpc10x.h 2008-01-01 22:12:32.373126589 -0800
+@@ -76,7 +76,11 @@
+
+ #define MPC10X_MAPB_PCI_INTACK_ADDR 0xfef00000
+ #define MPC10X_MAPB_PCI_IO_START 0x00000000
++#ifdef CONFIG_IOMEGA8241
++#define MPC10X_MAPB_PCI_IO_END 0xFFFF
++#else
+ #define MPC10X_MAPB_PCI_IO_END (0x00c00000 - 1)
++#endif /* CONFIG_IOMEGA8241 */
+ #define MPC10X_MAPB_PCI_MEM_START 0x80000000
+ #define MPC10X_MAPB_PCI_MEM_END (0xc0000000 - 1)
+
+@@ -157,7 +161,12 @@
+ */
+ extern unsigned long ioremap_base;
+ #define MPC10X_MAPA_EUMB_BASE (ioremap_base - MPC10X_EUMB_SIZE)
++
++#ifdef CONFIG_IOMEGA8241
++#define MPC10X_MAPB_EUMB_BASE 0xFDF00000
++#else
+ #define MPC10X_MAPB_EUMB_BASE MPC10X_MAPA_EUMB_BASE
++#endif
+
+ enum ppc_sys_devices {
+ MPC10X_IIC1,
+--- linux-2.6.15.orig/include/asm-ppc/serial.h 2006-01-02 19:21:10.000000000 -0800
++++ linux-2.6.15/include/asm-ppc/serial.h 2008-01-01 22:12:32.373126589 -0800
+@@ -38,6 +38,8 @@
+ #include <asm/mpc85xx.h>
+ #elif defined(CONFIG_RADSTONE_PPC7D)
+ #include <platforms/radstone_ppc7d.h>
++#elif defined(CONFIG_IOMEGA8241)
++#include <platforms/iomega8241.h>
+ #else
+
+ /*
diff --git a/packages/linux/linux-storcenter_2.6.15.7.bb b/packages/linux/linux-storcenter_2.6.15.7.bb
new file mode 100644
index 0000000000..4895b2174e
--- /dev/null
+++ b/packages/linux/linux-storcenter_2.6.15.7.bb
@@ -0,0 +1,36 @@
+DESCRIPTION = "Linux Kernel for the Iomega storcenter platform"
+SECTION = "kernel"
+LICENSE = "GPL"
+DEPENDS = "u-boot-utils-native"
+PR = "r1"
+
+COMPATIBLE_MACHINE = "storcenter"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://kernel.patch-${PV};patch=1 \
+ file://defconfig-${PV} "
+
+S = "${WORKDIR}/linux-${PV}"
+
+inherit kernel
+
+export ARCH = "ppc"
+
+KERNEL_IMAGETYPE = "uImage"
+KERNEL_OUTPUT = "arch/${ARCH}/boot/images/${KERNEL_IMAGETYPE}"
+
+do_configure() {
+ install -m 644 ${WORKDIR}/defconfig-${PV} ${S}/.config
+ make ARCH=${ARCH} oldconfig
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 ${KERNEL_OUTPUT} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_build after do_compile
+
+
diff --git a/packages/linux/linux-tornado-omap2/htctornado/defconfig b/packages/linux/linux-tornado-omap2/htctornado/defconfig
index 9be1116739..ec67393992 100644
--- a/packages/linux/linux-tornado-omap2/htctornado/defconfig
+++ b/packages/linux/linux-tornado-omap2/htctornado/defconfig
@@ -259,7 +259,10 @@ CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_ARPD is not set
diff --git a/packages/linux/linux-tornado-omap2_2.6.16.16.bb b/packages/linux/linux-tornado-omap2_2.6.16.16.bb
index f76442401f..ccbb4cd867 100644
--- a/packages/linux/linux-tornado-omap2_2.6.16.16.bb
+++ b/packages/linux/linux-tornado-omap2_2.6.16.16.bb
@@ -1,6 +1,7 @@
DESCRIPTION = "Linux kernel for HTC Tornado/Typhoon/Hurricane phones."
SECTION = "kernel"
LICENSE = "GPL"
+PR = "r1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.16.tar.bz2 \
http://www.muru.com/linux/omap/patches/old/patch-2.6.16-omap2.bz2;patch=1 \
diff --git a/packages/linux/linux-turbostation_2.6.20.2.bb b/packages/linux/linux-turbostation_2.6.20.2.bb
index 84701e4a6a..91080752fc 100644
--- a/packages/linux/linux-turbostation_2.6.20.2.bb
+++ b/packages/linux/linux-turbostation_2.6.20.2.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "Linux Kernel for the QNAP TurboStation platform"
SECTION = "kernel"
LICENSE = "GPL"
-DEPENDS = "uboot-utils"
-PR = "r1"
+DEPENDS = "u-boot-utils-native"
+PR = "r2"
COMPATIBLE_MACHINE = "turbostation"
diff --git a/packages/linux/linux.inc b/packages/linux/linux.inc
index a08c3a240b..23f314353e 100644
--- a/packages/linux/linux.inc
+++ b/packages/linux/linux.inc
@@ -4,9 +4,18 @@ LICENSE = "GPL"
inherit kernel
-# Not every device needs mkimage to generate a kernel image, but lets make OE a bit more
-# friendly and increase the "Just Works(TM) factor. Building uboot takes only a minute.
-DEPENDS += " u-boot-mkimage-openmoko-native "
+# Add dependency on mkimage for kernels that build a uImage
+
+python __anonymous () {
+
+ import bb
+
+ kerneltype = bb.data.getVar('KERNEL_IMAGETYPE', d, 1) or ''
+ if kerneltype == 'uImage':
+ depends = bb.data.getVar("DEPENDS", d, 1)
+ depends = "%s u-boot-mkimage-openmoko-native" % depends
+ bb.data.setVar("DEPENDS", depends, d)
+}
RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
@@ -90,18 +99,11 @@ do_configure_prepend() {
yes '' | oe_runmake oldconfig
}
-# Support checking the kernel size since some kernels need to reside in partitions
-# with a fixed length or there is a limit in transferring the kernel to memory
-do_sizecheck() {
- if [ ! -z "${KERNEL_IMAGE_MAXSIZE}" ]; then
- size=`ls -l arch/${ARCH}/boot/${KERNEL_IMAGETYPE} | awk '{ print $5}'`
- if [ $size -ge ${KERNEL_IMAGE_MAXSIZE} ]; then
- rm arch/${ARCH}/boot/${KERNEL_IMAGETYPE}
- die "This kernel (size=$size) is too big for your device. Please reduce the size of the kernel by making more of it modular."
- fi
- fi
+do_configure_append_avr32() {
+ sed -i -e s:-mno-pic::g arch/avr32/Makefile
}
+
UBOOT_ENTRYPOINT ?= "20008000"
do_compile_append() {
diff --git a/packages/linux/linux/atngw100/.mtn2git_empty b/packages/linux/linux/atngw100/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux/atngw100/.mtn2git_empty
diff --git a/packages/linux/linux/atngw100/defconfig b/packages/linux/linux/atngw100/defconfig
new file mode 100644
index 0000000000..290dce50c5
--- /dev/null
+++ b/packages/linux/linux/atngw100/defconfig
@@ -0,0 +1,849 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.21
+# Sat Jun 2 10:40:44 2007
+#
+CONFIG_AVR32=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_TIME=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+# CONFIG_TASK_XACCT is not set
+# CONFIG_UTS_NS is not set
+CONFIG_AUDIT=y
+# CONFIG_IKCONFIG is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=1
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type and features
+#
+CONFIG_SUBARCH_AVR32B=y
+CONFIG_MMU=y
+CONFIG_PERFORMANCE_COUNTERS=y
+CONFIG_PLATFORM_AT32AP=y
+CONFIG_CPU_AT32AP7000=y
+CONFIG_BOARD_ATSTK1002=y
+CONFIG_BOARD_ATSTK1000=y
+CONFIG_LOADER_U_BOOT=y
+CONFIG_LOAD_ADDRESS=0x10000000
+CONFIG_ENTRY_ADDRESS=0x90000000
+CONFIG_PHYS_OFFSET=0x10000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_HAVE_ARCH_BOOTMEM_NODE is not set
+# CONFIG_ARCH_HAVE_MEMORY_PRESENT is not set
+# CONFIG_NEED_NODE_MEMMAP_SIZE is not set
+CONFIG_ARCH_FLATMEM_ENABLE=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+# CONFIG_ARCH_SPARSEMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+# CONFIG_OWNERSHIP_TRACE is not set
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_CMDLINE=""
+
+#
+# Bus options
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+CONFIG_BLK_DEV_NBD=m
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+
+#
+# Serial ATA (prod) and Parallel ATA (experimental) drivers
+#
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_MACB=y
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# Auxiliary Display support
+#
+
+#
+# Virtualization
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_MINIX_FS=m
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+# CONFIG_NFS_FS is not set
+# CONFIG_NFSD is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_KPROBES is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
diff --git a/packages/linux/linux/simpad/defconfig b/packages/linux/linux/simpad/defconfig
index 33f08a0593..420d531dc4 100644
--- a/packages/linux/linux/simpad/defconfig
+++ b/packages/linux/linux/simpad/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.21
-# Sat Jul 7 00:02:55 2007
+# Sat Jan 12 20:06:01 2008
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -227,7 +227,7 @@ CONFIG_ALIGNMENT_TRAP=y
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE=""
+CONFIG_CMDLINE=" quiet "
# CONFIG_XIP_KERNEL is not set
# CONFIG_KEXEC is not set
@@ -413,7 +413,12 @@ CONFIG_BT_BNEP_PROTO_FILTER=y
# CONFIG_BT_HCIBLUECARD is not set
# CONFIG_BT_HCIBTUART is not set
# CONFIG_BT_HCIVHCI is not set
-# CONFIG_IEEE80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+# CONFIG_IEEE80211_SOFTMAC is not set
CONFIG_WIRELESS_EXT=y
#
@@ -663,34 +668,40 @@ CONFIG_NET_PCI=y
# Wireless LAN (non-hamradio)
#
CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
+CONFIG_NET_WIRELESS_RTNETLINK=y
#
# Obsolete Wireless cards support (pre-802.11)
#
# CONFIG_STRIP is not set
-# CONFIG_ARLAN is not set
+CONFIG_ARLAN=m
# CONFIG_WAVELAN is not set
CONFIG_PCMCIA_WAVELAN=m
-# CONFIG_PCMCIA_NETWAVE is not set
+CONFIG_PCMCIA_NETWAVE=m
#
# Wireless 802.11 Frequency Hopping cards support
#
-# CONFIG_PCMCIA_RAYCS is not set
+CONFIG_PCMCIA_RAYCS=m
#
# Wireless 802.11b ISA/PCI cards support
#
-# CONFIG_HERMES is not set
-# CONFIG_ATMEL is not set
+CONFIG_HERMES=m
+CONFIG_ATMEL=m
#
# Wireless 802.11b Pcmcia/Cardbus cards support
#
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_HOSTAP is not set
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_AIRO_CS=m
+# CONFIG_PCMCIA_ATMEL is not set
+CONFIG_PCMCIA_WL3501=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_CS=m
CONFIG_NET_WIRELESS=y
#
@@ -940,10 +951,7 @@ CONFIG_FONT_8x16=y
#
# Logo configuration
#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_LOGO is not set
#
# Sound
@@ -986,7 +994,7 @@ CONFIG_USB_ARCH_HAS_HCD=y
#
# MMC/SD Card support
#
-# CONFIG_MMC_SPI_BLOCK is not set
+CONFIG_MMC_SPI_BLOCK=m
# CONFIG_MMC is not set
#
@@ -1247,7 +1255,7 @@ CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
+CONFIG_CRYPTO_AES=m
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set
diff --git a/packages/linux/linux_2.6.18.bb b/packages/linux/linux_2.6.18.bb
new file mode 100644
index 0000000000..91a89c31f1
--- /dev/null
+++ b/packages/linux/linux_2.6.18.bb
@@ -0,0 +1,108 @@
+# Copyright (C) 2007, Stelios Koroneos - Digital OPSiS, All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
+
+require linux.inc
+
+DEFAULT_PREFERENCE_avr32 = "1"
+
+PR = "r0"
+
+PARALLEL_MAKE=""
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://defconfig \
+ "
+
+SRC_URI_append_avr32 = " \
+ file://atmel-version.patch;patch=1 \
+ file://add-flush_buffer-operation-to-uart_ops.patch;patch=1 \
+ file://kbuild-add-unifdef.patch;patch=1 \
+ file://kbuild-replace-use-of-strlcpy-with-a-dedicated-implmentation-in-unifdef.patch;patch=1 \
+ file://kbuild-use-in-kernel-unifdef.patch;patch=1 \
+ file://spi-set-kset-of-master-class-dev-explicitly.patch;patch=1 \
+ file://spi-fix-spi-busnum-to-master-buffer-and-bus_num-0.patch;patch=1 \
+ file://usb-ethernet-align-all-descriptors-on-a-word-boundary.patch;patch=1 \
+ file://usb-ethernet-define-cdc-capability-for-husb2.patch;patch=1 \
+ file://usb-file-storage-align-all-descriptors-on-a-word-boundary.patch;patch=1 \
+ file://usb-serial-align-all-descriptors-on-a-word-boundary.patch;patch=1 \
+ file://usb-zero-align-all-descriptors-on-a-word-boundary.patch;patch=1 \
+ file://dont-include-map-h-from-physmap-h.patch;patch=1 \
+ file://mtd-unlock-nor-flash-automatically-where-necessary.patch;patch=1 \
+ file://avr32-arch.patch;patch=1 \
+ file://avr32-dont-include-asm-delay-h.patch;patch=1 \
+ file://avr32-unistd-h-move-ifdef-kernel.patch;patch=1 \
+ file://avr32-checkstack.patch;patch=1 \
+ file://avr32-oprofile.patch;patch=1 \
+ file://avr32-drop-GFP_COMP-for-DMA-memory-allocations.patch;patch=1 \
+ file://avr32-move-ethernet-tag-parsing-to-board-specific-code.patch;patch=1 \
+ file://avr32-dma-controller-framework.patch;patch=1 \
+ file://avr32-arch-neutral-gpio-api.patch;patch=1 \
+ file://add-mach-specific-kconfig.patch;patch=1 \
+ file://avr32-gpio-dev.patch;patch=1 \
+ file://atmel-usart3-driver.patch;patch=1 \
+ file://atmel-macb-ethernet-driver.patch;patch=1 \
+ file://at32ap7000-dmac-driver.patch;patch=1 \
+ file://atmel-mmc-host-driver.patch;patch=1 \
+ file://atmel-spi-master-driver.patch;patch=1 \
+ file://atmel-twi-driver.patch;patch=1 \
+ file://atmel-lcdc-framebuffer-driver.patch;patch=1 \
+ file://lcdc-wait-for-vsync.patch;patch=1 \
+ file://ltv350qv-lcd-driver.patch;patch=1 \
+ file://atmel-husb2-udc-driver.patch;patch=1 \
+ file://avr32-sound.patch;patch=1 \
+ file://atmel-ac97c-alsa-driver.patch;patch=1 \
+ file://at73c213-alsa-driver.patch;patch=1 \
+ file://at32-dac-oss-driver.patch;patch=1 \
+ file://renumber-usart-devices.patch;patch=1 \
+ file://rename-ttyUS-to-ttyS-or-ttyAT.patch;patch=1 \
+ file://at32-dac-oss-driver-clk-fix.patch;patch=1 \
+ file://add-all-parameters-to-smc-driver.patch;patch=1 \
+ file://at32ap7000-platform_device-definitions.patch;patch=1 \
+ file://atstk1000-instantiate-devices.patch;patch=1 \
+ file://add-hmatrix-support.patch;patch=1 \
+ file://add-ide-header.patch;patch=1 \
+ file://avr32-network-gateway-support.patch;patch=1 \
+ file://ngw-fix-usart-initialization.patch;patch=1 \
+ file://avr32-little-endian-read-write-bwl.patch;patch=1 \
+ file://gpio-dev-robustness.patch;patch=1 \
+ file://add-intc_pending_irq-to-intc.patch;patch=1 \
+ file://update-atstk1002_defconfig.patch;patch=1 \
+ file://fix-usart3-rx-BUG.patch;patch=1 \
+ file://fix-lcd-display-off-by-two-problem.patch;patch=1 \
+ file://fix-alpha-color-bitfield.patch;patch=1 \
+ file://jffs2_can_mark_obsolete-should-return-0-for-dataflash.patch;patch=1 \
+ file://mtd-fix-atmel-pri-for-cmdset-0001-and-cmdset-0002.patch;patch=1 \
+ file://fix-gpio-prototypes.patch;patch=1 \
+ file://pio-deglitch.patch;patch=1 \
+ file://pio-interrupt-controller.patch;patch=1 \
+ file://gpio-dev-blocking-read.patch;patch=1 \
+ file://add-default-atngw-defconfig.patch;patch=1 \
+ file://gpio-define-pio-none.patch;patch=1 \
+ file://mmc-add-platform-data.patch;patch=1 \
+ file://ngw100-change-spi-clock-on-dataflash.patch;patch=1 \
+ file://atstk1000-add-platform-data-for-mmc.patch;patch=1 \
+ file://avr32-increment-pointer-when-parsing-for-fbmem_start.patch;patch=1 \
+ file://lcdc-do-not-clear-mem-if-fbmem_start-is-set.patch;patch=1 \
+ file://avr32-fix-oprofile-interrupts.patch;patch=1 \
+ file://avr32-time-add-shared-interrupts.patch;patch=1 \
+ file://usart-make-rx-timeout-baudrate-independent.patch;patch=1 \
+ file://spi-reduce-dlybs-and-dlybct.patch;patch=1 \
+ file://dmac-stopping-idle-channel-is-not-fatal.patch;patch=1 \
+ file://mmc-core-dma-fix.patch;patch=1 \
+ file://atstk1000-board-fix-fbmem-setup.patch;patch=1 \
+ file://lcdc-fix-possible-null-pointer-and-match-guard-time-to-uboot.patch;patch=1 \
+ file://ltv350qv-add-initial_power_state-param.patch;patch=1 \
+ file://atmel-mci-debugfs.patch;patch=1 \
+ file://dmac-add-explicit-blockcount-to-dma_request_sg.patch;patch=1 \
+ file://atmel-mci-init-nr_blocks-in-dma-request.patch;patch=1 \
+ file://mmc-add-bit-manipulating-macros.patch;patch=1 \
+ file://mmc-add-detect-card-and-wp-support.patch;patch=1 \
+ file://atmel_spi-handle-rx-overrun.patch;patch=1 \
+ file://atmel_spi-send-zeroes-when-tx_buf-is-not-set.patch;patch=1 \
+ file://husb2_udc-test-mode.patch;patch=1 \
+ file://0001-AVR32-Fix-compile-error-with-gcc-4.1.patch;patch=1 \
+"
+
+
+S = "${WORKDIR}/linux-${PV}"
+
diff --git a/packages/linux/linux_2.6.21.bb b/packages/linux/linux_2.6.21.bb
index f2ab2116be..265a35a4b3 100644
--- a/packages/linux/linux_2.6.21.bb
+++ b/packages/linux/linux_2.6.21.bb
@@ -4,7 +4,7 @@ DEFAULT_PREFERENCE_at91sam9263ek = "-1"
DEFAULT_PREFERENCE_gumstix-connex = "1"
DEFAULT_PREFERENCE_gumstix-verdex = "1"
-PR = "r11"
+PR = "r12"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://tsc2003.c \
diff --git a/packages/linux/linux_2.6.22+2.6.23-rc3.bb b/packages/linux/linux_2.6.22+2.6.23-rc3.bb
index 618b6bf44a..47c3564087 100644
--- a/packages/linux/linux_2.6.22+2.6.23-rc3.bb
+++ b/packages/linux/linux_2.6.22+2.6.23-rc3.bb
@@ -1,7 +1,6 @@
require linux.inc
DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_alix = "1"
DEFAULT_PREFERENCE_at91sam9263ek = "1"
BASE_KERNEL_VERSION = "2.6.22"
@@ -19,9 +18,6 @@ SRC_URI_append_kb9202 = " http://maxim.org.za/AT91RM9200/2.6/2.6.23-rc3-at91.pat
"
SRC_URI_append_at91sam9263ek = " http://maxim.org.za/AT91RM9200/2.6/2.6.23-rc3-at91.patch.gz;patch=1 \
"
-SRC_URI_append_alix = "file://geode-mfgpt-support-for-geode-class-machines.patch;patch=1 \
- file://geode-mfgpt-clock-event-device-support.patch;patch=1"
-
S = "${WORKDIR}/linux-${BASE_KERNEL_VERSION}"
diff --git a/packages/linux/linux_2.6.22.6.bb b/packages/linux/linux_2.6.22.6.bb
index dfe1e2e8b1..69b988e332 100644
--- a/packages/linux/linux_2.6.22.6.bb
+++ b/packages/linux/linux_2.6.22.6.bb
@@ -2,6 +2,7 @@ require linux.inc
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_ts72xx = "1"
+DEFAULT_PREFERENCE_mx31moboard = "1"
PR = "r1"
@@ -25,4 +26,6 @@ SRC_URI_append_ts72xx = "\
file://ts72xx-use-cpld-reset.patch;patch=1 \
"
+SRC_URI_append_mx31moboard = "http://mobots.epfl.ch/mx31moboard/linux-2.6.22-moboard.patch.bz2;patch=1"
+
S = "${WORKDIR}/linux-2.6.22"
diff --git a/packages/linux/linux_2.6.23+2.6.24-rc5.bb b/packages/linux/linux_2.6.23+2.6.24-rc5.bb
new file mode 100644
index 0000000000..20ee7d0508
--- /dev/null
+++ b/packages/linux/linux_2.6.23+2.6.24-rc5.bb
@@ -0,0 +1,78 @@
+require linux.inc
+
+# Mark archs/machines that this kernel supports
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_alix = "1"
+
+PR = "r3"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-2.6.24-rc5.bz2;patch=1 \
+ file://defconfig \
+ "
+
+S = "${WORKDIR}/linux-2.6.23"
+
+SRC_URI_append_cm-x270 = "\
+ file://0001-cm-x270-match-type.patch;patch=1 \
+ file://0002-ramdisk_load.patch;patch=1 \
+ file://0003-mmcsd_large_cards-r0.patch;patch=1 \
+ file://0004-cm-x270-nand-simplify-name.patch;patch=1 \
+ file://0005-cmx270-pci.patch;patch=1"
+
+SRC_URI_append_gesbc-9302 = "file://0001-gesbc-nand.patch;patch=1"
+
+CMDLINE_cm-x270 = "console=${CMX270_CONSOLE_SERIAL_PORT},38400 monitor=8 bpp=16 mem=64M mtdparts=physmap-flash.0:256k(boot)ro,0x180000(kernel),-(root);cm-x270-nand:64m(app),-(data) rdinit=/sbin/init root=mtd3 rootfstype=jffs2"
+
+CMDLINE_gesbc-9302 = "console=ttyAM0 root=/dev/ram"
+
+FILES_kernel-image_cm-x270 = ""
+FILES_kernel-image_gesbc-9302 = ""
+
+python do_compulab_image() {
+ import os
+ import os.path
+ import struct
+
+ machine = bb.data.getVar('MACHINE', d, 1)
+ if machine == "cm-x270":
+ deploy_dir = bb.data.getVar('DEPLOY_DIR_IMAGE', d, 1)
+ kernel_file = os.path.join(deploy_dir, bb.data.expand('${KERNEL_IMAGE_BASE_NAME}', d) + '.bin')
+ img_file = os.path.join(deploy_dir, bb.data.expand('${KERNEL_IMAGE_BASE_NAME}', d) + '.cmx270')
+
+ fo = open(img_file, 'wb')
+
+ image_data = open(kernel_file, 'rb').read()
+
+ # first write size into first 4 bytes
+ size_s = struct.pack('i', len(image_data))
+
+ # truncate size if we are running on a 64-bit host
+ size_s = size_s[:4]
+
+ fo.write(size_s)
+ fo.write(image_data)
+ fo.close()
+
+ os.chdir(deploy_dir)
+ link_file = bb.data.expand('${KERNEL_IMAGE_SYMLINK_NAME}', d) + '.cmx270'
+ img_file = bb.data.expand('${KERNEL_IMAGE_BASE_NAME}', d) + '.cmx270'
+ try:
+ os.unlink(link_file)
+ except:
+ pass
+ os.symlink(img_file, link_file)
+}
+
+do_devicetree_image() {
+ if test -n "${DEVICETREE}" ; then
+ dtc -I dts -O dtb -o ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb ${DEVICETREE}
+
+ cd ${DEPLOY_DIR_IMAGE}
+ rm -f ${KERNEL_IMAGE_SYMLINK_NAME}.dtb
+ ln -sf ${KERNEL_IMAGE_BASE_NAME}.dtb ${KERNEL_IMAGE_SYMLINK_NAME}.dtb
+ fi
+}
+
+addtask compulab_image after do_deploy before do_package
+addtask devicetree_image after do_deploy before do_package
diff --git a/packages/linux/linux_2.6.23+2.6.24-rc6.bb b/packages/linux/linux_2.6.23+2.6.24-rc6.bb
new file mode 100644
index 0000000000..73100b62c3
--- /dev/null
+++ b/packages/linux/linux_2.6.23+2.6.24-rc6.bb
@@ -0,0 +1,32 @@
+require linux.inc
+
+# Mark archs/machines that this kernel supports
+DEFAULT_PREFERENCE = "-1"
+
+PR = "r0"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-2.6.24-rc6.bz2;patch=1 \
+ file://defconfig \
+ "
+
+S = "${WORKDIR}/linux-2.6.23"
+
+SRC_URI_append_at91sam9260ek = "\
+ file://0001-2.6.23-at91.patch;patch=1 \
+ "
+CMDLINE_at91sam9260ek = "mem=64M console=ttyS0,115200 root=/dev/mtdblock0 rw rootfstype=jffs2"
+
+FILES_kernel-image_at91sam9260ek = ""
+
+do_devicetree_image() {
+ if test -n "${DEVICETREE}" ; then
+ dtc -I dts -O dtb -o ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.dtb ${DEVICETREE}
+
+ cd ${DEPLOY_DIR_IMAGE}
+ rm -f ${KERNEL_IMAGE_SYMLINK_NAME}.dtb
+ ln -sf ${KERNEL_IMAGE_BASE_NAME}.dtb ${KERNEL_IMAGE_SYMLINK_NAME}.dtb
+ fi
+}
+
+addtask devicetree_image after do_deploy before do_package
diff --git a/packages/linux/linux_2.6.23.bb b/packages/linux/linux_2.6.23.bb
index 6a4d8ceac2..5322c51211 100644
--- a/packages/linux/linux_2.6.23.bb
+++ b/packages/linux/linux_2.6.23.bb
@@ -5,17 +5,34 @@ DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_cm-x270 = "1"
DEFAULT_PREFERENCE_mpc8313e-rdb = "1"
DEFAULT_PREFERENCE_mpc8323e-rdb = "1"
+DEFAULT_PREFERENCE_avr32 = "1"
DEPENDS_append_mpc8313e-rdb = " dtc-native"
DEPENDS_append_mpc8323e-rdb = " dtc-native"
-PR = "r7"
+PR = "r10"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
file://binutils-buildid-arm.patch;patch=1 \
+ file://kallsyms-missing-include.patch;patch=1 \
file://defconfig \
"
+# Bug fixes on the 2.6.23.x stable branch
+SRC_URI += "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-2.6.23.12.bz2;patch=1"
+# Real-time preemption (includes CFS). This is experimental and requires a different defconfig.
+#SRC_URI += "file://patch-2.6.23.12-rt14;patch=1"
+# Only the Completely Fair Scheduler (CFS), the official backport from 2.6.24
+SRC_URI += "http://people.redhat.com/mingo/cfs-scheduler/sched-cfs-v2.6.23.12-v24.1.patch;patch=1"
+# Add support for squashfs-lzma (a highly compressed read-only filesystem)
+SRC_URI += "http://kamikaze.waninkoko.info/patches/2.6.23/klight1/broken-out/squashfs-lzma-2.6.23.patch;patch=1"
+
+# The Atmel patch doesn't apply against 2.6.23.12 :(
+SRC_URI_avr32 = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
+ file://defconfig \
+ http://avr32linux.org/twiki/pub/Main/LinuxPatches/linux-2.6.23.atmel.3.patch.bz2;patch=1 \
+ "
+
SRC_URI_append_cm-x270 = "\
file://0001-cm-x270-base2.patch;patch=1 \
file://0002-cm-x270-match-type.patch;patch=1 \
@@ -88,3 +105,4 @@ do_devicetree_image() {
addtask compulab_image after do_deploy before do_package
addtask devicetree_image after do_deploy before do_package
+
diff --git a/packages/linux/mainstone-kernel/flash-unlock.patch b/packages/linux/mainstone-kernel/flash-unlock.patch
new file mode 100644
index 0000000000..31f3f38e34
--- /dev/null
+++ b/packages/linux/mainstone-kernel/flash-unlock.patch
@@ -0,0 +1,14 @@
+--- drivers/mtd/maps/mainstone-flash.c~ 2008-01-05 01:15:54.000000000 +0100
++++ drivers/mtd/maps/mainstone-flash.c 2008-01-05 01:15:54.000000000 +0100
+@@ -125,6 +125,11 @@
+ continue;
+ }
+ mymtds[i]->owner = THIS_MODULE;
++
++ /* Unlock the flash device. */
++ if (mymtds[i]->unlock)
++ mymtds[i]->unlock(mymtds[i], 0, mymtds[i]->size);
++
+
+ ret = parse_mtd_partitions(mymtds[i], probes,
+ &parsed_parts[i], 0);
diff --git a/packages/linux/mainstone-kernel/mainstone/.mtn2git_empty b/packages/linux/mainstone-kernel/mainstone/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/mainstone-kernel/mainstone/.mtn2git_empty
diff --git a/packages/linux/mainstone-kernel/mainstone/defconfig b/packages/linux/mainstone-kernel/mainstone/defconfig
new file mode 100644
index 0000000000..e421081233
--- /dev/null
+++ b/packages/linux/mainstone-kernel/mainstone/defconfig
@@ -0,0 +1,1276 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.18
+# Sun Jan 6 00:54:23 2008
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# System Type
+#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+CONFIG_MACH_MAINSTONE=y
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
+CONFIG_PXA27x=y
+CONFIG_IWMMXT=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+CONFIG_XSCALE_PMU=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=m
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_LEDS=y
+CONFIG_LEDS_TIMER=y
+CONFIG_LEDS_CPU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=jffs2 console=ttyS0,115200 mem=64M console=ttyS0 debug "
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+# CONFIG_PACKET is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+# CONFIG_IRLAN is not set
+# CONFIG_IRNET is not set
+# CONFIG_IRCOMM is not set
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+# CONFIG_PXA_FICP is not set
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+# CONFIG_BT_L2CAP is not set
+# CONFIG_BT_SCO is not set
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+# CONFIG_MTD_CFI_I1 is not set
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_MAINSTONE=y
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+# CONFIG_BLK_DEV_SD is not set
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_SMC91X=y
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=16
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_NVRAM is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+# CONFIG_LOGO is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_DEVICE=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+CONFIG_USB_GADGET_DUMMY_HCD=y
+CONFIG_USB_DUMMY_HCD=m
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+# CONFIG_USB_G_SERIAL is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_PXA=m
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# 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_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
diff --git a/packages/linux/mainstone-kernel/mainstone_defconfig b/packages/linux/mainstone-kernel/mainstone_defconfig
index a1c7d97cf8..41abfbfeac 100644
--- a/packages/linux/mainstone-kernel/mainstone_defconfig
+++ b/packages/linux/mainstone-kernel/mainstone_defconfig
@@ -1,74 +1,113 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11
-# Sat Mar 5 10:39:38 2005
+# Linux kernel version: 2.6.18
+# Wed Dec 19 15:51:05 2007
#
CONFIG_ARM=y
CONFIG_MMU=y
-CONFIG_UID16=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_IOMAP=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
-CONFIG_CLEAN_COMPILE=y
CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
#
# General setup
#
CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
+# CONFIG_TASKSTATS is not set
# CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_HOTPLUG=y
-CONFIG_KOBJECT_UEVENT=y
# CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_EMBEDDED is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
#
# Loadable module support
#
CONFIG_MODULES=y
# CONFIG_MODULE_UNLOAD is not set
-CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
-# CONFIG_KMOD is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
#
# System Type
#
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_IOP3XX is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
@@ -76,17 +115,16 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
#
# Intel PXA2xx Implementations
#
# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
CONFIG_MACH_MAINSTONE=y
# CONFIG_ARCH_PXA_IDP is not set
# CONFIG_PXA_SHARPSL is not set
+# CONFIG_MACH_TRIZEPS4 is not set
CONFIG_PXA27x=y
CONFIG_IWMMXT=y
@@ -99,7 +137,6 @@ CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_MINICACHE=y
#
# Processor Features
@@ -108,59 +145,255 @@ CONFIG_CPU_MINICACHE=y
CONFIG_XSCALE_PMU=y
#
-# General setup
+# Bus support
#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
#
# PCCARD (PCMCIA/CardBus) support
#
-# CONFIG_PCCARD is not set
+CONFIG_PCCARD=m
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
#
# PC-card bridges
#
+CONFIG_PCMCIA_PXA2XX=m
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_LEDS=y
+CONFIG_LEDS_TIMER=y
+CONFIG_LEDS_CPU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=jffs2 console=ttyS0,115200 mem=64M"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
#
-# At least one math emulation must be selected
+# At least one emulation must be selected
#
CONFIG_FPE_NWFPE=y
# CONFIG_FPE_NWFPE_XP is not set
# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+# CONFIG_PACKET is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+# CONFIG_IRLAN is not set
+# CONFIG_IRNET is not set
+# CONFIG_IRCOMM is not set
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+# CONFIG_PXA_FICP is not set
+# CONFIG_MCS_FIR is not set
+CONFIG_BT=m
+# CONFIG_BT_L2CAP is not set
+# CONFIG_BT_SCO is not set
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+# CONFIG_BT_HCIUART is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
#
# Generic Driver Options
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
+CONFIG_FW_LOADER=m
# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_PM is not set
-# CONFIG_PREEMPT is not set
-# CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="root=/dev/nfs ip=dhcp console=ttyS0,115200 mem=64M"
-CONFIG_LEDS=y
-CONFIG_LEDS_TIMER=y
-CONFIG_LEDS_CPU=y
-CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_SYS_HYPERVISOR is not set
#
-# Parallel port support
+# Connector - unified userspace <-> kernelspace linker
#
-# CONFIG_PARPORT is not set
+# CONFIG_CONNECTOR is not set
#
# Memory Technology Devices (MTD)
#
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
CONFIG_MTD_REDBOOT_PARTS=y
CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
@@ -176,6 +409,7 @@ CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
#
# RAM/ROM/Flash chip drivers
@@ -198,6 +432,7 @@ CONFIG_MTD_MAP_BANK_WIDTH_4=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
CONFIG_MTD_CFI_INTELEXT=y
# CONFIG_MTD_CFI_AMDSTD is not set
# CONFIG_MTD_CFI_STAA is not set
@@ -205,6 +440,7 @@ CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
# CONFIG_MTD_XIP is not set
#
@@ -212,9 +448,10 @@ CONFIG_MTD_CFI_UTIL=y
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_MAINSTONE=y
# CONFIG_MTD_ARM_INTEGRATOR is not set
-# CONFIG_MTD_EDB7312 is not set
# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
#
# Self-contained MTD device drivers
@@ -222,7 +459,6 @@ CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -238,180 +474,189 @@ CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_NAND is not set
#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
# Plug and Play support
#
#
# Block devices
#
-# CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
-CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_INITRAMFS_SOURCE=""
+CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
#
-# IO Schedulers
+# ATA/ATAPI/MFM/RLL support
#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-# CONFIG_ATA_OVER_ETH is not set
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
#
-# Multi-device support (RAID and LVM)
+# Please see Documentation/ide.txt for help/info on IDE drives
#
-# CONFIG_MD is not set
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
#
-# Networking support
+# IDE chipset support/bugfixes
#
-CONFIG_NET=y
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
#
-# Networking options
+# SCSI device support
#
-# CONFIG_PACKET is not set
-# CONFIG_NETLINK_DEV is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_PROC_FS=y
#
-# SCTP Configuration (EXPERIMENTAL)
+# SCSI support type (disk, tape, CD-ROM)
#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
+# CONFIG_BLK_DEV_SD is not set
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
#
-# QoS and/or fair queueing
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
-# CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
#
-# Network testing
+# SCSI Transport Attributes
#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
#
-# Ethernet (10 or 100Mbit)
+# SCSI low-level drivers
#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-CONFIG_SMC91X=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
#
-# Ethernet (1000 Mbit)
+# PCMCIA SCSI adapter support
#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
#
-# Ethernet (10000 Mbit)
+# Multi-device support (RAID and LVM)
#
+# CONFIG_MD is not set
#
-# Token Ring devices
+# Fusion MPT device support
#
+# CONFIG_FUSION is not set
#
-# Wireless LAN (non-hamradio)
+# IEEE 1394 (FireWire) support
#
-# CONFIG_NET_RADIO is not set
#
-# Wan interfaces
+# I2O device support
#
-# CONFIG_WAN is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
#
-# ATA/ATAPI/MFM/RLL support
+# Network device support
#
-CONFIG_IDE=y
-CONFIG_BLK_DEV_IDE=y
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
#
-# Please see Documentation/ide.txt for help/info on IDE drives
+# PHY device support
#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
+# CONFIG_PHYLIB is not set
#
-# IDE chipset support/bugfixes
+# Ethernet (10 or 100Mbit)
#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+CONFIG_SMC91X=y
+# CONFIG_DM9000 is not set
+# CONFIG_SMC911X is not set
#
-# SCSI device support
+# Ethernet (1000 Mbit)
#
-# CONFIG_SCSI is not set
#
-# Fusion MPT device support
+# Ethernet (10000 Mbit)
#
#
-# IEEE 1394 (FireWire) support
+# Token Ring devices
#
#
-# I2O device support
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
#
# ISDN subsystem
@@ -436,17 +681,6 @@ CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
#
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-CONFIG_SERIO=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-
-#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
@@ -461,11 +695,21 @@ CONFIG_KEYBOARD_ATKBD=y
# CONFIG_INPUT_MISC is not set
#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
# Character devices
#
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
@@ -482,7 +726,7 @@ CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_LEGACY_PTY_COUNT=16
#
# IPMI
@@ -493,52 +737,333 @@ CONFIG_LEGACY_PTY_COUNT=256
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
+CONFIG_HW_RANDOM=y
# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
#
# Ftape, the floppy tape device driver
#
-# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
# CONFIG_RAW_DRIVER is not set
#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
# I2C support
#
# CONFIG_I2C is not set
#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_DEVICE=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_AT91 is not set
+CONFIG_USB_GADGET_DUMMY_HCD=y
+CONFIG_USB_DUMMY_HCD=m
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+# CONFIG_USB_G_SERIAL is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_PXA=m
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
+# CONFIG_RTC_DRV_V3020 is not set
#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
# CONFIG_EXT3_FS is not set
-# CONFIG_JBD is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
-
-#
-# XFS support
-#
+# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
@@ -560,11 +1085,10 @@ CONFIG_FAT_DEFAULT_CODEPAGE=437
#
CONFIG_PROC_FS=y
CONFIG_SYSFS=y
-# CONFIG_DEVFS_FS is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
# CONFIG_TMPFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
#
# Miscellaneous filesystems
@@ -579,13 +1103,14 @@ CONFIG_RAMFS=y
# CONFIG_JFFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-# CONFIG_JFFS2_FS_NOR_ECC is not set
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
-# CONFIG_CRAMFS is not set
+CONFIG_CRAMFS=m
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
@@ -602,6 +1127,7 @@ CONFIG_NFS_FS=y
# CONFIG_NFSD is not set
CONFIG_ROOT_NFS=y
CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
@@ -610,6 +1136,7 @@ CONFIG_SUNRPC=y
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
#
# Partition Types
@@ -667,77 +1194,32 @@ CONFIG_NLS_ISO8859_1=y
# CONFIG_PROFILING is not set
#
-# Graphics support
-#
-CONFIG_FB=y
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-CONFIG_FB_PXA=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-
-#
-# Logo configuration
-#
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# Misc devices
-#
-
-#
-# USB support
-#
-# CONFIG_USB is not set
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
# Kernel hacking
#
-CONFIG_DEBUG_KERNEL=y
+# CONFIG_PRINTK_TIME is not set
CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_DEBUG_USER=y
# CONFIG_DEBUG_WAITQ is not set
CONFIG_DEBUG_ERRORS=y
@@ -753,7 +1235,31 @@ CONFIG_DEBUG_LL=y
#
# Cryptographic options
#
-# CONFIG_CRYPTO is not set
+CONFIG_CRYPTO=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
#
# Hardware crypto devices
@@ -762,8 +1268,10 @@ CONFIG_DEBUG_LL=y
#
# Library routines
#
-# CONFIG_CRC_CCITT is not set
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
+CONFIG_PLIST=y
diff --git a/packages/linux/mainstone-kernel_2.6.18.bb b/packages/linux/mainstone-kernel_2.6.18.bb
index f487e1f38a..290bb5911d 100644
--- a/packages/linux/mainstone-kernel_2.6.18.bb
+++ b/packages/linux/mainstone-kernel_2.6.18.bb
@@ -1,37 +1,24 @@
+require linux.inc
+
SECTION = "kernel"
DESCRIPTION = "Linux kernel for the Mainstone (PXA270 ref design)"
LICENSE = "GPL"
-PR = "r0"
+PR = "r2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 \
- file://mainstone_defconfig"
+ file://flash-unlock.patch;patch=1;pnum=0 \
+ file://defconfig"
S = "${WORKDIR}/linux-2.6.18"
COMPATIBLE_HOST = 'arm.*-linux'
-inherit kernel
-inherit package
-
ARCH = "arm"
-#CMDLINE_CONSOLE ?= "ttyS0,115200n8"
+
+CMDLINE_CONSOLE ?= "ttyS0,115200n8"
#CMDLINE_ROOT = "root=/dev/slug rootfstype=ext2,jffs2 initrd=0x01000000,10M mem=32M@0x00000000"
-#CMDLINE_ROOT = "root=/dev/mtdblock4 rootfstype=jffs2 mem=32M@0x00000000"
#CMDLINE_ROOT = "root=/dev/ram0 rw rootfstype=ext2,jffs2 initrd=0x01000000,10M init=/linuxrc mem=32M@0x00000000"
-#CMDLINE = "${CMDLINE_ROOT} ${CMDLINE_CONSOLE}"
-
-do_configure_prepend() {
- install -m 0644 ${WORKDIR}/${MACHINE}_defconfig ${S}/.config
-# echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
-}
-
-do_deploy() {
- install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}-${DATETIME}.bin
-}
-
-do_deploy[dirs] = "${S}"
-
-addtask deploy before do_build after do_compile
+CMDLINE_ROOT = "root=/dev/mtdblock2 rootfstype=jffs2 console=ttyS0,115200 mem=64M"
+CMDLINE = "${CMDLINE_ROOT} ${CMDLINE_CONSOLE}"
COMPATIBLE_MACHINE = "mainstone"
diff --git a/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb b/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb
index b2e903c913..a666d224a9 100644
--- a/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb
+++ b/packages/linux/unslung-kernel_2.4.22.l2.3r63.bb
@@ -1,7 +1,7 @@
SECTION = "kernel"
DESCRIPTION = "Vendor-compatible Linux kernel for the Linksys NSLU2 device"
LICENSE = "GPL"
-PR = "r20"
+PR = "r21"
COMPATIBLE_HOST = 'arm.*-linux'
COMPATIBLE_MACHINE = "nslu2"
@@ -38,7 +38,7 @@ S = "${WORKDIR}/linux-2.4.22"
inherit kernel
ARCH = "arm"
-KERNEL_SUFFIX = "ixp4xxbe"
+KERNEL_SUFFIX = "nslu2be"
CMDLINE_CONSOLE ?= "ttyS0,115200"
CMDLINE_ROOT = "root=/dev/mtdblock4 rootfstype=jffs2 rw init=/linuxrc mem=32M@0x00000000"
CMDLINE = "${CMDLINE_CONSOLE} ${CMDLINE_ROOT}"
@@ -52,7 +52,7 @@ do_configure_prepend() {
do_deploy() {
install -d ${DEPLOY_DIR_IMAGE}
- install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${KERNEL_SUFFIX}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${KERNEL_SUFFIX}.bin
}
do_deploy[dirs] = "${S}"
diff --git a/packages/lm_sensors/lmsensors-apps_2.10.1.bb b/packages/lm_sensors/lmsensors-apps_2.10.1.bb
index 91d7371ca1..6f89481f88 100644
--- a/packages/lm_sensors/lmsensors-apps_2.10.1.bb
+++ b/packages/lm_sensors/lmsensors-apps_2.10.1.bb
@@ -40,9 +40,9 @@ PACKAGES =+ "libsensors libsensors-dev libsensors-dbg libsensors-doc"
PACKAGES =+ "lmsensors-sensors lmsensors-sensors-dbg lmsensors-sensors-doc"
FILES_lmsensors-sensors = "${bindir}/sensors ${sysconfdir}"
-FILES_lmsensors-sensors-dbg = "${bindir}/.debug/sensors"
+FILES_lmsensors-sensors-dbg += "${bindir}/.debug/sensors"
FILES_lmsensors-sensors-doc = "${mandir}/man1 ${mandir}/man5"
FILES_libsensors = "${libdir}/libsensors.so.*"
-FILES_libsensors-dbg = "${libdir}/.debug"
+FILES_libsensors-dbg += "${libdir}/.debug"
FILES_libsensors-dev = "${libdir}/libsensors.so ${libdir}/libsensors.a ${includedir}"
FILES_libsensors-doc = "${mandir}/man3"
diff --git a/packages/lua/lua-gtk2_0.3.bb b/packages/lua/lua-gtk2_0.3.bb
index 3abca0e88a..083e9a6ca1 100644
--- a/packages/lua/lua-gtk2_0.3.bb
+++ b/packages/lua/lua-gtk2_0.3.bb
@@ -1,9 +1,9 @@
DESCRIPTION = "GTK bindings for LUA"
-LICENSE = "GPL2"
+SECTION = "libs"
PRIORITY = "optional"
+LICENSE = "GPLv2"
DEPENDS = "gtk+ lua-native perl-native readline libffi"
RDEPENDS = "lua"
-SECTION = "libs"
inherit gpe
diff --git a/packages/lua/lua.inc b/packages/lua/lua.inc
index b713825f00..994295b729 100644
--- a/packages/lua/lua.inc
+++ b/packages/lua/lua.inc
@@ -6,9 +6,7 @@ HOMEPAGE = "http://www.lua.org/"
PACKAGES = "liblua-dbg liblualib-dbg ${PN}-dbg \
liblua-dev liblua liblualib-dev liblualib ${PN}-doc ${PN}"
-FILES_${PN}-dbg = "${bindir}/.debug"
-FILES_liblua-dbg = "${libdir}/.debug/liblua.so.*"
-FILES_liblualib-dbg = "${libdir}/.debug/liblualib.so.*"
+FILES_${PN}-dbg += "${bindir}/.debug ${libdir}/.debug/liblua.so.* ${libdir}/.debug/liblualib.so.*"
FILES_${PN} = "${bindir}"
FILES_${PN}-doc = "${mandir}"
diff --git a/packages/madwifi/madwifi-modules_0.9.3.bb b/packages/madwifi/madwifi-modules_0.9.3.bb
index 523b01c9e0..25c5aae1d3 100644
--- a/packages/madwifi/madwifi-modules_0.9.3.bb
+++ b/packages/madwifi/madwifi-modules_0.9.3.bb
@@ -52,6 +52,6 @@ else
fi
}
-PACKAGES = "madwifi-tools ${PN}"
+PACKAGES = "${PN}-dbg madwifi-tools ${PN}"
FILES_${PN} = "/lib/modules/"
FILES_madwifi-tools = "/usr/sbin/"
diff --git a/packages/madwifi/madwifi-modules_cvs-bsd.bb b/packages/madwifi/madwifi-modules_cvs-bsd.bb
index 033fe7edd4..d570816fc1 100644
--- a/packages/madwifi/madwifi-modules_cvs-bsd.bb
+++ b/packages/madwifi/madwifi-modules_cvs-bsd.bb
@@ -47,6 +47,6 @@ else
fi
}
-PACKAGES = "madwifi-tools ${PN}"
+PACKAGES = "${PN}-dbg madwifi-tools ${PN}"
FILES_${PN} = "/lib/modules/"
FILES_madwifi-tools = "/usr/"
diff --git a/packages/madwifi/madwifi-modules_cvs.bb b/packages/madwifi/madwifi-modules_cvs.bb
index 6df39671db..c5cf6cf806 100644
--- a/packages/madwifi/madwifi-modules_cvs.bb
+++ b/packages/madwifi/madwifi-modules_cvs.bb
@@ -50,6 +50,6 @@ else
fi
}
-PACKAGES = "madwifi-tools ${PN}"
+PACKAGES = "${PN}-dbg madwifi-tools ${PN}"
FILES_${PN} = "/lib/modules/"
FILES_madwifi-tools = "/usr/"
diff --git a/packages/madwifi/madwifi-ng_r.inc b/packages/madwifi/madwifi-ng_r.inc
index 73c585b0d8..22cf332420 100644
--- a/packages/madwifi/madwifi-ng_r.inc
+++ b/packages/madwifi/madwifi-ng_r.inc
@@ -55,6 +55,6 @@ else
fi
}
-PACKAGES = "${PN}-modules ${PN}-tools"
+PACKAGES = "${PN}-dbg ${PN}-modules ${PN}-tools"
FILES_${PN}-modules = "/lib/modules/"
FILES_${PN}-tools = "/usr/"
diff --git a/packages/madwifi/madwifi-ng_r2702-20070903.bb b/packages/madwifi/madwifi-ng_r2702-20070903.bb
index 43a491bd1f..627d4f52b5 100644
--- a/packages/madwifi/madwifi-ng_r2702-20070903.bb
+++ b/packages/madwifi/madwifi-ng_r2702-20070903.bb
@@ -2,8 +2,6 @@
# Don't use this unless you know what you're doing -- this version does
# *NOT* build on BE kernels.
-DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_alix = "1"
# Disable stripping of kernel modules, since this action strips too
# much out, and the resulting module won't load.
diff --git a/packages/madwifi/madwifi-ng_r2826-20071105.bb b/packages/madwifi/madwifi-ng_r2826-20071105.bb
index 5a8bb116a3..5301e3bd42 100644
--- a/packages/madwifi/madwifi-ng_r2826-20071105.bb
+++ b/packages/madwifi/madwifi-ng_r2826-20071105.bb
@@ -1,6 +1,7 @@
# Bitbake recipe for the madwifi-ng driver
DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_alix = "1"
DEFAULT_PREFERENCE_mpc8323e-rdb = "1"
# Disable stripping of kernel modules, since this action strips too
diff --git a/packages/man-pages/man-pages_2.41.bb b/packages/man-pages/man-pages_2.41.bb
index b05c591d56..d12d9ff4f5 100644
--- a/packages/man-pages/man-pages_2.41.bb
+++ b/packages/man-pages/man-pages_2.41.bb
@@ -12,5 +12,4 @@ do_install () {
oe_runmake 'prefix=${D}' install
}
-PACKAGES = "${PN}"
FILES_${PN} = "*"
diff --git a/packages/matchbox-applet-cards/matchbox-applet-cards_1.0.2.bb b/packages/matchbox-applet-cards/matchbox-applet-cards_1.0.2.bb
index ca40ea572c..8fbf5e3578 100644
--- a/packages/matchbox-applet-cards/matchbox-applet-cards_1.0.2.bb
+++ b/packages/matchbox-applet-cards/matchbox-applet-cards_1.0.2.bb
@@ -4,7 +4,7 @@ DEPENDS = "matchbox-wm libmatchbox"
SECTION = "x11/wm"
PR = "r1"
-SRC_URI = "http://212.10.30.205/rc12/src/mb-applet-cards-${PV}.tar.bz2 \
+SRC_URI = "http://distro.ibiblio.org/pub/linux/distributions/pdaxrom/src/mb-applet-cards-${PV}.tar.bz2 \
file://oz-gpe.patch;patch=1 \
file://gpe-applet-cards \
file://cf_mount.png \
diff --git a/packages/matchbox-applet-startup-monitor/files/.mtn2git_empty b/packages/matchbox-applet-startup-monitor/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/matchbox-applet-startup-monitor/files/.mtn2git_empty
diff --git a/packages/matchbox-applet-startup-monitor/files/85mb-applet-startup-monitor b/packages/matchbox-applet-startup-monitor/files/85mb-applet-startup-monitor
new file mode 100755
index 0000000000..2fb859650f
--- /dev/null
+++ b/packages/matchbox-applet-startup-monitor/files/85mb-applet-startup-monitor
@@ -0,0 +1,2 @@
+#!/bin/sh
+mb-applet-startup-monitor &
diff --git a/packages/matchbox-applet-startup-monitor/matchbox-applet-startup-monitor_0.1.bb b/packages/matchbox-applet-startup-monitor/matchbox-applet-startup-monitor_0.1.bb
index e95665041e..0f32409333 100644
--- a/packages/matchbox-applet-startup-monitor/matchbox-applet-startup-monitor_0.1.bb
+++ b/packages/matchbox-applet-startup-monitor/matchbox-applet-startup-monitor_0.1.bb
@@ -3,12 +3,15 @@ LICENSE = "GPL"
DEPENDS = "libmatchbox startup-notification"
SECTION = "x11/wm"
-PR = "r1"
+PR = "r5"
-SRC_URI = "http://projects.o-hand.com/matchbox/sources/mb-applet-startup-monitor/${PV}/mb-applet-startup-monitor-${PV}.tar.gz"
+SRC_URI = "http://projects.o-hand.com/matchbox/sources/mb-applet-startup-monitor/${PV}/mb-applet-startup-monitor-${PV}.tar.gz \
+ file://85mb-applet-startup-monitor"
S = "${WORKDIR}/mb-applet-startup-monitor-${PV}"
inherit autotools pkgconfig
-FILES_${PN} = "${bindir}/* ${datadir}/applications ${datadir}/pixmaps"
-
+do_install_append() {
+ install -d ${D}${sysconfdir}/X11/Xsession.d
+ install -m 0755 ${WORKDIR}/85mb-applet-startup-monitor ${D}${sysconfdir}/X11/Xsession.d/
+}
diff --git a/packages/matchbox-common/matchbox_0.9.1.bb b/packages/matchbox-common/matchbox_0.9.1.bb
index cda90dfb50..0821b03bcc 100644
--- a/packages/matchbox-common/matchbox_0.9.1.bb
+++ b/packages/matchbox-common/matchbox_0.9.1.bb
@@ -2,7 +2,6 @@ DESCRIPTION = "Metapackage for Matchbox suite"
LICENSE = "GPL"
RDEPENDS = "matchbox-common matchbox-wm matchbox-panel matchbox-desktop"
SECTION = "x11/wm"
-PACKAGES = "${PN}"
PR = "r1"
ALLOW_EMPTY = "1"
diff --git a/packages/matchbox-desktop-sato/.mtn2git_empty b/packages/matchbox-desktop-sato/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/matchbox-desktop-sato/.mtn2git_empty
diff --git a/packages/matchbox-desktop-sato/matchbox-desktop-sato_svn.bb b/packages/matchbox-desktop-sato/matchbox-desktop-sato_svn.bb
new file mode 100644
index 0000000000..8d1a3e181d
--- /dev/null
+++ b/packages/matchbox-desktop-sato/matchbox-desktop-sato_svn.bb
@@ -0,0 +1,14 @@
+SECTION = "x11"
+DESCRIPTION = "Sato desktop folders"
+LICENSE = "LGPL"
+DEPENDS = ""
+CONFLICTS = "matchbox-common"
+SRCREV = "76"
+PV = "0.0+svnr${SRCREV}"
+
+SRC_URI = "svn://svn.o-hand.com/repos/sato/trunk;module=desktop-folders;proto=http"
+S = "${WORKDIR}/desktop-folders"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir}"
diff --git a/packages/matchbox-keyboard/files/fic-gta01-font-size.patch b/packages/matchbox-keyboard/files/fic-gta01-font-size.patch
index 3a09ac5bc2..c25aa74ca4 100644
--- a/packages/matchbox-keyboard/files/fic-gta01-font-size.patch
+++ b/packages/matchbox-keyboard/files/fic-gta01-font-size.patch
@@ -1,12 +1,12 @@
Index: matchbox-keyboard/src/matchbox-keyboard.c
===================================================================
---- matchbox-keyboard.orig/src/matchbox-keyboard.c 2007-08-19 17:26:59.000000000 +0200
-+++ matchbox-keyboard/src/matchbox-keyboard.c 2007-08-19 17:27:06.000000000 +0200
-@@ -52,7 +52,7 @@
+--- matchbox-keyboard.orig/src/matchbox-keyboard.c
++++ matchbox-keyboard/src/matchbox-keyboard.c
+@@ -54,7 +54,7 @@
kb->row_spacing = 5;
kb->font_family = strdup("sans");
-- kb->font_pt_size = 5;
+- kb->font_pt_size = 6;
+ kb->font_pt_size = 3;
kb->font_variant = strdup("bold");
diff --git a/packages/matchbox-keyboard/matchbox-keyboard-inputmethod_svn.bb b/packages/matchbox-keyboard/matchbox-keyboard-inputmethod_svn.bb
index 5b6ea4edfa..4384b6db7d 100644
--- a/packages/matchbox-keyboard/matchbox-keyboard-inputmethod_svn.bb
+++ b/packages/matchbox-keyboard/matchbox-keyboard-inputmethod_svn.bb
@@ -1,18 +1,23 @@
DESCRIPTION = "Matchbox virtual keyboard for X11"
LICENSE = "GPL"
DEPENDS = "libfakekey expat libxft gtk+ matchbox-panel-2"
-RCONFLICTS = matchbox-keyboard
-RPROVIDES_${PN} = matchbox-keyboard
-#DEFAULT_PREFERENCE = "-1"
+RCONFLICTS_${PN} = "matchbox-keyboard"
+RPROVIDES_${PN} = "matchbox-keyboard"
SECTION = "x11"
PV = "0.0+svnr${SRCREV}"
-PR = "r7"
+PR = "r10"
SRC_URI = "svn://svn.o-hand.com/repos/matchbox/trunk;module=matchbox-keyboard;proto=http \
- file://smallscreen-fontsize.patch;patch=1 \
- file://80matchboxkeyboard"
+ file://smallscreen-fontsize.patch;patch=1 \
+ file://2-Add-new-modifier--layout--Used-to-cycle-thru-all-available-layouts.patch;patch=1 \
+ file://3-Changes-to-improve-layout-rendering--especially-after-adding-support-for.patch;patch=1 \
+ file://4-Add-rendering-debug-logging.patch;patch=1 \
+ file://5-Add-support-for-loading-multiple-independent-layouts.patch;patch=1 \
+ file://6-Add-layout-switch-key-to-all-layouts.patch;patch=1 \
+ file://80matchboxkeyboard"
SRC_URI_append_fic-gta01 = " file://fic-gta01-font-size.patch;patch=1"
+SRC_URI_append_fic-gta02 = " file://fic-gta01-font-size.patch;patch=1"
S = "${WORKDIR}/matchbox-keyboard"
diff --git a/packages/matchbox-sato/.mtn2git_empty b/packages/matchbox-sato/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/matchbox-sato/.mtn2git_empty
diff --git a/packages/matchbox-sato/matchbox-sato/.mtn2git_empty b/packages/matchbox-sato/matchbox-sato/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/matchbox-sato/matchbox-sato/.mtn2git_empty
diff --git a/packages/matchbox-sato/matchbox-sato/etc/.mtn2git_empty b/packages/matchbox-sato/matchbox-sato/etc/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/matchbox-sato/matchbox-sato/etc/.mtn2git_empty
diff --git a/packages/matchbox-sato/matchbox-sato/etc/matchbox/.mtn2git_empty b/packages/matchbox-sato/matchbox-sato/etc/matchbox/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/matchbox-sato/matchbox-sato/etc/matchbox/.mtn2git_empty
diff --git a/packages/matchbox-sato/matchbox-sato/etc/matchbox/session b/packages/matchbox-sato/matchbox-sato/etc/matchbox/session
new file mode 100755
index 0000000000..8c8f953b47
--- /dev/null
+++ b/packages/matchbox-sato/matchbox-sato/etc/matchbox/session
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+. /etc/formfactor/config
+
+if [ -e /dev/touchscreen/touchscreen0 ]; then
+ SHOWCURSOR="no"
+else
+ SHOWCURSOR="yes"
+fi
+
+matchbox-desktop &
+
+matchbox-panel --titlebar --start-applets showdesktop,windowselector --end-applets clock,battery,systray,startup &
+
+exec matchbox-window-manager -theme Sato -use_desktop_mode decorated -use_cursor $SHOWCURSOR $@
diff --git a/packages/matchbox-sato/matchbox-sato/matchbox-session b/packages/matchbox-sato/matchbox-sato/matchbox-session
new file mode 100644
index 0000000000..65f1ce72ca
--- /dev/null
+++ b/packages/matchbox-sato/matchbox-sato/matchbox-session
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# Very simple session manager for matchbox tools
+#
+
+# Uncomment below to enable parsing of debian menu entrys
+# export MB_USE_DEB_MENUS=1
+
+if [ -e $HOME/.matchbox/session ]
+then
+exec $HOME/.matchbox/session
+fi
+
+if [ -e /etc/matchbox/session ]
+then
+exec /etc/matchbox/session
+fi
+
+# Default files to run if $HOME/.matchbox/session or /etc/matchbox/session
+# dont exist.
+
+matchbox-desktop &
+matchbox-panel --orientation south &
+exec matchbox-window-manager $@
diff --git a/packages/matchbox-sato/matchbox-sato_0.1.bb b/packages/matchbox-sato/matchbox-sato_0.1.bb
new file mode 100644
index 0000000000..b622f24586
--- /dev/null
+++ b/packages/matchbox-sato/matchbox-sato_0.1.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "Custom MB session files for poky"
+LICENSE = "GPL"
+SECTION = "x11"
+RDEPENDS = "gtk-sato-engine matchbox-theme-sato gtk-theme-sato matchbox-panel-2 matchbox-desktop-sato"
+RCONFLICTS = "matchbox-common"
+PR = "r17"
+
+SRC_URI = "file://etc file://matchbox-session"
+S = ${WORKDIR}
+
+do_install() {
+ install -d ${D}/${bindir}
+ install -m 0755 ${S}/matchbox-session ${D}/${bindir}
+ cp -R ${S}/etc ${D}/etc
+ rm -fR ${D}/etc/.svn
+ rm -fR ${D}/etc/matchbox/.svn
+ chmod -R 755 ${D}/etc
+}
+
+pkg_postinst_matchbox-sato () {
+#!/bin/sh -e
+if [ "x$D" != "x" ]; then
+ exit 1
+fi
+
+gconftool-2 --config-source=xml::$D${sysconfdir}/gconf/gconf.xml.defaults --direct --type string --set /desktop/poky/interface/theme Sato
+gconftool-2 --config-source=xml::$D${sysconfdir}/gconf/gconf.xml.defaults --direct --type string --set /desktop/poky/interface/icon_theme Sato
+gconftool-2 --config-source=xml::$D${sysconfdir}/gconf/gconf.xml.defaults --direct --type string --set /desktop/poky/interface/font_name "Sans 9"
+}
diff --git a/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb b/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb
index c695388780..592ffa50a2 100644
--- a/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb
+++ b/packages/matchbox-themes-extra/matchbox-themes-extra_0.3.bb
@@ -12,7 +12,7 @@ PACKAGE_ARCH = "all"
inherit autotools pkgconfig
# split into several packages plus one meta package
-PACKAGES = "${PN} ${PN}-industrial ${PN}-expose ${PN}-mbcrystal"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-industrial ${PN}-expose ${PN}-mbcrystal"
ALLOW_EMPTY_${PN} = "1"
FILES_${PN} = ""
diff --git a/packages/meta/external-toolchain.bb b/packages/meta/external-toolchain.bb
index c483ea26a6..47d9a93a15 100644
--- a/packages/meta/external-toolchain.bb
+++ b/packages/meta/external-toolchain.bb
@@ -30,21 +30,21 @@ do_stage() {
install -d ${STAGING_DIR}/pkgdata/
install -d ${STAGING_DIR_TARGET}/shlibs/
- cp -ar ${prefix}/pkgdata/* ${STAGING_DIR}/pkgdata/
- cp -ar ${prefix}/${TARGET_SYS}/shlibs/* ${STAGING_DIR_TARGET}/shlibs/
+ cp -pPRr ${prefix}/pkgdata/* ${STAGING_DIR}/pkgdata/
+ cp -pPRr ${prefix}/${TARGET_SYS}/shlibs/* ${STAGING_DIR_TARGET}/shlibs/
if [ -d ${prefix}/ipk ]; then
install -d ${DEPLOY_DIR_IPK}/
- cp -ar ${prefix}/ipk/* ${DEPLOY_DIR_IPK}/
+ cp -pPRr ${prefix}/ipk/* ${DEPLOY_DIR_IPK}/
fi
if [ -d ${prefix}/deb ]; then
install -d ${DEPLOY_DIR_DEB}/
- cp -ar ${prefix}/deb/* ${DEPLOY_DIR_DEB}/
+ cp -pPRr ${prefix}/deb/* ${DEPLOY_DIR_DEB}/
fi
if [ -d ${prefix}/pstage -a "x${DEPLOY_DIR_PSTAGE}" != "x" ]; then
install -d ${DEPLOY_DIR_PSTAGE}/
- cp -ar ${prefix}/pstage/* ${DEPLOY_DIR_PSTAGE}/
+ cp -pPRr ${prefix}/pstage/* ${DEPLOY_DIR_PSTAGE}/
fi
}
diff --git a/packages/meta/meta-angstrom-2007.bb b/packages/meta/meta-angstrom-2007.bb
new file mode 100644
index 0000000000..a3a2c78a79
--- /dev/null
+++ b/packages/meta/meta-angstrom-2007.bb
@@ -0,0 +1,32 @@
+# Meta file to inform the autobuilder which packages to build for the feeds
+# Any changes should be discussed first on the angstrom-distro-devel mailinglist
+
+# Try to keep it alphabetically sorted please
+
+inherit meta
+
+RDEPENDS = ""
+
+# Basic tools
+RDEPENDS += " \
+ task-proper-tools \
+ screen \
+ "
+
+# Browsers know to work on all archs
+RDEPENDS += " \
+ gpe-mini-browser \
+ midori \
+ minimo \
+ openmoko-browser2 \
+ webkit-gtklauncher \
+ "
+
+# Webservers
+RDEPENDS += " \
+ apache2 \
+ boa \
+ cherokee \
+ lighttpd \
+ thttpd \
+ "
diff --git a/packages/meta/meta-nas-server.bb b/packages/meta/meta-nas-server.bb
new file mode 100644
index 0000000000..3deb44c2bd
--- /dev/null
+++ b/packages/meta/meta-nas-server.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Meta-package for a network attached storage server"
+LICENSE = "MIT"
+PR = "r0"
+
+RDEPENDS = "\
+ task-nas-server-everything \
+ "
+
+inherit meta
+
diff --git a/packages/meta/meta-toolchain-gpe-sbox.bb b/packages/meta/meta-toolchain-gpe-sbox.bb
index d32087b964..74ba03825f 100644
--- a/packages/meta/meta-toolchain-gpe-sbox.bb
+++ b/packages/meta/meta-toolchain-gpe-sbox.bb
@@ -9,3 +9,4 @@ TOOLCHAIN_TARGET_TASK = "\
require meta-toolchain.bb
+SDK_SUFFIX = "toolchain-gpe-sbox" \ No newline at end of file
diff --git a/packages/meta/meta-toolchain-gpe.bb b/packages/meta/meta-toolchain-gpe.bb
index f79ff31bb7..cad03d71a6 100644
--- a/packages/meta/meta-toolchain-gpe.bb
+++ b/packages/meta/meta-toolchain-gpe.bb
@@ -7,3 +7,4 @@ TOOLCHAIN_TARGET_TASK = "\
require meta-toolchain.bb
+SDK_SUFFIX = "toolchain-gpe" \ No newline at end of file
diff --git a/packages/meta/meta-toolchain-openmoko.bb b/packages/meta/meta-toolchain-openmoko.bb
index 90eff20259..b7e5626f61 100644
--- a/packages/meta/meta-toolchain-openmoko.bb
+++ b/packages/meta/meta-toolchain-openmoko.bb
@@ -1,4 +1,7 @@
-TOOLCHAIN_TARGET_TASK = "task-toolchain-openmoko-sdk"
+PR = "r1"
-require meta-toolchain.bb
+TOOLCHAIN_TARGET_TASK = "task-openmoko-toolchain-target"
+TOOLCHAIN_HOST_TASK = "task-openmoko-toolchain-host"
+require meta-toolchain.bb
+SDK_SUFFIX = "toolchain-openmoko"
diff --git a/packages/meta/meta-toolchain-sbox.bb b/packages/meta/meta-toolchain-sbox.bb
index 6e31fd0d69..1283c599c6 100644
--- a/packages/meta/meta-toolchain-sbox.bb
+++ b/packages/meta/meta-toolchain-sbox.bb
@@ -4,3 +4,5 @@ TOOLCHAIN_TARGET_TASK = "\
require meta-toolchain.bb
+SDK_SUFFIX = "toolchain-sbox"
+
diff --git a/packages/meta/meta-toolchain.bb b/packages/meta/meta-toolchain.bb
index 91467e5140..923844ef8c 100644
--- a/packages/meta/meta-toolchain.bb
+++ b/packages/meta/meta-toolchain.bb
@@ -1,12 +1,14 @@
DESCRIPTION = "Meta package for building a installable toolchain"
LICENSE = "MIT"
DEPENDS = "ipkg-native ipkg-utils-native fakeroot-native sed-native"
+PR = "r2"
inherit sdk meta
SDK_DIR = "${WORKDIR}/sdk"
SDK_OUTPUT = "${SDK_DIR}/image"
SDK_DEPLOY = "${TMPDIR}/deploy/sdk"
+SDK_SUFFIX = "toolchain"
FEED_ARCH ?= "${TARGET_ARCH}"
@@ -73,10 +75,17 @@ do_populate_sdk() {
for arch in $revipkgarchs; do
pkgnames=${DEPLOY_DIR_IPK}/$arch/${pkg}_*_$arch.ipk
if [ -e $pkgnames ]; then
- echo "Found $pkgnames"
+ oenote "Found $pkgnames"
cp $pkgnames ${SDK_OUTPUT}/${prefix}/ipk/
orig_pkg=`ipkg-list-fields $pkgnames | grep OE: | cut -d ' ' -f2`
- pkg_subdir=$arch${TARGET_VENDOR}${@['-' + bb.data.getVar('TARGET_OS', d, 1), ''][bb.data.getVar('TARGET_OS', d, 1) == ('' or 'custom')]}
+ pkg_subdir_postfix=${TARGET_VENDOR}${@['-' + bb.data.getVar('TARGET_OS', d, 1), ''][bb.data.getVar('TARGET_OS', d, 1) == ('' or 'custom')]}
+ for aarch in $revipkgarchs; do
+ if [ -e "${STAGING_DIR}/pkgdata/${aarch}${pkg_subdir_postfix}/${orig_pkg}" ]; then
+ pkg_subdir="${aarch}${pkg_subdir_postfix}"
+ break
+ fi
+ done
+ oenote "Original package in ${pkg_subdir}"
mkdir -p ${SDK_OUTPUT}/${prefix}/pkgdata/$pkg_subdir/runtime
cp ${STAGING_DIR}/pkgdata/$pkg_subdir/$orig_pkg ${SDK_OUTPUT}/${prefix}/pkgdata/$pkg_subdir/
subpkgs=`cat ${STAGING_DIR}/pkgdata/$pkg_subdir/$orig_pkg | grep PACKAGES: | cut -b 10-`
@@ -120,7 +129,7 @@ do_populate_sdk() {
# package it up
mkdir -p ${SDK_DEPLOY}
cd ${SDK_OUTPUT}
- fakeroot tar cfj ${SDK_DEPLOY}/${DISTRO}-${DISTRO_VERSION}-${FEED_ARCH}-${TARGET_OS}-toolchain.tar.bz2 .
+ fakeroot tar cfj ${SDK_DEPLOY}/${DISTRO}-${DISTRO_VERSION}-${FEED_ARCH}-${TARGET_OS}-${SDK_SUFFIX}.tar.bz2 .
}
do_populate_sdk[nostamp] = "1"
diff --git a/packages/meta/nylon-feed.inc b/packages/meta/nylon-feed.inc
index de1a7ff484..d7b83e8edb 100644
--- a/packages/meta/nylon-feed.inc
+++ b/packages/meta/nylon-feed.inc
@@ -54,7 +54,7 @@ sysvinit \
tcl \
tcpdump \
tinc \
-timezones \
+tzdata \
usbutils \
vtun \
wireless-tools \
diff --git a/packages/meta/openprotium-packages.bb b/packages/meta/openprotium-packages.bb
index afff86639a..7d66ee5d61 100644
--- a/packages/meta/openprotium-packages.bb
+++ b/packages/meta/openprotium-packages.bb
@@ -5,7 +5,7 @@
DESCRIPTION = "Packages that are compatible with the Openprotium on the iomega Storcenter"
HOMEPAGE = "http://www.openprotium.org"
LICENSE = "MIT"
-PR = "r3"
+PR = "r4"
CONFLICTS = "db3"
PROVIDES += "${OPENPROTIUM_IMAGENAME}-packages"
@@ -30,13 +30,14 @@ inherit meta
# flac \
# gphoto2 \
# gdb \
-# glib-2.0 \
# lirc \
# masqmail \
# wakelan \
# wireless-tools \
# wpa-supplicant \
+# openldap \
# bluez-utils-nodbus \
+# lcdproc \
# libxml2 \
# libdvb \
# madwifi-ng \
@@ -53,7 +54,13 @@ inherit meta
# samba \
# sane-backends \
# vsftpd \
+# syslog-ng \
# zd1211 \
+# cdparanoia \
+# litestream \
+# pvrusb2-mci \
+# pwc \
+# fetchmail \
OPENPROTIUM_PACKAGES = "\
alsa-lib \
@@ -70,7 +77,6 @@ OPENPROTIUM_PACKAGES = "\
bridge-utils \
bzip2 \
ccxstream \
- cdparanoia \
cdstatus \
coreutils \
cron \
@@ -85,7 +91,6 @@ OPENPROTIUM_PACKAGES = "\
e2fsprogs-libs \
expat \
ez-ipupdate \
- fetchmail \
file \
findutils \
flex \
@@ -94,6 +99,7 @@ OPENPROTIUM_PACKAGES = "\
gawk \
gcc \
gdbm \
+ glib-2.0 \
gnu-config \
grep \
gtk-doc \
@@ -105,8 +111,6 @@ OPENPROTIUM_PACKAGES = "\
ircp \
joe \
jpeg \
- lcdproc \
- less \
libao \
libid3tag \
liblockfile \
@@ -119,7 +123,6 @@ OPENPROTIUM_PACKAGES = "\
libupnp \
libusb \
libvorbis \
- litestream \
lrzsz \
lsof \
lvm2 \
@@ -144,7 +147,6 @@ OPENPROTIUM_PACKAGES = "\
nmap \
ntp \
openobex-apps \
- openldap \
openntpd \
openobex \
openssh \
@@ -156,8 +158,6 @@ OPENPROTIUM_PACKAGES = "\
pkgconfig \
ppp \
procps \
- pvrusb2-mci \
- pwc \
quilt \
rng-tools \
rsync \
@@ -169,7 +169,6 @@ OPENPROTIUM_PACKAGES = "\
strace \
streamripper \
sysfsutils \
- syslog-ng \
tar \
thttpd \
tiff \
@@ -178,7 +177,6 @@ OPENPROTIUM_PACKAGES = "\
util-linux \
vim \
vlan \
- watchdog \
wget \
zip \
zlib \
@@ -234,7 +232,7 @@ SLUGOS_PACKAGES_append_linux = "\
man man-pages \
psmisc \
screen \
- timezones \
+ tzdata \
wview-sim wview-vpro wview-wxt510 \
wview-sim-mysql wview-vpro-mysql \
wview-wxt510-mysql \
diff --git a/packages/meta/oplinux-packages.bb b/packages/meta/oplinux-packages.bb
index 62513c11cd..190f323838 100644
--- a/packages/meta/oplinux-packages.bb
+++ b/packages/meta/oplinux-packages.bb
@@ -4,7 +4,7 @@
DESCRIPTION = "Packages that are compatible with the OPLinux distro"
HOMEPAGE = "http://www.digital-opsis/oplinux"
LICENSE = "MIT"
-PR = "r1"
+PR = "r2"
PROVIDES += "${OPLINUX_IMAGENAME}-packages"
EXCLUDE_FROM_WORLD = "1"
@@ -359,7 +359,7 @@ PACKAGES_LIST = "\
man man-pages \
psmisc \
screen \
- timezones \
+ tzdata \
wview-sim wview-vpro wview-wxt510 \
wview-sim-mysql wview-vpro-mysql \
wview-wxt510-mysql \
diff --git a/packages/meta/slugos-packages.bb b/packages/meta/slugos-packages.bb
index e914865e9b..6e8d9e4089 100644
--- a/packages/meta/slugos-packages.bb
+++ b/packages/meta/slugos-packages.bb
@@ -5,7 +5,7 @@
DESCRIPTION = "Packages that are compatible with the SlugOS firmware"
HOMEPAGE = "http://www.nslu2-linux.org"
LICENSE = "MIT"
-PR = "r42"
+PR = "r44"
CONFLICTS = "db3"
COMPATIBLE_MACHINE = "nslu2"
@@ -24,7 +24,18 @@ SLUGOS_PACKAGES = "\
apex-env \
apr \
asterisk \
- asterisk-sounds \
+ asterisk-core-sounds-en-alaw \
+ asterisk-core-sounds-en-g729 \
+ asterisk-core-sounds-en-gsm \
+ asterisk-core-sounds-en-ulaw \
+ asterisk-extra-sounds-en-alaw \
+ asterisk-extra-sounds-en-g729 \
+ asterisk-extra-sounds-en-gsm \
+ asterisk-extra-sounds-en-ulaw \
+ asterisk-moh-freeplay-alaw \
+ asterisk-moh-freeplay-g729 \
+ asterisk-moh-freeplay-gsm \
+ asterisk-moh-freeplay-ulaw \
atftp \
audiofile \
aumix \
@@ -137,6 +148,7 @@ SLUGOS_PACKAGES = "\
miau \
microcom \
minicom \
+ monit \
motion \
mpd \
mt-daapd \
@@ -148,9 +160,11 @@ SLUGOS_PACKAGES = "\
ncftp \
ncurses \
net-tools \
+ netatalk \
netcat \
netpbm \
nfs-utils \
+ ngrep \
nmap \
ntfs-3g \
ntp \
@@ -191,13 +205,15 @@ SLUGOS_PACKAGES = "\
ssmtp \
strace \
streamripper \
+ stunnel \
sudo \
sysfsutils \
tar \
+ tcpdump \
thttpd \
tiff \
- timezones \
tzdata \
+ unrar \
unzip \
upslug2 \
usbutils \
@@ -251,6 +267,8 @@ SLUGOS_EXTRA_PACKAGES ?= ""
DEPENDS = "\
slugos-image \
slugos-native \
+ task-nas-server-everything \
+ task-proper-tools \
${SLUGOS_PACKAGES} \
${SLUGOS_EXTRA_PACKAGES} \
package-index \
diff --git a/packages/meta/unslung-binary-kernel-packages.bb b/packages/meta/unslung-binary-kernel-packages.bb
deleted file mode 100644
index eb95b847fd..0000000000
--- a/packages/meta/unslung-binary-kernel-packages.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-DESCRIPTION = "Packages that are compatible with the Unslung binary kernel firmware"
-LICENSE = "MIT"
-PR = "r2"
-COMPATIBLE_MACHINE = "nslu2"
-
-ALLOW_EMPTY = "1"
-PACKAGES = "${PN}"
-
-inherit meta
-
-UNSLUNG_PACKAGES = "\
- "
-
-BROKEN_PACKAGES = "\
- "
-
-DEPENDS = 'unslung-image \
- ${UNSLUNG_PACKAGES} \
- package-index'
diff --git a/packages/mgetty/mgetty_1.1.30.bb b/packages/mgetty/mgetty_1.1.30.bb
index 2760b4717e..43c870fc30 100644
--- a/packages/mgetty/mgetty_1.1.30.bb
+++ b/packages/mgetty/mgetty_1.1.30.bb
@@ -61,7 +61,7 @@ do_compile () {
-DVARRUNDIR=\"/var/run\" \
-DAWK=\"awk\" \
-DPERL=\""${bindir}/perl -w"\" -DTKPERL=\"${bindir}/tkperl\" \
- -DECHO=\""echo -e"\" \
+ -DECHO=\""printf"\" \
-DSHELL=\"/bin/bash\" \
-o mksed mksed.c
./mksed >sedscript
diff --git a/packages/midpath/midpath-alsa_0.1.bb b/packages/midpath/midpath-alsa_0.1.bb
index 6d580405b6..1ccace8500 100644
--- a/packages/midpath/midpath-alsa_0.1.bb
+++ b/packages/midpath/midpath-alsa_0.1.bb
@@ -30,7 +30,6 @@ do_stage() {
:
}
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/libmidpathalsa.so \
${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
diff --git a/packages/midpath/midpath-cldc-native_0.1.bb b/packages/midpath/midpath-cldc-native_0.1.bb
index 27700d2e61..4e54497bde 100644
--- a/packages/midpath/midpath-cldc-native_0.1.bb
+++ b/packages/midpath/midpath-cldc-native_0.1.bb
@@ -4,10 +4,7 @@ inherit native
require midpath-cldc_${PV}.bb
-PROVIDES = "virtual/cldc-api-1.1-native"
-RPROVIDES = " "
-
-PACKAGES = " "
+PACKAGES = "${PN}-dbg "
do_install() {
:
diff --git a/packages/midpath/midpath-cldc-sdl_0.1.bb b/packages/midpath/midpath-cldc-sdl_0.1.bb
index 65850e2f4c..6d777f6e8c 100644
--- a/packages/midpath/midpath-cldc-sdl_0.1.bb
+++ b/packages/midpath/midpath-cldc-sdl_0.1.bb
@@ -32,7 +32,6 @@ do_stage() {
install -m 0644 ${S}/external/sdljava-cldc/sdljava-cldc.jar ${STAGING_DATADIR}/java
}
-PACKAGES = "${PN}"
FILES_${PN} = "${datadir}/java/sdljava-cldc.jar \
${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
diff --git a/packages/midpath/midpath-cldc-x11_0.1.bb b/packages/midpath/midpath-cldc-x11_0.1.bb
index 9db0c4a686..7aa8e9c6d9 100644
--- a/packages/midpath/midpath-cldc-x11_0.1.bb
+++ b/packages/midpath/midpath-cldc-x11_0.1.bb
@@ -1,7 +1,7 @@
require midpath.inc
-DEPENDS += " virtual/libx11 virtual/cldc-api-1.1"
+DEPENDS += "virtual/libx11 midpath-cldc"
do_configure() {
@@ -31,7 +31,6 @@ do_stage() {
install -m 0644 ${S}/external/escher-cldc/core/escher-x11-cldc.jar ${STAGING_DATADIR}/java
}
-PACKAGES = "${PN}"
FILES_${PN} = "${datadir}/java/escher-x11-cldc.jar \
${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
diff --git a/packages/midpath/midpath-cldc_0.1.bb b/packages/midpath/midpath-cldc_0.1.bb
index 51a1314467..e18d42781d 100644
--- a/packages/midpath/midpath-cldc_0.1.bb
+++ b/packages/midpath/midpath-cldc_0.1.bb
@@ -1,9 +1,6 @@
require midpath.inc
-PROVIDES = "virtual/cldc-api-1.1"
-RPROVIDES = "virtual/cldc-api-1.1"
-
do_compile() {
mkdir -p ${S}/dist
@@ -18,21 +15,20 @@ cd ${S}/src/cldc-glue
make JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/external/cldc1.1/classes -sourcepath ${S}/src/cldc-glue -source 1.3 -target 1.1"
make install JAVAC=${JAVAC_CMD} JAVAC_FLAGS="-bootclasspath ${S}/external/cldc1.1/classes -source 1.3 -target 1.1" CLASS_DIR=${S}/external/cldc1.1/classes
# Make a jar
-${FASTJAR_CMD} cvf ${S}/dist/cldc1.1.jar -C ${S}/external/cldc1.1/classes .
+${FASTJAR_CMD} cvf ${S}/dist/midpath-cldc1.1.jar -C ${S}/external/cldc1.1/classes .
}
do_install() {
- install -d ${D}${datadir}/java
- install -m 0644 dist/cldc1.1.jar ${D}${datadir}/java
+ install -d ${D}${datadir}/midpath-cldc
+ install -m 0644 dist/midpath-cldc1.1.jar ${D}${datadir}/midpath-cldc
}
do_stage() {
- install -d ${STAGING_DATADIR}/java
- install -m 0644 dist/cldc1.1.jar ${STAGING_DATADIR}/java
+ install -d ${STAGING_DATADIR}/midpath-cldc
+ install -m 0644 dist/midpath-cldc1.1.jar ${STAGING_DATADIR}/midpath-cldc
}
-PACKAGES = "${PN}"
-FILES_${PN} = "${datadir}/java/cldc1.1.jar"
+FILES_${PN} = "${datadir}/midpath-cldc/midpath-cldc1.1.jar"
diff --git a/packages/midpath/midpath-gtk_0.1.bb b/packages/midpath/midpath-gtk_0.1.bb
index 7bf5570ef2..42f6325efa 100644
--- a/packages/midpath/midpath-gtk_0.1.bb
+++ b/packages/midpath/midpath-gtk_0.1.bb
@@ -32,7 +32,6 @@ do_stage() {
:
}
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/libmidpathgtk.so \
${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
diff --git a/packages/midpath/midpath-pulseaudio_0.1.bb b/packages/midpath/midpath-pulseaudio_0.1.bb
index 6344e018a0..1a8c44d38c 100644
--- a/packages/midpath/midpath-pulseaudio_0.1.bb
+++ b/packages/midpath/midpath-pulseaudio_0.1.bb
@@ -30,7 +30,6 @@ do_stage() {
:
}
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/libmidpathpulse.so \
${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
diff --git a/packages/midpath/midpath-qt3x11_0.1.bb b/packages/midpath/midpath-qt3x11_0.1.bb
index 1d24012810..7ad9af9991 100644
--- a/packages/midpath/midpath-qt3x11_0.1.bb
+++ b/packages/midpath/midpath-qt3x11_0.1.bb
@@ -37,7 +37,6 @@ do_stage() {
:
}
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/libmidpathqt.so \
${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
diff --git a/packages/midpath/midpath-qte_0.1.bb b/packages/midpath/midpath-qte_0.1.bb
index 39b9264930..4b7144722f 100644
--- a/packages/midpath/midpath-qte_0.1.bb
+++ b/packages/midpath/midpath-qte_0.1.bb
@@ -35,7 +35,6 @@ do_stage() {
:
}
-PACKAGES = "${PN}"
FILES_${PN} = "${libdir}/libmidpathqt.so \
${datadir}/java/resources-embedded/com/sun/midp/configuration/configuration.cfg \
diff --git a/packages/midpath/midpath-test_0.1.bb b/packages/midpath/midpath-test_0.1.bb
index 14bfdc97f0..3d06e80797 100644
--- a/packages/midpath/midpath-test_0.1.bb
+++ b/packages/midpath/midpath-test_0.1.bb
@@ -37,7 +37,6 @@ do_stage() {
:
}
-PACKAGES = "${PN}"
FILES_${PN} = "${datadir}/java/midpath-tests.jar \
# ${bindir}/graphical_launcher-j2se.sh \
diff --git a/packages/midpath/midpath.inc b/packages/midpath/midpath.inc
index 33793bffd0..4bc3b71598 100644
--- a/packages/midpath/midpath.inc
+++ b/packages/midpath/midpath.inc
@@ -9,14 +9,14 @@ SRC_URI = "http://downloads.sourceforge.net/midpath/midpath-${PV}.tar.gz"
S = "${WORKDIR}/midpath-${PV}"
-DEPENDS = "ecj-native fastjar-native classpath-minimal"
+DEPENDS = "virtual/javac-native fastjar-native classpath"
-JAVAC_CMD = "${STAGING_BINDIR_NATIVE}/ecj"
+JAVAC_CMD = "${STAGING_BINDIR_NATIVE}/javac"
FASTJAR_CMD = "${STAGING_BINDIR_NATIVE}/fastjar"
JAVA_PATH = "${STAGING_DATADIR}/java"
-GNU_CLASSPATH_PATH = "${JAVA_PATH}/classpath-minimal/glibj.zip"
+GNU_CLASSPATH_PATH = "${JAVA_PATH}/classpath/glibj.zip"
-CLDC_PATH = ${JAVA_PATH}/cldc1.1.jar
+CLDC_PATH = ${STAGING_DATADIR}/midpath-cldc/midpath-cldc1.1.jar
diff --git a/packages/midpath/midpath_0.1.bb b/packages/midpath/midpath_0.1.bb
index 3501144701..e787b053be 100644
--- a/packages/midpath/midpath_0.1.bb
+++ b/packages/midpath/midpath_0.1.bb
@@ -48,7 +48,6 @@ do_stage() {
install -m 0644 dist/midpath.jar ${STAGING_DATADIR}/java
}
-PACKAGES = "${PN}"
FILES_${PN} = "${datadir}/java/midpath.jar \
${datadir}/java/resources-embedded/com/sun/midp/configuration/ \
diff --git a/packages/mime-support/mime-support_3.28.bb b/packages/mime-support/mime-support_3.28.bb
index 7febf2c1e0..f5ebfb650d 100644
--- a/packages/mime-support/mime-support_3.28.bb
+++ b/packages/mime-support/mime-support_3.28.bb
@@ -10,7 +10,7 @@ PR = "r2"
SRC_URI = "${DEBIAN_MIRROR}/main/m/mime-support/mime-support_${PV}-1.tar.gz"
S = "${WORKDIR}/${PN}"
-PACKAGES = "${PN} ${PN}-doc"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc"
FILES_${PN} += " ${libdir}/mime"
docdir_append = "/${PN}"
diff --git a/packages/misc-binary-only/prism-firmware.bb b/packages/misc-binary-only/prism-firmware.bb
index 903c55e15e..3e2cf4531c 100644
--- a/packages/misc-binary-only/prism-firmware.bb
+++ b/packages/misc-binary-only/prism-firmware.bb
@@ -28,5 +28,4 @@ do_install() {
install -m 0644 ${WORKDIR}/hostap.rules ${D}${sysconfdir}/udev/rules.d/
}
-PACKAGES = "${PN}"
FILES_${PN} += "${base_libdir}"
diff --git a/packages/mkbot/mkbot_0.3.bb b/packages/mkbot/mkbot_0.3.bb
index 195d74ca52..92df433e45 100644
--- a/packages/mkbot/mkbot_0.3.bb
+++ b/packages/mkbot/mkbot_0.3.bb
@@ -8,6 +8,6 @@ SECTION = "network"
SRC_URI = "http://files.fredemmott.co.uk/mkbot-${PV}.tar.bz2"
S = "${WORKDIR}/MKbot-0.3"
-inherit qmake qt4x11
+inherit qt4x11
#FIXME: lacks packaging
diff --git a/packages/modphp/modphp5.inc b/packages/modphp/modphp5.inc
index 202cacc75b..e8701b0b99 100644
--- a/packages/modphp/modphp5.inc
+++ b/packages/modphp/modphp5.inc
@@ -11,7 +11,7 @@ S = "${WORKDIR}/php-${PV}"
inherit autotools
FILES_${PN} = "${libdir}/apache2 /etc"
-FILES_${PN}-dbg = "${libdir}/apache2/modules/.debug"
+FILES_${PN}-dbg += "${libdir}/apache2/modules/.debug"
CFLAGS += " -g -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED"
EXTRA_OECONF = "--with-apxs2=${STAGING_BINDIR_NATIVE}/apxs \
diff --git a/packages/modutils/modutils_2.4.27.bb b/packages/modutils/modutils_2.4.27.bb
index c02dc1d5c3..9cedecaa9a 100644
--- a/packages/modutils/modutils_2.4.27.bb
+++ b/packages/modutils/modutils_2.4.27.bb
@@ -82,7 +82,7 @@ pkg_prerm_modutils-modinfo() {
update-alternatives --remove modinfo /sbin/modinfo.24
}
-PACKAGES = "modutils-depmod modutils-modinfo modutils-doc modutils"
+PACKAGES = "${PN}-dbg modutils-depmod modutils-modinfo modutils-doc modutils"
FILES_modutils-depmod = "sbin/depmod.24"
FILES_modutils-modinfo = "sbin/modinfo.24"
diff --git a/packages/monit/.mtn2git_empty b/packages/monit/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/monit/.mtn2git_empty
diff --git a/packages/monit/files/.mtn2git_empty b/packages/monit/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/monit/files/.mtn2git_empty
diff --git a/packages/monit/files/init b/packages/monit/files/init
new file mode 100644
index 0000000000..325a552b28
--- /dev/null
+++ b/packages/monit/files/init
@@ -0,0 +1,42 @@
+#! /bin/sh
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/monit and type
+# > update-rc.d monit defaults 99
+#
+monit=/usr/bin/monit
+pidfile=/var/run/monit.pid
+monit_args="-c /etc/monitrc"
+
+test -x "$monit" || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting Monit"
+ start-stop-daemon --start --quiet --exec $monit -- $monit_args
+ RETVAL=$?
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping Monit"
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ RETVAL=$?
+ echo "."
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ RETVAL=$?
+ ;;
+ status)
+ $monit $monit_args status
+ RETVAL=$?
+ echo "."
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|status}"
+ exit 1
+esac
+
+exit $RETVAL
+
diff --git a/packages/monit/monit-4.10.1/.mtn2git_empty b/packages/monit/monit-4.10.1/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/monit/monit-4.10.1/.mtn2git_empty
diff --git a/packages/monit/monit-4.10.1/init b/packages/monit/monit-4.10.1/init
new file mode 100644
index 0000000000..325a552b28
--- /dev/null
+++ b/packages/monit/monit-4.10.1/init
@@ -0,0 +1,42 @@
+#! /bin/sh
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/monit and type
+# > update-rc.d monit defaults 99
+#
+monit=/usr/bin/monit
+pidfile=/var/run/monit.pid
+monit_args="-c /etc/monitrc"
+
+test -x "$monit" || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting Monit"
+ start-stop-daemon --start --quiet --exec $monit -- $monit_args
+ RETVAL=$?
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping Monit"
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ RETVAL=$?
+ echo "."
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ RETVAL=$?
+ ;;
+ status)
+ $monit $monit_args status
+ RETVAL=$?
+ echo "."
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|status}"
+ exit 1
+esac
+
+exit $RETVAL
+
diff --git a/packages/monit/monit_4.10.1.bb b/packages/monit/monit_4.10.1.bb
new file mode 100644
index 0000000000..bb18491c5d
--- /dev/null
+++ b/packages/monit/monit_4.10.1.bb
@@ -0,0 +1,24 @@
+LICENSE = "GPL"
+DEPENDS = "openssl"
+
+SRC_URI = "http://www.tildeslash.com/monit/dist/monit-${PV}.tar.gz\
+ file://init"
+
+INITSCRIPT_NAME = "monit"
+INITSCRIPT_PARAMS = "defaults 99"
+
+inherit autotools update-rc.d
+
+EXTRA_OECONF = "--with-ssl-lib-dir=${STAGING_LIBDIR} --with-ssl-incl-dir=${STAGING_INCDIR}"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/monit
+ sed -i 's:# set daemon 120:set daemon 120:' ${S}/monitrc
+ sed -i 's:include /etc/monit.d/:include /${sysconfdir}/monit.d/:' ${S}/monitrc
+ install -m 600 ${S}/monitrc ${D}${sysconfdir}/monitrc
+ install -m 700 -d ${D}${sysconfdir}/monit.d/
+}
+
+CONFFILES_${PN} += "${sysconfdir}/monitrc"
+
diff --git a/packages/mono-xsp/mono-xsp_1.2.5.bb b/packages/mono-xsp/mono-xsp_1.2.5.bb
index bc3386d5bd..0b54ee332a 100644
--- a/packages/mono-xsp/mono-xsp_1.2.5.bb
+++ b/packages/mono-xsp/mono-xsp_1.2.5.bb
@@ -19,7 +19,7 @@ SRC_URI = "http://go-mono.com/sources/xsp/xsp-${PV}.tar.bz2"
S = "${WORKDIR}/xsp-${PV}"
-PACKAGES = "\
+PACKAGES = "${PN}-dbg \
libmono-webserver1.0-cil \
libmono-webserver2.0-cil \
mono-xsp \
@@ -31,21 +31,21 @@ PACKAGES = "\
mono-xsp-dev \
"
-FILES_libmono-webserver1.0-cil-dbg = " \
+FILES_libmono-webserver1.0-cil-dbg += " \
/usr/lib/mono/gac/Mono.WebServer/0.1.*/*.mdb \
"
FILES_libmono-webserver1.0-cil = " \
/usr/lib/mono/gac/Mono.WebServer/0.1.*/ \
/usr/lib/mono/1.0/Mono.WebServer.dll \
"
-FILES_libmono-webserver2.0-cil-dbg = " \
+FILES_libmono-webserver2.0-cil-dbg += " \
/usr/lib/mono/gac/Mono.WebServer2/0.2.*/*.mdb \
"
FILES_libmono-webserver2.0-cil = " \
/usr/lib/mono/gac/Mono.WebServer2/0.2.*/ \
/usr/lib/mono/2.0/Mono.WebServer2.dll \
"
-FILES_${PN}-dbg = " \
+FILES_${PN}-dbg += " \
/usr/lib/mono/gac/xsp/1.2.*/*.mdb \
"
FILES_${PN} = " \
@@ -59,7 +59,7 @@ FILES_${PN} = " \
/usr/lib/xsp/1.0/dbsessmgr.exe.config \
/usr/lib/xsp/1.0/dbsessmgr.exe \
"
-FILES_mono-xsp2-dbg = " \
+FILES_mono-xsp2-dbg += " \
/usr/lib/mono/gac/xsp2/1.2.*/*.dbg \
"
FILES_mono-xsp2 = " \
@@ -73,7 +73,7 @@ FILES_mono-xsp2 = " \
/usr/lib/xsp/2.0/dbsessmgr2.exe.config \
/usr/lib/xsp/2.0/dbsessmgr2.exe \
"
-FILES_mono-mod-mono-server-dbg = "\
+FILES_mono-mod-mono-server-dbg += "\
/usr/lib/mono/gac/mod-mono-server/1.2.*/*.mdb \
"
FILES_mono-mod-mono-server = "\
@@ -81,7 +81,7 @@ FILES_mono-mod-mono-server = "\
/usr/lib/mono/1.0/mod-mono-server.exe \
/usr/bin/mod-mono-server \
"
-FILES_mono-mod-mono-server2-dbg = "\
+FILES_mono-mod-mono-server2-dbg += "\
/usr/lib/mono/gac/mod-mono-server2/1.2.*/*.mdb \
"
FILES_mono-mod-mono-server2 = "\
diff --git a/packages/mono/files/mono-libgc-configure.patch b/packages/mono/files/mono-libgc-configure.patch
new file mode 100644
index 0000000000..641635da3c
--- /dev/null
+++ b/packages/mono/files/mono-libgc-configure.patch
@@ -0,0 +1,20 @@
+Index: mono-1.2.6/libgc/configure.in
+===================================================================
+--- mono-1.2.6.orig/libgc/configure.in 2007-12-12 15:02:31.000000000 -0500
++++ mono-1.2.6/libgc/configure.in 2007-12-12 15:05:10.000000000 -0500
+@@ -17,6 +17,15 @@
+ AC_PREREQ(2.53)
+ AC_INIT(libgc-mono, 6.6, Hans_Boehm@hp.com)
+
++# the following is a very strange bug. CPPFLAGS does not get set correctly
++# if CPPFLAGS is set in the environment. The top level configure script
++# appends to the CPPFLAGS variable, and then exports it. This change should
++# be picked up by this configure script, but it is not. The original
++# env variable is still used for some reason. If CPPFLAGS is not set in the
++# environment, everything works fine.
++# Someone more experienced with autoconf will have to come up with a better fix.
++CPPFLAGS="$CPPFLAGS -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -DUSE_COMPILER_TLS"
++echo "CPPFLAGS verify: start of libgc/configure.in, CPPFLAGS = $CPPFLAGS"
+ AM_INIT_AUTOMAKE(libgc-mono, 6.6, no-define)
+
+ AC_CONFIG_SRCDIR(gcj_mlc.c)
diff --git a/packages/mono/mono-1.2.6/.mtn2git_empty b/packages/mono/mono-1.2.6/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/mono/mono-1.2.6/.mtn2git_empty
diff --git a/packages/mono/mono-1.2.6/configure.patch b/packages/mono/mono-1.2.6/configure.patch
new file mode 100644
index 0000000000..f033248621
--- /dev/null
+++ b/packages/mono/mono-1.2.6/configure.patch
@@ -0,0 +1,23 @@
+Index: mono-1.2.6/configure.in
+===================================================================
+--- mono-1.2.6.orig/configure.in 2007-11-08 17:07:57.000000000 -0500
++++ mono-1.2.6/configure.in 2007-12-12 15:27:52.000000000 -0500
+@@ -1150,6 +1150,8 @@
+ ], [
+ AC_MSG_RESULT(no)
+ with_tls=pthread
++ ], [
++ AC_MSG_RESULT(yes)
+ ])
+ fi
+
+@@ -1252,6 +1254,9 @@
+ ], [
+ with_sigaltstack=no
+ AC_MSG_RESULT(no)
++ ], [
++ AC_MSG_RESULT(yes)
++ AC_DEFINE(HAVE_WORKING_SIGALTSTACK)
+ ])
+ fi
+
diff --git a/packages/mono/mono-mcs-intermediate_1.2.6.bb b/packages/mono/mono-mcs-intermediate_1.2.6.bb
new file mode 100644
index 0000000000..53ff1b25aa
--- /dev/null
+++ b/packages/mono/mono-mcs-intermediate_1.2.6.bb
@@ -0,0 +1,10 @@
+# This is a straw-man recipe for step 1 in the two-step build of
+# mono. Because it's impossible to build the mcs directory
+# in cross-compile mode, this recipe will do a native build,
+# then tar the resulting install tree for usage by the mono
+# package in step 2.
+# See http://www.mono-project.com/Mono:ARM
+
+require mono_1.2.6.inc
+require mono-mcs-intermediate.inc
+
diff --git a/packages/mono/mono_1.2.5.1-files.inc b/packages/mono/mono_1.2.5.1-files.inc
index 3dc580750f..1d7b74e345 100644
--- a/packages/mono/mono_1.2.5.1-files.inc
+++ b/packages/mono/mono_1.2.5.1-files.inc
@@ -1,21 +1,21 @@
# This is a generated file, please do not edit directly
# Use collect-files.py instead. -- Henryk <henryk@openmoko.org>
-FILES_mono-jit-dbg = "/usr/bin/mono*.mdb \
+FILES_mono-jit-dbg += "/usr/bin/mono*.mdb \
/usr/bin/mono*/*.mdb"
FILES_mono-jit = "/usr/bin/mono"
-FILES_mono-gac-dbg = "/usr/bin/gacutil*.mdb \
+FILES_mono-gac-dbg += "/usr/bin/gacutil*.mdb \
/usr/bin/gacutil*/*.mdb \
/usr/lib/mono/1.0/gacutil.exe*.mdb \
/usr/lib/mono/1.0/gacutil.exe*/*.mdb"
FILES_mono-gac = "/usr/bin/gacutil \
/usr/lib/mono/1.0/gacutil.exe"
-FILES_mono-mjs-dbg = "/usr/bin/mjs*.mdb \
+FILES_mono-mjs-dbg += "/usr/bin/mjs*.mdb \
/usr/bin/mjs*/*.mdb \
/usr/lib/mono/1.0/mjs.exe*.mdb \
/usr/lib/mono/1.0/mjs.exe*/*.mdb"
FILES_mono-mjs = "/usr/bin/mjs \
/usr/lib/mono/1.0/mjs.exe*"
-FILES_mono-gmcs-dbg = "/usr/bin/gmcs*.mdb \
+FILES_mono-gmcs-dbg += "/usr/bin/gmcs*.mdb \
/usr/bin/gmcs*/*.mdb \
/usr/bin/wsdl2*.mdb \
/usr/bin/wsdl2*/*.mdb \
@@ -77,7 +77,7 @@ FILES_mono-gmcs = "/usr/bin/gmcs \
/usr/lib/mono/2.0/Microsoft.Common.tasks \
/usr/lib/mono/2.0/Microsoft.Common.targets \
/usr/lib/mono/2.0/Microsoft.VisualBasic.targets"
-FILES_mono-utils-dbg = "/usr/bin/pedump*.mdb \
+FILES_mono-utils-dbg += "/usr/bin/pedump*.mdb \
/usr/bin/pedump*/*.mdb \
/usr/bin/monodis*.mdb \
/usr/bin/monodis*/*.mdb \
@@ -92,7 +92,7 @@ FILES_mono-utils = "/usr/bin/pedump \
/usr/bin/monograph \
/usr/bin/mono-find-provides \
/usr/bin/mono-find-requires"
-FILES_libmono-peapi1.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \
+FILES_libmono-peapi1.0-cil-dbg += "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \
/usr/lib/mono/gac/PEAPI/1.0.*/*/*.mdb \
/usr/lib/mono/gac/PEAPI/1.0.*/.debug/ \
/usr/lib/mono/gac/PEAPI/1.0.*/../.debug/ \
@@ -100,7 +100,7 @@ FILES_libmono-peapi1.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \
/usr/lib/mono/1.0/PEAPI.dll*/*.mdb"
FILES_libmono-peapi1.0-cil = "/usr/lib/mono/gac/PEAPI/1.0.*/ \
/usr/lib/mono/1.0/PEAPI.dll"
-FILES_libmono-cairo1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \
+FILES_libmono-cairo1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Cairo/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Cairo/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Cairo/1.0.*/../.debug/ \
@@ -111,7 +111,7 @@ FILES_libmono-cairo1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \
FILES_libmono-cairo1.0-cil = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/ \
/usr/lib/mono/1.0/Mono.Cairo.dll \
/usr/lib/pkgconfig/mono-cairo.pc"
-FILES_libmono-system-web2.0-cil-dbg = "/usr/lib/mono/gac/System.Web/2.0.*/*.mdb \
+FILES_libmono-system-web2.0-cil-dbg += "/usr/lib/mono/gac/System.Web/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Web/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Web/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Web/2.0.*/../.debug/ \
@@ -127,7 +127,7 @@ FILES_libmono-system-web2.0-cil = "/usr/lib/mono/gac/System.Web/2.0.*/ \
/usr/lib/mono/gac/System.Web.Services/2.0.*/ \
/usr/lib/mono/2.0/System.Web.dll \
/usr/lib/mono/2.0/System.Web.Services.dll"
-FILES_libmono-accessibility2.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/2.0.*/*.mdb \
+FILES_libmono-accessibility2.0-cil-dbg += "/usr/lib/mono/gac/Accessibility/2.0.*/*.mdb \
/usr/lib/mono/gac/Accessibility/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Accessibility/2.0.*/.debug/ \
/usr/lib/mono/gac/Accessibility/2.0.*/../.debug/ \
@@ -135,7 +135,7 @@ FILES_libmono-accessibility2.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/2.0.*/
/usr/lib/mono/2.0/Accessibility.dll*/*.mdb"
FILES_libmono-accessibility2.0-cil = "/usr/lib/mono/gac/Accessibility/2.0.*/ \
/usr/lib/mono/2.0/Accessibility.dll"
-FILES_libmono-microsoft7.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/*.mdb \
+FILES_libmono-microsoft7.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/*.mdb \
/usr/lib/mono/gac/Microsoft.JScript/7.0.*/*/*.mdb \
/usr/lib/mono/gac/Microsoft.JScript/7.0.*/.debug/ \
/usr/lib/mono/gac/Microsoft.JScript/7.0.*/../.debug/ \
@@ -159,7 +159,7 @@ FILES_libmono-microsoft7.0-cil = "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/ \
/usr/lib/mono/1.0/Microsoft.JScript.dll \
/usr/lib/mono/1.0/Microsoft.VisualC.dll \
/usr/lib/mono/1.0/Microsoft.Vsa.dll"
-FILES_libmono-winforms2.0-cil-dbg = "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/*.mdb \
+FILES_libmono-winforms2.0-cil-dbg += "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Windows.Forms/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Windows.Forms/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Windows.Forms/2.0.*/../.debug/ \
@@ -183,7 +183,7 @@ FILES_libmono-winforms2.0-cil = "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/ \
/usr/lib/mono/2.0/System.Windows.Forms.dll \
/usr/lib/mono/2.0/System.Drawing.Design.dll \
/usr/lib/mono/2.0/System.Design.dll"
-FILES_libmono-ldap1.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*.mdb \
+FILES_libmono-ldap1.0-cil-dbg += "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*.mdb \
/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/.debug/ \
/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/../.debug/ \
@@ -191,7 +191,7 @@ FILES_libmono-ldap1.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*
/usr/lib/mono/1.0/Novell.Directory.Ldap.dll*/*.mdb"
FILES_libmono-ldap1.0-cil = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/ \
/usr/lib/mono/1.0/Novell.Directory.Ldap.dll"
-FILES_libmono-sharpzip2.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*.mdb \
+FILES_libmono-sharpzip2.84-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/.debug/ \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/../.debug/ \
@@ -199,7 +199,7 @@ FILES_libmono-sharpzip2.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/
/usr/lib/mono/2.0/ICSharpCode.SharpZipLib.dll*/*.mdb"
FILES_libmono-sharpzip2.84-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/ \
/usr/lib/mono/2.0/ICSharpCode.SharpZipLib.dll"
-FILES_libmono-system-data2.0-cil-dbg = "/usr/lib/mono/gac/System.Data/2.0.*/*.mdb \
+FILES_libmono-system-data2.0-cil-dbg += "/usr/lib/mono/gac/System.Data/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Data/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Data/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Data/2.0.*/../.debug/ \
@@ -207,7 +207,7 @@ FILES_libmono-system-data2.0-cil-dbg = "/usr/lib/mono/gac/System.Data/2.0.*/*.md
/usr/lib/mono/2.0/System.Data.dll*/*.mdb"
FILES_libmono-system-data2.0-cil = "/usr/lib/mono/gac/System.Data/2.0.*/ \
/usr/lib/mono/2.0/System.Data.dll"
-FILES_libmono-corlib2.0-cil-dbg = "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \
+FILES_libmono-corlib2.0-cil-dbg += "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \
/usr/lib/mono/gac/I18N*/2.0.*/*/*.mdb \
/usr/lib/mono/gac/I18N*/2.0.*/.debug/ \
/usr/lib/mono/gac/I18N*/2.0.*/../.debug/ \
@@ -218,7 +218,7 @@ FILES_libmono-corlib2.0-cil-dbg = "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \
FILES_libmono-corlib2.0-cil = "/usr/lib/mono/gac/I18N*/2.0.*/ \
/usr/lib/mono/2.0/I18N*.dll \
/usr/lib/mono/2.0/mscorlib.dll*"
-FILES_libmono-winforms1.0-cil-dbg = "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/*.mdb \
+FILES_libmono-winforms1.0-cil-dbg += "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Windows.Forms/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Windows.Forms/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Windows.Forms/1.0.*/../.debug/ \
@@ -242,7 +242,7 @@ FILES_libmono-winforms1.0-cil = "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/ \
/usr/lib/mono/1.0/System.Windows.Forms.dll \
/usr/lib/mono/1.0/System.Drawing.Design.dll \
/usr/lib/mono/1.0/System.Design.dll"
-FILES_libmono-microsoft8.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/*.mdb \
+FILES_libmono-microsoft8.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/*.mdb \
/usr/lib/mono/gac/Microsoft.JScript/8.0.*/*/*.mdb \
/usr/lib/mono/gac/Microsoft.JScript/8.0.*/.debug/ \
/usr/lib/mono/gac/Microsoft.JScript/8.0.*/../.debug/ \
@@ -266,7 +266,7 @@ FILES_libmono-microsoft8.0-cil = "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/ \
/usr/lib/mono/2.0/Microsoft.JScript.dll \
/usr/lib/mono/2.0/Microsoft.VisualC.dll \
/usr/lib/mono/2.0/Microsoft.Vsa.dll"
-FILES_libmono-corlib1.0-cil-dbg = "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \
+FILES_libmono-corlib1.0-cil-dbg += "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \
/usr/lib/mono/gac/I18N*/1.0.*/*/*.mdb \
/usr/lib/mono/gac/I18N*/1.0.*/.debug/ \
/usr/lib/mono/gac/I18N*/1.0.*/../.debug/ \
@@ -277,7 +277,7 @@ FILES_libmono-corlib1.0-cil-dbg = "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \
FILES_libmono-corlib1.0-cil = "/usr/lib/mono/gac/I18N*/1.0.*/ \
/usr/lib/mono/1.0/I18N*.dll \
/usr/lib/mono/1.0/mscorlib.dll*"
-FILES_libmono-system-web1.0-cil-dbg = "/usr/lib/mono/gac/System.Web/1.0.*/*.mdb \
+FILES_libmono-system-web1.0-cil-dbg += "/usr/lib/mono/gac/System.Web/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Web/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Web/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Web/1.0.*/../.debug/ \
@@ -293,7 +293,7 @@ FILES_libmono-system-web1.0-cil = "/usr/lib/mono/gac/System.Web/1.0.*/ \
/usr/lib/mono/gac/System.Web.Services/1.0.*/ \
/usr/lib/mono/1.0/System.Web.dll \
/usr/lib/mono/1.0/System.Web.Services.dll"
-FILES_libmono-system-runtime2.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/2.0.*/*.mdb \
+FILES_libmono-system-runtime2.0-cil-dbg += "/usr/lib/mono/gac/System.Runtime.*/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Runtime.*/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Runtime.*/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Runtime.*/2.0.*/../.debug/ \
@@ -301,7 +301,7 @@ FILES_libmono-system-runtime2.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/2.
/usr/lib/mono/2.0/System.Runtime.*.dll*/*.mdb"
FILES_libmono-system-runtime2.0-cil = "/usr/lib/mono/gac/System.Runtime.*/2.0.*/ \
/usr/lib/mono/2.0/System.Runtime.*.dll"
-FILES_libmono-cscompmgd8.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \
+FILES_libmono-cscompmgd8.0-cil-dbg += "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \
/usr/lib/mono/gac/cscompmgd/8.0.*/*/*.mdb \
/usr/lib/mono/gac/cscompmgd/8.0.*/.debug/ \
/usr/lib/mono/gac/cscompmgd/8.0.*/../.debug/ \
@@ -309,7 +309,7 @@ FILES_libmono-cscompmgd8.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \
/usr/lib/mono/2.0/cscompmgd.dll*/*.mdb"
FILES_libmono-cscompmgd8.0-cil = "/usr/lib/mono/gac/cscompmgd/8.0.*/ \
/usr/lib/mono/2.0/cscompmgd.dll"
-FILES_libmono-cscompmgd7.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \
+FILES_libmono-cscompmgd7.0-cil-dbg += "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \
/usr/lib/mono/gac/cscompmgd/7.0.*/*/*.mdb \
/usr/lib/mono/gac/cscompmgd/7.0.*/.debug/ \
/usr/lib/mono/gac/cscompmgd/7.0.*/../.debug/ \
@@ -317,7 +317,7 @@ FILES_libmono-cscompmgd7.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \
/usr/lib/mono/1.0/cscompmgd.dll*/*.mdb"
FILES_libmono-cscompmgd7.0-cil = "/usr/lib/mono/gac/cscompmgd/7.0.*/ \
/usr/lib/mono/1.0/cscompmgd.dll"
-FILES_libmono-firebirdsql1.7-cil-dbg = "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*.mdb \
+FILES_libmono-firebirdsql1.7-cil-dbg += "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*.mdb \
/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*/*.mdb \
/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/.debug/ \
/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/../.debug/ \
@@ -325,10 +325,10 @@ FILES_libmono-firebirdsql1.7-cil-dbg = "/usr/lib/mono/gac/FirebirdSql.Data.Fireb
/usr/lib/mono/1.0/FirebirdSql.Data.Firebird.dll*/*.mdb"
FILES_libmono-firebirdsql1.7-cil = "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/ \
/usr/lib/mono/1.0/FirebirdSql.Data.Firebird.dll"
-FILES_mono-jay-dbg = "/usr/bin/jay*.mdb \
+FILES_mono-jay-dbg += "/usr/bin/jay*.mdb \
/usr/bin/jay*/*.mdb"
FILES_mono-jay = "/usr/bin/jay"
-FILES_libmono-data-tds1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb \
+FILES_libmono-data-tds1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/../.debug/ \
@@ -336,7 +336,7 @@ FILES_libmono-data-tds1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb
/usr/lib/mono/1.0/Mono.Data.Tds.dll*/*.mdb"
FILES_libmono-data-tds1.0-cil = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/ \
/usr/lib/mono/1.0/Mono.Data.Tds.dll"
-FILES_libmono-sqlite1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*.mdb \
+FILES_libmono-sqlite1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/../.debug/ \
@@ -352,7 +352,7 @@ FILES_libmono-sqlite1.0-cil = "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/ \
/usr/lib/mono/gac/Mono.Data.SqliteClient/1.0.*/ \
/usr/lib/mono/1.0/Mono.Data.Sqlite.dll \
/usr/lib/mono/1.0/Mono.Data.SqliteClient.dll"
-FILES_libmono-relaxng1.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*.mdb \
+FILES_libmono-relaxng1.0-cil-dbg += "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*.mdb \
/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/.debug/ \
/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/../.debug/ \
@@ -360,7 +360,7 @@ FILES_libmono-relaxng1.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/
/usr/lib/mono/1.0/Commons.Xml.Relaxng.dll*/*.mdb"
FILES_libmono-relaxng1.0-cil = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/ \
/usr/lib/mono/1.0/Commons.Xml.Relaxng.dll"
-FILES_libmono-dev-dbg = "/usr/lib/libmono*.a*.mdb \
+FILES_libmono-dev-dbg += "/usr/lib/libmono*.a*.mdb \
/usr/lib/libmono*.a*/*.mdb \
/usr/lib/libMono*.a*.mdb \
/usr/lib/libMono*.a*/*.mdb \
@@ -383,7 +383,7 @@ FILES_libmono-dev = "/usr/lib/libmono*.a \
/usr/lib/pkgconfig/mono.pc \
/usr/lib/pkgconfig/dotnet.pc \
/usr/include/"
-FILES_libmono-accessibility1.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/1.0.*/*.mdb \
+FILES_libmono-accessibility1.0-cil-dbg += "/usr/lib/mono/gac/Accessibility/1.0.*/*.mdb \
/usr/lib/mono/gac/Accessibility/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Accessibility/1.0.*/.debug/ \
/usr/lib/mono/gac/Accessibility/1.0.*/../.debug/ \
@@ -391,13 +391,13 @@ FILES_libmono-accessibility1.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/1.0.*/
/usr/lib/mono/1.0/Accessibility.dll*/*.mdb"
FILES_libmono-accessibility1.0-cil = "/usr/lib/mono/gac/Accessibility/1.0.*/ \
/usr/lib/mono/1.0/Accessibility.dll"
-FILES_mono-common-dbg = "/etc/mono*.mdb \
+FILES_mono-common-dbg += "/etc/mono*.mdb \
/etc/mono*/*.mdb \
/usr/share/mono-1.0/mono/cil/cil-opcodes.xml*.mdb \
/usr/share/mono-1.0/mono/cil/cil-opcodes.xml*/*.mdb"
FILES_mono-common = "/etc/mono \
/usr/share/mono-1.0/mono/cil/cil-opcodes.xml"
-FILES_libmono-oracle1.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*.mdb \
+FILES_libmono-oracle1.0-cil-dbg += "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/../.debug/ \
@@ -405,7 +405,7 @@ FILES_libmono-oracle1.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/1.
/usr/lib/mono/1.0/System.Data.OracleClient.dll*/*.mdb"
FILES_libmono-oracle1.0-cil = "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/ \
/usr/lib/mono/1.0/System.Data.OracleClient.dll"
-FILES_libmono-system-data1.0-cil-dbg = "/usr/lib/mono/gac/System.Data/1.0.*/*.mdb \
+FILES_libmono-system-data1.0-cil-dbg += "/usr/lib/mono/gac/System.Data/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Data/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Data/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Data/1.0.*/../.debug/ \
@@ -413,7 +413,7 @@ FILES_libmono-system-data1.0-cil-dbg = "/usr/lib/mono/gac/System.Data/1.0.*/*.md
/usr/lib/mono/1.0/System.Data.dll*/*.mdb"
FILES_libmono-system-data1.0-cil = "/usr/lib/mono/gac/System.Data/1.0.*/ \
/usr/lib/mono/1.0/System.Data.dll"
-FILES_libmono-bytefx0.7.6.2-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*.mdb \
+FILES_libmono-bytefx0.7.6.2-cil-dbg += "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*.mdb \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*/*.mdb \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/.debug/ \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/../.debug/ \
@@ -421,7 +421,7 @@ FILES_libmono-bytefx0.7.6.2-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*.
/usr/lib/mono/2.0/ByteFX.Data.dll*/*.mdb"
FILES_libmono-bytefx0.7.6.2-cil = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/ \
/usr/lib/mono/2.0/ByteFX.Data.dll"
-FILES_libmono0-dbg = "/usr/lib/libmono*.so.*.mdb \
+FILES_libmono0-dbg += "/usr/lib/libmono*.so.*.mdb \
/usr/lib/libmono*.so.*/*.mdb \
/usr/lib/libMonoPosixHelper.so*.mdb \
/usr/lib/libMonoPosixHelper.so*/*.mdb \
@@ -430,7 +430,7 @@ FILES_libmono0-dbg = "/usr/lib/libmono*.so.*.mdb \
FILES_libmono0 = "/usr/lib/libmono*.so.* \
/usr/lib/libMonoPosixHelper.so \
/usr/lib/libMonoSupportW.so"
-FILES_libmono-sharpzip0.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*.mdb \
+FILES_libmono-sharpzip0.6-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/.debug/ \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/../.debug/ \
@@ -438,7 +438,7 @@ FILES_libmono-sharpzip0.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0
/usr/lib/mono/compat-1.0/ICSharpCode.SharpZipLib.dll*/*.mdb"
FILES_libmono-sharpzip0.6-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/ \
/usr/lib/mono/compat-1.0/ICSharpCode.SharpZipLib.dll"
-FILES_libmono-data-tds2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb \
+FILES_libmono-data-tds2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/../.debug/ \
@@ -446,7 +446,7 @@ FILES_libmono-data-tds2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb
/usr/lib/mono/2.0/Mono.Data.Tds.dll*/*.mdb"
FILES_libmono-data-tds2.0-cil = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/ \
/usr/lib/mono/2.0/Mono.Data.Tds.dll"
-FILES_libmono-system-messaging1.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/1.0.*/*.mdb \
+FILES_libmono-system-messaging1.0-cil-dbg += "/usr/lib/mono/gac/System.Messaging/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Messaging/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Messaging/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Messaging/1.0.*/../.debug/ \
@@ -454,7 +454,7 @@ FILES_libmono-system-messaging1.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/
/usr/lib/mono/1.0/System.Messaging.dll*/*.mdb"
FILES_libmono-system-messaging1.0-cil = "/usr/lib/mono/gac/System.Messaging/1.0.*/ \
/usr/lib/mono/1.0/System.Messaging.dll"
-FILES_libmono-npgsql1.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \
+FILES_libmono-npgsql1.0-cil-dbg += "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \
/usr/lib/mono/gac/Npgsql/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Npgsql/1.0.*/.debug/ \
/usr/lib/mono/gac/Npgsql/1.0.*/../.debug/ \
@@ -462,7 +462,7 @@ FILES_libmono-npgsql1.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \
/usr/lib/mono/1.0/Npgsql.dll*/*.mdb"
FILES_libmono-npgsql1.0-cil = "/usr/lib/mono/gac/Npgsql/1.0.*/ \
/usr/lib/mono/1.0/Npgsql.dll"
-FILES_libmono-security2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb \
+FILES_libmono-security2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Security/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Security/2.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Security/2.0.*/../.debug/ \
@@ -470,7 +470,7 @@ FILES_libmono-security2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb
/usr/lib/mono/2.0/Mono.Security.dll*/*.mdb"
FILES_libmono-security2.0-cil = "/usr/lib/mono/gac/Mono.Security/2.0.*/ \
/usr/lib/mono/2.0/Mono.Security.dll"
-FILES_libmono-security1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb \
+FILES_libmono-security1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Security/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Security/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Security/1.0.*/../.debug/ \
@@ -478,7 +478,7 @@ FILES_libmono-security1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb
/usr/lib/mono/1.0/Mono.Security.dll*/*.mdb"
FILES_libmono-security1.0-cil = "/usr/lib/mono/gac/Mono.Security/1.0.*/ \
/usr/lib/mono/1.0/Mono.Security.dll"
-FILES_libmono-bytefx0.7.6.1-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*.mdb \
+FILES_libmono-bytefx0.7.6.1-cil-dbg += "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*.mdb \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*/*.mdb \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/.debug/ \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/../.debug/ \
@@ -486,7 +486,7 @@ FILES_libmono-bytefx0.7.6.1-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*.
/usr/lib/mono/1.0/ByteFX.Data.dll*/*.mdb"
FILES_libmono-bytefx0.7.6.1-cil = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/ \
/usr/lib/mono/1.0/ByteFX.Data.dll"
-FILES_libmono-microsoft-build2.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*.mdb \
+FILES_libmono-microsoft-build2.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*.mdb \
/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/.debug/ \
/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/../.debug/ \
@@ -494,7 +494,7 @@ FILES_libmono-microsoft-build2.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.Build.*/
/usr/lib/mono/2.0/Microsoft.Build.*.dll*/*.mdb"
FILES_libmono-microsoft-build2.0-cil = "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/ \
/usr/lib/mono/2.0/Microsoft.Build.*.dll"
-FILES_libmono-system-ldap1.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/*.mdb \
+FILES_libmono-system-ldap1.0-cil-dbg += "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/*.mdb \
/usr/lib/mono/gac/System.DirectoryServices/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.DirectoryServices/1.0.*/.debug/ \
/usr/lib/mono/gac/System.DirectoryServices/1.0.*/../.debug/ \
@@ -502,7 +502,7 @@ FILES_libmono-system-ldap1.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServic
/usr/lib/mono/1.0/System.DirectoryServices.dll*/*.mdb"
FILES_libmono-system-ldap1.0-cil = "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/ \
/usr/lib/mono/1.0/System.DirectoryServices.dll"
-FILES_libmono-relaxng2.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*.mdb \
+FILES_libmono-relaxng2.0-cil-dbg += "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*.mdb \
/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/.debug/ \
/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/../.debug/ \
@@ -510,7 +510,7 @@ FILES_libmono-relaxng2.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/
/usr/lib/mono/2.0/Commons.Xml.Relaxng.dll*/*.mdb"
FILES_libmono-relaxng2.0-cil = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/ \
/usr/lib/mono/2.0/Commons.Xml.Relaxng.dll"
-FILES_libmono-system-ldap2.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/*.mdb \
+FILES_libmono-system-ldap2.0-cil-dbg += "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/*.mdb \
/usr/lib/mono/gac/System.DirectoryServices/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.DirectoryServices/2.0.*/.debug/ \
/usr/lib/mono/gac/System.DirectoryServices/2.0.*/../.debug/ \
@@ -518,7 +518,7 @@ FILES_libmono-system-ldap2.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServic
/usr/lib/mono/2.0/System.DirectoryServices.dll*/*.mdb"
FILES_libmono-system-ldap2.0-cil = "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/ \
/usr/lib/mono/2.0/System.DirectoryServices.dll"
-FILES_libmono-system-messaging2.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/2.0.*/*.mdb \
+FILES_libmono-system-messaging2.0-cil-dbg += "/usr/lib/mono/gac/System.Messaging/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Messaging/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Messaging/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Messaging/2.0.*/../.debug/ \
@@ -526,7 +526,7 @@ FILES_libmono-system-messaging2.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/
/usr/lib/mono/2.0/System.Messaging.dll*/*.mdb"
FILES_libmono-system-messaging2.0-cil = "/usr/lib/mono/gac/System.Messaging/2.0.*/ \
/usr/lib/mono/2.0/System.Messaging.dll"
-FILES_libmono-sharpzip0.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*.mdb \
+FILES_libmono-sharpzip0.84-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/.debug/ \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/../.debug/ \
@@ -534,7 +534,7 @@ FILES_libmono-sharpzip0.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/
/usr/lib/mono/1.0/ICSharpCode.SharpZipLib.dll*/*.mdb"
FILES_libmono-sharpzip0.84-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/ \
/usr/lib/mono/1.0/ICSharpCode.SharpZipLib.dll"
-FILES_libmono-sqlite2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*.mdb \
+FILES_libmono-sqlite2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/../.debug/ \
@@ -550,7 +550,7 @@ FILES_libmono-sqlite2.0-cil = "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/ \
/usr/lib/mono/gac/Mono.Data.SqliteClient/2.0.*/ \
/usr/lib/mono/2.0/Mono.Data.Sqlite.dll \
/usr/lib/mono/2.0/Mono.Data.SqliteClient.dll"
-FILES_libmono-ldap2.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*.mdb \
+FILES_libmono-ldap2.0-cil-dbg += "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*.mdb \
/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/.debug/ \
/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/../.debug/ \
@@ -558,7 +558,7 @@ FILES_libmono-ldap2.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*
/usr/lib/mono/2.0/Novell.Directory.Ldap.dll*/*.mdb"
FILES_libmono-ldap2.0-cil = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/ \
/usr/lib/mono/2.0/Novell.Directory.Ldap.dll"
-FILES_libmono-npgsql2.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \
+FILES_libmono-npgsql2.0-cil-dbg += "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \
/usr/lib/mono/gac/Npgsql/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Npgsql/2.0.*/.debug/ \
/usr/lib/mono/gac/Npgsql/2.0.*/../.debug/ \
@@ -566,7 +566,7 @@ FILES_libmono-npgsql2.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \
/usr/lib/mono/2.0/Npgsql.dll*/*.mdb"
FILES_libmono-npgsql2.0-cil = "/usr/lib/mono/gac/Npgsql/2.0.*/ \
/usr/lib/mono/2.0/Npgsql.dll"
-FILES_libmono-system-runtime1.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/1.0.*/*.mdb \
+FILES_libmono-system-runtime1.0-cil-dbg += "/usr/lib/mono/gac/System.Runtime.*/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Runtime.*/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Runtime.*/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Runtime.*/1.0.*/../.debug/ \
@@ -574,7 +574,7 @@ FILES_libmono-system-runtime1.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/1.
/usr/lib/mono/1.0/System.Runtime.*.dll*/*.mdb"
FILES_libmono-system-runtime1.0-cil = "/usr/lib/mono/gac/System.Runtime.*/1.0.*/ \
/usr/lib/mono/1.0/System.Runtime.*.dll"
-FILES_libmono-oracle2.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*.mdb \
+FILES_libmono-oracle2.0-cil-dbg += "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/../.debug/ \
@@ -582,7 +582,7 @@ FILES_libmono-oracle2.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/2.
/usr/lib/mono/2.0/System.Data.OracleClient.dll*/*.mdb"
FILES_libmono-oracle2.0-cil = "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/ \
/usr/lib/mono/2.0/System.Data.OracleClient.dll"
-FILES_libmono-c5-1.0-cil-dbg = "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \
+FILES_libmono-c5-1.0-cil-dbg += "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.C5/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.C5/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.C5/1.0.*/../.debug/ \
@@ -590,7 +590,7 @@ FILES_libmono-c5-1.0-cil-dbg = "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \
/usr/lib/mono/2.0/Mono.C5.dll*/*.mdb"
FILES_libmono-c5-1.0-cil = "/usr/lib/mono/gac/Mono.C5/1.0.*/ \
/usr/lib/mono/2.0/Mono.C5.dll"
-FILES_libmono-sharpzip2.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*.mdb \
+FILES_libmono-sharpzip2.6-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/.debug/ \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/../.debug/ \
@@ -598,7 +598,7 @@ FILES_libmono-sharpzip2.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2
/usr/lib/mono/compat-2.0/ICSharpCode.SharpZipLib.dll*/*.mdb"
FILES_libmono-sharpzip2.6-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/ \
/usr/lib/mono/compat-2.0/ICSharpCode.SharpZipLib.dll"
-FILES_libmono-cairo2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \
+FILES_libmono-cairo2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Cairo/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Cairo/2.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Cairo/2.0.*/../.debug/ \
@@ -606,7 +606,7 @@ FILES_libmono-cairo2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \
/usr/lib/mono/2.0/Mono.Cairo.dll*/*.mdb"
FILES_libmono-cairo2.0-cil = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/ \
/usr/lib/mono/2.0/Mono.Cairo.dll"
-FILES_libmono-peapi2.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \
+FILES_libmono-peapi2.0-cil-dbg += "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \
/usr/lib/mono/gac/PEAPI/2.0.*/*/*.mdb \
/usr/lib/mono/gac/PEAPI/2.0.*/.debug/ \
/usr/lib/mono/gac/PEAPI/2.0.*/../.debug/ \
@@ -614,7 +614,7 @@ FILES_libmono-peapi2.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \
/usr/lib/mono/2.0/PEAPI.dll*/*.mdb"
FILES_libmono-peapi2.0-cil = "/usr/lib/mono/gac/PEAPI/2.0.*/ \
/usr/lib/mono/2.0/PEAPI.dll"
-FILES_mono-mcs-dbg = "/usr/bin/*.mdb \
+FILES_mono-mcs-dbg += "/usr/bin/*.mdb \
/usr/bin/*/*.mdb \
/usr/bin/.debug/ \
/usr/bin/../.debug/ \
@@ -622,7 +622,7 @@ FILES_mono-mcs-dbg = "/usr/bin/*.mdb \
/usr/lib/mono/1.0/*.exe*/*.mdb"
FILES_mono-mcs = "/usr/bin/ \
/usr/lib/mono/1.0/*.exe*"
-FILES_libmono-system1.0-cil-dbg = "/usr/lib/mono/gac/System*/1.0.*/*.mdb \
+FILES_libmono-system1.0-cil-dbg += "/usr/lib/mono/gac/System*/1.0.*/*.mdb \
/usr/lib/mono/gac/System*/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System*/1.0.*/.debug/ \
/usr/lib/mono/gac/System*/1.0.*/../.debug/ \
@@ -638,7 +638,7 @@ FILES_libmono-system1.0-cil = "/usr/lib/mono/gac/System*/1.0.*/ \
/usr/lib/mono/gac/CustomMarshalers/1.0.*/ \
/usr/lib/mono/1.0/System*.dll \
/usr/lib/mono/1.0/CustomMarshalers.dll*"
-FILES_libmono-system2.0-cil-dbg = "/usr/lib/mono/gac/System*/2.0.*/*.mdb \
+FILES_libmono-system2.0-cil-dbg += "/usr/lib/mono/gac/System*/2.0.*/*.mdb \
/usr/lib/mono/gac/System*/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System*/2.0.*/.debug/ \
/usr/lib/mono/gac/System*/2.0.*/../.debug/ \
@@ -654,7 +654,7 @@ FILES_libmono-system2.0-cil = "/usr/lib/mono/gac/System*/2.0.*/ \
/usr/lib/mono/gac/CustomMarshalers/2.0.*/ \
/usr/lib/mono/2.0/System*.dll \
/usr/lib/mono/2.0/CustomMarshalers.dll*"
-FILES_libmono1.0-cil-dbg = "/usr/lib/mono/gac/Mono.*/1.0.*/*.mdb \
+FILES_libmono1.0-cil-dbg += "/usr/lib/mono/gac/Mono.*/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.*/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.*/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.*/1.0.*/../.debug/ \
@@ -673,7 +673,7 @@ FILES_libmono1.0-cil = "/usr/lib/mono/gac/Mono.*/1.0.*/ \
/usr/lib/mono/gac/mono-service/1.0.*/ \
/usr/lib/mono/1.0/Mono.*.dll \
/usr/lib/mono/1.0/OpenSystem.C.dll"
-FILES_libmono2.0-cil-dbg = "/usr/lib/mono/gac/Mono.*/2.0.*/*.mdb \
+FILES_libmono2.0-cil-dbg += "/usr/lib/mono/gac/Mono.*/2.0.*/*.mdb \
/usr/lib/mono/gac/Mono.*/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.*/2.0.*/.debug/ \
/usr/lib/mono/gac/Mono.*/2.0.*/../.debug/ \
@@ -817,22 +817,22 @@ PACKAGES = "mono-jit-dbg \
libmono2.0-cil"
# This is a generated file, please do not edit directly
# Use collect-files.py instead. -- Henryk <henryk@openmoko.org>
-FILES_mono-jit-dbg = "/usr/bin/mono*.mdb \
+FILES_mono-jit-dbg += "/usr/bin/mono*.mdb \
/usr/bin/mono*/*.mdb"
FILES_mono-jit = "/usr/bin/mono"
-FILES_mono-gac-dbg = "/usr/bin/gacutil*.mdb \
+FILES_mono-gac-dbg += "/usr/bin/gacutil*.mdb \
/usr/bin/gacutil*/*.mdb \
/usr/lib/mono/1.0/gacutil.exe*.mdb \
/usr/lib/mono/1.0/gacutil.exe*/*.mdb"
FILES_mono-gac = "/usr/bin/gacutil \
/usr/lib/mono/1.0/gacutil.exe"
-FILES_mono-mjs-dbg = "/usr/bin/mjs*.mdb \
+FILES_mono-mjs-dbg += "/usr/bin/mjs*.mdb \
/usr/bin/mjs*/*.mdb \
/usr/lib/mono/1.0/mjs.exe*.mdb \
/usr/lib/mono/1.0/mjs.exe*/*.mdb"
FILES_mono-mjs = "/usr/bin/mjs \
/usr/lib/mono/1.0/mjs.exe*"
-FILES_mono-gmcs-dbg = "/usr/bin/gmcs*.mdb \
+FILES_mono-gmcs-dbg += "/usr/bin/gmcs*.mdb \
/usr/bin/gmcs*/*.mdb \
/usr/bin/wsdl2*.mdb \
/usr/bin/wsdl2*/*.mdb \
@@ -894,7 +894,7 @@ FILES_mono-gmcs = "/usr/bin/gmcs \
/usr/lib/mono/2.0/Microsoft.Common.tasks \
/usr/lib/mono/2.0/Microsoft.Common.targets \
/usr/lib/mono/2.0/Microsoft.VisualBasic.targets"
-FILES_mono-utils-dbg = "/usr/bin/pedump*.mdb \
+FILES_mono-utils-dbg += "/usr/bin/pedump*.mdb \
/usr/bin/pedump*/*.mdb \
/usr/bin/monodis*.mdb \
/usr/bin/monodis*/*.mdb \
@@ -909,7 +909,7 @@ FILES_mono-utils = "/usr/bin/pedump \
/usr/bin/monograph \
/usr/bin/mono-find-provides \
/usr/bin/mono-find-requires"
-FILES_libmono-peapi1.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \
+FILES_libmono-peapi1.0-cil-dbg += "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \
/usr/lib/mono/gac/PEAPI/1.0.*/*/*.mdb \
/usr/lib/mono/gac/PEAPI/1.0.*/.debug/ \
/usr/lib/mono/gac/PEAPI/1.0.*/../.debug/ \
@@ -917,7 +917,7 @@ FILES_libmono-peapi1.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/1.0.*/*.mdb \
/usr/lib/mono/1.0/PEAPI.dll*/*.mdb"
FILES_libmono-peapi1.0-cil = "/usr/lib/mono/gac/PEAPI/1.0.*/ \
/usr/lib/mono/1.0/PEAPI.dll"
-FILES_libmono-cairo1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \
+FILES_libmono-cairo1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Cairo/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Cairo/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Cairo/1.0.*/../.debug/ \
@@ -928,7 +928,7 @@ FILES_libmono-cairo1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/*.mdb \
FILES_libmono-cairo1.0-cil = "/usr/lib/mono/gac/Mono.Cairo/1.0.*/ \
/usr/lib/mono/1.0/Mono.Cairo.dll \
/usr/lib/pkgconfig/mono-cairo.pc"
-FILES_libmono-system-web2.0-cil-dbg = "/usr/lib/mono/gac/System.Web/2.0.*/*.mdb \
+FILES_libmono-system-web2.0-cil-dbg += "/usr/lib/mono/gac/System.Web/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Web/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Web/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Web/2.0.*/../.debug/ \
@@ -944,7 +944,7 @@ FILES_libmono-system-web2.0-cil = "/usr/lib/mono/gac/System.Web/2.0.*/ \
/usr/lib/mono/gac/System.Web.Services/2.0.*/ \
/usr/lib/mono/2.0/System.Web.dll \
/usr/lib/mono/2.0/System.Web.Services.dll"
-FILES_libmono-accessibility2.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/2.0.*/*.mdb \
+FILES_libmono-accessibility2.0-cil-dbg += "/usr/lib/mono/gac/Accessibility/2.0.*/*.mdb \
/usr/lib/mono/gac/Accessibility/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Accessibility/2.0.*/.debug/ \
/usr/lib/mono/gac/Accessibility/2.0.*/../.debug/ \
@@ -952,7 +952,7 @@ FILES_libmono-accessibility2.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/2.0.*/
/usr/lib/mono/2.0/Accessibility.dll*/*.mdb"
FILES_libmono-accessibility2.0-cil = "/usr/lib/mono/gac/Accessibility/2.0.*/ \
/usr/lib/mono/2.0/Accessibility.dll"
-FILES_libmono-microsoft7.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/*.mdb \
+FILES_libmono-microsoft7.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/*.mdb \
/usr/lib/mono/gac/Microsoft.JScript/7.0.*/*/*.mdb \
/usr/lib/mono/gac/Microsoft.JScript/7.0.*/.debug/ \
/usr/lib/mono/gac/Microsoft.JScript/7.0.*/../.debug/ \
@@ -976,7 +976,7 @@ FILES_libmono-microsoft7.0-cil = "/usr/lib/mono/gac/Microsoft.JScript/7.0.*/ \
/usr/lib/mono/1.0/Microsoft.JScript.dll \
/usr/lib/mono/1.0/Microsoft.VisualC.dll \
/usr/lib/mono/1.0/Microsoft.Vsa.dll"
-FILES_libmono-winforms2.0-cil-dbg = "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/*.mdb \
+FILES_libmono-winforms2.0-cil-dbg += "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Windows.Forms/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Windows.Forms/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Windows.Forms/2.0.*/../.debug/ \
@@ -1000,7 +1000,7 @@ FILES_libmono-winforms2.0-cil = "/usr/lib/mono/gac/System.Windows.Forms/2.0.*/ \
/usr/lib/mono/2.0/System.Windows.Forms.dll \
/usr/lib/mono/2.0/System.Drawing.Design.dll \
/usr/lib/mono/2.0/System.Design.dll"
-FILES_libmono-ldap1.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*.mdb \
+FILES_libmono-ldap1.0-cil-dbg += "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*.mdb \
/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/.debug/ \
/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/../.debug/ \
@@ -1008,7 +1008,7 @@ FILES_libmono-ldap1.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/*
/usr/lib/mono/1.0/Novell.Directory.Ldap.dll*/*.mdb"
FILES_libmono-ldap1.0-cil = "/usr/lib/mono/gac/Novell.Directory.Ldap/1.0.*/ \
/usr/lib/mono/1.0/Novell.Directory.Ldap.dll"
-FILES_libmono-sharpzip2.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*.mdb \
+FILES_libmono-sharpzip2.84-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/.debug/ \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/../.debug/ \
@@ -1016,7 +1016,7 @@ FILES_libmono-sharpzip2.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/
/usr/lib/mono/2.0/ICSharpCode.SharpZipLib.dll*/*.mdb"
FILES_libmono-sharpzip2.84-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.84.*/ \
/usr/lib/mono/2.0/ICSharpCode.SharpZipLib.dll"
-FILES_libmono-system-data2.0-cil-dbg = "/usr/lib/mono/gac/System.Data/2.0.*/*.mdb \
+FILES_libmono-system-data2.0-cil-dbg += "/usr/lib/mono/gac/System.Data/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Data/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Data/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Data/2.0.*/../.debug/ \
@@ -1024,7 +1024,7 @@ FILES_libmono-system-data2.0-cil-dbg = "/usr/lib/mono/gac/System.Data/2.0.*/*.md
/usr/lib/mono/2.0/System.Data.dll*/*.mdb"
FILES_libmono-system-data2.0-cil = "/usr/lib/mono/gac/System.Data/2.0.*/ \
/usr/lib/mono/2.0/System.Data.dll"
-FILES_libmono-corlib2.0-cil-dbg = "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \
+FILES_libmono-corlib2.0-cil-dbg += "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \
/usr/lib/mono/gac/I18N*/2.0.*/*/*.mdb \
/usr/lib/mono/gac/I18N*/2.0.*/.debug/ \
/usr/lib/mono/gac/I18N*/2.0.*/../.debug/ \
@@ -1035,7 +1035,7 @@ FILES_libmono-corlib2.0-cil-dbg = "/usr/lib/mono/gac/I18N*/2.0.*/*.mdb \
FILES_libmono-corlib2.0-cil = "/usr/lib/mono/gac/I18N*/2.0.*/ \
/usr/lib/mono/2.0/I18N*.dll \
/usr/lib/mono/2.0/mscorlib.dll*"
-FILES_libmono-winforms1.0-cil-dbg = "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/*.mdb \
+FILES_libmono-winforms1.0-cil-dbg += "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Windows.Forms/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Windows.Forms/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Windows.Forms/1.0.*/../.debug/ \
@@ -1059,7 +1059,7 @@ FILES_libmono-winforms1.0-cil = "/usr/lib/mono/gac/System.Windows.Forms/1.0.*/ \
/usr/lib/mono/1.0/System.Windows.Forms.dll \
/usr/lib/mono/1.0/System.Drawing.Design.dll \
/usr/lib/mono/1.0/System.Design.dll"
-FILES_libmono-microsoft8.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/*.mdb \
+FILES_libmono-microsoft8.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/*.mdb \
/usr/lib/mono/gac/Microsoft.JScript/8.0.*/*/*.mdb \
/usr/lib/mono/gac/Microsoft.JScript/8.0.*/.debug/ \
/usr/lib/mono/gac/Microsoft.JScript/8.0.*/../.debug/ \
@@ -1083,7 +1083,7 @@ FILES_libmono-microsoft8.0-cil = "/usr/lib/mono/gac/Microsoft.JScript/8.0.*/ \
/usr/lib/mono/2.0/Microsoft.JScript.dll \
/usr/lib/mono/2.0/Microsoft.VisualC.dll \
/usr/lib/mono/2.0/Microsoft.Vsa.dll"
-FILES_libmono-corlib1.0-cil-dbg = "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \
+FILES_libmono-corlib1.0-cil-dbg += "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \
/usr/lib/mono/gac/I18N*/1.0.*/*/*.mdb \
/usr/lib/mono/gac/I18N*/1.0.*/.debug/ \
/usr/lib/mono/gac/I18N*/1.0.*/../.debug/ \
@@ -1094,7 +1094,7 @@ FILES_libmono-corlib1.0-cil-dbg = "/usr/lib/mono/gac/I18N*/1.0.*/*.mdb \
FILES_libmono-corlib1.0-cil = "/usr/lib/mono/gac/I18N*/1.0.*/ \
/usr/lib/mono/1.0/I18N*.dll \
/usr/lib/mono/1.0/mscorlib.dll*"
-FILES_libmono-system-web1.0-cil-dbg = "/usr/lib/mono/gac/System.Web/1.0.*/*.mdb \
+FILES_libmono-system-web1.0-cil-dbg += "/usr/lib/mono/gac/System.Web/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Web/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Web/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Web/1.0.*/../.debug/ \
@@ -1110,7 +1110,7 @@ FILES_libmono-system-web1.0-cil = "/usr/lib/mono/gac/System.Web/1.0.*/ \
/usr/lib/mono/gac/System.Web.Services/1.0.*/ \
/usr/lib/mono/1.0/System.Web.dll \
/usr/lib/mono/1.0/System.Web.Services.dll"
-FILES_libmono-system-runtime2.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/2.0.*/*.mdb \
+FILES_libmono-system-runtime2.0-cil-dbg += "/usr/lib/mono/gac/System.Runtime.*/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Runtime.*/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Runtime.*/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Runtime.*/2.0.*/../.debug/ \
@@ -1118,7 +1118,7 @@ FILES_libmono-system-runtime2.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/2.
/usr/lib/mono/2.0/System.Runtime.*.dll*/*.mdb"
FILES_libmono-system-runtime2.0-cil = "/usr/lib/mono/gac/System.Runtime.*/2.0.*/ \
/usr/lib/mono/2.0/System.Runtime.*.dll"
-FILES_libmono-cscompmgd8.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \
+FILES_libmono-cscompmgd8.0-cil-dbg += "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \
/usr/lib/mono/gac/cscompmgd/8.0.*/*/*.mdb \
/usr/lib/mono/gac/cscompmgd/8.0.*/.debug/ \
/usr/lib/mono/gac/cscompmgd/8.0.*/../.debug/ \
@@ -1126,7 +1126,7 @@ FILES_libmono-cscompmgd8.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/8.0.*/*.mdb \
/usr/lib/mono/2.0/cscompmgd.dll*/*.mdb"
FILES_libmono-cscompmgd8.0-cil = "/usr/lib/mono/gac/cscompmgd/8.0.*/ \
/usr/lib/mono/2.0/cscompmgd.dll"
-FILES_libmono-cscompmgd7.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \
+FILES_libmono-cscompmgd7.0-cil-dbg += "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \
/usr/lib/mono/gac/cscompmgd/7.0.*/*/*.mdb \
/usr/lib/mono/gac/cscompmgd/7.0.*/.debug/ \
/usr/lib/mono/gac/cscompmgd/7.0.*/../.debug/ \
@@ -1134,7 +1134,7 @@ FILES_libmono-cscompmgd7.0-cil-dbg = "/usr/lib/mono/gac/cscompmgd/7.0.*/*.mdb \
/usr/lib/mono/1.0/cscompmgd.dll*/*.mdb"
FILES_libmono-cscompmgd7.0-cil = "/usr/lib/mono/gac/cscompmgd/7.0.*/ \
/usr/lib/mono/1.0/cscompmgd.dll"
-FILES_libmono-firebirdsql1.7-cil-dbg = "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*.mdb \
+FILES_libmono-firebirdsql1.7-cil-dbg += "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*.mdb \
/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/*/*.mdb \
/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/.debug/ \
/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/../.debug/ \
@@ -1142,10 +1142,10 @@ FILES_libmono-firebirdsql1.7-cil-dbg = "/usr/lib/mono/gac/FirebirdSql.Data.Fireb
/usr/lib/mono/1.0/FirebirdSql.Data.Firebird.dll*/*.mdb"
FILES_libmono-firebirdsql1.7-cil = "/usr/lib/mono/gac/FirebirdSql.Data.Firebird/1.7.*/ \
/usr/lib/mono/1.0/FirebirdSql.Data.Firebird.dll"
-FILES_mono-jay-dbg = "/usr/bin/jay*.mdb \
+FILES_mono-jay-dbg += "/usr/bin/jay*.mdb \
/usr/bin/jay*/*.mdb"
FILES_mono-jay = "/usr/bin/jay"
-FILES_libmono-data-tds1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb \
+FILES_libmono-data-tds1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/../.debug/ \
@@ -1153,7 +1153,7 @@ FILES_libmono-data-tds1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/*.mdb
/usr/lib/mono/1.0/Mono.Data.Tds.dll*/*.mdb"
FILES_libmono-data-tds1.0-cil = "/usr/lib/mono/gac/Mono.Data.Tds/1.0.*/ \
/usr/lib/mono/1.0/Mono.Data.Tds.dll"
-FILES_libmono-sqlite1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*.mdb \
+FILES_libmono-sqlite1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/../.debug/ \
@@ -1169,7 +1169,7 @@ FILES_libmono-sqlite1.0-cil = "/usr/lib/mono/gac/Mono.Data.Sqlite/1.0.*/ \
/usr/lib/mono/gac/Mono.Data.SqliteClient/1.0.*/ \
/usr/lib/mono/1.0/Mono.Data.Sqlite.dll \
/usr/lib/mono/1.0/Mono.Data.SqliteClient.dll"
-FILES_libmono-relaxng1.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*.mdb \
+FILES_libmono-relaxng1.0-cil-dbg += "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*.mdb \
/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/.debug/ \
/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/../.debug/ \
@@ -1177,7 +1177,7 @@ FILES_libmono-relaxng1.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/
/usr/lib/mono/1.0/Commons.Xml.Relaxng.dll*/*.mdb"
FILES_libmono-relaxng1.0-cil = "/usr/lib/mono/gac/Commons.Xml.Relaxng/1.0.*/ \
/usr/lib/mono/1.0/Commons.Xml.Relaxng.dll"
-FILES_libmono-dev-dbg = "/usr/lib/libmono*.a*.mdb \
+FILES_libmono-dev-dbg += "/usr/lib/libmono*.a*.mdb \
/usr/lib/libmono*.a*/*.mdb \
/usr/lib/libMono*.a*.mdb \
/usr/lib/libMono*.a*/*.mdb \
@@ -1200,7 +1200,7 @@ FILES_libmono-dev = "/usr/lib/libmono*.a \
/usr/lib/pkgconfig/mono.pc \
/usr/lib/pkgconfig/dotnet.pc \
/usr/include/"
-FILES_libmono-accessibility1.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/1.0.*/*.mdb \
+FILES_libmono-accessibility1.0-cil-dbg += "/usr/lib/mono/gac/Accessibility/1.0.*/*.mdb \
/usr/lib/mono/gac/Accessibility/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Accessibility/1.0.*/.debug/ \
/usr/lib/mono/gac/Accessibility/1.0.*/../.debug/ \
@@ -1208,13 +1208,13 @@ FILES_libmono-accessibility1.0-cil-dbg = "/usr/lib/mono/gac/Accessibility/1.0.*/
/usr/lib/mono/1.0/Accessibility.dll*/*.mdb"
FILES_libmono-accessibility1.0-cil = "/usr/lib/mono/gac/Accessibility/1.0.*/ \
/usr/lib/mono/1.0/Accessibility.dll"
-FILES_mono-common-dbg = "/etc/mono*.mdb \
+FILES_mono-common-dbg += "/etc/mono*.mdb \
/etc/mono*/*.mdb \
/usr/share/mono-1.0/mono/cil/cil-opcodes.xml*.mdb \
/usr/share/mono-1.0/mono/cil/cil-opcodes.xml*/*.mdb"
FILES_mono-common = "/etc/mono \
/usr/share/mono-1.0/mono/cil/cil-opcodes.xml"
-FILES_libmono-oracle1.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*.mdb \
+FILES_libmono-oracle1.0-cil-dbg += "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/../.debug/ \
@@ -1222,7 +1222,7 @@ FILES_libmono-oracle1.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/1.
/usr/lib/mono/1.0/System.Data.OracleClient.dll*/*.mdb"
FILES_libmono-oracle1.0-cil = "/usr/lib/mono/gac/System.Data.OracleClient/1.0.*/ \
/usr/lib/mono/1.0/System.Data.OracleClient.dll"
-FILES_libmono-system-data1.0-cil-dbg = "/usr/lib/mono/gac/System.Data/1.0.*/*.mdb \
+FILES_libmono-system-data1.0-cil-dbg += "/usr/lib/mono/gac/System.Data/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Data/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Data/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Data/1.0.*/../.debug/ \
@@ -1230,7 +1230,7 @@ FILES_libmono-system-data1.0-cil-dbg = "/usr/lib/mono/gac/System.Data/1.0.*/*.md
/usr/lib/mono/1.0/System.Data.dll*/*.mdb"
FILES_libmono-system-data1.0-cil = "/usr/lib/mono/gac/System.Data/1.0.*/ \
/usr/lib/mono/1.0/System.Data.dll"
-FILES_libmono-bytefx0.7.6.2-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*.mdb \
+FILES_libmono-bytefx0.7.6.2-cil-dbg += "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*.mdb \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*/*.mdb \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/.debug/ \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/../.debug/ \
@@ -1238,7 +1238,7 @@ FILES_libmono-bytefx0.7.6.2-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/*.
/usr/lib/mono/2.0/ByteFX.Data.dll*/*.mdb"
FILES_libmono-bytefx0.7.6.2-cil = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.2*/ \
/usr/lib/mono/2.0/ByteFX.Data.dll"
-FILES_libmono0-dbg = "/usr/lib/libmono*.so.*.mdb \
+FILES_libmono0-dbg += "/usr/lib/libmono*.so.*.mdb \
/usr/lib/libmono*.so.*/*.mdb \
/usr/lib/libMonoPosixHelper.so*.mdb \
/usr/lib/libMonoPosixHelper.so*/*.mdb \
@@ -1247,7 +1247,7 @@ FILES_libmono0-dbg = "/usr/lib/libmono*.so.*.mdb \
FILES_libmono0 = "/usr/lib/libmono*.so.* \
/usr/lib/libMonoPosixHelper.so \
/usr/lib/libMonoSupportW.so"
-FILES_libmono-sharpzip0.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*.mdb \
+FILES_libmono-sharpzip0.6-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/.debug/ \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/../.debug/ \
@@ -1255,7 +1255,7 @@ FILES_libmono-sharpzip0.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0
/usr/lib/mono/compat-1.0/ICSharpCode.SharpZipLib.dll*/*.mdb"
FILES_libmono-sharpzip0.6-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.6.*/ \
/usr/lib/mono/compat-1.0/ICSharpCode.SharpZipLib.dll"
-FILES_libmono-data-tds2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb \
+FILES_libmono-data-tds2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/../.debug/ \
@@ -1263,7 +1263,7 @@ FILES_libmono-data-tds2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/*.mdb
/usr/lib/mono/2.0/Mono.Data.Tds.dll*/*.mdb"
FILES_libmono-data-tds2.0-cil = "/usr/lib/mono/gac/Mono.Data.Tds/2.0.*/ \
/usr/lib/mono/2.0/Mono.Data.Tds.dll"
-FILES_libmono-system-messaging1.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/1.0.*/*.mdb \
+FILES_libmono-system-messaging1.0-cil-dbg += "/usr/lib/mono/gac/System.Messaging/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Messaging/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Messaging/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Messaging/1.0.*/../.debug/ \
@@ -1271,7 +1271,7 @@ FILES_libmono-system-messaging1.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/
/usr/lib/mono/1.0/System.Messaging.dll*/*.mdb"
FILES_libmono-system-messaging1.0-cil = "/usr/lib/mono/gac/System.Messaging/1.0.*/ \
/usr/lib/mono/1.0/System.Messaging.dll"
-FILES_libmono-npgsql1.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \
+FILES_libmono-npgsql1.0-cil-dbg += "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \
/usr/lib/mono/gac/Npgsql/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Npgsql/1.0.*/.debug/ \
/usr/lib/mono/gac/Npgsql/1.0.*/../.debug/ \
@@ -1279,7 +1279,7 @@ FILES_libmono-npgsql1.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/1.0.*/*.mdb \
/usr/lib/mono/1.0/Npgsql.dll*/*.mdb"
FILES_libmono-npgsql1.0-cil = "/usr/lib/mono/gac/Npgsql/1.0.*/ \
/usr/lib/mono/1.0/Npgsql.dll"
-FILES_libmono-security2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb \
+FILES_libmono-security2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Security/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Security/2.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Security/2.0.*/../.debug/ \
@@ -1287,7 +1287,7 @@ FILES_libmono-security2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/2.0.*/*.mdb
/usr/lib/mono/2.0/Mono.Security.dll*/*.mdb"
FILES_libmono-security2.0-cil = "/usr/lib/mono/gac/Mono.Security/2.0.*/ \
/usr/lib/mono/2.0/Mono.Security.dll"
-FILES_libmono-security1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb \
+FILES_libmono-security1.0-cil-dbg += "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Security/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Security/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Security/1.0.*/../.debug/ \
@@ -1295,7 +1295,7 @@ FILES_libmono-security1.0-cil-dbg = "/usr/lib/mono/gac/Mono.Security/1.0.*/*.mdb
/usr/lib/mono/1.0/Mono.Security.dll*/*.mdb"
FILES_libmono-security1.0-cil = "/usr/lib/mono/gac/Mono.Security/1.0.*/ \
/usr/lib/mono/1.0/Mono.Security.dll"
-FILES_libmono-bytefx0.7.6.1-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*.mdb \
+FILES_libmono-bytefx0.7.6.1-cil-dbg += "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*.mdb \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*/*.mdb \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/.debug/ \
/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/../.debug/ \
@@ -1303,7 +1303,7 @@ FILES_libmono-bytefx0.7.6.1-cil-dbg = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/*.
/usr/lib/mono/1.0/ByteFX.Data.dll*/*.mdb"
FILES_libmono-bytefx0.7.6.1-cil = "/usr/lib/mono/gac/ByteFX.Data/0.7.6.1*/ \
/usr/lib/mono/1.0/ByteFX.Data.dll"
-FILES_libmono-microsoft-build2.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*.mdb \
+FILES_libmono-microsoft-build2.0-cil-dbg += "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*.mdb \
/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/.debug/ \
/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/../.debug/ \
@@ -1311,7 +1311,7 @@ FILES_libmono-microsoft-build2.0-cil-dbg = "/usr/lib/mono/gac/Microsoft.Build.*/
/usr/lib/mono/2.0/Microsoft.Build.*.dll*/*.mdb"
FILES_libmono-microsoft-build2.0-cil = "/usr/lib/mono/gac/Microsoft.Build.*/2.0.*/ \
/usr/lib/mono/2.0/Microsoft.Build.*.dll"
-FILES_libmono-system-ldap1.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/*.mdb \
+FILES_libmono-system-ldap1.0-cil-dbg += "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/*.mdb \
/usr/lib/mono/gac/System.DirectoryServices/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.DirectoryServices/1.0.*/.debug/ \
/usr/lib/mono/gac/System.DirectoryServices/1.0.*/../.debug/ \
@@ -1319,7 +1319,7 @@ FILES_libmono-system-ldap1.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServic
/usr/lib/mono/1.0/System.DirectoryServices.dll*/*.mdb"
FILES_libmono-system-ldap1.0-cil = "/usr/lib/mono/gac/System.DirectoryServices/1.0.*/ \
/usr/lib/mono/1.0/System.DirectoryServices.dll"
-FILES_libmono-relaxng2.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*.mdb \
+FILES_libmono-relaxng2.0-cil-dbg += "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*.mdb \
/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/.debug/ \
/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/../.debug/ \
@@ -1327,7 +1327,7 @@ FILES_libmono-relaxng2.0-cil-dbg = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/
/usr/lib/mono/2.0/Commons.Xml.Relaxng.dll*/*.mdb"
FILES_libmono-relaxng2.0-cil = "/usr/lib/mono/gac/Commons.Xml.Relaxng/2.0.*/ \
/usr/lib/mono/2.0/Commons.Xml.Relaxng.dll"
-FILES_libmono-system-ldap2.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/*.mdb \
+FILES_libmono-system-ldap2.0-cil-dbg += "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/*.mdb \
/usr/lib/mono/gac/System.DirectoryServices/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.DirectoryServices/2.0.*/.debug/ \
/usr/lib/mono/gac/System.DirectoryServices/2.0.*/../.debug/ \
@@ -1335,7 +1335,7 @@ FILES_libmono-system-ldap2.0-cil-dbg = "/usr/lib/mono/gac/System.DirectoryServic
/usr/lib/mono/2.0/System.DirectoryServices.dll*/*.mdb"
FILES_libmono-system-ldap2.0-cil = "/usr/lib/mono/gac/System.DirectoryServices/2.0.*/ \
/usr/lib/mono/2.0/System.DirectoryServices.dll"
-FILES_libmono-system-messaging2.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/2.0.*/*.mdb \
+FILES_libmono-system-messaging2.0-cil-dbg += "/usr/lib/mono/gac/System.Messaging/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Messaging/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Messaging/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Messaging/2.0.*/../.debug/ \
@@ -1343,7 +1343,7 @@ FILES_libmono-system-messaging2.0-cil-dbg = "/usr/lib/mono/gac/System.Messaging/
/usr/lib/mono/2.0/System.Messaging.dll*/*.mdb"
FILES_libmono-system-messaging2.0-cil = "/usr/lib/mono/gac/System.Messaging/2.0.*/ \
/usr/lib/mono/2.0/System.Messaging.dll"
-FILES_libmono-sharpzip0.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*.mdb \
+FILES_libmono-sharpzip0.84-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/.debug/ \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/../.debug/ \
@@ -1351,7 +1351,7 @@ FILES_libmono-sharpzip0.84-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/
/usr/lib/mono/1.0/ICSharpCode.SharpZipLib.dll*/*.mdb"
FILES_libmono-sharpzip0.84-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/0.84.*/ \
/usr/lib/mono/1.0/ICSharpCode.SharpZipLib.dll"
-FILES_libmono-sqlite2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*.mdb \
+FILES_libmono-sqlite2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/../.debug/ \
@@ -1367,7 +1367,7 @@ FILES_libmono-sqlite2.0-cil = "/usr/lib/mono/gac/Mono.Data.Sqlite/2.0.*/ \
/usr/lib/mono/gac/Mono.Data.SqliteClient/2.0.*/ \
/usr/lib/mono/2.0/Mono.Data.Sqlite.dll \
/usr/lib/mono/2.0/Mono.Data.SqliteClient.dll"
-FILES_libmono-ldap2.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*.mdb \
+FILES_libmono-ldap2.0-cil-dbg += "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*.mdb \
/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/.debug/ \
/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/../.debug/ \
@@ -1375,7 +1375,7 @@ FILES_libmono-ldap2.0-cil-dbg = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/*
/usr/lib/mono/2.0/Novell.Directory.Ldap.dll*/*.mdb"
FILES_libmono-ldap2.0-cil = "/usr/lib/mono/gac/Novell.Directory.Ldap/2.0.*/ \
/usr/lib/mono/2.0/Novell.Directory.Ldap.dll"
-FILES_libmono-npgsql2.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \
+FILES_libmono-npgsql2.0-cil-dbg += "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \
/usr/lib/mono/gac/Npgsql/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Npgsql/2.0.*/.debug/ \
/usr/lib/mono/gac/Npgsql/2.0.*/../.debug/ \
@@ -1383,7 +1383,7 @@ FILES_libmono-npgsql2.0-cil-dbg = "/usr/lib/mono/gac/Npgsql/2.0.*/*.mdb \
/usr/lib/mono/2.0/Npgsql.dll*/*.mdb"
FILES_libmono-npgsql2.0-cil = "/usr/lib/mono/gac/Npgsql/2.0.*/ \
/usr/lib/mono/2.0/Npgsql.dll"
-FILES_libmono-system-runtime1.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/1.0.*/*.mdb \
+FILES_libmono-system-runtime1.0-cil-dbg += "/usr/lib/mono/gac/System.Runtime.*/1.0.*/*.mdb \
/usr/lib/mono/gac/System.Runtime.*/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Runtime.*/1.0.*/.debug/ \
/usr/lib/mono/gac/System.Runtime.*/1.0.*/../.debug/ \
@@ -1391,7 +1391,7 @@ FILES_libmono-system-runtime1.0-cil-dbg = "/usr/lib/mono/gac/System.Runtime.*/1.
/usr/lib/mono/1.0/System.Runtime.*.dll*/*.mdb"
FILES_libmono-system-runtime1.0-cil = "/usr/lib/mono/gac/System.Runtime.*/1.0.*/ \
/usr/lib/mono/1.0/System.Runtime.*.dll"
-FILES_libmono-oracle2.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*.mdb \
+FILES_libmono-oracle2.0-cil-dbg += "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*.mdb \
/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/.debug/ \
/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/../.debug/ \
@@ -1399,7 +1399,7 @@ FILES_libmono-oracle2.0-cil-dbg = "/usr/lib/mono/gac/System.Data.OracleClient/2.
/usr/lib/mono/2.0/System.Data.OracleClient.dll*/*.mdb"
FILES_libmono-oracle2.0-cil = "/usr/lib/mono/gac/System.Data.OracleClient/2.0.*/ \
/usr/lib/mono/2.0/System.Data.OracleClient.dll"
-FILES_libmono-c5-1.0-cil-dbg = "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \
+FILES_libmono-c5-1.0-cil-dbg += "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.C5/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.C5/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.C5/1.0.*/../.debug/ \
@@ -1407,7 +1407,7 @@ FILES_libmono-c5-1.0-cil-dbg = "/usr/lib/mono/gac/Mono.C5/1.0.*/*.mdb \
/usr/lib/mono/2.0/Mono.C5.dll*/*.mdb"
FILES_libmono-c5-1.0-cil = "/usr/lib/mono/gac/Mono.C5/1.0.*/ \
/usr/lib/mono/2.0/Mono.C5.dll"
-FILES_libmono-sharpzip2.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*.mdb \
+FILES_libmono-sharpzip2.6-cil-dbg += "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/*/*.mdb \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/.debug/ \
/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/../.debug/ \
@@ -1415,7 +1415,7 @@ FILES_libmono-sharpzip2.6-cil-dbg = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2
/usr/lib/mono/compat-2.0/ICSharpCode.SharpZipLib.dll*/*.mdb"
FILES_libmono-sharpzip2.6-cil = "/usr/lib/mono/gac/ICSharpCode.SharpZipLib/2.6.*/ \
/usr/lib/mono/compat-2.0/ICSharpCode.SharpZipLib.dll"
-FILES_libmono-cairo2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \
+FILES_libmono-cairo2.0-cil-dbg += "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \
/usr/lib/mono/gac/Mono.Cairo/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.Cairo/2.0.*/.debug/ \
/usr/lib/mono/gac/Mono.Cairo/2.0.*/../.debug/ \
@@ -1423,7 +1423,7 @@ FILES_libmono-cairo2.0-cil-dbg = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/*.mdb \
/usr/lib/mono/2.0/Mono.Cairo.dll*/*.mdb"
FILES_libmono-cairo2.0-cil = "/usr/lib/mono/gac/Mono.Cairo/2.0.*/ \
/usr/lib/mono/2.0/Mono.Cairo.dll"
-FILES_libmono-peapi2.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \
+FILES_libmono-peapi2.0-cil-dbg += "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \
/usr/lib/mono/gac/PEAPI/2.0.*/*/*.mdb \
/usr/lib/mono/gac/PEAPI/2.0.*/.debug/ \
/usr/lib/mono/gac/PEAPI/2.0.*/../.debug/ \
@@ -1431,7 +1431,7 @@ FILES_libmono-peapi2.0-cil-dbg = "/usr/lib/mono/gac/PEAPI/2.0.*/*.mdb \
/usr/lib/mono/2.0/PEAPI.dll*/*.mdb"
FILES_libmono-peapi2.0-cil = "/usr/lib/mono/gac/PEAPI/2.0.*/ \
/usr/lib/mono/2.0/PEAPI.dll"
-FILES_mono-mcs-dbg = "/usr/bin/*.mdb \
+FILES_mono-mcs-dbg += "/usr/bin/*.mdb \
/usr/bin/*/*.mdb \
/usr/bin/.debug/ \
/usr/bin/../.debug/ \
@@ -1439,7 +1439,7 @@ FILES_mono-mcs-dbg = "/usr/bin/*.mdb \
/usr/lib/mono/1.0/*.exe*/*.mdb"
FILES_mono-mcs = "/usr/bin/ \
/usr/lib/mono/1.0/*.exe*"
-FILES_libmono-system1.0-cil-dbg = "/usr/lib/mono/gac/System*/1.0.*/*.mdb \
+FILES_libmono-system1.0-cil-dbg += "/usr/lib/mono/gac/System*/1.0.*/*.mdb \
/usr/lib/mono/gac/System*/1.0.*/*/*.mdb \
/usr/lib/mono/gac/System*/1.0.*/.debug/ \
/usr/lib/mono/gac/System*/1.0.*/../.debug/ \
@@ -1455,7 +1455,7 @@ FILES_libmono-system1.0-cil = "/usr/lib/mono/gac/System*/1.0.*/ \
/usr/lib/mono/gac/CustomMarshalers/1.0.*/ \
/usr/lib/mono/1.0/System*.dll \
/usr/lib/mono/1.0/CustomMarshalers.dll*"
-FILES_libmono-system2.0-cil-dbg = "/usr/lib/mono/gac/System*/2.0.*/*.mdb \
+FILES_libmono-system2.0-cil-dbg += "/usr/lib/mono/gac/System*/2.0.*/*.mdb \
/usr/lib/mono/gac/System*/2.0.*/*/*.mdb \
/usr/lib/mono/gac/System*/2.0.*/.debug/ \
/usr/lib/mono/gac/System*/2.0.*/../.debug/ \
@@ -1471,7 +1471,7 @@ FILES_libmono-system2.0-cil = "/usr/lib/mono/gac/System*/2.0.*/ \
/usr/lib/mono/gac/CustomMarshalers/2.0.*/ \
/usr/lib/mono/2.0/System*.dll \
/usr/lib/mono/2.0/CustomMarshalers.dll*"
-FILES_libmono1.0-cil-dbg = "/usr/lib/mono/gac/Mono.*/1.0.*/*.mdb \
+FILES_libmono1.0-cil-dbg += "/usr/lib/mono/gac/Mono.*/1.0.*/*.mdb \
/usr/lib/mono/gac/Mono.*/1.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.*/1.0.*/.debug/ \
/usr/lib/mono/gac/Mono.*/1.0.*/../.debug/ \
@@ -1490,7 +1490,7 @@ FILES_libmono1.0-cil = "/usr/lib/mono/gac/Mono.*/1.0.*/ \
/usr/lib/mono/gac/mono-service/1.0.*/ \
/usr/lib/mono/1.0/Mono.*.dll \
/usr/lib/mono/1.0/OpenSystem.C.dll"
-FILES_libmono2.0-cil-dbg = "/usr/lib/mono/gac/Mono.*/2.0.*/*.mdb \
+FILES_libmono2.0-cil-dbg += "/usr/lib/mono/gac/Mono.*/2.0.*/*.mdb \
/usr/lib/mono/gac/Mono.*/2.0.*/*/*.mdb \
/usr/lib/mono/gac/Mono.*/2.0.*/.debug/ \
/usr/lib/mono/gac/Mono.*/2.0.*/../.debug/ \
diff --git a/packages/mono/mono_1.2.6.bb b/packages/mono/mono_1.2.6.bb
new file mode 100644
index 0000000000..5c5d8476bb
--- /dev/null
+++ b/packages/mono/mono_1.2.6.bb
@@ -0,0 +1,78 @@
+require mono_1.2.6.inc
+
+DEPENDS = "mono-native mono-mcs-intermediate glib-2.0 perl-native"
+
+PR = "r1"
+
+SRC_URI += "file://configure.patch;patch=1"
+
+# Per http://www.mono-project.com/Mono:ARM
+EXTRA_OECONF += " --disable-mcs-build "
+# Instead, get the mcs tree from a different build (see mono-mcs-intermediate)
+
+do_install_prepend() {
+ install -d ${D}
+ pushd ${D}
+ tar -xzf ${STAGING_DIR}/share/mono-mcs/mono-mcs-${PV}.tar.gz
+ popd
+}
+
+do_install_append() {
+ # mono-mcs-intermediate builds and installs jay (a Yacc for Java and C#),
+ # however, jay is not being cross-compiled and thus only
+ # available for the buildhost architecture, so remove it
+ # entirely
+ pushd ${D}
+ rm -rf ./usr/share/man/man1/jay.1 ./usr/share/jay \
+ ./usr/share/jay/README.jay \
+ ./usr/bin/jay
+ popd
+
+ # Not packaged with the default rules and apparently
+ # not used for anything
+ rm -rf ${D}${datadir}/mono-1.0/mono/cil/cil-opcodes.xml
+}
+
+inherit mono
+
+# Import file definitions from Debian
+require mono_1.2.5.1-files.inc
+
+# Add some packages
+PACKAGES_append = " mono-doc mono mono-runtime"
+
+FILES_mono-doc_append = " /usr/share/libgc-mono/ "
+
+FILES_mono = ""
+ALLOW_EMPTY_mono = "1"
+RDEPENDS_mono = "mono-common mono-jit"
+
+FILES_mono-runtime = ""
+ALLOW_EMPTY_mono-runtime = "1"
+RDEPENDS_mono-runtime = "mono-jit mono-gac"
+
+RDEPENDS_mono-jit = "mono-common"
+
+FILES_libmono-dev =+ " /usr/lib/libmono.la /usr/lib/libmono-profiler-cov.la /usr/lib/libmono-profiler-aot.la \
+ /usr/lib/libMonoPosixHelper.la /usr/lib/libMonoSupportW.la"
+FILES_libmono-dbg =+ " /usr/lib/.debug/libmono*.so.* /usr/lib/.debug/libikvm-native.so \
+ /usr/lib/.debug/libMonoPosixHelper.so /usr/lib/.debug/libMonoSupportW.so"
+
+# Packages not included in Debian
+PACKAGES_prepend = "libnunit2.2-cil-dbg libnunit2.2-cil-dev libnunit2.2-cil \
+ libmono-cecil0.5-cil-dbg libmono-cecil0.5-cil-dev libmono-cecil0.5-cil \
+ libmono-db2-1.0-cil-dbg libmono-db2-1.0-cil-dev libmono-db2-1.0-cil"
+
+FILES_libnunit2.2-cil = "/usr/lib/mono/gac/nunit.*/2.2.* /usr/lib/mono/1.0/nunit.*.dll"
+FILES_libnunit2.2-cil-dev = "/usr/lib/pkgconfig/mono-nunit.pc"
+FILES_libnunit2.2-cil-dbg = "/usr/lib/mono/gac/nunit*/2.2.*/nunit.*.dll.mdb"
+
+FILES_libmono-cecil0.5-cil = "/usr/lib/mono/gac/Mono.Cecil/0.5.*"
+FILES_libmono-cecil0.5-cil-dbg = "/usr/lib/mono/gac/Mono.Cecil/0.5.0.1__0738eb9f132ed756/Mono.Cecil.dll.mdb"
+
+FILES_libmono-db2-1.0-cil = "/usr/lib/mono/gac/IBM.Data.DB2/1.0* /usr/lib/mono/1.0/IBM.Data.DB2.dll"
+FILES_libmono-db2-1.0-cil-dbg = "/usr/lib/mono/gac/IBM.Data.DB2/1.0*/IBM.Data.DB2.dll.mdb"
+
+# Move .pc files
+FILES_libmono-cairo1.0-cil-dev = "/usr/lib/pkgconfig/mono-cairo.pc"
+PACKAGES =+ " libmono-cairo1.0-cil-dev "
diff --git a/packages/mono/mono_1.2.6.inc b/packages/mono/mono_1.2.6.inc
new file mode 100644
index 0000000000..c9644cbce5
--- /dev/null
+++ b/packages/mono/mono_1.2.6.inc
@@ -0,0 +1,13 @@
+DESCRIPTION = "Mono Programming Language"
+SECTION = "devel/mono"
+LICENSE = "GPL LGPL X11"
+
+SRC_URI = "http://go-mono.com/sources/mono/mono-1.2.6.tar.bz2 \
+ file://mono-libgc-configure.patch;patch=1"
+
+S = "${WORKDIR}/mono-1.2.6"
+
+inherit autotools
+EXTRA_OECONF_arm = "--without-tls"
+EXTRA_OECONF_mipsel = "--without-tls"
+
diff --git a/packages/monotone/monotone-6_0.26.bb b/packages/monotone/monotone-6_0.26.bb
index 2cb59c608f..afbe65fada 100644
--- a/packages/monotone/monotone-6_0.26.bb
+++ b/packages/monotone/monotone-6_0.26.bb
@@ -37,7 +37,7 @@ do_install_append() {
cp -pPR tests ${D}${tsd}/tests
}
-PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite"
tsd = "/home/monotone/${PN}"
FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests"
RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules"
diff --git a/packages/monotone/monotone-6_0.27.bb b/packages/monotone/monotone-6_0.27.bb
index 2cb59c608f..afbe65fada 100644
--- a/packages/monotone/monotone-6_0.27.bb
+++ b/packages/monotone/monotone-6_0.27.bb
@@ -37,7 +37,7 @@ do_install_append() {
cp -pPR tests ${D}${tsd}/tests
}
-PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite"
tsd = "/home/monotone/${PN}"
FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests"
RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules"
diff --git a/packages/monotone/monotone-6_0.31.bb b/packages/monotone/monotone-6_0.31.bb
index 103c10d2e4..5be156f2be 100644
--- a/packages/monotone/monotone-6_0.31.bb
+++ b/packages/monotone/monotone-6_0.31.bb
@@ -41,7 +41,7 @@ do_install_append() {
cp -pPR tests ${D}${tsd}/tests
}
-PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite"
tsd = "/home/monotone/${PN}"
FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests"
RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules"
diff --git a/packages/monotone/monotone-6_0.33.bb b/packages/monotone/monotone-6_0.33.bb
index 64b1d1699e..e58477ddd1 100644
--- a/packages/monotone/monotone-6_0.33.bb
+++ b/packages/monotone/monotone-6_0.33.bb
@@ -45,7 +45,7 @@ do_install_append() {
rm ${D}/home/monotone/monotone-6/tests/diff_a_binary_file/binary
}
-PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite"
tsd = "/home/monotone/${PN}"
FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests"
RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules"
diff --git a/packages/monotone/monotone-6_0.34.bb b/packages/monotone/monotone-6_0.34.bb
index 0442e0232e..6a5dcb5d9c 100644
--- a/packages/monotone/monotone-6_0.34.bb
+++ b/packages/monotone/monotone-6_0.34.bb
@@ -45,7 +45,7 @@ do_install_append() {
rm ${D}/home/monotone/monotone-6/tests/diff_a_binary_file/binary
}
-PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite"
tsd = "/home/monotone/${PN}"
FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests"
RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules"
diff --git a/packages/monotone/monotone-6_0.37.bb b/packages/monotone/monotone-6_0.37.bb
index 571f5b17f5..7d65982e3d 100644
--- a/packages/monotone/monotone-6_0.37.bb
+++ b/packages/monotone/monotone-6_0.37.bb
@@ -45,7 +45,7 @@ do_install_append() {
rm ${D}/home/monotone/monotone-6/tests/diff_a_binary_file/binary
}
-PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite"
tsd = "/home/monotone/${PN}"
FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests"
RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules"
diff --git a/packages/monotone/monotone.inc b/packages/monotone/monotone.inc
index 0bade3a11c..319309f070 100644
--- a/packages/monotone/monotone.inc
+++ b/packages/monotone/monotone.inc
@@ -36,7 +36,7 @@ do_install_append() {
mv ${D}${bindir}/monotone ${D}${bindir}/${PN}
}
-PACKAGES = "${PN} ${PN}-doc ${PN}-testsuite"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-testsuite"
tsd = "/home/monotone/${PN}"
FILES_${PN}-testsuite = "${tsd}/testsuite ${tsd}/tests"
RDEPENDS_${PN}-testsuite += "bash sed grep cvs patch perl perl-modules"
diff --git a/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch b/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch
new file mode 100644
index 0000000000..800f43e8eb
--- /dev/null
+++ b/packages/mplayer/files/mplayer-1.0rc1-atmel.2.patch
@@ -0,0 +1,6444 @@
+ cfg-common.h | 4 +
+ cfg-mencoder.h | 4 +
+ cfg-mplayer.h | 4 +
+ configure | 13 +-
+ libaf/af_format.c | 7 +
+ libavcodec/Makefile | 7 +
+ libavcodec/avr32/dsputil_avr32.c | 2678 ++++++++++++++++++++++++++++++++++++++
+ libavcodec/avr32/fdct.S | 541 ++++++++
+ libavcodec/avr32/h264idct.S | 451 +++++++
+ libavcodec/avr32/idct.S | 829 ++++++++++++
+ libavcodec/avr32/mc.S | 434 ++++++
+ libavcodec/avr32/pico.h | 260 ++++
+ libavcodec/bitstream.h | 77 +-
+ libavcodec/dsputil.c | 3 +
+ libavcodec/h264.c | 15 +
+ libavutil/common.h | 16 +
+ libavutil/internal.h | 9 +
+ libfaad2/common.h | 2 +-
+ libmpcodecs/ad_libmad.c | 5 +
+ libswscale/pico-avr32.h | 137 ++
+ libswscale/swscale_internal.h | 2 +-
+ libswscale/yuv2rgb.c | 14 +
+ libswscale/yuv2rgb_avr32.c | 416 ++++++
+ libvo/vo_fbdev2.c | 101 ++-
+ version.sh | 2 +-
+ 25 files changed, 6011 insertions(+), 20 deletions(-)
+ create mode 100644 libavcodec/avr32/dsputil_avr32.c
+ create mode 100644 libavcodec/avr32/fdct.S
+ create mode 100644 libavcodec/avr32/h264idct.S
+ create mode 100644 libavcodec/avr32/idct.S
+ create mode 100644 libavcodec/avr32/mc.S
+ create mode 100644 libavcodec/avr32/pico.h
+ create mode 100644 libswscale/pico-avr32.h
+ create mode 100644 libswscale/yuv2rgb_avr32.c
+
+diff --git a/cfg-common.h b/cfg-common.h
+index 780df38..7d878a8 100644
+--- a/cfg-common.h
++++ b/cfg-common.h
+@@ -235,6 +235,10 @@
+ {"tsprobe", &ts_probe, CONF_TYPE_POSITION, 0, 0, TS_MAX_PROBE_SIZE, NULL},
+ {"tskeepbroken", &ts_keep_broken, CONF_TYPE_FLAG, 0, 0, 1, NULL},
+
++#ifdef ARCH_AVR32
++ {"use-pico", &avr32_use_pico, CONF_TYPE_FLAG, 0, 0, 1, NULL},
++ {"nouse-pico", &avr32_use_pico, CONF_TYPE_FLAG, 0, 1, 0, NULL},
++#endif
+ // draw by slices or whole frame (useful with libmpeg2/libavcodec)
+ {"slices", &vd_use_slices, CONF_TYPE_FLAG, 0, 0, 1, NULL},
+ {"noslices", &vd_use_slices, CONF_TYPE_FLAG, 0, 1, 0, NULL},
+diff --git a/cfg-mencoder.h b/cfg-mencoder.h
+index 411b748..addf791 100644
+--- a/cfg-mencoder.h
++++ b/cfg-mencoder.h
+@@ -5,6 +5,10 @@
+
+ #include "cfg-common.h"
+
++#ifdef ARCH_AVR32
++extern int avr32_use_pico;
++#endif
++
+ #ifdef USE_FAKE_MONO
+ extern int fakemono; // defined in dec_audio.c
+ #endif
+diff --git a/cfg-mplayer.h b/cfg-mplayer.h
+index 62b6eac..31499c2 100644
+--- a/cfg-mplayer.h
++++ b/cfg-mplayer.h
+@@ -4,6 +4,10 @@
+
+ #include "cfg-common.h"
+
++#ifdef ARCH_AVR32
++extern int avr32_use_pico;
++#endif
++
+ extern int noconsolecontrols;
+
+ #if defined(HAVE_FBDEV)||defined(HAVE_VESA)
+diff --git a/configure b/configure
+index 29002c8..56c6fe4 100755
+--- a/configure
++++ b/configure
+@@ -1203,6 +1203,15 @@ EOF
+ _optimizing="$proc"
+ ;;
+
++ avr32)
++ _def_arch='#define ARCH_AVR32'
++ _target_arch='TARGET_ARCH_AVR32 = yes'
++ iproc='avr32'
++ proc=''
++ _march=''
++ _mcpu=''
++ _optimizing=''
++ ;;
+ arm|armv4l|armv5tel)
+ _def_arch='#define ARCH_ARMV4L 1'
+ _target_arch='TARGET_ARCH_ARMV4L = yes'
+@@ -1533,7 +1542,7 @@ echores $_named_asm_args
+ # Checking for CFLAGS
+ _stripbinaries=yes
+ if test "$_profile" != "" || test "$_debug" != "" ; then
+- CFLAGS="-W -Wall -O2 $_march $_mcpu $_debug $_profile"
++ CFLAGS="-W -Wall -O4 $_march $_mcpu $_debug $_profile"
+ if test "$_cc_major" -ge "3" ; then
+ CFLAGS=`echo "$CFLAGS" | sed -e 's/\(-Wall\)/\1 -Wno-unused-parameter/'`
+ fi
+@@ -3794,7 +3803,7 @@ fi
+
+
+ echocheck "X11 headers presence"
+- for I in `echo $_inc_extra | sed s/-I//g` /usr/X11/include /usr/X11R6/include /usr/include/X11R6 /usr/include /usr/openwin/include ; do
++ for I in `echo $_inc_extra | sed s/-I//g`; do
+ if test -f "$I/X11/Xlib.h" ; then
+ _inc_x11="-I$I"
+ _x11_headers="yes"
+diff --git a/libaf/af_format.c b/libaf/af_format.c
+index e5b7cc9..5d7ea6d 100644
+--- a/libaf/af_format.c
++++ b/libaf/af_format.c
+@@ -20,7 +20,14 @@
+ // Integer to float conversion through lrintf()
+ #ifdef HAVE_LRINTF
+ #include <math.h>
++
++#ifdef ARCH_AVR32
++#define lrintf(x) rint(x)
++#define llrint(x) (long long)rint(x)
++#else
+ long int lrintf(float);
++#endif
++
+ #else
+ #define lrintf(x) ((int)(x))
+ #endif
+diff --git a/libavcodec/Makefile b/libavcodec/Makefile
+index 17b6c45..8e1dc96 100644
+--- a/libavcodec/Makefile
++++ b/libavcodec/Makefile
+@@ -360,6 +360,12 @@ OBJS-$(TARGET_ARCH_SPARC) += sparc/dsputil_vis.o \
+
+ sparc/dsputil_vis.o: CFLAGS += -mcpu=ultrasparc -mtune=ultrasparc
+
++# avr32 specific stuff
++ifeq ($(TARGET_ARCH_AVR32),yes)
++ASM_OBJS += avr32/idct.o avr32/fdct.o avr32/mc.o avr32/h264idct.o
++OBJS += avr32/dsputil_avr32.o
++endif
++
+ # sun mediaLib specific stuff
+ OBJS-$(HAVE_MLIB) += mlib/dsputil_mlib.o \
+
+@@ -419,6 +425,7 @@ tests: apiexample $(TESTS)
+ clean::
+ rm -f \
+ i386/*.o i386/*~ \
++ avr32/*.o avr32/*~ \
+ armv4l/*.o armv4l/*~ \
+ mlib/*.o mlib/*~ \
+ alpha/*.o alpha/*~ \
+diff --git a/libavcodec/avr32/dsputil_avr32.c b/libavcodec/avr32/dsputil_avr32.c
+new file mode 100644
+index 0000000..200284d
+--- /dev/null
++++ b/libavcodec/avr32/dsputil_avr32.c
+@@ -0,0 +1,2678 @@
++/*
++ * Copyright (c) 2007 Atmel Corporation. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ *
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *
++ * 2. Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following
++ * disclaimer in the documentation and/or other materials provided
++ * with the distribution.
++ *
++ * 3. The name of ATMEL may not be used to endorse or promote products
++ * derived from this software without specific prior written
++ * permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
++ * DAMAGE.
++ */
++
++#include "../dsputil.h"
++#include "pico.h"
++
++int avr32_use_pico = 1;
++
++//#define CHECK_DSP_FUNCS_AGAINST_C
++
++#ifdef CHECK_DSP_FUNCS_AGAINST_C
++#define DSP_FUNC_NAME(name) test_ ## name
++#else
++#define DSP_FUNC_NAME(name) name
++#endif
++
++union doubleword {
++ int64_t doubleword;
++ struct {
++ int32_t top;
++ int32_t bottom;
++ } words;
++};
++
++#undef LD16
++#undef LD32
++#undef LD64
++
++#define LD16(a) (*((uint16_t*)(a)))
++#define LD32(a) (*((uint32_t*)(a)))
++#define LD64(a) (*((uint64_t*)(a)))
++#define LD64_UNALIGNED(a) \
++ ({ union doubleword __tmp__; \
++ __tmp__.words.top = LD32(a); \
++ __tmp__.words.bottom = LD32(a + 4); \
++ __tmp__.doubleword; })
++
++#undef ST32
++#undef ST16
++
++#define ST16(a, b) *((uint16_t*)(a)) = (b)
++#define ST32(a, b) *((uint32_t*)(a)) = (b)
++
++#undef rnd_avg32
++#define rnd_avg32(a, b) \
++ ({ uint32_t __tmp__;\
++ asm("pavg.ub\t%0, %1, %2" : "=r"(__tmp__) : "r"(a), "r"(b));\
++ __tmp__;})
++
++void idct_avr32(DCTELEM *data);
++void fdct_avr32(DCTELEM *data);
++
++void idct_put_avr32(uint8_t *dest, int line_size, DCTELEM *data);
++void idct_add_avr32(uint8_t *dest, int line_size, DCTELEM *data);
++
++void h264_idct_add_avr32(uint8_t *dest, DCTELEM *data, int stride);
++void h264_idct8_add_avr32(uint8_t *dest, DCTELEM *data, int stride);
++
++#define extern_dspfunc(PFX, NUM) \
++ void PFX ## _pixels ## NUM ## _avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \
++ void PFX ## _pixels ## NUM ## _h_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \
++ void PFX ## _pixels ## NUM ## _v_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \
++ void PFX ## _pixels ## NUM ## _hv_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h )
++
++extern_dspfunc(put, 8);
++extern_dspfunc(put_no_rnd, 8);
++extern_dspfunc(avg, 8);
++extern_dspfunc(avg_no_rnd, 8);
++#undef extern_dspfunc
++
++#ifdef CHECK_DSP_FUNCS_AGAINST_C
++#define extern_dspfunc(PFX, NUM) \
++ void PFX ## _pixels ## NUM ## _c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \
++ void PFX ## _pixels ## NUM ## _x2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \
++ void PFX ## _pixels ## NUM ## _y2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h ); \
++ void PFX ## _pixels ## NUM ## _xy2_c(uint8_t *dst, const uint8_t *pixels, int line_size, int h )
++
++extern_dspfunc(put, 4);
++extern_dspfunc(put_no_rnd, 4);
++extern_dspfunc(put, 8);
++extern_dspfunc(put_no_rnd, 8);
++extern_dspfunc(put, 16);
++extern_dspfunc(put_no_rnd, 16);
++extern_dspfunc(avg, 8);
++extern_dspfunc(avg_no_rnd, 8);
++extern_dspfunc(avg, 16);
++extern_dspfunc(avg_no_rnd, 16);
++
++
++#undef extern_dspfunc
++#define extern_dspfunc(PFX, NUM) \
++void PFX ## NUM ## _mc00_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc10_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc20_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc30_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc01_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc11_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc21_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc31_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc02_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc12_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc22_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc32_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc03_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc13_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc23_c(uint8_t *dst, uint8_t *src, int stride); \
++void PFX ## NUM ## _mc33_c(uint8_t *dst, uint8_t *src, int stride); \
++
++extern_dspfunc(put_h264_qpel, 16);
++extern_dspfunc(put_h264_qpel, 8);
++extern_dspfunc(put_h264_qpel, 4);
++extern_dspfunc(avg_h264_qpel, 16);
++extern_dspfunc(avg_h264_qpel, 8);
++extern_dspfunc(avg_h264_qpel, 4);
++
++#undef extern_dspfunc
++
++void put_h264_chroma_mc2_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y);
++void put_h264_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y);
++void put_h264_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y);
++
++void avg_h264_chroma_mc2_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y);
++void avg_h264_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y);
++void avg_h264_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y);
++
++
++void dump_block8(uint8_t *block, int line_size, int h);
++void dump_block4(uint8_t *block, int line_size, int h);
++void dump_block(uint8_t *block, int line_size, int h, int w);
++
++void check_block8(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct,
++ int h, char *name, int max_dev);
++void check_block4(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct,
++ int h, char *name, int max_dev);
++void check_block(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct,
++ int h, int width, char *name, int max_dev);
++
++#define PIXOP2( OPNAME, OP ) \
++void OPNAME ## _pixels4_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
++ int i;\
++ for(i=0; i<h; i++){\
++ OP(*((uint32_t*)(block )), LD32(pixels ));\
++ pixels+=line_size;\
++ block +=line_size;\
++ }\
++}\
++void OPNAME ## _pixels8_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
++ int src_stride1, int src_stride2, int h){\
++ int i;\
++ for(i=0; i<h; i++){\
++ uint32_t a,b;\
++ a= LD32(&src1[i*src_stride1 ]);\
++ b= LD32(&src2[i*src_stride2 ]);\
++ OP(*((uint32_t*)&dst[i*dst_stride ]), rnd_avg32(a, b));\
++ a= LD32(&src1[i*src_stride1+4]);\
++ b= LD32(&src2[i*src_stride2+4]);\
++ OP(*((uint32_t*)&dst[i*dst_stride+4]), rnd_avg32(a, b));\
++ }\
++}\
++\
++void OPNAME ## _pixels4_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
++ int src_stride1, int src_stride2, int h){\
++ int i;\
++ for(i=0; i<h; i++){\
++ uint32_t a,b;\
++ a= LD32(&src1[i*src_stride1 ]);\
++ b= LD32(&src2[i*src_stride2 ]);\
++ OP(*((uint32_t*)&dst[i*dst_stride ]), rnd_avg32(a, b));\
++ }\
++}\
++\
++void OPNAME ## _pixels16_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
++ int src_stride1, int src_stride2, int h){\
++ OPNAME ## _pixels8_l2(dst , src1 , src2 , dst_stride, src_stride1, src_stride2, h);\
++ OPNAME ## _pixels8_l2(dst+8, src1+8, src2+8, dst_stride, src_stride1, src_stride2, h);\
++}\
++
++#else
++#define PIXOP2( OPNAME, OP ) \
++static void OPNAME ## _pixels4_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
++ int i;\
++ for(i=0; i<h; i++){\
++ OP(*((uint32_t*)(block )), LD32(pixels ));\
++ pixels+=line_size;\
++ block +=line_size;\
++ }\
++}\
++static void OPNAME ## _pixels8_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
++ int i;\
++ for(i=0; i<h; i++){\
++ OP(*((uint32_t*)(block )), LD32(pixels ));\
++ OP(*((uint32_t*)(block+4)), LD32(pixels+4));\
++ pixels+=line_size;\
++ block +=line_size;\
++ }\
++}\
++static void OPNAME ## _pixels16_c(uint8_t *block, const uint8_t *pixels, int line_size, int h){\
++ int i;\
++ for(i=0; i<h; i++){\
++ OP(*((uint32_t*)(block )), LD32(pixels ));\
++ OP(*((uint32_t*)(block+4)), LD32(pixels+4));\
++ OP(*((uint32_t*)(block+8)), LD32(pixels+8));\
++ OP(*((uint32_t*)(block+12)), LD32(pixels+12));\
++ pixels+=line_size;\
++ block +=line_size;\
++ }\
++}\
++static void OPNAME ## _pixels8_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
++ int src_stride1, int src_stride2, int h){\
++ int i;\
++ for(i=0; i<h; i++){\
++ uint32_t a,b;\
++ a= LD32(&src1[i*src_stride1 ]);\
++ b= LD32(&src2[i*src_stride2 ]);\
++ OP(*((uint32_t*)&dst[i*dst_stride ]), rnd_avg32(a, b));\
++ a= LD32(&src1[i*src_stride1+4]);\
++ b= LD32(&src2[i*src_stride2+4]);\
++ OP(*((uint32_t*)&dst[i*dst_stride+4]), rnd_avg32(a, b));\
++ }\
++}\
++\
++static void OPNAME ## _pixels4_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
++ int src_stride1, int src_stride2, int h){\
++ int i;\
++ for(i=0; i<h; i++){\
++ uint32_t a,b;\
++ a= LD32(&src1[i*src_stride1 ]);\
++ b= LD32(&src2[i*src_stride2 ]);\
++ OP(*((uint32_t*)&dst[i*dst_stride ]), rnd_avg32(a, b));\
++ }\
++}\
++\
++static void OPNAME ## _pixels16_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
++ int src_stride1, int src_stride2, int h){\
++ OPNAME ## _pixels8_l2(dst , src1 , src2 , dst_stride, src_stride1, src_stride2, h);\
++ OPNAME ## _pixels8_l2(dst+8, src1+8, src2+8, dst_stride, src_stride1, src_stride2, h);\
++}\
++
++#endif
++
++#define op_avg(a, b) a = rnd_avg32(a, b)
++#define op_put(a, b) a = b
++
++PIXOP2(avg, op_avg)
++PIXOP2(put, op_put)
++#undef op_avg
++#undef op_put
++
++
++
++static inline void copy_block4(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
++{
++ int i;
++ for(i=0; i<h; i++)
++ {
++ ST32(dst , LD32(src ));
++ dst+=dstStride;
++ src+=srcStride;
++ }
++}
++
++static void clear_blocks_avr32(DCTELEM *blocks)
++{
++ int n = 12;
++ uint64_t tmp1, tmp2;
++ blocks += 6*64;
++ asm volatile ( "mov\t%1, 0\n"
++ "mov\t%m1, 0\n"
++ "mov\t%2, 0\n"
++ "mov\t%m2, 0\n"
++ "0:\n"
++ "stm\t--%3, %1, %m1, %2, %m2\n"
++ "stm\t--%3, %1, %m1, %2, %m2\n"
++ "stm\t--%3, %1, %m1, %2, %m2\n"
++ "stm\t--%3, %1, %m1, %2, %m2\n"
++ "sub\t%0, 1\n"
++ "brne\t0b\n"
++ : "+r"(n), "=&r"(tmp1), "=&r"(tmp2),
++ "+r"(blocks));
++}
++
++
++static inline void copy_block8(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
++{
++ int i;
++ for(i=0; i<h; i++)
++ {
++ ST32(dst , LD32(src ));
++ ST32(dst+4 , LD32(src+4 ));
++ dst+=dstStride;
++ src+=srcStride;
++ }
++}
++
++static inline void copy_block16(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
++{
++ int i;
++ for(i=0; i<h; i++)
++ {
++ ST32(dst , LD32(src ));
++ ST32(dst+4 , LD32(src+4 ));
++ ST32(dst+8 , LD32(src+8 ));
++ ST32(dst+12, LD32(src+12));
++ dst+=dstStride;
++ src+=srcStride;
++ }
++}
++
++
++static void put_h264_chroma_mc2_pico(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){
++ const int A=(8-x)*(8-y);
++ const int B=( x)*(8-y);
++ const int C=(8-x)*( y);
++ const int D=( x)*( y);
++ int i;
++
++ PICO_PUT_W(PICO_COEFF0_A, (A << 16) | (B & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF0_B, 32);
++ PICO_PUT_W(PICO_COEFF1_A, (C << 16) | (D & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF1_B, 0);
++ PICO_PUT_W(PICO_COEFF2_A, 0);
++ PICO_PUT_W(PICO_COEFF2_B, 0);
++ PICO_PUT_W(PICO_CONFIG,
++ PICO_OUTPUT_MODE(PICO_PLANAR_MODE)
++ | PICO_INPUT_MODE(PICO_HOR_FILTER_MODE)
++ | PICO_COEFF_FRAC_BITS(6)
++ | PICO_OFFSET_FRAC_BITS(6));
++
++ for(i=0; i<h; i++)
++ {
++
++ int src0 = LD32(src);
++ int src1 = LD32(src + stride);
++
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 0, 4, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 1, 5, 0);
++ src += stride;
++ ST16(dst,(short)PICO_GET_W(PICO_OUTPIX0));
++ dst += stride;
++ }
++}
++
++
++static void put_h264_chroma_mc4_pico(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){
++ const int A=(8-x)*(8-y);\
++ const int B=( x)*(8-y);
++ const int C=(8-x)*( y);
++ const int D=( x)*( y);
++ int i;
++
++ PICO_PUT_W(PICO_COEFF0_A, (A << 16) | (B & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF0_B, 32);
++ PICO_PUT_W(PICO_COEFF1_A, (C << 16) | (D & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF1_B, 0);
++ PICO_PUT_W(PICO_COEFF2_A, 0);
++ PICO_PUT_W(PICO_COEFF2_B, 0);
++ PICO_PUT_W(PICO_CONFIG,
++ PICO_OUTPUT_MODE(PICO_PLANAR_MODE)
++ | PICO_INPUT_MODE(PICO_HOR_FILTER_MODE)
++ | PICO_COEFF_FRAC_BITS(6)
++ | PICO_OFFSET_FRAC_BITS(6));
++
++ for(i=0; i<h; i++)
++ {
++ /*
++ OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));
++ OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));
++ OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3]));
++ OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4]));
++ dst+= stride;
++ src+= stride;
++ */
++
++ int src0 = LD32(src);
++ int src1 = (((int)src[4] << 24) | (int)src[stride]);
++ int src2 = LD32(src + stride + 1);
++
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_SINGLE_VECTOR, 0, 0, 7, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 1, 1, 8, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 2, 9, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 3, 10, 0);
++ src += stride;
++ ST32(dst, PICO_GET_W(PICO_OUTPIX0));
++
++ dst += stride;
++ }
++}
++
++static void put_h264_chroma_mc8_pico(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){
++ const int A=(8-x)*(8-y);
++ const int B=( x)*(8-y);
++ const int C=(8-x)*( y);
++ const int D=( x)*( y);
++ int i;
++
++ PICO_PUT_W(PICO_COEFF0_A, (A << 16) | (B & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF0_B, 32);
++ PICO_PUT_W(PICO_COEFF1_A, (C << 16) | (D & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF1_B, 0);
++ PICO_PUT_W(PICO_COEFF2_A, 0);
++ PICO_PUT_W(PICO_COEFF2_B, 0);
++ PICO_PUT_W(PICO_CONFIG,
++ PICO_OUTPUT_MODE(PICO_PLANAR_MODE)
++ | PICO_INPUT_MODE(PICO_HOR_FILTER_MODE)
++ | PICO_COEFF_FRAC_BITS(6)
++ | PICO_OFFSET_FRAC_BITS(6));
++
++ for(i=0; i<h; i++)
++ {
++ /*
++ OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));
++ OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));
++ OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3]));
++ OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4]));
++ OP(dst[4], (A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5]));
++ OP(dst[5], (A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6]));
++ OP(dst[6], (A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7]));
++ OP(dst[7], (A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8]));
++ dst+= stride;
++ src+= stride;
++ */
++ int src0 = LD32(src);
++ int src1 = (((int)src[4] << 24) | (int)src[stride]);
++ int src2 = LD32(src + stride + 1);
++
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_SINGLE_VECTOR, 0, 0, 7, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 1, 1, 8, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 2, 9, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 3, 10, 0);
++ ST32(dst, PICO_GET_W(PICO_OUTPIX0));
++
++ src0 = LD32(src + 4);
++ src1 = (src[8] << 24) | src[stride + 4];
++ src2 = LD32(src + stride + 5);
++
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_SINGLE_VECTOR, 0, 0, 7, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 1, 1, 8, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 2, 9, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 3, 10, 0);
++ src += stride;
++ ST32(dst + 4, PICO_GET_W(PICO_OUTPIX0));
++
++ dst += stride;
++ }
++}
++
++
++static void avg_h264_chroma_mc2_pico(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){
++ const int A=(8-x)*(8-y);
++ const int B=( x)*(8-y);
++ const int C=(8-x)*( y);
++ const int D=( x)*( y);
++ int i;
++
++ PICO_PUT_W(PICO_COEFF0_A, (A << 16) | (B & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF0_B, 32);
++ PICO_PUT_W(PICO_COEFF1_A, (C << 16) | (D & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF1_B, 0);
++ PICO_PUT_W(PICO_COEFF2_A, 0);
++ PICO_PUT_W(PICO_COEFF2_B, 0);
++ PICO_PUT_W(PICO_CONFIG,
++ PICO_OUTPUT_MODE(PICO_PLANAR_MODE)
++ | PICO_INPUT_MODE(PICO_HOR_FILTER_MODE)
++ | PICO_COEFF_FRAC_BITS(6)
++ | PICO_OFFSET_FRAC_BITS(6));
++
++ for(i=0; i<h; i++)
++ {
++ int src0 = LD32(src);
++ int src1 = LD32(src + stride);
++
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 0, 4, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 1, 5, 0);
++ src += stride;
++ ST16(dst, rnd_avg32(LD16(dst), PICO_GET_W(PICO_OUTPIX0)));
++ dst += stride;
++ }
++}
++
++
++static void avg_h264_chroma_mc4_pico(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){
++ const int A=(8-x)*(8-y);\
++ const int B=( x)*(8-y);
++ const int C=(8-x)*( y);
++ const int D=( x)*( y);
++ int i;
++
++ PICO_PUT_W(PICO_COEFF0_A, (A << 16) | (B & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF0_B, 32);
++ PICO_PUT_W(PICO_COEFF1_A, (C << 16) | (D & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF1_B, 0);
++ PICO_PUT_W(PICO_COEFF2_A, 0);
++ PICO_PUT_W(PICO_COEFF2_B, 0);
++ PICO_PUT_W(PICO_CONFIG,
++ PICO_OUTPUT_MODE(PICO_PLANAR_MODE)
++ | PICO_INPUT_MODE(PICO_HOR_FILTER_MODE)
++ | PICO_COEFF_FRAC_BITS(6)
++ | PICO_OFFSET_FRAC_BITS(6));
++
++ for(i=0; i<h; i++)
++ {
++ /*
++ OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));
++ OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));
++ OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3]));
++ OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4]));
++ dst+= stride;
++ src+= stride;
++ */
++
++ int src0 = *((int *)src);
++ int src1 = (int)((src[4] << 24) | src[stride]);
++ int src2 = *((int *)(src + stride + 1));
++
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_SINGLE_VECTOR, 0, 0, 7, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 1, 1, 8, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 2, 9, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 3, 10, 0);
++ src += stride;
++ ST32(dst, rnd_avg32(LD32(dst), PICO_GET_W(PICO_OUTPIX0)));
++ dst += stride;
++ }
++}
++
++static void avg_h264_chroma_mc8_pico(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){
++ const int A=(8-x)*(8-y);
++ const int B=( x)*(8-y);
++ const int C=(8-x)*( y);
++ const int D=( x)*( y);
++ int i;
++
++ PICO_PUT_W(PICO_COEFF0_A, (A << 16) | (B & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF0_B, 32);
++ PICO_PUT_W(PICO_COEFF1_A, (C << 16) | (D & 0xFFFF));
++ PICO_PUT_W(PICO_COEFF1_B, 0);
++ PICO_PUT_W(PICO_COEFF2_A, 0);
++ PICO_PUT_W(PICO_COEFF2_B, 0);
++ PICO_PUT_W(PICO_CONFIG,
++ PICO_OUTPUT_MODE(PICO_PLANAR_MODE)
++ | PICO_INPUT_MODE(PICO_HOR_FILTER_MODE)
++ | PICO_COEFF_FRAC_BITS(6)
++ | PICO_OFFSET_FRAC_BITS(6));
++
++ for(i=0; i<h; i++)
++ {
++ /*
++ OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1]));
++ OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2]));
++ OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3]));
++ OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4]));
++ OP(dst[4], (A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5]));
++ OP(dst[5], (A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6]));
++ OP(dst[6], (A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7]));
++ OP(dst[7], (A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8]));
++ dst+= stride;
++ src+= stride;
++ */
++ int src0 = *((int *)src);
++ int src1 = (volatile int)((src[4] << 24) | src[stride]);
++ int src2 = *((int *)(src + stride + 1));
++
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_SINGLE_VECTOR, 0, 0, 7, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 1, 1, 8, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 2, 9, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 3, 10, 0);
++ ST32(dst, rnd_avg32(LD32(dst), PICO_GET_W(PICO_OUTPIX0)));
++
++ src0 = *((int *)(src + 4));
++ src1 = (int)((src[8] << 24) | src[stride + 4]);
++ src2 = *((int *)(src + stride + 5));
++
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_SINGLE_VECTOR, 0, 0, 7, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 1, 1, 8, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 2, 9, 0);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 3, 10, 0);
++ src += stride;
++ ST32(dst + 4, rnd_avg32(LD32(dst + 4), PICO_GET_W(PICO_OUTPIX0)));
++ dst += stride;
++ }
++}
++
++static struct pico_config_t h264_qpel4_h_lowpass_config = {
++ .input_mode = PICO_HOR_FILTER_MODE,
++ .output_mode = PICO_PLANAR_MODE,
++ .coeff_frac_bits = 5,
++ .offset_frac_bits = 5,
++ .coeff0_0 = 1,
++ .coeff0_1 = -5,
++ .coeff0_2 = 20,
++ .coeff0_3 = 16,
++ .coeff1_0 = 20,
++ .coeff1_1 = -5,
++ .coeff1_2 = 1,
++ .coeff1_3 = 0,
++ .coeff2_0 = 0,
++ .coeff2_1 = 0,
++ .coeff2_2 = 0,
++ .coeff2_3 = 0
++};
++
++
++
++static void put_h264_qpel4_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ const int h=4;
++ int i;
++
++ set_pico_config(&h264_qpel4_h_lowpass_config);
++
++ for(i=0; i<h; i++){
++
++ /*
++ OP(dst[0], (src[0]+src[1])*20 - (src[-1]+src[2])*5 + (src[-2]+src[3]));\
++ OP(dst[1], (src[1]+src[2])*20 - (src[0 ]+src[3])*5 + (src[-1]+src[4]));\
++ OP(dst[2], (src[2]+src[3])*20 - (src[1 ]+src[4])*5 + (src[0 ]+src[5]));\
++ OP(dst[3], (src[3]+src[4])*20 - (src[2 ]+src[5])*5 + (src[1 ]+src[6]));\
++ dst+=dstStride;\
++ src+=srcStride;\ */
++ PICO_MVRC_W(PICO_INPIX0, LD32(src - 2));
++ PICO_MVRC_D(PICO_INPIX2, LD64_UNALIGNED(src + 2));
++ PICO_OP(PICO_SINGLE_VECTOR, 0, 0, 3, 6);
++ PICO_OP(PICO_SINGLE_VECTOR, 1, 1, 4, 7);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 2, 5, 8);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 3, 6, 9);
++ src += srcStride;
++ ST32(dst, PICO_GET_W(PICO_OUTPIX0));
++ dst += dstStride;
++ }
++}
++
++static void avg_h264_qpel4_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ const int h=4;
++ int i;
++
++ set_pico_config(&h264_qpel4_h_lowpass_config);
++
++ for(i=0; i<h; i++){
++
++ /*
++ OP(dst[0], (src[0]+src[1])*20 - (src[-1]+src[2])*5 + (src[-2]+src[3]));\
++ OP(dst[1], (src[1]+src[2])*20 - (src[0 ]+src[3])*5 + (src[-1]+src[4]));\
++ OP(dst[2], (src[2]+src[3])*20 - (src[1 ]+src[4])*5 + (src[0 ]+src[5]));\
++ OP(dst[3], (src[3]+src[4])*20 - (src[2 ]+src[5])*5 + (src[1 ]+src[6]));\
++ dst+=dstStride;\
++ src+=srcStride;\ */
++
++ PICO_MVRC_W(PICO_INPIX0, LD32(src - 2));
++ PICO_MVRC_D(PICO_INPIX2, LD64_UNALIGNED(src + 2));
++ PICO_OP(PICO_SINGLE_VECTOR, 0, 0, 3, 6);
++ PICO_OP(PICO_SINGLE_VECTOR, 1, 1, 4, 7);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 2, 5, 8);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 3, 6, 9);
++ src += srcStride;
++ ST32(dst, rnd_avg32(LD32(dst), PICO_GET_W(PICO_OUTPIX0)));
++ dst += dstStride;
++ }
++}
++
++static struct pico_config_t h264_qpel4_v_lowpass_config1 = {
++ .input_mode = PICO_VERT_FILTER_MODE,
++ .output_mode = PICO_PACKED_MODE,
++ .coeff_frac_bits = 5,
++ .offset_frac_bits = 5,
++ .coeff0_0 = 1,
++ .coeff0_1 = -5,
++ .coeff0_2 = 20,
++ .coeff0_3 = 16,
++ .coeff1_0 = 1,
++ .coeff1_1 = -5,
++ .coeff1_2 = 20,
++ .coeff1_3 = 16,
++ .coeff2_0 = 1,
++ .coeff2_1 = -5,
++ .coeff2_2 = 20,
++ .coeff2_3 = 16
++};
++
++
++
++static struct pico_config_t h264_qpel4_v_lowpass_config2 = {
++ .input_mode = PICO_VERT_FILTER_MODE,
++ .output_mode = PICO_PLANAR_MODE,
++ .coeff_frac_bits = 5,
++ .offset_frac_bits = 5,
++ .coeff0_0 = 1,
++ .coeff0_1 = -5,
++ .coeff0_2 = 20,
++ .coeff0_3 = 16,
++ .coeff1_0 = 20,
++ .coeff1_1 = -5,
++ .coeff1_2 = 1,
++ .coeff1_3 = 0,
++ .coeff2_0 = 0,
++ .coeff2_1 = 0,
++ .coeff2_2 = 0,
++ .coeff2_3 = 0
++};
++
++static void put_h264_qpel4_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++
++ /*
++ const int w=4;
++ uint8_t *cm = cropTbl + MAX_NEG_CROP;
++ int i;
++ for(i=0; i<w; i++)
++ {
++ const int srcB= src[-2*srcStride];\
++ const int srcA= src[-1*srcStride];\
++ const int src0= src[0 *srcStride];\
++ const int src1= src[1 *srcStride];\
++ const int src2= src[2 *srcStride];\
++ const int src3= src[3 *srcStride];\
++ const int src4= src[4 *srcStride];\
++ const int src5= src[5 *srcStride];\
++ const int src6= src[6 *srcStride];\
++ OP(dst[0*dstStride], (src0+src1)*20 - (srcA+src2)*5 + (srcB+src3));\
++ OP(dst[1*dstStride], (src1+src2)*20 - (src0+src3)*5 + (srcA+src4));\
++ OP(dst[2*dstStride], (src2+src3)*20 - (src1+src4)*5 + (src0+src5));\
++ OP(dst[3*dstStride], (src3+src4)*20 - (src2+src5)*5 + (src1+src6));\
++ dst++;\
++ src++;\
++ */
++
++ set_pico_config(&h264_qpel4_v_lowpass_config1);
++
++ {
++ int srcB= LD32(src - 2*srcStride);
++ int srcA= LD32(src - 1*srcStride);
++ int src0= LD32(src + 0 *srcStride);
++ int src1= LD32(src + 1 *srcStride);
++ int src2= LD32(src + 2 *srcStride);
++ int src3= LD32(src + 3 *srcStride);
++ int src4= LD32(src + 4 *srcStride);
++ int src5= LD32(src + 5 *srcStride);
++ int src6= LD32(src + 6 *srcStride);
++
++ /* First compute the leftmost three colums */
++ PICO_MVRC_W(PICO_INPIX0, srcB);
++ PICO_MVRC_W(PICO_INPIX1, srcA);
++ PICO_MVRC_W(PICO_INPIX2, src0);
++ PICO_OP(0, 0, 0, 3, 6);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX0, src3);
++ PICO_OP(PICO_USE_ACC, 0, 0, 3, 6);
++ ST32(dst, PICO_GET_W(PICO_OUTPIX0));
++ dst += dstStride;
++ PICO_MVRC_W(PICO_INPIX0, srcA);
++ PICO_MVRC_W(PICO_INPIX1, src0);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_OP(0, 0, 0, 3, 6);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_MVRC_W(PICO_INPIX1, src3);
++ PICO_MVRC_W(PICO_INPIX0, src4);
++ PICO_OP(PICO_USE_ACC, 0, 0, 3, 6);
++ ST32(dst, PICO_GET_W(PICO_OUTPIX0));
++ dst += dstStride;
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(0, 0, 0, 3, 6);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_MVRC_W(PICO_INPIX1, src4);
++ PICO_MVRC_W(PICO_INPIX0, src5);
++ PICO_OP(PICO_USE_ACC, 0, 0, 3, 6);
++ ST32(dst, PICO_GET_W(PICO_OUTPIX0));
++ dst += dstStride;
++ PICO_MVRC_W(PICO_INPIX0, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_OP(0, 0, 0, 3, 6);
++ PICO_MVRC_W(PICO_INPIX2, src4);
++ PICO_MVRC_W(PICO_INPIX1, src5);
++ PICO_MVRC_W(PICO_INPIX0, src6);
++ PICO_OP(PICO_USE_ACC, 0, 0, 3, 6);
++ ST32(dst, PICO_GET_W(PICO_OUTPIX0));
++ /* Now compute the last column */
++
++ union wordbytes {
++ int word;
++ struct {
++ unsigned int t:8;
++ unsigned int u:8;
++ unsigned int l:8;
++ unsigned int b:8;
++ } bytes; } tmp1, tmp2, tmp3;
++
++
++ tmp1.bytes.t = srcB;
++ tmp1.bytes.u = src1;
++ tmp1.bytes.l = src4;
++
++ tmp2.bytes.t = srcA;
++ tmp2.bytes.u = src2;
++ tmp2.bytes.l = src5;
++
++ tmp3.bytes.t = src0;
++ tmp3.bytes.u = src3;
++ tmp3.bytes.l = src6;
++
++ PICO_MVRC_W(PICO_INPIX0, tmp1.word);
++ PICO_MVRC_W(PICO_INPIX1, tmp2.word);
++ PICO_MVRC_W(PICO_INPIX2, tmp3.word);
++ set_pico_config(&h264_qpel4_v_lowpass_config2);
++
++
++ PICO_OP(PICO_SINGLE_VECTOR, 0, 0, 3, 6);
++ PICO_OP(PICO_SINGLE_VECTOR, 1, 1, 4, 7);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 2, 5, 8);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 3, 6, 9);
++
++ PICO_MVCR_W(tmp1.word, PICO_OUTPIX0);
++ dst[3] = (char)(tmp1.bytes.b);
++ dst[3 - dstStride] = (char)(tmp1.bytes.l);
++ dst[3 - 2*dstStride] = (char)(tmp1.bytes.u);
++ dst[3 - 3*dstStride] = (char)(tmp1.bytes.t);
++
++ }
++ /*}
++
++
++ }*/
++}
++
++static void avg_h264_qpel4_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++
++ /*
++ const int w=4;
++ uint8_t *cm = cropTbl + MAX_NEG_CROP;
++ int i;
++ for(i=0; i<w; i++)
++ {
++ const int srcB= src[-2*srcStride];\
++ const int srcA= src[-1*srcStride];\
++ const int src0= src[0 *srcStride];\
++ const int src1= src[1 *srcStride];\
++ const int src2= src[2 *srcStride];\
++ const int src3= src[3 *srcStride];\
++ const int src4= src[4 *srcStride];\
++ const int src5= src[5 *srcStride];\
++ const int src6= src[6 *srcStride];\
++ OP(dst[0*dstStride], (src0+src1)*20 - (srcA+src2)*5 + (srcB+src3));\
++ OP(dst[1*dstStride], (src1+src2)*20 - (src0+src3)*5 + (srcA+src4));\
++ OP(dst[2*dstStride], (src2+src3)*20 - (src1+src4)*5 + (src0+src5));\
++ OP(dst[3*dstStride], (src3+src4)*20 - (src2+src5)*5 + (src1+src6));\
++ dst++;\
++ src++;\
++ */
++ uint8_t tmp_block[4*4];
++
++ set_pico_config(&h264_qpel4_v_lowpass_config1);
++
++ {
++ int srcB= LD32(src - 2*srcStride);
++ int srcA= LD32(src - 1*srcStride);
++ int src0= LD32(src + 0 *srcStride);
++ int src1= LD32(src + 1 *srcStride);
++ int src2= LD32(src + 2 *srcStride);
++ int src3= LD32(src + 3 *srcStride);
++ int src4= LD32(src + 4 *srcStride);
++ int src5= LD32(src + 5 *srcStride);
++ int src6= LD32(src + 6 *srcStride);
++
++ /* First compute the leftmost three colums */
++ PICO_MVRC_W(PICO_INPIX0, srcB);
++ PICO_MVRC_W(PICO_INPIX1, srcA);
++ PICO_MVRC_W(PICO_INPIX2, src0);
++ PICO_OP(0, 0, 0, 3, 6);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX0, src3);
++ PICO_OP(PICO_USE_ACC, 0, 0, 3, 6);
++ ST32(tmp_block, PICO_GET_W(PICO_OUTPIX0));
++ PICO_MVRC_W(PICO_INPIX0, srcA);
++ PICO_MVRC_W(PICO_INPIX1, src0);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_OP(0, 0, 0, 3, 6);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_MVRC_W(PICO_INPIX1, src3);
++ PICO_MVRC_W(PICO_INPIX0, src4);
++ PICO_OP(PICO_USE_ACC, 0, 0, 3, 6);
++ ST32(tmp_block + 4, PICO_GET_W(PICO_OUTPIX0));
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(0, 0, 0, 3, 6);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_MVRC_W(PICO_INPIX1, src4);
++ PICO_MVRC_W(PICO_INPIX0, src5);
++ PICO_OP(PICO_USE_ACC, 0, 0, 3, 6);
++ ST32(tmp_block + 8, PICO_GET_W(PICO_OUTPIX0));
++ PICO_MVRC_W(PICO_INPIX0, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_OP(0, 0, 0, 3, 6);
++ PICO_MVRC_W(PICO_INPIX2, src4);
++ PICO_MVRC_W(PICO_INPIX1, src5);
++ PICO_MVRC_W(PICO_INPIX0, src6);
++ PICO_OP(PICO_USE_ACC, 0, 0, 3, 6);
++ ST32(tmp_block + 12, PICO_GET_W(PICO_OUTPIX0));
++ /* Now compute the last column */
++
++ union wordbytes {
++ int word;
++ struct {
++ unsigned int t:8;
++ unsigned int u:8;
++ unsigned int l:8;
++ unsigned int b:8;
++ } bytes; } tmp1, tmp2, tmp3;
++
++
++ tmp1.bytes.t = srcB;
++ tmp1.bytes.u = src1;
++ tmp1.bytes.l = src4;
++
++ tmp2.bytes.t = srcA;
++ tmp2.bytes.u = src2;
++ tmp2.bytes.l = src5;
++
++ tmp3.bytes.t = src0;
++ tmp3.bytes.u = src3;
++ tmp3.bytes.l = src6;
++
++ PICO_MVRC_W(PICO_INPIX0, tmp1.word);
++ PICO_MVRC_W(PICO_INPIX1, tmp2.word);
++ PICO_MVRC_W(PICO_INPIX2, tmp3.word);
++ set_pico_config(&h264_qpel4_v_lowpass_config2);
++
++
++ PICO_OP(PICO_SINGLE_VECTOR, 0, 0, 3, 6);
++ PICO_OP(PICO_SINGLE_VECTOR, 1, 1, 4, 7);
++ PICO_OP(PICO_SINGLE_VECTOR, 2, 2, 5, 8);
++ PICO_OP(PICO_SINGLE_VECTOR, 3, 3, 6, 9);
++
++ PICO_MVCR_W(tmp1.word, PICO_OUTPIX0);
++ tmp_block[3 + 3*4] = (char)(tmp1.bytes.b);
++ tmp_block[3 + 2*4] = (char)(tmp1.bytes.l);
++ tmp_block[3 + 1*4] = (char)(tmp1.bytes.u);
++ tmp_block[3] = (char)(tmp1.bytes.t);
++
++ /* Compute the average */
++ srcB= LD32(dst);
++ srcA= LD32(dst + dstStride);
++ src0= LD32(dst + dstStride*2);
++ src1= LD32(dst + dstStride*3);
++
++ src2= LD32(tmp_block);
++ src3= LD32(tmp_block + 4);
++ src4= LD32(tmp_block + 8);
++ src5= LD32(tmp_block + 12);
++
++ ST32(dst, rnd_avg32(srcB, src2));
++ ST32(dst + dstStride, rnd_avg32(srcA, src3));
++ ST32(dst + 2*dstStride, rnd_avg32(src0, src4));
++ ST32(dst + 3*dstStride, rnd_avg32(src1, src5));
++ }
++}
++
++static struct pico_config_t h264_qpel4_hv_lowpass_config = {
++ .input_mode = PICO_HOR_FILTER_MODE,
++ .output_mode = PICO_PACKED_MODE,
++ .coeff_frac_bits = 10,
++ .offset_frac_bits = 10,
++ .coeff0_0 = 1,
++ .coeff0_1 = -5,
++ .coeff0_2 = 20,
++ .coeff0_3 = 512,
++ .coeff1_0 = -5,
++ .coeff1_1 = 25,
++ .coeff1_2 = -100,
++ .coeff1_3 = 0,
++ .coeff2_0 = 20,
++ .coeff2_1 = -100,
++ .coeff2_2 = 400,
++ .coeff2_3 = 0
++};
++
++static void put_h264_qpel4_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++
++ int32_t tmp_block[48];
++ int32_t *tmp = tmp_block;
++ int i;
++
++ set_pico_config(&h264_qpel4_hv_lowpass_config);
++
++ src -= 2;
++ for ( i = 0; i < 2; i++ ){
++ int srcB= LD32(src - 2*srcStride);
++ int srcA= LD32(src - 1*srcStride);
++ int src0= LD32(src + 0 *srcStride);
++ int src1= LD32(src + 1 *srcStride);
++ int src2= LD32(src + 2 *srcStride);
++ int src3= LD32(src + 3 *srcStride);
++ int src4= LD32(src + 4 *srcStride);
++ int src5= LD32(src + 5 *srcStride);
++ int src6= LD32(src + 6 *srcStride);
++
++ PICO_MVRC_W(PICO_INPIX0, srcB);
++ PICO_MVRC_W(PICO_INPIX1, srcA);
++ PICO_MVRC_W(PICO_INPIX2, src0);
++ PICO_OP(0, 0, 0, 4, 8);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX0, src3);
++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_OP(0, 0, 1, 5, 9);
++ PICO_MVRC_W(PICO_INPIX0, srcB);
++ PICO_MVRC_W(PICO_INPIX1, srcA);
++ PICO_MVRC_W(PICO_INPIX2, src0);
++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_MVRC_W(PICO_INPIX0, src1);
++ PICO_OP(0, 0, 4, 8, 0);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_MVRC_W(PICO_INPIX1, src3);
++ PICO_MVRC_W(PICO_INPIX0, src4);
++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_OP(0, 0, 1, 5, 9);
++ PICO_MVRC_W(PICO_INPIX0, srcA);
++ PICO_MVRC_W(PICO_INPIX1, src0);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_MVRC_W(PICO_INPIX0, src2);
++ PICO_OP(0, 0, 4, 8, 0);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_MVRC_W(PICO_INPIX1, src4);
++ PICO_MVRC_W(PICO_INPIX0, src5);
++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_OP(0, 0, 1, 5, 9);
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_MVRC_W(PICO_INPIX0, src3);
++ PICO_OP(0, 0, 4, 8, 0);
++ PICO_MVRC_W(PICO_INPIX2, src4);
++ PICO_MVRC_W(PICO_INPIX1, src5);
++ PICO_MVRC_W(PICO_INPIX0, src6);
++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_OP(0, 0, 1, 5, 9);
++ PICO_MVRC_W(PICO_INPIX0, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++ src += 2;
++ }
++
++ src -= 1;
++ tmp -= 48;
++
++
++ PICO_PUT_W(PICO_CONFIG,
++ PICO_OUTPUT_MODE(PICO_PLANAR_MODE)
++ | PICO_INPUT_MODE(PICO_VERT_FILTER_MODE)
++ | PICO_COEFF_FRAC_BITS(10)
++ | PICO_OFFSET_FRAC_BITS(10));
++
++ for ( i = 0; i < 2; i++ ){
++ int srcB= LD32(src - 2*srcStride);
++ int srcA= LD32(src - 1*srcStride);
++ int src0= LD32(src + 0 *srcStride);
++ int src1= LD32(src + 1 *srcStride);
++ int src2= LD32(src + 2 *srcStride);
++ int src3= LD32(src + 3 *srcStride);
++ int src4= LD32(src + 4 *srcStride);
++ int src5= LD32(src + 5 *srcStride);
++ int src6= LD32(src + 6 *srcStride);
++
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_MVRC_W(PICO_INPIX0, srcB);
++ PICO_MVRC_W(PICO_INPIX1, srcA);
++ PICO_MVRC_W(PICO_INPIX2, src0);
++ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX0, src3);
++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 0, 6, 3, 0);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3);
++ PICO_MVRC_W(PICO_INPIX0, srcB);
++ PICO_MVRC_W(PICO_INPIX1, srcA);
++ PICO_MVRC_W(PICO_INPIX2, src0);
++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 1, 9, 6, 3);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_MVRC_W(PICO_INPIX0, srcA);
++ PICO_MVRC_W(PICO_INPIX1, src0);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_MVRC_W(PICO_INPIX1, src3);
++ PICO_MVRC_W(PICO_INPIX0, src4);
++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 2, 6, 3, 0);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3);
++ PICO_MVRC_W(PICO_INPIX0, srcA);
++ PICO_MVRC_W(PICO_INPIX1, src0);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 3, 9, 6, 3);
++
++ ST16(dst + 0*dstStride, (short)(PICO_GET_W(PICO_OUTPIX0) >> 16));
++ ST16(dst + 1*dstStride, (short)PICO_GET_W(PICO_OUTPIX0));
++
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_MVRC_W(PICO_INPIX1, src4);
++ PICO_MVRC_W(PICO_INPIX0, src5);
++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 0, 6, 3, 0);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3);
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 1, 9, 6, 3);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_MVRC_W(PICO_INPIX0, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0);
++ PICO_MVRC_W(PICO_INPIX2, src4);
++ PICO_MVRC_W(PICO_INPIX1, src5);
++ PICO_MVRC_W(PICO_INPIX0, src6);
++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 2, 6, 3, 0);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3);
++ PICO_MVRC_W(PICO_INPIX0, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 3, 9, 6, 3);
++
++ ST16(dst + 2*dstStride, (short)(PICO_GET_W(PICO_OUTPIX0) >> 16));
++ ST16(dst + 3*dstStride, (short)PICO_GET_W(PICO_OUTPIX0));
++
++ dst += 2;
++ src += 2;
++ }
++}
++
++
++
++
++static void avg_h264_qpel4_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++
++ int32_t tmp_block[48];
++ int32_t *tmp = tmp_block;
++ int i;
++
++ set_pico_config(&h264_qpel4_hv_lowpass_config);
++
++ src -= 2;
++ for ( i = 0; i < 2; i++ ){
++ int srcB= LD32(src - 2*srcStride);
++ int srcA= LD32(src - 1*srcStride);
++ int src0= LD32(src + 0 *srcStride);
++ int src1= LD32(src + 1 *srcStride);
++ int src2= LD32(src + 2 *srcStride);
++ int src3= LD32(src + 3 *srcStride);
++ int src4= LD32(src + 4 *srcStride);
++ int src5= LD32(src + 5 *srcStride);
++ int src6= LD32(src + 6 *srcStride);
++
++ PICO_MVRC_W(PICO_INPIX0, srcB);
++ PICO_MVRC_W(PICO_INPIX1, srcA);
++ PICO_MVRC_W(PICO_INPIX2, src0);
++ PICO_OP(0, 0, 0, 4, 8);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX0, src3);
++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_OP(0, 0, 1, 5, 9);
++ PICO_MVRC_W(PICO_INPIX0, srcB);
++ PICO_MVRC_W(PICO_INPIX1, srcA);
++ PICO_MVRC_W(PICO_INPIX2, src0);
++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_MVRC_W(PICO_INPIX0, src1);
++ PICO_OP(0, 0, 4, 8, 0);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_MVRC_W(PICO_INPIX1, src3);
++ PICO_MVRC_W(PICO_INPIX0, src4);
++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_OP(0, 0, 1, 5, 9);
++ PICO_MVRC_W(PICO_INPIX0, srcA);
++ PICO_MVRC_W(PICO_INPIX1, src0);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_MVRC_W(PICO_INPIX0, src2);
++ PICO_OP(0, 0, 4, 8, 0);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_MVRC_W(PICO_INPIX1, src4);
++ PICO_MVRC_W(PICO_INPIX0, src5);
++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_OP(0, 0, 1, 5, 9);
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_MVRC_W(PICO_INPIX0, src3);
++ PICO_OP(0, 0, 4, 8, 0);
++ PICO_MVRC_W(PICO_INPIX2, src4);
++ PICO_MVRC_W(PICO_INPIX1, src5);
++ PICO_MVRC_W(PICO_INPIX0, src6);
++ PICO_OP(PICO_USE_ACC, 0, 0, 4, 8);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++
++ PICO_OP(0, 0, 1, 5, 9);
++ PICO_MVRC_W(PICO_INPIX0, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_OP(PICO_USE_ACC, 0, 1, 5, 9);
++ PICO_STCM_W(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ tmp += 3;
++ src += 2;
++ }
++
++ src -= 1;
++ tmp -= 48;
++
++
++ PICO_PUT_W(PICO_CONFIG,
++ PICO_OUTPUT_MODE(PICO_PLANAR_MODE)
++ | PICO_INPUT_MODE(PICO_VERT_FILTER_MODE)
++ | PICO_COEFF_FRAC_BITS(10)
++ | PICO_OFFSET_FRAC_BITS(10));
++
++ for ( i = 0; i < 2; i++ ){
++ int srcB= LD32(src - 2*srcStride);
++ int srcA= LD32(src - 1*srcStride);
++ int src0= LD32(src + 0 *srcStride);
++ int src1= LD32(src + 1 *srcStride);
++ int src2= LD32(src + 2 *srcStride);
++ int src3= LD32(src + 3 *srcStride);
++ int src4= LD32(src + 4 *srcStride);
++ int src5= LD32(src + 5 *srcStride);
++ int src6= LD32(src + 6 *srcStride);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_MVRC_W(PICO_INPIX0, srcB);
++ PICO_MVRC_W(PICO_INPIX1, srcA);
++ PICO_MVRC_W(PICO_INPIX2, src0);
++ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX0, src3);
++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 0, 6, 3, 0);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3);
++ PICO_MVRC_W(PICO_INPIX0, srcB);
++ PICO_MVRC_W(PICO_INPIX1, srcA);
++ PICO_MVRC_W(PICO_INPIX2, src0);
++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 1, 9, 6, 3);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_MVRC_W(PICO_INPIX0, srcA);
++ PICO_MVRC_W(PICO_INPIX1, src0);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_MVRC_W(PICO_INPIX1, src3);
++ PICO_MVRC_W(PICO_INPIX0, src4);
++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 2, 6, 3, 0);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3);
++ PICO_MVRC_W(PICO_INPIX0, srcA);
++ PICO_MVRC_W(PICO_INPIX1, src0);
++ PICO_MVRC_W(PICO_INPIX2, src1);
++ PICO_OP(PICO_USE_ACC | PICO_SINGLE_VECTOR, 3, 9, 6, 3);
++
++ ST16(dst + 0*dstStride, rnd_avg32(LD16(dst + 0*dstStride), PICO_GET_W(PICO_OUTPIX0) >> 16));
++ ST16(dst + 1*dstStride, rnd_avg32(LD16(dst + 1*dstStride), PICO_GET_W(PICO_OUTPIX0)));
++
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_USE_ACC, 0, 6, 3, 0);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_MVRC_W(PICO_INPIX1, src4);
++ PICO_MVRC_W(PICO_INPIX0, src5);
++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 0, 6, 3, 0);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_OP(PICO_USE_ACC, 1, 9, 6, 3);
++ PICO_MVRC_W(PICO_INPIX0, src0);
++ PICO_MVRC_W(PICO_INPIX1, src1);
++ PICO_MVRC_W(PICO_INPIX2, src2);
++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 1, 9, 6, 3);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_MVRC_W(PICO_INPIX0, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_OP(PICO_USE_ACC, 2, 6, 3, 0);
++ PICO_MVRC_W(PICO_INPIX2, src4);
++ PICO_MVRC_W(PICO_INPIX1, src5);
++ PICO_MVRC_W(PICO_INPIX0, src6);
++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 2, 6, 3, 0);
++
++ PICO_LDCM_W_INC(tmp,
++ PICO_REGVECT_VMU0_OUT,
++ PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT);
++ PICO_OP(PICO_USE_ACC, 3, 9, 6, 3);
++ PICO_MVRC_W(PICO_INPIX0, src1);
++ PICO_MVRC_W(PICO_INPIX1, src2);
++ PICO_MVRC_W(PICO_INPIX2, src3);
++ PICO_OP(PICO_USE_ACC| PICO_SINGLE_VECTOR, 3, 9, 6, 3);
++
++ ST16(dst + 2*dstStride, rnd_avg32(LD16(dst + 2*dstStride), PICO_GET_W(PICO_OUTPIX0) >> 16));
++ ST16(dst + 3*dstStride, rnd_avg32(LD16(dst + 3*dstStride), PICO_GET_W(PICO_OUTPIX0)));
++
++ dst += 2;
++ src += 2;
++ }
++}
++
++
++static void put_h264_qpel8_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ put_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++ src += 4*srcStride;
++ dst += 4*dstStride;
++ put_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++}
++
++static void avg_h264_qpel8_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ avg_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++ src += 4*srcStride;
++ dst += 4*dstStride;
++ avg_h264_qpel4_v_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel4_v_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++}
++
++static void put_h264_qpel8_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ put_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++ src += 4*srcStride;
++ dst += 4*dstStride;
++ put_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++}
++
++static void avg_h264_qpel8_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ avg_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++ src += 4*srcStride;
++ dst += 4*dstStride;
++ avg_h264_qpel4_h_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel4_h_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++}
++
++static void put_h264_qpel8_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ put_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++ src += 4*srcStride;
++ dst += 4*dstStride;
++ put_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++}
++
++static void avg_h264_qpel8_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ avg_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++ src += 4*srcStride;
++ dst += 4*dstStride;
++ avg_h264_qpel4_hv_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel4_hv_lowpass_pico(dst+4, src+4, dstStride, srcStride);
++}
++
++static void put_h264_qpel16_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ put_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++ src += 8*srcStride;
++ dst += 8*dstStride;
++ put_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++}
++
++static void avg_h264_qpel16_v_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ avg_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++ src += 8*srcStride;
++ dst += 8*dstStride;
++ avg_h264_qpel8_v_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel8_v_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++}
++
++static void put_h264_qpel16_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ put_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++ src += 8*srcStride;
++ dst += 8*dstStride;
++ put_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++}
++
++static void avg_h264_qpel16_h_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ avg_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++ src += 8*srcStride;
++ dst += 8*dstStride;
++ avg_h264_qpel8_h_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel8_h_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++}
++
++static void put_h264_qpel16_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ put_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++ src += 8*srcStride;
++ dst += 8*dstStride;
++ put_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride);
++ put_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++}
++
++static void avg_h264_qpel16_hv_lowpass_pico(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){
++ avg_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++ src += 8*srcStride;
++ dst += 8*dstStride;
++ avg_h264_qpel8_hv_lowpass_pico(dst , src , dstStride, srcStride);
++ avg_h264_qpel8_hv_lowpass_pico(dst+8, src+8, dstStride, srcStride);
++}
++
++
++#define H264_MC(OPNAME, SIZE) \
++static void OPNAME ## h264_qpel ## SIZE ## _mc00_pico (uint8_t *dst, uint8_t *src, int stride){\
++ OPNAME ## pixels ## SIZE ## _c(dst, src, stride, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc10_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t half[SIZE*SIZE];\
++ put_h264_qpel ## SIZE ## _h_lowpass_pico(half, src, SIZE, stride);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, src, half, stride, stride, SIZE, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc20_pico(uint8_t *dst, uint8_t *src, int stride){\
++ OPNAME ## h264_qpel ## SIZE ## _h_lowpass_pico(dst, src, stride, stride);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc30_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t half[SIZE*SIZE];\
++ put_h264_qpel ## SIZE ## _h_lowpass_pico(half, src, SIZE, stride);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, src+1, half, stride, stride, SIZE, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc01_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t full[SIZE*(SIZE+5)];\
++ uint8_t * const full_mid= full + SIZE*2;\
++ uint8_t half[SIZE*SIZE];\
++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
++ put_h264_qpel ## SIZE ## _v_lowpass_pico(half, full_mid, SIZE, SIZE);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, full_mid, half, stride, SIZE, SIZE, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc02_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t full[SIZE*(SIZE+5)];\
++ uint8_t * const full_mid= full + SIZE*2;\
++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
++ OPNAME ## h264_qpel ## SIZE ## _v_lowpass_pico(dst, full_mid, stride, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc03_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t full[SIZE*(SIZE+5)];\
++ uint8_t * const full_mid= full + SIZE*2;\
++ uint8_t half[SIZE*SIZE];\
++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
++ put_h264_qpel ## SIZE ## _v_lowpass_pico(half, full_mid, SIZE, SIZE);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, full_mid+SIZE, half, stride, SIZE, SIZE, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc11_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t full[SIZE*(SIZE+5)];\
++ uint8_t * const full_mid= full + SIZE*2;\
++ uint8_t halfH[SIZE*SIZE];\
++ uint8_t halfV[SIZE*SIZE];\
++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\
++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc31_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t full[SIZE*(SIZE+5)];\
++ uint8_t * const full_mid= full + SIZE*2;\
++ uint8_t halfH[SIZE*SIZE];\
++ uint8_t halfV[SIZE*SIZE];\
++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\
++ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\
++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc13_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t full[SIZE*(SIZE+5)];\
++ uint8_t * const full_mid= full + SIZE*2;\
++ uint8_t halfH[SIZE*SIZE];\
++ uint8_t halfV[SIZE*SIZE];\
++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\
++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc33_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t full[SIZE*(SIZE+5)];\
++ uint8_t * const full_mid= full + SIZE*2;\
++ uint8_t halfH[SIZE*SIZE];\
++ uint8_t halfV[SIZE*SIZE];\
++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\
++ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\
++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc22_pico(uint8_t *dst, uint8_t *src, int stride){\
++ OPNAME ## h264_qpel ## SIZE ## _hv_lowpass_pico(dst, src, stride, stride);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc21_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t halfH[SIZE*SIZE];\
++ uint8_t halfHV[SIZE*SIZE];\
++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src, SIZE, stride);\
++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc23_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t halfH[SIZE*SIZE];\
++ uint8_t halfHV[SIZE*SIZE];\
++ put_h264_qpel ## SIZE ## _h_lowpass_pico(halfH, src + stride, SIZE, stride);\
++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc12_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t full[SIZE*(SIZE+5)];\
++ uint8_t * const full_mid= full + SIZE*2;\
++ uint8_t halfV[SIZE*SIZE];\
++ uint8_t halfHV[SIZE*SIZE];\
++ copy_block ## SIZE (full, src - stride*2, SIZE, stride, SIZE + 5);\
++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\
++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, halfV, halfHV, stride, SIZE, SIZE, SIZE);\
++}\
++\
++static void OPNAME ## h264_qpel ## SIZE ## _mc32_pico(uint8_t *dst, uint8_t *src, int stride){\
++ uint8_t full[SIZE*(SIZE+5)];\
++ uint8_t * const full_mid= full + SIZE*2;\
++ uint8_t halfV[SIZE*SIZE];\
++ uint8_t halfHV[SIZE*SIZE];\
++ copy_block ## SIZE (full, src - stride*2 + 1, SIZE, stride, SIZE + 5);\
++ put_h264_qpel ## SIZE ## _v_lowpass_pico(halfV, full_mid, SIZE, SIZE);\
++ put_h264_qpel ## SIZE ## _hv_lowpass_pico(halfHV, src, SIZE, stride);\
++ OPNAME ## pixels ## SIZE ## _l2(dst, halfV, halfHV, stride, SIZE, SIZE, SIZE);\
++}\
++
++H264_MC(put_, 4)
++H264_MC(put_, 8)
++H264_MC(put_, 16)
++H264_MC(avg_, 4)
++H264_MC(avg_, 8)
++H264_MC(avg_, 16)
++
++
++
++#define dspfunc16(PFX) \
++ void PFX ## _pixels16_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \
++ PFX ## _pixels8_avr32(dst, pixels, line_size, h);\
++ PFX ## _pixels8_avr32(dst + 8, pixels + 8, line_size, h);\
++ }\
++ void PFX ## _pixels16_h_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \
++ PFX ## _pixels8_h_avr32(dst, pixels, line_size, h);\
++ PFX ## _pixels8_h_avr32(dst + 8, pixels + 8, line_size, h);\
++ }\
++ void PFX ## _pixels16_v_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \
++ PFX ## _pixels8_v_avr32(dst, pixels, line_size, h);\
++ PFX ## _pixels8_v_avr32(dst + 8, pixels + 8, line_size, h);\
++ }\
++ void PFX ## _pixels16_hv_avr32(uint8_t *dst, const uint8_t *pixels, int line_size, int h ){ \
++ PFX ## _pixels8_hv_avr32(dst, pixels, line_size, h);\
++ PFX ## _pixels8_hv_avr32(dst + 8, pixels + 8, line_size, h);\
++ }\
++
++
++dspfunc16(put)
++dspfunc16(put_no_rnd)
++dspfunc16(avg)
++dspfunc16(avg_no_rnd)
++#undef dspfunc16
++
++static int pix_sum_avr32(uint8_t * pix, int line_size)
++{
++ int s, i;
++
++ s = 0;
++ for (i = 0; i < 16; i++) {
++ int tmp1,tmp2,tmp3,tmp4,tmp5;
++ __asm__ volatile ( "ld.w\t%0, %6[0]\n\t"
++ "ld.w\t%1, %6[4]\n\t"
++ "ld.w\t%2, %6[8]\n\t"
++ "ld.w\t%3, %6[12]\n\t"
++ "punpckub.h\t%4, %0:t\n\t"
++ "padd.h\t%5, %5, %4\n\t"
++ "punpckub.h\t%4, %0:b\n\t"
++ "padd.h\t%5, %5, %4\n\t"
++ "punpckub.h\t%4, %1:t\n\t"
++ "padd.h\t%5, %5, %4\n\t"
++ "punpckub.h\t%4, %1:b\n\t"
++ "padd.h\t%5, %5, %4\n\t"
++ "punpckub.h\t%4, %2:t\n\t"
++ "padd.h\t%5, %5, %4\n\t"
++ "punpckub.h\t%4, %2:b\n\t"
++ "padd.h\t%5, %5, %4\n\t"
++ "punpckub.h\t%4, %3:t\n\t"
++ "padd.h\t%5, %5, %4\n\t"
++ "punpckub.h\t%4, %3:b\n\t"
++ "padd.h\t%5, %5, %4\n\t"
++ : "=&r"(tmp1),"=&r"(tmp2),"=&r"(tmp3),"=&r"(tmp4),"=&r"(tmp5),"=&r"(s)
++ : "r"(pix));
++ pix += line_size;
++ }
++ __asm__ volatile ( "addhh.w\t%0, %0:t, %0:b" : "=&r" (s) );
++
++ return s;
++}
++
++
++//#define op_scale1(x) block[x] = clip_uint8( (block[x]*weight + offset) >> log2_denom )
++//#define op_scale2(x) dst[x] = clip_uint8( (src[x]*weights + dst[x]*weightd + offset) >> (log2_denom+1))
++//#define H264_WEIGHT(W,H) \
++//static void weight_h264_pixels ## W ## x ## H ## _c(uint8_t *block, int stride, int log2_denom, int weight, int offset){ \
++// int attribute_unused x, y; \
++// offset <<= log2_denom; \
++// if(log2_denom) offset += 1<<(log2_denom-1); \
++// for(y=0; y<H; y++, block += stride){ \
++// uint32_t tmp0, tmp1;
++// if(W==2) { \
++// asm volatile ( "ld.ub\t%[tmp0], %[block][0]\n" \
++// "ld.ub\t%[tmp1], %[block][1]\n" \
++// "mulhh.w\t%[tmp0], %[tmp0]:b, %[weight]:b\n" \
++// "mulhh.w\t%[tmp1], %[tmp1]:b, %[weight]:b\n" \
++// "asr\t%[tmp0], %[log2_denom]\n" \
++// "asr\t%[tmp1], %[log2_denom]\n" \
++// "satu\t%[tmp0] >> 0, 8\n" \
++// "satu\t%[tmp1] >> 0, 8\n" \
++// "st.b\t%[block][0], %[tmp0]\n" \
++// "st.b\t%[block][1], %[tmp1]\n" \
++// : [tmp0] "=&r"(tmp0), [tmp1] "=&r"(tmp1) \
++// : [block] "r"(block), [weight]"r"(weight), [log2_denom]"r"(log2denom) ); \
++// } else if ( W==4 ) { \
++// asm volatile ( "ld.w\t%[tmp0], %[block][0]\n" \
++// "punpckub.h\t%[tmp1], %[tmp0]:t\n" \
++// "punpckub.h\t%[tmp0], %[tmp0]:b\n" \
++// "mulhh.w\t%[tmp2], %[tmp1]:t, %[weight]:b\n" \
++// "mulhh.w\t%[tmp1], %[tmp1]:b, %[weight]:b\n" \
++// "asr\t%[tmp0], %[log2_denom]\n" \
++// "asr\t%[tmp1], %[log2_denom]\n" \
++// "satu\t%[tmp0] >> 0, 8\n" \
++// "satu\t%[tmp1] >> 0, 8\n" \
++// "st.b\t%[block][0], %[tmp0]\n" \
++// "st.b\t%[block][1], %[tmp1]\n" \
++// : [tmp0] "=&r"(tmp0), [tmp1] "=&r"(tmp1) \
++// : [block] "r"(block), [weight]"r"(weight), [log2_denom]"r"(log2denom) ); \
++//
++//
++//
++// if(W==4) continue; \
++// op_scale1(4); \
++// op_scale1(5); \
++// op_scale1(6); \
++// op_scale1(7); \
++// if(W==8) continue; \
++// op_scale1(8); \
++// op_scale1(9); \
++// op_scale1(10); \
++// op_scale1(11); \
++// op_scale1(12); \
++// op_scale1(13); \
++// op_scale1(14); \
++// op_scale1(15); \
++// } \
++//} \
++//static void biweight_h264_pixels ## W ## x ## H ## _c(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offsetd, int offsets){ \
++// int attribute_unused x, y; \
++// int offset = (offsets + offsetd + 1) >> 1; \
++// offset = ((offset << 1) + 1) << log2_denom; \
++// for(y=0; y<H; y++, dst += stride, src += stride){ \
++// op_scale2(0); \
++// op_scale2(1); \
++// if(W==2) continue; \
++// op_scale2(2); \
++// op_scale2(3); \
++// if(W==4) continue; \
++// op_scale2(4); \
++// op_scale2(5); \
++// op_scale2(6); \
++// op_scale2(7); \
++// if(W==8) continue; \
++// op_scale2(8); \
++// op_scale2(9); \
++// op_scale2(10); \
++// op_scale2(11); \
++// op_scale2(12); \
++// op_scale2(13); \
++// op_scale2(14); \
++// op_scale2(15); \
++// } \
++//}
++
++
++
++/* Returns zero in each byte where the absolute difference between <a> and <b>
++ is not less than <compare> */
++#define PABS_DIFF_LESS_THAN( a, b, compare) \
++ ({ uint32_t __tmp__, __tmp2__, __mask__; \
++ asm ( \
++ /* Check ABS( a - b ) < compare */ \
++ "psubs.ub\t%[tmp], %[opa], %[opb]\n" \
++ "psubs.ub\t%[tmp2], %[opb], %[opa]\n" \
++ "or\t%[tmp], %[tmp2]\n" /* ABS ( a - b ) */ \
++ /* This produces 0 for all bytes where the comparison is not true */ \
++ "psubs.ub\t%[mask], %[cmp], %[tmp]\n" \
++ : [tmp] "=&r"(__tmp__), [tmp2] "=&r"(__tmp2__), [mask] "=&r"(__mask__) \
++ : [opa] "r"(a), [opb] "r"(b), [cmp] "r"(compare) ); \
++ __mask__; })
++
++/*
++ Set all bytes containing zero in <value> to 255 and the rest to zero.
++
++ Add with saturation 254 to all bytes making all bytes different from
++ zero become 255. Then add one without saturation to make all bytes
++ originally containing zero 255 and the rest 0. */
++#define SET_ALL_BITS_IN_ZERO_BYTES(value) \
++ ({ uint32_t __tmp__; \
++ asm ( \
++ "padds.ub\t%[tmp], %[val], %[max_minus_one]\n" \
++ "padd.b\t%[tmp], %[tmp], %[all_ones]\n" \
++ : [tmp] "=r"(__tmp__) \
++ : [val] "r"(value), [max_minus_one] "r"(0xFEFEFEFE), [all_ones] "r"(0x01010101) ); \
++ __tmp__; })
++
++#define PACKW_SH(upper, lower) \
++ ({ uint32_t __tmp__; \
++ asm ( \
++ "packw.sh\t%[tmp], %[u], %[l]\n" \
++ : [tmp] "=r"(__tmp__) \
++ : [u] "r"(upper), [l] "r"(lower) ); \
++ __tmp__; })
++
++#define PACKSH_UB(upper, lower) \
++ ({ uint32_t __tmp__; \
++ asm ( \
++ "packsh.sb\t%[tmp], %[u], %[l]\n" \
++ : [tmp] "=r"(__tmp__) \
++ : [u] "r"(upper), [l] "r"(lower) ); \
++ __tmp__; })
++
++static void h264_v_loop_filter_luma_avr32(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0)
++{
++ int i;
++
++ if ( alpha == 0 )
++ return;
++
++ alpha = PACKW_SH(alpha, alpha);
++ alpha = PACKSH_UB(alpha, alpha);
++ beta = PACKW_SH(beta, beta);
++ beta = PACKSH_UB(beta, beta);
++
++ for( i = 0; i < 4; i++ ) {
++ uint32_t p0, p1, p2, q0, q1, q2;
++ uint32_t mask, mask2;
++ uint32_t tmp, tmp2, tmp3, tmp4;
++
++ if( tc0[i] < 0 ) {
++ pix += 4;
++ continue;
++ }
++
++/* for( d = 0; d < 4; d++ ) {
++ const int p0 = pix[-1*stride];
++ const int p1 = pix[-2*stride];
++ const int p2 = pix[-3*stride];
++ const int q0 = pix[0];
++ const int q1 = pix[1*stride];
++ const int q2 = pix[2*stride];
++
++ if( ABS( p0 - q0 ) < alpha &&
++ ABS( p1 - p0 ) < beta &&
++ ABS( q1 - q0 ) < beta ) { */
++
++ p0 = LD32(pix - stride);
++ p1 = LD32(pix - 2*stride);
++ q0 = LD32(pix);
++ q1 = LD32(pix + stride);
++
++ /* Check which of the columns should be filtered, if any. */
++ mask = PABS_DIFF_LESS_THAN(p0, q0, alpha);
++ mask |= PABS_DIFF_LESS_THAN(p1, p0, beta);
++ mask |= PABS_DIFF_LESS_THAN(q1, q0, beta);
++
++ if ( !mask )
++ continue;
++
++ mask = SET_ALL_BITS_IN_ZERO_BYTES(mask);
++
++
++ int tc = PACKW_SH(tc0[i], tc0[i]);
++ int tc0_p = tc;
++ int tc0_m = PACKW_SH(-tc0[i], -tc0[i]);
++
++ /*
++ int i_delta;
++ if( ABS( p2 - p0 ) < beta ) {
++ pix[-2*stride] = p1 + clip( (( p2 + ( ( p0 + q0 + 1 ) >> 1 ) ) >> 1) - p1, -tc0[i], tc0[i] );
++ tc++;
++ }*/
++
++ p2 = LD32(pix - 3*stride);
++ mask2 = PABS_DIFF_LESS_THAN(p2, p0, beta) & ~mask;
++
++ if ( mask2 ){
++ mask2 = SET_ALL_BITS_IN_ZERO_BYTES(mask2);
++ asm ("pavg.ub\t%[tmp], %[p0], %[q0]\n"
++ "paddh.ub\t%[tmp], %[tmp], %[p2]\n"
++ "punpckub.h\t%[tmp2], %[tmp]:t\n"
++ "punpckub.h\t%[tmp], %[tmp]:b\n"
++ "punpckub.h\t%[tmp3], %[p1]:t\n"
++ "punpckub.h\t%[tmp4], %[p1]:b\n"
++ "psub.h\t%[tmp2], %[tmp2], %[tmp3]\n"
++ "psub.h\t%[tmp], %[tmp], %[tmp4]\n"
++ "pmin.sh\t%[tmp2], %[tmp2], %[tc0_p]\n"
++ "pmin.sh\t%[tmp], %[tmp], %[tc0_p]\n"
++ "pmax.sh\t%[tmp2], %[tmp2], %[tc0_m]\n"
++ "pmax.sh\t%[tmp], %[tmp], %[tc0_m]\n"
++ "padd.h\t%[tmp2], %[tmp2], %[tmp3]\n"
++ "padd.h\t%[tmp], %[tmp], %[tmp4]\n"
++ "packsh.ub\t%[tmp], %[tmp2], %[tmp]\n"
++ "andn\t%[tmp], %[mask2]\n"
++ "and\t%[tmp2], %[q1], %[mask2]\n"
++ "or\t%[tmp], %[tmp2]\n"
++ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3),
++ [tmp4]"=&r"(tmp4)
++ : [q0]"r"(q0), [p2]"r"(p2), [p1]"r"(p1), [p0]"r"(p0), [q1]"r"(q1), [tc0_p]"r"(tc0_p),
++ [tc0_m]"r"(tc0_m), [mask2]"r"(mask2));
++ ST32(pix - 2*stride, tmp);
++ tc += 0x00010001;
++ }
++
++
++ q2 = LD32(pix + 2*stride);
++
++ /*
++ if( ABS( q2 - q0 ) < beta ) {
++ pix[ stride] = q1 + clip( (( q2 + ( ( p0 + q0 + 1 ) >> 1 ) ) >> 1) - q1, -tc0[i], tc0[i] );
++ tc++;
++ }
++ */
++ mask2 = PABS_DIFF_LESS_THAN(q2, q0, beta) & ~mask;
++
++ if ( mask2 ){
++ mask2 = SET_ALL_BITS_IN_ZERO_BYTES(mask2);
++ asm ("pavg.ub\t%[tmp], %[p0], %[q0]\n"
++ "paddh.ub\t%[tmp], %[tmp], %[q2]\n"
++ "punpckub.h\t%[tmp2], %[tmp]:t\n"
++ "punpckub.h\t%[tmp], %[tmp]:b\n"
++ "punpckub.h\t%[tmp3], %[q1]:t\n"
++ "punpckub.h\t%[tmp4], %[q1]:b\n"
++ "psub.h\t%[tmp2], %[tmp2], %[tmp3]\n"
++ "psub.h\t%[tmp], %[tmp], %[tmp4]\n"
++ "pmin.sh\t%[tmp2], %[tmp2], %[tc0_p]\n"
++ "pmin.sh\t%[tmp], %[tmp], %[tc0_p]\n"
++ "pmax.sh\t%[tmp2], %[tmp2], %[tc0_m]\n"
++ "pmax.sh\t%[tmp], %[tmp], %[tc0_m]\n"
++ "padd.h\t%[tmp2], %[tmp2], %[tmp3]\n"
++ "padd.h\t%[tmp], %[tmp], %[tmp4]\n"
++ "packsh.ub\t%[tmp], %[tmp2], %[tmp]\n"
++ "andn\t%[tmp], %[mask2]\n"
++ "and\t%[tmp2], %[q1], %[mask2]\n"
++ "or\t%[tmp], %[tmp2]\n"
++ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3),
++ [tmp4]"=&r"(tmp4)
++ : [q0]"r"(q0), [q2]"r"(q2), [q1]"r"(q1), [p0]"r"(p0), [tc0_p]"r"(tc0_p),
++ [tc0_m]"r"(tc0_m), [mask2]"r"(mask2));
++ ST32(pix + stride, tmp);
++ tc += 0x00010001;
++ }
++
++ uint32_t old_p0 = p0;
++ uint32_t old_q0 = q0;
++
++ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc );
++ pix[-stride] = clip_uint8( p0 + i_delta );
++ pix[0] = clip_uint8( q0 - i_delta ); */
++
++ asm (
++ /* Check if the two upper pixels should be filtered */
++ "lsr\t%[tmp], %[inv_mask], 16\n"
++ "breq\t0f\n"
++
++ "punpckub.h\t%[tmp], %[p1]:t\n"
++ "punpckub.h\t%[tmp2], %[q1]:t\n"
++
++ /* p1 - q1 */
++ "psub.h\t%[tmp], %[tmp], %[tmp2]\n"
++
++ "punpckub.h\t%[tmp3], %[q0]:t\n"
++ "punpckub.h\t%[tmp4], %[p0]:t\n"
++
++ /* q0 - p0 */
++ "psub.h\t%[tmp2], %[tmp3], %[tmp4]\n"
++
++ /* (q0 - p0) << 2 */
++ "plsl.h\t%[tmp2], %[tmp2], 2\n"
++
++ /* ((q0 - p0) << 2) + (p1 - q1) */
++ "padd.h\t%[tmp2], %[tmp2], %[tmp]\n"
++
++ "mov\t%[tmp], 0x00040004\n"
++ /* ((q0 - p0) << 2) + (p1 - q1) + 4*/
++ "padd.h\t%[tmp2], %[tmp2], %[tmp]\n"
++
++ /* (((q0 - p0) << 2) + (p1 - q1) + 4) >> 3*/
++ "pasr.h\t%[tmp2], %[tmp2], 3\n"
++
++ "mov\t%[tmp], 0\n"
++ "psub.h\t%[tmp], %[tmp], %[tc]\n"
++
++ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); */
++ "pmin.sh\t%[tmp2], %[tmp2], %[tc]\n"
++ "pmax.sh\t%[tmp2], %[tmp2], %[tmp]\n"
++
++
++ /* pix[-stride] = clip_uint8( p0 + i_delta ); */
++ "padd.h\t%[tmp4], %[tmp4], %[tmp2]\n"
++
++
++ /* pix[0] = clip_uint8( q0 - i_delta ); */
++ "psub.h\t%[tmp3], %[tmp3], %[tmp2]\n"
++
++ /* Check if the two lower pixels should be filtered */
++ "lsl\t%[tmp2], %[inv_mask], 16\n"
++ "breq\t1f\n"
++
++ "0:\n"
++ "punpckub.h\t%[p1], %[p1]:b\n"
++ "punpckub.h\t%[q1], %[q1]:b\n"
++
++ /* p1 - q1 */
++ "psub.h\t%[p1], %[p1], %[q1]\n"
++
++ "punpckub.h\t%[q0], %[q0]:b\n"
++ "punpckub.h\t%[p0], %[p0]:b\n"
++
++ /* q0 - p0 */
++ "psub.h\t%[tmp2], %[q0], %[p0]\n"
++
++ /* (q0 - p0) << 2 */
++ "plsl.h\t%[tmp2], %[tmp2], 2\n"
++
++ /* ((q0 - p0) << 2) + (p1 - q1) */
++ "padd.h\t%[tmp2], %[tmp2], %[p1]\n"
++
++ "mov\t%[q1], 0x00040004\n"
++ /* ((q0 - p0) << 2) + (p1 - q1) + 4*/
++ "padd.h\t%[tmp2], %[tmp2], %[q1]\n"
++
++ /* (((q0 - p0) << 2) + (p1 - q1) + 4) >> 3*/
++ "pasr.h\t%[tmp2], %[tmp2], 3\n"
++
++ /* i_delta = clip( (((q0 - p0 ) << 2) + (p1 - q1) + 4) >> 3, -tc, tc ); */
++ "pmin.sh\t%[tmp2], %[tmp2], %[tc]\n"
++ "pmax.sh\t%[tmp2], %[tmp2], %[tmp]\n"
++
++ /* pix[-stride] = clip_uint8( p0 + i_delta ); */
++ "padd.h\t%[p0], %[p0], %[tmp2]\n"
++
++ /* pix[0] = clip_uint8( q0 - i_delta ); */
++ "psub.h\t%[q0], %[q0], %[tmp2]\n"
++
++ "1:\n"
++ "packsh.ub\t%[p0], %[tmp4], %[p0]\n"
++ "packsh.ub\t%[q0], %[tmp3], %[tmp4]\n"
++
++ : [tmp]"=&r"(tmp), [tmp2]"=&r"(tmp2), [tmp3]"=&r"(tmp3),
++ [tmp4]"=&r"(tmp4), [q0]"=&r"(q0), [q1]"=&r"(q1), [p0]"=&r"(p0), [p1]"=&r"(p1)
++ : [tc]"r"(tc), [inv_mask]"r"(~mask));
++
++ ST32(pix - stride, (mask & old_p0) | (p0 & ~mask));
++ ST32(pix, (mask & old_q0) | (q0 & ~mask));
++
++ }
++ pix += 1;
++}
++
++
++
++
++#ifdef CHECK_DSP_FUNCS_AGAINST_C
++
++void dump_block8(uint8_t *block, int line_size, int h){
++ int i, j;
++
++ for ( i = 0; i < h ; i++ ){
++ av_log(NULL, AV_LOG_ERROR, "\t");
++ for ( j = 0; j < 8 ; j++ ){
++ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]);
++ }
++ av_log(NULL, AV_LOG_ERROR, "\n");
++ }
++}
++
++void dump_block4(uint8_t *block, int line_size, int h){
++ int i, j;
++
++ for ( i = 0; i < h ; i++ ){
++ av_log(NULL, AV_LOG_ERROR, "\t");
++ for ( j = 0; j < 4 ; j++ ){
++ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]);
++ }
++ av_log(NULL, AV_LOG_ERROR, "\n");
++ }
++}
++
++void dump_block(uint8_t *block, int line_size, int h, int w){
++ int i, j;
++
++ for ( i = 0; i < h ; i++ ){
++ av_log(NULL, AV_LOG_ERROR, "\t");
++ for ( j = 0; j < w ; j++ ){
++ av_log(NULL, AV_LOG_ERROR, "%d ", block[j + i*line_size]);
++ }
++ av_log(NULL, AV_LOG_ERROR, "\n");
++ }
++}
++
++void check_block8(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct,
++ int h, char *name, int max_dev){
++ int i,j;
++ for ( i = 0; i < 8 ; i++ ){
++ for ( j = 0; j < h ; j++ ){
++ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j];
++ diff = diff < 0 ? -diff : diff;
++ if ( diff > max_dev ){
++ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n",
++ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]);
++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name);
++ dump_block8(test, line_size_test, h);
++ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n");
++ dump_block8(correct, line_size_correct, h);
++ exit(1);
++ }
++ }
++ }
++}
++
++void check_block4(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct,
++ int h, char *name, int max_dev){
++ int i,j;
++ for ( i = 0; i < 4 ; i++ ){
++ for ( j = 0; j < h ; j++ ){
++ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j];
++ diff = diff < 0 ? -diff : diff;
++ if ( diff > max_dev ){
++ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n",
++ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]);
++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name);
++ dump_block8(test, line_size_test, h);
++ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n");
++ dump_block4(correct, line_size_correct, h);
++ exit(1);
++ }
++ }
++ }
++}
++
++void check_block(uint8_t *test, uint8_t *correct, int line_size_test, int line_size_correct,
++ int h, int width, char *name, int max_dev){
++ int i,j;
++ for ( i = 0; i < width ; i++ ){
++ for ( j = 0; j < h ; j++ ){
++ int diff = test[i + line_size_test*j] - correct[i + line_size_correct*j];
++ diff = diff < 0 ? -diff : diff;
++ if ( diff > max_dev ){
++ av_log(NULL, AV_LOG_ERROR, "Error pixel x=%i, y=%i differs. Is 0x%x should be 0x%x\n",
++ i, j, test[i + line_size_test*j], correct[i + j*line_size_correct]);
++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from %s is:\n", name);
++ dump_block(test, line_size_test, h, width);
++ av_log(NULL, AV_LOG_ERROR, "But should be equal to:\n");
++ dump_block(correct, line_size_correct, h, width);
++ exit(1);
++ }
++ }
++ }
++}
++
++void dump_dct_block(DCTELEM *block){
++ int i, j;
++
++ for ( i = 0; i < 8 ; i++ ){
++ av_log(NULL, AV_LOG_ERROR, "\t");
++ for ( j = 0; j < 8 ; j++ ){
++ av_log(NULL, AV_LOG_ERROR, "0x%x ", block[j + i*8]);
++ }
++ av_log(NULL, AV_LOG_ERROR, "\n");
++ }
++}
++
++void test_idct_avr32(DCTELEM *block){
++ DCTELEM testBlock[64];
++ int i, j;
++
++ /* Copy transposed block to testBlock */
++ for ( i = 0; i < 8 ; i++ ){
++ for ( j = 0; j < 8 ; j++ ){
++ testBlock[i + 8*j] = block[j + i*8];
++ }
++ }
++
++ idct_avr32(block);
++ simple_idct(&testBlock);
++
++ for ( i = 0; i < 64 ; i++ ){
++ if ( block[i] != testBlock[i] ){
++ av_log(NULL, AV_LOG_ERROR, "Error resulting block from idct is:\n");
++ dump_dct_block(block);
++ av_log(NULL, AV_LOG_ERROR, "But should be equal to the transposed of:\n");
++ dump_dct_block(testBlock);
++ exit(1);
++ }
++ }
++}
++
++void test_idct_put_avr32(uint8_t *dest, int line_size, DCTELEM *block){
++ uint8_t testBlock[64];
++ DCTELEM blockCopy[64];
++ int i, j;
++
++ /* Copy transposed block to blockCopy */
++ for ( i = 0; i < 8 ; i++ ){
++ for ( j = 0; j < 8 ; j++ ){
++ blockCopy[i + 8*j] = block[j + i*8];
++ }
++ }
++
++ idct_put_avr32(dest, line_size, block);
++ simple_idct_put(&testBlock, 8, blockCopy);
++
++ check_block8(dest, testBlock, line_size, 8, 8, "idct_put", 1);
++}
++
++
++void test_idct_add_avr32(uint8_t *dest, int line_size, DCTELEM *block){
++ uint8_t testBlock[64];
++ DCTELEM blockCopy[64];
++ int i, j;
++
++ /* Copy dest to testBlock */
++ for ( i = 0; i < 8 ; i++ ){
++ for ( j = 0; j < 8 ; j++ ){
++ testBlock[i + 8*j] = dest[i + j*line_size];
++ }
++ }
++
++ /* Copy transposed block to blockCopy */
++ for ( i = 0; i < 8 ; i++ ){
++ for ( j = 0; j < 8 ; j++ ){
++ blockCopy[i + 8*j] = block[j + i*8];
++ }
++ }
++
++ idct_add_avr32(dest, line_size, block);
++ simple_idct_add(&testBlock, 8, blockCopy);
++
++ check_block8(dest, testBlock, line_size, 8, 8, "idct_add", 1);
++}
++
++void test_h264_idct_add_avr32(uint8_t *dest, DCTELEM *block, int stride){
++ uint8_t testBlock[16];
++ DCTELEM blockCopy[16];
++ int i, j;
++
++ /* Copy dest to testBlock */
++ for ( i = 0; i < 4 ; i++ ){
++ for ( j = 0; j < 4 ; j++ ){
++ testBlock[i + 4*j] = dest[i + j*stride];
++ }
++ }
++
++ /* Copy transposed block to blockCopy */
++ for ( i = 0; i < 16 ; i++ ){
++ blockCopy[i] = block[i];
++ }
++
++ ff_h264_idct_add_c(dest, block, stride);
++
++ h264_idct_add_avr32(testBlock, blockCopy, 4);
++
++ check_block(dest, testBlock, stride, 4, 4, 4, "h264_idct_add", 0);
++}
++
++void test_h264_idct8_add_avr32(uint8_t *dest, DCTELEM *block, int stride){
++ uint8_t testBlock[8*8];
++ DCTELEM blockCopy[8*8];
++ int i, j;
++
++ /* Copy dest to testBlock */
++ for ( i = 0; i < 8 ; i++ ){
++ for ( j = 0; j < 8 ; j++ ){
++ testBlock[i + 8*j] = dest[i + j*stride];
++ }
++ }
++
++ /* Copy source block to blockCopy */
++ for ( i = 0; i < 8*8 ; i++ ){
++ blockCopy[i] = block[i];
++ }
++
++ ff_h264_idct8_add_c(dest, block, stride);
++ h264_idct8_add_avr32(testBlock, blockCopy, 8);
++
++ check_block(dest, testBlock, stride, 8, 8, 8, "h264_idct8_add", 0);
++}
++
++void test_put_pixels_funcs8(op_pixels_func test, op_pixels_func correct, uint8_t *block,
++ const uint8_t *pixels, int line_size, int h, char *name, int in_h_size, int in_v_size){
++ uint8_t *testBlock, *testBlock2;
++ int i, j;
++ int input_v_size = h + in_v_size;
++ int input_h_size = 8 + in_h_size;
++
++ testBlock = alloca(input_h_size*input_v_size);
++ testBlock2 = alloca(input_h_size*input_v_size);
++
++ for ( i = 0; i < input_h_size ; i++ ){
++ for ( j = 0; j < input_v_size ; j++ ){
++ testBlock[i + input_h_size*j] = pixels[i + j*line_size];
++ }
++ }
++
++ test(block, pixels, line_size, h);
++ correct(testBlock2, testBlock, input_h_size, h);
++
++ check_block8(block, testBlock2, line_size, input_h_size, h, name, 0);
++
++}
++
++void test_h264_chroma_mc_funcs(h264_chroma_mc_func test, h264_chroma_mc_func correct, uint8_t *dst,
++ uint8_t *src, int stride, int h, int w, int x, int y, char *name){
++ uint8_t *testBlock, *testBlock2;
++ int i, j;
++ int input_v_size = h + 1;
++ int input_h_size = ((w + 1) + 3) & ~3;
++
++ testBlock = alloca(input_h_size*input_v_size);
++ testBlock2 = alloca(input_h_size*input_v_size);
++
++ for ( i = 0; i < w + 1 ; i++ ){
++ for ( j = 0; j < h + 1 ; j++ ){
++ testBlock[i + input_h_size*j] = src[i + j*stride];
++ }
++ }
++
++ for ( i = 0; i < w ; i++ ){
++ for ( j = 0; j < h ; j++ ){
++ testBlock2[i + input_h_size*j] = dst[i + j*stride];
++ }
++ }
++
++ test(dst, src, stride, h, x, y);
++ correct(testBlock2, testBlock, input_h_size, h, x, y);
++
++ check_block(dst, testBlock2, stride, input_h_size, h, w, name, 0);
++
++}
++
++void test_qpel_mc_funcs(qpel_mc_func test, qpel_mc_func correct, uint8_t *dst,
++ uint8_t *src, int stride, int size, char *name){
++ uint8_t *testBlock, *testBlock2;
++ int i, j;
++ int test_stride = size + 8;
++
++ testBlock = alloca(test_stride*(size+8)) + 4 + test_stride*4;
++ testBlock2 = alloca(test_stride*size);
++
++ for ( i = -4; i < size+4 ; i++ ){
++ for ( j = -4; j < size+4 ; j++ ){
++ testBlock[i + test_stride*j] = src[i + j*stride];
++ }
++ }
++
++ for ( i = 0; i < size ; i++ ){
++ for ( j = 0; j < size ; j++ ){
++ testBlock2[i + test_stride*j] = dst[i + j*stride];
++ }
++ }
++
++ correct(dst, src, stride);
++ test(testBlock2, testBlock, test_stride);
++
++ check_block(testBlock2, dst, test_stride, stride, size, size, name, 0);
++
++}
++
++
++#define test_pixels_funcs(PFX, NUM ) \
++void test_ ## PFX ## _pixels ## NUM ## _avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \
++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _avr32, PFX ## _pixels ## NUM ## _c, \
++ block, pixels, line_size, h, "test_" #PFX "_pixels", 0, 0); } \
++void test_ ## PFX ## _pixels ## NUM ## _h_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \
++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _h_avr32, PFX ## _pixels ## NUM ## _x2_c, \
++ block, pixels, line_size, h, "test_" #PFX "_pixels_h", 1, 0); } \
++void test_ ## PFX ## _pixels ## NUM ## _v_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \
++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _v_avr32, PFX ## _pixels ## NUM ## _y2_c, \
++ block, pixels, line_size, h, "test_" #PFX "_pixels_v", 0, 1); } \
++void test_ ## PFX ## _pixels ## NUM ## _hv_avr32( uint8_t *block, const uint8_t *pixels, int line_size, int h){ \
++ test_put_pixels_funcs8(PFX ## _pixels ## NUM ## _hv_avr32, PFX ## _pixels ## NUM ## _xy2_c, \
++ block, pixels, line_size, h, "test_" #PFX "_pixels_hv", 1, 1); }
++
++test_pixels_funcs(put, 8);
++test_pixels_funcs(put_no_rnd, 8);
++test_pixels_funcs(put, 16);
++test_pixels_funcs(put_no_rnd, 16);
++
++test_pixels_funcs(avg, 8);
++test_pixels_funcs(avg_no_rnd, 8);
++test_pixels_funcs(avg, 16);
++test_pixels_funcs(avg_no_rnd, 16);
++
++#define test_h264_chroma_mc_funcs(PFX, NUM ) \
++void test_ ## PFX ## _h264_chroma_mc ## NUM ## _pico( uint8_t *dst, uint8_t *src, int stride, int h, int x, int y){ \
++ test_h264_chroma_mc_funcs(PFX ## _h264_chroma_mc ## NUM ## _pico, PFX ## _h264_chroma_mc ## NUM ## _c, \
++ dst, src, stride, h, NUM, x, y, "test_" #PFX "_h264_chroma_mc" #NUM "_pico"); } \
++
++test_h264_chroma_mc_funcs(put, 2);
++test_h264_chroma_mc_funcs(put, 4);
++test_h264_chroma_mc_funcs(put, 8);
++test_h264_chroma_mc_funcs(avg, 2);
++test_h264_chroma_mc_funcs(avg, 4);
++test_h264_chroma_mc_funcs(avg, 8);
++
++#define test_qpel_mc_funcs_type(PFX, NUM, TYPE ) \
++void test_ ## PFX ## NUM ## _ ## TYPE ## _pico( uint8_t *dst, uint8_t *src, int stride){ \
++ test_qpel_mc_funcs(PFX ## NUM ## _ ## TYPE ## _pico, PFX ## NUM ## _ ## TYPE ## _c, \
++ dst, src, stride, NUM, "test_" #PFX #NUM "_" #TYPE "_pico"); }
++
++#define test_qpel_mc_funcs(PFX, NUM) \
++ test_qpel_mc_funcs_type(PFX, NUM, mc00);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc10);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc20);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc30);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc01);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc11);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc21);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc31);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc02);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc12);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc22);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc32);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc03);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc13);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc23);\
++ test_qpel_mc_funcs_type(PFX, NUM, mc33)
++
++test_qpel_mc_funcs(put_h264_qpel, 4);
++test_qpel_mc_funcs(put_h264_qpel, 8);
++test_qpel_mc_funcs(put_h264_qpel, 16);
++test_qpel_mc_funcs(avg_h264_qpel, 4);
++test_qpel_mc_funcs(avg_h264_qpel, 8);
++test_qpel_mc_funcs(avg_h264_qpel, 16);
++
++
++#define dspfunc(PFX, IDX, NUM) \
++ c->PFX ## _pixels_tab[IDX][ 0] = DSP_FUNC_NAME( PFX ## NUM ## _mc00_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 1] = DSP_FUNC_NAME( PFX ## NUM ## _mc10_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 2] = DSP_FUNC_NAME( PFX ## NUM ## _mc20_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 3] = DSP_FUNC_NAME( PFX ## NUM ## _mc30_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 4] = DSP_FUNC_NAME( PFX ## NUM ## _mc01_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 5] = DSP_FUNC_NAME( PFX ## NUM ## _mc11_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 6] = DSP_FUNC_NAME( PFX ## NUM ## _mc21_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 7] = DSP_FUNC_NAME( PFX ## NUM ## _mc31_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 8] = DSP_FUNC_NAME( PFX ## NUM ## _mc02_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 9] = DSP_FUNC_NAME( PFX ## NUM ## _mc12_pico ); \
++ c->PFX ## _pixels_tab[IDX][10] = DSP_FUNC_NAME( PFX ## NUM ## _mc22_pico ); \
++ c->PFX ## _pixels_tab[IDX][11] = DSP_FUNC_NAME( PFX ## NUM ## _mc32_pico ); \
++ c->PFX ## _pixels_tab[IDX][12] = DSP_FUNC_NAME( PFX ## NUM ## _mc03_pico ); \
++ c->PFX ## _pixels_tab[IDX][13] = DSP_FUNC_NAME( PFX ## NUM ## _mc13_pico ); \
++ c->PFX ## _pixels_tab[IDX][14] = DSP_FUNC_NAME( PFX ## NUM ## _mc23_pico ); \
++ c->PFX ## _pixels_tab[IDX][15] = DSP_FUNC_NAME( PFX ## NUM ## _mc33_pico )
++
++#endif
++
++void dsputil_init_avr32(DSPContext* c, AVCodecContext *avctx)
++{
++
++ /* H264 */
++
++ if ( 0 /*avr32_use_pico*/ ){
++ c->put_h264_chroma_pixels_tab[0]= DSP_FUNC_NAME(put_h264_chroma_mc8_pico);
++ c->put_h264_chroma_pixels_tab[1]= DSP_FUNC_NAME(put_h264_chroma_mc4_pico);
++ c->put_h264_chroma_pixels_tab[2]= DSP_FUNC_NAME(put_h264_chroma_mc2_pico);
++
++ c->avg_h264_chroma_pixels_tab[0]= DSP_FUNC_NAME(avg_h264_chroma_mc8_pico);
++ c->avg_h264_chroma_pixels_tab[1]= DSP_FUNC_NAME(avg_h264_chroma_mc4_pico);
++ c->avg_h264_chroma_pixels_tab[2]= DSP_FUNC_NAME(avg_h264_chroma_mc2_pico);
++ }
++
++#define dspfunc(PFX, IDX, NUM) \
++ c->PFX ## _pixels_tab[IDX][ 0] = DSP_FUNC_NAME( PFX ## NUM ## _mc00_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 1] = DSP_FUNC_NAME( PFX ## NUM ## _mc10_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 2] = DSP_FUNC_NAME( PFX ## NUM ## _mc20_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 3] = DSP_FUNC_NAME( PFX ## NUM ## _mc30_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 4] = DSP_FUNC_NAME( PFX ## NUM ## _mc01_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 5] = DSP_FUNC_NAME( PFX ## NUM ## _mc11_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 6] = DSP_FUNC_NAME( PFX ## NUM ## _mc21_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 7] = DSP_FUNC_NAME( PFX ## NUM ## _mc31_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 8] = DSP_FUNC_NAME( PFX ## NUM ## _mc02_pico ); \
++ c->PFX ## _pixels_tab[IDX][ 9] = DSP_FUNC_NAME( PFX ## NUM ## _mc12_pico ); \
++ c->PFX ## _pixels_tab[IDX][10] = DSP_FUNC_NAME( PFX ## NUM ## _mc22_pico ); \
++ c->PFX ## _pixels_tab[IDX][11] = DSP_FUNC_NAME( PFX ## NUM ## _mc32_pico ); \
++ c->PFX ## _pixels_tab[IDX][12] = DSP_FUNC_NAME( PFX ## NUM ## _mc03_pico ); \
++ c->PFX ## _pixels_tab[IDX][13] = DSP_FUNC_NAME( PFX ## NUM ## _mc13_pico ); \
++ c->PFX ## _pixels_tab[IDX][14] = DSP_FUNC_NAME( PFX ## NUM ## _mc23_pico ); \
++ c->PFX ## _pixels_tab[IDX][15] = DSP_FUNC_NAME( PFX ## NUM ## _mc33_pico )
++
++ if ( avr32_use_pico ){
++ dspfunc(put_h264_qpel, 0, 16);
++ dspfunc(put_h264_qpel, 1, 8);
++ dspfunc(put_h264_qpel, 2, 4);
++ dspfunc(avg_h264_qpel, 0, 16);
++ dspfunc(avg_h264_qpel, 1, 8);
++ dspfunc(avg_h264_qpel, 2, 4);
++ }
++
++ c->idct_put= DSP_FUNC_NAME(idct_put_avr32);
++ c->idct_add= DSP_FUNC_NAME(idct_add_avr32);
++ c->idct = DSP_FUNC_NAME(idct_avr32);
++ c->h264_idct_add = DSP_FUNC_NAME(h264_idct_add_avr32);
++ c->h264_idct8_add = DSP_FUNC_NAME(h264_idct8_add_avr32);
++
++ /*c->h264_v_loop_filter_luma= h264_v_loop_filter_luma_avr32;*/
++
++ c->idct_permutation_type= FF_TRANSPOSE_IDCT_PERM;
++
++ c->fdct = fdct_avr32;
++
++ c->clear_blocks = clear_blocks_avr32;
++
++#undef dspfunc
++#define dspfunc(PFX, IDX, NUM) \
++ c->PFX ## _pixels_tab[IDX][0] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _avr32 ); \
++ c->PFX ## _pixels_tab[IDX][1] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _h_avr32); \
++ c->PFX ## _pixels_tab[IDX][2] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _v_avr32); \
++ c->PFX ## _pixels_tab[IDX][3] = DSP_FUNC_NAME( PFX ## _pixels ## NUM ## _hv_avr32)
++
++ dspfunc(put, 0, 16);
++ dspfunc(put_no_rnd, 0, 16);
++ dspfunc(put, 1, 8);
++ dspfunc(put_no_rnd, 1, 8);
++
++ dspfunc(avg, 1, 8);
++ dspfunc(avg_no_rnd, 1, 8);
++ dspfunc(avg, 0, 16);
++ dspfunc(avg_no_rnd, 0, 16);
++#undef dspfunc
++
++}
++
++
++
++#if 0
++int main(int argc, char *argv[]){
++
++
++}
++#endif
++
+diff --git a/libavcodec/avr32/fdct.S b/libavcodec/avr32/fdct.S
+new file mode 100644
+index 0000000..be45b86
+--- /dev/null
++++ b/libavcodec/avr32/fdct.S
+@@ -0,0 +1,541 @@
++/*
++ * Copyright (c) 2007 Atmel Corporation. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ *
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *
++ * 2. Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following
++ * disclaimer in the documentation and/or other materials provided
++ * with the distribution.
++ *
++ * 3. The name of ATMEL may not be used to endorse or promote products
++ * derived from this software without specific prior written
++ * permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
++ * DAMAGE.
++ */
++
++//**********************************************************
++//* 2-D fDCT, Based on: *
++//* C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical *
++//* Fast 1-D DCT Algorithms with 11 Multiplications", *
++//* Proc. Int'l. Conf. on Acoustics, Speech, and Signal *
++//* Processing 1989 (ICASSP '89), pp. 988-991. *
++//* *
++//* Fixed point implementation optimized for the AVR-II *
++//* instruction set. If a table is used for the *
++//* coeffisients we can load two and two of them from *
++//* This will give a reduction of
++//* *
++//* *
++//**********************************************************
++
++
++/* This routine is a slow-but-accurate integer implementation of the
++ * forward DCT (Discrete Cosine Transform). Taken from the IJG software
++ *
++ * A 2-D DCT can be done by 1-D DCT on each row followed by 1-D DCT
++ * on each column. Direct algorithms are also available, but they are
++ * much more complex and seem not to be any faster when reduced to code.
++ *
++ * This implementation is based on an algorithm described in
++ * C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT
++ * Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics,
++ * Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
++ * The primary algorithm described there uses 11 multiplies and 29 adds.
++ * We use their alternate method with 12 multiplies and 32 adds.
++ * The advantage of this method is that no data path contains more than one
++ * multiplication; this allows a very simple and accurate implementation in
++ * scaled fixed-point arithmetic, with a minimal number of shifts.
++ *
++ * The poop on this scaling stuff is as follows:
++ *
++ * Each 1-D DCT step produces outputs which are a factor of sqrt(N)
++ * larger than the true DCT outputs. The final outputs are therefore
++ * a factor of N larger than desired; since N=8 this can be cured by
++ * a simple right shift at the end of the algorithm. The advantage of
++ * this arrangement is that we save two multiplications per 1-D DCT,
++ * because the y0 and y4 outputs need not be divided by sqrt(N).
++ * In the IJG code, this factor of 8 is removed by the quantization step
++ * (in jcdctmgr.c), here it is removed.
++ *
++ * We have to do addition and subtraction of the integer inputs, which
++ * is no problem, and multiplication by fractional constants, which is
++ * a problem to do in integer arithmetic. We multiply all the constants
++ * by CONST_SCALE and convert them to integer constants (thus retaining
++ * CONST_BITS bits of precision in the constants). After doing a
++ * multiplication we have to divide the product by CONST_SCALE, with proper
++ * rounding, to produce the correct output. This division can be done
++ * cheaply as a right shift of CONST_BITS bits. We postpone shifting
++ * as long as possible so that partial sums can be added together with
++ * full fractional precision.
++ *
++ * The outputs of the first pass are scaled up by PASS1_BITS bits so that
++ * they are represented to better-than-integral precision. These outputs
++ * require 8 + PASS1_BITS + 3 bits; this fits in a 16-bit word
++ * with the recommended scaling. (For 12-bit sample data, the intermediate
++ * array is INT32 anyway.)
++ *
++ * To avoid overflow of the 32-bit intermediate results in pass 2, we must
++ * have 8 + CONST_BITS + PASS1_BITS <= 26. Error analysis
++ * shows that the values given below are the most effective.
++ *
++ * We can gain a little more speed, with a further compromise in accuracy,
++ * by omitting the addition in a descaling shift. This yields an incorrectly
++ * rounded result half the time...
++ */
++
++ .global fdct_avr32
++
++
++
++#define CONST_BITS 13
++#define PASS1_BITS 2
++
++#define FIX_0_298631336 2446 /* FIX(0.298631336) */
++#define FIX_0_390180644 3196 /* FIX(0.390180644) */
++#define FIX_0_541196100 4433 /* FIX(0.541196100) */
++#define FIX_0_765366865 6270 /* FIX(0.765366865) */
++#define FIX_0_899976223 7373 /* FIX(0.899976223) */
++#define FIX_1_175875602 9633 /* FIX(1.175875602) */
++#define FIX_1_501321110 12299 /* FIX(1.501321110) */
++#define FIX_1_847759065 15137 /* FIX(1.847759065) */
++#define FIX_1_961570560 16069 /* FIX(1.961570560) */
++#define FIX_2_053119869 16819 /* FIX(2.053119869) */
++#define FIX_2_562915447 20995 /* FIX(2.562915447) */
++#define FIX_3_072711026 25172 /* FIX(3.072711026) */
++
++
++/*
++ * Perform an integer forward DCT on one block of samples.
++ */
++
++//void
++//fdct_int32(short *const block)
++//{
++// int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
++// int tmp10, tmp11, tmp12, tmp13;
++// int z1, z2, z3, z4, z5;
++// short *blkptr;
++// int *dataptr;
++// int data[64];
++// int i;
++//
++// /* Pass 1: process rows. */
++// /* Note results are scaled up by sqrt(8) compared to a true DCT; */
++// /* furthermore, we scale the results by 2**PASS1_BITS. */
++//
++// dataptr = data;
++// blkptr = block;
++
++ .text
++fdct_avr32:
++ pushm r0-r3, r4-r7, lr
++#define loop_ctr r0
++#define blkptr r12
++#define x0 r1
++#define x1 r2
++#define x2 r3
++#define x3 r4
++#define x4 r5
++#define x5 r6
++#define x6 r7
++#define x7 r8
++#define tmp0 r5
++#define tmp7 r2
++#define tmp1 r3
++#define tmp6 r4
++#define tmp2 r9
++#define tmp5 r8
++#define tmp3 r7
++#define tmp4 r6
++
++
++ mov loop_ctr, 8
++// for (i = 0; i < 8; i++) {
++ROW_LOOP:
++
++ ldm blkptr, r1, r2, r3, r4
++
++// tmp2 = blkptr[2] + blkptr[5];
++// tmp3 = blkptr[3] + blkptr[4];
++ paddx.h r5, r3, r2
++// tmp5 = blkptr[2] - blkptr[5];
++// tmp4 = blkptr[3] - blkptr[4];
++ psubx.h r6, r3, r2
++// tmp0 = blkptr[0] + blkptr[7];
++// tmp1 = blkptr[1] + blkptr[6];
++ paddx.h r2, r4, r1
++// tmp7 = blkptr[0] - blkptr[7];
++// tmp6 = blkptr[1] - blkptr[6];
++ psubx.h r3, r4, r1
++
++// /* Even part per LL&M figure 1 --- note that published figure is faulty;
++// * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
++// */
++
++#define tmp10 r1
++#define tmp13 r5
++#define tmp11 r7
++#define tmp12 r3
++#define z1 r9
++
++// tmp10 = tmp0 + tmp3;
++// tmp13 = tmp0 - tmp3;
++ paddsub.h r1, r2:t, r5:b
++// tmp11 = tmp1 + tmp2;
++// tmp12 = tmp1 - tmp2;
++ paddsub.h r4, r2:b, r5:t
++
++
++// dataptr[0] = (tmp10 + tmp11) << PASS1_BITS;
++// dataptr[4] = (tmp10 - tmp11) << PASS1_BITS;
++ paddsub.h r7, r1:t, r4:t
++ ld.w r10, pc[const_table - .]
++ plsl.h r7, r7, PASS1_BITS
++
++// z1 = (tmp12 + tmp13) * FIX_0_541196100;
++ addhh.w r8, r4:b, r1:b
++ mulhh.w r8, r8:b, r10:t
++
++// dataptr[2] =
++// DESCALE(z1 + tmp13 * FIX_0_765366865, CONST_BITS - PASS1_BITS);
++// dataptr[6] =
++// DESCALE(z1 + tmp12 * (-FIX_1_847759065), CONST_BITS - PASS1_BITS);
++ mulhh.w r9, r1:b, r10:b
++ ld.w r10, pc[const_table - . + 4]
++ add r1, r8, r9
++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31
++
++ mulhh.w r9, r4:b, r10:t
++ add r4, r8, r9
++ satrnds r4 >> (CONST_BITS - PASS1_BITS), 31
++
++
++// /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
++// * cK represents cos(K*pi/16).
++// * i0..i3 in the paper are tmp4..tmp7 here.
++// */
++
++#define z2 r5
++#define z3 r6
++#define z4 r7
++#define z5 r8
++
++// z4 = tmp5 + tmp7;
++// z3 = tmp4 + tmp6;
++ padd.h r2, r6, r3
++// z2 = tmp5 + tmp6;
++// z1 = tmp4 + tmp7;
++ paddx.h r5, r6, r3
++
++ lddpc r9, pc[const_table - . + 8]
++// z5 = (z3 + z4) * FIX_1_175875602; /* sqrt(2) * c3 */
++ addhh.w r8, r2:t, r2:b
++ mulhh.w r8, r8:b, r10:b
++ lddpc r10, pc[const_table - . + 12]
++
++
++// tmp4 *= FIX_0_298631336; /* sqrt(2) * (-c1+c3+c5-c7) */
++ mulhh.w r11, r6:b, r9:t
++
++// tmp5 *= FIX_2_053119869; /* sqrt(2) * ( c1+c3-c5+c7) */
++ mulhh.w r6, r6:t, r9:b
++
++// tmp6 *= FIX_3_072711026; /* sqrt(2) * ( c1+c3+c5-c7) */
++ lddpc r9, pc[const_table - . + 20]
++ mulhh.w lr, r3:b, r10:t
++
++// tmp7 *= FIX_1_501321110; /* sqrt(2) * ( c1+c3-c5-c7) */
++ mulhh.w r3, r3:t, r10:b
++
++// z3 *= -FIX_1_961570560; /* sqrt(2) * (-c3-c5) */
++ mulhh.w r10, r2:b, r9:t
++
++// z4 *= -FIX_0_390180644; /* sqrt(2) * (c5-c3) */
++ mulhh.w r2, r2:t, r9:b
++ lddpc r9, pc[const_table - . + 16]
++// z3 += z5;
++// z4 += z5;
++ add r10, r8
++ add r2, r8
++
++// z1 *= -FIX_0_899976223; /* sqrt(2) * (c7-c3) */
++ mulhh.w r8, r5:b, r9:t
++
++// z2 *= -FIX_2_562915447; /* sqrt(2) * (-c1-c3) */
++ mulhh.w r5, r5:t, r9:b
++
++// dataptr[7] = DESCALE(tmp4 + z1 + z3, CONST_BITS - PASS1_BITS);
++ add r11, r8
++ add r11, r10
++ satrnds r11 >> (CONST_BITS - PASS1_BITS), 31
++
++// dataptr[5] = DESCALE(tmp5 + z2 + z4, CONST_BITS - PASS1_BITS);
++ add r6, r5
++
++ sthh.w blkptr[6*2], r4:b, r11:b
++ add r6, r2
++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31
++
++// dataptr[3] = DESCALE(tmp6 + z2 + z3, CONST_BITS - PASS1_BITS);
++ add lr, r5
++ sthh.w blkptr[4*2], r7:b, r6:b
++ add lr, r10
++ satrnds lr >> (CONST_BITS - PASS1_BITS), 31
++
++// dataptr[1] = DESCALE(tmp7 + z1 + z4, CONST_BITS - PASS1_BITS);
++ add r3, r8
++ sthh.w blkptr[2*2], r1:b, lr:b
++ add r3, r2
++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31
++
++
++
++// dataptr += 8; /* advance pointer to next row */
++// blkptr += 8;
++ sthh.w blkptr[0], r7:t, r3:b
++ sub blkptr, -16
++ sub loop_ctr, 1
++ brne ROW_LOOP
++
++// }
++
++ /* Pass 2: process columns.
++ * We remove the PASS1_BITS scaling, but leave the results scaled up
++ * by an overall factor of 8.
++ */
++
++// dataptr = data;
++ sub blkptr, 128
++
++ mov loop_ctr, 4
++// for (i = 0; i < 8; i++) {
++COLOUMN_LOOP:
++ ld.w r1, blkptr[0]
++ ld.w r2, blkptr[1*8*2]
++ ld.w r3, blkptr[2*8*2]
++ ld.w r4, blkptr[3*8*2]
++ ld.w r5, blkptr[4*8*2]
++ ld.w r6, blkptr[5*8*2]
++ ld.w r7, blkptr[6*8*2]
++ ld.w r8, blkptr[7*8*2]
++
++// tmp0 = blkptr[0] + blkptr[7*8];
++ padds.sh r9, r1, r8
++// tmp7 = blkptr[0] - blkptr[7*8];
++ psubs.sh r1, r1, r8
++// tmp1 = blkptr[1*8] + blkptr[6*8];
++ padds.sh r8, r2, r7
++// tmp6 = blkptr[1*8] - blkptr[6*8];
++ psubs.sh r2, r2, r7
++// tmp2 = blkptr[2*8] + blkptr[5*8];
++ padds.sh r7, r3, r6
++// tmp5 = blkptr[2*8] - blkptr[5*8];
++ psubs.sh r3, r3, r6
++// tmp3 = blkptr[3*8] + blkptr[4*8];
++ padds.sh r6, r4, r5
++// tmp4 = blkptr[3*8] - blkptr[4*8];
++ psubs.sh r4, r4, r5
++
++// /* even part per ll&m figure 1 --- note that published figure is faulty;
++// * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
++// */
++//
++// tmp10 = tmp0 + tmp3;
++ padds.sh r5, r9, r6
++// tmp13 = tmp0 - tmp3;
++ psubs.sh r9, r9, r6
++// tmp11 = tmp1 + tmp2;
++ padds.sh r6, r8, r7
++// tmp12 = tmp1 - tmp2;
++ psubs.sh r8, r8, r7
++
++// dataptr[0] = DESCALE(tmp10 + tmp11, PASS1_BITS);
++// dataptr[32] = DESCALE(tmp10 - tmp11, PASS1_BITS);
++//Might get an overflow here
++ padds.sh r7, r5, r6
++ psubs.sh r5, r5, r6
++
++ //Rounding
++ mov lr, (1 << (PASS1_BITS + 2))
++ orh lr, hi(1 << (16 + PASS1_BITS + 2))
++ padds.sh r7, r7, lr
++ padds.sh r5, r5, lr
++
++ pasr.h r7, r7, PASS1_BITS + 3
++ pasr.h r5, r5, PASS1_BITS + 3
++ st.w r12[0], r7
++ st.w r12[4*8*2], r5
++
++ lddpc r10, const_table2
++
++
++// z1 = (tmp12 + tmp13) * FIX_0_541196100;
++ padds.sh r5, r8, r9
++ mulhh.w r6, r5:t, r10:t
++ mulhh.w r7, r5:b, r10:t
++
++// dataptr[16] =
++// DESCALE(z1 + tmp13 * FIX_0_765366865, CONST_BITS + PASS1_BITS);
++ lddpc r11, const_table2 + 4
++ mulhh.w lr, r9:t, r10:b
++ mulhh.w r9, r9:b, r10:b
++ add lr, r6
++ add r9, r7
++ satrnds lr >> (CONST_BITS + PASS1_BITS + 3), 31
++ satrnds r9 >> (CONST_BITS + PASS1_BITS + 3), 31
++ sthh.w r12[2*8*2], lr:b, r9:b
++
++// dataptr[48] =
++// DESCALE(z1 + tmp12 * (-FIX_1_847759065), CONST_BITS + PASS1_BITS);
++ mulhh.w lr, r8:t, r11:t
++ mulhh.w r8, r8:b, r11:t
++ add lr, r6
++ add r8, r7
++ satrnds lr >> (CONST_BITS + PASS1_BITS + 3), 31
++ satrnds r8 >> (CONST_BITS + PASS1_BITS + 3), 31
++ sthh.w r12[6*8*2], lr:b, r8:b
++
++// /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
++// * cK represents cos(K*pi/16).
++// * i0..i3 in the paper are tmp4..tmp7 here.
++// */
++//
++// z2 = tmp5 + tmp6;
++// z3 = tmp4 + tmp6;
++// z4 = tmp5 + tmp7;
++ padds.sh r5, r3, r2
++ padds.sh r6, r4, r2
++ padds.sh r7, r3, r1
++
++// z5 = (z3 + z4) * FIX_1_175875602; /* sqrt(2) * c3 */
++ padds.sh r8, r6, r7
++ mulhh.w r9, r8:t, r11:b
++ mulhh.w r8, r8:b, r11:b
++
++// z3 *= -FIX_1_961570560; /* sqrt(2) * (-c3-c5) */
++// z3 += z5;
++ lddpc r11, const_table2 + 8
++ mulhh.w r10, r6:t, r11:t
++ mulhh.w r6, r6:b, r11:t
++ add r10, r9
++ add r6, r8
++
++// z4 *= -FIX_0_390180644; /* sqrt(2) * (c5-c3) */
++// z4 += z5;
++ mulhh.w lr, r7:t, r11:b
++ mulhh.w r7, r7:b, r11:b
++ lddpc r11, const_table2 + 12
++ st.w --sp,r0
++ add lr, r9
++ add r7, r8
++
++// tmp6 *= FIX_3_072711026; /* sqrt(2) * ( c1+c3+c5-c7) */
++ mulhh.w r0, r2:t, r11:t
++ machh.w r0, r5:t, r11:b
++ mulhh.w r2, r2:b, r11:t
++ machh.w r2, r5:b, r11:b
++
++// z2 *= -FIX_2_562915447; /* sqrt(2) * (-c1-c3) */
++// dataptr[24] = DESCALE(tmp6 + z2 + z3, CONST_BITS + PASS1_BITS);
++ add r0, r10
++ lddpc r11, const_table2 + 16
++ add r2, r6
++ satrnds r0 >> (CONST_BITS + PASS1_BITS + 3), 31
++ satrnds r2 >> (CONST_BITS + PASS1_BITS + 3), 31
++ sthh.w r12[3*8*2], r0:b, r2:b
++// tmp5 *= FIX_2_053119869; /* sqrt(2) * ( c1+c3-c5+c7) */
++ mulhh.w r0, r3:t, r11:t
++ machh.w r0, r5:t, r11:b
++ mulhh.w r2, r3:b, r11:t
++ machh.w r2, r5:b, r11:b
++ add r0, lr
++ lddpc r11, const_table2 + 20
++ add r2, r7
++
++// dataptr[40] = DESCALE(tmp5 + z2 + z4, CONST_BITS + PASS1_BITS);
++ satrnds r0 >> (CONST_BITS + PASS1_BITS + 3), 31
++ satrnds r2 >> (CONST_BITS + PASS1_BITS + 3), 31
++ sthh.w r12[5*8*2], r0:b, r2:b
++
++
++// z1 = tmp4 + tmp7;
++ padds.sh r2, r4, r1
++
++// tmp4 *= FIX_0_298631336; /* sqrt(2) * (-c1+c3+c5-c7) */
++ mulhh.w r3, r4:t, r11:t
++ machh.w r3, r2:t, r11:b
++ mulhh.w r4, r4:b, r11:t
++ machh.w r4, r2:b, r11:b
++ add r3, r10
++ lddpc r11, const_table2 + 24
++ add r4, r6
++
++// z1 *= -FIX_0_899976223; /* sqrt(2) * (c7-c3) */
++// dataptr[56] = DESCALE(tmp4 + z1 + z3, CONST_BITS + PASS1_BITS);
++ satrnds r3 >> (CONST_BITS + PASS1_BITS + 3), 31
++ satrnds r4 >> (CONST_BITS + PASS1_BITS + 3), 31
++ sthh.w r12[7*8*2], r3:b, r4:b
++
++
++// tmp7 *= FIX_1_501321110; /* sqrt(2) * ( c1+c3-c5-c7) */
++ mulhh.w r3, r1:t, r11:t
++ machh.w r3, r2:t, r11:b
++ mulhh.w r4, r1:b, r11:t
++ machh.w r4, r2:b, r11:b
++ add r3, lr
++ add r4, r7
++
++// dataptr[8] = DESCALE(tmp7 + z1 + z4, CONST_BITS + PASS1_BITS);
++ satrnds r3 >> (CONST_BITS + PASS1_BITS + 3), 31
++ satrnds r4 >> (CONST_BITS + PASS1_BITS + 3), 31
++ sthh.w r12[1*8*2], r3:b, r4:b
++ ld.w r0, sp++
++
++// dataptr++; /* advance pointer to next column */
++ sub blkptr, -4
++ sub loop_ctr, 1
++ brne COLOUMN_LOOP
++
++// }
++
++ popm r0-r3, r4-r7, pc
++
++// /* descale */
++// for (i = 0; i < 64; i++)
++// block[i] = (short int) DESCALE(data[i], 3);
++
++
++//}
++
++
++ .align 2
++const_table: .short FIX_0_541196100, FIX_0_765366865, -FIX_1_847759065, FIX_1_175875602
++ .short FIX_0_298631336, FIX_2_053119869, FIX_3_072711026, FIX_1_501321110
++ .short -FIX_0_899976223,-FIX_2_562915447, -FIX_1_961570560, -FIX_0_390180644
++
++const_table2: .short FIX_0_541196100, FIX_0_765366865, -FIX_1_847759065, FIX_1_175875602
++ .short -FIX_1_961570560, -FIX_0_390180644, FIX_3_072711026, -FIX_2_562915447
++ .short FIX_2_053119869, -FIX_2_562915447, FIX_0_298631336, -FIX_0_899976223
++ .short FIX_1_501321110, -FIX_0_899976223
++
++
++
++
+diff --git a/libavcodec/avr32/h264idct.S b/libavcodec/avr32/h264idct.S
+new file mode 100644
+index 0000000..4b23e2d
+--- /dev/null
++++ b/libavcodec/avr32/h264idct.S
+@@ -0,0 +1,451 @@
++/*
++ * Copyright (c) 2007 Atmel Corporation. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ *
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *
++ * 2. Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following
++ * disclaimer in the documentation and/or other materials provided
++ * with the distribution.
++ *
++ * 3. The name of ATMEL may not be used to endorse or promote products
++ * derived from this software without specific prior written
++ * permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
++ * DAMAGE.
++ */
++
++ .global h264_idct_add_avr32
++
++ /* Macro for performing the 1-D transform on one row line.
++
++ The register 'w01' should contain the first two pixels,
++ and the register 'w23' should contain the last two pixels
++ in the line. The resulting line is placed in p01 and p23
++ so that { w01, w23 } = { x0, x1, x3, x2 }.
++ 'tmp' and 'tmp2' should be scratchpad registers. */
++ .macro transform_row w01, w23, tmp, tmp2
++ add \tmp, \w23, \w01 << 1 /* tmp = { xxxx, 2*w1 + w3 } */
++ sub \tmp2, \w01, \w23 << 1 /* tmp2 = { xxxx, w1 - 2*w3 } */
++ bfins \tmp2, \tmp, 16, 16 /* tmp2 = { 2*w1 + w3, w1 - 2*w3 } */
++ pasr.h \tmp2, \tmp2, 1 /* tmp2 = { w1 + w3/2, w1/2 - w3 } */
++ paddsub.h \tmp, \w01:t, \w23:t /* tmp = { w0 + w2, w0 - w2 } */
++ padd.h \w01, \tmp, \tmp2 /* w01 = { w0 + w2 + w1 + w3/2, w0 - w2 + w1/2 - w3 } */
++ psub.h \w23, \tmp, \tmp2 /* w23 = { w0 + w2 - w1 - w3/2, w0 - w2 - w1/2 + w3 } */
++ .endm
++
++ /* Macro for performing the 1-D transform on two columns.
++
++ The registers w0, w1, w2, w3 should each contain two
++ packed samples from the two colomns to transform.
++ tmp and tmp2 are scratchpad registers.
++
++ The resulting transformed columns are placed in the
++ same positions as the input columns.
++ */
++ .macro transform_2columns w0, w1, w2, w3, tmp, tmp2
++ padd.h \tmp, \w0, \w2 /* tmp = z0 = w0 + w2 */
++ psub.h \w0, \w0, \w2 /* w0 = z1 = w0 - w2 */
++ pasr.h \w2, \w1, 1 /* w2 = w1/2 */
++ pasr.h \tmp2, \w3, 1 /* tmp2 = w3/2 */
++ psub.h \w3, \w2, \w3 /* w3 = z2 = w1/2 - w3 */
++ padd.h \tmp2, \w1, \tmp2/* tmp2 = z3 = w1 + w3/2 */
++ padd.h \w1, \w0, \w3 /* w1 = x1 = z1 + z2 */
++ psub.h \w2, \w0, \w3 /* w2 = x2 = z1 - z2 */
++ padd.h \w0, \tmp, \tmp2/* w0 = x0 = z0 + z3 */
++ psub.h \w3, \tmp, \tmp2/* w3 = x3 = z0 - z3 */
++ /* Scale down result. */
++ pasr.h \w0, \w0, 6
++ pasr.h \w1, \w1, 6
++ pasr.h \w2, \w2, 6
++ pasr.h \w3, \w3, 6
++ .endm
++
++/*void h264_idct_add_avr32(uint8_t *dst, DCTELEM *block, int stride)*/
++
++h264_idct_add_avr32:
++
++ stm --sp,r0-r3,r4-r7, lr
++
++ /* Setup rounding factor. */
++ mov r0, (1 << 5)
++ lsl r0, 16
++
++ /* Load block */
++ ldm r11,r2-r9
++ /* r9 = { w00, w01 },
++ r8 = { w02, w03 },
++ r7 = { w10, w11 },
++ r6 = { w12, w13 },
++ r5 = { w20, w21 },
++ r4 = { w22, w23 },
++ r3 = { w30, w31 },
++ r2 = { w32, w33 } */
++
++
++ /* Add the rounding factor to w00. */
++ add r9, r0
++
++ /* Transform rows */
++ transform_row r9, r8, r0, r1
++ transform_row r7, r6, r0, r1
++ transform_row r5, r4, r0, r1
++ transform_row r3, r2, r0, r1
++
++ /* Transform columns */
++ transform_2columns r9, r7, r5, r3, r0, r1
++ transform_2columns r8, r6, r4, r2, r0, r1
++
++ /* Load predicted pixels.*/
++ ld.w lr, r12[0]
++ ld.w r11, r12[r10]
++
++ /* Unpack to halwords. */
++ punpckub.h r0, lr:t
++ punpckub.h r1, lr:b
++
++ /* Add with transformed row. */
++ padd.h r0, r0, r9
++ paddx.h r1, r1, r8
++ /* Pack and saturate back to 8-bit pixels. */
++ packsh.ub r0, r0, r1
++
++ /* Unpack to halwords. */
++ punpckub.h lr, r11:t
++ punpckub.h r11, r11:b
++
++ /* Add with transformed row. */
++ padd.h lr, lr, r7
++ paddx.h r11, r11, r6
++ /* Pack and saturate back to 8-bit pixels. */
++ packsh.ub r1, lr, r11
++
++ /* Store back to frame. */
++ st.w r12[0], r0
++ st.w r12[r10], r1
++
++ add r12, r12, r10 << 1
++
++ /* Load predicted pixels.*/
++ ld.w lr, r12[0]
++ ld.w r11, r12[r10]
++
++ /* Unpack to halwords. */
++ punpckub.h r0, lr:t
++ punpckub.h r1, lr:b
++
++ /* Add with transformed row. */
++ padd.h r0, r0, r5
++ paddx.h r1, r1, r4
++ /* Pack and saturate back to 8-bit pixels. */
++ packsh.ub r0, r0, r1
++
++ /* Unpack to halwords. */
++ punpckub.h lr, r11:t
++ punpckub.h r11, r11:b
++
++ /* Add with transformed row. */
++ padd.h lr, lr, r3
++ paddx.h r11, r11, r2
++ /* Pack and saturate back to 8-bit pixels. */
++ packsh.ub r1, lr, r11
++
++ /* Store back to frame. */
++ st.w r12[0], r0
++ st.w r12[r10], r1
++
++ ldm sp++,r0-r3,r4-r7, pc
++
++
++ .global h264_idct8_add_avr32
++//void ff_h264_idct8_add_c(uint8_t *dst, DCTELEM *block, int stride){
++
++h264_idct8_add_avr32:
++ stm --sp,r0-r3,r4-r7, lr
++
++ /* Push dst and stride on stack */
++ stm --sp,r10,r12
++
++// int i;
++// DCTELEM (*src)[8] = (DCTELEM(*)[8])block;
++// uint8_t *cm = cropTbl + MAX_NEG_CROP;
++
++// block[0] += 32;
++
++
++// for( i = 0; i < 8; i++ )
++// {
++ mov lr, 4
++0:
++ ld.w r7, r11[0*(8*2)]
++ ld.w r6, r11[1*(8*2)]
++ ld.w r5, r11[2*(8*2)]
++ ld.w r4, r11[3*(8*2)]
++ ld.w r3, r11[4*(8*2)]
++ ld.w r2, r11[5*(8*2)]
++ ld.w r1, r11[6*(8*2)]
++ ld.w r0, r11[7*(8*2)]
++
++/*
++
++ const int a0 = src[0][i] + src[4][i];
++ const int a2 = src[0][i] - src[4][i];
++ const int a4 = (src[2][i]>>1) - src[6][i];
++ const int a6 = (src[6][i]>>1) + src[2][i];
++*/
++ padd.h r8, r7, r3 /* r8 = a0 */
++ psub.h r7, r7, r3 /* r7 = a2 */
++ pasr.h r3, r5, 1 /* r3 = src[2][i] >> 1 */
++ pasr.h r9, r1, 1 /* r9 = src[6][i] >> 1 */
++ psub.h r3, r3, r1 /* r3 = a4 */
++ padd.h r9, r9, r5 /* r9 = a6 */
++
++/*
++ const int b0 = a0 + a6;
++ const int b2 = a2 + a4;
++ const int b4 = a2 - a4;
++ const int b6 = a0 - a6;
++*/
++ padd.h r1, r8, r9 /* r1 = b0 */
++ psub.h r8, r8, r9 /* r8 = b6 */
++ padd.h r5, r7, r3 /* r5 = b2 */
++ psub.h r7, r7, r3 /* r7 = b4 */
++
++/*
++ const int a1 = -src[3][i] + src[5][i] - src[7][i] - (src[7][i]>>1);
++ const int a3 = src[1][i] + src[7][i] - src[3][i] - (src[3][i]>>1);
++ const int a5 = -src[1][i] + src[7][i] + src[5][i] + (src[5][i]>>1);
++ const int a7 = src[3][i] + src[5][i] + src[1][i] + (src[1][i]>>1);
++*/
++ pasr.h r3, r0, 1
++ padd.h r3, r3, r0
++ psub.h r3, r2, r3
++ psub.h r3, r3, r4 /* r3 = a1 */
++
++ pasr.h r9, r4, 1
++ padd.h r9, r9, r4
++ psub.h r9, r0, r9
++ padd.h r9, r6, r9 /* r9 = a3 */
++
++ pasr.h r10, r2, 1
++ padd.h r10, r10, r2
++ padd.h r10, r10, r0
++ psub.h r10, r10, r6 /* r10 = a5 */
++
++ pasr.h r0, r6, 1
++ padd.h r0, r0, r6
++ padd.h r0, r0, r2
++ padd.h r0, r0, r4 /* r0 = a7 */
++/*
++ const int b1 = (a7>>2) + a1;
++ const int b3 = a3 + (a5>>2);
++ const int b5 = (a3>>2) - a5;
++ const int b7 = a7 - (a1>>2);
++*/
++ pasr.h r2, r0, 2
++ padd.h r2, r2, r3 /* r2 = b1 */
++ pasr.h r3, r3, 2
++ psub.h r3, r0, r3 /* r3 = b7 */
++
++ pasr.h r0, r10, 2
++ padd.h r0, r0, r9 /* r0 = b3 */
++ pasr.h r9, r9, 2
++ psub.h r9, r9, r10 /* r9 = b5 */
++
++
++/*
++ src[0][i] = b0 + b7;
++ src[7][i] = b0 - b7;
++ src[1][i] = b2 + b5;
++ src[6][i] = b2 - b5;
++ src[2][i] = b4 + b3;
++ src[5][i] = b4 - b3;
++ src[3][i] = b6 + b1;
++ src[4][i] = b6 - b1; */
++
++ padd.h r4, r1, r3
++ psub.h r1, r1, r3
++ st.w r11[0*(8*2)], r4
++ st.w r11[7*(8*2)], r1
++
++ padd.h r3, r5, r9
++ psub.h r5, r5, r9
++ st.w r11[1*(8*2)], r3
++ st.w r11[6*(8*2)], r5
++
++ padd.h r9, r7, r0
++ psub.h r7, r7, r0
++ st.w r11[2*(8*2)], r9
++ st.w r11[5*(8*2)], r7
++
++ padd.h r0, r8, r2
++ psub.h r8, r8, r2
++ st.w r11[3*(8*2)], r0
++ st.w r11[4*(8*2)], r8
++
++ sub r11, -4
++ sub lr, 1
++ brne 0b
++
++// }
++
++ lddsp r12, sp[0] /* r12 = dst */
++ sub r11, 4*4
++ ldm r11++, r4-r7
++ mov lr, 8
++ /* Push dst and stride on stack */
++
++1:
++// for( i = 0; i < 8; i++ )
++// {
++
++ /* r7 = {src[i][0], src[i][1]}
++ r6 = {src[i][2], src[i][3]}
++ r5 = {src[i][4], src[i][5]}
++ r4 = {src[i][6], src[i][7]} */
++
++/*
++ const int a0 = src[i][0] + src[i][4];
++ const int a2 = src[i][0] - src[i][4];
++ const int a4 = (src[i][2]>>1) - src[i][6];
++ const int a6 = (src[i][6]>>1) + src[i][2];
++*/
++ pasr.h r8, r6, 1
++ pasr.h r9, r4, 1
++ addhh.w r0, r7:t, r5:t /* r0 = a0 */
++ subhh.w r1, r7:t, r5:t /* r1 = a2 */
++ subhh.w r2, r8:t, r4:t /* r2 = a4 */
++ addhh.w r3, r9:t, r6:t /* r3 = a6 */
++
++/*
++ const int b0 = a0 + a6;
++ const int b2 = a2 + a4;
++ const int b4 = a2 - a4;
++ const int b6 = a0 - a6;
++*/
++ add r10, r0, r3 /* r10 = b0 */
++ sub r0, r3 /* r0 = b6 */
++ add r3, r1, r2 /* r3 = b2 */
++ sub r1, r2 /* r1 = b4 */
++/*
++
++
++ const int a7 = src[i][5] + src[i][3] + src[i][1] + (src[i][1]>>1);
++ const int a1 = src[i][5] - src[i][3] - src[i][7] - (src[i][7]>>1);
++ const int a3 = src[i][7] + src[i][1] - src[i][3] - (src[i][3]>>1);
++ const int a5 = src[i][7] - src[i][1] + src[i][5] + (src[i][5]>>1); */
++ addhh.w r8, r8:b, r6:b
++ addhh.w r2, r4:b, r7:b
++ sub r2, r8 /* r2 = a3 */
++
++ addhh.w r9, r9:b, r4:b
++ subhh.w r8, r5:b, r6:b
++ sub r8, r9 /* r8 = a1 */
++
++ pasr.h r9, r7, 1
++ addhh.w r9, r9:b, r7:b
++ addhh.w r6, r5:b, r6:b
++ add r6, r9 /* r6 = a7 */
++
++ pasr.h r9, r5, 1
++ addhh.w r9, r9:b, r5:b
++ subhh.w r5, r4:b, r7:b
++ add r5, r9 /* r5 = a5 */
++
++/* const int b1 = (a7>>2) + a1;
++ const int b3 = (a5>>2) + a3;
++ const int b5 = (a3>>2) - a5;
++ const int b7 = -(a1>>2) + a7 ; */
++ asr r4, r6, 2
++ add r4, r8 /* r4 = b1 */
++ asr r8, 2
++ rsub r8, r6 /* r8 = b7 */
++
++ asr r6, r5, 2
++ add r6, r2 /* r6 = b3 */
++ asr r2, 2
++ sub r2, r5 /* r2 = b5 */
++
++/*
++ dst[i*stride + 0] = cm[ dst[i*stride + 0] + ((b0 + b7) >> 6) ];
++ dst[i*stride + 1] = cm[ dst[i*stride + 1] + ((b2 + b5) >> 6) ];
++ dst[i*stride + 2] = cm[ dst[i*stride + 2] + ((b4 + b3) >> 6) ];
++ dst[i*stride + 3] = cm[ dst[i*stride + 3] + ((b6 + b1) >> 6) ];
++ dst[i*stride + 4] = cm[ dst[i*stride + 4] + ((b6 - b1) >> 6) ];
++ dst[i*stride + 5] = cm[ dst[i*stride + 5] + ((b4 - b3) >> 6) ];
++ dst[i*stride + 6] = cm[ dst[i*stride + 6] + ((b2 - b5) >> 6) ];
++ dst[i*stride + 7] = cm[ dst[i*stride + 7] + ((b0 - b7) >> 6) ];
++*/
++ add r5, r10, r8
++ satrnds r5 >> 6, 0 /* r5 = (b0 + b7) >> 6 */
++ sub r10, r8
++ satrnds r10 >> 6, 0 /* r10 = (b0 - b7) >> 6 */
++ add r8, r3, r2
++ satrnds r8 >> 6, 0 /* r8 = (b2 + b5) >> 6 */
++ sub r3, r2
++ satrnds r3 >> 6, 0 /* r3 = (b2 - b5) >> 6 */
++
++ add r2, r1, r6
++ satrnds r2 >> 6, 0 /* r2 = (b4 + b3) >> 6 */
++ sub r1, r6
++ satrnds r1 >> 6, 0 /* r1 = (b4 - b3) >> 6 */
++
++ add r6, r0, r4
++ satrnds r6 >> 6, 0 /* r6 = (b6 + b1) >> 6 */
++ sub r0, r4
++ satrnds r0 >> 6, 0 /* r0 = (b6 - b1) >> 6 */
++
++ ld.w r4, r12[0]
++
++ packw.sh r8, r5, r8
++ packw.sh r7, r2, r6
++ ld.w r9, r12[4]
++ packw.sh r6, r0, r1
++ packw.sh r5, r3, r10
++
++ punpckub.h r10, r4:t
++ punpckub.h r4, r4:b
++ punpckub.h r3, r9:t
++ punpckub.h r9, r9:b
++
++ padd.h r8, r8, r10
++ padd.h r7, r7, r4
++ padd.h r6, r6, r3
++ padd.h r5, r5, r9
++
++ lddsp r10, sp[4] /* r10 = stride */
++ packsh.ub r0, r8, r7
++ packsh.ub r1, r6, r5
++
++ st.w r12[0], r0
++ st.w r12[4], r1
++
++ ldm r11++, r4-r7
++ add r12, r10 /* dst += stride */
++
++ sub lr, 1
++ brne 1b
++
++ sub sp, -8
++ ldm sp++,r0-r3,r4-r7, pc
++
++
++
++// }
++//}
+diff --git a/libavcodec/avr32/idct.S b/libavcodec/avr32/idct.S
+new file mode 100644
+index 0000000..e7551ec
+--- /dev/null
++++ b/libavcodec/avr32/idct.S
+@@ -0,0 +1,829 @@
++/*
++ * Copyright (c) 2007 Atmel Corporation. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ *
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *
++ * 2. Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following
++ * disclaimer in the documentation and/or other materials provided
++ * with the distribution.
++ *
++ * 3. The name of ATMEL may not be used to endorse or promote products
++ * derived from this software without specific prior written
++ * permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
++ * DAMAGE.
++ */
++
++ .global idct_add_avr32
++ .global idct_put_avr32
++ .global idct_avr32
++
++
++#define CONST_BITS 13
++#define PASS1_BITS 2
++
++#define ONE ((INT32) 1)
++
++#define CONST_SCALE (ONE << CONST_BITS)
++
++#define LINE_SIZE 32
++
++#define FIX_0_298631336 (2446) /* FIX(0.298631336) */
++#define FIX_0_390180644 (3196) /* FIX(0.390180644) */
++#define FIX_0_541196100 (4433) /* FIX(0.541196100) */
++#define FIX_0_765366865 (6270) /* FIX(0.765366865) */
++#define FIX_0_899976223 (7373) /* FIX(0.899976223) */
++#define FIX_1_175875602 (9633) /* FIX(1.175875602) */
++#define FIX_1_501321110 (12299)/* FIX(1.501321110) */
++#define FIX_1_847759065 (15137)/* FIX(1.847759065) */
++#define FIX_1_961570560 (16069)/* FIX(1.961570560) */
++#define FIX_2_053119869 (16819)/* FIX(2.053119869) */
++#define FIX_2_562915447 (20995)/* FIX(2.562915447) */
++#define FIX_3_072711026 (25172)/* FIX(3.072711026) */
++
++
++#define loop_cnt r11
++
++ .text
++
++idct_add_avr32:
++ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables
++
++ // Give room for some variables on the stack
++ sub sp, 8
++ stdsp SP[0], r12 // rfp
++ stdsp SP[4], r11 // iinc
++
++ mov loop_cnt, 8 //Initialize loop counter
++
++FOR_ROW:
++
++ ldm r10, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block
++ mov r6, 0
++#ifdef USE_PREFETCH
++ pref r10[LINE_SIZE] //Prefetch next line
++#endif
++ or r4, r2, r3 << 16
++ or r4, r1 //Check if all DCT-coeffisients except the DC is zero
++ or r4, r0
++ brne AC_ROW //If there are non-zero AC coeffisients perform row-transform
++
++ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5
++ plsl.h r5, r5, PASS1_BITS
++ mov r4, r5
++ st.d r10++, r4
++ st.d r10++, r4
++
++ sub loop_cnt, 1 //Decrement loop counter
++ brne FOR_ROW //Perform loop one more time if loop_cnt is not zero
++
++ bral COLOUMN_TRANSFORM //Perform coloumn transform after row transform is computed
++
++
++AC_ROW:
++
++
++ ld.w r12, pc[coef_table - .]
++ ld.w r9, pc[coef_table - . + 4]
++
++ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7]
++ mulhh.w r5, r4:t, r12:t
++ mulhh.w r6, r0:t, r12:b
++ ld.w r12, pc[coef_table - . + 8]
++ mulhh.w r7, r2:t, r9:t
++ add r6, r5 // tmp2
++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31
++ add r7, r5 // tmp3
++ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31
++
++ paddsub.h r5, r3:t, r1:t
++ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1
++
++ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13
++ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12
++
++
++ addhh.w lr, r3:b, r1:b // lr = z4
++ addhh.w r5, r4:b, lr:b
++ mulhh.w r5, r5:b, r9:b // r5 = z5
++
++ ld.w r9, pc[coef_table - . + 12]
++ mulhh.w r4, r4:b, r12:t // r4 = z3
++ mulhh.w lr, lr:b, r12:b // lr = z4
++
++ add r4, r5
++ add lr, r5
++
++ addhh.w r5, r2:b, r1:b // r5 = z2
++ addhh.w r8, r3:b, r0:b // r8 = z1
++
++
++ mulhh.w r0, r0:b, r9:t // r0 = tmp0
++ ld.w r12, pc[coef_table - . + 16]
++ mulhh.w r1, r1:b, r9:b // r1 = tmp1
++ ld.w r9, pc[coef_table - . + 20]
++ mulhh.w r2, r2:b, r12:t // r2 = tmp2
++ mulhh.w r3, r3:b, r12:b // r3 = tmp3
++ mulhh.w r8, r8:b, r9:t // r8 = z1
++ mulhh.w r5, r5:b, r9:b // r5 = z2
++
++
++ add r0, r8
++ add r0, r4
++ add r1, r5
++ add r1, lr
++ add r2, r5
++ add r2, r4
++ add r3, r8
++ add r3, lr
++
++ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31
++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31
++ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31
++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31
++
++ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6]
++ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7]
++ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5]
++ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4]
++
++ sthh.w r10[0], r4:t, r5:t
++ sthh.w r10[4], r3:t, r2:t
++ sthh.w r10[8], r2:b, r3:b
++ sthh.w r10[12], r5:b, r4:b
++
++
++
++ sub r10, -16
++ sub loop_cnt, 1
++ brne FOR_ROW, e
++
++COLOUMN_TRANSFORM:
++
++ sub r10, 128 //Set pointer to start of DCT block
++
++
++ mov loop_cnt, 8
++FOR_COLOUMN:
++ ldins.h r3:t,r10[0] // r3:t = dataptr[0]
++ ldins.h r1:t,r10[1*8*2]// r1:t = dataptr[1]
++ ldins.h r2:t,r10[2*8*2]// r2:t = dataptr[2]
++ ldins.h r0:t,r10[5*8*2]// r0:t = dataptr[5]
++ ldins.h r3:b,r10[4*8*2]// r3:b = dataptr[4]
++ ldins.h r1:b,r10[3*8*2]// r1:b = dataptr[3]
++ ldins.h r2:b,r10[6*8*2]// r2:b = dataptr[6]
++ ldins.h r0:b,r10[7*8*2]// r0:b = dataptr[7]
++
++ or r4, r1, r3 << 16
++ or r4, r2
++ or r4, r0
++ brne AC_COLOUMN //If there are non-zero AC coeffisients perform row-transform
++
++ lddsp r12, SP[0] // rfp
++ lddsp r9, SP[4] // iinc
++ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 9
++ ld.d r0, r12[0]
++ sub r10, -2 // Increment the dataptr
++ bfins r3, r3, 16, 16
++ punpckub.h r2, r1:t
++ padd.h r2, r2, r3
++ punpckub.h r1, r1:b
++ padd.h r1, r1, r3
++ packsh.ub r1, r2, r1
++ punpckub.h r2, r0:t
++ padd.h r2, r2, r3
++ punpckub.h r0, r0:b
++ padd.h r0, r0, r3
++ packsh.ub r0, r2, r0
++ st.d r12[0], r0
++ add r12, r9 // increment rfp
++ stdsp SP[0], r12
++
++ sub loop_cnt, 1//Decrement loop counter
++ brne FOR_COLOUMN//Perform loop one more time if loop_cnt is not zero
++
++ sub sp, -8
++ popm r0-r3, r4-r7, pc//Pop back registers and PC
++
++AC_COLOUMN:
++
++ ld.w r12, pc[coef_table - .]
++ ld.w r9, pc[coef_table - . + 4]
++
++ addhh.w r4, r2:t, r2:b
++ mulhh.w r4, r4:b, r12:t // r4 = z1
++ mulhh.w r5, r2:b, r12:b
++ ld.w r12, pc[coef_table - . + 8]
++ mulhh.w r6, r2:t, r9:t
++ add r5, r4 // r5 = tmp2
++ add r6, r4 // r6 = tmp3
++
++ addhh.w r7, r3:t, r3:b
++ subhh.w r8, r3:t, r3:b
++
++ lsl r7, CONST_BITS
++ lsl r8, CONST_BITS
++
++ add r2, r7, r6 // r2 = tmp10
++ sub r3, r7, r6 // r3 = tmp13
++ add r4, r8, r5 // r4 = tmp11
++ sub r5, r8, r5 // r5 = tmp12
++
++ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3
++ addhh.w r7, r6:t, r6:b
++ mulhh.w r7, r7:b, r9:b // r7 = z5
++
++ ld.w r9, pc[coef_table - . + 12]
++ mulhh.w r8, r6:b, r12:t // r8 = z3
++ mulhh.w r6, r6:t, r12:b // r6 = z4
++
++ add r8, r7
++ add r6, r7
++
++ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1
++
++ mulhh.w r12, r0:b, r9:t // r12 = tmp0
++ mulhh.w r0, r0:t, r9:b // r0 = tmp1
++ ld.w r9, pc[coef_table - . + 16]
++ add r12, r8
++ add r0, r6
++
++ ld.w lr, pc[coef_table - . + 20]
++ machh.w r8, r1:b, r9:t // r8 = tmp2
++ machh.w r6, r1:t, r9:b // r6 = tmp3
++ mulhh.w r9, r7:b, lr:t // r9 = z1
++ mulhh.w r7, r7:t, lr:b // r7 = z2
++
++
++ add r12, r9
++ add r0, r7
++ add r8, r7
++ add r6, r9
++
++ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0]
++ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7]
++ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1]
++ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6]
++ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2]
++ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5]
++ add r0, r3, r12 // r0 = dataptr[DCTSIZE*3]
++ sub r3, r3, r12 // r3 = dataptr[DCTSIZE*4]
++
++ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9
++
++ packw.sh r1, r1, r6
++ packw.sh r8, r8, r0
++ packw.sh r3, r3, r5
++ packw.sh r4, r4, r2
++
++ lddsp r12, SP[0] // rfp
++ lddsp r9, SP[4] // iinc
++ ld.d r6, r12[0]
++ sub r10, -2 // Increment the dataptr
++ punpckub.h r0, r7:t
++ padd.h r1, r1, r0
++ punpckub.h r0, r7:b
++ padd.h r8, r8, r0
++ packsh.ub r7, r1, r8
++ punpckub.h r0, r6:t
++ padd.h r3, r3, r0
++ punpckub.h r0, r6:b
++ padd.h r4, r4, r0
++ packsh.ub r6, r3, r4
++ st.d r12[0], r6
++ add r12, r9 // increment rfp
++ stdsp SP[0], r12
++
++ sub loop_cnt, 1 //Decrement loop counter
++ brne FOR_COLOUMN //Perform loop one more time if loop_cnt is not zero
++
++ sub sp, -8
++ popm r0-r3, r4-r7, pc //Pop back registers and PC
++
++
++
++//Coeffisient Table:
++ .align 2
++coef_table:
++ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602
++ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869
++ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447
++
++
++idct_put_avr32:
++ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables
++
++ //; Give room for some variables on the stack
++ sub sp, 8
++ stdsp SP[0], r12 // rfp
++ stdsp SP[4], r11 // iinc
++
++ mov loop_cnt, 8 //Initialize loop counter
++
++0:
++
++ ldm r10, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block
++ mov r6, 0
++#ifdef USE_PREFETCH
++ pref r10[LINE_SIZE] //Prefetch next line
++#endif
++ or r4, r2, r3 << 16
++ or r4, r1 //Check if all DCT-coeffisients except the DC is zero
++ or r4, r0
++ brne 1f //If there are non-zero AC coeffisients perform row-transform
++
++ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5
++ plsl.h r5, r5, PASS1_BITS
++ mov r4, r5
++ st.d r10++, r4
++ st.d r10++, r4
++
++ sub loop_cnt, 1 //Decrement loop counter
++ brne 0b //Perform loop one more time if loop_cnt is not zero
++
++ bral 2f //Perform coloumn transform after row transform is computed
++
++1:
++
++ ld.w r12, pc[coef_table_copy - .]
++ ld.w r9, pc[coef_table_copy - . + 4]
++
++ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7]
++ mulhh.w r5, r4:t, r12:t
++ mulhh.w r6, r0:t, r12:b
++ ld.w r12, pc[coef_table_copy - . + 8]
++ mulhh.w r7, r2:t, r9:t
++ add r6, r5 // tmp2
++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31
++ add r7, r5 // tmp3
++ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31
++
++ paddsub.h r5, r3:t, r1:t
++ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1
++
++ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13
++ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12
++
++
++
++ addhh.w lr, r3:b, r1:b // lr = z4
++ addhh.w r5, r4:b, lr:b
++ mulhh.w r5, r5:b, r9:b // r5 = z5
++
++ ld.w r9, pc[coef_table_copy - . + 12]
++ mulhh.w r4, r4:b, r12:t // r4 = z3
++ mulhh.w lr, lr:b, r12:b // lr = z4
++
++ add r4, r5
++ add lr, r5
++
++ addhh.w r5, r2:b, r1:b // r5 = z2
++ addhh.w r8, r3:b, r0:b // r8 = z1
++
++
++ mulhh.w r0, r0:b, r9:t // r0 = tmp0
++ ld.w r12, pc[coef_table_copy - . + 16]
++ mulhh.w r1, r1:b, r9:b // r1 = tmp1
++ ld.w r9, pc[coef_table_copy - . + 20]
++ mulhh.w r2, r2:b, r12:t // r2 = tmp2
++ mulhh.w r3, r3:b, r12:b // r3 = tmp3
++ mulhh.w r8, r8:b, r9:t // r8 = z1
++ mulhh.w r5, r5:b, r9:b // r5 = z2
++
++
++ add r0, r8
++ add r0, r4
++ add r1, r5
++ add r1, lr
++ add r2, r5
++ add r2, r4
++ add r3, r8
++ add r3, lr
++
++ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31
++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31
++ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31
++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31
++
++ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6]
++ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7]
++ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5]
++ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4]
++
++ sthh.w r10[0], r4:t, r5:t
++ sthh.w r10[4], r3:t, r2:t
++ sthh.w r10[8], r2:b, r3:b
++ sthh.w r10[12], r5:b, r4:b
++
++
++
++ sub r10, -16
++ sub loop_cnt, 1
++ brne 0b
++
++2:
++
++ sub r10, 128 //Set pointer to start of DCT block
++
++ mov loop_cnt, 8
++
++0:
++ ldins.h r3:t,r10[0] // r3:t = dataptr[0]
++ ldins.h r1:t,r10[1*8*2]// r1:t = dataptr[1]
++ ldins.h r2:t,r10[2*8*2]// r2:t = dataptr[2]
++ ldins.h r0:t,r10[5*8*2]// r0:t = dataptr[5]
++ ldins.h r3:b,r10[4*8*2]// r3:b = dataptr[4]
++ ldins.h r1:b,r10[3*8*2]// r1:b = dataptr[3]
++ ldins.h r2:b,r10[6*8*2]// r2:b = dataptr[6]
++ ldins.h r0:b,r10[7*8*2]// r0:b = dataptr[7]
++
++ or r4, r1, r3 << 16
++ or r4, r2
++ or r4, r0
++ brne 1f //If there are non-zero AC coeffisients perform row-transform
++
++ lddsp r12, SP[0] // rfp
++ lddsp r9, SP[4] // iinc
++ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 31
++ packw.sh r3, r3, r3
++ packsh.ub r3, r3, r3
++ mov r2, r3
++ st.d r12[0], r2
++ add r12, r9 // increment rfp
++ sub r10, -2 // Increment the dataptr
++ stdsp SP[0], r12
++
++ sub loop_cnt, 1//Decrement loop counter
++ brne 0b //Perform loop one more time if loop_cnt is not zero
++
++ sub sp, -8
++ popm r0-r3, r4-r7, pc//Pop back registers and PC
++
++1:
++
++ ld.w r12, pc[coef_table_copy - .]
++ ld.w r9, pc[coef_table_copy - . + 4]
++
++ addhh.w r4, r2:t, r2:b
++ mulhh.w r4, r4:b, r12:t // r4 = z1
++ mulhh.w r5, r2:b, r12:b
++ ld.w r12, pc[coef_table_copy - . + 8]
++ mulhh.w r6, r2:t, r9:t
++ add r5, r4 // r5 = tmp2
++ add r6, r4 // r6 = tmp3
++
++ addhh.w r7, r3:t, r3:b
++ subhh.w r8, r3:t, r3:b
++
++ lsl r7, CONST_BITS
++ lsl r8, CONST_BITS
++
++ add r2, r7, r6 // r2 = tmp10
++ sub r3, r7, r6 // r3 = tmp13
++ add r4, r8, r5 // r4 = tmp11
++ sub r5, r8, r5 // r5 = tmp12
++
++
++ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3
++ addhh.w r7, r6:t, r6:b
++ mulhh.w r7, r7:b, r9:b // r7 = z5
++
++ ld.w r9, pc[coef_table_copy - . + 12]
++ mulhh.w r8, r6:b, r12:t // r8 = z3
++ mulhh.w r6, r6:t, r12:b // r6 = z4
++
++ add r8, r7
++ add r6, r7
++
++ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1
++
++ mulhh.w r12, r0:b, r9:t // r12 = tmp0
++ mulhh.w r0, r0:t, r9:b // r0 = tmp1
++ ld.w r9, pc[coef_table_copy - . + 16]
++ add r12, r8
++ add r0, r6
++
++ ld.w lr, pc[coef_table_copy - . + 20]
++ machh.w r8, r1:b, r9:t // r8 = tmp2
++ machh.w r6, r1:t, r9:b // r6 = tmp3
++ mulhh.w r9, r7:b, lr:t // r9 = z1
++ mulhh.w r7, r7:t, lr:b // r7 = z2
++
++
++ add r12, r9
++ add r0, r7
++ add r8, r7
++ add r6, r9
++
++ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0]
++ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7]
++ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1]
++ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6]
++ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2]
++ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5]
++ add r0, r3, r12 // r0 = dataptr[DCTSIZE*3]
++ sub r3, r3, r12 // r3 = dataptr[DCTSIZE*4]
++
++ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9
++
++ packw.sh r1, r1, r6
++ packw.sh r8, r8, r0
++ packw.sh r3, r3, r5
++ packw.sh r4, r4, r2
++
++ packsh.ub r1, r1, r8
++ packsh.ub r0, r3, r4
++ lddsp r12, SP[0] // rfp
++ lddsp r9, SP[4] // iinc
++ st.d r12[0], r0
++ sub r10, -2 // Increment the dataptr
++ add r12, r9 // increment rfp
++ stdsp SP[0], r12
++
++ sub loop_cnt, 1 //Decrement loop counter
++ brne 0b //Perform loop one more time if loop_cnt is not zero
++
++ sub sp, -8
++ popm r0-r3, r4-r7, pc //Pop back registers and PC
++
++
++
++ .align 2
++coef_table_copy:
++ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602
++ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869
++ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447
++
++
++idct_avr32:
++ pushm r0-r3, r4-r7, lr //Free up registers to use for local variables
++
++ //; Give room for a temporary block on the stack
++ sub sp, 8*8*2
++
++ mov loop_cnt, 8 //Initialize loop counter
++
++0:
++
++ ldm r12++, r0, r1, r2, r3 //Load 8 DCT-coeffisients from the current row in the DCT-block
++ mov r6, 0
++#ifdef USE_PREFETCH
++ pref r12[LINE_SIZE] //Prefetch next line
++#endif
++ or r4, r2, r3 << 16
++ or r4, r1 //Check if all DCT-coeffisients except the DC is zero
++ or r4, r0
++ brne 1f //If there are non-zero AC coeffisients perform row-transform
++
++ paddsub.h r5, r3:t, r6:b //Extract the DC-coeff from r5
++ plsl.h r5, r5, PASS1_BITS
++ mov r4, r5
++ st.d sp++, r4
++ st.d sp++, r4
++
++ sub loop_cnt, 1 //Decrement loop counter
++ brne 0b //Perform loop one more time if loop_cnt is not zero
++
++ bral 2f //Perform coloumn transform after row transform is computed
++
++1:
++
++ ld.w r10, pc[coef_table_idct - .]
++ ld.w r9, pc[coef_table_idct - . + 4]
++
++ padd.h r4, r2, r0 // r4:t = dataptr[2] + dataptr[6],r4:b = dataptr[3] + dataptr[7]
++ mulhh.w r5, r4:t, r10:t
++ mulhh.w r6, r0:t, r10:b
++ ld.w r10, pc[coef_table_idct - . + 8]
++ mulhh.w r7, r2:t, r9:t
++ add r6, r5 // tmp2
++ satrnds r6 >> (CONST_BITS - PASS1_BITS), 31
++ add r7, r5 // tmp3
++ satrnds r7 >> (CONST_BITS - PASS1_BITS), 31
++
++ paddsub.h r5, r3:t, r1:t
++ plsl.h r5, r5, PASS1_BITS // r5:t = tmp0, r5:b = tmp1
++
++ paddsub.h r7, r5:t, r7:b // r7:t = tmp10, r7:b = tmp13
++ paddsub.h r6, r5:b, r6:b // r6:t = tmp11, r6:b = tmp12
++
++
++
++ addhh.w lr, r3:b, r1:b // lr = z4
++ addhh.w r5, r4:b, lr:b
++ mulhh.w r5, r5:b, r9:b // r5 = z5
++
++ ld.w r9, pc[coef_table_idct - . + 12]
++ mulhh.w r4, r4:b, r10:t // r4 = z3
++ mulhh.w lr, lr:b, r10:b // lr = z4
++
++ add r4, r5
++ add lr, r5
++
++ addhh.w r5, r2:b, r1:b // r5 = z2
++ addhh.w r8, r3:b, r0:b // r8 = z1
++
++
++ mulhh.w r0, r0:b, r9:t // r0 = tmp0
++ ld.w r10, pc[coef_table_idct - . + 16]
++ mulhh.w r1, r1:b, r9:b // r1 = tmp1
++ ld.w r9, pc[coef_table_idct - . + 20]
++ mulhh.w r2, r2:b, r10:t // r2 = tmp2
++ mulhh.w r3, r3:b, r10:b // r3 = tmp3
++ mulhh.w r8, r8:b, r9:t // r8 = z1
++ mulhh.w r5, r5:b, r9:b // r5 = z2
++
++
++ add r0, r8
++ add r0, r4
++ add r1, r5
++ add r1, lr
++ add r2, r5
++ add r2, r4
++ add r3, r8
++ add r3, lr
++
++ satrnds r0 >> (CONST_BITS - PASS1_BITS), 31
++ satrnds r1 >> (CONST_BITS - PASS1_BITS), 31
++ satrnds r2 >> (CONST_BITS - PASS1_BITS), 31
++ satrnds r3 >> (CONST_BITS - PASS1_BITS), 31
++
++ paddsub.h r5, r6:t, r2:b // r5:t = dataptr[1], r5:b = dataptr[6]
++ paddsub.h r4, r7:t, r3:b // r4:t = dataptr[0], r4:b = dataptr[7]
++ paddsub.h r3, r6:b, r1:b // r3:t = dataptr[2], r3:b = dataptr[5]
++ paddsub.h r2, r7:b, r0:b // r2:t = dataptr[3], r2:b = dataptr[4]
++
++ sthh.w sp[0], r4:t, r5:t
++ sthh.w sp[4], r3:t, r2:t
++ sthh.w sp[8], r2:b, r3:b
++ sthh.w sp[12], r5:b, r4:b
++
++
++
++ sub sp, -16
++ sub loop_cnt, 1
++ brne 0b
++
++2:
++
++ sub sp, 8*8*2 //Set pointer to start of DCT block
++ sub r12, 8*8*2 //Set pointer to start of DCT block
++
++ mov loop_cnt, 8
++
++0:
++ ldins.h r3:t,sp[0] // r3:t = dataptr[0]
++ ldins.h r1:t,sp[1*8*2]// r1:t = dataptr[1]
++ ldins.h r2:t,sp[2*8*2]// r2:t = dataptr[2]
++ ldins.h r0:t,sp[5*8*2]// r0:t = dataptr[5]
++ ldins.h r3:b,sp[4*8*2]// r3:b = dataptr[4]
++ ldins.h r1:b,sp[3*8*2]// r1:b = dataptr[3]
++ ldins.h r2:b,sp[6*8*2]// r2:b = dataptr[6]
++ ldins.h r0:b,sp[7*8*2]// r0:b = dataptr[7]
++
++ or r4, r1, r3 << 16
++ or r4, r2
++ or r4, r0
++ brne 1f //If there are non-zero AC coeffisients perform row-transform
++
++ satrnds r3 >> ( PASS1_BITS + 3 + 16 ), 31
++ packw.sh r3, r3, r3
++ mov r2, r3
++ st.d r12++, r2
++ st.d r12++, r2
++ sub sp, -2 // Increment the dataptr
++
++ sub loop_cnt, 1//Decrement loop counter
++ brne 0b //Perform loop one more time if loop_cnt is not zero
++
++ sub sp, -(8*8*2 - 8)
++ popm r0-r3, r4-r7, pc//Pop back registers and PC
++
++1:
++
++ ld.w r10, pc[coef_table_idct - .]
++ ld.w r9, pc[coef_table_idct - . + 4]
++
++ addhh.w r4, r2:t, r2:b
++ mulhh.w r4, r4:b, r10:t // r4 = z1
++ mulhh.w r5, r2:b, r10:b
++ ld.w r10, pc[coef_table_idct - . + 8]
++ mulhh.w r6, r2:t, r9:t
++ add r5, r4 // r5 = tmp2
++ add r6, r4 // r6 = tmp3
++
++ addhh.w r7, r3:t, r3:b
++ subhh.w r8, r3:t, r3:b
++
++ lsl r7, CONST_BITS
++ lsl r8, CONST_BITS
++
++ add r2, r7, r6 // r2 = tmp10
++ sub r3, r7, r6 // r3 = tmp13
++ add r4, r8, r5 // r4 = tmp11
++ sub r5, r8, r5 // r5 = tmp12
++
++
++ padd.h r6, r0, r1 // r6:t = z4, r6:b = z3
++ addhh.w r7, r6:t, r6:b
++ mulhh.w r7, r7:b, r9:b // r7 = z5
++
++ ld.w r9, pc[coef_table_idct - . + 12]
++ mulhh.w r8, r6:b, r10:t // r8 = z3
++ mulhh.w r6, r6:t, r10:b // r6 = z4
++
++ add r8, r7
++ add r6, r7
++
++ paddx.h r7, r0, r1 // r7:t = z2, r7:b = z1
++
++ mulhh.w r10, r0:b, r9:t // r10 = tmp0
++ mulhh.w r0, r0:t, r9:b // r0 = tmp1
++ ld.w r9, pc[coef_table_idct - . + 16]
++ add r10, r8
++ add r0, r6
++
++ ld.w lr, pc[coef_table_idct - . + 20]
++ machh.w r8, r1:b, r9:t // r8 = tmp2
++ machh.w r6, r1:t, r9:b // r6 = tmp3
++ mulhh.w r9, r7:b, lr:t // r9 = z1
++ mulhh.w r7, r7:t, lr:b // r7 = z2
++
++
++ add r10, r9
++ add r0, r7
++ add r8, r7
++ add r6, r9
++
++ add r1, r2, r6 // r1 = dataptr[DCTSIZE*0]
++ sub r2, r2, r6 // r2 = dataptr[DCTSIZE*7]
++ add r6, r4, r8 // r6 = dataptr[DCTSIZE*1]
++ sub r4, r4, r8 // r4 = dataptr[DCTSIZE*6]
++ add r8, r5, r0 // r8 = dataptr[DCTSIZE*2]
++ sub r5, r5, r0 // r5 = dataptr[DCTSIZE*5]
++ add r0, r3, r10 // r0 = dataptr[DCTSIZE*3]
++ sub r3, r3, r10 // r3 = dataptr[DCTSIZE*4]
++
++ satrnds r1 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r2 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r6 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r4 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r8 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r5 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r0 >> (CONST_BITS+PASS1_BITS+3), 9
++ satrnds r3 >> (CONST_BITS+PASS1_BITS+3), 9
++
++ packw.sh r7, r1, r6
++ packw.sh r6, r8, r0
++ packw.sh r5, r3, r5
++ packw.sh r4, r4, r2
++
++ stm r12, r4-r7
++ sub sp, -2 // Increment the dataptr
++ sub r12, -16
++
++ sub loop_cnt, 1 //Decrement loop counter
++ brne 0b //Perform loop one more time if loop_cnt is not zero
++
++ sub sp, -(8*8*2 - 8)
++ popm r0-r3, r4-r7, pc //Pop back registers and PC
++
++
++
++ .align 2
++coef_table_idct:
++ .short FIX_0_541196100, -FIX_1_847759065, FIX_0_765366865, FIX_1_175875602
++ .short - FIX_1_961570560, - FIX_0_390180644, FIX_0_298631336, FIX_2_053119869
++ .short FIX_3_072711026, FIX_1_501321110, - FIX_0_899976223, - FIX_2_562915447
++
+diff --git a/libavcodec/avr32/mc.S b/libavcodec/avr32/mc.S
+new file mode 100644
+index 0000000..07a002d
+--- /dev/null
++++ b/libavcodec/avr32/mc.S
+@@ -0,0 +1,434 @@
++/*
++ * Copyright (c) 2007 Atmel Corporation. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ *
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *
++ * 2. Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following
++ * disclaimer in the documentation and/or other materials provided
++ * with the distribution.
++ *
++ * 3. The name of ATMEL may not be used to endorse or promote products
++ * derived from this software without specific prior written
++ * permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
++ * DAMAGE.
++ */
++
++
++ /* Macro for masking the lowest bit of each byte in a
++ packed word */
++ .macro packedmask1 reg, round
++ .if \round
++ and \reg, \reg, r8 >> 1
++ .else
++ and \reg, r8
++ .endif
++ .endm
++
++ /* Macro for 8 pixel wide horizontal and vertical interpolation functions */
++ .macro pixels8_hv round, put
++
++
++ pushm r0-r7, lr
++
++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */
++
++ /* Rounding immediate */
++ .if \round
++ mov r8, lo(0x02020202)
++ orh r8, hi(0x02020202)
++ .else
++ mov r8, lo(0x01010101)
++ orh r8, hi(0x01010101)
++ .endif
++ mov r7, 2
++
++ /* Pixel naming convention :
++
++ |-----------------------------------------------------|
++ | s00 | s01 | s02 | s03 | s04 | s05 | s06 | s07 | s08 |
++ |----d00---d01---d02---d03---d04---d05---d06---d07----|
++ | s10 | s11 | s12 | s13 | s14 | s15 | s16 | s17 | s18 |
++ |-----------------------------------------------------|
++ */
++1:
++ ld.w r0, r11[0] // r0 = { s00, s01, s02, s03 }
++ ld.w r1, r11[1] // r1 = { s01, s02, s03, s04 }
++ mov lr, r9
++ eor r2, r0, r1
++ packedmask1 r2, \round
++ add r2, r8
++
++ paddh.ub r0, r0, r1 // r0 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2}
++
++ add r11, r10 // pixels += line_size
++ ld.w r1, r11[0] // r1 = { s10, s11, s12, s13 }
++ ld.w r3, r11[1] // r3 = { s11, s12, s13, s14 }
++0:
++ eor r5, r1, r3
++ packedmask1 r5, \round
++ add r2, r5
++
++ paddh.ub r1, r1, r3 // r1 = {(s10+s11)/2,(s11+s12)/2,(s12+s13)/2,(s13+s14)/2}
++ eor r6, r0, r1
++ packedmask1 r6, \round
++ add r2, r2, r6 << 1
++
++ ld.w r3, r11[r10] // r3 = { s00, s01, s02, s03 }
++ add r11, r10 // pixels += line_size
++ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 }
++
++ paddh.ub r0, r0, r1
++ plsr.b r2, r2, 2
++ padd.b r0, r0, r2 // r0 = { d00, d01, d02, d03 }
++
++ /* Next row */
++ .if \put
++ eor r2, r3, r4
++ packedmask1 r2, \round
++ add r2, r8
++ .else
++ ld.w r6, r12[0]
++ eor r2, r3, r4
++ packedmask1 r2, \round
++ add r2, r8
++ pavg.ub r0, r0, r6
++ .endif
++ st.w r12[0], r0 // Put data into the block
++
++ add r5, r2
++ paddh.ub r0, r3, r4 // r0 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2}
++
++ eor r6, r0, r1
++ packedmask1 r6, \round
++ add r5, r5, r6 << 1
++
++ .if \put
++ paddh.ub r1, r0, r1
++ plsr.b r5, r5, 2
++ padd.b r1, r1, r5 // r1 = { d10, d11, d12, d13 }
++ .else
++ ld.w r3, r12[r10]
++ paddh.ub r1, r0, r1
++ plsr.b r5, r5, 2
++ padd.b r1, r1, r5 // r1 = { d10, d11, d12, d13 }
++ pavg.ub r1, r1, r3
++ .endif
++
++ st.w r12[r10], r1 // Put data into the block
++
++
++ ld.w r1, r11[r10] // r1 = { s10, s11, s12, s13 }
++ add r11, r10 // pixels += line_size
++ ld.w r3, r11[1] // r3 = { s11, s12, s13, s14 }
++ add r12, r12, r10 << 1 // block += 2*line_size
++ sub lr, 2
++ brne 0b
++
++ mul r0, r10, r9 // r0 = line_size * h
++ rsub r0, r0, 4 // r0 = 4 - (line_size * h)
++ add r11, r0
++ sub r11, r10 // pixels += 4 - (line_size * (h+1))
++ add r12, r0 // pixels += 4 - (line_size * (h))
++ sub r7, 1
++ brne 1b
++
++ popm r0-r7, pc
++ .endm
++
++
++ /* Macro for 8 pixel wide vertical interpolation functions */
++
++ .macro pixels8_v round, put
++ pushm r4-r7,lr
++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */
++
++ /*
++ Pixel Naming Convention :
++ |-----------------------------------------------|
++ | s00 | s01 | s02 | s03 | s04 | s05 | s06 | s07 |
++ |-d00---d01---d02---d03---d04---d05---d06---d07-|
++ | s10 | s11 | s12 | s13 | s14 | s15 | s16 | s17 |
++ |-----------------------------------------------|
++ */
++ ld.w r8, r11[r10] // r8 = { s10, s11, s12, s13 }
++ ld.w lr, r11++ // lr = { s00, s01, s02, s03 }, src += 4
++ ld.w r7, r11[0] // r7 = { s04, s05, s06, s07 }
++ ld.w r6, r11[r10] // r6 = { s14, s15, s16, s17 }
++ sub r10, 4 // stride -= 4
++ add r11, r11, r10 << 1 // src += 2*stride
++ sub r11, -4 // src += 4
++
++0:
++ .if \round
++ pavg.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2}
++ pavg.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2}
++ .else
++ paddh.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2}
++ paddh.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2}
++ .endif
++
++ .if \put
++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 }
++ ld.w lr, r11++ // lr = { s10, s11, s12, s13 }, src += 4
++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 }
++ ld.w r7, r11[0] // r7 = { s14, s15, s16, s17 }
++ .else
++ ld.w lr, r12[0]
++ ld.w r7, r12[4]
++ pavg.ub r5, r5, lr
++ pavg.ub r4, r4, r7
++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 }
++ ld.w lr, r11++ // lr = { s10, s11, s12, s13 }, src += 4
++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 }
++ ld.w r7, r11[0] // r7 = { s14, s15, s16, s17 }
++ .endif
++ add r11, r10 // src += stride
++#ifdef USE_PREFETCH
++ pref r11[0]
++#endif
++ add r12, r10 // dst += stride
++
++ .if \round
++ pavg.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2}
++ pavg.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2}
++ .else
++ paddh.ub r5, r8, lr // r5 = {(s10+s00)/2,(s11+s01)/2,(s12+s02)/2,(s13+s03)/2}
++ paddh.ub r4, r6, r7 // r4 = {(s14+s04)/2,(s15+s05)/2,(s16+s06)/2,(s17+s07)/2}
++ .endif
++ .if \put
++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 }
++ ld.w r8, r11++ // r8 = { s10, s11, s12, s13 }, src += 4
++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 }
++ ld.w r6, r11[0] // r6 = { s14, s15, s16, s17 }
++ .else
++ ld.w r8, r12[0]
++ ld.w r6, r12[4]
++ pavg.ub r5, r5, r8
++ pavg.ub r4, r4, r6
++ st.w r12++, r5 // *dst++ = { d00, d01, d02, d03 }
++ ld.w r8, r11++ // r8 = { s10, s11, s12, s13 }, src += 4
++ st.w r12[0], r4 // *dst = { d04, d05, d06, d07 }
++ ld.w r6, r11[0] // r6 = { s14, s15, s16, s17 }
++ .endif
++
++ add r11, r10 // src += stride
++#ifdef USE_PREFETCH
++ pref r11[0]
++#endif
++ add r12, r10 // dst += stride
++ sub r9, 2
++ brne 0b
++
++ popm r4-r7,pc
++ .endm
++
++ /* Macro for 8 pixel wide horizontal interpolation functions */
++
++ .macro pixels8_h round, put
++ pushm r4-r7, lr
++
++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */
++ /*
++ Pixel Naming Convention:
++ |--------------------------------------------------------------------|
++ | s00 d00 s01 d01 s02 d02 s03 d03 s04 d04 s05 d05 s06 d06 s07 d07 s08|
++ |------|-------|-------|-------|-------|-------|-------|-------|-----|
++ | s10 d10 s11 d11 s12 d12 s13 d13 s14 d14 s15 d15 s16 d16 s17 d17 s18|
++ |--------------------------------------------------------------------|
++ */
++
++ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 }
++ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 }
++ ld.w r7, r11[4] // r7 = { s04, s05, s06, s07 }
++ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 }
++ add r11, r10 // src += stride
++
++0:
++ .if \round
++ pavg.ub lr, r8, lr // lr = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2}
++ pavg.ub r7, r6, r7 // r7 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2}
++ .else
++ paddh.ub lr, r8, lr // lr = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2}
++ paddh.ub r7, r6, r7 // r7 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2}
++ .endif
++ .if \put
++ ld.w r5, r11[0] // r5 = { s00, s01, s02, s03 }
++ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 }
++ .else
++ ld.w r8, r12[0]
++ ld.w r6, r12[4]
++ ld.w r5, r11[0] // r5 = { s00, s01, s02, s03 }
++ ld.w r4, r11[1] // r4 = { s01, s02, s03, s04 }
++ pavg.ub lr, lr, r8
++ pavg.ub r7, r7, r6
++ .endif
++ st.w r12[0], lr // dst = { d00, d01, d02, d03 }
++ st.w r12[4], r7 // dst = { d04, d05, d06, d07 }
++ ld.w r8, r11[4] // r8 = { s04, s05, s06, s07 }
++ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 }
++ add r11, r10 // src += stride
++#ifdef USE_PREFETCH
++ pref r11[0]
++#endif
++ add r12, r10 // dst += stride
++
++ .if \round
++ pavg.ub r5, r4, r5 // r5 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2}
++ pavg.ub r4, r6, r8 // r4 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2}
++ .else
++ paddh.ub r5, r4, r5 // r5 = {(s00+s01)/2,(s01+s02)/2,(s02+s03)/2,(s03+s04)/2}
++ paddh.ub r4, r6, r8 // r4 = {(s04+s05)/2,(s05+s06)/2,(s06+s07)/2,(s07+s08)/2}
++ .endif
++ .if \put
++ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 }
++ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 }
++ .else
++ ld.w r7, r12[0]
++ ld.w r6, r12[4]
++ ld.w lr, r11[0] // lr = { s00, s01, s02, s03 }
++ ld.w r8, r11[1] // r8 = { s01, s02, s03, s04 }
++ pavg.ub r5, r5, r7
++ pavg.ub r4, r4, r6
++ .endif
++ st.w r12[0], r5 // dst = { d00, d01, d02, d03 }
++ st.w r12[4], r4 // dst = { d04, d05, d06, d07 }
++ ld.w r7, r11[4] // r7 = { s04, s05, s06, s07 }
++ ld.w r6, r11[5] // r6 = { s05, s06, s07, s08 }
++ add r11, r10 // src += stride
++#ifdef USE_PREFETCH
++ pref r11[0]
++#endif
++ add r12, r10 // dst += stride
++ sub r9, 2
++ brne 0b
++
++ popm r4-r7, pc
++ .endm
++
++ /* Macro for 8 pixel wide copy functions */
++ .macro pixels8 put
++ stm --sp, r3-r7,lr
++ /* R12 = uint8_t *block, R11 = uint8_t pixels, R10 = int line_size, R9 = int h */
++ mov lr, r9
++ sub r3, r10, 2 // stride2 = stride - 2
++0:
++ .if \put
++ ld.w r9, r11[r10] // r9 = { s10, s11, s12, s13 }
++ ld.w r7, r11++ // r7 = { s00, s01, s02, s03 }, src += 4
++ ld.w r6, r11[0] // r6 = { s04, s05, s06, s07 }
++ ld.w r8, r11[r10] // r8 = { s14, s15, s16, s17 }
++ .else
++ ld.w r9, r11[r10] // r9 = { s10, s11, s12, s13 }
++ ld.d r4, r12[0]
++ ld.w r7, r11++ // r7 = { s00, s01, s02, s03 }, src += 4
++ ld.w r6, r11[0] // r6 = { s04, s05, s06, s07 }
++ ld.w r8, r11[r10] // r8 = { s14, s15, s16, s17 }
++ pavg.ub r6, r6, r4
++ pavg.ub r7, r7, r5
++ ld.d r4, r12[r10]
++ .endif
++ st.d r12, r6 // *dst = { s00, s01, s02, s03, s04, s05, s06, s07 }
++ add r11, r11, r3 << 1 // src += stride2 * 2
++ .ifeq \put
++ pavg.ub r8, r8, r4
++ pavg.ub r9, r9, r5
++ .endif
++ st.d r12[r10 << 0], r8 // *(dst + stride) = { s10, s11, s12, s13, s14, s15, s16, s17 }
++ add r12, r12, r10 << 1 // dst += 2*stride
++ sub lr, 2
++ brne 0b
++ ldm sp++, r3-r7,pc
++
++ .endm
++
++ .global put_no_rnd_pixels8_hv_avr32
++ .text
++put_no_rnd_pixels8_hv_avr32:
++ pixels8_hv 0, 1
++
++ .global put_pixels8_hv_avr32
++ .text
++put_pixels8_hv_avr32:
++ pixels8_hv 1, 1
++
++ .global avg_no_rnd_pixels8_hv_avr32
++ .text
++avg_no_rnd_pixels8_hv_avr32:
++ pixels8_hv 0, 0
++
++ .global avg_pixels8_hv_avr32
++ .text
++avg_pixels8_hv_avr32:
++ pixels8_hv 1, 0
++
++ .global put_no_rnd_pixels8_v_avr32
++ .text
++put_no_rnd_pixels8_v_avr32:
++ pixels8_v 0, 1
++
++ .global put_pixels8_v_avr32
++ .text
++put_pixels8_v_avr32:
++ pixels8_v 1, 1
++
++ .global avg_no_rnd_pixels8_v_avr32
++ .text
++avg_no_rnd_pixels8_v_avr32:
++ pixels8_v 0, 0
++
++ .global avg_pixels8_v_avr32
++ .text
++avg_pixels8_v_avr32:
++ pixels8_v 1, 0
++
++ .global put_no_rnd_pixels8_h_avr32
++ .text
++put_no_rnd_pixels8_h_avr32:
++ pixels8_h 0, 1
++
++ .global put_pixels8_h_avr32
++ .text
++put_pixels8_h_avr32:
++ pixels8_h 1, 1
++
++ .global avg_no_rnd_pixels8_h_avr32
++ .text
++avg_no_rnd_pixels8_h_avr32:
++ pixels8_h 0, 0
++
++ .global avg_pixels8_h_avr32
++ .text
++avg_pixels8_h_avr32:
++ pixels8_h 1, 0
++
++ .global put_pixels8_avr32
++ .global put_no_rnd_pixels8_avr32
++ .text
++put_pixels8_avr32:
++put_no_rnd_pixels8_avr32:
++ pixels8 1
++
++ .global avg_no_rnd_pixels8_avr32
++ .global avg_pixels8_avr32
++ .text
++avg_pixels8_avr32:
++avg_no_rnd_pixels8_avr32:
++ pixels8 0
+diff --git a/libavcodec/avr32/pico.h b/libavcodec/avr32/pico.h
+new file mode 100644
+index 0000000..32201ba
+--- /dev/null
++++ b/libavcodec/avr32/pico.h
+@@ -0,0 +1,260 @@
++/*
++ * Copyright (c) 2007 Atmel Corporation. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ *
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *
++ * 2. Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following
++ * disclaimer in the documentation and/or other materials provided
++ * with the distribution.
++ *
++ * 3. The name of ATMEL may not be used to endorse or promote products
++ * derived from this software without specific prior written
++ * permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
++ * DAMAGE.
++ */
++#ifndef __PICO_H__
++#define __PICO_H__
++
++
++
++/* Coprocessor Number */
++#define PICO_CPNO 1
++
++/* Pixel Coprocessor Register file */
++#define PICO_REGVECT_INPIX2 cr0
++#define PICO_REGVECT_INPIX1 cr1
++#define PICO_REGVECT_INPIX0 cr2
++#define PICO_REGVECT_OUTPIX2 cr3
++#define PICO_REGVECT_OUTPIX1 cr4
++#define PICO_REGVECT_OUTPIX0 cr5
++#define PICO_REGVECT_COEFF0_A cr6
++#define PICO_REGVECT_COEFF0_B cr7
++#define PICO_REGVECT_COEFF1_A cr8
++#define PICO_REGVECT_COEFF1_B cr9
++#define PICO_REGVECT_COEFF2_A cr10
++#define PICO_REGVECT_COEFF2_B cr11
++#define PICO_REGVECT_VMU0_OUT cr12
++#define PICO_REGVECT_VMU1_OUT cr13
++#define PICO_REGVECT_VMU2_OUT cr14
++#define PICO_REGVECT_CONFIG cr15
++
++#define PICO_INPIX2 0
++#define PICO_INPIX1 1
++#define PICO_INPIX0 2
++#define PICO_OUTPIX2 3
++#define PICO_OUTPIX1 4
++#define PICO_OUTPIX0 5
++#define PICO_COEFF0_A 6
++#define PICO_COEFF0_B 7
++#define PICO_COEFF1_A 8
++#define PICO_COEFF1_B 9
++#define PICO_COEFF2_A 10
++#define PICO_COEFF2_B 11
++#define PICO_VMU0_OUT 12
++#define PICO_VMU1_OUT 13
++#define PICO_VMU2_OUT 14
++#define PICO_CONFIG 15
++
++/* Config Register */
++#define PICO_COEFF_FRAC_BITS_OFFSET 0
++#define PICO_COEFF_FRAC_BITS_SIZE 4
++#define PICO_OFFSET_FRAC_BITS_OFFSET 4
++#define PICO_OFFSET_FRAC_BITS_SIZE 4
++#define PICO_INPUT_MODE_OFFSET 8
++#define PICO_INPUT_MODE_SIZE 2
++#define PICO_OUTPUT_MODE_OFFSET 10
++#define PICO_OUTPUT_MODE_SIZE 1
++
++struct pico_config_t {
++ unsigned int : 32 - PICO_OUTPUT_MODE_OFFSET - PICO_OUTPUT_MODE_SIZE;
++ unsigned int output_mode : PICO_OUTPUT_MODE_SIZE;
++ unsigned int input_mode : PICO_INPUT_MODE_SIZE;
++ unsigned int offset_frac_bits : PICO_OFFSET_FRAC_BITS_SIZE;
++ unsigned int coeff_frac_bits : PICO_COEFF_FRAC_BITS_SIZE;
++ int vmu2_out;
++ int vmu1_out;
++ int vmu0_out;
++ short coeff2_2;
++ short coeff2_3;
++ short coeff2_0;
++ short coeff2_1;
++ short coeff1_2;
++ short coeff1_3;
++ short coeff1_0;
++ short coeff1_1;
++ short coeff0_2;
++ short coeff0_3;
++ short coeff0_0;
++ short coeff0_1;
++};
++
++
++#define PICO_COEFF_FRAC_BITS(x) (x << PICO_COEFF_FRAC_BITS_OFFSET)
++#define PICO_OFFSET_FRAC_BITS(x) (x << PICO_OFFSET_FRAC_BITS_OFFSET)
++#define PICO_INPUT_MODE(x) (x << PICO_INPUT_MODE_OFFSET)
++#define PICO_OUTPUT_MODE(x) (x << PICO_OUTPUT_MODE_OFFSET)
++
++#define GET_PICO_COEFF_FRAC_BITS(x) ((x >> PICO_COEFF_FRAC_BITS_OFFSET)&((1 << PICO_COEFF_FRAC_BITS_SIZE)-1))
++#define GET_PICO_OFFSET_FRAC_BITS(x) ((x >> PICO_OFFSET_FRAC_BITS_OFFSET)&((1 << PICO_OFFSET_FRAC_BITS_SIZE)-1))
++#define GET_PICO_INPUT_MODE(x) ((x >> PICO_INPUT_MODE_OFFSET)&((1 << PICO_INPUT_MODE_SIZE)-1))
++#define GET_PICO_OUTPUT_MODE(x) ((x >> PICO_OUTPUT_MODE_OFFSET)&((1 << PICO_OUTPUT_MODE_SIZE)-1))
++
++enum pico_input_mode { PICO_TRANSFORMATION_MODE,
++ PICO_HOR_FILTER_MODE,
++ PICO_VERT_FILTER_MODE };
++
++enum pico_output_mode { PICO_PACKED_MODE,
++ PICO_PLANAR_MODE };
++
++/* Bits in coefficients */
++#define PICO_COEFF_BITS 12
++
++/* Operation bits */
++#define PICO_MATRIX (0)
++#define PICO_USE_ACC (1 << 2)
++#define PICO_SINGLE_VECTOR (1 << 3)
++
++
++#define __str(x...) #x
++#define __xstr(x...) __str(x)
++
++#define PICO_PUT_W(pico_reg, x) \
++ __builtin_mvrc_w(PICO_CPNO, pico_reg, x);
++#define PICO_GET_W(pico_reg) \
++ __builtin_mvcr_w(PICO_CPNO, pico_reg)
++
++#define PICO_MVCR_W(x, pico_reg) \
++ asm ("mvcr.w\tcp" __xstr(PICO_CPNO) ", %0, cr" __xstr(pico_reg) : "=r"(x));
++
++#define PICO_MVRC_W(pico_reg, x) \
++ asm ("mvrc.w\tcp" __xstr(PICO_CPNO) ", cr" __xstr(pico_reg) ", %0" :: "r"(x));
++
++#define PICO_PUT_D(pico_reg, x) \
++ __builtin_mvrc_d(PICO_CPNO, pico_reg, x);
++#define PICO_GET_D(pico_reg) \
++ __builtin_mvcr_d(PICO_CPNO, pico_reg)
++
++#define PICO_MVCR_D(x, pico_reg) \
++ asm volatile ("mvcr.d\tcp" __xstr(PICO_CPNO) ", %0, cr" __xstr(pico_reg) : "=r"(x));
++#define PICO_MVRC_D(pico_reg, x) \
++ asm volatile ("mvrc.d\tcp" __xstr(PICO_CPNO) ", cr" __xstr(pico_reg) ", %0" :: "r"(x));
++
++#define PICO_STCM_W(ptr, pico_regs...) \
++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr));
++#define PICO_STCM_D(ptr, pico_regs...) \
++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr));
++
++#define PICO_STCM_W_DEC(ptr, pico_regs...) \
++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr));
++#define PICO_STCM_D_DEC(ptr, pico_regs...) \
++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr));
++
++#define PICO_LDCM_W(ptr, pico_regs...) \
++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr));
++#define PICO_LDCM_D(ptr, pico_regs...) \
++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr));
++
++#define PICO_LDCM_W_INC(ptr, pico_regs...) \
++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr));
++#define PICO_LDCM_D_INC(ptr, pico_regs...) \
++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr));
++
++#define PICO_OP(op, dst_addr, addr0, addr1, addr2) \
++ __builtin_cop(PICO_CPNO, addr0, addr1, addr2, op | dst_addr);
++
++static inline void set_pico_config(struct pico_config_t *config){
++ PICO_LDCM_D(config,
++ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B,
++ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B,
++ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B,
++ PICO_REGVECT_VMU0_OUT, PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT, PICO_REGVECT_CONFIG);
++}
++
++static inline void get_pico_config(struct pico_config_t *config){
++ PICO_STCM_D(config,
++ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B,
++ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B,
++ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B,
++ PICO_REGVECT_VMU0_OUT, PICO_REGVECT_VMU1_OUT,
++ PICO_REGVECT_VMU2_OUT, PICO_REGVECT_CONFIG);
++}
++
++static inline void dump_pico_config(){
++ struct pico_config_t pico_config;
++ char *input_mode, *output_mode;
++ get_pico_config(&pico_config);
++
++
++ av_log(NULL, AV_LOG_INFO, "Dumping pico configuration:\n\n");
++ av_log(NULL, AV_LOG_INFO, "\tcoeff_frac_bits = %d\n", pico_config.coeff_frac_bits);
++ av_log(NULL, AV_LOG_INFO, "\toffset_frac_bits = %d\n", pico_config.offset_frac_bits);
++
++ switch ( pico_config.input_mode ){
++ case PICO_TRANSFORMATION_MODE:
++ input_mode = "Transformation Mode";
++ break;
++ case PICO_HOR_FILTER_MODE:
++ input_mode = "Horisontal Filter Mode";
++ break;
++ case PICO_VERT_FILTER_MODE:
++ input_mode = "Vertical Filter Mode";
++ break;
++ default:
++ input_mode = "Unknown Mode!!";
++ break;
++ }
++ av_log(NULL, AV_LOG_INFO, "\tinput_mode = %s\n", input_mode);
++
++ switch ( pico_config.output_mode ){
++ case PICO_PLANAR_MODE:
++ output_mode = "Planar Mode";
++ break;
++ case PICO_PACKED_MODE:
++ output_mode = "Packed Mode";
++ break;
++ default:
++ output_mode = "Unknown Mode!!";
++ break;
++ }
++
++ av_log(NULL, AV_LOG_INFO, "\toutput_mode = %s\n", output_mode);
++
++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_0 = %f\n", (float)pico_config.coeff0_0/(float)(1 << pico_config.coeff_frac_bits));
++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_1 = %f\n", (float)pico_config.coeff0_1/(float)(1 << pico_config.coeff_frac_bits));
++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_2 = %f\n", (float)pico_config.coeff0_2/(float)(1 << pico_config.coeff_frac_bits));
++ av_log(NULL, AV_LOG_INFO, "\tCoeff0_3 = %f\n", (float)pico_config.coeff0_3/(float)(1 << pico_config.offset_frac_bits));
++
++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_0 = %f\n", (float)pico_config.coeff1_0/(float)(1 << pico_config.coeff_frac_bits));
++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_1 = %f\n", (float)pico_config.coeff1_1/(float)(1 << pico_config.coeff_frac_bits));
++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_2 = %f\n", (float)pico_config.coeff1_2/(float)(1 << pico_config.coeff_frac_bits));
++ av_log(NULL, AV_LOG_INFO, "\tCoeff1_3 = %f\n", (float)pico_config.coeff1_3/(float)(1 << pico_config.offset_frac_bits));
++
++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_0 = %f\n", (float)pico_config.coeff2_0/(float)(1 << pico_config.coeff_frac_bits));
++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_1 = %f\n", (float)pico_config.coeff2_1/(float)(1 << pico_config.coeff_frac_bits));
++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_2 = %f\n", (float)pico_config.coeff2_2/(float)(1 << pico_config.coeff_frac_bits));
++ av_log(NULL, AV_LOG_INFO, "\tCoeff2_3 = %f\n", (float)pico_config.coeff2_3/(float)(1 << pico_config.offset_frac_bits));
++}
++
++
++
++#endif
++
+diff --git a/libavcodec/bitstream.h b/libavcodec/bitstream.h
+index 26b4f8d..1f8fabf 100644
+--- a/libavcodec/bitstream.h
++++ b/libavcodec/bitstream.h
+@@ -171,7 +171,7 @@ typedef struct RL_VLC_ELEM {
+ #endif
+
+ /* used to avoid missaligned exceptions on some archs (alpha, ...) */
+-#if defined(ARCH_X86) || defined(ARCH_X86_64)
++#if defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_AVR32)
+ # define unaligned16(a) (*(const uint16_t*)(a))
+ # define unaligned32(a) (*(const uint32_t*)(a))
+ # define unaligned64(a) (*(const uint64_t*)(a))
+@@ -813,6 +813,44 @@ void free_vlc(VLC *vlc);
+ * if the vlc code is invalid and max_depth>1 than the number of bits removed
+ * is undefined
+ */
++
++#if defined(ARCH_AVR32)
++#define GET_VLC(code, name, gb, table, bits, max_depth)\
++{\
++ int n, index, nb_bits;\
++ union { VLC_TYPE vlc[2];\
++ uint32_t u32; } table_elem;\
++\
++ index= SHOW_UBITS(name, gb, bits);\
++ table_elem.u32 = unaligned32(&table[index]); \
++ code = table_elem.vlc[0];\
++ n = table_elem.vlc[1];\
++\
++ if(max_depth > 1 && n < 0 ){\
++ LAST_SKIP_BITS(name, gb, bits)\
++ UPDATE_CACHE(name, gb)\
++\
++ nb_bits = -n;\
++\
++ index= SHOW_UBITS(name, gb, nb_bits) + code;\
++ table_elem.u32 = unaligned32(&table[index]); \
++ code = table_elem.vlc[0];\
++ n = table_elem.vlc[1];\
++ if(max_depth > 2 && n < 0){\
++ LAST_SKIP_BITS(name, gb, nb_bits)\
++ UPDATE_CACHE(name, gb)\
++\
++ nb_bits = -n;\
++\
++ index= SHOW_UBITS(name, gb, nb_bits) + code;\
++ code = table[index][0];\
++ n = table[index][1];\
++ }\
++ }\
++ SKIP_BITS(name, gb, n)\
++}
++
++#else
+ #define GET_VLC(code, name, gb, table, bits, max_depth)\
+ {\
+ int n, index, nb_bits;\
+@@ -821,7 +859,7 @@ void free_vlc(VLC *vlc);
+ code = table[index][0];\
+ n = table[index][1];\
+ \
+- if(max_depth > 1 && n < 0){\
++ if(max_depth > 1 && n < 0 ){\
+ LAST_SKIP_BITS(name, gb, bits)\
+ UPDATE_CACHE(name, gb)\
+ \
+@@ -843,7 +881,38 @@ void free_vlc(VLC *vlc);
+ }\
+ SKIP_BITS(name, gb, n)\
+ }
++#endif
+
++#if defined(ARCH_AVR32)
++#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\
++{\
++ int n, index, nb_bits;\
++ union { RL_VLC_ELEM vlc;\
++ uint32_t u32; } table_elem;\
++\
++ index= SHOW_UBITS(name, gb, bits);\
++ table_elem.u32 = unaligned32(&table[index]); \
++ level = table_elem.vlc.level;\
++ n = table_elem.vlc.len;\
++\
++ if(max_depth > 1 && n < 0 ){\
++ SKIP_BITS(name, gb, bits)\
++ if(need_update){\
++ UPDATE_CACHE(name, gb)\
++ }\
++\
++ nb_bits = -n;\
++\
++ index= SHOW_UBITS(name, gb, nb_bits) + level;\
++ table_elem.u32 = unaligned32(&table[index]); \
++ level = table_elem.vlc.level;\
++ n = table_elem.vlc.len;\
++ }\
++ run= table_elem.vlc.run;\
++ SKIP_BITS(name, gb, n)\
++}
++
++#else
+ #define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\
+ {\
+ int n, index, nb_bits;\
+@@ -852,7 +921,7 @@ void free_vlc(VLC *vlc);
+ level = table[index].level;\
+ n = table[index].len;\
+ \
+- if(max_depth > 1 && n < 0){\
++ if(max_depth > 1 && n < 0 ){\
+ SKIP_BITS(name, gb, bits)\
+ if(need_update){\
+ UPDATE_CACHE(name, gb)\
+@@ -867,7 +936,7 @@ void free_vlc(VLC *vlc);
+ run= table[index].run;\
+ SKIP_BITS(name, gb, n)\
+ }
+-
++#endif
+
+ /**
+ * parses a vlc code, faster then get_vlc()
+diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c
+index 56c42b9..8fc10c6 100644
+--- a/libavcodec/dsputil.c
++++ b/libavcodec/dsputil.c
+@@ -4197,6 +4197,9 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx)
+ #ifdef ARCH_BFIN
+ dsputil_init_bfin(c,avctx);
+ #endif
++#ifdef ARCH_AVR32
++ dsputil_init_avr32(c,avctx);
++#endif
+
+ for(i=0; i<64; i++){
+ if(!c->put_2tap_qpel_pixels_tab[0][i])
+diff --git a/libavcodec/h264.c b/libavcodec/h264.c
+index 865e80a..8f7c3f1 100644
+--- a/libavcodec/h264.c
++++ b/libavcodec/h264.c
+@@ -3258,7 +3258,12 @@ static void free_tables(H264Context *h){
+
+ static void init_dequant8_coeff_table(H264Context *h){
+ int i,q,x;
++#ifdef ARCH_AVR32
++ const int transpose = 0;
++#else
+ const int transpose = (h->s.dsp.h264_idct8_add != ff_h264_idct8_add_c); //FIXME ugly
++#endif
++
+ h->dequant8_coeff[0] = h->dequant8_buffer[0];
+ h->dequant8_coeff[1] = h->dequant8_buffer[1];
+
+@@ -3281,7 +3286,13 @@ static void init_dequant8_coeff_table(H264Context *h){
+
+ static void init_dequant4_coeff_table(H264Context *h){
+ int i,j,q,x;
++ // Yes this is ugly as hell....
++#ifdef ARCH_AVR32
++ const int transpose = 0;
++#else
+ const int transpose = (h->s.dsp.h264_idct_add != ff_h264_idct_add_c); //FIXME ugly
++#endif
++
+ for(i=0; i<6; i++ ){
+ h->dequant4_coeff[i] = h->dequant4_buffer[i];
+ for(j=0; j<i; j++){
+@@ -4663,7 +4674,11 @@ static int decode_slice_header(H264Context *h){
+ if (MPV_common_init(s) < 0)
+ return -1;
+
++#ifdef ARCH_AVR32
++ if ( 1 ){
++#else
+ if(s->dsp.h264_idct_add == ff_h264_idct_add_c){ //FIXME little ugly
++#endif
+ memcpy(h->zigzag_scan, zigzag_scan, 16*sizeof(uint8_t));
+ memcpy(h-> field_scan, field_scan, 16*sizeof(uint8_t));
+ }else{
+diff --git a/libavutil/common.h b/libavutil/common.h
+index 3ae5971..7e52b90 100644
+--- a/libavutil/common.h
++++ b/libavutil/common.h
+@@ -283,23 +283,39 @@ static inline int mid_pred(int a, int b, int c)
+ * @param amax maximum value of the clip range
+ * @return cliped value
+ */
++#if defined(ARCH_AVR32)
++#define clip(a, amin, amax) \
++ ({ int __tmp__; \
++ asm ("min\t%0, %1, %2\n" \
++ "max\t%0, %0, %3\n" \
++ : "=&r"(__tmp__) : "r"(a), "r"(amax), "r"(amin)); \
++ __tmp__; })
++#else
+ static inline int clip(int a, int amin, int amax)
+ {
+ if (a < amin) return amin;
+ else if (a > amax) return amax;
+ else return a;
+ }
++#endif
+
+ /**
+ * clip a signed integer value into the 0-255 range
+ * @param a value to clip
+ * @return cliped value
+ */
++#if defined(ARCH_AVR32)
++#define clip_uint8(a) \
++ ({ int __tmp__ = a; \
++ asm ("satu\t%0 >> 0, 8" : "+r"(__tmp__)); \
++ __tmp__; })
++#else
+ static inline uint8_t clip_uint8(int a)
+ {
+ if (a&(~255)) return (-a)>>31;
+ else return a;
+ }
++#endif
+
+ /* math */
+ int64_t ff_gcd(int64_t a, int64_t b);
+diff --git a/libavutil/internal.h b/libavutil/internal.h
+index 285d304..a8b0718 100644
+--- a/libavutil/internal.h
++++ b/libavutil/internal.h
+@@ -210,6 +210,15 @@ if((y)<(x)){\
+ }\
+ }
+
++/* XXX: Hack for uclibc which declares lrintf but does not implement it... */
++#ifdef ARCH_AVR32
++#undef HAVE_LRINTF
++#define HAVE_LRINTF 1
++#define lrintf(x) rint(x)
++#define llrint(x) (long long)rint(x)
++#endif
++
++
+ #ifndef HAVE_LRINTF
+ /* XXX: add ISOC specific test to avoid specific BSD testing. */
+ /* better than nothing implementation. */
+diff --git a/libfaad2/common.h b/libfaad2/common.h
+index f809042..6c5fb21 100644
+--- a/libfaad2/common.h
++++ b/libfaad2/common.h
+@@ -67,7 +67,7 @@ extern "C" {
+ /* Use if target platform has address generators with autoincrement */
+ //#define PREFER_POINTERS
+
+-#if defined(_WIN32_WCE) || defined(__arm__)
++#if defined(_WIN32_WCE) || defined(__arm__) || defined(__avr32__)
+ #define FIXED_POINT
+ #endif
+
+diff --git a/libmpcodecs/ad_libmad.c b/libmpcodecs/ad_libmad.c
+index 076359a..51b77fe 100644
+--- a/libmpcodecs/ad_libmad.c
++++ b/libmpcodecs/ad_libmad.c
+@@ -86,6 +86,11 @@ static int init(sh_audio_t *sh){
+ sh->channels=(this->frame.header.mode == MAD_MODE_SINGLE_CHANNEL) ? 1 : 2;
+ sh->samplerate=this->frame.header.samplerate;
+ sh->i_bps=this->frame.header.bitrate/8;
++#ifdef WORDS_BIGENDIAN
++ sh->sample_format = AF_FORMAT_S16_BE;
++#else
++ sh->sample_format = AF_FORMAT_S16_LE;
++#endif
+ sh->samplesize=2;
+
+ return 1;
+diff --git a/libswscale/pico-avr32.h b/libswscale/pico-avr32.h
+new file mode 100644
+index 0000000..7ac6200
+--- /dev/null
++++ b/libswscale/pico-avr32.h
+@@ -0,0 +1,137 @@
++/*
++ * Copyright (c) 2007 Atmel Corporation. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ *
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *
++ * 2. Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following
++ * disclaimer in the documentation and/or other materials provided
++ * with the distribution.
++ *
++ * 3. The name of ATMEL may not be used to endorse or promote products
++ * derived from this software without specific prior written
++ * permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
++ * DAMAGE.
++ */
++#ifndef __PICO_H__
++#define __PICO_H__
++
++/* Coprocessor Number */
++#define PICO_CPNO 1
++
++/* Pixel Coprocessor Register file */
++#define PICO_REGVECT_INPIX2 cr0
++#define PICO_REGVECT_INPIX1 cr1
++#define PICO_REGVECT_INPIX0 cr2
++#define PICO_REGVECT_OUTPIX2 cr3
++#define PICO_REGVECT_OUTPIX1 cr4
++#define PICO_REGVECT_OUTPIX0 cr5
++#define PICO_REGVECT_COEFF0_A cr6
++#define PICO_REGVECT_COEFF0_B cr7
++#define PICO_REGVECT_COEFF1_A cr8
++#define PICO_REGVECT_COEFF1_B cr9
++#define PICO_REGVECT_COEFF2_A cr10
++#define PICO_REGVECT_COEFF2_B cr11
++#define PICO_REGVECT_VMU0_OUT cr12
++#define PICO_REGVECT_VMU1_OUT cr13
++#define PICO_REGVECT_VMU2_OUT cr14
++#define PICO_REGVECT_CONFIG cr15
++
++#define PICO_INPIX2 0
++#define PICO_INPIX1 1
++#define PICO_INPIX0 2
++#define PICO_OUTPIX2 3
++#define PICO_OUTPIX1 4
++#define PICO_OUTPIX0 5
++#define PICO_COEFF0_A 6
++#define PICO_COEFF0_B 7
++#define PICO_COEFF1_A 8
++#define PICO_COEFF1_B 9
++#define PICO_COEFF2_A 10
++#define PICO_COEFF2_B 11
++#define PICO_VMU0_OUT 12
++#define PICO_VMU1_OUT 13
++#define PICO_VMU2_OUT 14
++#define PICO_CONFIG 15
++
++/* Config Register */
++#define PICO_COEFF_FRAC_BITS 0
++#define PICO_COEFF_FRAC_BITS_WIDTH 4
++#define PICO_OFFSET_FRAC_BITS 4
++#define PICO_OFFSET_FRAC_BITS_WIDTH 4
++#define PICO_INPUT_MODE 8
++#define PICO_INPUT_MODE_WIDTH 2
++#define PICO_OUTPUT_MODE 10
++
++#define PICO_TRANSFORMATION_MODE 0
++#define PICO_HOR_FILTER_MODE 1
++#define PICO_VERT_FILTER_MODE 2
++
++#define PICO_PLANAR_MODE 1
++#define PICO_PACKED_MODE 0
++
++/* Bits in coefficients */
++#define PICO_COEFF_BITS 12
++
++/* Operation bits */
++#define PICO_USE_ACC (1 << 2)
++#define PICO_SINGLE_VECTOR (1 << 3)
++
++
++#define __str(x...) #x
++#define __xstr(x...) __str(x)
++
++#define PICO_PUT_W(pico_reg, x) \
++ __builtin_mvrc_w(PICO_CPNO, pico_reg, x);
++#define PICO_GET_W(pico_reg) \
++ __builtin_mvcr_w(PICO_CPNO, pico_reg)
++
++#define PICO_PUT_D(pico_reg, x) \
++ __builtin_mvrc_d(PICO_CPNO, pico_reg, x);
++#define PICO_GET_D(pico_reg) \
++ __builtin_mvcr_d(PICO_CPNO, pico_reg)
++
++
++#define PICO_STCM_W(ptr, pico_regs...) \
++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr));
++#define PICO_STCM_D(ptr, pico_regs...) \
++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr));
++
++#define PICO_STCM_W_DEC(ptr, pico_regs...) \
++ asm volatile ("stcm.w\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr));
++#define PICO_STCM_D_DEC(ptr, pico_regs...) \
++ asm volatile ("stcm.d\tcp" __xstr(PICO_CPNO) ", --%0," __xstr(pico_regs) : "+r"(ptr));
++
++#define PICO_LDCM_W(ptr, pico_regs...) \
++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr));
++#define PICO_LDCM_D(ptr, pico_regs...) \
++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0," __xstr(pico_regs) :: "r"(ptr));
++
++#define PICO_LDCM_W_INC(ptr, pico_regs...) \
++ asm volatile ("ldcm.w\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr));
++#define PICO_LDCM_D_INC(ptr, pico_regs...) \
++ asm volatile ("ldcm.d\tcp" __xstr(PICO_CPNO) ", %0++," __xstr(pico_regs) : "+r"(ptr));
++
++#define PICO_OP(op, dst_addr, addr0, addr1, addr2) \
++ __builtin_cop(PICO_CPNO, addr0, addr1, addr2, op | dst_addr);
++
++
++#endif
++
+diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h
+index ecd28f5..3221d0c 100644
+--- a/libswscale/swscale_internal.h
++++ b/libswscale/swscale_internal.h
+@@ -173,7 +173,7 @@ typedef struct SwsContext{
+ SwsFunc yuv2rgb_get_func_ptr (SwsContext *c);
+ int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation);
+
+-char *sws_format_name(int format);
++char *sws_format_name(enum PixelFormat format);
+
+ //FIXME replace this with something faster
+ #define isPlanarYUV(x) ((x)==PIX_FMT_YUV410P || (x)==PIX_FMT_YUV420P \
+diff --git a/libswscale/yuv2rgb.c b/libswscale/yuv2rgb.c
+index 71759bc..fa83985 100644
+--- a/libswscale/yuv2rgb.c
++++ b/libswscale/yuv2rgb.c
+@@ -44,6 +44,10 @@
+ #include "yuv2rgb_mlib.c"
+ #endif
+
++#ifdef ARCH_AVR32
++#include "yuv2rgb_avr32.c"
++#endif
++
+ #define DITHER1XBPP // only for mmx
+
+ const uint8_t __attribute__((aligned(8))) dither_2x2_4[2][8]={
+@@ -601,6 +605,12 @@ SwsFunc yuv2rgb_get_func_ptr (SwsContext *c)
+ if(t) return t;
+ }
+ #endif
++#ifdef ARCH_AVR32
++ {
++ SwsFunc t= yuv2rgb_init_avr32(c);
++ if(t) return t;
++ }
++#endif
+ #ifdef HAVE_ALTIVEC
+ if (c->flags & SWS_CPU_CAPS_ALTIVEC)
+ {
+@@ -678,6 +688,10 @@ int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange,
+ //printf("%lld %lld %lld %lld %lld\n", cy, crv, cbu, cgu, cgv);
+ oy -= 256*brightness;
+
++#ifdef ARCH_AVR32
++ yuv2rgb_c_init_tables_avr32 (c, inv_table, fullRange, brightness, contrast, saturation);
++#endif
++
+ for (i = 0; i < 1024; i++) {
+ int j;
+
+diff --git a/libswscale/yuv2rgb_avr32.c b/libswscale/yuv2rgb_avr32.c
+new file mode 100644
+index 0000000..4a8341e
+--- /dev/null
++++ b/libswscale/yuv2rgb_avr32.c
+@@ -0,0 +1,416 @@
++/*
++ * Copyright (c) 2007 Atmel Corporation. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ *
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *
++ * 2. Redistributions in binary form must reproduce the above
++ * copyright notice, this list of conditions and the following
++ * disclaimer in the documentation and/or other materials provided
++ * with the distribution.
++ *
++ * 3. The name of ATMEL may not be used to endorse or promote products
++ * derived from this software without specific prior written
++ * permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL
++ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
++ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
++ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
++ * DAMAGE.
++ */
++#include "pico-avr32.h"
++
++
++#define RGB(uv_part) \
++ __asm__ volatile ( \
++ "ld.w\t%0, %3[%7:" uv_part " << 2]\n\t" /* tmp = c->table_gV[V] */ \
++ "ld.w\t%1, %4[%8:" uv_part " << 2]\n\t" /* g = c->table_gU[U] */ \
++ "ld.w\t%2, %5[%8:" uv_part " << 2]\n\t" /* b = c->table_bU[U] */ \
++ "add\t%1, %0\n\t" /* g += tmp */\
++ "ld.w\t%0, %6[%7:" uv_part " << 2]" /* r = c->table_rV[V] */ \
++ : "=&r" (r), "=&r" (g), "=&r" (b) \
++ : "r" (&c->table_gV[0]), "r" (&c->table_gU[0]),"r" (&c->table_bU[0]), \
++ "r" (&c->table_rV[0]), "r" (V), "r" (U));
++
++
++#undef YUV2RGB1
++#define YUV2RGB1(dst, src, y, idx) \
++ { int tmp2; __asm__ volatile ( \
++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \
++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \
++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[2] = tmp; */ \
++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \
++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \
++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \
++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[0] = tmp; */ \
++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \
++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 3], %1\n\t" /* dst_1[5] = tmp; */ \
++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \
++ "st.b\t%7[6*%8 + 5], %1" /* dst_1[3] = tmp; */ \
++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \
++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); }
++
++#undef YUV2RGB2
++#define YUV2RGB2(dst, src, y, idx) \
++ { int tmp2; __asm__ volatile ( \
++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \
++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \
++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[2] = tmp; */ \
++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \
++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \
++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \
++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[0] = tmp; */ \
++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \
++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 3], %1\n\t" /* dst_1[5] = tmp; */ \
++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \
++ "st.b\t%7[6*%8 + 5], %1" /* dst_1[3] = tmp; */ \
++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \
++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); }
++
++
++#undef YUV2BGR1
++#define YUV2BGR1(dst, src, y, idx) \
++ { int tmp2; __asm__ volatile ( \
++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \
++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \
++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[2] = tmp; */ \
++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \
++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \
++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \
++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[0] = tmp; */ \
++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \
++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 5], %1\n\t" /* dst_1[5] = tmp; */ \
++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \
++ "st.b\t%7[6*%8 + 3], %1" /* dst_1[3] = tmp; */ \
++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \
++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); }
++
++#undef YUV2BGR2
++#define YUV2BGR2(dst, src, y, idx) \
++ { int tmp2; __asm__ volatile ( \
++ "ld.ub\t%0, %3[2*%8]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \
++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 24) & 0xFF] */ \
++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 24) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 2], %1\n\t" /* dst_1[2] = tmp; */ \
++ "st.b\t%7[6*%8 + 1], %2\n\t" /* dst_1[1] = tmp; */ \
++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 24) & 0xFF] */ \
++ "ld.ub\t%0, %3[2*%8 + 1]\n\t" /* Y = ((uint32_t*)py_1)[0] */ \
++ "st.b\t%7[6*%8 + 0], %1\n\t" /* dst_1[0] = tmp; */ \
++ "ld.ub\t%1, %4[%0]\n\t" /* tmp = r[(Y >> 16) & 0xFF] */ \
++ "ld.ub\t%2, %5[%0]\n\t" /* tmp = g[(Y >> 16) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 5], %1\n\t" /* dst_1[5] = tmp; */ \
++ "ld.ub\t%1, %6[%0]\n\t" /* tmp = b[(Y >> 16) & 0xFF] */ \
++ "st.b\t%7[6*%8 + 4], %2\n\t" /* dst_1[4] = tmp; */ \
++ "st.b\t%7[6*%8 + 3], %1" /* dst_1[3] = tmp; */ \
++ : "=&r" (y), "=&r" (tmp), "=&r" (tmp2) \
++ : "r" (src), "r" (r), "r" (g), "r" (b), "r" (dst), "i" (idx)); }
++
++
++
++int yuv2bgr24_avr32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
++ int srcSliceH, uint8_t* dst[], int dstStride[]){
++ int y;
++
++ if(c->srcFormat == PIX_FMT_YUV422P){
++ srcStride[1] *= 2;
++ srcStride[2] *= 2;
++ }
++
++
++ for(y=0; y<srcSliceH; y+=2){
++ uint8_t *dst_1= (uint8_t*)(dst[0] + (y+srcSliceY )*dstStride[0]);
++ uint8_t *dst_2= (uint8_t*)(dst[0] + (y+srcSliceY+1)*dstStride[0]);
++ uint32_t *r, *g, *b;
++ uint8_t *py_1= src[0] + y*srcStride[0];
++ uint8_t *py_2= py_1 + srcStride[0];
++ uint8_t *pu= src[1] + (y>>1)*srcStride[1];
++ uint8_t *pv= src[2] + (y>>1)*srcStride[2];
++ unsigned int h_size= c->dstW>>3;
++ while (h_size--) {
++ uint32_t U, V, Y1, Y2, tmp;
++ U = ((uint32_t*)pu)[0];
++ V = ((uint32_t*)pv)[0];
++
++ RGB("t")
++ YUV2BGR1(dst_1, py_1, Y1, 0)
++ YUV2BGR1(dst_2, py_2, Y2, 0)
++
++ RGB("u")
++ YUV2BGR2(dst_1, py_1, Y1, 1)
++ YUV2BGR2(dst_2, py_2, Y2, 1)
++
++ RGB("l")
++ YUV2BGR1(dst_1, py_1, Y1, 2)
++ YUV2BGR1(dst_2, py_2, Y2, 2)
++
++ RGB("b")
++ YUV2BGR2(dst_1, py_1, Y1, 3)
++ YUV2BGR2(dst_2, py_2, Y2, 3)
++
++
++
++ pu += 4;
++ pv += 4;
++ py_1 += 8;
++ py_2 += 8;
++ dst_1 += 24;
++ dst_2 += 24;
++ }
++ }
++ return srcSliceH;
++}
++
++
++
++static int yuv2rgb24_avr32(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
++ int srcSliceH, uint8_t* dst[], int dstStride[]){
++ int y;
++
++ if(c->srcFormat == PIX_FMT_YUV422P){
++ srcStride[1] *= 2;
++ srcStride[2] *= 2;
++ }
++ for(y=0; y<srcSliceH; y+=2){
++ uint8_t *dst_1= (uint8_t*)(dst[0] + (y+srcSliceY )*dstStride[0]);
++ uint8_t *dst_2= (uint8_t*)(dst[0] + (y+srcSliceY+1)*dstStride[0]);
++ uint8_t *r, *g, *b;
++ uint8_t *py_1= src[0] + y*srcStride[0];
++ uint8_t *py_2= py_1 + srcStride[0];
++ uint8_t *pu= src[1] + (y>>1)*srcStride[1];
++ uint8_t *pv= src[2] + (y>>1)*srcStride[2];
++ unsigned int h_size= c->dstW>>3;
++ while (h_size--) {
++ uint32_t U, V, Y1, Y2, tmp;
++ U = ((uint32_t*)pu)[0];
++ V = ((uint32_t*)pv)[0];
++
++ RGB("t")
++ YUV2RGB1(dst_1, py_1, Y1, 0)
++ YUV2RGB1(dst_2, py_2, Y2, 0)
++
++ RGB("u")
++ YUV2RGB2(dst_1, py_1, Y1, 1)
++ YUV2RGB2(dst_2, py_2, Y2, 1)
++
++ RGB("l")
++ YUV2RGB1(dst_1, py_1, Y1, 2)
++ YUV2RGB1(dst_2, py_2, Y2, 2)
++
++ RGB("b")
++ YUV2RGB2(dst_1, py_1, Y1, 3)
++ YUV2RGB2(dst_2, py_2, Y2, 3)
++
++ pu += 4;
++ pv += 4;
++ py_1 += 8;
++ py_2 += 8;
++ dst_1 += 24;
++ dst_2 += 24;
++ }
++ }
++ return srcSliceH;
++}
++
++#define SCALE(x, bits) (((x) + ( 1 << (bits - 1))) >> bits)
++#define COEFF_FRAC_BITS 9
++#define OFFSET_FRAC_BITS 2
++
++/* Coefficients used in the pico */
++static struct {
++ short coeff2_2;
++ short coeff2_3;
++ short coeff2_0;
++ short coeff2_1;
++ short coeff1_2;
++ short coeff1_3;
++ short coeff1_0;
++ short coeff1_1;
++ short coeff0_2;
++ short coeff0_3;
++ short coeff0_0;
++ short coeff0_1;
++} pico_coeff;
++
++
++static int yuv2bgr24_avr32_pico(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
++ int srcSliceH, uint8_t* dst[], int dstStride[]){
++ int y;
++ static int first_time = 1;
++
++ /* Initialize pico */
++ PICO_LDCM_D(&pico_coeff,
++ PICO_REGVECT_COEFF0_A, PICO_REGVECT_COEFF0_B,
++ PICO_REGVECT_COEFF1_A, PICO_REGVECT_COEFF1_B,
++ PICO_REGVECT_COEFF2_A, PICO_REGVECT_COEFF2_B);
++
++ PICO_PUT_W(PICO_CONFIG,
++ (PICO_PACKED_MODE << PICO_OUTPUT_MODE
++ | PICO_TRANSFORMATION_MODE << PICO_INPUT_MODE
++ | OFFSET_FRAC_BITS << PICO_OFFSET_FRAC_BITS
++ | COEFF_FRAC_BITS << PICO_COEFF_FRAC_BITS));
++
++
++ if(c->srcFormat == PIX_FMT_YUV422P){
++ srcStride[1] *= 2;
++ srcStride[2] *= 2;
++ }
++
++ for(y=0; y<srcSliceH; y+=2){
++ uint8_t *dst_1= (uint8_t*)(dst[0] + (y+srcSliceY )*dstStride[0]);
++ uint8_t *dst_2= (uint8_t*)(dst[0] + (y+srcSliceY+1)*dstStride[0]);
++ uint8_t *r, *g, *b;
++ uint8_t *py_1= src[0] + y*srcStride[0];
++ uint8_t *py_2= py_1 + srcStride[0];
++ uint8_t *pu= src[1] + (y>>1)*srcStride[1];
++ uint8_t *pv= src[2] + (y>>1)*srcStride[2];
++ unsigned int h_size= c->dstW>>3;
++ int *py_1_int = (int *)py_1;
++ int *py_2_int = (int *)py_2;
++ int *pu_int = (int *)pu;
++ int *pv_int = (int *)pv;
++ while (h_size--) {
++ PICO_PUT_W(PICO_INPIX0, *py_1_int++);
++ PICO_PUT_W(PICO_INPIX1, *pu_int++);
++ PICO_PUT_W(PICO_INPIX2, *pv_int++);
++ PICO_OP(0, 0, 0, 4, 8);
++ PICO_OP(0, 1, 1, 4, 8);
++ PICO_OP(0, 2, 2, 5, 9);
++ PICO_OP(0, 3, 3, 5, 9);
++ PICO_PUT_W(PICO_INPIX0, *py_1_int++);
++ PICO_STCM_W(dst_1, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0);
++ PICO_OP(0, 0, 0, 6, 10);
++ PICO_OP(0, 1, 1, 6, 10);
++ PICO_OP(0, 2, 2, 7, 11);
++ PICO_OP(0, 3, 3, 7, 11);
++ PICO_PUT_W(PICO_INPIX0, *py_2_int++);
++ PICO_STCM_W(dst_1 + 12, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0);
++
++ PICO_OP(0, 0, 0, 4, 8);
++ PICO_OP(0, 1, 1, 4, 8);
++ PICO_OP(0, 2, 2, 5, 9);
++ PICO_OP(0, 3, 3, 5, 9);
++ PICO_PUT_W(PICO_INPIX0, *py_2_int++);
++ PICO_STCM_W(dst_2, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0);
++ PICO_OP(0, 0, 0, 6, 10);
++ PICO_OP(0, 1, 1, 6, 10);
++ PICO_OP(0, 2, 2, 7, 11);
++ PICO_OP(0, 3, 3, 7, 11);
++ PICO_STCM_W(dst_2 + 12, PICO_REGVECT_OUTPIX2, PICO_REGVECT_OUTPIX1, PICO_REGVECT_OUTPIX0);
++
++ dst_1 += 24;
++ dst_2 += 24;
++ }
++ }
++ return srcSliceH;
++}
++
++extern int avr32_use_pico;
++
++SwsFunc yuv2rgb_init_avr32 (SwsContext *c){
++ switch(c->dstFormat){
++ case PIX_FMT_BGR24:
++ {
++ if ( avr32_use_pico ){
++ MSG_ERR("AVR32 BGR24: Using PICO for color space conversion\n");
++ return yuv2bgr24_avr32_pico;
++ } else {
++ MSG_ERR("AVR32 BGR24: Using optimized color space conversion\n");
++ return yuv2bgr24_avr32;
++ }
++ }
++ break;
++ case PIX_FMT_RGB24:
++ {
++ if ( avr32_use_pico ){
++ MSG_ERR("AVR32 RGB24: Using PICO for color space conversion\n");
++ return yuv2bgr24_avr32_pico;
++ } else {
++ MSG_ERR("AVR32 RGB24: Using optimized color space conversion\n");
++ return yuv2rgb24_avr32;
++ }
++ }
++ }
++ return NULL;
++}
++
++
++int yuv2rgb_c_init_tables_avr32 (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation){
++ const int isRgb = (c->dstFormat == PIX_FMT_RGB24);
++
++ int64_t crv = inv_table[0];
++ int64_t cbu = inv_table[1];
++ int64_t cgu = -inv_table[2];
++ int64_t cgv = -inv_table[3];
++ int64_t cy = 1<<16;
++ int64_t oy = 0;
++
++ if(!fullRange){
++ cy= (cy*255) / 219;
++ oy= 16<<16;
++ }
++
++ cy = (cy *contrast )>>16;
++ crv= (crv*contrast * saturation)>>32;
++ cbu= (cbu*contrast * saturation)>>32;
++ cgu= (cgu*contrast * saturation)>>32;
++ cgv= (cgv*contrast * saturation)>>32;
++
++ oy -= 256*brightness;
++
++ pico_coeff.coeff1_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* G <- Y */
++ pico_coeff.coeff1_1 = SCALE(cgu, 16 - COEFF_FRAC_BITS); /* G <- U */
++ pico_coeff.coeff1_2 = SCALE(cgv, 16 - COEFF_FRAC_BITS); /* G <- V */
++ pico_coeff.coeff1_3 = (SCALE(-128*cgu - 128*cgv - 16*cy, 16 - OFFSET_FRAC_BITS)
++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* G offset */
++
++ if ( isRgb ){
++ pico_coeff.coeff0_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* R <- Y */
++ pico_coeff.coeff0_1 = 0; /* R <- U */
++ pico_coeff.coeff0_2 = SCALE(crv, 16 - COEFF_FRAC_BITS); /* R <- V */
++ pico_coeff.coeff0_3 = (SCALE(-128*crv - 16*cy, 16 - OFFSET_FRAC_BITS)
++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* R offset */
++
++ pico_coeff.coeff2_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* B <- Y */
++ pico_coeff.coeff2_1 = SCALE(cbu, 16 - COEFF_FRAC_BITS); /* B <- U */
++ pico_coeff.coeff2_2 = 0; /* B <- V */
++ pico_coeff.coeff2_3 = (SCALE(-128*cbu - 16*cy, 16 - OFFSET_FRAC_BITS)
++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1)));/* B offset */
++ } else {
++ pico_coeff.coeff2_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* R <- Y */
++ pico_coeff.coeff2_1 = 0; /* R <- U */
++ pico_coeff.coeff2_2 = SCALE(crv, 16 - COEFF_FRAC_BITS); /* R <- V */
++ pico_coeff.coeff2_3 = (SCALE(-128*crv - 16*cy, 16 - OFFSET_FRAC_BITS)
++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* R offset */
++
++ pico_coeff.coeff0_0 = SCALE(cy, 16 - COEFF_FRAC_BITS); /* B <- Y */
++ pico_coeff.coeff0_1 = SCALE(cbu, 16 - COEFF_FRAC_BITS); /* B <- U */
++ pico_coeff.coeff0_2 = 0; /* B <- V */
++ pico_coeff.coeff0_3 = (SCALE(-128*cbu - 16*cy, 16 - OFFSET_FRAC_BITS)
++ + /*0.5*/(1 << (OFFSET_FRAC_BITS-1))); /* B offset */
++ }
++
++}
++
++
++#undef RGB
+diff --git a/libvo/vo_fbdev2.c b/libvo/vo_fbdev2.c
+index 053c193..7017770 100644
+--- a/libvo/vo_fbdev2.c
++++ b/libvo/vo_fbdev2.c
+@@ -22,6 +22,9 @@
+ #include "sub.h"
+ #include "mp_msg.h"
+
++/* Draw directly to framebuffer */
++#define USE_CONVERT2FB
++
+ static vo_info_t info = {
+ "Framebuffer Device",
+ "fbdev2",
+@@ -178,6 +181,15 @@ static int fb_preinit(int reset)
+ }
+ fb_orig_vinfo = fb_vinfo;
+
++ /* Reset panning offset */
++ fb_vinfo.yoffset = 0;
++ if (ioctl(fb_dev_fd, FBIOPAN_DISPLAY, &fb_vinfo)) {
++ mp_msg(MSGT_VO, MSGL_ERR,
++ "[fbdev2] FBIOPAN_DISPLAY failed: %s\n",
++ strerror(errno));
++ return 0;
++ }
++
+ fb_bpp = fb_vinfo.bits_per_pixel;
+
+ /* 16 and 15 bpp is reported as 16 bpp */
+@@ -289,6 +301,10 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
+ mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't malloc next_frame: %s\n", strerror(errno));
+ return 1;
+ }
++#else
++ if ((fb_line_len * fb_vinfo.yres) <= (fb_finfo.smem_len / 2)
++ && fb_vinfo.yoffset == 0)
++ center += fb_line_len * fb_vinfo.yres;
+ #endif
+ if (fs) memset(frame_buffer, '\0', fb_line_len * fb_vinfo.yres);
+
+@@ -299,14 +315,22 @@ static int query_format(uint32_t format)
+ {
+ // open the device, etc.
+ if (fb_preinit(0)) return 0;
+- if ((format & IMGFMT_BGR_MASK) == IMGFMT_BGR) {
++ if ((format & IMGFMT_RGB_MASK) == IMGFMT_RGB) {
+ int fb_target_bpp = format & 0xff;
+ set_bpp(&fb_vinfo, fb_target_bpp);
+ fb_vinfo.xres_virtual = fb_vinfo.xres;
+- fb_vinfo.yres_virtual = fb_vinfo.yres;
++ fb_vinfo.yres_virtual = fb_vinfo.yres * 2;
+ if (ioctl(fb_dev_fd, FBIOPUT_VSCREENINFO, &fb_vinfo)) {
+- mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't put VSCREENINFO: %s\n", strerror(errno));
+- return 0;
++ mp_msg(MSGT_VO, MSGL_WARN,
++ "[fbdev2] Can't double virtual y resolution: %s\n",
++ strerror(errno));
++ fb_vinfo.yres_virtual = fb_vinfo.yres;
++ if (ioctl(fb_dev_fd, FBIOPUT_VSCREENINFO, &fb_vinfo)) {
++ mp_msg(MSGT_VO, MSGL_ERR,
++ "[fbdev2] Can't put VSCREENINFO: %s\n",
++ strerror(errno));
++ return -1;
++ }
+ }
+ fb_pixel_size = fb_vinfo.bits_per_pixel / 8;
+ fb_bpp = fb_vinfo.red.length + fb_vinfo.green.length +
+@@ -367,16 +391,67 @@ static void check_events(void)
+
+ static void flip_page(void)
+ {
+-#ifndef USE_CONVERT2FB
+ int i, out_offset = 0, in_offset = 0;
+
+- for (i = 0; i < in_height; i++) {
+- memcpy(center + out_offset, next_frame + in_offset,
+- in_width * fb_pixel_size);
+- out_offset += fb_line_len;
+- in_offset += in_width * fb_pixel_size;
+- }
++#ifndef USE_CONVERT2FB
++ if (1) {
++#else
++ if (fb_vinfo.yres_virtual == fb_vinfo.yres) {
+ #endif
++ for (i = 0; i < in_height; i++) {
++ memcpy(center + out_offset, next_frame + in_offset,
++ in_width * fb_pixel_size);
++ out_offset += fb_line_len;
++ in_offset += in_width * fb_pixel_size;
++ }
++ } else {
++ if (fb_vinfo.yoffset == 0) {
++ fb_vinfo.yoffset += fb_vinfo.yres;
++ center -= fb_line_len * fb_vinfo.yres;
++ } else {
++ fb_vinfo.yoffset = 0;
++ center += fb_line_len * fb_vinfo.yres;
++ }
++
++ if (ioctl(fb_dev_fd, FBIOPAN_DISPLAY, &fb_vinfo)) {
++ mp_msg(MSGT_VO, MSGL_ERR,
++ "[fbdev2] Can't FBIOPAN_DISPLAY: %s\n",
++ strerror(errno));
++ }
++ }
++}
++
++static uint32_t get_image(mp_image_t *mpi)
++{
++ if(mpi->flags&MP_IMGFLAG_READABLE)
++ return VO_FALSE; // slow video ram
++ if(mpi->type==MP_IMGTYPE_STATIC)
++ return VO_FALSE; // it is not static
++
++ if (mpi->flags & (MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_ACCEPT_WIDTH)) {
++ // we're lucky or codec accepts stride => ok, let's go!
++
++ //YUY2 and RGB formats
++ mpi->planes[0] = center;
++ mpi->width = in_width;
++ mpi->stride[0] = fb_line_len;
++
++ // center image
++
++ mpi->flags |= MP_IMGFLAG_DIRECT;
++
++ return VO_TRUE;
++ }
++
++ return VO_FALSE;
++}
++
++static uint32_t put_image(mp_image_t *mpi)
++{
++ // already out?
++ if ((mpi->flags & (MP_IMGFLAG_DIRECT | MP_IMGFLAG_DRAW_CALLBACK)))
++ return VO_TRUE;
++ return VO_FALSE;
+ }
+
+ static void uninit(void)
+@@ -403,6 +478,10 @@ static int control(uint32_t request, void *data, ...)
+ switch (request) {
+ case VOCTRL_QUERY_FORMAT:
+ return query_format(*((uint32_t*)data));
++ case VOCTRL_GET_IMAGE:
++ return get_image(data);
++ case VOCTRL_DRAW_IMAGE:
++ return put_image(data);
+ }
+ return VO_NOTIMPL;
+ }
+diff --git a/version.sh b/version.sh
+index 44b5c5d..cf22a68 100755
+--- a/version.sh
++++ b/version.sh
+@@ -1,2 +1,2 @@
+ #!/bin/sh
+-echo "#define VERSION \"1.0rc1-$1\"" > version.h
++echo "#define VERSION \"1.0rc1.atmel.2-$1\"" > version.h
diff --git a/packages/mplayer/mplayer_0.0+1.0rc1.bb b/packages/mplayer/mplayer_0.0+1.0rc1.bb
index 6d9cd754d5..c0062bddd9 100644
--- a/packages/mplayer/mplayer_0.0+1.0rc1.bb
+++ b/packages/mplayer/mplayer_0.0+1.0rc1.bb
@@ -22,7 +22,11 @@ SRC_URI = "http://www1.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc1.tar.bz2 \
file://imageon-video_out.patch;patch=1 \
file://powerpc-is-ppc.diff;patch=1 \
file://pxa_configure.patch;patch=1 \
- file://pxa-video_out.patch;patch=1 "
+ file://pxa-video_out.patch;patch=1 \
+ "
+
+SRC_URI_append_avr32 = " file://mplayer-1.0rc1-atmel.2.patch;patch=1 \
+ "
# This is required for the collie machine only as all stacks in that
# machine seem to be set to executable by the toolchain. If someone
@@ -34,7 +38,7 @@ PACKAGE_ARCH_mencoder_collie = "collie"
RCONFLICTS_${PN} = "mplayer-atty"
RREPLACES_${PN} = "mplayer-atty"
-PR = "r14"
+PR = "r15"
PARALLEL_MAKE = ""
diff --git a/packages/mtd/mtd-utils_1.0.0+git.bb b/packages/mtd/mtd-utils_1.0.0+git.bb
index 33f95853f6..d4e67f3aae 100644
--- a/packages/mtd/mtd-utils_1.0.0+git.bb
+++ b/packages/mtd/mtd-utils_1.0.0+git.bb
@@ -3,7 +3,7 @@ SECTION = "base"
DEPENDS = "zlib lzo"
HOMEPAGE = "http://www.linux-mtd.infradead.org/"
LICENSE = "GPLv2"
-PR = "r6"
+PR = "r7"
# This is the default package, thus we lock to a specific git version so
# upstream changes will not break builds.
@@ -40,3 +40,7 @@ do_install () {
install -m 0755 $binary ${D}${bindir}
done
}
+
+PACKAGES =+ "mkfs-jffs mkfs-jffs2"
+FILES_mkfs-jffs = "${bindir}/mkfs.jffs"
+FILES_mkfs-jffs2 = "${bindir}/mkfs.jffs2"
diff --git a/packages/musicbrainz/libmusicbrainz_2.1.5.bb b/packages/musicbrainz/libmusicbrainz_2.1.5.bb
new file mode 100644
index 0000000000..7ab0997218
--- /dev/null
+++ b/packages/musicbrainz/libmusicbrainz_2.1.5.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "The MusicBrainz client is a library which can be built into other programs. \
+It allows you to access the data held on the MusicBrainz server."
+HOMEPAGE = "http://musicbrainz.org"
+LICENSE = "LGPL"
+DEPENDS = "expat"
+
+SRC_URI = "http://ftp.musicbrainz.org/pub/musicbrainz/libmusicbrainz-${PV}.tar.gz"
+
+inherit autotools pkgconfig
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/packages/musicbrainz/libmusicbrainz_3.0.1.bb b/packages/musicbrainz/libmusicbrainz_3.0.1.bb
index 51717f052d..e01695eb3d 100644
--- a/packages/musicbrainz/libmusicbrainz_3.0.1.bb
+++ b/packages/musicbrainz/libmusicbrainz_3.0.1.bb
@@ -4,11 +4,11 @@ DESCRIPTION = "The MusicBrainz client is a library which can be built into other
It allows you to access the data held on the MusicBrainz server."
HOMEPAGE = "http://musicbrainz.org"
LICENSE = "LGPL"
-DEPENDS = "expat"
+DEPENDS = "expat neon"
SRC_URI = "http://ftp.musicbrainz.org/pub/musicbrainz/libmusicbrainz-${PV}.tar.gz"
-inherit autotools pkgconfig
+inherit cmake pkgconfig
do_stage() {
autotools_stage_all
diff --git a/packages/mysql/mysql-native_4.1.18.bb b/packages/mysql/mysql-native_4.1.18.bb
index 9a81bc8f00..83f9dac0e3 100644
--- a/packages/mysql/mysql-native_4.1.18.bb
+++ b/packages/mysql/mysql-native_4.1.18.bb
@@ -1,7 +1,7 @@
SECTION = "console/network"
require mysql_${PV}.bb
inherit native
-PR="r3"
+PR="r4"
RDEPENDS_${PN} = ""
@@ -17,3 +17,9 @@ do_stage_append() {
do_install() {
:
}
+
+
+# Mysql tries to access the ${WORKDIR} from this build..
+do_rm_work() {
+ :
+}
diff --git a/packages/mysql/mysql_4.1.18.bb b/packages/mysql/mysql_4.1.18.bb
index 17fa33ac1c..cd32f929e3 100644
--- a/packages/mysql/mysql_4.1.18.bb
+++ b/packages/mysql/mysql_4.1.18.bb
@@ -1,9 +1,9 @@
DESCRIPTION = "The MySQL Open Source Database System"
-SECTION = "libs"
HOMEPAGE = "http://www.mysql.com/"
-DEPENDS += "ncurses mysql-native"
+SECTION = "libs"
LICENSE = "GPL"
-PR="r2"
+DEPENDS += "ncurses mysql-native"
+PR = "r3"
SRC_URI = "http://downloads.mysql.com/archives/mysql-4.1/mysql-${PV}.tar.gz \
file://autofoo.patch;patch=1 \
@@ -23,6 +23,7 @@ INITSCRIPT_PACKAGES = "mysql-server"
INITSCRIPT_NAME = "mysqld"
INITSCRIPT_PARAMS = "start 45 S . stop 45 0 6 1 ."
+PARALLEL_MAKE = " "
EXTRA_OEMAKE = "'GEN_LEX_HASH=${STAGING_BINDIR_NATIVE}/gen_lex_hash'"
EXTRA_OECONF = " --with-embedded-server --prefix=/usr --sysconfdir=/etc/mysql --localstatedir=/var/mysql --datadir=/var/mysql --disable-dependency-tracking --without-raid --without-debug --with-low-memory --without-query-cache --without-man --without-docs --without-innodb "
@@ -62,7 +63,7 @@ pkg_postrm_mysql-server () {
grep mysql /etc/passwd && deluser mysql
}
-PACKAGES = "${PN} libmysqlclient libmysqlclient-dev mysql-client mysql-server"
+PACKAGES = "${PN}-dbg ${PN} libmysqlclient libmysqlclient-dev mysql-client mysql-server ${PN}-leftovers"
FILES_${PN} = " "
RDEPENDS_${PN} = "mysql-client mysql-server"
@@ -137,3 +138,6 @@ ${datadir}/mysql/ \
${localstatedir}/mysql/ \
${sysconfdir}/init.d \
${sysconfdir}/my.cnf"
+
+DESCRIPTION_${PN}-leftovers = "unpackaged and probably unneeded files for ${PN}"
+FILES_${PN}-leftovers = "/"
diff --git a/packages/navit/files/compile-fix.patch b/packages/navit/files/compile-fix.patch
deleted file mode 100644
index 86274d8aa8..0000000000
--- a/packages/navit/files/compile-fix.patch
+++ /dev/null
@@ -1,8 +0,0 @@
-diff -Naur navit-0.0.1.old/src/fib-1.1/Makefile.am navit-0.0.1/src/fib-1.1/Makefile.am
---- navit-0.0.1.old/src/fib-1.1/Makefile.am 2007-07-05 19:16:20.000000000 +0200
-+++ navit-0.0.1/src/fib-1.1/Makefile.am 2007-09-18 00:48:08.000000000 +0200
-@@ -1,4 +1,3 @@
- noinst_LTLIBRARIES = libfib.la
- libfib_la_SOURCES = fib.c fib.h fibpriv.h
--libfib_la_LDFLAGS = -static
- EXTRA_DIST=README configure.in fh_extractmin.3 fh_makeheap.3 fh_makekeyheap.3 fibtest.c fibtest2.c tt.c use.c
diff --git a/packages/navit/files/navit.desktop b/packages/navit/files/navit.desktop
new file mode 100644
index 0000000000..52aae31fce
--- /dev/null
+++ b/packages/navit/files/navit.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Navit
+Comment=GPS Navigation
+Exec=navit
+Icon=openmoko-terminal
+Terminal=false
+Type=Application
+Categories=GTK;Application;Utilities;
+MimeType=text/x-vcard;
+SingleInstance=true
+StartupNotify=true
diff --git a/packages/navit/files/navit.launcher b/packages/navit/files/navit.launcher
new file mode 100644
index 0000000000..b95aadb878
--- /dev/null
+++ b/packages/navit/files/navit.launcher
@@ -0,0 +1,30 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2008
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: navit.launcher
+# Date: 20080105 (YMD)
+#
+#################################################################################
+#
+# 20080105 - v0.0.1 - Initial release
+
+# On devices with low memory (< 512Mb?) Navit will segfault on start.
+# This can be worked around by doing
+# "echo 1 > /proc/sys/vm/overcommit_memory"
+
+if test "`cat /proc/meminfo | grep ^MemTotal | awk '{print $2}'`" -lt "500000"
+then
+ if test "$USER" = "root"
+ then
+ echo "Enabling low-mem workaround..."
+ echo 1 > /proc/sys/vm/overcommit_memory
+ else
+ echo "I need root-privs to enable the low-mem workaround!"
+ fi
+fi
+
+navit.real $*
+
+
diff --git a/packages/navit/files/navit.xml-so.patch b/packages/navit/files/navit.xml-so.patch
new file mode 100644
index 0000000000..c374756447
--- /dev/null
+++ b/packages/navit/files/navit.xml-so.patch
@@ -0,0 +1,13 @@
+--- navit-0.0.3/src/navit.xml.orig 2008-01-01 15:24:43.000000000 +0000
++++ navit-0.0.3/src/navit.xml 2008-01-01 15:25:01.000000000 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE navit SYSTEM "navit.dtd">
+ <plugins>
+- <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}lib*.so"/>
+- <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}libgraphics_null.so" active="no" />
++ <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}lib*.so.0"/>
++ <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}libgraphics_null.so.0" active="no" />
+ </plugins>
+ <debug name="navit:do_draw" level="0" />
+ <!--
diff --git a/packages/navit/navit.inc b/packages/navit/navit.inc
new file mode 100644
index 0000000000..06e3a72664
--- /dev/null
+++ b/packages/navit/navit.inc
@@ -0,0 +1,27 @@
+DESCRIPTION = "Navit is a car navigation system with routing engine."
+LICENSE = "GPL"
+DEPENDS = "glib-2.0 gtk+"
+RRECOMMENDS = "gpsd speechd flite"
+
+inherit autotools
+
+EXTRA_OECONF = "--disable-binding-python --disable-gui-sdl --disable-samplemap --enable-avoid-float --enable-avoid-unaligned"
+
+PACKAGES = "${PN}-dbg ${PN}-dev ${PN} ${PN}-doc ${PN}-locale"
+
+FILES_${PN}-dbg += "${libdir}/${PN}/*/.debug"
+FILES_${PN}-dev += "${libdir}/${PN}/*/*.so"
+
+SRC_URI_append = " \
+ file://navit.xml-so.patch;patch=1 \
+ file://navit.desktop \
+ file://navit.launcher \
+ "
+
+do_install_append() {
+ install -d ${D}/usr/share/applications/
+ install -m 0644 ${WORKDIR}/navit.desktop ${D}/usr/share/applications/
+
+ mv ${D}/usr/bin/navit ${D}/usr/bin/navit.real
+ install -m 0755 ${WORKDIR}/navit.launcher ${D}/usr/bin/navit
+}
diff --git a/packages/navit/navit_0.0.1.bb b/packages/navit/navit_0.0.1.bb
deleted file mode 100644
index 2db71a3e87..0000000000
--- a/packages/navit/navit_0.0.1.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "Navit is a car navigation system with routing engine."
-LICENSE = "GPL"
-DEPENDS = "glib-2.0 gtk+"
-PR = "r2"
-
-inherit autotools
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/navit/navit-${PV}.tar.gz \
- file://compile-fix.patch;patch=1"
-
-EXTRA_OECONF = "--disable-gui-sdl --disable-binding-python --enable-avoid-unaligned --enable-avoid-float"
-
-FILES_${PN}-dbg += "${libdir}/${PN}/*/.debug"
diff --git a/packages/navit/navit_0.0.2.bb b/packages/navit/navit_0.0.2.bb
deleted file mode 100644
index ce34ee835b..0000000000
--- a/packages/navit/navit_0.0.2.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "Navit is a car navigation system with routing engine."
-LICENSE = "GPL"
-DEPENDS = "glib-2.0 gtk+"
-PR = "r0"
-
-inherit autotools
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/navit/navit-${PV}.tar.gz \
- file://compile-fix.patch;patch=1"
-
-EXTRA_OECONF = "--disable-gui-sdl --disable-binding-python --enable-avoid-unaligned --enable-avoid-float"
-
-FILES_${PN}-dbg += "${libdir}/${PN}/*/.debug"
diff --git a/packages/navit/navit_0.0.3.bb b/packages/navit/navit_0.0.3.bb
new file mode 100644
index 0000000000..a926528faf
--- /dev/null
+++ b/packages/navit/navit_0.0.3.bb
@@ -0,0 +1,5 @@
+require navit.inc
+
+PR = "r4"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/navit/navit-${PV}.tar.gz"
diff --git a/packages/navit/navit_cvs.bb b/packages/navit/navit_cvs.bb
index 8f158d4f79..014e7d3a53 100644
--- a/packages/navit/navit_cvs.bb
+++ b/packages/navit/navit_cvs.bb
@@ -1,19 +1,11 @@
-DESCRIPTION = "Navit is a car navigation system with routing engine."
-LICENSE = "GPL"
-DEPENDS = "glib-2.0 gtk+"
-PV = "0.0.2+cvs${SRCDATE}"
-PR = "r0"
+require navit.inc
-inherit autotools
-S = "${WORKDIR}/navit"
+PV = "0.0.3+cvs${SRCDATE}"
+PR = "r4"
-SRC_URI = "cvs://anonymous@navit.cvs.sourceforge.net/cvsroot/navit;module=navit \
- "
+S = "${WORKDIR}/navit"
-EXTRA_OECONF = "--disable-binding-python --disable-gui-sdl --disable-samplemap --enable-avoid-float --enable-avoid-unaligned"
-#--enable-shared
+SRC_URI = "cvs://anonymous@navit.cvs.sourceforge.net/cvsroot/navit;module=navit"
EXTRA_AUTORECONF = " -I m4"
-FILES_${PN}-dbg += "${libdir}/${PN}/*/.debug"
-
diff --git a/packages/nbd/nbd_2.8.7.bb b/packages/nbd/nbd_2.8.7.bb
index 2241fea71e..b209156fa7 100644
--- a/packages/nbd/nbd_2.8.7.bb
+++ b/packages/nbd/nbd_2.8.7.bb
@@ -15,7 +15,7 @@ PACKAGES += "nbd-client-doc nbd-server-doc"
FILES_nbd-client = "/usr/sbin/nbd-client"
FILES_nbd-server = "/usr/bin/nbd-server"
-FILES_nbd-client-dbg = "/usr/sbin/.debug/nbd-client"
-FILES_nbd-server-dbg = "/usr/bin/.debug/nbd-server"
+FILES_nbd-client-dbg += "/usr/sbin/.debug/nbd-client"
+FILES_nbd-server-dbg += "/usr/bin/.debug/nbd-server"
FILES_nbd-client-doc = "/usr/share/man/man8/*"
FILES_nbd-server-doc = "/usr/share/man/man1/*"
diff --git a/packages/ncurses/ncurses.inc b/packages/ncurses/ncurses.inc
index 027f037ee5..2c6cfd05b0 100644
--- a/packages/ncurses/ncurses.inc
+++ b/packages/ncurses/ncurses.inc
@@ -1,23 +1,14 @@
DESCRIPTION = "Ncurses library"
HOMEPAGE = "http://www.gnu.org/software/ncurses/ncurses.html"
-LICENSE = "MIT"
SECTION = "libs"
+LICENSE = "MIT"
DEPENDS = "ncurses-native"
-PACKAGES_prepend = "ncurses-tools "
-PACKAGES_append = " ncurses-terminfo"
-FILES_ncurses_append = " ${datadir}/tabset"
RSUGGESTS_${PN} = "ncurses-terminfo"
RPROVIDES = "libncurses5"
inherit autotools
-# This keeps only tput/tset in ncurses
-# clear/reset are in already busybox
-FILES_ncurses-tools = "${bindir}/tic ${bindir}/toe ${bindir}/infotocap ${bindir}/captoinfo ${bindir}/infocmp ${bindir}/clear.${PN} ${bindir}/reset.${PN} ${bindir}/tack "
-FILES_ncurses-terminfo = "${datadir}/terminfo"
-FILES_${PN} = "${bindir}/tput ${bindir}/tset ${libdir}/lib*.so.* usr/share/tabset etc/terminfo"
-
-PARALLEL_MAKE=""
+PARALLEL_MAKE = ""
EXTRA_OECONF = "--with-shared \
--without-profile \
@@ -88,3 +79,12 @@ pkg_prerm_ncurses-tools () {
update-alternatives --remove clear clear.${PN}
update-alternatives --remove reset reset.${PN}
}
+
+PACKAGES_prepend = "ncurses-tools "
+PACKAGES_append = " ncurses-terminfo"
+FILES_ncurses_append = " ${datadir}/tabset"
+# This keeps only tput/tset in ncurses
+# clear/reset are in already busybox
+FILES_ncurses-tools = "${bindir}/tic ${bindir}/toe ${bindir}/infotocap ${bindir}/captoinfo ${bindir}/infocmp ${bindir}/clear.${PN} ${bindir}/reset.${PN} ${bindir}/tack "
+FILES_ncurses-terminfo = "${datadir}/terminfo"
+FILES_${PN} = "${bindir}/tput ${bindir}/tset ${libdir}/lib*.so.* §{datadir}/tabset ${sysconfdir}/terminfo"
diff --git a/packages/ncurses/ncurses/visibility.patch b/packages/ncurses/ncurses/visibility.patch
index 29cac5f1b8..66366ce3ea 100644
--- a/packages/ncurses/ncurses/visibility.patch
+++ b/packages/ncurses/ncurses/visibility.patch
@@ -2187,14 +2187,14 @@
+ CPPFLAGS="-I\$(srcdir)/../include $CPPFLAGS"
+fi
+if test "$GCC" != yes; then
-+ CPPFLAGS="$CPPFLAGS -I\$(includedir)"
++ CPPFLAGS="$CPPFLAGS"
+elif test "$includedir" != "/usr/include"; then
+ if test "$includedir" = '${prefix}/include' ; then
+ if test $prefix != /usr ; then
-+ CPPFLAGS="$CPPFLAGS -I\$(includedir)"
++ CPPFLAGS="$CPPFLAGS"
+ fi
+ else
-+ CPPFLAGS="$CPPFLAGS -I\$(includedir)"
++ CPPFLAGS="$CPPFLAGS"
+ fi
+fi
+AC_SUBST(CPPFLAGS)
diff --git a/packages/ncurses/ncurses_5.3.bb b/packages/ncurses/ncurses_5.3.bb
index e023017f1a..0b0897a409 100644
--- a/packages/ncurses/ncurses_5.3.bb
+++ b/packages/ncurses/ncurses_5.3.bb
@@ -1,7 +1,7 @@
BaseV := "${PV}"
SnapV := "20030906"
PV = "${BaseV}.${SnapV}"
-PR = "r1"
+PR = "r2"
SRC_URI = "${GNU_MIRROR}/ncurses/ncurses-${BaseV}.tar.gz \
file://${SnapV}.patch;patch=1 \
diff --git a/packages/ncurses/ncurses_5.4.bb b/packages/ncurses/ncurses_5.4.bb
index 6da32232af..f361d745b3 100644
--- a/packages/ncurses/ncurses_5.4.bb
+++ b/packages/ncurses/ncurses_5.4.bb
@@ -1,4 +1,4 @@
-PR = "r9"
+PR = "r11"
SRC_URI = "${GNU_MIRROR}/ncurses/ncurses-${PV}.tar.gz \
file://visibility.patch;patch=1"
diff --git a/packages/netbase/netbase/interfaces b/packages/netbase/netbase/interfaces
index ca449168a9..c615642e35 100644
--- a/packages/netbase/netbase/interfaces
+++ b/packages/netbase/netbase/interfaces
@@ -29,14 +29,23 @@ iface wlan0 inet dhcp
# wireless-mode managed
#
# A WPA1 or WPA2 encrypted connection locked to a specific access point.
-# The WLAN cards firmware is updated temporarily to allow WPA
-# connections. Your card may or may not need the update.
+# This is the best option for non-roaming, single-network usage.
+# Note that your card may require a firmware update to use WPA.
+# Some distributions install a temporary volatile firmware update on ifup.
#
#iface wlan0 inet dhcp
# wpa-essid some-essid
# wpa-psk My-PlainText-Password
-# pre-up iwpriv wlan0 reset 1
-# pre-up prism2_srec -r wlan0 /etc/pcmcia/rf010804.hex
+#
+# A WPA1 or WPA2 encrypted connection using an external configuration file
+# for wpa-supplicant. This is the way to go if you need to configure multiple
+# networks with different keys and / or WPA settings and roaming support.
+#
+# iface wlan0 inet dhcp
+# wpa-conf /etc/wpa_supplicant.conf
+# wpa-driver hostap
+
+
iface atml0 inet dhcp
diff --git a/packages/netbase/netbase/mx31moboard/.mtn2git_empty b/packages/netbase/netbase/mx31moboard/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/netbase/netbase/mx31moboard/.mtn2git_empty
diff --git a/packages/netbase/netbase/mx31moboard/interfaces b/packages/netbase/netbase/mx31moboard/interfaces
new file mode 100644
index 0000000000..17d2b151bc
--- /dev/null
+++ b/packages/netbase/netbase/mx31moboard/interfaces
@@ -0,0 +1,14 @@
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# The loopback interface
+auto lo
+iface lo inet loopback
+
+# Ethernet/RNDIS gadget (g_ether)
+auto usb0
+iface usb0 inet static
+ address 192.168.0.202
+ netmask 255.255.255.0
+ network 192.168.0.0
+ gateway 192.168.0.200
+
diff --git a/packages/netbase/netbase_4.21.bb b/packages/netbase/netbase_4.21.bb
index 82464d82c6..1f2837a8c1 100644
--- a/packages/netbase/netbase_4.21.bb
+++ b/packages/netbase/netbase_4.21.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "This package provides the necessary \
infrastructure for basic TCP/IP based networking."
SECTION = "base"
LICENSE = "GPL"
-PR = "r25"
+PR = "r26"
inherit update-rc.d
diff --git a/packages/nonworking/efl/edb-utils_1.0.5.007.bb b/packages/nonworking/efl/edb-utils_1.0.5.007.bb
index 8d47e068a7..11fae0f565 100644
--- a/packages/nonworking/efl/edb-utils_1.0.5.007.bb
+++ b/packages/nonworking/efl/edb-utils_1.0.5.007.bb
@@ -8,7 +8,7 @@ inherit efl
EXTRA_OECONF += "--disable-gtk"
-PACKAGES = "edb-utils"
+PACKAGES = "${PN}-dbg edb-utils"
FILES_${PN} = "${bindir}/edb_ed ${bindir}/edb_vt_ed ${bindir}/edb_gtk_ed"
RDEPENDS_${PN} += "ncurses"
diff --git a/packages/nonworking/efl/edje-utils_0.5.0.038.bb b/packages/nonworking/efl/edje-utils_0.5.0.038.bb
index f8eb917e4d..966abe7654 100644
--- a/packages/nonworking/efl/edje-utils_0.5.0.038.bb
+++ b/packages/nonworking/efl/edje-utils_0.5.0.038.bb
@@ -5,7 +5,7 @@ PR = "r6"
inherit efl
-PACKAGES = "edje-utils"
+PACKAGES = "${PN}-dbg edje-utils"
FILES_${PN} = "${bindir}/edje ${bindir}/edje_* ${datadir}/edje/data/template ${datadir}/edje/include"
RDEPENDS_${PN} += "embryo-utils cpp cpp-symlinks gcc gcc-symlinks"
diff --git a/packages/nonworking/efl/embryo-utils_0.9.1.038.bb b/packages/nonworking/efl/embryo-utils_0.9.1.038.bb
index d507c53cce..78cc70394c 100644
--- a/packages/nonworking/efl/embryo-utils_0.9.1.038.bb
+++ b/packages/nonworking/efl/embryo-utils_0.9.1.038.bb
@@ -11,7 +11,7 @@ inherit efl
SRC_URI = "${E_URI}/embryo-${PV}.tar.gz"
S = "${WORKDIR}/embryo-${PV}"
-PACKAGES = "embryo-utils"
+PACKAGES = "${PN}-dbg embryo-utils"
FILES_${PN} = "${bindir}/embryo ${bindir}/embryo_* ${datadir}/embryo/include"
libraries = ""
diff --git a/packages/nonworking/imkit/imkit_0.4.5.bb b/packages/nonworking/imkit/imkit_0.4.5.bb
index a07e2c4849..04b65c066f 100644
--- a/packages/nonworking/imkit/imkit_0.4.5.bb
+++ b/packages/nonworking/imkit/imkit_0.4.5.bb
@@ -16,5 +16,5 @@ PARALLEL_MAKE = ""
QMAKE_PROFILES = "imkit.pro"
do_configure_prepend() {
- echo -e "TEMPLATE=subdirs\nSUBDIRS=libimkit impls/anthy\n" > imkit.pro
+ printf "TEMPLATE=subdirs\nSUBDIRS=libimkit impls/anthy\n" > imkit.pro
}
diff --git a/packages/nonworking/libmikey/libmikey0_0.3.2.bb b/packages/nonworking/libmikey/libmikey0_0.3.2.bb
index 214faef40f..21210937a6 100644
--- a/packages/nonworking/libmikey/libmikey0_0.3.2.bb
+++ b/packages/nonworking/libmikey/libmikey0_0.3.2.bb
@@ -11,7 +11,6 @@ SRC_URI = "http://www.minisip.org/snapshots/libmikey-${PV}.tar.gz"
S="${WORKDIR}/libmikey-${PV}"
-PACKAGES = "${PN}"
FILES_${PN} = " ${libdir}/libmikey.so.0 ${libdir}/libmikey.so.0.0.0 "
diff --git a/packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb b/packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb
index a7866b35ec..d41a86b4e2 100644
--- a/packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb
+++ b/packages/nonworking/libmnetutil/libmnetutil0_0.2.2.bb
@@ -11,7 +11,6 @@ SRC_URI = "http://www.minisip.org/snapshots/libmnetutil-${PV}.tar.gz"
S="${WORKDIR}/libmnetutil-${PV}"
-PACKAGES = "${PN}"
FILES_${PN} = " ${libdir}/libmnetutil.so.0 ${libdir}/libmnetutil.so.0.0.0 "
diff --git a/packages/nonworking/libmsip/libmsip0_0.2.2.bb b/packages/nonworking/libmsip/libmsip0_0.2.2.bb
index 8d8bb905db..161e270f7d 100644
--- a/packages/nonworking/libmsip/libmsip0_0.2.2.bb
+++ b/packages/nonworking/libmsip/libmsip0_0.2.2.bb
@@ -11,7 +11,6 @@ SRC_URI = "http://www.minisip.org/snapshots/libmsip-${PV}.tar.gz"
S="${WORKDIR}/libmsip-${PV}"
-PACKAGES = "${PN}"
FILES_${PN} = " ${libdir}/libmsip.so.0 ${libdir}/libmsip.so.0.0.0 "
diff --git a/packages/notification-daemon/notification-daemon_0.3.6.bb b/packages/notification-daemon/notification-daemon_0.3.6.bb
index ee0f597550..5a76d10b31 100644
--- a/packages/notification-daemon/notification-daemon_0.3.6.bb
+++ b/packages/notification-daemon/notification-daemon_0.3.6.bb
@@ -12,7 +12,6 @@ EXTRA_OECONF = "--disable-binreloc"
inherit autotools pkgconfig
-PACKAGES = "${PN}"
FILES_${PN} = "\
${libexecdir}/notification-daemon \
${datadir}/dbus-1/services \
diff --git a/packages/notification-daemon/notification-daemon_0.3.7.bb b/packages/notification-daemon/notification-daemon_0.3.7.bb
index 43721f5e28..d86c2f48e8 100644
--- a/packages/notification-daemon/notification-daemon_0.3.7.bb
+++ b/packages/notification-daemon/notification-daemon_0.3.7.bb
@@ -10,7 +10,6 @@ EXTRA_OECONF = "--disable-binreloc"
inherit autotools pkgconfig
-PACKAGES = "${PN}"
FILES_${PN} = "\
${libexecdir}/notification-daemon \
${datadir}/dbus-1/services/ \
diff --git a/packages/nslu2-binary-only/nslu2-linksys-libs_2.3r63.bb b/packages/nslu2-binary-only/nslu2-linksys-libs_2.3r63.bb
index 86b0a575eb..da5bdebfcd 100644
--- a/packages/nslu2-binary-only/nslu2-linksys-libs_2.3r63.bb
+++ b/packages/nslu2-binary-only/nslu2-linksys-libs_2.3r63.bb
@@ -13,7 +13,6 @@ do_install () {
( cd ${S} ; tar cvf - . ) | ( cd ${D} ; tar xvf - )
}
-PACKAGES = "${PN}"
FILES_${PN} = "/lib"
COMPATIBLE_MACHINE = "nslu2"
diff --git a/packages/nslu2-binary-only/nslu2-linksys-ramdisk_2.3r63.bb b/packages/nslu2-binary-only/nslu2-linksys-ramdisk_2.3r63.bb
index b098ba73ff..ec7689488a 100644
--- a/packages/nslu2-binary-only/nslu2-linksys-ramdisk_2.3r63.bb
+++ b/packages/nslu2-binary-only/nslu2-linksys-ramdisk_2.3r63.bb
@@ -10,7 +10,6 @@ do_install () {
( cd ${S} ; tar cvf - . ) | ( cd ${D} ; tar xvf - )
}
-PACKAGES = "${PN}"
FILES_${PN} = "/"
COMPATIBLE_MACHINE = "nslu2"
diff --git a/packages/nslu2-binary-only/nslu2-linksys-sambacodepages_2.3r63.bb b/packages/nslu2-binary-only/nslu2-linksys-sambacodepages_2.3r63.bb
index 44ef8aa1c9..4da6b6981a 100644
--- a/packages/nslu2-binary-only/nslu2-linksys-sambacodepages_2.3r63.bb
+++ b/packages/nslu2-binary-only/nslu2-linksys-sambacodepages_2.3r63.bb
@@ -19,7 +19,6 @@ do_install () {
( cd ${S} ; tar cvf - . ) | ( cd ${D} ; tar xvf - )
}
-PACKAGES = "${PN}"
FILES_${PN} = "/etc/samba/codepages"
COMPATIBLE_MACHINE = "nslu2"
diff --git a/packages/nslu2-binary-only/unslung-rootfs/NOTES b/packages/nslu2-binary-only/unslung-rootfs/NOTES
index 34d319d656..801ebd918c 100644
--- a/packages/nslu2-binary-only/unslung-rootfs/NOTES
+++ b/packages/nslu2-binary-only/unslung-rootfs/NOTES
@@ -553,3 +553,21 @@ Replaced Linksys busybox with slingbox entirely.
Modified "unsling" script to use tar instead of find and cpio; removed
obsolete and untested unsling utilities (eg: resling).
+
+Replace mkfs.ext3 with a script in order to fix an obscure formatting bug
+with the Linksys GUI.
+
+Increased the bootup delay from 5 seconds to 15 seconds in linuxrc;
+required by some large disks which require additional time to become ready.
+Touching "/.fastdisk" on the flash filesystem will revert to the original
+5 second delay, which is useful to retain reasonably boot times.
+
+Added the bootdisk mechanism: at initial boot time, partitions mounted
+on the HDD mountpoints are scanned for a special directory structure
+containing startup script, which are executed. This facilitates easy
+customization of the boot for debugging purposes, or even automated
+installation and configuration processes.
+
+6.10:
+
+Second beta release.
diff --git a/packages/nslu2-binary-only/unslung-rootfs/README b/packages/nslu2-binary-only/unslung-rootfs/README
index 27dddeafbf..b5f5a23190 100644
--- a/packages/nslu2-binary-only/unslung-rootfs/README
+++ b/packages/nslu2-binary-only/unslung-rootfs/README
@@ -1,370 +1,177 @@
-Unslung-6.x Family Release README INSTALLATION
-
-You must follow the steps in this README *exactly*. Do not skip any steps, and
-do not skip ahead thinking you know what you are doing and that therefore you
-don't need to follow instructions step by step.
+ Unslung-6.10 README
If at any time you have any questions concerning the installation or operation
of Unslung firmware, your first port of call should be the NSLU2-Linux wiki at:
- http://www.nslu2-linux.org
+ http://www.nslu2-linux.org
-If you are looking for further Unslung notes - including ipkg usage, diversion
-script details, or ChangeLog information, please consult the associated Unslung
-NOTES file.
+Additional information, including ChangeLog information can be found in the
+associated Unslung NOTES file as well as on the NSLU2-Linux wiki.
-------------------------------------------------------------------------------
There are three parts to completing the installation of the Unslung firmware:
- 1 - PRE-INSTALLATION CONSIDERATIONS
- 2 - FIRMWARE INSTALLATION DETAILS
- 3 - UNSLINGING DETAILS
-
-
-PRE-INSTALLATION CONSIDERATIONS
-
-1) You *must* test telnet Redboot access first before you flash the Unslung
- firmware. Failure to do so will mean you get no sympathy at all if you
- can't access Redboot when you need to recover from a bad flash. See
-
- http://www.nslu2-linux.org/wiki/HowTo/TelnetIntoRedBoot
-
- - Redboot is the bootloader that runs when the device is first started,
- loading things into memory and starting Linux. By testing your
- ability to telnet into Redboot, you are ensuring that if you injure
- your NSLU2 with a bad flash you should be able to follow the "How
- To Recover From A Bad Flash" instructions at
-
- http://www.nslu2-linux.org/wiki/HowTo/RecoverFromABadFlash
-
-2) If you want to install any packages, then you must have an external USB
- disk drive or an external USB flash disk. It is possible to make changes
- to the root filesystem in the internal flash storage, but the space is
- very limited. In fact, just running the "ipkg update" operation on an
- NSLU2 which does not have an external storage device of some sort attached
- will most likely render the NSLU2 unusable due to filling up its internal
- flash memory (if this happens then you will need to follow the recovery
- instructions in the previous step.) So unless you are an expert, use
- an external storage device. The remainder of these instructions assume
- that you have a suitable external disk or flash disk that you will be
- using for this purpose.
-
- A few words on selecting which port to use:
-
- Completely contrary to previous versions of Unslung, the preferred port
- for the Unslung external disk as of Unslung 6.x is often port 2. This
- will free up the far-more-flexible port number 1 for other uses.
-
- However, this "feature" (part of the Linksys R63 firmware) may cause some
- small consternation for users upgrading from earlier versions of Unslung.
- But in general, swapping the drives between the two ports will likely be
- the least painful solution. The basic challenge faced by upgraders is
- that *something* must change: if the drive remains in port 1, then it will
- remain mounted at "/share/hdd/..." but the drive nomenclature will change
- from "/dev/sda" to "/dev/sdb". On the other hand, if the drive is moved
- to port 2, then it will remain "/dev/sda" but it will then be mounted at
- "/share/flash/...". What difference this might make depends on each
- individual configuration; check the wiki for possible assistance for your
- particular configuration.
-
- For new users, the following guidelines can help:
- - if you have only a single drive that will be formatted by the NSLU2,
- use port 2.
- - if you have a single drive that will be formatted by the NSLU2, and
- all other drives or flash devices will be either FAT or NTFS, use
- port 2.
- - if you have two drives, and both will be formatted by the NSLU2, then
- unsling to the drive in port 1.
-
- If you unsling to port 2, and later add a drive in port 1 that will
- be formatted by the NSLU2, it will work as expected -- however, the
- drive to be added MUST be formatted by the unslung NSLU2 in question,
- and once formatted, the drive must NOT be removed. (The Linksys code
- will move it's "conf" datafiles to the drive in port 1 during the
- format operation, and thus will become dependent upon the presence of
- both drives for proper operation.)
-
-3) The external disk that you use as the target for package installation must
- be (or have previously been) formatted by the NSLU2.
-
- Since this point qualifies as a "frequently asked question", it is
- worth some clarification here. It is only possible to unsling to
- a disk that has been formatted by the NSLU2 - you cannot unsling to a
- FAT or NTFS disk. In fact, it is not sufficient to format the disk
- using another UNIX system -- in order to be recognized as a "Formatted
- (ext3)" disk by the NSLU2, and hence be suitable for unslinging, the
- disk must be specifically partitioned, formatted, and the partitions
- must contain a specific set of configuration files created by the
- NSLU2. So the simple rule is that if the NSLU2 web interface "Disk"
- page does not list the disk as "Formatted (ext3)", you will be unable
- to unsling to that disk.
-
- For upgrading users, it is possible to upgrade from all previous Unslung
- versions without reformatting your disk -- but not necessarily recommended.
- See the wiki article for recommended upgrade strategies:
-
- http://www.nslu2-linux.org/wiki/Unslung/UpgradingToUnslung6
-
- The unsling script will not touch anything in /unslung or /opt on your
- disk, so make sure all your file modifications are in those directories,
- as you were warned in the README file in all previous Unslung versions :-)
-
-4) If you want to use a flash disk as the target for package installation,
- ensure that it is at least 256MB, and formatted as above via the
- Linksys web interface.
+ 1 - PRE-INSTALLATION CONSIDERATIONS
+ 2 - FIRMWARE INSTALLATION DETAILS
+ 3 - UNSLINGING DETAILS
+
+1) PRE-INSTALLATION CONSIDERATIONS
-5) Please verify that any disks you are going to connect to the NSLU2 are
- recognized and working properly *before* updating your firmware (including
- any shares and data you had previously stored.) If not, DO NOT CONTINUE.
- You may want to check out "How To Troubleshoot A Drive Missing Condition"
- at:
-
- http://www.nslu2-linux.org/wiki/HowTo/TroubleshootADriveMissingCondition
-
- - The only exception to this, of course, are those enclosures that the
- stock firmware does not support, but the Unslung firmware does
- support.
-
-6) If you are upgrading your firmware, you should make a configuration backup
- via the Linksys web interface. The configuration backup can be found
- under "Administration", "Advanced", and then "Backup." The top section of
- that webpage is titled "Config Backup" and "Download" should be used to
- save your NSLU2 Users, Groups and Shares setup to a disk file.
-
-
-FIRMWARE INSTALLATION DETAILS
-
-1) Shutdown the NSLU2, and remove any disks that you may have plugged into the
- NSLU2. Power back up the NSLU2.
-
- - Firmware upgrades must always be performed with *no* hard disks or flash
- disks attached. This CANNOT be emphasized enough. Are you sure you
- unplugged the disks before powering up? If so, you may continue.
-
-2) Access the Web interface. Note that you should use the username "admin" and
- password "admin" for the web interface at this point (as no disks are
- attached, the default username and password is the only way to access the
- Management web pages).
-
- 2-a) If you are installing Unslung 6.x onto an NSLU2 unit with Linksys
- standard firmware already installed, flash unslung-6.x.bin as you
- normally would flash new firmware (using the web interface
- "Upgrade Firmware" page). See your NSLU2 user manual for details
- if you don't know how to do this.
-
- - During firmware flashing, the top LED - Ready/Status - flashes
- red and green (approximately 5 minutes, but can be much longer).
-
- - The NSLU2 will reboot after the flashing is complete.
-
- 2-b) If you are installing Unslung 6.x onto an NSLU2 unit with an
- existing version of nslu2-linux.org firmware already installed,
- you must first put the NSLU2 into RedBoot Upgrade Mode.
-
- - The NSLU2 should still be powered off at this point. If not,
- shut it down again before proceeding.
+a) You *must* confirm that you can enter "upgrade mode" using the Reset Button
+method. This is necessary because once you install Unslung, you will be unable
+to use the web GUI to reflash the device; the Reset Button technique will be
+required to install new firmware, upgrade, or recover from a bad flash:
- - Using a paper clip, push and hold in the reset button which is
- located on the back of the NSLU2 near the power socket.
+ http://www.nslu2-linux.org/wiki/HowTo/UseTheResetButtonToEnterUpgradeMode
- - While holding in the reset button, press and release the power
- button.
+To upload the firmware, use either the Sercomm Update Utility (for Windows
+users) or the UpSlug2 Utility (for Linux and MacOS X users):
- - Watch the Ready/Status LED, and as soon as it turns red quickly
- release the reset button.
+ http://www.nslu2-linux.org/wiki/Main/SercommFirmwareUpdater
+ http://www.nslu2-linux.org/wiki/Main/UpSlug2
+ http://www.nslu2-linux.org/wiki/Main/UpSlug2onOSX
- - You should now be in upgrade mode which is indicated by the
- Ready/Status LED alternating between red and green.
+b) You must have an external USB disk drive or an external USB flash device.
+There are a number of considerations to take into account in selecting the size
+and type of external device as well as which of the two USB ports to use:
- - Use either the Linux UpSlug2 tool or the Windows SerComm Upgrade
- tool to upload the new firmware - you can find download links at
- http://www.nslu2-linux.org/wiki/HowTo/InstallUnslungFirmware
+ http://www.nslu2-linux.org/wiki/Unslung/StorageBasics
+ http://www.nslu2-linux.org/wiki/Unslung/WhichUSBPortforUnslung6
- - During firmware flashing, the top LED - Ready/Status - flashes
- red and green (approximately 5 minutes, but can be much longer).
+It is important to make sure that the device you intend to use is functional
+with the standard Linksys firmware before you attempt to use it with Unslung.
- - The NSLU2 will reboot after the flashing is complete.
+c) Review any known issues and errata:
-3) Shutdown the NSLU2 (again), attach disk(s), and power it back up.
+ http://www.nslu2-linux.org/wiki/Unslung/KnownProblems
-4) Verify your NSLU2 is working normally again at this point in the web
- interface. In particular, you should ensure that all your disks are still
- recognized as they were before you updated the firmware (including any
- shares and data you had previously stored.) If not, DO NOT CONTINUE.
- You may want to check out "How To Troubleshoot A Drive Missing Condition"
- at:
+(Hint: read the wiki pages carefully to determine the firmware release to which
+they apply; many of the pages contain information pertaining to older versions
+of Unslung, or even to other firmware entirely.)
- http://www.nslu2-linux.org/wiki/HowTo/TroubleshootADriveMissingCondition
+2) FIRMWARE INSTALLATION DETAILS
- - If you are not "unslinging", you can stop at this point. *HOWEVER!*,
- the only reason for not unslinging would be in the case of a re-flash
- of the SAME firmware. Even if this is a point firmware upgrade, you
- will need to unsling.
+The installation process is simple, but each step is important. The most
+common problems reported are a result of skipping one of the steps in this
+process, so be careful. In particular, having a disk or flash device plugged
+in when it shouldn't be can mean the difference between success and failure.
- ***** If you do not choose to do the unslinging procedure described below,
- DO NOT install packages unless you are SURE you know what you are
- doing! "Bricking" your NSLU2 by not unslinging and then running ipkg
- is not just a possibility, it is a certainty.
+a) Preparation
-5) Shutdown the NSLU2 and unplug *ALL* attached disks.
+- Install either the Sercomm (Windows) or the UpSlug2 (Linux and MacOS X)
+ utilities on the system you'll be using to upload the firmware.
- - You must NOT have any disk plugged into the NSLU2 when you reboot to
- perform the next part of installation - the "Unslinging".
+- Access the Linksys web GUI, and record your network settings.
+- Shutdown the NSLU2 and unplug all USB cables and devices.
-'UNSLINGING' DETAILS
+b) Flashing the New Firmware
-"Unslinging" is the process of copying the root filesystem of your NSLU2 onto
-an external disk, and configuring that external disk for installation of
-packages. Basically it's a script (stored in /sbin/unsling) which copies all
-the files from the internal jffs2 filesystem onto the external disk and tells
-the internal firmware to load the root filesystem from the external disk when
-booting in the future.
+- Enter upgrade mode, using the Reset Button technique.
-To run the unsling-script you have to be logged in as root (with a telnet
-session).
+- Use either the Sercomm or UpSlug2 Utility to upload the new firmware.
-NOTE: There are two root passwords. One is saved in an internal database file
-called /usr/local/passwd (we know this one - it's "uNSLUng" and used when you
-boot without a attached harddisk) the other is stored in an external file called
-/share/hdd/conf/passwd (we don't know this one - it's used when you boot with a
-external harddisk attached). Later in the process you can change both of
-them. That means: Everytime you boot WITHOUT an attached harddisk you gain
-root-access with the "uNSLUng" password. If you boot WITH an attached harddisk,
-you won't have access until you change the file /share/hdd/conf/passwd.
+c) Verifying the New Firmware
-NOTE about the NOTE: New in Unslung 6.x is that by default the "unsling"
-script will prompt for a new password. This new password will become the
-new password used whenever the NSLU2 is booted without it's disk (replacing
-the "uNSLUng" password), and it will also be the new root password used when
-the NSLU2 boots up with it's disk. If you are upgrading, or wish to preserve
-your passwords just the way they are, use the "-nopw" option with the unsling
-script.
+- The NSLU2 will restart itself after the firmware in installed.
-1) Power up the NSLU2 without any disks connected.
+- Access the Linksys web GUI. The new firmware version will be displayed on
+ the "Home" screen.
- - This only has to be done when you update the firmware.
+3) 'UNSLINGING' DETAILS
- ***** To reiterate, you should not have a disk plugged in at this stage.
- If you powered up your NSLU2 with a disk attached, shutdown the
- NSLU2, unplug the disks, and power up again.
+"Unslinging" is the process of copying the firmware to an external disk, and
+configuring that external disk for installation of packages. In order to
+perform this operation, you need to log in to the NSLU2 using telnet, and you
+need a suitable external disk or flash device.
-2) Enable telnet by going to the NSLU2's web interface and clicking on the
- "Manage Telnet" link (right-hand side), then on the "Enable/Disable
- NSLU2 telnet Service" page, click on the "Enable" button to turn on
- the telnet service.
+This procedure is made a bit more complicated because the behavior of the NSLU2
+can change depending on the presence of an external disk. Specifically, when
+an external storage device is plugged in, the NSLU2 will switch over to using
+the passwords and configuration information stored on that external disk, if
+possible. Since we don't know the root password originally written to that
+device, you must be very careful to perform the following steps in precisely
+the specified order, or you'll lock yourself out of your own device.
- (You can browse directly to the enable/disable telnet page in your
- browser: "http://192.168.1.77/Management/telnet.cgi".)
+a) Gain Telnet Access
- - Note that you should use the username "admin" and password "admin" for
- the web interface at this point (as no disks are attached, the
- default username and password is the only way to access the
- Management web pages).
+- Power up the NSLU2 without any disks connected.
- - Make sure you have **** NO DISKS ATTACHED AT THIS TIME ****
+- Enable telnet by going to the NSLU2's web GUI and clicking on the "Manage
+ Telnet" link (right-hand side), then on the "Enable" button to turn on the
+ telnet service.
- - If you plug a disk in before you complete the telnet connection, then
- the NSLU2 will pick up the Linksys password from the disk, and you
- will not be able to telnet into it. So don't have any disks attached
- at this point.
+- Use your telnet utility to telnet into the NSLU2, and log in using the
+ username root and password uNSLUng (upper/lower case is significant).
- - Make sure you have **** NO DISKS ATTACHED AT THIS TIME ****
+- Do not logout before you go to the next step, or you'll have to start this
+ step over again.
-3) OK, now that you don't have any disks attached, you can proceed and telnet
- into the NSLU2 using the username root and password uNSLUng.
+b) Gain Access to the External Storage
-4) Identify which drive you wish you "unsling", and plug it in. Wait a minute
- or two while the disk is mounted. Check the web interface to make sure
- that the disk has been recognized by the Linksys software.
+- Identify the drive or flash device to which you will be unslinging, and plug
+ it in to the desired USB port.
- - If the disk has not been previously formatted on the NSLU2, then now is
- the time to do that. Make sure that the drive is recognized in the
- web interface.
+- Wait for a minute or two while the disk is mounted.
- Be patient - it might take several minutes for the NSLU2 to recognize
- the hardware, mount the partitions, and verify that the drive is correctly
- configured to be considered "Formatted". Do not continue if the drive
- is not marked as "Formatted (ext3)" in the NSLU2 web interface.
+- Check the web GUI to make sure that the disk has been recognized by the
+ Linksys software
-5) In the telnet session, run "/sbin/unsling disk2".
- (If you've decided to unsling to a device connected to port 1, you'll run
- "/sbin/unsling disk1", of course.)
+- If the disk has not been previously formatted on the NSLU2, then now is the
+ time to do that.
- - Once you "unsling" to an external disk on a particular port (Disk 1 or
- Disk 2), it is important that you keep that disk continually plugged
- into that same port whenever the NSLU2 is turned on.
+- Be patient - it might take several minutes for the NSLU2 to recognize the
+ hardware, mount the partitions, and verify that the drive is correctly
+ configured to be considered "Formatted".
- ***** By default, unsling WILL prompt you for a new root password, and it
- will change the password on your disk as well. If this is NOT what
- you wish it to do, use the "-nopw" flag with the "unsling" command:
- "/sbin/unsling -nopw disk2" for example.
-
- For more information on changing passwords and all the places where
- the NSLU2 stores passwords, please see the following wiki article:
+- Do not continue if the drive is not marked as "Formatted (ext3)" in the
+ NSLU2 web GUI.
- http://www.nslu2-linux.org/wiki/HowTo/ChangePasswordsFromTheCommandLine
+c) Unsling
-6) (For those upgrading from Unslung 3.x only)
- If you wish to migrate your packages from the old Unslung 3.x location in
- the /share/hdd/conf (disk1) or /share/flash/conf (disk2) partitions to the
- new Unslung 4.x, 5.x and 6.x location on the data partition, then run:
- "/sbin/slingover disk1" (if your packages were previously on disk1 and you
- ran "/sbin/unsling disk1" in step 5) or "/sbin/slingover disk2" (if your
- packages were previously on disk2 and you ran "/sbin/unsling disk2" in
- step 5).
+- In the telnet session, run "unsling disk2" if your device is on the USB port
+ labeled "DISK 2", or "unsling disk1" if it's on the port marked "DISK 1".
- - If your packages were not stored in /share/hdd/conf or /share/flash/conf
- (e.g. you had previously moved your packages from the conf partition
- to the data partition), then all bets are off and you will need to
- read the /sbin/slingover script and perform the appropriate steps
- manually.
+- When prompted, enter a new root password - this password will replace the
+ uNSLUng password.
-7) Reboot.
+- When the unsling is complete, reboot the NSLU2.
- ***** DO NOT RUN ipkg BEFORE YOU REBOOT AND CONFIRM EXTERNAL ROOTFS *****
+d) Confirm That Your NSLU2 is Unslung:
- - If you were to run ipkg when the root filesystem is loaded from the
- internal jffs2 filesystem, then you would fill the flash and cause
- your NSLU2 to no longer boot and require reflashing to recover.
+- Once rebooted, open the NSLU2 web GUI in your browser.
-8) Confirm that your NSLU2 is unslung:
+- Confirm that the text at the bottom of the page reads "uNSLUng status:
+ Unslung to disk2, /dev/sda1" (your devices may vary, of course).
- You can verify that your NSLU2 is unslung by checking the NSLU2 web admin
- GUI - you are unslung if the text at the bottom reads something like:
- "uNSLUng status: Unslung to disk2, /dev/sda1"
+- Click the "Manage Telnet" link, and enable telnet as before.
- Also, when you login to the NSLU2, the login message printed will clearly
- indicate if you are unslung, or if something went awry and you are still
- running on the internal flash.
+- Telnet to the NSLU2, and login using the root user and the new password you
+ gave when unslinging.
- If your NSLU2 does not indicate that it is Unslung, rather it says that it
- is running from internal flash, then the first thing to check is:
- - Did you miss step 7 above (reboot)?
+- Confirm that the login message states that you are running in Unslung mode.
-9) Verify that you can log into the NSLU2 by going to the web GUI "Manage Telnet"
- page, enable the telnet service, then telnet in as the root user, with the
- password you entered when you performed the "unsling" operation.
+e) Updating Package Lists and Installing Optware Packages
-Make sure you add an entry to the "The Unslung 6.x" table in the Yahoo group.
-Just use the next free integer for your Unslung number.
+(This is, strictly speaking, optional - but we expect that you installed this
+firmware so that you could add additional software.)
-http://groups.yahoo.com/group/nslu2-linux/database?method=reportRows&tbl=12
+- Telnet into the NSLU2.
+- Check that your NSLU2 can reach the internet by pinging www.nslu2-linux.org.
+ (if it fails, check your NSLU2 network settings (on the web GUI pages), or
+ check your router or network configuration to correct this problem.)
-If you make no further changes, your NSLU2 will continue to operate normally.
-But to customize things, you'll be downloading packages and adding stuff to the
-/unslung directory using diversion scripts.
+- Enter the command "ipkg update" to update the list of software packages
+ ("optware") available for Unslung.
-http://www.nslu2-linux.org/wiki/Unslung/Packages
-http://www.nslu2-linux.org/wiki/Unslung/DiversionScripts
+- Install the "openssh" package with the command "ipkg install openssh".
-(One of the first packages you should consider installing is the OpenSSH
-package, which will provide you a secure and more usable replacement for the
-standard telnet service on the NSLU2.)
+-------------------------------------------------------------------------------
-Read the NOTES file (normally in /opt/doc/NOTES on your unslung NSLU2) to expand
-the capabilities of your Unslung NSLU2!
+Congratulations! Your NSLU2 is unslung, and ready to do more than you'd
+imagine such a small device could ever do. Enjoy! If you find the Unslung
+firmware useful, you may wish to make a donation to help support the project:
-Enjoy!
+ http://www.nslu2-linux.org/wiki/Main/Donate
diff --git a/packages/nslu2-binary-only/unslung-rootfs/linuxrc b/packages/nslu2-binary-only/unslung-rootfs/linuxrc
index 77185b9443..1500779280 100755
--- a/packages/nslu2-binary-only/unslung-rootfs/linuxrc
+++ b/packages/nslu2-binary-only/unslung-rootfs/linuxrc
@@ -41,9 +41,13 @@ if ( ! [ -f /.nodisk ] ) ; then
[ -e /.sdb1root -a -f /proc/hdd_sdb ] && cnt=0
cnt=`expr $cnt - 1`
done
- echo
+ /bin/echo
- /bin/sleep 5
+ if [ -e /.fastdisk ] ; then
+ /bin/sleep 5
+ else
+ /bin/sleep 15
+ fi
mounted=
diff --git a/packages/nslu2-binary-only/unslung-rootfs/telnet.htm b/packages/nslu2-binary-only/unslung-rootfs/telnet.htm
index 7807f228a2..c1d339777a 100644
--- a/packages/nslu2-binary-only/unslung-rootfs/telnet.htm
+++ b/packages/nslu2-binary-only/unslung-rootfs/telnet.htm
@@ -22,7 +22,7 @@
</CENTER>
<HR>
<P>NOTICE: The telnet service is inherently not secure. Among other security concerns, the login id and passwords you enter will be sent in plaintext across the network. In order to provide a slightly higher degree of security, the service will not be automatically restarted upon reboot. However, if you do not intend to reboot soon, it is recommended that you use this page to disable the service as soon as it is no longer needed.</P>
- <P>A better solution than telnet for network terminal access to the NSLU2 is to use an SSH package, such as "openssh" or "dropbear". These packages are secure, and will not require any special steps to enable once installed. Openssh can be installed using the standard "ipkg" mechanism: "ipkg install openssh".</P>
+ <P>A better solution than telnet for network terminal access to the NSLU2 is to use an SSH package, such as "openssh". This package is secure, will remove the need to use a web browser to enable access, and is less prone to inadvertent disabling than telnet. Openssh can be installed using the standard "ipkg" mechanism: "ipkg install openssh". No additional configuration is required; the installer will perform all the necessary configuration to setup openssh as a telnet replacement. <B>You are strongly encouraged to install openssh as soon as possible.</B></P>
<HR>
<CENTER>
<P><A HREF="/index.cgi">Back</A></P>
diff --git a/packages/nslu2-binary-only/unslung-rootfs/upgrade.htm b/packages/nslu2-binary-only/unslung-rootfs/upgrade.htm
index 2301a89c0f..39c65b2e7c 100644
--- a/packages/nslu2-binary-only/unslung-rootfs/upgrade.htm
+++ b/packages/nslu2-binary-only/unslung-rootfs/upgrade.htm
@@ -95,7 +95,12 @@
<tr>
<td colspan="2" align="left" class="smsg">
NOTE: You cannot use this upgrade page to install new firmware on Unslung.
-You must use the Redboot mechanism in order to install new firmware instead.
+Instead, use the "reset button" method to enter upgrade mode, and use either
+the "sercomm" or the "upslug2" utility to perform the reflash operation. See
+<a href="http://www.nslu2-linux.org/wiki/HowTo/UseTheResetButtonToEnterUpgradeMode">
+"How To Use The Reset Button To Enter Upgrade Mode"</a>, and
+<a href="http://www.nslu2-linux.org/wiki/HowTo/RecoverFromABadFlash">
+"How To Recover From A Bad Flash"</a> if you need more information.
</td>
</tr>
</table></div> </td>
diff --git a/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb b/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb
index 23b240debc..0eebf7d04f 100644
--- a/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb
+++ b/packages/nslu2-binary-only/unslung-rootfs_2.3r63.bb
@@ -1,7 +1,7 @@
SECTION = "base"
COMPATIBLE_MACHINE = "nslu2"
-PR = "r19"
+PR = "r22"
DEPENDS = "nslu2-linksys-libs nslu2-linksys-sambacodepages"
@@ -177,6 +177,5 @@ do_install () {
( cd ${S} ; tar -c -v -f - --exclude '.pc' . ) | ( cd ${D} ; tar xvf - )
}
-PACKAGES = "${PN}"
FILES_${PN} = "/"
RDEPENDS_${PN} = "nslu2-linksys-libs"
diff --git a/packages/ntpclient/ntpclient_2007_365.bb b/packages/ntpclient/ntpclient_2007_365.bb
new file mode 100644
index 0000000000..b892f384e7
--- /dev/null
+++ b/packages/ntpclient/ntpclient_2007_365.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "NTP (RFC-1305) client for unix-alike computers"
+HOMEPAGE = "http://doolittle.icarus.com/ntpclient"
+AUTHOR = "Larry Doolittle <larry@doolittle.boa.org>"
+RDEPENDS = "busybox"
+SECTION = "admin"
+LICENSE = "GPLv2"
+PR = "r0"
+# The ntpclient package uses version numbers that include an underscore :(
+PV = "2007_365"
+# ntpclient unpacks into a directory that doesn't include version info :(
+S = "${WORKDIR}/${PN}-2007"
+
+SRC_URI = "http://doolittle.icarus.com/ntpclient/ntpclient_${PV}.tar.gz \
+ file://init"
+
+INITSCRIPT_NAME = "ntpclient"
+INITSCRIPT_PARAMS = "defaults 65"
+inherit update-rc.d
+
+LDFLAGS += " -lrt "
+
+do_compile() {
+ oe_runmake ntpclient
+ oe_runmake adjtimex
+}
+
+do_install () {
+ # Install the binary and tools
+ install -D -m 0755 ${S}/ntpclient ${D}${base_sbindir}/ntpclient
+ install -D -m 0755 ${S}/adjtimex ${D}${base_sbindir}/adjtimex
+ install -D -m 0755 ${S}/rate.awk ${D}${sbindir}/ntpclient-drift-rate.awk
+ install -D -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/ntpclient
+}
+
diff --git a/packages/nunome/nunome_1.0.2.bb b/packages/nunome/nunome_1.0.2.bb
index 044ed1358c..4dd1519536 100644
--- a/packages/nunome/nunome_1.0.2.bb
+++ b/packages/nunome/nunome_1.0.2.bb
@@ -20,11 +20,11 @@ PARALLEL_MAKE = ""
do_configure_prepend() {
sed -i -e 's,/opt/QtPalmtop/bin/,${bindir}/,g' "${S}/ui/nunome.h"
sed -i -e 's,/opt/QtPalmtop/,${palmtopdir}/,g' "${S}/ui/nunome.h"
- echo -e "TEMPLATE=subdirs\nSUBDIRS=Nnmlib server ui dicman ui" >nunome.pro
+ printf "TEMPLATE=subdirs\nSUBDIRS=Nnmlib server ui dicman ui\n" >nunome.pro
pushd Nnmlib && qmake -project -t lib && popd
- pushd server && qmake -project && echo -e "LIBS+=-lNnmlib\nTARGET=server.bin" >> server.pro && popd
- pushd dicman && qmake -project && echo -e "LIBS+=-lnunome -lNnmlib\nTARGET=dicman.bin" >> dicman.pro && popd
- pushd ui && qmake -project -t lib && echo -e "LIBS+=-lNnmlib\nTARGET=nunome" >> ui.pro && popd
+ pushd server && qmake -project && printf "LIBS+=-lNnmlib\nTARGET=server.bin\n" >> server.pro && popd
+ pushd dicman && qmake -project && printf "LIBS+=-lnunome -lNnmlib\nTARGET=dicman.bin\n" >> dicman.pro && popd
+ pushd ui && qmake -project -t lib && printf "LIBS+=-lNnmlib\nTARGET=nunome\n" >> ui.pro && popd
find . -name "moc*"|xargs rm -f
find . -name "Makefile"|xargs rm -f
}
diff --git a/packages/nut/.mtn2git_empty b/packages/nut/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nut/.mtn2git_empty
diff --git a/packages/nut/files/.mtn2git_empty b/packages/nut/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/nut/files/.mtn2git_empty
diff --git a/packages/nut/files/libm.patch b/packages/nut/files/libm.patch
new file mode 100644
index 0000000000..658d42face
--- /dev/null
+++ b/packages/nut/files/libm.patch
@@ -0,0 +1,21 @@
+--- a/drivers/Makefile.am.org 2007-10-01 16:06:24.000000000 +0300
++++ a/drivers/Makefile.am 2008-01-09 02:13:09.000000000 +0200
+@@ -125,7 +125,7 @@
+ tripplite_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LDFLAGS) -lm
+
+ bcmxcp_usb_SOURCES = bcmxcp_usb.c bcmxcp.c nut_usb.c
+-bcmxcp_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LDFLAGS)
++bcmxcp_usb_LDADD = $(LDADD_DRIVERS) $(LIBUSB_LDFLAGS) -lm
+
+ megatec_usb_SOURCES = megatec.c megatec_usb.c libusb.c
+ megatec_usb_CFLAGS = $(AM_CFLAGS) -DMEGATEC_SUBDRV
+--- a/drivers/Makefile.am.org 2008-01-09 02:14:32.000000000 +0200
++++ a/drivers/Makefile.am 2008-01-09 02:17:37.000000000 +0200
+@@ -67,6 +67,7 @@
+ al175_SOURCES = al175.c
+ apcsmart_SOURCES = apcsmart.c
+ bcmxcp_SOURCES = bcmxcp.c bcmxcp_ser.c
++bcmxcp_LDADD = $(LDADD) -lm
+ belkin_SOURCES = belkin.c
+ belkinunv_SOURCES = belkinunv.c
+ bestfcom_SOURCES = bestfcom.c
diff --git a/packages/nut/nut_2.2.1.bb b/packages/nut/nut_2.2.1.bb
new file mode 100644
index 0000000000..db3367435d
--- /dev/null
+++ b/packages/nut/nut_2.2.1.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Network UPS Tools"
+LICENSE = "GPL"
+DEPENDS = "libusb"
+PR = "r1"
+
+inherit autotools
+
+EXTRA_OECONF = "--with-usb"
+
+SRC_URI = "http://www.networkupstools.org/source/2.2/nut-${PV}.tar.gz \
+ file://libm.patch;patch=1 \
+ "
+
+FILES_${PN} += "${datadir}/"
diff --git a/packages/obsolete/classpath/.mtn2git_empty b/packages/obsolete/classpath/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/classpath/.mtn2git_empty
diff --git a/packages/obsolete/classpath/classpath-gtk_0.93.bb b/packages/obsolete/classpath/classpath-gtk_0.93.bb
new file mode 100644
index 0000000000..3c9f073e26
--- /dev/null
+++ b/packages/obsolete/classpath/classpath-gtk_0.93.bb
@@ -0,0 +1,9 @@
+require classpath.inc
+
+DEPENDS = "glib-2.0 gtk+ cairo gconf libart-lgpl pango libxtst virtual/javac-native zip-native"
+RDEPENDS_${PN} = "classpath-common (>= ${PV})"
+RCONFLICTS_${PN} = "classpath-minimal"
+
+SRC_URI += "file://disable-automake-checks-v2.patch;patch=1"
+
+EXTRA_OECONF = "--with-jikes --disable-plugin --disable-dssi"
diff --git a/packages/obsolete/classpath/classpath-gtk_cvs.bb b/packages/obsolete/classpath/classpath-gtk_cvs.bb
new file mode 100644
index 0000000000..4d4895a319
--- /dev/null
+++ b/packages/obsolete/classpath/classpath-gtk_cvs.bb
@@ -0,0 +1,30 @@
+require classpath.inc
+
+PR = "r2"
+
+SRCDATE_${PN} ?= "20070501"
+PV = "0.93+cvs${SRCDATE}"
+
+### note from Laibsch: bug 2523 has information on how to build this package
+DEPENDS = "glib-2.0 gtk+ cairo gconf virtual/javac-native zip-native virtual/java-native libxtst"
+RDEPENDS_${PN} = "classpath-common (>= ${PV})"
+RCONFLICTS_${PN} = "classpath-minimal"
+
+SRC_URI = "cvs://anonymous@cvs.savannah.gnu.org/sources/classpath;module=classpath \
+ file://disable-automake-checks-v2.patch;patch=1"
+
+S = "${WORKDIR}/classpath"
+
+EXTRA_OECONF = "--with-javac=${STAGING_BINDIR_NATIVE}/javac --with-ecj-jar=${STAGING_DATADIR_NATIVE}/ecj-bootstrap.jar --disable-plugin --disable-dssi --disable-alsa"
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/classpath
+ install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
+ install -d ${STAGING_DATADIR}/classpath
+ install -m 0755 lib/glibj.zip ${STAGING_DATADIR}/classpath/
+}
+
+do_install() {
+ autotools_do_install
+ mv ${D}${libdir}/security ${D}${libdir}/${PN}
+}
diff --git a/packages/obsolete/classpath/classpath-minimal-native_0.93.bb b/packages/obsolete/classpath/classpath-minimal-native_0.93.bb
new file mode 100644
index 0000000000..e7862e6e3f
--- /dev/null
+++ b/packages/obsolete/classpath/classpath-minimal-native_0.93.bb
@@ -0,0 +1,23 @@
+require classpath.inc
+
+DEPENDS = "glib-2.0 libart-lgpl pango libxtst virtual/javac-native zip-native"
+PR = "r1"
+
+SRC_URI += "file://disable-automake-checks-v2.patch;patch=1"
+
+S = "${WORKDIR}/classpath-${PV}"
+
+inherit native
+
+EXTRA_OECONF = "--with-jikes --disable-gconf-peer --disable-gtk-peer --disable-plugin --disable-dssi --disable-examples"
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/classpath
+ install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
+ install -d ${STAGING_DATADIR}/classpath
+ install -m 0755 lib/glibj.zip ${STAGING_DATADIR}/classpath/
+}
+
+do_install() {
+ :
+}
diff --git a/packages/classpath/classpath-minimal-native_0.95.bb b/packages/obsolete/classpath/classpath-minimal-native_0.95.bb
index 28b25a7cb9..28b25a7cb9 100644
--- a/packages/classpath/classpath-minimal-native_0.95.bb
+++ b/packages/obsolete/classpath/classpath-minimal-native_0.95.bb
diff --git a/packages/obsolete/classpath/classpath-minimal_0.90.bb b/packages/obsolete/classpath/classpath-minimal_0.90.bb
new file mode 100644
index 0000000000..e006e23c32
--- /dev/null
+++ b/packages/obsolete/classpath/classpath-minimal_0.90.bb
@@ -0,0 +1,9 @@
+require classpath.inc
+
+DEPENDS = "virtual/javac-native zip-native"
+RDEPENDS_${PBN}-minimal = "${PBN}-common (>= ${PV})"
+RCONFLICTS_${PBN}-minimal = "${PBN}-gtk"
+
+SRC_URI += "file://disable-automake-checks.patch;patch=1"
+
+EXTRA_OECONF = "--with-jikes --without-x --with-glibj --disable-gtk-peer --disable-alsa"
diff --git a/packages/obsolete/classpath/classpath-minimal_0.95.bb b/packages/obsolete/classpath/classpath-minimal_0.95.bb
new file mode 100644
index 0000000000..1fe65edc08
--- /dev/null
+++ b/packages/obsolete/classpath/classpath-minimal_0.95.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "GNU Classpath standard Java libraries"
+HOMEPAGE = "http://www.gnu.org/software/classpath/"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "Classpath"
+PROVIDES = "classpath"
+RPROVIDES = "classpath"
+PR = "r1"
+
+S = "${WORKDIR}/classpath-${PV}"
+
+SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz"
+
+DEPENDS = "virtual/javac-native zip-native"
+
+inherit autotools
+
+
+EXTRA_OECONF = "--with-glibj \
+ --with-javac=${STAGING_BINDIR_NATIVE}/javac \
+ --disable-alsa \
+ --disable-gconf-peer \
+ --disable-gtk-peer \
+ --disable-plugin \
+ --disable-dssi \
+ --disable-examples \
+ "
+do_install() {
+ :
+}
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/classpath-minimal/
+ install -m 0644 include/jni.h ${STAGING_INCDIR}/classpath-minimal/
+ install -m 0644 include/jni_md.h ${STAGING_INCDIR}/classpath-minimal/
+ install -d ${STAGING_DATADIR}/java/classpath-minimal/
+ install -m 0644 lib/glibj.zip ${STAGING_DATADIR}/java/classpath-minimal/
+}
+
+PACKAGES = "${PN}-dbg "
diff --git a/packages/obsolete/classpath/classpath.inc b/packages/obsolete/classpath/classpath.inc
new file mode 100644
index 0000000000..d9498c99d5
--- /dev/null
+++ b/packages/obsolete/classpath/classpath.inc
@@ -0,0 +1,30 @@
+DESCRIPTION = "GNU Classpath standard Java libraries"
+HOMEPAGE = "http://www.gnu.org/software/classpath/"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "Classpath"
+PROVIDES = "classpath"
+RPROVIDES = "classpath"
+
+SRC_URI = "${GNU_MIRROR}/classpath/classpath-${PV}.tar.gz \
+ file://gconf_version.patch;patch=1 \
+ file://fix-endian-arm-floats.patch;patch=1"
+
+inherit autotools
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/classpath
+ install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
+}
+
+do_install() {
+ autotools_do_install
+ mv ${D}${libdir}/security ${D}${libdir}/${PN}
+}
+
+PACKAGES =+ "classpath-common classpath-examples classpath-tools"
+FILES_classpath-common += "${datadir}/classpath/glibj.zip"
+FILES_classpath-examples += "${datadir}/classpath/examples"
+FILES_classpath-tools += "${datadir}/classpath/tools.zip ${datadir}/classpath/tools"
+FILES_classpath-dev += "${libdir}/*.so"
+FILES_classpath-dbg += "${libdir}/classpath/.debug"
diff --git a/packages/obsolete/classpath/classpath_0.14.bb b/packages/obsolete/classpath/classpath_0.14.bb
new file mode 100644
index 0000000000..a20aa73992
--- /dev/null
+++ b/packages/obsolete/classpath/classpath_0.14.bb
@@ -0,0 +1,10 @@
+require classpath.inc
+
+DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native"
+RDEPENDS_${PN} = "${PN}-common (${PV})"
+PR = "r2"
+
+SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
+ file://disable-automake-checks.patch;patch=1"
+
+EXTRA_OECONF = "--with-jikes"
diff --git a/packages/obsolete/classpath/classpath_0.15.bb b/packages/obsolete/classpath/classpath_0.15.bb
new file mode 100644
index 0000000000..a20aa73992
--- /dev/null
+++ b/packages/obsolete/classpath/classpath_0.15.bb
@@ -0,0 +1,10 @@
+require classpath.inc
+
+DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native"
+RDEPENDS_${PN} = "${PN}-common (${PV})"
+PR = "r2"
+
+SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
+ file://disable-automake-checks.patch;patch=1"
+
+EXTRA_OECONF = "--with-jikes"
diff --git a/packages/obsolete/classpath/classpath_0.17.bb b/packages/obsolete/classpath/classpath_0.17.bb
new file mode 100644
index 0000000000..a20aa73992
--- /dev/null
+++ b/packages/obsolete/classpath/classpath_0.17.bb
@@ -0,0 +1,10 @@
+require classpath.inc
+
+DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native"
+RDEPENDS_${PN} = "${PN}-common (${PV})"
+PR = "r2"
+
+SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
+ file://disable-automake-checks.patch;patch=1"
+
+EXTRA_OECONF = "--with-jikes"
diff --git a/packages/obsolete/classpath/classpath_0.18.bb b/packages/obsolete/classpath/classpath_0.18.bb
new file mode 100644
index 0000000000..8696501fcf
--- /dev/null
+++ b/packages/obsolete/classpath/classpath_0.18.bb
@@ -0,0 +1,10 @@
+require classpath.inc
+
+DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native"
+RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
+PR = "r1"
+
+SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
+ file://disable-automake-checks.patch;patch=1"
+
+EXTRA_OECONF = "--with-jikes"
diff --git a/packages/obsolete/classpath/classpath_0.19.bb b/packages/obsolete/classpath/classpath_0.19.bb
new file mode 100644
index 0000000000..8696501fcf
--- /dev/null
+++ b/packages/obsolete/classpath/classpath_0.19.bb
@@ -0,0 +1,10 @@
+require classpath.inc
+
+DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native"
+RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
+PR = "r1"
+
+SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
+ file://disable-automake-checks.patch;patch=1"
+
+EXTRA_OECONF = "--with-jikes"
diff --git a/packages/obsolete/classpath/classpath_0.20.bb b/packages/obsolete/classpath/classpath_0.20.bb
new file mode 100644
index 0000000000..8696501fcf
--- /dev/null
+++ b/packages/obsolete/classpath/classpath_0.20.bb
@@ -0,0 +1,10 @@
+require classpath.inc
+
+DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native"
+RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
+PR = "r1"
+
+SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
+ file://disable-automake-checks.patch;patch=1"
+
+EXTRA_OECONF = "--with-jikes"
diff --git a/packages/obsolete/classpath/classpath_cvs.bb b/packages/obsolete/classpath/classpath_cvs.bb
new file mode 100644
index 0000000000..943af376a7
--- /dev/null
+++ b/packages/obsolete/classpath/classpath_cvs.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "GNU Classpath standard Java libraries"
+HOMEPAGE = "http://www.gnu.org/software/classpath/"
+LICENSE = "Classpath"
+PRIORITY = "optional"
+SECTION = "libs"
+PV = "0.20+cvs${SRCDATE}"
+
+DEFAULT_PREFERENCE = "-1"
+
+DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native"
+RDEPENDS_${PN} = "${PN}-common (>= ${PV})"
+
+SRC_URI = "cvs://anoncvs@cvs.gnu.org/cvsroot/classpath;method=pserver;rsh=ssh;module=classpath \
+ file://disable-automake-checks.patch;patch=1"
+S = "${WORKDIR}/classpath"
+
+inherit autotools
+
+EXTRA_OECONF = "--with-jikes"
+
+PACKAGES += " ${PN}-common ${PN}-examples"
+
+FILES_${PN} = "${libdir}/${PN}"
+FILES_${PN}-common = "${datadir}/${PN}/glibj.zip"
+FILES_${PN}-examples = "${datadir}/${PN}/examples"
+
+do_stage() {
+ install -d ${STAGING_INCDIR}/classpath
+ install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
+}
+
+do_install() {
+ autotools_do_install
+ mv ${D}${libdir}/security ${D}${libdir}/${PN}
+}
diff --git a/packages/obsolete/classpath/files/.mtn2git_empty b/packages/obsolete/classpath/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/classpath/files/.mtn2git_empty
diff --git a/packages/classpath/files/disable-automake-checks-v2.patch b/packages/obsolete/classpath/files/disable-automake-checks-v2.patch
index 0c1df1acae..0c1df1acae 100644
--- a/packages/classpath/files/disable-automake-checks-v2.patch
+++ b/packages/obsolete/classpath/files/disable-automake-checks-v2.patch
diff --git a/packages/classpath/files/disable-automake-checks.patch b/packages/obsolete/classpath/files/disable-automake-checks.patch
index d6a55428ad..d6a55428ad 100644
--- a/packages/classpath/files/disable-automake-checks.patch
+++ b/packages/obsolete/classpath/files/disable-automake-checks.patch
diff --git a/packages/classpath/files/fix-endian-arm-floats.patch b/packages/obsolete/classpath/files/fix-endian-arm-floats.patch
index a9af0611b2..a9af0611b2 100644
--- a/packages/classpath/files/fix-endian-arm-floats.patch
+++ b/packages/obsolete/classpath/files/fix-endian-arm-floats.patch
diff --git a/packages/classpath/files/gconf_version.patch b/packages/obsolete/classpath/files/gconf_version.patch
index b1be1209a2..b1be1209a2 100644
--- a/packages/classpath/files/gconf_version.patch
+++ b/packages/obsolete/classpath/files/gconf_version.patch
diff --git a/packages/obsolete/jamvm/.mtn2git_empty b/packages/obsolete/jamvm/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/jamvm/.mtn2git_empty
diff --git a/packages/obsolete/jamvm/files/.mtn2git_empty b/packages/obsolete/jamvm/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/jamvm/files/.mtn2git_empty
diff --git a/packages/obsolete/jamvm/files/jamvm-1.3.1-size-defaults.patch b/packages/obsolete/jamvm/files/jamvm-1.3.1-size-defaults.patch
new file mode 100644
index 0000000000..a41beee982
--- /dev/null
+++ b/packages/obsolete/jamvm/files/jamvm-1.3.1-size-defaults.patch
@@ -0,0 +1,12 @@
+--- jamvm-1.3.1.orig/src/jam.h 2005-07-17 23:53:34.000000000 +0200
++++ jamvm-1.3.1/src/jam.h 2005-07-17 23:54:17.000000000 +0200
+@@ -548,7 +548,9 @@
+ #endif
+
+ /* default size of the Java stack */
++#ifndef DEFAULT_STACK
+ #define DEFAULT_STACK 64*KB
++#endif
+
+ /* size of emergency area - big enough to create
+ a StackOverflow exception */
diff --git a/packages/obsolete/jamvm/jamvm-1.3.0/.mtn2git_empty b/packages/obsolete/jamvm/jamvm-1.3.0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/jamvm/jamvm-1.3.0/.mtn2git_empty
diff --git a/packages/jamvm/jamvm-1.3.0/heap-size.patch b/packages/obsolete/jamvm/jamvm-1.3.0/heap-size.patch
index 36d681889d..36d681889d 100644
--- a/packages/jamvm/jamvm-1.3.0/heap-size.patch
+++ b/packages/obsolete/jamvm/jamvm-1.3.0/heap-size.patch
diff --git a/packages/jamvm/jamvm_1.3.0.bb b/packages/obsolete/jamvm/jamvm_1.3.0.bb
index ffdf74938f..ffdf74938f 100644
--- a/packages/jamvm/jamvm_1.3.0.bb
+++ b/packages/obsolete/jamvm/jamvm_1.3.0.bb
diff --git a/packages/jamvm/jamvm_1.3.1.bb b/packages/obsolete/jamvm/jamvm_1.3.1.bb
index 20b1535707..20b1535707 100644
--- a/packages/jamvm/jamvm_1.3.1.bb
+++ b/packages/obsolete/jamvm/jamvm_1.3.1.bb
diff --git a/packages/jamvm/jamvm_1.3.2.bb b/packages/obsolete/jamvm/jamvm_1.3.2.bb
index 9727fd6cda..9727fd6cda 100644
--- a/packages/jamvm/jamvm_1.3.2.bb
+++ b/packages/obsolete/jamvm/jamvm_1.3.2.bb
diff --git a/packages/jamvm/jamvm_1.4.1.bb b/packages/obsolete/jamvm/jamvm_1.4.1.bb
index 9727fd6cda..9727fd6cda 100644
--- a/packages/jamvm/jamvm_1.4.1.bb
+++ b/packages/obsolete/jamvm/jamvm_1.4.1.bb
diff --git a/packages/obsolete/quilt/.mtn2git_empty b/packages/obsolete/quilt/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/quilt/.mtn2git_empty
diff --git a/packages/obsolete/quilt/quilt-0.39/.mtn2git_empty b/packages/obsolete/quilt/quilt-0.39/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/obsolete/quilt/quilt-0.39/.mtn2git_empty
diff --git a/packages/quilt/quilt-0.39/non-gnu.patch b/packages/obsolete/quilt/quilt-0.39/non-gnu.patch
index 8b07bc2923..8b07bc2923 100644
--- a/packages/quilt/quilt-0.39/non-gnu.patch
+++ b/packages/obsolete/quilt/quilt-0.39/non-gnu.patch
diff --git a/packages/quilt/quilt-0.39/nostrip.patch b/packages/obsolete/quilt/quilt-0.39/nostrip.patch
index 4dedad96d4..4dedad96d4 100644
--- a/packages/quilt/quilt-0.39/nostrip.patch
+++ b/packages/obsolete/quilt/quilt-0.39/nostrip.patch
diff --git a/packages/quilt/quilt-native_0.39.bb b/packages/obsolete/quilt/quilt-native_0.39.bb
index 7caa9f620c..7caa9f620c 100644
--- a/packages/quilt/quilt-native_0.39.bb
+++ b/packages/obsolete/quilt/quilt-native_0.39.bb
diff --git a/packages/quilt/quilt_0.39.bb b/packages/obsolete/quilt/quilt_0.39.bb
index 5d8ae086c2..5d8ae086c2 100644
--- a/packages/quilt/quilt_0.39.bb
+++ b/packages/obsolete/quilt/quilt_0.39.bb
diff --git a/packages/quilt/quilt_0.39.inc b/packages/obsolete/quilt/quilt_0.39.inc
index 4fbbb03316..4fbbb03316 100644
--- a/packages/quilt/quilt_0.39.inc
+++ b/packages/obsolete/quilt/quilt_0.39.inc
diff --git a/packages/obsolete/tasks/task-bootstrap-unionroot.bb b/packages/obsolete/tasks/task-bootstrap-unionroot.bb
index e737e31608..a4340eb4e8 100644
--- a/packages/obsolete/tasks/task-bootstrap-unionroot.bb
+++ b/packages/obsolete/tasks/task-bootstrap-unionroot.bb
@@ -9,7 +9,6 @@ DEFAULT_PREFERENCE = "-1"
PACKAGE_ARCH = "${MACHINE_ARCH}"
ALLOW_EMPTY = "1"
-PACKAGES = "${PN}"
MODUTILS ?= "24 26"
diff --git a/packages/obsolete/tasks/task-bootstrap.bb b/packages/obsolete/tasks/task-bootstrap.bb
index d84f331102..ebe78058b2 100644
--- a/packages/obsolete/tasks/task-bootstrap.bb
+++ b/packages/obsolete/tasks/task-bootstrap.bb
@@ -6,7 +6,6 @@ PR = "r25"
PACKAGE_ARCH = "${MACHINE_ARCH}"
ALLOW_EMPTY = "1"
-PACKAGES = "${PN}"
MODUTILS ?= "24 26"
diff --git a/packages/octave/octave.inc b/packages/octave/octave.inc
index 414f95bf83..5d8fe756f9 100644
--- a/packages/octave/octave.inc
+++ b/packages/octave/octave.inc
@@ -1,7 +1,4 @@
-DESCRIPTION = "GNU Octave is a high-level language, primarily intended for numerical computations. \
-It provides a convenient command line interface for solving linear and nonlinear problems numerically, \
-and for performing other numerical experiments using a language that is mostly compatible with Matlab. \
-It may also be used as a batch-oriented language."
+DESCRIPTION = "Matlab alternative for numerical computations"
HOMEPAGE = "http://www.gnu.org/software/octave/"
SECTION = "console/scientific"
LICENSE = "GPL"
@@ -11,7 +8,11 @@ RDEPENDS = "libfftw3"
inherit autotools
-EXTRA_OECONF = "--without-hdf5"
+EXTRA_OECONF = "--without-hdf5 --without-glpk -without-umfpack \
+ --without-colamd --without-ccolamd --without-cholmod \
+ --without-cxsparse"
+
+# additional missing dependency/functionality: Qhull gperf
do_configure() {
gnu-configize
@@ -26,4 +27,3 @@ FILES_${PN}-m = "${datadir}/${PN}/*"
do_stage() {
autotools_stage_all
}
-
diff --git a/packages/octave/octave_2.1.73.bb b/packages/octave/octave_2.1.73.bb
index a6bf240732..8efe5243d7 100644
--- a/packages/octave/octave_2.1.73.bb
+++ b/packages/octave/octave_2.1.73.bb
@@ -2,7 +2,7 @@ require octave.inc
SRC_URI = "ftp://ftp.octave.org/pub/octave/obsolete/${PN}-${PV}.tar.gz"
-PR = "r0"
+PR = "r1"
PACKAGES =+ "libcruft-dev liboctave-dev liboctinterp-dev"
diff --git a/packages/octave/octave_2.9.17.bb b/packages/octave/octave_2.9.17.bb
deleted file mode 100644
index 5473e0d99e..0000000000
--- a/packages/octave/octave_2.9.17.bb
+++ /dev/null
@@ -1,27 +0,0 @@
-require octave.inc
-
-SRC_URI = "ftp://ftp.octave.org/pub/octave/${PN}-${PV}.tar.gz \
- file://configure.patch;patch=1"
-
-PR = "r0"
-
-PACKAGES =+ "libcruft liboctave liboctinterp octave-oct \
- libcruft-dev liboctave-dev liboctinterp-dev \
- libcruft-dbg liboctave-dbg liboctinterp-dbg"
-
-FILES_libcruft = "${libdir}/${PN}-${PV}/libcruft*"
-FILES_libcruft-dev = "${libdir}/${PN}-${PV}/libcruft.so"
-FILES_libcruft-dbg = "${libdir}/${PN}-${PV}/.debug/libcruft*"
-
-FILES_liboctave = "${libdir}/${PN}-${PV}/liboctave*"
-FILES_liboctave-dev = "${libdir}/${PN}-${PV}/liboctave.so"
-FILES_liboctave-dbg = "${libdir}/${PN}-${PV}/.debug/liboctave*"
-
-FILES_liboctinterp = "${libdir}/${PN}-${PV}/liboctinterp*"
-FILES_liboctinterp-dev = "${libdir}/${PN}-${PV}/liboctinterp.so"
-FILES_liboctinterp-dbg = "${libdir}/${PN}-${PV}/.debug/liboctinterp*"
-
-# octave-oct provides subroutines in .oct file format
-FILES_${PN}-oct = "${libexecdir}/${PN}/${PV}/oct/${TARGET_SYS}/*.oct"
-
-FILES_${PN}-dbg += "${libexecdir}/${PN}/${PV}/oct/${TARGET_SYS}/.debug"
diff --git a/packages/octave/octave_2.9.19.bb b/packages/octave/octave_2.9.19.bb
new file mode 100644
index 0000000000..3b56c8657d
--- /dev/null
+++ b/packages/octave/octave_2.9.19.bb
@@ -0,0 +1,27 @@
+require octave.inc
+
+SRC_URI = "ftp://ftp.octave.org/pub/octave/${PN}-${PV}.tar.gz \
+ file://configure.patch;patch=1"
+
+PR = "r1"
+
+PACKAGES =+ "libcruft liboctave liboctinterp octave-oct \
+ libcruft-dev liboctave-dev liboctinterp-dev \
+ libcruft-dbg liboctave-dbg liboctinterp-dbg"
+
+FILES_libcruft = "${libdir}/${PN}-${PV}/libcruft.so.*"
+FILES_libcruft-dev = "${libdir}/${PN}-${PV}/libcruft*"
+FILES_libcruft-dbg += "${libdir}/${PN}-${PV}/.debug/libcruft*"
+
+FILES_liboctave = "${libdir}/${PN}-${PV}/liboctave.so.*"
+FILES_liboctave-dev = "${libdir}/${PN}-${PV}/liboctave*"
+FILES_liboctave-dbg += "${libdir}/${PN}-${PV}/.debug/liboctave*"
+
+FILES_liboctinterp = "${libdir}/${PN}-${PV}/liboctinterp.so.*"
+FILES_liboctinterp-dev = "${libdir}/${PN}-${PV}/liboctinterp*"
+FILES_liboctinterp-dbg += "${libdir}/${PN}-${PV}/.debug/liboctinterp*"
+
+# octave-oct provides subroutines in .oct file format
+FILES_${PN}-oct = "${libexecdir}/${PN}/${PV}/oct/${TARGET_SYS}/*.oct"
+
+FILES_${PN}-dbg += "${libexecdir}/${PN}/${PV}/oct/${TARGET_SYS}/.debug"
diff --git a/packages/octave/octave_3.0.0.bb b/packages/octave/octave_3.0.0.bb
new file mode 100644
index 0000000000..3b56c8657d
--- /dev/null
+++ b/packages/octave/octave_3.0.0.bb
@@ -0,0 +1,27 @@
+require octave.inc
+
+SRC_URI = "ftp://ftp.octave.org/pub/octave/${PN}-${PV}.tar.gz \
+ file://configure.patch;patch=1"
+
+PR = "r1"
+
+PACKAGES =+ "libcruft liboctave liboctinterp octave-oct \
+ libcruft-dev liboctave-dev liboctinterp-dev \
+ libcruft-dbg liboctave-dbg liboctinterp-dbg"
+
+FILES_libcruft = "${libdir}/${PN}-${PV}/libcruft.so.*"
+FILES_libcruft-dev = "${libdir}/${PN}-${PV}/libcruft*"
+FILES_libcruft-dbg += "${libdir}/${PN}-${PV}/.debug/libcruft*"
+
+FILES_liboctave = "${libdir}/${PN}-${PV}/liboctave.so.*"
+FILES_liboctave-dev = "${libdir}/${PN}-${PV}/liboctave*"
+FILES_liboctave-dbg += "${libdir}/${PN}-${PV}/.debug/liboctave*"
+
+FILES_liboctinterp = "${libdir}/${PN}-${PV}/liboctinterp.so.*"
+FILES_liboctinterp-dev = "${libdir}/${PN}-${PV}/liboctinterp*"
+FILES_liboctinterp-dbg += "${libdir}/${PN}-${PV}/.debug/liboctinterp*"
+
+# octave-oct provides subroutines in .oct file format
+FILES_${PN}-oct = "${libexecdir}/${PN}/${PV}/oct/${TARGET_SYS}/*.oct"
+
+FILES_${PN}-dbg += "${libexecdir}/${PN}/${PV}/oct/${TARGET_SYS}/.debug"
diff --git a/packages/openchrome/openchrome_svn.bb b/packages/openchrome/openchrome_svn.bb
index d4e2da5ebe..c1e9829a35 100644
--- a/packages/openchrome/openchrome_svn.bb
+++ b/packages/openchrome/openchrome_svn.bb
@@ -9,8 +9,8 @@ FILES_libviaXvMC = "${libdir}/libviaXvMC.so.*"
FILES_libviaXvMCPro = "${libdir}/libviaXvMCPro.so.*"
FILES_libviaXvMC-dev = "${libdir}/libviaXvMC.so ${libdir}/libviaXvMC.la"
FILES_libviaXvMCPro-dev = "${libdir}/libviaXvMCPro.so ${libdir}/libviaXvMCPro.la"
-FILES_libviaXvMC-dbg = "${libdir}/.debug/libviaXvMC.so.*"
-FILES_libviaXvMCPro-dbg = "${libdir}/.debug/libviaXvMCPro.so.*"
+FILES_libviaXvMC-dbg += "${libdir}/.debug/libviaXvMC.so.*"
+FILES_libviaXvMCPro-dbg += "${libdir}/.debug/libviaXvMCPro.so.*"
DEPENDS = "xserver-xorg libxvmc"
diff --git a/packages/openjade/openjade-1.3.2/oj-native-libosp-fix.patch b/packages/openjade/openjade-1.3.2/oj-native-libosp-fix.patch
new file mode 100644
index 0000000000..c82320b7fd
--- /dev/null
+++ b/packages/openjade/openjade-1.3.2/oj-native-libosp-fix.patch
@@ -0,0 +1,12 @@
+Index: openjade-1.3.2/Makefile.prog.in
+===================================================================
+--- openjade-1.3.2.orig/Makefile.prog.in 2007-12-21 14:48:00.000000000 +0100
++++ openjade-1.3.2/Makefile.prog.in 2007-12-21 14:50:12.000000000 +0100
+@@ -13,6 +13,7 @@
+ ALL_LIBS = $(XLIBS) $(LIBS)
+ Makefile.lt:
+ echo 'LT_LIBS='`echo $(ALL_LIBS)|sed 's/\.a/.la/g'` >Makefile.lt
++ sed -i -e "s|libosp.la|libosp.so|" Makefile.lt
+
+ PROG:=$(shell echo "$(PROG)" | sed '@program_transform_name@')
+
diff --git a/packages/openjade/openjade-native_1.3.2.bb b/packages/openjade/openjade-native_1.3.2.bb
index 5f5815a8b1..11a3ca8525 100644
--- a/packages/openjade/openjade-native_1.3.2.bb
+++ b/packages/openjade/openjade-native_1.3.2.bb
@@ -2,7 +2,8 @@ SECTION = "unknown"
DEPENDS = "opensp-native sgml-common-native"
LICENSE = "MIT"
SRC_URI = "${SOURCEFORGE_MIRROR}/openjade/openjade-${PV}.tar.gz \
- file://configure.patch;patch=1"
+ file://configure.patch;patch=1 \
+ file://oj-native-libosp-fix.patch;patch=1;pnum=1"
S = "${WORKDIR}/openjade-${PV}"
inherit autotools native
@@ -11,7 +12,9 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/openjade-${PV}"
PACKAGES = ""
EXTRA_OECONF = "--enable-spincludedir=${STAGING_INCDIR}/OpenSP \
- --enable-splibdir=${STAGING_LIBDIR}"
+ --enable-splibdir=${STAGING_LIBDIR} \
+ --enable-default-catalog=${sysconfdir}/sgml/catalog \
+ --enable-default-search-path=${datadir}/sgml"
acpaths = "-I ${S}/config"
CFLAGS_prepend = "-I${S}/include"
@@ -22,8 +25,22 @@ do_configure () {
}
do_stage () {
- install -m 0755 ${S}/jade/.libs/openjade ${STAGING_BINDIR}/openjade
+ # Refer to http://www.linuxfromscratch.org/blfs/view/stable/pst/openjade.html
+ # for details.
+ install -m 0755 ${S}/jade/.libs/openjade ${STAGING_BINDIR_NATIVE}/openjade
+ ln -sf openjade ${STAGING_BINDIR_NATIVE}/jade
+
oe_libinstall -a -so -C style libostyle ${STAGING_LIBDIR}
oe_libinstall -a -so -C spgrove libospgrove ${STAGING_LIBDIR}
oe_libinstall -a -so -C grove libogrove ${STAGING_LIBDIR}
+
+ install -d ${STAGING_DATADIR}/sgml/openjade-${PV}
+ install -m 644 dsssl/catalog ${STAGING_DATADIR}/sgml/openjade-${PV}
+ install -m 644 dsssl/*.{dtd,dsl,sgm} ${STAGING_DATADIR}/sgml/openjade-${PV}
+
+ install-catalog --add ${sysconfdir}/sgml/openjade-${PV}.cat \
+ ${STAGING_DATADIR}/sgml/openjade-${PV}/catalog
+
+ install-catalog --add ${sysconfdir}/sgml/sgml-docbook.cat \
+ ${sysconfdir}/sgml/openjade-${PV}.cat
}
diff --git a/packages/openmoko-apps/openmoko-gps_0.0.1+svnr9.bb b/packages/openmoko-apps/openmoko-gps_0.0.1+svnr9.bb
new file mode 100644
index 0000000000..b85411db3c
--- /dev/null
+++ b/packages/openmoko-apps/openmoko-gps_0.0.1+svnr9.bb
@@ -0,0 +1,33 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2008
+# License: MIT (see http://www.opensource.org/licenses/mit-license.php
+# for a copy of the license)
+#
+# Filename: openmoko-gps_svn.bb
+# Date: 20080101 (YMD)
+
+DESCRIPTION = "A tiny GPS output parser for the OpenMoko platform."
+HOMEPAGE = "http://forge.bearstech.com/trac/wiki/OpenMokoGPS"
+SECTION = "base"
+LICENSE = "GPL"
+
+RDEPENDS = "python-pygtk"
+
+PR = "r0"
+
+######################################################################################
+
+SRC_URI = "svn://forge.bearstech.com/bearforge/openmoko;module=gps;rev=9"
+
+S = "${WORKDIR}/gps"
+
+do_install() {
+ install -d ${D}/usr/bin
+ install -d ${D}/usr/share/applications/
+ install -d ${D}/usr/share/pixmaps/
+
+ install -m 0755 ${S}/gps_reader.py ${D}/usr/bin
+ install -m 0644 ${S}/openmoko-gps.desktop ${D}/usr/share/applications/
+ install -m 0644 ${S}/*.png ${D}/usr/share/pixmaps/
+}
diff --git a/packages/openmoko-base/openmoko-libs_svn.bb b/packages/openmoko-base/openmoko-libs_svn.bb
index d3dbeb0e1f..20b05efb0b 100644
--- a/packages/openmoko-base/openmoko-libs_svn.bb
+++ b/packages/openmoko-base/openmoko-libs_svn.bb
@@ -20,17 +20,17 @@ PACKAGES =+ "\
FILES_libmokojournal = "${libdir}/libmokojournal.so.*"
FILES_libmokojournal-dev = "${libdir}/libmokojournal.so ${libdir}/libmokojournal.*a ${includedir}/${PN}/libmokojournal"
-FILES_libmokojournal-dbg = "${libdir}/.debug/libmokojournal.so.*"
+FILES_libmokojournal-dbg += "${libdir}/.debug/libmokojournal.so.*"
FILES_libmokogsmd = "${libdir}/libmokogsmd.so.*"
FILES_libmokogsmd-dev = "${libdir}/libmokogsmd.so ${libdir}/libmokogsmd.*a ${includedir}/${PN}/libmokogsmd"
-FILES_libmokogsmd-dbg = "${libdir}/.debug/libmokogsmd.so.*"
+FILES_libmokogsmd-dbg += "${libdir}/.debug/libmokogsmd.so.*"
FILES_libmokocore = "${libdir}/libmokocore.so.*"
FILES_libmokocore-dev = "${libdir}/libmokocore.so ${libdir}/libmokocore.*a ${includedir}/${PN}/libmokocore"
-FILES_libmokocore-dbg = "${libdir}/.debug/libmokocore.so.*"
+FILES_libmokocore-dbg += "${libdir}/.debug/libmokocore.so.*"
FILES_libmokoui = "${libdir}/libmokoui.so.*"
FILES_libmokoui-dev = "${libdir}/libmokoui.so ${libdir}/libmokoui.*a ${includedir}/${PN}/libmokoui"
-FILES_libmokoui-dbg = "${libdir}/.debug/libmokoui.so.*"
+FILES_libmokoui-dbg += "${libdir}/.debug/libmokoui.so.*"
diff --git a/packages/openmoko-spaces/openmoko-toolchain-scripts_svn.bb b/packages/openmoko-spaces/openmoko-toolchain-scripts_svn.bb
index b96cf8fa74..7533f81958 100644
--- a/packages/openmoko-spaces/openmoko-toolchain-scripts_svn.bb
+++ b/packages/openmoko-spaces/openmoko-toolchain-scripts_svn.bb
@@ -1,15 +1,14 @@
DESCRIPTION = "Convenient scripts to be used with openmoko toolchain."
-PACKAGE_ARCH = "all"
+PR = "r1"
SRC_URI = "svn://svn.openmoko.org/developers/john_lee;module=toolkit;proto=http"
-SRC_URI += "svn://svn.openmoko.org/trunk/src/target/OM-2007.2/applications;module=openmoko-sample2;proto=http"
-SRCREV="3563"
+S = "${WORKDIR}/toolkit"
+
FILES_${PN} = "/"
do_install () {
- (find ${WORKDIR} -type d -name ".svn" | xargs rm -rf) || true
- install -m 755 -d ${D}/share
- cp -dr ${WORKDIR}/toolkit/* ${D}
- cp -dr ${WORKDIR}/openmoko-sample2 ${D}/share
+ cp -dr ${S}/* ${D}
+ find ${D} -name ".svn" | xargs rm -rf
+ rm -r ${D}/patches
}
diff --git a/packages/openmoko2/libjana_svn.bb b/packages/openmoko2/libjana_svn.bb
index 5b40bd4846..48779e50fe 100644
--- a/packages/openmoko2/libjana_svn.bb
+++ b/packages/openmoko2/libjana_svn.bb
@@ -25,7 +25,7 @@ PACKAGES =+ "libjana-ecal libjana-ecal-dbg \
LEAD_SONAME = "libjana.so"
FILES_libjana-ecal = "${libdir}/libjana-ecal.so.*"
-FILES_libjana-ecal-dbg = "${libdir}/.debug/libjana-ecal*"
+FILES_libjana-ecal-dbg += "${libdir}/.debug/libjana-ecal*"
FILES_libjana-gtk = "${libdir}/libjana-gtk.so.* ${datadir}/jana/landwater.vmf"
-FILES_libjana-gtk-dbg = "${libdir}/.debug/libjana-gtk.so.*"
+FILES_libjana-gtk-dbg += "${libdir}/.debug/libjana-gtk.so.*"
FILES_libjana-bin_append = " ${datadir}/jana/flag-uk.png "
diff --git a/packages/openmoko2/moko-gtk-engine_svn.bb b/packages/openmoko2/moko-gtk-engine_svn.bb
index 060bceaf8c..027b3cb22b 100644
--- a/packages/openmoko2/moko-gtk-engine_svn.bb
+++ b/packages/openmoko2/moko-gtk-engine_svn.bb
@@ -8,7 +8,7 @@ inherit openmoko2
PACKAGES += "moko-gtk-theme"
FILES_${PN} = "${libdir}/gtk-2.0/*/engines/*.so "
FILES_${PN}-dev = "${libdir}/gtk-2.0/*/engines/*"
-FILES_${PN}-dbg = "${libdir}/gtk-2.0/*/engines/.debug"
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/*/engines/.debug"
FILES_moko-gtk-theme = "${datadir}/themes"
RDEPENDS_${PN} = "moko-gtk-theme"
diff --git a/packages/openmoko2/openmoko-dialer2_svn.bb b/packages/openmoko2/openmoko-dialer2_svn.bb
index 5d2683e0fd..3378e43503 100644
--- a/packages/openmoko2/openmoko-dialer2_svn.bb
+++ b/packages/openmoko2/openmoko-dialer2_svn.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "The OpenMoko Dialer"
SECTION = "openmoko/pim"
-DEPENDS = "libjana libmokogsmd2 libmokoui2 libmokojournal2 pulseaudio"
+DEPENDS = "libgsmd libjana libmokoui2 libmokojournal2 pulseaudio libnotify"
PV = "0.1.0+svnr${SRCREV}"
-PR = "r5"
+PR = "r6"
PE = "1"
inherit openmoko2
diff --git a/packages/openmoko2/openmoko-messages2_svn.bb b/packages/openmoko2/openmoko-messages2_svn.bb
index bc1bcaff5e..8ec0a9103a 100644
--- a/packages/openmoko2/openmoko-messages2_svn.bb
+++ b/packages/openmoko2/openmoko-messages2_svn.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "The OpenMoko Message application"
SECTION = "openmoko/pim"
-DEPENDS = "libmokogsmd2 libmokoui2 libmokojournal2"
+DEPENDS = "libmokogsmd2 libmokoui2 libmokojournal2 libjana"
PV = "0.1.0+svnr${SRCREV}"
PR = "r0"
diff --git a/packages/openmoko2/openmoko-sample2_svn.bb b/packages/openmoko2/openmoko-sample2_svn.bb
index c05b6d3618..9118f89e8a 100644
--- a/packages/openmoko2/openmoko-sample2_svn.bb
+++ b/packages/openmoko2/openmoko-sample2_svn.bb
@@ -9,16 +9,16 @@ inherit openmoko2
PACKAGES += "${PN}-src"
# path should match the toolchain path
FILES_${PN}-src = "/usr/local/openmoko"
-PACKAGE_ARCH_${PN}-src = "all"
+PACKAGE_ARCH_${PN}-src = "${BUILD_ARCH}-all-sdk"
do_configure_prepend() {
install -d ${WORKDIR}/source
- cp -a ${S} ${WORKDIR}/source/
+ cp -pPR ${S} ${WORKDIR}/source/
find ${WORKDIR}/source -name ".svn"|xargs rm -rf
}
do_install_append() {
install -d ${D}/usr/local/openmoko/source/
- cp -a ${WORKDIR}/source/* ${D}/usr/local/openmoko/source/
+ cp -pPR ${WORKDIR}/source/* ${D}/usr/local/openmoko/source/
}
diff --git a/packages/openmoko2/openmoko-terminal2_svn.bb b/packages/openmoko2/openmoko-terminal2_svn.bb
index 7f6c9ebbba..2273ddd88f 100644
--- a/packages/openmoko2/openmoko-terminal2_svn.bb
+++ b/packages/openmoko2/openmoko-terminal2_svn.bb
@@ -1,8 +1,8 @@
-DESCRIPTION = "The OpenMoko Command Line Console"
+DESCRIPTION = "The OpenMoko Command Line Terminal"
SECTION = "openmoko/applications"
-DEPENDS = "vte libmokoui2"
+DEPENDS = "vala-native vte libmokoui2"
RDEPENDS = "ttf-liberation-mono"
-PV = "2.1.1+svnr${SRCREV}"
-PR = "r2"
+PV = "3.0.0+svnr${SRCREV}"
+PR = "r0"
inherit openmoko2
diff --git a/packages/openmoko2/settingsgui_0.7+0.8-beta.bb b/packages/openmoko2/settingsgui_0.7+0.8-beta.bb
new file mode 100644
index 0000000000..502fad7309
--- /dev/null
+++ b/packages/openmoko2/settingsgui_0.7+0.8-beta.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "OpenMoko Settings GUI"
+AUTHOR = "Kristian M."
+SECTION = "openmoko/applications"
+RDEPENDS = "python-pygtk python-subprocess python-threading"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "http://mput.de/~kristian/.openmoko/settingsgui-0.8-beta.tar.bz2"
+S = "${WORKDIR}/settingsgui-0.8-beta"
+
+inherit distutils
diff --git a/packages/openntpd/openntpd_3.7p1.bb b/packages/openntpd/openntpd_3.7p1.bb
index 9358508cb0..b8dca0c278 100644
--- a/packages/openntpd/openntpd_3.7p1.bb
+++ b/packages/openntpd/openntpd_3.7p1.bb
@@ -3,9 +3,8 @@ Network Time Protocol."
HOMEPAGE = "http://www.openntpd.org/"
SECTION = "console/network"
LICENSE = "BSD"
-DEPENDS += "openssl"
-DEPENDS = "timezones"
-PR = "r13"
+DEPENDS += "openssl tzdata"
+PR = "r14"
SRC_URI = "http://www.zip.com.au/~dtucker/openntpd/release/openntpd-${PV}.tar.gz \
file://autofoo.patch;patch=1 \
diff --git a/packages/openntpd/openntpd_3.9p1.bb b/packages/openntpd/openntpd_3.9p1.bb
index 03369fd525..3798c13194 100644
--- a/packages/openntpd/openntpd_3.9p1.bb
+++ b/packages/openntpd/openntpd_3.9p1.bb
@@ -3,9 +3,8 @@ Network Time Protocol."
HOMEPAGE = "http://www.openntpd.org/"
SECTION = "console/network"
LICENSE = "BSD"
-DEPENDS += "openssl"
-DEPENDS = "timezones"
-PR = "r0"
+DEPENDS += "openssl tzdata"
+PR = "r1"
SRC_URI = "http://www.zip.com.au/~dtucker/openntpd/release/${P}.tar.gz \
file://adjtimex-${PV}.patch;patch=1 \
diff --git a/packages/openpbx/files/init b/packages/openpbx/files/init
deleted file mode 100644
index 0ce88c4626..0000000000
--- a/packages/openpbx/files/init
+++ /dev/null
@@ -1,75 +0,0 @@
-#! /bin/sh
-#
-# This is an init script for openembedded
-# Copy it to /etc/init.d/openpbx and type
-# > update-rc.d openpbx defaults 60
-#
-openpbx=/usr/sbin/openpbx
-pidfile=/var/run/openpbx.org/openpbx.pid
-
-test -x "$openpbx" || exit 0
-
-case "$1" in
- start)
- echo -n "Starting OpenPBX"
- start-stop-daemon --start --quiet --exec $openpbx -- -npq
- echo "."
- ;;
- stop)
- echo -n "Stopping OpenPBX"
- $openpbx -rx "stop gracefully"
- sleep 4
- if [ -f $pidfile ]; then
- start-stop-daemon --stop --quiet --pidfile $pidfile
- fi
- echo "."
- ;;
- force-stop)
- echo -n "Stopping OpenPBX"
- $openpbx -rx "stop now"
- sleep 2
- if [ -f $pidfile ]; then
- start-stop-daemon --stop --quiet --pidfile $pidfile
- fi
- echo "."
- ;;
- restart)
- echo -n "Restarting OpenPBX"
- if [ -f $pidfile ]; then
- $openpbx -rx "restart gracefully"
- sleep 2
- else
- start-stop-daemon --start --quiet --exec $openpbx -- -npq
- fi
- ;;
- force-restart)
- echo -n "Forcibly Restarting OpenPBX"
- if [ -f $pidfile ]; then
- $openpbx -rx "restart now"
- sleep 2
- else
- start-stop-daemon --start --quiet --exec $openpbx -- -npq
- fi
- ;;
- reload)
- echo -n "Reloading OpenPBX Configuration"
- if [ -f $pidfile ]; then
- $openpbx -rx "reload"
- else
- start-stop-daemon --start --quiet --exec $openpbx -- -npq
- fi
- echo "."
- ;;
- logger-reload)
-# echo -n "Restating OpenPBX Logger"
- if [ -f $pidfile ]; then
- $openpbx -rx "logger reload"
- fi
-# echo "."
- ;;
- *)
- echo "Usage: /etc/init.d/openpbx {start|stop|force-stop|restart|force-restart|reload|logger-reload}"
- exit 1
-esac
-
-exit 0
diff --git a/packages/openpbx/files/logrotate b/packages/openpbx/files/logrotate
deleted file mode 100644
index a0192538a3..0000000000
--- a/packages/openpbx/files/logrotate
+++ /dev/null
@@ -1,13 +0,0 @@
-/var/log/openpbx.org/cdr-csv/Master.csv /var/log/openpbx.org/queue_log /var/log/openpbx.org/event_log /var/log/openpbx.org/messages
-/var/log/openpbx.org/full {
- daily
- missingok
- compress
- delaycompress
- rotate 30
- sharedscripts
- postrotate
- /etc/init.d/openpbx logger-reload
- endscript
-}
-
diff --git a/packages/openpbx/files/volatiles b/packages/openpbx/files/volatiles
deleted file mode 100644
index 716d469e86..0000000000
--- a/packages/openpbx/files/volatiles
+++ /dev/null
@@ -1,6 +0,0 @@
-d openpbx openpbx 0775 /var/run/openpbx.org none
-d openpbx openpbx 0775 /var/lib/openpbx.org none
-d openpbx openpbx 0775 /var/log/openpbx.org/cdr-csv none
-d openpbx openpbx 0775 /var/log/openpbx.org/cdr-custom none
-d openpbx openpbx 0775 /var/spool/openpbx.org/outgoing none
-d openpbx openpbx 0775 /var/spool/openpbx.org/voicemail none
diff --git a/packages/openpbx/openpbx.org-1.2_rc3/bootstrap.patch b/packages/openpbx/openpbx.org-1.2_rc3/bootstrap.patch
deleted file mode 100644
index 7f89772efa..0000000000
--- a/packages/openpbx/openpbx.org-1.2_rc3/bootstrap.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-*** openpbx.org-1.2_rc3.old/bootstrap.sh Mon Feb 26 16:02:40 2007
---- openpbx.org-1.2_rc3/bootstrap.sh Mon Feb 26 16:04:11 2007
-***************
-*** 89,104 ****
- # Check for required version and die if unhappy
-
- if [ "x$UNAME" = "xFreeBSD" ]; then
-! version_compare libtoolize 1 5 20 || exit 1
-! version_compare automake19 1 9 6 || exit 1
- version_compare autoconf259 2 59 || exit 1
- ACLOCAL=aclocal19
- AUTOHEADER=autoheader259
- AUTOMAKE=automake19
- AUTOCONF=autoconf259
- else
-! version_compare libtoolize 1 5 20 || exit 1
-! version_compare automake 1 9 6 || exit 1
- version_compare autoconf 2 59 || exit 1
- ACLOCAL=aclocal
- AUTOHEADER=autoheader
---- 89,104 ----
- # Check for required version and die if unhappy
-
- if [ "x$UNAME" = "xFreeBSD" ]; then
-! version_compare libtoolize 1 5 10 || exit 1
-! version_compare automake19 1 9 3 || exit 1
- version_compare autoconf259 2 59 || exit 1
- ACLOCAL=aclocal19
- AUTOHEADER=autoheader259
- AUTOMAKE=automake19
- AUTOCONF=autoconf259
- else
-! version_compare libtoolize 1 5 10 || exit 1
-! version_compare automake 1 9 3 || exit 1
- version_compare autoconf 2 59 || exit 1
- ACLOCAL=aclocal
- AUTOHEADER=autoheader
diff --git a/packages/openpbx/openpbx.org-1.2_rc3/openssl.m4.patch b/packages/openpbx/openpbx.org-1.2_rc3/openssl.m4.patch
deleted file mode 100644
index 55d0d33832..0000000000
--- a/packages/openpbx/openpbx.org-1.2_rc3/openssl.m4.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-*** openpbx.org-1.2_rc3.old/acmacros/openssl.m4 Tue Mar 6 15:21:39 2007
---- openpbx.org-1.2_rc3/acmacros/openssl.m4 Tue Mar 6 15:23:18 2007
-***************
-*** 3,13 ****
- #
- AC_DEFUN([CHECK_SSL],
- [AC_MSG_CHECKING(if ssl is wanted)
-! # AC_ARG_WITH(ssl,
-! # [ --with-ssl enable ssl [will check /usr/local/ssl
-! # /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/sfw ]
-! # ],
-! #[ AC_MSG_RESULT(yes)
- for dir in $withval /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/sfw; do
- ssldir="$dir"
- if test -f "$dir/include/openssl/ssl.h"; then
---- 3,13 ----
- #
- AC_DEFUN([CHECK_SSL],
- [AC_MSG_CHECKING(if ssl is wanted)
-! AC_ARG_WITH(ssl,
-! [ --with-ssl enable ssl [will check /usr/local/ssl
-! /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/sfw ]
-! ],
-! [ AC_MSG_RESULT(yes)
- for dir in $withval /usr/local/ssl /usr/lib/ssl /usr/ssl /usr/pkg /usr/local /usr /usr/sfw; do
- ssldir="$dir"
- if test -f "$dir/include/openssl/ssl.h"; then
-***************
-*** 33,40 ****
- AC_SUBST([HAVE_SSL])
- AC_SUBST([SSL_LIBS])
- AC_SUBST([SSL_CFLAGS])
-! #],
-! #[
-! # AC_MSG_RESULT(no)
-! #])
- ])dnl
---- 33,40 ----
- AC_SUBST([HAVE_SSL])
- AC_SUBST([SSL_LIBS])
- AC_SUBST([SSL_CFLAGS])
-! ],
-! [
-! AC_MSG_RESULT(no)
-! ])
- ])dnl
diff --git a/packages/openpbx/openpbx.org-perl.bb b/packages/openpbx/openpbx.org-perl.bb
deleted file mode 100644
index 124dfcfc8b..0000000000
--- a/packages/openpbx/openpbx.org-perl.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-DESCRIPTION = "Openpbx::OGI Perl Gateway Interface Module"
-HOMEPAGE = "http://www.openpbx.org"
-SECTION = "libs"
-LICENSE = "GPL"
-DEPENDS = "install-native"
-RDEPENDS = "perl openpbx.org-ogi"
-PR = "r0"
-
-OPBXV = "openpbx.org-1.2_rc3"
-
-SRC_URI = "http://www.openpbx.org/releases/${OPBXV}.tar.gz"
-
-S = "${WORKDIR}/${OPBXV}/contrib/ogi-perl/openpbx-perl-${PV}"
-
-inherit cpan
-
-do_install_append () {
- install -d ${D}${datadir}/openpbx.org/ogi/perl
- install ${S}/examples/* ${D}${datadir}/openpbx.org/ogi/perl
-}
-
-PACKAGES =+ "${PN}-examples"
-
-FILES_${PN}-examples = "${datadir}/openpbx.org/ogi/perl"
diff --git a/packages/openpbx/openpbx.org_1.2_rc3.bb b/packages/openpbx/openpbx.org_1.2_rc3.bb
deleted file mode 100644
index e343eb8729..0000000000
--- a/packages/openpbx/openpbx.org_1.2_rc3.bb
+++ /dev/null
@@ -1,139 +0,0 @@
-DESCRIPTION = "A flexible VOIP soft switch/PBX."
-DESCRIPTION_${PN}-ogi = "OpenPBX Gateway Inerface for scripted PBX call processing"
-DESCRIPTION_${PN}-fax = "Fax send/receive file and T.38 support for OpenPBX"
-DESCRIPTION_${PN}-ldap = "LDAP Directory services interface for OpenPBX"
-DESCRIPTION_${PN}-sounds = "Standard set of audio prompts for OpenPBX"
-HOMEPAGE = "http://www.openpbx.org"
-RDEPENDS = "ssmtp"
-SECTION = "voip"
-LICENSE = "GPL"
-DEPENDS = "openssl zlib tiff libcap spandsp speex readline js \
- sox-native findutils-native"
-DEPENDS_${PN}-ldap = "openldap"
-RRECOMMENDS = "logrotate"
-RRECOMMENDS_${PN}-ogi = "perl perl-module-strict openpbx.org-perl"
-PV = "1.2_rc3"
-PR = "r2"
-
-SRC_URI = "http://www.openpbx.org/releases/${P}.tar.gz \
- svn://svn.openpbx.org/openpbx-sounds/trunk/sounds/en_US;module=MelanieTaylor;proto=svn \
- file://bootstrap.patch;patch=1 \
- file://openssl.m4.patch;patch=1 \
- file://logrotate \
- file://volatiles \
- file://init"
-
-PARALLEL_MAKE = ""
-INITSCRIPT_NAME = "openpbx"
-INITSCRIPT_PARAMS = "defaults 60"
-
-inherit autotools update-rc.d
-
-EXTRA_OECONF = " --with-ssl=${STAGING_DIR}/${HOST_SYS} --enable-low_memory \
- --disable-zaptel --with-directory-layout=lsb --enable-t38 \
- --with-codec-speex=${STAGING_DIR}/${HOST_SYS} --with-app_ldap \
- --with-perl-shebang='#!${bindir}/perl' --with-jabber --with-res_jabber \
- --with-javascript --with-res_js \
- --bindir=${bindir} --datadir=${datadir} --sysconfdir=${sysconfdir} \
- --includedir=${includedir} --infodir=${infodir} --mandir=${mandir} \
- --localstatedir=${localstatedir} --libdir=${libdir}"
-
-do_configure_prepend () {
- ${S}/bootstrap.sh
- # Fix some stupidness with the VoiceMail app naming. Case Matters!
- sed -i 's:Voicemail:VoiceMail:' ${S}/configs/extensions.conf.sample
- sed -i 's:/var:${localstatedir}:' ${WORKDIR}/volatiles
- sed -i 's:/var:${localstatedir}:' ${WORKDIR}/logrotate
- sed -i 's:/etc/init.d:${sysconfdir}/init.d:' ${WORKDIR}/logrotate
-}
-
-do_install_append() {
- install -c -D -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/openpbx
- install -c -D -m 644 ${WORKDIR}/logrotate ${D}${sysconfdir}/logrotate.d/openpbx
- install -c -D -m 644 ${WORKDIR}/volatiles ${D}${sysconfdir}/default/volatiles/openpbx
- # And now for sounds...
- for file in `find ${WORKDIR}/MelanieTaylor -name \*.wav`; do
- echo $file
- sox -V $file -t raw -s -r 8000 -c 1 -w `echo $file|sed -e s/\.wav$/.sln/` resample -ql;
- sox -V $file -t raw -U -r 8000 -c 1 -b `echo $file|sed -e s/\.wav$/.ulaw/` resample -ql;
- sox -V $file -t raw -A -r 8000 -c 1 -b `echo $file|sed -e s/\.wav$/.alaw/` resample -ql;
- sox -V $file -t gsm -r 8000 -c 1 -b `echo $file|sed -e s/\.wav$/.gsm/` resample -ql;
- relfile=`echo $file|sed -e s:^${WORKDIR}/MelanieTaylor/::`
- relfile2=`echo $relfile|sed -e s:\.wav$::`
- install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.sln ${D}${datadir}/openpbx.org/sounds/$relfile2.sln
- install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.ulaw ${D}${datadir}/openpbx.org/sounds/$relfile2.ulaw
- install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.alaw ${D}${datadir}/openpbx.org/sounds/$relfile2.alaw
- install -c -D -m 644 ${WORKDIR}/MelanieTaylor/$relfile2.gsm ${D}${datadir}/openpbx.org/sounds/$relfile2.gsm
- done
-}
-
-PACKAGES = "${PN}-sounds ${PN}-fax ${PN}-ogi ${PN}-ldap ${PN}-doc ${PN}-dev ${PN}"
-
-FILES_${PN}-sounds = "${datadir}/openpbx.org/sounds/*"
-FILES_${PN}-dev = "${libdir}/openpbx.org/modules/*.la \
- ${libdir}/openpbx.org/*.la \
- ${includedir}/openpbx/*"
-FILES_${PN}-fax = "${libdir}/openpbx.org/modules/app_backgrounddetect.so \
- ${libdir}/openpbx.org/modules/app_faxdetect.so \
- ${libdir}/openpbx.org/modules/app_rxfax.so \
- ${libdir}/openpbx.org/modules/app_txfax.so"
-FILES_${PN}-ogi = "${libdir}/openpbx.org/modules/res_ogi.so \
- ${datadir}/openpbx.org/ogi/*"
-FILES_${PN}-ldap = "${libdir}/openpbx.org/modules/app_ldap.*"
-
-pkg_postinst_prepend() {
- grep -q openpbx ${sysconfdir}/group || addgroup --system openpbx
- grep -q openpbx ${sysconfdir}/passwd || adduser --system --home ${localstatedir}/run/openpbx.org --no-create-home --disabled-password --ingroup openpbx -s ${base_bindir}/false openpbx
- chown -R openpbx:openpbx ${libdir}/openpbx.org ${localstatedir}/lib/openpbx.org ${localstatedir}/spool/openpbx.org ${localstatedir}/log/openpbx.org ${localstatedir}/run/openpbx.org ${sysconfdir}/openpbx.org ${datadir}/openpbx.org
- /etc/init.d/populate-volatile.sh update
-}
-
-pkg_postinst_${PN}-fax () {
- chown -R openpbx:openpbx ${libdir}/openpbx.org
-}
-
-pkg_postinst_${PN}-ldap () {
- chown -R openpbx:openpbx ${libdir}/openpbx.org
-}
-
-pkg_postinst_${PN}-sounds () {
- chown -R openpbx:openpbx ${datadir}/openpbx.org
-}
-
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/musiconhold.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/adsi.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/adtranvofr.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/agents.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/cdr.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/cdr_custom.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/cdr_manager.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/cdr_tds.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/codecs.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/dnsmgr.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/dundi.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/enum.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/extconfig.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/extensions.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/extensions.ael"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/features.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/iax.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/indications.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/logger.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/manager.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/meetme.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/mgcp.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/modem.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/modules.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/muted.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/openpbx.adsi"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/openpbx.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/osp.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/privacy.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/queues.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/rpt.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/rtp.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/sip.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/sip_notify.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/udptl.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/voicemail.conf"
-CONFFILES_${PN} += "${sysconfdir}/openpbx.org/woomera.conf"
diff --git a/packages/openprotium-init/files/boot/disk b/packages/openprotium-init/files/boot/disk
index b4bbaf1f3c..e1096e225a 100644
--- a/packages/openprotium-init/files/boot/disk
+++ b/packages/openprotium-init/files/boot/disk
@@ -25,9 +25,6 @@ then
sleep=6
test "$sleep" -gt 0 && sleep "$sleep"
else
- # make the device links so turnup can use short disk names.
- # probably only necessary on devfs based systems.
- /etc/init.d/devices start
scc -l redflash -f auto
fi
#
diff --git a/packages/openprotium-init/files/functions b/packages/openprotium-init/files/functions
index 25832cf3f9..2700551cc4 100644
--- a/packages/openprotium-init/files/functions
+++ b/packages/openprotium-init/files/functions
@@ -65,21 +65,13 @@ load_functions(){
# use this rather than hard-wiring the device because the partition
# table can change - looking in /proc/mtd is more reliable.
mtdev(){
- if test $(machine) = storcenter ; then
- sed -n 's!^mtd\([0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/mtd/\1!p' /proc/mtd
- else
sed -n 's!^\(mtd[0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/\1!p' /proc/mtd
- fi
}
#
# mtblockdev "name"
# as mtdev but output the name of the block (not character) device
mtblockdev(){
- if test "$(machine)" = storcenter ; then
- sed -n 's!^mtd\([0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/mtdblock/\1!p' /proc/mtd
- else
sed -n 's!^mtd\([0-9][0-9]*\):[^"]*"'"$1"'"$!/dev/mtdblock\1!p' /proc/mtd
- fi
}
#
# mtsize "name"
diff --git a/packages/openprotium-init/files/initscripts/zleds b/packages/openprotium-init/files/initscripts/zleds
new file mode 100644
index 0000000000..37adb8490e
--- /dev/null
+++ b/packages/openprotium-init/files/initscripts/zleds
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+# This script is executed at the start and end of each run-level
+# transition. It is the first 'stop' script and the last 'start'
+# script.
+#
+# 'stop' indicates the start of a runlevel change
+# 'start' at the end of the runlevel change - we are in the new
+# runlevel.
+#
+# state outputs 'system', 'user' etc according the the nature of
+# the runlevel it is passed (the *new* runlevel is used).
+state(){
+ case "$1" in
+ S|N) echo system;;
+ 0|6) echo shutdown;;
+ 1) echo singleuser;;
+ 2|3|4|5) echo user;;
+ *) echo "led change: $runlevel: runlevel unknown" >&2
+ echo system;;
+ esac
+}
+
+case "$1" in
+start) scc -l blue -f auto;;
+stop) scc -l redflash;;
+*) echo "led change: $1: command ignored" >&2
+ ;;
+esac
diff --git a/packages/openprotium-init/openprotium-init_0.10.bb b/packages/openprotium-init/openprotium-init_0.10.bb
index 92c9d789cb..7443fc9fd7 100644
--- a/packages/openprotium-init/openprotium-init_0.10.bb
+++ b/packages/openprotium-init/openprotium-init_0.10.bb
@@ -19,6 +19,7 @@ SRC_URI = "file://boot/flash \
file://initscripts/sysconfsetup \
file://initscripts/umountinitrd.sh \
file://initscripts/loadmodules.sh \
+ file://initscripts/zleds \
file://functions \
file://modulefunctions \
file://conffiles \
@@ -35,7 +36,7 @@ SCRIPTS = "turnup reflash sysconf"
BOOTSCRIPTS = "flash disk nfs network udhcpc.script"
INITSCRIPTS = "syslog.buffer syslog.file syslog.network \
rmrecovery sysconfsetup umountinitrd.sh \
- fixfstab loadmodules.sh"
+ fixfstab loadmodules.sh zleds"
# This just makes things easier...
@@ -129,6 +130,8 @@ pkg_postinst_openprotium-init() {
update-rc.d $opt syslog.file start 39 S . start 47 0 6 .
update-rc.d $opt syslog.network start 44 S . start 39 0 6 .
update-rc.d $opt rmrecovery start 99 1 2 3 4 5 .
+ update-rc.d $opt zleds start 99 1 2 3 4 5 . stop 5 0 1 2 3 4 5 6 .
+
}
pkg_postrm_openprotium-init() {
@@ -140,7 +143,6 @@ pkg_postrm_openprotium-init() {
done
}
-PACKAGES = "${PN}"
FILES_${PN} = "/"
# It is bad to overwrite /linuxrc as it puts the system back to
diff --git a/packages/opensp/opensp-native_1.5.bb b/packages/opensp/opensp-native_1.5.bb
index e0194c5798..f837ec908a 100644
--- a/packages/opensp/opensp-native_1.5.bb
+++ b/packages/opensp/opensp-native_1.5.bb
@@ -3,13 +3,19 @@ DEPENDS = ""
PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/openjade/OpenSP-${PV}.tar.gz \
- file://m4.patch;patch=1 \
- file://attributevalue.patch;patch=1 \
- file://rangmap-fix.patch;patch=1"
+ file://m4.patch;patch=1 \
+ file://attributevalue.patch;patch=1 \
+ file://rangmap-fix.patch;patch=1"
+
S = "${WORKDIR}/OpenSP-${PV}"
LICENSE = "MIT"
inherit autotools native
+EXTRA_OECONF = "\
+ --enable-default-catalog=${sysconfdir}/sgml/catalog \
+ --enable-default-search-path=${datadir}/sgml \
+ "
+
FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/opensp-${PV}"
PACKAGES = ""
@@ -24,4 +30,13 @@ do_stage () {
install -m 0644 ${S}/include/*.h ${STAGING_INCDIR}/OpenSP/
install -m 0644 ${S}/include/*.cxx ${STAGING_INCDIR}/OpenSP/
install -m 0644 config.h ${STAGING_INCDIR}/OpenSP/config.h
+
+ # Installs all the tools and symlink with another common name to each.
+ install -d ${STAGING_BINDIR_NATIVE}
+ for tool in nsgmls sgmlnorm spam spcat spent sx
+ do
+ echo installing $tool to ${STAGING_BINDIR_NATIVE}
+ install -m 0755 $tool/.libs/o$tool ${STAGING_BINDIR_NATIVE}
+ ln -sf o$tool ${STAGING_BINDIR_NATIVE}/$tool
+ done
}
diff --git a/packages/openssl/openssl-0.9.7g/avr32.patch b/packages/openssl/openssl-0.9.7g/avr32.patch
new file mode 100644
index 0000000000..b6ac81b717
--- /dev/null
+++ b/packages/openssl/openssl-0.9.7g/avr32.patch
@@ -0,0 +1,10 @@
+--- Configure~ 2008-01-23 17:44:04.000000000 +0100
++++ Configure 2008-01-23 17:44:04.000000000 +0100
+@@ -442,6 +442,7 @@
+ "linux-mips", "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL DES_RISC2::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+ "linux-ppc", "gcc:-DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:asm/linux_ppc32.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+ # -bpowerpc64-linux is transient option, -m64 should be the one to use...
++"linux-avr32","gcc:-DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG DES_RISC1::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).",
+ "linux-ppc64", "gcc:-bpowerpc64-linux -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:asm/linux_ppc64.o:::::::::dlfcn:linux-shared:-fPIC:-bpowerpc64-linux:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+ "linux-m68k", "gcc:-DB_ENDIAN -DTERMIO -O2 -fomit-frame-pointer -Wall::-D_REENTRANT:::BN_LLONG::",
+ "linux-s390", "gcc:-DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
diff --git a/packages/openssl/openssl_0.9.7g.bb b/packages/openssl/openssl_0.9.7g.bb
index c128275867..3a420001c9 100644
--- a/packages/openssl/openssl_0.9.7g.bb
+++ b/packages/openssl/openssl_0.9.7g.bb
@@ -2,10 +2,11 @@ inherit pkgconfig
require openssl.inc
-PR = "r5"
+PR = "r6"
SRC_URI += "file://debian.patch;patch=1 \
file://armeb.patch;patch=1;pnum=0 \
file://gnueabi-arm.patch;patch=1 \
file://gnueabi-armeb.patch;patch=1 \
- file://uclibcgnueabi.patch;patch=1"
+ file://uclibcgnueabi.patch;patch=1 \
+ file://avr32.patch;patch=1;pnum=0"
diff --git a/packages/opie-citytime/opie-citytime.inc b/packages/opie-citytime/opie-citytime.inc
index a2fe0972af..529eba0d7f 100644
--- a/packages/opie-citytime/opie-citytime.inc
+++ b/packages/opie-citytime/opie-citytime.inc
@@ -2,7 +2,8 @@ DESCRIPTION = "Opie Time-zone / world clock settings"
SECTION = "opie/applications"
PRIORITY = "optional"
LICENSE = "GPL"
-RRECOMMENDS = "timezones"
+RRECOMMENDS = "tzdata"
+PR = "r1"
APPNAME = "citytime"
diff --git a/packages/opie-i18n/opie-i18n.inc b/packages/opie-i18n/opie-i18n.inc
index da5b5866ad..8a1eaba5b3 100644
--- a/packages/opie-i18n/opie-i18n.inc
+++ b/packages/opie-i18n/opie-i18n.inc
@@ -35,7 +35,7 @@ do_install() {
done
}
-PACKAGES = "opie-i18n-cz opie-i18n-da opie-i18n-de opie-i18n-dk opie-i18n-en opie-i18n-es \
+PACKAGES = "${PN}-dbg opie-i18n-cz opie-i18n-da opie-i18n-de opie-i18n-dk opie-i18n-en opie-i18n-es \
opie-i18n-fr opie-i18n-hu opie-i18n-it opie-i18n-ja opie-i18n-ko opie-i18n-lv opie-i18n-mk \
opie-i18n-nl opie-i18n-no opie-i18n-pl opie-i18n-pt opie-i18n-pt-br opie-i18n-ru opie-i18n-sl \
opie-i18n-xx opie-i18n-zh-cn opie-i18n-zh-tw \
diff --git a/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb b/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb
index 0ceaac41e4..7739f3bb15 100644
--- a/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb
+++ b/packages/opie-mediaplayer1/opie-mediaplayer1_1.2.2.bb
@@ -1,7 +1,6 @@
DESCRIPTION = "The classic Opie media player (core+plugins)."
LICENSE = "GPL"
ALLOW_EMPTY = "1"
-PACKAGES = "${PN}"
PACKAGE_ARCH = "all"
RDEPENDS = "opie-mediaplayer1-core"
RRECOMMENDS = "opie-mediaplayer1-libmadplugin opie-mediaplayer1-libwavplugin \
diff --git a/packages/opie-reader/uqtreader_cvs.bb b/packages/opie-reader/uqtreader_cvs.bb
index 9fb7af2db5..9b7ae57196 100644
--- a/packages/opie-reader/uqtreader_cvs.bb
+++ b/packages/opie-reader/uqtreader_cvs.bb
@@ -17,7 +17,7 @@ S = "${WORKDIR}/opie-reader"
export OPIEDIR="${S}/opiedir"
-inherit qmake_base qt4x11
+inherit qt4x11
do_configure() {
${OE_QMAKE_QMAKE} -recursive opie-reader.pro UQT_DATADIR="${datadir}/${PN}" UQT_LIBDIR="${libdir}/${PN}"
diff --git a/packages/opie-taskbar/opie-taskbar-images.inc b/packages/opie-taskbar/opie-taskbar-images.inc
index 2eac502751..7ec97bc56c 100644
--- a/packages/opie-taskbar/opie-taskbar-images.inc
+++ b/packages/opie-taskbar/opie-taskbar-images.inc
@@ -7,6 +7,8 @@ APPNAME = "qpe"
S = "${WORKDIR}/pics"
+inherit opie
+
# Wallpaper and welcome splash
PIXMAP_SIZE = ""
PIXMAP_SIZE_c7x0 = "-640x480"
@@ -18,7 +20,9 @@ PIXMAP_SIZE_asus730 = "-480x640"
PIXMAP_SIZE_htcuniversal= "-480x640"
PIXMAP_SIZE_hx4700 = "-480x640"
-PACKAGES = "${PN}-320x480 ${PN}-480x320 ${PN}-480x640 ${PN}-640x480 ${PN}-800x600 ${PN}-600x800 ${PN}-320x240 ${PN}-240x320 ${PN}-320x320"
+do_configure() {
+ :
+}
do_install() {
install -d ${D}${palmtopdir}/pics/launcher
@@ -54,3 +58,4 @@ python do_package_prepend () {
}
PACKAGE_ARCH = "all"
+PACKAGES = "${PN}-dbg ${PN}-320x480 ${PN}-480x320 ${PN}-480x640 ${PN}-640x480 ${PN}-800x600 ${PN}-600x800 ${PN}-320x240 ${PN}-240x320 ${PN}-320x320"
diff --git a/packages/opie-taskbar/opie-taskbar/firstuse-path.patch b/packages/opie-taskbar/opie-taskbar/firstuse-path.patch
new file mode 100644
index 0000000000..636eb81675
--- /dev/null
+++ b/packages/opie-taskbar/opie-taskbar/firstuse-path.patch
@@ -0,0 +1,11 @@
+--- launcher/firstuse.cpp 2007-10-14 12:47:55.000000000 +1300
++++ launcher/firstuse.cpp 2007-10-14 13:58:54.000000000 +1300
+@@ -124,7 +124,7 @@
+ #endif
+
+ for ( int i = 0; settingsTable[i].app; i++ ) {
+- QString file = QPEApplication::qpeDir() + "bin/";
++ QString file = OPIE_BINDIR + QString("/");
+ file += settingsTable[i].app;
+ file += exeSuffix;
+ if ( QFile::exists(file) )
diff --git a/packages/opie-taskbar/opie-taskbar_1.2.3.bb b/packages/opie-taskbar/opie-taskbar_1.2.3.bb
index d8a794fc16..c22e3bed5f 100644
--- a/packages/opie-taskbar/opie-taskbar_1.2.3.bb
+++ b/packages/opie-taskbar/opie-taskbar_1.2.3.bb
@@ -13,4 +13,5 @@ SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/core/apps/calibrate \
file://kbdlocks-runtime.patch;patch=1 \
file://restart-from-bindir.patch;patch=1 \
file://server.pro \
+ file://firstuse-path.patch;patch=1 \
"
diff --git a/packages/opie-taskbar/opie-taskbar_cvs.bb b/packages/opie-taskbar/opie-taskbar_cvs.bb
index 3bda5c4f40..e84e35d820 100644
--- a/packages/opie-taskbar/opie-taskbar_cvs.bb
+++ b/packages/opie-taskbar/opie-taskbar_cvs.bb
@@ -1,6 +1,6 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r15"
+PR = "r16"
SRC_URI = "${HANDHELDS_CVS};module=opie/core/apps/calibrate \
${HANDHELDS_CVS};module=opie/noncore/settings/mediummount \
@@ -14,4 +14,5 @@ SRC_URI = "${HANDHELDS_CVS};module=opie/core/apps/calibrate \
file://kbdlocks-runtime.patch;patch=1 \
file://restart-from-bindir.patch;patch=1 \
file://server.pro \
+ file://firstuse-path.patch;patch=1 \
"
diff --git a/packages/opie-ttf-support/opie-ttf-support_1.1.bb b/packages/opie-ttf-support/opie-ttf-support_1.1.bb
index 74de9116b7..d11d8ea75f 100644
--- a/packages/opie-ttf-support/opie-ttf-support_1.1.bb
+++ b/packages/opie-ttf-support/opie-ttf-support_1.1.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Meta-package for Opie TTF support"
-DEPENDS = "freetype"
SECTION = "opie/fonts"
-PR = "r2"
+DEPENDS = "freetype"
+PR = "r3"
SRC_URI = "file://update-qtttffontdir.c"
S = "${WORKDIR}"
@@ -12,12 +12,12 @@ do_compile() {
do_install() {
install -d ${D}${sbindir}
+ install -d ${D}${sysconfdir}/update-fonts-common.d/
install -m 0755 update-qtttffontdir ${D}${sbindir}
-}
-
-pkg_postinst() {
+ echo "
#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-mkdir -p ${palmtopdir}/lib/fonts/
-${sbindir}/update-qtttffontdir ${datadir}/fonts/truetype >${palmtopdir}/lib/fonts/fontdir
+# Author: Rolf Leggewie
+
+${sbindir}/update-qtttffontdir ${datadir}/fonts/truetype > ${palmtopdir}/lib/fonts/fontdir
+" > ${D}${sysconfdir}/update-fonts-common.d/02qtttffont-update
}
diff --git a/packages/orinoco/orinoco-modules.inc b/packages/orinoco/orinoco-modules.inc
new file mode 100644
index 0000000000..d0d0055645
--- /dev/null
+++ b/packages/orinoco/orinoco-modules.inc
@@ -0,0 +1,22 @@
+DESCRIPTION = "A driver for wireless LAN cards based on Hermes(Orinoco) cards. \
+Also contains support for cards using downloadable firmware, i.e. the Symbol/Socket family."
+SECTION = "kernel/modules"
+PRIORITY = "optional"
+RDEPENDS_orinoco-modules-pci = "orinoco-modules"
+RDEPENDS_orinoco-modules-usb = "orinoco-modules"
+RDEPENDS_orinoco-modules-nortel = "orinoco-modules"
+RRECOMMENDS_orinoco-modules-cs = "apm-wifi-suspendfix"
+PROVIDES = "spectrum-modules"
+LICENSE = "GPL"
+
+SRC_URI = "http://ozlabs.org/people/dgibson/dldwd/orinoco-${PV}.tar.gz"
+S = "${WORKDIR}/orinoco-${PV}"
+
+inherit module
+
+PACKAGES = "${PN}-dbg orinoco-modules-cs orinoco-modules-pci orinoco-modules-usb orinoco-modules-nortel orinoco-modules"
+FILES_orinoco-modules-pci = "/lib/modules/${KERNEL_VERSION}/net/orinoco_p*${KERNEL_OBJECT_SUFFIX}"
+FILES_orinoco-modules-usb = "/lib/modules/${KERNEL_VERSION}/net/*_usb${KERNEL_OBJECT_SUFFIX}"
+FILES_orinoco-modules-nortel = "/lib/modules/${KERNEL_VERSION}/net/orinoco_tmd${KERNEL_OBJECT_SUFFIX} \
+ /lib/modules/${KERNEL_VERSION}/net/orinoco_nortel${KERNEL_OBJECT_SUFFIX}"
+FILES_orinoco-modules = "/lib/modules/"
diff --git a/packages/orinoco/orinoco-modules_0.13e.bb b/packages/orinoco/orinoco-modules_0.13e.bb
index 9c5cc2f776..4f8ca98e0b 100644
--- a/packages/orinoco/orinoco-modules_0.13e.bb
+++ b/packages/orinoco/orinoco-modules_0.13e.bb
@@ -1,11 +1,9 @@
-DESCRIPTION = "A driver for wireless LAN cards based on Hermes(Orinoco) cards. \
-Also contains support for cards using downloadable firmware, i.e. the Symbol/Socket family."
-SECTION = "kernel/modules"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PR = "r4"
+require orinoco-modules.inc
-SRC_URI = "http://ozlabs.org/people/dgibson/dldwd/orinoco-${PV}.tar.gz; \
+RDEPENDS_orinoco-modules-cs += "orinoco-modules"
+PR = "r5"
+
+SRC_URI += "\
file://crosscompile.patch;patch=1 \
file://monitor-${PV}.patch;patch=1 \
file://spectrum.conf \
@@ -14,8 +12,6 @@ SRC_URI = "http://ozlabs.org/people/dgibson/dldwd/orinoco-${PV}.tar.gz; \
file://orinoco_cs.conf"
S = "${WORKDIR}/orinoco-${PV}"
-inherit module
-
do_compile_prepend() {
cp -f ${WORKDIR}/spectrum* ${S}/
}
@@ -30,14 +26,4 @@ do_install() {
install -m 0644 ${WORKDIR}/orinoco_cs.conf ${D}${sysconfdir}/modutils/
}
-PACKAGES = "orinoco-modules-cs orinoco-modules-pci orinoco-modules-usb orinoco-modules-nortel orinoco-modules"
FILES_orinoco-modules-cs = "/lib/modules/${KERNEL_VERSION}/net/*_cs${KERNEL_OBJECT_SUFFIX} /${sysconfdir}"
-FILES_orinoco-modules-pci = "/lib/modules/${KERNEL_VERSION}/net/orinoco_p*${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules-usb = "/lib/modules/${KERNEL_VERSION}/net/*_usb${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules-nortel = "/lib/modules/${KERNEL_VERSION}/net/orinoco_tmd${KERNEL_OBJECT_SUFFIX} \
- /lib/modules/${KERNEL_VERSION}/net/orinoco_nortel${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules = "/lib/modules/"
-RDEPENDS_orinoco-modules-cs = "orinoco-modules"
-RDEPENDS_orinoco-modules-pci = "orinoco-modules"
-RDEPENDS_orinoco-modules-usb = "orinoco-modules"
-RDEPENDS_orinoco-modules-nortel = "orinoco-modules"
diff --git a/packages/orinoco/orinoco-modules_0.15rc1.bb b/packages/orinoco/orinoco-modules_0.15rc1.bb
index ebf0f03bbf..746618f7df 100644
--- a/packages/orinoco/orinoco-modules_0.15rc1.bb
+++ b/packages/orinoco/orinoco-modules_0.15rc1.bb
@@ -1,11 +1,9 @@
-DESCRIPTION = "A driver for wireless LAN cards based on Hermes(Orinoco) cards. \
-Also contains support for cards using downloadable firmware, i.e. the Symbol/Socket family."
-SECTION = "kernel/modules"
-PRIORITY = "optional"
+require orinoco-modules.inc
+
DEPENDS = "orinoco-conf spectrum-fw"
-RDEPENDS = "orinoco-conf"
-LICENSE = "GPL"
-PR = "r7"
+RDEPENDS += "orinoco-conf"
+RDEPENDS_orinoco-modules-cs += "orinoco-modules spectrum-fw"
+PR = "r8"
SRC_URI = "${SOURCEFORGE_MIRROR}/orinoco/orinoco-${PV}.tar.gz \
file://makefile_fix.patch;patch=1 \
@@ -13,23 +11,10 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/orinoco/orinoco-${PV}.tar.gz \
file://add_event.patch;patch=1 \
file://add_utsname.patch;patch=1 \
file://spectrum_cs_ids.patch;patch=1"
-S = "${WORKDIR}/orinoco-${PV}"
-
-inherit module
do_install() {
install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/net/
install -m 0644 *${KERNEL_OBJECT_SUFFIX} ${D}${base_libdir}/modules/${KERNEL_VERSION}/net/
}
-PACKAGES = "orinoco-modules-cs orinoco-modules-pci orinoco-modules-usb orinoco-modules-nortel orinoco-modules"
FILES_orinoco-modules-cs = "/lib/modules/${KERNEL_VERSION}/net/*_cs${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules-pci = "/lib/modules/${KERNEL_VERSION}/net/orinoco_p*${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules-usb = "/lib/modules/${KERNEL_VERSION}/net/*_usb${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules-nortel = "/lib/modules/${KERNEL_VERSION}/net/orinoco_tmd${KERNEL_OBJECT_SUFFIX} \
- /lib/modules/${KERNEL_VERSION}/net/orinoco_nortel${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules = "/lib/modules/"
-RDEPENDS_orinoco-modules-cs = "orinoco-modules spectrum-fw"
-RDEPENDS_orinoco-modules-pci = "orinoco-modules"
-RDEPENDS_orinoco-modules-usb = "orinoco-modules"
-RDEPENDS_orinoco-modules-nortel = "orinoco-modules"
diff --git a/packages/orinoco/orinoco-modules_0.15rc2.bb b/packages/orinoco/orinoco-modules_0.15rc2.bb
index 4153e8c4fc..da25d7b7e5 100644
--- a/packages/orinoco/orinoco-modules_0.15rc2.bb
+++ b/packages/orinoco/orinoco-modules_0.15rc2.bb
@@ -1,37 +1,21 @@
-DESCRIPTION = "A driver for wireless LAN cards based on Hermes(Orinoco) cards. \
-Also contains support for cards using downloadable firmware, i.e. the Symbol/Socket family."
-SECTION = "kernel/modules"
-PRIORITY = "optional"
-PROVIDES = "spectrum-modules"
+require orinoco-modules.inc
+
DEPENDS = "orinoco-conf spectrum-fw"
-RDEPENDS = "orinoco-conf"
-LICENSE = "GPL"
-PR = "r9"
+RDEPENDS += "orinoco-conf"
+RDEPENDS_orinoco-modules-cs += "orinoco-modules spectrum-fw"
+PR = "r10"
-SRC_URI = "http://ozlabs.org/people/dgibson/dldwd/orinoco-${PV}.tar.gz \
+SRC_URI += "\
file://makefile_fix.patch;patch=1 \
file://list-move.patch;patch=1 \
file://add_utsname.patch;patch=1 \
file://add_event.patch;patch=1 \
file://spectrum_cs_ids.patch;patch=1 \
file://catch-up-with-kernel-changes.patch;patch=1"
-S = "${WORKDIR}/orinoco-${PV}"
-
-inherit module
do_install() {
install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/net/
install -m 0644 *${KERNEL_OBJECT_SUFFIX} ${D}${base_libdir}/modules/${KERNEL_VERSION}/net/
}
-PACKAGES = "orinoco-modules-cs orinoco-modules-pci orinoco-modules-usb orinoco-modules-nortel orinoco-modules"
FILES_orinoco-modules-cs = "/lib/modules/${KERNEL_VERSION}/net/*_cs${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules-pci = "/lib/modules/${KERNEL_VERSION}/net/orinoco_p*${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules-usb = "/lib/modules/${KERNEL_VERSION}/net/*_usb${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules-nortel = "/lib/modules/${KERNEL_VERSION}/net/orinoco_tmd${KERNEL_OBJECT_SUFFIX} \
- /lib/modules/${KERNEL_VERSION}/net/orinoco_nortel${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules = "/lib/modules/"
-RDEPENDS_orinoco-modules-cs = "orinoco-modules spectrum-fw"
-RDEPENDS_orinoco-modules-pci = "orinoco-modules"
-RDEPENDS_orinoco-modules-usb = "orinoco-modules"
-RDEPENDS_orinoco-modules-nortel = "orinoco-modules"
diff --git a/packages/orinoco/orinoco-modules_cvs.bb b/packages/orinoco/orinoco-modules_cvs.bb
index 5d3efec80f..6cbb7eb8f6 100644
--- a/packages/orinoco/orinoco-modules_cvs.bb
+++ b/packages/orinoco/orinoco-modules_cvs.bb
@@ -1,12 +1,9 @@
-DESCRIPTION = "A driver for wireless LAN cards based on Hermes(Orinoco) cards. \
-Also contains support for cards using downloadable firmware, i.e. the Symbol/Socket family."
-SECTION = "kernel/modules"
-PRIORITY = "optional"
-PROVIDES = "spectrum-modules"
+require orinoco-modules.inc
+
DEPENDS = "orinoco-conf spectrum-fw"
-RDEPENDS = "orinoco-conf"
-LICENSE = "GPL"
-PR = "r2"
+RDEPENDS += "orinoco-conf"
+RDEPENDS_orinoco-modules-cs = "orinoco-modules spectrum-fw"
+PR = "r3"
PARALLEL_MAKE = ""
EXTRA_OEMAKE = 'KERNEL_SRC="${KERNEL_STAGING_DIR}"'
@@ -18,21 +15,9 @@ SRC_URI = "cvs://anonymous@cvs.sv.gnu.org/cvsroot/orinoco;module=orinoco;method=
file://list-move.patch;patch=1"
S = "${WORKDIR}/orinoco"
-inherit module
-
do_install() {
install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/net/
install -m 0644 *${KERNEL_OBJECT_SUFFIX} ${D}${base_libdir}/modules/${KERNEL_VERSION}/net/
}
-PACKAGES = "orinoco-modules-cs orinoco-modules-pci orinoco-modules-usb orinoco-modules-nortel orinoco-modules"
FILES_orinoco-modules-cs = "/lib/modules/${KERNEL_VERSION}/net/*_cs${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules-pci = "/lib/modules/${KERNEL_VERSION}/net/orinoco_p*${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules-usb = "/lib/modules/${KERNEL_VERSION}/net/*_usb${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules-nortel = "/lib/modules/${KERNEL_VERSION}/net/orinoco_tmd${KERNEL_OBJECT_SUFFIX} \
- /lib/modules/${KERNEL_VERSION}/net/orinoco_nortel${KERNEL_OBJECT_SUFFIX}"
-FILES_orinoco-modules = "/lib/modules/"
-RDEPENDS_orinoco-modules-cs = "orinoco-modules spectrum-fw"
-RDEPENDS_orinoco-modules-pci = "orinoco-modules"
-RDEPENDS_orinoco-modules-usb = "orinoco-modules"
-RDEPENDS_orinoco-modules-nortel = "orinoco-modules"
diff --git a/packages/php/php-native_4.4.4.bb b/packages/php/php-native_4.4.4.bb
index c90aa83c01..07b13be93a 100644
--- a/packages/php/php-native_4.4.4.bb
+++ b/packages/php/php-native_4.4.4.bb
@@ -3,3 +3,4 @@ require php_${PV}.bb
inherit native
FILESPATH = "${FILE_DIRNAME}/php-${PV}:${FILE_DIRNAME}/php:${FILE_DIRNAME}/files"
DEPENDS = "zlib-native"
+PR = "r1"
diff --git a/packages/php/php-native_5.2.0.bb b/packages/php/php-native_5.2.0.bb
index 7f5bc9fd94..b3bf7b56b4 100644
--- a/packages/php/php-native_5.2.0.bb
+++ b/packages/php/php-native_5.2.0.bb
@@ -6,4 +6,4 @@ export LD_LIBRARY_PATH = "${STAGING_LIBDIR}"
FILESPATH = "${FILE_DIRNAME}/php-${PV}:${FILE_DIRNAME}/php:${FILE_DIRNAME}/files"
DEPENDS = "zlib-native libxml2-native"
-
+PR = "r1"
diff --git a/packages/php/php.inc b/packages/php/php.inc
index 6e2c26585a..321034bee7 100644
--- a/packages/php/php.inc
+++ b/packages/php/php.inc
@@ -1,10 +1,12 @@
-SECTION = "console/network"
DESCRIPTION = "A server-side, HTML-embedded scripting language. This package provides the CGI."
+HOMEPAGE = "http://www.php.net"
+SECTION = "console/network"
LICENSE = "PHP"
-SRC_URI = "http://de3.php.net/distributions/php-${PV}.tar.bz2 \
- file://${FILESDIR}/autotools.patch;patch=1 \
- file://${FILESDIR}/pear.patch;patch=1"
-S = "${WORKDIR}/php-${PV}"
+DEPENDS = "zlib libxml2 mysql virtual/libiconv php-native"
+
+SRC_URI = "http://us2.php.net/distributions/php-${PV}.tar.bz2\
+ file://autotools.patch;patch=1 \
+ file://acinclude-xml2-config.patch;patch=1"
inherit autotools
diff --git a/packages/php/php_4.4.4.bb b/packages/php/php_4.4.4.bb
index c15a9ee486..3000ad1fb6 100644
--- a/packages/php/php_4.4.4.bb
+++ b/packages/php/php_4.4.4.bb
@@ -1 +1,8 @@
require php.inc
+
+PR = "r1"
+
+SRC_URI = "http://museum.php.net/php4/php-${PV}.tar.bz2 \
+ file://${FILESDIR}/autotools.patch;patch=1 \
+ file://${FILESDIR}/pear.patch;patch=1"
+
diff --git a/packages/php/php_5.1.4.bb b/packages/php/php_5.1.4.bb
index a9ea9d2ed6..47475daca9 100644
--- a/packages/php/php_5.1.4.bb
+++ b/packages/php/php_5.1.4.bb
@@ -1,21 +1,12 @@
-SECTION = "console/network"
-DESCRIPTION = "A server-side, HTML-embedded scripting language. This package provides the CGI."
-LICENSE = "PHP"
-DEPENDS = "zlib libxml2 mysql virtual/libiconv"
+require php.inc
-SRC_URI = "http://us2.php.net/distributions/php-${PV}.tar.bz2\
- file://autotools.patch;patch=1 \
- file://acinclude-xml2-config.patch;patch=1"
-
-S = "${WORKDIR}/php-${PV}"
-PR = "r2"
+PR = "r3"
inherit autotools
export THREADS="pthread"
export LIBS=" -lpthread "
-CFLAGS += " -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED"
EXTRA_OECONF = "--without-iconv \
--enable-discard-path \
--enable-sockets \
@@ -28,13 +19,7 @@ EXTRA_OECONF += " --without-pear --with-libxml-dir=${STAGING_BINDIR} "
#EXTRA_OECONF += " --with-pear-php-cli=${STAGING_BINDIR_NATIVE}/php"
#DEPENDS += " php-native"
-acpaths = ""
-
do_configure_append() {
find ${S} -type f | xargs sed -i 's:/usr/lib:${STAGING_LIBDIR}:'
find ${S} -type f | xargs sed -i 's:/usr/include:${STAGING_INCDIR}:'
}
-
-do_install () {
- oe_runmake 'INSTALL_ROOT=${D}' install
-}
diff --git a/packages/php/php_5.2.0.bb b/packages/php/php_5.2.0.bb
index e1ce34b8e6..4ed88cf411 100644
--- a/packages/php/php_5.2.0.bb
+++ b/packages/php/php_5.2.0.bb
@@ -1,22 +1,12 @@
-SECTION = "console/network"
-DESCRIPTION = "A server-side, HTML-embedded scripting language. This package provides the CGI."
-LICENSE = "PHP"
-DEPENDS = "zlib libxml2 mysql virtual/libiconv php-native"
+require php.inc
-SRC_URI = "http://us2.php.net/distributions/php-${PV}.tar.bz2\
- file://autotools.patch;patch=1 \
- file://acinclude-xml2-config.patch;patch=1 \
- file://pear-makefile.patch;patch=1 \
- "
-S = "${WORKDIR}/php-${PV}"
-PR = "r1"
+PR = "r2"
-inherit autotools
+SRC_URI += "file://pear-makefile.patch;patch=1 "
export THREADS="pthread"
export LIBS=" -lpthread "
-CFLAGS += " -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED"
EXTRA_OECONF = " --without-iconv \
--enable-discard-path \
--enable-sockets \
@@ -29,28 +19,16 @@ EXTRA_OECONF = " --without-iconv \
--with-mysqli="${STAGING_BINDIR_NATIVE}/mysql_config" \
"
-
-
-
-# Uncomment the following two lines, and comment the above to enable PEAR
EXTRA_OECONF += " --with-pear-php-cli=${STAGING_BINDIR} --with-libxml-dir=${STAGING_BINDIR}"
export LD_LIBRARY_PATH = "${STAGING_LIBDIR}"
export PHP_NATIVE_DIR="${STAGING_BINDIR_NATIVE}"
export PHP_PEAR_PHP_BIN="/usr/bin/php"
-acpaths = ""
-
do_configure_append() {
find ${S} -type f | xargs sed -i 's:I/usr/include:I${STAGING_INCDIR}:g'
}
-do_install () {
- oe_runmake 'INSTALL_ROOT=${D}' install
-}
-
-
-
PACKAGES = "${PN}-dbg \
${PN}-cli \
${PN}-pear \
@@ -59,7 +37,7 @@ PACKAGES = "${PN}-dbg \
"
-FILES_${PN}-dbg ="/usr/bin/.debug"
+FILES_${PN}-dbg =+"/usr/bin/.debug"
FILES_${PN}-cli ="/usr/bin/php"
@@ -76,17 +54,12 @@ FILES_${PN}-pear ="/usr/bin/pear* /usr/bin/pecl \
/usr/lib/php/.depdb /usr/lib/php/.depdblock /usr/lib/php/.filemap \
/usr/lib/php/.lock"
-
FILES_${PN}-dev ="/usr/include/php /usr/include/build \
/usr/bin/phpize /usr/bin/php-config"
FILES_${PN} ="/usr/lib/php"
FILES_${PN} +="/usr/bin"
-
-
RDEPENDS_${PN}-pear =${PN}
RDEPENDS_${PN}-cli =${PN}
RDEPENDS_${PN}-dev =${PN}
-
-
diff --git a/packages/pimlico/contacts-0.8/.mtn2git_empty b/packages/pimlico/contacts-0.8/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pimlico/contacts-0.8/.mtn2git_empty
diff --git a/packages/pimlico/contacts-0.7/contacts-owl-window-menu.patch b/packages/pimlico/contacts-0.8/contacts-owl-window-menu.patch
index 1fbf1dcc2a..1fbf1dcc2a 100644
--- a/packages/pimlico/contacts-0.7/contacts-owl-window-menu.patch
+++ b/packages/pimlico/contacts-0.8/contacts-owl-window-menu.patch
diff --git a/packages/pimlico/contacts_0.7.bb b/packages/pimlico/contacts_0.8.bb
index d596d45659..d596d45659 100644
--- a/packages/pimlico/contacts_0.7.bb
+++ b/packages/pimlico/contacts_0.8.bb
diff --git a/packages/pimlico/contacts_svn.bb b/packages/pimlico/contacts_svn.bb
index 90a37287d1..0257046e88 100644
--- a/packages/pimlico/contacts_svn.bb
+++ b/packages/pimlico/contacts_svn.bb
@@ -4,9 +4,9 @@ require contacts.inc
#RDEPENDS += "gnome-vfs-plugin-file"
#RRECOMMENDS += "gnome-vfs-plugin-http"
-PV = "0.5+svnr${SRCREV}"
+PV = "0.8+svnr${SRCREV}"
-#DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE = "-1"
SRC_URI = "svn://svn.o-hand.com/repos/${PN};module=trunk;proto=http \
file://stock_contact.png \
diff --git a/packages/pimlico/dates_0.4.4.bb b/packages/pimlico/dates_0.4.5.bb
index 9e5451f522..9e5451f522 100644
--- a/packages/pimlico/dates_0.4.4.bb
+++ b/packages/pimlico/dates_0.4.5.bb
diff --git a/packages/pimlico/dates_svn.bb b/packages/pimlico/dates_svn.bb
index d392031abb..0ba1b07dc0 100644
--- a/packages/pimlico/dates_svn.bb
+++ b/packages/pimlico/dates_svn.bb
@@ -2,7 +2,7 @@ require dates.inc
DEFAULT_PREFERENCE = "-1"
-PV = "0.4.4+svnr${SRCREV}"
+PV = "0.4.5+svnr${SRCREV}"
S = "${WORKDIR}/trunk"
SRC_URI = "svn://svn.o-hand.com/repos/${PN};module=trunk;proto=http \
diff --git a/packages/pimlico/files/dates-owl-window-menu.patch b/packages/pimlico/files/dates-owl-window-menu.patch
index d47875dd65..6bde252ac3 100644
--- a/packages/pimlico/files/dates-owl-window-menu.patch
+++ b/packages/pimlico/files/dates-owl-window-menu.patch
@@ -1,21 +1,30 @@
-Index: trunk/src/Makefile.am
-===================================================================
---- trunk.orig/src/Makefile.am 2007-07-11 22:16:15.000000000 +0100
-+++ trunk/src/Makefile.am 2007-07-13 08:21:11.000000000 +0100
-@@ -47,7 +47,7 @@
- libgtkdatesviewinclude_HEADERS = \
- dates_view.h
+---
+ src/Makefile.am | 2 +-
+ src/dates_gtk.c | 5 -----
+ src/dates_main.c | 5 +++++
+ src/dates_platform.h | 2 +-
+ 4 files changed, 7 insertions(+), 7 deletions(-)
+
+--- dates-0.4.5.orig/src/Makefile.am
++++ dates-0.4.5/src/Makefile.am
+@@ -33,11 +33,11 @@ dates_SOURCES = $(platform) \
+ dates_callbacks.h \
+ dates_callbacks.c \
+ gconf-bridge.h \
+ gconf-bridge.c
--dates_LDADD = $(DATES_LIBS) libgtkdatesview.la
-+dates_LDADD = $(DATES_LIBS) libgtkdatesview.la -lowl
+-dates_LDADD = $(DATES_LIBS) libgtkdatesview.la
++dates_LDADD = $(DATES_LIBS) libgtkdatesview.la -lowl
if USE_OWL
dates_LDADD += $(top_builddir)/libowl/libowl.la
-Index: trunk/src/dates_gtk.c
-===================================================================
---- trunk.orig/src/dates_gtk.c 2007-07-11 22:16:15.000000000 +0100
-+++ trunk/src/dates_gtk.c 2007-07-13 08:33:48.000000000 +0100
-@@ -32,10 +32,6 @@
+ endif
+
+--- dates-0.4.5.orig/src/dates_gtk.c
++++ dates-0.4.5/src/dates_gtk.c
+@@ -30,14 +30,10 @@
+ #ifdef WITH_HILDON
+ #include <hildon/hildon-color-button.h>
#endif
#ifndef DATES_PLATFORM_create_main_window
@@ -26,7 +35,11 @@ Index: trunk/src/dates_gtk.c
static GtkWidget *
create_main_window (DatesData * d, GtkWidget * toolbar,
GtkWidget * menu, GtkAccelGroup * accel_group)
-@@ -57,7 +53,6 @@
+ {
+ GtkWidget *main_vbox;
+@@ -55,11 +51,10 @@ create_main_window (DatesData * d, GtkWi
+ main_vbox = gtk_vbox_new (FALSE, 0);
+ gtk_widget_show (main_vbox);
gtk_container_add (GTK_CONTAINER (d->main_window), main_vbox);
gtk_widget_show (menu);
@@ -34,24 +47,13 @@ Index: trunk/src/dates_gtk.c
gtk_box_pack_end (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
gtk_container_set_border_width (GTK_CONTAINER (toolbar), 3);
-Index: trunk/src/dates_platform.h
-===================================================================
---- trunk.orig/src/dates_platform.h 2007-07-11 22:16:15.000000000 +0100
-+++ trunk/src/dates_platform.h 2007-07-13 08:21:11.000000000 +0100
-@@ -20,7 +20,7 @@
- #include "dates_types.h"
--#ifdef WITH_HILDON
-+#if 1
- #define DATES_MENU_WITHOUT_BAR 1
- #endif
-
-Index: trunk/src/dates_main.c
-===================================================================
---- trunk.orig/src/dates_main.c 2007-07-11 22:16:15.000000000 +0100
-+++ trunk/src/dates_main.c 2007-07-13 08:36:11.000000000 +0100
-@@ -25,6 +25,8 @@
+--- dates-0.4.5.orig/src/dates_main.c
++++ dates-0.4.5/src/dates_main.c
+@@ -23,10 +23,12 @@
+ #include <math.h>
+ #include <libecal/e-cal-time-util.h>
#include <libical/icaltime.h>
#include <gconf/gconf-client.h>
@@ -60,7 +62,11 @@ Index: trunk/src/dates_main.c
#include "dates_types.h"
#include "dates_platform.h"
#include "dates_callbacks.h"
-@@ -566,6 +568,9 @@
+
+ #include "gconf-bridge.h"
+@@ -564,10 +566,13 @@ main (int argc, char **argv)
+ gtk_widget_show (plug_widget);
+ } else {
gtk_widget_show (data.main_window);
}
@@ -70,3 +76,20 @@ Index: trunk/src/dates_main.c
gtk_main ();
/* clean up */
+ g_option_context_free (context);
+
+--- dates-0.4.5.orig/src/dates_platform.h
++++ dates-0.4.5/src/dates_platform.h
+@@ -18,11 +18,11 @@
+ #ifndef DATES_UI_GTK_H
+ #define DATES_UI_GTK_H
+
+ #include "dates_types.h"
+
+-#ifdef WITH_HILDON
++#if 1
+ #define DATES_MENU_WITHOUT_BAR 1
+ #endif
+
+ struct DatesData;
+
diff --git a/packages/pimlico/tasks-0.13/.mtn2git_empty b/packages/pimlico/tasks-0.13/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pimlico/tasks-0.13/.mtn2git_empty
diff --git a/packages/pimlico/tasks-0.12/tasks-owl.diff b/packages/pimlico/tasks-0.13/tasks-owl.diff
index ce1ed9db7e..ce1ed9db7e 100644
--- a/packages/pimlico/tasks-0.12/tasks-owl.diff
+++ b/packages/pimlico/tasks-0.13/tasks-owl.diff
diff --git a/packages/pimlico/tasks_0.12.bb b/packages/pimlico/tasks_0.13.bb
index ff8da563e6..ff8da563e6 100644
--- a/packages/pimlico/tasks_0.12.bb
+++ b/packages/pimlico/tasks_0.13.bb
diff --git a/packages/pimlico/tasks_svn.bb b/packages/pimlico/tasks_svn.bb
index 5ad983ad97..dc998d2508 100644
--- a/packages/pimlico/tasks_svn.bb
+++ b/packages/pimlico/tasks_svn.bb
@@ -2,9 +2,8 @@ require tasks.inc
DEFAULT_PREFERENCE = "-1"
-PV = "0.12+svnr${SRCREV}"
+PV = "0.13+svnr${SRCREV}"
S = "${WORKDIR}/trunk"
SRC_URI = "svn://svn.o-hand.com/repos/${PN};module=trunk;proto=http \
- file://tasks-single.diff;patch=1 \
file://tasks-owl.diff;patch=1"
diff --git a/packages/pine/pine_4.64.bb b/packages/pine/pine_4.64.bb
index 22a5cae098..990e282c3c 100644
--- a/packages/pine/pine_4.64.bb
+++ b/packages/pine/pine_4.64.bb
@@ -53,6 +53,6 @@ do_install() {
done
}
-PACKAGES = "pico pine"
+PACKAGES = "${PN}-dbg pico pine"
FILES_pico = "${bindir}/pico ${bindir}/pilot"
diff --git a/packages/pngcrush/.mtn2git_empty b/packages/pngcrush/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pngcrush/.mtn2git_empty
diff --git a/packages/pngcrush/pngcrush-native_1.6.4.bb b/packages/pngcrush/pngcrush-native_1.6.4.bb
new file mode 100644
index 0000000000..4e119a167b
--- /dev/null
+++ b/packages/pngcrush/pngcrush-native_1.6.4.bb
@@ -0,0 +1,9 @@
+require pngcrush_${PV}.bb
+
+inherit native
+
+S = "${WORKDIR}/pngcrush-${PV}"
+
+do_stage() {
+ install -m 755 ${S}/pngcrush ${STAGING_BINDIR}/
+}
diff --git a/packages/pngcrush/pngcrush_1.6.4.bb b/packages/pngcrush/pngcrush_1.6.4.bb
new file mode 100644
index 0000000000..9f0413a6cc
--- /dev/null
+++ b/packages/pngcrush/pngcrush_1.6.4.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Tool to optimize PNG images"
+SECTION = "console/graphics"
+HOMEPAGE = "http://pmt.sourceforge.net/pngcrush"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/pmt/pngcrush-${PV}.tar.gz"
+
+#DEPENDS += "libsdl-net smpeg"
+
+EXTRA_OEMAKE = "CC='${CC}' CFLAGS='${CFLAGS}' LD='${CC}'"
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 755 ${PN} ${D}${bindir}
+}
diff --git a/packages/poboxserver/poboxserver_1.2.5.bb b/packages/poboxserver/poboxserver_1.2.5.bb
index 4e03f61820..49730374e7 100644
--- a/packages/poboxserver/poboxserver_1.2.5.bb
+++ b/packages/poboxserver/poboxserver_1.2.5.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "OpenPOBox is an open source implementation of a 'Predictive Opera
SECTION = "inputmethods"
LICENSE = "GPL"
DEPENDS = "perl-native ruby-native nkf-native"
-PR = "r6"
+PR = "r7"
SRC_URI = "${SOURCEFORGE_MIRROR}/gakusei/pobox-${PV}.tar.bz2 \
http://www.vanille.de/mirror/pbserver-${PV}.tar.gz \
@@ -39,4 +39,4 @@ do_install() {
}
FILES_${PN}-dbg += "${palmtopdir}/pobox/.debug"
-FILES_${PN} += "${palmtopdir}/pobox/* ${sysconfdir}/init.d/pbserver"
+FILES_${PN} += "${palmtopdir}/pobox/*"
diff --git a/packages/pointercal/files/e680/.mtn2git_empty b/packages/pointercal/files/e680/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pointercal/files/e680/.mtn2git_empty
diff --git a/packages/pointercal/files/e680/pointercal b/packages/pointercal/files/e680/pointercal
new file mode 100644
index 0000000000..8b0651dd21
--- /dev/null
+++ b/packages/pointercal/files/e680/pointercal
@@ -0,0 +1 @@
+-19857 -412 18085522 189 -23922 22734294 65536
diff --git a/packages/pointercal/files/fic-gta02/pointercal b/packages/pointercal/files/fic-gta02/pointercal
index 198fd2a776..841ec7fab2 100644
--- a/packages/pointercal/files/fic-gta02/pointercal
+++ b/packages/pointercal/files/fic-gta02/pointercal
Binary files differ
diff --git a/packages/pointercal/pointercal_0.0.bb b/packages/pointercal/pointercal_0.0.bb
index 4fa8c1cc0e..42aae8c0c0 100644
--- a/packages/pointercal/pointercal_0.0.bb
+++ b/packages/pointercal/pointercal_0.0.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Touchscreen calibration data"
SECTION = "base"
-PR = "r4"
+PR = "r6"
SRC_URI = "file://pointercal"
S = "${WORKDIR}"
diff --git a/packages/poppler/poppler0.6_cvs.bb b/packages/poppler/poppler0.6_cvs.bb
deleted file mode 100644
index 15f94a775a..0000000000
--- a/packages/poppler/poppler0.6_cvs.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require poppler.inc
-PV = "0.5.9+cvs${SRCDATE}"
-PR = "r1"
-
-SRC_URI = "cvs://anoncvs@cvs.freedesktop.org/cvs/poppler;module=poppler"
-S = "${WORKDIR}/poppler"
diff --git a/packages/portaudio/portaudio-v19_20071207.bb b/packages/portaudio/portaudio-v19_20071207.bb
new file mode 100644
index 0000000000..f8de2d741d
--- /dev/null
+++ b/packages/portaudio/portaudio-v19_20071207.bb
@@ -0,0 +1,27 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2008
+# License: MIT (see http://www.opensource.org/licenses/mit-license.php
+# for a copy of the license)
+#
+# Filename: portaudio-v19_20071207.bb
+# Date: 20080104 (YMD)
+
+DESCRIPTION = "portaudio is a portable cross-platform Audio API"
+SECTION = "base"
+LICENSE = "GPL"
+
+PR = "r0"
+
+######################################################################################
+
+SRC_URI = "http://www.portaudio.com/archives/pa_stable_v19_${PV}.tar.gz"
+
+S = "${WORKDIR}/portaudio"
+
+inherit autotools
+
+do_stage() {
+ install -m 0644 ${S}/include/portaudio.h ${STAGING_INCDIR}/
+ oe_libinstall -C lib -so libportaudio ${STAGING_LIBDIR}/
+}
diff --git a/packages/portaudio/portaudio_0.0.19.bb b/packages/portaudio/portaudio_0.0.19.bb
index e5bb5e850f..748519f5b1 100644
--- a/packages/portaudio/portaudio_0.0.19.bb
+++ b/packages/portaudio/portaudio_0.0.19.bb
@@ -82,6 +82,6 @@ do_install() {
install -m 0755 bin/* ${D}${bindir}/
}
-PACKAGES = "libportaudio0 portaudio-dev portaudio-examples"
+PACKAGES = "${PN}-dbg libportaudio0 portaudio-dev portaudio-examples"
FILES_libportaudio0 = "${libdir}"
FILES_portaudio-examples = "${bindir}"
diff --git a/packages/portmap/portmap_6.0.bb b/packages/portmap/portmap_6.0.bb
index 335b5c6d09..f42ed1e288 100644
--- a/packages/portmap/portmap_6.0.bb
+++ b/packages/portmap/portmap_6.0.bb
@@ -1,8 +1,8 @@
require portmap.inc
-PR = "r1"
+PR = "r2"
-SRC_URI = "http://neil.brown.name/portmap/portmap-6.0.tgz \
+SRC_URI = "http://www.sourcefiles.org/Networking/Tools/Miscellanenous/portmap-6.0.tgz \
file://destdir-no-strip.patch;patch=1 \
file://no-tcpd-support.patch;patch=1 \
file://no-libwrap.patch;patch=1;pnum=0 \
diff --git a/packages/ppp-dialin/ppp-dialin_0.1.bb b/packages/ppp-dialin/ppp-dialin_0.1.bb
index f0d410e455..6861d8ad44 100644
--- a/packages/ppp-dialin/ppp-dialin_0.1.bb
+++ b/packages/ppp-dialin/ppp-dialin_0.1.bb
@@ -2,7 +2,7 @@ SECTION = "console/network"
DESCRIPTION = "Enables PPP dial-in through a serial connection"
DEPENDS = "ppp"
RDEPENDS = "ppp"
-PR = "r4"
+PR = "r5"
LICENSE = "MIT"
SRC_URI = "file://host-peer \
@@ -16,6 +16,7 @@ do_install() {
install -m 0755 ${WORKDIR}/ppp-dialin ${D}${sbindir}
}
+PACKAGE_ARCH = "all"
pkg_postinst() {
if test "x$D" != "x"; then
diff --git a/packages/ppp-dsl/files/.mtn2git_empty b/packages/ppp-dsl/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ppp-dsl/files/.mtn2git_empty
diff --git a/packages/ppp-dsl/dsl-provider b/packages/ppp-dsl/files/dsl-provider
index 6feaf55752..6feaf55752 100644
--- a/packages/ppp-dsl/dsl-provider
+++ b/packages/ppp-dsl/files/dsl-provider
diff --git a/packages/ppp-dsl/ppp_on_boot.dsl b/packages/ppp-dsl/files/ppp_on_boot.dsl
index f1d5183b38..f1d5183b38 100755
--- a/packages/ppp-dsl/ppp_on_boot.dsl
+++ b/packages/ppp-dsl/files/ppp_on_boot.dsl
diff --git a/packages/ppp-dsl/ppp-dsl_0.1-monolithic.bb b/packages/ppp-dsl/ppp-dsl_0.1-monolithic.bb
deleted file mode 100644
index 216c87fffd..0000000000
--- a/packages/ppp-dsl/ppp-dsl_0.1-monolithic.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-include ppp-dsl_0.1.bb
-
-RDEPENDS = "ppp rp-pppoe"
-
-S = "${WORKDIR}/ppp-dsl-0.1"
diff --git a/packages/ppp-dsl/ppp-dsl_0.1.bb b/packages/ppp-dsl/ppp-dsl_0.1.bb
index 8796da86da..8d63e8fc47 100644
--- a/packages/ppp-dsl/ppp-dsl_0.1.bb
+++ b/packages/ppp-dsl/ppp-dsl_0.1.bb
@@ -4,7 +4,7 @@ LICENSE = "PD"
DEPENDS = "ppp rp-pppoe"
RDEPENDS = "ppp rp-pppoe"
RRECOMMENDS = "kernel-module-ppp-async kernel-module-ppp-generic kernel-module-slhc"
-PR = "r2"
+PR = "r5"
SRC_URI = "file://dsl-provider \
file://ppp_on_boot.dsl"
@@ -25,4 +25,6 @@ else
fi
}
-CONFFILES_${PN}_nylon = "${sysconfdir}/ppp/peers/dsl-provider"
+PACKAGE_ARCH = "all"
+
+CONFFILES_${PN} = "${sysconfdir}/ppp/peers/dsl-provider"
diff --git a/packages/ppp/ppp-gprs/.mtn2git_empty b/packages/ppp/ppp-gprs/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ppp/ppp-gprs/.mtn2git_empty
diff --git a/packages/ppp/ppp-gprs/chats/.mtn2git_empty b/packages/ppp/ppp-gprs/chats/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ppp/ppp-gprs/chats/.mtn2git_empty
diff --git a/packages/ppp/ppp-gprs/chats/chat-gprs b/packages/ppp/ppp-gprs/chats/chat-gprs
new file mode 100644
index 0000000000..b90e5ff2cf
--- /dev/null
+++ b/packages/ppp/ppp-gprs/chats/chat-gprs
@@ -0,0 +1,9 @@
+# GPRS AP (Access Point) name should be passed via -T switch
+
+'' ATZ
+OK AT+CGDCONT=1,"IP","\T"
+# We setup profile #1 in the above command, and then use it to call
+# GPRS. This is correct, but some buggy phone may parse only "ATD*99#"
+OK "ATD*99***1#"
+# OK "ATD*99#"
+CONNECT ''
diff --git a/packages/ppp/ppp-gprs/peers/.mtn2git_empty b/packages/ppp/ppp-gprs/peers/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/ppp/ppp-gprs/peers/.mtn2git_empty
diff --git a/packages/ppp/ppp-gprs/peers/_gprs b/packages/ppp/ppp-gprs/peers/_gprs
new file mode 100644
index 0000000000..cc316951a0
--- /dev/null
+++ b/packages/ppp/ppp-gprs/peers/_gprs
@@ -0,0 +1,68 @@
+# This is generic pppd config for GPRS connection
+# To connect to specific provider, one
+# more provider-specific config
+# file is required, which will
+# usually just set chat utility params
+# to make connection and call this one.
+# (And in most cases that will be symlink
+# to a file with well-known settings).
+#
+# Usage:
+# pppd <modem_device> call gprs call <country>-<provider>
+# where /etc/ppp/peers/<country>-<provider> ends with line
+# "call _gprs"
+# Example:
+# pppd /dev/rfcomm0 call ua-life
+# Debugging PPP protocol problems:
+# pppd /dev/rfcomm0 call ua-life debug nodetach
+#
+# By default, pppd will go to
+# background once connection is
+# established. 'nodetach' option will
+# prevent this. If you want pppd to
+# even establish connection in
+# background, comment 'updetach' below.
+#
+# To finish connection, use Ctrl+C if
+# 'nodetach' was used, or
+# kill `head -1 /var/run/ppp-gprs.pid`
+# otherwise. If you are sure there is
+# only one pppd connection, you can use
+# killall pppd
+
+##
+## pppd options
+##
+
+# create /var/run/ppp-gprs.pid
+# with pid for this connection
+linkname gprs
+# Connect in foreground, but go
+# to background after that
+updetach
+
+# Treat port as a modem and use
+# reasonable speed
+modem
+crtscts
+115200
+
+# Don't do CCP (compression)
+# negotiation, some providers are
+# rumored to be buggy with this, and
+# most of the rest simply don't support.
+noccp
+# We don't request provider to auth
+# to us
+noauth
+# Don't try to make up our IP address
+noipdefault
+# We want provider to supply us with
+# IP addresses
+ipcp-accept-remote
+ipcp-accept-local
+# Ask provider for DNS and use it
+usepeerdns
+# Route all Internet traffic thru
+# this connection
+defaultroute
diff --git a/packages/ppp/ppp-gprs/peers/_gprs-ap-internet b/packages/ppp/ppp-gprs/peers/_gprs-ap-internet
new file mode 100644
index 0000000000..d55eeb0266
--- /dev/null
+++ b/packages/ppp/ppp-gprs/peers/_gprs-ap-internet
@@ -0,0 +1,3 @@
+# -T options sets value of GPRS AP name. Change this for your cell provider
+connect '/usr/sbin/chat -V -f /etc/ppp/chats/chat-gprs -T internet'
+call gprs
diff --git a/packages/ppp/ppp-gprs_1.0.bb b/packages/ppp/ppp-gprs_1.0.bb
new file mode 100644
index 0000000000..2db6e808f4
--- /dev/null
+++ b/packages/ppp/ppp-gprs_1.0.bb
@@ -0,0 +1,22 @@
+SECTION = "console/network"
+DESCRIPTION = "PPP scripts for easy GPRS connection"
+LICENSE = "GPL"
+RDEPENDS = "ppp"
+PR = "r1"
+
+SRC_URI = "file://peers/* file://chats/*"
+
+do_install () {
+ install -d ${D}${sysconfdir}/ppp/peers/
+ install -d ${D}${sysconfdir}/ppp/chats/
+ install -m 0644 ${WORKDIR}/peers/* ${D}${sysconfdir}/ppp/peers/
+ install -m 0644 ${WORKDIR}/chats/* ${D}${sysconfdir}/ppp/chats/
+
+ # Add links for providers sharing same well-known config
+ ln -sf _gprs-ap-internet ${D}${sysconfdir}/ppp/peers/ua-life
+}
+
+PACKAGE_ARCH = "all"
+
+# In worst case, user may need to edit anything
+CONFFILES_${PN} = "${sysconfdir}/ppp/peers/_gprs ${sysconfdir}/ppp/chats/chat-gprs"
diff --git a/packages/prelink/prelink-20060712/arm_eabi.patch b/packages/prelink/prelink-20060712/arm_eabi.patch
deleted file mode 100644
index b234af9b3f..0000000000
--- a/packages/prelink/prelink-20060712/arm_eabi.patch
+++ /dev/null
@@ -1,286 +0,0 @@
-Index: prelink-0.0.20050901/src/arch-arm.c
-===================================================================
---- prelink-0.0.20050901.orig/src/arch-arm.c 2004-09-30 17:07:57.000000000 +0100
-+++ prelink-0.0.20050901/src/arch-arm.c 2006-04-07 14:41:25.000000000 +0100
-@@ -145,6 +145,24 @@
- error (0, 0, "%s: R_ARM_PC24 relocs with non-zero addend should not be present in prelinked REL sections",
- dso->filename);
- return 1;
-+ case R_ARM_TLS_DTPOFF32:
-+ write_le32 (dso, rel->r_offset, value);
-+ break;
-+ /* DTPMOD32 and TPOFF32 is impossible to predict unless prelink
-+ sets the rules. Also for TPOFF{32,} there is REL->RELA problem. */
-+ case R_ARM_TLS_DTPMOD32:
-+ if (dso->ehdr.e_type == ET_EXEC)
-+ {
-+ error (0, 0, "%s: R_ARM_TLS_DTPMOD32 reloc in executable?",
-+ dso->filename);
-+ return 1;
-+ }
-+ break;
-+ case R_ARM_TLS_TPOFF32:
-+ if (dso->ehdr.e_type == ET_EXEC)
-+ error (0, 0, "%s: R_ARM_TLS_TPOFF32 relocs should not be present in prelinked ET_EXEC REL sections",
-+ dso->filename);
-+ break;
- case R_ARM_COPY:
- if (dso->ehdr.e_type == ET_EXEC)
- /* COPY relocs are handled specially in generic code. */
-@@ -195,6 +213,24 @@
- write_le32 (dso, rela->r_offset,
- (read_ule32 (dso, rela->r_offset) & 0xff000000) | val);
- break;
-+ case R_ARM_TLS_DTPOFF32:
-+ write_le32 (dso, rela->r_offset, value + rela->r_addend);
-+ break;
-+ /* DTPMOD32 and TPOFF32 is impossible to predict unless prelink
-+ sets the rules. */
-+ case R_ARM_TLS_DTPMOD32:
-+ if (dso->ehdr.e_type == ET_EXEC)
-+ {
-+ error (0, 0, "%s: R_ARM_TLS_DTPMOD32 reloc in executable?",
-+ dso->filename);
-+ return 1;
-+ }
-+ break;
-+ case R_ARM_TLS_TPOFF32:
-+ if (dso->ehdr.e_type == ET_EXEC && info->resolvetls)
-+ write_le32 (dso, rela->r_offset,
-+ -(value + rela->r_addend - info->resolvetls->offset));
-+ break;
- case R_ARM_COPY:
- if (dso->ehdr.e_type == ET_EXEC)
- /* COPY relocs are handled specially in generic code. */
-@@ -315,6 +351,7 @@
- {
- GElf_Addr value;
- struct prelink_conflict *conflict;
-+ struct prelink_tls *tls;
- GElf_Rela *ret;
-
- if (GELF_R_TYPE (rel->r_info) == R_ARM_RELATIVE
-@@ -324,8 +361,31 @@
- conflict = prelink_conflict (info, GELF_R_SYM (rel->r_info),
- GELF_R_TYPE (rel->r_info));
- if (conflict == NULL)
-- return 0;
-- value = conflict_lookup_value (conflict);
-+ {
-+ if (info->curtls == NULL)
-+ return 0;
-+ switch (GELF_R_TYPE (rel->r_info))
-+ {
-+ /* Even local DTPMOD and TPOFF relocs need conflicts. */
-+ case R_ARM_TLS_DTPMOD32:
-+ case R_ARM_TLS_TPOFF32:
-+ break;
-+ default:
-+ return 0;
-+ }
-+ value = 0;
-+ }
-+ else
-+ {
-+ /* DTPOFF32 wants to see only real conflicts, not lookups
-+ with reloc_class RTYPE_CLASS_TLS. */
-+ if (GELF_R_TYPE (rel->r_info) == R_ARM_TLS_DTPOFF32
-+ && conflict->lookup.tls == conflict->conflict.tls
-+ && conflict->lookupval == conflict->conflictval)
-+ return 0;
-+
-+ value = conflict_lookup_value (conflict);
-+ }
- ret = prelink_conflict_add_rela (info);
- if (ret == NULL)
- return 1;
-@@ -342,6 +402,33 @@
- error (0, 0, "%s: R_ARM_%s relocs should not be present in prelinked REL sections",
- dso->filename, GELF_R_TYPE (rel->r_info) == R_ARM_ABS32 ? "ABS32" : "PC24");
- return 1;
-+ case R_ARM_TLS_DTPMOD32:
-+ case R_ARM_TLS_DTPOFF32:
-+ case R_ARM_TLS_TPOFF32:
-+ if (conflict != NULL
-+ && (conflict->reloc_class != RTYPE_CLASS_TLS
-+ || conflict->lookup.tls == NULL))
-+ {
-+ error (0, 0, "%s: R_ARM_TLS not resolving to STT_TLS symbol",
-+ dso->filename);
-+ return 1;
-+ }
-+ tls = conflict ? conflict->lookup.tls : info->curtls;
-+ ret->r_info = GELF_R_INFO (0, R_ARM_ABS32);
-+ switch (GELF_R_TYPE (rel->r_info))
-+ {
-+ case R_ARM_TLS_DTPMOD32:
-+ ret->r_addend = tls->modid;
-+ break;
-+ case R_ARM_TLS_DTPOFF32:
-+ ret->r_addend = value;
-+ break;
-+ case R_ARM_TLS_TPOFF32:
-+ ret->r_addend = -(value + read_ule32 (dso, rel->r_offset)
-+ - tls->offset);
-+ break;
-+ }
-+ break;
- case R_ARM_COPY:
- error (0, 0, "R_ARM_COPY should not be present in shared libraries");
- return 1;
-@@ -359,6 +446,7 @@
- {
- GElf_Addr value;
- struct prelink_conflict *conflict;
-+ struct prelink_tls *tls;
- GElf_Rela *ret;
- Elf32_Sword val;
-
-@@ -369,8 +457,31 @@
- conflict = prelink_conflict (info, GELF_R_SYM (rela->r_info),
- GELF_R_TYPE (rela->r_info));
- if (conflict == NULL)
-- return 0;
-- value = conflict_lookup_value (conflict);
-+ {
-+ if (info->curtls == NULL)
-+ return 0;
-+ switch (GELF_R_TYPE (rela->r_info))
-+ {
-+ /* Even local DTPMOD and TPOFF relocs need conflicts. */
-+ case R_ARM_TLS_DTPMOD32:
-+ case R_ARM_TLS_TPOFF32:
-+ break;
-+ default:
-+ return 0;
-+ }
-+ value = 0;
-+ }
-+ else
-+ {
-+ /* DTPOFF32 wants to see only real conflicts, not lookups
-+ with reloc_class RTYPE_CLASS_TLS. */
-+ if (GELF_R_TYPE (rela->r_info) == R_ARM_TLS_DTPOFF32
-+ && conflict->lookup.tls == conflict->conflict.tls
-+ && conflict->lookupval == conflict->conflictval)
-+ return 0;
-+
-+ value = conflict_lookup_value (conflict);
-+ }
- ret = prelink_conflict_add_rela (info);
- if (ret == NULL)
- return 1;
-@@ -398,6 +509,32 @@
- case R_ARM_COPY:
- error (0, 0, "R_ARM_COPY should not be present in shared libraries");
- return 1;
-+ case R_ARM_TLS_DTPMOD32:
-+ case R_ARM_TLS_DTPOFF32:
-+ case R_ARM_TLS_TPOFF32:
-+ if (conflict != NULL
-+ && (conflict->reloc_class != RTYPE_CLASS_TLS
-+ || conflict->lookup.tls == NULL))
-+ {
-+ error (0, 0, "%s: R_386_TLS not resolving to STT_TLS symbol",
-+ dso->filename);
-+ return 1;
-+ }
-+ tls = conflict ? conflict->lookup.tls : info->curtls;
-+ ret->r_info = GELF_R_INFO (0, R_ARM_ABS32);
-+ switch (GELF_R_TYPE (rela->r_info))
-+ {
-+ case R_ARM_TLS_DTPMOD32:
-+ ret->r_addend = tls->modid;
-+ break;
-+ case R_ARM_TLS_DTPOFF32:
-+ ret->r_addend += value;
-+ break;
-+ case R_ARM_TLS_TPOFF32:
-+ ret->r_addend = -(value + rela->r_addend - tls->offset);
-+ break;
-+ }
-+ break;
- default:
- error (0, 0, "%s: Unknown arm relocation type %d", dso->filename,
- (int) GELF_R_TYPE (rela->r_info));
-@@ -418,6 +555,7 @@
- abort ();
- case R_ARM_RELATIVE:
- case R_ARM_ABS32:
-+ case R_ARM_TLS_TPOFF32:
- rela->r_addend = (Elf32_Sword) read_ule32 (dso, rel->r_offset);
- break;
- case R_ARM_PC24:
-@@ -426,6 +564,8 @@
- break;
- case R_ARM_COPY:
- case R_ARM_GLOB_DAT:
-+ case R_ARM_TLS_DTPOFF32:
-+ case R_ARM_TLS_DTPMOD32:
- rela->r_addend = 0;
- break;
- }
-@@ -445,6 +585,7 @@
- abort ();
- case R_ARM_RELATIVE:
- case R_ARM_ABS32:
-+ case R_ARM_TLS_TPOFF32:
- write_le32 (dso, rela->r_offset, rela->r_addend);
- break;
- case R_ARM_PC24:
-@@ -453,6 +594,8 @@
- | ((rela->r_addend >> 2) & 0xffffff));
- break;
- case R_ARM_GLOB_DAT:
-+ case R_ARM_TLS_DTPMOD32:
-+ case R_ARM_TLS_DTPOFF32:
- write_le32 (dso, rela->r_offset, 0);
- break;
- }
-@@ -488,6 +631,13 @@
- /* FALLTHROUGH */
- case R_ARM_PC24:
- return 1;
-+ case R_ARM_TLS_TPOFF32:
-+ /* In shared libraries TPOFF is changed always into
-+ conflicts, for executables we need to preserve
-+ original addend. */
-+ if (dso->ehdr.e_type == ET_EXEC)
-+ return 1;
-+ break;
- }
- }
- }
-@@ -612,6 +762,12 @@
- return 0;
- error (0, 0, "%s: R_ARM_COPY reloc in shared library?", dso->filename);
- return 1;
-+ case R_ARM_TLS_DTPMOD32:
-+ case R_ARM_TLS_DTPOFF32:
-+ write_le32 (dso, rel->r_offset, 0);
-+ break;
-+ case R_ARM_TLS_TPOFF32:
-+ break;
- default:
- error (0, 0, "%s: Unknown arm relocation type %d", dso->filename,
- (int) GELF_R_TYPE (rel->r_info));
-@@ -634,6 +790,10 @@
- {
- case R_ARM_COPY: return RTYPE_CLASS_COPY;
- case R_ARM_JUMP_SLOT: return RTYPE_CLASS_PLT;
-+ case R_ARM_TLS_DTPMOD32:
-+ case R_ARM_TLS_DTPOFF32:
-+ case R_ARM_TLS_TPOFF32:
-+ return RTYPE_CLASS_TLS;
- default: return RTYPE_CLASS_VALID;
- }
- }
-@@ -646,7 +806,7 @@
- .R_JMP_SLOT = R_ARM_JUMP_SLOT,
- .R_COPY = R_ARM_COPY,
- .R_RELATIVE = R_ARM_RELATIVE,
-- .dynamic_linker = "/lib/ld-linux.so.2",
-+ .dynamic_linker = "/lib/ld-linux.so.3",
- .adjust_dyn = arm_adjust_dyn,
- .adjust_rel = arm_adjust_rel,
- .adjust_rela = arm_adjust_rela,
diff --git a/packages/prelink/prelink-20061027/.mtn2git_empty b/packages/prelink/prelink-20061027/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/prelink/prelink-20061027/.mtn2git_empty
diff --git a/packages/prelink/prelink-20061027/arm_eabi.patch b/packages/prelink/prelink-20061027/arm_eabi.patch
new file mode 100644
index 0000000000..dbce9d2895
--- /dev/null
+++ b/packages/prelink/prelink-20061027/arm_eabi.patch
@@ -0,0 +1,297 @@
+---
+ src/arch-arm.c | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 172 insertions(+), 5 deletions(-)
+
+Index: prelink-0.0.20061027/src/arch-arm.c
+===================================================================
+--- prelink-0.0.20061027.orig/src/arch-arm.c 2006-08-13 16:18:17.000000000 +0100
++++ prelink-0.0.20061027/src/arch-arm.c 2007-09-04 12:29:06.000000000 +0100
+@@ -145,6 +145,26 @@ arm_prelink_rel (struct prelink_info *in
+ error (0, 0, "%s: R_ARM_PC24 relocs with non-zero addend should not be present in prelinked REL sections",
+ dso->filename);
+ return 1;
++ /* DTPOFF32, DTPMOD32 and TPOFF32 is impossible to predict unless prelink
++ sets the rules. Also for DTPOFF32/TPOFF32 there is REL->RELA problem. */
++ case R_ARM_TLS_DTPOFF32:
++ if (dso->ehdr.e_type == ET_EXEC)
++ error (0, 0, "%s: R_ARM_TLS_DTPOFF32 relocs should not be present in prelinked ET_EXEC REL sections",
++ dso->filename);
++ break;
++ case R_ARM_TLS_DTPMOD32:
++ if (dso->ehdr.e_type == ET_EXEC)
++ {
++ error (0, 0, "%s: R_ARM_TLS_DTPMOD32 reloc in executable?",
++ dso->filename);
++ return 1;
++ }
++ break;
++ case R_ARM_TLS_TPOFF32:
++ if (dso->ehdr.e_type == ET_EXEC)
++ error (0, 0, "%s: R_ARM_TLS_TPOFF32 relocs should not be present in prelinked ET_EXEC REL sections",
++ dso->filename);
++ break;
+ case R_ARM_COPY:
+ if (dso->ehdr.e_type == ET_EXEC)
+ /* COPY relocs are handled specially in generic code. */
+@@ -195,6 +215,25 @@ arm_prelink_rela (struct prelink_info *i
+ write_le32 (dso, rela->r_offset,
+ (read_ule32 (dso, rela->r_offset) & 0xff000000) | val);
+ break;
++ case R_ARM_TLS_DTPOFF32:
++ if (dso->ehdr.e_type == ET_EXEC)
++ write_le32 (dso, rela->r_offset, value + rela->r_addend);
++ break;
++ /* DTPMOD32 and TPOFF32 are impossible to predict unless prelink
++ sets the rules. */
++ case R_ARM_TLS_DTPMOD32:
++ if (dso->ehdr.e_type == ET_EXEC)
++ {
++ error (0, 0, "%s: R_ARM_TLS_DTPMOD32 reloc in executable?",
++ dso->filename);
++ return 1;
++ }
++ break;
++ case R_ARM_TLS_TPOFF32:
++ if (dso->ehdr.e_type == ET_EXEC && info->resolvetls)
++ write_le32 (dso, rela->r_offset,
++ value + rela->r_addend + info->resolvetls->offset);
++ break;
+ case R_ARM_COPY:
+ if (dso->ehdr.e_type == ET_EXEC)
+ /* COPY relocs are handled specially in generic code. */
+@@ -315,6 +354,7 @@ arm_prelink_conflict_rel (DSO *dso, stru
+ {
+ GElf_Addr value;
+ struct prelink_conflict *conflict;
++ struct prelink_tls *tls;
+ GElf_Rela *ret;
+
+ if (GELF_R_TYPE (rel->r_info) == R_ARM_RELATIVE
+@@ -324,8 +364,32 @@ arm_prelink_conflict_rel (DSO *dso, stru
+ conflict = prelink_conflict (info, GELF_R_SYM (rel->r_info),
+ GELF_R_TYPE (rel->r_info));
+ if (conflict == NULL)
+- return 0;
+- value = conflict_lookup_value (conflict);
++ {
++ if (info->curtls == NULL)
++ return 0;
++ switch (GELF_R_TYPE (rel->r_info))
++ {
++ /* Even local DTPMOD and {D,}TPOFF relocs need conflicts. */
++ case R_ARM_TLS_DTPMOD32:
++ case R_ARM_TLS_DTPOFF32:
++ case R_ARM_TLS_TPOFF32:
++ break;
++ default:
++ return 0;
++ }
++ value = 0;
++ }
++ else
++ {
++ /* DTPOFF32 wants to see only real conflicts, not lookups
++ with reloc_class RTYPE_CLASS_TLS. */
++ if (GELF_R_TYPE (rel->r_info) == R_ARM_TLS_DTPOFF32
++ && conflict->lookup.tls == conflict->conflict.tls
++ && conflict->lookupval == conflict->conflictval)
++ return 0;
++
++ value = conflict_lookup_value (conflict);
++ }
+ ret = prelink_conflict_add_rela (info);
+ if (ret == NULL)
+ return 1;
+@@ -342,6 +406,33 @@ arm_prelink_conflict_rel (DSO *dso, stru
+ error (0, 0, "%s: R_ARM_%s relocs should not be present in prelinked REL sections",
+ dso->filename, GELF_R_TYPE (rel->r_info) == R_ARM_ABS32 ? "ABS32" : "PC24");
+ return 1;
++ case R_ARM_TLS_DTPMOD32:
++ case R_ARM_TLS_DTPOFF32:
++ case R_ARM_TLS_TPOFF32:
++ if (conflict != NULL
++ && (conflict->reloc_class != RTYPE_CLASS_TLS
++ || conflict->lookup.tls == NULL))
++ {
++ error (0, 0, "%s: R_ARM_TLS not resolving to STT_TLS symbol",
++ dso->filename);
++ return 1;
++ }
++ tls = conflict ? conflict->lookup.tls : info->curtls;
++ ret->r_info = GELF_R_INFO (0, R_ARM_ABS32);
++ switch (GELF_R_TYPE (rel->r_info))
++ {
++ case R_ARM_TLS_DTPMOD32:
++ ret->r_addend = tls->modid;
++ break;
++ case R_ARM_TLS_DTPOFF32:
++ ret->r_addend = value + read_ule32 (dso, rel->r_offset);
++ break;
++ case R_ARM_TLS_TPOFF32:
++ ret->r_addend = value + read_ule32 (dso, rel->r_offset)
++ + tls->offset;
++ break;
++ }
++ break;
+ case R_ARM_COPY:
+ error (0, 0, "R_ARM_COPY should not be present in shared libraries");
+ return 1;
+@@ -359,6 +450,7 @@ arm_prelink_conflict_rela (DSO *dso, str
+ {
+ GElf_Addr value;
+ struct prelink_conflict *conflict;
++ struct prelink_tls *tls;
+ GElf_Rela *ret;
+ Elf32_Sword val;
+
+@@ -369,8 +461,32 @@ arm_prelink_conflict_rela (DSO *dso, str
+ conflict = prelink_conflict (info, GELF_R_SYM (rela->r_info),
+ GELF_R_TYPE (rela->r_info));
+ if (conflict == NULL)
+- return 0;
+- value = conflict_lookup_value (conflict);
++ {
++ if (info->curtls == NULL)
++ return 0;
++ switch (GELF_R_TYPE (rela->r_info))
++ {
++ /* Even local DTPMOD and {D,}TPOFF relocs need conflicts. */
++ case R_ARM_TLS_DTPMOD32:
++ case R_ARM_TLS_DTPOFF32:
++ case R_ARM_TLS_TPOFF32:
++ break;
++ default:
++ return 0;
++ }
++ value = 0;
++ }
++ else
++ {
++ /* DTPOFF32 wants to see only real conflicts, not lookups
++ with reloc_class RTYPE_CLASS_TLS. */
++ if (GELF_R_TYPE (rela->r_info) == R_ARM_TLS_DTPOFF32
++ && conflict->lookup.tls == conflict->conflict.tls
++ && conflict->lookupval == conflict->conflictval)
++ return 0;
++
++ value = conflict_lookup_value (conflict);
++ }
+ ret = prelink_conflict_add_rela (info);
+ if (ret == NULL)
+ return 1;
+@@ -398,6 +514,32 @@ arm_prelink_conflict_rela (DSO *dso, str
+ case R_ARM_COPY:
+ error (0, 0, "R_ARM_COPY should not be present in shared libraries");
+ return 1;
++ case R_ARM_TLS_DTPMOD32:
++ case R_ARM_TLS_DTPOFF32:
++ case R_ARM_TLS_TPOFF32:
++ if (conflict != NULL
++ && (conflict->reloc_class != RTYPE_CLASS_TLS
++ || conflict->lookup.tls == NULL))
++ {
++ error (0, 0, "%s: R_386_TLS not resolving to STT_TLS symbol",
++ dso->filename);
++ return 1;
++ }
++ tls = conflict ? conflict->lookup.tls : info->curtls;
++ ret->r_info = GELF_R_INFO (0, R_ARM_ABS32);
++ switch (GELF_R_TYPE (rela->r_info))
++ {
++ case R_ARM_TLS_DTPMOD32:
++ ret->r_addend = tls->modid;
++ break;
++ case R_ARM_TLS_DTPOFF32:
++ ret->r_addend = value + rela->r_addend;
++ break;
++ case R_ARM_TLS_TPOFF32:
++ ret->r_addend = value + rela->r_addend + tls->offset;
++ break;
++ }
++ break;
+ default:
+ error (0, 0, "%s: Unknown arm relocation type %d", dso->filename,
+ (int) GELF_R_TYPE (rela->r_info));
+@@ -418,6 +560,8 @@ arm_rel_to_rela (DSO *dso, GElf_Rel *rel
+ abort ();
+ case R_ARM_RELATIVE:
+ case R_ARM_ABS32:
++ case R_ARM_TLS_TPOFF32:
++ case R_ARM_TLS_DTPOFF32:
+ rela->r_addend = (Elf32_Sword) read_ule32 (dso, rel->r_offset);
+ break;
+ case R_ARM_PC24:
+@@ -426,6 +570,7 @@ arm_rel_to_rela (DSO *dso, GElf_Rel *rel
+ break;
+ case R_ARM_COPY:
+ case R_ARM_GLOB_DAT:
++ case R_ARM_TLS_DTPMOD32:
+ rela->r_addend = 0;
+ break;
+ }
+@@ -445,6 +590,8 @@ arm_rela_to_rel (DSO *dso, GElf_Rela *re
+ abort ();
+ case R_ARM_RELATIVE:
+ case R_ARM_ABS32:
++ case R_ARM_TLS_TPOFF32:
++ case R_ARM_TLS_DTPOFF32:
+ write_le32 (dso, rela->r_offset, rela->r_addend);
+ break;
+ case R_ARM_PC24:
+@@ -453,6 +600,7 @@ arm_rela_to_rel (DSO *dso, GElf_Rela *re
+ | ((rela->r_addend >> 2) & 0xffffff));
+ break;
+ case R_ARM_GLOB_DAT:
++ case R_ARM_TLS_DTPMOD32:
+ write_le32 (dso, rela->r_offset, 0);
+ break;
+ }
+@@ -488,6 +636,15 @@ arm_need_rel_to_rela (DSO *dso, int firs
+ /* FALLTHROUGH */
+ case R_ARM_PC24:
+ return 1;
++ case R_ARM_TLS_DTPOFF32:
++ case R_ARM_TLS_TPOFF32:
++ /* In shared libraries {D,}TPOFF32 is changed always into
++ conflicts, for executables we need to preserve
++ original addend. */
++ if (dso->ehdr.e_type == ET_EXEC) {
++ return 1;
++ }
++ break;
+ }
+ }
+ }
+@@ -612,6 +769,12 @@ arm_undo_prelink_rel (DSO *dso, GElf_Rel
+ return 0;
+ error (0, 0, "%s: R_ARM_COPY reloc in shared library?", dso->filename);
+ return 1;
++ case R_ARM_TLS_DTPMOD32:
++ write_le32 (dso, rel->r_offset, 0);
++ break;
++ case R_ARM_TLS_DTPOFF32:
++ case R_ARM_TLS_TPOFF32:
++ break;
+ default:
+ error (0, 0, "%s: Unknown arm relocation type %d", dso->filename,
+ (int) GELF_R_TYPE (rel->r_info));
+@@ -634,6 +797,10 @@ arm_reloc_class (int reloc_type)
+ {
+ case R_ARM_COPY: return RTYPE_CLASS_COPY;
+ case R_ARM_JUMP_SLOT: return RTYPE_CLASS_PLT;
++ case R_ARM_TLS_DTPMOD32:
++ case R_ARM_TLS_DTPOFF32:
++ case R_ARM_TLS_TPOFF32:
++ return RTYPE_CLASS_TLS;
+ default: return RTYPE_CLASS_VALID;
+ }
+ }
+@@ -646,7 +813,7 @@ PL_ARCH = {
+ .R_JMP_SLOT = R_ARM_JUMP_SLOT,
+ .R_COPY = R_ARM_COPY,
+ .R_RELATIVE = R_ARM_RELATIVE,
+- .dynamic_linker = "/lib/ld-linux.so.2",
++ .dynamic_linker = "/lib/ld-linux.so.3",
+ .adjust_dyn = arm_adjust_dyn,
+ .adjust_rel = arm_adjust_rel,
+ .adjust_rela = arm_adjust_rela,
diff --git a/packages/prelink/prelink-20060712/prelink.conf b/packages/prelink/prelink-20061027/prelink.conf
index c5a4f4adc3..c5a4f4adc3 100644
--- a/packages/prelink/prelink-20060712/prelink.conf
+++ b/packages/prelink/prelink-20061027/prelink.conf
diff --git a/packages/prelink/prelink-20060712/prelink.cron.daily b/packages/prelink/prelink-20061027/prelink.cron.daily
index 0b3c07322c..0b3c07322c 100644
--- a/packages/prelink/prelink-20060712/prelink.cron.daily
+++ b/packages/prelink/prelink-20061027/prelink.cron.daily
diff --git a/packages/prelink/prelink-20060712/prelink.default b/packages/prelink/prelink-20061027/prelink.default
index 901258ed2a..901258ed2a 100644
--- a/packages/prelink/prelink-20060712/prelink.default
+++ b/packages/prelink/prelink-20061027/prelink.default
diff --git a/packages/prelink/prelink_20060712.bb b/packages/prelink/prelink_20060712.bb
deleted file mode 100644
index fcf990b7a0..0000000000
--- a/packages/prelink/prelink_20060712.bb
+++ /dev/null
@@ -1,46 +0,0 @@
-SECTION = "devel"
-DEPENDS = "elfutils"
-DESCRIPTION = " The prelink package contains a utility which modifies ELF shared libraries \
-and executables, so that far fewer relocations need to be resolved at \
-runtime and thus programs come up faster."
-LICENSE = "GPL"
-PR = "r2"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/p/prelink/prelink_0.0.${PV}.orig.tar.gz \
- file://prelink.conf \
- file://prelink.cron.daily \
- file://prelink.default"
-
-TARGET_OS_ORIG := "${TARGET_OS}"
-OVERRIDES_append = ":${TARGET_OS_ORIG}"
-SRC_URI_append_linux-gnueabi = " file://arm_eabi.patch;patch=1"
-
-S = "${WORKDIR}/prelink-0.0.${PV}"
-
-EXTRA_OECONF = "--disable-64bit"
-
-inherit autotools
-
-do_install_append () {
- install -d ${D}${sysconfdir}/cron.daily ${D}${sysconfdir}/default
- install -m 0644 ${WORKDIR}/prelink.conf ${D}${sysconfdir}/prelink.conf
- install -m 0644 ${WORKDIR}/prelink.cron.daily ${D}${sysconfdir}/cron.daily/prelink
- install -m 0644 ${WORKDIR}/prelink.default ${D}${sysconfdir}/default/prelink
-}
-
-pkg_postinst_prelink() {
-#!/bin/sh
-
-if [ "x$D" != "x" ]; then
- exit 1
-fi
-
-prelink -a
-}
-
-pkg_postrm_prelink() {
-#!/bin/sh
-
-prelink -au
-}
-
diff --git a/packages/prelink/prelink_20061027.bb b/packages/prelink/prelink_20061027.bb
new file mode 100644
index 0000000000..e93f1f2515
--- /dev/null
+++ b/packages/prelink/prelink_20061027.bb
@@ -0,0 +1,46 @@
+SECTION = "devel"
+DEPENDS = "elfutils"
+DESCRIPTION = " The prelink package contains a utility which modifies ELF shared libraries \
+and executables, so that far fewer relocations need to be resolved at \
+runtime and thus programs come up faster."
+LICENSE = "GPL"
+PR = "r5"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/p/prelink/prelink_0.0.${PV}.orig.tar.gz \
+ file://prelink.conf \
+ file://prelink.cron.daily \
+ file://prelink.default"
+
+TARGET_OS_ORIG := "${TARGET_OS}"
+OVERRIDES_append = ":${TARGET_OS_ORIG}"
+SRC_URI_append_linux-gnueabi = " file://arm_eabi.patch;patch=1"
+
+S = "${WORKDIR}/prelink-0.0.${PV}"
+
+EXTRA_OECONF = "--disable-64bit"
+
+inherit autotools
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/cron.daily ${D}${sysconfdir}/default
+ install -m 0644 ${WORKDIR}/prelink.conf ${D}${sysconfdir}/prelink.conf
+ install -m 0644 ${WORKDIR}/prelink.cron.daily ${D}${sysconfdir}/cron.daily/prelink
+ install -m 0644 ${WORKDIR}/prelink.default ${D}${sysconfdir}/default/prelink
+}
+
+pkg_postinst_prelink() {
+#!/bin/sh
+
+if [ "x$D" != "x" ]; then
+ exit 1
+fi
+
+prelink -a
+}
+
+pkg_postrm_prelink() {
+#!/bin/sh
+
+prelink -au
+}
+
diff --git a/packages/prismstumbler/prismstumbler_0.7.2.bb b/packages/prismstumbler/prismstumbler_0.7.2.bb
index 4cb390ce33..cda97bc832 100644
--- a/packages/prismstumbler/prismstumbler_0.7.2.bb
+++ b/packages/prismstumbler/prismstumbler_0.7.2.bb
@@ -1,7 +1,7 @@
SECTION = "x11/network"
PR = "r1"
-PACKAGES = "prismstumbler prismstumbler-frontend"
+PACKAGES = "${PN}-dbg prismstumbler prismstumbler-frontend"
DESCRIPTION = "Prismstumbler wireless LAN scanner"
LICENSE = "GPL"
DEPENDS = "libpcap gtk+ wireless-tools sqlite"
diff --git a/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb b/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb
index 86b4df46bf..7b60122445 100644
--- a/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb
+++ b/packages/prismstumbler/prismstumbler_0.7.3+0.7.4pre1.bb
@@ -1,7 +1,7 @@
SECTION = "x11/network"
PR = "r3"
-PACKAGES = "prismstumbler prismstumbler-frontend prismstumbler-doc"
+PACKAGES = "${PN}-dbg prismstumbler prismstumbler-frontend prismstumbler-doc"
DESCRIPTION = "Prismstumbler wireless LAN scanner"
DESCRIPTION_prismstumbler-frontend = "Prismstumbler wireless LAN scanner GTK frontend"
LICENSE = "GPL"
diff --git a/packages/prismstumbler/prismstumbler_0.7.3.bb b/packages/prismstumbler/prismstumbler_0.7.3.bb
index eaebe2087f..29a112d95a 100644
--- a/packages/prismstumbler/prismstumbler_0.7.3.bb
+++ b/packages/prismstumbler/prismstumbler_0.7.3.bb
@@ -1,7 +1,7 @@
SECTION = "x11/network"
PR = "r5"
-PACKAGES = "prismstumbler prismstumbler-frontend prismstumbler-doc"
+PACKAGES = "${PN}-dbg prismstumbler prismstumbler-frontend prismstumbler-doc"
DESCRIPTION = "Prismstumbler wireless LAN scanner"
LICENSE = "GPL"
DEPENDS = "libpcap gtk+ wireless-tools sqlite zlib libxpm"
diff --git a/packages/psmisc/psmisc.inc b/packages/psmisc/psmisc.inc
index 0d8faf1ed6..c67705e67b 100644
--- a/packages/psmisc/psmisc.inc
+++ b/packages/psmisc/psmisc.inc
@@ -12,7 +12,7 @@ inherit autotools gettext
ALLOW_EMPTY = "1"
-PACKAGES = "${PN} fuser fuser-doc \
+PACKAGES = "${PN}-dbg ${PN} fuser fuser-doc \
killall killall-doc \
pstree pstree-doc"
diff --git a/packages/psmisc/psmisc_20.2.bb b/packages/psmisc/psmisc_20.2.bb
index a6140e7414..68f11dce13 100644
--- a/packages/psmisc/psmisc_20.2.bb
+++ b/packages/psmisc/psmisc_20.2.bb
@@ -13,7 +13,7 @@ inherit autotools gettext
ALLOW_EMPTY = "1"
-PACKAGES = "${PN} fuser fuser-doc \
+PACKAGES = "${PN}-dbg ${PN} fuser fuser-doc \
killall killall-doc \
pstree pstree-doc"
diff --git a/packages/psplash/files/psplash-init b/packages/psplash/files/psplash-init
index 5587346cb1..7f7eb36fbe 100644
--- a/packages/psplash/files/psplash-init
+++ b/packages/psplash/files/psplash-init
@@ -9,10 +9,14 @@ for x in $(cat /proc/cmdline); do
esac
done
+. /etc/init.d/functions
+
psplash_args=''
-case "`grep ^Hardware /proc/cpuinfo|cut -d: -f2 |tr A-Z a-z`" in
- "hp ipaq h3100"|"hp ipaq h3800") pspash_args='-a 90' ;;
- "hp ipaq 3600"|"hp ipaq 3700"|"hp ipaq h3900"|"htc universal"|*collie|*poodle|*akita|*spitz|*borzoi) psplash_args='-a 270' ;;
+case `machine_id` in
+ "hp_ipaq_h3100"|"hp_ipaq_h3800")
+ pspash_args='-a 90' ;;
+ "hp_ipaq_3600"|"hp_ipaq_3700"|"hp_ipaq_h3900"|"htc_universal"|*collie|*poodle|*akita|*spitz|*borzoi)
+ psplash_args='-a 270' ;;
esac
export TMPDIR=/mnt/.psplash
@@ -20,4 +24,5 @@ mount tmpfs -t tmpfs $TMPDIR -o,size=40k
/usr/bin/psplash $psplash_args &
+# Timetrap against hanging with splash hiding console messages.
(sleep 120; psplash-write "QUIT") &
diff --git a/packages/psplash/psplash_svn.bb b/packages/psplash/psplash_svn.bb
index cf6e228d92..17b459a15f 100644
--- a/packages/psplash/psplash_svn.bb
+++ b/packages/psplash/psplash_svn.bb
@@ -3,7 +3,8 @@ HOMEPAGE = "http://projects.o-hand.com/psplash"
SECTION = "base"
LICENSE = "GPL"
PV = "0.0+svnr${SRCREV}"
-PR = "r11"
+PR = "r12"
+RDEPENDS = "initscripts"
# You can create your own pslash-hand-img.h by doing
# ./make-image-header.sh <file>.png HAND
diff --git a/packages/pulseaudio/pulse.inc b/packages/pulseaudio/pulse.inc
index 08b0b5cd14..b6b622d9c6 100644
--- a/packages/pulseaudio/pulse.inc
+++ b/packages/pulseaudio/pulse.inc
@@ -3,7 +3,7 @@ HOMEPAGE = "http://www.pulseaudio.org"
AUTHOR = "Lennart Poettering"
SECTION = "libs/multimedia"
LICENSE = "LGPL"
-DEPENDS = "libatomics-ops liboil avahi libsamplerate0 libsndfile1 libtool"
+DEPENDS = "libatomics-ops liboil avahi libsamplerate0 libsndfile1 libtool hal"
# optional
DEPENDS += "alsa-lib glib-2.0"
@@ -20,6 +20,7 @@ EXTRA_OECONF = "\
--with-glib \
--with-alsa \
--with-oss \
+ --with-hal \
"
PARALLEL_MAKE = ""
diff --git a/packages/pulseaudio/pulseaudio_0.9.6.bb b/packages/pulseaudio/pulseaudio_0.9.6.bb
index a93c8ee251..aa07afe6fe 100644
--- a/packages/pulseaudio/pulseaudio_0.9.6.bb
+++ b/packages/pulseaudio/pulseaudio_0.9.6.bb
@@ -1,4 +1,4 @@
require pulse.inc
-PR = "r5"
+PR = "r6"
diff --git a/packages/pulseaudio/pulseaudio_0.9.8.bb b/packages/pulseaudio/pulseaudio_0.9.8.bb
deleted file mode 100644
index 93c8ffb849..0000000000
--- a/packages/pulseaudio/pulseaudio_0.9.8.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-require pulse.inc
-
-DEPENDS += "dbus"
-
-# this is not correct (see below)
-SRC_URI += "\
- file://disable-using-glibc-tls.patch;patch=1 \
- file://fix-dbus-without-hal.patch;patch=1 \
-"
-
-PR = "r0"
-
-# problems w/ pulseaudio 0.9.8 atm:
-# 1.) needs libltdl >= 1.5.24 (yes, any older version will NOT work at runtime)
-# 2.) doesn't build w/ glibc TLS support (hence patched out)
-DEFAULT_PREFERENCE = "-1"
-
diff --git a/packages/pulseaudio/pulseaudio_0.9.9.bb b/packages/pulseaudio/pulseaudio_0.9.9.bb
new file mode 100644
index 0000000000..f52ca6e1c6
--- /dev/null
+++ b/packages/pulseaudio/pulseaudio_0.9.9.bb
@@ -0,0 +1,18 @@
+require pulse.inc
+
+DEPENDS += "dbus"
+
+# this is not correct (see below)
+SRC_URI += "\
+ file://disable-using-glibc-tls.patch;patch=1 \
+ file://fix-dbus-without-hal.patch;patch=1 \
+"
+
+PR = "r0"
+
+# problems w/ pulseaudio 0.9.9 atm:
+# 1.) needs libltdl >= 1.5.24 (yes, any older version will NOT work at runtime)
+# 2.) doesn't build w/ glibc TLS support (hence patched out)
+# 3.) hangs, if used with gst-pulse 0.9.7
+DEFAULT_PREFERENCE = "-1"
+
diff --git a/packages/pwsafe/.mtn2git_empty b/packages/pwsafe/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/pwsafe/.mtn2git_empty
diff --git a/packages/pwsafe/pwsafe_0.2.0.bb b/packages/pwsafe/pwsafe_0.2.0.bb
new file mode 100644
index 0000000000..1d06326037
--- /dev/null
+++ b/packages/pwsafe/pwsafe_0.2.0.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "pwsafe is a unix commandline program that manages encrypted password databases."
+AUTHOR = "Nicolas S. Dade <ndade@nsd.dyndns.org>"
+HOMEPAGE = "http://pwsafe.sf.net"
+# SECTION
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+DEPENDS = "openssl readline"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz"
+
+inherit autotools
+
+# zecke-workaround ;-) Thanks. Should contact upstream to fix their stuff
+EXTRA_OECONF = " --with-openssl-dir=/bla/bla"
+
+do_configure_prepend() {
+ rm ${S}/configure
+}
diff --git a/packages/python/python-2.5-manifest.inc b/packages/python/python-2.5-manifest.inc
index f899eb2fea..edf5c7697f 100644
--- a/packages/python/python-2.5-manifest.inc
+++ b/packages/python/python-2.5-manifest.inc
@@ -1,5 +1,5 @@
########################################################################################################################
-### AUTO-GENERATED by 'contrib/python/generate-manifest-2.5.py' [(C) 2002-2007 Michael 'Mickey' Lauer <mlauer@vanille-media.de>] on Fri Dec 7 11:51:27 2007
+### AUTO-GENERATED by 'contrib/python/generate-manifest-2.5.py' [(C) 2002-2008 Michael 'Mickey' Lauer <mlauer@vanille-media.de>] on Tue Jan 22 04:03:18 2008
###
### Visit THE Python for Embedded Systems Site => http://www.Vanille.de/projects/python.spy
###
@@ -13,287 +13,287 @@ PROVIDES+="python-profile python-threading python-distutils python-textutils pyt
PACKAGES="python-profile python-threading python-distutils python-textutils python-codecs python-ctypes python-pickle python-datetime python-core python-io python-compiler python-compression python-re python-xmlrpc python-terminal python-email python-image python-core-dbg python-resource python-devel python-math python-hotshot python-unixadmin python-syslog python-tkinter python-gdbm python-fcntl python-netclient python-pprint python-netserver python-curses python-smtpd python-html python-readline python-subprocess python-pydoc python-logging python-mailbox python-xml python-mime python-sqlite3 python-tests python-unittest python-stringold python-robotparser python-lib-old-and-deprecated python-compile python-debugger python-shell python-bsddb python-mmap python-zlib python-db python-crypt python-idle python-lang python-audio "
DESCRIPTION_python-profile="Python Basic Profiling Support"
-PR_python-profile="ml5"
+PR_python-profile="ml7"
RDEPENDS_python-profile="python-core"
FILES_python-profile="${libdir}/python2.5/profile.* ${libdir}/python2.5/pstats.* "
DESCRIPTION_python-threading="Python Threading & Synchronization Support"
-PR_python-threading="ml5"
+PR_python-threading="ml7"
RDEPENDS_python-threading="python-core python-lang"
FILES_python-threading="${libdir}/python2.5/_threading_local.* ${libdir}/python2.5/dummy_thread.* ${libdir}/python2.5/dummy_threading.* ${libdir}/python2.5/mutex.* ${libdir}/python2.5/threading.* ${libdir}/python2.5/Queue.* "
DESCRIPTION_python-distutils="Python Distribution Utilities"
-PR_python-distutils="ml5"
+PR_python-distutils="ml7"
RDEPENDS_python-distutils="python-core"
FILES_python-distutils="${libdir}/python2.5/config ${libdir}/python2.5/distutils "
DESCRIPTION_python-textutils="Python Option Parsing, Text Wrapping and Comma-Separated-Value Support"
-PR_python-textutils="ml5"
+PR_python-textutils="ml7"
RDEPENDS_python-textutils="python-core python-io python-re python-stringold"
FILES_python-textutils="${libdir}/python2.5/lib-dynload/_csv.so ${libdir}/python2.5/csv.* ${libdir}/python2.5/optparse.* ${libdir}/python2.5/textwrap.* "
DESCRIPTION_python-codecs="Python Codecs, Encodings & i18n Support"
-PR_python-codecs="ml5"
+PR_python-codecs="ml7"
RDEPENDS_python-codecs="python-core python-lang"
FILES_python-codecs="${libdir}/python2.5/codecs.* ${libdir}/python2.5/encodings ${libdir}/python2.5/gettext.* ${libdir}/python2.5/locale.* ${libdir}/python2.5/lib-dynload/_locale.so ${libdir}/python2.5/lib-dynload/unicodedata.so ${libdir}/python2.5/stringprep.* ${libdir}/python2.5/xdrlib.* "
DESCRIPTION_python-ctypes="Python C Types Support"
-PR_python-ctypes="ml5"
+PR_python-ctypes="ml7"
RDEPENDS_python-ctypes="python-core"
FILES_python-ctypes="${libdir}/python2.5/ctypes ${libdir}/python2.5/lib-dynload/_ctypes.so "
DESCRIPTION_python-pickle="Python Persistence Support"
-PR_python-pickle="ml5"
+PR_python-pickle="ml7"
RDEPENDS_python-pickle="python-core python-codecs python-io python-re"
FILES_python-pickle="${libdir}/python2.5/pickle.* ${libdir}/python2.5/shelve.* ${libdir}/python2.5/lib-dynload/cPickle.so "
DESCRIPTION_python-datetime="Python Calendar and Time support"
-PR_python-datetime="ml5"
+PR_python-datetime="ml7"
RDEPENDS_python-datetime="python-core python-codecs"
FILES_python-datetime="${libdir}/python2.5/_strptime.* ${libdir}/python2.5/calendar.* ${libdir}/python2.5/lib-dynload/datetime.so "
DESCRIPTION_python-core="Python Interpreter and core modules (needed!)"
-PR_python-core="ml5"
+PR_python-core="ml7"
RDEPENDS_python-core=""
FILES_python-core="${libdir}/python2.5/__future__.* ${libdir}/python2.5/copy.* ${libdir}/python2.5/copy_reg.* ${libdir}/python2.5/ConfigParser.* ${libdir}/python2.5/getopt.* ${libdir}/python2.5/linecache.* ${libdir}/python2.5/new.* ${libdir}/python2.5/os.* ${libdir}/python2.5/posixpath.* ${libdir}/python2.5/struct.* ${libdir}/python2.5/warnings.* ${libdir}/python2.5/site.* ${libdir}/python2.5/stat.* ${libdir}/python2.5/UserDict.* ${libdir}/python2.5/UserList.* ${libdir}/python2.5/UserString.* ${libdir}/python2.5/lib-dynload/binascii.so ${libdir}/python2.5/lib-dynload/_struct.so ${libdir}/python2.5/lib-dynload/time.so ${libdir}/python2.5/lib-dynload/xreadlines.so ${libdir}/python2.5/types.* ${bindir}/python* "
DESCRIPTION_python-io="Python Low-Level I/O"
-PR_python-io="ml5"
+PR_python-io="ml7"
RDEPENDS_python-io="python-core python-math"
FILES_python-io="${libdir}/python2.5/lib-dynload/_socket.so ${libdir}/python2.5/lib-dynload/_ssl.so ${libdir}/python2.5/lib-dynload/select.so ${libdir}/python2.5/lib-dynload/termios.so ${libdir}/python2.5/lib-dynload/cStringIO.so ${libdir}/python2.5/pipes.* ${libdir}/python2.5/socket.* ${libdir}/python2.5/tempfile.* ${libdir}/python2.5/StringIO.* "
DESCRIPTION_python-compiler="Python Compiler Support"
-PR_python-compiler="ml5"
+PR_python-compiler="ml7"
RDEPENDS_python-compiler="python-core"
FILES_python-compiler="${libdir}/python2.5/compiler "
DESCRIPTION_python-compression="Python High Level Compression Support"
-PR_python-compression="ml5"
+PR_python-compression="ml7"
RDEPENDS_python-compression="python-core python-zlib"
FILES_python-compression="${libdir}/python2.5/gzip.* ${libdir}/python2.5/zipfile.* "
DESCRIPTION_python-re="Python Regular Expression APIs"
-PR_python-re="ml5"
+PR_python-re="ml7"
RDEPENDS_python-re="python-core"
FILES_python-re="${libdir}/python2.5/re.* ${libdir}/python2.5/sre.* ${libdir}/python2.5/sre_compile.* ${libdir}/python2.5/sre_constants* ${libdir}/python2.5/sre_parse.* "
DESCRIPTION_python-xmlrpc="Python XMLRPC Support"
-PR_python-xmlrpc="ml5"
+PR_python-xmlrpc="ml7"
RDEPENDS_python-xmlrpc="python-core python-xml python-netserver python-lang"
FILES_python-xmlrpc="${libdir}/python2.5/xmlrpclib.* ${libdir}/python2.5/SimpleXMLRPCServer.* "
DESCRIPTION_python-terminal="Python Terminal Controlling Support"
-PR_python-terminal="ml5"
+PR_python-terminal="ml7"
RDEPENDS_python-terminal="python-core python-io"
FILES_python-terminal="${libdir}/python2.5/pty.* ${libdir}/python2.5/tty.* "
DESCRIPTION_python-email="Python Email Support"
-PR_python-email="ml5"
+PR_python-email="ml7"
RDEPENDS_python-email="python-core python-io python-re python-mime python-audio python-image"
FILES_python-email="${libdir}/python2.5/email "
DESCRIPTION_python-image="Python Graphical Image Handling"
-PR_python-image="ml5"
+PR_python-image="ml7"
RDEPENDS_python-image="python-core"
FILES_python-image="${libdir}/python2.5/colorsys.* ${libdir}/python2.5/imghdr.* ${libdir}/python2.5/lib-dynload/imageop.so ${libdir}/python2.5/lib-dynload/rgbimg.so "
DESCRIPTION_python-core-dbg="Python core module debug information"
-PR_python-core-dbg="ml5"
+PR_python-core-dbg="ml7"
RDEPENDS_python-core-dbg="python-core"
FILES_python-core-dbg="${libdir}/python2.5/lib-dynload/.debug ${bindir}/.debug ${libdir}/.debug "
DESCRIPTION_python-resource="Python Resource Control Interface"
-PR_python-resource="ml5"
+PR_python-resource="ml7"
RDEPENDS_python-resource="python-core"
FILES_python-resource="${libdir}/python2.5/lib-dynload/resource.so "
DESCRIPTION_python-devel="Python Development Package"
-PR_python-devel="ml5"
+PR_python-devel="ml7"
RDEPENDS_python-devel="python-core"
FILES_python-devel="${includedir} ${libdir}/python2.5/config "
DESCRIPTION_python-math="Python Math Support"
-PR_python-math="ml5"
+PR_python-math="ml7"
RDEPENDS_python-math="python-core"
FILES_python-math="${libdir}/python2.5/lib-dynload/cmath.so ${libdir}/python2.5/lib-dynload/math.so ${libdir}/python2.5/lib-dynload/_random.so ${libdir}/python2.5/random.* ${libdir}/python2.5/sets.* "
DESCRIPTION_python-hotshot="Python Hotshot Profiler"
-PR_python-hotshot="ml5"
+PR_python-hotshot="ml7"
RDEPENDS_python-hotshot="python-core"
FILES_python-hotshot="${libdir}/python2.5/hotshot ${libdir}/python2.5/lib-dynload/_hotshot.so "
DESCRIPTION_python-unixadmin="Python Unix Administration Support"
-PR_python-unixadmin="ml5"
+PR_python-unixadmin="ml7"
RDEPENDS_python-unixadmin="python-core"
FILES_python-unixadmin="${libdir}/python2.5/lib-dynload/nis.so ${libdir}/python2.5/lib-dynload/grp.so ${libdir}/python2.5/lib-dynload/pwd.so ${libdir}/python2.5/getpass.* "
DESCRIPTION_python-syslog="Python's syslog Interface"
-PR_python-syslog="ml5"
+PR_python-syslog="ml7"
RDEPENDS_python-syslog="python-core"
FILES_python-syslog="${libdir}/python2.5/lib-dynload/syslog.so "
DESCRIPTION_python-tkinter="Python Tcl/Tk Bindings"
-PR_python-tkinter="ml5"
+PR_python-tkinter="ml7"
RDEPENDS_python-tkinter="python-core"
FILES_python-tkinter="${libdir}/python2.5/lib-dynload/_tkinter.so ${libdir}/python2.5/lib-tk "
DESCRIPTION_python-gdbm="Python GNU Database Support"
-PR_python-gdbm="ml5"
+PR_python-gdbm="ml7"
RDEPENDS_python-gdbm="python-core"
FILES_python-gdbm="${libdir}/python2.5/lib-dynload/gdbm.so "
DESCRIPTION_python-fcntl="Python's fcntl Interface"
-PR_python-fcntl="ml5"
+PR_python-fcntl="ml7"
RDEPENDS_python-fcntl="python-core"
FILES_python-fcntl="${libdir}/python2.5/lib-dynload/fcntl.so "
DESCRIPTION_python-netclient="Python Internet Protocol Clients"
-PR_python-netclient="ml5"
+PR_python-netclient="ml7"
RDEPENDS_python-netclient="python-core python-crypt python-datetime python-io python-lang python-logging python-mime"
FILES_python-netclient="${libdir}/python2.5/*Cookie*.* ${libdir}/python2.5/base64.* ${libdir}/python2.5/cookielib.* ${libdir}/python2.5/ftplib.* ${libdir}/python2.5/gopherlib.* ${libdir}/python2.5/hmac.* ${libdir}/python2.5/httplib.* ${libdir}/python2.5/mimetypes.* ${libdir}/python2.5/nntplib.* ${libdir}/python2.5/poplib.* ${libdir}/python2.5/smtplib.* ${libdir}/python2.5/telnetlib.* ${libdir}/python2.5/urllib.* ${libdir}/python2.5/urllib2.* ${libdir}/python2.5/urlparse.* "
DESCRIPTION_python-pprint="Python Pretty-Print Support"
-PR_python-pprint="ml5"
+PR_python-pprint="ml7"
RDEPENDS_python-pprint="python-core"
FILES_python-pprint="${libdir}/python2.5/pprint.* "
DESCRIPTION_python-netserver="Python Internet Protocol Servers"
-PR_python-netserver="ml5"
+PR_python-netserver="ml7"
RDEPENDS_python-netserver="python-core python-netclient"
FILES_python-netserver="${libdir}/python2.5/cgi.* ${libdir}/python2.5/BaseHTTPServer.* ${libdir}/python2.5/SimpleHTTPServer.* ${libdir}/python2.5/SocketServer.* "
DESCRIPTION_python-curses="Python Curses Support"
-PR_python-curses="ml5"
+PR_python-curses="ml7"
RDEPENDS_python-curses="python-core"
FILES_python-curses="${libdir}/python2.5/curses ${libdir}/python2.5/lib-dynload/_curses.so ${libdir}/python2.5/lib-dynload/_curses_panel.so "
DESCRIPTION_python-smtpd="Python Simple Mail Transport Daemon"
-PR_python-smtpd="ml5"
+PR_python-smtpd="ml7"
RDEPENDS_python-smtpd="python-core python-netserver python-email python-mime"
FILES_python-smtpd="${bindir}/smtpd.* "
DESCRIPTION_python-html="Python HTML Processing"
-PR_python-html="ml5"
+PR_python-html="ml7"
RDEPENDS_python-html="python-core"
FILES_python-html="${libdir}/python2.5/formatter.* ${libdir}/python2.5/htmlentitydefs.* ${libdir}/python2.5/htmllib.* ${libdir}/python2.5/markupbase.* ${libdir}/python2.5/sgmllib.* "
DESCRIPTION_python-readline="Python Readline Support"
-PR_python-readline="ml5"
+PR_python-readline="ml7"
RDEPENDS_python-readline="python-core"
FILES_python-readline="${libdir}/python2.5/lib-dynload/readline.so ${libdir}/python2.5/rlcompleter.* "
DESCRIPTION_python-subprocess="Python Subprocess Support"
-PR_python-subprocess="ml5"
+PR_python-subprocess="ml7"
RDEPENDS_python-subprocess="python-core python-io python-re python-fcntl python-pickle"
FILES_python-subprocess="${libdir}/python2.5/subprocess.* "
DESCRIPTION_python-pydoc="Python Interactive Help Support"
-PR_python-pydoc="ml5"
+PR_python-pydoc="ml7"
RDEPENDS_python-pydoc="python-core python-lang python-stringold python-re"
FILES_python-pydoc="${bindir}/pydoc ${libdir}/python2.5/pydoc.* "
DESCRIPTION_python-logging="Python Logging Support"
-PR_python-logging="ml5"
+PR_python-logging="ml7"
RDEPENDS_python-logging="python-core python-io python-lang python-stringold"
FILES_python-logging="${libdir}/python2.5/logging "
DESCRIPTION_python-mailbox="Python Mailbox Format Support"
-PR_python-mailbox="ml5"
+PR_python-mailbox="ml7"
RDEPENDS_python-mailbox="python-core python-mime"
FILES_python-mailbox="${libdir}/python2.5/mailbox.* "
DESCRIPTION_python-xml="Python basic XML support."
-PR_python-xml="ml5"
+PR_python-xml="ml7"
RDEPENDS_python-xml="python-core python-re python-netclient"
FILES_python-xml="${libdir}/python2.5/lib-dynload/pyexpat.so ${libdir}/python2.5/xml ${libdir}/python2.5/xmllib.* "
DESCRIPTION_python-mime="Python MIME Handling APIs"
-PR_python-mime="ml5"
+PR_python-mime="ml7"
RDEPENDS_python-mime="python-core python-io"
FILES_python-mime="${libdir}/python2.5/mimetools.* ${libdir}/python2.5/uu.* ${libdir}/python2.5/quopri.* ${libdir}/python2.5/rfc822.* "
DESCRIPTION_python-sqlite3="Python Sqlite3 Database Support"
-PR_python-sqlite3="ml5"
+PR_python-sqlite3="ml7"
RDEPENDS_python-sqlite3="python-core"
FILES_python-sqlite3="${libdir}/python2.5/sqlite3 "
DESCRIPTION_python-tests="Python Tests"
-PR_python-tests="ml5"
+PR_python-tests="ml7"
RDEPENDS_python-tests="python-core"
FILES_python-tests="${libdir}/python2.5/test "
DESCRIPTION_python-unittest="Python Unit Testing Framework"
-PR_python-unittest="ml5"
+PR_python-unittest="ml7"
RDEPENDS_python-unittest="python-core python-stringold python-lang"
FILES_python-unittest="${libdir}/python2.5/unittest.* "
DESCRIPTION_python-stringold="Python String APIs [deprecated]"
-PR_python-stringold="ml5"
+PR_python-stringold="ml7"
RDEPENDS_python-stringold="python-core python-re"
FILES_python-stringold="${libdir}/python2.5/lib-dynload/strop.so ${libdir}/python2.5/string.* "
DESCRIPTION_python-robotparser="Python robots.txt parser"
-PR_python-robotparser="ml5"
+PR_python-robotparser="ml7"
RDEPENDS_python-robotparser="python-core python-netclient"
FILES_python-robotparser="${libdir}/python2.5/robotparser.* "
DESCRIPTION_python-lib-old-and-deprecated="Python Deprecated Libraries"
-PR_python-lib-old-and-deprecated="ml5"
+PR_python-lib-old-and-deprecated="ml7"
RDEPENDS_python-lib-old-and-deprecated="python-core"
FILES_python-lib-old-and-deprecated="${libdir}/python2.5/lib-old "
DESCRIPTION_python-compile="Python Bytecode Compilation Support"
-PR_python-compile="ml5"
+PR_python-compile="ml7"
RDEPENDS_python-compile="python-core"
FILES_python-compile="${libdir}/python2.5/py_compile.* ${libdir}/python2.5/compileall.* "
DESCRIPTION_python-debugger="Python Debugger"
-PR_python-debugger="ml5"
+PR_python-debugger="ml7"
RDEPENDS_python-debugger="python-core python-io python-lang python-re python-stringold python-shell"
FILES_python-debugger="${libdir}/python2.5/bdb.* ${libdir}/python2.5/pdb.* "
DESCRIPTION_python-shell="Python Shell-Like Functionality"
-PR_python-shell="ml5"
+PR_python-shell="ml7"
RDEPENDS_python-shell="python-core python-re"
FILES_python-shell="${libdir}/python2.5/cmd.* ${libdir}/python2.5/commands.* ${libdir}/python2.5/dircache.* ${libdir}/python2.5/fnmatch.* ${libdir}/python2.5/glob.* ${libdir}/python2.5/popen2.* ${libdir}/python2.5/shutil.* "
DESCRIPTION_python-bsddb="Python Berkeley Database Bindings"
-PR_python-bsddb="ml5"
+PR_python-bsddb="ml7"
RDEPENDS_python-bsddb="python-core"
FILES_python-bsddb="${libdir}/python2.5/bsddb "
DESCRIPTION_python-mmap="Python Memory-Mapped-File Support"
-PR_python-mmap="ml5"
+PR_python-mmap="ml7"
RDEPENDS_python-mmap="python-core python-io"
FILES_python-mmap="${libdir}/python2.5/lib-dynload/mmap.so "
DESCRIPTION_python-zlib="Python zlib Support."
-PR_python-zlib="ml5"
+PR_python-zlib="ml7"
RDEPENDS_python-zlib="python-core"
FILES_python-zlib="${libdir}/python2.5/lib-dynload/zlib.so "
DESCRIPTION_python-db="Python File-Based Database Support"
-PR_python-db="ml5"
+PR_python-db="ml7"
RDEPENDS_python-db="python-core"
FILES_python-db="${libdir}/python2.5/anydbm.* ${libdir}/python2.5/dumbdbm.* ${libdir}/python2.5/whichdb.* "
DESCRIPTION_python-crypt="Python Basic Cryptographic and Hashing Support"
-PR_python-crypt="ml5"
+PR_python-crypt="ml7"
RDEPENDS_python-crypt="python-core"
FILES_python-crypt="${libdir}/python2.5/hashlib.* ${libdir}/python2.5/md5.* ${libdir}/python2.5/sha.* ${libdir}/python2.5/lib-dynload/crypt.so ${libdir}/python2.5/lib-dynload/_hashlib.so ${libdir}/python2.5/lib-dynload/_sha256.so ${libdir}/python2.5/lib-dynload/_sha512.so "
DESCRIPTION_python-idle="Python Integrated Development Environment"
-PR_python-idle="ml5"
+PR_python-idle="ml7"
RDEPENDS_python-idle="python-core python-tkinter"
FILES_python-idle="${bindir}/idle ${libdir}/python2.5/idlelib "
DESCRIPTION_python-lang="Python Low-Level Language Support"
-PR_python-lang="ml5"
+PR_python-lang="ml7"
RDEPENDS_python-lang="python-core"
FILES_python-lang="${libdir}/python2.5/lib-dynload/array.so ${libdir}/python2.5/lib-dynload/parser.so ${libdir}/python2.5/lib-dynload/operator.so ${libdir}/python2.5/lib-dynload/_weakref.so ${libdir}/python2.5/lib-dynload/itertools.so ${libdir}/python2.5/lib-dynload/collections.so ${libdir}/python2.5/lib-dynload/_bisect.so ${libdir}/python2.5/lib-dynload/_heapq.so ${libdir}/python2.5/atexit.* ${libdir}/python2.5/bisect.* ${libdir}/python2.5/code.* ${libdir}/python2.5/codeop.* ${libdir}/python2.5/dis.* ${libdir}/python2.5/heapq.* ${libdir}/python2.5/inspect.* ${libdir}/python2.5/keyword.* ${libdir}/python2.5/opcode.* ${libdir}/python2.5/repr.* ${libdir}/python2.5/token.* ${libdir}/python2.5/tokenize.* ${libdir}/python2.5/traceback.* ${libdir}/python2.5/linecache.* ${libdir}/python2.5/weakref.* "
DESCRIPTION_python-audio="Python Audio Handling"
-PR_python-audio="ml5"
+PR_python-audio="ml7"
RDEPENDS_python-audio="python-core"
FILES_python-audio="${libdir}/python2.5/wave.* ${libdir}/python2.5/chunk.* ${libdir}/python2.5/sndhdr.* ${libdir}/python2.5/lib-dynload/ossaudiodev.so ${libdir}/python2.5/lib-dynload/audioop.so "
diff --git a/packages/python/python-2.5.1/sitecustomize.py b/packages/python/python-2.5.1/sitecustomize.py
new file mode 100644
index 0000000000..b5e78d3200
--- /dev/null
+++ b/packages/python/python-2.5.1/sitecustomize.py
@@ -0,0 +1,45 @@
+# OpenEmbedded sitecustomize.py (C) 2002-2008 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
+# GPLv2 or later
+# Version: 20082201
+# Features:
+# * set proper default encoding
+# * enable readline completion in the interactive interpreter
+# * load command line history on startup
+# * save command line history on exit
+
+HISTORY_FILENAME = "/tmp/python-history-file.txt"
+
+def __exithandler():
+ try:
+ readline.write_history_file( HISTORY_FILENAME )
+ except IOError:
+ pass
+
+def __registerExitHandler():
+ import atexit
+ atexit.register( __exithandler )
+
+def __enableReadlineSupport():
+ readline.parse_and_bind("tab: complete")
+ try:
+ readline.read_history_file( "/tmp/python-history-file.txt" )
+ except IOError:
+ pass
+
+def __enableDefaultEncoding():
+ import sys
+ try:
+ sys.setdefaultencoding('utf8')
+ except LookupError:
+ pass
+
+import sys
+try:
+ import rlcompleter, readline
+except ImportError:
+ sys.stderr.write( "Python %s (OpenEmbedded build) sitecustomize.py not active. Please install python-readline.\n" % sys.version.split()[0] )
+else:
+ __enableDefaultEncoding()
+ __registerExitHandler()
+ __enableReadlineSupport()
+ sys.stderr.write( "Python %s (OpenEmbedded build) sitecustomize.py active.\n" % sys.version.split()[0] )
diff --git a/packages/python/python-dbus_0.81.1.bb b/packages/python/python-dbus_0.81.1.bb
index ad3b1c177b..86628bad26 100644
--- a/packages/python/python-dbus_0.81.1.bb
+++ b/packages/python/python-dbus_0.81.1.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
LICENSE = "GPL"
DEPENDS = "expat glib-2.0 virtual/libintl python-pyrex-native python"
RDEPENDS = "dbus python-threading python-io python-stringold python-logging"
-PR = "ml1"
+PR = "ml2"
SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz \
file://allow-older-autotools.patch;patch=1 \
@@ -16,3 +16,7 @@ inherit distutils-base autotools
EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../"
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/python/python-ecore_cvs.bb b/packages/python/python-ecore_cvs.bb
index 8f4db6382e..0ec598f5a0 100644
--- a/packages/python/python-ecore_cvs.bb
+++ b/packages/python/python-ecore_cvs.bb
@@ -1,7 +1,6 @@
require python-efl.inc
DEPENDS += "ecore"
-
-PR = "r2"
+PR = "r5"
do_stage() {
distutils_stage_all
diff --git a/packages/python/python-edbus_cvs.bb b/packages/python/python-edbus_cvs.bb
new file mode 100644
index 0000000000..06a5a45c06
--- /dev/null
+++ b/packages/python/python-edbus_cvs.bb
@@ -0,0 +1,8 @@
+require python-efl.inc
+DEPENDS += "edbus dbus"
+
+PR = "r2"
+
+SRC_URI = "${E_CVS};module=e17/proto/python-efl/python-e_dbus"
+S = "${WORKDIR}/python-e_dbus"
+
diff --git a/packages/python/python-edje_cvs.bb b/packages/python/python-edje_cvs.bb
index dfd9722f32..1205e7ec84 100644
--- a/packages/python/python-edje_cvs.bb
+++ b/packages/python/python-edje_cvs.bb
@@ -1,5 +1,4 @@
require python-efl.inc
DEPENDS += "edje python-evas"
-
-PR = "r1"
+PR = "r5"
diff --git a/packages/python/python-efl-examples.bb b/packages/python/python-efl-examples.bb
new file mode 100644
index 0000000000..0a4e32097f
--- /dev/null
+++ b/packages/python/python-efl-examples.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "Python Examples for the Enlightenment Foundation Libraries"
+LICENSE = "MIT"
+SECTION = "devel/python"
+RDEPENDS = "\
+ python-efl python-ecore-examples python-emotion-examples python-edje-examples python-epsilon-examples \
+ python-math python-textutils \
+"
+PR = "ml2"
+
+ALLOW_EMPTY = "1"
diff --git a/packages/python/python-efl.bb b/packages/python/python-efl.bb
index c667ceff11..1c7f23a1eb 100644
--- a/packages/python/python-efl.bb
+++ b/packages/python/python-efl.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Python Bindings to the Enlightenment Foundation Libraries"
LICENSE = "MIT"
SECTION = "devel/python"
-DEPENDS = "python-evas python-ecore python-emotion python-edje python-epsilon"
+RDEPENDS = "python-evas python-ecore python-emotion python-edje python-epsilon python-edbus"
+PR = "ml2"
ALLOW_EMPTY = "1"
-
diff --git a/packages/python/python-efl.inc b/packages/python/python-efl.inc
index 727c718bd2..e6cc62df5e 100644
--- a/packages/python/python-efl.inc
+++ b/packages/python/python-efl.inc
@@ -5,6 +5,7 @@ HOMEPAGE = "http://www.enlightenment.org"
# somewhere is a bug. cython should be self-contained, but somehow this
# does not compile unless pyrex has been built
DEPENDS = "python-cython-native python-pyrex-native python-numeric"
+RDEPENDS += "python-lang"
PV = "0.1.1+cvs${SRCDATE}"
inherit setuptools
@@ -12,5 +13,25 @@ inherit setuptools
SRC_URI = "${E_CVS};module=e17/proto/python-efl/${PN}"
S = "${WORKDIR}/${PN}"
+do_install_append() {
+ if [ -e examples ]; then
+ for i in `find examples -name "*.edc"`; do
+ pushd `dirname $i`
+ echo "Generating .edj file for $i..."
+ edje_cc `basename $i`
+ echo "Removing sources in this directory..."
+ rm -f *.edc *.png *.ttf *.jpeg
+ popd
+ done
+ install -d ${D}${datadir}/${PN}/
+ cp -a examples ${D}${datadir}/${PN}/
+ find ${D}${datadir}/${PN}/examples -name "CVS" | xargs rm -rf
+ find ${D}${datadir}/${PN}/examples -name ".cvsignore" | xargs rm -f
+ fi
+}
+
FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/*.egg/*/*/.debug"
+PACKAGES += "${PN}-examples"
+FILES_${PN}-examples = "${datadir}/${PN}/examples"
+
diff --git a/packages/python/python-emotion_cvs.bb b/packages/python/python-emotion_cvs.bb
index 79c7f9633b..d3f5109d86 100644
--- a/packages/python/python-emotion_cvs.bb
+++ b/packages/python/python-emotion_cvs.bb
@@ -1,4 +1,3 @@
require python-efl.inc
DEPENDS += "emotion python-evas"
-
-PR = "r1"
+PR = "r4"
diff --git a/packages/python/python-epsilon_cvs.bb b/packages/python/python-epsilon_cvs.bb
index 81ebfcb0c7..204dd95610 100644
--- a/packages/python/python-epsilon_cvs.bb
+++ b/packages/python/python-epsilon_cvs.bb
@@ -1,4 +1,3 @@
require python-efl.inc
DEPENDS += "epsilon python-ecore"
-
-PR = "r0"
+PR = "r4"
diff --git a/packages/python/python-evas_cvs.bb b/packages/python/python-evas_cvs.bb
index ff14d95667..e0de4569bd 100644
--- a/packages/python/python-evas_cvs.bb
+++ b/packages/python/python-evas_cvs.bb
@@ -1,7 +1,6 @@
require python-efl.inc
DEPENDS += "evas"
-
-PR = "r2"
+PR = "r4"
do_stage() {
distutils_stage_all
diff --git a/packages/python/python-gammu_0.21.bb b/packages/python/python-gammu_0.24.bb
index f8989d9181..f8989d9181 100644
--- a/packages/python/python-gammu_0.21.bb
+++ b/packages/python/python-gammu_0.24.bb
diff --git a/packages/python/python-gsmd_svn.bb b/packages/python/python-gsmd_svn.bb
new file mode 100644
index 0000000000..14d3abd607
--- /dev/null
+++ b/packages/python/python-gsmd_svn.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Python bindings for the libgsmd"
+SRCNAME = "python-gsmd"
+AUTHOR = "Sudharshan S"
+SECTION = "devel/python"
+LICENSE = "LGPL"
+DEPENDS = "libgsmd"
+PV = "0.02+svnr${SRCREV}"
+PR = "r1"
+
+SRC_URI = "svn://svn.projects.openmoko.org/svnroot/python-openmoko;module=python-gsmd;proto=http"
+S = "${WORKDIR}/python-gsmd"
+
+SRCREV_pn-python-gsmd ?= "${AUTOREV}"
+
+inherit distutils
diff --git a/packages/python/python-pydirectfb/.mtn2git_empty b/packages/python/python-pydirectfb/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/python/python-pydirectfb/.mtn2git_empty
diff --git a/packages/python/python-pydirectfb/fix-directfb-detection.patch b/packages/python/python-pydirectfb/fix-directfb-detection.patch
new file mode 100644
index 0000000000..c8b7cc805a
--- /dev/null
+++ b/packages/python/python-pydirectfb/fix-directfb-detection.patch
@@ -0,0 +1,16 @@
+Index: pydirectfb/setup.py
+===================================================================
+--- pydirectfb.orig/setup.py
++++ pydirectfb/setup.py
+@@ -11,9 +11,10 @@
+ Check dependencies add add the flags to include_dirs, library_dirs and
+ libraries. The basic logic is taken from pygame.
+ """
+- command = name + '-config --version --cflags --libs 2>/dev/null'
++ command = 'pkg-config %s --modversion --cflags --libs 2>/dev/null' % name
+ try:
+ config = os.popen(command).readlines()
++ print config
+ if len(config) == 0:
+ raise ValueError, 'command not found'
+ flags = (' '.join(config[1:]) + ' ').split()
diff --git a/packages/python/python-pygtk_2.10.4.bb b/packages/python/python-pygtk_2.10.4.bb
index 9b4a034ffa..1af2093556 100644
--- a/packages/python/python-pygtk_2.10.4.bb
+++ b/packages/python/python-pygtk_2.10.4.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Python GTK+ 2.10.x Bindings"
SECTION = "devel/python"
# needs gtk+ 2.10.x
-DEPENDS = "gtk+ libglade python-pycairo"
+DEPENDS = "gtk+ libglade python-pycairo python-pygobject"
RDEPENDS = "python-shell python-pycairo python-pygobject"
PROVIDES = "python-pygtk2"
SRCNAME = "pygtk"
@@ -13,8 +13,10 @@ SRC_URI = "ftp://ftp.gnome.org/pub/gnome/sources/pygtk/2.10/${SRCNAME}-${PV}.tar
file://acinclude.m4"
S = "${WORKDIR}/${SRCNAME}-${PV}"
-EXTRA_OECONF = "--disable-docs"
-EXTRA_OECONF += "--with-python-includes=${STAGING_INCDIR}/../"
+EXTRA_OECONF = "\
+ --disable-docs \
+ --with-python-includes=${STAGING_INCDIR}/../ \
+"
inherit autotools pkgconfig distutils-base
diff --git a/packages/python/python-pyqt/assistantclient-fix.patch b/packages/python/python-pyqt/assistantclient-fix.patch
new file mode 100644
index 0000000000..eef0847c7c
--- /dev/null
+++ b/packages/python/python-pyqt/assistantclient-fix.patch
@@ -0,0 +1,13 @@
+Index: PyQt-x11-gpl-4.3.3/sip/QtAssistant/qassistantclient.sip
+===================================================================
+--- PyQt-x11-gpl-4.3.3.orig/sip/QtAssistant/qassistantclient.sip 2008-01-07 13:31:35.000000000 +0100
++++ PyQt-x11-gpl-4.3.3/sip/QtAssistant/qassistantclient.sip 2008-01-07 13:32:20.000000000 +0100
+@@ -26,7 +26,7 @@
+ {
+
+ %TypeHeaderCode
+-#include <qassistantclient.h>
++#include <QtAssistant/qassistantclient.h>
+ %End
+
+ %ConvertToSubClassCode
diff --git a/packages/python/python-pyqt_4.3.1.bb b/packages/python/python-pyqt_4.3.1.bb
deleted file mode 100644
index d9c45ec14c..0000000000
--- a/packages/python/python-pyqt_4.3.1.bb
+++ /dev/null
@@ -1,71 +0,0 @@
-DESCRIPTION = "Python Qt4 Bindings"
-HOMEPAGE = "http://riverbankcomputing.co.uk"
-AUTHOR = "Phil Thomson @ riverbank.co.uk"
-SECTION = "devel/python"
-PRIORITY = "optional"
-LICENSE = "GPL"
-RDEPENDS = "python-core"
-SRCNAME = "pyqt"
-PR = "ml0"
-
-SRC_URI = "\
- http://www.riverbankcomputing.com/Downloads/PyQt4/GPL/PyQt-x11-gpl-${PV}.tar.gz \
- file://cross-compile.patch;patch=1 \
- file://01_configure.dpatch;patch=1 \
- file://02_htmllinks.dpatch;patch=1 \
- file://03_qreal.dpatch;patch=1 \
- file://04_qreal_api_fixes.dpatch;patch=1"
-S = "${WORKDIR}/PyQt-x11-gpl-${PV}"
-
-inherit qt4x11 sip distutils-base
-
-PARALLEL_MAKE = ""
-
-QMAKE_PROFILES = "pyqt.pro"
-EXTRA_SIPTAGS = "-tWS_X11 -tQt_4_3_1 -xVendorID -xPyQt_SessionManager -xPyQt_Accessibility"
-EXTRA_OEMAKE = " MAKEFLAGS= "
-
-SIP_MODULES = "QtCore QtGui QtNetwork QtSql QtSvg QtXml"
-# SIP_MODULES += "QtAssistant"
-EXTRA_QMAKEVARS_POST += "INCLUDEPATH+=${OE_QMAKE_INCDIR_QT}/Qt \
- INCLUDEPATH+=${STAGING_INCDIR}/${PYTHON_DIR} \
- DEFINES+=QT_NO_FPU"
-
-FIX_QREAL = "\
- QtCore/qtimeline.sip \
- QtCore/qrect.sip \
- QtGui/qtransform.sip \
-"
-
-do_generate_prepend() {
- for i in ${FIX_QREAL}; do
- sed -i -e s,qreal,float,g sip/$i
- done
-}
-
-do_configure_prepend() {
- echo "TEMPLATE=subdirs\nSUBDIRS=${SIP_MODULES}\n" >pyqt.pro
-}
-
-do_stage() {
- install -d ${STAGING_SIPDIR}/qt/
- install -d ${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages
- for module in ${SIP_MODULES}
- do
- install -m 0644 ${S}/sip/${module}/*.sip ${STAGING_SIPDIR}/qt/
- install -m 0755 ${module}/lib${module}.so ${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/${module}.so
- done
-}
-
-do_install() {
- install -d ${D}${libdir}/${PYTHON_DIR}/site-packages/PyQt4
- for module in ${SIP_MODULES}
- do
- echo "from PyQt4.${module} import *\n" >> ${D}${libdir}/${PYTHON_DIR}/site-packages/PyQt4/Qt.py
- install -m 0755 ${module}/lib${module}.so ${D}${libdir}/${PYTHON_DIR}/site-packages/PyQt4/${module}.so
- done
- cp -pPR elementtree ${D}${libdir}/${PYTHON_DIR}/site-packages/PyQt4/
- cp __init__.py ${D}${libdir}/${PYTHON_DIR}/site-packages/PyQt4/
-}
-
-FILES_${PN} = "${libdir}/${PYTHON_DIR}/site-packages"
diff --git a/packages/python/python-pyqt_4.3.3.bb b/packages/python/python-pyqt_4.3.3.bb
new file mode 100644
index 0000000000..2fd6fcc38b
--- /dev/null
+++ b/packages/python/python-pyqt_4.3.3.bb
@@ -0,0 +1,72 @@
+DESCRIPTION = "Python Qt4 Bindings"
+HOMEPAGE = "http://riverbankcomputing.co.uk"
+AUTHOR = "Phil Thomson @ riverbank.co.uk"
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "GPL"
+RDEPENDS = "python-core"
+SRCNAME = "pyqt"
+PR = "ml1"
+
+SRC_URI = "\
+ http://www.riverbankcomputing.com/Downloads/PyQt4/GPL/PyQt-x11-gpl-${PV}.tar.gz \
+ file://cross-compile.patch;patch=1 \
+ file://01_configure.dpatch;patch=1 \
+ file://02_htmllinks.dpatch;patch=1 \
+ file://03_qreal.dpatch;patch=1 \
+ file://04_qreal_api_fixes.dpatch;patch=1 \
+ file://assistantclient-fix.patch;patch=1"
+S = "${WORKDIR}/PyQt-x11-gpl-${PV}"
+
+inherit qt4x11 sip distutils-base
+
+PARALLEL_MAKE = ""
+
+QMAKE_PROFILES = "pyqt.pro"
+# NOTE: match with qt version we have in OE
+EXTRA_SIPTAGS = "-tWS_X11 -tQt_4_3_3 -xVendorID -xPyQt_SessionManager -xPyQt_Accessibility"
+EXTRA_OEMAKE = " MAKEFLAGS= "
+
+SIP_MODULES = "QtCore QtGui QtNetwork QtSql QtSvg QtXml QtAssistant"
+EXTRA_QMAKEVARS_POST += "INCLUDEPATH+=${OE_QMAKE_INCDIR_QT}/Qt \
+ INCLUDEPATH+=${STAGING_INCDIR}/${PYTHON_DIR} \
+ DEFINES+=QT_NO_FPU"
+
+FIX_QREAL = "\
+ QtCore/qtimeline.sip \
+ QtCore/qrect.sip \
+ QtGui/qtransform.sip \
+"
+
+do_generate_prepend() {
+ for i in ${FIX_QREAL}; do
+ sed -i -e s,qreal,float,g sip/$i
+ done
+}
+
+do_configure_prepend() {
+ printf "TEMPLATE=subdirs\nSUBDIRS=${SIP_MODULES}\n" >pyqt.pro
+}
+
+do_stage() {
+ install -d ${STAGING_SIPDIR}/qt/
+ install -d ${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages
+ for module in ${SIP_MODULES}
+ do
+ install -m 0644 ${S}/sip/${module}/*.sip ${STAGING_SIPDIR}/qt/
+ install -m 0755 ${module}/lib${module}.so ${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/${module}.so
+ done
+}
+
+do_install() {
+ install -d ${D}${libdir}/${PYTHON_DIR}/site-packages/PyQt4
+ for module in ${SIP_MODULES}
+ do
+ echo "from PyQt4.${module} import *\n" >> ${D}${libdir}/${PYTHON_DIR}/site-packages/PyQt4/Qt.py
+ install -m 0755 ${module}/lib${module}.so ${D}${libdir}/${PYTHON_DIR}/site-packages/PyQt4/${module}.so
+ done
+ cp -pPR elementtree ${D}${libdir}/${PYTHON_DIR}/site-packages/PyQt4/
+ cp __init__.py ${D}${libdir}/${PYTHON_DIR}/site-packages/PyQt4/
+}
+
+FILES_${PN} = "${libdir}/${PYTHON_DIR}/site-packages"
diff --git a/packages/python/python-sip_4.7.1.bb b/packages/python/python-sip_4.7.3.bb
index fc87b01e53..fc87b01e53 100644
--- a/packages/python/python-sip_4.7.1.bb
+++ b/packages/python/python-sip_4.7.3.bb
diff --git a/packages/python/python24-pyqt2_3.13.bb b/packages/python/python24-pyqt2_3.13.bb
index 04493857dc..dc93d28a09 100644
--- a/packages/python/python24-pyqt2_3.13.bb
+++ b/packages/python/python24-pyqt2_3.13.bb
@@ -35,7 +35,7 @@ EXTRA_QMAKEVARS_POST += "QMAKE_UIC=${STAGING_BINDIR_NATIVE}/uic \
LIBS+=-L${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages"
do_configure_prepend() {
- echo -e "TEMPLATE=subdirs\nSUBDIRS=qt qtcanvas qttable qtpe\n" >pyqt.pro
+ printf "TEMPLATE=subdirs\nSUBDIRS=qt qtcanvas qttable qtpe\n" >pyqt.pro
}
do_stage() {
diff --git a/packages/python/python24-pyqwt2_3.10.bb b/packages/python/python24-pyqwt2_3.10.bb
index 28f4080c45..4f1f9bc0c9 100644
--- a/packages/python/python24-pyqwt2_3.10.bb
+++ b/packages/python/python24-pyqwt2_3.10.bb
@@ -33,7 +33,7 @@ EXTRA_QMAKEVARS_POST += "TARGET=qwt \
LIBS+=-L${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages"
do_generate_prepend() {
- echo -e "TEMPLATE=subdirs\nSUBDIRS=qwt\n" >pyqwt.pro
+ printf "TEMPLATE=subdirs\nSUBDIRS=qwt\n" >pyqwt.pro
echo "%Makefile qwt.pro.in" >>sip/qwtmod.sip
echo "TEMPLATE=lib" >>sip/qwtmod.sip
diff --git a/packages/python/python_2.5.1.bb b/packages/python/python_2.5.1.bb
index 8ad4e797c0..b274b0d7f9 100644
--- a/packages/python/python_2.5.1.bb
+++ b/packages/python/python_2.5.1.bb
@@ -7,7 +7,7 @@ DEPENDS = "python-native readline zlib gdbm openssl sqlite3 tcl tk"
DEPENDS_sharprom = "python-native readline zlib gdbm openssl"
# NOTE: Keep the digit in sync with BASEREV in contrib/generate-manifest-2.5.py
-PR = "ml5"
+PR = "ml7"
PYTHON_MAJMIN = "2.5"
@@ -18,7 +18,8 @@ SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.bz2 \
file://autohell.patch;patch=1 \
file://sitebranding.patch;patch=1 \
file://enable-ctypes-module.patch;patch=1 \
- file://default-is-optimized.patch;patch=1"
+ file://default-is-optimized.patch;patch=1 \
+ file://sitecustomize.py"
S = "${WORKDIR}/Python-${PV}"
inherit autotools
@@ -44,21 +45,21 @@ do_compile_prepend() {
}
do_compile() {
- oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \
- HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \
- STAGING_LIBDIR=${STAGING_LIBDIR} \
- STAGING_INCDIR=${STAGING_INCDIR} \
- BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
- OPT="${CFLAGS}" libpython2.5.so
+ oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \
+ HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \
+ STAGING_LIBDIR=${STAGING_LIBDIR} \
+ STAGING_INCDIR=${STAGING_INCDIR} \
+ BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+ OPT="${CFLAGS}" libpython2.5.so
oe_libinstall -so libpython2.5 ${STAGING_LIBDIR}
oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \
- HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \
- STAGING_LIBDIR=${STAGING_LIBDIR} \
- STAGING_INCDIR=${STAGING_INCDIR} \
- BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
- OPT="${CFLAGS}"
+ HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \
+ STAGING_LIBDIR=${STAGING_LIBDIR} \
+ STAGING_INCDIR=${STAGING_INCDIR} \
+ BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+ OPT="${CFLAGS}"
}
do_stage() {
@@ -68,19 +69,26 @@ do_stage() {
do_install() {
install -m 0644 Makefile.orig Makefile
- oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \
- HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \
- STAGING_LIBDIR=${STAGING_LIBDIR} \
- STAGING_INCDIR=${STAGING_INCDIR} \
- BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
- DESTDIR=${D} LIBDIR=${libdir} install
+
+ oe_runmake HOSTPGEN=${STAGING_BINDIR_NATIVE}/pgen \
+ HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python \
+ STAGING_LIBDIR=${STAGING_LIBDIR} \
+ STAGING_INCDIR=${STAGING_INCDIR} \
+ BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+ DESTDIR=${D} LIBDIR=${libdir} install
+
+ install -m 0644 ${WORKDIR}/sitecustomize.py ${D}/${libdir}/python${PYTHON_MAJMIN}
}
require python-${PYTHON_MAJMIN}-manifest.inc
RPROVIDES_python-core = "python"
-RPROVIDES_python-curses = "python"
+RRECOMMENDS_python-core = "python-readline"
+
+# add sitecustomize
+FILES_python-core += "${libdir}/python${PYTHON_MAJMIN}/sitecustomize.py"
+# package libpython
PACKAGES =+ "libpython2"
FILES_libpython2 = "${libdir}/libpython*"
diff --git a/packages/qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty b/packages/qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/.mtn2git_empty
diff --git a/packages/qemu/files/02_snapshot_use_tmpdir.patch b/packages/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch
index bd955b6db3..bd955b6db3 100644
--- a/packages/qemu/files/02_snapshot_use_tmpdir.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/02_snapshot_use_tmpdir.patch
diff --git a/packages/qemu/files/03_machines_list_no_error.patch b/packages/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch
index 73f31550fe..73f31550fe 100644
--- a/packages/qemu/files/03_machines_list_no_error.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/03_machines_list_no_error.patch
diff --git a/packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch b/packages/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch
index 1575cbce63..1575cbce63 100644
--- a/packages/qemu/files/04_do_not_print_rtc_freq_if_ok.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/04_do_not_print_rtc_freq_if_ok.patch
diff --git a/packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch b/packages/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch
index b7c4732f24..b7c4732f24 100644
--- a/packages/qemu/files/05_non-fatal_if_linux_hd_missing.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/05_non-fatal_if_linux_hd_missing.patch
diff --git a/packages/qemu/files/06_exit_segfault.patch b/packages/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch
index 447c3550b8..447c3550b8 100644
--- a/packages/qemu/files/06_exit_segfault.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/06_exit_segfault.patch
diff --git a/packages/qemu/files/10_signal_jobs.patch b/packages/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch
index 794a538676..794a538676 100644
--- a/packages/qemu/files/10_signal_jobs.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/10_signal_jobs.patch
diff --git a/packages/qemu/files/11_signal_sigaction.patch b/packages/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch
index 5446efc562..5446efc562 100644
--- a/packages/qemu/files/11_signal_sigaction.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/11_signal_sigaction.patch
diff --git a/packages/qemu/files/12_signal_powerpc_support.patch b/packages/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch
index d8d4198784..d8d4198784 100644
--- a/packages/qemu/files/12_signal_powerpc_support.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/12_signal_powerpc_support.patch
diff --git a/packages/qemu/files/22_net_tuntap_stall.patch b/packages/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch
index e9b31dfe40..e9b31dfe40 100644
--- a/packages/qemu/files/22_net_tuntap_stall.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/22_net_tuntap_stall.patch
diff --git a/packages/qemu/files/30_syscall_ipc.patch b/packages/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch
index 3dc58102ad..3dc58102ad 100644
--- a/packages/qemu/files/30_syscall_ipc.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/30_syscall_ipc.patch
diff --git a/packages/qemu/files/31_syscalls.patch b/packages/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch
index 3878079f19..3878079f19 100644
--- a/packages/qemu/files/31_syscalls.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/31_syscalls.patch
diff --git a/packages/qemu/files/32_syscall_sysctl.patch b/packages/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch
index d175cf96ba..d175cf96ba 100644
--- a/packages/qemu/files/32_syscall_sysctl.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/32_syscall_sysctl.patch
diff --git a/packages/qemu/files/33_syscall_ppc_clone.patch b/packages/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch
index a71f8b1944..a71f8b1944 100644
--- a/packages/qemu/files/33_syscall_ppc_clone.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/33_syscall_ppc_clone.patch
diff --git a/packages/qemu/files/39_syscall_fadvise64.patch b/packages/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch
index 0a7f4c48dd..0a7f4c48dd 100644
--- a/packages/qemu/files/39_syscall_fadvise64.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/39_syscall_fadvise64.patch
diff --git a/packages/qemu/files/41_arm_fpa_sigfpe.patch b/packages/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch
index d579dbc66e..d579dbc66e 100644
--- a/packages/qemu/files/41_arm_fpa_sigfpe.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/41_arm_fpa_sigfpe.patch
diff --git a/packages/qemu/files/52_ne2000_return.patch b/packages/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch
index f0316c8042..f0316c8042 100644
--- a/packages/qemu/files/52_ne2000_return.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/52_ne2000_return.patch
diff --git a/packages/qemu/files/61_safe_64bit_int.patch b/packages/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch
index 553e57623e..553e57623e 100644
--- a/packages/qemu/files/61_safe_64bit_int.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/61_safe_64bit_int.patch
diff --git a/packages/qemu/files/63_sparc_build.patch b/packages/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch
index 32a6bc0ee0..32a6bc0ee0 100644
--- a/packages/qemu/files/63_sparc_build.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/63_sparc_build.patch
diff --git a/packages/qemu/files/64_ppc_asm_constraints.patch b/packages/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch
index e4858b79d7..e4858b79d7 100644
--- a/packages/qemu/files/64_ppc_asm_constraints.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/64_ppc_asm_constraints.patch
diff --git a/packages/qemu/files/65_kfreebsd.patch b/packages/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch
index ea060811a1..ea060811a1 100644
--- a/packages/qemu/files/65_kfreebsd.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/65_kfreebsd.patch
diff --git a/packages/qemu/files/66_tls_ld.patch b/packages/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch
index 54e02eff8b..54e02eff8b 100644
--- a/packages/qemu/files/66_tls_ld.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/66_tls_ld.patch
diff --git a/packages/qemu/files/91-oh-sdl-cursor.patch b/packages/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch
index 5280a5bd4a..5280a5bd4a 100644
--- a/packages/qemu/files/91-oh-sdl-cursor.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/91-oh-sdl-cursor.patch
diff --git a/packages/qemu/files/93-oh-pl110-rgb.patch b/packages/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch
index 4911ac131f..4911ac131f 100644
--- a/packages/qemu/files/93-oh-pl110-rgb.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/93-oh-pl110-rgb.patch
diff --git a/packages/qemu/files/arm_nptl.patch b/packages/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch
index f9b10aebc5..f9b10aebc5 100644
--- a/packages/qemu/files/arm_nptl.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/arm_nptl.patch
diff --git a/packages/qemu/files/compiler.patch b/packages/qemu/qemu-0.9.0+cvs20070613/compiler.patch
index dad18b3a61..dad18b3a61 100644
--- a/packages/qemu/files/compiler.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/compiler.patch
diff --git a/packages/qemu/files/configure.patch b/packages/qemu/qemu-0.9.0+cvs20070613/configure.patch
index ea83f8cd6d..ea83f8cd6d 100644
--- a/packages/qemu/files/configure.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/configure.patch
diff --git a/packages/qemu/files/fix_segfault.patch b/packages/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch
index 976c75cd60..976c75cd60 100644
--- a/packages/qemu/files/fix_segfault.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/fix_segfault.patch
diff --git a/packages/qemu/files/makefile.patch b/packages/qemu/qemu-0.9.0+cvs20070613/makefile.patch
index 75b5ac9c71..75b5ac9c71 100644
--- a/packages/qemu/files/makefile.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/makefile.patch
diff --git a/packages/qemu/files/no-strip.patch b/packages/qemu/qemu-0.9.0+cvs20070613/no-strip.patch
index 59ed8771fe..59ed8771fe 100644
--- a/packages/qemu/files/no-strip.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/no-strip.patch
diff --git a/packages/qemu/files/pl110_rgb-r0.patch b/packages/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch
index 09e5898d3a..09e5898d3a 100644
--- a/packages/qemu/files/pl110_rgb-r0.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/pl110_rgb-r0.patch
diff --git a/packages/qemu/files/qemu-0.9.0-nptl-update.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch
index 869acba2cf..869acba2cf 100644
--- a/packages/qemu/files/qemu-0.9.0-nptl-update.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl-update.patch
diff --git a/packages/qemu/files/qemu-0.9.0-nptl.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch
index fc7b0cfa4b..fc7b0cfa4b 100644
--- a/packages/qemu/files/qemu-0.9.0-nptl.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-0.9.0-nptl.patch
diff --git a/packages/qemu/files/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch
index d9303e3464..d9303e3464 100644
--- a/packages/qemu/files/qemu-amd64-32b-mapping-0.9.0.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-amd64-32b-mapping-0.9.0.patch
diff --git a/packages/qemu/files/qemu-pci-irq-sharing.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch
index c47e89895f..c47e89895f 100644
--- a/packages/qemu/files/qemu-pci-irq-sharing.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-pci-irq-sharing.patch
diff --git a/packages/qemu/files/qemu-sdl-cursor.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch
index bd6a51a1f5..bd6a51a1f5 100644
--- a/packages/qemu/files/qemu-sdl-cursor.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-sdl-cursor.patch
diff --git a/packages/qemu/files/qemu-usb-wacom-0.8.2.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch
index 33a6db3f18..33a6db3f18 100644
--- a/packages/qemu/files/qemu-usb-wacom-0.8.2.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-0.8.2.patch
diff --git a/packages/qemu/files/qemu-usb-wacom-buttons.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch
index ee24c15780..ee24c15780 100644
--- a/packages/qemu/files/qemu-usb-wacom-buttons.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-buttons.patch
diff --git a/packages/qemu/files/qemu-usb-wacom-pressure.patch b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch
index 668d50d5f2..668d50d5f2 100644
--- a/packages/qemu/files/qemu-usb-wacom-pressure.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/qemu-usb-wacom-pressure.patch
diff --git a/packages/qemu/files/workaround_bad_futex_headers.patch b/packages/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch
index cc122ebdba..cc122ebdba 100644
--- a/packages/qemu/files/workaround_bad_futex_headers.patch
+++ b/packages/qemu/qemu-0.9.0+cvs20070613/workaround_bad_futex_headers.patch
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch
deleted file mode 100644
index fe1f0945b6..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/arm_nptl-0.9.0.patch
+++ /dev/null
@@ -1,853 +0,0 @@
-diff -Naru qemu-snapshot-2007-06-24_05.orig/configure qemu-snapshot-2007-06-24_05/configure
---- qemu-snapshot-2007-06-24_05.orig/configure 2007-06-24 16:31:54.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/configure 2007-06-24 16:33:58.000000000 +0200
-@@ -101,6 +101,7 @@
- darwin_user="no"
- build_docs="no"
- uname_release=""
-+nptl="yes"
-
- # OS specific
- targetos=`uname -s`
-@@ -287,6 +288,8 @@
- *) echo "undefined SPARC architecture. Exiting";exit 1;;
- esac
- ;;
-+ --disable-nptl) nptl="no"
-+ ;;
- esac
- done
-
-@@ -530,6 +533,23 @@
- }
- EOF
-
-+# check NPTL support
-+cat > $TMPC <<EOF
-+#include <sched.h>
-+void foo()
-+{
-+#ifndef CLONE_SETTLS
-+#error bork
-+#endif
-+}
-+EOF
-+
-+if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
-+ :
-+else
-+ nptl="no"
-+fi
-+
- ##########################################
- # SDL probe
-
-@@ -681,6 +701,7 @@
- echo "Target Sparc Arch $sparc_cpu"
- fi
- echo "kqemu support $kqemu"
-+echo "NPTL support $nptl"
- echo "Documentation $build_docs"
- [ ! -z "$uname_release" ] && \
- echo "uname -r $uname_release"
-@@ -1063,6 +1084,14 @@
- echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
- fi
- fi
-+else
-+ if test "$nptl" = "yes" ; then
-+ case "$target_cpu" in
-+ arm | armeb)
-+ echo "#define USE_NPTL 1" >> $config_h
-+ ;;
-+ esac
-+ fi
- fi
-
- if test "$cocoa" = "yes" ; then
-diff -Naru qemu-snapshot-2007-06-24_05.orig/exec-all.h qemu-snapshot-2007-06-24_05/exec-all.h
---- qemu-snapshot-2007-06-24_05.orig/exec-all.h 2007-05-23 21:58:10.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/exec-all.h 2007-06-24 16:33:58.000000000 +0200
-@@ -360,170 +360,7 @@
- extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
- extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
-
--#if defined(__powerpc__)
--static inline int testandset (int *p)
--{
-- int ret;
-- __asm__ __volatile__ (
-- "0: lwarx %0,0,%1\n"
-- " xor. %0,%3,%0\n"
-- " bne 1f\n"
-- " stwcx. %2,0,%1\n"
-- " bne- 0b\n"
-- "1: "
-- : "=&r" (ret)
-- : "r" (p), "r" (1), "r" (0)
-- : "cr0", "memory");
-- return ret;
--}
--#elif defined(__i386__)
--static inline int testandset (int *p)
--{
-- long int readval = 0;
--
-- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-- : "+m" (*p), "+a" (readval)
-- : "r" (1)
-- : "cc");
-- return readval;
--}
--#elif defined(__x86_64__)
--static inline int testandset (int *p)
--{
-- long int readval = 0;
--
-- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-- : "+m" (*p), "+a" (readval)
-- : "r" (1)
-- : "cc");
-- return readval;
--}
--#elif defined(__s390__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
-- " jl 0b"
-- : "=&d" (ret)
-- : "r" (1), "a" (p), "0" (*p)
-- : "cc", "memory" );
-- return ret;
--}
--#elif defined(__alpha__)
--static inline int testandset (int *p)
--{
-- int ret;
-- unsigned long one;
--
-- __asm__ __volatile__ ("0: mov 1,%2\n"
-- " ldl_l %0,%1\n"
-- " stl_c %2,%1\n"
-- " beq %2,1f\n"
-- ".subsection 2\n"
-- "1: br 0b\n"
-- ".previous"
-- : "=r" (ret), "=m" (*p), "=r" (one)
-- : "m" (*p));
-- return ret;
--}
--#elif defined(__sparc__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__("ldstub [%1], %0"
-- : "=r" (ret)
-- : "r" (p)
-- : "memory");
--
-- return (ret ? 1 : 0);
--}
--#elif defined(__arm__)
--static inline int testandset (int *spinlock)
--{
-- register unsigned int ret;
-- __asm__ __volatile__("swp %0, %1, [%2]"
-- : "=r"(ret)
-- : "0"(1), "r"(spinlock));
--
-- return ret;
--}
--#elif defined(__mc68000)
--static inline int testandset (int *p)
--{
-- char ret;
-- __asm__ __volatile__("tas %1; sne %0"
-- : "=r" (ret)
-- : "m" (p)
-- : "cc","memory");
-- return ret;
--}
--#elif defined(__ia64)
--
--#include <ia64intrin.h>
--
--static inline int testandset (int *p)
--{
-- return __sync_lock_test_and_set (p, 1);
--}
--#elif defined(__mips__)
--static inline int testandset (int *p)
--{
-- int ret;
--
-- __asm__ __volatile__ (
-- " .set push \n"
-- " .set noat \n"
-- " .set mips2 \n"
-- "1: li $1, 1 \n"
-- " ll %0, %1 \n"
-- " sc $1, %1 \n"
-- " beqz $1, 1b \n"
-- " .set pop "
-- : "=r" (ret), "+R" (*p)
-- :
-- : "memory");
--
-- return ret;
--}
--#else
--#error unimplemented CPU support
--#endif
--
--typedef int spinlock_t;
--
--#define SPIN_LOCK_UNLOCKED 0
--
--#if defined(CONFIG_USER_ONLY)
--static inline void spin_lock(spinlock_t *lock)
--{
-- while (testandset(lock));
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
-- *lock = 0;
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
-- return !testandset(lock);
--}
--#else
--static inline void spin_lock(spinlock_t *lock)
--{
--}
--
--static inline void spin_unlock(spinlock_t *lock)
--{
--}
--
--static inline int spin_trylock(spinlock_t *lock)
--{
-- return 1;
--}
--#endif
-+#include "qemu_spinlock.h"
-
- extern spinlock_t tb_lock;
-
-diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/arm/syscall.h qemu-snapshot-2007-06-24_05/linux-user/arm/syscall.h
---- qemu-snapshot-2007-06-24_05.orig/linux-user/arm/syscall.h 2005-04-27 22:11:21.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/linux-user/arm/syscall.h 2007-06-24 16:33:58.000000000 +0200
-@@ -28,7 +28,9 @@
- #define ARM_SYSCALL_BASE 0x900000
- #define ARM_THUMB_SYSCALL 0
-
--#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
-+#define ARM_NR_BASE 0xf0000
-+#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
-+#define ARM_NR_set_tls (ARM_NR_BASE + 5)
-
- #define ARM_NR_semihosting 0x123456
- #define ARM_NR_thumb_semihosting 0xAB
-diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/main.c qemu-snapshot-2007-06-24_05/linux-user/main.c
---- qemu-snapshot-2007-06-24_05.orig/linux-user/main.c 2007-06-22 00:55:02.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/linux-user/main.c 2007-06-24 16:33:58.000000000 +0200
-@@ -325,6 +325,50 @@
- }
- }
-
-+/* Handle a jump to the kernel code page. */
-+static int
-+do_kernel_trap(CPUARMState *env)
-+{
-+ uint32_t addr;
-+ uint32_t *ptr;
-+ uint32_t cpsr;
-+
-+ switch (env->regs[15]) {
-+ case 0xffff0fc0: /* __kernel_cmpxchg */
-+ /* XXX: This only works between threads, not between processes.
-+ Use native atomic operations. */
-+ /* ??? This probably breaks horribly if the access segfaults. */
-+ cpu_lock();
-+ ptr = (uint32_t *)env->regs[2];
-+ cpsr = cpsr_read(env);
-+ if (*ptr == env->regs[0]) {
-+ *ptr = env->regs[1];
-+ env->regs[0] = 0;
-+ cpsr |= CPSR_C;
-+ } else {
-+ env->regs[0] = -1;
-+ cpsr &= ~CPSR_C;
-+ }
-+ cpsr_write(env, cpsr, CPSR_C);
-+ cpu_unlock();
-+ break;
-+ case 0xffff0fe0: /* __kernel_get_tls */
-+ env->regs[0] = env->cp15.c13_tls;
-+ break;
-+ default:
-+ return 1;
-+ }
-+ /* Jump back to the caller. */
-+ addr = env->regs[14];
-+ if (addr & 1) {
-+ env->thumb = 1;
-+ addr &= ~1;
-+ }
-+ env->regs[15] = addr;
-+
-+ return 0;
-+}
-+
- void cpu_loop(CPUARMState *env)
- {
- int trapnr;
-@@ -381,10 +425,8 @@
- }
- }
-
-- if (n == ARM_NR_cacheflush) {
-- arm_cache_flush(env->regs[0], env->regs[1]);
-- } else if (n == ARM_NR_semihosting
-- || n == ARM_NR_thumb_semihosting) {
-+ if (n == ARM_NR_semihosting
-+ || n == ARM_NR_thumb_semihosting) {
- env->regs[0] = do_arm_semihosting (env);
- } else if (n == 0 || n >= ARM_SYSCALL_BASE
- || (env->thumb && n == ARM_THUMB_SYSCALL)) {
-@@ -395,14 +437,34 @@
- n -= ARM_SYSCALL_BASE;
- env->eabi = 0;
- }
-- env->regs[0] = do_syscall(env,
-- n,
-- env->regs[0],
-- env->regs[1],
-- env->regs[2],
-- env->regs[3],
-- env->regs[4],
-- env->regs[5]);
-+ if ( n > ARM_NR_BASE) {
-+ switch (n)
-+ {
-+ case ARM_NR_cacheflush:
-+ arm_cache_flush(env->regs[0], env->regs[1]);
-+ break;
-+#ifdef USE_NPTL
-+ case ARM_NR_set_tls:
-+ cpu_set_tls(env, env->regs[0]);
-+ env->regs[0] = 0;
-+ break;
-+#endif
-+ default:
-+ printf ("Error: Bad syscall: %x\n", n);
-+ goto error;
-+ }
-+ }
-+ else
-+ {
-+ env->regs[0] = do_syscall(env,
-+ n,
-+ env->regs[0],
-+ env->regs[1],
-+ env->regs[2],
-+ env->regs[3],
-+ env->regs[4],
-+ env->regs[5]);
-+ }
- } else {
- goto error;
- }
-@@ -441,6 +503,10 @@
- }
- }
- break;
-+ case EXCP_KERNEL_TRAP:
-+ if (do_kernel_trap(env))
-+ goto error;
-+ break;
- default:
- error:
- fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
-@@ -2074,6 +2140,10 @@
- ts->heap_base = info->brk;
- /* This will be filled in on the first SYS_HEAPINFO call. */
- ts->heap_limit = 0;
-+ /* Register the magic kernel code page. The cpu will generate a
-+ special exception when it tries to execute code here. We can't
-+ put real code here because it may be in use by the host kernel. */
-+ page_set_flags(0xffff0000, 0xffff0fff, 0);
- #endif
-
- if (gdbstub_port) {
-diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/qemu.h qemu-snapshot-2007-06-24_05/linux-user/qemu.h
---- qemu-snapshot-2007-06-24_05.orig/linux-user/qemu.h 2007-05-26 17:09:38.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/linux-user/qemu.h 2007-06-24 16:33:58.000000000 +0200
-@@ -81,6 +81,9 @@
- uint32_t heap_limit;
- #endif
- int used; /* non zero if used */
-+#ifdef USE_NPTL
-+ uint32_t *child_tidptr;
-+#endif
- struct image_info *info;
- uint8_t stack[0];
- } __attribute__((aligned(16))) TaskState;
-diff -Naru qemu-snapshot-2007-06-24_05.orig/linux-user/syscall.c qemu-snapshot-2007-06-24_05/linux-user/syscall.c
---- qemu-snapshot-2007-06-24_05.orig/linux-user/syscall.c 2007-06-21 23:57:11.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/linux-user/syscall.c 2007-06-24 16:33:58.000000000 +0200
-@@ -70,9 +70,18 @@
- #include <linux/kd.h>
-
- #include "qemu.h"
-+#include "qemu_spinlock.h"
-
- //#define DEBUG
-
-+#ifdef USE_NPTL
-+#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
-+ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
-+#else
-+/* XXX: Hardcode the above values. */
-+#define CLONE_NPTL_FLAGS2 0
-+#endif
-+
- #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
- || defined(TARGET_M68K) || defined(TARGET_SH4)
- /* 16 bit uid wrappers emulation */
-@@ -2121,20 +2130,38 @@
- thread/process */
- #define NEW_STACK_SIZE 8192
-
-+#ifdef USE_NPTL
-+static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
-+#endif
-+
- static int clone_func(void *arg)
- {
- CPUState *env = arg;
-+#ifdef HAVE_NPTL
-+ /* Wait until the parent has finshed initializing the tls state. */
-+ while (!spin_trylock(&nptl_lock))
-+ usleep(1);
-+ spin_unlock(&nptl_lock);
-+#endif
- cpu_loop(env);
- /* never exits */
- return 0;
- }
-
--int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
-+int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
-+ uint32_t *parent_tidptr, void *newtls,
-+ uint32_t *child_tidptr)
- {
- int ret;
- TaskState *ts;
- uint8_t *new_stack;
- CPUState *new_env;
-+#ifdef USE_NPTL
-+ unsigned int nptl_flags;
-+
-+ if (flags & CLONE_PARENT_SETTID)
-+ *parent_tidptr = gettid();
-+#endif
-
- if (flags & CLONE_VM) {
- ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
-@@ -2201,16 +2228,60 @@
- #error unsupported target CPU
- #endif
- new_env->opaque = ts;
-+#ifdef USE_NPTL
-+ nptl_flags = flags;
-+ flags &= ~CLONE_NPTL_FLAGS2;
-+ if (nptl_flags & CLONE_CHILD_CLEARTID) {
-+ ts->child_tidptr = child_tidptr;
-+ }
-+ if (nptl_flags & CLONE_SETTLS)
-+ cpu_set_tls (new_env, newtls);
-+ /* Grab the global cpu lock so that the thread setup appears
-+ atomic. */
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ spin_lock(&nptl_lock);
-+#else
-+ if (flags & CLONE_NPTL_FLAGS2)
-+ return -EINVAL;
-+#endif
-+
- #ifdef __ia64__
- ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #else
- ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
- #endif
-+#ifdef USE_NPTL
-+ if (ret != -1) {
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ *child_tidptr = ret;
-+ }
-+ /* Allow the child to continue. */
-+ if (nptl_flags & CLONE_CHILD_SETTID)
-+ spin_unlock(&nptl_lock);
-+#endif
- } else {
-- /* if no CLONE_VM, we consider it is a fork */
-- if ((flags & ~CSIGNAL) != 0)
-- return -EINVAL;
-- ret = fork();
-+ /* if no CLONE_VM, we consider it is a fork */
-+ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
-+ return -EINVAL;
-+ ret = fork();
-+#ifdef USE_NPTL
-+ /* There is a race condition here. The parent process could
-+ theoretically read the TID in the child process before the child
-+ tid is set. This would require using either ptrace
-+ (not implemented) or having *_tidptr to point at a shared memory
-+ mapping. We can't repeat the spinlock hack used above because
-+ the child process gets its own copy of the lock. */
-+ if (ret == 0) {
-+ /* Child Process. */
-+ if (flags & CLONE_CHILD_SETTID)
-+ *child_tidptr = gettid();
-+ ts = (TaskState *)env->opaque;
-+ if (flags & CLONE_CHILD_CLEARTID)
-+ ts->child_tidptr = child_tidptr;
-+ if (flags & CLONE_SETTLS)
-+ cpu_set_tls (env, newtls);
-+ }
-+#endif
- }
- return ret;
- }
-@@ -2487,7 +2558,7 @@
- ret = do_brk(arg1);
- break;
- case TARGET_NR_fork:
-- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
-+ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
- break;
- #ifdef TARGET_NR_waitpid
- case TARGET_NR_waitpid:
-@@ -3651,7 +3722,8 @@
- ret = get_errno(fsync(arg1));
- break;
- case TARGET_NR_clone:
-- ret = get_errno(do_fork(cpu_env, arg1, arg2));
-+ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
-+ (void *)arg4, (uint32_t *)arg5));
- break;
- #ifdef __NR_exit_group
- /* new thread calls */
-@@ -4039,7 +4111,8 @@
- #endif
- #ifdef TARGET_NR_vfork
- case TARGET_NR_vfork:
-- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
-+ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
-+ NULL, NULL, NULL));
- break;
- #endif
- #ifdef TARGET_NR_ugetrlimit
-@@ -4632,4 +4705,3 @@
- #endif
- return ret;
- }
--
-diff -Naru qemu-snapshot-2007-06-24_05.orig/qemu_spinlock.h qemu-snapshot-2007-06-24_05/qemu_spinlock.h
---- qemu-snapshot-2007-06-24_05.orig/qemu_spinlock.h 1970-01-01 01:00:00.000000000 +0100
-+++ qemu-snapshot-2007-06-24_05/qemu_spinlock.h 2007-06-24 16:33:58.000000000 +0200
-@@ -0,0 +1,182 @@
-+/*
-+ * internal execution defines for qemu
-+ *
-+ * Copyright (c) 2003 Fabrice Bellard
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ */
-+
-+#ifndef _QEMU_SPINLOCK_H
-+#define _QEMU_SPINLOCK_H
-+
-+#ifdef __powerpc__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+ __asm__ __volatile__ (
-+ "0: lwarx %0,0,%1\n"
-+ " xor. %0,%3,%0\n"
-+ " bne 1f\n"
-+ " stwcx. %2,0,%1\n"
-+ " bne- 0b\n"
-+ "1: "
-+ : "=&r" (ret)
-+ : "r" (p), "r" (1), "r" (0)
-+ : "cr0", "memory");
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __i386__
-+static inline int testandset (int *p)
-+{
-+ long int readval = 0;
-+
-+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+ : "+m" (*p), "+a" (readval)
-+ : "r" (1)
-+ : "cc");
-+ return readval;
-+}
-+#endif
-+
-+#ifdef __x86_64__
-+static inline int testandset (int *p)
-+{
-+ long int readval = 0;
-+
-+ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
-+ : "+m" (*p), "+a" (readval)
-+ : "r" (1)
-+ : "cc");
-+ return readval;
-+}
-+#endif
-+
-+#ifdef __s390__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+
-+ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
-+ " jl 0b"
-+ : "=&d" (ret)
-+ : "r" (1), "a" (p), "0" (*p)
-+ : "cc", "memory" );
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __alpha__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+ unsigned long one;
-+
-+ __asm__ __volatile__ ("0: mov 1,%2\n"
-+ " ldl_l %0,%1\n"
-+ " stl_c %2,%1\n"
-+ " beq %2,1f\n"
-+ ".subsection 2\n"
-+ "1: br 0b\n"
-+ ".previous"
-+ : "=r" (ret), "=m" (*p), "=r" (one)
-+ : "m" (*p));
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __sparc__
-+static inline int testandset (int *p)
-+{
-+ int ret;
-+
-+ __asm__ __volatile__("ldstub [%1], %0"
-+ : "=r" (ret)
-+ : "r" (p)
-+ : "memory");
-+
-+ return (ret ? 1 : 0);
-+}
-+#endif
-+
-+#ifdef __arm__
-+static inline int testandset (int *spinlock)
-+{
-+ register unsigned int ret;
-+ __asm__ __volatile__("swp %0, %1, [%2]"
-+ : "=r"(ret)
-+ : "0"(1), "r"(spinlock));
-+
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __mc68000
-+static inline int testandset (int *p)
-+{
-+ char ret;
-+ __asm__ __volatile__("tas %1; sne %0"
-+ : "=r" (ret)
-+ : "m" (p)
-+ : "cc","memory");
-+ return ret;
-+}
-+#endif
-+
-+#ifdef __ia64
-+#include <ia64intrin.h>
-+
-+static inline int testandset (int *p)
-+{
-+ return __sync_lock_test_and_set (p, 1);
-+}
-+#endif
-+
-+typedef int spinlock_t;
-+
-+#define SPIN_LOCK_UNLOCKED 0
-+
-+#if defined(CONFIG_USER_ONLY)
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+ while (testandset(lock));
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+ *lock = 0;
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+ return !testandset(lock);
-+}
-+#else
-+static inline void spin_lock(spinlock_t *lock)
-+{
-+}
-+
-+static inline void spin_unlock(spinlock_t *lock)
-+{
-+}
-+
-+static inline int spin_trylock(spinlock_t *lock)
-+{
-+ return 1;
-+}
-+#endif
-+
-+#endif /* ! _QEMU_SPINLOCK_H */
-diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/cpu.h qemu-snapshot-2007-06-24_05/target-arm/cpu.h
---- qemu-snapshot-2007-06-24_05.orig/target-arm/cpu.h 2007-06-03 23:02:37.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/target-arm/cpu.h 2007-06-24 16:33:58.000000000 +0200
-@@ -37,6 +37,9 @@
- #define EXCP_IRQ 5
- #define EXCP_FIQ 6
- #define EXCP_BKPT 7
-+#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */
-+
-+
-
- typedef void ARMWriteCPFunc(void *opaque, int cp_info,
- int srcreg, int operand, uint32_t value);
-@@ -97,6 +100,7 @@
- uint32_t c9_data;
- uint32_t c13_fcse; /* FCSE PID. */
- uint32_t c13_context; /* Context ID. */
-+ uint32_t c13_tls; /* Paul Brook told me to just add this ;) */
- uint32_t c15_cpar; /* XScale Coprocessor Access Register */
- } cp15;
-
-@@ -169,6 +173,15 @@
- int cpu_arm_signal_handler(int host_signum, void *pinfo,
- void *puc);
-
-+void cpu_lock(void);
-+void cpu_unlock(void);
-+#if defined(USE_NPTL)
-+static inline void cpu_set_tls(CPUARMState *env, void *newtls)
-+{
-+ env->cp15.c13_tls = (uint32_t)newtls;
-+}
-+#endif
-+
- #define CPSR_M (0x1f)
- #define CPSR_T (1 << 5)
- #define CPSR_F (1 << 6)
-@@ -180,7 +193,11 @@
- #define CPSR_J (1 << 24)
- #define CPSR_IT_0_1 (3 << 25)
- #define CPSR_Q (1 << 27)
--#define CPSR_NZCV (0xf << 28)
-+#define CPSR_V (1 << 28)
-+#define CPSR_C (1 << 29)
-+#define CPSR_Z (1 << 30)
-+#define CPSR_N (1 << 31)
-+#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
-
- #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
- /* Return the current CPSR value. */
-diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/exec.h qemu-snapshot-2007-06-24_05/target-arm/exec.h
---- qemu-snapshot-2007-06-24_05.orig/target-arm/exec.h 2007-06-03 19:44:36.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/target-arm/exec.h 2007-06-24 16:33:58.000000000 +0200
-@@ -68,8 +68,6 @@
-
- /* In op_helper.c */
-
--void cpu_lock(void);
--void cpu_unlock(void);
- void helper_set_cp(CPUState *, uint32_t, uint32_t);
- uint32_t helper_get_cp(CPUState *, uint32_t);
- void helper_set_cp15(CPUState *, uint32_t, uint32_t);
-diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/op.c qemu-snapshot-2007-06-24_05/target-arm/op.c
---- qemu-snapshot-2007-06-24_05.orig/target-arm/op.c 2007-05-21 19:48:01.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/target-arm/op.c 2007-06-24 16:33:58.000000000 +0200
-@@ -891,6 +891,12 @@
- cpu_loop_exit();
- }
-
-+void OPPROTO op_kernel_trap(void)
-+{
-+ env->exception_index = EXCP_KERNEL_TRAP;
-+ cpu_loop_exit();
-+}
-+
- /* VFP support. We follow the convention used for VFP instrunctions:
- Single precition routines have a "s" suffix, double precision a
- "d" suffix. */
-diff -Naru qemu-snapshot-2007-06-24_05.orig/target-arm/translate.c qemu-snapshot-2007-06-24_05/target-arm/translate.c
---- qemu-snapshot-2007-06-24_05.orig/target-arm/translate.c 2007-06-11 20:59:35.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/target-arm/translate.c 2007-06-24 16:33:58.000000000 +0200
-@@ -3513,6 +3513,7 @@
- s->is_jmp = DISAS_JUMP;
- }
-
-+
- /* generate intermediate code in gen_opc_buf and gen_opparam_buf for
- basic block 'tb'. If search_pc is TRUE, also generate PC
- information for each intermediate instruction. */
-@@ -3548,6 +3549,15 @@
- nb_gen_labels = 0;
- lj = -1;
- do {
-+#ifdef CONFIG_USER_ONLY
-+ /* Intercept jump to the magic kernel page. */
-+ if (dc->pc > 0xffff0000) {
-+ gen_op_kernel_trap();
-+ dc->is_jmp = DISAS_UPDATE;
-+ break;
-+ }
-+#endif
-+
- if (env->nb_breakpoints > 0) {
- for(j = 0; j < env->nb_breakpoints; j++) {
- if (env->breakpoints[j] == dc->pc) {
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch
deleted file mode 100644
index d92f6a8264..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/configure-0.9.0.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Naru qemu-snapshot-2007-06-24_05.orig/configure qemu-snapshot-2007-06-24_05/configure
---- qemu-snapshot-2007-06-24_05.orig/configure 2007-06-23 18:03:35.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/configure 2007-06-24 16:30:32.000000000 +0200
-@@ -711,7 +711,7 @@
- echo "CC=$cc" >> $config_mak
- echo "HOST_CC=$host_cc" >> $config_mak
- echo "AR=$ar" >> $config_mak
--echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak
-+echo "STRIP=$strip" >> $config_mak
- echo "OS_CFLAGS=$OS_CFLAGS" >> $config_mak
- echo "OS_LDFLAGS=$OS_LDFLAGS" >> $config_mak
- echo "ARCH_CFLAGS=$ARCH_CFLAGS" >> $config_mak
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch
deleted file mode 100644
index 3ad4115e73..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/pl110_rgb-r0-0.9.0.patch
+++ /dev/null
@@ -1,217 +0,0 @@
-diff -Naru qemu-neo1973.orig/hw/pl110.c qemu-neo1973/hw/pl110.c
---- qemu-neo1973.orig/hw/pl110.c 2007-06-24 13:56:37.000000000 +0200
-+++ qemu-neo1973/hw/pl110.c 2007-06-24 14:12:09.000000000 +0200
-@@ -10,6 +10,7 @@
- #include "vl.h"
-
- #define PL110_CR_EN 0x001
-+#define PL110_CR_BGR 0x100
- #define PL110_CR_BEBO 0x200
- #define PL110_CR_BEPO 0x400
- #define PL110_CR_PWR 0x800
-@@ -114,6 +115,7 @@
- int first, last = 0;
- int dirty, new_dirty;
- int i;
-+ int bpp_offset;
-
- if (!pl110_enabled(s))
- return;
-@@ -145,12 +147,17 @@
- fprintf(stderr, "pl110: Bad color depth\n");
- exit(1);
- }
-+ if (s->cr & PL110_CR_BGR)
-+ bpp_offset = 0;
-+ else
-+ bpp_offset = 18;
-+
- if (s->cr & PL110_CR_BEBO)
-- fn = fntable[s->bpp + 6];
-+ fn = fntable[s->bpp + 6 + bpp_offset];
- else if (s->cr & PL110_CR_BEPO)
-- fn = fntable[s->bpp + 12];
-+ fn = fntable[s->bpp + 12 + bpp_offset];
- else
-- fn = fntable[s->bpp];
-+ fn = fntable[s->bpp + bpp_offset];
-
- src_width = s->cols;
- switch (s->bpp) {
-diff -Naru qemu-neo1973.orig/hw/pl110_template.h qemu-neo1973/hw/pl110_template.h
---- qemu-neo1973.orig/hw/pl110_template.h 2007-06-24 13:56:37.000000000 +0200
-+++ qemu-neo1973/hw/pl110_template.h 2007-06-24 14:12:09.000000000 +0200
-@@ -24,6 +24,16 @@
- #error unknown bit depth
- #endif
-
-+#undef RGB
-+#define BORDER bgr
-+#define ORDER 0
-+#include "pl110_template.h"
-+#define ORDER 1
-+#include "pl110_template.h"
-+#define ORDER 2
-+#include "pl110_template.h"
-+#define RGB
-+#define BORDER rgb
- #define ORDER 0
- #include "pl110_template.h"
- #define ORDER 1
-@@ -33,26 +43,47 @@
-
- static drawfn glue(pl110_draw_fn_,BITS)[18] =
- {
-- glue(pl110_draw_line1_lblp,BITS),
-- glue(pl110_draw_line2_lblp,BITS),
-- glue(pl110_draw_line4_lblp,BITS),
-- glue(pl110_draw_line8_lblp,BITS),
-- glue(pl110_draw_line16_lblp,BITS),
-- glue(pl110_draw_line32_lblp,BITS),
--
-- glue(pl110_draw_line1_bbbp,BITS),
-- glue(pl110_draw_line2_bbbp,BITS),
-- glue(pl110_draw_line4_bbbp,BITS),
-- glue(pl110_draw_line8_bbbp,BITS),
-- glue(pl110_draw_line16_bbbp,BITS),
-- glue(pl110_draw_line32_bbbp,BITS),
--
-- glue(pl110_draw_line1_lbbp,BITS),
-- glue(pl110_draw_line2_lbbp,BITS),
-- glue(pl110_draw_line4_lbbp,BITS),
-- glue(pl110_draw_line8_lbbp,BITS),
-- glue(pl110_draw_line16_lbbp,BITS),
-- glue(pl110_draw_line32_lbbp,BITS)
-+ glue(pl110_draw_line1_lblp_bgr,BITS),
-+ glue(pl110_draw_line2_lblp_bgr,BITS),
-+ glue(pl110_draw_line4_lblp_bgr,BITS),
-+ glue(pl110_draw_line8_lblp_bgr,BITS),
-+ glue(pl110_draw_line16_lblp_bgr,BITS),
-+ glue(pl110_draw_line32_lblp_bgr,BITS),
-+
-+ glue(pl110_draw_line1_bbbp_bgr,BITS),
-+ glue(pl110_draw_line2_bbbp_bgr,BITS),
-+ glue(pl110_draw_line4_bbbp_bgr,BITS),
-+ glue(pl110_draw_line8_bbbp_bgr,BITS),
-+ glue(pl110_draw_line16_bbbp_bgr,BITS),
-+ glue(pl110_draw_line32_bbbp_bgr,BITS),
-+
-+ glue(pl110_draw_line1_lbbp_bgr,BITS),
-+ glue(pl110_draw_line2_lbbp_bgr,BITS),
-+ glue(pl110_draw_line4_lbbp_bgr,BITS),
-+ glue(pl110_draw_line8_lbbp_bgr,BITS),
-+ glue(pl110_draw_line16_lbbp_bgr,BITS),
-+ glue(pl110_draw_line32_lbbp_bgr,BITS),
-+
-+ glue(pl110_draw_line1_lblp_rgb,BITS),
-+ glue(pl110_draw_line2_lblp_rgb,BITS),
-+ glue(pl110_draw_line4_lblp_rgb,BITS),
-+ glue(pl110_draw_line8_lblp_rgb,BITS),
-+ glue(pl110_draw_line16_lblp_rgb,BITS),
-+ glue(pl110_draw_line32_lblp_rgb,BITS),
-+
-+ glue(pl110_draw_line1_bbbp_rgb,BITS),
-+ glue(pl110_draw_line2_bbbp_rgb,BITS),
-+ glue(pl110_draw_line4_bbbp_rgb,BITS),
-+ glue(pl110_draw_line8_bbbp_rgb,BITS),
-+ glue(pl110_draw_line16_bbbp_rgb,BITS),
-+ glue(pl110_draw_line32_bbbp_rgb,BITS),
-+
-+ glue(pl110_draw_line1_lbbp_rgb,BITS),
-+ glue(pl110_draw_line2_lbbp_rgb,BITS),
-+ glue(pl110_draw_line4_lbbp_rgb,BITS),
-+ glue(pl110_draw_line8_lbbp_rgb,BITS),
-+ glue(pl110_draw_line16_lbbp_rgb,BITS),
-+ glue(pl110_draw_line32_lbbp_rgb,BITS),
- };
-
- #undef BITS
-@@ -61,18 +92,18 @@
- #else
-
- #if ORDER == 0
--#define NAME glue(lblp, BITS)
-+#define NAME glue(glue(lblp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #elif ORDER == 1
--#define NAME glue(bbbp, BITS)
-+#define NAME glue(glue(bbbp_, BORDER), BITS)
- #ifndef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
- #else
- #define SWAP_PIXELS 1
--#define NAME glue(lbbp, BITS)
-+#define NAME glue(glue(lbbp_, BORDER), BITS)
- #ifdef WORDS_BIGENDIAN
- #define SWAP_WORDS 1
- #endif
-@@ -195,27 +226,34 @@
- #ifdef SWAP_WORDS
- data = bswap32(data);
- #endif
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #if 0
-- r = data & 0x1f;
-+ LSB = data & 0x1f;
- data >>= 5;
- g = data & 0x3f;
- data >>= 6;
-- b = data & 0x1f;
-+ MSB = data & 0x1f;
- data >>= 5;
- #else
-- r = (data & 0x1f) << 3;
-+ LSB = (data & 0x1f) << 3;
- data >>= 5;
- g = (data & 0x3f) << 2;
- data >>= 6;
-- b = (data & 0x1f) << 3;
-+ MSB = (data & 0x1f) << 3;
- data >>= 5;
- #endif
- COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
-- r = (data & 0x1f) << 3;
-+ LSB = (data & 0x1f) << 3;
- data >>= 5;
- g = (data & 0x3f) << 2;
- data >>= 6;
-- b = (data & 0x1f) << 3;
-+ MSB = (data & 0x1f) << 3;
- data >>= 5;
- COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
- width -= 2;
-@@ -229,14 +267,21 @@
- unsigned int r, g, b;
- while (width > 0) {
- data = *(uint32_t *)src;
-+#ifdef RGB
-+#define LSB r
-+#define MSB b
-+#else
-+#define LSB b
-+#define MSB r
-+#endif
- #ifdef SWAP_WORDS
-- r = data & 0xff;
-+ LSB = data & 0xff;
- g = (data >> 8) & 0xff;
-- b = (data >> 16) & 0xff;
-+ MSB = (data >> 16) & 0xff;
- #else
-- r = (data >> 24) & 0xff;
-+ LSB = (data >> 24) & 0xff;
- g = (data >> 16) & 0xff;
-- b = (data >> 8) & 0xff;
-+ MSB = (data >> 8) & 0xff;
- #endif
- COPY_PIXEL(d, glue(rgb_to_pixel,BITS)(r, g, b));
- width--;
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch
deleted file mode 100644
index 189cd09b67..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-0.9.0-gcc4.patch
+++ /dev/null
@@ -1,881 +0,0 @@
-diff -Naru qemu-neo1973.orig/dyngen.c qemu-neo1973/dyngen.c
---- qemu-neo1973.orig/dyngen.c 2007-06-24 13:56:38.000000000 +0200
-+++ qemu-neo1973/dyngen.c 2007-06-24 14:33:11.000000000 +0200
-@@ -32,6 +32,8 @@
-
- #include "config-host.h"
-
-+//#define DEBUG_OP
-+
- /* NOTE: we test CONFIG_WIN32 instead of _WIN32 to enabled cross
- compilation */
- #if defined(CONFIG_WIN32)
-@@ -1429,6 +1431,644 @@
- #endif
-
-
-+#if defined(HOST_I386) || defined(HOST_X86_64)
-+
-+/* This byte is the first byte of an instruction. */
-+#define FLAG_INSN (1 << 0)
-+/* This byte has been processed as part of an instruction. */
-+#define FLAG_SCANNED (1 << 1)
-+/* This instruction is a return instruction. Gcc cometimes generates prefix
-+ bytes, so may be more than one byte long. */
-+#define FLAG_RET (1 << 2)
-+/* This is either the target of a jump, or the preceeding instruction uses
-+ a pc-relative offset. */
-+#define FLAG_TARGET (1 << 3)
-+/* This is a magic instruction that needs fixing up. */
-+#define FLAG_EXIT (1 << 4)
-+#define MAX_EXITS 5
-+
-+static void
-+bad_opcode(const char *name, uint32_t op)
-+{
-+ error("Unsupported opcode %0*x in %s", (op > 0xff) ? 4 : 2, op, name);
-+}
-+
-+/* Mark len bytes as scanned, Returns insn_size + len. Reports an error
-+ if these bytes have already been scanned. */
-+static int
-+eat_bytes(const char *name, char *flags, int insn, int insn_size, int len)
-+{
-+ while (len > 0) {
-+ /* This should never occur in sane code. */
-+ if (flags[insn + insn_size] & FLAG_SCANNED)
-+ error ("Overlapping instructions in %s", name);
-+ flags[insn + insn_size] |= FLAG_SCANNED;
-+ insn_size++;
-+ len--;
-+ }
-+ return insn_size;
-+}
-+
-+static void
-+trace_i386_insn (const char *name, uint8_t *start_p, char *flags, int insn,
-+ int len)
-+{
-+ uint8_t *ptr;
-+ uint8_t op;
-+ int modrm;
-+ int is_prefix;
-+ int op_size;
-+ int addr_size;
-+ int insn_size;
-+ int is_ret;
-+ int is_condjmp;
-+ int is_jmp;
-+ int is_exit;
-+ int is_pcrel;
-+ int immed;
-+ int seen_rexw;
-+ int32_t disp;
-+
-+ ptr = start_p + insn;
-+ /* nonzero if this insn has a ModR/M byte. */
-+ modrm = 1;
-+ /* The size of the immediate value in this instruction. */
-+ immed = 0;
-+ /* The operand size. */
-+ op_size = 4;
-+ /* The address size */
-+ addr_size = 4;
-+ /* The total length of this instruction. */
-+ insn_size = 0;
-+ is_prefix = 1;
-+ is_ret = 0;
-+ is_condjmp = 0;
-+ is_jmp = 0;
-+ is_exit = 0;
-+ seen_rexw = 0;
-+ is_pcrel = 0;
-+
-+ while (is_prefix) {
-+ op = ptr[insn_size];
-+ insn_size = eat_bytes(name, flags, insn, insn_size, 1);
-+ is_prefix = 0;
-+ switch (op >> 4) {
-+ case 0:
-+ case 1:
-+ case 2:
-+ case 3:
-+ if (op == 0x0f) {
-+ /* two-byte opcode. */
-+ op = ptr[insn_size];
-+ insn_size = eat_bytes(name, flags, insn, insn_size, 1);
-+ switch (op >> 4) {
-+ case 0:
-+ if ((op & 0xf) > 3)
-+ modrm = 0;
-+ break;
-+ case 1: /* vector move or prefetch */
-+ case 2: /* various moves and vector compares. */
-+ case 4: /* cmov */
-+ case 5: /* vector instructions */
-+ case 6:
-+ case 13:
-+ case 14:
-+ case 15:
-+ break;
-+ case 7: /* mmx */
-+ if (op & 0x77) /* emms */
-+ modrm = 0;
-+ break;
-+ case 3: /* wrmsr, rdtsc, rdmsr, rdpmc, sysenter, sysexit */
-+ modrm = 0;
-+ break;
-+ case 8: /* long conditional jump */
-+ is_condjmp = 1;
-+ immed = op_size;
-+ modrm = 0;
-+ break;
-+ case 9: /* setcc */
-+ break;
-+ case 10:
-+ switch (op & 0x7) {
-+ case 0: /* push fs/gs */
-+ case 1: /* pop fs/gs */
-+ case 2: /* cpuid/rsm */
-+ modrm = 0;
-+ break;
-+ case 4: /* shld/shrd immediate */
-+ immed = 1;
-+ break;
-+ default: /* Normal instructions with a ModR/M byte. */
-+ break;
-+ }
-+ break;
-+ case 11:
-+ switch (op & 0xf) {
-+ case 10: /* bt, bts, btr, btc */
-+ immed = 1;
-+ break;
-+ default:
-+ /* cmpxchg, lss, btr, lfs, lgs, movzx, btc, bsf, bsr
-+ undefined, and movsx */
-+ break;
-+ }
-+ break;
-+ case 12:
-+ if (op & 8) {
-+ /* bswap */
-+ modrm = 0;
-+ } else {
-+ switch (op & 0x7) {
-+ case 2:
-+ case 4:
-+ case 5:
-+ case 6:
-+ immed = 1;
-+ break;
-+ default:
-+ break;
-+ }
-+ }
-+ break;
-+ }
-+ } else if ((op & 0x07) <= 0x3) {
-+ /* General arithmentic ax. */
-+ } else if ((op & 0x07) <= 0x5) {
-+ /* General arithmetic ax, immediate. */
-+ if (op & 0x01)
-+ immed = op_size;
-+ else
-+ immed = 1;
-+ modrm = 0;
-+ } else if ((op & 0x23) == 0x22) {
-+ /* Segment prefix. */
-+ is_prefix = 1;
-+ } else {
-+ /* Segment register push/pop or DAA/AAA/DAS/AAS. */
-+ modrm = 0;
-+ }
-+ break;
-+
-+#if defined(HOST_X86_64)
-+ case 4: /* rex prefix. */
-+ is_prefix = 1;
-+ /* The address/operand size is actually 64-bit, but the immediate
-+ values in the instruction are still 32-bit. */
-+ op_size = 4;
-+ addr_size = 4;
-+ if (op & 8)
-+ seen_rexw = 1;
-+ break;
-+#else
-+ case 4: /* inc/dec register. */
-+#endif
-+ case 5: /* push/pop general register. */
-+ modrm = 0;
-+ break;
-+
-+ case 6:
-+ switch (op & 0x0f) {
-+ case 0: /* pusha */
-+ case 1: /* popa */
-+ modrm = 0;
-+ break;
-+ case 2: /* bound */
-+ case 3: /* arpl */
-+ break;
-+ case 4: /* FS */
-+ case 5: /* GS */
-+ is_prefix = 1;
-+ break;
-+ case 6: /* opcode size prefix. */
-+ op_size = 2;
-+ is_prefix = 1;
-+ break;
-+ case 7: /* Address size prefix. */
-+ addr_size = 2;
-+ is_prefix = 1;
-+ break;
-+ case 8: /* push immediate */
-+ immed = op_size;
-+ modrm = 0;
-+ break;
-+ case 10: /* push 8-bit immediate */
-+ immed = 1;
-+ modrm = 0;
-+ break;
-+ case 9: /* imul immediate */
-+ immed = op_size;
-+ break;
-+ case 11: /* imul 8-bit immediate */
-+ immed = 1;
-+ break;
-+ case 12: /* insb */
-+ case 13: /* insw */
-+ case 14: /* outsb */
-+ case 15: /* outsw */
-+ modrm = 0;
-+ break;
-+ }
-+ break;
-+
-+ case 7: /* Short conditional jump. */
-+ is_condjmp = 1;
-+ immed = 1;
-+ modrm = 0;
-+ break;
-+
-+ case 8:
-+ if ((op & 0xf) <= 3) {
-+ /* arithmetic immediate. */
-+ if ((op & 3) == 1)
-+ immed = op_size;
-+ else
-+ immed = 1;
-+ }
-+ /* else test, xchg, mov, lea or pop general. */
-+ break;
-+
-+ case 9:
-+ /* Various single-byte opcodes with no modrm byte. */
-+ modrm = 0;
-+ if (op == 10) {
-+ /* Call */
-+ immed = 4;
-+ }
-+ break;
-+
-+ case 10:
-+ switch ((op & 0xe) >> 1) {
-+ case 0: /* mov absoliute immediate. */
-+ case 1:
-+ if (seen_rexw)
-+ immed = 8;
-+ else
-+ immed = addr_size;
-+ break;
-+ case 4: /* test immediate. */
-+ if (op & 1)
-+ immed = op_size;
-+ else
-+ immed = 1;
-+ break;
-+ default: /* Various string ops. */
-+ break;
-+ }
-+ modrm = 0;
-+ break;
-+
-+ case 11: /* move immediate to register */
-+ if (op & 8) {
-+ if (seen_rexw)
-+ immed = 8;
-+ else
-+ immed = op_size;
-+ } else {
-+ immed = 1;
-+ }
-+ modrm = 0;
-+ break;
-+
-+ case 12:
-+ switch (op & 0xf) {
-+ case 0: /* shift immediate */
-+ case 1:
-+ immed = 1;
-+ break;
-+ case 2: /* ret immediate */
-+ immed = 2;
-+ modrm = 0;
-+ bad_opcode(name, op);
-+ break;
-+ case 3: /* ret */
-+ modrm = 0;
-+ is_ret = 1;
-+ case 4: /* les */
-+ case 5: /* lds */
-+ break;
-+ case 6: /* mov immediate byte */
-+ immed = 1;
-+ break;
-+ case 7: /* mov immediate */
-+ immed = op_size;
-+ break;
-+ case 8: /* enter */
-+ /* TODO: Is this right? */
-+ immed = 3;
-+ modrm = 0;
-+ break;
-+ case 10: /* retf immediate */
-+ immed = 2;
-+ modrm = 0;
-+ bad_opcode(name, op);
-+ break;
-+ case 13: /* int */
-+ immed = 1;
-+ modrm = 0;
-+ break;
-+ case 11: /* retf */
-+ case 15: /* iret */
-+ modrm = 0;
-+ bad_opcode(name, op);
-+ break;
-+ default: /* leave, int3 or into */
-+ modrm = 0;
-+ break;
-+ }
-+ break;
-+
-+ case 13:
-+ if ((op & 0xf) >= 8) {
-+ /* Coprocessor escape. For our purposes this is just a normal
-+ instruction with a ModR/M byte. */
-+ } else if ((op & 0xf) >= 4) {
-+ /* AAM, AAD or XLAT */
-+ modrm = 0;
-+ }
-+ /* else shift instruction */
-+ break;
-+
-+ case 14:
-+ switch ((op & 0xc) >> 2) {
-+ case 0: /* loop or jcxz */
-+ is_condjmp = 1;
-+ immed = 1;
-+ break;
-+ case 1: /* in/out immed */
-+ immed = 1;
-+ break;
-+ case 2: /* call or jmp */
-+ switch (op & 3) {
-+ case 0: /* call */
-+ immed = op_size;
-+ break;
-+ case 1: /* long jump */
-+ immed = 4;
-+ is_jmp = 1;
-+ break;
-+ case 2: /* far jmp */
-+ bad_opcode(name, op);
-+ break;
-+ case 3: /* short jmp */
-+ immed = 1;
-+ is_jmp = 1;
-+ break;
-+ }
-+ break;
-+ case 3: /* in/out register */
-+ break;
-+ }
-+ modrm = 0;
-+ break;
-+
-+ case 15:
-+ switch ((op & 0xe) >> 1) {
-+ case 0:
-+ case 1:
-+ is_prefix = 1;
-+ break;
-+ case 2:
-+ case 4:
-+ case 5:
-+ case 6:
-+ modrm = 0;
-+ /* Some privileged insns are used as markers. */
-+ switch (op) {
-+ case 0xf4: /* hlt: Exit translation block. */
-+ is_exit = 1;
-+ break;
-+ case 0xfa: /* cli: Jump to label. */
-+ is_exit = 1;
-+ immed = 4;
-+ break;
-+ case 0xfb: /* sti: TB patch jump. */
-+ /* Mark the insn for patching, but continue sscanning. */
-+ flags[insn] |= FLAG_EXIT;
-+ immed = 4;
-+ break;
-+ }
-+ break;
-+ case 3: /* unary grp3 */
-+ if ((ptr[insn_size] & 0x38) == 0) {
-+ if (op == 0xf7)
-+ immed = op_size;
-+ else
-+ immed = 1; /* test immediate */
-+ }
-+ break;
-+ case 7: /* inc/dec grp4/5 */
-+ /* TODO: This includes indirect jumps. We should fail if we
-+ encounter one of these. */
-+ break;
-+ }
-+ break;
-+ }
-+ }
-+
-+ if (modrm) {
-+ if (addr_size != 4)
-+ error("16-bit addressing mode used in %s", name);
-+
-+ disp = 0;
-+ modrm = ptr[insn_size];
-+ insn_size = eat_bytes(name, flags, insn, insn_size, 1);
-+ modrm &= 0xc7;
-+ switch ((modrm & 0xc0) >> 6) {
-+ case 0:
-+ if (modrm == 5)
-+ disp = 4;
-+ break;
-+ case 1:
-+ disp = 1;
-+ break;
-+ case 2:
-+ disp = 4;
-+ break;
-+ }
-+ if ((modrm & 0xc0) != 0xc0 && (modrm & 0x7) == 4) {
-+ /* SIB byte */
-+ if (modrm == 4 && (ptr[insn_size] & 0x7) == 5) {
-+ disp = 4;
-+ is_pcrel = 1;
-+ }
-+ insn_size = eat_bytes(name, flags, insn, insn_size, 1);
-+ }
-+ insn_size = eat_bytes(name, flags, insn, insn_size, disp);
-+ }
-+ insn_size = eat_bytes(name, flags, insn, insn_size, immed);
-+ if (is_condjmp || is_jmp) {
-+ if (immed == 1) {
-+ disp = (int8_t)*(ptr + insn_size - 1);
-+ } else {
-+ disp = (((int32_t)*(ptr + insn_size - 1)) << 24)
-+ | (((int32_t)*(ptr + insn_size - 2)) << 16)
-+ | (((int32_t)*(ptr + insn_size - 3)) << 8)
-+ | *(ptr + insn_size - 4);
-+ }
-+ disp += insn_size;
-+ /* Jumps to external symbols point to the address of the offset
-+ before relocation. */
-+ /* ??? These are probably a tailcall. We could fix them up by
-+ replacing them with jmp to EOB + call, but it's easier to just
-+ prevent the compiler generating them. */
-+ if (disp == 1)
-+ error("Unconditional jump (sibcall?) in %s", name);
-+ disp += insn;
-+ if (disp < 0 || disp > len)
-+ error("Jump outside instruction in %s", name);
-+
-+ if ((flags[disp] & (FLAG_INSN | FLAG_SCANNED)) == FLAG_SCANNED)
-+ error("Overlapping instructions in %s", name);
-+
-+ flags[disp] |= (FLAG_INSN | FLAG_TARGET);
-+ is_pcrel = 1;
-+ }
-+ if (is_pcrel) {
-+ /* Mark the following insn as a jump target. This will stop
-+ this instruction being moved. */
-+ flags[insn + insn_size] |= FLAG_TARGET;
-+ }
-+ if (is_ret)
-+ flags[insn] |= FLAG_RET;
-+
-+ if (is_exit)
-+ flags[insn] |= FLAG_EXIT;
-+
-+ if (!(is_jmp || is_ret || is_exit))
-+ flags[insn + insn_size] |= FLAG_INSN;
-+}
-+
-+/* Scan a function body. Returns the position of the return sequence.
-+ Sets *patch_bytes to the number of bytes that need to be copied from that
-+ location. If no patching is required (ie. the return is the last insn)
-+ *patch_bytes will be set to -1. *plen is the number of code bytes to copy.
-+ */
-+static int trace_i386_op(const char * name, uint8_t *start_p, int *plen,
-+ int *patch_bytes, int *exit_addrs)
-+{
-+ char *flags;
-+ int more;
-+ int insn;
-+ int retpos;
-+ int bytes;
-+ int num_exits;
-+ int len;
-+ int last_insn;
-+
-+ len = *plen;
-+ flags = malloc(len + 1);
-+ memset(flags, 0, len + 1);
-+ flags[0] |= FLAG_INSN;
-+ more = 1;
-+ while (more) {
-+ more = 0;
-+ for (insn = 0; insn < len; insn++) {
-+ if ((flags[insn] & (FLAG_INSN | FLAG_SCANNED)) == FLAG_INSN) {
-+ trace_i386_insn(name, start_p, flags, insn, len);
-+ more = 1;
-+ }
-+ }
-+ }
-+
-+ /* Strip any unused code at the end of the function. */
-+ while (len > 0 && flags[len - 1] == 0)
-+ len--;
-+
-+ retpos = -1;
-+ num_exits = 0;
-+ last_insn = 0;
-+ for (insn = 0; insn < len; insn++) {
-+ if (flags[insn] & FLAG_RET) {
-+ /* ??? In theory it should be possible to handle multiple return
-+ points. In practice it's not worth the effort. */
-+ if (retpos != -1)
-+ error("Multiple return instructions in %s", name);
-+ retpos = insn;
-+ }
-+ if (flags[insn] & FLAG_EXIT) {
-+ if (num_exits == MAX_EXITS)
-+ error("Too many block exits in %s", name);
-+ exit_addrs[num_exits] = insn;
-+ num_exits++;
-+ }
-+ if (flags[insn] & FLAG_INSN)
-+ last_insn = insn;
-+ }
-+
-+ exit_addrs[num_exits] = -1;
-+ if (retpos == -1) {
-+ if (num_exits == 0) {
-+ error ("No return instruction found in %s", name);
-+ } else {
-+ retpos = len;
-+ last_insn = len;
-+ }
-+ }
-+
-+ /* If the return instruction is the last instruction we can just
-+ remove it. */
-+ if (retpos == last_insn)
-+ *patch_bytes = -1;
-+ else
-+ *patch_bytes = 0;
-+
-+ /* Back up over any nop instructions. */
-+ while (retpos > 0
-+ && (flags[retpos] & FLAG_TARGET) == 0
-+ && (flags[retpos - 1] & FLAG_INSN) != 0
-+ && start_p[retpos - 1] == 0x90) {
-+ retpos--;
-+ }
-+
-+ if (*patch_bytes == -1) {
-+ *plen = retpos;
-+ free (flags);
-+ return retpos;
-+ }
-+ *plen = len;
-+
-+ /* The ret is in the middle of the function. Find four more bytes that
-+ so the ret can be replaced by a jmp. */
-+ /* ??? Use a short jump where possible. */
-+ bytes = 4;
-+ insn = retpos + 1;
-+ /* We can clobber everything up to the next jump target. */
-+ while (insn < len && bytes > 0 && (flags[insn] & FLAG_TARGET) == 0) {
-+ insn++;
-+ bytes--;
-+ }
-+ if (bytes > 0) {
-+ /* ???: Strip out nop blocks. */
-+ /* We can't do the replacement without clobbering anything important.
-+ Copy preceeding instructions(s) to give us some space. */
-+ while (retpos > 0) {
-+ /* If this byte is the target of a jmp we can't move it. */
-+ if (flags[retpos] & FLAG_TARGET)
-+ break;
-+
-+ (*patch_bytes)++;
-+ bytes--;
-+ retpos--;
-+
-+ /* Break out of the loop if we have enough space and this is either
-+ the first byte of an instruction or a pad byte. */
-+ if ((flags[retpos] & (FLAG_INSN | FLAG_SCANNED)) != FLAG_SCANNED
-+ && bytes <= 0) {
-+ break;
-+ }
-+ }
-+ }
-+
-+ if (bytes > 0)
-+ error("Unable to replace ret with jmp in %s\n", name);
-+
-+ free(flags);
-+ return retpos;
-+}
-+
-+#endif
-+
- #define MAX_ARGS 3
-
- /* generate op code */
-@@ -1442,6 +2082,11 @@
- uint8_t args_present[MAX_ARGS];
- const char *sym_name, *p;
- EXE_RELOC *rel;
-+#if defined(HOST_I386) || defined(HOST_X86_64)
-+ int patch_bytes;
-+ int retpos;
-+ int exit_addrs[MAX_EXITS];
-+#endif
-
- /* Compute exact size excluding prologue and epilogue instructions.
- * Increment start_offset to skip epilogue instructions, then compute
-@@ -1452,33 +2097,12 @@
- p_end = p_start + size;
- start_offset = offset;
- #if defined(HOST_I386) || defined(HOST_X86_64)
--#ifdef CONFIG_FORMAT_COFF
-- {
-- uint8_t *p;
-- p = p_end - 1;
-- if (p == p_start)
-- error("empty code for %s", name);
-- while (*p != 0xc3) {
-- p--;
-- if (p <= p_start)
-- error("ret or jmp expected at the end of %s", name);
-- }
-- copy_size = p - p_start;
-- }
--#else
- {
- int len;
- len = p_end - p_start;
-- if (len == 0)
-- error("empty code for %s", name);
-- if (p_end[-1] == 0xc3) {
-- len--;
-- } else {
-- error("ret or jmp expected at the end of %s", name);
-- }
-+ retpos = trace_i386_op(name, p_start, &len, &patch_bytes, exit_addrs);
- copy_size = len;
- }
--#endif
- #elif defined(HOST_PPC)
- {
- uint8_t *p;
-@@ -1710,6 +2334,13 @@
- }
-
- if (gen_switch == 2) {
-+#if defined(HOST_I386) || defined(HOST_X86_64)
-+ if (patch_bytes != -1)
-+ copy_size += patch_bytes;
-+#ifdef DEBUG_OP
-+ copy_size += 2;
-+#endif
-+#endif
- fprintf(outfile, "DEF(%s, %d, %d)\n", name + 3, nb_args, copy_size);
- } else if (gen_switch == 1) {
-
-@@ -1915,7 +2546,43 @@
- #error unsupport object format
- #endif
- }
-+ }
-+ /* Replace the marker instructions with the actual opcodes. */
-+ for (i = 0; exit_addrs[i] != -1; i++) {
-+ int op;
-+ switch (p_start[exit_addrs[i]])
-+ {
-+ case 0xf4: op = 0xc3; break; /* hlt -> ret */
-+ case 0xfa: op = 0xe9; break; /* cli -> jmp */
-+ case 0xfb: op = 0xe9; break; /* sti -> jmp */
-+ default: error("Internal error");
-+ }
-+ fprintf(outfile,
-+ " *(uint8_t *)(gen_code_ptr + %d) = 0x%x;\n",
-+ exit_addrs[i], op);
- }
-+ /* Fix up the return instruction. */
-+ if (patch_bytes != -1) {
-+ if (patch_bytes) {
-+ fprintf(outfile, " memcpy(gen_code_ptr + %d,"
-+ "gen_code_ptr + %d, %d);\n",
-+ copy_size, retpos, patch_bytes);
-+ }
-+ fprintf(outfile,
-+ " *(uint8_t *)(gen_code_ptr + %d) = 0xe9;\n",
-+ retpos);
-+ fprintf(outfile,
-+ " *(uint32_t *)(gen_code_ptr + %d) = 0x%x;\n",
-+ retpos + 1, copy_size - (retpos + 5));
-+
-+ copy_size += patch_bytes;
-+ }
-+#ifdef DEBUG_OP
-+ fprintf(outfile,
-+ " *(uint16_t *)(gen_code_ptr + %d) = 0x9090;\n",
-+ copy_size);
-+ copy_size += 2;
-+#endif
- }
- #elif defined(HOST_X86_64)
- {
-@@ -1949,6 +2616,42 @@
- }
- }
- }
-+ /* Replace the marker instructions with the actual opcodes. */
-+ for (i = 0; exit_addrs[i] != -1; i++) {
-+ int op;
-+ switch (p_start[exit_addrs[i]])
-+ {
-+ case 0xf4: op = 0xc3; break; /* hlt -> ret */
-+ case 0xfa: op = 0xe9; break; /* cli -> jmp */
-+ case 0xfb: op = 0xe9; break; /* sti -> jmp */
-+ default: error("Internal error");
-+ }
-+ fprintf(outfile,
-+ " *(uint8_t *)(gen_code_ptr + %d) = 0x%x;\n",
-+ exit_addrs[i], op);
-+ }
-+ /* Fix up the return instruction. */
-+ if (patch_bytes != -1) {
-+ if (patch_bytes) {
-+ fprintf(outfile, " memcpy(gen_code_ptr + %d,"
-+ "gen_code_ptr + %d, %d);\n",
-+ copy_size, retpos, patch_bytes);
-+ }
-+ fprintf(outfile,
-+ " *(uint8_t *)(gen_code_ptr + %d) = 0xe9;\n",
-+ retpos);
-+ fprintf(outfile,
-+ " *(uint32_t *)(gen_code_ptr + %d) = 0x%x;\n",
-+ retpos + 1, copy_size - (retpos + 5));
-+
-+ copy_size += patch_bytes;
-+ }
-+#ifdef DEBUG_OP
-+ fprintf(outfile,
-+ " *(uint16_t *)(gen_code_ptr + %d) = 0x9090;\n",
-+ copy_size);
-+ copy_size += 2;
-+#endif
- }
- #elif defined(HOST_PPC)
- {
-diff -Naru qemu-neo1973.orig/dyngen-exec.h qemu-neo1973/dyngen-exec.h
---- qemu-neo1973.orig/dyngen-exec.h 2007-06-24 13:56:38.000000000 +0200
-+++ qemu-neo1973/dyngen-exec.h 2007-06-24 14:35:52.000000000 +0200
-@@ -194,7 +194,12 @@
- #endif
-
- /* force GCC to generate only one epilog at the end of the function */
-+#if defined(__i386__) || defined(__x86_64__)
-+/* Also add 4 bytes of padding so that we can replace the ret with a jmp. */
-+#define FORCE_RET() asm volatile ("nop;nop;nop;nop");
-+#else
- #define FORCE_RET() __asm__ __volatile__("" : : : "memory");
-+#endif
-
- #ifndef OPPROTO
- #define OPPROTO
-@@ -244,11 +249,18 @@
- #endif
-
- #if defined(__i386__)
--#define EXIT_TB() asm volatile ("ret")
--#define GOTO_LABEL_PARAM(n) asm volatile ("jmp " ASM_NAME(__op_gen_label) #n)
-+/* Dyngen will replace hlt instructions with a ret instruction. Inserting a
-+ ret directly would confuse dyngen. */
-+#define EXIT_TB() asm volatile ("hlt")
-+/* Dyngen will replace cli with 0x9e (jmp).
-+ We generate the offset manually. */
-+#define GOTO_LABEL_PARAM(n) \
-+ asm volatile ("cli;.long " ASM_NAME(__op_gen_label) #n " - 1f;1:")
- #elif defined(__x86_64__)
--#define EXIT_TB() asm volatile ("ret")
--#define GOTO_LABEL_PARAM(n) asm volatile ("jmp " ASM_NAME(__op_gen_label) #n)
-+/* The same as i386. */
-+#define EXIT_TB() asm volatile ("hlt")
-+#define GOTO_LABEL_PARAM(n) \
-+ asm volatile ("cli;.long " ASM_NAME(__op_gen_label) #n " - 1f;1:")
- #elif defined(__powerpc__)
- #define EXIT_TB() asm volatile ("blr")
- #define GOTO_LABEL_PARAM(n) asm volatile ("b " ASM_NAME(__op_gen_label) #n)
-diff -Naru qemu-neo1973.orig/exec-all.h qemu-neo1973/exec-all.h
---- qemu-neo1973.orig/exec-all.h 2007-06-24 14:31:58.000000000 +0200
-+++ qemu-neo1973/exec-all.h 2007-06-24 14:33:11.000000000 +0200
-@@ -329,14 +329,15 @@
-
- #elif defined(__i386__) && defined(USE_DIRECT_JUMP)
-
--/* we patch the jump instruction directly */
-+/* we patch the jump instruction directly. Use sti in place of the actual
-+ jmp instruction so that dyngen can patch in the correct result. */
- #define GOTO_TB(opname, tbparam, n)\
- do {\
- asm volatile (".section .data\n"\
- ASM_OP_LABEL_NAME(n, opname) ":\n"\
- ".long 1f\n"\
- ASM_PREVIOUS_SECTION \
-- "jmp " ASM_NAME(__op_jmp) #n "\n"\
-+ "sti;.long " ASM_NAME(__op_jmp) #n " - 1f\n"\
- "1:\n");\
- } while (0)
-
-diff -Naru qemu-neo1973.orig/target-ppc/exec.h qemu-neo1973/target-ppc/exec.h
---- qemu-neo1973.orig/target-ppc/exec.h 2007-06-24 13:56:32.000000000 +0200
-+++ qemu-neo1973/target-ppc/exec.h 2007-06-24 14:33:11.000000000 +0200
-@@ -66,11 +66,7 @@
- #define FT1 (env->ft1)
- #define FT2 (env->ft2)
-
--#if defined (DEBUG_OP)
--# define RETURN() __asm__ __volatile__("nop" : : : "memory");
--#else
--# define RETURN() __asm__ __volatile__("" : : : "memory");
--#endif
-+#define RETURN() FORCE_RET()
-
- static inline target_ulong rotl8 (target_ulong i, int n)
- {
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch
deleted file mode 100644
index 8f5e9d8b4b..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-amd64-32b-mapping-0.9.0.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -Naru qemu-snapshot-2007-07-01_05.orig/linux-user/mmap.c qemu-snapshot-2007-07-01_05/linux-user/mmap.c
---- qemu-snapshot-2007-07-01_05.orig/linux-user/mmap.c 2007-06-03 17:31:32.000000000 +0200
-+++ qemu-snapshot-2007-07-01_05/linux-user/mmap.c 2007-07-02 14:00:30.000000000 +0200
-@@ -234,7 +234,7 @@
- host_offset = offset & qemu_host_page_mask;
- host_len = len + offset - host_offset;
- host_start = (long)mmap(real_start ? g2h(real_start) : NULL,
-- host_len, prot, flags, fd, host_offset);
-+ host_len, prot, (flags | MAP_32BIT), fd, host_offset);
- if (host_start == -1)
- return host_start;
- /* update start so that it points to the file position at 'offset' */
-@@ -388,7 +388,7 @@
- int prot;
-
- /* XXX: use 5 args syscall */
-- new_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
-+ new_addr = (long)mremap(g2h(old_addr), old_size, new_size, (flags | MAP_32BIT));
- if (new_addr == -1)
- return new_addr;
- new_addr = h2g(new_addr);
diff --git a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch b/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch
deleted file mode 100644
index 08d5513f36..0000000000
--- a/packages/qemu/qemu-0.9.0+cvs20070701/qemu-sdl-cursor-0.9.0.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Naru qemu-snapshot-2007-06-24_05.orig/sdl.c qemu-snapshot-2007-06-24_05/sdl.c
---- qemu-snapshot-2007-06-24_05.orig/sdl.c 2007-06-21 23:08:02.000000000 +0200
-+++ qemu-snapshot-2007-06-24_05/sdl.c 2007-06-24 16:33:20.000000000 +0200
-@@ -245,7 +245,7 @@
-
- if (kbd_mouse_is_absolute()) {
- SDL_ShowCursor(1);
-- SDL_SetCursor(sdl_cursor_hidden);
-+ /* SDL_SetCursor(sdl_cursor_hidden); */
- } else {
- SDL_ShowCursor(0);
- }
diff --git a/packages/qemu/qemu-0.9.1/.mtn2git_empty b/packages/qemu/qemu-0.9.1/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/.mtn2git_empty
diff --git a/packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch b/packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch
new file mode 100644
index 0000000000..40264ed443
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/02_snapshot_use_tmpdir.patch
@@ -0,0 +1,23 @@
+#DPATCHLEVEL=0
+---
+# block.c | 6 +++++-
+# 1 file changed, 5 insertions(+), 1 deletion(-)
+#
+Index: block.c
+===================================================================
+--- block.c.orig 2007-12-03 23:47:25.000000000 +0000
++++ block.c 2007-12-03 23:47:31.000000000 +0000
+@@ -191,8 +191,12 @@ void get_tmp_filename(char *filename, in
+ void get_tmp_filename(char *filename, int size)
+ {
+ int fd;
++ char *tmpdir;
+ /* XXX: race condition possible */
+- pstrcpy(filename, size, "/tmp/vl.XXXXXX");
++ tmpdir = getenv("TMPDIR");
++ if (!tmpdir)
++ tmpdir = "/tmp";
++ snprintf(filename, size, "%s/vl.XXXXXX", tmpdir);
+ fd = mkstemp(filename);
+ close(fd);
+ }
diff --git a/packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch b/packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch
new file mode 100644
index 0000000000..31c9da491d
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/04_do_not_print_rtc_freq_if_ok.patch
@@ -0,0 +1,26 @@
+#DPATCHLEVEL=1
+---
+# vl.c | 5 ++++-
+# 1 file changed, 4 insertions(+), 1 deletion(-)
+#
+Index: qemu/vl.c
+===================================================================
+--- qemu.orig/vl.c 2007-12-03 15:44:35.000000000 +0000
++++ qemu/vl.c 2007-12-03 15:51:03.000000000 +0000
+@@ -1289,12 +1289,15 @@ static void hpet_stop_timer(struct qemu_
+
+ static int rtc_start_timer(struct qemu_alarm_timer *t)
+ {
++ unsigned long current_rtc_freq = 0;
+ int rtc_fd;
+
+ TFR(rtc_fd = open("/dev/rtc", O_RDONLY));
+ if (rtc_fd < 0)
+ return -1;
+- if (ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
++ ioctl(rtc_fd, RTC_IRQP_READ, &current_rtc_freq);
++ if (current_rtc_freq != RTC_FREQ &&
++ ioctl(rtc_fd, RTC_IRQP_SET, RTC_FREQ) < 0) {
+ fprintf(stderr, "Could not configure '/dev/rtc' to have a 1024 Hz timer. This is not a fatal\n"
+ "error, but for better emulation accuracy either use a 2.6 host Linux kernel or\n"
+ "type 'echo 1024 > /proc/sys/dev/rtc/max-user-freq' as root.\n");
diff --git a/packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch b/packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch
new file mode 100644
index 0000000000..fdd922605e
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/05_non-fatal_if_linux_hd_missing.patch
@@ -0,0 +1,17 @@
+#DPATCHLEVEL=1
+---
+# hw/pc.c | 1 -
+# 1 file changed, 1 deletion(-)
+#
+Index: qemu/hw/pc.c
+===================================================================
+--- qemu.orig/hw/pc.c 2007-12-03 23:47:25.000000000 +0000
++++ qemu/hw/pc.c 2007-12-03 23:47:38.000000000 +0000
+@@ -385,7 +385,6 @@ static void generate_bootsect(uint32_t g
+ if (bs_table[0] == NULL) {
+ fprintf(stderr, "A disk image must be given for 'hda' when booting "
+ "a Linux kernel\n");
+- exit(1);
+ }
+
+ memset(bootsect, 0, sizeof(bootsect));
diff --git a/packages/qemu/qemu-0.9.1/06_exit_segfault.patch b/packages/qemu/qemu-0.9.1/06_exit_segfault.patch
new file mode 100644
index 0000000000..06123d0626
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/06_exit_segfault.patch
@@ -0,0 +1,45 @@
+#DPATCHLEVEL=0
+---
+# linux-user/main.c | 8 ++++----
+# 1 file changed, 4 insertions(+), 4 deletions(-)
+#
+Index: linux-user/main.c
+===================================================================
+--- linux-user/main.c.orig 2007-12-03 23:47:25.000000000 +0000
++++ linux-user/main.c 2007-12-03 23:47:41.000000000 +0000
+@@ -714,7 +714,7 @@ void cpu_loop (CPUSPARCState *env)
+ default:
+ printf ("Unhandled trap: 0x%x\n", trapnr);
+ cpu_dump_state(env, stderr, fprintf, 0);
+- exit (1);
++ _exit (1);
+ }
+ process_pending_signals (env);
+ }
+@@ -1634,7 +1634,7 @@ void cpu_loop (CPUState *env)
+ default:
+ printf ("Unhandled trap: 0x%x\n", trapnr);
+ cpu_dump_state(env, stderr, fprintf, 0);
+- exit (1);
++ _exit (1);
+ }
+ process_pending_signals (env);
+ }
+@@ -1954,7 +1954,7 @@ int main(int argc, char **argv)
+ for(item = cpu_log_items; item->mask != 0; item++) {
+ printf("%-10s %s\n", item->name, item->help);
+ }
+- exit(1);
++ _exit(1);
+ }
+ cpu_set_log(mask);
+ } else if (!strcmp(r, "s")) {
+@@ -1973,7 +1973,7 @@ int main(int argc, char **argv)
+ if (qemu_host_page_size == 0 ||
+ (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
+ fprintf(stderr, "page size must be a power of two\n");
+- exit(1);
++ _exit(1);
+ }
+ } else if (!strcmp(r, "g")) {
+ gdbstub_port = atoi(argv[optind++]);
diff --git a/packages/qemu/qemu-0.9.1/10_signal_jobs.patch b/packages/qemu/qemu-0.9.1/10_signal_jobs.patch
new file mode 100644
index 0000000000..34282adc9d
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/10_signal_jobs.patch
@@ -0,0 +1,26 @@
+#DPATCHLEVEL=0
+---
+# linux-user/signal.c | 7 ++++++-
+# 1 file changed, 6 insertions(+), 1 deletion(-)
+#
+Index: linux-user/signal.c
+===================================================================
+--- linux-user/signal.c.orig 2007-12-03 15:40:26.000000000 +0000
++++ linux-user/signal.c 2007-12-03 15:55:49.000000000 +0000
+@@ -364,10 +364,15 @@ int queue_signal(int sig, target_siginfo
+ k = &sigact_table[sig - 1];
+ handler = k->sa._sa_handler;
+ if (handler == TARGET_SIG_DFL) {
++ if (sig == TARGET_SIGTSTP || sig == TARGET_SIGTTIN || sig == TARGET_SIGTTOU) {
++ kill(getpid(),SIGSTOP);
++ return 0;
++ } else
+ /* default handler : ignore some signal. The other are fatal */
+ if (sig != TARGET_SIGCHLD &&
+ sig != TARGET_SIGURG &&
+- sig != TARGET_SIGWINCH) {
++ sig != TARGET_SIGWINCH &&
++ sig != TARGET_SIGCONT) {
+ force_sig(sig);
+ } else {
+ return 0; /* indicate ignored */
diff --git a/packages/qemu/qemu-0.9.1/11_signal_sigaction.patch b/packages/qemu/qemu-0.9.1/11_signal_sigaction.patch
new file mode 100644
index 0000000000..33c5e8b12d
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/11_signal_sigaction.patch
@@ -0,0 +1,21 @@
+#DPATCHLEVEL=0
+---
+# linux-user/signal.c | 5 +++++
+# 1 file changed, 5 insertions(+)
+#
+Index: linux-user/signal.c
+===================================================================
+--- linux-user/signal.c.orig 2007-12-03 23:47:44.000000000 +0000
++++ linux-user/signal.c 2007-12-03 23:47:46.000000000 +0000
+@@ -512,6 +512,11 @@ int do_sigaction(int sig, const struct t
+
+ if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP)
+ return -EINVAL;
++
++ /* no point doing the stuff as those are not allowed for sigaction */
++ if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP))
++ return -EINVAL;
++
+ k = &sigact_table[sig - 1];
+ #if defined(DEBUG_SIGNAL)
+ fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n",
diff --git a/packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch b/packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch
new file mode 100644
index 0000000000..6017df0f6d
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/22_net_tuntap_stall.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=0
+---
+# vl.c | 2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: vl.c
+===================================================================
+--- vl.c.orig 2007-12-03 23:47:36.000000000 +0000
++++ vl.c 2007-12-03 23:47:48.000000000 +0000
+@@ -4023,7 +4023,7 @@ static int tap_open(char *ifname, int if
+ return -1;
+ }
+ memset(&ifr, 0, sizeof(ifr));
+- ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
++ ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
+ if (ifname[0] != '\0')
+ pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
+ else
diff --git a/packages/qemu/qemu-0.9.1/31_syscalls.patch b/packages/qemu/qemu-0.9.1/31_syscalls.patch
new file mode 100644
index 0000000000..95a7332ee8
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/31_syscalls.patch
@@ -0,0 +1,48 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c | 11 ++++++++---
+# 1 file changed, 8 insertions(+), 3 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig 2007-12-03 19:32:56.000000000 +0000
++++ linux-user/syscall.c 2007-12-03 19:33:41.000000000 +0000
+@@ -250,6 +250,7 @@ extern int getresuid(uid_t *, uid_t *, u
+ extern int setresgid(gid_t, gid_t, gid_t);
+ extern int getresgid(gid_t *, gid_t *, gid_t *);
+ extern int setgroups(int, gid_t *);
++extern int uselib(const char*);
+
+ #define ERRNO_TABLE_SIZE 1200
+
+@@ -4024,7 +4025,8 @@ abi_long do_syscall(void *cpu_env, int n
+ #endif
+ #ifdef TARGET_NR_uselib
+ case TARGET_NR_uselib:
+- goto unimplemented;
++ ret = get_errno(uselib(path((const char*)arg1)));
++ break;
+ #endif
+ #ifdef TARGET_NR_swapon
+ case TARGET_NR_swapon:
+@@ -5289,7 +5291,9 @@ abi_long do_syscall(void *cpu_env, int n
+ goto unimplemented;
+ #ifdef TARGET_NR_mincore
+ case TARGET_NR_mincore:
+- goto unimplemented;
++ /*page_unprotect_range((void*)arg3, ((size_t)arg2 + TARGET_PAGE_SIZE - 1) / TARGET_PAGE_SIZE);*/
++ ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
++ break;
+ #endif
+ #ifdef TARGET_NR_madvise
+ case TARGET_NR_madvise:
+@@ -5429,7 +5433,8 @@ abi_long do_syscall(void *cpu_env, int n
+ break;
+ #ifdef TARGET_NR_readahead
+ case TARGET_NR_readahead:
+- goto unimplemented;
++ ret = get_errno(readahead((int)arg1, (off64_t)arg2, (size_t)arg3));
++ break;
+ #endif
+ #ifdef TARGET_NR_setxattr
+ case TARGET_NR_setxattr:
diff --git a/packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch b/packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch
new file mode 100644
index 0000000000..5e8dd75b0e
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/32_syscall_sysctl.patch
@@ -0,0 +1,55 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c | 32 +++++++++++++++++++++++++++++---
+# 1 file changed, 29 insertions(+), 3 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig 2007-12-03 15:56:24.000000000 +0000
++++ linux-user/syscall.c 2007-12-03 15:57:36.000000000 +0000
+@@ -52,6 +52,7 @@
+ //#include <sys/user.h>
+ #include <netinet/ip.h>
+ #include <netinet/tcp.h>
++#include <sys/sysctl.h>
+
+ #define termios host_termios
+ #define winsize host_winsize
+@@ -4739,9 +4740,34 @@ abi_long do_syscall(void *cpu_env, int n
+ break;
+ #endif
+ case TARGET_NR__sysctl:
+- /* We don't implement this, but ENOTDIR is always a safe
+- return value. */
+- ret = -TARGET_ENOTDIR;
++ {
++ struct __sysctl_args *args = (struct __sysctl_args *) arg1;
++ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
++ void *oldval, *newval;
++
++ name_target = (int *) tswapl((long) args->name);
++ nlen = tswapl(args->nlen);
++ oldval = (void *) tswapl((long) args->oldval);
++ oldlenp = (int *) tswapl((long) args->oldlenp);
++ oldlen = tswapl(*oldlenp);
++ newval = (void *) tswapl((long) args->newval);
++ newlen = tswapl(args->newlen);
++
++ name = alloca(nlen * sizeof (int));
++ for (i = 0; i < nlen; i++)
++ name[i] = tswapl(name_target[i]);
++
++ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
++ ret = get_errno(
++ sysctl(name, nlen, oldval, &oldlen, newval, newlen));
++ if (!is_error(ret)) {
++ *oldlenp = tswapl(oldlen);
++ }
++ } else {
++ gemu_log("qemu: Unsupported sysctl name\n");
++ ret = -ENOSYS;
++ }
++ }
+ break;
+ case TARGET_NR_sched_setparam:
+ {
diff --git a/packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch b/packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch
new file mode 100644
index 0000000000..3f733b6ab8
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/33_syscall_ppc_clone.patch
@@ -0,0 +1,22 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c | 6 +-----
+# 1 file changed, 1 insertion(+), 5 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig 2007-12-03 15:58:11.000000000 +0000
++++ linux-user/syscall.c 2007-12-03 15:58:46.000000000 +0000
+@@ -2750,11 +2750,7 @@ int do_fork(CPUState *env, unsigned int
+ if (!newsp)
+ newsp = env->gpr[1];
+ new_env->gpr[1] = newsp;
+- {
+- int i;
+- for (i = 7; i < 32; i++)
+- new_env->gpr[i] = 0;
+- }
++ new_env->gpr[3] = 0;
+ #elif defined(TARGET_SH4)
+ if (!newsp)
+ newsp = env->gregs[15];
diff --git a/packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch b/packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch
new file mode 100644
index 0000000000..54ee3e0948
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/39_syscall_fadvise64.patch
@@ -0,0 +1,21 @@
+---
+ linux-user/syscall.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig 2007-12-03 19:33:47.000000000 +0000
++++ linux-user/syscall.c 2007-12-03 19:33:48.000000000 +0000
+@@ -5317,6 +5317,12 @@ abi_long do_syscall(void *cpu_env, int n
+ ret = get_errno(mincore((void*)arg1, (size_t)arg2, (unsigned char*)arg3));
+ break;
+ #endif
++#ifdef TARGET_NR_fadvise64_64
++ case TARGET_NR_fadvise64_64:
++ /* Just return success */
++ ret = get_errno(0);
++ break;
++#endif
+ #ifdef TARGET_NR_madvise
+ case TARGET_NR_madvise:
+ /* A straight passthrough may not be safe because qemu sometimes
diff --git a/packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch b/packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch
new file mode 100644
index 0000000000..cea3afc7ff
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/41_arm_fpa_sigfpe.patch
@@ -0,0 +1,104 @@
+#DPATCHLEVEL=0
+---
+# linux-user/main.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++-
+# target-arm/nwfpe/fpa11.c | 7 ++++++
+# 2 files changed, 57 insertions(+), 1 deletion(-)
+#
+Index: linux-user/main.c
+===================================================================
+--- linux-user/main.c.orig 2007-12-03 15:59:10.000000000 +0000
++++ linux-user/main.c 2007-12-03 16:01:27.000000000 +0000
+@@ -377,18 +377,67 @@ void cpu_loop(CPUARMState *env)
+ {
+ TaskState *ts = env->opaque;
+ uint32_t opcode;
++ int rc;
+
+ /* we handle the FPU emulation here, as Linux */
+ /* we get the opcode */
+ /* FIXME - what to do if get_user() fails? */
+ get_user_u32(opcode, env->regs[15]);
+
+- if (EmulateAll(opcode, &ts->fpa, env) == 0) {
++ rc = EmulateAll(opcode, &ts->fpa, env);
++ if (rc == 0) { /* illegal instruction */
+ info.si_signo = SIGILL;
+ info.si_errno = 0;
+ info.si_code = TARGET_ILL_ILLOPN;
+ info._sifields._sigfault._addr = env->regs[15];
+ queue_signal(info.si_signo, &info);
++ } else if (rc < 0) { /* FP exception */
++ int arm_fpe=0;
++
++ /* translate softfloat flags to FPSR flags */
++ if (-rc & float_flag_invalid)
++ arm_fpe |= BIT_IOC;
++ if (-rc & float_flag_divbyzero)
++ arm_fpe |= BIT_DZC;
++ if (-rc & float_flag_overflow)
++ arm_fpe |= BIT_OFC;
++ if (-rc & float_flag_underflow)
++ arm_fpe |= BIT_UFC;
++ if (-rc & float_flag_inexact)
++ arm_fpe |= BIT_IXC;
++
++ FPSR fpsr = ts->fpa.fpsr;
++ //printf("fpsr 0x%x, arm_fpe 0x%x\n",fpsr,arm_fpe);
++
++ if (fpsr & (arm_fpe << 16)) { /* exception enabled? */
++ info.si_signo = SIGFPE;
++ info.si_errno = 0;
++
++ /* ordered by priority, least first */
++ if (arm_fpe & BIT_IXC) info.si_code = TARGET_FPE_FLTRES;
++ if (arm_fpe & BIT_UFC) info.si_code = TARGET_FPE_FLTUND;
++ if (arm_fpe & BIT_OFC) info.si_code = TARGET_FPE_FLTOVF;
++ if (arm_fpe & BIT_DZC) info.si_code = TARGET_FPE_FLTDIV;
++ if (arm_fpe & BIT_IOC) info.si_code = TARGET_FPE_FLTINV;
++
++ info._sifields._sigfault._addr = env->regs[15];
++ queue_signal(info.si_signo, &info);
++ } else {
++ env->regs[15] += 4;
++ }
++
++ /* accumulate unenabled exceptions */
++ if ((!(fpsr & BIT_IXE)) && (arm_fpe & BIT_IXC))
++ fpsr |= BIT_IXC;
++ if ((!(fpsr & BIT_UFE)) && (arm_fpe & BIT_UFC))
++ fpsr |= BIT_UFC;
++ if ((!(fpsr & BIT_OFE)) && (arm_fpe & BIT_OFC))
++ fpsr |= BIT_OFC;
++ if ((!(fpsr & BIT_DZE)) && (arm_fpe & BIT_DZC))
++ fpsr |= BIT_DZC;
++ if ((!(fpsr & BIT_IOE)) && (arm_fpe & BIT_IOC))
++ fpsr |= BIT_IOC;
++ ts->fpa.fpsr=fpsr;
+ } else {
+ /* increment PC */
+ env->regs[15] += 4;
+Index: target-arm/nwfpe/fpa11.c
+===================================================================
+--- target-arm/nwfpe/fpa11.c.orig 2007-12-03 15:40:26.000000000 +0000
++++ target-arm/nwfpe/fpa11.c 2007-12-03 15:59:11.000000000 +0000
+@@ -162,6 +162,8 @@ unsigned int EmulateAll(unsigned int opc
+ fpa11->initflag = 1;
+ }
+
++ set_float_exception_flags(0, &fpa11->fp_status);
++
+ if (TEST_OPCODE(opcode,MASK_CPRT))
+ {
+ //fprintf(stderr,"emulating CPRT\n");
+@@ -191,6 +193,11 @@ unsigned int EmulateAll(unsigned int opc
+ }
+
+ // restore_flags(flags);
++ if(nRc == 1 && get_float_exception_flags(&fpa11->fp_status))
++ {
++ //printf("fef 0x%x\n",float_exception_flags);
++ nRc=-get_float_exception_flags(&fpa11->fp_status);
++ }
+
+ //printf("returning %d\n",nRc);
+ return(nRc);
diff --git a/packages/qemu/qemu-0.9.1/52_ne2000_return.patch b/packages/qemu/qemu-0.9.1/52_ne2000_return.patch
new file mode 100644
index 0000000000..e4ea33f2c6
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/52_ne2000_return.patch
@@ -0,0 +1,17 @@
+---
+ hw/ne2000.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: qemu/hw/ne2000.c
+===================================================================
+--- qemu.orig/hw/ne2000.c 2007-12-03 19:32:52.000000000 +0000
++++ qemu/hw/ne2000.c 2007-12-03 19:33:55.000000000 +0000
+@@ -217,7 +217,7 @@ static int ne2000_can_receive(void *opaq
+ NE2000State *s = opaque;
+
+ if (s->cmd & E8390_STOP)
+- return 1;
++ return 0;
+ return !ne2000_buffer_full(s);
+ }
+
diff --git a/packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch b/packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch
new file mode 100644
index 0000000000..9b1ace81a5
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/61_safe_64bit_int.patch
@@ -0,0 +1,27 @@
+#DPATCHLEVEL=0
+---
+# dyngen-exec.h | 4 ++--
+# 1 file changed, 2 insertions(+), 2 deletions(-)
+#
+Index: dyngen-exec.h
+===================================================================
+--- dyngen-exec.h.orig 2007-12-31 13:06:21.000000000 +0000
++++ dyngen-exec.h 2007-12-31 13:08:54.000000000 +0000
+@@ -38,7 +38,7 @@
+ // Linux/Sparc64 defines uint64_t
+ #if !(defined (__sparc_v9__) && defined(__linux__))
+ /* XXX may be done for all 64 bits targets ? */
+-#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__)
++#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
+ typedef unsigned long uint64_t;
+ #else
+ typedef unsigned long long uint64_t;
+@@ -55,7 +55,7 @@
+ typedef signed int int32_t;
+ // Linux/Sparc64 defines int64_t
+ #if !(defined (__sparc_v9__) && defined(__linux__))
+-#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__)
++#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(__sparc__)
+ typedef signed long int64_t;
+ #else
+ typedef signed long long int64_t;
diff --git a/packages/qemu/qemu-0.9.1/63_sparc_build.patch b/packages/qemu/qemu-0.9.1/63_sparc_build.patch
new file mode 100644
index 0000000000..37b38f641b
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/63_sparc_build.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=0
+---
+# sparc.ld | 2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: sparc.ld
+===================================================================
+--- sparc.ld.orig 2007-12-03 15:40:26.000000000 +0000
++++ sparc.ld 2007-12-03 16:05:06.000000000 +0000
+@@ -6,7 +6,7 @@ ENTRY(_start)
+ SECTIONS
+ {
+ /* Read-only sections, merged into text segment: */
+- . = 0x60000000 + SIZEOF_HEADERS;
++ . = 0x60000000 + 0x400;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
diff --git a/packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch b/packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch
new file mode 100644
index 0000000000..e4858b79d7
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/64_ppc_asm_constraints.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=1
+---
+# cpu-all.h | 2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: qemu/cpu-all.h
+===================================================================
+--- qemu.orig/cpu-all.h 2007-06-13 11:48:22.000000000 +0100
++++ qemu/cpu-all.h 2007-06-13 11:51:56.000000000 +0100
+@@ -250,7 +250,7 @@ static inline void stw_le_p(void *ptr, i
+ static inline void stl_le_p(void *ptr, int v)
+ {
+ #ifdef __powerpc__
+- __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr));
++ __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory");
+ #else
+ uint8_t *p = ptr;
+ p[0] = v;
diff --git a/packages/qemu/qemu-0.9.1/65_kfreebsd.patch b/packages/qemu/qemu-0.9.1/65_kfreebsd.patch
new file mode 100644
index 0000000000..dfece800ac
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/65_kfreebsd.patch
@@ -0,0 +1,35 @@
+---
+ configure | 6 ++++++
+ vl.c | 2 ++
+ 2 files changed, 8 insertions(+)
+
+Index: configure
+===================================================================
+--- configure.orig 2007-12-03 15:40:26.000000000 +0000
++++ configure 2007-12-03 16:05:34.000000000 +0000
+@@ -129,6 +129,12 @@ if [ "$cpu" = "i386" -o "$cpu" = "x86_64
+ kqemu="yes"
+ fi
+ ;;
++GNU/kFreeBSD)
++oss="yes"
++if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
++ kqemu="yes"
++fi
++;;
+ FreeBSD)
+ bsd="yes"
+ oss="yes"
+Index: vl.c
+===================================================================
+--- vl.c.orig 2007-12-03 16:05:32.000000000 +0000
++++ vl.c 2007-12-03 16:05:34.000000000 +0000
+@@ -97,6 +97,8 @@
+ #include <stropts.h>
+ #endif
+ #endif
++#elif defined (__GLIBC__) && defined (__FreeBSD_kernel__)
++#include <freebsd/stdlib.h>
+ #else
+ #include <winsock2.h>
+ int inet_aton(const char *cp, struct in_addr *ia);
diff --git a/packages/qemu/qemu-0.9.1/66_tls_ld.patch b/packages/qemu/qemu-0.9.1/66_tls_ld.patch
new file mode 100644
index 0000000000..54e02eff8b
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/66_tls_ld.patch
@@ -0,0 +1,55 @@
+---
+ arm.ld | 7 +++++++
+ i386.ld | 7 +++++++
+ 2 files changed, 14 insertions(+)
+
+Index: arm.ld
+===================================================================
+--- arm.ld.orig 2007-06-13 11:48:22.000000000 +0100
++++ arm.ld 2007-06-13 11:51:56.000000000 +0100
+@@ -26,6 +26,10 @@ SECTIONS
+ { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
+ .rela.rodata :
+ { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
++ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
++ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
++ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
++ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.ctors : { *(.rel.ctors) }
+@@ -58,6 +62,9 @@ SECTIONS
+ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+ __exidx_end = .;
+ .reginfo : { *(.reginfo) }
++ /* Thread Local Storage sections */
++ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
++ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = ALIGN(0x100000) + (. & (0x100000 - 1));
+Index: i386.ld
+===================================================================
+--- i386.ld.orig 2007-06-13 11:48:22.000000000 +0100
++++ i386.ld 2007-06-13 11:51:56.000000000 +0100
+@@ -28,6 +28,10 @@ SECTIONS
+ { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
+ .rela.rodata :
+ { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
++ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
++ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
++ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
++ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.ctors : { *(.rel.ctors) }
+@@ -53,6 +57,9 @@ SECTIONS
+ _etext = .;
+ PROVIDE (etext = .);
+ .fini : { *(.fini) } =0x47ff041f
++ /* Thread Local Storage sections */
++ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
++ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+ . = ALIGN(32 / 8);
+ PROVIDE (__preinit_array_start = .);
+ .preinit_array : { *(.preinit_array) }
diff --git a/packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch b/packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch
new file mode 100644
index 0000000000..0d60c1c306
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/91-oh-sdl-cursor.patch
@@ -0,0 +1,18 @@
+=== modified file 'sdl.c'
+---
+ sdl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: sdl.c
+===================================================================
+--- sdl.c.orig 2007-12-03 19:32:15.000000000 +0000
++++ sdl.c 2007-12-03 19:34:04.000000000 +0000
+@@ -247,7 +247,7 @@ static void sdl_hide_cursor(void)
+
+ if (kbd_mouse_is_absolute()) {
+ SDL_ShowCursor(1);
+- SDL_SetCursor(sdl_cursor_hidden);
++ /* SDL_SetCursor(sdl_cursor_hidden); */
+ } else {
+ SDL_ShowCursor(0);
+ }
diff --git a/packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch b/packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch
new file mode 100644
index 0000000000..3ec304a38c
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/configure_symlinkpath_fix.patch
@@ -0,0 +1,28 @@
+Index: qemu-0.9.1/configure
+===================================================================
+--- qemu-0.9.1.orig/configure 2008-01-24 15:33:13.000000000 +0000
++++ qemu-0.9.1/configure 2008-01-24 15:45:50.000000000 +0000
+@@ -209,15 +209,17 @@
+
+ # find source path
+ source_path=`dirname "$0"`
++source_path_used="no"
++workdir=`pwd`
++workdir=`readlink -f $workdir`
+ if [ -z "$source_path" ]; then
+- source_path=`pwd`
++ source_path=$workdir
+ else
+ source_path=`cd "$source_path"; pwd`
+-fi
+-if test "$source_path" = `pwd` ; then
+- source_path_used="no"
+-else
+- source_path_used="yes"
++ source_path=`readlink -f $source_path`
++ if test "$source_path" != "$workdir" ; then
++ source_path_used="yes"
++ fi
+ fi
+
+ werror="no"
diff --git a/packages/qemu/qemu-0.9.1/disable-error-in-configure.patch b/packages/qemu/qemu-0.9.1/disable-error-in-configure.patch
new file mode 100644
index 0000000000..017f9f6355
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/disable-error-in-configure.patch
@@ -0,0 +1,17 @@
+---
+ configure | 2 --
+ 1 file changed, 2 deletions(-)
+
+Index: qemu/configure
+===================================================================
+--- qemu.orig/configure 2007-12-03 16:38:38.000000000 +0000
++++ qemu/configure 2007-12-03 16:38:39.000000000 +0000
+@@ -323,8 +323,6 @@ for opt do
+ ;;
+ --disable-werror) werror="no"
+ ;;
+- *) echo "ERROR: unknown option $opt"; show_help="yes"
+- ;;
+ --disable-nptl) nptl="no"
+ ;;
+ esac
diff --git a/packages/qemu/qemu-0.9.1/fix_segfault.patch b/packages/qemu/qemu-0.9.1/fix_segfault.patch
new file mode 100644
index 0000000000..443c330650
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/fix_segfault.patch
@@ -0,0 +1,37 @@
+---
+ linux-user/syscall.c | 22 ----------------------
+ 1 file changed, 22 deletions(-)
+
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c 2007-12-03 23:40:11.000000000 +0000
++++ qemu/linux-user/syscall.c 2007-12-03 23:40:21.000000000 +0000
+@@ -5695,28 +5695,6 @@ abi_long do_syscall(void *cpu_env, int n
+ goto unimplemented_nowarn;
+ #endif
+
+-#ifdef TARGET_NR_clock_gettime
+- case TARGET_NR_clock_gettime:
+- {
+- struct timespec ts;
+- ret = get_errno(clock_gettime(arg1, &ts));
+- if (!is_error(ret)) {
+- host_to_target_timespec(arg2, &ts);
+- }
+- break;
+- }
+-#endif
+-#ifdef TARGET_NR_clock_getres
+- case TARGET_NR_clock_getres:
+- {
+- struct timespec ts;
+- ret = get_errno(clock_getres(arg1, &ts));
+- if (!is_error(ret)) {
+- host_to_target_timespec(arg2, &ts);
+- }
+- break;
+- }
+-#endif
+
+ #if defined(TARGET_NR_set_tid_address) && defined(__NR_set_tid_address)
+ case TARGET_NR_set_tid_address:
diff --git a/packages/qemu/qemu-0.9.1/no-strip.patch b/packages/qemu/qemu-0.9.1/no-strip.patch
new file mode 100644
index 0000000000..fc69b37e16
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/no-strip.patch
@@ -0,0 +1,22 @@
+--- qemu.orig/Makefile 2008-01-29 23:16:27.000000000 -0800
++++ qemu-0.9.1/Makefile 2008-01-29 23:16:38.000000000 -0800
+@@ -174,7 +174,7 @@
+ install: all $(if $(BUILD_DOCS),install-doc)
+ mkdir -p "$(DESTDIR)$(bindir)"
+ ifneq ($(TOOLS),)
+- $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
++ $(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)"
+ endif
+ mkdir -p "$(DESTDIR)$(datadir)"
+ for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
+--- qemu.orig/Makefile.target 2008-01-29 23:16:27.000000000 -0800
++++ qemu-0.9.1/Makefile.target 2008-01-29 23:17:33.000000000 -0800
+@@ -632,7 +632,7 @@
+
+ install: all
+ ifneq ($(PROGS),)
+- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
++ $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
+ endif
+
+ ifneq ($(wildcard .depend),)
diff --git a/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch
new file mode 100644
index 0000000000..ebc996e873
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl-update.patch
@@ -0,0 +1,219 @@
+---
+ linux-user/main.c | 7 ++-
+ linux-user/syscall.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++-----
+ 2 files changed, 111 insertions(+), 10 deletions(-)
+
+Index: qemu/linux-user/main.c
+===================================================================
+--- qemu.orig/linux-user/main.c 2007-12-03 19:34:09.000000000 +0000
++++ qemu/linux-user/main.c 2007-12-03 23:44:45.000000000 +0000
+@@ -391,7 +391,7 @@ do_kernel_trap(CPUARMState *env)
+ cpu_unlock();
+ break;
+ case 0xffff0fe0: /* __kernel_get_tls */
+- env->regs[0] = env->cp15.c13_tls;
++ env->regs[0] = env->cp15.c13_tls2;
+ break;
+ default:
+ return 1;
+@@ -2037,6 +2037,11 @@ int main(int argc, char **argv)
+ int drop_ld_preload = 0, environ_count = 0;
+ char **target_environ, **wrk, **dst;
+
++ char *assume_kernel = getenv("QEMU_ASSUME_KERNEL");
++
++ if (assume_kernel)
++ setenv("LD_ASSUME_KERNEL", assume_kernel, 1);
++
+ if (argc <= 1)
+ usage();
+
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c 2007-12-03 19:34:09.000000000 +0000
++++ qemu/linux-user/syscall.c 2007-12-03 23:46:54.000000000 +0000
+@@ -61,6 +61,7 @@
+ #define tchars host_tchars /* same as target */
+ #define ltchars host_ltchars /* same as target */
+
++#include <linux/futex.h>
+ #include <linux/termios.h>
+ #include <linux/unistd.h>
+ #include <linux/utsname.h>
+@@ -2694,7 +2695,6 @@ abi_long do_arch_prctl(CPUX86State *env,
+ return 0;
+ }
+ #endif
+-
+ #endif /* defined(TARGET_I386) */
+
+ /* this stack is the equivalent of the kernel stack associated with a
+@@ -2729,16 +2729,19 @@ int do_fork(CPUState *env, unsigned int
+ TaskState *ts;
+ uint8_t *new_stack;
+ CPUState *new_env;
+-
++#if defined(TARGET_I386)
++ uint64_t *new_gdt_table;
++#endif
+ #ifdef USE_NPTL
+ unsigned int nptl_flags;
+
+ if (flags & CLONE_PARENT_SETTID)
+ *parent_tidptr = gettid();
+ #endif
+-
+ if (flags & CLONE_VM) {
+ ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
++ if (!ts)
++ return -ENOMEM;
+ memset(ts, 0, sizeof(TaskState));
+ new_stack = ts->stack;
+ ts->used = 1;
+@@ -2750,6 +2753,29 @@ int do_fork(CPUState *env, unsigned int
+ #if defined(TARGET_I386)
+ if (!newsp)
+ newsp = env->regs[R_ESP];
++ new_gdt_table = malloc(9 * 8);
++ if (!new_gdt_table) {
++ free(new_env);
++ return -ENOMEM;
++ }
++ /* Copy main GDT table from parent, but clear TLS entries */
++ memcpy(new_gdt_table, g2h(env->gdt.base), 6 * 8);
++ memset(&new_gdt_table[6], 0, 3 * 8);
++ new_env->gdt.base = h2g(new_gdt_table);
++ if (flags & 0x00080000 /* CLONE_SETTLS */) {
++ ret = do_set_thread_area(new_env, new_env->regs[R_ESI]);
++ if (ret) {
++ free(new_gdt_table);
++ free(new_env);
++ return ret;
++ }
++ }
++ cpu_x86_load_seg(env, R_CS, new_env->regs[R_CS]);
++ cpu_x86_load_seg(env, R_DS, new_env->regs[R_DS]);
++ cpu_x86_load_seg(env, R_ES, new_env->regs[R_ES]);
++ cpu_x86_load_seg(env, R_SS, new_env->regs[R_SS]);
++ cpu_x86_load_seg(env, R_FS, new_env->regs[R_FS]);
++ cpu_x86_load_seg(env, R_GS, new_env->regs[R_GS]);
+ new_env->regs[R_ESP] = newsp;
+ new_env->regs[R_EAX] = 0;
+ #elif defined(TARGET_ARM)
+@@ -3121,6 +3147,68 @@ static inline abi_long host_to_target_ti
+ unlock_user_struct(target_ts, target_addr, 1);
+ }
+
++static long do_futex(target_ulong uaddr, int op, uint32_t val,
++ target_ulong utime, target_ulong uaddr2,
++ uint32_t val3)
++{
++ struct timespec host_utime;
++ unsigned long val2 = utime;
++
++ if (utime && (op == FUTEX_WAIT || op == FUTEX_LOCK_PI)) {
++ target_to_host_timespec(&host_utime, utime);
++ val2 = (unsigned long)&host_utime;
++ }
++
++#ifdef BSWAP_NEEDED
++ switch(op) {
++ case FUTEX_CMP_REQUEUE:
++ val3 = tswap32(val3);
++ case FUTEX_REQUEUE:
++ val2 = tswap32(val2);
++ case FUTEX_WAIT:
++ case FUTEX_WAKE:
++ val = tswap32(val);
++ case FUTEX_LOCK_PI: /* This one's icky, but comes out OK */
++ case FUTEX_UNLOCK_PI:
++ break;
++ default:
++ gemu_log("qemu: Unsupported futex op %d\n", op);
++ return -ENOSYS;
++ }
++#if 0 /* No, it's worse than this */
++ if (op == FUTEX_WAKE_OP) {
++ /* Need to munge the secondary operation (val3) */
++ val3 = tswap32(val3);
++ int op2 = (val3 >> 28) & 7;
++ int cmp = (val3 >> 24) & 15;
++ int oparg = (val3 << 8) >> 20;
++ int cmparg = (val3 << 20) >> 20;
++ int shift = val3 & (FUTEX_OP_OPARG_SHIFT << 28);
++
++ if (shift)
++ oparg = (oparg & 7) + 24 - (oparg & 24);
++ else oparg =
++ if (op2 == FUTEX_OP_ADD) {
++ gemu_log("qemu: Unsupported wrong-endian FUTEX_OP_ADD\n");
++ return -ENOSYS;
++ }
++ if (cmparg == FUTEX_OP_CMP_LT || cmparg == FUTEX_OP_CMP_GE ||
++ cmparg == FUTEX_OP_CMP_LE || cmparg == FUTEX_OP_CMP_GT) {
++ gemu_log("qemu: Unsupported wrong-endian futex cmparg %d\n", cmparg);
++ return -ENOSYS;
++ }
++ val3 = shift | (op2<<28) | (cmp<<24) | (oparg<<12) | cmparg;
++ }
++#endif
++#endif
++ return syscall(__NR_futex, g2h(uaddr), op, val, val2, g2h(uaddr2), val3);
++}
++
++int do_set_tid_address(target_ulong tidptr)
++{
++ return syscall(__NR_set_tid_address, g2h(tidptr));
++}
++
+ /* do_syscall() should always have a single exit point at the end so
+ that actions, such as logging of syscall results, can be performed.
+ All errnos that do_syscall() returns must be -TARGET_<errcode>. */
+@@ -3145,7 +3233,7 @@ abi_long do_syscall(void *cpu_env, int n
+ _mcleanup();
+ #endif
+ gdb_exit(cpu_env, arg1);
+- /* XXX: should free thread stack and CPU env */
++ /* XXX: should free thread stack, GDT and CPU env */
+ _exit(arg1);
+ ret = 0; /* avoid warning */
+ break;
+@@ -5569,6 +5657,9 @@ abi_long do_syscall(void *cpu_env, int n
+ #elif defined(TARGET_I386) && defined(TARGET_ABI32)
+ ret = do_set_thread_area(cpu_env, arg1);
+ break;
++#elif TARGET_i386
++ ret = get_errno(do_set_thread_area(cpu_env, arg1));
++ break;
+ #else
+ goto unimplemented_nowarn;
+ #endif
+@@ -5586,6 +5677,16 @@ abi_long do_syscall(void *cpu_env, int n
+ goto unimplemented_nowarn;
+ #endif
+
++#ifdef TARGET_NR_futex
++ case TARGET_NR_futex:
++ ret = get_errno(do_futex(arg1, arg2, arg3, arg4, arg5, arg6));
++ break;
++#endif
++#ifdef TARGET_NR_set_robust_list
++ case TARGET_NR_set_robust_list:
++ goto unimplemented_nowarn;
++#endif
++
+ #ifdef TARGET_NR_clock_gettime
+ case TARGET_NR_clock_gettime:
+ {
+@@ -5627,11 +5728,6 @@ abi_long do_syscall(void *cpu_env, int n
+ break;
+ #endif
+
+-#ifdef TARGET_NR_set_robust_list
+- case TARGET_NR_set_robust_list:
+- goto unimplemented_nowarn;
+-#endif
+-
+ #if defined(TARGET_NR_utimensat) && defined(__NR_utimensat)
+ case TARGET_NR_utimensat:
+ {
diff --git a/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch
new file mode 100644
index 0000000000..10e3cc04a5
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/qemu-0.9.0-nptl.patch
@@ -0,0 +1,929 @@
+These are Paul Brook's patches to QEMU-0.8.2 to enable the running of single
+ARM binaries under QEMU's user-emulation mode. Without them, QEMU-0.8.1
+immediately dies saying:
+ Error: f0005
+ qemu: uncaught target signal 6 (Aborted) - exiting
+while qemu-0.8.2 dies saying:
+ qemu: Unsupported syscall: 983045
+ cannot set up thread-local storage: unknown error
+
+This file is a rediffing of the patches visible at
+https://nowt.dyndns.org/patch.qemu_nptl on 27 Sept 2006
+which "patch" fails to apply automatically.
+See also http://lists.gnu.org/archive/html/qemu-devel/2006-09/msg00194.html
+
+ Martin Guy, 27 Sept 2006
+
+---
+ configure | 25 ++++++
+ exec-all.h | 165 ------------------------------------------
+ linux-user/arm/syscall.h | 4 -
+ linux-user/main.c | 94 +++++++++++++++++++++---
+ linux-user/qemu.h | 3
+ linux-user/syscall.c | 91 ++++++++++++++++++++++-
+ qemu_spinlock.h | 181 +++++++++++++++++++++++++++++++++++++++++++++++
+ target-arm/cpu.h | 10 ++
+ target-arm/op.c | 6 +
+ target-arm/translate.c | 9 ++
+ 10 files changed, 405 insertions(+), 183 deletions(-)
+
+--- qemu.orig/configure
++++ qemu/configure
+@@ -103,10 +103,11 @@ check_gcc="yes"
+ softmmu="yes"
+ linux_user="no"
+ darwin_user="no"
+ build_docs="no"
+ uname_release=""
++nptl="yes"
+
+ # OS specific
+ targetos=`uname -s`
+ case $targetos in
+ CYGWIN*)
+@@ -322,10 +323,12 @@ for opt do
+ ;;
+ --disable-werror) werror="no"
+ ;;
+ *) echo "ERROR: unknown option $opt"; show_help="yes"
+ ;;
++ --disable-nptl) nptl="no"
++ ;;
+ esac
+ done
+
+ if [ "$bsd" = "yes" -o "$darwin" = "yes" -o "$mingw32" = "yes" ] ; then
+ AIOLIBS=
+@@ -417,10 +420,11 @@ echo " --enable-system enable
+ echo " --disable-system disable all system emulation targets"
+ echo " --enable-linux-user enable all linux usermode emulation targets"
+ echo " --disable-linux-user disable all linux usermode emulation targets"
+ echo " --enable-darwin-user enable all darwin usermode emulation targets"
+ echo " --disable-darwin-user disable all darwin usermode emulation targets"
++echo " --disable-nptl disable usermode NPTL guest support"
+ echo " --fmod-lib path to FMOD library"
+ echo " --fmod-inc path to FMOD includes"
+ echo " --enable-uname-release=R Return R for uname -r in usermode emulation"
+ echo " --sparc_cpu=V Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9"
+ echo ""
+@@ -583,10 +587,27 @@ fi
+ cat > $TMPC <<EOF
+ int main(void) {
+ }
+ EOF
+
++# check NPTL support
++cat > $TMPC <<EOF
++#include <sched.h>
++void foo()
++{
++#ifndef CLONE_SETTLS
++#error bork
++#endif
++}
++EOF
++
++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
++ :
++else
++ nptl="no"
++fi
++
+ ##########################################
+ # SDL probe
+
+ sdl_too_old=no
+
+@@ -747,10 +768,11 @@ if test -n "$sparc_cpu"; then
+ fi
+ echo "kqemu support $kqemu"
+ echo "Documentation $build_docs"
+ [ ! -z "$uname_release" ] && \
+ echo "uname -r $uname_release"
++echo "NPTL support $nptl"
+
+ if test $sdl_too_old = "yes"; then
+ echo "-> Your SDL version is too old - please upgrade to have SDL support"
+ fi
+ if [ -s /tmp/qemu-$$-sdl-config.log ]; then
+@@ -1063,10 +1085,13 @@ if test "$target_cpu" = "i386" ; then
+ fi
+ elif test "$target_cpu" = "arm" -o "$target_cpu" = "armeb" ; then
+ echo "TARGET_ARCH=arm" >> $config_mak
+ echo "#define TARGET_ARCH \"arm\"" >> $config_h
+ echo "#define TARGET_ARM 1" >> $config_h
++ if test "$nptl" = "yes" ; then
++ echo "#define USE_NPTL 1" >> $config_h
++ fi
+ bflt="yes"
+ elif test "$target_cpu" = "sparc" ; then
+ echo "TARGET_ARCH=sparc" >> $config_mak
+ echo "#define TARGET_ARCH \"sparc\"" >> $config_h
+ echo "#define TARGET_SPARC 1" >> $config_h
+--- qemu.orig/exec-all.h
++++ qemu/exec-all.h
+@@ -338,174 +338,11 @@ dummy_label ## n: ;\
+
+ extern CPUWriteMemoryFunc *io_mem_write[IO_MEM_NB_ENTRIES][4];
+ extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
+ extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
+
+-#if defined(__powerpc__)
+-static inline int testandset (int *p)
+-{
+- int ret;
+- __asm__ __volatile__ (
+- "0: lwarx %0,0,%1\n"
+- " xor. %0,%3,%0\n"
+- " bne 1f\n"
+- " stwcx. %2,0,%1\n"
+- " bne- 0b\n"
+- "1: "
+- : "=&r" (ret)
+- : "r" (p), "r" (1), "r" (0)
+- : "cr0", "memory");
+- return ret;
+-}
+-#elif defined(__i386__)
+-static inline int testandset (int *p)
+-{
+- long int readval = 0;
+-
+- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+- : "+m" (*p), "+a" (readval)
+- : "r" (1)
+- : "cc");
+- return readval;
+-}
+-#elif defined(__x86_64__)
+-static inline int testandset (int *p)
+-{
+- long int readval = 0;
+-
+- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+- : "+m" (*p), "+a" (readval)
+- : "r" (1)
+- : "cc");
+- return readval;
+-}
+-#elif defined(__s390__)
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
+- " jl 0b"
+- : "=&d" (ret)
+- : "r" (1), "a" (p), "0" (*p)
+- : "cc", "memory" );
+- return ret;
+-}
+-#elif defined(__alpha__)
+-static inline int testandset (int *p)
+-{
+- int ret;
+- unsigned long one;
+-
+- __asm__ __volatile__ ("0: mov 1,%2\n"
+- " ldl_l %0,%1\n"
+- " stl_c %2,%1\n"
+- " beq %2,1f\n"
+- ".subsection 2\n"
+- "1: br 0b\n"
+- ".previous"
+- : "=r" (ret), "=m" (*p), "=r" (one)
+- : "m" (*p));
+- return ret;
+-}
+-#elif defined(__sparc__)
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__("ldstub [%1], %0"
+- : "=r" (ret)
+- : "r" (p)
+- : "memory");
+-
+- return (ret ? 1 : 0);
+-}
+-#elif defined(__arm__)
+-static inline int testandset (int *spinlock)
+-{
+- register unsigned int ret;
+- __asm__ __volatile__("swp %0, %1, [%2]"
+- : "=r"(ret)
+- : "0"(1), "r"(spinlock));
+-
+- return ret;
+-}
+-#elif defined(__mc68000)
+-static inline int testandset (int *p)
+-{
+- char ret;
+- __asm__ __volatile__("tas %1; sne %0"
+- : "=r" (ret)
+- : "m" (p)
+- : "cc","memory");
+- return ret;
+-}
+-#elif defined(__ia64)
+-
+-#include <ia64intrin.h>
+-
+-static inline int testandset (int *p)
+-{
+- return __sync_lock_test_and_set (p, 1);
+-}
+-#elif defined(__mips__)
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__ (
+- " .set push \n"
+- " .set noat \n"
+- " .set mips2 \n"
+- "1: li $1, 1 \n"
+- " ll %0, %1 \n"
+- " sc $1, %1 \n"
+- " beqz $1, 1b \n"
+- " .set pop "
+- : "=r" (ret), "+R" (*p)
+- :
+- : "memory");
+-
+- return ret;
+-}
+-#else
+-#error unimplemented CPU support
+-#endif
+-
+-typedef int spinlock_t;
+-
+-#define SPIN_LOCK_UNLOCKED 0
+-
+-#if defined(CONFIG_USER_ONLY)
+-static inline void spin_lock(spinlock_t *lock)
+-{
+- while (testandset(lock));
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+- *lock = 0;
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+- return !testandset(lock);
+-}
+-#else
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+- return 1;
+-}
+-#endif
++#include "qemu_spinlock.h"
+
+ extern spinlock_t tb_lock;
+
+ extern int tb_invalidated_flag;
+
+--- qemu.orig/linux-user/arm/syscall.h
++++ qemu/linux-user/arm/syscall.h
+@@ -26,11 +26,13 @@ struct target_pt_regs {
+ #define ARM_ORIG_r0 uregs[17]
+
+ #define ARM_SYSCALL_BASE 0x900000
+ #define ARM_THUMB_SYSCALL 0
+
+-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
++#define ARM_NR_BASE 0xf0000
++#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
++#define ARM_NR_set_tls (ARM_NR_BASE + 5)
+
+ #define ARM_NR_semihosting 0x123456
+ #define ARM_NR_thumb_semihosting 0xAB
+
+ #if defined(TARGET_WORDS_BIGENDIAN)
+--- qemu.orig/linux-user/main.c
++++ qemu/linux-user/main.c
+@@ -361,10 +361,54 @@ static void arm_cache_flush(abi_ulong st
+ break;
+ addr = last1 + 1;
+ }
+ }
+
++/* Handle a jump to the kernel code page. */
++static int
++do_kernel_trap(CPUARMState *env)
++{
++ uint32_t addr;
++ uint32_t *ptr;
++ uint32_t cpsr;
++
++ switch (env->regs[15]) {
++ case 0xffff0fc0: /* __kernel_cmpxchg */
++ /* XXX: This only works between threads, not between processes.
++ Use native atomic operations. */
++ /* ??? This probably breaks horribly if the access segfaults. */
++ cpu_lock();
++ ptr = (uint32_t *)env->regs[2];
++ cpsr = cpsr_read(env);
++ if (*ptr == env->regs[0]) {
++ *ptr = env->regs[1];
++ env->regs[0] = 0;
++ cpsr |= CPSR_C;
++ } else {
++ env->regs[0] = -1;
++ cpsr &= ~CPSR_C;
++ }
++ cpsr_write(env, cpsr, CPSR_C);
++ cpu_unlock();
++ break;
++ case 0xffff0fe0: /* __kernel_get_tls */
++ env->regs[0] = env->cp15.c13_tls;
++ break;
++ default:
++ return 1;
++ }
++ /* Jump back to the caller. */
++ addr = env->regs[14];
++ if (addr & 1) {
++ env->thumb = 1;
++ addr &= ~1;
++ }
++ env->regs[15] = addr;
++
++ return 0;
++}
++
+ void cpu_loop(CPUARMState *env)
+ {
+ int trapnr;
+ unsigned int n, insn;
+ target_siginfo_t info;
+@@ -471,32 +515,50 @@ void cpu_loop(CPUARMState *env)
+ get_user_u32(insn, env->regs[15] - 4);
+ n = insn & 0xffffff;
+ }
+ }
+
+- if (n == ARM_NR_cacheflush) {
+- arm_cache_flush(env->regs[0], env->regs[1]);
+- } else if (n == ARM_NR_semihosting
+- || n == ARM_NR_thumb_semihosting) {
++ if (n == ARM_NR_semihosting
++ || n == ARM_NR_thumb_semihosting) {
+ env->regs[0] = do_arm_semihosting (env);
+ } else if (n == 0 || n >= ARM_SYSCALL_BASE
+ || (env->thumb && n == ARM_THUMB_SYSCALL)) {
+ /* linux syscall */
+ if (env->thumb || n == 0) {
+ n = env->regs[7];
+ } else {
+ n -= ARM_SYSCALL_BASE;
+ env->eabi = 0;
+ }
+- env->regs[0] = do_syscall(env,
+- n,
+- env->regs[0],
+- env->regs[1],
+- env->regs[2],
+- env->regs[3],
+- env->regs[4],
+- env->regs[5]);
++ if ( n > ARM_NR_BASE) {
++ switch (n)
++ {
++ case ARM_NR_cacheflush:
++ arm_cache_flush(env->regs[0], env->regs[1]);
++ break;
++#ifdef USE_NPTL
++ case ARM_NR_set_tls:
++ cpu_set_tls(env, env->regs[0]);
++ env->regs[0] = 0;
++ break;
++#endif
++ default:
++ printf ("Error: Bad syscall: %x\n", n);
++ goto error;
++ }
++ }
++ else
++ {
++ env->regs[0] = do_syscall(env,
++ n,
++ env->regs[0],
++ env->regs[1],
++ env->regs[2],
++ env->regs[3],
++ env->regs[4],
++ env->regs[5]);
++ }
+ } else {
+ goto error;
+ }
+ }
+ break;
+@@ -531,10 +593,14 @@ void cpu_loop(CPUARMState *env)
+ info.si_code = TARGET_TRAP_BRKPT;
+ queue_signal(info.si_signo, &info);
+ }
+ }
+ break;
++ case EXCP_KERNEL_TRAP:
++ if (do_kernel_trap(env))
++ goto error;
++ break;
+ default:
+ error:
+ fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
+ trapnr);
+ cpu_dump_state(env, stderr, fprintf, 0);
+@@ -2378,10 +2444,14 @@ int main(int argc, char **argv)
+ #if defined(TARGET_ARM) || defined(TARGET_M68K)
+ ts->stack_base = info->start_stack;
+ ts->heap_base = info->brk;
+ /* This will be filled in on the first SYS_HEAPINFO call. */
+ ts->heap_limit = 0;
++ /* Register the magic kernel code page. The cpu will generate a
++ special exception when it tries to execute code here. We can't
++ put real code here because it may be in use by the host kernel. */
++ page_set_flags(0xffff0000, 0xffff0fff, 0);
+ #endif
+
+ if (gdbstub_port) {
+ gdbserver_start (gdbstub_port);
+ gdb_handlesig(env, 0);
+--- qemu.orig/linux-user/qemu.h
++++ qemu/linux-user/qemu.h
+@@ -100,10 +100,13 @@ typedef struct TaskState {
+ /* Extra fields for semihosted binaries. */
+ uint32_t stack_base;
+ uint32_t heap_base;
+ uint32_t heap_limit;
+ #endif
++#ifdef USE_NPTL
++ uint32_t *child_tidptr;
++#endif
+ int used; /* non zero if used */
+ struct image_info *info;
+ uint8_t stack[0];
+ } __attribute__((aligned(16))) TaskState;
+
+--- qemu.orig/linux-user/syscall.c
++++ qemu/linux-user/syscall.c
+@@ -69,13 +69,22 @@
+ #include <linux/soundcard.h>
+ #include <linux/dirent.h>
+ #include <linux/kd.h>
+
+ #include "qemu.h"
++#include "qemu_spinlock.h"
+
+ //#define DEBUG
+
++#ifdef USE_NPTL
++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
++ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
++#else
++/* XXX: Hardcode the above values. */
++#define CLONE_NPTL_FLAGS2 0
++#endif
++
+ #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC) \
+ || defined(TARGET_M68K) || defined(TARGET_SH4) || defined(TARGET_CRIS)
+ /* 16 bit uid wrappers emulation */
+ #define USE_UID16
+ #endif
+@@ -2690,27 +2699,46 @@ abi_long do_arch_prctl(CPUX86State *env,
+
+ /* this stack is the equivalent of the kernel stack associated with a
+ thread/process */
+ #define NEW_STACK_SIZE 8192
+
++#ifdef USE_NPTL
++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
++#endif
++
+ static int clone_func(void *arg)
+ {
+ CPUState *env = arg;
++#ifdef HAVE_NPTL
++ /* Wait until the parent has finshed initializing the tls state. */
++ while (!spin_trylock(&nptl_lock))
++ usleep(1);
++ spin_unlock(&nptl_lock);
++#endif
+ cpu_loop(env);
+ /* never exits */
+ return 0;
+ }
+
+ /* do_fork() Must return host values and target errnos (unlike most
+ do_*() functions). */
+-int do_fork(CPUState *env, unsigned int flags, abi_ulong newsp)
++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
++ uint32_t *parent_tidptr, void *newtls,
++ uint32_t *child_tidptr)
+ {
+ int ret;
+ TaskState *ts;
+ uint8_t *new_stack;
+ CPUState *new_env;
+
++#ifdef USE_NPTL
++ unsigned int nptl_flags;
++
++ if (flags & CLONE_PARENT_SETTID)
++ *parent_tidptr = gettid();
++#endif
++
+ if (flags & CLONE_VM) {
+ ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
+ memset(ts, 0, sizeof(TaskState));
+ new_stack = ts->stack;
+ ts->used = 1;
+@@ -2772,20 +2800,71 @@ int do_fork(CPUState *env, unsigned int
+ new_env->regs[14] = newsp;
+ #else
+ #error unsupported target CPU
+ #endif
+ new_env->opaque = ts;
++#ifdef USE_NPTL
++ nptl_flags = flags;
++ flags &= ~CLONE_NPTL_FLAGS2;
++
++ if (nptl_flags & CLONE_CHILD_CLEARTID) {
++ ts->child_tidptr = child_tidptr;
++ }
++
++ if (nptl_flags & CLONE_SETTLS)
++ cpu_set_tls (new_env, newtls);
++
++ /* Grab the global cpu lock so that the thread setup appears
++ atomic. */
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ spin_lock(&nptl_lock);
++
++#else
++ if (flags & CLONE_NPTL_FLAGS2)
++ return -EINVAL;
++#endif
++
++ if (CLONE_VFORK & flags)
++ flags ^= CLONE_VM;
+ #ifdef __ia64__
+ ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #else
+ ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #endif
++#ifdef USE_NPTL
++ if (ret != -1) {
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ *child_tidptr = ret;
++ }
++
++ /* Allow the child to continue. */
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ spin_unlock(&nptl_lock);
++#endif
+ } else {
+ /* if no CLONE_VM, we consider it is a fork */
+- if ((flags & ~CSIGNAL) != 0)
++ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
+ return -EINVAL;
+ ret = fork();
++#ifdef USE_NPTL
++ /* There is a race condition here. The parent process could
++ theoretically read the TID in the child process before the child
++ tid is set. This would require using either ptrace
++ (not implemented) or having *_tidptr to point at a shared memory
++ mapping. We can't repeat the spinlock hack used above because
++ the child process gets its own copy of the lock. */
++ if (ret == 0) {
++ /* Child Process. */
++ if (flags & CLONE_CHILD_SETTID)
++ *child_tidptr = gettid();
++ ts = (TaskState *)env->opaque;
++ if (flags & CLONE_CHILD_CLEARTID)
++ ts->child_tidptr = child_tidptr;
++ if (flags & CLONE_SETTLS)
++ cpu_set_tls (env, newtls);
++ }
++#endif
+ }
+ return ret;
+ }
+
+ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
+@@ -3106,11 +3185,11 @@ abi_long do_syscall(void *cpu_env, int n
+ break;
+ case TARGET_NR_brk:
+ ret = do_brk(arg1);
+ break;
+ case TARGET_NR_fork:
+- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
++ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
+ break;
+ #ifdef TARGET_NR_waitpid
+ case TARGET_NR_waitpid:
+ {
+ int status;
+@@ -4463,11 +4542,12 @@ abi_long do_syscall(void *cpu_env, int n
+ #endif
+ case TARGET_NR_fsync:
+ ret = get_errno(fsync(arg1));
+ break;
+ case TARGET_NR_clone:
+- ret = get_errno(do_fork(cpu_env, arg1, arg2));
++ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
++ (void *)arg4, (uint32_t *)arg5));
+ break;
+ #ifdef __NR_exit_group
+ /* new thread calls */
+ case TARGET_NR_exit_group:
+ gdb_exit(cpu_env, arg1);
+@@ -4908,11 +4988,12 @@ abi_long do_syscall(void *cpu_env, int n
+ case TARGET_NR_putpmsg:
+ goto unimplemented;
+ #endif
+ #ifdef TARGET_NR_vfork
+ case TARGET_NR_vfork:
+- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
++ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
++ NULL, NULL, NULL));
+ break;
+ #endif
+ #ifdef TARGET_NR_ugetrlimit
+ case TARGET_NR_ugetrlimit:
+ {
+--- /dev/null
++++ qemu/qemu_spinlock.h
+@@ -0,0 +1,181 @@
++/*
++ * Atomic operation helper include
++ *
++ * Copyright (c) 2005 Fabrice Bellard
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++#ifndef QEMU_SPINLOCK_H
++#define QEMU_SPINLOCK_H
++
++#ifdef __powerpc__
++static inline int testandset (int *p)
++{
++ int ret;
++ __asm__ __volatile__ (
++ "0: lwarx %0,0,%1\n"
++ " xor. %0,%3,%0\n"
++ " bne 1f\n"
++ " stwcx. %2,0,%1\n"
++ " bne- 0b\n"
++ "1: "
++ : "=&r" (ret)
++ : "r" (p), "r" (1), "r" (0)
++ : "cr0", "memory");
++ return ret;
++}
++#endif
++
++#ifdef __i386__
++static inline int testandset (int *p)
++{
++ long int readval = 0;
++
++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++ : "+m" (*p), "+a" (readval)
++ : "r" (1)
++ : "cc");
++ return readval;
++}
++#endif
++
++#ifdef __x86_64__
++static inline int testandset (int *p)
++{
++ long int readval = 0;
++
++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++ : "+m" (*p), "+a" (readval)
++ : "r" (1)
++ : "cc");
++ return readval;
++}
++#endif
++
++#ifdef __s390__
++static inline int testandset (int *p)
++{
++ int ret;
++
++ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
++ " jl 0b"
++ : "=&d" (ret)
++ : "r" (1), "a" (p), "0" (*p)
++ : "cc", "memory" );
++ return ret;
++}
++#endif
++
++#ifdef __alpha__
++static inline int testandset (int *p)
++{
++ int ret;
++ unsigned long one;
++
++ __asm__ __volatile__ ("0: mov 1,%2\n"
++ " ldl_l %0,%1\n"
++ " stl_c %2,%1\n"
++ " beq %2,1f\n"
++ ".subsection 2\n"
++ "1: br 0b\n"
++ ".previous"
++ : "=r" (ret), "=m" (*p), "=r" (one)
++ : "m" (*p));
++ return ret;
++}
++#endif
++
++#ifdef __sparc__
++static inline int testandset (int *p)
++{
++ int ret;
++
++ __asm__ __volatile__("ldstub [%1], %0"
++ : "=r" (ret)
++ : "r" (p)
++ : "memory");
++
++ return (ret ? 1 : 0);
++}
++#endif
++
++#ifdef __arm__
++static inline int testandset (int *spinlock)
++{
++ register unsigned int ret;
++ __asm__ __volatile__("swp %0, %1, [%2]"
++ : "=r"(ret)
++ : "0"(1), "r"(spinlock));
++
++ return ret;
++}
++#endif
++
++#ifdef __mc68000
++static inline int testandset (int *p)
++{
++ char ret;
++ __asm__ __volatile__("tas %1; sne %0"
++ : "=r" (ret)
++ : "m" (p)
++ : "cc","memory");
++ return ret;
++}
++#endif
++
++#ifdef __ia64
++#include <ia64intrin.h>
++
++static inline int testandset (int *p)
++{
++ return __sync_lock_test_and_set (p, 1);
++}
++#endif
++
++typedef int spinlock_t;
++
++#define SPIN_LOCK_UNLOCKED 0
++
++#if defined(CONFIG_USER_ONLY)
++static inline void spin_lock(spinlock_t *lock)
++{
++ while (testandset(lock));
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++ *lock = 0;
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++ return !testandset(lock);
++}
++#else
++static inline void spin_lock(spinlock_t *lock)
++{
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++ return 1;
++}
++#endif
++
++#endif
+--- qemu.orig/target-arm/cpu.h
++++ qemu/target-arm/cpu.h
+@@ -36,10 +36,11 @@
+ #define EXCP_DATA_ABORT 4
+ #define EXCP_IRQ 5
+ #define EXCP_FIQ 6
+ #define EXCP_BKPT 7
+ #define EXCP_EXCEPTION_EXIT 8 /* Return from v7M exception. */
++#define EXCP_KERNEL_TRAP 9 /* Jumped to kernel code page. */
+
+ #define ARMV7M_EXCP_RESET 1
+ #define ARMV7M_EXCP_NMI 2
+ #define ARMV7M_EXCP_HARD 3
+ #define ARMV7M_EXCP_MEM 4
+@@ -220,10 +221,19 @@ int cpu_arm_signal_handler(int host_sign
+ void *puc);
+
+ void cpu_lock(void);
+ void cpu_unlock(void);
+
++void cpu_lock(void);
++void cpu_unlock(void);
++#if defined(USE_NPTL)
++static inline void cpu_set_tls(CPUARMState *env, void *newtls)
++{
++ env->cp15.c13_tls2 = (uint32_t)(long)newtls;
++}
++#endif
++
+ #define CPSR_M (0x1f)
+ #define CPSR_T (1 << 5)
+ #define CPSR_F (1 << 6)
+ #define CPSR_I (1 << 7)
+ #define CPSR_A (1 << 8)
+--- qemu.orig/target-arm/op.c
++++ qemu/target-arm/op.c
+@@ -1007,10 +1007,16 @@ void OPPROTO op_exception_exit(void)
+ {
+ env->exception_index = EXCP_EXCEPTION_EXIT;
+ cpu_loop_exit();
+ }
+
++void OPPROTO op_kernel_trap(void)
++{
++ env->exception_index = EXCP_KERNEL_TRAP;
++ cpu_loop_exit();
++}
++
+ /* VFP support. We follow the convention used for VFP instrunctions:
+ Single precition routines have a "s" suffix, double precision a
+ "d" suffix. */
+
+ #define VFP_OP(name, p) void OPPROTO op_vfp_##name##p(void)
+--- qemu.orig/target-arm/translate.c
++++ qemu/target-arm/translate.c
+@@ -7518,11 +7518,18 @@ static inline int gen_intermediate_code_
+ /* We always get here via a jump, so know we are not in a
+ conditional execution block. */
+ gen_op_exception_exit();
+ }
+ #endif
+-
++#ifdef CONFIG_USER_ONLY
++ /* Intercept jump to the magic kernel page. */
++ if (dc->pc > 0xffff0000) {
++ gen_op_kernel_trap();
++ dc->is_jmp = DISAS_UPDATE;
++ break;
++ }
++#endif
+ if (env->nb_breakpoints > 0) {
+ for(j = 0; j < env->nb_breakpoints; j++) {
+ if (env->breakpoints[j] == dc->pc) {
+ gen_set_condexec(dc);
+ gen_op_movl_T0_im((long)dc->pc);
diff --git a/packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch b/packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch
new file mode 100644
index 0000000000..c7f36d8110
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/qemu-amd64-32b-mapping-0.9.0.patch
@@ -0,0 +1,37 @@
+---
+ linux-user/mmap.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+Index: qemu/linux-user/mmap.c
+===================================================================
+--- qemu.orig/linux-user/mmap.c 2007-12-03 15:40:25.000000000 +0000
++++ qemu/linux-user/mmap.c 2007-12-03 16:37:21.000000000 +0000
+@@ -29,6 +29,10 @@
+
+ //#define DEBUG_MMAP
+
++#ifndef MAP_32BIT
++#define MAP_32BIT 0
++#endif
++
+ /* NOTE: all the constants are the HOST ones, but addresses are target. */
+ int target_mprotect(abi_ulong start, abi_ulong len, int prot)
+ {
+@@ -251,7 +255,7 @@ abi_long target_mmap(abi_ulong start, ab
+ especially important if qemu_host_page_size >
+ qemu_real_host_page_size */
+ p = mmap(g2h(mmap_start),
+- host_len, prot, flags | MAP_FIXED, fd, host_offset);
++ host_len, prot, flags | MAP_FIXED | MAP_32BIT, fd, host_offset);
+ if (p == MAP_FAILED)
+ return -1;
+ /* update start so that it points to the file position at 'offset' */
+@@ -406,7 +410,7 @@ abi_long target_mremap(abi_ulong old_add
+ unsigned long host_addr;
+
+ /* XXX: use 5 args syscall */
+- host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
++ host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags | MAP_32BIT);
+ if (host_addr == -1)
+ return -1;
+ new_addr = h2g(host_addr);
diff --git a/packages/qemu/qemu-0.9.1/series b/packages/qemu/qemu-0.9.1/series
new file mode 100644
index 0000000000..e6ffdcc6bd
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/series
@@ -0,0 +1,25 @@
+02_snapshot_use_tmpdir.patch -p0
+04_do_not_print_rtc_freq_if_ok.patch -p1
+05_non-fatal_if_linux_hd_missing.patch -p1
+06_exit_segfault.patch -p0
+10_signal_jobs.patch -p0
+11_signal_sigaction.patch -p0
+22_net_tuntap_stall.patch -p0
+31_syscalls.patch -p0
+32_syscall_sysctl.patch -p0
+33_syscall_ppc_clone.patch -p0
+39_syscall_fadvise64.patch -p0
+41_arm_fpa_sigfpe.patch -p0
+52_ne2000_return.patch -p1
+61_safe_64bit_int.patch -p0
+63_sparc_build.patch -p0
+64_ppc_asm_constraints.patch -p1
+65_kfreebsd.patch -p0
+66_tls_ld.patch -p0
+91-oh-sdl-cursor.patch -p0
+qemu-0.9.0-nptl.patch -p1
+qemu-0.9.0-nptl-update.patch -p1
+qemu-amd64-32b-mapping-0.9.0.patch -p1
+workaround_bad_futex_headers.patch -p1
+fix_segfault.patch -p1
+disable-error-in-configure.patch -p1
diff --git a/packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch b/packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch
new file mode 100644
index 0000000000..cc122ebdba
--- /dev/null
+++ b/packages/qemu/qemu-0.9.1/workaround_bad_futex_headers.patch
@@ -0,0 +1,25 @@
+---
+ linux-user/syscall.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c 2007-08-09 20:28:06.000000000 +0100
++++ qemu/linux-user/syscall.c 2007-08-09 20:28:41.000000000 +0100
+@@ -61,7 +61,15 @@
+ #define tchars host_tchars /* same as target */
+ #define ltchars host_ltchars /* same as target */
+
+-#include <linux/futex.h>
++#define FUTEX_WAIT 0
++#define FUTEX_WAKE 1
++#define FUTEX_FD 2
++#define FUTEX_REQUEUE 3
++#define FUTEX_CMP_REQUEUE 4
++#define FUTEX_WAKE_OP 5
++#define FUTEX_LOCK_PI 6
++#define FUTEX_UNLOCK_PI 7
++
+ #include <linux/termios.h>
+ #include <linux/unistd.h>
+ #include <linux/utsname.h>
diff --git a/packages/qemu/qemu-gcc3-check.inc b/packages/qemu/qemu-gcc3-check.inc
index 96b79fdf14..81c3555b48 100644
--- a/packages/qemu/qemu-gcc3-check.inc
+++ b/packages/qemu/qemu-gcc3-check.inc
@@ -1,20 +1,11 @@
python __anonymous() {
from bb import which, data
- path = data.getVar('PATH', d)
- oldOeConf = data.getVar('EXTRA_OECONF', d)
+ path = data.getVar('PATH', d, 1)
+ oldOeConf = data.getVar('EXTRA_OECONF', d, 1)
if not oldOeConf: oldOeConf = ""
- if len(which(path, 'gcc-3.4')) != 0:
- data.setVar('EXTRA_OECONF', oldOeConf + " --cc=gcc-3.4", d)
- elif len(which(path, 'gcc34')) != 0:
- data.setVar('EXTRA_OECONF', oldOeConf + " --cc=gcc34", d)
- elif len(which(path, 'gcc33')) != 0:
- data.setVar('EXTRA_OECONF', oldOeConf + " --cc=gcc33", d)
- elif len(which(path, 'gcc-3.3')) != 0:
- data.setVar('EXTRA_OECONF', oldOeConf + " --cc=gcc-3.3", d)
- elif len(which(path, 'gcc-3.3.6')) != 0:
- data.setVar('EXTRA_OECONF', oldOeConf + " --cc=gcc-3.3.6", d)
- elif len(which(path, 'gcc-3.4.6')) != 0:
- data.setVar('EXTRA_OECONF', oldOeConf + " --cc=gcc-3.4.6", d)
+ gcc3 = check_gcc3(d)
+ if gcc3:
+ data.setVar('EXTRA_OECONF', oldOeConf + " --cc=" + gcc3, d)
}
diff --git a/packages/qemu/qemu-native.inc b/packages/qemu/qemu-native.inc
index a20f5056b5..3e6433cc5e 100644
--- a/packages/qemu/qemu-native.inc
+++ b/packages/qemu/qemu-native.inc
@@ -1,8 +1,6 @@
-FILESPATH =. "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qemu-${PV}:"
-DEPENDS = "libsdl-native zlib-native"
+inherit native
+
+DEPENDS = "libsdl-native zlib-native gcc3-native"
require qemu-gcc3-check.inc
-do_stage() {
- find . -name "qemu-*" -type f -perm -755 -exec install -m 0755 {} ${STAGING_BINDIR} \;
-}
diff --git a/packages/qemu/qemu-native_0.9.0+cvs.bb b/packages/qemu/qemu-native_0.9.0+cvs.bb
deleted file mode 100644
index 65a7908a5c..0000000000
--- a/packages/qemu/qemu-native_0.9.0+cvs.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require qemu_0.9.0+cvs.bb
-inherit native
-require qemu-native.inc
diff --git a/packages/qemu/qemu-native_0.9.1.bb b/packages/qemu/qemu-native_0.9.1.bb
new file mode 100644
index 0000000000..16984a3f6a
--- /dev/null
+++ b/packages/qemu/qemu-native_0.9.1.bb
@@ -0,0 +1,2 @@
+require qemu_${PV}.bb
+require qemu-native.inc
diff --git a/packages/qemu/qemu-native_20070613.bb b/packages/qemu/qemu-native_20070613.bb
index d440d560e8..dc9852bd8c 100644
--- a/packages/qemu/qemu-native_20070613.bb
+++ b/packages/qemu/qemu-native_20070613.bb
@@ -1,7 +1,4 @@
require qemu_${PV}.bb
-inherit native
-DEPENDS = "zlib-native"
-prefix = "${STAGING_DIR_NATIVE}/${layout_prefix}"
+require qemu-native.inc
-require qemu-gcc3-check.inc
diff --git a/packages/qemu/qemu-native_cvs.bb b/packages/qemu/qemu-native_cvs.bb
index 639f9a6a7c..c9db5e35b9 100644
--- a/packages/qemu/qemu-native_cvs.bb
+++ b/packages/qemu/qemu-native_cvs.bb
@@ -1,3 +1,2 @@
require qemu_cvs.bb
-inherit native
require qemu-native.inc
diff --git a/packages/qemu/qemu_0.9.0+cvs.bb b/packages/qemu/qemu_0.9.0+cvs.bb
deleted file mode 100644
index 8a89b805a2..0000000000
--- a/packages/qemu/qemu_0.9.0+cvs.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-DESCRIPTION = "Qemu is an open source processor emulator."
-HOMEPAGE = "http://fabrice.bellard.free.fr/qemu/"
-SECTION = "devel"
-LICENSE = "GPL"
-SRCDATE="20070701"
-PV = "0.9.0+cvs${SRCDATE}"
-PR = "r1"
-
-SRC_URI = "cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu;date=${SRCDATE} \
- file://configure-0.9.0.patch;patch=1 \
- file://qemu-sdl-cursor-0.9.0.patch;patch=1 \
- file://arm_nptl-0.9.0.patch;patch=1 \
- file://pl110_rgb-r0-0.9.0.patch;patch=1 \
- file://qemu-0.9.0-gcc4.patch;patch=1 \
- file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1"
-S = "${WORKDIR}/qemu"
-
-EXTRA_OECONF="--disable-gcc-check"
-
-inherit autotools
-
-DEFAULT_PREFERENCE = "-1"
diff --git a/packages/qemu/qemu_0.9.1.bb b/packages/qemu/qemu_0.9.1.bb
new file mode 100644
index 0000000000..2f0aba7e64
--- /dev/null
+++ b/packages/qemu/qemu_0.9.1.bb
@@ -0,0 +1,48 @@
+LICENSE = "GPL"
+DEPENDS = "zlib"
+PR = "r6"
+
+FILESPATH = "${FILE_DIRNAME}/qemu-${PV}"
+FILESDIR = "${WORKDIR}"
+
+SRC_URI = "\
+ http://fabrice.bellard.free.fr/qemu/qemu-0.9.1.tar.gz \
+ file://02_snapshot_use_tmpdir.patch;patch=1;pnum=0 \
+ file://04_do_not_print_rtc_freq_if_ok.patch;patch=1;pnum=1 \
+ file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \
+ file://06_exit_segfault.patch;patch=1;pnum=0 \
+ file://10_signal_jobs.patch;patch=1;pnum=0 \
+ file://11_signal_sigaction.patch;patch=1;pnum=0 \
+ file://22_net_tuntap_stall.patch;patch=1;pnum=0 \
+ file://31_syscalls.patch;patch=1;pnum=0 \
+ file://32_syscall_sysctl.patch;patch=1;pnum=0 \
+ file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \
+ file://39_syscall_fadvise64.patch;patch=1;pnum=0 \
+ file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0 \
+ file://52_ne2000_return.patch;patch=1;pnum=1 \
+ file://61_safe_64bit_int.patch;patch=1;pnum=0 \
+ file://63_sparc_build.patch;patch=1;pnum=0 \
+ file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \
+ file://65_kfreebsd.patch;patch=1;pnum=0 \
+ file://66_tls_ld.patch;patch=1;pnum=0 \
+ file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \
+ file://qemu-0.9.0-nptl.patch;patch=1 \
+ file://qemu-0.9.0-nptl-update.patch;patch=1 \
+ file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \
+ file://workaround_bad_futex_headers.patch;patch=1 \
+ file://fix_segfault.patch;patch=1 \
+ file://configure_symlinkpath_fix.patch;patch=1 \
+ file://disable-error-in-configure.patch;patch=1 \
+ file://no-strip.patch;patch=1"
+
+S = "${WORKDIR}/qemu-${PV}"
+
+#EXTRA_OECONF += "--disable-sdl"
+#EXTRA_OECONF += "--target-list=arm-linux-user,arm-softmmu"
+EXTRA_OECONF += "--disable-gfx-check"
+
+inherit autotools
+
+do_configure() {
+ oe_runconf
+}
diff --git a/packages/qemu/qemu_20070613.bb b/packages/qemu/qemu_20070613.bb
index 6584bcc3ed..533848963b 100644
--- a/packages/qemu/qemu_20070613.bb
+++ b/packages/qemu/qemu_20070613.bb
@@ -4,6 +4,7 @@ SRCDATE = "20070613"
PV = "0.9.0+cvs${SRCDATE}"
PR = "r5"
+FILESPATH = "${FILE_DIRNAME}/qemu-${PV}"
FILESDIR = "${WORKDIR}"
SRC_URI = "\
@@ -37,15 +38,6 @@ SRC_URI = "\
file://fix_segfault.patch;patch=1 \
file://no-strip.patch;patch=1"
-# svn://svn.o-hand.com/repos/misc/trunk/qemu-packaging/qemu;module=debian;proto=http;srcdate=20070119 \
-# file://debian/patches/21_net_soopts.patch;patch=1;pnum=0 \
-# file://debian/patches/35_syscall_sockaddr.patch;patch=1;pnum=0 \
-# file://debian/patches/43_arm_cpustate.patch;patch=1;pnum=0 \
-# file://debian/patches/62_linux_boot_nasm.patch;patch=1;pnum=0 \
-# file://debian/patches/67_ppc_ftbfs.patch;patch=1;pnum=0 \
-# file://debian/patches/80_ui_curses.patch;patch=1;pnum=0 \
-# file://debian/patches/96-x.patch;patch=1"
-
S = "${WORKDIR}/qemu"
#EXTRA_OECONF = "--disable-sdl"
diff --git a/packages/qemu/qemu_cvs.bb b/packages/qemu/qemu_cvs.bb
index d76bfa2834..137262ca2d 100644
--- a/packages/qemu/qemu_cvs.bb
+++ b/packages/qemu/qemu_cvs.bb
@@ -1,26 +1,55 @@
-DESCRIPTION = "Qemu is an open source processor emulator."
-HOMEPAGE = "http://fabrice.bellard.free.fr/qemu/"
-SECTION = "devel"
LICENSE = "GPL"
-PV = "0.8.2+cvs${SRCDATE}"
-PR = "r2"
+DEPENDS = "zlib"
+PV = "0.9.0+cvs${SRCDATE}"
+PR = "r4"
+
+DEFAULT_PREFERENCE = "-1"
+FILESDIR = "${WORKDIR}"
+
+SRC_URI = "\
+ cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \
+ file://02_snapshot_use_tmpdir.patch;patch=1;pnum=0 \
+ file://03_machines_list_no_error.patch;patch=1;pnum=0 \
+ file://04_do_not_print_rtc_freq_if_ok.patch;patch=1;pnum=1 \
+ file://05_non-fatal_if_linux_hd_missing.patch;patch=1;pnum=1 \
+ file://06_exit_segfault.patch;patch=1;pnum=0 \
+ file://10_signal_jobs.patch;patch=1;pnum=0 \
+ file://11_signal_sigaction.patch;patch=1;pnum=0 \
+ file://12_signal_powerpc_support.patch;patch=1;pnum=1 \
+ file://22_net_tuntap_stall.patch;patch=1;pnum=0 \
+ file://31_syscalls.patch;patch=1;pnum=0 \
+ file://32_syscall_sysctl.patch;patch=1;pnum=0 \
+ file://33_syscall_ppc_clone.patch;patch=1;pnum=0 \
+ file://39_syscall_fadvise64.patch;patch=1;pnum=0 \
+ file://41_arm_fpa_sigfpe.patch;patch=1;pnum=0 \
+ file://52_ne2000_return.patch;patch=1;pnum=1 \
+ file://61_safe_64bit_int.patch;patch=1;pnum=0 \
+ file://63_sparc_build.patch;patch=1;pnum=0 \
+ file://64_ppc_asm_constraints.patch;patch=1;pnum=1 \
+ file://65_kfreebsd.patch;patch=1;pnum=0 \
+ file://66_tls_ld.patch;patch=1;pnum=0 \
+ file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \
+ file://93-oh-pl110-rgb.patch;patch=1;pnum=0 \
+ file://qemu-0.9.0-nptl.patch;patch=1 \
+ file://qemu-0.9.0-nptl-update.patch;patch=1 \
+ file://qemu-amd64-32b-mapping-0.9.0.patch;patch=1 \
+ file://workaround_bad_futex_headers.patch;patch=1 \
+ file://fix_segfault.patch;patch=1"
+
+# svn://svn.o-hand.com/repos/misc/trunk/qemu-packaging/qemu;module=debian;proto=http;srcdate=20070119 \
+# file://debian/patches/21_net_soopts.patch;patch=1;pnum=0 \
+# file://debian/patches/35_syscall_sockaddr.patch;patch=1;pnum=0 \
+# file://debian/patches/43_arm_cpustate.patch;patch=1;pnum=0 \
+# file://debian/patches/62_linux_boot_nasm.patch;patch=1;pnum=0 \
+# file://debian/patches/67_ppc_ftbfs.patch;patch=1;pnum=0 \
+# file://debian/patches/80_ui_curses.patch;patch=1;pnum=0 \
+# file://debian/patches/96-x.patch;patch=1"
-SRC_URI = "cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \
- file://configure.patch;patch=1 \
- file://makefile.patch;patch=1 \
- file://qemu-sdl-cursor.patch;patch=1 \
- file://arm_nptl.patch;patch=1 \
- file://pl110_rgb-r0.patch;patch=1 \
- file://qemu-pci-irq-sharing.patch;patch=1 \
- file://compiler.patch;patch=1 \
- file://qemu-usb-wacom-0.8.2.patch;patch=1 \
- file://qemu-usb-wacom-pressure.patch;patch=1 \
- file://qemu-usb-wacom-buttons.patch;patch=1 \
- http://www.busybox.net/downloads/qemu/qemu-gcc-4-all.patch;patch=1"
S = "${WORKDIR}/qemu"
-EXTRA_OECONF="--disable-gcc-check"
+#EXTRA_OECONF += "--disable-sdl"
+#EXTRA_OECONF += "--target-list=arm-linux-user"
+EXTRA_OECONF += "--disable-gfx-check"
inherit autotools
-DEFAULT_PREFERENCE = "-1"
diff --git a/packages/qmake/qmake2-native-2.10a/0001-fix-mkspecs.patch b/packages/qmake/qmake2-native-2.10a/0001-fix-mkspecs.patch
deleted file mode 100644
index abebfdfa27..0000000000
--- a/packages/qmake/qmake2-native-2.10a/0001-fix-mkspecs.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From 594157753a24d0575aaf948dc0e9500f6bdb2178 Mon Sep 17 00:00:00 2001
-From: Michael Krelin <hacker@klever.net>
-Date: Sat, 2 Jun 2007 16:39:58 +0200
-Subject: [PATCH] fix mkspecs
-
----
- mkspecs/common/g++.conf | 18 +++++++++---------
- mkspecs/common/linux.conf | 26 +++++++++++++-------------
- 2 files changed, 22 insertions(+), 22 deletions(-)
-
-diff --git a/mkspecs/common/g++.conf b/mkspecs/common/g++.conf
-index f5a5c8e..4007c7e 100644
---- a/mkspecs/common/g++.conf
-+++ b/mkspecs/common/g++.conf
-@@ -2,12 +2,12 @@
- # qmake configuration for common gcc
- #
-
--QMAKE_CC = gcc
--QMAKE_CFLAGS += -pipe
-+QMAKE_CC = $(OE_QMAKE_CC)
-+QMAKE_CFLAGS += -pipe $(OE_QMAKE_CFLAGS)
- QMAKE_CFLAGS_DEPS += -M
- QMAKE_CFLAGS_WARN_ON += -Wall -W
- QMAKE_CFLAGS_WARN_OFF += -w
--QMAKE_CFLAGS_RELEASE += -O2
-+QMAKE_CFLAGS_RELEASE += -O2
- QMAKE_CFLAGS_DEBUG += -g
- QMAKE_CFLAGS_SHLIB += -fPIC
- QMAKE_CFLAGS_STATIC_LIB += -fPIC
-@@ -16,8 +16,8 @@ QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
- QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
- QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
-
--QMAKE_CXX = g++
--QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
-+QMAKE_CXX = $(OE_QMAKE_CXX)
-+QMAKE_CXXFLAGS += $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS)
- QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
- QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
- QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
-@@ -30,9 +30,9 @@ QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
- QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
- QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-
--QMAKE_LINK = g++
--QMAKE_LINK_SHLIB = g++
--QMAKE_LFLAGS +=
-+QMAKE_LINK = $(OE_QMAKE_LINK)
-+QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK)
-+QMAKE_LFLAGS += $(OE_QMAKE_LDFLAGS)
- QMAKE_LFLAGS_RELEASE +=
- QMAKE_LFLAGS_DEBUG +=
- QMAKE_LFLAGS_APP +=
-@@ -40,7 +40,7 @@ QMAKE_LFLAGS_SHLIB += -shared
- QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
- QMAKE_LFLAGS_SONAME += -Wl,-soname,
- QMAKE_LFLAGS_THREAD +=
--QMAKE_RPATH = -Wl,-rpath,
-+QMAKE_RPATH = -Wl,-rpath-link,
-
- QMAKE_PCH_OUTPUT_EXT = .gch
-
-diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf
-index 3796a87..52acf16 100644
---- a/mkspecs/common/linux.conf
-+++ b/mkspecs/common/linux.conf
-@@ -7,26 +7,26 @@ QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
-
- QMAKE_INCDIR =
- QMAKE_LIBDIR =
--QMAKE_INCDIR_X11 = /usr/X11R6/include
--QMAKE_LIBDIR_X11 = /usr/X11R6/lib
--QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
--QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
--QMAKE_INCDIR_OPENGL = /usr/X11R6/include
--QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
-+QMAKE_INCDIR_X11 =
-+QMAKE_LIBDIR_X11 =
-+QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
-+QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
-+QMAKE_INCDIR_OPENGL =
-+QMAKE_LIBDIR_OPENGL =
-
- QMAKE_LIBS =
- QMAKE_LIBS_DYNLOAD = -ldl
--QMAKE_LIBS_X11 = -lXext -lX11 -lm
--QMAKE_LIBS_X11SM = -lSM -lICE
-+QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
-+QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
- QMAKE_LIBS_NIS = -lnsl
- QMAKE_LIBS_OPENGL = -lGLU -lGL
- QMAKE_LIBS_OPENGL_QT = -lGL
- QMAKE_LIBS_THREAD = -lpthread
-
--QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
--QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
-+QMAKE_MOC = $(OE_QMAKE_MOC)
-+QMAKE_UIC = $(OE_QMAKE_UIC)
-
--QMAKE_AR = ar cqs
-+QMAKE_AR = $(OE_QMAKE_AR) cqs
- QMAKE_RANLIB =
-
- QMAKE_TAR = tar -cf
-@@ -38,11 +38,11 @@ QMAKE_COPY_DIR = $(COPY) -r
- QMAKE_MOVE = mv -f
- QMAKE_DEL_FILE = rm -f
- QMAKE_DEL_DIR = rmdir
--QMAKE_STRIP = strip
-+QMAKE_STRIP = $(OE_QMAKE_STRIP)
- QMAKE_STRIPFLAGS_LIB += --strip-unneeded
- QMAKE_CHK_DIR_EXISTS = test -d
- QMAKE_MKDIR = mkdir -p
- QMAKE_INSTALL_FILE = install -m 644 -p
- QMAKE_INSTALL_PROGRAM = install -m 755 -p
-
--include(unix.conf)
-\ No newline at end of file
-+include(unix.conf)
---
-1.5.1.6
-
diff --git a/packages/qmake/qmake2-native.inc b/packages/qmake/qmake2-native.inc
new file mode 100644
index 0000000000..c609fefb81
--- /dev/null
+++ b/packages/qmake/qmake2-native.inc
@@ -0,0 +1,68 @@
+DESCRIPTION = "TrollTech Makefile Generator"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.trolltech.com"
+SECTION = "devel"
+LICENSE = "GPL"
+PR = "r2"
+
+QTVER = "qtopia-core-opensource-src-${QTVERSION}"
+
+FILESDIR += "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qmake2-native"
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/${QTVER}.tar.gz \
+ file://0001-fix-mkspecs.patch;patch=1 \
+ file://0008-backport-qt-lib-infix.patch;patch=1 \
+ file://qt-config.patch;patch=1 \
+ file://use-lflags-last.patch;patch=1 \
+ file://linux-oe-qmake.conf"
+S = "${WORKDIR}/${QTVER}"
+
+# we need the real target system here
+CROSS_SYS := "${TARGET_SYS}"
+inherit autotools cross
+
+export QTDIR = "${S}"
+EXTRA_OEMAKE = "-e"
+
+do_configure() {
+ # Install the OE build templates
+ for template in linux-oe-g++ linux-uclibc-oe-g++ linux-gnueabi-oe-g++
+ do
+ install -d ${S}/mkspecs/$template
+ install -m 0644 ${WORKDIR}/linux-oe-qmake.conf ${S}/mkspecs/$template/qmake.conf
+ ln -sf ../linux-g++/qplatformdefs.h ${S}/mkspecs/$template/qplatformdefs.h
+ done
+
+ QMAKESPEC=
+ PLATFORM=${HOST_OS}-oe-g++
+ export PLATFORM
+ # yes, TARGET_SYS is correct, because this is a 'cross'-qmake-native :) :M:
+ export OE_QMAKE_CC="${CC}"
+ export OE_QMAKE_CFLAGS="${CFLAGS}"
+ export OE_QMAKE_CXX="${CXX}"
+ export OE_QMAKE_CXXFLAGS="-fno-exceptions -fno-rtti ${CXXFLAGS}"
+ export OE_QMAKE_LDFLAGS="${LDFLAGS}"
+ export OE_QMAKE_LINK="${CCLD}"
+ export OE_QMAKE_AR="${AR}"
+ export OE_QMAKE_STRIP="${STRIP}"
+ export OE_QMAKE_UIC="${STAGING_BINDIR_NATIVE}/uic"
+ export OE_QMAKE_MOC="${STAGING_BINDIR_NATIVE}/moc"
+ export OE_QMAKE_RCC="non-existant"
+ export OE_QMAKE_QMAKE="${STAGING_BINDIR_NATIVE}/qmake"
+ export OE_QMAKE_RPATH="-Wl,-rpath-link,"
+ echo yes | ./configure -prefix ${STAGING_DIR}/${CROSS_SYS}/qt4 ${EXTRA_OECONF} || die "Configuring qt failed"
+}
+
+do_compile() {
+ :
+}
+
+do_stage() {
+ install -m 0755 bin/qmake ${STAGING_BINDIR}/qmake2
+ install -m 0755 bin/qmake ${STAGING_BINDIR}/qmake-qt4
+ install -d ${CROSS_DATADIR}/qt4
+ cp -PfR mkspecs ${CROSS_DATADIR}/qt4/
+}
+
+do_install() {
+ :
+}
diff --git a/packages/qmake/qmake2-native/.mtn2git_empty b/packages/qmake/qmake2-native/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qmake/qmake2-native/.mtn2git_empty
diff --git a/packages/qmake/qmake2-native/0001-fix-mkspecs.patch b/packages/qmake/qmake2-native/0001-fix-mkspecs.patch
new file mode 100644
index 0000000000..e0ebe512c8
--- /dev/null
+++ b/packages/qmake/qmake2-native/0001-fix-mkspecs.patch
@@ -0,0 +1,146 @@
+From aa0377910cfd8d0fce6bdc9355994a4e267b1696 Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Sat, 2 Jun 2007 16:39:58 +0200
+Subject: [PATCH] fix mkspecs
+
+---
+ mkspecs/common/g++.conf | 18 +++++++++---------
+ mkspecs/common/linux.conf | 26 +++++++++++++-------------
+ 2 files changed, 22 insertions(+), 22 deletions(-)
+
+Index: qtopia-core-opensource-src-4.3.3/mkspecs/common/g++.conf
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/common/g++.conf 2007-12-04 18:07:53.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/mkspecs/common/g++.conf 2007-12-26 19:47:02.000000000 +0100
+@@ -2,12 +2,12 @@
+ # qmake configuration for common gcc
+ #
+
+-QMAKE_CC = gcc
+-QMAKE_CFLAGS += -pipe
++QMAKE_CC = $(OE_QMAKE_CC)
++QMAKE_CFLAGS += -pipe $(OE_QMAKE_CFLAGS)
+ QMAKE_CFLAGS_DEPS += -M
+ QMAKE_CFLAGS_WARN_ON += -Wall -W
+ QMAKE_CFLAGS_WARN_OFF += -w
+-QMAKE_CFLAGS_RELEASE += -O2
++QMAKE_CFLAGS_RELEASE +=
+ QMAKE_CFLAGS_DEBUG += -g
+ QMAKE_CFLAGS_SHLIB += -fPIC
+ QMAKE_CFLAGS_STATIC_LIB += -fPIC
+@@ -16,8 +16,8 @@
+ QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+ QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
+
+-QMAKE_CXX = g++
+-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
++QMAKE_CXX = $(OE_QMAKE_CXX)
++QMAKE_CXXFLAGS += $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS)
+ QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
+ QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
+ QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
+@@ -30,9 +30,9 @@
+ QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+ QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+
+-QMAKE_LINK = g++
+-QMAKE_LINK_SHLIB = g++
+-QMAKE_LFLAGS +=
++QMAKE_LINK = $(OE_QMAKE_LINK)
++QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK)
++QMAKE_LFLAGS += $(OE_QMAKE_LDFLAGS)
+ QMAKE_LFLAGS_RELEASE +=
+ QMAKE_LFLAGS_DEBUG +=
+ QMAKE_LFLAGS_APP +=
+@@ -40,7 +40,7 @@
+ QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+ QMAKE_LFLAGS_SONAME += -Wl,-soname,
+ QMAKE_LFLAGS_THREAD +=
+-QMAKE_RPATH = -Wl,-rpath,
++QMAKE_RPATH = -Wl,-rpath-link,
+
+ QMAKE_PCH_OUTPUT_EXT = .gch
+
+Index: qtopia-core-opensource-src-4.3.3/mkspecs/common/linux.conf
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/common/linux.conf 2007-12-04 18:07:53.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/mkspecs/common/linux.conf 2007-12-26 19:47:02.000000000 +0100
+@@ -7,26 +7,26 @@
+
+ QMAKE_INCDIR =
+ QMAKE_LIBDIR =
+-QMAKE_INCDIR_X11 = /usr/X11R6/include
+-QMAKE_LIBDIR_X11 = /usr/X11R6/lib
+-QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
+-QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
+-QMAKE_INCDIR_OPENGL = /usr/X11R6/include
+-QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
++QMAKE_INCDIR_X11 =
++QMAKE_LIBDIR_X11 =
++QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
++QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
++QMAKE_INCDIR_OPENGL =
++QMAKE_LIBDIR_OPENGL =
+
+ QMAKE_LIBS =
+ QMAKE_LIBS_DYNLOAD = -ldl
+-QMAKE_LIBS_X11 = -lXext -lX11 -lm
+-QMAKE_LIBS_X11SM = -lSM -lICE
++QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
++QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
+ QMAKE_LIBS_NIS = -lnsl
+ QMAKE_LIBS_OPENGL = -lGLU -lGL
+ QMAKE_LIBS_OPENGL_QT = -lGL
+ QMAKE_LIBS_THREAD = -lpthread
+
+-QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
+-QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
++QMAKE_MOC = $(OE_QMAKE_MOC)
++QMAKE_UIC = $(OE_QMAKE_UIC)
+
+-QMAKE_AR = ar cqs
++QMAKE_AR = $(OE_QMAKE_AR) cqs
+ QMAKE_RANLIB =
+
+ QMAKE_TAR = tar -cf
+@@ -38,11 +38,11 @@
+ QMAKE_MOVE = mv -f
+ QMAKE_DEL_FILE = rm -f
+ QMAKE_DEL_DIR = rmdir
+-QMAKE_STRIP = strip
++QMAKE_STRIP = $(OE_QMAKE_STRIP)
+ QMAKE_STRIPFLAGS_LIB += --strip-unneeded
+ QMAKE_CHK_DIR_EXISTS = test -d
+ QMAKE_MKDIR = mkdir -p
+ QMAKE_INSTALL_FILE = install -m 644 -p
+ QMAKE_INSTALL_PROGRAM = install -m 755 -p
+
+-include(unix.conf)
+\ No newline at end of file
++include(unix.conf)
+Index: qtopia-core-opensource-src-4.3.3/mkspecs/linux-g++/qmake.conf
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/linux-g++/qmake.conf 2007-12-04 18:07:53.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/mkspecs/linux-g++/qmake.conf 2007-12-26 19:47:02.000000000 +0100
+@@ -5,7 +5,7 @@
+ MAKEFILE_GENERATOR = UNIX
+ TEMPLATE = app
+ CONFIG += qt warn_on release incremental link_prl
+-QT += core gui
++QT += core gui $$(OE_QMAKE_EXTRA_MODULES)
+ QMAKE_INCREMENTAL_STYLE = sublib
+
+ include(../common/g++.conf)
+Index: qtopia-core-opensource-src-4.3.3/mkspecs/common/unix.conf
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/common/unix.conf 2007-12-26 19:48:20.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/mkspecs/common/unix.conf 2007-12-26 19:49:50.000000000 +0100
+@@ -10,6 +10,8 @@
+ QMAKE_YACC_HEADER = $base.tab.h
+ QMAKE_YACC_SOURCE = $base.tab.c
+
++QMAKE_RCC = $$(OE_QMAKE_RCC)
++
+ QMAKE_SEPARATE_DEBUG_INFO = (test -z \"$(DESTDIR)\" || cd \"$(DESTDIR)\" ; targ=`basename $(TARGET)`; objcopy --only-keep-debug \"\$\$targ\" \"\$\$targ.debug\" && objcopy --strip-debug \"\$\$targ\" && objcopy --add-gnu-debuglink=\"\$\$targ.debug\" \"\$\$targ\" && chmod -x \"\$\$targ.debug\" ) ;
+
+ QMAKE_INSTALL_SEPARATE_DEBUG_INFO = test -z "$(DESTDIR)" || cd \"$(DESTDIR)\" ; $(INSTALL_FILE) `basename $(TARGET)`.debug $(INSTALL_ROOT)/\$\$target_path/
diff --git a/packages/qmake/qmake2-native/0008-backport-qt-lib-infix.patch b/packages/qmake/qmake2-native/0008-backport-qt-lib-infix.patch
new file mode 100644
index 0000000000..f87576a07b
--- /dev/null
+++ b/packages/qmake/qmake2-native/0008-backport-qt-lib-infix.patch
@@ -0,0 +1,33 @@
+diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf
+index 32a7fd5..48d584f 100644
+--- a/mkspecs/features/qt_functions.prf
++++ b/mkspecs/features/qt_functions.prf
+@@ -28,7 +28,7 @@ defineTest(qtAddLibrary) {
+ INCLUDEPATH -= $$FRAMEWORK_INCLUDE
+ INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH
+ }
+- LINKAGE = -framework $${LIB_NAME}
++ LINKAGE = -framework $${LIB_NAME}$${QT_LIBINFIX}
+ } else:!qt_no_framework { #detection
+ for(frmwrk_dir, $$list($$QMAKE_LIBDIR_QT $$QMAKE_LIBDIR $$(DYLD_FRAMEWORK_PATH) /Library/Frameworks)) {
+ exists($${frmwrk_dir}/$${LIB_NAME}.framework) {
+@@ -46,15 +46,15 @@ defineTest(qtAddLibrary) {
+ }
+ isEmpty(LINKAGE) {
+ CONFIG(debug, debug|release) {
+- win32:LINKAGE = -l$${LIB_NAME}d
+- mac:LINKAGE = -l$${LIB_NAME}_debug
++ win32:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}d
++ mac:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}_debug
+ }
+- isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}
++ isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}
+ }
+ !isEmpty(QMAKE_LSB) {
+ QMAKE_LFLAGS *= --lsb-libpath=$$$$QMAKE_LIBDIR_QT
+ QMAKE_LFLAGS *= -L/opt/lsb/lib
+- QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME}
++ QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME}${QT_LIBINFIX}
+ }
+ LIBS += $$LINKAGE
+ export(LIBS)
diff --git a/packages/qmake/qmake2-native-2.10a/linux-oe-qmake.conf b/packages/qmake/qmake2-native/linux-oe-qmake.conf
index f58481a693..f58481a693 100644
--- a/packages/qmake/qmake2-native-2.10a/linux-oe-qmake.conf
+++ b/packages/qmake/qmake2-native/linux-oe-qmake.conf
diff --git a/packages/qmake/qmake2-native/qt-config.patch b/packages/qmake/qmake2-native/qt-config.patch
new file mode 100644
index 0000000000..b2d86de2c5
--- /dev/null
+++ b/packages/qmake/qmake2-native/qt-config.patch
@@ -0,0 +1,27 @@
+Allow to set a qt.conf from the outside using the environment. This allows
+to inject new prefixes and other paths into qmake. This is needed when using
+the same qmake binary to build qt/x11 and qt/embedded
+
+Index: qtopia-core-opensource-src-4.3.3/src/corelib/global/qlibraryinfo.cpp
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/src/corelib/global/qlibraryinfo.cpp 2007-12-25 00:55:32.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/src/corelib/global/qlibraryinfo.cpp 2007-12-25 01:20:18.000000000 +0100
+@@ -42,6 +42,7 @@
+ #include "qpointer.h"
+ #ifdef QT_BUILD_QMAKE
+ extern QString qmake_libraryInfoFile();
++#include <stdlib.h>
+ #else
+ # include "qcoreapplication.h"
+ #endif
+@@ -107,6 +108,10 @@
+ #ifdef QT_BUILD_QMAKE
+ if(!QFile::exists(qtconfig))
+ qtconfig = qmake_libraryInfoFile();
++ if (!QFile::exists(qtconfig)) {
++ QByteArray config = getenv("QT_CONF_PATH");
++ qtconfig = config;
++ }
+ #else
+ if (!QFile::exists(qtconfig) && QCoreApplication::instance()) {
+ #ifdef Q_OS_MAC
diff --git a/packages/qmake/qmake2-native-2.10a/use-lflags-last.patch b/packages/qmake/qmake2-native/use-lflags-last.patch
index 4197dbbf64..4197dbbf64 100644
--- a/packages/qmake/qmake2-native-2.10a/use-lflags-last.patch
+++ b/packages/qmake/qmake2-native/use-lflags-last.patch
diff --git a/packages/qmake/qmake2-native_2.10a.bb b/packages/qmake/qmake2-native_2.10a.bb
index 84df0ef732..89b2ae5a82 100644
--- a/packages/qmake/qmake2-native_2.10a.bb
+++ b/packages/qmake/qmake2-native_2.10a.bb
@@ -1,67 +1,2 @@
-DESCRIPTION = "TrollTech Makefile Generator"
-PRIORITY = "optional"
-HOMEPAGE = "http://www.trolltech.com"
-SECTION = "devel"
-LICENSE = "GPL"
-PR = "r1"
-
-QTVER = "qtopia-core-opensource-src-4.3.2"
-
-SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/${QTVER}.tar.gz \
- file://0001-fix-mkspecs.patch;patch=1 \
- file://use-lflags-last.patch;patch=1 \
- file://linux-oe-qmake.conf"
-S = "${WORKDIR}/${QTVER}"
-
-# we need the real target system here
-CROSS_SYS := "${TARGET_SYS}"
-inherit autotools native
-
-export QTDIR = "${S}"
-EXTRA_OEMAKE = "-e"
-
-do_configure() {
- # Install the OE build templates
- for template in linux-oe-g++ linux-uclibc-oe-g++ linux-gnueabi-oe-g++
- do
- install -d ${S}/mkspecs/$template
- install -m 0644 ${WORKDIR}/linux-oe-qmake.conf ${S}/mkspecs/$template/qmake.conf
- ln -sf ../linux-g++/qplatformdefs.h ${S}/mkspecs/$template/qplatformdefs.h
- done
-
- QMAKESPEC=
- PLATFORM=${HOST_OS}-oe-g++
- export PLATFORM
- # yes, TARGET_SYS is correct, because this is a 'cross'-qmake-native :) :M:
- export OE_QMAKE_CC="${CC}"
- export OE_QMAKE_CFLAGS="${CFLAGS}"
- export OE_QMAKE_CXX="${CXX}"
- export OE_QMAKE_CXXFLAGS="-fno-exceptions -fno-rtti ${CXXFLAGS}"
- export OE_QMAKE_LDFLAGS="${LDFLAGS}"
- export OE_QMAKE_LINK="${CCLD}"
- export OE_QMAKE_AR="${AR}"
- export OE_QMAKE_STRIP="${STRIP}"
- export OE_QMAKE_UIC="${STAGING_BINDIR_NATIVE}/uic"
- export OE_QMAKE_MOC="${STAGING_BINDIR_NATIVE}/moc"
- export OE_QMAKE_RCC="non-existant"
- export OE_QMAKE_QMAKE="${STAGING_BINDIR_NATIVE}/qmake"
- export OE_QMAKE_RPATH="-Wl,-rpath-link,"
- echo yes | ./configure -prefix ${STAGING_DIR}/${CROSS_SYS}/qt4 ${EXTRA_OECONF} || die "Configuring qt failed"
-}
-
-do_compile() {
- :
-}
-
-do_stage() {
- install -m 0755 bin/qmake ${STAGING_BINDIR}/qmake2
- install -m 0755 bin/qmake ${STAGING_BINDIR}/qmake-qt4
- install -d ${STAGING_DIR}/${CROSS_SYS}/qt4/
- cp -PfR mkspecs ${STAGING_DIR}/${CROSS_SYS}/qt4/
- install -d ${STAGING_DIR}/${HOST_SYS}/qt4/
- cp -PfR mkspecs ${STAGING_DIR}/${HOST_SYS}/qt4/
-}
-
-do_install() {
- :
-}
+QTVERSION="4.3.3"
+require ${PN}.inc
diff --git a/packages/qpe-games/crossword_0.0.3.bb b/packages/qpe-games/crossword_0.0.3.bb
index b46c0d92f2..db468235f1 100644
--- a/packages/qpe-games/crossword_0.0.3.bb
+++ b/packages/qpe-games/crossword_0.0.3.bb
@@ -26,7 +26,7 @@ pkg_postinst() {
MIMEFILE=/opt/QtPalmtop/etc/mime.types
-grep -q application/puz $MIMEFILE 2>/dev/null || echo -e "application/crossword\t\tpuz tpz" >> $MIMEFILE
+grep -q application/puz $MIMEFILE 2>/dev/null || printf "application/crossword\t\tpuz tpz\n" >> $MIMEFILE
}
inherit opie
diff --git a/packages/qpegps/files/qpegps.desktop b/packages/qpegps/files/qpegps.desktop
index 16e222b00b..de5a93ccea 100644
--- a/packages/qpegps/files/qpegps.desktop
+++ b/packages/qpegps/files/qpegps.desktop
@@ -1,7 +1,6 @@
[Desktop Entry]
Comment=Moving Map
Exec=qpegps
-Icon=qpegps/qpegps.png
+Icon=qpegps
Type=Application
Name=qpeGPS
-
diff --git a/packages/qpegps/qpegps.inc b/packages/qpegps/qpegps.inc
index 2e10bf40a6..e117d5fc21 100644
--- a/packages/qpegps/qpegps.inc
+++ b/packages/qpegps/qpegps.inc
@@ -4,6 +4,7 @@ PRIORITY = "optional"
LICENSE = "GPL"
HOMEPAGE = "http://qpegps.sourceforge.net/"
+DEPENDS = "gpsd"
RRECOMMENDS = "gpsd"
SRC_URI = "${SOURCEFORGE_MIRROR}/qpegps/qpegps_${PV}_src.zip \
@@ -16,18 +17,19 @@ inherit palmtop
QMAKE_PROFILES = "qpegps.pro"
EXTRA_QMAKEVARS_POST = "LIBS=-lqpe LIBS+=-lgps"
OE_QMAKE_CFLAGS += " -DQWS "
+OE_QMAKE_LIBS_QT = ${QT_LIBRARY}
do_install() {
install -d ${D}${palmtopdir}/bin \
${D}${palmtopdir}/apps/Applications \
- ${D}${palmtopdir}/pics/qpegps \
+ ${D}${palmtopdir}/pics \
${D}${palmtopdir}/help/html/qpegps_icons \
${D}${palmtopdir}/qpegps/maps \
${D}${palmtopdir}/qpegps/icons \
${D}${palmtopdir}/qpegps/tracks
install -m 0755 qpegps ${D}${palmtopdir}/bin/
install -m 0644 ${WORKDIR}/qpegps.desktop ${D}${palmtopdir}/apps/Applications/
- install -m 0644 ${WORKDIR}/qpegps.png ${D}${palmtopdir}/pics/qpegps/
+ install -m 0644 ${WORKDIR}/qpegps.png ${D}${palmtopdir}/pics/
install -m 0644 doc/qpegps.html ${D}${palmtopdir}/help/html/
install -m 0644 doc/qpegps_icons/*.png ${D}${palmtopdir}/help/html/qpegps_icons/
install -m 0644 icons/*.xpm ${D}${palmtopdir}/qpegps/icons/
diff --git a/packages/qpegps/qpegps_0.9.2.3.3.bb b/packages/qpegps/qpegps_0.9.2.3.3.bb
index 4cdb945321..a1c493005f 100644
--- a/packages/qpegps/qpegps_0.9.2.3.3.bb
+++ b/packages/qpegps/qpegps_0.9.2.3.3.bb
@@ -1 +1,3 @@
require qpegps.inc
+
+PR = "r1"
diff --git a/packages/qpegps/qpegps_0.9.3.1.bb b/packages/qpegps/qpegps_0.9.3.1.bb
new file mode 100644
index 0000000000..be4f293fe6
--- /dev/null
+++ b/packages/qpegps/qpegps_0.9.3.1.bb
@@ -0,0 +1,8 @@
+require qpegps.inc
+
+PR = "r1"
+
+do_configure_prepend() {
+ mv ${S}/Place.cpp ${S}/place.cpp
+ mv ${S}/Place.h ${S}/place.h
+}
diff --git a/packages/qpegps/qpegps_0.9.3.bb b/packages/qpegps/qpegps_0.9.3.bb
deleted file mode 100644
index 4cdb945321..0000000000
--- a/packages/qpegps/qpegps_0.9.3.bb
+++ /dev/null
@@ -1 +0,0 @@
-require qpegps.inc
diff --git a/packages/qpegps/qpegps_svn.bb b/packages/qpegps/qpegps_svn.bb
new file mode 100644
index 0000000000..3ae1d58a80
--- /dev/null
+++ b/packages/qpegps/qpegps_svn.bb
@@ -0,0 +1,15 @@
+require qpegps.inc
+
+PV = "0.0+svn${SRCDATE}"
+PR = "r1"
+
+SRC_URI = "svn://qpegps.svn.sourceforge.net/svnroot/;module=qpegps/trunk/qpegps;proto=https \
+ file://qpegps.desktop \
+ file://qpegps.png "
+
+S = "${WORKDIR}/qpegps/trunk/qpegps"
+
+do_configure_prepend() {
+ mv ${S}/Place.cpp ${S}/place.cpp
+ mv ${S}/Place.h ${S}/place.h
+}
diff --git a/packages/qpf-fonts/qpf-arabic_1.0.bb b/packages/qpf-fonts/qpf-arabic_1.0.bb
index 1d73f880c8..d2ef3af639 100644
--- a/packages/qpf-fonts/qpf-arabic_1.0.bb
+++ b/packages/qpf-fonts/qpf-arabic_1.0.bb
@@ -1,18 +1,9 @@
+require qpf.inc
+
DESCRIPTION = "Arabic fonts from Arabeyes.org"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
-LICENSE = "GPL"
HOMEPAGE = "http://www.arabeyes.org"
-PR = "r0"
+LICENSE = "GPL"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/arabeyes/arabic-fonts-${PV}.tar.gz"
S = "${WORKDIR}"
-
-do_install () {
- install -d ${D}${palmqtdir}/lib/fonts/
- for i in *.qpf; do
- install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i}
- done
-}
-
-inherit qpf
diff --git a/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb b/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb
index 10d2d4acdd..8aaae9143e 100644
--- a/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb
+++ b/packages/qpf-fonts/qpf-bitstream-vera-sans-mono_1.10.bb
@@ -1,8 +1,8 @@
+require qpf.inc
+
DESCRIPTION = "Bitstream Vera Monospaced Font, QPF for Qt/Embedded"
-SECTION = "opie/fonts"
LICENSE = "Bitstream Vera"
-PACKAGE_ARCH = "all"
-PR = "r3"
+PR = "r4"
PROVIDES += "qpf-bitstream-vera-sans-mono-small"
PROVIDES += "qpf-bitstream-vera-sans-mono-larger"
@@ -12,28 +12,9 @@ PROVIDES += "qpf-bitstream-vera-sans-mono-huge"
SRC_URI = "http://openzaurus.org/mirror/fonts-bitstream-vera-sans-mono.tar.gz"
S = "${WORKDIR}/verasansmono"
-FILES_${PN} += "/opt"
-
-do_install () {
- install -d ${D}${palmqtdir}/lib/fonts/
-
- cd ${WORKDIR}
- files=`find . -name "*.qpf"`
- for i in $files; do
- install -m 644 $i ${D}${palmqtdir}/lib/fonts/
- done
-}
-
-pkg_postinst () {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir
-}
-
+FILES_${PN} += "${palmtopdir}"
-PACKAGES = "\
+PACKAGES = "${PN}-dbg \
qpf-bitstream-vera-sans-mono-small \
qpf-bitstream-vera-sans-mono-large \
qpf-bitstream-vera-sans-mono-larger \
diff --git a/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb b/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb
index 86f2ef9446..b23653e0d6 100644
--- a/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb
+++ b/packages/qpf-fonts/qpf-bitstream-vera_1.10.bb
@@ -1,32 +1,15 @@
+require qpf.inc
+
DESCRIPTION = "The Bitstream Vera fonts - QPF Edition"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
LICENSE = "Bitstream Vera"
-PACKAGE_ARCH = "all"
-PR = "r2"
+PR = "r3"
PROVIDES = "qpf-bitstream-vera-small qpf-bitstream-vera-large"
SRC_URI = "http://openzaurus.org/mirror/vera-qpf_1.10-3.tar.gz"
S = "${WORKDIR}/vera-qpf"
-do_install () {
- install -d ${D}${palmqtdir}/lib/fonts/
- for i in *.qpf; do
- install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i}
- done
-}
-
-pkg_postinst () {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir
-}
-
-
-PACKAGES = "qpf-bitstream-vera-small qpf-bitstream-vera-large"
+PACKAGES = "${PN}-dbg qpf-bitstream-vera-small qpf-bitstream-vera-large"
FILES_qpf-bitstream-vera-small = "${palmqtdir}/lib/fonts/vera_80_50* \
${palmqtdir}/lib/fonts/vera_80_50i* ${palmqtdir}/lib/fonts/vera_80_75* ${palmqtdir}/lib/fonts/vera_80_75i* \
diff --git a/packages/qpf-fonts/qpf-font-common_1.0.bb b/packages/qpf-fonts/qpf-font-common_1.0.bb
index 41bdad0a4a..ba4f0867ad 100644
--- a/packages/qpf-fonts/qpf-font-common_1.0.bb
+++ b/packages/qpf-fonts/qpf-font-common_1.0.bb
@@ -1,8 +1,6 @@
-DESCRIPTION = "Qt/Embedded Fonts Common Files"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
+DESCRIPTION = "Common files for Qt/Embedded fonts"
LICENSE = "GPL QPL"
-PR = "r3"
+PR = "r4"
SRC_URI = "file://update-qtfontdir"
S = "${WORKDIR}/qt-${PV}"
@@ -12,3 +10,5 @@ do_install() {
install -m 0755 ${WORKDIR}/update-qtfontdir ${D}${sbindir}/
sed -i -e 's,@palmtopdir@,${palmtopdir},g' ${D}${sbindir}/update-qtfontdir
}
+
+PACKAGE_ARCH = "all"
diff --git a/packages/qpf-fonts/qpf-freemono_1.0.bb b/packages/qpf-fonts/qpf-freemono_1.0.bb
index d10fda6117..a4c73f2b7f 100644
--- a/packages/qpf-fonts/qpf-freemono_1.0.bb
+++ b/packages/qpf-fonts/qpf-freemono_1.0.bb
@@ -1,19 +1,10 @@
+require qpf.inc
+
DESCRIPTION = "FreeMono font - QPF Edition"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
-LICENSE = "GPL"
HOMEPAGE = "http://savannah.nongnu.org/projects/freefont/"
-PACKAGE_ARCH = "all"
+LICENSE = "GPL"
+PR = "r1"
SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/${PN}-${PV}.tar.bz2"
S = "${WORKDIR}/${PN}"
-
-do_install () {
- install -d ${D}${palmqtdir}/lib/fonts/
- for i in *.qpf; do
- install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i}
- done
-}
-
-inherit qpf
diff --git a/packages/qpf-fonts/qpf-freeserif_1.0.bb b/packages/qpf-fonts/qpf-freeserif_1.0.bb
index 116c48d5d1..a45abbdcd3 100644
--- a/packages/qpf-fonts/qpf-freeserif_1.0.bb
+++ b/packages/qpf-fonts/qpf-freeserif_1.0.bb
@@ -1,20 +1,10 @@
+require qpf.inc
+
DESCRIPTION = "FreeSerif font - QPF Edition"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
-LICENSE = "GPL"
HOMEPAGE = "http://savannah.nongnu.org/projects/freefont/"
-PACKAGE_ARCH = "all"
-PR = "r2"
+LICENSE = "GPL"
+PR = "r3"
SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/${PN}-${PV}.tar.bz2"
S = "${WORKDIR}/${PN}"
-
-do_install () {
- install -d ${D}${palmqtdir}/lib/fonts/
- for i in *.qpf; do
- install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i}
- done
-}
-
-inherit qpf
diff --git a/packages/qpf-fonts/qpf-helvetica_1.0.bb b/packages/qpf-fonts/qpf-helvetica_1.0.bb
index 9607030393..1d2c672bcb 100644
--- a/packages/qpf-fonts/qpf-helvetica_1.0.bb
+++ b/packages/qpf-fonts/qpf-helvetica_1.0.bb
@@ -1,18 +1,9 @@
+require qpf.inc
+
DESCRIPTION = "Helvetica fonts - QPF Edition"
-LICENSE = "GPL QPL"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
HOMEPAGE = "http://www.pobox.sk/~mico/zaurus.html"
-PR = "r1"
+LICENSE = "GPL QPL"
+PR = "r2"
SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/qpf-helvetica.tar.bz2"
S = "${WORKDIR}/helvetica"
-
-do_install () {
- install -d ${D}${palmqtdir}/lib/fonts/
- for font in *.qpf; do
- install -m 644 $font ${D}${palmqtdir}/lib/fonts/
- done
-}
-
-inherit qpf
diff --git a/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb b/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb
index f4c50faf71..6f9db1202c 100644
--- a/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb
+++ b/packages/qpf-fonts/qpf-hunkysans_0.3.0.bb
@@ -1,20 +1,10 @@
+require qpf.inc
+
DESCRIPTION = "Hunky Sans font - QPF Edition"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
-LICENSE = "LGPL"
HOMEPAGE = "http://www.yoper.com/ariszlo/hunky.html http://sourceforge.net/projects/hunkyfonts"
-PACKAGE_ARCH = "all"
-PR = "r5"
+LICENSE = "LGPL"
+PR = "r6"
SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/${PN}-${PV}-r4.tar.bz2"
S = "${WORKDIR}/${PN}"
-
-do_install () {
- install -d ${D}${palmqtdir}/lib/fonts/
- for i in *.qpf; do
- install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i}
- done
-}
-
-inherit qpf
diff --git a/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb b/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb
index 8c1d8d02bc..f06599f9eb 100644
--- a/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb
+++ b/packages/qpf-fonts/qpf-hunkyserif_0.3.0.bb
@@ -1,20 +1,10 @@
+require qpf.inc
+
DESCRIPTION = "Hunky Serif font - QPF Edition"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
-LICENSE = "LGPL"
HOMEPAGE = "http://www.yoper.com/ariszlo/hunky.html http://sourceforge.net/projects/hunkyfonts"
-PACKAGE_ARCH = "all"
-PR = "r5"
+LICENSE = "LGPL"
+PR = "r6"
SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/${PN}-${PV}-r4.tar.bz2"
S = "${WORKDIR}/${PN}"
-
-do_install () {
- install -d ${D}${palmqtdir}/lib/fonts/
- for i in *.qpf; do
- install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i}
- done
-}
-
-inherit qpf
diff --git a/packages/qpf-fonts/qpf-qte_2.3.10.bb b/packages/qpf-fonts/qpf-qte_2.3.10.bb
index 4d7d739f79..a1a589f003 100644
--- a/packages/qpf-fonts/qpf-qte_2.3.10.bb
+++ b/packages/qpf-fonts/qpf-qte_2.3.10.bb
@@ -1,9 +1,9 @@
-DESCRIPTION = "Qt/Embedded Fonts Version ${PV}"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
-LICENSE = "GPL QPL"
+require qpf.inc
+
+DESCRIPTION = "Qt/Embedded fonts version ${PV}"
HOMEPAGE = "http://www.trolltech.com"
-PR = "r1"
+LICENSE = "GPL QPL"
+PR = "r2"
PROVIDES = "qte-font-helvetica-100 qte-font-helvetica-120"
PROVIDES += "qte-font-fixed-70 qte-font-fixed-120"
@@ -26,8 +26,6 @@ RPROVIDES_qte-font-japanese += "virtual/japanese-font"
SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-${PV}-free.tar.gz"
S = "${WORKDIR}/qt-${PV}"
-inherit qpf
-
QPF_PKGPATTERN = "qte-font-%s"
QPF_DESCRIPTION = "Qt/E font %s"
diff --git a/packages/qpf-fonts/qpf-qte_3.3.5.bb b/packages/qpf-fonts/qpf-qte_3.3.5.bb
new file mode 100644
index 0000000000..6ac091f29d
--- /dev/null
+++ b/packages/qpf-fonts/qpf-qte_3.3.5.bb
@@ -0,0 +1,57 @@
+require qpf.inc
+
+DESCRIPTION = "Qt/Embedded fonts version ${PV}"
+HOMEPAGE = "http://www.trolltech.com"
+LICENSE = "GPL QPL"
+PR = "r6"
+
+SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-free-${PV}.tar.bz2"
+S = "${WORKDIR}/qt-embedded-free-${PV}"
+
+do_compile() {
+ :
+}
+
+do_install() {
+ mkdir -p ${D}${sbindir}
+ mkdir -p ${D}${palmtopdir}/lib/fonts
+ cp -pPR lib/fonts/* ${D}${palmtopdir}/lib/fonts
+ # Delete all other font formats, Qt/E would have a dead slow
+ # application start time if it had to use any other font format
+ # as *.qpf ...
+ find ${D}${palmtopdir}/lib/fonts \
+ -name "*.bdf" \
+ -o -name "*.ttf" \
+ -o -name "*.pfa" \
+ -o -name "*.pfb" | xargs rm
+}
+
+PACKAGES = "qte-font-fixed"
+PROVIDES += "qte-font-fixed"
+FILES_qte-font-fixed = "${palmtopdir}/lib/fonts/fixed*"
+
+PACKAGES += "qte-font-helvetica-small"
+PROVIDES += "qte-font-helvetica-small"
+FILES_qte-font-helvetica-small = "${palmtopdir}/lib/fonts/helvetica_80*.qpf \
+ ${palmtopdir}/lib/fonts/helvetica_100*.qpf ${palmtopdir}/lib/fonts/helvetica_120*.qpf"
+
+PACKAGES += "qte-font-helvetica-large"
+PROVIDES += "qte-font-helvetica-large"
+FILES_qte-font-helvetica-large = "${palmtopdir}/lib/fonts/helvetica_140*.qpf \
+ ${palmtopdir}/lib/fonts/helvetica_180*.qpf ${palmtopdir}/lib/fonts/helvetica_240*.qpf"
+
+PACKAGES += "qte-font-smoothtimes"
+PROVIDES += "qte-font-smoothtimes"
+FILES_qte-font-smoothtimes = "${palmtopdir}/lib/fonts/smoothtimes*"
+
+PACKAGES += "qte-font-smallsmooth"
+PROVIDES += "qte-font-smallsmooth"
+FILES_qte-font-smallsmooth = "${palmtopdir}/lib/fonts/smallsmooth*"
+
+PACKAGES += "qte-font-unicode"
+PROVIDES += "qte-font-unicode"
+FILES_qte-font-unicode = "${palmtopdir}/lib/fonts/unifont*.qpf"
+
+PACKAGES += "qte-font-micro"
+PROVIDES += "qte-font-micro"
+FILES_qte-font-micro = "${palmtopdir}/lib/fonts/micro*.qpf"
diff --git a/packages/qpf-fonts/qpf-terminus.bb b/packages/qpf-fonts/qpf-terminus.bb
new file mode 100644
index 0000000000..7e8bbfe393
--- /dev/null
+++ b/packages/qpf-fonts/qpf-terminus.bb
@@ -0,0 +1,10 @@
+require qpf.inc
+
+DESCRIPTION = "Qt/Embedded terminus font"
+HOMEPAGE = "http://www.is-vn.bg/hamster/jimmy-en.html"
+LICENSE = "GPL"
+PR = "r3"
+
+#SRC_URI = "http://www.mn-solutions.de/downloads/mnci/terminus-fonts.tar.bz2" -> 404 error
+SRC_URI = "http://openzaurus.linuxtogo.org/download/3.5.4/sources/terminus-fonts.tar.bz2"
+S = "${WORKDIR}/terminus-fonts"
diff --git a/packages/qpf-fonts/qpf-unifont_1.0.bb b/packages/qpf-fonts/qpf-unifont_1.0.bb
index ec3a9de4ca..e91e762845 100644
--- a/packages/qpf-fonts/qpf-unifont_1.0.bb
+++ b/packages/qpf-fonts/qpf-unifont_1.0.bb
@@ -1,19 +1,9 @@
+require qpf.inc
+
DESCRIPTION = "Unicode fonts - QPF Edition"
LICENSE = "GPL QPL"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
RPROVIDES = "virtual/japanese-font"
-PACKAGE_ARCH = "all"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://www.openzaurus.org/mirror/qpf-unifont.tar.bz2"
S = "${WORKDIR}"
-
-do_install () {
- install -d ${D}${palmqtdir}/lib/fonts/
- for i in *.qpf; do
- install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i}
- done
-}
-
-inherit qpf
diff --git a/packages/qpf-fonts/qpf-unismall_1.0.0.bb b/packages/qpf-fonts/qpf-unismall_1.0.0.bb
index 20f47f9665..6298e2dfc4 100644
--- a/packages/qpf-fonts/qpf-unismall_1.0.0.bb
+++ b/packages/qpf-fonts/qpf-unismall_1.0.0.bb
@@ -1,24 +1,11 @@
+require qpf.inc
+
DESCRIPTION = "Lightweight Japanese font in 10 point suitable for 320x240 display"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
-LICENSE = "GPL"
HOMEPAGE = "http://sourceforge.jp/projects/zaurus-ja/"
+LICENSE = "GPL"
RPROVIDES = "virtual/japanese-font"
-PR = "r2"
+PR = "r4"
SRC_URI = "http://osdn.dl.sourceforge.jp/zaurus-ja/773/unismall-${PV}.tar.gz"
S = "${WORKDIR}"
-
-do_install () {
- install -d ${D}${palmqtdir}/lib/fonts/
- cd unismall*
- for i in *_100_*.qpf; do
- ln -sf $i $(echo $i | sed 's/_100_/_160_/')
- done
- for i in *.qpf; do
- install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i}
- done
-}
-
-inherit qpf
diff --git a/packages/qpf-fonts/qpf-utopia_1.0.bb b/packages/qpf-fonts/qpf-utopia_1.0.bb
index 87cb4d758b..eaee2d07a4 100644
--- a/packages/qpf-fonts/qpf-utopia_1.0.bb
+++ b/packages/qpf-fonts/qpf-utopia_1.0.bb
@@ -1,19 +1,9 @@
+require qpf.inc
+
DESCRIPTION = "Utopia fonts - QPF Edition"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
-LICENSE = "GPL QPL"
HOMEPAGE = "http://www.pobox.sk/~mico/zaurus.html"
-PACKAGE_ARCH = "all"
-PR = "r1"
+LICENSE = "GPL QPL"
+PR = "r2"
SRC_URI = "http://ewi546.ewi.utwente.nl/mirror/hrw-oe-sources/qpf-utopia.tar.bz2"
S = "${WORKDIR}/utopia"
-
-do_install () {
- install -d ${D}${palmqtdir}/lib/fonts/
- for i in *.qpf; do
- install -m 644 $i ${D}${palmqtdir}/lib/fonts/${i}
- done
-}
-
-inherit qpf
diff --git a/packages/qpf-fonts/qpf.inc b/packages/qpf-fonts/qpf.inc
new file mode 100644
index 0000000000..97e66587d2
--- /dev/null
+++ b/packages/qpf-fonts/qpf.inc
@@ -0,0 +1,32 @@
+RDEPENDS = "font-update-common qpf-font-common"
+
+do_configure() {
+ :
+}
+
+do_compile() {
+ :
+}
+
+pkg_postinst_fonts() {
+ update-fonts
+}
+
+pkg_postrm_fonts() {
+ update-fonts
+}
+
+python populate_packages_prepend() {
+ postinst = bb.data.getVar('pkg_postinst_fonts', d, 1)
+ postrm = bb.data.getVar('pkg_postrm_fonts', d, 1)
+ fontdir = bb.data.getVar('palmtopdir', d, 1) + '/lib/fonts'
+ pkgregex = "^([a-z-]*_[0-9]*).*.qpf$"
+ pkgpattern = bb.data.getVar('QPF_PKGPATTERN', d, 1) or 'qpf-%s'
+ pkgdescription = bb.data.getVar('QPF_DESCRIPTION', d, 1) or 'QPF font %s'
+
+ do_split_packages(d, root=fontdir, file_regex=pkgregex, output_pattern=pkgpattern,
+ description=pkgdescription, postinst=postinst, postrm=postrm, recursive=True, hook=None,
+ extra_depends='qpf-font-common')
+}
+
+PACKAGE_ARCH = "all"
diff --git a/packages/qpf-fonts/terminus.bb b/packages/qpf-fonts/terminus.bb
deleted file mode 100644
index 6d2e4ab85f..0000000000
--- a/packages/qpf-fonts/terminus.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "Qt/Embedded terminus font"
-HOMEPAGE = "http://www.is-vn.bg/hamster/jimmy-en.html"
-SECTION = "opie/fonts"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PACKAGE_ARCH = "all"
-PR = "r2"
-
-#SRC_URI = "http://www.mn-solutions.de/downloads/mnci/terminus-fonts.tar.bz2" -> 404 error
-SRC_URI = "http://openzaurus.linuxtogo.org/download/3.5.4/sources/terminus-fonts.tar.bz2"
-S = "${WORKDIR}/terminus-fonts"
-
-do_install() {
- mkdir -p ${D}${palmqtdir}/lib/fonts
- cp *.qpf ${D}${palmqtdir}/lib/fonts
-}
-
-inherit qpf
diff --git a/packages/qsvn/qsvn-qte_0.3.0.bb b/packages/qsvn/qsvn-qte_0.3.0.bb
new file mode 100644
index 0000000000..59b46edf9c
--- /dev/null
+++ b/packages/qsvn/qsvn-qte_0.3.0.bb
@@ -0,0 +1,3 @@
+require qsvn.inc
+FILESDIR += "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qsvn"
+inherit qtopia4core
diff --git a/packages/qsvn/qsvn.inc b/packages/qsvn/qsvn.inc
new file mode 100644
index 0000000000..c27bbab114
--- /dev/null
+++ b/packages/qsvn/qsvn.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "QSvn is a graphical Subversion client for Linux, UNIX, Mac OS X and Windows. \
+It is written in C++ using the Qt4 toolkit from Trolltech."
+HOMEPAGE = "http://ar.oszine.de/projects/qsvn/"
+AUTHOR = "Andreas Richter, Rajko Albrecht"
+LICENSE = "GPL"
+SECTION = "network"
+DEPENDS = "apr-util subversion"
+PR = "r0"
+
+def vars_from_file(filename):
+ import os
+ return os.path.splitext(os.path.basename(filename))[0]
+
+FN := "${@vars_from_file(bb.data.getVar('FILE',d))}"
+
+SRC_URI = "http://download2.berlios.de/${FN}/${FN}-${PV}-src.tar.gz \
+ file://build.patch;patch=1"
+S = "${WORKDIR}/${FN}-${PV}"
+
+EXTRA_QMAKEVARS_POST += "INCLUDEPATH+=${STAGING_INCDIR}/subversion-1"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 bin/qsvn ${D}${bindir}/${PN}
+}
diff --git a/packages/qsvn/qsvn_0.3.0.bb b/packages/qsvn/qsvn_0.3.0.bb
index 575e9359b7..db3cc0918d 100644
--- a/packages/qsvn/qsvn_0.3.0.bb
+++ b/packages/qsvn/qsvn_0.3.0.bb
@@ -1,20 +1,2 @@
-DESCRIPTION = "QSvn is a graphical Subversion client for Linux, UNIX, Mac OS X and Windows. \
-It is written in C++ using the Qt4 toolkit from Trolltech."
-HOMEPAGE = "http://ar.oszine.de/projects/qsvn/"
-AUTHOR = "Andreas Richter, Rajko Albrecht"
-LICENSE = "GPL"
-SECTION = "network"
-DEPENDS = "apr-util subversion"
-PR = "r0"
-
-SRC_URI = "http://download2.berlios.de/qsvn/qsvn-${PV}-src.tar.gz \
- file://build.patch;patch=1"
-
-inherit qmake qt4x11
-
-EXTRA_QMAKEVARS_POST += "INCLUDEPATH+=${STAGING_INCDIR}/subversion-1"
-
-do_install() {
- install -d ${D}${bindir}
- install -m 0755 bin/qsvn ${D}${bindir}
-}
+require qsvn.inc
+inherit qt4x11
diff --git a/packages/qt/qt4-x11-free-4.3.2/0005-fix-mkspecs.patch b/packages/qt/qt4-x11-free-4.3.2/0005-fix-mkspecs.patch
deleted file mode 100644
index 93692699dc..0000000000
--- a/packages/qt/qt4-x11-free-4.3.2/0005-fix-mkspecs.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From aa0377910cfd8d0fce6bdc9355994a4e267b1696 Mon Sep 17 00:00:00 2001
-From: Michael Krelin <hacker@klever.net>
-Date: Sat, 2 Jun 2007 16:39:58 +0200
-Subject: [PATCH] fix mkspecs
-
----
- mkspecs/common/g++.conf | 18 +++++++++---------
- mkspecs/common/linux.conf | 26 +++++++++++++-------------
- 2 files changed, 22 insertions(+), 22 deletions(-)
-
-diff --git a/mkspecs/common/g++.conf b/mkspecs/common/g++.conf
-index f5a5c8e..4007c7e 100644
---- a/mkspecs/common/g++.conf
-+++ b/mkspecs/common/g++.conf
-@@ -2,12 +2,12 @@
- # qmake configuration for common gcc
- #
-
--QMAKE_CC = gcc
--QMAKE_CFLAGS += -pipe
-+QMAKE_CC = $(OE_QMAKE_CC)
-+QMAKE_CFLAGS += -pipe $(OE_QMAKE_CFLAGS)
- QMAKE_CFLAGS_DEPS += -M
- QMAKE_CFLAGS_WARN_ON += -Wall -W
- QMAKE_CFLAGS_WARN_OFF += -w
--QMAKE_CFLAGS_RELEASE += -O2
-+QMAKE_CFLAGS_RELEASE += -O2
- QMAKE_CFLAGS_DEBUG += -g
- QMAKE_CFLAGS_SHLIB += -fPIC
- QMAKE_CFLAGS_STATIC_LIB += -fPIC
-@@ -16,8 +16,8 @@ QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
- QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
- QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
-
--QMAKE_CXX = g++
--QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
-+QMAKE_CXX = $(OE_QMAKE_CXX)
-+QMAKE_CXXFLAGS += $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS)
- QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
- QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
- QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
-@@ -30,9 +30,9 @@ QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
- QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
- QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-
--QMAKE_LINK = g++
--QMAKE_LINK_SHLIB = g++
--QMAKE_LFLAGS +=
-+QMAKE_LINK = $(OE_QMAKE_LINK)
-+QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK)
-+QMAKE_LFLAGS += $(OE_QMAKE_LDFLAGS)
- QMAKE_LFLAGS_RELEASE +=
- QMAKE_LFLAGS_DEBUG +=
- QMAKE_LFLAGS_APP +=
-@@ -40,7 +40,7 @@ QMAKE_LFLAGS_SHLIB += -shared
- QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
- QMAKE_LFLAGS_SONAME += -Wl,-soname,
- QMAKE_LFLAGS_THREAD +=
--QMAKE_RPATH = -Wl,-rpath,
-+QMAKE_RPATH = -Wl,-rpath-link,
-
- QMAKE_PCH_OUTPUT_EXT = .gch
-
-diff --git a/mkspecs/common/linux.conf b/mkspecs/common/linux.conf
-index 3796a87..52acf16 100644
---- a/mkspecs/common/linux.conf
-+++ b/mkspecs/common/linux.conf
-@@ -7,26 +7,26 @@ QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
-
- QMAKE_INCDIR =
- QMAKE_LIBDIR =
--QMAKE_INCDIR_X11 = /usr/X11R6/include
--QMAKE_LIBDIR_X11 = /usr/X11R6/lib
--QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
--QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
--QMAKE_INCDIR_OPENGL = /usr/X11R6/include
--QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
-+QMAKE_INCDIR_X11 =
-+QMAKE_LIBDIR_X11 =
-+QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
-+QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
-+QMAKE_INCDIR_OPENGL =
-+QMAKE_LIBDIR_OPENGL =
-
- QMAKE_LIBS =
- QMAKE_LIBS_DYNLOAD = -ldl
--QMAKE_LIBS_X11 = -lXext -lX11 -lm
--QMAKE_LIBS_X11SM = -lSM -lICE
-+QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
-+QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
- QMAKE_LIBS_NIS = -lnsl
- QMAKE_LIBS_OPENGL = -lGLU -lGL
- QMAKE_LIBS_OPENGL_QT = -lGL
- QMAKE_LIBS_THREAD = -lpthread
-
--QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
--QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
-+QMAKE_MOC = $(OE_QMAKE_MOC)
-+QMAKE_UIC = $(OE_QMAKE_UIC)
-
--QMAKE_AR = ar cqs
-+QMAKE_AR = $(OE_QMAKE_AR) cqs
- QMAKE_RANLIB =
-
- QMAKE_TAR = tar -cf
-@@ -38,11 +38,11 @@ QMAKE_COPY_DIR = $(COPY) -r
- QMAKE_MOVE = mv -f
- QMAKE_DEL_FILE = rm -f
- QMAKE_DEL_DIR = rmdir
--QMAKE_STRIP = strip
-+QMAKE_STRIP = $(OE_QMAKE_STRIP)
- QMAKE_STRIPFLAGS_LIB += --strip-unneeded
- QMAKE_CHK_DIR_EXISTS = test -d
- QMAKE_MKDIR = mkdir -p
- QMAKE_INSTALL_FILE = install -m 644 -p
- QMAKE_INSTALL_PROGRAM = install -m 755 -p
-
--include(unix.conf)
-\ No newline at end of file
-+include(unix.conf)
---
-1.5.0.7
-
diff --git a/packages/qt/qt4-x11-free_4.1.2.bb b/packages/qt/qt4-x11-free_4.1.2.bb
deleted file mode 100644
index 91ac3f68cf..0000000000
--- a/packages/qt/qt4-x11-free_4.1.2.bb
+++ /dev/null
@@ -1,140 +0,0 @@
-SECTION = "x11/libs"
-PRIORITY = "optional"
-HOMEPAGE = "http://www.trolltech.com"
-LICENSE = "GPL QPL"
-DEPENDS = "uicmoc4-native qmake2-native freetype jpeg virtual/libx11 xft libxext libxrender libxrandr libxcursor"
-PROVIDES = "qt4x11"
-PR = "r1"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz \
- file://cross-compile.patch;patch=1 \
- file://fix-resinit-declaration.patch;patch=1 \
- file://no-tools.patch;patch=1 \
- file://no-qmake.patch;patch=1 \
- file://gcc4_1.patch;patch=1 \
- file://configurable-cpu-extensions.patch;patch=1 \
- file://fix-mkspecs.patch;patch=1 \
- file://fix-asm-constraints.patch;patch=1"
-S = "${WORKDIR}/qt-x11-opensource-src-${PV}"
-
-PARALLEL_MAKE = ""
-
-inherit qmake_base qt4x11 pkgconfig
-
-export QTDIR = "${S}"
-STAGING_QT_DIR = "${STAGING_DIR}/${TARGET_SYS}/qt4"
-EXTRA_OEMAKE = "-e"
-
-require qt4_arch.inc
-
-QT_ARCH := "${@qt_arch(d)}"
-
-# FIXME:
-# * add missing options
-QT_CONFIG_FLAGS = "-release -shared -qt-zlib -system-libjpeg -no-nas-sound -no-sm -no-libmng -qt-libpng -no-gif -no-xinerama \
- -no-tablet -no-xkb -no-nis -no-cups -no-opengl \
- -nosse \
- -no-sql-ibase -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 \
- -verbose -stl -no-accessibility"
-
-EXTRA_ENV = 'QMAKE="${STAGING_BINDIR_NATIVE}/qmake2 -after DEFINES+=QT_NO_XIM INCPATH+=${STAGING_INCDIR} \
- INCPATH+=${STAGING_INCDIR}/freetype2 LIBS+=-L${STAGING_LIBDIR}" \
- QMAKESPEC="${QMAKESPEC}" LINK="${CXX} -Wl,-rpath-link,${STAGING_LIBDIR}" \
- AR="${TARGET_PREFIX}ar cqs" \
- MOC="${STAGING_BINDIR_NATIVE}/moc4" UIC="${STAGING_BINDIR_NATIVE}/uic4" MAKE="make -e"'
-
-do_configure() {
- echo "DEFINES -= QT_NO_CAST_TO_ASCII" >>src/qbase.pri
- echo "DEFINES += QT_NO_XIM" >>src/qbase.pri
- unset QMAKESPEC
- ln -sf ${STAGING_BINDIR_NATIVE}/qmake2 bin/qmake
- ln -sf ./linux-g++ mkspecs/linux-gnueabi-g++
- #export QMAKESPEC="linux-oe-g++"
- #rm -rf ./mkspecs
- #ln -sf ${QMAKE_MKSPEC_PATH} ./mkspecs
- echo yes | ./configure -prefix / -platform ${TARGET_OS}-g++ -crossarch ${QT_ARCH} ${QT_CONFIG_FLAGS} -fast \
- -L${STAGING_LIBDIR} -I${STAGING_INCDIR} -I${STAGING_INCDIR}/freetype2 -I${STAGING_INCDIR}/mysql
-}
-
-# FIXME: Might want to compile the cross tools for the -dev packages as well...
-do_compile() {
- unset CFLAGS CXXFLAGS
- install -m 0755 ${STAGING_BINDIR_NATIVE}/rcc4 ${S}/bin/rcc
- install -m 0755 ${STAGING_BINDIR_NATIVE}/moc4 ${S}/bin/moc
- install -m 0755 ${STAGING_BINDIR_NATIVE}/uic4 ${S}/bin/uic
-
- oe_runmake ${EXTRA_ENV}
-}
-
-PARTS = "3Support Core Designer DesignerComponents Gui Network Sql Svg Test Xml"
-
-do_stage() {
- oe_runmake install INSTALL_ROOT=/
- install -m 0755 ${STAGING_BINDIR_NATIVE}/rcc4 ${STAGING_QT_DIR}/bin/rcc
- install -m 0755 ${STAGING_BINDIR_NATIVE}/moc4 ${STAGING_QT_DIR}/bin/moc
- install -m 0755 ${STAGING_BINDIR_NATIVE}/uic4 ${STAGING_QT_DIR}/bin/uic
-
-}
-
-# FIXME: Might want to call oe_runmake install INSTALL_ROOT=${D}/${prefix} as well...
-# FIXME: Might want to install everything into ${libdir}/qt4/* to match the usual packing...
-do_install() {
- install -d ${D}${libdir}
- install -d ${D}${bindir}
- for part in ${PARTS}
- do
- oe_libinstall -so -C lib libQt$part ${D}${libdir}
- done
- oe_libinstall -a -C lib libQtAssistantClient ${STAGING_QT_DIR}
- cp -pPR include/* ${D}${incdir}
- cp -pPR plugins ${D}${libdir}
- cp -pPR bin/* ${D}${bindir}
-
- install -d ${D}${bindir}/qt4-examples
- for binary in `find examples -perm 0755 -type f`
- do
- install -m 0755 $binary ${D}${bindir}/qt4-examples/
- done
- install -d ${D}${bindir}/qt4-demos
- for binary in `find demos -perm 0755 -type f`
- do
- install -m 0755 $binary ${D}${bindir}/qt4-demos/
- done
-}
-
-PACKAGES =+ "libqtcore4 libqtgui4 libqtnetwork4 libqtsql4 libqtsvg4 libqttest4 libqtxml4 \
- libqtdesigner4 libqtdesignercomponents4 libqt3support4 \
- qt4-assistant qt4-common qt4-designer qt4-demos qt4-examples qt4-linguist \
- qt4-plugins-accessible qt4-plugins-codecs qt4-plugins-designer qt4-plugins-imageformats qt4-plugins-sqldrivers"
-
-ALLOW_EMPTY = "1"
-FILES_${PN} = ""
-RDEPENDS_${PN} = "${PACKAGES}"
-
-FILES_libqtcore4 = "${libdir}/libQtCore.so*"
-FILES_libqtgui4 = "${libdir}/libQtGui.so*"
-FILES_libqtnetwork4 = "${libdir}/libQtNetwork.so*"
-FILES_libqtsql4 = "${libdir}/libQtSql.so*"
-FILES_libqtsvg4 = "${libdir}/libQtSvg.so*"
-FILES_libqttest4 = "${libdir}/libQtTest.so*"
-FILES_libqtxml4 = "${libdir}/libQtXml.so*"
-FILES_libqtdesigner4 = "${libdir}/libQtDesigner.so*"
-FILES_libqtdesignercomponents4 = "${libdir}/libQtDesignerComponents.so*"
-FILES_libqt3support4 = "${libdir}/libQt3Support.so*"
-
-FILES_qt4-plugins-accessible = "${libdir}/plugins/accessible/*.so"
-FILES_qt4-plugins-codecs = "${libdir}/plugins/codecs/*.so"
-FILES_qt4-plugins-designer = "${libdir}/plugins/designer/*.so"
-FILES_qt4-plugins-imageformats = "${libdir}/plugins/imageformats/*.so"
-FILES_qt4-plugins-sqldrivers = "${libdir}/plugins/sqldrivers/*.so"
-
-FILES_qt4-assistant = "${bindir}/*assistant*"
-FILES_qt4-designer = "${bindir}/*designer*"
-FILES_qt4-linguist = "${bindir}/*linguist* ${bindir}/lrelease ${bindir}/lupdate ${bindir}/qm2ts"
-
-FILES_qt4-common = "${bindir}/qtconfig"
-FILES_qt4-examples = "${bindir}/qt4-examples/*"
-FILES_qt4-demos = "${bindir}/qtdemo ${bindir}/qt4-demos/*"
-
-FILES_${PN}-dev += "${bindir}/rcc ${bindir}/uic* ${bindir}/moc ${bindir}/qmake ${bindir}/syncqt \
- ${bindir}/qt3to4 ${bindir}/findtr"
diff --git a/packages/qt/qt4-x11-free_4.3.2.bb b/packages/qt/qt4-x11-free_4.3.2.bb
deleted file mode 100644
index a097c4e9ca..0000000000
--- a/packages/qt/qt4-x11-free_4.3.2.bb
+++ /dev/null
@@ -1,186 +0,0 @@
-DESCRIPTION = "Qt is a versatile cross-platform application framework -- this is the X11 version."
-SECTION = "x11/libs"
-PRIORITY = "optional"
-HOMEPAGE = "http://www.trolltech.com"
-LICENSE = "GPL QPL"
-DEPENDS = "pkgconfig-native uicmoc4-native qmake2-native freetype jpeg virtual/libx11 \
- xft libxext libxrender libxrandr libxcursor dbus openssl"
-RDEPENDS_${PN} = "${NONDEV_PACKAGES}"
-PROVIDES = "qt4x11"
-PR = "r6"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz \
- file://0001-cross-compile.patch;patch=1 \
- file://0002-fix-resinit-declaration.patch;patch=1 \
- file://0003-no-tools.patch;patch=1 \
- file://0004-no-qmake.patch;patch=1 \
- file://0005-fix-mkspecs.patch;patch=1 \
- file://0006-freetype-host-includes.patch;patch=1 \
- file://0007-openssl-host-includes.patch;patch=1"
-S = "${WORKDIR}/qt-x11-opensource-src-${PV}"
-
-PARALLEL_MAKE = ""
-
-inherit qmake_base qt4x11
-
-export QTDIR = "${S}"
-STAGING_QT_DIR = "${STAGING_DIR}/${TARGET_SYS}/qt4"
-EXTRA_OEMAKE = "-e"
-
-require qt4_arch.inc
-
-QT_ARCH := "${@qt_arch(d)}"
-
-# FIXME:
-# * add missing options
-QT_CONFIG_FLAGS = "-release -shared -qt-zlib -system-libjpeg -no-nas-sound -no-sm -no-libmng -qt-libpng -no-gif -no-xinerama \
- -no-tablet -no-xkb -no-nis -no-cups -no-opengl \
- -no-sse -no-sse2 -no-mmx -no-3dnow \
- -no-sql-ibase -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 \
- -qdbus \
- -verbose -stl -no-accessibility \
- -pch -no-glib"
-
-EXTRA_ENV = 'QMAKE="${STAGING_BINDIR_NATIVE}/qmake2 -after DEFINES+=QT_NO_XIM INCPATH+=${STAGING_INCDIR} \
- INCPATH+=${STAGING_INCDIR}/freetype2 LIBS+=-L${STAGING_LIBDIR}" \
- QMAKESPEC="${QMAKESPEC}" LINK="${CXX} -Wl,-rpath-link,${STAGING_LIBDIR}" \
- AR="${TARGET_PREFIX}ar cqs" \
- MOC="${STAGING_BINDIR_NATIVE}/moc4" UIC="${STAGING_BINDIR_NATIVE}/uic4" MAKE="make -e"'
-
-do_configure() {
- echo "DEFINES -= QT_NO_CAST_TO_ASCII" >>src/qbase.pri
- echo "DEFINES += QT_NO_XIM" >>src/qbase.pri
- unset QMAKESPEC
- ln -sf ${STAGING_BINDIR_NATIVE}/qmake2 bin/qmake
- ln -s linux-g++ mkspecs/${TARGET_OS}-oe-g++
- #export QMAKESPEC="linux-oe-g++"
- #rm -rf ./mkspecs
- #ln -sf ${QMAKE_MKSPEC_PATH} ./mkspecs
- echo yes | ./configure -prefix / -platform ${TARGET_OS}-oe-g++ -crossarch ${QT_ARCH} ${QT_CONFIG_FLAGS} -fast \
- -L${STAGING_LIBDIR} -I${STAGING_INCDIR} -I${STAGING_INCDIR}/freetype2 -I${STAGING_INCDIR}/mysql
-}
-
-# FIXME: Might want to compile the cross tools for the -dev packages as well...
-do_compile() {
- unset CFLAGS CXXFLAGS
- install -m 0755 ${STAGING_BINDIR_NATIVE}/rcc4 ${S}/bin/rcc
- install -m 0755 ${STAGING_BINDIR_NATIVE}/moc4 ${S}/bin/moc
- install -m 0755 ${STAGING_BINDIR_NATIVE}/uic4 ${S}/bin/uic
-
- oe_runmake ${EXTRA_ENV}
-}
-
-PARTS = "3Support AssistantClient Core DBus Designer DesignerComponents Gui Network Script Sql Svg Test Xml"
-
-do_stage() {
- oe_runmake install INSTALL_ROOT=/
- install -m 0755 ${STAGING_BINDIR_NATIVE}/rcc4 ${STAGING_QT_DIR}/bin/rcc
- install -m 0755 ${STAGING_BINDIR_NATIVE}/moc4 ${STAGING_QT_DIR}/bin/moc
- install -m 0755 ${STAGING_BINDIR_NATIVE}/uic4 ${STAGING_QT_DIR}/bin/uic
- sed -i -e 's,^QMAKE_RPATHDIR.*,QMAKE_RPATHDIR=${STAGING_QT_DIR}/lib,g' ${STAGING_QT_DIR}/mkspecs/qconfig.pri
- for pcc in AssistantClient DBus Test UiTools ; do
- sed -i -e 's,${S}/lib,${STAGING_QT_DIR}/lib,g' ${STAGING_QT_DIR}/lib/pkgconfig/Qt${pcc}.pc
- done
- install -d ${PKG_CONFIG_DIR}/
- for pc in ${STAGING_QT_DIR}/lib/pkgconfig/*.pc ; do
- sed -i -e 's,$(OE_QMAKE_LIBS_X11),-lX11 -lXext,g' $pc
- install -m 0644 $pc ${PKG_CONFIG_DIR}/
- done
-}
-
-# FIXME: Might want to call oe_runmake install INSTALL_ROOT=${D}/${prefix} as well...
-# FIXME: Might want to install everything into ${libdir}/qt4/* to match the usual packing...
-do_install() {
- install -d ${D}${libdir}
- install -d ${D}${bindir}
- install -d ${D}${includedir}
- for part in ${PARTS}
- do
- oe_libinstall -so -C lib libQt$part ${D}${libdir}
- done
- oe_libinstall -a -C lib libQtUiTools ${D}${libdir}
- cp -pPR include/* ${D}${includedir}
- cp -pPR plugins ${D}${libdir}
- cp -pPR bin/* ${D}${bindir}
-
- install -d ${D}${bindir}/qt4-examples
- for binary in `find examples -perm 0755 -type f`
- do
- install -m 0755 $binary ${D}${bindir}/qt4-examples/
- done
- install -d ${D}${bindir}/qt4-demos
- for binary in `find demos -perm 0755 -type f`
- do
- install -m 0755 $binary ${D}${bindir}/qt4-demos/
- done
- rm ${D}${bindir}/rcc ${D}${bindir}/uic ${D}${bindir}/moc
-}
-
-NONDEV_PACKAGES = "libqtcore4 libqtgui4 libqtnetwork4 \
- libqtsql4 libqtsvg4 libqttest4 \
- libqtxml4 \
- libqtdesigner4 libqtdesignercomponents4 \
- libqt3support4 \
- libqtassistantclient4 libqtscript4 \
- libqtdbus4 \
- qt4-assistant qt4-common qt4-designer qt4-demos qt4-examples qt4-linguist \
- qt4-pixeltool qt4-dbus \
- qt4-plugins-accessible qt4-plugins-codecs qt4-plugins-designer qt4-plugins-imageformats qt4-plugins-sqldrivers \
- qt4-plugins-inputmethods qt4-plugins-iconengines"
-
-PACKAGES += "libqtcore4-dev libqtgui4-dev libqtnetwork4-dev libqtsql4-dev libqtsvg4-dev libqttest4-dev \
- libqtxml4-dev libqtdesigner4-dev libqtdesignercomponents4-dev libqt3support4-dev \
- libqtassistantclient4-dev libqtscript4-dev libqtdbus4-dev \
- ${NONDEV_PACKAGES}"
-
-ALLOW_EMPTY = "1"
-FILES_${PN} = ""
-
-FILES_libqtcore4 = "${libdir}/libQtCore.so.*"
-FILES_libqtcore4-dev = "${libdir}/libQtCore.so"
-FILES_libqtgui4 = "${libdir}/libQtGui.so.*"
-FILES_libqtgui4-dev = "${libdir}/libQtGui.so"
-FILES_libqtnetwork4 = "${libdir}/libQtNetwork.so.*"
-FILES_libqtnetwork4-dev = "${libdir}/libQtNetwork.so"
-FILES_libqtsql4 = "${libdir}/libQtSql.so.*"
-FILES_libqtsql4-dev = "${libdir}/libQtSql.so"
-FILES_libqtsvg4 = "${libdir}/libQtSvg.so.*"
-FILES_libqtsvg4-dev = "${libdir}/libQtSvg.so"
-FILES_libqttest4 = "${libdir}/libQtTest.so.*"
-FILES_libqttest4-dev = "${libdir}/libQtTest.so"
-FILES_libqtxml4 = "${libdir}/libQtXml.so.*"
-FILES_libqtxml4-dev = "${libdir}/libQtXml.so"
-FILES_libqtdesigner4 = "${libdir}/libQtDesigner.so.*"
-FILES_libqtdesigner4-dev = "${libdir}/libQtDesigner.so"
-FILES_libqtdesignercomponents4 = "${libdir}/libQtDesignerComponents.so.*"
-FILES_libqtdesignercomponents4-dev = "${libdir}/libQtDesignerComponents.so"
-FILES_libqt3support4 = "${libdir}/libQt3Support.so.*"
-FILES_libqt3support4-dev = "${libdir}/libQt3Support.so"
-FILES_libqtassistantclient4 = "${libdir}/libQtAssistantClient.so.*"
-FILES_libqtassistantclient4-dev = "${libdir}/libQtAssistantClient.so"
-FILES_libqtscript4 = "${libdir}/libQtScript.so.*"
-FILES_libqtscript4-dev = "${libdir}/libQtScript.so"
-FILES_libqtdbus4 = "${libdir}/libQtDBus.so.*"
-FILES_libqtdbus4-dev = "${libdir}/libQtDBus.so"
-
-FILES_qt4-plugins-accessible = "${libdir}/plugins/accessible/*.so"
-FILES_qt4-plugins-codecs = "${libdir}/plugins/codecs/*.so"
-FILES_qt4-plugins-designer = "${libdir}/plugins/designer/*.so"
-FILES_qt4-plugins-imageformats = "${libdir}/plugins/imageformats/*.so"
-FILES_qt4-plugins-sqldrivers = "${libdir}/plugins/sqldrivers/*.so"
-FILES_qt4-plugins-inputmethods = "${libdir}/plugins/inputmethods/*.so"
-FILES_qt4-plugins-iconengines = "${libdir}/plugins/iconengines/*.so"
-
-FILES_qt4-assistant = "${bindir}/*assistant*"
-FILES_qt4-designer = "${bindir}/*designer*"
-FILES_qt4-linguist = "${bindir}/*linguist* ${bindir}/lrelease ${bindir}/lupdate ${bindir}/qm2ts"
-FILES_qt4-pixeltool = "${bindir}/pixeltool"
-FILES_qt4-dbus = "${bindir}/qdbus ${bindir}/qdbusxml2cpp ${bindir}/qdbuscpp2xml ${bindir}/qdbusviewer"
-
-FILES_qt4-common = "${bindir}/qtconfig"
-FILES_qt4-examples = "${bindir}/qt4-examples/*"
-FILES_qt4-demos = "${bindir}/qtdemo ${bindir}/qt4-demos/*"
-
-FILES_${PN}-dev += "${bindir}/rcc ${bindir}/uic* ${bindir}/moc ${bindir}/qmake ${bindir}/syncqt \
- ${bindir}/qt3to4 ${bindir}/findtr"
-FILES_${PN}-dbg += "${bindir}/*/.debug ${plugindir}/.debug"
diff --git a/packages/qt/qt4_arch.inc b/packages/qt/qt4_arch.inc
deleted file mode 100644
index 6dcbd2bc4a..0000000000
--- a/packages/qt/qt4_arch.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-def qt_arch(d):
- import bb, re
- arch = bb.data.getVar('TARGET_ARCH', d, 1)
- if re.match("^i.86$", arch):
- arch = "i386"
- elif re.match("^arm.*", arch):
- arch = "arm"
- elif arch == "x86_64":
- arch = "x86"
- elif arch == "mipsel":
- arch = "mips"
- return arch
-
diff --git a/packages/qt4/.mtn2git_empty b/packages/qt4/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qt4/.mtn2git_empty
diff --git a/packages/qt4/files/.mtn2git_empty b/packages/qt4/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qt4/files/.mtn2git_empty
diff --git a/packages/qt/qt4-x11-free-4.3.2/0001-cross-compile.patch b/packages/qt4/files/0001-cross-compile.patch
index 6e2b8e755e..6e2b8e755e 100644
--- a/packages/qt/qt4-x11-free-4.3.2/0001-cross-compile.patch
+++ b/packages/qt4/files/0001-cross-compile.patch
diff --git a/packages/qt/qt4-x11-free-4.3.2/0003-no-tools.patch b/packages/qt4/files/0003-no-tools.patch
index 5412c90377..5412c90377 100644
--- a/packages/qt/qt4-x11-free-4.3.2/0003-no-tools.patch
+++ b/packages/qt4/files/0003-no-tools.patch
diff --git a/packages/qt4/files/0005-fix-mkspecs.patch b/packages/qt4/files/0005-fix-mkspecs.patch
new file mode 100644
index 0000000000..faf0ba028a
--- /dev/null
+++ b/packages/qt4/files/0005-fix-mkspecs.patch
@@ -0,0 +1,133 @@
+From aa0377910cfd8d0fce6bdc9355994a4e267b1696 Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Sat, 2 Jun 2007 16:39:58 +0200
+Subject: [PATCH] fix mkspecs
+
+---
+ mkspecs/common/g++.conf | 18 +++++++++---------
+ mkspecs/common/linux.conf | 26 +++++++++++++-------------
+ 2 files changed, 22 insertions(+), 22 deletions(-)
+
+Index: qtopia-core-opensource-src-4.3.3/mkspecs/common/g++.conf
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/common/g++.conf 2007-12-26 02:58:15.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/mkspecs/common/g++.conf 2007-12-26 02:58:21.000000000 +0100
+@@ -2,12 +2,12 @@
+ # qmake configuration for common gcc
+ #
+
+-QMAKE_CC = gcc
+-QMAKE_CFLAGS += -pipe
++QMAKE_CC = $(OE_QMAKE_CC)
++QMAKE_CFLAGS += -pipe $(OE_QMAKE_CFLAGS)
+ QMAKE_CFLAGS_DEPS += -M
+ QMAKE_CFLAGS_WARN_ON += -Wall -W
+ QMAKE_CFLAGS_WARN_OFF += -w
+-QMAKE_CFLAGS_RELEASE += -O2
++QMAKE_CFLAGS_RELEASE +=
+ QMAKE_CFLAGS_DEBUG += -g
+ QMAKE_CFLAGS_SHLIB += -fPIC
+ QMAKE_CFLAGS_STATIC_LIB += -fPIC
+@@ -16,8 +16,8 @@
+ QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+ QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
+
+-QMAKE_CXX = g++
+-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
++QMAKE_CXX = $(OE_QMAKE_CXX)
++QMAKE_CXXFLAGS += $$QMAKE_CFLAGS $(OE_QMAKE_CXXFLAGS)
+ QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
+ QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
+ QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
+@@ -30,9 +30,9 @@
+ QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+ QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+
+-QMAKE_LINK = g++
+-QMAKE_LINK_SHLIB = g++
+-QMAKE_LFLAGS +=
++QMAKE_LINK = $(OE_QMAKE_LINK)
++QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK)
++QMAKE_LFLAGS += $(OE_QMAKE_LDFLAGS)
+ QMAKE_LFLAGS_RELEASE +=
+ QMAKE_LFLAGS_DEBUG +=
+ QMAKE_LFLAGS_APP +=
+@@ -40,7 +40,7 @@
+ QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+ QMAKE_LFLAGS_SONAME += -Wl,-soname,
+ QMAKE_LFLAGS_THREAD +=
+-QMAKE_RPATH = -Wl,-rpath,
++QMAKE_RPATH = -Wl,-rpath-link,
+
+ QMAKE_PCH_OUTPUT_EXT = .gch
+
+Index: qtopia-core-opensource-src-4.3.3/mkspecs/common/linux.conf
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/common/linux.conf 2007-12-26 02:58:15.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/mkspecs/common/linux.conf 2007-12-26 02:58:21.000000000 +0100
+@@ -7,26 +7,26 @@
+
+ QMAKE_INCDIR =
+ QMAKE_LIBDIR =
+-QMAKE_INCDIR_X11 = /usr/X11R6/include
+-QMAKE_LIBDIR_X11 = /usr/X11R6/lib
+-QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
+-QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
+-QMAKE_INCDIR_OPENGL = /usr/X11R6/include
+-QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
++QMAKE_INCDIR_X11 =
++QMAKE_LIBDIR_X11 =
++QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
++QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
++QMAKE_INCDIR_OPENGL =
++QMAKE_LIBDIR_OPENGL =
+
+ QMAKE_LIBS =
+ QMAKE_LIBS_DYNLOAD = -ldl
+-QMAKE_LIBS_X11 = -lXext -lX11 -lm
+-QMAKE_LIBS_X11SM = -lSM -lICE
++QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
++QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
+ QMAKE_LIBS_NIS = -lnsl
+ QMAKE_LIBS_OPENGL = -lGLU -lGL
+ QMAKE_LIBS_OPENGL_QT = -lGL
+ QMAKE_LIBS_THREAD = -lpthread
+
+-QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
+-QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
++QMAKE_MOC = $(OE_QMAKE_MOC)
++QMAKE_UIC = $(OE_QMAKE_UIC)
+
+-QMAKE_AR = ar cqs
++QMAKE_AR = $(OE_QMAKE_AR) cqs
+ QMAKE_RANLIB =
+
+ QMAKE_TAR = tar -cf
+@@ -38,11 +38,11 @@
+ QMAKE_MOVE = mv -f
+ QMAKE_DEL_FILE = rm -f
+ QMAKE_DEL_DIR = rmdir
+-QMAKE_STRIP = strip
++QMAKE_STRIP = $(OE_QMAKE_STRIP)
+ QMAKE_STRIPFLAGS_LIB += --strip-unneeded
+ QMAKE_CHK_DIR_EXISTS = test -d
+ QMAKE_MKDIR = mkdir -p
+ QMAKE_INSTALL_FILE = install -m 644 -p
+ QMAKE_INSTALL_PROGRAM = install -m 755 -p
+
+-include(unix.conf)
+\ No newline at end of file
++include(unix.conf)
+Index: qtopia-core-opensource-src-4.3.3/mkspecs/linux-g++/qmake.conf
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/linux-g++/qmake.conf 2007-12-26 02:58:15.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/mkspecs/linux-g++/qmake.conf 2007-12-26 03:00:49.000000000 +0100
+@@ -5,7 +5,7 @@
+ MAKEFILE_GENERATOR = UNIX
+ TEMPLATE = app
+ CONFIG += qt warn_on release incremental link_prl
+-QT += core gui
++QT += core gui $$(OE_QMAKE_EXTRA_MODULES)
+ QMAKE_INCREMENTAL_STYLE = sublib
+
+ include(../common/g++.conf)
diff --git a/packages/qt4/files/0008-backport-qt-lib-infix.patch b/packages/qt4/files/0008-backport-qt-lib-infix.patch
new file mode 100644
index 0000000000..c93f58ca41
--- /dev/null
+++ b/packages/qt4/files/0008-backport-qt-lib-infix.patch
@@ -0,0 +1,166 @@
+Index: qtopia-core-opensource-src-4.3.3/configure
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/configure 2007-12-27 17:26:19.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/configure 2007-12-27 17:26:19.000000000 +0100
+@@ -782,6 +782,11 @@
+ VAR=endian
+ VAL=`echo $1 | sed "s,^-\(.*\)-.*,\1,"`
+ ;;
++ -qtlibinfix)
++ VAR="qtlibinfix"
++ shift
++ VAL="$1"
++ ;;
+ -D?*|-D)
+ VAR="add_define"
+ if [ "$1" = "-D" ]; then
+@@ -903,6 +908,9 @@
+ libdir)
+ QT_INSTALL_LIBS="$VAL"
+ ;;
++ qtlibinfix)
++ QT_LIBINFIX="$VAL"
++ ;;
+ translationdir)
+ QT_INSTALL_TRANSLATIONS="$VAL"
+ ;;
+@@ -2606,6 +2614,8 @@
+ -no-sse ............ Do not compile with use of SSE instructions.
+ -no-sse2 ........... Do not compile with use of SSE2 instructions.
+
++ -qtlibinfix <infix> Renames all libQt*.so to libQt<infix>.so.
++
+ -D <string> ........ Add an explicit define to the preprocessor.
+ -I <string> ........ Add an explicit include path.
+ -L <string> ........ Add an explicit library path.
+@@ -5273,6 +5283,8 @@
+ QT_MINOR_VERSION = $QT_MINOR_VERSION
+ QT_PATCH_VERSION = $QT_PATCH_VERSION
+
++QT_LIBINFIX = $QT_LIBINFIX
++
+ EOF
+ if [ "$CFG_RPATH" = "yes" ]; then
+ echo "QMAKE_RPATHDIR += \"$QT_INSTALL_LIBS\"" >> "$QTCONFIG.tmp"
+Index: qtopia-core-opensource-src-4.3.3/mkspecs/features/qt_functions.prf
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/features/qt_functions.prf 2007-12-04 18:07:53.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/mkspecs/features/qt_functions.prf 2007-12-27 17:26:19.000000000 +0100
+@@ -28,7 +28,7 @@
+ INCLUDEPATH -= $$FRAMEWORK_INCLUDE
+ INCLUDEPATH = $$FRAMEWORK_INCLUDE $$INCLUDEPATH
+ }
+- LINKAGE = -framework $${LIB_NAME}
++ LINKAGE = -framework $${LIB_NAME}$${QT_LIBINFIX}
+ } else:!qt_no_framework { #detection
+ for(frmwrk_dir, $$list($$QMAKE_LIBDIR_QT $$QMAKE_LIBDIR $$(DYLD_FRAMEWORK_PATH) /Library/Frameworks)) {
+ exists($${frmwrk_dir}/$${LIB_NAME}.framework) {
+@@ -46,15 +46,15 @@
+ }
+ isEmpty(LINKAGE) {
+ CONFIG(debug, debug|release) {
+- win32:LINKAGE = -l$${LIB_NAME}d
+- mac:LINKAGE = -l$${LIB_NAME}_debug
++ win32:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}d
++ mac:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}_debug
+ }
+- isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}
++ isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}
+ }
+ !isEmpty(QMAKE_LSB) {
+ QMAKE_LFLAGS *= --lsb-libpath=$$$$QMAKE_LIBDIR_QT
+ QMAKE_LFLAGS *= -L/opt/lsb/lib
+- QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME}
++ QMAKE_LFLAGS *= --lsb-shared-libs=$${LIB_NAME}${QT_LIBINFIX}
+ }
+ LIBS += $$LINKAGE
+ export(LIBS)
+Index: qtopia-core-opensource-src-4.3.3/src/qbase.pri
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/src/qbase.pri 2007-12-04 18:08:13.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/src/qbase.pri 2007-12-27 17:26:19.000000000 +0100
+@@ -138,7 +138,7 @@
+ contains(QT_CONFIG, qt3support):DEFINES *= QT3_SUPPORT
+ DEFINES *= QT_MOC_COMPAT #we don't need warnings from calling moc code in our generated code
+
+-TARGET = $$qtLibraryTarget($$TARGET) #do this towards the end
++TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX) #do this towards the end
+
+ moc_dir.name = moc_location
+ moc_dir.variable = QMAKE_MOC
+Index: qtopia-core-opensource-src-4.3.3/tools/assistant/lib/lib.pro
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/tools/assistant/lib/lib.pro 2007-12-04 18:08:19.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/tools/assistant/lib/lib.pro 2007-12-27 17:26:19.000000000 +0100
+@@ -52,7 +52,7 @@
+ }
+ }
+
+-TARGET = $$qtLibraryTarget($$TARGET) #done towards the end
++TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX) #done towards the end
+
+ target.path=$$[QT_INSTALL_LIBS]
+ INSTALLS += target
+Index: qtopia-core-opensource-src-4.3.3/tools/designer/src/components/component.pri
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/tools/designer/src/components/component.pri 2007-12-04 18:08:43.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/tools/designer/src/components/component.pri 2007-12-27 17:26:19.000000000 +0100
+@@ -1,2 +1,2 @@
+
+-TARGET = $$qtLibraryTarget($$TARGET)
++TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX)
+Index: qtopia-core-opensource-src-4.3.3/tools/qdbus/src/src.pro
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/tools/qdbus/src/src.pro 2007-12-04 18:08:18.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/tools/qdbus/src/src.pro 2007-12-27 17:26:19.000000000 +0100
+@@ -70,7 +70,7 @@
+ }
+ }
+
+-TARGET = $$qtLibraryTarget($$TARGET) #done towards the end (after framework)
++TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX) #done towards the end (after framework)
+
+ # Input
+
+Index: qtopia-core-opensource-src-4.3.3/tools/qtestlib/src/src.pro
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/tools/qtestlib/src/src.pro 2007-12-04 18:08:18.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/tools/qtestlib/src/src.pro 2007-12-27 17:26:19.000000000 +0100
+@@ -61,7 +61,7 @@
+ }
+ }
+
+-TARGET = $$qtLibraryTarget($$TARGET) #done towards the end (after framework)
++TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX) #done towards the end (after framework)
+
+ # Input
+ HEADERS = qtest_global.h qtestcase.h qtestdata.h qtesteventloop.h
+Index: qtopia-core-opensource-src-4.3.3/tools/designer/src/uitools/uitools.pro
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/tools/designer/src/uitools/uitools.pro 2007-12-04 18:08:43.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/tools/designer/src/uitools/uitools.pro 2007-12-27 17:26:19.000000000 +0100
+@@ -1,5 +1,5 @@
+ TEMPLATE = lib
+-TARGET = $$qtLibraryTarget(QtUiTools)
++TARGET = $$qtLibraryTarget(QtUiTools$$QT_LIBINFIX)
+ QT += xml
+ CONFIG += qt staticlib
+ DESTDIR = ../../../../lib
+Index: qtopia-core-opensource-src-4.3.3/mkspecs/features/uitools.prf
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/mkspecs/features/uitools.prf 2007-12-27 17:32:57.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/mkspecs/features/uitools.prf 2007-12-27 17:33:56.000000000 +0100
+@@ -2,10 +2,10 @@
+ qt:load(qt)
+
+ # Include the correct version of the UiLoader library
+-QTUITOOLS_LINKAGE = -lQtUiTools
++QTUITOOLS_LINKAGE = -lQtUiTools$${QT_LIBINFIX}
+ CONFIG(debug, debug|release) {
+- mac: QTUITOOLS_LINKAGE = -lQtUiTools_debug
+- win32: QTUITOOLS_LINKAGE = -lQtUiToolsd
++ mac: QTUITOOLS_LINKAGE = -lQtUiTools$${QT_LIBINFIX}_debug
++ win32: QTUITOOLS_LINKAGE = -lQtUiTools$${QT_LIBINFIX}d
+ }
+ LIBS += $$QTUITOOLS_LINKAGE
+
diff --git a/packages/qt4/qt4-x11-free-4.1.2/.mtn2git_empty b/packages/qt4/qt4-x11-free-4.1.2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qt4/qt4-x11-free-4.1.2/.mtn2git_empty
diff --git a/packages/qt/qt4-x11-free-4.1.2/configurable-cpu-extensions.patch b/packages/qt4/qt4-x11-free-4.1.2/configurable-cpu-extensions.patch
index ab943db1ff..ab943db1ff 100644
--- a/packages/qt/qt4-x11-free-4.1.2/configurable-cpu-extensions.patch
+++ b/packages/qt4/qt4-x11-free-4.1.2/configurable-cpu-extensions.patch
diff --git a/packages/qt/qt4-x11-free-4.1.2/cross-compile.patch b/packages/qt4/qt4-x11-free-4.1.2/cross-compile.patch
index 7c8665c9c1..7c8665c9c1 100644
--- a/packages/qt/qt4-x11-free-4.1.2/cross-compile.patch
+++ b/packages/qt4/qt4-x11-free-4.1.2/cross-compile.patch
diff --git a/packages/qt/qt4-x11-free-4.1.2/fix-asm-constraints.patch b/packages/qt4/qt4-x11-free-4.1.2/fix-asm-constraints.patch
index 93fc52d055..93fc52d055 100644
--- a/packages/qt/qt4-x11-free-4.1.2/fix-asm-constraints.patch
+++ b/packages/qt4/qt4-x11-free-4.1.2/fix-asm-constraints.patch
diff --git a/packages/qt/qt4-x11-free-4.1.2/fix-mkspecs.patch b/packages/qt4/qt4-x11-free-4.1.2/fix-mkspecs.patch
index e927df9c7d..e927df9c7d 100644
--- a/packages/qt/qt4-x11-free-4.1.2/fix-mkspecs.patch
+++ b/packages/qt4/qt4-x11-free-4.1.2/fix-mkspecs.patch
diff --git a/packages/qt/qt4-x11-free-4.1.2/fix-resinit-declaration.patch b/packages/qt4/qt4-x11-free-4.1.2/fix-resinit-declaration.patch
index fcd5de6f97..fcd5de6f97 100644
--- a/packages/qt/qt4-x11-free-4.1.2/fix-resinit-declaration.patch
+++ b/packages/qt4/qt4-x11-free-4.1.2/fix-resinit-declaration.patch
diff --git a/packages/qt/qt4-x11-free-4.1.2/gcc4_1.patch b/packages/qt4/qt4-x11-free-4.1.2/gcc4_1.patch
index 392aaf4f5f..392aaf4f5f 100644
--- a/packages/qt/qt4-x11-free-4.1.2/gcc4_1.patch
+++ b/packages/qt4/qt4-x11-free-4.1.2/gcc4_1.patch
diff --git a/packages/qt/qt4-x11-free-4.1.2/no-qmake.patch b/packages/qt4/qt4-x11-free-4.1.2/no-qmake.patch
index 324f44303a..324f44303a 100644
--- a/packages/qt/qt4-x11-free-4.1.2/no-qmake.patch
+++ b/packages/qt4/qt4-x11-free-4.1.2/no-qmake.patch
diff --git a/packages/qt/qt4-x11-free-4.1.2/no-tools.patch b/packages/qt4/qt4-x11-free-4.1.2/no-tools.patch
index 2bda49c9c5..2bda49c9c5 100644
--- a/packages/qt/qt4-x11-free-4.1.2/no-tools.patch
+++ b/packages/qt4/qt4-x11-free-4.1.2/no-tools.patch
diff --git a/packages/qt4/qt4-x11-free-4.3.3/.mtn2git_empty b/packages/qt4/qt4-x11-free-4.3.3/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qt4/qt4-x11-free-4.3.3/.mtn2git_empty
diff --git a/packages/qt/qt4-x11-free-4.3.2/0002-fix-resinit-declaration.patch b/packages/qt4/qt4-x11-free-4.3.3/0002-fix-resinit-declaration.patch
index e479a64a2b..e479a64a2b 100644
--- a/packages/qt/qt4-x11-free-4.3.2/0002-fix-resinit-declaration.patch
+++ b/packages/qt4/qt4-x11-free-4.3.3/0002-fix-resinit-declaration.patch
diff --git a/packages/qt/qt4-x11-free-4.3.2/0004-no-qmake.patch b/packages/qt4/qt4-x11-free-4.3.3/0004-no-qmake.patch
index 359f6df9d5..359f6df9d5 100644
--- a/packages/qt/qt4-x11-free-4.3.2/0004-no-qmake.patch
+++ b/packages/qt4/qt4-x11-free-4.3.3/0004-no-qmake.patch
diff --git a/packages/qt/qt4-x11-free-4.3.2/0006-freetype-host-includes.patch b/packages/qt4/qt4-x11-free-4.3.3/0006-freetype-host-includes.patch
index cc8e115fee..cc8e115fee 100644
--- a/packages/qt/qt4-x11-free-4.3.2/0006-freetype-host-includes.patch
+++ b/packages/qt4/qt4-x11-free-4.3.3/0006-freetype-host-includes.patch
diff --git a/packages/qt/qt4-x11-free-4.3.2/0007-openssl-host-includes.patch b/packages/qt4/qt4-x11-free-4.3.3/0007-openssl-host-includes.patch
index 35b71d9694..35b71d9694 100644
--- a/packages/qt/qt4-x11-free-4.3.2/0007-openssl-host-includes.patch
+++ b/packages/qt4/qt4-x11-free-4.3.3/0007-openssl-host-includes.patch
diff --git a/packages/qt4/qt4-x11-free.inc b/packages/qt4/qt4-x11-free.inc
new file mode 100644
index 0000000000..2650433ec8
--- /dev/null
+++ b/packages/qt4/qt4-x11-free.inc
@@ -0,0 +1,28 @@
+DESCRIPTION = "Qt is a versatile cross-platform application framework -- this is the X11 version."
+SECTION = "x11/libs"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.trolltech.com"
+LICENSE = "GPL QPL"
+DEPENDS += "virtual/libx11 fontconfig xft libxext libxrender libxrandr libxcursor"
+PROVIDES = "qt4x11"
+PR = "r7"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz \
+ file://0001-cross-compile.patch;patch=1 \
+ file://0003-no-tools.patch;patch=1 \
+ file://0004-no-qmake.patch;patch=1 \
+ file://0005-fix-mkspecs.patch;patch=1"
+S = "${WORKDIR}/qt-x11-opensource-src-${PV}"
+
+
+QT_CONFIG_FLAGS += "-no-xinerama -no-tablet -no-xkb -no-opengl"
+QT_BASE_NAME = "qt4"
+QT_BASE_LIB = "libqt"
+QT_DIR_NAME = "qt4"
+QT_LIBINFIX = ""
+require qt_depends.inc
+require qt_configuration.inc
+require qt_packaging.inc
+require qt_staging.inc
+
+inherit qt4x11
diff --git a/packages/qt4/qt4-x11-free_4.1.2.bb b/packages/qt4/qt4-x11-free_4.1.2.bb
new file mode 100644
index 0000000000..77fa6dba12
--- /dev/null
+++ b/packages/qt4/qt4-x11-free_4.1.2.bb
@@ -0,0 +1,141 @@
+SECTION = "x11/libs"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.trolltech.com"
+LICENSE = "GPL QPL"
+DEPENDS = "uicmoc4-native qmake2-native freetype jpeg virtual/libx11 xft libxext libxrender libxrandr libxcursor"
+PROVIDES = "qt4x11"
+PR = "r1"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-${PV}.tar.gz \
+ file://cross-compile.patch;patch=1 \
+ file://fix-resinit-declaration.patch;patch=1 \
+ file://no-tools.patch;patch=1 \
+ file://no-qmake.patch;patch=1 \
+ file://gcc4_1.patch;patch=1 \
+ file://configurable-cpu-extensions.patch;patch=1 \
+ file://fix-mkspecs.patch;patch=1 \
+ file://fix-asm-constraints.patch;patch=1"
+S = "${WORKDIR}/qt-x11-opensource-src-${PV}"
+
+PARALLEL_MAKE = ""
+
+inherit qmake_base qt4x11 pkgconfig
+
+export QTDIR = "${S}"
+STAGING_QT_DIR = "${STAGING_DIR}/${TARGET_SYS}/qt4"
+EXTRA_OEMAKE = "-e"
+
+require qt4_arch.inc
+
+QT_ARCH := "${@qt_arch(d)}"
+
+# FIXME:
+# * add missing options
+QT_CONFIG_FLAGS = "-release -shared -qt-zlib -system-libjpeg -no-nas-sound -no-sm -no-libmng -qt-libpng -no-gif -no-xinerama \
+ -no-tablet -no-xkb -no-nis -no-cups -no-opengl \
+ -nosse \
+ -no-sql-ibase -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 \
+ -verbose -stl -no-accessibility"
+
+EXTRA_ENV = 'QMAKE="${STAGING_BINDIR_NATIVE}/qmake2 -after DEFINES+=QT_NO_XIM INCPATH+=${STAGING_INCDIR} \
+ INCPATH+=${STAGING_INCDIR}/freetype2 LIBS+=-L${STAGING_LIBDIR}" \
+ QMAKESPEC="${QMAKESPEC}" LINK="${CXX} -Wl,-rpath-link,${STAGING_LIBDIR}" \
+ AR="${TARGET_PREFIX}ar cqs" \
+ MOC="${STAGING_BINDIR_NATIVE}/moc4" UIC="${STAGING_BINDIR_NATIVE}/uic4" MAKE="make -e"'
+
+do_configure() {
+ echo "DEFINES -= QT_NO_CAST_TO_ASCII" >>src/qbase.pri
+ echo "DEFINES += QT_NO_XIM" >>src/qbase.pri
+ unset QMAKESPEC
+ ln -sf ${STAGING_BINDIR_NATIVE}/qmake2 bin/qmake
+ ln -sf ./linux-g++ mkspecs/linux-gnueabi-g++
+ #export QMAKESPEC="linux-oe-g++"
+ #rm -rf ./mkspecs
+ #ln -sf ${QMAKE_MKSPEC_PATH} ./mkspecs
+ echo yes | ./configure -prefix / -platform ${TARGET_OS}-g++ -crossarch ${QT_ARCH} ${QT_CONFIG_FLAGS} -fast \
+ -L${STAGING_LIBDIR} -I${STAGING_INCDIR} -I${STAGING_INCDIR}/freetype2 -I${STAGING_INCDIR}/mysql
+}
+
+# FIXME: Might want to compile the cross tools for the -dev packages as well...
+do_compile() {
+ unset CFLAGS CXXFLAGS
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/rcc4 ${S}/bin/rcc
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/moc4 ${S}/bin/moc
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/uic4 ${S}/bin/uic
+
+ oe_runmake ${EXTRA_ENV}
+}
+
+PARTS = "3Support Core Designer DesignerComponents Gui Network Sql Svg Test Xml"
+
+do_stage() {
+ oe_runmake install INSTALL_ROOT=/
+ install -d ${STAGING_QT_DIR}
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/rcc4 ${STAGING_QT_DIR}/bin/rcc
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/moc4 ${STAGING_QT_DIR}/bin/moc
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/uic4 ${STAGING_QT_DIR}/bin/uic
+
+}
+
+# FIXME: Might want to call oe_runmake install INSTALL_ROOT=${D}/${prefix} as well...
+# FIXME: Might want to install everything into ${libdir}/qt4/* to match the usual packing...
+do_install() {
+ install -d ${D}${libdir}
+ install -d ${D}${bindir}
+ for part in ${PARTS}
+ do
+ oe_libinstall -so -C lib libQt$part ${D}${libdir}
+ done
+ oe_libinstall -a -C lib libQtAssistantClient ${STAGING_QT_DIR}
+ cp -pPR include/* ${D}${incdir}
+ cp -pPR plugins ${D}${libdir}
+ cp -pPR bin/* ${D}${bindir}
+
+ install -d ${D}${bindir}/qt4-examples
+ for binary in `find examples -perm 0755 -type f`
+ do
+ install -m 0755 $binary ${D}${bindir}/qt4-examples/
+ done
+ install -d ${D}${bindir}/qt4-demos
+ for binary in `find demos -perm 0755 -type f`
+ do
+ install -m 0755 $binary ${D}${bindir}/qt4-demos/
+ done
+}
+
+PACKAGES =+ "libqtcore4 libqtgui4 libqtnetwork4 libqtsql4 libqtsvg4 libqttest4 libqtxml4 \
+ libqtdesigner4 libqtdesignercomponents4 libqt3support4 \
+ qt4-assistant qt4-common qt4-designer qt4-demos qt4-examples qt4-linguist \
+ qt4-plugins-accessible qt4-plugins-codecs qt4-plugins-designer qt4-plugins-imageformats qt4-plugins-sqldrivers"
+
+ALLOW_EMPTY = "1"
+FILES_${PN} = ""
+RDEPENDS_${PN} = "${PACKAGES}"
+
+FILES_libqtcore4 = "${libdir}/libQtCore.so*"
+FILES_libqtgui4 = "${libdir}/libQtGui.so*"
+FILES_libqtnetwork4 = "${libdir}/libQtNetwork.so*"
+FILES_libqtsql4 = "${libdir}/libQtSql.so*"
+FILES_libqtsvg4 = "${libdir}/libQtSvg.so*"
+FILES_libqttest4 = "${libdir}/libQtTest.so*"
+FILES_libqtxml4 = "${libdir}/libQtXml.so*"
+FILES_libqtdesigner4 = "${libdir}/libQtDesigner.so*"
+FILES_libqtdesignercomponents4 = "${libdir}/libQtDesignerComponents.so*"
+FILES_libqt3support4 = "${libdir}/libQt3Support.so*"
+
+FILES_qt4-plugins-accessible = "${libdir}/plugins/accessible/*.so"
+FILES_qt4-plugins-codecs = "${libdir}/plugins/codecs/*.so"
+FILES_qt4-plugins-designer = "${libdir}/plugins/designer/*.so"
+FILES_qt4-plugins-imageformats = "${libdir}/plugins/imageformats/*.so"
+FILES_qt4-plugins-sqldrivers = "${libdir}/plugins/sqldrivers/*.so"
+
+FILES_qt4-assistant = "${bindir}/*assistant*"
+FILES_qt4-designer = "${bindir}/*designer*"
+FILES_qt4-linguist = "${bindir}/*linguist* ${bindir}/lrelease ${bindir}/lupdate ${bindir}/qm2ts"
+
+FILES_qt4-common = "${bindir}/qtconfig"
+FILES_qt4-examples = "${bindir}/qt4-examples/*"
+FILES_qt4-demos = "${bindir}/qtdemo ${bindir}/qt4-demos/*"
+
+FILES_${PN}-dev += "${bindir}/rcc ${bindir}/uic* ${bindir}/moc ${bindir}/qmake ${bindir}/syncqt \
+ ${bindir}/qt3to4 ${bindir}/findtr"
diff --git a/packages/qt4/qt4-x11-free_4.3.3.bb b/packages/qt4/qt4-x11-free_4.3.3.bb
new file mode 100644
index 0000000000..7d30503c07
--- /dev/null
+++ b/packages/qt4/qt4-x11-free_4.3.3.bb
@@ -0,0 +1,5 @@
+require qt4-x11-free.inc
+SRC_URI += " \
+ file://0002-fix-resinit-declaration.patch;patch=1 \
+ file://0006-freetype-host-includes.patch;patch=1 \
+ file://0007-openssl-host-includes.patch;patch=1 "
diff --git a/packages/qt4/qt4_arch.inc b/packages/qt4/qt4_arch.inc
new file mode 100644
index 0000000000..60ede1db2b
--- /dev/null
+++ b/packages/qt4/qt4_arch.inc
@@ -0,0 +1,23 @@
+inherit siteinfo
+
+def qt_arch(d):
+ import bb, re
+ arch = bb.data.getVar('TARGET_ARCH', d, 1)
+ if re.match("^i.86$", arch):
+ arch = "i386"
+ elif re.match("^arm.*", arch):
+ arch = "arm"
+ elif arch == "x86_64":
+ arch = "x86"
+ elif arch == "mipsel":
+ arch = "mips"
+ return arch
+
+def qt_endian(d):
+ import bb
+ if bb.data.getVar('SITEINFO_ENDIANESS', d, True) == "le":
+ return "-little-endian"
+ elif bb.data.getVar('SITEINFO_ENDIANESS', d, True) == "be":
+ return "-big-endian"
+ else:
+ assert False
diff --git a/packages/qt4/qt_configuration.inc b/packages/qt4/qt_configuration.inc
new file mode 100644
index 0000000000..252a80a408
--- /dev/null
+++ b/packages/qt4/qt_configuration.inc
@@ -0,0 +1,82 @@
+require qt4_arch.inc
+QT_ARCH := "${@qt_arch(d)}"
+QT_ENDIAN = "${@qt_endian(d)}"
+
+QT_CONFIG_FLAGS += "-release -no-cups -no-accessibility -reduce-relocations \
+ -shared -no-nas-sound -no-sm -no-nis \
+ -qt-gif -system-libjpeg -system-libpng -system-zlib \
+ -no-sql-ibase -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 \
+ -no-pch -qdbus -stl -glib"
+
+EXTRA_OEMAKE = "-e"
+
+EXTRA_ENV = 'QMAKE="${STAGING_BINDIR_NATIVE}/qmake2 -after \
+ INCPATH+=${STAGING_INCDIR}/freetype2 LIBS+=-L${STAGING_LIBDIR}" \
+ QMAKESPEC="${QMAKESPEC}" LINK="${CXX} -Wl,-rpath-link,${STAGING_LIBDIR}" \
+ AR="${TARGET_PREFIX}ar cqs" \
+ MOC="${STAGING_BINDIR_NATIVE}/moc4" UIC="${STAGING_BINDIR_NATIVE}/uic4" MAKE="make -e"'
+
+export QT_CONF_PATH="${WORKDIR}/qt.conf"
+
+do_configure() {
+ unset QMAKESPEC
+ unset QTDIR
+ ln -sf ${STAGING_BINDIR_NATIVE}/qmake2 bin/qmake
+ ln -s linux-g++ mkspecs/${TARGET_OS}-oe-g++
+
+ echo "[Paths]" > $QT_CONF_PATH
+ echo "Prefix=${prefix}" >> $QT_CONF_PATH
+ echo "Documentation=${docdir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
+ echo "Headers=${includedir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
+ echo "Libraries=${libdir}" >> $QT_CONF_PATH
+ echo "Binaries=${bindir}" >> $QT_CONF_PATH
+ echo "Plugins=${libdir}/${QT_DIR_NAME}/plugins" >> $QT_CONF_PATH
+ echo "Data=${datadir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
+ echo "Translations=${datadir}/${QT_DIR_NAME}/translations" >> $QT_CONF_PATH
+ echo "Settings=${sysconfdir}/${QT_DIR_NAME}" >> $QT_CONF_PATH
+ echo "Examples=${bindir}/${QT_DIR_NAME}/examples" >> $QT_CONF_PATH
+ echo "Demos=${bindir}/${QT_DIR_NAME}/demos" >> $QT_CONF_PATH
+
+ echo yes | ./configure -v \
+ -prefix ${prefix} \
+ -bindir ${bindir} \
+ -libdir ${libdir} \
+ -datadir ${datadir}/${QT_DIR_NAME} \
+ -sysconfdir ${sysconfdir}/${QT_DIR_NAME} \
+ -docdir ${docdir}/${QT_DIR_NAME} \
+ -headerdir ${includedir}/${QT_DIR_NAME} \
+ -plugindir ${libdir}/${QT_DIR_NAME}/plugins \
+ -translationdir ${datadir}/${QT_DIR_NAME}/translations \
+ -examplesdir ${bindir}/${QT_DIR_NAME}/examples \
+ -demosdir ${bindir}/${QT_DIR_NAME}/demos \
+ -platform ${TARGET_OS}-oe-g++ \
+ -xplatform ${TARGET_OS}-oe-g++ \
+ -embedded ${QT_ARCH} ${QT_ENDIAN} -fast \
+ -crossarch ${QT_ARCH} \
+ ${QT_CONFIG_FLAGS} -fast \
+ -L${STAGING_LIBDIR} -I${STAGING_INCDIR} \
+ -I${STAGING_INCDIR}/freetype2
+}
+
+do_compile() {
+ unset CFLAGS CXXFLAGS
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/rcc4 ${S}/bin/rcc
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/moc4 ${S}/bin/moc
+ install -m 0755 ${STAGING_BINDIR_NATIVE}/uic4 ${S}/bin/uic
+
+ oe_runmake ${EXTRA_ENV}
+}
+
+#
+# Fixup some pkgconfig files
+# moc_location=/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/work/arm-oabi-angstrom-linux/qtopia-core-4.3.0-r2/qtopia-core-opensource-src-4.3.0/bin/moc
+# uic_location=/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/work/arm-oabi-angstrom-linux/qtopia-core-4.3.0-r2/qtopia-core-opensource-src-4.3.0/bin/uic
+#
+# Libs: -L${libdir} -lQtNetwork -L/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/staging/arm-angstrom-linux/lib -L/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/work/arm-oabi-angstrom-linux/qtopia-core-4.3.0-r2/qtopia-core-opensource-src-4.3.0/lib $(LIBS_EXTRA) -lQtCore -L/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/staging/arm-angstrom-linux/lib -L/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/work/arm-oabi-angstrom-linux/qtopia-core-4.3.0-r2/qtopia-core-opensource-src-4.3.0/lib -lm -lrt -lpthread -ldl
+#
+do_compile_append() {
+ cd ${S}/lib/pkgconfig
+ sed -i s#"-L${S}/lib"##g *.pc
+ sed -i s#"moc_location=${S}/bin/moc"#moc_location=${STAGING_BINDIR}/moc4# *.pc
+ sed -i s#"uic_location=${S}/bin/uic"#uic_location=${STAGING_BINDIR}/uic4# *.pc
+}
diff --git a/packages/qt4/qt_depends.inc b/packages/qt4/qt_depends.inc
new file mode 100644
index 0000000000..289b625d0e
--- /dev/null
+++ b/packages/qt4/qt_depends.inc
@@ -0,0 +1,3 @@
+inherit pkgconfig qmake_base
+
+DEPENDS += " uicmoc4-native qmake2-native freetype jpeg libpng zlib dbus openssl glib-2.0"
diff --git a/packages/qt4/qt_packaging.inc b/packages/qt4/qt_packaging.inc
new file mode 100644
index 0000000000..ba2a037f59
--- /dev/null
+++ b/packages/qt4/qt_packaging.inc
@@ -0,0 +1,182 @@
+NONDEV_PACKAGES += "${QT_BASE_LIB}core4 ${QT_BASE_LIB}gui4 ${QT_BASE_LIB}network4 \
+ ${QT_BASE_LIB}sql4 ${QT_BASE_LIB}svg4 ${QT_BASE_LIB}test4 ${QT_BASE_LIB}xml4 \
+ ${QT_BASE_LIB}designer4 ${QT_BASE_LIB}designercomponents4 \
+ ${QT_BASE_LIB}3support4 ${QT_BASE_LIB}assistantclient4 ${QT_BASE_LIB}script4 \
+ ${QT_BASE_LIB}dbus4 ${QT_BASE_LIB}opengl4 \
+ ${QT_BASE_NAME}-assistant ${QT_BASE_NAME}-common \
+ ${QT_BASE_NAME}-designer \
+ ${QT_BASE_NAME}-demos ${QT_BASE_NAME}-examples \
+ ${QT_BASE_NAME}-linguist \
+ ${QT_BASE_NAME}-pixeltool ${QT_BASE_NAME}-dbus \
+ ${QT_BASE_NAME}-fonts "
+
+DEV_PACKAGES += "${QT_BASE_LIB}core4-dev \
+ ${QT_BASE_LIB}gui4-dev \
+ ${QT_BASE_LIB}network4-dev \
+ ${QT_BASE_LIB}sql4-dev \
+ ${QT_BASE_LIB}svg4-dev \
+ ${QT_BASE_LIB}test4-dev \
+ ${QT_BASE_LIB}xml4-dev \
+ ${QT_BASE_LIB}designer4-dev \
+ ${QT_BASE_LIB}designercomponents4-dev \
+ ${QT_BASE_LIB}3support4-dev \
+ ${QT_BASE_LIB}assistantclient4-dev \
+ ${QT_BASE_LIB}script4-dev \
+ ${QT_BASE_LIB}dbus4-dev \
+ ${QT_BASE_LIB}opengl4-dev \
+ ${QT_BASE_LIB}uitools4-dev"
+
+DBG_PACKAGES += "${QT_BASE_LIB}core4-dbg \
+ ${QT_BASE_LIB}gui4-dbg \
+ ${QT_BASE_LIB}network4-dbg \
+ ${QT_BASE_LIB}sql4-dbg \
+ ${QT_BASE_LIB}svg4-dbg \
+ ${QT_BASE_LIB}test4-dbg \
+ ${QT_BASE_LIB}xml4-dbg \
+ ${QT_BASE_LIB}designer4-dbg \
+ ${QT_BASE_LIB}designercomponents4-dbg \
+ ${QT_BASE_LIB}3support4-dbg \
+ ${QT_BASE_LIB}assistantclient4-dbg \
+ ${QT_BASE_LIB}script4-dbg \
+ ${QT_BASE_LIB}dbus4-dbg \
+ ${QT_BASE_LIB}opengl4-dbg"
+
+
+PACKAGES += "${DEV_PACKAGES} ${NONDEV_PACKAGES} ${DBG_PACKAGES}"
+
+ALLOW_EMPTY_${PN} = "1"
+FILES_${PN} = ""
+FILES_${PN}-dev = " ${includedir}/${QT_DIR_NAME}/Qt/*"
+FILES_${PN}-dbg = "${bindir}/*/.debug "
+RDEPENDS_${PN} = "${NONDEV_PACKAGES}"
+RDEPENDS_${PN}-dev = "${DEV_PACKAGES}"
+RDEPENDS_${PN}-dbg = "${DBG_PACKAGES}"
+
+def qt_default_dev(name):
+ return """${libdir}/libQt%(name)s${QT_LIBINFIX}.la
+ ${libdir}/libQt%(name)s${QT_LIBINFIX}.prl
+ ${libdir}/libQt%(name)s${QT_LIBINFIX}.so
+ ${includedir}/${QT_DIR_NAME}/Qt%(name)s*
+ ${libdir}/pkgconfig/Qt%(name)s${QT_LIBINFIX}.pc""" % locals()
+
+
+FILES_${QT_BASE_LIB}core4 = "${libdir}/libQtCore${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}core4-dev = "${@qt_default_dev('Core')}"
+FILES_${QT_BASE_LIB}core4-dbg = "${libdir}/.debug/libQtCore*"
+FILES_${QT_BASE_LIB}gui4 = "${libdir}/libQtGui${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}gui4-dev = "${@qt_default_dev('Gui')}"
+FILES_${QT_BASE_LIB}gui4-dbg = "${libdir}/.debug/libQtGui*"
+FILES_${QT_BASE_LIB}network4 = "${libdir}/libQtNetwork${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}network4-dev = "${@qt_default_dev('Network')}"
+FILES_${QT_BASE_LIB}network4-dbg = "${libdir}/.debug/libQtNetwork${QT_LIBINFIX}*"
+FILES_${QT_BASE_LIB}sql4 = "${libdir}/libQtSql${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}sql4-dev = "${@qt_default_dev('Sql')}"
+FILES_${QT_BASE_LIB}sql4-dbg = "${libdir}/.debug/libQtSql*"
+FILES_${QT_BASE_LIB}svg4 = "${libdir}/libQtSvg${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}svg4-dev = "${@qt_default_dev('Svg')}"
+FILES_${QT_BASE_LIB}svg4-dbg = "${libdir}/.debug/libQtSvg*"
+FILES_${QT_BASE_LIB}test4 = "${libdir}/libQtTest${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}test4-dev = "${@qt_default_dev('Test')}"
+FILES_${QT_BASE_LIB}test4-dbg = "${libdir}/.debug/libQtTest*"
+FILES_${QT_BASE_LIB}xml4 = "${libdir}/libQtXml${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}xml4-dev = "${@qt_default_dev('Xml')}"
+FILES_${QT_BASE_LIB}xml4-dbg = "${libdir}/.debug/libQtXml*"
+FILES_${QT_BASE_LIB}designer4 = "${libdir}/libQtDesigner${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}designer4-dev = "${@qt_default_dev('Designer')}"
+FILES_${QT_BASE_LIB}designer4-dbg = "${libdir}/.debug/libQtDesigner*"
+FILES_${QT_BASE_LIB}designercomponents4 = "${libdir}/libQtDesignerComponents${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}designercomponents4-dev = "${@qt_default_dev('DesignerComponents')}"
+FILES_${QT_BASE_LIB}designercomponents4-dbg = "${libdir}/.debug/libQtDesignerComponents*"
+FILES_${QT_BASE_LIB}3support4 = "${libdir}/libQt3Support${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}3support4-dev = "${@qt_default_dev('3Support')}"
+FILES_${QT_BASE_LIB}3support4-dbg = "${libdir}/.debug/libQt3Support*"
+FILES_${QT_BASE_LIB}assistantclient4 = "${libdir}/libQtAssistantClient${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}assistantclient4-dev = "${@qt_default_dev('AssistantClient')} ${includedir}/${QT_DIR_NAME}/QtAssistant*"
+FILES_${QT_BASE_LIB}assistantclient4-dbg = "${libdir}/.debug/libQtAssistantClient*"
+FILES_${QT_BASE_LIB}script4 = "${libdir}/libQtScript${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}script4-dev = "${@qt_default_dev('Script')}"
+FILES_${QT_BASE_LIB}script4-dbg = "${libdir}/.debug/libQtScript*"
+FILES_${QT_BASE_LIB}dbus4 = "${libdir}/libQtDBus${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}dbus4-dev = "${@qt_default_dev('DBus')}"
+FILES_${QT_BASE_LIB}dbus4-dbg = "${libdir}/.debug/libQtDBus*"
+FILES_${QT_BASE_LIB}opengl4 = "${libdir}/libQtOpenGL${QT_LIBINFIX}.so.*"
+FILES_${QT_BASE_LIB}opengl4-dev = "${@qt_default_dev('OpenGL')}"
+FILES_${QT_BASE_LIB}opengl4-dbg = "${libdir}/.debug/libQtOpenGL*"
+FILES_${QT_BASE_LIB}uitools4-dev = "${libdir}/libQtUiTools* ${includedir}/${QT_DIR_NAME}/QtUiTools* ${libdir}/pkgconfig/QtUiTools${QT_LIBINFIX}.pc"
+
+
+FILES_${QT_BASE_NAME}-assistant = "${bindir}/*assistant*"
+FILES_${QT_BASE_NAME}-designer = "${bindir}/*designer*"
+FILES_${QT_BASE_NAME}-linguist = "${bindir}/*linguist* ${bindir}/lrelease ${bindir}/lupdate ${bindir}/qm2ts"
+FILES_${QT_BASE_NAME}-pixeltool = "${bindir}/pixeltool"
+FILES_${QT_BASE_NAME}-dbus = "${bindir}/qdbus ${bindir}/qdbusxml2cpp ${bindir}/qdbuscpp2xml ${bindir}/qdbusviewer"
+
+FILES_${QT_BASE_NAME}-common = "${bindir}/qtconfig"
+FILES_${QT_BASE_NAME}-examples = "${bindir}/${QT_DIR_NAME}/examples/*"
+FILES_${QT_BASE_NAME}-demos = "${bindir}/qtdemo ${bindir}/${QT_DIR_NAME}/demos/*"
+
+FILES_${QT_BASE_NAME}-fonts = "${libdir}/fonts"
+
+python populate_packages_prepend() {
+ translation_dir = bb.data.expand('${datadir}/${QT_DIR_NAME}/translations/', d)
+ translation_name = bb.data.expand('${QT_BASE_NAME}-translation-%s', d)
+ do_split_packages(d, translation_dir, '^qt_(.*)\.qm$', translation_name, '{PN} translation for %s', extra_depends='' )
+
+ phrasebook_dir = bb.data.expand('${datadir}/${QT_DIR_NAME}/phrasebooks/', d)
+ phrasebook_name = bb.data.expand('${QT_BASE_NAME}-phrasebook-%s', d)
+ do_split_packages(d, phrasebook_dir, '^(.*)\.qph$', phrasebook_name, '{PN} phrasebook for %s', extra_depends='' )
+
+ # Package all the plugins and their -dbg version and create a meta package
+ import os
+ def qtopia_split(path, name, glob):
+ """
+ Split the package into a normal and -dbg package and then add the
+ new packages to the meta package.
+ """
+ plugin_dir = bb.data.expand('${libdir}/${QT_DIR_NAME}/plugins/%s/' % path, d)
+ if not os.path.exists("%s%s" % (bb.data.expand('${D}',d), plugin_dir)):
+ bb.note("The path does not exist:", bb.data.expand('${D}', d), plugin_dir)
+ return
+
+ plugin_name = bb.data.expand('${QT_BASE_NAME}-plugin-%s-%%s' % name, d)
+ dev_packages = []
+ dev_hook = lambda file,pkg,b,c,d:dev_packages.append((file,pkg))
+ do_split_packages(d, plugin_dir, glob, plugin_name, '{PN} %s for %%s' % name, extra_depends='', hook=dev_hook)
+ # Create a -dbg package as well
+ plugin_dir_dbg = bb.data.expand('${libdir}/${QT_DIR_NAME}/plugins/%s/.debug' % path, d)
+ packages = bb.data.getVar('PACKAGES',d)
+ for (file,package) in dev_packages:
+ packages = "%s %s-dbg" % (packages, package)
+ file_name = os.path.join(plugin_dir_dbg, os.path.basename(file))
+ bb.data.setVar("FILES_%s-dbg" % package, file_name, d)
+ bb.data.setVar("DESCRIPTION_%s-dbg" % package, "{PN} %s for %s" % (name, package), d)
+
+ bb.data.setVar('PACKAGES', packages, d)
+
+ qtopia_split('accessible', 'accessible', '^libq(.*)\.so$')
+ qtopia_split('codecs', 'codec', '^libq(.*)\.so$')
+ qtopia_split('decorations', 'decoration', '^libqdecoration(.*)\.so$')
+ qtopia_split('designer', 'designer', '^lib(.*)\.so$')
+ qtopia_split('gfxdrivers', 'gfxdriver', '^libqgfx(.*)\.so$')
+ qtopia_split('mousedrivers','mousedriver', '^libq(.*)mousedriver\.so$')
+ qtopia_split('iconengines', 'iconengine', '^libq(.*)\.so$')
+ qtopia_split('imageformats','imageformat', '^libq(.*)\.so$')
+ qtopia_split('inputmethods','inputmethod', '^libq(.*)\.so$')
+ qtopia_split('sqldrivers', 'sqldriver', '^libq(.*)\.so$')
+ qtopia_split('styles', 'style', '^libq(.*)\.so$')
+}
+
+
+do_install() {
+ oe_runmake install INSTALL_ROOT=${D}
+
+ # These are host binaries, we should only use them in staging
+ rm -rf ${D}/${bindir}/qmake
+
+ # XXX, FIXME, TODO: package the demos and examples properly
+ rm -rf ${D}/${bindir}/${QT_DIR_NAME}
+ rm -rf ${D}/${datadir}/${QT_DIR_NAME}/mkspecs
+
+ install -d ${D}/${libdir}/fonts
+ touch ${D}/${libdir}/fonts/fontdir
+}
diff --git a/packages/qt4/qt_staging.inc b/packages/qt4/qt_staging.inc
new file mode 100644
index 0000000000..9aa309d3af
--- /dev/null
+++ b/packages/qt4/qt_staging.inc
@@ -0,0 +1,40 @@
+# Fixing up some Qt .pc files
+do_stage_append() {
+ cd ${STAGING_LIBDIR}/pkgconfig
+ sed -i s#"-L${S}/lib"##g Qt*.pc
+ sed -i s#"moc_location=${S}/bin/moc"#moc_location=${STAGING_BINDIR}/moc4# Qt*.pc
+ sed -i s#"uic_location=${S}/bin/uic"#uic_location=${STAGING_BINDIR}/uic4# Qt*.pc
+ sed -i s#libdir=\$\{prefix\}/lib#libdir=\$\{prefix\}/lib/${QT_DIR_NAME}#g Qt*.pc
+
+ cd ${STAGING_LIBDIR}/${QT_DIR_NAME}
+ sed -i s#"-L${S}/lib"##g libQt*.la
+}
+
+STAGE_TEMP = "${WORKDIR}/temp-staging"
+do_stage() {
+ rm -rf ${STAGE_TEMP}
+ mkdir -p ${STAGE_TEMP}
+ oe_runmake install INSTALL_ROOT=${STAGE_TEMP}
+
+ install -d ${STAGING_INCDIR}/
+ install -d ${STAGING_LIBDIR}/${QT_DIR_NAME}
+ cp -pPRf ${STAGE_TEMP}/$includedir/* ${STAGING_INCDIR}/
+
+ for i in ${STAGE_TEMP}/${libdir}/*.la
+ do
+ sed -i s,installed=yes,installed=no, $i
+ cp -fpPR $i ${STAGING_LIBDIR}/${QT_DIR_NAME}/
+ cp -fpPR ${STAGE_TEMP}/${libdir}/$(basename $i .la).prl ${STAGING_LIBDIR}/${QT_DIR_NAME}
+ oe_libinstall -C ${STAGE_TEMP}/${libdir} -so $(basename $i .la) ${STAGING_LIBDIR}/${QT_DIR_NAME}
+ done
+
+ for i in libQtAssistantClient${QT_LIBINFIX} libQtDesignerComponents${QT_LIBINFIX} libQtUiTools${QT_LIBINFIX} libQtUiTools${QT_LIBINFIX} libQtDesigner${QT_LIBINFIX}
+ do
+ cp ${STAGE_TEMP}/${libdir}/$i.prl ${STAGING_LIBDIR}/${QT_DIR_NAME} || true
+ cp ${STAGE_TEMP}/${libdir}/$i.la ${STAGING_LIBDIR}/${QT_DIR_NAME} || true
+ oe_libinstall -C ${STAGE_TEMP}/${libdir} -so $i ${STAGING_LIBDIR}/${QT_DIR_NAME} || true
+ oe_libinstall -C ${STAGE_TEMP}/${libdir} -a $i ${STAGING_LIBDIR}/${QT_DIR_NAME} || true
+ done
+
+ rm -rf ${STAGE_TEMP}
+}
diff --git a/packages/qt4/qtopia-core-4.3.3/.mtn2git_empty b/packages/qt4/qtopia-core-4.3.3/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qt4/qtopia-core-4.3.3/.mtn2git_empty
diff --git a/packages/qt4/qtopia-core-4.3.3/0006-freetype-host-includes.patch b/packages/qt4/qtopia-core-4.3.3/0006-freetype-host-includes.patch
new file mode 100644
index 0000000000..cc8e115fee
--- /dev/null
+++ b/packages/qt4/qtopia-core-4.3.3/0006-freetype-host-includes.patch
@@ -0,0 +1,23 @@
+From c9ab62bd9a56643574b3ae6e59e0ca776d4860d2 Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Mon, 4 Jun 2007 14:48:50 +0200
+Subject: [PATCH] freetype host includes
+
+---
+ config.tests/unix/freetype/freetype.pri | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/config.tests/unix/freetype/freetype.pri b/config.tests/unix/freetype/freetype.pri
+index 84974bf..ab9a6f2 100644
+--- a/config.tests/unix/freetype/freetype.pri
++++ b/config.tests/unix/freetype/freetype.pri
+@@ -1,5 +1,5 @@
+ !cross_compile {
+- TRY_INCLUDEPATHS = /include /usr/include $$QMAKE_INCDIR $$QMAKE_INCDIR_X11 $$INCLUDEPATH
++ TRY_INCLUDEPATHS = $$QMAKE_INCDIR $$QMAKE_INCDIR_X11 $$INCLUDEPATH
+ for(p, TRY_INCLUDEPATHS) {
+ p = $$join(p, "", "", "/freetype2")
+ exists($$p):INCLUDEPATH *= $$p
+--
+1.5.0.7
+
diff --git a/packages/qt4/qtopia-core-4.3.3/0007-openssl-host-includes.patch b/packages/qt4/qtopia-core-4.3.3/0007-openssl-host-includes.patch
new file mode 100644
index 0000000000..35b71d9694
--- /dev/null
+++ b/packages/qt4/qtopia-core-4.3.3/0007-openssl-host-includes.patch
@@ -0,0 +1,23 @@
+From d45943adb443ad4b85ca4504952dee743c675e1e Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Mon, 4 Jun 2007 14:58:34 +0200
+Subject: [PATCH] openssl host includes
+
+---
+ config.tests/unix/openssl/openssl.pri | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/config.tests/unix/openssl/openssl.pri b/config.tests/unix/openssl/openssl.pri
+index 756e5fe..19b4061 100644
+--- a/config.tests/unix/openssl/openssl.pri
++++ b/config.tests/unix/openssl/openssl.pri
+@@ -1,5 +1,5 @@
+ !cross_compile {
+- TRY_INCLUDEPATHS = /include /usr/include /usr/local/include $$QMAKE_INCDIR $$INCLUDEPATH
++ TRY_INCLUDEPATHS = $$QMAKE_INCDIR $$INCLUDEPATH
+ for(p, TRY_INCLUDEPATHS) {
+ pp = $$join(p, "", "", "/openssl")
+ exists($$pp):INCLUDEPATH *= $$p
+--
+1.5.0.7
+
diff --git a/packages/qt4/qtopia-core-4.3.3/allow-configure-plugins.patch b/packages/qt4/qtopia-core-4.3.3/allow-configure-plugins.patch
new file mode 100644
index 0000000000..601f2fc369
--- /dev/null
+++ b/packages/qt4/qtopia-core-4.3.3/allow-configure-plugins.patch
@@ -0,0 +1,62 @@
+Index: qtopia-core-opensource-src-4.3.3/configure
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/configure 2008-01-20 11:42:07.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/configure 2008-01-20 22:31:37.000000000 +0100
+@@ -639,10 +639,10 @@
+
+ CFG_SQL_AVAILABLE=
+ if [ -d "$relpath/src/plugins/sqldrivers" ]; then
+- for a in "$relpath/src/plugins/sqldrivers/"*; do
+- if [ -d "$a" ]; then
+- base_a=`basename $a`
+- CFG_SQL_AVAILABLE="${CFG_SQL_AVAILABLE} ${base_a}"
++ for a in `ls $relpath/src/plugins/sqldrivers/`; do
++ dir="$relpath/src/plugins/sqldrivers/$a"
++ if [ -d "$dir" ]; then
++ CFG_SQL_AVAILABLE="${CFG_SQL_AVAILABLE} ${a}"
+ eval "CFG_SQL_${base_a}=auto"
+ fi
+ done
+@@ -650,30 +650,30 @@
+
+ CFG_DECORATION_PLUGIN_AVAILABLE=
+ if [ -d "$relpath/src/plugins/decorations" ]; then
+- for a in "$relpath/src/plugins/decorations/"*; do
+- if [ -d "$a" ]; then
+- base_a=`basename $a`
+- CFG_DECORATION_PLUGIN_AVAILABLE="${CFG_DECORATION_PLUGIN_AVAILABLE} ${base_a}"
++ for a in `ls $relpath/src/plugins/decorations/`; do
++ dir="$relpath/src/plugins/decorations/$a"
++ if [ -d "$dir" ]; then
++ CFG_DECORATION_PLUGIN_AVAILABLE="${CFG_DECORATION_PLUGIN_AVAILABLE} ${a}"
+ fi
+ done
+ fi
+
+ CFG_MOUSE_PLUGIN_AVAILABLE=
+ if [ -d "$relpath/src/plugins/mousedrivers" ]; then
+- for a in "$relpath/src/plugins/mousedrivers/"*; do
+- if [ -d "$a" ]; then
+- base_a=`basename $a`
+- CFG_MOUSE_PLUGIN_AVAILABLE="${CFG_MOUSE_PLUGIN_AVAILABLE} ${base_a}"
++ for a in `ls $relpath/src/plugins/mousedrivers/`; do
++ dir="$relpath/src/plugins/mousedrivers/$a"
++ if [ -d "$dir" ]; then
++ CFG_MOUSE_PLUGIN_AVAILABLE="${CFG_MOUSE_PLUGIN_AVAILABLE} ${a}"
+ fi
+ done
+ fi
+
+ CFG_GFX_PLUGIN_AVAILABLE=
+ if [ -d "$relpath/src/plugins/gfxdrivers" ]; then
+- for a in "$relpath/src/plugins/gfxdrivers/"*; do
+- if [ -d "$a" ]; then
+- base_a=`basename $a`
+- CFG_GFX_PLUGIN_AVAILABLE="${CFG_GFX_PLUGIN_AVAILABLE} ${base_a}"
++ for a in `ls $relpath/src/plugins/gfxdrivers/`; do
++ dir="$relpath/src/plugins/gfxdrivers/$a"
++ if [ -d "$dir" ]; then
++ CFG_GFX_PLUGIN_AVAILABLE="${CFG_GFX_PLUGIN_AVAILABLE} ${a}"
+ fi
+ done
+ CFG_GFX_OFF="$CFG_GFX_AVAILABLE" # assume all off
diff --git a/packages/qt4/qtopia-core-4.3.3/qconfig-oe.h b/packages/qt4/qtopia-core-4.3.3/qconfig-oe.h
new file mode 100644
index 0000000000..f820c01da8
--- /dev/null
+++ b/packages/qt4/qtopia-core-4.3.3/qconfig-oe.h
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** This file may be used under the terms of the GNU General Public
+** License version 2.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of
+** this file. Please review the following information to ensure GNU
+** General Public Licensing requirements will be met:
+** http://trolltech.com/products/qt/licenses/licensing/opensource/
+**
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
+** or contact the sales department at sales@trolltech.com.
+**
+** In addition, as a special exception, Trolltech gives you certain
+** additional rights. These rights are described in the Trolltech GPL
+** Exception version 1.0, which can be found at
+** http://www.trolltech.com/products/qt/gplexception/ and in the file
+** GPL_EXCEPTION.txt in this package.
+**
+** In addition, as a special exception, Trolltech, as the sole copyright
+** holder for Qt Designer, grants users of the Qt/Eclipse Integration
+** plug-in the right for the Qt/Eclipse Integration to link to
+** functionality provided by Qt Designer and its related libraries.
+**
+** Trolltech reserves all rights not expressly granted herein.
+**
+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+**
+****************************************************************************/
+
+
+/*
+ Empty leaves all features enabled. See doc/html/emb-features.html for choices.
+
+ Note that disabling some features will produce a libqt that is not
+ compatible with other libqt builds. Such modifications are only
+ supported on Qtopia Core where reducing the library size is important
+ and where the application-suite is often a fixed set.
+*/
diff --git a/packages/qt4/qtopia-core.inc b/packages/qt4/qtopia-core.inc
new file mode 100644
index 0000000000..46bec73cd8
--- /dev/null
+++ b/packages/qt4/qtopia-core.inc
@@ -0,0 +1,43 @@
+SUMMARY = "Qt is a versatile cross-platform application framework -- this is the QtopiaCore/Embedded version."
+SECTION = "libs"
+LICENSE = "GPL"
+PRIORITY = "optional"
+HOMEPAGE = "http://www.trolltech.com"
+DEPENDS += "tslib"
+PR = "r1"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.tar.gz \
+ file://qconfig-oe.h \
+ file://0001-cross-compile.patch;patch=1 \
+ file://0003-no-tools.patch;patch=1 \
+ file://0004-no-qmake.patch;patch=1 \
+ file://0005-fix-mkspecs.patch;patch=1 \
+ file://build-tools.patch;patch=1"
+S = "${WORKDIR}/qtopia-core-opensource-src-${PV}"
+
+
+QT_CONFIG_FLAGS += " \
+ -nomake demos -nomake examples -nomake tools -qtlibinfix E\
+ -embedded ${QT_ARCH} \
+ -qt-decoration-styled -plugin-decoration-default -plugin-decoration-windows \
+ -plugin-gfx-transformed -plugin-gfx-qvfb -plugin-gfx-vnc\
+ -plugin-mouse-tslib -qt-mouse-pc -qt-mouse-qvfb\
+ -qt-kbd-tty -qt-kbd-usb -qt-kbd-qvfb\
+ ${QT_QCONFIG} \
+ "
+
+do_configure_prepend() {
+ cp ${WORKDIR}/qconfig-oe.h ${S}/src/corelib/global
+}
+
+QT_QCONFIG = ""
+QT_BASE_NAME = "qtopiacore"
+QT_BASE_LIB = "libqtopiacore"
+QT_DIR_NAME = "qtopia"
+QT_LIBINFIX="E"
+require qt_depends.inc
+require qt_configuration.inc
+require qt_packaging.inc
+require qt_staging.inc
+
+inherit qtopia4core
diff --git a/packages/qt4/qtopia-core/.mtn2git_empty b/packages/qt4/qtopia-core/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qt4/qtopia-core/.mtn2git_empty
diff --git a/packages/qt4/qtopia-core/0004-no-qmake.patch b/packages/qt4/qtopia-core/0004-no-qmake.patch
new file mode 100644
index 0000000000..28f8d3ad9d
--- /dev/null
+++ b/packages/qt4/qtopia-core/0004-no-qmake.patch
@@ -0,0 +1,25 @@
+From f5a73ce944240de9013cc23288c115e8213add5e Mon Sep 17 00:00:00 2001
+From: Michael Krelin <hacker@klever.net>
+Date: Sat, 2 Jun 2007 16:06:59 +0200
+Subject: [PATCH] no qmake
+
+---
+ configure | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/configure b/configure
+index b3c2a52..1901e57 100755
+--- a/configure
++++ b/configure
+@@ -3517,7 +3517,7 @@ END {
+ }
+
+ # build qmake
+-if true; then ###[ '!' -f "$outpath/bin/qmake" ];
++if false; then ###[ '!' -f "$outpath/bin/qmake" ];
+ echo "Creating qmake. Please wait..."
+
+ OLD_QCONFIG_H=
+--
+1.5.0.7
+
diff --git a/packages/qt4/qtopia-core/build-tools.patch b/packages/qt4/qtopia-core/build-tools.patch
new file mode 100644
index 0000000000..54ad666374
--- /dev/null
+++ b/packages/qt4/qtopia-core/build-tools.patch
@@ -0,0 +1,28 @@
+Do not disable tools, examples and demos for the QWS build. Use brute-force
+to do this.
+
+Index: qtopia-core-opensource-src-4.3.3/configure
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/configure 2007-12-27 16:30:36.000000000 +0100
++++ qtopia-core-opensource-src-4.3.3/configure 2007-12-27 16:30:52.000000000 +0100
+@@ -2265,13 +2265,13 @@
+ CFG_BUILD_PARTS="$QT_DEFAULT_BUILD_PARTS"
+
+ # don't build tools by default when cross-compiling
+- if [ "$PLATFORM" != "$XPLATFORM" ]; then
+- CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed "s, tools,,g"`
+- fi
+-fi
+-for nobuild in $CFG_NOBUILD_PARTS; do
+- CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed "s, $nobuild,,g"`
+-done
++ #if [ "$PLATFORM" != "$XPLATFORM" ]; then
++ # CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed "s, tools,,g"`
++ #fi
++fi
++#for nobuild in $CFG_NOBUILD_PARTS; do
++# CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed "s, $nobuild,,g"`
++#done
+ if echo $CFG_BUILD_PARTS | grep -v libs >/dev/null 2>&1; then
+ # echo
+ # echo "WARNING: libs is a required part of the build."
diff --git a/packages/qte/qtopia-core/linux-oe-qmake.conf b/packages/qt4/qtopia-core/linux-oe-qmake.conf
index fc5ac6dc5c..fc5ac6dc5c 100644
--- a/packages/qte/qtopia-core/linux-oe-qmake.conf
+++ b/packages/qt4/qtopia-core/linux-oe-qmake.conf
diff --git a/packages/qt4/qtopia-core_4.3.3.bb b/packages/qt4/qtopia-core_4.3.3.bb
new file mode 100644
index 0000000000..40ec78ef04
--- /dev/null
+++ b/packages/qt4/qtopia-core_4.3.3.bb
@@ -0,0 +1,6 @@
+require qtopia-core.inc
+SRC_URI += " \
+ file://0006-freetype-host-includes.patch;patch=1 \
+ file://0007-openssl-host-includes.patch;patch=1 \
+ file://0008-backport-qt-lib-infix.patch;patch=1 \
+ file://allow-configure-plugins.patch;patch=1 "
diff --git a/packages/qte-fonts-common/qte-fonts-common/update-qtfontdir b/packages/qte-fonts-common/qte-fonts-common/update-qtfontdir
deleted file mode 100755
index 857dc6c0d5..0000000000
--- a/packages/qte-fonts-common/qte-fonts-common/update-qtfontdir
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/sh
-
-usage()
-{
- echo "usage: $0 [font directory, defaults to \$QTDIR/lib/fonts]"
- exit 1
-}
-
-setVar()
-{
- eval "$1='$2'"
-}
-
-getVar()
-{
- eval "echo \$$1"
-}
-
-handleQPF()
-{
- base=`basename $1`
- family=`echo $base|cut -d_ -f1`
- pt=`echo $base|cut -d_ -f2`
- weight=`echo $base|cut -d_ -f3|sed -e 's,i$,,'`
- if (echo $base|cut -d_ -f3|grep -q 'i$'); then
- italic="y"
- else
- italic="n"
- fi
- echo "$family $base.qpf QPF $italic $weight $pt u"
-}
-
-if [ "$1" = "-f" ]; then
- FORCE=1
- shift
-else
- FORCE=0
-fi
-
-if [ -z "$1" ]; then
- if [ -n "$QTDIR" ]; then
- fontdir=$QTDIR/lib/fonts
- else
- fontdir=/opt/QtPalmtop/lib/fonts
- fi
-else
- fontdir=$1
-fi
-
-if ! [ -d $fontdir ]; then
- echo Error: $fontdir not a directory
- exit 1
-fi
-
-if [ -e $fontdir/fontdir ]; then
- if find $fontdir -newer $fontdir/fontdir | grep -q "\(qpf\|ttf\)"; then
- #echo "fontdir needs updating..."
- :
- elif [ "$FORCE" = "0" ]; then
- #echo "fontdir already up to date - exiting"
- exit 0
- fi
- cat $fontdir/fontdir | grep -v '\.qpf' > $fontdir/fontdir.new
-fi
-
-(
- for file in `ls $fontdir/*.qpf 2>/dev/null |sed -e's,\.qpf$,,; s,_t[^_]*$,,;'|sort -u`; do
- handleQPF $file
- done
-) >> $fontdir/fontdir.new
-
-mv $fontdir/fontdir.new $fontdir/fontdir
-
-exit 0
diff --git a/packages/qte-fonts-common/qte-fonts-common_3.3.5.bb b/packages/qte-fonts-common/qte-fonts-common_3.3.5.bb
deleted file mode 100644
index 479ed55bb8..0000000000
--- a/packages/qte-fonts-common/qte-fonts-common_3.3.5.bb
+++ /dev/null
@@ -1,228 +0,0 @@
-DESCRIPTION= "Tools to update the Qt fontdir"
-SECTION = "opie/base"
-LICENSE = "GPL QPL"
-PACKAGE_ARCH = "all"
-HOMEPAGE = "http://www.trolltech.com"
-PR = "r3"
-
-SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-free-${PV}.tar.bz2"
-SRC_URI += "file://update-qtfontdir"
-S = "${WORKDIR}/qt-embedded-free-${PV}"
-
-do_compile() {
- :
-}
-
-do_install() {
- mkdir -p ${D}${sbindir}
- install -m 755 ${WORKDIR}/update-qtfontdir ${D}${sbindir}
- mkdir -p ${D}${palmtopdir}/lib/fonts
- cp -pPR lib/fonts/* ${D}${palmtopdir}/lib/fonts
- # Delete all other font formats, Qt/E would have a dead slow
- # application start time if it had to use any other font format
- # as *.qpf ...
- find ${D}${palmtopdir}/lib/fonts \
- -name "*.bdf" \
- -o -name "*.ttf" \
- -o -name "*.pfa" \
- -o -name "*.pfb" | xargs rm
-}
-
-PACKAGES = "qte-fonts-common"
-FILES_${PN} = "${sbindir}"
-
-
-PACKAGES += "qte-font-fixed"
-PROVIDES += "qte-font-fixed"
-FILES_qte-font-fixed = "${palmtopdir}/lib/fonts/fixed*"
-RDEPENDS_qte-font-fixed = "qte-fonts-common"
-pkg_postinst_qte-font-fixed() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir
-}
-pkg_postrm_qte-font-fixed() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir -f
-}
-
-PACKAGES += "qte-font-helvetica-small"
-PROVIDES += "qte-font-helvetica-small"
-FILES_qte-font-helvetica-small = "${palmtopdir}/lib/fonts/helvetica_80*.qpf \
- ${palmtopdir}/lib/fonts/helvetica_100*.qpf ${palmtopdir}/lib/fonts/helvetica_120*.qpf"
-RDEPENDS_qte-font-helvetica-small = "qte-fonts-common"
-pkg_postinst_qte-font-helvetica-small() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir
-}
-pkg_postrm_qte-font-helvetica-small() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir -f
-}
-
-PACKAGES += "qte-font-helvetica-large"
-PROVIDES += "qte-font-helvetica-large"
-FILES_qte-font-helvetica-large = "${palmtopdir}/lib/fonts/helvetica_140*.qpf \
- ${palmtopdir}/lib/fonts/helvetica_180*.qpf ${palmtopdir}/lib/fonts/helvetica_240*.qpf"
-RDEPENDS_qte-font-helvetica-large = "qte-fonts-common"
-pkg_postinst_qte-font-helvetica-large() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir
-}
-pkg_postrm_qte-font-helvetica-large() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir -f
-}
-
-PACKAGES += "qte-font-smoothtimes"
-PROVIDES += "qte-font-smoothtimes"
-FILES_qte-font-smoothtimes = "${palmtopdir}/lib/fonts/smoothtimes*"
-RDEPENDS_qte-font-smoothtimes = "qte-fonts-common"
-pkg_postinst_qte-font-smoothtimes() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir
-}
-pkg_postrm_qte-font-smoothtimes() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir -f
-}
-
-PACKAGES += "qte-font-smallsmooth"
-PROVIDES += "qte-font-smallsmooth"
-FILES_qte-font-smallsmooth = "${palmtopdir}/lib/fonts/smallsmooth*"
-RDEPENDS_qte-smallsmooth = "qte-fonts-common"
-pkg_postinst_qte-font-smallsmooth() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir
-}
-pkg_postrm_qte-font-smallsmooth() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir -f
-}
-
-PACKAGES += "qte-font-unicode"
-PROVIDES += "qte-font-unicode"
-FILES_qte-font-unicode = "${palmtopdir}/lib/fonts/unifont*.qpf"
-RDEPENDS_qte-font-unicode = "qte-fonts-common"
-pkg_postinst_qte-font-unicode() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir
-}
-pkg_postrm_qte-font-unicode() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir -f
-}
-
-PACKAGES += "qte-font-micro"
-PROVIDES += "qte-font-micro"
-FILES_qte-font-micro = "${palmtopdir}/lib/fonts/micro*.qpf"
-#RDEPENDS_qte-font-micro = "qte-fonts-common"
-pkg_postinst_qte-font-micro() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir
-}
-pkg_postrm_qte-font-micro() {
-#!/bin/sh
-if [ -n "$D" ]; then exit 1; fi
-set -e
-. /etc/profile
-${sbindir}/update-qtfontdir -f
-}
-
-# Not in the QtE/3 tar file:
-#PACKAGES += "qte-font-lcd"
-#PROVIDES += "qte-font-lcd"
-#RDEPENDS_qte-font-lcd = "qte-fonts-common"
-#FILES_qte-font-lcd = "${palmtopdir}/lib/fonts/lcd*"
-#pkg_postinst_qte-font-lcd () {
-##!/bin/sh
-#if [ -n "$D" ]; then exit 1; fi
-#set -e
-#. /etc/profile
-#${sbindir}/update-qtfontdir
-#}
-#pkg_postrm_qte-font-lcd() {
-##!/bin/sh
-#if [ -n "$D" ]; then exit 1; fi
-#set -e
-#. /etc/profile
-#${sbindir}/update-qtfontdir -f
-#}
-
-# Not in the QtE/3 tar file:
-#PACKAGES += "qte-font-japanese"
-#PROVIDES += "qte-font-japanese"
-#FILES_qte-font-japanese = "${palmtopdir}/lib/fonts/japanese*"
-#RDEPENDS_qte-font-japanese = "qte-fonts-common"
-#pkg_postinst_qte-font-japanese() {
-##!/bin/sh
-#if [ -n "$D" ]; then exit 1; fi
-#set -e
-#. /etc/profile
-#${sbindir}/update-qtfontdir
-#}
-#pkg_postrm_qte-font-japanese() {
-##!/bin/sh
-#if [ -n "$D" ]; then exit 1; fi
-#set -e
-#. /etc/profile
-#${sbindir}/update-qtfontdir -f
-#}
-
-# Not in the QtE/3 tar file:
-#PACKAGES += "qte-font-courier"
-#PROVIDES += "qte-font-courier"
-#FILES_qte-font-courier = "${palmtopdir}/lib/fonts/cour*"
-#RDEPENDS_qte-font-courier = "qte-fonts-common"
-#pkg_postinst_qte-font-courier() {
-##!/bin/sh
-#if [ -n "$D" ]; then exit 1; fi
-#set -e
-#. /etc/profile
-#${sbindir}/update-qtfontdir
-#}
-#pkg_postrm_qte-font-courier() {
-##!/bin/sh
-#if [ -n "$D" ]; then exit 1; fi
-#set -e
-#. /etc/profile
-#${sbindir}/update-qtfontdir -f
-#}
diff --git a/packages/qte/qte-common_2.3.10.inc b/packages/qte/qte-common_2.3.10.inc
index 6517eb058d..5f9c01ba80 100644
--- a/packages/qte/qte-common_2.3.10.inc
+++ b/packages/qte/qte-common_2.3.10.inc
@@ -152,4 +152,4 @@ do_install() {
FILES_${PN} = "${libdir}/lib${PN}.so.*"
FILES_${PN}-dev = "${includedir}/* ${libdir}/lib${PN}.so"
-FILES_${PN}-dbg = "${libdir}/.debug/"
+FILES_${PN}-dbg += "${libdir}/.debug/"
diff --git a/packages/qte/qtopia-core_4.2.0.bb b/packages/qte/qtopia-core_4.2.0.bb
deleted file mode 100644
index ab07ecf35d..0000000000
--- a/packages/qte/qtopia-core_4.2.0.bb
+++ /dev/null
@@ -1,218 +0,0 @@
-DESCRIPTION = "Qtopia Core (aka: Qt/Embedded)"
-SECTION = "libs"
-LICENSE = "GPL"
-PRIORITY = "optional"
-HOMEPAGE = "http://www.trolltech.com"
-DEPENDS = "glib-2.0 freetype dbus-glib tslib"
-
-PR = "r2"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.tar.gz \
- file://linux-oe-qmake.conf"
-
-S = "${WORKDIR}/qtopia-core-opensource-src-${PV}"
-
-inherit pkgconfig
-
-# I'm not sure about the globals QTDIR and QTOPIADIR, or if they're even
-# needed. On the same issue, I'm not sure what the best place for all the
-# Qtopia Core related files is. For now, I've just put the libraries in
-# ${libdir}, the includes in ${includedir} etc. Other possibilities are
-# to sandbox everything (e.g., in /usr/local/Trolltech or /opt/Qtopia oslt),
-# or to put libraries in /usr/lib/qtopia (or /usr/lib/qt4) etc. As said,
-# I'm fine with this, but I'm also fine with another solution.
-
-# set QTDIR and QTOPIADIR globally (change QTOPIA dir to QTDIR?)
-# This should be the default for other packages:
-# export QTDIR = "${STAGING_DIR}/${HOST_SYS}/qt4"
-# export QTOPIADIR = "${STAGING_DIR}/${HOST_SYS}/qtopia"
-export QTDIR = "${S}"
-export QTOPIADIR = "${S}"
-
-# Qmake gets confused by environment variables, as it builds both HOST
-# and TARGET objects. The correct compiler settings come from the mkspec
-# and are set with the OE_QMAKE_ variables
-PARALLEL_MAKE = ""
-EXTRA_OEMAKE = " MAKEFLAGS= "
-
-# This stuff could also be done by inheriting qmake, but I didn't want to
-# bother with the qmake separation from the Qtopia configure. This separation
-# is probably nothing more than a patch on the configure and setting some
-# environment variables to use our own qmake/moc/uic, but that's something
-# to figure out later.
-export OE_QMAKE_CC="${CC}"
-export OE_QMAKE_CFLAGS="${CFLAGS}"
-export OE_QMAKE_CXX="${CXX}"
-export OE_QMAKE_CXXFLAGS="-fno-exceptions ${CXXFLAGS}"
-export OE_QMAKE_LDFLAGS="${LDFLAGS}"
-export OE_QMAKE_LINK="${CXX}"
-export OE_QMAKE_AR="${AR}"
-export OE_QMAKE_RANLIB="${RANLIB}"
-export OE_QMAKE_STRIP="echo"
-export OE_QMAKE_RPATH="-Wl,-rpath-link,"
-export OE_QMAKE_INCDIR_QT="${QTDIR}/include"
-export OE_QMAKE_LIBDIR_QT="${QTDIR}/lib"
-export OE_QMAKE_INCDIR_QTOPIA="${QTOPIADIR}/include"
-export OE_QMAKE_LIBDIR_QTOPIA="${QTOPIADIR}/lib"
-
-require qte-functions.inc
-QT_ARCH := "${@qte_arch(d)}"
-
-# FIXME use info.bbclass once it has been commited
-QT_ENDIAN = "-little-endian"
-
-# We don't build the examples and demos atm. They're quite big and not used
-# frequently, only for testing maybe. Feel free to change and to package
-# them separately.
-QT_CONFIG_FLAGS = "-release \
- -no-cups -no-accessibility \
- -nomake demos -nomake examples -nomake tools \
- -qt-mouse-tslib"
-
-do_configure() {
- # Install the OE build templates (something which might be done
- # by inheriting qmake)
- for template in linux-oe-g++ linux-uclibc-oe-g++ linux-gnueabi-oe-g++
- do
- install -d ${S}/mkspecs/$template
- install -m 0644 ${WORKDIR}/linux-oe-qmake.conf \
- ${S}/mkspecs/$template/qmake.conf
- ln -sf ../linux-g++/qplatformdefs.h \
- ${S}/mkspecs/$template/qplatformdefs.h
- done
-
- # The Qmake Makefile generation doesn't like these environment
- # variables, as they mess up the HOST tools builds
- unset CC
- unset CXX
- unset CFLAGS
- unset CXXFLAGS
- unset LDFLAGS
-
- # For rationale behind the installation locations, see remark above
- echo yes | ./configure -v \
- -prefix ${prefix} \
- -bindir ${bindir} \
- -libdir ${libdir} \
- -docdir ${docdir}/qtopia \
- -headerdir ${includedir} \
- -plugindir ${datadir}/qtopia/plugins \
- -datadir ${datadir} \
- -translationdir ${datadir}/qtopia/translations \
- -sysconfdir ${sysconfdir} \
- -examplesdir ${bindir}/qtopia/examples \
- -demosdir ${bindir}/qtopia/demos \
- -embedded ${QT_ARCH} ${QT_ENDIAN} -fast \
- -xplatform linux-oe-g++ \
- ${QT_CONFIG_FLAGS} \
- -L${STAGING_LIBDIR} -I${STAGING_INCDIR}
-}
-
-do_install() {
- oe_runmake install INSTALL_ROOT=${D}
-
- # These are host binaries, we should only use them in staging
- rm -rf ${D}/${bindir}
- rm -rf ${D}/${datadir}/mkspecs
-
- touch ${D}/${libdir}/fonts/fontdir
-
- #TT is still new to pkgconfig, so fix it up
- install -d ${D}${libdir}/pkgconfig
- mv ${D}/${libdir}/*.pc ${D}${libdir}/pkgconfig/
-}
-
-# We might want to package all the libraries separately, so you can really
-# fine-tune what to install. This is e.g. done in qt4-x11-free_4.1.2.bb.
-# What should these packages be called? I'm tempted to call them the same
-# as in qt4 version, as the API is supposed to be compatible, e.g.
-# libqtcore4 and libqtgui4. This will however conflict if you have QT and
-# Qtopia, but this is something you don't want anyway, I guess.
-# Another solution is making virtual/libqtfoo4, and DEPENDing on that one
-# and let both the PACKAGES in QT and Qtopia PROVIDE these. The packages
-# themselves could then be called libqtopiafoo4.
-# I'll postpone this discussion by not making separate Qtopia packages.
-
-# Also, I don't package the plugins and translations atm, I don't use them
-# and I don't feel like thinking about a sensible separation.
-
-PACKAGES =+ " libqtcore libqtcore-dev libqtcore-dbg \
- libqtxml libqtxml-dev libqtxml-dbg \
- libqtgui libqtgui-dev libqtgui-dbg \
- libqtsql libqtsql-dev libqtsql-dbg \
- libqtnetwork libqtnetwork-dev libqtnetwork-dbg \
- libqtsvg libqtsvg-dev libqtsvg-dbg \
- libqt3support libqt3support-dev libqt3support-dbg \
- qtopia-core-plugins qtopia-core-plugins-dbg\
- "
-
-PACKAGES += " ${PN}-fonts "
-
-# The default included fonts are around 75MB and consist of a number of
-# FreeType-renderable fonts as well as QPF (Qtopia Prerendered Fonts).
-# As FreeType is generally slow on embedded platforms, and 75MB is
-# quite huge, we downsize the fonts dir in the do_install. I've decided
-# to include only the QPF (Helvetica and Fixed), amounting to 500KB. This
-# also results in tremendously faster application startup time.
-FILES_libqtcore += " ${libdir}/fonts/helvetic* ${libdir}/fonts/fixed* ${D}/${libdir}/fonts/fontdir"
-FILES_${PN}-fonts = "${libdir}/fonts"
-
-FILES_qtopia-core-plugins += "${datadir}/qtopia/plugins/*/*.so"
-FILES_qtopia-core-plugins-dbg += "${datadir}/qtopia/plugins/*/.debug/*.so"
-
-FILES_libqtcore += "${libdir}/libQtCore.so.*"
-FILES_libqtxml += "${libdir}/libQtXml.so.*"
-FILES_libqtgui += "${libdir}/libQtGui.so.*"
-FILES_libqtsql += "${libdir}/libQtSql.so.*"
-FILES_libqtnetwork += "${libdir}/libQtNetwork.so.*"
-FILES_libqtsvg += "${libdir}/libQtSvg.so.*"
-FILES_libqt3support += "${libdir}/libQt3Support.so.*"
-
-FILES_libqtcore-dev += "${libdir}/*QtCore.*"
-FILES_libqtxml-dev += "${libdir}/*QtXml.*"
-FILES_libqtgui-dev += "${libdir}/*QtGui.*"
-FILES_libqtsql-dev += "${libdir}/*QtSql.*"
-FILES_libqtnetwork-dev += "${libdir}/*QtNetwork.*"
-FILES_libqtsvg-dev += "${libdir}/*QtSvg.*"
-FILES_libqt3support-dev += "${libdir}/*Qt3Support.*"
-
-FILES_libqtcore-dbg += "${libdir}/.debug/libQtCore*"
-FILES_libqtxml-dbg += "${libdir}/.debug/libQtXml*"
-FILES_libqtgui-dbg += "${libdir}/.debug/libQtGui*"
-FILES_libqtsql-dbg += "${libdir}/.debug/libQtSql*"
-FILES_libqtnetwork-dbg += "${libdir}/.debug/libQtNetwork*"
-FILES_libqtsvg-dbg += "${libdir}/.debug/libQtSvg*"
-FILES_libqt3support-dbg += "${libdir}/.debug/libQt3Support*"
-
-
-python populate_packages_prepend() {
- translationdir = bb.data.expand('${datadir}/qtopia/translations/', d)
- do_split_packages(d, translationdir, '^qt_(.*)\.qm$', 'qtopia-translation-%s', 'Qtopia translation for %s', extra_depends='' )
-}
-
-
-
-STAGE_TEMP = "${WORKDIR}/temp-staging"
-do_stage() {
- rm -rf ${STAGE_TEMP}
- mkdir -p ${STAGE_TEMP}
- oe_runmake install INSTALL_ROOT=${STAGE_TEMP}
-
- cp -af ${STAGE_TEMP}/$includedir/* ${STAGING_INCDIR}
-
- for i in ${STAGE_TEMP}/${libdir}/*.la
- do
- oe_libinstall -C ${STAGE_TEMP}/${libdir} \
- -so $(basename $i .la) ${STAGING_LIBDIR}
- done
-
- # Install qmake/moc/uic/rcc in staging (is this needed?)
- install -m 0755 ${STAGE_TEMP}/${bindir}/rcc ${STAGING_BINDIR}
- install -m 0755 ${STAGE_TEMP}/${bindir}/moc ${STAGING_BINDIR}
- install -m 0755 ${STAGE_TEMP}/${bindir}/uic ${STAGING_BINDIR}
- install -m 0755 ${STAGE_TEMP}/${bindir}/qmake ${STAGING_BINDIR}
- # what about mkspecs?
-
- rm -rf ${STAGE_TEMP}
-}
-
diff --git a/packages/qte/qtopia-core_4.3.2.bb b/packages/qte/qtopia-core_4.3.2.bb
deleted file mode 100644
index c486ba164f..0000000000
--- a/packages/qte/qtopia-core_4.3.2.bb
+++ /dev/null
@@ -1,222 +0,0 @@
-SUMMARY = "QtopiaCore"
-SECTION = "libs"
-LICENSE = "GPL"
-PRIORITY = "optional"
-HOMEPAGE = "http://www.trolltech.com"
-DEPENDS = "freetype tslib"
-
-PR = "r0"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.tar.gz \
- file://linux-oe-qmake.conf"
-
-S = "${WORKDIR}/qtopia-core-opensource-src-${PV}"
-
-inherit pkgconfig
-
-# Qmake gets confused by environment variables, as it builds both HOST
-# and TARGET objects. The correct compiler settings come from the mkspec
-# and are set with the OE_QMAKE_ variables
-PARALLEL_MAKE = ""
-EXTRA_OEMAKE = " MAKEFLAGS= "
-
-# This stuff could also be done by inheriting qmake, but I didn't want to
-# bother with the qmake separation from the Qtopia configure. This separation
-# is probably nothing more than a patch on the configure and setting some
-# environment variables to use our own qmake/moc/uic, but that's something
-# to figure out later.
-export OE_QMAKE_CC="${CC}"
-export OE_QMAKE_CFLAGS="${CFLAGS}"
-export OE_QMAKE_CXX="${CXX}"
-export OE_QMAKE_CXXFLAGS="-fno-exceptions ${CXXFLAGS}"
-export OE_QMAKE_LDFLAGS="${LDFLAGS}"
-export OE_QMAKE_LINK="${CXX}"
-export OE_QMAKE_AR="${AR}"
-export OE_QMAKE_RANLIB="${RANLIB}"
-export OE_QMAKE_STRIP="echo"
-export OE_QMAKE_RPATH="-Wl,-rpath-link,"
-export OE_QMAKE_INCDIR_QT="${QTDIR}/include"
-export OE_QMAKE_LIBDIR_QT="${QTDIR}/lib"
-export OE_QMAKE_INCDIR_QTOPIA="${QTOPIADIR}/include"
-export OE_QMAKE_LIBDIR_QTOPIA="${QTOPIADIR}/lib"
-
-require qte-functions.inc
-QT_ARCH := "${@qte_arch(d)}"
-
-# FIXME use info.bbclass once it has been commited
-QT_ENDIAN = "-little-endian"
-
-# We don't build the examples and demos atm. They're quite big and not used
-# frequently, only for testing maybe. Feel free to change and to package
-# them separately.
-QT_CONFIG_FLAGS = "-release \
- -no-cups -no-accessibility \
- -nomake demos -nomake examples -nomake tools -reduce-relocations \
- -qt-mouse-tslib -qt-gfx-transformed -embedded ${QT_ARCH}"
-
-do_configure() {
- # Hack to honor our compiler flags
- sed -i s/-O2//g ${S}/mkspecs/*/qmake.conf
- sed -i s/-O2//g ${S}/mkspecs/*/*/qmake.conf
-
-
- # Install the OE build templates (something which might be done
- # by inheriting qmake)
- for template in linux-oe-g++ linux-uclibc-oe-g++ linux-gnueabi-oe-g++
- do
- install -d ${S}/mkspecs/$template
- install -m 0644 ${WORKDIR}/linux-oe-qmake.conf ${S}/mkspecs/$template/qmake.conf
- ln -sf ../linux-g++/qplatformdefs.h ${S}/mkspecs/$template/qplatformdefs.h
- done
-
- # The Qmake Makefile generation doesn't like these environment
- # variables, as they mess up the HOST tools builds
- unset CC
- unset CXX
- unset CFLAGS
- unset CXXFLAGS
- unset LDFLAGS
-
- # For rationale behind the installation locations, see remark above
- echo yes | ./configure -v \
- -prefix ${prefix} \
- -bindir ${bindir} \
- -libdir ${libdir} \
- -docdir ${docdir}/qtopia \
- -headerdir ${includedir} \
- -plugindir ${datadir}/qtopia/plugins \
- -datadir ${datadir} \
- -translationdir ${datadir}/qtopia/translations \
- -sysconfdir ${sysconfdir} \
- -examplesdir ${bindir}/qtopia/examples \
- -demosdir ${bindir}/qtopia/demos \
- -embedded ${QT_ARCH} ${QT_ENDIAN} -fast \
- -xplatform linux-oe-g++ \
- ${QT_CONFIG_FLAGS} \
- -L${STAGING_LIBDIR} -I${STAGING_INCDIR}
-}
-
-#
-# Fixup some pkgconfig files
-# moc_location=/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/work/arm-oabi-angstrom-linux/qtopia-core-4.3.0-r2/qtopia-core-opensource-src-4.3.0/bin/moc
-# uic_location=/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/work/arm-oabi-angstrom-linux/qtopia-core-4.3.0-r2/qtopia-core-opensource-src-4.3.0/bin/uic
-#
-# Libs: -L${libdir} -lQtNetwork -L/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/staging/arm-angstrom-linux/lib -L/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/work/arm-oabi-angstrom-linux/qtopia-core-4.3.0-r2/qtopia-core-opensource-src-4.3.0/lib $(LIBS_EXTRA) -lQtCore -L/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/staging/arm-angstrom-linux/lib -L/home/zecke/gmit/dela_build/git/openembedded-gmit.zecke/build/oetmp/work/arm-oabi-angstrom-linux/qtopia-core-4.3.0-r2/qtopia-core-opensource-src-4.3.0/lib -lm -lrt -lpthread -ldl
-#
-do_compile_append() {
- cd ${S}/lib/pkgconfig
- sed -i s#"-L${S}/lib"##g *.pc
- sed -i s#"moc_location=${S}/bin/moc"#moc_location=${STAGING_BINDIR}/moc4# *.pc
- sed -i s#"uic_location=${S}/bin/uic"#uic_location=${STAGING_BINDIR}/uic4# *.pc
-}
-
-do_stage_append() {
- echo "Fixing up Qt"
- cd ${STAGING_LIBDIR}/pkgconfig
- sed -i s#"-L${S}/lib"##g Qt*.pc
- sed -i s#"moc_location=${S}/bin/moc"#moc_location=${STAGING_BINDIR}/moc4# Qt*.pc
- sed -i s#"uic_location=${S}/bin/uic"#uic_location=${STAGING_BINDIR}/uic4# Qt*.pc
-}
-
-do_install() {
- oe_runmake install INSTALL_ROOT=${D}
-
- # These are host binaries, we should only use them in staging
- rm -rf ${D}/${bindir}
- rm -rf ${D}/${datadir}/mkspecs
-
- touch ${D}/${libdir}/fonts/fontdir
-}
-
-# We might want to package all the libraries separately, so you can really
-# fine-tune what to install. This is e.g. done in qt4-x11-free_4.1.2.bb.
-# What should these packages be called? I'm tempted to call them the same
-# as in qt4 version, as the API is supposed to be compatible, e.g.
-# libqtcore4 and libqtgui4. This will however conflict if you have QT and
-# Qtopia, but this is something you don't want anyway, I guess.
-# Another solution is making virtual/libqtfoo4, and DEPENDing on that one
-# and let both the PACKAGES in QT and Qtopia PROVIDE these. The packages
-# themselves could then be called libqtopiafoo4.
-# I'll postpone this discussion by not making separate Qtopia packages.
-
-# Also, I don't package the plugins and translations atm, I don't use them
-# and I don't feel like thinking about a sensible separation.
-
-PACKAGES =+ " libqtcore libqtcore-dev libqtcore-dbg \
- libqtxml libqtxml-dev libqtxml-dbg \
- libqtgui libqtgui-dev libqtgui-dbg \
- libqtsql libqtsql-dev libqtsql-dbg \
- libqtnetwork libqtnetwork-dev libqtnetwork-dbg \
- libqtsvg libqtsvg-dev libqtsvg-dbg \
- libqt3support libqt3support-dev libqt3support-dbg \
- qtopia-core-plugins qtopia-core-plugins-dbg \
- libqtscript libqtscript-dev libqtscript-dbg \
- "
-
-PACKAGES += " ${PN}-fonts "
-
-# The default included fonts are around 75MB and consist of a number of
-# FreeType-renderable fonts as well as QPF (Qtopia Prerendered Fonts).
-# As FreeType is generally slow on embedded platforms, and 75MB is
-# quite huge, we downsize the fonts dir in the do_install. I've decided
-# to include only the QPF (Helvetica and Fixed), amounting to 500KB. This
-# also results in tremendously faster application startup time.
-FILES_libqtcore += " ${libdir}/fonts/helvetic* ${libdir}/fonts/fixed* ${D}/${libdir}/fonts/fontdir"
-FILES_${PN}-fonts = "${libdir}/fonts"
-
-FILES_qtopia-core-plugins += "${datadir}/qtopia/plugins/*/*.so"
-FILES_qtopia-core-plugins-dbg += "${datadir}/qtopia/plugins/*/.debug/*.so"
-
-FILES_libqtcore += "${libdir}/libQtCore.so.*"
-FILES_libqtxml += "${libdir}/libQtXml.so.*"
-FILES_libqtgui += "${libdir}/libQtGui.so.*"
-FILES_libqtsql += "${libdir}/libQtSql.so.*"
-FILES_libqtnetwork += "${libdir}/libQtNetwork.so.*"
-FILES_libqtsvg += "${libdir}/libQtSvg.so.*"
-FILES_libqt3support += "${libdir}/libQt3Support.so.*"
-FILES_libqtscript += "${libdir}/libQtScript.so.*"
-
-FILES_libqtcore-dev += "${libdir}/*QtCore.*"
-FILES_libqtxml-dev += "${libdir}/*QtXml.*"
-FILES_libqtgui-dev += "${libdir}/*QtGui.*"
-FILES_libqtsql-dev += "${libdir}/*QtSql.*"
-FILES_libqtnetwork-dev += "${libdir}/*QtNetwork.*"
-FILES_libqtsvg-dev += "${libdir}/*QtSvg.*"
-FILES_libqt3support-dev += "${libdir}/*Qt3Support.*"
-FILES_libqtscript-dev += "${libdir}/*QtScript.*"
-
-FILES_libqtcore-dbg += "${libdir}/.debug/libQtCore*"
-FILES_libqtxml-dbg += "${libdir}/.debug/libQtXml*"
-FILES_libqtgui-dbg += "${libdir}/.debug/libQtGui*"
-FILES_libqtsql-dbg += "${libdir}/.debug/libQtSql*"
-FILES_libqtnetwork-dbg += "${libdir}/.debug/libQtNetwork*"
-FILES_libqtsvg-dbg += "${libdir}/.debug/libQtSvg*"
-FILES_libqt3support-dbg += "${libdir}/.debug/libQt3Support*"
-FILES_libqtscript-dbg += "${libdir}/.debug/libQtScript*"
-
-
-python populate_packages_prepend() {
- translationdir = bb.data.expand('${datadir}/qtopia/translations/', d)
- do_split_packages(d, translationdir, '^qt_(.*)\.qm$', 'qtopia-translation-%s', 'Qtopia translation for %s', extra_depends='' )
-}
-
-
-
-STAGE_TEMP = "${WORKDIR}/temp-staging"
-do_stage() {
- rm -rf ${STAGE_TEMP}
- mkdir -p ${STAGE_TEMP}
- oe_runmake install INSTALL_ROOT=${STAGE_TEMP}
-
- install -d ${STAGING_INCDIR}/qtopiacore4
- install -d ${STAGING_LIBDIR}/qtopiacore4
- cp -af ${STAGE_TEMP}/$includedir/* ${STAGING_INCDIR}/qtopiacore4/
-
- for i in ${STAGE_TEMP}/${libdir}/*.la
- do
- oe_libinstall -C ${STAGE_TEMP}/${libdir} -so $(basename $i .la) ${STAGING_LIBDIR}/qtopiacore4
- done
-
- rm -rf ${STAGE_TEMP}
-}
-
diff --git a/packages/quilt/quilt-0.45/non-gnu.patch b/packages/quilt/files/non-gnu.patch
index c1cbfb3983..c1cbfb3983 100644
--- a/packages/quilt/quilt-0.45/non-gnu.patch
+++ b/packages/quilt/files/non-gnu.patch
diff --git a/packages/quilt/files/install.patch b/packages/quilt/quilt-0.45/install.patch
index 4122370d6a..4122370d6a 100644
--- a/packages/quilt/files/install.patch
+++ b/packages/quilt/quilt-0.45/install.patch
diff --git a/packages/quilt/quilt-0.46/.mtn2git_empty b/packages/quilt/quilt-0.46/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/quilt/quilt-0.46/.mtn2git_empty
diff --git a/packages/quilt/quilt-0.46/aclocal.patch b/packages/quilt/quilt-0.46/aclocal.patch
new file mode 100644
index 0000000000..1245f74922
--- /dev/null
+++ b/packages/quilt/quilt-0.46/aclocal.patch
@@ -0,0 +1,126 @@
+Add the aclocal.m4 as acinclude.m4
+
+Index: quilt-0.46/acinclude.m4
+===================================================================
+--- /dev/null
++++ quilt-0.46/acinclude.m4
+@@ -0,0 +1,119 @@
++dnl Allow configure to specify a specific binary
++dnl 1: Environment variable
++dnl 2: binary name
++dnl 3: optional list of alternative binary names
++dnl 4: optional list of additional search directories
++AC_DEFUN([QUILT_COMPAT_PROG_PATH],[
++ m4_define([internal_$2_cmd],[esyscmd(ls compat/$2.in 2>/dev/null)])
++
++ AC_ARG_WITH($2, AC_HELP_STRING(
++ [--with-$2], [name of the $2 executable to use]
++ m4_if(internal_$2_cmd,[],[],[ (use --without-$2
++ to use an internal mechanism)])),
++ [
++ if test x"$withval" = xnone; then
++ AC_MSG_ERROR([Invalid configure argument. use --without-$2])
++ fi
++ if test x"$withval" != xno; then
++ AC_MSG_CHECKING(for $2)
++ $1="$withval"
++ if test -e "$$1"; then
++ if test ! -f "$$1" -a ! -h "$$1" || test ! -x "$$1"; then
++ AC_MSG_ERROR([$$1 is not an executable file])
++ fi
++ fi
++ AC_MSG_RESULT([$$1])
++ if test ! -e "$$1"; then
++ AC_MSG_WARN([$$1 does not exist])
++ fi
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ fi
++ ],[
++ m4_if([$3],[],[
++ AC_PATH_PROG($1,$2,,$PATH:$4)
++ ],[
++ AC_PATH_PROGS($1,$3,,$PATH:$4)
++ if test -n "$$1" -a "`expr "$$1" : '.*/\([[^/]]*\)$'`" != "$2"; then
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ fi
++ ])
++ m4_if([$4],[],[],[
++ if test -n "$$1"; then
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++ for dir in "$4"; do
++ if test "`dirname $$1`" = "$dir"; then
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ break
++ fi
++ done
++ IFS="$as_save_IFS"
++ fi
++ ])
++ ])
++ if test -z "$$1"; then
++ m4_if(internal_$2_cmd,[],[
++ AC_MSG_ERROR([Please specify the location of $2 with the option '--with-$2'])
++ ],[
++ AC_MSG_WARN([Using internal $2 mechanism. Use option '--with-$2' to override])
++ COMPAT_PROGRAMS="$COMPAT_PROGRAMS $2"
++ $1=$2
++ INTERNAL_$1=1
++ ])
++ fi
++ AC_SUBST($1)
++])
++
++dnl Allow configure to specify a specific binary
++dnl This variant is for optional binaries.
++dnl 1: Environment variable
++dnl 2: binary name
++dnl 3: optional list of alternative binary names
++dnl 4: optional list of additional search directories
++AC_DEFUN([QUILT_COMPAT_PROG_PATH_OPT],[
++ AC_ARG_WITH($2, AC_HELP_STRING(
++ [--with-$2], [name of the $2 executable to use]),
++ [
++ if test x"$withval" != xno; then
++ AC_MSG_CHECKING(for $2)
++ $1="$withval"
++ if test -e "$$1"; then
++ if test ! -f "$$1" -a ! -h "$$1" || test ! -x "$$1"; then
++ AC_MSG_ERROR([$$1 is not an executable file])
++ fi
++ fi
++ AC_MSG_RESULT([$$1])
++ if test ! -e "$$1"; then
++ AC_MSG_WARN([$$1 does not exist])
++ fi
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ fi
++ ],[
++ m4_if([$3],[],[
++ AC_PATH_PROG($1,$2,,$PATH:$4)
++ ],[
++ AC_PATH_PROGS($1,$3,,$PATH:$4)
++ if test -n "$$1" -a "`expr "$$1" : '.*/\([[^/]]*\)$'`" != "$2"; then
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ fi
++ ])
++ m4_if([$4],[],[],[
++ if test -n "$$1"; then
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++ for dir in "$4"; do
++ if test "`dirname $$1`" = "$dir"; then
++ COMPAT_SYMLINKS="$COMPAT_SYMLINKS $2"
++ break
++ fi
++ done
++ IFS="$as_save_IFS"
++ fi
++ ])
++ if test -z "$$1"; then
++ AC_MSG_WARN([$2 not found, some optional functionalities will be missing])
++ fi
++ ])
++ if test -z "$$1"; then
++ $1=$2
++ fi
++ AC_SUBST($1)
++])
diff --git a/packages/quilt/quilt-0.46/install.patch b/packages/quilt/quilt-0.46/install.patch
new file mode 100644
index 0000000000..3c9030d377
--- /dev/null
+++ b/packages/quilt/quilt-0.46/install.patch
@@ -0,0 +1,13 @@
+Index: quilt-0.46/Makefile.in
+===================================================================
+--- quilt-0.46.orig/Makefile.in
++++ quilt-0.46/Makefile.in
+@@ -12,7 +12,7 @@ datadir := @datadir@
+ docdir := @docdir@
+ mandir := @mandir@
+ localedir := $(datadir)/locale
+-etcdir := $(subst /usr/etc,/etc,$(prefix)/etc)
++etcdir := @sysconfdir@
+
+ INSTALL := @INSTALL@
+ POD2MAN := @POD2MAN@
diff --git a/packages/quilt/quilt-native.inc b/packages/quilt/quilt-native.inc
index 5861b2229c..f815969344 100644
--- a/packages/quilt/quilt-native.inc
+++ b/packages/quilt/quilt-native.inc
@@ -1,4 +1,4 @@
-require quilt_${PV}.inc
+require quilt.inc
SRC_URI_append_build-darwin = "? file://non-gnu.patch;patch=1 "
RDEPENDS_${PN} = "diffstat-native patch-native bzip2-native util-linux-native"
diff --git a/packages/quilt/quilt-native_0.45.bb b/packages/quilt/quilt-native_0.45.bb
index 033f323a13..302df25afd 100644
--- a/packages/quilt/quilt-native_0.45.bb
+++ b/packages/quilt/quilt-native_0.45.bb
@@ -1,2 +1 @@
-PV="0.45"
require quilt-native.inc
diff --git a/packages/quilt/quilt-native_0.46.bb b/packages/quilt/quilt-native_0.46.bb
new file mode 100644
index 0000000000..302df25afd
--- /dev/null
+++ b/packages/quilt/quilt-native_0.46.bb
@@ -0,0 +1 @@
+require quilt-native.inc
diff --git a/packages/quilt/quilt-package.inc b/packages/quilt/quilt-package.inc
index bcdbcf026a..900884b917 100644
--- a/packages/quilt/quilt-package.inc
+++ b/packages/quilt/quilt-package.inc
@@ -1,10 +1,21 @@
+require quilt.inc
+
+RDEPENDS_${PN} += "patch diffstat bzip2 util-linux"
+
+SRC_URI += "file://aclocal.patch;patch=1"
+
+inherit autotools gettext
+
+do_install () {
+ oe_runmake 'BUILD_ROOT=${D}' install
+
+ # Remove the compat symlinks
+ rm -rf "${D}"/usr/share/quilt/compat
+}
+
PACKAGES += "guards guards-doc"
FILES_${PN} = "${sysconfdir} ${datadir}/quilt \
${bindir}/quilt ${libdir}/quilt"
FILES_guards = "${bindir}/guards"
FILES_${PN}-doc = "${mandir}/man1/quilt.1 ${docdir}/${P}"
FILES_guards-doc = "${mandir}/man1/guards.1"
-
-do_install () {
- oe_runmake 'BUILD_ROOT=${D}' install
-}
diff --git a/packages/quilt/quilt.inc b/packages/quilt/quilt.inc
index ee90455fca..33bc0f62ea 100644
--- a/packages/quilt/quilt.inc
+++ b/packages/quilt/quilt.inc
@@ -2,8 +2,9 @@ DESCRIPTION = "Tool to work with series of patches."
HOMEPAGE = "http://savannah.nongnu.org/projects/quilt/"
SECTION = "devel"
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
-SRC_URI = "http://download.savannah.gnu.org/releases/quilt/quilt-${PV}.tar.gz "
+SRC_URI = "http://download.savannah.gnu.org/releases/quilt/quilt-${PV}.tar.gz \
+ file://install.patch;patch=1"
S = "${WORKDIR}/quilt-${PV}"
diff --git a/packages/quilt/quilt_0.45.bb b/packages/quilt/quilt_0.45.bb
index d809c83518..de38f64782 100644
--- a/packages/quilt/quilt_0.45.bb
+++ b/packages/quilt/quilt_0.45.bb
@@ -1,9 +1 @@
-RDEPENDS_${PN} += "patch diffstat bzip2 util-linux"
-
-require quilt_${PV}.inc
-
-SRC_URI += "file://aclocal.patch;patch=1"
-
-inherit autotools gettext
-
require quilt-package.inc
diff --git a/packages/quilt/quilt_0.45.inc b/packages/quilt/quilt_0.45.inc
deleted file mode 100644
index bf6267b56c..0000000000
--- a/packages/quilt/quilt_0.45.inc
+++ /dev/null
@@ -1,3 +0,0 @@
-require quilt.inc
-
-SRC_URI += "file://install.patch;patch=1"
diff --git a/packages/quilt/quilt_0.46.bb b/packages/quilt/quilt_0.46.bb
new file mode 100644
index 0000000000..de38f64782
--- /dev/null
+++ b/packages/quilt/quilt_0.46.bb
@@ -0,0 +1 @@
+require quilt-package.inc
diff --git a/packages/qxmp/qxmp_1.0.bb b/packages/qxmp/qxmp_1.0.bb
index e0a1acab21..bad972d54f 100644
--- a/packages/qxmp/qxmp_1.0.bb
+++ b/packages/qxmp/qxmp_1.0.bb
@@ -6,7 +6,7 @@ RDEPENDS = "mplayer"
SRC_URI = "http://www.xm1math.net/qxmp/qxmp-${PV}.tar.bz2"
-inherit qmake qt4x11
+inherit qt4x11
do_install() {
install -d ${D}${bindir}
diff --git a/packages/reiserfsprogs/reiserfsprogs_3.6.19.bb b/packages/reiserfsprogs/reiserfsprogs_3.6.19.bb
index 6a5c01f0fd..fe047aed37 100644
--- a/packages/reiserfsprogs/reiserfsprogs_3.6.19.bb
+++ b/packages/reiserfsprogs/reiserfsprogs_3.6.19.bb
@@ -4,7 +4,9 @@ LICENSE = "GPL"
RRECOMMENDS_${PN} = "reiserfsprogs-reiserfsck reiserfsprogs-mkreiserfs"
PR = "r1"
-SRC_URI ="ftp://ftp.namesys.com/pub/reiserfsprogs/reiserfsprogs-${PV}.tar.gz \
+#Namesys.com seems to be in trouble. See bug #3482 for more information
+#SRC_URI ="ftp://ftp.namesys.com/pub/reiserfsprogs/reiserfsprogs-${PV}.tar.gz \
+SRC_URI ="${DEBIAN_MIRROR}/main/r/reiserfsprogs/reiserfsprogs_${PV}.orig.tar.gz \
file://header-fix.patch;patch=1 \
"
diff --git a/packages/roadmap/files/options.mk.patch b/packages/roadmap/files/options.mk.patch
new file mode 100644
index 0000000000..196f16e31d
--- /dev/null
+++ b/packages/roadmap/files/options.mk.patch
@@ -0,0 +1,34 @@
+--- roadmap-1.1.0/src/options.mk.old 2008-01-09 22:08:00.000000000 -0600
++++ roadmap-1.1.0/src/options.mk 2008-01-09 23:06:29.000000000 -0600
+@@ -177,10 +177,7 @@ ifeq ($(strip $(AGG)),NO)
+ else
+ LIBS += -laggfontfreetype -lagg -lfreetype
+ CFLAGS += -DAGG_PIXFMT=pixfmt_$(AGG) \
+- -I$(TOP)/agg_support \
+- -I/usr/include/agg2 \
+- -I/usr/local/include/agg2 \
+- -I/usr/include/freetype2
++ -I$(TOP)/agg_support
+ CANVAS_OBJS = roadmap_canvas_agg.o \
+ $(TOP)/agg_support/roadmap_canvas.o
+ endif
+@@ -188,7 +185,7 @@ endif
+ # bidirectional text lib
+ ifneq ($(strip $(BIDI)),NO)
+ LIBS += -lfribidi
+- CFLAGS += -DUSE_FRIBIDI -I/usr/include/fribidi
++ CFLAGS += -DUSE_FRIBIDI
+ endif
+
+ # RoadMap internal profiling
+@@ -205,8 +202,8 @@ else
+ endif
+
+
+-CFLAGS += -I$(TOP) -I/usr/local/include -DNDEBUG
++CFLAGS += -I$(TOP) -DNDEBUG
+
+-LIBS := -L/usr/local/lib $(LIBS) -lm
++LIBS := $(LIBS) -lm
+
+ CXXFLAGS = $(CFLAGS)
diff --git a/packages/roadmap/files/qt/.mtn2git_empty b/packages/roadmap/files/qt/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/roadmap/files/qt/.mtn2git_empty
diff --git a/packages/roadmap/files/qt/qt2-fixes.patch b/packages/roadmap/files/qt/qt2-fixes.patch
new file mode 100644
index 0000000000..63c1c96e53
--- /dev/null
+++ b/packages/roadmap/files/qt/qt2-fixes.patch
@@ -0,0 +1,10 @@
+--- src/qt/Makefile~qt2-fixes.patch
++++ src/qt/Makefile
+@@ -19,7 +19,7 @@
+
+ ifeq ($(DESKTOP),QPE)
+ CFLAGS += -I$(QTDIR)/include -DQWS
+- LIBS += -lqte -lqpe
++ LIBS += -lqpe
+ INSTALLDIR=$(QTDIR)
+ endif
diff --git a/packages/roadmap/files/qt/qt_canvas.patch b/packages/roadmap/files/qt/qt_canvas.patch
new file mode 100644
index 0000000000..13c775c8cb
--- /dev/null
+++ b/packages/roadmap/files/qt/qt_canvas.patch
@@ -0,0 +1,20 @@
+--- src/qt/qt_canvas.cc.old 2007-12-08 20:29:52.000000000 -0600
++++ src/qt/qt_canvas.cc 2007-12-13 02:34:22.000000000 -0600
+@@ -122,7 +122,7 @@ void RMapCanvas::getTextExtents(const ch
+ *w = r.width();
+ *ascent = fm.ascent();
+ *descent = fm.descent();
+-#ifdef QT_NO_ROTATE
++#ifdef QT_NO_TRANSFORMATIONS
+ if (can_tilt) *can_tilt = 0;
+ #else
+ if (can_tilt) *can_tilt = 1;
+@@ -169,7 +169,7 @@ void RMapCanvas::drawString(RoadMapGuiPo
+
+ void RMapCanvas::drawStringAngle(RoadMapGuiPoint* position,
+ int center, const char* text, int angle) {
+-#ifndef QT_NO_ROTATE
++#ifndef QT_NO_TRANSFORMATIONS
+ if (!pixmap) {
+ return;
+ }
diff --git a/packages/roadmap/files/qt/qt_main.patch b/packages/roadmap/files/qt/qt_main.patch
new file mode 100644
index 0000000000..2f81128b34
--- /dev/null
+++ b/packages/roadmap/files/qt/qt_main.patch
@@ -0,0 +1,61 @@
+--- src/qt/qt_main.cc.old 2007-12-08 20:32:34.000000000 -0600
++++ src/qt/qt_main.cc 2007-12-08 20:34:38.000000000 -0600
+@@ -27,6 +27,7 @@
+ #include <signal.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
++#include <unistd.h>
+ #include "qt_main.h"
+
+ static int signalFd[2];
+@@ -168,12 +169,6 @@ void RMapMainWindow::addTool(const char*
+ const char* tip,
+ RoadMapCallback callback) {
+
+-#ifndef QWS
+- // For some unknown reason, this toolbar crashes RoadMap
+- // on the Sharp Zaurus.
+- // This should be fixed and the ifndef removed.
+- // Pascal: I believe this has been fixed now.
+-
+ if (toolBar == 0) {
+ addToolbar("");
+ }
+@@ -193,20 +188,13 @@ void RMapMainWindow::addTool(const char*
+
+ connect(b, SIGNAL(clicked()), cb, SLOT(fire()));
+ }
+-#endif
+ }
+
+ void RMapMainWindow::addToolSpace(void) {
+
+-#ifndef QWS
+- // For some unknown reason, this toolbar crashes RoadMap
+- // on the Sharp Zaurus. This should be fixed and the ifndef
+- // removed.
+-
+ addTool (NULL, NULL, NULL, NULL);
+
+ toolBar->addSeparator();
+-#endif
+ }
+
+
+@@ -299,14 +287,14 @@ void RMapMainWindow::closeEvent(QCloseEv
+
+ void RMapMainWindow::signalHandler(int sig)
+ {
+- ::write(signalFd[0], &sig, sizeof(sig));
++ write(signalFd[0], &sig, sizeof(sig));
+ }
+
+ void RMapMainWindow::handleSignal()
+ {
+ snSignal->setEnabled(false);
+ int tmp;
+- ::read(signalFd[1], &tmp, sizeof(tmp));
++ read(signalFd[1], &tmp, sizeof(tmp));
+ QString action;
+ switch (tmp) {
+ case SIGTERM: action="SIGTERM"; break;
diff --git a/packages/roadmap/files/qt/roadmap_main.patch b/packages/roadmap/files/qt/roadmap_main.patch
new file mode 100644
index 0000000000..7b16ce28fc
--- /dev/null
+++ b/packages/roadmap/files/qt/roadmap_main.patch
@@ -0,0 +1,16 @@
+--- src/qt/roadmap_main.cc.old 2007-12-08 15:47:05.000000000 -0600
++++ src/qt/roadmap_main.cc 2007-12-07 20:39:15.000000000 -0600
+@@ -195,11 +195,11 @@ void roadmap_main_set_cursor (int newcur
+ break;
+
+ case ROADMAP_CURSOR_WAIT:
+- mainWindow->setCursor (QCursor(Qt::WaitCursor));
++ mainWindow->setCursor (QCursor(Qt::waitCursor));
+ break;
+
+ case ROADMAP_CURSOR_CROSS:
+- mainWindow->setCursor (QCursor(Qt::CrossCursor));
++ mainWindow->setCursor (QCursor(Qt::crossCursor));
+ break;
+ }
+ }
diff --git a/packages/roadmap/files/roadmap.desktop.patch b/packages/roadmap/files/roadmap.desktop.patch
new file mode 100644
index 0000000000..98d5b06130
--- /dev/null
+++ b/packages/roadmap/files/roadmap.desktop.patch
@@ -0,0 +1,16 @@
+--- src/roadmap.desktop.old 2007-12-08 23:15:45.000000000 -0600
++++ src/roadmap.desktop 2007-12-08 23:17:48.000000000 -0600
+@@ -1,11 +1,8 @@
+ [Desktop Entry]
+-Comment=RoadMap
+ Comment=Car Navigation System
+ Exec=roadmap
+-Icon=roadmap.png
++Icon=roadmap
+ Type=Application
+ Name=RoadMap
+ GenericName=Map Viewer
+-Categories=Application;Other;VectorGraphics;Graphics;Viewer;GTK;
+-FilePattern=*roadmap;*.rdm
+-
++Categories=VectorGraphics;Graphics;Viewer;GTK;
diff --git a/packages/roadmap/files/roadmap_path.patch b/packages/roadmap/files/roadmap_path.patch
new file mode 100644
index 0000000000..7a7ab74261
--- /dev/null
+++ b/packages/roadmap/files/roadmap_path.patch
@@ -0,0 +1,57 @@
+--- src/unix/roadmap_path.c.old 2008-01-12 21:08:03.000000000 -0600
++++ src/unix/roadmap_path.c 2008-01-12 21:29:40.000000000 -0600
+@@ -93,23 +93,18 @@ static const char *RoadMapPathConfig[] =
+ "/opt/QtPalmtop/share/roadmap",
+ "/mnt/cf/QtPalmtop/share/roadmap",
+ "/mnt/card/QtPalmtop/share/roadmap",
+-#else
++#endif
+ /* This is for standard Unix configurations. */
+ "/etc/roadmap",
+ "/usr/local/share/roadmap",
+ "/usr/share/roadmap",
+-#endif
+ NULL
+ };
+ static const char *RoadMapPathConfigPreferred =
+ #ifdef ROADMAP_CONFIG_DIR
+ ROADMAP_CONFIG_DIR;
+ #else
+-#ifdef QWS
+- "/mnt/cf/QtPalmtop/share/roadmap";
+-#else
+- "/usr/local/share/roadmap";
+-#endif
++ "/usr/share/roadmap";
+ #endif
+
+
+@@ -123,7 +118,7 @@ static const char *RoadMapPathMaps[] = {
+ "/opt/QtPalmtop/share/roadmap/...",
+ "/mnt/cf/QtPalmtop/share/roadmap/...",
+ "/mnt/card/QtPalmtop/share/roadmap/...",
+-#else
++#endif
+ /* This is for standard Unix configurations. */
+ "&/maps/...",
+ "/var/lib/roadmap/...",
+@@ -134,19 +129,14 @@ static const char *RoadMapPathMaps[] = {
+ */
+ "/usr/local/share/roadmap/...",
+ "/usr/share/roadmap/...",
+-#endif
+ NULL
+ };
+ static const char *RoadMapPathMapsPreferred =
+ #ifdef ROADMAP_MAP_DIR
+ ROADMAP_MAP_DIR;
+ #else
+-#ifdef QWS
+- "/mnt/cf/QtPalmtop/share/roadmap";
+-#else
+ "/var/lib/roadmap";
+ #endif
+-#endif
+
+ /* The default path for the icon files (the "icons" path): */
+ static const char *RoadMapPathIcons[] = {
diff --git a/packages/zroadmap/files/zroadgps.png b/packages/roadmap/files/zroadgps.png
index a77b3729b7..a77b3729b7 100644
--- a/packages/zroadmap/files/zroadgps.png
+++ b/packages/roadmap/files/zroadgps.png
Binary files differ
diff --git a/packages/roadmap/roadmap-gtk2.inc b/packages/roadmap/roadmap-gtk2.inc
new file mode 100644
index 0000000000..6d0db5099b
--- /dev/null
+++ b/packages/roadmap/roadmap-gtk2.inc
@@ -0,0 +1,11 @@
+require roadmap.inc
+
+SECTION = "x11/applications"
+
+DEPENDS += "agg gtk+"
+
+EXTRA_OEMAKE = "DESKTOP=GTK2 AGG=rgb565 \
+ POPT=NO SCRIPTS= BUILD= INSTALLDIR=/usr DESTDIR=${D} \
+ desktopdir=${D}${datadir}/applications"
+
+CFLAGS += " -I${STAGING_INCDIR}/agg2 "
diff --git a/packages/roadmap/roadmap-gtk2_1.1.0.bb b/packages/roadmap/roadmap-gtk2_1.1.0.bb
new file mode 100644
index 0000000000..1e34238106
--- /dev/null
+++ b/packages/roadmap/roadmap-gtk2_1.1.0.bb
@@ -0,0 +1,12 @@
+require roadmap-gtk2.inc
+
+PR = "r2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/roadmap/roadmap-${PV}-src.tar.gz \
+ file://cross.patch;patch=1;pnum=2 \
+ file://options.mk.patch;patch=1;pnum=2 \
+ file://roadmap_path.patch;patch=1 \
+ file://roadmap.desktop.patch;patch=1 \
+ http://roadmap.digitalomaha.net/maps/usdir.rdm.tgz "
+
+S = "${WORKDIR}/roadmap-${PV}/src"
diff --git a/packages/roadmap/roadmap-gtk2_cvs.bb b/packages/roadmap/roadmap-gtk2_cvs.bb
index cb81a44ae8..9d7adbaa3e 100644
--- a/packages/roadmap/roadmap-gtk2_cvs.bb
+++ b/packages/roadmap/roadmap-gtk2_cvs.bb
@@ -1,44 +1,13 @@
-DESCRIPTION = "RoadMap is a program that provides a car navigation for Linux and UNIX. \
-It displays a map of the streets, tracks the position provided by a NMEA-compliant \
-GPS receiver, identifies the street matching this GPS position and announces the name \
-of the crossing street at the next intersection."
-AUTHOR = "Pascal Martin <pascal.martin@iname.com>"
-HOMEPAGE = "http://roadmap.digitalomaha.net/maps.html"
-DEPENDS = "popt expat gtk+"
-LICENSE = "GPL"
-PV = "1.0.12+cvs${SRCDATE}"
-PR = "r0"
+require roadmap-gtk2.inc
+
+PV = "0.0+cvs${SRCDATE}"
+PR = "r1"
SRC_URI = "cvs://anonymous:@roadmap.cvs.sf.net/cvsroot/roadmap;module=roadmap \
file://cross.patch;patch=1;pnum=2 \
- http://roadmap.digitalomaha.net/maps/usdir.rdm.tgz \
- "
+ file://options.mk.patch;patch=1;pnum=2 \
+ file://roadmap_path.patch;patch=1 \
+ http://roadmap.digitalomaha.net/maps/usdir.rdm.tgz "
S = "${WORKDIR}/roadmap/src"
-PARALLEL_MAKE = ""
-CFLAGS += " -I${S} "
-
-
-do_compile() {
- oe_runmake
- oe_runmake gtk2
-}
-
-do_install() {
- install -d ${D}${bindir}
- install -d ${D}${datadir}/applications
- install -d ${D}${datadir}/pixmaps
- install -d ${D}${datadir}/roadmap
-
- install -m 0755 gtk2/gtkroad* ${D}${bindir}
-
- install -m 0644 icons/*png ${D}${datadir}/pixmaps
-
- install -m 0644 sprites preferences ${D}${datadir}/roadmap
- install -m 0644 ${WORKDIR}/usdir.rdm ${D}${datadir}/roadmap/
-}
-
-
-FILES_${PN} += "${datadir}/roadmap"
-
diff --git a/packages/roadmap/roadmap.inc b/packages/roadmap/roadmap.inc
new file mode 100644
index 0000000000..43b4b1cd3d
--- /dev/null
+++ b/packages/roadmap/roadmap.inc
@@ -0,0 +1,18 @@
+DESCRIPTION = "RoadMap is a program that provides car navigation for Linux and UNIX."
+PRIORITY = "optional"
+AUTHOR = "Pascal Martin <pascal.martin@iname.com>"
+HOMEPAGE = "http://roadmap.digitalomaha.net/maps.html"
+LICENSE = "GPL"
+RRECOMMENDS = "gpsd flite"
+DEPENDS = "expat"
+
+FILES_${PN} += "${datadir}/roadmap"
+
+do_compile() {
+ oe_runmake runtime ${TOOLS} icons
+}
+
+do_install() {
+ oe_runmake install
+ install -m 0644 ${WORKDIR}/usdir.rdm ${D}${datadir}/roadmap/
+}
diff --git a/packages/roadmap/zroadmap.inc b/packages/roadmap/zroadmap.inc
new file mode 100644
index 0000000000..3c99f9d234
--- /dev/null
+++ b/packages/roadmap/zroadmap.inc
@@ -0,0 +1,23 @@
+require roadmap.inc
+
+PARALLEL_MAKE = ""
+
+SECTION = "opie/applications"
+
+inherit palmtop
+
+QT_LIBRARY = '${@base_conditional("PALMTOP_USE_MULTITHREADED_QT", "yes", "qte-mt", "qte",d)}'
+QT_LIBRARY_append_c7x0 = " -laticore"
+
+EXTRA_OEMAKE = "DESKTOP=QPE MOC=${OE_QMAKE_MOC} UIC=${OE_QMAKE_UIC} QTDIR=${QTDIR} \
+ POPT=NO SCRIPTS= BUILD= INSTALLDIR=/usr DESTDIR=${D} \
+ icondir=${D}${palmtopdir}/pics \
+ desktopdir=${D}${palmtopdir}/apps/Applications \
+ CFLAGS="-DQWS -I${S} ${OE_QMAKE_CFLAGS} -I${OE_QMAKE_INCDIR_QT}" \
+ LDFLAGS="${OE_QMAKE_LDFLAGS} -L${OE_QMAKE_LIBDIR_QT} -Wl,-rpath-link,${OE_QMAKE_LIBDIR_QT}""
+
+do_configure() {
+ echo removing pregenerated stuff
+ find . -name "moc*"|xargs rm -f
+}
+
diff --git a/packages/roadmap/zroadmap_1.1.0.bb b/packages/roadmap/zroadmap_1.1.0.bb
new file mode 100644
index 0000000000..b06e4e7ad0
--- /dev/null
+++ b/packages/roadmap/zroadmap_1.1.0.bb
@@ -0,0 +1,16 @@
+require zroadmap.inc
+
+PR = "r2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/roadmap/roadmap-${PV}-src.tar.gz \
+ file://cross.patch;patch=1;pnum=2 \
+ file://options.mk.patch;patch=1;pnum=2 \
+ file://qt/qt2-fixes.patch;patch=1 \
+ file://qt/qt_canvas.patch;patch=1 \
+ file://qt/qt_main.patch;patch=1 \
+ file://qt/roadmap_main.patch;patch=1 \
+ file://roadmap_path.patch;patch=1 \
+ file://roadmap.desktop.patch;patch=1 \
+ http://roadmap.digitalomaha.net/maps/usdir.rdm.tar.gz"
+
+S = "${WORKDIR}/roadmap-${PV}/src"
diff --git a/packages/roadmap/zroadmap_cvs.bb b/packages/roadmap/zroadmap_cvs.bb
new file mode 100644
index 0000000000..383ffe8f69
--- /dev/null
+++ b/packages/roadmap/zroadmap_cvs.bb
@@ -0,0 +1,13 @@
+require zroadmap.inc
+
+PV = "0.0+cvs${SRCDATE}"
+PR = "r0"
+
+SRC_URI = "cvs://anonymous:@roadmap.cvs.sf.net/cvsroot/roadmap;module=roadmap \
+ file://cross.patch;patch=1;pnum=2 \
+ file://options.mk.patch;patch=1;pnum=2 \
+ file://qt/qt2-fixes.patch;patch=1 \
+ file://roadmap_path.patch;patch=1 \
+ http://roadmap.digitalomaha.net/maps/usdir.rdm.tar.gz"
+
+S = "${WORKDIR}/roadmap/src"
diff --git a/packages/rp-pppoe/rp-pppoe-3.8/dont-swallow-errors.patch b/packages/rp-pppoe/rp-pppoe-3.8/dont-swallow-errors.patch
new file mode 100644
index 0000000000..81ce2db335
--- /dev/null
+++ b/packages/rp-pppoe/rp-pppoe-3.8/dont-swallow-errors.patch
@@ -0,0 +1,11 @@
+--- a/src/configure.in.org 2008-01-14 21:08:38.000000000 +0200
++++ a/src/configure.in 2008-01-14 21:20:09.000000000 +0200
+@@ -208,7 +208,7 @@
+ return 2;
+ }
+ }], rpppoe_cv_pack_bitfields=normal, rpppoe_cv_pack_bitfields=rev,
+-$ECHO "no defaults for cross-compiling"; exit 0)
++$ECHO "no defaults for cross-compiling"; exit 1)
+ ])
+
+ if test "$rpppoe_cv_pack_bitfields" = "rev" ; then
diff --git a/packages/rp-pppoe/rp-pppoe_3.8.bb b/packages/rp-pppoe/rp-pppoe_3.8.bb
index 35faf8839b..9852522da1 100644
--- a/packages/rp-pppoe/rp-pppoe_3.8.bb
+++ b/packages/rp-pppoe/rp-pppoe_3.8.bb
@@ -5,13 +5,14 @@ LICENSE = "GPLv2"
RDEPENDS_${PN} = "ppp"
RDEPENDS_${PN}-server = "${PN}"
RRECOMMENDS_${PN} = "ppp-oe"
-PR = "r5"
+PR = "r6"
SRC_URI = "http://www.roaringpenguin.com/files/download/${P}.tar.gz \
file://top-autoconf.patch;patch=1 \
file://configure_in_cross.patch;patch=1 \
file://pppoe-src-restrictions.patch;patch=1 \
file://update-config.patch;patch=1 \
+ file://dont-swallow-errors.patch;patch=1 \
file://pppoe-server.default \
file://pppoe-server.init"
diff --git a/packages/rt2x00/rt73-chumby_1.2.bb b/packages/rt2x00/rt73-chumby_1.2.bb
new file mode 100644
index 0000000000..3d6cd0cb51
--- /dev/null
+++ b/packages/rt2x00/rt73-chumby_1.2.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Driver for Ralink rt73 USB 802.11g WiFi sticks found in the Chumby"
+HOMEPAGE = "http://www.chumby.com"
+SECTION = "kernel/modules"
+LICENSE = "GPL"
+PR = "r2"
+
+SRC_URI="http://files.chumby.com/source/ironforge/build396/${PN}-${PV}.tar.gz"
+
+inherit module
+
+S = "${WORKDIR}/wifi/rt73/Module/"
+
+EXTRA_OEMAKE = "KERNDIR=${STAGING_KERNEL_DIR}"
+
+do_install() {
+ install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra
+ install -m 0644 rt73${KERNEL_OBJECT_SUFFIX} ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra/
+ install -d ${D}${sysconfdir}/Wireless/RT73STA/
+ install -m 0644 rt73.bin ${D}${sysconfdir}/Wireless/RT73STA/
+}
+
diff --git a/packages/rt2x00/rt73-k2wrlz_1.0.0.bb b/packages/rt2x00/rt73-k2wrlz_1.0.0.bb
index 764f779cbd..094cb264a3 100644
--- a/packages/rt2x00/rt73-k2wrlz_1.0.0.bb
+++ b/packages/rt2x00/rt73-k2wrlz_1.0.0.bb
@@ -2,16 +2,14 @@ DESCRIPTION = "Enhanced Driver for Ralink rt73 USB 802.11g WiFi sticks"
HOMEPAGE = "http://homepages.tu-darmstadt.de/~p_larbig/wlan"
SECTION = "kernel/modules"
LICENSE = "GPL"
-
+PR = "r1"
+
SRC_URI= "http://homepages.tu-darmstadt.de/~p_larbig/wlan/rt73-k2wrlz-1.0.0.tar.bz2"
inherit module
S = "${WORKDIR}/${PN}-${PV}/Module/"
-do_compile() {
- export KERNDIR=${STAGING_KERNEL_DIR}
- module_do_compile
-}
+EXTRA_OEMAKE = "KERNDIR=${STAGING_KERNEL_DIR}"
do_install() {
install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra
diff --git a/packages/rt2x00/rt73-k2wrlz_2.0.1.bb b/packages/rt2x00/rt73-k2wrlz_2.0.1.bb
index f1b11f7189..93d371986a 100644
--- a/packages/rt2x00/rt73-k2wrlz_2.0.1.bb
+++ b/packages/rt2x00/rt73-k2wrlz_2.0.1.bb
@@ -2,17 +2,15 @@ DESCRIPTION = "Enhanced Driver for Ralink rt73 USB 802.11g WiFi sticks"
HOMEPAGE = "http://homepages.tu-darmstadt.de/~p_larbig/wlan"
SECTION = "kernel/modules"
LICENSE = "GPL"
-
+PR = "r1"
+
SRC_URI="http://homepages.tu-darmstadt.de/~p_larbig/wlan/${PN}-${PV}.tar.bz2"
inherit module
S = "${WORKDIR}/${PN}-${PV}/Module/"
-do_compile() {
- export KERNDIR=${STAGING_KERNEL_DIR}
- module_do_compile
-}
+EXTRA_OEMAKE = "KERNDIR=${STAGING_KERNEL_DIR}"
do_install() {
install -d ${D}${base_libdir}/modules/${KERNEL_VERSION}/extra
diff --git a/packages/sablevm/sablevm-classpath_1.1.9.bb b/packages/sablevm/sablevm-classpath_1.1.9.bb
index cda269c70a..c222572009 100644
--- a/packages/sablevm/sablevm-classpath_1.1.9.bb
+++ b/packages/sablevm/sablevm-classpath_1.1.9.bb
@@ -5,7 +5,7 @@ PRIORITY = "optional"
SECTION = "libs"
PR = "r1"
-DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native fastjar-native"
+DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native fastjar-native"
RDEPENDS_${PN} = "${PN}-native"
SRC_URI = "http://sablevm.org/download/release/${PV}/${PN}-${PV}.tar.gz \
diff --git a/packages/sablevm/sablevm-classpath_1.11.3.bb b/packages/sablevm/sablevm-classpath_1.11.3.bb
index 90de4e3ac8..0546dcacd6 100644
--- a/packages/sablevm/sablevm-classpath_1.11.3.bb
+++ b/packages/sablevm/sablevm-classpath_1.11.3.bb
@@ -4,7 +4,7 @@ LICENSE = "Classpath"
PRIORITY = "optional"
SECTION = "libs"
-DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
+DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native"
RDEPENDS_${PN} = "${PN}-native (>= ${PV})"
SRC_URI = "http://sablevm.org/download/release/${PV}/${PN}-${PV}.tar.gz \
diff --git a/packages/sablevm/sablevm-classpath_1.12.bb b/packages/sablevm/sablevm-classpath_1.12.bb
index 90de4e3ac8..0546dcacd6 100644
--- a/packages/sablevm/sablevm-classpath_1.12.bb
+++ b/packages/sablevm/sablevm-classpath_1.12.bb
@@ -4,7 +4,7 @@ LICENSE = "Classpath"
PRIORITY = "optional"
SECTION = "libs"
-DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst jikes-native zip-native"
+DEPENDS = "glib-2.0 gtk+ libart-lgpl pango libxtst virtual/javac-native zip-native"
RDEPENDS_${PN} = "${PN}-native (>= ${PV})"
SRC_URI = "http://sablevm.org/download/release/${PV}/${PN}-${PV}.tar.gz \
diff --git a/packages/sablevm/sablevm_1.1.9.bb b/packages/sablevm/sablevm_1.1.9.bb
index cbecd1d25a..7c5198c0e6 100644
--- a/packages/sablevm/sablevm_1.1.9.bb
+++ b/packages/sablevm/sablevm_1.1.9.bb
@@ -22,7 +22,7 @@ ALTERNATIVE_NAME = "java"
ALTERNATIVE_PATH = "${bindir}/java-sablevm"
ALTERNATIVE_PRIORITY = "350"
-PACKAGES = "${PN} ${PN}-doc lib${PN} lib${PN}-dev"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc lib${PN} lib${PN}-dev"
FILES_${PN} = "${bindir} \
${libdir}/${PN}/bin"
diff --git a/packages/sablevm/sablevm_1.11.3.bb b/packages/sablevm/sablevm_1.11.3.bb
index 35dce88d9c..154745dfeb 100644
--- a/packages/sablevm/sablevm_1.11.3.bb
+++ b/packages/sablevm/sablevm_1.11.3.bb
@@ -21,7 +21,7 @@ ALTERNATIVE_NAME = "java"
ALTERNATIVE_PATH = "${bindir}/java-sablevm"
ALTERNATIVE_PRIORITY = "350"
-PACKAGES = "${PN} ${PN}-doc lib${PN} lib${PN}-dev"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc lib${PN} lib${PN}-dev"
FILES_${PN} = "${bindir} \
${libdir}/${PN}/bin"
diff --git a/packages/sablevm/sablevm_1.12.bb b/packages/sablevm/sablevm_1.12.bb
index 1c62842efb..541694e2e7 100644
--- a/packages/sablevm/sablevm_1.12.bb
+++ b/packages/sablevm/sablevm_1.12.bb
@@ -22,7 +22,7 @@ ALTERNATIVE_NAME = "java"
ALTERNATIVE_PATH = "${bindir}/java-sablevm"
ALTERNATIVE_PRIORITY = "350"
-PACKAGES = "${PN} ${PN}-doc lib${PN} lib${PN}-dev"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-doc lib${PN} lib${PN}-dev"
FILES_${PN} = "${bindir} \
${libdir}/${PN}/bin"
diff --git a/packages/sccd/files/scc.h b/packages/sccd/files/scc.h
index 611092fd9c..b920791f66 100644
--- a/packages/sccd/files/scc.h
+++ b/packages/sccd/files/scc.h
@@ -33,7 +33,7 @@
*/
#define SCC_PIDFILE "/var/run/sccd.pid"
-#define SCC_DEVICE "/dev/tts/1"
+#define SCC_DEVICE "/dev/ttyS1"
#define SCC_SOCKET "/dev/sccd"
#define SCC_PACKETLEN 8
diff --git a/packages/sccd/sccd_1.0.bb b/packages/sccd/sccd_1.0.bb
index 5eeaeef343..bf25fbe90c 100644
--- a/packages/sccd/sccd_1.0.bb
+++ b/packages/sccd/sccd_1.0.bb
@@ -1,7 +1,7 @@
-DECSCRIPTION = "StorCenter Control Daemon - controls the leds, fans, softpower"
+DECSCRIPTION = "StorCenter Control Daemon controls leds, fans, softpower"
SECTION = "utils"
LICENSE = "BSD"
-PR = "r3"
+PR = "r4"
SRC_URI = "file://scc.h \
file://scc.c \
@@ -14,7 +14,7 @@ SRC_URI = "file://scc.h \
inherit autotools update-rc.d
-INITSCRIPT_PARAMS = "defaults 91 20"
+INITSCRIPT_PARAMS = "defaults 9 9"
INITSCRIPT_NAME = "sccd"
do_unpack() {
diff --git a/packages/schedstat-utils/schedstat-utils.bb b/packages/schedstat-utils/schedstat-utils.bb
index c9ff8ab918..051135a9fb 100644
--- a/packages/schedstat-utils/schedstat-utils.bb
+++ b/packages/schedstat-utils/schedstat-utils.bb
@@ -15,7 +15,7 @@ do_install () {
install -m 0755 stats-10.pl ${D}${sbindir}/
}
-PACKAGES = "schedstat-utils \
+PACKAGES = "${PN}-dbg schedstat-utils \
schedstat-utils-latency \
schedstat-utils-perl"
RDEPENDS_${PN} = "schedstat-utils-latency schedstat-utils-perl"
diff --git a/packages/screen/screen_4.0.2.bb b/packages/screen/screen_4.0.2.bb
index b915a5f72b..29681304ec 100644
--- a/packages/screen/screen_4.0.2.bb
+++ b/packages/screen/screen_4.0.2.bb
@@ -4,10 +4,10 @@ processes, typically interactive shells."
LICENSE = "GPL"
SECTION = "console/utils"
DEPENDS = "ncurses"
-PR = "r1"
+PR = "r2"
SRC_URI = "${GNU_MIRROR}/screen/screen-${PV}.tar.gz \
- ${DEBIAN_MIRROR}/main/s/screen/screen_4.0.2-4.1.diff.gz;patch=1 \
+ ${DEBIAN_MIRROR}/main/s/screen/screen_4.0.2-4.1sarge1.diff.gz;patch=1 \
file://configure.patch;patch=1"
inherit autotools
diff --git a/packages/settings-daemon/settings-daemon_svn.bb b/packages/settings-daemon/settings-daemon_svn.bb
index fb24fb1d75..eaffbfebb4 100644
--- a/packages/settings-daemon/settings-daemon_svn.bb
+++ b/packages/settings-daemon/settings-daemon_svn.bb
@@ -1,10 +1,12 @@
DESCRIPTION = "Settings-daemon provides a bridge between gconf and xsettings"
LICENSE = "GPL"
-DEPENDS = "gconf glib-2.0"
+DEPENDS = "gconf glib-2.0 gtk+"
RDEPENDS = "xrdb"
SECTION = "x11"
PV = "0.0+svnr${SRCREV}"
+PR = "r1"
+
SRC_URI = "svn://svn.o-hand.com/repos/matchbox/trunk;module=${PN};proto=http \
file://70settings-daemon"
diff --git a/packages/sgml-common/sgml-common-native_0.6.3.bb b/packages/sgml-common/sgml-common-native_0.6.3.bb
index 749e26a500..873de8021b 100644
--- a/packages/sgml-common/sgml-common-native_0.6.3.bb
+++ b/packages/sgml-common/sgml-common-native_0.6.3.bb
@@ -8,18 +8,29 @@ S = "${WORKDIR}/sgml-common-${PV}"
PACKAGES = ""
do_stage () {
- install -m 0755 bin/install-catalog ${STAGING_BINDIR}/
- install -m 0755 bin/sgmlwhich ${STAGING_BINDIR}/
- install -d ${STAGING_DIR}/etc
- install -m 0644 config/sgml.conf ${STAGING_DIR}/etc/
+ # For unknown reasons 'make install' does not work.
+ install -m 0755 bin/install-catalog ${STAGING_BINDIR_NATIVE}/
+ install -m 0755 bin/sgmlwhich ${STAGING_BINDIR_NATIVE}/
+
+ install -d ${sysconfdir}/sgml
+ install -m 0644 config/sgml.conf ${sysconfdir}/sgml
+
install -d ${STAGING_DATADIR}/sgml
install -m 0644 xml.dcl ${STAGING_DATADIR}/sgml/
- install -d ${STAGING_DATADIR}/xml/xml-iso-entities-8879.1986
- install -m 0644 xml-iso-entities/catalog ${STAGING_DATADIR}/xml/xml-iso-entities-8879.1986/
- install -m 0644 xml-iso-entities/*.ent ${STAGING_DATADIR}/xml/xml-iso-entities-8879.1986/
+
+ install -d ${STAGING_DATADIR}/sgml/xml-iso-entities-8879.1986
+ install -m 0644 xml-iso-entities/catalog ${STAGING_DATADIR}/sgml/xml-iso-entities-8879.1986/
+ install -m 0644 xml-iso-entities/*.ent ${STAGING_DATADIR}/sgml/xml-iso-entities-8879.1986/
install -d ${STAGING_DATADIR}/sgml/sgml-iso-entities-8879.1986
install -m 0644 sgml-iso-entities/catalog ${STAGING_DATADIR}/sgml/sgml-iso-entities-8879.1986/
install -m 0644 sgml-iso-entities/*.ent ${STAGING_DATADIR}/sgml/sgml-iso-entities-8879.1986/
+
+ install-catalog \
+ --add ${sysconfdir}/sgml/sgml-ent.cat ${STAGING_DATADIR}/sgml/sgml-iso-entities-8879.1986/catalog
+
+ install-catalog \
+ --add ${sysconfdir}/sgml/sgml-docbook.cat ${sysconfdir}/sgml/sgml-ent.cat
+
}
do_install () {
diff --git a/packages/sgml-common/sgml-common_0.6.3.bb b/packages/sgml-common/sgml-common_0.6.3.bb
index 8b9fd5aeda..3454b1cb01 100644
--- a/packages/sgml-common/sgml-common_0.6.3.bb
+++ b/packages/sgml-common/sgml-common_0.6.3.bb
@@ -14,3 +14,29 @@ SRC_URI = "ftp://sources.redhat.com/pub/docbook-tools/new-trials/SOURCES/sgml-co
file://autohell.patch;patch=1"
inherit autotools
+
+do_compile_append() {
+ # install-catalog script contains hardcoded reference to /etc/sgml.
+ sed -i -e "s|/etc/sgml|${sysconfdir}/sgml|g" bin/install-catalog
+}
+
+pkg_postinst() {
+ install-catalog \
+ --add ${sysconfdir}/sgml/sgml-ent.cat \
+ ${datadir}/sgml/sgml-iso-entities-8879.1986/catalog
+
+ install-catalog \
+ --add ${sysconfdir}/sgml/sgml-docbook.cat \
+ ${sysconfdir}/sgml/sgml-ent.cat
+}
+
+pkg_postrm() {
+ install-catalog \
+ --remove ${sysconfdir}/sgml/sgml-ent.cat \
+ ${datadir}/sgml/sgml-iso-entities-8879.1986/catalog
+
+ install-catalog \
+ --remove ${sysconfdir}/sgml/sgml-docbook.cat \
+ ${sysconfdir}/sgml/sgml-ent.cat
+}
+
diff --git a/packages/sgmlspl/.mtn2git_empty b/packages/sgmlspl/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sgmlspl/.mtn2git_empty
diff --git a/packages/sgmlspl/files/.mtn2git_empty b/packages/sgmlspl/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/sgmlspl/files/.mtn2git_empty
diff --git a/packages/sgmlspl/files/combined.patch b/packages/sgmlspl/files/combined.patch
new file mode 100644
index 0000000000..fff605b6b7
--- /dev/null
+++ b/packages/sgmlspl/files/combined.patch
@@ -0,0 +1,454 @@
+--- libsgmls-perl-1.03ii.orig/Makefile
++++ libsgmls-perl-1.03ii/Makefile
+@@ -94,5 +94,5 @@
+ mv /tmp/${DIST} SGMLSpm
+
+ clean:
+- cd DOC; make clean
++ #cd DOC; make clean
+ rm -f *~ core *.tar *.tar.gz
+--- libsgmls-perl-1.03ii.orig/Makefile.PL
++++ libsgmls-perl-1.03ii/Makefile.PL
+@@ -0,0 +1,17 @@
++use ExtUtils::MakeMaker;
++# See lib/ExtUtils/MakeMaker.pm for details of how to influence
++# the contents of the Makefile that is written.
++WriteMakefile(
++ 'NAME' => 'SGMLS',
++ 'VERSION' => '1.03ii',
++ 'PM' => { 'SGMLS.pm' => '$(INST_LIBDIR)/SGMLS.pm',
++ 'Output.pm' => '$(INST_LIBDIR)/SGMLS/Output.pm',
++ 'Refs.pm' => '$(INST_LIBDIR)/SGMLS/Refs.pm',
++ 'skel.pl' => '$(INST_LIBDIR)/sgmlspl-specs/skel.pl',
++ },
++ 'MAN3PODS'=> { 'SGMLS.pm' => '$(INST_MAN3DIR)/SGMLS.3pm',
++ 'Output.pm' => '$(INST_MAN3DIR)/SGMLS::Output.3pm',
++ 'Refs.pm' => '$(INST_MAN3DIR)/SGMLS::Refs.3pm',
++ },
++ 'EXE_FILES' => [ 'sgmlspl', ],
++);
+--- libsgmls-perl-1.03ii.orig/Output.pm
++++ libsgmls-perl-1.03ii/Output.pm
+@@ -5,7 +5,7 @@
+ @ISA = Exporter;
+ @EXPORT = qw(output push_output pop_output);
+
+-$version = '$Id: Output.pm,v 1.6 1995/12/05 12:21:51 david Exp $';
++$version = '$Id: Output.pm,v 1.1 1999/10/26 19:30:45 ardo Exp $';
+
+ =head1 NAME
+
+--- libsgmls-perl-1.03ii.orig/Refs.pm
++++ libsgmls-perl-1.03ii/Refs.pm
+@@ -2,11 +2,11 @@
+
+ use Carp;
+
+-$version = '$Id: Refs.pm,v 1.5 1995/12/03 21:28:36 david Exp $';
++$version = '$Id: Refs.pm,v 1.1 1999/10/26 19:30:45 ardo Exp $';
+
+ =head1 NAME
+
+-SGMLS::Refs
++SGMLS::Refs - Forward refeence handling
+
+ =head1 SYNOPSIS
+
+--- libsgmls-perl-1.03ii.orig/sgmlspl.1
++++ libsgmls-perl-1.03ii/sgmlspl.1
+@@ -0,0 +1,47 @@
++.\" -*- nroff -*-
++.\" ----------------------------------------------------------------------
++.TH SGMLSPL 1 "October 26, 1999" "SGMLSPL" "SGMLSPL"
++.\"
++.\" ----------------------------------------------------------------------
++.SH "NAME"
++sgmlspl \- a simple post-processor for nsgmls
++.\"
++.\" ----------------------------------------------------------------------
++.SH "SYNOPSIS"
++.B sgmlspl
++.I "spec file"
++.\"
++.\" ----------------------------------------------------------------------
++.SH "DESCRIPTION"
++sgmlspl is a sample application to convert SGML documents to other
++formats by providing a specification file detailing exactly how to
++handle each element, external data entity, subdocument entity, CDATA
++string, record end, SDATA string, and processing instruction.
++
++To use sgmlspl, prepare a specification file containing regular perl5
++code. If the SGML document were named doc.sgml, the sgmlspl
++specification file were named, spec.pl, and the name of the new file
++were doc.latex, then use the following command in a Unix shell to
++convert the SGML document:
++
++nsgmls doc.sgml | sgmlspl spec.pl > doc.latex
++
++sgmlspl will pass any additional arguments on to the specification
++file, which can then process them in the regular perl5 fashion.
++.\"
++.\" ----------------------------------------------------------------------
++.SH "SEE ALSO"
++.TP
++.BR /usr/share/doc/sgmls-doc/sgmlspl/sgmlspl.html
++sgmlspl documentation in HTML format
++.TP
++.BR /usr/share/doc/sgmls-doc/SGMLSpm/sgmls.html
++SGMLS documentation in HTML format
++.TP
++.BR nsgmls (1)
++.\"
++.\" ----------------------------------------------------------------------
++.SH "AUTHOR"
++Ardo van Rangelrooij <ardo@debian.org>
++.\"
++.\" ----------------------------------------------------------------------
+--- libsgmls-perl-1.03ii.orig/sgmlspl
++++ libsgmls-perl-1.03ii/sgmlspl
+@@ -0,0 +1,323 @@
++#!/usr/bin/perl
++########################################################################
++# sgmlspl: a simple SGML postprocesser for the SGMLS and NSGMLS
++# parsers (requires SGMLS.pm library).
++#
++# Copyright (c) 1995 by David Megginson <dmeggins@aix1.uottawa.ca>
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++#
++# $Log: sgmlspl,v $
++# Revision 1.1 2004/02/23 01:23:07 ardo
++# Added debian changes for version 1.03ii-27.
++#
++# Revision 1.1 2001/04/15 14:42:01 ardo
++# *** empty log message ***
++#
++# Revision 1.8 1995/12/03 21:46:31 david
++# Eliminated all use of the SGMLS_Event::key method.
++#
++# Revision 1.7 1995/11/15 20:22:24 david
++# Changed "use Output" to "use SGMLS::Output". Qualified the STDIN
++# filehandle for the SGMLS object with the main:: package name.
++#
++# Revision 1.6 1995/08/12 16:15:14 david
++# Revised version for 1.01 distribution.
++#
++# Revision 1.5 1995/04/27 11:52:25 david
++# Changed 'print' to 'main::output' for re handler; empty string
++# translates into an empty sub {} rather than a sub printing an empty
++# string; instead of evaluating every argument as a perl script, take
++# only the first as a perl script and the rest as its arguments; allow
++# empty scripts or scripts which do not end with '1;'; pass the event
++# itself as the second argument to each handler, after the event data.
++#
++# Revision 1.4 1995/04/23 14:44:58 david
++# Use the Output package. Fixed the $version variable.
++#
++# Revision 1.3 1995/04/22 21:02:49 david
++# Added some missing 'last SWITCH;' statements in the sgmls function.
++#
++# Revision 1.2 1995/04/22 20:58:48 david
++# Added $SGMLS_PL::version variable and changed SDATA notation from
++# [SDATA] to |SDATA|.
++#
++# Revision 1.1 1995/04/22 14:40:50 david
++# Initial revision
++#
++########################################################################
++
++use SGMLS::Output;
++
++package SGMLS_PL;
++use SGMLS;
++
++$version = '$Id: sgmlspl,v 1.1 2004/02/23 01:23:07 ardo Exp $';
++
++#
++# Set up handler defaults.
++#
++$start_document_handler = sub {};
++$end_document_handler = sub {};
++$start_element_handlers = { '' => sub {} };
++$end_element_handlers = { '' => sub {} };
++$cdata_handler = sub { main::output($_[0]); };
++$sdata_handlers = { '' => sub { main::output($_[0]);} };
++$re_handler = sub { main::output("\n"); };
++$pi_handler = sub { '' => sub {} };
++$entity_handlers = { '' => sub {} };
++$start_subdoc_handlers = { '' => sub {} };
++$end_subdoc_handlers = { '' => sub {} };
++$conforming_handler = sub {};
++
++#
++# Main access point: declare handlers for different SGML events.
++#
++# Usage: sgml(event, handler);
++#
++# The event may be one of the following strings, or a special pattern.
++# The generic events are as follow:
++#
++# 'start' The beginning of the document.
++# 'end' The end of the document.
++# 'start_element' The beginning of an element.
++# 'end_element' The end of an element.
++# 'cdata' Regular character data.
++# 'sdata' Special system-specific data.
++# 're' A record-end.
++# 'pi' A processing instruction.
++# 'entity' An external-entity reference.
++# 'start_subdoc' The beginning of a subdocument entity.
++# 'end_subdoc' The end of a subdocument entity.
++# 'conforming' The document is conforming.
++#
++# In addition to these generic events, it is possible to handlers
++# for certain specific, named events, as follow:
++#
++# '<GI>' The beginning of element GI.
++# '</GI>' The end of element GI.
++# '[SDATA]' The system-specific data SDATA.
++# '&ENAME;' A reference to the external entity ENAME.
++# '{ENAME}' The beginning of the subdocument-entity ENAME.
++# '{/ENAME}' The end of the subdocument-entity ENAME.
++#
++#
++# The handler may be a string, which will simply be printed when the
++# event occurs (this is usually useful only for the specific, named
++# events), or a reference to an anonymous subroutine, which will
++# receive two arguments: the event data and the event itself. For
++# example,
++#
++# sgml('<FOO>', "\n\\begin{foo}\n");
++#
++# and
++#
++# sgml('<FOO>', sub { output("\n\\begin{foo}\n"); });
++#
++# will have identical results.
++#
++sub main::sgml {
++ my ($spec,$handler) = (@_);
++ if (ref($handler) ne 'CODE') {
++ $handler =~ s/\\/\\\\/g;
++ $handler =~ s/'/\\'/g;
++ if ($handler eq '') {
++ $handler = sub {};
++ } else {
++ $handler = eval "sub { main::output('$handler'); };";
++ }
++ }
++ SWITCH: {
++ # start-document handler
++ $spec eq 'start' && do {
++ $start_document_handler = $handler;
++ last SWITCH;
++ };
++ # end-document handler
++ $spec eq 'end' && do {
++ $end_document_handler = $handler;
++ last SWITCH;
++ };
++ # start-element handler
++ $spec =~ /^<([^\/].*|)>$/ && do {
++ $start_element_handlers->{$1} = $handler;
++ last SWITCH;
++ };
++ # generic start-element handler
++ $spec eq 'start_element' && do {
++ $start_element_handlers->{''} = $handler;
++ last SWITCH;
++ };
++ # end-element handler
++ $spec =~ /^<\/(.*)>$/ && do {
++ $end_element_handlers->{$1} = $handler;
++ last SWITCH;
++ };
++ # generic end-element handler
++ $spec =~ 'end_element' && do {
++ $end_element_handlers->{''} = $handler;
++ last SWITCH;
++ };
++ # cdata handler
++ $spec eq 'cdata' && do {
++ $cdata_handler = $handler;
++ last SWITCH;
++ };
++ # sdata handler
++ $spec =~ /^\|(.*)\|$/ && do {
++ $sdata_handlers->{$1} = $handler;
++ last SWITCH;
++ };
++ # generic sdata handler
++ $spec eq 'sdata' && do {
++ $sdata_handlers->{''} = $handler;
++ last SWITCH;
++ };
++ # record-end handler
++ $spec eq 're' && do {
++ $re_handler = $handler;
++ last SWITCH;
++ };
++ # processing-instruction handler
++ $spec eq 'pi' && do {
++ $pi_handler = $handler;
++ last SWITCH;
++ };
++ # entity-reference handler
++ $spec =~ /^\&(.*);$/ && do {
++ $entity_handlers->{$1} = $handler;
++ last SWITCH;
++ };
++ # generic entity-reference handler
++ $spec eq 'entity' && do {
++ $entity_handlers->{''} = $handler;
++ last SWITCH;
++ };
++ # start-subdoc handler
++ $spec =~ /^\{([^\/].*|)\}$/ && do {
++ $start_subdoc_handlers->{$1} = $handler;
++ last SWITCH;
++ };
++ # generic start-subdoc handler
++ $spec eq 'start_subdoc' && do {
++ $start_subdoc_handlers->{''} = $handler;
++ last SWITCH;
++ };
++ # end-subdoc handler
++ $spec =~ /^\{\/(.*)\}$/ && do {
++ $end_subdoc_handlers->{$1} = $handler;
++ last SWITCH;
++ };
++ # generic end-subdoc handler
++ $spec eq 'end_subdoc' && do {
++ $end_subdoc_handlers->{''} = $handler;
++ last SWITCH;
++ };
++ # conforming handler
++ $spec eq 'conforming' && do {
++ $conforming_handler = $handler;
++ last SWITCH;
++ };
++
++ die "Bad SGML handler pattern: $spec\n";
++ }
++}
++
++
++#
++# The first argument on the command line is a perl module which will be
++# read here and evaluated in the 'main' package -- everything else will
++# be an argument to it.
++#
++package main;
++
++$ARGV = shift;
++unless ($ARGV eq '' || do 'sgmlspl-specs/' . $ARGV || do $ARGV) {
++ if (!-e $ARGV) {
++ die "FATAL: $ARGV does not exist.\n";
++ } elsif (!-r $ARGV) {
++ die "FATAL: $ARGV exists but is read-protected.\n";
++ } elsif ($@) {
++ die "FATAL: $@\n";
++ }
++}
++
++
++#
++# Do the actual work, using the SGMLS package.
++#
++package SGMLS_PL;
++
++$parse = new SGMLS(main::STDIN); # a new parse object
++
++&{$start_document_handler}(); # run the start handler.
++
++ # run the appropriate handler for each
++ # event
++while ($event = $parse->next_event) {
++ my $type = $event->type;
++ SWITCH: {
++ $type eq 'start_element' && do {
++ &{($start_element_handlers->{$event->data->name}||
++ $start_element_handlers->{''} || sub {})}($event->data,$event);
++ last SWITCH;
++ };
++ $type eq 'end_element' && do {
++ &{($end_element_handlers->{$event->data->name}||
++ $end_element_handlers->{''} || sub {})}($event->data,$event);
++ last SWITCH;
++ };
++ $type eq 'cdata' && do {
++ &{$cdata_handler}($event->data,$event);
++ last SWITCH;
++ };
++ $type eq 'sdata' && do {
++ &{($sdata_handlers->{$event->data}||
++ $sdata_handlers->{''} || sub {})}($event->data,$event);
++ last SWITCH;
++ };
++ $type eq 're' && do {
++ &{$re_handler}($event->data,$event);
++ last SWITCH;
++ };
++ $type eq 'pi' && do {
++ &{$pi_handler}($event->data,$event);
++ last SWITCH;
++ };
++ $type eq 'entity' && do {
++ &{($entity_handlers->{$event->data->name}||
++ $entity_handlers->{''} || sub {})}($event->data,$event);
++ last SWITCH;
++ };
++ $type eq 'start_subdoc' && do {
++ &{($start_subdoc_handlers->{$event->data->name}||
++ $start_subdoc_handlers->{''} || sub {})}($event->data,$event);
++ last SWITCH;
++ };
++ $type eq 'end_subdoc' && do {
++ &{($end_subdoc_handlers->{$event->data->name}||
++ $end_subdoc_handlers->{''} || sub {})}($event->data,$event);
++ last SWITCH;
++ };
++ $type eq 'conforming' && do {
++ &{$conforming_handler}($event->data,$event);
++ last SWITCH;
++ };
++
++ die "Unknown SGML event type: $type\n";
++ }
++}
++
++&{$end_document_handler}(); # run the end handler
+--- libsgmls-perl-1.03ii.orig/sgmlspl.pl
++++ libsgmls-perl-1.03ii/sgmlspl.pl
+@@ -238,7 +238,7 @@
+ package main;
+
+ $ARGV = shift;
+-unless ($ARGV eq '' || do $ARGV) {
++unless ($ARGV eq '' || do 'sgmlspl-specs/' . $ARGV || do $ARGV) {
+ if (!-e $ARGV) {
+ die "FATAL: $ARGV does not exist.\n";
+ } elsif (!-r $ARGV) {
+--- libsgmls-perl-1.03ii.orig/SGMLS.pm
++++ libsgmls-perl-1.03ii/SGMLS.pm
+@@ -1,7 +1,7 @@
+ package SGMLS;
+ use Carp;
+
+-$version = '$Revision: 1.14 $';
++$version = '$Revision: 1.1 $';
+
+ =head1 NAME
+
diff --git a/packages/sgmlspl/sgmlspl-native_1.03ii.bb b/packages/sgmlspl/sgmlspl-native_1.03ii.bb
new file mode 100644
index 0000000000..2f9edf11de
--- /dev/null
+++ b/packages/sgmlspl/sgmlspl-native_1.03ii.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "A simple post-processor for SGMLS and NSGMLS"
+HOMEPAGE = "http://search.cpan.org/src/DMEGG/SGMLSpm-1.03ii/DOC/HTML/SGMLSpm/sgmlspm.html"
+SECTION = "libs"
+LICENSE = "GPL"
+
+SRC_URI = "http://www.cpan.org/authors/id/D/DM/DMEGG/SGMLSpm-${PV}.tar.gz \
+ file://combined.patch;patch=1"
+
+S = "${WORKDIR}/SGMLSpm"
+
+inherit native cpan
+
+do_install() {
+ :
+}
+
+do_stage() {
+ oe_runmake install_vendor
+}
+
+PACKAGES = "${PN}-dbg "
diff --git a/packages/shared-mime-info/shared-mime-info.inc b/packages/shared-mime-info/shared-mime-info.inc
index 3e591ad2d6..a5176a7bf1 100644
--- a/packages/shared-mime-info/shared-mime-info.inc
+++ b/packages/shared-mime-info/shared-mime-info.inc
@@ -1,6 +1,6 @@
SECTION = "base"
LICENSE = "GPL"
-DEPENDS = "libxml2 intltool-native"
+DEPENDS = "libxml2 intltool-native glib-2.0"
PR = "r0"
SRC_URI = "http://freedesktop.org/~hadess/shared-mime-info-${PV}.tar.bz2"
diff --git a/packages/shared-mime-info/shared-mime-info_0.22.bb b/packages/shared-mime-info/shared-mime-info_0.22.bb
index f24008ec13..6d3b760390 100644
--- a/packages/shared-mime-info/shared-mime-info_0.22.bb
+++ b/packages/shared-mime-info/shared-mime-info_0.22.bb
@@ -1,2 +1,3 @@
require shared-mime-info.inc
+PR = "r1"
diff --git a/packages/sip/sip-native_4.7.1.bb b/packages/sip/sip-native_4.7.3.bb
index b47a3a7539..b47a3a7539 100644
--- a/packages/sip/sip-native_4.7.1.bb
+++ b/packages/sip/sip-native_4.7.3.bb
diff --git a/packages/slugos-init/files/leds b/packages/slugos-init/files/leds
index 8043dae682..1beb013c5f 100644
--- a/packages/slugos-init/files/leds
+++ b/packages/slugos-init/files/leds
@@ -12,17 +12,9 @@ leds) ;;
esac
#
-# led_set led-dir off|on|slow|fast|panic|blink|flash|user|*
+# led_set led-dir off|on|slow|fast|panic|blink|flash|*
# set the given LED (expressed as a directory) to the
-# given status. USER_LED may be set to indicate how to
-# handle the 'user' setting.
-led_user_default(){
- case "$(machine)" in
- nslu2) echo -n "cpu-idle";;
- nas100d) echo -n "on";;
- *) echo -n "cpu";;
- esac
-}
+# given status.
#
led_set(){
local setting
@@ -31,15 +23,6 @@ led_set(){
then
setting="$2"
case "$setting" in
- user) if test -n "$USER_LED"
- then
- setting="$USER_LED"
- else
- setting="$(led_user_default)"
- fi;;
- esac
-
- case "$setting" in
off|on) echo -n none
case "$setting" in
@@ -66,11 +49,6 @@ led_set(){
panic) echo -n 3000;;
esac >"$1/delay_off";;
- cpu-idle) echo -n cpu
- # these settings work well on NSLU2
- echo -n on >"$1/idle"
- echo -n flash >"$1/active";;
-
*) echo -n "$setting";;
esac >"$1/trigger"
else
@@ -129,6 +107,28 @@ sysled_ready(){
led_set "$1/ready" "$ready"
}
#
+# the cases for one blue flashing LED (just power)
+sysled_power(){
+ local power
+ # expect dir [boot](system|user) [error|panic]
+ case "$3" in
+ error) power=off;;
+ panic) power=off;;
+ *) case "$2" in
+ bootsystem) power=off;; # blinking
+ system) power=off;; # blinking
+ bootuser) power=on;;
+ user) power=on;;
+ bootsingleuser) power=off;; # blinking
+ singleuser) power=off;; # blinking
+ bootshutdown) power=off;; # blinking
+ shutdown) power=off;; # blinking
+ esac;;
+ esac
+
+ led_set "$1/power" "$power"
+}
+#
sysled(){
local mp st boot isst
mp=/sys
@@ -153,7 +153,7 @@ sysled(){
mp=/mnt
fi
#
- # check for the 'ready' LED - otherwise do nothing
+ # check for the 'ready' LED - otherwise check for a 'power' LED
if test -d "$mp/class/leds/ready"
then
if test -d "$mp/class/leds/status"
@@ -162,6 +162,11 @@ sysled(){
else
sysled_ready "$mp/class/leds" $boot"$@"
fi
+ else
+ if test -d "$mp/class/leds/power"
+ then
+ sysled_power "$mp/class/leds" $boot"$@"
+ fi
fi
#
# clean up
@@ -200,11 +205,8 @@ leds_help(){
echo " the new state. 'error' or 'panic' means a (potentially)" >&2
echo " recoverable error or an unrecoverable error ('panic') has" >&2
echo " occured." >&2
- echo " <led> off|on|slow|fast|panic|blink|flash|user|cpu|cpu-idle" >&2
- echo " set the named led to the given display, an arbitrary led" >&2
- echo " trigger may be given. 'user' will use the default specified" >&2
- echo " in USER_LED from /etc/default/rcS, if not specified a cpu" >&2
- echo " activity setting appropriate to the machine is selected" >&2
+ echo " <led> off|on|slow|fast|panic|blink|flash" >&2
+ echo " set the named led to the given display." >&2
echo " beep {args}" >&2
echo " if possible cause the machine to emit a beep" >&2
}
diff --git a/packages/slugos-init/slugos-init_0.10.bb b/packages/slugos-init/slugos-init_0.10.bb
index 247578bab3..2523e2e703 100644
--- a/packages/slugos-init/slugos-init_0.10.bb
+++ b/packages/slugos-init/slugos-init_0.10.bb
@@ -142,7 +142,6 @@ pkg_postrm_slugos-init() {
done
}
-PACKAGES = "${PN}"
FILES_${PN} = "/"
# It is bad to overwrite /linuxrc as it puts the system back to
diff --git a/packages/slugos-init/slugos-init_4.8.bb b/packages/slugos-init/slugos-init_4.8.bb
new file mode 100644
index 0000000000..92ac7e30f3
--- /dev/null
+++ b/packages/slugos-init/slugos-init_4.8.bb
@@ -0,0 +1,148 @@
+DESCRIPTION = "SlugOS initial network config via sysconf"
+SECTION = "base"
+PRIORITY = "required"
+LICENSE = "GPL"
+DEPENDS = "base-files devio"
+RDEPENDS = "busybox devio"
+PR = "r1"
+
+SRC_URI = "file://boot/flash \
+ file://boot/disk \
+ file://boot/nfs \
+ file://boot/ram \
+ file://boot/kexec \
+ file://boot/network \
+ file://boot/udhcpc.script \
+ file://initscripts/fixfstab \
+ file://initscripts/syslog.buffer \
+ file://initscripts/syslog.file \
+ file://initscripts/syslog.network \
+ file://initscripts/zleds \
+ file://initscripts/leds_startup \
+ file://initscripts/rmrecovery \
+ file://initscripts/sysconfsetup \
+ file://initscripts/umountinitrd.sh \
+ file://initscripts/loadmodules.sh \
+ file://functions \
+ file://modulefunctions \
+ file://conffiles \
+ file://sysconf \
+ file://leds \
+ file://turnup \
+ "
+
+SBINPROGS = ""
+USRSBINPROGS = ""
+CPROGS = "${USRSBINPROGS} ${SBINPROGS}"
+SCRIPTS = "turnup leds sysconf"
+BOOTSCRIPTS = "flash disk nfs ram kexec network udhcpc.script"
+INITSCRIPTS = "syslog.buffer syslog.file syslog.network zleds\
+ leds_startup rmrecovery sysconfsetup umountinitrd.sh\
+ fixfstab loadmodules.sh"
+
+# This just makes things easier...
+S="${WORKDIR}"
+
+do_compile() {
+ set -ex
+ for p in ${CPROGS}
+ do
+ ${CC} ${CFLAGS} -o $p $p.c
+ done
+ set +ex
+}
+
+do_install() {
+ set -ex
+
+ # Directories
+ install -d ${D}${sysconfdir} \
+ ${D}${sysconfdir}/default \
+ ${D}${sysconfdir}/init.d \
+ ${D}${sysconfdir}/modutils \
+ ${D}${sysconfdir}/udev \
+ ${D}${sbindir} \
+ ${D}${base_sbindir} \
+ ${D}/initrd \
+ ${D}/boot
+
+ # linuxrc
+ rm -f ${D}/linuxrc
+ ln -s boot/flash ${D}/linuxrc
+
+ # C programs
+ for p in ${USRSBINPROGS}
+ do
+ install -m 0755 $p ${D}${sbindir}/$p
+ done
+ for p in ${SBINPROGS}
+ do
+ install -m 0755 $p ${D}${base_sbindir}/$p
+ done
+
+ # Shell scripts
+ for p in ${SCRIPTS}
+ do
+ install -m 0755 $p ${D}${base_sbindir}/$p
+ done
+
+ #
+ # Init scripts
+ install -m 0644 functions ${D}${sysconfdir}/default
+ install -m 0644 modulefunctions ${D}${sysconfdir}/default
+ for s in ${INITSCRIPTS}
+ do
+ install -m 0755 initscripts/$s ${D}${sysconfdir}/init.d/
+ done
+
+ #
+ # Boot scripts
+ for p in ${BOOTSCRIPTS}
+ do
+ install -m 0755 boot/$p ${D}/boot
+ done
+
+ # Configuration files
+ install -m 0644 conffiles ${D}${sysconfdir}/default
+
+ set +ex
+}
+
+# If the package is installed on an NSLU2 $D will be empty, in that
+# case it is normal to run 'start' and 'stop', but because the conf
+# files installed don't actually start or stop anything this is
+# unnecessary, so the package postfoo handling is simplified here.
+#NB: do not use '08' (etc) for the first argument after start/stop,
+# the value is interpreted as an octal number if there is a leading
+# zero.
+pkg_postinst_slugos-init() {
+ opt=
+ test -n "$D" && opt="-r $D"
+ update-rc.d $opt hwclock.sh start 8 S . start 45 0 6 .
+ update-rc.d $opt umountinitrd.sh start 9 S .
+ update-rc.d $opt fixfstab start 10 S .
+ update-rc.d $opt syslog.buffer start 11 S . start 49 0 6 .
+ update-rc.d $opt sysconfsetup start 12 S .
+ update-rc.d $opt loadmodules.sh start 21 S .
+ update-rc.d $opt syslog.file start 39 S . start 47 0 6 .
+ update-rc.d $opt syslog.network start 44 S . start 39 0 6 .
+ update-rc.d $opt zleds start 99 S 1 2 3 4 5 . start 89 0 6 . stop 5 0 1 2 3 4 5 6 .
+ update-rc.d $opt rmrecovery start 99 1 2 3 4 5 .
+ # bug fix for startup
+ update-rc.d $opt leds_startup start 1 1 2 3 4 5 .
+}
+
+pkg_postrm_slugos-init() {
+ opt=
+ test -n "$D" && opt="-r $D"
+ for s in ${INITSCRIPTS}
+ do
+ update-rc.d $opt "$s" remove
+ done
+}
+
+FILES_${PN} = "/"
+
+# It is bad to overwrite /linuxrc as it puts the system back to
+# a flash boot (and the flash has potentially not been upgraded!)
+CONFFILES_${PN} = "/linuxrc ${sysconfdir}/default/conffiles"
diff --git a/packages/slutils/slutils_0.1.0.bb b/packages/slutils/slutils_0.1.0.bb
index 67d760cecb..8b7d6f6ce9 100644
--- a/packages/slutils/slutils_0.1.0.bb
+++ b/packages/slutils/slutils_0.1.0.bb
@@ -26,7 +26,7 @@ do_fetch() {
do_configure_prepend() {
cd ${S}/
- echo -e "TEMPLATE=subdirs\nSUBDIRS=${UTILS}\n" >slutils.pro
+ printf "TEMPLATE=subdirs\nSUBDIRS=${UTILS}\n" >slutils.pro
}
do_install() {
diff --git a/packages/spandsp/spandsp_0.0.3+0.0.4pre16.bb b/packages/spandsp/spandsp_0.0.3+0.0.4pre16.bb
new file mode 100644
index 0000000000..bbb1c0c3b2
--- /dev/null
+++ b/packages/spandsp/spandsp_0.0.3+0.0.4pre16.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "A library of many DSP functions for telephony."
+HOMEPAGE = "http://www.soft-switch.org"
+DEPENDS = "tiff libxml2"
+SECTION = "voip"
+LICENSE = "GPL"
+
+PR = "r0"
+
+SRC_URI = "http://www.soft-switch.org/downloads/spandsp/spandsp-0.0.4pre16.tgz"
+
+S = "${WORKDIR}/spandsp-0.0.4"
+
+inherit autotools pkgconfig
+
+PARALLEL_MAKE = ""
+
+# *cough*
+do_configure_append() {
+ rm config.log
+}
+
+do_stage () {
+ autotools_stage_all
+}
diff --git a/packages/spandsp/spandsp_0.0.3+0.0.4pre3.bb b/packages/spandsp/spandsp_0.0.3+0.0.4pre3.bb
deleted file mode 100644
index 97740c0aaf..0000000000
--- a/packages/spandsp/spandsp_0.0.3+0.0.4pre3.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-DESCRIPTION = "A library of many DSP functions for telephony."
-HOMEPAGE = "http://www.soft-switch.org"
-DEPENDS = "tiff libxml2"
-SECTION = "voip"
-LICENSE = "GPL"
-
-PR = "r0"
-
-SRC_URI = "http://www.soft-switch.org/downloads/spandsp/spandsp-0.0.4pre3.tgz"
-
-S = "${WORKDIR}/spandsp-0.0.4"
-
-inherit autotools pkgconfig
-
-PARALLEL_MAKE = ""
-
-# *cough*
-do_configure_append() {
- rm config.log
-}
-
-do_stage () {
- autotools_stage_all
-}
diff --git a/packages/spandsp/spandsp_0.0.3.bb b/packages/spandsp/spandsp_0.0.3.bb
index 26702f998b..ec5b6aa784 100644
--- a/packages/spandsp/spandsp_0.0.3.bb
+++ b/packages/spandsp/spandsp_0.0.3.bb
@@ -1,18 +1,21 @@
DESCRIPTION = "A library of many DSP functions for telephony."
HOMEPAGE = "http://www.soft-switch.org"
-DEPENDS = "tiff libxml2"
SECTION = "voip"
LICENSE = "GPL"
-PV = "0.0.3"
-PSUBV = "pre27"
-PR = "r0"
+DEPENDS = "tiff libxml2"
+PR = "r1"
-SRC_URI = "http://www.soft-switch.org/downloads/snapshots/spandsp/spandsp-20070123.tar.gz"
+SRC_URI = "http://www.soft-switch.org/downloads/spandsp/spandsp-${PV}.tgz"
inherit autotools
PARALLEL_MAKE = ""
+# *cough*
+do_configure_append() {
+ rm config.log
+}
+
do_stage () {
autotools_stage_all
}
diff --git a/packages/speech-dispatcher/.mtn2git_empty b/packages/speech-dispatcher/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/speech-dispatcher/.mtn2git_empty
diff --git a/packages/speech-dispatcher/files/.mtn2git_empty b/packages/speech-dispatcher/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/speech-dispatcher/files/.mtn2git_empty
diff --git a/packages/speech-dispatcher/files/configSpeechd.conf.in_00.patch b/packages/speech-dispatcher/files/configSpeechd.conf.in_00.patch
new file mode 100644
index 0000000000..72b5e3126a
--- /dev/null
+++ b/packages/speech-dispatcher/files/configSpeechd.conf.in_00.patch
@@ -0,0 +1,31 @@
+--- speech-dispatcher-0.6.5/config/speechd.conf.in.orig 2008-01-05 16:38:53.000000000 +0000
++++ speech-dispatcher-0.6.5/config/speechd.conf.in 2008-01-05 16:40:45.000000000 +0000
+@@ -36,7 +36,7 @@
+ # DO NOT COMMENT OUT THIS OPTION, SET IT TO "default" if you do not
+ # want to influence it.
+
+-LogDir "default"
++LogDir "/var/log/"
+ #LogDir "/var/log/speech-dispatcher/"
+ #LogDir "stdout"
+
+@@ -129,8 +129,8 @@
+ # - configuration is the path to the config file of this module,
+ # either relative (to etc/speechd/modules/) or absolute
+
+-AddModule "espeak" "sd_espeak" "espeak.conf"
+-AddModule "festival" "sd_festival" "festival.conf"
++AddModule "espeak" "sd_espeak" "/etc/speech-dispatcher/modules/espeak.conf"
++#AddModule "festival" "sd_festival" "festival.conf"
+ AddModule "flite" "sd_flite" "flite.conf"
+ #AddModule "espeak-generic" "sd_generic" "espeak-generic.conf"
+ #AddModule "epos-generic" "sd_generic" "epos-generic.conf"
+@@ -172,6 +172,6 @@
+
+ # There are some sample client settings
+
+-Include "clients/emacs.conf"
+-Include "clients/gnome-speech.conf"
++#Include "clients/emacs.conf"
++#Include "clients/gnome-speech.conf"
+
diff --git a/packages/speech-dispatcher/files/speech-dispatcher.init b/packages/speech-dispatcher/files/speech-dispatcher.init
new file mode 100644
index 0000000000..c3be5d8385
--- /dev/null
+++ b/packages/speech-dispatcher/files/speech-dispatcher.init
@@ -0,0 +1,42 @@
+#! /bin/sh
+
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/bin/speech-dispatcher
+PIDFILE=/var/run/speech-dispatcher.pid
+NAME=speech-dispatcher
+DESC='Speech Dispatcher'
+USER=speech-dispatcher
+
+test -f $DAEMON || exit 0
+
+set -e
+
+case "$1" in
+ start)
+ echo "Starting $NAME"
+ start-stop-daemon --start --quiet --pidfile $PIDFILE \
+ --exec $DAEMON
+
+ ;;
+ stop)
+ echo "Stopping $NAME"
+ start-stop-daemon --oknodo --stop --quiet \
+ --pidfile $PIDFILE --exec $DAEMON
+ ;;
+ restart)
+ echo "Restarting $NAME"
+ start-stop-daemon --oknodo --stop --quiet \
+ --pidfile $PIDFILE --exec $DAEMON
+ sleep 3
+ start-stop-daemon --start --quiet --pidfile $PIDFILE \
+ --exec $DAEMON
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/packages/speech-dispatcher/files/srcMakefile.am.patch b/packages/speech-dispatcher/files/srcMakefile.am.patch
new file mode 100644
index 0000000000..7fdadec571
--- /dev/null
+++ b/packages/speech-dispatcher/files/srcMakefile.am.patch
@@ -0,0 +1,60 @@
+diff -aurp speech-dispatcher-0.6.5/src.old/audio/Makefile.am speech-dispatcher-0.6.5/src/audio/Makefile.am
+--- speech-dispatcher-0.6.5/src.old/audio/Makefile.am 2008-01-02 17:06:47.000000000 -0600
++++ speech-dispatcher-0.6.5/src/audio/Makefile.am 2008-01-02 17:07:16.000000000 -0600
+@@ -2,7 +2,7 @@
+ localedir = $(datadir)/locale
+ inc_local = "-I$(top_srcdir)/intl/"
+
+-am_cflags = -DLOCALEDIR=\"$(localedir)\" -I/usr/include/ $(inc_local) @glib_include@ -DWITH_OSS
++am_cflags = -DLOCALEDIR=\"$(localedir)\" $(inc_local) @glib_include@ -DWITH_OSS
+
+ if nas_support
+ NAS_FLAGS = -DWITH_NAS
+diff -aurp speech-dispatcher-0.6.5/src.old/c/api/Makefile.am speech-dispatcher-0.6.5/src/c/api/Makefile.am
+--- speech-dispatcher-0.6.5/src.old/c/api/Makefile.am 2008-01-02 17:06:47.000000000 -0600
++++ speech-dispatcher-0.6.5/src/c/api/Makefile.am 2008-01-02 17:07:39.000000000 -0600
+@@ -2,7 +2,7 @@
+ localedir = $(datadir)/locale
+ inc_local = "-I$(top_srcdir)/intl/"
+
+-AM_CFLAGS = -Wall -DLOCALEDIR=\"$(localedir)\" -I/usr/include/ $(inc_local) @glib_include@
++AM_CFLAGS = -Wall -DLOCALEDIR=\"$(localedir)\" $(inc_local) @glib_include@
+
+ lib_LTLIBRARIES = libspeechd.la
+ libspeechd_la_SOURCES = libspeechd.c
+diff -aurp speech-dispatcher-0.6.5/src.old/c/clients/say/Makefile.am speech-dispatcher-0.6.5/src/c/clients/say/Makefile.am
+--- speech-dispatcher-0.6.5/src.old/c/clients/say/Makefile.am 2008-01-02 17:06:47.000000000 -0600
++++ speech-dispatcher-0.6.5/src/c/clients/say/Makefile.am 2008-01-02 17:08:09.000000000 -0600
+@@ -3,7 +3,7 @@ localedir = $(datadir)/locale
+ inc_local = "-I$(top_srcdir)/intl/"
+ c_api = $(top_srcdir)/src/c/api
+
+-AM_CFLAGS = -DLOCALEDIR=\"$(localedir)\" -I/usr/include/ $(inc_local) @glib_include@ -I$(c_api)
++AM_CFLAGS = -DLOCALEDIR=\"$(localedir)\" $(inc_local) @glib_include@ -I$(c_api)
+
+ bin_PROGRAMS = spd-say
+ spd_say_SOURCES = say.c options.c options.h $(c_api)/libspeechd.h
+diff -aurp speech-dispatcher-0.6.5/src.old/modules/Makefile.am speech-dispatcher-0.6.5/src/modules/Makefile.am
+--- speech-dispatcher-0.6.5/src.old/modules/Makefile.am 2008-01-02 17:06:47.000000000 -0600
++++ speech-dispatcher-0.6.5/src/modules/Makefile.am 2008-01-02 17:12:41.000000000 -0600
+@@ -7,7 +7,7 @@ SNDFILE_LIBS = @SNDFILE_LIBS@
+
+ EXTRA_DIST = module_main.c module_utils_addvoice.c festival_client.c festival_client.h
+
+-AM_CFLAGS = -Wall -DLOCALEDIR=\"$(localedir)\" -I/usr/include/ $(inc_local) @glib_include@ -L$(top_srcdir)/src/audio -I$(top_srcdir)/src/audio -I../../intl/ $(ibmtts_include) @SNDFILE_CFLAGS@ -Wl,--rpath -Wl,$(spdlibdir)
++AM_CFLAGS = -Wall -DLOCALEDIR=\"$(localedir)\" $(inc_local) @glib_include@ -L$(top_srcdir)/src/audio -I$(top_srcdir)/src/audio -I../../intl/ $(ibmtts_include) @SNDFILE_CFLAGS@ -Wl,--rpath -Wl,$(spdlibdir)
+
+ if flite_support
+ if ibmtts_support
+diff -aurp speech-dispatcher-0.6.5/src.old/tests/Makefile.am speech-dispatcher-0.6.5/src/tests/Makefile.am
+--- speech-dispatcher-0.6.5/src.old/tests/Makefile.am 2008-01-02 17:06:47.000000000 -0600
++++ speech-dispatcher-0.6.5/src/tests/Makefile.am 2008-01-02 17:13:55.000000000 -0600
+@@ -3,7 +3,7 @@ localedir = $(datadir)/locale
+ inc_local = "-I$(top_srcdir)/intl/"
+ c_api = $(top_srcdir)/src/c/api
+
+-AM_CFLAGS = -I$(c_api) -DLOCALEDIR=\"$(localedir)\" -I/usr/include/ $(inc_local) @glib_include@ -I../audio/
++AM_CFLAGS = -I$(c_api) -DLOCALEDIR=\"$(localedir)\" $(inc_local) @glib_include@ -I../audio/
+
+ bin_PROGRAMS = long_message clibrary run_test
+
diff --git a/packages/speech-dispatcher/speech-dispatcher_0.6.5.bb b/packages/speech-dispatcher/speech-dispatcher_0.6.5.bb
new file mode 100644
index 0000000000..3857a1577a
--- /dev/null
+++ b/packages/speech-dispatcher/speech-dispatcher_0.6.5.bb
@@ -0,0 +1,56 @@
+DESCRIPTION = "Speech Dispatcher is a high-level device independent layer \
+for speech synthesis through a simple, stable and well documented interface."
+HOMEPAGE = "http://www.freebsoft.org/speechd/"
+LICENSE = "GPLv2"
+DEPENDS = "espeak flite pulseaudio libdotconf glib-2.0"
+RPROVIDES_${PN} += "speechd"
+
+PR = "r7"
+
+inherit autotools update-rc.d
+
+SRC_URI = "http://www.freebsoft.org/pub/projects/speechd/${PN}-${PV}.tar.gz \
+ file://speech-dispatcher.init \
+ file://srcMakefile.am.patch;patch=1 \
+ file://configSpeechd.conf.in_00.patch;patch=1"
+
+LEAD_SONAME = "libspeechd.so"
+EXTRA_OECONF = " --with-espeak=yes --with-flite=yes --with-ibmtts=no --with-nas=no --with-alsa=yes --with-pulse=yes "
+
+INITSCRIPT_NAME = "speech-dispatcher"
+INITSCRIPT_PARAMS = "defaults 45"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -d ${D}${includedir}
+ install -d ${D}${libdir}/${PN}-modules
+ install -d ${D}${sysconfdir}
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${sysconfdir}/speech-dispatcher
+ install -d ${D}${sysconfdir}/speech-dispatcher/modules
+
+ oe_libinstall -so -C src/audio libsdaudio ${D}${libdir}
+ oe_libinstall -so -C src/c/api libspeechd ${D}${libdir}
+
+ install -m 0644 ${S}/src/c/api/libspeechd.h ${D}${includedir}
+ install -m 0755 ${S}/src/c/clients/say/.libs/spd-say ${D}${bindir}
+ install -m 0755 ${S}/src/server/.libs/speech-dispatcher ${D}${bindir}
+ install -m 0755 ${S}/src/modules/.libs/sd_* ${D}${libdir}/${PN}-modules/
+
+ install -m 0644 ${S}/config/speechd.conf ${D}${sysconfdir}/speech-dispatcher
+ install -m 0644 ${S}/config/modules/*.conf ${D}${sysconfdir}/speech-dispatcher/modules
+ install -m 0755 ${WORKDIR}/speech-dispatcher.init ${D}${sysconfdir}/init.d/speech-dispatcher
+}
+
+do_stage() {
+ install -m 0644 ${S}/src/c/api/libspeechd.h ${STAGING_INCDIR}
+ oe_libinstall -so -C src/c/api libspeechd ${STAGING_LIBDIR}
+}
+
+PACKAGES =+ "libspeechd-dbg libspeechd libspeechd-dev"
+
+FILES_${PN} += "${libdir}/${PN}-modules/*"
+FILES_${PN}-dbg += "${libdir}/${PN}-modules/.debug"
+FILES_libspeechd += "${libdir}/libspeechd.so.*"
+FILES_libspeechd-dev += "${libdir}/libspeechd* ${includedir}"
+FILES_libspeechd-dbg += "${libdir}/.debug/libspeechd*"
diff --git a/packages/speex/speex_1.0.4.bb b/packages/speex/speex_1.0.4.bb
index e96c249f81..e1af8d18da 100644
--- a/packages/speex/speex_1.0.4.bb
+++ b/packages/speex/speex_1.0.4.bb
@@ -22,5 +22,6 @@ do_stage() {
install -m 0644 include/speex/speex_callbacks.h ${STAGING_INCDIR}/speex
install -m 0644 include/speex/speex_header.h ${STAGING_INCDIR}/speex
install -m 0644 include/speex/speex_stereo.h ${STAGING_INCDIR}/speex
+ install -m 0644 speex.m4 ${STAGING_DATADIR}/aclocal/
}
diff --git a/packages/speex/speex_1.1.12+1.2beta1.bb b/packages/speex/speex_1.1.12+1.2beta1.bb
index 01bd93909e..51ad2f506e 100644
--- a/packages/speex/speex_1.1.12+1.2beta1.bb
+++ b/packages/speex/speex_1.1.12+1.2beta1.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "BSD"
HOMEPAGE = "http://www.speex.org"
DEPENDS = "libogg"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://downloads.us.xiph.org/releases/speex/speex-1.2beta1.tar.gz"
S = "${WORKDIR}/${PN}-1.2beta1"
@@ -27,8 +27,6 @@ EXTRA_OECONF_append_dht-walnut = " --enable-fixed-point "
do_configure_append() {
sed -i s/"^OGG_CFLAGS.*$"/"OGG_CFLAGS = "/g Makefile */Makefile */*/Makefile
sed -i s/"^OGG_LIBS.*$"/"OGG_LIBS = -logg"/g Makefile */Makefile */*/Makefile
- perl -pi -e 's:^includedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile
- perl -pi -e 's:^oldincludedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile
perl -pi -e 's:\s*-I/usr/include$::g' Makefile */Makefile */*/Makefile
}
@@ -36,4 +34,5 @@ do_stage() {
oe_libinstall -C libspeex -so libspeex ${STAGING_LIBDIR}
install -d ${STAGING_INCDIR}/speex
install -m 0644 include/speex/*.h ${STAGING_INCDIR}/speex
+ install -m 0644 speex.m4 ${STAGING_DATADIR}/aclocal/
}
diff --git a/packages/speex/speex_1.1.12.bb b/packages/speex/speex_1.1.12.bb
index c34d459a26..7417ce4504 100644
--- a/packages/speex/speex_1.1.12.bb
+++ b/packages/speex/speex_1.1.12.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "BSD"
HOMEPAGE = "http://www.speex.org"
DEPENDS = "libogg"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://downloads.us.xiph.org/releases/speex/speex-${PV}.tar.gz"
@@ -25,8 +25,6 @@ EXTRA_OECONF_append_arm = " --enable-fixed-point "
do_configure_append() {
sed -i s/"^OGG_CFLAGS.*$"/"OGG_CFLAGS = "/g Makefile */Makefile */*/Makefile
sed -i s/"^OGG_LIBS.*$"/"OGG_LIBS = -logg"/g Makefile */Makefile */*/Makefile
- perl -pi -e 's:^includedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile
- perl -pi -e 's:^oldincludedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile
perl -pi -e 's:\s*-I/usr/include$::g' Makefile */Makefile */*/Makefile
}
@@ -34,4 +32,5 @@ do_stage() {
oe_libinstall -C libspeex -so libspeex ${STAGING_LIBDIR}
install -d ${STAGING_INCDIR}/speex
install -m 0644 include/speex/*.h ${STAGING_INCDIR}/speex
+ install -m 0644 speex.m4 ${STAGING_DATADIR}/aclocal/
}
diff --git a/packages/speex/speex_1.1.7.bb b/packages/speex/speex_1.1.7.bb
index 7ce34a80eb..ef818794de 100644
--- a/packages/speex/speex_1.1.7.bb
+++ b/packages/speex/speex_1.1.7.bb
@@ -3,7 +3,7 @@ SECTION = "libs"
LICENSE = "BSD"
HOMEPAGE = "http://www.speex.org"
DEPENDS = "libogg"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://www.speex.org/download/speex-${PV}.tar.gz"
@@ -21,8 +21,6 @@ EXTRA_OECONF_append_openmn = " --enable-arm5e-asm --enable-fixed-point"
do_configure_append() {
sed -i s/"^OGG_CFLAGS.*$"/"OGG_CFLAGS = "/g Makefile */Makefile */*/Makefile
sed -i s/"^OGG_LIBS.*$"/"OGG_LIBS = -logg"/g Makefile */Makefile */*/Makefile
- perl -pi -e 's:^includedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile
- perl -pi -e 's:^oldincludedir.*$:includedir = ${STAGING_INCDIR}:g' Makefile */Makefile */*/Makefile
perl -pi -e 's:\s*-I/usr/include$::g' Makefile */Makefile */*/Makefile
}
@@ -34,4 +32,5 @@ do_stage() {
install -m 0644 include/speex/speex_callbacks.h ${STAGING_INCDIR}/speex
install -m 0644 include/speex/speex_header.h ${STAGING_INCDIR}/speex
install -m 0644 include/speex/speex_stereo.h ${STAGING_INCDIR}/speex
+ install -m 0644 speex.m4 ${STAGING_DATADIR}/aclocal/
}
diff --git a/packages/sphyrna/sphyrna_svn.bb b/packages/sphyrna/sphyrna_svn.bb
index d2e90cf8f2..2e7fd432e9 100644
--- a/packages/sphyrna/sphyrna_svn.bb
+++ b/packages/sphyrna/sphyrna_svn.bb
@@ -11,7 +11,7 @@ S = "${WORKDIR}/${PN}"
inherit autotools
-PACKAGES = "sphyrna-console sphyrna-python"
+PACKAGES = "${PN}-dbg sphyrna-console sphyrna-python"
FILES_sphyrna-console = "${bindir}/hhconsole"
FILES_sphyrna-python = "${bindir}/decode.py ${libdir}/python2.4/site-packages/sphyrna/*"
diff --git a/packages/supertux/files/.mtn2git_empty b/packages/supertux/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/supertux/files/.mtn2git_empty
diff --git a/packages/supertux/files/gp2x.patch b/packages/supertux/files/gp2x.patch
new file mode 100644
index 0000000000..9d5d9a6d02
--- /dev/null
+++ b/packages/supertux/files/gp2x.patch
@@ -0,0 +1,2614 @@
+Only in supertux-0.1.3: aclocal.m4
+diff -ur supertux-0.1.3/AUTHORS supertux-0.1.3-gp2x/AUTHORS
+--- supertux-0.1.3/AUTHORS 2005-07-02 14:37:30.000000000 +0300
++++ supertux-0.1.3-gp2x/AUTHORS 2006-04-13 06:11:02.000000000 +0300
+@@ -91,6 +91,12 @@
+
+ Royalty free CDROMs and FTP sites sounds
+
++Port to GP2X
++-----------
++ Ingo Arndt
++ scachi@gmx.de
++ http://www.bitmage.de
++
+ More information and contacts
+ =============================
+
+Only in supertux-0.1.3: autom4te.cache
+Only in supertux-0.1.3-gp2x: autoscan.log
+Only in supertux-0.1.3-gp2x: COMPILE4GP2X
+Only in supertux-0.1.3: config.guess
+Only in supertux-0.1.3: config.log
+Only in supertux-0.1.3: config.status
+Only in supertux-0.1.3: config.sub
+Only in supertux-0.1.3: configure
+diff -ur supertux-0.1.3/configure.ac supertux-0.1.3-gp2x/configure.ac
+--- supertux-0.1.3/configure.ac 2005-07-06 12:26:15.000000000 +0300
++++ supertux-0.1.3-gp2x/configure.ac 2006-04-19 22:29:05.000000000 +0300
+@@ -76,13 +76,33 @@
+ CFLAGS="$CFLAGS $SDL_CFLAGS"
+ LIBS="$LIBS $SDL_LIBS"
+
++AM_PATH_LIBMIKMOD(,
++ :,
++ AC_MSG_ERROR([*** mikmod not found!]))
++CXXFLAGS="$CXXFLAGS $LIBMIKMOD_CFLAGS"
++CFLAGS="$CFLAGS $LIBMIKMOD_CFLAGS"
++LIBS="$LIBS $LIBMIKMOD_LIBS"
++
+ dnl Checks for additional libraries.
++AC_CHECK_LIB(smpeg, SMPEG_status)
++
++AC_CHECK_LIB(mikmod, MikMod_Init)
++
+ AC_CHECK_LIB(SDL_mixer, Mix_OpenAudio,,
+ AC_MSG_ERROR([SDL_mixer library required]))
+
++AC_CHECK_LIB(jpeg,jpeg_abort)
++
++AC_CHECK_LIB(z,compress)
++
++AC_CHECK_LIB(png,png_free)
++
+ AC_CHECK_LIB(SDL_image, IMG_Load,,
+ AC_MSG_ERROR([SDL_image library required]))
+
++AC_CHECK_LIB(SDL_gfx, rotozoomSurface,,
++ AC_MSG_ERROR([SDL_gfx library required]))
++
+ if test "x${enable_opengl}" != "xno"; then
+ AX_CHECK_GL
+ fi
+@@ -95,7 +115,30 @@
+ LIBS="$LIBS $GL_LIBS"
+ fi
+
+-AC_CHECK_LIB(z, gzopen,, AC_MSG_ERROR([*** zlib is missing]))
++# compile for the testing the 320x240 resolution
++# compile for the gp2x
++AC_ARG_ENABLE(gp2x,
++[ --enable-gp2x Build the gp2x version [default=no]],
++ , enable_gp2x=no)
++if test x$enable_gp2x = xyes; then
++ CXXFLAGS="$CXXFLAGS -DGP2X"
++fi
++
++AC_ARG_ENABLE(320x240,
++[ --enable-320x240 Test the 320x240 resolution [default=no]],
++ , enable_320x240=no)
++if test x$enable_320x240 = xyes; then
++ CXXFLAGS="$CXXFLAGS -DRES320X240"
++fi
++
++# compile static
++AC_ARG_ENABLE(static,
++[ --enable-static Build the static version [default=no]],
++ , enable_static=no)
++if test x$enable_static = xyes; then
++ CXXFLAGS="$CXXFLAGS -static"
++fi
++
+
+ CXXFLAGS="$CXXFLAGS -DDATA_PREFIX='\"$datadir/supertux\"'"
+
+@@ -110,6 +153,9 @@
+ echo " Profile Mode: $enable_gprof"
+ echo " Debug Mode: $enable_debug"
+ echo " OpenGL Support: $enable_opengl"
++echo " 320x240 Resolution: $enable_320x240"
++echo " GP2X Build (+320x240): $enable_gp2x"
++echo " Static Build: $enable_static"
+ echo ""
+
+ # EOF #
+Only in supertux-0.1.3/data: CREDITS
+Only in supertux-0.1.3/data: extro-bonus2.txt
+Only in supertux-0.1.3/data: extro-bonus.txt
+Only in supertux-0.1.3/data: extro.txt
+Only in supertux-0.1.3/data: images
+Only in supertux-0.1.3/data: intro.txt
+Only in supertux-0.1.3/data: levels
+Only in supertux-0.1.3/data: Makefile
+Only in supertux-0.1.3/data: Makefile.in
+Only in supertux-0.1.3/data: music
+Only in supertux-0.1.3/data: sounds
+Only in supertux-0.1.3/data: supertux.strf
+Only in supertux-0.1.3: depcomp
+Only in supertux-0.1.3: install-sh
+Only in supertux-0.1.3: m4
+Only in supertux-0.1.3: Makefile
+Only in supertux-0.1.3: Makefile.in
+Only in supertux-0.1.3: missing
+Only in supertux-0.1.3: mkinstalldirs
+Only in supertux-0.1.3: patches
+diff -ur supertux-0.1.3/src/badguy.cpp supertux-0.1.3-gp2x/src/badguy.cpp
+--- supertux-0.1.3/src/badguy.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/badguy.cpp 2006-04-20 21:32:23.000000000 +0300
+@@ -250,7 +250,11 @@
+ tux.kick_timer.start(KICKING_TIME);
+ set_sprite(img_mriceblock_flat_left, img_mriceblock_flat_right);
+ physic.set_velocity_x((dir == LEFT) ? -3.5 : 3.5);
++#ifndef GP2X
+ play_sound(sounds[SND_KICK],SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_KICK);
++#endif
+ }
+ }
+
+@@ -260,6 +264,7 @@
+ check_horizontal_bump();
+ if(mode == KICK && changed != dir)
+ {
++#ifndef GP2X
+ /* handle stereo sound (number 10 should be tweaked...)*/
+ if (base.x < scroll_x + screen->w/2 - 10)
+ play_sound(sounds[SND_RICOCHET], SOUND_LEFT_SPEAKER);
+@@ -267,6 +272,9 @@
+ play_sound(sounds[SND_RICOCHET], SOUND_RIGHT_SPEAKER);
+ else
+ play_sound(sounds[SND_RICOCHET], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_RICOCHET);
++#endif
+ }
+ }
+
+@@ -455,11 +463,15 @@
+
+ /* play explosion sound */ // FIXME: is the stereo all right? maybe we should use player cordinates...
+ if (base.x < scroll_x + screen->w/2 - 10)
++#ifndef GP2X
+ play_sound(sounds[SND_EXPLODE], SOUND_LEFT_SPEAKER);
+ else if (base.x > scroll_x + screen->w/2 + 10)
+ play_sound(sounds[SND_EXPLODE], SOUND_RIGHT_SPEAKER);
+ else
+ play_sound(sounds[SND_EXPLODE], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_EXPLODE);
++#endif
+
+ } else if(mode == BOMB_EXPLODE) {
+ remove_me();
+@@ -677,13 +689,21 @@
+ }
+
+ // BadGuy fall below the ground
++#ifndef RES320X240
+ if (base.y > screen->h) {
++#else
++ if (base.y > 640) {
++#endif
+ remove_me();
+ return;
+ }
+
+ // Once it's on screen, it's activated!
++#ifndef RES320X240
+ if (base.x <= scroll_x + screen->w + OFFSCREEN_DISTANCE)
++#else
++ if (base.x <= scroll_x + 640 + OFFSCREEN_DISTANCE)
++#endif
+ seen = true;
+
+ if(!seen)
+@@ -743,7 +763,11 @@
+ BadGuy::draw()
+ {
+ // Don't try to draw stuff that is outside of the screen
++#ifndef RES320X240
+ if(base.x <= scroll_x - base.width || base.x >= scroll_x + screen->w)
++#else
++ if(base.x <= scroll_x - base.width || base.x >= scroll_x + 640)
++#endif
+ return;
+
+ if(sprite_left == 0 || sprite_right == 0)
+@@ -811,7 +835,11 @@
+
+ World::current()->add_score(base.x - scroll_x,
+ base.y, 50 * player_status.score_multiplier);
++#ifndef GP2X
+ play_sound(sounds[SND_SQUISH], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_SQUISH);
++#endif
+ player_status.score_multiplier++;
+
+ dying = DYING_SQUISHED;
+@@ -830,7 +858,11 @@
+
+ player->jump_of_badguy(this);
+ World::current()->add_score(base.x - scroll_x, base.y, 50 * player_status.score_multiplier);
++#ifndef GP2X
+ play_sound(sounds[SND_SQUISH], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_SQUISH);
++#endif
+ player_status.score_multiplier++;
+ remove_me();
+ return;
+@@ -839,7 +871,11 @@
+ if (mode == NORMAL || mode == KICK)
+ {
+ /* Flatten! */
++#ifndef GP2X
+ play_sound(sounds[SND_STOMP], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_STOMP);
++#endif
+ mode = FLAT;
+ set_sprite(img_mriceblock_flat_left, img_mriceblock_flat_right);
+ physic.set_velocity_x(0);
+@@ -847,7 +883,11 @@
+ timer.start(4000);
+ } else if (mode == FLAT) {
+ /* Kick! */
++#ifndef GP2X
+ play_sound(sounds[SND_KICK], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_KICK);
++#endif
+
+ if (player->base.x < base.x + (base.width/2)) {
+ physic.set_velocity_x(5);
+@@ -925,7 +965,11 @@
+ score * player_status.score_multiplier);
+
+ /* Play death sound: */
++#ifndef GP2X
+ play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_FALL);
++#endif
+ }
+
+ void BadGuy::explode(BadGuy *badguy)
+@@ -1053,7 +1097,11 @@
+ /* Get kicked if were flat */
+ if (mode == FLAT && !dying)
+ {
++#ifndef GP2X
+ play_sound(sounds[SND_KICK], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_KICK);
++#endif
+
+ // Hit from left side
+ if (player->base.x < base.x) {
+diff -ur supertux-0.1.3/src/configfile.cpp supertux-0.1.3-gp2x/src/configfile.cpp
+--- supertux-0.1.3/src/configfile.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/configfile.cpp 2006-04-10 13:32:19.000000000 +0300
+@@ -92,12 +92,22 @@
+ else
+ use_joystick = true;
+
++#ifndef GP2X
+ reader.read_int ("joystick-x", &joystick_keymap.x_axis);
+ reader.read_int ("joystick-y", &joystick_keymap.y_axis);
+ reader.read_int ("joystick-a", &joystick_keymap.a_button);
+ reader.read_int ("joystick-b", &joystick_keymap.b_button);
+ reader.read_int ("joystick-start", &joystick_keymap.start_button);
+ reader.read_int ("joystick-deadzone", &joystick_keymap.dead_zone);
++#else
++ reader.read_int ("joystick-up", &joystick_keymap.up_button);
++ reader.read_int ("joystick-down", &joystick_keymap.down_button);
++ reader.read_int ("joystick-right", &joystick_keymap.right_button);
++ reader.read_int ("joystick-left", &joystick_keymap.left_button);
++ reader.read_int ("joystick-a", &joystick_keymap.a_button);
++ reader.read_int ("joystick-b", &joystick_keymap.b_button);
++ reader.read_int ("joystick-start", &joystick_keymap.start_button);
++#endif
+
+ reader.read_int ("keyboard-jump", &keymap.jump);
+ reader.read_int ("keyboard-duck", &keymap.duck);
+@@ -130,12 +140,22 @@
+ fprintf(config, "\n\t;; joystick number (-1 means no joystick):\n");
+ fprintf(config, "\t(joystick %d)\n", use_joystick ? joystick_num : -1);
+
++#ifndef GP2X
+ fprintf(config, "\t(joystick-x %d)\n", joystick_keymap.x_axis);
+ fprintf(config, "\t(joystick-y %d)\n", joystick_keymap.y_axis);
+ fprintf(config, "\t(joystick-a %d)\n", joystick_keymap.a_button);
+ fprintf(config, "\t(joystick-b %d)\n", joystick_keymap.b_button);
+ fprintf(config, "\t(joystick-start %d)\n", joystick_keymap.start_button);
+ fprintf(config, "\t(joystick-deadzone %d)\n", joystick_keymap.dead_zone);
++#else
++ fprintf(config, "\t(joystick-up %d)\n", joystick_keymap.up_button);
++ fprintf(config, "\t(joystick-down %d)\n", joystick_keymap.down_button);
++ fprintf(config, "\t(joystick-right %d)\n", joystick_keymap.right_button);
++ fprintf(config, "\t(joystick-left %d)\n", joystick_keymap.left_button);
++ fprintf(config, "\t(joystick-a %d)\n", joystick_keymap.a_button);
++ fprintf(config, "\t(joystick-b %d)\n", joystick_keymap.b_button);
++ fprintf(config, "\t(joystick-start %d)\n", joystick_keymap.start_button);
++#endif
+
+ fprintf(config, "\t(keyboard-jump %d)\n", keymap.jump);
+ fprintf(config, "\t(keyboard-duck %d)\n", keymap.duck);
+diff -ur supertux-0.1.3/src/defines.h supertux-0.1.3-gp2x/src/defines.h
+--- supertux-0.1.3/src/defines.h 2005-07-07 02:05:03.000000000 +0300
++++ supertux-0.1.3-gp2x/src/defines.h 2006-04-11 22:02:05.000000000 +0300
+@@ -91,7 +91,11 @@
+
+ /* Scrolling text speed */
+
++#ifndef RES320X240
+ #define SCROLL_SPEED_CREDITS 1.2
++#else
++#define SCROLL_SPEED_CREDITS 2.4
++#endif
+ #define SCROLL_SPEED_MESSAGE 1.0
+
+ /* Debugging */
+Only in supertux-0.1.3/src: .deps
+diff -ur supertux-0.1.3/src/gameloop.cpp supertux-0.1.3-gp2x/src/gameloop.cpp
+--- supertux-0.1.3/src/gameloop.cpp 2005-07-02 15:16:08.000000000 +0300
++++ supertux-0.1.3-gp2x/src/gameloop.cpp 2006-05-05 23:22:58.000000000 +0300
+@@ -288,6 +288,7 @@
+
+ switch(event.type)
+ {
++#ifndef GP2X
+ case SDL_QUIT: /* Quit event - quit: */
+ st_abort("Received window close", "");
+ break;
+@@ -434,22 +435,60 @@
+ tux.input.down = UP;
+ }
+ break;
+-
++#endif
+ case SDL_JOYBUTTONDOWN:
++#ifndef GP2X
++ if (event.jbutton.button == joystick_keymap.a_button)
++ tux.input.up = DOWN;
++ else if (event.jbutton.button == joystick_keymap.b_button)
++ tux.input.fire = DOWN;
++ else if (event.jbutton.button == joystick_keymap.start_button)
++ on_escape_press();
++ break;
++#else
+ if (event.jbutton.button == joystick_keymap.a_button)
+ tux.input.up = DOWN;
+ else if (event.jbutton.button == joystick_keymap.b_button)
+ tux.input.fire = DOWN;
+ else if (event.jbutton.button == joystick_keymap.start_button)
+ on_escape_press();
++ else if (event.jbutton.button == joystick_keymap.up_button)
++ tux.input.up = DOWN;
++ else if (event.jbutton.button == joystick_keymap.down_button)
++ tux.input.down = DOWN;
++ else if (event.jbutton.button == joystick_keymap.right_button)
++ tux.input.right = DOWN;
++ else if (event.jbutton.button == joystick_keymap.left_button)
++ tux.input.left = DOWN;
++ else if (event.jbutton.button == joystick_keymap.voldown_button)
++ decreaseSoundVolume();
++ else if (event.jbutton.button == joystick_keymap.volup_button)
++ increaseSoundVolume();
+ break;
++#endif
++
+ case SDL_JOYBUTTONUP:
++#ifndef GP2X
+ if (event.jbutton.button == joystick_keymap.a_button)
+ tux.input.up = UP;
+ else if (event.jbutton.button == joystick_keymap.b_button)
+ tux.input.fire = UP;
+ break;
+-
++#else
++ if (event.jbutton.button == joystick_keymap.a_button)
++ tux.input.up = UP;
++ else if (event.jbutton.button == joystick_keymap.b_button)
++ tux.input.fire = UP;
++ else if (event.jbutton.button == joystick_keymap.up_button)
++ tux.input.up = UP;
++ else if (event.jbutton.button == joystick_keymap.down_button)
++ tux.input.down = UP;
++ else if (event.jbutton.button == joystick_keymap.right_button)
++ tux.input.right = UP;
++ else if (event.jbutton.button == joystick_keymap.left_button)
++ tux.input.left = UP;
++ break;
++#endif
+ default:
+ break;
+ } /* switch */
+@@ -464,7 +503,7 @@
+ Player* tux = world->get_tux();
+
+ /* End of level? */
+- int endpos = (World::current()->get_level()->width-5) * 32;
++ int endpos = (World::current()->get_level()->width-5) * (32);
+ Tile* endtile = collision_goal(tux->base);
+
+ // fallback in case the other endpositions don't trigger
+@@ -545,7 +584,7 @@
+ Menu::current()->draw();
+ mouse_cursor->draw();
+ }
+-
++ //updateSound();
+ updatescreen();
+ }
+
+@@ -599,6 +638,7 @@
+
+ while (exit_status == ES_NONE)
+ {
++ SDL_Delay(10);
+ /* Calculate the movement-factor */
+ double frame_ratio = ((double)(update_time-last_update_time))/((double)FRAME_RATE);
+
+@@ -686,6 +726,7 @@
+ fps_cnt = 0;
+ }
+ }
++ //updateSound();
+ }
+
+ return exit_status;
+@@ -694,21 +735,32 @@
+ /* Bounce a brick: */
+ void bumpbrick(float x, float y)
+ {
+- World::current()->add_bouncy_brick(((int)(x + 1) / 32) * 32,
+- (int)(y / 32) * 32);
++ World::current()->add_bouncy_brick(((int)(x + 1) / (32)) * (32),
++ (int)(y / (32)) * (32));
+
++#ifndef GP2X
+ play_sound(sounds[SND_BRICK], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_BRICK);
++#endif
+ }
+
+ /* (Status): */
+ void
+ GameSession::drawstatus()
+ {
++ int xdiv;
++#ifdef RES320X240
++ xdiv=2;
++#else
++ xdiv=1;
++#endif
++
+ char str[60];
+
+ sprintf(str, "%d", player_status.score);
+ white_text->draw("SCORE", 0, 0, 1);
+- gold_text->draw(str, 96, 0, 1);
++ gold_text->draw(str, 96/xdiv, 0, 1);
+
+ if(st_gl_mode == ST_GL_TEST)
+ {
+@@ -716,28 +768,33 @@
+ }
+
+ if(!time_left.check()) {
+- white_text->draw("TIME'S UP", 224, 0, 1);
++ white_text->draw("TIME'S UP", 224/xdiv, 0, 1);
+ } else if (time_left.get_left() > TIME_WARNING || (global_frame_counter % 10) < 5) {
+ sprintf(str, "%d", time_left.get_left() / 1000 );
+- white_text->draw("TIME", 224, 0, 1);
+- gold_text->draw(str, 304, 0, 1);
++ white_text->draw("TIME", 224/xdiv, 0, 1);
++ gold_text->draw(str, 304/xdiv, 0, 1);
+ }
+
+ sprintf(str, "%d", player_status.distros);
+ white_text->draw("COINS", screen->h, 0, 1);
+- gold_text->draw(str, 608, 0, 1);
++ gold_text->draw(str, 608/xdiv, 0, 1);
+
+- white_text->draw("LIVES", 480, 20);
++ white_text->draw("LIVES", 480/xdiv, 20);
+ if (player_status.lives >= 5)
+ {
+ sprintf(str, "%dx", player_status.lives);
++#ifdef RES320X240
++ gold_text->draw_align(str, 617/xdiv-5, 20, A_RIGHT, A_TOP);
++ tux_life->draw(565+(18*3)/xdiv+10, 20);
++#else
+ gold_text->draw_align(str, 617, 20, A_RIGHT, A_TOP);
+ tux_life->draw(565+(18*3), 20);
++#endif
+ }
+ else
+ {
+ for(int i= 0; i < player_status.lives; ++i)
+- tux_life->draw(565+(18*i),20);
++ tux_life->draw(565+(18*i)/xdiv,20);
+ }
+
+ if(show_fps)
+@@ -746,6 +803,7 @@
+ white_text->draw("FPS", screen->h, 40, 1);
+ gold_text->draw(str, screen->h + 60, 40, 1);
+ }
++// updateSound();
+ }
+
+ void
+@@ -824,4 +882,3 @@
+ return tmp;
+ }
+
+-
+diff -ur supertux-0.1.3/src/gameobjs.cpp supertux-0.1.3-gp2x/src/gameobjs.cpp
+--- supertux-0.1.3/src/gameobjs.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/gameobjs.cpp 2006-04-11 21:52:52.000000000 +0300
+@@ -98,6 +98,9 @@
+ src.h = 16;
+
+ dest.x = (int)(base.x - scroll_x);
++#ifdef RES320X240
++ dest.x=dest.x/2;
++#endif
+ dest.y = (int)base.y;
+ dest.w = 16;
+ dest.h = 16;
+@@ -143,8 +146,13 @@
+ {
+ SDL_Rect dest;
+
++#ifndef RES320X240
+ if (base.x >= scroll_x - 32 &&
+ base.x <= scroll_x + screen->w)
++#else
++ if (base.x >= scroll_x - 32 &&
++ base.x <= scroll_x + 640)
++#endif
+ {
+ dest.x = (int)(base.x - scroll_x);
+ dest.y = (int)base.y;
+@@ -165,8 +173,14 @@
+ else
+ {
+ int s = ((int)scroll_x / 2)%640;
++
++#ifdef RES320X240
++ plevel->img_bkgd->draw_part(dest.x/2 + s/2, dest.y/2,
++ dest.x/2, dest.y,dest.w/2,dest.h/2);
++#else
+ plevel->img_bkgd->draw_part(dest.x + s, dest.y,
+ dest.x, dest.y,dest.w,dest.h);
++#endif
+ }
+
+ Tile::draw(base.x - scroll_x,
+diff -ur supertux-0.1.3/src/globals.cpp supertux-0.1.3-gp2x/src/globals.cpp
+--- supertux-0.1.3/src/globals.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/globals.cpp 2006-04-11 22:39:03.000000000 +0300
+@@ -25,6 +25,7 @@
+
+ JoystickKeymap::JoystickKeymap()
+ {
++#ifndef GP2X
+ a_button = 0;
+ b_button = 1;
+ start_button = 2;
+@@ -33,6 +34,17 @@
+ y_axis = 1;
+
+ dead_zone = 4096;
++#else
++ a_button = GP2X_BUTTON_A;
++ b_button = GP2X_BUTTON_X;
++ start_button = GP2X_BUTTON_START;
++ up_button = GP2X_BUTTON_UP;
++ down_button = GP2X_BUTTON_DOWN;
++ left_button = GP2X_BUTTON_LEFT;
++ right_button = GP2X_BUTTON_RIGHT;
++ volup_button = GP2X_BUTTON_VOLUP;
++ voldown_button = GP2X_BUTTON_VOLDOWN;
++#endif
+ }
+
+ JoystickKeymap joystick_keymap;
+diff -ur supertux-0.1.3/src/globals.h supertux-0.1.3-gp2x/src/globals.h
+--- supertux-0.1.3/src/globals.h 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/globals.h 2006-04-11 23:45:27.000000000 +0300
+@@ -28,10 +28,33 @@
+ #include "menu.h"
+ #include "mousecursor.h"
+
++#ifdef GP2X
++#define GP2X_BUTTON_UP (0)
++#define GP2X_BUTTON_DOWN (4)
++#define GP2X_BUTTON_LEFT (2)
++#define GP2X_BUTTON_RIGHT (6)
++#define GP2X_BUTTON_UPLEFT (1)
++#define GP2X_BUTTON_UPRIGHT (7)
++#define GP2X_BUTTON_DOWNLEFT (3)
++#define GP2X_BUTTON_DOWNRIGHT (5)
++#define GP2X_BUTTON_CLICK (18)
++#define GP2X_BUTTON_A (12)
++#define GP2X_BUTTON_B (13)
++#define GP2X_BUTTON_X (15)
++#define GP2X_BUTTON_Y (14)
++#define GP2X_BUTTON_L (10)
++#define GP2X_BUTTON_R (11)
++#define GP2X_BUTTON_START (8)
++#define GP2X_BUTTON_SELECT (9)
++#define GP2X_BUTTON_VOLUP (16)
++#define GP2X_BUTTON_VOLDOWN (17)
++#endif
++
+ extern std::string datadir;
+
+ struct JoystickKeymap
+ {
++#ifndef GP2X
+ int a_button;
+ int b_button;
+ int start_button;
+@@ -42,6 +65,19 @@
+ int dead_zone;
+
+ JoystickKeymap();
++#else
++ int a_button;
++ int b_button;
++ int start_button;
++ int up_button;
++ int down_button;
++ int left_button;
++ int right_button;
++ int volup_button;
++ int voldown_button;
++
++ JoystickKeymap();
++#endif
+ };
+
+ extern JoystickKeymap joystick_keymap;
+diff -ur supertux-0.1.3/src/lispreader.h supertux-0.1.3-gp2x/src/lispreader.h
+Only in supertux-0.1.3/src: Makefile
+diff -ur supertux-0.1.3/src/Makefile.am supertux-0.1.3-gp2x/src/Makefile.am
+--- supertux-0.1.3/src/Makefile.am 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/Makefile.am 2006-04-19 21:55:54.000000000 +0300
+@@ -77,3 +77,5 @@
+ musicref.h
+
+ # EOF #
++
++#supertux_LDADD = libmikmod
+Only in supertux-0.1.3/src: Makefile.in
+diff -ur supertux-0.1.3/src/menu.cpp supertux-0.1.3-gp2x/src/menu.cpp
+--- supertux-0.1.3/src/menu.cpp 2005-06-29 15:44:13.000000000 +0300
++++ supertux-0.1.3-gp2x/src/menu.cpp 2006-05-04 23:59:29.000000000 +0300
+@@ -53,6 +53,8 @@
+ Menu* options_menu = 0;
+ Menu* options_keys_menu = 0;
+ Menu* options_joystick_menu = 0;
++Menu* options_joystick_axis_menu = 0;
++Menu* options_joystick_button_menu = 0;
+ Menu* highscore_menu = 0;
+ Menu* load_game_menu = 0;
+ Menu* save_game_menu = 0;
+@@ -240,8 +242,10 @@
+ }
+
+ /* Set ControlField a key */
++//TODO: get joystick in here somehow
+ void Menu::get_controlfield_key_into_input(MenuItem *item)
+ {
++#ifndef GP2X
+ switch(*item->int_p)
+ {
+ case SDLK_UP:
+@@ -288,6 +292,11 @@
+ }
+ break;
+ }
++#else
++ char tmp[64];
++ snprintf(tmp, 64, "%d", *item->int_p);
++ item->change_input(tmp);
++#endif
+ }
+
+ /* Free a menu and all its items */
+@@ -497,8 +506,13 @@
+ int menu_height)
+ {
+ MenuItem& pitem = item[index];
+-
++
++#ifndef RES320X240
+ int font_width = 16;
++#else
++ int font_width = 16/2;
++#endif
++
+ int effect_offset = 0;
+ {
+ int effect_time = 0;
+@@ -510,7 +524,7 @@
+ }
+
+ int x_pos = pos_x;
+- int y_pos = pos_y + 24*index - menu_height/2 + 12 + effect_offset;
++ int y_pos = pos_y + (int)(24)*index - menu_height/2 + 12 + effect_offset;
+ int shadow_size = 2;
+ int text_width = strlen(pitem.text) * font_width;
+ int input_width = (strlen(pitem.input)+ 1) * font_width;
+@@ -518,7 +532,7 @@
+ Text* text_font = white_text;
+
+ if (arrange_left)
+- x_pos += 24 - menu_width/2 + (text_width + input_width + list_width)/2;
++ x_pos += (int)(24) - menu_width/2 + (text_width + input_width + list_width)/2;
+
+ if(index == active_item)
+ {
+@@ -538,7 +552,11 @@
+
+ case MN_HL:
+ {
++#ifndef RES320X240
+ int x = pos_x - menu_width/2;
++#else
++ int x = pos_x - menu_width/4;
++#endif
+ int y = y_pos - 12 - effect_offset;
+ /* Draw a horizontal line with a little 3d effect */
+ fillrect(x, y + 6,
+@@ -551,9 +569,15 @@
+ }
+ case MN_LABEL:
+ {
++#ifndef RES320X240
+ white_big_text->draw_align(pitem.text,
+ x_pos, y_pos,
+ A_HMIDDLE, A_VMIDDLE, 2);
++#else
++ white_text->draw_align(pitem.text,
++ x_pos, y_pos,
++ A_HMIDDLE, A_VMIDDLE, 2);
++#endif
+ break;
+ }
+ case MN_TEXTFIELD:
+@@ -570,8 +594,9 @@
+ input_width + font_width, 18,
+ 0,0,0,128);
+
+- if(pitem.kind == MN_CONTROLFIELD)
++ if(pitem.kind == MN_CONTROLFIELD) {
+ get_controlfield_key_into_input(&pitem);
++ }
+
+ if(pitem.kind == MN_TEXTFIELD || pitem.kind == MN_NUMFIELD)
+ {
+@@ -663,7 +688,7 @@
+ menu_width += 2;
+ }
+ }
+-
++
+ return (menu_width * 16 + 24);
+ }
+
+@@ -680,10 +705,17 @@
+ int menu_width = get_width();
+
+ /* Draw a transparent background */
++#ifndef RES320X240
+ fillrect(pos_x - menu_width/2,
+ pos_y - 24*item.size()/2 - 10,
+ menu_width,menu_height + 20,
+ 150,180,200,125);
++#else
++ fillrect(pos_x - menu_width/4,
++ pos_y - 24*item.size()/2 - 10,
++ menu_width,menu_height + 20,
++ 150,180,200,125);
++#endif
+
+ for(unsigned int i = 0; i < item.size(); ++i)
+ {
+@@ -723,6 +755,8 @@
+ SDLKey key;
+ switch(event.type)
+ {
++
++#ifndef GP2X
+ case SDL_KEYDOWN:
+ key = event.key.keysym.sym;
+ SDLMod keymod;
+@@ -754,7 +788,6 @@
+ return;
+ }
+
+-
+ switch(key)
+ {
+ case SDLK_UP: /* Menu Up */
+@@ -800,12 +833,14 @@
+ break;
+ }
+ break;
++
+ case SDL_JOYHATMOTION:
+ if(event.jhat.value == SDL_HAT_UP)
+ menuaction = MENU_ACTION_UP;
+ if(event.jhat.value == SDL_HAT_DOWN)
+ menuaction = MENU_ACTION_DOWN;
+ break;
++
+ case SDL_JOYAXISMOTION:
+ if(event.jaxis.axis == joystick_keymap.y_axis)
+ {
+@@ -815,9 +850,88 @@
+ menuaction = MENU_ACTION_UP;
+ }
+ break;
++#endif
++
+ case SDL_JOYBUTTONDOWN:
++#ifndef GP2X
+ menuaction = MENU_ACTION_HIT;
+ break;
++#else
++
++ if(item[active_item].kind == MN_CONTROLFIELD)
++ {
++ if( event.jbutton.button == joystick_keymap.start_button )
++ {
++ Menu::pop_current();
++ return;
++ }
++
++ static int save[8]={-1,-1,-1,-1,-1,-1,-1,-1};
++ int itemid=get_active_item_id();
++ int inputkey;
++ switch ( itemid ) {
++ case 11 : inputkey=joystick_keymap.up_button;
++ break;
++ case 12 : inputkey=joystick_keymap.down_button;
++ break;
++ case 13 : inputkey=joystick_keymap.left_button;
++ break;
++ case 14 : inputkey=joystick_keymap.right_button;
++ break;
++ case 15 : inputkey=joystick_keymap.a_button;
++ break;
++ case 16 : inputkey=joystick_keymap.b_button;
++ break;
++ default : break;
++ }
++
++ *item[active_item].int_p = event.jbutton.button;
++
++ bool okay=true;
++
++ save[itemid-11]=event.jbutton.button;
++
++ int i;
++ for ( i=0;i<itemid-11;i++ ) {
++ if ( save[i] == event.jbutton.button ) okay=false;
++ }
++ if ( okay == true ) menuaction = MENU_ACTION_DOWN;
++ else menuaction = MENU_ACTION_NONE;
++
++ return;
++ }
++
++ if (event.jbutton.button == joystick_keymap.a_button)
++ menuaction = MENU_ACTION_HIT;
++ else if (event.jbutton.button == joystick_keymap.b_button)
++ menuaction = MENU_ACTION_HIT;
++ else if (event.jbutton.button == joystick_keymap.start_button)
++ menuaction = MENU_ACTION_HIT;
++ else if (event.jbutton.button == joystick_keymap.up_button)
++ menuaction = MENU_ACTION_UP;
++ else if (event.jbutton.button == joystick_keymap.down_button)
++ menuaction = MENU_ACTION_DOWN;
++ else if (event.jbutton.button == joystick_keymap.right_button)
++ menuaction = MENU_ACTION_RIGHT;
++ else if (event.jbutton.button == joystick_keymap.left_button)
++ menuaction = MENU_ACTION_LEFT;
++ else if (event.jbutton.button == joystick_keymap.volup_button)
++#ifdef GP2X
++ increaseSoundVolume();
++#else
++ sound_volume(2);
++#endif
++ else if (event.jbutton.button == joystick_keymap.voldown_button)
++#ifdef GP2X
++ decreaseSoundVolume();
++#else
++ sound_volume(1);
++#endif
++ break;
++
++#endif
++
++#ifndef GP2X
+ case SDL_MOUSEBUTTONDOWN:
+ x = event.motion.x;
+ y = event.motion.y;
+@@ -847,6 +961,7 @@
+ break;
+ default:
+ break;
++#endif
+ }
+ }
+
+diff -ur supertux-0.1.3/src/menu.h supertux-0.1.3-gp2x/src/menu.h
+--- supertux-0.1.3/src/menu.h 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/menu.h 2006-05-04 23:48:30.000000000 +0300
+@@ -236,6 +236,8 @@
+ extern Menu* options_menu;
+ extern Menu* options_keys_menu;
+ extern Menu* options_joystick_menu;
++extern Menu* options_joystick_axis_menu;
++extern Menu* options_joystick_button_menu;
+ extern Menu* highscore_menu;
+ extern Menu* load_game_menu;
+ extern Menu* save_game_menu;
+diff -ur supertux-0.1.3/src/music_manager.cpp supertux-0.1.3-gp2x/src/music_manager.cpp
+--- supertux-0.1.3/src/music_manager.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/music_manager.cpp 2006-04-22 13:16:32.000000000 +0300
+@@ -59,7 +59,14 @@
+ return true;
+ }
+
++#ifndef GP2X
+ Mix_Music* song = Mix_LoadMUS(file.c_str());
++#else
++ char mfile[100];
++ snprintf(mfile,sizeof(mfile),"%s",file.c_str());
++ MODULE *song=Player_Load(mfile, 64, 0);
++#endif
++
+ if(song == 0)
+ return false;
+
+@@ -84,6 +91,8 @@
+ void
+ MusicManager::play_music(const MusicRef& musicref, int loops)
+ {
++// printf("loop: %d, musicref: %d\n",loops,musicref.music);
++
+ if(!audio_device)
+ return;
+
+@@ -97,7 +106,16 @@
+ current_music->refcount++;
+
+ if(music_enabled)
++#ifndef GP2X
+ Mix_PlayMusic(current_music->music, loops);
++#else
++ {
++ if ( loops == -1 ) current_music->music->wrap=1;
++ Player_Stop();
++ Player_Start(current_music->music);
++ Player_SetPosition(0);
++ }
++#endif
+ }
+
+ void
+@@ -106,13 +124,17 @@
+ if(!audio_device)
+ return;
+
++#ifndef GP2X
+ Mix_HaltMusic();
++#else
++ Player_Stop();
++#endif
+
+ if(current_music) {
+ current_music->refcount--;
+ if(current_music->refcount == 0)
+ free_music(current_music);
+- current_music = 0;
++ current_music = 0;
+ }
+ }
+
+@@ -127,9 +149,17 @@
+
+ music_enabled = enable;
+ if(music_enabled == false) {
++#ifndef GP2X
+ Mix_HaltMusic();
++#else
++ Player_Stop();
++#endif
+ } else {
++#ifndef GP2X
+ Mix_PlayMusic(current_music->music, -1);
++#else
++ Player_Start(current_music->music);
++#endif
+ }
+ }
+
+diff -ur supertux-0.1.3/src/music_manager.h supertux-0.1.3-gp2x/src/music_manager.h
+--- supertux-0.1.3/src/music_manager.h 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/music_manager.h 2006-04-22 04:51:32.000000000 +0300
+@@ -20,6 +20,10 @@
+ #ifndef HEADER_MUSIC_MANAGER_H
+ #define HEADER_MUSIC_MANAGER_H
+
++#ifdef GP2X
++#include "mikmod.h"
++#endif
++
+ #include <SDL_mixer.h>
+ #include <string>
+ #include <map>
+@@ -51,7 +55,12 @@
+ ~MusicResource();
+
+ MusicManager* manager;
++#ifndef GP2X
+ Mix_Music* music;
++#else
++ MODULE *music;
++#endif
++
+ int refcount;
+ };
+
+diff -ur supertux-0.1.3/src/particlesystem.cpp supertux-0.1.3-gp2x/src/particlesystem.cpp
+--- supertux-0.1.3/src/particlesystem.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/particlesystem.cpp 2006-04-12 22:20:41.000000000 +0300
+@@ -28,8 +28,13 @@
+
+ ParticleSystem::ParticleSystem()
+ {
++#ifndef RES320X240
+ virtual_width = screen->w;
+ virtual_height = screen->h;
++#else
++ virtual_width = 640;
++ virtual_height = 480;
++#endif
+ }
+
+ ParticleSystem::~ParticleSystem()
+@@ -57,13 +62,24 @@
+ float ymax = fmodf(y + particle->texture->h, virtual_height);
+
+ // particle on screen
++#ifndef RES320X240
+ if(x >= screen->w && xmax >= screen->w)
+ continue;
+ if(y >= screen->h && ymax >= screen->h)
+ continue;
+-
++
+ if(x > screen->w) x -= virtual_width;
+ if(y > screen->h) y -= virtual_height;
++#else
++ if(x >= 640 && xmax >= 640)
++ continue;
++ if(y >= 480 && ymax >= 480)
++ continue;
++
++ if(x > 640) x -= virtual_width;
++ if(y > 480) y -= virtual_height;
++#endif
++
+ particle->texture->draw(x, y);
+ }
+ }
+@@ -74,14 +90,21 @@
+ snowimages[1] = new Surface(datadir+"/images/shared/snow1.png", USE_ALPHA);
+ snowimages[2] = new Surface(datadir+"/images/shared/snow2.png", USE_ALPHA);
+
++#ifndef RES320X240
+ virtual_width = screen->w * 2;
+-
++#else
++ virtual_width = 640 * 2;
++#endif
+ // create some random snowflakes
+ size_t snowflakecount = size_t(virtual_width/10.0);
+ for(size_t i=0; i<snowflakecount; ++i) {
+ SnowParticle* particle = new SnowParticle;
+ particle->x = rand() % int(virtual_width);
++#ifndef RES320X240
+ particle->y = rand() % screen->h;
++#else
++ particle->y = rand() % 480;
++#endif
+ particle->layer = i % 2;
+ int snowsize = rand() % 3;
+ particle->texture = snowimages[snowsize];
+@@ -106,7 +129,11 @@
+ for(i = particles.begin(); i != particles.end(); ++i) {
+ SnowParticle* particle = (SnowParticle*) *i;
+ particle->y += particle->speed * elapsed_time;
++#ifndef RES320X240
+ if(particle->y > screen->h) {
++#else
++ if(particle->y > 480) {
++#endif
+ particle->y = fmodf(particle->y , virtual_height);
+ particle->x = rand() % int(virtual_width);
+ }
+diff -ur supertux-0.1.3/src/player.cpp supertux-0.1.3-gp2x/src/player.cpp
+--- supertux-0.1.3/src/player.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/player.cpp 2006-05-05 22:59:52.000000000 +0300
+@@ -261,6 +261,7 @@
+ }
+ }
+ }
++// updateSound();
+
+ /* ---- DONE HANDLING TUX! --- */
+
+@@ -337,7 +338,11 @@
+ if(on_ground() && ((vx < 0 && dirsign >0) || (vx>0 && dirsign<0))) {
+ if(fabs(vx)>SKID_XM && !skidding_timer.check()) {
+ skidding_timer.start(SKID_TIME);
++#ifndef GP2X
+ play_sound(sounds[SND_SKID], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_SKID);
++#endif
+ ax *= 2.5;
+ } else {
+ ax *= 2;
+@@ -391,9 +396,17 @@
+ jumping = true;
+ can_jump = false;
+ if (size == SMALL)
++#ifndef GP2X
+ play_sound(sounds[SND_JUMP], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_JUMP);
++#endif
+ else
++#ifndef GP2X
+ play_sound(sounds[SND_BIGJUMP], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_BIGJUMP);
++#endif
+ }
+ }
+ // Let go of jump key
+@@ -533,7 +546,11 @@
+ if(player_status.lives < MAX_LIVES)
+ ++player_status.lives;
+ /*We want to hear the sound even, if MAX_LIVES is reached*/
++#ifndef GP2X
+ play_sound(sounds[SND_LIFEUP], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_LIFEUP);
++#endif
+ }
+ }
+
+@@ -665,7 +682,11 @@
+ else
+ {
+ pbad_c->dying = DYING_FALLING;
++#ifndef GP2X
+ play_sound(sounds[SND_FALL], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_FALL);
++#endif
+ World::current()->add_score(pbad_c->base.x - scroll_x,
+ pbad_c->base.y,
+ 25 * player_status.score_multiplier);
+@@ -696,7 +717,12 @@
+ void
+ Player::kill(HurtMode mode)
+ {
++#ifndef GP2X
+ play_sound(sounds[SND_HURT], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_HURT);
++ updateSound();
++#endif
+
+ physic.set_velocity_x(0);
+
+@@ -734,7 +760,11 @@
+
+ bool Player::is_dead()
+ {
++#ifndef RES320X240
+ if(base.y > screen->h || base.x < scroll_x - AUTOSCROLL_DEAD_INTERVAL) // last condition can happen in auto-scrolling
++#else
++ if(base.y > 640 || base.x < scroll_x - AUTOSCROLL_DEAD_INTERVAL) // last condition can happen in auto-scrolling
++#endif
+ return true;
+ else
+ return false;
+@@ -760,9 +790,20 @@
+ }
+
+ /* Keep in-bounds, vertically: */
++#ifndef RES320X240
+ if (base.y > screen->h)
++#else
++ if (base.y > 640)
++#endif
+ {
+ kill(KILL);
++#ifdef GP2X
++ float wait=SDL_GetTicks()+800;
++ while ( wait > SDL_GetTicks()) {
++ updateSound();
++ }
++#endif
++
+ }
+
+ if(base.x < scroll_x && (!back_scrolling || hor_autoscroll)) // can happen if back scrolling is disabled
+@@ -777,7 +818,6 @@
+ if(base.x + base.width > scroll_x + screen->w)
+ base.x = scroll_x + screen->w - base.width;
+ }
+-
+ }
+
+ // EOF //
+diff -ur supertux-0.1.3/src/resources.cpp supertux-0.1.3-gp2x/src/resources.cpp
+--- supertux-0.1.3/src/resources.cpp 2005-07-02 15:20:14.000000000 +0300
++++ supertux-0.1.3-gp2x/src/resources.cpp 2006-04-22 13:14:01.000000000 +0300
+@@ -18,6 +18,7 @@
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ #include "globals.h"
++#include "sound.h"
+ #include "scene.h"
+ #include "player.h"
+ #include "badguy.h"
+@@ -187,11 +188,13 @@
+ // This is also true with if (use_music)
+ Send a mail to me: neoneurone@users.sf.net, if you have another opinion. :)
+ */
++#ifndef GP2X
+ for (i = 0; i < NUM_SOUNDS; i++)
+ sounds[i] = load_sound(datadir + soundfilenames[i]);
++#endif
+
+ /* Herring song */
+- herring_song = music_manager->load_music(datadir + "/music/SALCON.MOD");
++ herring_song = music_manager->load_music(datadir + "/music/SALCON.MOD");
+ level_end_song = music_manager->load_music(datadir + "/music/leveldone.mod");
+ }
+
+@@ -223,8 +226,10 @@
+
+ delete tux_life;
+
++#ifndef GP2X
+ for (i = 0; i < NUM_SOUNDS; i++)
+ free_chunk(sounds[i]);
++#endif
+
+ delete sprite_manager;
+ sprite_manager = 0;
+diff -ur supertux-0.1.3/src/screen.cpp supertux-0.1.3-gp2x/src/screen.cpp
+--- supertux-0.1.3/src/screen.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/screen.cpp 2006-04-14 18:18:47.000000000 +0300
+@@ -81,7 +81,6 @@
+ else
+ {
+ #endif
+-
+ for(float y = 0; y < 480; y += 2)
+ fillrect(0, (int)y, 640, 2,
+ (int)(((float)(top_clr.red-bot_clr.red)/(0-480)) * y + top_clr.red),
+@@ -199,11 +198,23 @@
+ SDL_UnlockSurface(screen);
+ }
+ /* Update just the part of the display that we've changed */
++#ifndef RES320X240
+ SDL_UpdateRect(screen, x, y, 1, 1);
++#else
++ SDL_UpdateRect(screen, x/2, y/2, 1, 1);
++#endif
+ }
+
+ void drawline(int x1, int y1, int x2, int y2, int r, int g, int b, int a)
+ {
++
++#ifdef RES320X240
++ x1=x1/2;
++ x2=x2/2;
++ y1=y1/2;
++ y2=y2/2;
++#endif
++
+ #ifndef NOOPENGL
+ if(use_gl)
+ {
+@@ -280,6 +291,13 @@
+ y += h;
+ h = -h;
+ }
++
++#ifdef RES320X240
++ x=x;
++ y=y/2;
++ w=w/2;
++ h=h/2;
++#endif
+
+ #ifndef NOOPENGL
+ if(use_gl)
+@@ -367,6 +385,9 @@
+ void update_rect(SDL_Surface *scr, Sint32 x, Sint32 y, Sint32 w, Sint32 h)
+ {
+ if(!use_gl)
++#ifndef RES320X240
++ SDL_UpdateRect(scr, x, y, w, h);
++#else
+ SDL_UpdateRect(scr, x, y, w, h);
++#endif
+ }
+-
+diff -ur supertux-0.1.3/src/setup.cpp supertux-0.1.3-gp2x/src/setup.cpp
+--- supertux-0.1.3/src/setup.cpp 2005-07-08 15:19:17.000000000 +0300
++++ supertux-0.1.3-gp2x/src/setup.cpp 2006-05-03 23:32:49.000000000 +0300
+@@ -62,10 +62,19 @@
+ #define DATA_PREFIX "./data/"
+ #endif
+
+-/* Screen proprities: */
++/* Screen properties: */
+ /* Don't use this to test for the actual screen sizes. Use screen->w/h instead! */
++#ifndef RES320X240
+ #define SCREEN_W 640
+ #define SCREEN_H 480
++#else
++#define SCREEN_W 320
++#define SCREEN_H 240
++#endif
++
++#ifdef GP2X
++#define DATA_PREFIX "data/"
++#endif
+
+ /* Local function prototypes: */
+
+@@ -308,10 +317,14 @@
+ char str[1024];
+ /* Get home directory (from $HOME variable)... if we can't determine it,
+ use the current directory ("."): */
++#ifndef GP2X
+ if (getenv("HOME") != NULL)
+ home = getenv("HOME");
+ else
+ home = ".";
++#else
++ home = ".";
++#endif
+
+ st_dir = (char *) malloc(sizeof(char) * (strlen(home) +
+ strlen("/.supertux") + 1));
+@@ -340,9 +353,10 @@
+ // User has not that a datadir, so we try some magic
+ if (datadir.empty())
+ {
+-#ifndef WIN32
+ // Detect datadir
+ char exe_file[PATH_MAX];
++
++#ifndef WIN32
+ if (readlink("/proc/self/exe", exe_file, PATH_MAX) < 0)
+ {
+ puts("Couldn't read /proc/self/exe, using default path: " DATA_PREFIX);
+@@ -358,7 +372,12 @@
+ datadir = exedir + "../share/supertux"; // SuperTux run from PATH
+ if (access(datadir.c_str(), F_OK) != 0)
+ { // If all fails, fall back to compiled path
+- datadir = DATA_PREFIX;
++ datadir = exedir + "./data"; // SuperTux run with data in same path as executable
++ if (access(datadir.c_str(), F_OK) != 0)
++ {
++ // If all fails, fall back to compiled path
++ datadir = DATA_PREFIX;
++ }
+ }
+ }
+ }
+@@ -375,7 +394,8 @@
+ main_menu = new Menu();
+ options_menu = new Menu();
+ options_keys_menu = new Menu();
+- options_joystick_menu = new Menu();
++ options_joystick_axis_menu = new Menu();
++ options_joystick_button_menu = new Menu();
+ load_game_menu = new Menu();
+ save_game_menu = new Menu();
+ game_menu = new Menu();
+@@ -384,22 +404,27 @@
+ contrib_subset_menu = new Menu();
+ worldmap_menu = new Menu();
+
+- main_menu->set_pos(screen->w/2, 335);
++ main_menu->set_pos(screen->w/2, (int)(335)+20);
+ main_menu->additem(MN_GOTO, "Start Game",0,load_game_menu, MNID_STARTGAME);
+ main_menu->additem(MN_GOTO, "Bonus Levels",0,contrib_menu, MNID_CONTRIB);
+ main_menu->additem(MN_GOTO, "Options",0,options_menu, MNID_OPTIONMENU);
++
++#ifndef GP2X
+ main_menu->additem(MN_ACTION,"Level Editor",0,0, MNID_LEVELEDITOR);
++#endif
+ main_menu->additem(MN_ACTION,"Credits",0,0, MNID_CREDITS);
+ main_menu->additem(MN_ACTION,"Quit",0,0, MNID_QUITMAINMENU);
+
+ options_menu->additem(MN_LABEL,"Options",0,0);
+ options_menu->additem(MN_HL,"",0,0);
++#ifndef GP2X
+ #ifndef NOOPENGL
+ options_menu->additem(MN_TOGGLE,"OpenGL",use_gl,0, MNID_OPENGL);
+ #else
+ options_menu->additem(MN_DEACTIVE,"OpenGL (not supported)",use_gl, 0, MNID_OPENGL);
+ #endif
+ options_menu->additem(MN_TOGGLE,"Fullscreen",use_fullscreen,0, MNID_FULLSCREEN);
++#endif
+ if(audio_device)
+ {
+ options_menu->additem(MN_TOGGLE,"Sound ", use_sound,0, MNID_SOUND);
+@@ -411,10 +436,15 @@
+ options_menu->additem(MN_DEACTIVE,"Music ", false,0, MNID_MUSIC);
+ }
+ options_menu->additem(MN_TOGGLE,"Show FPS ",show_fps,0, MNID_SHOWFPS);
++#ifndef GP2X
+ options_menu->additem(MN_GOTO,"Keyboard Setup",0,options_keys_menu);
++#endif
+
+ //if(use_joystick)
+- // options_menu->additem(MN_GOTO,"Joystick Setup",0,options_joystick_menu);
++#ifdef GP2X
++ options_menu->additem(MN_GOTO,"Joystick Move Setup",0,options_joystick_axis_menu);
++ options_menu->additem(MN_GOTO,"Joystick Action Setup",0,options_joystick_button_menu);
++#endif
+
+ options_menu->additem(MN_HL,"",0,0);
+ options_menu->additem(MN_BACK,"Back",0,0);
+@@ -429,6 +459,7 @@
+ options_keys_menu->additem(MN_HL,"",0,0);
+ options_keys_menu->additem(MN_BACK,"Back",0,0);
+
++#ifndef GP2X
+ if(use_joystick)
+ {
+ options_joystick_menu->additem(MN_LABEL,"Joystick Setup",0,0);
+@@ -442,6 +473,20 @@
+ options_joystick_menu->additem(MN_HL,"",0,0);
+ options_joystick_menu->additem(MN_BACK,"Back",0,0);
+ }
++#else
++ options_joystick_axis_menu->additem(MN_LABEL,"Joystick Move Setup",0,0);
++ options_joystick_axis_menu->additem(MN_CONTROLFIELD,"Up", 0,0, 11,&joystick_keymap.up_button);
++ options_joystick_axis_menu->additem(MN_CONTROLFIELD,"Down", 0,0, 12,&joystick_keymap.down_button);
++ options_joystick_axis_menu->additem(MN_CONTROLFIELD,"Left", 0,0, 13,&joystick_keymap.left_button);
++ options_joystick_axis_menu->additem(MN_CONTROLFIELD,"Right", 0,0, 14,&joystick_keymap.right_button);
++ options_joystick_axis_menu->additem(MN_BACK,"Back",0,0);
++
++ options_joystick_button_menu->additem(MN_LABEL,"Joystick Action Setup",0,0);
++ options_joystick_button_menu->additem(MN_CONTROLFIELD,"Jump", 0,0, 15,&joystick_keymap.a_button);
++ options_joystick_button_menu->additem(MN_CONTROLFIELD,"Shoot/Run", 0,0, 16,&joystick_keymap.b_button);
++ options_joystick_button_menu->additem(MN_BACK,"Back",0,0);
++#endif
++
+
+ load_game_menu->additem(MN_LABEL,"Start Game",0,0);
+ load_game_menu->additem(MN_HL,"",0,0);
+@@ -576,9 +621,10 @@
+
+ srand(SDL_GetTicks());
+
++#ifndef GP2X
+ /* Set icon image: */
+-
+ seticon();
++#endif
+
+ /* Unicode needed for input handling: */
+
+@@ -586,13 +632,32 @@
+
+ /* Load global images: */
+
++#ifndef RES320X240
++ white_text = new Text(datadir + "/images/status/letters-white.png", TEXT_TEXT, 16,18);
++#else
++ white_text = new Text(datadir + "/images/status/letters-white-small.png", TEXT_TEXT, 8,9);
++ fadeout();
++#endif
++
++
++#ifndef RES320X240
+ black_text = new Text(datadir + "/images/status/letters-black.png", TEXT_TEXT, 16,18);
++#else
++ black_text = new Text(datadir + "/images/status/letters-black.png", TEXT_TEXT, 8,9);
++#endif
++#ifndef RES320X240
+ gold_text = new Text(datadir + "/images/status/letters-gold.png", TEXT_TEXT, 16,18);
++#else
++ gold_text = new Text(datadir + "/images/status/letters-gold.png", TEXT_TEXT, 8,9);
++#endif
+ silver_text = new Text(datadir + "/images/status/letters-silver.png", TEXT_TEXT, 16,18);
++#ifndef RES320X240
+ blue_text = new Text(datadir + "/images/status/letters-blue.png", TEXT_TEXT, 16,18);
++#else
++ blue_text = new Text(datadir + "/images/status/letters-blue.png", TEXT_TEXT, 8,9);
++#endif
+ red_text = new Text(datadir + "/images/status/letters-red.png", TEXT_TEXT, 16,18);
+ green_text = new Text(datadir + "/images/status/letters-green.png", TEXT_TEXT, 16,18);
+- white_text = new Text(datadir + "/images/status/letters-white.png", TEXT_TEXT, 16,18);
+ white_small_text = new Text(datadir + "/images/status/letters-white-small.png", TEXT_TEXT, 8,9);
+ white_big_text = new Text(datadir + "/images/status/letters-white-big.png", TEXT_TEXT, 20,22);
+ yellow_nums = new Text(datadir + "/images/status/numbers.png", TEXT_NUM, 32,32);
+@@ -665,14 +736,22 @@
+ Surface::reload_all();
+
+ /* Set window manager stuff: */
++#ifndef GP2X_VERSION
+ SDL_WM_SetCaption("SuperTux " VERSION, "SuperTux");
++#endif
+ }
+
+ void st_video_setup_sdl(void)
+ {
+ if (use_fullscreen)
+ {
++#ifndef GP2X
+ screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 0, SDL_FULLSCREEN ) ; /* | SDL_HWSURFACE); */
++#else
++// screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 16, SDL_HWSURFACE | SDL_DOUBLEBUF ) ; /* GP2X */
++ printf("screen width: %d, height: %d\n",SCREEN_W, SCREEN_H);
++ screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 16, SDL_SWSURFACE ) ; /* GP2X */
++#endif
+ if (screen == NULL)
+ {
+ fprintf(stderr,
+@@ -685,14 +764,22 @@
+ }
+ else
+ {
++#ifndef GP2X
+ screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 0, SDL_HWSURFACE | SDL_DOUBLEBUF );
+-
++#else
++// screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 16, SDL_HWSURFACE | SDL_DOUBLEBUF ) ; /* GP2X */
++ screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 16, SDL_SWSURFACE ) ; /* GP2X */
++#endif
+ if (screen == NULL)
+ {
+ fprintf(stderr,
+ "\nError: I could not set up video for 640x480 mode.\n"
+ "The Simple DirectMedia error that occured was:\n"
+ "%s\n\n", SDL_GetError());
++#ifdef GP2X_VERSION
++ chdir("/usr/gp2x");
++ execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
++#endif
+ exit(1);
+ }
+ }
+@@ -790,6 +877,7 @@
+
+ use_joystick = false;
+ }
++#ifndef GP2X
+ else
+ {
+ if (SDL_JoystickNumAxes(js) < 2)
+@@ -811,6 +899,7 @@
+ }
+ }
+ }
++#endif
+ }
+ }
+ }
+@@ -844,12 +933,17 @@
+ }
+ }
+
+-
++ audio_device = true;
++
+ /* Open sound silently regarless the value of "use_sound": */
+
+ if (audio_device)
+ {
++#ifndef GP2X
+ if (open_audio(44100, AUDIO_S16, 2, 2048) < 0)
++#else
++ if (open_audio(44100, AUDIO_S16, 1, 1024) < 0)
++#endif
+ {
+ /* only print out message if sound or music
+ was not disabled at command-line
+@@ -878,6 +972,12 @@
+ close_audio();
+ SDL_Quit();
+ saveconfig();
++
++#ifdef GP2X
++ chdir("/usr/gp2x");
++ execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
++#endif
++
+ }
+
+ /* --- ABORT! --- */
+@@ -893,6 +993,7 @@
+
+ void seticon(void)
+ {
++#ifndef GP2X
+ // int masklen;
+ // Uint8 * mask;
+ SDL_Surface * icon;
+@@ -927,6 +1028,7 @@
+
+ // free(mask);
+ SDL_FreeSurface(icon);
++#endif
+ }
+
+
+@@ -956,6 +1058,7 @@
+ }
+ else if (strcmp(argv[i], "--joymap") == 0)
+ {
++#ifndef GP2X
+ assert(i+1 < argc);
+ if (sscanf(argv[++i],
+ "%d:%d:%d:%d:%d",
+@@ -976,6 +1079,7 @@
+ << " B-Button: " << joystick_keymap.b_button << "\n"
+ << " Start-Button: " << joystick_keymap.start_button << std::endl;
+ }
++#endif
+ }
+ else if (strcmp(argv[i], "--leveleditor") == 0)
+ {
+diff -ur supertux-0.1.3/src/sound.cpp supertux-0.1.3-gp2x/src/sound.cpp
+--- supertux-0.1.3/src/sound.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/sound.cpp 2006-04-22 02:07:57.000000000 +0300
+@@ -22,6 +22,9 @@
+ #include "globals.h"
+ #include "sound.h"
+ #include "setup.h"
++#ifdef GP2X
++#include <string.h>
++#endif
+
+ /*global variable*/
+ bool use_sound = true; /* handle sound on/off menu and command-line option */
+@@ -54,12 +57,21 @@
+
+ #include <SDL_mixer.h>
+
++#ifndef GP2X
+ Mix_Chunk * sounds[NUM_SOUNDS];
++#else
+
+-/* --- OPEN THE AUDIO DEVICE --- */
++#include <mikmod.h>
++static MODULE *music=NULL;
++static SAMPLE *chunk[NUM_SOUNDS];
++static int chunkFlag[NUM_SOUNDS];
++#endif
+
++/* --- OPEN THE AUDIO DEVICE --- */
+ int open_audio (int frequency, Uint16 format, int channels, int chunksize)
+ {
++// close_audio();
++#ifndef GP2X
+ if (Mix_OpenAudio( frequency, format, channels, chunksize ) < 0)
+ return -1;
+
+@@ -74,20 +86,93 @@
+ /* prepare the spanning effects */
+ Mix_SetPanning( SOUND_LEFT_SPEAKER, 230, 24 );
+ Mix_SetPanning( SOUND_RIGHT_SPEAKER, 24, 230 );
++#else
++ if (drv_oss.Name) // Valid OSS driver
++ {
++ if (drv_oss.CommandLine) // Valid Commandline
++ {
++ drv_oss.CommandLine("buffer=14,count=2");
++ }
++ MikMod_RegisterDriver(&drv_oss);
++ }
++ if (drv_alsa.Name) // Valid ALSA driver
++ {
++ if (drv_alsa.CommandLine) // Valid Commandline
++ {
++ drv_alsa.CommandLine("buffer=14");
++ }
++ MikMod_RegisterDriver(&drv_alsa);
++ }
++ MikMod_RegisterDriver(&drv_nos);
++
++ // register standard tracker
++ MikMod_RegisterAllLoaders();
++
++ // Note, the md_mode flags are already set by default
++ md_mode |= DMODE_SOFT_SNDFX | DMODE_SOFT_MUSIC;
++
++ if (MikMod_Init("")) // Command paramenters are ignored as all drivers are registered
++ {
++ printf("mikmod init war fürn arsch\n");
++ return 1;
++ }
++
++ load_sounds();
++
++ // get ready to play
++ MikMod_EnableOutput();
++ md_volume =64;
++ md_sndfxvolume = 64;
++ //md_musicvolume = md_sndfxvolume = 64;
++
++ use_sound = true;
++ audio_device=true;
++
++#endif
+ return 0;
+-}
+
++}
+
+ /* --- CLOSE THE AUDIO DEVICE --- */
+
+ void close_audio( void )
+ {
++#ifndef GP2X
+ if (audio_device) {
+ Mix_UnregisterAllEffects( SOUND_LEFT_SPEAKER );
+ Mix_UnregisterAllEffects( SOUND_RIGHT_SPEAKER );
+ Mix_CloseAudio();
+ }
++#else
++ int i;
++ if (! audio_device) return;
++
++ MikMod_DisableOutput();
++ Player_Stop();
++ MikMod_Update();
++
++ if (music) {
++ Player_Free(music);
++ music = NULL;
++ }
++
++ for ( i=0 ; i<NUM_SOUNDS ; i++ ) {
++ if ( chunk[i] ) {
++ Sample_Free(chunk[i]);
++ }
++ }
++
++ MikMod_Update();
++ MikMod_Exit();
++#endif
++}
++
++#ifdef GP2X
++void updateSound ( void ) {
++ if (! audio_device) return;
++ MikMod_Update();
+ }
++#endif
+
+
+ /* --- LOAD A SOUND --- */
+@@ -105,6 +190,30 @@
+ return(snd);
+ }
+
++#ifdef GP2X
++static void load_sounds() {
++ int i;
++ std::string name;
++ char file[100];
++
++ for ( i=0 ; i<NUM_SOUNDS ; i++ ) {
++ name = datadir + soundfilenames[i];
++ printf("loading: %s\n",name.c_str());
++ snprintf(file,sizeof(file),"%s",name.c_str());
++ if ( NULL == (chunk[i] = Sample_Load(file)) ) {
++ fprintf(stderr, "Couldn't load: %s\n", file);
++ use_sound = 0;
++ return;
++ }
++ chunkFlag[i] = 0;
++ }
++
++ // reserve voices for sound effects
++ MikMod_SetNumVoices(-1, 4);
++}
++#endif
++
++
+ /* --- PLAY A SOUND ON LEFT OR RIGHT OR CENTER SPEAKER --- */
+
+ void play_sound(Mix_Chunk * snd, enum Sound_Speaker whichSpeaker)
+@@ -130,8 +239,45 @@
+ }
+ }
+
++
++#ifdef GP2X
++void play_chunk(int idx)
++{
++ int cid;
++// if (use_sound) return;
++ cid = Sample_Play (chunk[idx], 0, 0);
++ Voice_SetPanning(cid, PAN_CENTER);
++ Voice_SetVolume(cid, 1000);
++}
++#endif
++
++
+ void free_chunk(Mix_Chunk *chunk)
+ {
+ Mix_FreeChunk( chunk );
+ }
+
++void sound_volume ( int vol )
++{
++#ifndef GP2X
++ static int volume = 10;
++
++ if ( vol == 1 ) volume-=5;
++ else if ( vol == 2 ) volume+=5;
++ Mix_Volume(-1,volume);
++#endif
++}
++
++#ifdef GP2X
++void increaseSoundVolume(void)
++{
++ if (md_volume > (256 - 13)) md_volume = 256;
++ else md_volume += 13;
++}
++
++void decreaseSoundVolume(void)
++{
++ if (md_volume < 13) md_volume = 0;
++ else md_volume -= 13;
++}
++#endif
+diff -ur supertux-0.1.3/src/sound.h supertux-0.1.3-gp2x/src/sound.h
+--- supertux-0.1.3/src/sound.h 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/sound.h 2006-04-21 00:17:09.000000000 +0300
+@@ -75,14 +75,27 @@
+ #include <SDL_mixer.h>
+
+ /* variables for stocking the sound and music */
++#ifndef GP2X
+ extern Mix_Chunk* sounds[NUM_SOUNDS];
++#endif
+
+ /* functions handling the sound and music */
+ int open_audio(int frequency, Uint16 format, int channels, int chunksize);
+ void close_audio( void );
+
++#ifndef GP2X
+ Mix_Chunk * load_sound(const std::string& file);
++#endif
+ void free_chunk(Mix_Chunk*chunk);
+ void play_sound(Mix_Chunk * snd, enum Sound_Speaker whichSpeaker);
++void sound_volume ( int vol );
+
+ #endif /*SUPERTUX_SOUND_H*/
++
++#ifdef GP2X
++void play_chunk(int idx);
++static void load_sounds();
++void updateSound ( void );
++void increaseSoundVolume(void);
++void decreaseSoundVolume(void);
++#endif
+diff -ur supertux-0.1.3/src/special.cpp supertux-0.1.3-gp2x/src/special.cpp
+--- supertux-0.1.3/src/special.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/special.cpp 2006-04-20 21:39:41.000000000 +0300
+@@ -105,12 +105,21 @@
+
+ base.ym = base.ym + 0.5 * frame_ratio;
+
++#ifndef RES320X240
+ if (base.x < scroll_x ||
+ base.x > scroll_x + screen->w ||
+ base.y > screen->h ||
+ issolid(base.x + 4, base.y + 2) ||
+ issolid(base.x, base.y + 2) ||
+ life_count <= 0)
++#else
++ if (base.x < scroll_x ||
++ base.x > scroll_x + 640 ||
++ base.y > 480 ||
++ issolid(base.x + 4, base.y + 2) ||
++ issolid(base.x, base.y + 2) ||
++ life_count <= 0)
++#endif
+ {
+ remove_me();
+ }
+@@ -120,8 +129,13 @@
+ void
+ Bullet::draw()
+ {
++#ifndef RES320X240
+ if (base.x >= scroll_x - base.width &&
+ base.x <= scroll_x + screen->w)
++#else
++ if (base.x >= scroll_x - base.width &&
++ base.x <= scroll_x + 640)
++#endif
+ {
+ img_bullet->draw(base.x - scroll_x, base.y);
+ }
+@@ -140,7 +154,7 @@
+ {
+ kind = kind_;
+ dir = dir_;
+-
++
+ base.width = 32;
+ base.height = 0;
+ base.x = x_;
+@@ -197,7 +211,11 @@
+ remove_me();
+ return;
+ }
++#ifndef RES320X240
+ if(base.y > screen->h) {
++#else
++ if(base.y > 640) {
++#endif
+ remove_me();
+ return;
+ }
+@@ -252,7 +270,12 @@
+ {
+ /* Rising up... */
+
++
++#ifndef RES320X240
+ dest.x = (int)(base.x - scroll_x);
++#else
++ dest.x = (int)(base.x - scroll_x)/2;
++#endif
+ dest.y = (int)(base.y + 32 - base.height);
+ dest.w = 32;
+ dest.h = (int)base.height;
+@@ -297,7 +320,11 @@
+ if(kind != UPGRADE_GROWUP)
+ return;
+
++#ifndef GP2X
+ play_sound(sounds[SND_BUMP_UPGRADE], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_BUMP_UPGRADE);
++#endif
+
+ // do a little jump and change direction
+ physic.set_velocity(-physic.get_velocity_x(), 3);
+@@ -329,18 +356,30 @@
+
+ if (kind == UPGRADE_GROWUP)
+ {
++#ifndef GP2X
+ play_sound(sounds[SND_EXCELLENT], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_EXCELLENT);
++#endif
+ pplayer->grow();
+ }
+ else if (kind == UPGRADE_ICEFLOWER)
+ {
++#ifndef GP2X
+ play_sound(sounds[SND_COFFEE], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_COFFEE);
++#endif
+ pplayer->grow();
+ pplayer->got_coffee = true;
+ }
+ else if (kind == UPGRADE_HERRING)
+ {
++#ifndef GP2X
+ play_sound(sounds[SND_HERRING], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_HERRING);
++#endif
+ pplayer->invincible_timer.start(TUX_INVINCIBLE_TIME);
+ World::current()->play_music(HERRING_MUSIC);
+ }
+@@ -348,7 +387,11 @@
+ {
+ if(player_status.lives < MAX_LIVES) {
+ player_status.lives++;
++#ifndef GP2X
+ play_sound(sounds[SND_LIFEUP], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_LIFEUP);
++#endif
+ }
+ }
+
+diff -ur supertux-0.1.3/src/text.cpp supertux-0.1.3-gp2x/src/text.cpp
+--- supertux-0.1.3/src/text.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/text.cpp 2006-04-22 01:59:36.000000000 +0300
+@@ -24,6 +24,7 @@
+ #include "defines.h"
+ #include "screen.h"
+ #include "text.h"
++#include "sound.h"
+
+ Text::Text(const std::string& file, int kind_, int w_, int h_)
+ {
+@@ -79,6 +80,7 @@
+ void
+ Text::draw(const char* text, int x, int y, int shadowsize, int update)
+ {
++
+ if(text != NULL)
+ {
+ if(shadowsize != 0)
+@@ -116,6 +118,9 @@
+ else if ( text[i] == '\n')
+ {
+ y += h + 2;
++#ifdef RES320X240
++ y+=6;
++#endif
+ j = 0;
+ }
+ }
+@@ -129,6 +134,9 @@
+ else if ( text[i] == '\n')
+ {
+ y += h + 2;
++#ifdef RES320X240
++ y+=6;
++#endif
+ j = 0;
+ }
+ }
+@@ -306,6 +314,24 @@
+ break;
+ }
+ break;
++
++#ifdef GP2X
++ case SDL_JOYBUTTONDOWN:
++ if ( event.jbutton.button == joystick_keymap.down_button ) {
++ speed += SPEED_INC;
++ }
++ if ( event.jbutton.button == joystick_keymap.up_button ) {
++ speed -= SPEED_INC;
++ }
++ if ( event.jbutton.button == joystick_keymap.b_button ) {
++ done = 1;
++ }
++ if ( event.jbutton.button == joystick_keymap.a_button ) {
++ scroll += SCROLL;
++ }
++ break;
++#endif
++
+ case SDL_QUIT:
+ done = 1;
+ break;
+@@ -330,21 +356,36 @@
+ white_small_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll),
+ A_HMIDDLE, A_TOP, 1);
+ y += white_small_text->h+ITEMS_SPACE;
++#ifdef RES320X240
++ y += 6;
++#endif
+ break;
+ case ' ':
+ white_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll),
+ A_HMIDDLE, A_TOP, 1);
+ y += white_text->h+ITEMS_SPACE;
++#ifdef RES320X240
++ y += 6;
++#endif
+ break;
+ case '-':
+- white_big_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll),
+- A_HMIDDLE, A_TOP, 3);
++#ifdef RES320X240
++ white_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll), A_HMIDDLE, A_TOP, 3);
++#else
++ white_big_text->drawf(names.item[i]+1, 0, screen->h+y-int(scroll), A_HMIDDLE, A_TOP, 3);
++#endif
+ y += white_big_text->h+ITEMS_SPACE;
++#ifdef RES320X240
++ y += 6;
++#endif
+ break;
+ default:
+ blue_text->drawf(names.item[i], 0, screen->h+y-int(scroll),
+ A_HMIDDLE, A_TOP, 1);
+ y += blue_text->h+ITEMS_SPACE;
++#ifdef RES320X240
++ y += 6;
++#endif
+ break;
+ }
+ }
+@@ -360,7 +401,13 @@
+ if(scroll < 0)
+ scroll = 0;
+
+- SDL_Delay(10);
++#ifndef GP2X
++ SDL_Delay(10);
++#else
++ SDL_Delay(2);
++ updateSound();
++#endif
++
+ }
+ string_list_free(&names);
+
+diff -ur supertux-0.1.3/src/texture.cpp supertux-0.1.3-gp2x/src/texture.cpp
+--- supertux-0.1.3/src/texture.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/texture.cpp 2006-04-10 14:29:03.000000000 +0300
+@@ -211,7 +211,8 @@
+ {
+ if (impl)
+ {
+- if (impl->draw(x, y, alpha, update) == -2)
++// if (impl->draw(x, y, alpha, update) == -2)
++ if (impl->draw(x/2, y/2, alpha, update) == -2)
+ reload();
+ }
+ }
+@@ -231,7 +232,8 @@
+ {
+ if (impl)
+ {
+- if (impl->draw_part(sx, sy, x, y, w, h, alpha, update) == -2)
++// if (impl->draw_part(sx, sy, x, y, w, h, alpha, update) == -2)
++ if (impl->draw_part(sx, sy, x, y/2, w, h, alpha, update) == -2)
+ reload();
+ }
+ }
+@@ -241,7 +243,8 @@
+ {
+ if (impl)
+ {
+- if (impl->draw_stretched(x, y, w, h, alpha, update) == -2)
++// if (impl->draw_stretched(x, y, w, h, alpha, update) == -2)
++ if (impl->draw_stretched(x/2, y/2, w, h, alpha, update) == -2)
+ reload();
+ }
+ }
+diff -ur supertux-0.1.3/src/title.cpp supertux-0.1.3-gp2x/src/title.cpp
+--- supertux-0.1.3/src/title.cpp 2005-07-08 15:19:17.000000000 +0300
++++ supertux-0.1.3-gp2x/src/title.cpp 2006-04-22 01:29:08.000000000 +0300
+@@ -51,6 +51,7 @@
+ #include "tile.h"
+ #include "resources.h"
+ #include "worldmap.h"
++#include "sound.h"
+
+ static Surface* bkg_title;
+ static Surface* logo;
+@@ -80,6 +81,10 @@
+
+ void generate_contrib_menu()
+ {
++#ifdef RES320X240
++ fadeout();
++#endif
++
+ string_list_type level_subsets = dsubdirs("/levels", "info");
+
+ free_contrib_menu();
+@@ -208,7 +213,7 @@
+ }
+
+ // Wrap around at the end of the level back to the beginnig
+- if(plevel->width * 32 - 320 < tux->base.x)
++ if((plevel->width * 32) - 320 < tux->base.x)
+ {
+ tux->level_begin();
+ scroll_x = 0;
+@@ -226,7 +231,6 @@
+ {
+ walking = false;
+ }
+-
+ world->draw();
+ }
+
+@@ -301,13 +305,26 @@
+
+ if (Menu::current() == main_menu)
+ logo->draw( 160, 30);
+-
++
++#ifndef RES320X240
+ white_small_text->draw(" SuperTux " VERSION "\n"
+ "Copyright (c) 2003 SuperTux Devel Team\n"
+ "This game comes with ABSOLUTELY NO WARRANTY. This is free software, and you\n"
+ "are welcome to redistribute it under certain conditions; see the file COPYING\n"
+ "for details.\n",
+ 0, 420, 0);
++#else
++ white_small_text->draw(" SuperTux " VERSION "\n"
++ "Copyright (c) 2003 SuperTux Devel Team\n"
++ "This game comes with ABSOLUTELY NO \n"
++ "WARRANTY. This is free software, and\n"
++ "you are welcome to redistribute it\n"
++ "under certain conditions; see the file\n"
++ "COPYING for details.\n",
++ 0, 360, 0);
++#endif
++
++ //updateSound();
+
+ /* Don't draw menu, if quit is true */
+ Menu* menu = Menu::current();
+@@ -337,10 +354,10 @@
+ break;
+ case MNID_CREDITS:
+ music_manager = new MusicManager();
+- menu_song = music_manager->load_music(datadir + "/music/credits.ogg");
++ menu_song = music_manager->load_music(datadir + "/music/credits.mod");
+ music_manager->halt_music();
+ music_manager->play_music(menu_song,0);
+- display_text_file("CREDITS", bkg_title, SCROLL_SPEED_CREDITS);
++ display_text_file("CREDITS", bkg_title, SCROLL_SPEED_CREDITS);
+ music_manager->halt_music();
+ menu_song = music_manager->load_music(datadir + "/music/theme.mod");
+ music_manager->play_music(menu_song);
+diff -ur supertux-0.1.3/src/world.cpp supertux-0.1.3-gp2x/src/world.cpp
+--- supertux-0.1.3/src/world.cpp 2005-06-22 00:16:07.000000000 +0300
++++ supertux-0.1.3-gp2x/src/world.cpp 2006-05-05 23:16:47.000000000 +0300
+@@ -206,6 +206,7 @@
+ }
+ }
+
++
+ /* Draw interactive tiles: */
+ for (y = 0; y < 15; ++y)
+ {
+@@ -255,6 +256,8 @@
+ {
+ (*p)->draw(scroll_x, 0, 1);
+ }
++
++ //updateSound();
+ }
+
+ void
+@@ -312,7 +315,12 @@
+
+ // the space that it takes for the screen to start scrolling, regarding
+ // screen bounds (in pixels)
++#ifndef RES320X240
+ #define X_SPACE (400-16)
++#else
++#define X_SPACE (80-16)
++#endif
++
+ // the time it takes to move the camera (in ms)
+ #define CHANGE_DIR_SCROLL_SPEED 2000
+
+@@ -388,8 +396,13 @@
+ // this code prevent the screen to scroll before the start or after the level's end
+ if(scroll_x < 0)
+ scroll_x = 0;
++#ifndef RES320X240
+ if(scroll_x > level->width * 32 - screen->w)
+ scroll_x = level->width * 32 - screen->w;
++#else
++ if(scroll_x > level->width * 32 - 640)
++ scroll_x = level->width * 32 - 640;
++#endif
+ }
+
+ void
+@@ -481,6 +494,10 @@
+ void
+ World::add_score(float x, float y, int s)
+ {
++#ifdef RES320X240
++ x=x/2;
++#endif
++
+ player_status.score += s;
+
+ FloatingScore* new_floating_score = new FloatingScore();
+@@ -547,8 +564,11 @@
+ Bullet new_bullet;
+ new_bullet.init(x,y,xm,dir);
+ bullets.push_back(new_bullet);
+-
++#ifndef GP2X
+ play_sound(sounds[SND_SHOOT], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_SHOOT);
++#endif
+ }
+
+ void
+@@ -608,8 +628,11 @@
+ counting_distros = false;
+ plevel->change(x, y, TM_IA, tile->next_tile);
+ }
+-
++#ifndef GP2X
+ play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_DISTRO);
++#endif
+ player_status.score = player_status.score + SCORE_DISTRO;
+ player_status.distros++;
+ }
+@@ -622,9 +645,13 @@
+ add_broken_brick(tile,
+ ((int)(x + 1) / 32) * 32,
+ (int)(y / 32) * 32);
+-
++
+ /* Get some score: */
++#ifndef GP2X
+ play_sound(sounds[SND_BRICK], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_BRICK);
++#endif
+ player_status.score = player_status.score + SCORE_BRICK;
+ }
+ }
+@@ -652,7 +679,11 @@
+ {
+ case 1: // Box with a distro!
+ add_bouncy_distro(posx, posy);
++#ifndef GP2X
+ play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_DISTRO);
++#endif
+ player_status.score = player_status.score + SCORE_DISTRO;
+ player_status.distros++;
+ break;
+@@ -662,7 +693,11 @@
+ add_upgrade(posx, posy, col_side, UPGRADE_GROWUP);
+ else /* Tux is big, add an iceflower: */
+ add_upgrade(posx, posy, col_side, UPGRADE_ICEFLOWER);
++#ifndef GP2X
+ play_sound(sounds[SND_UPGRADE], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_UPGRADE);
++#endif
+ break;
+
+ case 3: // Add a golden herring
+@@ -688,7 +723,11 @@
+ if (tile && tile->distro)
+ {
+ level->change(x, y, TM_IA, tile->next_tile);
++#ifndef GP2X
+ play_sound(sounds[SND_DISTRO], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_DISTRO);
++#endif
+
+ if (bounciness == BOUNCE)
+ {
+diff -ur supertux-0.1.3/src/worldmap.cpp supertux-0.1.3-gp2x/src/worldmap.cpp
+--- supertux-0.1.3/src/worldmap.cpp 2005-07-08 15:19:17.000000000 +0300
++++ supertux-0.1.3-gp2x/src/worldmap.cpp 2006-05-05 22:54:04.000000000 +0300
+@@ -376,11 +376,11 @@
+ {
+ tile_manager = new TileManager();
+
+- width = 20;
+- height = 15;
++ width = (int)(20);
++ height = (int)(15);
+
+- start_x = 4;
+- start_y = 5;
++ start_x = int(4);
++ start_y = int(5);
+
+ passive_message_timer.init(true);
+
+@@ -395,7 +395,7 @@
+ enter_level = false;
+
+ name = "<no file>";
+- music = "SALCON.MOD";
++ music = "salcon.mod";
+ }
+
+ WorldMap::~WorldMap()
+@@ -589,7 +589,8 @@
+ break;
+ }
+ break;
+-
++
++#ifndef GP2X
+ case SDL_JOYAXISMOTION:
+ if (event.jaxis.axis == joystick_keymap.x_axis)
+ {
+@@ -617,13 +618,29 @@
+ if (event.jhat.value == SDL_HAT_RIGHT)
+ input_direction = D_EAST;
+ break;
+-
++#endif
+ case SDL_JOYBUTTONDOWN:
++#ifndef GP2X
+ if (event.jbutton.button == joystick_keymap.b_button)
+ enter_level = true;
+ else if (event.jbutton.button == joystick_keymap.start_button)
+ on_escape_press();
+ break;
++#else
++ if (event.jbutton.button == joystick_keymap.a_button)
++ enter_level = true;
++ else if (event.jbutton.button == joystick_keymap.start_button)
++ on_escape_press();
++ else if (event.jbutton.button == joystick_keymap.up_button)
++ input_direction = D_NORTH;
++ else if (event.jbutton.button == joystick_keymap.down_button)
++ input_direction = D_SOUTH;
++ else if (event.jbutton.button == joystick_keymap.right_button)
++ input_direction = D_EAST;
++ else if (event.jbutton.button == joystick_keymap.left_button)
++ input_direction = D_WEST;
++ break;
++#endif
+
+ default:
+ break;
+@@ -769,13 +786,13 @@
+ {
+ MusicRef theme =
+ music_manager->load_music(datadir + "/music/theme.mod");
+- MusicRef credits = music_manager->load_music(datadir + "/music/credits.ogg");
++ MusicRef credits = music_manager->load_music(datadir + "/music/credits.xm");
+ music_manager->play_music(theme);
+ // Display final credits and go back to the main menu
+ display_text_file(level->extro_filename,
+ "/images/background/extro.jpg", SCROLL_SPEED_MESSAGE);
+ music_manager->play_music(credits,0);
+- display_text_file("CREDITS",
++ display_text_file("CREDITS",
+ "/images/background/oiltux.jpg", SCROLL_SPEED_CREDITS);
+ music_manager->play_music(theme);
+ quit = true;
+@@ -812,7 +829,12 @@
+ if (level->x == tux->get_tile_pos().x &&
+ level->y == tux->get_tile_pos().y)
+ {
++#ifndef GP2X
+ play_sound(sounds[SND_TELEPORT], SOUND_CENTER_SPEAKER);
++#else
++ play_chunk(SND_TELEPORT);
++ updateSound();
++#endif
+ tux->back_direction = D_NONE;
+ tux->set_tile_pos(Point(level->teleport_dest_x, level->teleport_dest_y));
+ SDL_Delay(1000);
+@@ -914,26 +936,39 @@
+ void
+ WorldMap::draw_status()
+ {
++ int xdiv;
++
++#ifdef RES320X240
++ xdiv=2;
++#else
++ xdiv=1;
++#endif
++
+ char str[80];
+ sprintf(str, "%d", player_status.score);
+ white_text->draw("SCORE", 0, 0);
+- gold_text->draw(str, 96, 0);
++ gold_text->draw(str, (int)(96)/xdiv, 0);
+
+ sprintf(str, "%d", player_status.distros);
+- white_text->draw_align("COINS", 320-64, 0, A_LEFT, A_TOP);
+- gold_text->draw_align(str, 320+64, 0, A_RIGHT, A_TOP);
++ white_text->draw_align("COINS", (int)(320-64)/xdiv, 0, A_LEFT, A_TOP);
++ gold_text->draw_align(str, (int)(320+64)/xdiv, 0, A_RIGHT, A_TOP);
+
+- white_text->draw("LIVES", 480, 0);
++ white_text->draw("LIVES", (int)(480)/xdiv, 0);
+ if (player_status.lives >= 5)
+ {
+ sprintf(str, "%dx", player_status.lives);
+- gold_text->draw_align(str, 617, 0, A_RIGHT, A_TOP);
+- tux_life->draw(565+(18*3), 0);
++#ifdef RES320X240
++ gold_text->draw_align(str, (int)(617)/xdiv-5, 0, A_RIGHT, A_TOP);
++ tux_life->draw((int)((565-12+(18*3))), 0);
++#else
++ gold_text->draw_align(str, (int)(617), 0, A_RIGHT, A_TOP);
++ tux_life->draw((int)((565+(18*3))), 0);
++#endif
+ }
+ else
+ {
+ for(int i= 0; i < player_status.lives; ++i)
+- tux_life->draw(565+(18*i),0);
++ tux_life->draw((565+(18/xdiv*i)),0);
+ }
+
+ if (!tux->is_moving())
+@@ -945,7 +980,11 @@
+ {
+ if(!i->name.empty())
+ {
++#ifndef RES320X240
+ white_text->draw_align(i->title.c_str(), screen->w/2, screen->h, A_HMIDDLE, A_BOTTOM);
++#else
++ white_text->draw_align(i->title.c_str(), screen->w/2, 470, A_HMIDDLE, A_BOTTOM);
++#endif
+ }
+ else if (i->teleport_dest_x != -1) {
+ if(!i->teleport_message.empty())
+@@ -955,7 +994,7 @@
+ /* Display a message in the map, if any as been selected */
+ if(!i->display_map_message.empty() && !i->passive_message)
+ gold_text->draw_align(i->display_map_message.c_str(),
+- screen->w/2, screen->h - 30,A_HMIDDLE, A_BOTTOM);
++ screen->w/2, screen->h - (int)(30),A_HMIDDLE, A_BOTTOM);
+ break;
+ }
+ }
+@@ -964,7 +1003,7 @@
+ /* Display a passive message in the map, if needed */
+ if(passive_message_timer.check())
+ gold_text->draw_align(passive_message.c_str(),
+- screen->w/2, screen->h - 30,A_HMIDDLE, A_BOTTOM);
++ screen->w/2, screen->h - (int)(30),A_HMIDDLE, A_BOTTOM);
+ }
+
+ void
+@@ -997,6 +1036,7 @@
+ Point tux_pos = tux->get_pos();
+ if (1)
+ {
++#ifndef GP2X
+ offset.x = -tux_pos.x + screen->w/2;
+ offset.y = -tux_pos.y + screen->h/2;
+
+@@ -1005,6 +1045,16 @@
+
+ if (offset.x < screen->w - width*32) offset.x = screen->w - width*32;
+ if (offset.y < screen->h - height*32) offset.y = screen->h - height*32;
++#else
++ offset.x = -tux_pos.x + 640/2;
++ offset.y = -tux_pos.y + 480/2;
++
++ if (offset.x > 0) offset.x = 0;
++ if (offset.y > 0) offset.y = 0;
++
++ if (offset.x < 640 - width*32) offset.x = 640 - width*32;
++ if (offset.y < 480 - height*32) offset.y = 480 - height*32;
++#endif
+ }
+
+ draw(offset);
diff --git a/packages/supertux/files/img-resize.sh b/packages/supertux/files/img-resize.sh
new file mode 100644
index 0000000000..0197964193
--- /dev/null
+++ b/packages/supertux/files/img-resize.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+conv() {
+
+if [ ! -d org ]; then
+ mkdir org
+ mv *.jpg *.png org/
+fi
+
+for i in org/*; do
+ b=`basename $i`
+ ext=`expr "x$b" : 'x.*\.\(.*\)'`
+ if [ "$ext" == "png" ]; then
+ if [ $b == "tux-life.png" ]; then
+ cp $i _.png
+ else
+ convert $i -resize 50% -colors 64 _.png
+ fi
+ pngcrush -q _.png $b
+ elif [ "$ext" == "jpg" ]; then
+ convert $i -resize 50% -quality 60 $b
+ fi
+done
+rm _.png
+
+}
+
+conv
diff --git a/packages/supertux/files/supertux-smallsize-data.tar.bz2 b/packages/supertux/files/supertux-smallsize-data.tar.bz2
new file mode 100644
index 0000000000..740e4f4473
--- /dev/null
+++ b/packages/supertux/files/supertux-smallsize-data.tar.bz2
Binary files differ
diff --git a/packages/supertux/files/supertux.desktop b/packages/supertux/files/supertux.desktop
new file mode 100644
index 0000000000..8677a71301
--- /dev/null
+++ b/packages/supertux/files/supertux.desktop
@@ -0,0 +1,20 @@
+[Desktop Entry]
+Type=Application
+Version=1.0
+Name=SuperTux
+Name[en]=SuperTux
+Name[de]=SuperTux
+Name[cs]=SuperTux
+GenericName=A Platform Game
+GenericName[en]=A Platform Game
+GenericName[de]=Ein Jump&Run Spiel
+GenericName[cs]=Plošinová hra
+Comment=A Super Mario inspired penguin platform game
+Comment[en]=A Super Mario inspired penguin platform game
+Comment[de]=Ein von Super Mario inspiriertes Pinguin Jump&Run Spiel
+Comment[cs]=PloÅ¡inovka inspirovaná SuperMariem s tuÄňákem Tuxem v hlavní roli
+Icon=supertux
+Exec=supertux
+Terminal=false
+StartupNotify=false
+Categories=Application;Game;ArcadeGame;
diff --git a/packages/supertux/files/supertux.png b/packages/supertux/files/supertux.png
new file mode 100644
index 0000000000..82ac69642c
--- /dev/null
+++ b/packages/supertux/files/supertux.png
Binary files differ
diff --git a/packages/supertux/supertux-qvga_0.1.3.bb b/packages/supertux/supertux-qvga_0.1.3.bb
new file mode 100644
index 0000000000..a38b8efbec
--- /dev/null
+++ b/packages/supertux/supertux-qvga_0.1.3.bb
@@ -0,0 +1,57 @@
+DESCRIPTION = "SuperTux is a classic 2D jump'n'run sidescroller game \
+in a style similar to the original SuperMario games (QVGA, size-optimized version)"
+SECTION = "games"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "libsdl-gfx imagemagick-native pngcrush-native"
+PR = "r0.20"
+
+APPIMAGE = "${WORKDIR}/supertux.png"
+APPDESKTOP = "${WORKDIR}/supertux.desktop"
+
+PACKAGES_prepend = " ${PN}-levels-bonus1 ${PN}-levels-bonus2 "
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/super-tux/supertux-${PV}.tar.bz2 \
+# file://supertux-qvga-gfx.tar.bz2 \
+ file://supertux-smallsize-data.tar.bz2 \
+ file://gp2x.patch;patch=1 \
+ file://img-resize.sh \
+ file://supertux.png \
+ file://supertux.desktop \
+# file://letters-black.png \
+# file://letters-blue.png \
+# file://letters-gold.png \
+# file://mousecursor.png \
+# file://credits.mod \
+ "
+S = "${WORKDIR}/supertux-${PV}"
+
+export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config"
+EXTRA_OECONF = "--enable-320x240 --disable-opengl"
+
+inherit autotools sdl
+
+do_compile_prepend() {
+# for f in letters-black.png letters-blue.png letters-gold.png mousecursor.png; do
+# cp ${WORKDIR}/$f ${S}/data/images/status/
+# done
+ for d in background shared tilesets title worldmap; do
+ cd ${S}/data/images/$d
+ sh ${WORKDIR}/img-resize.sh
+ done
+}
+
+do_install_prepend() {
+ # *-fast.* music plays when time for a level is running out
+ # byte-wise, it's the same file with few bytes changes (for .mod's).
+ # Well, seller feature, what to say, but we won't waste megabytes on
+ # that. Folks should learn to control tempo in there player lib.
+ rm -f ${S}/data/music/*-fast.*
+ # ogg is too heavy for embedded systems
+ rm -f ${S}/data/music/*.ogg
+# cp ${WORKDIR}/*.mod ${S}/data/music/
+}
+
+FILES_${PN}-levels-bonus1 = "${datadir}/supertux/levels/bonus1 ${datadir}/supertux/levels/worldmaps/bonusisland1.stwm"
+FILES_${PN}-levels-bonus2 = "${datadir}/supertux/levels/bonus2 ${datadir}/supertux/levels/worldmaps/bonusisland2.stwm"
+FILES_${PN} += "${datadir}/supertux"
diff --git a/packages/supertux/supertux_0.1.2.bb b/packages/supertux/supertux_0.1.2.bb
index 42ea6039fa..3afa425f1a 100644
--- a/packages/supertux/supertux_0.1.2.bb
+++ b/packages/supertux/supertux_0.1.2.bb
@@ -1,16 +1,18 @@
-DESCRIPTION = "SuperTux is a classic 2D jump'n run sidescroller game \
+DESCRIPTION = "SuperTux is a classic 2D jump'n'run sidescroller game \
in a style similar to the original SuperMario games."
SECTION = "games"
PRIORITY = "optional"
-DEPENDS = "virtual/libsdl libsdl-mixer libsdl-image"
LICENSE = "GPL"
-PR = "r1"
+PR = "r4"
+
+APPIMAGE = "${WORKDIR}/supertux.png"
+APPDESKTOP = "${WORKDIR}/supertux.desktop"
SRC_URI = "${SOURCEFORGE_MIRROR}/super-tux/supertux-${PV}.tar.bz2 \
- http://ssel.vub.ac.be/Members/DennisWagelaar/download/zaurus/supertux-0.1.2-fp.patch.gz;patch=1"
+ http://ssel.vub.ac.be/Members/DennisWagelaar/download/zaurus/supertux-0.1.2-fp.patch.gz;patch=1 \
+ file://supertux.png"
export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config"
+EXTRA_OECONF = "--disable-opengl"
-inherit autotools
-
-# FIXME: Add .desktop file for Opie/Qtopia
+inherit autotools sdl
diff --git a/packages/supertux/supertux_0.1.3.bb b/packages/supertux/supertux_0.1.3.bb
new file mode 100644
index 0000000000..f90670738a
--- /dev/null
+++ b/packages/supertux/supertux_0.1.3.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "SuperTux is a classic 2D jump'n'run sidescroller game \
+in a style similar to the original SuperMario games."
+SECTION = "games"
+PRIORITY = "optional"
+LICENSE = "GPL"
+PR = "r1"
+
+APPIMAGE = "${WORKDIR}/supertux.png"
+APPDESKTOP = "${WORKDIR}/supertux.desktop"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/super-tux/supertux-${PV}.tar.bz2 \
+# http://ssel.vub.ac.be/Members/DennisWagelaar/download/zaurus/supertux-0.1.2-fp.patch.gz;patch=1 \
+ file://supertux.png \
+ file://supertux.desktop \
+ "
+
+export SDL_CONFIG = "${STAGING_BINDIR_CROSS}/sdl-config"
+EXTRA_OECONF = "--disable-opengl"
+
+inherit autotools sdl
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/packages/swt/.mtn2git_empty b/packages/swt/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/swt/.mtn2git_empty
diff --git a/packages/swt/files/.mtn2git_empty b/packages/swt/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/swt/files/.mtn2git_empty
diff --git a/packages/swt/files/Makefile b/packages/swt/files/Makefile
new file mode 100644
index 0000000000..2eb3557cdd
--- /dev/null
+++ b/packages/swt/files/Makefile
@@ -0,0 +1,78 @@
+JAVA=swt-gtk-$(RELEASE).jar
+LIBRARIES=libswt.so libswt-pi.so libswt-mozilla.so
+CLEANFILES=*.files *.jar *.so* *-stamp
+
+RELEASE=OE_SWT_RELEASE
+SONAME_VERSION=OE_SWT_API_VERSION
+
+GCJ=gcj
+JAR=gjar
+JAVAC=javac -classpath .
+LDCONFIG=/sbin/ldconfig
+LN_S=ln -s
+RM=rm -f
+
+GCJFLAGS=-O2 -fPIC -fjni -shared
+
+LINK=$(GCJ) $(GCJFLAGS) -o $@ -Wl,-soname=lib$*.so.$(SONAME_VERSION)
+
+# Build without Jars
+#all:
+# $(MAKE) -f make_linux.mak make_swt make_atk make_cairo
+
+# Build with Jars
+all: $(JAVA)
+ $(MAKE) -f make_linux.mak make_swt make_atk make_cairo
+
+# all: $(JAVA) $(LIBRARIES)
+# $(MAKE) -f make_linux.mak make_swt make_atk make_gnome make_mozilla
+
+clean distclean:
+ $(RM) $(CLEANFILES)
+ $(RM) -r swt swt-pi swt-mozilla
+ -$(MAKE) -f make_linux.mak clean
+
+.PHONY: all clean distclean
+
+swt.files:
+ find org -name *.java \
+ -not -path org/eclipse/swt/internal\* \
+ -not -path org/eclipse/swt/browser\* | sort > $@
+
+swt-mozilla.files:
+ find org/eclipse/swt/browser org/eclipse/swt/internal/mozilla \
+ -name *.java | sort > $@
+
+swt-pi.files:
+ find org/eclipse/swt/internal -name *.java \
+ -not -path org/eclipse/swt/internal/mozilla\* | sort > $@
+
+%-stamp: %.files
+ mkdir -p $*
+ for i in `cat $<`; do \
+ if [ -e $*/$${i%java}class ]; then \
+ echo SKIPPING $$i; \
+ else \
+ echo $(JAVAC) -d $* $$i; \
+ $(JAVAC) -d $* $$i || exit $$?; \
+ fi \
+ done
+ touch $@
+
+%.jar: %-stamp
+ $(JAR) -C $* -cf $@ .
+
+lib%.so.$(RELEASE): %.jar
+ $(LINK) $<
+ $(LDCONFIG) -n .
+
+%.so: %.so.$(RELEASE)
+ $(LN_S) -f $< $@
+
+swt-gtk-$(RELEASE).jar: swt.jar swt-pi.jar swt-mozilla.jar
+ mkdir _jar
+ cd _jar && for i in $^; do $(JAR) -xf ../$$i || exit $$?; done
+ $(JAR) -C _jar -cf $@ org
+ rm -rf _jar
+
+.SECONDARY:
diff --git a/packages/swt/files/swt-hildon.patch b/packages/swt/files/swt-hildon.patch
new file mode 100644
index 0000000000..728dd3070c
--- /dev/null
+++ b/packages/swt/files/swt-hildon.patch
@@ -0,0 +1,128 @@
+Index: swt-hildon/swt-source/make_linux.mak
+===================================================================
+--- swt-hildon.orig/swt-source/make_linux.mak 2008-01-08 09:35:29.000000000 +0100
++++ swt-hildon/swt-source/make_linux.mak 2008-01-08 11:35:01.000000000 +0100
+@@ -45,8 +45,8 @@
+ CAIROLIBS = `pkg-config --libs-only-L cairo` -lcairo
+
+ # Do not use pkg-config to get libs because it includes unnecessary dependencies (i.e. pangoxft-1.0)
+-GTKCFLAGS = `pkg-config --cflags gtk+-2.0`
+-GTKLIBS = `pkg-config --libs-only-L gtk+-2.0 gthread-2.0` -lgtk-x11-2.0 -lgthread-2.0 -L/usr/X11R6/lib $(XLIB64) -lXtst
++GTKCFLAGS = `pkg-config --cflags gtk+-2.0 hildon-1`
++GTKLIBS = -lhildon-1 `pkg-config --libs-only-L gtk+-2.0 gthread-2.0` -lgtk-x11-2.0 -lgthread-2.0 -L/usr/X11R6/lib $(XLIB64) -lXtst
+
+ CDE_LIBS = -L$(CDE_HOME)/lib -R$(CDE_HOME)/lib -lXt -lX11 -lDtSvc
+
+@@ -74,8 +74,6 @@
+ -Wno-non-virtual-dtor \
+ -fPIC \
+ -I. \
+- -I$(JAVA_HOME)/include \
+- -I$(JAVA_HOME)/include/linux \
+ ${SWT_PTR_CFLAGS}
+ MOZILLALIBS = -shared -Wl,--version-script=mozilla_exports -Bsymbolic
+ MOZILLAEXCLUDES = -DNO_XPCOMGlueShutdown -DNO_XPCOMGlueStartup
+@@ -96,8 +94,6 @@
+ -DSWT_VERSION=$(SWT_VERSION) \
+ $(NATIVE_STATS) \
+ -DLINUX -DGTK \
+- -I$(JAVA_HOME)/include \
+- -I$(JAVA_HOME)/include/linux \
+ -fPIC \
+ ${SWT_PTR_CFLAGS}
+ LIBS = -shared -fPIC
+Index: swt-hildon/swt-source/os.c
+===================================================================
+--- swt-hildon.orig/swt-source/os.c 2008-01-08 09:35:29.000000000 +0100
++++ swt-hildon/swt-source/os.c 2008-01-08 09:37:00.000000000 +0100
+@@ -17,6 +17,9 @@
+ #include "os_structs.h"
+ #include "os_stats.h"
+
++#include <hildon/hildon-program.h>
++#include <hildon/hildon-window.h>
++
+ #define OS_NATIVE(func) Java_org_eclipse_swt_internal_gtk_OS_##func
+
+ #ifndef NO_Call
+@@ -7015,9 +7018,18 @@
+ JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1container_1add)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+ {
++ GtkContainer *container = (GtkContainer *) arg0;
++ GtkWidget *widget = (GtkWidget *) arg1;
+ OS_NATIVE_ENTER(env, that, _1gtk_1container_1add_FUNC);
+- gtk_container_add((GtkContainer *)arg0, (GtkWidget *)arg1);
+- OS_NATIVE_EXIT(env, that, _1gtk_1container_1add_FUNC);
++ if (GTK_CHECK_TYPE (widget, GTK_TYPE_MENU)
++ && !strcmp(gtk_menu_get_title(GTK_MENU(widget)), "__main_menu__"))
++ {
++ hildon_window_set_menu(HILDON_WINDOW(container), GTK_MENU(widget));
++ }
++ else
++ gtk_container_add((GtkContainer *)arg0, (GtkWidget *)arg1);
++
++ OS_NATIVE_EXIT(env, that, _1gtk_1container_1add_FUNC);
+ }
+ #endif
+
+@@ -9121,9 +9133,12 @@
+ JNIEXPORT jint JNICALL OS_NATIVE(_1gtk_1menu_1bar_1new)
+ (JNIEnv *env, jclass that)
+ {
++ GtkWidget *menu;
+ jint rc = 0;
+ OS_NATIVE_ENTER(env, that, _1gtk_1menu_1bar_1new_FUNC);
+- rc = (jint)gtk_menu_bar_new();
++ menu = gtk_menu_new();
++ gtk_menu_set_title(menu, "__main_menu__");
++ rc = (jint) menu;
+ OS_NATIVE_EXIT(env, that, _1gtk_1menu_1bar_1new_FUNC);
+ return rc;
+ }
+@@ -15464,8 +15479,22 @@
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+ jint rc = 0;
++ HildonProgram *p;
++ GtkWidget *w;
+ OS_NATIVE_ENTER(env, that, _1gtk_1window_1new_FUNC);
+- rc = (jint)gtk_window_new((GtkWindowType)arg0);
++/*
++ if (GTK_WINDOW_TOPLEVEL == (GtkWindowType) arg0)
++ {
++*/
++ p = hildon_program_get_instance();
++ w = hildon_window_new();
++ hildon_program_add_window(p, HILDON_WINDOW(w));
++/*
++ }
++ else
++ w = gtk_window_new(GTK_WINDOW_POPUP);
++*/
++ rc = (jint) w;
+ OS_NATIVE_EXIT(env, that, _1gtk_1window_1new_FUNC);
+ return rc;
+ }
+Index: swt-hildon/swt-source/org/eclipse/swt/widgets/Menu.java
+===================================================================
+--- swt-hildon.orig/swt-source/org/eclipse/swt/widgets/Menu.java 2008-01-08 09:34:55.000000000 +0100
++++ swt-hildon/swt-source/org/eclipse/swt/widgets/Menu.java 2008-01-08 09:36:01.000000000 +0100
+@@ -259,9 +259,17 @@
+ if ((style & SWT.BAR) != 0) {
+ handle = OS.gtk_menu_bar_new ();
+ if (handle == 0) error (SWT.ERROR_NO_HANDLES);
++ if (parent instanceof Shell)
++ {
++ int /*long*/ shellHandle = ((Shell) parent).shellHandle;
++ OS.gtk_container_add (shellHandle, handle);
++ }
++ else
++ {
+ int /*long*/ vboxHandle = parent.vboxHandle;
+ OS.gtk_container_add (vboxHandle, handle);
+ OS.gtk_box_set_child_packing (vboxHandle, handle, false, true, 0, OS.GTK_PACK_START);
++ }
+ } else {
+ handle = OS.gtk_menu_new ();
+ if (handle == 0) error (SWT.ERROR_NO_HANDLES);
diff --git a/packages/swt/swt-gtk.inc b/packages/swt/swt-gtk.inc
new file mode 100644
index 0000000000..6afadf1cab
--- /dev/null
+++ b/packages/swt/swt-gtk.inc
@@ -0,0 +1,58 @@
+DESCRIPTION = "SWT is an open source widget toolkit for Java designed to provide efficient, portable access to the user-interface facilities"
+LICENSE = "CPL MPL LGPL"
+
+inherit java-library
+
+DEPENDS = "cairo gtk+ atk libxtst"
+
+S = "${WORKDIR}/swt-source"
+
+# A number which is used by SWT to mark the shared libraries. It can be found
+# in the version.txt file inside the source directory.
+SWTVERSION = ${@bb.fatal('SWTVERSION is not defined in this swt-gtk recipe!')}
+SWT_API_VERSION = ${@bb.fatal('SWT_API_VERSION is not defined in this swt-gtk recipe!')}
+
+do_unpackpost() {
+ if [ ! -d ${S} ]; then
+ mkdir ${S}
+ cd ${S}
+ fi
+
+ unzip -o ../src.zip
+ cp ../Makefile .
+
+ sed -i -e "s|RELEASE=OE_SWT_RELEASE|RELEASE=${PV}|" Makefile
+ sed -i -e "s|SONAME_VERSION=OE_SWT_API_VERSION|SONAME_VERSION=${SWT_API_VERSION}|" Makefile
+}
+
+do_compile() {
+ oe_runmake NATIVE_STATS="-I${STAGING_INCDIR}/classpath"
+}
+
+addtask unpackpost after do_unpack before do_patch
+
+do_install() {
+ oe_jarinstall swt-pi.jar
+ oe_jarinstall swt.jar
+ oe_jarinstall swt-gtk-${PV}.jar swt-gtk.jar
+
+ install -d ${D}${libdir_jni}
+ oe_libinstall -so libswt-atk-gtk-${SWTVERSION} ${D}/${libdir_jni}
+ oe_libinstall -so libswt-cairo-gtk-${SWTVERSION} ${D}/${libdir_jni}
+ oe_libinstall -so libswt-pi-gtk-${SWTVERSION} ${D}/${libdir_jni}
+ oe_libinstall -so libswt-gtk-${SWTVERSION} ${D}/${libdir_jni}
+}
+
+do_stage() {
+ oe_jarinstall -s swt-pi.jar
+ oe_jarinstall -s swt.jar
+ oe_jarinstall -s swt-gtk-${PV}.jar swt-gtk.jar
+}
+
+PACKAGES += "lib${PN}-jni"
+
+FILES_lib${PN}-jni = "${libdir_jni}/lib*.so*"
+
+RDEPENDS_${JPN} = "lib${PN}-jni"
+RPROVIDES_${JPN} = "libswt${SWT_API_VERSION}-gtk-java"
+
diff --git a/packages/swt/swt3.3-gtk_3.3.1.bb b/packages/swt/swt3.3-gtk_3.3.1.bb
new file mode 100644
index 0000000000..5b17853725
--- /dev/null
+++ b/packages/swt/swt3.3-gtk_3.3.1.bb
@@ -0,0 +1,10 @@
+require swt-gtk.inc
+
+SRC_URI = "http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops/R-${PV}-200710231652/swt-${PV}-gtk-linux-x86.zip \
+ file://Makefile"
+
+# A number which is used by SWT to mark the shared libraries.
+SWTVERSION = "3347"
+SWT_API_VERSION = "3.3"
+
+RCONFLICTS = "libswt3.4-gtk-java"
diff --git a/packages/swt/swt3.4-gtk-hildon_3.3+3.4M3.bb b/packages/swt/swt3.4-gtk-hildon_3.3+3.4M3.bb
new file mode 100644
index 0000000000..628dcdd810
--- /dev/null
+++ b/packages/swt/swt3.4-gtk-hildon_3.3+3.4M3.bb
@@ -0,0 +1,7 @@
+require swt3.4-gtk_${PV}.bb
+
+PR = "r1"
+
+DEPENDS += "hildon-1"
+
+SRC_URI += "file://swt-hildon.patch;patch=1;pnum=2"
diff --git a/packages/swt/swt3.4-gtk_3.3+3.4M3.bb b/packages/swt/swt3.4-gtk_3.3+3.4M3.bb
new file mode 100644
index 0000000000..5d411f1be6
--- /dev/null
+++ b/packages/swt/swt3.4-gtk_3.3+3.4M3.bb
@@ -0,0 +1,12 @@
+require swt-gtk.inc
+
+SRC_URI = "http://ftp.wh2.tu-dresden.de/pub/mirrors/eclipse/eclipse/downloads/drops/S-3.4M3-200711012000/swt-3.4M3-gtk-linux-x86.zip \
+ file://Makefile"
+
+# A number which is used by SWT to mark the shared libraries.
+SWTVERSION = "3416"
+SWT_API_VERSION = "3.4"
+
+PROVIDES = "swt3.4-gtk"
+
+RCONFLICTS = "libswt3.3-gtk-java"
diff --git a/packages/sylpheed/claws-plugin-mailmbox_1.14.bb b/packages/sylpheed/claws-plugin-mailmbox_1.14.bb
index 03e939ead3..cfa26a464e 100644
--- a/packages/sylpheed/claws-plugin-mailmbox_1.14.bb
+++ b/packages/sylpheed/claws-plugin-mailmbox_1.14.bb
@@ -17,4 +17,4 @@ do_configure() {
}
FILES_${PN} = "${libdir}/claws-mail/plugins/*.so"
-FILES_${PN}-dbg = "${libdir}/claws-mail/plugins/.debug"
+FILES_${PN}-dbg += "${libdir}/claws-mail/plugins/.debug"
diff --git a/packages/sysfsutils/sysfsutils_2.0.0.bb b/packages/sysfsutils/sysfsutils_2.0.0.bb
index 2fbb0865c9..f59dfa0feb 100644
--- a/packages/sysfsutils/sysfsutils_2.0.0.bb
+++ b/packages/sysfsutils/sysfsutils_2.0.0.bb
@@ -20,5 +20,5 @@ do_stage () {
PACKAGES_prepend = "libsysfs libsysfs-dbg libsysfs-dev "
FILES_libsysfs = "${libdir}/*.so.*"
FILES_libsysfs-dev = "${libdir}/* ${includedir}"
-FILES_libsysfs-dbg = "${libdir}/.debug"
-FILES_${PN}-dbg = "${bindir}/.debug"
+FILES_libsysfs-dbg += "${libdir}/.debug"
+FILES_${PN}-dbg += "${bindir}/.debug"
diff --git a/packages/tasks/task-base.bb b/packages/tasks/task-base.bb
index 33d93f2921..a44056f316 100644
--- a/packages/tasks/task-base.bb
+++ b/packages/tasks/task-base.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Merge machine and distro options to create a basic machine task/package"
-PR = "r50"
+PR = "r58"
inherit task
@@ -15,6 +15,7 @@ PACKAGES = ' \
${@base_contains("MACHINE_FEATURES", "alsa", "task-base-alsa", "", d)} \
${@base_contains("MACHINE_FEATURES", "apm", "task-base-apm", "", d)} \
${@base_contains("MACHINE_FEATURES", "ext2", "task-base-ext2", "", d)} \
+ ${@base_contains("MACHINE_FEATURES", "vfat", "task-base-vfat", "", d)} \
${@base_contains("MACHINE_FEATURES", "irda", "task-base-irda", "",d)} \
${@base_contains("MACHINE_FEATURES", "keyboard", "task-base-keyboard", "", d)} \
${@base_contains("MACHINE_FEATURES", "pci", "task-base-pci", "",d)} \
@@ -87,6 +88,7 @@ RDEPENDS_task-base = "\
\
${@base_contains('COMBINED_FEATURES', 'alsa', 'task-base-alsa', '',d)} \
${@base_contains('COMBINED_FEATURES', 'ext2', 'task-base-ext2', '',d)} \
+ ${@base_contains('COMBINED_FEATURES', 'vfat', 'task-base-vfat', '',d)} \
${@base_contains('COMBINED_FEATURES', 'irda', 'task-base-irda', '',d)} \
${@base_contains('COMBINED_FEATURES', 'pci', 'task-base-pci', '',d)} \
${@base_contains('COMBINED_FEATURES', 'pcmcia', 'task-base-pcmcia', '',d)} \
@@ -166,7 +168,8 @@ RRECOMMENDS_task-base-kernel26 = "\
kernel-module-rtc-dev \
kernel-module-rtc-proc \
kernel-module-rtc-sysfs \
- kernel-module-rtc-sa1100"
+ kernel-module-rtc-sa1100 \
+ kernel-module-unix"
RDEPENDS_task-base-keyboard = "\
keymaps"
@@ -188,6 +191,12 @@ RDEPENDS_task-base-ext2 = "\
e2fsprogs-e2fsck \
e2fsprogs-mke2fs"
+RRECOMMENDS_task-base-vfat = "\
+ kernel-module-msdos \
+ kernel-module-vfat \
+ kernel-module-nls-iso8859-1 \
+ kernel-module-nls-cp437"
+
RDEPENDS_task-base-alsa = "\
alsa-utils-alsactl \
alsa-utils-alsamixer"
@@ -218,8 +227,6 @@ RRECOMMENDS_task-base-pcmcia = "\
"
task-base-pcmcia24 = "\
- ${@base_contains('DISTRO_FEATURES', 'wifi', 'hostap-modules-cs', '',d)} \
- ${@base_contains('DISTRO_FEATURES', 'wifi', 'orinoco-modules-cs', '',d)} \
"
task-base-pcmcia26 = "\
@@ -295,7 +302,7 @@ RRECOMMENDS_task-base-usbhost = "\
kernel-module-usb-storage "
RDEPENDS_task-base-uboot = "\
- uboot-utils"
+ u-boot"
RDEPENDS_task-base-redboot = "\
fis"
diff --git a/packages/tasks/task-boot.bb b/packages/tasks/task-boot.bb
index 0435c2aa62..5663ff5a3d 100644
--- a/packages/tasks/task-boot.bb
+++ b/packages/tasks/task-boot.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Basic task to get a device booting"
-PR = "r42"
+PR = "r43"
inherit task
diff --git a/packages/tasks/task-devimage.bb b/packages/tasks/task-devimage.bb
index bd0c15e70f..9da765ee94 100644
--- a/packages/tasks/task-devimage.bb
+++ b/packages/tasks/task-devimage.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Image for development testing"
-PR = "r1"
+PR = "r2"
LICENSE = "MIT"
inherit task
@@ -14,6 +14,7 @@ RDEPENDS = "\
module-init-tools pcmciautils \
wireless-tools wpa-supplicant \
irda-utils acx-firmware \
+ kexec-tools \
${DEVIMAGE_EXTRA_RDEPENDS} \
"
diff --git a/packages/tasks/task-nas-server.bb b/packages/tasks/task-nas-server.bb
new file mode 100644
index 0000000000..f46a3306fe
--- /dev/null
+++ b/packages/tasks/task-nas-server.bb
@@ -0,0 +1,102 @@
+DESCRIPTION = "Tasks for a Network Attached Storage server"
+LICENSE = "MIT"
+PROVIDES = "task-nas-server-everything"
+PR = "r1"
+
+inherit task
+
+PACKAGES = "\
+ task-nas-server-everything \
+ ${NAS_SERVER_PACKAGES} \
+"
+
+NAS_SERVER_PACKAGES = "\
+ task-nas-server-base \
+ task-nas-server-samba \
+ task-nas-server-dnsmasq \
+ task-nas-server-iptables \
+ task-nas-server-openmoko \
+ task-nas-server-tzdata \
+ task-nas-server-nfs \
+ task-nas-server-vfat \
+ task-nas-server-ntfs \
+ task-nas-server-ext3 \
+ task-nas-server-reiserfs \
+"
+
+RDEPENDS_task-nas-server-everything = "${NAS_SERVER_PACKAGES}"
+
+DESCRIPTION_task-nas-server-base = "NAS-Server: Base Packages"
+RDEPENDS_task-nas-server-base = "\
+"
+RRECOMMENDS_task-nas-server-base = "\
+"
+
+DESCRIPTION_task-nas-server-samba = "NAS-Server: Samba Server"
+RDEPENDS_task-nas-server-samba = "\
+ samba swat \
+"
+RRECOMMENDS_task-nas-server-samba = "\
+"
+
+DESCRIPTION_task-nas-server-dnsmasq = "NAS-Server: DNS/DHCP Server"
+RDEPENDS_task-nas-server-dnsmasq = "\
+ dnsmasq \
+"
+RRECOMMENDS_task-nas-server-dnsmasq = "\
+"
+
+DESCRIPTION_task-nas-server-iptables = "NAS-Server: Netfilter/Iptables Support"
+RDEPENDS_task-nas-server-iptables = "\
+ iptables \
+"
+RRECOMMENDS_task-nas-server-iptables = "\
+ kernel-module-iptable-nat \
+ kernel-module-iptable-mangle \
+ kernel-module-ipt-masquerade \
+"
+
+DESCRIPTION_task-nas-server-openmoko = "NAS-Server: OpenMoko Support"
+RDEPENDS_task-nas-server-openmoko = "\
+ dfu-util \
+"
+RRECOMMENDS_task-nas-server-openmoko = "\
+"
+
+DESCRIPTION_task-nas-server-tzdata = "NAS-Server: Timezone Support"
+RDEPENDS_task-nas-server-tzdata = "\
+ tzdata \
+"
+RRECOMMENDS_task-nas-server-tzdata = "\
+"
+
+DESCRIPTION_task-nas-server-nfs = "NAS-Server: NFS Server"
+RDEPENDS_task-nas-server-nfs = "\
+ nfs-utils portmap \
+"
+RRECOMMENDS_task-nas-server-nfs = "\
+"
+
+DESCRIPTION_task-nas-server-vfat = "NAS-Server: FAT Filesystem"
+RDEPENDS_task-nas-server-vfat = "\
+"
+RRECOMMENDS_task-nas-server-vfat = "\
+"
+
+DESCRIPTION_task-nas-server-ntfs = "NAS-Server: NTFS Filesystem"
+RDEPENDS_task-nas-server-ntfs = "\
+"
+RRECOMMENDS_task-nas-server-ntfs = "\
+"
+
+DESCRIPTION_task-nas-server-ext3 = "NAS-Server: EXT3 Filesystem"
+RDEPENDS_task-nas-server-ext3 = "\
+"
+RRECOMMENDS_task-nas-server-ext3 = "\
+"
+
+DESCRIPTION_task-nas-server-reiserfs = "NAS-Server: ReiserFS Filesystem"
+RDEPENDS_task-nas-server-reiserfs = "\
+"
+RRECOMMENDS_task-nas-server-reiserfs = "\
+"
diff --git a/packages/tasks/task-openmoko-base.bb b/packages/tasks/task-openmoko-base.bb
new file mode 100644
index 0000000000..a5d13e7e08
--- /dev/null
+++ b/packages/tasks/task-openmoko-base.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "OpenMoko: Base Task for the OpenMoko Linux Distribution"
+SECTION = "openmoko/base"
+LICENSE = "MIT"
+PR = "r71"
+
+inherit task
+
+#
+# task-openmoko-base
+#
+DESCRIPTION_task-openmoko-base = "OpenMoko: Top Panel, Application Launcher, Application Manager"
+RDEPENDS_task-openmoko-base = "\
+ matchbox-panel-2 \
+ matchbox-panel-2-applets \
+ matchbox-keyboard-inputmethod \
+ matchbox-keyboard-im \
+ matchbox-keyboard-applet \
+ matchbox-stroke \
+ openmoko-terminal2 \
+# openmoko-keyboard \
+ openmoko-panel-battery \
+ openmoko-panel-bt \
+ openmoko-panel-clock \
+ openmoko-panel-usb \
+ ${@base_contains('MACHINE_FEATURES', 'gps', 'openmoko-panel-gps', '',d)} \
+ \
+ openmoko-today2 \
+# openmoko-appmanager \
+"
diff --git a/packages/tasks/task-openmoko-debug.bb b/packages/tasks/task-openmoko-debug.bb
index 8486aa01cf..0c2342183e 100644
--- a/packages/tasks/task-openmoko-debug.bb
+++ b/packages/tasks/task-openmoko-debug.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "OpenMoko: Debugging and Benchmarking Tools"
SECTION = "openmoko/base"
LICENSE = "MIT"
-PR = "r58"
+PR = "r59"
inherit task
@@ -15,6 +15,7 @@ RDEPENDS_task-openmoko-debug = "\
cu \
dbench \
fbgrab \
+ fbset \
fstests \
gdb \
gdbserver \
diff --git a/packages/tasks/task-openmoko-examples.bb b/packages/tasks/task-openmoko-examples.bb
new file mode 100644
index 0000000000..c5dbfb6f04
--- /dev/null
+++ b/packages/tasks/task-openmoko-examples.bb
@@ -0,0 +1,6 @@
+DESCRIPTION = "OpenMoko: Examples for the OpenMoko Linux Distribution"
+SECTION = "openmoko/base"
+LICENSE = "MIT"
+PR = "r71"
+
+inherit task \ No newline at end of file
diff --git a/packages/tasks/task-openmoko-feed.bb b/packages/tasks/task-openmoko-feed.bb
index 1c97a355f1..97f24a7624 100644
--- a/packages/tasks/task-openmoko-feed.bb
+++ b/packages/tasks/task-openmoko-feed.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "OpenMoko: Misc. Feed Items"
SECTION = "openmoko/base"
LICENSE = "MIT"
-PR = "r15"
+PR = "r20"
inherit task
@@ -24,12 +24,12 @@ RDEPENDS_task-openmoko-feed = "\
nano \
ntpclient ntp \
openssh openssh-scp openssh-ssh openssh-sshd openssh-sftp openssh-misc \
- python python-pygtk python-pyserial \
+ python python-pygtk python-pyserial python-efl \
ruby \
libsdl-x11 libsdl-mixer libsdl-net libsdl-ttf \
+ settingsgui \
synergy \
tzdata \
- timezones \
tor \
vnc \
wxwidgets \
diff --git a/packages/tasks/task-openmoko-games.bb b/packages/tasks/task-openmoko-games.bb
new file mode 100644
index 0000000000..0fdf3cac33
--- /dev/null
+++ b/packages/tasks/task-openmoko-games.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "OpenMoko: Games for the OpenMoko Linux Distribution"
+SECTION = "openmoko/base"
+LICENSE = "MIT"
+PR = "r71"
+
+inherit task
+
+#
+# task-openmoko-games
+#
+DESCRIPTION_task-openmoko-games = "OpenMoko: Games"
+RDEPENDS_task-openmoko-games = "\
+ oh-puzzles \
+"
diff --git a/packages/tasks/task-openmoko-linux.bb b/packages/tasks/task-openmoko-linux.bb
new file mode 100644
index 0000000000..59e6f24094
--- /dev/null
+++ b/packages/tasks/task-openmoko-linux.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "OpenMoko: Core system for the OpenMoko Linux Distribution"
+SECTION = "openmoko/base"
+LICENSE = "MIT"
+PR = "r71"
+
+inherit task
+
+#
+# task-openmoko-core
+#
+DESCRIPTION_task-openmoko-linux = "OpenMoko: Linux Core Services"
+RDEPENDS_task-openmoko-linux = "\
+ task-base \
+ netbase \
+ sysfsutils \
+ modutils-initscripts \
+ module-init-tools-depmod \
+ rsync \
+ screen \
+ psplash \
+ fbset \
+ fbset-modes \
+# update-alternatives \
+"
diff --git a/packages/tasks/task-openmoko-net.bb b/packages/tasks/task-openmoko-net.bb
new file mode 100644
index 0000000000..e75dc4b4ff
--- /dev/null
+++ b/packages/tasks/task-openmoko-net.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "OpenMoko: Networking for the OpenMoko Linux Distribution"
+SECTION = "openmoko/base"
+LICENSE = "MIT"
+PR = "r71"
+
+inherit task
+
+#
+# task-openmoko-net
+#
+DESCRIPTION_task-openmoko-net = "OpenMoko: Linux Advanced Networking"
+RDEPENDS_task-openmoko-net = "\
+ bluez-utils \
+ bridge-utils \
+"
diff --git a/packages/tasks/task-openmoko-phone.bb b/packages/tasks/task-openmoko-phone.bb
new file mode 100644
index 0000000000..49e4e66859
--- /dev/null
+++ b/packages/tasks/task-openmoko-phone.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "OpenMoko: Tasks for the OpenMoko Linux Distribution"
+SECTION = "openmoko/base"
+LICENSE = "MIT"
+PR = "r72"
+
+inherit task
+
+#
+# task-openmoko-phone
+#
+DESCRIPTION_task-openmoko-phone = "OpenMoko: GSM and GPRS Phone Services"
+RDEPENDS_task-openmoko-phone = "\
+ gsmd \
+ libgsmd-tools \
+ openmoko-dialer2 \
+ openmoko-panel-gsm \
+# ppp \
+"
diff --git a/packages/tasks/task-openmoko-pim.bb b/packages/tasks/task-openmoko-pim.bb
new file mode 100644
index 0000000000..1eea1a14a1
--- /dev/null
+++ b/packages/tasks/task-openmoko-pim.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "OpenMoko: PIM for the OpenMoko Linux Distribution"
+SECTION = "openmoko/base"
+LICENSE = "MIT"
+PR = "r71"
+
+inherit task
+
+#
+# task-openmoko-pim
+#
+DESCRIPTION_task-openmoko-pim = "OpenMoko: Personal Information Management Suite"
+RDEPENDS_task-openmoko-pim = "\
+ eds-dbus \
+ openmoko-calculator2 \
+ openmoko-contacts2 \
+ openmoko-dates2 \
+ openmoko-feedreader2 \
+ openmoko-browser2 \
+ openmoko-appmanager2 \
+ openmoko-tasks2 \
+ openmoko-mediaplayer2 \
+ openmoko-messages2 \
+"
diff --git a/packages/tasks/task-openmoko-python-devel.bb b/packages/tasks/task-openmoko-python-devel.bb
new file mode 100644
index 0000000000..37d64847f6
--- /dev/null
+++ b/packages/tasks/task-openmoko-python-devel.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "OpenMoko: Python Development Tools"
+SECTION = "openmoko/devel"
+LICENSE = "MIT"
+PR = "r1"
+
+inherit task
+
+RDEPENDS_task-openmoko-python-devel = "\
+ python-efl \
+ python-pygtk \
+"
diff --git a/packages/tasks/task-openmoko-toolchain-host.bb b/packages/tasks/task-openmoko-toolchain-host.bb
new file mode 100644
index 0000000000..788152c6ca
--- /dev/null
+++ b/packages/tasks/task-openmoko-toolchain-host.bb
@@ -0,0 +1,13 @@
+require task-sdk-host.bb
+
+DESCRIPTION = "Packages for a standalone OpenMoko SDK or external toolchain"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+PR = "r0"
+
+PACKAGES = "${PN}"
+
+RDEPENDS_${PN} += "\
+ openmoko-sample2-src \
+"
diff --git a/packages/tasks/task-openmoko-toolchain-target.bb b/packages/tasks/task-openmoko-toolchain-target.bb
new file mode 100644
index 0000000000..281884d051
--- /dev/null
+++ b/packages/tasks/task-openmoko-toolchain-target.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "Packages for a standalone OpenMoko SDK or external toolchain"
+LICENSE = "MIT"
+ALLOW_EMPTY = "1"
+
+PR = "r2"
+
+PACKAGES = "${PN}"
+
+RDEPENDS_${PN} = "\
+ glibc \
+ glibc-dbg \
+ glibc-dev \
+ glibc-utils \
+ libsegfault \
+ glibc-thread-db \
+ glibc-localedata-i18n \
+ glibc-gconv-ibm850 \
+ glibc-gconv-cp1252 \
+ glibc-gconv-iso8859-1 \
+ glibc-gconv-iso8859-15 \
+ locale-base-en-gb \
+ libgcc \
+ libstdc++ \
+ \
+ libmokogsmd2-dev \
+ libmokoui2-dev \
+ libmokopanelui2-dev \
+ libmokojournal2-dev \
+ openmoko-toolchain-scripts \
+"
diff --git a/packages/tasks/task-openmoko-ui.bb b/packages/tasks/task-openmoko-ui.bb
new file mode 100644
index 0000000000..4f3399ac8f
--- /dev/null
+++ b/packages/tasks/task-openmoko-ui.bb
@@ -0,0 +1,57 @@
+DESCRIPTION = "OpenMoko: GUI for the OpenMoko Linux Distribution"
+SECTION = "openmoko/base"
+LICENSE = "MIT"
+PR = "r72"
+
+inherit task
+
+XSERVER ?= "xserver-kdrive-fbdev"
+
+#
+# task-openmoko-ui
+#
+DESCRIPTION_task-openmoko-ui = "OpenMoko: The X11/Gtk+2 based native User Interface"
+PACKAGE_ARCH_task-openmoko-ui = "${MACHINE_ARCH}"
+RDEPENDS_task-openmoko-ui = "\
+ gdk-pixbuf-loader-png \
+ gdk-pixbuf-loader-gif \
+ gdk-pixbuf-loader-xpm \
+ gdk-pixbuf-loader-jpeg \
+ pango-module-basic-x \
+ pango-module-basic-fc \
+ gtk+ \
+ matchbox-wm \
+ ${XSERVER} \
+ xserver-kdrive-common \
+ xserver-nodm-init \
+ xauth \
+ xhost \
+ xset \
+ xrandr \
+ \
+ settings-daemon \
+ notification-daemon \
+ neod \
+ libnotify \
+ \
+ openmoko-session2 \
+ openmoko-sound-system2 \
+ openmoko-sound-theme-standard2 \
+ \
+ gpe-scap \
+"
+
+# Handle theming. FIXME: properly use machine database in a smart way,
+# taking into account not only size but also PPI! Ultimately this might
+# need recomputing some theme files and images on-the-fly :/ SVG and logical
+# theme description anyone? Or simply Edje to the rescue! :D
+THEMES = "openmoko-icon-theme-standard2 openmoko-theme-standard2"
+THEMES_a780 = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
+THEMES_e680 = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
+THEMES_a1200 = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
+THEMES_rokre2 = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
+THEMES_rokre6 = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
+THEMES_magician = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
+THEMES_chumby = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
+
+RDEPENDS_task-openmoko-ui += "${THEMES}"
diff --git a/packages/tasks/task-openmoko.bb b/packages/tasks/task-openmoko.bb
index 76e0b843f7..730ea339aa 100644
--- a/packages/tasks/task-openmoko.bb
+++ b/packages/tasks/task-openmoko.bb
@@ -6,158 +6,26 @@ PR = "r71"
inherit task
-XSERVER ?= "xserver-kdrive-fbdev"
+PACKAGES += "\
+ task-openmoko-everything \
+"
-PACKAGES = "\
+RDEPENDS_task-openmoko-everything := "\
task-openmoko-linux \
task-openmoko-ui \
task-openmoko-base \
task-openmoko-phone \
task-openmoko-pim \
task-openmoko-net \
- \
task-openmoko-games \
task-openmoko-examples \
-"
-
-RDEPENDS_task-openmoko-everything := "\
- ${PACKAGES} \
task-openmoko-debug \
task-openmoko-native-sdk \
"
-#
-# task-openmoko-core
-#
-DESCRIPTION_task-openmoko-linux = "OpenMoko: Linux Core Services"
-RDEPENDS_task-openmoko-linux = "\
- task-base \
- netbase \
- sysfsutils \
- modutils-initscripts \
- module-init-tools-depmod \
- rsync \
- screen \
- psplash \
- fbset \
- fbset-modes \
-# update-alternatives \
-"
-
-#
-# task-openmoko-ui
-#
-DESCRIPTION_task-openmoko-ui = "OpenMoko: The X11/Gtk+2 based native User Interface"
-PACKAGE_ARCH_task-openmoko-ui = "${MACHINE_ARCH}"
-RDEPENDS_task-openmoko-ui = "\
- gdk-pixbuf-loader-png \
- gdk-pixbuf-loader-gif \
- gdk-pixbuf-loader-xpm \
- gdk-pixbuf-loader-jpeg \
- pango-module-basic-x \
- pango-module-basic-fc \
- gtk+ \
- matchbox-wm \
- ${XSERVER} \
- xserver-kdrive-common \
- xserver-nodm-init \
- xauth \
- xhost \
- xset \
- xrandr \
- \
- settings-daemon \
- notification-daemon \
- neod \
- libnotify \
- \
- openmoko-session2 \
- openmoko-sound-system2 \
- openmoko-sound-theme-standard2 \
- \
- gpe-scap \
-"
-# Handle theming. FIXME: properly use machine database in a smart way,
-# taking into account not only size but also PPI! Ultimately this might
-# need recomputing some theme files and images on-the-fly :/ SVG and logical
-# theme description anyone? Or simply Edje to the rescue! :D
-THEMES = "openmoko-icon-theme-standard2 openmoko-theme-standard2"
-THEMES_a780 = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
-THEMES_e680 = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
-THEMES_a1200 = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
-THEMES_rokre2 = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
-THEMES_rokre6 = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
-THEMES_magician = "openmoko-icon-theme-standard2-qvga openmoko-theme-standard2-qvga"
-RDEPENDS_task-openmoko-ui += "${THEMES}"
-PACKAGE_ARCH_task-openmoko-ui = "${MACHINE_ARCH}"
-#
-# task-openmoko-base
-#
-DESCRIPTION_task-openmoko-base = "OpenMoko: Top Panel, Application Launcher, Application Manager"
-RDEPENDS_task-openmoko-base = "\
- matchbox-panel-2 \
- matchbox-panel-2-applets \
- matchbox-keyboard-inputmethod \
- matchbox-keyboard-im \
- matchbox-keyboard-applet \
- matchbox-stroke \
- openmoko-terminal2 \
-# openmoko-keyboard \
- openmoko-panel-battery \
- openmoko-panel-bt \
- openmoko-panel-clock \
- openmoko-panel-usb \
- ${@base_contains('MACHINE_FEATURES', 'gps', 'openmoko-panel-gps', '',d)} \
- \
- openmoko-today2 \
-# openmoko-appmanager \
-"
-#
-# task-openmoko-phone
-#
-DESCRIPTION_task-openmoko-phone = "OpenMoko: GSM and GPRS Phone Services"
-RDEPENDS_task-openmoko-phone = "\
- gsmd \
- libgsmd-tools \
- openmoko-dialer2 \
- openmoko-panel-gsm \
-# ppp \
-"
-#
-# task-openmoko-pim
-#
-DESCRIPTION_task-openmoko-pim = "OpenMoko: Personal Information Management Suite"
-RDEPENDS_task-openmoko-pim = "\
- eds-dbus \
- openmoko-calculator2 \
- openmoko-contacts2 \
- openmoko-dates2 \
- openmoko-feedreader2 \
- openmoko-browser2 \
- openmoko-appmanager2 \
- openmoko-tasks2 \
- openmoko-mediaplayer2 \
- openmoko-messages2 \
-"
-#
-# task-openmoko-net
-#
-DESCRIPTION_task-openmoko-net = "OpenMoko: Linux Advanced Networking"
-RDEPENDS_task-openmoko-net = "\
- bluez-utils \
- bridge-utils \
-"
-
-#
-# task-openmoko-games
-#
-DESCRIPTION_task-openmoko-games = "OpenMoko: Games"
-RDEPENDS_task-openmoko-games = "\
- oh-puzzles \
-"
diff --git a/packages/tasks/task-openprotium.bb b/packages/tasks/task-openprotium.bb
new file mode 100644
index 0000000000..4c5d762f8f
--- /dev/null
+++ b/packages/tasks/task-openprotium.bb
@@ -0,0 +1,52 @@
+DESCRIPTION = "Basic image for openprotium"
+HOMEPAGE = "http://www.openprotium.org"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+ALLOW_EMPTY = "1"
+PR = "r1"
+
+inherit task
+
+# be sure to build the kernel:
+DEPENDS = "virtual/kernel"
+
+# always make this one for testing.
+DISTRO_KERNEL_MODULES = "kernel-module-dummy"
+# do we still need this?
+DISTRO_KERNEL_MODULES += "kernel-module-af-packet"
+# unused for now
+#DISTRO_KERNEL_MODULES += "kernel-module-netconsole"
+
+# these are listed separately because the are not needed
+# for boot, but are needed by reflash, etc.
+DISTRO_EXTRA_RDEPENDS += "diffutils cpio findutils"
+
+# pick up the fw_set/get env utils.
+DISTRO_EXTRA_RDEPENDS += "u-boot-utils"
+
+RDEPENDS = " kernel \
+ base-files \
+ base-passwd \
+ netbase \
+ busybox \
+ openprotium-init \
+ initscripts-openprotium \
+ update-modules \
+ module-init-tools \
+ modutils-initscripts \
+ ipkg-collateral ipkg ipkg-link \
+ portmap \
+ e2fsprogs-blkid \
+ mdadm \
+ hdparm \
+ mtd-utils \
+ ${DISTRO_SSH_DAEMON} \
+ ${DISTRO_DEV_MANAGER} \
+ ${DISTRO_INIT_MANAGER} \
+ ${DISTRO_LOGIN_MANAGER} \
+ ${DISTRO_KERNEL_MODULES} \
+ ${MACHINE_EXTRA_RDEPENDS} \
+ ${DISTRO_EXTRA_RDEPENDS} "
+
+RRECOMMENDS += " \
+ ${DISTRO_EXTRA_RRECOMMENDS} \
+ ${MACHINE_EXTRA_RRECOMMENDS}"
diff --git a/packages/tasks/task-opie-16mb.bb b/packages/tasks/task-opie-16mb.bb
index 9d8295d0ca..b92a137822 100644
--- a/packages/tasks/task-opie-16mb.bb
+++ b/packages/tasks/task-opie-16mb.bb
@@ -28,7 +28,7 @@ RDEPENDS_task-opie-16mb-applets = "opie-aboutapplet opie-clockapplet opie-suspen
opie-brightnessapplet opie-volumeapplet \
opie-screenshotapplet \
${@base_contains("COMBINED_FEATURES", "irda", "opie-irdaapplet", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "apm", "opie-batteryapplet", "",d)} \
+ ${@base_contains("MACHINE_FEATURES", "apm", "opie-batteryapplet", "",d)} \
${@base_contains("COMBINED_FEATURES", "pcmcia", "opie-pcmciaapplet", "",d)} \
${@base_contains("MACHINE_FEATURES", "keyboard", "opie-vtapplet opie-logoutapplet", "",d)}"
diff --git a/packages/tasks/task-opie.bb b/packages/tasks/task-opie.bb
index 0f7285236e..05b507706b 100644
--- a/packages/tasks/task-opie.bb
+++ b/packages/tasks/task-opie.bb
@@ -43,7 +43,7 @@ RDEPENDS_task-opie-base-applets = "opie-aboutapplet opie-clockapplet opie-suspen
opie-brightnessapplet opie-volumeapplet \
opie-screenshotapplet \
${@base_contains("COMBINED_FEATURES", "irda", "opie-irdaapplet", "",d)} \
- ${@base_contains("COMBINED_FEATURES", "apm", "opie-batteryapplet", "",d)} \
+ ${@base_contains("MACHINE_FEATURES", "apm", "opie-batteryapplet", "",d)} \
${@base_contains("COMBINED_FEATURES", "pcmcia", "opie-pcmciaapplet", "",d)} \
${@base_contains("MACHINE_FEATURES", "keyboard", "opie-vtapplet opie-logoutapplet", "",d)}"
diff --git a/packages/tasks/task-python-everything.bb b/packages/tasks/task-python-everything.bb
index c81691cd34..61daa7e089 100644
--- a/packages/tasks/task-python-everything.bb
+++ b/packages/tasks/task-python-everything.bb
@@ -1,7 +1,7 @@
DESCRIPTION= "Everything Python"
HOMEPAGE = "http://www.vanille.de/projects/python.spy"
LICENSE = "MIT"
-PR = "ml22"
+PR = "ml24"
RDEPENDS = "\
python-ao \
@@ -9,8 +9,9 @@ RDEPENDS = "\
python-constraint \
python-dbus \
python-dialog \
- python-directfb \
+ python-pydirectfb \
python-efl \
+ python-efl-examples \
python-pycurl \
python-fam \
python-fnorb \
@@ -19,6 +20,7 @@ RDEPENDS = "\
python-fuse \
python-gmpy \
python-gnosis \
+ python-gsmd \
python-gst \
python-hmm \
python-imaging \
diff --git a/packages/tasks/task-qpe.bb b/packages/tasks/task-qpe.bb
index 347a4525b8..c13b5d48ef 100644
--- a/packages/tasks/task-qpe.bb
+++ b/packages/tasks/task-qpe.bb
@@ -136,7 +136,7 @@ RDEPENDS_task-qpe-fonts = "\
qpf-helvetica \
qpf-unifont \
qpf-utopia \
- terminus"
+ qpf-terminus"
RDEPENDS_task-qpe-settings += "\
qclockchange"
diff --git a/packages/tasks/task-qtopia-core-console.bb b/packages/tasks/task-qtopia-core-console.bb
new file mode 100644
index 0000000000..ff0bbc6d12
--- /dev/null
+++ b/packages/tasks/task-qtopia-core-console.bb
@@ -0,0 +1,13 @@
+HOMEPAGE = "http://www.trolltech.com"
+LICENSE = "MIT"
+
+inherit task
+
+DESCRIPTION_task-qtopia-core-console = "QtopiaCore Core libraries for XML, SQL, Network, Containers and others."
+RDEPENDS_task-qtopia-core-console = "\
+ libqtopiacorecore4 \
+ libqtopiacorenetwork4 \
+ libqtopiacorexml4 \
+ libqtopiacoresql4"
+
+
diff --git a/packages/tasks/task-qtopia-core-gui.bb b/packages/tasks/task-qtopia-core-gui.bb
new file mode 100644
index 0000000000..5b5e467305
--- /dev/null
+++ b/packages/tasks/task-qtopia-core-gui.bb
@@ -0,0 +1,11 @@
+HOMEPAGE = "http://www.trolltech.com"
+LICENSE = "MIT"
+
+inherit task
+
+DESCRIPTION_task-qtopia-core-gui = "QtopiaCore GUI library"
+RDEPENDS_task-qtopia-core-gui = " \
+ task-qtopia-core-console \
+ libqtopiacoregui4 \
+ libqtopiacorescript4 \
+ libqtopiacoredbus4"
diff --git a/packages/tasks/task-slugos.bb b/packages/tasks/task-slugos.bb
index ecb3189741..bdcfcf7cd3 100644
--- a/packages/tasks/task-slugos.bb
+++ b/packages/tasks/task-slugos.bb
@@ -6,7 +6,7 @@
DESCRIPTION = "Task packages for the SlugOS distribution"
HOMEPAGE = "http://www.nslu2-linux.org"
LICENSE = "MIT"
-PR = "r15"
+PR = "r16"
PACKAGE_ARCH = "${MACHINE_ARCH}"
ALLOW_EMPTY = "1"
@@ -20,20 +20,23 @@ ALLOW_EMPTY = "1"
SLUGOS_STANDARD_RDEPENDS = ""
SLUGOS_STANDARD_RRECOMMENDS = ""
-# diff, cpio and find are required for reflash and turnup ram.
-# Removing these probably leaves the system bootable, but standard
-# openslug and ucslugc stuff won't work, so only take these out in
-# very non-standard turnkey slugos builds.
-#
-# udev is the default way of handling devices, there is no guarantee
-# that the static device table is completely correct (it is just
-# known to be sufficient for boot.)
-SLUGOS_STANDARD_RRECOMMENDS += "diffutils cpio findutils"
+# diff, cpio and find are required for turnup and ipkg.
+SLUGOS_STANDARD_RRECOMMENDS += "\
+diffutils \
+cpio \
+findutils \
+"
# These lines add support for formatting ext2 and ext3 file systems
# on a hard disk attached to the NSLU2. ext3 is the standard Linux
# file system.
-SLUGOS_STANDARD_RRECOMMENDS += "e2fsprogs-mke2fs e2fsprogs-fsck e2fsprogs-e2fsck e2fsprogs-badblocks"
+SLUGOS_STANDARD_RRECOMMENDS += "\
+e2fsprogs-mke2fs \
+e2fsprogs-fsck \
+e2fsprogs-e2fsck \
+e2fsprogs-badblocks \
+e2fsprogs-blkid \
+"
# These lines add support for an X/Y/ZModem package called lrzsz
# (this is of use for people with modified NSLU2 hardware which
@@ -66,7 +69,6 @@ kernel-module-nls-cp437 \
kernel-module-nls-utf8 \
"
-
# Add daemon required for HW RNG support
SLUGOS_RNG_TOOLS_PACKAGE = "rng-tools"
SLUGOS_RNG_TOOLS_PACKAGE_linux-uclibc = ""
@@ -82,8 +84,10 @@ kernel-module-uhci-hcd \
"
# Add modules required for IDE support
-# SLUGOS_STANDARD_RRECOMMENDS += "\
-# "
+SLUGOS_STANDARD_RRECOMMENDS += "\
+kernel-module-libata \
+kernel-module-pata-artop \
+"
# Add modules required for Network support
SLUGOS_STANDARD_RRECOMMENDS += "\
@@ -93,14 +97,15 @@ kernel-module-ixp4xx-qmgr \
kernel-module-via-velocity \
"
+# Other candidate packages that have been considered and
+# are intentionally excluded from the base flash image.
+#
# portmap \
# kexec-tools \
# kernel-module-nfs \
# kernel-module-isofs \
# kernel-module-udf \
# kernel-module-loop \
-# kernel-module-libata \
-# kernel-module-pata-artop \
# kernel-module-netconsole \
# wpa-supplicant \
# zd1211-firmware kernel-module-zd1211rw \
@@ -118,7 +123,6 @@ RDEPENDS += "\
module-init-tools modutils-initscripts \
ipkg-collateral ipkg ipkg-link \
beep \
- e2fsprogs-blkid \
util-linux-mount \
util-linux-umount \
util-linux-swaponoff \
@@ -126,6 +130,7 @@ RDEPENDS += "\
${SLUGOS_STANDARD_RDEPENDS} \
${DISTRO_EXTRA_RDEPENDS}"
+DISTRO_EXTRA_RRECOMMENDS ?= ""
RRECOMMENDS += "\
openssh \
${SLUGOS_STANDARD_RRECOMMENDS} \
diff --git a/packages/tasks/task-toolchain-openmoko-sdk.bb b/packages/tasks/task-toolchain-openmoko-sdk.bb
deleted file mode 100644
index bcb2d370a6..0000000000
--- a/packages/tasks/task-toolchain-openmoko-sdk.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-DESCRIPTION = "Packages for a standalone OpenMoko SDK or external toolchain"
-LICENSE = "MIT"
-ALLOW_EMPTY = "1"
-
-PR = "r2"
-
-PACKAGES = "${PN}"
-
-RDEPENDS_${PN} = "\
- glibc \
- glibc-dbg \
- glibc-dev \
- glibc-utils \
- libsegfault \
- glibc-thread-db \
- glibc-localedata-i18n \
- glibc-gconv-ibm850 \
- glibc-gconv-cp1252 \
- glibc-gconv-iso8859-1 \
- glibc-gconv-iso8859-15 \
- locale-base-en-gb \
- libgcc \
- libstdc++ \
- \
- libmokogsmd2-dev \
- libmokoui2-dev \
- libmokopanelui2-dev \
- libmokojournal2-dev \
- openmoko-sample2-src \
- openmoko-toolchain-scripts \
-"
diff --git a/packages/tcp-wrappers/tcp-wrappers_7.6.bb b/packages/tcp-wrappers/tcp-wrappers_7.6.bb
index dff7671583..047adc23a6 100644
--- a/packages/tcp-wrappers/tcp-wrappers_7.6.bb
+++ b/packages/tcp-wrappers/tcp-wrappers_7.6.bb
@@ -6,7 +6,7 @@ SECTION = "console/network"
PR="r1"
-PACKAGES = "libwrap libwrap-doc libwrap-dev tcp-wrappers tcp-wrappers-doc"
+PACKAGES = "${PN}-dbg libwrap libwrap-doc libwrap-dev tcp-wrappers tcp-wrappers-doc"
FILES_libwrap = "${libdir}/lib*.so.*"
FILES_libwrap-doc = "${mandir}/man3 ${mandir}/man5"
FILES_libwrap-dev = "${libdir}/lib*.so ${includedir}"
diff --git a/packages/tea/tea_17.3.5.bb b/packages/tea/tea_17.3.5.bb
index 7adf2a5136..c8dac8c94f 100644
--- a/packages/tea/tea_17.3.5.bb
+++ b/packages/tea/tea_17.3.5.bb
@@ -1,7 +1,8 @@
-DESCRIPTION = "Tea - a GTK based text editor tith highlighting and a lot of processing features"
+DESCRIPTION = "Tea - a GTK based text editor with highlighting and a lot of processing features"
SECTION = "gpe"
LICENSE = "GPL"
DEPENDS = "gtk+ gtksourceview"
+PR = "r1"
inherit autotools
diff --git a/packages/telepathy/telepathy-mission-control_4.21.bb b/packages/telepathy/telepathy-mission-control_4.21.bb
index e604d8cea7..6d43b805bd 100644
--- a/packages/telepathy/telepathy-mission-control_4.21.bb
+++ b/packages/telepathy/telepathy-mission-control_4.21.bb
@@ -33,9 +33,9 @@ FILES_libmissioncontrol-dev = "${libdir}/libmissioncontrol.* \
FILES_libmissioncontrol-config-dev = "${libdir}/libmissioncontrol-config.*"
FILES_libmissioncontrol-server-dev = "${libdir}/libmissioncontrol-server.*"
-FILES_libmissioncontrol-dbg = "${libdir}/.debug/libmissioncontrol.so.*"
-FILES_libmissioncontrol-config-dbg = "${libdir}/.debug/libmissioncontrol-config.so.*"
-FILES_libmissioncontrol-server-dbg = "${libdir}/.debug/libmissioncontrol-server.so.*"
+FILES_libmissioncontrol-dbg += "${libdir}/.debug/libmissioncontrol.so.*"
+FILES_libmissioncontrol-config-dbg += "${libdir}/.debug/libmissioncontrol-config.so.*"
+FILES_libmissioncontrol-server-dbg += "${libdir}/.debug/libmissioncontrol-server.so.*"
do_stage() {
autotools_stage_all
diff --git a/packages/telepathy/telepathy-mission-control_4.22.bb b/packages/telepathy/telepathy-mission-control_4.22.bb
index 2215d0a515..a0afbb068f 100644
--- a/packages/telepathy/telepathy-mission-control_4.22.bb
+++ b/packages/telepathy/telepathy-mission-control_4.22.bb
@@ -33,9 +33,9 @@ FILES_libmissioncontrol-dev = "${libdir}/libmissioncontrol.* \
FILES_libmissioncontrol-config-dev = "${libdir}/libmissioncontrol-config.*"
FILES_libmissioncontrol-server-dev = "${libdir}/libmissioncontrol-server.*"
-FILES_libmissioncontrol-dbg = "${libdir}/.debug/libmissioncontrol.so.*"
-FILES_libmissioncontrol-config-dbg = "${libdir}/.debug/libmissioncontrol-config.so.*"
-FILES_libmissioncontrol-server-dbg = "${libdir}/.debug/libmissioncontrol-server.so.*"
+FILES_libmissioncontrol-dbg += "${libdir}/.debug/libmissioncontrol.so.*"
+FILES_libmissioncontrol-config-dbg += "${libdir}/.debug/libmissioncontrol-config.so.*"
+FILES_libmissioncontrol-server-dbg += "${libdir}/.debug/libmissioncontrol-server.so.*"
do_stage() {
autotools_stage_all
diff --git a/packages/telepathy/telepathy-mission-control_4.45.bb b/packages/telepathy/telepathy-mission-control_4.45.bb
index 2215d0a515..a0afbb068f 100644
--- a/packages/telepathy/telepathy-mission-control_4.45.bb
+++ b/packages/telepathy/telepathy-mission-control_4.45.bb
@@ -33,9 +33,9 @@ FILES_libmissioncontrol-dev = "${libdir}/libmissioncontrol.* \
FILES_libmissioncontrol-config-dev = "${libdir}/libmissioncontrol-config.*"
FILES_libmissioncontrol-server-dev = "${libdir}/libmissioncontrol-server.*"
-FILES_libmissioncontrol-dbg = "${libdir}/.debug/libmissioncontrol.so.*"
-FILES_libmissioncontrol-config-dbg = "${libdir}/.debug/libmissioncontrol-config.so.*"
-FILES_libmissioncontrol-server-dbg = "${libdir}/.debug/libmissioncontrol-server.so.*"
+FILES_libmissioncontrol-dbg += "${libdir}/.debug/libmissioncontrol.so.*"
+FILES_libmissioncontrol-config-dbg += "${libdir}/.debug/libmissioncontrol-config.so.*"
+FILES_libmissioncontrol-server-dbg += "${libdir}/.debug/libmissioncontrol-server.so.*"
do_stage() {
autotools_stage_all
diff --git a/packages/termcap/termcap_11.0.1.bb b/packages/termcap/termcap_11.0.1.bb
index 81953021e0..ebb3791430 100644
--- a/packages/termcap/termcap_11.0.1.bb
+++ b/packages/termcap/termcap_11.0.1.bb
@@ -11,6 +11,6 @@ do_install() {
install -m 0644 termtypes.tc ${D}${sysconfdir}/termcap
}
-PACKAGES = "termcap"
+PACKAGES = "${PN}-dbg termcap"
FILES_termcap = "${sysconfdir}"
diff --git a/packages/tetex/tetex-texmf_3.0.bb b/packages/tetex/tetex-texmf_3.0.bb
index 7405713d22..80d6f779d8 100644
--- a/packages/tetex/tetex-texmf_3.0.bb
+++ b/packages/tetex/tetex-texmf_3.0.bb
@@ -38,7 +38,7 @@ RRECOMMENDS_${PN} = " \
tetex-texmf-texdoctk \
tetex-texmf-web2c "
-PACKAGES = "tetex-texmf \
+PACKAGES = "${PN}-dbg tetex-texmf \
tetex-texmf-bibtex \
tetex-texmf-context \
tetex-texmf-texdoc \
diff --git a/packages/texmaker/texmaker_1.3.bb b/packages/texmaker/texmaker_1.3.bb
index 5682338f31..b612302544 100644
--- a/packages/texmaker/texmaker_1.3.bb
+++ b/packages/texmaker/texmaker_1.3.bb
@@ -5,7 +5,7 @@ LICENSE = "GPL"
SRC_URI = "http://www.xm1math.net/texmaker/texmaker-${PV}.tar.bz2"
-inherit qmake qt4x11
+inherit qt4x11
do_install() {
install -d ${D}${bindir}
diff --git a/packages/timezones/timezones_1.2.0.bb b/packages/timezones/timezones_1.2.0.bb
deleted file mode 100644
index 8efe72d45c..0000000000
--- a/packages/timezones/timezones_1.2.0.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-DESCRIPTION = "Timezone data"
-SECTION = "base"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PR = "r1"
-
-SRC_URI = "${HANDHELDS_CVS};tag=v1_2_0;module=opie/root"
-S = "${WORKDIR}/root"
-
-do_install() {
- install -d ${D}${datadir}/
- cp -fa usr/share/zoneinfo ${D}${datadir}/
- find ${D}${datadir} -name "CVS"|xargs rm -rf
-}
-
-PACKAGES_DYNAMIC = "timezone-*"
-
-python populate_packages_prepend() {
- pkgregex = "^(.*)"
- pkgpattern = "timezone-%s"
- pkgdescription = "Timezone for %s"
-
- do_split_packages(d, root=bb.data.expand('${datadir}/zoneinfo/', d), file_regex=pkgregex, output_pattern=pkgpattern,
- description=pkgdescription,allow_dirs=True )
-}
-
-FILES_${PN} = "${datadir}/zoneinfo/America/Denver \
- ${datadir}/zoneinfo/America/New_York \
- ${datadir}/zoneinfo/America/Los_Angeles \
- ${datadir}/zoneinfo/Australia/Brisbane \
- ${datadir}/zoneinfo/Europe/Berlin \
- ${datadir}/zoneinfo/Asia/Tokyo "
diff --git a/packages/tmake/tmake_1.11.bb b/packages/tmake/tmake_1.11.bb
index a0f7222904..9d1ecd1a2a 100644
--- a/packages/tmake/tmake_1.11.bb
+++ b/packages/tmake/tmake_1.11.bb
@@ -23,6 +23,6 @@ do_install() {
cp -R lib/* ${D}${datadir}/tmake/
}
-PACKAGES = "tmake"
+PACKAGES = "${PN}-dbg tmake"
FILES = ""
FILES_tmake="${bindir} ${datadir}/tmake"
diff --git a/packages/tn5250/tn5250_0.16.5.bb b/packages/tn5250/tn5250_0.16.5.bb
index 26c9100f74..258064f90b 100644
--- a/packages/tn5250/tn5250_0.16.5.bb
+++ b/packages/tn5250/tn5250_0.16.5.bb
@@ -11,7 +11,7 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/tn5250/tn5250-${PV}.tar.gz \
inherit autotools
-PACKAGES = "lib5250-0 tn5250-dev tn5250-doc tn5250"
+PACKAGES = "${PN}-dbg lib5250-0 tn5250-dev tn5250-doc tn5250"
FILES_${PN} = "${bindir}/tn5250"
FILES_lib5250-0 = "${libdir}/lib*.so.*"
AUTO_LIBNAME_PKGS = "lib5250"
diff --git a/packages/ttf-fonts/ttf-bitstream-vera_1.10.bb b/packages/ttf-fonts/ttf-bitstream-vera_1.10.bb
index 871bc1d37c..6ddfa7aac0 100644
--- a/packages/ttf-fonts/ttf-bitstream-vera_1.10.bb
+++ b/packages/ttf-fonts/ttf-bitstream-vera_1.10.bb
@@ -1,10 +1,8 @@
+require ttf.inc
+
DESCRIPTION = "The Bitstream Vera fonts - TTF Edition"
-SECTION = "x11/fonts"
-PRIORITY = "optional"
LICENSE = "Bitstream Vera"
-PACKAGE_ARCH = "all"
-PR = "r3"
-RDEPENDS = "fontconfig-utils"
+PR = "r4"
SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/1.10/ttf-bitstream-vera-${PV}.tar.bz2"
@@ -25,10 +23,4 @@ do_install () {
done
}
-pkg_postinst () {
-#!/bin/sh
-fc-cache
-}
-
-
FILES_${PN} = "/etc ${datadir}/fonts"
diff --git a/packages/ttf-fonts/ttf-dejavu_2.18.bb b/packages/ttf-fonts/ttf-dejavu_2.18.bb
index 17339e8d8e..6f05cef5d6 100644
--- a/packages/ttf-fonts/ttf-dejavu_2.18.bb
+++ b/packages/ttf-fonts/ttf-dejavu_2.18.bb
@@ -1,15 +1,15 @@
+require ttf.inc
+
DESCRIPTION = "DejaVu font - TTF Edition"
+HOMEPAGE = "http://dejavu.sourceforge.net/wiki/"
LICENSE = "Bitstream Vera"
-HOMEPAGE = "http://dejavu.sourceforge.net/wiki/index.php/Main_Page"
RDEPENDS = "ttf-dejavu-common"
RDEPENDS_ttf-dejavu-common = ""
-PR = "r1"
+PR = "r2"
SRC_URI = "${SOURCEFORGE_MIRROR}/dejavu/dejavu-ttf-${PV}.tar.bz2 \
file://30-dejavu-aliases.conf"
-require ttf.inc
-
S = "${WORKDIR}/dejavu-ttf-${PV}"
do_install_append () {
@@ -17,7 +17,7 @@ do_install_append () {
install -m 0644 ${WORKDIR}/30-dejavu-aliases.conf ${D}${sysconfdir}/fonts/conf.d/
}
-PACKAGES = "ttf-dejavu-sans ttf-dejavu-sans-mono ttf-dejavu-sans-condensed \
+PACKAGES = "${PN}-dbg ttf-dejavu-sans ttf-dejavu-sans-mono ttf-dejavu-sans-condensed \
ttf-dejavu-serif ttf-dejavu-serif-condensed ttf-dejavu-common"
FILES_ttf-dejavu-sans = "${datadir}/fonts/truetype/DejaVuSans.ttf ${datadir}/fonts/truetype/DejaVuSans-*.ttf"
diff --git a/packages/ttf-fonts/ttf-gentium_1.02.bb b/packages/ttf-fonts/ttf-gentium_1.02.bb
index 5bedf5aafc..bf2a416e08 100644
--- a/packages/ttf-fonts/ttf-gentium_1.02.bb
+++ b/packages/ttf-fonts/ttf-gentium_1.02.bb
@@ -1,13 +1,14 @@
+require ttf.inc
+
DESCRIPTION = "Gentium fonts - TTF Version"
-LICENSE = "SIL Open Font License"
HOMEPAGE = "http://scripts.sil.org/gentium"
+LICENSE = "SIL Open Font License"
LICENSE_URL = "http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=OFL"
+PR = "r1"
SRC_URI = "${DEBIAN_MIRROR}/main/t/ttf-gentium/ttf-gentium_${PV}.orig.tar.gz \
file://OFL.gz"
-require ttf.inc
-
S = "${WORKDIR}/ttf-sil-gentium-${PV}"
do_install_append() {
@@ -20,8 +21,7 @@ do_install_append() {
}
-
-PACKAGES = "${PN} ${PN}-alt"
+PACKAGES = "${PN}-dbg ${PN} ${PN}-alt"
FILES_ttf-gentium-alt = "${datadir}/fonts/truetype/GenAI*.ttf \
${datadir}/fonts/truetype/GenAR*.ttf \
diff --git a/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb b/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb
index f81097c22f..2964d7a7d8 100644
--- a/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb
+++ b/packages/ttf-fonts/ttf-hunkyfonts_0.3.0.bb
@@ -1,15 +1,14 @@
+require ttf.inc
+
DESCRIPTION = "Hunky fonts - TTF Version"
-LICENSE = "LGPL"
HOMEPAGE = "http://sourceforge.net/projects/hunkyfonts"
-PR = "r0"
+LICENSE = "LGPL"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/hunkyfonts/hunkyfonts-${PV}.tar.bz2"
S = "${WORKDIR}/hunkyfonts-${PV}/TTF/"
-require ttf.inc
-
-PACKAGES = "ttf-hunky-sans ttf-hunky-serif"
-
+PACKAGES = "${PN}-dbg ttf-hunky-sans ttf-hunky-serif"
FILES_ttf-hunky-sans = "${datadir}/fonts/truetype/HunkySans*.ttf"
FILES_ttf-hunky-serif = "${datadir}/fonts/truetype/HunkySerif*.ttf"
diff --git a/packages/ttf-fonts/ttf-liberation_0.2.bb b/packages/ttf-fonts/ttf-liberation_0.2.bb
index 94b4012d3e..08d450e2ab 100644
--- a/packages/ttf-fonts/ttf-liberation_0.2.bb
+++ b/packages/ttf-fonts/ttf-liberation_0.2.bb
@@ -1,13 +1,14 @@
+require ttf.inc
+
DESCRIPTION = "Liberation fonts - TTF Version"
-LICENSE = "Liberation"
HOMEPAGE = "https://www.redhat.com/promo/fonts/"
-
-require ttf.inc
+LICENSE = "Liberation"
+PR = "r1"
SRC_URI = "http://www.redhat.com/f/fonts/liberation-fonts-ttf-3.tar.gz"
S = "${WORKDIR}/liberation-fonts-${PV}"
-PACKAGES = "ttf-liberation-mono ttf-liberation-sans ttf-liberation-serif"
+PACKAGES = "${PN}-dbg ttf-liberation-mono ttf-liberation-sans ttf-liberation-serif"
FILES_ttf-liberation-mono = "${datadir}/fonts/truetype/*Mono*"
FILES_ttf-liberation-sans = "${datadir}/fonts/truetype/*Sans*"
FILES_ttf-liberation-serif = "${datadir}/fonts/truetype/*Serif*"
diff --git a/packages/ttf-fonts/ttf-sazanami_20040629.bb b/packages/ttf-fonts/ttf-sazanami_20040629.bb
index a51036155d..ef65d40b6b 100644
--- a/packages/ttf-fonts/ttf-sazanami_20040629.bb
+++ b/packages/ttf-fonts/ttf-sazanami_20040629.bb
@@ -8,12 +8,12 @@ HOMEPAGE = "http://sourceforge.jp/projects/efont/"
LICENSE = "${PN}"
SRC_DISTRIBUTE_LICENSES += "${PN}"
RPROVIDES = "virtual/japanese-font"
-PR = "r1"
+PR = "r2"
SRC_URI = "http://download.sourceforge.jp/efont/10087/sazanami-20040629.tar.bz2"
S = "${WORKDIR}/sazanami-20040629"
-PACKAGES = "ttf-sazanami-gothic ttf-sazanami-mincho"
+PACKAGES = "${PN}-dbg ttf-sazanami-gothic ttf-sazanami-mincho"
FILES_ttf-sazanami-gothic = "${datadir}/fonts/truetype/sazanami-gothic.ttf \
${datadir}/doc/ttf-sazanami-gothic/README"
FILES_ttf-sazanami-mincho = "${datadir}/fonts/truetype/sazanami-mincho.ttf \
diff --git a/packages/ttf-fonts/ttf.inc b/packages/ttf-fonts/ttf.inc
index 3f0eca3d5d..00363c565f 100644
--- a/packages/ttf-fonts/ttf.inc
+++ b/packages/ttf-fonts/ttf.inc
@@ -1,18 +1,18 @@
-SECTION = "x11/fonts"
+SECTION = "fonts"
PRIORITY = "optional"
-PACKAGE_ARCH = "all"
-#DEPENDS = "fontconfig opie-ttf-support"
-#RSUGGESTS = "fontconfig-utils opie-ttf-support"
-
-# I dont want TTF fonts to depend on fontconfig on device
-# as those fonts are used not only in X11 enviroment
+RRECOMMENDS += "font-update-common"
do_install() {
install -d ${D}${datadir}/fonts/truetype/
install -m 0644 ${S}/*.ttf ${D}${datadir}/fonts/truetype/
}
-#pkg_postinst () {
-##!/bin/sh
-#fc-cache
-#}
+pkg_postinst_append() {
+ update-fonts
+}
+
+pkg_postrm_append() {
+ update-fonts
+}
+
+PACKAGE_ARCH = "all"
diff --git a/packages/twisted/twisted_2.5.0.bb b/packages/twisted/twisted_2.5.0.bb
index c7620e4b84..774deb9c22 100644
--- a/packages/twisted/twisted_2.5.0.bb
+++ b/packages/twisted/twisted_2.5.0.bb
@@ -175,6 +175,6 @@ ${libdir}/python2.4/site-packages/twisted/plugins/twisted_words.py \
${libdir}/python2.4/site-packages/twisted/words\
"
-FILES_python-twisted-runner-dbg = " \
+FILES_python-twisted-runner-dbg += " \
${libdir}/python2.4/site-packages/twisted/runner/.debug"
diff --git a/packages/tzcode/tzcode-native_2007e.bb b/packages/tzcode/tzcode-native_2007k.bb
index 8e721d6d9a..8e721d6d9a 100644
--- a/packages/tzcode/tzcode-native_2007e.bb
+++ b/packages/tzcode/tzcode-native_2007k.bb
diff --git a/packages/tzdata/tzdata_2007e.bb b/packages/tzdata/tzdata_2007e.bb
deleted file mode 100644
index 46d941c269..0000000000
--- a/packages/tzdata/tzdata_2007e.bb
+++ /dev/null
@@ -1,158 +0,0 @@
-DESCRIPTION = "Timezone data"
-SECTION = "base"
-PRIORITY = "optional"
-DEPENDS = "tzcode-native"
-
-PR = "r0"
-
-PROVIDES = "tzdata tzdata-misc tzdata-posix tzdata-right tzdata-africa \
- tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \
- tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific"
-RPROVIDES = "tzdata"
-RCONFLICTS= "timezones timezone-africa timezone-america timezone-antarctica \
- timezone-arctic timezone-asia timezone-atlantic \
- timezone-australia timezone-europe timezone-indian \
- timezone-iso3166.tab timezone-pacific timezone-zone.tab"
-
-SRC_URI = "ftp://elsie.nci.nih.gov/pub/tzdata${PV}.tar.gz"
-
-S = "${WORKDIR}"
-
-TZONES= "africa antarctica asia australasia europe northamerica southamerica \
- factory solar87 solar88 solar89 etcetera backward systemv \
-# pacificnew \
- "
-
-do_compile () {
- for zone in ${TZONES}; do \
- ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo -L /dev/null \
- -y ${S}/yearistype.sh ${S}/${zone} ; \
- ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo/posix -L /dev/null \
- -y ${S}/yearistype.sh ${S}/${zone} ; \
- ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo/right -L ${S}/leapseconds \
- -y ${S}/yearistype.sh ${S}/${zone} ; \
- done
-}
-
-do_install () {
- install -d ${D}/usr ${D}${datadir}/zoneinfo
- cp -pPR ${S}/usr ${D}/
-}
-
-# Packages primarily organized by directory with a major city
-# in most time zones in the base package
-
-PACKAGES = "tzdata tzdata-misc tzdata-posix tzdata-right tzdata-africa \
- tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \
- tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific"
-
-FILES_tzdata-africa += "${datadir}/zoneinfo/Africa/*"
-RPROVIDES_tzdata-africa = "tzdata-africa"
-
-FILES_tzdata-americas += "${datadir}/zoneinfo/America/* \
- ${datadir}/zoneinfo/US/* \
- ${datadir}/zoneinfo/Brazil/* \
- ${datadir}/zoneinfo/Canada/* \
- ${datadir}/zoneinfo/Mexico/* \
- ${datadir}/zoneinfo/Chile/*"
-RPROVIDES_tzdata-americas = "tzdata-americas"
-
-FILES_tzdata-antarctica += "${datadir}/zoneinfo/Antarctica/*"
-RPROVIDES_tzdata-antarctica = "tzdata-antarctica"
-
-FILES_tzdata-arctic += "${datadir}/zoneinfo/Arctic/*"
-RPROVIDES_tzdata-arctic = "tzdata-arctic"
-
-FILES_tzdata-asia += "${datadir}/zoneinfo/Asia/* \
- ${datadir}/zoneinfo/Indian/* \
- ${datadir}/zoneinfo/Mideast/*"
-RPROVIDES_tzdata-asia = "tzdata-asia"
-
-FILES_tzdata-atlantic += "${datadir}/zoneinfo/Atlantic/*"
-RPROVIDES_tzdata-atlantic = "tzdata-atlantic"
-
-FILES_tzdata-australia += "${datadir}/zoneinfo/Australia/*"
-RPROVIDES_tzdata-australia = "tzdata-australia"
-
-FILES_tzdata-europe += "${datadir}/zoneinfo/Europe/*"
-RPROVIDES_tzdata-europe = "tzdata-europe"
-
-FILES_tzdata-pacific += "${datadir}/zoneinfo/Pacific/*"
-RPROVIDES_tzdata-pacific = "tzdata-pacific"
-
-FILES_tzdata-posix += "${datadir}/zoneinfo/posix/*"
-RPROVIDES_tzdata-posix = "tzdata-posix"
-
-FILES_tzdata-right += "${datadir}/zoneinfo/right/*"
-RPROVIDES_tzdata-right = "tzdata-right"
-
-
-FILES_tzdata-misc += "${datadir}/zoneinfo/Cuba \
- ${datadir}/zoneinfo/Egypt \
- ${datadir}/zoneinfo/Eire \
- ${datadir}/zoneinfo/Factory \
- ${datadir}/zoneinfo/GB-Eire \
- ${datadir}/zoneinfo/Hongkong \
- ${datadir}/zoneinfo/Iceland \
- ${datadir}/zoneinfo/Iran \
- ${datadir}/zoneinfo/Israel \
- ${datadir}/zoneinfo/Jamaica \
- ${datadir}/zoneinfo/Japan \
- ${datadir}/zoneinfo/Kwajalein \
- ${datadir}/zoneinfo/Libya \
- ${datadir}/zoneinfo/Navajo \
- ${datadir}/zoneinfo/Poland \
- ${datadir}/zoneinfo/Portugal \
- ${datadir}/zoneinfo/Singapore \
- ${datadir}/zoneinfo/Turkey"
-RPROVIDES_tzdata-misc = "tzdata-misc"
-
-
-FILES_${PN} += "${datadir}/zoneinfo/Pacific/Honolulu \
- ${datadir}/zoneinfo/America/Anchorage \
- ${datadir}/zoneinfo/America/Los_Angeles \
- ${datadir}/zoneinfo/America/Denver \
- ${datadir}/zoneinfo/America/Chicago \
- ${datadir}/zoneinfo/America/New_York \
- ${datadir}/zoneinfo/America/Caracas \
- ${datadir}/zoneinfo/America/Sao_Paulo \
- ${datadir}/zoneinfo/Europe/London \
- ${datadir}/zoneinfo/Europe/Paris \
- ${datadir}/zoneinfo/Africa/Cairo \
- ${datadir}/zoneinfo/Europe/Moscow \
- ${datadir}/zoneinfo/Asia/Dubai \
- ${datadir}/zoneinfo/Asia/Karachi \
- ${datadir}/zoneinfo/Asia/Dhaka \
- ${datadir}/zoneinfo/Asia/Bankok \
- ${datadir}/zoneinfo/Asia/Hong_Kong \
- ${datadir}/zoneinfo/Asia/Tokyo \
- ${datadir}/zoneinfo/Australia/Sydney \
- ${datadir}/zoneinfo/Pacific/Noumea \
- ${datadir}/zoneinfo/CET \
- ${datadir}/zoneinfo/CST6CDT \
- ${datadir}/zoneinfo/EET \
- ${datadir}/zoneinfo/EST \
- ${datadir}/zoneinfo/EST5EDT \
- ${datadir}/zoneinfo/GB \
- ${datadir}/zoneinfo/GMT \
- ${datadir}/zoneinfo/GMT+0 \
- ${datadir}/zoneinfo/GMT-0 \
- ${datadir}/zoneinfo/GMT0 \
- ${datadir}/zoneinfo/Greenwich \
- ${datadir}/zoneinfo/HST \
- ${datadir}/zoneinfo/MET \
- ${datadir}/zoneinfo/MST \
- ${datadir}/zoneinfo/MST7MDT \
- ${datadir}/zoneinfo/NZ \
- ${datadir}/zoneinfo/NZ-CHAT \
- ${datadir}/zoneinfo/PRC \
- ${datadir}/zoneinfo/PST8PDT \
- ${datadir}/zoneinfo/ROC \
- ${datadir}/zoneinfo/ROK \
- ${datadir}/zoneinfo/UCT \
- ${datadir}/zoneinfo/UTC \
- ${datadir}/zoneinfo/Universal \
- ${datadir}/zoneinfo/W-SU \
- ${datadir}/zoneinfo/WET \
- ${datadir}/zoneinfo/Zulu \
- ${datadir}/zoneinfo/Etc/*"
diff --git a/packages/tzdata/tzdata_2007k.bb b/packages/tzdata/tzdata_2007k.bb
new file mode 100644
index 0000000000..2fbe9ac884
--- /dev/null
+++ b/packages/tzdata/tzdata_2007k.bb
@@ -0,0 +1,161 @@
+DESCRIPTION = "Timezone data"
+SECTION = "base"
+PRIORITY = "optional"
+DEPENDS = "tzcode-native"
+
+PR = "r1"
+
+PROVIDES = "tzdata tzdata-misc tzdata-posix tzdata-right tzdata-africa \
+ tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \
+ tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific"
+RPROVIDES = "tzdata"
+RCONFLICTS= "timezones timezone-africa timezone-america timezone-antarctica \
+ timezone-arctic timezone-asia timezone-atlantic \
+ timezone-australia timezone-europe timezone-indian \
+ timezone-iso3166.tab timezone-pacific timezone-zone.tab"
+
+SRC_URI = "ftp://elsie.nci.nih.gov/pub/tzdata${PV}.tar.gz"
+
+S = "${WORKDIR}"
+
+TZONES= "africa antarctica asia australasia europe northamerica southamerica \
+ factory solar87 solar88 solar89 etcetera backward systemv \
+# pacificnew \
+ "
+
+do_compile () {
+ for zone in ${TZONES}; do \
+ ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo -L /dev/null \
+ -y ${S}/yearistype.sh ${S}/${zone} ; \
+ ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo/posix -L /dev/null \
+ -y ${S}/yearistype.sh ${S}/${zone} ; \
+ ${STAGING_BINDIR_NATIVE}/zic -d ${WORKDIR}${datadir}/zoneinfo/right -L ${S}/leapseconds \
+ -y ${S}/yearistype.sh ${S}/${zone} ; \
+ done
+}
+
+do_install () {
+ install -d ${D}/usr ${D}${datadir}/zoneinfo
+ cp -pPR ${S}/usr ${D}/
+}
+
+# Packages primarily organized by directory with a major city
+# in most time zones in the base package
+
+PACKAGES = "${PN}-dbg tzdata tzdata-misc tzdata-posix tzdata-right tzdata-africa \
+ tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \
+ tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific"
+
+FILES_tzdata-africa += "${datadir}/zoneinfo/Africa/*"
+RPROVIDES_tzdata-africa = "tzdata-africa"
+
+FILES_tzdata-americas += "${datadir}/zoneinfo/America/* \
+ ${datadir}/zoneinfo/US/* \
+ ${datadir}/zoneinfo/Brazil/* \
+ ${datadir}/zoneinfo/Canada/* \
+ ${datadir}/zoneinfo/Mexico/* \
+ ${datadir}/zoneinfo/Chile/*"
+RPROVIDES_tzdata-americas = "tzdata-americas"
+
+FILES_tzdata-antarctica += "${datadir}/zoneinfo/Antarctica/*"
+RPROVIDES_tzdata-antarctica = "tzdata-antarctica"
+
+FILES_tzdata-arctic += "${datadir}/zoneinfo/Arctic/*"
+RPROVIDES_tzdata-arctic = "tzdata-arctic"
+
+FILES_tzdata-asia += "${datadir}/zoneinfo/Asia/* \
+ ${datadir}/zoneinfo/Indian/* \
+ ${datadir}/zoneinfo/Mideast/*"
+RPROVIDES_tzdata-asia = "tzdata-asia"
+
+FILES_tzdata-atlantic += "${datadir}/zoneinfo/Atlantic/*"
+RPROVIDES_tzdata-atlantic = "tzdata-atlantic"
+
+FILES_tzdata-australia += "${datadir}/zoneinfo/Australia/*"
+RPROVIDES_tzdata-australia = "tzdata-australia"
+
+FILES_tzdata-europe += "${datadir}/zoneinfo/Europe/*"
+RPROVIDES_tzdata-europe = "tzdata-europe"
+
+FILES_tzdata-pacific += "${datadir}/zoneinfo/Pacific/*"
+RPROVIDES_tzdata-pacific = "tzdata-pacific"
+
+FILES_tzdata-posix += "${datadir}/zoneinfo/posix/*"
+RPROVIDES_tzdata-posix = "tzdata-posix"
+
+FILES_tzdata-right += "${datadir}/zoneinfo/right/*"
+RPROVIDES_tzdata-right = "tzdata-right"
+
+
+FILES_tzdata-misc += "${datadir}/zoneinfo/Cuba \
+ ${datadir}/zoneinfo/Egypt \
+ ${datadir}/zoneinfo/Eire \
+ ${datadir}/zoneinfo/Factory \
+ ${datadir}/zoneinfo/GB-Eire \
+ ${datadir}/zoneinfo/Hongkong \
+ ${datadir}/zoneinfo/Iceland \
+ ${datadir}/zoneinfo/Iran \
+ ${datadir}/zoneinfo/Israel \
+ ${datadir}/zoneinfo/Jamaica \
+ ${datadir}/zoneinfo/Japan \
+ ${datadir}/zoneinfo/Kwajalein \
+ ${datadir}/zoneinfo/Libya \
+ ${datadir}/zoneinfo/Navajo \
+ ${datadir}/zoneinfo/Poland \
+ ${datadir}/zoneinfo/Portugal \
+ ${datadir}/zoneinfo/Singapore \
+ ${datadir}/zoneinfo/Turkey"
+RPROVIDES_tzdata-misc = "tzdata-misc"
+
+
+FILES_${PN} += "${datadir}/zoneinfo/Pacific/Honolulu \
+ ${datadir}/zoneinfo/America/Anchorage \
+ ${datadir}/zoneinfo/America/Los_Angeles \
+ ${datadir}/zoneinfo/America/Denver \
+ ${datadir}/zoneinfo/America/Chicago \
+ ${datadir}/zoneinfo/America/New_York \
+ ${datadir}/zoneinfo/America/Caracas \
+ ${datadir}/zoneinfo/America/Sao_Paulo \
+ ${datadir}/zoneinfo/Europe/London \
+ ${datadir}/zoneinfo/Europe/Paris \
+ ${datadir}/zoneinfo/Africa/Cairo \
+ ${datadir}/zoneinfo/Europe/Moscow \
+ ${datadir}/zoneinfo/Asia/Dubai \
+ ${datadir}/zoneinfo/Asia/Karachi \
+ ${datadir}/zoneinfo/Asia/Dhaka \
+ ${datadir}/zoneinfo/Asia/Bankok \
+ ${datadir}/zoneinfo/Asia/Hong_Kong \
+ ${datadir}/zoneinfo/Asia/Tokyo \
+ ${datadir}/zoneinfo/Australia/Darwin \
+ ${datadir}/zoneinfo/Australia/Adelaide \
+ ${datadir}/zoneinfo/Australia/Brisbane \
+ ${datadir}/zoneinfo/Australia/Sydney \
+ ${datadir}/zoneinfo/Pacific/Noumea \
+ ${datadir}/zoneinfo/CET \
+ ${datadir}/zoneinfo/CST6CDT \
+ ${datadir}/zoneinfo/EET \
+ ${datadir}/zoneinfo/EST \
+ ${datadir}/zoneinfo/EST5EDT \
+ ${datadir}/zoneinfo/GB \
+ ${datadir}/zoneinfo/GMT \
+ ${datadir}/zoneinfo/GMT+0 \
+ ${datadir}/zoneinfo/GMT-0 \
+ ${datadir}/zoneinfo/GMT0 \
+ ${datadir}/zoneinfo/Greenwich \
+ ${datadir}/zoneinfo/HST \
+ ${datadir}/zoneinfo/MET \
+ ${datadir}/zoneinfo/MST \
+ ${datadir}/zoneinfo/MST7MDT \
+ ${datadir}/zoneinfo/NZ \
+ ${datadir}/zoneinfo/NZ-CHAT \
+ ${datadir}/zoneinfo/PRC \
+ ${datadir}/zoneinfo/PST8PDT \
+ ${datadir}/zoneinfo/ROC \
+ ${datadir}/zoneinfo/ROK \
+ ${datadir}/zoneinfo/UCT \
+ ${datadir}/zoneinfo/UTC \
+ ${datadir}/zoneinfo/Universal \
+ ${datadir}/zoneinfo/W-SU \
+ ${datadir}/zoneinfo/WET \
+ ${datadir}/zoneinfo/Zulu \
+ ${datadir}/zoneinfo/Etc/*"
diff --git a/packages/u-boot/.mtn2git_empty b/packages/u-boot/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/u-boot/.mtn2git_empty
diff --git a/packages/u-boot/files/.mtn2git_empty b/packages/u-boot/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/u-boot/files/.mtn2git_empty
diff --git a/packages/uboot/files/arm_flags.patch b/packages/u-boot/files/arm_flags.patch
index 84b8cada39..84b8cada39 100644
--- a/packages/uboot/files/arm_flags.patch
+++ b/packages/u-boot/files/arm_flags.patch
diff --git a/packages/u-boot/files/boot-menu-gfx-fix-openmoko-bug-1140.patch b/packages/u-boot/files/boot-menu-gfx-fix-openmoko-bug-1140.patch
new file mode 100644
index 0000000000..c97880a01c
--- /dev/null
+++ b/packages/u-boot/files/boot-menu-gfx-fix-openmoko-bug-1140.patch
@@ -0,0 +1,29 @@
+--- git.orig/drivers/video/cfb_console.c 2007-12-27 00:59:35.000000000 -0800
++++ git/drivers/video/cfb_console.c 2007-12-27 08:23:42.000000000 -0800
+@@ -141,6 +141,14 @@
+ #endif
+
+ /*****************************************************************************/
++/* Defines for the S3C2410 driver */
++/*****************************************************************************/
++#ifdef CONFIG_VIDEO_S3C2410
++/* it actually is little-endian, but the host CPU, too ! */
++//#define VIDEO_FB_LITTLE_ENDIAN
++#endif
++
++/*****************************************************************************/
+ /* Include video_fb.h after definitions of VIDEO_HW_RECTFILL etc */
+ /*****************************************************************************/
+ #include <video_fb.h>
+@@ -309,6 +317,11 @@
+ #define SHORTSWAP32(x) (x)
+ #endif
+
++#ifdef CONFIG_VIDEO_S3C2410
++#undef SHORTSWAP32
++#define SHORTSWAP32(x) ((((x) & 0xffff) << 16) | (((x) >> 16) & 0xffff))
++#endif
++
+ #if defined(DEBUG) || defined(DEBUG_CFB_CONSOLE)
+ #define PRINTD(x) printf(x)
+ #else
diff --git a/packages/uboot/files/fix-arm920t-eabi.patch b/packages/u-boot/files/fix-arm920t-eabi.patch
index 9896388c8f..9896388c8f 100644
--- a/packages/uboot/files/fix-arm920t-eabi.patch
+++ b/packages/u-boot/files/fix-arm920t-eabi.patch
diff --git a/packages/u-boot/files/fix-data-abort-from-sd-ombug799.patch b/packages/u-boot/files/fix-data-abort-from-sd-ombug799.patch
new file mode 100644
index 0000000000..98b84430ad
--- /dev/null
+++ b/packages/u-boot/files/fix-data-abort-from-sd-ombug799.patch
@@ -0,0 +1,11 @@
+--- git.orig/fs/ext2/ext2fs.c 2007-12-13 23:16:13.000000000 -0800
++++ git/fs/ext2/ext2fs.c 2007-12-13 23:16:41.000000000 -0800
+@@ -472,7 +472,7 @@
+ return (0);
+ }
+ if (dirent.namelen != 0) {
+- char filename[dirent.namelen + 1];
++ char filename[256];
+ ext2fs_node_t fdiro;
+ int type = FILETYPE_UNKNOWN;
+
diff --git a/packages/uboot/files/makefile-no-dirafter.patch b/packages/u-boot/files/makefile-no-dirafter.patch
index 2ed26c3127..2ed26c3127 100644
--- a/packages/uboot/files/makefile-no-dirafter.patch
+++ b/packages/u-boot/files/makefile-no-dirafter.patch
diff --git a/packages/uboot/files/u-boot-20061030-ext2load_hex.patch b/packages/u-boot/files/u-boot-20061030-ext2load_hex.patch
index 3cecb7485d..3cecb7485d 100644
--- a/packages/uboot/files/u-boot-20061030-ext2load_hex.patch
+++ b/packages/u-boot/files/u-boot-20061030-ext2load_hex.patch
diff --git a/packages/uboot/files/uboot-20070311-tools_makefile_ln_sf.patch b/packages/u-boot/files/uboot-20070311-tools_makefile_ln_sf.patch
index e90cc0de71..e90cc0de71 100644
--- a/packages/uboot/files/uboot-20070311-tools_makefile_ln_sf.patch
+++ b/packages/u-boot/files/uboot-20070311-tools_makefile_ln_sf.patch
diff --git a/packages/uboot/files/uboot-eabi-fix-HACK.patch b/packages/u-boot/files/uboot-eabi-fix-HACK.patch
index 65b212917d..65b212917d 100644
--- a/packages/uboot/files/uboot-eabi-fix-HACK.patch
+++ b/packages/u-boot/files/uboot-eabi-fix-HACK.patch
diff --git a/packages/u-boot/u-boot-1.1.2/.mtn2git_empty b/packages/u-boot/u-boot-1.1.2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/u-boot/u-boot-1.1.2/.mtn2git_empty
diff --git a/packages/uboot/u-boot-1.1.2/arm_flags.patch b/packages/u-boot/u-boot-1.1.2/arm_flags.patch
index 48c7b78043..48c7b78043 100644
--- a/packages/uboot/u-boot-1.1.2/arm_flags.patch
+++ b/packages/u-boot/u-boot-1.1.2/arm_flags.patch
diff --git a/packages/uboot/u-boot-1.1.2/cmd-arm-linux.patch b/packages/u-boot/u-boot-1.1.2/cmd-arm-linux.patch
index e7ef37e061..e7ef37e061 100644
--- a/packages/uboot/u-boot-1.1.2/cmd-arm-linux.patch
+++ b/packages/u-boot/u-boot-1.1.2/cmd-arm-linux.patch
diff --git a/packages/uboot/u-boot-1.1.2/command-names.patch b/packages/u-boot/u-boot-1.1.2/command-names.patch
index dd9a7fab44..dd9a7fab44 100644
--- a/packages/uboot/u-boot-1.1.2/command-names.patch
+++ b/packages/u-boot/u-boot-1.1.2/command-names.patch
diff --git a/packages/uboot/u-boot-1.1.2/mnci-jffs2.patch b/packages/u-boot/u-boot-1.1.2/mnci-jffs2.patch
index 8b2571ad99..8b2571ad99 100644
--- a/packages/uboot/u-boot-1.1.2/mnci-jffs2.patch
+++ b/packages/u-boot/u-boot-1.1.2/mnci-jffs2.patch
diff --git a/packages/uboot/u-boot-1.1.2/mnci.patch b/packages/u-boot/u-boot-1.1.2/mnci.patch
index d69cf8eb72..d69cf8eb72 100644
--- a/packages/uboot/u-boot-1.1.2/mnci.patch
+++ b/packages/u-boot/u-boot-1.1.2/mnci.patch
diff --git a/packages/uboot/u-boot-1.1.2/u-boot-1.1.2-neon.patch b/packages/u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch
index ed959d43d8..ed959d43d8 100644
--- a/packages/uboot/u-boot-1.1.2/u-boot-1.1.2-neon.patch
+++ b/packages/u-boot/u-boot-1.1.2/u-boot-1.1.2-neon.patch
diff --git a/packages/uboot/u-boot-1.1.2/u-boot-emetec.patch b/packages/u-boot/u-boot-1.1.2/u-boot-emetec.patch
index ab3f106e71..ab3f106e71 100644
--- a/packages/uboot/u-boot-1.1.2/u-boot-emetec.patch
+++ b/packages/u-boot/u-boot-1.1.2/u-boot-emetec.patch
diff --git a/packages/u-boot/u-boot-1.1.4/.mtn2git_empty b/packages/u-boot/u-boot-1.1.4/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/u-boot/u-boot-1.1.4/.mtn2git_empty
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-autoscript.patch b/packages/u-boot/u-boot-1.1.4/u-boot-autoscript.patch
index 1864b4494e..1864b4494e 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-autoscript.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-autoscript.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-base.patch b/packages/u-boot/u-boot-1.1.4/u-boot-base.patch
index d866c1c26e..d866c1c26e 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-base.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-base.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-crc-warning-not-so-scary.patch b/packages/u-boot/u-boot-1.1.4/u-boot-crc-warning-not-so-scary.patch
index b5736894c6..b5736894c6 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-crc-warning-not-so-scary.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-crc-warning-not-so-scary.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-dht-walnut-df2.patch b/packages/u-boot/u-boot-1.1.4/u-boot-dht-walnut-df2.patch
index d919ea504e..d919ea504e 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-dht-walnut-df2.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-dht-walnut-df2.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-flash-protect-fixup.patch b/packages/u-boot/u-boot-1.1.4/u-boot-flash-protect-fixup.patch
index 1bbbbcb32d..1bbbbcb32d 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-flash-protect-fixup.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-flash-protect-fixup.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-fw_printenv.patch b/packages/u-boot/u-boot-1.1.4/u-boot-fw_printenv.patch
index 5e33452d11..5e33452d11 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-fw_printenv.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-fw_printenv.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-install.patch b/packages/u-boot/u-boot-1.1.4/u-boot-install.patch
index 50c149c0a1..50c149c0a1 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-install.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-install.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-jerase-cmd.patch b/packages/u-boot/u-boot-1.1.4/u-boot-jerase-cmd.patch
index 698f7a2d78..698f7a2d78 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-jerase-cmd.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-jerase-cmd.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-jffs2-new-nodetypes.patch b/packages/u-boot/u-boot-1.1.4/u-boot-jffs2-new-nodetypes.patch
index cce41aca18..cce41aca18 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-jffs2-new-nodetypes.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-jffs2-new-nodetypes.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-loadb-safe.patch b/packages/u-boot/u-boot-1.1.4/u-boot-loadb-safe.patch
index d4b8ef3935..d4b8ef3935 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-loadb-safe.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-loadb-safe.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-make381-fix.patch b/packages/u-boot/u-boot-1.1.4/u-boot-make381-fix.patch
index 89555ac027..89555ac027 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-make381-fix.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-make381-fix.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-mmc-init.patch b/packages/u-boot/u-boot-1.1.4/u-boot-mmc-init.patch
index a18d4d3609..a18d4d3609 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-mmc-init.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-mmc-init.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-mmcclk-alternate.patch b/packages/u-boot/u-boot-1.1.4/u-boot-mmcclk-alternate.patch
index 5eb8324630..5eb8324630 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-mmcclk-alternate.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-mmcclk-alternate.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-smc91x-multi.patch b/packages/u-boot/u-boot-1.1.4/u-boot-smc91x-multi.patch
index 3f285e34dc..3f285e34dc 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-smc91x-multi.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-smc91x-multi.patch
diff --git a/packages/uboot/u-boot-1.1.4/u-boot-zzz-osx.patch b/packages/u-boot/u-boot-1.1.4/u-boot-zzz-osx.patch
index f9d52c7dfe..f9d52c7dfe 100644
--- a/packages/uboot/u-boot-1.1.4/u-boot-zzz-osx.patch
+++ b/packages/u-boot/u-boot-1.1.4/u-boot-zzz-osx.patch
diff --git a/packages/u-boot/u-boot-1.1.6/.mtn2git_empty b/packages/u-boot/u-boot-1.1.6/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/u-boot/u-boot-1.1.6/.mtn2git_empty
diff --git a/packages/uboot/u-boot-1.1.6/devkit-idp.patch b/packages/u-boot/u-boot-1.1.6/devkit-idp.patch
index 1460c3d1f0..1460c3d1f0 100644
--- a/packages/uboot/u-boot-1.1.6/devkit-idp.patch
+++ b/packages/u-boot/u-boot-1.1.6/devkit-idp.patch
diff --git a/packages/uboot/u-boot-1.1.6/sarge-uboot.patch b/packages/u-boot/u-boot-1.1.6/sarge-uboot.patch
index 0c0d56f4d1..0c0d56f4d1 100644
--- a/packages/uboot/u-boot-1.1.6/sarge-uboot.patch
+++ b/packages/u-boot/u-boot-1.1.6/sarge-uboot.patch
diff --git a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-83xx-optimizations.patch b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-83xx-optimizations.patch
index fe85228771..fe85228771 100644
--- a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-83xx-optimizations.patch
+++ b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-83xx-optimizations.patch
diff --git a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-support-for-the-MPC832XEMDS-board.patch b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-support-for-the-MPC832XEMDS-board.patch
index 5018cd3434..5018cd3434 100644
--- a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-support-for-the-MPC832XEMDS-board.patch
+++ b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-support-for-the-MPC832XEMDS-board.patch
diff --git a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-the-MPC832XEMDS-board-readme.patch b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-the-MPC832XEMDS-board-readme.patch
index b5e2a87b16..b5e2a87b16 100644
--- a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-the-MPC832XEMDS-board-readme.patch
+++ b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Add-the-MPC832XEMDS-board-readme.patch
diff --git a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Added-MPC8323E-RDB-board-support-2.patch b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Added-MPC8323E-RDB-board-support-2.patch
index 23a9717e74..23a9717e74 100644
--- a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Added-MPC8323E-RDB-board-support-2.patch
+++ b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Added-MPC8323E-RDB-board-support-2.patch
diff --git a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Fix-the-UEC-driver-bug-of-QE.patch b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Fix-the-UEC-driver-bug-of-QE.patch
index ad2ff243e8..ad2ff243e8 100644
--- a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Fix-the-UEC-driver-bug-of-QE.patch
+++ b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-Fix-the-UEC-driver-bug-of-QE.patch
diff --git a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-UEC-remove-udelay.patch b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-UEC-remove-udelay.patch
index 9e2829bd3e..9e2829bd3e 100644
--- a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-UEC-remove-udelay.patch
+++ b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-UEC-remove-udelay.patch
diff --git a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-mpc83xx-20061206.patch b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-mpc83xx-20061206.patch
index 5f3e1f7aaa..5f3e1f7aaa 100644
--- a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-mpc83xx-20061206.patch
+++ b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-mpc83xx-20061206.patch
diff --git a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-streamline-the-83xx-immr-head-file.patch b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-streamline-the-83xx-immr-head-file.patch
index 30981dc43c..30981dc43c 100644
--- a/packages/uboot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-streamline-the-83xx-immr-head-file.patch
+++ b/packages/u-boot/u-boot-1.1.6/u-boot-1.1.6-fsl-1-streamline-the-83xx-immr-head-file.patch
diff --git a/packages/u-boot/u-boot-1.2.0/.mtn2git_empty b/packages/u-boot/u-boot-1.2.0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/u-boot/u-boot-1.2.0/.mtn2git_empty
diff --git a/packages/uboot/u-boot-1.2.0/defconfig_lsppchd b/packages/u-boot/u-boot-1.2.0/defconfig_lsppchd
index 5919f5eb2c..5919f5eb2c 100644
--- a/packages/uboot/u-boot-1.2.0/defconfig_lsppchd
+++ b/packages/u-boot/u-boot-1.2.0/defconfig_lsppchd
diff --git a/packages/uboot/u-boot-1.2.0/defconfig_lsppchg b/packages/u-boot/u-boot-1.2.0/defconfig_lsppchg
index b9943b4c76..b9943b4c76 100644
--- a/packages/uboot/u-boot-1.2.0/defconfig_lsppchg
+++ b/packages/u-boot/u-boot-1.2.0/defconfig_lsppchg
diff --git a/packages/u-boot/u-boot-1.2.0/env-Makefile.patch b/packages/u-boot/u-boot-1.2.0/env-Makefile.patch
new file mode 100644
index 0000000000..f6e9cb39ae
--- /dev/null
+++ b/packages/u-boot/u-boot-1.2.0/env-Makefile.patch
@@ -0,0 +1,19 @@
+--- u-boot-1.2.0/tools/env/Makefile.orig 2007-12-12 12:52:51.508745236 -0800
++++ u-boot-1.2.0/tools/env/Makefile 2007-12-12 12:54:09.997218038 -0800
+@@ -31,7 +31,7 @@
+ all: $(obj)fw_printenv
+
+ $(obj)fw_printenv: $(SRCS) $(HEADERS)
+- $(CROSS_COMPILE)gcc $(CPPFLAGS) $(SRCS) -o $(obj)fw_printenv
++ $(CROSS_COMPILE)gcc $(TARGET_CFLAGS) -idirafter ../../include -DUSE_HOSTCC $(SRCS) -o $(obj)fw_printenv
+
+ clean:
+ rm -f $(obj)fw_printenv $(obj)crc32.c
+@@ -43,6 +43,6 @@
+
+ include $(TOPDIR)/rules.mk
+
+-sinclude $(obj).depend
++#sinclude $(obj).depend
+
+ #########################################################################
diff --git a/packages/u-boot/u-boot-1.2.0/fic-gta01/.mtn2git_empty b/packages/u-boot/u-boot-1.2.0/fic-gta01/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/u-boot/u-boot-1.2.0/fic-gta01/.mtn2git_empty
diff --git a/packages/uboot/u-boot-1.2.0/fic-gta01/fw_env.config b/packages/u-boot/u-boot-1.2.0/fic-gta01/fw_env.config
index 9fe07672c5..9fe07672c5 100644
--- a/packages/uboot/u-boot-1.2.0/fic-gta01/fw_env.config
+++ b/packages/u-boot/u-boot-1.2.0/fic-gta01/fw_env.config
diff --git a/packages/uboot/u-boot-1.2.0/fw_env.c.patch b/packages/u-boot/u-boot-1.2.0/fw_env.c.patch
index 62f364ad4a..62f364ad4a 100644
--- a/packages/uboot/u-boot-1.2.0/fw_env.c.patch
+++ b/packages/u-boot/u-boot-1.2.0/fw_env.c.patch
diff --git a/packages/uboot/u-boot-1.2.0/fw_env.config b/packages/u-boot/u-boot-1.2.0/fw_env.config
index 2432bd866c..2432bd866c 100644
--- a/packages/uboot/u-boot-1.2.0/fw_env.config
+++ b/packages/u-boot/u-boot-1.2.0/fw_env.config
diff --git a/packages/uboot/u-boot-1.2.0/kurobox_powerpc-20061105_target.gitdiff b/packages/u-boot/u-boot-1.2.0/kurobox_powerpc-20061105_target.gitdiff
index 02027b1062..02027b1062 100644
--- a/packages/uboot/u-boot-1.2.0/kurobox_powerpc-20061105_target.gitdiff
+++ b/packages/u-boot/u-boot-1.2.0/kurobox_powerpc-20061105_target.gitdiff
diff --git a/packages/uboot/u-boot-1.2.0/qnap.diff b/packages/u-boot/u-boot-1.2.0/qnap.diff
index b9ac34e6a8..b9ac34e6a8 100644
--- a/packages/uboot/u-boot-1.2.0/qnap.diff
+++ b/packages/u-boot/u-boot-1.2.0/qnap.diff
diff --git a/packages/uboot/u-boot-1.2.0/tools-Makefile.patch b/packages/u-boot/u-boot-1.2.0/tools-Makefile.patch
index a44bc917d6..a44bc917d6 100644
--- a/packages/uboot/u-boot-1.2.0/tools-Makefile.patch
+++ b/packages/u-boot/u-boot-1.2.0/tools-Makefile.patch
diff --git a/packages/u-boot/u-boot-1.2.0/turbostation/.mtn2git_empty b/packages/u-boot/u-boot-1.2.0/turbostation/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/u-boot/u-boot-1.2.0/turbostation/.mtn2git_empty
diff --git a/packages/uboot/u-boot-1.2.0/turbostation/fw_env.config b/packages/u-boot/u-boot-1.2.0/turbostation/fw_env.config
index 2432bd866c..2432bd866c 100644
--- a/packages/uboot/u-boot-1.2.0/turbostation/fw_env.config
+++ b/packages/u-boot/u-boot-1.2.0/turbostation/fw_env.config
diff --git a/packages/uboot/u-boot-1.2.0/u-boot-kurobox-fdt.patch b/packages/u-boot/u-boot-1.2.0/u-boot-kurobox-fdt.patch
index 182c3785c7..182c3785c7 100644
--- a/packages/uboot/u-boot-1.2.0/u-boot-kurobox-fdt.patch
+++ b/packages/u-boot/u-boot-1.2.0/u-boot-kurobox-fdt.patch
diff --git a/packages/uboot/u-boot-1.2.0/u-boot-kurobox.patch b/packages/u-boot/u-boot-1.2.0/u-boot-kurobox.patch
index 79f7a8e48a..79f7a8e48a 100644
--- a/packages/uboot/u-boot-1.2.0/u-boot-kurobox.patch
+++ b/packages/u-boot/u-boot-1.2.0/u-boot-kurobox.patch
diff --git a/packages/uboot/u-boot-1.2.0/uboot-qnap.diff b/packages/u-boot/u-boot-1.2.0/uboot-qnap.diff
index 2b2a17da7f..2b2a17da7f 100644
--- a/packages/uboot/u-boot-1.2.0/uboot-qnap.diff
+++ b/packages/u-boot/u-boot-1.2.0/uboot-qnap.diff
diff --git a/packages/u-boot/u-boot-1.3.1/.mtn2git_empty b/packages/u-boot/u-boot-1.3.1/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/u-boot/u-boot-1.3.1/.mtn2git_empty
diff --git a/packages/u-boot/u-boot-mkimage-openmoko-native/.mtn2git_empty b/packages/u-boot/u-boot-mkimage-openmoko-native/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/.mtn2git_empty
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/bbt-create-optional.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/bbt-create-optional.patch
index d7a2a872e5..d7a2a872e5 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/bbt-create-optional.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/bbt-create-optional.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/bbt-scan-second.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/bbt-scan-second.patch
index 37b2807908..37b2807908 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/bbt-scan-second.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/bbt-scan-second.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-and-nand.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/boot-from-ram-and-nand.patch
index fa0de39ab7..fa0de39ab7 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-and-nand.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/boot-from-ram-and-nand.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-reloc.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/boot-from-ram-reloc.patch
index 53a3e05c67..53a3e05c67 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/boot-from-ram-reloc.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/boot-from-ram-reloc.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/boot-menu.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/boot-menu.patch
index 352967ae06..352967ae06 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/boot-menu.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/boot-menu.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/cmd-unzip.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/cmd-unzip.patch
index ee4c1984fc..ee4c1984fc 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/cmd-unzip.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/cmd-unzip.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/console-ansi.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/console-ansi.patch
index 2ac5b75dee..2ac5b75dee 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/console-ansi.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/console-ansi.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/default-env.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/default-env.patch
index b9ae4f29fe..b9ae4f29fe 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/default-env.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/default-env.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/dontask.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/dontask.patch
index 23d4b13626..23d4b13626 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/dontask.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/dontask.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/dynenv-harden.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/dynenv-harden.patch
index cf12352553..cf12352553 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/dynenv-harden.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/dynenv-harden.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/early-powerdown.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/early-powerdown.patch
index 7326c2daa6..7326c2daa6 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/early-powerdown.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/early-powerdown.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/enable-splash-bmp.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/enable-splash-bmp.patch
index dcb721c8d3..dcb721c8d3 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/enable-splash-bmp.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/enable-splash-bmp.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/env_nand_oob.patch
index 5a2dd61461..5a2dd61461 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/env_nand_oob.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/env_nand_oob.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/ext2load_hex.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/ext2load_hex.patch
index ff8e9cd6fc..ff8e9cd6fc 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/ext2load_hex.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/ext2load_hex.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/lowlevel_foo.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/lowlevel_foo.patch
index 715c46ed81..715c46ed81 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/lowlevel_foo.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/lowlevel_foo.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/mmcinit-power-up.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/mmcinit-power-up.patch
index fcf54b9fd1..fcf54b9fd1 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/mmcinit-power-up.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/mmcinit-power-up.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/nand-badisbad.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/nand-badisbad.patch
index a5800e2499..a5800e2499 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/nand-badisbad.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/nand-badisbad.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/nand-createbbt.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/nand-createbbt.patch
index 74b79da0a9..74b79da0a9 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/nand-createbbt.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/nand-createbbt.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/nand-dynamic_partitions.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/nand-dynamic_partitions.patch
index ecce004ca6..ecce004ca6 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/nand-dynamic_partitions.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/nand-dynamic_partitions.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/nand-otp.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/nand-otp.patch
index b0e9bf4c4b..b0e9bf4c4b 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/nand-otp.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/nand-otp.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/nand-read_write_oob.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/nand-read_write_oob.patch
index 8360409e46..8360409e46 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/nand-read_write_oob.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/nand-read_write_oob.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/neo1973-chargefast.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/neo1973-chargefast.patch
index 6f6af2c758..6f6af2c758 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/neo1973-chargefast.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/neo1973-chargefast.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/preboot-override.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/preboot-override.patch
index f32cbde27b..f32cbde27b 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/preboot-override.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/preboot-override.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/raise-limits.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/raise-limits.patch
index a1c381a2cf..a1c381a2cf 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/raise-limits.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/raise-limits.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/series b/packages/u-boot/u-boot-mkimage-openmoko-native/series
index 4fc7d1342f..4fc7d1342f 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/series
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/series
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/splashimage-command.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/splashimage-command.patch
index 8ea48cf484..8ea48cf484 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/splashimage-command.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/splashimage-command.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch
index 7c70244b38..7c70244b38 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-20061030-neo1973.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-qt2410.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-20061030-qt2410.patch
index 343598902f..343598902f 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-20061030-qt2410.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-20061030-qt2410.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920_s3c2410_irq_demux.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-arm920_s3c2410_irq_demux.patch
index b39a268c84..b39a268c84 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920_s3c2410_irq_demux.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-arm920_s3c2410_irq_demux.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920t-gd_in_irq.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-arm920t-gd_in_irq.patch
index b3d7bc1166..b3d7bc1166 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-arm920t-gd_in_irq.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-arm920t-gd_in_irq.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-bbt-quiet.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-bbt-quiet.patch
index 9b1febe956..9b1febe956 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-bbt-quiet.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-bbt-quiet.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-cmd_s3c2410.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-cmd_s3c2410.patch
index 993ef4f6f2..993ef4f6f2 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-cmd_s3c2410.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-cmd_s3c2410.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-cramfs_but_no_jffs2.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-cramfs_but_no_jffs2.patch
index 349b83697e..349b83697e 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-cramfs_but_no_jffs2.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-cramfs_but_no_jffs2.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-dfu.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-dfu.patch
index 1122f4894f..1122f4894f 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-dfu.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-dfu.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-gta02.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-gta02.patch
index ca54ebeff7..ca54ebeff7 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-gta02.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-gta02.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-hxd8.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-hxd8.patch
index f85fdea836..f85fdea836 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-hxd8.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-hxd8.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-license.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-license.patch
index 227a97e71a..227a97e71a 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-license.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-license.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-machtypes.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-machtypes.patch
index db3cee6e99..db3cee6e99 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-machtypes.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-machtypes.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-mokoversion.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-mokoversion.patch
index a44434155e..a44434155e 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-mokoversion.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-mokoversion.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-nand-markbad-reallybad.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-nand-markbad-reallybad.patch
index d630889e3c..d630889e3c 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-nand-markbad-reallybad.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-nand-markbad-reallybad.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-defaultenv.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-neo1973-defaultenv.patch
index 7e3aa4f480..7e3aa4f480 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-defaultenv.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-neo1973-defaultenv.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-resume.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-neo1973-resume.patch
index 19d912620d..19d912620d 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-neo1973-resume.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-neo1973-resume.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-misccr-definitions.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-misccr-definitions.patch
index 6efe24651a..6efe24651a 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-misccr-definitions.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-misccr-definitions.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-mmc.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-mmc.patch
index b775beaa07..b775beaa07 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-mmc.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-mmc.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-nand.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-nand.patch
index dc363bbbab..dc363bbbab 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-nand.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-nand.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-norelocate_irqvec_cpy.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-norelocate_irqvec_cpy.patch
index 0d5a49771d..0d5a49771d 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-norelocate_irqvec_cpy.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-norelocate_irqvec_cpy.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-warnings-fix.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-warnings-fix.patch
index 8cc442a865..8cc442a865 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410-warnings-fix.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410-warnings-fix.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_fb.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410_fb.patch
index b50853554b..b50853554b 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_fb.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410_fb.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_udc.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410_udc.patch
index 16bee3e26a..16bee3e26a 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2410_udc.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2410_udc.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2440.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2440.patch
index da0fb8cf2d..da0fb8cf2d 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2440.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2440.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2443.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2443.patch
index 62ae5592ab..62ae5592ab 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-s3c2443.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-s3c2443.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2440.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-smdk2440.patch
index 09392ad2cf..09392ad2cf 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2440.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-smdk2440.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2443.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-smdk2443.patch
index 5757cc078b..5757cc078b 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-smdk2443.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-smdk2443.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-strtoul.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-strtoul.patch
index a88e94b006..a88e94b006 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-strtoul.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-strtoul.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-usbtty-acm.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-usbtty-acm.patch
index 722a227aa6..722a227aa6 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/uboot-usbtty-acm.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/uboot-usbtty-acm.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/unbusy-i2c.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/unbusy-i2c.patch
index 680b301620..680b301620 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/unbusy-i2c.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/unbusy-i2c.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/usbdcore-multiple_configs.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/usbdcore-multiple_configs.patch
index 339289699a..339289699a 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/usbdcore-multiple_configs.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/usbdcore-multiple_configs.patch
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native/wakeup-reason-nand-only.patch b/packages/u-boot/u-boot-mkimage-openmoko-native/wakeup-reason-nand-only.patch
index 132a9f8da5..132a9f8da5 100644
--- a/packages/uboot/u-boot-mkimage-openmoko-native/wakeup-reason-nand-only.patch
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native/wakeup-reason-nand-only.patch
diff --git a/packages/u-boot/u-boot-mkimage-openmoko-native_oe.bb b/packages/u-boot/u-boot-mkimage-openmoko-native_oe.bb
new file mode 100644
index 0000000000..08c0062fab
--- /dev/null
+++ b/packages/u-boot/u-boot-mkimage-openmoko-native_oe.bb
@@ -0,0 +1,86 @@
+require u-boot-openmoko_svn.bb
+
+inherit native
+
+PV = "1.2.0+git9912121f7ed804ea58fd62f3f230b5dcfc357d88svn2238"
+PR = "r1"
+
+SRC_URI = "git://www.denx.de/git/u-boot.git/;protocol=git;tag=9912121f7ed804ea58fd62f3f230b5dcfc357d88 \
+file://uboot-machtypes.patch;patch=1 \
+file://ext2load_hex.patch;patch=1 \
+file://uboot-s3c2410-warnings-fix.patch;patch=1 \
+file://uboot-strtoul.patch;patch=1 \
+file://uboot-cramfs_but_no_jffs2.patch;patch=1 \
+file://nand-read_write_oob.patch;patch=1 \
+file://uboot-arm920t-gd_in_irq.patch;patch=1 \
+file://uboot-arm920_s3c2410_irq_demux.patch;patch=1 \
+file://uboot-s3c2410-nand.patch;patch=1 \
+file://uboot-cmd_s3c2410.patch;patch=1 \
+file://uboot-s3c2410-mmc.patch;patch=1 \
+file://env_nand_oob.patch;patch=1 \
+file://dynenv-harden.patch;patch=1 \
+file://uboot-s3c2410_fb.patch;patch=1 \
+file://uboot-20061030-qt2410.patch;patch=1 \
+file://uboot-20061030-neo1973.patch;patch=1 \
+file://uboot-s3c2410-misccr-definitions.patch;patch=1 \
+file://boot-from-ram-reloc.patch;patch=1 \
+file://boot-from-ram-and-nand.patch;patch=1 \
+file://wakeup-reason-nand-only.patch;patch=1 \
+file://uboot-neo1973-resume.patch;patch=1 \
+file://nand-dynamic_partitions.patch;patch=1 \
+file://uboot-s3c2410-norelocate_irqvec_cpy.patch;patch=1 \
+file://uboot-usbtty-acm.patch;patch=1 \
+file://uboot-s3c2410_udc.patch;patch=1 \
+file://bbt-create-optional.patch;patch=1 \
+file://nand-createbbt.patch;patch=1 \
+file://dontask.patch;patch=1 \
+file://nand-badisbad.patch;patch=1 \
+file://uboot-bbt-quiet.patch;patch=1 \
+file://raise-limits.patch;patch=1 \
+file://splashimage-command.patch;patch=1 \
+file://cmd-unzip.patch;patch=1 \
+file://enable-splash-bmp.patch;patch=1 \
+file://preboot-override.patch;patch=1 \
+file://lowlevel_foo.patch;patch=1 \
+file://default-env.patch;patch=1 \
+file://console-ansi.patch;patch=1 \
+file://boot-menu.patch;patch=1 \
+file://uboot-dfu.patch;patch=1 \
+file://uboot-neo1973-defaultenv.patch;patch=1 \
+file://uboot-nand-markbad-reallybad.patch;patch=1 \
+file://usbdcore-multiple_configs.patch;patch=1 \
+file://neo1973-chargefast.patch;patch=1 \
+file://uboot-s3c2440.patch;patch=1 \
+file://uboot-smdk2440.patch;patch=1 \
+file://uboot-hxd8.patch;patch=1 \
+file://uboot-license.patch;patch=1 \
+file://uboot-gta02.patch;patch=1 \
+file://uboot-s3c2443.patch;patch=1 \
+file://uboot-smdk2443.patch;patch=1 \
+file://unbusy-i2c.patch;patch=1 \
+file://makefile-no-dirafter.patch;patch=1 \
+"
+
+PROVIDES = ""
+TARGET_LDFLAGS = ""
+
+do_quilt() {
+:
+}
+
+do_compile () {
+ chmod +x board/neo1973/gta01/split_by_variant.sh
+ oe_runmake gta01bv3_config
+ oe_runmake clean
+ oe_runmake tools
+}
+
+do_stage () {
+ install -m 0755 tools/mkimage ${STAGING_BINDIR}/uboot-mkimage
+ ln -sf ${STAGING_BINDIR}/uboot-mkimage ${STAGING_BINDIR}/mkimage
+}
+
+do_deploy () {
+:
+}
+
diff --git a/packages/u-boot/u-boot-omap2430sdp-1.1.4/.mtn2git_empty b/packages/u-boot/u-boot-omap2430sdp-1.1.4/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/u-boot/u-boot-omap2430sdp-1.1.4/.mtn2git_empty
diff --git a/packages/uboot/u-boot-omap2430sdp-1.1.4/u-boot-makefile-3.81.patch b/packages/u-boot/u-boot-omap2430sdp-1.1.4/u-boot-makefile-3.81.patch
index f45a1d3aa3..f45a1d3aa3 100644
--- a/packages/uboot/u-boot-omap2430sdp-1.1.4/u-boot-makefile-3.81.patch
+++ b/packages/u-boot/u-boot-omap2430sdp-1.1.4/u-boot-makefile-3.81.patch
diff --git a/packages/uboot/u-boot-omap2430sdp_1.1.4.bb b/packages/u-boot/u-boot-omap2430sdp_1.1.4.bb
index 4dcc989107..4dcc989107 100644
--- a/packages/uboot/u-boot-omap2430sdp_1.1.4.bb
+++ b/packages/u-boot/u-boot-omap2430sdp_1.1.4.bb
diff --git a/packages/u-boot/u-boot-openmoko-devel_git.bb b/packages/u-boot/u-boot-openmoko-devel_git.bb
new file mode 100644
index 0000000000..c2e21658ac
--- /dev/null
+++ b/packages/u-boot/u-boot-openmoko-devel_git.bb
@@ -0,0 +1,70 @@
+DESCRIPTION = "U-boot bootloader w/ Neo1973 (GTA01) and Neo FreeRunner (GTA02) support"
+AUTHOR = "Harald Welte <laforge@openmoko.org>"
+LICENSE = "GPL"
+SECTION = "bootloader"
+PRIORITY = "optional"
+PROVIDES = "virtual/bootloader"
+LOCALVERSION = "+git${SRCREV}"
+PV = "1.3.1${LOCALVERSION}"
+PR = "r0"
+
+UBOOT_MACHINES = "gta01bv2 gta01bv3 gta01bv4 gta02v1 gta02v2 gta02v3 gta02v4"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRCREV_FORMAT = "git.openmoko.org"
+
+SRC_URI = "git://git.openmoko.org/git/u-boot.git;protocol=git;branch=andy \
+ file://uboot-20070311-tools_makefile_ln_sf.patch;patch=1 \
+ file://makefile-no-dirafter.patch;patch=1 \
+"
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
+TARGET_LDFLAGS = ""
+
+do_svnrev() {
+ mv -f tools/setlocalversion tools/setlocalversion.old
+ echo "echo ${LOCALVERSION}" >>tools/setlocalversion
+}
+
+do_compile () {
+ chmod +x board/neo1973/gta*/split_by_variant.sh
+ for mach in ${UBOOT_MACHINES}
+ do
+ oe_runmake ${mach}_config
+ oe_runmake clean
+ find board -name lowlevel_foo.bin -exec rm '{}' \;
+ oe_runmake all
+ oe_runmake u-boot.udfu
+ if [ -f u-boot.udfu ]; then
+ mv u-boot.udfu u-boot_${mach}.bin
+ else
+ mv u-boot.bin u-boot_${mach}.bin
+ fi
+ if [ -f board/${mach}/lowlevel_foo.bin ]; then
+ mv board/${mach}/lowlevel_foo.bin lowlevel_foo_${mach}.bin
+ else
+ find board -name lowlevel_foo.bin -exec mv '{}' lowlevel_foo_${mach}.bin \;
+ fi
+ done
+}
+
+do_deploy () {
+ install -d ${DEPLOY_DIR_IMAGE}
+ for mach in ${UBOOT_MACHINES}
+ do
+ install -m 0644 ${S}/u-boot_${mach}.bin ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin
+ ln -sf ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/uboot-${mach}-latest.bin
+ if [ -f ${S}/lowlevel_foo_${mach}.bin ]; then
+ install -m 0644 ${S}/lowlevel_foo_${mach}.bin ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin
+ ln -sf ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/lowlevel-foo-${mach}-latest.bin
+ fi
+ done
+ install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/uboot-mkimage
+}
+
+do_deploy[dirs] = "${S}"
+addtask deploy before do_package after do_install
+addtask quilt before do_patch after do_unpack
+addtask svnrev before do_patch after do_quilt
diff --git a/packages/u-boot/u-boot-openmoko_1.2.0+git+svn.bb b/packages/u-boot/u-boot-openmoko_1.2.0+git+svn.bb
new file mode 100644
index 0000000000..8c7ff5b94a
--- /dev/null
+++ b/packages/u-boot/u-boot-openmoko_1.2.0+git+svn.bb
@@ -0,0 +1,86 @@
+DESCRIPTION = "U-boot bootloader w/ Neo1973 (GTA01) support"
+AUTHOR = "Harald Welte <laforge@openmoko.org>, OpenMoko <openmoko-kernel@lists.openmoko.org>"
+LICENSE = "GPL"
+SECTION = "bootloader"
+PRIORITY = "optional"
+
+UBOOT_UPSTREAM_REV = "f34024d4a328e6edd906456da98d2c537155c4f7"
+UBOOT_OPENMOKO_REV = "2943"
+UBOOT_MACHINES = "gta01bv2 gta01bv3 gta01bv4"
+
+LOCALVERSION = "+git${UBOOT_UPSTREAM_REV}+svn${UBOOT_OPENMOKO_REV}"
+PV = "1.2.0${LOCALVERSION}"
+PR = "r2"
+
+PROVIDES = "virtual/bootloader"
+S = "${WORKDIR}/git"
+
+SRC_URI = "\
+ git://www.denx.de/git/u-boot.git;protocol=git;tag=${UBOOT_UPSTREAM_REV} \
+ svn://svn.openmoko.org/trunk/src/target/u-boot;module=patches;rev=${UBOOT_OPENMOKO_REV};proto=http \
+ file://uboot-eabi-fix-HACK.patch \
+ file://uboot-20070311-tools_makefile_ln_sf.patch;patch=1 \
+ file://makefile-no-dirafter.patch;patch=1 \
+"
+
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
+TARGET_LDFLAGS = ""
+
+do_quilt() {
+ mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
+ rm -Rf patches .pc
+}
+
+do_svnrev() {
+ mv -f tools/setlocalversion tools/setlocalversion.old
+ echo "echo ${LOCALVERSION}" >>tools/setlocalversion
+}
+
+do_configure_prepend() {
+ find . -name "*.mk" -exec sed -i 's,-mabi=apcs-gnu,,' {} \;
+ find . -name "Makefile" -exec sed -i 's,-mabi=apcs-gnu,,' {} \;
+ cat ${WORKDIR}/uboot-eabi-fix-HACK.patch |patch -p1
+}
+
+do_compile () {
+ chmod +x board/neo1973/gta*/split_by_variant.sh
+ for mach in ${UBOOT_MACHINES}
+ do
+ oe_runmake ${mach}_config
+ oe_runmake clean
+ find board -name lowlevel_foo.bin -exec rm '{}' \;
+ oe_runmake all
+ oe_runmake u-boot.udfu
+ if [ -f u-boot.udfu ]; then
+ mv u-boot.udfu u-boot_${mach}.bin
+ else
+ mv u-boot.bin u-boot_${mach}.bin
+ fi
+ if [ -f board/${mach}/lowlevel_foo.bin ]; then
+ mv board/${mach}/lowlevel_foo.bin \
+ lowlevel_foo_${mach}.bin
+ else
+ find board -name lowlevel_foo.bin \
+ -exec mv '{}' lowlevel_foo_${mach}.bin \;
+ fi
+ done
+}
+
+do_deploy () {
+ install -d ${DEPLOY_DIR_IMAGE}
+ for mach in ${UBOOT_MACHINES}
+ do
+ install -m 0644 ${S}/u-boot_${mach}.bin ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin
+ ln -sf ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/uboot-${mach}-latest.bin
+ if [ -f ${S}/lowlevel_foo_${mach}.bin ]; then
+ install -m 0644 ${S}/lowlevel_foo_${mach}.bin ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin
+ ln -sf ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/lowlevel-foo-${mach}-latest.bin
+ fi
+ done
+ install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/uboot-mkimage
+}
+
+do_deploy[dirs] = "${S}"
+addtask deploy before do_package after do_install
+addtask quilt before do_patch after do_unpack
+addtask svnrev before do_patch after do_quilt
diff --git a/packages/u-boot/u-boot-openmoko_1.3.1+git+svn.bb b/packages/u-boot/u-boot-openmoko_1.3.1+git+svn.bb
new file mode 100644
index 0000000000..7a9800f94a
--- /dev/null
+++ b/packages/u-boot/u-boot-openmoko_1.3.1+git+svn.bb
@@ -0,0 +1,85 @@
+DESCRIPTION = "U-boot bootloader w/ Neo1973 (GTA01) and Neo FreeRunner (GTA02) support"
+AUTHOR = "Harald Welte <laforge@openmoko.org>, OpenMoko <openmoko-kernel@lists.openmoko.org>"
+LICENSE = "GPL"
+SECTION = "bootloader"
+PRIORITY = "optional"
+
+UBOOT_UPSTREAM_REV = "0ec595243dc99edcd248bbcfbfd5a1dc860bde89"
+UBOOT_OPENMOKO_REV = "3817"
+UBOOT_MACHINES = "gta01bv2 gta01bv3 gta01bv4 gta02v2 gta02v3 gta02v4"
+LOCALVERSION = "+git${UBOOT_UPSTREAM_REV}+svn${UBOOT_OPENMOKO_REV}"
+PV = "1.3.1${LOCALVERSION}"
+PR = "r1"
+
+PROVIDES = "virtual/bootloader"
+S = "${WORKDIR}/git"
+
+SRC_URI = "\
+ git://www.denx.de/git/u-boot.git;protocol=git;tag=${UBOOT_UPSTREAM_REV} \
+ svn://svn.openmoko.org/trunk/src/target/u-boot;module=patches;rev=${UBOOT_OPENMOKO_REV};proto=http \
+ file://uboot-20070311-tools_makefile_ln_sf.patch;patch=1 \
+ file://makefile-no-dirafter.patch;patch=1 \
+ file://fix-data-abort-from-sd-ombug799.patch;patch=1 \
+"
+
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
+TARGET_LDFLAGS = ""
+
+do_quilt() {
+ mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
+ rm -Rf patches .pc
+}
+
+do_svnrev() {
+ mv -f tools/setlocalversion tools/setlocalversion.old
+ echo "echo ${LOCALVERSION}" >>tools/setlocalversion
+}
+
+do_configure_prepend() {
+ find . -name "*.mk" -exec sed -i 's,-mabi=apcs-gnu,,' {} \;
+ find . -name "Makefile" -exec sed -i 's,-mabi=apcs-gnu,,' {} \;
+ cat ${WORKDIR}/uboot-eabi-fix-HACK.patch |patch -p1
+}
+
+do_compile () {
+ chmod +x board/neo1973/gta*/split_by_variant.sh
+ for mach in ${UBOOT_MACHINES}
+ do
+ oe_runmake ${mach}_config
+ oe_runmake clean
+ find board -name lowlevel_foo.bin -exec rm '{}' \;
+ oe_runmake all
+ oe_runmake u-boot.udfu
+ if [ -f u-boot.udfu ]; then
+ mv u-boot.udfu u-boot_${mach}.bin
+ else
+ mv u-boot.bin u-boot_${mach}.bin
+ fi
+ if [ -f board/${mach}/lowlevel_foo.bin ]; then
+ mv board/${mach}/lowlevel_foo.bin \
+ lowlevel_foo_${mach}.bin
+ else
+ find board -name lowlevel_foo.bin \
+ -exec mv '{}' lowlevel_foo_${mach}.bin \;
+ fi
+ done
+}
+
+do_deploy () {
+ install -d ${DEPLOY_DIR_IMAGE}
+ for mach in ${UBOOT_MACHINES}
+ do
+ install -m 0644 ${S}/u-boot_${mach}.bin ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin
+ ln -sf ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/uboot-${mach}-latest.bin
+ if [ -f ${S}/lowlevel_foo_${mach}.bin ]; then
+ install -m 0644 ${S}/lowlevel_foo_${mach}.bin ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin
+ ln -sf ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/lowlevel-foo-${mach}-latest.bin
+ fi
+ done
+ install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/uboot-mkimage
+}
+
+do_deploy[dirs] = "${S}"
+addtask deploy before do_package after do_install
+addtask quilt before do_patch after do_unpack
+addtask svnrev before do_patch after do_quilt
diff --git a/packages/u-boot/u-boot-openmoko_svn.bb b/packages/u-boot/u-boot-openmoko_svn.bb
new file mode 100644
index 0000000000..3ec97f2a77
--- /dev/null
+++ b/packages/u-boot/u-boot-openmoko_svn.bb
@@ -0,0 +1,79 @@
+DESCRIPTION = "U-boot bootloader w/ Neo1973 (GTA01) and Neo FreeRunner (GTA02) support"
+AUTHOR = "Harald Welte <laforge@openmoko.org>"
+LICENSE = "GPL"
+SECTION = "bootloader"
+PRIORITY = "optional"
+PROVIDES = "virtual/bootloader"
+LOCALVERSION = "+git${SRCDATE}+svnr${SRCREV}"
+PV = "1.3.1${LOCALVERSION}"
+PR = "r0"
+
+SRCREV_FORMAT = "patches"
+
+UBOOT_MACHINES = "gta01bv2 gta01bv3 gta01bv4 gta02v1 gta02v2 gta02v3 gta02v4"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "\
+ git://www.denx.de/git/u-boot.git/;protocol=git;name=upstream;tag=3afac79ec27b91df185f090b31dad9620779f440 \
+ svn://svn.openmoko.org/trunk/src/target/u-boot;module=patches;proto=http;name=patches \
+ file://uboot-eabi-fix-HACK.patch;patch=1;maxrev=3773 \
+ file://uboot-20070311-tools_makefile_ln_sf.patch;patch=1 \
+ file://makefile-no-dirafter.patch;patch=1 \
+ file://boot-menu-gfx-fix-openmoko-bug-1140.patch;patch=1;maxrev=3775 \
+"
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
+TARGET_LDFLAGS = ""
+
+do_quilt() {
+ mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
+ rm -Rf patches .pc
+}
+
+do_svnrev() {
+ mv -f tools/setlocalversion tools/setlocalversion.old
+ echo "echo ${LOCALVERSION}" >>tools/setlocalversion
+}
+
+do_compile () {
+ chmod +x board/neo1973/gta*/split_by_variant.sh
+ for mach in ${UBOOT_MACHINES}
+ do
+ oe_runmake ${mach}_config
+ oe_runmake clean
+ find board -name lowlevel_foo.bin -exec rm '{}' \;
+ oe_runmake all
+ oe_runmake u-boot.udfu
+ if [ -f u-boot.udfu ]; then
+ mv u-boot.udfu u-boot_${mach}.bin
+ else
+ mv u-boot.bin u-boot_${mach}.bin
+ fi
+ if [ -f board/${mach}/lowlevel_foo.bin ]; then
+ mv board/${mach}/lowlevel_foo.bin lowlevel_foo_${mach}.bin
+ else
+ find board -name lowlevel_foo.bin -exec mv '{}' lowlevel_foo_${mach}.bin \;
+ fi
+ done
+}
+
+do_deploy () {
+ install -d ${DEPLOY_DIR_IMAGE}
+ for mach in ${UBOOT_MACHINES}
+ do
+ install -m 0644 ${S}/u-boot_${mach}.bin ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin
+ ln -sf ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/uboot-${mach}-latest.bin
+ if [ -f ${S}/lowlevel_foo_${mach}.bin ]; then
+ install -m 0644 ${S}/lowlevel_foo_${mach}.bin ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin
+ ln -sf ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/lowlevel-foo-${mach}-latest.bin
+ fi
+ done
+ install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/uboot-mkimage
+}
+
+do_deploy[dirs] = "${S}"
+addtask deploy before do_package after do_install
+addtask quilt before do_patch after do_unpack
+addtask svnrev before do_patch after do_quilt
diff --git a/packages/u-boot/u-boot-utils-native_1.2.0.bb b/packages/u-boot/u-boot-utils-native_1.2.0.bb
new file mode 100644
index 0000000000..b04b366ffe
--- /dev/null
+++ b/packages/u-boot/u-boot-utils-native_1.2.0.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "U-boot bootloader mkimage utility"
+SECTION = "bootloaders"
+PRIORITY = "optional"
+LICENSE = "GPL"
+ALLOW_EMPTY = "1"
+PR = "r1"
+
+SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2"
+
+S = "${WORKDIR}/u-boot-${PV}"
+
+inherit native
+
+do_configure() {
+ :
+}
+
+do_compile () {
+ oe_runmake Sandpoint8240_config
+ oe_runmake tools
+}
+
+# install mkimage for the kernel makefile
+do_stage() {
+ install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/
+}
+
diff --git a/packages/u-boot/u-boot-utils_1.2.0.bb b/packages/u-boot/u-boot-utils_1.2.0.bb
new file mode 100644
index 0000000000..1734b41a0e
--- /dev/null
+++ b/packages/u-boot/u-boot-utils_1.2.0.bb
@@ -0,0 +1,38 @@
+DESCRIPTION = "U-boot bootloader OS env. access tools"
+SECTION = "bootloaders"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "mtd-utils"
+PR = "r7"
+
+SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \
+ file://fw_env.c.patch;patch=1 \
+ file://tools-Makefile.patch;patch=1 \
+ file://env-Makefile.patch;patch=1 \
+ file://fw_env.config"
+
+S = "${WORKDIR}/u-boot-${PV}"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/u-boot-${PV}"
+
+do_configure() {
+ :
+}
+
+do_compile () {
+ oe_runmake Sandpoint8240_config
+ oe_runmake tools
+}
+
+do_install () {
+ :
+}
+
+do_install_openprotium () {
+ install -d ${D}/sbin
+ install -d ${D}${sysconfdir}
+ install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config
+ install -m 755 ${S}/tools/env/fw_printenv ${D}/sbin/fw_printenv
+ install -m 755 ${S}/tools/env/fw_printenv ${D}/sbin/fw_setenv
+}
+
diff --git a/packages/uboot/u-boot.inc b/packages/u-boot/u-boot.inc
index 9f7356d5d7..9f7356d5d7 100644
--- a/packages/uboot/u-boot.inc
+++ b/packages/u-boot/u-boot.inc
diff --git a/packages/uboot/u-boot_1.1.2.bb b/packages/u-boot/u-boot_1.1.2.bb
index 82b169ccc4..82b169ccc4 100644
--- a/packages/uboot/u-boot_1.1.2.bb
+++ b/packages/u-boot/u-boot_1.1.2.bb
diff --git a/packages/uboot/u-boot_1.1.4.bb b/packages/u-boot/u-boot_1.1.4.bb
index 7a92b57c34..7a92b57c34 100644
--- a/packages/uboot/u-boot_1.1.4.bb
+++ b/packages/u-boot/u-boot_1.1.4.bb
diff --git a/packages/uboot/u-boot_1.1.6.bb b/packages/u-boot/u-boot_1.1.6.bb
index e003c69d7b..e003c69d7b 100644
--- a/packages/uboot/u-boot_1.1.6.bb
+++ b/packages/u-boot/u-boot_1.1.6.bb
diff --git a/packages/uboot/u-boot_1.2.0.bb b/packages/u-boot/u-boot_1.2.0.bb
index f1075bb00b..f1075bb00b 100644
--- a/packages/uboot/u-boot_1.2.0.bb
+++ b/packages/u-boot/u-boot_1.2.0.bb
diff --git a/packages/uboot/u-boot_1.3.0.bb b/packages/u-boot/u-boot_1.3.0.bb
index 2886ddecc8..2886ddecc8 100644
--- a/packages/uboot/u-boot_1.3.0.bb
+++ b/packages/u-boot/u-boot_1.3.0.bb
diff --git a/packages/u-boot/u-boot_1.3.1.bb b/packages/u-boot/u-boot_1.3.1.bb
new file mode 100644
index 0000000000..60074d3ed9
--- /dev/null
+++ b/packages/u-boot/u-boot_1.3.1.bb
@@ -0,0 +1,9 @@
+require u-boot.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \
+ file://mpc8313e-rdb-autoboot.patch;patch=1 \
+ file://mpc8313e-rdb-nand.patch;patch=1"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/packages/uboot/u-boot_git.bb b/packages/u-boot/u-boot_git.bb
index 60ab0ab3f6..60ab0ab3f6 100644
--- a/packages/uboot/u-boot_git.bb
+++ b/packages/u-boot/u-boot_git.bb
diff --git a/packages/uboot/files/glamo-ram-init.patch b/packages/uboot/files/glamo-ram-init.patch
deleted file mode 100644
index 4c12074347..0000000000
--- a/packages/uboot/files/glamo-ram-init.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff --git a/board/neo1973/common/lowlevel_init.S b/board/neo1973/common/lowlevel_init.S
-index 582aa0e..92a9c7b 100644
---- a/board/neo1973/common/lowlevel_init.S
-+++ b/board/neo1973/common/lowlevel_init.S
-@@ -67,11 +67,11 @@
- #define B0_PMC 0x0 /* normal */
-
- /* BANK1CON */
--#define B1_Tacs 0x0 /* 0clk */
--#define B1_Tcos 0x1 /* 1clk */
--#define B1_Tacc 0x4 /* 4clk */
--#define B1_Tcoh 0x1 /* 1clk */
--#define B1_Tah 0x0 /* 0clk */
-+#define B1_Tacs 0x3 /* 4clk */
-+#define B1_Tcos 0x3 /* 4clk */
-+#define B1_Tacc 0x7 /* 14clk */
-+#define B1_Tcoh 0x3 /* 4clk */
-+#define B1_Tah 0x3 /* 4clk */
- #define B1_Tacp 0x0
- #define B1_PMC 0x0
-
diff --git a/packages/uboot/u-boot-1.2.0/env-Makefile.patch b/packages/uboot/u-boot-1.2.0/env-Makefile.patch
deleted file mode 100644
index ad3a6b39a3..0000000000
--- a/packages/uboot/u-boot-1.2.0/env-Makefile.patch
+++ /dev/null
@@ -1,24 +0,0 @@
---- u-boot-1.1.2.orig/tools/env/Makefile 2003-06-27 14:32:48.000000000 -0700
-+++ u-boot-1.1.2/tools/env/Makefile 2006-11-08 12:33:43.000000000 -0800
-@@ -27,7 +27,7 @@
- all: fw_printenv
-
- fw_printenv: $(SOURCES) $(HEADERS)
-- $(CROSS_COMPILE)gcc -Wall -DUSE_HOSTCC $(SOURCES) -o fw_printenv
-+ $(CROSS_COMPILE)gcc $(TARGET_CFLAGS) -idirafter ../../include -Wall -DUSE_HOSTCC $(SOURCES) -o fw_printenv
-
- clean:
- rm -f fw_printenv crc32.c
-@@ -37,9 +37,9 @@
-
- #########################################################################
-
--.depend: Makefile $(SOURCES)
-- $(CC) -M $(HOST_CFLAGS) $(CPPFLAGS) -DUSE_HOSTCC $(SOURCES) > $@
-+#.depend: Makefile $(SOURCES)
-+# $(CC) -M $(HOST_CFLAGS) $(TARGET_CPPFLAGS) -DUSE_HOSTCC $(SOURCES) > $@
-
--sinclude .depend
-+#sinclude .depend
-
- #########################################################################
diff --git a/packages/uboot/u-boot-mkimage-openmoko-native_oe.bb b/packages/uboot/u-boot-mkimage-openmoko-native_oe.bb
deleted file mode 100644
index d0d47d84d8..0000000000
--- a/packages/uboot/u-boot-mkimage-openmoko-native_oe.bb
+++ /dev/null
@@ -1,83 +0,0 @@
-require uboot-openmoko_svn.bb
-
-PV = "1.2.0+git9912121f7ed804ea58fd62f3f230b5dcfc357d88svn2238"
-
-SRC_URI = "git://www.denx.de/git/u-boot.git/;protocol=git;tag=9912121f7ed804ea58fd62f3f230b5dcfc357d88 \
-file://uboot-machtypes.patch;patch=1 \
-file://ext2load_hex.patch;patch=1 \
-file://uboot-s3c2410-warnings-fix.patch;patch=1 \
-file://uboot-strtoul.patch;patch=1 \
-file://uboot-cramfs_but_no_jffs2.patch;patch=1 \
-file://nand-read_write_oob.patch;patch=1 \
-file://uboot-arm920t-gd_in_irq.patch;patch=1 \
-file://uboot-arm920_s3c2410_irq_demux.patch;patch=1 \
-file://uboot-s3c2410-nand.patch;patch=1 \
-file://uboot-cmd_s3c2410.patch;patch=1 \
-file://uboot-s3c2410-mmc.patch;patch=1 \
-file://env_nand_oob.patch;patch=1 \
-file://dynenv-harden.patch;patch=1 \
-file://uboot-s3c2410_fb.patch;patch=1 \
-file://uboot-20061030-qt2410.patch;patch=1 \
-file://uboot-20061030-neo1973.patch;patch=1 \
-file://uboot-s3c2410-misccr-definitions.patch;patch=1 \
-file://boot-from-ram-reloc.patch;patch=1 \
-file://boot-from-ram-and-nand.patch;patch=1 \
-file://wakeup-reason-nand-only.patch;patch=1 \
-file://uboot-neo1973-resume.patch;patch=1 \
-file://nand-dynamic_partitions.patch;patch=1 \
-file://uboot-s3c2410-norelocate_irqvec_cpy.patch;patch=1 \
-file://uboot-usbtty-acm.patch;patch=1 \
-file://uboot-s3c2410_udc.patch;patch=1 \
-file://bbt-create-optional.patch;patch=1 \
-file://nand-createbbt.patch;patch=1 \
-file://dontask.patch;patch=1 \
-file://nand-badisbad.patch;patch=1 \
-file://uboot-bbt-quiet.patch;patch=1 \
-file://raise-limits.patch;patch=1 \
-file://splashimage-command.patch;patch=1 \
-file://cmd-unzip.patch;patch=1 \
-file://enable-splash-bmp.patch;patch=1 \
-file://preboot-override.patch;patch=1 \
-file://lowlevel_foo.patch;patch=1 \
-file://default-env.patch;patch=1 \
-file://console-ansi.patch;patch=1 \
-file://boot-menu.patch;patch=1 \
-file://uboot-dfu.patch;patch=1 \
-file://uboot-neo1973-defaultenv.patch;patch=1 \
-file://uboot-nand-markbad-reallybad.patch;patch=1 \
-file://usbdcore-multiple_configs.patch;patch=1 \
-file://neo1973-chargefast.patch;patch=1 \
-file://uboot-s3c2440.patch;patch=1 \
-file://uboot-smdk2440.patch;patch=1 \
-file://uboot-hxd8.patch;patch=1 \
-file://uboot-license.patch;patch=1 \
-file://uboot-gta02.patch;patch=1 \
-file://uboot-s3c2443.patch;patch=1 \
-file://uboot-smdk2443.patch;patch=1 \
-file://unbusy-i2c.patch;patch=1 \
-file://makefile-no-dirafter.patch;patch=1 \
-"
-
-PROVIDES = ""
-TARGET_LDFLAGS = ""
-
-do_quilt() {
-:
-}
-
-do_compile () {
- chmod +x board/neo1973/gta01/split_by_variant.sh
- oe_runmake gta01bv3_config
- oe_runmake clean
- oe_runmake tools
-}
-
-do_deploy () {
- install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/uboot-mkimage
- ln -sf ${STAGING_BINDIR_NATIVE}/uboot-mkimage ${STAGING_BINDIR_NATIVE}/mkimage
-}
-
-do_deploy[dirs] = "${S}"
-addtask deploy before do_package after do_install
-
-
diff --git a/packages/uboot/uboot-openmoko_1.2.0+gitf34024d4a328e6edd906456da98d2c537155c4f7+svn2943.bb b/packages/uboot/uboot-openmoko_1.2.0+gitf34024d4a328e6edd906456da98d2c537155c4f7+svn2943.bb
deleted file mode 100644
index 1cee1edf37..0000000000
--- a/packages/uboot/uboot-openmoko_1.2.0+gitf34024d4a328e6edd906456da98d2c537155c4f7+svn2943.bb
+++ /dev/null
@@ -1,86 +0,0 @@
-DESCRIPTION = "U-boot bootloader w/ Neo1973 (GTA01) support"
-AUTHOR = "Harald Welte <laforge@openmoko.org>"
-LICENSE = "GPL"
-SECTION = "bootloader"
-PRIORITY = "optional"
-
-UBOOT_UPSTREAM_REV = "f34024d4a328e6edd906456da98d2c537155c4f7"
-UBOOT_OPENMOKO_REV = "2943"
-UBOOT_MACHINES = "gta01bv2 gta01bv3 gta01bv4"
-
-PV = "1.2.0+git${UBOOT_UPSTREAM_REV}+svn${UBOOT_OPENMOKO_REV}"
-PR = "r1"
-
-PROVIDES = "virtual/bootloader"
-S = "${WORKDIR}/git"
-
-SRC_URI = "\
- git://www.denx.de/git/u-boot.git;protocol=git;tag=${UBOOT_UPSTREAM_REV} \
- svn://svn.openmoko.org/trunk/src/target/u-boot;module=patches;rev=${UBOOT_OPENMOKO_REV};proto=http \
- file://uboot-eabi-fix-HACK.patch \
- file://uboot-20070311-tools_makefile_ln_sf.patch;patch=1 \
- file://makefile-no-dirafter.patch;patch=1 \
-"
-
-EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
-TARGET_LDFLAGS = ""
-
-do_quilt() {
- mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
- rm -Rf patches .pc
-}
-
-do_svnrev() {
- mv -f tools/setlocalversion tools/setlocalversion.old
- echo -n "echo " >>tools/setlocalversion
- echo ${PV} >>tools/setlocalversion
-}
-
-do_configure_prepend() {
- find . -name "*.mk" -exec sed -i 's,-mabi=apcs-gnu,,' {} \;
- find . -name "Makefile" -exec sed -i 's,-mabi=apcs-gnu,,' {} \;
- cat ${WORKDIR}/uboot-eabi-fix-HACK.patch |patch -p1
-}
-
-do_compile () {
- chmod +x board/neo1973/gta*/split_by_variant.sh
- for mach in ${UBOOT_MACHINES}
- do
- oe_runmake ${mach}_config
- oe_runmake clean
- find board -name lowlevel_foo.bin -exec rm '{}' \;
- oe_runmake all
- oe_runmake u-boot.udfu
- if [ -f u-boot.udfu ]; then
- mv u-boot.udfu u-boot_${mach}.bin
- else
- mv u-boot.bin u-boot_${mach}.bin
- fi
- if [ -f board/${mach}/lowlevel_foo.bin ]; then
- mv board/${mach}/lowlevel_foo.bin \
- lowlevel_foo_${mach}.bin
- else
- find board -name lowlevel_foo.bin \
- -exec mv '{}' lowlevel_foo_${mach}.bin \;
- fi
- done
-}
-
-do_deploy () {
- install -d ${DEPLOY_DIR_IMAGE}
- for mach in ${UBOOT_MACHINES}
- do
- install -m 0644 ${S}/u-boot_${mach}.bin ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin
- ln -sf ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/uboot-${mach}-latest.bin
- if [ -f ${S}/lowlevel_foo_${mach}.bin ]; then
- install -m 0644 ${S}/lowlevel_foo_${mach}.bin ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin
- ln -sf ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/lowlevel-foo-${mach}-latest.bin
- fi
- done
- install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/uboot-mkimage
-}
-
-do_deploy[dirs] = "${S}"
-addtask deploy before do_package after do_install
-addtask quilt before do_patch after do_unpack
-addtask svnrev before do_patch after do_quilt
diff --git a/packages/uboot/uboot-openmoko_svn.bb b/packages/uboot/uboot-openmoko_svn.bb
deleted file mode 100644
index 36ec1e130e..0000000000
--- a/packages/uboot/uboot-openmoko_svn.bb
+++ /dev/null
@@ -1,88 +0,0 @@
-DESCRIPTION = "U-boot bootloader w/ Neo1973 (GTA01) support"
-AUTHOR = "Harald Welte <laforge@openmoko.org>"
-LICENSE = "GPL"
-SECTION = "bootloader"
-PRIORITY = "optional"
-PROVIDES = "virtual/bootloader"
-LOCALVERSION = "+git${SRCDATE}+svnr${SRCREV}"
-PV = "1.3.0${LOCALVERSION}"
-PR = "r0"
-
-SRCREV_FORMAT = "patches"
-
-UBOOT_MACHINES = "gta01bv2 gta01bv3 gta01bv4 smdk2440 hxd8 qt2410 gta02v1 gta02v2 gta02v3 gta02v4"
-
-DEFAULT_PREFERENCE = "-1"
-
-SRC_URI = "\
- git://www.denx.de/git/u-boot.git/;protocol=git;name=upstream \
- svn://svn.openmoko.org/trunk/src/target/u-boot;module=patches;proto=http;name=patches \
- file://uboot-eabi-fix-HACK.patch \
- file://uboot-20070311-tools_makefile_ln_sf.patch;patch=1 \
- file://makefile-no-dirafter.patch;patch=1 \
- file://glamo-ram-init.patch;patch=1 \
-"
-S = "${WORKDIR}/git"
-
-EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
-TARGET_LDFLAGS = ""
-
-do_quilt() {
- mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
- rm -Rf patches .pc
-}
-
-do_svnrev() {
- mv -f tools/setlocalversion tools/setlocalversion.old
- echo -n "echo " >>tools/setlocalversion
- echo ${PV} >>tools/setlocalversion
-}
-
-do_configure_prepend() {
- find . -name "*.mk" -exec sed -i 's,-mabi=apcs-gnu,,' {} \;
- find . -name "Makefile" -exec sed -i 's,-mabi=apcs-gnu,,' {} \;
- cat ${WORKDIR}/uboot-eabi-fix-HACK.patch |patch -p1
-}
-
-do_compile () {
- chmod +x board/neo1973/gta*/split_by_variant.sh
- for mach in ${UBOOT_MACHINES}
- do
- oe_runmake ${mach}_config
- oe_runmake clean
- find board -name lowlevel_foo.bin -exec rm '{}' \;
- oe_runmake all
- oe_runmake u-boot.udfu
- if [ -f u-boot.udfu ]; then
- mv u-boot.udfu u-boot_${mach}.bin
- else
- mv u-boot.bin u-boot_${mach}.bin
- fi
- if [ -f board/${mach}/lowlevel_foo.bin ]; then
- mv board/${mach}/lowlevel_foo.bin \
- lowlevel_foo_${mach}.bin
- else
- find board -name lowlevel_foo.bin \
- -exec mv '{}' lowlevel_foo_${mach}.bin \;
- fi
- done
-}
-
-do_deploy () {
- install -d ${DEPLOY_DIR_IMAGE}
- for mach in ${UBOOT_MACHINES}
- do
- install -m 0644 ${S}/u-boot_${mach}.bin ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin
- ln -sf ${DEPLOY_DIR_IMAGE}/u-boot-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/uboot-${mach}-latest.bin
- if [ -f ${S}/lowlevel_foo_${mach}.bin ]; then
- install -m 0644 ${S}/lowlevel_foo_${mach}.bin ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin
- ln -sf ${DEPLOY_DIR_IMAGE}/lowlevel_foo-${mach}-${PV}-${PR}.bin ${DEPLOY_DIR_IMAGE}/lowlevel-foo-${mach}-latest.bin
- fi
- done
- install -m 0755 tools/mkimage ${STAGING_BINDIR_NATIVE}/uboot-mkimage
-}
-
-do_deploy[dirs] = "${S}"
-addtask deploy before do_package after do_install
-addtask quilt before do_patch after do_unpack
-addtask svnrev before do_patch after do_quilt
diff --git a/packages/uboot/uboot-utils_1.2.0.bb b/packages/uboot/uboot-utils_1.2.0.bb
deleted file mode 100644
index fe9b3aca26..0000000000
--- a/packages/uboot/uboot-utils_1.2.0.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-DESCRIPTION = "U-boot bootloader OS env. access tools for PPC"
-SECTION = "bootloaders"
-PRIORITY = "optional"
-LICENSE = "GPL"
-PR = "r6"
-
-SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2"
-
-S = "${WORKDIR}/u-boot-${PV}"
-
-do_configure() {
- :
-}
-
-do_compile () {
- oe_runmake Sandpoint8240_config
- oe_runmake tools
-}
-
-# install mkimage for the kernel makefile
-do_stage() {
- install -d ${STAGING_BINDIR_NATIVE}
- install -m 755 ${S}/tools/mkimage ${STAGING_BINDIR_NATIVE}/
-}
-
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch
new file mode 100644
index 0000000000..0e8c2a1c02
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/avr32-arch-2.patch
@@ -0,0 +1,2135 @@
+Subject: [PATCH] AVR32 Architecture support
+
+Add support for the AVR32 architecture in the core libc and build system.
+This also adds AVR32-ELF definitions to elf.h
+
+---
+
+ Rules.mak | 4
+ extra/Configs/Config.avr32 | 38 +++++
+ extra/Configs/Config.in | 7 +
+ include/elf.h | 51 +++++++
+ libc/sysdeps/linux/avr32/Makefile | 93 +++++++++++++
+ libc/sysdeps/linux/avr32/__longjmp.S | 17 ++
+ libc/sysdeps/linux/avr32/_mmap.c | 33 ++++
+ libc/sysdeps/linux/avr32/bits/atomicity.h | 86 ++++++++++++
+ libc/sysdeps/linux/avr32/bits/byteswap.h | 80 +++++++++++
+ libc/sysdeps/linux/avr32/bits/endian.h | 7 +
+ libc/sysdeps/linux/avr32/bits/fcntl.h | 167 +++++++++++++++++++++++++
+ libc/sysdeps/linux/avr32/bits/kernel_stat.h | 63 +++++++++
+ libc/sysdeps/linux/avr32/bits/kernel_types.h | 56 ++++++++
+ libc/sysdeps/linux/avr32/bits/machine-gmon.h | 69 ++++++++++
+ libc/sysdeps/linux/avr32/bits/mman.h | 95 ++++++++++++++
+ libc/sysdeps/linux/avr32/bits/profil-counter.h | 26 +++
+ libc/sysdeps/linux/avr32/bits/setjmp.h | 21 +++
+ libc/sysdeps/linux/avr32/bits/syscalls.h | 143 +++++++++++++++++++++
+ libc/sysdeps/linux/avr32/bits/wordsize.h | 1
+ libc/sysdeps/linux/avr32/brk.c | 23 +++
+ libc/sysdeps/linux/avr32/bsd-_setjmp.S | 12 +
+ libc/sysdeps/linux/avr32/bsd-setjmp.S | 12 +
+ libc/sysdeps/linux/avr32/clone.c | 37 +++++
+ libc/sysdeps/linux/avr32/crt1.S | 93 +++++++++++++
+ libc/sysdeps/linux/avr32/crti.S | 17 ++
+ libc/sysdeps/linux/avr32/crtn.S | 14 ++
+ libc/sysdeps/linux/avr32/mmap.c | 31 ++++
+ libc/sysdeps/linux/avr32/setjmp.S | 43 ++++++
+ libc/sysdeps/linux/avr32/sigaction.c | 49 +++++++
+ libc/sysdeps/linux/avr32/sigrestorer.S | 11 +
+ libc/sysdeps/linux/avr32/sys/elf.h | 26 +++
+ libc/sysdeps/linux/avr32/sys/io.h | 48 +++++++
+ libc/sysdeps/linux/avr32/sys/procfs.h | 123 ++++++++++++++++++
+ libc/sysdeps/linux/avr32/sys/ucontext.h | 94 ++++++++++++++
+ libc/sysdeps/linux/avr32/sys/user.h | 46 ++++++
+ libc/sysdeps/linux/avr32/syscall.S | 81 ++++++++++++
+ libc/sysdeps/linux/avr32/vfork.S | 55 ++++++++
+ 37 files changed, 1872 insertions(+)
+
+Index: uClibc-0.9.28/extra/Configs/Config.avr32
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/extra/Configs/Config.avr32 2006-05-05 09:27:17.000000000 +0200
+@@ -0,0 +1,38 @@
++#
++# For a description of the syntax of this configuration file,
++# see extra/config/Kconfig-language.txt
++#
++
++config HAVE_ELF
++ bool
++ default y
++
++config TARGET_ARCH
++ default "avr32"
++
++config ARCH_CFLAGS
++ string
++
++config ARCH_LDFLAGS
++ string
++
++config LIBGCC_CFLAGS
++ string
++
++config ARCH_SUPPORTS_BIG_ENDIAN
++ bool
++ default y
++
++config UCLIBC_COMPLETELY_PIC
++ select FORCE_SHAREABLE_TEXT_SEGMENTS
++ bool
++ default y
++
++choice
++ prompt "Target CPU Type"
++ default CONFIG_AP7000
++
++config CONFIG_AP7000
++ bool "AP7000"
++
++endchoice
+Index: uClibc-0.9.28/extra/Configs/Config.in
+===================================================================
+--- uClibc-0.9.28.orig/extra/Configs/Config.in 2006-04-19 12:47:48.000000000 +0200
++++ uClibc-0.9.28/extra/Configs/Config.in 2006-04-19 12:48:33.000000000 +0200
+@@ -16,6 +16,9 @@ config TARGET_alpha
+ config TARGET_arm
+ bool "arm"
+
++config TARGET_avr32
++ bool "avr32"
++
+ config TARGET_bfin
+ bool "bfin"
+
+@@ -83,6 +86,10 @@ if TARGET_arm
+ source "extra/Configs/Config.arm"
+ endif
+
++if TARGET_avr32
++source "extra/Configs/Config.avr32"
++endif
++
+ if TARGET_bfin
+ source "extra/Configs/Config.bfin"
+ endif
+Index: uClibc-0.9.28/include/elf.h
+===================================================================
+--- uClibc-0.9.28.orig/include/elf.h 2006-04-19 12:47:48.000000000 +0200
++++ uClibc-0.9.28/include/elf.h 2006-05-05 09:28:38.000000000 +0200
+@@ -261,6 +261,8 @@ typedef struct
+ #define EM_NIOS32 0xfebb /* Altera Nios 32 */
+ #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */
+
++#define EM_AVR32 0x18ad
++
+ /* V850 backend magic number. Written in the absense of an ABI. */
+ #define EM_CYGNUS_V850 0x9080
+
+@@ -2687,6 +2689,55 @@ typedef Elf32_Addr Elf32_Conflict;
+ /* Keep this the last entry. */
+ #define R_V850_NUM 25
+
++/* Atmel AVR32 relocations. */
++#define R_AVR32_NONE 0
++#define R_AVR32_32 1
++#define R_AVR32_16 2
++#define R_AVR32_8 3
++#define R_AVR32_32_PCREL 4
++#define R_AVR32_16_PCREL 5
++#define R_AVR32_8_PCREL 6
++#define R_AVR32_DIFF32 7
++#define R_AVR32_DIFF16 8
++#define R_AVR32_DIFF8 9
++#define R_AVR32_GOT32 10
++#define R_AVR32_GOT16 11
++#define R_AVR32_GOT8 12
++#define R_AVR32_21S 13
++#define R_AVR32_16U 14
++#define R_AVR32_16S 15
++#define R_AVR32_8S 16
++#define R_AVR32_8S_EXT 17
++#define R_AVR32_22H_PCREL 18
++#define R_AVR32_18W_PCREL 19
++#define R_AVR32_16B_PCREL 20
++#define R_AVR32_16N_PCREL 21
++#define R_AVR32_14UW_PCREL 22
++#define R_AVR32_11H_PCREL 23
++#define R_AVR32_10UW_PCREL 24
++#define R_AVR32_9H_PCREL 25
++#define R_AVR32_9UW_PCREL 26
++#define R_AVR32_HI16 27
++#define R_AVR32_LO16 28
++#define R_AVR32_GOTPC 29
++#define R_AVR32_GOTCALL 30
++#define R_AVR32_LDA_GOT 31
++#define R_AVR32_GOT21S 32
++#define R_AVR32_GOT18SW 33
++#define R_AVR32_GOT16S 34
++#define R_AVR32_GOT7UW 35
++#define R_AVR32_32_CPENT 36
++#define R_AVR32_CPCALL 37
++#define R_AVR32_16_CP 38
++#define R_AVR32_9W_CP 39
++#define R_AVR32_RELATIVE 40
++#define R_AVR32_GLOB_DAT 41
++#define R_AVR32_JMP_SLOT 42
++#define R_AVR32_ALIGN 43
++#define R_AVR32_NUM 44
++
++/* AVR32 dynamic tags */
++#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */
+
+ #define R_H8_NONE 0
+ #define R_H8_DIR32 1
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,93 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2000-2003 Erik Andersen <andersen@uclibc.org>
++#
++# This program is free software; you can redistribute it and/or modify it under
++# the terms of the GNU Library General Public License as published by the Free
++# Software Foundation; either version 2 of the License, or (at your option) any
++# later version.
++#
++# This program is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++# details.
++#
++# You should have received a copy of the GNU Library General Public License
++# along with this program; if not, write to the Free Software Foundation, Inc.,
++# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++TOPDIR=../../../../
++include $(TOPDIR)Rules.mak
++ASFLAGS=$(CFLAGS)
++
++CRT_SRC = crt1.S
++CRT_OBJ = crt1.o
++SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ))
++CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
++
++SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \
++ bsd-_setjmp.S sigrestorer.S syscall.S
++SOBJS=$(patsubst %.S,%.o, $(SSRC))
++
++CSRC=clone.c brk.c sigaction.c mmap.c
++COBJS=$(patsubst %.c,%.o, $(CSRC))
++
++OBJS=$(SOBJS) $(COBJS)
++
++OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH)
++
++all: $(OBJ_LIST)
++
++$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS)
++ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST)
++ $(INSTALL) -d $(TOPDIR)lib/
++ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/
++
++$(CRT_OBJ): $(CRT_SRC)
++ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++$(SCRT_OBJ): $(CRT_SRC)
++ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++$(SOBJS): %.o : %.S
++ $(CC) $(ASFLAGS) -c $< -o $@
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++$(COBJS): %.o : %.c
++ $(CC) $(CFLAGS) -c $< -o $@
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
++crti.o: crti.S
++ $(CC) $(ASFLAGS) -c crti.S -o crti.o
++
++$(TOPDIR)lib/crti.o: crti.o
++ $(INSTALL) -d $(TOPDIR)lib/
++ cp crti.o $(TOPDIR)lib/
++
++crtn.o: crtn.S
++ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o
++
++$(TOPDIR)lib/crtn.o: crtn.o
++ $(INSTALL) -d $(TOPDIR)lib/
++ cp crtn.o $(TOPDIR)lib/
++else
++$(TOPDIR)lib/crti.o:
++ $(INSTALL) -d $(TOPDIR)lib/
++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o
++$(TOPDIR)lib/crtn.o:
++ $(INSTALL) -d $(TOPDIR)lib/
++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o
++endif
++
++
++headers:
++# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/
++
++clean:
++ $(RM) *.[oa] *~ core
++ $(RM) bits/sysnum.h
++ $(RM) gmon-start.S
++
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,17 @@
++/* longjmp for AVR32
++ *
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++
++ .global __longjmp
++ .type __longjmp,"function"
++ .align 1
++__longjmp:
++ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr
++ mov r12, r11 /* get the return value right */
++ mustr r8 /* restore status register (lower half) */
++ cp r12, 0 /* can't return zero */
++ frs
++ moveq r12, 1
++ mov pc,lr
++ .size __longjmp, . - __longjmp
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,33 @@
++/* Copyright (C) 2005 Atmel Norway
++
++ This program is free software; you can redistribute it and/or modify it under
++ the terms of the GNU Library General Public License as published by the Free
++ Software Foundation; either version 2 of the License, or (at your option) any
++ later version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++ details.
++
++ You should have received a copy of the GNU Library General Public License
++ along with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++ Derived in part from the Linux-8086 C library, the GNU C Library, and several
++ other sundry sources. Files within this library are copyright by their
++ respective copyright holders.
++ */
++
++#include <errno.h>
++#include <sys/mman.h>
++#include <sys/syscall.h>
++
++#define __NR_mmap2 __NR_mmap
++
++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff);
++
++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset)
++{
++ return mmap2(addr, len, prot, flags, fd, offset >> 12);
++}
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,86 @@
++/* Low-level functions for atomic operations. AVR32 version.
++ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _ATOMICITY_H
++#define _ATOMICITY_H 1
++
++#include <inttypes.h>
++
++static inline int
++__attribute__((unused))
++exchange_and_add (volatile uint32_t *mem, int val)
++{
++ int tmp, result;
++
++ __asm__ __volatile__(
++ "/* Inline exchange and add */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %3\n"
++ " add %1, %0, %4\n"
++ " stcond %2, %1\n"
++ " brne 1b"
++ : "=&r"(result), "=&r"(tmp), "=m"(*mem)
++ : "m"(*mem), "r"(val)
++ : "cc", "memory");
++
++ return result;
++}
++
++static inline void
++__attribute__((unused))
++atomic_add (volatile uin32_t *mem, int val)
++{
++ int result;
++
++ __asm__ __volatile__(
++ "/* Inline atomic add */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " add %0, %3\n"
++ " stcond %2, %0\n"
++ " brne 1b"
++ : "=&r"(result), "=m"(*mem)
++ : "m"(*mem), "r"(val)
++ : "cc", "memory");
++}
++
++static inline int
++__attribute__((unused))
++compare_and_swap(volatile long int *p, long int oldval, long int newval)
++{
++ long int result, tmp;
++
++ __asm__ __volatile__(
++ "/* Inline compare and swap */\n"
++ "1: ssrf 5\n"
++ " ld.w %1, %3\n"
++ " cp.w %1, %5\n"
++ " sreq %0\n"
++ " brne 2f\n"
++ " stcond %2, %4\n"
++ " brne 1b\n"
++ "2:"
++ : "=&r"(result), "=&r"(tmp), "=m"(*p)
++ : "m"(*p), "r"(newval), "r"(oldval)
++ : "cc", "memory");
++
++ return result;
++}
++
++#endif /* atomicity.h */
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,80 @@
++/* Macros to swap the order of bytes in integer values.
++ Copyright (C) 2005 Atmel Norway.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#if !defined _BYTESWAP_H && !defined _NETINET_IN_H
++# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
++#endif
++
++#ifndef _BITS_BYTESWAP_H
++#define _BITS_BYTESWAP_H 1
++
++/* Swap bytes in 16 bit value. */
++#if defined __GNUC__
++# define __bswap_16(x) (__extension__ __builtin_bswap_16(x))
++#else
++/* This is better than nothing. */
++static __inline unsigned short int
++__bswap_16 (unsigned short int __bsx)
++{
++ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8));
++}
++#endif
++
++/* Swap bytes in 32 bit value. */
++#if defined __GNUC__
++# define __bswap_32(x) (__extension__ __builtin_bswap_32(x))
++#else
++static __inline unsigned int
++__bswap_32 (unsigned int __bsx)
++{
++ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) |
++ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24));
++}
++#endif
++
++#if defined __GNUC__
++/* Swap bytes in 64 bit value. */
++# define __bswap_constant_64(x) \
++ ((((x) & 0xff00000000000000ull) >> 56) \
++ | (((x) & 0x00ff000000000000ull) >> 40) \
++ | (((x) & 0x0000ff0000000000ull) >> 24) \
++ | (((x) & 0x000000ff00000000ull) >> 8) \
++ | (((x) & 0x00000000ff000000ull) << 8) \
++ | (((x) & 0x0000000000ff0000ull) << 24) \
++ | (((x) & 0x000000000000ff00ull) << 40) \
++ | (((x) & 0x00000000000000ffull) << 56))
++
++# define __bswap_64(x) \
++ (__extension__ \
++ ({ \
++ union { \
++ __extension__ unsigned long long int __ll; \
++ unsigned int __l[2]; \
++ } __w, __r; \
++ if (__builtin_constant_p(x)) \
++ __r.__ll = __bswap_constant_64(x); \
++ else { \
++ __w.__ll = (x); \
++ __r.__l[0] = __bswap_32(__w.__l[1]); \
++ __r.__l[1] = __bswap_32(__w.__l[0]); \
++ } \
++ __r.__ll; \
++ }))
++#endif
++
++#endif /* _BITS_BYTESWAP_H */
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,7 @@
++/* AVR32 is big-endian */
++
++#ifndef _ENDIAN_H
++# error "Never use <bits/endian.h> directly; include <endian.h> instead."
++#endif
++
++#define __BYTE_ORDER __BIG_ENDIAN
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,167 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ *
++ * This file is part of the Linux kernel
++ */
++#ifndef _FCNTL_H
++# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
++#endif
++
++#include <sys/types.h>
++
++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
++ located on an ext2 file system */
++#define O_ACCMODE 0003
++#define O_RDONLY 00
++#define O_WRONLY 01
++#define O_RDWR 02
++#define O_CREAT 0100 /* not fcntl */
++#define O_EXCL 0200 /* not fcntl */
++#define O_NOCTTY 0400 /* not fcntl */
++#define O_TRUNC 01000 /* not fcntl */
++#define O_APPEND 02000
++#define O_NONBLOCK 04000
++#define O_NDELAY O_NONBLOCK
++#define O_SYNC 010000
++#define O_ASYNC 020000
++
++#ifdef __USE_GNU
++# define O_DIRECTORY 040000 /* must be a directory */
++# define O_NOFOLLOW 0100000 /* don't follow links */
++# define O_DIRECT 0200000 /* direct disk access */
++#endif
++
++#ifdef __USE_LARGEFILE64
++# define O_LARGEFILE 0400000
++#endif
++
++/* For now Linux has synchronisity options for data and read operations.
++ We define the symbols here but let them do the same as O_SYNC since
++ this is a superset. */
++#if defined __USE_POSIX199309 || defined __USE_UNIX98
++# define O_DSYNC O_SYNC /* Synchronize data. */
++# define O_RSYNC O_SYNC /* Synchronize read operations. */
++#endif
++
++#define F_DUPFD 0 /* dup */
++#define F_GETFD 1 /* get close_on_exec */
++#define F_SETFD 2 /* set/clear close_on_exec */
++#define F_GETFL 3 /* get file->f_flags */
++#define F_SETFL 4 /* set file->f_flags */
++
++#ifndef __USE_FILE_OFFSET64
++# define F_GETLK 5
++# define F_SETLK 6
++# define F_SETLKW 7
++#else
++# define F_GETLK F_GETLK64
++# define F_SETLK F_SETLK64
++# define F_SETLKW F_SETLKW64
++#endif
++#define F_GETLK64 12 /* using 'struct flock64' */
++#define F_SETLK64 13
++#define F_SETLKW64 14
++
++#if defined __USE_BSD || defined __USE_XOPEN2K
++# define F_SETOWN 8 /* for sockets. */
++# define F_GETOWN 9 /* for sockets. */
++#endif
++
++#ifdef __USE_GNU
++# define F_SETSIG 10 /* for sockets. */
++# define F_GETSIG 11 /* for sockets. */
++#endif
++
++#ifdef __USE_GNU
++# define F_SETLEASE 1024 /* Set a lease. */
++# define F_GETLEASE 1025 /* Enquire what lease is active. */
++# define F_NOTIFY 1026 /* Request notfications on a directory. */
++#endif
++
++/* for F_[GET|SET]FL */
++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
++
++/* for posix fcntl() and lockf() */
++#define F_RDLCK 0
++#define F_WRLCK 1
++#define F_UNLCK 2
++
++/* for old implementation of bsd flock () */
++#define F_EXLCK 4 /* or 3 */
++#define F_SHLCK 8 /* or 4 */
++
++/* for leases */
++#define F_INPROGRESS 16
++
++#ifdef __USE_BSD
++/* operations for bsd flock(), also used by the kernel implementation */
++# define LOCK_SH 1 /* shared lock */
++# define LOCK_EX 2 /* exclusive lock */
++# define LOCK_NB 4 /* or'd with one of the above to prevent
++ blocking */
++# define LOCK_UN 8 /* remove lock */
++#endif
++
++#ifdef __USE_GNU
++# define LOCK_MAND 32 /* This is a mandatory flock */
++# define LOCK_READ 64 /* ... Which allows concurrent
++ read operations */
++# define LOCK_WRITE 128 /* ... Which allows concurrent
++ write operations */
++# define LOCK_RW 192 /* ... Which allows concurrent
++ read & write ops */
++#endif
++
++#ifdef __USE_GNU
++/* Types of directory notifications that may be requested with F_NOTIFY. */
++# define DN_ACCESS 0x00000001 /* File accessed. */
++# define DN_MODIFY 0x00000002 /* File modified. */
++# define DN_CREATE 0x00000004 /* File created. */
++# define DN_DELETE 0x00000008 /* File removed. */
++# define DN_RENAME 0x00000010 /* File renamed. */
++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
++#endif
++
++struct flock {
++ short l_type;
++ short l_whence;
++#ifndef __USE_FILE_OFFSET64
++ __off_t l_start;
++ __off_t l_len;
++#else
++ __off64_t l_start;
++ __off64_t l_len;
++#endif
++ __pid_t l_pid;
++};
++
++#ifdef __USE_LARGEFILE64
++struct flock64 {
++ short l_type;
++ short l_whence;
++ __off64_t l_start;
++ __off64_t l_len;
++ __pid_t l_pid;
++};
++#endif
++
++/* Define some more compatibility macros to be backward compatible with
++ * BSD systems which did not managed to hide these kernel macros. */
++#ifdef __USE_BSD
++# define FAPPEND O_APPEND
++# define FFSYNC O_FSYNC
++# define FASYNC O_ASYNC
++# define FNONBLOCK O_NONBLOCK
++# define FNDELAY O_NDELAY
++#endif /* Use BSD. */
++
++/* Advise to `posix_fadvise'. */
++#ifdef __USE_XOPEN2K
++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
++#endif
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-05-05 09:28:32.000000000 +0200
+@@ -0,0 +1,63 @@
++#ifndef _BITS_STAT_STRUCT_H
++#define _BITS_STAT_STRUCT_H
++
++/*
++ * This file provides struct stat, taken from kernel 2.6.4
++ * (include/asm-avr32/stat.h revision 1.1).
++ */
++
++struct kernel_stat {
++ unsigned long st_dev;
++ unsigned long st_ino;
++ unsigned short st_mode;
++ unsigned short st_nlink;
++ unsigned short st_uid;
++ unsigned short st_gid;
++ unsigned long st_rdev;
++ unsigned long st_size;
++ unsigned long st_blksize;
++ unsigned long st_blocks;
++ unsigned long st_atime;
++ unsigned long st_atime_nsec;
++ unsigned long st_mtime;
++ unsigned long st_mtime_nsec;
++ unsigned long st_ctime;
++ unsigned long st_ctime_nsec;
++ unsigned long __unused4;
++ unsigned long __unused5;
++};
++
++#define STAT_HAVE_NSEC 1
++
++struct kernel_stat64 {
++ unsigned long long st_dev;
++
++ unsigned long long st_ino;
++ unsigned int st_mode;
++ unsigned int st_nlink;
++
++ unsigned long st_uid;
++ unsigned long st_gid;
++
++ unsigned long long st_rdev;
++
++ long long st_size;
++ unsigned long __pad1;
++ unsigned long st_blksize;
++
++ unsigned long long st_blocks;
++
++ unsigned long st_atime;
++ unsigned long st_atime_nsec;
++
++ unsigned long st_mtime;
++ unsigned long st_mtime_nsec;
++
++ unsigned long st_ctime;
++ unsigned long st_ctime_nsec;
++
++ unsigned long __unused1;
++ unsigned long __unused2;
++};
++
++#endif /* _BITS_STAT_STRUCT_H */
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,56 @@
++/* Note that we use the exact same include guard #define names
++ * as asm/posix_types.h. This will avoid gratuitous conflicts
++ * with the posix_types.h kernel header, and will ensure that
++ * our private content, and not the kernel header, will win.
++ * -Erik
++ */
++#ifndef __ASM_AVR32_POSIX_TYPES_H
++#define __ASM_AVR32_POSIX_TYPES_H
++
++/*
++ * This file is generally used by user-level software, so you need to
++ * be a little careful about namespace pollution etc. Also, we cannot
++ * assume GCC is being used.
++ */
++
++typedef unsigned long __kernel_dev_t;
++typedef unsigned long __kernel_ino_t;
++typedef unsigned short __kernel_mode_t;
++typedef unsigned short __kernel_nlink_t;
++typedef long __kernel_off_t;
++typedef int __kernel_pid_t;
++typedef unsigned short __kernel_ipc_pid_t;
++typedef unsigned int __kernel_uid_t;
++typedef unsigned int __kernel_gid_t;
++typedef unsigned long __kernel_size_t;
++typedef int __kernel_ssize_t;
++typedef int __kernel_ptrdiff_t;
++typedef long __kernel_time_t;
++typedef long __kernel_suseconds_t;
++typedef long __kernel_clock_t;
++typedef int __kernel_timer_t;
++typedef int __kernel_clockid_t;
++typedef int __kernel_daddr_t;
++typedef char * __kernel_caddr_t;
++typedef unsigned short __kernel_uid16_t;
++typedef unsigned short __kernel_gid16_t;
++typedef unsigned int __kernel_uid32_t;
++typedef unsigned int __kernel_gid32_t;
++
++typedef unsigned short __kernel_old_uid_t;
++typedef unsigned short __kernel_old_gid_t;
++typedef unsigned short __kernel_old_dev_t;
++
++#ifdef __GNUC__
++typedef long long __kernel_loff_t;
++#endif
++
++typedef struct {
++#if defined(__USE_ALL)
++ int val[2];
++#else
++ int __val[2];
++#endif
++} __kernel_fsid_t;
++
++#endif /* __ASM_AVR32_POSIX_TYPES_H */
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,69 @@
++/* Machine-dependent definitions for profiling support. AVR32 version.
++ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#define mcount_internal __mcount_internal
++
++#define _MCOUNT_DECL(frompc, selfpc) \
++static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc)
++
++/*
++ * This mcount implementation expects to get called after the prologue
++ * has been run. It also expects that r7 contains a valid frame
++ * pointer.
++ *
++ * When profiling, the compiler should generate something like this at
++ * each function entry:
++ *
++ * pushm r0-r7,lr // lr mandatory, others optional
++ * mov r7, sp
++ * // rest of prologue goes here
++ * mcall pc[.LC1 - .]
++ * // rest of function goes here
++ * .LC1:
++ * .long mcount
++ *
++ * or for PIC:
++ *
++ * pushm r0-r7,lr
++ * mov r7, sp
++ * // rest of prologue goes here
++ * lddpc r0, .LC1
++ * .L1: rsub r0, pc
++ * mcall r0[mcount@GOT]
++ * // rest of function goes here
++ * .LC1:
++ * .long .L1 - _GLOBAL_OFFSET_TABLE_
++ *
++ * This way, when mcount() is called, r7 points to the calling
++ * function's return address. It is guaranteed that calling mcount
++ * will clobber no registers except LR, which is unavoidable.
++ */
++#define MCOUNT asm( \
++ " .align 4\n" \
++ " .global _mcount\n" \
++ " .type _mcount,@function\n" \
++ "_mcount:\n" \
++ " pushm r8-r12,lr\n" \
++ " mov r11, lr\n" \
++ " ld.w r12, r7[0]\n" \
++ " rcall __mcount_internal\n" \
++ " popm r8-r12,pc\n" \
++ " .size _mcount, . - _mcount\n" \
++ " .weak mcount\n" \
++ " mcount = _mcount");
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,95 @@
++/* Definitions for POSIX memory map interface. Linux/AVR32 version.
++ Copyright (C) 1997, 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_MMAN_H
++# error "Never include this file directly. Use <sys/mman.h> instead"
++#endif
++
++/* The following definitions basically come from the kernel headers.
++ But the kernel header is not namespace clean. */
++
++
++/* Protections are chosen from these bits, OR'd together. The
++ implementation does not necessarily support PROT_EXEC or PROT_WRITE
++ without PROT_READ. The only guarantees are that no writing will be
++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
++
++#define PROT_READ 0x1 /* Page can be read. */
++#define PROT_WRITE 0x2 /* Page can be written. */
++#define PROT_EXEC 0x4 /* Page can be executed. */
++#define PROT_NONE 0x0 /* Page can not be accessed. */
++
++/* Sharing types (must choose one and only one of these). */
++#define MAP_SHARED 0x01 /* Share changes. */
++#define MAP_PRIVATE 0x02 /* Changes are private. */
++#ifdef __USE_MISC
++# define MAP_TYPE 0x0f /* Mask for type of mapping. */
++#endif
++
++/* Other flags. */
++#define MAP_FIXED 0x10 /* Interpret addr exactly. */
++#ifdef __USE_MISC
++# define MAP_FILE 0
++# define MAP_ANONYMOUS 0x20 /* Don't use a file. */
++# define MAP_ANON MAP_ANONYMOUS
++#endif
++
++/* These are Linux-specific. */
++#ifdef __USE_MISC
++# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
++# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
++# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
++# define MAP_LOCKED 0x2000 /* Lock the mapping. */
++# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
++# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */
++# define MAP_NONBLOCK 0x10000 /* do not block on IO */
++#endif
++
++/* Flags to `msync'. */
++#define MS_ASYNC 1 /* Sync memory asynchronously. */
++#define MS_SYNC 4 /* Synchronous memory sync. */
++#define MS_INVALIDATE 2 /* Invalidate the caches. */
++
++/* Flags for `mlockall'. */
++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */
++#define MCL_FUTURE 2 /* Lock all additions to address
++ space. */
++
++/* Flags for `mremap'. */
++#ifdef __USE_GNU
++# define MREMAP_MAYMOVE 1
++#endif
++
++/* Advise to `madvise'. */
++#ifdef __USE_BSD
++# define MADV_NORMAL 0 /* No further special treatment. */
++# define MADV_RANDOM 1 /* Expect random page references. */
++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */
++# define MADV_WILLNEED 3 /* Will need these pages. */
++# define MADV_DONTNEED 4 /* Don't need these pages. */
++#endif
++
++/* The POSIX people had to invent similar names for the same things. */
++#ifdef __USE_XOPEN2K
++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */
++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */
++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */
++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */
++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */
++#endif
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,26 @@
++/* Low-level statistical profiling support function. Linux/AVR32 version.
++ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <signal.h>
++
++void
++profil_counter(int signo, siginfo_t *si, struct sigcontext *sc)
++{
++ profil_count((void *)sc->pc);
++}
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,21 @@
++/*
++ * Copyright (C) 2004-2005 Atmel Norway
++ */
++#ifndef _SETJMP_H
++# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
++#endif
++
++#ifndef _ASM
++/*
++ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are
++ * not saved.
++ */
++typedef int __jmp_buf[11];
++#endif
++
++#define __JMP_BUF_SP 4
++
++/* Test if longjmp to JMPBUF would unwind the frame containing a local
++ variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP]))
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,143 @@
++#ifndef _SYSCALL_H
++# error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
++#endif
++
++/*
++ * This includes the `__NR_<name>' syscall numbers taken from the
++ * Linux kernel header files. It also defines the traditional
++ * `SYS_<name>' macros for older programs.
++ */
++#include <bits/sysnum.h>
++
++#ifndef __set_errno
++# define __set_errno(val) (*__errno_location()) = (val)
++#endif
++#ifndef SYS_ify
++# define SYS_ify(syscall_name) (__NR_##syscall_name)
++#endif
++
++#ifndef __ASSEMBLER__
++
++#undef _syscall0
++#define _syscall0(type,name) \
++ type name(void) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 0)); \
++ }
++
++#undef _syscall1
++#define _syscall1(type,name,type1,arg1) \
++ type name(type1 arg1) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 1, arg1)); \
++ }
++
++#undef _syscall2
++#define _syscall2(type,name,type1,arg1,type2,arg2) \
++ type name(type1 arg1, type2 arg2) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \
++ }
++
++#undef _syscall3
++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
++ type name(type1 arg1, type2 arg2, type3 arg3) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 3, arg1, \
++ arg2, arg3)); \
++ }
++
++#undef _syscall4
++#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \
++ type4,arg4) \
++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \
++ arg3, arg4)); \
++ }
++
++#undef _syscall5
++#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \
++ type4,arg4,type5,arg5) \
++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \
++ type5 arg5) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \
++ arg3, arg4, arg5)); \
++ }
++
++#undef _syscall6
++#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \
++ type4,arg4,type5,arg5,type6,arg6) \
++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \
++ type5 arg5, type6 arg6) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \
++ arg4, arg5, arg6)); \
++ }
++
++#undef unlikely
++#define unlikely(x) __builtin_expect((x), 0)
++
++#undef INLINE_SYSCALL
++#define INLINE_SYSCALL(name, nr, args...) \
++ ({ \
++ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \
++ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \
++ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \
++ _sys_result = (unsigned int) -1; \
++ } \
++ (int) _sys_result; \
++ })
++
++#undef INTERNAL_SYSCALL_DECL
++#define INTERNAL_SYSCALL_DECL(err) do { } while(0)
++
++#undef INTERNAL_SYSCALL
++#define INTERNAL_SYSCALL(name, err, nr, args...) \
++ ({ \
++ register int _a1 asm ("r12"); \
++ register int _scno asm("r8") = SYS_ify(name); \
++ LOAD_ARGS_##nr (args); \
++ asm volatile ("scall /* syscall " #name " */" \
++ : "=r" (_a1) \
++ : "r"(_scno) ASM_ARGS_##nr \
++ : "lr", "cc", "memory"); \
++ _a1; \
++ })
++
++#undef INTERNAL_SYSCALL_ERROR_P
++#define INTERNAL_SYSCALL_ERROR_P(val, err) \
++ ((unsigned int)(val) >= 0xfffff001U)
++
++#undef INTERNAL_SYSCALL_ERRNO
++#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val))
++
++#define LOAD_ARGS_0() do { } while(0)
++#define ASM_ARGS_0
++#define LOAD_ARGS_1(a1) \
++ _a1 = (int) (a1); \
++ LOAD_ARGS_0()
++#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1)
++#define LOAD_ARGS_2(a1, a2) \
++ register int _a2 asm("r11") = (int)(a2); \
++ LOAD_ARGS_1(a1)
++#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2)
++#define LOAD_ARGS_3(a1, a2, a3) \
++ register int _a3 asm("r10") = (int)(a3); \
++ LOAD_ARGS_2(a1, a2)
++#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3)
++#define LOAD_ARGS_4(a1, a2, a3, a4) \
++ register int _a4 asm("r9") = (int)(a4); \
++ LOAD_ARGS_3(a1, a2, a3)
++#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4)
++#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \
++ register int _a5 asm("r5") = (int)(a5); \
++ LOAD_ARGS_4(a1, a2, a3, a4)
++#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5)
++#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \
++ register int _a6 asm("r3") = (int)(a6); \
++ LOAD_ARGS_5(a1, a2, a3, a4, a5)
++#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6)
++
++#endif /* __ASSEMBLER__ */
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1 @@
++#define __WORDSIZE 32
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,23 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <errno.h>
++#include <sys/syscall.h>
++
++void *__curbrk = 0;
++
++int brk (void *addr)
++{
++ void *newbrk;
++
++ newbrk = INLINE_SYSCALL(brk, 1, addr);
++
++ __curbrk = newbrk;
++
++ if (newbrk < addr) {
++ __set_errno (ENOMEM);
++ return -1;
++ }
++
++ return 0;
++}
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-05-05 09:26:42.000000000 +0200
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++
++ /* This just does a tail-call to __sigsetjmp(env, 0) */
++ .global _setjmp
++ .type _setjmp,"function"
++ .align 1
++_setjmp:
++ mov r11, 0
++ bral __sigsetjmp_internal
++ .size _setjmp, . - _setjmp
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-05-05 09:26:42.000000000 +0200
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++
++ /* This just does a tail-call to __sigsetjmp(env, 1) */
++ .global setjmp
++ .type setjmp,"function"
++ .align 1
++setjmp:
++ mov r11, 1
++ bral __sigsetjmp_internal
++ .size setjmp, . - setjmp
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,37 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <errno.h>
++#include <sys/syscall.h>
++#include <unistd.h>
++
++/*
++ * I don't know if we can be absolutely certain that the fn and arg
++ * parameters are preserved when returning as the child. If the
++ * compiler stores them in registers (r0-r7), they should be.
++ */
++int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg)
++{
++ register int (*_fn)(void *arg) = fn;
++ register void *_arg = arg;
++ int err;
++
++ /* Sanity check the arguments */
++ err = -EINVAL;
++ if (!fn)
++ goto syscall_error;
++ if (!child_stack)
++ goto syscall_error;
++
++ err = INLINE_SYSCALL(clone, 2, flags, child_stack);
++ if (err < 0)
++ goto syscall_error;
++ else if (err != 0)
++ return err;
++
++ _exit(_fn(_arg));
++
++syscall_error:
++ __set_errno (-err);
++ return -1;
++}
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S 2006-05-05 09:28:23.000000000 +0200
+@@ -0,0 +1,93 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ *
++ * When we enter _start, the stack looks like this:
++ * argc argument counter
++ * argv[0] pointer to program name
++ * argv[1..argc-1] pointers to program args
++ * NULL
++ * env[0..N] pointers to environment variables
++ * NULL
++ *
++ * r12 contains a function pointer to be registered with `atexit'.
++ * This is how the dynamic linker arranges to have DT_FINI functions
++ * called for shared libraries that have been loaded before this
++ * code runs.
++ *
++ * We're going to call the following function:
++ * __uClibc_main(int (*main)(int, char **, char **), int argc,
++ * char **argv, void (*app_init)(void), void (*app_fini)(void),
++ * void (*rtld_fini)(void), void *stack_end)
++ *
++ * So we need to set up things as follows:
++ * r12 = address of main
++ * r11 = argc
++ * r10 = &argv[0]
++ * r9 = address of _init
++ * r8 = address of _fini
++ * sp[0] = whatever we got passed in r12
++ */
++
++#include <features.h>
++
++ .text
++ .global _start
++ .type _start, @function
++_start:
++ /* Clear the frame pointer and link register since this is the outermost frame. */
++ mov r7, 0
++ mov lr, 0
++
++ ld.w r11, sp++ /* argc */
++ mov r10, sp /* &argv[0] */
++
++ st.w --sp, r10 /* stack_end */
++ st.w --sp, r12 /* rtld_fini */
++
++#ifdef __PIC__
++ lddpc r6, .L_GOT
++.L_RGOT:
++ rsub r6, pc
++ lda.w r9, _init
++ lda.w r8, _fini
++ lda.w r12, main
++
++ /* Ok, now run uClibc's main() -- should not return */
++ call __uClibc_main
++
++ .align 2
++.L_GOT:
++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_
++#else
++ lddpc r9, __init_addr /* app_init */
++ lddpc r8, __fini_addr /* app_fini */
++ lddpc r12, __main_addr /* main */
++
++ /* Ok, now run uClibc's main() -- should not return */
++ lddpc pc, ___uClibc_main_addr
++
++ .align 2
++__init_addr:
++ .long _init
++__fini_addr:
++ .long _fini
++__main_addr:
++ .long main
++___uClibc_main_addr:
++ .long __uClibc_main
++#endif
++ .size _start, . - _start
++
++ /*
++ * The LSB says we need this.
++ */
++ .section ".note.ABI-tag", "a"
++ .align 4
++ .long 2f - 1f /* namesz */
++ .long 4f - 3f /* descsz */
++ .long 1 /* type */
++1: .asciz "GNU" /* name */
++2: .align 4
++3: .long 0 /* Linux executable */
++ .long 2,6,0 /* Earliest compatible kernel */
++4: .align 4
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,17 @@
++
++ .section .init
++ .align 2
++ .global _init
++ .type _init, @function
++_init:
++ /* Use a four-byte instruction to avoid NOPs */
++ stm --sp, r0-r7,lr
++ .align 2
++
++ .section .fini
++ .align 2
++ .global _fini
++ .type _fini, @function
++_fini:
++ stm --sp, r0-r7,lr
++ .align 2
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,14 @@
++
++ .section .init
++ .align 2
++ .global _init
++ .type _init, @function
++ ldm sp++, r0-r7,pc
++ .size _init, . - _init
++
++ .section .fini
++ .align 2
++ .global _fini
++ .type _fini, @function
++ ldm sp++, r0-r7,pc
++ .size _fini, . - _fini
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,31 @@
++/* Copyright (C) 2005 Atmel Norway
++
++ This program is free software; you can redistribute it and/or modify it under
++ the terms of the GNU Library General Public License as published by the Free
++ Software Foundation; either version 2 of the License, or (at your option) any
++ later version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++ details.
++
++ You should have received a copy of the GNU Library General Public License
++ along with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++ Derived in part from the Linux-8086 C library, the GNU C Library, and several
++ other sundry sources. Files within this library are copyright by their
++ respective copyright holders.
++ */
++
++#include <errno.h>
++#include <sys/mman.h>
++#include <sys/syscall.h>
++
++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff);
++
++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset)
++{
++ return mmap2(addr, len, prot, flags, fd, offset >> 12);
++}
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S 2006-05-05 09:28:28.000000000 +0200
+@@ -0,0 +1,43 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#define _SETJMP_H
++#define _ASM
++#include <bits/setjmp.h>
++
++ .text
++
++ .global __sigsetjmp
++ .type __sigsetjmp,"function"
++
++ /* Create a global, hidden symbol for use by setjmp() and _setjmp().
++ If it's not hidden, the linker will complain about a relative
++ jump to a dynamic symbol when building a shared library.
++
++ Also, if a user overrides the __sigsetjmp function, he might not
++ expect the setjmp() and _setjmp() function to effectively be
++ overridden as well. */
++ .global __sigsetjmp_internal
++ .hidden __sigsetjmp_internal
++ .type __sigsetjmp_internal,"function"
++ .align 1
++__sigsetjmp:
++__sigsetjmp_internal:
++ mustr r8
++ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr
++
++ /* Make a tail call to __sigjmp_save; it takes the same args. */
++#ifdef __PIC__
++ mov r9, r6
++ lddpc r6, .LG
++.L1: rsub r6, pc
++ ld.w r8, r6[__sigjmp_save@got]
++ mov r6, r9
++ mov pc, r8
++
++ .align 2
++.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_
++#else
++ rjmp __sigjmp_save
++#endif
++ .size __sigsetjmp, . - __sigsetjmp
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <errno.h>
++#include <signal.h>
++#include <string.h>
++#include <sys/syscall.h>
++#include <bits/kernel_sigaction.h>
++
++#define SA_RESTORER 0x04000000
++extern void __default_rt_sa_restorer(void);
++
++/*
++ * If act is not NULL, change the action for sig to *act.
++ * If oact is not NULL, put the old action for sig in *oact.
++ */
++int __libc_sigaction(int signum, const struct sigaction *act,
++ struct sigaction *oldact)
++{
++ struct kernel_sigaction kact, koact;
++ int result;
++
++ if (act) {
++ kact.k_sa_handler = act->sa_handler;
++ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask));
++ kact.sa_flags = act->sa_flags;
++ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK))
++ kact.sa_restorer = act->sa_restorer;
++ else
++ kact.sa_restorer = __default_rt_sa_restorer;
++ kact.sa_flags |= SA_RESTORER;
++ }
++
++ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL,
++ oldact ? __ptrvalue(&koact) : NULL,
++ _NSIG / 8);
++
++ if (oldact && result >= 0) {
++ oldact->sa_handler = koact.k_sa_handler;
++ memcpy(&oldact->sa_mask, &koact.sa_mask,
++ sizeof(oldact->sa_mask));
++ oldact->sa_flags = koact.sa_flags;
++ oldact->sa_restorer = koact.sa_restorer;
++ }
++
++ return result;
++}
++
++weak_alias(__libc_sigaction, sigaction)
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <sys/syscall.h>
++
++ .global __default_rt_sa_restorer
++ .type __default_rt_sa_restorer,"function"
++ .align 1
++__default_rt_sa_restorer:
++ mov r8, __NR_rt_sigreturn
++ scall
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,26 @@
++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_ELF_H
++#define _SYS_ELF_H 1
++
++#warning "This header is obsolete; use <sys/procfs.h> instead."
++
++#include <sys/procfs.h>
++
++#endif /* sys/elf.h */
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,48 @@
++/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_IO_H
++
++#define _SYS_IO_H 1
++#include <features.h>
++
++__BEGIN_DECLS
++
++/* If TURN_ON is TRUE, request for permission to do direct i/o on the
++ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
++ permission off for that range. This call requires root privileges. */
++extern int ioperm (unsigned long int __from, unsigned long int __num,
++ int __turn_on) __THROW;
++
++/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero,
++ permission to access any I/O port is granted. This call requires
++ root privileges. */
++extern int iopl (int __level) __THROW;
++
++/* The functions that actually perform reads and writes. */
++extern unsigned char inb (unsigned long int port) __THROW;
++extern unsigned short int inw (unsigned long int port) __THROW;
++extern unsigned long int inl (unsigned long int port) __THROW;
++
++extern void outb (unsigned char value, unsigned long int port) __THROW;
++extern void outw (unsigned short value, unsigned long int port) __THROW;
++extern void outl (unsigned long value, unsigned long int port) __THROW;
++
++__END_DECLS
++
++#endif /* _SYS_IO_H */
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,123 @@
++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_PROCFS_H
++#define _SYS_PROCFS_H 1
++
++/* This is somewhat modelled after the file of the same name on SVR4
++ systems. It provides a definition of the core file format for ELF
++ used on Linux. It doesn't have anything to do with the /proc file
++ system, even though Linux has one.
++
++ Anyway, the whole purpose of this file is for GDB and GDB only.
++ Don't read too much into it. Don't use it for anything other than
++ GDB unless you know what you are doing. */
++
++#include <features.h>
++#include <sys/time.h>
++#include <sys/types.h>
++#include <sys/user.h>
++
++__BEGIN_DECLS
++
++/* Type for a general-purpose register. */
++typedef unsigned long elf_greg_t;
++
++/* And the whole bunch of them. We could have used `struct
++ user_regs' directly in the typedef, but tradition says that
++ the register set is an array, which does have some peculiar
++ semantics, so leave it that way. */
++#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t))
++typedef elf_greg_t elf_gregset_t[ELF_NGREG];
++
++/* Register set for the floating-point registers. */
++typedef struct user_fpregs elf_fpregset_t;
++
++/* Signal info. */
++struct elf_siginfo
++ {
++ int si_signo; /* Signal number. */
++ int si_code; /* Extra code. */
++ int si_errno; /* Errno. */
++ };
++
++/* Definitions to generate Intel SVR4-like core files. These mostly
++ have the same names as the SVR4 types with "elf_" tacked on the
++ front to prevent clashes with Linux definitions, and the typedef
++ forms have been avoided. This is mostly like the SVR4 structure,
++ but more Linuxy, with things that Linux does not support and which
++ GDB doesn't really use excluded. */
++
++struct elf_prstatus
++ {
++ struct elf_siginfo pr_info; /* Info associated with signal. */
++ short int pr_cursig; /* Current signal. */
++ unsigned long int pr_sigpend; /* Set of pending signals. */
++ unsigned long int pr_sighold; /* Set of held signals. */
++ __pid_t pr_pid;
++ __pid_t pr_ppid;
++ __pid_t pr_pgrp;
++ __pid_t pr_sid;
++ struct timeval pr_utime; /* User time. */
++ struct timeval pr_stime; /* System time. */
++ struct timeval pr_cutime; /* Cumulative user time. */
++ struct timeval pr_cstime; /* Cumulative system time. */
++ elf_gregset_t pr_reg; /* GP registers. */
++ int pr_fpvalid; /* True if math copro being used. */
++ };
++
++
++#define ELF_PRARGSZ (80) /* Number of chars for args. */
++
++struct elf_prpsinfo
++ {
++ char pr_state; /* Numeric process state. */
++ char pr_sname; /* Char for pr_state. */
++ char pr_zomb; /* Zombie. */
++ char pr_nice; /* Nice val. */
++ unsigned long int pr_flag; /* Flags. */
++ unsigned short int pr_uid;
++ unsigned short int pr_gid;
++ int pr_pid, pr_ppid, pr_pgrp, pr_sid;
++ /* Lots missing */
++ char pr_fname[16]; /* Filename of executable. */
++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
++ };
++
++/* The rest of this file provides the types for emulation of the
++ Solaris <proc_service.h> interfaces that should be implemented by
++ users of libthread_db. */
++
++/* Addresses. */
++typedef void *psaddr_t;
++
++/* Register sets. Linux has different names. */
++typedef elf_gregset_t prgregset_t;
++typedef elf_fpregset_t prfpregset_t;
++
++/* We don't have any differences between processes and threads,
++ therefore have only one PID type. */
++typedef __pid_t lwpid_t;
++
++/* Process status and info. In the end we do provide typedefs for them. */
++typedef struct elf_prstatus prstatus_t;
++typedef struct elf_prpsinfo prpsinfo_t;
++
++__END_DECLS
++
++#endif /* sys/procfs.h */
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,94 @@
++/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++/* Linux/AVR32 ABI compliant context switching support. */
++
++#ifndef _SYS_UCONTEXT_H
++#define _SYS_UCONTEXT_H 1
++
++#include <features.h>
++#include <signal.h>
++#include <sys/procfs.h>
++#include <bits/sigcontext.h>
++
++typedef int greg_t;
++
++/* Number of general registers. */
++#define NGREG 16
++
++/* Container for all general registers. */
++typedef elf_gregset_t gregset_t;
++
++/* Number of each register is the `gregset_t' array. */
++enum
++{
++ R0 = 0,
++#define R0 R0
++ R1 = 1,
++#define R1 R1
++ R2 = 2,
++#define R2 R2
++ R3 = 3,
++#define R3 R3
++ R4 = 4,
++#define R4 R4
++ R5 = 5,
++#define R5 R5
++ R6 = 6,
++#define R6 R6
++ R7 = 7,
++#define R7 R7
++ R8 = 8,
++#define R8 R8
++ R9 = 9,
++#define R9 R9
++ R10 = 10,
++#define R10 R10
++ R11 = 11,
++#define R11 R11
++ R12 = 12,
++#define R12 R12
++ R13 = 13,
++#define R13 R13
++ R14 = 14,
++#define R14 R14
++ R15 = 15
++#define R15 R15
++};
++
++/* Structure to describe FPU registers. */
++typedef elf_fpregset_t fpregset_t;
++
++/* Context to describe whole processor state. */
++typedef struct
++ {
++ gregset_t gregs;
++ fpregset_t fpregs;
++ } mcontext_t;
++
++/* Userlevel context. */
++typedef struct ucontext
++{
++ unsigned long uc_flags;
++ struct ucontext *uc_link;
++ stack_t uc_stack;
++ struct sigcontext uc_mcontext;
++ sigset_t uc_sigmask; /* mask last for extensibility */
++} ucontext_t;
++
++#endif /* sys/ucontext.h */
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,46 @@
++#ifndef _SYS_USER_H
++#define _SYS_USER_H
++
++struct user_fpregs
++{
++
++};
++
++struct user_regs
++{
++ unsigned long sr;
++ unsigned long pc;
++ unsigned long lr;
++ unsigned long sp;
++ unsigned long r12;
++ unsigned long r11;
++ unsigned long r10;
++ unsigned long r9;
++ unsigned long r8;
++ unsigned long r7;
++ unsigned long r6;
++ unsigned long r5;
++ unsigned long r4;
++ unsigned long r3;
++ unsigned long r2;
++ unsigned long r1;
++ unsigned long r0;
++ unsigned long r12_orig;
++};
++
++struct user
++{
++ struct user_regs regs; /* general registers */
++ size_t u_tsize; /* text size (pages) */
++ size_t u_dsize; /* data size (pages) */
++ size_t u_ssize; /* stack size (pages) */
++ unsigned long start_code; /* text starting address */
++ unsigned long start_data; /* data starting address */
++ unsigned long start_stack; /* stack starting address */
++ long int signal; /* signal causing core dump */
++ struct user_regs * u_ar0; /* help gdb find registers */
++ unsigned long magic; /* identifies a core file */
++ char u_comm[32]; /* user command name */
++};
++
++#endif /* _SYS_USER_H */
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,81 @@
++/*
++ * syscall for AVR32/uClibc
++ *
++ * Copyright (C) 2004 Atmel Norway
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU Library General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
++ * for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this program; if not, write to the Free Software Foundation,
++ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++#include <features.h>
++
++ .text
++
++ /*
++ * long int syscall(long int sysno, ...)
++ */
++ .global syscall
++ .type syscall, @function
++ .align 2
++syscall:
++ stm --sp, r3,r5,lr
++ sub lr, sp, -12
++ mov r8, r12
++ ldm lr, r3,r5,r9-r12
++ scall
++ cp.w r12, -4095
++ brlo .Ldone
++
++#ifdef __PIC__
++ lddpc r5, .Lgot
++.Lgotcalc:
++ rsub r5, pc
++# ifdef __UCLIBC_HAS_THREADS__
++ mov r3, r12
++ mcall r5[__errno_location@got]
++ st.w r12[0], r3
++# else
++ ld.w r3, r5[errno@got]
++ st.w r3[0], r12
++# endif
++#else
++# ifdef __UCLIBC_HAS_THREADS__
++ mov r3, r12
++ mcall .Lerrno_location
++ st.w r12[0], r3
++# else
++ lddpc r3, .Lerrno
++ st.w r3[0], r12
++# endif
++#endif
++ mov r12, -1
++
++.Ldone:
++ ldm sp++, r3,r5,pc
++
++ .align 2
++#ifdef __PIC__
++.Lgot:
++ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_
++#else
++# ifdef __UCLIBC_HAS_THREADS__
++.Lerrno_location:
++ .long __errno_location
++# else
++.Lerrno:
++ .long errno
++# endif
++#endif
++
++
++ .size syscall, . - syscall
+Index: uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S 2006-04-19 12:48:33.000000000 +0200
+@@ -0,0 +1,55 @@
++ /*
++ * vfork for uClibc
++ *
++ * Copyright (C) 2005 Atmel Norway
++ */
++
++ /*
++ * Clone the process without copying the address space. The
++ * calling process is suspended until the child either exits
++ * or calls execve.
++ *
++ * This all means that we cannot rely on the stack to store
++ * away registers, since they will be overwritten by the child
++ * as soon as it makes another function call (e.g. execve()).
++ * Fortunately, the Linux kernel preserves LR across system calls.
++ */
++#include <features.h>
++#include <sys/syscall.h>
++
++ .global __vfork
++ .type __vfork,@function
++ .align 1
++__vfork:
++ mov r8, __NR_vfork
++ scall
++ cp.w r12, -4096
++ retls r12
++
++ /* vfork failed, so we may use the stack freely */
++ pushm r4-r7,lr
++#ifdef __PIC__
++ lddpc r6, .L_GOT
++ rsub r4, r12, 0
++.L_RGOT:
++ rsub r6, pc
++ mcall r6[__errno_location@got]
++#else
++ rsub r4, r12, 0
++ mcall .L__errno_location
++#endif
++ st.w r12[0], r4
++ popm r4-r7,pc,r12=-1
++
++ .align 2
++#ifdef __PIC__
++.L_GOT:
++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_
++#else
++.L__errno_location:
++ .long __errno_location
++#endif
++ .size __vfork, . - __vfork
++
++ .weak vfork
++ vfork = __vfork
+Index: uClibc-0.9.28/Rules.mak
+===================================================================
+--- uClibc-0.9.28.orig/Rules.mak 2006-05-05 09:26:01.000000000 +0200
++++ uClibc-0.9.28/Rules.mak 2006-05-05 09:27:17.000000000 +0200
+@@ -231,6 +231,10 @@ ifeq ($(strip $(TARGET_ARCH)),frv)
+ UCLIBC_LDSO=ld.so.1
+ endif
+
++ifeq ($(strip $(TARGET_ARCH)),avr32)
++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000
++endif
++
+ # Keep the check_gcc from being needlessly executed
+ ifndef PIEFLAG
+ ifneq ($(UCLIBC_BUILD_PIE),y)
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch
new file mode 100644
index 0000000000..991e3442c7
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/avr32-linkrelax-option.patch
@@ -0,0 +1,40 @@
+From nobody Mon Sep 17 00:00:00 2001
+Subject: [PATCH] Make linkrelax configurable
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: 1133951618 +0100
+
+Add a linkrelax option to the configure system which will give
+appropriate options to the compiler, assembler and linker to enable
+link-time optimizations.
+
+---
+
+ Rules.mak | 2 ++
+ extra/Configs/Config.avr32 | 4 ++++
+ 2 files changed, 6 insertions(+)
+
+Index: uClibc-0.9.28/Rules.mak
+===================================================================
+--- uClibc-0.9.28.orig/Rules.mak 2006-02-08 17:58:53.000000000 +0100
++++ uClibc-0.9.28/Rules.mak 2006-02-08 17:59:07.000000000 +0100
+@@ -233,6 +233,8 @@ endif
+
+ ifeq ($(strip $(TARGET_ARCH)),avr32)
+ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000
++ CPU_CFLAGS-$(LINKRELAX) += -masm-addr-pseudos -Wa,--pic,--linkrelax
++ CPU_LDFLAGS-$(LINKRELAX) += --relax
+ endif
+
+ # Keep the check_gcc from being needlessly executed
+Index: uClibc-0.9.28/extra/Configs/Config.avr32
+===================================================================
+--- uClibc-0.9.28.orig/extra/Configs/Config.avr32 2006-02-08 17:58:53.000000000 +0100
++++ uClibc-0.9.28/extra/Configs/Config.avr32 2006-02-08 17:59:07.000000000 +0100
+@@ -36,3 +36,7 @@ config CONFIG_AP7000
+ bool "AP7000"
+
+ endchoice
++
++config LINKRELAX
++ bool "Enable linker optimizations"
++ default n
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch b/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch
new file mode 100644
index 0000000000..8518ccf664
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/avr32-string-ops.patch
@@ -0,0 +1,1139 @@
+Subject: [PATCH] AVR32-optimized string operations
+
+Add hand-optimized AVR32-specific string operations. Some of them
+need a bit more testing, though.
+
+---
+
+ libc/string/avr32/Makefile | 40 +++++++++++
+ libc/string/avr32/bcopy.S | 15 ++++
+ libc/string/avr32/bzero.S | 12 +++
+ libc/string/avr32/memchr.S | 62 +++++++++++++++++
+ libc/string/avr32/memcmp.S | 50 +++++++++++++
+ libc/string/avr32/memcpy.S | 110 ++++++++++++++++++++++++++++++
+ libc/string/avr32/memmove.S | 114 +++++++++++++++++++++++++++++++
+ libc/string/avr32/memset.S | 60 ++++++++++++++++
+ libc/string/avr32/strcat.S | 95 ++++++++++++++++++++++++++
+ libc/string/avr32/strcmp.S | 80 ++++++++++++++++++++++
+ libc/string/avr32/strcpy.S | 63 +++++++++++++++++
+ libc/string/avr32/stringtest.c | 144 ++++++++++++++++++++++++++++++++++++++++
+ libc/string/avr32/strlen.S | 52 ++++++++++++++
+ libc/string/avr32/strncpy.S | 77 +++++++++++++++++++++
+ libc/string/avr32/test_memcpy.c | 66 ++++++++++++++++++
+ 15 files changed, 1040 insertions(+)
+
+Index: uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,15 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++ .text
++ .global bcopy
++ .type bcopy, @function
++ .align 1
++bcopy:
++ /* Swap the first two arguments */
++ eor r11, r12
++ eor r12, r11
++ eor r11, r12
++ rjmp __memmove
++ .size bcopy, . - bcopy
+Index: uClibc-0.9.28-avr32/libc/string/avr32/bzero.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/bzero.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++ .text
++ .global bzero
++ .type bzero, @function
++ .align 1
++bzero:
++ mov r10, r11
++ mov r11, 0
++ rjmp __memset
+Index: uClibc-0.9.28-avr32/libc/string/avr32/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,40 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2000-2003 Erik Andersen <andersen@uclibc.org>
++#
++# This program is free software; you can redistribute it and/or modify it under
++# the terms of the GNU Library General Public License as published by the Free
++# Software Foundation; either version 2 of the License, or (at your option) any
++# later version.
++#
++# This program is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++# details.
++#
++# You should have received a copy of the GNU Library General Public License
++# along with this program; if not, write to the Free Software Foundation, Inc.,
++# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++TOPDIR=../../../
++include $(TOPDIR)Rules.mak
++
++SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S
++SSRC += memset.S strcmp.S strlen.S
++# memchr.S, strcat.S, strcpy.S, strncpy.S is broken
++SOBJS := $(patsubst %.S,%.o, $(SSRC))
++OBJS := $(SOBJS)
++
++OBJ_LIST:= ../../obj.string.$(TARGET_ARCH)
++
++all: $(OBJ_LIST)
++
++$(OBJ_LIST): $(OBJS)
++ echo $(addprefix string/$(TARGET_ARCH)/, $(OBJS)) > $@
++
++$(SOBJS): %.o: %.S
++ $(CC) $(ASFLAGS) -c $< -o $@
++ $(STRIPTOOL) -x -R .note -R .comment $@
++
++clean:
++ $(RM) *.[oa] *~ core
+Index: uClibc-0.9.28-avr32/libc/string/avr32/memchr.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/memchr.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,62 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define str r12
++#define chr r11
++#define len r10
++
++ .text
++ .global memchr
++ .type memchr, @function
++memchr:
++ or chr, chr, chr << 8
++ or chr, chr, chr << 16
++
++ mov r9, str
++ andl r9, 3, COH
++ brne .Lunaligned_str
++
++1: sub len, 4
++ brlt 2f
++ ld.w r8, str++
++ psub.b r9, r8, r11
++ tnbz r9
++ brne 1b
++
++ sub str, 4
++ bfextu r9, r8, 24, 8
++ cp.b r9, r11
++ reteq str
++ sub str, -1
++ bfextu r9, r8, 16, 8
++ cp.b r9, r11
++ reteq str
++ sub str, -1
++ bfextu r9, r8, 8, 8
++ cp.b r9, r11
++ reteq str
++ sub str, -1
++ retal str
++
++2: sub len, -4
++ reteq 0
++
++3: ld.ub r8, str++
++ cp.w r8, 0
++ reteq str
++ sub len, 1
++ brne 3b
++
++ retal 0
++
++.Lunaligned_str:
++1: sub len, 1
++ retlt 0
++ ld.ub r8, str++
++ cp.b r8, r11
++ reteq str
++ sub r9, 1
++ brge 1b
++
++ rjmp .Laligned_search
+Index: uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S 2006-10-20 10:42:09.000000000 +0200
+@@ -0,0 +1,50 @@
++/*
++ * Copyright (C) 2004 Atmel Norway.
++ */
++
++#define s1 r12
++#define s2 r11
++#define len r10
++
++ .text
++ .global memcmp
++ .type memcmp, @function
++ .align 1
++memcmp:
++ sub len, 4
++ brlt .Lless_than_4
++
++1: ld.w r8, s1++
++ ld.w r9, s2++
++ cp.w r8, r9
++ brne .Lfound_word
++ sub len, 4
++ brge 1b
++
++.Lless_than_4:
++ sub len, -4
++ reteq 0
++
++1: ld.ub r8, s1++
++ ld.ub r9, s2++
++ sub r8, r9
++ retne r8
++ sub len, 1
++ brgt 1b
++
++ retal 0
++
++.Lfound_word:
++ psub.b r9, r8, r9
++ bfextu r8, r9, 24, 8
++ retne r8
++ bfextu r8, r9, 16, 8
++ retne r8
++ bfextu r8, r9, 8, 8
++ retne r8
++ retal r9
++
++ .size memcmp, . - memcmp
++
++ .weak bcmp
++ bcmp = memcmp
+Index: uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,110 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++/* Don't use r12 as dst since we must return it unmodified */
++#define dst r9
++#define src r11
++#define len r10
++
++ .text
++ .global memcpy
++ .type memcpy, @function
++
++ .global __memcpy
++ .hidden __memcpy
++ .type __memcpy, @function
++memcpy:
++__memcpy:
++ pref src[0]
++ mov dst, r12
++
++ /* If we have less than 32 bytes, don't do anything fancy */
++ cp.w len, 32
++ brge .Lmore_than_31
++
++ sub len, 1
++ retlt r12
++1: ld.ub r8, src++
++ st.b dst++, r8
++ sub len, 1
++ brge 1b
++ retal r12
++
++.Lmore_than_31:
++ pushm r0-r7, lr
++
++ /* Check alignment */
++ mov r8, src
++ andl r8, 31, COH
++ brne .Lunaligned_src
++ mov r8, dst
++ andl r8, 3, COH
++ brne .Lunaligned_dst
++
++.Laligned_copy:
++ sub len, 32
++ brlt .Lless_than_32
++
++1: /* Copy 32 bytes at a time */
++ ldm src, r0-r7
++ sub src, -32
++ stm dst, r0-r7
++ sub dst, -32
++ sub len, 32
++ brge 1b
++
++.Lless_than_32:
++ /* Copy 16 more bytes if possible */
++ sub len, -16
++ brlt .Lless_than_16
++ ldm src, r0-r3
++ sub src, -16
++ sub len, 16
++ stm dst, r0-r3
++ sub dst, -16
++
++.Lless_than_16:
++ /* Do the remaining as byte copies */
++ neg len
++ add pc, pc, len << 2
++ .rept 15
++ ld.ub r0, src++
++ st.b dst++, r0
++ .endr
++
++ popm r0-r7, pc
++
++.Lunaligned_src:
++ /* Make src cacheline-aligned. r8 = (src & 31) */
++ rsub r8, r8, 32
++ sub len, r8
++1: ld.ub r0, src++
++ st.b dst++, r0
++ sub r8, 1
++ brne 1b
++
++ /* If dst is word-aligned, we're ready to go */
++ pref src[0]
++ mov r8, 3
++ tst dst, r8
++ breq .Laligned_copy
++
++.Lunaligned_dst:
++ /* src is aligned, but dst is not. Expect bad performance */
++ sub len, 4
++ brlt 2f
++1: ld.w r0, src++
++ st.w dst++, r0
++ sub len, 4
++ brge 1b
++
++2: neg len
++ add pc, pc, len << 2
++ .rept 3
++ ld.ub r0, src++
++ st.b dst++, r0
++ .endr
++
++ popm r0-r7, pc
++ .size memcpy, . - memcpy
+Index: uClibc-0.9.28-avr32/libc/string/avr32/memmove.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/memmove.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,114 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define dst r12
++#define src r11
++#define len r10
++
++ .text
++ .global memmove
++ .type memmove, @function
++
++ .global __memmove
++ .hidden __memmove
++ .type __memmove, @function
++memmove:
++__memmove:
++ cp.w src, dst
++ brge __memcpy
++
++ add dst, len
++ add src, len
++ pref src[-1]
++
++ /*
++ * The rest is basically the same as in memcpy.S except that
++ * the direction is reversed.
++ */
++ cp.w len, 32
++ brge .Lmore_than_31
++
++ sub len, 1
++ retlt r12
++1: ld.ub r8, --src
++ st.b --dst, r8
++ sub len, 1
++ brge 1b
++ retal r12
++
++.Lmore_than_31:
++ pushm r0-r7, lr
++
++ /* Check alignment */
++ mov r8, src
++ andl r8, 31, COH
++ brne .Lunaligned_src
++ mov r8, r12
++ andl r8, 3, COH
++ brne .Lunaligned_dst
++
++.Laligned_copy:
++ sub len, 32
++ brlt .Lless_than_32
++
++1: /* Copy 32 bytes at a time */
++ sub src, 32
++ ldm src, r0-r7
++ sub dst, 32
++ sub len, 32
++ stm dst, r0-r7
++ brge 1b
++
++.Lless_than_32:
++ /* Copy 16 more bytes if possible */
++ sub len, -16
++ brlt .Lless_than_16
++ sub src, 16
++ ldm src, r0-r3
++ sub dst, 16
++ sub len, 16
++ stm dst, r0-r3
++
++.Lless_than_16:
++ /* Do the remaining as byte copies */
++ sub len, -16
++ breq 2f
++1: ld.ub r0, --src
++ st.b --dst, r0
++ sub len, 1
++ brne 1b
++
++2: popm r0-r7, pc
++
++.Lunaligned_src:
++ /* Make src cacheline-aligned. r8 = (src & 31) */
++ sub len, r8
++1: ld.ub r0, --src
++ st.b --dst, r0
++ sub r8, 1
++ brne 1b
++
++ /* If dst is word-aligned, we're ready to go */
++ pref src[-4]
++ mov r8, 3
++ tst dst, r8
++ breq .Laligned_copy
++
++.Lunaligned_dst:
++ /* src is aligned, but dst is not. Expect bad performance */
++ sub len, 4
++ brlt 2f
++1: ld.w r0, --src
++ st.w --dst, r0
++ sub len, 4
++ brge 1b
++
++2: neg len
++ add pc, pc, len << 2
++ .rept 3
++ ld.ub r0, --src
++ st.b --dst, r0
++ .endr
++
++ popm r0-r7, pc
+Index: uClibc-0.9.28-avr32/libc/string/avr32/memset.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/memset.S 2006-10-20 10:42:15.000000000 +0200
+@@ -0,0 +1,60 @@
++/*
++ * Copyright (C) 2004 Atmel Norway.
++ */
++
++#define s r12
++#define c r11
++#define n r10
++
++ .text
++ .global memset
++ .type memset, @function
++
++ .global __memset
++ .hidden __memset
++ .type __memset, @function
++
++ .align 1
++memset:
++__memset:
++ cp.w n, 32
++ mov r9, s
++ brge .Llarge_memset
++
++ sub n, 1
++ retlt s
++1: st.b s++, c
++ sub n, 1
++ brge 1b
++
++ retal r9
++
++.Llarge_memset:
++ mov r8, r11
++ mov r11, 3
++ bfins r8, r8, 8, 8
++ bfins r8, r8, 16, 16
++ tst s, r11
++ breq 2f
++
++1: st.b s++, r8
++ sub n, 1
++ tst s, r11
++ brne 1b
++
++2: mov r11, r9
++ mov r9, r8
++ sub n, 8
++
++3: st.d s++, r8
++ sub n, 8
++ brge 3b
++
++ /* If we are done, n == -8 and we'll skip all st.b insns below */
++ neg n
++ lsl n, 1
++ add pc, n
++ .rept 7
++ st.b s++, r8
++ .endr
++ retal r11
+Index: uClibc-0.9.28-avr32/libc/string/avr32/strcat.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/strcat.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,95 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define s1 r9
++#define s2 r11
++
++ .text
++ .global strcat
++ .type strcat, @function
++ .align 1
++strcat:
++ mov s1, r12
++
++ /* Make sure s1 is word-aligned */
++ mov r10, s1
++ andl r10, 3, COH
++ breq 2f
++
++ add pc, pc, r10 << 3
++ sub r0, r0, 0 /* 4-byte nop */
++ ld.ub r8, s1++
++ sub r8, r8, 0
++ breq 2f
++ ld.ub r8, s1++
++ sub r8, r8, 0
++ breq 3f
++ ld.ub r8, s1++
++ sub r8, r8, 0
++ breq 4f
++
++ /* Find the end of the first string */
++5: ld.w r8, s1++
++ tnbz r8
++ brne 5b
++
++ sub s1, 4
++
++ bfextu r10, r8, 24, 8
++ cp.w r10, 0
++ breq 1f
++ sub s1, -1
++ bfextu r10, r8, 16, 8
++ cp.w r10, 0
++ breq 2f
++ sub s1, -1
++ bfextu r10, r8, 8, 8
++ cp.w r10, 0
++ breq 3f
++ sub s1, -1
++ rjmp 4f
++
++ /* Now, append s2 */
++1: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++2: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++3: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++4: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++
++ /* Copy one word at a time */
++ ld.w r8, s2++
++ tnbz r8
++ breq 2f
++1: st.w r8, s2++
++ ld.w r8, s2++
++ tnbz r8
++ brne 1b
++
++ /* Copy the remaining bytes */
++ bfextu r10, r8, 24, 8
++ st.b s1++, r10
++ cp.w r10, 0
++ reteq r12
++ bfextu r10, r8, 16, 8
++ st.b s1++, r10
++ cp.w r10, 0
++ reteq r12
++ bfextu r10, r8, 8, 8
++ st.b s1++, r10
++ cp.w r10, 0
++ reteq r12
++ st.b s1++, r8
++ retal r12
++ .size strcat, . - strcat
+Index: uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,80 @@
++/*
++ * Copyright (C) 2004 Atmel Norway.
++ */
++
++#define s1 r12
++#define s2 r11
++#define len r10
++
++ .text
++ .global strcmp
++ .type strcmp, @function
++ .align 1
++strcmp:
++ mov r8, 3
++ tst s1, r8
++ brne .Lunaligned_s1
++ tst s2, r8
++ brne .Lunaligned_s2
++
++1: ld.w r8, s1++
++ ld.w r9, s2++
++ cp.w r8, r9
++ brne 2f
++ tnbz r8
++ brne 1b
++ retal 0
++
++2: bfextu r12, r8, 24, 8
++ bfextu r11, r9, 24, 8
++ sub r12, r11
++ retne r12
++ cp.w r11, 0
++ reteq 0
++ bfextu r12, r8, 16, 8
++ bfextu r11, r9, 16, 8
++ sub r12, r11
++ retne r12
++ cp.w r11, 0
++ reteq 0
++ bfextu r12, r8, 8, 8
++ bfextu r11, r9, 8, 8
++ sub r12, r11
++ retne r12
++ cp.w r11, 0
++ reteq 0
++ bfextu r12, r8, 0, 8
++ bfextu r11, r9, 0, 8
++ sub r12, r11
++ retal r12
++
++.Lunaligned_s1:
++3: tst s1, r8
++ breq 4f
++ ld.ub r10, s1++
++ ld.ub r9, s2++
++ sub r10, r9
++ retne r10
++ cp.w r9, 0
++ brne 3b
++ retal r10
++
++4: tst s2, r8
++ breq 1b
++
++.Lunaligned_s2:
++ /*
++ * s1 and s2 can't both be aligned, and unaligned word loads
++ * can trigger spurious exceptions if we cross a page boundary.
++ * Do it the slow way...
++ */
++1: ld.ub r8, s1++
++ ld.ub r9, s2++
++ sub r8, r9
++ retne r8
++ cp.w r9, 0
++ brne 1b
++ retal 0
++
++ .weak strcoll
++ strcoll = strcmp
+Index: uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,63 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ *
++ * To reduce the size, this one might simply call strncpy with len = -1.
++ */
++
++#define dst r9
++#define src r11
++
++ .text
++ .global strcpy
++ .type strcpy, @function
++strcpy:
++ mov dst, r12
++
++ pref src[0]
++
++ /*
++ * Check alignment. If src is aligned but dst isn't, we can't
++ * do much about it...
++ */
++ mov r8, src
++ andl r8, 3 COH
++ brne .Lunaligned_src
++
++.Laligned_copy:
++1: ld.w r8, src++
++ tnbz r8
++ breq 2f
++ st.w dst++, r8
++ rjmp 1b
++
++2: /*
++ * Ok, r8 now contains the terminating '\0'. Copy the
++ * remaining bytes individually.
++ */
++ bfextu r10, r8, 24, 8
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++ bfextu r10, r8, 16, 8
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++ bfextu r10, r8, 8, 8
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++ st.b dst++, r8
++ retal r12
++
++.Lunaligned_src:
++ /* Copy bytes until we're aligned */
++ rsub r8, r8, 4
++ add pc, pc, r8 << 3
++ nop
++ nop
++ ld.ub r10, src++
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++
++ rjmp .Laligned_copy
+Index: uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,144 @@
++
++#include <stdio.h>
++#include <string.h>
++#include <time.h>
++#include <sys/mman.h>
++
++#define BUF_SIZE (8 * 1024)
++
++static char *buf1;
++static char *buf1_ref;
++static char *buf2;
++
++extern void *optimized_memcpy(void *dest, void *src, size_t len);
++extern void *optimized_memmove(void *dest, void *src, size_t len);
++extern char *optimized_strcpy(char *dest, char *src);
++extern char *optimized_strncpy(char *dest, char *src, size_t len);
++
++void dump_mismatch(char *buf, char *ref, size_t len)
++{
++ int i, j;
++
++ for (i = 0; i < len; i += 16) {
++ if (memcmp(buf + i, ref + i, 16) == 0)
++ continue;
++
++ printf("%4x buf:", i);
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", buf[j]);
++ printf("\n ref:");
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", ref[j]);
++ printf("\n");
++ }
++}
++
++static void test_memcpy(int src_offset, int dst_offset, int len)
++{
++ clock_t start, old, new;
++ int i;
++
++ memset(buf1, 0x55, BUF_SIZE);
++ memset(buf1_ref, 0x55, BUF_SIZE);
++ memset(buf2, 0xaa, BUF_SIZE);
++
++ printf("Testing memcpy with offsets %d => %d and len %d...",
++ src_offset, dst_offset, len);
++
++ start = clock();
++ for (i = 0; i < 8192; i++)
++ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len);
++ new = clock() - start;
++ start = clock();
++ for ( i = 0; i < 8192; i++)
++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len);
++ old = clock() - start;
++
++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0)
++ printf("OK\n");
++ else {
++ printf("FAILED\n");
++ dump_mismatch(buf1, buf1_ref, BUF_SIZE);
++ }
++ printf("CPU time used: %d vs. %d\n", new, old);
++}
++
++static void test_memmove(int src_offset, int dst_offset, int len)
++{
++ clock_t start, old, new;
++
++ memset(buf1, 0x55, BUF_SIZE);
++ memset(buf1_ref, 0x55, BUF_SIZE);
++ memset(buf2, 0xaa, BUF_SIZE);
++
++ printf("Testing memmove with offsets %d => %d and len %d...",
++ src_offset, dst_offset, len);
++
++ start = clock();
++ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len);
++ new = clock() - start;
++ start = clock();
++ memmove(buf1_ref + dst_offset, buf2 + src_offset, len);
++ old = clock() - start;
++
++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0)
++ printf("OK\n");
++ else {
++ printf("FAILED\n");
++ dump_mismatch(buf1, buf1_ref, BUF_SIZE);
++ }
++ printf("CPU time used: %d vs. %d\n", new, old);
++}
++
++int main(int argc, char *argv[])
++{
++ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
++ if (buf2 == MAP_FAILED) {
++ perror("Failed to allocate memory for buf2");
++ return 1;
++ }
++ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
++ if (buf1 == MAP_FAILED) {
++ perror("Failed to allocate memory for buf1");
++ return 1;
++ }
++ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
++ if (buf1_ref == MAP_FAILED) {
++ perror("Failed to allocate memory for buf1_ref");
++ return 1;
++ }
++ printf("\n === MEMCPY ===\n\n");
++
++ test_memcpy(0, 0, BUF_SIZE - 32);
++ test_memcpy(0, 0, 1);
++ test_memcpy(0, 0, 31);
++ test_memcpy(0, 0, 32);
++ test_memcpy(0, 0, 127);
++ test_memcpy(0, 0, 128);
++ test_memcpy(4, 4, BUF_SIZE - 32 - 4);
++ test_memcpy(1, 1, BUF_SIZE - 32 - 1);
++ test_memcpy(1, 1, 126);
++ test_memcpy(0, 3, 128);
++ test_memcpy(1, 4, 128);
++ test_memcpy(0, 0, 0);
++
++ printf("\n === MEMMOVE ===\n\n");
++
++ test_memmove(0, 0, BUF_SIZE - 32);
++ test_memmove(0, 0, 1);
++ test_memmove(0, 0, 31);
++ test_memmove(0, 0, 32);
++ test_memmove(0, 0, BUF_SIZE - 33);
++ test_memmove(0, 0, 128);
++ test_memmove(4, 4, BUF_SIZE - 32 - 4);
++ test_memmove(1, 1, BUF_SIZE - 32 - 1);
++ test_memmove(1, 1, BUF_SIZE - 130);
++ test_memmove(0, 3, BUF_SIZE - 128);
++ test_memmove(1, 4, BUF_SIZE - 128);
++ test_memmove(0, 0, 0);
++
++ return 0;
++}
+Index: uClibc-0.9.28-avr32/libc/string/avr32/strlen.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/strlen.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,52 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define str r12
++
++ .text
++ .global strlen
++ .type strlen, @function
++strlen:
++ mov r11, r12
++
++ mov r9, str
++ andl r9, 3, COH
++ brne .Lunaligned_str
++
++1: ld.w r8, str++
++ tnbz r8
++ brne 1b
++
++ sub r12, r11
++ bfextu r9, r8, 24, 8
++ cp.w r9, 0
++ subeq r12, 4
++ reteq r12
++ bfextu r9, r8, 16, 8
++ cp.w r9, 0
++ subeq r12, 3
++ reteq r12
++ bfextu r9, r8, 8, 8
++ cp.w r9, 0
++ subeq r12, 2
++ reteq r12
++ sub r12, 1
++ retal r12
++
++.Lunaligned_str:
++ add pc, pc, r9 << 3
++ sub r0, r0, 0 /* 4-byte nop */
++ ld.ub r8, str++
++ sub r8, r8, 0
++ breq 1f
++ ld.ub r8, str++
++ sub r8, r8, 0
++ breq 1f
++ ld.ub r8, str++
++ sub r8, r8, 0
++ brne 1b
++
++1: sub r12, 1
++ sub r12, r11
++ retal r12
+Index: uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,77 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define dst r9
++#define src r11
++
++ .text
++ .global strcpy
++ .type strncpy, @function
++strncpy:
++ mov dst, r12
++
++ pref src[0]
++ mov dst, r12
++
++ /*
++ * Check alignment. If src is aligned but dst isn't, we can't
++ * do much about it...
++ */
++ mov r8, src
++ andl r8, 3 COH
++ brne .Lunaligned_src
++
++.Laligned_copy:
++ sub r10, 4
++ brlt 3f
++1: ld.w r8, src++
++ tnbz r8
++ breq 2f
++ st.w dst++, r8
++ sub r10, 4
++ brne 1b
++
++3: sub r10, -4
++ reteq r12
++
++ /* This is safe as long as src is word-aligned and r10 > 0 */
++ ld.w r8, src++
++
++2: /*
++ * Ok, r8 now contains the terminating '\0'. Copy the
++ * remaining bytes individually.
++ */
++ bfextu r11, r8, 24, 8
++ st.b dst++, r11
++ cp.w r11, 0
++ reteq r12
++ sub r10, 1
++ reteq r12
++ bfextu r11, r8, 16, 8
++ st.b dst++, r11
++ cp.w r11, 0
++ reteq r12
++ sub r10, 1
++ reteq r12
++ bfextu r11, r8, 8, 8
++ st.b dst++, r11
++ cp.w r11, 0
++ reteq r12
++ sub r10, 1
++ reteq r12
++ st.b dst++, r8
++ retal r12
++
++.Lunaligned_src:
++ /* Copy bytes until we're aligned */
++ min r8, r8, r10
++ sub r10, r8
++ sub r8, 1
++ retlt r12
++1: ld.ub r10, src++
++ st.b dst++, r10
++ sub r8, 1
++ brge 1b
++
++ rjmp .Laligned_copy
+Index: uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,66 @@
++
++#include <stdio.h>
++#include <string.h>
++
++#define BUF_SIZE 32768
++
++static char buf1[BUF_SIZE] __attribute__((aligned(32)));
++static char buf1_ref[BUF_SIZE] __attribute__((aligned(32)));
++static char buf2[BUF_SIZE] __attribute__((aligned(32)));
++
++extern void *new_memcpy(void *dest, void *src, size_t len);
++
++void dump_mismatch(char *buf, char *ref, size_t len)
++{
++ int i, j;
++
++ for (i = 0; i < len; i += 16) {
++ if (memcmp(buf + i, ref + i, 16) == 0)
++ continue;
++
++ printf("% 4x buf:", i);
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", buf[j]);
++ printf("\n ref:");
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", ref[j]);
++ printf("\n");
++ }
++}
++
++void test(int src_offset, int dst_offset, int len)
++{
++ memset(buf1, 0x55, sizeof(buf1));
++ memset(buf1_ref, 0x55, sizeof(buf1_ref));
++ memset(buf2, 0xaa, sizeof(buf2));
++
++ printf("Testing with offsets %d => %d and len %d...",
++ src_offset, dst_offset, len);
++
++ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len);
++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len);
++
++ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0)
++ printf("OK\n");
++ else {
++ printf("FAILED\n");
++ dump_mismatch(buf1, buf1_ref, sizeof(buf1));
++ }
++}
++
++int main(int argc, char *argv[])
++{
++ test(0, 0, BUF_SIZE);
++ test(0, 0, 1);
++ test(0, 0, 31);
++ test(0, 0, 32);
++ test(0, 0, 127);
++ test(0, 0, 128);
++ test(4, 4, BUF_SIZE - 4);
++ test(1, 1, BUF_SIZE - 1);
++ test(1, 1, 126);
++ test(0, 3, 128);
++ test(1, 4, 128);
++
++ return 0;
++}
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch
new file mode 100644
index 0000000000..3319f98de9
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/fix-__libc_fcntl64-varargs-prototype.patch
@@ -0,0 +1,24 @@
+Subject: [PATCH] Fix __libc_fcntl64 prototype in __syscall_fcntl.c
+
+__libc_fcntl64 is a varargs function and should be declared as such.
+Otherwise, the gcc compiler for AVR32, and perhaps other architectures,
+will use the wrong calling convention.
+
+---
+
+ libc/sysdeps/linux/common/__syscall_fcntl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c
+===================================================================
+--- uClibc-0.9.28.orig/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-02-07 16:48:32.000000000 +0100
++++ uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-02-07 17:19:09.000000000 +0100
+@@ -12,7 +12,7 @@
+ #include <fcntl.h>
+
+ #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64
+-extern int __libc_fcntl64(int fd, int cmd, long arg);
++extern int __libc_fcntl64(int fd, int cmd, ...);
+ #endif
+
+ #define __NR___syscall_fcntl __NR_fcntl
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch
new file mode 100644
index 0000000000..aafdc8cd7f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/fix-broken-__libc_open-declaration.patch
@@ -0,0 +1,30 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: HÃ¥vard Skinnemoen <hskinnemoen@atmel.com>
+Date: Fri Apr 7 17:10:32 2006 +0200
+Subject: [PATCH] Fix broken __libc_open declaration in open64.c
+
+__libc_open is a vararg function and should therefore be declared as
+such. Fixes bug #4190.
+
+---
+
+ libc/sysdeps/linux/common/open64.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+70f2c81903327a8a346e370830932b80045ab04e
+diff --git a/libc/sysdeps/linux/common/open64.c b/libc/sysdeps/linux/common/open64.c
+index 543aa13..d9a27a7 100644
+--- a/libc/sysdeps/linux/common/open64.c
++++ b/libc/sysdeps/linux/common/open64.c
+@@ -26,7 +26,7 @@
+ #endif
+
+ #ifdef __UCLIBC_HAS_LFS__
+-extern int __libc_open (__const char *file, int oflag, mode_t mode);
++extern int __libc_open (__const char *file, int oflag, ...);
+
+ /* Open FILE with access OFLAG. If OFLAG includes O_CREAT,
+ a third argument is the file protection. */
+--
+1.2.4
+
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch b/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch
new file mode 100644
index 0000000000..d68576b9bd
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/fix-getrusage-argument-type.patch
@@ -0,0 +1,19 @@
+Subject: [PATCH] Fix getrusage argument type
+
+The first argument to getrusage is of type __rusage_who_t, not int.
+This patch fixes that.
+---
+
+ libc/sysdeps/linux/common/getrusage.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c
+===================================================================
+--- uClibc-0.9.28.orig/libc/sysdeps/linux/common/getrusage.c 2006-02-07 17:18:22.000000000 +0100
++++ uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c 2006-02-07 17:18:31.000000000 +0100
+@@ -10,4 +10,4 @@
+ #include "syscalls.h"
+ #include <unistd.h>
+ #include <wait.h>
+-_syscall2(int, getrusage, int, who, struct rusage *, usage);
++_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage);
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch
new file mode 100644
index 0000000000..dd61f174a7
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/ldd-avr32-support.patch
@@ -0,0 +1,25 @@
+Subject: [PATCH] ldd: AVR32 support
+
+Add AVR32-specific definitions to ldd.
+
+---
+
+ utils/ldd.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+Index: uClibc-0.9.28/utils/ldd.c
+===================================================================
+--- uClibc-0.9.28.orig/utils/ldd.c 2006-02-07 16:48:02.000000000 +0100
++++ uClibc-0.9.28/utils/ldd.c 2006-02-07 17:13:00.000000000 +0100
+@@ -56,6 +56,11 @@
+ #define ELFCLASSM ELFCLASS32
+ #endif
+
++#if defined(__avr32__)
++#define MATCH_MACHINE(x) (x == EM_AVR32)
++#define ELFCLASSM ELFCLASS32
++#endif
++
+ #if defined(__s390__)
+ #define MATCH_MACHINE(x) (x == EM_S390)
+ #define ELFCLASSM ELFCLASS32
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch
new file mode 100644
index 0000000000..cf0e677ffe
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-_dl_memcpy.patch
@@ -0,0 +1,24 @@
+Subject: [PATCH] ldso: Always inline _dl_memcpy()
+
+On some gcc versions, inline is merely a hint. AVR32 depends on this
+function actually getting inlined, so we need to use __always_inline
+instead of just inline.
+
+---
+
+ ldso/include/dl-string.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: uClibc-0.9.28/ldso/include/dl-string.h
+===================================================================
+--- uClibc-0.9.28.orig/ldso/include/dl-string.h 2006-02-07 17:01:28.000000000 +0100
++++ uClibc-0.9.28/ldso/include/dl-string.h 2006-02-07 17:03:02.000000000 +0100
+@@ -134,7 +134,7 @@ static inline char * _dl_strstr(const ch
+ } while (1);
+ }
+
+-static inline void * _dl_memcpy(void * dst, const void * src, size_t len)
++static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len)
+ {
+ register char *a = dst-1;
+ register const char *b = src-1;
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch
new file mode 100644
index 0000000000..e6f5c42585
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-always-inline-syscalls.patch
@@ -0,0 +1,107 @@
+Subject: [PATCH] ldso: Always inline system calls
+
+Some versions of gcc consider inline merely a hint. AVR32 depends on
+the system calls actually being inlined, so we need to use
+__always_inline instead of just inline.
+
+---
+
+ ldso/include/dl-syscall.h | 38 +++++++++++++++++++-------------------
+ 1 file changed, 19 insertions(+), 19 deletions(-)
+
+Index: uClibc-0.9.28/ldso/include/dl-syscall.h
+===================================================================
+--- uClibc-0.9.28.orig/ldso/include/dl-syscall.h 2006-02-07 17:07:06.000000000 +0100
++++ uClibc-0.9.28/ldso/include/dl-syscall.h 2006-02-07 17:08:47.000000000 +0100
+@@ -60,59 +60,59 @@
+ dynamic linking at all, so we cannot return any error codes.
+ We just punt if there is an error. */
+ #define __NR__dl_exit __NR_exit
+-static inline _syscall1(void, _dl_exit, int, status);
++static __always_inline _syscall1(void, _dl_exit, int, status);
+
+ #define __NR__dl_close __NR_close
+-static inline _syscall1(int, _dl_close, int, fd);
++static __always_inline _syscall1(int, _dl_close, int, fd);
+
+ #define __NR__dl_open __NR_open
+-static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode);
++static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode);
+
+ #define __NR__dl_write __NR_write
+-static inline _syscall3(unsigned long, _dl_write, int, fd,
++static __always_inline _syscall3(unsigned long, _dl_write, int, fd,
+ const void *, buf, unsigned long, count);
+
+ #define __NR__dl_read __NR_read
+-static inline _syscall3(unsigned long, _dl_read, int, fd,
++static __always_inline _syscall3(unsigned long, _dl_read, int, fd,
+ const void *, buf, unsigned long, count);
+
+ #define __NR__dl_mprotect __NR_mprotect
+-static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot);
++static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot);
+
+ #define __NR__dl_stat __NR_stat
+-static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf);
++static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf);
+
+ #define __NR__dl_munmap __NR_munmap
+-static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length);
++static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length);
+
+ #define __NR__dl_getuid __NR_getuid
+-static inline _syscall0(uid_t, _dl_getuid);
++static __always_inline _syscall0(uid_t, _dl_getuid);
+
+ #define __NR__dl_geteuid __NR_geteuid
+-static inline _syscall0(uid_t, _dl_geteuid);
++static __always_inline _syscall0(uid_t, _dl_geteuid);
+
+ #define __NR__dl_getgid __NR_getgid
+-static inline _syscall0(gid_t, _dl_getgid);
++static __always_inline _syscall0(gid_t, _dl_getgid);
+
+ #define __NR__dl_getegid __NR_getegid
+-static inline _syscall0(gid_t, _dl_getegid);
++static __always_inline _syscall0(gid_t, _dl_getegid);
+
+ #define __NR__dl_getpid __NR_getpid
+-static inline _syscall0(gid_t, _dl_getpid);
++static __always_inline _syscall0(gid_t, _dl_getpid);
+
+ #define __NR__dl_readlink __NR_readlink
+-static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz);
++static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz);
+
+ #ifdef __NR_mmap
+ #ifdef MMAP_HAS_6_ARGS
+ #define __NR__dl_mmap __NR_mmap
+-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
++static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
+ int, prot, int, flags, int, fd, off_t, offset);
+ #else
+ #define __NR__dl_mmap_real __NR_mmap
+-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
++static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
+
+-static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot,
+ int flags, int fd, unsigned long offset)
+ {
+ unsigned long buffer[6];
+@@ -128,12 +128,12 @@ static inline void * _dl_mmap(void * add
+ #endif
+ #elif defined __NR_mmap2
+ #define __NR___syscall_mmap2 __NR_mmap2
+-static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr,
++static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr,
+ size_t, len, int, prot, int, flags, int, fd, off_t, offset);
+ /*always 12, even on architectures where PAGE_SHIFT != 12 */
+ #define MMAP2_PAGE_SHIFT 12
+ #define MAP_FAILED ((void *) -1)
+-static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot,
+ int flags, int fd, unsigned long offset)
+ {
+ if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1))
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch
new file mode 100644
index 0000000000..ddeb84d069
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-2.patch
@@ -0,0 +1,526 @@
+Subject: [PATCH] ldso: AVR32 support
+
+This implements the AVR32-specific parts of the dynamic linker.
+
+---
+
+ ldso/ldso/avr32/dl-debug.h | 45 +++++++++
+ ldso/ldso/avr32/dl-startup.h | 110 ++++++++++++++++++++++++
+ ldso/ldso/avr32/dl-syscalls.h | 5 +
+ ldso/ldso/avr32/dl-sysdep.h | 103 ++++++++++++++++++++++
+ ldso/ldso/avr32/elfinterp.c | 191 ++++++++++++++++++++++++++++++++++++++++++
+ ldso/ldso/avr32/resolve.S | 28 ++++++
+ 6 files changed, 482 insertions(+)
+
+Index: uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h 2006-05-05 09:30:43.000000000 +0200
+@@ -0,0 +1,45 @@
++/*
++ * AVR32 ELF shared libary loader support
++ *
++ * Copyright (C) 2005 Atmel Norway
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. The name of the above contributors may not be
++ * used to endorse or promote products derived from this software
++ * without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++static const char *_dl_reltypes_tab[] = {
++ "R_AVR32_NONE",
++ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8",
++ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL",
++ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8",
++ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8",
++ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT",
++ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL",
++ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL",
++ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL",
++ "R_AVR32_HI16", "R_AVR32_LO16",
++ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT",
++ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW",
++ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP",
++ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT",
++ "R_AVR32_ALIGN",
++};
+Index: uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h 2006-05-05 09:29:45.000000000 +0200
+@@ -0,0 +1,110 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * Architecture specific code used by dl-startup.c
++ * Copyright (C) 2005 Atmel Norway
++ */
++
++/* This is the library loader's main entry point. Let _dl_boot2 do its
++ * initializations and jump to the application's entry point
++ * afterwards. */
++asm( " .text\n"
++ " .global _start\n"
++ " .type _start,@function\n"
++ "_start:\n"
++ /* All arguments are on the stack initially */
++ " mov r12, sp\n"
++ " rcall _dl_start\n"
++ /* Returns user entry point in r12. Save it. */
++ " mov r0, r12\n"
++ /* We're PIC, so get the Global Offset Table */
++ " lddpc r6, .L_GOT\n"
++ ".L_RGOT:\n"
++ " rsub r6, pc\n"
++ /* Adjust argc and argv according to _dl_skip_args */
++ " ld.w r1, r6[_dl_skip_args@got]\n"
++ " ld.w r1, r1[0]\n"
++ " ld.w r2, sp++\n"
++ " sub r2, r1\n"
++ " add sp, sp, r1 << 2\n"
++ " st.w --sp, r2\n"
++ /* Load the finalizer function */
++ " ld.w r12, r6[_dl_fini@got]\n"
++ /* Jump to the user's entry point */
++ " mov pc, r0\n\n"
++
++ " .align 2\n"
++ ".L_GOT:"
++ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n"
++ " .size _start, . - _start\n"
++ " .previous\n");
++
++/* Get a pointer to the argv array. On many platforms this can be just
++ * the address if the first argument, on other platforms we need to
++ * do something a little more subtle here. */
++#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1)
++
++
++/* We can't call functions before the GOT has been initialized */
++#define NO_FUNCS_BEFORE_BOOTSTRAP
++
++/*
++ * Relocate the GOT during dynamic loader bootstrap. This will add
++ * the load address to all entries in the GOT, which is necessary
++ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the
++ * GOT.
++ */
++static __always_inline
++void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt)
++{
++ Elf32_Addr i, nr_got;
++ register Elf32_Addr *__r6 __asm__("r6");
++ Elf32_Addr *got = __r6;
++
++ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got);
++ for (i = 2; i < nr_got; i++)
++ got[i] += tpnt->loadaddr;
++}
++
++#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt)
++
++/* Handle relocation of the symbols in the dynamic loader. */
++static __always_inline
++void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr,
++ unsigned long symbol_addr,
++ unsigned long load_addr, Elf32_Sym *symtab)
++{
++ switch(ELF32_R_TYPE(rpnt->r_info)) {
++ case R_AVR32_NONE:
++ break;
++ case R_AVR32_GLOB_DAT:
++ case R_AVR32_JMP_SLOT:
++ *reloc_addr = symbol_addr;
++ break;
++ case R_AVR32_RELATIVE:
++ SEND_STDERR_DEBUG("Applying RELATIVE relocation: ");
++ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0);
++ SEND_STDERR_DEBUG(" + ");
++ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1);
++ *reloc_addr = load_addr + rpnt->r_addend;
++ break;
++ default:
++ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type ");
++ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1);
++ SEND_STDERR("REL, SYMBOL, LOAD: ");
++ SEND_ADDRESS_STDERR(reloc_addr, 0);
++ SEND_STDERR(", ");
++ SEND_ADDRESS_STDERR(symbol_addr, 0);
++ SEND_STDERR(", ");
++ SEND_ADDRESS_STDERR(load_addr, 1);
++ _dl_exit(1);
++ }
++}
++
++/* Transfer control to the user's application, once the dynamic loader
++ * is done. This routine has to exit the current function, then call
++ * the _dl_elf_main function.
++ *
++ * Since our _dl_boot will simply call whatever is returned by
++ * _dl_boot2, we can just return the address we're supposed to
++ * call. */
++#define START() return _dl_elf_main;
+Index: uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h 2006-05-05 09:29:25.000000000 +0200
+@@ -0,0 +1,5 @@
++/* We can't use the real errno in ldso, since it has not yet
++ * been dynamicly linked in yet. */
++extern int _dl_errno;
++#define __set_errno(X) {(_dl_errno) = (X);}
++#include "sys/syscall.h"
+Index: uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h 2006-05-05 09:30:43.000000000 +0200
+@@ -0,0 +1,103 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * Various assembly language/system dependent hacks that are required
++ * so that we can minimize the amount of platform specific code.
++ * Copyright (C) 2004-2005 Atmel Norway
++ */
++
++/* Define this if the system uses RELOCA. */
++#define ELF_USES_RELOCA
++
++#include <elf.h>
++
++#define ARCH_NUM 1
++#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM)
++
++#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \
++ do { \
++ if (dpnt->d_tag == DT_AVR32_GOTSZ) \
++ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \
++ } while (0)
++
++/* Initialization sequence for the application/library GOT. */
++#define INIT_GOT(GOT_BASE,MODULE) \
++ do { \
++ unsigned long i, nr_got; \
++ \
++ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \
++ GOT_BASE[1] = (unsigned long) MODULE; \
++ \
++ /* Add load address displacement to all GOT entries */ \
++ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \
++ for (i = 2; i < nr_got; i++) \
++ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \
++ } while (0)
++
++#define do_rem(result, n, base) ((result) = (n) % (base))
++
++/* Here we define the magic numbers that this dynamic loader should accept */
++#define MAGIC1 EM_AVR32
++#undef MAGIC2
++
++/* Used for error messages */
++#define ELF_TARGET "AVR32"
++
++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got);
++
++/* 4096 bytes alignment */
++#define PAGE_ALIGN 0xfffff000
++#define ADDR_ALIGN 0xfff
++#define OFFS_ALIGN 0x7ffff000
++
++#define elf_machine_type_class(type) \
++ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT)
++
++/* AVR32 doesn't need any COPY relocs */
++#define DL_NO_COPY_RELOCS
++
++/* Return the link-time address of _DYNAMIC. Conveniently, this is the
++ first element of the GOT. This must be inlined in a function which
++ uses global data. */
++static inline Elf32_Addr
++elf_machine_dynamic (void)
++{
++ register Elf32_Addr *got asm ("r6");
++ return *got;
++}
++
++/* Return the run-time load address of the shared object. */
++static inline Elf32_Addr
++elf_machine_load_address (void)
++{
++ extern void __dl_start asm("_dl_start");
++ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start;
++ Elf32_Addr pcrel_addr;
++
++ asm (" lddpc %0, 2f\n"
++ "1: add %0, pc\n"
++ " rjmp 3f\n"
++ " .align 2\n"
++ "2: .long _dl_start - 1b\n"
++ "3:\n"
++ : "=r"(pcrel_addr) : : "cc");
++
++ return pcrel_addr - got_addr;
++}
++
++/*
++ * Perform any RELATIVE relocations specified by DT_RELCOUNT.
++ * Currently, we don't use that tag, but we might in the future as
++ * this would reduce the startup time somewhat (although probably not by much).
++ */
++static inline void
++elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
++ Elf32_Word relative_count)
++{
++ Elf32_Rela *rpnt = (void *)rel_addr;
++
++ do {
++ Elf32_Addr *reloc_addr;
++ reloc_addr = (void *)(load_off + (rpnt++)->r_offset);
++ *reloc_addr = load_off + rpnt->r_addend;
++ } while (--relative_count);
++}
+Index: uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c 2006-05-05 09:30:43.000000000 +0200
+@@ -0,0 +1,191 @@
++/*
++ * AVR32 ELF shared library loader suppport
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. The name of the above contributors may not be
++ * used to endorse or promote products derived from this software
++ * without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got)
++{
++ struct elf_resolve *tpnt = (struct elf_resolve *)got[1];
++ Elf32_Sym *sym;
++ unsigned long local_gotno;
++ unsigned long gotsym;
++ unsigned long new_addr;
++ char *strtab, *symname;
++ unsigned long *entry;
++ unsigned long sym_index = got_offset / 4;
++
++#if 0
++ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO];
++ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM];
++
++ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr))
++ + sym_index;
++ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr);
++ symname = strtab + sym->st_name;
++
++#if 0
++ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name,
++ tpnt->symbol_scope, tpnt,
++ resolver);
++#endif
++
++ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym);
++ *entry = new_addr;
++#endif
++
++ return new_addr;
++}
++
++static int
++_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope,
++ unsigned long rel_addr, unsigned long rel_size,
++ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope,
++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab))
++{
++ Elf32_Sym *symtab;
++ Elf32_Rela *rpnt;
++ char *strtab;
++ int i;
++
++ rpnt = (Elf32_Rela *)rel_addr;
++ rel_size /= sizeof(Elf32_Rela);
++ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB];
++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB];
++
++ for (i = 0; i < rel_size; i++, rpnt++) {
++ int symtab_index, res;
++
++ symtab_index = ELF32_R_SYM(rpnt->r_info);
++
++ debug_sym(symtab, strtab, symtab_index);
++ debug_reloc(symtab, strtab, rpnt);
++
++ res = reloc_func(tpnt, scope, rpnt, symtab, strtab);
++
++ if (res == 0)
++ continue;
++
++ _dl_dprintf(2, "\n%s: ", _dl_progname);
++
++ if (symtab_index)
++ _dl_dprintf(2, "symbol '%s': ",
++ strtab + symtab[symtab_index].st_name);
++
++ if (res < 0) {
++ int reloc_type = ELF32_R_TYPE(rpnt->r_info);
++#if defined(__SUPPORT_LD_DEBUG__)
++ _dl_dprintf(2, "can't handle reloc type %s\n",
++ _dl_reltypes(reloc_type));
++#else
++ _dl_dprintf(2, "can't handle reloc type %x\n",
++ reloc_type);
++#endif
++ _dl_exit(-res);
++ } else {
++ _dl_dprintf(2, "can't resolve symbol\n");
++ return res;
++ }
++ }
++
++ return 0;
++}
++
++static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope,
++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)
++{
++ int reloc_type;
++ int symtab_index;
++ char *symname;
++ unsigned long *reloc_addr;
++ unsigned long symbol_addr;
++#if defined(__SUPPORT_LD_DEBUG__)
++ unsigned long old_val;
++#endif
++
++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset);
++ reloc_type = ELF32_R_TYPE(rpnt->r_info);
++ symtab_index = ELF32_R_SYM(rpnt->r_info);
++ symbol_addr = 0;
++ symname = strtab + symtab[symtab_index].st_name;
++
++ if (symtab_index) {
++ symbol_addr = (unsigned long)
++ _dl_find_hash(strtab + symtab[symtab_index].st_name,
++ tpnt->symbol_scope, tpnt,
++ elf_machine_type_class(reloc_type));
++
++ /* Allow undefined references to weak symbols */
++ if (!symbol_addr &&
++ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) {
++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n",
++ _dl_progname, symname);
++ return 0;
++ }
++ }
++
++#if defined(__SUPPORT_LD_DEBUG__)
++ old_val = *reloc_addr;
++#endif
++ switch (reloc_type) {
++ case R_AVR32_NONE:
++ break;
++ case R_AVR32_GLOB_DAT:
++ case R_AVR32_JMP_SLOT:
++ *reloc_addr = symbol_addr + rpnt->r_addend;
++ break;
++ case R_AVR32_RELATIVE:
++ *reloc_addr = (unsigned long)tpnt->loadaddr
++ + rpnt->r_addend;
++ break;
++ default:
++ return -1;
++ }
++
++#if defined(__SUPPORT_LD_DEBUG__)
++ if (_dl_debug_reloc && _dl_debug_detail)
++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n",
++ old_val, *reloc_addr);
++#endif
++
++ return 0;
++}
++
++void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt,
++ unsigned long rel_addr,
++ unsigned long rel_size)
++{
++ /* TODO: Might want to support this in order to get faster
++ * startup times... */
++}
++
++int _dl_parse_relocation_information(struct dyn_elf *rpnt,
++ unsigned long rel_addr,
++ unsigned long rel_size)
++{
++ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size,
++ _dl_do_reloc);
++}
+Index: uClibc-0.9.28/ldso/ldso/avr32/resolve.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/ldso/ldso/avr32/resolve.S 2006-05-05 09:29:25.000000000 +0200
+@@ -0,0 +1,28 @@
++/*
++ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as
++ * indicated in register r12 and jumps to the resolved address.
++ *
++ * This file is subject to the terms and conditions of the GNU Lesser General
++ * Public License. See the file "COPYING.LIB" in the main directory of this
++ * archive for more details.
++ *
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define ip r5
++
++ .text
++ .global _dl_linux_resolve
++ .type _dl_linux_resolve,@function
++_dl_linux_resolve:
++ /* The PLT code pushed r8 for us. It contains the address of this
++ function's GOT entry, that is entry 0. ip contains the address
++ of the GOT entry of the function we wanted to call. */
++ stm --sp, r9-r12, lr
++ mov r11, r8
++ sub r12, ip, r8
++ rcall _dl_linux_resolver
++ mov ip, r12
++ popm r8-r12,lr
++ mov pc, ip
++ .size _dl_linux_resolve, . - _dl_linux_resolve
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch
new file mode 100644
index 0000000000..222749f3c2
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch
@@ -0,0 +1,23 @@
+Subject: [PATCH] ldso: AVR32 needs CONSTANT_STRING_GOT_FIXUP
+
+Add AVR32 to the list of architectures needing CONSTANT_STRING_GOT_FIXUP.
+
+---
+
+ ldso/include/dl-string.h | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+Index: uClibc-0.9.28/ldso/include/dl-string.h
+===================================================================
+--- uClibc-0.9.28.orig/ldso/include/dl-string.h 2006-02-07 16:58:58.000000000 +0100
++++ uClibc-0.9.28/ldso/include/dl-string.h 2006-02-07 16:59:28.000000000 +0100
+@@ -271,7 +271,8 @@ static __always_inline char * _dl_simple
+ /* On some arches constant strings are referenced through the GOT.
+ * This requires that load_addr must already be defined... */
+ #if defined(mc68000) || defined(__arm__) || defined(__mips__) \
+- || defined(__sh__) || defined(__powerpc__)
++ || defined(__sh__) || defined(__powerpc__) \
++ || defined(__avr32__)
+ # define CONSTANT_STRING_GOT_FIXUP(X) \
+ if ((X) < (const char *) load_addr) (X) += load_addr
+ # define NO_EARLY_SEND_STDERR
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch
new file mode 100644
index 0000000000..0cdc2ccb32
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-avr32-startup-hack.patch
@@ -0,0 +1,40 @@
+Subject: [PATCH] ldso: AVR32 startup hack
+
+AVR32 needs to do both PERFORM_BOOTSTRAP_GOT and a full relocation of
+the GOT. I don't quite remember why, but I think it's because some GOT
+entries just need the load address added to them, while the rest need
+the full relocation code.
+
+This patch should be revisited to figure out whether we're processing
+relocations against undefined symbols and whether that's something we
+should be doing...
+
+---
+
+ ldso/ldso/dl-startup.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+Index: uClibc-0.9.28/ldso/ldso/dl-startup.c
+===================================================================
+--- uClibc-0.9.28.orig/ldso/ldso/dl-startup.c 2006-02-07 16:49:27.000000000 +0100
++++ uClibc-0.9.28/ldso/ldso/dl-startup.c 2006-02-07 17:12:09.000000000 +0100
+@@ -217,7 +217,9 @@ static void * __attribute_used__ _dl_sta
+ /* some arches (like MIPS) we have to tweak the GOT before relocations */
+ PERFORM_BOOTSTRAP_GOT(tpnt);
+
+-#else
++#endif
++
++#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__)
+
+ /* OK, now do the relocations. We do not do a lazy binding here, so
+ that once we are done, we have considerably more flexibility. */
+@@ -259,7 +261,7 @@ static void * __attribute_used__ _dl_sta
+ rel_addr += relative_count * sizeof(ELF_RELOC);;
+ }
+
+- rpnt = (ELF_RELOC *) (rel_addr + load_addr);
++ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */);
+ for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) {
+ reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset);
+ symtab_index = ELF_R_SYM(rpnt->r_info);
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch b/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch
new file mode 100644
index 0000000000..d2838ef197
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/ldso-define-MAP_FAILED.patch
@@ -0,0 +1,23 @@
+Subject: [PATCH] ldso: Define MAP_FAILED for _dl_mmap()
+
+When using mmap2() to emulate mmap(), _dl_mmap() uses MAP_FAILED to
+indicate failure. MAP_FAILED is not defined anywhere, so this patch
+defines it.
+
+---
+
+ ldso/include/dl-syscall.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: uClibc-0.9.28/ldso/include/dl-syscall.h
+===================================================================
+--- uClibc-0.9.28.orig/ldso/include/dl-syscall.h 2006-02-07 16:49:27.000000000 +0100
++++ uClibc-0.9.28/ldso/include/dl-syscall.h 2006-02-07 17:07:06.000000000 +0100
+@@ -132,6 +132,7 @@ static inline _syscall6(__ptr_t, __sysca
+ size_t, len, int, prot, int, flags, int, fd, off_t, offset);
+ /*always 12, even on architectures where PAGE_SHIFT != 12 */
+ #define MMAP2_PAGE_SHIFT 12
++#define MAP_FAILED ((void *) -1)
+ static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
+ int flags, int fd, unsigned long offset)
+ {
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch b/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch
new file mode 100644
index 0000000000..a383a6e62d
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/let-optimized-stringops-override-default-ones.patch
@@ -0,0 +1,28 @@
+From 7b2f125425cf777e7937b533217588e27952b87d Mon Sep 17 00:00:00 2001
+From: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date: Mon, 7 Aug 2006 11:12:50 +0200
+Subject: [PATCH] Let optimized stringops override default ones
+
+The default, slow stringops must be archived _before_ the optimized
+stringops if there is to be any point doing the optimizations in the
+first place.
+---
+ libc/Makefile | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/libc/Makefile b/libc/Makefile
+index 31e4bab..687eac5 100644
+--- a/libc/Makefile
++++ b/libc/Makefile
+@@ -59,7 +59,7 @@ # will evaluate to no files :(.
+ $(AR) dN 2 $(LIBNAME) $$objs && \
+ $(AR) dN 2 $(LIBNAME) $$objs
+ @for objfile in obj.signal \
+- obj.string.generic obj.string.$(TARGET_ARCH) obj.string \
++ obj.string obj.string.generic obj.string.$(TARGET_ARCH) \
+ obj.sysdeps.common obj.sysdeps.$(TARGET_ARCH) ; do \
+ if [ -e $$objfile ] ; then \
+ if [ "$(MAKE_IS_SILENT)" = "n" ] ; then \
+--
+1.4.1.1
+
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch b/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch
new file mode 100644
index 0000000000..5277677ee5
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/libpthread-avr32.patch
@@ -0,0 +1,105 @@
+Subject: [PATCH] libpthread: AVR32 support
+
+Implement pt-machine.h for AVR32.
+---
+
+ libpthread/linuxthreads/sysdeps/avr32/pt-machine.h | 92 +++++++++++++++++++++
+ 1 file changed, 92 insertions(+)
+
+Index: uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-02-07 17:14:47.000000000 +0100
+@@ -0,0 +1,92 @@
++/* Machine-dependent pthreads configuration and inline functions.
++
++ Copyright (C) 2005 Atmel Norway
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public License as
++ published by the Free Software Foundation; either version 2.1 of the
++ License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++#ifndef _PT_MACHINE_H
++#define _PT_MACHINE_H 1
++
++#include <features.h>
++
++static inline int
++_test_and_set (int *p, int v) __THROW
++{
++ int result;
++
++ __asm__ __volatile__(
++ "/* Inline test and set */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " tst %0, %3\n"
++ " breq 2f\n"
++ " stcond %1, %3\n"
++ " brne 1b\n"
++ "2:"
++ : "=&r"(result), "=m"(*p)
++ : "m"(*p), "r"(v)
++ : "memory", "cc");
++
++ return result;
++}
++
++#ifndef PT_EI
++# define PT_EI extern inline
++#endif
++
++extern long int testandset (int *spinlock);
++extern int __compare_and_swap (long int *p, long int oldval, long int newval);
++
++/* Spinlock implementation; required. */
++PT_EI long int
++testandset (int *spinlock)
++{
++ return _test_and_set(spinlock, 1);
++}
++
++
++/* Get some notion of the current stack. Need not be exactly the top
++ of the stack, just something somewhere in the current frame. */
++#define CURRENT_STACK_FRAME stack_pointer
++register char * stack_pointer __asm__ ("sp");
++
++/* Compare-and-swap for semaphores. */
++
++#define HAS_COMPARE_AND_SWAP
++PT_EI int
++__compare_and_swap(long int *p, long int oldval, long int newval)
++{
++ long int result, tmp;
++
++ __asm__ __volatile__(
++ "/* Inline compare and swap */\n"
++ "1: ssrf 5\n"
++ " ld.w %1, %3\n"
++ " cp.w %1, %5\n"
++ " sreq %0\n"
++ " brne 2f\n"
++ " stcond %2, %4\n"
++ " brne 1b\n"
++ "2:"
++ : "=&r"(result), "=&r"(tmp), "=m"(*p)
++ : "m"(*p), "r"(newval), "r"(oldval)
++ : "cc", "memory");
++
++ return result;
++}
++
++#endif /* pt-machine.h */
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch b/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch
new file mode 100644
index 0000000000..9bfdc53cfc
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/no-create_module-on-avr32.patch
@@ -0,0 +1,27 @@
+Subject: [PATCH] Don't include create_module() for AVR32
+
+The create_module() system call is obsolete in Linux 2.6, so the
+AVR32 kernel doesn't even have it.
+
+Come to think about it, this should be completely unnecessary as the
+create_module function is only a stub when __NR_create_module is
+undefined.
+---
+
+ libc/sysdeps/linux/common/create_module.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+Index: uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c
+===================================================================
+--- uClibc-0.9.28.orig/libc/sysdeps/linux/common/create_module.c 2006-02-07 16:48:38.000000000 +0100
++++ uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c 2006-02-07 17:17:14.000000000 +0100
+@@ -61,7 +61,8 @@ unsigned long create_module(const char *
+ {
+ return __create_module(name, size, 0, 0);
+ }
+-#else
++/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */
++#elif !defined(__avr32__)
+ /* Sparc, MIPS, etc don't mistake return values for errors. */
+ _syscall2(unsigned long, create_module, const char *, name, size_t, size);
+ #endif
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch b/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch
new file mode 100644
index 0000000000..9f27f68f0a
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch
@@ -0,0 +1,48 @@
+--- a/extra/scripts/fix_includes.sh 2005-08-18 00:49:41.000000000 +0200
++++ b/extra/scripts/fix_includes.sh 2006-09-27 13:23:12.000000000 +0200
+@@ -78,36 +78,6 @@ if [ ! -d "$KERNEL_SOURCE" ]; then
+ exit 1;
+ fi;
+
+-if [ -f "$KERNEL_SOURCE/Makefile" ] ; then
+-# set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION
+-eval `sed -n -e 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' -e 's/^\([A-Z]*\) = \(-[-a-z0-9]*\)$/\1=\2/p' $KERNEL_SOURCE/Makefile`
+-else
+-ver=`grep UTS_RELEASE $KERNEL_SOURCE/include/linux/version.h | cut -d '"' -f 2`
+-VERSION=`echo "$ver" | cut -d '.' -f 1`
+-PATCHLEVEL=`echo "$ver" | cut -d '.' -f 2`
+-if echo "$ver" | grep -q '-' ; then
+-SUBLEVEL=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.//" | cut -d '-' -f 1`
+-EXTRAVERSION=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.${SUBLEVEL}-//"`
+-else
+-SUBLEVEL=`echo "$ver" | cut -d '.' -f 3`
+-#EXTRAVERSION=
+-fi
+-fi
+-if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ]
+-then
+- echo "Unable to determine version for kernel headers"
+- echo -e "\tprovided in directory $KERNEL_SOURCE"
+- exit 1
+-fi
+-
+-if [ "$MAKE_IS_SILENT" != "y" ]; then
+-echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION}"
+-echo -e "\n"
+-echo "Using kernel headers from $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} for architecture '$TARGET_ARCH'"
+-echo -e "\tprovided in directory $KERNEL_SOURCE"
+-echo -e "\n"
+-fi
+-
+ # Create a symlink to include/asm
+
+ rm -f include/asm*
+@@ -172,7 +142,7 @@ fi;
+
+
+ # Annoyingly, 2.6.x kernel headers also need an include/asm-generic/ directory
+-if [ $VERSION -eq 2 ] && [ $PATCHLEVEL -ge 6 ] ; then
++if [ -d $KERNEL_SOURCE/include/asm-generic ] ; then
+ ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic
+ fi;
+
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch b/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch
new file mode 100644
index 0000000000..ae6de2b102
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/sync-fcntl-h-with-linux-kernel.patch
@@ -0,0 +1,54 @@
+---
+ libc/sysdeps/linux/avr32/bits/fcntl.h | 33 +++++++++++++++++----------------
+ 1 file changed, 17 insertions(+), 16 deletions(-)
+
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h
+===================================================================
+--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-11-23 17:38:30.000000000 +0100
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-11-23 17:52:15.000000000 +0100
+@@ -11,28 +11,29 @@
+
+ /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
+ located on an ext2 file system */
+-#define O_ACCMODE 0003
+-#define O_RDONLY 00
+-#define O_WRONLY 01
+-#define O_RDWR 02
+-#define O_CREAT 0100 /* not fcntl */
+-#define O_EXCL 0200 /* not fcntl */
+-#define O_NOCTTY 0400 /* not fcntl */
+-#define O_TRUNC 01000 /* not fcntl */
+-#define O_APPEND 02000
+-#define O_NONBLOCK 04000
++#define O_ACCMODE 00000003
++#define O_RDONLY 00000000
++#define O_WRONLY 00000001
++#define O_RDWR 00000002
++#define O_CREAT 00000100 /* not fcntl */
++#define O_EXCL 00000200 /* not fcntl */
++#define O_NOCTTY 00000400 /* not fcntl */
++#define O_TRUNC 00001000 /* not fcntl */
++#define O_APPEND 00002000
++#define O_NONBLOCK 00004000
+ #define O_NDELAY O_NONBLOCK
+-#define O_SYNC 010000
+-#define O_ASYNC 020000
++#define O_SYNC 00010000
++#define O_ASYNC 00020000
+
+ #ifdef __USE_GNU
+-# define O_DIRECTORY 040000 /* must be a directory */
+-# define O_NOFOLLOW 0100000 /* don't follow links */
+-# define O_DIRECT 0200000 /* direct disk access */
++# define O_DIRECT 00040000 /* must be a directory */
++# define O_DIRECTORY 00200000 /* direct disk access */
++# define O_NOFOLLOW 00400000 /* don't follow links */
++# define O_NOATIME 01000000 /* don't set atime */
+ #endif
+
+ #ifdef __USE_LARGEFILE64
+-# define O_LARGEFILE 0400000
++# define O_LARGEFILE 00100000
+ #endif
+
+ /* For now Linux has synchronisity options for data and read operations.
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch
new file mode 100644
index 0000000000..430b54c1c1
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20060621.patch
@@ -0,0 +1,4322 @@
+diff -Nur uClibc-0.9.28/extra/Configs/Config.avr32 uClibc-0.9.28-avr32-20060621/extra/Configs/Config.avr32
+--- uClibc-0.9.28/extra/Configs/Config.avr32 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/extra/Configs/Config.avr32 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,38 @@
++#
++# For a description of the syntax of this configuration file,
++# see extra/config/Kconfig-language.txt
++#
++
++config HAVE_ELF
++ bool
++ default y
++
++config TARGET_ARCH
++ default "avr32"
++
++config ARCH_CFLAGS
++ string
++
++config ARCH_LDFLAGS
++ string
++
++config LIBGCC_CFLAGS
++ string
++
++config ARCH_SUPPORTS_BIG_ENDIAN
++ bool
++ default y
++
++config UCLIBC_COMPLETELY_PIC
++ select FORCE_SHAREABLE_TEXT_SEGMENTS
++ bool
++ default y
++
++choice
++ prompt "Target CPU Type"
++ default CONFIG_AP7000
++
++config CONFIG_AP7000
++ bool "AP7000"
++
++endchoice
+diff -Nur uClibc-0.9.28/extra/Configs/Config.in uClibc-0.9.28-avr32-20060621/extra/Configs/Config.in
+--- uClibc-0.9.28/extra/Configs/Config.in 2005-08-18 00:49:41.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/extra/Configs/Config.in 2006-06-21 11:35:56.000000000 +0200
+@@ -16,6 +16,9 @@
+ config TARGET_arm
+ bool "arm"
+
++config TARGET_avr32
++ bool "avr32"
++
+ config TARGET_bfin
+ bool "bfin"
+
+@@ -83,6 +86,10 @@
+ source "extra/Configs/Config.arm"
+ endif
+
++if TARGET_avr32
++source "extra/Configs/Config.avr32"
++endif
++
+ if TARGET_bfin
+ source "extra/Configs/Config.bfin"
+ endif
+diff -Nur uClibc-0.9.28/include/elf.h uClibc-0.9.28-avr32-20060621/include/elf.h
+--- uClibc-0.9.28/include/elf.h 2005-08-18 00:49:41.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/include/elf.h 2006-06-21 11:35:56.000000000 +0200
+@@ -261,6 +261,8 @@
+ #define EM_NIOS32 0xfebb /* Altera Nios 32 */
+ #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */
+
++#define EM_AVR32 0x18ad
++
+ /* V850 backend magic number. Written in the absense of an ABI. */
+ #define EM_CYGNUS_V850 0x9080
+
+@@ -2687,6 +2689,55 @@
+ /* Keep this the last entry. */
+ #define R_V850_NUM 25
+
++/* Atmel AVR32 relocations. */
++#define R_AVR32_NONE 0
++#define R_AVR32_32 1
++#define R_AVR32_16 2
++#define R_AVR32_8 3
++#define R_AVR32_32_PCREL 4
++#define R_AVR32_16_PCREL 5
++#define R_AVR32_8_PCREL 6
++#define R_AVR32_DIFF32 7
++#define R_AVR32_DIFF16 8
++#define R_AVR32_DIFF8 9
++#define R_AVR32_GOT32 10
++#define R_AVR32_GOT16 11
++#define R_AVR32_GOT8 12
++#define R_AVR32_21S 13
++#define R_AVR32_16U 14
++#define R_AVR32_16S 15
++#define R_AVR32_8S 16
++#define R_AVR32_8S_EXT 17
++#define R_AVR32_22H_PCREL 18
++#define R_AVR32_18W_PCREL 19
++#define R_AVR32_16B_PCREL 20
++#define R_AVR32_16N_PCREL 21
++#define R_AVR32_14UW_PCREL 22
++#define R_AVR32_11H_PCREL 23
++#define R_AVR32_10UW_PCREL 24
++#define R_AVR32_9H_PCREL 25
++#define R_AVR32_9UW_PCREL 26
++#define R_AVR32_HI16 27
++#define R_AVR32_LO16 28
++#define R_AVR32_GOTPC 29
++#define R_AVR32_GOTCALL 30
++#define R_AVR32_LDA_GOT 31
++#define R_AVR32_GOT21S 32
++#define R_AVR32_GOT18SW 33
++#define R_AVR32_GOT16S 34
++#define R_AVR32_GOT7UW 35
++#define R_AVR32_32_CPENT 36
++#define R_AVR32_CPCALL 37
++#define R_AVR32_16_CP 38
++#define R_AVR32_9W_CP 39
++#define R_AVR32_RELATIVE 40
++#define R_AVR32_GLOB_DAT 41
++#define R_AVR32_JMP_SLOT 42
++#define R_AVR32_ALIGN 43
++#define R_AVR32_NUM 44
++
++/* AVR32 dynamic tags */
++#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */
+
+ #define R_H8_NONE 0
+ #define R_H8_DIR32 1
+diff -Nur uClibc-0.9.28/ldso/include/dl-string.h uClibc-0.9.28-avr32-20060621/ldso/include/dl-string.h
+--- uClibc-0.9.28/ldso/include/dl-string.h 2005-08-18 00:49:41.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/ldso/include/dl-string.h 2006-06-21 11:35:57.000000000 +0200
+@@ -134,7 +134,7 @@
+ } while (1);
+ }
+
+-static inline void * _dl_memcpy(void * dst, const void * src, size_t len)
++static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len)
+ {
+ register char *a = dst-1;
+ register const char *b = src-1;
+@@ -271,7 +271,8 @@
+ /* On some arches constant strings are referenced through the GOT.
+ * This requires that load_addr must already be defined... */
+ #if defined(mc68000) || defined(__arm__) || defined(__mips__) \
+- || defined(__sh__) || defined(__powerpc__)
++ || defined(__sh__) || defined(__powerpc__) \
++ || defined(__avr32__)
+ # define CONSTANT_STRING_GOT_FIXUP(X) \
+ if ((X) < (const char *) load_addr) (X) += load_addr
+ # define NO_EARLY_SEND_STDERR
+diff -Nur uClibc-0.9.28/ldso/include/dl-syscall.h uClibc-0.9.28-avr32-20060621/ldso/include/dl-syscall.h
+--- uClibc-0.9.28/ldso/include/dl-syscall.h 2005-08-18 00:49:41.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/ldso/include/dl-syscall.h 2006-06-21 11:35:57.000000000 +0200
+@@ -60,59 +60,59 @@
+ dynamic linking at all, so we cannot return any error codes.
+ We just punt if there is an error. */
+ #define __NR__dl_exit __NR_exit
+-static inline _syscall1(void, _dl_exit, int, status);
++static __always_inline _syscall1(void, _dl_exit, int, status);
+
+ #define __NR__dl_close __NR_close
+-static inline _syscall1(int, _dl_close, int, fd);
++static __always_inline _syscall1(int, _dl_close, int, fd);
+
+ #define __NR__dl_open __NR_open
+-static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode);
++static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode);
+
+ #define __NR__dl_write __NR_write
+-static inline _syscall3(unsigned long, _dl_write, int, fd,
++static __always_inline _syscall3(unsigned long, _dl_write, int, fd,
+ const void *, buf, unsigned long, count);
+
+ #define __NR__dl_read __NR_read
+-static inline _syscall3(unsigned long, _dl_read, int, fd,
++static __always_inline _syscall3(unsigned long, _dl_read, int, fd,
+ const void *, buf, unsigned long, count);
+
+ #define __NR__dl_mprotect __NR_mprotect
+-static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot);
++static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot);
+
+ #define __NR__dl_stat __NR_stat
+-static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf);
++static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf);
+
+ #define __NR__dl_munmap __NR_munmap
+-static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length);
++static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length);
+
+ #define __NR__dl_getuid __NR_getuid
+-static inline _syscall0(uid_t, _dl_getuid);
++static __always_inline _syscall0(uid_t, _dl_getuid);
+
+ #define __NR__dl_geteuid __NR_geteuid
+-static inline _syscall0(uid_t, _dl_geteuid);
++static __always_inline _syscall0(uid_t, _dl_geteuid);
+
+ #define __NR__dl_getgid __NR_getgid
+-static inline _syscall0(gid_t, _dl_getgid);
++static __always_inline _syscall0(gid_t, _dl_getgid);
+
+ #define __NR__dl_getegid __NR_getegid
+-static inline _syscall0(gid_t, _dl_getegid);
++static __always_inline _syscall0(gid_t, _dl_getegid);
+
+ #define __NR__dl_getpid __NR_getpid
+-static inline _syscall0(gid_t, _dl_getpid);
++static __always_inline _syscall0(gid_t, _dl_getpid);
+
+ #define __NR__dl_readlink __NR_readlink
+-static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz);
++static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz);
+
+ #ifdef __NR_mmap
+ #ifdef MMAP_HAS_6_ARGS
+ #define __NR__dl_mmap __NR_mmap
+-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
++static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
+ int, prot, int, flags, int, fd, off_t, offset);
+ #else
+ #define __NR__dl_mmap_real __NR_mmap
+-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
++static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
+
+-static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot,
+ int flags, int fd, unsigned long offset)
+ {
+ unsigned long buffer[6];
+@@ -128,11 +128,12 @@
+ #endif
+ #elif defined __NR_mmap2
+ #define __NR___syscall_mmap2 __NR_mmap2
+-static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr,
++static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr,
+ size_t, len, int, prot, int, flags, int, fd, off_t, offset);
+ /*always 12, even on architectures where PAGE_SHIFT != 12 */
+ #define MMAP2_PAGE_SHIFT 12
+-static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
++#define MAP_FAILED ((void *) -1)
++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot,
+ int flags, int fd, unsigned long offset)
+ {
+ if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1))
+diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-debug.h
+--- uClibc-0.9.28/ldso/ldso/avr32/dl-debug.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-debug.h 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,45 @@
++/*
++ * AVR32 ELF shared libary loader support
++ *
++ * Copyright (C) 2005 Atmel Norway
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. The name of the above contributors may not be
++ * used to endorse or promote products derived from this software
++ * without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++static const char *_dl_reltypes_tab[] = {
++ "R_AVR32_NONE",
++ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8",
++ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL",
++ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8",
++ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8",
++ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT",
++ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL",
++ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL",
++ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL",
++ "R_AVR32_HI16", "R_AVR32_LO16",
++ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT",
++ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW",
++ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP",
++ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT",
++ "R_AVR32_ALIGN",
++};
+diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-startup.h
+--- uClibc-0.9.28/ldso/ldso/avr32/dl-startup.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-startup.h 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,110 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * Architecture specific code used by dl-startup.c
++ * Copyright (C) 2005 Atmel Norway
++ */
++
++/* This is the library loader's main entry point. Let _dl_boot2 do its
++ * initializations and jump to the application's entry point
++ * afterwards. */
++asm( " .text\n"
++ " .global _start\n"
++ " .type _start,@function\n"
++ "_start:\n"
++ /* All arguments are on the stack initially */
++ " mov r12, sp\n"
++ " rcall _dl_start\n"
++ /* Returns user entry point in r12. Save it. */
++ " mov r0, r12\n"
++ /* We're PIC, so get the Global Offset Table */
++ " lddpc r6, .L_GOT\n"
++ ".L_RGOT:\n"
++ " rsub r6, pc\n"
++ /* Adjust argc and argv according to _dl_skip_args */
++ " ld.w r1, r6[_dl_skip_args@got]\n"
++ " ld.w r1, r1[0]\n"
++ " ld.w r2, sp++\n"
++ " sub r2, r1\n"
++ " add sp, sp, r1 << 2\n"
++ " st.w --sp, r2\n"
++ /* Load the finalizer function */
++ " ld.w r12, r6[_dl_fini@got]\n"
++ /* Jump to the user's entry point */
++ " mov pc, r0\n\n"
++
++ " .align 2\n"
++ ".L_GOT:"
++ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n"
++ " .size _start, . - _start\n"
++ " .previous\n");
++
++/* Get a pointer to the argv array. On many platforms this can be just
++ * the address if the first argument, on other platforms we need to
++ * do something a little more subtle here. */
++#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1)
++
++
++/* We can't call functions before the GOT has been initialized */
++#define NO_FUNCS_BEFORE_BOOTSTRAP
++
++/*
++ * Relocate the GOT during dynamic loader bootstrap. This will add
++ * the load address to all entries in the GOT, which is necessary
++ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the
++ * GOT.
++ */
++static __always_inline
++void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt)
++{
++ Elf32_Addr i, nr_got;
++ register Elf32_Addr *__r6 __asm__("r6");
++ Elf32_Addr *got = __r6;
++
++ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got);
++ for (i = 2; i < nr_got; i++)
++ got[i] += tpnt->loadaddr;
++}
++
++#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt)
++
++/* Handle relocation of the symbols in the dynamic loader. */
++static __always_inline
++void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr,
++ unsigned long symbol_addr,
++ unsigned long load_addr, Elf32_Sym *symtab)
++{
++ switch(ELF32_R_TYPE(rpnt->r_info)) {
++ case R_AVR32_NONE:
++ break;
++ case R_AVR32_GLOB_DAT:
++ case R_AVR32_JMP_SLOT:
++ *reloc_addr = symbol_addr;
++ break;
++ case R_AVR32_RELATIVE:
++ SEND_STDERR_DEBUG("Applying RELATIVE relocation: ");
++ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0);
++ SEND_STDERR_DEBUG(" + ");
++ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1);
++ *reloc_addr = load_addr + rpnt->r_addend;
++ break;
++ default:
++ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type ");
++ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1);
++ SEND_STDERR("REL, SYMBOL, LOAD: ");
++ SEND_ADDRESS_STDERR(reloc_addr, 0);
++ SEND_STDERR(", ");
++ SEND_ADDRESS_STDERR(symbol_addr, 0);
++ SEND_STDERR(", ");
++ SEND_ADDRESS_STDERR(load_addr, 1);
++ _dl_exit(1);
++ }
++}
++
++/* Transfer control to the user's application, once the dynamic loader
++ * is done. This routine has to exit the current function, then call
++ * the _dl_elf_main function.
++ *
++ * Since our _dl_boot will simply call whatever is returned by
++ * _dl_boot2, we can just return the address we're supposed to
++ * call. */
++#define START() return _dl_elf_main;
+diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-syscalls.h
+--- uClibc-0.9.28/ldso/ldso/avr32/dl-syscalls.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-syscalls.h 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,5 @@
++/* We can't use the real errno in ldso, since it has not yet
++ * been dynamicly linked in yet. */
++extern int _dl_errno;
++#define __set_errno(X) {(_dl_errno) = (X);}
++#include "sys/syscall.h"
+diff -Nur uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-sysdep.h
+--- uClibc-0.9.28/ldso/ldso/avr32/dl-sysdep.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/dl-sysdep.h 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,103 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * Various assembly language/system dependent hacks that are required
++ * so that we can minimize the amount of platform specific code.
++ * Copyright (C) 2004-2005 Atmel Norway
++ */
++
++/* Define this if the system uses RELOCA. */
++#define ELF_USES_RELOCA
++
++#include <elf.h>
++
++#define ARCH_NUM 1
++#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM)
++
++#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \
++ do { \
++ if (dpnt->d_tag == DT_AVR32_GOTSZ) \
++ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \
++ } while (0)
++
++/* Initialization sequence for the application/library GOT. */
++#define INIT_GOT(GOT_BASE,MODULE) \
++ do { \
++ unsigned long i, nr_got; \
++ \
++ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \
++ GOT_BASE[1] = (unsigned long) MODULE; \
++ \
++ /* Add load address displacement to all GOT entries */ \
++ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \
++ for (i = 2; i < nr_got; i++) \
++ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \
++ } while (0)
++
++#define do_rem(result, n, base) ((result) = (n) % (base))
++
++/* Here we define the magic numbers that this dynamic loader should accept */
++#define MAGIC1 EM_AVR32
++#undef MAGIC2
++
++/* Used for error messages */
++#define ELF_TARGET "AVR32"
++
++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got);
++
++/* 4096 bytes alignment */
++#define PAGE_ALIGN 0xfffff000
++#define ADDR_ALIGN 0xfff
++#define OFFS_ALIGN 0x7ffff000
++
++#define elf_machine_type_class(type) \
++ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT)
++
++/* AVR32 doesn't need any COPY relocs */
++#define DL_NO_COPY_RELOCS
++
++/* Return the link-time address of _DYNAMIC. Conveniently, this is the
++ first element of the GOT. This must be inlined in a function which
++ uses global data. */
++static inline Elf32_Addr
++elf_machine_dynamic (void)
++{
++ register Elf32_Addr *got asm ("r6");
++ return *got;
++}
++
++/* Return the run-time load address of the shared object. */
++static inline Elf32_Addr
++elf_machine_load_address (void)
++{
++ extern void __dl_start asm("_dl_start");
++ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start;
++ Elf32_Addr pcrel_addr;
++
++ asm (" lddpc %0, 2f\n"
++ "1: add %0, pc\n"
++ " rjmp 3f\n"
++ " .align 2\n"
++ "2: .long _dl_start - 1b\n"
++ "3:\n"
++ : "=r"(pcrel_addr) : : "cc");
++
++ return pcrel_addr - got_addr;
++}
++
++/*
++ * Perform any RELATIVE relocations specified by DT_RELCOUNT.
++ * Currently, we don't use that tag, but we might in the future as
++ * this would reduce the startup time somewhat (although probably not by much).
++ */
++static inline void
++elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
++ Elf32_Word relative_count)
++{
++ Elf32_Rela *rpnt = (void *)rel_addr;
++
++ do {
++ Elf32_Addr *reloc_addr;
++ reloc_addr = (void *)(load_off + (rpnt++)->r_offset);
++ *reloc_addr = load_off + rpnt->r_addend;
++ } while (--relative_count);
++}
+diff -Nur uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/elfinterp.c
+--- uClibc-0.9.28/ldso/ldso/avr32/elfinterp.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/elfinterp.c 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,191 @@
++/*
++ * AVR32 ELF shared library loader suppport
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. The name of the above contributors may not be
++ * used to endorse or promote products derived from this software
++ * without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got)
++{
++ struct elf_resolve *tpnt = (struct elf_resolve *)got[1];
++ Elf32_Sym *sym;
++ unsigned long local_gotno;
++ unsigned long gotsym;
++ unsigned long new_addr;
++ char *strtab, *symname;
++ unsigned long *entry;
++ unsigned long sym_index = got_offset / 4;
++
++#if 0
++ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO];
++ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM];
++
++ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr))
++ + sym_index;
++ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr);
++ symname = strtab + sym->st_name;
++
++#if 0
++ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name,
++ tpnt->symbol_scope, tpnt,
++ resolver);
++#endif
++
++ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym);
++ *entry = new_addr;
++#endif
++
++ return new_addr;
++}
++
++static int
++_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope,
++ unsigned long rel_addr, unsigned long rel_size,
++ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope,
++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab))
++{
++ Elf32_Sym *symtab;
++ Elf32_Rela *rpnt;
++ char *strtab;
++ int i;
++
++ rpnt = (Elf32_Rela *)rel_addr;
++ rel_size /= sizeof(Elf32_Rela);
++ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB];
++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB];
++
++ for (i = 0; i < rel_size; i++, rpnt++) {
++ int symtab_index, res;
++
++ symtab_index = ELF32_R_SYM(rpnt->r_info);
++
++ debug_sym(symtab, strtab, symtab_index);
++ debug_reloc(symtab, strtab, rpnt);
++
++ res = reloc_func(tpnt, scope, rpnt, symtab, strtab);
++
++ if (res == 0)
++ continue;
++
++ _dl_dprintf(2, "\n%s: ", _dl_progname);
++
++ if (symtab_index)
++ _dl_dprintf(2, "symbol '%s': ",
++ strtab + symtab[symtab_index].st_name);
++
++ if (res < 0) {
++ int reloc_type = ELF32_R_TYPE(rpnt->r_info);
++#if defined(__SUPPORT_LD_DEBUG__)
++ _dl_dprintf(2, "can't handle reloc type %s\n",
++ _dl_reltypes(reloc_type));
++#else
++ _dl_dprintf(2, "can't handle reloc type %x\n",
++ reloc_type);
++#endif
++ _dl_exit(-res);
++ } else {
++ _dl_dprintf(2, "can't resolve symbol\n");
++ return res;
++ }
++ }
++
++ return 0;
++}
++
++static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope,
++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)
++{
++ int reloc_type;
++ int symtab_index;
++ char *symname;
++ unsigned long *reloc_addr;
++ unsigned long symbol_addr;
++#if defined(__SUPPORT_LD_DEBUG__)
++ unsigned long old_val;
++#endif
++
++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset);
++ reloc_type = ELF32_R_TYPE(rpnt->r_info);
++ symtab_index = ELF32_R_SYM(rpnt->r_info);
++ symbol_addr = 0;
++ symname = strtab + symtab[symtab_index].st_name;
++
++ if (symtab_index) {
++ symbol_addr = (unsigned long)
++ _dl_find_hash(strtab + symtab[symtab_index].st_name,
++ tpnt->symbol_scope, tpnt,
++ elf_machine_type_class(reloc_type));
++
++ /* Allow undefined references to weak symbols */
++ if (!symbol_addr &&
++ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) {
++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n",
++ _dl_progname, symname);
++ return 0;
++ }
++ }
++
++#if defined(__SUPPORT_LD_DEBUG__)
++ old_val = *reloc_addr;
++#endif
++ switch (reloc_type) {
++ case R_AVR32_NONE:
++ break;
++ case R_AVR32_GLOB_DAT:
++ case R_AVR32_JMP_SLOT:
++ *reloc_addr = symbol_addr + rpnt->r_addend;
++ break;
++ case R_AVR32_RELATIVE:
++ *reloc_addr = (unsigned long)tpnt->loadaddr
++ + rpnt->r_addend;
++ break;
++ default:
++ return -1;
++ }
++
++#if defined(__SUPPORT_LD_DEBUG__)
++ if (_dl_debug_reloc && _dl_debug_detail)
++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n",
++ old_val, *reloc_addr);
++#endif
++
++ return 0;
++}
++
++void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt,
++ unsigned long rel_addr,
++ unsigned long rel_size)
++{
++ /* TODO: Might want to support this in order to get faster
++ * startup times... */
++}
++
++int _dl_parse_relocation_information(struct dyn_elf *rpnt,
++ unsigned long rel_addr,
++ unsigned long rel_size)
++{
++ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size,
++ _dl_do_reloc);
++}
+diff -Nur uClibc-0.9.28/ldso/ldso/avr32/resolve.S uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/resolve.S
+--- uClibc-0.9.28/ldso/ldso/avr32/resolve.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/avr32/resolve.S 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,28 @@
++/*
++ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as
++ * indicated in register r12 and jumps to the resolved address.
++ *
++ * This file is subject to the terms and conditions of the GNU Lesser General
++ * Public License. See the file "COPYING.LIB" in the main directory of this
++ * archive for more details.
++ *
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define ip r5
++
++ .text
++ .global _dl_linux_resolve
++ .type _dl_linux_resolve,@function
++_dl_linux_resolve:
++ /* The PLT code pushed r8 for us. It contains the address of this
++ function's GOT entry, that is entry 0. ip contains the address
++ of the GOT entry of the function we wanted to call. */
++ stm --sp, r9-r12, lr
++ mov r11, r8
++ sub r12, ip, r8
++ rcall _dl_linux_resolver
++ mov ip, r12
++ popm r8-r12,lr
++ mov pc, ip
++ .size _dl_linux_resolve, . - _dl_linux_resolve
+diff -Nur uClibc-0.9.28/ldso/ldso/dl-startup.c uClibc-0.9.28-avr32-20060621/ldso/ldso/dl-startup.c
+--- uClibc-0.9.28/ldso/ldso/dl-startup.c 2005-08-18 00:49:41.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/ldso/ldso/dl-startup.c 2006-06-21 11:35:57.000000000 +0200
+@@ -217,7 +217,9 @@
+ /* some arches (like MIPS) we have to tweak the GOT before relocations */
+ PERFORM_BOOTSTRAP_GOT(tpnt);
+
+-#else
++#endif
++
++#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__)
+
+ /* OK, now do the relocations. We do not do a lazy binding here, so
+ that once we are done, we have considerably more flexibility. */
+@@ -259,7 +261,7 @@
+ rel_addr += relative_count * sizeof(ELF_RELOC);;
+ }
+
+- rpnt = (ELF_RELOC *) (rel_addr + load_addr);
++ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */);
+ for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) {
+ reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset);
+ symtab_index = ELF_R_SYM(rpnt->r_info);
+diff -Nur uClibc-0.9.28/libc/string/avr32/bcopy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/bcopy.S
+--- uClibc-0.9.28/libc/string/avr32/bcopy.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/bcopy.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,15 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++ .text
++ .global bcopy
++ .type bcopy, @function
++ .align 1
++bcopy:
++ /* Swap the first two arguments */
++ eor r11, r12
++ eor r12, r11
++ eor r11, r12
++ rjmp memmove
++ .size bcopy, . - bcopy
+diff -Nur uClibc-0.9.28/libc/string/avr32/bzero.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/bzero.S
+--- uClibc-0.9.28/libc/string/avr32/bzero.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/bzero.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++ .text
++ .global bzero
++ .type bzero, @function
++ .align 1
++bzero:
++ mov r10, r11
++ mov r11, 0
++ rjmp memset
+diff -Nur uClibc-0.9.28/libc/string/avr32/Makefile uClibc-0.9.28-avr32-20060621/libc/string/avr32/Makefile
+--- uClibc-0.9.28/libc/string/avr32/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/Makefile 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,45 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2000-2003 Erik Andersen <andersen@uclibc.org>
++#
++# This program is free software; you can redistribute it and/or modify it under
++# the terms of the GNU Library General Public License as published by the Free
++# Software Foundation; either version 2 of the License, or (at your option) any
++# later version.
++#
++# This program is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++# details.
++#
++# You should have received a copy of the GNU Library General Public License
++# along with this program; if not, write to the Free Software Foundation, Inc.,
++# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++TOPDIR=../../../
++include $(TOPDIR)Rules.mak
++
++SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S
++SSRC += memset.S strcmp.S strlen.S
++# memchr.S, strcat.S, strcpy.S, strncpy.S is broken
++SOBJS := $(addprefix __avr32_,$(addsuffix .o,$(basename $(SSRC))))
++
++all: $(SOBJS) $(LIBC)
++
++$(LIBC): ar-target
++
++ar-target: $(SOBJS)
++ $(AR) $(ARFLAGS) $(LIBC) $(SOBJS)
++
++$(SOBJS): __avr32_%.o: %.S
++ $(CC) $(ASFLAGS) -D$*=__avr32_$* -c $< -o $@
++ $(STRIPTOOL) -x -R .note -R .comment $@
++
++clean:
++ $(RM) *.[oa] *~ core
++
++stringtest.o: stringtest.c
++ $(CC) $(CFLAGS) -c $< -o $@
++
++stringtest: stringtest.o $(SOBJS)
++ $(CC) -static -o $@ $^
+diff -Nur uClibc-0.9.28/libc/string/avr32/memchr.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memchr.S
+--- uClibc-0.9.28/libc/string/avr32/memchr.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memchr.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,62 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define str r12
++#define chr r11
++#define len r10
++
++ .text
++ .global memchr
++ .type memchr, @function
++memchr:
++ insert.b chr:l, chr
++ insert.h chr:t, chr
++
++ mov r9, str
++ andl r9, 3, COH
++ brne .Lunaligned_str
++
++1: sub len, 4
++ brlt 2f
++ ld.w r8, str++
++ psub.b r9, r8, r11
++ tnbz r9
++ brne 1b
++
++ sub str, 4
++ extract.b r9, r8:t
++ cp.b r9, r11
++ reteq str
++ sub str, -1
++ extract.b r9, r8:u
++ cp.b r9, r11
++ reteq str
++ sub str, -1
++ extract.b r9, r8:l
++ cp.b r9, r11
++ reteq str
++ sub str, -1
++ retal str
++
++2: sub len, -4
++ reteq 0
++
++3: ld.ub r8, str++
++ cp.w r8, 0
++ reteq str
++ sub len, 1
++ brne 3b
++
++ retal 0
++
++.Lunaligned_str:
++1: sub len, 1
++ retlt 0
++ ld.ub r8, str++
++ cp.b r8, r11
++ reteq str
++ sub r9, 1
++ brge 1b
++
++ rjmp .Laligned_search
+diff -Nur uClibc-0.9.28/libc/string/avr32/memcmp.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcmp.S
+--- uClibc-0.9.28/libc/string/avr32/memcmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcmp.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,26 @@
++/*
++ * Copyright (C) 2004 Atmel Norway.
++ */
++
++#define s1 r12
++#define s2 r11
++#define len r10
++
++ .text
++ .global memcmp
++ .type memcmp, @function
++ .align 1
++memcmp:
++ cp.w len, 1
++ retlt 0
++1: ld.ub r8, s1++
++ ld.ub r9, s2++
++ sub r8, r9
++ subfne len, 1
++ brne 1b
++
++ retal r8
++ .size memcmp, . - memcmp
++
++ .weak bcmp
++ bcmp = memcmp
+diff -Nur uClibc-0.9.28/libc/string/avr32/memcpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcpy.S
+--- uClibc-0.9.28/libc/string/avr32/memcpy.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memcpy.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,106 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++/* Don't use r12 as dst since we must return it unmodified */
++#define dst r9
++#define src r11
++#define len r10
++
++ .text
++ .global memcpy
++ .type memcpy, @function
++memcpy:
++ pref src[0]
++ mov dst, r12
++
++ /* If we have less than 32 bytes, don't do anything fancy */
++ cp.w len, 32
++ brge .Lmore_than_31
++
++ sub len, 1
++ retlt r12
++1: ld.ub r8, src++
++ st.b dst++, r8
++ sub len, 1
++ brge 1b
++ retal r12
++
++.Lmore_than_31:
++ pushm r0-r7, lr
++
++ /* Check alignment */
++ mov r8, src
++ andl r8, 31, COH
++ brne .Lunaligned_src
++ mov r8, dst
++ andl r8, 3, COH
++ brne .Lunaligned_dst
++
++.Laligned_copy:
++ sub len, 32
++ brlt .Lless_than_32
++
++1: /* Copy 32 bytes at a time */
++ pref src[32]
++ ldm src, r0-r7
++ sub src, -32
++ stm dst, r0-r7
++ sub dst, -32
++ sub len, 32
++ brge 1b
++
++.Lless_than_32:
++ /* Copy 16 more bytes if possible */
++ sub len, -16
++ brlt .Lless_than_16
++ ldm src, r0-r3
++ sub src, -16
++ sub len, 16
++ stm dst, r0-r3
++ sub dst, -16
++
++.Lless_than_16:
++ /* Do the remaining as byte copies */
++ neg len
++ add pc, pc, len << 2
++ .rept 15
++ ld.ub r0, src++
++ st.b dst++, r0
++ .endr
++
++ popm r0-r7, pc
++
++.Lunaligned_src:
++ /* Make src cacheline-aligned. r8 = (src & 31) */
++ rsub r8, r8, 32
++ sub len, r8
++1: ld.ub r0, src++
++ st.b dst++, r0
++ sub r8, 1
++ brne 1b
++
++ /* If dst is word-aligned, we're ready to go */
++ pref src[0]
++ mov r8, 3
++ tst dst, r8
++ breq .Laligned_copy
++
++.Lunaligned_dst:
++ /* src is aligned, but dst is not. Expect bad performance */
++ sub len, 4
++ brlt 2f
++1: ld.w r0, src++
++ st.w dst++, r0
++ sub len, 4
++ brge 1b
++
++2: neg len
++ add pc, pc, len << 2
++ .rept 3
++ ld.ub r0, src++
++ st.b dst++, r0
++ .endr
++
++ popm r0-r7, pc
++ .size memcpy, . - memcpy
+diff -Nur uClibc-0.9.28/libc/string/avr32/memmove.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memmove.S
+--- uClibc-0.9.28/libc/string/avr32/memmove.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memmove.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,124 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define dst r12
++#define src r11
++#define len r10
++
++ .text
++ .global memmove
++ .type memmove, @function
++memmove:
++ cp.w src, dst
++#ifdef memmove
++ brge optimized_memcpy
++#else
++ brge memcpy
++#endif
++
++ add dst, len
++ add src, len
++ pref src[-1]
++
++ /*
++ * The rest is basically the same as in memcpy.S except that
++ * the direction is reversed.
++ */
++ cp.w len, 32
++ brge .Lmore_than_31
++
++ sub len, 1
++ retlt r12
++1: ld.ub r8, --src
++ st.b --dst, r8
++ sub len, 1
++ brge 1b
++ retal r12
++
++.Lmore_than_31:
++ pushm r0-r7, lr
++
++ /* Check alignment */
++ mov r8, src
++ andl r8, 31, COH
++ brne .Lunaligned_src
++ mov r8, r12
++ andl r8, 3, COH
++ brne .Lunaligned_dst
++
++.Laligned_copy:
++ sub len, 32
++ brlt .Lless_than_32
++
++1: /* Copy 32 bytes at a time */
++ pref src[-36]
++ sub src, 32
++ ldm src, r0-r7
++ sub dst, 32
++ sub len, 32
++ stm dst, r0-r7
++ brge 1b
++
++.Lless_than_32:
++ /* Copy 16 more bytes if possible */
++ sub len, -16
++ brlt .Lless_than_16
++ sub src, 16
++ ldm src, r0-r3
++ sub dst, 16
++ sub len, 16
++ stm dst, r0-r3
++
++.Lless_than_16:
++ /* Do the remaining as byte copies */
++#if 1
++ sub len, -16
++ breq 2f
++1: ld.ub r0, --src
++ st.b --dst, r0
++ sub len, 1
++ brne 1b
++#else
++ neg len
++ add pc, pc, len << 2
++ .rept 15
++ ld.ub r0, --src
++ st.b --dst, r0
++ .endr
++#endif
++
++2: popm r0-r7, pc
++
++.Lunaligned_src:
++ /* Make src cacheline-aligned. r8 = (src & 31) */
++ rsub r8, r8, 32
++ sub len, r8
++1: ld.ub r0, --src
++ st.b --dst, r0
++ sub r8, 1
++ brne 1b
++
++ /* If dst is word-aligned, we're ready to go */
++ pref src[-4]
++ mov r8, 3
++ tst dst, r8
++ breq .Laligned_copy
++
++.Lunaligned_dst:
++ /* src is aligned, but dst is not. Expect bad performance */
++ sub len, 4
++ brlt 2f
++1: ld.w r0, --src
++ st.w --dst, r0
++ sub len, 4
++ brge 1b
++
++2: neg len
++ add pc, pc, len << 2
++ .rept 3
++ ld.ub r0, --src
++ st.b --dst, r0
++ .endr
++
++ popm r0-r7, pc
+diff -Nur uClibc-0.9.28/libc/string/avr32/memset.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/memset.S
+--- uClibc-0.9.28/libc/string/avr32/memset.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/memset.S 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,54 @@
++/*
++ * Copyright (C) 2004 Atmel Norway.
++ */
++
++#define s r12
++#define c r11
++#define n r10
++
++ .text
++ .global memset
++ .type memset, @function
++ .align 1
++memset:
++ cp.w n, 32
++ mov r9, s
++ brge .Llarge_memset
++
++ sub n, 1
++ retlt s
++1: st.b s++, c
++ sub n, 1
++ brge 1b
++
++ retal r9
++
++.Llarge_memset:
++ mov r8, r11
++ mov r11, 3
++ insert.b r8:l, r8
++ tst s, r11
++ insert.h r8:t, r8
++ breq 2f
++
++1: st.b s++, r8
++ sub n, 1
++ tst s, r11
++ brne 1b
++
++2: mov r11, r9
++ mov r9, r8
++ sub n, 8
++
++3: st.d s++, r8
++ sub n, 8
++ brge 3b
++
++ /* If we are done, n == -8 and we'll skip all st.b insns below */
++ neg n
++ lsl n, 1
++ add pc, n
++ .rept 7
++ st.b s++, r8
++ .endr
++ retal r11
+diff -Nur uClibc-0.9.28/libc/string/avr32/strcat.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcat.S
+--- uClibc-0.9.28/libc/string/avr32/strcat.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcat.S 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,96 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define s1 r9
++#define s2 r11
++
++ .text
++ .global strcat
++ .type strcat, @function
++ .align 1
++strcat:
++ mov s1, r12
++
++ /* Make sure s1 is word-aligned */
++ mov r10, s1
++ andl r10, 3, COH
++ breq 2f
++
++ add pc, pc, r10 << 3
++ sub r0, r0, 0 /* 4-byte nop */
++ ld.ub r8, s1++
++ sub r8, r8, 0
++ breq 2f
++ ld.ub r8, s1++
++ sub r8, r8, 0
++ breq 3f
++ ld.ub r8, s1++
++ sub r8, r8, 0
++ breq 4f
++
++ /* Find the end of the first string */
++5: ld.w r8, s1++
++ tnbz r8
++ brne 5b
++
++ sub s1, 4
++
++ extract.b r10, r8:t
++ cp.w r10, 0
++ breq 1f
++ sub s1, -1
++ extract.b r10, r8:u
++ cp.w r10, 0
++ breq 2f
++ sub s1, -1
++ extract.b r10, r8:l
++ cp.w r10, 0
++ breq 3f
++ sub s1, -1
++ rjmp 4f
++
++ /* Now, append s2 */
++1: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++2: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++3: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++4: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++
++ /* Copy one word at a time */
++ ld.w r8, s2++
++ tnbz r8
++ breq 2f
++1: st.w r8, s2++
++ ld.w r8, s2++
++ tnbz r8
++ brne 1b
++
++ /* Copy the remaining bytes */
++ extract.b r10, r8:t
++ st.b s1++, r10
++ cp.w r10, 0
++ reteq r12
++ extract.b r10, r8:u
++ st.b s1++, r10
++ cp.w r10, 0
++ reteq r12
++ extract.b r10, r8:l
++ st.b s1++, r10
++ cp.w r10, 0
++ reteq r12
++ extract.b r10, r8:b
++ st.b s1++, r10
++ retal r12
++ .size strcat, . - strcat
+diff -Nur uClibc-0.9.28/libc/string/avr32/strcmp.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcmp.S
+--- uClibc-0.9.28/libc/string/avr32/strcmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcmp.S 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,77 @@
++/*
++ * Copyright (C) 2004 Atmel Norway.
++ */
++
++#define s1 r12
++#define s2 r11
++#define len r10
++
++ .text
++ .global strcmp
++ .type strcmp, @function
++ .align 1
++strcmp:
++ mov r8, 3
++ tst s1, r8
++ brne .Lunaligned_s1
++ tst s2, r8
++ brne .Lunaligned_s2
++
++1: ld.w r8, s1++
++ ld.w r9, s2++
++ cp.w r8, r9
++ brne 2f
++ tnbz r8
++ brne 1b
++ retal 0
++
++2: extract.b r12, r8:t
++ extract.b r11, r9:t
++ sub r12, r11
++ retne r12
++ cp.w r11, 0
++ reteq 0
++ extract.b r12, r8:u
++ extract.b r11, r9:u
++ sub r12, r11
++ retne r12
++ cp.w r11, 0
++ reteq 0
++ extract.b r12, r8:l
++ extract.b r11, r9:l
++ sub r12, r11
++ retne r12
++ cp.w r11, 0
++ reteq 0
++ extract.b r12, r8:b
++ extract.b r11, r9:b
++ sub r12, r11
++ retal r12
++
++.Lunaligned_s1:
++3: tst s1, r8
++ breq 4f
++ ld.ub r10, s1++
++ ld.ub r9, s2++
++ sub r10, r9
++ retne r10
++ cp.w r9, 0
++ brne 3b
++ retal r10
++
++4: tst s2, r8
++ breq 1b
++
++.Lunaligned_s2:
++ /*
++ * s1 and s2 can't both be aligned, and unaligned word loads
++ * can trigger spurious exceptions if we cross a page boundary.
++ * Do it the slow way...
++ */
++1: ld.ub r8, s1++
++ ld.ub r9, s2++
++ sub r8, r9
++ retne r8
++ cp.w r9, 0
++ brne 1b
++ retal 0
+diff -Nur uClibc-0.9.28/libc/string/avr32/strcpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcpy.S
+--- uClibc-0.9.28/libc/string/avr32/strcpy.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strcpy.S 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,64 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ *
++ * To reduce the size, this one might simply call strncpy with len = -1.
++ */
++
++#define dst r9
++#define src r11
++
++ .text
++ .global strcpy
++ .type strcpy, @function
++strcpy:
++ mov dst, r12
++
++ pref src[0]
++
++ /*
++ * Check alignment. If src is aligned but dst isn't, we can't
++ * do much about it...
++ */
++ mov r8, src
++ andl r8, 3 COH
++ brne .Lunaligned_src
++
++.Laligned_copy:
++1: ld.w r8, src++
++ tnbz r8
++ breq 2f
++ st.w dst++, r8
++ rjmp 1b
++
++2: /*
++ * Ok, r8 now contains the terminating '\0'. Copy the
++ * remaining bytes individually.
++ */
++ extract.b r10, r8:t
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++ extract.b r10, r8:u
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++ extract.b r10, r8:l
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++ extract.b r10, r8:b
++ st.b dst++, r10
++ retal r12
++
++.Lunaligned_src:
++ /* Copy bytes until we're aligned */
++ rsub r8, r8, 4
++ add pc, pc, r8 << 3
++ nop
++ nop
++ ld.ub r10, src++
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++
++ rjmp .Laligned_copy
+diff -Nur uClibc-0.9.28/libc/string/avr32/stringtest.c uClibc-0.9.28-avr32-20060621/libc/string/avr32/stringtest.c
+--- uClibc-0.9.28/libc/string/avr32/stringtest.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/stringtest.c 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,144 @@
++
++#include <stdio.h>
++#include <string.h>
++#include <time.h>
++#include <sys/mman.h>
++
++#define BUF_SIZE (8 * 1024)
++
++static char *buf1;
++static char *buf1_ref;
++static char *buf2;
++
++extern void *optimized_memcpy(void *dest, void *src, size_t len);
++extern void *optimized_memmove(void *dest, void *src, size_t len);
++extern char *optimized_strcpy(char *dest, char *src);
++extern char *optimized_strncpy(char *dest, char *src, size_t len);
++
++void dump_mismatch(char *buf, char *ref, size_t len)
++{
++ int i, j;
++
++ for (i = 0; i < len; i += 16) {
++ if (memcmp(buf + i, ref + i, 16) == 0)
++ continue;
++
++ printf("%4x buf:", i);
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", buf[j]);
++ printf("\n ref:");
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", ref[j]);
++ printf("\n");
++ }
++}
++
++static void test_memcpy(int src_offset, int dst_offset, int len)
++{
++ clock_t start, old, new;
++ int i;
++
++ memset(buf1, 0x55, BUF_SIZE);
++ memset(buf1_ref, 0x55, BUF_SIZE);
++ memset(buf2, 0xaa, BUF_SIZE);
++
++ printf("Testing memcpy with offsets %d => %d and len %d...",
++ src_offset, dst_offset, len);
++
++ start = clock();
++ for (i = 0; i < 8192; i++)
++ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len);
++ new = clock() - start;
++ start = clock();
++ for ( i = 0; i < 8192; i++)
++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len);
++ old = clock() - start;
++
++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0)
++ printf("OK\n");
++ else {
++ printf("FAILED\n");
++ dump_mismatch(buf1, buf1_ref, BUF_SIZE);
++ }
++ printf("CPU time used: %d vs. %d\n", new, old);
++}
++
++static void test_memmove(int src_offset, int dst_offset, int len)
++{
++ clock_t start, old, new;
++
++ memset(buf1, 0x55, BUF_SIZE);
++ memset(buf1_ref, 0x55, BUF_SIZE);
++ memset(buf2, 0xaa, BUF_SIZE);
++
++ printf("Testing memmove with offsets %d => %d and len %d...",
++ src_offset, dst_offset, len);
++
++ start = clock();
++ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len);
++ new = clock() - start;
++ start = clock();
++ memmove(buf1_ref + dst_offset, buf2 + src_offset, len);
++ old = clock() - start;
++
++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0)
++ printf("OK\n");
++ else {
++ printf("FAILED\n");
++ dump_mismatch(buf1, buf1_ref, BUF_SIZE);
++ }
++ printf("CPU time used: %d vs. %d\n", new, old);
++}
++
++int main(int argc, char *argv[])
++{
++ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
++ if (buf2 == MAP_FAILED) {
++ perror("Failed to allocate memory for buf2");
++ return 1;
++ }
++ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
++ if (buf1 == MAP_FAILED) {
++ perror("Failed to allocate memory for buf1");
++ return 1;
++ }
++ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
++ if (buf1_ref == MAP_FAILED) {
++ perror("Failed to allocate memory for buf1_ref");
++ return 1;
++ }
++ printf("\n === MEMCPY ===\n\n");
++
++ test_memcpy(0, 0, BUF_SIZE - 32);
++ test_memcpy(0, 0, 1);
++ test_memcpy(0, 0, 31);
++ test_memcpy(0, 0, 32);
++ test_memcpy(0, 0, 127);
++ test_memcpy(0, 0, 128);
++ test_memcpy(4, 4, BUF_SIZE - 32 - 4);
++ test_memcpy(1, 1, BUF_SIZE - 32 - 1);
++ test_memcpy(1, 1, 126);
++ test_memcpy(0, 3, 128);
++ test_memcpy(1, 4, 128);
++ test_memcpy(0, 0, 0);
++
++ printf("\n === MEMMOVE ===\n\n");
++
++ test_memmove(0, 0, BUF_SIZE - 32);
++ test_memmove(0, 0, 1);
++ test_memmove(0, 0, 31);
++ test_memmove(0, 0, 32);
++ test_memmove(0, 0, BUF_SIZE - 33);
++ test_memmove(0, 0, 128);
++ test_memmove(4, 4, BUF_SIZE - 32 - 4);
++ test_memmove(1, 1, BUF_SIZE - 32 - 1);
++ test_memmove(1, 1, BUF_SIZE - 130);
++ test_memmove(0, 3, BUF_SIZE - 128);
++ test_memmove(1, 4, BUF_SIZE - 128);
++ test_memmove(0, 0, 0);
++
++ return 0;
++}
+diff -Nur uClibc-0.9.28/libc/string/avr32/strlen.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strlen.S
+--- uClibc-0.9.28/libc/string/avr32/strlen.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strlen.S 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,52 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define str r12
++
++ .text
++ .global strlen
++ .type strlen, @function
++strlen:
++ mov r11, r12
++
++ mov r9, str
++ andl r9, 3, COH
++ brne .Lunaligned_str
++
++1: ld.w r8, str++
++ tnbz r8
++ brne 1b
++
++ sub r12, r11
++ extract.b r9, r8:t
++ cp.w r9, 0
++ subeq r12, 4
++ reteq r12
++ extract.b r9, r8:u
++ cp.w r9, 0
++ subeq r12, 3
++ reteq r12
++ extract.b r9, r8:l
++ cp.w r9, 0
++ subeq r12, 2
++ reteq r12
++ sub r12, 1
++ retal r12
++
++.Lunaligned_str:
++ add pc, pc, r9 << 3
++ sub r0, r0, 0 /* 4-byte nop */
++ ld.ub r8, str++
++ sub r8, r8, 0
++ breq 1f
++ ld.ub r8, str++
++ sub r8, r8, 0
++ breq 1f
++ ld.ub r8, str++
++ sub r8, r8, 0
++ brne 1b
++
++1: sub r12, 1
++ sub r12, r11
++ retal r12
+diff -Nur uClibc-0.9.28/libc/string/avr32/strncpy.S uClibc-0.9.28-avr32-20060621/libc/string/avr32/strncpy.S
+--- uClibc-0.9.28/libc/string/avr32/strncpy.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/strncpy.S 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,78 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define dst r9
++#define src r11
++
++ .text
++ .global strcpy
++ .type strncpy, @function
++strncpy:
++ mov dst, r12
++
++ pref src[0]
++ mov dst, r12
++
++ /*
++ * Check alignment. If src is aligned but dst isn't, we can't
++ * do much about it...
++ */
++ mov r8, src
++ andl r8, 3 COH
++ brne .Lunaligned_src
++
++.Laligned_copy:
++ sub r10, 4
++ brlt 3f
++1: ld.w r8, src++
++ tnbz r8
++ breq 2f
++ st.w dst++, r8
++ sub r10, 4
++ brne 1b
++
++3: sub r10, -4
++ reteq r12
++
++ /* This is safe as long as src is word-aligned and r10 > 0 */
++ ld.w r8, src++
++
++2: /*
++ * Ok, r8 now contains the terminating '\0'. Copy the
++ * remaining bytes individually.
++ */
++ extract.b r11, r8:t
++ st.b dst++, r11
++ cp.w r11, 0
++ reteq r12
++ sub r10, 1
++ reteq r12
++ extract.b r11, r8:u
++ st.b dst++, r11
++ cp.w r11, 0
++ reteq r12
++ sub r10, 1
++ reteq r12
++ extract.b r11, r8:l
++ st.b dst++, r11
++ cp.w r11, 0
++ reteq r12
++ sub r10, 1
++ reteq r12
++ extract.b r10, r8:b
++ st.b dst++, r10
++ retal r12
++
++.Lunaligned_src:
++ /* Copy bytes until we're aligned */
++ min r8, r8, r10
++ sub r10, r8
++ sub r8, 1
++ retlt r12
++1: ld.ub r10, src++
++ st.b dst++, r10
++ sub r8, 1
++ brge 1b
++
++ rjmp .Laligned_copy
+diff -Nur uClibc-0.9.28/libc/string/avr32/test_memcpy.c uClibc-0.9.28-avr32-20060621/libc/string/avr32/test_memcpy.c
+--- uClibc-0.9.28/libc/string/avr32/test_memcpy.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/string/avr32/test_memcpy.c 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,66 @@
++
++#include <stdio.h>
++#include <string.h>
++
++#define BUF_SIZE 32768
++
++static char buf1[BUF_SIZE] __attribute__((aligned(32)));
++static char buf1_ref[BUF_SIZE] __attribute__((aligned(32)));
++static char buf2[BUF_SIZE] __attribute__((aligned(32)));
++
++extern void *new_memcpy(void *dest, void *src, size_t len);
++
++void dump_mismatch(char *buf, char *ref, size_t len)
++{
++ int i, j;
++
++ for (i = 0; i < len; i += 16) {
++ if (memcmp(buf + i, ref + i, 16) == 0)
++ continue;
++
++ printf("% 4x buf:", i);
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", buf[j]);
++ printf("\n ref:");
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", ref[j]);
++ printf("\n");
++ }
++}
++
++void test(int src_offset, int dst_offset, int len)
++{
++ memset(buf1, 0x55, sizeof(buf1));
++ memset(buf1_ref, 0x55, sizeof(buf1_ref));
++ memset(buf2, 0xaa, sizeof(buf2));
++
++ printf("Testing with offsets %d => %d and len %d...",
++ src_offset, dst_offset, len);
++
++ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len);
++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len);
++
++ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0)
++ printf("OK\n");
++ else {
++ printf("FAILED\n");
++ dump_mismatch(buf1, buf1_ref, sizeof(buf1));
++ }
++}
++
++int main(int argc, char *argv[])
++{
++ test(0, 0, BUF_SIZE);
++ test(0, 0, 1);
++ test(0, 0, 31);
++ test(0, 0, 32);
++ test(0, 0, 127);
++ test(0, 0, 128);
++ test(4, 4, BUF_SIZE - 4);
++ test(1, 1, BUF_SIZE - 1);
++ test(1, 1, 126);
++ test(0, 3, 128);
++ test(1, 4, 128);
++
++ return 0;
++}
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/atomicity.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/atomicity.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,86 @@
++/* Low-level functions for atomic operations. AVR32 version.
++ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _ATOMICITY_H
++#define _ATOMICITY_H 1
++
++#include <inttypes.h>
++
++static inline int
++__attribute__((unused))
++exchange_and_add (volatile uint32_t *mem, int val)
++{
++ int tmp, result;
++
++ __asm__ __volatile__(
++ "/* Inline exchange and add */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %3\n"
++ " add %1, %0, %4\n"
++ " stcond %2, %1\n"
++ " brne 1b"
++ : "=&r"(result), "=&r"(tmp), "=m"(*mem)
++ : "m"(*mem), "r"(val)
++ : "cc", "memory");
++
++ return result;
++}
++
++static inline void
++__attribute__((unused))
++atomic_add (volatile uin32_t *mem, int val)
++{
++ int result;
++
++ __asm__ __volatile__(
++ "/* Inline atomic add */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " add %0, %3\n"
++ " stcond %2, %0\n"
++ " brne 1b"
++ : "=&r"(result), "=m"(*mem)
++ : "m"(*mem), "r"(val)
++ : "cc", "memory");
++}
++
++static inline int
++__attribute__((unused))
++compare_and_swap(volatile long int *p, long int oldval, long int newval)
++{
++ long int result, tmp;
++
++ __asm__ __volatile__(
++ "/* Inline compare and swap */\n"
++ "1: ssrf 5\n"
++ " ld.w %1, %3\n"
++ " cp.w %1, %5\n"
++ " sreq %0\n"
++ " brne 2f\n"
++ " stcond %2, %4\n"
++ " brne 1b\n"
++ "2:"
++ : "=&r"(result), "=&r"(tmp), "=m"(*p)
++ : "m"(*p), "r"(newval), "r"(oldval)
++ : "cc", "memory");
++
++ return result;
++}
++
++#endif /* atomicity.h */
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/byteswap.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/byteswap.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,80 @@
++/* Macros to swap the order of bytes in integer values.
++ Copyright (C) 2005 Atmel Norway.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#if !defined _BYTESWAP_H && !defined _NETINET_IN_H
++# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
++#endif
++
++#ifndef _BITS_BYTESWAP_H
++#define _BITS_BYTESWAP_H 1
++
++/* Swap bytes in 16 bit value. */
++#if defined __GNUC__
++# define __bswap_16(x) (__extension__ __builtin_bswap_16(x))
++#else
++/* This is better than nothing. */
++static __inline unsigned short int
++__bswap_16 (unsigned short int __bsx)
++{
++ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8));
++}
++#endif
++
++/* Swap bytes in 32 bit value. */
++#if defined __GNUC__
++# define __bswap_32(x) (__extension__ __builtin_bswap_32(x))
++#else
++static __inline unsigned int
++__bswap_32 (unsigned int __bsx)
++{
++ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) |
++ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24));
++}
++#endif
++
++#if defined __GNUC__
++/* Swap bytes in 64 bit value. */
++# define __bswap_constant_64(x) \
++ ((((x) & 0xff00000000000000ull) >> 56) \
++ | (((x) & 0x00ff000000000000ull) >> 40) \
++ | (((x) & 0x0000ff0000000000ull) >> 24) \
++ | (((x) & 0x000000ff00000000ull) >> 8) \
++ | (((x) & 0x00000000ff000000ull) << 8) \
++ | (((x) & 0x0000000000ff0000ull) << 24) \
++ | (((x) & 0x000000000000ff00ull) << 40) \
++ | (((x) & 0x00000000000000ffull) << 56))
++
++# define __bswap_64(x) \
++ (__extension__ \
++ ({ \
++ union { \
++ __extension__ unsigned long long int __ll; \
++ unsigned int __l[2]; \
++ } __w, __r; \
++ if (__builtin_constant_p(x)) \
++ __r.__ll = __bswap_constant_64(x); \
++ else { \
++ __w.__ll = (x); \
++ __r.__l[0] = __bswap_32(__w.__l[1]); \
++ __r.__l[1] = __bswap_32(__w.__l[0]); \
++ } \
++ __r.__ll; \
++ }))
++#endif
++
++#endif /* _BITS_BYTESWAP_H */
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/endian.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/endian.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/endian.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,7 @@
++/* AVR32 is big-endian */
++
++#ifndef _ENDIAN_H
++# error "Never use <bits/endian.h> directly; include <endian.h> instead."
++#endif
++
++#define __BYTE_ORDER __BIG_ENDIAN
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/fcntl.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/fcntl.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,167 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ *
++ * This file is part of the Linux kernel
++ */
++#ifndef _FCNTL_H
++# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
++#endif
++
++#include <sys/types.h>
++
++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
++ located on an ext2 file system */
++#define O_ACCMODE 0003
++#define O_RDONLY 00
++#define O_WRONLY 01
++#define O_RDWR 02
++#define O_CREAT 0100 /* not fcntl */
++#define O_EXCL 0200 /* not fcntl */
++#define O_NOCTTY 0400 /* not fcntl */
++#define O_TRUNC 01000 /* not fcntl */
++#define O_APPEND 02000
++#define O_NONBLOCK 04000
++#define O_NDELAY O_NONBLOCK
++#define O_SYNC 010000
++#define O_ASYNC 020000
++
++#ifdef __USE_GNU
++# define O_DIRECTORY 040000 /* must be a directory */
++# define O_NOFOLLOW 0100000 /* don't follow links */
++# define O_DIRECT 0200000 /* direct disk access */
++#endif
++
++#ifdef __USE_LARGEFILE64
++# define O_LARGEFILE 0400000
++#endif
++
++/* For now Linux has synchronisity options for data and read operations.
++ We define the symbols here but let them do the same as O_SYNC since
++ this is a superset. */
++#if defined __USE_POSIX199309 || defined __USE_UNIX98
++# define O_DSYNC O_SYNC /* Synchronize data. */
++# define O_RSYNC O_SYNC /* Synchronize read operations. */
++#endif
++
++#define F_DUPFD 0 /* dup */
++#define F_GETFD 1 /* get close_on_exec */
++#define F_SETFD 2 /* set/clear close_on_exec */
++#define F_GETFL 3 /* get file->f_flags */
++#define F_SETFL 4 /* set file->f_flags */
++
++#ifndef __USE_FILE_OFFSET64
++# define F_GETLK 5
++# define F_SETLK 6
++# define F_SETLKW 7
++#else
++# define F_GETLK F_GETLK64
++# define F_SETLK F_SETLK64
++# define F_SETLKW F_SETLKW64
++#endif
++#define F_GETLK64 12 /* using 'struct flock64' */
++#define F_SETLK64 13
++#define F_SETLKW64 14
++
++#if defined __USE_BSD || defined __USE_XOPEN2K
++# define F_SETOWN 8 /* for sockets. */
++# define F_GETOWN 9 /* for sockets. */
++#endif
++
++#ifdef __USE_GNU
++# define F_SETSIG 10 /* for sockets. */
++# define F_GETSIG 11 /* for sockets. */
++#endif
++
++#ifdef __USE_GNU
++# define F_SETLEASE 1024 /* Set a lease. */
++# define F_GETLEASE 1025 /* Enquire what lease is active. */
++# define F_NOTIFY 1026 /* Request notfications on a directory. */
++#endif
++
++/* for F_[GET|SET]FL */
++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
++
++/* for posix fcntl() and lockf() */
++#define F_RDLCK 0
++#define F_WRLCK 1
++#define F_UNLCK 2
++
++/* for old implementation of bsd flock () */
++#define F_EXLCK 4 /* or 3 */
++#define F_SHLCK 8 /* or 4 */
++
++/* for leases */
++#define F_INPROGRESS 16
++
++#ifdef __USE_BSD
++/* operations for bsd flock(), also used by the kernel implementation */
++# define LOCK_SH 1 /* shared lock */
++# define LOCK_EX 2 /* exclusive lock */
++# define LOCK_NB 4 /* or'd with one of the above to prevent
++ blocking */
++# define LOCK_UN 8 /* remove lock */
++#endif
++
++#ifdef __USE_GNU
++# define LOCK_MAND 32 /* This is a mandatory flock */
++# define LOCK_READ 64 /* ... Which allows concurrent
++ read operations */
++# define LOCK_WRITE 128 /* ... Which allows concurrent
++ write operations */
++# define LOCK_RW 192 /* ... Which allows concurrent
++ read & write ops */
++#endif
++
++#ifdef __USE_GNU
++/* Types of directory notifications that may be requested with F_NOTIFY. */
++# define DN_ACCESS 0x00000001 /* File accessed. */
++# define DN_MODIFY 0x00000002 /* File modified. */
++# define DN_CREATE 0x00000004 /* File created. */
++# define DN_DELETE 0x00000008 /* File removed. */
++# define DN_RENAME 0x00000010 /* File renamed. */
++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
++#endif
++
++struct flock {
++ short l_type;
++ short l_whence;
++#ifndef __USE_FILE_OFFSET64
++ __off_t l_start;
++ __off_t l_len;
++#else
++ __off64_t l_start;
++ __off64_t l_len;
++#endif
++ __pid_t l_pid;
++};
++
++#ifdef __USE_LARGEFILE64
++struct flock64 {
++ short l_type;
++ short l_whence;
++ __off64_t l_start;
++ __off64_t l_len;
++ __pid_t l_pid;
++};
++#endif
++
++/* Define some more compatibility macros to be backward compatible with
++ * BSD systems which did not managed to hide these kernel macros. */
++#ifdef __USE_BSD
++# define FAPPEND O_APPEND
++# define FFSYNC O_FSYNC
++# define FASYNC O_ASYNC
++# define FNONBLOCK O_NONBLOCK
++# define FNDELAY O_NDELAY
++#endif /* Use BSD. */
++
++/* Advise to `posix_fadvise'. */
++#ifdef __USE_XOPEN2K
++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
++#endif
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_stat.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_stat.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,63 @@
++#ifndef _BITS_STAT_STRUCT_H
++#define _BITS_STAT_STRUCT_H
++
++/*
++ * This file provides struct stat, taken from kernel 2.6.4
++ * (include/asm-avr32/stat.h revision 1.1).
++ */
++
++struct kernel_stat {
++ unsigned long st_dev;
++ unsigned long st_ino;
++ unsigned short st_mode;
++ unsigned short st_nlink;
++ unsigned short st_uid;
++ unsigned short st_gid;
++ unsigned long st_rdev;
++ unsigned long st_size;
++ unsigned long st_blksize;
++ unsigned long st_blocks;
++ unsigned long st_atime;
++ unsigned long st_atime_nsec;
++ unsigned long st_mtime;
++ unsigned long st_mtime_nsec;
++ unsigned long st_ctime;
++ unsigned long st_ctime_nsec;
++ unsigned long __unused4;
++ unsigned long __unused5;
++};
++
++#define STAT_HAVE_NSEC 1
++
++struct kernel_stat64 {
++ unsigned long long st_dev;
++
++ unsigned long long st_ino;
++ unsigned int st_mode;
++ unsigned int st_nlink;
++
++ unsigned long st_uid;
++ unsigned long st_gid;
++
++ unsigned long long st_rdev;
++
++ long long st_size;
++ unsigned long __pad1;
++ unsigned long st_blksize;
++
++ unsigned long long st_blocks;
++
++ unsigned long st_atime;
++ unsigned long st_atime_nsec;
++
++ unsigned long st_mtime;
++ unsigned long st_mtime_nsec;
++
++ unsigned long st_ctime;
++ unsigned long st_ctime_nsec;
++
++ unsigned long __unused1;
++ unsigned long __unused2;
++};
++
++#endif /* _BITS_STAT_STRUCT_H */
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_types.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/kernel_types.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,56 @@
++/* Note that we use the exact same include guard #define names
++ * as asm/posix_types.h. This will avoid gratuitous conflicts
++ * with the posix_types.h kernel header, and will ensure that
++ * our private content, and not the kernel header, will win.
++ * -Erik
++ */
++#ifndef __ASM_AVR32_POSIX_TYPES_H
++#define __ASM_AVR32_POSIX_TYPES_H
++
++/*
++ * This file is generally used by user-level software, so you need to
++ * be a little careful about namespace pollution etc. Also, we cannot
++ * assume GCC is being used.
++ */
++
++typedef unsigned long __kernel_dev_t;
++typedef unsigned long __kernel_ino_t;
++typedef unsigned short __kernel_mode_t;
++typedef unsigned short __kernel_nlink_t;
++typedef long __kernel_off_t;
++typedef int __kernel_pid_t;
++typedef unsigned short __kernel_ipc_pid_t;
++typedef unsigned int __kernel_uid_t;
++typedef unsigned int __kernel_gid_t;
++typedef unsigned long __kernel_size_t;
++typedef int __kernel_ssize_t;
++typedef int __kernel_ptrdiff_t;
++typedef long __kernel_time_t;
++typedef long __kernel_suseconds_t;
++typedef long __kernel_clock_t;
++typedef int __kernel_timer_t;
++typedef int __kernel_clockid_t;
++typedef int __kernel_daddr_t;
++typedef char * __kernel_caddr_t;
++typedef unsigned short __kernel_uid16_t;
++typedef unsigned short __kernel_gid16_t;
++typedef unsigned int __kernel_uid32_t;
++typedef unsigned int __kernel_gid32_t;
++
++typedef unsigned short __kernel_old_uid_t;
++typedef unsigned short __kernel_old_gid_t;
++typedef unsigned short __kernel_old_dev_t;
++
++#ifdef __GNUC__
++typedef long long __kernel_loff_t;
++#endif
++
++typedef struct {
++#if defined(__USE_ALL)
++ int val[2];
++#else
++ int __val[2];
++#endif
++} __kernel_fsid_t;
++
++#endif /* __ASM_AVR32_POSIX_TYPES_H */
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/machine-gmon.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/machine-gmon.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,69 @@
++/* Machine-dependent definitions for profiling support. AVR32 version.
++ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#define mcount_internal __mcount_internal
++
++#define _MCOUNT_DECL(frompc, selfpc) \
++static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc)
++
++/*
++ * This mcount implementation expects to get called after the prologue
++ * has been run. It also expects that r7 contains a valid frame
++ * pointer.
++ *
++ * When profiling, the compiler should generate something like this at
++ * each function entry:
++ *
++ * pushm r0-r7,lr // lr mandatory, others optional
++ * mov r7, sp
++ * // rest of prologue goes here
++ * mcall pc[.LC1 - .]
++ * // rest of function goes here
++ * .LC1:
++ * .long mcount
++ *
++ * or for PIC:
++ *
++ * pushm r0-r7,lr
++ * mov r7, sp
++ * // rest of prologue goes here
++ * lddpc r0, .LC1
++ * .L1: rsub r0, pc
++ * mcall r0[mcount@GOT]
++ * // rest of function goes here
++ * .LC1:
++ * .long .L1 - _GLOBAL_OFFSET_TABLE_
++ *
++ * This way, when mcount() is called, r7 points to the calling
++ * function's return address. It is guaranteed that calling mcount
++ * will clobber no registers except LR, which is unavoidable.
++ */
++#define MCOUNT asm( \
++ " .align 4\n" \
++ " .global _mcount\n" \
++ " .type _mcount,@function\n" \
++ "_mcount:\n" \
++ " pushm r8-r12,lr\n" \
++ " mov r11, lr\n" \
++ " ld.w r12, r7[0]\n" \
++ " rcall __mcount_internal\n" \
++ " popm r8-r12,pc\n" \
++ " .size _mcount, . - _mcount\n" \
++ " .weak mcount\n" \
++ " mcount = _mcount");
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/mman.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/mman.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/mman.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,95 @@
++/* Definitions for POSIX memory map interface. Linux/AVR32 version.
++ Copyright (C) 1997, 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_MMAN_H
++# error "Never include this file directly. Use <sys/mman.h> instead"
++#endif
++
++/* The following definitions basically come from the kernel headers.
++ But the kernel header is not namespace clean. */
++
++
++/* Protections are chosen from these bits, OR'd together. The
++ implementation does not necessarily support PROT_EXEC or PROT_WRITE
++ without PROT_READ. The only guarantees are that no writing will be
++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
++
++#define PROT_READ 0x1 /* Page can be read. */
++#define PROT_WRITE 0x2 /* Page can be written. */
++#define PROT_EXEC 0x4 /* Page can be executed. */
++#define PROT_NONE 0x0 /* Page can not be accessed. */
++
++/* Sharing types (must choose one and only one of these). */
++#define MAP_SHARED 0x01 /* Share changes. */
++#define MAP_PRIVATE 0x02 /* Changes are private. */
++#ifdef __USE_MISC
++# define MAP_TYPE 0x0f /* Mask for type of mapping. */
++#endif
++
++/* Other flags. */
++#define MAP_FIXED 0x10 /* Interpret addr exactly. */
++#ifdef __USE_MISC
++# define MAP_FILE 0
++# define MAP_ANONYMOUS 0x20 /* Don't use a file. */
++# define MAP_ANON MAP_ANONYMOUS
++#endif
++
++/* These are Linux-specific. */
++#ifdef __USE_MISC
++# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
++# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
++# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
++# define MAP_LOCKED 0x2000 /* Lock the mapping. */
++# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
++# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */
++# define MAP_NONBLOCK 0x10000 /* do not block on IO */
++#endif
++
++/* Flags to `msync'. */
++#define MS_ASYNC 1 /* Sync memory asynchronously. */
++#define MS_SYNC 4 /* Synchronous memory sync. */
++#define MS_INVALIDATE 2 /* Invalidate the caches. */
++
++/* Flags for `mlockall'. */
++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */
++#define MCL_FUTURE 2 /* Lock all additions to address
++ space. */
++
++/* Flags for `mremap'. */
++#ifdef __USE_GNU
++# define MREMAP_MAYMOVE 1
++#endif
++
++/* Advise to `madvise'. */
++#ifdef __USE_BSD
++# define MADV_NORMAL 0 /* No further special treatment. */
++# define MADV_RANDOM 1 /* Expect random page references. */
++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */
++# define MADV_WILLNEED 3 /* Will need these pages. */
++# define MADV_DONTNEED 4 /* Don't need these pages. */
++#endif
++
++/* The POSIX people had to invent similar names for the same things. */
++#ifdef __USE_XOPEN2K
++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */
++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */
++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */
++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */
++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */
++#endif
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/profil-counter.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/profil-counter.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,26 @@
++/* Low-level statistical profiling support function. Linux/AVR32 version.
++ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <signal.h>
++
++void
++profil_counter(int signo, siginfo_t *si, struct sigcontext *sc)
++{
++ profil_count((void *)sc->pc);
++}
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/setjmp.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/setjmp.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,21 @@
++/*
++ * Copyright (C) 2004-2005 Atmel Norway
++ */
++#ifndef _SETJMP_H
++# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
++#endif
++
++#ifndef _ASM
++/*
++ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are
++ * not saved.
++ */
++typedef int __jmp_buf[11];
++#endif
++
++#define __JMP_BUF_SP 4
++
++/* Test if longjmp to JMPBUF would unwind the frame containing a local
++ variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP]))
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/syscalls.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/syscalls.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,143 @@
++#ifndef _SYSCALL_H
++# error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
++#endif
++
++/*
++ * This includes the `__NR_<name>' syscall numbers taken from the
++ * Linux kernel header files. It also defines the traditional
++ * `SYS_<name>' macros for older programs.
++ */
++#include <bits/sysnum.h>
++
++#ifndef __set_errno
++# define __set_errno(val) (*__errno_location()) = (val)
++#endif
++#ifndef SYS_ify
++# define SYS_ify(syscall_name) (__NR_##syscall_name)
++#endif
++
++#ifndef __ASSEMBLER__
++
++#undef _syscall0
++#define _syscall0(type,name) \
++ type name(void) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 0)); \
++ }
++
++#undef _syscall1
++#define _syscall1(type,name,type1,arg1) \
++ type name(type1 arg1) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 1, arg1)); \
++ }
++
++#undef _syscall2
++#define _syscall2(type,name,type1,arg1,type2,arg2) \
++ type name(type1 arg1, type2 arg2) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \
++ }
++
++#undef _syscall3
++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
++ type name(type1 arg1, type2 arg2, type3 arg3) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 3, arg1, \
++ arg2, arg3)); \
++ }
++
++#undef _syscall4
++#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \
++ type4,arg4) \
++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \
++ arg3, arg4)); \
++ }
++
++#undef _syscall5
++#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \
++ type4,arg4,type5,arg5) \
++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \
++ type5 arg5) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \
++ arg3, arg4, arg5)); \
++ }
++
++#undef _syscall6
++#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \
++ type4,arg4,type5,arg5,type6,arg6) \
++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \
++ type5 arg5, type6 arg6) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \
++ arg4, arg5, arg6)); \
++ }
++
++#undef unlikely
++#define unlikely(x) __builtin_expect((x), 0)
++
++#undef INLINE_SYSCALL
++#define INLINE_SYSCALL(name, nr, args...) \
++ ({ \
++ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \
++ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \
++ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \
++ _sys_result = (unsigned int) -1; \
++ } \
++ (int) _sys_result; \
++ })
++
++#undef INTERNAL_SYSCALL_DECL
++#define INTERNAL_SYSCALL_DECL(err) do { } while(0)
++
++#undef INTERNAL_SYSCALL
++#define INTERNAL_SYSCALL(name, err, nr, args...) \
++ ({ \
++ register int _a1 asm ("r12"); \
++ register int _scno asm("r8") = SYS_ify(name); \
++ LOAD_ARGS_##nr (args); \
++ asm volatile ("scall /* syscall " #name " */" \
++ : "=r" (_a1) \
++ : "r"(_scno) ASM_ARGS_##nr \
++ : "lr", "cc", "memory"); \
++ _a1; \
++ })
++
++#undef INTERNAL_SYSCALL_ERROR_P
++#define INTERNAL_SYSCALL_ERROR_P(val, err) \
++ ((unsigned int)(val) >= 0xfffff001U)
++
++#undef INTERNAL_SYSCALL_ERRNO
++#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val))
++
++#define LOAD_ARGS_0() do { } while(0)
++#define ASM_ARGS_0
++#define LOAD_ARGS_1(a1) \
++ _a1 = (int) (a1); \
++ LOAD_ARGS_0()
++#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1)
++#define LOAD_ARGS_2(a1, a2) \
++ register int _a2 asm("r11") = (int)(a2); \
++ LOAD_ARGS_1(a1)
++#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2)
++#define LOAD_ARGS_3(a1, a2, a3) \
++ register int _a3 asm("r10") = (int)(a3); \
++ LOAD_ARGS_2(a1, a2)
++#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3)
++#define LOAD_ARGS_4(a1, a2, a3, a4) \
++ register int _a4 asm("r9") = (int)(a4); \
++ LOAD_ARGS_3(a1, a2, a3)
++#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4)
++#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \
++ register int _a5 asm("r5") = (int)(a5); \
++ LOAD_ARGS_4(a1, a2, a3, a4)
++#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5)
++#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \
++ register int _a6 asm("r3") = (int)(a6); \
++ LOAD_ARGS_5(a1, a2, a3, a4, a5)
++#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6)
++
++#endif /* __ASSEMBLER__ */
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/wordsize.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bits/wordsize.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1 @@
++#define __WORDSIZE 32
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/brk.c
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/brk.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/brk.c 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,23 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <errno.h>
++#include <sys/syscall.h>
++
++void *__curbrk = 0;
++
++int brk (void *addr)
++{
++ void *newbrk;
++
++ newbrk = INLINE_SYSCALL(brk, 1, addr);
++
++ __curbrk = newbrk;
++
++ if (newbrk < addr) {
++ __set_errno (ENOMEM);
++ return -1;
++ }
++
++ return 0;
++}
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-_setjmp.S
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-_setjmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++
++ /* This just does a tail-call to __sigsetjmp(env, 0) */
++ .global _setjmp
++ .type _setjmp,"function"
++ .align 1
++_setjmp:
++ mov r11, 0
++ bral __sigsetjmp_internal
++ .size _setjmp, . - _setjmp
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-setjmp.S
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/bsd-setjmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++
++ /* This just does a tail-call to __sigsetjmp(env, 1) */
++ .global setjmp
++ .type setjmp,"function"
++ .align 1
++setjmp:
++ mov r11, 1
++ bral __sigsetjmp_internal
++ .size setjmp, . - setjmp
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/clone.c
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/clone.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/clone.c 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,37 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <errno.h>
++#include <sys/syscall.h>
++#include <unistd.h>
++
++/*
++ * I don't know if we can be absolutely certain that the fn and arg
++ * parameters are preserved when returning as the child. If the
++ * compiler stores them in registers (r0-r7), they should be.
++ */
++int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg)
++{
++ register int (*_fn)(void *arg) = fn;
++ register void *_arg = arg;
++ int err;
++
++ /* Sanity check the arguments */
++ err = -EINVAL;
++ if (!fn)
++ goto syscall_error;
++ if (!child_stack)
++ goto syscall_error;
++
++ err = INLINE_SYSCALL(clone, 2, flags, child_stack);
++ if (err < 0)
++ goto syscall_error;
++ else if (err != 0)
++ return err;
++
++ _exit(_fn(_arg));
++
++syscall_error:
++ __set_errno (-err);
++ return -1;
++}
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crt1.S
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/crt1.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crt1.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,93 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ *
++ * When we enter _start, the stack looks like this:
++ * argc argument counter
++ * argv[0] pointer to program name
++ * argv[1..argc-1] pointers to program args
++ * NULL
++ * env[0..N] pointers to environment variables
++ * NULL
++ *
++ * r12 contains a function pointer to be registered with `atexit'.
++ * This is how the dynamic linker arranges to have DT_FINI functions
++ * called for shared libraries that have been loaded before this
++ * code runs.
++ *
++ * We're going to call the following function:
++ * __uClibc_main(int (*main)(int, char **, char **), int argc,
++ * char **argv, void (*app_init)(void), void (*app_fini)(void),
++ * void (*rtld_fini)(void), void *stack_end)
++ *
++ * So we need to set up things as follows:
++ * r12 = address of main
++ * r11 = argc
++ * r10 = &argv[0]
++ * r9 = address of _init
++ * r8 = address of _fini
++ * sp[0] = whatever we got passed in r12
++ */
++
++#include <features.h>
++
++ .text
++ .global _start
++ .type _start, @function
++_start:
++ /* Clear the frame pointer and link register since this is the outermost frame. */
++ mov r7, 0
++ mov lr, 0
++
++ ld.w r11, sp++ /* argc */
++ mov r10, sp /* &argv[0] */
++
++ st.w --sp, r10 /* stack_end */
++ st.w --sp, r12 /* rtld_fini */
++
++#ifdef __PIC__
++ lddpc r6, .L_GOT
++.L_RGOT:
++ rsub r6, pc
++ lda.w r9, _init
++ lda.w r8, _fini
++ lda.w r12, main
++
++ /* Ok, now run uClibc's main() -- should not return */
++ call __uClibc_main
++
++ .align 2
++.L_GOT:
++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_
++#else
++ lddpc r9, __init_addr /* app_init */
++ lddpc r8, __fini_addr /* app_fini */
++ lddpc r12, __main_addr /* main */
++
++ /* Ok, now run uClibc's main() -- should not return */
++ lddpc pc, ___uClibc_main_addr
++
++ .align 2
++__init_addr:
++ .long _init
++__fini_addr:
++ .long _fini
++__main_addr:
++ .long main
++___uClibc_main_addr:
++ .long __uClibc_main
++#endif
++ .size _start, . - _start
++
++ /*
++ * The LSB says we need this.
++ */
++ .section ".note.ABI-tag", "a"
++ .align 4
++ .long 2f - 1f /* namesz */
++ .long 4f - 3f /* descsz */
++ .long 1 /* type */
++1: .asciz "GNU" /* name */
++2: .align 4
++3: .long 0 /* Linux executable */
++ .long 2,6,0 /* Earliest compatible kernel */
++4: .align 4
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crti.S
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/crti.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crti.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,17 @@
++
++ .section .init
++ .align 2
++ .global _init
++ .type _init, @function
++_init:
++ /* Use a four-byte instruction to avoid NOPs */
++ stm --sp, r0-r7,lr
++ .align 2
++
++ .section .fini
++ .align 2
++ .global _fini
++ .type _fini, @function
++_fini:
++ stm --sp, r0-r7,lr
++ .align 2
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crtn.S
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/crtn.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/crtn.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,14 @@
++
++ .section .init
++ .align 2
++ .global _init
++ .type _init, @function
++ ldm sp++, r0-r7,pc
++ .size _init, . - _init
++
++ .section .fini
++ .align 2
++ .global _fini
++ .type _fini, @function
++ ldm sp++, r0-r7,pc
++ .size _fini, . - _fini
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/__longjmp.S
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/__longjmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/__longjmp.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,17 @@
++/* longjmp for AVR32
++ *
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++
++ .global __longjmp
++ .type __longjmp,"function"
++ .align 1
++__longjmp:
++ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr
++ mov r12, r11 /* get the return value right */
++ mustr r8 /* restore status register (lower half) */
++ cp r12, 0 /* can't return zero */
++ frs
++ moveq r12, 1
++ mov pc,lr
++ .size __longjmp, . - __longjmp
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/Makefile
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/Makefile 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,93 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2000-2003 Erik Andersen <andersen@uclibc.org>
++#
++# This program is free software; you can redistribute it and/or modify it under
++# the terms of the GNU Library General Public License as published by the Free
++# Software Foundation; either version 2 of the License, or (at your option) any
++# later version.
++#
++# This program is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++# details.
++#
++# You should have received a copy of the GNU Library General Public License
++# along with this program; if not, write to the Free Software Foundation, Inc.,
++# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++TOPDIR=../../../../
++include $(TOPDIR)Rules.mak
++ASFLAGS=$(CFLAGS)
++
++CRT_SRC = crt1.S
++CRT_OBJ = crt1.o
++SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ))
++CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
++
++SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \
++ bsd-_setjmp.S sigrestorer.S syscall.S
++SOBJS=$(patsubst %.S,%.o, $(SSRC))
++
++CSRC=clone.c brk.c sigaction.c mmap.c
++COBJS=$(patsubst %.c,%.o, $(CSRC))
++
++OBJS=$(SOBJS) $(COBJS)
++
++OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH)
++
++all: $(OBJ_LIST)
++
++$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS)
++ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST)
++ $(INSTALL) -d $(TOPDIR)lib/
++ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/
++
++$(CRT_OBJ): $(CRT_SRC)
++ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++$(SCRT_OBJ): $(CRT_SRC)
++ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++$(SOBJS): %.o : %.S
++ $(CC) $(ASFLAGS) -c $< -o $@
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++$(COBJS): %.o : %.c
++ $(CC) $(CFLAGS) -c $< -o $@
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
++crti.o: crti.S
++ $(CC) $(ASFLAGS) -c crti.S -o crti.o
++
++$(TOPDIR)lib/crti.o: crti.o
++ $(INSTALL) -d $(TOPDIR)lib/
++ cp crti.o $(TOPDIR)lib/
++
++crtn.o: crtn.S
++ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o
++
++$(TOPDIR)lib/crtn.o: crtn.o
++ $(INSTALL) -d $(TOPDIR)lib/
++ cp crtn.o $(TOPDIR)lib/
++else
++$(TOPDIR)lib/crti.o:
++ $(INSTALL) -d $(TOPDIR)lib/
++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o
++$(TOPDIR)lib/crtn.o:
++ $(INSTALL) -d $(TOPDIR)lib/
++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o
++endif
++
++
++headers:
++# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/
++
++clean:
++ $(RM) *.[oa] *~ core
++ $(RM) bits/sysnum.h
++ $(RM) gmon-start.S
++
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/_mmap.c
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/_mmap.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/_mmap.c 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,33 @@
++/* Copyright (C) 2005 Atmel Norway
++
++ This program is free software; you can redistribute it and/or modify it under
++ the terms of the GNU Library General Public License as published by the Free
++ Software Foundation; either version 2 of the License, or (at your option) any
++ later version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++ details.
++
++ You should have received a copy of the GNU Library General Public License
++ along with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++ Derived in part from the Linux-8086 C library, the GNU C Library, and several
++ other sundry sources. Files within this library are copyright by their
++ respective copyright holders.
++ */
++
++#include <errno.h>
++#include <sys/mman.h>
++#include <sys/syscall.h>
++
++#define __NR_mmap2 __NR_mmap
++
++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff);
++
++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset)
++{
++ return mmap2(addr, len, prot, flags, fd, offset >> 12);
++}
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/mmap.c
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/mmap.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/mmap.c 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,31 @@
++/* Copyright (C) 2005 Atmel Norway
++
++ This program is free software; you can redistribute it and/or modify it under
++ the terms of the GNU Library General Public License as published by the Free
++ Software Foundation; either version 2 of the License, or (at your option) any
++ later version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++ details.
++
++ You should have received a copy of the GNU Library General Public License
++ along with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++ Derived in part from the Linux-8086 C library, the GNU C Library, and several
++ other sundry sources. Files within this library are copyright by their
++ respective copyright holders.
++ */
++
++#include <errno.h>
++#include <sys/mman.h>
++#include <sys/syscall.h>
++
++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff);
++
++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset)
++{
++ return mmap2(addr, len, prot, flags, fd, offset >> 12);
++}
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/setjmp.S
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/setjmp.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/setjmp.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,43 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#define _SETJMP_H
++#define _ASM
++#include <bits/setjmp.h>
++
++ .text
++
++ .global __sigsetjmp
++ .type __sigsetjmp,"function"
++
++ /* Create a global, hidden symbol for use by setjmp() and _setjmp().
++ If it's not hidden, the linker will complain about a relative
++ jump to a dynamic symbol when building a shared library.
++
++ Also, if a user overrides the __sigsetjmp function, he might not
++ expect the setjmp() and _setjmp() function to effectively be
++ overridden as well. */
++ .global __sigsetjmp_internal
++ .hidden __sigsetjmp_internal
++ .type __sigsetjmp_internal,"function"
++ .align 1
++__sigsetjmp:
++__sigsetjmp_internal:
++ mustr r8
++ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr
++
++ /* Make a tail call to __sigjmp_save; it takes the same args. */
++#ifdef __PIC__
++ mov r9, r6
++ lddpc r6, .LG
++.L1: rsub r6, pc
++ ld.w r8, r6[__sigjmp_save@got]
++ mov r6, r9
++ mov pc, r8
++
++ .align 2
++.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_
++#else
++ rjmp __sigjmp_save
++#endif
++ .size __sigsetjmp, . - __sigsetjmp
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigaction.c
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sigaction.c 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigaction.c 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <errno.h>
++#include <signal.h>
++#include <string.h>
++#include <sys/syscall.h>
++#include <bits/kernel_sigaction.h>
++
++#define SA_RESTORER 0x04000000
++extern void __default_rt_sa_restorer(void);
++
++/*
++ * If act is not NULL, change the action for sig to *act.
++ * If oact is not NULL, put the old action for sig in *oact.
++ */
++int __libc_sigaction(int signum, const struct sigaction *act,
++ struct sigaction *oldact)
++{
++ struct kernel_sigaction kact, koact;
++ int result;
++
++ if (act) {
++ kact.k_sa_handler = act->sa_handler;
++ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask));
++ kact.sa_flags = act->sa_flags;
++ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK))
++ kact.sa_restorer = act->sa_restorer;
++ else
++ kact.sa_restorer = __default_rt_sa_restorer;
++ kact.sa_flags |= SA_RESTORER;
++ }
++
++ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL,
++ oldact ? __ptrvalue(&koact) : NULL,
++ _NSIG / 8);
++
++ if (oldact && result >= 0) {
++ oldact->sa_handler = koact.k_sa_handler;
++ memcpy(&oldact->sa_mask, &koact.sa_mask,
++ sizeof(oldact->sa_mask));
++ oldact->sa_flags = koact.sa_flags;
++ oldact->sa_restorer = koact.sa_restorer;
++ }
++
++ return result;
++}
++
++weak_alias(__libc_sigaction, sigaction)
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigrestorer.S
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sigrestorer.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sigrestorer.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <sys/syscall.h>
++
++ .global __default_rt_sa_restorer
++ .type __default_rt_sa_restorer,"function"
++ .align 1
++__default_rt_sa_restorer:
++ mov r8, __NR_rt_sigreturn
++ scall
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/elf.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/elf.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/elf.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,26 @@
++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_ELF_H
++#define _SYS_ELF_H 1
++
++#warning "This header is obsolete; use <sys/procfs.h> instead."
++
++#include <sys/procfs.h>
++
++#endif /* sys/elf.h */
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/io.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/io.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/io.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,48 @@
++/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_IO_H
++
++#define _SYS_IO_H 1
++#include <features.h>
++
++__BEGIN_DECLS
++
++/* If TURN_ON is TRUE, request for permission to do direct i/o on the
++ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
++ permission off for that range. This call requires root privileges. */
++extern int ioperm (unsigned long int __from, unsigned long int __num,
++ int __turn_on) __THROW;
++
++/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero,
++ permission to access any I/O port is granted. This call requires
++ root privileges. */
++extern int iopl (int __level) __THROW;
++
++/* The functions that actually perform reads and writes. */
++extern unsigned char inb (unsigned long int port) __THROW;
++extern unsigned short int inw (unsigned long int port) __THROW;
++extern unsigned long int inl (unsigned long int port) __THROW;
++
++extern void outb (unsigned char value, unsigned long int port) __THROW;
++extern void outw (unsigned short value, unsigned long int port) __THROW;
++extern void outl (unsigned long value, unsigned long int port) __THROW;
++
++__END_DECLS
++
++#endif /* _SYS_IO_H */
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/procfs.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/procfs.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/procfs.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,123 @@
++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_PROCFS_H
++#define _SYS_PROCFS_H 1
++
++/* This is somewhat modelled after the file of the same name on SVR4
++ systems. It provides a definition of the core file format for ELF
++ used on Linux. It doesn't have anything to do with the /proc file
++ system, even though Linux has one.
++
++ Anyway, the whole purpose of this file is for GDB and GDB only.
++ Don't read too much into it. Don't use it for anything other than
++ GDB unless you know what you are doing. */
++
++#include <features.h>
++#include <sys/time.h>
++#include <sys/types.h>
++#include <sys/user.h>
++
++__BEGIN_DECLS
++
++/* Type for a general-purpose register. */
++typedef unsigned long elf_greg_t;
++
++/* And the whole bunch of them. We could have used `struct
++ user_regs' directly in the typedef, but tradition says that
++ the register set is an array, which does have some peculiar
++ semantics, so leave it that way. */
++#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t))
++typedef elf_greg_t elf_gregset_t[ELF_NGREG];
++
++/* Register set for the floating-point registers. */
++typedef struct user_fpregs elf_fpregset_t;
++
++/* Signal info. */
++struct elf_siginfo
++ {
++ int si_signo; /* Signal number. */
++ int si_code; /* Extra code. */
++ int si_errno; /* Errno. */
++ };
++
++/* Definitions to generate Intel SVR4-like core files. These mostly
++ have the same names as the SVR4 types with "elf_" tacked on the
++ front to prevent clashes with Linux definitions, and the typedef
++ forms have been avoided. This is mostly like the SVR4 structure,
++ but more Linuxy, with things that Linux does not support and which
++ GDB doesn't really use excluded. */
++
++struct elf_prstatus
++ {
++ struct elf_siginfo pr_info; /* Info associated with signal. */
++ short int pr_cursig; /* Current signal. */
++ unsigned long int pr_sigpend; /* Set of pending signals. */
++ unsigned long int pr_sighold; /* Set of held signals. */
++ __pid_t pr_pid;
++ __pid_t pr_ppid;
++ __pid_t pr_pgrp;
++ __pid_t pr_sid;
++ struct timeval pr_utime; /* User time. */
++ struct timeval pr_stime; /* System time. */
++ struct timeval pr_cutime; /* Cumulative user time. */
++ struct timeval pr_cstime; /* Cumulative system time. */
++ elf_gregset_t pr_reg; /* GP registers. */
++ int pr_fpvalid; /* True if math copro being used. */
++ };
++
++
++#define ELF_PRARGSZ (80) /* Number of chars for args. */
++
++struct elf_prpsinfo
++ {
++ char pr_state; /* Numeric process state. */
++ char pr_sname; /* Char for pr_state. */
++ char pr_zomb; /* Zombie. */
++ char pr_nice; /* Nice val. */
++ unsigned long int pr_flag; /* Flags. */
++ unsigned short int pr_uid;
++ unsigned short int pr_gid;
++ int pr_pid, pr_ppid, pr_pgrp, pr_sid;
++ /* Lots missing */
++ char pr_fname[16]; /* Filename of executable. */
++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
++ };
++
++/* The rest of this file provides the types for emulation of the
++ Solaris <proc_service.h> interfaces that should be implemented by
++ users of libthread_db. */
++
++/* Addresses. */
++typedef void *psaddr_t;
++
++/* Register sets. Linux has different names. */
++typedef elf_gregset_t prgregset_t;
++typedef elf_fpregset_t prfpregset_t;
++
++/* We don't have any differences between processes and threads,
++ therefore have only one PID type. */
++typedef __pid_t lwpid_t;
++
++/* Process status and info. In the end we do provide typedefs for them. */
++typedef struct elf_prstatus prstatus_t;
++typedef struct elf_prpsinfo prpsinfo_t;
++
++__END_DECLS
++
++#endif /* sys/procfs.h */
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/ucontext.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/ucontext.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,94 @@
++/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++/* Linux/AVR32 ABI compliant context switching support. */
++
++#ifndef _SYS_UCONTEXT_H
++#define _SYS_UCONTEXT_H 1
++
++#include <features.h>
++#include <signal.h>
++#include <sys/procfs.h>
++#include <bits/sigcontext.h>
++
++typedef int greg_t;
++
++/* Number of general registers. */
++#define NGREG 16
++
++/* Container for all general registers. */
++typedef elf_gregset_t gregset_t;
++
++/* Number of each register is the `gregset_t' array. */
++enum
++{
++ R0 = 0,
++#define R0 R0
++ R1 = 1,
++#define R1 R1
++ R2 = 2,
++#define R2 R2
++ R3 = 3,
++#define R3 R3
++ R4 = 4,
++#define R4 R4
++ R5 = 5,
++#define R5 R5
++ R6 = 6,
++#define R6 R6
++ R7 = 7,
++#define R7 R7
++ R8 = 8,
++#define R8 R8
++ R9 = 9,
++#define R9 R9
++ R10 = 10,
++#define R10 R10
++ R11 = 11,
++#define R11 R11
++ R12 = 12,
++#define R12 R12
++ R13 = 13,
++#define R13 R13
++ R14 = 14,
++#define R14 R14
++ R15 = 15
++#define R15 R15
++};
++
++/* Structure to describe FPU registers. */
++typedef elf_fpregset_t fpregset_t;
++
++/* Context to describe whole processor state. */
++typedef struct
++ {
++ gregset_t gregs;
++ fpregset_t fpregs;
++ } mcontext_t;
++
++/* Userlevel context. */
++typedef struct ucontext
++{
++ unsigned long uc_flags;
++ struct ucontext *uc_link;
++ stack_t uc_stack;
++ struct sigcontext uc_mcontext;
++ sigset_t uc_sigmask; /* mask last for extensibility */
++} ucontext_t;
++
++#endif /* sys/ucontext.h */
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/user.h
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/sys/user.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/sys/user.h 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,46 @@
++#ifndef _SYS_USER_H
++#define _SYS_USER_H
++
++struct user_fpregs
++{
++
++};
++
++struct user_regs
++{
++ unsigned long sr;
++ unsigned long pc;
++ unsigned long lr;
++ unsigned long sp;
++ unsigned long r12;
++ unsigned long r11;
++ unsigned long r10;
++ unsigned long r9;
++ unsigned long r8;
++ unsigned long r7;
++ unsigned long r6;
++ unsigned long r5;
++ unsigned long r4;
++ unsigned long r3;
++ unsigned long r2;
++ unsigned long r1;
++ unsigned long r0;
++ unsigned long r12_orig;
++};
++
++struct user
++{
++ struct user_regs regs; /* general registers */
++ size_t u_tsize; /* text size (pages) */
++ size_t u_dsize; /* data size (pages) */
++ size_t u_ssize; /* stack size (pages) */
++ unsigned long start_code; /* text starting address */
++ unsigned long start_data; /* data starting address */
++ unsigned long start_stack; /* stack starting address */
++ long int signal; /* signal causing core dump */
++ struct user_regs * u_ar0; /* help gdb find registers */
++ unsigned long magic; /* identifies a core file */
++ char u_comm[32]; /* user command name */
++};
++
++#endif /* _SYS_USER_H */
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/syscall.S
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/syscall.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/syscall.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,81 @@
++/*
++ * syscall for AVR32/uClibc
++ *
++ * Copyright (C) 2004 Atmel Norway
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU Library General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
++ * for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this program; if not, write to the Free Software Foundation,
++ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++#include <features.h>
++
++ .text
++
++ /*
++ * long int syscall(long int sysno, ...)
++ */
++ .global syscall
++ .type syscall, @function
++ .align 2
++syscall:
++ stm --sp, r3,r5,lr
++ sub lr, sp, -12
++ mov r8, r12
++ ldm lr, r3,r5,r9-r12
++ scall
++ cp.w r12, -4095
++ brlo .Ldone
++
++#ifdef __PIC__
++ lddpc r5, .Lgot
++.Lgotcalc:
++ rsub r5, pc
++# ifdef __UCLIBC_HAS_THREADS__
++ mov r3, r12
++ mcall r5[__errno_location@got]
++ st.w r12[0], r3
++# else
++ ld.w r3, r5[errno@got]
++ st.w r3[0], r12
++# endif
++#else
++# ifdef __UCLIBC_HAS_THREADS__
++ mov r3, r12
++ mcall .Lerrno_location
++ st.w r12[0], r3
++# else
++ lddpc r3, .Lerrno
++ st.w r3[0], r12
++# endif
++#endif
++ mov r12, -1
++
++.Ldone:
++ ldm sp++, r3,r5,pc
++
++ .align 2
++#ifdef __PIC__
++.Lgot:
++ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_
++#else
++# ifdef __UCLIBC_HAS_THREADS__
++.Lerrno_location:
++ .long __errno_location
++# else
++.Lerrno:
++ .long errno
++# endif
++#endif
++
++
++ .size syscall, . - syscall
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/vfork.S
+--- uClibc-0.9.28/libc/sysdeps/linux/avr32/vfork.S 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/avr32/vfork.S 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,55 @@
++ /*
++ * vfork for uClibc
++ *
++ * Copyright (C) 2005 Atmel Norway
++ */
++
++ /*
++ * Clone the process without copying the address space. The
++ * calling process is suspended until the child either exits
++ * or calls execve.
++ *
++ * This all means that we cannot rely on the stack to store
++ * away registers, since they will be overwritten by the child
++ * as soon as it makes another function call (e.g. execve()).
++ * Fortunately, the Linux kernel preserves LR across system calls.
++ */
++#include <features.h>
++#include <sys/syscall.h>
++
++ .global __vfork
++ .type __vfork,@function
++ .align 1
++__vfork:
++ mov r8, __NR_vfork
++ scall
++ cp.w r12, -4096
++ retls r12
++
++ /* vfork failed, so we may use the stack freely */
++ pushm r4-r7,lr
++#ifdef __PIC__
++ lddpc r6, .L_GOT
++ rsub r4, r12, 0
++.L_RGOT:
++ rsub r6, pc
++ mcall r6[__errno_location@got]
++#else
++ rsub r4, r12, 0
++ mcall .L__errno_location
++#endif
++ st.w r12[0], r4
++ popm r4-r7,pc,r12=-1
++
++ .align 2
++#ifdef __PIC__
++.L_GOT:
++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_
++#else
++.L__errno_location:
++ .long __errno_location
++#endif
++ .size __vfork, . - __vfork
++
++ .weak vfork
++ vfork = __vfork
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/create_module.c
+--- uClibc-0.9.28/libc/sysdeps/linux/common/create_module.c 2005-08-18 00:49:42.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/create_module.c 2006-06-21 11:35:57.000000000 +0200
+@@ -61,7 +61,8 @@
+ {
+ return __create_module(name, size, 0, 0);
+ }
+-#else
++/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */
++#elif !defined(__avr32__)
+ /* Sparc, MIPS, etc don't mistake return values for errors. */
+ _syscall2(unsigned long, create_module, const char *, name, size_t, size);
+ #endif
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/getrusage.c
+--- uClibc-0.9.28/libc/sysdeps/linux/common/getrusage.c 2005-08-18 00:49:42.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/getrusage.c 2006-06-21 11:35:56.000000000 +0200
+@@ -10,4 +10,4 @@
+ #include "syscalls.h"
+ #include <unistd.h>
+ #include <wait.h>
+-_syscall2(int, getrusage, int, who, struct rusage *, usage);
++_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage);
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/open64.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/open64.c
+--- uClibc-0.9.28/libc/sysdeps/linux/common/open64.c 2005-08-18 00:49:42.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/open64.c 2006-06-21 11:35:56.000000000 +0200
+@@ -26,7 +26,7 @@
+ #endif
+
+ #ifdef __UCLIBC_HAS_LFS__
+-extern int __libc_open (__const char *file, int oflag, mode_t mode);
++extern int __libc_open (__const char *file, int oflag, ...);
+
+ /* Open FILE with access OFLAG. If OFLAG includes O_CREAT,
+ a third argument is the file protection. */
+diff -Nur uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/__syscall_fcntl.c
+--- uClibc-0.9.28/libc/sysdeps/linux/common/__syscall_fcntl.c 2005-08-18 00:49:42.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-06-21 11:35:56.000000000 +0200
+@@ -12,7 +12,7 @@
+ #include <fcntl.h>
+
+ #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64
+-extern int __libc_fcntl64(int fd, int cmd, long arg);
++extern int __libc_fcntl64(int fd, int cmd, ...);
+ #endif
+
+ #define __NR___syscall_fcntl __NR_fcntl
+diff -Nur uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h uClibc-0.9.28-avr32-20060621/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h
+--- uClibc-0.9.28/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-06-21 11:35:57.000000000 +0200
+@@ -0,0 +1,92 @@
++/* Machine-dependent pthreads configuration and inline functions.
++
++ Copyright (C) 2005 Atmel Norway
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public License as
++ published by the Free Software Foundation; either version 2.1 of the
++ License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++#ifndef _PT_MACHINE_H
++#define _PT_MACHINE_H 1
++
++#include <features.h>
++
++static inline int
++_test_and_set (int *p, int v) __THROW
++{
++ int result;
++
++ __asm__ __volatile__(
++ "/* Inline test and set */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " tst %0, %3\n"
++ " breq 2f\n"
++ " stcond %1, %3\n"
++ " brne 1b\n"
++ "2:"
++ : "=&r"(result), "=m"(*p)
++ : "m"(*p), "r"(v)
++ : "memory", "cc");
++
++ return result;
++}
++
++#ifndef PT_EI
++# define PT_EI extern inline
++#endif
++
++extern long int testandset (int *spinlock);
++extern int __compare_and_swap (long int *p, long int oldval, long int newval);
++
++/* Spinlock implementation; required. */
++PT_EI long int
++testandset (int *spinlock)
++{
++ return _test_and_set(spinlock, 1);
++}
++
++
++/* Get some notion of the current stack. Need not be exactly the top
++ of the stack, just something somewhere in the current frame. */
++#define CURRENT_STACK_FRAME stack_pointer
++register char * stack_pointer __asm__ ("sp");
++
++/* Compare-and-swap for semaphores. */
++
++#define HAS_COMPARE_AND_SWAP
++PT_EI int
++__compare_and_swap(long int *p, long int oldval, long int newval)
++{
++ long int result, tmp;
++
++ __asm__ __volatile__(
++ "/* Inline compare and swap */\n"
++ "1: ssrf 5\n"
++ " ld.w %1, %3\n"
++ " cp.w %1, %5\n"
++ " sreq %0\n"
++ " brne 2f\n"
++ " stcond %2, %4\n"
++ " brne 1b\n"
++ "2:"
++ : "=&r"(result), "=&r"(tmp), "=m"(*p)
++ : "m"(*p), "r"(newval), "r"(oldval)
++ : "cc", "memory");
++
++ return result;
++}
++
++#endif /* pt-machine.h */
+diff -Nur uClibc-0.9.28/Makefile uClibc-0.9.28-avr32-20060621/Makefile
+--- uClibc-0.9.28/Makefile 2005-08-18 00:49:49.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/Makefile 2006-06-21 11:35:57.000000000 +0200
+@@ -163,7 +163,7 @@
+ else \
+ extra_exclude="" ; \
+ fi ; \
+- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \
++ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \
+ | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX)
+ ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y)
+ # Remove floating point related headers since float support is disabled.
+diff -Nur uClibc-0.9.28/Rules.mak uClibc-0.9.28-avr32-20060621/Rules.mak
+--- uClibc-0.9.28/Rules.mak 2005-08-18 00:49:49.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/Rules.mak 2006-06-21 11:35:57.000000000 +0200
+@@ -231,6 +231,10 @@
+ UCLIBC_LDSO=ld.so.1
+ endif
+
++ifeq ($(strip $(TARGET_ARCH)),avr32)
++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000
++endif
++
+ # Keep the check_gcc from being needlessly executed
+ ifndef PIEFLAG
+ ifneq ($(UCLIBC_BUILD_PIE),y)
+@@ -266,7 +270,11 @@
+ # If -msoft-float isn't supported, we want an error anyway.
+ # Hmm... might need to revisit this for arm since it has 2 different
+ # soft float encodings.
++ifeq ($(strip $(TARGET_ARCH)),avr32)
++# GCC on avr32 doesn't support -msoft-float, it's the default.
++else
+ CPU_CFLAGS += -msoft-float
++endif
+ ifeq ($(strip $(TARGET_ARCH)),arm)
+ # No longer needed with current toolchains, but leave it here for now.
+ # If anyone is actually still using gcc 2.95 (say), they can uncomment it.
+diff -Nur uClibc-0.9.28/Rules.mak.orig uClibc-0.9.28-avr32-20060621/Rules.mak.orig
+--- uClibc-0.9.28/Rules.mak.orig 1970-01-01 01:00:00.000000000 +0100
++++ uClibc-0.9.28-avr32-20060621/Rules.mak.orig 2006-06-21 11:35:56.000000000 +0200
+@@ -0,0 +1,358 @@
++# Rules.make for uClibc
++#
++# Copyright (C) 2000 by Lineo, inc.
++# Copyright (C) 2000-2002 Erik Andersen <andersen@uclibc.org>
++#
++# This program is free software; you can redistribute it and/or modify it under
++# the terms of the GNU Library General Public License as published by the Free
++# Software Foundation; either version 2 of the License, or (at your option) any
++# later version.
++#
++# This program is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++# details.
++#
++# You should have received a copy of the GNU Library General Public License
++# along with this program; if not, write to the Free Software Foundation, Inc.,
++# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++
++#-----------------------------------------------------------
++# This file contains rules which are shared between multiple
++# Makefiles. All normal configuration options live in the
++# file named ".config". Don't mess with this file unless
++# you know what you are doing.
++
++
++#-----------------------------------------------------------
++# If you are running a cross compiler, you will want to set
++# 'CROSS' to something more interesting ... Target
++# architecture is determined by asking the CC compiler what
++# arch it compiles things for, so unless your compiler is
++# broken, you should not need to specify TARGET_ARCH.
++#
++# Most people will set this stuff on the command line, i.e.
++# make CROSS=arm-linux-
++# will build uClibc for 'arm'.
++
++ifndef CROSS
++CROSS=
++endif
++CC = $(CROSS)gcc
++AR = $(CROSS)ar
++LD = $(CROSS)ld
++NM = $(CROSS)nm
++RANLIB = $(CROSS)ranlib
++STRIPTOOL = $(CROSS)strip
++
++INSTALL = install
++LN = ln
++RM = rm -f
++
++# Select the compiler needed to build binaries for your development system
++HOSTCC = gcc
++HOSTCFLAGS = -O2 -Wall
++
++
++#---------------------------------------------------------
++# Nothing beyond this point should ever be touched by mere
++# mortals. Unless you hang out with the gods, you should
++# probably leave all this stuff alone.
++MAJOR_VERSION := 0
++MINOR_VERSION := 9
++SUBLEVEL := 28
++VERSION := $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL)
++# Ensure consistent sort order, 'gcc -print-search-dirs' behavior, etc.
++LC_ALL := C
++export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION LC_ALL
++
++SHARED_FULLNAME:=libuClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so
++SHARED_MAJORNAME:=libc.so.$(MAJOR_VERSION)
++UCLIBC_LDSO:=ld-uClibc.so.$(MAJOR_VERSION)
++LIBNAME:=libc.a
++LIBC:=$(TOPDIR)libc/$(LIBNAME)
++
++# Make sure DESTDIR and PREFIX can be used to install
++# PREFIX is a uClibcism while DESTDIR is a common GNUism
++ifndef PREFIX
++PREFIX = $(DESTDIR)
++endif
++
++# Pull in the user's uClibc configuration
++ifeq ($(filter $(noconfig_targets),$(MAKECMDGOALS)),)
++-include $(TOPDIR).config
++endif
++
++ifndef CROSS
++CROSS=$(subst ",, $(strip $(CROSS_COMPILER_PREFIX)))
++endif
++
++# A nifty macro to make testing gcc features easier
++check_gcc=$(shell \
++ if $(CC) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; \
++ then echo "$(1)"; else echo "$(2)"; fi)
++check_as=$(shell \
++ if $(CC) -Wa,$(1) -Wa,-Z -c -o /dev/null -xassembler /dev/null > /dev/null 2>&1; \
++ then echo "-Wa,$(1)"; fi)
++
++# Setup some shortcuts so that silent mode is silent like it should be
++ifeq ($(subst s,,$(MAKEFLAGS)),$(MAKEFLAGS))
++export MAKE_IS_SILENT=n
++SECHO=@echo
++SHELL_SET_X=set -x
++else
++export MAKE_IS_SILENT=y
++SECHO=-@false
++SHELL_SET_X=set +x
++endif
++
++# Make certain these contain a final "/", but no "//"s.
++TARGET_ARCH:=$(shell grep -s ^TARGET_ARCH $(TOPDIR)/.config | sed -e 's/^TARGET_ARCH=//' -e 's/"//g')
++RUNTIME_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(RUNTIME_PREFIX))))))
++DEVEL_PREFIX:=$(strip $(subst //,/, $(subst ,/, $(subst ",, $(strip $(DEVEL_PREFIX))))))
++export RUNTIME_PREFIX DEVEL_PREFIX
++
++ARFLAGS:=cr
++
++OPTIMIZATION:=
++PICFLAG:=-fPIC
++PIEFLAG_NAME:=-fPIE
++
++# Some nice CPU specific optimizations
++ifeq ($(strip $(TARGET_ARCH)),i386)
++ OPTIMIZATION+=$(call check_gcc,-mpreferred-stack-boundary=2,)
++ OPTIMIZATION+=$(call check_gcc,-falign-jumps=0 -falign-loops=0,-malign-jumps=0 -malign-loops=0)
++ CPU_CFLAGS-$(CONFIG_386)+=-march=i386
++ CPU_CFLAGS-$(CONFIG_486)+=-march=i486
++ CPU_CFLAGS-$(CONFIG_ELAN)+=-march=i486
++ CPU_CFLAGS-$(CONFIG_586)+=-march=i586
++ CPU_CFLAGS-$(CONFIG_586MMX)+=$(call check_gcc,-march=pentium-mmx,-march=i586)
++ CPU_CFLAGS-$(CONFIG_686)+=-march=i686
++ CPU_CFLAGS-$(CONFIG_PENTIUMII)+=$(call check_gcc,-march=pentium2,-march=i686)
++ CPU_CFLAGS-$(CONFIG_PENTIUMIII)+=$(call check_gcc,-march=pentium3,-march=i686)
++ CPU_CFLAGS-$(CONFIG_PENTIUM4)+=$(call check_gcc,-march=pentium4,-march=i686)
++ CPU_CFLAGS-$(CONFIG_K6)+=$(call check_gcc,-march=k6,-march=i586)
++ CPU_CFLAGS-$(CONFIG_K7)+=$(call check_gcc,-march=athlon,-malign-functions=4 -march=i686)
++ CPU_CFLAGS-$(CONFIG_CRUSOE)+=-march=i686 -malign-functions=0 -malign-jumps=0 -malign-loops=0
++ CPU_CFLAGS-$(CONFIG_WINCHIPC6)+=$(call check_gcc,-march=winchip-c6,-march=i586)
++ CPU_CFLAGS-$(CONFIG_WINCHIP2)+=$(call check_gcc,-march=winchip2,-march=i586)
++ CPU_CFLAGS-$(CONFIG_CYRIXIII)+=$(call check_gcc,-march=c3,-march=i486) -malign-functions=0 -malign-jumps=0 -malign-loops=0
++ CPU_CFLAGS-$(CONFIG_NEHEMIAH)+=$(call check_gcc,-march=c3-2,-march=i686)
++endif
++
++ifeq ($(strip $(TARGET_ARCH)),arm)
++ OPTIMIZATION+=-fstrict-aliasing
++ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL
++ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB
++ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-mlittle-endian
++ CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mbig-endian
++ CPU_CFLAGS-$(CONFIG_GENERIC_ARM)+=
++ CPU_CFLAGS-$(CONFIG_ARM610)+=-mtune=arm610 -march=armv3
++ CPU_CFLAGS-$(CONFIG_ARM710)+=-mtune=arm710 -march=armv3
++ CPU_CFLAGS-$(CONFIG_ARM720T)+=-mtune=arm7tdmi -march=armv4
++ CPU_CFLAGS-$(CONFIG_ARM920T)+=-mtune=arm9tdmi -march=armv4
++ CPU_CFLAGS-$(CONFIG_ARM922T)+=-mtune=arm9tdmi -march=armv4
++ CPU_CFLAGS-$(CONFIG_ARM926T)+=-mtune=arm9tdmi -march=armv5
++ CPU_CFLAGS-$(CONFIG_ARM1136JF_S)+=-mtune=arm1136jf-s -march=armv6
++ CPU_CFLAGS-$(CONFIG_ARM_SA110)+=-mtune=strongarm110 -march=armv4
++ CPU_CFLAGS-$(CONFIG_ARM_SA1100)+=-mtune=strongarm1100 -march=armv4
++ CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=$(call check_gcc,-mtune=xscale,-mtune=strongarm110)
++ CPU_CFLAGS-$(CONFIG_ARM_XSCALE)+=-march=armv4 -Wa,-mcpu=xscale
++endif
++
++ifeq ($(strip $(TARGET_ARCH)),mips)
++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_1)+=-mips1
++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_2)+=-mips2 -mtune=mips2
++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_3)+=-mips3 -mtune=mips3
++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_4)+=-mips4 -mtune=mips4
++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS32)+=-mips32 -mtune=mips32
++ CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS64)+=-mips64 -mtune=mips32
++endif
++
++ifeq ($(strip $(TARGET_ARCH)),sh)
++ OPTIMIZATION+=-fstrict-aliasing
++ OPTIMIZATION+= $(call check_gcc,-mprefergot,)
++ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL
++ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB
++ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-ml
++ CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mb
++ CPU_CFLAGS-$(CONFIG_SH2)+=-m2
++ CPU_CFLAGS-$(CONFIG_SH3)+=-m3
++ifeq ($(strip $(UCLIBC_HAS_FLOATS)),y)
++ CPU_CFLAGS-$(CONFIG_SH2A)+=-m2a
++ CPU_CFLAGS-$(CONFIG_SH4)+=-m4
++else
++ CPU_CFLAGS-$(CONFIG_SH2A)+=-m2a-nofpu
++ CPU_CFLAGS-$(CONFIG_SH4)+=-m4-nofpu
++endif
++endif
++
++ifeq ($(strip $(TARGET_ARCH)),sh64)
++ OPTIMIZATION+=-fstrict-aliasing
++ CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN):=-EL
++ CPU_LDFLAGS-$(ARCH_BIG_ENDIAN):=-EB
++ CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN):=-ml
++ CPU_CFLAGS-$(ARCH_BIG_ENDIAN):=-mb
++ CPU_CFLAGS-$(CONFIG_SH5)+=-m5-32media
++endif
++
++ifeq ($(strip $(TARGET_ARCH)),h8300)
++ CPU_LDFLAGS-$(CONFIG_H8300H)+= -ms8300h
++ CPU_LDFLAGS-$(CONFIG_H8S) += -ms8300s
++ CPU_CFLAGS-$(CONFIG_H8300H) += -mh -mint32 -fsigned-char
++ CPU_CFLAGS-$(CONFIG_H8S) += -ms -mint32 -fsigned-char
++endif
++
++ifeq ($(strip $(TARGET_ARCH)),cris)
++ CPU_LDFLAGS-$(CONFIG_CRIS)+=-mcrislinux
++ CPU_CFLAGS-$(CONFIG_CRIS)+=-mlinux
++ PICFLAG:=-fpic
++ PIEFLAG_NAME:=-fpie
++endif
++
++ifeq ($(strip $(TARGET_ARCH)),powerpc)
++# PowerPC can hold 8192 entries in its GOT with -fpic which is more than
++# enough. Therefore use -fpic which will reduce code size and generates
++# faster code.
++ PICFLAG:=-fpic
++ PIEFLAG_NAME:=-fpie
++endif
++
++ifeq ($(strip $(TARGET_ARCH)),frv)
++ CPU_LDFLAGS-$(CONFIG_FRV)+=-melf32frvfd
++ CPU_CFLAGS-$(CONFIG_FRV)+=-mfdpic
++ # Using -pie causes the program to have an interpreter, which is
++ # forbidden, so we must make do with -shared. Unfortunately,
++ # -shared by itself would get us global function descriptors
++ # and calls through PLTs, dynamic resolution of symbols, etc,
++ # which would break as well, but -Bsymbolic comes to the rescue.
++ export LDPIEFLAG:=-shared -Bsymbolic
++ UCLIBC_LDSO=ld.so.1
++endif
++
++ifeq ($(strip $(TARGET_ARCH)),avr32)
++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000
++endif
++
++# Keep the check_gcc from being needlessly executed
++ifndef PIEFLAG
++ifneq ($(UCLIBC_BUILD_PIE),y)
++export PIEFLAG:=
++else
++export PIEFLAG:=$(call check_gcc,$(PIEFLAG_NAME),$(PICFLAG))
++endif
++endif
++# We need to keep track of both the CC PIE flag (above) as
++# well as the LD PIE flag (below) because we can't rely on
++# gcc passing -pie if we used -fPIE
++ifndef LDPIEFLAG
++ifneq ($(UCLIBC_BUILD_PIE),y)
++export LDPIEFLAG:=
++else
++export LDPIEFLAG:=$(shell $(LD) --help | grep -q pie && echo "-Wl,-pie")
++endif
++endif
++
++# Use '-Os' optimization if available, else use -O2, allow Config to override
++OPTIMIZATION+=$(call check_gcc,-Os,-O2)
++# Use the gcc 3.4 -funit-at-a-time optimization when available
++OPTIMIZATION+=$(call check_gcc,-funit-at-a-time,)
++
++# Add a bunch of extra pedantic annoyingly strict checks
++XWARNINGS=$(subst ",, $(strip $(WARNINGS))) -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing
++XARCH_CFLAGS=$(subst ",, $(strip $(ARCH_CFLAGS)))
++CPU_CFLAGS=$(subst ",, $(strip $(CPU_CFLAGS-y)))
++
++LDADD_LIBFLOAT=
++ifeq ($(strip $(UCLIBC_HAS_SOFT_FLOAT)),y)
++# Add -msoft-float to the CPU_FLAGS since ldso and libdl ignore CFLAGS.
++# If -msoft-float isn't supported, we want an error anyway.
++# Hmm... might need to revisit this for arm since it has 2 different
++# soft float encodings.
++ CPU_CFLAGS += -msoft-float
++ifeq ($(strip $(TARGET_ARCH)),arm)
++# No longer needed with current toolchains, but leave it here for now.
++# If anyone is actually still using gcc 2.95 (say), they can uncomment it.
++# LDADD_LIBFLOAT=-lfloat
++endif
++endif
++
++SSP_DISABLE_FLAGS:=$(call check_gcc,-fno-stack-protector,)
++ifeq ($(UCLIBC_BUILD_SSP),y)
++SSP_CFLAGS:=$(call check_gcc,-fno-stack-protector-all,)
++SSP_CFLAGS+=$(call check_gcc,-fstack-protector,)
++SSP_ALL_CFLAGS:=$(call check_gcc,-fstack-protector-all,)
++else
++SSP_CFLAGS:=$(SSP_DISABLE_FLAGS)
++endif
++
++# Some nice CFLAGS to work with
++CFLAGS:=$(XWARNINGS) $(CPU_CFLAGS) $(SSP_CFLAGS) \
++ -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)include -I.
++LDFLAGS_NOSTRIP:=$(CPU_LDFLAGS-y) -shared --warn-common --warn-once -z combreloc -z defs
++
++ifeq ($(DODEBUG),y)
++ #CFLAGS += -g3
++ CFLAGS += -O0 -g3
++ LDFLAGS := $(LDFLAGS_NOSTRIP)
++ STRIPTOOL:= true -Since_we_are_debugging
++else
++ CFLAGS += $(OPTIMIZATION) $(XARCH_CFLAGS)
++ LDFLAGS := $(LDFLAGS_NOSTRIP) -s
++endif
++
++ifeq ($(UCLIBC_BUILD_RELRO),y)
++LDFLAGS+=-z relro
++endif
++
++ifeq ($(UCLIBC_BUILD_NOW),y)
++LDFLAGS+=-z now
++endif
++
++# Sigh, some stupid versions of gcc can't seem to cope with '-iwithprefix include'
++#CFLAGS+=-iwithprefix include
++CFLAGS+=-isystem $(shell $(CC) -print-file-name=include)
++
++ifneq ($(DOASSERTS),y)
++ CFLAGS += -DNDEBUG
++endif
++
++CFLAGS_NOPIC:=$(CFLAGS)
++ifeq ($(DOPIC),y)
++ CFLAGS += $(PICFLAG)
++endif
++
++ifeq ($(DL_FINI_CRT_COMPAT),y)
++CFLAGS += -D_DL_FINI_CRT_COMPAT
++endif
++
++# Keep the check_as from being needlessly executed
++ASFLAGS = $(CFLAGS)
++ifndef ASFLAGS_NOEXEC
++ifeq ($(UCLIBC_BUILD_NOEXECSTACK),y)
++export ASFLAGS_NOEXEC := $(call check_as,--noexecstack)
++else
++export ASFLAGS_NOEXEC :=
++endif
++endif
++ASFLAGS += $(ASFLAGS_NOEXEC)
++
++LIBGCC_CFLAGS ?= $(CFLAGS) $(CPU_CFLAGS-y)
++LIBGCC:=$(shell $(CC) $(LIBGCC_CFLAGS) -print-libgcc-file-name)
++LIBGCC_DIR:=$(dir $(LIBGCC))
++
++########################################
++#
++# uClinux shared lib support
++#
++
++ifeq ($(CONFIG_BINFMT_SHARED_FLAT),y)
++ # For the shared version of this, we specify no stack and its library ID
++ FLTFLAGS += -s 0
++ LIBID=1
++ export LIBID FLTFLAGS
++ SHARED_TARGET = lib/libc
++endif
++
++TARGET_ARCH:=$(strip $(subst ",, $(strip $(TARGET_ARCH))))
+diff -Nur uClibc-0.9.28/utils/ldd.c uClibc-0.9.28-avr32-20060621/utils/ldd.c
+--- uClibc-0.9.28/utils/ldd.c 2005-08-18 00:49:41.000000000 +0200
++++ uClibc-0.9.28-avr32-20060621/utils/ldd.c 2006-06-21 11:35:57.000000000 +0200
+@@ -56,6 +56,11 @@
+ #define ELFCLASSM ELFCLASS32
+ #endif
+
++#if defined(__avr32__)
++#define MATCH_MACHINE(x) (x == EM_AVR32)
++#define ELFCLASSM ELFCLASS32
++#endif
++
+ #if defined(__s390__)
+ #define MATCH_MACHINE(x) (x == EM_S390)
+ #define ELFCLASSM ELFCLASS32
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch
new file mode 100644
index 0000000000..6608b4df94
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/uClibc-0.9.28-avr32-20061019.patch
@@ -0,0 +1,4080 @@
+Index: uClibc-0.9.28-avr32/Makefile
+===================================================================
+--- uClibc-0.9.28-avr32.orig/Makefile 2006-10-19 15:05:49.000000000 +0200
++++ uClibc-0.9.28-avr32/Makefile 2006-10-19 15:05:52.000000000 +0200
+@@ -163,7 +163,7 @@ install_dev:
+ else \
+ extra_exclude="" ; \
+ fi ; \
+- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \
++ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \
+ | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX)
+ ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y)
+ # Remove floating point related headers since float support is disabled.
+Index: uClibc-0.9.28-avr32/extra/scripts/fix_includes.sh
+===================================================================
+--- uClibc-0.9.28-avr32.orig/extra/scripts/fix_includes.sh 2006-10-19 15:05:49.000000000 +0200
++++ uClibc-0.9.28-avr32/extra/scripts/fix_includes.sh 2006-10-19 15:05:52.000000000 +0200
+@@ -78,36 +78,6 @@ if [ ! -d "$KERNEL_SOURCE" ]; then
+ exit 1;
+ fi;
+
+-if [ -f "$KERNEL_SOURCE/Makefile" ] ; then
+-# set current VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION
+-eval `sed -n -e 's/^\([A-Z]*\) = \([0-9]*\)$/\1=\2/p' -e 's/^\([A-Z]*\) = \(-[-a-z0-9]*\)$/\1=\2/p' $KERNEL_SOURCE/Makefile`
+-else
+-ver=`grep UTS_RELEASE $KERNEL_SOURCE/include/linux/version.h | cut -d '"' -f 2`
+-VERSION=`echo "$ver" | cut -d '.' -f 1`
+-PATCHLEVEL=`echo "$ver" | cut -d '.' -f 2`
+-if echo "$ver" | grep -q '-' ; then
+-SUBLEVEL=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.//" | cut -d '-' -f 1`
+-EXTRAVERSION=`echo "$ver" | sed "s/${VERSION}.${PATCHLEVEL}.${SUBLEVEL}-//"`
+-else
+-SUBLEVEL=`echo "$ver" | cut -d '.' -f 3`
+-#EXTRAVERSION=
+-fi
+-fi
+-if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ]
+-then
+- echo "Unable to determine version for kernel headers"
+- echo -e "\tprovided in directory $KERNEL_SOURCE"
+- exit 1
+-fi
+-
+-if [ "$MAKE_IS_SILENT" != "y" ]; then
+-echo "Current kernel version is $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION}"
+-echo -e "\n"
+-echo "Using kernel headers from $VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} for architecture '$TARGET_ARCH'"
+-echo -e "\tprovided in directory $KERNEL_SOURCE"
+-echo -e "\n"
+-fi
+-
+ # Create a symlink to include/asm
+
+ rm -f include/asm*
+@@ -172,7 +142,7 @@ fi;
+
+
+ # Annoyingly, 2.6.x kernel headers also need an include/asm-generic/ directory
+-if [ $VERSION -eq 2 ] && [ $PATCHLEVEL -ge 6 ] ; then
++if [ -d $KERNEL_SOURCE/include/asm-generic ] ; then
+ ln -fs $KERNEL_SOURCE/include/asm-generic include/asm-generic
+ fi;
+
+Index: uClibc-0.9.28-avr32/libc/Makefile
+===================================================================
+--- uClibc-0.9.28-avr32.orig/libc/Makefile 2006-10-19 15:05:49.000000000 +0200
++++ uClibc-0.9.28-avr32/libc/Makefile 2006-10-19 15:05:52.000000000 +0200
+@@ -59,7 +59,7 @@ $(LIBNAME) shared_$(LIBNAME) ar-target:
+ $(AR) dN 2 $(LIBNAME) $$objs && \
+ $(AR) dN 2 $(LIBNAME) $$objs
+ @for objfile in obj.signal \
+- obj.string.generic obj.string.$(TARGET_ARCH) obj.string \
++ obj.string obj.string.generic obj.string.$(TARGET_ARCH) \
+ obj.sysdeps.common obj.sysdeps.$(TARGET_ARCH) ; do \
+ if [ -e $$objfile ] ; then \
+ if [ "$(MAKE_IS_SILENT)" = "n" ] ; then \
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/getrusage.c
+===================================================================
+--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/getrusage.c 2006-10-19 15:05:49.000000000 +0200
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/getrusage.c 2006-10-19 15:05:52.000000000 +0200
+@@ -10,4 +10,4 @@
+ #include "syscalls.h"
+ #include <unistd.h>
+ #include <wait.h>
+-_syscall2(int, getrusage, int, who, struct rusage *, usage);
++_syscall2(int, getrusage, __rusage_who_t, who, struct rusage *, usage);
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/__syscall_fcntl.c
+===================================================================
+--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-10-19 15:05:49.000000000 +0200
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/__syscall_fcntl.c 2006-10-19 15:05:52.000000000 +0200
+@@ -12,7 +12,7 @@
+ #include <fcntl.h>
+
+ #if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64
+-extern int __libc_fcntl64(int fd, int cmd, long arg);
++extern int __libc_fcntl64(int fd, int cmd, ...);
+ #endif
+
+ #define __NR___syscall_fcntl __NR_fcntl
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/open64.c
+===================================================================
+--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/open64.c 2006-10-19 15:05:49.000000000 +0200
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/open64.c 2006-10-19 15:05:52.000000000 +0200
+@@ -26,7 +26,7 @@
+ #endif
+
+ #ifdef __UCLIBC_HAS_LFS__
+-extern int __libc_open (__const char *file, int oflag, mode_t mode);
++extern int __libc_open (__const char *file, int oflag, ...);
+
+ /* Open FILE with access OFLAG. If OFLAG includes O_CREAT,
+ a third argument is the file protection. */
+Index: uClibc-0.9.28-avr32/extra/Configs/Config.avr32
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/extra/Configs/Config.avr32 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,42 @@
++#
++# For a description of the syntax of this configuration file,
++# see extra/config/Kconfig-language.txt
++#
++
++config HAVE_ELF
++ bool
++ default y
++
++config TARGET_ARCH
++ default "avr32"
++
++config ARCH_CFLAGS
++ string
++
++config ARCH_LDFLAGS
++ string
++
++config LIBGCC_CFLAGS
++ string
++
++config ARCH_SUPPORTS_BIG_ENDIAN
++ bool
++ default y
++
++config UCLIBC_COMPLETELY_PIC
++ select FORCE_SHAREABLE_TEXT_SEGMENTS
++ bool
++ default y
++
++choice
++ prompt "Target CPU Type"
++ default CONFIG_AP7000
++
++config CONFIG_AP7000
++ bool "AP7000"
++
++endchoice
++
++config LINKRELAX
++ bool "Enable linker optimizations"
++ default n
+Index: uClibc-0.9.28-avr32/extra/Configs/Config.in
+===================================================================
+--- uClibc-0.9.28-avr32.orig/extra/Configs/Config.in 2006-10-19 15:05:49.000000000 +0200
++++ uClibc-0.9.28-avr32/extra/Configs/Config.in 2006-10-19 15:05:52.000000000 +0200
+@@ -16,6 +16,9 @@ config TARGET_alpha
+ config TARGET_arm
+ bool "arm"
+
++config TARGET_avr32
++ bool "avr32"
++
+ config TARGET_bfin
+ bool "bfin"
+
+@@ -83,6 +86,10 @@ if TARGET_arm
+ source "extra/Configs/Config.arm"
+ endif
+
++if TARGET_avr32
++source "extra/Configs/Config.avr32"
++endif
++
+ if TARGET_bfin
+ source "extra/Configs/Config.bfin"
+ endif
+Index: uClibc-0.9.28-avr32/include/elf.h
+===================================================================
+--- uClibc-0.9.28-avr32.orig/include/elf.h 2006-10-19 15:05:49.000000000 +0200
++++ uClibc-0.9.28-avr32/include/elf.h 2006-10-19 15:05:52.000000000 +0200
+@@ -261,6 +261,8 @@ typedef struct
+ #define EM_NIOS32 0xfebb /* Altera Nios 32 */
+ #define EM_ALTERA_NIOS2 0x9ee5 /* Altera Nios II */
+
++#define EM_AVR32 0x18ad
++
+ /* V850 backend magic number. Written in the absense of an ABI. */
+ #define EM_CYGNUS_V850 0x9080
+
+@@ -2687,6 +2689,55 @@ typedef Elf32_Addr Elf32_Conflict;
+ /* Keep this the last entry. */
+ #define R_V850_NUM 25
+
++/* Atmel AVR32 relocations. */
++#define R_AVR32_NONE 0
++#define R_AVR32_32 1
++#define R_AVR32_16 2
++#define R_AVR32_8 3
++#define R_AVR32_32_PCREL 4
++#define R_AVR32_16_PCREL 5
++#define R_AVR32_8_PCREL 6
++#define R_AVR32_DIFF32 7
++#define R_AVR32_DIFF16 8
++#define R_AVR32_DIFF8 9
++#define R_AVR32_GOT32 10
++#define R_AVR32_GOT16 11
++#define R_AVR32_GOT8 12
++#define R_AVR32_21S 13
++#define R_AVR32_16U 14
++#define R_AVR32_16S 15
++#define R_AVR32_8S 16
++#define R_AVR32_8S_EXT 17
++#define R_AVR32_22H_PCREL 18
++#define R_AVR32_18W_PCREL 19
++#define R_AVR32_16B_PCREL 20
++#define R_AVR32_16N_PCREL 21
++#define R_AVR32_14UW_PCREL 22
++#define R_AVR32_11H_PCREL 23
++#define R_AVR32_10UW_PCREL 24
++#define R_AVR32_9H_PCREL 25
++#define R_AVR32_9UW_PCREL 26
++#define R_AVR32_HI16 27
++#define R_AVR32_LO16 28
++#define R_AVR32_GOTPC 29
++#define R_AVR32_GOTCALL 30
++#define R_AVR32_LDA_GOT 31
++#define R_AVR32_GOT21S 32
++#define R_AVR32_GOT18SW 33
++#define R_AVR32_GOT16S 34
++#define R_AVR32_GOT7UW 35
++#define R_AVR32_32_CPENT 36
++#define R_AVR32_CPCALL 37
++#define R_AVR32_16_CP 38
++#define R_AVR32_9W_CP 39
++#define R_AVR32_RELATIVE 40
++#define R_AVR32_GLOB_DAT 41
++#define R_AVR32_JMP_SLOT 42
++#define R_AVR32_ALIGN 43
++#define R_AVR32_NUM 44
++
++/* AVR32 dynamic tags */
++#define DT_AVR32_GOTSZ 0x70000001 /* Total size of GOT in bytes */
+
+ #define R_H8_NONE 0
+ #define R_H8_DIR32 1
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,93 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2000-2003 Erik Andersen <andersen@uclibc.org>
++#
++# This program is free software; you can redistribute it and/or modify it under
++# the terms of the GNU Library General Public License as published by the Free
++# Software Foundation; either version 2 of the License, or (at your option) any
++# later version.
++#
++# This program is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++# details.
++#
++# You should have received a copy of the GNU Library General Public License
++# along with this program; if not, write to the Free Software Foundation, Inc.,
++# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++TOPDIR=../../../../
++include $(TOPDIR)Rules.mak
++ASFLAGS=$(CFLAGS)
++
++CRT_SRC = crt1.S
++CRT_OBJ = crt1.o
++SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ))
++CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
++
++SSRC=__longjmp.S setjmp.S bsd-setjmp.S vfork.S \
++ bsd-_setjmp.S sigrestorer.S syscall.S
++SOBJS=$(patsubst %.S,%.o, $(SSRC))
++
++CSRC=clone.c brk.c sigaction.c mmap.c
++COBJS=$(patsubst %.c,%.o, $(CSRC))
++
++OBJS=$(SOBJS) $(COBJS)
++
++OBJ_LIST=../../../obj.sysdeps.$(TARGET_ARCH)
++
++all: $(OBJ_LIST)
++
++$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ) $(CTOR_TARGETS)
++ echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $(OBJ_LIST)
++ $(INSTALL) -d $(TOPDIR)lib/
++ cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/
++
++$(CRT_OBJ): $(CRT_SRC)
++ $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++$(SCRT_OBJ): $(CRT_SRC)
++ $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++$(SOBJS): %.o : %.S
++ $(CC) $(ASFLAGS) -c $< -o $@
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++$(COBJS): %.o : %.c
++ $(CC) $(CFLAGS) -c $< -o $@
++ $(STRIPTOOL) -x -R .note -R .comment $*.o
++
++ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y)
++crti.o: crti.S
++ $(CC) $(ASFLAGS) -c crti.S -o crti.o
++
++$(TOPDIR)lib/crti.o: crti.o
++ $(INSTALL) -d $(TOPDIR)lib/
++ cp crti.o $(TOPDIR)lib/
++
++crtn.o: crtn.S
++ $(CC) $(ASFLAGS) -c crtn.S -o crtn.o
++
++$(TOPDIR)lib/crtn.o: crtn.o
++ $(INSTALL) -d $(TOPDIR)lib/
++ cp crtn.o $(TOPDIR)lib/
++else
++$(TOPDIR)lib/crti.o:
++ $(INSTALL) -d $(TOPDIR)lib/
++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crti.o
++$(TOPDIR)lib/crtn.o:
++ $(INSTALL) -d $(TOPDIR)lib/
++ $(AR) $(ARFLAGS) $(TOPDIR)lib/crtn.o
++endif
++
++
++headers:
++# $(LN) -fs ../libc/sysdeps/linux/avr32/fpu_control.h $(TOPDIR)/include/
++
++clean:
++ $(RM) *.[oa] *~ core
++ $(RM) bits/sysnum.h
++ $(RM) gmon-start.S
++
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/__longjmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/__longjmp.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,17 @@
++/* longjmp for AVR32
++ *
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++
++ .global __longjmp
++ .type __longjmp,"function"
++ .align 1
++__longjmp:
++ ldm r12++, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr
++ mov r12, r11 /* get the return value right */
++ mustr r8 /* restore status register (lower half) */
++ cp r12, 0 /* can't return zero */
++ frs
++ moveq r12, 1
++ mov pc,lr
++ .size __longjmp, . - __longjmp
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/_mmap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/_mmap.c 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,33 @@
++/* Copyright (C) 2005 Atmel Norway
++
++ This program is free software; you can redistribute it and/or modify it under
++ the terms of the GNU Library General Public License as published by the Free
++ Software Foundation; either version 2 of the License, or (at your option) any
++ later version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++ details.
++
++ You should have received a copy of the GNU Library General Public License
++ along with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++ Derived in part from the Linux-8086 C library, the GNU C Library, and several
++ other sundry sources. Files within this library are copyright by their
++ respective copyright holders.
++ */
++
++#include <errno.h>
++#include <sys/mman.h>
++#include <sys/syscall.h>
++
++#define __NR_mmap2 __NR_mmap
++
++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff);
++
++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset)
++{
++ return mmap2(addr, len, prot, flags, fd, offset >> 12);
++}
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/atomicity.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/atomicity.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,86 @@
++/* Low-level functions for atomic operations. AVR32 version.
++ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _ATOMICITY_H
++#define _ATOMICITY_H 1
++
++#include <inttypes.h>
++
++static inline int
++__attribute__((unused))
++exchange_and_add (volatile uint32_t *mem, int val)
++{
++ int tmp, result;
++
++ __asm__ __volatile__(
++ "/* Inline exchange and add */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %3\n"
++ " add %1, %0, %4\n"
++ " stcond %2, %1\n"
++ " brne 1b"
++ : "=&r"(result), "=&r"(tmp), "=m"(*mem)
++ : "m"(*mem), "r"(val)
++ : "cc", "memory");
++
++ return result;
++}
++
++static inline void
++__attribute__((unused))
++atomic_add (volatile uin32_t *mem, int val)
++{
++ int result;
++
++ __asm__ __volatile__(
++ "/* Inline atomic add */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " add %0, %3\n"
++ " stcond %2, %0\n"
++ " brne 1b"
++ : "=&r"(result), "=m"(*mem)
++ : "m"(*mem), "r"(val)
++ : "cc", "memory");
++}
++
++static inline int
++__attribute__((unused))
++compare_and_swap(volatile long int *p, long int oldval, long int newval)
++{
++ long int result, tmp;
++
++ __asm__ __volatile__(
++ "/* Inline compare and swap */\n"
++ "1: ssrf 5\n"
++ " ld.w %1, %3\n"
++ " cp.w %1, %5\n"
++ " sreq %0\n"
++ " brne 2f\n"
++ " stcond %2, %4\n"
++ " brne 1b\n"
++ "2:"
++ : "=&r"(result), "=&r"(tmp), "=m"(*p)
++ : "m"(*p), "r"(newval), "r"(oldval)
++ : "cc", "memory");
++
++ return result;
++}
++
++#endif /* atomicity.h */
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/byteswap.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/byteswap.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,80 @@
++/* Macros to swap the order of bytes in integer values.
++ Copyright (C) 2005 Atmel Norway.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#if !defined _BYTESWAP_H && !defined _NETINET_IN_H
++# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
++#endif
++
++#ifndef _BITS_BYTESWAP_H
++#define _BITS_BYTESWAP_H 1
++
++/* Swap bytes in 16 bit value. */
++#if defined __GNUC__
++# define __bswap_16(x) (__extension__ __builtin_bswap_16(x))
++#else
++/* This is better than nothing. */
++static __inline unsigned short int
++__bswap_16 (unsigned short int __bsx)
++{
++ return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8));
++}
++#endif
++
++/* Swap bytes in 32 bit value. */
++#if defined __GNUC__
++# define __bswap_32(x) (__extension__ __builtin_bswap_32(x))
++#else
++static __inline unsigned int
++__bswap_32 (unsigned int __bsx)
++{
++ return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) |
++ (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24));
++}
++#endif
++
++#if defined __GNUC__
++/* Swap bytes in 64 bit value. */
++# define __bswap_constant_64(x) \
++ ((((x) & 0xff00000000000000ull) >> 56) \
++ | (((x) & 0x00ff000000000000ull) >> 40) \
++ | (((x) & 0x0000ff0000000000ull) >> 24) \
++ | (((x) & 0x000000ff00000000ull) >> 8) \
++ | (((x) & 0x00000000ff000000ull) << 8) \
++ | (((x) & 0x0000000000ff0000ull) << 24) \
++ | (((x) & 0x000000000000ff00ull) << 40) \
++ | (((x) & 0x00000000000000ffull) << 56))
++
++# define __bswap_64(x) \
++ (__extension__ \
++ ({ \
++ union { \
++ __extension__ unsigned long long int __ll; \
++ unsigned int __l[2]; \
++ } __w, __r; \
++ if (__builtin_constant_p(x)) \
++ __r.__ll = __bswap_constant_64(x); \
++ else { \
++ __w.__ll = (x); \
++ __r.__l[0] = __bswap_32(__w.__l[1]); \
++ __r.__l[1] = __bswap_32(__w.__l[0]); \
++ } \
++ __r.__ll; \
++ }))
++#endif
++
++#endif /* _BITS_BYTESWAP_H */
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/endian.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/endian.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,7 @@
++/* AVR32 is big-endian */
++
++#ifndef _ENDIAN_H
++# error "Never use <bits/endian.h> directly; include <endian.h> instead."
++#endif
++
++#define __BYTE_ORDER __BIG_ENDIAN
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/fcntl.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,167 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ *
++ * This file is part of the Linux kernel
++ */
++#ifndef _FCNTL_H
++# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
++#endif
++
++#include <sys/types.h>
++
++/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
++ located on an ext2 file system */
++#define O_ACCMODE 0003
++#define O_RDONLY 00
++#define O_WRONLY 01
++#define O_RDWR 02
++#define O_CREAT 0100 /* not fcntl */
++#define O_EXCL 0200 /* not fcntl */
++#define O_NOCTTY 0400 /* not fcntl */
++#define O_TRUNC 01000 /* not fcntl */
++#define O_APPEND 02000
++#define O_NONBLOCK 04000
++#define O_NDELAY O_NONBLOCK
++#define O_SYNC 010000
++#define O_ASYNC 020000
++
++#ifdef __USE_GNU
++# define O_DIRECTORY 040000 /* must be a directory */
++# define O_NOFOLLOW 0100000 /* don't follow links */
++# define O_DIRECT 0200000 /* direct disk access */
++#endif
++
++#ifdef __USE_LARGEFILE64
++# define O_LARGEFILE 0400000
++#endif
++
++/* For now Linux has synchronisity options for data and read operations.
++ We define the symbols here but let them do the same as O_SYNC since
++ this is a superset. */
++#if defined __USE_POSIX199309 || defined __USE_UNIX98
++# define O_DSYNC O_SYNC /* Synchronize data. */
++# define O_RSYNC O_SYNC /* Synchronize read operations. */
++#endif
++
++#define F_DUPFD 0 /* dup */
++#define F_GETFD 1 /* get close_on_exec */
++#define F_SETFD 2 /* set/clear close_on_exec */
++#define F_GETFL 3 /* get file->f_flags */
++#define F_SETFL 4 /* set file->f_flags */
++
++#ifndef __USE_FILE_OFFSET64
++# define F_GETLK 5
++# define F_SETLK 6
++# define F_SETLKW 7
++#else
++# define F_GETLK F_GETLK64
++# define F_SETLK F_SETLK64
++# define F_SETLKW F_SETLKW64
++#endif
++#define F_GETLK64 12 /* using 'struct flock64' */
++#define F_SETLK64 13
++#define F_SETLKW64 14
++
++#if defined __USE_BSD || defined __USE_XOPEN2K
++# define F_SETOWN 8 /* for sockets. */
++# define F_GETOWN 9 /* for sockets. */
++#endif
++
++#ifdef __USE_GNU
++# define F_SETSIG 10 /* for sockets. */
++# define F_GETSIG 11 /* for sockets. */
++#endif
++
++#ifdef __USE_GNU
++# define F_SETLEASE 1024 /* Set a lease. */
++# define F_GETLEASE 1025 /* Enquire what lease is active. */
++# define F_NOTIFY 1026 /* Request notfications on a directory. */
++#endif
++
++/* for F_[GET|SET]FL */
++#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
++
++/* for posix fcntl() and lockf() */
++#define F_RDLCK 0
++#define F_WRLCK 1
++#define F_UNLCK 2
++
++/* for old implementation of bsd flock () */
++#define F_EXLCK 4 /* or 3 */
++#define F_SHLCK 8 /* or 4 */
++
++/* for leases */
++#define F_INPROGRESS 16
++
++#ifdef __USE_BSD
++/* operations for bsd flock(), also used by the kernel implementation */
++# define LOCK_SH 1 /* shared lock */
++# define LOCK_EX 2 /* exclusive lock */
++# define LOCK_NB 4 /* or'd with one of the above to prevent
++ blocking */
++# define LOCK_UN 8 /* remove lock */
++#endif
++
++#ifdef __USE_GNU
++# define LOCK_MAND 32 /* This is a mandatory flock */
++# define LOCK_READ 64 /* ... Which allows concurrent
++ read operations */
++# define LOCK_WRITE 128 /* ... Which allows concurrent
++ write operations */
++# define LOCK_RW 192 /* ... Which allows concurrent
++ read & write ops */
++#endif
++
++#ifdef __USE_GNU
++/* Types of directory notifications that may be requested with F_NOTIFY. */
++# define DN_ACCESS 0x00000001 /* File accessed. */
++# define DN_MODIFY 0x00000002 /* File modified. */
++# define DN_CREATE 0x00000004 /* File created. */
++# define DN_DELETE 0x00000008 /* File removed. */
++# define DN_RENAME 0x00000010 /* File renamed. */
++# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
++# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
++#endif
++
++struct flock {
++ short l_type;
++ short l_whence;
++#ifndef __USE_FILE_OFFSET64
++ __off_t l_start;
++ __off_t l_len;
++#else
++ __off64_t l_start;
++ __off64_t l_len;
++#endif
++ __pid_t l_pid;
++};
++
++#ifdef __USE_LARGEFILE64
++struct flock64 {
++ short l_type;
++ short l_whence;
++ __off64_t l_start;
++ __off64_t l_len;
++ __pid_t l_pid;
++};
++#endif
++
++/* Define some more compatibility macros to be backward compatible with
++ * BSD systems which did not managed to hide these kernel macros. */
++#ifdef __USE_BSD
++# define FAPPEND O_APPEND
++# define FFSYNC O_FSYNC
++# define FASYNC O_ASYNC
++# define FNONBLOCK O_NONBLOCK
++# define FNDELAY O_NDELAY
++#endif /* Use BSD. */
++
++/* Advise to `posix_fadvise'. */
++#ifdef __USE_XOPEN2K
++# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
++# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
++# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
++# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
++# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
++# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
++#endif
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_stat.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_stat.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,63 @@
++#ifndef _BITS_STAT_STRUCT_H
++#define _BITS_STAT_STRUCT_H
++
++/*
++ * This file provides struct stat, taken from kernel 2.6.4
++ * (include/asm-avr32/stat.h revision 1.1).
++ */
++
++struct kernel_stat {
++ unsigned long st_dev;
++ unsigned long st_ino;
++ unsigned short st_mode;
++ unsigned short st_nlink;
++ unsigned short st_uid;
++ unsigned short st_gid;
++ unsigned long st_rdev;
++ unsigned long st_size;
++ unsigned long st_blksize;
++ unsigned long st_blocks;
++ unsigned long st_atime;
++ unsigned long st_atime_nsec;
++ unsigned long st_mtime;
++ unsigned long st_mtime_nsec;
++ unsigned long st_ctime;
++ unsigned long st_ctime_nsec;
++ unsigned long __unused4;
++ unsigned long __unused5;
++};
++
++#define STAT_HAVE_NSEC 1
++
++struct kernel_stat64 {
++ unsigned long long st_dev;
++
++ unsigned long long st_ino;
++ unsigned int st_mode;
++ unsigned int st_nlink;
++
++ unsigned long st_uid;
++ unsigned long st_gid;
++
++ unsigned long long st_rdev;
++
++ long long st_size;
++ unsigned long __pad1;
++ unsigned long st_blksize;
++
++ unsigned long long st_blocks;
++
++ unsigned long st_atime;
++ unsigned long st_atime_nsec;
++
++ unsigned long st_mtime;
++ unsigned long st_mtime_nsec;
++
++ unsigned long st_ctime;
++ unsigned long st_ctime_nsec;
++
++ unsigned long __unused1;
++ unsigned long __unused2;
++};
++
++#endif /* _BITS_STAT_STRUCT_H */
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_types.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/kernel_types.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,56 @@
++/* Note that we use the exact same include guard #define names
++ * as asm/posix_types.h. This will avoid gratuitous conflicts
++ * with the posix_types.h kernel header, and will ensure that
++ * our private content, and not the kernel header, will win.
++ * -Erik
++ */
++#ifndef __ASM_AVR32_POSIX_TYPES_H
++#define __ASM_AVR32_POSIX_TYPES_H
++
++/*
++ * This file is generally used by user-level software, so you need to
++ * be a little careful about namespace pollution etc. Also, we cannot
++ * assume GCC is being used.
++ */
++
++typedef unsigned long __kernel_dev_t;
++typedef unsigned long __kernel_ino_t;
++typedef unsigned short __kernel_mode_t;
++typedef unsigned short __kernel_nlink_t;
++typedef long __kernel_off_t;
++typedef int __kernel_pid_t;
++typedef unsigned short __kernel_ipc_pid_t;
++typedef unsigned int __kernel_uid_t;
++typedef unsigned int __kernel_gid_t;
++typedef unsigned long __kernel_size_t;
++typedef int __kernel_ssize_t;
++typedef int __kernel_ptrdiff_t;
++typedef long __kernel_time_t;
++typedef long __kernel_suseconds_t;
++typedef long __kernel_clock_t;
++typedef int __kernel_timer_t;
++typedef int __kernel_clockid_t;
++typedef int __kernel_daddr_t;
++typedef char * __kernel_caddr_t;
++typedef unsigned short __kernel_uid16_t;
++typedef unsigned short __kernel_gid16_t;
++typedef unsigned int __kernel_uid32_t;
++typedef unsigned int __kernel_gid32_t;
++
++typedef unsigned short __kernel_old_uid_t;
++typedef unsigned short __kernel_old_gid_t;
++typedef unsigned short __kernel_old_dev_t;
++
++#ifdef __GNUC__
++typedef long long __kernel_loff_t;
++#endif
++
++typedef struct {
++#if defined(__USE_ALL)
++ int val[2];
++#else
++ int __val[2];
++#endif
++} __kernel_fsid_t;
++
++#endif /* __ASM_AVR32_POSIX_TYPES_H */
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/machine-gmon.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/machine-gmon.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,69 @@
++/* Machine-dependent definitions for profiling support. AVR32 version.
++ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#define mcount_internal __mcount_internal
++
++#define _MCOUNT_DECL(frompc, selfpc) \
++static void __attribute((used)) mcount_internal(unsigned long frompc, unsigned long selfpc)
++
++/*
++ * This mcount implementation expects to get called after the prologue
++ * has been run. It also expects that r7 contains a valid frame
++ * pointer.
++ *
++ * When profiling, the compiler should generate something like this at
++ * each function entry:
++ *
++ * pushm r0-r7,lr // lr mandatory, others optional
++ * mov r7, sp
++ * // rest of prologue goes here
++ * mcall pc[.LC1 - .]
++ * // rest of function goes here
++ * .LC1:
++ * .long mcount
++ *
++ * or for PIC:
++ *
++ * pushm r0-r7,lr
++ * mov r7, sp
++ * // rest of prologue goes here
++ * lddpc r0, .LC1
++ * .L1: rsub r0, pc
++ * mcall r0[mcount@GOT]
++ * // rest of function goes here
++ * .LC1:
++ * .long .L1 - _GLOBAL_OFFSET_TABLE_
++ *
++ * This way, when mcount() is called, r7 points to the calling
++ * function's return address. It is guaranteed that calling mcount
++ * will clobber no registers except LR, which is unavoidable.
++ */
++#define MCOUNT asm( \
++ " .align 4\n" \
++ " .global _mcount\n" \
++ " .type _mcount,@function\n" \
++ "_mcount:\n" \
++ " pushm r8-r12,lr\n" \
++ " mov r11, lr\n" \
++ " ld.w r12, r7[0]\n" \
++ " rcall __mcount_internal\n" \
++ " popm r8-r12,pc\n" \
++ " .size _mcount, . - _mcount\n" \
++ " .weak mcount\n" \
++ " mcount = _mcount");
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/mman.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/mman.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,95 @@
++/* Definitions for POSIX memory map interface. Linux/AVR32 version.
++ Copyright (C) 1997, 2000 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_MMAN_H
++# error "Never include this file directly. Use <sys/mman.h> instead"
++#endif
++
++/* The following definitions basically come from the kernel headers.
++ But the kernel header is not namespace clean. */
++
++
++/* Protections are chosen from these bits, OR'd together. The
++ implementation does not necessarily support PROT_EXEC or PROT_WRITE
++ without PROT_READ. The only guarantees are that no writing will be
++ allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
++
++#define PROT_READ 0x1 /* Page can be read. */
++#define PROT_WRITE 0x2 /* Page can be written. */
++#define PROT_EXEC 0x4 /* Page can be executed. */
++#define PROT_NONE 0x0 /* Page can not be accessed. */
++
++/* Sharing types (must choose one and only one of these). */
++#define MAP_SHARED 0x01 /* Share changes. */
++#define MAP_PRIVATE 0x02 /* Changes are private. */
++#ifdef __USE_MISC
++# define MAP_TYPE 0x0f /* Mask for type of mapping. */
++#endif
++
++/* Other flags. */
++#define MAP_FIXED 0x10 /* Interpret addr exactly. */
++#ifdef __USE_MISC
++# define MAP_FILE 0
++# define MAP_ANONYMOUS 0x20 /* Don't use a file. */
++# define MAP_ANON MAP_ANONYMOUS
++#endif
++
++/* These are Linux-specific. */
++#ifdef __USE_MISC
++# define MAP_GROWSDOWN 0x0100 /* Stack-like segment. */
++# define MAP_DENYWRITE 0x0800 /* ETXTBSY */
++# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable. */
++# define MAP_LOCKED 0x2000 /* Lock the mapping. */
++# define MAP_NORESERVE 0x4000 /* Don't check for reservations. */
++# define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */
++# define MAP_NONBLOCK 0x10000 /* do not block on IO */
++#endif
++
++/* Flags to `msync'. */
++#define MS_ASYNC 1 /* Sync memory asynchronously. */
++#define MS_SYNC 4 /* Synchronous memory sync. */
++#define MS_INVALIDATE 2 /* Invalidate the caches. */
++
++/* Flags for `mlockall'. */
++#define MCL_CURRENT 1 /* Lock all currently mapped pages. */
++#define MCL_FUTURE 2 /* Lock all additions to address
++ space. */
++
++/* Flags for `mremap'. */
++#ifdef __USE_GNU
++# define MREMAP_MAYMOVE 1
++#endif
++
++/* Advise to `madvise'. */
++#ifdef __USE_BSD
++# define MADV_NORMAL 0 /* No further special treatment. */
++# define MADV_RANDOM 1 /* Expect random page references. */
++# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */
++# define MADV_WILLNEED 3 /* Will need these pages. */
++# define MADV_DONTNEED 4 /* Don't need these pages. */
++#endif
++
++/* The POSIX people had to invent similar names for the same things. */
++#ifdef __USE_XOPEN2K
++# define POSIX_MADV_NORMAL 0 /* No further special treatment. */
++# define POSIX_MADV_RANDOM 1 /* Expect random page references. */
++# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */
++# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */
++# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */
++#endif
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/profil-counter.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/profil-counter.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,26 @@
++/* Low-level statistical profiling support function. Linux/AVR32 version.
++ Copyright (C) 1996, 1997, 1998, 2002 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#include <signal.h>
++
++void
++profil_counter(int signo, siginfo_t *si, struct sigcontext *sc)
++{
++ profil_count((void *)sc->pc);
++}
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/setjmp.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/setjmp.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,21 @@
++/*
++ * Copyright (C) 2004-2005 Atmel Norway
++ */
++#ifndef _SETJMP_H
++# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
++#endif
++
++#ifndef _ASM
++/*
++ * The jump buffer contains r0-r7, sr, sp and lr. Other registers are
++ * not saved.
++ */
++typedef int __jmp_buf[11];
++#endif
++
++#define __JMP_BUF_SP 4
++
++/* Test if longjmp to JMPBUF would unwind the frame containing a local
++ variable at ADDRESS. */
++#define _JMPBUF_UNWINDS(jmpbuf, address) \
++ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP]))
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/syscalls.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/syscalls.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,143 @@
++#ifndef _SYSCALL_H
++# error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
++#endif
++
++/*
++ * This includes the `__NR_<name>' syscall numbers taken from the
++ * Linux kernel header files. It also defines the traditional
++ * `SYS_<name>' macros for older programs.
++ */
++#include <bits/sysnum.h>
++
++#ifndef __set_errno
++# define __set_errno(val) (*__errno_location()) = (val)
++#endif
++#ifndef SYS_ify
++# define SYS_ify(syscall_name) (__NR_##syscall_name)
++#endif
++
++#ifndef __ASSEMBLER__
++
++#undef _syscall0
++#define _syscall0(type,name) \
++ type name(void) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 0)); \
++ }
++
++#undef _syscall1
++#define _syscall1(type,name,type1,arg1) \
++ type name(type1 arg1) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 1, arg1)); \
++ }
++
++#undef _syscall2
++#define _syscall2(type,name,type1,arg1,type2,arg2) \
++ type name(type1 arg1, type2 arg2) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 2, arg1, arg2)); \
++ }
++
++#undef _syscall3
++#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
++ type name(type1 arg1, type2 arg2, type3 arg3) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 3, arg1, \
++ arg2, arg3)); \
++ }
++
++#undef _syscall4
++#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3, \
++ type4,arg4) \
++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 4, arg1, arg2, \
++ arg3, arg4)); \
++ }
++
++#undef _syscall5
++#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3, \
++ type4,arg4,type5,arg5) \
++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \
++ type5 arg5) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 5, arg1, arg2, \
++ arg3, arg4, arg5)); \
++ }
++
++#undef _syscall6
++#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3, \
++ type4,arg4,type5,arg5,type6,arg6) \
++ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \
++ type5 arg5, type6 arg6) \
++ { \
++ return (type)(INLINE_SYSCALL(name, 6, arg1, arg2, arg3, \
++ arg4, arg5, arg6)); \
++ }
++
++#undef unlikely
++#define unlikely(x) __builtin_expect((x), 0)
++
++#undef INLINE_SYSCALL
++#define INLINE_SYSCALL(name, nr, args...) \
++ ({ \
++ unsigned _sys_result = INTERNAL_SYSCALL(name, , nr, args); \
++ if (unlikely(INTERNAL_SYSCALL_ERROR_P(_sys_result, ))) { \
++ __set_errno(INTERNAL_SYSCALL_ERRNO(_sys_result, )); \
++ _sys_result = (unsigned int) -1; \
++ } \
++ (int) _sys_result; \
++ })
++
++#undef INTERNAL_SYSCALL_DECL
++#define INTERNAL_SYSCALL_DECL(err) do { } while(0)
++
++#undef INTERNAL_SYSCALL
++#define INTERNAL_SYSCALL(name, err, nr, args...) \
++ ({ \
++ register int _a1 asm ("r12"); \
++ register int _scno asm("r8") = SYS_ify(name); \
++ LOAD_ARGS_##nr (args); \
++ asm volatile ("scall /* syscall " #name " */" \
++ : "=r" (_a1) \
++ : "r"(_scno) ASM_ARGS_##nr \
++ : "lr", "cc", "memory"); \
++ _a1; \
++ })
++
++#undef INTERNAL_SYSCALL_ERROR_P
++#define INTERNAL_SYSCALL_ERROR_P(val, err) \
++ ((unsigned int)(val) >= 0xfffff001U)
++
++#undef INTERNAL_SYSCALL_ERRNO
++#define INTERNAL_SYSCALL_ERRNO(val, errr) (-(val))
++
++#define LOAD_ARGS_0() do { } while(0)
++#define ASM_ARGS_0
++#define LOAD_ARGS_1(a1) \
++ _a1 = (int) (a1); \
++ LOAD_ARGS_0()
++#define ASM_ARGS_1 ASM_ARGS_0, "r"(_a1)
++#define LOAD_ARGS_2(a1, a2) \
++ register int _a2 asm("r11") = (int)(a2); \
++ LOAD_ARGS_1(a1)
++#define ASM_ARGS_2 ASM_ARGS_1, "r"(_a2)
++#define LOAD_ARGS_3(a1, a2, a3) \
++ register int _a3 asm("r10") = (int)(a3); \
++ LOAD_ARGS_2(a1, a2)
++#define ASM_ARGS_3 ASM_ARGS_2, "r"(_a3)
++#define LOAD_ARGS_4(a1, a2, a3, a4) \
++ register int _a4 asm("r9") = (int)(a4); \
++ LOAD_ARGS_3(a1, a2, a3)
++#define ASM_ARGS_4 ASM_ARGS_3, "r"(_a4)
++#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \
++ register int _a5 asm("r5") = (int)(a5); \
++ LOAD_ARGS_4(a1, a2, a3, a4)
++#define ASM_ARGS_5 ASM_ARGS_4, "r"(_a5)
++#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \
++ register int _a6 asm("r3") = (int)(a6); \
++ LOAD_ARGS_5(a1, a2, a3, a4, a5)
++#define ASM_ARGS_6 ASM_ARGS_5, "r"(_a6)
++
++#endif /* __ASSEMBLER__ */
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/wordsize.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bits/wordsize.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1 @@
++#define __WORDSIZE 32
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/brk.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/brk.c 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,23 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <errno.h>
++#include <sys/syscall.h>
++
++void *__curbrk = 0;
++
++int brk (void *addr)
++{
++ void *newbrk;
++
++ newbrk = INLINE_SYSCALL(brk, 1, addr);
++
++ __curbrk = newbrk;
++
++ if (newbrk < addr) {
++ __set_errno (ENOMEM);
++ return -1;
++ }
++
++ return 0;
++}
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-_setjmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-_setjmp.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++
++ /* This just does a tail-call to __sigsetjmp(env, 0) */
++ .global _setjmp
++ .type _setjmp,"function"
++ .align 1
++_setjmp:
++ mov r11, 0
++ bral __sigsetjmp_internal
++ .size _setjmp, . - _setjmp
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-setjmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/bsd-setjmp.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++
++ /* This just does a tail-call to __sigsetjmp(env, 1) */
++ .global setjmp
++ .type setjmp,"function"
++ .align 1
++setjmp:
++ mov r11, 1
++ bral __sigsetjmp_internal
++ .size setjmp, . - setjmp
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/clone.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/clone.c 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,37 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <errno.h>
++#include <sys/syscall.h>
++#include <unistd.h>
++
++/*
++ * I don't know if we can be absolutely certain that the fn and arg
++ * parameters are preserved when returning as the child. If the
++ * compiler stores them in registers (r0-r7), they should be.
++ */
++int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg)
++{
++ register int (*_fn)(void *arg) = fn;
++ register void *_arg = arg;
++ int err;
++
++ /* Sanity check the arguments */
++ err = -EINVAL;
++ if (!fn)
++ goto syscall_error;
++ if (!child_stack)
++ goto syscall_error;
++
++ err = INLINE_SYSCALL(clone, 2, flags, child_stack);
++ if (err < 0)
++ goto syscall_error;
++ else if (err != 0)
++ return err;
++
++ _exit(_fn(_arg));
++
++syscall_error:
++ __set_errno (-err);
++ return -1;
++}
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crt1.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crt1.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,93 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ *
++ * When we enter _start, the stack looks like this:
++ * argc argument counter
++ * argv[0] pointer to program name
++ * argv[1..argc-1] pointers to program args
++ * NULL
++ * env[0..N] pointers to environment variables
++ * NULL
++ *
++ * r12 contains a function pointer to be registered with `atexit'.
++ * This is how the dynamic linker arranges to have DT_FINI functions
++ * called for shared libraries that have been loaded before this
++ * code runs.
++ *
++ * We're going to call the following function:
++ * __uClibc_main(int (*main)(int, char **, char **), int argc,
++ * char **argv, void (*app_init)(void), void (*app_fini)(void),
++ * void (*rtld_fini)(void), void *stack_end)
++ *
++ * So we need to set up things as follows:
++ * r12 = address of main
++ * r11 = argc
++ * r10 = &argv[0]
++ * r9 = address of _init
++ * r8 = address of _fini
++ * sp[0] = whatever we got passed in r12
++ */
++
++#include <features.h>
++
++ .text
++ .global _start
++ .type _start, @function
++_start:
++ /* Clear the frame pointer and link register since this is the outermost frame. */
++ mov r7, 0
++ mov lr, 0
++
++ ld.w r11, sp++ /* argc */
++ mov r10, sp /* &argv[0] */
++
++ st.w --sp, r10 /* stack_end */
++ st.w --sp, r12 /* rtld_fini */
++
++#ifdef __PIC__
++ lddpc r6, .L_GOT
++.L_RGOT:
++ rsub r6, pc
++ lda.w r9, _init
++ lda.w r8, _fini
++ lda.w r12, main
++
++ /* Ok, now run uClibc's main() -- should not return */
++ call __uClibc_main
++
++ .align 2
++.L_GOT:
++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_
++#else
++ lddpc r9, __init_addr /* app_init */
++ lddpc r8, __fini_addr /* app_fini */
++ lddpc r12, __main_addr /* main */
++
++ /* Ok, now run uClibc's main() -- should not return */
++ lddpc pc, ___uClibc_main_addr
++
++ .align 2
++__init_addr:
++ .long _init
++__fini_addr:
++ .long _fini
++__main_addr:
++ .long main
++___uClibc_main_addr:
++ .long __uClibc_main
++#endif
++ .size _start, . - _start
++
++ /*
++ * The LSB says we need this.
++ */
++ .section ".note.ABI-tag", "a"
++ .align 4
++ .long 2f - 1f /* namesz */
++ .long 4f - 3f /* descsz */
++ .long 1 /* type */
++1: .asciz "GNU" /* name */
++2: .align 4
++3: .long 0 /* Linux executable */
++ .long 2,6,0 /* Earliest compatible kernel */
++4: .align 4
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crti.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crti.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,17 @@
++
++ .section .init
++ .align 2
++ .global _init
++ .type _init, @function
++_init:
++ /* Use a four-byte instruction to avoid NOPs */
++ stm --sp, r0-r7,lr
++ .align 2
++
++ .section .fini
++ .align 2
++ .global _fini
++ .type _fini, @function
++_fini:
++ stm --sp, r0-r7,lr
++ .align 2
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crtn.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/crtn.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,14 @@
++
++ .section .init
++ .align 2
++ .global _init
++ .type _init, @function
++ ldm sp++, r0-r7,pc
++ .size _init, . - _init
++
++ .section .fini
++ .align 2
++ .global _fini
++ .type _fini, @function
++ ldm sp++, r0-r7,pc
++ .size _fini, . - _fini
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/mmap.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/mmap.c 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,31 @@
++/* Copyright (C) 2005 Atmel Norway
++
++ This program is free software; you can redistribute it and/or modify it under
++ the terms of the GNU Library General Public License as published by the Free
++ Software Foundation; either version 2 of the License, or (at your option) any
++ later version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++ details.
++
++ You should have received a copy of the GNU Library General Public License
++ along with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++ Derived in part from the Linux-8086 C library, the GNU C Library, and several
++ other sundry sources. Files within this library are copyright by their
++ respective copyright holders.
++ */
++
++#include <errno.h>
++#include <sys/mman.h>
++#include <sys/syscall.h>
++
++static _syscall6(__ptr_t, mmap2, __ptr_t, addr, size_t, len, int, prot, int, flags, int, fd, __off_t, pgoff);
++
++__ptr_t mmap(__ptr_t addr, size_t len, int prot, int flags, int fd, __off_t offset)
++{
++ return mmap2(addr, len, prot, flags, fd, offset >> 12);
++}
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/setjmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/setjmp.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,43 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#define _SETJMP_H
++#define _ASM
++#include <bits/setjmp.h>
++
++ .text
++
++ .global __sigsetjmp
++ .type __sigsetjmp,"function"
++
++ /* Create a global, hidden symbol for use by setjmp() and _setjmp().
++ If it's not hidden, the linker will complain about a relative
++ jump to a dynamic symbol when building a shared library.
++
++ Also, if a user overrides the __sigsetjmp function, he might not
++ expect the setjmp() and _setjmp() function to effectively be
++ overridden as well. */
++ .global __sigsetjmp_internal
++ .hidden __sigsetjmp_internal
++ .type __sigsetjmp_internal,"function"
++ .align 1
++__sigsetjmp:
++__sigsetjmp_internal:
++ mustr r8
++ stm r12, r0,r1,r2,r3,r4,r5,r6,r7,r8,sp,lr
++
++ /* Make a tail call to __sigjmp_save; it takes the same args. */
++#ifdef __PIC__
++ mov r9, r6
++ lddpc r6, .LG
++.L1: rsub r6, pc
++ ld.w r8, r6[__sigjmp_save@got]
++ mov r6, r9
++ mov pc, r8
++
++ .align 2
++.LG: .long .L1 - _GLOBAL_OFFSET_TABLE_
++#else
++ rjmp __sigjmp_save
++#endif
++ .size __sigsetjmp, . - __sigsetjmp
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigaction.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigaction.c 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,49 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <errno.h>
++#include <signal.h>
++#include <string.h>
++#include <sys/syscall.h>
++#include <bits/kernel_sigaction.h>
++
++#define SA_RESTORER 0x04000000
++extern void __default_rt_sa_restorer(void);
++
++/*
++ * If act is not NULL, change the action for sig to *act.
++ * If oact is not NULL, put the old action for sig in *oact.
++ */
++int __libc_sigaction(int signum, const struct sigaction *act,
++ struct sigaction *oldact)
++{
++ struct kernel_sigaction kact, koact;
++ int result;
++
++ if (act) {
++ kact.k_sa_handler = act->sa_handler;
++ memcpy(&kact.sa_mask, &act->sa_mask, sizeof (kact.sa_mask));
++ kact.sa_flags = act->sa_flags;
++ if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK))
++ kact.sa_restorer = act->sa_restorer;
++ else
++ kact.sa_restorer = __default_rt_sa_restorer;
++ kact.sa_flags |= SA_RESTORER;
++ }
++
++ result = __syscall_rt_sigaction(signum, act ? __ptrvalue(&kact) : NULL,
++ oldact ? __ptrvalue(&koact) : NULL,
++ _NSIG / 8);
++
++ if (oldact && result >= 0) {
++ oldact->sa_handler = koact.k_sa_handler;
++ memcpy(&oldact->sa_mask, &koact.sa_mask,
++ sizeof(oldact->sa_mask));
++ oldact->sa_flags = koact.sa_flags;
++ oldact->sa_restorer = koact.sa_restorer;
++ }
++
++ return result;
++}
++
++weak_alias(__libc_sigaction, sigaction)
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigrestorer.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sigrestorer.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,11 @@
++/*
++ * Copyright (C) 2004 Atmel Norway AS
++ */
++#include <sys/syscall.h>
++
++ .global __default_rt_sa_restorer
++ .type __default_rt_sa_restorer,"function"
++ .align 1
++__default_rt_sa_restorer:
++ mov r8, __NR_rt_sigreturn
++ scall
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/elf.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/elf.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,26 @@
++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_ELF_H
++#define _SYS_ELF_H 1
++
++#warning "This header is obsolete; use <sys/procfs.h> instead."
++
++#include <sys/procfs.h>
++
++#endif /* sys/elf.h */
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/io.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/io.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,48 @@
++/* Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_IO_H
++
++#define _SYS_IO_H 1
++#include <features.h>
++
++__BEGIN_DECLS
++
++/* If TURN_ON is TRUE, request for permission to do direct i/o on the
++ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
++ permission off for that range. This call requires root privileges. */
++extern int ioperm (unsigned long int __from, unsigned long int __num,
++ int __turn_on) __THROW;
++
++/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero,
++ permission to access any I/O port is granted. This call requires
++ root privileges. */
++extern int iopl (int __level) __THROW;
++
++/* The functions that actually perform reads and writes. */
++extern unsigned char inb (unsigned long int port) __THROW;
++extern unsigned short int inw (unsigned long int port) __THROW;
++extern unsigned long int inl (unsigned long int port) __THROW;
++
++extern void outb (unsigned char value, unsigned long int port) __THROW;
++extern void outw (unsigned short value, unsigned long int port) __THROW;
++extern void outl (unsigned long value, unsigned long int port) __THROW;
++
++__END_DECLS
++
++#endif /* _SYS_IO_H */
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/procfs.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/procfs.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,123 @@
++/* Copyright (C) 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++#ifndef _SYS_PROCFS_H
++#define _SYS_PROCFS_H 1
++
++/* This is somewhat modelled after the file of the same name on SVR4
++ systems. It provides a definition of the core file format for ELF
++ used on Linux. It doesn't have anything to do with the /proc file
++ system, even though Linux has one.
++
++ Anyway, the whole purpose of this file is for GDB and GDB only.
++ Don't read too much into it. Don't use it for anything other than
++ GDB unless you know what you are doing. */
++
++#include <features.h>
++#include <sys/time.h>
++#include <sys/types.h>
++#include <sys/user.h>
++
++__BEGIN_DECLS
++
++/* Type for a general-purpose register. */
++typedef unsigned long elf_greg_t;
++
++/* And the whole bunch of them. We could have used `struct
++ user_regs' directly in the typedef, but tradition says that
++ the register set is an array, which does have some peculiar
++ semantics, so leave it that way. */
++#define ELF_NGREG (sizeof (struct user_regs) / sizeof(elf_greg_t))
++typedef elf_greg_t elf_gregset_t[ELF_NGREG];
++
++/* Register set for the floating-point registers. */
++typedef struct user_fpregs elf_fpregset_t;
++
++/* Signal info. */
++struct elf_siginfo
++ {
++ int si_signo; /* Signal number. */
++ int si_code; /* Extra code. */
++ int si_errno; /* Errno. */
++ };
++
++/* Definitions to generate Intel SVR4-like core files. These mostly
++ have the same names as the SVR4 types with "elf_" tacked on the
++ front to prevent clashes with Linux definitions, and the typedef
++ forms have been avoided. This is mostly like the SVR4 structure,
++ but more Linuxy, with things that Linux does not support and which
++ GDB doesn't really use excluded. */
++
++struct elf_prstatus
++ {
++ struct elf_siginfo pr_info; /* Info associated with signal. */
++ short int pr_cursig; /* Current signal. */
++ unsigned long int pr_sigpend; /* Set of pending signals. */
++ unsigned long int pr_sighold; /* Set of held signals. */
++ __pid_t pr_pid;
++ __pid_t pr_ppid;
++ __pid_t pr_pgrp;
++ __pid_t pr_sid;
++ struct timeval pr_utime; /* User time. */
++ struct timeval pr_stime; /* System time. */
++ struct timeval pr_cutime; /* Cumulative user time. */
++ struct timeval pr_cstime; /* Cumulative system time. */
++ elf_gregset_t pr_reg; /* GP registers. */
++ int pr_fpvalid; /* True if math copro being used. */
++ };
++
++
++#define ELF_PRARGSZ (80) /* Number of chars for args. */
++
++struct elf_prpsinfo
++ {
++ char pr_state; /* Numeric process state. */
++ char pr_sname; /* Char for pr_state. */
++ char pr_zomb; /* Zombie. */
++ char pr_nice; /* Nice val. */
++ unsigned long int pr_flag; /* Flags. */
++ unsigned short int pr_uid;
++ unsigned short int pr_gid;
++ int pr_pid, pr_ppid, pr_pgrp, pr_sid;
++ /* Lots missing */
++ char pr_fname[16]; /* Filename of executable. */
++ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
++ };
++
++/* The rest of this file provides the types for emulation of the
++ Solaris <proc_service.h> interfaces that should be implemented by
++ users of libthread_db. */
++
++/* Addresses. */
++typedef void *psaddr_t;
++
++/* Register sets. Linux has different names. */
++typedef elf_gregset_t prgregset_t;
++typedef elf_fpregset_t prfpregset_t;
++
++/* We don't have any differences between processes and threads,
++ therefore have only one PID type. */
++typedef __pid_t lwpid_t;
++
++/* Process status and info. In the end we do provide typedefs for them. */
++typedef struct elf_prstatus prstatus_t;
++typedef struct elf_prpsinfo prpsinfo_t;
++
++__END_DECLS
++
++#endif /* sys/procfs.h */
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/ucontext.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/ucontext.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,94 @@
++/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public
++ License as published by the Free Software Foundation; either
++ version 2.1 of the License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; if not, write to the Free
++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++ 02111-1307 USA. */
++
++/* Linux/AVR32 ABI compliant context switching support. */
++
++#ifndef _SYS_UCONTEXT_H
++#define _SYS_UCONTEXT_H 1
++
++#include <features.h>
++#include <signal.h>
++#include <sys/procfs.h>
++#include <bits/sigcontext.h>
++
++typedef int greg_t;
++
++/* Number of general registers. */
++#define NGREG 16
++
++/* Container for all general registers. */
++typedef elf_gregset_t gregset_t;
++
++/* Number of each register is the `gregset_t' array. */
++enum
++{
++ R0 = 0,
++#define R0 R0
++ R1 = 1,
++#define R1 R1
++ R2 = 2,
++#define R2 R2
++ R3 = 3,
++#define R3 R3
++ R4 = 4,
++#define R4 R4
++ R5 = 5,
++#define R5 R5
++ R6 = 6,
++#define R6 R6
++ R7 = 7,
++#define R7 R7
++ R8 = 8,
++#define R8 R8
++ R9 = 9,
++#define R9 R9
++ R10 = 10,
++#define R10 R10
++ R11 = 11,
++#define R11 R11
++ R12 = 12,
++#define R12 R12
++ R13 = 13,
++#define R13 R13
++ R14 = 14,
++#define R14 R14
++ R15 = 15
++#define R15 R15
++};
++
++/* Structure to describe FPU registers. */
++typedef elf_fpregset_t fpregset_t;
++
++/* Context to describe whole processor state. */
++typedef struct
++ {
++ gregset_t gregs;
++ fpregset_t fpregs;
++ } mcontext_t;
++
++/* Userlevel context. */
++typedef struct ucontext
++{
++ unsigned long uc_flags;
++ struct ucontext *uc_link;
++ stack_t uc_stack;
++ struct sigcontext uc_mcontext;
++ sigset_t uc_sigmask; /* mask last for extensibility */
++} ucontext_t;
++
++#endif /* sys/ucontext.h */
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/user.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/sys/user.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,46 @@
++#ifndef _SYS_USER_H
++#define _SYS_USER_H
++
++struct user_fpregs
++{
++
++};
++
++struct user_regs
++{
++ unsigned long sr;
++ unsigned long pc;
++ unsigned long lr;
++ unsigned long sp;
++ unsigned long r12;
++ unsigned long r11;
++ unsigned long r10;
++ unsigned long r9;
++ unsigned long r8;
++ unsigned long r7;
++ unsigned long r6;
++ unsigned long r5;
++ unsigned long r4;
++ unsigned long r3;
++ unsigned long r2;
++ unsigned long r1;
++ unsigned long r0;
++ unsigned long r12_orig;
++};
++
++struct user
++{
++ struct user_regs regs; /* general registers */
++ size_t u_tsize; /* text size (pages) */
++ size_t u_dsize; /* data size (pages) */
++ size_t u_ssize; /* stack size (pages) */
++ unsigned long start_code; /* text starting address */
++ unsigned long start_data; /* data starting address */
++ unsigned long start_stack; /* stack starting address */
++ long int signal; /* signal causing core dump */
++ struct user_regs * u_ar0; /* help gdb find registers */
++ unsigned long magic; /* identifies a core file */
++ char u_comm[32]; /* user command name */
++};
++
++#endif /* _SYS_USER_H */
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/syscall.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/syscall.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,81 @@
++/*
++ * syscall for AVR32/uClibc
++ *
++ * Copyright (C) 2004 Atmel Norway
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU Library General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
++ * for more details.
++ *
++ * You should have received a copy of the GNU Library General Public License
++ * along with this program; if not, write to the Free Software Foundation,
++ * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++#include <features.h>
++
++ .text
++
++ /*
++ * long int syscall(long int sysno, ...)
++ */
++ .global syscall
++ .type syscall, @function
++ .align 2
++syscall:
++ stm --sp, r3,r5,lr
++ sub lr, sp, -12
++ mov r8, r12
++ ldm lr, r3,r5,r9-r12
++ scall
++ cp.w r12, -4095
++ brlo .Ldone
++
++#ifdef __PIC__
++ lddpc r5, .Lgot
++.Lgotcalc:
++ rsub r5, pc
++# ifdef __UCLIBC_HAS_THREADS__
++ mov r3, r12
++ mcall r5[__errno_location@got]
++ st.w r12[0], r3
++# else
++ ld.w r3, r5[errno@got]
++ st.w r3[0], r12
++# endif
++#else
++# ifdef __UCLIBC_HAS_THREADS__
++ mov r3, r12
++ mcall .Lerrno_location
++ st.w r12[0], r3
++# else
++ lddpc r3, .Lerrno
++ st.w r3[0], r12
++# endif
++#endif
++ mov r12, -1
++
++.Ldone:
++ ldm sp++, r3,r5,pc
++
++ .align 2
++#ifdef __PIC__
++.Lgot:
++ .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_
++#else
++# ifdef __UCLIBC_HAS_THREADS__
++.Lerrno_location:
++ .long __errno_location
++# else
++.Lerrno:
++ .long errno
++# endif
++#endif
++
++
++ .size syscall, . - syscall
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/vfork.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/avr32/vfork.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,55 @@
++ /*
++ * vfork for uClibc
++ *
++ * Copyright (C) 2005 Atmel Norway
++ */
++
++ /*
++ * Clone the process without copying the address space. The
++ * calling process is suspended until the child either exits
++ * or calls execve.
++ *
++ * This all means that we cannot rely on the stack to store
++ * away registers, since they will be overwritten by the child
++ * as soon as it makes another function call (e.g. execve()).
++ * Fortunately, the Linux kernel preserves LR across system calls.
++ */
++#include <features.h>
++#include <sys/syscall.h>
++
++ .global __vfork
++ .type __vfork,@function
++ .align 1
++__vfork:
++ mov r8, __NR_vfork
++ scall
++ cp.w r12, -4096
++ retls r12
++
++ /* vfork failed, so we may use the stack freely */
++ pushm r4-r7,lr
++#ifdef __PIC__
++ lddpc r6, .L_GOT
++ rsub r4, r12, 0
++.L_RGOT:
++ rsub r6, pc
++ mcall r6[__errno_location@got]
++#else
++ rsub r4, r12, 0
++ mcall .L__errno_location
++#endif
++ st.w r12[0], r4
++ popm r4-r7,pc,r12=-1
++
++ .align 2
++#ifdef __PIC__
++.L_GOT:
++ .long .L_RGOT - _GLOBAL_OFFSET_TABLE_
++#else
++.L__errno_location:
++ .long __errno_location
++#endif
++ .size __vfork, . - __vfork
++
++ .weak vfork
++ vfork = __vfork
+Index: uClibc-0.9.28-avr32/Rules.mak
+===================================================================
+--- uClibc-0.9.28-avr32.orig/Rules.mak 2006-10-19 15:05:49.000000000 +0200
++++ uClibc-0.9.28-avr32/Rules.mak 2006-10-19 15:05:52.000000000 +0200
+@@ -231,6 +231,12 @@ ifeq ($(strip $(TARGET_ARCH)),frv)
+ UCLIBC_LDSO=ld.so.1
+ endif
+
++ifeq ($(strip $(TARGET_ARCH)),avr32)
++ CPU_CFLAGS-$(CONFIG_AP7000) += -mcpu=ap7000
++ CPU_CFLAGS-$(LINKRELAX) += -masm-addr-pseudos -Wa,--pic,--linkrelax
++ CPU_LDFLAGS-$(LINKRELAX) += --relax
++endif
++
+ # Keep the check_gcc from being needlessly executed
+ ifndef PIEFLAG
+ ifneq ($(UCLIBC_BUILD_PIE),y)
+Index: uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/bcopy.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,15 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++ .text
++ .global bcopy
++ .type bcopy, @function
++ .align 1
++bcopy:
++ /* Swap the first two arguments */
++ eor r11, r12
++ eor r12, r11
++ eor r11, r12
++ rjmp __memmove
++ .size bcopy, . - bcopy
+Index: uClibc-0.9.28-avr32/libc/string/avr32/bzero.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/bzero.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,12 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++ .text
++ .global bzero
++ .type bzero, @function
++ .align 1
++bzero:
++ mov r10, r11
++ mov r11, 0
++ rjmp __memset
+Index: uClibc-0.9.28-avr32/libc/string/avr32/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/Makefile 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,40 @@
++# Makefile for uClibc
++#
++# Copyright (C) 2000-2003 Erik Andersen <andersen@uclibc.org>
++#
++# This program is free software; you can redistribute it and/or modify it under
++# the terms of the GNU Library General Public License as published by the Free
++# Software Foundation; either version 2 of the License, or (at your option) any
++# later version.
++#
++# This program is distributed in the hope that it will be useful, but WITHOUT
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
++# details.
++#
++# You should have received a copy of the GNU Library General Public License
++# along with this program; if not, write to the Free Software Foundation, Inc.,
++# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++
++TOPDIR=../../../
++include $(TOPDIR)Rules.mak
++
++SSRC := bcopy.S bzero.S memcmp.S memcpy.S memmove.S
++SSRC += memset.S strcmp.S strlen.S
++# memchr.S, strcat.S, strcpy.S, strncpy.S is broken
++SOBJS := $(patsubst %.S,%.o, $(SSRC))
++OBJS := $(SOBJS)
++
++OBJ_LIST:= ../../obj.string.$(TARGET_ARCH)
++
++all: $(OBJ_LIST)
++
++$(OBJ_LIST): $(OBJS)
++ echo $(addprefix string/$(TARGET_ARCH)/, $(OBJS)) > $@
++
++$(SOBJS): %.o: %.S
++ $(CC) $(ASFLAGS) -c $< -o $@
++ $(STRIPTOOL) -x -R .note -R .comment $@
++
++clean:
++ $(RM) *.[oa] *~ core
+Index: uClibc-0.9.28-avr32/libc/string/avr32/memchr.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/memchr.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,62 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define str r12
++#define chr r11
++#define len r10
++
++ .text
++ .global memchr
++ .type memchr, @function
++memchr:
++ or chr, chr, chr << 8
++ or chr, chr, chr << 16
++
++ mov r9, str
++ andl r9, 3, COH
++ brne .Lunaligned_str
++
++1: sub len, 4
++ brlt 2f
++ ld.w r8, str++
++ psub.b r9, r8, r11
++ tnbz r9
++ brne 1b
++
++ sub str, 4
++ bfextu r9, r8, 24, 8
++ cp.b r9, r11
++ reteq str
++ sub str, -1
++ bfextu r9, r8, 16, 8
++ cp.b r9, r11
++ reteq str
++ sub str, -1
++ bfextu r9, r8, 8, 8
++ cp.b r9, r11
++ reteq str
++ sub str, -1
++ retal str
++
++2: sub len, -4
++ reteq 0
++
++3: ld.ub r8, str++
++ cp.w r8, 0
++ reteq str
++ sub len, 1
++ brne 3b
++
++ retal 0
++
++.Lunaligned_str:
++1: sub len, 1
++ retlt 0
++ ld.ub r8, str++
++ cp.b r8, r11
++ reteq str
++ sub r9, 1
++ brge 1b
++
++ rjmp .Laligned_search
+Index: uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/memcmp.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,26 @@
++/*
++ * Copyright (C) 2004 Atmel Norway.
++ */
++
++#define s1 r12
++#define s2 r11
++#define len r10
++
++ .text
++ .global memcmp
++ .type memcmp, @function
++ .align 1
++memcmp:
++ cp.w len, 1
++ retlt 0
++1: ld.ub r8, s1++
++ ld.ub r9, s2++
++ sub r8, r9
++ subfne len, 1
++ brne 1b
++
++ retal r8
++ .size memcmp, . - memcmp
++
++ .weak bcmp
++ bcmp = memcmp
+Index: uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/memcpy.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,110 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++/* Don't use r12 as dst since we must return it unmodified */
++#define dst r9
++#define src r11
++#define len r10
++
++ .text
++ .global memcpy
++ .type memcpy, @function
++
++ .global __memcpy
++ .hidden __memcpy
++ .type __memcpy, @function
++memcpy:
++__memcpy:
++ pref src[0]
++ mov dst, r12
++
++ /* If we have less than 32 bytes, don't do anything fancy */
++ cp.w len, 32
++ brge .Lmore_than_31
++
++ sub len, 1
++ retlt r12
++1: ld.ub r8, src++
++ st.b dst++, r8
++ sub len, 1
++ brge 1b
++ retal r12
++
++.Lmore_than_31:
++ pushm r0-r7, lr
++
++ /* Check alignment */
++ mov r8, src
++ andl r8, 31, COH
++ brne .Lunaligned_src
++ mov r8, dst
++ andl r8, 3, COH
++ brne .Lunaligned_dst
++
++.Laligned_copy:
++ sub len, 32
++ brlt .Lless_than_32
++
++1: /* Copy 32 bytes at a time */
++ ldm src, r0-r7
++ sub src, -32
++ stm dst, r0-r7
++ sub dst, -32
++ sub len, 32
++ brge 1b
++
++.Lless_than_32:
++ /* Copy 16 more bytes if possible */
++ sub len, -16
++ brlt .Lless_than_16
++ ldm src, r0-r3
++ sub src, -16
++ sub len, 16
++ stm dst, r0-r3
++ sub dst, -16
++
++.Lless_than_16:
++ /* Do the remaining as byte copies */
++ neg len
++ add pc, pc, len << 2
++ .rept 15
++ ld.ub r0, src++
++ st.b dst++, r0
++ .endr
++
++ popm r0-r7, pc
++
++.Lunaligned_src:
++ /* Make src cacheline-aligned. r8 = (src & 31) */
++ rsub r8, r8, 32
++ sub len, r8
++1: ld.ub r0, src++
++ st.b dst++, r0
++ sub r8, 1
++ brne 1b
++
++ /* If dst is word-aligned, we're ready to go */
++ pref src[0]
++ mov r8, 3
++ tst dst, r8
++ breq .Laligned_copy
++
++.Lunaligned_dst:
++ /* src is aligned, but dst is not. Expect bad performance */
++ sub len, 4
++ brlt 2f
++1: ld.w r0, src++
++ st.w dst++, r0
++ sub len, 4
++ brge 1b
++
++2: neg len
++ add pc, pc, len << 2
++ .rept 3
++ ld.ub r0, src++
++ st.b dst++, r0
++ .endr
++
++ popm r0-r7, pc
++ .size memcpy, . - memcpy
+Index: uClibc-0.9.28-avr32/libc/string/avr32/memmove.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/memmove.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,114 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define dst r12
++#define src r11
++#define len r10
++
++ .text
++ .global memmove
++ .type memmove, @function
++
++ .global __memmove
++ .hidden __memmove
++ .type __memmove, @function
++memmove:
++__memmove:
++ cp.w src, dst
++ brge __memcpy
++
++ add dst, len
++ add src, len
++ pref src[-1]
++
++ /*
++ * The rest is basically the same as in memcpy.S except that
++ * the direction is reversed.
++ */
++ cp.w len, 32
++ brge .Lmore_than_31
++
++ sub len, 1
++ retlt r12
++1: ld.ub r8, --src
++ st.b --dst, r8
++ sub len, 1
++ brge 1b
++ retal r12
++
++.Lmore_than_31:
++ pushm r0-r7, lr
++
++ /* Check alignment */
++ mov r8, src
++ andl r8, 31, COH
++ brne .Lunaligned_src
++ mov r8, r12
++ andl r8, 3, COH
++ brne .Lunaligned_dst
++
++.Laligned_copy:
++ sub len, 32
++ brlt .Lless_than_32
++
++1: /* Copy 32 bytes at a time */
++ sub src, 32
++ ldm src, r0-r7
++ sub dst, 32
++ sub len, 32
++ stm dst, r0-r7
++ brge 1b
++
++.Lless_than_32:
++ /* Copy 16 more bytes if possible */
++ sub len, -16
++ brlt .Lless_than_16
++ sub src, 16
++ ldm src, r0-r3
++ sub dst, 16
++ sub len, 16
++ stm dst, r0-r3
++
++.Lless_than_16:
++ /* Do the remaining as byte copies */
++ sub len, -16
++ breq 2f
++1: ld.ub r0, --src
++ st.b --dst, r0
++ sub len, 1
++ brne 1b
++
++2: popm r0-r7, pc
++
++.Lunaligned_src:
++ /* Make src cacheline-aligned. r8 = (src & 31) */
++ sub len, r8
++1: ld.ub r0, --src
++ st.b --dst, r0
++ sub r8, 1
++ brne 1b
++
++ /* If dst is word-aligned, we're ready to go */
++ pref src[-4]
++ mov r8, 3
++ tst dst, r8
++ breq .Laligned_copy
++
++.Lunaligned_dst:
++ /* src is aligned, but dst is not. Expect bad performance */
++ sub len, 4
++ brlt 2f
++1: ld.w r0, --src
++ st.w --dst, r0
++ sub len, 4
++ brge 1b
++
++2: neg len
++ add pc, pc, len << 2
++ .rept 3
++ ld.ub r0, --src
++ st.b --dst, r0
++ .endr
++
++ popm r0-r7, pc
+Index: uClibc-0.9.28-avr32/libc/string/avr32/memset.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/memset.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,60 @@
++/*
++ * Copyright (C) 2004 Atmel Norway.
++ */
++
++#define s r12
++#define c r11
++#define n r10
++
++ .text
++ .global memset
++ .type memset, @function
++
++ .global __memset
++ .hidden __memset
++ .type __memset, @function
++
++ .align 1
++memset:
++__memset:
++ cp.w n, 32
++ mov r9, s
++ brge .Llarge_memset
++
++ sub n, 1
++ retlt s
++1: st.b s++, c
++ sub n, 1
++ brge 1b
++
++ retal r9
++
++.Llarge_memset:
++ mov r8, r11
++ mov r11, 3
++ or r8, r8, r8 << 8
++ or r8, r8, r8 << 16
++ tst s, r11
++ breq 2f
++
++1: st.b s++, r8
++ sub n, 1
++ tst s, r11
++ brne 1b
++
++2: mov r11, r9
++ mov r9, r8
++ sub n, 8
++
++3: st.d s++, r8
++ sub n, 8
++ brge 3b
++
++ /* If we are done, n == -8 and we'll skip all st.b insns below */
++ neg n
++ lsl n, 1
++ add pc, n
++ .rept 7
++ st.b s++, r8
++ .endr
++ retal r11
+Index: uClibc-0.9.28-avr32/libc/string/avr32/strcat.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/strcat.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,95 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define s1 r9
++#define s2 r11
++
++ .text
++ .global strcat
++ .type strcat, @function
++ .align 1
++strcat:
++ mov s1, r12
++
++ /* Make sure s1 is word-aligned */
++ mov r10, s1
++ andl r10, 3, COH
++ breq 2f
++
++ add pc, pc, r10 << 3
++ sub r0, r0, 0 /* 4-byte nop */
++ ld.ub r8, s1++
++ sub r8, r8, 0
++ breq 2f
++ ld.ub r8, s1++
++ sub r8, r8, 0
++ breq 3f
++ ld.ub r8, s1++
++ sub r8, r8, 0
++ breq 4f
++
++ /* Find the end of the first string */
++5: ld.w r8, s1++
++ tnbz r8
++ brne 5b
++
++ sub s1, 4
++
++ bfextu r10, r8, 24, 8
++ cp.w r10, 0
++ breq 1f
++ sub s1, -1
++ bfextu r10, r8, 16, 8
++ cp.w r10, 0
++ breq 2f
++ sub s1, -1
++ bfextu r10, r8, 8, 8
++ cp.w r10, 0
++ breq 3f
++ sub s1, -1
++ rjmp 4f
++
++ /* Now, append s2 */
++1: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++2: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++3: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++4: ld.ub r8, s2++
++ st.b s1++, r8
++ cp.w r8, 0
++ reteq r12
++
++ /* Copy one word at a time */
++ ld.w r8, s2++
++ tnbz r8
++ breq 2f
++1: st.w r8, s2++
++ ld.w r8, s2++
++ tnbz r8
++ brne 1b
++
++ /* Copy the remaining bytes */
++ bfextu r10, r8, 24, 8
++ st.b s1++, r10
++ cp.w r10, 0
++ reteq r12
++ bfextu r10, r8, 16, 8
++ st.b s1++, r10
++ cp.w r10, 0
++ reteq r12
++ bfextu r10, r8, 8, 8
++ st.b s1++, r10
++ cp.w r10, 0
++ reteq r12
++ st.b s1++, r8
++ retal r12
++ .size strcat, . - strcat
+Index: uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/strcmp.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,80 @@
++/*
++ * Copyright (C) 2004 Atmel Norway.
++ */
++
++#define s1 r12
++#define s2 r11
++#define len r10
++
++ .text
++ .global strcmp
++ .type strcmp, @function
++ .align 1
++strcmp:
++ mov r8, 3
++ tst s1, r8
++ brne .Lunaligned_s1
++ tst s2, r8
++ brne .Lunaligned_s2
++
++1: ld.w r8, s1++
++ ld.w r9, s2++
++ cp.w r8, r9
++ brne 2f
++ tnbz r8
++ brne 1b
++ retal 0
++
++2: bfextu r12, r8, 24, 8
++ bfextu r11, r9, 24, 8
++ sub r12, r11
++ retne r12
++ cp.w r11, 0
++ reteq 0
++ bfextu r12, r8, 16, 8
++ bfextu r11, r9, 16, 8
++ sub r12, r11
++ retne r12
++ cp.w r11, 0
++ reteq 0
++ bfextu r12, r8, 8, 8
++ bfextu r11, r9, 8, 8
++ sub r12, r11
++ retne r12
++ cp.w r11, 0
++ reteq 0
++ bfextu r12, r8, 0, 8
++ bfextu r11, r9, 0, 8
++ sub r12, r11
++ retal r12
++
++.Lunaligned_s1:
++3: tst s1, r8
++ breq 4f
++ ld.ub r10, s1++
++ ld.ub r9, s2++
++ sub r10, r9
++ retne r10
++ cp.w r9, 0
++ brne 3b
++ retal r10
++
++4: tst s2, r8
++ breq 1b
++
++.Lunaligned_s2:
++ /*
++ * s1 and s2 can't both be aligned, and unaligned word loads
++ * can trigger spurious exceptions if we cross a page boundary.
++ * Do it the slow way...
++ */
++1: ld.ub r8, s1++
++ ld.ub r9, s2++
++ sub r8, r9
++ retne r8
++ cp.w r9, 0
++ brne 1b
++ retal 0
++
++ .weak strcoll
++ strcoll = strcmp
+Index: uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/strcpy.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,63 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ *
++ * To reduce the size, this one might simply call strncpy with len = -1.
++ */
++
++#define dst r9
++#define src r11
++
++ .text
++ .global strcpy
++ .type strcpy, @function
++strcpy:
++ mov dst, r12
++
++ pref src[0]
++
++ /*
++ * Check alignment. If src is aligned but dst isn't, we can't
++ * do much about it...
++ */
++ mov r8, src
++ andl r8, 3 COH
++ brne .Lunaligned_src
++
++.Laligned_copy:
++1: ld.w r8, src++
++ tnbz r8
++ breq 2f
++ st.w dst++, r8
++ rjmp 1b
++
++2: /*
++ * Ok, r8 now contains the terminating '\0'. Copy the
++ * remaining bytes individually.
++ */
++ bfextu r10, r8, 24, 8
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++ bfextu r10, r8, 16, 8
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++ bfextu r10, r8, 8, 8
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++ st.b dst++, r8
++ retal r12
++
++.Lunaligned_src:
++ /* Copy bytes until we're aligned */
++ rsub r8, r8, 4
++ add pc, pc, r8 << 3
++ nop
++ nop
++ ld.ub r10, src++
++ st.b dst++, r10
++ cp.w r10, 0
++ reteq r12
++
++ rjmp .Laligned_copy
+Index: uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/stringtest.c 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,144 @@
++
++#include <stdio.h>
++#include <string.h>
++#include <time.h>
++#include <sys/mman.h>
++
++#define BUF_SIZE (8 * 1024)
++
++static char *buf1;
++static char *buf1_ref;
++static char *buf2;
++
++extern void *optimized_memcpy(void *dest, void *src, size_t len);
++extern void *optimized_memmove(void *dest, void *src, size_t len);
++extern char *optimized_strcpy(char *dest, char *src);
++extern char *optimized_strncpy(char *dest, char *src, size_t len);
++
++void dump_mismatch(char *buf, char *ref, size_t len)
++{
++ int i, j;
++
++ for (i = 0; i < len; i += 16) {
++ if (memcmp(buf + i, ref + i, 16) == 0)
++ continue;
++
++ printf("%4x buf:", i);
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", buf[j]);
++ printf("\n ref:");
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", ref[j]);
++ printf("\n");
++ }
++}
++
++static void test_memcpy(int src_offset, int dst_offset, int len)
++{
++ clock_t start, old, new;
++ int i;
++
++ memset(buf1, 0x55, BUF_SIZE);
++ memset(buf1_ref, 0x55, BUF_SIZE);
++ memset(buf2, 0xaa, BUF_SIZE);
++
++ printf("Testing memcpy with offsets %d => %d and len %d...",
++ src_offset, dst_offset, len);
++
++ start = clock();
++ for (i = 0; i < 8192; i++)
++ optimized_memcpy(buf1 + dst_offset, buf2 + src_offset, len);
++ new = clock() - start;
++ start = clock();
++ for ( i = 0; i < 8192; i++)
++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len);
++ old = clock() - start;
++
++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0)
++ printf("OK\n");
++ else {
++ printf("FAILED\n");
++ dump_mismatch(buf1, buf1_ref, BUF_SIZE);
++ }
++ printf("CPU time used: %d vs. %d\n", new, old);
++}
++
++static void test_memmove(int src_offset, int dst_offset, int len)
++{
++ clock_t start, old, new;
++
++ memset(buf1, 0x55, BUF_SIZE);
++ memset(buf1_ref, 0x55, BUF_SIZE);
++ memset(buf2, 0xaa, BUF_SIZE);
++
++ printf("Testing memmove with offsets %d => %d and len %d...",
++ src_offset, dst_offset, len);
++
++ start = clock();
++ optimized_memmove(buf1 + dst_offset, buf2 + src_offset, len);
++ new = clock() - start;
++ start = clock();
++ memmove(buf1_ref + dst_offset, buf2 + src_offset, len);
++ old = clock() - start;
++
++ if (memcmp(buf1, buf1_ref, BUF_SIZE) == 0)
++ printf("OK\n");
++ else {
++ printf("FAILED\n");
++ dump_mismatch(buf1, buf1_ref, BUF_SIZE);
++ }
++ printf("CPU time used: %d vs. %d\n", new, old);
++}
++
++int main(int argc, char *argv[])
++{
++ buf2 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
++ if (buf2 == MAP_FAILED) {
++ perror("Failed to allocate memory for buf2");
++ return 1;
++ }
++ buf1 = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
++ if (buf1 == MAP_FAILED) {
++ perror("Failed to allocate memory for buf1");
++ return 1;
++ }
++ buf1_ref = mmap(NULL, BUF_SIZE, PROT_READ | PROT_WRITE,
++ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
++ if (buf1_ref == MAP_FAILED) {
++ perror("Failed to allocate memory for buf1_ref");
++ return 1;
++ }
++ printf("\n === MEMCPY ===\n\n");
++
++ test_memcpy(0, 0, BUF_SIZE - 32);
++ test_memcpy(0, 0, 1);
++ test_memcpy(0, 0, 31);
++ test_memcpy(0, 0, 32);
++ test_memcpy(0, 0, 127);
++ test_memcpy(0, 0, 128);
++ test_memcpy(4, 4, BUF_SIZE - 32 - 4);
++ test_memcpy(1, 1, BUF_SIZE - 32 - 1);
++ test_memcpy(1, 1, 126);
++ test_memcpy(0, 3, 128);
++ test_memcpy(1, 4, 128);
++ test_memcpy(0, 0, 0);
++
++ printf("\n === MEMMOVE ===\n\n");
++
++ test_memmove(0, 0, BUF_SIZE - 32);
++ test_memmove(0, 0, 1);
++ test_memmove(0, 0, 31);
++ test_memmove(0, 0, 32);
++ test_memmove(0, 0, BUF_SIZE - 33);
++ test_memmove(0, 0, 128);
++ test_memmove(4, 4, BUF_SIZE - 32 - 4);
++ test_memmove(1, 1, BUF_SIZE - 32 - 1);
++ test_memmove(1, 1, BUF_SIZE - 130);
++ test_memmove(0, 3, BUF_SIZE - 128);
++ test_memmove(1, 4, BUF_SIZE - 128);
++ test_memmove(0, 0, 0);
++
++ return 0;
++}
+Index: uClibc-0.9.28-avr32/libc/string/avr32/strlen.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/strlen.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,52 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define str r12
++
++ .text
++ .global strlen
++ .type strlen, @function
++strlen:
++ mov r11, r12
++
++ mov r9, str
++ andl r9, 3, COH
++ brne .Lunaligned_str
++
++1: ld.w r8, str++
++ tnbz r8
++ brne 1b
++
++ sub r12, r11
++ bfextu r9, r8, 24, 8
++ cp.w r9, 0
++ subeq r12, 4
++ reteq r12
++ bfextu r9, r8, 16, 8
++ cp.w r9, 0
++ subeq r12, 3
++ reteq r12
++ bfextu r9, r8, 8, 8
++ cp.w r9, 0
++ subeq r12, 2
++ reteq r12
++ sub r12, 1
++ retal r12
++
++.Lunaligned_str:
++ add pc, pc, r9 << 3
++ sub r0, r0, 0 /* 4-byte nop */
++ ld.ub r8, str++
++ sub r8, r8, 0
++ breq 1f
++ ld.ub r8, str++
++ sub r8, r8, 0
++ breq 1f
++ ld.ub r8, str++
++ sub r8, r8, 0
++ brne 1b
++
++1: sub r12, 1
++ sub r12, r11
++ retal r12
+Index: uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/strncpy.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,77 @@
++/*
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define dst r9
++#define src r11
++
++ .text
++ .global strcpy
++ .type strncpy, @function
++strncpy:
++ mov dst, r12
++
++ pref src[0]
++ mov dst, r12
++
++ /*
++ * Check alignment. If src is aligned but dst isn't, we can't
++ * do much about it...
++ */
++ mov r8, src
++ andl r8, 3 COH
++ brne .Lunaligned_src
++
++.Laligned_copy:
++ sub r10, 4
++ brlt 3f
++1: ld.w r8, src++
++ tnbz r8
++ breq 2f
++ st.w dst++, r8
++ sub r10, 4
++ brne 1b
++
++3: sub r10, -4
++ reteq r12
++
++ /* This is safe as long as src is word-aligned and r10 > 0 */
++ ld.w r8, src++
++
++2: /*
++ * Ok, r8 now contains the terminating '\0'. Copy the
++ * remaining bytes individually.
++ */
++ bfextu r11, r8, 24, 8
++ st.b dst++, r11
++ cp.w r11, 0
++ reteq r12
++ sub r10, 1
++ reteq r12
++ bfextu r11, r8, 16, 8
++ st.b dst++, r11
++ cp.w r11, 0
++ reteq r12
++ sub r10, 1
++ reteq r12
++ bfextu r11, r8, 8, 8
++ st.b dst++, r11
++ cp.w r11, 0
++ reteq r12
++ sub r10, 1
++ reteq r12
++ st.b dst++, r8
++ retal r12
++
++.Lunaligned_src:
++ /* Copy bytes until we're aligned */
++ min r8, r8, r10
++ sub r10, r8
++ sub r8, 1
++ retlt r12
++1: ld.ub r10, src++
++ st.b dst++, r10
++ sub r8, 1
++ brge 1b
++
++ rjmp .Laligned_copy
+Index: uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libc/string/avr32/test_memcpy.c 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,66 @@
++
++#include <stdio.h>
++#include <string.h>
++
++#define BUF_SIZE 32768
++
++static char buf1[BUF_SIZE] __attribute__((aligned(32)));
++static char buf1_ref[BUF_SIZE] __attribute__((aligned(32)));
++static char buf2[BUF_SIZE] __attribute__((aligned(32)));
++
++extern void *new_memcpy(void *dest, void *src, size_t len);
++
++void dump_mismatch(char *buf, char *ref, size_t len)
++{
++ int i, j;
++
++ for (i = 0; i < len; i += 16) {
++ if (memcmp(buf + i, ref + i, 16) == 0)
++ continue;
++
++ printf("% 4x buf:", i);
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", buf[j]);
++ printf("\n ref:");
++ for (j = i; j < (i + 16); j++)
++ printf(" %02x", ref[j]);
++ printf("\n");
++ }
++}
++
++void test(int src_offset, int dst_offset, int len)
++{
++ memset(buf1, 0x55, sizeof(buf1));
++ memset(buf1_ref, 0x55, sizeof(buf1_ref));
++ memset(buf2, 0xaa, sizeof(buf2));
++
++ printf("Testing with offsets %d => %d and len %d...",
++ src_offset, dst_offset, len);
++
++ new_memcpy(buf1 + dst_offset, buf2 + src_offset, len);
++ memcpy(buf1_ref + dst_offset, buf2 + src_offset, len);
++
++ if (memcmp(buf1, buf1_ref, sizeof(buf1)) == 0)
++ printf("OK\n");
++ else {
++ printf("FAILED\n");
++ dump_mismatch(buf1, buf1_ref, sizeof(buf1));
++ }
++}
++
++int main(int argc, char *argv[])
++{
++ test(0, 0, BUF_SIZE);
++ test(0, 0, 1);
++ test(0, 0, 31);
++ test(0, 0, 32);
++ test(0, 0, 127);
++ test(0, 0, 128);
++ test(4, 4, BUF_SIZE - 4);
++ test(1, 1, BUF_SIZE - 1);
++ test(1, 1, 126);
++ test(0, 3, 128);
++ test(1, 4, 128);
++
++ return 0;
++}
+Index: uClibc-0.9.28-avr32/libc/sysdeps/linux/common/create_module.c
+===================================================================
+--- uClibc-0.9.28-avr32.orig/libc/sysdeps/linux/common/create_module.c 2006-10-19 15:05:48.000000000 +0200
++++ uClibc-0.9.28-avr32/libc/sysdeps/linux/common/create_module.c 2006-10-19 15:05:52.000000000 +0200
+@@ -61,7 +61,8 @@ unsigned long create_module(const char *
+ {
+ return __create_module(name, size, 0, 0);
+ }
+-#else
++/* create_module is obsolete in Linux 2.6, so AVR32 doesn't have it */
++#elif !defined(__avr32__)
+ /* Sparc, MIPS, etc don't mistake return values for errors. */
+ _syscall2(unsigned long, create_module, const char *, name, size_t, size);
+ #endif
+Index: uClibc-0.9.28-avr32/ldso/include/dl-string.h
+===================================================================
+--- uClibc-0.9.28-avr32.orig/ldso/include/dl-string.h 2006-10-19 15:05:48.000000000 +0200
++++ uClibc-0.9.28-avr32/ldso/include/dl-string.h 2006-10-19 15:05:52.000000000 +0200
+@@ -134,7 +134,7 @@ static inline char * _dl_strstr(const ch
+ } while (1);
+ }
+
+-static inline void * _dl_memcpy(void * dst, const void * src, size_t len)
++static __always_inline void * _dl_memcpy(void * dst, const void * src, size_t len)
+ {
+ register char *a = dst-1;
+ register const char *b = src-1;
+@@ -271,7 +271,8 @@ static __always_inline char * _dl_simple
+ /* On some arches constant strings are referenced through the GOT.
+ * This requires that load_addr must already be defined... */
+ #if defined(mc68000) || defined(__arm__) || defined(__mips__) \
+- || defined(__sh__) || defined(__powerpc__)
++ || defined(__sh__) || defined(__powerpc__) \
++ || defined(__avr32__)
+ # define CONSTANT_STRING_GOT_FIXUP(X) \
+ if ((X) < (const char *) load_addr) (X) += load_addr
+ # define NO_EARLY_SEND_STDERR
+Index: uClibc-0.9.28-avr32/ldso/include/dl-syscall.h
+===================================================================
+--- uClibc-0.9.28-avr32.orig/ldso/include/dl-syscall.h 2006-10-19 15:05:48.000000000 +0200
++++ uClibc-0.9.28-avr32/ldso/include/dl-syscall.h 2006-10-19 15:05:52.000000000 +0200
+@@ -60,59 +60,59 @@
+ dynamic linking at all, so we cannot return any error codes.
+ We just punt if there is an error. */
+ #define __NR__dl_exit __NR_exit
+-static inline _syscall1(void, _dl_exit, int, status);
++static __always_inline _syscall1(void, _dl_exit, int, status);
+
+ #define __NR__dl_close __NR_close
+-static inline _syscall1(int, _dl_close, int, fd);
++static __always_inline _syscall1(int, _dl_close, int, fd);
+
+ #define __NR__dl_open __NR_open
+-static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode);
++static __always_inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode);
+
+ #define __NR__dl_write __NR_write
+-static inline _syscall3(unsigned long, _dl_write, int, fd,
++static __always_inline _syscall3(unsigned long, _dl_write, int, fd,
+ const void *, buf, unsigned long, count);
+
+ #define __NR__dl_read __NR_read
+-static inline _syscall3(unsigned long, _dl_read, int, fd,
++static __always_inline _syscall3(unsigned long, _dl_read, int, fd,
+ const void *, buf, unsigned long, count);
+
+ #define __NR__dl_mprotect __NR_mprotect
+-static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot);
++static __always_inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot);
+
+ #define __NR__dl_stat __NR_stat
+-static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf);
++static __always_inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf);
+
+ #define __NR__dl_munmap __NR_munmap
+-static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length);
++static __always_inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length);
+
+ #define __NR__dl_getuid __NR_getuid
+-static inline _syscall0(uid_t, _dl_getuid);
++static __always_inline _syscall0(uid_t, _dl_getuid);
+
+ #define __NR__dl_geteuid __NR_geteuid
+-static inline _syscall0(uid_t, _dl_geteuid);
++static __always_inline _syscall0(uid_t, _dl_geteuid);
+
+ #define __NR__dl_getgid __NR_getgid
+-static inline _syscall0(gid_t, _dl_getgid);
++static __always_inline _syscall0(gid_t, _dl_getgid);
+
+ #define __NR__dl_getegid __NR_getegid
+-static inline _syscall0(gid_t, _dl_getegid);
++static __always_inline _syscall0(gid_t, _dl_getegid);
+
+ #define __NR__dl_getpid __NR_getpid
+-static inline _syscall0(gid_t, _dl_getpid);
++static __always_inline _syscall0(gid_t, _dl_getpid);
+
+ #define __NR__dl_readlink __NR_readlink
+-static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz);
++static __always_inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz);
+
+ #ifdef __NR_mmap
+ #ifdef MMAP_HAS_6_ARGS
+ #define __NR__dl_mmap __NR_mmap
+-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
++static __always_inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
+ int, prot, int, flags, int, fd, off_t, offset);
+ #else
+ #define __NR__dl_mmap_real __NR_mmap
+-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
++static __always_inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
+
+-static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot,
+ int flags, int fd, unsigned long offset)
+ {
+ unsigned long buffer[6];
+@@ -128,11 +128,12 @@ static inline void * _dl_mmap(void * add
+ #endif
+ #elif defined __NR_mmap2
+ #define __NR___syscall_mmap2 __NR_mmap2
+-static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr,
++static __always_inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr,
+ size_t, len, int, prot, int, flags, int, fd, off_t, offset);
+ /*always 12, even on architectures where PAGE_SHIFT != 12 */
+ #define MMAP2_PAGE_SHIFT 12
+-static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
++#define MAP_FAILED ((void *) -1)
++static __always_inline void * _dl_mmap(void * addr, unsigned long size, int prot,
+ int flags, int fd, unsigned long offset)
+ {
+ if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1))
+Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-debug.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-debug.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,45 @@
++/*
++ * AVR32 ELF shared libary loader support
++ *
++ * Copyright (C) 2005 Atmel Norway
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. The name of the above contributors may not be
++ * used to endorse or promote products derived from this software
++ * without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++static const char *_dl_reltypes_tab[] = {
++ "R_AVR32_NONE",
++ "R_AVR32_32", "R_AVR32_16", "R_AVR32_8",
++ "R_AVR32_32_PCREL", "R_AVR32_16_PCREL", "R_AVR32_8_PCREL",
++ "R_AVR32_DIFF32", "R_AVR32_DIFF16", "R_AVR32_DIFF8",
++ "R_AVR32_GOT32", "R_AVR32_GOT16", "R_AVR32_GOT8",
++ "R_AVR32_21S", "R_AVR32_16U", "R_AVR32_16S", "R_AVR32_8S", "R_AVR32_8S_EXT",
++ "R_AVR32_22H_PCREL", "R_AVR32_18W_PCREL", "R_AVR32_16B_PCREL",
++ "R_AVR32_16N_PCREL", "R_AVR32_14UW_PCREL", "R_AVR32_11H_PCREL",
++ "R_AVR32_10UW_PCREL", "R_AVR32_9H_PCREL", "R_AVR32_9UW_PCREL",
++ "R_AVR32_HI16", "R_AVR32_LO16",
++ "R_AVR32_GOTPC", "R_AVR32_GOTCALL", "R_AVR32_LDA_GOT",
++ "R_AVR32_GOT21S", "R_AVR32_GOT18SW", "R_AVR32_GOT16S", "R_AVR32_GOT7UW",
++ "R_AVR32_32_CPENT", "R_AVR32_CPCALL", "R_AVR32_16_CP", "R_AVR32_9W_CP",
++ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT",
++ "R_AVR32_ALIGN",
++};
+Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-startup.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-startup.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,110 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * Architecture specific code used by dl-startup.c
++ * Copyright (C) 2005 Atmel Norway
++ */
++
++/* This is the library loader's main entry point. Let _dl_boot2 do its
++ * initializations and jump to the application's entry point
++ * afterwards. */
++asm( " .text\n"
++ " .global _start\n"
++ " .type _start,@function\n"
++ "_start:\n"
++ /* All arguments are on the stack initially */
++ " mov r12, sp\n"
++ " rcall _dl_start\n"
++ /* Returns user entry point in r12. Save it. */
++ " mov r0, r12\n"
++ /* We're PIC, so get the Global Offset Table */
++ " lddpc r6, .L_GOT\n"
++ ".L_RGOT:\n"
++ " rsub r6, pc\n"
++ /* Adjust argc and argv according to _dl_skip_args */
++ " ld.w r1, r6[_dl_skip_args@got]\n"
++ " ld.w r1, r1[0]\n"
++ " ld.w r2, sp++\n"
++ " sub r2, r1\n"
++ " add sp, sp, r1 << 2\n"
++ " st.w --sp, r2\n"
++ /* Load the finalizer function */
++ " ld.w r12, r6[_dl_fini@got]\n"
++ /* Jump to the user's entry point */
++ " mov pc, r0\n\n"
++
++ " .align 2\n"
++ ".L_GOT:"
++ " .long .L_RGOT - _GLOBAL_OFFSET_TABLE_\n"
++ " .size _start, . - _start\n"
++ " .previous\n");
++
++/* Get a pointer to the argv array. On many platforms this can be just
++ * the address if the first argument, on other platforms we need to
++ * do something a little more subtle here. */
++#define GET_ARGV(ARGVP, ARGS) ARGVP = ((unsigned long *)ARGS + 1)
++
++
++/* We can't call functions before the GOT has been initialized */
++#define NO_FUNCS_BEFORE_BOOTSTRAP
++
++/*
++ * Relocate the GOT during dynamic loader bootstrap. This will add
++ * the load address to all entries in the GOT, which is necessary
++ * because the linker doesn't generate R_AVR32_RELATIVE relocs for the
++ * GOT.
++ */
++static __always_inline
++void PERFORM_BOOTSTRAP_GOT(struct elf_resolve *tpnt)
++{
++ Elf32_Addr i, nr_got;
++ register Elf32_Addr *__r6 __asm__("r6");
++ Elf32_Addr *got = __r6;
++
++ nr_got = tpnt->dynamic_info[DT_AVR32_GOTSZ_IDX] / sizeof(*got);
++ for (i = 2; i < nr_got; i++)
++ got[i] += tpnt->loadaddr;
++}
++
++#define PERFORM_BOOTSTRAP_GOT(tpnt) PERFORM_BOOTSTRAP_GOT(tpnt)
++
++/* Handle relocation of the symbols in the dynamic loader. */
++static __always_inline
++void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, unsigned long *reloc_addr,
++ unsigned long symbol_addr,
++ unsigned long load_addr, Elf32_Sym *symtab)
++{
++ switch(ELF32_R_TYPE(rpnt->r_info)) {
++ case R_AVR32_NONE:
++ break;
++ case R_AVR32_GLOB_DAT:
++ case R_AVR32_JMP_SLOT:
++ *reloc_addr = symbol_addr;
++ break;
++ case R_AVR32_RELATIVE:
++ SEND_STDERR_DEBUG("Applying RELATIVE relocation: ");
++ SEND_ADDRESS_STDERR_DEBUG(load_addr, 0);
++ SEND_STDERR_DEBUG(" + ");
++ SEND_ADDRESS_STDERR_DEBUG(rpnt->r_addend, 1);
++ *reloc_addr = load_addr + rpnt->r_addend;
++ break;
++ default:
++ SEND_STDERR("BOOTSTRAP_RELOC: unhandled reloc_type ");
++ SEND_NUMBER_STDERR(ELF32_R_TYPE(rpnt->r_info), 1);
++ SEND_STDERR("REL, SYMBOL, LOAD: ");
++ SEND_ADDRESS_STDERR(reloc_addr, 0);
++ SEND_STDERR(", ");
++ SEND_ADDRESS_STDERR(symbol_addr, 0);
++ SEND_STDERR(", ");
++ SEND_ADDRESS_STDERR(load_addr, 1);
++ _dl_exit(1);
++ }
++}
++
++/* Transfer control to the user's application, once the dynamic loader
++ * is done. This routine has to exit the current function, then call
++ * the _dl_elf_main function.
++ *
++ * Since our _dl_boot will simply call whatever is returned by
++ * _dl_boot2, we can just return the address we're supposed to
++ * call. */
++#define START() return _dl_elf_main;
+Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-syscalls.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-syscalls.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,5 @@
++/* We can't use the real errno in ldso, since it has not yet
++ * been dynamicly linked in yet. */
++extern int _dl_errno;
++#define __set_errno(X) {(_dl_errno) = (X);}
++#include "sys/syscall.h"
+Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-sysdep.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/dl-sysdep.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,103 @@
++/* vi: set sw=4 ts=4: */
++/*
++ * Various assembly language/system dependent hacks that are required
++ * so that we can minimize the amount of platform specific code.
++ * Copyright (C) 2004-2005 Atmel Norway
++ */
++
++/* Define this if the system uses RELOCA. */
++#define ELF_USES_RELOCA
++
++#include <elf.h>
++
++#define ARCH_NUM 1
++#define DT_AVR32_GOTSZ_IDX (DT_NUM + OS_NUM)
++
++#define ARCH_DYNAMIC_INFO(dpnt, dynamic, debug_addr) \
++ do { \
++ if (dpnt->d_tag == DT_AVR32_GOTSZ) \
++ dynamic[DT_AVR32_GOTSZ_IDX] = dpnt->d_un.d_val; \
++ } while (0)
++
++/* Initialization sequence for the application/library GOT. */
++#define INIT_GOT(GOT_BASE,MODULE) \
++ do { \
++ unsigned long i, nr_got; \
++ \
++ GOT_BASE[0] = (unsigned long) _dl_linux_resolve; \
++ GOT_BASE[1] = (unsigned long) MODULE; \
++ \
++ /* Add load address displacement to all GOT entries */ \
++ nr_got = MODULE->dynamic_info[DT_AVR32_GOTSZ_IDX] / 4; \
++ for (i = 2; i < nr_got; i++) \
++ GOT_BASE[i] += (unsigned long)MODULE->loadaddr; \
++ } while (0)
++
++#define do_rem(result, n, base) ((result) = (n) % (base))
++
++/* Here we define the magic numbers that this dynamic loader should accept */
++#define MAGIC1 EM_AVR32
++#undef MAGIC2
++
++/* Used for error messages */
++#define ELF_TARGET "AVR32"
++
++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got);
++
++/* 4096 bytes alignment */
++#define PAGE_ALIGN 0xfffff000
++#define ADDR_ALIGN 0xfff
++#define OFFS_ALIGN 0x7ffff000
++
++#define elf_machine_type_class(type) \
++ ((type == R_AVR32_JMP_SLOT) * ELF_RTYPE_CLASS_PLT)
++
++/* AVR32 doesn't need any COPY relocs */
++#define DL_NO_COPY_RELOCS
++
++/* Return the link-time address of _DYNAMIC. Conveniently, this is the
++ first element of the GOT. This must be inlined in a function which
++ uses global data. */
++static inline Elf32_Addr
++elf_machine_dynamic (void)
++{
++ register Elf32_Addr *got asm ("r6");
++ return *got;
++}
++
++/* Return the run-time load address of the shared object. */
++static inline Elf32_Addr
++elf_machine_load_address (void)
++{
++ extern void __dl_start asm("_dl_start");
++ Elf32_Addr got_addr = (Elf32_Addr) &__dl_start;
++ Elf32_Addr pcrel_addr;
++
++ asm (" lddpc %0, 2f\n"
++ "1: add %0, pc\n"
++ " rjmp 3f\n"
++ " .align 2\n"
++ "2: .long _dl_start - 1b\n"
++ "3:\n"
++ : "=r"(pcrel_addr) : : "cc");
++
++ return pcrel_addr - got_addr;
++}
++
++/*
++ * Perform any RELATIVE relocations specified by DT_RELCOUNT.
++ * Currently, we don't use that tag, but we might in the future as
++ * this would reduce the startup time somewhat (although probably not by much).
++ */
++static inline void
++elf_machine_relative (Elf32_Addr load_off, const Elf32_Addr rel_addr,
++ Elf32_Word relative_count)
++{
++ Elf32_Rela *rpnt = (void *)rel_addr;
++
++ do {
++ Elf32_Addr *reloc_addr;
++ reloc_addr = (void *)(load_off + (rpnt++)->r_offset);
++ *reloc_addr = load_off + rpnt->r_addend;
++ } while (--relative_count);
++}
+Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/elfinterp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/elfinterp.c 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,191 @@
++/*
++ * AVR32 ELF shared library loader suppport
++ *
++ * Copyright (C) 2004-2006 Atmel Corporation
++ *
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. The name of the above contributors may not be
++ * used to endorse or promote products derived from this software
++ * without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
++ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
++ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
++ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ */
++
++unsigned long _dl_linux_resolver(unsigned long got_offset, unsigned long *got)
++{
++ struct elf_resolve *tpnt = (struct elf_resolve *)got[1];
++ Elf32_Sym *sym;
++ unsigned long local_gotno;
++ unsigned long gotsym;
++ unsigned long new_addr;
++ char *strtab, *symname;
++ unsigned long *entry;
++ unsigned long sym_index = got_offset / 4;
++
++#if 0
++ local_gotno = tpnt->dynamic_info[DT_AVR32_LOCAL_GOTNO];
++ gotsym = tpnt->dynamic_info[DT_AVR32_GOTSYM];
++
++ sym = ((Elf32_Sym *)(tpnt->dynamic_info[DT_SYMTAB] + tpnt->loadaddr))
++ + sym_index;
++ strtab = (char *)(tpnt->dynamic_info[DT_STRTAB] + tpnt->loadaddr);
++ symname = strtab + sym->st_name;
++
++#if 0
++ new_addr = (unsigned long) _dl_find_hash(strtab + sym->st_name,
++ tpnt->symbol_scope, tpnt,
++ resolver);
++#endif
++
++ entry = (unsigned long *)(got + local_gotno + sym_index - gotsym);
++ *entry = new_addr;
++#endif
++
++ return new_addr;
++}
++
++static int
++_dl_parse(struct elf_resolve *tpnt, struct dyn_elf *scope,
++ unsigned long rel_addr, unsigned long rel_size,
++ int (*reloc_func)(struct elf_resolve *tpnt, struct dyn_elf *scope,
++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab))
++{
++ Elf32_Sym *symtab;
++ Elf32_Rela *rpnt;
++ char *strtab;
++ int i;
++
++ rpnt = (Elf32_Rela *)rel_addr;
++ rel_size /= sizeof(Elf32_Rela);
++ symtab = (Elf32_Sym *)tpnt->dynamic_info[DT_SYMTAB];
++ strtab = (char *)tpnt->dynamic_info[DT_STRTAB];
++
++ for (i = 0; i < rel_size; i++, rpnt++) {
++ int symtab_index, res;
++
++ symtab_index = ELF32_R_SYM(rpnt->r_info);
++
++ debug_sym(symtab, strtab, symtab_index);
++ debug_reloc(symtab, strtab, rpnt);
++
++ res = reloc_func(tpnt, scope, rpnt, symtab, strtab);
++
++ if (res == 0)
++ continue;
++
++ _dl_dprintf(2, "\n%s: ", _dl_progname);
++
++ if (symtab_index)
++ _dl_dprintf(2, "symbol '%s': ",
++ strtab + symtab[symtab_index].st_name);
++
++ if (res < 0) {
++ int reloc_type = ELF32_R_TYPE(rpnt->r_info);
++#if defined(__SUPPORT_LD_DEBUG__)
++ _dl_dprintf(2, "can't handle reloc type %s\n",
++ _dl_reltypes(reloc_type));
++#else
++ _dl_dprintf(2, "can't handle reloc type %x\n",
++ reloc_type);
++#endif
++ _dl_exit(-res);
++ } else {
++ _dl_dprintf(2, "can't resolve symbol\n");
++ return res;
++ }
++ }
++
++ return 0;
++}
++
++static int _dl_do_reloc(struct elf_resolve *tpnt, struct dyn_elf *scope,
++ Elf32_Rela *rpnt, Elf32_Sym *symtab, char *strtab)
++{
++ int reloc_type;
++ int symtab_index;
++ char *symname;
++ unsigned long *reloc_addr;
++ unsigned long symbol_addr;
++#if defined(__SUPPORT_LD_DEBUG__)
++ unsigned long old_val;
++#endif
++
++ reloc_addr = (unsigned long *)(tpnt->loadaddr + rpnt->r_offset);
++ reloc_type = ELF32_R_TYPE(rpnt->r_info);
++ symtab_index = ELF32_R_SYM(rpnt->r_info);
++ symbol_addr = 0;
++ symname = strtab + symtab[symtab_index].st_name;
++
++ if (symtab_index) {
++ symbol_addr = (unsigned long)
++ _dl_find_hash(strtab + symtab[symtab_index].st_name,
++ tpnt->symbol_scope, tpnt,
++ elf_machine_type_class(reloc_type));
++
++ /* Allow undefined references to weak symbols */
++ if (!symbol_addr &&
++ ELF32_ST_BIND(symtab[symtab_index].st_info) != STB_WEAK) {
++ _dl_dprintf(2, "%s: can't resolve symbol '%s'\n",
++ _dl_progname, symname);
++ return 0;
++ }
++ }
++
++#if defined(__SUPPORT_LD_DEBUG__)
++ old_val = *reloc_addr;
++#endif
++ switch (reloc_type) {
++ case R_AVR32_NONE:
++ break;
++ case R_AVR32_GLOB_DAT:
++ case R_AVR32_JMP_SLOT:
++ *reloc_addr = symbol_addr + rpnt->r_addend;
++ break;
++ case R_AVR32_RELATIVE:
++ *reloc_addr = (unsigned long)tpnt->loadaddr
++ + rpnt->r_addend;
++ break;
++ default:
++ return -1;
++ }
++
++#if defined(__SUPPORT_LD_DEBUG__)
++ if (_dl_debug_reloc && _dl_debug_detail)
++ _dl_dprintf(_dl_debug_file, "\tpatched: %x ==> %x @ %x\n",
++ old_val, *reloc_addr);
++#endif
++
++ return 0;
++}
++
++void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt,
++ unsigned long rel_addr,
++ unsigned long rel_size)
++{
++ /* TODO: Might want to support this in order to get faster
++ * startup times... */
++}
++
++int _dl_parse_relocation_information(struct dyn_elf *rpnt,
++ unsigned long rel_addr,
++ unsigned long rel_size)
++{
++ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size,
++ _dl_do_reloc);
++}
+Index: uClibc-0.9.28-avr32/ldso/ldso/avr32/resolve.S
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/ldso/ldso/avr32/resolve.S 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,28 @@
++/*
++ * Linux dynamic resolving code for AVR32. Fixes up the GOT entry as
++ * indicated in register r12 and jumps to the resolved address.
++ *
++ * This file is subject to the terms and conditions of the GNU Lesser General
++ * Public License. See the file "COPYING.LIB" in the main directory of this
++ * archive for more details.
++ *
++ * Copyright (C) 2004 Atmel Norway
++ */
++
++#define ip r5
++
++ .text
++ .global _dl_linux_resolve
++ .type _dl_linux_resolve,@function
++_dl_linux_resolve:
++ /* The PLT code pushed r8 for us. It contains the address of this
++ function's GOT entry, that is entry 0. ip contains the address
++ of the GOT entry of the function we wanted to call. */
++ stm --sp, r9-r12, lr
++ mov r11, r8
++ sub r12, ip, r8
++ rcall _dl_linux_resolver
++ mov ip, r12
++ popm r8-r12,lr
++ mov pc, ip
++ .size _dl_linux_resolve, . - _dl_linux_resolve
+Index: uClibc-0.9.28-avr32/ldso/ldso/dl-startup.c
+===================================================================
+--- uClibc-0.9.28-avr32.orig/ldso/ldso/dl-startup.c 2006-10-19 15:05:48.000000000 +0200
++++ uClibc-0.9.28-avr32/ldso/ldso/dl-startup.c 2006-10-19 15:05:52.000000000 +0200
+@@ -217,7 +217,9 @@ static void * __attribute_used__ _dl_sta
+ /* some arches (like MIPS) we have to tweak the GOT before relocations */
+ PERFORM_BOOTSTRAP_GOT(tpnt);
+
+-#else
++#endif
++
++#if !defined(PERFORM_BOOTSTRAP_GOT) || defined(__avr32__)
+
+ /* OK, now do the relocations. We do not do a lazy binding here, so
+ that once we are done, we have considerably more flexibility. */
+@@ -259,7 +261,7 @@ static void * __attribute_used__ _dl_sta
+ rel_addr += relative_count * sizeof(ELF_RELOC);;
+ }
+
+- rpnt = (ELF_RELOC *) (rel_addr + load_addr);
++ rpnt = (ELF_RELOC *) (rel_addr /* + load_addr */);
+ for (i = 0; i < rel_size; i += sizeof(ELF_RELOC), rpnt++) {
+ reloc_addr = (unsigned long *) (load_addr + (unsigned long) rpnt->r_offset);
+ symtab_index = ELF_R_SYM(rpnt->r_info);
+Index: uClibc-0.9.28-avr32/utils/ldd.c
+===================================================================
+--- uClibc-0.9.28-avr32.orig/utils/ldd.c 2006-10-19 15:05:48.000000000 +0200
++++ uClibc-0.9.28-avr32/utils/ldd.c 2006-10-19 15:05:52.000000000 +0200
+@@ -56,6 +56,11 @@
+ #define ELFCLASSM ELFCLASS32
+ #endif
+
++#if defined(__avr32__)
++#define MATCH_MACHINE(x) (x == EM_AVR32)
++#define ELFCLASSM ELFCLASS32
++#endif
++
+ #if defined(__s390__)
+ #define MATCH_MACHINE(x) (x == EM_S390)
+ #define ELFCLASSM ELFCLASS32
+Index: uClibc-0.9.28-avr32/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ uClibc-0.9.28-avr32/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h 2006-10-19 15:05:52.000000000 +0200
+@@ -0,0 +1,92 @@
++/* Machine-dependent pthreads configuration and inline functions.
++
++ Copyright (C) 2005 Atmel Norway
++ This file is part of the GNU C Library.
++
++ The GNU C Library is free software; you can redistribute it and/or
++ modify it under the terms of the GNU Lesser General Public License as
++ published by the Free Software Foundation; either version 2.1 of the
++ License, or (at your option) any later version.
++
++ The GNU C Library is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ Lesser General Public License for more details.
++
++ You should have received a copy of the GNU Lesser General Public
++ License along with the GNU C Library; see the file COPYING.LIB. If not,
++ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ Boston, MA 02111-1307, USA. */
++
++#ifndef _PT_MACHINE_H
++#define _PT_MACHINE_H 1
++
++#include <features.h>
++
++static inline int
++_test_and_set (int *p, int v) __THROW
++{
++ int result;
++
++ __asm__ __volatile__(
++ "/* Inline test and set */\n"
++ "1: ssrf 5\n"
++ " ld.w %0, %2\n"
++ " tst %0, %3\n"
++ " breq 2f\n"
++ " stcond %1, %3\n"
++ " brne 1b\n"
++ "2:"
++ : "=&r"(result), "=m"(*p)
++ : "m"(*p), "r"(v)
++ : "memory", "cc");
++
++ return result;
++}
++
++#ifndef PT_EI
++# define PT_EI extern inline
++#endif
++
++extern long int testandset (int *spinlock);
++extern int __compare_and_swap (long int *p, long int oldval, long int newval);
++
++/* Spinlock implementation; required. */
++PT_EI long int
++testandset (int *spinlock)
++{
++ return _test_and_set(spinlock, 1);
++}
++
++
++/* Get some notion of the current stack. Need not be exactly the top
++ of the stack, just something somewhere in the current frame. */
++#define CURRENT_STACK_FRAME stack_pointer
++register char * stack_pointer __asm__ ("sp");
++
++/* Compare-and-swap for semaphores. */
++
++#define HAS_COMPARE_AND_SWAP
++PT_EI int
++__compare_and_swap(long int *p, long int oldval, long int newval)
++{
++ long int result, tmp;
++
++ __asm__ __volatile__(
++ "/* Inline compare and swap */\n"
++ "1: ssrf 5\n"
++ " ld.w %1, %3\n"
++ " cp.w %1, %5\n"
++ " sreq %0\n"
++ " brne 2f\n"
++ " stcond %2, %4\n"
++ " brne 1b\n"
++ "2:"
++ : "=&r"(result), "=&r"(tmp), "=m"(*p)
++ : "m"(*p), "r"(newval), "r"(oldval)
++ : "cc", "memory");
++
++ return result;
++}
++
++#endif /* pt-machine.h */
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config b/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config
index c59defd311..478c713cb8 100644
--- a/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config
+++ b/packages/uclibc/uclibc-0.9.28/avr32/uClibc.config
@@ -32,23 +32,6 @@ ARCH_SUPPORTS_BIG_ENDIAN=y
UCLIBC_COMPLETELY_PIC=y
CONFIG_AP7000=y
LINKRELAX=y
-# CONFIG_GENERIC_386 is not set
-# CONFIG_386 is not set
-# CONFIG_486 is not set
-# CONFIG_586 is not set
-# CONFIG_586MMX is not set
-# CONFIG_686 is not set
-# CONFIG_PENTIUMII is not set
-# CONFIG_PENTIUMIII is not set
-# CONFIG_PENTIUM4 is not set
-# CONFIG_K6 is not set
-# CONFIG_K7 is not set
-# CONFIG_ELAN is not set
-# CONFIG_CRUSOE is not set
-# CONFIG_WINCHIPC6 is not set
-# CONFIG_WINCHIP2 is not set
-# CONFIG_CYRIXIII is not set
-# CONFIG_NEHEMIAH is not set
# ARCH_LITTLE_ENDIAN is not set
ARCH_BIG_ENDIAN=y
# ARCH_HAS_NO_MMU is not set
@@ -57,7 +40,7 @@ UCLIBC_HAS_FLOATS=y
# HAS_FPU is not set
UCLIBC_HAS_SOFT_FLOAT=y
DO_C99_MATH=y
-KERNEL_SOURCE="/usr/src/linux"
+KERNEL_SOURCE="/media/hda4/OE/build/tmp-new/angstrom/cross/avr32-angstrom-linux-uclibc"
C_SYMBOL_PREFIX=""
HAVE_DOT_CONFIG=y
@@ -86,7 +69,7 @@ UCLIBC_STATIC_LDCONFIG=y
# MALLOC is not set
# MALLOC_SIMPLE is not set
MALLOC_STANDARD=y
-# MALLOC_GLIBC_COMPAT is not set
+MALLOC_GLIBC_COMPAT=y
UCLIBC_DYNAMIC_ATEXIT=y
HAS_SHADOW=y
UNIX98PTY_ONLY=y
@@ -102,6 +85,7 @@ UCLIBC_TZ_FILE_PATH="/etc/TZ"
#
UCLIBC_HAS_IPV6=y
UCLIBC_HAS_RPC=y
+UCLIBC_HAS_FULL_RPC=y
#
# String and Stdio Support
@@ -113,11 +97,10 @@ UCLIBC_HAS_CTYPE_SIGNED=y
UCLIBC_HAS_CTYPE_UNSAFE=y
# UCLIBC_HAS_CTYPE_CHECKED is not set
# UCLIBC_HAS_CTYPE_ENFORCED is not set
-# UCLIBC_HAS_WCHAR is not set
+UCLIBC_HAS_WCHAR=y
# UCLIBC_HAS_LOCALE is not set
# UCLIBC_HAS_HEXADECIMAL_FLOATS is not set
# UCLIBC_HAS_GLIBC_CUSTOM_PRINTF is not set
-# USE_OLD_VFPRINTF is not set
UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9
# UCLIBC_HAS_SCANF_GLIBC_A_FLAG is not set
# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set
@@ -155,9 +138,9 @@ UCLIBC_HAS_GLOB=y
#
# Library Installation Options
#
-SHARED_LIB_LOADER_PREFIX="$(DEVEL_PREFIX)/lib"
-RUNTIME_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/"
-DEVEL_PREFIX="/usr/$(TARGET_ARCH)-linux-uclibc/usr/"
+SHARED_LIB_LOADER_PREFIX="/lib"
+RUNTIME_PREFIX="/"
+DEVEL_PREFIX="//usr"
#
# uClibc security related options
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec
new file mode 100644
index 0000000000..7d5541cf5a
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-kernheaders.spec
@@ -0,0 +1,41 @@
+Name: uclibc-avr32-kernheaders
+Version: 2.6
+Release: 9
+License: GPL
+Group: Development/System
+Summary: AVR32 header files from the Linux kernel for use by uClibc
+BuildRoot: %{_tmppath}/uclibc-kernheaders-root
+Source: linux-2.6.16.tar.bz2
+Source1: linux-dot-config
+Patch0: linux-2.6.16.11.patch
+Patch1: linux-2.6.16.11-avr32-20060626.patch
+
+%description
+uclibc-avr32-kernheaders contain C header files from the Linux kernel
+which are necessary for building the uClibc library. These header
+files are also necessary for developing programs which use the standard
+C libraries.
+
+If you are developing programs which wil use the standard C libraries,
+you should install uclibc-avr32-kernheaders.
+
+%prep
+%setup -q -n linux-2.6.16
+%patch0 -p1
+%patch1 -p1
+cp %{SOURCE1} .config
+
+%build
+make prepare-all ARCH=avr32 CROSS_COMPILE=avr32-linux-
+
+%install
+mkdir -p %{buildroot}/usr/avr32-linux/include
+cp -a include/{linux,asm,asm-avr32,asm-generic} %{buildroot}/usr/avr32-linux/include
+
+
+%clean
+rm -rf %{buildroot}
+
+%files
+%defattr(-,root,root)
+/usr/avr32-linux/include
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch
new file mode 100644
index 0000000000..0813c456b7
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-avr32-no-msoft-float.patch
@@ -0,0 +1,14 @@
+--- uClibc-0.9.28/Rules.mak.orig 2006-03-30 10:23:05.000000000 +0200
++++ uClibc-0.9.28/Rules.mak 2006-03-30 10:23:07.000000000 +0200
+@@ -272,7 +272,11 @@
+ # If -msoft-float isn't supported, we want an error anyway.
+ # Hmm... might need to revisit this for arm since it has 2 different
+ # soft float encodings.
++ifeq ($(strip $(TARGET_ARCH)),avr32)
++# GCC on avr32 doesn't support -msoft-float, it's the default.
++else
+ CPU_CFLAGS += -msoft-float
++endif
+ ifeq ($(strip $(TARGET_ARCH)),arm)
+ # No longer needed with current toolchains, but leave it here for now.
+ # If anyone is actually still using gcc 2.95 (say), they can uncomment it.
diff --git a/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch
new file mode 100644
index 0000000000..97ed73471f
--- /dev/null
+++ b/packages/uclibc/uclibc-0.9.28/avr32/uclibc-makefile.patch
@@ -0,0 +1,16 @@
+Index: uclibc/Makefile
+===================================================================
+RCS file: /disk1/ic_group/design/I9980/REPOSITORY/I7413/source/uclibc/Makefile,v
+retrieving revision 1.1.1.3
+diff -u -r1.1.1.3 Makefile
+--- uclibc/Makefile 31 Aug 2005 13:08:25 -0000 1.1.1.3
++++ uclibc/Makefile 7 Dec 2005 06:38:39 -0000
+@@ -163,7 +163,7 @@
+ else \
+ extra_exclude="" ; \
+ fi ; \
+- tar -chf - include --exclude .svn --exclude CVS $$extra_exclude \
++ tar -chf - --exclude .svn --exclude CVS $$extra_exclude include \
+ | tar -xf - -C $(PREFIX)$(DEVEL_PREFIX)
+ ifneq ($(strip $(UCLIBC_HAS_FLOATS)),y)
+ # Remove floating point related headers since float support is disabled.
diff --git a/packages/uclibc/uclibc.inc b/packages/uclibc/uclibc.inc
index 7fb8e5cf28..e57ef174a9 100644
--- a/packages/uclibc/uclibc.inc
+++ b/packages/uclibc/uclibc.inc
@@ -141,7 +141,7 @@ do_configure() {
echo "# CONFIG_ARM_EABI is not set" >> ${S}/.config
fi
- oe_runmake oldconfig
+ yes '' | oe_runmake oldconfig
}
do_stage() {
@@ -151,7 +151,6 @@ do_stage() {
RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \
install_dev install_runtime
- oe_runmake utils
oe_runmake PREFIX= DEVEL_PREFIX=${UCLIBC_PREFIX}/ \
RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \
install_utils
@@ -189,8 +188,14 @@ do_stage() {
}
do_install() {
+ # Install into the cross dir (this MUST be done first because we
+ # will install crt1.o in the install_dev stage and gcc needs it)
+ oe_runmake PREFIX= DEVEL_PREFIX=${UCLIBC_PREFIX}/ \
+ RUNTIME_PREFIX=${UCLIBC_PREFIX}/ \
+ install_dev install_runtime
+
oe_runmake PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \
- install_dev install_runtime install_utils
+ install_dev install_runtime
# We don't really need this in ${includedir}
rm -f ${D}${prefix}/include/.cvsignore
@@ -216,5 +221,9 @@ do_install() {
mv ${D}/usr/bin/* ${D}${bindir}/
rmdir ${D}/usr/bin
fi
+
+ oe_runmake utils
+ oe_runmake PREFIX=${D} DEVEL_PREFIX=${prefix}/ RUNTIME_PREFIX=/ \
+ install_utils
}
diff --git a/packages/uclibc/uclibc_0.9.28.bb b/packages/uclibc/uclibc_0.9.28.bb
index 2c557ec606..d5d1bae4be 100644
--- a/packages/uclibc/uclibc_0.9.28.bb
+++ b/packages/uclibc/uclibc_0.9.28.bb
@@ -1,5 +1,5 @@
DEFAULT_PREFERENCE = "1"
-PR = "r9"
+PR = "r10"
require uclibc.inc
@@ -47,6 +47,30 @@ SRC_URI += " ${THUMB_INTERWORK_RESOLVE_PATCH}"
DEFAULT_PREFERENCE_avr32 = "6000"
-SRC_URI_append_avr32 = " http://avr32linux.org/twiki/pub/Main/MicroClibcPatches/uClibc-0.9.28-avr1.patch.bz2;patch=1 "
-
+SRC_URI_append_avr32 = " \
+ file://uclibc-makefile.patch;patch=1 \
+ file://remove-bogus-version-hack-and-just-use-asm-generic-if-it-exists.patch;patch=1 \
+ file://let-optimized-stringops-override-default-ones.patch;patch=1 \
+ file://fix-getrusage-argument-type.patch;patch=1 \
+ file://fix-__libc_fcntl64-varargs-prototype.patch;patch=1 \
+ file://fix-broken-__libc_open-declaration.patch;patch=1 \
+ file://avr32-arch-2.patch;patch=1 \
+ file://avr32-linkrelax-option.patch;patch=1 \
+ file://avr32-string-ops.patch;patch=1 \
+ file://no-create_module-on-avr32.patch;patch=1 \
+ file://ldso-always-inline-_dl_memcpy.patch;patch=1 \
+ file://ldso-define-MAP_FAILED.patch;patch=1 \
+ file://ldso-always-inline-syscalls.patch;patch=1 \
+ file://ldso-avr32-2.patch;patch=1 \
+ file://ldso-avr32-needs-CONSTANT_STRING_GOT_FIXUP.patch;patch=1 \
+ file://ldso-avr32-startup-hack.patch;patch=1 \
+ file://ldd-avr32-support.patch;patch=1 \
+ file://libpthread-avr32.patch;patch=1 \
+ file://sync-fcntl-h-with-linux-kernel.patch;patch=1 \
+ "
+
+
+#file://uClibc-0.9.28-avr32-20060621.patch;patch=1 \
+#file://uClibc-0.9.28-avr32-20061019.patch;patch=1 \
+#file://uclibc-avr32-no-msoft-float.patch;patch=1 \
diff --git a/packages/udhcp/udhcp_0.9.8.bb b/packages/udhcp/udhcp_0.9.8.bb
index 0974739514..d100be74da 100644
--- a/packages/udhcp/udhcp_0.9.8.bb
+++ b/packages/udhcp/udhcp_0.9.8.bb
@@ -19,7 +19,7 @@ EXTRA_OEMAKE = "'CC=${CC}' 'LD=${CCLD}' \
'usrbindir=${bindir}' \
'datadir=${datadir}'"
-PACKAGES = "udhcpc udhcpc-doc udhcpd udhcpd-doc"
+PACKAGES = "${PN}-dbg udhcpc udhcpc-doc udhcpd udhcpd-doc"
FILES_udhcpc = "/sbin/udhcpc ${datadir}/udhcpc"
FILES_udhcpc-doc = "${mandir}/man8/udhcpc.8"
FILES_udhcpd = "${sbindir}/udhcpd \
diff --git a/packages/uicmoc/files/.mtn2git_empty b/packages/uicmoc/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/uicmoc/files/.mtn2git_empty
diff --git a/packages/uicmoc/files/configure-fix.patch b/packages/uicmoc/files/configure-fix.patch
new file mode 100644
index 0000000000..df195494ee
--- /dev/null
+++ b/packages/uicmoc/files/configure-fix.patch
@@ -0,0 +1,13 @@
+Index: qtopia-core-opensource-src-4.3.3/configure
+===================================================================
+--- qtopia-core-opensource-src-4.3.3.orig/configure 2008-01-14 08:53:51.000000000 +0000
++++ qtopia-core-opensource-src-4.3.3/configure 2008-01-14 08:54:07.000000000 +0000
+@@ -447,7 +447,7 @@
+ # initalize variables
+ #-------------------------------------------------------------------------------
+
+-SYSTEM_VARIABLES="CC CXX CFLAGS CXXFLAGS LDFLAGS"
++SYSTEM_VARIABLES="CC CXX CFLAGS CXXFLAGS LDFLAGS LFLAGS"
+ for varname in $SYSTEM_VARIABLES; do
+ cmd=`echo \
+ 'if [ -n "\$'${varname}'" ]; then
diff --git a/packages/uicmoc/uicmoc-native_2.3.10.bb b/packages/uicmoc/uicmoc-native_2.3.10.bb
index a4be2f1c0a..1674353145 100644
--- a/packages/uicmoc/uicmoc-native_2.3.10.bb
+++ b/packages/uicmoc/uicmoc-native_2.3.10.bb
@@ -7,7 +7,7 @@ PR = "r4"
SRC_URI = "ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-${PV}-free.tar.gz \
file://fix-makefile.patch;patch=1 \
- file://gcc3_4.patch;patch=1" \
+ file://gcc3_4.patch;patch=1 \
file://gcc4.patch;patch=1 \
file://gcc4_1.patch;patch=1 \
file://64bit-cleanup.patch;patch=1 \
diff --git a/packages/uicmoc/uicmoc4-native.inc b/packages/uicmoc/uicmoc4-native.inc
index 8f0c715a89..5313b90ee9 100644
--- a/packages/uicmoc/uicmoc4-native.inc
+++ b/packages/uicmoc/uicmoc4-native.inc
@@ -6,7 +6,8 @@ PRIORITY = "optional"
LICENSE = "GPL"
PR = "r0"
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.tar.gz"
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qtopia-core-opensource-src-${PV}.tar.gz \
+ file://configure-fix.patch;patch=1"
S = "${WORKDIR}/qtopia-core-opensource-src-${PV}"
inherit native
@@ -26,9 +27,11 @@ EXTRA_OECONF = "-prefix ${STAGING_DIR_NATIVE}/qt4 \
# yank default -e
EXTRA_OEMAKE = " "
+export LFLAGS="${LDFLAGS}"
+
do_configure() {
- sed -i 's:^QT += xml qt3support$:QT += xml qt3support network:' "${S}"/src/tools/uic3/uic3.pro
- echo yes | ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
+ sed -i 's:^QT += xml qt3support$:QT += xml qt3support network:' "${S}"/src/tools/uic3/uic3.pro
+ echo yes | ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
}
TOBUILD = "\
@@ -45,17 +48,18 @@ TOBUILD = "\
"
do_compile() {
- unset CC CXX CFLAGS LFLAGS CXXFLAGS CPPFLAGS
- for i in ${TOBUILD}; do
- cd ${S}/$i && oe_runmake CC="${CC}" CXX="${CXX}"
- done
+ unset CC CXX CFLAGS LFLAGS CXXFLAGS CPPFLAGS
+ for i in ${TOBUILD};
+ do
+ cd ${S}/$i && oe_runmake CC="${CC}" CXX="${CXX}"
+ done
}
do_stage() {
- install -m 0755 bin/moc ${STAGING_BINDIR}/moc4
- install -m 0755 bin/uic ${STAGING_BINDIR}/uic4
- install -m 0755 bin/uic3 ${STAGING_BINDIR}/uic34
- install -m 0755 bin/rcc ${STAGING_BINDIR}/rcc4
- install -d ${STAGING_DIR_NATIVE}/qt4/
- install -m 0644 tools/porting/src/q3porting.xml ${STAGING_DIR_NATIVE}/qt4/
+ install -m 0755 bin/moc ${STAGING_BINDIR}/moc4
+ install -m 0755 bin/uic ${STAGING_BINDIR}/uic4
+ install -m 0755 bin/uic3 ${STAGING_BINDIR}/uic34
+ install -m 0755 bin/rcc ${STAGING_BINDIR}/rcc4
+ install -d ${STAGING_DIR_NATIVE}/qt4/
+ install -m 0644 tools/porting/src/q3porting.xml ${STAGING_DIR_NATIVE}/qt4/
}
diff --git a/packages/uicmoc/uicmoc4-native_4.3.2.bb b/packages/uicmoc/uicmoc4-native_4.3.3.bb
index 1950f63068..1950f63068 100644
--- a/packages/uicmoc/uicmoc4-native_4.3.2.bb
+++ b/packages/uicmoc/uicmoc4-native_4.3.3.bb
diff --git a/packages/upslug/upslug2.inc b/packages/upslug/upslug2.inc
index 9bee027034..1450cf26a0 100644
--- a/packages/upslug/upslug2.inc
+++ b/packages/upslug/upslug2.inc
@@ -27,5 +27,4 @@ inherit autotools
S = "${WORKDIR}/upslug2-${PV}"
-PACKAGES = "${PN}"
EXTRA_OECONF += "${LIBPCAP_OECONF}"
diff --git a/packages/usrp/usrp_0.12.bb b/packages/usrp/usrp_0.12.bb
index b47ea9b62e..7112fc621a 100644
--- a/packages/usrp/usrp_0.12.bb
+++ b/packages/usrp/usrp_0.12.bb
@@ -37,5 +37,5 @@ do_stage () {
}
PACKAGES += "python-pyusrp-dbg python-pyusrp"
-FILES_python-pyusrp-dbg = "${libdir}/python*/site-packages/.debug"
+FILES_python-pyusrp-dbg += "${libdir}/python*/site-packages/.debug"
FILES_python-pyusrp = "${libdir}/python*"
diff --git a/packages/util-linux-ng/.mtn2git_empty b/packages/util-linux-ng/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/util-linux-ng/.mtn2git_empty
diff --git a/packages/util-linux-ng/util-linux-ng.inc b/packages/util-linux-ng/util-linux-ng.inc
new file mode 100644
index 0000000000..c01458d626
--- /dev/null
+++ b/packages/util-linux-ng/util-linux-ng.inc
@@ -0,0 +1,216 @@
+DESCRIPTION = "Util-linux-ng is a suite of essential utilities for any Linux system."
+SECTION = "base"
+LICENSE = "GPL"
+DEPENDS = "zlib ncurses e2fsprogs-libs"
+
+inherit autotools
+
+# I'm finishing this recipe during the 2.13.1 candidate release cycle
+# @todo Remove $RC later. See if patches are needed. Move files from /usr/*.
+# -- Leon 'likewise' Woestenberg
+
+RC="-rc2"
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/util-linux-ng/v2.13/util-linux-ng-${PV}${RC}.tar.bz2"
+# file://gcc34.patch;patch=1 \
+# file://MCONFIG \
+# file://make_include \
+# file://swapargs.h \
+# file://fdiskbsdlabel_thumb.diff;patch=1 \
+# file://umount.diff;patch=1 \
+# file://defines.h"
+
+PACKAGES_prepend = "util-linux-fdisk util-linux-cfdisk util-linux-sfdisk util-linux-swaponoff util-linux-losetup util-linux-umount util-linux-mount util-linux-readprofile "
+
+FILES_${PN}-doc += "/usr/share/misc/getopt/getopt-*.*"
+
+FILES_util-linux-fdisk = "/sbin/fdisk.${PN}"
+FILES_util-linux-cfdisk = "/sbin/cfdisk"
+FILES_util-linux-sfdisk = "/sbin/sfdisk"
+FILES_util-linux-swaponoff = "/sbin/swapon.${PN} /sbin/swapoff.${PN}"
+FILES_util-linux-losetup = "/sbin/losetup.${PN}"
+FILES_util-linux-mount = "/bin/mount.${PN} ${sysconfdir}/default/mountall"
+FILES_util-linux-umount = "/bin/umount.${PN}"
+FILES_util-linux-readprofile = "/usr/sbin/readprofile"
+
+RRECOMMENDS_${PN} = "util-linux-fdisk util-linux-cfdisk util-linux-sfdisk util-linux-mount util-linux-readprofile "
+RDEPENDS_${PN} = "util-linux-umount util-linux-swaponoff util-linux-losetup"
+
+EXTRA_OECONF = "--disable-use-tty-group --disable-makeinstall-chown \
+--enable-kill --enable-last --enable-mesg --enable-raw --enable-login-utils \
+--enable-arch --enable-init"
+
+S = "${WORKDIR}/util-linux-ng-${PV}${RC}"
+
+do_compile () {
+ set -e
+# install ${WORKDIR}/MCONFIG ${S}/MCONFIG
+# install ${WORKDIR}/make_include ${S}/make_include
+# install ${WORKDIR}/swapargs.h ${S}/mount/swapargs.h
+# install ${WORKDIR}/defines.h ${S}/defines.h
+ oe_runmake ARCH=${TARGET_ARCH} CPU= CPUOPT= \
+ 'OPT=${CFLAGS}' 'CC=${CC}' 'LD=${LD}' \
+ 'LDFLAGS=${LDFLAGS}'
+}
+
+checklink() {
+ local targ link value
+ targ="$1"
+ link="$2"
+ ext="$3"
+ if test -h "$link"
+ then
+ value="$(readlink "$link")"
+ if test "$value" = "$targ"
+ then
+ rm "$link"
+ ln -s "$targ"."${PN}" "$link$ext"
+ return 0
+ else
+ echo "$link: '$value' found '$targ' expected" >&2
+ return 1
+ fi
+ else
+ echo "$link: not a symbolic link" >&2
+ return 1
+ fi
+}
+
+do_install () {
+ # with ccache the timestamps on compiled files may
+ # end up earlier than on their inputs, this allows
+ # for the resultant compilation in the install step.
+ oe_runmake ARCH=${TARGET_ARCH} CPU= CPUOPT= \
+ 'OPT=${CFLAGS}' 'CC=${CC}' 'LD=${LD}' \
+ 'LDFLAGS=${LDFLAGS}' 'DESTDIR=${D}' install
+ mkdir ${D}${base_bindir}
+ mkdir ${D}${base_sbindir}
+ test -f ${D}${sbindir}/pivot_root && \
+ mv ${D}${sbindir}/pivot_root ${D}${base_sbindir}/pivot_root.${PN}
+ mv ${D}${bindir}/dmesg ${D}${base_bindir}/dmesg.${PN}
+ mv ${D}${bindir}/kill ${D}${base_bindir}/kill.${PN}
+ mv ${D}${bindir}/more ${D}${base_bindir}/more.${PN}
+ mv ${D}${sbindir}/hwclock ${D}${base_sbindir}/hwclock.${PN}
+ mv ${D}${sbindir}/mkswap ${D}${base_sbindir}/mkswap.${PN}
+ mv ${D}${sbindir}/shutdown ${D}${base_sbindir}/shutdown.${PN}
+# mv ${D}${sbindir}/sln ${D}${base_sbindir}/sln.${PN}
+ mv ${D}${sbindir}/mkfs.minix ${D}${base_sbindir}/mkfs.minix.${PN}
+ mv ${D}${sbindir}/fsck.minix ${D}${base_sbindir}/fsck.minix.${PN}
+ mv ${D}${bindir}/hexdump ${D}${bindir}/hexdump.${PN}
+ mv ${D}${bindir}/last ${D}${bindir}/last.${PN}
+ mv ${D}${bindir}/logger ${D}${bindir}/logger.${PN}
+ mv ${D}${bindir}/mesg ${D}${bindir}/mesg.${PN}
+ mv ${D}${bindir}/renice ${D}${bindir}/renice.${PN}
+ mv ${D}${bindir}/wall ${D}${bindir}/wall.${PN}
+ return 0
+
+ mv ${D}${sbindir}/losetup ${D}${base_sbindir}/losetup.${PN}
+ mv ${D}${sbindir}/swapon ${D}${base_sbindir}/swapon.${PN}
+ mv ${D}${bindir}/umount ${D}${base_bindir}/umount.${PN}
+ mv ${D}${bindir}/mount ${D}${base_bindir}/mount.${PN}
+ mv ${D}${sbindir}/fdisk ${D}${base_sbindir}/fdisk.${PN}
+
+ mv ${D}${bindir}/agetty ${D}${base_sbindir}/
+ mv ${D}${bindir}/blockdev ${D}${base_sbindir}/
+ mv ${D}${bindir}/cfdisk ${D}${base_sbindir}/
+ mv ${D}${bindir}/ctrlaltdel ${D}${base_sbindir}/
+
+ install -d ${D}${sysconfdir}/default/
+ echo 'MOUNTALL="-t nonfs,nosmbfs,noncpfs"' > ${D}${sysconfdir}/default/mountall
+
+ checklink swapon ${D}${base_sbindir}/swapoff ".${PN}"
+ checklink shutdown ${D}${base_sbindir}/reboot ".${PN}"
+ checklink shutdown ${D}${base_sbindir}/halt ".${PN}"
+ checklink shutdown ${D}${base_sbindir}/fastboot ""
+ checklink shutdown ${D}${base_sbindir}/fasthalt ""
+}
+
+pkg_postinst_${PN} () {
+ update-alternatives --install ${base_bindir}/dmesg dmesg dmesg.${PN} 100
+ update-alternatives --install ${base_bindir}/kill kill kill.${PN} 100
+ update-alternatives --install ${base_bindir}/more more more.${PN} 100
+ update-alternatives --install ${base_sbindir}/mkswap mkswap mkswap.${PN} 100
+ test -x ${base_sbindir}/pivot_root.${PN} && \
+ update-alternatives --install ${base_sbindir}/pivot_root pivot_root pivot_root.${PN} 100
+ update-alternatives --install ${base_sbindir}/sln sln sln.${PN} 100
+ update-alternatives --install ${base_sbindir}/mkfs.minix mkfs.minix mkfs.minix.${PN} 100
+ update-alternatives --install ${base_sbindir}/fsck.minix fsck.minix fsck.minix.${PN} 100
+ update-alternatives --install ${bindir}/hexdump hexdump hexdump.${PN} 100
+ update-alternatives --install ${bindir}/last last last.${PN} 100
+ update-alternatives --install ${bindir}/logger logger logger.${PN} 100
+ update-alternatives --install ${bindir}/mesg mesg mesg.${PN} 100
+ update-alternatives --install ${bindir}/renice renice renice.${PN} 100
+ update-alternatives --install ${bindir}/wall wall wall.${PN} 100
+
+ # There seems to be problem, atleast on nslu2, with these, until they are
+ # fixed the busybox ones have higher priority
+ update-alternatives --install ${base_sbindir}/hwclock hwclock hwclock.${PN} 10
+ update-alternatives --install ${base_sbindir}/shutdown shutdown shutdown.${PN} 10
+ update-alternatives --install ${base_sbindir}/reboot reboot reboot.${PN} 10
+ update-alternatives --install ${base_sbindir}/halt halt halt.${PN} 10
+}
+
+pkg_prerm_${PN} () {
+ test -x ${base_sbindir}/pivot_root.${PN} && \
+ update-alternatives --remove pivot_root pivot_root.${PN}
+ update-alternatives --remove dmesg dmesg.${PN}
+ update-alternatives --remove kill kill.${PN}
+ update-alternatives --remove more more.${PN}
+ update-alternatives --remove halt halt.${PN}
+ update-alternatives --remove hwclock hwclock.${PN}
+ update-alternatives --remove mkswap mkswap.${PN}
+ update-alternatives --remove reboot reboot.${PN}
+ update-alternatives --remove shutdown shutdown.${PN}
+ update-alternatives --remove sln sln.${PN}
+ update-alternatives --remove mkfs.minix mkfs.minix.${PN}
+ update-alternatives --remove fsck.minix fsck.minix.${PN}
+ update-alternatives --remove hexdump hexdump.${PN}
+ update-alternatives --remove last last.${PN}
+ update-alternatives --remove logger logger.${PN}
+ update-alternatives --remove mesg mesg.${PN}
+ update-alternatives --remove renice renice.${PN}
+ update-alternatives --remove wall wall.${PN}
+}
+
+pkg_postinst_util-linux-fdisk () {
+ update-alternatives --install ${base_sbindir}/fdisk fdisk fdisk.${PN} 100
+}
+
+pkg_prerm_util-linux-fdisk () {
+ update-alternatives --remove fdisk fdisk.${PN}
+}
+
+pkg_postinst_util-linux-mount () {
+ update-alternatives --install ${base_bindir}/mount mount mount.${PN} 100
+}
+
+pkg_prerm_util-linux-mount () {
+ update-alternatives --remove mount mount.${PN}
+}
+
+pkg_postinst_util-linux-umount () {
+ update-alternatives --install ${base_bindir}/umount umount umount.${PN} 100
+}
+
+pkg_prerm_util-linux-umount () {
+ update-alternatives --remove umount umount.${PN}
+}
+
+pkg_postinst_util-linux-losetup () {
+ update-alternatives --install ${base_sbindir}/losetup losetup losetup.${PN} 100
+}
+
+pkg_prerm_util-linux-losetup () {
+ update-alternatives --remove losetup losetup.${PN}
+}
+
+pkg_postinst_util-linux-swaponoff () {
+ update-alternatives --install ${base_sbindir}/swapoff swapoff swapoff.${PN} 100
+ update-alternatives --install ${base_sbindir}/swapon swapon swapon.${PN} 100
+}
+
+pkg_prerm_util-linux-swaponoff () {
+ update-alternatives --remove swapoff swapoff.${PN}
+ update-alternatives --remove swapon swapon.${PN}
+}
diff --git a/packages/util-linux-ng/util-linux-ng_2.13.1.bb b/packages/util-linux-ng/util-linux-ng_2.13.1.bb
new file mode 100644
index 0000000000..c10792e8ec
--- /dev/null
+++ b/packages/util-linux-ng/util-linux-ng_2.13.1.bb
@@ -0,0 +1,7 @@
+require util-linux-ng.inc
+
+#SRC_URI += "file://util-linux_2.12r-12.diff.gz;patch=1"
+#SRC_URI += "file://glibc-fix.patch;patch=1"
+#SRC_URI += "file://glibc-umount2.patch;patch=1"
+
+PR = "r0"
diff --git a/packages/util-linux/files/fdiskbsdlabel-avr32.patch b/packages/util-linux/files/fdiskbsdlabel-avr32.patch
new file mode 100644
index 0000000000..4a7d8f4dc8
--- /dev/null
+++ b/packages/util-linux/files/fdiskbsdlabel-avr32.patch
@@ -0,0 +1,11 @@
+--- /tmp/fdiskbsdlabel.h 2007-09-14 08:52:56.188364759 +0200
++++ util-linux-2.12r/fdisk/fdiskbsdlabel.h 2007-09-14 08:53:31.279986639 +0200
+@@ -43,7 +43,7 @@
+
+ #define BSD_LINUX_BOOTDIR "/usr/ucb/mdec"
+
+-#if defined (i386) || defined (__sparc__) || defined (__arm__) || defined (__mips__) || defined (__s390__) || defined (__sh__) || defined(__x86_64__)
++#if defined (i386) || defined (__sparc__) || defined (__arm__) || defined (__mips__) || defined (__s390__) || defined (__sh__) || defined(__x86_64__) || defined(__avr32__)
+ #define BSD_LABELSECTOR 1
+ #define BSD_LABELOFFSET 0
+ #elif defined (__alpha__) || defined (__powerpc__) || defined (__ia64__) || defined (__hppa__)
diff --git a/packages/util-linux/util-linux_2.12r.bb b/packages/util-linux/util-linux_2.12r.bb
index 9d4b59c855..7f8c3dd9f8 100644
--- a/packages/util-linux/util-linux_2.12r.bb
+++ b/packages/util-linux/util-linux_2.12r.bb
@@ -3,5 +3,6 @@ require util-linux.inc
SRC_URI += "file://util-linux_2.12r-12.diff.gz;patch=1"
SRC_URI += "file://glibc-fix.patch;patch=1"
SRC_URI += "file://glibc-umount2.patch;patch=1"
+SRC_URI += "file://fdiskbsdlabel-avr32.patch;patch=1"
-PR = "r12"
+PR = "r13"
diff --git a/packages/vala/vala-native_0.1.4.bb b/packages/vala/vala-native_0.1.4.bb
deleted file mode 100644
index 8de1b9258c..0000000000
--- a/packages/vala/vala-native_0.1.4.bb
+++ /dev/null
@@ -1,5 +0,0 @@
-require vala_${PV}.bb
-
-inherit native
-DEPENDS = "glib-native-2.0"
-
diff --git a/packages/vala/vala-native_0.1.5.bb b/packages/vala/vala-native_0.1.5.bb
new file mode 100644
index 0000000000..f097e7db74
--- /dev/null
+++ b/packages/vala/vala-native_0.1.5.bb
@@ -0,0 +1,5 @@
+require vala_${PV}.bb
+
+inherit native
+DEPENDS = "glib-2.0-native"
+
diff --git a/packages/vala/vala_0.1.4.bb b/packages/vala/vala_0.1.5.bb
index 0d357945b7..0d357945b7 100644
--- a/packages/vala/vala_0.1.4.bb
+++ b/packages/vala/vala_0.1.5.bb
diff --git a/packages/vlc/vlc-gpe_0.7.2.bb b/packages/vlc/vlc-gpe_0.7.2.bb
index 65d8fe9045..224b88096e 100644
--- a/packages/vlc/vlc-gpe_0.7.2.bb
+++ b/packages/vlc/vlc-gpe_0.7.2.bb
@@ -2,8 +2,8 @@ DESCRIPTION = "Video player and streamer - GPE edition"
HOMEPAGE = "http://www.videolan.org"
LICENSE = "GPL"
PRIORITY = "optional"
-SECTION = "gpe"
-PR = "r1"
+SECTION = "x11/multimedia"
+PR = "r2"
DEPENDS = "faad2 ffmpeg flac liba52 libid3tag libmad mpeg2dec"
diff --git a/packages/vlc/vlc-gpe_0.8.1.bb b/packages/vlc/vlc-gpe_0.8.1.bb
index 6ca35887b7..0c83b6036c 100644
--- a/packages/vlc/vlc-gpe_0.8.1.bb
+++ b/packages/vlc/vlc-gpe_0.8.1.bb
@@ -2,8 +2,8 @@ DESCRIPTION = "Video player and streamer - GPE edition"
HOMEPAGE = "http://www.videolan.org"
LICENSE = "GPL"
PRIORITY = "optional"
-SECTION = "gpe"
-PR = "r4"
+SECTION = "x11/multimedia"
+PR = "r5"
DEPENDS = "gtk+ freetype gnutls tremor faad2 ffmpeg flac liba52 libid3tag libmad mpeg2dec"
diff --git a/packages/vlc/vlc-gpe_0.8.4.bb b/packages/vlc/vlc-gpe_0.8.4.bb
index 1bded75984..f53aa6b45f 100644
--- a/packages/vlc/vlc-gpe_0.8.4.bb
+++ b/packages/vlc/vlc-gpe_0.8.4.bb
@@ -2,8 +2,8 @@ DESCRIPTION = "Video player and streamer - GPE edition"
HOMEPAGE = "http://www.videolan.org"
LICENSE = "GPL"
PRIORITY = "optional"
-SECTION = "gpe"
-PR = "r3"
+SECTION = "x11/multimedia"
+PR = "r4"
DEPENDS = "gtk+ freetype gnutls tremor faad2 ffmpeg flac liba52 libid3tag libmad mpeg2dec"
diff --git a/packages/fbvncserver/fbvncserver-kmodule_0.9.4.bb b/packages/vnc/fbvncserver-kmodule_0.9.4.bb
index 4abdb6c7b0..4abdb6c7b0 100644
--- a/packages/fbvncserver/fbvncserver-kmodule_0.9.4.bb
+++ b/packages/vnc/fbvncserver-kmodule_0.9.4.bb
diff --git a/packages/vnc/fbvncserver_0.9.4.bb b/packages/vnc/fbvncserver_0.9.4.bb
new file mode 100644
index 0000000000..4e6ee15a86
--- /dev/null
+++ b/packages/vnc/fbvncserver_0.9.4.bb
@@ -0,0 +1,51 @@
+DESCRIPTION = "Framebuffer VNC server"
+SECTION = "console/utils"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "libvncserver jpeg zlib"
+RDEPENDS = "fbvncserver-kmodule libvncserver-storepasswd libvncserver-javaapplet"
+PR = "r3"
+
+SRC_URI = "http://sdgsystems.com/download/fbvncserver-${PV}.tar.gz \
+ file://libvncs0.6.patch;patch=1 \
+ file://paths.patch;patch=1 \
+ file://kernelinclude.patch;patch=1 \
+ file://buildfix.patch;patch=1 \
+ file://ipaq.patch;patch=1 \
+ file://init"
+
+S = "${WORKDIR}/fbvncserver-${PV}"
+
+export INCLUDES = "-I${STAGING_INCDIR}"
+export LIBS = "-L${STAGING_LIBDIR} -lpthread"
+export VNCSERVER_DIR = "${STAGING_LIBDIR}"
+export ZAURUS_ZLIB_LIBS = "${STAGING_LIBDIR}"
+export ZAURUS_JPEG_LIBS = "${STAGING_LIBDIR}"
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "fbvncinput"
+INITSCRIPT_PARAMS = "defaults 97"
+
+FBVNCSERVER_SYSTEM = "zaurus"
+FBVNCSERVER_SYSTEM_h3600 = "ipaq"
+FBVNCSERVER_SYSTEM_h3900 = "ipaq"
+
+do_compile () {
+ oe_runmake ${FBVNCSERVER_SYSTEM}_fbvncserver ${FBVNCSERVER_SYSTEM}_tssimd
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 ${FBVNCSERVER_SYSTEM}_fbvncserver ${D}${bindir}/fbvncserver
+ install -m 0755 ${FBVNCSERVER_SYSTEM}_tssimd ${D}${bindir}/tssimd
+
+ install -d ${D}${datadir}/fbvncserver
+ install -m 0644 ${FBVNCSERVER_SYSTEM}_panel.jpg ${D}${datadir}/fbvncserver/
+
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/fbvncinput
+}
+
+FILES_${PN} += " /usr/share/fbvncserver/*.jpg"
+
diff --git a/packages/vnc/files/.mtn2git_empty b/packages/vnc/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/vnc/files/.mtn2git_empty
diff --git a/packages/fbvncserver/files/buildfix.patch b/packages/vnc/files/buildfix.patch
index 302dbd9e8e..302dbd9e8e 100644
--- a/packages/fbvncserver/files/buildfix.patch
+++ b/packages/vnc/files/buildfix.patch
diff --git a/packages/fbvncserver/files/init b/packages/vnc/files/init
index b01a1ebd79..b01a1ebd79 100644
--- a/packages/fbvncserver/files/init
+++ b/packages/vnc/files/init
diff --git a/packages/fbvncserver/files/ipaq.patch b/packages/vnc/files/ipaq.patch
index e8070c0f25..e8070c0f25 100644
--- a/packages/fbvncserver/files/ipaq.patch
+++ b/packages/vnc/files/ipaq.patch
diff --git a/packages/fbvncserver/files/kernelinclude.patch b/packages/vnc/files/kernelinclude.patch
index b17d4e09c2..b17d4e09c2 100644
--- a/packages/fbvncserver/files/kernelinclude.patch
+++ b/packages/vnc/files/kernelinclude.patch
diff --git a/packages/fbvncserver/files/libvncs0.6.patch b/packages/vnc/files/libvncs0.6.patch
index 0975c376bd..0975c376bd 100644
--- a/packages/fbvncserver/files/libvncs0.6.patch
+++ b/packages/vnc/files/libvncs0.6.patch
diff --git a/packages/fbvncserver/files/paths.patch b/packages/vnc/files/paths.patch
index 7c122efc67..7c122efc67 100644
--- a/packages/fbvncserver/files/paths.patch
+++ b/packages/vnc/files/paths.patch
diff --git a/packages/vnc/libvncserver/.mtn2git_empty b/packages/vnc/libvncserver/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/vnc/libvncserver/.mtn2git_empty
diff --git a/packages/vnc/libvncserver/configure_ac.patch b/packages/vnc/libvncserver/configure_ac.patch
new file mode 100644
index 0000000000..07c067ce7f
--- /dev/null
+++ b/packages/vnc/libvncserver/configure_ac.patch
@@ -0,0 +1,15 @@
+--- LibVNCServer-0.9.1-org/configure.ac 2007-06-02 21:36:29.000000000 +0200
++++ LibVNCServer-0.9.1-org-org/configure.ac 2007-05-27 17:14:22.000000000 +0200
+@@ -676,9 +676,9 @@
+ libvncserver-config
+ LibVNCServer.spec])
+ # x11vnc only:
+-if test "$build_x11vnc" = "yes"; then
+- AC_CONFIG_FILES([x11vnc/Makefile x11vnc/misc/Makefile])
+-fi
++# if test "$build_x11vnc" = "yes"; then
++# AC_CONFIG_FILES([x11vnc/Makefile x11vnc/misc/Makefile])
++# fi
+
+ AC_CONFIG_COMMANDS([chmod-libvncserver-config],[chmod a+x libvncserver-config])
+ AC_OUTPUT
diff --git a/packages/vnc/libvncserver_0.9.1.bb b/packages/vnc/libvncserver_0.9.1.bb
new file mode 100644
index 0000000000..c079fdeb15
--- /dev/null
+++ b/packages/vnc/libvncserver_0.9.1.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "library for easy implementation of a RDP/VNC server"
+AUTHOR = "Johannes Schindelin <dscho@users.sourceforge.net"
+HOMEPAGE = "http://sourceforge.net/projects/libvncserver/"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+DEPENDS = "zlib jpeg"
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libvncserver/LibVNCServer-${PV}.tar.gz \
+ file://configure_ac.patch"
+S = "${WORKDIR}/LibVNCServer-${PV}"
+
+# => create libvncserver only
+EXTRA_OEMAKE_append=" SUBDIRS='libvncserver' "
+
+inherit autotools
+do_stage() {
+ autotools_stage_all
+}
+
+
+
diff --git a/packages/vnc/libvncserver_0.9.bb b/packages/vnc/libvncserver_0.9.bb
new file mode 100644
index 0000000000..7aca752c0b
--- /dev/null
+++ b/packages/vnc/libvncserver_0.9.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "A library to support implementations of RDP/VNC servers"
+AUTHOR = "Johannes Schindelin <dscho@users.sourceforge.net>"
+HOMEPAGE = "http://sourceforge.net/projects/libvncserver"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+DEPENDS = "virtual/libsdl virtual/libx11 zlib jpeg libxext"
+PROVIDES = "x11vnc"
+PR = "r2"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/libvncserver/LibVNCServer-${PV}.tar.gz"
+S = "${WORKDIR}/LibVNCServer-${PV}"
+
+inherit autotools
+
+do_stage() {
+ autotools_stage_all
+}
+
+do_install_append() {
+ install -d ${D}${bindir}
+ install -m 0755 examples/storepasswd ${D}${bindir}
+ install -d ${D}${datadir}/fbvncserver/classes
+ install -m 0644 classes/index.vnc ${D}${datadir}/fbvncserver/classes/
+ install -m 0644 classes/VncViewer.jar ${D}${datadir}/fbvncserver/classes/
+}
+
+PACKAGES =+ "x11vnc libvncserver-storepasswd libvncserver-javaapplet"
+FILES_x11vnc = "${bindir}/x11vnc ${bindir}/LinuxVNC"
+FILES_libvncserver-storepasswd = "${bindir}/storepasswd"
+FILES_libvncserver-javaapplet = "${datadir}/fbvncserver/classes/index.vnc \
+ ${datadir}/fbvncserver/classes/VncViewer.jar"
diff --git a/packages/x11vnc/x11vnc_0.9.3.bb b/packages/vnc/x11vnc_0.9.3.bb
index 04ac87b444..04ac87b444 100644
--- a/packages/x11vnc/x11vnc_0.9.3.bb
+++ b/packages/vnc/x11vnc_0.9.3.bb
diff --git a/packages/vsftpd/vsftpd-charconv-2.0.5/.mtn2git_empty b/packages/vsftpd/vsftpd-charconv-2.0.5/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/vsftpd/vsftpd-charconv-2.0.5/.mtn2git_empty
diff --git a/packages/vsftpd/vsftpd-charconv-2.0.5/vsftpd-charconv.patch b/packages/vsftpd/vsftpd-charconv-2.0.5/vsftpd-charconv.patch
new file mode 100644
index 0000000000..affdd32075
--- /dev/null
+++ b/packages/vsftpd/vsftpd-charconv-2.0.5/vsftpd-charconv.patch
@@ -0,0 +1,4365 @@
+This patch is extracted and cleaned up version of filename character
+set conversion patches for vsftpd by Dmitriy Balashov,
+http://vsftpd.devnet.ru/eng/ . It provides dirty-pragmatics approach
+towards serving Windows codepages encoded filenames to Windows clients
+out of normal utf-8 filesystem.
+
+These patches will never be accepted upstream, they should never be merged
+to main vsftpd package, and they for sure void "vs" in "vsftpd". So again,
+they are for users to prefer stone-dead pragmatics. Use at you own risk.
+
+- Paul Sokolovsky, pmiscml@gmail.com
+
+diff -urN vsftpd-2.0.5.org/charconv.c vsftpd-2.0.5/charconv.c
+--- vsftpd-2.0.5.org/charconv.c 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/charconv.c 2008-01-13 20:39:49.000000000 +0200
+@@ -0,0 +1,462 @@
++/*
++ * Part of Very Secure FTPd
++ * Licence: GPL v2
++ * Author: Dmitriy Balashov
++ * charconv.c
++ */
++
++#include "charconv.h"
++#include "tunables.h"
++#include "session.h"
++#include "str.h"
++#include "sysutil.h"
++
++#include "char_maps/utf8.map"
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++#include "char_maps/cyrillic.map"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++#include "char_maps/western.map"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++#include "char_maps/central.map"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++#include "char_maps/soutern.map"
++#endif
++
++/* Tables mapping supported codepage names to runtime variables */
++static struct available_charsets
++{
++ const char* p_charset_name;
++ int p_variable;
++}
++available_charsets_array[] =
++{
++ { VSFTP_CP_NONE , VSFTP_C_NONE },
++ // Cyrillic
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++ { VSFTP_CP_UTF_8 , VSFTP_C_UTF8 },
++ { VSFTP_CP_UTF8 , VSFTP_C_UTF8 },
++ { VSFTP_CP_WIN_1251 , VSFTP_C_1251 },
++ { VSFTP_CP_WIN1251 , VSFTP_C_1251 },
++ { VSFTP_CP_CP1251 , VSFTP_C_1251 },
++ { VSFTP_CP_1251 , VSFTP_C_1251 },
++ { VSFTP_CP_KOI8_R , VSFTP_C_878R },
++ { VSFTP_CP_KOI8R , VSFTP_C_878R },
++ { VSFTP_CP_CP878 , VSFTP_C_878R },
++ { VSFTP_CP_878 , VSFTP_C_878R },
++ { VSFTP_CP_CP878R , VSFTP_C_878R },
++ { VSFTP_CP_878R , VSFTP_C_878R },
++ { VSFTP_CP_KOI8_U , VSFTP_C_878U },
++ { VSFTP_CP_KOI8U , VSFTP_C_878U },
++ { VSFTP_CP_CP878U , VSFTP_C_878U },
++ { VSFTP_CP_878U , VSFTP_C_878U },
++ { VSFTP_CP_IBM866 , VSFTP_C_866 },
++ { VSFTP_CP_CP866 , VSFTP_C_866 },
++ { VSFTP_CP_866 , VSFTP_C_866 },
++ { VSFTP_CP_ISO8859_5 , VSFTP_C_ISO5 },
++ { VSFTP_CP_ISO5 , VSFTP_C_ISO5 },
++#endif
++ // Western European
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++ { VSFTP_CP_ISO8859_1 , VSFTP_C_ISO1 },
++ { VSFTP_CP_ISO1 , VSFTP_C_ISO1 },
++ { VSFTP_CP_LATIN1 , VSFTP_C_ISO1 },
++ { VSFTP_CP_ISO8859_15, VSFTP_C_ISO15 },
++ { VSFTP_CP_ISO15 , VSFTP_C_ISO15 },
++ { VSFTP_CP_LATIN9 , VSFTP_C_ISO15 },
++ { VSFTP_CP_WIN_1252 , VSFTP_C_1252 },
++ { VSFTP_CP_WIN1252 , VSFTP_C_1252 },
++ { VSFTP_CP_CP1252 , VSFTP_C_1252 },
++ { VSFTP_CP_1252 , VSFTP_C_1252 },
++#endif
++ // Central European
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++ { VSFTP_CP_ISO8859_2 , VSFTP_C_ISO2 },
++ { VSFTP_CP_ISO2 , VSFTP_C_ISO2 },
++ { VSFTP_CP_LATIN2 , VSFTP_C_ISO2 },
++ { VSFTP_CP_ISO8859_16, VSFTP_C_ISO16 },
++ { VSFTP_CP_ISO16 , VSFTP_C_ISO16 },
++ { VSFTP_CP_WIN_1250 , VSFTP_C_1250 },
++ { VSFTP_CP_WIN1250 , VSFTP_C_1250 },
++ { VSFTP_CP_CP1250 , VSFTP_C_1250 },
++ { VSFTP_CP_1250 , VSFTP_C_1250 },
++#endif
++ // Soutern European
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++ { VSFTP_CP_ISO8859_3 , VSFTP_C_ISO3 },
++ { VSFTP_CP_ISO3 , VSFTP_C_ISO3 },
++ { VSFTP_CP_LATIN3 , VSFTP_C_ISO3 },
++#endif
++ { 0, 0 }
++};
++
++/* Available convertions */
++static struct available_convertions
++{
++ int local;
++ int remote;
++ int localCharset;
++ int remoteCharset;
++}
++available_convertions_array[] =
++{ // Cyrillic
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++ { VSFTP_C_UTF8 , VSFTP_C_1251 , VSFTP_CS_UTF8CYR , VSFTP_CS_1251 },
++ { VSFTP_C_UTF8 , VSFTP_C_878R , VSFTP_CS_UTF8CYR , VSFTP_CS_878R },
++ { VSFTP_C_UTF8 , VSFTP_C_878U , VSFTP_CS_UTF8CYR , VSFTP_CS_878U },
++ { VSFTP_C_UTF8 , VSFTP_C_866 , VSFTP_CS_UTF8CYR , VSFTP_CS_866 },
++ { VSFTP_C_UTF8 , VSFTP_C_ISO5 , VSFTP_CS_UTF8CYR , VSFTP_CS_ISO5 },
++ { VSFTP_C_1251 , VSFTP_C_UTF8 , VSFTP_CS_1251 , VSFTP_CS_UTF8CYR },
++ { VSFTP_C_1251 , VSFTP_C_878R , VSFTP_CS_1251 , VSFTP_CS_878R },
++ { VSFTP_C_1251 , VSFTP_C_878U , VSFTP_CS_1251 , VSFTP_CS_878U },
++ { VSFTP_C_1251 , VSFTP_C_866 , VSFTP_CS_1251 , VSFTP_CS_866 },
++ { VSFTP_C_1251 , VSFTP_C_ISO5 , VSFTP_CS_1251 , VSFTP_CS_ISO5 },
++ { VSFTP_C_878R , VSFTP_C_UTF8 , VSFTP_CS_878R , VSFTP_CS_UTF8CYR },
++ { VSFTP_C_878R , VSFTP_C_1251 , VSFTP_CS_878R , VSFTP_CS_1251 },
++ { VSFTP_C_878R , VSFTP_C_878U , VSFTP_CS_878R , VSFTP_CS_878U },
++ { VSFTP_C_878R , VSFTP_C_866 , VSFTP_CS_878R , VSFTP_CS_866 },
++ { VSFTP_C_878R , VSFTP_C_ISO5 , VSFTP_CS_878R , VSFTP_CS_ISO5 },
++ { VSFTP_C_866 , VSFTP_C_UTF8 , VSFTP_CS_866 , VSFTP_CS_UTF8CYR },
++ { VSFTP_C_866 , VSFTP_C_1251 , VSFTP_CS_866 , VSFTP_CS_1251 },
++ { VSFTP_C_866 , VSFTP_C_878R , VSFTP_CS_866 , VSFTP_CS_878R },
++ { VSFTP_C_866 , VSFTP_C_878U , VSFTP_CS_866 , VSFTP_CS_878U },
++ { VSFTP_C_866 , VSFTP_C_ISO5 , VSFTP_CS_866 , VSFTP_CS_ISO5 },
++ { VSFTP_C_ISO5 , VSFTP_C_UTF8 , VSFTP_CS_ISO5 , VSFTP_CS_UTF8CYR },
++ { VSFTP_C_ISO5 , VSFTP_C_1251 , VSFTP_CS_ISO5 , VSFTP_CS_1251 },
++ { VSFTP_C_ISO5 , VSFTP_C_878R , VSFTP_CS_ISO5 , VSFTP_CS_878R },
++ { VSFTP_C_ISO5 , VSFTP_C_878U , VSFTP_CS_ISO5 , VSFTP_CS_878U },
++ { VSFTP_C_ISO5 , VSFTP_C_866 , VSFTP_CS_ISO5 , VSFTP_CS_866 },
++#endif
++ // Western European
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++ { VSFTP_C_UTF8 , VSFTP_C_ISO1 , VSFTP_CS_UTF8WEST , VSFTP_CS_ISO1 },
++ { VSFTP_C_UTF8 , VSFTP_C_ISO15 , VSFTP_CS_UTF8WEST , VSFTP_CS_ISO15 },
++ { VSFTP_C_UTF8 , VSFTP_C_1252 , VSFTP_CS_UTF8WEST , VSFTP_CS_1252 },
++ { VSFTP_C_ISO1 , VSFTP_C_UTF8 , VSFTP_CS_ISO1 , VSFTP_CS_UTF8WEST },
++ { VSFTP_C_ISO1 , VSFTP_C_ISO15 , VSFTP_CS_ISO1 , VSFTP_CS_ISO15 },
++ { VSFTP_C_ISO1 , VSFTP_C_1252 , VSFTP_CS_ISO1 , VSFTP_CS_1252 },
++ { VSFTP_C_ISO15 , VSFTP_C_UTF8 , VSFTP_CS_ISO15 , VSFTP_CS_UTF8WEST },
++ { VSFTP_C_ISO15 , VSFTP_C_ISO1 , VSFTP_CS_ISO15 , VSFTP_CS_ISO1 },
++ { VSFTP_C_ISO15 , VSFTP_C_1252 , VSFTP_CS_ISO15 , VSFTP_CS_1252 },
++ { VSFTP_C_1252 , VSFTP_C_UTF8 , VSFTP_CS_1252 , VSFTP_CS_UTF8WEST },
++ { VSFTP_C_1252 , VSFTP_C_ISO1 , VSFTP_CS_1252 , VSFTP_CS_ISO1 },
++ { VSFTP_C_1252 , VSFTP_C_ISO15 , VSFTP_CS_1252 , VSFTP_CS_ISO15 },
++#endif
++ // Central European
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++ { VSFTP_C_UTF8 , VSFTP_C_ISO2 , VSFTP_CS_UTF8CENT , VSFTP_CS_ISO2 },
++ { VSFTP_C_UTF8 , VSFTP_C_ISO16 , VSFTP_CS_UTF8CENT , VSFTP_CS_ISO16 },
++ { VSFTP_C_UTF8 , VSFTP_C_1250 , VSFTP_CS_UTF8CENT , VSFTP_CS_1250 },
++ { VSFTP_C_ISO2 , VSFTP_C_UTF8 , VSFTP_CS_ISO2 , VSFTP_CS_UTF8CENT },
++ { VSFTP_C_ISO2 , VSFTP_C_ISO16 , VSFTP_CS_ISO2 , VSFTP_CS_ISO16 },
++ { VSFTP_C_ISO2 , VSFTP_C_1250 , VSFTP_CS_ISO2 , VSFTP_CS_1250 },
++ { VSFTP_C_ISO16 , VSFTP_C_UTF8 , VSFTP_CS_ISO16 , VSFTP_CS_UTF8CENT },
++ { VSFTP_C_ISO16 , VSFTP_C_ISO2 , VSFTP_CS_ISO16 , VSFTP_CS_ISO2 },
++ { VSFTP_C_ISO16 , VSFTP_C_1250 , VSFTP_CS_ISO16 , VSFTP_CS_1250 },
++ { VSFTP_C_1250 , VSFTP_C_UTF8 , VSFTP_CS_1250 , VSFTP_CS_UTF8CENT },
++ { VSFTP_C_1250 , VSFTP_C_ISO2 , VSFTP_CS_1250 , VSFTP_CS_ISO2 },
++ { VSFTP_C_1250 , VSFTP_C_ISO16 , VSFTP_CS_1250 , VSFTP_CS_ISO16 },
++#endif
++ // Soutern European
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++ { VSFTP_C_UTF8 , VSFTP_C_ISO3 , VSFTP_CS_UTF8SOUT , VSFTP_CS_ISO3 },
++ { VSFTP_C_ISO3 , VSFTP_C_UTF8 , VSFTP_CS_ISO3 , VSFTP_CS_UTF8SOUT },
++#endif
++
++ { 0, 0, 0, 0 }
++};
++
++map_ptr map_array[] =
++{
++ 0,
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++ codepage_utf8cyr_array, codepage_win1251_array, codepage_koi8r_array,
++ codepage_ibm866_array, codepage_iso5_array, codepage_koi8u_array,
++#else
++ 0, 0, 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++ codepage_utf8west_array, codepage_iso1_array, codepage_iso15_array,
++ codepage_win1252_array,
++#else
++ 0, 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++ codepage_utf8cent_array, codepage_iso2_array, codepage_iso16_array,
++ codepage_win1250_array,
++#else
++ 0, 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++ codepage_utf8sout_array, codepage_iso3_array,
++#else
++ 0, 0,
++#endif
++
++ 0
++};
++
++/* Initial table for work with unprintable chars */
++map_ptr init_array[] =
++{
++ 0,
++ codepage_utf8_array,
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++ codepage_win1251_array, codepage_koi8r_array, codepage_ibm866_array,
++ codepage_iso5_array, codepage_koi8u_array,
++#else
++ 0, 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++ codepage_iso1_array, codepage_iso15_array, codepage_win1252_array,
++#else
++ 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++ codepage_iso2_array, codepage_iso16_array, codepage_win1250_array,
++#else
++ 0, 0, 0,
++#endif
++
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++ codepage_iso3_array,
++#else
++ 0,
++#endif
++
++ 0
++};
++
++map_ptr localMap = 0, remoteMap = 0;
++map_ptr localTbl = 0, remoteTbl = 0;
++
++void char_convertion(struct mystr* p_str, int direction, char unprintable);
++void InitTables(map_ptr* map, map_ptr* table, int indexx);
++static int char_len(unsigned int s);
++static unsigned int bsearch_index(map_ptr map, unsigned int low, unsigned int high, unsigned int char_code);
++
++const char* vsf_charconv_charset_name(int code)
++{
++ int i = 0;
++ while (available_charsets_array [i].p_charset_name && available_charsets_array [i].p_variable != code) i++;
++ return available_charsets_array [i].p_charset_name;
++}
++
++int vsf_charconv_codepage(const char* p_str)
++{
++ const struct available_charsets* charsets = available_charsets_array;
++
++ while (charsets->p_charset_name != 0)
++ {
++ if (!vsf_sysutil_strcmp(charsets->p_charset_name, p_str))
++ {
++ return charsets->p_variable;
++ }
++ charsets++;
++ }
++
++ return 0;
++}
++
++int vsf_charconv_avail_convertion(int localCode, int remoteCode)
++{
++ const struct available_convertions* aconv = available_convertions_array;
++
++ while (aconv->local != 0)
++ {
++ if (localCode == aconv->local && remoteCode == aconv->remote)
++ {
++ InitTables(&localMap, &localTbl, aconv->localCharset);
++ InitTables(&remoteMap, &remoteTbl, aconv->remoteCharset);
++ return 1;
++ }
++ aconv++;
++ }
++
++ return 0;
++}
++
++void vsf_charconv_init_local_codepage(int localCode)
++{
++ if (!localCode)
++ {
++ return;
++ }
++
++ localTbl = init_array [localCode];
++ localMap = vsf_sysutil_malloc((localTbl [0].order + 1) * sizeof(_codepage_map));
++ localMap [0].char_code = localTbl [0].char_code;
++ localMap [0].order = localTbl [0].order;
++
++ int indexx = 1;
++ while (localTbl [indexx].char_code)
++ {
++ if (localTbl [indexx].order)
++ {
++ localMap [localTbl [indexx].order].char_code = localTbl [indexx].char_code;
++ localMap [localTbl [indexx].order].order = indexx;
++ }
++ indexx++;
++ }
++
++ return;
++}
++
++void vsf_charconv_convert(struct vsf_session* p_sess, struct mystr* p_str, int direction)
++{
++ if (!p_sess->enable_conversion || !p_sess->remote_charset || !tunable_local_codepage) return;
++
++ char_convertion(p_str, direction, '?');
++}
++
++void vsf_charconv_replace_unprintable(struct mystr* p_str, char new_char)
++{
++ if (localMap) char_convertion(p_str, VSFTP_CONVDIRECT_UNPRINTABLE, new_char);
++}
++
++void InitTables(map_ptr* map, map_ptr* table, int indexx)
++{
++ *table = map_array [indexx];
++
++ if (*map) vsf_sysutil_free(*map);
++
++ *map = vsf_sysutil_malloc(((*table) [0].order + 1) * sizeof(_codepage_map));
++ (*map) [0].char_code = (*table) [0].char_code;
++ (*map) [0].order = (*table) [0].order;
++
++ indexx = 1;
++ while ((*table) [indexx].char_code)
++ {
++ if ((*table) [indexx].order)
++ {
++ (*map) [(*table) [indexx].order].char_code = (*table) [indexx].char_code;
++ (*map) [(*table) [indexx].order].order = indexx;
++ }
++ indexx++;
++ }
++
++ return;
++}
++
++static int char_len(unsigned int s)
++{
++ int len = 1;
++ if ((s & 0x80) == 0x00) len = 1;
++ else if ((s & 0xe0) == 0xc0) len = 2;
++ else if ((s & 0xf0) == 0xe0) len = 3;
++ else if ((s & 0xf8) == 0xf0) len = 4;
++// else if ((s & 0xfc) == 0xf8) len = 5;
++// else if ((s & 0xfe) == 0xce) len = 6;
++ return (len);
++}
++
++static unsigned int bsearch_index(map_ptr map, unsigned int low, unsigned int high, unsigned int char_code)
++{
++ unsigned int m, l = low, r = high;
++
++ m = (l + r) >> 1;
++ while ((m != 0) && (map [m].char_code != char_code))
++ {
++ if (map [m].char_code < char_code) l = m + 1;
++ else
++ if (map [m].char_code > char_code) r = m - 1;
++ if (l > r)
++ return 0;
++ else
++ m = (l + r) >> 1;
++ }
++
++ if (m) m = map [m].order;
++ return m;
++}
++
++void char_convertion(struct mystr* p_str, int direction, char unprintable)
++{
++ const char* srcbuf;
++ unsigned int srclen;
++ char* dstbuf;
++ map_ptr src, dst;
++ unsigned int sl;
++ unsigned int srcpos = 0, dstpos = 0;
++ unsigned int char_code = 0;
++
++ srclen = str_getlen(p_str); // Len of source string
++ srcbuf = str_getbuf(p_str);
++
++ if (direction == VSFTP_CONVDIRECT_FORWARD)
++ {
++ src = localMap;
++ dst = remoteTbl;
++ }
++ else
++ if (direction == VSFTP_CONVDIRECT_BACKWARD)
++ {
++ src = remoteMap;
++ dst = localTbl;
++ }
++ else
++ {
++ src = localMap;
++ dst = localTbl;
++ }
++
++ if (!src || !dst)
++ {
++ return;
++ }
++
++ dstbuf = vsf_sysutil_malloc(srclen * dst [0].char_code + dst [0].char_code);
++
++ while (srcpos < srclen)
++ {
++ char_code = (unsigned char)srcbuf [srcpos++];
++ if (src [0].char_code > 1)
++ {
++ sl = char_len (char_code);
++ while (sl-- > 1)
++ {
++ char_code = (char_code << 8) | (unsigned char)srcbuf [srcpos++];
++ }
++ }
++
++ if (char_code > 127)
++ {
++ sl = bsearch_index (src, 1, src [0].order, char_code);
++ char_code = 0;
++ if (sl) char_code = dst [sl].char_code;
++ }
++
++ if (char_code == 13 || char_code == 10)
++ {
++ char_code = 0;
++ }
++ else
++ if (char_code < 32 && char_code != 9)
++ {
++ char_code = (unsigned int)unprintable;
++ }
++
++ if (char_code > 0 || direction != VSFTP_CONVDIRECT_UNPRINTABLE)
++ {
++ if (char_code & 0xff000000) dstbuf [dstpos++] = (char)((char_code >> 24) & 0xff);
++ if (char_code & 0x00ff0000) dstbuf [dstpos++] = (char)((char_code >> 16) & 0xff);
++ if (char_code & 0x0000ff00) dstbuf [dstpos++] = (char)((char_code >> 8) & 0xff);
++ if (char_code & 0x000000ff) dstbuf [dstpos++] = (char)((char_code ) & 0xff);
++ }
++ }
++
++ dstbuf [dstpos] = '\0';
++
++ str_empty(p_str);
++ str_append_text(p_str, dstbuf);
++
++ vsf_sysutil_free(dstbuf);
++}
++
+diff -urN vsftpd-2.0.5.org/charconv.h vsftpd-2.0.5/charconv.h
+--- vsftpd-2.0.5.org/charconv.h 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/charconv.h 2008-01-13 19:32:11.000000000 +0200
+@@ -0,0 +1,182 @@
++#ifndef VSF_CHARCONV_H
++#define VSF_CHARCONV_H
++
++struct mystr;
++struct vsf_session;
++
++#define VSFTP_CHARCONV_SUPPORT_CYRILLIC
++#define VSFTP_CHARCONV_SUPPORT_WESTERN
++#define VSFTP_CHARCONV_SUPPORT_CENTRAL
++#define VSFTP_CHARCONV_SUPPORT_SOUTERN
++
++#define VSFTP_CONVDIRECT_FORWARD 1
++#define VSFTP_CONVDIRECT_UNPRINTABLE 0
++#define VSFTP_CONVDIRECT_BACKWARD -1
++
++/* Supported charset for convertion */
++#define VSFTP_CP_NONE "NONE"
++#define VSFTP_CP_UTF_8 "UTF-8"
++#define VSFTP_CP_UTF8 "UTF8"
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++#define VSFTP_CP_WIN_1251 "Win-1251"
++#define VSFTP_CP_WIN1251 "WIN1251"
++#define VSFTP_CP_CP1251 "CP1251"
++#define VSFTP_CP_1251 "1251"
++#define VSFTP_CP_KOI8_R "Koi8-R"
++#define VSFTP_CP_KOI8R "KOI8R"
++#define VSFTP_CP_KOI8_U "Koi8-U"
++#define VSFTP_CP_KOI8U "KOI8U"
++#define VSFTP_CP_CP878 "CP878"
++#define VSFTP_CP_878 "878"
++#define VSFTP_CP_CP878R "CP878R"
++#define VSFTP_CP_878R "878R"
++#define VSFTP_CP_CP878U "CP878U"
++#define VSFTP_CP_878U "878U"
++#define VSFTP_CP_IBM866 "IBM866"
++#define VSFTP_CP_CP866 "CP866"
++#define VSFTP_CP_866 "866"
++#define VSFTP_CP_ISO8859_5 "ISO-8859-5"
++#define VSFTP_CP_ISO5 "ISO5"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++#define VSFTP_CP_ISO8859_1 "ISO-8859-1"
++#define VSFTP_CP_ISO1 "ISO1"
++#define VSFTP_CP_LATIN1 "LATIN1"
++#define VSFTP_CP_ISO8859_15 "ISO-8859-15"
++#define VSFTP_CP_ISO15 "ISO15"
++#define VSFTP_CP_LATIN9 "LATIN9"
++#define VSFTP_CP_WIN_1252 "Win-1252"
++#define VSFTP_CP_WIN1252 "WIN1252"
++#define VSFTP_CP_CP1252 "CP1252"
++#define VSFTP_CP_1252 "1252"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++#define VSFTP_CP_ISO8859_2 "ISO-8859-2"
++#define VSFTP_CP_ISO2 "ISO2"
++#define VSFTP_CP_LATIN2 "LATIN2"
++#define VSFTP_CP_ISO8859_16 "ISO-8859-16"
++#define VSFTP_CP_ISO16 "ISO16"
++#define VSFTP_CP_WIN_1250 "Win-1250"
++#define VSFTP_CP_WIN1250 "WIN1250"
++#define VSFTP_CP_CP1250 "CP1250"
++#define VSFTP_CP_1250 "1250"
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++#define VSFTP_CP_ISO8859_3 "ISO-8859-3"
++#define VSFTP_CP_ISO3 "ISO3"
++#define VSFTP_CP_LATIN3 "LATIN3"
++#endif
++
++#define VSFTP_C_NONE 0
++#define VSFTP_C_UTF8 1
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++#define VSFTP_C_1251 2
++#define VSFTP_C_878R 3
++#define VSFTP_C_866 4
++#define VSFTP_C_ISO5 5
++#define VSFTP_C_878U 6
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++#define VSFTP_C_ISO1 7
++#define VSFTP_C_ISO15 8
++#define VSFTP_C_1252 9
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++#define VSFTP_C_ISO2 10
++#define VSFTP_C_ISO16 11
++#define VSFTP_C_1250 12
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++#define VSFTP_C_ISO3 13
++#endif
++
++#define VSFTP_CS_NONE 0
++#ifdef VSFTP_CHARCONV_SUPPORT_CYRILLIC
++#define VSFTP_CS_UTF8CYR 1
++#define VSFTP_CS_1251 2
++#define VSFTP_CS_878R 3
++#define VSFTP_CS_866 4
++#define VSFTP_CS_ISO5 5
++#define VSFTP_CS_878U 6
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_WESTERN
++#define VSFTP_CS_UTF8WEST 7
++#define VSFTP_CS_ISO1 8
++#define VSFTP_CS_ISO15 9
++#define VSFTP_CS_1252 10
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_CENTRAL
++#define VSFTP_CS_UTF8CENT 11
++#define VSFTP_CS_ISO2 12
++#define VSFTP_CS_ISO16 13
++#define VSFTP_CS_1250 14
++#endif
++#ifdef VSFTP_CHARCONV_SUPPORT_SOUTERN
++#define VSFTP_CS_UTF8SOUT 15
++#define VSFTP_CS_ISO3 16
++#endif
++
++struct codepage_map
++{
++ unsigned int char_code; // The first element is count bytes of char.
++ unsigned int order;
++} _codepage_map;
++
++typedef struct codepage_map * map_ptr;
++
++extern map_ptr localMap;
++
++/* vsf_charconv_charset_name()
++ * PURPOSE
++ * Get charset name by code;
++ * PARAMETERS
++ * code - Internal charset code
++ * RETURNS
++ * Charset name
++ */
++const char* vsf_charconv_charset_name(int code);
++
++/* vsf_charconv_codepage()
++ * PURPOSE
++ * Get internal charset code
++ * PARAMETERS
++ * p_str - String value with code page
++ * RETURNS
++ * Internal charset code
++ */
++int vsf_charconv_codepage(const char* p_str);
++
++/* vsf_charconv_init_local_codepage(int localCode)
++ * PURPOSE
++ * Init local codepage for work with unprintable chars
++ * PARAMETERS
++ * localCode - source internal code page
++ */
++void vsf_charconv_init_local_codepage(int localCode);
++
++/* vsf_charconv_avail_convertion()
++ * PURPOS
++ * Checking for available convertion characters
++ * PARAMETERS
++ * localCode - source internal code page
++ * remoteCode - destination internal code page
++ * RETURNS
++ * Available ot not converion
++ */
++int vsf_charconv_avail_convertion(int localCode, int remoteCode);
++
++/* vsf_charconv_convert()
++ * PURPOSE
++ * Converting string via charsets
++ * PARAMETERS
++ * p_sess - the current session object
++ * p_str - string for convertin
++ * direction - converting from host to remoute charsetr or otherwise
++ */
++void vsf_charconv_convert(struct vsf_session* p_sess, struct mystr* p_str, int direction);
++
++/* vsf_charconv_replace_unprintable
++ */
++void vsf_charconv_replace_unprintable(struct mystr* p_str, char new_char);
++
++#endif
+diff -urN vsftpd-2.0.5.org/char_maps/central.map vsftpd-2.0.5/char_maps/central.map
+--- vsftpd-2.0.5.org/char_maps/central.map 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/char_maps/central.map 2008-01-13 20:09:59.000000000 +0200
+@@ -0,0 +1,738 @@
++/*
++ !!! WARNING !!!
++ DON'T CHANGE ORDER OF CHARS
++*/
++
++struct codepage_map codepage_utf8cent_array[] =
++ {
++ { 0x000003, 178 }, // max size , char count
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00c280, 1 },
++ { 0x00c281, 2 },
++ { 0x00c282, 3 },
++ { 0x00c283, 4 },
++ { 0x00c284, 5 },
++ { 0x00c285, 6 },
++ { 0x00c286, 7 },
++ { 0x00c287, 8 },
++ { 0x00c288, 9 },
++ { 0x00c289, 10 },
++ { 0x00c28a, 11 },
++ { 0x00c28b, 12 },
++ { 0x00c28c, 13 },
++ { 0x00c28d, 14 },
++ { 0x00c28e, 15 },
++ { 0x00c28f, 16 },
++ { 0x00c290, 17 },
++ { 0x00c291, 18 },
++ { 0x00c292, 19 },
++ { 0x00c293, 20 },
++ { 0x00c294, 21 },
++ { 0x00c295, 22 },
++ { 0x00c296, 23 },
++ { 0x00c297, 24 },
++ { 0x00c298, 25 },
++ { 0x00c299, 26 },
++ { 0x00c29a, 27 },
++ { 0x00c29b, 28 },
++ { 0x00c29c, 29 },
++ { 0x00c29d, 30 },
++ { 0x00c29e, 31 },
++ { 0x00c29f, 32 },
++ { 0x00c2a0, 33 },
++ { 0x00c2a4, 34 },
++ { 0x00c2a6, 35 },
++ { 0x00c2a7, 36 },
++ { 0x00c2a8, 37 },
++ { 0x00c2a9, 38 },
++ { 0x00c2ab, 39 },
++ { 0x00c2ad, 40 },
++ { 0x00c2ad, 41 },
++ { 0x00c2ae, 42 },
++ { 0x00c2b0, 43 },
++ { 0x00c2b1, 44 },
++ { 0x00c2b4, 45 },
++ { 0x00c2b5, 46 },
++ { 0x00c2b6, 47 },
++ { 0x00c2b7, 48 },
++ { 0x00c2b8, 49 },
++ { 0x00c2bb, 50 },
++ { 0x00c380, 51 },
++ { 0x00c381, 52 },
++ { 0x00c382, 53 },
++ { 0x00c384, 54 },
++ { 0x00c386, 55 },
++ { 0x00c387, 56 },
++ { 0x00c388, 57 },
++ { 0x00c389, 58 },
++ { 0x00c38a, 59 },
++ { 0x00c38b, 60 },
++ { 0x00c38c, 61 },
++ { 0x00c38d, 62 },
++ { 0x00c38e, 63 },
++ { 0x00c38f, 64 },
++ { 0x00c392, 65 },
++ { 0x00c393, 66 },
++ { 0x00c394, 67 },
++ { 0x00c396, 68 },
++ { 0x00c397, 69 },
++ { 0x00c399, 70 },
++ { 0x00c39a, 71 },
++ { 0x00c39b, 72 },
++ { 0x00c39c, 73 },
++ { 0x00c39d, 74 },
++ { 0x00c39f, 75 },
++ { 0x00c3a0, 76 },
++ { 0x00c3a1, 77 },
++ { 0x00c3a2, 78 },
++ { 0x00c3a4, 79 },
++ { 0x00c3a6, 80 },
++ { 0x00c3a7, 81 },
++ { 0x00c3a8, 82 },
++ { 0x00c3a9, 83 },
++ { 0x00c3aa, 84 },
++ { 0x00c3ab, 85 },
++ { 0x00c3ac, 86 },
++ { 0x00c3ad, 87 },
++ { 0x00c3ae, 88 },
++ { 0x00c3af, 89 },
++ { 0x00c3b2, 90 },
++ { 0x00c3b3, 91 },
++ { 0x00c3b4, 92 },
++ { 0x00c3b6, 93 },
++ { 0x00c3b7, 94 },
++ { 0x00c3b9, 95 },
++ { 0x00c3ba, 96 },
++ { 0x00c3bb, 97 },
++ { 0x00c3bc, 98 },
++ { 0x00c3bd, 99 },
++ { 0x00c3bf, 100 },
++ { 0x00c482, 101 },
++ { 0x00c483, 102 },
++ { 0x00c484, 103 },
++ { 0x00c485, 104 },
++ { 0x00c486, 105 },
++ { 0x00c487, 106 },
++ { 0x00c48c, 107 },
++ { 0x00c48d, 108 },
++ { 0x00c48e, 109 },
++ { 0x00c48f, 110 },
++ { 0x00c490, 111 },
++ { 0x00c491, 112 },
++ { 0x00c498, 113 },
++ { 0x00c499, 114 },
++ { 0x00c49a, 115 },
++ { 0x00c49b, 116 },
++ { 0x00c4b9, 117 },
++ { 0x00c4ba, 118 },
++ { 0x00c4bd, 119 },
++ { 0x00c4be, 120 },
++ { 0x00c581, 121 },
++ { 0x00c582, 122 },
++ { 0x00c583, 123 },
++ { 0x00c584, 124 },
++ { 0x00c587, 125 },
++ { 0x00c588, 126 },
++ { 0x00c590, 127 },
++ { 0x00c591, 128 },
++ { 0x00c592, 129 },
++ { 0x00c593, 130 },
++ { 0x00c594, 131 },
++ { 0x00c595, 132 },
++ { 0x00c598, 133 },
++ { 0x00c599, 134 },
++ { 0x00c59a, 135 },
++ { 0x00c59b, 136 },
++ { 0x00c59e, 137 },
++ { 0x00c59f, 138 },
++ { 0x00c5a0, 139 },
++ { 0x00c5a1, 140 },
++ { 0x00c5a2, 141 },
++ { 0x00c5a3, 142 },
++ { 0x00c5a4, 143 },
++ { 0x00c5a5, 144 },
++ { 0x00c5ae, 145 },
++ { 0x00c5af, 146 },
++ { 0x00c5b0, 147 },
++ { 0x00c5b1, 148 },
++ { 0x00c5b8, 149 },
++ { 0x00c5b9, 150 },
++ { 0x00c5ba, 151 },
++ { 0x00c5bb, 152 },
++ { 0x00c5bc, 153 },
++ { 0x00c5bd, 154 },
++ { 0x00c5be, 155 },
++ { 0x00cb87, 156 },
++ { 0x00cb98, 157 },
++ { 0x00cb99, 158 },
++ { 0x00c89a, 159 },
++ { 0x00cb9b, 160 },
++ { 0x00cb9d, 161 },
++ { 0xe28093, 162 },
++ { 0xe28094, 163 },
++ { 0xe28098, 164 },
++ { 0xe28099, 165 },
++ { 0xe2809a, 166 },
++ { 0xe2809c, 167 },
++ { 0xe2809d, 168 },
++ { 0xe2809e, 169 },
++ { 0xe280a0, 170 },
++ { 0xe280a1, 171 },
++ { 0xe280a2, 172 },
++ { 0xe280a6, 173 },
++ { 0xe280b0, 174 },
++ { 0xe280b9, 175 },
++ { 0xe280ba, 176 },
++ { 0xe282ac, 177 },
++ { 0xe284a2, 178 },
++ { 0x000000, 0 }
++ };
++
++struct codepage_map codepage_iso2_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b3, 52 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x0000, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_iso16_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a7, 40 },
++ { 0x003f, 0 },
++ { 0x00a9, 42 },
++ { 0x00ab, 44 },
++ { 0x00ad, 46 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x003f, 0 },
++ { 0x00bb, 60 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c4, 69 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d6, 87 },
++ { 0x003f, 0 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x003f, 0 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e4, 101 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f6, 119 },
++ { 0x003f, 0 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x003f, 0 },
++ { 0x00ff, 128 },
++ { 0x00c3, 68 },
++ { 0x00e3, 100 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00c5, 70 },
++ { 0x00e5, 102 },
++ { 0x00b2, 51 },
++ { 0x00b9, 58 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00d0, 81 },
++ { 0x00f0, 113 },
++ { 0x00dd, 94 },
++ { 0x00fd, 126 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a3, 36 },
++ { 0x00b3, 52 },
++ { 0x00d1, 82 },
++ { 0x00f1, 114 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00d5, 86 },
++ { 0x00f5, 118 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00d7, 88 },
++ { 0x00f7, 120 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a6, 39 },
++ { 0x00a8, 41 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00d8, 89 },
++ { 0x00f8, 121 },
++ { 0x00be, 63 },
++ { 0x00ac, 45 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00bf, 64 },
++ { 0x00b4, 53 },
++ { 0x00b8, 57 },
++ { 0x003f, 0 },
++ { 0x00aa, 43 },
++ { 0x00ba, 59 },
++ { 0x00de, 95 },
++ { 0x00fe, 127 },
++ { 0x00b5, 54 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a5, 38 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a4, 37 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_win1250_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x0081, 2 },
++ { 0x0083, 4 },
++ { 0x0088, 9 },
++ { 0x0090, 17 },
++ { 0x0098, 25 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a0, 33 },
++ { 0x00a4, 37 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00bb, 60 },
++ { 0x003f, 0 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c4, 69 },
++ { 0x003f, 0 },
++ { 0x00c7, 72 },
++ { 0x003f, 0 },
++ { 0x00c9, 74 },
++ { 0x003f, 0 },
++ { 0x00cb, 76 },
++ { 0x003f, 0 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x003f, 0 },
++ { 0x00da, 91 },
++ { 0x003f, 0 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00df, 96 },
++ { 0x003f, 0 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e4, 101 },
++ { 0x003f, 0 },
++ { 0x00e7, 104 },
++ { 0x003f, 0 },
++ { 0x00e9, 106 },
++ { 0x003f, 0 },
++ { 0x00eb, 108 },
++ { 0x003f, 0 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x003f, 0 },
++ { 0x00fa, 123 },
++ { 0x003f, 0 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x003f, 0 },
++ { 0x00c3, 68 },
++ { 0x00e3, 100 },
++ { 0x00a5, 38 },
++ { 0x00b9, 58 },
++ { 0x00c6, 71 },
++ { 0x00e6, 103 },
++ { 0x00c8, 73 },
++ { 0x00e8, 105 },
++ { 0x00cf, 80 },
++ { 0x00ef, 112 },
++ { 0x00d0, 81 },
++ { 0x00f0, 113 },
++ { 0x00ca, 75 },
++ { 0x00ea, 107 },
++ { 0x00cc, 77 },
++ { 0x00ec, 109 },
++ { 0x00c5, 70 },
++ { 0x00e5, 102 },
++ { 0x00bc, 61 },
++ { 0x00be, 63 },
++ { 0x00a3, 36 },
++ { 0x00b3, 52 },
++ { 0x00d1, 82 },
++ { 0x00f1, 114 },
++ { 0x00d2, 83 },
++ { 0x00f2, 115 },
++ { 0x00d5, 86 },
++ { 0x00f5, 118 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00c0, 65 },
++ { 0x00e0, 97 },
++ { 0x00d8, 89 },
++ { 0x00f8, 121 },
++ { 0x008c, 13 },
++ { 0x009c, 29 },
++ { 0x00aa, 43 },
++ { 0x00ba, 59 },
++ { 0x008a, 11 },
++ { 0x009a, 27 },
++ { 0x00de, 95 },
++ { 0x00fe, 127 },
++ { 0x008d, 14 },
++ { 0x009d, 30 },
++ { 0x00d9, 90 },
++ { 0x00f9, 122 },
++ { 0x00db, 92 },
++ { 0x00fb, 124 },
++ { 0x003f, 0 },
++ { 0x008f, 16 },
++ { 0x009f, 32 },
++ { 0x00af, 48 },
++ { 0x00bf, 64 },
++ { 0x008e, 15 },
++ { 0x009e, 31 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00ff, 128 },
++ { 0x003f, 0 },
++ { 0x00b2, 51 },
++ { 0x00bd, 62 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0082, 3 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0084, 5 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0095, 22 },
++ { 0x0085, 6 },
++ { 0x0089, 10 },
++ { 0x008b, 12 },
++ { 0x009b, 28 },
++ { 0x0080, 1 },
++ { 0x0099, 26 },
++ { 0x0000, 0 }
++ };
++
+diff -urN vsftpd-2.0.5.org/char_maps/cyrillic.map vsftpd-2.0.5/char_maps/cyrillic.map
+--- vsftpd-2.0.5.org/char_maps/cyrillic.map 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/char_maps/cyrillic.map 2008-01-13 20:09:59.000000000 +0200
+@@ -0,0 +1,1349 @@
++/*
++ !!! WARNING !!!
++ DON'T CHANGE ORDER OF CHARS
++*/
++
++struct codepage_map codepage_utf8cyr_array[] =
++ {
++ { 0x000003, 216 }, // max size , char count
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00c280, 1 },
++ { 0x00c281, 2 },
++ { 0x00c282, 3 },
++ { 0x00c283, 4 },
++ { 0x00c284, 5 },
++ { 0x00c285, 6 },
++ { 0x00c286, 7 },
++ { 0x00c287, 8 },
++ { 0x00c288, 9 },
++ { 0x00c289, 10 },
++ { 0x00c28a, 11 },
++ { 0x00c28b, 12 },
++ { 0x00c28c, 13 },
++ { 0x00c28d, 14 },
++ { 0x00c28e, 15 },
++ { 0x00c28f, 16 },
++ { 0x00c290, 17 },
++ { 0x00c291, 18 },
++ { 0x00c292, 19 },
++ { 0x00c293, 20 },
++ { 0x00c294, 21 },
++ { 0x00c295, 22 },
++ { 0x00c296, 23 },
++ { 0x00c297, 24 },
++ { 0x00c298, 25 },
++ { 0x00c299, 26 },
++ { 0x00c29a, 27 },
++ { 0x00c29b, 28 },
++ { 0x00c29c, 29 },
++ { 0x00c29d, 30 },
++ { 0x00c29e, 31 },
++ { 0x00c29f, 32 },
++ { 0x00c2a0, 33 },
++ { 0x00c2a4, 34 },
++ { 0x00c2a6, 35 },
++ { 0x00c2a7, 36 },
++ { 0x00c2a9, 37 },
++ { 0x00c2ab, 38 },
++ { 0x00c2ac, 39 },
++ { 0x00c2ad, 40 },
++ { 0x00c2ae, 41 },
++ { 0x00c2b0, 42 },
++ { 0x00c2b1, 43 },
++ { 0x00c2b2, 44 },
++ { 0x00c2b5, 45 },
++ { 0x00c2b6, 46 },
++ { 0x00c2b7, 47 },
++ { 0x00c2bb, 48 },
++ { 0x00c3b7, 49 },
++ { 0x00d081, 50 },
++ { 0x00d082, 51 },
++ { 0x00d083, 52 },
++ { 0x00d084, 53 },
++ { 0x00d085, 54 },
++ { 0x00d086, 55 },
++ { 0x00d087, 56 },
++ { 0x00d088, 57 },
++ { 0x00d089, 58 },
++ { 0x00d08a, 59 },
++ { 0x00d08b, 60 },
++ { 0x00d08c, 61 },
++ { 0x00d08e, 62 },
++ { 0x00d08f, 63 },
++ { 0x00d090, 64 },
++ { 0x00d091, 65 },
++ { 0x00d092, 66 },
++ { 0x00d093, 67 },
++ { 0x00d094, 68 },
++ { 0x00d095, 69 },
++ { 0x00d096, 70 },
++ { 0x00d097, 71 },
++ { 0x00d098, 72 },
++ { 0x00d099, 73 },
++ { 0x00d09a, 74 },
++ { 0x00d09b, 75 },
++ { 0x00d09c, 76 },
++ { 0x00d09d, 77 },
++ { 0x00d09e, 78 },
++ { 0x00d09f, 79 },
++ { 0x00d0a0, 80 },
++ { 0x00d0a1, 81 },
++ { 0x00d0a2, 82 },
++ { 0x00d0a3, 83 },
++ { 0x00d0a4, 84 },
++ { 0x00d0a5, 85 },
++ { 0x00d0a6, 86 },
++ { 0x00d0a7, 87 },
++ { 0x00d0a8, 88 },
++ { 0x00d0a9, 89 },
++ { 0x00d0aa, 90 },
++ { 0x00d0ab, 91 },
++ { 0x00d0ac, 92 },
++ { 0x00d0ad, 93 },
++ { 0x00d0ae, 94 },
++ { 0x00d0af, 95 },
++ { 0x00d0b0, 96 },
++ { 0x00d0b1, 97 },
++ { 0x00d0b2, 98 },
++ { 0x00d0b3, 99 },
++ { 0x00d0b4, 100 },
++ { 0x00d0b5, 101 },
++ { 0x00d0b6, 102 },
++ { 0x00d0b7, 103 },
++ { 0x00d0b8, 104 },
++ { 0x00d0b9, 105 },
++ { 0x00d0ba, 106 },
++ { 0x00d0bb, 107 },
++ { 0x00d0bc, 108 },
++ { 0x00d0bd, 109 },
++ { 0x00d0be, 110 },
++ { 0x00d0bf, 111 },
++ { 0x00d180, 112 },
++ { 0x00d181, 113 },
++ { 0x00d182, 114 },
++ { 0x00d183, 115 },
++ { 0x00d184, 116 },
++ { 0x00d185, 117 },
++ { 0x00d186, 118 },
++ { 0x00d187, 119 },
++ { 0x00d188, 120 },
++ { 0x00d189, 121 },
++ { 0x00d18a, 122 },
++ { 0x00d18b, 123 },
++ { 0x00d18c, 124 },
++ { 0x00d18d, 125 },
++ { 0x00d18e, 126 },
++ { 0x00d18f, 127 },
++ { 0x00d191, 128 },
++ { 0x00d192, 129 },
++ { 0x00d193, 130 },
++ { 0x00d194, 131 },
++ { 0x00d195, 132 },
++ { 0x00d196, 133 },
++ { 0x00d197, 134 },
++ { 0x00d198, 135 },
++ { 0x00d199, 136 },
++ { 0x00d19a, 137 },
++ { 0x00d19b, 138 },
++ { 0x00d19c, 139 },
++ { 0x00d19e, 140 },
++ { 0x00d19f, 141 },
++ { 0x00d290, 142 },
++ { 0x00d291, 143 },
++ { 0xe28093, 144 },
++ { 0xe28094, 145 },
++ { 0xe28098, 146 },
++ { 0xe28099, 147 },
++ { 0xe2809a, 148 },
++ { 0xe2809c, 149 },
++ { 0xe2809d, 150 },
++ { 0xe2809e, 151 },
++ { 0xe280a0, 152 },
++ { 0xe280a1, 153 },
++ { 0xe280a2, 154 },
++ { 0xe280a6, 155 },
++ { 0xe280b0, 156 },
++ { 0xe280b9, 157 },
++ { 0xe280ba, 158 },
++ { 0xe28496, 159 },
++ { 0xe284a2, 160 },
++ { 0xe28899, 161 },
++ { 0xe2889a, 162 },
++ { 0xe28988, 163 },
++ { 0xe289a4, 164 },
++ { 0xe289a5, 165 },
++ { 0xe28ca0, 166 },
++ { 0xe28ca1, 167 },
++ { 0xe29480, 168 },
++ { 0xe29482, 169 },
++ { 0xe2948c, 170 },
++ { 0xe29490, 171 },
++ { 0xe29494, 172 },
++ { 0xe29498, 173 },
++ { 0xe2949c, 174 },
++ { 0xe294a4, 175 },
++ { 0xe294ac, 176 },
++ { 0xe294b4, 177 },
++ { 0xe294bc, 178 },
++ { 0xe29590, 179 },
++ { 0xe29591, 180 },
++ { 0xe29592, 181 },
++ { 0xe29593, 182 },
++ { 0xe29594, 183 },
++ { 0xe29595, 184 },
++ { 0xe29596, 185 },
++ { 0xe29597, 186 },
++ { 0xe29598, 187 },
++ { 0xe29599, 188 },
++ { 0xe2959a, 189 },
++ { 0xe2959b, 190 },
++ { 0xe2959c, 191 },
++ { 0xe2959d, 192 },
++ { 0xe2959e, 193 },
++ { 0xe2959f, 194 },
++ { 0xe295a0, 195 },
++ { 0xe295a1, 196 },
++ { 0xe295a2, 197 },
++ { 0xe295a3, 198 },
++ { 0xe295a4, 199 },
++ { 0xe295a5, 200 },
++ { 0xe295a6, 201 },
++ { 0xe295a7, 202 },
++ { 0xe295a8, 203 },
++ { 0xe295a9, 204 },
++ { 0xe295aa, 205 },
++ { 0xe295ab, 206 },
++ { 0xe295ac, 207 },
++ { 0xe29680, 208 },
++ { 0xe29684, 209 },
++ { 0xe29688, 210 },
++ { 0xe2968c, 211 },
++ { 0xe29690, 212 },
++ { 0xe29691, 213 },
++ { 0xe29692, 214 },
++ { 0xe29693, 215 },
++ { 0xe296a0, 216 },
++ { 0x000000, 0 }
++ };
++
++struct codepage_map codepage_win1251_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x0088, 9 },
++ { 0x0098, 25 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a0, 33 },
++ { 0x00a4, 37 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a9, 42 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x003f, 0 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00bb, 60 },
++ { 0x003f, 0 },
++ { 0x00a8, 41 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x00aa, 43 },
++ { 0x00bd, 62 },
++ { 0x00b2, 51 },
++ { 0x00af, 48 },
++ { 0x00a3, 36 },
++ { 0x008a, 11 },
++ { 0x008c, 13 },
++ { 0x008e, 15 },
++ { 0x008d, 14 },
++ { 0x00a1, 34 },
++ { 0x008f, 16 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x00b8, 57 },
++ { 0x0090, 17 },
++ { 0x0083, 4 },
++ { 0x00ba, 59 },
++ { 0x00be, 63 },
++ { 0x00b3, 52 },
++ { 0x00bf, 64 },
++ { 0x00bc, 61 },
++ { 0x009a, 27 },
++ { 0x009c, 29 },
++ { 0x009e, 31 },
++ { 0x009d, 30 },
++ { 0x00a2, 35 },
++ { 0x009f, 32 },
++ { 0x00a5, 38 },
++ { 0x00b4, 53 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0082, 3 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0084, 5 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0095, 22 },
++ { 0x0085, 6 },
++ { 0x0089, 10 },
++ { 0x008b, 12 },
++ { 0x009b, 28 },
++ { 0x00b9, 58 },
++ { 0x0099, 26 },
++ { 0x0000, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_koi8u_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x009a, 27 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00bf, 64 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x009c, 29 },
++ { 0x003f, 0 },
++ { 0x009d, 30 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x009e, 31 },
++ { 0x003f, 0 },
++ { 0x009f, 32 },
++ { 0x00b3, 52 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00b4, 53 },
++ { 0x003f, 0 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00f7, 120 },
++ { 0x00e7, 104 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00f6, 119 },
++ { 0x00fa, 123 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00e6, 103 },
++ { 0x00e8, 105 },
++ { 0x00e3, 100 },
++ { 0x00fe, 127 },
++ { 0x00fb, 124 },
++ { 0x00fd, 126 },
++ { 0x00ff, 128 },
++ { 0x00f9, 122 },
++ { 0x00f8, 121 },
++ { 0x00fc, 125 },
++ { 0x00e0, 97 },
++ { 0x00f1, 114 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00d7, 88 },
++ { 0x00c7, 72 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00d6, 87 },
++ { 0x00da, 91 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00c6, 71 },
++ { 0x00c8, 73 },
++ { 0x00c3, 68 },
++ { 0x00de, 95 },
++ { 0x00db, 92 },
++ { 0x00dd, 94 },
++ { 0x00df, 96 },
++ { 0x00d9, 90 },
++ { 0x00d8, 89 },
++ { 0x00dc, 93 },
++ { 0x00c0, 65 },
++ { 0x00d1, 82 },
++ { 0x00a3, 36 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a4, 37 },
++ { 0x003f, 0 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00bd, 62 },
++ { 0x00ad, 46 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x0093, 20 },
++ { 0x009b, 28 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x003f, 0 },
++ { 0x00a5, 38 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x003f, 0 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x003f, 0 },
++ { 0x00b5, 54 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x003f, 0 },
++ { 0x00be, 63 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0094, 21 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_ibm866_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00ff, 128 },
++ { 0x00fd, 126 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f8, 121 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00fa, 123 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f0, 113 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f2, 115 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f4, 117 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f6, 119 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f1, 114 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f3, 116 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f5, 118 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f7, 120 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00fc, 125 },
++ { 0x003f, 0 },
++ { 0x00f9, 122 },
++ { 0x00fb, 124 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00c4, 69 },
++ { 0x00b3, 52 },
++ { 0x00da, 91 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00d9, 90 },
++ { 0x00c3, 68 },
++ { 0x00b4, 53 },
++ { 0x00c2, 67 },
++ { 0x00c1, 66 },
++ { 0x00c5, 70 },
++ { 0x00cd, 78 },
++ { 0x00ba, 59 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00c9, 74 },
++ { 0x00b8, 57 },
++ { 0x00b7, 56 },
++ { 0x00bb, 60 },
++ { 0x00d4, 85 },
++ { 0x00d3, 84 },
++ { 0x00c8, 73 },
++ { 0x00be, 63 },
++ { 0x00bd, 62 },
++ { 0x00bc, 61 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00cc, 77 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b9, 58 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00cb, 76 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00ca, 75 },
++ { 0x00d8, 89 },
++ { 0x00d7, 88 },
++ { 0x00ce, 79 },
++ { 0x00df, 96 },
++ { 0x00dc, 93 },
++ { 0x00db, 92 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00fe, 127 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_iso5_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00fd, 126 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00ad, 46 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b3, 52 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00f0, 113 },
++ { 0x0000, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_koi8r_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x009a, 27 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x00bf, 64 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x009c, 29 },
++ { 0x005f, 0 },
++ { 0x009d, 30 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x009e, 31 },
++ { 0x005f, 0 },
++ { 0x009f, 32 },
++ { 0x00b3, 52 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00f7, 120 },
++ { 0x00e7, 104 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00f6, 119 },
++ { 0x00fa, 123 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00e6, 103 },
++ { 0x00e8, 105 },
++ { 0x00e3, 100 },
++ { 0x00fe, 127 },
++ { 0x00fb, 124 },
++ { 0x00fd, 126 },
++ { 0x00ff, 128 },
++ { 0x00f9, 122 },
++ { 0x00f8, 121 },
++ { 0x00fc, 125 },
++ { 0x00e0, 97 },
++ { 0x00f1, 114 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00d7, 88 },
++ { 0x00c7, 72 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00d6, 87 },
++ { 0x00da, 91 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00c6, 71 },
++ { 0x00c8, 73 },
++ { 0x00c3, 68 },
++ { 0x00de, 95 },
++ { 0x00db, 92 },
++ { 0x00dd, 94 },
++ { 0x00df, 96 },
++ { 0x00d9, 90 },
++ { 0x00d8, 89 },
++ { 0x00dc, 93 },
++ { 0x00c0, 65 },
++ { 0x00d1, 82 },
++ { 0x00a3, 36 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x005f, 0 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x0093, 20 },
++ { 0x009b, 28 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0094, 21 },
++ { 0x0000, 0 }
++ };
++
+diff -urN vsftpd-2.0.5.org/char_maps/soutern.map vsftpd-2.0.5/char_maps/soutern.map
+--- vsftpd-2.0.5.org/char_maps/soutern.map 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/char_maps/soutern.map 2008-01-13 20:09:59.000000000 +0200
+@@ -0,0 +1,259 @@
++/*
++ !!! WARNING !!!
++ DON'T CHANGE ORDER OF CHARS
++*/
++
++struct codepage_map codepage_utf8sout_array[] =
++ {
++ { 0x000003, 121 }, // max size , char count
++ { 0x00c280, 1 },
++ { 0x00c281, 2 },
++ { 0x00c282, 3 },
++ { 0x00c283, 4 },
++ { 0x00c284, 5 },
++ { 0x00c285, 6 },
++ { 0x00c286, 7 },
++ { 0x00c287, 8 },
++ { 0x00c288, 9 },
++ { 0x00c289, 10 },
++ { 0x00c28a, 11 },
++ { 0x00c28b, 12 },
++ { 0x00c28c, 13 },
++ { 0x00c28d, 14 },
++ { 0x00c28e, 15 },
++ { 0x00c28f, 16 },
++ { 0x00c290, 17 },
++ { 0x00c291, 18 },
++ { 0x00c292, 19 },
++ { 0x00c293, 20 },
++ { 0x00c294, 21 },
++ { 0x00c295, 22 },
++ { 0x00c296, 23 },
++ { 0x00c297, 24 },
++ { 0x00c298, 25 },
++ { 0x00c299, 26 },
++ { 0x00c29a, 27 },
++ { 0x00c29b, 28 },
++ { 0x00c29c, 29 },
++ { 0x00c29d, 30 },
++ { 0x00c29e, 31 },
++ { 0x00c29f, 32 },
++ { 0x00c2a0, 33 },
++ { 0x00c2a3, 34 },
++ { 0x00c2a4, 35 },
++ { 0x00c2a7, 36 },
++ { 0x00c2a8, 37 },
++ { 0x00c2ad, 38 },
++ { 0x00c2b0, 39 },
++ { 0x00c2b2, 40 },
++ { 0x00c2b3, 41 },
++ { 0x00c2b4, 42 },
++ { 0x00c2b5, 43 },
++ { 0x00c2b7, 44 },
++ { 0x00c2b8, 45 },
++ { 0x00c2bd, 46 },
++ { 0x00c380, 47 },
++ { 0x00c381, 48 },
++ { 0x00c382, 49 },
++ { 0x00c384, 50 },
++ { 0x00c387, 51 },
++ { 0x00c388, 52 },
++ { 0x00c389, 53 },
++ { 0x00c38a, 54 },
++ { 0x00c38b, 55 },
++ { 0x00c38c, 56 },
++ { 0x00c38d, 57 },
++ { 0x00c38e, 58 },
++ { 0x00c38f, 59 },
++ { 0x00c391, 60 },
++ { 0x00c392, 61 },
++ { 0x00c393, 62 },
++ { 0x00c394, 63 },
++ { 0x00c396, 64 },
++ { 0x00c397, 65 },
++ { 0x00c399, 66 },
++ { 0x00c39a, 67 },
++ { 0x00c39b, 68 },
++ { 0x00c39c, 69 },
++ { 0x00c39f, 70 },
++ { 0x00c3a0, 71 },
++ { 0x00c3a1, 72 },
++ { 0x00c3a2, 73 },
++ { 0x00c3a4, 74 },
++ { 0x00c3a7, 75 },
++ { 0x00c3a8, 76 },
++ { 0x00c3a9, 77 },
++ { 0x00c3aa, 78 },
++ { 0x00c3ab, 79 },
++ { 0x00c3ac, 80 },
++ { 0x00c3ad, 81 },
++ { 0x00c3ae, 82 },
++ { 0x00c3af, 83 },
++ { 0x00c3b1, 84 },
++ { 0x00c3b2, 85 },
++ { 0x00c3b3, 86 },
++ { 0x00c3b4, 87 },
++ { 0x00c3b6, 88 },
++ { 0x00c3b7, 89 },
++ { 0x00c3b9, 90 },
++ { 0x00c3ba, 91 },
++ { 0x00c3bb, 92 },
++ { 0x00c3bc, 93 },
++ { 0x00c488, 94 },
++ { 0x00c489, 95 },
++ { 0x00c48a, 96 },
++ { 0x00c48b, 97 },
++ { 0x00c49c, 98 },
++ { 0x00c49d, 99 },
++ { 0x00c49e, 100 },
++ { 0x00c49f, 101 },
++ { 0x00c4a0, 102 },
++ { 0x00c4a1, 103 },
++ { 0x00c4a4, 104 },
++ { 0x00c4a5, 105 },
++ { 0x00c4a6, 106 },
++ { 0x00c4a7, 107 },
++ { 0x00c4b0, 108 },
++ { 0x00c4b1, 109 },
++ { 0x00c4b4, 110 },
++ { 0x00c4b5, 111 },
++ { 0x00c59c, 112 },
++ { 0x00c59d, 113 },
++ { 0x00c59e, 114 },
++ { 0x00c59f, 115 },
++ { 0x00c5ac, 116 },
++ { 0x00c5ad, 117 },
++ { 0x00c5bb, 118 },
++ { 0x00c5bc, 119 },
++ { 0x00cb98, 120 },
++ { 0x00cb99, 121 },
++ { 0x000000, 0 }
++ };
++
++struct codepage_map codepage_iso3_array[] =
++ {
++ { 0x0001, 121 }, // max size , char count for control
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a7, 39 },
++ { 0x00a8, 40 },
++ { 0x00ad, 45 },
++ { 0x00b0, 47 },
++ { 0x00b2, 49 },
++ { 0x00b3, 50 },
++ { 0x00b4, 51 },
++ { 0x00b5, 52 },
++ { 0x00b7, 54 },
++ { 0x00b8, 55 },
++ { 0x00bd, 60 },
++ { 0x00c0, 62 },
++ { 0x00c1, 63 },
++ { 0x00c2, 64 },
++ { 0x00c4, 65 },
++ { 0x00c7, 68 },
++ { 0x00c8, 69 },
++ { 0x00c9, 70 },
++ { 0x00ca, 71 },
++ { 0x00cb, 72 },
++ { 0x00cc, 73 },
++ { 0x00cd, 74 },
++ { 0x00ce, 75 },
++ { 0x00cf, 76 },
++ { 0x00d1, 77 },
++ { 0x00d2, 78 },
++ { 0x00d3, 79 },
++ { 0x00d4, 80 },
++ { 0x00d6, 82 },
++ { 0x00d7, 83 },
++ { 0x00d9, 85 },
++ { 0x00da, 86 },
++ { 0x00db, 87 },
++ { 0x00dc, 88 },
++ { 0x00df, 91 },
++ { 0x00e0, 92 },
++ { 0x00e1, 93 },
++ { 0x00e2, 94 },
++ { 0x00e4, 95 },
++ { 0x00e7, 98 },
++ { 0x00e8, 99 },
++ { 0x00e9, 100 },
++ { 0x00ea, 101 },
++ { 0x00eb, 102 },
++ { 0x00ec, 103 },
++ { 0x00ed, 104 },
++ { 0x00ee, 105 },
++ { 0x00ef, 106 },
++ { 0x00f1, 107 },
++ { 0x00f2, 108 },
++ { 0x00f3, 109 },
++ { 0x00f4, 110 },
++ { 0x00f6, 112 },
++ { 0x00f7, 113 },
++ { 0x00f9, 115 },
++ { 0x00fa, 116 },
++ { 0x00fb, 117 },
++ { 0x00fc, 118 },
++ { 0x00c6, 67 },
++ { 0x00e6, 97 },
++ { 0x00c5, 66 },
++ { 0x00e5, 96 },
++ { 0x00d8, 84 },
++ { 0x00f8, 114 },
++ { 0x00ab, 43 },
++ { 0x00bb, 58 },
++ { 0x00d5, 81 },
++ { 0x00f5, 111 },
++ { 0x00a6, 38 },
++ { 0x00b6, 53 },
++ { 0x00a1, 34 },
++ { 0x00b1, 48 },
++ { 0x00a9, 41 },
++ { 0x00b9, 56 },
++ { 0x00ac, 44 },
++ { 0x00bc, 59 },
++ { 0x00de, 90 },
++ { 0x00fe, 120 },
++ { 0x00aa, 42 },
++ { 0x00ba, 57 },
++ { 0x00dd, 89 },
++ { 0x00fd, 119 },
++ { 0x00af, 46 },
++ { 0x00bf, 61 },
++ { 0x00a2, 35 },
++ { 0x00ff, 121 },
++ { 0x0000, 0 }
++ };
++
+diff -urN vsftpd-2.0.5.org/char_maps/utf8.map vsftpd-2.0.5/char_maps/utf8.map
+--- vsftpd-2.0.5.org/char_maps/utf8.map 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/char_maps/utf8.map 2008-01-13 20:09:59.000000000 +0200
+@@ -0,0 +1,393 @@
++/*
++ !!! WARNING !!!
++ DON'T CHANGE ORDER OF CHARS
++*/
++
++struct codepage_map codepage_utf8_array[] =
++ {
++ { 0x000003, 382 }, // max size , char count
++ { 0x00c280, 1 },
++ { 0x00c281, 2 },
++ { 0x00c282, 3 },
++ { 0x00c283, 4 },
++ { 0x00c284, 5 },
++ { 0x00c285, 6 },
++ { 0x00c286, 7 },
++ { 0x00c287, 8 },
++ { 0x00c288, 9 },
++ { 0x00c289, 10 },
++ { 0x00c28a, 11 },
++ { 0x00c28b, 12 },
++ { 0x00c28c, 13 },
++ { 0x00c28d, 14 },
++ { 0x00c28e, 15 },
++ { 0x00c28f, 16 },
++ { 0x00c290, 17 },
++ { 0x00c291, 18 },
++ { 0x00c292, 19 },
++ { 0x00c293, 20 },
++ { 0x00c294, 21 },
++ { 0x00c295, 22 },
++ { 0x00c296, 23 },
++ { 0x00c297, 24 },
++ { 0x00c298, 25 },
++ { 0x00c299, 26 },
++ { 0x00c29a, 27 },
++ { 0x00c29b, 28 },
++ { 0x00c29c, 29 },
++ { 0x00c29d, 30 },
++ { 0x00c29e, 31 },
++ { 0x00c29f, 32 },
++ { 0x00c2a0, 33 },
++ { 0x00c2a1, 34 },
++ { 0x00c2a2, 35 },
++ { 0x00c2a3, 36 },
++ { 0x00c2a4, 37 },
++ { 0x00c2a5, 38 },
++ { 0x00c2a6, 39 },
++ { 0x00c2a7, 40 },
++ { 0x00c2a8, 41 },
++ { 0x00c2a9, 42 },
++ { 0x00c2aa, 43 },
++ { 0x00c2ab, 44 },
++ { 0x00c2ac, 45 },
++ { 0x00c2ad, 46 },
++ { 0x00c2ae, 47 },
++ { 0x00c2af, 48 },
++ { 0x00c2b0, 49 },
++ { 0x00c2b1, 50 },
++ { 0x00c2b2, 51 },
++ { 0x00c2b3, 52 },
++ { 0x00c2b4, 53 },
++ { 0x00c2b5, 54 },
++ { 0x00c2b6, 55 },
++ { 0x00c2b7, 56 },
++ { 0x00c2b8, 57 },
++ { 0x00c2b9, 58 },
++ { 0x00c2ba, 59 },
++ { 0x00c2bb, 60 },
++ { 0x00c2bc, 61 },
++ { 0x00c2bd, 62 },
++ { 0x00c2be, 63 },
++ { 0x00c2bf, 64 },
++ { 0x00c380, 65 },
++ { 0x00c381, 66 },
++ { 0x00c382, 67 },
++ { 0x00c383, 68 },
++ { 0x00c384, 69 },
++ { 0x00c385, 70 },
++ { 0x00c386, 71 },
++ { 0x00c387, 72 },
++ { 0x00c388, 73 },
++ { 0x00c389, 74 },
++ { 0x00c38a, 75 },
++ { 0x00c38b, 76 },
++ { 0x00c38c, 77 },
++ { 0x00c38d, 78 },
++ { 0x00c38e, 79 },
++ { 0x00c38f, 80 },
++ { 0x00c390, 81 },
++ { 0x00c391, 82 },
++ { 0x00c392, 83 },
++ { 0x00c393, 84 },
++ { 0x00c394, 85 },
++ { 0x00c395, 86 },
++ { 0x00c396, 87 },
++ { 0x00c397, 88 },
++ { 0x00c398, 89 },
++ { 0x00c399, 90 },
++ { 0x00c39a, 91 },
++ { 0x00c39b, 92 },
++ { 0x00c39c, 93 },
++ { 0x00c39d, 94 },
++ { 0x00c39e, 95 },
++ { 0x00c39f, 96 },
++ { 0x00c3a0, 97 },
++ { 0x00c3a1, 98 },
++ { 0x00c3a2, 99 },
++ { 0x00c3a3, 100 },
++ { 0x00c3a4, 101 },
++ { 0x00c3a5, 102 },
++ { 0x00c3a6, 103 },
++ { 0x00c3a7, 104 },
++ { 0x00c3a8, 105 },
++ { 0x00c3a9, 106 },
++ { 0x00c3aa, 107 },
++ { 0x00c3ab, 108 },
++ { 0x00c3ac, 109 },
++ { 0x00c3ad, 110 },
++ { 0x00c3ae, 111 },
++ { 0x00c3af, 112 },
++ { 0x00c3b0, 113 },
++ { 0x00c3b1, 114 },
++ { 0x00c3b2, 115 },
++ { 0x00c3b3, 116 },
++ { 0x00c3b4, 117 },
++ { 0x00c3b5, 118 },
++ { 0x00c3b6, 119 },
++ { 0x00c3b7, 120 },
++ { 0x00c3b8, 121 },
++ { 0x00c3b9, 122 },
++ { 0x00c3ba, 123 },
++ { 0x00c3bb, 124 },
++ { 0x00c3bc, 125 },
++ { 0x00c3bd, 126 },
++ { 0x00c3be, 127 },
++ { 0x00c3bf, 128 },
++ { 0x00c482, 129 },
++ { 0x00c483, 130 },
++ { 0x00c484, 131 },
++ { 0x00c485, 132 },
++ { 0x00c486, 133 },
++ { 0x00c487, 134 },
++ { 0x00c488, 135 },
++ { 0x00c489, 136 },
++ { 0x00c48a, 137 },
++ { 0x00c48b, 138 },
++ { 0x00c48c, 139 },
++ { 0x00c48d, 140 },
++ { 0x00c48e, 141 },
++ { 0x00c48f, 142 },
++ { 0x00c490, 143 },
++ { 0x00c491, 144 },
++ { 0x00c498, 145 },
++ { 0x00c499, 146 },
++ { 0x00c49a, 147 },
++ { 0x00c49b, 148 },
++ { 0x00c49c, 149 },
++ { 0x00c49d, 150 },
++ { 0x00c49e, 151 },
++ { 0x00c49f, 152 },
++ { 0x00c4a0, 153 },
++ { 0x00c4a1, 154 },
++ { 0x00c4a4, 155 },
++ { 0x00c4a5, 156 },
++ { 0x00c4a6, 157 },
++ { 0x00c4a7, 158 },
++ { 0x00c4b0, 159 },
++ { 0x00c4b1, 160 },
++ { 0x00c4b4, 161 },
++ { 0x00c4b5, 162 },
++ { 0x00c4b9, 163 },
++ { 0x00c4ba, 164 },
++ { 0x00c4bd, 165 },
++ { 0x00c4be, 166 },
++ { 0x00c581, 167 },
++ { 0x00c582, 168 },
++ { 0x00c583, 169 },
++ { 0x00c584, 170 },
++ { 0x00c587, 171 },
++ { 0x00c588, 172 },
++ { 0x00c590, 173 },
++ { 0x00c591, 174 },
++ { 0x00c592, 175 },
++ { 0x00c593, 176 },
++ { 0x00c594, 177 },
++ { 0x00c595, 178 },
++ { 0x00c598, 179 },
++ { 0x00c599, 180 },
++ { 0x00c59a, 181 },
++ { 0x00c59b, 182 },
++ { 0x00c59c, 183 },
++ { 0x00c59d, 184 },
++ { 0x00c59e, 185 },
++ { 0x00c59f, 186 },
++ { 0x00c5a0, 187 },
++ { 0x00c5a1, 188 },
++ { 0x00c5a2, 189 },
++ { 0x00c5a3, 190 },
++ { 0x00c5a4, 191 },
++ { 0x00c5a5, 192 },
++ { 0x00c5ac, 193 },
++ { 0x00c5ad, 194 },
++ { 0x00c5ae, 195 },
++ { 0x00c5af, 196 },
++ { 0x00c5b0, 197 },
++ { 0x00c5b1, 198 },
++ { 0x00c5b8, 199 },
++ { 0x00c5b9, 200 },
++ { 0x00c5ba, 201 },
++ { 0x00c5bb, 202 },
++ { 0x00c5bc, 203 },
++ { 0x00c5bd, 204 },
++ { 0x00c5be, 205 },
++ { 0x00c692, 206 },
++ { 0x00c89a, 207 },
++ { 0x00cb86, 208 },
++ { 0x00cb87, 209 },
++ { 0x00cb98, 210 },
++ { 0x00cb99, 211 },
++ { 0x00cb9b, 212 },
++ { 0x00cb9c, 213 },
++ { 0x00cb9d, 214 },
++ { 0x00d081, 215 },
++ { 0x00d082, 216 },
++ { 0x00d083, 217 },
++ { 0x00d084, 218 },
++ { 0x00d085, 219 },
++ { 0x00d086, 220 },
++ { 0x00d087, 221 },
++ { 0x00d088, 222 },
++ { 0x00d089, 223 },
++ { 0x00d08a, 224 },
++ { 0x00d08b, 225 },
++ { 0x00d08c, 226 },
++ { 0x00d08e, 227 },
++ { 0x00d08f, 228 },
++ { 0x00d090, 229 },
++ { 0x00d091, 230 },
++ { 0x00d092, 231 },
++ { 0x00d093, 232 },
++ { 0x00d094, 233 },
++ { 0x00d095, 234 },
++ { 0x00d096, 235 },
++ { 0x00d097, 236 },
++ { 0x00d098, 237 },
++ { 0x00d099, 238 },
++ { 0x00d09a, 239 },
++ { 0x00d09b, 240 },
++ { 0x00d09c, 241 },
++ { 0x00d09d, 242 },
++ { 0x00d09e, 243 },
++ { 0x00d09f, 244 },
++ { 0x00d0a0, 245 },
++ { 0x00d0a1, 246 },
++ { 0x00d0a2, 247 },
++ { 0x00d0a3, 248 },
++ { 0x00d0a4, 249 },
++ { 0x00d0a5, 250 },
++ { 0x00d0a6, 251 },
++ { 0x00d0a7, 252 },
++ { 0x00d0a8, 253 },
++ { 0x00d0a9, 254 },
++ { 0x00d0aa, 255 },
++ { 0x00d0ab, 256 },
++ { 0x00d0ac, 257 },
++ { 0x00d0ad, 258 },
++ { 0x00d0ae, 259 },
++ { 0x00d0af, 260 },
++ { 0x00d0b0, 261 },
++ { 0x00d0b1, 262 },
++ { 0x00d0b2, 263 },
++ { 0x00d0b3, 264 },
++ { 0x00d0b4, 265 },
++ { 0x00d0b5, 266 },
++ { 0x00d0b6, 267 },
++ { 0x00d0b7, 268 },
++ { 0x00d0b8, 269 },
++ { 0x00d0b9, 270 },
++ { 0x00d0ba, 271 },
++ { 0x00d0bb, 272 },
++ { 0x00d0bc, 273 },
++ { 0x00d0bd, 274 },
++ { 0x00d0be, 275 },
++ { 0x00d0bf, 276 },
++ { 0x00d180, 277 },
++ { 0x00d181, 278 },
++ { 0x00d182, 279 },
++ { 0x00d183, 280 },
++ { 0x00d184, 281 },
++ { 0x00d185, 282 },
++ { 0x00d186, 283 },
++ { 0x00d187, 284 },
++ { 0x00d188, 285 },
++ { 0x00d189, 286 },
++ { 0x00d18a, 287 },
++ { 0x00d18b, 288 },
++ { 0x00d18c, 289 },
++ { 0x00d18d, 290 },
++ { 0x00d18e, 291 },
++ { 0x00d18f, 292 },
++ { 0x00d191, 293 },
++ { 0x00d192, 294 },
++ { 0x00d193, 295 },
++ { 0x00d194, 296 },
++ { 0x00d195, 297 },
++ { 0x00d196, 298 },
++ { 0x00d197, 299 },
++ { 0x00d198, 300 },
++ { 0x00d199, 301 },
++ { 0x00d19a, 302 },
++ { 0x00d19b, 303 },
++ { 0x00d19c, 304 },
++ { 0x00d19e, 305 },
++ { 0x00d19f, 306 },
++ { 0x00d290, 307 },
++ { 0x00d291, 308 },
++ { 0xe28093, 309 },
++ { 0xe28094, 310 },
++ { 0xe28098, 311 },
++ { 0xe28099, 312 },
++ { 0xe2809a, 313 },
++ { 0xe2809c, 314 },
++ { 0xe2809d, 315 },
++ { 0xe2809e, 316 },
++ { 0xe280a0, 317 },
++ { 0xe280a1, 318 },
++ { 0xe280a2, 319 },
++ { 0xe280a6, 320 },
++ { 0xe280b0, 321 },
++ { 0xe280b9, 322 },
++ { 0xe280ba, 323 },
++ { 0xe282ac, 324 },
++ { 0xe28496, 325 },
++ { 0xe284a2, 326 },
++ { 0xe28899, 327 },
++ { 0xe2889a, 328 },
++ { 0xe28988, 329 },
++ { 0xe289a4, 330 },
++ { 0xe289a5, 331 },
++ { 0xe28ca0, 332 },
++ { 0xe28ca1, 333 },
++ { 0xe29480, 334 },
++ { 0xe29482, 335 },
++ { 0xe2948c, 336 },
++ { 0xe29490, 337 },
++ { 0xe29494, 338 },
++ { 0xe29498, 339 },
++ { 0xe2949c, 340 },
++ { 0xe294a4, 341 },
++ { 0xe294ac, 342 },
++ { 0xe294b4, 343 },
++ { 0xe294bc, 344 },
++ { 0xe29590, 345 },
++ { 0xe29591, 346 },
++ { 0xe29592, 347 },
++ { 0xe29593, 348 },
++ { 0xe29594, 349 },
++ { 0xe29595, 350 },
++ { 0xe29596, 351 },
++ { 0xe29597, 352 },
++ { 0xe29598, 353 },
++ { 0xe29599, 354 },
++ { 0xe2959a, 355 },
++ { 0xe2959b, 356 },
++ { 0xe2959c, 357 },
++ { 0xe2959d, 358 },
++ { 0xe2959e, 359 },
++ { 0xe2959f, 360 },
++ { 0xe295a0, 361 },
++ { 0xe295a1, 362 },
++ { 0xe295a2, 363 },
++ { 0xe295a3, 364 },
++ { 0xe295a4, 365 },
++ { 0xe295a5, 366 },
++ { 0xe295a6, 367 },
++ { 0xe295a7, 368 },
++ { 0xe295a8, 369 },
++ { 0xe295a9, 370 },
++ { 0xe295aa, 371 },
++ { 0xe295ab, 372 },
++ { 0xe295ac, 373 },
++ { 0xe29680, 374 },
++ { 0xe29684, 375 },
++ { 0xe29688, 376 },
++ { 0xe2968c, 377 },
++ { 0xe29690, 378 },
++ { 0xe29691, 379 },
++ { 0xe29692, 380 },
++ { 0xe29693, 381 },
++ { 0xe296a0, 382 },
++ { 0x000000, 0 }
++ };
++
+diff -urN vsftpd-2.0.5.org/char_maps/western.map vsftpd-2.0.5/char_maps/western.map
+--- vsftpd-2.0.5.org/char_maps/western.map 1970-01-01 03:00:00.000000000 +0300
++++ vsftpd-2.0.5/char_maps/western.map 2008-01-13 20:09:59.000000000 +0200
+@@ -0,0 +1,669 @@
++/*
++ !!! WARNING !!!
++ DON'T CHANGE ORDER OF CHARS
++*/
++
++struct codepage_map codepage_utf8west_array[] =
++ {
++ { 0x000003, 155 }, // max size , char count
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00003f, 0 },
++ { 0x00c280, 1 },
++ { 0x00c281, 2 },
++ { 0x00c282, 3 },
++ { 0x00c283, 4 },
++ { 0x00c284, 5 },
++ { 0x00c285, 6 },
++ { 0x00c286, 7 },
++ { 0x00c287, 8 },
++ { 0x00c288, 9 },
++ { 0x00c289, 10 },
++ { 0x00c28a, 11 },
++ { 0x00c28b, 12 },
++ { 0x00c28c, 13 },
++ { 0x00c28d, 14 },
++ { 0x00c28e, 15 },
++ { 0x00c28f, 16 },
++ { 0x00c290, 17 },
++ { 0x00c291, 18 },
++ { 0x00c292, 19 },
++ { 0x00c293, 20 },
++ { 0x00c294, 21 },
++ { 0x00c295, 22 },
++ { 0x00c296, 23 },
++ { 0x00c297, 24 },
++ { 0x00c298, 25 },
++ { 0x00c299, 26 },
++ { 0x00c29a, 27 },
++ { 0x00c29b, 28 },
++ { 0x00c29c, 29 },
++ { 0x00c29d, 30 },
++ { 0x00c29e, 31 },
++ { 0x00c29f, 32 },
++ { 0x00c2a0, 33 },
++ { 0x00c2a1, 34 },
++ { 0x00c2a2, 35 },
++ { 0x00c2a3, 36 },
++ { 0x00c2a4, 37 },
++ { 0x00c2a5, 38 },
++ { 0x00c2a6, 39 },
++ { 0x00c2a7, 40 },
++ { 0x00c2a8, 41 },
++ { 0x00c2a9, 42 },
++ { 0x00c2aa, 43 },
++ { 0x00c2ab, 44 },
++ { 0x00c2ac, 45 },
++ { 0x00c2ad, 46 },
++ { 0x00c2ae, 47 },
++ { 0x00c2af, 48 },
++ { 0x00c2b0, 49 },
++ { 0x00c2b1, 50 },
++ { 0x00c2b2, 51 },
++ { 0x00c2b3, 52 },
++ { 0x00c2b4, 53 },
++ { 0x00c2b5, 54 },
++ { 0x00c2b6, 55 },
++ { 0x00c2b7, 56 },
++ { 0x00c2b8, 57 },
++ { 0x00c2b9, 58 },
++ { 0x00c2ba, 59 },
++ { 0x00c2bb, 60 },
++ { 0x00c2bc, 61 },
++ { 0x00c2bd, 62 },
++ { 0x00c2be, 63 },
++ { 0x00c2bf, 64 },
++ { 0x00c380, 65 },
++ { 0x00c381, 66 },
++ { 0x00c382, 67 },
++ { 0x00c383, 68 },
++ { 0x00c384, 69 },
++ { 0x00c385, 70 },
++ { 0x00c386, 71 },
++ { 0x00c387, 72 },
++ { 0x00c388, 73 },
++ { 0x00c389, 74 },
++ { 0x00c38a, 75 },
++ { 0x00c38b, 76 },
++ { 0x00c38c, 77 },
++ { 0x00c38d, 78 },
++ { 0x00c38e, 79 },
++ { 0x00c38f, 80 },
++ { 0x00c390, 81 },
++ { 0x00c391, 82 },
++ { 0x00c392, 83 },
++ { 0x00c393, 84 },
++ { 0x00c394, 85 },
++ { 0x00c395, 86 },
++ { 0x00c396, 87 },
++ { 0x00c397, 88 },
++ { 0x00c398, 89 },
++ { 0x00c399, 90 },
++ { 0x00c39a, 91 },
++ { 0x00c39b, 92 },
++ { 0x00c39c, 93 },
++ { 0x00c39d, 94 },
++ { 0x00c39e, 95 },
++ { 0x00c39f, 96 },
++ { 0x00c3a0, 97 },
++ { 0x00c3a1, 98 },
++ { 0x00c3a2, 99 },
++ { 0x00c3a3, 100 },
++ { 0x00c3a4, 101 },
++ { 0x00c3a5, 102 },
++ { 0x00c3a6, 103 },
++ { 0x00c3a7, 104 },
++ { 0x00c3a8, 105 },
++ { 0x00c3a9, 106 },
++ { 0x00c3aa, 107 },
++ { 0x00c3ab, 108 },
++ { 0x00c3ac, 109 },
++ { 0x00c3ad, 110 },
++ { 0x00c3ae, 111 },
++ { 0x00c3af, 112 },
++ { 0x00c3b0, 113 },
++ { 0x00c3b1, 114 },
++ { 0x00c3b2, 115 },
++ { 0x00c3b3, 116 },
++ { 0x00c3b4, 117 },
++ { 0x00c3b5, 118 },
++ { 0x00c3b6, 119 },
++ { 0x00c3b7, 120 },
++ { 0x00c3b8, 121 },
++ { 0x00c3b9, 122 },
++ { 0x00c3ba, 123 },
++ { 0x00c3bb, 124 },
++ { 0x00c3bc, 125 },
++ { 0x00c3bd, 126 },
++ { 0x00c3be, 127 },
++ { 0x00c3bf, 128 },
++ { 0x00c592, 129 },
++ { 0x00c593, 130 },
++ { 0x00c5a0, 131 },
++ { 0x00c5a1, 132 },
++ { 0x00c5b8, 133 },
++ { 0x00c5bd, 134 },
++ { 0x00c5be, 135 },
++ { 0x00c692, 136 },
++ { 0x00cb86, 137 },
++ { 0x00cb9c, 138 },
++ { 0xe28093, 139 },
++ { 0xe28094, 140 },
++ { 0xe28098, 141 },
++ { 0xe28099, 142 },
++ { 0xe2809a, 143 },
++ { 0xe2809c, 144 },
++ { 0xe2809d, 145 },
++ { 0xe2809e, 146 },
++ { 0xe280a0, 147 },
++ { 0xe280a1, 148 },
++ { 0xe280a2, 149 },
++ { 0xe280a6, 150 },
++ { 0xe280b0, 151 },
++ { 0xe280b9, 152 },
++ { 0xe280ba, 153 },
++ { 0xe282ac, 154 },
++ { 0xe284a2, 155 },
++ { 0x000000, 0 }
++ };
++
++struct codepage_map codepage_iso1_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b3, 52 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x0000, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_iso15_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x0080, 1 },
++ { 0x0081, 2 },
++ { 0x0082, 3 },
++ { 0x0083, 4 },
++ { 0x0084, 5 },
++ { 0x0085, 6 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0088, 9 },
++ { 0x0089, 10 },
++ { 0x008a, 11 },
++ { 0x008b, 12 },
++ { 0x008c, 13 },
++ { 0x008d, 14 },
++ { 0x008e, 15 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0095, 22 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0098, 25 },
++ { 0x0099, 26 },
++ { 0x009a, 27 },
++ { 0x009b, 28 },
++ { 0x009c, 29 },
++ { 0x009d, 30 },
++ { 0x009e, 31 },
++ { 0x009f, 32 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x003f, 0 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b3, 52 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a4, 37 },
++ { 0x003f, 0 },
++ { 0x0000, 0 }
++ };
++
++struct codepage_map codepage_win1252_array[] =
++ {
++ { 0x0001, 128 }, // max size , char count for control
++ { 0x0081, 2 },
++ { 0x008d, 14 },
++ { 0x008f, 16 },
++ { 0x0090, 17 },
++ { 0x009d, 30 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x003f, 0 },
++ { 0x00a0, 33 },
++ { 0x00a1, 34 },
++ { 0x00a2, 35 },
++ { 0x00a3, 36 },
++ { 0x00a4, 37 },
++ { 0x00a5, 38 },
++ { 0x00a6, 39 },
++ { 0x00a7, 40 },
++ { 0x00a8, 41 },
++ { 0x00a9, 42 },
++ { 0x00aa, 43 },
++ { 0x00ab, 44 },
++ { 0x00ac, 45 },
++ { 0x00ad, 46 },
++ { 0x00ae, 47 },
++ { 0x00af, 48 },
++ { 0x00b0, 49 },
++ { 0x00b1, 50 },
++ { 0x00b2, 51 },
++ { 0x00b3, 52 },
++ { 0x00b4, 53 },
++ { 0x00b5, 54 },
++ { 0x00b6, 55 },
++ { 0x00b7, 56 },
++ { 0x00b8, 57 },
++ { 0x00b9, 58 },
++ { 0x00ba, 59 },
++ { 0x00bb, 60 },
++ { 0x00bc, 61 },
++ { 0x00bd, 62 },
++ { 0x00be, 63 },
++ { 0x00bf, 64 },
++ { 0x00c0, 65 },
++ { 0x00c1, 66 },
++ { 0x00c2, 67 },
++ { 0x00c3, 68 },
++ { 0x00c4, 69 },
++ { 0x00c5, 70 },
++ { 0x00c6, 71 },
++ { 0x00c7, 72 },
++ { 0x00c8, 73 },
++ { 0x00c9, 74 },
++ { 0x00ca, 75 },
++ { 0x00cb, 76 },
++ { 0x00cc, 77 },
++ { 0x00cd, 78 },
++ { 0x00ce, 79 },
++ { 0x00cf, 80 },
++ { 0x00d0, 81 },
++ { 0x00d1, 82 },
++ { 0x00d2, 83 },
++ { 0x00d3, 84 },
++ { 0x00d4, 85 },
++ { 0x00d5, 86 },
++ { 0x00d6, 87 },
++ { 0x00d7, 88 },
++ { 0x00d8, 89 },
++ { 0x00d9, 90 },
++ { 0x00da, 91 },
++ { 0x00db, 92 },
++ { 0x00dc, 93 },
++ { 0x00dd, 94 },
++ { 0x00de, 95 },
++ { 0x00df, 96 },
++ { 0x00e0, 97 },
++ { 0x00e1, 98 },
++ { 0x00e2, 99 },
++ { 0x00e3, 100 },
++ { 0x00e4, 101 },
++ { 0x00e5, 102 },
++ { 0x00e6, 103 },
++ { 0x00e7, 104 },
++ { 0x00e8, 105 },
++ { 0x00e9, 106 },
++ { 0x00ea, 107 },
++ { 0x00eb, 108 },
++ { 0x00ec, 109 },
++ { 0x00ed, 110 },
++ { 0x00ee, 111 },
++ { 0x00ef, 112 },
++ { 0x00f0, 113 },
++ { 0x00f1, 114 },
++ { 0x00f2, 115 },
++ { 0x00f3, 116 },
++ { 0x00f4, 117 },
++ { 0x00f5, 118 },
++ { 0x00f6, 119 },
++ { 0x00f7, 120 },
++ { 0x00f8, 121 },
++ { 0x00f9, 122 },
++ { 0x00fa, 123 },
++ { 0x00fb, 124 },
++ { 0x00fc, 125 },
++ { 0x00fd, 126 },
++ { 0x00fe, 127 },
++ { 0x00ff, 128 },
++ { 0x008c, 13 },
++ { 0x009c, 29 },
++ { 0x008a, 11 },
++ { 0x009a, 27 },
++ { 0x009f, 32 },
++ { 0x008e, 15 },
++ { 0x009e, 31 },
++ { 0x0083, 4 },
++ { 0x0088, 9 },
++ { 0x0098, 25 },
++ { 0x0096, 23 },
++ { 0x0097, 24 },
++ { 0x0091, 18 },
++ { 0x0092, 19 },
++ { 0x0082, 3 },
++ { 0x0093, 20 },
++ { 0x0094, 21 },
++ { 0x0084, 5 },
++ { 0x0086, 7 },
++ { 0x0087, 8 },
++ { 0x0095, 22 },
++ { 0x0085, 6 },
++ { 0x0089, 10 },
++ { 0x008b, 12 },
++ { 0x009b, 28 },
++ { 0x0080, 1 },
++ { 0x0099, 26 },
++ { 0x0000, 0 }
++ };
++
+diff -urN vsftpd-2.0.5.org/ftpcmdio.c vsftpd-2.0.5/ftpcmdio.c
+--- vsftpd-2.0.5.org/ftpcmdio.c 2005-03-04 02:42:34.000000000 +0200
++++ vsftpd-2.0.5/ftpcmdio.c 2008-01-13 19:34:50.000000000 +0200
+@@ -19,6 +19,7 @@
+ #include "logging.h"
+ #include "session.h"
+ #include "readwrite.h"
++#include "charconv.h"
+
+ /* Internal functions */
+ static void control_getline(struct mystr* p_str, struct vsf_session* p_sess);
+@@ -125,9 +126,13 @@
+ vsf_log_line(p_sess, kVSFLogEntryFTPOutput, &s_write_buf_str);
+ }
+ str_copy(&s_text_mangle_str, p_str);
++ vsf_charconv_convert(p_sess, &s_text_mangle_str, VSFTP_CONVDIRECT_FORWARD);
+ /* Process the output response according to the specifications.. */
+ /* Escape telnet characters properly */
+- str_replace_text(&s_text_mangle_str, "\377", "\377\377");
++// if (tunable_double_377)
++ {
++ str_replace_text(&s_text_mangle_str, "\377", "\377\377");
++ }
+ /* Change \n for \0 in response */
+ str_replace_char(&s_text_mangle_str, '\n', '\0');
+ /* Build string to squirt down network */
+@@ -213,5 +218,6 @@
+ --len;
+ }
+ }
++ vsf_charconv_convert(p_sess, p_str, VSFTP_CONVDIRECT_BACKWARD);
+ }
+
+diff -urN vsftpd-2.0.5.org/ftpdataio.c vsftpd-2.0.5/ftpdataio.c
+--- vsftpd-2.0.5.org/ftpdataio.c 2005-03-12 04:00:00.000000000 +0200
++++ vsftpd-2.0.5/ftpdataio.c 2008-01-13 19:35:59.000000000 +0200
+@@ -296,7 +296,7 @@
+ {
+ p_subdir_list = &subdir_list;
+ }
+- vsf_ls_populate_dir_list(&dir_list, p_subdir_list, p_dir, p_base_dir_str,
++ vsf_ls_populate_dir_list(p_sess, &dir_list, p_subdir_list, p_dir, p_base_dir_str,
+ p_option_str, p_filter_str, is_verbose);
+ if (p_subdir_list)
+ {
+diff -urN vsftpd-2.0.5.org/ls.c vsftpd-2.0.5/ls.c
+--- vsftpd-2.0.5.org/ls.c 2005-05-24 00:55:00.000000000 +0300
++++ vsftpd-2.0.5/ls.c 2008-01-13 19:32:28.000000000 +0200
+@@ -14,13 +14,16 @@
+ #include "sysstr.h"
+ #include "sysutil.h"
+ #include "tunables.h"
++#include "charconv.h"
+
+-static void build_dir_line(struct mystr* p_str,
++static void build_dir_line(struct vsf_session* p_sess,
++ struct mystr* p_str,
+ const struct mystr* p_filename_str,
+ const struct vsf_sysutil_statbuf* p_stat);
+
+ void
+-vsf_ls_populate_dir_list(struct mystr_list* p_list,
++vsf_ls_populate_dir_list(struct vsf_session* p_sess,
++ struct mystr_list* p_list,
+ struct mystr_list* p_subdir_list,
+ struct vsf_sysutil_dir* p_dir,
+ const struct mystr* p_base_dir_str,
+@@ -157,7 +160,7 @@
+ {
+ str_append_char(&s_final_file_str, '/');
+ }
+- build_dir_line(&dirline_str, &s_final_file_str, s_p_statbuf);
++ build_dir_line(p_sess, &dirline_str, &s_final_file_str, s_p_statbuf);
+ }
+ else
+ {
+@@ -176,6 +179,7 @@
+ str_append_char(&dirline_str, '@');
+ }
+ }
++ vsf_charconv_convert(p_sess, &dirline_str, VSFTP_CONVDIRECT_FORWARD);
+ str_append_text(&dirline_str, "\r\n");
+ }
+ /* Add filename into our sorted list - sorting by filename or time. Also,
+@@ -357,7 +361,7 @@
+ }
+
+ static void
+-build_dir_line(struct mystr* p_str, const struct mystr* p_filename_str,
++build_dir_line(struct vsf_session* p_sess, struct mystr* p_str, const struct mystr* p_filename_str,
+ const struct vsf_sysutil_statbuf* p_stat)
+ {
+ static struct mystr s_tmp_str;
+@@ -431,6 +435,7 @@
+ str_append_char(p_str, ' ');
+ /* Filename */
+ str_append_str(p_str, p_filename_str);
++ vsf_charconv_convert(p_sess, p_str, VSFTP_CONVDIRECT_FORWARD);
+ str_append_text(p_str, "\r\n");
+ }
+
+diff -urN vsftpd-2.0.5.org/ls.h vsftpd-2.0.5/ls.h
+--- vsftpd-2.0.5.org/ls.h 2003-09-15 13:43:40.000000000 +0300
++++ vsftpd-2.0.5/ls.h 2008-01-13 19:32:30.000000000 +0200
+@@ -4,12 +4,14 @@
+ struct mystr;
+ struct mystr_list;
+ struct vsf_sysutil_dir;
++struct vsf_session;
+
+ /* vsf_ls_populate_dir_list()
+ * PURPOSE
+ * Given a directory handle, populate a formatted directory entry list (/bin/ls
+ * format). Also optionally populate a list of subdirectories.
+ * PARAMETERS
++ * p_sess - the current FTP session object
+ * p_list - the string list object for the result list of entries
+ * p_subdir_list - the string list object for the result list of
+ * subdirectories. May be 0 if client is not interested.
+@@ -19,7 +21,8 @@
+ * p_filter_str - the filter string given to LIST/NLST - e.g. "*.mp3"
+ * is_verbose - set to 1 for LIST, 0 for NLST
+ */
+-void vsf_ls_populate_dir_list(struct mystr_list* p_list,
++void vsf_ls_populate_dir_list(struct vsf_session* p_sess,
++ struct mystr_list* p_list,
+ struct mystr_list* p_subdir_list,
+ struct vsf_sysutil_dir* p_dir,
+ const struct mystr* p_base_dir_str,
+diff -urN vsftpd-2.0.5.org/main.c vsftpd-2.0.5/main.c
+--- vsftpd-2.0.5.org/main.c 2006-07-03 15:26:08.000000000 +0300
++++ vsftpd-2.0.5/main.c 2008-01-13 20:51:11.000000000 +0200
+@@ -63,7 +63,9 @@
+ /* Secure connection state */
+ 0, 0, 0, 0, 0, 0, -1, -1,
+ /* Login fails */
+- 0
++ 0,
++ /* Filename charset conv */
++ 0, 0,
+ };
+ int config_specified = 0;
+ const char* p_config_name = VSFTP_DEFAULT_CONFIG;
+@@ -106,6 +108,12 @@
+ }
+ vsf_sysutil_free(p_statbuf);
+ }
++ /* Init local codepage */
++ if (tunable_convert_charset_enable)
++ {
++ tunable_local_codepage = vsf_charconv_codepage(tunable_local_charset);
++ tunable_convert_charset_enable = (tunable_local_codepage) ? 1 : 0;
++ }
+ /* Resolve pasv_address if required */
+ if (tunable_pasv_address && tunable_pasv_addr_resolve)
+ {
+diff -urN vsftpd-2.0.5.org/Makefile vsftpd-2.0.5/Makefile
+--- vsftpd-2.0.5.org/Makefile 2006-07-03 15:25:41.000000000 +0300
++++ vsftpd-2.0.5/Makefile 2008-01-13 19:39:58.000000000 +0200
+@@ -14,7 +14,7 @@
+ banner.o filestr.o parseconf.o secutil.o \
+ ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o \
+ tcpwrap.o ipaddrparse.o access.o features.o readwrite.o \
+- ssl.o sysutil.o sysdeputil.o
++ ssl.o sysutil.o sysdeputil.o charconv.o
+
+
+ .c.o:
+diff -urN vsftpd-2.0.5.org/parseconf.c vsftpd-2.0.5/parseconf.c
+--- vsftpd-2.0.5.org/parseconf.c 2006-07-02 02:05:10.000000000 +0300
++++ vsftpd-2.0.5/parseconf.c 2008-01-13 20:21:57.000000000 +0200
+@@ -99,6 +99,7 @@
+ { "mdtm_write", &tunable_mdtm_write },
+ { "lock_upload_files", &tunable_lock_upload_files },
+ { "pasv_addr_resolve", &tunable_pasv_addr_resolve },
++ { "convert_charset_enable", &tunable_convert_charset_enable },
+ { 0, 0 }
+ };
+
+@@ -168,6 +169,8 @@
+ { "ssl_ciphers", &tunable_ssl_ciphers },
+ { "rsa_private_key_file", &tunable_rsa_private_key_file },
+ { "dsa_private_key_file", &tunable_dsa_private_key_file },
++ { "local_charset", &tunable_local_charset },
++ { "remote_charset", &tunable_remote_charset },
+ { 0, 0 }
+ };
+
+diff -urN vsftpd-2.0.5.org/postlogin.c vsftpd-2.0.5/postlogin.c
+--- vsftpd-2.0.5.org/postlogin.c 2006-06-12 01:45:25.000000000 +0300
++++ vsftpd-2.0.5/postlogin.c 2008-01-13 20:58:37.000000000 +0200
+@@ -25,6 +25,7 @@
+ #include "access.h"
+ #include "features.h"
+ #include "ssl.h"
++#include "charconv.h"
+ #include "vsftpver.h"
+
+ /* Private local functions */
+@@ -98,6 +99,17 @@
+ /* Handle any login message */
+ vsf_banner_dir_changed(p_sess, FTP_LOGINOK);
+ vsf_cmdio_write(p_sess, FTP_LOGINOK, "Login successful.");
++ if (tunable_convert_charset_enable)
++ {
++ vsf_charconv_init_local_codepage(tunable_local_codepage);
++ tunable_remote_codepage = vsf_charconv_codepage(tunable_remote_charset);
++ p_sess->remote_charset = tunable_remote_codepage;
++ p_sess->enable_conversion = vsf_charconv_avail_convertion(tunable_local_codepage, p_sess->remote_charset);
++ }
++ else
++ {
++ p_sess->enable_conversion = 0;
++ }
+ while(1)
+ {
+ int cmd_ok = 1;
+diff -urN vsftpd-2.0.5.org/session.h vsftpd-2.0.5/session.h
+--- vsftpd-2.0.5.org/session.h 2006-07-02 03:34:48.000000000 +0300
++++ vsftpd-2.0.5/session.h 2008-01-13 20:39:41.000000000 +0200
+@@ -91,6 +91,10 @@
+ int ssl_slave_fd;
+ int ssl_consumer_fd;
+ unsigned int login_fails;
++
++ /* Filename charset conv */
++ int enable_conversion;
++ int remote_charset;
+ };
+
+ #endif /* VSF_SESSION_H */
+diff -urN vsftpd-2.0.5.org/tunables.c vsftpd-2.0.5/tunables.c
+--- vsftpd-2.0.5.org/tunables.c 2006-07-02 02:06:56.000000000 +0300
++++ vsftpd-2.0.5/tunables.c 2008-01-13 20:24:57.000000000 +0200
+@@ -71,6 +71,9 @@
+ int tunable_mdtm_write = 1;
+ int tunable_lock_upload_files = 1;
+ int tunable_pasv_addr_resolve = 0;
++int tunable_convert_charset_enable = 0;
++int tunable_local_codepage = 0;
++int tunable_remote_codepage = 0;
+
+ unsigned int tunable_accept_timeout = 60;
+ unsigned int tunable_connect_timeout = 60;
+@@ -125,4 +128,6 @@
+ const char* tunable_ssl_ciphers = "DES-CBC3-SHA";
+ const char* tunable_rsa_private_key_file = 0;
+ const char* tunable_dsa_private_key_file = 0;
++const char* tunable_local_charset = "NONE";
++const char* tunable_remote_charset = "NONE";
+
+diff -urN vsftpd-2.0.5.org/tunables.h vsftpd-2.0.5/tunables.h
+--- vsftpd-2.0.5.org/tunables.h 2006-07-02 02:07:00.000000000 +0300
++++ vsftpd-2.0.5/tunables.h 2008-01-13 20:28:11.000000000 +0200
+@@ -67,6 +67,9 @@
+ extern int tunable_mdtm_write; /* Allow MDTM to set timestamps */
+ extern int tunable_lock_upload_files; /* Lock uploading files */
+ extern int tunable_pasv_addr_resolve; /* DNS resolve pasv_addr */
++extern int tunable_convert_charset_enable; /* Allow converting charsets for file names */
++extern int tunable_local_codepage; /* Code of local charset */
++extern int tunable_remote_codepage; /* Code of remote charset */
+
+ /* Integer/numeric defines */
+ extern unsigned int tunable_accept_timeout;
+@@ -120,6 +123,8 @@
+ extern const char* tunable_ssl_ciphers;
+ extern const char* tunable_rsa_private_key_file;
+ extern const char* tunable_dsa_private_key_file;
++extern const char* tunable_local_charset;
++extern const char* tunable_remote_charset;
+
+ #endif /* VSF_TUNABLES_H */
+
diff --git a/packages/vsftpd/vsftpd-charconv_2.0.5.bb b/packages/vsftpd/vsftpd-charconv_2.0.5.bb
new file mode 100644
index 0000000000..cc559c6259
--- /dev/null
+++ b/packages/vsftpd/vsftpd-charconv_2.0.5.bb
@@ -0,0 +1,50 @@
+DESCRIPTION = "Secure ftp daemon with filename charconv"
+SECTION = "console/network"
+LICENSE = "GPL"
+PR = "r1"
+
+FILESPATH_append = ":${@os.path.dirname(bb.data.getVar('FILE',d,1))}/vsftpd-2.0.5"
+
+SRC_URI = "ftp://vsftpd.beasts.org/users/cevans/vsftpd-${PV}.tar.gz \
+ file://vsftpd-charconv.patch;patch=1 \
+ file://makefile.patch;patch=1 \
+ file://nopam.patch;patch=1 \
+ file://syscall.patch;patch=1 \
+ file://init \
+ file://vsftpd.conf"
+
+S = "${WORKDIR}/vsftpd-2.0.5"
+
+inherit update-rc.d
+
+do_configure() {
+ # Fix hardcoded /usr, /etc, /var mess.
+ cat tunables.c|sed s:\"/usr:\"${prefix}:g|sed s:\"/var:\"${localstatedir}:g \
+ |sed s:\"${prefix}/share/empty:\"${localstatedir}/share/empty:g |sed s:\"/etc:\"${sysconfdir}:g > tunables.c.new
+ mv tunables.c.new tunables.c
+}
+
+do_compile() {
+ oe_runmake "LIBS=-lcrypt -L${STAGING_LIBDIR}"
+}
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -d ${D}${mandir}/man8
+ install -d ${D}${mandir}/man5
+ oe_runmake 'DESTDIR=${D}' install
+ install -d ${D}${sysconfdir}
+ install -m 0755 ${WORKDIR}/vsftpd.conf ${D}${sysconfdir}/vsftpd.conf
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/vsftpd
+}
+
+pkg_postinst() {
+ addgroup ftp
+ adduser --system --home /var/tmp/ftp --no-create-home --ingroup ftp --disabled-password -s /bin/false ftp
+ mkdir -p ${localstatedir}/share/empty
+}
+
+INITSCRIPT_NAME = "vsftpd"
+
+INITSCRIPT_PARAMS = "defaults"
diff --git a/packages/vte/vte.inc b/packages/vte/vte.inc
new file mode 100644
index 0000000000..e575a5a3fb
--- /dev/null
+++ b/packages/vte/vte.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "vte is a virtual terminal emulator"
+LICENSE = "LGPL"
+DEPENDS += " glib-2.0 gtk+"
+RDEPENDS = "termcap"
+
+inherit gnome
+
+EXTRA_OECONF = "--disable-gtk-doc"
+
+do_stage() {
+ autotools_stage_all
+}
+
+PACKAGES =+ "libvte"
+FILES_libvte = "${libdir}/*.so*"
diff --git a/packages/vte/vte_0.16.8.bb b/packages/vte/vte_0.16.8.bb
index 57a3aca74d..f408632430 100644
--- a/packages/vte/vte_0.16.8.bb
+++ b/packages/vte/vte_0.16.8.bb
@@ -1,16 +1,2 @@
-DESCRIPTION = "vte is a virtual terminal emulator"
-LICENSE = "LGPL"
-DEPENDS += " glib-2.0 gtk+"
-RDEPENDS = "termcap"
+require vte.inc
PR = "r3"
-
-inherit gnome
-
-EXTRA_OECONF = "--disable-gtk-doc"
-
-do_stage() {
- autotools_stage_all
-}
-
-PACKAGES =+ "libvte"
-FILES_libvte = "${libdir}/*.so*"
diff --git a/packages/vte/vte_0.16.9.bb b/packages/vte/vte_0.16.9.bb
new file mode 100644
index 0000000000..f408632430
--- /dev/null
+++ b/packages/vte/vte_0.16.9.bb
@@ -0,0 +1,2 @@
+require vte.inc
+PR = "r3"
diff --git a/packages/webkit/files/GNUmakefile.am b/packages/webkit/files/GNUmakefile.am
new file mode 100644
index 0000000000..f3ec252ee8
--- /dev/null
+++ b/packages/webkit/files/GNUmakefile.am
@@ -0,0 +1,314 @@
+# Top-level Makefile rule for automake
+#
+# Variable conventions:
+#
+# _h_api = API headers that will be installed and included in the distribution
+# _cppflags = flags that will be passed to the C/CXX Preprocessor
+# _sources = sources that will be compiled and included in the distribution
+# _headers = header files that will be part of the distribution
+# _built_sources = files that will be autogenerated by the build system and
+# will be part of the _SOURCES primary
+# _built_nosources = files that are autogenerated but are not part of the
+# _SOURCES primary
+# _cleanfiles = files that will be removed by the clean target
+#
+# Sources, headers, flags, etc... should be added to the respective variables
+# with the above suffix, e.g, webcore-specific sources should go to
+# webcore_sources, gtk port-specific flags should go to webkitgtk_cppflags,
+# etc... The only exceptions are the global variables. See Global Variables below.
+#
+# Global Variables
+#
+# global_cppflags = CPPFLAGS that apply to JSC, WebCore, and to any
+# specific port
+# global_cflags = CFLAGS and CXXFLAGS that apply to JSC, WebCore, and to
+# any specific port
+
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+# Directory for autogenerated sources
+GENSOURCES := $(top_builddir)/DerivedSources
+
+# Script for creating hash tables
+CREATE_HASH_TABLE = $(srcdir)/JavaScriptCore/kjs/create_hash_table
+
+# Libraries and support components
+noinst_LTLIBRARIES :=
+
+noinst_HEADERS :=
+
+noinst_PROGRAMS :=
+
+lib_LIBRARIES :=
+
+IDL_BINDINGS :=
+
+# Files that will be distributed
+EXTRA_DIST :=
+
+#
+# Global flags to CPP
+global_cppflags :=
+
+global_cppflags += \
+ -I $(srcdir)/JavaScriptCore \
+ -I $(srcdir)/JavaScriptCore/ForwardingHeaders \
+ -I $(srcdir)/JavaScriptCore/wtf \
+ -I $(srcdir)/JavaScriptCore/kjs \
+ -I $(top_builddir)/DerivedSources
+
+# Default compiler flags
+global_cflags := \
+ -Wall -W -Wcast-align -Wchar-subscripts -Wreturn-type \
+ -Wformat -Wformat-security -Wno-format-y2k -Wundef \
+ -Wmissing-format-attribute -Wpointer-arith -Wwrite-strings \
+ -Wno-unused-parameter -fno-exceptions -fno-strict-aliasing
+
+# Libraries
+lib_LTLIBRARIES = libJavaScriptCore.la libWebKitGtk.la
+
+#
+# JavaScriptCore
+javascriptcore_h_api :=
+javascriptcore_cppflags:=
+javascriptcore_sources :=
+javascriptcore_built_sources :=
+javascriptcore_built_nosources :=
+
+# The variables above are already included below so no need to touch
+# these variables unless you really have to
+libJavaScriptCore_ladir = $(prefix)/include/WebKit/JavaScriptCore
+libJavaScriptCore_la_HEADERS := $(javascriptcore_h_api)
+
+libJavaScriptCore_la_SOURCES := \
+ $(javascriptcore_built_sources) \
+ $(javascriptcore_sources)
+
+libJavaScriptCore_la_LDFLAGS := -lpthread
+
+libJavaScriptCore_la_CXXFLAGS := $(global_cflags)
+
+libJavaScriptCore_la_CFLAGS := $(global_cflags)
+
+libJavaScriptCore_la_CPPFLAGS := $(global_cppflags) $(javascriptcore_cppflags)
+
+#
+# WebCore
+webcore_cppflags :=
+webcore_sources :=
+webcore_headers :=
+webcore_built_sources :=
+webcore_built_nosources :=
+
+# WebKitGtk
+webkitgtk_h_api :=
+webkitgtk_headers :=
+webkitgtk_sources :=
+webkitgtk_cppflags :=
+webkitgtk_ldflags :=
+webkitgtk_built_sources :=
+webkitgtk_built_nosources :=
+webkitgtk_cleanfiles :=
+
+# No need to touch the following variables unless you have to. If you need to change the values
+# for the following variables, use the "webkitgtk_" variables above
+libWebKitGtk_ladir := $(prefix)/include/WebKit
+
+libWebKitGtk_la_HEADERS := $(webkitgtk_h_api)
+
+libWebKitGtk_la_SOURCES := \
+ $(webcore_built_sources) \
+ $(webcore_headers) \
+ $(webcore_sources) \
+ $(webkitgtk_built_sources) \
+ $(webkitgtk_headers) \
+ $(webkitgtk_sources)
+
+libWebKitGtk_la_CXXFLAGS := \
+ -fno-rtti \
+ $(global_cflags) \
+ $(DEPENDENCIES_CFLAGS) \
+ $(SQLITE3_CFLAGS) \
+ $(GSTREAMER_CFLAGS) \
+ $(LIBXSLT_CFLAGS) \
+ $(COVERAGE_CFLAGS)
+
+libWebKitGtk_la_CFLAGS := \
+ $(global_cflags) \
+ $(DEPENDENCIES_CFLAGS) \
+ $(SQLITE3_CFLAGS) \
+ $(GSTREAMER_CFLAGS) \
+ $(LIBXSLT_CFLAGS) \
+ $(COVERAGE_CFLAGS)
+
+libWebKitGtk_la_CPPFLAGS := \
+ $(global_cppflags) \
+ $(webcore_cppflags) \
+ $(webkitgtk_cppflags)
+
+libWebKitGtk_la_LIBADD := @LTLIBOBJS@ libJavaScriptCore.la
+
+libWebKitGtk_la_LDFLAGS := \
+ $(webkitgtk_ldflags) \
+ $(DEPENDENCIES_LIBS) \
+ $(ICU_LIBS) \
+ $(SQLITE3_LIBS) \
+ $(GSTREAMER_LIBS) \
+ $(LIBXSLT_LIBS) \
+ $(COVERAGE_LDFLAGS) \
+ -lpthread \
+ -ljpeg \
+ -version-info @LIBWEBKITGTK_VERSION@
+
+#
+# Extra checks and flags
+global_cppflags += \
+ -DBUILDING_GTK__=1 \
+ -DUSE_SYSTEM_MALLOC \
+ -DWTF_CHANGES
+
+if TARGET_X11
+global_cppflags += -DXP_UNIX
+endif
+
+if !ENABLE_DEBUG
+global_cppflags += -DNDEBUG
+else
+webkitgtk_cppflags += \
+ -DG_DISABLE_DEPRECATED \
+ -DGDK_PIXBUF_DISABLE_DEPRECATED \
+ -DGDK_DISABLE_DEPRECATED \
+ -DGTK_DISABLE_DEPRECATED \
+ -DPANGO_DISABLE_DEPRECATED \
+ -DGDK_MULTIHEAD_SAFE \
+ -DGTK_MULTIHEAD_SAFE
+endif
+
+if !ENABLE_DATABASE
+global_cppflags += -DENABLE_DATABASE=0
+endif
+
+if !ENABLE_ICONDATABASE
+global_cppflags += -DENABLE_ICONDATABASE=0
+endif
+
+if ENABLE_COVERAGE
+global_cppflags += \
+ -DGCC_GENERATE_TEST_COVERAGE_FILES \
+ -DGCC_INSTRUMENT_PROGRAM_FLOW_ARCS
+endif
+
+if ENABLE_VIDEO
+webkitgtk_ldflags += -lgstinterfaces-0.10 -lgstvideo-0.10
+endif
+
+#
+# WEBKIT GTK+
+webkitgtk_cppflags += \
+-I $(top_builddir)/WebKit/gtk/WebView \
+-DBUILDING_CAIRO__=1 \
+-DBUILD_WEBKIT
+
+webkitgtk_h_api += \
+ WebKit/gtk/WebView/webkit.h \
+ WebKit/gtk/WebView/webkitdefines.h \
+ WebKit/gtk/WebView/webkitnetworkrequest.h \
+ WebKit/gtk/WebView/webkitwebframe.h \
+ WebKit/gtk/WebView/webkitwebview.h
+
+webkitgtk_built_sources += \
+ WebKit/gtk/WebView/webkit-marshal.h \
+ WebKit/gtk/WebView/webkit-marshal.cpp
+
+webkitgtk_headers += \
+ WebKit/gtk/WebView/webkitprivate.h \
+ WebKit/gtk/WebView/webkitsettings.h \
+ WebKit/gtk/WebCoreSupport/ChromeClientGtk.h \
+ WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.h \
+ WebKit/gtk/WebCoreSupport/DragClientGtk.h \
+ WebKit/gtk/WebCoreSupport/EditorClientGtk.h \
+ WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h \
+ WebKit/gtk/WebCoreSupport/InspectorClientGtk.h \
+ WebKit/gtk/WebCoreSupport/PasteboardHelperGtk.h
+
+webkitgtk_sources += \
+ WebKit/gtk/WebView/webkitnetworkrequest.cpp \
+ WebKit/gtk/WebView/webkitprivate.cpp \
+ WebKit/gtk/WebView/webkitsettings.cpp \
+ WebKit/gtk/WebView/webkitwebframe.cpp \
+ WebKit/gtk/WebView/webkitwebview.cpp \
+ WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp \
+ WebKit/gtk/WebCoreSupport/ContextMenuClientGtk.cpp \
+ WebKit/gtk/WebCoreSupport/DragClientGtk.cpp \
+ WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp \
+ WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp \
+ WebKit/gtk/WebCoreSupport/InspectorClientGtk.cpp \
+ WebKit/gtk/WebCoreSupport/PasteboardHelperGtk.cpp
+
+webkitgtk_cleanfiles += \
+ $(top_builddir)/Programs/GtkLauncher \
+ $(top_builddir)/WebKit/gtk/WebKitGtk.pc
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = WebKit/gtk/WebKitGtk.pc
+
+WEBKIT_MARSHAL = $(CURDIR)/WebKit/gtk/WebView/webkit-marshal
+WEBKIT_MARSHAL_LIST = $(srcdir)/WebKit/gtk/WebView/webkit-marshal.list
+
+stamp_files := \
+ stamp-webkit-marshal.cpp \
+ stamp-webkit-marshal.h
+
+WebKit/gtk/WebView/webkit-marshal.cpp: stamp-webkit-marshal.cpp
+ @true
+
+WebKit/gtk/WebView/webkit-marshal.h: stamp-webkit-marshal.h
+ @true
+
+stamp-webkit-marshal.cpp: $(WEBKIT_MARSHAL_LIST)
+ echo "extern \"C\" {" > $(WEBKIT_MARSHAL).cpp && \
+ $(GLIB_GENMARSHAL) --prefix=webkit_marshal $(WEBKIT_MARSHAL_LIST) --body >> $(WEBKIT_MARSHAL).cpp && echo '}' >> $(WEBKIT_MARSHAL).cpp && \
+ echo timestamp > $(@F)
+
+stamp-webkit-marshal.h: $(WEBKIT_MARSHAL_LIST)
+ $(GLIB_GENMARSHAL) --prefix=webkit_marshal $(WEBKIT_MARSHAL_LIST) --header > $(WEBKIT_MARSHAL).h && \
+ echo timestamp > $(@F)
+
+# END WEBKIT GTK+
+
+# Files that will be cleaned
+MAINTAINERCLEANFILES := $(stamp_files) $(BUILT_SOURCES)
+DISTCLEANFILES := $(stamp_files) $(BUILT_SOURCES)
+CLEANFILES := $(stamp_files) $(BUILT_SOURCES)
+
+# Include module makefiles
+include JavaScriptCore/GNUmakefile.am
+include WebCore/GNUmakefile.am
+include WebKitTools/GNUmakefile.am
+
+
+# Autogenerated sources
+BUILT_SOURCES := \
+ $(javascriptcore_built_sources) \
+ $(javascriptcore_built_nosources) \
+ $(webcore_built_sources) \
+ $(webcore_built_nosources) \
+ $(webkitgtk_built_sources) \
+ $(webkitgtk_built_nosources)
+
+# Project-wide clean rules
+CLEANFILES += \
+ $(webkitgtk_cleanfiles) \
+ $(top_builddir)/Programs/DumpRenderTree \
+ $(top_builddir)/Programs/testkjs \
+ $(top_builddir)/Programs/dftables \
+ $(GENSOURCES)
+
+MAINTAINERCLEANFILES += \
+ $(srcdir)/aconfig.h.in \
+ configure \
+ config.* \
+ GNUmakefile.in \
+ INSTALL \
+ README
diff --git a/packages/webkit/files/WebKit.pri b/packages/webkit/files/WebKit.pri
index 0c47afe7fd..640fa34174 100644
--- a/packages/webkit/files/WebKit.pri
+++ b/packages/webkit/files/WebKit.pri
@@ -11,12 +11,47 @@ qt-port:DEFINES += BUILDING_QT__=1
qt-port:!building-libs {
QMAKE_LIBDIR = $$OUTPUT_DIR/lib $$QMAKE_LIBDIR
LIBS += -lQtWebKit
+ DEPENDPATH += $$PWD/WebKit/qt/Api
+}
+
+gtk-port:!building-libs {
+ QMAKE_LIBDIR = $$OUTPUT_DIR/lib $$QMAKE_LIBDIR
+ LIBS += -lWebKitGtk
+ DEPENDPATH += $$PWD/WebKit/gtk/WebView $$PWD/WebKit/gtk/WebCoreSupport
+}
+
+gtk-port {
+ CONFIG += link_pkgconfig
+
+ DEFINES += BUILDING_CAIRO__=1 BUILDING_GTK__=1
+
+ # We use FreeType directly with Cairo
+ PKGCONFIG += cairo-ft
+
+ directfb: PKGCONFIG += cairo-directfb gtk+-directfb-2.0
+ else: PKGCONFIG += cairo gtk+-2.0
+
+ # Set a CONFIG flag for the GTK+ target (x11, quartz, win32, directfb)
+ CONFIG += $$system(pkg-config --variable=target $$PKGCONFIG)
+
+ # We use the curl http backend on all platforms
+ PKGCONFIG += libcurl
+
+ LIBS += -lWebKitGtk -ljpeg -lpng
+
+ QMAKE_CXXFLAGS += $$system(icu-config --cppflags)
+ QMAKE_LIBS += $$system(icu-config --ldflags)
+
+ # This set of warnings is borrowed from the Mac build
+ QMAKE_CXXFLAGS += -Wall -W -Wcast-align -Wchar-subscripts -Wformat-security -Wmissing-format-attribute -Wpointer-arith -Wwrite-strings -Wno-format-y2k -Wno-unused-parameter -Wundef
+
+ # These flags are based on optimization experience from the Mac port:
+ # Helps code size significantly and speed a little
+ QMAKE_CXXFLAGS += -fno-exceptions -fno-rtti
+
+ DEPENDPATH += $$PWD/JavaScriptCore/API
+ INCLUDEPATH += $$PWD
}
-gtk-port:CONFIG += link_pkgconfig
-gtk-port:PKGCONFIG += cairo cairo-ft gdk-2.0 gtk+-2.0 libcurl
-gtk-port:DEFINES += BUILDING_GTK__=1 BUILDING_CAIRO__
-gtk-port:LIBS += -L$$OUTPUT_DIR/lib -lWebKitGtk $$system(icu-config --ldflags) -ljpeg -lpng
-gtk-port:QMAKE_CXXFLAGS += $$system(icu-config --cppflags)
DEFINES += USE_SYSTEM_MALLOC
CONFIG(release) {
@@ -32,7 +67,7 @@ gtk-port:INCLUDEPATH += \
$$BASE_DIR/WebCore/platform/graphics/cairo \
$$BASE_DIR/WebCore/loader/gtk \
$$BASE_DIR/WebCore/page/gtk \
- $$BASE_DIR/WebKit/gtk/Api \
+ $$BASE_DIR/WebKit/gtk/WebView \
$$BASE_DIR/WebKit/gtk/WebCoreSupport
INCLUDEPATH += \
$$BASE_DIR/JavaScriptCore/ \
diff --git a/packages/webkit/files/WebKit.pro b/packages/webkit/files/WebKit.pro
index aab0209a93..027017bd8d 100644
--- a/packages/webkit/files/WebKit.pro
+++ b/packages/webkit/files/WebKit.pro
@@ -3,9 +3,15 @@ CONFIG += ordered
!gtk-port:CONFIG += qt-port
qt-port:!win32-*:SUBDIRS += WebKit/qt/Plugins
SUBDIRS += \
- WebCore
+ WebCore \
+ JavaScriptCore/kjs/testkjs.pro
+
+qt-port {
+ SUBDIRS += WebKit/qt/QtLauncher
+
+ !win32-*: SUBDIRS += WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro
+}
-qt-port:SUBDIRS += \
- WebKit/qt/QtLauncher
gtk-port:SUBDIRS += \
- WebKitTools/GtkLauncher
+ WebKitTools/GtkLauncher \
+ WebKitTools/DumpRenderTree/gtk/DumpRenderTree.pro
diff --git a/packages/webkit/files/autogen.sh b/packages/webkit/files/autogen.sh
new file mode 100644
index 0000000000..b7f7d37b2f
--- /dev/null
+++ b/packages/webkit/files/autogen.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+cd $srcdir
+
+DIE=0
+
+(autoconf --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "You must have autoconf installed to compile $PROJECT."
+ echo "Install the appropriate package for your distribution,"
+ echo "or get the source tarball at http://ftp.gnu.org/gnu/autoconf/"
+ DIE=1
+}
+
+(automake --version) < /dev/null > /dev/null 2>&1 || {
+ echo
+ echo "You must have automake installed to compile $PROJECT."
+ echo "Install the appropriate package for your distribution,"
+ echo "or get the source tarball at http://ftp.gnu.org/gnu/automake/"
+ DIE=1
+}
+
+if test "$DIE" -eq 1; then
+ exit 1
+fi
+
+rm -rf $top_srcdir/autom4te.cache
+
+touch README INSTALL
+
+aclocal || exit $?
+libtoolize --force || exit $?
+autoheader || exit $?
+automake --foreign --add-missing || exit $?
+autoconf || exit $?
+
+./configure $AUTOGEN_CONFIGURE_ARGS "$@" || exit $?
diff --git a/packages/webkit/files/configure.ac b/packages/webkit/files/configure.ac
new file mode 100644
index 0000000000..05c25b94a8
--- /dev/null
+++ b/packages/webkit/files/configure.ac
@@ -0,0 +1,384 @@
+AC_INIT([WebKit],[0.1],[http://bugs.webkit.org/])
+
+AC_PREREQ(2.59)
+
+AC_CONFIG_HEADERS([aconfig.h])
+AC_CONFIG_SRCDIR([WebCore/config.h])
+
+# see http://www.gnu.org/software/libtool/manual.html#Versioning
+LIBWEBKITGTK_VERSION=1:0:0
+AC_SUBST([LIBWEBKITGTK_VERSION])
+
+AM_INIT_AUTOMAKE([1.9 foreign tar-ustar subdir-objects])
+
+AM_MAINTAINER_MODE
+
+AC_CANONICAL_HOST
+
+# host checking - inspired by the GTK+ configure.in
+# TODO: os_mac, os_bsd
+AC_MSG_CHECKING([for native Win32])
+case "$host" in
+ *-*-mingw*)
+ os_win32=yes
+ ;;
+ *)
+ os_win32=no
+ ;;
+esac
+AC_MSG_RESULT([$os_win32])
+
+case "$host" in
+ *-*-linux*)
+ os_linux=yes
+ ;;
+ *-*-freebsd*)
+ os_freebsd=yes
+ ;;
+esac
+
+# If CXXFLAGS and CFLAGS are unset, default to -O2
+# This is to tell automake not to include '-g' if CXXFLAGS is not set
+# For more info - http://www.gnu.org/software/automake/manual/autoconf.html#C_002b_002b-Compiler
+if test -z "$CXXFLAGS"; then
+ CXXFLAGS="-O2"
+fi
+if test -z "$CFLAGS"; then
+ CFLAGS="-O2"
+fi
+
+# programs
+AC_DISABLE_STATIC
+AM_PROG_LIBTOOL
+AC_PROG_INSTALL
+AM_PROG_CC_STDC
+AC_PROG_CXX
+AC_PROG_CXX_C_O
+AM_PROG_CC_C_O
+
+AC_PATH_PROG(PERL, perl)
+if test -z "$PERL"; then
+ AC_MSG_ERROR([You need 'perl' to compile WebKit])
+fi
+
+AC_PATH_PROG(BISON, bison)
+if test -z "$BISON"; then
+ AC_MSG_ERROR([You need the 'bison' parser generator to compile WebKit])
+fi
+
+AC_PATH_PROG(FLEX, flex)
+if test -z "$FLEX"; then
+ AC_MSG_ERROR([You need the 'flex' lexer generator to compile WebKit])
+fi
+
+AC_PATH_PROG(GPERF, gperf)
+if test -z "$GPERF"; then
+ AC_MSG_ERROR([You need the 'gperf' hash function generator to compile WebKit])
+fi
+
+AC_PATH_PROG(MV, mv)
+if test -z "$MV"; then
+ AC_MSG_ERROR([You need 'mv' to compile WebKit])
+fi
+
+# GTK+ port only
+# Check for glib-genmarshal and glib-mkenums
+AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal])
+AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
+
+# Check whether a C++ was found (AC_PROG_CXX sets $CXX to "g++" even when it
+# doesn't exist)
+AC_LANG_PUSH([C++])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],[],[AC_MSG_ERROR([No C++ compiler found])])
+AC_LANG_POP([C++])
+
+# C/C++ Language Features
+AC_C_CONST
+AC_C_INLINE
+AC_C_VOLATILE
+
+# C/C++ Headers
+AC_HEADER_STDC
+AC_HEADER_STDBOOL
+
+# pthread
+AC_CHECK_HEADERS([pthread.h],
+ AC_DEFINE([HAVE_PTHREAD_H],[1],[Define if pthread exist]),
+ AC_MSG_ERROR([pthread support is required to build WebKit]))
+
+# libjpeg headers
+AC_CHECK_HEADERS([jpeglib.h])
+
+# check for pkg-config
+AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+if test "$PKG_CONFIG" = "no"; then
+ AC_MSG_ERROR([Cannot find pkg-config, make sure it is installed in your PATH])
+fi
+
+# check for icu-config
+AC_PATH_PROG(icu_config, icu-config, no)
+if test "$icu_config" = "no"; then
+ AC_MSG_ERROR([Cannot find icu-config. ICU library is needed.])
+fi
+ICU_CFLAGS=`$icu_config --cflags`
+ICU_LIBS=`$icu_config --ldflags`
+AC_SUBST([ICU_CFLAGS])
+AC_SUBST([ICU_LIBS])
+
+# determine the GDK/GTK+ target
+AC_MSG_CHECKING([the target for WebKit GTK+])
+AC_ARG_WITH(webkit_target,
+ AC_HELP_STRING([--with-webkit-target=@<:@x11/win32/quartz/directfb@:>@],
+ [Select webkit target [default=x11]]),
+ [],[with_webkit_target="x11"])
+
+case "$with_webkit_target" in
+ x11|win32|quartz|directfb) ;;
+ *) AC_MSG_ERROR([Invalid target: must be x11, quartz, win32, or directfb.]) ;;
+esac
+
+AC_MSG_RESULT([$with_webkit_target])
+
+# minimum base dependencies
+GLIB_REQUIRED_VERSION=2.0
+GOBJECT_REQUIRED_VERSION=2.0
+GTHREAD_REQUIRED_VERSION=2.0
+PANGO_REQUIRED_VERSION=1.0
+CAIRO_REQUIRED_VERSION=1.2
+FONTCONFIG_REQUIRED_VERSION=2.4
+FREETYPE2_REQUIRED_VERSION=9.0
+LIBCURL_REQUIRED_VERSION=7.15
+LIBXML_REQUIRED_VERSION=2.6
+
+# optional modules
+GTK_REQUIRED_VERSION=2.0
+LIBXSLT_REQUIRED_VERSION=1.1.7
+SQLITE_REQUIRED_VERSION=3.0
+GSTREAMER_REQUIRED_VERSION=0.10
+GNOME_VFS_REQUIRED_VERSION=2.0
+
+PKG_CHECK_MODULES([DEPENDENCIES],
+ [glib-2.0 >= $GLIB_REQUIRED_VERSION
+ gobject-2.0 >= $GOBJECT_REQUIRED_VERSION
+ gthread-2.0 >= $GTHREAD_REQUIRED_VERSION
+ gtk+-2.0 >= $GTK_REQUIRED_VERSION
+ pango >= $PANGO_REQUIRED_VERSION
+ libcurl >= $LIBCURL_REQUIRED_VERSION
+ cairo >= $CAIRO_REQUIRED_VERSION
+ cairo-ft,
+ fontconfig >= $FONTCONFIG_REQUIRED_VERSION
+ freetype2 >= $FREETYPE2_REQUIRED_VERSION
+ libxml-2.0 >= $LIBXML_REQUIRED_VERSION])
+AC_SUBST([DEPENDENCIES_CFLAGS])
+AC_SUBST([DEPENDENCIES_LIBS])
+
+# check whether to build with debugging enabled
+AC_MSG_CHECKING([whether to do a debug build])
+AC_ARG_ENABLE(debug,
+ AC_HELP_STRING([--enable-debug],
+ [turn on debugging [default=no]]),
+ [enable_debug="yes"],[enable_debug="no"])
+AC_MSG_RESULT([$enable_debug])
+
+# check whether to build with database support
+AC_MSG_CHECKING([whether to enable HTML5 client-side storage support])
+AC_ARG_ENABLE(database,
+ AC_HELP_STRING([--enable-database],
+ [enable HTML5 client-side storage support [default=no]]),
+ [],[enable_database="yes"])
+AC_MSG_RESULT([$enable_database])
+
+# check whether to build with icon database support
+AC_MSG_CHECKING([whether to enable icon database support])
+AC_ARG_ENABLE(icon_database,
+ AC_HELP_STRING([--enable-icon-database],
+ [enable icon database [default=no]]),
+ [],[enable_icon_database="no"])
+AC_MSG_RESULT([$enable_icon_database])
+
+# check whether to enable HTML5 audio/video support
+AC_MSG_CHECKING([whether to enable HTML5 video support])
+AC_ARG_ENABLE(video,
+ AC_HELP_STRING([--enable-video],
+ [enable HTML5 video support [default=no]]),
+ [enable_video="yes"],[enable_video="no"])
+AC_MSG_RESULT([$enable_video])
+
+# check whether to enable XPath support
+AC_MSG_CHECKING([whether to enable XPath support])
+AC_ARG_ENABLE(xpath,
+ AC_HELP_STRING([--enable-xpath],
+ [enable support for XPath [default=no]]),
+ [],[enable_xpath="yes"])
+AC_MSG_RESULT([$enable_xpath])
+
+# check whether to enable XSLT support
+AC_MSG_CHECKING([whether to enable XSLT support])
+AC_ARG_ENABLE(xslt,
+ AC_HELP_STRING([--enable-xslt],
+ [enable support for XSLT [default=no]]),
+ [],[enable_xslt="yes"])
+AC_MSG_RESULT([$enable_xslt])
+
+# check whether to enable SVG support
+AC_MSG_CHECKING([whether to enable SVG support])
+AC_ARG_ENABLE(svg,
+ AC_HELP_STRING([--enable-svg],
+ [enable support for SVG [default=no]]),
+ [],[enable_svg="no"])
+AC_MSG_RESULT([$enable_svg])
+
+# check whether to enable support for SVG animation
+AC_MSG_CHECKING([whether to enable support for SVG animataion])
+AC_ARG_ENABLE(svg_animation,
+ AC_HELP_STRING([--enable-svg-animation],
+ [enable support for SVG animation feature (experimental) [default=no]]),
+ [],[enable_svg_animation="no"])
+AC_MSG_RESULT([$enable_svg_animation])
+
+# check whether to enable support for SVG filters
+AC_MSG_CHECKING([whether to enable support for SVG filters])
+AC_ARG_ENABLE(svg_filters,
+ AC_HELP_STRING([--enable-svg-filters],
+ [enable support for SVG filters (experimental) [default=no]]),
+ [],[enable_svg_filters="no"])
+AC_MSG_RESULT([$enable_svg_filters])
+
+# check whether to enable support for SVG fonts
+AC_MSG_CHECKING([whether to enable support for SVG fonts])
+AC_ARG_ENABLE(svg_fonts,
+ AC_HELP_STRING([--enable-svg-fonts],
+ [enable support for SVG fonts (experimental) [default=no]]),
+ [],[enable_svg_fonts="no"])
+AC_MSG_RESULT([$enable_svg_fonts])
+
+# check whether to enable SVG As Image support
+AC_MSG_CHECKING([whether to enable SVG as Image support])
+AC_ARG_ENABLE(svg_as_image,
+ AC_HELP_STRING([--enable-svg-as-image],
+ [enable SVG as Image support (experimental) [default=no]]),
+ [],[enable_svg_as_image="no"])
+AC_MSG_RESULT([$enable_svg_as_image])
+
+# check whether to enable SVG USE element support
+AC_MSG_CHECKING([whether to enable support for SVG use element])
+AC_ARG_ENABLE(svg_use_element,
+ AC_HELP_STRING([--enable-svg-use-element],
+ [enable SVG use element support (experimental) [default=no]]),
+ [],[enable_svg_use_element="no"])
+AC_MSG_RESULT([$enable_svg_use_element])
+
+# check whether to enable code coverage
+AC_MSG_CHECKING([whether to enable code coverage support])
+AC_ARG_ENABLE(coverage,
+ AC_HELP_STRING([--enable-coverage],
+ [enable code coverage support [default=no]]),
+ [],[enable_coverage="no"])
+AC_MSG_RESULT([$enable_coverage])
+
+# Add '-g' flag to gcc if it's debug build
+if test "$enable_debug" = "yes"; then
+ CXXFLAGS="$CXXFLAGS -g"
+ CFLAGS="$CFLAGS -g"
+fi
+
+# check if sqlite 3 is available
+if test "$enable_icon_database" = "yes" || test "$enable_database" = "yes"; then
+ PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= $SQLITE_REQUIRED_VERSION])
+ AC_SUBST([SQLITE3_CFLAGS])
+ AC_SUBST([SQLITE3_LIBS])
+fi
+
+# check if libxslt is available
+if test "$enable_xslt" = "yes"; then
+ PKG_CHECK_MODULES([LIBXSLT],[libxslt >= $LIBXSLT_REQUIRED_VERSION])
+ AC_SUBST([LIBXSLT_CFLAGS])
+ AC_SUBST([LIBXSLT_LIBS])
+fi
+
+# check if gstreamer is available
+if test "$enable_video" = "yes"; then
+ PKG_CHECK_MODULES([GSTREAMER],
+ [gstreamer-0.10 >= $GSTREAMER_REQUIRED_VERSION
+ gstreamer-base-0.10,
+ gstreamer-plugins-base-0.10,
+ gnome-vfs-2.0 >= $GNOME_VFS_REQUIRED_VERSION])
+ AC_SUBST([GSTREAMER_CFLAGS])
+ AC_SUBST([GSTREAMER_LIBS])
+fi
+
+# check for code coverage support
+if test "$enable_coverage" = "yes"; then
+ COVERAGE_CFLAGS="-MD"
+ COVERAGE_LDFLAGS="-ftest-coverage -fprofile-arcs"
+ AC_SUBST([COVERAGE_CFLAGS])
+ AC_SUBST([COVERAGE_LDFLAGS])
+fi
+
+# check for SVG features, enabling SVG if necessary
+if test "$enable_svg" = "no" && (\
+ test "$enable_svg_animation" = "yes" || \
+ test "$enable_svg_filters" = "yes" || \
+ test "$enable_svg_fonts" = "yes" || \
+ test "$enable_svg_as_image" = "yes" || \
+ test "$enable_svg_use_element" = "yes"); then
+
+ AC_MSG_WARN([SVG feature(s) requested but SVG is disabled.. Enabling SVG support])
+ enable_svg = yes
+ svg_flags = yes
+fi
+
+# OS conditionals
+AM_CONDITIONAL([OS_WIN32],[test "$os_win32" = "yes"])
+AM_CONDITIONAL([OS_UNIX],[test "$os_win32" = "no"])
+AM_CONDITIONAL([OS_LINUX],[test "$os_linux" = "yes"])
+AM_CONDITIONAL([OS_FREEBSD],[test "$os_freebsd" = "yes"])
+
+# target conditionals
+AM_CONDITIONAL([TARGET_X11], [test "$with_webkit_target" = "x11"])
+AM_CONDITIONAL([TARGET_WIN32], [test "$with_webkit_target" = "win32"])
+AM_CONDITIONAL([TARGET_QUARTZ], [test "$with_webkit_target" = "quartz"])
+AM_CONDITIONAL([TARGET_DIRECTFB], [test "$with_webkit_target" = "directfb"])
+
+# WebKit feature conditionals
+AM_CONDITIONAL([ENABLE_DEBUG],[test "$enable_debug" = "yes"])
+AM_CONDITIONAL([ENABLE_DATABASE],[test "$enable_database" = "yes"])
+AM_CONDITIONAL([ENABLE_ICONDATABASE],[test "$enable_icon_database" = "yes"])
+AM_CONDITIONAL([ENABLE_XPATH],[test "$enable_xpath" = "yes"])
+AM_CONDITIONAL([ENABLE_XSLT],[test "$enable_xslt" = "yes"])
+AM_CONDITIONAL([ENABLE_VIDEO],[test "$enable_video" = "yes"])
+AM_CONDITIONAL([ENABLE_SVG],[test "$enable_svg" = "yes"])
+AM_CONDITIONAL([ENABLE_SVG_ANIMATION],[test "$enable_svg_animation" = "yes"])
+AM_CONDITIONAL([ENABLE_SVG_FILTERS],[test "$enable_svg_filters" = "yes"])
+AM_CONDITIONAL([ENABLE_SVG_FONTS],[test "$enable_svg_fonts" = "yes"])
+AM_CONDITIONAL([ENABLE_SVG_AS_IMAGE],[test "$enable_svg_as_image" = "yes"])
+AM_CONDITIONAL([ENABLE_SVG_USE],[test "$enable_svg_use_element" = "yes"])
+AM_CONDITIONAL([ENABLE_COVERAGE],[test "$enable_coverage" = "yes"])
+AM_CONDITIONAL([SVG_FLAGS],[test "$svg_flags" = "yes"])
+
+AC_CONFIG_FILES([
+GNUmakefile
+WebKit/gtk/WebKitGtk.pc:WebKit/gtk/WebKitGtk.pc.in
+]
+)
+
+AC_OUTPUT
+
+echo "
+WebKit was configured with the following options:
+
+ Target : $with_webkit_target
+ Enable debug : $enable_debug
+ Code coverage support : $enable_coverage
+ HTML5 client-side storage support : $enable_database
+ HTML5 video element support : $enable_video
+ Icon database support : $enable_icon_database
+ SVG support : $enable_svg
+ SVG animation support : $enable_svg_animation
+ SVG filters support : $enable_svg_filters
+ SVG fonts support : $enable_svg_fonts
+ SVG as image support : $enable_svg_as_image
+ SVG use element support : $enable_svg_use_element
+ XPATH support : $enable_xpath
+ XSLT support : $enable_xslt
+"
diff --git a/packages/webkit/webkit-gtk_svn.bb b/packages/webkit/webkit-gtk_svn.bb
index 262c6820db..6a99a96001 100644
--- a/packages/webkit/webkit-gtk_svn.bb
+++ b/packages/webkit/webkit-gtk_svn.bb
@@ -1,15 +1,23 @@
DEPENDS = "curl icu libxml2 cairo libxslt libidn gnutls gtk+"
+# If you activate HTML5 media support (ENABLE_VIDEO=1) you'll need:
+# DEPENDS += " gstreamer gst-plugins-base gnome-vfs "
+
WEBKIT_PORT = "gtk-port"
WEBKIT_EXTRA_OPTIONS = "CONFIG-=qt"
FILES_webkit-gtklauncher = "${bindir}/GtkLauncher"
-FILES_webkit-gtklauncher-dbg = "${bindir}/.debug/GtkLauncher"
+FILES_webkit-gtklauncher-dbg += "${bindir}/.debug/GtkLauncher"
require webkit.inc
-PR = "r3"
+SRC_URI += "file://autogen.sh \
+ file://configure.ac \
+ file://GNUmakefile.am \
+ "
+
+PR = "r4"
do_install() {
install -d ${D}${bindir}
diff --git a/packages/webkit/webkit-qt.inc b/packages/webkit/webkit-qt.inc
index 1dbf71c010..5522a7cf53 100644
--- a/packages/webkit/webkit-qt.inc
+++ b/packages/webkit/webkit-qt.inc
@@ -2,7 +2,7 @@ WEBKIT_PORT = "qt"
WEBKIT_EXTRA_OPTIONS = ""
FILES_${PN}launcher = "${bindir}/QtLauncher"
-FILES_${PN}launcher-dbg = "${bindir}/.debug/*"
+FILES_${PN}launcher-dbg += "${bindir}/.debug/*"
RDEPENDS += "openssl"
diff --git a/packages/webkit/webkit.inc b/packages/webkit/webkit.inc
index 2ff61091c3..81c2d91bf8 100644
--- a/packages/webkit/webkit.inc
+++ b/packages/webkit/webkit.inc
@@ -34,7 +34,13 @@ do_configure() {
do_compile_prepend() {
mkdir -p ${S}/WebKitBuilds/Debug/JavaScriptCore/pcre/tmp/
cd ${S}/JavaScriptCore/pcre
- ${BUILD_CC} dftables.c -o dftables -I. -I../wtf
+ if test -e dftables.c
+ then
+ ${BUILD_CC} dftables.c -o dftables -I. -I../wtf
+ elif test -e dftables.cpp
+ then
+ ${BUILD_CXX} dftables.cpp -o dftables -I. -I../wtf
+ fi
cp dftables ${S}/WebKitBuilds/Debug/JavaScriptCore/pcre/tmp/
cd ${S}/WebKitBuilds/Debug
}
diff --git a/packages/wifistix/wifistix-modules/sk_buff.patch b/packages/wifistix/wifistix-modules/sk_buff.patch
new file mode 100644
index 0000000000..4ee602f42b
--- /dev/null
+++ b/packages/wifistix/wifistix-modules/sk_buff.patch
@@ -0,0 +1,18 @@
+--- src_cf8385/wlan/wlan_wmm.c 2007-06-22 11:23:39.000000000 -0700
++++ src_cf8385/wlan/wlan_wmm-orig.c 2007-10-28 13:27:46.000000000 -0700
+@@ -701,9 +701,15 @@
+ switch (eth->h_proto)
+ {
+ case __constant_htons(ETH_P_IP):
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
++ PRINTM(INFO, "packet type ETH_P_IP: %04x, tos=%#x prio=%#x\n",
++ eth->h_proto,ip_hdr(skb)->tos,skb->priority);
++ tos = IPTOS_PREC(ip_hdr(skb)->tos) >> IPTOS_OFFSET;
++#else
+ PRINTM(INFO, "packet type ETH_P_IP: %04x, tos=%#x prio=%#x\n",
+ eth->h_proto,skb->nh.iph->tos,skb->priority);
+ tos = IPTOS_PREC(skb->nh.iph->tos) >> IPTOS_OFFSET;
++#endif
+ break;
+ case __constant_htons(ETH_P_ARP):
+ PRINTM(INFO, "ARP packet %04x\n",eth->h_proto);
diff --git a/packages/wifistix/wifistix-modules_5.0.16.p0.bb b/packages/wifistix/wifistix-modules_5.0.16.p0.bb
index 787c631d16..0eb6877558 100644
--- a/packages/wifistix/wifistix-modules_5.0.16.p0.bb
+++ b/packages/wifistix/wifistix-modules_5.0.16.p0.bb
@@ -47,7 +47,6 @@ do_install() {
install -m 0644 ${WORKDIR}/mcf25 ${D}${sysconfdir}/modutils/mcf25
}
-PACKAGES = "${PN}"
FILES_${PN} = "${base_libdir}/modules/"
FILES_${PN} += "${sysconfdir}/modprobe.d/"
FILES_${PN} += "${sysconfdir}/modutils/"
diff --git a/packages/wlan-ng/wlan-ng-modules.inc b/packages/wlan-ng/wlan-ng-modules.inc
index 9a0797fb00..4cf0733e7a 100644
--- a/packages/wlan-ng/wlan-ng-modules.inc
+++ b/packages/wlan-ng/wlan-ng-modules.inc
@@ -57,7 +57,7 @@ do_install() {
rm -f ${KERNEL_SOURCE}/../../config.mk
}
-PACKAGES = "wlan-ng-modules-usb wlan-ng-modules-cs wlan-ng-modules-pci wlan-ng-modules-p80211"
+PACKAGES = "${PN}-dbg wlan-ng-modules-usb wlan-ng-modules-cs wlan-ng-modules-pci wlan-ng-modules-p80211"
FILES_wlan-ng-modules-p80211 = "/lib/modules/${KERNEL_VERSION}/wlan-ng/p80211${KERNEL_OBJECT_SUFFIX}"
FILES_wlan-ng-modules-usb = "/lib/modules/${KERNEL_VERSION}/wlan-ng/prism2_usb${KERNEL_OBJECT_SUFFIX}"
FILES_wlan-ng-modules-cs = "/lib/modules/${KERNEL_VERSION}/wlan-ng/prism2_cs${KERNEL_OBJECT_SUFFIX}"
diff --git a/packages/wrt/wrt-utils.bb b/packages/wrt/wrt-utils.bb
index 42a7460412..7e02f6830c 100644
--- a/packages/wrt/wrt-utils.bb
+++ b/packages/wrt/wrt-utils.bb
@@ -43,7 +43,7 @@ do_install() {
install -m 644 wlcompat.o ${D}/lib/modules/${KERNEL_VERSION}/
}
-PACKAGES = "wrt-libs wrt-utils kernel-module-wlcompat"
+PACKAGES = "${PN}-dbg wrt-libs wrt-utils kernel-module-wlcompat"
FILES_wrt-libs = "/usr/lib"
FILES_wrt-utils = "/usr/sbin /sbin"
FILES_kernel-module-wlcompat = "/lib/modules/"
diff --git a/packages/xapian/.mtn2git_empty b/packages/xapian/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xapian/.mtn2git_empty
diff --git a/packages/xapian/xapian-core_1.0.5.bb b/packages/xapian/xapian-core_1.0.5.bb
new file mode 100644
index 0000000000..2af709324f
--- /dev/null
+++ b/packages/xapian/xapian-core_1.0.5.bb
@@ -0,0 +1,16 @@
+DESCRPITION = "Open Source Search Engine Library"
+HOMEPAGE = "http://xapian.org"
+SECTION = "devel/libs"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "zlib"
+PR = "r0"
+
+SRC_URI = "http://www.oligarchy.co.uk/xapian/1.0.5/xapian-core-${PV}.tar.gz"
+
+inherit autotools
+
+do_stage () {
+ autotools_stage_all
+}
+
diff --git a/packages/xapian/xapian-quickstartindex_1.0.bb b/packages/xapian/xapian-quickstartindex_1.0.bb
new file mode 100644
index 0000000000..6deff9191e
--- /dev/null
+++ b/packages/xapian/xapian-quickstartindex_1.0.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Simplest possible indexer (from older release of xapian)"
+HOMEPAGE = "http://users.softlab.ece.ntua.gr/~ttsiod/buildWikipediaOffline.html"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "xapian-core"
+PR = "r0"
+
+SRC_URI = "http://users.softlab.ece.ntua.gr/~ttsiod/quickstartindex.cc"
+S = "${WORKDIR}"
+
+do_compile() {
+ ${CXX} ${CXXLAGS} ${LDFLAGS} -lxapian -o quickstartindex quickstartindex.cc
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${WORKDIR}/quickstartindex ${D}${bindir}/
+}
diff --git a/packages/xautomation/.mtn2git_empty b/packages/xautomation/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xautomation/.mtn2git_empty
diff --git a/packages/xautomation/files/.mtn2git_empty b/packages/xautomation/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xautomation/files/.mtn2git_empty
diff --git a/packages/xautomation/files/remove-man.patch b/packages/xautomation/files/remove-man.patch
new file mode 100644
index 0000000000..53f097e418
--- /dev/null
+++ b/packages/xautomation/files/remove-man.patch
@@ -0,0 +1,8 @@
+--- xautomation-1.00/Makefile.am~ 2008-01-18 15:12:30.000000000 -0600
++++ xautomation-1.00/Makefile.am 2008-01-18 15:12:30.000000000 -0600
+@@ -1,5 +1,4 @@
+ bin_PROGRAMS = xte rgb2pat png2pat visgrep pat2ppm patextract xmousepos
+-man_MANS = pat2ppm.1 patextract.1 png2pat.1 rgb2pat.1 visgrep.1 xautomation.7 xmousepos.1 xte.1
+ xte_SOURCES = xte.c debug.c kbd.h
+ xte_LDADD = $(X_LIBS) $(X_EXTRALIBS) -lXtst
+ rgb2pat_SOURCES = rgb2pat.c image.c image.h debug.c debug.h
diff --git a/packages/xautomation/xautomation.inc b/packages/xautomation/xautomation.inc
new file mode 100644
index 0000000000..0157ace914
--- /dev/null
+++ b/packages/xautomation/xautomation.inc
@@ -0,0 +1,9 @@
+DESCRIPTION = "Control X from the command line"
+HOMEPAGE = "http://www.hoopajoo.net/projects/xautomation.html"
+SECTION = "console"
+LICENSE = "GPL"
+
+SRC_URI = "http://www.hoopajoo.net/static/projects/${PN}-${PV}.tar.gz \
+ file://remove-man.patch;patch=1"
+
+inherit autotools pkgconfig
diff --git a/packages/xautomation/xautomation_1.00.bb b/packages/xautomation/xautomation_1.00.bb
new file mode 100644
index 0000000000..6cad1c7ba0
--- /dev/null
+++ b/packages/xautomation/xautomation_1.00.bb
@@ -0,0 +1,3 @@
+require xautomation.inc
+
+PR = "r0"
diff --git a/packages/xcb/libxcb_0.9.bb b/packages/xcb/libxcb_0.9.bb
index 161e83ad11..40eb256714 100644
--- a/packages/xcb/libxcb_0.9.bb
+++ b/packages/xcb/libxcb_0.9.bb
@@ -10,7 +10,7 @@ DEPENDS = "xcb-proto xproto libxau"
SRC_URI = "http://xcb.freedesktop.org/dist/libxcb-0.9.tar.bz2"
-PACKAGES = "libxcb libxcb-dev libxcbcomposite libxcbcomposite-dev \
+PACKAGES = "${PN}-dbg libxcb libxcb-dev libxcbcomposite libxcbcomposite-dev \
libxcbdamage libxcbdamage-dev libxcbdpms libxcbdpms-dev \
libxcbglx libxcbglx-dev libxcbrandr libxcbrandr-dev \
libxcbrecord libxcbrecord-dev libxcbrender libxcbrender-dev \
diff --git a/packages/xcursor-transparent-theme/files/.mtn2git_empty b/packages/xcursor-transparent-theme/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xcursor-transparent-theme/files/.mtn2git_empty
diff --git a/packages/xcursor-transparent-theme/xcursor-transparent-theme-0.1.1/fix_watch_cursor.patch b/packages/xcursor-transparent-theme/files/fix_watch_cursor.patch
index 73a5b2a87a..73a5b2a87a 100644
--- a/packages/xcursor-transparent-theme/xcursor-transparent-theme-0.1.1/fix_watch_cursor.patch
+++ b/packages/xcursor-transparent-theme/files/fix_watch_cursor.patch
diff --git a/packages/xcursor-transparent-theme/xcursor-transparent-theme-0.1.1/use-relative-symlinks.patch b/packages/xcursor-transparent-theme/files/use-relative-symlinks.patch
index df28dfbc88..df28dfbc88 100644
--- a/packages/xcursor-transparent-theme/xcursor-transparent-theme-0.1.1/use-relative-symlinks.patch
+++ b/packages/xcursor-transparent-theme/files/use-relative-symlinks.patch
diff --git a/packages/xcursor-transparent-theme/xcursor-transparent-theme_0.1.1.bb b/packages/xcursor-transparent-theme/xcursor-transparent-theme_0.1.1.bb
index ca048155c9..33e321e532 100644
--- a/packages/xcursor-transparent-theme/xcursor-transparent-theme_0.1.1.bb
+++ b/packages/xcursor-transparent-theme/xcursor-transparent-theme_0.1.1.bb
@@ -1,11 +1,13 @@
LICENSE = "GPL"
DESCRIPTION = "Transparent xcursor theme for handheld systems"
SECTION = "x11/base"
-PR="r1"
+PR="r2"
-SRC_URI = "http://projects.o-hand.com/matchbox/sources/utils/xcursor-transparent-theme-${PV}.tar.gz \
+SRC_URI = "http://matchbox-project.org/sources/utils/xcursor-transparent-theme-${PV}.tar.gz \
file://use-relative-symlinks.patch;patch=1 \
file://fix_watch_cursor.patch;patch=1"
FILES_${PN} = "${datadir}/icons/xcursor-transparent/cursors/*"
inherit autotools
+
+PACKAGE_ARCH = "all"
diff --git a/packages/xcursor-transparent-theme/xcursor-watchonly-theme/.mtn2git_empty b/packages/xcursor-transparent-theme/xcursor-watchonly-theme/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xcursor-transparent-theme/xcursor-watchonly-theme/.mtn2git_empty
diff --git a/packages/xcursor-transparent-theme/xcursor-watchonly-theme/20xcursor-transparent b/packages/xcursor-transparent-theme/xcursor-watchonly-theme/20xcursor-transparent
new file mode 100755
index 0000000000..6fa068214e
--- /dev/null
+++ b/packages/xcursor-transparent-theme/xcursor-watchonly-theme/20xcursor-transparent
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+# Only if there's no mouse at all, we use use transparent cursors
+# for stylus use comfort.
+if ! ls /dev/input/mouse* >/dev/null 2>&1; then
+ echo "Xcursor.theme: xcursor-transparent" | xrdb -merge -nocpp
+fi
diff --git a/packages/xcursor-transparent-theme/xcursor-watchonly-theme/skip_watch_cursor.patch b/packages/xcursor-transparent-theme/xcursor-watchonly-theme/skip_watch_cursor.patch
new file mode 100644
index 0000000000..5c13fa885a
--- /dev/null
+++ b/packages/xcursor-transparent-theme/xcursor-watchonly-theme/skip_watch_cursor.patch
@@ -0,0 +1,23 @@
+diff -NurP xcursor-transparent-theme-0.1.1-orig/cursors/Makefile.am xcursor-transparent-theme-0.1.1/cursors/Makefile.am
+--- xcursor-transparent-theme-0.1.1-orig/cursors/Makefile.am 2003-10-30 13:13:59.000000000 +0100
++++ xcursor-transparent-theme-0.1.1/cursors/Makefile.am 2005-12-20 23:35:17.000000000 +0100
+@@ -79,7 +79,6 @@
+ ul_angle \
+ ur_angle \
+ v_double_arrow \
+- watcha \
+ xterm
+
+ CURSOR_DIR = $(datadir)/icons/xcursor-transparent/cursors
+diff -NurP xcursor-transparent-theme-0.1.1-orig/cursors/Makefile.in xcursor-transparent-theme-0.1.1/cursors/Makefile.in
+--- xcursor-transparent-theme-0.1.1-orig/cursors/Makefile.in 2003-10-31 15:31:13.000000000 +0100
++++ xcursor-transparent-theme-0.1.1/cursors/Makefile.in 2005-12-20 23:35:36.000000000 +0100
+@@ -67,7 +67,7 @@
+ PACKAGE = @PACKAGE@
+ VERSION = @VERSION@
+
+-CURSOR_NAMES = 00008160000006810000408080010102 028006030e0e7ebffc7f7070c0600140 03b6e0fcb3499374a867c041f52298f0 08e8e1c95fe2fc01f976f1e063a24ccd 14fef782d02440884392942c11205230 2870a09082c103050810ffdffffe0204 3ecb610c1bf2410f44200f48c40d3599 4498f0e0c1937ffe01fd06f973665830 9d800788f1b08800ae810202380a0822 c7088f0f3e6c8088236ef8e1e3e70000 d9ce0ab605698f320427677b458ad60b e29285e634086352946a0e7090d73106 fcf1c3c7cd4491d801f1e1c78f100000 X_cursor arrow base_arrow_down base_arrow_up based_arrow_down based_arrow_up bd_double_arrow boat bottom_left_corner bottom_right_corner bottom_side bottom_tee center_ptr circle cross cross_reverse crossed_circle crosshair dot dot_box_mask dotbox double_arrow draft_large draft_small draped_box exchange fd_double_arrow fleur gumby h_double_arrow hand hand1 hand2 left_ptr left_ptr_watch left_side left_tee ll_angle lr_angle move pencil pirate plus question_arrow right_ptr right_side right_tee sailboat sb_down_arrow sb_h_double_arrow sb_left_arrow sb_right_arrow sb_up_arrow sb_v_double_arrow shuttle sizing target tcross top_left_arrow top_left_corner top_right_corner top_side top_tee trek ul_angle ur_angle v_double_arrow watcha xterm
++CURSOR_NAMES = 00008160000006810000408080010102 028006030e0e7ebffc7f7070c0600140 03b6e0fcb3499374a867c041f52298f0 08e8e1c95fe2fc01f976f1e063a24ccd 14fef782d02440884392942c11205230 2870a09082c103050810ffdffffe0204 3ecb610c1bf2410f44200f48c40d3599 4498f0e0c1937ffe01fd06f973665830 9d800788f1b08800ae810202380a0822 c7088f0f3e6c8088236ef8e1e3e70000 d9ce0ab605698f320427677b458ad60b e29285e634086352946a0e7090d73106 fcf1c3c7cd4491d801f1e1c78f100000 X_cursor arrow base_arrow_down base_arrow_up based_arrow_down based_arrow_up bd_double_arrow boat bottom_left_corner bottom_right_corner bottom_side bottom_tee center_ptr circle cross cross_reverse crossed_circle crosshair dot dot_box_mask dotbox double_arrow draft_large draft_small draped_box exchange fd_double_arrow fleur gumby h_double_arrow hand hand1 hand2 left_ptr left_ptr_watch left_side left_tee ll_angle lr_angle move pencil pirate plus question_arrow right_ptr right_side right_tee sailboat sb_down_arrow sb_h_double_arrow sb_left_arrow sb_right_arrow sb_up_arrow sb_v_double_arrow shuttle sizing target tcross top_left_arrow top_left_corner top_right_corner top_side top_tee trek ul_angle ur_angle v_double_arrow xterm
+
+
+ CURSOR_DIR = $(datadir)/icons/xcursor-transparent/cursors
diff --git a/packages/xcursor-transparent-theme/xcursor-watchonly-theme_0.1.1.bb b/packages/xcursor-transparent-theme/xcursor-watchonly-theme_0.1.1.bb
new file mode 100644
index 0000000000..094b303409
--- /dev/null
+++ b/packages/xcursor-transparent-theme/xcursor-watchonly-theme_0.1.1.bb
@@ -0,0 +1,23 @@
+LICENSE = "GPL"
+DESCRIPTION = "Transparent xcursor theme for handheld systems with visible watch cursor"
+SECTION = "x11/base"
+RREPLACES = "xcursor-transparent-theme"
+RPROVIDES = "xcursor-transparent-theme"
+PR="r4"
+
+SRC_URI = "http://projects.o-hand.com/matchbox/sources/utils/xcursor-transparent-theme-${PV}.tar.gz \
+ file://use-relative-symlinks.patch;patch=1 \
+ file://skip_watch_cursor.patch;patch=1 \
+ file://20xcursor-transparent"
+S = "${WORKDIR}/xcursor-transparent-theme-${PV}"
+
+FILES_${PN} += "${datadir}/icons/xcursor-transparent/cursors/*"
+
+inherit autotools
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/X11/Xsession.d
+ install -m 0755 ${WORKDIR}/20xcursor-transparent ${D}${sysconfdir}/X11/Xsession.d
+}
+
+PACKAGE_ARCH = "all"
diff --git a/packages/xerces-c/xerces-c_2.6.0.bb b/packages/xerces-c/xerces-c_2.6.0.bb
deleted file mode 100644
index fe0677f54f..0000000000
--- a/packages/xerces-c/xerces-c_2.6.0.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-DESCRIPTION = "Xerces-c xml"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "MIT"
-
-S = "${WORKDIR}/xerces-c-src_2_6_0"
-
-SRC_URI = "http://www.axint.net/apache/xml/xerces-c/xerces-c-src_2_6_0.tar.gz"
-
-inherit pkgconfig
-
-
-#
-# Warning: BITSTOBUILD will default to 32 bits
-#
-export TRANSCODER="NATIVE"
-export MESSAGELOADER="INMEM"
-export NETACCESSOR="Socket"
-export THREADS="pthread"
-export BITSTOBUILD="32"
-export LIBS = " -lpthread "
-CFLAGS_append = " -DPROJ_XMLPARSER -DPROJ_XMLUTIL -DPROJ_PARSERS -DPROJ_SAX4C -DPROJ_SAX2 -DPROJ_DOM -DPROJ_DEPRECATED_DOM -DPROJ_VALIDATORS -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER -DXML_USE_PTHREADS -DXML_USE_NETACCESSOR_SOCKET "
-CXXFLAGS_append = " -DPROJ_XMLPARSER -DPROJ_XMLUTIL -DPROJ_PARSERS -DPROJ_SAX4C -DPROJ_SAX2 -DPROJ_DOM -DPROJ_DEPRECATED_DOM -DPROJ_VALIDATORS -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER -DXML_USE_PTHREADS -DXML_USE_NETACCESSOR_SOCKET "
-
-do_configure() {
- export XERCESCROOT=${S}
- cd src/xercesc
- ./configure
-}
-
-do_compile () {
- export XERCESCROOT=${S}
- cd src/xercesc
- oe_runmake
-}
-
-do_stage () {
- oe_libinstall -C lib libxerces-c ${STAGING_LIBDIR}
- oe_libinstall -C lib libxerces-depdom ${STAGING_LIBDIR}
-
- cp -pPR include/xercesc ${STAGING_INCDIR}
-}
-
-do_install () {
- oe_libinstall -C lib libxerces-c ${D}${libdir}
- oe_libinstall -C lib libxerces-depdom ${D}${libdir}
-}
diff --git a/packages/xerces-c/xerces-c_2.7.0.bb b/packages/xerces-c/xerces-c_2.7.0.bb
deleted file mode 100644
index 8fdab80180..0000000000
--- a/packages/xerces-c/xerces-c_2.7.0.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-DESCRIPTION = "Xerces-c xml"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "MIT"
-
-S = "${WORKDIR}/xerces-c-src_2_7_0"
-
-SRC_URI = "http://www.axint.net/apache/xml/xerces-c/source/xerces-c-src_2_7_0.tar.gz"
-
-inherit pkgconfig
-
-
-#
-# Warning: BITSTOBUILD will default to 32 bits
-#
-export TRANSCODER="NATIVE"
-export MESSAGELOADER="INMEM"
-export NETACCESSOR="Socket"
-export THREADS="pthread"
-export BITSTOBUILD="32"
-export LIBS = " -lpthread "
-CFLAGS_append = " -DPROJ_XMLPARSER -DPROJ_XMLUTIL -DPROJ_PARSERS -DPROJ_SAX4C -DPROJ_SAX2 -DPROJ_DOM -DPROJ_DEPRECATED_DOM -DPROJ_VALIDATORS -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER -DXML_USE_PTHREADS -DXML_USE_NETACCESSOR_SOCKET "
-CXXFLAGS_append = " -DPROJ_XMLPARSER -DPROJ_XMLUTIL -DPROJ_PARSERS -DPROJ_SAX4C -DPROJ_SAX2 -DPROJ_DOM -DPROJ_DEPRECATED_DOM -DPROJ_VALIDATORS -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER -DXML_USE_PTHREADS -DXML_USE_NETACCESSOR_SOCKET "
-
-do_configure() {
- export XERCESCROOT=${S}
- cd src/xercesc
- ./configure
-}
-
-do_compile () {
- export XERCESCROOT=${S}
- cd src/xercesc
- oe_runmake
-}
-
-do_stage () {
- oe_libinstall -C lib libxerces-c ${STAGING_LIBDIR}
- oe_libinstall -C lib libxerces-depdom ${STAGING_LIBDIR}
-
- cp -pPR include/xercesc ${STAGING_INCDIR}
-}
-
-do_install () {
- oe_libinstall -C lib libxerces-c ${D}${libdir}
- oe_libinstall -C lib libxerces-depdom ${D}${libdir}
-}
diff --git a/packages/xerces-c/xerces-c_2.8.0.bb b/packages/xerces-c/xerces-c_2.8.0.bb
new file mode 100644
index 0000000000..4f72e9dc77
--- /dev/null
+++ b/packages/xerces-c/xerces-c_2.8.0.bb
@@ -0,0 +1,36 @@
+DESCRIPTION = "Xerces-c is a validating xml parser written in C++"
+HOMEPAGE = "http://xerces.apache.org/xerces-c/"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "MIT"
+PR = "r1"
+
+SRC_URI = "http://mirror.serversupportforum.de/apache/xerces/c/sources/xerces-c-src_2_8_0.tar.gz"
+S = "${WORKDIR}/xerces-c-src_2_8_0/src/xercesc"
+
+inherit autotools pkgconfig
+
+CCACHE = ""
+export XERCESCROOT="${WORKDIR}/xerces-c-src_2_8_0"
+export cross_compiling = "yes"
+
+do_configure() {
+ ./runConfigure -plinux -c"${CC}" -x"${CXX}" -minmem -nsocket -tnative -rpthread -P${D}${prefix} \
+ -C--build=${BUILD_SYS} \
+ -C--host=${HOST_SYS} \
+ -C--target=${TARGET_SYS} \
+}
+
+do_compile() {
+ ${MAKE}
+}
+
+do_stage () {
+ oe_libinstall -C ${XERCESCROOT}/lib libxerces-c ${STAGING_LIBDIR}
+ oe_libinstall -C ${XERCESCROOT}/lib libxerces-depdom ${STAGING_LIBDIR}
+ cp -pPR ${XERCESCROOT}/include/xercesc ${STAGING_INCDIR}
+}
+
+do_install () {
+ ${MAKE} install
+}
diff --git a/packages/xmlpull/.mtn2git_empty b/packages/xmlpull/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xmlpull/.mtn2git_empty
diff --git a/packages/xmlpull/files/.mtn2git_empty b/packages/xmlpull/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xmlpull/files/.mtn2git_empty
diff --git a/packages/xmlpull/files/makefile.patch b/packages/xmlpull/files/makefile.patch
new file mode 100644
index 0000000000..6b0af10d8c
--- /dev/null
+++ b/packages/xmlpull/files/makefile.patch
@@ -0,0 +1,411 @@
+Index: xmlpull_1_1_3_4c/src/java/api/Makefile
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xmlpull_1_1_3_4c/src/java/api/Makefile 2007-11-30 03:49:02.000000000 +0100
+@@ -0,0 +1,406 @@
++#
++# Makefile created at Fri Nov 30 03:45:26 2007, by mmake
++#
++
++# Programs (with common options):
++SHELL = /bin/sh
++CP = cp
++RM = rm -f
++MV = mv -f
++SED = sed
++ETAGS = etags
++XARGS = xargs
++CAT = cat
++FIND = find
++CPP = cpp -C -P
++
++INSTALL = install
++INSTALL_PROG = $(INSTALL) -m $(MODE_PROGS)
++INSTALL_FILE = $(INSTALL) -m $(MODE_FILES)
++INSTALL_DIR = $(INSTALL) -m $(MODE_DIRS) -d
++
++# Install modes
++MODE_PROGS = 555
++MODE_FILES = 444
++MODE_DIRS = 2755
++
++# Build programs
++JAVAC = javac
++JAVADOC = gjavadoc
++JAR = fastjar
++
++# Build flags
++JAVAC_FLAGS = -source 1.3 -target 1.1
++JAVADOC_FLAGS = -version -author
++JAR_FLAGS = cvf
++JIKES_DEP_FLAG = +M
++
++# ------------------------------------------------------------------- #
++
++# Prefix for every install directory
++PREFIX =
++
++# Where to start installing the class files. Set this to an empty value
++# if you dont want to install classes
++CLASS_DIR = $(PREFIX)classes
++
++# The directory to install the jar file in. Set this to an empty value
++# if you dont want to install a jar file
++JAR_DIR = $(PREFIX)lib
++
++# The directory to install the app bundle in. Set this to an empty value
++# if you dont want to install an app bundle
++BUNDLE_DIR = $(PREFIX)lib
++
++
++# The directory to install html files generated by javadoc
++DOC_DIR = $(PREFIX)doc/api-docs
++
++# The directory to install script files in
++SCRIPT_DIR = $(PREFIX)bin
++
++# ------------------------------------------------------------------- #
++
++# The name of the jar file to install
++JAR_FILE = xmlpull-1.1.3.4c.jar
++
++#
++# The VERSION variable below should be set to a value
++# that will be tested in the .xjava code and Info.plist.
++#
++VERSION = CHANGE_ME
++
++# ------------------------------------------------------------------- #
++
++# The name of the OS X Application Bundle to install
++BUNDLE_FILE =
++
++# Folder containing App Bundle resources (Info.plist, *.icns, etc.)
++BUNDLE_RESOURCE_DIR = misc/macosx
++
++# Items to copy to the Resources folder of the bundle
++BUNDLE_RESOURCES = $(addsuffix .icns, $(basename $(APP_FILE)) Document)
++
++# Location of JavaApplicatonStub
++JAVA_STUB = /System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub
++
++# ------------------------------------------------------------------- #
++
++# Resource files:
++# Extend the list to install other files of your choice
++RESOURCE_SRC := *.properties *.gif *.au
++
++# Objects that should go into the jar file. (find syntax)
++JAR_OBJS := \( -name '*.class' -o -name '*.gif' -o -name "*.au" \
++ -o -name '*.properties' \)
++
++# Include the separate variables file if it exists
++MAKEFILE_VARS = makefile.vars
++VARS = $(wildcard $(MAKEFILE_VARS))
++ifneq ($(VARS),)
++ include $(MAKEFILE_VARS)
++endif
++
++
++# Packages we should compile
++PACKAGES = \
++ org.xmlpull.v1
++
++
++# All packages that can be recursively compiled.
++ALL_PACKAGES = \
++ org \
++ org.xmlpull \
++ $(PACKAGES)
++
++
++# Packages to generate docs for.
++JAVADOC_PACKAGES = $(PACKAGES)
++
++
++# Resource packages
++RESOURCES =
++
++
++# Directories with shell scripts
++SCRIPTS =
++
++# ------------------------------------------------------------------- #
++
++# A marker variable for the top level directory
++TOPLEVEL := .
++
++# Subdirectories with java files:
++JAVA_DIRS := $(subst .,/,$(PACKAGES)) $(TOPLEVEL)
++
++# Subdirectories with only resource files:
++RESOURCE_DIRS := $(subst .,/,$(RESOURCES))
++
++# All the .xjava source files:
++XJAVA_SRC := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.xjava))
++
++# All the xjava files to build
++XJAVA_OBJS := $(XJAVA_SRC:.xjava=.java)
++
++# Directory coresponding to a package
++PACKAGE_DIR = $(subst .,/,$(1))
++
++# All the (x)java files in a package
++PACKAGE_SRC = $(shell $(FIND) $(PACKAGE_DIR) \( -name '*.java' -or -name '*.xjava' \) )
++
++# All the classes to build in a package
++PACKAGE_OBJS = $(patsubst %.java,%.class,$(PACKAGE_SRC: %.xjava=%.java))
++
++# All the .java source files:
++JAVA_SRC := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.java))
++JAVA_SRC := $(XJAVA_OBJS) $(JAVA_SRC)
++
++# Dependency files:
++DEPEND_OBJS := $(JAVA_SRC:.java=.u)
++
++# The intermediate java files and main classes we should build:
++JAVA_OBJS := $(XJAVA_OBJS) $(JAVA_SRC:.java=.class)
++
++# Search for resource files in both JAVA_DIRS and RESOURCE_DIRS
++RESOURCE_OBJS := $(foreach dir, $(JAVA_DIRS) $(RESOURCE_DIRS), \
++ $(wildcard $(foreach file, $(RESOURCE_SRC), \
++ $(dir)/$(file))))
++
++# All the shell scripts source
++SCRIPT_SRCS := $(foreach dir, $(SCRIPTS), $(wildcard $(dir)/*.sh))
++# All shell scripts we should install
++SCRIPT_OBJS := $(SCRIPT_SRCS:.sh=)
++
++# All the files to install into CLASS_DIR
++INSTALL_OBJS := $(foreach dir, $(JAVA_DIRS), $(wildcard $(dir)/*.class))
++# Escape inner class delimiter $
++INSTALL_OBJS := $(subst $$,\$$,$(INSTALL_OBJS))
++# Add the resource files to be installed as well
++INSTALL_OBJS := $(INSTALL_OBJS) $(RESOURCE_OBJS)
++
++
++# ------------------------------------------------------------------- #
++
++
++define check-exit
++|| exit 1
++
++endef
++
++
++# -----------
++# Build Rules
++# -----------
++
++%.java: %.xjava
++ $(CPP) -D$(VERSION) $< $@
++
++%.class: %.java
++ $(JAVAC) $(JAVAC_FLAGS) $<
++
++%.jar: $(JAVA_OBJS) $(RESOURCE_OBJS)
++ $(FIND) $(TOPLEVEL) $(JAR_OBJS) -print | $(XARGS) \
++ $(JAR) $(JAR_FLAGS) $(JAR_FILE)
++
++%.u: %.java
++ $(JAVAC) $(JIKES_DEP_FLAG) $<
++
++
++# -------
++# Targets
++# -------
++
++.PHONY: all jar install uninstall doc clean depend tags bundle \
++ help $(ALL_PACKAGES)
++
++all:: $(JAVA_OBJS)
++
++help:
++ @echo "Usage: make {all|jar|srcjar|bundle|install|uninstall|doc|clean|depend|tags|PACKAGE_NAME}"
++ @echo " all: build all classes"
++ @echo " jar: build jar file"
++ @echo " srcjar: build source jar file"
++ @echo " bundle: build OS X app bundle"
++ @echo " install: install classes into $(CLASS_DIR)"
++ @echo " jar into $(JAR_DIR)"
++ @echo " bundle into $(BUNDLE_DIR)"
++ @echo " javadocs into $(DOC_DIR)"
++ @echo " scripts into $(SCRIPT_DIR)"
++ @echo " uninstall: remove installed files"
++ @echo " doc: generate api docs from javadoc comments"
++ @echo " clean: remove classes and temporary files"
++ @echo " depend: build class dependency info using jikes"
++ @echo " tags: build emacs tags file"
++ @echo " PACKAGE_NAME: builds all classes in this package and any subpackages."
++
++# Jar target
++ifneq ($(strip $(JAR_FILE)),)
++jar: $(JAR_FILE)
++ifneq ($(strip $(JAR_DIR)),)
++install:: $(JAR_FILE)
++ @echo "===> [Installing jar file, $(JAR_FILE) in $(JAR_DIR)] "
++ $(INSTALL_DIR) $(JAR_DIR) $(check-exit)
++ $(INSTALL_FILE) $(JAR_FILE) $(JAR_DIR) $(check-exit)
++uninstall::
++ @echo "===> [Removing jar file, $(JAR_FILE) from $(JAR_DIR)] "
++ $(RM) $(JAR_DIR)/$(JAR_FILE) $(check-exit)
++else
++install::
++ @echo "No jar install dir defined"
++endif
++clean::
++ $(RM) $(JAR_FILE)
++else
++jar:
++ @echo "No jar file defined"
++endif
++
++SRC_JAR_FILE := $(basename $(JAR_FILE))-src$(suffix $JAR_FILE)
++
++# Source jar target
++srcjar : $(SRC_JAR_FILE)
++$(SRC_JAR_FILE): $(JAVA_SRC) $(RESOURCE_OBJS)
++ $(FIND) $(TOPLEVEL) $(JAR_OBJS: .class=.java) -print | $(XARGS) \
++ $(JAR) $(JAR_FLAGS) $@
++
++# Bundle target
++ifneq ($(strip $(BUNDLE_FILE)),)
++bundle: $(BUNDLE_FILE)
++$(BUNDLE_FILE) : $(JAR_FILE)
++ $(INSTALL_DIR) $(BUNDLE_FILE)/Contents/Resources/Java $(check-exit)
++ $(INSTALL_DIR) $(BUNDLE_FILE)/Contents/MacOS $(check-exit)
++ $(INSTALL_PROG) $(JAVA_STUB) $(BUNDLE_FILE)/Contents/MacOS/ \
++ $(check-exit)
++ ( $(CAT) $(BUNDLE_RESOURCE_DIR)/Info.plist | $(SED) -e \
++ s/VERSION/$(VERSION)/ >98762infoplist876 ) $(check-exit)
++ $(INSTALL_FILE) 98762infoplist876 \
++ $(BUNDLE_FILE)/Contents/Info.plist $(check-exit)
++ $(RM) 98762infoplist876 $(check-exit)
++ $(INSTALL_FILE) $(JAR_FILE) $(BUNDLE_FILE)/Contents/Resources/Java
++ checkexit="";for f in $(BUNDLE_RESOURCES); do \
++ $(INSTALL_FILE) $(BUNDLE_RESOURCE_DIR)$$f $(BUNDLE_FILE)/Contents/Resources/ \
++ || checkexit=$?; \
++ done; test -z $$checkexit
++
++ifneq ($(strip $(BUNDLE_DIR)),)
++# This is probably bad, but I don't know how else to do it
++install:: $(BUNDLE_FILE)
++ @echo "===> [Installing app bundle, $(BUNDLE_FILE) in $(BUNDLE_DIR)] "
++ $(INSTALL_DIR) $(BUNDLE_DIR) $(check-exit)
++ $(CP) -R $(BUNDLE_FILE) $(BUNDLE_DIR) $(check-exit)
++ $(INSTALL_FILE) $(BUNDLE_FILE) $(BUNDLE_DIR) $(check-exit)
++uninstall::
++ @echo "===> [Removing bundle file, $(BUNDLE_FILE) from $(BUNDLE_DIR)] "
++ $(RM) -r $(BUNDLE_DIR)/$(BUNDLE_FILE) $(check-exit)
++else
++install::
++ @echo "No bundle install dir defined"
++endif
++clean::
++ $(RM) -r $(BUNDLE_FILE)
++else
++bundle:
++ @echo "No bundle file defined"
++endif
++
++
++# Install target for Classes and Resources
++ifneq ($(strip $(CLASS_DIR)),)
++install:: $(JAVA_OBJS)
++ @echo "===> [Installing classes in $(CLASS_DIR)] "
++ $(INSTALL_DIR) $(CLASS_DIR) $(check-exit)
++ $(foreach dir, $(JAVA_DIRS) $(RESOURCE_DIRS), \
++ $(INSTALL_DIR) $(CLASS_DIR)/$(dir) $(check-exit))
++ $(foreach file, $(INSTALL_OBJS), \
++ $(INSTALL_FILE) $(file) $(CLASS_DIR)/$(file) \
++ $(check-exit))
++uninstall::
++ @echo "===> [Removing class-files from $(CLASS_DIR)] "
++ $(foreach file, $(INSTALL_OBJS), \
++ $(RM) $(CLASS_DIR)/$(file) \
++ $(check-exit))
++else
++# Print a warning here if you like. (No class install dir defined)
++endif
++
++
++
++# Depend target
++ifeq ($(findstring jikes,$(JAVAC)),jikes)
++depend: $(XJAVA_OBJS) $(DEPEND_OBJS)
++ ( $(CAT) $(DEPEND_OBJS) | $(SED) -e '/\.class$$/d' \
++ -e '/.*$$.*/d' > $(MAKEFILE_DEPEND); $(RM) $(DEPEND_OBJS); )
++else
++depend:
++ @echo "mmake needs the jikes compiler to build class dependencies"
++endif
++
++
++
++# Doc target
++ifneq ($(strip $(JAVADOC_PACKAGES)),)
++doc: $(JAVA_SRC)
++ @echo "===> [Installing java documentation in $(DOC_DIR)] "
++ $(INSTALL_DIR) $(DOC_DIR) $(check-exit)
++ $(JAVADOC) $(JAVADOC_FLAGS) -d $(DOC_DIR) $(JAVADOC_PACKAGES)
++else
++doc:
++ @echo "You must put your source files in a package to run make doc"
++endif
++
++
++
++# Script target
++ifneq ($(strip $(SCRIPT_OBJS)),)
++all:: $(SCRIPT_OBJS)
++ifneq ($(strip $(SCRIPT_DIR)),)
++install:: $(SCRIPT_OBJS)
++ @echo "===> [Installing shell-scripts in $(SCRIPT_DIR)] "
++ $(INSTALL_DIR) $(SCRIPT_DIR) $(check-exit)
++ $(foreach file, $(SCRIPT_OBJS), \
++ $(INSTALL_PROG) $(file) $(SCRIPT_DIR) $(check-exit))
++uninstall::
++ @echo "===> [Removing shell-scripts from $(SCRIPT_DIR)] "
++ $(foreach file, $(SCRIPT_OBJS), \
++ $(RM) $(SCRIPT_DIR)/$(file) $(check-exit))
++else
++# Print a warning here if you like. (No script install dir defined)
++endif
++clean::
++ rm -f $(SCRIPT_OBJS)
++endif
++
++
++
++# Tag target
++tags:
++ @echo "Tagging"
++ $(ETAGS) $(filter-out $(XJAVA_OBJS), $(JAVA_SRC)) $(XJAVA_SRC)
++
++
++
++# Various cleanup routines
++clean::
++ $(FIND) . \( -name '*~' -o -name '*.class' \) -print | \
++ $(XARGS) $(RM)
++ $(FIND) . -name '*.u' -print | $(XARGS) $(RM)
++
++ifneq ($(strip $(XJAVA_SRC)),)
++clean::
++ $(RM) $(XJAVA_OBJS)
++endif
++
++# ----------------------------------------
++# Include the dependency graph if it exist
++# ----------------------------------------
++MAKEFILE_DEPEND = makefile.dep
++DEPEND = $(wildcard $(MAKEFILE_DEPEND))
++ifneq ($(DEPEND),)
++ include $(MAKEFILE_DEPEND)
++endif
++
++#package targets
++org : $(call PACKAGE_OBJS,org)
++org.xmlpull : $(call PACKAGE_OBJS,org.xmlpull)
++org.xmlpull.v1 : $(call PACKAGE_OBJS,org.xmlpull.v1)
++
diff --git a/packages/xmlpull/xmlpull_1.1.3.4c.bb b/packages/xmlpull/xmlpull_1.1.3.4c.bb
new file mode 100644
index 0000000000..1ba09f79b6
--- /dev/null
+++ b/packages/xmlpull/xmlpull_1.1.3.4c.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "XML pull parser API"
+HOMEPAGE = "http://www.xmlpull.org"
+PRIORITY = "optional"
+SECTION = "libs"
+LICENSE = "public domain"
+PR = "r1"
+
+inherit java-library
+
+S = "${WORKDIR}/${PN}_1_1_3_4c"
+
+JAR = "${PN}-${PV}.jar"
+
+SRC_URI = "\
+ http://xmlpull.org/v1/download/xmlpull_1_1_3_4c_src.tgz \
+ file://makefile.patch;patch=1 \
+ "
+
+do_compile() {
+ oe_runmake -C src/java/api \
+ JAVAC_FLAGS="-sourcepath ." \
+ JAR="oefatal \"No jar invocation expected here.\"" \
+
+ oe_runmake -C src/java/api \
+ JAVAC="oefatal \"No Java compilation expected here.\"" \
+ jar
+}
+
+do_stage() {
+ oe_jarinstall -s ${S}/src/java/api/${JAR} ${PN}.jar
+}
+
+do_install() {
+ oe_jarinstall src/java/api/${JAR} ${PN}.jar
+}
diff --git a/packages/xmms/xmms-mad_0.10.bb b/packages/xmms/xmms-mad_0.10.bb
index f54dc16720..8c600f24b8 100644
--- a/packages/xmms/xmms-mad_0.10.bb
+++ b/packages/xmms/xmms-mad_0.10.bb
@@ -10,5 +10,5 @@ inherit autotools
export XMMS_CONFIG = "${STAGING_BINDIR_CROSS}/xmms-config"
FILES_${PN} = "${libdir}/xmms/Input/libxmmsmad.so"
-FILES_${PN}-dbg = "${libdir}/xmms/Input/.debug/libxmmsmad.so"
+FILES_${PN}-dbg += "${libdir}/xmms/Input/.debug/libxmmsmad.so"
diff --git a/packages/xmms/xmms-tremor_1.0.bb b/packages/xmms/xmms-tremor_1.0.bb
index 727ead1f80..21e2e8dc9b 100644
--- a/packages/xmms/xmms-tremor_1.0.bb
+++ b/packages/xmms/xmms-tremor_1.0.bb
@@ -7,5 +7,5 @@ SRC_URI = "http://mirror1.pdaxrom.org/source/src/xmms-tremor-1.0.tar.bz2"
inherit autotools
FILES_${PN} = "${libdir}/xmms/Input/libxmmstremor.so"
-FILES_${PN}-dbg = "${libdir}/xmms/Input/.debug/libxmmstremor.so"
+FILES_${PN}-dbg += "${libdir}/xmms/Input/.debug/libxmmstremor.so"
diff --git a/packages/xorg-app/bdftopcf-native_1.0.0.bb b/packages/xorg-app/bdftopcf-native_1.0.0.bb
new file mode 100644
index 0000000000..8ab592b2b2
--- /dev/null
+++ b/packages/xorg-app/bdftopcf-native_1.0.0.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Native bdftopdf utility"
+SECTION = "x11/fonts"
+LICENSE = "MIT-X"
+PE = "1"
+
+S="${WORKDIR}/bdftopcf-${PV}"
+
+DEPENDS = "libxfont-native"
+
+SRC_URI = "${XORG_MIRROR}/X11R7.0/src/app/bdftopcf-X11R7.0-1.0.0.tar.gz"
+
+inherit native autotools pkgconfig
+
diff --git a/packages/xorg-app/bitmap_1.0.2.bb b/packages/xorg-app/bitmap_1.0.2.bb
new file mode 100644
index 0000000000..63c5de6cf1
--- /dev/null
+++ b/packages/xorg-app/bitmap_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxmu xbitmaps libxt"
+
diff --git a/packages/xorg-app/fslsfonts_1.0.1.bb b/packages/xorg-app/fslsfonts_1.0.1.bb
new file mode 100644
index 0000000000..9ba7ad6030
--- /dev/null
+++ b/packages/xorg-app/fslsfonts_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libfs"
+
diff --git a/packages/xorg-app/fstobdf_1.0.2.bb b/packages/xorg-app/fstobdf_1.0.2.bb
new file mode 100644
index 0000000000..9ba7ad6030
--- /dev/null
+++ b/packages/xorg-app/fstobdf_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libfs"
+
diff --git a/packages/xorg-app/lbxproxy_1.0.1.bb b/packages/xorg-app/lbxproxy_1.0.1.bb
new file mode 100644
index 0000000000..1303947c27
--- /dev/null
+++ b/packages/xorg-app/lbxproxy_1.0.1.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+DESCRIPTION = "Applications that would like to take advantage of the Low Bandwidth \
+extension to X (LBX) must make their connections to an lbxproxy."
+
+DEPENDS += " xtrans libxext liblbxutil virtual/libx11 libice xproxymngproto bigreqsproto zlib"
diff --git a/packages/xorg-app/listres_1.0.1.bb b/packages/xorg-app/listres_1.0.1.bb
new file mode 100644
index 0000000000..97fab10f3d
--- /dev/null
+++ b/packages/xorg-app/listres_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw virtual/libx11 libxt libxmu"
+
diff --git a/packages/xorg-app/mkcfm_1.0.1.bb b/packages/xorg-app/mkcfm_1.0.1.bb
new file mode 100644
index 0000000000..b177c9023f
--- /dev/null
+++ b/packages/xorg-app/mkcfm_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxfont libfs libfontenc"
+
diff --git a/packages/xorg-app/oclock_1.0.1.bb b/packages/xorg-app/oclock_1.0.1.bb
new file mode 100644
index 0000000000..b2abeadfb0
--- /dev/null
+++ b/packages/xorg-app/oclock_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxmu libxext libxt"
+
diff --git a/packages/xorg-app/proxymngr_1.0.1.bb b/packages/xorg-app/proxymngr_1.0.1.bb
new file mode 100644
index 0000000000..1ee3505645
--- /dev/null
+++ b/packages/xorg-app/proxymngr_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libice libxt virtual/libx11 xproxymngproto"
+
diff --git a/packages/xorg-app/rgb_1.0.1.bb b/packages/xorg-app/rgb_1.0.1.bb
new file mode 100644
index 0000000000..5598b6c041
--- /dev/null
+++ b/packages/xorg-app/rgb_1.0.1.bb
@@ -0,0 +1,8 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " xproto util-macros"
+
+FILES_${PN} += "${datadir}/X11"
+
+
diff --git a/packages/xorg-app/rstart_1.0.2.bb b/packages/xorg-app/rstart_1.0.2.bb
new file mode 100644
index 0000000000..aafaddcf4b
--- /dev/null
+++ b/packages/xorg-app/rstart_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11"
+
diff --git a/packages/xorg-app/scripts_1.0.1.bb b/packages/xorg-app/scripts_1.0.1.bb
new file mode 100644
index 0000000000..4a06dc621c
--- /dev/null
+++ b/packages/xorg-app/scripts_1.0.1.bb
@@ -0,0 +1,6 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11"
+
+
diff --git a/packages/xorg-app/showfont_1.0.1.bb b/packages/xorg-app/showfont_1.0.1.bb
new file mode 100644
index 0000000000..28c0f81c91
--- /dev/null
+++ b/packages/xorg-app/showfont_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libfs"
+
diff --git a/packages/xorg-app/smproxy_1.0.2.bb b/packages/xorg-app/smproxy_1.0.2.bb
new file mode 100644
index 0000000000..64b4ec320d
--- /dev/null
+++ b/packages/xorg-app/smproxy_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxt libxmu"
+
diff --git a/packages/xorg-app/viewres_1.0.1.bb b/packages/xorg-app/viewres_1.0.1.bb
new file mode 100644
index 0000000000..f884467096
--- /dev/null
+++ b/packages/xorg-app/viewres_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxt"
+
diff --git a/packages/xorg-app/xbiff_1.0.1.bb b/packages/xorg-app/xbiff_1.0.1.bb
new file mode 100644
index 0000000000..e3264d7684
--- /dev/null
+++ b/packages/xorg-app/xbiff_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw xbitmaps libxext"
+
diff --git a/packages/xorg-app/xcalc_1.0.1.bb b/packages/xorg-app/xcalc_1.0.1.bb
new file mode 100644
index 0000000000..2bdb000c5d
--- /dev/null
+++ b/packages/xorg-app/xcalc_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxt"
+
diff --git a/packages/xorg-app/xclipboard_1.0.1.bb b/packages/xorg-app/xclipboard_1.0.1.bb
new file mode 100644
index 0000000000..2bdb000c5d
--- /dev/null
+++ b/packages/xorg-app/xclipboard_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxt"
+
diff --git a/packages/xorg-app/xclock_1.0.2.bb b/packages/xorg-app/xclock_1.0.2.bb
new file mode 100644
index 0000000000..e88196a445
--- /dev/null
+++ b/packages/xorg-app/xclock_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxaw libxrender libxft libxkbfile libxt"
+
diff --git a/packages/xorg-app/xcmsdb_1.0.1.bb b/packages/xorg-app/xcmsdb_1.0.1.bb
new file mode 100644
index 0000000000..aafaddcf4b
--- /dev/null
+++ b/packages/xorg-app/xcmsdb_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11"
+
diff --git a/packages/xorg-app/xconsole_1.0.2.bb b/packages/xorg-app/xconsole_1.0.2.bb
new file mode 100644
index 0000000000..f884467096
--- /dev/null
+++ b/packages/xorg-app/xconsole_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxt"
+
diff --git a/packages/xorg-app/xcursorgen_1.0.1.bb b/packages/xorg-app/xcursorgen_1.0.1.bb
new file mode 100644
index 0000000000..64b26483e0
--- /dev/null
+++ b/packages/xorg-app/xcursorgen_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxcursor libpng"
+
diff --git a/packages/xorg-app/xditview_1.0.1.bb b/packages/xorg-app/xditview_1.0.1.bb
new file mode 100644
index 0000000000..2bdb000c5d
--- /dev/null
+++ b/packages/xorg-app/xditview_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxt"
+
diff --git a/packages/xorg-app/xdriinfo_1.0.1.bb b/packages/xorg-app/xdriinfo_1.0.1.bb
new file mode 100644
index 0000000000..42541cd22d
--- /dev/null
+++ b/packages/xorg-app/xdriinfo_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 glproto mesa"
+
diff --git a/packages/xorg-app/xedit_1.0.2.bb b/packages/xorg-app/xedit_1.0.2.bb
new file mode 100644
index 0000000000..e98f981c95
--- /dev/null
+++ b/packages/xorg-app/xedit_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxprintutil libxp libxt"
+
diff --git a/packages/xorg-app/xeyes_1.0.1.bb b/packages/xorg-app/xeyes_1.0.1.bb
new file mode 100644
index 0000000000..07ce0724fa
--- /dev/null
+++ b/packages/xorg-app/xeyes_1.0.1.bb
@@ -0,0 +1,4 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxau libxt libxext libxmu"
diff --git a/packages/xorg-app/xfd_1.0.1.bb b/packages/xorg-app/xfd_1.0.1.bb
new file mode 100644
index 0000000000..6d05f0e1dd
--- /dev/null
+++ b/packages/xorg-app/xfd_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw freetype fontconfig libxft libxt"
+
diff --git a/packages/xorg-app/xfindproxy_1.0.1.bb b/packages/xorg-app/xfindproxy_1.0.1.bb
new file mode 100644
index 0000000000..2bdb000c5d
--- /dev/null
+++ b/packages/xorg-app/xfindproxy_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxt"
+
diff --git a/packages/xorg-app/xfsinfo_1.0.1.bb b/packages/xorg-app/xfsinfo_1.0.1.bb
new file mode 100644
index 0000000000..9ba7ad6030
--- /dev/null
+++ b/packages/xorg-app/xfsinfo_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libfs"
+
diff --git a/packages/xorg-app/xfwp_1.0.1.bb b/packages/xorg-app/xfwp_1.0.1.bb
new file mode 100644
index 0000000000..0ee67e5376
--- /dev/null
+++ b/packages/xorg-app/xfwp_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libice xproxymngproto"
+
diff --git a/packages/xorg-app/xgamma_1.0.1.bb b/packages/xorg-app/xgamma_1.0.1.bb
new file mode 100644
index 0000000000..f8a6f6ca2b
--- /dev/null
+++ b/packages/xorg-app/xgamma_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxxf86vm"
+
diff --git a/packages/xorg-app/xgc_1.0.1.bb b/packages/xorg-app/xgc_1.0.1.bb
new file mode 100644
index 0000000000..2bdb000c5d
--- /dev/null
+++ b/packages/xorg-app/xgc_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxt"
+
diff --git a/packages/xorg-app/xkbevd_1.0.2.bb b/packages/xorg-app/xkbevd_1.0.2.bb
new file mode 100644
index 0000000000..27bbe169ef
--- /dev/null
+++ b/packages/xorg-app/xkbevd_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxkbfile virtual/libx11"
+
diff --git a/packages/xorg-app/xkbprint_1.0.1.bb b/packages/xorg-app/xkbprint_1.0.1.bb
new file mode 100644
index 0000000000..27bbe169ef
--- /dev/null
+++ b/packages/xorg-app/xkbprint_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxkbfile virtual/libx11"
+
diff --git a/packages/xorg-app/xkill_1.0.1.bb b/packages/xorg-app/xkill_1.0.1.bb
new file mode 100644
index 0000000000..e539dad1a2
--- /dev/null
+++ b/packages/xorg-app/xkill_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxmu"
+
diff --git a/packages/xorg-app/xload_1.0.1.bb b/packages/xorg-app/xload_1.0.1.bb
new file mode 100644
index 0000000000..2bdb000c5d
--- /dev/null
+++ b/packages/xorg-app/xload_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxt"
+
diff --git a/packages/xorg-app/xlogo_1.0.1.bb b/packages/xorg-app/xlogo_1.0.1.bb
new file mode 100644
index 0000000000..6090eba216
--- /dev/null
+++ b/packages/xorg-app/xlogo_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxprintutil libxp libxrender libxft libxext libxt"
+
diff --git a/packages/xorg-app/xlsatoms_1.0.1.bb b/packages/xorg-app/xlsatoms_1.0.1.bb
new file mode 100644
index 0000000000..e539dad1a2
--- /dev/null
+++ b/packages/xorg-app/xlsatoms_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxmu"
+
diff --git a/packages/xorg-app/xlsclients_1.0.1.bb b/packages/xorg-app/xlsclients_1.0.1.bb
new file mode 100644
index 0000000000..e539dad1a2
--- /dev/null
+++ b/packages/xorg-app/xlsclients_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxmu"
+
diff --git a/packages/xorg-app/xmag_1.0.1.bb b/packages/xorg-app/xmag_1.0.1.bb
new file mode 100644
index 0000000000..2bdb000c5d
--- /dev/null
+++ b/packages/xorg-app/xmag_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxt"
+
diff --git a/packages/xorg-app/xman_1.0.2.bb b/packages/xorg-app/xman_1.0.2.bb
new file mode 100644
index 0000000000..da18943dc2
--- /dev/null
+++ b/packages/xorg-app/xman_1.0.2.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxprintutil libxp libxt"
+RDEPENDS = " man"
+
+FILES_${PN} += " /usr/share/X11/xman.help"
diff --git a/packages/xorg-app/xmessage_1.0.1.bb b/packages/xorg-app/xmessage_1.0.1.bb
new file mode 100644
index 0000000000..91a36c7cf5
--- /dev/null
+++ b/packages/xorg-app/xmessage_1.0.1.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+DESCRIPTION = "xmessage displays a message or query in a window."
+
+DEPENDS += " libxaw libxt"
+
diff --git a/packages/xorg-app/xmh_1.0.1.bb b/packages/xorg-app/xmh_1.0.1.bb
new file mode 100644
index 0000000000..2bdb000c5d
--- /dev/null
+++ b/packages/xorg-app/xmh_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxt"
+
diff --git a/packages/xorg-app/xmore_1.0.1.bb b/packages/xorg-app/xmore_1.0.1.bb
new file mode 100644
index 0000000000..fcee260794
--- /dev/null
+++ b/packages/xorg-app/xmore_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxprintutil libxp libxt"
+
diff --git a/packages/xorg-app/xphelloworld_1.0.1.bb b/packages/xorg-app/xphelloworld_1.0.1.bb
new file mode 100644
index 0000000000..5226befdaa
--- /dev/null
+++ b/packages/xorg-app/xphelloworld_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxprintapputil libxaw libxprintutil libxt libxp"
+
diff --git a/packages/xorg-app/xplsprinters_1.0.1.bb b/packages/xorg-app/xplsprinters_1.0.1.bb
new file mode 100644
index 0000000000..c4a35b0e0a
--- /dev/null
+++ b/packages/xorg-app/xplsprinters_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxp libxprintutil virtual/libx11"
+
diff --git a/packages/xorg-app/xpr_1.0.1.bb b/packages/xorg-app/xpr_1.0.1.bb
new file mode 100644
index 0000000000..7b712390c6
--- /dev/null
+++ b/packages/xorg-app/xpr_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxmu virtual/libx11"
+
diff --git a/packages/xorg-app/xprehashprinterlist_1.0.1.bb b/packages/xorg-app/xprehashprinterlist_1.0.1.bb
new file mode 100644
index 0000000000..c2aa370998
--- /dev/null
+++ b/packages/xorg-app/xprehashprinterlist_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxp virtual/libx11"
+
diff --git a/packages/xorg-app/xrefresh_1.0.2.bb b/packages/xorg-app/xrefresh_1.0.2.bb
new file mode 100644
index 0000000000..aafaddcf4b
--- /dev/null
+++ b/packages/xorg-app/xrefresh_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11"
+
diff --git a/packages/xorg-app/xrx_1.0.1.bb b/packages/xorg-app/xrx_1.0.1.bb
new file mode 100644
index 0000000000..cf18e2e140
--- /dev/null
+++ b/packages/xorg-app/xrx_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw virtual/libx11 libxt libxext xtrans xproxymngproto libxau"
+
diff --git a/packages/xorg-app/xsetmode_1.0.0.bb b/packages/xorg-app/xsetmode_1.0.0.bb
new file mode 100644
index 0000000000..3c40475e91
--- /dev/null
+++ b/packages/xorg-app/xsetmode_1.0.0.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxi virtual/libx11"
+
diff --git a/packages/xorg-app/xsetpointer_1.0.0.bb b/packages/xorg-app/xsetpointer_1.0.0.bb
new file mode 100644
index 0000000000..3c40475e91
--- /dev/null
+++ b/packages/xorg-app/xsetpointer_1.0.0.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxi virtual/libx11"
+
diff --git a/packages/xorg-app/xsm_1.0.1.bb b/packages/xorg-app/xsm_1.0.1.bb
new file mode 100644
index 0000000000..8ed08c598a
--- /dev/null
+++ b/packages/xorg-app/xsm_1.0.1.bb
@@ -0,0 +1,7 @@
+require xorg-app-common.inc
+PE = "1"
+
+DESCRIPTION = "X Session Manager"
+
+DEPENDS += " libxaw libxt"
+
diff --git a/packages/xorg-app/xstdcmap_1.0.1.bb b/packages/xorg-app/xstdcmap_1.0.1.bb
new file mode 100644
index 0000000000..7b712390c6
--- /dev/null
+++ b/packages/xorg-app/xstdcmap_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxmu virtual/libx11"
+
diff --git a/packages/xorg-app/xtrap_1.0.2.bb b/packages/xorg-app/xtrap_1.0.2.bb
new file mode 100644
index 0000000000..18638ee1d2
--- /dev/null
+++ b/packages/xorg-app/xtrap_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11 libxtrap"
+
diff --git a/packages/xorg-app/xvidtune_1.0.1.bb b/packages/xorg-app/xvidtune_1.0.1.bb
new file mode 100644
index 0000000000..3ed47c024f
--- /dev/null
+++ b/packages/xorg-app/xvidtune_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxxf86vm libxt"
+
diff --git a/packages/xorg-app/xwd_1.0.1.bb b/packages/xorg-app/xwd_1.0.1.bb
new file mode 100644
index 0000000000..7b712390c6
--- /dev/null
+++ b/packages/xorg-app/xwd_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxmu virtual/libx11"
+
diff --git a/packages/xorg-app/xwininfo_1.0.2.bb b/packages/xorg-app/xwininfo_1.0.2.bb
new file mode 100644
index 0000000000..069dd30aa8
--- /dev/null
+++ b/packages/xorg-app/xwininfo_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxmu libxext virtual/libx11"
+
diff --git a/packages/xorg-app/xwud_1.0.1.bb b/packages/xorg-app/xwud_1.0.1.bb
new file mode 100644
index 0000000000..aafaddcf4b
--- /dev/null
+++ b/packages/xorg-app/xwud_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " virtual/libx11"
+
diff --git a/packages/xorg-data/xcursor-themes_1.0.1.bb b/packages/xorg-data/xcursor-themes_1.0.1.bb
new file mode 100644
index 0000000000..8cf822e56f
--- /dev/null
+++ b/packages/xorg-data/xcursor-themes_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-data-common.inc
+PE = "1"
+
+DEPENDS += " libxcursor"
+
diff --git a/packages/xorg-data/xkbdata_1.0.1.bb b/packages/xorg-data/xkbdata_1.0.1.bb
new file mode 100644
index 0000000000..9ab3729bc5
--- /dev/null
+++ b/packages/xorg-data/xkbdata_1.0.1.bb
@@ -0,0 +1,7 @@
+require xorg-data-common.inc
+PE = "1"
+
+RDEPENDS = "xkbcomp"
+
+FILES_${PN} += " /usr/share/X11/xkb"
+
diff --git a/packages/xorg-doc/xorg-doc-common.inc b/packages/xorg-doc/xorg-doc-common.inc
index 4c3d6e8987..75ac0f1205 100644
--- a/packages/xorg-doc/xorg-doc-common.inc
+++ b/packages/xorg-doc/xorg-doc-common.inc
@@ -3,10 +3,9 @@ HOMEPAGE = "http://www.x.org"
SECTION = "x11/docs"
LICENSE = "MIT-X"
-#DEPENDS = ""
XORG_PN = "${PN}"
-XORG_RELEASE = "${@["individual",bb.data.getVar('PV', d, 1)[0:7]+"/src"][bb.data.getVar('PV', d, 1)[0:4] == "X11R"]}"
-SRC_URI = "${XORG_MIRROR}/${XORG_RELEASE}/doc/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/data/${XORG_PN}-${PV}.tar.bz2"
+
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
diff --git a/packages/xorg-doc/xorg-docs_1.0.1.bb b/packages/xorg-doc/xorg-docs_1.0.1.bb
new file mode 100644
index 0000000000..df775f85b0
--- /dev/null
+++ b/packages/xorg-doc/xorg-docs_1.0.1.bb
@@ -0,0 +1,11 @@
+require xorg-doc-common.inc
+
+DESCRIPTION = "The documentation in this package is from xc/doc in the monolithic \
+source tree."
+
+DEPENDS += " intltool"
+
+PE = "1"
+
+FILES_${PN} += " /usr/share/X11/doc"
+
diff --git a/packages/xorg-doc/xorg-docs_1.2.bb b/packages/xorg-doc/xorg-docs_1.2.bb
new file mode 100644
index 0000000000..df775f85b0
--- /dev/null
+++ b/packages/xorg-doc/xorg-docs_1.2.bb
@@ -0,0 +1,11 @@
+require xorg-doc-common.inc
+
+DESCRIPTION = "The documentation in this package is from xc/doc in the monolithic \
+source tree."
+
+DEPENDS += " intltool"
+
+PE = "1"
+
+FILES_${PN} += " /usr/share/X11/doc"
+
diff --git a/packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb b/packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb
index 18a3ef964a..053ca2eaaa 100644
--- a/packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb
+++ b/packages/xorg-doc/xorg-sgml-doctools_1.1.1.bb
@@ -1,8 +1,4 @@
require xorg-doc-common.inc
PE = "1"
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
FILES_${PN} += " /usr/share/X11/sgml"
diff --git a/packages/xorg-doc/xorg-sgml-doctools_1.2.bb b/packages/xorg-doc/xorg-sgml-doctools_1.2.bb
index 18a3ef964a..053ca2eaaa 100644
--- a/packages/xorg-doc/xorg-sgml-doctools_1.2.bb
+++ b/packages/xorg-doc/xorg-sgml-doctools_1.2.bb
@@ -1,8 +1,4 @@
require xorg-doc-common.inc
PE = "1"
-#DESCRIPTION = ""
-
-#DEPENDS += " "
-
FILES_${PN} += " /usr/share/X11/sgml"
diff --git a/packages/xorg-driver/xf86-input-acecad_1.1.0.bb b/packages/xorg-driver/xf86-input-acecad_1.1.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-acecad_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-aiptek_1.0.1.bb b/packages/xorg-driver/xf86-input-aiptek_1.0.1.bb
new file mode 100644
index 0000000000..34a497438b
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-aiptek_1.0.1.bb
@@ -0,0 +1,2 @@
+require xorg-driver-input.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-input-calcomp_1.1.0.bb b/packages/xorg-driver/xf86-input-calcomp_1.1.0.bb
new file mode 100644
index 0000000000..34a497438b
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-calcomp_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-input.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-input-citron_2.2.0.bb b/packages/xorg-driver/xf86-input-citron_2.2.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-citron_2.2.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-digitaledge_1.1.0.bb b/packages/xorg-driver/xf86-input-digitaledge_1.1.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-digitaledge_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-dmc_1.1.0.bb b/packages/xorg-driver/xf86-input-dmc_1.1.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-dmc_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-dynapro_1.1.0.bb b/packages/xorg-driver/xf86-input-dynapro_1.1.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-dynapro_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-elo2300_1.1.0.bb b/packages/xorg-driver/xf86-input-elo2300_1.1.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-elo2300_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb b/packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb
new file mode 100644
index 0000000000..34a497438b
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-elographics_X11R7.0-1.0.0.5.bb
@@ -0,0 +1,2 @@
+require xorg-driver-input.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-input-fpit_1.1.0.bb b/packages/xorg-driver/xf86-input-fpit_1.1.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-fpit_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-hyperpen_1.1.0.bb b/packages/xorg-driver/xf86-input-hyperpen_1.1.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-hyperpen_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-jamstudio_1.1.0.bb b/packages/xorg-driver/xf86-input-jamstudio_1.1.0.bb
new file mode 100644
index 0000000000..34a497438b
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-jamstudio_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-input.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-input-joystick_1.1.0.bb b/packages/xorg-driver/xf86-input-joystick_1.1.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-joystick_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-magellan_1.1.0.bb b/packages/xorg-driver/xf86-input-magellan_1.1.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-magellan_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-magictouch_1.0.0.5.bb b/packages/xorg-driver/xf86-input-magictouch_1.0.0.5.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-magictouch_1.0.0.5.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-microtouch_1.1.0.bb b/packages/xorg-driver/xf86-input-microtouch_1.1.0.bb
new file mode 100644
index 0000000000..34a497438b
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-microtouch_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-input.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-input-mutouch_1.1.0.bb b/packages/xorg-driver/xf86-input-mutouch_1.1.0.bb
new file mode 100644
index 0000000000..34a497438b
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-mutouch_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-input.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-input-palmax_1.1.0.bb b/packages/xorg-driver/xf86-input-palmax_1.1.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-palmax_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-input-spaceorb_1.1.0.bb b/packages/xorg-driver/xf86-input-spaceorb_1.1.0.bb
new file mode 100644
index 0000000000..34a497438b
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-spaceorb_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-input.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-input-summa_1.1.0.bb b/packages/xorg-driver/xf86-input-summa_1.1.0.bb
new file mode 100644
index 0000000000..34a497438b
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-summa_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-input.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-input-tek4957_1.1.0.bb b/packages/xorg-driver/xf86-input-tek4957_1.1.0.bb
new file mode 100644
index 0000000000..34a497438b
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-tek4957_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-input.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-input-ur98_1.1.0.bb b/packages/xorg-driver/xf86-input-ur98_1.1.0.bb
new file mode 100644
index 0000000000..34a497438b
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-ur98_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-input.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-input-vmmouse_12.4.0.bb b/packages/xorg-driver/xf86-input-vmmouse_12.4.0.bb
new file mode 100644
index 0000000000..292d2804a8
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-vmmouse_12.4.0.bb
@@ -0,0 +1,7 @@
+require xorg-driver-input.inc
+PE = "1"
+
+DESCRIPTION = "The VMMouse driver enables support for the special VMMouse protocol \
+that is provided by VMware virtual machines to give absolute pointer \
+positioning. "
+
diff --git a/packages/xorg-driver/xf86-input-void_1.1.0.bb b/packages/xorg-driver/xf86-input-void_1.1.0.bb
new file mode 100644
index 0000000000..311caf6553
--- /dev/null
+++ b/packages/xorg-driver/xf86-input-void_1.1.0.bb
@@ -0,0 +1,3 @@
+require xorg-driver-input.inc
+PE = "1"
+
diff --git a/packages/xorg-driver/xf86-video-apm_1.1.1.bb b/packages/xorg-driver/xf86-video-apm_1.1.1.bb
new file mode 100644
index 0000000000..5f0ed183e6
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-apm_1.1.1.bb
@@ -0,0 +1,7 @@
+require xorg-driver-video.inc
+PE = "1"
+
+DESCRIPTION = "This is the Alliance Promotion driver for XFree86 4.0+"
+
+DEPENDS += " xf86rushproto"
+
diff --git a/packages/xorg-driver/xf86-video-ark_0.6.0.bb b/packages/xorg-driver/xf86-video-ark_0.6.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-ark_0.6.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-ast_0.81.0.bb b/packages/xorg-driver/xf86-video-ast_0.81.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-ast_0.81.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-chips_1.1.1.bb b/packages/xorg-driver/xf86-video-chips_1.1.1.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-chips_1.1.1.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-cirrus_1.1.0.bb b/packages/xorg-driver/xf86-video-cirrus_1.1.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-cirrus_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-cyrix_1.1.0.bb b/packages/xorg-driver/xf86-video-cyrix_1.1.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-cyrix_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-dummy_0.2.0.bb b/packages/xorg-driver/xf86-video-dummy_0.2.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-dummy_0.2.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-glint_1.1.1.bb b/packages/xorg-driver/xf86-video-glint_1.1.1.bb
new file mode 100644
index 0000000000..4b57f17b9e
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-glint_1.1.1.bb
@@ -0,0 +1,5 @@
+require xorg-driver-video.inc
+
+#DESCRIPTION = ""
+
+DEPENDS += " xf86dgaproto drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-i128_1.1.0.5.bb b/packages/xorg-driver/xf86-video-i128_1.1.0.5.bb
new file mode 100644
index 0000000000..acfc042123
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-i128_1.1.0.5.bb
@@ -0,0 +1,5 @@
+require xorg-driver-video.inc
+
+DESCRIPTION = "Number Nine I128 for X11"
+
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-i740_1.1.0.bb b/packages/xorg-driver/xf86-video-i740_1.1.0.bb
new file mode 100644
index 0000000000..4aca68edf6
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-i740_1.1.0.bb
@@ -0,0 +1,5 @@
+require xorg-driver-video.inc
+
+DESCRIPTION = "I740 for X11"
+
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-imstt_1.1.0.bb b/packages/xorg-driver/xf86-video-imstt_1.1.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-imstt_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-mga_1.4.1.bb b/packages/xorg-driver/xf86-video-mga_1.4.1.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-mga_1.4.1.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-neomagic_1.1.1.bb b/packages/xorg-driver/xf86-video-neomagic_1.1.1.bb
new file mode 100644
index 0000000000..b519e60e58
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-neomagic_1.1.1.bb
@@ -0,0 +1,8 @@
+require xorg-driver-video.inc
+
+PE = "1"
+
+DESCRIPTION = "X11 driver for NeoMagic 2200, 2160, 2097, 2093, 2090, 2070"
+
+DEPENDS += " xf86dgaproto"
+
diff --git a/packages/xorg-driver/xf86-video-s3virge_1.9.1.bb b/packages/xorg-driver/xf86-video-s3virge_1.9.1.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-s3virge_1.9.1.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-sisusb_0.8.1.bb b/packages/xorg-driver/xf86-video-sisusb_0.8.1.bb
new file mode 100644
index 0000000000..07af9eebcb
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-sisusb_0.8.1.bb
@@ -0,0 +1,6 @@
+require xorg-driver-video.inc
+
+PE = "1"
+
+DEPENDS += " xineramaproto xf86miscproto"
+
diff --git a/packages/xorg-driver/xf86-video-sunbw2_1.1.0.bb b/packages/xorg-driver/xf86-video-sunbw2_1.1.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-sunbw2_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-suncg14_1.1.0.bb b/packages/xorg-driver/xf86-video-suncg14_1.1.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-suncg14_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-suncg3_1.1.0.bb b/packages/xorg-driver/xf86-video-suncg3_1.1.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-suncg3_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-suncg6_1.1.0.bb b/packages/xorg-driver/xf86-video-suncg6_1.1.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-suncg6_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-sunffb_1.1.0.bb b/packages/xorg-driver/xf86-video-sunffb_1.1.0.bb
new file mode 100644
index 0000000000..0251123fc8
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-sunffb_1.1.0.bb
@@ -0,0 +1,4 @@
+require xorg-driver-video.inc
+PE = "1"
+
+DEPENDS += " drm xf86driproto"
diff --git a/packages/xorg-driver/xf86-video-sunleo_1.1.0.bb b/packages/xorg-driver/xf86-video-sunleo_1.1.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-sunleo_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-suntcx_1.1.0.bb b/packages/xorg-driver/xf86-video-suntcx_1.1.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-suntcx_1.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xf86-video-tga_1.1.0.bb b/packages/xorg-driver/xf86-video-tga_1.1.0.bb
new file mode 100644
index 0000000000..d3cf65f034
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-tga_1.1.0.bb
@@ -0,0 +1,8 @@
+require xorg-driver-video.inc
+
+PE = "1"
+
+DESCRIPTION = "DEC 21030 X11 driver"
+
+DEPENDS += " xf86dgaproto"
+
diff --git a/packages/xorg-driver/xf86-video-v4l_0.1.1.bb b/packages/xorg-driver/xf86-video-v4l_0.1.1.bb
new file mode 100644
index 0000000000..9ebb9ad1f6
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-v4l_0.1.1.bb
@@ -0,0 +1,5 @@
+require xorg-driver-video.inc
+
+PE = "1"
+
+DESCRIPTION = "Video 4 Linux adaptor driver for X11"
diff --git a/packages/xorg-driver/xf86-video-vga_4.1.0.bb b/packages/xorg-driver/xf86-video-vga_4.1.0.bb
new file mode 100644
index 0000000000..c2b6b7608a
--- /dev/null
+++ b/packages/xorg-driver/xf86-video-vga_4.1.0.bb
@@ -0,0 +1,2 @@
+require xorg-driver-video.inc
+PE = "1"
diff --git a/packages/xorg-driver/xorg-driver-common.inc b/packages/xorg-driver/xorg-driver-common.inc
index 3b3c205e9e..76bc89fa10 100644
--- a/packages/xorg-driver/xorg-driver-common.inc
+++ b/packages/xorg-driver/xorg-driver-common.inc
@@ -7,8 +7,7 @@ PR = "r2"
DEPENDS = "randrproto xorg-server xproto"
XORG_PN = "${PN}"
-XORG_RELEASE = "${@["individual",bb.data.getVar('PV', d, 1)[0:7]+"/src"][bb.data.getVar('PV', d, 1)[0:4] == "X11R"]}"
-SRC_URI = "${XORG_MIRROR}/${XORG_RELEASE}/driver/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/data/${XORG_PN}-${PV}.tar.bz2"
S = "${WORKDIR}/${XORG_PN}-${PV}"
diff --git a/packages/xorg-font/font-adobe-100dpi_1.0.0.bb b/packages/xorg-font/font-adobe-100dpi_1.0.0.bb
new file mode 100644
index 0000000000..e1bdcb5e7a
--- /dev/null
+++ b/packages/xorg-font/font-adobe-100dpi_1.0.0.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+PE = "1"
+
diff --git a/packages/xorg-font/font-adobe-75dpi_1.0.0.bb b/packages/xorg-font/font-adobe-75dpi_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-adobe-75dpi_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb b/packages/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb
new file mode 100644
index 0000000000..0799b8a97e
--- /dev/null
+++ b/packages/xorg-font/font-adobe-utopia-100dpi_1.0.1.bb
@@ -0,0 +1,5 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "Adobe typeface software"
+
+PE = "1"
diff --git a/packages/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb b/packages/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb
new file mode 100644
index 0000000000..6e20eb97d8
--- /dev/null
+++ b/packages/xorg-font/font-adobe-utopia-75dpi_1.0.1.bb
@@ -0,0 +1,6 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "Adobe typeface software"
+
+PE = "1"
+
diff --git a/packages/xorg-font/font-adobe-utopia-type1_1.0.1.bb b/packages/xorg-font/font-adobe-utopia-type1_1.0.1.bb
new file mode 100644
index 0000000000..6e20eb97d8
--- /dev/null
+++ b/packages/xorg-font/font-adobe-utopia-type1_1.0.1.bb
@@ -0,0 +1,6 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "Adobe typeface software"
+
+PE = "1"
+
diff --git a/packages/xorg-font/font-alias_1.0.1.bb b/packages/xorg-font/font-alias_1.0.1.bb
new file mode 100644
index 0000000000..90eec26a57
--- /dev/null
+++ b/packages/xorg-font/font-alias_1.0.1.bb
@@ -0,0 +1,8 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "X font aliases."
+
+DEPENDS = "virtual/xserver font-util"
+RDEPENDS = "encodings font-util"
+
+PE = "1" \ No newline at end of file
diff --git a/packages/xorg-font/font-arabic-misc_1.0.0.bb b/packages/xorg-font/font-arabic-misc_1.0.0.bb
new file mode 100644
index 0000000000..6171333d6a
--- /dev/null
+++ b/packages/xorg-font/font-arabic-misc_1.0.0.bb
@@ -0,0 +1,7 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "100dpi, 24 point (approximately) font to minimally support (almost) all \
+of the Arabic characters available in Unicode."
+
+PE = "1"
+
diff --git a/packages/xorg-font/font-bh-100dpi_1.0.0.bb b/packages/xorg-font/font-bh-100dpi_1.0.0.bb
new file mode 100644
index 0000000000..f8fe553c62
--- /dev/null
+++ b/packages/xorg-font/font-bh-100dpi_1.0.0.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+
+PE = "1"
diff --git a/packages/xorg-font/font-bh-75dpi_1.0.0.bb b/packages/xorg-font/font-bh-75dpi_1.0.0.bb
new file mode 100644
index 0000000000..f8fe553c62
--- /dev/null
+++ b/packages/xorg-font/font-bh-75dpi_1.0.0.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+
+PE = "1"
diff --git a/packages/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb b/packages/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb
new file mode 100644
index 0000000000..f8fe553c62
--- /dev/null
+++ b/packages/xorg-font/font-bh-lucidatypewriter-100dpi_1.0.0.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+
+PE = "1"
diff --git a/packages/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb b/packages/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb
new file mode 100644
index 0000000000..f8fe553c62
--- /dev/null
+++ b/packages/xorg-font/font-bh-lucidatypewriter-75dpi_1.0.0.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+
+PE = "1"
diff --git a/packages/xorg-font/font-bh-ttf_1.0.0.bb b/packages/xorg-font/font-bh-ttf_1.0.0.bb
new file mode 100644
index 0000000000..f8fe553c62
--- /dev/null
+++ b/packages/xorg-font/font-bh-ttf_1.0.0.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+
+PE = "1"
diff --git a/packages/xorg-font/font-bh-type1_1.0.0.bb b/packages/xorg-font/font-bh-type1_1.0.0.bb
new file mode 100644
index 0000000000..f8fe553c62
--- /dev/null
+++ b/packages/xorg-font/font-bh-type1_1.0.0.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+
+PE = "1"
diff --git a/packages/xorg-font/font-bitstream-100dpi_1.0.0.bb b/packages/xorg-font/font-bitstream-100dpi_1.0.0.bb
new file mode 100644
index 0000000000..f8fe553c62
--- /dev/null
+++ b/packages/xorg-font/font-bitstream-100dpi_1.0.0.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+
+PE = "1"
diff --git a/packages/xorg-font/font-bitstream-75dpi_1.0.0.bb b/packages/xorg-font/font-bitstream-75dpi_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-bitstream-75dpi_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-bitstream-speedo_1.0.0.bb b/packages/xorg-font/font-bitstream-speedo_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-bitstream-speedo_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-bitstream-type1_1.0.0.bb b/packages/xorg-font/font-bitstream-type1_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-bitstream-type1_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-cronyx-cyrillic_1.0.0.bb b/packages/xorg-font/font-cronyx-cyrillic_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-cronyx-cyrillic_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-cursor-misc_1.0.0.bb b/packages/xorg-font/font-cursor-misc_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-cursor-misc_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-daewoo-misc_1.0.0.bb b/packages/xorg-font/font-daewoo-misc_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-daewoo-misc_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-dec-misc_1.0.0.bb b/packages/xorg-font/font-dec-misc_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-dec-misc_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-ibm-type1_1.0.0.bb b/packages/xorg-font/font-ibm-type1_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-ibm-type1_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-isas-misc_1.0.0.bb b/packages/xorg-font/font-isas-misc_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-isas-misc_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-jis-misc_1.0.0.bb b/packages/xorg-font/font-jis-misc_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-jis-misc_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-micro-misc_1.0.0.bb b/packages/xorg-font/font-micro-misc_1.0.0.bb
new file mode 100644
index 0000000000..383d16c799
--- /dev/null
+++ b/packages/xorg-font/font-micro-misc_1.0.0.bb
@@ -0,0 +1,4 @@
+require xorg-font-common.inc
+PE = "1"
+
+EXTRA_OECONF = "--disable-iso8859-2 --disable-iso8859-3 --disable-iso8859-4 --disable-iso8859-5 --disable-iso8859-6 --disable-iso8859-7 --disable-iso8859-8 --disable-iso8859-9 --disable-iso8859-10 --disable-iso8859-11 --disable-iso8859-12 --disable-iso8859-13 --disable-iso8859-14 --disable-iso8859-15 --disable-iso8859-16 --disable-jisx0201 --disable-koi8-r"
diff --git a/packages/xorg-font/font-misc-cyrillic_1.0.0.bb b/packages/xorg-font/font-misc-cyrillic_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-misc-cyrillic_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-misc-ethiopic_1.0.0.bb b/packages/xorg-font/font-misc-ethiopic_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-misc-ethiopic_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-misc-meltho_1.0.0.bb b/packages/xorg-font/font-misc-meltho_1.0.0.bb
new file mode 100644
index 0000000000..719a443b51
--- /dev/null
+++ b/packages/xorg-font/font-misc-meltho_1.0.0.bb
@@ -0,0 +1,5 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "These fonts are designed for the display of Syriac text."
+PE = "1"
+
diff --git a/packages/xorg-font/font-mutt-misc_1.0.0.bb b/packages/xorg-font/font-mutt-misc_1.0.0.bb
new file mode 100644
index 0000000000..a5ded3d3cc
--- /dev/null
+++ b/packages/xorg-font/font-mutt-misc_1.0.0.bb
@@ -0,0 +1,7 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "Provides a 12pt, 100dpi proportional font with many of \
+the glyphs needed for Unicode text."
+
+PE = "1"
+
diff --git a/packages/xorg-font/font-schumacher-misc_1.0.0.bb b/packages/xorg-font/font-schumacher-misc_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-schumacher-misc_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-screen-cyrillic_1.0.0.bb b/packages/xorg-font/font-screen-cyrillic_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-screen-cyrillic_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-sony-misc_1.0.0.bb b/packages/xorg-font/font-sony-misc_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-sony-misc_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-sun-misc_1.0.0.bb b/packages/xorg-font/font-sun-misc_1.0.0.bb
new file mode 100644
index 0000000000..60ef06fba0
--- /dev/null
+++ b/packages/xorg-font/font-sun-misc_1.0.0.bb
@@ -0,0 +1,2 @@
+require xorg-font-common.inc
+PE = "1"
diff --git a/packages/xorg-font/font-util-native_1.0.1.bb b/packages/xorg-font/font-util-native_1.0.1.bb
new file mode 100644
index 0000000000..8db0b71898
--- /dev/null
+++ b/packages/xorg-font/font-util-native_1.0.1.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "X font utils."
+SECTION = "x11/fonts"
+LICENSE = "MIT-X"
+
+S="${WORKDIR}/font-util-${PV}"
+
+DEPENDS = "bdftopcf-native"
+
+PE = "1"
+
+SRC_URI = "${XORG_MIRROR}/X11R7.1/src/font/font-util-${PV}.tar.gz"
+
+inherit native autotools pkgconfig
diff --git a/packages/xorg-font/font-util_1.0.1.bb b/packages/xorg-font/font-util_1.0.1.bb
new file mode 100644
index 0000000000..915c40cd5c
--- /dev/null
+++ b/packages/xorg-font/font-util_1.0.1.bb
@@ -0,0 +1,9 @@
+require xorg-font-common.inc
+
+DESCRIPTION = "X font utils."
+
+DEPENDS = "encodings"
+RDEPENDS = "mkfontdir mkfontscale encodings"
+
+PR = "r1"
+PE = "1"
diff --git a/packages/xorg-font/font-winitzki-cyrillic_1.0.0.bb b/packages/xorg-font/font-winitzki-cyrillic_1.0.0.bb
new file mode 100644
index 0000000000..f8fe553c62
--- /dev/null
+++ b/packages/xorg-font/font-winitzki-cyrillic_1.0.0.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+
+PE = "1"
diff --git a/packages/xorg-font/font-xfree86-type1_1.0.0.bb b/packages/xorg-font/font-xfree86-type1_1.0.0.bb
new file mode 100644
index 0000000000..f8fe553c62
--- /dev/null
+++ b/packages/xorg-font/font-xfree86-type1_1.0.0.bb
@@ -0,0 +1,3 @@
+require xorg-font-common.inc
+
+PE = "1"
diff --git a/packages/xorg-font/xfonts-xorg_6.8.bb b/packages/xorg-font/xfonts-xorg_6.8.bb
index f6710dcd5b..f8a6a76964 100644
--- a/packages/xorg-font/xfonts-xorg_6.8.bb
+++ b/packages/xorg-font/xfonts-xorg_6.8.bb
@@ -7,7 +7,7 @@ SRC_URI = "${FREEDESKTOP_CVS}/xorg;module=xc;tag=XORG-6_8_0;method=pserver \
file://lexer.patch;patch=1"
-PACKAGES = "${PN}-75dpi ${PN}-100dpi ${PN}-type1 ${PN}-cyrillic ${PN}-ttf ${PN}"
+PACKAGES = "${PN}-dbg ${PN}-75dpi ${PN}-100dpi ${PN}-type1 ${PN}-cyrillic ${PN}-ttf ${PN}"
FILES_${PN}-75dpi = "${libdir}/X11/fonts/75dpi"
FILES_${PN}-100dpi = "${libdir}/X11/fonts/100dpi"
FILES_${PN}-type1 = "${libdir}/X11/fonts/Type1"
diff --git a/packages/xorg-font/xorg-font-common.inc b/packages/xorg-font/xorg-font-common.inc
index 148437a3e3..c2977c8db9 100644
--- a/packages/xorg-font/xorg-font-common.inc
+++ b/packages/xorg-font/xorg-font-common.inc
@@ -6,8 +6,7 @@ DEPENDS = " encodings font-alias font-util-native mkfontdir-native mkfontscale-n
RDEPENDS = "encodings font-util font-alias"
XORG_PN = "${PN}"
-XORG_RELEASE = "${@["individual",bb.data.getVar('PV', d, 1)[0:7]+"/src"][bb.data.getVar('PV', d, 1)[0:4] == "X11R"]}"
-SRC_URI = "${XORG_MIRROR}/${XORG_RELEASE}/font/${XORG_PN}-${PV}.tar.bz2"
+SRC_URI = "${XORG_MIRROR}/individual/font/${XORG_PN}-${PV}.tar.bz2"
S = "${WORKDIR}/${XORG_PN}-${PV}"
inherit autotools pkgconfig
diff --git a/packages/xorg-xserver/files/.mtn2git_empty b/packages/xorg-xserver/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/xorg-xserver/files/.mtn2git_empty
diff --git a/packages/xorg-xserver/files/xorg-avr32-support.diff b/packages/xorg-xserver/files/xorg-avr32-support.diff
new file mode 100644
index 0000000000..dd7d379010
--- /dev/null
+++ b/packages/xorg-xserver/files/xorg-avr32-support.diff
@@ -0,0 +1,19 @@
+--- /tmp/servermd.h 2007-09-30 17:27:22.310911628 +0200
++++ xorg-server-1.4/include/servermd.h 2007-09-30 17:28:25.297799199 +0200
+@@ -130,6 +130,16 @@
+
+ #endif /* vax */
+
++#ifdef __avr32__
++
++#define IMAGE_BYTE_ORDER MSBFirst
++#define BITMAP_BIT_ORDER MSBFirst
++#define GLYPHPADBYTES 4
++#define GETLEFTBITS_ALIGNMENT 1
++#define AVOID_MEMORY_READ
++
++#endif /* __avr32__ */
++
+ #ifdef __arm32__
+
+ #define IMAGE_BYTE_ORDER LSBFirst
diff --git a/packages/xorg-xserver/xorg-xserver-common.inc b/packages/xorg-xserver/xorg-xserver-common.inc
index 2e8535ef30..819be742d4 100644
--- a/packages/xorg-xserver/xorg-xserver-common.inc
+++ b/packages/xorg-xserver/xorg-xserver-common.inc
@@ -13,7 +13,7 @@ resourceproto xineramaproto xtrans evieext libxkbfile libxfont libxau \
libfontenc libxdmcp libxxf86vm libxaw libxmu libxt libxpm libxext libx11 \
libxkbui libxxf86misc libxi libdmx libxtst libxres mesa"
-REPENDS="rgb"
+RDEPENDS_${PN} = "rgb"
XORG_PN = "xorg-server"
SRC_URI = "${XORG_MIRROR}/individual/xserver/${XORG_PN}-${PV}.tar.bz2 \
diff --git a/packages/xorg-xserver/xserver-kdrive-1.3.0.0/tosa-fbdev.patch b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/tosa-fbdev.patch
new file mode 100644
index 0000000000..a935bc57de
--- /dev/null
+++ b/packages/xorg-xserver/xserver-kdrive-1.3.0.0/tosa-fbdev.patch
@@ -0,0 +1,13 @@
+--- xorg-server-1.3.0.0/hw/kdrive/fbdev/fbdev.c.old 2007-12-24 04:54:13.000000000 -0600
++++ xorg-server-1.3.0.0/hw/kdrive/fbdev/fbdev.c 2007-12-25 01:13:27.000000000 -0600
+@@ -357,10 +357,7 @@ fbdevMapFramebuffer (KdScreenInfo *scree
+ KdMouseMatrix m;
+ FbdevPriv *priv = screen->card->driver;
+
+- if (scrpriv->randr != RR_Rotate_0 || priv->Have18Bpp)
+ scrpriv->shadow = TRUE;
+- else
+- scrpriv->shadow = FALSE;
+
+ KdComputeMouseMatrix (&m, scrpriv->randr, screen->width, screen->height);
+
diff --git a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb
index 368b421650..71d0eccba8 100644
--- a/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb
+++ b/packages/xorg-xserver/xserver-kdrive_1.3.0.0.bb
@@ -3,7 +3,7 @@ require xserver-kdrive-common.inc
DEPENDS += "libxkbfile libxcalibrate"
PE = "1"
-PR = "r21"
+PR = "r23"
SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
${KDRIVE_COMMON_PATCHES} \
@@ -29,6 +29,13 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
file://03-xglamo-no-vesa.patch;patch=1 \
"
+SRC_URI_append_avr32 = " \
+ file://xorg-avr32-support.diff;patch=1 \
+"
+
+SRC_URI_append_tosa = "file://tosa-fbdev.patch;patch=1"
+PACKAGE_ARCH_xserver-kdrive-fbdev_tosa = "${MACHINE_ARCH}"
+
S = "${WORKDIR}/xorg-server-${PV}"
W100_OECONF = "--disable-w100"
diff --git a/packages/xorg-xserver/xserver-kdrive_1.4.bb b/packages/xorg-xserver/xserver-kdrive_1.4.bb
index 87880c9ef8..f2d9810ec4 100644
--- a/packages/xorg-xserver/xserver-kdrive_1.4.bb
+++ b/packages/xorg-xserver/xserver-kdrive_1.4.bb
@@ -1,8 +1,9 @@
require xserver-kdrive-common.inc
-DEPENDS += "libxkbfile libxcalibrate pixman"
+DEPENDS += "hal libxkbfile libxcalibrate pixman"
PE = "1"
+PR = "r1"
SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
${KDRIVE_COMMON_PATCHES} \
@@ -18,7 +19,8 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
file://xcalibrate-new-input-world-order.patch;patch=1 \
file://tslib-default-device.patch;patch=1 \
file://fbdev-evdev.patch;patch=1 \
- "
+ file://xorg-avr32-support.diff;patch=1 \
+ "
S = "${WORKDIR}/xorg-server-${PV}"
diff --git a/packages/xrestop/xrestop_0.4.bb b/packages/xrestop/xrestop_0.4.bb
index 40396a2362..0ecf39a84b 100644
--- a/packages/xrestop/xrestop_0.4.bb
+++ b/packages/xrestop/xrestop_0.4.bb
@@ -1,5 +1,8 @@
+DESCRIPTION = "top-like statistics of X11 server resource usage by clients"
+SECTION = "x11/utils"
HOMEPAGE = "http://www.freedesktop.org/wiki/Software/xrestop"
LICENSE = "GPL"
+PR = "r1"
DEPENDS = "libxres libxext virtual/libx11"
diff --git a/packages/xscreensaver/xscreensaver-4.22/configure.in-includedir.patch b/packages/xscreensaver/xscreensaver-4.22/configure.in-includedir.patch
new file mode 100644
index 0000000000..723d8bd956
--- /dev/null
+++ b/packages/xscreensaver/xscreensaver-4.22/configure.in-includedir.patch
@@ -0,0 +1,72 @@
+--- xscreensaver-4.22/configure.in.orig 2007-12-23 18:33:43.000000000 +0000
++++ xscreensaver-4.22/configure.in 2007-12-23 18:35:33.000000000 +0000
+@@ -944,9 +944,6 @@
+ #
+ AC_DEFUN(AC_CHECK_X_HEADER, [
+ ac_save_CPPFLAGS="$CPPFLAGS"
+- if test \! -z "$includedir" ; then
+- CPPFLAGS="$CPPFLAGS -I$includedir"
+- fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ AC_CHECK_HEADER([$1],[$2],[$3],[$4])
+ CPPFLAGS="$ac_save_CPPFLAGS"])
+@@ -955,9 +952,6 @@
+ #
+ AC_DEFUN(AC_EGREP_X_HEADER, [
+ ac_save_CPPFLAGS="$CPPFLAGS"
+- if test \! -z "$includedir" ; then
+- CPPFLAGS="$CPPFLAGS -I$includedir"
+- fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ AC_EGREP_HEADER([$1], [$2], [$3], [$4])
+ CPPFLAGS="$ac_save_CPPFLAGS"])
+@@ -966,9 +960,6 @@
+ #
+ AC_DEFUN(AC_TRY_X_COMPILE, [
+ ac_save_CPPFLAGS="$CPPFLAGS"
+- if test \! -z "$includedir" ; then
+- CPPFLAGS="$CPPFLAGS -I$includedir"
+- fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ AC_TRY_COMPILE([$1], [$2], [$3], [$4])
+ CPPFLAGS="$ac_save_CPPFLAGS"])
+@@ -982,9 +973,6 @@
+ ac_save_LDFLAGS="$LDFLAGS"
+ # ac_save_LIBS="$LIBS"
+
+- if test \! -z "$includedir" ; then
+- CPPFLAGS="$CPPFLAGS -I$includedir"
+- fi
+ # note: $X_CFLAGS includes $x_includes
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+@@ -1005,9 +993,6 @@
+ #
+ AC_DEFUN(AC_TRY_X_RUN, [
+ ac_save_CPPFLAGS="$CPPFLAGS"
+- if test \! -z "$includedir" ; then
+- CPPFLAGS="$CPPFLAGS -I$includedir"
+- fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+ AC_TRY_RUN([$1], [$2], [$3], [$4])
+ CPPFLAGS="$ac_save_CPPFLAGS"])
+@@ -2763,9 +2748,6 @@
+ EOF
+
+ ac_save_CPPFLAGS="$CPPFLAGS"
+- if test \! -z "$includedir" ; then
+- CPPFLAGS="$CPPFLAGS -I$includedir"
+- fi
+ CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+ mglv=`(eval "$ac_cpp conftest.$ac_ext") 2>&AC_FD_CC | grep configure:`
+@@ -3395,9 +3377,6 @@
+ DEPEND_DEFINES=
+
+
+-if test \! -z "$includedir" ; then
+- INCLUDES="$INCLUDES -I$includedir"
+-fi
+
+ if test \! -z "$libdir" ; then
+ LDFLAGS="$LDFLAGS -L$libdir"
diff --git a/packages/xscreensaver/xscreensaver_4.22.bb b/packages/xscreensaver/xscreensaver_4.22.bb
index 6c2776d6aa..cac3776724 100644
--- a/packages/xscreensaver/xscreensaver_4.22.bb
+++ b/packages/xscreensaver/xscreensaver_4.22.bb
@@ -8,9 +8,12 @@ SECTION = "x11-misc"
LICENSE = "BSD"
DEPENDS = "intltool virtual/libx11 gtk+ libxml2 libglade"
+PR = "r1"
+
SRC_URI = "http://www.jwz.org/xscreensaver/xscreensaver-${PV}.tar.gz \
file://fixes.patch;patch=1 \
file://configure.in.patch;patch=1 \
+ file://configure.in-includedir.patch;patch=1 \
file://XScreenSaver"
# xscreensaver-demo is a glade app
@@ -35,6 +38,8 @@ FILES_xscreensaver-extra="${bindir}/xscreensaver-getimage*"
do_configure_prepend() {
sed -i 's:GTK_DATADIR="$GTK_DATADIR/share":GTK_DATADIR="${datadir}":' ${S}/configure.in
+
+ export includedir="/lib"
}
do_compile() {
diff --git a/packages/xserver-common/files/unbreak-simpad.patch b/packages/xserver-common/files/unbreak-simpad.patch
new file mode 100644
index 0000000000..7f557c317d
--- /dev/null
+++ b/packages/xserver-common/files/unbreak-simpad.patch
@@ -0,0 +1,18 @@
+--- xserver-common-1.18/X11/Xinit.d/12keymap.org 2007-08-24 14:14:31.000000000 +0300
++++ xserver-common-1.18/X11/Xinit.d/12keymap 2007-12-22 15:06:52.000000000 +0200
+@@ -15,14 +15,11 @@
+ "Sharp-Collie")
+ xmodmap - < /etc/X11/collie.xmodmap
+ ;;
+- "Simpad")
+- xmodmap - < /etc/X11/simpad.xmodmap
+- ;;
+ "HP iPAQ h6300")
+ xmodmap - < /etc/X11/h6300.xmodmap
+ ;;
+ # All the rest of keyboardless PDA machines use common buttonmap
+- "HP iPAQ"* | "Asus MyPal"*)
++ "Simpad" | "HP iPAQ"* | "Asus MyPal"*)
+ xmodmap - < /etc/X11/keyboardless.xmodmap
+ ;;
+ esac
diff --git a/packages/xserver-common/xserver-common_1.18.bb b/packages/xserver-common/xserver-common_1.18.bb
index a30a37c893..bf7b049939 100644
--- a/packages/xserver-common/xserver-common_1.18.bb
+++ b/packages/xserver-common/xserver-common_1.18.bb
@@ -2,14 +2,14 @@ DESCRIPTION = "Common X11 scripts and support files"
LICENSE = "GPL"
SECTION = "x11"
RDEPENDS_${PN} = "xmodmap xrandr xdpyinfo"
-PR = "r0"
+PR = "r1"
PACKAGE_ARCH = "all"
# we are using a gpe-style Makefile
inherit gpe
-SRC_URI_append = " file://setDPI.sh "
+SRC_URI_append = " file://unbreak-simpad.patch;patch=1 file://setDPI.sh "
do_install_append() {
install -m 0755 "${WORKDIR}/setDPI.sh" "${D}/etc/X11/Xinit.d/50setdpi"
diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver b/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver
index 99a4138473..f92b983788 100644
--- a/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver
+++ b/packages/xserver-kdrive-common/xserver-kdrive-common/openmoko/Xserver
@@ -99,6 +99,9 @@ case `module_id` in
ARGS="$ARGS -dpi 170 -screen 240x320 -hide-cursor -root-ppm /usr/share/pixmaps/xsplash-qvga.ppm" ;;
"Nokia N800")
ARGS="$ARGS -br -dpi 225 -screen 800x480x16 -mouse tslib" ;;
+ "Freescale MX21ADS")
+ # That's what /proc/cpuinfo shows as hardware on the chumby
+ ARGS="$ARGS -dpi 121 -screen 320x240 -hide-cursor -mouse tslib -root-ppm /usr/share/pixmaps/xsplash-qvga.ppm" ;;
*)
# It is a device we do not know about, in which case we force
# kdrive to use the current framebuffer geometry -- otherwise
@@ -118,4 +121,4 @@ fi
DISPLAY=':0'
-exec xinit /etc/X11/Xsession -- $XSERVER $DISPLAY $ARGS $*
+exec xinit /etc/X11/Xsession -- $XSERVER $DISPLAY $ARGS $* >/tmp/x.log 2>&1
diff --git a/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb b/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb
index db50c6c1c4..ef55e30c09 100644
--- a/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb
+++ b/packages/xserver-kdrive-common/xserver-kdrive-common_0.1.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Common X11 scripts"
LICENSE = "GPL"
SECTION = "x11"
RDEPENDS_${PN} = "xmodmap libxrandr xdpyinfo xtscal xinit"
-PR = "r24"
+PR = "r26"
SRC_URI = "\
file://Xdefaults \
diff --git a/packages/zaurus-updater/zaurus-updater.bb b/packages/zaurus-updater/zaurus-updater.bb
index ecf713d32c..052560dcc9 100644
--- a/packages/zaurus-updater/zaurus-updater.bb
+++ b/packages/zaurus-updater/zaurus-updater.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Encrypted shellscript for the Zaurus ROM update"
DEPENDS = "encdec-updater-native"
LICENSE = "zaurus-updater"
-PR = "r17"
+PR = "r20"
PACKAGES = ""
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -11,6 +11,10 @@ SRC_URI = "file://updater.sh \
file://gnu-tar.gz"
S = "${WORKDIR}"
+do_configure() {
+ sed -i "s/ZAURUS_UPDATER_VERSION/${PR}/" "${S}/updater.sh"
+}
+
do_compile() {
encdec-updater -e updater.sh
}
diff --git a/packages/zaurus-updater/zaurus-updater/updater.sh b/packages/zaurus-updater/zaurus-updater/updater.sh
index 26848cd5a7..22d4b3914d 100644
--- a/packages/zaurus-updater/zaurus-updater/updater.sh
+++ b/packages/zaurus-updater/zaurus-updater/updater.sh
@@ -34,6 +34,17 @@
# - Reformatted file - please use spaces not tabs
# - "version check" is only on Tosa and Poodle - breaks other machines
#
+# 2007.12.23 Matthias 'CoreDump' Hentges
+# - Fix kernel install on spitz machines
+# - Unify format of do_flashing()...
+# - Display ${PR} of zaurus-updater.bb to the user
+# - Polish HDD installer messages
+#
+# 2007.12.25 Matthias 'CoreDump' Hentges
+# -Add support for installing / updating u-boot
+
+# Set to "yes" to enable
+ENABLE_UBOOT_UPDATER="no"
DATAPATH=$1
TMPPATH=/tmp/update
@@ -120,16 +131,19 @@ check_for_tar()
do_rootfs_extraction()
{
UNPACKED_ROOTFS=1
- echo 'HDD root file system'
+ echo 'Installing HDD root file system'
if [ ! -f /hdd1/NotAvailable ]; then
umount /hdd1
fi
- echo 'Now formatting...'
+ echo -n '* Now formatting...'
mke2fs $MKE2FSOPT /dev/${IDE1}1 > /dev/null 2>&1
e2fsck -p /dev/${IDE1}1 > /dev/null
if [ "$?" != "0" ]; then
+ echo "FAILED"
echo "Error: Unable to create filesystem on microdrive!"
exit "$?"
+ else
+ echo "Done"
fi
mount -t $LINUXFMT -o noatime /dev/${IDE1}1 /hdd1
@@ -139,14 +153,17 @@ do_rootfs_extraction()
fi
cd /hdd1
- echo 'Now extracting...'
+ echo -n '* Now extracting (this can take over 5m)...'
gzip -dc $DATAPATH/$TARGETFILE | $TARBIN xf -
if [ "$?" != "0" ]; then
+ echo "FAILED"
echo "Error: Unable to extract root filesystem archive!"
exit "$?"
+ else
+ echo "Done"
fi
- echo 'Done.'
+ echo 'HDD Installation Finished.'
# remount as RO
cd /
@@ -156,60 +173,67 @@ do_rootfs_extraction()
do_flashing()
{
- if [ $DATASIZE -gt `printf "%d" $MTD_PART_SIZE` ]
- then
- echo "Error: File is too big to flash!"
- echo "$FLASH_TYPE: [$DATASIZE] > [`printf "%d" ${MTD_PART_SIZE}`]"
- return
- fi
-
- if [ "$ZAURUS" = "tosa" ] || [ "$ZAURUS" = "poodle" ]
- then
- #check version
- /sbin/bcut -s 6 -o $TMPDATA $TMPHEAD
- if [ `cat $TMPDATA` != "SHARP!" ] > /dev/null 2>&1
- then
- #no version info...
- rm -f $TMPHEAD > /dev/null 2>&1
- DATAPOS=0
- fi
- fi
-
- if [ $ISFORMATTED = 0 ]
- then
- /sbin/eraseall $TARGET_MTD > /dev/null 2>&1
- ISFORMATTED=1
- fi
-
- echo ''
- echo '0% 100%'
- PROGSTEP=`expr $DATASIZE / $ONESIZE + 1`
- PROGSTEP=`expr 25 / $PROGSTEP`
- if [ $PROGSTEP = 0 ]
- then
- PROGSTEP=1
- fi
-
- if [ -e $TMPHEAD ]
- then
- VTMPNAME=$TMPPATH'/vtmp'`date '+%s'`'.tmp'
- MTMPNAME=$TMPPATH'/mtmp'`date '+%s'`'.tmp'
- /sbin/nandlogical $LOGOCAL_MTD READ $VERBLOCK 0x4000 $VTMPNAME > /dev/null 2>&1
- /sbin/nandlogical $LOGOCAL_MTD READ $MVRBLOCK 0x4000 $MTMPNAME > /dev/null 2>&1
-
- /sbin/verchg -v $VTMPNAME $TMPHEAD $MODULEID $MTD_PART_SIZE > /dev/null 2>&1
- /sbin/verchg -m $MTMPNAME $TMPHEAD $MODULEID $MTD_PART_SIZE > /dev/null 2>&1
- fi
-
- # Looks like Akita is quite unique when it comes to kernel flashing
+ if [ $DATASIZE -gt `printf "%d" $MTD_PART_SIZE` ]
+ then
+ echo "Error: File is too big to flash!"
+ echo "$FLASH_TYPE: [$DATASIZE] > [`printf "%d" ${MTD_PART_SIZE}`]"
+ return
+ fi
+
+ if [ "$ZAURUS" = "tosa" ] || [ "$ZAURUS" = "poodle" ]
+ then
+ #check version
+ /sbin/bcut -s 6 -o $TMPDATA $TMPHEAD
+
+ if [ `cat $TMPDATA` != "SHARP!" ] > /dev/null 2>&1
+ then
+ #no version info...
+ rm -f $TMPHEAD > /dev/null 2>&1
+ DATAPOS=0
+ fi
+ fi
+
+ if [ $ISFORMATTED = 0 ]
+ then
+ /sbin/eraseall $TARGET_MTD > /dev/null 2>&1
+ ISFORMATTED=1
+ fi
+
+ if [ -e $TMPHEAD ]
+ then
+ VTMPNAME=$TMPPATH'/vtmp'`date '+%s'`'.tmp'
+ MTMPNAME=$TMPPATH'/mtmp'`date '+%s'`'.tmp'
+ /sbin/nandlogical $LOGOCAL_MTD READ $VERBLOCK 0x4000 $VTMPNAME > /dev/null 2>&1
+ /sbin/nandlogical $LOGOCAL_MTD READ $MVRBLOCK 0x4000 $MTMPNAME > /dev/null 2>&1
+
+ /sbin/verchg -v $VTMPNAME $TMPHEAD $MODULEID $MTD_PART_SIZE > /dev/null 2>&1
+ /sbin/verchg -m $MTMPNAME $TMPHEAD $MODULEID $MTD_PART_SIZE > /dev/null 2>&1
+ fi
+
+ # Looks like Akita and Spitz are unique when it comes to kernel flashing
- if [ "$ZAURUS" = "akita" ] && [ $FLASH_TYPE = kernel ]; then
- echo $TARGETFILE':'$DATASIZE'bytes'
- echo ' ' > /tmp/data
- /sbin/nandlogical $LOGOCAL_MTD WRITE 0x60100 16 /tmp/data > /dev/null 2>&1
- /sbin/nandlogical $LOGOCAL_MTD WRITE 0xe0000 $DATASIZE $TARGETFILE > /dev/null 2>&1
- /sbin/nandlogical $LOGOCAL_MTD WRITE 0x21bff0 16 /tmp/data > /dev/null 2>&1
- else
+ if [ "$ZAURUS" = "akita" -o "$ZAURUS" = "c3x00" ] && [ "$FLASH_TYPE" = "kernel" ]
+ then
+# echo $TARGETFILE':'$DATASIZE'bytes'
+ echo ""
+ echo -n "Installing SL-Cxx00 kernel..."
+ echo ' ' > /tmp/data
+ test "$ZAURUS" = "akita" && /sbin/nandlogical $LOGOCAL_MTD WRITE 0x60100 16 /tmp/data > /dev/null 2>&1
+ /sbin/nandlogical $LOGOCAL_MTD WRITE 0xe0000 $DATASIZE $TARGETFILE > /dev/null 2>&1
+ test "$ZAURUS" = "akita" && /sbin/nandlogical $LOGOCAL_MTD WRITE 0x21bff0 16 /tmp/data > /dev/null 2>&1
+ echo "Done"
+ else
+
+ echo ''
+ echo '0% 100%'
+ PROGSTEP=`expr $DATASIZE / $ONESIZE + 1`
+ PROGSTEP=`expr 25 / $PROGSTEP`
+
+ if [ $PROGSTEP = 0 ]
+ then
+ PROGSTEP=1
+ fi
+
#loop
while [ $DATAPOS -lt $DATASIZE ]
do
@@ -246,27 +270,76 @@ do_flashing()
done
done
fi
- echo ''
-
- #finish
- rm -f $TMPPATH/*.bin > /dev/null 2>&1
+ echo ''
+
+ #finish
+ rm -f $TMPPATH/*.bin > /dev/null 2>&1
+
+ if [ $RESULT = 0 ]
+ then
+ if [ -e $VTMPNAME ]
+ then
+ /sbin/nandlogical $LOGOCAL_MTD WRITE $VERBLOCK 0x4000 $VTMPNAME > /dev/null 2>&1
+ rm -f $VTMPNAME > /dev/null 2>&1
+ fi
+
+ if [ -e $MTMPNAME ]
+ then
+ /sbin/nandlogical $LOGOCAL_MTD WRITE $MVRBLOCK 0x4000 $MTMPNAME > /dev/null 2>&1
+ rm -f $MTMPNAME > /dev/null 2>&1
+ fi
+
+ [ "$FLASH_TYPE" != "kernel" ] && echo 'Done.'
+ else
+ echo 'Error!'
+ fi
+}
- if [ $RESULT = 0 ]
- then
- if [ -e $VTMPNAME ]
- then
- /sbin/nandlogical $LOGOCAL_MTD WRITE $VERBLOCK 0x4000 $VTMPNAME > /dev/null 2>&1
- rm -f $VTMPNAME > /dev/null 2>&1
- fi
- if [ -e $MTMPNAME ]
- then
- /sbin/nandlogical $LOGOCAL_MTD WRITE $MVRBLOCK 0x4000 $MTMPNAME > /dev/null 2>&1
- rm -f $MTMPNAME > /dev/null 2>&1
- fi
- echo 'Done.'
- else
- echo 'Error!'
- fi
+update_uboot() {
+ # The flashing part of this function is based on pdaXrom's
+ # updater.sh
+
+ if test "$ENABLE_UBOOT_UPDATER" != "yes" -o -z "$1"
+ then
+ echo "u-boot updates not allowed."
+ return
+ fi
+
+ echo ""
+ echo "Installing u-boot bootloader:"
+
+ DATASIZE=`wc -c $TARGETFILE`
+ FSIZE=`echo $DATASIZE | cut -d' ' -f1`
+
+ echo -n "* Creating backup ($FSIZE Bytes)..."
+ if ( nandlogical /dev/mtd1 READ 0 $FSIZE /tmp/sharploader.bin ) > /dev/null 2>&1
+ then
+ echo "Ok"
+
+ echo -n "* Flashing u-boot..."
+ if ( nandlogical /dev/mtd1 WRITE 0 $FSIZE $1 ) > /dev/null 2>&1
+ then
+ echo "Success"
+ else
+ echo "FAILED"
+ echo "ERROR: Installation of u-boot failed!"
+
+ echo -n "* Trying to restore backup..."
+ if ( nandlogical /dev/mtd1 WRITE 0 $FSIZE /tmp/sharploader.bin ) > /dev/null 2>&1
+ then
+ echo "Success"
+ echo "Your old bootloader has been restored"
+ else
+ echo "FAILED"
+ echo "Sorry, it's NAND-Restore time for you =("
+ fi
+ fi
+ else
+ echo "FAILED"
+ echo "Could not create backup, aborting!"
+ echo "Your bootloader has not been altered in any way."
+ exit 1
+ fi
}
### Check model ###
@@ -300,13 +373,15 @@ case "$MODEL" in
;;
esac
+clear
+echo "---- Universal Zaurus Updater ZAURUS_UPDATER_VERSION ----"
echo 'MODEL: '$MODEL' ('$ZAURUS')'
mkdir -p $TMPPATH > /dev/null 2>&1
cd $DATAPATH/
-for TARGETFILE in zimage zImage zImage.bin zimage.bin ZIMAGE ZIMAGE.BIN initrd.bin INITRD.BIN hdimage1.tgz HDIMAGE1.TGZ
+for TARGETFILE in u-boot.bin U-BOOT.BIN zimage zImage zImage.bin zimage.bin ZIMAGE ZIMAGE.BIN initrd.bin INITRD.BIN hdimage1.tgz HDIMAGE1.TGZ
do
if [ ! -e $TARGETFILE ]
then
@@ -366,18 +441,23 @@ do
hdimage1.tgz)
if [ $UNPACKED_ROOTFS = 0 ]
then
- do_rootfs_extraction
+ do_rootfs_extraction
fi
;;
-
+
+ u-boot.bin)
+ if [ FLASHED_UBOOT != 1 ]
+ then
+ update_uboot "$TARGETFILE"
+ FLASHED_UBOOT="1"
+ fi
+ ;;
+
*)
;;
esac
done
-# starting shell to test -- remove this from final release
-/bin/sh
-
# reboot
exit 0
diff --git a/packages/zaurusd/files/alsa-6000x-default.state.patch b/packages/zaurusd/files/alsa-6000x-default.state.patch
new file mode 100644
index 0000000000..e019f3a117
--- /dev/null
+++ b/packages/zaurusd/files/alsa-6000x-default.state.patch
@@ -0,0 +1,750 @@
+--- zaurusd/config/alsa/6000x-default.state.old 2007-12-22 04:31:38.000000000 -0600
++++ zaurusd/config/alsa/6000x-default.state 2007-12-26 00:06:02.000000000 -0600
+@@ -37,13 +37,23 @@ state.Tosa {
+ }
+ control.5 {
+ comment.access 'read write'
++ comment.type INTEGER
++ comment.count 2
++ comment.range '0 - 31'
++ iface MIXER
++ name 'PCM Playback Volume'
++ value.0 23
++ value.1 23
++ }
++ control.6 {
++ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+ name 'Speaker Playback ZC Switch'
+ value true
+ }
+- control.6 {
++ control.7 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -51,7 +61,7 @@ state.Tosa {
+ name 'Speaker Playback Invert Switch'
+ value true
+ }
+- control.7 {
++ control.8 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -59,7 +69,7 @@ state.Tosa {
+ name 'Headphone Playback ZC Switch'
+ value true
+ }
+- control.8 {
++ control.9 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -67,7 +77,7 @@ state.Tosa {
+ name 'Mono Playback ZC Switch'
+ value false
+ }
+- control.9 {
++ control.10 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -76,7 +86,7 @@ state.Tosa {
+ name 'Mono Playback Volume'
+ value 0
+ }
+- control.10 {
++ control.11 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -85,16 +95,16 @@ state.Tosa {
+ name 'ALC Target Volume'
+ value 11
+ }
+- control.11 {
++ control.12 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 15'
+ iface MIXER
+ name 'ALC Hold Time'
+- value 0
++ value 2
+ }
+- control.12 {
++ control.13 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -103,7 +113,7 @@ state.Tosa {
+ name 'ALC Decay Time'
+ value 3
+ }
+- control.13 {
++ control.14 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -112,7 +122,7 @@ state.Tosa {
+ name 'ALC Attack Time'
+ value 2
+ }
+- control.14 {
++ control.15 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -124,7 +134,7 @@ state.Tosa {
+ name 'ALC Function'
+ value None
+ }
+- control.15 {
++ control.16 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -133,7 +143,7 @@ state.Tosa {
+ name 'ALC Max Volume'
+ value 7
+ }
+- control.16 {
++ control.17 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -142,7 +152,7 @@ state.Tosa {
+ name 'ALC ZC Timeout'
+ value 0
+ }
+- control.17 {
++ control.18 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -150,7 +160,7 @@ state.Tosa {
+ name 'ALC ZC Switch'
+ value false
+ }
+- control.18 {
++ control.19 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -158,7 +168,7 @@ state.Tosa {
+ name 'ALC NG Switch'
+ value false
+ }
+- control.19 {
++ control.20 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -168,7 +178,7 @@ state.Tosa {
+ name 'ALC NG Type'
+ value 'Constant Gain'
+ }
+- control.20 {
++ control.21 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -177,16 +187,16 @@ state.Tosa {
+ name 'ALC NG Threshold'
+ value 31
+ }
+- control.21 {
++ control.22 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Mic Headphone Volume'
+- value 3
++ value 7
+ }
+- control.22 {
++ control.23 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -195,7 +205,7 @@ state.Tosa {
+ name 'ALC Headphone Volume'
+ value 5
+ }
+- control.23 {
++ control.24 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -203,7 +213,7 @@ state.Tosa {
+ name 'Out3 Switch'
+ value false
+ }
+- control.24 {
++ control.25 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -211,7 +221,7 @@ state.Tosa {
+ name 'Out3 ZC Switch'
+ value true
+ }
+- control.25 {
++ control.26 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -220,7 +230,7 @@ state.Tosa {
+ name 'Out3 Volume'
+ value 0
+ }
+- control.26 {
++ control.27 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -229,7 +239,7 @@ state.Tosa {
+ name 'PCBeep Bypass Headphone Volume'
+ value 0
+ }
+- control.27 {
++ control.28 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -238,7 +248,7 @@ state.Tosa {
+ name 'PCBeep Bypass Speaker Volume'
+ value 0
+ }
+- control.28 {
++ control.29 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -247,16 +257,16 @@ state.Tosa {
+ name 'PCBeep Bypass Phone Volume'
+ value 0
+ }
+- control.29 {
++ control.30 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+ comment.range '0 - 7'
+ iface MIXER
+ name 'Aux Playback Headphone Volume'
+- value 6
++ value 5
+ }
+- control.30 {
++ control.31 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -265,7 +275,7 @@ state.Tosa {
+ name 'Aux Playback Speaker Volume'
+ value 0
+ }
+- control.31 {
++ control.32 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -274,7 +284,7 @@ state.Tosa {
+ name 'Aux Playback Phone Volume'
+ value 0
+ }
+- control.32 {
++ control.33 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -283,7 +293,7 @@ state.Tosa {
+ name 'Phone Volume'
+ value 0
+ }
+- control.33 {
++ control.34 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+@@ -293,7 +303,7 @@ state.Tosa {
+ value.0 23
+ value.1 23
+ }
+- control.34 {
++ control.35 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -301,7 +311,7 @@ state.Tosa {
+ name 'Capture 20dB Boost Switch'
+ value true
+ }
+- control.35 {
++ control.36 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -309,7 +319,7 @@ state.Tosa {
+ name 'Capture to Phone 20dB Boost Switch'
+ value true
+ }
+- control.36 {
++ control.37 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -317,7 +327,7 @@ state.Tosa {
+ name '3D Upper Cut-off Switch'
+ value false
+ }
+- control.37 {
++ control.38 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -325,7 +335,7 @@ state.Tosa {
+ name '3D Lower Cut-off Switch'
+ value false
+ }
+- control.38 {
++ control.39 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -334,7 +344,7 @@ state.Tosa {
+ name '3D Playback Volume'
+ value 0
+ }
+- control.39 {
++ control.40 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -344,7 +354,7 @@ state.Tosa {
+ name 'Bass Control'
+ value 'Adaptive Boost'
+ }
+- control.40 {
++ control.41 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -352,7 +362,7 @@ state.Tosa {
+ name 'Bass Cut-off Switch'
+ value true
+ }
+- control.41 {
++ control.42 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -360,7 +370,7 @@ state.Tosa {
+ name 'Tone Cut-off Switch'
+ value false
+ }
+- control.42 {
++ control.43 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -368,7 +378,7 @@ state.Tosa {
+ name 'Playback Attenuate (-6dB) Switch'
+ value false
+ }
+- control.43 {
++ control.44 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -377,7 +387,7 @@ state.Tosa {
+ name 'Bass Volume'
+ value 8
+ }
+- control.44 {
++ control.45 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -386,7 +396,7 @@ state.Tosa {
+ name 'Treble Volume'
+ value 5
+ }
+- control.45 {
++ control.46 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -394,7 +404,7 @@ state.Tosa {
+ name 'Capture ADC Switch'
+ value false
+ }
+- control.46 {
++ control.47 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 2
+@@ -405,17 +415,17 @@ state.Tosa {
+ value.0 '+0.75dB Steps'
+ value.1 '+0.75dB Steps'
+ }
+- control.47 {
++ control.48 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 2
+ comment.range '0 - 63'
+ iface MIXER
+ name 'Capture Volume'
+- value.0 63
+- value.1 63
++ value.0 0
++ value.1 0
+ }
+- control.48 {
++ control.49 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -423,7 +433,7 @@ state.Tosa {
+ name 'Capture ZC Switch'
+ value false
+ }
+- control.49 {
++ control.50 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -432,7 +442,7 @@ state.Tosa {
+ name 'Mic 1 Volume'
+ value 23
+ }
+- control.50 {
++ control.51 {
+ comment.access 'read write'
+ comment.type INTEGER
+ comment.count 1
+@@ -441,7 +451,7 @@ state.Tosa {
+ name 'Mic 2 Volume'
+ value 23
+ }
+- control.51 {
++ control.52 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -449,7 +459,7 @@ state.Tosa {
+ name 'Mic 20dB Boost Switch'
+ value false
+ }
+- control.52 {
++ control.53 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -457,7 +467,7 @@ state.Tosa {
+ name 'Speaker Mixer PCBeep Bypass Swi'
+ value false
+ }
+- control.53 {
++ control.54 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -465,7 +475,7 @@ state.Tosa {
+ name 'Speaker Mixer Aux Playback Swit'
+ value false
+ }
+- control.54 {
++ control.55 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -473,7 +483,7 @@ state.Tosa {
+ name 'Speaker Mixer Phone Bypass Swit'
+ value false
+ }
+- control.55 {
++ control.56 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -481,7 +491,7 @@ state.Tosa {
+ name 'Speaker Mixer Line Bypass Switc'
+ value false
+ }
+- control.56 {
++ control.57 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -489,7 +499,7 @@ state.Tosa {
+ name 'Speaker Mixer PCM Playback Swit'
+ value true
+ }
+- control.57 {
++ control.58 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -497,7 +507,7 @@ state.Tosa {
+ name 'Phone Mixer PCBeep Bypass Switc'
+ value false
+ }
+- control.58 {
++ control.59 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -505,7 +515,7 @@ state.Tosa {
+ name 'Phone Mixer Aux Playback Switch'
+ value false
+ }
+- control.59 {
++ control.60 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -513,7 +523,7 @@ state.Tosa {
+ name 'Phone Mixer Line Bypass Switch'
+ value false
+ }
+- control.60 {
++ control.61 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -521,7 +531,7 @@ state.Tosa {
+ name 'Phone Mixer PCM Playback Switch'
+ value false
+ }
+- control.61 {
++ control.62 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -529,7 +539,7 @@ state.Tosa {
+ name 'Phone Mixer Mic 1 Sidetone Swit'
+ value false
+ }
+- control.62 {
++ control.63 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+@@ -537,55 +547,103 @@ state.Tosa {
+ name 'Phone Mixer Mic 2 Sidetone Swit'
+ value false
+ }
+- control.63 {
++ control.64 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+- name 'HP Mixer PCBeep Bypass Switch'
++ name 'Right HP Mixer PCBeep Bypass Sw'
+ value false
+ }
+- control.64 {
++ control.65 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+- name 'HP Mixer Aux Playback Switch'
++ name 'Right HP Mixer Aux Playback Swi'
+ value false
+ }
+- control.65 {
++ control.66 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+- name 'HP Mixer Phone Bypass Switch'
++ name 'Right HP Mixer Phone Bypass Swi'
+ value false
+ }
+- control.66 {
++ control.67 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+- name 'HP Mixer Line Bypass Switch'
++ name 'Right HP Mixer Line Bypass Swit'
+ value false
+ }
+- control.67 {
++ control.68 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+- name 'HP Mixer PCM Playback Switch'
++ name 'Right HP Mixer PCM Playback Swi'
+ value true
+ }
+- control.68 {
++ control.69 {
+ comment.access 'read write'
+ comment.type BOOLEAN
+ comment.count 1
+ iface MIXER
+- name 'HP Mixer Mic Sidetone Switch'
++ name 'Right HP Mixer Mic Sidetone Swi'
+ value false
+ }
+- control.69 {
++ control.70 {
++ comment.access 'read write'
++ comment.type BOOLEAN
++ comment.count 1
++ iface MIXER
++ name 'Left HP Mixer PCBeep Bypass Swi'
++ value false
++ }
++ control.71 {
++ comment.access 'read write'
++ comment.type BOOLEAN
++ comment.count 1
++ iface MIXER
++ name 'Left HP Mixer Aux Playback Swit'
++ value false
++ }
++ control.72 {
++ comment.access 'read write'
++ comment.type BOOLEAN
++ comment.count 1
++ iface MIXER
++ name 'Left HP Mixer Phone Bypass Swit'
++ value false
++ }
++ control.73 {
++ comment.access 'read write'
++ comment.type BOOLEAN
++ comment.count 1
++ iface MIXER
++ name 'Left HP Mixer Line Bypass Switc'
++ value false
++ }
++ control.74 {
++ comment.access 'read write'
++ comment.type BOOLEAN
++ comment.count 1
++ iface MIXER
++ name 'Left HP Mixer PCM Playback Swit'
++ value true
++ }
++ control.75 {
++ comment.access 'read write'
++ comment.type BOOLEAN
++ comment.count 1
++ iface MIXER
++ name 'Left HP Mixer Mic Sidetone Swit'
++ value false
++ }
++ control.76 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -595,7 +653,7 @@ state.Tosa {
+ name 'Differential Source'
+ value Mic
+ }
+- control.70 {
++ control.77 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -607,7 +665,7 @@ state.Tosa {
+ name 'Mic Select Source'
+ value Differential
+ }
+- control.71 {
++ control.78 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -623,7 +681,7 @@ state.Tosa {
+ name 'Right Capture Select'
+ value Mic
+ }
+- control.72 {
++ control.79 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -639,7 +697,7 @@ state.Tosa {
+ name 'Left Capture Select'
+ value Mic
+ }
+- control.73 {
++ control.80 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -651,7 +709,7 @@ state.Tosa {
+ name 'Capture Phone Mux'
+ value Mute
+ }
+- control.74 {
++ control.81 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -661,7 +719,7 @@ state.Tosa {
+ name 'Speaker Mux'
+ value 'Headphone Mix'
+ }
+- control.75 {
++ control.82 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -673,7 +731,7 @@ state.Tosa {
+ name 'Out3 Mux'
+ value Left
+ }
+- control.76 {
++ control.83 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -685,7 +743,7 @@ state.Tosa {
+ name 'ALC Sidetone Mux'
+ value Stereo
+ }
+- control.77 {
++ control.84 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+@@ -698,15 +756,14 @@ state.Tosa {
+ name 'Jack Function'
+ value Headphone
+ }
+- control.78 {
++ control.85 {
+ comment.access 'read write'
+ comment.type ENUMERATED
+ comment.count 1
+- comment.item.0 Auto
+- comment.item.1 On
+- comment.item.2 Off
++ comment.item.0 On
++ comment.item.1 Off
+ iface MIXER
+ name 'Speaker Function'
+- value Auto
++ value On
+ }
+ }
diff --git a/packages/zaurusd/files/zaurus-hinge.bl-off b/packages/zaurusd/files/zaurus-hinge.bl-off
index ec3cefb2ca..ba6746ce1b 100644
--- a/packages/zaurusd/files/zaurus-hinge.bl-off
+++ b/packages/zaurusd/files/zaurus-hinge.bl-off
@@ -6,13 +6,14 @@
# Filename: zaurus-hinge.bl-off
# Date: 04-Jun-06
-#test -z "${ZD_BINDIR}" && ZD_BINDIR="/usr/bin"
-#${ZD_BINDIR}/bl off
-
-
-STEP=5
DRIVER="`ls /sys/class/backlight/|head -n 1`"
BRIGHTNESS_FILE="/sys/class/backlight/$DRIVER/brightness"
-cat "$BRIGHTNESS_FILE" > /var/run/display_brightness.tmp
-echo 0 > "$BRIGHTNESS_FILE"
+if mkdir /var/run/display_brightness.lock
+then
+ cat "$BRIGHTNESS_FILE" > /var/run/display_brightness.tmp
+ echo 0 > "$BRIGHTNESS_FILE"
+ rm -rf /var/run/display_brightness.lock
+else
+ echo "BRIGHTNESS IS LOCKED"
+fi
diff --git a/packages/zaurusd/files/zaurus-hinge.bl-on b/packages/zaurusd/files/zaurus-hinge.bl-on
index 61598155f2..58227e8c5a 100644
--- a/packages/zaurusd/files/zaurus-hinge.bl-on
+++ b/packages/zaurusd/files/zaurus-hinge.bl-on
@@ -7,24 +7,39 @@
# Date: 04-Jun-06
test -z "${ZD_BINDIR}" && ZD_BINDIR="/usr/bin"
-${ZD_BINDIR}/bl on
+test -x ${ZD_BINDIR}/bl && ${ZD_BINDIR}/bl on
-# If the backlight does not come back on after a suspend, the driver is
-# still "on" (hence "bl on" does nothing) with a brightness of "0"
-( if test "`bl | awk '{print $2}'`" = "0"
-then
- x=0
- while test "$x" != 4
- do
- bl 10
- usleep 10
- bl 50
- usleep 10
-
- let x=$x+1
- done
+BL="fakeBl"
+
+fakeBl() {
+
+
+ case "$1" in
+ on) test -n "$2" && echo "$2" > "$BL_DRIVER" ;;
+ "") echo "on `cat "$BL_DRIVER"`";;
+ *) echo "$1" > "$BL_DRIVER" ;;
+ esac
+}
+
+for dir in `ls -1 /sys/class/backlight/`
+do
+ if test -e /sys/class/backlight/$dir/brightness
+ then
+ echo "Using [$dir] backlight driver"
+ BL_DRIVER="/sys/class/backlight/$dir/brightness"
+ break
+ fi
+done
+
+
+echo "### `$BL` ###"
+( if test "`$BL | awk '{print $2}'`" = "0"
+then
+
+ $BL 20
+
if mkdir /var/run/display_brightness.lock
then
if test -e /var/run/display_brightness.tmp
@@ -34,12 +49,8 @@ then
if test "$OLD_VALUE" -gt 1
then
- STEP=5
- DRIVER="`ls /sys/class/backlight/|head -n 1`"
- BRIGHTNESS_FILE="/sys/class/backlight/$DRIVER/brightness"
-
echo "SETTING $OLD_VALUE!"
- echo "$OLD_VALUE" > "$BRIGHTNESS_FILE"
+ $BL "$OLD_VALUE"
rm /var/run/display_brightness.tmp
echo "FINISH!"
fi
diff --git a/packages/zaurusd/zaurusd_svn.bb b/packages/zaurusd/zaurusd_svn.bb
index 8bc0b2ba58..3ea0d2b22f 100644
--- a/packages/zaurusd/zaurusd_svn.bb
+++ b/packages/zaurusd/zaurusd_svn.bb
@@ -4,12 +4,13 @@ LICENSE = "GPL"
DEPENDS = "tslib"
RDEPENDS = "procps"
PV = "0.0+svn${SRCDATE}"
-PR = "r14"
+PR = "r16"
SRC_URI = "svn://svn.o-hand.com/repos/misc/trunk;module=zaurusd;proto=http \
file://zaurus-hinge.in \
file://add-poodle.patch;patch=1 \
file://alsa-cxx00-default.state.patch;patch=1 \
+ file://alsa-6000x-default.state.patch;patch=1 \
file://disable-alsa-handling.patch;patch=1 \
file://zaurus-hinge.matchbox-portrait \
file://zaurus-hinge.matchbox-landscape \
diff --git a/packages/zbedic/libbedic_1.0.bb b/packages/zbedic/libbedic_1.1.bb
index 4ffb13cee0..4ffb13cee0 100644
--- a/packages/zbedic/libbedic_1.0.bb
+++ b/packages/zbedic/libbedic_1.1.bb
diff --git a/packages/zbedic/zbedic_1.0.bb b/packages/zbedic/zbedic_1.2.bb
index afdfdd5350..afdfdd5350 100644
--- a/packages/zbedic/zbedic_1.0.bb
+++ b/packages/zbedic/zbedic_1.2.bb
diff --git a/packages/zroadmap/files/qt2-fixes-r1.patch b/packages/zroadmap/files/qt2-fixes-r1.patch
deleted file mode 100644
index 24fe1c9bdb..0000000000
--- a/packages/zroadmap/files/qt2-fixes-r1.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#
-# Signed off by Michael 'Mickey' Lauer <mickey@Vanille.de>
-#
-
---- src/qt/qt_main.cc~qt2-fixes-r1.patch
-+++ src/qt/qt_main.cc
-@@ -137,7 +137,7 @@
- switch (orientation[0]) {
- case 't':
- case 'T': break;
--
-+#ifndef QWS
- case 'b':
- case 'B': moveDockWindow (toolBar, DockBottom); break;
-
-@@ -146,7 +146,7 @@
-
- case 'r':
- case 'R': moveDockWindow (toolBar, DockRight); break;
--
-+#endif
- default: roadmap_log (ROADMAP_FATAL,
- "Invalid toolbar orientation %s", orientation);
- }
---- src/qt/Makefile~qt2-fixes-r1.patch
-+++ src/qt/Makefile
-@@ -19,7 +19,7 @@
-
- ifeq ($(DESKTOP),QPE)
- CFLAGS += -I$(QTDIR)/include -DQWS
-- LIBS += -lqte -lqpe
-+ LIBS += -lqpe
- INSTALLDIR=$(QTDIR)
- endif
-
diff --git a/packages/zroadmap/files/qt2-fixes.patch b/packages/zroadmap/files/qt2-fixes.patch
deleted file mode 100644
index 46b17b8cfb..0000000000
--- a/packages/zroadmap/files/qt2-fixes.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- roadmap-1.0.12/src/qt/qt_main.cc~qt2-fixes
-+++ roadmap-1.0.12/src/qt/qt_main.cc
-@@ -123,7 +123,7 @@
- switch (orientation[0]) {
- case 't':
- case 'T': break;
--
-+#ifndef QWS
- case 'b':
- case 'B': moveDockWindow (toolBar, DockBottom); break;
-
-@@ -132,7 +132,7 @@
-
- case 'r':
- case 'R': moveDockWindow (toolBar, DockRight); break;
--
-+#endif
- default: roadmap_log (ROADMAP_FATAL,
- "Invalid toolbar orientation %s", orientation);
- }
diff --git a/packages/zroadmap/zroadmap_1.0.12.bb b/packages/zroadmap/zroadmap_1.0.12.bb
deleted file mode 100644
index 5b9161cfce..0000000000
--- a/packages/zroadmap/zroadmap_1.0.12.bb
+++ /dev/null
@@ -1,53 +0,0 @@
-DESCRIPTION = "RoadMap is a program that provides a car navigation for Linux and UNIX. \
-It displays a map of the streets, tracks the position provided by a NMEA-compliant \
-GPS receiver, identifies the street matching this GPS position and announces the name \
-of the crossing street at the next intersection. A rudimentary trip feature allows \
-RoadMap to display some basic navigation information (distance to the destination, \
-direction, speed, etc..). Voice messages are generated that duplicate some of the screen information."
-SECTION = "opie/applications"
-PRIORITY = "optional"
-AUTHOR = "Pascal Martin <pascal.martin@iname.com>"
-HOMEPAGE = "http://roadmap.digitalomaha.net/maps.html"
-LICENSE = "GPL"
-PR = "r0"
-
-SRC_URI = "http://www.roadmap.digitalomaha.net/roadmap/roadmap_1_0_12p2_src.tar.gz \
- file://qt2-fixes.patch;pnum=2;patch=1 \
- http://roadmap.digitalomaha.net/maps/usdir.rdm.tgz \
- file://zroadgps.png"
-S = "${WORKDIR}/roadmap-${PV}/src"
-
-inherit palmtop
-
-QT_LIBRARY = '${@base_conditional("PALMTOP_USE_MULTITHREADED_QT", "yes", "qte-mt", "qte",d)}'
-QT_LIBRARY_append_c7x0 = " -laticore"
-
-EXTRA_OEMAKE = 'DESKTOP=QPE MOC=${OE_QMAKE_MOC} UIC=${OE_QMAKE_UIC} \
- GUICFLAGS="-I${OE_QMAKE_INCDIR_QT} -I${S} -DQWS" \
- GUILDFLAGS="-lz -lpng -ljpeg -lts -l${QT_LIBRARY} -lqpe -Wl,-rpath-link,${STAGING_LIBDIR} -L${STAGING_LIBDIR} -L${QTDIR}/lib"'
-PARALLEL_MAKE = ""
-
-do_configure() {
- echo removing pregenerated stuff
- find . -name "moc*"|xargs rm -f
-}
-
-do_compile() {
- oe_runmake libguiroadmap.a libguiroadgps.a libroadmap.a unix/libosroadmap.a
- cd qt && oe_runmake
-}
-
-do_install() {
- cd qt
- install -d ${D}${palmtopdir}/bin
- install -d ${D}${palmtopdir}/apps/Applications
- install -d ${D}${palmtopdir}/pics
- install -m 0755 qtroadmap ${D}${palmtopdir}/bin/roadmap
- install -m 0755 qtroadgps ${D}${palmtopdir}/bin/roadgps
- install -m 0644 ../roadmap.png ${D}${palmtopdir}/pics/zroadmap.png
- install -m 0644 ${WORKDIR}/zroadgps.png ${D}${palmtopdir}/pics/zroadgps.png
- install -m 0644 ipkg/*.desktop ${D}${palmtopdir}/apps/Applications/
- install -d ${D}${palmtopdir}/share/roadmap/
- install -m 0644 ../sprites ../schema ../preferences ${D}${palmtopdir}/share/roadmap/
- install -m 0644 ${WORKDIR}/usdir.rdm ${D}${palmtopdir}/share/roadmap/
-}
diff --git a/packages/zroadmap/zroadmap_cvs.bb b/packages/zroadmap/zroadmap_cvs.bb
deleted file mode 100644
index fd9cc5e95f..0000000000
--- a/packages/zroadmap/zroadmap_cvs.bb
+++ /dev/null
@@ -1,54 +0,0 @@
-DESCRIPTION = "RoadMap is a program that provides a car navigation for Linux and UNIX. \
-It displays a map of the streets, tracks the position provided by a NMEA-compliant \
-GPS receiver, identifies the street matching this GPS position and announces the name \
-of the crossing street at the next intersection."
-SECTION = "opie/applications"
-PRIORITY = "optional"
-AUTHOR = "Pascal Martin <pascal.martin@iname.com>"
-HOMEPAGE = "http://roadmap.digitalomaha.net/maps.html"
-DEPENDS = "popt expat"
-LICENSE = "GPL"
-PV = "1.0.12+cvs-${SRCDATE}"
-PR = "r0"
-
-SRC_URI = "cvs://anonymous:@roadmap.cvs.sf.net/cvsroot/roadmap;module=roadmap \
- file://qt2-fixes-r1.patch;pnum=1;patch=1 \
- http://roadmap.digitalomaha.net/maps/usdir.rdm.tgz \
- file://zroadgps.png"
-S = "${WORKDIR}/roadmap/src"
-
-inherit palmtop
-
-QT_LIBRARY = '${@base_conditional("PALMTOP_USE_MULTITHREADED_QT", "yes", "qte-mt", "qte",d)}'
-QT_LIBRARY_append_c7x0 = " -laticore"
-
-EXTRA_OEMAKE = 'DESKTOP=QPE MOC=${OE_QMAKE_MOC} UIC=${OE_QMAKE_UIC} QTDIR=${QTDIR} \
- CFLAGS="-DQWS -DQT_NO_ROTATE -I${S} ${OE_QMAKE_CXXFLAGS} -I${OE_QMAKE_INCDIR_QT}" \
- LDFLAGS="${OE_QMAKE_LDFLAGS} -L${OE_QMAKE_LIBDIR_QT} -Wl,-rpath-link,${OE_QMAKE_LIBDIR_QT}" '
-PARALLEL_MAKE = ""
-
-do_configure() {
- echo removing pregenerated stuff
- find . -name "moc*"|xargs rm -f
-}
-
-do_compile() {
- oe_runmake libguiroadmap.a libguiroadgps.a libroadmap.a
- oe_runmake -C gpx libgpx.a
- oe_runmake -C unix libosroadmap.a
- oe_runmake -C qt qtroadmap qtroadgps
-}
-
-do_install() {
- install -d ${D}${palmtopdir}/bin
- install -d ${D}${palmtopdir}/apps/Applications
- install -d ${D}${palmtopdir}/pics
- install -m 0755 qt/qtroadmap ${D}${palmtopdir}/bin/roadmap
- install -m 0755 qt/qtroadgps ${D}${palmtopdir}/bin/roadgps
- install -m 0644 roadmap.png ${D}${palmtopdir}/pics/zroadmap.png
- install -m 0644 ${WORKDIR}/zroadgps.png ${D}${palmtopdir}/pics/zroadgps.png
- install -m 0644 qt/ipkg/*.desktop ${D}${palmtopdir}/apps/Applications/
- install -d ${D}${palmtopdir}/share/roadmap/
- install -m 0644 sprites schema preferences ${D}${palmtopdir}/share/roadmap/
- install -m 0644 ${WORKDIR}/usdir.rdm ${D}${palmtopdir}/share/roadmap/
-}
diff --git a/site/arm-linux b/site/arm-linux
index 868d982ec4..033366a93c 100644
--- a/site/arm-linux
+++ b/site/arm-linux
@@ -176,3 +176,6 @@ ac_cv_func_pthread_attr_getstack=${ac_cv_func_pthread_attr_getstack=yes}
ac_cv_member_struct_sockaddr_sa_len=${ac_cv_member_struct_sockaddr_sa_len=no}
ac_cv_gnet_have_abstract_sockets=${ac_cv_gnet_have_abstract_sockets=no}
gnet_sockaddr_family_field_name=${gnet_sockaddr_family_field_name=ss_family}
+
+# rp-pppoe
+rpppoe_cv_pack_bitfields=${rpppoe_cv_pack_bitfields=rev}
diff --git a/site/avr32-common b/site/avr32-common
index 5bce901caa..b5b176cad7 100644
--- a/site/avr32-common
+++ b/site/avr32-common
@@ -1,3 +1,25 @@
glib_cv_stack_grows=${glib_cv_stack_grows=no}
ac_cv_func_posix_getpwuid_r=${ac_cv_func_posix_getpwuid_r=yes}
glib_cv_uscore=${glib_cv_uscore=no}
+ac_cv_func_setpgrp_void=${ac_cv_func_setpgrp_void=yes}
+
+#dbus-glib
+ac_cv_func_posix_getpwnam_r=${ac_cv_func_posix_getpwnam_r=yes}
+
+# set MALLOC_GLIBC_COMPAT=y in your uclibc .config for this
+ac_cv_func_malloc_0_nonnull=${ac_cv_func_malloc_0_nonnull=yes}
+
+#gstreamer
+as_cv_unaligned_access=${as_cv_unaligned_access=no}
+
+#readline
+bash_cv_have_mbstate_t=${bash_cv_have_mbstate_t=yes}
+
+#libpcap
+ac_cv_linux_vers=${ac_cv_linux_vers=2}
+
+#startup notification
+ac_cv_func_realloc_works=${ac_cv_func_realloc_works=yes}
+ac_cv_func_realloc_0_nonnull=${ac_cv_func_realloc_0_nonnull=yes}
+lf_cv_sane_realloc=yes
+